<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>AceSyntax</name>
	<version>1.0.1</version>
    <mincmsversion>2.1</mincmsversion>
	<help><![CDATA[PGRpdiBpZD0icGFnZV90YWJzIj48ZGl2IGlkPSJzdXBwb3J0IiBjbGFzcz0nYWN0aXZlJz5TdXBwb3J0PC9kaXY+PGRpdiBpZD0iZ2VuZXJhbCI+R2VuZXJhbDwvZGl2PjxkaXYgaWQ9ImJhY2tlbmQiPkJhY2tlbmQgVXNlPC9kaXY+PGRpdiBpZD0iZnJvbnRlbmQiPkZyb250ZW5kIFVzZTwvZGl2PjxkaXYgaWQ9InNob3J0Y3V0cyI+U2hvcnRjdXRzPC9kaXY+PGRpdiBpZD0ibW9kZXNfdGhlbWVzIj5Nb2RlcyBhbmQgVGhlbWVzPC9kaXY+PGRpdiBpZD0idHJvdWJsZXNob290aW5nIj5Ucm91Ymxlc2hvb3Rpbmc8L2Rpdj48ZGl2IGlkPSJjb3B5cmlnaHQiPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvZGl2PjwvZGl2PjwhLS0gRW5kVGFiSGVhZGVycyAtLT48ZGl2IGNsYXNzPSJjbGVhcmIiPjwvZGl2PjxkaXYgaWQ9InBhZ2VfY29udGVudCI+PGRpdiBpZD0ic3VwcG9ydF9jIj48aDM+VGhpcyBtb2R1bGUgaXMgYnJvdWdodCB0byB5b3UgYnk6PC9oMz48dWw+PGxpPkZlcm5hbmRvIE1vcmdhZG8gW2pvbW9yZyBhdCBzbS1hcnQtbGFiIGRvdCBjb21dLjwvbGk+PGxpPlJvbGYgVGphc3NlbnMgW2luZm8gYXQgY21zY2FuYmVzaW1wbGUgZG90IG9yZ10uPC9saT48L3VsPjxoMz5TdXBwb3J0PC9oMz48cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIGFueSBjb21tZXJjaWFsIHN1cHBvcnQuIElmIHlvdSBoYXZlIHByb2JsZW1zLCBhc2sgZm9yIGhlbHAgaW4gdGhlOjwvcD48dWw+PGxpPjxhIGhyZWY9Imh0dHBzOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcvIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5DTVMgTWFkZSBTaW1wbGUgZm9ydW1zPC9hPjs8L2xpPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZy9zdXBwb3J0L2RvY3VtZW50YXRpb24vY2hhdC8iIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsiPlNsYWNrIGNoYXQ8L2E+OzwvbGk+PGxpPm9yIHdyaXRlIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IuPC9saT48L3VsPjwvZGl2PiA8IS0tIEVuZFRhYiAtLT48ZGl2IGlkPSJnZW5lcmFsX2MiPjxoMz5XaGF0IGRvZXMgdGhpcyBtb2R1bGUgZG8/PC9oMz48cD48aW1nIHNyYz0iaHR0cDovL2xvY2FsaG9zdC8yLjIuMTIvbW9kdWxlcy9BY2VTeW50YXgvaW1hZ2VzL2VkaXRvcl9zY3JlZW5zaG90LmpwZyIgYWx0PSJzY3JlZW5zaG90IGVkaXRvciIgc3R5bGU9ImZsb2F0OiByaWdodDsgbWFyZ2luOiAxMHB4OyIgLz5UaGUgQWNlU3ludGF4IG1vZHVsZSBpcyBhIFN5bnRheGhpZ2hsaWdodGVyIHBsdWdpbiBmb3IgQ01TIE1hZGUgU2ltcGxlIHVzaW5nIDxzdHJvbmc+QWNlPC9zdHJvbmc+LCBhIHN0YW5kYWxvbmUgY29kZSBlZGl0b3Igd3JpdHRlbiBpbiBKYXZhU2NyaXB0LjxiciAvPkdvYWwgb2YgQWNlIGNvZGUgZWRpdG9yIGdyb3VwIGlzIHRvIGNyZWF0ZSBhIHdlYiBiYXNlZCBjb2RlIGVkaXRvciB0aGF0IG1hdGNoZXMgYW5kIGV4dGVuZHMgdGhlIGZlYXR1cmVzLCB1c2FiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIGV4aXN0aW5nIG5hdGl2ZSBlZGl0b3JzIHN1Y2ggYXMgVGV4dE1hdGUsIFZpbSBvciBFY2xpcHNlLjxiciAvPkFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20iPkNsb3VkOSBJREU8L2E+IGFuZCB0aGUgc3VjY2Vzc29yIG9mIHRoZSBNb3ppbGxhIFNreXdyaXRlciAoQmVzcGluKSBQcm9qZWN0LjwvcD48aDQ+QWNlIEZlYXR1cmVzOjwvaDQ+PHVsPjxsaT5TeW50YXggaGlnaGxpZ2h0aW5nPC9saT48bGk+QXV0b21hdGljIGluZGVudCBhbmQgb3V0ZGVudDwvbGk+PGxpPkFuIG9wdGlvbmFsIGNvbW1hbmQgbGluZTwvbGk+PGxpPkhhbmRsZXMgaHVnZSBkb2N1bWVudHMgKDEwMCwwMDAgbGluZXMgYW5kIG1vcmUgYXJlIG5vIHByb2JsZW0pPC9saT48bGk+RnVsbHkgY3VzdG9taXphYmxlIGtleSBiaW5kaW5ncyBpbmNsdWRpbmcgVkkgYW5kIEVtYWNzIG1vZGVzPC9saT48bGk+VGhlbWVzIChUZXh0TWF0ZSB0aGVtZXMgY2FuIGJlIGltcG9ydGVkKTwvbGk+PGxpPlNlYXJjaCBhbmQgcmVwbGFjZSB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnM8L2xpPjxsaT5IaWdobGlnaHQgbWF0Y2hpbmcgcGFyZW50aGVzZXM8L2xpPjxsaT5Ub2dnbGUgYmV0d2VlbiBzb2Z0IHRhYnMgYW5kIHJlYWwgdGFiczwvbGk+PGxpPkRpc3BsYXlzIGhpZGRlbiBjaGFyYWN0ZXJzPC9saT48bGk+RHJhZyBhbmQgZHJvcCB0ZXh0IHVzaW5nIHRoZSBtb3VzZTwvbGk+PGxpPkxpbmUgd3JhcHBpbmc8L2xpPjxsaT5VbnN0cnVjdHVyZWQgLyB1c2VyIGNvZGUgZm9sZGluZzwvbGk+PGxpPkxpdmUgc3ludGF4IGNoZWNrZXIgKGN1cnJlbnRseSBKYXZhU2NyaXB0L0NvZmZlZVNjcmlwdCk8L2xpPjwvdWw+PGgzPkFjZSBpcyBob3N0ZWQgb24gR2l0SHViPC9oMz48cD5UaGUgQWNlIHNvdXJjZSBjb2RlIGlzIGhvc3RlZCBvbiBHaXRIdWIuIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNb3ppbGxhIHRyaS1saWNlbnNlIChNUEwvR1BML0xHUEwpLjxiciAvPlRoaXMgaXMgdGhlIHNhbWUgbGljZW5zZSB1c2VkIGJ5IEZpcmVmb3guIFRoaXMgbGljZW5zZSBpcyBmcmllbmRseSB0byBhbGwga2luZHMgb2YgcHJvamVjdHMsIHdoZXRoZXIgb3BlbiBzb3VyY2Ugb3Igbm90LjxiciAvPlRha2UgY2hhcmdlIG9mIHlvdXIgZWRpdG9yIGFuZCBhZGQgeW91ciBmYXZvcml0ZSBsYW5ndWFnZSBoaWdobGlnaHRpbmcgYW5kIGtleWJpbmRpbmdzITwvcD48L2Rpdj4gPCEtLSBFbmRUYWIgLS0+PGRpdiBpZD0iYmFja2VuZF9jIj48aDM+VXNpbmcgQWNlU3ludGF4IE1vZHVsZTwvaDM+PHA+VXNpbmcgQWNlU3ludGF4IE1vZHVsZSBpcyBzaW1wbGUuIEFmdGVyIHRoZSBtb2R1bGUgaXMgaW5zdGFsbGVkIGdvIHRvICJNeSBQcmVmZXJlbmNlcyAmcmFxdW87IFVzZXIgUHJlZmVyZW5jZXMiIGFuZCBjaG9vc2UgQWNlU3ludGF4IGFzIHlvdXIgU3ludGF4aGlnaGxpZ2h0ZXIgb2YgY2hvaWNlIGZyb20gIlNlbGVjdCBzeW50YXggaGlnaGxpZ2h0ZXIgdG91c2U6IiBkcm9wZG93bi48YnIgLz5NYWtlIHN1cmUgeW91IGhhdmUgJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyBQZXJtc2lzc2lvbi48L3A+PGgzPlNldHRpbmdzPC9oMz48cD5Zb3UgY2FuIGNoYW5nZSBkZWZhdWx0IFNldHRpbmdzLCBNb2RlcyBhbmQgVGhlbWVzIGF0ICJNeSBQcmVmZXJlbmNlcyAmcmFxdW87IEFjZVN5bnRheCI8L3A+PC9kaXY+IDwhLS0gRW5kVGFiIC0tPjxkaXYgaWQ9ImZyb250ZW5kX2MiPjxwPlRoaXMgbW9kdWxlIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBmcm9udGVuZCBzeW50YXhoaWdobGlnaHRlci48cD48cD5UaGVyZSBhcmUgYSBmZXcgc3RlcHMgeW91IGhhdmUgdG8gdGFrZSBmb3IgaXQgdG8gd29yay4gQWNlIGlzIGltcGxlbWVudGVkIGFzIGEgalF1ZXJ5IHBsdWdpbiBzbyBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBmcmFtZXdvcmsgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSB0byB3b3JrLiBUbyBnaXZlIHlvdSBtb3JlIHZlcnNhdGlsaXR5IHlvdSBjYW4gaW5jbHVkZSBqUXVlcnkgaW4gYSBudW1iZXIgb2YgZGlmZmVyZW50IHdheXM6PC9wPjx1bD48bGk+eW91IGNhbiBpbmNsdWRlIGl0IHlvdXJzZWxmIGlmIHlvdXIgdGVtcGxhdGUgZG9lc24ndCBhbHJlYWR5IHVzZSBpdDs8L2xpPjxsaT55b3UgbWF5IHVzZSBDTVNNUyA8Yj48Y29kZT57Y21zX2pxdWVyeX08L2NvZGU+PC9iPiB0YWcgPGVtPihiZSBhd2FyZSB0aGF0IHRoaXMgdGFnIGlzIGRlcHJlY2F0ZWQgYW5kIGlzIHJlbW92ZWQgZnJvbSBDTVMgY29yZSBpbiB1cGNvbWluZyByZWxlYXNlIDIuMyk8L2VtPjs8L2xpPjxsaT55b3UgbWF5IHVzZSBBY2VTeW50YXggb3duIFNtYXJ0eSBoZWxwZXIgPGI+PGNvZGU+e2FjZXN5bjo6anMoMSl9PC9jb2RlPjwvYj4gKHNlZSBub3RlcyBiZWxvdyk7PC9saT48bGk+eW91IG1heSB1c2UgYSAzcmQgcGFydHkgcGx1Z2luIGlmIHlvdSBwcmVmZXI7PC9saT48L3VsPjxwPmpRdWVyeSBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIHRlbXBsYXRlIGVpdGhlciBpbiB0aGUgSFRNTCA8Yj48Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+PC9iPiBzZWN0aW9uIG9yIHJpZ2h0IGJlZm9yZSB0aGUgY2xvc2luZyA8Yj48Y29kZT4mbHQ7L2JvZHkmZ3Q7PC9jb2RlPjwvYj4gdGFnLiBUaGUgPGI+PGNvZGU+e2FjZXN5bjo6anMoKX08L2NvZGU+PC9iPiB0YWcgbXVzdCBiZSByaWdodCBhZnRlciBvciBldmVuIGF0IHRoZSBlbmQgb2YgYW55IHBsdWdpbnMgaW5jbHVkZWQgZm9yIGpRdWVyeS48cD48cD5Ob3RlIHRoYXQgPGI+PGNvZGU+e2FjZXN5bjo6anMoKX08L2NvZGU+PC9iPiBtYXkgaGF2ZSBhIHBhcmFtZXRlciB3aGljaCBtYXkgYmUgPGI+MTwvYj4sIDxiPjA8L2I+IG9yIGVtcHR5IGluIHdoaWNoIGNhc2UgaXQgd2lsbCBhc3N1bWUgPGI+MDwvYj46IHRoaXMgd2lsbCB0ZWxsIEFjZVN5bnRheCB3aGV0aGVyIHRvIGluY2x1ZGUgYSBsaW5rIHRvIGpRdWVyeSBDRE4gb3Igbm90LiBJZiBub3Qgb25seSB0aGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IG9mIEFjZSB3aWxsIGJlIGluY2x1ZGVkLjxwPjxwPkFsc28gcmVxdWlyZWQgaXMgdGhlIDxiPjxjb2RlPnthY2VzeW46OmNzcygpfTwvY29kZT48L2I+IHdoaWNoIHVubGlrZSB0aGUganMgcGx1Z2luIDxiPm11c3Q8L2I+IGJlIGluY2x1ZGVkIGluIHRoZSBIVE1MIDxiPjxjb2RlPiZsdDtoZWFkJmd0OzwvY29kZT48L2I+IHNlY3Rpb24gYXMgaXQgaW5jbHVkZXMgdGhlIENTUyByZXNldCBmb3IgdGhlIGNvbnRhaW5lcnMgb2YgdGhlIGNvZGUgdG8gaGlnaGxpZ2h0PC9wPjxwPkZpbmFseSBhZGQgYSBjYWxsIHRvIHNwZWNpZnkgd2hpY2ggYXJlYSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQsIGZvciBleGFtcGxlIDxiPjxjb2RlPnthY2VfY29kZX0geW91ciBjb2RlIHsvYWNlX2NvZGV9PC9jb2RlPjwvYj4gaW4geW91ciBjb250ZW50LjwvcD48cD5Zb3UgY2FuIGNhbGwgdGhlIGJsb2NrIHBsdWdpbiBhcyBtYW55IHRpbWVzIGluIGEgc2luZ2xlIHBhZ2UgYXMgeW91IHdoaWNoOiBBY2VTeW50YXggd2lsbCBhdXRvbWF0aWNhbHkgYWRkIGFuIHVuaXF1ZSBpZCB0byBlYWNoIGNvbnRhaW5lciBidXQgeW91IGNhbiBhbHdheXMgc3BlY2lmeSBhbiBpZCBpZiBuZWVkZWQuPC9wPjxwPlRvIGF2b2lkIGhhdmluZyB0byByZXBlYXQgdGhlIHNhbWUgcGFyYW1ldGVyIG9uIGV2ZXJ5IHRhZywgQWNlU3ludGF4IGhhcyBhIHRhZyA8Yj48Y29kZT57YWNlX3BhZ2VfcmVzZXR9PC9jb2RlPjwvYj4gd2hlcmUgeW91IGNhbiBhZGQgdGhlIGFjY2VwdGVkIHBhcmFtZXRlcnMgb25jZSBhbmQgdGhleSB3aWxsIGJlIHVzZWQgYnkgYWxsIHN1YnNlcXVlbnQgdGFncyBvbiB0aGUgc2FtZSBwYWdlLjwvcD48cD5QbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGlzIGFuIGhpZXJhcmNoeSBieSB3aGljaCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbjo8L3A+PHVsPjxsaT5wYXJhbWV0ZXJzIHNldCBpbiBlYWNoIGJsb2NrIHRhZyBoYXZlIHByZWNlZGVuY2Ugb3ZlciBhbGwgdGhlIHJlc3Q7PC9saT48bGk+cGFyYW1ldGVycyBzZXQgaW4gPGI+PGNvZGU+e2FjZV9wYWdlX3Jlc2V0fTwvY29kZT48L2I+IHdpbGwgYWZmZWN0IGFsbCBzdWJzZXF1ZW50IHRhZ3MgaW4gdGhlIHBhZ2UgZXhjZXB0IHdoZXJlIHRoZSBibG9jayB0YWdzIGhhdmUgc3BlY2lmaWMgb3ZlcnJpZGVzOzwvbGk+PGxpPmlmIG5vIHBhcmFtZXRlcnMgYXJlIHNldCBpbiBhbnkgb2YgdGhlIHRhZ3Mgb3IgPGI+PGNvZGU+e2FjZV9wYWdlX3Jlc2V0fTwvY29kZT48L2I+IGlzIG5vdCB1c2VkLCB0aGUgcHJlZmVyZW5jZXMgc2V0IGluIHRoZSBhZG1pbiBwYW5lbCBhcmUgdXNlZDs8L2xpPjwvdWw+PGgzPlNvIGhvdyBkbyB5b3UgdXNlIGl0PzwvaDM+PHA+Rmlyc3QgaW5jbHVkZSBqUXVlcnkgKGlmIHlvdSBhcmUgbm90IHVzaW5nIGl0IGFscmVhZHkpLCBmb3IgZXhhbXBsZSBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDs6PC9wPjxwcmU+e2Ntc19qcXVlcnkgZXhjbHVkZT0nanF1ZXJ5LXVpLm1pbi5qcywganF1ZXJ5LnVpLm5lc3RlZFNvcnRhYmxlLmpzLGpxdWVyeS5qc29uLm1pbi5qcyd9PC9wcmU+PHA+VGhpcyBpbmNsdWRlcyBuZWVkZWQgSmF2YVNjcmlwdCBzY3JpcHRzIGZvciBBY2UgU3ludGF4aGlnaGxpZ2h0ZXIgdG8gd29yay48YnIgLz5JbiBNb2R1bGUgQWRtaW4gaW50ZXJmYWNlIHlvdSBjYW4gc2VsZWN0IGRlZmF1bHQgc2V0dGluZ3MgZm9yIHlvdXIgY29kZSBibG9ja3Mgb3IgdXNlIHBhcmFtZXRlciBvbiBNb2R1bGUgYmxvY2sgcGx1Z2luIG1vZGU9J2h0bWwnIGFuZCB0aGVtZT0ndGV4dG1hdGUnIHdoaWNoIHdvdWxkIG92ZXJyaWRlIHNlbGVjdGVkIFByZWZlcmVuY2VzLjwvcD48cD5Xcml0ZSB5b3VyIGNvZGUgd2hpY2ggeW91IHdvdWxkIGxpa2UgdG8gYmUgaGlnaGxpZ2h0ZWQgaW5zaWRlIDxjb2RlPnthY2VfY29kZX0gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi48L3A+PHByZT57YWNlX2NvZGUgdGhlbWU9J3R3aWxpZ2h0JyBtb2RlPSdydWJ5JyBkaXZpZD0nbXktY29kZS1ibG9jayd9IENvZGUgaW4gaGVyZSB7L2FjZV9jb2RlfTwvcHJlPjxwPlRoaXMgYmxvY2sgcGx1Z2luIGluY2x1ZGVzIG5lZWRlZCBqUXVlcnkgcGx1Z2luIGNhbGwgYW5kIHdyYXBzIHlvdXIgY29udGVudCBpbnNpZGUgJmx0O3ByZSZndDsgSFRNTCB0YWcgc3BlY2lmaWVkIGlkLjwvcD48cHJlPjxjb2RlPnthY2VfY29kZSBpZD0nc29tZS1pZCcgdGhlbWU9J3R3aWxpZ2h0JyBodG1sZW50aXRpZXM9JzEnIG1vZGU9J2phdmFzY3JpcHQnfQombHQ7aHRtbCZndDsKJmx0O2hlYWQmZ3Q7CiAgJmx0O3N0eWxlIHR5cGU9InRleHQvY3NzIiZndDsKICAgIC50ZXh0LWxheWVyIHsKICAgICAgZm9udC1mYW1pbHk6IE1vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGN1cnNvcjogdGV4dDsKICAgIH0KICAmbHQ7L3N0eWxlJmd0OwombHQ7L2hlYWQmZ3Q7CiZsdDtib2R5Jmd0OwogICZsdDtoMSBzdHlsZT0iY29sb3I6cmVkIiZndDtZRVMhJmx0Oy9oMSZndDsKJmx0Oy9ib2R5Jmd0OwombHQ7L2h0bWwmZ3Q7CnsvYWNlX2NvZGV9PC9jb2RlPjwvcHJlPjwvZGl2PiA8IS0tIEVuZFRhYiAtLT48ZGl2IGlkPSJzaG9ydGN1dHNfYyI+PGgzPkRlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzPC9oMz48dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgY2VsbHNwYWNpbmc9IjAiIHN1bW1hcnk9IkRlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzIj48dGhlYWQ+PHRyPjx0aD5QQyAoV2luZG93cy9MaW51eCk8L3RkPjx0aD5NYWM8L3RkPjx0aD5BY3Rpb248L3RkPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyIGNsYXNzPSJyb3cxIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtUmV0dXJuPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtUmV0dXJuPC90ZD48dGQgYWxpZ249ImxlZnQiPmZ1bGxzY3JlZW48L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtUzwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVM8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+cGVyZm9ybSBzYXZlPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1MPC90ZD48dGQgYWxpZ249ImxlZnQiPmNlbnRlciBzZWxlY3Rpb248L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtQWx0LURvd248L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1PcHRpb24tRG93bjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5jb3B5IGxpbmVzIGRvd248L3RkPjwvdHI+PHRyIGxjYXNzPSJyb3cxIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtQWx0LVVwPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtT3B0aW9uLVVwPC90ZD48dGQgYWxpZ249ImxlZnQiPmNvcHkgbGluZXMgdXA8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtRjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUY8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+ZmluZDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1LPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRzwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5maW5kIG5leHQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtSzwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LUc8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+ZmluZCBwcmV2aW91czwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+RG93bjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Eb3duLEN0cmwtTjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5nbyBsaW5lIGRvd248L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPlVwPC90ZD48dGQgYWxpZ249ImxlZnQiPlVwLEN0cmwtUDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5nbyBsaW5lIHVwPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUVuZCxDdHJsLURvd248L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1FbmQsQ29tbWFuZC1Eb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPmdvIHRvIGVuZDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+TGVmdDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5MZWZ0LEN0cmwtQjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsZWZ0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUw8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1MPC90ZD48dGQgYWxpZ249ImxlZnQiPmdvIHRvIGxpbmU8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkFsdC1SaWdodCxFbmQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1SaWdodCxFbmQsQ3RybC1FPC90ZD48dGQgYWxpZ249ImxlZnQiPmdvIHRvIGxpbmUgZW5kPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5BbHQtTGVmdCxIb21lPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtTGVmdCxIb21lLEN0cmwtQTwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsaW5lIHN0YXJ0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MiI+PHRkIGFsaWduPSJsZWZ0Ij5QYWdlRG93bjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUGFnZURvd24sQ3RybC1WPC90ZD48dGQgYWxpZ249ImxlZnQiPmdvIHRvIHBhZ2UgZG93bjwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+UGFnZVVwPC90ZD48dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1QYWdlVXA8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gcGFnZSB1cDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+UmlnaHQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+UmlnaHQsQ3RybC1GPC90ZD48dGQgYWxpZ249ImxlZnQiPmdvIHRvIHJpZ2h0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUhvbWUsQ3RybC1VcDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUhvbWUsQ29tbWFuZC1VcDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBzdGFydDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1MZWZ0PC90ZD48dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1MZWZ0PC90ZD48dGQgYWxpZ249ImxlZnQiPmdvIHRvIHdvcmQgbGVmdDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1SaWdodDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUmlnaHQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gd29yZCByaWdodDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+VGFiPC90ZD48dGQgYWxpZ249ImxlZnQiPlRhYjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5pbmRlbnQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cxIj48dGQgYWxpZ249ImxlZnQiPkFsdC1Eb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1Eb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPm1vdmUgbGluZXMgZG93bjwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+QWx0LVVwPC90ZD48dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1VcDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5tb3ZlIGxpbmVzIHVwPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1UYWI8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVGFiPC90ZD48dGQgYWxpZ249ImxlZnQiPm91dGRlbnQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkluc2VydDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5JbnNlcnQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+b3ZlcndyaXRlPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjx0ZCBhbGlnbj0ibGVmdCI+UGFnZURvd248L3RkPjx0ZCBhbGlnbj0ibGVmdCI+cGFnZWRvd248L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5QYWdlVXA8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+cGFnZXVwPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LVosQ3RybC1ZPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtWixDb21tYW5kLVk8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+cmVkbzwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1EPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgbGluZTwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD48dGQgYWxpZ249ImxlZnQiPkN0cmwtSzwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgdG8gbGluZSBlbmQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tQmFja3NwYWNlPC90ZD48dGQgYWxpZ249ImxlZnQiPnJlbW92ZSB0byBsaW5lc3RhcnQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cxIj48dGQgYWxpZ249ImxlZnQiPjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5BbHQtQmFja3NwYWNlLEN0cmwtQWx0LUJhY2tzcGFjZTwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgd29yZCBsZWZ0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MiI+PHRkIGFsaWduPSJsZWZ0Ij48L3RkPjx0ZCBhbGlnbj0ibGVmdCI+QWx0LURlbGV0ZTwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgd29yZCByaWdodDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1SPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtT3B0aW9uLUY8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+cmVwbGFjZTwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1SPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtT3B0aW9uLUY8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+cmVwbGFjZSBhbGw8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cxIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtQTwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUE8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGFsbDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtRG93bjwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Eb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBkb3duPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1MZWZ0PC90ZD48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUxlZnQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGxlZnQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUVuZDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1FbmQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGxpbmUgZW5kPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Ib21lPC90ZD48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUhvbWU8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGxpbmUgc3RhcnQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VEb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VEb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBwYWdlIGRvd248L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cxIj48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VVcDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlVXA8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHBhZ2UgdXA8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVJpZ2h0PC90ZD48dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVJpZ2h0PC90ZD48dGQgYWxpZ249ImxlZnQiPnNlbGVjdCByaWdodDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1FbmQsQWx0LVNoaWZ0LURvd248L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1Eb3duPC90ZD48dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBlbmQ8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkFsdC1TaGlmdC1SaWdodDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVJpZ2h0PC90ZD48dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBsaW5lIGVuZDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzEiPjx0ZCBhbGlnbj0ibGVmdCI+QWx0LVNoaWZ0LUxlZnQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1MZWZ0PC90ZD48dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBsaW5lIHN0YXJ0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MiI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUhvbWUsQWx0LVNoaWZ0LVVwPC90ZD48dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtVXA8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHRvIHN0YXJ0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1VcDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1VcDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdXA8L3RkPjwvdHI+PHRyIGNsYXNzPSJyb3cyIj48dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtTGVmdDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tU2hpZnQtTGVmdDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3Qgd29yZCBsZWZ0PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LVJpZ2h0PC90ZD48dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1TaGlmdC1SaWdodDwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3Qgd29yZCByaWdodDwvdGQ+PC90cj48dHIgY2xhc3M9InJvdzIiPjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD48dGQgYWxpZ249ImxlZnQiPkN0cmwtTzwvdGQ+PHRkIGFsaWduPSJsZWZ0Ij5zcGxpdCBsaW5lPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLTc8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC03PC90ZD48dGQgYWxpZ249ImxlZnQiPnRvZ2dsZSBjb21tZW50PC90ZD48L3RyPjx0ciBjbGFzcz0icm93MiI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVQ8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1UPC90ZD48dGQgYWxpZ249ImxlZnQiPnRyYW5zcG9zZSBsZXR0ZXJzPC90ZD48L3RyPjx0ciBjbGFzcz0icm93MSI+PHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVo8L3RkPjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1aPC90ZD48dGQgYWxpZ249ImxlZnQiPnVuZG88L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PiA8IS0tIEVuZFRhYiAtLT48ZGl2IGlkPSJtb2Rlc190aGVtZXNfYyI+PHN0eWxlPnVsLmFjZV9saXN0IHtmbG9hdDogbGVmdDtwYWRkaW5nOiAwIDIwcHggMjBweCAwO311bC5hY2VfbGlzdCBsaSB7d2lkdGg6IDE1MHB4O308L3N0eWxlPjxoMz5BdmFpbGFibGUgTW9kZXM8L2gzPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5hYmFwPC9saT48bGk+YWJjPC9saT48bGk+YWN0aW9uc2NyaXB0PC9saT48bGk+YWRhPC9saT48bGk+YXBhY2hlX2NvbmY8L2xpPjxsaT5hcGV4PC9saT48bGk+YXBwbGVzY3JpcHQ8L2xpPjxsaT5hcWw8L2xpPjxsaT5hc2NpaWRvYzwvbGk+PGxpPmFzbDwvbGk+PC91bD48dWwgY2xhc3M9ImFjZV9saXN0Ij48bGk+YXNzZW1ibHlfeDg2PC9saT48bGk+YXV0b2hvdGtleTwvbGk+PGxpPmJhdGNoZmlsZTwvbGk+PGxpPmJybzwvbGk+PGxpPmM5c2VhcmNoPC9saT48bGk+Y19jcHA8L2xpPjxsaT5jaXJydTwvbGk+PGxpPmNsb2p1cmU8L2xpPjxsaT5jb2JvbDwvbGk+PGxpPmNvZmZlZTwvbGk+PC91bD48dWwgY2xhc3M9ImFjZV9saXN0Ij48bGk+Y29sZGZ1c2lvbjwvbGk+PGxpPmNyeXN0YWw8L2xpPjxsaT5jc2hhcnA8L2xpPjxsaT5jc291bmRfZG9jdW1lbnQ8L2xpPjxsaT5jc291bmRfb3JjaGVzdHJhPC9saT48bGk+Y3NvdW5kX3Njb3JlPC9saT48bGk+Y3NwPC9saT48bGk+Y3NzPC9saT48bGk+Y3VybHk8L2xpPjxsaT5kPC9saT48L3VsPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5kYXJ0PC9saT48bGk+ZGlmZjwvbGk+PGxpPmRqYW5nbzwvbGk+PGxpPmRvY2tlcmZpbGU8L2xpPjxsaT5kb3Q8L2xpPjxsaT5kcm9vbHM8L2xpPjxsaT5lZGlmYWN0PC9saT48bGk+ZWlmZmVsPC9saT48bGk+ZWpzPC9saT48bGk+ZWxpeGlyPC9saT48L3VsPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5lbG08L2xpPjxsaT5lcmxhbmc8L2xpPjxsaT5mb3J0aDwvbGk+PGxpPmZvcnRyYW48L2xpPjxsaT5mc2hhcnA8L2xpPjxsaT5mc2w8L2xpPjxsaT5mdGw8L2xpPjxsaT5nY29kZTwvbGk+PGxpPmdoZXJraW48L2xpPjxsaT5naXRpZ25vcmU8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPmdsc2w8L2xpPjxsaT5nb2JzdG9uZXM8L2xpPjxsaT5nb2xhbmc8L2xpPjxsaT5ncmFwaHFsc2NoZW1hPC9saT48bGk+Z3Jvb3Z5PC9saT48bGk+aGFtbDwvbGk+PGxpPmhhbmRsZWJhcnM8L2xpPjxsaT5oYXNrZWxsPC9saT48bGk+aGFza2VsbF9jYWJhbDwvbGk+PGxpPmhheGU8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPmhqc29uPC9saT48bGk+aHRtbDwvbGk+PGxpPmh0bWxfY29tcGxldGlvbnM8L2xpPjxsaT5odG1sX2VsaXhpcjwvbGk+PGxpPmh0bWxfcnVieTwvbGk+PGxpPmluaTwvbGk+PGxpPmlvPC9saT48bGk+amFjazwvbGk+PGxpPmphZGU8L2xpPjxsaT5qYXZhPC9saT48L3VsPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5qYXZhc2NyaXB0PC9saT48bGk+anNvbjwvbGk+PGxpPmpzb25pcTwvbGk+PGxpPmpzcDwvbGk+PGxpPmpzc208L2xpPjxsaT5qc3g8L2xpPjxsaT5qdWxpYTwvbGk+PGxpPmtvdGxpbjwvbGk+PGxpPmxhdGV4PC9saT48bGk+bGVzczwvbGk+PC91bD48dWwgY2xhc3M9ImFjZV9saXN0Ij48bGk+bGlxdWlkPC9saT48bGk+bGlzcDwvbGk+PGxpPmxpdmVzY3JpcHQ8L2xpPjxsaT5sb2dpcWw8L2xpPjxsaT5sb2d0YWxrPC9saT48bGk+bHNsPC9saT48bGk+bHVhPC9saT48bGk+bHVhaHRtbDwvbGk+PGxpPmx1YXBhZ2U8L2xpPjxsaT5sdWNlbmU8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPm1ha2VmaWxlPC9saT48bGk+bWFya2Rvd248L2xpPjxsaT5tYXNrPC9saT48bGk+bWF0bGFiPC9saT48bGk+bWF6ZTwvbGk+PGxpPm1lbDwvbGk+PGxpPm1peGFsPC9saT48bGk+bXVzaGNvZGU8L2xpPjxsaT5tdXNoY29kZV9oaWdoX3J1bGVzPC9saT48bGk+bXlzcWw8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPm5naW54PC9saT48bGk+bmltPC9saT48bGk+bml4PC9saT48bGk+bnNpczwvbGk+PGxpPm9iamVjdGl2ZWM8L2xpPjxsaT5vY2FtbDwvbGk+PGxpPnBhc2NhbDwvbGk+PGxpPnBlcmw8L2xpPjxsaT5wZXJsNjwvbGk+PGxpPnBnc3FsPC9saT48L3VsPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5waHA8L2xpPjxsaT5waHBfbGFyYXZlbF9ibGFkZTwvbGk+PGxpPnBpZzwvbGk+PGxpPnBsYWluX3RleHQ8L2xpPjxsaT5wb3dlcnNoZWxsPC9saT48bGk+cHJhYXQ8L2xpPjxsaT5wcm9sb2c8L2xpPjxsaT5wcm9wZXJ0aWVzPC9saT48bGk+cHJvdG9idWY8L2xpPjxsaT5wdXBwZXQ8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPnB5dGhvbjwvbGk+PGxpPnI8L2xpPjxsaT5yYXpvcjwvbGk+PGxpPnJkb2M8L2xpPjxsaT5yZWQ8L2xpPjxsaT5yZWRzaGlmdDwvbGk+PGxpPnJodG1sPC9saT48bGk+cnN0PC9saT48bGk+cnVieTwvbGk+PGxpPnJ1c3Q8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPnNhc3M8L2xpPjxsaT5zY2FkPC9saT48bGk+c2NhbGE8L2xpPjxsaT5zY2hlbWU8L2xpPjxsaT5zY3NzPC9saT48bGk+c2g8L2xpPjxsaT5zanM8L2xpPjxsaT5zbGltPC9saT48bGk+c21hcnR5PC9saT48bGk+c25pcHBldHM8L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPnNveV90ZW1wbGF0ZTwvbGk+PGxpPnNwYWNlPC9saT48bGk+c3BhcnFsPC9saT48bGk+c3FsPC9saT48bGk+c3Fsc2VydmVyPC9saT48bGk+c3R5bHVzPC9saT48bGk+c3ZnPC9saT48bGk+c3dpZnQ8L2xpPjxsaT50Y2w8L2xpPjxsaT50ZXJyYWZvcm08L2xpPjwvdWw+PHVsIGNsYXNzPSJhY2VfbGlzdCI+PGxpPnRleDwvbGk+PGxpPnRleHQ8L2xpPjxsaT50ZXh0aWxlPC9saT48bGk+dG1zbmlwcGV0PC9saT48bGk+dG9tbDwvbGk+PGxpPnRzeDwvbGk+PGxpPnR1cnRsZTwvbGk+PGxpPnR3aWc8L2xpPjxsaT50eXBlc2NyaXB0PC9saT48bGk+dmFsYTwvbGk+PC91bD48dWwgY2xhc3M9ImFjZV9saXN0Ij48bGk+dmJzY3JpcHQ8L2xpPjxsaT52ZWxvY2l0eTwvbGk+PGxpPnZlcmlsb2c8L2xpPjxsaT52aGRsPC9saT48bGk+dmlzdWFsZm9yY2U8L2xpPjxsaT53b2xsb2s8L2xpPjxsaT54bWw8L2xpPjxsaT54cXVlcnk8L2xpPjxsaT55YW1sPC9saT48bGk+emVlazwvbGk+PC91bD48ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+PGgzPkF2YWlsYWJsZSBUaGVtZXM8L2gzPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5hbWJpYW5jZTwvbGk+PGxpPmNoYW9zPC9saT48bGk+Y2hyb21lPC9saT48bGk+Y2xvdWRzPC9saT48bGk+Y2xvdWRzX21pZG5pZ2h0PC9saT48bGk+Y29iYWx0PC9saT48bGk+Y3JpbXNvbl9lZGl0b3I8L2xpPjxsaT5kYXduPC9saT48bGk+ZHJhY3VsYTwvbGk+PGxpPmRyZWFtd2VhdmVyPC9saT48L3VsPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5lY2xpcHNlPC9saT48bGk+Z2l0aHViPC9saT48bGk+Z29iPC9saT48bGk+Z3J1dmJveDwvbGk+PGxpPmlkbGVfZmluZ2VyczwvbGk+PGxpPmlwbGFzdGljPC9saT48bGk+a2F0emVubWlsY2g8L2xpPjxsaT5rcjwvbGk+PGxpPmtyX3RoZW1lPC9saT48bGk+a3Vyb2lyPC9saT48L3VsPjx1bCBjbGFzcz0iYWNlX2xpc3QiPjxsaT5tZXJiaXZvcmU8L2xpPjxsaT5tZXJiaXZvcmVfc29mdDwvbGk+PGxpPm1vbm9faW5kdXN0cmlhbDwvbGk+PGxpPm1vbm9rYWk8L2xpPjxsaT5wYXN0ZWxfb25fZGFyazwvbGk+PGxpPnNvbGFyaXplZF9kYXJrPC9saT48bGk+c29sYXJpemVkX2xpZ2h0PC9saT48bGk+c3Fsc2VydmVyPC9saT48bGk+dGVybWluYWw8L2xpPjxsaT50ZXh0bWF0ZTwvbGk+PC91bD48dWwgY2xhc3M9ImFjZV9saXN0Ij48bGk+dG9tb3Jyb3c8L2xpPjxsaT50b21vcnJvd19uaWdodDwvbGk+PGxpPnRvbW9ycm93X25pZ2h0X2JsdWU8L2xpPjxsaT50b21vcnJvd19uaWdodF9icmlnaHQ8L2xpPjxsaT50b21vcnJvd19uaWdodF9laWdodGllczwvbGk+PGxpPnR3aWxpZ2h0PC9saT48bGk+dmlicmFudF9pbms8L2xpPjxsaT54Y29kZTwvbGk+PC91bD48ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+PC9kaXY+IDwhLS0gRW5kVGFiIC0tPjxkaXYgaWQ9InRyb3VibGVzaG9vdGluZ19jIj48aDM+S25vd24gSXNzdWVzPC9oMz48dWw+PGxpPkZ1bGwgc2NyZWVuIGZlYXR1cmUsIHdoZW4gdXNpbmcgZXNjYXBlIGtleSB0byBjbG9zZSB5b3UgbmVlZCB0byBjbGljayB0d2ljZS4uLjwvbGk+PC91bD48L2Rpdj4gPCEtLSBFbmRUYWIgLS0+PGRpdiBpZD0iY29weXJpZ2h0X2MiPjxwPlRoaXMgbW9kdWxlIGlzIGEgZm9yayBvZiB0aGUgQWNlRWRpdG9yIG1vZHVsZS48YnIgLz5Db3B5cmlnaHQgJmNvcHk7IDIwMTMgLSAyMDE5LCBHb3JhbiBJbGljICh1bmlxdTMpLjwvcD48YnIgLz48cD48Yj5BY2VTeW50YXggbW9kdWxlPC9iPjxiciAvPkNvcHlyaWdodCAmY29weTsgMjAxOS4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPGJyIC8+RmVybmFuZG8gTW9yZ2FkbyBbam9tb3JnIGF0IHNtLWFydC1sYWIgZG90IGNvbV0uPGJyIC8+Um9sZiBUamFzc2VucyBbaW5mbyBhdCBjbXNjYW5iZXNpbXBsZSBkb3Qgb3JnXS48L3A+PGJyIC8+PHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxiPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+R05VIFB1YmxpYyBMaWNlbnNlIHYzPC9hPjwvYj4uPC9wPjxwPjxiPkhvd2V2ZXI8L2I+LCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZSZ0cmFkZTsuPGJyIC8+WW91IG1heSBvbmx5IHVzZSB0aGlzIHNvZnR3YXJlIHdoZW4gdGhlcmUgaXMgYSBjbGVhciBhbmQgb2J2aW91cyBpbmRpY2F0aW9uIGluIHRoZSBhZG1pbiBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggPGI+Q01TIE1hZGUgU2ltcGxlJnRyYWRlOzwvYj4uPC9wPjwvZGl2PiA8IS0tIEVuZFRhYiAtLT48L2Rpdj4gPCEtLSBFbmRUYWJDb250ZW50IC0tPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gaGVpZ2h0PSI0MDAiIC0gc3BlY2lmaWVzIGhlaWdodCBvZiBTeW50YXhoaWdobGlnaHRlciBhcmVhLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gaHRtbGVudGl0aWVzPSIwIiAtIFRoaXMgcGFyYW1ldGVyIHdpbGwgdHJhbnNsYXRlIGFsbCBjaGFyYWN0ZXJzIGluc2lkZSB7YWNlX2NvZGV9IGJsb2NrIHBsdWdpbiB0byBlbnRpdGllcywgdXNpbmcgUEhQIDxhIGhyZWY9Imh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZGUvZnVuY3Rpb24uaHRtbGVudGl0aWVzLnBocCIgdGFyZ2V0PSJfYmxhbmsiPmh0bWxlbnRpdGllczwvYT4gZnVuY3Rpb24uIFVzZSB0aGlzIGlmIHlvdSBhcmUgbm90IHVzaW5nIGFueSBXWVNJV1lHIEVkaXRvciBhbmQgd3JpdGUgcmF3IGNvZGUgaW5zaWRlIGJsb2NrIHBsdWdpbi48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IG1vZGU9Imh0bWwiIC0gaXMgdXNlZCB3aXRoaW4gYSBwYWdlIHdpdGggPGNvZGU+e2FjZV9jb2RlIG1vZGU9J2h0bWwnfSB7L2FjZV9jb2RlfTwvY29kZT4gYmxvY2sgcGx1Z2luLiBUaGlzIHNwZWNpZmllcyBTeW50YXhoaWdobGlnaHRlciBtb2RlIGZvciBzcGVjaWZpYyBjb2RlIGFyZWEuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB0aGVtZT0idGV4dG1hdGUiIC0gaXMgdXNlZCB3aXRoaW4gYSBwYWdlIHdpdGggPGNvZGU+e2FjZV9jb2RlIHRoZW1lPSd0d2lsaWdodCd9IHsvYWNlX2NvZGV9PC9jb2RlPiBibG9jayBwbHVnaW4uIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIHRoZW1lIGZvciBzcGVjaWZpYyBjb2RlIGFyZWEuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiB3aWR0aD0iNDAwIiAtIHNwZWNpZmllcyB3aWR0aCBvZiBTeW50YXhoaWdobGlnaHRlciBhcmVhIGluIHBpeGVsLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKbyBNb3JnLCBSb2xmIFRqYXNzZW5zICZsdDtqb21vcmcgW2F0XSBzbS1hcnQtbGFiIFtkb3RdIGNvbSwgaW5mbyBbYXRdIGNtc2NhbmJlc2ltcGxlIFtkb3RdIG9yZyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAxLjAuMTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KCTxsaT48Yj5WZXJzaW9uIDEuMC4xPC9iPiAtIDA5LTExLTIwMTk8YnIgLz4KCQktIEFjZSBlZGl0b3IgdGVtcGxhdGUgZml4LjxiciAvPgoJCS0gKEtpbmQgb2YpIGZpeGVzIGZ1bGwgc2NyZWVuIGZlYXR1cmUuIE9ubHkgd2hlbiB1c2luZyBlc2NhcGUga2V5IHRvIGNsb3NlIHlvdSBuZWVkIHRvIGNsaWNrIHR3aWNlLi4uPGJyIC8+CgkJLSBGaXhlZCBtdWx0aXBsZSBBY2UgZWRpdG9yIHNjcmVlbnMgYXQgb25lIEFkbWluIHBhZ2UuPGJyIC8+CiAgICAgICAgLSBVcGRhdGVkIGhlbHAgdGV4dC48YnIgLz4KICAgICAgICAtIE11bHRpcGxlIG90aGVyIGltcHJvdmVtZW50cy48L2xpPgogICAgPGxpPjxiPlZlcnNpb24gMS4wPC9iPiAtIDA2LTExLTIwMTk8YnIgLz4KICAgICAgICAtIEluaXRpYWwgcmVsZWFzZS48L2xpPgo8L3VsPjxiciAvPg==]]></about>
	<description><![CDATA[AceSyntax is a syntax highlighter module using <strong>Ace</strong> a standalone code editor written in JavaScript.]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAACgAAAAIAAAAKAAAABAMAAABCAAAIAsAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAACQAAAADAAAQAABuAGdid3NwYmxvYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAQAAAAQAAAAEAGwAYQBuAGdid3NwYmxvYgAAAMhicGxpc3QwMNcBAgMEBQYHCAgICwgNCF1TaG93U3RhdHVzQmFyW1Nob3dQYXRoYmFyW1Nob3dUb29sYmFyW1Nob3dUYWJWaWV3XxAUQ29udGFpbmVyU2hvd1NpZGViYXJcV2luZG93Qm91bmRzW1Nob3dTaWRlYmFyCQkJCAlfEBd7ezIsIDIxN30sIHsxNDEwLCA3OTl9fQkIFyUxPUlgbXl6e3x9fpgAAAAAAAABAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAmWFpbmVyU2hvd1NpZGViYXJcV2luAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAQAbABhAG4AZ2xnMVNjb21wAAAAAAAEqHsAAAAEAGwAYQBuAGdsc3ZDYmxvYgAAArBicGxpc3QwMNoBAgMEBQYHCAkKCwwNDEhJSEpLDF8QEnZpZXdPcHRpb25zVmVyc2lvbl8QD3Nob3dJY29uUHJldmlld1djb2x1bW5zXxARY2FsY3VsYXRlQWxsU2l6ZXNfEA9zY3JvbGxQb3NpdGlvbllYdGV4dFNpemVfEA9zY3JvbGxQb3NpdGlvblhac29ydENvbHVtblhpY29uU2l6ZV8QEHVzZVJlbGF0aXZlRGF0ZXMQAQmrDhccISUqLzQ5PkPUDxAREhMMFQxaaWRlbnRpZmllcllhc2NlbmRpbmdVd2lkdGhXdmlzaWJsZVRuYW1lCREB/QnUDxAREhgZGhlYdWJpcXVpdHkIECMI1BIREA8MHhkgCRC1CFxkYXRlTW9kaWZpZWTUEhEQDxkeGSQICFtkYXRlQ3JlYXRlZNQSERAPDCcZKQkQYQhUc2l6ZdQSERAPDCwMLgkQcwlUa2luZNQSERAPGTEMMwgQZAlVbGFiZWzUEhEQDxk2DDgIEEsJV3ZlcnNpb27UEhEQDxk7DD0IEQEsCVhjb21tZW50c9QSERAPGUAZQggQyAheZGF0ZUxhc3RPcGVuZWTUDxAREkQZHhlZZGF0ZUFkZGVkCAgJIwAAAAAAAAAAI0AsAAAAAAAAVGtpbmQjQEAAAAAAAAAJAAgAHQAyAEQATABgAHIAewCNAJgAoQC0ALYAtwDDAMwA1wDhAOcA7wD0APUA+AD5AQIBCwEMAQ4BDwEYARkBGwEcASkBMgEzATQBQAFJAUoBTAFNAVIBWwFcAV4BXwFkAW0BbgFwAXEBdwGAAYEBgwGEAYwBlQGWAZkBmgGjAawBrQGvAbABvwHIAdIB0wHUAdUB3gHnAewB9QAAAAAAAAIBAAAAAAAAAE0AAAAAAAAAAAAAAAAAAAH2AAAABABsAGEAbgBnbHN2cGJsb2IAAAKVYnBsaXN0MDDaAQIDBAUGBwgJCgsMDQxHSEdJSgxfEBJ2aWV3T3B0aW9uc1ZlcnNpb25fEA9zaG93SWNvblByZXZpZXdXY29sdW1uc18QEWNhbGN1bGF0ZUFsbFNpemVzXxAPc2Nyb2xsUG9zaXRpb25ZWHRleHRTaXplXxAPc2Nyb2xsUG9zaXRpb25YWnNvcnRDb2x1bW5YaWNvblNpemVfEBB1c2VSZWxhdGl2ZURhdGVzEAEJ2Q4PEBESExQVFhcgJSktMjc8QVhjb21tZW50c15kYXRlTGFzdE9wZW5lZFxkYXRlTW9kaWZpZWRbZGF0ZUNyZWF0ZWRUc2l6ZVVsYWJlbFRraW5kV3ZlcnNpb25UbmFtZdQYGRobHB0MH1VpbmRleFV3aWR0aFlhc2NlbmRpbmdXdmlzaWJsZRAHEQEsCQjUGBkaGyEiHx8QCBDICAjUGBkaGwsmHwwQtQgJ1BgZGhsqJh8fEAIICNQYGRobLi8fDBADEGEICdQYGRobMzQMHxAFEGQJCNQYGRobODkMDBAEEHMJCdQYGRobPT4MHxAGEEsJCNQbGhkYDAxERQkJEQH9EAAJIwAAAAAAAAAAI0AsAAAAAAAAVGtpbmQjQEAAAAAAAAAJAAgAHQAyAEQATABgAHIAewCNAJgAoQC0ALYAtwDKANMA4gDvAPsBAAEGAQsBEwEYASEBJwEtATcBPwFBAUQBRQFGAU8BUQFTAVQBVQFeAWABYQFiAWsBbQFuAW8BeAF6AXwBfQF+AYcBiQGLAYwBjQGWAZgBmgGbAZwBpQGnAakBqgGrAbQBtQG2AbkBuwG8AcUBzgHTAdwAAAAAAAACAQAAAAAAAABMAAAAAAAAAAAAAAAAAAAB3QAAAAQAbABhAG4AZ21vRERibG9iAAAACM30cCmiucFBAAAABABsAGEAbgBnbW9kRGJsb2IAAAAIzfRwKaK5wUEAAAAEAGwAYQBuAGdwaDFTY29tcAAAAAAABWAAAAAABABsAGEAbgBndlNybmxvbmcAAAABAAAAAwBsAGkAYmxnMVNjb21wAAAAAADY9m8AAAADAGwAaQBibW9ERGJsb2IAAAAI5KvBrVu4wUEAAAADAGwAaQBibW9kRGJsb2IAAAAI5KvBrVu4wUEAAAADAGwAaQBicGgxU2NvbXAAAAAAAOmAAAAAAAcAcwBhAG0AcABsAGUAc2xnMVNjb21wAAAAAAAILsMAAAAHAHMAYQBtAHAAbABlAHNtb0REYmxvYgAAAAhBfSRc67bBQQAAAAcAcwBhAG0AcABsAGUAc21vZERibG9iAAAACEF9JFzrtsFBAAAABwBzAGEAbQBwAGwAZQBzcGgxU2NvbXAAAAAAAAyAAAAAAAkAdABlAG0AcABsAGEAdABlAHNid3NwYmxvYgAAAMpicGxpc3QwMNcBAgMEBQYHCAgICwgNCF1TaG93U3RhdHVzQmFyW1Nob3dQYXRoYmFyW1Nob3dUb29sYmFyW1Nob3dUYWJWaWV3XxAUQ29udGFpbmVyU2hvd1NpZGViYXJcV2luZG93Qm91bmRzW1Nob3dTaWRlYmFyCQkJCAlfEBl7ezM4MiwgMTk1fSwgezE0MTAsIDc5OX19CQgXJTE9SWBteXp7fH1+mgAAAAAAAAEBAAAAAAAAAA8AAAAAAAAAAAAAAAAAAACbAAAACQB0AGUAbQBwAGwAYQB0AGUAc2xnMVNjb21wAAAAAAABDuoAAAAJAHQAZQBtAHAAbABhAHQAZQBzbHN2Q2Jsb2IAAAKwYnBsaXN0MDDaAQIDBAUGBwgJCgsMDQxISUhKSwxfEBJ2aWV3T3B0aW9uc1ZlcnNpb25fEA9zaG93SWNvblByZXZpZXdXY29sdW1uc18QEWNhbGN1bGF0ZUFsbFNpemVzXxAPc2Nyb2xsUG9zaXRpb25ZWHRleHRTaXplXxAPc2Nyb2xsUG9zaXRpb25YWnNvcnRDb2x1bW5YaWNvblNpemVfEBB1c2VSZWxhdGl2ZURhdGVzEAEJqw4XHCElKi80OT5D1A8QERITDBUMWmlkZW50aWZpZXJZYXNjZW5kaW5nVXdpZHRoV3Zpc2libGVUbmFtZQkRAf0J1A8QERIYGRoZWHViaXF1aXR5CBAjCNQSERAPDB4ZIAkQtQhcZGF0ZU1vZGlmaWVk1BIREA8ZHhkkCAhbZGF0ZUNyZWF0ZWTUEhEQDwwnGSkJEGEIVHNpemXUEhEQDwwsDC4JEHMJVGtpbmTUEhEQDxkxDDMIEGQJVWxhYmVs1BIREA8ZNgw4CBBLCVd2ZXJzaW9u1BIREA8ZOww9CBEBLAlYY29tbWVudHPUEhEQDxlAGUIIEMgIXmRhdGVMYXN0T3BlbmVk1A8QERJEGR4ZWWRhdGVBZGRlZAgICSMAAAAAAAAAACNALAAAAAAAAFRraW5kI0BAAAAAAAAACQAIAB0AMgBEAEwAYAByAHsAjQCYAKEAtAC2ALcAwwDMANcA4QDnAO8A9AD1APgA+QECAQsBDAEOAQ8BGAEZARsBHAEpATIBMwE0AUABSQFKAUwBTQFSAVsBXAFeAV8BZAFtAW4BcAFxAXcBgAGBAYMBhAGMAZUBlgGZAZoBowGsAa0BrwGwAb8ByAHSAdMB1AHVAd4B5wHsAfUAAAAAAAACAQAAAAAAAABNAAAAAAAAAAAAAAAAAAAB9gAAAAkAdABlAG0AcABsAGEAdABlAHNsc3ZwYmxvYgAAApVicGxpc3QwMNoBAgMEBQYHCAkKCwwNDEdIR0lKDF8QEnZpZXdPcHRpb25zVmVyc2lvbl8QD3Nob3dJY29uUHJldmlld1djb2x1bW5zXxARY2FsY3VsYXRlQWxsU2l6ZXNfEA9zY3JvbGxQb3NpdGlvbllYdGV4dFNpemVfEA9zY3JvbGxQb3NpdGlvblhac29ydENvbHVtblhpY29uU2l6ZV8QEHVzZVJlbGF0aXZlRGF0ZXMQAQnZDg8QERITFBUWFyAlKS0yNzxBWGNvbW1lbnRzXmRhdGVMYXN0T3BlbmVkXGRhdGVNb2RpZmllZFtkYXRlQ3JlYXRlZFRzaXplVWxhYmVsVGtpbmRXdmVyc2lvblRuYW1l1BgZGhscHQwfVWluZGV4VXdpZHRoWWFzY2VuZGluZ1d2aXNpYmxlEAcRASwJCNQYGRobISIfHxAIEMgICNQYGRobCyYfDBC1CAnUGBkaGyomHx8QAggI1BgZGhsuLx8MEAMQYQgJ1BgZGhszNAwfEAUQZAkI1BgZGhs4OQwMEAQQcwkJ1BgZGhs9PgwfEAYQSwkI1BsaGRgMDERFCQkRAf0QAAkjAAAAAAAAAAAjQCwAAAAAAABUa2luZCNAQAAAAAAAAAkACAAdADIARABMAGAAcgB7AI0AmAChALQAtgC3AMoA0wDiAO8A+wEAAQYBCwETARgBIQEnAS0BNwE/AUEBRAFFAUYBTwFRAVMBVAFVAV4BYAFhAWIBawFtAW4BbwF4AXoBfAF9AX4BhwGJAYsBjAGNAZYBmAGaAZsBnAGlAacBqQGqAasBtAG1AbYBuQG7AbwBxQHOAdMB3AAAAAAAAAIBAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAHdAAAACQB0AGUAbQBwAGwAYQB0AGUAc21vRERibG9iAAAACEV9SssEusFBAAAACQB0AGUAbQBwAGwAYQB0AGUAc21vZERibG9iAAAACEV9SssEusFBAAAACQB0AGUAbQBwAGwAYQB0AGUAc3BoMVNjb21wAAAAAAABgAAAAAAJAHQAZQBtAHAAbABhAHQAZQBzdlNybmxvbmcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAEAC4AcwB2AG5sZzFTY29tcAAAAAAA67t+AAAABAAuAHMAdgBubW9ERGJsb2IAAAAIybk7zAS6wUEAAAAEAC4AcwB2AG5tb2REYmxvYgAAAAjJuTvMBLrBQQAAAAQALgBzAHYAbnBoMVNjb21wAAAAAAEC0AAAAAAGAGkAbQBhAGcAZQBzYndzcGJsb2IAAADIYnBsaXN0MDDXAQIDBAUGBwgICAsIDQhdU2hvd1N0YXR1c0JhcltTaG93UGF0aGJhcltTaG93VG9vbGJhcltTaG93VGFiVmlld18QFENvbnRhaW5lclNob3dTaWRlYmFyXFdpbmRvd0JvdW5kc1tTaG93U2lkZWJhcgkJCQgJXxAXe3syLCAyMTd9LCB7MTQxMCwgNzk5fX0JCBclMT1JYG15ent8fX6YAAAAAAAAAQEAAAAAAAAADwAAAAAAAAAAAAAAAAAAAJkAAAAGAGkAbQBhAGcAZQBzbGcxU2NvbXAAAAAAAABXMgAAAAYAaQBtAGEAZwBlAHNsc3ZDYmxvYgAAArBicGxpc3QwMNoBAgMEBQYHCAkKCwwNDEhJSEpLDF8QEnZpZXdPcHRpb25zVmVyc2lvbl8QD3Nob3dJY29uUHJldmlld1djb2x1bW5zXxARY2FsY3VsYXRlQWxsU2l6ZXNfEA9zY3JvbGxQb3NpdGlvbllYdGV4dFNpemVfEA9zY3JvbGxQb3NpdGlvblhac29ydENvbHVtblhpY29uU2l6ZV8QEHVzZVJlbGF0aXZlRGF0ZXMQAQmrDhccISUqLzQ5PkPUDxAREhMMFQxaaWRlbnRpZmllcllhc2NlbmRpbmdVd2lkdGhXdmlzaWJsZVRuYW1lCREB/QnUDxAREhgZGhlYdWJpcXVpdHkIECMI1BIREA8MHhkgCRC1CFxkYXRlTW9kaWZpZWTUEhEQDxkeGSQICFtkYXRlQ3JlYXRlZNQSERAPDCcZKQkQYQhUc2l6ZdQSERAPDCwMLgkQcwlUa2luZNQSERAPGTEMMwgQZAlVbGFiZWzUEhEQDxk2DDgIEEsJV3ZlcnNpb27UEhEQDxk7DD0IEQEsCVhjb21tZW50c9QSERAPGUAZQggQyAheZGF0ZUxhc3RPcGVuZWTUDxAREkQZHhlZZGF0ZUFkZGVkCAgJIwAAAAAAAAAAI0AsAAAAAAAAVGtpbmQjQEAAAAAAAAAJAAgAHQAyAEQATABgAHIAewCNAJgAoQC0ALYAtwDDAMwA1wDhAOcA7wD0APUA+AD5AQIBCwEMAQ4BDwEYARkBGwEcASkBMgEzATQBQAFJAUoBTAFNAVIBWwFcAV4BXwFkAW0BbgFwAXEBdwGAAYEBgwGEAYwBlQGWAZkBmgGjAawBrQGvAbABvwHIAdIB0wHUAdUB3gHnAewB9QAAAAAAAAIBAAAAAAAAAE0AAAAAAAAAAAAAAAAAAAH2AAAABgBpAG0AYQBnAGUAc2xzdnBibG9iAAAClWJwbGlzdDAw2gECAwQFBgcICQoLDA0MR0hHSUoMXxASdmlld09wdGlvbnNWZXJzaW9uXxAPc2hvd0ljb25QcmV2aWV3V2NvbHVtbnNfEBFjYWxjdWxhdGVBbGxTaXplc18QD3Njcm9sbFBvc2l0aW9uWVh0ZXh0U2l6ZV8QD3Njcm9sbFBvc2l0aW9uWFpzb3J0Q29sdW1uWGljb25TaXplXxAQdXNlUmVsYXRpdmVEYXRlcxABCdkODxAREhMUFRYXICUpLTI3PEFYY29tbWVudHNeZGF0ZUxhc3RPcGVuZWRcZGF0ZU1vZGlmaWVkW2RhdGVDcmVhdGVkVHNpemVVbGFiZWxUa2luZFd2ZXJzaW9uVG5hbWXUGBkaGxwdDB9VaW5kZXhVd2lkdGhZYXNjZW5kaW5nV3Zpc2libGUQBxEBLAkI1BgZGhshIh8fEAgQyAgI1BgZGhsLJh8MELUICdQYGRobKiYfHxACCAjUGBkaGy4vHwwQAxBhCAnUGBkaGzM0DB8QBRBkCQjUGBkaGzg5DAwQBBBzCQnUGBkaGz0+DB8QBhBLCQjUGxoZGAwMREUJCREB/RAACSMAAAAAAAAAACNALAAAAAAAAFRraW5kI0BAAAAAAAAACQAIAB0AMgBEAEwAYAByAHsAjQCYAKEAtAC2ALcAygDTAOIA7wD7AQABBgELARMBGAEhAScBLQE3AT8BQQFEAUUBRgFPAVEBUwFUAVUBXgFgAWEBYgFrAW0BbgFvAXgBegF8AX0BfgGHAYkBiwGMAY0BlgGYAZoBmwGcAaUBpwGpAaoBqwG0AbUBtgG5AbsBvAHFAc4B0wHcAAAAAAAAAgEAAAAAAAAATAAAAAAAAAAAAAAAAAAAAd0AAAAGAGkAbQBhAGcAZQBzbW9ERGJsb2IAAAAI2GT3/5+5wUEAAAAGAGkAbQBhAGcAZQBzbW9kRGJsb2IAAAAI2GT3/5+5wUEAAAAGAGkAbQBhAGcAZQBzcGgxU2NvbXAAAAAAAABwAAAAAAYAaQBtAGEAZwBlAHN2U3JubG9uZwAAAAFob3dTaWRlYmFyXFdpbmRvd0JvdW5kc1tTaG93U2lkZWJhcgkJCQgJXxAZe3szODIsIDE5NX0sIHsxNDEwLCA3OTl9fQkIFyUxPUlgbXl6e3x9fpoAAAAAAAABAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAmwAAAAkAdAAAAAAFAAAAAAAAKAsAAABFAAAQDAAAAQgAACALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAAAAAAAAQAAAIAAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAQAAMAAAAAAAAAAAAQAAQAAAAAABAACAAAAAAAEAAQAAAAAAAQACAAAAAAABAAQAAAAAAAEACAAAAAAAAQAQAAAAAAABACAAAAAAAAEAQAAAAAAAAQCAAAAAAAABAQAAAAAAAAECAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEQAAAAAAAAASAAAAAAAAABQAAAAAAAAABpb25YWnNvcnRDb2x1bW5YaWNvblNpemVfEBB1c2VSZWxhdGl2ZURhdGVzEAEJ2Q4PEBESExQVFhcgJSktMjc8QVhjb21tZW50c15kYXRlTGFzdE9wZW5lZFxkYXRlTW9kaWZpZWRbZGF0ZUNyZWF0ZWRUc2l6ZVVsYWJlbFRraW5kV3ZlcnNpb25UbmFtZdQYGRobHB0MH1VpbmRleFV3aWR0aFlhc2NlbmRpbmdXdmlzaWJsZRAHEQEsCQjUGBkaGyEiHx8QCBDICAjUGBkaGwsmHwwQtQgJ1BgZGhsqJh8fEAIICNQYGRobLi8fDBADEGEICdQYGRobMzQMHxAFEGQJCNQYGRobODkMDBAEEHMJCdQYGRobPT4MHxAGEEsJCNQbGhkYDAxERQkJEQH9EAAJIwAAAAAAAAAAI0AsAAAAAAAAVGtpbmQjQEAAAAAAAAAJAAgAHQAyAEQATABgAHIAewCNAJgAoQC0ALYAtwDKANMA4gDvAPsBAAEGAQsBEwEYASEBJwEtATcBPwFBAUQBRQFGAU8BUQFTAVQBVQFeAWABYQFiAWsBbQFuAW8BeAF6AXwBfQF+AYcBiQGLAYwBjQGWAZgBmgGbAZwBpQGnAakBqgGrAbQBtQG2AbkBuwG8AcUBzgHTAdwAAAAAAAACAQAAAAAAAABMAAAAAAAAAAAAAAAAAAAB3QAAAAYAaQBtAGEAZwBlAHNtb0REYmxvYgAAAAjYZPf/n7nBQQAAAAYAaQBtAGEAZwBlAHNtb2REYmxvYgAAAAjYZPf/n7nBQQAAAAYAaQBtAGEAZwBlAHNwaDFTY29tcAAAAAAAAHAAAAAABgBpAG0AYQBnAGUAc3ZTcm5sb25nAAAAAWhvd1NpZGViYXJcV2luZG93Qm91bmRzW1Nob3dTaWRlYmFyCQkJCAlfEBl7ezM4MiwgMTk1fSwgezE0MTAsIDc5OX19CQgXJTE9SWBteXp7fH1+mgAAAAAAAAEBAAAAAAAAAA8AAAAAAAAAAAAAAAAAAACbAAAACQB0AA==]]></data>
	</file>
	<file>
	  <filename>/AceSyntax.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KdXNlIEFjZVN5bnRheFxTbWFydHlQbHVnaW5zOw0KDQpjbGFzcyBBY2VTeW50YXggZXh0ZW5kcyBDTVNNb2R1bGUNCnsNCg0KCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkjIEF0dHJpYnV0ZXMNCgkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCQ0KDQovLwlwcm90ZWN0ZWQgJG5vZWRpdG9ycyAgICAgICA9IDA7DQovLwlwdWJsaWMgJGhlYWRlcmluZm9zZW50ICAgICA9IGZhbHNlOw0KLy8JcHJpdmF0ZSAkX2h0bWxhY3RpdmUgICAgICAgPSBmYWxzZTsNCi8vCXByaXZhdGUgJF9wbGFpbmFjdGl2ZSAgICAgID0gZmFsc2U7DQovLwlwcml2YXRlICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KLy8JcHJpdmF0ZSAkX2Nzc2FjdGl2ZSAgICAgICAgPSBmYWxzZTsNCi8vCXByaXZhdGUgJF9waHBhY3RpdmUgICAgICAgID0gZmFsc2U7DQovLwlwcml2YXRlICRfeG1sYWN0aXZlICAgICAgICA9IGZhbHNlOw0KLy8JcHJpdmF0ZSAkX2pzb25hY3RpdmUgICAgICAgPSBmYWxzZTsNCi8vCXByaXZhdGUgJF9kZWZhdWx0YWN0aXZlICAgID0gZmFsc2U7DQogIA0KICANCiAgDQogICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIyBJbnRlcm5hbCBhdXRvbG9hZGVyDQogICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgDQogIHByaXZhdGUgZmluYWwgZnVuY3Rpb24gX2F1dG9sb2FkZXIoJGNsYXNzbmFtZSkNCiAgew0KICAgICRwYXJ0cyA9IGV4cGxvZGUoJ1xcJywgJGNsYXNzbmFtZSk7DQogICAgJGNsYXNzbmFtZSA9IGVuZCgkcGFydHMpOw0KICAgIA0KICAgICRmbiA9IGNtc19qb2luX3BhdGgoDQogICAgICAkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLA0KICAgICAgJ2xpYicsDQogICAgICAnY2xhc3MuJyAuICRjbGFzc25hbWUgLiAnLnBocCcNCiAgICApOw0KICAgIA0KICAgIGlmKGZpbGVfZXhpc3RzKCRmbikpDQogICAgew0KICAgICAgcmVxdWlyZV9vbmNlKCRmbik7DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQ0KICB7DQogICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCR0aGlzLCAnX2F1dG9sb2FkZXInKSk7DQogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOw0KICB9DQogIA0KCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkjIE1vZHVsZSBhcGkgbWV0aG9kcw0KCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KCXB1YmxpYyBmdW5jdGlvbiBHZXROYW1lKCkgeyByZXR1cm4gJ0FjZVN5bnRheCc7IH0NCglwdWJsaWMgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS4wLjEnOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgcmV0dXJuICdKbyBNb3JnLCBSb2xmIFRqYXNzZW5zJzsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsgcmV0dXJuICdqb21vcmcgW2F0XSBzbS1hcnQtbGFiIFtkb3RdIGNvbSwgaW5mbyBbYXRdIGNtc2NhbmJlc2ltcGxlIFtkb3RdIG9yZyc7IH0NCglwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgeyByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOyB9DQoJcHVibGljIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBIYXNBZG1pbigpIHsgcmV0dXJuIHRydWU7IH0NCglwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkgeyByZXR1cm4gJ215cHJlZnMnOyB9DQoJcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOyB9DQoJcHVibGljIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQWNlRWRpdG9yIFVzZXIgUHJlZmVyZW5jZScpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgcmV0dXJuICcyLjEnOyB9DQoJcHVibGljIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyB9DQoJcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEZyb250ZW5kKCkgeyByZXR1cm4gZmFsc2U7IH0NCglwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRBZG1pbigpIHsgcmV0dXJuIHRydWU7IH0NCglwdWJsaWMgZnVuY3Rpb24gSXNXWVNJV1lHKCkgeyByZXR1cm4gdHJ1ZTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBJc1N5bnRheEhpZ2hsaWdodGVyKCkgeyByZXR1cm4gdHJ1ZTsgfQ0KCXB1YmxpYyBmdW5jdGlvbiBTeW50YXhQYWdlRm9ybVN1Ym1pdCgpIHsgcmV0dXJuOyB9DQoNCglmdW5jdGlvbiBHZXRBZG1pbk1lbnVJdGVtcygpDQoJew0KCQlpZiAoICR0aGlzLT5WaXNpYmxlVG9BZG1pblVzZXIoKSApDQoJCXsNCgkJCSRvdXQgPSBudWxsOw0KCQkJJG91dFtdID0gQ21zQWRtaW5NZW51SXRlbTo6ZnJvbV9tb2R1bGUoJHRoaXMpOw0KDQoJCQkkb2JqID0gbmV3IENtc0FkbWluTWVudUl0ZW0oKTsNCgkJCSRvYmotPm1vZHVsZSA9ICR0aGlzLT5HZXROYW1lKCk7DQoJCQkkb2JqLT5zZWN0aW9uID0gJ3NpdGVhZG1pbic7DQoJCQkkb2JqLT50aXRsZSA9ICR0aGlzLT5MYW5nKCd0aXRsZV9hY2VzeW50YXhfc2V0dGluZ3MnKTsNCgkJCSRvYmotPmRlc2NyaXB0aW9uID0gJHRoaXMtPkxhbmcoJ2Rlc2NfYWNlc3ludGF4X3NldHRpbmdzJyk7DQoJCQkkb2JqLT5hY3Rpb24gPSAnYWRtaW5fc2V0dGluZ3MnOw0KCQkJJG91dFtdID0gJG9iajsNCgkJCQ0KCQkJcmV0dXJuICRvdXQ7DQoJCX0NCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gSGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwgJHBhcmFtcyA9IGFycmF5KCkpDQoJew0KCQkjIEp1c3QgYWRkIG1vcmUgdG8gdGhlIGFycmF5IHdoZW4gZXhwYW5kZWQNCgkJJGNhcGFiaWxpdGllcyA9IFsNCgkJCUNtc0NvcmVDYXBhYmlsaXRpZXM6OlNZTlRBWF9NT0RVTEUsDQoJCQlDbXNDb3JlQ2FwYWJpbGl0aWVzOjpXWVNJV1lHX01PRFVMRQ0KCQldOw0KICAgIA0KCQkjIHNpbmdsZSBsaW5lIGhhbmRsZXMgaXQgaGVyZSA6KQ0KCQlyZXR1cm4gaW5fYXJyYXkoJGNhcGFiaWxpdHksICRjYXBhYmlsaXRpZXMpOw0KCX0NCgkNCglwdWJsaWMgZnVuY3Rpb24gR2V0SGVscCgpDQoJew0KCQkkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7DQoJCSRzbWFydHktPmFzc2lnbignbW9kdWxlX3BhdGgnLCAkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpKTsNCgkJJHNtYXJ0eS0+YXNzaWduKCdtb2Rlc19saXN0JywgJHRoaXMtPkFjZUdldE1vZGVzKCkpOw0KCQkkc21hcnR5LT5hc3NpZ24oJ3RoZW1lc19saXN0JywgJHRoaXMtPkFjZUdldFRoZW1lcygpKTsNCg0KCQlyZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnaGVscC50cGwnKTsNCgl9DQoJDQoJcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpDQoJew0KCQkkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKCk7DQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdoZWlnaHQnLCAgICAgICAgICAgQ0xFQU5fU1RSSU5HKTsNCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2h0bWxlbnRpdGllcycsICAgICBDTEVBTl9JTlQpOw0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbW9kZScsICAgICAgICAgICAgIENMRUFOX1NUUklORyk7IA0KCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndGhlbWUnLCAgICAgICAgICAgIENMRUFOX1NUUklORyk7DQoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd3aWR0aCcsICAgICAgICAgICAgQ0xFQU5fU1RSSU5HKTsNCgkJU21hcnR5UGx1Z2luczo6cmVnaXN0ZXIoKTsNCgkJJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOw0KCQkkc21hcnR5LT5yZWdpc3RlckNsYXNzKCdhY2VzeW4nLCAnXEFjZVN5bnRheFxTbWFydHlUb29scycpOw0KCX0NCg0KCXB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplQWRtaW4oKQ0KCXsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaGVpZ2h0JywgJzQwMCcsICR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX2hlaWdodCcpKTsNCgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignaHRtbGVudGl0aWVzJywgMCwgJHRoaXMtPkxhbmcoJ2hlbHBfcGFyYW1faHRtbGVudGl0aWVzJykpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdtb2RlJywgJ2h0bWwnLCAkdGhpcy0+TGFuZygnaGVscF9wYXJhbV9tb2RlJykpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0aGVtZScsICd0ZXh0bWF0ZScsICR0aGlzLT5MYW5nKCdoZWxwX3BhcmFtX3RoZW1lJykpOw0KCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd3aWR0aCcsICc0MDAnLCAkdGhpcy0+TGFuZygnaGVscF9wYXJhbV93aWR0aCcpKTsNCgl9DQoNCglwdWJsaWMgZnVuY3Rpb24gU3ludGF4R2VuZXJhdGVIZWFkZXIoJGh0bWxyZXN1bHQgPSAnJykNCgl7DQogICAgCSRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsNCiAgICAJJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7DQogICAgCSR0b3AgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhY2VfdG9wLnRwbCcpOw0KICAgIAkkYm90dG9tID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWNlX2JvdHRvbS50cGwnKTsNCiAgICAJLy8kc21hcnR5LT5hc3NpZ24oJ2VkaXRvcmlkJywgJ2FjZV9lZGl0b3InKTsNCiAgICAJJHNtYXJ0eS0+YXNzaWduKCd0b3AnLCAkdG9wKTsNCiAgICAJJHNtYXJ0eS0+YXNzaWduKCdib3R0b20nLCAkYm90dG9tKTsNCiAgICANCgkJIyBkZXByZWNhdGVkLi4uIGJ1dCB3ZSdsbCBrZWVwIGl0IGZvciBjbXNtcyAyLjIueCBicmFuY2ggKEpNKQ0KCQkkYWpheF9saW5rID0gJHRoaXMtPmNyZWF0ZV91cmwoJ2NudG50MDEnLCAnYWRtaW5fYWpheCcpOw0KCQkkc21hcnR5LT5hc3NpZ24oJ2FqYXhfbGluaycsICRhamF4X2xpbmspOw0KICANCgkJcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ0FkbWluU3ludGF4R2VuZXJhdGVIZWFkZXIudHBsJyk7DQoJfQ0KDQoJcHVibGljIGZ1bmN0aW9uIFdZU0lXWUdHZW5lcmF0ZUhlYWRlcigkc2VsZWN0b3IgPSBOVUxMLCAkY3NzbmFtZSA9IE5VTEwpDQogIAl7DQogICAgCSRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsNCiAgICAJJHNtYXJ0eS0+YXNzaWduKCdtb2QnLCAkdGhpcyk7DQoJICAgICR0b3AgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhY2VfdG9wLnRwbCcpOw0KCSAgICAkYm90dG9tID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWNlX2JvdHRvbS50cGwnKTsNCgkgICAgJHNtYXJ0eS0+YXNzaWduKCdlZGl0b3JpZCcsICdhY2VfZWRpdG9yJyk7DQoJICAgICRzbWFydHktPmFzc2lnbigndG9wJywgJHRvcCk7DQoJICAgICRzbWFydHktPmFzc2lnbignYm90dG9tJywgJGJvdHRvbSk7DQoJICANCgkgICAgIyBkZXByZWNhdGVkLi4uIGJ1dCB3ZSdsbCBrZWVwIGl0IGZvciBjbXNtcyAyLjIueCBicmFuY2ggKEpNKQ0KCSAgICAkYWpheF9saW5rID0gJHRoaXMtPmNyZWF0ZV91cmwoJ2NudG50MDEnLCAnYWRtaW5fYWpheCcpOw0KCSAgICAkc21hcnR5LT5hc3NpZ24oJ2FqYXhfbGluaycsICRhamF4X2xpbmspOw0KCSAgDQoJICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdBZG1pblN5bnRheEdlbmVyYXRlSGVhZGVyLnRwbCcpOw0KCX0NCg0KCSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCgkjIE1vZHVsZSBtZXRob2RzDQoJIy0tLS0tLS0tLS0tLS0tLS0tLS0tLSANCiAgDQoJLyoqDQogICAJICogR2V0cyBhIHByZWZlcmVuY2UgZm9yIHRoZSBjdXJyZW50IGJhY2tlbmQgdXNlcg0KCSAqDQogICAgICogQHBhcmFtICAgICAgICAkbmFtZSAgICAtIG5hbWUgb2YgdGhlIHByZWZlcmVuY2UNCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZWZhdWx0IC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHByZWZlcmVuY2UNCiAgICAgKg0KICAgICAqIEByZXR1cm4gc3RyaW5nICAgICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlIHByZWZlcmVuY2UgaWYgaXQgZXhpc3RzIG90aGVyd2lzZSB0aGUgJGRlZmF1bHQNCiAgICAgKi8NCglmaW5hbCBwdWJsaWMgZnVuY3Rpb24gQWNlR2V0UHJlZmVyZW5jZSgkbmFtZSwgJGRlZmF1bHQgPSAnJykNCgl7DQoJCSR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7DQoJCSRyZXN1bHQgPSBjbXNfdXNlcnByZWZzOjpnZXRfZm9yX3VzZXIoJHVzZXJpZCwgJHRoaXMtPkdldE5hbWUoKSAuICdfJyAuICRuYW1lKTsNCgkJDQoJCWlmICgkcmVzdWx0ID09PSAnJykgcmV0dXJuICRkZWZhdWx0Ow0KCQkJCQ0KCQlyZXR1cm4gJHJlc3VsdDsNCgl9DQogIA0KICAJLyoqDQogICAgICogU2V0cyBhIHByZWZlcmVuY2UgZm9yIHRoZSBjdXJyZW50IGJhY2tlbmQgdXNlcg0KICAgICAqDQogICAgICogQHBhcmFtICRuYW1lICAgICAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwcmVmZXJlbmNlDQogICAgICogQHBhcmFtICR2YWx1ZSAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgcHJlZmVyZW5jZQ0KICAgICAqLw0KCWZpbmFsIHByb3RlY3RlZCBmdW5jdGlvbiBBY2VTZXRQcmVmZXJlbmNlKCRuYW1lLCAkdmFsdWUpDQoJew0KCQkkdXNlcmlkID0gZ2V0X3VzZXJpZCgpOw0KCQljbXNfdXNlcnByZWZzOjpzZXRfZm9yX3VzZXIoJHVzZXJpZCwgJHRoaXMtPkdldE5hbWUoKSAuICdfJyAuICRuYW1lLCAkdmFsdWUpOwkNCgl9DQogIA0KCS8qKg0KICAgICAqIExpc3QgaW5zdGFsbGVkIEFjZSBNb2Rlcw0KICAgICAqIEByZXR1cm4gYXJyYXkNCiAgICAgKi8NCglmaW5hbCBwdWJsaWMgZnVuY3Rpb24gQWNlR2V0TW9kZXMoKQ0KCXsNCgkJJG1vZGVzID0gYXJyYXkoKTsNCg0KCQlmb3JlYWNoICggZ2xvYihjbXNfam9pbl9wYXRoKCR0aGlzLT5HZXRNb2R1bGVQYXRoKCksICdsaWInLCAnYWNlJywgJ21vZGVzJywgJyouanMnKSApIGFzICRmaWxlbmFtZSApIHsNCg0KCQkJJG1vZGUgPSBiYXNlbmFtZSgkZmlsZW5hbWUpOw0KCQkJJG1vZGUgPSBleHBsb2RlKCcuJywgJG1vZGUpOw0KCQkJJG1vZGUgPSBleHBsb2RlKCctJywgJG1vZGVbMF0pOw0KCQkNCgkJCSRtb2Rlc1skbW9kZVsxXV0gPSAkdGhpcy0+TGFuZygkbW9kZVsxXSk7DQoJCX0NCgkJDQoJCXJldHVybiAkbW9kZXM7DQoJfQ0KICANCgkvKioNCiAgICAgKiBMaXN0IGluc3RhbGxlZCBBY2UgVGhlbWVzDQogICAgICogQHJldHVybiBhcnJheQ0KICAgICAqLw0KCWZpbmFsIHB1YmxpYyBmdW5jdGlvbiBBY2VHZXRUaGVtZXMoKQ0KCXsNCgkJJHRoZW1lcyA9IGFycmF5KCk7DQoJCWZvcmVhY2goZ2xvYihjbXNfam9pbl9wYXRoKCR0aGlzLT5HZXRNb2R1bGVQYXRoKCksICdsaWInLCAnYWNlJywgJ3RoZW1lcycsICcqLmpzJykgKSBhcyAkZmlsZW5hbWUpDQoJCXsNCgkJCSR0aGVtZSA9IGJhc2VuYW1lKCRmaWxlbmFtZSk7DQoJCQkkdGhlbWUgPSBleHBsb2RlKCcuJywgJHRoZW1lKTsNCgkJCSR0aGVtZSA9IGV4cGxvZGUoJy0nLCAkdGhlbWVbMF0pOw0KCQkJJHRoZW1lc1skdGhlbWVbMV1dID0gJHRoaXMtPkxhbmcoJHRoZW1lWzFdKTsNCgkJfQ0KCQkNCgkJcmV0dXJuICR0aGVtZXM7DQoJfQ0KDQp9IC8vIGVuZCBvZiBjbGFzcw0KDQojDQojIEVPRg0KIw==]]></data>
	</file>
	<file>
	  <filename>/action.admin_ajax.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoICFpc3NldCgkX1JFUVVFU1RbJ2N1cnJlbnQnXSkgKSBleGl0Ow0KDQokaGFuZGxlcnMgPSBvYl9saXN0X2hhbmRsZXJzKCk7DQpmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQ0KDQokc21hcnR5LT5hc3NpZ24oICdtb2QnLCAkdGhpcyApOw0KJHNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYWlkJywgImFjZV9lZGl0b3IiIC4gJF9SRVFVRVNUWydjdXJyZW50J10pOw0KJHNtYXJ0eS0+YXNzaWduKCdlZGl0b3JpZCcsICJhY2UtZWRpdG9yIiAuICRfUkVRVUVTVFsnY3VycmVudCddKTsNCiRzbWFydHktPmFzc2lnbignYWNlX2lkJywgJF9SRVFVRVNUWydjdXJyZW50J10pOw0KDQppZigkX1JFUVVFU1RbJ2h0bWwnXSA9PSAndG9wJykgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhY2VfdG9wLnRwbCcpOw0KaWYoJF9SRVFVRVNUWydodG1sJ10gPT0gJ2JvdHRvbScpIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWNlX2JvdHRvbS50cGwnKTsNCg0KZXhpdDsNCg0KIw0KIyBFT0YNCiM=]]></data>
	</file>
	<file>
	  <filename>/action.admin_settings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KDQokdXNlcmlkID0gZ2V0X3VzZXJpZCgpOw0KDQoNCiRhY3RpdmVfdGFiID0gaXNzZXQoJHBhcmFtc1snYWN0aXZlX3RhYiddKSA/ICRwYXJhbXNbJ2FjdGl2ZV90YWInXSA6ICdzZXR0aW5nc19mcm9udGVuZCc7DQoNCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOw0KCWlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKQ0KCXsNCgkJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdzZXR0aW5nc19mcm9udGVuZCcsICR0aGlzLT5MYW5nKCd0YWJfc2V0dGluZ3NfZnJvbnRlbmQnKSwgKCRhY3RpdmVfdGFiID09ICdzZXR0aW5nc19mcm9udGVuZCcpKTsNCgl9DQplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7DQoNCmVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOw0KCWlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKQ0KCXsNCgkJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3NldHRpbmdzX2Zyb250ZW5kJywgJHBhcmFtcyk7DQoJCQlpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pIC4gJy9mdW5jdGlvbi5hZG1pbl9wcmVmc3RhYl9mcm9udGVuZC5waHAnKTsNCgkJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoJfQ0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw0KDQojDQojIEVPRg0KIw==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy8gc3R1YiBmaWxlDQoNCiMNCiMgRU9GDQoj]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KDQokdXNlcmlkID0gZ2V0X3VzZXJpZCgpOw0KDQoNCiRhY3RpdmVfdGFiID0gaXNzZXQoJHBhcmFtc1snYWN0aXZlX3RhYiddKSA/ICRwYXJhbXNbJ2FjdGl2ZV90YWInXSA6ICdzZXR0aW5nc19iYWNrZW5kJzsNCg0KZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7DQoJaWYgKCgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBY2VTeW50YXggVXNlciBQcmVmZXJlbmNlJykgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpKSkNCgl7DQoJCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignc2V0dGluZ3NfYmFja2VuZCcsICR0aGlzLT5MYW5nKCd0YWJfc2V0dGluZ3NfYmFja2VuZCcpLCAoJGFjdGl2ZV90YWIgPT0gJ3NldHRpbmdzX2JhY2tlbmQnKSk7DQoJfQ0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOw0KDQplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsNCglpZiAoKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQWNlU3ludGF4IFVzZXIgUHJlZmVyZW5jZScpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSkpDQoJew0KCQllY2hvICR0aGlzLT5TdGFydFRhYignc2V0dGluZ3NfYmFja2VuZCcsICRwYXJhbXMpOw0KCQkJaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKSAuICcvZnVuY3Rpb24uYWRtaW5fcHJlZnN0YWJfYmFja2VuZC5waHAnKTsNCgkJZWNobyAkdGhpcy0+RW5kVGFiKCk7DQoJfQ0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw0KDQojDQojIEVPRg0KIw==]]></data>
	</file>
	<file>
	  <filename>/action.save_settings_backend.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZighJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkNCnsNCiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygNCiAgICAkdGhpcy0+TGFuZygNCiAgICAgICAgJ25lZWRwZXJtaXNzaW9uJywgYXJyYXkoDQogICAgICAgICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycNCiAgICAgICkNCiAgICApDQogICk7DQogIA0KICByZXR1cm47DQp9DQoNCg0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ2F1dG9faGVpZ2h0JywgICAgICAgIChpc3NldCgkcGFyYW1zWydhdXRvX2hlaWdodCddKSA/IDEgOiAwKSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnZW5hYmxlX2JlaGF2aW9ycycsICAgKGlzc2V0KCRwYXJhbXNbJ2VuYWJsZV9iZWhhdmlvcnMnXSkgPyAxIDogMCkpOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ2ZvbnRzaXplJywgICAgICAgICAgICRwYXJhbXNbJ2ZvbnRzaXplJ10pOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ2Z1bGxfbGluZScsICAgICAgICAgIChpc3NldCgkcGFyYW1zWydmdWxsX2xpbmUnXSkgPyAxIDogMCkpOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ2hlaWdodCcsICAgICAgICAgICAgICRwYXJhbXNbJ2hlaWdodCddKTsNCiR0aGlzLT5BY2VTZXRQcmVmZXJlbmNlKCdoZWlnaHRfdW5pdHMnLCAgICAgICAkcGFyYW1zWydoZWlnaHRfdW5pdHMnXSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X2FjdGl2ZScsICAgKGlzc2V0KCRwYXJhbXNbJ2hpZ2hsaWdodF9hY3RpdmUnXSkgPyAxIDogMCkpOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9zZWxlY3RlZCcsIChpc3NldCgkcGFyYW1zWydoaWdobGlnaHRfc2VsZWN0ZWQnXSkgPyAxIDogMCkpOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ2tleWJpbmRpbmcnLCAgICAgICAgIChpc3NldCgkcGFyYW1zWydrZXliaW5kaW5nJ10pID8gMSA6IDApKTsNCiR0aGlzLT5BY2VTZXRQcmVmZXJlbmNlKCdtb2RlJywgICAgICAgICAgICAgICAkcGFyYW1zWydtb2RlJ10pOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ3BlcnNpc3RlbnRfaHNjcm9sbCcsIChpc3NldCgkcGFyYW1zWydwZXJzaXN0ZW50X2hzY3JvbGwnXSkgPyAxIDogMCkpOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ3ByaW50X21hcmdpbicsICAgICAgIChpc3NldCgkcGFyYW1zWydwcmludF9tYXJnaW4nXSkgPyAxIDogMCkpOw0KJHRoaXMtPkFjZVNldFByZWZlcmVuY2UoJ3Nob3dfZ3V0dGVyJywgICAgICAgIChpc3NldCgkcGFyYW1zWydzaG93X2d1dHRlciddKSA/IDEgOiAwKSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnc2hvd19pbnZpc2libGVzJywgICAgKGlzc2V0KCRwYXJhbXNbJ3Nob3dfaW52aXNpYmxlcyddKSA/IDEgOiAwKSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnc29mdF90YWInLCAgICAgICAgICAgKGlzc2V0KCRwYXJhbXNbJ3NvZnRfdGFiJ10pID8gMSA6IDApKTsNCiR0aGlzLT5BY2VTZXRQcmVmZXJlbmNlKCdzb2Z0X3dyYXAnLCAgICAgICAgICAkcGFyYW1zWydzb2Z0X3dyYXAnXSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgndGFiX3NpemUnLCAgICAgICAgICAgJHBhcmFtc1sndGFiX3NpemUnXSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgndGhlbWUnLCAgICAgICAgICAgICAgJHBhcmFtc1sndGhlbWUnXSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnd2lkdGgnLCAgICAgICAgICAgICAgJHBhcmFtc1snd2lkdGgnXSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnd2lkdGhfdW5pdHMnLCAgICAgICAgJHBhcmFtc1snd2lkdGhfdW5pdHMnXSk7DQokdGhpcy0+QWNlU2V0UHJlZmVyZW5jZSgnd3JhcF9saW5lJywgICAgICAgICAgKGlzc2V0KCRwYXJhbXNbJ3dyYXBfbGluZSddKSA/IDEgOiAwKSk7DQoNCi8vIHJlZGlyZWN0IHRvIHRhYg0KJHBhcmFtcyA9IGFycmF5KA0KCSdtb2R1bGVfbWVzc2FnZScgPT4gJHRoaXMtPkxhbmcoJ3NldHRpbmdzc2F2ZWQnKQ0KKTsNCg0KJHRoaXMtPlJlZGlyZWN0VG9BZG1pblRhYignc2V0dGluZ3NfYmFja2VuZCcsICRwYXJhbXMsICdkZWZhdWx0YWRtaW4nKTsNCg0KIw0KIyBFT0YNCiM=]]></data>
	</file>
	<file>
	  <filename>/action.save_settings_frontend.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYoIWlzX29iamVjdChjbXNtcygpKSkgZXhpdDsNCg0KaWYoISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpDQp7DQogIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5MYW5nKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkcGVybWlzc2lvbicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkoJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgDQogIHJldHVybjsNCn0NCg0KDQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfYXV0b19oZWlnaHQnLCAgICAgICAgaXNzZXQoJHBhcmFtc1snZnJvbnRlbmRfYXV0b19oZWlnaHQnXSkgPyAxIDogMCk7DQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfZm9udHNpemUnLCAgICAgICAgICAgJHBhcmFtc1snZnJvbnRlbmRfZm9udHNpemUnXSk7DQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfaGVpZ2h0JywgICAgICAgICAgICAgJHBhcmFtc1snZnJvbnRlbmRfaGVpZ2h0J10pOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2hlaWdodF91bml0cycsICAgICAgICRwYXJhbXNbJ2Zyb250ZW5kX2hlaWdodF91bml0cyddKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnLCAgICAkcGFyYW1zWydmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnXSk7DQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfc3ludGF4YXJlYV90aGVtZScsICAgJHBhcmFtc1snZnJvbnRlbmRfc3ludGF4YXJlYV90aGVtZSddKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aCcsICAgICAgICAgICAgICAkcGFyYW1zWydmcm9udGVuZF93aWR0aCddKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aF91bml0cycsICAgICAgICAkcGFyYW1zWydmcm9udGVuZF93aWR0aF91bml0cyddKTsNCg0KLy8gcmVkaXJlY3QgdG8gdGFiDQokcGFyYW1zID0gYXJyYXkoDQoJJ21vZHVsZV9tZXNzYWdlJyA9PiAkdGhpcy0+TGFuZygnc2V0dGluZ3NzYXZlZCcpDQopOw0KDQokdGhpcy0+UmVkaXJlY3RUb0FkbWluVGFiKCdzZXR0aW5nc19mcm9udGVuZCcsICRwYXJhbXMsICdhZG1pbl9zZXR0aW5ncycpOw0KDQojDQojIEVPRg0KIw==]]></data>
	</file>
	<file>
	  <filename>/function.admin_prefstab_backend.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEluaXQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy8gZm9udCBzaXplIA0KJGZvbnRzID0gYXJyYXkoDQoJJzEwcHgnID0+ICcxMCcsDQoJJzExcHgnID0+ICcxMScsDQoJJzEycHgnID0+ICcxMicsDQoJJzEzcHgnID0+ICcxMycsDQoJJzE0cHgnID0+ICcxNCcsDQoJJzE2cHgnID0+ICcxNicsDQoJJzE4cHgnID0+ICcxOCcsDQoJJzIwcHgnID0+ICcyMCcsDQoJJzI0cHgnID0+ICcyNCcNCik7DQoNCiR1bml0cyA9IGFycmF5KA0KCSdweCcgPT4gJ3B4JywNCgknJScgPT4gJyUnLA0KCSdlbScgPT4gJ2VtJw0KKTsNCg0KLy8gdGFiIHNpemVzDQokdGFiX3NpemUgPSBhcnJheSgNCgknMicgPT4gJzInLA0KCSc0JyA9PiAnNCcsDQoJJzYnID0+ICc2JywNCgknOCcgPT4gJzgnDQopOw0KDQovLyB0ZXh0IHdyYXBwaW5nDQokc29mdF93cmFwID0gYXJyYXkoDQoJJ29mZicgPT4gJHRoaXMtPkxhbmcoJ29mZicpLA0KCSc0MCcgPT4gJHRoaXMtPkxhbmcoJzQwY29scycpLA0KCSc4MCcgPT4gJHRoaXMtPkxhbmcoJzgwY29scycpLA0KCScxMDAnID0+JHRoaXMtPkxhbmcoJzEwMGNvbHMnKSwNCgknMTQwJyA9PiAkdGhpcy0+TGFuZygnMTQwY29scycpDQopOw0KDQovLyBzYW1wbGUgY29udGVudA0KJHN5bnRheF9jb250ZW50ID0gJyc7DQokbW9kZV9wYXRoID0gY21zX2pvaW5fcGF0aCgkdGhpcy0+R2V0TW9kdWxlUGF0aCgpLCAnc2FtcGxlcycsICR0aGlzLT5BY2VHZXRQcmVmZXJlbmNlKCdtb2RlJywgJ2h0bWwnKSAuICcuaW5jJyk7DQoNCmlmICggaXNfcmVhZGFibGUoJG1vZGVfcGF0aCkgKSAkc3ludGF4X2NvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJG1vZGVfcGF0aCk7DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgU21hcnR5IHByb2Nlc3NpbmcNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KJHNtYXJ0eS0+YXNzaWduKCdmb250c2l6ZWlucHV0JywgJGZvbnRzKTsNCiRzbWFydHktPmFzc2lnbigndW5pdHNpbnB1dCcsICR1bml0cyk7DQokc21hcnR5LT5hc3NpZ24oJ3RhYl9zaXplaW5wdXQnLCAkdGFiX3NpemUpOw0KJHNtYXJ0eS0+YXNzaWduKCdzb2Z0X3dyYXBpbnB1dCcsICRzb2Z0X3dyYXApOw0KDQokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc2F2ZXNldHRpbmdzJykpKTsNCg0KLy8gY3JlYXRlIHRlc3QgdGV4dGFyZWENCi8vIGRlcHJlY2F0ZWQNCiRzbWFydHktPmFzc2lnbigndGVzdGFyZWEnLCAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJHN5bnRheF9jb250ZW50LCAndGVzdGFyZWEnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAkdGhpcy0+R2V0TmFtZSgpLCBjbXNfdXNlcnByZWZzOjpnZXRfZm9yX3VzZXIoJHVzZXJpZCwgJ21vZGUnLCAndGhlbWUnLCAnZm9udHNpemUnLCAnZnVsbF9saW5lJywgJ2hpZ2hsaWdodF9hY3RpdmUnLCAnc2hvd19pbnZpc2libGVzJywgJ3BlcnNpc3Rlbl9oc2Nyb2xsJywgJ2tleWJpbmRpbmcnLCAnc29mdF93cmFwJywgJ3Nob3dfZ3V0dGVyJywgJ3ByaW50X21hcmdpbicsICdzb2Z0X3RhYicsICdoaWdobGlnaHRfc2VsZWN0ZWQnLCAnZW5hYmxlX2JlaGF2aW9ycycpKSk7DQokc21hcnR5LT5hc3NpZ24oJ3Rlc3RhcmVhY29udGVudCcsICRzeW50YXhfY29udGVudCk7DQoNCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgncHJlZnN0YWJfYmFja2VuZC50cGwnKTsNCg0KIw0KIyBFT0YNCiM=]]></data>
	</file>
	<file>
	  <filename>/function.admin_prefstab_frontend.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIEluaXQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KJGZvbnRzID0gYXJyYXkgKA0KCScxMHB4JyA9PiAnMTAnLA0KCScxMXB4JyA9PiAnMTEnLA0KCScxMnB4JyA9PiAnMTInLA0KCScxM3B4JyA9PiAnMTMnLA0KCScxNHB4JyA9PiAnMTQnLA0KCScxNnB4JyA9PiAnMTYnLA0KCScxOHB4JyA9PiAnMTgnLA0KCScyMHB4JyA9PiAnMjAnLA0KCScyNHB4JyA9PiAnMjQnDQopOw0KDQokdW5pdHMgPSBhcnJheSAoDQoJJ3B4JyA9PiAncHgnLA0KCSclJyA9PiAnJScsDQoJJ2VtJyA9PiAnZW0nDQopOw0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFNtYXJ0eSBwcm9jZXNzaW5nDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiRzbWFydHktPmFzc2lnbignZm9udHNpemVpbnB1dCcsICRmb250cyk7DQokc21hcnR5LT5hc3NpZ24oJ3VuaXRzaW5wdXQnLCAkdW5pdHMpOw0KDQovLyBzdWJtaXQgc2V0dGluZ3MNCiRzbWFydHktPmFzc2lnbignZnJvbnRlbmRzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnZnJvbnRlbmRzdWJtaXQnLCAkdGhpcy0+TGFuZygnc2F2ZXNldHRpbmdzJykpKTsNCg0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdwcmVmc3RhYl9mcm9udGVuZC50cGwnKTsNCg0KIw0KIyBFT0YNCiM=]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAUAAAABAAAQAAByAHkAdQBpZHNjbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAgAagBxAHUAZQByAHkAdQBpZHNjbGJvb2wBAAAACABqAHEAdQBlAHIAeQB1AGlsZzFTY29tcAAAAAAAAAYpAAAACABqAHEAdQBlAHIAeQB1AGltb0REYmxvYgAAAAiiA5hZ67bBQQAAAAgAagBxAHUAZQByAHkAdQBpbW9kRGJsb2IAAAAIogOYWeu2wUEAAAAIAGoAcQB1AGUAcgB5AHUAaXBoMVNjb21wAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAAAAAAAAQAAAIAAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/images/editor_screenshot.jpg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMfaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0NSA3OS4xNjM0OTksIDIwMTgvMDgvMTMtMTY6NDA6MjIgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlGNDY2OTcwRjhFMjExRTlCMkY5QjhFMURGNzZGQjg4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlGNDY2OTZGRjhFMjExRTlCMkY5QjhFMURGNzZGQjg4IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSIwRTcxOUY3OTM1NjAzQzY0QTM0RDg3MDQ0QzZGQUNGMCIgc3RSZWY6ZG9jdW1lbnRJRD0iMEU3MTlGNzkzNTYwM0M2NEEzNEQ4NzA0NEM2RkFDRjAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAQCwsLDAsQDAwQFw8NDxcbFBAQFBsfFxcXFxcfHhcaGhoaFx4eIyUnJSMeLy8zMy8vQEBAQEBAQEBAQEBAQEBAAREPDxETERUSEhUUERQRFBoUFhYUGiYaGhwaGiYwIx4eHh4jMCsuJycnLis1NTAwNTVAQD9AQEBAQEBAQEBAQED/wAARCAEbAlgDASIAAhEBAxEB/8QAiQABAAIDAQAAAAAAAAAAAAAAAAIDAQQFBgEBAQEAAAAAAAAAAAAAAAAAAAECEAACAgECAwYEBAUCBgICAwABAgADBBESIRMFMUFRkSJicTKiFGGBUjOhQiNTBnIVscHRkiQWgkPwc2M0NREBAQABBAMBAQEAAAAAAAAAAAERIVECEjFBImGhkf/aAAwDAQACEQMRAD8A82zvvYant8Zje36j5w/7jfGY7x8R/wAYEwuQQCEtIPEEI5B/hM7Mn+3b/wBj/wDSexLvroGIHYADNR+qqpcgWvTUdtt6gmtT38fw74HmdmT/AG7f+x/+kbMn+3b/ANj/APSes+9q3hPuBvb5V3cTrLDZZofUew95geK5w/X/ABjnD+5/Garabj8Zs4vT3yKmvayvHx1bYbbTtUt+kQM84f3P4xzh/c/jLV6F1BnsQINKgG366q+o1HLPfrNbMw7cK7kXbS+0MdvEcYFosJGoYkfGC7fqPnKqPlb4yZgS3t+o+czvb9R85AdsM4RdTAnvbxPnG9vE+crWx2UstbFR3iQ+5X9J84F+9vE+cb28T5yk5AHAqRHO1XcEO3x7uEC7e3ifON7eJ85R9yv6T5x9wv6T5wL97eJ843t4nzlH3A/SY+4H6TAv3t4nzje3ifOUfcD9Jj7gfpMC/e3ifON7eJ85R9wP0mZGQpOhBGvfAu3t4nzje36j5zYx6qHxr3sWw2Jpyyg1Qf65k14W0kDI3acNVGmv4wNbc36j5zBdvE+cSJgS3t4nzmdzfqPnIQzBF3GBPe3ifON7eJ85VzG2czlts/V3SP3K/pPnAv3t4nzje3ifOUfcr4HzmTkAHQqQe3T8IF29vE+cb28T5yk3hdNVI1Go+Ex9yv6T5wL97eJ843t4nzlH3K/pPnJLazglK2YDtIgW728T5xvbxPnKeeN23ad3Zp3zH3K/pPnAv3t4nzje3ifOUm/Q6FSD26QMhSdCCNe+BdvbxPnMb2/UfOJEwJb2/UfOZ3t+o+ch3yQgZ3N4nzje36j5zYwqqnN1tq8xMes2cvs3HXQa/hLN1WXjXvyUqtoAdXrG1SCdNrCBp728T5xubxPnMTa6di/dZSoys1Q42leBA8YGtvb9R843t4nznfHTul2f+Ip1tx9S+3g53dm4zhW1PTa1VilXU6FT2jw1gR3t+o+cxvb9R85gzECQdv1HzmQ1jHau5mPHaoLHyEgJ2v8AGiRblkcDtrGvfpqYHL2ZP9u3/sf/AKRsyf7dv/Y//Setvyvt6XusdtiDU6Hj8BIpnVtjrkm3ZUw1DO23T8D+MDymzJ/t2/8AY/8A0jZk/wBu3/sf/pPWtmVoqs14VbPkYtwb4SwWWaj1nzgeKawqSrMVYcCp1BB/EGY5w/ufxmerceqZRPEmw6yqvEssxLstCpTHKixP59G7GA8IFnOH9z+Mc4f3P4yeR0bLoRWIWxmKgV16s2rDd4eEobBzFDM2PYAg3MSp0APeYFnOH6/4xzh+v+M1OEyw9UDa5w/ufxjnD+5/GZxumWZGMcrm1U1BzXrYSPUJm3pV9eG2arJbSr7PQdSTrpqPw1gR5w/ufxjnD9f8ZLJ6TmY1ldRTm2WqXC1gsQB26yhcPKex6kosa2vi6BTuX4iBbzh+v+Mzzh+v+MoXEyWra1aXNa67nCnQaduvwlUDeVm3Die0d8TCdq/lEDD/ADt8Y7x8R/xmHOljfGY3flA9qfmnObEz0puw6RW1F7MVuZtGrWw6sCnfOeP8izAAGrqYjtYhgT+PCZ/9jy/7VX1QN1umWBbVRUJa2pqnJG7ZWNDx04fCdJu/85wP/Y8v+1V9Uf8AsWX/AGqvqgcJvmPxm7jX4VvT26fmO9AFnNruRd44jRlKzWNSkklzx/COSn6z5QOq/WcRueiGxKwlFWNwOrLUdWZtD6dZzeo3pk5119ZJrsbVC3A6aDu7pDkp+s+UclP1nygZo+VvjJmRUKg0B18SZkmBkdsjcCa+HcQZnWZ3QI1W1AVFzpywVK6E9p+ZdO+YtsraoqOJO3Yu3TZoPVx79ZPdG6AGRWdCzfp3enXcANCvnIU3VJXsbX5y2mmvA6Se4RugSTJo4lx6+Oh2/wAuuoHD8Jq2sGbVezTgNNNPwmxujdA1Ym1uEbhA1Ym1uEbhA1YUEkADjNrcI3QN3FsRcTKQ5BqL6bagNRZ8ZY2QpQj/AHK5tRpsNZ0P4ds526N0DMwY3TBMDPfI3Amvh4zOszugYS6nYosO4Bdu3TRxx10DDhtln3GNu17CO/b3a9khujdAy2RUSVQ7AAu1tmv+oafjK7bletk7QAnL4dmnzcZPdG6BI2Iqhiw2s2u3TcWXbpt17oGTjktqo2/yjb/Lp2ecjujdAl9xRuB1HZofTw01/gZVXZWEsQ6epwy71LDQfgvfJ7hG6AXIrUqAdAoTQhe8fMZkZFArA0BYD9P83Hj+cxujdArvfciqW1YBdw07TxOuv4a9kpAJIAE2t0boEjImN0wTAz3yQkNZndAuovtx7BbUdrjhx4gg9oI8JtV9QRzyMilExH/cWkbTr3Pr4ic/dG6BbcqJa6VvzawfTZppuHjpLcDJGLlJaxblj9xUOhYf85q7o3QPQ/7x09FF61/1btRaq/uKB2bjOE7tY7OxLMx11Y6n8zK90boGTMRumNYGROz/AI5+5l/6a/8AiZxQ02cHPuwXeynaeYAHVxqp07Ozwgejzce/J5VdbCusPvts7SNvy6Ke3jNZen5lRUDZkJTcbalcheYLB6tw0IUgzS/9jy/7VX1R/wCx5f8Aaq+qBuX9NyHZHCV8amqempuWqFju1BYNqPGdGlOXVXXrrsAXXt7Jwv8A2PL/ALVX1R/7Hl/2qvqgcvq3/wDp5X/7DLOkZtGJkuMoE4t6bLQBu4g7lOkqyT9zfZkOdr2sWIUcAT4ayvkp+s+UDr09bxt7WXM6uclrRouulewon5yuvq9ATEWyyw8qi6u8EE6vZ8nf6vjOZyU/WfKOSn6z5QKZJvmlnJT9Z8oNSk67z5QOj07qWPj9POM2Q+NebTZvWoWjbp2ceEux+sYNK10Wu99Ja03sa9uu4h0baD+oflORyU/WfKOSn6z5QOx/vOHa62XOy2clkb0kpvZ92jBSCw0i7q2BebkF9uOrvVat9aHc3LXaU014fhOPyU/WfKOSn6z5QOvT1fCGMyW22sQLQFZf6ur/AClbE0HHv1E4Q4CXclP1nyjkp+sn8oF6dq/lEijepfiIgYtI5jcO+R1HhJW/uN8ZCBnUeEtXHyHofJSlmx6iBZaAdik9gJlM6/S6si3pXUK+agrtrVaKntVNXVwz6Ix4cO+BydR4TG4bwm3ge+TRq1DB03n+U66aGVps+4r367P5tvbp+EAju+7ZWDsUu/HsUdpkRaWBKpqFGrEa8B4mdOu3GoFlmKKTjCl9gb91rOHC0N/wHCZTJ3O4r5JuvxUY6hQrWjtB7h8JjvddGus3crnj9I85bat1Co1tW1bBqh11DD8p08bIrqqrqsWjfw5h0U+pnYNx/ATS0ZsPDNJQtVbbqrsugLEbdynuMdrnxjU6zdq872jzMc72jzMuzvstV+34Xf8A3CvXka//AMe71TVmpcxLMLOd7R5mOd7R5mVxKizne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXECzne0eZjne0eZlcQLOd7R5mOd7R5mVxAs53tHmY53tHmZXEC1LvWvpHaO8xK0+dfiIgX3ki1tJXuMsv/AHWlUDO4zcxOl5WdWXoeg2aMUoZwLnFY3PtXTuHjNOdbAswKul2BMyvE6jkFkvexXZ1oA9NdRRSBv/mMDkhyRrIO7K4YdoHCW1vsDAKp1Gg1Gun4iUsVW1Sy71Gmq66ajw1gZpqtv5nL0/pIbG18B4fjI7bSxTY28cSu06j4jtnUHUcdQ9mPZyQKnSrF2abLDpoQw4Nr4mWU9TxwNTav3BqpDW2bwC1eu9Sycde/8Zjty10a6zdxlWxtdiltO3apOnx0llePfbXZci+ipdzMQeI100XxM6lGdhqqMckUbbLmurRWAtNnyN/p+Mfe4nJYJmcvdVWlVQVtKmU6ux07/h2x2ux1m7jbj3RuM2s/JxryvJr9a/uZBAQ2nx5a8BNSbl0ZvlncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBncY3GYiBJGO9fiImE+dfiIgbd/7rSqW3/utKoCdHp/SRn49tleRsuqV3NZrY1hUG713fKpPdOfOr0jqOD0+prXtyWvIsV8JQPtrd42oXOvd38PhA5IOoB8ZXb8w+EsH/5pK7fmHwgQiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgZT51+IiE+dfiIgbd/7rSqW3/utKoGZ0cDpBycHJzbnNVdVbnGQD1XPWNX09q95nNnSwOvdQwa2pSwvTynqprJGlRfjvXgezwgc9EscaopYDtIHZKbfmHwloZhr6j6vm04a98rZ3rtV0O114qw7iIF1XTMy01rtFZu3FA50bao3MxXtA0kqemtcbwt1R5Kghg42sT+J04QeoLZauRfTrkj5r6nNbt4HvGokn6jXZk222U61XViqxA2jHT+ctp80x9tfKpen5DcnbsIyGdEYNqoav5gx7vGZyMekUYtuOG3XlkZWIOrIQPTp4ky6nKrxsHIWt11yT/RoGrNTr6XZmPivCUDLUY1FIr0txnL127uHqIYgp+Uv1f9NP4ZeBkYaq1pUhmKaoddrr2qfxmx0fo1vVfuuXYlf21RsG5lXc/cvqI9Pi3dKc7P8AvNDtdTuLEM5dQSOxBpwEdMzq8HIse2n7im6p6Lqt2wlH0+VhroRpLM418pcZ0Wr0PqDnHFYR/urXx0ZHDKttfFg7DgOHH4S27/Gup04pyiabF2LaKq7A1rVMdosCfp1Ok2cPqmN03pWf9tYofO9OJgjWyzGJBR7WsZQAdh04dszmddx6cemvptY+6bFx6b8wsToKgGNSoRw4jiZUaeb/AI71TCWtnRbi7GtkoPMauxRvNbjx0M1kxVpdl6ilmMGTWncpBZtwHlprOj1D/J7cuxb6qXpyN5ssL3NbVqw2kV1HQKJzMzOyM1ka/aSgIXaNOBkuc49b+10wtTpwvqyL8exeVW+2oOwUsvi2vZIjpmUcb7n0BNu/YT6+Xrt5mn6dZDGyKq67ab6jdVdtJAbaQUOoOvGXnqm7FTHdH0rTlAJYVQprqNy6do7JPpET0rJSytLWrQXOEQ7x6xpqXXxWV5GBdVljFQrY7ttr2kHv09WnZLMjqX3C1BqFVsdwcdgfkrX/AOpv1DUdsPn0C26/HoNWRcGG8tuClz62Xh4cBH17GD08WWXHHtRcagitsi5titZ3hfz7JB8C2vGGTZZUqNuNalvVYFO07OGhjHyqq8d8TIp51DMLFAbYyOBpqDx7R2yxOoV14duKlLaWqV2s+6sEnXmBCODAcI1EbcA4r1feWIqsV5laNrYqtx1008IfErvcL08m7bXusVjo2u4jRAdNeGkzk56XYi4q1MoVgys78woANNqEjUKZRj3rQ5sNS22D9osTojfq0HbGuM+yfqogg6EEEdoPAxLL77ci1rr232N8zGVzQREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAynzr8REJ86/ERA27/3WlUtv/daVQMztdNwsLK6aBTVRk9T1tL49trV2lFGqGlQNrHtM4s3MTqlmFXtpqpFwDBMlk1tUONG0bXT4cOEDVrqexWK6aJxbcQpHnKLfmHwlkrt+YfCBbgUVZOXXTa+xGP46t7Rp2S7H6WMh7OXeDTWQpsRC3qbsXadOzvM1xkuuQmRWqo9e3aFHp1Uaakfj3yYz3UvtqrFdmm6oA7dV7G7ddZZj2mqwdMJrtsa5VGMzLkjTUpp8hX9W+YycTHrx6LK7g1lqa7NDq5LaenuGkinUL612IEVCWLoF9L7+Hq8dO7wlZyyaFx2VDsBFbketVJ10HGXTBqux8aynLpTLx9UtYJtc6Die0bT3SNeIlj5DvZyMeh9rPpvOrMQihR8Jr12PXYlqnVkIZdeI1E2E6hbW9rKlelxDMm3Vd68QwBPbJoarW6U/MVEtDqbWqtbaRy9o37iPArxhulOuL9yLNTtDhNvAox2ghvHv0mP9w0pyWDMcnM0Fo27a0A7SvHiSJQ2a5qSpwhKKERyPUFB1A7dJfk1WZuFViAhclbrVfY9aqRt4btdT2zY/xzp69Q6rVXbVzsWoGzKGu0CtQeLd+mvcJz7rWvue59N9h3NoNBrNjpOevTepY+c6mxKWJZFO0kEFeHnM38VRkWpde9qVpSjE7aqtQijs9O7UyuWZBxzkP9sX5JJKc3QWaHj6gvCVwEREBERAREQEREBEaiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgZT51+IiE+dfiIgbd/wC60qlt/wC60qgZno+mYVB6VicqyqvM6jZdWGtp5xcoNFr1P7ajxHHWebm3jdS6ji0PRjXOlLkllABAJGhKkg7SR4QNUgqSp7VJB+I4Sq35h8JZK7fmHwgQiIgJ6dKcM9H6Z0/Cc139XYrZZZTW24lwjFrD6l2fy7fznmJebcy2qoa2NTh68ogHbTuO75gOHHjxgd9P8c6RdvuqvyasTHe+nINoU2bsdOZvr0HYfCMfo/Q0std2vbGv6d95jqyq9lfq2sSRoCw04Tj5HXOr5LBr8t3IR6xrtHpsG1+AH8w7T2yurqvUaLabqshlsx6+TSeB21f29CNCOPfAnV09chbbsfJprqrJCLk2Cq5gBrrs0PbOtWuIn+P4WPhlhmdUset2epGDNuWsqXb1Kq68Ns8/dbZkWvdcd9th3O2gGp/LhJHJyDVVUbG5eOS1K9mxmOrFfzED0i/430U7zzcrlY1t1F9h2jmGhAzNUunAa8OMsTonS8PqSV41t1htpyhW9i1sBZQp37lZTqpHAd+vGcPI6912705GXaQy/KwC6qw0102jtHf3ypesdUW+vJGS/OpLmp+Gqm39zu09XfA2em2cz/H+q1MiMtKVW1MVG9XexVOj/N2S0dExGwR1UW2f7f8AbM7nhvXMVuXyPgWOvwnPo6n1DHsvtx7jXZkgi8hVIfXjxUrpLcnqVT9Or6Xh0HHxg4uvLvzGuu27dewBVHcIGtkDEFdBx+ZzDXrkcwADma//AF6fy6Ts/wCOdLxup4PUce3Yl7mpca5v5H9T6a92oWca/KyclKUucutCcqgaD0prrtGnbxkebfXVZikslVhVraiNNxT5SdePDWB6zqfQeinMWwm1MfIspw8RcYKNHKDW63Xt1J7BNNv8b6eiDGN1zdSfHtvTTbyAaXavQ9/q2/lOVT13rNBY05lib1VG+U+msbU01HAgcNRxlI6jngqRe4KVNQp4aipySyfnrA7jf4xhMwxabrhlV5NGJfe4HJLWqWflrpr6dPGa1XTuh32ZVlRzFxenVs+SrFDbYQ/LTl8NF49us0b+udYyK1qvzLHSsqyLqBo1fyNqADqPGSb/ACDrTZCZRy259asquFQel/mDALo2v4wI9X6emBmmihnspauu+suPWEtXeA4HeO+aPbOjidby8fKys2wnIycul6Gdzw/qaDcw79AOAnNA0AHhA6NF9OZZjYdlK1oXQNYvBmCrt0/+RhFTLvv+4QU04db2MlKhXIU7dmv/ADM54JBBB0I4gibJ6jnGxbead6AgMAo13fNu4erX8ZnGw2bumUrULai7Cx6OUp03BLwTo2n8w0mbcHp2OjNfZbqbraawunZX2M3/AAmqvUc5Xexb2D2ab24fy9mnhp+EqtyLrhpa5cBmcA/qf5j+cYvujbtx67a+nJQSovLJ69NQ24AnVdNR4ay+zpWCMqqlL22sbFtAZXcctdwbh2a+E5pybzStG88pDuReHpbt1B7ZY+fmOwdrTuXXRgADqw2sToOOojF3EckYm9DhlzWUBYWablfvHCdPp+FjZGLiEopvD2WOD/8AbSp0YH8VnGlteVk1Gs12FTTu5Wn8u/5tPjLZcaDpDpOGEqD3EXWbG2hl4ixtNqr28B3zGTgU9MCZX7+1xWFbTY1gB5in4cJoDNy+WtXMOxdNvAajQ7gN2mumsjbk5FylLbGdS5sIP627W/OTHL3dAvt+4tDpWE9KrsQa/KNCfzlLHRSfCbnSuov0vPrz605j1Bwqa7QS6lfV+HHsmofUSW4liSfDjxmh6xf8U6TaiVVZOQMxwFG4LyhYa0u+O0B9JVX/AI10rIu203ZFdVF9mLltaF3Fq62s5lWg7PT2Thnq3Uz25L8dfDvUVnu/SAJZb13rNzVtbluzUhhWfSNN67G7BxJXhqYHR/2Xo4xz1PmZJ6auOLjV6PuC7WmjTd8oXUayxf8AG+nrk5mKbbcjJr5b4mMjJTa9VtfN3HmDRmHYVE42N1bqWIazjZDV8lDVWAAQEY7yujAgjdx4yyrrvV6ja1eU4a9zZYxCsxsI2lwWBIOnDhA6af490+zG2JbeOoHDGZ6tooTVtgR+GvqPlLT/AItg2OMai68X15aYeRfYBymYqz2cpNNdV26DUzk5vXc7KxacNXanFqqSt61I/qNWS29m03dp7NZHI671nJVFvzLHFbK6dg2vX8rDQDiPGBu4PSuj9RzLUxmyKMXEqe3J57ILGKtsUI2mi69+vZNXLw+l4ubl0C6y+hKt+JZVo39RtCFtbs2jiCRIP13q75KZbZTfcVqyq4VB6X+YEBdG179ZLG65l03ZmRZ/XvzKGxi7aBVVtPUVA0OgHAQOdEAaDTwiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgZT51+IiE+dfiIgbd/wC60qlt/wC60qgJ2uk5uT0/pmRn8xjTW/2+Lj/yNkWjczv+CLx/Eziy+nFzcimx6KrLKKvVYVBKKdO346QKePaeJPEn8ZVb8w+EsldvzD4QIREQE9RzcZ+k9E6aqviU9QZhdatpC/uKlhddNG3d2vZPLwXJARmJC/KpPBdfAd0D2LdF6WC1+V058NaGyUGLvbdkV0V71tBb8e8cJDFxemreXq6eXOf0o5KYyOx0YNtZK9wZiW0117p5V8rIsIay+x2VdgLOxIQ/y8T2GRXItRksS5kevhW4YgoPBTrwEDcGL08m85WQ/TrkZtmG9T2sBpqAz8NPDjOlb03GP+Orl0Ym2+itLMt8gWI7Bm4PS37bow4ads4D2M7F7HLO51LMdSx8ST2ybZWQ1Qx3vsalflpLkoP/AI66QPQZ2Dbk9a6aMfD51eXi1cqixrDUPT6gLCd22vtm2nSekWdSzf8AwnqqwqENWO63f+QxfZZeEH9QoO7T4meUGVk+nS+z+nqK9Hb0a9oXjw/KTXJz3tFqXXvfWpIsDuXVB2+rXUL4wN/JxserM6pXi4Vt9Faa1NZuR8UEg73X+HqnJ/jJ/cXauec+tw0sO462Dwb9UhqPGB6rMxOs5t3QGqrbHzLaWr5xr5a1MHbt0UAaJ+cttqXNyMk5PTsjMPT8euvDW4PXflMbdjWvpo20k/kJ5ezK6gCFtyLwRo6h7H14jgw1Ph3y2nq/Uaqr0XIdjkoqNazsXVVbf6G14antgelq6B0q3N6hT9v/AEsW1Pt2FugsvNe5sAMx9Xq7xxnmmqYdOtdsFkZcna2X6gtXD/8ArlT36+M1eZboo3torb1G48H/AFD3fjL/AL/J+xswN39G60X3E8XsdRoNzHuHbA1oiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiBlPnX4iIT51+IiBt3/utKpbf+60qgZnqP8AH2rXo4UuPU+QWyC6qcAmvaGCNxbmTy03cfo2flY33VSIUIY1ozhbbVq42GpDxYL3wNIcAB4d8rt+YfCWA68RI8vm3pXvWvfoOZYdEXXvY+ECqJsZ+Df0/JbFyCpdQrBqzuRkcblZW8CJrwB7OHbPVbFSjp5xasVuibaDl3MKzcLS4528seZrr3DhpPKzGg7dIHs6OnYeFkY65aYrl8zLt5YdHHJ5RNSuQeAJHATU6Hnf7nmWWvg46MKEoL1LUOUSxbnCm8hW4cG7wJ5favhMkA9sD2XTcbEROWPs8mj7rIXrN7hFIqH7bVBjqq6dmzvnKz+oYuL0zGwsfFx7EycUmzIKg3KxdtrbhxBVR2fjODtHhMwN3qQyAMPn101/+MvK5G31pqdGt2n5/HWb3+KZIqzsmjZS9mTjWpVz+ANgGq17iQAH75xII14GB6/o9OJVRlfcYVNueLyuXio1IWugp6QhtbQLr2lDrrKXrxB0Mha8T/eUp3CttGY4SuT6tPQbtPzKzyu0eEaDw/GB6T/I7LcmvCzKqMYYrpjhL0KhzYE0NTAtrsU+InJ6zXlVdUvTMqroyNVL1UACoAqCuzThoRNIelgw7QdR+Usvvuybnvvc2W2HV3btMCuIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIGU+dfiIhPnX4iIG3f+60qlt/7rSqAnoeh9UqxaKrsuzGK4gtWlWDHLXePkrA9OjE9p7JyendOs6ha1VdtVJVS39U6FyATtQDiTwmzgdByc6lLK7US64WNjUMCWtWn52LDgg7hr2mBzNdSSeGpJ0+Mret7bFrrUu78FRRqST3ASfx4HvEg5KuGUlWHEEHQj84HV/ykqOoVU8oV3U49Ius19djctfnXsUr2cJxpIrYU5zBirHTmHUgt/qPaZeen5XMFVaG20IHsRBxr3ditr3yZhhrRL1wsp6GyFrYor7CACTqO0/Ad8iMe3mFHVk2DfadNdifrI8OMZi4qqJfkYj1ZIxqm57MFKFQRuDDUcJCzGyKSwtqZNmgfUdhPZr8YzDFVxESoREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAynzr8REJ86/ERA27/3WlUtv/daVQN/o9+Di5i5Oa9iirXYtScwsWUodeI001nUwevdOxMWqndcXw3Y1EV6Nk18WrRzr6ArnVh3zk9KwsfOyDRfeaWKnlBV3F2ALaeAHCZx8HHu6bl5XPIycUK3IC+nYW2as/wDyEDSJLEse1iSfiTrK2bZaraBtuh2txB+MnK7fmHwgb7Z+JdYmRcHV6QSmL20lx8uz9I14kSvBzK63tfLsbS4g2ps3rYNdTrxBDeE0Ymesxhe1zlvVZOMce/GZ7aa2t5lG31nbxGxuPfLc216unV0WgLm3KEt4gnkVnWvdp2EzmRoBHWZ/p2uP46SZ+LXm1ZSl2HK5Vqlfk9O3cvH1SR6nSlvNDvcyVipKwgqqYDX5xx1AnLiOkXtUrH3uz7Qm467VGij4SMRNMkREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQMp86/ERCfOvxEQNu/8AdaVS2/8AdaVQN3pWbjYOSMm+h8hkB5So4rAJBU7tQdeBl2N1DplFGXR9nc65gCk84Aqinco+Xt175X0ajCycz7fLWxzYGFOwhQrBWbc/f3dgl3SqMG7GyXzaCuPjoxtzd5BVyP6NdaaaFie6By5Vb8w+EsGug17e+QdWaxVUFmPAKOJJ/CBXE2LcG+rlo5X7m1gq4wOtg17C+nBfhNwYGE9Vyi4VGh66myG1YMxB3bVX3dkzeUizja5cTo19EyXSws4Vld0RQCwc19urDgo8NZA9LfkluapyAqOcYA6hbDtX1dmvGO3Hc63ZoxOlb0ylKVRcis38163dtUr3KoPL3Hh+c0LqLsew1X1muwfyt4eI8RLOUpZYhERKhERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREDKfOvxEQnzr8REDbv/daVS2/91pVA2+n55wLuetNd1g+Q27js1BB02kdoMv/AN4/8UYjYWO9CWPbWhD6K9g0JHr7u7WR6LThZGYMfMre3mqwq2tsVWCs25u89nZNnomHhZ1F9N1dTXIljJpYwy3ZV3Jya/k2jv1gceVuWVwykhgOBHAiXVVWWKWGnoGranTTzlLKz2KiAszcFUcSSYF69SuB3uqPkBSqZBGlg3DTUkfMfjKa8h66DQoG02Lbqe3cnZN3H6Yga2vLsRLRS78vUk06aet9OH5SJ6VWv9SzKC45FfLt2EljaNV1TXh2TGePhrHJW3U7XV1tRXDO1ij1AKX+YDQ8R8ZL/d8gJoqVq5CB7ADubl/ITx7pbjdKVL1Ga4XdY9ddIBY28sHcdR8olJ6aAXd7gmMta2LftJB5h2qug/Htj4Ppmzqlj7QKKVCszqu3Ub3HFtCe2alt1t7my5zY5/mY68PCWZGHfjBWcBqn/buQ7q3/ANJlE1JPSW32RESoREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAynzr8REJ86/ERA27/wB1pVLb/wB1pVA2sDPs6fab6q6rLNNFNqltvcdvEdusup6xbj7mpx8eu479l6oQ9YsGjBPV5eEz0I0HPWm+hLxcGUGzU7NEZtVHZrw750ei9Iou6ZkXkVX5WTTbyVaxR9uE7GYE6hmPf3CB52V2EhwQdCB2iWaEcD2jgfyldvzD4QNhOpZKjRwluqlC1i6syHtUsNCRMjqmQGYutdittIrZdUU18E2ju0mnEnWbLmt2vq+WgGux2DOwsddWXmfOB8YuzqxjY+LRrZVS5tY3LoGY/wAu3X5RNKdCrAWgY9+Q243OnKSsb14kfuP2D4dslnGa4WW1p3ZF2Q261y2nyjsVf9KjgJXOllU4dNq5FKmxfuGpeuz5CRodQF7uPZNXqCJXn5FdYColhCqOwDwjjZfE9JZWvE7HSOlYWfg3Nue7qKluXh1utbGtV3b15g/qce0DjJ5ON0OrpPS735623h+ayqo37bAr7jqdNo+WaRxCQO3hE9Gekr0TJpvdxZZflrVghlVktxWClrWVte0MAPx1leL0nDzep9XtybOTiYFjaorLXqXtKKN7+lQIHAjUdk7Tf46tt932eYlmMlhSqwqzblGh11Uad857ZIXHOHykLLurN38xO/XX/lJ2lzJrjyuL5asagds6f2GI2b9gpsF1epusOm0qib22L26+Esw6cdMnGelS2Pm12kpcFZl5e4cD8Y7I5ETdwcTGsxUvyC5514xqxXpwbQHc2vb2yy3DwcalfuHsN9gtC7dNgatto17/AFR2ngc6JsY9WPfdiUguGtYJeTppqW09H5TcrwenX3MlNjhMdXbI5hVflbYu1uwAxaOXGonVr6fhpabi7X0c+umlatCWdhvO5tNNB+HbKcrJSqzJxRShHMtAfTiAxHZ8NOEnbaDQjUTcyMHl4y5lL7sdjoFsGy3X/T/MPxE6+Vg4+dg0ZZRabU6ZbltyVCK9iXctdwA8JZcmMPORPUV9K6Zi9Osrzxb63wn9AUXCy9GLICw9KiUWf41TXmY+MLLHFgzDa6gekYpYIfw10Gso89Gom30hEt6tg12KLK3vRWQ8QwJ7DPQZeFgYnXOnYNdOuHbZzKsysIxutd9OO8FdlZ9OyB5SJ2MPA6davVMvqD28vDvWtVoCgubXddPUNB2Tf/8AXOlVW141915yMm7Jpxym3aOQNyu+o/HQgQPMRO/l9B6fi9OqezKH+4OlNvK3ro4tbQoqfNwB13TOV0z/ABunqa9O+7vrNWQ1WVbaAE2BdQy6Dh6vTqfjA8/E62Z0R16i+NSpoqWtbQbXW0uh/nqNX7gPdpNWqqit7srRnxsf0oLBtNlpHpUr/E/hJbFw04nUycfFekP6hkpipewUAV/NoRp26nWVZFeK7YRKclb6dWFK7jv3FQdp4nsknL8Xq0Il+Zh2YdvKsZWJG4FT3HxHap/AyiaZIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIGU+dfiIhPnX4iIG3f8AutKpbf8AutKoGxh9QzcB2fDtNL2DRiACSB/qBmPucprbsgMebkKUvdVHrRvmU6DTQ6Tof40cr/cRXj1mxLFZbyqbyF2Npx0O3Uze6N9zbhDpT05eGVOQ4zUG2pfTqy3hl7Bpp298DzUrt+YfCWDs/wCYkGVWtVWYIp0Bc8Qo8eECuNDprodPHunSt6Ym+mmkM1T6u+eSDWUUattA7NPx4zZxrEy8e0JjG+rn010U8QFQAgFiv4cTMXnpnDU4+nEltORkUBhRYyK3F1Hy8DwJHZOqnT8T0LXSbqrrL1bJ1P8ARWv5ezh5yS41eLiXn7ffStNTWXkn+rvIYoO7T4R3mx0u7krl5SEMthBDGwcAfW3Bm4+MjfkX5L8y9+Y+mm4gA6flOk3T8eqxKVqbKOSWsrNbaMmPoNjanh29us0MyinHvNVN65CD+dRpof0n8R+Esst0hZfdW4vWOp4dBx8XINVRLEAKpKlxoxRiNVJHhGN1TLpx/sHsdunO267HG3VgTqwV2BK7ppxNMt7qHVHzMiiylPtqcNFqw6g281qh1BLHtbXjrA631cZbZ33TfdOnLezaujp+ll02n8xNGIFt2Vk5Fr33Wu1th1dtdup+C6CVREDYPUM5hWDcdaiGrbQbgV4L6tNTpDZ+a165JtPOQaIwAG0eAHZNeJMQbFXUM2k2Gq4obTufQDQt+oDTgfhKnttsVFdiy1ghAf5QTqfMyES4mwt+6yP6OjkHG/YIA9HHd/xmKsi6m03VuVsOurcDru+bUHgdZXEYg2U6ln1s7V3shs03bQB8vZpw4flKGd3c2OdzsdzMe89usjEYF65uWuUmYLmOTWdUsOjFfgDw0mx/vnV/vRnjKYZSpylcBQor/QE026flNCIG3f1XqWSWORkvaXZHYtpqWq/bPZ/LLV/yDraV2VLm2BLWZ7Bovqaz5+On83eJz4gTpttotS6liltTB63HarDsIlw6l1AKiDIbbXd9zWOHpuPa68OH/Ca0QNm/qWfkG5r7y5ySjX8FG9q/kJCgdkk3VuptdXe2S5tpZ3qfhqrWDRz2fzTUiBuf7v1P7QYJyGOKum2shSQAd4G7TdoG46ayCdRzq8xs9LiMxyS9xAJYtwbUEacZrRAvys7Mzbxk5VrWXKAqOPTsC9gQLoFA/CRvysjJCre5cKSRr4ngSfE8JVEfot+5yOP9Q8UFR/8A1g6hfhLD1LPO3W86pqEIABXXhwIHCa0SYmy5u53kniTxJPEmIiVCIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiBlPnX4iIT51+IiBt3/utKpbf+60qgX4ozWZkwucX03OKd2u1e9tvcJbj19YzKbhj/cX0L6sjazFPH1anQnQTb/xsZR6h/Rs5dIB+51sFasCjBQ24jdxM6eDj4tvS8XDyqq2XFuvGcxu2HGDDctqhWAYkdh4+EDyvwldvzD4S06anadV1Oh8R3SttnNXmEhOG4rxOn4QIrY6q1auVR/mQHQN8RJhcuqnmjfXS+nqBKhtezz0m++LiW8sUcsYCa2XX7v65Cjirg8Rr2ADhJU9QLY+ReVrJe+pa67AGVEAIGinwExeW0ak3rlq9q1sEZlqY6OASEJ8D3SVVtjPXXqbQDtWksdra/wAums6x0NOZi4tdLivI3BW0+RgfVqTx2yzLfFOLfWtdAIrsCsoXdqgQrofx1Mdvz2vX9cnNbJGQy5C8mwKE5Q9IVAOCj8JrzqW1lsyuxlqspehQxtcBdqqNx1B1BE0csYi3kYbM9Pi40Ov4eIl43xMM2KYiJpCIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIGU+dfiIhPnX4iIG3f+60ql9+3mt8v1Sv0+36oECAe0a/GNB4dkn6fb9Uen2/VAjKrfmHwl/p9v1Su3buHy9nugUxJ+n2/VHp9v1QIaCNB4Sfp9v1R6fb9UCvQeEzJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIRJ+n2/VHp9v1QIp86/ERJpt3L8vaP1RA//9k=]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAOZ/AKyqqZiXlkh1j/Hx8RuL0CV6q4e83D3a/zNVasLi9S22/DaLuy2MwklRVpLG5dXV1Dp2jja2+oWHib7d8Onz+sbFxGqt1DTD/v3+/juRwkiBopXC3MvKykKay2JxeTWUyd/f31Om1ySU2WKNpnm111yEm+Pv9Sus/MTc6neCiPr6+ht5rySKxSSc57za7EOWxSSEvHG656vQ5lyy5BiS3TSb2fX297LT5qDK4jqWysri7yug6VSIprri+k6j1D6azd3s9r27upDN9CuRzfb6/CGh8EiLsS6FtiN/s9bp9FhgZNzu+imEuDlGTiau+mSo0SyJvk6q37azsnSHka+urVGdyO7u7kOczrDW7Cmk8z6AjPn7/CSHwEOk2jBge0ag0s/p+06ezf/79I+QkKvY9FOOsTKSx////ByDwCRqkyV0ojpngPjy7yiJwebm5sG/vkii2T6k4nx9flqw4nfE9rvY6T6Gr87l9KGfnyyOx2+Ej196iaWko0e29////////yH/C1hNUCBEYXRhWE1QPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS4wLWMwNjAgNjEuMTM0Nzc3LCAyMDEwLzAyLzEyLTE3OjMyOjAwICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkRCMzA3NzIxOUE3MTFFMTgyMjFDMzU0MzJGQzVDRTIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkRCMzA3NzMxOUE3MTFFMTgyMjFDMzU0MzJGQzVDRTIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyREIzMDc3MDE5QTcxMUUxODIyMUMzNTQzMkZDNUNFMiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoyREIzMDc3MTE5QTcxMUUxODIyMUMzNTQzMkZDNUNFMiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAEAAH8ALAAAAAAgACAAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOOVhVUfHxUb26UghgcAVMjpCNTAW82lBUSPCFzMzNzIWUpUiqSDxJGUSE+vz4hUS8pFZE2eBpdVz8fOT9X0V1GY1aLGG4cUtspZjnOBgYdH+TkexwquIcDQWN6JTwlGkMMXBtibFVcDPxDAgFUALwBUcgKgBRGrnxZeOVFmxcDBjxpww8KFAYLNGiINybIAEEqpKTIcKXDi5MdxtU5g2JfPS5tcsh89sNOCgCqQEjQkCODzwwy82ywcaZOHhZmcKAgkecJChkvFuSw+UZFkD0Lsmb1mSeEiRtnsBAY4mKLHx0+KJjwY4HJAjP//9zgEQDlyBEmTLigyXPHAQk/JmrEwOAgiQEsFAxgqILEbgE5HMasYYJkwY0bJCxg8TMhiZ8lNRL4iVIDDhEbOp68wHEESQEPQQJ4YbJigx8gLohwRuyHjBA/GGbEueMnSY4wJjascK0kCBUESFag8CPDwBYHNGiI/gzGDwUiEyhgALJlAxIkTNQo4fBASZoVJDAAlyGiRREhFHpE6NMDDJ0WMdwxwRNowIAEF17I4YYKeDRRAAwW4GBBfVmccEIETiiggBMcnlBECyIQwAIMXKjRwBuCDCCBgwQQQEMLFWqowAU0XiDjCVmAKMIQajQRgDp/2BBAE17AsMMJM15wwDGSTC5JowIn7NCGF03wAeQgHMjRAAJeQOClFmCGCaaXEHiBQAOQeaLmmmy26eabcAYCADs=]]></data>
	</file>
	<file>
	  <filename>/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABgAAAAIAAAAGAAAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAgAAAABAAAQAHNwYmxvYgAAAMhicAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAMAZQB4AHRid3NwYmxvYgAAAMhicGxpc3QwMNcBAgMEBQYHCAgICwgNCF1TaG93U3RhdHVzQmFyW1Nob3dQYXRoYmFyW1Nob3dUb29sYmFyW1Nob3dUYWJWaWV3XxAUQ29udGFpbmVyU2hvd1NpZGViYXJcV2luZG93Qm91bmRzW1Nob3dTaWRlYmFyCQkJCAlfEBd7ezIsIDIxN30sIHsxNDEwLCA3OTl9fQkIFyUxPUlgbXl6e3x9fpgAAAAAAAABAQAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAmQAAAAMAZQB4AHRsZzFTY29tcAAAAAAABFtqAAAAAwBlAHgAdGxzdkNibG9iAAACsGJwbGlzdDAw2gECAwQFBgcICQoLDA0MSElISksMXxASdmlld09wdGlvbnNWZXJzaW9uXxAPc2hvd0ljb25QcmV2aWV3V2NvbHVtbnNfEBFjYWxjdWxhdGVBbGxTaXplc18QD3Njcm9sbFBvc2l0aW9uWVh0ZXh0U2l6ZV8QD3Njcm9sbFBvc2l0aW9uWFpzb3J0Q29sdW1uWGljb25TaXplXxAQdXNlUmVsYXRpdmVEYXRlcxABCasOFxwhJSovNDk+Q9QPEBESEwwVDFppZGVudGlmaWVyWWFzY2VuZGluZ1V3aWR0aFd2aXNpYmxlVG5hbWUJEQH9CdQPEBESGBkaGVh1YmlxdWl0eQgQIwjUEhEQDwweGSAJELUIXGRhdGVNb2RpZmllZNQSERAPGR4ZJAgIW2RhdGVDcmVhdGVk1BIREA8MJxkpCRBhCFRzaXpl1BIREA8MLAwuCRBzCVRraW5k1BIREA8ZMQwzCBBkCVVsYWJlbNQSERAPGTYMOAgQSwlXdmVyc2lvbtQSERAPGTsMPQgRASwJWGNvbW1lbnRz1BIREA8ZQBlCCBDICF5kYXRlTGFzdE9wZW5lZNQPEBESRBkeGVlkYXRlQWRkZWQICAkjAAAAAAAAAAAjQCwAAAAAAABUa2luZCNAQAAAAAAAAAkACAAdADIARABMAGAAcgB7AI0AmAChALQAtgC3AMMAzADXAOEA5wDvAPQA9QD4APkBAgELAQwBDgEPARgBGQEbARwBKQEyATMBNAFAAUkBSgFMAU0BUgFbAVwBXgFfAWQBbQFuAXABcQF3AYABgQGDAYQBjAGVAZYBmQGaAaMBrAGtAa8BsAG/AcgB0gHTAdQB1QHeAecB7AH1AAAAAAAAAgEAAAAAAAAATQAAAAAAAAAAAAAAAAAAAfYAAAADAGUAeAB0bHN2cGJsb2IAAAKVYnBsaXN0MDDaAQIDBAUGBwgJCgsMDQxHSEdJSgxfEBJ2aWV3T3B0aW9uc1ZlcnNpb25fEA9zaG93SWNvblByZXZpZXdXY29sdW1uc18QEWNhbGN1bGF0ZUFsbFNpemVzXxAPc2Nyb2xsUG9zaXRpb25ZWHRleHRTaXplXxAPc2Nyb2xsUG9zaXRpb25YWnNvcnRDb2x1bW5YaWNvblNpemVfEBB1c2VSZWxhdGl2ZURhdGVzEAEJ2Q4PEBESExQVFhcgJSktMjc8QVhjb21tZW50c15kYXRlTGFzdE9wZW5lZFxkYXRlTW9kaWZpZWRbZGF0ZUNyZWF0ZWRUc2l6ZVVsYWJlbFRraW5kV3ZlcnNpb25UbmFtZdQYGRobHB0MH1VpbmRleFV3aWR0aFlhc2NlbmRpbmdXdmlzaWJsZRAHEQEsCQjUGBkaGyEiHx8QCBDICAjUGBkaGwsmHwwQtQgJ1BgZGhsqJh8fEAIICNQYGRobLi8fDBADEGEICdQYGRobMzQMHxAFEGQJCNQYGRobODkMDBAEEHMJCdQYGRobPT4MHxAGEEsJCNQbGhkYDAxERQkJEQH9EAAJIwAAAAAAAAAAI0AsAAAAAAAAVGtpbmQjQEAAAAAAAAAJAAgAHQAyAEQATABgAHIAewCNAJgAoQC0ALYAtwDKANMA4gDvAPsBAAEGAQsBEwEYASEBJwEtATcBPwFBAUQBRQFGAU8BUQFTAVQBVQFeAWABYQFiAWsBbQFuAW8BeAF6AXwBfQF+AYcBiQGLAYwBjQGWAZgBmgGbAZwBpQGnAakBqgGrAbQBtQG2AbkBuwG8AcUBzgHTAdwAAAAAAAACAQAAAAAAAABMAAAAAAAAAAAAAAAAAAAB3QAAAAMAZQB4AHRtb0REYmxvYgAAAAgIjVYhornBQQAAAAMAZQB4AHRtb2REYmxvYgAAAAgIjVYhornBQQAAAAMAZQB4AHRwaDFTY29tcAAAAAAABQAAAAAAAwBlAHgAdHZTcm5sb25nAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAYCwAAAEUAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEERFNEQgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAAAAAAEAACAAAAAAAQAAQAAAAAABAACAAAAAAAEAAQAAAAAAAQACAAAAAAABAAQAAAAAAAEACAAAAAAAAQAQAAAAAAABACAAAAAAAAEAQAAAAAAAAQCAAAAAAAABAQAAAAAAAAECAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEQAAAAAAAAASAAAAAAAAABQAAAAAAAAAAcHQwfVWluZGV4VXdpZHRoWWFzY2VuZGluZ1d2aXNpYmxlEAcRASwJCNQYGRobISIfHxAIEMgICNQYGRobCyYfDBC1CAnUGBkaGyomHx8QAggI1BgZGhsuLx8MEAMQYQgJ1BgZGhszNAwfEAUQZAkI1BgZGhs4OQwMEAQQcwkJ1BgZGhs9PgwfEAYQSwkI1BsaGRgMDERFCQkRAf0QAAkjAAAAAAAAAAAjQCwAAAAAAABUa2luZCNAQAAAAAAAAAkACAAdADIARABMAGAAcgB7AI0AmAChALQAtgC3AMoA0wDiAO8A+wEAAQYBCwETARgBIQEnAS0BNwE/AUEBRAFFAUYBTwFRAVMBVAFVAV4BYAFhAWIBawFtAW4BbwF4AXoBfAF9AX4BhwGJAYsBjAGNAZYBmAGaAZsBnAGlAacBqQGqAasBtAG1AbYBuQG7AbwBxQHOAdMB3AAAAAAAAAIBAAAAAAAAAEwAAAAAAAAAAAAAAAAAAAHdAAAAAwBlAHgAdG1vRERibG9iAAAACAiNViGiucFBAAAAAwBlAHgAdG1vZERibG9iAAAACAiNViGiucFBAAAAAwBlAHgAdHBoMVNjb21wAAAAAAAFAAAAAAADAGUAeAB0dlNybmxvbmcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]]></data>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICJBY2VTeW50YXggaXMgYSBzeW50YXggaGlnaGxpZ2h0ZXIgbW9kdWxlIHVzaW5nIDxzdHJvbmc+QWNlPC9zdHJvbmc+IGEgc3RhbmRhbG9uZSBjb2RlIGVkaXRvciB3cml0dGVuIGluIEphdmFTY3JpcHQuIjsNCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICJBY2VTeW50YXggSGlnaGxpZ2h0ZXIiOw0KDQovKiAtLS0gVGFicyAtLS0gKi8NCiRsYW5nWydjb250ZW50X2Rlc2NyaXB0aW9uX2JhY2tlbmQnXSA9ICJUaGVzZSBhcmUgeW91ciBwZXJzb25hbCBwcmVmZXJlbmNlcy4gQ2hhbmdlcyBvbmx5IGFmZmVjdCB5b3VyIEFkbWluIHBhbmVsLCBub3Qgb3RoZXIgYWRtaW5pc3RyYXRvcnMgYW5kIG5vdCB0aGUgZnJvbnRlbmQgb2YgdGhlIHNpdGUgaWYgeW91IHVzZSB0aGUgbW9kdWxlIHRoZXJlLjxiciAvPjxiPk5vdGU6PC9iPiBGb3IgZnJvbnRlbmQgc2V0dGluZ3MgZ28gdG8gJ1NpdGUgQWRtaW4nICZyYXF1bzsgJ1NldHRpbmdzIC0gQWNlU3ludGF4IEZyb250ZW5kJy4iOw0KJGxhbmdbJ2NvbnRlbnRfZGVzY3JpcHRpb25fZnJvbnRlbmQnXSA9ICJUaGVzZSBwcmVmZXJlbmNlcyBhcmUgdXNlZCBmb3IgZGVmYXVsdCBzZXR0aW5ncyBvZiBTeW50YXhoaWdobGlnaHRpbmcgYXJlYSB3aGVuIGNhbGxpbmcgPGNvZGU+e2FjZV9jb2RlfSB7L2FjZV9jb2RlfTwvY29kZT4gYmxvY2sgcGx1Z2luIHdpdGhpbiBhIFBhZ2UuPGJyIC8+PGI+Tm90ZTo8L2I+IEZvciBiYWNrZW5kIGVkaXRvciBzZXR0aW5ncyBnbyB0byAnTXkgUHJlZmVyZW5jZXMnICZyYXF1bzsgJ0FjZVN5bnRheCBIaWdobGlnaHRlcicuIjsNCiRsYW5nWyd0YWJfc2V0dGluZ3NfYmFja2VuZCddID0gIkJhY2tlbmQgUHJlZmVyZW5jZXMiOw0KJGxhbmdbJ3RhYl9zZXR0aW5nc19mcm9udGVuZCddID0gIkZyb250ZW5kIFByZWZlcmVuY2VzIjsNCg0KJGxhbmdbJ2Rlc2NfYWNlc3ludGF4X3NldHRpbmdzJ10gPSAnQWNlU3ludGF4IEZyb250ZW5kIFNldHRpbmdzJzsNCiRsYW5nWyd0aXRsZV9hY2VzeW50YXhfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyAtIEFjZVN5bnRheCBGcm9udGVuZCc7DQoNCi8qIC0tLSBTZXR0aW5ncyBsYWJlbHMgLS0tICovDQokbGFuZ1snYXV0b19oZWlnaHQnXSA9ICJBdXRvIChFZGl0b3Igc3RhcnRzIHdpdGggcHJlc2V0IGhlaWdodCBhbmQgd2lsbCBhdXRvIGV4cGFuZCBiYXNlZCBvbiBjb250ZW50KSI7DQokbGFuZ1snZW5hYmxlX2JlaGF2aW9ycyddID0gIkVuYWJsZSBCZWhhdmlvcnMiOw0KJGxhbmdbJ2ZvbnRfc2l6ZSddID0gIkZvbnQgU2l6ZSI7DQokbGFuZ1snZnJvbnRlbmRfaGVpZ2h0X3RpdGxlJ10gPSAiRnJvbnRlbmQgU3ludGF4YXJlYSBoZWlnaHQiOw0KJGxhbmdbJ2Zyb250ZW5kX3dpZHRoX3RpdGxlJ10gPSAiRnJvbnRlbmQgU3ludGF4YXJlYSB3aWR0aCI7DQokbGFuZ1snZnVsbF9saW5lJ10gPSAiRnVsbCBMaW5lIFNlbGVjdGlvbiI7DQokbGFuZ1snaGVpZ2h0X3RpdGxlJ10gPSAiRWRpdG9yIGhlaWdodCI7DQokbGFuZ1snaGlnaGxpZ2h0X2FjdGl2ZSddID0gIkhpZ2hsaWdodCBBY3RpdmUgTGluZSI7DQokbGFuZ1snaGlnaGxpZ2h0X3NlbGVjdGVkJ10gPSAiSGlnaGxpZ2h0IHNlbGVjdGVkIHdvcmQiOw0KJGxhbmdbJ2tleV9iaW5kaW5nJ10gPSAiS2V5IEJpbmRpbmciOw0KJGxhbmdbJ3BlcnNpc3RlbnRfaHNjcm9sbCddID0gIlBlcnNpdGVudCBIU2Nyb2xsIjsNCiRsYW5nWydwcmludF9tYXJnaW4nXSA9ICJTaG93IFByaW50IE1hcmdpbiI7DQokbGFuZ1snc2hvd19ndXR0ZXInXSA9ICJTaG93IEd1dHRlci9MaW5lIE51bWJlcnMiOw0KJGxhbmdbJ3Nob3dfaW52aXNpYmxlcyddID0gIlNob3cgSW52aXNpYmxlcyI7DQokbGFuZ1snc29mdF90YWInXSA9ICJVc2UgU29mdCBUYWIgKGVuYWJsZXMgc3BhY2VzIGFzIHRhYnMpIjsNCiRsYW5nWydzb2Z0X3dyYXAnXSA9ICJTb2Z0IFdyYXAiOw0KJGxhbmdbJ3N5bnRheF9tb2RlJ10gPSAiU2VsZWN0IEhpZ2hsaWdodGVyIE1vZGUiOw0KJGxhbmdbJ3RhYl9zaXplJ10gPSAiU2VsZWN0IFRhYiBzaXplIjsNCiRsYW5nWyd0ZXN0YXJlYXRleHQnXSA9ICJQcmV2aWV3IjsNCiRsYW5nWyd0aGVtZXMnXSA9ICJTZWxlY3QgSGlnaGxpZ2h0ZXIgVGhlbWUiOw0KJGxhbmdbJ3dpZHRoX3RpdGxlJ10gPSAiRWRpdG9yIHdpZHRoIjsNCiRsYW5nWyd3cmFwX2xpbmUnXSA9ICJXcmFwIExpbmVzIjsNCg0KLyogLS0tIFRvb2xiYXIgLS0tICovDQokbGFuZ1snYWNlJ10gPSAnQWNlJzsNCiRsYW5nWydjYXNlX3NlbnNpdGl2ZSddID0gJ0Nhc2UgU2Vuc2l0aXZlIFNlYXJjaCc7DQokbGFuZ1snY29sdW1uJ10gPSAnQ29sdW1uJzsNCiRsYW5nWydjdXJyZW50X2xpbmUnXSA9ICdDdXJyZW50IGxpbmUnOw0KJGxhbmdbJ2N1cnJlbnRfdG9rZW4nXSA9ICdDdXJyZW50IHRva2VuJzsNCiRsYW5nWydlbWFjcyddID0gJ0VNYWNzJzsNCiRsYW5nWydmdWxsX3NjcmVlbiddID0gIkZ1bGwgU2NyZWVuIjsNCiRsYW5nWydnb19saW5lJ10gPSAnR28gdG8gbGluZSc7DQokbGFuZ1snaGlnaGxpZ2h0ZXJfb2ZmJ10gPSAnVHVybiBIaWdobGlnaHRlciBPZmYnOw0KJGxhbmdbJ2hpZ2hsaWdodGVyX29uJ10gPSAnVHVybiBIaWdobGlnaHRlciBPbic7DQokbGFuZ1sna2V5YmluZGluZ3MnXSA9ICdLZXliaW5kaW5ncyc7DQokbGFuZ1snbGluZSddID0gJ0xpbmUnOw0KJGxhbmdbJ29mZiddID0gJ09mZic7DQokbGFuZ1snb24nXSA9ICdPbic7DQokbGFuZ1sncmVnZXhwJ10gPSAnUmVndWxhciBFeHByZXNzaW9uIFNlYXJjaCc7DQokbGFuZ1sncmVwbGFjZV9vcHRpb24nXSA9ICdSZXBsYWNlJzsNCiRsYW5nWydyZXBsYWNlX3dpdGgnXSA9ICJSZXBsYWNlIHdpdGggKHByZXNzIEVudGVyKSI7DQokbGFuZ1sncmVwbGFjZWFsbF9vcHRpb24nXSA9ICdSZXBsYWNlIGFsbCc7DQokbGFuZ1snc2VhcmNoX2FueSddID0gJ1NlYXJjaCBBbnl0aGluZyc7DQokbGFuZ1snc2VhcmNoX2RvY3VtZW50J10gPSAiU2VhcmNoIChwcmVzcyBFbnRlcikiOw0KJGxhbmdbJ3NlYXJjaF9vcHRpb25zJ10gPSAiU2VhcmNoIE9wdGlvbnMiOw0KJGxhbmdbJ3NlYXJjaF9zZXR0aW5ncyddID0gIlNlYXJjaCBTZXR0aW5ncyI7DQokbGFuZ1sndG90YWxfbGluZXMnXSA9ICdUb3RhbCBsaW5lcyc7DQokbGFuZ1sndmltJ10gPSAnVmltJzsNCiRsYW5nWyd3aG9sZV93b3JkJ10gPSAnV2hvbGUgV29yZCBTZWFyY2gnOw0KDQovKiAtLS0gU2VsZWN0IG9wdGlvbnMgLS0tICovDQoNCi8qIGxhbmd1YWdlcyAqLw0KJGxhbmdbJ2FiYXAnXSA9ICJBQkFQIjsNCiRsYW5nWydhYmMnXSA9ICdBQkMnOw0KJGxhbmdbJ2FjdGlvbnNjcmlwdCddID0gIkFjdGlvblNjcmlwdCI7DQokbGFuZ1snYWRhJ10gPSAiQURBIjsNCiRsYW5nWydhcGFjaGVfY29uZiddID0gJ0FwYWNoZSBDb25mJzsNCiRsYW5nWydhcGV4J10gPSAnQXBleCc7DQokbGFuZ1snYXBwbGVzY3JpcHQnXSA9ICdBcHBsZSBTY3JpcHQnOw0KJGxhbmdbJ2FxbCddID0gJ0FRTCc7DQokbGFuZ1snYXNjaWlkb2MnXSA9ICJBc2NpaURvYyI7DQokbGFuZ1snYXNsJ10gPSAnQVNMJzsNCiRsYW5nWydhc3NlbWJseV94ODYnXSA9ICJBc3NlbWJseSBYODYiOw0KJGxhbmdbJ2F1dG9ob3RrZXknXSA9ICJBdXRvSG90S2V5IjsNCiRsYW5nWydiYXRjaGZpbGUnXSA9ICJCYXRjaEZpbGUiOw0KJGxhbmdbJ2JybyddID0gJ0JSTyc7DQokbGFuZ1snYzlzZWFyY2gnXSA9ICJDOVNlYXJjaCI7DQokbGFuZ1snY19jcHAnXSA9ICJDL0MrKyI7DQokbGFuZ1snY2lycnUnXSA9ICdDaXJydSc7DQokbGFuZ1snY2xvanVyZSddID0gIkNsb2p1cmUiOw0KJGxhbmdbJ2NvYm9sJ10gPSAiQ29ib2wiOw0KJGxhbmdbJ2NvZmZlZSddID0gIkNvZmZlZVNjcmlwdCI7DQokbGFuZ1snY29sZGZ1c2lvbiddID0gIkNvbGRGdXNpb24iOw0KJGxhbmdbJ2NyeXN0YWwnXSA9ICdDcnlzdGFsJzsNCiRsYW5nWydjc2hhcnAnXSA9ICJDIyI7DQokbGFuZ1snY3NvdW5kX2RvY3VtZW50J10gPSAnQ3NvdW5kIERvY3VtZW50JzsNCiRsYW5nWydjc291bmRfb3JjaGVzdHJhJ10gPSAnQ3NvdW5kIE9yY2hlc3RyYSc7DQokbGFuZ1snY3NvdW5kX3Njb3JlJ10gPSAnQ3NvdW5kIFNjb3JlJzsNCiRsYW5nWydjc3AnXSA9ICdDU1AnOw0KJGxhbmdbJ2NzcyddID0gIkNTUyI7DQokbGFuZ1snY3VybHknXSA9ICJDdXJseSI7DQokbGFuZ1snZCddID0gIkQiOw0KJGxhbmdbJ2RhcnQnXSA9ICJEYXJ0IjsNCiRsYW5nWydkaWZmJ10gPSAiRGlmZiI7DQokbGFuZ1snZGphbmdvJ10gPSAiRGphbmdvIjsNCiRsYW5nWydkb2NrZXJmaWxlJ10gPSAnRG9ja2VyZmlsZSc7DQokbGFuZ1snZG90J10gPSAiRG90IjsNCiRsYW5nWydkcm9vbHMnXSA9ICJEcm9vbHMiOw0KJGxhbmdbJ2VkaWZhY3QnXSA9ICdFZGlmYWN0JzsNCiRsYW5nWydlaWZmZWwnXSA9ICdFaWZmZWwnOw0KJGxhbmdbJ2VqcyddID0gIkVKUyI7DQokbGFuZ1snZWxpeGlyJ10gPSAnRWxpeGlyJzsNCiRsYW5nWydlbG0nXSA9ICdFbG0nOw0KJGxhbmdbJ2VybGFuZyddID0gIkVybGFuZyI7DQokbGFuZ1snZm9ydGgnXSA9ICJGb3J0aCI7DQokbGFuZ1snZm9ydHJhbiddID0gIkZvcnRyYW4iOw0KJGxhbmdbJ2ZzaGFycCddID0gIkZzaGFycCI7DQokbGFuZ1snZnNsJ10gPSAiRlNMIjsNCiRsYW5nWydmdGwnXSA9ICJGcmVlTWFya2VyIjsNCiRsYW5nWydnY29kZSddID0gIkdjb2RlIjsNCiRsYW5nWydnaGVya2luJ10gPSAiR2hlcmtpbiI7DQokbGFuZ1snZ2l0aWdub3JlJ10gPSAiR0lUIElnbm9yZSI7DQokbGFuZ1snZ2xzbCddID0gIkdsc2wiOw0KJGxhbmdbJ2dvYnN0b25lcyddID0gIkdPQiBTdG9uZXMiOw0KJGxhbmdbJ2dvbGFuZyddID0gIkdvIjsNCiRsYW5nWydncmFwaHFsc2NoZW1hJ10gPSAiR3JhcGggUUwgU2NoZW1hIjsNCiRsYW5nWydncm9vdnknXSA9ICJHcm9vdnkiOw0KJGxhbmdbJ2hhbWwnXSA9ICJIQU1MIjsNCiRsYW5nWydoYW5kbGViYXJzJ10gPSAnSGFuZGxlYmFycyc7DQokbGFuZ1snaGFza2VsbCddID0gIkhhc2tlbGwiOw0KJGxhbmdbJ2hhc2tlbGxfY2FiYWwnXSA9ICdIYXNrZWxsIENhYmFsJzsNCiRsYW5nWydoYXhlJ10gPSAiaGFYZSI7DQokbGFuZ1snaGpzb24nXSA9ICdISlNPTic7DQokbGFuZ1snaHRtbCddID0gIkhUTUwiOw0KJGxhbmdbJ2h0bWxfY29tcGxldGlvbnMnXSA9ICJIVE1MIChDb21wbGV0aW9ucykiOw0KJGxhbmdbJ2h0bWxfZWxpeGlyJ10gPSAnSFRNTCBFbGl4aXInOw0KJGxhbmdbJ2h0bWxfcnVieSddID0gIkhUTUwgKFJ1YnkpIjsNCiRsYW5nWydpbmknXSA9ICJJbmkiOw0KJGxhbmdbJ2lvJ10gPSAnSU8nOw0KJGxhbmdbJ2phY2snXSA9ICJKYWNrIjsNCiRsYW5nWydqYWRlJ10gPSAiSmFkZSI7DQokbGFuZ1snamF2YSddID0gIkphdmEiOw0KJGxhbmdbJ2phdmFzY3JpcHQnXSA9ICJKYXZhU2NyaXB0IjsNCiRsYW5nWydqc29uJ10gPSAiSlNPTiI7DQokbGFuZ1snanNvbmlxJ10gPSAiSlNPTmlxIjsNCiRsYW5nWydqc3AnXSA9ICJKU1AiOw0KJGxhbmdbJ2pzc20nXSA9ICdKU1NNJzsNCiRsYW5nWydqc3gnXSA9ICJKU1giOw0KJGxhbmdbJ2p1bGlhJ10gPSAiSnVsaWEiOw0KJGxhbmdbJ2tvdGxpbiddID0gJ0tvdGxpbic7DQokbGFuZ1snbGF0ZXgnXSA9ICJMYVRlWCI7DQokbGFuZ1snbGVzcyddID0gIkxFU1MiOw0KJGxhbmdbJ2xpcXVpZCddID0gIkxpcXVpZCI7DQokbGFuZ1snbGlzcCddID0gIkxpc3AiOw0KJGxhbmdbJ2xpdmVzY3JpcHQnXSA9ICJMaXZlU2NyaXB0IjsNCiRsYW5nWydsb2dpcWwnXSA9ICJMb2dpUUwiOw0KJGxhbmdbJ2xvZ3RhbGsnXSA9ICdMb2d0YWxrJzsNCiRsYW5nWydsc2wnXSA9ICJMU0wiOw0KJGxhbmdbJ2x1YSddID0gIkx1YSI7DQokbGFuZ1snbHVhaHRtbCddID0gIkx1YUhUTUwiOw0KJGxhbmdbJ2x1YXBhZ2UnXSA9ICJMdWFQYWdlIjsNCiRsYW5nWydsdWNlbmUnXSA9ICJMdWNlbmUiOw0KJGxhbmdbJ21ha2VmaWxlJ10gPSAiTWFrZWZpbGUiOw0KJGxhbmdbJ21hcmtkb3duJ10gPSAiTWFya2Rvd24iOw0KJGxhbmdbJ21hc2snXSA9ICdNYXNrJzsNCiRsYW5nWydtYXRsYWInXSA9ICJNQVRMQUIiOw0KJGxhbmdbJ21hemUnXSA9ICdNYXplJzsNCiRsYW5nWydtZWwnXSA9ICdNRUwnOw0KJGxhbmdbJ21peGFsJ10gPSAnTWl4YWwnOw0KJGxhbmdbJ211c2hjb2RlJ10gPSAiTVVTSENvZGUiOw0KJGxhbmdbJ211c2hjb2RlX2hpZ2hfcnVsZXMnXSA9ICJNVVNIQ29kZSBIaWdoIFJ1bGVzIjsNCiRsYW5nWydteXNxbCddID0gIk1ZU1FMIjsNCiRsYW5nWyduZ2lueCddID0gJ05naW54JzsNCiRsYW5nWyduaW0nXSA9ICdOSU0nOw0KJGxhbmdbJ25peCddID0gIk5peCI7DQokbGFuZ1snbnNpcyddID0gJ05zaXMnOw0KJGxhbmdbJ29iamVjdGl2ZWMnXSA9ICJPYmplY3RpdmUtQyI7DQokbGFuZ1snb2NhbWwnXSA9ICJPQ2FtbCI7DQokbGFuZ1sncGFzY2FsJ10gPSAiUGFzY2FsIjsNCiRsYW5nWydwZXJsJ10gPSAiUGVybCI7DQokbGFuZ1sncGVybDYnXSA9ICdQZXJsNic7DQokbGFuZ1sncGdzcWwnXSA9ICJwZ1NRTCI7DQokbGFuZ1sncGhwJ10gPSAiUEhQIjsNCiRsYW5nWydwaHBfbGFyYXZlbF9ibGFkZSddID0gJ1BIUCBMYXJhdmVsIEJsYWRlJzsNCiRsYW5nWydwaWcnXSA9ICdQaWcnOw0KJGxhbmdbJ3BsYWluX3RleHQnXSA9ICJQbGFpbiBUZXh0IjsNCiRsYW5nWydwbGcnXSA9ICdQTEcnOw0KJGxhbmdbJ3Bvd2Vyc2hlbGwnXSA9ICJQb3dlcnNoZWxsIjsNCiRsYW5nWydwcmFhdCddID0gJ1ByYWF0JzsNCiRsYW5nWydwcm9sb2cnXSA9ICJQcm9sb2ciOw0KJGxhbmdbJ3Byb3BlcnRpZXMnXSA9ICJQcm9wZXJ0aWVzIjsNCiRsYW5nWydwcm90b2J1ZiddID0gIlByb3RvYnVmIjsNCiRsYW5nWydwdXBwZXQnXSA9ICdQdXBwZXQnOw0KJGxhbmdbJ3B5dGhvbiddID0gIlB5dGhvbiI7DQokbGFuZ1snciddID0gIlIiOw0KJGxhbmdbJ3Jhem9yJ10gPSAnUmF6b3InOw0KJGxhbmdbJ3Jkb2MnXSA9ICJSRG9jIjsNCiRsYW5nWydyZWQnXSA9ICdSZWQnOw0KJGxhbmdbJ3JlZHNoaWZ0J10gPSAnUmVkc2hpZnQnOw0KJGxhbmdbJ3JodG1sJ10gPSAiUkhUTUwiOw0KJGxhbmdbJ3JzdCddID0gJ1JTVCc7DQokbGFuZ1sncnVieSddID0gIlJ1YnkiOw0KJGxhbmdbJ3J1c3QnXSA9ICJSdXN0IjsNCiRsYW5nWydzYXNzJ10gPSAiU0FTUyI7DQokbGFuZ1snc2NhZCddID0gIlNDQUQiOw0KJGxhbmdbJ3NjYWxhJ10gPSAiU2NhbGEiOw0KJGxhbmdbJ3NjaGVtZSddID0gIlNjaGVtZSI7DQokbGFuZ1snc2NzcyddID0gIlNDU1MiOw0KJGxhbmdbJ3NoJ10gPSAiU0giOw0KJGxhbmdbJ3NqcyddID0gJ1NKUyc7DQokbGFuZ1snc2xpbSddID0gJ1NsaW0nOw0KJGxhbmdbJ3NtYXJ0eSddID0gIlNtYXJ0eSAoSFRNTCkiOw0KJGxhbmdbJ3NuaXBwZXRzJ10gPSAic25pcHBldHMiOw0KJGxhbmdbJ3NveV90ZW1wbGF0ZSddID0gJ1NPWSBUZW1wbGF0ZSc7DQokbGFuZ1snc3BhY2UnXSA9ICdTcGFjZSc7DQokbGFuZ1snc3BhcnFsJ10gPSAnU3BhcnFsJzsNCiRsYW5nWydzcWwnXSA9ICJTUUwiOw0KJGxhbmdbJ3N0eWx1cyddID0gIlN0eWx1cyI7DQokbGFuZ1snc3ZnJ10gPSAiU1ZHIjsNCiRsYW5nWydzd2lmdCddID0gJ1N3aWZ0JzsNCiRsYW5nWyd0Y2wnXSA9ICJUY2wiOw0KJGxhbmdbJ3RlcnJhZm9ybSddID0gJ1RlcnJhZm9ybSc7DQokbGFuZ1sndGV4J10gPSAiVGV4IjsNCiRsYW5nWyd0ZXh0J10gPSAiVGV4dCI7DQokbGFuZ1sndGV4dGlsZSddID0gIlRleHRpbGUiOw0KJGxhbmdbJ3Rtc25pcHBldCddID0gIlRNU25pcHBldCI7DQokbGFuZ1sndG9tbCddID0gIlRvbWwiOw0KJGxhbmdbJ3RzeCddID0gJ1RTWCc7DQokbGFuZ1sndHVydGxlJ10gPSAnVHVydGxlJzsNCiRsYW5nWyd0d2lnJ10gPSAiVHdpZyI7DQokbGFuZ1sndHlwZXNjcmlwdCddID0gIlR5cGVzY3JpcHQiOw0KJGxhbmdbJ3ZhbGEnXSA9ICdWYWxhJzsNCiRsYW5nWyd2YnNjcmlwdCddID0gIlZCU2NyaXB0IjsNCiRsYW5nWyd2ZWxvY2l0eSddID0gIlZlbG9jaXR5IjsNCiRsYW5nWyd2ZXJpbG9nJ10gPSAiVmVyaWxvZyI7DQokbGFuZ1sndmhkbCddID0gJ1ZoZGwnOw0KJGxhbmdbJ3Zpc3VhbGZvcmNlJ10gPSAnVmlzdWFsIEZvcmNlJzsNCiRsYW5nWyd3b2xsb2snXSA9ICdXb2xsb2snOw0KJGxhbmdbJ3htbCddID0gIlhNTCI7DQokbGFuZ1sneHF1ZXJ5J10gPSAiWFF1ZXJ5IjsNCiRsYW5nWyd5YW1sJ10gPSAiWUFNTCI7DQokbGFuZ1snemVlayddID0gJ1plZWsnOw0KDQovKiB0aGVtZXMgKi8NCiRsYW5nWydhbWJpYW5jZSddID0gIkFtYmlhbmNlIjsNCiRsYW5nWydjaGFvcyddID0gIkNoYW9zIjsNCiRsYW5nWydjaHJvbWUnXSA9ICJDaHJvbWUiOw0KJGxhbmdbJ2Nsb3VkcyddID0gIkNsb3VkcyI7DQokbGFuZ1snY2xvdWRzX21pZG5pZ2h0J10gPSAiQ2xvdWRzIE1pZG5pZ2h0IjsNCiRsYW5nWydjb2JhbHQnXSA9ICJDb2JhbHQiOw0KJGxhbmdbJ2NyaW1zb25fZWRpdG9yJ10gPSAiQ3JpbXNvbiBFZGl0b3IiOw0KJGxhbmdbJ2Rhd24nXSA9ICJEYXduIjsNCiRsYW5nWydkcmFjdWxhJ10gPSAnRHJhY3VsYSc7DQokbGFuZ1snZHJlYW13ZWF2ZXInXSA9ICJEcmVhbXdlYXZlciI7DQokbGFuZ1snZWNsaXBzZSddID0gIkVjbGlwc2UiOw0KJGxhbmdbJ2dpdGh1YiddID0gIkdpdEh1YiI7DQokbGFuZ1snZ29iJ10gPSAnR29iJzsNCiRsYW5nWydncnV2Ym94J10gPSAnR3J1dmJveCc7DQokbGFuZ1snaWRsZV9maW5nZXJzJ10gPSAiaWRsZUZpbmdlcnMiOw0KJGxhbmdbJ2lwbGFzdGljJ10gPSAnSVBsYXN0aWMnOw0KJGxhbmdbJ2thdHplbm1pbGNoJ10gPSAnS2F0emVubWlsY2gnOw0KJGxhbmdbJ2tyJ10gPSAia3JUaGVtZSI7DQokbGFuZ1sna3JfdGhlbWUnXSA9ICJrclRoZW1lIGRhcmsiOw0KJGxhbmdbJ2t1cm9pciddID0gJ0t1cm9pcic7DQokbGFuZ1snbWVyYml2b3JlJ10gPSAiTWVyYml2b3JlIjsNCiRsYW5nWydtZXJiaXZvcmVfc29mdCddID0gIk1lcmJpdm9yZSBTb2Z0IjsNCiRsYW5nWydtb25vX2luZHVzdHJpYWwnXSA9ICJNb25vIEluZHVzdHJpYWwiOw0KJGxhbmdbJ21vbm9rYWknXSA9ICJNb25va2FpIjsNCiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gIlBhc3RlbCBvbiBkYXJrIjsNCiRsYW5nWydzb2xhcml6ZWRfZGFyayddID0gIlNvbGFyaXplZCBEYXJrIjsNCiRsYW5nWydzb2xhcml6ZWRfbGlnaHQnXSA9ICJTb2xhcml6ZWQgTGlnaHQiOw0KJGxhbmdbJ3NxbHNlcnZlciddID0gJ1NRTCBTZXJ2ZXInOw0KJGxhbmdbJ3Rlcm1pbmFsJ10gPSAiVGVybWluYWwiOw0KJGxhbmdbJ3RleHRtYXRlJ10gPSAiVGV4dE1hdGUiOw0KJGxhbmdbJ3RvbW9ycm93J10gPSAiVG9tb3Jyb3ciOw0KJGxhbmdbJ3RvbW9ycm93X25pZ2h0J10gPSAiVG9tb3Jyb3cgTmlnaHQiOw0KJGxhbmdbJ3RvbW9ycm93X25pZ2h0X2JsdWUnXSA9ICJUb21vcnJvdyBOaWdodCBCbHVlIjsNCiRsYW5nWyd0b21vcnJvd19uaWdodF9icmlnaHQnXSA9ICJUb21vcnJvdyBOaWdodCBCcmlnaHQiOw0KJGxhbmdbJ3RvbW9ycm93X25pZ2h0X2VpZ2h0aWVzJ10gPSAiVG9tb3Jyb3cgTmlnaHQgRWlnaHRpZXMiOw0KJGxhbmdbJ3R3aWxpZ2h0J10gPSAiVHdpbGlnaHQiOw0KJGxhbmdbJ3ZpYnJhbnRfaW5rJ10gPSAiVmlicmFudCBJbmsiOw0KJGxhbmdbJ3hjb2RlJ10gPSAiWENvZGUiOw0KDQovKiBrZXkgYmluZGluZyAqLw0KJGxhbmdbJ2FjZSddID0gIkFjZSI7DQokbGFuZ1snY3VzdG9tJ10gPSAiQ3VzdG9tIjsNCiRsYW5nWydlbWFjcyddID0gIkVNYWNzIjsNCiRsYW5nWyd2aW0nXSA9ICJWaW0iOw0KDQovKiBTb2Z0IHdyYXAgKi8NCiRsYW5nWydvZmYnXSA9ICJPZmYiOw0KJGxhbmdbJzQwY29scyddID0gIjQwIENvbHMiOw0KJGxhbmdbJzgwY29scyddID0gIjgwIENvbHMiOw0KJGxhbmdbJzEwMGNvbHMnXSA9ICIxMDAgQ29scyI7DQokbGFuZ1snMTQwY29scyddID0gIjE0MCBDb2xzIjsNCg0KLyogLS0tIENvbW1vbiAtLS0gKi8NCiRsYW5nWydmcm9udGVuZHNldHRpbmdzc2F2ZWQnXSA9ICJZb3VyIEFjZVN5bnRheCBGcm9udGVuZCBzZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQiOw0KJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAiTWlzc2luZyBQZXJtaXNzaW9uIS4gU2V0IFwiTW9kaWZ5IFRlbXBsYXRlc1wiIG9yIFwiQWNlU3ludGF4IFVzZXIgUHJlZmVyZW5jZVwiIHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZS4iOw0KJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAiQWNlU3ludGF4IFN1Y2Nlc3NmdWxseSBJbnN0YWxsZWQhIFNldCBcIk1vZGlmeSBTaXRlIFByZWZlcmVuY2VzXCIsIFwiTW9kaWZ5IFRlbXBsYXRlc1wiIG9yIFwiQWNlU3ludGF4IFVzZXIgUHJlZmVyZW5jZVwiIHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSEiOw0KJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICJBY2VTeW50YXggU3VjY2Vzc2Z1bGx5IFVuaW5zdGFsbGVkIjsNCiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAiUmVhbGx5PyBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIEFjZVN5bnRheD8gVGhpbmsgYWdhaW4hIjsNCiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICJTYXZlIFByZWZlcmVuY2VzIjsNCiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAiWW91ciBBY2VTeW50YXggc2V0dGluZ3MgaGF2ZSBiZWVuIHNhdmVkIjsNCg0KLyogLS0tIEhlbHAgLS0tICovDQokbGFuZ1snaGVscF9wYXJhbV9oZWlnaHQnXSA9ICJzcGVjaWZpZXMgaGVpZ2h0IG9mIFN5bnRheGhpZ2hsaWdodGVyIGFyZWEuIjsNCiRsYW5nWydoZWxwX3BhcmFtX2h0bWxlbnRpdGllcyddID0gIlRoaXMgcGFyYW1ldGVyIHdpbGwgdHJhbnNsYXRlIGFsbCBjaGFyYWN0ZXJzIGluc2lkZSB7YWNlX2NvZGV9IGJsb2NrIHBsdWdpbiB0byBlbnRpdGllcywgdXNpbmcgUEhQIDxhIGhyZWY9XCJodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2RlL2Z1bmN0aW9uLmh0bWxlbnRpdGllcy5waHBcIiB0YXJnZXQ9XCJfYmxhbmtcIj5odG1sZW50aXRpZXM8L2E+IGZ1bmN0aW9uLiBVc2UgdGhpcyBpZiB5b3UgYXJlIG5vdCB1c2luZyBhbnkgV1lTSVdZRyBFZGl0b3IgYW5kIHdyaXRlIHJhdyBjb2RlIGluc2lkZSBibG9jayBwbHVnaW4uIjsNCiRsYW5nWydoZWxwX3BhcmFtX21vZGUnXSA9ICJpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57YWNlX2NvZGUgbW9kZT0naHRtbCd9IHsvYWNlX2NvZGV9PC9jb2RlPiBibG9jayBwbHVnaW4uIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIG1vZGUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4iOw0KJGxhbmdbJ2hlbHBfcGFyYW1fdGhlbWUnXSA9ICJpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57YWNlX2NvZGUgdGhlbWU9J3R3aWxpZ2h0J30gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgdGhlbWUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4iOw0KJGxhbmdbJ2hlbHBfcGFyYW1fd2lkdGgnXSA9ICJzcGVjaWZpZXMgd2lkdGggb2YgU3ludGF4aGlnaGxpZ2h0ZXIgYXJlYSBpbiBwaXhlbC4iOw==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvcic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnQWNlRWRpdG9yIGlzdCBlaW4gU3ludGF4aGVydm9yaGVidW5nc21vZHVsLCBkYXMgPHN0cm9uZz5BY2U8L3N0cm9uZz4sIGVpbmVuIGVpZ2Vuc3TDpG5kaWdlbiBDb2RlLUVkaXRvciBnZXNjaHJpZWJlbiBtaXQgSmF2YVNjcmlwdCB2ZXJ3ZW5kZXQuPGJyIC8+PHN0cm9uZz5IaW53ZWlzOjwvc3Ryb25nPiBJbnRlcm5ldCBFeHBsb3JlciB3aXJkIHp1cnplaXQgbmljaHQgdW50ZXJzdMO8enQhJzsKJGxhbmdbJ3NldHRpbmdzX3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snZnJvbnRlbmRzZXR0aW5nc190YWInXSA9ICdGcm9udGVuZC1FaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ2Zyb250ZW5kX3N5bnRheGFyZWFfc2V0dGluZ3MnXSA9ICdGcm9udGVuZC1TeW50YXhiZXJlaWNoLUVpbnN0ZWxsdW5nZW4nOwokbGFuZ1snY29udGVudF9kZXNjcmlwdGlvbiddID0gJ0RpZXNlIEVpbnN0ZWxsdW5nZW4gd2VyZGVuIGFscyBTdGFuZGFyZCBmw7xyIGRlbiBCZXJlaWNoIGRlciBTeW50YXhoZXJ2b3JoZWJ1bmcgdmVyd2VuZGV0IHdlbm4gPGNvZGU+e0FjZUVkaXRvciBkaXZpZD1cJ2VkaXRvclwnfTwvY29kZT4gaW4gZWluZXIgU2VpdGUgYXVmZ2VydWZlbiB3aXJkLic7CiRsYW5nWyd3aWR0aF90aXRsZSddID0gJ0VkaXRvcmJyZWl0ZSc7CiRsYW5nWydoZWlnaHRfdGl0bGUnXSA9ICdFZGl0b3Jow7ZoZSc7CiRsYW5nWydmcm9udGVuZF93aWR0aF90aXRsZSddID0gJ0JyZWl0ZSBkZXMgRnJvbnQtRW5kLVN5bnRheGJlcmVpY2hzJzsKJGxhbmdbJ2Zyb250ZW5kX2hlaWdodF90aXRsZSddID0gJ0jDtmhlIGRlcyBGcm9udC1FbmQtU3ludGF4YmVyZWljaHMnOwokbGFuZ1snc3ludGF4X21vZGUnXSA9ICdNb2R1cyc7CiRsYW5nWyd0aGVtZXMnXSA9ICdBdXNzZWhlbic7CiRsYW5nWydmb250X3NpemUnXSA9ICdTY2hyaWZ0Z3LDtsOfZSc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdBdXN3YWhsIGRlciBnYW56ZW4gWmVpbGUnOwokbGFuZ1snaGlnaGxpZ2h0X2FjdGl2ZSddID0gJ0FrdGl2ZSBaZWlsZSBtYXJraWVyZW4nOwokbGFuZ1snc2hvd19pbnZpc2libGVzJ10gPSAnWmVpZ2UgdW5zaWNodGJhcmUnOwokbGFuZ1sncGVyc2lzdGVudF9oc2Nyb2xsJ10gPSAnUGVyc2lzdGVudGVzIEhTY3JvbGwnOwokbGFuZ1sna2V5X2JpbmRpbmcnXSA9ICdTY2hsw7xzc2VsYmluZHVuZyc7CiRsYW5nWydzb2Z0X3dyYXAnXSA9ICd3ZWljaGVyIFplaWxlbnVtYnJ1Y2gnOwokbGFuZ1snc2hvd19ndXR0ZXInXSA9ICdaZWlsZW5udW1tZXJuIGFuemVpZ2VuJzsKJGxhbmdbJ3dyYXBfbGluZSddID0gJ1plaWxlbnVtYnLDvGNoZSc7CiRsYW5nWydwcmludF9tYXJnaW4nXSA9ICdEcnVja2JlcmVpY2ggYW56ZWlnZW4nOwokbGFuZ1snc29mdF90YWInXSA9ICfigJ53ZWljaGVuIFRhYnVsYXRvcuKAnCB2ZXJ3ZW5kZW4gKGVybGF1YnQgTGVlcnplaWNoZW4gYWxzIFRhYnVsYXRvciknOwokbGFuZ1sndGFiX3NpemUnXSA9ICdUYWJ1bGF0b3JncsO2w59lIHfDpGhsZW4nOwokbGFuZ1snaGlnaGxpZ2h0X3NlbGVjdGVkJ10gPSAnQXVzZ2V3w6RobHRlcyBXb3J0IG1hcmtpZXJlbic7CiRsYW5nWydlbmFibGVfYmVoYXZpb3JzJ10gPSAnVmVyaGFsdGVuIGFrdGl2aWVyZW4nOwokbGFuZ1sndGVzdGFyZWF0ZXh0J10gPSAnVm9yc2NoYXUnOwokbGFuZ1snYXV0b19oZWlnaHQnXSA9ICdhdXRvbWF0aXNjaCAoRWRpdG9yIGJlZ2lubnQgbWl0IHZvcmVpbmdlc3RlbGx0ZXIgSMO2aGUgdW5kIGV4cGFuZGllcnQgYXV0b21hdGlzY2ggbWl0IGRlbSBJbmhhbHQpJzsKJGxhbmdbJ29uJ10gPSAnQW4nOwokbGFuZ1snb2ZmJ10gPSAnQXVzJzsKJGxhbmdbJ2xpbmUnXSA9ICdaZWlsZSc7CiRsYW5nWydjb2x1bW4nXSA9ICdTcGFsdGUnOwokbGFuZ1snY3VycmVudF9saW5lJ10gPSAnQWt0dWVsbGUgWmVpbGUnOwokbGFuZ1snY3VycmVudF90b2tlbiddID0gJ0FrdHVlbGxlcyBaZWljaGVuJzsKJGxhbmdbJ3RvdGFsX2xpbmVzJ10gPSAnQW56YWhsIFplaWxlbic7CiRsYW5nWydnb19saW5lJ10gPSAnR2VoZSB6dSBaZWlsZSc7CiRsYW5nWydrZXliaW5kaW5ncyddID0gJ1Rhc3RlbmtvbWJpbmF0aW9uZW4nOwokbGFuZ1snYWNlJ10gPSAnQWNlJzsKJGxhbmdbJ3ZpbSddID0gJ1ZpbSc7CiRsYW5nWydlbWFjcyddID0gJ0VNYWNzJzsKJGxhbmdbJ2Z1bGxfc2NyZWVuJ10gPSAnVm9sbGJpbGQnOwokbGFuZ1snc2VhcmNoX2RvY3VtZW50J10gPSAnU3VjaGUgKEVpbmdhYmV0YXN0ZSBkcsO8Y2tlbiknOwokbGFuZ1sncmVwbGFjZV93aXRoJ10gPSAnRXJzZXR6ZSBtaXQgKEVpbmdhYmV0YXN0ZSBkcsO8Y2tlbiknOwokbGFuZ1snc2VhcmNoX29wdGlvbnMnXSA9ICdTdWNob3B0aW9uZW4nOwokbGFuZ1snc2VhcmNoX3NldHRpbmdzJ10gPSAnU3VjaGVpbnN0ZWxsdW5nZW4nOwokbGFuZ1snaGlnaGxpZ2h0ZXJfb24nXSA9ICdTeW50YXhoZXJ2b3JoZWJ1bmcgYWt0aXZpZXJlbic7CiRsYW5nWydoaWdobGlnaHRlcl9vZmYnXSA9ICdTeW50YXhoZXJ2b3JoZWJ1bmcgZGVha3RpdmllcmVuJzsKJGxhbmdbJ3JlcGxhY2Vfb3B0aW9uJ10gPSAnRXJzZXR6ZW4nOwokbGFuZ1sncmVwbGFjZWFsbF9vcHRpb24nXSA9ICdBbGxlcyBlcnNldHplbic7CiRsYW5nWydjYXNlX3NlbnNpdGl2ZSddID0gJ1N1Y2hlIHVudGVyIEJlYWNodHVuZyB2b24gR3Jvw58tIHVuZCBLbGVpbnNjaHJlaWJ1bmcnOwokbGFuZ1snd2hvbGVfd29yZCddID0gJ0dhbnp3b3J0c3VjaGUnOwokbGFuZ1sncmVnZXhwJ10gPSAnU3VjaGUgbWl0IHJlZ3Vsw6RyZW0gQXVzZHJ1Y2snOwokbGFuZ1snc2VhcmNoX2FueSddID0gJ2lyZ2VuZHdhcyBzdWNoZW4nOwokbGFuZ1snYWJhcCddID0gJ0FCQVAnOwokbGFuZ1snYWRhJ10gPSAnQURBJzsKJGxhbmdbJ2FjdGlvbnNjcmlwdCddID0gJ0FjdGlvblNjcmlwdCc7CiRsYW5nWydhc2NpaWRvYyddID0gJ0FzY2lpRG9jJzsKJGxhbmdbJ2Fzc2VtYmx5X3g4NiddID0gJ0Fzc2VtYmx5Xzg2JzsKJGxhbmdbJ2F1dG9ob3RrZXknXSA9ICdBdXRvSG90S2V5JzsKJGxhbmdbJ2JhdGNoZmlsZSddID0gJ0JhdGNoRmlsZSc7CiRsYW5nWydjOXNlYXJjaCddID0gJ0M5U2VhcmNoJzsKJGxhbmdbJ2NfY3BwJ10gPSAnQy9DKysnOwokbGFuZ1snY2xvanVyZSddID0gJ0Nsb2p1cmUnOwokbGFuZ1snY29ib2wnXSA9ICdDb2JvbCc7CiRsYW5nWydjb2ZmZWUnXSA9ICdDb2ZmZWVTY3JpcHQnOwokbGFuZ1snY29sZGZ1c2lvbiddID0gJ0NvbGRGdXNpb24nOwokbGFuZ1snY3NoYXJwJ10gPSAnQyMnOwokbGFuZ1snY3NzJ10gPSAnQ1NTJzsKJGxhbmdbJ2N1cmx5J10gPSAnQ3VybHknOwokbGFuZ1snZCddID0gJ0QnOwokbGFuZ1snZGFydCddID0gJ0RhcnQnOwokbGFuZ1snZGlmZiddID0gJ0RpZmYnOwokbGFuZ1snZGphbmdvJ10gPSAnRGphbmdvJzsKJGxhbmdbJ2RvdCddID0gJ0RvdCc7CiRsYW5nWydlcmxhbmcnXSA9ICdFcmxhbmcnOwokbGFuZ1snZWpzJ10gPSAnRUpTJzsKJGxhbmdbJ2ZvcnRoJ10gPSAnRm9ydGgnOwokbGFuZ1snZnRsJ10gPSAnRnJlZU1hcmtlcic7CiRsYW5nWydnbHNsJ10gPSAnR2xzbCc7CiRsYW5nWydnb2xhbmcnXSA9ICdHbyc7CiRsYW5nWydncm9vdnknXSA9ICdHcm9vdnknOwokbGFuZ1snaGFtbCddID0gJ0hBTUwnOwokbGFuZ1snaGFza2VsbCddID0gJ0hhc2tlbGwnOwokbGFuZ1snaGF4ZSddID0gJ2hhWGUnOwokbGFuZ1snaHRtbCddID0gJ0hUTUwnOwokbGFuZ1snaHRtbF9jb21wbGV0aW9ucyddID0gJ0hUTUwgKENvbXBsZXRpb25zKSc7CiRsYW5nWydodG1sX3J1YnknXSA9ICdIVE1MIChSdWJ5KSc7CiRsYW5nWydpbmknXSA9ICdJbmknOwokbGFuZ1snamFkZSddID0gJ0phZGUnOwokbGFuZ1snamF2YSddID0gJ0phdmEnOwokbGFuZ1snamF2YXNjcmlwdCddID0gJ0phdmFTY3JpcHQnOwokbGFuZ1snanNvbiddID0gJ0pTT04nOwokbGFuZ1snanNvbmlxJ10gPSAnSlNPTmlxJzsKJGxhbmdbJ2pzcCddID0gJ0pTUCc7CiRsYW5nWydqc3gnXSA9ICdKU1gnOwokbGFuZ1snanVsaWEnXSA9ICdKdWxpYSc7CiRsYW5nWydsYXRleCddID0gJ0xhVGV4JzsKJGxhbmdbJ2xlc3MnXSA9ICdMRVNTJzsKJGxhbmdbJ2xpcXVpZCddID0gJ0xpcXVpZCc7CiRsYW5nWydsaXNwJ10gPSAnTGlzcCc7CiRsYW5nWydsaXZlc2NyaXB0J10gPSAnTGl2ZVNjcmlwdCc7CiRsYW5nWydsb2dpcWwnXSA9ICdMb2dpUUwnOwokbGFuZ1snbHNsJ10gPSAnTFNMJzsKJGxhbmdbJ2x1YSddID0gJ0x1YSc7CiRsYW5nWydsdWFodG1sJ10gPSAnTHVhSFRNTCc7CiRsYW5nWydsdWFwYWdlJ10gPSAnTHVhUGFnZSc7CiRsYW5nWydsdWNlbmUnXSA9ICdMdWNlbmUnOwokbGFuZ1snbWFrZWZpbGUnXSA9ICdNYWtlZmlsZSc7CiRsYW5nWydtYXRsYWInXSA9ICdNQVRMQUInOwokbGFuZ1snbWFya2Rvd24nXSA9ICdNYXJrZG93bic7CiRsYW5nWydteXNxbCddID0gJ01ZU1FMJzsKJGxhbmdbJ211c2hjb2RlJ10gPSAnTVVTSENvZGUnOwokbGFuZ1snbXVzaGNvZGVfaGlnaF9ydWxlcyddID0gJ01VU0hDb2RlIEhpZ2ggUnVsZXMnOwokbGFuZ1snbml4J10gPSAnTml4JzsKJGxhbmdbJ29iamVjdGl2ZWMnXSA9ICdPYmplY3RpdmUtQyc7CiRsYW5nWydvY2FtbCddID0gJ09DYW1sJzsKJGxhbmdbJ3Bhc2NhbCddID0gJ1Bhc2NhbCc7CiRsYW5nWydwZXJsJ10gPSAnUGVybCc7CiRsYW5nWydwZ3NxbCddID0gJ3BnU1FMJzsKJGxhbmdbJ3BocCddID0gJ1BIUCc7CiRsYW5nWydwbGFpbl90ZXh0J10gPSAncmVpbmVyIFRleHQnOwokbGFuZ1sncG93ZXJzaGVsbCddID0gJ1Bvd2VyU2hlbGwnOwokbGFuZ1sncHJvbG9nJ10gPSAnUHJvbG9nJzsKJGxhbmdbJ3Byb3BlcnRpZXMnXSA9ICdQcm9wZXJ0aWVzJzsKJGxhbmdbJ3Byb3RvYnVmJ10gPSAnUHJvdG9idWYnOwokbGFuZ1sncHl0aG9uJ10gPSAnUHl0aG9uJzsKJGxhbmdbJ3InXSA9ICdSJzsKJGxhbmdbJ3Jkb2MnXSA9ICdSRG9jJzsKJGxhbmdbJ3JodG1sJ10gPSAnUkhUTUwnOwokbGFuZ1sncnVieSddID0gJ1J1YnknOwokbGFuZ1sncnVzdCddID0gJ1J1c3QnOwokbGFuZ1snc2FzcyddID0gJ1NBU1MnOwokbGFuZ1snc2NhZCddID0gJ1NDQUQnOwokbGFuZ1snc2NhbGEnXSA9ICdTY2FsYSc7CiRsYW5nWydzY2hlbWUnXSA9ICdTY2hlbWUnOwokbGFuZ1snc2NzcyddID0gJ1NDU1MnOwokbGFuZ1snc2gnXSA9ICdTSCc7CiRsYW5nWydzbWFydHknXSA9ICdTbWFydHkgKEhUTUwpJzsKJGxhbmdbJ3NuaXBwZXRzJ10gPSAnc25pcHBldHMnOwokbGFuZ1snc3FsJ10gPSAnU1FMJzsKJGxhbmdbJ3N0eWx1cyddID0gJ1N0eWx1cyc7CiRsYW5nWydzdmcnXSA9ICdTVkcnOwokbGFuZ1sndGNsJ10gPSAnVGNsJzsKJGxhbmdbJ3RleCddID0gJ1RleCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWyd0ZXh0aWxlJ10gPSAnVGV4dGlsZSc7CiRsYW5nWyd0bXNuaXBwZXQnXSA9ICdUTVNuaXBwZXQnOwokbGFuZ1sndG9tbCddID0gJ1RvbWwnOwokbGFuZ1sndHdpZyddID0gJ1R3aWcnOwokbGFuZ1sndHlwZXNjcmlwdCddID0gJ1R5cGVzY3JpcHQnOwokbGFuZ1sndmJzY3JpcHQnXSA9ICdWQlNjcmlwdCc7CiRsYW5nWyd2ZWxvY2l0eSddID0gJ1ZlbG9jaXR5JzsKJGxhbmdbJ3Zlcmlsb2cnXSA9ICdWZXJpbG9nJzsKJGxhbmdbJ3htbCddID0gJ1hNTCc7CiRsYW5nWyd4cXVlcnknXSA9ICdYUXVlcnknOwokbGFuZ1sneWFtbCddID0gJ1lBTUwnOwokbGFuZ1snYW1iaWFuY2UnXSA9ICdBbWJpYW5jZSc7CiRsYW5nWydjaGFvcyddID0gJ0NoYW9zJzsKJGxhbmdbJ2Nsb3VkcyddID0gJ0Nsb3Vkcyc7CiRsYW5nWydjaHJvbWUnXSA9ICdDaHJvbWUnOwokbGFuZ1snY2xvdWRzX21pZG5pZ2h0J10gPSAnQ2xvdWRzIE1pZG5pZ2h0JzsKJGxhbmdbJ2NvYmFsdCddID0gJ0NvYmFsdCc7CiRsYW5nWydjcmltc29uX2VkaXRvciddID0gJ0NyaW1zb24gRWRpdG9yJzsKJGxhbmdbJ2Rhd24nXSA9ICdEYXduJzsKJGxhbmdbJ2RyZWFtd2VhdmVyJ10gPSAnRHJlYW13ZWF2ZXInOwokbGFuZ1snZWNsaXBzZSddID0gJ0VjbGlwc2UnOwokbGFuZ1snZ2l0aHViJ10gPSAnR2l0SHViJzsKJGxhbmdbJ2lkbGVfZmluZ2VycyddID0gJ2lkbGVGaW5nZXJzJzsKJGxhbmdbJ2tyJ10gPSAna3JUaGVtZSc7CiRsYW5nWydrcl90aGVtZSddID0gJ2tyVGhlbWUgZHVua2VsJzsKJGxhbmdbJ21lcmJpdm9yZSddID0gJ01lcmJpdm9yZSc7CiRsYW5nWydtZXJiaXZvcmVfc29mdCddID0gJ01lcmJpdm9yZSBTb2Z0JzsKJGxhbmdbJ21vbm9faW5kdXN0cmlhbCddID0gJ01vbm8gSW5kdXN0cmlhbCc7CiRsYW5nWydtb25va2FpJ10gPSAnTW9ub2thaSc7CiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gJ1Bhc3RlbGwgYXVmIGR1bmtsZW0gSGludGVyZ3J1bmQnOwokbGFuZ1snc29sYXJpemVkX2RhcmsnXSA9ICdTb2xhcml6ZWQgZHVua2VsJzsKJGxhbmdbJ3NvbGFyaXplZF9saWdodCddID0gJ1NvbGFyaXplZCBoZWxsJzsKJGxhbmdbJ3Rlcm1pbmFsJ10gPSAnVGVybWluYWwnOwokbGFuZ1sndGV4dG1hdGUnXSA9ICdUZXh0TWF0ZSc7CiRsYW5nWyd0b21vcnJvdyddID0gJ1RvbW9ycm93JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0J10gPSAnVG9tb3Jyb3cgTmlnaHQnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfYnJpZ2h0J10gPSAnVG9tb3Jyb3cgTmlnaHQgaGVsbCc7CiRsYW5nWyd0b21vcnJvd19uaWdodF9ibHVlJ10gPSAnVG9tb3Jyb3cgTmlnaHQgYmxhdSc7CiRsYW5nWyd0b21vcnJvd19uaWdodF9laWdodGllcyddID0gJ1RvbW9ycm93IE5pZ2h0IEVpZ2h0aWVzJzsKJGxhbmdbJ3R3aWxpZ2h0J10gPSAnVHdpbGlnaHQnOwokbGFuZ1sndmlicmFudF9pbmsnXSA9ICdWaWJyYW50IEluayc7CiRsYW5nWyd4Y29kZSddID0gJ1hDb2RlJzsKJGxhbmdbJ2N1c3RvbSddID0gJ0JlbnV0emVyZGVmaW5pZXJ0JzsKJGxhbmdbJzQwJ10gPSAnNDAgWmVpY2hlbic7CiRsYW5nWyc4MCddID0gJzgwIFplaWNoZW4nOwokbGFuZ1snMTAwJ10gPSAnMTAwIFplaWNoZW4nOwokbGFuZ1snMTQwJ10gPSAnMTQwIFplaWNoZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0locmUgQWNlRWRpdG9yLUVpbnN0ZWxsdW5nZW4gd3VyZGVuIGdlc3BlaWNoZXJ0JzsKJGxhbmdbJ2Zyb250ZW5kc2V0dGluZ3NzYXZlZCddID0gJ0RpZSBGcm9udC1FbmQtRWluc3RlbGx1bmdlbiB3dXJkZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdBY2VFZGl0b3Igd3VyZGUgaW5zdGFsbGllcnQuIFNldHplbiBTaWUgZGllIEJlcmVjaHRpZ3VuZyDigJ5Nb2RpZnkgU2l0ZSBQcmVmZXJlbmNlc+KAnCwgdW0gZGllc2VzIE1vZHVsIHZlcndlbmRlbiB6dSBrw7ZubmVuISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWNlRWRpdG9yIHd1cmRlIGRlaW5zdGFsbGllcnQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1dvbGxlbiBTaWUgd2lya2xpY2ggQWNlRWRpdG9yIGRlaW5zdGFsbGllcmVuPyBEZW5rZW4gU2llIG5vY2htYWwgbmFjaCEnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICdGZWhsZW5kZSBCZXJlY2h0aWd1bmdlbiEgU3RlbGxlbiBTaWUgZGllIEJlcmVjaHRpZ3VuZ2VuIOKAnk1vZGlmeSBUZW1wbGF0ZXPigJwgb2RlciDigJ5BY2VFZGl0b3IgVXNlciBQcmVmZXJlbmNl4oCcIGVpbiwgdW0gZGllc2VzIE1vZHVsIHZlcndlbmRlbiB6dSBrw7ZubmVuLic7CiRsYW5nWydoZWxwX2F2YWlsYWJsZV90aGVtZXMnXSA9ICdWZXJmw7xnYmFyZSBEZXNpZ25zJzsKJGxhbmdbJ2hlbHBfYXZhaWxhYmxlX21vZGVzJ10gPSAnVmVyZsO8Z2JhcmUgTW9kaSc7CiRsYW5nWydoZWxwX3BhcmFtX21vZGUnXSA9ICdpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57YWNlX2NvZGUgbW9kZT1cJ2h0bWxcJ30gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgbW9kZSBmb3Igc3BlY2lmaWMgY29kZSBhcmVhLic7CiRsYW5nWydoZWxwX3BhcmFtX3RoZW1lJ10gPSAnaXMgdXNlZCB3aXRoaW4gYSBwYWdlIHdpdGggPGNvZGU+e2FjZV9jb2RlIHRoZW1lPVwndHdpbGlnaHRcJ30gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgdGhlbWUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4nOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ2Jlc3RpbW10IGRpZSBCcmVpdGUgZGVzIEJlcmVpY2hzIGRlciBTeW50YXhoZXJ2b3JoZWJ1bmcgaW4gUGl4ZWwuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faGVpZ2h0J10gPSAnYmVzdGltbXQgZGllIEjDtmhlIGRlcyBCZXJlaWNocyBkZXIgU3ludGF4aGVydm9yaGVidW5nIGluIFBpeGVsLic7CiRsYW5nWydoZWxwX3BhcmFtX2RpdmlkJ10gPSAnSUQgZGVzIEVsZW1lbnRzIG1pdCBJaHJlbSBDb2RlLiBWZXJ3ZW5kZW4gU2llIGVpbmRldXRpZ2UgSUQgZsO8ciBqZWRlbiBDb2RlYWJzY2huaXR0Lic7CiRsYW5nWydoZWxwX3BhcmFtX2h0bWxlbnRpdGllcyddID0gJ1RoaXMgcGFyYW1ldGVyIHdpbGwgdHJhbnNsYXRlIGFsbCBjaGFyYWN0ZXJzIGluc2lkZSB7YWNlX2NvZGV9IGJsb2NrIHBsdWdpbiB0byBlbnRpdGllcywgdXNpbmcgUEhQIDxhIGhyZWY9Imh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZGUvZnVuY3Rpb24uaHRtbGVudGl0aWVzLnBocCIgdGFyZ2V0PSJfYmxhbmsiPmh0bWxlbnRpdGllczwvYT4gZnVuY3Rpb24uIFVzZSB0aGlzIGlmIHlvdSBhcmUgbm90IHVzaW5nIGFueSBXWVNJV1lHIEVkaXRvciBhbmQgd3JpdGUgcmF3IGNvZGUgaW5zaWRlIGJsb2NrIHBsdWdpbi4nOwokbGFuZ1snaGVscF9nZW5lcmFsX3RpdGxlJ10gPSAnQWxsZ2VtZWluJzsKJGxhbmdbJ2hlbHBfZ2VuZXJhbF90ZXh0J10gPSAnPGgzPldhcyBtYWNodCBkaWVzZXMgTW9kdWw/PC9oMz4NCjxwPkFjZUVkaXRvciBpcyBhIFN5bnRheGhpZ2hsaWdodGVyIG1vZHVsZSB1c2luZyA8c3Ryb25nPkFjZTwvc3Ryb25nPiBhIHN0YW5kYWxvbmUgY29kZSBlZGl0b3Igd3JpdHRlbiBpbiBKYXZhU2NyaXB0LjxiciAvPiANCkdvYWwgb2YgQWNlIGNvZGUgZWRpdG9yIGdyb3VwIGlzIHRvIGNyZWF0ZSBhIHdlYiBiYXNlZCBjb2RlIGVkaXRvciB0aGF0IG1hdGNoZXMgYW5kIGV4dGVuZHMgdGhlIGZlYXR1cmVzLCB1c2FiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIGV4aXN0aW5nIG5hdGl2ZSBlZGl0b3JzIHN1Y2ggYXMgVGV4dE1hdGUsIFZpbSBvciBFY2xpcHNlLjxiciAvPg0KSXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbiBhbnkgd2ViIHBhZ2UgYW5kIEphdmFTY3JpcHQgYXBwbGljYXRpb24uPGJyIC8+IA0KQWNlIGlzIGRldmVsb3BlZCBhcyB0aGUgcHJpbWFyeSBlZGl0b3IgZm9yIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2xvdWQ5aWRlLmNvbSI+Q2xvdWQ5IElERTwvYT4gYW5kIHRoZSBzdWNjZXNzb3Igb2YgdGhlIE1vemlsbGEgU2t5d3JpdGVyIChCZXNwaW4pIFByb2plY3QuPC9wPg0KPGgzPkFjZSBpcyBob3N0ZWQgb24gR2l0SHViPC9oMz4NCjxwPlRoZSBBY2Ugc291cmNlIGNvZGUgaXMgaG9zdGVkIG9uIEdpdEh1Yi4gSXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1vemlsbGEgdHJpLWxpY2Vuc2UgKE1QTC9HUEwvTEdQTCkuPGJyIC8+DQpUaGlzIGlzIHRoZSBzYW1lIGxpY2Vuc2UgdXNlZCBieSBGaXJlZm94LiBUaGlzIGxpY2Vuc2UgaXMgZnJpZW5kbHkgdG8gYWxsIGtpbmRzIG9mIHByb2plY3RzLCB3aGV0aGVyIG9wZW4gc291cmNlIG9yIG5vdC48YnIgLz4NCiBUYWtlIGNoYXJnZSBvZiB5b3VyIGVkaXRvciBhbmQgYWRkIHlvdXIgZmF2b3JpdGUgbGFuZ3VhZ2UgaGlnaGxpZ2h0aW5nIGFuZCBrZXliaW5kaW5ncyE8L3A+DQo8aDM+VXNpbmcgQWNlRWRpdG9yIE1vZHVsZTwvaDM+DQo8cD5Vc2luZyBBY2VFZGl0b3IgTW9kdWxlIGlzIHNpbXBsZS48YnIgLz4NCkFmdGVyIEFjZUVkaXRvciB3YXMgaW5zdGFsbGVkIGdvIHRvICJNeSBQcmVmZXJlbmNlcyDCuyBVc2VyIFByZWZlcmVuY2VzIiBhbmQgY2hvb3NlIEFjZUVkaXRvciBhcyB5b3VyIFN5bnRheGhpZ2hsaWdodGVyIG9mIGNob2ljZSBmcm9tICJTZWxlY3Qgc3ludGF4IGhpZ2hsaWdodGVyIHRvIHVzZToiIERyb3Bkb3duLjxiciAvPg0KTWFrZSBzdXJlIHlvdSBoYXZlIFwnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXNcJyBQZXJtc2lzc2lvbi48L3A+DQo8aDM+U2V0dGluZ3M8L2gzPg0KPHA+WW91IGNhbiBjaGFuZ2UgZGVmYXVsdCBTZXR0aW5ncyBhbmQgVGhlbWVzIGluICJFeHRlbnNpb25zIMK7IEFjZUVkaXRvciI8L3A+JzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfdGl0bGUnXSA9ICdUYXN0YXR1cmvDvHJ6ZWwnOwokbGFuZ1snaGVscF9rZXlib2FyZHNob3J0Y3V0c19jb250ZW50J10gPSAnPGgzPlN0YW5kYXJkLVRhc3RhdHVya8O8cnplbDwvaDM+DQo8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgc3VtbWFyeT0iU3RhbmRhcmQtVGFzdGF0dXJrw7xyemVsIj4NCjx0aGVhZD4NCjx0cj4NCjx0aCBzY29wZT0iY29sIj5XaW5kb3dzL0xpbnV4PC90aD4NCjx0aCBzY29wZT0iY29sIj5NYWM8L3RoPg0KPHRoIHNjb3BlPSJjb2wiPkFrdGlvbjwvdGg+DQo8L3RyPg0KPC90aGVhZD4NCjx0Ym9keT4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+UmV0dXJu4o+OPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPlJldHVybuKPjjwva2JkPjwvdGQ+DQo8dGQ+Vm9sbGJpbGQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+Uzwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJgrUzwva2JkPjwvdGQ+DQo8dGQ+c3BlaWNoZXJuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjwvdGQ+DQo8dGQ+PGtiZD5DdHJsPC9rYmQ+KzxrYmQ+TDwva2JkPjwvdGQ+DQo8dGQ+QXVzd2FobCB6ZW50cmllcmVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPkFsdDwva2JkPis8a2JkPuKGkzwva2JkPiAoUGZlaWx0YXN0ZSk8L3RkPg0KPHRkPjxrYmQ+Q21k4oyYPC9rYmQ+KzxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+4oaTPC9rYmQ+IChQZmVpbHRhc3RlKTwvdGQ+DQo8dGQ+WmVpbGUga29waWVyZW4gdW5kIHVudGVyIGRpZXNlciBlaW5mw7xnZW48L3RkPg0KPC90cj4NCjx0ciBsY2Fzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+QWx0PC9rYmQ+KzxrYmQ+4oaRPC9rYmQ+IChQZmVpbHRhc3RlKTwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5BbHTijKU8L2tiZD4rPGtiZD7ihpE8L2tiZD4gKFBmZWlsdGFzdGUpPC90ZD4NCjx0ZD5aZWlsZSBrb3BpZXJlbiB1bmQgw7xiZXIgZGllc2VyIGVpbmbDvGdlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPlN0cmc8L2tiZD4rPGtiZD5GPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPkY8L2tiZD48L3RkPg0KPHRkPmZpbmRlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48a2JkPlN0cmc8L2tiZD4rPGtiZD5LPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPkc8L2tiZD48L3RkPg0KPHRkPm7DpGNoc3RlcyBmaW5kZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD5LPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+Rzwva2JkPjwvdGQ+DQo8dGQ+dm9yaGVyaWdlcyBmaW5kZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD7ihpM8L2tiZD4gKFBmZWlsdGFzdGUpPC90ZD4NCjx0ZD48a2JkPuKGkzwva2JkPiAoUGZlaWx0YXN0ZSksIDxrYmQ+Q3RybDwva2JkPis8a2JkPk48L2tiZD48L3RkPg0KPHRkPmVpbmUgWmVpbGUgbmFjaCB1bnRlbiBnZWhlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPuKGkTwva2JkPjwvdGQ+DQo8dGQ+PGtiZD7ihpE8L2tiZD4sIDxrYmQ+Q3RybDwva2JkPis8a2JkPlA8L2tiZD48L3RkPg0KPHRkPmVpbmUgWmVpbGUgbmFjaCBvYmVuIGdlaGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPkVuZGU8L2tiZD4sIDxrYmQ+U3RyZzwva2JkPis8a2JkPuKGkzwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5FbmRlPC9rYmQ+LCA8a2JkPkNtZOKMmDwva2JkPis8a2JkPuKGkzwva2JkPjwvdGQ+DQo8dGQ+enVtIFNlaXRlbmVuZGU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD7ihpA8L2tiZD4gKFBmZWlsdGFzdGUpPC90ZD4NCjx0ZD48a2JkPuKGkDwva2JkPiAoUGZlaWx0YXN0ZSksIDxrYmQ+Q3RybDwva2JkPis8a2JkPkI8L2tiZD48L3RkPg0KPHRkPm5hY2ggbGlua3MgZ2VoZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+TDwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5MPC9rYmQ+PC90ZD4NCjx0ZD5nZWhlIHp1ciBaZWlsZSDigKY8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD5BbHQ8L2tiZD4rPGtiZD7ihpI8L2tiZD4sIDxrYmQ+RW5kZTwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD7ihpI8L2tiZD4sIDxrYmQ+RW5kZTwva2JkPiwgPGtiZD5DdHJsPC9rYmQ+KzxrYmQ+RTwva2JkPjwvdGQ+DQo8dGQ+enVtIFplaWxlbmVuZGU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5BbHQ8L2tiZD4rPGtiZD7ihpA8L2tiZD4sIDxrYmQ+UG9zMTwva2JkPjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD7ihpA8L2tiZD4sIDxrYmQ+UG9zMTwva2JkPiwgPGtiZD5DdHJsPC9rYmQ+KzxrYmQ+QTwva2JkPjwvdGQ+DQo8dGQ+enVtIFplaWxlbmFuZmFuZzwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPkJpbGTihpM8L2tiZD48L3RkPg0KPHRkPjxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+QmlsZOKGkzwva2JkPiwgPGtiZD5DdHJsPC9rYmQ+KzxrYmQ+Vjwva2JkPjwvdGQ+DQo8dGQ+ZWluZSBTZWl0ZSBuYWNoIHVudGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjxrYmQ+QmlsZOKGkTwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5BbHTijKU8L2tiZD4rPGtiZD5CaWxk4oaRPC9rYmQ+PC90ZD4NCjx0ZD5laW5lIFNlaXRlIG5hY2ggb2JlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPuKGkjwva2JkPiAoUGZlaWx0YXN0ZSk8L3RkPg0KPHRkPjxrYmQ+4oaSPC9rYmQ+IChQZmVpbHRhc3RlKSwgPGtiZD5DdHJsPC9rYmQ+KzxrYmQ+Rjwva2JkPjwvdGQ+DQo8dGQ+bmFjaCByZWNodHMgZ2VoZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+UG9zMTwva2JkPiwgPGtiZD5TdHJnPC9rYmQ+KzxrYmQ+4oaRPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPlBvczE8L2tiZD4sIDxrYmQ+Q21k4oyYPC9rYmQ+KzxrYmQ+4oaRPC9rYmQ+PC90ZD4NCjx0ZD56dW0gU2VpdGVuYW5mYW5nPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPuKGkDwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5BbHTijKU8L2tiZD4rPGtiZD7ihpA8L2tiZD48L3RkPg0KPHRkPnp1bSBXb3J0IGxpbmtzIGdlaGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPuKGkjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5BbHTijKU8L2tiZD4rPGtiZD7ihpI8L2tiZD48L3RkPg0KPHRkPnp1bSBXb3J0IHJlY2h0cyBnZWhlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPlRhYjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5UYWI8L2tiZD48L3RkPg0KPHRkPmVpbnLDvGNrZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPlRhYjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPlRhYjwva2JkPjwvdGQ+DQo8dGQ+YXVzcsO8Y2tlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPkFsdDwva2JkPis8a2JkPuKGkzwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5BbHTijKU8L2tiZD4rPGtiZD7ihpM8L2tiZD48L3RkPg0KPHRkPlplaWxlKG4pIG5hY2ggdW50ZW4gYmV3ZWdlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48a2JkPkFsdDwva2JkPis8a2JkPuKGkTwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5BbHTijKU8L2tiZD4rPGtiZD7ihpE8L2tiZD48L3RkPg0KPHRkPlplaWxlKG4pIG5hY2ggb2JlbiBiZXdlZ2VuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+RWluZsO8Z2VuPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkVpbmbDvGdlbjwva2JkPjwvdGQ+DQo8dGQ+w7xiZXJzY2hyZWliZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PC90ZD4NCjx0ZD48a2JkPlNlaXRl4oaRPC9rYmQ+PC90ZD4NCjx0ZD5laW5lIFNlaXRlIG5hY2ggb2JlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48L3RkPg0KPHRkPjxrYmQ+U2VpdGXihpM8L2tiZD48L3RkPg0KPHRkPmVpbmUgU2VpdGUgbmFjaCB1bnRlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48a2JkPlN0cmc8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPlo8L2tiZD4sIDxrYmQ+U3RyZzwva2JkPis8a2JkPlk8L2tiZD48L3RkPg0KPHRkPjxrYmQ+Q21k4oyYPC9rYmQ+KzxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD5aPC9rYmQ+LCA8a2JkPkNtZOKMmDwva2JkPis8a2JkPlk8L2tiZD48L3RkPg0KPHRkPndpZWRlcmhvbGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPkQ8L2tiZD48L3RkPg0KPHRkPjxrYmQ+Q21k4oyYPC9rYmQ+KzxrYmQ+RDwva2JkPjwvdGQ+DQo8dGQ+WmVpbGUgZW50ZmVybmVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjwvdGQ+DQo8dGQ+PGtiZD5DdHJsPC9rYmQ+KzxrYmQ+Szwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBaZWlsZW5lbmRlIGVudGZlcm5lbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48L3RkPg0KPHRkPjxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+UsO8Y2vijKs8L2tiZD48L3RkPg0KPHRkPmJpcyB6dW0gWmVpbGVuYW5mYW5nIGVudGZlcm5lbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48L3RkPg0KPHRkPjxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+UsO8Y2vijKs8L2tiZD4sIDxrYmQ+Q3RybDwva2JkPis8a2JkPkFsdOKMpTwva2JkPis8a2JkPlLDvGNr4oyrPC9rYmQ+PC90ZD4NCjx0ZD5Xb3J0IGxpbmtzIGVudGZlcm5lbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48L3RkPg0KPHRkPjxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+RW50Zjwva2JkPjwvdGQ+DQo8dGQ+V29ydCByZWNodHMgZW50ZmVybmVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPlI8L2tiZD48L3RkPg0KPHRkPjxrYmQ+Q21k4oyYPC9rYmQ+KzxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+Rjwva2JkPjwvdGQ+DQo8dGQ+ZXJzZXR6ZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD5SPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+QWx04oylPC9rYmQ+KzxrYmQ+Rjwva2JkPjwvdGQ+DQo8dGQ+YWxsZXMgZXJzZXR6ZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+QTwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5BPC9rYmQ+PC90ZD4NCjx0ZD5hbGxlcyBhdXN3w6RobGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD7ihpM8L2tiZD48L3RkPg0KPHRkPjxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD7ihpM8L2tiZD48L3RkPg0KPHRkPm5hY2ggdW50ZW4gYXVzd8OkaGxlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+4oaQPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+4oaQPC9rYmQ+PC90ZD4NCjx0ZD5uYWNoIGxpbmtzIGF1c3fDpGhsZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPjxrYmQ+RW5kZTwva2JkPjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPjxrYmQ+RW5kZTwva2JkPjwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBaZWlsZW5lbmRlIGF1c3fDpGhsZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPjxrYmQ+UG9zMTwva2JkPjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPjxrYmQ+UG9zMTwva2JkPjwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBaZWlsZW5hbmZhbmcgYXVzd8OkaGxlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+QmlsZOKGkzwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPlNlaXRl4oaTPC9rYmQ+PC90ZD4NCjx0ZD5iaXMgenVyIG7DpGNoc3RlbiBTZWl0ZSBhdXN3w6RobGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD5CaWxk4oaRPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+U2VpdGXihpE8L2tiZD48L3RkPg0KPHRkPmJpcyB6dXIgdm9yaGVyaWdlbiBTZWl0ZSBhdXN3w6RobGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD7ihpI8L2tiZD48L3RkPg0KPHRkPjxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD7ihpI8L2tiZD48L3RkPg0KPHRkPm5hY2ggcmVjaHRzIGF1c3fDpGhsZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+VW1zY2hhbHTih6c8L2tiZD4rPGtiZD48a2JkPkVuZGU8L2tiZD4sPGtiZD5BbHTijKU8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkzwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkzwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBTZWl0ZW5lbmRlIGF1c3fDpGhsZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQ+PGtiZD5BbHQ8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkjwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBaZWlsZW5lbmRlIGF1c3fDpGhsZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5BbHQ8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkDwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkDwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBaZWlsZW5hbmZhbmcgYXVzd8OkaGxlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPlN0cmc8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPjxrYmQ+UG9zMTwva2JkPixBbHTijKU8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkTwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkTwva2JkPjwvdGQ+DQo8dGQ+YmlzIHp1bSBTZWl0ZW5hbmZhbmcgYXVzd8OkaGxlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+4oaRPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+4oaRPC9rYmQ+PC90ZD4NCjx0ZD5uYWNoIG9iZW4gYXVzd8OkaGxlbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZD48a2JkPlN0cmc8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkDwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5BbHTijKU8L2tiZD4rPGtiZD5VbXNjaGFsdOKHpzwva2JkPis8a2JkPuKGkDwva2JkPjwvdGQ+DQo8dGQ+V29ydCBsaW5rcyBhdXN3w6RobGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+4oaSPC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkFsdOKMpTwva2JkPis8a2JkPlVtc2NoYWx04oenPC9rYmQ+KzxrYmQ+4oaSPC9rYmQ+PC90ZD4NCjx0ZD5Xb3J0IHJlY2h0cyBhdXN3w6RobGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjwvdGQ+DQo8dGQ+PGtiZD5DdHJsPC9rYmQ+KzxrYmQ+Tzwva2JkPjwvdGQ+DQo8dGQ+WmVpbGUgdHJlbm5lbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZD48a2JkPlN0cmc8L2tiZD4rPGtiZD43PC9rYmQ+PC90ZD4NCjx0ZD48a2JkPkNtZOKMmDwva2JkPis8a2JkPjc8L2tiZD48L3RkPg0KPHRkPktvbW1lbnRhciBlaW4tL2F1c3NjaGFsdGVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkPjxrYmQ+U3RyZzwva2JkPis8a2JkPlQ8L2tiZD48L3RkPg0KPHRkPjxrYmQ+Q3RybDwva2JkPis8a2JkPlQ8L2tiZD48L3RkPg0KPHRkPlplaWNoZW4gbmFjaCByZWNodHMgdHJhbnNwb3J0aWVyZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQ+PGtiZD5TdHJnPC9rYmQ+KzxrYmQ+Wjwva2JkPjwvdGQ+DQo8dGQ+PGtiZD5DbWTijJg8L2tiZD4rPGtiZD5aPC9rYmQ+PC90ZD4NCjx0ZD5yw7xja2dhw6RuZ2lnIG1hY2hlbjwvdGQ+DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU+JzsKJGxhbmdbJ2hlbHBfZnJvbnRlbmRfdGl0bGUnXSA9ICdGcm9udC1FbmQnOwokbGFuZ1snaGVscF9mcm9udGVuZF9jb250ZW50J10gPSAnPHA+VGhpcyBNb2R1bGUgYW5kIEFjZSBTY3JpcHQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIEZyb250ZW5kIFN5bnRheGhpZ2hsaWdodGVyLjxiciAvPg0KVG8gbWFrZSBpdCB3b3JrIHlvdSBoYXZlIHRvIGluY2x1ZGUgalF1ZXJ5IEZyYW1ld29yaywgZm9yIGV4YW1wbGUgdXNpbmcgQ01TTVMge2Ntc19qcXVlcnl9IHRhZyBhbmQgYXMgd2VsbCBpbmNsdWRlIHthY2VfaGVhZH0gaW4geW91ciA8aGVhZD4gc2VjdGlvbiBvZiB0aGUgcGFnZS4gRmlyc3QgYWRkIHRoZSBtb2R1bGUgcGx1Z2luIHRhZyBpbiB5b3VyIDxoZWFkPiBzZWN0aW9uIG9mIFRlbXBsYXRlIG9yIGluICZxdW90O1BhZ2UgU3BlY2lmaWMgTWV0ZGF0YSZxdW90OyBmaWVsZCBvZiB5b3VyIENvbnRlbnQgcGFnZSwgbGlrZSB7YWNlX2hlYWR9IGFuZCBhbm90aGVyIGNhbGwgdG8gc3BlY2lmeSB3aGljaCBhcmVhIHNob3VsZCBiZSBoaWdobGlnaHRlZCwgZm9yIGV4YW1wbGUge2FjZV9jb2RlIGRpdmlkPVwnY29kZS1hcmVhXCd9IHlvdXIgY29kZSB7L2FjZV9jb2RlfSBpbiB5b3VyIGNvbnRlbnQsIHdoaWNoIHdvdWxkIHRhcmdldCBhIHBhZ2UgZWxlbWVudCB3aXRoIGlkIDxlbT5jb2RlLWFyZWE8L2VtPi48L3A+DQo8aDM+U28gaG93IGRvIHlvdSB1c2UgaXQ/PC9oMz4NCjxwPkZpcnN0IGluY2x1ZGUgalF1ZXJ5IChpZiB5b3UgYXJlIG5vdCB1c2luZyBpdCBhbHJlYWR5KSBhbmQgPGNvZGU+e2FjZV9oZWFkfTwvY29kZT4gTW9kdWxlIHBsdWdpbiBpbiB5b3VyIFBhZ2UgPGhlYWQ+IGFyZWEsIGZvciBleGFtcGxlIGluICZxdW90O1BhZ2UgU3BlY2lmaWMgTWV0ZGF0YSZxdW90Ozo8L3A+DQo8cHJlPg0Ke2Ntc19qcXVlcnkgZXhjbHVkZT1cJ2pxdWVyeS11aS5taW4uanMsIGpxdWVyeS51aS5uZXN0ZWRTb3J0YWJsZS5qcyxqcXVlcnkuanNvbi5taW4uanNcJ30NCnthY2VfaGVhZH0NCjwvcHJlPg0KPHA+VGhpcyBpbmNsdWRlcyBuZWVkZWQgSmF2YVNjcmlwdCBzY3JpcHRzIGZvciBBY2UgU3ludGF4aGlnaGxpZ2h0ZXIgdG8gd29yay48YnIgLz4NCkluIE1vZHVsZSBBZG1pbiBpbnRlcmZhY2UgeW91IGNhbiBzZWxlY3QgZGVmYXVsdCBzZXR0aW5ncyBmb3IgeW91ciBjb2RlIGJsb2NrcyBvciB1c2UgcGFyYW1ldGVyIG9uIE1vZHVsZSBibG9jayBwbHVnaW4gbW9kZT1cJ2h0bWxcJyBhbmQgdGhlbWU9XCd0ZXh0bWF0ZVwnIHdoaWNoIHdvdWxkIG92ZXJyaWRlIHNlbGVjdGVkIFByZWZlcmVuY2VzLjwvcD4NCjxwPk5vdyB3aGVuIHlvdSBoYXZlIG5lZWRlZCBzY3JpcHRzIGxpa2UgalF1ZXJ5IGFuZCBBY2UgTGlicmFyeSBhbmQgQWNlSW5pdCBqUXVlcnkgcGx1Z2luIHdpdGggPGNvZGU+e2FjZV9oZWFkfTwvY29kZT4gLCB3cml0ZSB5b3VyIENvZGUgd2hpY2ggeW91IHdvdWxkIGxpa2UgdG8gYmUgaGlnaGxpZ2h0ZWQgaW5zaWRlIDxjb2RlPnthY2VfY29kZX0gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi48L3A+DQo8cHJlPg0Ke2FjZV9jb2RlIHRoZW1lPVwndHdpbGlnaHRcJyBtb2RlPVwncnVieVwnIGRpdmlkPVwnbXktY29kZS1ibG9ja1wnfSBDb2RlIGluIGhlcmUgey9hY2VfY29kZX0NCjwvcHJlPg0KPHA+VGhpcyBibG9jayBwbHVnaW4gaW5jbHVkZXMgbmVlZGVkIGpRdWVyeSBwbHVnaW4gY2FsbCBhbmQgd3JhcHMgeW91ciBjb250ZW50IGluc2lkZSAmbHRwcmUmZ3QgSFRNTCB0YWcgc3BlY2lmaWVkIGlkLjwvcD4nOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvciZuYnNwJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdBY2VFZGl0b3IgZXN0IHVuIG1vZHVsZSBkZSBjb2xvcmF0aW9uIHN5bnRheGlxdWUgdXRpbGlzYW50IEFjZSB1biDDqWRpdGV1ciBkZSBjb2RlIGF1dG9ub21lIMOpY3JpdCBlbiBKYXZhU2NyaXB0Lic7CiRsYW5nWydzZXR0aW5nc190YWInXSA9ICdQcsOpZsOpcmVuY2VzJzsKJGxhbmdbJ2Zyb250ZW5kc2V0dGluZ3NfdGFiJ10gPSAnUHLDqWbDqXJlbmNlcyBkdSBGcm9udGVuZCc7CiRsYW5nWydmcm9udGVuZF9zeW50YXhhcmVhX3NldHRpbmdzJ10gPSAnUHLDqWbDqXJlbmNlcyBjb2xvcmF0aW9uIHN5bnRheGlxdWUgcG91ciBsZSBzaXRlIFdlYic7CiRsYW5nWydjb250ZW50X2Rlc2NyaXB0aW9uJ10gPSAnVGhlc2UgcHJlZmVyZW5jZXMgYXJlIHVzZWQgZm9yIGRlZmF1bHQgc2V0dGluZ3Mgb2YgU3ludGF4aGlnaGxpZ2h0aW5nIGFyZWEgd2hlbiBjYWxsaW5nIDxjb2RlPntBY2VFZGl0b3IgZGl2aWQ9XCdlZGl0b3JcJ308L2NvZGU+IHRhZyB3aXRoaW4gYSBQYWdlLic7CiRsYW5nWyd3aWR0aF90aXRsZSddID0gJ0xhcmdldXIgZGUgbFwnw6lkaXRldXIgKGVuIGVtKSc7CiRsYW5nWydoZWlnaHRfdGl0bGUnXSA9ICdIYXV0ZXVyIGRlIGxcJ8OpZGl0ZXVyIChlbiBlbSknOwokbGFuZ1snZnJvbnRlbmRfd2lkdGhfdGl0bGUnXSA9ICdMYXJnZXVyIGRlIGxcJ8OpZGl0ZXVyIGR1IHNpdGUgV2ViIChGcm9udGVuZCknOwokbGFuZ1snZnJvbnRlbmRfaGVpZ2h0X3RpdGxlJ10gPSAnRnJvbnRlbmQgSGF1dGV1ciBkZSBsXCfDqWRpdGV1ciBkdSBzaXRlIFdlYiAgKEZyb250ZW5kKSc7CiRsYW5nWydzeW50YXhfbW9kZSddID0gJ01vZGUnOwokbGFuZ1sndGhlbWVzJ10gPSAnVGjDqG1lJzsKJGxhbmdbJ2ZvbnRfc2l6ZSddID0gJ1RhaWxsZSBkZSBsYSBwb2xpY2UnOwokbGFuZ1snZnVsbF9saW5lJ10gPSAnU8OpbGVjdGlvbiBkZSBsYSBsaWduZWUgY29tcGzDqHRlJzsKJGxhbmdbJ2hpZ2hsaWdodF9hY3RpdmUnXSA9ICdTdXJsaWduZXIgbGEgbGlnbmUgQWN0aXZlJzsKJGxhbmdbJ3Nob3dfaW52aXNpYmxlcyddID0gJ1Nob3cgSW52aXNpYmxlcyc7CiRsYW5nWydwZXJzaXN0ZW50X2hzY3JvbGwnXSA9ICdQZXJzaXRlbnQgSFNjcm9sbCc7CiRsYW5nWydrZXlfYmluZGluZyddID0gJ0tleSBCaW5kaW5nJzsKJGxhbmdbJ3NvZnRfd3JhcCddID0gJ1NvZnQgV3JhcCc7CiRsYW5nWydzaG93X2d1dHRlciddID0gJ1Nob3cgR3V0dGVyJzsKJGxhbmdbJ3dyYXBfbGluZSddID0gJ1JldG91ciDDoCBsYSBsaWduZSc7CiRsYW5nWydwcmludF9tYXJnaW4nXSA9ICdTaG93IFByaW50IE1hcmdpbic7CiRsYW5nWydzb2Z0X3RhYiddID0gJ1VzZSBTb2Z0IFRhYic7CiRsYW5nWyd0YWJfc2l6ZSddID0gJ1NlbGVjdCBUYWIgc2l6ZSc7CiRsYW5nWydoaWdobGlnaHRfc2VsZWN0ZWQnXSA9ICdIaWdobGlnaHQgc2VsZWN0ZWQgd29yZCc7CiRsYW5nWydlbmFibGVfYmVoYXZpb3JzJ10gPSAnRW5hYmxlIEJlaGF2aW9ycyc7CiRsYW5nWyd0ZXN0YXJlYXRleHQnXSA9ICdQcsOpdmlzdWFsaXNhdGlvbic7CiRsYW5nWydhdXRvX2hlaWdodCddID0gJ0F1dG8gKMOJZGl0ZXVyIGF2ZWMgaGF1dGV1ciBwcsOpZMOpZmluaWUgZXQgbGFyZ2V1ciBhdXRvbWF0aXF1ZSBiYXPDqSBzdXIgbGUgY29udGVudSknOwokbGFuZ1snb24nXSA9ICdPbic7CiRsYW5nWydvZmYnXSA9ICdPZmYnOwokbGFuZ1snbGluZSddID0gJ0xpZ25lJzsKJGxhbmdbJ2NvbHVtbiddID0gJ0NvbG9ubmUnOwokbGFuZ1snY3VycmVudF9saW5lJ10gPSAnTGlnbmUgYWN0dWVsbGUnOwokbGFuZ1snY3VycmVudF90b2tlbiddID0gJ0N1cnJlbnQgdG9rZW4nOwokbGFuZ1sndG90YWxfbGluZXMnXSA9ICdOb21icmUgdG90YWwgZGUgbGlnbmVzJzsKJGxhbmdbJ2dvX2xpbmUnXSA9ICdBbGxlciDDoCBsYSBsaWduZSc7CiRsYW5nWydrZXliaW5kaW5ncyddID0gJ1JhY2NvdXJjaXMgY2xhdmllcic7CiRsYW5nWydhY2UnXSA9ICdBY2UmbmJzcDsnOwokbGFuZ1sndmltJ10gPSAnVmltJm5ic3A7JzsKJGxhbmdbJ2VtYWNzJ10gPSAnRU1hY3MmbmJzcDsnOwokbGFuZ1snZnVsbF9zY3JlZW4nXSA9ICdQbGVpbiDDqWNyYW4nOwokbGFuZ1snc2VhcmNoX2RvY3VtZW50J10gPSAnUmVjaGVyY2hlIChhcHB1eWV6IHN1ciBFbnRyw6llKSc7CiRsYW5nWydyZXBsYWNlX3dpdGgnXSA9ICdSZW1wbGFjZXIgcGFyIChhcHB1eWV6IHN1ciBFbnRyw6llKSc7CiRsYW5nWydzZWFyY2hfb3B0aW9ucyddID0gJ09wdGlvbnMgZGUgcmVjaGVyY2hlJzsKJGxhbmdbJ3NlYXJjaF9zZXR0aW5ncyddID0gJ1BhcmFtw6h0cmVzIGRlIHJlY2hlcmNoZSc7CiRsYW5nWydoaWdobGlnaHRlcl9vbiddID0gJ01ldHRyZSBlbiBtYXJjaGUgbGUgc3VybGlnbmV1cic7CiRsYW5nWydoaWdobGlnaHRlcl9vZmYnXSA9ICdBcnJldGVyIGxlIHN1cmxpZ25ldXInOwokbGFuZ1sncmVwbGFjZV9vcHRpb24nXSA9ICdSZW1wbGFjZXInOwokbGFuZ1sncmVwbGFjZWFsbF9vcHRpb24nXSA9ICdSZW1wbGFjZXIgdG91dCc7CiRsYW5nWydjYXNlX3NlbnNpdGl2ZSddID0gJ1JlY2hlcmNoZSBzZW5zaWJsZSDDoCBsYSBjYXNzZSc7CiRsYW5nWyd3aG9sZV93b3JkJ10gPSAnUmVjaGVyY2hlIHBhciBtb3QgZW50aWVyJzsKJGxhbmdbJ3JlZ2V4cCddID0gJ1JlY2hlcmNoZSB1ZW4gZXhwcmVzc2lvbiByw6lndWxpw6hyZSc7CiRsYW5nWydzZWFyY2hfYW55J10gPSAnUmVjaGVyY2hlciBuXCdpbXBvcnRlIHF1b2knOwokbGFuZ1snYWJhcCddID0gJ0FCQVAmbmJzcDsnOwokbGFuZ1snYWRhJ10gPSAnQUJBUCZuYnNwOyc7CiRsYW5nWydhY3Rpb25zY3JpcHQnXSA9ICdBY3Rpb25TY3JpcHQmbmJzcDsnOwokbGFuZ1snYXNjaWlkb2MnXSA9ICdBc2NpaURvYyZuYnNwOyc7CiRsYW5nWydhc3NlbWJseV94ODYnXSA9ICdBc3NlbWJseV84NiZuYnNwOyc7CiRsYW5nWydhdXRvaG90a2V5J10gPSAnQXV0b0hvdEtleSZuYnNwOyc7CiRsYW5nWydiYXRjaGZpbGUnXSA9ICdCYXRjaEZpbGUmbmJzcDsnOwokbGFuZ1snYzlzZWFyY2gnXSA9ICdDOVNlYXJjaCZuYnNwOyc7CiRsYW5nWydjX2NwcCddID0gJ0MrKyZuYnNwOyc7CiRsYW5nWydjbG9qdXJlJ10gPSAnQ2xvanVyZSZuYnNwOyc7CiRsYW5nWydjb2JvbCddID0gJ0NvYm9sJm5ic3A7JzsKJGxhbmdbJ2NvZmZlZSddID0gJ0NvZmZlZVNjcmlwdCZuYnNwOyc7CiRsYW5nWydjb2xkZnVzaW9uJ10gPSAnQ29sZGZ1c2lvbiZuYnNwOyc7CiRsYW5nWydjc2hhcnAnXSA9ICdDIyZuYnNwOyc7CiRsYW5nWydjc3MnXSA9ICdDU1MmbmJzcDsnOwokbGFuZ1snY3VybHknXSA9ICdDdXJseSZuYnNwOyc7CiRsYW5nWydkJ10gPSAnRCZuYnNwOyc7CiRsYW5nWydkYXJ0J10gPSAnRGFydCZuYnNwOyc7CiRsYW5nWydkaWZmJ10gPSAnRGlmZiZuYnNwOyc7CiRsYW5nWydkamFuZ28nXSA9ICdEamFuZ28mbmJzcDsnOwokbGFuZ1snZG90J10gPSAnRG90Jm5ic3A7JzsKJGxhbmdbJ2VybGFuZyddID0gJ0VybGFuZyZuYnNwOyc7CiRsYW5nWydlanMnXSA9ICdFSlMmbmJzcDsnOwokbGFuZ1snZm9ydGgnXSA9ICdGb3J0aCZuYnNwOyc7CiRsYW5nWydmdGwnXSA9ICdGcmVlTWFya2VyJm5ic3A7JzsKJGxhbmdbJ2dsc2wnXSA9ICdHbHNsJm5ic3A7JzsKJGxhbmdbJ2dvbGFuZyddID0gJ0dPJm5ic3A7JzsKJGxhbmdbJ2dyb292eSddID0gJ0dyb292eSZuYnNwOyc7CiRsYW5nWydoYW1sJ10gPSAnSEFNTCZuYnNwOyc7CiRsYW5nWydoYXNrZWxsJ10gPSAnSGFza2VsbCZuYnNwOyc7CiRsYW5nWydoYXhlJ10gPSAnSGF4ZSZuYnNwOyc7CiRsYW5nWydodG1sJ10gPSAnSFRNTCZuYnNwOyc7CiRsYW5nWydodG1sX2NvbXBsZXRpb25zJ10gPSAnSFRNTCAoQ29tcGxldGlvbnMpJm5ic3A7JzsKJGxhbmdbJ2h0bWxfcnVieSddID0gJ0hUTUwgKFJ1YnkpJm5ic3A7JzsKJGxhbmdbJ2luaSddID0gJ0luaSZuYnNwOyc7CiRsYW5nWydqYWRlJ10gPSAnSmFkZSZuYnNwOyc7CiRsYW5nWydqYXZhJ10gPSAnSmF2YSZuYnNwOyc7CiRsYW5nWydqYXZhc2NyaXB0J10gPSAnSmF2YVNjcmlwdCZuYnNwOyc7CiRsYW5nWydqc29uJ10gPSAnSlNPTiZuYnNwOyc7CiRsYW5nWydqc29uaXEnXSA9ICdKU09OaXEmbmJzcDsnOwokbGFuZ1snanNwJ10gPSAnSlNQJm5ic3A7JzsKJGxhbmdbJ2pzeCddID0gJ0pTWCZuYnNwOyc7CiRsYW5nWydqdWxpYSddID0gJ0p1bGlhJm5ic3A7JzsKJGxhbmdbJ2xhdGV4J10gPSAnTGF0ZXgmbmJzcDsnOwokbGFuZ1snbGVzcyddID0gJ0xFU1MmbmJzcDsnOwokbGFuZ1snbGlxdWlkJ10gPSAnTGlxdWlkJm5ic3A7JzsKJGxhbmdbJ2xpc3AnXSA9ICdMaXNwJm5ic3A7JzsKJGxhbmdbJ2xpdmVzY3JpcHQnXSA9ICdMaXZlU2NyaXB0Jm5ic3A7JzsKJGxhbmdbJ2xvZ2lxbCddID0gJ0xvZ2lRTCZuYnNwOyc7CiRsYW5nWydsc2wnXSA9ICdMU0wmbmJzcDsnOwokbGFuZ1snbHVhJ10gPSAnTHVhJm5ic3A7JzsKJGxhbmdbJ2x1YWh0bWwnXSA9ICdMdWFIVE1MJm5ic3A7JzsKJGxhbmdbJ2x1YXBhZ2UnXSA9ICdMdWFQYWdlJm5ic3A7JzsKJGxhbmdbJ2x1Y2VuZSddID0gJ0x1YVBhZ2UmbmJzcDsnOwokbGFuZ1snbWFrZWZpbGUnXSA9ICdMdWFQYWdlJm5ic3A7JzsKJGxhbmdbJ21hdGxhYiddID0gJ01BVExBQiZuYnNwOyc7CiRsYW5nWydtYXJrZG93biddID0gJ01hcmtkb3duJm5ic3A7JzsKJGxhbmdbJ215c3FsJ10gPSAnTVlTUUwmbmJzcDsnOwokbGFuZ1snbXVzaGNvZGUnXSA9ICdNVVNIQ29kZSZuYnNwOyc7CiRsYW5nWydtdXNoY29kZV9oaWdoX3J1bGVzJ10gPSAnTVVTSENvZGUgSGlnaCBSdWxlcyZuYnNwOyc7CiRsYW5nWyduaXgnXSA9ICdOaXgmbmJzcDsnOwokbGFuZ1snb2JqZWN0aXZlYyddID0gJ09iamVjdGl2ZS1DJm5ic3A7JzsKJGxhbmdbJ29jYW1sJ10gPSAnT0NhbWwmbmJzcDsnOwokbGFuZ1sncGFzY2FsJ10gPSAnUGFzY2FsJm5ic3A7JzsKJGxhbmdbJ3BlcmwnXSA9ICdQZXJsJm5ic3A7JzsKJGxhbmdbJ3Bnc3FsJ10gPSAncGdTUUwmbmJzcDsnOwokbGFuZ1sncGhwJ10gPSAnUEhQJm5ic3A7JzsKJGxhbmdbJ3BsYWluX3RleHQnXSA9ICdQbGFpbiBUZXh0Jm5ic3A7JzsKJGxhbmdbJ3Bvd2Vyc2hlbGwnXSA9ICdQb3dlclNoZWxsJm5ic3A7JzsKJGxhbmdbJ3Byb2xvZyddID0gJ1Byb2xvZyZuYnNwOyc7CiRsYW5nWydwcm9wZXJ0aWVzJ10gPSAnUHJvcGVydGllcyZuYnNwOyc7CiRsYW5nWydwcm90b2J1ZiddID0gJ1Byb3RvYnVmJm5ic3A7JzsKJGxhbmdbJ3B5dGhvbiddID0gJ1B5dGhvbiZuYnNwOyc7CiRsYW5nWydyJ10gPSAnUiZuYnNwOyc7CiRsYW5nWydyZG9jJ10gPSAnUkRvYyZuYnNwOyc7CiRsYW5nWydyaHRtbCddID0gJ1JIVE1MJm5ic3A7JzsKJGxhbmdbJ3J1YnknXSA9ICdSdWJ5Jm5ic3A7JzsKJGxhbmdbJ3J1c3QnXSA9ICdSdXN0Jm5ic3A7JzsKJGxhbmdbJ3Nhc3MnXSA9ICdTQVNTJm5ic3A7JzsKJGxhbmdbJ3NjYWQnXSA9ICdPcGVuU0NBRCZuYnNwOyc7CiRsYW5nWydzY2FsYSddID0gJ1NjYWxhJm5ic3A7JzsKJGxhbmdbJ3NjaGVtZSddID0gJ1NjaGVtZSZuYnNwOyc7CiRsYW5nWydzY3NzJ10gPSAnU0NTUyZuYnNwOyc7CiRsYW5nWydzaCddID0gJ1NIJm5ic3A7JzsKJGxhbmdbJ3NtYXJ0eSddID0gJ1NtYXJ0eSAoSFRNTCkmbmJzcDsnOwokbGFuZ1snc25pcHBldHMnXSA9ICdTbWFydHkgKEhUTUwpJm5ic3A7JzsKJGxhbmdbJ3NxbCddID0gJ1NRTCZuYnNwOyc7CiRsYW5nWydzdHlsdXMnXSA9ICdTdHlsdXMmbmJzcDsnOwokbGFuZ1snc3ZnJ10gPSAnU1ZHJm5ic3A7JzsKJGxhbmdbJ3RjbCddID0gJ1RjbCZuYnNwOyc7CiRsYW5nWyd0ZXgnXSA9ICdUZXgmbmJzcDsnOwokbGFuZ1sndGV4dCddID0gJ1RleHQmbmJzcDsnOwokbGFuZ1sndGV4dGlsZSddID0gJ1RleHRpbGUmbmJzcDsnOwokbGFuZ1sndG1zbmlwcGV0J10gPSAnVE1TbmlwcGV0Jm5ic3A7JzsKJGxhbmdbJ3RvbWwnXSA9ICdUb21sJm5ic3A7JzsKJGxhbmdbJ3R3aWcnXSA9ICdUd2lnJm5ic3A7JzsKJGxhbmdbJ3R5cGVzY3JpcHQnXSA9ICdUeXBlc2NyaXB0Jm5ic3A7JzsKJGxhbmdbJ3Zic2NyaXB0J10gPSAnVkJTY3JpcHQmbmJzcDsnOwokbGFuZ1sndmVsb2NpdHknXSA9ICdWZWxvY2l0eSZuYnNwOyc7CiRsYW5nWyd2ZXJpbG9nJ10gPSAnVmVyaWxvZyZuYnNwOyc7CiRsYW5nWyd4bWwnXSA9ICdYTUwmbmJzcDsnOwokbGFuZ1sneHF1ZXJ5J10gPSAnWFF1ZXJ5Jm5ic3A7JzsKJGxhbmdbJ3lhbWwnXSA9ICdZQU1MJm5ic3A7JzsKJGxhbmdbJ2FtYmlhbmNlJ10gPSAnQW1iaWFuY2UmbmJzcDsnOwokbGFuZ1snY2hhb3MnXSA9ICdDaGFvcyZuYnNwOyc7CiRsYW5nWydjbG91ZHMnXSA9ICdDbG91ZHMmbmJzcDsnOwokbGFuZ1snY2hyb21lJ10gPSAnQ2hyb21lJm5ic3A7JzsKJGxhbmdbJ2Nsb3Vkc19taWRuaWdodCddID0gJ0Nsb3VkcyBNaWRuaWdodCZuYnNwOyc7CiRsYW5nWydjb2JhbHQnXSA9ICdDb2JhbHQmbmJzcDsnOwokbGFuZ1snY3JpbXNvbl9lZGl0b3InXSA9ICdDcmltc29uIEVkaXRvciZuYnNwOyc7CiRsYW5nWydkYXduJ10gPSAnRGF3biZuYnNwOyc7CiRsYW5nWydkcmVhbXdlYXZlciddID0gJ0RyZWFtd2VhdmVyJm5ic3A7JzsKJGxhbmdbJ2VjbGlwc2UnXSA9ICdFY2xpcHNlJm5ic3A7JzsKJGxhbmdbJ2dpdGh1YiddID0gJ0dpdEh1YiZuYnNwOyc7CiRsYW5nWydpZGxlX2ZpbmdlcnMnXSA9ICdpZGxlRmluZ2VycyZuYnNwOyc7CiRsYW5nWydrciddID0gJ2tyVGhlbWUmbmJzcDsnOwokbGFuZ1sna3JfdGhlbWUnXSA9ICdrclRoZW1lJm5ic3A7JzsKJGxhbmdbJ21lcmJpdm9yZSddID0gJ01lcmJpdm9yZSZuYnNwOyc7CiRsYW5nWydtZXJiaXZvcmVfc29mdCddID0gJ01lcmJpdm9yZSBTb2Z0Jm5ic3A7JzsKJGxhbmdbJ21vbm9faW5kdXN0cmlhbCddID0gJ01vbm8gSW5kdXN0cmlhbCZuYnNwOyc7CiRsYW5nWydtb25va2FpJ10gPSAnTW9ub2thaSZuYnNwOyc7CiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gJ1Bhc3RlbCBvbiBkYXJrJm5ic3A7JzsKJGxhbmdbJ3NvbGFyaXplZF9kYXJrJ10gPSAnU29sYXJpemVkIERhcmsmbmJzcDsnOwokbGFuZ1snc29sYXJpemVkX2xpZ2h0J10gPSAnU29sYXJpemVkIExpZ2h0Jm5ic3A7JzsKJGxhbmdbJ3Rlcm1pbmFsJ10gPSAnVGVybWluYWwmbmJzcDsnOwokbGFuZ1sndGV4dG1hdGUnXSA9ICdUZXh0TWF0ZSZuYnNwOyc7CiRsYW5nWyd0b21vcnJvdyddID0gJ1RvbW9ycm93Jm5ic3A7JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0J10gPSAnVG9tb3Jyb3cgTmlnaHQmbmJzcDsnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfYnJpZ2h0J10gPSAnVG9tb3Jyb3cgTmlnaHQgQnJpZ2h0Jm5ic3A7JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0X2JsdWUnXSA9ICdUb21vcnJvdyBOaWdodCBCbHVlJm5ic3A7JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0X2VpZ2h0aWVzJ10gPSAnVG9tb3Jyb3cgTmlnaHQgRWlnaHRpZXMmbmJzcDsnOwokbGFuZ1sndHdpbGlnaHQnXSA9ICdUd2lsaWdodCZuYnNwOyc7CiRsYW5nWyd2aWJyYW50X2luayddID0gJ1ZpYnJhbnQgSW5rJm5ic3A7JzsKJGxhbmdbJ3hjb2RlJ10gPSAnWENvZGUmbmJzcDsnOwokbGFuZ1snY3VzdG9tJ10gPSAnQ3VzdG9tJm5ic3A7JzsKJGxhbmdbJzQwJ10gPSAnNDAgQ2FyYWN0w6hyZXMnOwokbGFuZ1snODAnXSA9ICc4MCBDYXJhY3TDqHJlcyc7CiRsYW5nWycxMDAnXSA9ICcxMDAgQ2FyYWN0w6hyZXMnOwokbGFuZ1snMTQwJ10gPSAnMTQwIENhcmFjdMOocmVzJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ1Byw6lmZXJlbmNlcyBzYXV2ZWdhcmTDqWVzJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdWb3MgcGFyYW3DqHRyZXMgZGUgQWNlRWRpdG9yIG9udCDDqXTDqSBzYXV2ZWdhcmTDqXMnOwokbGFuZ1snZnJvbnRlbmRzZXR0aW5nc3NhdmVkJ10gPSAnVm9zIHBhcmFtw6h0cmVzIEFjZUVkaXRvciBwb3VyIGxlIEZyb250ZW5kIG9udCDDqXTDqSBzYXV2ZWdhcmTDqXMnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdBY2VFZGl0b3IgaW5zdGFsbMOpIGF2ZWMgc3VjY8OocyAhIEFzc3VyZXotdm91cyBkZSBkw6lmaW5pciBsYSBwZXJtaXNzaW9uICJNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcyIsICJNb2RpZnkgVGVtcGxhdGVzIiBvdSAiQWNlRWRpdG9yIFVzZXIgUHJlZmVyZW5jZSIgcG91ciBhdXRvcmlzZXIgbFwndXRpbGlzYXRpb24gZHUgbW9kdWxlLic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTGUgbW9kdWxlIGEgw6l0w6kgZMOpc2luc3RhbGzDqSc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnXHUwMENBdGVzLXZvdXMgc1x1MDBGQnIoZSkgZGUgdm91bG9pciBkXHUwMEU5c2luc3RhbGxlciBjZSBtb2R1bGUgQWNlRWRpdG9yID8nOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICdNaXNzaW5nIFBlcm1pc3Npb24hLiBTZXQgIk1vZGlmeSBUZW1wbGF0ZXMiIG9yICJBY2VFZGl0b3IgVXNlciBQcmVmZXJlbmNlIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUuJzsKJGxhbmdbJ2hlbHBfYXZhaWxhYmxlX3RoZW1lcyddID0gJ1Row6htZXMgZGlzcG9uaWJsZXMnOwokbGFuZ1snaGVscF9hdmFpbGFibGVfbW9kZXMnXSA9ICdNb2RlcyBkaXNwb25pYmxlcyc7CiRsYW5nWydoZWxwX3BhcmFtX21vZGUnXSA9ICdpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj1cJ2RlZmF1bHRcJ308L2NvZGU+IG1vZHVsZSB0YWcuIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIG1vZGUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCiAgICA8bGk+amF2YXNjcmlwdDwvbGk+DQogICAgPGxpPnBsYWluPC9saT4NCiAgICA8bGk+c3ZnPC9saT4NCiAgICA8bGk+aHRtbDwvbGk+DQogICAgPGxpPmNzczwvbGk+DQogICAgPGxpPnNjc3M8L2xpPg0KICAgIDxsaT5jb2ZmZWU8L2xpPg0KICAgIDxsaT5qc29uPC9saT4NCiAgICA8bGk+cHl0aG9uPC9saT4NCiAgICA8bGk+cnVieTwvbGk+DQogICAgPGxpPnBlcmw8L2xpPg0KICAgIDxsaT5waHA8L2xpPg0KICAgIDxsaT5qYXZhPC9saT4NCiAgICA8bGk+Y3NoYXJwPC9saT4NCiAgICA8bGk+Y19jcHA8L2xpPg0KICAgIDxsaT5jbG9qdXJlPC9saT4NCiAgICA8bGk+Y29sZGZ1c2lvbjwvbGk+DQogICAgPGxpPmRpZmY8L2xpPg0KICAgIDxsaT5oYXhlPC9saT4NCiAgICA8bGk+bGF0ZXg8L2xpPg0KICAgIDxsaT5sdWE8L2xpPg0KICAgIDxsaT5tYXJrZG93bjwvbGk+DQogICAgPGxpPnBvd2Vyc2hlbGw8L2xpPg0KICAgIDxsaT5zcWw8L2xpPg0KICAgIDxsaT5wZ3NxbDwvbGk+DQogICAgPGxpPm9jYW1sPC9saT4NCiAgICA8bGk+dGV4dGlsZTwvbGk+DQogICAgPGxpPmdyb292eTwvbGk+DQogICAgPGxpPmdvbGFuZzwvbGk+DQogICAgPGxpPmpzeDwvbGk+DQogICAgPGxpPmxlc3M8L2xpPg0KICAgIDxsaT5saXF1aWQ8L2xpPg0KICAgIDxsaT5zY2FkPC9saT4NCiAgICA8bGk+c2g8L2xpPg0KICAgIDxsaT54cXVlcnk8L2xpPg0KICAgIDxsaT55YW1sPC9saT4NCiAgICA8bGk+c2NhbGE8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9wYXJhbV90aGVtZSddID0gJ2lzIHVzZWQgd2l0aGluIGEgcGFnZSB3aXRoIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPVwnZGVmYXVsdFwnfTwvY29kZT4gbW9kdWxlIHRhZy4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgdGhlbWUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCgk8bGk+Y2xvdWRzPC9saT4gDQoJPGxpPmNsb3Vkc19taWRuaWdodDwvbGk+IA0KCTxsaT5jb2JhbHQ8L2xpPiANCgk8bGk+Y3JpbXNvbl9lZGl0b3I8L2xpPg0KCTxsaT5kYXduPC9saT4NCgk8bGk+ZWNsaXBzZTwvbGk+DQoJPGxpPmlkbGVfZmluZ2VyczwvbGk+DQoJPGxpPmtyX3RoZW1lPC9saT4NCgk8bGk+bWVyYml2b3JlPC9saT4NCgk8bGk+bWVyYml2b3JlX3NvZnQ8L2xpPg0KCTxsaT5tb25vX2luZHVzdHJpYWw8L2xpPg0KCTxsaT5tb25va2FpPC9saT4NCgk8bGk+cGFzdGVsX29uX2Rhcms8L2xpPg0KCTxsaT5zb2xhcml6ZWRfZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9saWdodDwvbGk+DQoJPGxpPnRleHRtYXRlPC9saT4NCgk8bGk+dHdpbGlnaHQ8L2xpPg0KCTxsaT52aWJyYW50X2luazwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX3dpZHRoJ10gPSAnU3DDqWNpZmllIGxhIGxhcmdldXIgZGUgbGEgem9uZSBzw6lsZWN0aW9ubsOpZSBlbiBwaXhlbC4nOwokbGFuZ1snaGVscF9wYXJhbV9oZWlnaHQnXSA9ICdTcMOpY2lmaWUgbGEgaGF1dGV1ciBkZSBsYSB6b25lIHPDqWxlY3Rpb25uw6llICBlbiBwaXhlbC4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXZpZCddID0gJ0lEIGRlIGxcJ8OpbMOpbWVudCBxdWkgY29udGllbnQgdm90cmUgY29kZS4gVXRpbGlzZXogZGVzIElEIHVuaXF1ZXMgcG91ciBjaGFxdWUgYmxvYyBkZSBjb2RlLic7CiRsYW5nWydoZWxwX3BhcmFtX2h0bWxlbnRpdGllcyddID0gJ0NlIHBhcmFtw6h0cmUgdHJhZHVpcmEgdG91cyBsZXMgY2FyYWN0w6hyZXMgw6AgbFwnaW50w6lyaWV1ciBkdSBibG9jIHBsdWdpbiB7YWNlX2NvZGV9LCDDoCBsXCdhaWRlIGRlIGxhIGZvbmN0aW9uIFBIUCBodG1sZW50aXRpZXMuIFV0aWxpc2V6IGNldHRlIG9wdGlvbiBzaSB2b3VzIG5cJ3V0aWxpc2V6IHBhcyB1biDDqWRpdGV1ciBXWVNJV1lHIGV0IMOpY3JpdmV6IGxlIGNvZGUgYnJ1dCDDoCBsXCdpbnTDqXJpZXVyIGR1IGJsb2MgcGx1Z2luLic7CiRsYW5nWydoZWxwX2dlbmVyYWxfdGl0bGUnXSA9ICdHw6luw6lyYWwnOwokbGFuZ1snaGVscF9nZW5lcmFsX3RleHQnXSA9ICc8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+DQo8cD5BY2VFZGl0b3IgaXMgYSBTeW50YXhoaWdobGlnaHRlciBtb2R1bGUgdXNpbmcgPHN0cm9uZz5BY2U8L3N0cm9uZz4gYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC48YnIgLz4gDQpHb2FsIG9mIEFjZSBjb2RlIGVkaXRvciBncm91cCBpcyB0byBjcmVhdGUgYSB3ZWIgYmFzZWQgY29kZSBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS48YnIgLz4NCkl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW4gYW55IHdlYiBwYWdlIGFuZCBKYXZhU2NyaXB0IGFwcGxpY2F0aW9uLjxiciAvPiANCkFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20iPkNsb3VkOSBJREU8L2E+IGFuZCB0aGUgc3VjY2Vzc29yIG9mIHRoZSBNb3ppbGxhIFNreXdyaXRlciAoQmVzcGluKSBQcm9qZWN0LjwvcD4NCjxoMz5BY2UgaXMgaG9zdGVkIG9uIEdpdEh1YjwvaDM+DQo8cD5UaGUgQWNlIHNvdXJjZSBjb2RlIGlzIGhvc3RlZCBvbiBHaXRIdWIuIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBNb3ppbGxhIHRyaS1saWNlbnNlIChNUEwvR1BML0xHUEwpLjxiciAvPg0KVGhpcyBpcyB0aGUgc2FtZSBsaWNlbnNlIHVzZWQgYnkgRmlyZWZveC4gVGhpcyBsaWNlbnNlIGlzIGZyaWVuZGx5IHRvIGFsbCBraW5kcyBvZiBwcm9qZWN0cywgd2hldGhlciBvcGVuIHNvdXJjZSBvciBub3QuPGJyIC8+DQogVGFrZSBjaGFyZ2Ugb2YgeW91ciBlZGl0b3IgYW5kIGFkZCB5b3VyIGZhdm9yaXRlIGxhbmd1YWdlIGhpZ2hsaWdodGluZyBhbmQga2V5YmluZGluZ3MhPC9wPg0KPGgzPlVzaW5nIEFjZUVkaXRvciBNb2R1bGU8L2gzPg0KPHA+VXNpbmcgQWNlRWRpdG9yIE1vZHVsZSBpcyBzaW1wbGUuPGJyIC8+DQpBZnRlciBBY2VFZGl0b3Igd2FzIGluc3RhbGxlZCBnbyB0byAiTXkgUHJlZmVyZW5jZXMgwrsgVXNlciBQcmVmZXJlbmNlcyIgYW5kIGNob29zZSBBY2VFZGl0b3IgYXMgeW91ciBTeW50YXhoaWdobGlnaHRlciBvZiBjaG9pY2UgZnJvbSAiU2VsZWN0IHN5bnRheCBoaWdobGlnaHRlciB0byB1c2U6IiBEcm9wZG93bi48YnIgLz4NCk1ha2Ugc3VyZSB5b3UgaGF2ZSBcJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzXCcgUGVybXNpc3Npb24uPC9wPg0KPGgzPlNldHRpbmdzPC9oMz4NCjxwPllvdSBjYW4gY2hhbmdlIGRlZmF1bHQgU2V0dGluZ3MgYW5kIFRoZW1lcyBpbiAiRXh0ZW5zaW9ucyDCuyBBY2VFZGl0b3IiPC9wPic7CiRsYW5nWydoZWxwX2tleWJvYXJkc2hvcnRjdXRzX3RpdGxlJ10gPSAnUmFjY291cmNpcyBjbGF2aWVyJzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfY29udGVudCddID0gJzxoMz5EZWZhdWx0IEtleWJvYXJkIFNob3J0Y3V0czwvaDM+DQoNCjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBjZWxsc3BhY2luZz0iMCIgc3VtbWFyeT0iRGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHMiPg0KPHRoZWFkPjx0cj4NCjx0aD5QQyAoV2luZG93cy9MaW51eCk8L3RkPg0KPHRoPk1hYzwvdGQ+DQo8dGg+YWN0aW9uPC90ZD4NCjwvdHI+PC90aGVhZD4NCjx0Ym9keT4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtUmV0dXJuPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1SZXR1cm48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5mdWxsc2NyZWVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVM8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVM8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5wZXJmb3JtIHNhdmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtTDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmNlbnRlciBzZWxlY3Rpb248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtQWx0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Y29weSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgbGNhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUFsdC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtT3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Y29weSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1GPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1GPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+ZmluZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1LPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1HPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+ZmluZCBuZXh0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUs8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LUc8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5maW5kIHByZXZpb3VzPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+RG93bixDdHJsLU48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyBsaW5lIGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+VXAsQ3RybC1QPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gbGluZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1FbmQsQ3RybC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1FbmQsQ29tbWFuZC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+TGVmdCxDdHJsLUI8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUw8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtUmlnaHQsRW5kPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1SaWdodCxFbmQsQ3RybC1FPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkFsdC1MZWZ0LEhvbWU8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUxlZnQsSG9tZSxDdHJsLUE8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsaW5lIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1QYWdlRG93bixDdHJsLVY8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBwYWdlIGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPlBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlJpZ2h0LEN0cmwtRjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUhvbWUsQ3RybC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtSG9tZSxDb21tYW5kLVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gd29yZCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+VGFiPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+VGFiPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+aW5kZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPk9wdGlvbi1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+bW92ZSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5tb3ZlIGxpbmVzIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1UYWI8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1UYWI8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5vdXRkZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5JbnNlcnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5JbnNlcnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5vdmVyd3JpdGU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlBhZ2VEb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cGFnZWRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnBhZ2V1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1aLEN0cmwtWTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtWixDb21tYW5kLVk8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5yZWRvPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgbGluZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1LPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHRvIGxpbmVzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+QWx0LUJhY2tzcGFjZSxDdHJsLUFsdC1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5BbHQtRGVsZXRlPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtUjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtT3B0aW9uLUY8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5yZXBsYWNlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LVI8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LU9wdGlvbi1GPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+cmVwbGFjZSBhbGw8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtQTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtQTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBhbGw8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUVuZDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUVuZDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtSG9tZTwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBwYWdlIGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUVuZCxBbHQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkFsdC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkFsdC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHRvIGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtSG9tZSxBbHQtU2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHRvIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzIiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB3b3JkIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MSI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3Qgd29yZCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cyIj4NCjx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1PPC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+c3BsaXQgbGluZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSJyb3cxIj4NCjx0ZCBhbGlnbj0ibGVmdCI+Q3RybC03PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC03PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCI+dG9nZ2xlIGNvbW1lbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0icm93MiI+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiPnRyYW5zcG9zZSBsZXR0ZXJzPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9InJvdzEiPg0KPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVo8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVo8L3RkPg0KPHRkIGFsaWduPSJsZWZ0Ij51bmRvPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4nOwokbGFuZ1snaGVscF9mcm9udGVuZF90aXRsZSddID0gJ1NpdGUgV2ViIChGcm9udGVuZCknOwokbGFuZ1snaGVscF9mcm9udGVuZF9jb250ZW50J10gPSAnPHA+VGhpcyBNb2R1bGUgYW5kIEFjZSBTY3JpcHQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIEZyb250ZW5kIFN5bnRheGhpZ2hsaWdodGVyLjxiciAvPg0KVG8gbWFrZSBpdCB3b3JrIHlvdSBoYXZlIHRvIGluY2x1ZGUgalF1ZXJ5IEZyYW1ld29yaywgZm9yIGV4YW1wbGUgdXNpbmcgQ01TTVMge2Ntc19qcXVlcnl9IHRhZyBhbmQgYXMgd2VsbCBpbmNsdWRlIHtBY2VFZGl0b3J9IGluIHlvdXIgcGFnZSB0d2ljZS4gRmlyc3QgYWRkIHRoZSBtb2R1bGUgdGFnIGluIHlvdXIgPGhlYWQ+IHNlY3Rpb24gb2YgVGVtcGxhdGUgb3IgaW4gIlBhZ2UgU3BlY2lmaWMgTWV0ZGF0YSIgZmllbGQgb2YgeW91ciBDb250ZW50IHBhZ2UsIGxpa2Uge0FjZUVkaXRvciBhY3Rpb249XCdoZWFkXCd9IGFuZCBhbm90aGVyIGNhbGwgdG8gc3BlY2lmeSB3aGljaCBhcmVhIHNob3VsZCBiZSBoaWdobGlnaHRlZCwgZm9yIGV4YW1wbGUge0FjZUVkaXRvciBkaXZpZD1cJ2Zvb1wnfSwgd2hpY2ggd291bGQgdGFyZ2V0IGEgcGFnZSBlbGVtZW50IHdpdGggaWQgPGVtPmZvbzwvZW0+LjwvcD4NCjxoMz5TbyBob3cgZG8geW91IHVzZSBpdD88L2gzPg0KPHA+Rmlyc3QgaW5jbHVkZSBqUXVlcnkgYW5kIE1vZHVsZSB0YWcgaW4geW91ciBQYWdlIDxoZWFkPiBhcmVhLCBmb3IgZXhhbXBsZSBpbiAiUGFnZSBTcGVjaWZpYyBNZXRkYXRhIjo8L3A+DQoJPHByZT4NCgl7Y21zX2pxdWVyeX0NCgl7QWNlRWRpdG9yIGFjdGlvbj1cJ2hlYWRcJ30NCgk8L3ByZT4NCjxwPlRoaXMgaW5jbHVkZXMgbmVlZGVkIHNjcmlwdHMgZm9yIEFjZSBTeW50YXhoaWdobGlnaHRlciB0byB3b3JrLjxiciAvPg0KSW4gTW9kdWxlcyBBZG1pbiBpbnRlcmZhY2UgeW91IGNhbiBzZWxlY3QgZGVmYXVsdCBzZXR0aW5ncyBmb3IgeW91ciBcJ2hlYWRcJyBhY3Rpb24gb3IgdXNlIHBhcmFtZXRlciBtb2Rlcz1cJ2h0bWwsamF2YXNjcmlwdFwnIGFuZCB0aGVtZXM9XCd0ZXh0bWF0ZVwnIHdoaWNoIHdvdWxkIG92ZXJyaWRlIHNlbGVjdGVkIFByZWZlcmVuY2VzLjwvcD4NCjxwPk5vdyB3aGVuIHlvdSBoYXZlIG5lZWRlZCBzY3JpcHRzIGluY2x1ZGVkLCBvbmUgbW9yZSBNb2R1bGUgdGFnIGNhbGwgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSBpbiB5b3VyIENvbnRlbnQgRWRpdG9yIGFyZWEpIHRvIHNwZWNpZnkgd2hpY2ggYXJlYSBvZiB5b3VyIFBhZ2Ugc2hvdWxkIGJlIGhpZ2hsaWdodGVkLjwvcD4NCgk8cHJlPg0KCXtBY2VFZGl0b3IgZGl2aWQ9XCdzb21lLWlkXCd9DQoJPC9wcmU+DQo8cD5UaGlzIHRhZyBpbmNsdWRlcyBuZWVkZWQgU2NyaXB0IGFuZCBTdHlsZSB0aGF0IGlzIHVzZWQgdG8gSGlnaGxpZ2h0IHNlbGVjdGVkIGVsZW1lbnQgd2l0aCBzcGVjaWZpZWQgaWQuPGJyIC8+DQpBbGwgeW91IG5lZWQgdGhlbiBpcyB3cml0ZSB5b3VyIENvZGUgdGhhdCB5b3Ugd2FudCB0byBIaWdobGlnaHQgYW5kIHdyYXAgaXQgaW5zaWRlIGFuIGVsZW1lbiBsaWtlIDxkaXY+IHdpdGggc3BlY2lmaWVkIGlkLjwvcD4nOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvcic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnQWNlIEVkaXRvciBlciBldCBTeW50YXhoaWdobGlnaHRlciBtb2R1bCBtZWQgPHN0cm9uZz5BY2U8L3N0cm9uZz4gZW4gZnJpdHRzdMOlZW5kZSBrb2RlIGVkaXRvciBza3JldmV0IGkgSmF2YXNjcmlwdC4nOwokbGFuZ1snc2V0dGluZ3NfdGFiJ10gPSAnSW5uc3RpbGxpbmdlcic7CiRsYW5nWydmcm9udGVuZHNldHRpbmdzX3RhYiddID0gJ0Zyb250ZW5kIElubnN0aWxsaW5nZXInOwokbGFuZ1snZnJvbnRlbmRfc3ludGF4YXJlYV9zZXR0aW5ncyddID0gJ0Zyb250IEVuZCBTeW50YXggT21yw6VkZXQgSW5uc3RpbGxpbmdlcic7CiRsYW5nWydjb250ZW50X2Rlc2NyaXB0aW9uJ10gPSAnRGlzc2UgaW5uc3RpbGxpbmdlbmUgYnJ1a2VzIHRpbCBzdGFuZGFyZCBpbm5zdGlsbGluZ2VuZSB1dGhldmV0IHN5bnRha3Mgb21yw6VkZXQgbsOlciBkdSByaW5nZXIgPGNvZGU+e2FwcF9jb2RlIGRpdmlkZT1cJ2VkaXRvclwnfSB7L2FjZV9jb2RlfSA8L2NvZGU+IGJsb2trIHBsdWdpbiBpbm5lbmZvciBlbiBzaWRlLic7CiRsYW5nWyd3aWR0aF90aXRsZSddID0gJ0VkaXRvciBicmVkZGUnOwokbGFuZ1snaGVpZ2h0X3RpdGxlJ10gPSAnRWRpdG9yIGjDuHlkZSc7CiRsYW5nWydmcm9udGVuZF93aWR0aF90aXRsZSddID0gJ0Zyb250IEVuZCBTeW50YXggT21yw6VkZXQgYnJlZGRlJzsKJGxhbmdbJ2Zyb250ZW5kX2hlaWdodF90aXRsZSddID0gJ0Zyb250IEVuZCBTeW50YXggT21yw6VkZXQgaMO4eWRlJzsKJGxhbmdbJ3N5bnRheF9tb2RlJ10gPSAnVmVsZyBGcmVtaGV2ZXQgbW9kdXMnOwokbGFuZ1sndGhlbWVzJ10gPSAnVmVsZyBGcmVtaGV2ZXQgVGVtYSc7CiRsYW5nWydmb250X3NpemUnXSA9ICdGb250IFNpemUnOwokbGFuZ1snZnVsbF9saW5lJ10gPSAnRnVsbCBMaW5lJzsKJGxhbmdbJ2hpZ2hsaWdodF9hY3RpdmUnXSA9ICdIaWdobGlnaHQgQWN0aXZlIExpbmUnOwokbGFuZ1snc2hvd19pbnZpc2libGVzJ10gPSAnU2hvdyBJbnZpc2libGVzJzsKJGxhbmdbJ3BlcnNpc3RlbnRfaHNjcm9sbCddID0gJ1BlcnNpdGVudCBIU2Nyb2xsJzsKJGxhbmdbJ2tleV9iaW5kaW5nJ10gPSAnS2V5IEJpbmRpbmcnOwokbGFuZ1snc29mdF93cmFwJ10gPSAnU29mdCBXcmFwJzsKJGxhbmdbJ3Nob3dfZ3V0dGVyJ10gPSAnU2hvdyBHdXR0ZXInOwokbGFuZ1snd3JhcF9saW5lJ10gPSAnQnJ5dGUgTGluamVyJzsKJGxhbmdbJ3ByaW50X21hcmdpbiddID0gJ1Nob3cgUHJpbnQgTWFyZ2luJzsKJGxhbmdbJ3NvZnRfdGFiJ10gPSAnVXNlIFNvZnQgVGFiJzsKJGxhbmdbJ3RhYl9zaXplJ10gPSAnVmVsZyBGYW5lIHN0w7hycmVsc2UnOwokbGFuZ1snaGlnaGxpZ2h0X3NlbGVjdGVkJ10gPSAnSGlnaGxpZ2h0IHNlbGVjdGVkIHdvcmQnOwokbGFuZ1snZW5hYmxlX2JlaGF2aW9ycyddID0gJ0VuYWJsZSBCZWhhdmlvcnMnOwokbGFuZ1sndGVzdGFyZWF0ZXh0J10gPSAnUHJldmlldyc7CiRsYW5nWydhdXRvX2hlaWdodCddID0gJ0F1dG8gKEVkaXRvciBzdGFydGVyIG1lZCBmb3Jow6VuZHNpbm5zdGlsdCBow7h5ZGUgb2cgdmlsIGF1dG9tYXRpc2sgdXR2aWRlIGJhc2VydCBww6UgaW5uaG9sZCknOwokbGFuZ1snb24nXSA9ICdQw6UnOwokbGFuZ1snb2ZmJ10gPSAnQXYnOwokbGFuZ1snbGluZSddID0gJ0xpbmplJzsKJGxhbmdbJ2NvbHVtbiddID0gJ2tvbG9ubmUnOwokbGFuZ1snY3VycmVudF9saW5lJ10gPSAnR2plbGRlbmRlIExpbmplJzsKJGxhbmdbJ2N1cnJlbnRfdG9rZW4nXSA9ICdOw6V2w6ZyZW5kZSBTeW1ib2wnOwokbGFuZ1sndG90YWxfbGluZXMnXSA9ICdUb3RhbHQgbGluamVyJzsKJGxhbmdbJ2dvX2xpbmUnXSA9ICdHw6UgdGlsIGxpbmplJzsKJGxhbmdbJ2tleWJpbmRpbmdzJ10gPSAnVGFzdGViaW5kaW5nZXInOwokbGFuZ1snYWNlJ10gPSAnQWNlJzsKJGxhbmdbJ3ZpbSddID0gJ1ZpbSc7CiRsYW5nWydlbWFjcyddID0gJ0VNYWNzJzsKJGxhbmdbJ2Z1bGxfc2NyZWVuJ10gPSAnRnVsbCBTa2plcm0nOwokbGFuZ1snY19jcHAnXSA9ICdDKysnOwokbGFuZ1snY2xvanVyZSddID0gJ0Nsb2p1cmUnOwokbGFuZ1snY29mZmVlJ10gPSAnQ29mZmVlU2NyaXB0JzsKJGxhbmdbJ2NzaGFycCddID0gJ0MjJzsKJGxhbmdbJ2NzcyddID0gJ0NTUyc7CiRsYW5nWydncm9vdnknXSA9ICdHcm9vdnknOwokbGFuZ1snaHRtbCddID0gJ0hUTUwnOwokbGFuZ1snamF2YSddID0gJ0phdmEnOwokbGFuZ1snanNvbiddID0gJ0pTT04nOwokbGFuZ1snb2NhbWwnXSA9ICdPQ2FtbCc7CiRsYW5nWydwZXJsJ10gPSAnUGVybCc7CiRsYW5nWydwaHAnXSA9ICdQSFAnOwokbGFuZ1sncHl0aG9uJ10gPSAnUHl0aG9uJzsKJGxhbmdbJ3J1YnknXSA9ICdSdWJ5JzsKJGxhbmdbJ3NjYWxhJ10gPSAnU2NhbGEnOwokbGFuZ1snc2NzcyddID0gJ1NDU1MnOwokbGFuZ1snc3ZnJ10gPSAnU1ZHJzsKJGxhbmdbJ3RleHRpbGUnXSA9ICdUZXh0aWxlJzsKJGxhbmdbJ2Nsb3VkcyddID0gJ0Nsb3Vkcyc7CiRsYW5nWydjbG91ZHNfbWlkbmlnaHQnXSA9ICdDbG91ZHMgTWlkbmlnaHQnOwokbGFuZ1snY29iYWx0J10gPSAnQ29iYWx0JzsKJGxhbmdbJ2NyaW1zb25fZWRpdG9yJ10gPSAnQ3JpbXNvbiBFZGl0b3InOwokbGFuZ1snZGF3biddID0gJ0Rhd24nOwokbGFuZ1snZWNsaXBzZSddID0gJ0VjbGlwc2UnOwokbGFuZ1snaWRsZV9maW5nZXJzJ10gPSAnaWRsZUZpbmdlcnMnOwokbGFuZ1sna3JfdGhlbWUnXSA9ICdrclRoZW1lJzsKJGxhbmdbJ21lcmJpdm9yZSddID0gJ01lcmJpdm9yZSc7CiRsYW5nWydtZXJiaXZvcmVfc29mdCddID0gJ01lcmJvdmlvcmUgU29mdCc7CiRsYW5nWydtb25vX2luZHVzdHJpYWwnXSA9ICdNb25vIEluZHVzdHJpYWwnOwokbGFuZ1snbW9ub2thaSddID0gJ01vbm9rYWknOwokbGFuZ1sncGFzdGVsX29uX2RhcmsnXSA9ICdQYXN0ZWwgb24gZGFyayc7CiRsYW5nWydzb2xhcml6ZWRfZGFyayddID0gJ1NvbGFyaXplZCBEYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9saWdodCddID0gJ1NvbGFyaXplZCBMaWdodCc7CiRsYW5nWyd0ZXh0bWF0ZSddID0gJ1RleHRNYXRlJzsKJGxhbmdbJ3R3aWxpZ2h0J10gPSAnVHdpbGlnaHQnOwokbGFuZ1sndmlicmFudF9pbmsnXSA9ICdWaWJyYW50IEluayc7CiRsYW5nWydjdXN0b20nXSA9ICdDdXN0b20nOwokbGFuZ1snNDAnXSA9ICc0MCB0ZWduJzsKJGxhbmdbJzgwJ10gPSAnODAgdGVnbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdMYWdyZSBpbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdEaW5lIEFjZUVkaXRvciBpbm5zdGlsbGluZ2VyIGhhciBibGl0dCBsYWdyZXQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0FjZUVkaXRvciBTdWNjZXNzZnVsbHkgVW5pbnN0YWxsZWQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCBBY2VFZGl0b3I/IFRoaW5rIGFnYWluISc7CiRsYW5nWydoZWxwX2dlbmVyYWxfdGl0bGUnXSA9ICdHZW5lcmFsJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdBY2VTeW50YXggaXMgZWVuIFN5bnRheGhpZ2hsaWdodGVyIG1vZHVsZSBvcCBiYXNpcyB2YW4gPHN0cm9uZz5BY2U8L3N0cm9uZz4sIGVlbiBjb2RlIGVkaXRvciBnZXNjaHJldmVuIGluIEphdmFTY3JpcHQuJzsKJGxhbmdbJ2NvbnRlbnRfZGVzY3JpcHRpb24nXSA9ICdUaGVzZSBwcmVmZXJlbmNlcyBhcmUgdXNlZCBmb3IgZGVmYXVsdCBzZXR0aW5ncyBvZiBTeW50YXhoaWdobGlnaHRpbmcgYXJlYSB3aGVuIGNhbGxpbmcgPGNvZGU+e2FjZV9jb2RlIGRpdmlkPVwnZWRpdG9yXCd9PC9jb2RlPiB0YWcgd2l0aGluIGEgUGFnZS4nOwokbGFuZ1sndGFiX3NldHRpbmdzX2JhY2tlbmQnXSA9ICdCYWNrZW5kIEluc3RlbGxpbmdlbic7CiRsYW5nWyd0YWJfc2V0dGluZ3NfZnJvbnRlbmQnXSA9ICdGcm9udGVuZCBJbnN0ZWxsaW5nZW4nOwokbGFuZ1snYXV0b19oZWlnaHQnXSA9ICdBdXRvIChFZGl0b3Igc3RhcnRzIHdpdGggcHJlc2V0IGhlaWdodCBhbmQgd2lsbCBhdXRvIGV4cGFuZCBiYXNlZCBvbiBjb250ZW50KSc7CiRsYW5nWydlbmFibGVfYmVoYXZpb3JzJ10gPSAnU2NoYWtlbCBCZWhhdmlvcnMgaW4nOwokbGFuZ1snZm9udF9zaXplJ10gPSAnTGV0dGVyZ3Jvb3R0ZSc7CiRsYW5nWydmcm9udGVuZF9oZWlnaHRfdGl0bGUnXSA9ICdGcm9udGVuZCBTeW50YXggcnVpbXRlIGhvb2d0ZSc7CiRsYW5nWydmcm9udGVuZF93aWR0aF90aXRsZSddID0gJ0Zyb250ZW5kIFN5bnRheCBydWltdGUgYnJlZWR0ZSc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdWb2xsZWRpZ2UgbGlqbic7CiRsYW5nWydoZWlnaHRfdGl0bGUnXSA9ICdFZGl0b3IgaG9vZ3RlJzsKJGxhbmdbJ2hpZ2hsaWdodF9hY3RpdmUnXSA9ICdIaWdobGlnaHQgYWN0aWV2ZSByZWdlbCc7CiRsYW5nWydoaWdobGlnaHRfc2VsZWN0ZWQnXSA9ICdIaWdobGlnaHQgaGV0IGdlc2VsZWN0ZWVyZGUgd29vcmQnOwokbGFuZ1sna2V5X2JpbmRpbmcnXSA9ICdLZXkgQmluZGluZyc7CiRsYW5nWydwZXJzaXN0ZW50X2hzY3JvbGwnXSA9ICdQZXJzaXRlbnQgSFNjcm9sbCc7CiRsYW5nWydwcmludF9tYXJnaW4nXSA9ICdHZWVmIHByaW50bWFyZ2Ugd2Vlcic7CiRsYW5nWydzaG93X2d1dHRlciddID0gJ0dlZWYgR3V0dGVyIHdlZXInOwokbGFuZ1snc2hvd19pbnZpc2libGVzJ10gPSAnR2VlZiBvbnppY2h0YmFyZSB3ZWVyJzsKJGxhbmdbJ3NvZnRfdGFiJ10gPSAnR2VicnVpayBTb2Z0IFRhYic7CiRsYW5nWydzb2Z0X3dyYXAnXSA9ICdTb2Z0IFdyYXAnOwokbGFuZ1snc3ludGF4X21vZGUnXSA9ICdNb2R1cyc7CiRsYW5nWyd0YWJfc2l6ZSddID0gJ1NlbGVjdCBUYWIgc2l6ZSc7CiRsYW5nWyd0ZXN0YXJlYXRleHQnXSA9ICdWb29yYmVlbGQnOwokbGFuZ1sndGhlbWVzJ10gPSAnVGhlbWEnOwokbGFuZ1snd2lkdGhfdGl0bGUnXSA9ICdFZGl0b3IgYnJlZWR0ZSc7CiRsYW5nWyd3cmFwX2xpbmUnXSA9ICdXcmFwIExpbmVzJzsKJGxhbmdbJ2FjZSddID0gJ0FjZSc7CiRsYW5nWydjYXNlX3NlbnNpdGl2ZSddID0gJ0Nhc2UgU2Vuc2l0aXZlIFNlYXJjaCc7CiRsYW5nWydjb2x1bW4nXSA9ICdLb2xvbSc7CiRsYW5nWydjdXJyZW50X2xpbmUnXSA9ICdIdWlkaWdlIHJlZ2VsJzsKJGxhbmdbJ2N1cnJlbnRfdG9rZW4nXSA9ICdDdXJyZW50IHRva2VuJzsKJGxhbmdbJ2VtYWNzJ10gPSAnRU1hY3MnOwokbGFuZ1snZnVsbF9zY3JlZW4nXSA9ICdWb2xsZWRpZyBzY2hlcm0nOwokbGFuZ1snZ29fbGluZSddID0gJ0dhIG5hYXIgcmVnZWwnOwokbGFuZ1snaGlnaGxpZ2h0ZXJfb2ZmJ10gPSAnVHVybiBIaWdobGlnaHRlciBPZmYnOwokbGFuZ1snaGlnaGxpZ2h0ZXJfb24nXSA9ICdUdXJuIEhpZ2hsaWdodGVyIE9uJzsKJGxhbmdbJ2tleWJpbmRpbmdzJ10gPSAnU25lbHRvZXRzZW4nOwokbGFuZ1snbGluZSddID0gJ1JlZ2VsJzsKJGxhbmdbJ29mZiddID0gJ1VpdCc7CiRsYW5nWydvbiddID0gJ0Fhbic7CiRsYW5nWydyZWdleHAnXSA9ICdSZWd1bGFyIEV4cHJlc3Npb24gU2VhcmNoJzsKJGxhbmdbJ3JlcGxhY2Vfb3B0aW9uJ10gPSAnVmVydmFuZyc7CiRsYW5nWydyZXBsYWNlX3dpdGgnXSA9ICdSZXBsYWNlIHdpdGggKHByZXNzIEVudGVyKSc7CiRsYW5nWydyZXBsYWNlYWxsX29wdGlvbiddID0gJ1ZlcnZhbmcgYWxsZXMnOwokbGFuZ1snc2VhcmNoX2FueSddID0gJ1NlYXJjaCBBbnl0aGluZyc7CiRsYW5nWydzZWFyY2hfZG9jdW1lbnQnXSA9ICdTZWFyY2ggKHByZXNzIEVudGVyKSc7CiRsYW5nWydzZWFyY2hfb3B0aW9ucyddID0gJ1NlYXJjaCBPcHRpb25zJzsKJGxhbmdbJ3NlYXJjaF9zZXR0aW5ncyddID0gJ1NlYXJjaCBTZXR0aW5ncyc7CiRsYW5nWyd0b3RhbF9saW5lcyddID0gJ0FhbnRhbCByZWdlbHMnOwokbGFuZ1sndmltJ10gPSAnVmltJzsKJGxhbmdbJ3dob2xlX3dvcmQnXSA9ICdXaG9sZSBXb3JkIFNlYXJjaCc7CiRsYW5nWydhYmFwJ10gPSAnQUJBUCc7CiRsYW5nWydhY3Rpb25zY3JpcHQnXSA9ICdBY3Rpb25TY3JpcHQnOwokbGFuZ1snYWRhJ10gPSAnQURBJzsKJGxhbmdbJ2FzY2lpZG9jJ10gPSAnQXNjaWlEb2MnOwokbGFuZ1snYXNzZW1ibHlfeDg2J10gPSAnQXNzZW1ibHlfODYnOwokbGFuZ1snYXV0b2hvdGtleSddID0gJ0F1dG9Ib3RLZXknOwokbGFuZ1snYmF0Y2hmaWxlJ10gPSAnQmF0Y2hGaWxlJzsKJGxhbmdbJ2M5c2VhcmNoJ10gPSAnQzlTZWFyY2gnOwokbGFuZ1snY19jcHAnXSA9ICdDKysnOwokbGFuZ1snY2xvanVyZSddID0gJ0Nsb2p1cmUnOwokbGFuZ1snY29ib2wnXSA9ICdDb2JvbCc7CiRsYW5nWydjb2ZmZWUnXSA9ICdDb2ZmZWVTY3JpcHQnOwokbGFuZ1snY29sZGZ1c2lvbiddID0gJ0NvbGRmdXNpb24nOwokbGFuZ1snY3NoYXJwJ10gPSAnQyMnOwokbGFuZ1snY3NzJ10gPSAnQ1NTJzsKJGxhbmdbJ2N1cmx5J10gPSAnQ3VybHknOwokbGFuZ1snZCddID0gJ0QnOwokbGFuZ1snZGFydCddID0gJ0RhcnQnOwokbGFuZ1snZGlmZiddID0gJ0RpZmYnOwokbGFuZ1snZGphbmdvJ10gPSAnRGphbmdvJzsKJGxhbmdbJ2RvdCddID0gJ0RvdCc7CiRsYW5nWydlanMnXSA9ICdFSlMnOwokbGFuZ1snZXJsYW5nJ10gPSAnRXJsYW5nJzsKJGxhbmdbJ2ZvcnRoJ10gPSAnRm9ydGgnOwokbGFuZ1snZnRsJ10gPSAnRnJlZU1hcmtlcic7CiRsYW5nWydnbHNsJ10gPSAnR2xzbCc7CiRsYW5nWydnb2xhbmcnXSA9ICdHTyc7CiRsYW5nWydncm9vdnknXSA9ICdHcm9vdnknOwokbGFuZ1snaGFtbCddID0gJ0hBTUwnOwokbGFuZ1snaGFza2VsbCddID0gJ0hhc2tlbGwnOwokbGFuZ1snaGF4ZSddID0gJ0hheGUnOwokbGFuZ1snaHRtbCddID0gJ0hUTUwnOwokbGFuZ1snaHRtbF9jb21wbGV0aW9ucyddID0gJ0hUTUwgKENvbXBsZXRpb25zKSc7CiRsYW5nWydodG1sX3J1YnknXSA9ICdIVE1MIChSdWJ5KSc7CiRsYW5nWydpbmknXSA9ICdJbmknOwokbGFuZ1snamFkZSddID0gJ0phZGUnOwokbGFuZ1snamF2YSddID0gJ0phdmEnOwokbGFuZ1snamF2YXNjcmlwdCddID0gJ0phdmFTY3JpcHQnOwokbGFuZ1snanNvbiddID0gJ0pTT04nOwokbGFuZ1snanNvbmlxJ10gPSAnSlNPTmlxJzsKJGxhbmdbJ2pzcCddID0gJ0pTUCc7CiRsYW5nWydqc3gnXSA9ICdKU1gnOwokbGFuZ1snanVsaWEnXSA9ICdKdWxpYSc7CiRsYW5nWydsYXRleCddID0gJ0xhdGV4JzsKJGxhbmdbJ2xlc3MnXSA9ICdMRVNTJzsKJGxhbmdbJ2xpcXVpZCddID0gJ0xpcXVpZCc7CiRsYW5nWydsaXNwJ10gPSAnTGlzcCc7CiRsYW5nWydsaXZlc2NyaXB0J10gPSAnTGl2ZVNjcmlwdCc7CiRsYW5nWydsb2dpcWwnXSA9ICdMb2dpUUwnOwokbGFuZ1snbHNsJ10gPSAnTFNMJzsKJGxhbmdbJ2x1YSddID0gJ0x1YSc7CiRsYW5nWydsdWFodG1sJ10gPSAnTHVhSFRNTCc7CiRsYW5nWydsdWFwYWdlJ10gPSAnTHVhUGFnZSc7CiRsYW5nWydsdWNlbmUnXSA9ICdMdWNlbmUnOwokbGFuZ1snbWFrZWZpbGUnXSA9ICdNYWtlZmlsZSc7CiRsYW5nWydtYXJrZG93biddID0gJ01hcmtkb3duJzsKJGxhbmdbJ21hdGxhYiddID0gJ01BVExBQic7CiRsYW5nWydtdXNoY29kZSddID0gJ01VU0hDb2RlJzsKJGxhbmdbJ211c2hjb2RlX2hpZ2hfcnVsZXMnXSA9ICdNVVNIQ29kZSBIaWdoIFJ1bGVzJzsKJGxhbmdbJ215c3FsJ10gPSAnTVlTUUwnOwokbGFuZ1snbml4J10gPSAnTml4JzsKJGxhbmdbJ29iamVjdGl2ZWMnXSA9ICdPYmplY3RpdmUtQyc7CiRsYW5nWydvY2FtbCddID0gJ09DYW1sJzsKJGxhbmdbJ3Bhc2NhbCddID0gJ1Bhc2NhbCc7CiRsYW5nWydwZXJsJ10gPSAnUGVybCc7CiRsYW5nWydwZ3NxbCddID0gJ3BnU1FMJzsKJGxhbmdbJ3BocCddID0gJ1BIUCc7CiRsYW5nWydwbGFpbl90ZXh0J10gPSAnUGxhaW4gVGV4dCc7CiRsYW5nWydwb3dlcnNoZWxsJ10gPSAnUG93ZXJTaGVsbCc7CiRsYW5nWydwcm9sb2cnXSA9ICdQcm9sb2cnOwokbGFuZ1sncHJvcGVydGllcyddID0gJ1Byb3BlcnRpZXMnOwokbGFuZ1sncHJvdG9idWYnXSA9ICdQcm90b2J1Zic7CiRsYW5nWydweXRob24nXSA9ICdQeXRob24nOwokbGFuZ1snciddID0gJ1InOwokbGFuZ1sncmRvYyddID0gJ1JEb2MnOwokbGFuZ1sncmh0bWwnXSA9ICdSSFRNTCc7CiRsYW5nWydydWJ5J10gPSAnUnVieSc7CiRsYW5nWydydXN0J10gPSAnUnVzdCc7CiRsYW5nWydzYXNzJ10gPSAnU0FTUyc7CiRsYW5nWydzY2FkJ10gPSAnT3BlblNDQUQnOwokbGFuZ1snc2NhbGEnXSA9ICdTY2FsYSc7CiRsYW5nWydzY2hlbWUnXSA9ICdTY2hlbWUnOwokbGFuZ1snc2NzcyddID0gJ1NDU1MnOwokbGFuZ1snc2gnXSA9ICdTSCc7CiRsYW5nWydzbWFydHknXSA9ICdTbWFydHkgKEhUTUwpJzsKJGxhbmdbJ3NuaXBwZXRzJ10gPSAnc25pcHBldHMnOwokbGFuZ1snc3FsJ10gPSAnU1FMJzsKJGxhbmdbJ3N0eWx1cyddID0gJ1N0eWx1cyc7CiRsYW5nWydzdmcnXSA9ICdTVkcnOwokbGFuZ1sndGNsJ10gPSAnVGNsJzsKJGxhbmdbJ3RleCddID0gJ1RleCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWyd0ZXh0aWxlJ10gPSAnVGV4dGlsZSc7CiRsYW5nWyd0bXNuaXBwZXQnXSA9ICdUTVNuaXBwZXQnOwokbGFuZ1sndG9tbCddID0gJ1RvbWwnOwokbGFuZ1sndHdpZyddID0gJ1R3aWcnOwokbGFuZ1sndHlwZXNjcmlwdCddID0gJ1R5cGVzY3JpcHQnOwokbGFuZ1sndmJzY3JpcHQnXSA9ICdWQlNjcmlwdCc7CiRsYW5nWyd2ZWxvY2l0eSddID0gJ1ZlbG9jaXR5JzsKJGxhbmdbJ3Zlcmlsb2cnXSA9ICdWZXJpbG9nJzsKJGxhbmdbJ3htbCddID0gJ1hNTCc7CiRsYW5nWyd4cXVlcnknXSA9ICdYUXVlcnknOwokbGFuZ1sneWFtbCddID0gJ1lBTUwnOwokbGFuZ1snYW1iaWFuY2UnXSA9ICdBbWJpYW5jZSc7CiRsYW5nWydjaGFvcyddID0gJ0NoYW9zJzsKJGxhbmdbJ2Nocm9tZSddID0gJ0Nocm9tZSc7CiRsYW5nWydjbG91ZHMnXSA9ICdDbG91ZHMnOwokbGFuZ1snY2xvdWRzX21pZG5pZ2h0J10gPSAnQ2xvdWRzIE1pZG5pZ2h0JzsKJGxhbmdbJ2NvYmFsdCddID0gJ0NvYmFsdCc7CiRsYW5nWydjcmltc29uX2VkaXRvciddID0gJ0NyaW1zb24gRWRpdG9yJzsKJGxhbmdbJ2Rhd24nXSA9ICdEYXduJzsKJGxhbmdbJ2RyZWFtd2VhdmVyJ10gPSAnRHJlYW13ZWF2ZXInOwokbGFuZ1snZWNsaXBzZSddID0gJ0VjbGlwc2UnOwokbGFuZ1snZ2l0aHViJ10gPSAnR2l0SHViJzsKJGxhbmdbJ2lkbGVfZmluZ2VycyddID0gJ2lkbGVGaW5nZXJzJzsKJGxhbmdbJ2tyJ10gPSAna3JUaGVtZSc7CiRsYW5nWydrcl90aGVtZSddID0gJ2tyVGhlbWUnOwokbGFuZ1snbWVyYml2b3JlJ10gPSAnTWVyYml2b3JlJzsKJGxhbmdbJ21lcmJpdm9yZV9zb2Z0J10gPSAnTWVyYml2aW9yZSBTb2Z0JzsKJGxhbmdbJ21vbm9faW5kdXN0cmlhbCddID0gJ01vbm8gSW5kdXN0cmlhbCc7CiRsYW5nWydtb25va2FpJ10gPSAnTW9ub2thaSc7CiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gJ1Bhc3RlbCBvbiBkYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9kYXJrJ10gPSAnU29sYXJpemVkIERhcmsnOwokbGFuZ1snc29sYXJpemVkX2xpZ2h0J10gPSAnU29sYXJpemVkIExpZ2h0JzsKJGxhbmdbJ3Rlcm1pbmFsJ10gPSAnVGVybWluYWwnOwokbGFuZ1sndGV4dG1hdGUnXSA9ICdUZXh0TWF0ZSc7CiRsYW5nWyd0b21vcnJvdyddID0gJ1RvbW9ycm93JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0J10gPSAnVG9tb3Jyb3cgTmlnaHQnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfYmx1ZSddID0gJ1RvbW9ycm93IE5pZ2h0IEJsdWUnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfYnJpZ2h0J10gPSAnVG9tb3Jyb3cgTmlnaHQgQnJpZ2h0JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0X2VpZ2h0aWVzJ10gPSAnVG9tb3Jyb3cgTmlnaHQgRWlnaHRpZXMnOwokbGFuZ1sndHdpbGlnaHQnXSA9ICdUd2lsaWdodCc7CiRsYW5nWyd2aWJyYW50X2luayddID0gJ1ZpYnJhbnQgSW5rJzsKJGxhbmdbJ3hjb2RlJ10gPSAnWENvZGUnOwokbGFuZ1snY3VzdG9tJ10gPSAnR2VhdmFuY2VlcmQnOwokbGFuZ1snNDBjb2xzJ10gPSAnNDAga29sb21tZW4nOwokbGFuZ1snODBjb2xzJ10gPSAnODAga29sb21tZW4nOwokbGFuZ1snMTAwY29scyddID0gJzEwMCBrb2xvbW1lbic7CiRsYW5nWycxNDBjb2xzJ10gPSAnMTQwIGtvbG9tbWVuJzsKJGxhbmdbJ2Zyb250ZW5kc2V0dGluZ3NzYXZlZCddID0gJ1V3IGZyb250ZW5kIGluc3RlbGxpbmdlbiB6aWpuIG9wZ2VzbGFnZW4nOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICdNaXNzaW5nIFBlcm1pc3Npb24hLiBTZXQgIk1vZGlmeSBUZW1wbGF0ZXMiIG9yICJBY2VFZGl0b3IgVXNlciBQcmVmZXJlbmNlIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUuJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQWNlU3ludGF4IHN1Y2Nlc3ZvbCBnZcOvbnN0YWxsZWVyZCEgU3RlbCAiQmV3ZXJrIHNpdGV2b29ya2V1cmVuIiBwZXJtaXNzaWVzIGluIG9tIGRlemUgbW9kdWxlIHRlIGdlYnJ1aWtlbiEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0FjZVN5bnRheCBzdWNjZXN2b2wgZ2XDr25zdGFsbGVlcmQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ0VjaHQ/IFdlZXQgdSB6ZWtlciBkYXQgdSBBY2VTeW50YXggd2lsdCB2ZXJ3aWpkZXJlbj8gRGVuayBub2cgZWVucyBnb2VkIG5hISc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnVXcgQWNlU3ludGF4IGluc3RlbGxpbmdlbiB6aWpuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXZpZCddID0gJ2lkIHZhbiBoZXQgZWxlbWVudCBkYXQgdXcgY29kZSBiZXZhdC4gR2VicnVpayBlZW4gdW5pZWtlIGlkIHZvb3IgZWxrIGNvZGUgYmxvay4nOwokbGFuZ1snaGVscF9wYXJhbV9oZWlnaHQnXSA9ICdIb29ndGUgdmFuIGRlIFN5bnRheGhpZ2hsaWdodGVyIHJ1aW10ZSBpbiBwaXhlbHMuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faHRtbGVudGl0aWVzJ10gPSAnVGhpcyBwYXJhbWV0ZXIgd2lsbCB0cmFuc2xhdGUgYWxsIGNoYXJhY3RlcnMgaW5zaWRlIHthY2VfY29kZX0gYmxvY2sgcGx1Z2luIHRvIGVudGl0aWVzLCB1c2luZyBQSFAgPGEgaHJlZj0iaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9kZS9mdW5jdGlvbi5odG1sZW50aXRpZXMucGhwIiB0YXJnZXQ9Il9ibGFuayI+aHRtbGVudGl0aWVzPC9hPiBmdW5jdGlvbi4gVXNlIHRoaXMgaWYgeW91IGFyZSBub3QgdXNpbmcgYW55IFdZU0lXWUcgRWRpdG9yIGFuZCB3cml0ZSByYXcgY29kZSBpbnNpZGUgYmxvY2sgcGx1Z2luLic7CiRsYW5nWydoZWxwX3BhcmFtX21vZGUnXSA9ICdpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57YWNlX2NvZGUgbW9kZT1cJ2h0bWxcJ30gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgbW9kZSBmb3Igc3BlY2lmaWMgY29kZSBhcmVhLic7CiRsYW5nWydoZWxwX3BhcmFtX3RoZW1lJ10gPSAnaXMgdXNlZCB3aXRoaW4gYSBwYWdlIHdpdGggPGNvZGU+e2FjZV9jb2RlIHRoZW1lPVwndHdpbGlnaHRcJ30gey9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgdGhlbWUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4nOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ0JyZWVkdGUgdmFuIGRlIFN5bnRheGhpZ2hsaWdodGVyIHJ1aW10ZSBpbiBwaXhlbHMuJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/pt_PT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvcic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnQWNlRWRpdG9yICZlYWN1dGU7IHVtIG0mb2FjdXRlO2R1bG8gTWFyY2Fkb3IgZGUgU2ludGF4ZSAoU3ludGF4aGlnaGxpZ2h0ZXIpIHF1ZSB1c2EgbyA8c3Ryb25nPkFjZTwvc3Ryb25nPiB1bSBlZGl0b3IgYXV0Jm9hY3V0ZTtub21vIGRlIGMmb2FjdXRlO2RpZ28gZGVzZW52b2x2aWRvIGVtIEphdmFTY3JpcHQuJzsKJGxhbmdbJ3NldHRpbmdzX3RhYiddID0gJ1ByZWZlciZlY2lyYztuY2lhcyc7CiRsYW5nWydmcm9udGVuZHNldHRpbmdzX3RhYiddID0gJ1ByZWZlciZlY2lyYztuY2lhcyBGcm9udGVuZCc7CiRsYW5nWydmcm9udGVuZF9oZWFkX3NldHRpbmdzJ10gPSAnUHJlZmVyJmVjaXJjO25jaWFzIEZyb250ZW5kIEhlYWQnOwokbGFuZ1snZnJvbnRlbmRfc3ludGF4YXJlYV9zZXR0aW5ncyddID0gJ1ByZWZlciZlY2lyYztuY2lhcyBkYSAmQWFjdXRlO3JlYSBkZSBTaW50YXhlIGRvIEZyb250ZW5kJzsKJGxhbmdbJ2hlYWRfZGVzY3JpcHRpb24nXSA9ICdUaGVzZSBwcmVmZXJlbmNlcyBhcmUgdXNlZCBmb3IgZGVmYXVsdCBzZXR0aW5ncyBvZiBBY2Ugc2NyaXB0cyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiBwYWdlIDxjb2RlPjxoZWFkPjwvY29kZT4gd2hlbiBjYWxsaW5nIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPSYjMDM5O2hlYWQmIzAzOTt9PC9jb2RlPiBmcm9tIFBhZ2UgU3BlY2lmaWMgTWV0YWRhdGEgb3IgVGVtcGxhdGUuJzsKJGxhbmdbJ2NvbnRlbnRfZGVzY3JpcHRpb24nXSA9ICdUaGVzZSBwcmVmZXJlbmNlcyBhcmUgdXNlZCBmb3IgZGVmYXVsdCBzZXR0aW5ncyBvZiBTeW50YXhoaWdobGlnaHRpbmcgYXJlYSB3aGVuIGNhbGxpbmcgPGNvZGU+e0FjZUVkaXRvciBkaXZpZD0mIzAzOTtlZGl0b3ImIzAzOTt9PC9jb2RlPiB0YWcgd2l0aGluIGEgUGFnZS4nOwokbGFuZ1snc3ludGF4YXJlYWRlc2NyaXB0aW9uJ10gPSAnVGhlc2UgcHJlZmVyZW5jZXMgYXJlIHVzZWQgZm9yIGRlZmF1bHQgc2V0dGluZ3Mgb2YgQWNlIGJlaGF2aW9yIHdoZW4gY2FsbGluZyA8Y29kZT57QWNlRWRpdG9yIGRpdmlkPSYjMDM5O2ZvbyYjMDM5O308L2NvZGU+IGZyb20gYSBQYWdlIG9yIFRlbXBsYXRlJzsKJGxhbmdbJ2V4YW1wbGVfZG9jdW1lbnQnXSA9ICdEb2N1bWVudCc7CiRsYW5nWyd3aWR0aF90aXRsZSddID0gJ0VkaXRvciB3aWR0aCAoaW4gZW0pJzsKJGxhbmdbJ2hlaWdodF90aXRsZSddID0gJ0VkaXRvciBoZWlnaHQgKGluIGVtKSc7CiRsYW5nWydlbmFibGVfaWUnXSA9ICdFbmFibGUgSW50ZXJuZXQgRXhwbG9yZXInOwokbGFuZ1snZW5hYmxlX2llZGVzY3JpcHRpb24nXSA9ICdBY2UgU3ludGF4aGlnaGxpZ2h0ZXIgZG9lcyBub3QgYmVoYXZlIHByb3Blcmx5IHdoZW4gdXNpbmcgSW50ZXJuZXQgRXhwbG9yZXIuIEVuYWJsZSB0aGlzIGF0IHlvdXIgb3duIHJpc2shJzsKJGxhbmdbJ2Zyb250ZW5kX3dpZHRoX3RpdGxlJ10gPSAnRnJvbnRlbmQgU3ludGF4YXJlYSB3aWR0aCAoaW4gcHgpJzsKJGxhbmdbJ2Zyb250ZW5kX2hlaWdodF90aXRsZSddID0gJ0Zyb250ZW5kIFN5bnRheGFyZWEgaGVpZ2h0IChpbiBweCknOwokbGFuZ1snc3ludGF4X21vZGUnXSA9ICdNb2RlJzsKJGxhbmdbJ3RoZW1lcyddID0gJ1RoZW1lJzsKJGxhbmdbJ2ZvbnRfc2l6ZSddID0gJ0ZvbnQgU2l6ZSc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdGdWxsIExpbmUgU2VsZWN0aW9uJzsKJGxhbmdbJ2hpZ2hsaWdodF9hY3RpdmUnXSA9ICdIaWdobGlnaHQgQWN0aXZlIExpbmUnOwokbGFuZ1snc2hvd19pbnZpc2libGVzJ10gPSAnU2hvdyBJbnZpc2libGVzJzsKJGxhbmdbJ3BlcnNpc3RlbnRfaHNjcm9sbCddID0gJ1BlcnNpdGVudCBIU2Nyb2xsJzsKJGxhbmdbJ2tleV9iaW5kaW5nJ10gPSAnS2V5IEJpbmRpbmcnOwokbGFuZ1snc29mdF93cmFwJ10gPSAnU29mdCBXcmFwJzsKJGxhbmdbJ3Nob3dfZ3V0dGVyJ10gPSAnU2hvdyBHdXR0ZXInOwokbGFuZ1sncHJpbnRfbWFyZ2luJ10gPSAnU2hvdyBQcmludCBNYXJnaW4nOwokbGFuZ1snc29mdF90YWInXSA9ICdVc2UgU29mdCBUYWInOwokbGFuZ1snaGlnaGxpZ2h0X3NlbGVjdGVkJ10gPSAnSGlnaGxpZ2h0IHNlbGVjdGVkIHdvcmQnOwokbGFuZ1snZW5hYmxlX2JlaGF2aW9ycyddID0gJ0VuYWJsZSBCZWhhdmlvcnMnOwokbGFuZ1sndGVzdGFyZWF0ZXh0J10gPSAnUHJldmlldyc7CiRsYW5nWydvbiddID0gJ09uJzsKJGxhbmdbJ29mZiddID0gJ09mZic7CiRsYW5nWydsaW5lJ10gPSAnTGluZSc7CiRsYW5nWydjb2x1bW4nXSA9ICdDb2x1bW4nOwokbGFuZ1snY3VycmVudF9saW5lJ10gPSAnQ3VycmVudCBsaW5lJzsKJGxhbmdbJ3RvdGFsX2xpbmVzJ10gPSAnVG90YWwgbGluZXMnOwokbGFuZ1snZ29fbGluZSddID0gJ0dvIHRvIGxpbmUnOwokbGFuZ1sna2V5YmluZGluZ3MnXSA9ICdLZXliaW5kaW5ncyc7CiRsYW5nWydhY2UnXSA9ICdBY2UnOwokbGFuZ1sndmltJ10gPSAnVmltJzsKJGxhbmdbJ2VtYWNzJ10gPSAnRU1hY3MnOwokbGFuZ1snanMnXSA9ICdKYXZhU2NyaXB0JzsKJGxhbmdbJ3BsYWluJ10gPSAnUGxhaW4gVGV4dCc7CiRsYW5nWydzdmcnXSA9ICdTVkcnOwokbGFuZ1snaHRtbCddID0gJ0hUTUwnOwokbGFuZ1snY3NzJ10gPSAnQ1NTJzsKJGxhbmdbJ3Njc3MnXSA9ICdTQ1NTJzsKJGxhbmdbJ2NvZmZlZSddID0gJ0NvZmZlZVNjcmlwdCc7CiRsYW5nWydqc29uJ10gPSAnSlNPTic7CiRsYW5nWydweXRob24nXSA9ICdQeXRob24nOwokbGFuZ1sncnVieSddID0gJ1J1YnknOwokbGFuZ1sncGVybCddID0gJ1BlcmwnOwokbGFuZ1sncGhwJ10gPSAnUEhQJzsKJGxhbmdbJ2phdmEnXSA9ICdKYXZhJzsKJGxhbmdbJ2NzaGFycCddID0gJ0MjJzsKJGxhbmdbJ2NfY3BwJ10gPSAnQysrJzsKJGxhbmdbJ2Nsb2p1cmUnXSA9ICdDbG9qdXJlJzsKJGxhbmdbJ2NvbGRmdXNpb24nXSA9ICdDb2xkZnVzaW9uJzsKJGxhbmdbJ2hheGUnXSA9ICdIYXhlJzsKJGxhbmdbJ2xhdGV4J10gPSAnTGF0ZXgnOwokbGFuZ1snbHVhJ10gPSAnTHVhJzsKJGxhbmdbJ21hcmtkb3duJ10gPSAnTWFya2Rvd24nOwokbGFuZ1sncG93ZXJzaGVsbCddID0gJ1Bvd2VyU2hlbGwnOwokbGFuZ1snc3FsJ10gPSAnU1FMJzsKJGxhbmdbJ3Bnc3FsJ10gPSAncGdTUUwnOwokbGFuZ1snb2NhbWwnXSA9ICdPQ2FtbCc7CiRsYW5nWyd0ZXh0aWxlJ10gPSAnVGV4dGlsZSc7CiRsYW5nWydncm9vdnknXSA9ICdHcm9vdnknOwokbGFuZ1snc2NhbGEnXSA9ICdTY2FsYSc7CiRsYW5nWydkaWZmJ10gPSAnRGlmZic7CiRsYW5nWydnb2xhbmcnXSA9ICdHTyc7CiRsYW5nWyd5YW1sJ10gPSAnWUFNTCc7CiRsYW5nWydsZXNzJ10gPSAnTEVTUyc7CiRsYW5nWydzY2FkJ10gPSAnT3BlblNDQUQnOwokbGFuZ1snc2gnXSA9ICdTSCc7CiRsYW5nWyd4cXVlcnknXSA9ICdYUXVlcnknOwokbGFuZ1snbGlxdWlkJ10gPSAnTGlxdWlkJzsKJGxhbmdbJ2pzeCddID0gJ0pTWCc7CiRsYW5nWydjbG91ZHMnXSA9ICdDbG91ZHMnOwokbGFuZ1snY2hyb21lJ10gPSAnQ2hyb21lJzsKJGxhbmdbJ2Nsb3Vkc19taWRuaWdodCddID0gJ0Nsb3VkcyBNaWRuaWdodCc7CiRsYW5nWydjb2JhbHQnXSA9ICdDb2JhbHQnOwokbGFuZ1snY3JpbXNvbl9lZGl0b3InXSA9ICdDcmltc29uIEVkaXRvcic7CiRsYW5nWydkYXduJ10gPSAnRGF3bic7CiRsYW5nWydkcmVhbXdlYXZlciddID0gJ0RyZWFtd2VhdmVyJzsKJGxhbmdbJ2VjbGlwc2UnXSA9ICdFY2xpcHNlJzsKJGxhbmdbJ2lkbGVfZmluZ2VycyddID0gJ2lkbGVGaW5nZXJzJzsKJGxhbmdbJ2tyX3RoZW1lJ10gPSAna3JUaGVtZSc7CiRsYW5nWydtZXJiaXZvcmUnXSA9ICdNZXJiaXZvcmUnOwokbGFuZ1snbWVyYml2b3JlX3NvZnQnXSA9ICdNZXJiaXZvcmUgU29mdCc7CiRsYW5nWydtb25vX2luZHVzdHJpYWwnXSA9ICdNb25vIEluZHVzdHJpYWwnOwokbGFuZ1snbW9ub2thaSddID0gJ01vbm9rYWknOwokbGFuZ1sncGFzdGVsX29uX2RhcmsnXSA9ICdQYXN0ZWwgb24gZGFyayc7CiRsYW5nWydzb2xhcml6ZWRfZGFyayddID0gJ1NvbGFyaXplZCBEYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9saWdodCddID0gJ1NvbGFyaXplZCBMaWdodCc7CiRsYW5nWyd0ZXh0bWF0ZSddID0gJ1RleHRNYXRlJzsKJGxhbmdbJ3RvbW9ycm93J10gPSAnVG9tb3Jyb3cnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHQnXSA9ICdUb21vcnJvdyBOaWdodCc7CiRsYW5nWyd0b21vcnJvd19uaWdodF9icmlnaHQnXSA9ICdUb21vcnJvdyBOaWdodCBCcmlnaHQnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfYmx1ZSddID0gJ1RvbW9ycm93IE5pZ2h0IEJsdWUnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMnXSA9ICdUb21vcnJvdyBOaWdodCBFaWdodGllcyc7CiRsYW5nWyd0d2lsaWdodCddID0gJ1R3aWxpZ2h0JzsKJGxhbmdbJ3ZpYnJhbnRfaW5rJ10gPSAnVmlicmFudCBJbmsnOwokbGFuZ1snY3VzdG9tJ10gPSAnQ3VzdG9tJzsKJGxhbmdbJzQwJ10gPSAnNDAgQ2hhcnMnOwokbGFuZ1snODAnXSA9ICc4MCBDaGFycyc7CiRsYW5nWycxMDAnXSA9ICcxMDAgQ2hhcnMnOwokbGFuZ1snMTQwJ10gPSAnMTQwIENoYXJzJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ1NhdmUgUHJlZmVyZW5jZXMnOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ1lvdXIgQWNlRWRpdG9yIHNldHRpbmdzIGhhdmUgYmVlbiBzYXZlZCc7CiRsYW5nWydmcm9udGVuZHNldHRpbmdzc2F2ZWQnXSA9ICdZb3VyIEFjZUVkaXRvciBGcm9udGVuZCBzZXR0aW5ncyBoYXZlIGJlZW4gc2F2ZWQnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdBY2VFZGl0b3IgU3VjY2Vzc2Z1bGx5IEluc3RhbGxlZCEgU2V0ICZxdW90O01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJnF1b3Q7LCAmcXVvdDtNb2RpZnkgVGVtcGxhdGVzJnF1b3Q7IG9yICZxdW90O0FjZUVkaXRvciBVc2VyIFByZWZlcmVuY2UmcXVvdDsgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWNlRWRpdG9yIFN1Y2Nlc3NmdWxseSBVbmluc3RhbGxlZCc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIEFjZUVkaXRvcj8gVGhpbmsgYWdhaW4hJzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnTWlzc2luZyBQZXJtaXNzaW9uIS4gU2V0ICZxdW90O01vZGlmeSBUZW1wbGF0ZXMmcXVvdDsgb3IgJnF1b3Q7QWNlRWRpdG9yIFVzZXIgUHJlZmVyZW5jZSZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUuJzsKJGxhbmdbJ2hlbHBfcGFyYW1fYWN0aW9uJ10gPSAnaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiBvZiBNb2R1bGUgdGFnLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICYjMDM5O2RlZmF1bHQmIzAzOTsgYW5kICYjMDM5O2hlYWQmIzAzOTsuIEJvdGggYXJlIG5lZWRlZCBmb3IgY29ycmVjdCBGcm9udGVuZCBTeW50YXhoaWdobGlnaHRpbmcgZnVuY3Rpb24uIDxiciAvPlBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQoJPGxpPmhlYWQ8L2xpPg0KCTxsaT5kZWZhdWx0PC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfcGFyYW1fbW9kZXMnXSA9ICdpcyB1c2VkIHdpdGggPGNvZGU+e0FjZUVkaXRvciBhY3Rpb249JiMwMzk7aGVhZCYjMDM5O308L2NvZGU+LiBZb3UgY2FuIGluY2x1ZGUgbXVsdGlwbGUgY29tbWEgc2VwYXJhdGVkICYjMDM5O21vZGVzJiMwMzk7IHRoYXQgeW91IHdpbGwgYmUgdXNpbmcgb24geW91ciB3ZWJzaXRlLiBUaGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyIDxoZWFkPiBvZiBUZW1wbGF0ZSBvciBQYWdlIHNwZWNpZmljIE1ldGFkYXRhLiBUaGlzIHdpbGwgb3ZlcnJpZGUgeW91IFByZWZlcmVuY2VzIHNlbGVjdGVkIGluIE1vZHVsZSBBZG1pbiBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KICAgIDxsaT5qYXZhc2NyaXB0PC9saT4NCiAgICA8bGk+cGxhaW48L2xpPg0KICAgIDxsaT5zdmc8L2xpPg0KICAgIDxsaT5odG1sPC9saT4NCiAgICA8bGk+Y3NzPC9saT4NCiAgICA8bGk+c2NzczwvbGk+DQogICAgPGxpPmNvZmZlZTwvbGk+DQogICAgPGxpPmpzb248L2xpPg0KICAgIDxsaT5weXRob248L2xpPg0KICAgIDxsaT5ydWJ5PC9saT4NCiAgICA8bGk+cGVybDwvbGk+DQogICAgPGxpPnBocDwvbGk+DQogICAgPGxpPmphdmE8L2xpPg0KICAgIDxsaT5jc2hhcnA8L2xpPg0KICAgIDxsaT5jX2NwcDwvbGk+DQogICAgPGxpPmNsb2p1cmU8L2xpPg0KICAgIDxsaT5jb2xkZnVzaW9uPC9saT4NCiAgICA8bGk+ZGlmZjwvbGk+DQogICAgPGxpPmhheGU8L2xpPg0KICAgIDxsaT5sYXRleDwvbGk+DQogICAgPGxpPmx1YTwvbGk+DQogICAgPGxpPm1hcmtkb3duPC9saT4NCiAgICA8bGk+cG93ZXJzaGVsbDwvbGk+DQogICAgPGxpPnNxbDwvbGk+DQogICAgPGxpPnBnc3FsPC9saT4NCiAgICA8bGk+b2NhbWw8L2xpPg0KICAgIDxsaT50ZXh0aWxlPC9saT4NCiAgICA8bGk+Z3Jvb3Z5PC9saT4NCiAgICA8bGk+Z29sYW5nPC9saT4NCiAgICA8bGk+anN4PC9saT4NCiAgICA8bGk+bGVzczwvbGk+DQogICAgPGxpPmxpcXVpZDwvbGk+DQogICAgPGxpPnNjYWQ8L2xpPg0KICAgIDxsaT5zaDwvbGk+DQogICAgPGxpPnhxdWVyeTwvbGk+DQogICAgPGxpPnlhbWw8L2xpPg0KICAgIDxsaT5zY2FsYTwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX3RoZW1lcyddID0gJ2lzIHVzZWQgd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0mIzAzOTtoZWFkJiMwMzk7fTwvY29kZT4uIFlvdSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgJiMwMzk7dGhlbWVzJiMwMzk7IHRoYXQgeW91IHdpbGwgYmUgdXNpbmcgb24geW91ciB3ZWJzaXRlLiBUaGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyIDxoZWFkPiBvZiBUZW1wbGF0ZSBvciBQYWdlIHNwZWNpZmljIE1ldGFkYXRhLiBUaGlzIHdpbGwgb3ZlcnJpZGUgeW91IFByZWZlcmVuY2VzIHNlbGVjdGVkIGluIE1vZHVsZSBBZG1pbiBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KICAgIDxsaT5jaHJvbWU8L2xpPg0KICAgIDxsaT5jbG91ZHM8L2xpPg0KICAgIDxsaT5jbG91ZHNfbWlkbmlnaHQ8L2xpPg0KICAgIDxsaT5jb2JhbHQ8L2xpPg0KICAgIDxsaT5jcmltc29uX2VkaXRvcjwvbGk+DQogICAgPGxpPmRhd248L2xpPg0KICAgIDxsaT5kcmVhbXdlYXZlcjwvbGk+DQogICAgPGxpPmVjbGlwc2U8L2xpPg0KICAgIDxsaT5pZGxlX2ZpbmdlcnMNCiAgICA8bGk+a3JfdGhlbWU8L2xpPg0KICAgIDxsaT5tZXJiaXZvcmU8L2xpPg0KICAgIDxsaT5tZXJiaXZvcmVfc29mdDwvbGk+DQogICAgPGxpPm1vbm9faW5kdXN0cmlhbDwvbGk+DQogICAgPGxpPm1vbm9rYWk8L2xpPg0KICAgIDxsaT5wYXN0ZWxfb25fZGFyazwvbGk+DQogICAgPGxpPnNvbGFyaXplZF9kYXJrPC9saT4NCiAgICA8bGk+c29sYXJpemVkX2xpZ2h0PC9saT4NCiAgICA8bGk+dGV4dG1hdGU8L2xpPg0KICAgIDxsaT50b21vcnJvdzwvbGk+DQogICAgPGxpPnRvbW9ycm93X25pZ2h0PC9saT4NCiAgICA8bGk+dG9tb3Jyb3dfbmlnaHRfYmx1ZTwvbGk+DQogICAgPGxpPnRvbW9ycm93X25pZ2h0X2JyaWdodDwvbGk+DQogICAgPGxpPnRvbW9ycm93X25pZ2h0X2VpZ2h0aWVzPC9saT4NCiAgICA8bGk+dHdpbGlnaHQ8L2xpPg0KICAgIDxsaT52aWJyYW50X2luazwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX21vZGUnXSA9ICdpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0mIzAzOTtkZWZhdWx0JiMwMzk7fTwvY29kZT4gbW9kdWxlIHRhZy4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgbW9kZSBmb3Igc3BlY2lmaWMgY29kZSBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KICAgIDxsaT5qYXZhc2NyaXB0PC9saT4NCiAgICA8bGk+cGxhaW48L2xpPg0KICAgIDxsaT5zdmc8L2xpPg0KICAgIDxsaT5odG1sPC9saT4NCiAgICA8bGk+Y3NzPC9saT4NCiAgICA8bGk+c2NzczwvbGk+DQogICAgPGxpPmNvZmZlZTwvbGk+DQogICAgPGxpPmpzb248L2xpPg0KICAgIDxsaT5weXRob248L2xpPg0KICAgIDxsaT5ydWJ5PC9saT4NCiAgICA8bGk+cGVybDwvbGk+DQogICAgPGxpPnBocDwvbGk+DQogICAgPGxpPmphdmE8L2xpPg0KICAgIDxsaT5jc2hhcnA8L2xpPg0KICAgIDxsaT5jX2NwcDwvbGk+DQogICAgPGxpPmNsb2p1cmU8L2xpPg0KICAgIDxsaT5jb2xkZnVzaW9uPC9saT4NCiAgICA8bGk+ZGlmZjwvbGk+DQogICAgPGxpPmhheGU8L2xpPg0KICAgIDxsaT5sYXRleDwvbGk+DQogICAgPGxpPmx1YTwvbGk+DQogICAgPGxpPm1hcmtkb3duPC9saT4NCiAgICA8bGk+cG93ZXJzaGVsbDwvbGk+DQogICAgPGxpPnNxbDwvbGk+DQogICAgPGxpPnBnc3FsPC9saT4NCiAgICA8bGk+b2NhbWw8L2xpPg0KICAgIDxsaT50ZXh0aWxlPC9saT4NCiAgICA8bGk+Z3Jvb3Z5PC9saT4NCiAgICA8bGk+Z29sYW5nPC9saT4NCiAgICA8bGk+anN4PC9saT4NCiAgICA8bGk+bGVzczwvbGk+DQogICAgPGxpPmxpcXVpZDwvbGk+DQogICAgPGxpPnNjYWQ8L2xpPg0KICAgIDxsaT5zaDwvbGk+DQogICAgPGxpPnhxdWVyeTwvbGk+DQogICAgPGxpPnlhbWw8L2xpPg0KICAgIDxsaT5zY2FsYTwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX3RoZW1lJ10gPSAnaXMgdXNlZCB3aXRoaW4gYSBwYWdlIHdpdGggPGNvZGU+e0FjZUVkaXRvciBhY3Rpb249JiMwMzk7ZGVmYXVsdCYjMDM5O308L2NvZGU+IG1vZHVsZSB0YWcuIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIHRoZW1lIGZvciBzcGVjaWZpYyBjb2RlIGFyZWEuIDxiciAvPlBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQoJPGxpPmNsb3VkczwvbGk+IA0KCTxsaT5jbG91ZHNfbWlkbmlnaHQ8L2xpPiANCgk8bGk+Y29iYWx0PC9saT4gDQoJPGxpPmNyaW1zb25fZWRpdG9yPC9saT4NCgk8bGk+ZGF3bjwvbGk+DQoJPGxpPmVjbGlwc2U8L2xpPg0KCTxsaT5pZGxlX2ZpbmdlcnM8L2xpPg0KCTxsaT5rcl90aGVtZTwvbGk+DQoJPGxpPm1lcmJpdm9yZTwvbGk+DQoJPGxpPm1lcmJpdm9yZV9zb2Z0PC9saT4NCgk8bGk+bW9ub19pbmR1c3RyaWFsPC9saT4NCgk8bGk+bW9ub2thaTwvbGk+DQoJPGxpPnBhc3RlbF9vbl9kYXJrPC9saT4NCgk8bGk+c29sYXJpemVkX2Rhcms8L2xpPg0KCTxsaT5zb2xhcml6ZWRfbGlnaHQ8L2xpPg0KCTxsaT50ZXh0bWF0ZTwvbGk+DQoJPGxpPnR3aWxpZ2h0PC9saT4NCgk8bGk+dmlicmFudF9pbms8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9wYXJhbV93aWR0aCddID0gJ3NwZWNpZmllcyB3aWR0aCBvZiBTeW50YXhoaWdobGlnaHRlciBhcmVhIGluIHBpeGVsLic7CiRsYW5nWydoZWxwX3BhcmFtX2hlaWdodCddID0gJ3NwZWNpZmllcyBoZWlnaHQgb2YgU3ludGF4aGlnaGxpZ2h0ZXIgYXJlYSBpbiBwaXhlbC4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXZpZCddID0gJ2lkIG9mIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcgeW91ciBjb2RlLiBVc2UgdW5pcXVlIGlkIGZvciBlYWNoIGNvZGUgY2h1bmNrLic7CiRsYW5nWydoZWxwX2dlbmVyYWxfdGl0bGUnXSA9ICdHZW5lcmFsJzsKJGxhbmdbJ2hlbHBfZ2VuZXJhbF90ZXh0J10gPSAnPGgzPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L2gzPg0KPHA+QWNlRWRpdG9yIGlzIGEgU3ludGF4aGlnaGxpZ2h0ZXIgbW9kdWxlIHVzaW5nIDxzdHJvbmc+QWNlPC9zdHJvbmc+IGEgc3RhbmRhbG9uZSBjb2RlIGVkaXRvciB3cml0dGVuIGluIEphdmFTY3JpcHQuPGJyIC8+IA0KR29hbCBvZiBBY2UgY29kZSBlZGl0b3IgZ3JvdXAgaXMgdG8gY3JlYXRlIGEgd2ViIGJhc2VkIGNvZGUgZWRpdG9yIHRoYXQgbWF0Y2hlcyBhbmQgZXh0ZW5kcyB0aGUgZmVhdHVyZXMsIHVzYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgZXhpc3RpbmcgbmF0aXZlIGVkaXRvcnMgc3VjaCBhcyBUZXh0TWF0ZSwgVmltIG9yIEVjbGlwc2UuPGJyIC8+DQpJdCBjYW4gYmUgZWFzaWx5IGVtYmVkZGVkIGluIGFueSB3ZWIgcGFnZSBhbmQgSmF2YVNjcmlwdCBhcHBsaWNhdGlvbi48YnIgLz4gDQpBY2UgaXMgZGV2ZWxvcGVkIGFzIHRoZSBwcmltYXJ5IGVkaXRvciBmb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5jbG91ZDlpZGUuY29tIj5DbG91ZDkgSURFPC9hPiBhbmQgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgTW96aWxsYSBTa3l3cml0ZXIgKEJlc3BpbikgUHJvamVjdC48L3A+DQo8aDM+QWNlIGlzIGhvc3RlZCBvbiBHaXRIdWI8L2gzPg0KPHA+VGhlIEFjZSBzb3VyY2UgY29kZSBpcyBob3N0ZWQgb24gR2l0SHViLiBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTW96aWxsYSB0cmktbGljZW5zZSAoTVBML0dQTC9MR1BMKS48YnIgLz4NClRoaXMgaXMgdGhlIHNhbWUgbGljZW5zZSB1c2VkIGJ5IEZpcmVmb3guIFRoaXMgbGljZW5zZSBpcyBmcmllbmRseSB0byBhbGwga2luZHMgb2YgcHJvamVjdHMsIHdoZXRoZXIgb3BlbiBzb3VyY2Ugb3Igbm90LjxiciAvPg0KIFRha2UgY2hhcmdlIG9mIHlvdXIgZWRpdG9yIGFuZCBhZGQgeW91ciBmYXZvcml0ZSBsYW5ndWFnZSBoaWdobGlnaHRpbmcgYW5kIGtleWJpbmRpbmdzITwvcD4NCjxoMz5Vc2luZyBBY2VFZGl0b3IgTW9kdWxlPC9oMz4NCjxwPlVzaW5nIEFjZUVkaXRvciBNb2R1bGUgaXMgc2ltcGxlLjxiciAvPg0KQWZ0ZXIgQWNlRWRpdG9yIHdhcyBpbnN0YWxsZWQgZ28gdG8gJnF1b3Q7TXkgUHJlZmVyZW5jZXMgJnJhcXVvOyBVc2VyIFByZWZlcmVuY2VzJnF1b3Q7IGFuZCBjaG9vc2UgQWNlRWRpdG9yIGFzIHlvdXIgU3ludGF4aGlnaGxpZ2h0ZXIgb2YgY2hvaWNlIGZyb20gJnF1b3Q7U2VsZWN0IHN5bnRheCBoaWdobGlnaHRlciB0byB1c2U6JnF1b3Q7IERyb3Bkb3duLjxiciAvPg0KTWFrZSBzdXJlIHlvdSBoYXZlICYjMDM5O01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJiMwMzk7IFBlcm1zaXNzaW9uLjwvcD4NCjxoMz5TZXR0aW5nczwvaDM+DQo8cD5Zb3UgY2FuIGNoYW5nZSBkZWZhdWx0IFNldHRpbmdzIGFuZCBUaGVtZXMgaW4gJnF1b3Q7TXkgUHJlZmVyZW5jZXMgJnJhcXVvOyBBY2VFZGl0b3ImcXVvdDs8L3A+JzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfdGl0bGUnXSA9ICdLZXlib2FyZCBTaG9ydGN1dHMnOwokbGFuZ1snaGVscF9rZXlib2FyZHNob3J0Y3V0c19jb250ZW50J10gPSAnICAgICAgPGgzPkRlZmF1bHQgS2V5Ym9hcmQgU2hvcnRjdXRzPC9oMz4NCg0KPHRhYmxlIGNsYXNzPSZxdW90O3BhZ2V0YWJsZSZxdW90OyBjZWxsc3BhY2luZz0mcXVvdDswJnF1b3Q7IHN1bW1hcnk9JnF1b3Q7RGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHMmcXVvdDs+DQo8dGhlYWQ+PHRyPg0KPHRoPlBDIChXaW5kb3dzL0xpbnV4KTwvdGQ+DQo8dGg+TWFjPC90ZD4NCjx0aD5hY3Rpb248L3RkPg0KPC90cj48L3RoZWFkPg0KPHRib2R5Pg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVJldHVybjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVJldHVybjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5mdWxsc2NyZWVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtUzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVM8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cGVyZm9ybSBzYXZlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y2VudGVyIHNlbGVjdGlvbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUFsdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtT3B0aW9uLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y29weSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgbGNhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQWx0LVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtT3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmNvcHkgbGluZXMgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+ZmluZCBuZXh0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LUc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+ZmluZCBwcmV2aW91czwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkRvd24sQ3RybC1OPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIGxpbmUgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5VcCxDdHJsLVA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gbGluZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUVuZCxDdHJsLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1FbmQsQ29tbWFuZC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkxlZnQsQ3RybC1CPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1MPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtTDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1SaWdodCxFbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1SaWdodCxFbmQsQ3RybC1FPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1MZWZ0LEhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1MZWZ0LEhvbWUsQ3RybC1BPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+UGFnZURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVBhZ2VEb3duLEN0cmwtVjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBwYWdlIGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+UGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gcGFnZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5SaWdodCxDdHJsLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1Ib21lLEN0cmwtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1Ib21lLENvbW1hbmQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byB3b3JkIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5UYWI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+aW5kZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm1vdmUgbGluZXMgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm1vdmUgbGluZXMgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5vdXRkZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pkluc2VydDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5JbnNlcnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+b3ZlcndyaXRlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5wYWdlZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+UGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnBhZ2V1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVNoaWZ0LVosQ3RybC1ZPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtWixDb21tYW5kLVk8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVkbzwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1EPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlbW92ZSBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUs8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlbW92ZSB0byBsaW5lc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1CYWNrc3BhY2UsQ3RybC1BbHQtQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlbW92ZSB3b3JkIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1EZWxldGU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1SPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtT3B0aW9uLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVwbGFjZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVNoaWZ0LVI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZXBsYWNlIGFsbDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1BPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBhbGw8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtRW5kPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Ib21lPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHBhZ2UgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVNoaWZ0LUVuZCxBbHQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHRvIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBsaW5lIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtSG9tZSxBbHQtU2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3Qgd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB3b3JkIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLU88L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c3BsaXQgbGluZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLTc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC03PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnRvZ2dsZSBjb21tZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+dHJhbnNwb3NlIGxldHRlcnM8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1aPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtWjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz51bmRvPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4nOwokbGFuZ1snaGVscF9mcm9udGVuZF90aXRsZSddID0gJ0Zyb250ZW5kJzsKJGxhbmdbJ2hlbHBfZnJvbnRlbmRfY29udGVudCddID0gJzxwPlRoaXMgTW9kdWxlIGFuZCBBY2UgU2NyaXB0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBGcm9udGVuZCBTeW50YXhoaWdobGlnaHRlci48YnIgLz4NClRvIG1ha2UgaXQgd29yayB5b3UgaGF2ZSB0byBpbmNsdWRlIGpRdWVyeSBGcmFtZXdvcmssIGZvciBleGFtcGxlIHVzaW5nIENNU01TIHtjbXNfanF1ZXJ5fSB0YWcgYW5kIGFzIHdlbGwgaW5jbHVkZSB7QWNlRWRpdG9yfSBpbiB5b3VyIHBhZ2UgdHdpY2UuIEZpcnN0IGFkZCB0aGUgbW9kdWxlIHRhZyBpbiB5b3VyIDxoZWFkPiBzZWN0aW9uIG9mIFRlbXBsYXRlIG9yIGluICZxdW90O1BhZ2UgU3BlY2lmaWMgTWV0ZGF0YSZxdW90OyBmaWVsZCBvZiB5b3VyIENvbnRlbnQgcGFnZSwgbGlrZSB7QWNlRWRpdG9yIGFjdGlvbj0mIzAzOTtoZWFkJiMwMzk7fSBhbmQgYW5vdGhlciBjYWxsIHRvIHNwZWNpZnkgd2hpY2ggYXJlYSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQsIGZvciBleGFtcGxlIHtBY2VFZGl0b3IgZGl2aWQ9JiMwMzk7Zm9vJiMwMzk7fSwgd2hpY2ggd291bGQgdGFyZ2V0IGEgcGFnZSBlbGVtZW50IHdpdGggaWQgPGVtPmZvbzwvZW0+LjwvcD4NCjxoMz5TbyBob3cgZG8geW91IHVzZSBpdD88L2gzPg0KPHA+Rmlyc3QgaW5jbHVkZSBqUXVlcnkgYW5kIE1vZHVsZSB0YWcgaW4geW91ciBQYWdlIDxoZWFkPiBhcmVhLCBmb3IgZXhhbXBsZSBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDs6PC9wPg0KPHByZT4NCntjbXNfanF1ZXJ5fQ0Ke0FjZUVkaXRvciBhY3Rpb249JiMwMzk7aGVhZCYjMDM5O30NCjwvcHJlPg0KPHA+VGhpcyBpbmNsdWRlcyBuZWVkZWQgc2NyaXB0cyBmb3IgQWNlIFN5bnRheGhpZ2hsaWdodGVyIHRvIHdvcmsuPGJyIC8+DQpJbiBNb2R1bGVzIEFkbWluIGludGVyZmFjZSB5b3UgY2FuIHNlbGVjdCBkZWZhdWx0IHNldHRpbmdzIGZvciB5b3VyICYjMDM5O2hlYWQmIzAzOTsgYWN0aW9uIG9yIHVzZSBwYXJhbWV0ZXIgbW9kZXM9JiMwMzk7aHRtbCxqYXZhc2NyaXB0JiMwMzk7IGFuZCB0aGVtZXM9JiMwMzk7dGV4dG1hdGUmIzAzOTsgd2hpY2ggd291bGQgb3ZlcnJpZGUgc2VsZWN0ZWQgUHJlZmVyZW5jZXMuPC9wPg0KPHA+Tm93IHdoZW4geW91IGhhdmUgbmVlZGVkIHNjcmlwdHMgaW5jbHVkZWQsIG9uZSBtb3JlIE1vZHVsZSB0YWcgY2FsbCBpcyBuZWVkZWQgKGZvciBleGFtcGxlIGluIHlvdXIgQ29udGVudCBFZGl0b3IgYXJlYSkgdG8gc3BlY2lmeSB3aGljaCBhcmVhIG9mIHlvdXIgUGFnZSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQuPC9wPg0KPHByZT4NCntBY2VFZGl0b3IgZGl2aWQ9JiMwMzk7c29tZS1pZCYjMDM5O30NCjwvcHJlPg0KPHA+VGhpcyB0YWcgaW5jbHVkZXMgbmVlZGVkIFNjcmlwdCBhbmQgU3R5bGUgdGhhdCBpcyB1c2VkIHRvIEhpZ2hsaWdodCBzZWxlY3RlZCBlbGVtZW50IHdpdGggc3BlY2lmaWVkIGlkLjxiciAvPg0KQWxsIHlvdSBuZWVkIHRoZW4gaXMgd3JpdGUgeW91ciBDb2RlIHRoYXQgeW91IHdhbnQgdG8gSGlnaGxpZ2h0IGFuZCB3cmFwIGl0IGluc2lkZSBhbiBlbGVtZW4gbGlrZSA8ZGl2PiB3aXRoIHNwZWNpZmllZCBpZC48L3A+JzsKJGxhbmdbJ2hlbHBfYWJvdXRfdGl0bGUnXSA9ICdBYm91dCc7CiRsYW5nWydoZWxwX2Fib3V0X3RleHQnXSA9ICc8aDM+U3VwcG9ydDwvaDM+DQo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTIsIEdvcmFuIElsaWMgPGEgaHJlZj0ibWFpbHRvOnVuaXF1M2VAZ21haWwuY29tIj48dW5pcXUzZUBnbWFpbC5jb20+PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3LmljaC1tYWNoLWRhcy5hdCIgcmVsPSJleHRlcm5hbCI+d3d3LmljaC1tYWNoLWRhcy5hdDwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+DQoJPGgzPlRlYW08L2gzPg0KCTx1bD4NCgkJPGxpPkdvcmFuIElsaWMgKHVuaXF1MykgZy5pbGljQGktYXJ0cy5ldSA8YnIgLz53d3cuaWNoLW1hY2gtZGFzLmF0PC9saT4JDQoJCTxsaT5Sb2JlcnQgQ2FtcGJlbGwgKGNhbGd1eTEwMDApIGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcgIDxiciAvPnd3dy5jYWxndXkxMDAwLmNvbTwvbGk+CQkNCgkJPGxpPkpvbmF0aGFuIFNjaG1pZCAoRm9hbHkqKSBoaUBqb25hdGhhbnNjaG1pZC5kZSA8YnIgLz53d3cuam9uYXRoYW5zY2htaWQuZGU8L2xpPg0KCTwvdWw+DQonOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPGgzPlZlcnNpb24gMC4xPC9oMz4NCjx1bD4NCgk8bGk+SXQmIzAzOTtzIGZyZXNoISBOb3RoaW5nIGNoYW5nZWQgeWV0ITwvbGk+DQoJPGxpPlVzaW5nIEFjZSBWZXJzaW9uIDAuMi4wPC9saT4NCjwvdWw+DQo8aDM+VmVyc2lvbiAwLjI8L2gzPg0KPHVsPg0KCTxsaT5BZGRlZCBDVFJMLVMgS2V5YmluZGluZzwvbGk+DQoJPGxpPkFkZGVkIEZ1bGxzY3JlZW5tb2RlPC9saT4NCgk8bGk+QWRkZWQgRnJvbnRlbmQgSGlnaGxpZ2h0aW5nPC9saT4NCgk8bGk+VXBkYXRlZCBBY2U8L2xpPg0KPC91bD4NCjxoMz5WZXJzaW9uIDAuMi4xPC9oMz4NCjx1bD4NCgk8bGk+QWRkZWQgSW50ZXJuZXQgRXhwbG9yZXIgcHJlZmVyZW5jZTwvbGk+DQoJPGxpPlVwZGF0ZWQgQUNFIHdpdGggdGhlbWVzPC9saT4NCjwvdWw+DQo8aDM+VmVyc2lvbiAwLjIuMjwvaDM+DQo8dWw+DQoJPGxpPkZpeCBmb3IgU2FmYXJpL01hYzwvbGk+DQo8L3VsPg0KPGgzPlZlcnNpb24gMC4yLjM8L2gzPg0KPHVsPg0KICAgIDxsaT5VcGRhdGVkIHRvIGxhdGVzdCBhY2UgZnJvbSBnaXRodWI8L2xpPg0KICAgIDxsaT5BZGRlZCBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIChNb2RpZnkgVGVtcGxhdGVzLCBBY2VFZGl0b3IgVXNlciBQcmVmZXJlbmNlKTwvbGk+DQogICAgPGxpPkFkZGVkIGFiaWxpdHkgdG8gY2hhbmdlIEFjZUVkaXRvciBwcmVmZXJlbmNlcyBwZXIgdXNlcjwvbGk+DQogICAgPGxpPk1vdmVkIG1vZHVsZSBmcm9tIGV4dGVuaW9ucyB0byBteXByZWZzPC9saT4NCjwvdWw+DQo8aDM+VmVyc2lvbiAwLjIuMy4xPC9oMz4NCjx1bD4NCiAgICA8bGk+TW9kZSBwcmVmZXJlbmNlIGJ1Z2ZpeDwvbGk+DQo8L3VsPg0KPGgzPlZlcnNpb24gMC4yLjQuMTwvaDM+DQo8dWw+DQogICAgPGxpPlVwZGF0ZWQgdG8gbGF0ZXN0IEFjZSBidWlsZDwvbGk+DQogICAgPGxpPkFkZGVkIFRvb2xiYXI8L2xpPg0KPC91bD4NCjxoMz5WZXJzaW9uIDAuMi40LjI8L2gzPg0KPHVsPg0KICAgIDxsaT5NaW5vciBidWdmaXgsICRtb2QgY291bGQgY29saWRlIHdpdGggb3RoZXIgbW9kdWxlczwvbGk+DQogICAgPGxpPk1pbm9yIGJ1Z2ZpeCB0byB0b29sYmFyIGJ1dHRvbnMgd2hlbiBtdWx0aXBsZSBBY2UgaW5zdGFuY2VzIGFyZSBsb2FkZWQ8L2xpPg0KPC91bD4NCjxoMz5Sb2FkbWFwPC9oMz4NCjx1bD4NCiAgICA8bGk+PGRlbD5BZGQgRnJvbnRlbmQgU3ludGF4aGlnaGxpZ2h0aW5nPC9kZWw+PC9saT4NCiAgICA8bGk+PGRlbD5BZGQgRnVsbHNjcmVlbm1vZGU8L2RlbD48L2xpPg0KICAgIDxsaT48ZGVsPkFkZCBLZXliaW5kaW5nIChDVFJMK1MpPC9kZWw+PC9saT4NCiAgICA8bGk+PGRlbD5BZGQgRWRpdG9yIGJlaGF2aW9yIChWaW0sIEVNYWNzKTwvZGVsPjwvbGk+DQogICAgPGxpPjxkZWw+TWF5YmUgYWRkIFRvb2xiYXI8L2RlbD48L2xpPg0KPC91bD4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xOTI2NTgxMTgzLjEzNDkwMjEzMjEuMTM0OTAyMTMyMS4xMzQ5MDIxMzIxLjEnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzQ5MDIxMzIxLjEuMS51dG1jY249KGRpcmVjdCl8dXRtY3NyPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ru_RU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvcic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnQWNlRWRpdG9yIGlzIGEgU3ludGF4aGlnaGxpZ2h0ZXIgbW9kdWxlIHVzaW5nIDxzdHJvbmc+QWNlPC9zdHJvbmc+IGEgc3RhbmRhbG9uZSBjb2RlIGVkaXRvciB3cml0dGVuIGluIEphdmFTY3JpcHQuJzsKJGxhbmdbJ3NldHRpbmdzX3RhYiddID0gJ9Cd0LDRgdGC0YDQvtC50LrQuCc7CiRsYW5nWydmcm9udGVuZHNldHRpbmdzX3RhYiddID0gJ0Zyb250ZW5kIFByZWZlcmVuY2VzJzsKJGxhbmdbJ2Zyb250ZW5kX3N5bnRheGFyZWFfc2V0dGluZ3MnXSA9ICdGcm9udGVuZCBTeW50YXhhcmVhIFByZWZlcmVuY2VzJzsKJGxhbmdbJ2NvbnRlbnRfZGVzY3JpcHRpb24nXSA9ICdUaGVzZSBwcmVmZXJlbmNlcyBhcmUgdXNlZCBmb3IgZGVmYXVsdCBzZXR0aW5ncyBvZiBTeW50YXhoaWdobGlnaHRpbmcgYXJlYSB3aGVuIGNhbGxpbmcgPGNvZGU+e0FjZUVkaXRvciBkaXZpZD1cJ2VkaXRvclwnfTwvY29kZT4gdGFnIHdpdGhpbiBhIFBhZ2UuJzsKJGxhbmdbJ3dpZHRoX3RpdGxlJ10gPSAn0KjQuNGA0LjQvdCwINGA0LXQtNCw0LrRgtC+0YDQsCjQsiBFTSknOwokbGFuZ1snaGVpZ2h0X3RpdGxlJ10gPSAn0JLRi9GB0L7RgtCwINGA0LXQtNCw0LrRgtC+0YDQsCjQsiBFTSknOwokbGFuZ1snZnJvbnRlbmRfd2lkdGhfdGl0bGUnXSA9ICdGcm9udGVuZCBTeW50YXhhcmVhIHdpZHRoIChpbiBweCknOwokbGFuZ1snZnJvbnRlbmRfaGVpZ2h0X3RpdGxlJ10gPSAnRnJvbnRlbmQgU3ludGF4YXJlYSBoZWlnaHQgKGluIHB4KSc7CiRsYW5nWydzeW50YXhfbW9kZSddID0gJ9Cg0LXQttC40LwnOwokbGFuZ1sndGhlbWVzJ10gPSAn0KLQtdC80LAnOwokbGFuZ1snZm9udF9zaXplJ10gPSAn0KDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdGdWxsIExpbmUgU2VsZWN0aW9uJzsKJGxhbmdbJ2hpZ2hsaWdodF9hY3RpdmUnXSA9ICfQn9C+0LTRgdCy0LXRh9C40LLQsNGC0Ywg0LDQutGC0LjQstC90YPRjiDRgdGC0YDQvtC60YMnOwokbGFuZ1snc2hvd19pbnZpc2libGVzJ10gPSAnU2hvdyBJbnZpc2libGVzJzsKJGxhbmdbJ3BlcnNpc3RlbnRfaHNjcm9sbCddID0gJ1BlcnNpdGVudCBIU2Nyb2xsJzsKJGxhbmdbJ2tleV9iaW5kaW5nJ10gPSAnS2V5IEJpbmRpbmcnOwokbGFuZ1snc29mdF93cmFwJ10gPSAnU29mdCBXcmFwJzsKJGxhbmdbJ3Nob3dfZ3V0dGVyJ10gPSAnU2hvdyBHdXR0ZXInOwokbGFuZ1sncHJpbnRfbWFyZ2luJ10gPSAnU2hvdyBQcmludCBNYXJnaW4nOwokbGFuZ1snc29mdF90YWInXSA9ICdVc2UgU29mdCBUYWInOwokbGFuZ1sndGFiX3NpemUnXSA9ICfQktGL0LHQtdGA0LjRgtC1INGA0LDQt9C80LXRgCDQstC60LvQsNC00L7Quic7CiRsYW5nWydoaWdobGlnaHRfc2VsZWN0ZWQnXSA9ICdIaWdobGlnaHQgc2VsZWN0ZWQgd29yZCc7CiRsYW5nWydlbmFibGVfYmVoYXZpb3JzJ10gPSAnRW5hYmxlIEJlaGF2aW91cnMnOwokbGFuZ1sndGVzdGFyZWF0ZXh0J10gPSAn0J/RgNC10LTQv9GA0L7RgdC80L7RgtGAJzsKJGxhbmdbJ29uJ10gPSAn0JLQutC7JzsKJGxhbmdbJ29mZiddID0gJ9CS0YvQutC7JzsKJGxhbmdbJ2xpbmUnXSA9ICfQodGC0YDQvtC60LAnOwokbGFuZ1snY29sdW1uJ10gPSAn0KHRgtC+0LvQsdC10YYnOwokbGFuZ1snY3VycmVudF9saW5lJ10gPSAn0KLQtdC60YPRidCw0Y8g0YHRgtGA0L7QutCwJzsKJGxhbmdbJ3RvdGFsX2xpbmVzJ10gPSAn0JLRgdC10LPQviDRgdGC0YDQvtC6JzsKJGxhbmdbJ2dvX2xpbmUnXSA9ICfQn9C10YDQtdC50YLQuCDQvdCwINGB0YLRgNC+0LrRgyc7CiRsYW5nWydrZXliaW5kaW5ncyddID0gJ0tleWJpbmRpbmdzJzsKJGxhbmdbJ2FjZSddID0gJ0FjZSc7CiRsYW5nWyd2aW0nXSA9ICdWaW0nOwokbGFuZ1snZW1hY3MnXSA9ICdFTWFjcyc7CiRsYW5nWydmdWxsX3NjcmVlbiddID0gJ9CS0L4g0LLQtdGB0Ywg0Y3QutGA0LDQvSc7CiRsYW5nWydzZWFyY2hfZG9jdW1lbnQnXSA9ICfQn9C+0LjRgdC6ICjQvdCw0LbQvNC40YLQtSBFbnRlciknOwokbGFuZ1sncmVwbGFjZV93aXRoJ10gPSAn0JfQsNC80LXQvdC40YLQtSAo0L3QsNC20LzQuNGC0LUgRW50ZXIpJzsKJGxhbmdbJ3NlYXJjaF9vcHRpb25zJ10gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QuNGB0LrQsCc7CiRsYW5nWydzZWFyY2hfc2V0dGluZ3MnXSA9ICfQndCw0YHRgtGA0L7QudC60Lgg0L/QvtC40YHQutCwJzsKJGxhbmdbJ2hpZ2hsaWdodGVyX29uJ10gPSAn0JLQutC70Y7Rh9C40YLRjCDQv9C+0LTRgdCy0LXRgtC60YMg0YHQuNC90YLQsNC60YHQuNGB0LAnOwokbGFuZ1snaGlnaGxpZ2h0ZXJfb2ZmJ10gPSAn0JLRi9C60LvRjtGH0LjRgtGMINC/0L7QtNGB0LLQtdGC0LrRgyDRgdC40L3RgtCw0LrRgdC40YHQsCc7CiRsYW5nWydyZXBsYWNlX29wdGlvbiddID0gJ9CX0LDQvNC10L3QuNGC0YwnOwokbGFuZ1sncmVwbGFjZWFsbF9vcHRpb24nXSA9ICfQl9Cw0LzQtdC90LjRgtGMINCy0YHQtSc7CiRsYW5nWydjX2NwcCddID0gJ0MrKyc7CiRsYW5nWydjbG9qdXJlJ10gPSAnQ2xvanVyZSc7CiRsYW5nWydjb2ZmZWUnXSA9ICdDb2ZmZWVTY3JpcHQnOwokbGFuZ1snY29sZGZ1c2lvbiddID0gJ0NvbGRmdXNpb24nOwokbGFuZ1snY3NoYXJwJ10gPSAnQyMnOwokbGFuZ1snY3NzJ10gPSAnQ1NTJzsKJGxhbmdbJ2RpZmYnXSA9ICdEaWZmJzsKJGxhbmdbJ2dvbGFuZyddID0gJ0dPJzsKJGxhbmdbJ2dyb292eSddID0gJ0dyb292eSc7CiRsYW5nWydoYXhlJ10gPSAnSGF4ZSc7CiRsYW5nWydodG1sJ10gPSAnSFRNTCc7CiRsYW5nWydqYXZhJ10gPSAnSmF2YSc7CiRsYW5nWydqc29uJ10gPSAnSlNPTic7CiRsYW5nWydqc3gnXSA9ICdKU1gnOwokbGFuZ1snbGF0ZXgnXSA9ICdMYXRleCc7CiRsYW5nWydsZXNzJ10gPSAnTEVTUyc7CiRsYW5nWydsaXF1aWQnXSA9ICdMaXF1aWQnOwokbGFuZ1snbHVhJ10gPSAnTHVhJzsKJGxhbmdbJ21hcmtkb3duJ10gPSAnTWFya2Rvd24nOwokbGFuZ1snb2NhbWwnXSA9ICdPQ2FtbCc7CiRsYW5nWydwZXJsJ10gPSAnUGVybCc7CiRsYW5nWydwZ3NxbCddID0gJ3BnU1FMJzsKJGxhbmdbJ3BocCddID0gJ1BIUCc7CiRsYW5nWydwb3dlcnNoZWxsJ10gPSAnUG93ZXJTaGVsbCc7CiRsYW5nWydweXRob24nXSA9ICdQeXRob24nOwokbGFuZ1sncnVieSddID0gJ1J1YnknOwokbGFuZ1snc2NhZCddID0gJ09wZW5TQ0FEJzsKJGxhbmdbJ3NjYWxhJ10gPSAnU2NhbGEnOwokbGFuZ1snc2NzcyddID0gJ1NDU1MnOwokbGFuZ1snc2gnXSA9ICdTSCc7CiRsYW5nWydzcWwnXSA9ICdTUUwnOwokbGFuZ1snc3ZnJ10gPSAnU1ZHJzsKJGxhbmdbJ3RleHRpbGUnXSA9ICdUZXh0aWxlJzsKJGxhbmdbJ3hxdWVyeSddID0gJ1hRdWVyeSc7CiRsYW5nWyd5YW1sJ10gPSAnWUFNTCc7CiRsYW5nWydhbWJpYW5jZSddID0gJ0FtYmlhbmNlJzsKJGxhbmdbJ2Nsb3VkcyddID0gJ0Nsb3Vkcyc7CiRsYW5nWydjaHJvbWUnXSA9ICdDaHJvbWUnOwokbGFuZ1snY2xvdWRzX21pZG5pZ2h0J10gPSAnQ2xvdWRzIE1pZG5pZ2h0JzsKJGxhbmdbJ2NvYmFsdCddID0gJ0NvYmFsdCc7CiRsYW5nWydjcmltc29uX2VkaXRvciddID0gJ0NyaW1zb24gRWRpdG9yJzsKJGxhbmdbJ2Rhd24nXSA9ICdEYXduJzsKJGxhbmdbJ2RyZWFtd2VhdmVyJ10gPSAnRHJlYW13ZWF2ZXInOwokbGFuZ1snZWNsaXBzZSddID0gJ0VjbGlwc2UnOwokbGFuZ1snaWRsZV9maW5nZXJzJ10gPSAnaWRsZUZpbmdlcnMnOwokbGFuZ1sna3JfdGhlbWUnXSA9ICdrclRoZW1lJzsKJGxhbmdbJ21lcmJpdm9yZSddID0gJ01lcmJpdm9yZSc7CiRsYW5nWydtZXJiaXZvcmVfc29mdCddID0gJ01lcmJpdm9yZSBTb2Z0JzsKJGxhbmdbJ21vbm9faW5kdXN0cmlhbCddID0gJ01vbm8gSW5kdXN0cmlhbCc7CiRsYW5nWydtb25va2FpJ10gPSAnTW9ub2thaSc7CiRsYW5nWydwYXN0ZWxfb25fZGFyayddID0gJ1Bhc3RlbCBvbiBkYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9kYXJrJ10gPSAnU29sYXJpemVkIERhcmsnOwokbGFuZ1snc29sYXJpemVkX2xpZ2h0J10gPSAnU29sYXJpemVkIExpZ2h0JzsKJGxhbmdbJ3RleHRtYXRlJ10gPSAnVGV4dE1hdGUnOwokbGFuZ1sndG9tb3Jyb3cnXSA9ICdUb21vcnJvdyc7CiRsYW5nWyd0b21vcnJvd19uaWdodCddID0gJ1RvbW9ycm93IE5pZ2h0JzsKJGxhbmdbJ3RvbW9ycm93X25pZ2h0X2JyaWdodCddID0gJ1RvbW9ycm93IE5pZ2h0IEJyaWdodCc7CiRsYW5nWyd0b21vcnJvd19uaWdodF9ibHVlJ10gPSAnVG9tb3Jyb3cgTmlnaHQgQmx1ZSc7CiRsYW5nWyd0b21vcnJvd19uaWdodF9laWdodGllcyddID0gJ1RvbW9ycm93IE5pZ2h0IEVpZ2h0aWVzJzsKJGxhbmdbJ3R3aWxpZ2h0J10gPSAnVHdpbGlnaHQnOwokbGFuZ1sndmlicmFudF9pbmsnXSA9ICdWaWJyYW50IEluayc7CiRsYW5nWydjdXN0b20nXSA9ICfQn9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LDRjyc7CiRsYW5nWyc0MCddID0gJzQwINC30L3QsNC60L7Qsic7CiRsYW5nWyc4MCddID0gJzgwINC30L3QsNC60L7Qsic7CiRsYW5nWycxMDAnXSA9ICcxMDAg0LfQvdCw0LrQvtCyJzsKJGxhbmdbJzE0MCddID0gJzE0MCDQt9C90LDQutC+0LInOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAn0KHQvtGF0YDQsNC90LjRgtGMINC90LDRgdGC0YDQvtC50LrQuCc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAn0JLQsNGI0Lgg0L3QsNGB0YLRgNC+0LnQutC4IEFDRUVESVRPUiDQsdGL0LvQuCDRgdC+0YXRgNCw0L3QtdC90YsnOwokbGFuZ1snZnJvbnRlbmRzZXR0aW5nc3NhdmVkJ10gPSAn0J3QsNGB0YLRgNC+0LnQutC4IEFjZUVkaXRvciDRgdC+0YXRgNCw0L3QtdC90YsnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdBY2VFZGl0b3IgU3VjY2Vzc2Z1bGx5IEluc3RhbGxlZCEgU2V0ICZxdW90O01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJnF1b3Q7LCAmcXVvdDtNb2RpZnkgVGVtcGxhdGVzJnF1b3Q7IG9yICZxdW90O0FjZUVkaXRvciBVc2VyIFByZWZlcmVuY2UmcXVvdDsgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWNlRWRpdG9yINCj0YHQv9C10YjQvdC+INGD0LTQsNC70LXQvSc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAn0KHQtdGA0YzQtdC30L3Qvj8g0JLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0YwgQWNlRWRpdG9yPyDQntC00YPQvNCw0LnRgtC10YHRjCEnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICdNaXNzaW5nIFBlcm1pc3Npb24hLiBTZXQgJnF1b3Q7TW9kaWZ5IFRlbXBsYXRlcyZxdW90OyBvciAmcXVvdDtBY2VFZGl0b3IgVXNlciBQcmVmZXJlbmNlJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZS4nOwokbGFuZ1snaGVscF9hdmFpbGFibGVfdGhlbWVzJ10gPSAn0JTQvtGB0YLRg9C/0L3Ri9C1INGC0LXQvNGLJzsKJGxhbmdbJ2hlbHBfYXZhaWxhYmxlX21vZGVzJ10gPSAn0JTQvtGB0YLRg9C/0L3Ri9C1INGA0LXQttC40LzRiyc7CiRsYW5nWydoZWxwX3BhcmFtX21vZGUnXSA9ICdpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj1cJ2RlZmF1bHRcJ308L2NvZGU+IG1vZHVsZSB0YWcuIFRoaXMgc3BlY2lmaWVzIFN5bnRheGhpZ2hsaWdodGVyIG1vZGUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCiAgICA8bGk+amF2YXNjcmlwdDwvbGk+DQogICAgPGxpPnBsYWluPC9saT4NCiAgICA8bGk+c3ZnPC9saT4NCiAgICA8bGk+aHRtbDwvbGk+DQogICAgPGxpPmNzczwvbGk+DQogICAgPGxpPnNjc3M8L2xpPg0KICAgIDxsaT5jb2ZmZWU8L2xpPg0KICAgIDxsaT5qc29uPC9saT4NCiAgICA8bGk+cHl0aG9uPC9saT4NCiAgICA8bGk+cnVieTwvbGk+DQogICAgPGxpPnBlcmw8L2xpPg0KICAgIDxsaT5waHA8L2xpPg0KICAgIDxsaT5qYXZhPC9saT4NCiAgICA8bGk+Y3NoYXJwPC9saT4NCiAgICA8bGk+Y19jcHA8L2xpPg0KICAgIDxsaT5jbG9qdXJlPC9saT4NCiAgICA8bGk+Y29sZGZ1c2lvbjwvbGk+DQogICAgPGxpPmRpZmY8L2xpPg0KICAgIDxsaT5oYXhlPC9saT4NCiAgICA8bGk+bGF0ZXg8L2xpPg0KICAgIDxsaT5sdWE8L2xpPg0KICAgIDxsaT5tYXJrZG93bjwvbGk+DQogICAgPGxpPnBvd2Vyc2hlbGw8L2xpPg0KICAgIDxsaT5zcWw8L2xpPg0KICAgIDxsaT5wZ3NxbDwvbGk+DQogICAgPGxpPm9jYW1sPC9saT4NCiAgICA8bGk+dGV4dGlsZTwvbGk+DQogICAgPGxpPmdyb292eTwvbGk+DQogICAgPGxpPmdvbGFuZzwvbGk+DQogICAgPGxpPmpzeDwvbGk+DQogICAgPGxpPmxlc3M8L2xpPg0KICAgIDxsaT5saXF1aWQ8L2xpPg0KICAgIDxsaT5zY2FkPC9saT4NCiAgICA8bGk+c2g8L2xpPg0KICAgIDxsaT54cXVlcnk8L2xpPg0KICAgIDxsaT55YW1sPC9saT4NCiAgICA8bGk+c2NhbGE8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9wYXJhbV90aGVtZSddID0gJ2lzIHVzZWQgd2l0aGluIGEgcGFnZSB3aXRoIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPVwnZGVmYXVsdFwnfTwvY29kZT4gbW9kdWxlIHRhZy4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgdGhlbWUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCgk8bGk+Y2xvdWRzPC9saT4gDQoJPGxpPmNsb3Vkc19taWRuaWdodDwvbGk+IA0KCTxsaT5jb2JhbHQ8L2xpPiANCgk8bGk+Y3JpbXNvbl9lZGl0b3I8L2xpPg0KCTxsaT5kYXduPC9saT4NCgk8bGk+ZWNsaXBzZTwvbGk+DQoJPGxpPmlkbGVfZmluZ2VyczwvbGk+DQoJPGxpPmtyX3RoZW1lPC9saT4NCgk8bGk+bWVyYml2b3JlPC9saT4NCgk8bGk+bWVyYml2b3JlX3NvZnQ8L2xpPg0KCTxsaT5tb25vX2luZHVzdHJpYWw8L2xpPg0KCTxsaT5tb25va2FpPC9saT4NCgk8bGk+cGFzdGVsX29uX2Rhcms8L2xpPg0KCTxsaT5zb2xhcml6ZWRfZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9saWdodDwvbGk+DQoJPGxpPnRleHRtYXRlPC9saT4NCgk8bGk+dHdpbGlnaHQ8L2xpPg0KCTxsaT52aWJyYW50X2luazwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX3dpZHRoJ10gPSAnc3BlY2lmaWVzIHdpZHRoIG9mIFN5bnRheGhpZ2hsaWdodGVyIGFyZWEgaW4gcGl4ZWwuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faGVpZ2h0J10gPSAnc3BlY2lmaWVzIGhlaWdodCBvZiBTeW50YXhoaWdobGlnaHRlciBhcmVhIGluIHBpeGVsLic7CiRsYW5nWydoZWxwX3BhcmFtX2RpdmlkJ10gPSAnaWQgb2YgdGhlIGVsZW1lbnQgY29udGFpbmluZyB5b3VyIGNvZGUuIFVzZSB1bmlxdWUgaWQgZm9yIGVhY2ggY29kZSBjaHVuY2suJzsKJGxhbmdbJ2hlbHBfZ2VuZXJhbF90aXRsZSddID0gJ0dlbmVyYWwnOwokbGFuZ1snaGVscF9nZW5lcmFsX3RleHQnXSA9ICc8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+DQo8cD5BY2VFZGl0b3IgaXMgYSBTeW50YXhoaWdobGlnaHRlciBtb2R1bGUgdXNpbmcgPHN0cm9uZz5BY2U8L3N0cm9uZz4gYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC48YnIgLz4gDQpHb2FsIG9mIEFjZSBjb2RlIGVkaXRvciBncm91cCBpcyB0byBjcmVhdGUgYSB3ZWIgYmFzZWQgY29kZSBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS48YnIgLz4NCkl0IGNhbiBiZSBlYXNpbHkgZW1iZWRkZWQgaW4gYW55IHdlYiBwYWdlIGFuZCBKYXZhU2NyaXB0IGFwcGxpY2F0aW9uLjxiciAvPiANCkFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuY2xvdWQ5aWRlLmNvbSZxdW90Oz5DbG91ZDkgSURFPC9hPiBhbmQgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgTW96aWxsYSBTa3l3cml0ZXIgKEJlc3BpbikgUHJvamVjdC48L3A+DQo8aDM+QWNlIGlzIGhvc3RlZCBvbiBHaXRIdWI8L2gzPg0KPHA+VGhlIEFjZSBzb3VyY2UgY29kZSBpcyBob3N0ZWQgb24gR2l0SHViLiBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTW96aWxsYSB0cmktbGljZW5zZSAoTVBML0dQTC9MR1BMKS48YnIgLz4NClRoaXMgaXMgdGhlIHNhbWUgbGljZW5zZSB1c2VkIGJ5IEZpcmVmb3guIFRoaXMgbGljZW5zZSBpcyBmcmllbmRseSB0byBhbGwga2luZHMgb2YgcHJvamVjdHMsIHdoZXRoZXIgb3BlbiBzb3VyY2Ugb3Igbm90LjxiciAvPg0KIFRha2UgY2hhcmdlIG9mIHlvdXIgZWRpdG9yIGFuZCBhZGQgeW91ciBmYXZvcml0ZSBsYW5ndWFnZSBoaWdobGlnaHRpbmcgYW5kIGtleWJpbmRpbmdzITwvcD4NCjxoMz5Vc2luZyBBY2VFZGl0b3IgTW9kdWxlPC9oMz4NCjxwPlVzaW5nIEFjZUVkaXRvciBNb2R1bGUgaXMgc2ltcGxlLjxiciAvPg0KQWZ0ZXIgQWNlRWRpdG9yIHdhcyBpbnN0YWxsZWQgZ28gdG8gJnF1b3Q7TXkgUHJlZmVyZW5jZXMgwrsgVXNlciBQcmVmZXJlbmNlcyZxdW90OyBhbmQgY2hvb3NlIEFjZUVkaXRvciBhcyB5b3VyIFN5bnRheGhpZ2hsaWdodGVyIG9mIGNob2ljZSBmcm9tICZxdW90O1NlbGVjdCBzeW50YXggaGlnaGxpZ2h0ZXIgdG8gdXNlOiZxdW90OyBEcm9wZG93bi48YnIgLz4NCk1ha2Ugc3VyZSB5b3UgaGF2ZSBcJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzXCcgUGVybXNpc3Npb24uPC9wPg0KPGgzPlNldHRpbmdzPC9oMz4NCjxwPllvdSBjYW4gY2hhbmdlIGRlZmF1bHQgU2V0dGluZ3MgYW5kIFRoZW1lcyBpbiAmcXVvdDtNeSBQcmVmZXJlbmNlcyDCuyBBY2VFZGl0b3ImcXVvdDs8L3A+JzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfdGl0bGUnXSA9ICfQk9C+0YDRj9GH0LjQtSDQutC70LDQstC40YjQuCc7CiRsYW5nWydoZWxwX2tleWJvYXJkc2hvcnRjdXRzX2NvbnRlbnQnXSA9ICc8aDM+RGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHM8L2gzPg0KDQo8dGFibGUgY2xhc3M9JnF1b3Q7cGFnZXRhYmxlJnF1b3Q7IGNlbGxzcGFjaW5nPSZxdW90OzAmcXVvdDsgc3VtbWFyeT0mcXVvdDtEZWZhdWx0IEtleWJvYXJkIFNob3J0Y3V0cyZxdW90Oz4NCjx0aGVhZD48dHI+DQo8dGg+UEMgKFdpbmRvd3MvTGludXgpPC90ZD4NCjx0aD5NYWM8L3RkPg0KPHRoPmFjdGlvbjwvdGQ+DQo8L3RyPjwvdGhlYWQ+DQo8dGJvZHk+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtUmV0dXJuPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtUmV0dXJuPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmZ1bGxzY3JlZW48L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtUzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5wZXJmb3JtIHNhdmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtTDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5jZW50ZXIgc2VsZWN0aW9uPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQWx0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5jb3B5IGxpbmVzIGRvd248L3RkPg0KPC90cj4NCjx0ciBsY2Fzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y29weSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmZpbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1LPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtRzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kIG5leHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1LPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtRzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kIHByZXZpb3VzPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkRvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+RG93bixDdHJsLU48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gbGluZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlVwLEN0cmwtUDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyBsaW5lIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtRW5kLEN0cmwtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUVuZCxDb21tYW5kLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+TGVmdCxDdHJsLUI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1MPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LVJpZ2h0LEVuZDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVJpZ2h0LEVuZCxDdHJsLUU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LUxlZnQsSG9tZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUxlZnQsSG9tZSxDdHJsLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tUGFnZURvd24sQ3RybC1WPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHBhZ2UgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlJpZ2h0LEN0cmwtRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUhvbWUsQ3RybC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUhvbWUsQ29tbWFuZC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+VGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5pbmRlbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+bW92ZSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+bW92ZSBsaW5lcyB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1UYWI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm91dGRlbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+SW5zZXJ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pkluc2VydDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5vdmVyd3JpdGU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlBhZ2VEb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnBhZ2Vkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cGFnZXVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtWixDdHJsLVk8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1aLENvbW1hbmQtWTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZWRvPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtRDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIGxpbmU8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZW1vdmUgdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHRvIGxpbmVzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LUJhY2tzcGFjZSxDdHJsLUFsdC1CYWNrc3BhY2U8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LURlbGV0ZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZW1vdmUgd29yZCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZXBsYWNlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtUjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LU9wdGlvbi1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlcGxhY2UgYWxsPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGFsbDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUVuZDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtSG9tZTwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgbGluZSBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgcGFnZSBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVBhZ2VVcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHBhZ2UgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtRW5kLEFsdC1TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHRvIGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1Ib21lLEFsdC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBzdGFydDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB3b3JkIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtTzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zcGxpdCBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtNzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLTc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+dG9nZ2xlIGNvbW1lbnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1UPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz50cmFuc3Bvc2UgbGV0dGVyczwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVo8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1aPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnVuZG88L3RkPg0KPC90cj4NCjwvdGJvZHk+DQo8L3RhYmxlPic7CiRsYW5nWydoZWxwX2Zyb250ZW5kX3RpdGxlJ10gPSAn0J/Rg9Cx0LvQuNGH0L3QsNGPINGH0LDRgdGC0Ywg0YHQsNC50YLQsCc7CiRsYW5nWydoZWxwX2Zyb250ZW5kX2NvbnRlbnQnXSA9ICc8cD5UaGlzIE1vZHVsZSBhbmQgQWNlIFNjcmlwdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgRnJvbnRlbmQgU3ludGF4aGlnaGxpZ2h0ZXIuPGJyIC8+DQpUbyBtYWtlIGl0IHdvcmsgeW91IGhhdmUgdG8gaW5jbHVkZSBqUXVlcnkgRnJhbWV3b3JrLCBmb3IgZXhhbXBsZSB1c2luZyBDTVNNUyB7Y21zX2pxdWVyeX0gdGFnIGFuZCBhcyB3ZWxsIGluY2x1ZGUge0FjZUVkaXRvcn0gaW4geW91ciBwYWdlIHR3aWNlLiBGaXJzdCBhZGQgdGhlIG1vZHVsZSB0YWcgaW4geW91ciA8aGVhZD4gc2VjdGlvbiBvZiBUZW1wbGF0ZSBvciBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDsgZmllbGQgb2YgeW91ciBDb250ZW50IHBhZ2UsIGxpa2Uge0FjZUVkaXRvciBhY3Rpb249XCdoZWFkXCd9IGFuZCBhbm90aGVyIGNhbGwgdG8gc3BlY2lmeSB3aGljaCBhcmVhIHNob3VsZCBiZSBoaWdobGlnaHRlZCwgZm9yIGV4YW1wbGUge0FjZUVkaXRvciBkaXZpZD1cJ2Zvb1wnfSwgd2hpY2ggd291bGQgdGFyZ2V0IGEgcGFnZSBlbGVtZW50IHdpdGggaWQgPGVtPmZvbzwvZW0+LjwvcD4NCjxoMz5TbyBob3cgZG8geW91IHVzZSBpdD88L2gzPg0KPHA+Rmlyc3QgaW5jbHVkZSBqUXVlcnkgYW5kIE1vZHVsZSB0YWcgaW4geW91ciBQYWdlIDxoZWFkPiBhcmVhLCBmb3IgZXhhbXBsZSBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDs6PC9wPg0KPHByZT4NCntjbXNfanF1ZXJ5fQ0Ke0FjZUVkaXRvciBhY3Rpb249XCdoZWFkXCd9DQo8L3ByZT4NCjxwPlRoaXMgaW5jbHVkZXMgbmVlZGVkIHNjcmlwdHMgZm9yIEFjZSBTeW50YXhoaWdobGlnaHRlciB0byB3b3JrLjxiciAvPg0KSW4gTW9kdWxlcyBBZG1pbiBpbnRlcmZhY2UgeW91IGNhbiBzZWxlY3QgZGVmYXVsdCBzZXR0aW5ncyBmb3IgeW91ciBcJ2hlYWRcJyBhY3Rpb24gb3IgdXNlIHBhcmFtZXRlciBtb2Rlcz1cJ2h0bWwsamF2YXNjcmlwdFwnIGFuZCB0aGVtZXM9XCd0ZXh0bWF0ZVwnIHdoaWNoIHdvdWxkIG92ZXJyaWRlIHNlbGVjdGVkIFByZWZlcmVuY2VzLjwvcD4NCjxwPk5vdyB3aGVuIHlvdSBoYXZlIG5lZWRlZCBzY3JpcHRzIGluY2x1ZGVkLCBvbmUgbW9yZSBNb2R1bGUgdGFnIGNhbGwgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSBpbiB5b3VyIENvbnRlbnQgRWRpdG9yIGFyZWEpIHRvIHNwZWNpZnkgd2hpY2ggYXJlYSBvZiB5b3VyIFBhZ2Ugc2hvdWxkIGJlIGhpZ2hsaWdodGVkLjwvcD4NCjxwcmU+DQp7QWNlRWRpdG9yIGRpdmlkPVwnc29tZS1pZFwnfQ0KPC9wcmU+DQo8cD5UaGlzIHRhZyBpbmNsdWRlcyBuZWVkZWQgU2NyaXB0IGFuZCBTdHlsZSB0aGF0IGlzIHVzZWQgdG8gSGlnaGxpZ2h0IHNlbGVjdGVkIGVsZW1lbnQgd2l0aCBzcGVjaWZpZWQgaWQuPGJyIC8+DQpBbGwgeW91IG5lZWQgdGhlbiBpcyB3cml0ZSB5b3VyIENvZGUgdGhhdCB5b3Ugd2FudCB0byBIaWdobGlnaHQgYW5kIHdyYXAgaXQgaW5zaWRlIGFuIGVsZW1lbiBsaWtlIDxkaXY+IHdpdGggc3BlY2lmaWVkIGlkLjwvcD4nOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sr_YU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0FjZUVkaXRvcic7CiRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnQWNlRWRpdG9yIGplIDxlbT5TeW50YXhoaWdobGlnaHRlcjwvZW0+IG1vZHVsIGtvamkga29yaXN0aSA8c3Ryb25nPkFjZTwvc3Ryb25nPiwgZWRpdG9yIGtvZGEgcGlzYW4gdSBKYXZhU2NyaXB0LXUuJzsKJGxhbmdbJ3NldHRpbmdzX3RhYiddID0gJ1ByZWZyZW5jaWplJzsKJGxhbmdbJ2Zyb250ZW5kc2V0dGluZ3NfdGFiJ10gPSAnUHJlZmVyZW5jaWplIHphIGtvcmlzbmnEjWtpIGRlbyc7CiRsYW5nWydmcm9udGVuZF9oZWFkX3NldHRpbmdzJ10gPSAnRnJvbnRlbmQgSGVhZCBQcmVmZXJlbmNlcyc7CiRsYW5nWydmcm9udGVuZF9zeW50YXhhcmVhX3NldHRpbmdzJ10gPSAnRnJvbnRlbmQgU3ludGF4YXJlYSBQcmVmZXJlbmNlcyc7CiRsYW5nWydoZWFkX2Rlc2NyaXB0aW9uJ10gPSAnVGhlc2UgcHJlZmVyZW5jZXMgYXJlIHVzZWQgZm9yIGRlZmF1bHQgc2V0dGluZ3Mgb2YgQWNlIHNjcmlwdHMgdGhhdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gcGFnZSA8Y29kZT48aGVhZD48L2NvZGU+IHdoZW4gY2FsbGluZyA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0mIzAzOTtoZWFkJiMwMzk7fTwvY29kZT4gZnJvbSBQYWdlIFNwZWNpZmljIE1ldGFkYXRhIG9yIFRlbXBsYXRlLic7CiRsYW5nWydjb250ZW50X2Rlc2NyaXB0aW9uJ10gPSAnVGhlc2UgcHJlZmVyZW5jZXMgYXJlIHVzZWQgZm9yIGRlZmF1bHQgc2V0dGluZ3Mgb2YgU3ludGF4aGlnaGxpZ2h0aW5nIGFyZWEgd2hlbiBjYWxsaW5nIDxjb2RlPntBY2VFZGl0b3IgZGl2aWQ9JiMwMzk7ZWRpdG9yJiMwMzk7fTwvY29kZT4gdGFnIHdpdGhpbiBhIFBhZ2UuJzsKJGxhbmdbJ3N5bnRheGFyZWFkZXNjcmlwdGlvbiddID0gJ1RoZXNlIHByZWZlcmVuY2VzIGFyZSB1c2VkIGZvciBkZWZhdWx0IHNldHRpbmdzIG9mIEFjZSBiZWhhdmlvciB3aGVuIGNhbGxpbmcgPGNvZGU+e0FjZUVkaXRvciBkaXZpZD0mIzAzOTtmb28mIzAzOTt9PC9jb2RlPiBmcm9tIGEgUGFnZSBvciBUZW1wbGF0ZSc7CiRsYW5nWydleGFtcGxlX2RvY3VtZW50J10gPSAnRG9rdW1lbnQnOwokbGFuZ1snd2lkdGhfdGl0bGUnXSA9ICcmU2Nhcm9uO2lyaW5hIGVkaXRvcmEgKHUgZW0pJzsKJGxhbmdbJ2hlaWdodF90aXRsZSddID0gJ1Zpc2luYSBlZGl0b3JhICh1IGVtKSc7CiRsYW5nWydlbmFibGVfaWUnXSA9ICdPbW9ndcSHaSBpIHphIEludGVybmV0IEV4cGxvcmVyJzsKJGxhbmdbJ2VuYWJsZV9pZWRlc2NyaXB0aW9uJ10gPSAnPGVtPkFjZSBTeW50YXhoaWdobGlnaHRlcjwvZW0+IG5lIHJhZGkgYmEmc2Nhcm9uOyBuYWpib2xqZSB1IEludGVybmV0IEV4cGxvcmVydS4gT3Z1IG9wY2lqdSB1a2xqdcSNaXRlIG5hIHNvcHN0dmVuaSByaXppayEnOwokbGFuZ1snZnJvbnRlbmRfd2lkdGhfdGl0bGUnXSA9ICcmU2Nhcm9uO2lyaW5hIHphIGtvcmlzbmnEjWtpIGRlbyAodSBweCknOwokbGFuZ1snZnJvbnRlbmRfaGVpZ2h0X3RpdGxlJ10gPSAnVmlzaW5hIHphIGtvcmlzbmnEjWtpIGRlbyAodSBweCknOwokbGFuZ1snc3ludGF4X21vZGUnXSA9ICdNb2QgcmFkYSc7CiRsYW5nWyd0aGVtZXMnXSA9ICdUZW1hJzsKJGxhbmdbJ2ZvbnRfc2l6ZSddID0gJ1ZlbGnEjWluYSBmb250YSc7CiRsYW5nWydmdWxsX2xpbmUnXSA9ICdTZWxla3R1aiBjZWx1IGxpbmlqdSc7CiRsYW5nWydoaWdobGlnaHRfYWN0aXZlJ10gPSAnT3puYcSNaSBha3Rpdm51IGxpbmlqdSc7CiRsYW5nWydzaG93X2ludmlzaWJsZXMnXSA9ICdQcmlrYcW+aSBuZXZpZGxqaXZlIGthcmFrdGVyZSc7CiRsYW5nWydwZXJzaXN0ZW50X2hzY3JvbGwnXSA9ICdQZXJzaXRlbnQgSFNjcm9sbCc7CiRsYW5nWydrZXlfYmluZGluZyddID0gJ0tleSBCaW5kaW5nJzsKJGxhbmdbJ3NvZnRfd3JhcCddID0gJ1ByZWxhbWFuamUgbGluaWphJzsKJGxhbmdbJ3Nob3dfZ3V0dGVyJ10gPSAnUHJpa2HFvmkgPGVtPkd1dHRlcjwvZW0+JzsKJGxhbmdbJ3ByaW50X21hcmdpbiddID0gJ1ByaWthxb5pIG1hcmdpbnUgemEgJnNjYXJvbjt0YW1wdSc7CiRsYW5nWydzb2Z0X3RhYiddID0gJ1VzZSBTb2Z0IFRhYic7CiRsYW5nWydoaWdobGlnaHRfc2VsZWN0ZWQnXSA9ICdPem5hxI1pIHNlbGVrdG92YW51IHJlxI0nOwokbGFuZ1snZW5hYmxlX2JlaGF2aW9ycyddID0gJ0VuYWJsZSBCZWhhdmlvcnMnOwokbGFuZ1sndGVzdGFyZWF0ZXh0J10gPSAnUHJlZ2xlZCc7CiRsYW5nWydqcyddID0gJ0phdmFTY3JpcHQnOwokbGFuZ1sncGxhaW4nXSA9ICdPYmnEjW5pIHRla3N0JzsKJGxhbmdbJ3N2ZyddID0gJ1NWRyc7CiRsYW5nWydodG1sJ10gPSAnSFRNTCc7CiRsYW5nWydjc3MnXSA9ICdDU1MnOwokbGFuZ1snc2NzcyddID0gJ1NDU1MnOwokbGFuZ1snY29mZmVlJ10gPSAnQ29mZmVlU2NyaXB0JzsKJGxhbmdbJ2pzb24nXSA9ICdKU09OJzsKJGxhbmdbJ3B5dGhvbiddID0gJ1B5dGhvbic7CiRsYW5nWydydWJ5J10gPSAnUnVieSc7CiRsYW5nWydwZXJsJ10gPSAnUGVybCc7CiRsYW5nWydwaHAnXSA9ICdQSFAnOwokbGFuZ1snamF2YSddID0gJ0phdmEnOwokbGFuZ1snY3NoYXJwJ10gPSAnQyMnOwokbGFuZ1snY19jcHAnXSA9ICdDKysnOwokbGFuZ1snY2xvanVyZSddID0gJ0Nsb2p1cmUnOwokbGFuZ1snb2NhbWwnXSA9ICdPQ2FtbCc7CiRsYW5nWyd0ZXh0aWxlJ10gPSAnVGV4dGlsZSc7CiRsYW5nWydncm9vdnknXSA9ICdHcm9vdnknOwokbGFuZ1snc2NhbGEnXSA9ICdTY2FsYSc7CiRsYW5nWydjbG91ZHMnXSA9ICdDbG91ZHMnOwokbGFuZ1snY2hyb21lJ10gPSAnQ2hyb21lJzsKJGxhbmdbJ2Nsb3Vkc19taWRuaWdodCddID0gJ0Nsb3VkcyBNaWRuaWdodCc7CiRsYW5nWydjb2JhbHQnXSA9ICdDb2JhbHQnOwokbGFuZ1snY3JpbXNvbl9lZGl0b3InXSA9ICdDcmltc29uIEVkaXRvcic7CiRsYW5nWydkYXduJ10gPSAnRGF3bic7CiRsYW5nWydkcmVhbXdlYXZlciddID0gJ0RyZWFtd2VhdmVyJzsKJGxhbmdbJ2VjbGlwc2UnXSA9ICdFY2xpcHNlJzsKJGxhbmdbJ2lkbGVfZmluZ2VycyddID0gJ2lkbGVGaW5nZXJzJzsKJGxhbmdbJ2tyX3RoZW1lJ10gPSAna3JUaGVtZSc7CiRsYW5nWydtZXJiaXZvcmUnXSA9ICdNZXJiaXZvcmUnOwokbGFuZ1snbWVyYml2b3JlX3NvZnQnXSA9ICdNZXJiaXZvcmUgU29mdCc7CiRsYW5nWydtb25vX2luZHVzdHJpYWwnXSA9ICdNb25vIEluZHVzdHJpYWwnOwokbGFuZ1snbW9ub2thaSddID0gJ01vbm9rYWknOwokbGFuZ1sncGFzdGVsX29uX2RhcmsnXSA9ICdQYXN0ZWwgb24gZGFyayc7CiRsYW5nWydzb2xhcml6ZWRfZGFyayddID0gJ1NvbGFyaXplZCBEYXJrJzsKJGxhbmdbJ3NvbGFyaXplZF9saWdodCddID0gJ1NvbGFyaXplZCBMaWdodCc7CiRsYW5nWyd0ZXh0bWF0ZSddID0gJ1RleHRNYXRlJzsKJGxhbmdbJ3RvbW9ycm93J10gPSAnVG9tb3Jyb3cnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHQnXSA9ICdUb21vcnJvdyBOaWdodCc7CiRsYW5nWyd0b21vcnJvd19uaWdodF9icmlnaHQnXSA9ICdUb21vcnJvdyBOaWdodCBCcmlnaHQnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfYmx1ZSddID0gJ1RvbW9ycm93IE5pZ2h0IEJsdWUnOwokbGFuZ1sndG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMnXSA9ICdUb21vcnJvdyBOaWdodCBFaWdodGllcyc7CiRsYW5nWyd0d2lsaWdodCddID0gJ1R3aWxpZ2h0JzsKJGxhbmdbJ3ZpYnJhbnRfaW5rJ10gPSAnVmlicmFudCBJbmsnOwokbGFuZ1snYWNlJ10gPSAnQWNlJzsKJGxhbmdbJ3ZpbSddID0gJ1ZpbSc7CiRsYW5nWydlbWFjcyddID0gJ0VNYWNzJzsKJGxhbmdbJ2N1c3RvbSddID0gJ0tvcmlzbmnEjWtpIGRlZmluaXNhbm8nOwokbGFuZ1snb2ZmJ10gPSAnSXNrbGp1xI1lbm8nOwokbGFuZ1snNDAnXSA9ICc0MCBrYXJha3RlcmEnOwokbGFuZ1snODAnXSA9ICc4MCBrYXJha3RlcmEnOwokbGFuZ1snMTAwJ10gPSAnMTAwIGthcmFrdGVyYSc7CiRsYW5nWycxNDAnXSA9ICcxNDAga2FyYWt0ZXJhJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ1NhxI11dmFqIHBvZGUmc2Nhcm9uO2F2YW5qYSc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnVmEmc2Nhcm9uO2EgcG9kZSZzY2Fyb247YXZhbmphIEFjZUVkaXRvcmEgc3Ugc2HEjXV2YW5hJzsKJGxhbmdbJ2Zyb250ZW5kc2V0dGluZ3NzYXZlZCddID0gJ1ZhJnNjYXJvbjthIHBvZGUmc2Nhcm9uO2F2YW5qYSBBY2VFZGl0b3JhIHphIGtvcmlzbmnEjWtpIGRlbyBzYWp0YSBzdSBzYcSNdXZhbmEnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdBY2VFZGl0b3IgamUgdXNwZSZzY2Fyb247bm8gaW5zdGFsaXJhbiEgUG9kZXNpdGUgJnF1b3Q7TWVuamFuamUgcG9kZSZzY2Fyb247YXZhbmphIHNhanRhJnF1b3Q7IGRvenZvbGUgZGEgYmlzdGUga29yaXN0aWxpIG92YWogbW9kdWwuJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBY2VFZGl0b3IgamUgdXNwZSZzY2Fyb247bm8gZGVpbnN0YWxpcmFuJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdTdHZhcm5vPyBTaWd1cm5pIHN0ZSBkYSDFvmVsaXRlIGRhIGRlaW5zdGFsaXJhdGUgQWNlRWRpdG9yPyBSYXptaXNsaXRlIGpvJnNjYXJvbjsgamVkbm9tLi4uJzsKJGxhbmdbJ2hlbHBfcGFyYW1fYWN0aW9uJ10gPSAnaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFjdGlvbiBvZiBNb2R1bGUgdGFnLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICYjMDM5O2RlZmF1bHQmIzAzOTsgYW5kICYjMDM5O2hlYWQmIzAzOTsuIEJvdGggYXJlIG5lZWRlZCBmb3IgY29ycmVjdCBGcm9udGVuZCBTeW50YXhoaWdobGlnaHRpbmcgZnVuY3Rpb24uIDxiciAvPlBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQoJPGxpPmhlYWQ8L2xpPg0KCTxsaT5kZWZhdWx0PC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfcGFyYW1fbW9kZXMnXSA9ICdpcyB1c2VkIHdpdGggPGNvZGU+e0FjZUVkaXRvciBhY3Rpb249JiMwMzk7aGVhZCYjMDM5O308L2NvZGU+LiBZb3UgY2FuIGluY2x1ZGUgbXVsdGlwbGUgY29tbWEgc2VwYXJhdGVkICYjMDM5O21vZGVzJiMwMzk7IHRoYXQgeW91IHdpbGwgYmUgdXNpbmcgb24geW91ciB3ZWJzaXRlLiBUaGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyIDxoZWFkPiBvZiBUZW1wbGF0ZSBvciBQYWdlIHNwZWNpZmljIE1ldGFkYXRhLiBUaGlzIHdpbGwgb3ZlcnJpZGUgeW91IFByZWZlcmVuY2VzIHNlbGVjdGVkIGluIE1vZHVsZSBBZG1pbiBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5qYXZhc2NyaXB0PC9saT4gDQoJPGxpPnBsYWluPC9saT4gDQoJPGxpPnN2ZzwvbGk+IA0KCTxsaT5odG1sPC9saT4NCgk8bGk+Y3NzPC9saT4NCgk8bGk+c2NzczwvbGk+DQoJPGxpPmNvZmZlZTwvbGk+DQoJPGxpPmpzb248L2xpPg0KCTxsaT5weXRob248L2xpPg0KCTxsaT5ydWJ5PC9saT4NCgk8bGk+cGVybDwvbGk+DQoJPGxpPnBocDwvbGk+DQoJPGxpPmphdmE8L2xpPg0KCTxsaT5jc2hhcnA8L2xpPg0KCTxsaT5jX2NwcDwvbGk+DQoJPGxpPmNsb2p1cmU8L2xpPg0KCTxsaT5vY2FtbDwvbGk+DQoJPGxpPnRleHRpbGU8L2xpPg0KCTxsaT5ncm9vdnk8L2xpPg0KCTxsaT5zY2FsYTwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX3RoZW1lcyddID0gJ2lzIHVzZWQgd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0mIzAzOTtoZWFkJiMwMzk7fTwvY29kZT4uIFlvdSBjYW4gaW5jbHVkZSBtdWx0aXBsZSBjb21tYSBzZXBhcmF0ZWQgJiMwMzk7dGhlbWVzJiMwMzk7IHRoYXQgeW91IHdpbGwgYmUgdXNpbmcgb24geW91ciB3ZWJzaXRlLiBUaGlzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB5b3VyIDxoZWFkPiBvZiBUZW1wbGF0ZSBvciBQYWdlIHNwZWNpZmljIE1ldGFkYXRhLiBUaGlzIHdpbGwgb3ZlcnJpZGUgeW91IFByZWZlcmVuY2VzIHNlbGVjdGVkIGluIE1vZHVsZSBBZG1pbiBhcmVhLiA8YnIgLz5Qb3NzaWJsZSB2YWx1ZXMgYXJlOg0KPHVsPg0KCTxsaT5jbG91ZHM8L2xpPiANCgk8bGk+Y2xvdWRzX21pZG5pZ2h0PC9saT4gDQoJPGxpPmNvYmFsdDwvbGk+IA0KCTxsaT5jcmltc29uX2VkaXRvcjwvbGk+DQoJPGxpPmRhd248L2xpPg0KCTxsaT5lY2xpcHNlPC9saT4NCgk8bGk+aWRsZV9maW5nZXJzPC9saT4NCgk8bGk+a3JfdGhlbWU8L2xpPg0KCTxsaT5tZXJiaXZvcmU8L2xpPg0KCTxsaT5tZXJiaXZvcmVfc29mdDwvbGk+DQoJPGxpPm1vbm9faW5kdXN0cmlhbDwvbGk+DQoJPGxpPm1vbm9rYWk8L2xpPg0KCTxsaT5wYXN0ZWxfb25fZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9kYXJrPC9saT4NCgk8bGk+c29sYXJpemVkX2xpZ2h0PC9saT4NCgk8bGk+dGV4dG1hdGU8L2xpPg0KCTxsaT50d2lsaWdodDwvbGk+DQoJPGxpPnZpYnJhbnRfaW5rPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfcGFyYW1fbW9kZSddID0gJ2lzIHVzZWQgd2l0aGluIGEgcGFnZSB3aXRoIDxjb2RlPntBY2VFZGl0b3IgYWN0aW9uPSYjMDM5O2RlZmF1bHQmIzAzOTt9PC9jb2RlPiBtb2R1bGUgdGFnLiBUaGlzIHNwZWNpZmllcyBTeW50YXhoaWdobGlnaHRlciBtb2RlIGZvciBzcGVjaWZpYyBjb2RlIGFyZWEuIDxiciAvPlBvc3NpYmxlIHZhbHVlcyBhcmU6DQo8dWw+DQoJPGxpPmphdmFzY3JpcHQ8L2xpPiANCgk8bGk+cGxhaW48L2xpPiANCgk8bGk+c3ZnPC9saT4gDQoJPGxpPmh0bWw8L2xpPg0KCTxsaT5jc3M8L2xpPg0KCTxsaT5zY3NzPC9saT4NCgk8bGk+Y29mZmVlPC9saT4NCgk8bGk+anNvbjwvbGk+DQoJPGxpPnB5dGhvbjwvbGk+DQoJPGxpPnJ1Ynk8L2xpPg0KCTxsaT5wZXJsPC9saT4NCgk8bGk+cGhwPC9saT4NCgk8bGk+amF2YTwvbGk+DQoJPGxpPmNzaGFycDwvbGk+DQoJPGxpPmNfY3BwPC9saT4NCgk8bGk+Y2xvanVyZTwvbGk+DQoJPGxpPm9jYW1sPC9saT4NCgk8bGk+dGV4dGlsZTwvbGk+DQoJPGxpPmdyb292eTwvbGk+DQoJPGxpPnNjYWxhPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfcGFyYW1fdGhlbWUnXSA9ICdpcyB1c2VkIHdpdGhpbiBhIHBhZ2Ugd2l0aCA8Y29kZT57QWNlRWRpdG9yIGFjdGlvbj0mIzAzOTtkZWZhdWx0JiMwMzk7fTwvY29kZT4gbW9kdWxlIHRhZy4gVGhpcyBzcGVjaWZpZXMgU3ludGF4aGlnaGxpZ2h0ZXIgdGhlbWUgZm9yIHNwZWNpZmljIGNvZGUgYXJlYS4gPGJyIC8+UG9zc2libGUgdmFsdWVzIGFyZToNCjx1bD4NCgk8bGk+Y2xvdWRzPC9saT4gDQoJPGxpPmNsb3Vkc19taWRuaWdodDwvbGk+IA0KCTxsaT5jb2JhbHQ8L2xpPiANCgk8bGk+Y3JpbXNvbl9lZGl0b3I8L2xpPg0KCTxsaT5kYXduPC9saT4NCgk8bGk+ZWNsaXBzZTwvbGk+DQoJPGxpPmlkbGVfZmluZ2VyczwvbGk+DQoJPGxpPmtyX3RoZW1lPC9saT4NCgk8bGk+bWVyYml2b3JlPC9saT4NCgk8bGk+bWVyYml2b3JlX3NvZnQ8L2xpPg0KCTxsaT5tb25vX2luZHVzdHJpYWw8L2xpPg0KCTxsaT5tb25va2FpPC9saT4NCgk8bGk+cGFzdGVsX29uX2Rhcms8L2xpPg0KCTxsaT5zb2xhcml6ZWRfZGFyazwvbGk+DQoJPGxpPnNvbGFyaXplZF9saWdodDwvbGk+DQoJPGxpPnRleHRtYXRlPC9saT4NCgk8bGk+dHdpbGlnaHQ8L2xpPg0KCTxsaT52aWJyYW50X2luazwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX3BhcmFtX3dpZHRoJ10gPSAnb2RyZcSRdWplICZzY2Fyb247aXJpbnUgU3ludGF4aGlnaGxpZ2h0ZXIgdSBwaWtzZWxpbWEuJzsKJGxhbmdbJ2hlbHBfcGFyYW1faGVpZ2h0J10gPSAnb2RyZcSRdWplIHZpc2ludSBTeW50YXhoaWdobGlnaHRlciB1IHBpa3NlbGltYS4nOwokbGFuZ1snaGVscF9wYXJhbV9kaXZpZCddID0gJ0lEIGVsZW1lbnRhIGtvamkgc2FkcsW+aSBWYSZzY2Fyb247IGtvZC4gS29yaXN0aXRlIGplZGluc3R2ZW51IElEIG96bmFrdSB6YSBzdmFraSBrb21hZCBrb2RhLic7CiRsYW5nWydoZWxwX2dlbmVyYWxfdGl0bGUnXSA9ICdPcCZzY2Fyb247dGEnOwokbGFuZ1snaGVscF9nZW5lcmFsX3RleHQnXSA9ICc8aDM+JlNjYXJvbjt0YSBvdm8gcmFkaT88L2gzPg0KPHA+QWNlRWRpdG9yIGplIFN5bnRheGhpZ2hsaWdodGVyIG1vZHVsIGtvamkga29yaXN0aSA8c3Ryb25nPkFjZTwvc3Ryb25nPiBlZGl0b3Iga29kYSBwaXNhbiB1IEphdmFTY3JpcHQtdS48YnIgLz4gDQpOYW1qZXJhIGdydXBlIGtvamEgcmF6dmlqYSBBY2UgZWRpdG9yIGtvZGEgamUgc3R2YXJhbmplIGVkaXRvcmEga29kYSBuYW1lbmplbm9nIFZlYnUga29qaSBpbWEgaXN0ZSBpIMSNYWsgYm9samUgbW9ndcSHbm9zdGksIHVwb3RyZWJsaml2b3N0IGkgcGVyZm9ybWFuc2Uga2FvIHBvc3RvamXEh2kgZWRpdG9yIHRpcGEgVGV4dE1hdGUsIFZpbSBpbGkgRWNsaXBzZS48YnIgLz4NCkxha28gc2UgbW/FvmUgaW1wbGVtZW50aXJhcmkgdSBiaWxvIGtvanUgVmViIHN0cmFuaWN1IGkgSmF2YVNjcmlwdCBhcGxpa2FjaWp1LjxiciAvPiANCkFjZSBqZSByYXp2aWphbiBrYW8gcHJpbWFybmkgZWRpdG9yIHphIDxhIGhyZWY9Imh0dHA6Ly93d3cuY2xvdWQ5aWRlLmNvbSI+Q2xvdWQ5IElERTwvYT4gaSBuYXNsZWRuaWsgamUgTW96aWxsYSBTa3l3cml0ZXIgKEJlc3BpbikgUHJvamVrdGEuPC9wPg0KPGgzPkFjZSBqZSBob3N0b3ZhbiBuYSBHaXRIdWItdTwvaDM+DQo8cD5JenZvcm5pIGtvZCBBY2UgZWRpdG9yYSBqZSBob3N0b3ZhbiBuYSBHaXRIdWItdS4gUG9kbGXFvmUgdHJvc3RydWtvaiBNb3ppbGxhIGxpY2VuY2kgKE1QTC9HUEwvTEdQTCkuPGJyIC8+DQpJc3R1IGxpY2VuY3Uga29yaXN0aSBGaXJlZm94LiBPdmEgbGljZW5jYSBqZSBuYWtsb25qZW5hIHN2aW0gdnJzdGFtYSBwcm9qZWthdGEsIGJpbG8gZGEgc3UgPGVtPm9wZW4gc291cmNlPC9lbT4gaWxpIG5lLjxiciAvPg0KIFRha2UgY2hhcmdlIG9mIHlvdXIgZWRpdG9yIGFuZCBhZGQgeW91ciBmYXZvcml0ZSBsYW5ndWFnZSBoaWdobGlnaHRpbmcgYW5kIGtleWJpbmRpbmdzITwvcD4NCjxoMz5LYWtvIHNlIGtvcmlzdGk/PC9oMz4NCjxwPlVwb3RlYmEgQWNlRWRpdG9yIE1vZHVsYSBqZSBwcm9zdGEuPGJyIC8+DQpOYWtvbiAmc2Nhcm9uO3RvIGluc3RhbGlyYXRlIEFjZUVkaXRvciBpZGl0ZSBuYSAmcXVvdDtNb2plIHByZWZlcmVuY2lqZSAmcmFxdW87IEtvcmlzbmnEjWtlIHByZWZlcmVuY2lqZSZxdW90OyBpIGl6YWJlcml0ZSBBY2VFZGl0b3Iga2FvIFZhJnNjYXJvbjsgPGVtPnN5bnRheGhpZ2hsaWdodGVyPC9lbT4gdSAmcXVvdDtJemFiZXJpdGUgc3ludGF4IGhpZ2hsaWdodGVyIHphIHVwb3RyZWJ1OiZxdW90OyBwYWRhanXEh29qIGxpc3RpLjxiciAvPg0KUG9zdGFyYWp0ZSBzZSBkYSBpbWF0ZSBkb3p2b2x1ICZxdW90O01lbmphbmplIHBvZGUmc2Nhcm9uO2F2YW5qYSBzYWp0YSZxdW90Oy48L3A+DQo8aDM+UG9kZSZzY2Fyb247YXZhbmphPC9oMz4NCjxwPk1vxb5ldGUgcHJvbWVuaXRpIHBvZHJhenVtZXZhbmEgcG9kZSZzY2Fyb247YXZhbmphIGkgdGVtZSBuYWtvIG9kZXRlIG5hICZxdW90O0Vrc3RlbnppamUgJnJhcXVvOyBBY2VFZGl0b3ImcXVvdDs8L3A+JzsKJGxhbmdbJ2hlbHBfa2V5Ym9hcmRzaG9ydGN1dHNfdGl0bGUnXSA9ICdQcmXEjWljZSBuYSB0YXN0YXR1cmknOwokbGFuZ1snaGVscF9rZXlib2FyZHNob3J0Y3V0c19jb250ZW50J10gPSAnICAgICAgPGgzPlBvZHJhenVtZW5hbmUgcHJlxI1pY2UgbmEgdGFzdGF0dXJpPC9oMz4NCg0KPHRhYmxlIGNsYXNzPSZxdW90O3BhZ2V0YWJsZSZxdW90OyBjZWxsc3BhY2luZz0mcXVvdDswJnF1b3Q7IHN1bW1hcnk9JnF1b3Q7RGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHMmcXVvdDs+DQo8dGhlYWQ+PHRyPg0KPHRoPlBDIChXaW5kb3dzL0xpbnV4KTwvdGQ+DQo8dGg+TWFjPC90ZD4NCjx0aD5hY3Rpb248L3RkPg0KPC90cj48L3RoZWFkPg0KPHRib2R5Pg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVJldHVybjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVJldHVybjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5mdWxsc2NyZWVuPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtUzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVM8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cGVyZm9ybSBzYXZlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUw8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y2VudGVyIHNlbGVjdGlvbjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUFsdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtT3B0aW9uLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Y29weSBsaW5lcyBkb3duPC90ZD4NCjwvdHI+DQo8dHIgbGNhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtQWx0LVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtT3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmNvcHkgbGluZXMgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1GPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5maW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLUc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+ZmluZCBuZXh0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtSzwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LUc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+ZmluZCBwcmV2aW91czwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkRvd24sQ3RybC1OPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIGxpbmUgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5VcCxDdHJsLVA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gbGluZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUVuZCxDdHJsLURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1FbmQsQ29tbWFuZC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkxlZnQsQ3RybC1CPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1MPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtTDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1SaWdodCxFbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1SaWdodCxFbmQsQ3RybC1FPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1MZWZ0LEhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1MZWZ0LEhvbWUsQ3RybC1BPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+UGFnZURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVBhZ2VEb3duLEN0cmwtVjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byBwYWdlIGRvd248L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+UGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gcGFnZSB1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5SaWdodCxDdHJsLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1Ib21lLEN0cmwtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1Ib21lLENvbW1hbmQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Z28gdG8gc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PmdvIHRvIHdvcmQgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5nbyB0byB3b3JkIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5UYWI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+aW5kZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pk9wdGlvbi1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm1vdmUgbGluZXMgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pm1vdmUgbGluZXMgdXA8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVGFiPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVRhYjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5vdXRkZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7Pkluc2VydDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5JbnNlcnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+b3ZlcndyaXRlPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5QYWdlRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5wYWdlZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz48L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+UGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnBhZ2V1cDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVNoaWZ0LVosQ3RybC1ZPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtU2hpZnQtWixDb21tYW5kLVk8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVkbzwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1EPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlbW92ZSBsaW5lPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUs8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHRvIGxpbmUgZW5kPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlbW92ZSB0byBsaW5lc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1CYWNrc3BhY2UsQ3RybC1BbHQtQmFja3NwYWNlPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnJlbW92ZSB3b3JkIGxlZnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkFsdC1EZWxldGU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVtb3ZlIHdvcmQgcmlnaHQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1SPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtT3B0aW9uLUY8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+cmVwbGFjZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVNoaWZ0LVI8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1PcHRpb24tRjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5yZXBsYWNlIGFsbDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLUE8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1BPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBhbGw8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Eb3duPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBkb3duPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgbGVmdDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1FbmQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtRW5kPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBsaW5lIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1Ib21lPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LUhvbWU8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IGxpbmUgc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cyJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUGFnZURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHBhZ2UgZG93bjwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5TaGlmdC1QYWdlVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtUGFnZVVwPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCBwYWdlIHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PlNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCByaWdodDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVNoaWZ0LUVuZCxBbHQtU2hpZnQtRG93bjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5Db21tYW5kLVNoaWZ0LURvd248L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHRvIGVuZDwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzImcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5BbHQtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1SaWdodDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gbGluZSBlbmQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+QWx0LVNoaWZ0LUxlZnQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1MZWZ0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB0byBsaW5lIHN0YXJ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtSG9tZSxBbHQtU2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC1TaGlmdC1VcDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3QgdG8gc3RhcnQ8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+U2hpZnQtVXA8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c2VsZWN0IHVwPC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5PcHRpb24tU2hpZnQtTGVmdDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5zZWxlY3Qgd29yZCBsZWZ0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MSZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtU2hpZnQtUmlnaHQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+T3B0aW9uLVNoaWZ0LVJpZ2h0PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnNlbGVjdCB3b3JkIHJpZ2h0PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLU88L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+c3BsaXQgbGluZTwvdGQ+DQo8L3RyPg0KPHRyIGNsYXNzPSZxdW90O3JvdzEmcXVvdDs+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLTc8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q29tbWFuZC03PC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PnRvZ2dsZSBjb21tZW50PC90ZD4NCjwvdHI+DQo8dHIgY2xhc3M9JnF1b3Q7cm93MiZxdW90Oz4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkN0cmwtVDwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz5DdHJsLVQ8L3RkPg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+dHJhbnNwb3NlIGxldHRlcnM8L3RkPg0KPC90cj4NCjx0ciBjbGFzcz0mcXVvdDtyb3cxJnF1b3Q7Pg0KPHRkIGFsaWduPSZxdW90O2xlZnQmcXVvdDs+Q3RybC1aPC90ZD4NCjx0ZCBhbGlnbj0mcXVvdDtsZWZ0JnF1b3Q7PkNvbW1hbmQtWjwvdGQ+DQo8dGQgYWxpZ249JnF1b3Q7bGVmdCZxdW90Oz51bmRvPC90ZD4NCjwvdHI+DQo8L3Rib2R5Pg0KPC90YWJsZT4nOwokbGFuZ1snaGVscF9mcm9udGVuZF90aXRsZSddID0gJ0tvcmlzbmnEjWtpIGRlbyc7CiRsYW5nWydoZWxwX2Zyb250ZW5kX2NvbnRlbnQnXSA9ICc8cD5UaGlzIE1vZHVsZSBhbmQgQWNlIFNjcmlwdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgRnJvbnRlbmQgU3ludGF4aGlnaGxpZ2h0ZXIuPGJyIC8+DQpUbyBtYWtlIGl0IHdvcmsgeW91IGhhdmUgdG8gaW5jbHVkZSBqUXVlcnkgRnJhbWV3b3JrLCBmb3IgZXhhbXBsZSB1c2luZyBDTVNNUyB7Y21zX2pxdWVyeX0gdGFnIGFuZCBhcyB3ZWxsIGluY2x1ZGUge0FjZUVkaXRvcn0gaW4geW91ciBwYWdlIHR3aWNlLiBGaXJzdCBhZGQgdGhlIG1vZHVsZSB0YWcgaW4geW91ciA8aGVhZD4gc2VjdGlvbiBvZiBUZW1wbGF0ZSBvciBpbiAmcXVvdDtQYWdlIFNwZWNpZmljIE1ldGRhdGEmcXVvdDsgZmllbGQgb2YgeW91ciBDb250ZW50IHBhZ2UsIGxpa2Uge0FjZUVkaXRvciBhY3Rpb249JiMwMzk7aGVhZCYjMDM5O30gYW5kIGFub3RoZXIgY2FsbCB0byBzcGVjaWZ5IHdoaWNoIGFyZWEgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLCBmb3IgZXhhbXBsZSB7QWNlRWRpdG9yIGRpdmlkPSYjMDM5O2ZvbyYjMDM5O30sIHdoaWNoIHdvdWxkIHRhcmdldCBhIHBhZ2UgZWxlbWVudCB3aXRoIGlkIDxlbT5mb288L2VtPi48L3A+DQo8aDM+U28gaG93IGRvIHlvdSB1c2UgaXQ/PC9oMz4NCjxwPkZpcnN0IGluY2x1ZGUgalF1ZXJ5IGFuZCBNb2R1bGUgdGFnIGluIHlvdXIgUGFnZSA8aGVhZD4gYXJlYSwgZm9yIGV4YW1wbGUgaW4gJnF1b3Q7UGFnZSBTcGVjaWZpYyBNZXRkYXRhJnF1b3Q7OjwvcD4NCgk8cHJlPg0KCXtjbXNfanF1ZXJ5fQ0KCXtBY2VFZGl0b3IgYWN0aW9uPSYjMDM5O2hlYWQmIzAzOTt9DQoJPC9wcmU+DQo8cD5UaGlzIGluY2x1ZGVzIG5lZWRlZCBzY3JpcHRzIGZvciBBY2UgU3ludGF4aGlnaGxpZ2h0ZXIgdG8gd29yay48YnIgLz4NCkluIE1vZHVsZXMgQWRtaW4gaW50ZXJmYWNlIHlvdSBjYW4gc2VsZWN0IGRlZmF1bHQgc2V0dGluZ3MgZm9yIHlvdXIgJiMwMzk7aGVhZCYjMDM5OyBhY3Rpb24gb3IgdXNlIHBhcmFtZXRlciBtb2Rlcz0mIzAzOTtodG1sLGphdmFzY3JpcHQmIzAzOTsgYW5kIHRoZW1lcz0mIzAzOTt0ZXh0bWF0ZSYjMDM5OyB3aGljaCB3b3VsZCBvdmVycmlkZSBzZWxlY3RlZCBQcmVmZXJlbmNlcy48L3A+DQo8cD5Ob3cgd2hlbiB5b3UgaGF2ZSBuZWVkZWQgc2NyaXB0cyBpbmNsdWRlZCwgb25lIG1vcmUgTW9kdWxlIHRhZyBjYWxsIGlzIG5lZWRlZCAoZm9yIGV4YW1wbGUgaW4geW91ciBDb250ZW50IEVkaXRvciBhcmVhKSB0byBzcGVjaWZ5IHdoaWNoIGFyZWEgb2YgeW91ciBQYWdlIHNob3VsZCBiZSBoaWdobGlnaHRlZC48L3A+DQoJPHByZT4NCgl7QWNlRWRpdG9yIGRpdmlkPSYjMDM5O3NvbWUtaWQmIzAzOTt9DQoJPC9wcmU+DQo8cD5UaGlzIHRhZyBpbmNsdWRlcyBuZWVkZWQgU2NyaXB0IGFuZCBTdHlsZSB0aGF0IGlzIHVzZWQgdG8gSGlnaGxpZ2h0IHNlbGVjdGVkIGVsZW1lbnQgd2l0aCBzcGVjaWZpZWQgaWQuPGJyIC8+DQpBbGwgeW91IG5lZWQgdGhlbiBpcyB3cml0ZSB5b3VyIENvZGUgdGhhdCB5b3Ugd2FudCB0byBIaWdobGlnaHQgYW5kIHdyYXAgaXQgaW5zaWRlIGFuIGVsZW1lbiBsaWtlIDxkaXY+IHdpdGggc3BlY2lmaWVkIGlkLjwvcD4nOwokbGFuZ1snaGVscF9mcm9udGVuZF9zYW1wbGUnXSA9ICc8cHJlIGlkPSZxdW90O3NvbWUtaWQmcXVvdDs+DQo8aHRtbD4NCiAmbmJzcDsgJm5ic3A7IDxoZWFkPg0KICZuYnNwOyAmbmJzcDsgPHN0eWxlIHR5cGU9JnF1b3Q7dGV4dC9jc3MmcXVvdDs+DQogJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC50ZXh0LWxheWVyIHsNCiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBmb250LWZhbWlseTogTW9uYWNvLCAmcXVvdDtDb3VyaWVyIE5ldyZxdW90OywgbW9ub3NwYWNlOw0KICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGZvbnQtc2l6ZTogMTJweDsNCiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBjdXJzb3I6IHRleHQ7DQogJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH0NCiAmbmJzcDsgJm5ic3A7IDwvc3R5bGU+DQogJm5ic3A7ICZuYnNwOyA8L2hlYWQ+DQogJm5ic3A7ICZuYnNwOyA8Ym9keT4NCiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgPGgxIHN0eWxlPSZxdW90O2NvbG9yOnJlZCZxdW90Oz5KdWh1IEtpbm5lcnM8L2gxPg0KICZuYnNwOyAmbmJzcDsgPC9ib2R5PiA8L2h0bWw+DQo8L3ByZT4nOwokbGFuZ1snaGVscF9hYm91dF90aXRsZSddID0gJ08gbW9kdWx1JzsKJGxhbmdbJ2hlbHBfYWJvdXRfdGV4dCddID0gJzxoMz5Qb2RyJnNjYXJvbjtrYTwvaDM+DQo8cD5VIHNrbGFkdSBzYSBHUEwsIG92YWogc29mdHZlciBWYW0gamUgcHJ1xb5lbiAmcXVvdDt1IHZpxJFlbm9tIHN0YW5qdSZxdW90Oy4gTW9saW1vIHByb8SNaXRhanRlIGxpY2VuY3UgemEgxI1pdGF2dSBpemphdnUgbyBvZHJpY2FuanUgb2Qgb2Rnb3Zvcm5vc3RpLjwvcD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEyLCBHb3JhbiBJbGljIDxhIGhyZWY9Im1haWx0bzp1bmlxdTNlQGdtYWlsLmNvbSI+PHVuaXF1M2VAZ21haWwuY29tPjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5pY2gtbWFjaC1kYXMuYXQiIHJlbD0iZXh0ZXJuYWwiPnd3dy5pY2gtbWFjaC1kYXMuYXQ8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPg0KCTxoMz5UaW08L2gzPg0KCTx1bD4NCgkJPGxpPkdvcmFuIElsaWMgKHVuaXF1MykgZy5pbGljQGktYXJ0cy5ldSA8YnIgLz53d3cuaWNoLW1hY2gtZGFzLmF0PC9saT4JDQoJCTxsaT5Sb2JlcnQgQ2FtcGJlbGwgKGNhbGd1eTEwMDApIGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcgIDxiciAvPnd3dy5jYWxndXkxMDAwLmNvbTwvbGk+CQkNCgkJPGxpPkpvbmF0aGFuIFNjaG1pZCAoRm9hbHkqKSBoaUBqb25hdGhhbnNjaG1pZC5kZSA8YnIgLz53d3cuam9uYXRoYW5zY2htaWQuZGU8L2xpPg0KCTwvdWw+DQonOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPGgzPlZlcnNpb24gMC4xPC9oMz4NCjx1bD4NCgk8bGk+SXQmIzAzOTtzIGZyZXNoISBOb3RoaW5nIGNoYW5nZWQgeWV0ITwvbGk+DQoJPGxpPlVzaW5nIEFjZSBWZXJzaW9uIDAuMi4wPC9saT4NCjwvdWw+DQo8aDM+VmVyc2lvbiAwLjI8L2gzPg0KPHVsPg0KCTxsaT5BZGRlZCBDVFJMLVMgS2V5YmluZGluZzwvbGk+DQoJPGxpPkFkZGVkIEZ1bGxzY3JlZW5tb2RlPC9saT4NCgk8bGk+QWRkZWQgRnJvbnRlbmQgSGlnaGxpZ2h0aW5nPC9saT4NCgk8bGk+VXBkYXRlZCBBY2U8L2xpPg0KPC91bD4NCjxoMz5WZXJzaW9uIDAuMi4xPC9oMz4NCjx1bD4NCgk8bGk+QWRkZWQgSW50ZXJuZXQgRXhwbG9yZXIgcHJlZmVyZW5jZTwvbGk+DQoJPGxpPlVwZGF0ZWQgQUNFIHdpdGggdGhlbWVzPC9saT4NCjwvdWw+DQo8aDM+Um9hZG1hcDwvaDM+DQo8dWw+DQoJPGxpPjxkZWw+QWRkIEZyb250ZW5kIFN5bnRheGhpZ2hsaWdodGluZzwvZGVsPjwvbGk+DQoJPGxpPjxkZWw+QWRkIEZ1bGxzY3JlZW5tb2RlPC9kZWw+PC9saT4NCgk8bGk+PGRlbD5BZGQgS2V5YmluZGluZyAoQ1RSTCtTKTwvZGVsPjwvbGk+DQoJPGxpPkFkZCBFZGl0b3IgYmVoYXZpb3IgKFZpbSwgRU1hY3MpPC9saT4NCgk8bGk+TWF5YmUgYWRkIFRvb2xiYXI8L2xpPg0KPC91bD4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4zNDc4OTQyMTAuMTMyNzMyMDAxMC4xMzI3MzIwMDEwLjEzMjczMjAwMTAuMSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMjczMjAwMTAuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ace/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ace/ace.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgogKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CiAqCiAqIENvcHlyaWdodCAoYykgMjAxMCwgQWpheC5vcmcgQi5WLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogKiAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQogKiAgICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwogKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAogKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAogKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFKQVguT1JHIEIuVi4gQkUgTElBQkxFIEZPUiBBTlkKICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwogKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAqCiAqICoqKioqIEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCgovKioKICogRGVmaW5lIGEgbW9kdWxlIGFsb25nIHdpdGggYSBwYXlsb2FkCiAqIEBwYXJhbSBtb2R1bGUgYSBuYW1lIGZvciB0aGUgcGF5bG9hZAogKiBAcGFyYW0gcGF5bG9hZCBhIGZ1bmN0aW9uIHRvIGNhbGwgd2l0aCAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSBwYXJhbXMKICovCgooZnVuY3Rpb24oKSB7Cgp2YXIgQUNFX05BTUVTUEFDRSA9ICIiOwoKdmFyIGdsb2JhbCA9IChmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pKCk7CmlmICghZ2xvYmFsICYmIHR5cGVvZiB3aW5kb3cgIT0gInVuZGVmaW5lZCIpIGdsb2JhbCA9IHdpbmRvdzsgLy8gc3RyaWN0IG1vZGUKCgppZiAoIUFDRV9OQU1FU1BBQ0UgJiYgdHlwZW9mIHJlcXVpcmVqcyAhPT0gInVuZGVmaW5lZCIpCiAgICByZXR1cm47CgoKdmFyIGRlZmluZSA9IGZ1bmN0aW9uKG1vZHVsZSwgZGVwcywgcGF5bG9hZCkgewogICAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICJzdHJpbmciKSB7CiAgICAgICAgaWYgKGRlZmluZS5vcmlnaW5hbCkKICAgICAgICAgICAgZGVmaW5lLm9yaWdpbmFsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImRyb3BwaW5nIG1vZHVsZSBiZWNhdXNlIGRlZmluZSB3YXNuXCd0IGEgc3RyaW5nLiIpOwogICAgICAgICAgICBjb25zb2xlLnRyYWNlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpCiAgICAgICAgcGF5bG9hZCA9IGRlcHM7CiAgICBpZiAoIWRlZmluZS5tb2R1bGVzW21vZHVsZV0pIHsKICAgICAgICBkZWZpbmUucGF5bG9hZHNbbW9kdWxlXSA9IHBheWxvYWQ7CiAgICAgICAgZGVmaW5lLm1vZHVsZXNbbW9kdWxlXSA9IG51bGw7CiAgICB9Cn07CgpkZWZpbmUubW9kdWxlcyA9IHt9OwpkZWZpbmUucGF5bG9hZHMgPSB7fTsKCi8qKgogKiBHZXQgYXQgZnVuY3Rpb25hbGl0eSBkZWZpbmUoKWVkIHVzaW5nIHRoZSBmdW5jdGlvbiBhYm92ZQogKi8KdmFyIF9yZXF1aXJlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZSwgY2FsbGJhY2spIHsKICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAic3RyaW5nIikgewogICAgICAgIHZhciBwYXlsb2FkID0gbG9va3VwKHBhcmVudElkLCBtb2R1bGUpOwogICAgICAgIGlmIChwYXlsb2FkICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtb2R1bGUpID09PSAiW29iamVjdCBBcnJheV0iKSB7CiAgICAgICAgdmFyIHBhcmFtcyA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gbW9kdWxlLmxlbmd0aDsgaSA8IGw7ICsraSkgewogICAgICAgICAgICB2YXIgZGVwID0gbG9va3VwKHBhcmVudElkLCBtb2R1bGVbaV0pOwogICAgICAgICAgICBpZiAoZGVwID09IHVuZGVmaW5lZCAmJiByZXF1aXJlLm9yaWdpbmFsKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBwYXJhbXMucHVzaChkZXApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgY2FsbGJhY2suYXBwbHkobnVsbCwgcGFyYW1zKSB8fCB0cnVlOwogICAgfQp9OwoKdmFyIHJlcXVpcmUgPSBmdW5jdGlvbihtb2R1bGUsIGNhbGxiYWNrKSB7CiAgICB2YXIgcGFja2FnZWRNb2R1bGUgPSBfcmVxdWlyZSgiIiwgbW9kdWxlLCBjYWxsYmFjayk7CiAgICBpZiAocGFja2FnZWRNb2R1bGUgPT0gdW5kZWZpbmVkICYmIHJlcXVpcmUub3JpZ2luYWwpCiAgICAgICAgcmV0dXJuIHJlcXVpcmUub3JpZ2luYWwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgIHJldHVybiBwYWNrYWdlZE1vZHVsZTsKfTsKCnZhciBub3JtYWxpemVNb2R1bGUgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgewogICAgLy8gbm9ybWFsaXplIHBsdWdpbiByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuaW5kZXhPZigiISIpICE9PSAtMSkgewogICAgICAgIHZhciBjaHVua3MgPSBtb2R1bGVOYW1lLnNwbGl0KCIhIik7CiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzBdKSArICIhIiArIG5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSBiYXNlICsgIi8iICsgbW9kdWxlTmFtZTsKCiAgICAgICAgd2hpbGUobW9kdWxlTmFtZS5pbmRleE9mKCIuIikgIT09IC0xICYmIHByZXZpb3VzICE9IG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gbW9kdWxlTmFtZTsKICAgICAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXC9cLlwvLywgIi8iKS5yZXBsYWNlKC9bXlwvXStcL1wuXC5cLy8sICIiKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbW9kdWxlTmFtZTsKfTsKCi8qKgogKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBsb29rdXAgbW9kdWxlTmFtZXMgYW5kIHJlc29sdmUgdGhlbSBieSBjYWxsaW5nIHRoZQogKiBkZWZpbml0aW9uIGZ1bmN0aW9uIGlmIG5lZWRlZC4KICovCnZhciBsb29rdXAgPSBmdW5jdGlvbihwYXJlbnRJZCwgbW9kdWxlTmFtZSkgewogICAgbW9kdWxlTmFtZSA9IG5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgbW9kdWxlTmFtZSk7CgogICAgdmFyIG1vZHVsZSA9IGRlZmluZS5tb2R1bGVzW21vZHVsZU5hbWVdOwogICAgaWYgKCFtb2R1bGUpIHsKICAgICAgICBtb2R1bGUgPSBkZWZpbmUucGF5bG9hZHNbbW9kdWxlTmFtZV07CiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgdmFyIGV4cG9ydHMgPSB7fTsKICAgICAgICAgICAgdmFyIG1vZCA9IHsKICAgICAgICAgICAgICAgIGlkOiBtb2R1bGVOYW1lLAogICAgICAgICAgICAgICAgdXJpOiAnJywKICAgICAgICAgICAgICAgIGV4cG9ydHM6IGV4cG9ydHMsCiAgICAgICAgICAgICAgICBwYWNrYWdlZDogdHJ1ZQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdmFyIHJlcSA9IGZ1bmN0aW9uKG1vZHVsZSwgY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHJldHVybiBfcmVxdWlyZShtb2R1bGVOYW1lLCBtb2R1bGUsIGNhbGxiYWNrKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG1vZHVsZShyZXEsIGV4cG9ydHMsIG1vZCk7CiAgICAgICAgICAgIGV4cG9ydHMgPSByZXR1cm5WYWx1ZSB8fCBtb2QuZXhwb3J0czsKICAgICAgICAgICAgZGVmaW5lLm1vZHVsZXNbbW9kdWxlTmFtZV0gPSBleHBvcnRzOwogICAgICAgICAgICBkZWxldGUgZGVmaW5lLnBheWxvYWRzW21vZHVsZU5hbWVdOwogICAgICAgIH0KICAgICAgICBtb2R1bGUgPSBkZWZpbmUubW9kdWxlc1ttb2R1bGVOYW1lXSA9IGV4cG9ydHMgfHwgbW9kdWxlOwogICAgfQogICAgcmV0dXJuIG1vZHVsZTsKfTsKCmZ1bmN0aW9uIGV4cG9ydEFjZShucykgewogICAgdmFyIHJvb3QgPSBnbG9iYWw7CiAgICBpZiAobnMpIHsKICAgICAgICBpZiAoIWdsb2JhbFtuc10pCiAgICAgICAgICAgIGdsb2JhbFtuc10gPSB7fTsKICAgICAgICByb290ID0gZ2xvYmFsW25zXTsKICAgIH0KCiAgICBpZiAoIXJvb3QuZGVmaW5lIHx8ICFyb290LmRlZmluZS5wYWNrYWdlZCkgewogICAgICAgIGRlZmluZS5vcmlnaW5hbCA9IHJvb3QuZGVmaW5lOwogICAgICAgIHJvb3QuZGVmaW5lID0gZGVmaW5lOwogICAgICAgIHJvb3QuZGVmaW5lLnBhY2thZ2VkID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoIXJvb3QucmVxdWlyZSB8fCAhcm9vdC5yZXF1aXJlLnBhY2thZ2VkKSB7CiAgICAgICAgcmVxdWlyZS5vcmlnaW5hbCA9IHJvb3QucmVxdWlyZTsKICAgICAgICByb290LnJlcXVpcmUgPSByZXF1aXJlOwogICAgICAgIHJvb3QucmVxdWlyZS5wYWNrYWdlZCA9IHRydWU7CiAgICB9Cn0KCmV4cG9ydEFjZShBQ0VfTkFNRVNQQUNFKTsKCn0pKCk7CgpkZWZpbmUoImFjZS9saWIvcmVnZXhwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgogICAgdmFyIHJlYWwgPSB7CiAgICAgICAgICAgIGV4ZWM6IFJlZ0V4cC5wcm90b3R5cGUuZXhlYywKICAgICAgICAgICAgdGVzdDogUmVnRXhwLnByb3RvdHlwZS50ZXN0LAogICAgICAgICAgICBtYXRjaDogU3RyaW5nLnByb3RvdHlwZS5tYXRjaCwKICAgICAgICAgICAgcmVwbGFjZTogU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlLAogICAgICAgICAgICBzcGxpdDogU3RyaW5nLnByb3RvdHlwZS5zcGxpdAogICAgICAgIH0sCiAgICAgICAgY29tcGxpYW50RXhlY05wY2cgPSByZWFsLmV4ZWMuY2FsbCgvKCk/Py8sICIiKVsxXSA9PT0gdW5kZWZpbmVkLCAvLyBjaGVjayBgZXhlY2AgaGFuZGxpbmcgb2Ygbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXBzCiAgICAgICAgY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgeCA9IC9eL2c7CiAgICAgICAgICAgIHJlYWwudGVzdC5jYWxsKHgsICIiKTsKICAgICAgICAgICAgcmV0dXJuICF4Lmxhc3RJbmRleDsKICAgICAgICB9KCk7CgogICAgaWYgKGNvbXBsaWFudExhc3RJbmRleEluY3JlbWVudCAmJiBjb21wbGlhbnRFeGVjTnBjZykKICAgICAgICByZXR1cm47CiAgICBSZWdFeHAucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICAgICAgdmFyIG1hdGNoID0gcmVhbC5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksCiAgICAgICAgICAgIG5hbWUsIHIyOwogICAgICAgIGlmICggdHlwZW9mKHN0cikgPT0gJ3N0cmluZycgJiYgbWF0Y2gpIHsKICAgICAgICAgICAgaWYgKCFjb21wbGlhbnRFeGVjTnBjZyAmJiBtYXRjaC5sZW5ndGggPiAxICYmIGluZGV4T2YobWF0Y2gsICIiKSA+IC0xKSB7CiAgICAgICAgICAgICAgICByMiA9IFJlZ0V4cCh0aGlzLnNvdXJjZSwgcmVhbC5yZXBsYWNlLmNhbGwoZ2V0TmF0aXZlRmxhZ3ModGhpcyksICJnIiwgIiIpKTsKICAgICAgICAgICAgICAgIHJlYWwucmVwbGFjZS5jYWxsKHN0ci5zbGljZShtYXRjaC5pbmRleCksIHIyLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoW2ldID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLl94cmVnZXhwICYmIHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG1hdGNoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMuX3hyZWdleHAuY2FwdHVyZU5hbWVzW2kgLSAxXTsKICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSkKICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFtuYW1lXSA9IG1hdGNoW2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50ICYmIHRoaXMuZ2xvYmFsICYmICFtYXRjaFswXS5sZW5ndGggJiYgKHRoaXMubGFzdEluZGV4ID4gbWF0Y2guaW5kZXgpKQogICAgICAgICAgICAgICAgdGhpcy5sYXN0SW5kZXgtLTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgfTsKICAgIGlmICghY29tcGxpYW50TGFzdEluZGV4SW5jcmVtZW50KSB7CiAgICAgICAgUmVnRXhwLnByb3RvdHlwZS50ZXN0ID0gZnVuY3Rpb24gKHN0cikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSByZWFsLmV4ZWMuY2FsbCh0aGlzLCBzdHIpOwogICAgICAgICAgICBpZiAobWF0Y2ggJiYgdGhpcy5nbG9iYWwgJiYgIW1hdGNoWzBdLmxlbmd0aCAmJiAodGhpcy5sYXN0SW5kZXggPiBtYXRjaC5pbmRleCkpCiAgICAgICAgICAgICAgICB0aGlzLmxhc3RJbmRleC0tOwogICAgICAgICAgICByZXR1cm4gISFtYXRjaDsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE5hdGl2ZUZsYWdzIChyZWdleCkgewogICAgICAgIHJldHVybiAocmVnZXguZ2xvYmFsICAgICA/ICJnIiA6ICIiKSArCiAgICAgICAgICAgICAgIChyZWdleC5pZ25vcmVDYXNlID8gImkiIDogIiIpICsKICAgICAgICAgICAgICAgKHJlZ2V4Lm11bHRpbGluZSAgPyAibSIgOiAiIikgKwogICAgICAgICAgICAgICAocmVnZXguZXh0ZW5kZWQgICA/ICJ4IiA6ICIiKSArIC8vIFByb3Bvc2VkIGZvciBFUzQ7IGluY2x1ZGVkIGluIEFTMwogICAgICAgICAgICAgICAocmVnZXguc3RpY2t5ICAgICA/ICJ5IiA6ICIiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRleE9mIChhcnJheSwgaXRlbSwgZnJvbSkgewogICAgICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikgLy8gVXNlIHRoZSBuYXRpdmUgYXJyYXkgbWV0aG9kIGlmIGF2YWlsYWJsZQogICAgICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtLCBmcm9tKTsKICAgICAgICBmb3IgKHZhciBpID0gZnJvbSB8fCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGFycmF5W2ldID09PSBpdGVtKQogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCn0pOwoKZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZnVuY3Rpb24gRW1wdHkoKSB7fQoKaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgewogICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsCiAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewoKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGF0LAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgICAgaWYodGFyZ2V0LnByb3RvdHlwZSkgewogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOwogICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJvdW5kOwogICAgfTsKfQp2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKdmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKdmFyIHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5zbGljZTsKdmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7CnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKdmFyIGRlZmluZUdldHRlcjsKdmFyIGRlZmluZVNldHRlcjsKdmFyIGxvb2t1cEdldHRlcjsKdmFyIGxvb2t1cFNldHRlcjsKdmFyIHN1cHBvcnRzQWNjZXNzb3JzOwppZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTsKICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRlcl9fKTsKICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKfQppZiAoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCAhPSAyKSB7CiAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4CiAgICAgICAgZnVuY3Rpb24gbWFrZUFycmF5KGwpIHsKICAgICAgICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobCsyKTsKICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwOwogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9CiAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTsKICAgICAgICAKICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksIG1ha2VBcnJheSgyMCkpOwogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7CgogICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxlbmd0aDsgLy80NgogICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCAiWFhYIik7IC8vIGFkZCBvbmUgZWxlbWVudAoKICAgICAgICBsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aAoKICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7Ly8gaGFzIHJpZ2h0IHNwbGljZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGJ1Z3MKICAgICAgICB9CiAgICB9KCkpIHsvL0lFIDYvNwogICAgICAgIHZhciBhcnJheV9zcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOwogICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIFsKICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0LAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2b2lkIDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVDb3VudAogICAgICAgICAgICAgICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSkKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2Ugey8vSUU4CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHBvcywgcmVtb3ZlQ291bnQpewogICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7CiAgICAgICAgICAgICAgICBpZiAocG9zID4gbGVuZ3RoKQogICAgICAgICAgICAgICAgICAgIHBvcyA9IGxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICBwb3MgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpCiAgICAgICAgICAgICAgICByZW1vdmVDb3VudCA9IGxlbmd0aCAtIHBvczsKCiAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7CiAgICAgICAgICAgIHZhciBpbnNlcnQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgICAgICAgIHZhciBhZGQgPSBpbnNlcnQubGVuZ3RoOyAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBNYXRoLm1pbihyZW1vdmVDb3VudCwgbGVuZ3RoIC0gcG9zKTsKICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9zICsgcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxOZXdQb3MgPSB0YWlsT2xkUG9zICsgYWRkIC0gcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxDb3VudCA9IGxlbmd0aCAtIHRhaWxPbGRQb3M7CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5ndGggLSByZW1vdmU7CgogICAgICAgICAgICAgICAgaWYgKHRhaWxOZXdQb3MgPCB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbENvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBCCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gdGFpbENvdW50OyBpLS07ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBlbHNlLCBhZGQgPT0gcmVtb3ZlIChub3RoaW5nIHRvIGRvKQoKICAgICAgICAgICAgICAgIGlmIChhZGQgJiYgcG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmU7IC8vIHRydW5jYXRlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmUgKyBhZGQ7IC8vIHJlc2VydmVzIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ldID0gaW5zZXJ0W2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICAgICB9OwogICAgfQp9CmlmICghQXJyYXkuaXNBcnJheSkgewogICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CiAgICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CiAgICB9Owp9CnZhciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAogICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVkU3RyaW5nKTsKCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwKICAgICAgICAgICAgaSA9IC0xLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7CiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsKICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgcmVzdWx0ID0gW10sCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOwogICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgewogICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewogICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7CiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIHJlc3VsdDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICAgICB9CgogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChpLS0pOwoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mIHx8IChbMCwgMV0uaW5kZXhPZigxLCAyKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CgogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOwogICAgICAgIH0KICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOwogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7CiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7CiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoCiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/CiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgOgogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdAogICAgICAgICk7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgewogICAgdmFyIEVSUl9OT05fT0JKRUNUID0gIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLW9iamVjdDogIjsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7CiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsKICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CiAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CgogICAgICAgICAgICB2YXIgZ2V0dGVyID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwoKICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChnZXR0ZXIpIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOwogICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3JpcHRvci5zZXQgPSBzZXR0ZXI7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgewogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgewogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgfTsKfQppZiAoIU9iamVjdC5jcmVhdGUpIHsKICAgIHZhciBjcmVhdGVFbXB0eTsKICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbCkgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVsbCB9OwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZW1wdHkgPSB7fTsKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBlbXB0eSkKICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDsKICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0b3IgPQogICAgICAgICAgICBlbXB0eS5oYXNPd25Qcm9wZXJ0eSA9CiAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID0KICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVPZiA9CiAgICAgICAgICAgIGVtcHR5LnRvTG9jYWxlU3RyaW5nID0KICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPQogICAgICAgICAgICBlbXB0eS52YWx1ZU9mID0KICAgICAgICAgICAgZW1wdHkuX19wcm90b19fID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5OwogICAgICAgIH0KICAgIH0KCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgewogICAgICAgIHZhciBvYmplY3Q7CiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOwogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQoKZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRpbmVsIiwge30pOwogICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgfQp9CmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsKICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICAgIH0KfQoKaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgogICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOwoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHsKICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKICAgICAgICBpZiAoKHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9ICJmdW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOwogICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CgogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJnZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgewogICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5zZWFsKSB7CiAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuZnJlZXplKSB7CiAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CnRyeSB7CiAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0pKE9iamVjdC5mcmVlemUpOwp9CmlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5pc1NlYWxlZCkgewogICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0Zyb3plbikgewogICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsKICAgIE9iamVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKICAgICAgICB9CiAgICAgICAgdmFyIG5hbWUgPSAnJzsKICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7CiAgICAgICAgICAgIG5hbWUgKz0gJz8nOwogICAgICAgIH0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOwogICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1lKTsKICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOwogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH07Cn0KaWYgKCFPYmplY3Qua2V5cykgewogICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKICAgICAgICBkb250RW51bXMgPSBbCiAgICAgICAgICAgICJ0b1N0cmluZyIsCiAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCiAgICAgICAgICAgICJ2YWx1ZU9mIiwKICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwKICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAogICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiLAogICAgICAgICAgICAiY29uc3RydWN0b3IiCiAgICAgICAgXSwKICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOwoKICAgIGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOwogICAgfQoKICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8CiAgICAgICAgICAgIG9iamVjdCA9PT0gbnVsbAogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIga2V5cyA9IFtdOwogICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7CiAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRvbnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsKICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9udEVudW0pKSB7CiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRFbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ga2V5czsKICAgIH07Cgp9CmlmICghRGF0ZS5ub3cpIHsKICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIH07Cn0KdmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKICAgICJcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgiICsKICAgICJcdTIwMjlcdUZFRkYiOwppZiAoIVN0cmluZy5wcm90b3R5cGUudHJpbSkgewogICAgd3MgPSAiWyIgKyB3cyArICJdIjsKICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAogICAgICAgIHRyaW1FbmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgIiIpOwogICAgfTsKfQoKZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKICAgIG4gPSArbjsKICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFOCiAgICAgICAgbiA9IDA7CiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CiAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTsKICAgIH0KICAgIHJldHVybiBuOwp9CgpmdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5wdXQ7CiAgICByZXR1cm4gKAogICAgICAgIGlucHV0ID09PSBudWxsIHx8CiAgICAgICAgdHlwZSA9PT0gInVuZGVmaW5lZCIgfHwKICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKICAgICAgICB0eXBlID09PSAibnVtYmVyIiB8fAogICAgICAgIHR5cGUgPT09ICJzdHJpbmciCiAgICApOwp9CgpmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHZhbCwgdmFsdWVPZiwgdG9TdHJpbmc7CiAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7CiAgICBpZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB2YWx1ZU9mLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZzsKICAgIGlmICh0eXBlb2YgdG9TdHJpbmcgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB0b1N0cmluZy5jYWxsKGlucHV0KTsKICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKfQp2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgewogICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOwogICAgfQogICAgcmV0dXJuIE9iamVjdChvKTsKfTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9yZWdleHAiLCJhY2UvbGliL2VzNS1zaGltIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpyZXF1aXJlKCIuL3JlZ2V4cCIpOwpyZXF1aXJlKCIuL2VzNS1zaGltIik7CmlmICh0eXBlb2YgRWxlbWVudCAhPSAidW5kZWZpbmVkIiAmJiAhRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKSB7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsICJyZW1vdmUiLCB7CiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHsgdGhpcy5wYXJlbnROb2RlICYmIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTsgfQogICAgfSk7Cn0KCgp9KTsKCmRlZmluZSgiYWNlL2xpYi91c2VyYWdlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKZXhwb3J0cy5PUyA9IHsKICAgIExJTlVYOiAiTElOVVgiLAogICAgTUFDOiAiTUFDIiwKICAgIFdJTkRPV1M6ICJXSU5ET1dTIgp9OwpleHBvcnRzLmdldE9TID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoZXhwb3J0cy5pc01hYykgewogICAgICAgIHJldHVybiBleHBvcnRzLk9TLk1BQzsKICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5pc0xpbnV4KSB7CiAgICAgICAgcmV0dXJuIGV4cG9ydHMuT1MuTElOVVg7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBleHBvcnRzLk9TLldJTkRPV1M7CiAgICB9Cn07CnZhciBfbmF2aWdhdG9yID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IiA/IG5hdmlnYXRvciA6IHt9OwoKdmFyIG9zID0gKC9tYWN8d2lufGxpbnV4L2kuZXhlYyhfbmF2aWdhdG9yLnBsYXRmb3JtKSB8fCBbIm90aGVyIl0pWzBdLnRvTG93ZXJDYXNlKCk7CnZhciB1YSA9IF9uYXZpZ2F0b3IudXNlckFnZW50IHx8ICIiOwp2YXIgYXBwTmFtZSA9IF9uYXZpZ2F0b3IuYXBwTmFtZSB8fCAiIjsKZXhwb3J0cy5pc1dpbiA9IChvcyA9PSAid2luIik7CmV4cG9ydHMuaXNNYWMgPSAob3MgPT0gIm1hYyIpOwpleHBvcnRzLmlzTGludXggPSAob3MgPT0gImxpbnV4Iik7CmV4cG9ydHMuaXNJRSA9IAogICAgKGFwcE5hbWUgPT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciIgfHwgYXBwTmFtZS5pbmRleE9mKCJNU0FwcEhvc3QiKSA+PSAwKQogICAgPyBwYXJzZUZsb2F0KCh1YS5tYXRjaCgvKD86TVNJRSB8VHJpZGVudFwvWzAtOV0rW1wuMC05XSs7LipydjopKFswLTldK1tcLjAtOV0rKS8pfHxbXSlbMV0pCiAgICA6IHBhcnNlRmxvYXQoKHVhLm1hdGNoKC8oPzpUcmlkZW50XC9bMC05XStbXC4wLTldKzsuKnJ2OikoWzAtOV0rW1wuMC05XSspLyl8fFtdKVsxXSk7IC8vIGZvciBpZQogICAgCmV4cG9ydHMuaXNPbGRJRSA9IGV4cG9ydHMuaXNJRSAmJiBleHBvcnRzLmlzSUUgPCA5OwpleHBvcnRzLmlzR2Vja28gPSBleHBvcnRzLmlzTW96aWxsYSA9IHVhLm1hdGNoKC8gR2Vja29cL1xkKy8pOwpleHBvcnRzLmlzT3BlcmEgPSB0eXBlb2Ygb3BlcmEgPT0gIm9iamVjdCIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSkgPT0gIltvYmplY3QgT3BlcmFdIjsKZXhwb3J0cy5pc1dlYktpdCA9IHBhcnNlRmxvYXQodWEuc3BsaXQoIldlYktpdC8iKVsxXSkgfHwgdW5kZWZpbmVkOwoKZXhwb3J0cy5pc0Nocm9tZSA9IHBhcnNlRmxvYXQodWEuc3BsaXQoIiBDaHJvbWUvIilbMV0pIHx8IHVuZGVmaW5lZDsKCmV4cG9ydHMuaXNFZGdlID0gcGFyc2VGbG9hdCh1YS5zcGxpdCgiIEVkZ2UvIilbMV0pIHx8IHVuZGVmaW5lZDsKCmV4cG9ydHMuaXNBSVIgPSB1YS5pbmRleE9mKCJBZG9iZUFJUiIpID49IDA7CgpleHBvcnRzLmlzQW5kcm9pZCA9IHVhLmluZGV4T2YoIkFuZHJvaWQiKSA+PSAwOwoKZXhwb3J0cy5pc0Nocm9tZU9TID0gdWEuaW5kZXhPZigiIENyT1MgIikgPj0gMDsKCmV4cG9ydHMuaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1YSkgJiYgIXdpbmRvdy5NU1N0cmVhbTsKCmlmIChleHBvcnRzLmlzSU9TKSBleHBvcnRzLmlzTWFjID0gdHJ1ZTsKCmV4cG9ydHMuaXNNb2JpbGUgPSBleHBvcnRzLmlzSU9TIHx8IGV4cG9ydHMuaXNBbmRyb2lkOwoKfSk7CgpkZWZpbmUoImFjZS9saWIvZG9tIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi91c2VyYWdlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL3VzZXJhZ2VudCIpOyAKdmFyIFhIVE1MX05TID0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOwoKZXhwb3J0cy5idWlsZERvbSA9IGZ1bmN0aW9uIGJ1aWxkRG9tKGFyciwgcGFyZW50LCByZWZzKSB7CiAgICBpZiAodHlwZW9mIGFyciA9PSAic3RyaW5nIiAmJiBhcnIpIHsKICAgICAgICB2YXIgdHh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYXJyKTsKICAgICAgICBpZiAocGFyZW50KQogICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodHh0KTsKICAgICAgICByZXR1cm4gdHh0OwogICAgfQogICAgCiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkKICAgICAgICByZXR1cm4gYXJyOwogICAgaWYgKHR5cGVvZiBhcnJbMF0gIT0gInN0cmluZyIgfHwgIWFyclswXSkgewogICAgICAgIHZhciBlbHMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgY2ggPSBidWlsZERvbShhcnJbaV0sIHBhcmVudCwgcmVmcyk7CiAgICAgICAgICAgIGNoICYmIGVscy5wdXNoKGNoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVsczsKICAgIH0KICAgIAogICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhcnJbMF0pOwogICAgdmFyIG9wdGlvbnMgPSBhcnJbMV07CiAgICB2YXIgY2hpbGRJbmRleCA9IDE7CiAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucyA9PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJheShvcHRpb25zKSkKICAgICAgICBjaGlsZEluZGV4ID0gMjsKICAgIGZvciAodmFyIGkgPSBjaGlsZEluZGV4OyBpIDwgYXJyLmxlbmd0aDsgaSsrKQogICAgICAgIGJ1aWxkRG9tKGFycltpXSwgZWwsIHJlZnMpOwogICAgaWYgKGNoaWxkSW5kZXggPT0gMikgewogICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24obikgewogICAgICAgICAgICB2YXIgdmFsID0gb3B0aW9uc1tuXTsKICAgICAgICAgICAgaWYgKG4gPT09ICJjbGFzcyIpIHsKICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSA9IEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5qb2luKCIgIikgOiB2YWw7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PSAiZnVuY3Rpb24iIHx8IG4gPT0gInZhbHVlIikgewogICAgICAgICAgICAgICAgZWxbbl0gPSB2YWw7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobiA9PT0gInJlZiIpIHsKICAgICAgICAgICAgICAgIGlmIChyZWZzKSByZWZzW3ZhbF0gPSBlbDsKICAgICAgICAgICAgfSBlbHNlIGlmICh2YWwgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKG4sIHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIGlmIChwYXJlbnQpCiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGVsKTsKICAgIHJldHVybiBlbDsKfTsKCmV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFkID0gZnVuY3Rpb24oZG9jKSB7CiAgICBpZiAoIWRvYykKICAgICAgICBkb2MgPSBkb2N1bWVudDsKICAgIHJldHVybiBkb2MuaGVhZCB8fCBkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50Owp9OwoKZXhwb3J0cy5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odGFnLCBucykgewogICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyA/CiAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5zIHx8IFhIVE1MX05TLCB0YWcpIDoKICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7Cn07CgpleHBvcnRzLnJlbW92ZUNoaWxkcmVuID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKfTsKCmV4cG9ydHMuY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbih0ZXh0Q29udGVudCwgZWxlbWVudCkgewogICAgdmFyIGRvYyA9IGVsZW1lbnQgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiBkb2N1bWVudDsKICAgIHJldHVybiBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dENvbnRlbnQpOwp9OwoKZXhwb3J0cy5jcmVhdGVGcmFnbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZhciBkb2MgPSBlbGVtZW50ID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogZG9jdW1lbnQ7CiAgICByZXR1cm4gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKfTsKCmV4cG9ydHMuaGFzQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgewogICAgdmFyIGNsYXNzZXMgPSAoZWwuY2xhc3NOYW1lICsgIiIpLnNwbGl0KC9ccysvZyk7CiAgICByZXR1cm4gY2xhc3Nlcy5pbmRleE9mKG5hbWUpICE9PSAtMTsKfTsKZXhwb3J0cy5hZGRDc3NDbGFzcyA9IGZ1bmN0aW9uKGVsLCBuYW1lKSB7CiAgICBpZiAoIWV4cG9ydHMuaGFzQ3NzQ2xhc3MoZWwsIG5hbWUpKSB7CiAgICAgICAgZWwuY2xhc3NOYW1lICs9ICIgIiArIG5hbWU7CiAgICB9Cn07CmV4cG9ydHMucmVtb3ZlQ3NzQ2xhc3MgPSBmdW5jdGlvbihlbCwgbmFtZSkgewogICAgdmFyIGNsYXNzZXMgPSBlbC5jbGFzc05hbWUuc3BsaXQoL1xzKy9nKTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgdmFyIGluZGV4ID0gY2xhc3Nlcy5pbmRleE9mKG5hbWUpOwogICAgICAgIGlmIChpbmRleCA9PSAtMSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2xhc3Nlcy5zcGxpY2UoaW5kZXgsIDEpOwogICAgfQogICAgZWwuY2xhc3NOYW1lID0gY2xhc3Nlcy5qb2luKCIgIik7Cn07CgpleHBvcnRzLnRvZ2dsZUNzc0NsYXNzID0gZnVuY3Rpb24oZWwsIG5hbWUpIHsKICAgIHZhciBjbGFzc2VzID0gZWwuY2xhc3NOYW1lLnNwbGl0KC9ccysvZyksIGFkZCA9IHRydWU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHZhciBpbmRleCA9IGNsYXNzZXMuaW5kZXhPZihuYW1lKTsKICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGFkZCA9IGZhbHNlOwogICAgICAgIGNsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTsKICAgIH0KICAgIGlmIChhZGQpCiAgICAgICAgY2xhc3Nlcy5wdXNoKG5hbWUpOwoKICAgIGVsLmNsYXNzTmFtZSA9IGNsYXNzZXMuam9pbigiICIpOwogICAgcmV0dXJuIGFkZDsKfTsKZXhwb3J0cy5zZXRDc3NDbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGNsYXNzTmFtZSwgaW5jbHVkZSkgewogICAgaWYgKGluY2x1ZGUpIHsKICAgICAgICBleHBvcnRzLmFkZENzc0NsYXNzKG5vZGUsIGNsYXNzTmFtZSk7CiAgICB9IGVsc2UgewogICAgICAgIGV4cG9ydHMucmVtb3ZlQ3NzQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTsKICAgIH0KfTsKCmV4cG9ydHMuaGFzQ3NzU3RyaW5nID0gZnVuY3Rpb24oaWQsIGRvYykgewogICAgdmFyIGluZGV4ID0gMCwgc2hlZXRzOwogICAgZG9jID0gZG9jIHx8IGRvY3VtZW50OwogICAgaWYgKChzaGVldHMgPSBkb2MucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSkpIHsKICAgICAgICB3aGlsZSAoaW5kZXggPCBzaGVldHMubGVuZ3RoKQogICAgICAgICAgICBpZiAoc2hlZXRzW2luZGV4KytdLmlkID09PSBpZCkKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9OwoKZXhwb3J0cy5pbXBvcnRDc3NTdHJpbmcgPSBmdW5jdGlvbiBpbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCwgaWQsIHRhcmdldCkgewogICAgdmFyIGNvbnRhaW5lciA9IHRhcmdldDsKICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuZ2V0Um9vdE5vZGUpIHsKICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudDsKICAgIH0gZWxzZSB7CiAgICAgICAgY29udGFpbmVyID0gdGFyZ2V0LmdldFJvb3ROb2RlKCk7CiAgICAgICAgaWYgKCFjb250YWluZXIgfHwgY29udGFpbmVyID09IHRhcmdldCkKICAgICAgICAgICAgY29udGFpbmVyID0gZG9jdW1lbnQ7CiAgICB9CiAgICAKICAgIHZhciBkb2MgPSBjb250YWluZXIub3duZXJEb2N1bWVudCB8fCBjb250YWluZXI7CiAgICBpZiAoaWQgJiYgZXhwb3J0cy5oYXNDc3NTdHJpbmcoaWQsIGNvbnRhaW5lcikpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAKICAgIGlmIChpZCkKICAgICAgICBjc3NUZXh0ICs9ICJcbi8qIyBzb3VyY2VVUkw9YWNlL2Nzcy8iICsgaWQgKyAiICovIjsKICAgIAogICAgdmFyIHN0eWxlID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jLmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTsKICAgIGlmIChpZCkKICAgICAgICBzdHlsZS5pZCA9IGlkOwoKICAgIGlmIChjb250YWluZXIgPT0gZG9jKQogICAgICAgIGNvbnRhaW5lciA9IGV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFkKGRvYyk7CiAgICBjb250YWluZXIuaW5zZXJ0QmVmb3JlKHN0eWxlLCBjb250YWluZXIuZmlyc3RDaGlsZCk7Cn07CgpleHBvcnRzLmltcG9ydENzc1N0eWxzaGVldCA9IGZ1bmN0aW9uKHVyaSwgZG9jKSB7CiAgICBleHBvcnRzLmJ1aWxkRG9tKFsibGluayIsIHtyZWw6ICJzdHlsZXNoZWV0IiwgaHJlZjogdXJpfV0sIGV4cG9ydHMuZ2V0RG9jdW1lbnRIZWFkKGRvYykpOwp9OwpleHBvcnRzLnNjcm9sbGJhcldpZHRoID0gZnVuY3Rpb24oZG9jdW1lbnQpIHsKICAgIHZhciBpbm5lciA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudCgiYWNlX2lubmVyIik7CiAgICBpbm5lci5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgIGlubmVyLnN0eWxlLm1pbldpZHRoID0gIjBweCI7CiAgICBpbm5lci5zdHlsZS5oZWlnaHQgPSAiMjAwcHgiOwogICAgaW5uZXIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CgogICAgdmFyIG91dGVyID0gZXhwb3J0cy5jcmVhdGVFbGVtZW50KCJhY2Vfb3V0ZXIiKTsKICAgIHZhciBzdHlsZSA9IG91dGVyLnN0eWxlOwoKICAgIHN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgIHN0eWxlLmxlZnQgPSAiLTEwMDAwcHgiOwogICAgc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKICAgIHN0eWxlLndpZHRoID0gIjIwMHB4IjsKICAgIHN0eWxlLm1pbldpZHRoID0gIjBweCI7CiAgICBzdHlsZS5oZWlnaHQgPSAiMTUwcHgiOwogICAgc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CgogICAgb3V0ZXIuYXBwZW5kQ2hpbGQoaW5uZXIpOwoKICAgIHZhciBib2R5ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50OwogICAgYm9keS5hcHBlbmRDaGlsZChvdXRlcik7CgogICAgdmFyIG5vU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7CgogICAgc3R5bGUub3ZlcmZsb3cgPSAic2Nyb2xsIjsKICAgIHZhciB3aXRoU2Nyb2xsYmFyID0gaW5uZXIub2Zmc2V0V2lkdGg7CgogICAgaWYgKG5vU2Nyb2xsYmFyID09IHdpdGhTY3JvbGxiYXIpIHsKICAgICAgICB3aXRoU2Nyb2xsYmFyID0gb3V0ZXIuY2xpZW50V2lkdGg7CiAgICB9CgogICAgYm9keS5yZW1vdmVDaGlsZChvdXRlcik7CgogICAgcmV0dXJuIG5vU2Nyb2xsYmFyLXdpdGhTY3JvbGxiYXI7Cn07CgppZiAodHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiKSB7CiAgICBleHBvcnRzLmltcG9ydENzc1N0cmluZyA9IGZ1bmN0aW9uKCkge307Cn0KCmV4cG9ydHMuY29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHN0eWxlKSB7CiAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpIHx8IHt9Owp9OwoKZXhwb3J0cy5zZXRTdHlsZSA9IGZ1bmN0aW9uKHN0eWxlcywgcHJvcGVydHksIHZhbHVlKSB7CiAgICBpZiAoc3R5bGVzW3Byb3BlcnR5XSAhPT0gdmFsdWUpIHsKICAgICAgICBzdHlsZXNbcHJvcGVydHldID0gdmFsdWU7CiAgICB9Cn07CgpleHBvcnRzLkhBU19DU1NfQU5JTUFUSU9OID0gZmFsc2U7CmV4cG9ydHMuSEFTX0NTU19UUkFOU0ZPUk1TID0gZmFsc2U7CmV4cG9ydHMuSElfRFBJID0gdXNlcmFnZW50LmlzV2luCiAgICA/IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID49IDEuNQogICAgOiB0cnVlOwoKaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gInVuZGVmaW5lZCIpIHsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGlmIChleHBvcnRzLkhJX0RQSSAmJiBkaXYuc3R5bGUudHJhbnNmb3JtICAhPT0gdW5kZWZpbmVkKQogICAgICAgIGV4cG9ydHMuSEFTX0NTU19UUkFOU0ZPUk1TID0gdHJ1ZTsKICAgIGlmICghdXNlcmFnZW50LmlzRWRnZSAmJiB0eXBlb2YgZGl2LnN0eWxlLmFuaW1hdGlvbk5hbWUgIT09ICJ1bmRlZmluZWQiKQogICAgICAgIGV4cG9ydHMuSEFTX0NTU19BTklNQVRJT04gPSB0cnVlOwogICAgZGl2ID0gbnVsbDsKfQoKaWYgKGV4cG9ydHMuSEFTX0NTU19UUkFOU0ZPUk1TKSB7CiAgICBleHBvcnRzLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIHR4LCB0eSkgewogICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZSgiICsgTWF0aC5yb3VuZCh0eCkgKyAicHgsICIgKyBNYXRoLnJvdW5kKHR5KSArInB4KSI7CiAgICB9Owp9IGVsc2UgewogICAgZXhwb3J0cy50cmFuc2xhdGUgPSBmdW5jdGlvbihlbGVtZW50LCB0eCwgdHkpIHsKICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IE1hdGgucm91bmQodHkpICsgInB4IjsKICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBNYXRoLnJvdW5kKHR4KSArICJweCI7CiAgICB9Owp9Cgp9KTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuaW5oZXJpdHMgPSBmdW5jdGlvbihjdG9yLCBzdXBlckN0b3IpIHsKICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yOwogICAgY3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ3Rvci5wcm90b3R5cGUsIHsKICAgICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgICAgICB2YWx1ZTogY3RvciwKICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgICB9CiAgICB9KTsKfTsKCmV4cG9ydHMubWl4aW4gPSBmdW5jdGlvbihvYmosIG1peGluKSB7CiAgICBmb3IgKHZhciBrZXkgaW4gbWl4aW4pIHsKICAgICAgICBvYmpba2V5XSA9IG1peGluW2tleV07CiAgICB9CiAgICByZXR1cm4gb2JqOwp9OwoKZXhwb3J0cy5pbXBsZW1lbnQgPSBmdW5jdGlvbihwcm90bywgbWl4aW4pIHsKICAgIGV4cG9ydHMubWl4aW4ocHJvdG8sIG1peGluKTsKfTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2tleXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vb29wIik7CnZhciBLZXlzID0gKGZ1bmN0aW9uKCkgewogICAgdmFyIHJldCA9IHsKICAgICAgICBNT0RJRklFUl9LRVlTOiB7CiAgICAgICAgICAgIDE2OiAnU2hpZnQnLCAxNzogJ0N0cmwnLCAxODogJ0FsdCcsIDIyNDogJ01ldGEnLAogICAgICAgICAgICA5MTogJ01ldGFMZWZ0JywgOTI6ICdNZXRhUmlnaHQnLCA5MzogJ0NvbnRleHRNZW51JwogICAgICAgIH0sCgogICAgICAgIEtFWV9NT0RTOiB7CiAgICAgICAgICAgICJjdHJsIjogMSwgImFsdCI6IDIsICJvcHRpb24iIDogMiwgInNoaWZ0IjogNCwKICAgICAgICAgICAgInN1cGVyIjogOCwgIm1ldGEiOiA4LCAiY29tbWFuZCI6IDgsICJjbWQiOiA4CiAgICAgICAgfSwKCiAgICAgICAgRlVOQ1RJT05fS0VZUyA6IHsKICAgICAgICAgICAgOCAgOiAiQmFja3NwYWNlIiwKICAgICAgICAgICAgOSAgOiAiVGFiIiwKICAgICAgICAgICAgMTMgOiAiUmV0dXJuIiwKICAgICAgICAgICAgMTkgOiAiUGF1c2UiLAogICAgICAgICAgICAyNyA6ICJFc2MiLAogICAgICAgICAgICAzMiA6ICJTcGFjZSIsCiAgICAgICAgICAgIDMzIDogIlBhZ2VVcCIsCiAgICAgICAgICAgIDM0IDogIlBhZ2VEb3duIiwKICAgICAgICAgICAgMzUgOiAiRW5kIiwKICAgICAgICAgICAgMzYgOiAiSG9tZSIsCiAgICAgICAgICAgIDM3IDogIkxlZnQiLAogICAgICAgICAgICAzOCA6ICJVcCIsCiAgICAgICAgICAgIDM5IDogIlJpZ2h0IiwKICAgICAgICAgICAgNDAgOiAiRG93biIsCiAgICAgICAgICAgIDQ0IDogIlByaW50IiwKICAgICAgICAgICAgNDUgOiAiSW5zZXJ0IiwKICAgICAgICAgICAgNDYgOiAiRGVsZXRlIiwKICAgICAgICAgICAgOTYgOiAiTnVtcGFkMCIsCiAgICAgICAgICAgIDk3IDogIk51bXBhZDEiLAogICAgICAgICAgICA5OCA6ICJOdW1wYWQyIiwKICAgICAgICAgICAgOTkgOiAiTnVtcGFkMyIsCiAgICAgICAgICAgIDEwMDogIk51bXBhZDQiLAogICAgICAgICAgICAxMDE6ICJOdW1wYWQ1IiwKICAgICAgICAgICAgMTAyOiAiTnVtcGFkNiIsCiAgICAgICAgICAgIDEwMzogIk51bXBhZDciLAogICAgICAgICAgICAxMDQ6ICJOdW1wYWQ4IiwKICAgICAgICAgICAgMTA1OiAiTnVtcGFkOSIsCiAgICAgICAgICAgICctMTMnOiAiTnVtcGFkRW50ZXIiLAogICAgICAgICAgICAxMTI6ICJGMSIsCiAgICAgICAgICAgIDExMzogIkYyIiwKICAgICAgICAgICAgMTE0OiAiRjMiLAogICAgICAgICAgICAxMTU6ICJGNCIsCiAgICAgICAgICAgIDExNjogIkY1IiwKICAgICAgICAgICAgMTE3OiAiRjYiLAogICAgICAgICAgICAxMTg6ICJGNyIsCiAgICAgICAgICAgIDExOTogIkY4IiwKICAgICAgICAgICAgMTIwOiAiRjkiLAogICAgICAgICAgICAxMjE6ICJGMTAiLAogICAgICAgICAgICAxMjI6ICJGMTEiLAogICAgICAgICAgICAxMjM6ICJGMTIiLAogICAgICAgICAgICAxNDQ6ICJOdW1sb2NrIiwKICAgICAgICAgICAgMTQ1OiAiU2Nyb2xsbG9jayIKICAgICAgICB9LAoKICAgICAgICBQUklOVEFCTEVfS0VZUzogewogICAgICAgICAgIDMyOiAnICcsICA0ODogJzAnLCAgNDk6ICcxJywgIDUwOiAnMicsICA1MTogJzMnLCAgNTI6ICc0JywgNTM6ICAnNScsCiAgICAgICAgICAgNTQ6ICc2JywgIDU1OiAnNycsICA1NjogJzgnLCAgNTc6ICc5JywgIDU5OiAnOycsICA2MTogJz0nLCA2NTogICdhJywKICAgICAgICAgICA2NjogJ2InLCAgNjc6ICdjJywgIDY4OiAnZCcsICA2OTogJ2UnLCAgNzA6ICdmJywgIDcxOiAnZycsIDcyOiAgJ2gnLAogICAgICAgICAgIDczOiAnaScsICA3NDogJ2onLCAgNzU6ICdrJywgIDc2OiAnbCcsICA3NzogJ20nLCAgNzg6ICduJywgNzk6ICAnbycsCiAgICAgICAgICAgODA6ICdwJywgIDgxOiAncScsICA4MjogJ3InLCAgODM6ICdzJywgIDg0OiAndCcsICA4NTogJ3UnLCA4NjogICd2JywKICAgICAgICAgICA4NzogJ3cnLCAgODg6ICd4JywgIDg5OiAneScsICA5MDogJ3onLCAxMDc6ICcrJywgMTA5OiAnLScsIDExMDogJy4nLAogICAgICAgICAgMTg2OiAnOycsIDE4NzogJz0nLCAxODg6ICcsJywgMTg5OiAnLScsIDE5MDogJy4nLCAxOTE6ICcvJywgMTkyOiAnYCcsCiAgICAgICAgICAyMTk6ICdbJywgMjIwOiAnXFwnLDIyMTogJ10nLCAyMjI6ICInIiwgMTExOiAnLycsIDEwNjogJyonCiAgICAgICAgfQogICAgfTsKICAgIHZhciBuYW1lLCBpOwogICAgZm9yIChpIGluIHJldC5GVU5DVElPTl9LRVlTKSB7CiAgICAgICAgbmFtZSA9IHJldC5GVU5DVElPTl9LRVlTW2ldLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgcmV0W25hbWVdID0gcGFyc2VJbnQoaSwgMTApOwogICAgfQogICAgZm9yIChpIGluIHJldC5QUklOVEFCTEVfS0VZUykgewogICAgICAgIG5hbWUgPSByZXQuUFJJTlRBQkxFX0tFWVNbaV0udG9Mb3dlckNhc2UoKTsKICAgICAgICByZXRbbmFtZV0gPSBwYXJzZUludChpLCAxMCk7CiAgICB9CiAgICBvb3AubWl4aW4ocmV0LCByZXQuTU9ESUZJRVJfS0VZUyk7CiAgICBvb3AubWl4aW4ocmV0LCByZXQuUFJJTlRBQkxFX0tFWVMpOwogICAgb29wLm1peGluKHJldCwgcmV0LkZVTkNUSU9OX0tFWVMpOwogICAgcmV0LmVudGVyID0gcmV0WyJyZXR1cm4iXTsKICAgIHJldC5lc2NhcGUgPSByZXQuZXNjOwogICAgcmV0LmRlbCA9IHJldFsiZGVsZXRlIl07CiAgICByZXRbMTczXSA9ICctJzsKICAgIAogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBtb2RzID0gWyJjbWQiLCAiY3RybCIsICJhbHQiLCAic2hpZnQiXTsKICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5wb3coMiwgbW9kcy5sZW5ndGgpOyBpLS07KSB7ICAgICAgICAgICAgCiAgICAgICAgICAgIHJldC5LRVlfTU9EU1tpXSA9IG1vZHMuZmlsdGVyKGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpICYgcmV0LktFWV9NT0RTW3hdOwogICAgICAgICAgICB9KS5qb2luKCItIikgKyAiLSI7CiAgICAgICAgfQogICAgfSkoKTsKCiAgICByZXQuS0VZX01PRFNbMF0gPSAiIjsKICAgIHJldC5LRVlfTU9EU1stMV0gPSAiaW5wdXQtIjsKCiAgICByZXR1cm4gcmV0Owp9KSgpOwpvb3AubWl4aW4oZXhwb3J0cywgS2V5cyk7CgpleHBvcnRzLmtleUNvZGVUb1N0cmluZyA9IGZ1bmN0aW9uKGtleUNvZGUpIHsKICAgIHZhciBrZXlTdHJpbmcgPSBLZXlzW2tleUNvZGVdOwogICAgaWYgKHR5cGVvZiBrZXlTdHJpbmcgIT0gInN0cmluZyIpCiAgICAgICAga2V5U3RyaW5nID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlKTsKICAgIHJldHVybiBrZXlTdHJpbmcudG9Mb3dlckNhc2UoKTsKfTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIiwiYWNlL2xpYi91c2VyYWdlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBrZXlzID0gcmVxdWlyZSgiLi9rZXlzIik7CnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL3VzZXJhZ2VudCIpOwoKdmFyIHByZXNzZWRLZXlzID0gbnVsbDsKdmFyIHRzID0gMDsKCmV4cG9ydHMuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbihlbGVtLCB0eXBlLCBjYWxsYmFjaykgewogICAgaWYgKGVsZW0uYWRkRXZlbnRMaXN0ZW5lcikgewogICAgICAgIHJldHVybiBlbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2ssIGZhbHNlKTsKICAgIH0KICAgIGlmIChlbGVtLmF0dGFjaEV2ZW50KSB7CiAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgY2FsbGJhY2suY2FsbChlbGVtLCB3aW5kb3cuZXZlbnQpOwogICAgICAgIH07CiAgICAgICAgY2FsbGJhY2suX3dyYXBwZXIgPSB3cmFwcGVyOwogICAgICAgIGVsZW0uYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBwZXIpOwogICAgfQp9OwoKZXhwb3J0cy5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW0sIHR5cGUsIGNhbGxiYWNrKSB7CiAgICBpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKSB7CiAgICAgICAgcmV0dXJuIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBjYWxsYmFjaywgZmFsc2UpOwogICAgfQogICAgaWYgKGVsZW0uZGV0YWNoRXZlbnQpIHsKICAgICAgICBlbGVtLmRldGFjaEV2ZW50KCJvbiIgKyB0eXBlLCBjYWxsYmFjay5fd3JhcHBlciB8fCBjYWxsYmFjayk7CiAgICB9Cn07CmV4cG9ydHMuc3RvcEV2ZW50ID0gZnVuY3Rpb24oZSkgewogICAgZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7CiAgICBleHBvcnRzLnByZXZlbnREZWZhdWx0KGUpOwogICAgcmV0dXJuIGZhbHNlOwp9OwoKZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbihlKSB7CiAgICBpZiAoZS5zdG9wUHJvcGFnYXRpb24pCiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGVsc2UKICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7Cn07CgpleHBvcnRzLnByZXZlbnREZWZhdWx0ID0gZnVuY3Rpb24oZSkgewogICAgaWYgKGUucHJldmVudERlZmF1bHQpCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgZWxzZQogICAgICAgIGUucmV0dXJuVmFsdWUgPSBmYWxzZTsKfTsKZXhwb3J0cy5nZXRCdXR0b24gPSBmdW5jdGlvbihlKSB7CiAgICBpZiAoZS50eXBlID09ICJkYmxjbGljayIpCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZiAoZS50eXBlID09ICJjb250ZXh0bWVudSIgfHwgKHVzZXJhZ2VudC5pc01hYyAmJiAoZS5jdHJsS2V5ICYmICFlLmFsdEtleSAmJiAhZS5zaGlmdEtleSkpKQogICAgICAgIHJldHVybiAyOwogICAgaWYgKGUucHJldmVudERlZmF1bHQpIHsKICAgICAgICByZXR1cm4gZS5idXR0b247CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gezE6MCwgMjoyLCA0OjF9W2UuYnV0dG9uXTsKICAgIH0KfTsKCmV4cG9ydHMuY2FwdHVyZSA9IGZ1bmN0aW9uKGVsLCBldmVudEhhbmRsZXIsIHJlbGVhc2VDYXB0dXJlSGFuZGxlcikgewogICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHsKICAgICAgICBldmVudEhhbmRsZXIgJiYgZXZlbnRIYW5kbGVyKGUpOwogICAgICAgIHJlbGVhc2VDYXB0dXJlSGFuZGxlciAmJiByZWxlYXNlQ2FwdHVyZUhhbmRsZXIoZSk7CgogICAgICAgIGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIoZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBldmVudEhhbmRsZXIsIHRydWUpOwogICAgICAgIGV4cG9ydHMucmVtb3ZlTGlzdGVuZXIoZG9jdW1lbnQsICJtb3VzZXVwIiwgb25Nb3VzZVVwLCB0cnVlKTsKICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKGRvY3VtZW50LCAiZHJhZ3N0YXJ0Iiwgb25Nb3VzZVVwLCB0cnVlKTsKICAgIH0KCiAgICBleHBvcnRzLmFkZExpc3RlbmVyKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgZXZlbnRIYW5kbGVyLCB0cnVlKTsKICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZG9jdW1lbnQsICJtb3VzZXVwIiwgb25Nb3VzZVVwLCB0cnVlKTsKICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZG9jdW1lbnQsICJkcmFnc3RhcnQiLCBvbk1vdXNlVXAsIHRydWUpOwogICAgCiAgICByZXR1cm4gb25Nb3VzZVVwOwp9OwoKZXhwb3J0cy5hZGRNb3VzZVdoZWVsTGlzdGVuZXIgPSBmdW5jdGlvbihlbCwgY2FsbGJhY2spIHsKICAgIGlmICgib25tb3VzZXdoZWVsIiBpbiBlbCkgewogICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZXdoZWVsIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgZmFjdG9yID0gODsKICAgICAgICAgICAgaWYgKGUud2hlZWxEZWx0YVggIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgZS53aGVlbFggPSAtZS53aGVlbERlbHRhWCAvIGZhY3RvcjsKICAgICAgICAgICAgICAgIGUud2hlZWxZID0gLWUud2hlZWxEZWx0YVkgLyBmYWN0b3I7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlLndoZWVsWCA9IDA7CiAgICAgICAgICAgICAgICBlLndoZWVsWSA9IC1lLndoZWVsRGVsdGEgLyBmYWN0b3I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FsbGJhY2soZSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKCJvbndoZWVsIiBpbiBlbCkgewogICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJ3aGVlbCIsICBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBmYWN0b3IgPSAwLjM1OwogICAgICAgICAgICBzd2l0Y2ggKGUuZGVsdGFNb2RlKSB7CiAgICAgICAgICAgICAgICBjYXNlIGUuRE9NX0RFTFRBX1BJWEVMOgogICAgICAgICAgICAgICAgICAgIGUud2hlZWxYID0gZS5kZWx0YVggKiBmYWN0b3IgfHwgMDsKICAgICAgICAgICAgICAgICAgICBlLndoZWVsWSA9IGUuZGVsdGFZICogZmFjdG9yIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIGUuRE9NX0RFTFRBX0xJTkU6CiAgICAgICAgICAgICAgICBjYXNlIGUuRE9NX0RFTFRBX1BBR0U6CiAgICAgICAgICAgICAgICAgICAgZS53aGVlbFggPSAoZS5kZWx0YVggfHwgMCkgKiA1OwogICAgICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGVsdGFZIHx8IDApICogNTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgY2FsbGJhY2soZSk7CiAgICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJET01Nb3VzZVNjcm9sbCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUuYXhpcyAmJiBlLmF4aXMgPT0gZS5IT1JJWk9OVEFMX0FYSVMpIHsKICAgICAgICAgICAgICAgIGUud2hlZWxYID0gKGUuZGV0YWlsIHx8IDApICogNTsKICAgICAgICAgICAgICAgIGUud2hlZWxZID0gMDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGUud2hlZWxYID0gMDsKICAgICAgICAgICAgICAgIGUud2hlZWxZID0gKGUuZGV0YWlsIHx8IDApICogNTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYWxsYmFjayhlKTsKICAgICAgICB9KTsKICAgIH0KfTsKCmV4cG9ydHMuYWRkTXVsdGlNb3VzZURvd25MaXN0ZW5lciA9IGZ1bmN0aW9uKGVsZW1lbnRzLCB0aW1lb3V0cywgZXZlbnRIYW5kbGVyLCBjYWxsYmFja05hbWUpIHsKICAgIHZhciBjbGlja3MgPSAwOwogICAgdmFyIHN0YXJ0WCwgc3RhcnRZLCB0aW1lcjsgCiAgICB2YXIgZXZlbnROYW1lcyA9IHsKICAgICAgICAyOiAiZGJsY2xpY2siLAogICAgICAgIDM6ICJ0cmlwbGVjbGljayIsCiAgICAgICAgNDogInF1YWRjbGljayIKICAgIH07CgogICAgZnVuY3Rpb24gb25Nb3VzZWRvd24oZSkgewogICAgICAgIGlmIChleHBvcnRzLmdldEJ1dHRvbihlKSAhPT0gMCkgewogICAgICAgICAgICBjbGlja3MgPSAwOwogICAgICAgIH0gZWxzZSBpZiAoZS5kZXRhaWwgPiAxKSB7CiAgICAgICAgICAgIGNsaWNrcysrOwogICAgICAgICAgICBpZiAoY2xpY2tzID4gNCkKICAgICAgICAgICAgICAgIGNsaWNrcyA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY2xpY2tzID0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc0lFKSB7CiAgICAgICAgICAgIHZhciBpc05ld0NsaWNrID0gTWF0aC5hYnMoZS5jbGllbnRYIC0gc3RhcnRYKSA+IDUgfHwgTWF0aC5hYnMoZS5jbGllbnRZIC0gc3RhcnRZKSA+IDU7CiAgICAgICAgICAgIGlmICghdGltZXIgfHwgaXNOZXdDbGljaykKICAgICAgICAgICAgICAgIGNsaWNrcyA9IDE7CiAgICAgICAgICAgIGlmICh0aW1lcikKICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHt0aW1lciA9IG51bGw7fSwgdGltZW91dHNbY2xpY2tzIC0gMV0gfHwgNjAwKTsKCiAgICAgICAgICAgIGlmIChjbGlja3MgPT0gMSkgewogICAgICAgICAgICAgICAgc3RhcnRYID0gZS5jbGllbnRYOwogICAgICAgICAgICAgICAgc3RhcnRZID0gZS5jbGllbnRZOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGUuX2NsaWNrcyA9IGNsaWNrczsKCiAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oIm1vdXNlZG93biIsIGUpOwoKICAgICAgICBpZiAoY2xpY2tzID4gNCkKICAgICAgICAgICAgY2xpY2tzID0gMDsKICAgICAgICBlbHNlIGlmIChjbGlja3MgPiAxKQogICAgICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oZXZlbnROYW1lc1tjbGlja3NdLCBlKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uRGJsY2xpY2soZSkgewogICAgICAgIGNsaWNrcyA9IDI7CiAgICAgICAgaWYgKHRpbWVyKQogICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHt0aW1lciA9IG51bGw7fSwgdGltZW91dHNbY2xpY2tzIC0gMV0gfHwgNjAwKTsKICAgICAgICBldmVudEhhbmRsZXJbY2FsbGJhY2tOYW1lXSgibW91c2Vkb3duIiwgZSk7CiAgICAgICAgZXZlbnRIYW5kbGVyW2NhbGxiYWNrTmFtZV0oZXZlbnROYW1lc1tjbGlja3NdLCBlKTsKICAgIH0KICAgIGlmICghQXJyYXkuaXNBcnJheShlbGVtZW50cykpCiAgICAgICAgZWxlbWVudHMgPSBbZWxlbWVudHNdOwogICAgZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbCkgewogICAgICAgIGV4cG9ydHMuYWRkTGlzdGVuZXIoZWwsICJtb3VzZWRvd24iLCBvbk1vdXNlZG93bik7CiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc09sZElFKQogICAgICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKGVsLCAiZGJsY2xpY2siLCBvbkRibGNsaWNrKTsKICAgIH0pOwp9OwoKdmFyIGdldE1vZGlmaWVySGFzaCA9IHVzZXJhZ2VudC5pc01hYyAmJiB1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKCJLZXlib2FyZEV2ZW50IiBpbiB3aW5kb3cpCiAgICA/IGZ1bmN0aW9uKGUpIHsKICAgICAgICByZXR1cm4gMCB8IChlLm1ldGFLZXkgPyAxIDogMCkgfCAoZS5hbHRLZXkgPyAyIDogMCkgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLmN0cmxLZXkgPyA4IDogMCk7CiAgICB9CiAgICA6IGZ1bmN0aW9uKGUpIHsKICAgICAgICByZXR1cm4gMCB8IChlLmN0cmxLZXkgPyAxIDogMCkgfCAoZS5hbHRLZXkgPyAyIDogMCkgfCAoZS5zaGlmdEtleSA/IDQgOiAwKSB8IChlLm1ldGFLZXkgPyA4IDogMCk7CiAgICB9OwoKZXhwb3J0cy5nZXRNb2RpZmllclN0cmluZyA9IGZ1bmN0aW9uKGUpIHsKICAgIHJldHVybiBrZXlzLktFWV9NT0RTW2dldE1vZGlmaWVySGFzaChlKV07Cn07CgpmdW5jdGlvbiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwga2V5Q29kZSkgewogICAgdmFyIGhhc2hJZCA9IGdldE1vZGlmaWVySGFzaChlKTsKCiAgICBpZiAoIXVzZXJhZ2VudC5pc01hYyAmJiBwcmVzc2VkS2V5cykgewogICAgICAgIGlmIChlLmdldE1vZGlmaWVyU3RhdGUgJiYgKGUuZ2V0TW9kaWZpZXJTdGF0ZSgiT1MiKSB8fCBlLmdldE1vZGlmaWVyU3RhdGUoIldpbiIpKSkKICAgICAgICAgICAgaGFzaElkIHw9IDg7CiAgICAgICAgaWYgKHByZXNzZWRLZXlzLmFsdEdyKSB7CiAgICAgICAgICAgIGlmICgoMyAmIGhhc2hJZCkgIT0gMykKICAgICAgICAgICAgICAgIHByZXNzZWRLZXlzLmFsdEdyID0gMDsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMTggfHwga2V5Q29kZSA9PT0gMTcpIHsKICAgICAgICAgICAgdmFyIGxvY2F0aW9uID0gImxvY2F0aW9uIiBpbiBlID8gZS5sb2NhdGlvbiA6IGUua2V5TG9jYXRpb247CiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSAxNyAmJiBsb2NhdGlvbiA9PT0gMSkgewogICAgICAgICAgICAgICAgaWYgKHByZXNzZWRLZXlzW2tleUNvZGVdID09IDEpCiAgICAgICAgICAgICAgICAgICAgdHMgPSBlLnRpbWVTdGFtcDsKICAgICAgICAgICAgfSBlbHNlIGlmIChrZXlDb2RlID09PSAxOCAmJiBoYXNoSWQgPT09IDMgJiYgbG9jYXRpb24gPT09IDIpIHsKICAgICAgICAgICAgICAgIHZhciBkdCA9IGUudGltZVN0YW1wIC0gdHM7CiAgICAgICAgICAgICAgICBpZiAoZHQgPCA1MCkKICAgICAgICAgICAgICAgICAgICBwcmVzc2VkS2V5cy5hbHRHciA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICAKICAgIGlmIChrZXlDb2RlIGluIGtleXMuTU9ESUZJRVJfS0VZUykgewogICAgICAgIGtleUNvZGUgPSAtMTsKICAgIH0KICAgIAogICAgaWYgKCFoYXNoSWQgJiYga2V5Q29kZSA9PT0gMTMpIHsKICAgICAgICB2YXIgbG9jYXRpb24gPSAibG9jYXRpb24iIGluIGUgPyBlLmxvY2F0aW9uIDogZS5rZXlMb2NhdGlvbjsKICAgICAgICBpZiAobG9jYXRpb24gPT09IDMpIHsKICAgICAgICAgICAgY2FsbGJhY2soZSwgaGFzaElkLCAta2V5Q29kZSk7CiAgICAgICAgICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgCiAgICBpZiAodXNlcmFnZW50LmlzQ2hyb21lT1MgJiYgaGFzaElkICYgOCkgewogICAgICAgIGNhbGxiYWNrKGUsIGhhc2hJZCwga2V5Q29kZSk7CiAgICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsc2UKICAgICAgICAgICAgaGFzaElkICY9IH44OwogICAgfQogICAgaWYgKCFoYXNoSWQgJiYgIShrZXlDb2RlIGluIGtleXMuRlVOQ1RJT05fS0VZUykgJiYgIShrZXlDb2RlIGluIGtleXMuUFJJTlRBQkxFX0tFWVMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICByZXR1cm4gY2FsbGJhY2soZSwgaGFzaElkLCBrZXlDb2RlKTsKfQoKCmV4cG9ydHMuYWRkQ29tbWFuZEtleUxpc3RlbmVyID0gZnVuY3Rpb24oZWwsIGNhbGxiYWNrKSB7CiAgICB2YXIgYWRkTGlzdGVuZXIgPSBleHBvcnRzLmFkZExpc3RlbmVyOwogICAgaWYgKHVzZXJhZ2VudC5pc09sZEdlY2tvIHx8ICh1c2VyYWdlbnQuaXNPcGVyYSAmJiAhKCJLZXlib2FyZEV2ZW50IiBpbiB3aW5kb3cpKSkgewogICAgICAgIHZhciBsYXN0S2V5RG93bktleUNvZGUgPSBudWxsOwogICAgICAgIGFkZExpc3RlbmVyKGVsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgbGFzdEtleURvd25LZXlDb2RlID0gZS5rZXlDb2RlOwogICAgICAgIH0pOwogICAgICAgIGFkZExpc3RlbmVyKGVsLCAia2V5cHJlc3MiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemVDb21tYW5kS2V5cyhjYWxsYmFjaywgZSwgbGFzdEtleURvd25LZXlDb2RlKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGxhc3REZWZhdWx0UHJldmVudGVkID0gbnVsbDsKCiAgICAgICAgYWRkTGlzdGVuZXIoZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBwcmVzc2VkS2V5c1tlLmtleUNvZGVdID0gKHByZXNzZWRLZXlzW2Uua2V5Q29kZV0gfHwgMCkgKyAxOwogICAgICAgICAgICB2YXIgcmVzdWx0ID0gbm9ybWFsaXplQ29tbWFuZEtleXMoY2FsbGJhY2ssIGUsIGUua2V5Q29kZSk7CiAgICAgICAgICAgIGxhc3REZWZhdWx0UHJldmVudGVkID0gZS5kZWZhdWx0UHJldmVudGVkOwogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0pOwoKICAgICAgICBhZGRMaXN0ZW5lcihlbCwgImtleXByZXNzIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAobGFzdERlZmF1bHRQcmV2ZW50ZWQgJiYgKGUuY3RybEtleSB8fCBlLmFsdEtleSB8fCBlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSkpIHsKICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RvcEV2ZW50KGUpOwogICAgICAgICAgICAgICAgbGFzdERlZmF1bHRQcmV2ZW50ZWQgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGFkZExpc3RlbmVyKGVsLCAia2V5dXAiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHByZXNzZWRLZXlzW2Uua2V5Q29kZV0gPSBudWxsOwogICAgICAgIH0pOwoKICAgICAgICBpZiAoIXByZXNzZWRLZXlzKSB7CiAgICAgICAgICAgIHJlc2V0UHJlc3NlZEtleXMoKTsKICAgICAgICAgICAgYWRkTGlzdGVuZXIod2luZG93LCAiZm9jdXMiLCByZXNldFByZXNzZWRLZXlzKTsKICAgICAgICB9CiAgICB9Cn07CmZ1bmN0aW9uIHJlc2V0UHJlc3NlZEtleXMoKSB7CiAgICBwcmVzc2VkS2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7Cn0KCmlmICh0eXBlb2Ygd2luZG93ID09ICJvYmplY3QiICYmIHdpbmRvdy5wb3N0TWVzc2FnZSAmJiAhdXNlcmFnZW50LmlzT2xkSUUpIHsKICAgIHZhciBwb3N0TWVzc2FnZUlkID0gMTsKICAgIGV4cG9ydHMubmV4dFRpY2sgPSBmdW5jdGlvbihjYWxsYmFjaywgd2luKSB7CiAgICAgICAgd2luID0gd2luIHx8IHdpbmRvdzsKICAgICAgICB2YXIgbWVzc2FnZU5hbWUgPSAiemVyby10aW1lb3V0LW1lc3NhZ2UtIiArIChwb3N0TWVzc2FnZUlkKyspOwogICAgICAgIAogICAgICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUuZGF0YSA9PSBtZXNzYWdlTmFtZSkgewogICAgICAgICAgICAgICAgZXhwb3J0cy5zdG9wUHJvcGFnYXRpb24oZSk7CiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZUxpc3RlbmVyKHdpbiwgIm1lc3NhZ2UiLCBsaXN0ZW5lcik7CiAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICBleHBvcnRzLmFkZExpc3RlbmVyKHdpbiwgIm1lc3NhZ2UiLCBsaXN0ZW5lcik7CiAgICAgICAgd2luLnBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCAiKiIpOwogICAgfTsKfQoKZXhwb3J0cy4kaWRsZUJsb2NrZWQgPSBmYWxzZTsKZXhwb3J0cy5vbklkbGUgPSBmdW5jdGlvbihjYiwgdGltZW91dCkgewogICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gaGFuZGxlcigpIHsKICAgICAgICBpZiAoIWV4cG9ydHMuJGlkbGVCbG9ja2VkKSB7CiAgICAgICAgICAgIGNiKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2V0VGltZW91dChoYW5kbGVyLCAxMDApOwogICAgICAgIH0KICAgIH0sIHRpbWVvdXQpOwp9OwoKZXhwb3J0cy4kaWRsZUJsb2NrSWQgPSBudWxsOwpleHBvcnRzLmJsb2NrSWRsZSA9IGZ1bmN0aW9uKGRlbGF5KSB7CiAgICBpZiAoZXhwb3J0cy4kaWRsZUJsb2NrSWQpCiAgICAgICAgY2xlYXJUaW1lb3V0KGV4cG9ydHMuJGlkbGVCbG9ja0lkKTsKICAgICAgICAKICAgIGV4cG9ydHMuJGlkbGVCbG9ja2VkID0gdHJ1ZTsKICAgIGV4cG9ydHMuJGlkbGVCbG9ja0lkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBleHBvcnRzLiRpZGxlQmxvY2tlZCA9IGZhbHNlOwogICAgfSwgZGVsYXkgfHwgMTAwKTsKfTsKCmV4cG9ydHMubmV4dEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PSAib2JqZWN0IiAmJiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZQogICAgfHwgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFtZQogICAgfHwgd2luZG93LndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZQogICAgfHwgd2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lCiAgICB8fCB3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSk7CgppZiAoZXhwb3J0cy5uZXh0RnJhbWUpCiAgICBleHBvcnRzLm5leHRGcmFtZSA9IGV4cG9ydHMubmV4dEZyYW1lLmJpbmQod2luZG93KTsKZWxzZQogICAgZXhwb3J0cy5uZXh0RnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykgewogICAgICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIDE3KTsKICAgIH07Cn0pOwoKZGVmaW5lKCJhY2UvcmFuZ2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIGNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9Owp2YXIgUmFuZ2UgPSBmdW5jdGlvbihzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKSB7CiAgICB0aGlzLnN0YXJ0ID0gewogICAgICAgIHJvdzogc3RhcnRSb3csCiAgICAgICAgY29sdW1uOiBzdGFydENvbHVtbgogICAgfTsKCiAgICB0aGlzLmVuZCA9IHsKICAgICAgICByb3c6IGVuZFJvdywKICAgICAgICBjb2x1bW46IGVuZENvbHVtbgogICAgfTsKfTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuaXNFcXVhbCA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09PSByYW5nZS5zdGFydC5yb3cgJiYKICAgICAgICAgICAgdGhpcy5lbmQucm93ID09PSByYW5nZS5lbmQucm93ICYmCiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID09PSByYW5nZS5zdGFydC5jb2x1bW4gJiYKICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID09PSByYW5nZS5lbmQuY29sdW1uOwogICAgfTsKICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKCJSYW5nZTogWyIgKyB0aGlzLnN0YXJ0LnJvdyArICIvIiArIHRoaXMuc3RhcnQuY29sdW1uICsKICAgICAgICAgICAgIl0gLT4gWyIgKyB0aGlzLmVuZC5yb3cgKyAiLyIgKyB0aGlzLmVuZC5jb2x1bW4gKyAiXSIpOwogICAgfTsKCiAgICB0aGlzLmNvbnRhaW5zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwOwogICAgfTsKICAgIHRoaXMuY29tcGFyZVJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgY21wLAogICAgICAgICAgICBlbmQgPSByYW5nZS5lbmQsCiAgICAgICAgICAgIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CgogICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShlbmQucm93LCBlbmQuY29sdW1uKTsKICAgICAgICBpZiAoY21wID09IDEpIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMjsKICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoY21wID09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoc3RhcnQucm93LCBzdGFydC5jb2x1bW4pOwogICAgICAgICAgICBpZiAoY21wID09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiA0MjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZVBvaW50ID0gZnVuY3Rpb24ocCkgewogICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocC5yb3csIHAuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmNvbnRhaW5zUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCkgPT0gMCAmJiB0aGlzLmNvbXBhcmVQb2ludChyYW5nZS5lbmQpID09IDA7CiAgICB9OwogICAgdGhpcy5pbnRlcnNlY3RzID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlUmFuZ2UocmFuZ2UpOwogICAgICAgIHJldHVybiAoY21wID09IC0xIHx8IGNtcCA9PSAwIHx8IGNtcCA9PSAxKTsKICAgIH07CiAgICB0aGlzLmlzRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4gdGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuaXNTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW47CiAgICB9OwogICAgdGhpcy5zZXRTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSByb3cuY29sdW1uOwogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3c7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gY29sdW1uOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnNldEVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHR5cGVvZiByb3cgPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93LnJvdzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmVuZC5yb3cgPSByb3c7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5pbnNpZGUgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pID09IDApIHsKICAgICAgICAgICAgaWYgKHRoaXMuaXNFbmQocm93LCBjb2x1bW4pIHx8IHRoaXMuaXNTdGFydChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZVN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuaW5zaWRlRW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5jb21wYXJlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICBpZiAocm93ID09PSB0aGlzLnN0YXJ0LnJvdykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA8IHRoaXMuc3RhcnQuY29sdW1uID8gLTEgOiAoY29sdW1uID4gdGhpcy5lbmQuY29sdW1uID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocm93IDwgdGhpcy5zdGFydC5yb3cpCiAgICAgICAgICAgIHJldHVybiAtMTsKCiAgICAgICAgaWYgKHJvdyA+IHRoaXMuZW5kLnJvdykKICAgICAgICAgICAgcmV0dXJuIDE7CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uID49IHRoaXMuc3RhcnQuY29sdW1uID8gMCA6IC0xOwoKICAgICAgICBpZiAodGhpcy5lbmQucm93ID09PSByb3cpCiAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPD0gdGhpcy5lbmQuY29sdW1uID8gMCA6IDE7CgogICAgICAgIHJldHVybiAwOwogICAgfTsKICAgIHRoaXMuY29tcGFyZVN0YXJ0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5jb21wYXJlSW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID09IHJvdyAmJiB0aGlzLmVuZC5jb2x1bW4gPT0gY29sdW1uKSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPT0gcm93ICYmIHRoaXMuc3RhcnQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY2xpcFJvd3MgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPiBsYXN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogbGFzdFJvdyArIDEsIGNvbHVtbjogMH07CiAgICAgICAgZWxzZSBpZiAodGhpcy5lbmQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBlbmQgPSB7cm93OiBmaXJzdFJvdywgY29sdW1uOiAwfTsKCiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3JvdzogbGFzdFJvdyArIDEsIGNvbHVtbjogMH07CiAgICAgICAgZWxzZSBpZiAodGhpcy5zdGFydC5yb3cgPCBmaXJzdFJvdykKICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7CiAgICB9OwogICAgdGhpcy5leHRlbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBjbXAgPSB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwoKICAgICAgICBpZiAoY21wID09IDApCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIGVsc2UgaWYgKGNtcCA9PSAtMSkKICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICAgICAgZWxzZQogICAgICAgICAgICB2YXIgZW5kID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CgogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0IHx8IHRoaXMuc3RhcnQsIGVuZCB8fCB0aGlzLmVuZCk7CiAgICB9OwoKICAgIHRoaXMuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgPT09IHRoaXMuZW5kLnJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gdGhpcy5lbmQuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmlzTXVsdGlMaW5lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLnN0YXJ0LnJvdyAhPT0gdGhpcy5lbmQucm93KTsKICAgIH07CiAgICB0aGlzLmNsb25lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy5zdGFydCwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuY29sbGFwc2VSb3dzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLmNvbHVtbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCBNYXRoLm1heCh0aGlzLnN0YXJ0LnJvdywgdGhpcy5lbmQucm93LTEpLCAwKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydC5yb3csIDAsIHRoaXMuZW5kLnJvdywgMCk7CiAgICB9OwogICAgdGhpcy50b1NjcmVlblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciBzY3JlZW5Qb3NTdGFydCA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuc3RhcnQpOwogICAgICAgIHZhciBzY3JlZW5Qb3NFbmQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLmVuZCk7CgogICAgICAgIHJldHVybiBuZXcgUmFuZ2UoCiAgICAgICAgICAgIHNjcmVlblBvc1N0YXJ0LnJvdywgc2NyZWVuUG9zU3RhcnQuY29sdW1uLAogICAgICAgICAgICBzY3JlZW5Qb3NFbmQucm93LCBzY3JlZW5Qb3NFbmQuY29sdW1uCiAgICAgICAgKTsKICAgIH07CiAgICB0aGlzLm1vdmVCeSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdGhpcy5zdGFydC5yb3cgKz0gcm93OwogICAgICAgIHRoaXMuc3RhcnQuY29sdW1uICs9IGNvbHVtbjsKICAgICAgICB0aGlzLmVuZC5yb3cgKz0gcm93OwogICAgICAgIHRoaXMuZW5kLmNvbHVtbiArPSBjb2x1bW47CiAgICB9OwoKfSkuY2FsbChSYW5nZS5wcm90b3R5cGUpOwpSYW5nZS5mcm9tUG9pbnRzID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgewogICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbiwgZW5kLnJvdywgZW5kLmNvbHVtbik7Cn07ClJhbmdlLmNvbXBhcmVQb2ludHMgPSBjb21wYXJlUG9pbnRzOwoKUmFuZ2UuY29tcGFyZVBvaW50cyA9IGZ1bmN0aW9uKHAxLCBwMikgewogICAgcmV0dXJuIHAxLnJvdyAtIHAyLnJvdyB8fCBwMS5jb2x1bW4gLSBwMi5jb2x1bW47Cn07CgoKZXhwb3J0cy5SYW5nZSA9IFJhbmdlOwp9KTsKCmRlZmluZSgiYWNlL2xpYi9sYW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS9jbGlwYm9hcmQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciAkY2FuY2VsVDsKbW9kdWxlLmV4cG9ydHMgPSB7IAogICAgbGluZU1vZGU6IGZhbHNlLAogICAgcGFzdGVDYW5jZWxsZWQ6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICgkY2FuY2VsVCAmJiAkY2FuY2VsVCA+IERhdGUubm93KCkgLSA1MCkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuICRjYW5jZWxUID0gZmFsc2U7CiAgICB9LAogICAgY2FuY2VsOiBmdW5jdGlvbigpIHsKICAgICAgICAkY2FuY2VsVCA9IERhdGUubm93KCk7CiAgICB9Cn07Cgp9KTsKCmRlZmluZSgiYWNlL2tleWJvYXJkL3RleHRpbnB1dCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL3VzZXJhZ2VudCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2NsaXBib2FyZCIsImFjZS9saWIva2V5cyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7CnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIGNsaXBib2FyZCA9IHJlcXVpcmUoIi4uL2NsaXBib2FyZCIpOwp2YXIgQlJPS0VOX1NFVERBVEEgPSB1c2VyYWdlbnQuaXNDaHJvbWUgPCAxODsKdmFyIFVTRV9JRV9NSU1FX1RZUEUgPSAgdXNlcmFnZW50LmlzSUU7CnZhciBIQVNfRk9DVVNfQVJHUyA9IHVzZXJhZ2VudC5pc0Nocm9tZSA+IDYzOwp2YXIgTUFYX0xJTkVfTEVOR1RIID0gNDAwOwoKdmFyIEtFWVMgPSByZXF1aXJlKCIuLi9saWIva2V5cyIpOwp2YXIgTU9EUyA9IEtFWVMuS0VZX01PRFM7CnZhciBpc0lPUyA9IHVzZXJhZ2VudC5pc0lPUzsKdmFyIHZhbHVlUmVzZXRSZWdleCA9IGlzSU9TID8gL1xzLyA6IC9cbi87Cgp2YXIgVGV4dElucHV0ID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgaG9zdCkgewogICAgdmFyIHRleHQgPSBkb20uY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTsKICAgIHRleHQuY2xhc3NOYW1lID0gImFjZV90ZXh0LWlucHV0IjsKCiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgid3JhcCIsICJvZmYiKTsKICAgIHRleHQuc2V0QXR0cmlidXRlKCJhdXRvY29ycmVjdCIsICJvZmYiKTsKICAgIHRleHQuc2V0QXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIsICJvZmYiKTsKICAgIHRleHQuc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwgZmFsc2UpOwoKICAgIHRleHQuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRleHQsIHBhcmVudE5vZGUuZmlyc3RDaGlsZCk7CgogICAgdmFyIGNvcGllZCA9IGZhbHNlOwogICAgdmFyIHBhc3RlZCA9IGZhbHNlOwogICAgdmFyIGluQ29tcG9zaXRpb24gPSBmYWxzZTsKICAgIHZhciBzZW5kaW5nVGV4dCA9IGZhbHNlOwogICAgdmFyIHRlbXBTdHlsZSA9ICcnOwogICAgCiAgICBpZiAoIXVzZXJhZ2VudC5pc01vYmlsZSkKICAgICAgICB0ZXh0LnN0eWxlLmZvbnRTaXplID0gIjFweCI7CgogICAgdmFyIGNvbW1hbmRNb2RlID0gZmFsc2U7CiAgICB2YXIgaWdub3JlRm9jdXNFdmVudHMgPSBmYWxzZTsKICAgIAogICAgdmFyIGxhc3RWYWx1ZSA9ICIiOwogICAgdmFyIGxhc3RTZWxlY3Rpb25TdGFydCA9IDA7CiAgICB2YXIgbGFzdFNlbGVjdGlvbkVuZCA9IDA7CiAgICB2YXIgbGFzdFJlc3RvcmVFbmQgPSAwOwogICAgdHJ5IHsgdmFyIGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRleHQ7IH0gY2F0Y2goZSkge30KICAgIAogICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImJsdXIiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKGlnbm9yZUZvY3VzRXZlbnRzKSByZXR1cm47CiAgICAgICAgaG9zdC5vbkJsdXIoZSk7CiAgICAgICAgaXNGb2N1c2VkID0gZmFsc2U7CiAgICB9KTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJmb2N1cyIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoaWdub3JlRm9jdXNFdmVudHMpIHJldHVybjsKICAgICAgICBpc0ZvY3VzZWQgPSB0cnVlOwogICAgICAgIGlmICh1c2VyYWdlbnQuaXNFZGdlKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50Lmhhc0ZvY3VzKCkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgfQogICAgICAgIGhvc3Qub25Gb2N1cyhlKTsKICAgICAgICBpZiAodXNlcmFnZW50LmlzRWRnZSkKICAgICAgICAgICAgc2V0VGltZW91dChyZXNldFNlbGVjdGlvbik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOwogICAgfSk7CiAgICB0aGlzLiRmb2N1c1Njcm9sbCA9IGZhbHNlOwogICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0ZW1wU3R5bGUgfHwgSEFTX0ZPQ1VTX0FSR1MgfHwgdGhpcy4kZm9jdXNTY3JvbGwgPT0gImJyb3dzZXIiKQogICAgICAgICAgICByZXR1cm4gdGV4dC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7CgogICAgICAgIHZhciB0b3AgPSB0ZXh0LnN0eWxlLnRvcDsKICAgICAgICB0ZXh0LnN0eWxlLnBvc2l0aW9uID0gImZpeGVkIjsKICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9ICIwcHgiOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHZhciBpc1RyYW5zZm9ybWVkID0gdGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgIT0gMDsKICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgYW5jZXN0b3JzID0gW107CiAgICAgICAgaWYgKGlzVHJhbnNmb3JtZWQpIHsKICAgICAgICAgICAgdmFyIHQgPSB0ZXh0LnBhcmVudEVsZW1lbnQ7CiAgICAgICAgICAgIHdoaWxlICh0ICYmIHQubm9kZVR5cGUgPT0gMSkgewogICAgICAgICAgICAgICAgYW5jZXN0b3JzLnB1c2godCk7CiAgICAgICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgiYWNlX25vY29udGV4dCIsIHRydWUpOwogICAgICAgICAgICAgICAgaWYgKCF0LnBhcmVudEVsZW1lbnQgJiYgdC5nZXRSb290Tm9kZSkKICAgICAgICAgICAgICAgICAgICB0ID0gdC5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdCA9IHQucGFyZW50RWxlbWVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0ZXh0LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsKICAgICAgICBpZiAoaXNUcmFuc2Zvcm1lZCkgewogICAgICAgICAgICBhbmNlc3RvcnMuZm9yRWFjaChmdW5jdGlvbihwKSB7CiAgICAgICAgICAgICAgICBwLnJlbW92ZUF0dHJpYnV0ZSgiYWNlX25vY29udGV4dCIpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGV4dC5zdHlsZS5wb3NpdGlvbiA9ICIiOwogICAgICAgICAgICBpZiAodGV4dC5zdHlsZS50b3AgPT0gIjBweCIpCiAgICAgICAgICAgICAgICB0ZXh0LnN0eWxlLnRvcCA9IHRvcDsKICAgICAgICB9LCAwKTsKICAgIH07CiAgICB0aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0ZXh0LmJsdXIoKTsKICAgIH07CiAgICB0aGlzLmlzRm9jdXNlZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBpc0ZvY3VzZWQ7CiAgICB9OwogICAgCiAgICBob3N0Lm9uKCJiZWZvcmVFbmRPcGVyYXRpb24iLCBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoaG9zdC5jdXJPcCAmJiBob3N0LmN1ck9wLmNvbW1hbmQubmFtZSA9PSAiaW5zZXJ0c3RyaW5nIikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKSB7CiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHRleHQudmFsdWUgPSAiIjsKICAgICAgICAgICAgb25Db21wb3NpdGlvbkVuZCgpOwogICAgICAgIH0KICAgICAgICByZXNldFNlbGVjdGlvbigpOwogICAgfSk7CiAgICAKICAgIHZhciByZXNldFNlbGVjdGlvbiA9IGlzSU9TCiAgICA/IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgaWYgKCFpc0ZvY3VzZWQgfHwgKGNvcGllZCAmJiAhdmFsdWUpIHx8IHNlbmRpbmdUZXh0KSByZXR1cm47CiAgICAgICAgaWYgKCF2YWx1ZSkgCiAgICAgICAgICAgIHZhbHVlID0gIiI7CiAgICAgICAgdmFyIG5ld1ZhbHVlID0gIlxuIGFiIiArIHZhbHVlICsgImNkZSBmZ1xuIjsKICAgICAgICBpZiAobmV3VmFsdWUgIT0gdGV4dC52YWx1ZSkKICAgICAgICAgICAgdGV4dC52YWx1ZSA9IGxhc3RWYWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgIAogICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IDQ7CiAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IDQgKyAodmFsdWUubGVuZ3RoIHx8IChob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkgPyAwIDogMSkpOwoKICAgICAgICBpZiAobGFzdFNlbGVjdGlvblN0YXJ0ICE9IHNlbGVjdGlvblN0YXJ0IHx8IGxhc3RTZWxlY3Rpb25FbmQgIT0gc2VsZWN0aW9uRW5kKSB7CiAgICAgICAgICAgIHRleHQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CiAgICAgICAgfQogICAgICAgIGxhc3RTZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0OwogICAgICAgIGxhc3RTZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25FbmQ7CiAgICB9CiAgICA6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChpbkNvbXBvc2l0aW9uIHx8IHNlbmRpbmdUZXh0KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCFpc0ZvY3VzZWQgJiYgIWFmdGVyQ29udGV4dE1lbnUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBpbkNvbXBvc2l0aW9uID0gdHJ1ZTsKICAgICAgICAKICAgICAgICB2YXIgc2VsZWN0aW9uID0gaG9zdC5zZWxlY3Rpb247CiAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlKCk7CiAgICAgICAgdmFyIHJvdyA9IHNlbGVjdGlvbi5jdXJzb3Iucm93OwogICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsKICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgICAgICB2YXIgbGluZSA9IGhvc3Quc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CgogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgIT0gcm93KSB7CiAgICAgICAgICAgIHZhciBwcmV2TGluZSA9IGhvc3Quc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHJhbmdlLnN0YXJ0LnJvdyA8IHJvdyAtIDEgPyAwIDogc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgIHNlbGVjdGlvbkVuZCArPSBwcmV2TGluZS5sZW5ndGggKyAxOwogICAgICAgICAgICBsaW5lID0gcHJldkxpbmUgKyAiXG4iICsgbGluZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocmFuZ2UuZW5kLnJvdyAhPSByb3cpIHsKICAgICAgICAgICAgdmFyIG5leHRMaW5lID0gaG9zdC5zZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHJhbmdlLmVuZC5yb3cgPiByb3cgICsgMSA/IG5leHRMaW5lLmxlbmd0aCA6IHNlbGVjdGlvbkVuZDsKICAgICAgICAgICAgc2VsZWN0aW9uRW5kICs9IGxpbmUubGVuZ3RoICsgMTsKICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAiXG4iICsgbmV4dExpbmU7CiAgICAgICAgfQoKICAgICAgICBpZiAobGluZS5sZW5ndGggPiBNQVhfTElORV9MRU5HVEgpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0IDwgTUFYX0xJTkVfTEVOR1RIICYmIHNlbGVjdGlvbkVuZCA8IE1BWF9MSU5FX0xFTkdUSCkgewogICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc2xpY2UoMCwgTUFYX0xJTkVfTEVOR1RIKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxpbmUgPSAiXG4iOwogICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSAwOwogICAgICAgICAgICAgICAgc2VsZWN0aW9uRW5kID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIG5ld1ZhbHVlID0gbGluZSArICJcblxuIjsKICAgICAgICBpZiAobmV3VmFsdWUgIT0gbGFzdFZhbHVlKSB7CiAgICAgICAgICAgIHRleHQudmFsdWUgPSBsYXN0VmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgbGFzdFNlbGVjdGlvblN0YXJ0ID0gbGFzdFNlbGVjdGlvbkVuZCA9IG5ld1ZhbHVlLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKGFmdGVyQ29udGV4dE1lbnUpIHsKICAgICAgICAgICAgbGFzdFNlbGVjdGlvblN0YXJ0ID0gdGV4dC5zZWxlY3Rpb25TdGFydDsKICAgICAgICAgICAgbGFzdFNlbGVjdGlvbkVuZCA9IHRleHQuc2VsZWN0aW9uRW5kOwogICAgICAgIH0KICAgICAgICBpZiAoCiAgICAgICAgICAgIGxhc3RTZWxlY3Rpb25FbmQgIT0gc2VsZWN0aW9uRW5kIAogICAgICAgICAgICB8fCBsYXN0U2VsZWN0aW9uU3RhcnQgIT0gc2VsZWN0aW9uU3RhcnQgCiAgICAgICAgICAgIHx8IHRleHQuc2VsZWN0aW9uRW5kICE9IGxhc3RTZWxlY3Rpb25FbmQgLy8gb24gaWUgZWRnZSBzZWxlY3Rpb25FbmQgY2hhbmdlcyBzaWxlbnRseSBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24KICAgICAgICApIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHRleHQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CiAgICAgICAgICAgICAgICBsYXN0U2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgICAgICAgIGxhc3RTZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25FbmQ7CiAgICAgICAgICAgIH0gY2F0Y2goZSl7fQogICAgICAgIH0KICAgICAgICBpbkNvbXBvc2l0aW9uID0gZmFsc2U7CiAgICB9OwoKICAgIGlmIChpc0ZvY3VzZWQpCiAgICAgICAgaG9zdC5vbkZvY3VzKCk7CgoKICAgIHZhciBpc0FsbFNlbGVjdGVkID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiB0ZXh0LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmIHRleHQuc2VsZWN0aW9uRW5kID49IGxhc3RWYWx1ZS5sZW5ndGgKICAgICAgICAgICAgJiYgdGV4dC52YWx1ZSA9PT0gbGFzdFZhbHVlICYmIGxhc3RWYWx1ZQogICAgICAgICAgICAmJiB0ZXh0LnNlbGVjdGlvbkVuZCAhPT0gbGFzdFNlbGVjdGlvbkVuZDsKICAgIH07CgogICAgdmFyIG9uU2VsZWN0ID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKGNvcGllZCkgewogICAgICAgICAgICBjb3BpZWQgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgaWYgKGlzQWxsU2VsZWN0ZWQodGV4dCkpIHsKICAgICAgICAgICAgaG9zdC5zZWxlY3RBbGwoKTsKICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTsKICAgICAgICB9CiAgICB9OwoKICAgIHZhciBpbnB1dEhhbmRsZXIgPSBudWxsOwogICAgdGhpcy5zZXRJbnB1dEhhbmRsZXIgPSBmdW5jdGlvbihjYikge2lucHV0SGFuZGxlciA9IGNiO307CiAgICB0aGlzLmdldElucHV0SGFuZGxlciA9IGZ1bmN0aW9uKCkge3JldHVybiBpbnB1dEhhbmRsZXI7fTsKICAgIHZhciBhZnRlckNvbnRleHRNZW51ID0gZmFsc2U7CiAgICAKICAgIHZhciBzZW5kVGV4dCA9IGZ1bmN0aW9uKHZhbHVlLCBmcm9tSW5wdXQpIHsKICAgICAgICBpZiAoYWZ0ZXJDb250ZXh0TWVudSkKICAgICAgICAgICAgYWZ0ZXJDb250ZXh0TWVudSA9IGZhbHNlOwogICAgICAgIGlmIChwYXN0ZWQpIHsKICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgICAgaG9zdC5vblBhc3RlKHZhbHVlKTsKICAgICAgICAgICAgcGFzdGVkID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0ZXh0LnNlbGVjdGlvblN0YXJ0OwogICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gdGV4dC5zZWxlY3Rpb25FbmQ7CiAgICAgICAgCiAgICAgICAgICAgIHZhciBleHRlbmRMZWZ0ID0gbGFzdFNlbGVjdGlvblN0YXJ0OwogICAgICAgICAgICB2YXIgZXh0ZW5kUmlnaHQgPSBsYXN0VmFsdWUubGVuZ3RoIC0gbGFzdFNlbGVjdGlvbkVuZDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBpbnNlcnRlZCA9IHZhbHVlOwogICAgICAgICAgICB2YXIgcmVzdG9yZVN0YXJ0ID0gdmFsdWUubGVuZ3RoIC0gc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgIHZhciByZXN0b3JlRW5kID0gdmFsdWUubGVuZ3RoIC0gc2VsZWN0aW9uRW5kOwogICAgICAgIAogICAgICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgICAgIHdoaWxlIChleHRlbmRMZWZ0ID4gMCAmJiBsYXN0VmFsdWVbaV0gPT0gdmFsdWVbaV0pIHsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgIGV4dGVuZExlZnQtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnNlcnRlZCA9IGluc2VydGVkLnNsaWNlKGkpOwogICAgICAgICAgICBpID0gMTsKICAgICAgICAgICAgd2hpbGUgKGV4dGVuZFJpZ2h0ID4gMCAmJiBsYXN0VmFsdWUubGVuZ3RoIC0gaSA+IGxhc3RTZWxlY3Rpb25TdGFydCAtIDEgICYmIGxhc3RWYWx1ZVtsYXN0VmFsdWUubGVuZ3RoIC0gaV0gPT0gdmFsdWVbdmFsdWUubGVuZ3RoIC0gaV0pIHsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgIGV4dGVuZFJpZ2h0LS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdG9yZVN0YXJ0IC09IGktMTsKICAgICAgICAgICAgcmVzdG9yZUVuZCAtPSBpLTE7CiAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IGluc2VydGVkLmxlbmd0aCAtIGkgKyAxOwogICAgICAgICAgICBpZiAoZW5kSW5kZXggPCAwKSB7CiAgICAgICAgICAgICAgICBleHRlbmRMZWZ0ID0gLWVuZEluZGV4OwogICAgICAgICAgICAgICAgZW5kSW5kZXggPSAwOwogICAgICAgICAgICB9IAogICAgICAgICAgICBpbnNlcnRlZCA9IGluc2VydGVkLnNsaWNlKDAsIGVuZEluZGV4KTsKICAgICAgICAgICAgaWYgKCFmcm9tSW5wdXQgJiYgIWluc2VydGVkICYmICFyZXN0b3JlU3RhcnQgJiYgIWV4dGVuZExlZnQgJiYgIWV4dGVuZFJpZ2h0ICYmICFyZXN0b3JlRW5kKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICBzZW5kaW5nVGV4dCA9IHRydWU7CiAgICAgICAgICAgIGlmIChpbnNlcnRlZCAmJiAhZXh0ZW5kTGVmdCAmJiAhZXh0ZW5kUmlnaHQgJiYgIXJlc3RvcmVTdGFydCAmJiAhcmVzdG9yZUVuZCB8fCBjb21tYW5kTW9kZSkgewogICAgICAgICAgICAgICAgaG9zdC5vblRleHRJbnB1dChpbnNlcnRlZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBob3N0Lm9uVGV4dElucHV0KGluc2VydGVkLCB7CiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kTGVmdDogZXh0ZW5kTGVmdCwKICAgICAgICAgICAgICAgICAgICBleHRlbmRSaWdodDogZXh0ZW5kUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVN0YXJ0OiByZXN0b3JlU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUVuZDogcmVzdG9yZUVuZAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc2VuZGluZ1RleHQgPSBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlOwogICAgICAgICAgICBsYXN0U2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgICAgbGFzdFNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZDsKICAgICAgICAgICAgbGFzdFJlc3RvcmVFbmQgPSByZXN0b3JlRW5kOwogICAgICAgICAgICByZXR1cm4gaW5zZXJ0ZWQ7CiAgICAgICAgfQogICAgfTsKICAgIHZhciBvbklucHV0ID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChpbkNvbXBvc2l0aW9uKQogICAgICAgICAgICByZXR1cm4gb25Db21wb3NpdGlvblVwZGF0ZSgpOwogICAgICAgIGlmIChlICYmIGUuaW5wdXRUeXBlKSB7CiAgICAgICAgICAgIGlmIChlLmlucHV0VHlwZSA9PSAiaGlzdG9yeVVuZG8iKSByZXR1cm4gaG9zdC5leGVjQ29tbWFuZCgidW5kbyIpOwogICAgICAgICAgICBpZiAoZS5pbnB1dFR5cGUgPT0gImhpc3RvcnlSZWRvIikgcmV0dXJuIGhvc3QuZXhlY0NvbW1hbmQoInJlZG8iKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRhdGEgPSB0ZXh0LnZhbHVlOwogICAgICAgIHZhciBpbnNlcnRlZCA9IHNlbmRUZXh0KGRhdGEsIHRydWUpOwogICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IE1BWF9MSU5FX0xFTkdUSCArIDEwMCB8fCB2YWx1ZVJlc2V0UmVnZXgudGVzdChpbnNlcnRlZCkpCiAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7CiAgICB9OwogICAgCiAgICB2YXIgaGFuZGxlQ2xpcGJvYXJkRGF0YSA9IGZ1bmN0aW9uKGUsIGRhdGEsIGZvcmNlSUVNaW1lKSB7CiAgICAgICAgdmFyIGNsaXBib2FyZERhdGEgPSBlLmNsaXBib2FyZERhdGEgfHwgd2luZG93LmNsaXBib2FyZERhdGE7CiAgICAgICAgaWYgKCFjbGlwYm9hcmREYXRhIHx8IEJST0tFTl9TRVREQVRBKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIG1pbWUgPSBVU0VfSUVfTUlNRV9UWVBFIHx8IGZvcmNlSUVNaW1lID8gIlRleHQiIDogInRleHQvcGxhaW4iOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2xpcGJvYXJkRGF0YS5zZXREYXRhKG1pbWUsIGRhdGEpICE9PSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBjbGlwYm9hcmREYXRhLmdldERhdGEobWltZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgaWYgKCFmb3JjZUlFTWltZSkKICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEsIHRydWUpOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIGRvQ29weSA9IGZ1bmN0aW9uKGUsIGlzQ3V0KSB7CiAgICAgICAgdmFyIGRhdGEgPSBob3N0LmdldENvcHlUZXh0KCk7CiAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CgogICAgICAgIGlmIChoYW5kbGVDbGlwYm9hcmREYXRhKGUsIGRhdGEpKSB7CiAgICAgICAgICAgIGlmIChpc0lPUykgewogICAgICAgICAgICAgICAgcmVzZXRTZWxlY3Rpb24oZGF0YSk7CiAgICAgICAgICAgICAgICBjb3BpZWQgPSBkYXRhOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgY29waWVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9LCAxMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaXNDdXQgPyBob3N0Lm9uQ3V0KCkgOiBob3N0Lm9uQ29weSgpOwogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3BpZWQgPSB0cnVlOwogICAgICAgICAgICB0ZXh0LnZhbHVlID0gZGF0YTsKICAgICAgICAgICAgdGV4dC5zZWxlY3QoKTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgY29waWVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgaXNDdXQgPyBob3N0Lm9uQ3V0KCkgOiBob3N0Lm9uQ29weSgpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB2YXIgb25DdXQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgZG9Db3B5KGUsIHRydWUpOwogICAgfTsKICAgIAogICAgdmFyIG9uQ29weSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBkb0NvcHkoZSwgZmFsc2UpOwogICAgfTsKICAgIAogICAgdmFyIG9uUGFzdGUgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGRhdGEgPSBoYW5kbGVDbGlwYm9hcmREYXRhKGUpOwogICAgICAgIGlmIChjbGlwYm9hcmQucGFzdGVDYW5jZWxsZWQoKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAic3RyaW5nIikgewogICAgICAgICAgICBpZiAoZGF0YSkKICAgICAgICAgICAgICAgIGhvc3Qub25QYXN0ZShkYXRhLCBlKTsKICAgICAgICAgICAgaWYgKHVzZXJhZ2VudC5pc0lFKQogICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXNldFNlbGVjdGlvbik7CiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGV4dC52YWx1ZSA9ICIiOwogICAgICAgICAgICBwYXN0ZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH07CgogICAgZXZlbnQuYWRkQ29tbWFuZEtleUxpc3RlbmVyKHRleHQsIGhvc3Qub25Db21tYW5kS2V5LmJpbmQoaG9zdCkpOwoKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJzZWxlY3QiLCBvblNlbGVjdCk7CiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiaW5wdXQiLCBvbklucHV0KTsKCiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY3V0Iiwgb25DdXQpOwogICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImNvcHkiLCBvbkNvcHkpOwogICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgInBhc3RlIiwgb25QYXN0ZSk7CiAgICBpZiAoISgnb25jdXQnIGluIHRleHQpIHx8ICEoJ29uY29weScgaW4gdGV4dCkgfHwgISgnb25wYXN0ZScgaW4gdGV4dCkpIHsKICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihwYXJlbnROb2RlLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCh1c2VyYWdlbnQuaXNNYWMgJiYgIWUubWV0YUtleSkgfHwgIWUuY3RybEtleSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7CiAgICAgICAgICAgICAgICBjYXNlIDY3OgogICAgICAgICAgICAgICAgICAgIG9uQ29weShlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgODY6CiAgICAgICAgICAgICAgICAgICAgb25QYXN0ZShlKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgODg6CiAgICAgICAgICAgICAgICAgICAgb25DdXQoZSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KICAgIHZhciBvbkNvbXBvc2l0aW9uU3RhcnQgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24gfHwgIWhvc3Qub25Db21wb3NpdGlvblN0YXJ0IHx8IGhvc3QuJHJlYWRPbmx5KSAKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIAogICAgICAgIGluQ29tcG9zaXRpb24gPSB7fTsKCiAgICAgICAgaWYgKGNvbW1hbmRNb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgCiAgICAgICAgc2V0VGltZW91dChvbkNvbXBvc2l0aW9uVXBkYXRlLCAwKTsKICAgICAgICBob3N0Lm9uKCJtb3VzZWRvd24iLCBjYW5jZWxDb21wb3NpdGlvbik7CiAgICAgICAgCiAgICAgICAgdmFyIHJhbmdlID0gaG9zdC5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgIHJhbmdlLmVuZC5yb3cgPSByYW5nZS5zdGFydC5yb3c7CiAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsKICAgICAgICBpbkNvbXBvc2l0aW9uLm1hcmtlclJhbmdlID0gcmFuZ2U7CiAgICAgICAgaW5Db21wb3NpdGlvbi5zZWxlY3Rpb25TdGFydCA9IGxhc3RTZWxlY3Rpb25TdGFydDsKICAgICAgICBob3N0Lm9uQ29tcG9zaXRpb25TdGFydChpbkNvbXBvc2l0aW9uKTsKICAgICAgICAKICAgICAgICBpZiAoaW5Db21wb3NpdGlvbi51c2VUZXh0YXJlYUZvcklNRSkgewogICAgICAgICAgICB0ZXh0LnZhbHVlID0gIiI7CiAgICAgICAgICAgIGxhc3RWYWx1ZSA9ICIiOwogICAgICAgICAgICBsYXN0U2VsZWN0aW9uU3RhcnQgPSAwOwogICAgICAgICAgICBsYXN0U2VsZWN0aW9uRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICh0ZXh0Lm1zR2V0SW5wdXRDb250ZXh0KQogICAgICAgICAgICAgICAgaW5Db21wb3NpdGlvbi5jb250ZXh0ID0gdGV4dC5tc0dldElucHV0Q29udGV4dCgpOwogICAgICAgICAgICBpZiAodGV4dC5nZXRJbnB1dENvbnRleHQpCiAgICAgICAgICAgICAgICBpbkNvbXBvc2l0aW9uLmNvbnRleHQgPSB0ZXh0LmdldElucHV0Q29udGV4dCgpOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIG9uQ29tcG9zaXRpb25VcGRhdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIWluQ29tcG9zaXRpb24gfHwgIWhvc3Qub25Db21wb3NpdGlvblVwZGF0ZSB8fCBob3N0LiRyZWFkT25seSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChjb21tYW5kTW9kZSkKICAgICAgICAgICAgcmV0dXJuIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAgICAgICAgCiAgICAgICAgaWYgKGluQ29tcG9zaXRpb24udXNlVGV4dGFyZWFGb3JJTUUpIHsKICAgICAgICAgICAgaG9zdC5vbkNvbXBvc2l0aW9uVXBkYXRlKHRleHQudmFsdWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGRhdGEgPSB0ZXh0LnZhbHVlOwogICAgICAgICAgICBzZW5kVGV4dChkYXRhKTsKICAgICAgICAgICAgaWYgKGluQ29tcG9zaXRpb24ubWFya2VyUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChpbkNvbXBvc2l0aW9uLmNvbnRleHQpIHsKICAgICAgICAgICAgICAgICAgICBpbkNvbXBvc2l0aW9uLm1hcmtlclJhbmdlLnN0YXJ0LmNvbHVtbiA9IGluQ29tcG9zaXRpb24uc2VsZWN0aW9uU3RhcnQKICAgICAgICAgICAgICAgICAgICAgICAgPSBpbkNvbXBvc2l0aW9uLmNvbnRleHQuY29tcG9zaXRpb25TdGFydE9mZnNldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluQ29tcG9zaXRpb24ubWFya2VyUmFuZ2UuZW5kLmNvbHVtbiA9IGluQ29tcG9zaXRpb24ubWFya2VyUmFuZ2Uuc3RhcnQuY29sdW1uCiAgICAgICAgICAgICAgICAgICAgKyBsYXN0U2VsZWN0aW9uRW5kIC0gaW5Db21wb3NpdGlvbi5zZWxlY3Rpb25TdGFydCArIGxhc3RSZXN0b3JlRW5kOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgb25Db21wb3NpdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWhvc3Qub25Db21wb3NpdGlvbkVuZCB8fCBob3N0LiRyZWFkT25seSkgcmV0dXJuOwogICAgICAgIGluQ29tcG9zaXRpb24gPSBmYWxzZTsKICAgICAgICBob3N0Lm9uQ29tcG9zaXRpb25FbmQoKTsKICAgICAgICBob3N0Lm9mZigibW91c2Vkb3duIiwgY2FuY2VsQ29tcG9zaXRpb24pOwogICAgICAgIGlmIChlKSBvbklucHV0KCk7CiAgICB9OwogICAgCgogICAgZnVuY3Rpb24gY2FuY2VsQ29tcG9zaXRpb24oKSB7CiAgICAgICAgaWdub3JlRm9jdXNFdmVudHMgPSB0cnVlOwogICAgICAgIHRleHQuYmx1cigpOwogICAgICAgIHRleHQuZm9jdXMoKTsKICAgICAgICBpZ25vcmVGb2N1c0V2ZW50cyA9IGZhbHNlOwogICAgfQoKICAgIHZhciBzeW5jQ29tcG9zaXRpb24gPSBsYW5nLmRlbGF5ZWRDYWxsKG9uQ29tcG9zaXRpb25VcGRhdGUsIDUwKS5zY2hlZHVsZS5iaW5kKG51bGwsIG51bGwpOwogICAgCiAgICBmdW5jdGlvbiBvbktleXVwKGUpIHsKICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3ICYmIHRleHQudmFsdWUubGVuZ3RoIDwgdGV4dC5zZWxlY3Rpb25TdGFydCkgewogICAgICAgICAgICBpZiAoIWluQ29tcG9zaXRpb24pCiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSB0ZXh0LnZhbHVlOwogICAgICAgICAgICBsYXN0U2VsZWN0aW9uU3RhcnQgPSBsYXN0U2VsZWN0aW9uRW5kID0gLTE7CiAgICAgICAgICAgIHJlc2V0U2VsZWN0aW9uKCk7CiAgICAgICAgfQogICAgICAgIHN5bmNDb21wb3NpdGlvbigpOwogICAgfQoKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb21wb3NpdGlvbnN0YXJ0Iiwgb25Db21wb3NpdGlvblN0YXJ0KTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJjb21wb3NpdGlvbnVwZGF0ZSIsIG9uQ29tcG9zaXRpb25VcGRhdGUpOwogICAgZXZlbnQuYWRkTGlzdGVuZXIodGV4dCwgImtleXVwIiwgb25LZXl1cCk7CiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAia2V5ZG93biIsIHN5bmNDb21wb3NpdGlvbik7CiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY29tcG9zaXRpb25lbmQiLCBvbkNvbXBvc2l0aW9uRW5kKTsKCiAgICB0aGlzLmdldEVsZW1lbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGV4dDsKICAgIH07CiAgICB0aGlzLnNldENvbW1hbmRNb2RlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgIGNvbW1hbmRNb2RlID0gdmFsdWU7CiAgICAgICB0ZXh0LnJlYWRPbmx5ID0gZmFsc2U7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFJlYWRPbmx5ID0gZnVuY3Rpb24ocmVhZE9ubHkpIHsKICAgICAgICBpZiAoIWNvbW1hbmRNb2RlKQogICAgICAgICAgICB0ZXh0LnJlYWRPbmx5ID0gcmVhZE9ubHk7CiAgICB9OwoKICAgIHRoaXMuc2V0Q29weVdpdGhFbXB0eVNlbGVjdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICB9OwoKICAgIHRoaXMub25Db250ZXh0TWVudSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBhZnRlckNvbnRleHRNZW51ID0gdHJ1ZTsKICAgICAgICByZXNldFNlbGVjdGlvbigpOwogICAgICAgIGhvc3QuX2VtaXQoIm5hdGl2ZWNvbnRleHRtZW51Iiwge3RhcmdldDogaG9zdCwgZG9tRXZlbnQ6IGV9KTsKICAgICAgICB0aGlzLm1vdmVUb01vdXNlKGUsIHRydWUpOwogICAgfTsKICAgIAogICAgdGhpcy5tb3ZlVG9Nb3VzZSA9IGZ1bmN0aW9uKGUsIGJyaW5nVG9Gcm9udCkgewogICAgICAgIGlmICghdGVtcFN0eWxlKQogICAgICAgICAgICB0ZW1wU3R5bGUgPSB0ZXh0LnN0eWxlLmNzc1RleHQ7CiAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0gKGJyaW5nVG9Gcm9udCA/ICJ6LWluZGV4OjEwMDAwMDsiIDogIiIpCiAgICAgICAgICAgICsgKHVzZXJhZ2VudC5pc0lFID8gIm9wYWNpdHk6MC4xOyIgOiAiIikKICAgICAgICAgICAgKyAidGV4dC1pbmRlbnQ6IC0iICsgKGxhc3RTZWxlY3Rpb25TdGFydCArIGxhc3RTZWxlY3Rpb25FbmQpICogaG9zdC5yZW5kZXJlci5jaGFyYWN0ZXJXaWR0aCAqIDAuNSArICJweDsiOwoKICAgICAgICB2YXIgcmVjdCA9IGhvc3QuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHZhciBzdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKGhvc3QuY29udGFpbmVyKTsKICAgICAgICB2YXIgdG9wID0gcmVjdC50b3AgKyAocGFyc2VJbnQoc3R5bGUuYm9yZGVyVG9wV2lkdGgpIHx8IDApOwogICAgICAgIHZhciBsZWZ0ID0gcmVjdC5sZWZ0ICsgKHBhcnNlSW50KHJlY3QuYm9yZGVyTGVmdFdpZHRoKSB8fCAwKTsKICAgICAgICB2YXIgbWF4VG9wID0gcmVjdC5ib3R0b20gLSB0b3AgLSB0ZXh0LmNsaWVudEhlaWdodCAtMjsKICAgICAgICB2YXIgbW92ZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZG9tLnRyYW5zbGF0ZSh0ZXh0LCBlLmNsaWVudFggLSBsZWZ0IC0gMiwgTWF0aC5taW4oZS5jbGllbnRZIC0gdG9wIC0gMiwgbWF4VG9wKSk7CiAgICAgICAgfTsgCiAgICAgICAgbW92ZShlKTsKCiAgICAgICAgaWYgKGUudHlwZSAhPSAibW91c2Vkb3duIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBob3N0LnJlbmRlcmVyLiRpc01vdXNlUHJlc3NlZCA9IHRydWU7CgogICAgICAgIGNsZWFyVGltZW91dChjbG9zZVRpbWVvdXQpOwogICAgICAgIGlmICh1c2VyYWdlbnQuaXNXaW4pCiAgICAgICAgICAgIGV2ZW50LmNhcHR1cmUoaG9zdC5jb250YWluZXIsIG1vdmUsIG9uQ29udGV4dE1lbnVDbG9zZSk7CiAgICB9OwoKICAgIHRoaXMub25Db250ZXh0TWVudUNsb3NlID0gb25Db250ZXh0TWVudUNsb3NlOwogICAgdmFyIGNsb3NlVGltZW91dDsKICAgIGZ1bmN0aW9uIG9uQ29udGV4dE1lbnVDbG9zZSgpIHsKICAgICAgICBjbGVhclRpbWVvdXQoY2xvc2VUaW1lb3V0KTsKICAgICAgICBjbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKHRlbXBTdHlsZSkgewogICAgICAgICAgICAgICAgdGV4dC5zdHlsZS5jc3NUZXh0ID0gdGVtcFN0eWxlOwogICAgICAgICAgICAgICAgdGVtcFN0eWxlID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4kaXNNb3VzZVByZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKGhvc3QucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yKQogICAgICAgICAgICAgICAgaG9zdC5yZW5kZXJlci4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKICAgICAgICB9LCAwKTsKICAgIH0KCiAgICB2YXIgb25Db250ZXh0TWVudSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBob3N0LnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGUpOwogICAgICAgIG9uQ29udGV4dE1lbnVDbG9zZSgpOwogICAgfTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJtb3VzZXVwIiwgb25Db250ZXh0TWVudSk7CiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBvbkNvbnRleHRNZW51Q2xvc2UoKTsKICAgIH0pOwogICAgZXZlbnQuYWRkTGlzdGVuZXIoaG9zdC5yZW5kZXJlci5zY3JvbGxlciwgImNvbnRleHRtZW51Iiwgb25Db250ZXh0TWVudSk7CiAgICBldmVudC5hZGRMaXN0ZW5lcih0ZXh0LCAiY29udGV4dG1lbnUiLCBvbkNvbnRleHRNZW51KTsKICAgIAogICAgaWYgKGlzSU9TKQogICAgICAgIGFkZElvc1NlbGVjdGlvbkhhbmRsZXIocGFyZW50Tm9kZSwgaG9zdCwgdGV4dCk7CgogICAgZnVuY3Rpb24gYWRkSW9zU2VsZWN0aW9uSGFuZGxlcihwYXJlbnROb2RlLCBob3N0LCB0ZXh0KSB7CiAgICAgICAgdmFyIHR5cGluZ1Jlc2V0VGltZW91dCA9IG51bGw7CiAgICAgICAgdmFyIHR5cGluZyA9IGZhbHNlOwogCiAgICAgICAgdGV4dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKHR5cGluZ1Jlc2V0VGltZW91dCkgY2xlYXJUaW1lb3V0KHR5cGluZ1Jlc2V0VGltZW91dCk7CiAgICAgICAgICAgIHR5cGluZyA9IHRydWU7CiAgICAgICAgfSwgdHJ1ZSk7CgogICAgICAgIHRleHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICB0eXBpbmdSZXNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHR5cGluZyA9IGZhbHNlOwogICAgICAgICAgICB9LCAxMDApOwogICAgICAgIH0sIHRydWUpOwogICAgICAgIHZhciBkZXRlY3RBcnJvd0tleXMgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSB0ZXh0KSByZXR1cm47CiAgICAgICAgICAgIGlmICh0eXBpbmcgfHwgaW5Db21wb3NpdGlvbiB8fCBob3N0LiRtb3VzZUhhbmRsZXIuaXNNb3VzZVByZXNzZWQpIHJldHVybjsKCiAgICAgICAgICAgIGlmIChjb3BpZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0ZXh0LnNlbGVjdGlvblN0YXJ0OwogICAgICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gdGV4dC5zZWxlY3Rpb25FbmQ7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIga2V5ID0gbnVsbDsKICAgICAgICAgICAgdmFyIG1vZGlmaWVyID0gMDsKICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0ID09IDApIHsKICAgICAgICAgICAgICAgIGtleSA9IEtFWVMudXA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnQgPT0gMSkgewogICAgICAgICAgICAgICAga2V5ID0gS0VZUy5ob21lOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkVuZCA+IGxhc3RTZWxlY3Rpb25FbmQgJiYgbGFzdFZhbHVlW3NlbGVjdGlvbkVuZF0gPT0gIlxuIikgewogICAgICAgICAgICAgICAga2V5ID0gS0VZUy5lbmQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnQgPCBsYXN0U2VsZWN0aW9uU3RhcnQgJiYgbGFzdFZhbHVlW3NlbGVjdGlvblN0YXJ0IC0gMV0gPT0gIiAiKSB7CiAgICAgICAgICAgICAgICBrZXkgPSBLRVlTLmxlZnQ7CiAgICAgICAgICAgICAgICBtb2RpZmllciA9IE1PRFMub3B0aW9uOwogICAgICAgICAgICB9IGVsc2UgaWYgKAogICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPCBsYXN0U2VsZWN0aW9uU3RhcnQKICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9PSBsYXN0U2VsZWN0aW9uU3RhcnQgCiAgICAgICAgICAgICAgICAgICAgJiYgbGFzdFNlbGVjdGlvbkVuZCAhPSBsYXN0U2VsZWN0aW9uU3RhcnQKICAgICAgICAgICAgICAgICAgICAmJiBzZWxlY3Rpb25TdGFydCA9PSBzZWxlY3Rpb25FbmQKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBrZXkgPSBLRVlTLmxlZnQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kID4gbGFzdFNlbGVjdGlvbkVuZCAmJiBsYXN0VmFsdWUuc2xpY2UoMCwgc2VsZWN0aW9uRW5kKS5zcGxpdCgiXG4iKS5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgICAgICBrZXkgPSBLRVlTLmRvd247CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kID4gbGFzdFNlbGVjdGlvbkVuZCAmJiBsYXN0VmFsdWVbc2VsZWN0aW9uRW5kIC0gMV0gPT0gIiAiKSB7CiAgICAgICAgICAgICAgICBrZXkgPSBLRVlTLnJpZ2h0OwogICAgICAgICAgICAgICAgbW9kaWZpZXIgPSBNT0RTLm9wdGlvbjsKICAgICAgICAgICAgfSBlbHNlIGlmICgKICAgICAgICAgICAgICAgIHNlbGVjdGlvbkVuZCA+IGxhc3RTZWxlY3Rpb25FbmQKICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25FbmQgPT0gbGFzdFNlbGVjdGlvbkVuZCAKICAgICAgICAgICAgICAgICAgICAmJiBsYXN0U2VsZWN0aW9uRW5kICE9IGxhc3RTZWxlY3Rpb25TdGFydAogICAgICAgICAgICAgICAgICAgICYmIHNlbGVjdGlvblN0YXJ0ID09IHNlbGVjdGlvbkVuZAogICAgICAgICAgICAgICAgKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGtleSA9IEtFWVMucmlnaHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCAhPT0gc2VsZWN0aW9uRW5kKQogICAgICAgICAgICAgICAgbW9kaWZpZXIgfD0gTU9EUy5zaGlmdDsKCiAgICAgICAgICAgIGlmIChrZXkpIHsKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBob3N0Lm9uQ29tbWFuZEtleSh7fSwgbW9kaWZpZXIsIGtleSk7CiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCAmJiBob3N0LmNvbW1hbmRzKSB7CiAgICAgICAgICAgICAgICAgICAga2V5ID0gS0VZUy5rZXlDb2RlVG9TdHJpbmcoa2V5KTsKICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWFuZCA9IGhvc3QuY29tbWFuZHMuZmluZEtleUNvbW1hbmQobW9kaWZpZXIsIGtleSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQpCiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuZXhlY0NvbW1hbmQoY29tbWFuZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsYXN0U2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgICAgICAgIGxhc3RTZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25FbmQ7CiAgICAgICAgICAgICAgICByZXNldFNlbGVjdGlvbigiIik7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGRldGVjdEFycm93S2V5cyk7CiAgICAgICAgaG9zdC5vbigiZGVzdHJveSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBkZXRlY3RBcnJvd0tleXMpOwogICAgICAgIH0pOwogICAgfQoKfTsKCmV4cG9ydHMuVGV4dElucHV0ID0gVGV4dElucHV0Owp9KTsKCmRlZmluZSgiYWNlL21vdXNlL2RlZmF1bHRfaGFuZGxlcnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL3VzZXJhZ2VudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKCnZhciBEUkFHX09GRlNFVCA9IDA7IC8vIHBpeGVscwp2YXIgU0NST0xMX0NPT0xET1dOX1QgPSA1NTA7IC8vIG1pbGxpc2Vjb25kcwoKZnVuY3Rpb24gRGVmYXVsdEhhbmRsZXJzKG1vdXNlSGFuZGxlcikgewogICAgbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7CgogICAgdmFyIGVkaXRvciA9IG1vdXNlSGFuZGxlci5lZGl0b3I7CiAgICBlZGl0b3Iuc2V0RGVmYXVsdEhhbmRsZXIoIm1vdXNlZG93biIsIHRoaXMub25Nb3VzZURvd24uYmluZChtb3VzZUhhbmRsZXIpKTsKICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigiZGJsY2xpY2siLCB0aGlzLm9uRG91YmxlQ2xpY2suYmluZChtb3VzZUhhbmRsZXIpKTsKICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigidHJpcGxlY2xpY2siLCB0aGlzLm9uVHJpcGxlQ2xpY2suYmluZChtb3VzZUhhbmRsZXIpKTsKICAgIGVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigicXVhZGNsaWNrIiwgdGhpcy5vblF1YWRDbGljay5iaW5kKG1vdXNlSGFuZGxlcikpOwogICAgZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJtb3VzZXdoZWVsIiwgdGhpcy5vbk1vdXNlV2hlZWwuYmluZChtb3VzZUhhbmRsZXIpKTsKCiAgICB2YXIgZXhwb3J0cyA9IFsic2VsZWN0IiwgInN0YXJ0U2VsZWN0IiwgInNlbGVjdEVuZCIsICJzZWxlY3RBbGxFbmQiLCAic2VsZWN0QnlXb3Jkc0VuZCIsCiAgICAgICAgInNlbGVjdEJ5TGluZXNFbmQiLCAiZHJhZ1dhaXQiLCAiZHJhZ1dhaXRFbmQiLCAiZm9jdXNXYWl0Il07CgogICAgZXhwb3J0cy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHsKICAgICAgICBtb3VzZUhhbmRsZXJbeF0gPSB0aGlzW3hdOwogICAgfSwgdGhpcyk7CgogICAgbW91c2VIYW5kbGVyLnNlbGVjdEJ5TGluZXMgPSB0aGlzLmV4dGVuZFNlbGVjdGlvbkJ5LmJpbmQobW91c2VIYW5kbGVyLCAiZ2V0TGluZVJhbmdlIik7CiAgICBtb3VzZUhhbmRsZXIuc2VsZWN0QnlXb3JkcyA9IHRoaXMuZXh0ZW5kU2VsZWN0aW9uQnkuYmluZChtb3VzZUhhbmRsZXIsICJnZXRXb3JkUmFuZ2UiKTsKfQoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMub25Nb3VzZURvd24gPSBmdW5jdGlvbihldikgewogICAgICAgIHZhciBpblNlbGVjdGlvbiA9IGV2LmluU2VsZWN0aW9uKCk7CiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTsKICAgICAgICB0aGlzLm1vdXNlZG93bkV2ZW50ID0gZXY7CiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwoKICAgICAgICB2YXIgYnV0dG9uID0gZXYuZ2V0QnV0dG9uKCk7CiAgICAgICAgaWYgKGJ1dHRvbiAhPT0gMCkgewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICAgICAgdmFyIHNlbGVjdGlvbkVtcHR5ID0gc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSgpOwogICAgICAgICAgICBpZiAoc2VsZWN0aW9uRW1wdHkgfHwgYnV0dG9uID09IDEpCiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7CiAgICAgICAgICAgIGlmIChidXR0b24gPT0gMikgewogICAgICAgICAgICAgICAgZWRpdG9yLnRleHRJbnB1dC5vbkNvbnRleHRNZW51KGV2LmRvbUV2ZW50KTsKICAgICAgICAgICAgICAgIGlmICghdXNlcmFnZW50LmlzTW96aWxsYSkKICAgICAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA9IERhdGUubm93KCk7CiAgICAgICAgaWYgKGluU2VsZWN0aW9uICYmICFlZGl0b3IuaXNGb2N1c2VkKCkpIHsKICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgICAgIGlmICh0aGlzLiRmb2N1c1RpbWVvdXQgJiYgIXRoaXMuJGNsaWNrU2VsZWN0aW9uICYmICFlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoImZvY3VzV2FpdCIpOwogICAgICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZXYpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNhcHR1cmVNb3VzZShldik7CiAgICAgICAgdGhpcy5zdGFydFNlbGVjdChwb3MsIGV2LmRvbUV2ZW50Ll9jbGlja3MgPiAxKTsKICAgICAgICByZXR1cm4gZXYucHJldmVudERlZmF1bHQoKTsKICAgIH07CgogICAgdGhpcy5zdGFydFNlbGVjdCA9IGZ1bmN0aW9uKHBvcywgd2FpdEZvckNsaWNrU2VsZWN0aW9uKSB7CiAgICAgICAgcG9zID0gcG9zIHx8IHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CiAgICAgICAgaWYgKCF0aGlzLm1vdXNlZG93bkV2ZW50KSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duRXZlbnQuZ2V0U2hpZnRLZXkoKSkKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RUb1Bvc2l0aW9uKHBvcyk7CiAgICAgICAgZWxzZSBpZiAoIXdhaXRGb3JDbGlja1NlbGVjdGlvbikKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpOwogICAgICAgIGlmICghd2FpdEZvckNsaWNrU2VsZWN0aW9uKQogICAgICAgICAgICB0aGlzLnNlbGVjdCgpOwogICAgICAgIGlmIChlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuc2V0Q2FwdHVyZSkgewogICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuc2V0Q2FwdHVyZSgpOwogICAgICAgIH0KICAgICAgICBlZGl0b3Iuc2V0U3R5bGUoImFjZV9zZWxlY3RpbmciKTsKICAgICAgICB0aGlzLnNldFN0YXRlKCJzZWxlY3QiKTsKICAgIH07CgogICAgdGhpcy5zZWxlY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYW5jaG9yLCBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHRoaXMueCwgdGhpcy55KTsKICAgICAgICBpZiAodGhpcy4kY2xpY2tTZWxlY3Rpb24pIHsKICAgICAgICAgICAgdmFyIGNtcCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChjdXJzb3IpOwoKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uZW5kOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICBhbmNob3IgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5zdGFydDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rpb24sIGN1cnNvcik7CiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmllbnRlZFJhbmdlLmN1cnNvcjsKICAgICAgICAgICAgICAgIGFuY2hvciA9IG9yaWVudGVkUmFuZ2UuYW5jaG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOwogICAgICAgIH0KICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgIH07CgogICAgdGhpcy5leHRlbmRTZWxlY3Rpb25CeSA9IGZ1bmN0aW9uKHVuaXROYW1lKSB7CiAgICAgICAgdmFyIGFuY2hvciwgZWRpdG9yID0gdGhpcy5lZGl0b3I7CiAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLngsIHRoaXMueSk7CiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvblt1bml0TmFtZV0oY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgaWYgKHRoaXMuJGNsaWNrU2VsZWN0aW9uKSB7CiAgICAgICAgICAgIHZhciBjbXBTdGFydCA9IHRoaXMuJGNsaWNrU2VsZWN0aW9uLmNvbXBhcmVQb2ludChyYW5nZS5zdGFydCk7CiAgICAgICAgICAgIHZhciBjbXBFbmQgPSB0aGlzLiRjbGlja1NlbGVjdGlvbi5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKTsKCiAgICAgICAgICAgIGlmIChjbXBTdGFydCA9PSAtMSAmJiBjbXBFbmQgPD0gMCkgewogICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uZW5kOwogICAgICAgICAgICAgICAgaWYgKHJhbmdlLmVuZC5yb3cgIT0gY3Vyc29yLnJvdyB8fCByYW5nZS5lbmQuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wRW5kID09IDEgJiYgY21wU3RhcnQgPj0gMCkgewogICAgICAgICAgICAgICAgYW5jaG9yID0gdGhpcy4kY2xpY2tTZWxlY3Rpb24uc3RhcnQ7CiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ICE9IGN1cnNvci5yb3cgfHwgcmFuZ2Uuc3RhcnQuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gcmFuZ2UuZW5kOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcFN0YXJ0ID09IC0xICYmIGNtcEVuZCA9PSAxKSB7CiAgICAgICAgICAgICAgICBjdXJzb3IgPSByYW5nZS5lbmQ7CiAgICAgICAgICAgICAgICBhbmNob3IgPSByYW5nZS5zdGFydDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBvcmllbnRlZFJhbmdlID0gY2FsY1JhbmdlT3JpZW50YXRpb24odGhpcy4kY2xpY2tTZWxlY3Rpb24sIGN1cnNvcik7CiAgICAgICAgICAgICAgICBjdXJzb3IgPSBvcmllbnRlZFJhbmdlLmN1cnNvcjsKICAgICAgICAgICAgICAgIGFuY2hvciA9IG9yaWVudGVkUmFuZ2UuYW5jaG9yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uQW5jaG9yKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOwogICAgICAgIH0KICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFRvUG9zaXRpb24oY3Vyc29yKTsKICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgIH07CgogICAgdGhpcy5zZWxlY3RFbmQgPQogICAgdGhpcy5zZWxlY3RBbGxFbmQgPQogICAgdGhpcy5zZWxlY3RCeVdvcmRzRW5kID0KICAgIHRoaXMuc2VsZWN0QnlMaW5lc0VuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uID0gbnVsbDsKICAgICAgICB0aGlzLmVkaXRvci51bnNldFN0eWxlKCJhY2Vfc2VsZWN0aW5nIik7CiAgICAgICAgaWYgKHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnJlbGVhc2VDYXB0dXJlKSB7CiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLnJlbGVhc2VDYXB0dXJlKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmZvY3VzV2FpdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkaXN0YW5jZSA9IGNhbGNEaXN0YW5jZSh0aGlzLm1vdXNlZG93bkV2ZW50LngsIHRoaXMubW91c2Vkb3duRXZlbnQueSwgdGhpcy54LCB0aGlzLnkpOwogICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTsKCiAgICAgICAgaWYgKGRpc3RhbmNlID4gRFJBR19PRkZTRVQgfHwgdGltZSAtIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA+IHRoaXMuJGZvY3VzVGltZW91dCkKICAgICAgICAgICAgdGhpcy5zdGFydFNlbGVjdCh0aGlzLm1vdXNlZG93bkV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKSk7CiAgICB9OwoKICAgIHRoaXMub25Eb3VibGVDbGljayA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTsKICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CiAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKCiAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRCcmFja2V0UmFuZ2UocG9zKTsKICAgICAgICBpZiAocmFuZ2UpIHsKICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uLS07CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0Iik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFdvcmRSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgic2VsZWN0QnlXb3JkcyIpOwogICAgICAgIH0KICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IHJhbmdlOwogICAgICAgIHRoaXMuc2VsZWN0KCk7CiAgICB9OwoKICAgIHRoaXMub25UcmlwbGVDbGljayA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTsKICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CgogICAgICAgIHRoaXMuc2V0U3RhdGUoInNlbGVjdEJ5TGluZXMiKTsKICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICBpZiAocmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiByYW5nZS5jb250YWlucyhwb3Mucm93LCBwb3MuY29sdW1uKSkgewogICAgICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHRoaXMuJGNsaWNrU2VsZWN0aW9uLmVuZCA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHJhbmdlLmVuZC5yb3cpLmVuZDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHBvcy5yb3cpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlbGVjdCgpOwogICAgfTsKCiAgICB0aGlzLm9uUXVhZENsaWNrID0gZnVuY3Rpb24oZXYpIHsKICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CgogICAgICAgIGVkaXRvci5zZWxlY3RBbGwoKTsKICAgICAgICB0aGlzLiRjbGlja1NlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgIHRoaXMuc2V0U3RhdGUoInNlbGVjdEFsbCIpOwogICAgfTsKCiAgICB0aGlzLm9uTW91c2VXaGVlbCA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgICAgaWYgKGV2LmdldEFjY2VsS2V5KCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAoZXYuZ2V0U2hpZnRLZXkoKSAmJiBldi53aGVlbFkgJiYgIWV2LndoZWVsWCkgewogICAgICAgICAgICBldi53aGVlbFggPSBldi53aGVlbFk7CiAgICAgICAgICAgIGV2LndoZWVsWSA9IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAgICAKICAgICAgICBpZiAoIXRoaXMuJGxhc3RTY3JvbGwpCiAgICAgICAgICAgIHRoaXMuJGxhc3RTY3JvbGwgPSB7IHQ6IDAsIHZ4OiAwLCB2eTogMCwgYWxsb3dlZDogMCB9OwogICAgICAgIAogICAgICAgIHZhciBwcmV2U2Nyb2xsID0gdGhpcy4kbGFzdFNjcm9sbDsKICAgICAgICB2YXIgdCA9IGV2LmRvbUV2ZW50LnRpbWVTdGFtcDsKICAgICAgICB2YXIgZHQgPSB0IC0gcHJldlNjcm9sbC50OwogICAgICAgIHZhciB2eCA9IGR0ID8gZXYud2hlZWxYIC8gZHQgOiBwcmV2U2Nyb2xsLnZ4OwogICAgICAgIHZhciB2eSA9IGR0ID8gZXYud2hlZWxZIC8gZHQgOiBwcmV2U2Nyb2xsLnZ5OwogICAgICAgIGlmIChkdCA8IFNDUk9MTF9DT09MRE9XTl9UKSB7CiAgICAgICAgICAgIHZ4ID0gKHZ4ICsgcHJldlNjcm9sbC52eCkgLyAyOwogICAgICAgICAgICB2eSA9ICh2eSArIHByZXZTY3JvbGwudnkpIC8gMjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IE1hdGguYWJzKHZ4IC8gdnkpOwogICAgICAgIAogICAgICAgIHZhciBjYW5TY3JvbGwgPSBmYWxzZTsKICAgICAgICBpZiAoZGlyZWN0aW9uID49IDEgJiYgZWRpdG9yLnJlbmRlcmVyLmlzU2Nyb2xsYWJsZUJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCAwKSkKICAgICAgICAgICAgY2FuU2Nyb2xsID0gdHJ1ZTsKICAgICAgICBpZiAoZGlyZWN0aW9uIDw9IDEgJiYgZWRpdG9yLnJlbmRlcmVyLmlzU2Nyb2xsYWJsZUJ5KDAsIGV2LndoZWVsWSAqIGV2LnNwZWVkKSkKICAgICAgICAgICAgY2FuU2Nyb2xsID0gdHJ1ZTsKICAgICAgICAgICAgCiAgICAgICAgaWYgKGNhblNjcm9sbCkgewogICAgICAgICAgICBwcmV2U2Nyb2xsLmFsbG93ZWQgPSB0OwogICAgICAgIH0gZWxzZSBpZiAodCAtIHByZXZTY3JvbGwuYWxsb3dlZCA8IFNDUk9MTF9DT09MRE9XTl9UKSB7CiAgICAgICAgICAgIHZhciBpc1Nsb3dlciA9IE1hdGguYWJzKHZ4KSA8PSAxLjUgKiBNYXRoLmFicyhwcmV2U2Nyb2xsLnZ4KQogICAgICAgICAgICAgICAgJiYgTWF0aC5hYnModnkpIDw9IDEuNSAqIE1hdGguYWJzKHByZXZTY3JvbGwudnkpOwogICAgICAgICAgICBpZiAoaXNTbG93ZXIpIHsKICAgICAgICAgICAgICAgIGNhblNjcm9sbCA9IHRydWU7CiAgICAgICAgICAgICAgICBwcmV2U2Nyb2xsLmFsbG93ZWQgPSB0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHJldlNjcm9sbC5hbGxvd2VkID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBwcmV2U2Nyb2xsLnQgPSB0OwogICAgICAgIHByZXZTY3JvbGwudnggPSB2eDsKICAgICAgICBwcmV2U2Nyb2xsLnZ5ID0gdnk7CgogICAgICAgIGlmIChjYW5TY3JvbGwpIHsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEJ5KGV2LndoZWVsWCAqIGV2LnNwZWVkLCBldi53aGVlbFkgKiBldi5zcGVlZCk7CiAgICAgICAgICAgIHJldHVybiBldi5zdG9wKCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRGVmYXVsdEhhbmRsZXJzLnByb3RvdHlwZSk7CgpleHBvcnRzLkRlZmF1bHRIYW5kbGVycyA9IERlZmF1bHRIYW5kbGVyczsKCmZ1bmN0aW9uIGNhbGNEaXN0YW5jZShheCwgYXksIGJ4LCBieSkgewogICAgcmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhieCAtIGF4LCAyKSArIE1hdGgucG93KGJ5IC0gYXksIDIpKTsKfQoKZnVuY3Rpb24gY2FsY1JhbmdlT3JpZW50YXRpb24ocmFuZ2UsIGN1cnNvcikgewogICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PSByYW5nZS5lbmQucm93KQogICAgICAgIHZhciBjbXAgPSAyICogY3Vyc29yLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbiAtIHJhbmdlLmVuZC5jb2x1bW47CiAgICBlbHNlIGlmIChyYW5nZS5zdGFydC5yb3cgPT0gcmFuZ2UuZW5kLnJvdyAtIDEgJiYgIXJhbmdlLnN0YXJ0LmNvbHVtbiAmJiAhcmFuZ2UuZW5kLmNvbHVtbikKICAgICAgICB2YXIgY21wID0gY3Vyc29yLmNvbHVtbiAtIDQ7CiAgICBlbHNlCiAgICAgICAgdmFyIGNtcCA9IDIgKiBjdXJzb3Iucm93IC0gcmFuZ2Uuc3RhcnQucm93IC0gcmFuZ2UuZW5kLnJvdzsKCiAgICBpZiAoY21wIDwgMCkKICAgICAgICByZXR1cm4ge2N1cnNvcjogcmFuZ2Uuc3RhcnQsIGFuY2hvcjogcmFuZ2UuZW5kfTsKICAgIGVsc2UKICAgICAgICByZXR1cm4ge2N1cnNvcjogcmFuZ2UuZW5kLCBhbmNob3I6IHJhbmdlLnN0YXJ0fTsKfQoKfSk7CgpkZWZpbmUoImFjZS90b29sdGlwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgZG9tID0gcmVxdWlyZSgiLi9saWIvZG9tIik7CmZ1bmN0aW9uIFRvb2x0aXAgKHBhcmVudE5vZGUpIHsKICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7CiAgICB0aGlzLiRlbGVtZW50ID0gbnVsbDsKICAgIHRoaXMuJHBhcmVudE5vZGUgPSBwYXJlbnROb2RlOwp9CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB0aGlzLiRlbGVtZW50LmNsYXNzTmFtZSA9ICJhY2VfdG9vbHRpcCI7CiAgICAgICAgdGhpcy4kZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIHRoaXMuJHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy4kZWxlbWVudCk7CiAgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQ7CiAgICB9OwogICAgdGhpcy5nZXRFbGVtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGVsZW1lbnQgfHwgdGhpcy4kaW5pdCgpOwogICAgfTsKICAgIHRoaXMuc2V0VGV4dCA9IGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS50ZXh0Q29udGVudCA9IHRleHQ7CiAgICB9OwogICAgdGhpcy5zZXRIdG1sID0gZnVuY3Rpb24oaHRtbCkgewogICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLmlubmVySFRNTCA9IGh0bWw7CiAgICB9OwogICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5zdHlsZS5sZWZ0ID0geCArICJweCI7CiAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuc3R5bGUudG9wID0geSArICJweCI7CiAgICB9OwogICAgdGhpcy5zZXRDbGFzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5nZXRFbGVtZW50KCksIGNsYXNzTmFtZSk7CiAgICB9OwogICAgdGhpcy5zaG93ID0gZnVuY3Rpb24odGV4dCwgeCwgeSkgewogICAgICAgIGlmICh0ZXh0ICE9IG51bGwpCiAgICAgICAgICAgIHRoaXMuc2V0VGV4dCh0ZXh0KTsKICAgICAgICBpZiAoeCAhPSBudWxsICYmIHkgIT0gbnVsbCkKICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbih4LCB5KTsKICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7CiAgICAgICAgICAgIHRoaXMuZ2V0RWxlbWVudCgpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5pc09wZW4pIHsKICAgICAgICAgICAgdGhpcy5nZXRFbGVtZW50KCkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRIZWlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50KCkub2Zmc2V0SGVpZ2h0OwogICAgfTsKICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50KCkub2Zmc2V0V2lkdGg7CiAgICB9OwogICAgCiAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLiRlbGVtZW50ICYmIHRoaXMuJGVsZW1lbnQucGFyZW50Tm9kZSkgewogICAgICAgICAgICB0aGlzLiRlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWxlbWVudCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoVG9vbHRpcC5wcm90b3R5cGUpOwoKZXhwb3J0cy5Ub29sdGlwID0gVG9vbHRpcDsKfSk7CgpkZWZpbmUoImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnQiLCJhY2UvdG9vbHRpcCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKdmFyIFRvb2x0aXAgPSByZXF1aXJlKCIuLi90b29sdGlwIikuVG9vbHRpcDsKCmZ1bmN0aW9uIEd1dHRlckhhbmRsZXIobW91c2VIYW5kbGVyKSB7CiAgICB2YXIgZWRpdG9yID0gbW91c2VIYW5kbGVyLmVkaXRvcjsKICAgIHZhciBndXR0ZXIgPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyOwogICAgdmFyIHRvb2x0aXAgPSBuZXcgR3V0dGVyVG9vbHRpcChlZGl0b3IuY29udGFpbmVyKTsKCiAgICBtb3VzZUhhbmRsZXIuZWRpdG9yLnNldERlZmF1bHRIYW5kbGVyKCJndXR0ZXJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFlZGl0b3IuaXNGb2N1c2VkKCkgfHwgZS5nZXRCdXR0b24oKSAhPSAwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGd1dHRlci5nZXRSZWdpb24oZSk7CgogICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OwogICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2Vzc2lvbi5zZWxlY3Rpb247CgogICAgICAgIGlmIChlLmdldFNoaWZ0S2V5KCkpCiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RUbyhyb3csIDApOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoZS5kb21FdmVudC5kZXRhaWwgPT0gMikgewogICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdEFsbCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2Uocm93KTsKICAgICAgICB9CiAgICAgICAgbW91c2VIYW5kbGVyLnNldFN0YXRlKCJzZWxlY3RCeUxpbmVzIik7CiAgICAgICAgbW91c2VIYW5kbGVyLmNhcHR1cmVNb3VzZShlKTsKICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgfSk7CgoKICAgIHZhciB0b29sdGlwVGltZW91dCwgbW91c2VFdmVudCwgdG9vbHRpcEFubm90YXRpb247CgogICAgZnVuY3Rpb24gc2hvd1Rvb2x0aXAoKSB7CiAgICAgICAgdmFyIHJvdyA9IG1vdXNlRXZlbnQuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGd1dHRlci4kYW5ub3RhdGlvbnNbcm93XTsKICAgICAgICBpZiAoIWFubm90YXRpb24pCiAgICAgICAgICAgIHJldHVybiBoaWRlVG9vbHRpcCgpOwoKICAgICAgICB2YXIgbWF4Um93ID0gZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgaWYgKHJvdyA9PSBtYXhSb3cpIHsKICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IGVkaXRvci5yZW5kZXJlci5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMoMCwgbW91c2VFdmVudC55KS5yb3c7CiAgICAgICAgICAgIHZhciBwb3MgPSBtb3VzZUV2ZW50LiRwb3M7CiAgICAgICAgICAgIGlmIChzY3JlZW5Sb3cgPiBlZGl0b3Iuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KHBvcy5yb3csIHBvcy5jb2x1bW4pKQogICAgICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAodG9vbHRpcEFubm90YXRpb24gPT0gYW5ub3RhdGlvbikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHRvb2x0aXBBbm5vdGF0aW9uID0gYW5ub3RhdGlvbi50ZXh0LmpvaW4oIjxici8+Iik7CgogICAgICAgIHRvb2x0aXAuc2V0SHRtbCh0b29sdGlwQW5ub3RhdGlvbik7CiAgICAgICAgdG9vbHRpcC5zaG93KCk7CiAgICAgICAgZWRpdG9yLl9zaWduYWwoInNob3dHdXR0ZXJUb29sdGlwIiwgdG9vbHRpcCk7CiAgICAgICAgZWRpdG9yLm9uKCJtb3VzZXdoZWVsIiwgaGlkZVRvb2x0aXApOwoKICAgICAgICBpZiAobW91c2VIYW5kbGVyLiR0b29sdGlwRm9sbG93c01vdXNlKSB7CiAgICAgICAgICAgIG1vdmVUb29sdGlwKG1vdXNlRXZlbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBndXR0ZXJFbGVtZW50ID0gbW91c2VFdmVudC5kb21FdmVudC50YXJnZXQ7CiAgICAgICAgICAgIHZhciByZWN0ID0gZ3V0dGVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgdmFyIHN0eWxlID0gdG9vbHRpcC5nZXRFbGVtZW50KCkuc3R5bGU7CiAgICAgICAgICAgIHN0eWxlLmxlZnQgPSByZWN0LnJpZ2h0ICsgInB4IjsKICAgICAgICAgICAgc3R5bGUudG9wID0gcmVjdC5ib3R0b20gKyAicHgiOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBoaWRlVG9vbHRpcCgpIHsKICAgICAgICBpZiAodG9vbHRpcFRpbWVvdXQpCiAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRvb2x0aXBUaW1lb3V0KTsKICAgICAgICBpZiAodG9vbHRpcEFubm90YXRpb24pIHsKICAgICAgICAgICAgdG9vbHRpcC5oaWRlKCk7CiAgICAgICAgICAgIHRvb2x0aXBBbm5vdGF0aW9uID0gbnVsbDsKICAgICAgICAgICAgZWRpdG9yLl9zaWduYWwoImhpZGVHdXR0ZXJUb29sdGlwIiwgdG9vbHRpcCk7CiAgICAgICAgICAgIGVkaXRvci5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgaGlkZVRvb2x0aXApOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtb3ZlVG9vbHRpcChlKSB7CiAgICAgICAgdG9vbHRpcC5zZXRQb3NpdGlvbihlLngsIGUueSk7CiAgICB9CgogICAgbW91c2VIYW5kbGVyLmVkaXRvci5zZXREZWZhdWx0SGFuZGxlcigiZ3V0dGVybW91c2Vtb3ZlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciB0YXJnZXQgPSBlLmRvbUV2ZW50LnRhcmdldCB8fCBlLmRvbUV2ZW50LnNyY0VsZW1lbnQ7CiAgICAgICAgaWYgKGRvbS5oYXNDc3NDbGFzcyh0YXJnZXQsICJhY2VfZm9sZC13aWRnZXQiKSkKICAgICAgICAgICAgcmV0dXJuIGhpZGVUb29sdGlwKCk7CgogICAgICAgIGlmICh0b29sdGlwQW5ub3RhdGlvbiAmJiBtb3VzZUhhbmRsZXIuJHRvb2x0aXBGb2xsb3dzTW91c2UpCiAgICAgICAgICAgIG1vdmVUb29sdGlwKGUpOwoKICAgICAgICBtb3VzZUV2ZW50ID0gZTsKICAgICAgICBpZiAodG9vbHRpcFRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0b29sdGlwVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgICAgaWYgKG1vdXNlRXZlbnQgJiYgIW1vdXNlSGFuZGxlci5pc01vdXNlUHJlc3NlZCkKICAgICAgICAgICAgICAgIHNob3dUb29sdGlwKCk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGhpZGVUb29sdGlwKCk7CiAgICAgICAgfSwgNTApOwogICAgfSk7CgogICAgZXZlbnQuYWRkTGlzdGVuZXIoZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXIsICJtb3VzZW91dCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBtb3VzZUV2ZW50ID0gbnVsbDsKICAgICAgICBpZiAoIXRvb2x0aXBBbm5vdGF0aW9uIHx8IHRvb2x0aXBUaW1lb3V0KQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHRvb2x0aXBUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdG9vbHRpcFRpbWVvdXQgPSBudWxsOwogICAgICAgICAgICBoaWRlVG9vbHRpcCgpOwogICAgICAgIH0sIDUwKTsKICAgIH0pOwogICAgCiAgICBlZGl0b3Iub24oImNoYW5nZVNlc3Npb24iLCBoaWRlVG9vbHRpcCk7Cn0KCmZ1bmN0aW9uIEd1dHRlclRvb2x0aXAocGFyZW50Tm9kZSkgewogICAgVG9vbHRpcC5jYWxsKHRoaXMsIHBhcmVudE5vZGUpOwp9Cgpvb3AuaW5oZXJpdHMoR3V0dGVyVG9vbHRpcCwgVG9vbHRpcCk7CgooZnVuY3Rpb24oKXsKICAgIHRoaXMuc2V0UG9zaXRpb24gPSBmdW5jdGlvbih4LCB5KSB7CiAgICAgICAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOwogICAgICAgIHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKICAgICAgICB2YXIgd2lkdGggPSB0aGlzLmdldFdpZHRoKCk7CiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0KCk7CiAgICAgICAgeCArPSAxNTsKICAgICAgICB5ICs9IDE1OwogICAgICAgIGlmICh4ICsgd2lkdGggPiB3aW5kb3dXaWR0aCkgewogICAgICAgICAgICB4IC09ICh4ICsgd2lkdGgpIC0gd2luZG93V2lkdGg7CiAgICAgICAgfQogICAgICAgIGlmICh5ICsgaGVpZ2h0ID4gd2luZG93SGVpZ2h0KSB7CiAgICAgICAgICAgIHkgLT0gMjAgKyBoZWlnaHQ7CiAgICAgICAgfQogICAgICAgIFRvb2x0aXAucHJvdG90eXBlLnNldFBvc2l0aW9uLmNhbGwodGhpcywgeCwgeSk7CiAgICB9OwoKfSkuY2FsbChHdXR0ZXJUb29sdGlwLnByb3RvdHlwZSk7CgoKCmV4cG9ydHMuR3V0dGVySGFuZGxlciA9IEd1dHRlckhhbmRsZXI7Cgp9KTsKCmRlZmluZSgiYWNlL21vdXNlL21vdXNlX2V2ZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4uL2xpYi91c2VyYWdlbnQiKTsKdmFyIE1vdXNlRXZlbnQgPSBleHBvcnRzLk1vdXNlRXZlbnQgPSBmdW5jdGlvbihkb21FdmVudCwgZWRpdG9yKSB7CiAgICB0aGlzLmRvbUV2ZW50ID0gZG9tRXZlbnQ7CiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKICAgIAogICAgdGhpcy54ID0gdGhpcy5jbGllbnRYID0gZG9tRXZlbnQuY2xpZW50WDsKICAgIHRoaXMueSA9IHRoaXMuY2xpZW50WSA9IGRvbUV2ZW50LmNsaWVudFk7CgogICAgdGhpcy4kcG9zID0gbnVsbDsKICAgIHRoaXMuJGluU2VsZWN0aW9uID0gbnVsbDsKICAgIAogICAgdGhpcy5wcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZTsKICAgIHRoaXMuZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlOwp9OwoKKGZ1bmN0aW9uKCkgeyAgCiAgICAKICAgIHRoaXMuc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKHRoaXMuZG9tRXZlbnQpOwogICAgICAgIHRoaXMucHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCh0aGlzLmRvbUV2ZW50KTsKICAgICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOwogICAgfTsKICAgIAogICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnByZXZlbnREZWZhdWx0KCk7CiAgICB9OwogICAgdGhpcy5nZXREb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuJHBvcykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHBvczsKICAgICAgICAKICAgICAgICB0aGlzLiRwb3MgPSB0aGlzLmVkaXRvci5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh0aGlzLmNsaWVudFgsIHRoaXMuY2xpZW50WSk7CiAgICAgICAgcmV0dXJuIHRoaXMuJHBvczsKICAgIH07CiAgICB0aGlzLmluU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuJGluU2VsZWN0aW9uICE9PSBudWxsKQogICAgICAgICAgICByZXR1cm4gdGhpcy4kaW5TZWxlY3Rpb247CiAgICAgICAgICAgIAogICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAgICAKCiAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgdGhpcy4kaW5TZWxlY3Rpb24gPSBmYWxzZTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOwogICAgICAgICAgICB0aGlzLiRpblNlbGVjdGlvbiA9IHNlbGVjdGlvblJhbmdlLmNvbnRhaW5zKHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuJGluU2VsZWN0aW9uOwogICAgfTsKICAgIHRoaXMuZ2V0QnV0dG9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGV2ZW50LmdldEJ1dHRvbih0aGlzLmRvbUV2ZW50KTsKICAgIH07CiAgICB0aGlzLmdldFNoaWZ0S2V5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9tRXZlbnQuc2hpZnRLZXk7CiAgICB9OwogICAgCiAgICB0aGlzLmdldEFjY2VsS2V5ID0gdXNlcmFnZW50LmlzTWFjCiAgICAgICAgPyBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZG9tRXZlbnQubWV0YUtleTsgfQogICAgICAgIDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmRvbUV2ZW50LmN0cmxLZXk7IH07CiAgICAKfSkuY2FsbChNb3VzZUV2ZW50LnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vdXNlL2RyYWdkcm9wX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL3VzZXJhZ2VudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7Cgp2YXIgQVVUT1NDUk9MTF9ERUxBWSA9IDIwMDsKdmFyIFNDUk9MTF9DVVJTT1JfREVMQVkgPSAyMDA7CnZhciBTQ1JPTExfQ1VSU09SX0hZU1RFUkVTSVMgPSA1OwoKZnVuY3Rpb24gRHJhZ2Ryb3BIYW5kbGVyKG1vdXNlSGFuZGxlcikgewoKICAgIHZhciBlZGl0b3IgPSBtb3VzZUhhbmRsZXIuZWRpdG9yOwoKICAgIHZhciBibGFua0ltYWdlID0gZG9tLmNyZWF0ZUVsZW1lbnQoImltZyIpOwogICAgYmxhbmtJbWFnZS5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBQUFBQ0g1QkFFS0FBRUFMQUFBQUFBQkFBRUFBQUlDVEFFQU93PT0iOwogICAgaWYgKHVzZXJhZ2VudC5pc09wZXJhKQogICAgICAgIGJsYW5rSW1hZ2Uuc3R5bGUuY3NzVGV4dCA9ICJ3aWR0aDoxcHg7aGVpZ2h0OjFweDtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7ei1pbmRleDoyMTQ3NDgzNjQ3O29wYWNpdHk6MDsiOwoKICAgIHZhciBleHBvcnRzID0gWyJkcmFnV2FpdCIsICJkcmFnV2FpdEVuZCIsICJzdGFydERyYWciLCAiZHJhZ1JlYWR5RW5kIiwgIm9uTW91c2VEcmFnIl07CgogICAgIGV4cG9ydHMuZm9yRWFjaChmdW5jdGlvbih4KSB7CiAgICAgICAgIG1vdXNlSGFuZGxlclt4XSA9IHRoaXNbeF07CiAgICB9LCB0aGlzKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLm9uTW91c2VEb3duLmJpbmQobW91c2VIYW5kbGVyKSk7CgoKICAgIHZhciBtb3VzZVRhcmdldCA9IGVkaXRvci5jb250YWluZXI7CiAgICB2YXIgZHJhZ1NlbGVjdGlvbk1hcmtlciwgeCwgeTsKICAgIHZhciB0aW1lcklkLCByYW5nZTsKICAgIHZhciBkcmFnQ3Vyc29yLCBjb3VudGVyID0gMDsKICAgIHZhciBkcmFnT3BlcmF0aW9uOwogICAgdmFyIGlzSW50ZXJuYWw7CiAgICB2YXIgYXV0b1Njcm9sbFN0YXJ0VGltZTsKICAgIHZhciBjdXJzb3JNb3ZlZFRpbWU7CiAgICB2YXIgY3Vyc29yUG9pbnRPbkNhcmV0TW92ZWQ7CgogICAgdGhpcy5vbkRyYWdTdGFydCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAodGhpcy5jYW5jZWxEcmFnIHx8ICFtb3VzZVRhcmdldC5kcmFnZ2FibGUpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0U2VsZWN0KCk7CiAgICAgICAgICAgICAgICBzZWxmLmNhcHR1cmVNb3VzZShlKTsKICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfQogICAgICAgIHJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CgogICAgICAgIHZhciBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjsKICAgICAgICBkYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9IGVkaXRvci5nZXRSZWFkT25seSgpID8gImNvcHkiIDogImNvcHlNb3ZlIjsKICAgICAgICBpZiAodXNlcmFnZW50LmlzT3BlcmEpIHsKICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5hcHBlbmRDaGlsZChibGFua0ltYWdlKTsKICAgICAgICAgICAgYmxhbmtJbWFnZS5zY3JvbGxUb3AgPSAwOwogICAgICAgIH0KICAgICAgICBkYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlICYmIGRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoYmxhbmtJbWFnZSwgMCwgMCk7CiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc09wZXJhKSB7CiAgICAgICAgICAgIGVkaXRvci5jb250YWluZXIucmVtb3ZlQ2hpbGQoYmxhbmtJbWFnZSk7CiAgICAgICAgfQogICAgICAgIGRhdGFUcmFuc2Zlci5jbGVhckRhdGEoKTsKICAgICAgICBkYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIGVkaXRvci5zZXNzaW9uLmdldFRleHRSYW5nZSgpKTsKCiAgICAgICAgaXNJbnRlcm5hbCA9IHRydWU7CiAgICAgICAgdGhpcy5zZXRTdGF0ZSgiZHJhZyIpOwogICAgfTsKCiAgICB0aGlzLm9uRHJhZ0VuZCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBtb3VzZVRhcmdldC5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgICBpc0ludGVybmFsID0gZmFsc2U7CiAgICAgICAgdGhpcy5zZXRTdGF0ZShudWxsKTsKICAgICAgICBpZiAoIWVkaXRvci5nZXRSZWFkT25seSgpKSB7CiAgICAgICAgICAgIHZhciBkcm9wRWZmZWN0ID0gZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdDsKICAgICAgICAgICAgaWYgKCFkcmFnT3BlcmF0aW9uICYmIGRyb3BFZmZlY3QgPT0gIm1vdmUiKQogICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgZWRpdG9yLiRyZXNldEN1cnNvclN0eWxlKCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZWRpdG9yLnVuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpOwogICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcmVyLnNldEN1cnNvclN0eWxlKCIiKTsKICAgIH07CgogICAgdGhpcy5vbkRyYWdFbnRlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkgfHwgIWNhbkFjY2VwdChlLmRhdGFUcmFuc2ZlcikpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB4ID0gZS5jbGllbnRYOwogICAgICAgIHkgPSBlLmNsaWVudFk7CiAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKQogICAgICAgICAgICBhZGREcmFnTWFya2VyKCk7CiAgICAgICAgY291bnRlcisrOwogICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBkcmFnT3BlcmF0aW9uID0gZ2V0RHJvcEVmZmVjdChlKTsKICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CiAgICB9OwoKICAgIHRoaXMub25EcmFnT3ZlciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZWRpdG9yLmdldFJlYWRPbmx5KCkgfHwgIWNhbkFjY2VwdChlLmRhdGFUcmFuc2ZlcikpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB4ID0gZS5jbGllbnRYOwogICAgICAgIHkgPSBlLmNsaWVudFk7CiAgICAgICAgaWYgKCFkcmFnU2VsZWN0aW9uTWFya2VyKSB7CiAgICAgICAgICAgIGFkZERyYWdNYXJrZXIoKTsKICAgICAgICAgICAgY291bnRlcisrOwogICAgICAgIH0KICAgICAgICBpZiAob25Nb3VzZU1vdmVUaW1lciAhPT0gbnVsbCkKICAgICAgICAgICAgb25Nb3VzZU1vdmVUaW1lciA9IG51bGw7CgogICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBkcmFnT3BlcmF0aW9uID0gZ2V0RHJvcEVmZmVjdChlKTsKICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoZSk7CiAgICB9OwoKICAgIHRoaXMub25EcmFnTGVhdmUgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgY291bnRlci0tOwogICAgICAgIGlmIChjb3VudGVyIDw9IDAgJiYgZHJhZ1NlbGVjdGlvbk1hcmtlcikgewogICAgICAgICAgICBjbGVhckRyYWdNYXJrZXIoKTsKICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMub25Ecm9wID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghZHJhZ0N1cnNvcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBkYXRhVHJhbnNmZXIgPSBlLmRhdGFUcmFuc2ZlcjsKICAgICAgICBpZiAoaXNJbnRlcm5hbCkgewogICAgICAgICAgICBzd2l0Y2ggKGRyYWdPcGVyYXRpb24pIHsKICAgICAgICAgICAgICAgIGNhc2UgIm1vdmUiOgogICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb250YWlucyhkcmFnQ3Vyc29yLnJvdywgZHJhZ0N1cnNvci5jb2x1bW4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGRyYWdDdXJzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGRyYWdDdXJzb3IKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGVkaXRvci5tb3ZlVGV4dChyYW5nZSwgZHJhZ0N1cnNvcik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiY29weSI6CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBlZGl0b3IubW92ZVRleHQocmFuZ2UsIGRyYWdDdXJzb3IsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGRyb3BEYXRhID0gZGF0YVRyYW5zZmVyLmdldERhdGEoJ1RleHQnKTsKICAgICAgICAgICAgcmFuZ2UgPSB7CiAgICAgICAgICAgICAgICBzdGFydDogZHJhZ0N1cnNvciwKICAgICAgICAgICAgICAgIGVuZDogZWRpdG9yLnNlc3Npb24uaW5zZXJ0KGRyYWdDdXJzb3IsIGRyb3BEYXRhKQogICAgICAgICAgICB9OwogICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGNsZWFyRHJhZ01hcmtlcigpOwogICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdChlKTsKICAgIH07CgogICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJkcmFnc3RhcnQiLCB0aGlzLm9uRHJhZ1N0YXJ0LmJpbmQobW91c2VIYW5kbGVyKSk7CiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdlbmQiLCB0aGlzLm9uRHJhZ0VuZC5iaW5kKG1vdXNlSGFuZGxlcikpOwogICAgZXZlbnQuYWRkTGlzdGVuZXIobW91c2VUYXJnZXQsICJkcmFnZW50ZXIiLCB0aGlzLm9uRHJhZ0VudGVyLmJpbmQobW91c2VIYW5kbGVyKSk7CiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdvdmVyIiwgdGhpcy5vbkRyYWdPdmVyLmJpbmQobW91c2VIYW5kbGVyKSk7CiAgICBldmVudC5hZGRMaXN0ZW5lcihtb3VzZVRhcmdldCwgImRyYWdsZWF2ZSIsIHRoaXMub25EcmFnTGVhdmUuYmluZChtb3VzZUhhbmRsZXIpKTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiZHJvcCIsIHRoaXMub25Ecm9wLmJpbmQobW91c2VIYW5kbGVyKSk7CgogICAgZnVuY3Rpb24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoY3Vyc29yLCBwcmV2Q3Vyc29yKSB7CiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7CiAgICAgICAgdmFyIHZNb3ZlbWVudCA9ICFwcmV2Q3Vyc29yIHx8IGN1cnNvci5yb3cgIT0gcHJldkN1cnNvci5yb3c7CiAgICAgICAgdmFyIGhNb3ZlbWVudCA9ICFwcmV2Q3Vyc29yIHx8IGN1cnNvci5jb2x1bW4gIT0gcHJldkN1cnNvci5jb2x1bW47CiAgICAgICAgaWYgKCFjdXJzb3JNb3ZlZFRpbWUgfHwgdk1vdmVtZW50IHx8IGhNb3ZlbWVudCkgewogICAgICAgICAgICBlZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24oY3Vyc29yKTsKICAgICAgICAgICAgY3Vyc29yTW92ZWRUaW1lID0gbm93OwogICAgICAgICAgICBjdXJzb3JQb2ludE9uQ2FyZXRNb3ZlZCA9IHt4OiB4LCB5OiB5fTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjYWxjRGlzdGFuY2UoY3Vyc29yUG9pbnRPbkNhcmV0TW92ZWQueCwgY3Vyc29yUG9pbnRPbkNhcmV0TW92ZWQueSwgeCwgeSk7CiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFNDUk9MTF9DVVJTT1JfSFlTVEVSRVNJUykgewogICAgICAgICAgICAgICAgY3Vyc29yTW92ZWRUaW1lID0gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIGlmIChub3cgLSBjdXJzb3JNb3ZlZFRpbWUgPj0gU0NST0xMX0NVUlNPUl9ERUxBWSkgewogICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7CiAgICAgICAgICAgICAgICBjdXJzb3JNb3ZlZFRpbWUgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGF1dG9TY3JvbGwoY3Vyc29yLCBwcmV2Q3Vyc29yKSB7CiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7CiAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSBlZGl0b3IucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodDsKICAgICAgICB2YXIgY2hhcmFjdGVyV2lkdGggPSBlZGl0b3IucmVuZGVyZXIubGF5ZXJDb25maWcuY2hhcmFjdGVyV2lkdGg7CiAgICAgICAgdmFyIGVkaXRvclJlY3QgPSBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgdmFyIG9mZnNldHMgPSB7CiAgICAgICAgICAgeDogewogICAgICAgICAgICAgICBsZWZ0OiB4IC0gZWRpdG9yUmVjdC5sZWZ0LAogICAgICAgICAgICAgICByaWdodDogZWRpdG9yUmVjdC5yaWdodCAtIHgKICAgICAgICAgICB9LAogICAgICAgICAgIHk6IHsKICAgICAgICAgICAgICAgdG9wOiB5IC0gZWRpdG9yUmVjdC50b3AsCiAgICAgICAgICAgICAgIGJvdHRvbTogZWRpdG9yUmVjdC5ib3R0b20gLSB5CiAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdmFyIG5lYXJlc3RYT2Zmc2V0ID0gTWF0aC5taW4ob2Zmc2V0cy54LmxlZnQsIG9mZnNldHMueC5yaWdodCk7CiAgICAgICAgdmFyIG5lYXJlc3RZT2Zmc2V0ID0gTWF0aC5taW4ob2Zmc2V0cy55LnRvcCwgb2Zmc2V0cy55LmJvdHRvbSk7CiAgICAgICAgdmFyIHNjcm9sbEN1cnNvciA9IHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbn07CiAgICAgICAgaWYgKG5lYXJlc3RYT2Zmc2V0IC8gY2hhcmFjdGVyV2lkdGggPD0gMikgewogICAgICAgICAgICBzY3JvbGxDdXJzb3IuY29sdW1uICs9IChvZmZzZXRzLngubGVmdCA8IG9mZnNldHMueC5yaWdodCA/IC0zIDogKzIpOwogICAgICAgIH0KICAgICAgICBpZiAobmVhcmVzdFlPZmZzZXQgLyBsaW5lSGVpZ2h0IDw9IDEpIHsKICAgICAgICAgICAgc2Nyb2xsQ3Vyc29yLnJvdyArPSAob2Zmc2V0cy55LnRvcCA8IG9mZnNldHMueS5ib3R0b20gPyAtMSA6ICsxKTsKICAgICAgICB9CiAgICAgICAgdmFyIHZTY3JvbGwgPSBjdXJzb3Iucm93ICE9IHNjcm9sbEN1cnNvci5yb3c7CiAgICAgICAgdmFyIGhTY3JvbGwgPSBjdXJzb3IuY29sdW1uICE9IHNjcm9sbEN1cnNvci5jb2x1bW47CiAgICAgICAgdmFyIHZNb3ZlbWVudCA9ICFwcmV2Q3Vyc29yIHx8IGN1cnNvci5yb3cgIT0gcHJldkN1cnNvci5yb3c7CiAgICAgICAgaWYgKHZTY3JvbGwgfHwgKGhTY3JvbGwgJiYgIXZNb3ZlbWVudCkpIHsKICAgICAgICAgICAgaWYgKCFhdXRvU2Nyb2xsU3RhcnRUaW1lKQogICAgICAgICAgICAgICAgYXV0b1Njcm9sbFN0YXJ0VGltZSA9IG5vdzsKICAgICAgICAgICAgZWxzZSBpZiAobm93IC0gYXV0b1Njcm9sbFN0YXJ0VGltZSA+PSBBVVRPU0NST0xMX0RFTEFZKQogICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHNjcm9sbEN1cnNvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXV0b1Njcm9sbFN0YXJ0VGltZSA9IG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIG9uRHJhZ0ludGVydmFsKCkgewogICAgICAgIHZhciBwcmV2Q3Vyc29yID0gZHJhZ0N1cnNvcjsKICAgICAgICBkcmFnQ3Vyc29yID0gZWRpdG9yLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHgsIHkpOwogICAgICAgIHNjcm9sbEN1cnNvckludG9WaWV3KGRyYWdDdXJzb3IsIHByZXZDdXJzb3IpOwogICAgICAgIGF1dG9TY3JvbGwoZHJhZ0N1cnNvciwgcHJldkN1cnNvcik7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkRHJhZ01hcmtlcigpIHsKICAgICAgICByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CiAgICAgICAgZHJhZ1NlbGVjdGlvbk1hcmtlciA9IGVkaXRvci5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBlZGl0b3IuZ2V0U2VsZWN0aW9uU3R5bGUoKSk7CiAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKGVkaXRvci5pc0ZvY3VzZWQoKSkKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLiRjdXJzb3JMYXllci5zZXRCbGlua2luZyhmYWxzZSk7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTsKICAgICAgICBvbkRyYWdJbnRlcnZhbCgpOwogICAgICAgIHRpbWVySWQgPSBzZXRJbnRlcnZhbChvbkRyYWdJbnRlcnZhbCwgMjApOwogICAgICAgIGNvdW50ZXIgPSAwOwogICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKGRvY3VtZW50LCAibW91c2Vtb3ZlIiwgb25Nb3VzZU1vdmUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFyRHJhZ01hcmtlcigpIHsKICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOwogICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZU1hcmtlcihkcmFnU2VsZWN0aW9uTWFya2VyKTsKICAgICAgICBkcmFnU2VsZWN0aW9uTWFya2VyID0gbnVsbDsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoZWRpdG9yLmlzRm9jdXNlZCgpICYmICFpc0ludGVybmFsKQogICAgICAgICAgICBlZGl0b3IuJHJlc2V0Q3Vyc29yU3R5bGUoKTsKICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgZHJhZ0N1cnNvciA9IG51bGw7CiAgICAgICAgY291bnRlciA9IDA7CiAgICAgICAgYXV0b1Njcm9sbFN0YXJ0VGltZSA9IG51bGw7CiAgICAgICAgY3Vyc29yTW92ZWRUaW1lID0gbnVsbDsKICAgICAgICBldmVudC5yZW1vdmVMaXN0ZW5lcihkb2N1bWVudCwgIm1vdXNlbW92ZSIsIG9uTW91c2VNb3ZlKTsKICAgIH0KICAgIHZhciBvbk1vdXNlTW92ZVRpbWVyID0gbnVsbDsKICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKCkgewogICAgICAgIGlmIChvbk1vdXNlTW92ZVRpbWVyID09IG51bGwpIHsKICAgICAgICAgICAgb25Nb3VzZU1vdmVUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAob25Nb3VzZU1vdmVUaW1lciAhPSBudWxsICYmIGRyYWdTZWxlY3Rpb25NYXJrZXIpCiAgICAgICAgICAgICAgICAgICAgY2xlYXJEcmFnTWFya2VyKCk7CiAgICAgICAgICAgIH0sIDIwKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY2FuQWNjZXB0KGRhdGFUcmFuc2ZlcikgewogICAgICAgIHZhciB0eXBlcyA9IGRhdGFUcmFuc2Zlci50eXBlczsKICAgICAgICByZXR1cm4gIXR5cGVzIHx8IEFycmF5LnByb3RvdHlwZS5zb21lLmNhbGwodHlwZXMsIGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gJ3RleHQvcGxhaW4nIHx8IHR5cGUgPT0gJ1RleHQnOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldERyb3BFZmZlY3QoZSkgewogICAgICAgIHZhciBjb3B5QWxsb3dlZCA9IFsnY29weScsICdjb3B5bW92ZScsICdhbGwnLCAndW5pbml0aWFsaXplZCddOwogICAgICAgIHZhciBtb3ZlQWxsb3dlZCA9IFsnbW92ZScsICdjb3B5bW92ZScsICdsaW5rbW92ZScsICdhbGwnLCAndW5pbml0aWFsaXplZCddOwoKICAgICAgICB2YXIgY29weU1vZGlmaWVyU3RhdGUgPSB1c2VyYWdlbnQuaXNNYWMgPyBlLmFsdEtleSA6IGUuY3RybEtleTsKICAgICAgICB2YXIgZWZmZWN0QWxsb3dlZCA9ICJ1bmluaXRpYWxpemVkIjsKICAgICAgICB0cnkgewogICAgICAgICAgICBlZmZlY3RBbGxvd2VkID0gZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZC50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0gY2F0Y2ggKGUpIHt9CiAgICAgICAgdmFyIGRyb3BFZmZlY3QgPSAibm9uZSI7CgogICAgICAgIGlmIChjb3B5TW9kaWZpZXJTdGF0ZSAmJiBjb3B5QWxsb3dlZC5pbmRleE9mKGVmZmVjdEFsbG93ZWQpID49IDApCiAgICAgICAgICAgIGRyb3BFZmZlY3QgPSAiY29weSI7CiAgICAgICAgZWxzZSBpZiAobW92ZUFsbG93ZWQuaW5kZXhPZihlZmZlY3RBbGxvd2VkKSA+PSAwKQogICAgICAgICAgICBkcm9wRWZmZWN0ID0gIm1vdmUiOwogICAgICAgIGVsc2UgaWYgKGNvcHlBbGxvd2VkLmluZGV4T2YoZWZmZWN0QWxsb3dlZCkgPj0gMCkKICAgICAgICAgICAgZHJvcEVmZmVjdCA9ICJjb3B5IjsKCiAgICAgICAgcmV0dXJuIGRyb3BFZmZlY3Q7CiAgICB9Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmRyYWdXYWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGludGVydmFsID0gRGF0ZS5ub3coKSAtIHRoaXMubW91c2Vkb3duRXZlbnQudGltZTsKICAgICAgICBpZiAoaW50ZXJ2YWwgPiB0aGlzLmVkaXRvci5nZXREcmFnRGVsYXkoKSkKICAgICAgICAgICAgdGhpcy5zdGFydERyYWcoKTsKICAgIH07CgogICAgdGhpcy5kcmFnV2FpdEVuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmVkaXRvci5jb250YWluZXI7CiAgICAgICAgdGFyZ2V0LmRyYWdnYWJsZSA9IGZhbHNlOwogICAgICAgIHRoaXMuc3RhcnRTZWxlY3QodGhpcy5tb3VzZWRvd25FdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkpOwogICAgICAgIHRoaXMuc2VsZWN0RW5kKCk7CiAgICB9OwoKICAgIHRoaXMuZHJhZ1JlYWR5RW5kID0gZnVuY3Rpb24oZSkgewogICAgICAgIHRoaXMuZWRpdG9yLiRyZXNldEN1cnNvclN0eWxlKCk7CiAgICAgICAgdGhpcy5lZGl0b3IudW5zZXRTdHlsZSgiYWNlX2RyYWdnaW5nIik7CiAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoIiIpOwogICAgICAgIHRoaXMuZHJhZ1dhaXRFbmQoKTsKICAgIH07CgogICAgdGhpcy5zdGFydERyYWcgPSBmdW5jdGlvbigpewogICAgICAgIHRoaXMuY2FuY2VsRHJhZyA9IGZhbHNlOwogICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAgICB2YXIgdGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjsKICAgICAgICB0YXJnZXQuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgICBlZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLnNldEJsaW5raW5nKGZhbHNlKTsKICAgICAgICBlZGl0b3Iuc2V0U3R5bGUoImFjZV9kcmFnZ2luZyIpOwogICAgICAgIHZhciBjdXJzb3JTdHlsZSA9IHVzZXJhZ2VudC5pc1dpbiA/ICJkZWZhdWx0IiA6ICJtb3ZlIjsKICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoY3Vyc29yU3R5bGUpOwogICAgICAgIHRoaXMuc2V0U3RhdGUoImRyYWdSZWFkeSIpOwogICAgfTsKCiAgICB0aGlzLm9uTW91c2VEcmFnID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmVkaXRvci5jb250YWluZXI7CiAgICAgICAgaWYgKHVzZXJhZ2VudC5pc0lFICYmIHRoaXMuc3RhdGUgPT0gImRyYWdSZWFkeSIpIHsKICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5tb3VzZWRvd25FdmVudC55LCB0aGlzLngsIHRoaXMueSk7CiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDMpCiAgICAgICAgICAgICAgICB0YXJnZXQuZHJhZ0Ryb3AoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICJkcmFnV2FpdCIpIHsKICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY2FsY0Rpc3RhbmNlKHRoaXMubW91c2Vkb3duRXZlbnQueCwgdGhpcy5tb3VzZWRvd25FdmVudC55LCB0aGlzLngsIHRoaXMueSk7CiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDApIHsKICAgICAgICAgICAgICAgIHRhcmdldC5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRTZWxlY3QodGhpcy5tb3VzZWRvd25FdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLm9uTW91c2VEb3duID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghdGhpcy4kZHJhZ0VuYWJsZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLm1vdXNlZG93bkV2ZW50ID0gZTsKICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CgogICAgICAgIHZhciBpblNlbGVjdGlvbiA9IGUuaW5TZWxlY3Rpb24oKTsKICAgICAgICB2YXIgYnV0dG9uID0gZS5nZXRCdXR0b24oKTsKICAgICAgICB2YXIgY2xpY2tDb3VudCA9IGUuZG9tRXZlbnQuZGV0YWlsIHx8IDE7CiAgICAgICAgaWYgKGNsaWNrQ291bnQgPT09IDEgJiYgYnV0dG9uID09PSAwICYmIGluU2VsZWN0aW9uKSB7CiAgICAgICAgICAgIGlmIChlLmVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSAmJiAoZS5nZXRBY2NlbEtleSgpIHx8IGUuZ2V0U2hpZnRLZXkoKSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRoaXMubW91c2Vkb3duRXZlbnQudGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGUuZG9tRXZlbnQudGFyZ2V0IHx8IGUuZG9tRXZlbnQuc3JjRWxlbWVudDsKICAgICAgICAgICAgaWYgKCJ1bnNlbGVjdGFibGUiIGluIGV2ZW50VGFyZ2V0KQogICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQudW5zZWxlY3RhYmxlID0gIm9uIjsKICAgICAgICAgICAgaWYgKGVkaXRvci5nZXREcmFnRGVsYXkoKSkgewogICAgICAgICAgICAgICAgaWYgKHVzZXJhZ2VudC5pc1dlYktpdCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsRHJhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLmNvbnRhaW5lcjsKICAgICAgICAgICAgICAgICAgICBtb3VzZVRhcmdldC5kcmFnZ2FibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSgiZHJhZ1dhaXQiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREcmFnKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jYXB0dXJlTW91c2UoZSwgdGhpcy5vbk1vdXNlRHJhZy5iaW5kKHRoaXMpKTsKICAgICAgICAgICAgZS5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChEcmFnZHJvcEhhbmRsZXIucHJvdG90eXBlKTsKCgpmdW5jdGlvbiBjYWxjRGlzdGFuY2UoYXgsIGF5LCBieCwgYnkpIHsKICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coYnggLSBheCwgMikgKyBNYXRoLnBvdyhieSAtIGF5LCAyKSk7Cn0KCmV4cG9ydHMuRHJhZ2Ryb3BIYW5kbGVyID0gRHJhZ2Ryb3BIYW5kbGVyOwoKfSk7CgpkZWZpbmUoImFjZS9tb3VzZS90b3VjaF9oYW5kbGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL21vdXNlL21vdXNlX2V2ZW50IiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBNb3VzZUV2ZW50ID0gcmVxdWlyZSgiLi9tb3VzZV9ldmVudCIpLk1vdXNlRXZlbnQ7CnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CgpleHBvcnRzLmFkZFRvdWNoTGlzdGVuZXJzID0gZnVuY3Rpb24oZWwsIGVkaXRvcikgewogICAgdmFyIG1vZGUgPSAic2Nyb2xsIjsKICAgIHZhciBzdGFydFg7CiAgICB2YXIgc3RhcnRZOwogICAgdmFyIHRvdWNoU3RhcnRUOwogICAgdmFyIGxhc3RUOwogICAgdmFyIGxvbmdUb3VjaFRpbWVyOwogICAgdmFyIGFuaW1hdGlvblRpbWVyOwogICAgdmFyIGFuaW1hdGlvblN0ZXBzID0gMDsKICAgIHZhciBwb3M7CiAgICB2YXIgY2xpY2tDb3VudCA9IDA7CiAgICB2YXIgdlggPSAwOwogICAgdmFyIHZZID0gMDsKICAgIHZhciBwcmVzc2VkOwogICAgdmFyIGNvbnRleHRNZW51OwogICAgCiAgICBmdW5jdGlvbiBjcmVhdGVDb250ZXh0TWVudSgpIHsKICAgICAgICB2YXIgY2xpcGJvYXJkID0gd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLmNsaXBib2FyZDsKICAgICAgICB2YXIgaXNPcGVuID0gZmFsc2U7CiAgICAgICAgdmFyIHVwZGF0ZU1lbnUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gZWRpdG9yLmdldENvcHlUZXh0KCk7CiAgICAgICAgICAgIHZhciBoYXNVbmRvID0gZWRpdG9yLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5oYXNVbmRvKCk7CiAgICAgICAgICAgIGNvbnRleHRNZW51LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIGRvbS5idWlsZERvbShpc09wZW4gPyBbInNwYW4iLAogICAgICAgICAgICAgICAgICAgICFzZWxlY3RlZCAmJiBbInNwYW4iLCB7IGNsYXNzOiAiYWNlX21vYmlsZS1idXR0b24iLCBhY3Rpb246ICJzZWxlY3RhbGwiIH0sICJTZWxlY3QgQWxsIl0sCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgJiYgWyJzcGFuIiwgeyBjbGFzczogImFjZV9tb2JpbGUtYnV0dG9uIiwgYWN0aW9uOiAiY29weSIgfSwgIkNvcHkiXSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCAmJiBbInNwYW4iLCB7IGNsYXNzOiAiYWNlX21vYmlsZS1idXR0b24iLCBhY3Rpb246ICJjdXQiIH0sICJDdXQiXSwKICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmQgJiYgWyJzcGFuIiwgeyBjbGFzczogImFjZV9tb2JpbGUtYnV0dG9uIiwgYWN0aW9uOiAicGFzdGUiIH0sICJQYXN0ZSJdLAogICAgICAgICAgICAgICAgICAgIGhhc1VuZG8gJiYgWyJzcGFuIiwgeyBjbGFzczogImFjZV9tb2JpbGUtYnV0dG9uIiwgYWN0aW9uOiAidW5kbyIgfSwgIlVuZG8iXSwKICAgICAgICAgICAgICAgICAgICBbInNwYW4iLCB7IGNsYXNzOiAiYWNlX21vYmlsZS1idXR0b24iLCBhY3Rpb246ICJmaW5kIiB9LCAiRmluZCJdLAogICAgICAgICAgICAgICAgICAgIFsic3BhbiIsIHsgY2xhc3M6ICJhY2VfbW9iaWxlLWJ1dHRvbiIsIGFjdGlvbjogIm9wZW5Db21tYW5kUGFsbGV0ZSIgfSwgIlBhbGxldGUiXQogICAgICAgICAgICAgICAgXSA6IFsic3BhbiJdKSwKICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmZpcnN0Q2hpbGQKICAgICAgICAgICAgKTsKICAgICAgICB9OwogICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGFjdGlvbiA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgiYWN0aW9uIik7CgogICAgICAgICAgICBpZiAoYWN0aW9uID09ICJtb3JlIiB8fCAhaXNPcGVuKSB7CiAgICAgICAgICAgICAgICBpc09wZW4gPSAhaXNPcGVuOwogICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbnUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWN0aW9uID09ICJwYXN0ZSIpIHsKICAgICAgICAgICAgICAgIGNsaXBib2FyZC5yZWFkVGV4dCgpLnRoZW4oZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoYWN0aW9uLCB0ZXh0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbikgewogICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSAiY3V0IiB8fCBhY3Rpb24gPT0gImNvcHkiKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBib2FyZCkKICAgICAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkLndyaXRlVGV4dChlZGl0b3IuZ2V0Q29weVRleHQoKSk7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWRpdG9yLmV4ZWNDb21tYW5kKGFjdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dE1lbnUuZmlyc3RDaGlsZC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICBpc09wZW4gPSBmYWxzZTsKICAgICAgICAgICAgaWYgKGFjdGlvbiAhPSAib3BlbkNvbW1hbmRQYWxsZXRlIikKICAgICAgICAgICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICAgIH07CiAgICAgICAgY29udGV4dE1lbnUgPSBkb20uYnVpbGREb20oWyJkaXYiLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjbGFzczogImFjZV9tb2JpbGUtbWVudSIsCiAgICAgICAgICAgICAgICBvbnRvdWNoc3RhcnQ6IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgICAgICBtb2RlID0gIm1lbnUiOwogICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIGVkaXRvci50ZXh0SW5wdXQuZm9jdXMoKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBvbnRvdWNoZW5kOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ2xpY2soZSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgb25jbGljazogaGFuZGxlQ2xpY2sKICAgICAgICAgICAgfSwKICAgICAgICAgICAgWyJzcGFuIl0sCiAgICAgICAgICAgIFsic3BhbiIsIHsgY2xhc3M6ICJhY2VfbW9iaWxlLWJ1dHRvbiIsIGFjdGlvbjogIm1vcmUiIH0sICIuLi4iXQogICAgICAgIF0sIGVkaXRvci5jb250YWluZXIpOwogICAgfQogICAgZnVuY3Rpb24gc2hvd0NvbnRleHRNZW51KCkgewogICAgICAgIGlmICghY29udGV4dE1lbnUpIGNyZWF0ZUNvbnRleHRNZW51KCk7CiAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5zZWxlY3Rpb24uY3Vyc29yOwogICAgICAgIHZhciBwYWdlUG9zID0gZWRpdG9yLnJlbmRlcmVyLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzKGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgIHZhciByZWN0ID0gZWRpdG9yLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb250ZXh0TWVudS5zdHlsZS50b3AgPSBwYWdlUG9zLnBhZ2VZIC0gcmVjdC50b3AgLSAzICsgInB4IjsKICAgICAgICBjb250ZXh0TWVudS5zdHlsZS5yaWdodCA9ICIxMHB4IjsKICAgICAgICBjb250ZXh0TWVudS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgY29udGV4dE1lbnUuZmlyc3RDaGlsZC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIGVkaXRvci5vbigiaW5wdXQiLCBoaWRlQ29udGV4dE1lbnUpOwogICAgfQogICAgZnVuY3Rpb24gaGlkZUNvbnRleHRNZW51KGUpIHsKICAgICAgICBpZiAoY29udGV4dE1lbnUpCiAgICAgICAgICAgIGNvbnRleHRNZW51LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgZWRpdG9yLm9mZigiaW5wdXQiLCBoaWRlQ29udGV4dE1lbnUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhbmRsZUxvbmdUYXAoKSB7CiAgICAgICAgbG9uZ1RvdWNoVGltZXIgPSBudWxsOwogICAgICAgIGNsZWFyVGltZW91dChsb25nVG91Y2hUaW1lcik7CiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwogICAgICAgIHZhciBpblNlbGVjdGlvbiA9IHJhbmdlLmNvbnRhaW5zKHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkgfHwgIWluU2VsZWN0aW9uKSB7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24ocG9zKTsKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CiAgICAgICAgfQogICAgICAgIG1vZGUgPSAid2FpdCI7CiAgICAgICAgc2hvd0NvbnRleHRNZW51KCk7CiAgICB9CiAgICBmdW5jdGlvbiBzd2l0Y2hUb1NlbGVjdGlvbk1vZGUoKSB7CiAgICAgICAgbG9uZ1RvdWNoVGltZXIgPSBudWxsOwogICAgICAgIGNsZWFyVGltZW91dChsb25nVG91Y2hUaW1lcik7CiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpOwogICAgICAgIHZhciByYW5nZSA9IGNsaWNrQ291bnQgPj0gMgogICAgICAgICAgICA/IGVkaXRvci5zZWxlY3Rpb24uZ2V0TGluZVJhbmdlKHBvcy5yb3cpCiAgICAgICAgICAgIDogZWRpdG9yLnNlc3Npb24uZ2V0QnJhY2tldFJhbmdlKHBvcyk7CiAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CiAgICAgICAgfQogICAgICAgIG1vZGUgPSAid2FpdCI7CiAgICB9CiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIXByZXNzZWQpIHJldHVybjsKICAgICAgICB2YXIgdGV4dGFyZWEgPSBlZGl0b3IudGV4dElucHV0LmdldEVsZW1lbnQoKTsKICAgICAgICB0ZXh0YXJlYS5mb2N1cygpOwogICAgfSk7CiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICB2YXIgdG91Y2hlcyA9IGUudG91Y2hlczsKICAgICAgICBpZiAobG9uZ1RvdWNoVGltZXIgfHwgdG91Y2hlcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChsb25nVG91Y2hUaW1lcik7CiAgICAgICAgICAgIGxvbmdUb3VjaFRpbWVyID0gbnVsbDsKICAgICAgICAgICAgdG91Y2hTdGFydFQgPSAtMTsKICAgICAgICAgICAgbW9kZSA9ICJ6b29tIjsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBwcmVzc2VkID0gZWRpdG9yLiRtb3VzZUhhbmRsZXIuaXNNb3VzZVByZXNzZWQgPSB0cnVlOwogICAgICAgIHZhciBoID0gZWRpdG9yLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7CiAgICAgICAgdmFyIHcgPSBlZGl0b3IucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodDsKICAgICAgICB2YXIgdCA9IGUudGltZVN0YW1wOwogICAgICAgIGxhc3RUID0gdDsKICAgICAgICB2YXIgdG91Y2hPYmogPSB0b3VjaGVzWzBdOwogICAgICAgIHZhciB4ID0gdG91Y2hPYmouY2xpZW50WDsKICAgICAgICB2YXIgeSA9IHRvdWNoT2JqLmNsaWVudFk7CiAgICAgICAgaWYgKE1hdGguYWJzKHN0YXJ0WCAtIHgpICsgTWF0aC5hYnMoc3RhcnRZIC0geSkgPiBoKQogICAgICAgICAgICB0b3VjaFN0YXJ0VCA9IC0xOwogICAgICAgIAogICAgICAgIHN0YXJ0WCA9IGUuY2xpZW50WCA9IHg7CiAgICAgICAgc3RhcnRZID0gZS5jbGllbnRZID0geTsKICAgICAgICB2WCA9IHZZID0gMDsKICAgICAgICAKICAgICAgICB2YXIgZXYgPSBuZXcgTW91c2VFdmVudChlLCBlZGl0b3IpOwogICAgICAgIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTsKCiAgICAgICAgaWYgKHQgLSB0b3VjaFN0YXJ0VCA8IDUwMCAmJiB0b3VjaGVzLmxlbmd0aCA9PSAxICYmICFhbmltYXRpb25TdGVwcykgewogICAgICAgICAgICBjbGlja0NvdW50Kys7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZS5idXR0b24gPSAwOwogICAgICAgICAgICBzd2l0Y2hUb1NlbGVjdGlvbk1vZGUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjbGlja0NvdW50ID0gMDsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5zZWxlY3Rpb24uY3Vyc29yOwogICAgICAgICAgICB2YXIgYW5jaG9yID0gZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkgPyBjdXJzb3IgOiBlZGl0b3Iuc2VsZWN0aW9uLmFuY2hvcjsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBjdXJzb3JQb3MgPSBlZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oY3Vyc29yLCB0cnVlKTsKICAgICAgICAgICAgdmFyIGFuY2hvclBvcyA9IGVkaXRvci5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbihhbmNob3IsIHRydWUpOwogICAgICAgICAgICB2YXIgcmVjdCA9IGVkaXRvci5yZW5kZXJlci5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgdmFyIHdlaWdodGVkRGlzdGFuY2UgPSBmdW5jdGlvbih4LCB5KSB7CiAgICAgICAgICAgICAgICB4ID0geCAvIHc7CiAgICAgICAgICAgICAgICB5ID0geSAvIGggLSAwLjc1OwogICAgICAgICAgICAgICAgcmV0dXJuIHggKiB4ICsgeSAqIHk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoZS5jbGllbnRYIDwgcmVjdC5sZWZ0KSB7CiAgICAgICAgICAgICAgICBtb2RlID0gInpvb20iOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGlmZjEgPSB3ZWlnaHRlZERpc3RhbmNlKAogICAgICAgICAgICAgICAgZS5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gY3Vyc29yUG9zLmxlZnQsCiAgICAgICAgICAgICAgICBlLmNsaWVudFkgLSByZWN0LnRvcCAtIGN1cnNvclBvcy50b3AKICAgICAgICAgICAgKTsKICAgICAgICAgICAgdmFyIGRpZmYyID0gd2VpZ2h0ZWREaXN0YW5jZSgKICAgICAgICAgICAgICAgIGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIGFuY2hvclBvcy5sZWZ0LAogICAgICAgICAgICAgICAgZS5jbGllbnRZIC0gcmVjdC50b3AgLSBhbmNob3JQb3MudG9wCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmIChkaWZmMSA8IDMuNSAmJiBkaWZmMiA8IDMuNSkKICAgICAgICAgICAgICAgIG1vZGUgPSBkaWZmMSA+IGRpZmYyID8gImN1cnNvciIgOiAiYW5jaG9yIjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoZGlmZjIgPCAzLjUpCiAgICAgICAgICAgICAgICBtb2RlID0gImFuY2hvciI7CiAgICAgICAgICAgIGVsc2UgaWYgKGRpZmYxIDwgMy41KQogICAgICAgICAgICAgICAgbW9kZSA9ICJjdXJzb3IiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBtb2RlID0gInNjcm9sbCI7CiAgICAgICAgICAgIGxvbmdUb3VjaFRpbWVyID0gc2V0VGltZW91dChoYW5kbGVMb25nVGFwLCA0NTApOwogICAgICAgIH0KICAgICAgICB0b3VjaFN0YXJ0VCA9IHQ7CiAgICB9KTsKCiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgcHJlc3NlZCA9IGVkaXRvci4kbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkID0gZmFsc2U7CiAgICAgICAgaWYgKGFuaW1hdGlvblRpbWVyKSBjbGVhckludGVydmFsKGFuaW1hdGlvblRpbWVyKTsKICAgICAgICBpZiAobW9kZSA9PSAiem9vbSIpIHsKICAgICAgICAgICAgbW9kZSA9ICIiOwogICAgICAgICAgICBhbmltYXRpb25TdGVwcyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChsb25nVG91Y2hUaW1lcikgewogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUb1Bvc2l0aW9uKHBvcyk7CiAgICAgICAgICAgIGFuaW1hdGlvblN0ZXBzID0gMDsKICAgICAgICAgICAgc2hvd0NvbnRleHRNZW51KCk7CiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09ICJzY3JvbGwiKSB7CiAgICAgICAgICAgIGFuaW1hdGUoKTsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBoaWRlQ29udGV4dE1lbnUoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaG93Q29udGV4dE1lbnUoKTsKICAgICAgICB9CiAgICAgICAgY2xlYXJUaW1lb3V0KGxvbmdUb3VjaFRpbWVyKTsKICAgICAgICBsb25nVG91Y2hUaW1lciA9IG51bGw7CiAgICB9KTsKICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgaWYgKGxvbmdUb3VjaFRpbWVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChsb25nVG91Y2hUaW1lcik7CiAgICAgICAgICAgIGxvbmdUb3VjaFRpbWVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgdmFyIHRvdWNoZXMgPSBlLnRvdWNoZXM7CiAgICAgICAgaWYgKHRvdWNoZXMubGVuZ3RoID4gMSB8fCBtb2RlID09ICJ6b29tIikgcmV0dXJuOwoKICAgICAgICB2YXIgdG91Y2hPYmogPSB0b3VjaGVzWzBdOwoKICAgICAgICB2YXIgd2hlZWxYID0gc3RhcnRYIC0gdG91Y2hPYmouY2xpZW50WDsKICAgICAgICB2YXIgd2hlZWxZID0gc3RhcnRZIC0gdG91Y2hPYmouY2xpZW50WTsKCiAgICAgICAgaWYgKG1vZGUgPT0gIndhaXQiKSB7CiAgICAgICAgICAgIGlmICh3aGVlbFggKiB3aGVlbFggKyB3aGVlbFkgKiB3aGVlbFkgPiA0KQogICAgICAgICAgICAgICAgbW9kZSA9ICJjdXJzb3IiOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0KCiAgICAgICAgc3RhcnRYID0gdG91Y2hPYmouY2xpZW50WDsKICAgICAgICBzdGFydFkgPSB0b3VjaE9iai5jbGllbnRZOwoKICAgICAgICBlLmNsaWVudFggPSB0b3VjaE9iai5jbGllbnRYOwogICAgICAgIGUuY2xpZW50WSA9IHRvdWNoT2JqLmNsaWVudFk7CgogICAgICAgIHZhciB0ID0gZS50aW1lU3RhbXA7CiAgICAgICAgdmFyIGR0ID0gdCAtIGxhc3RUOwogICAgICAgIGxhc3RUID0gdDsKICAgICAgICBpZiAobW9kZSA9PSAic2Nyb2xsIikgewogICAgICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGUsIGVkaXRvcik7CiAgICAgICAgICAgIG1vdXNlRXZlbnQuc3BlZWQgPSAxOwogICAgICAgICAgICBtb3VzZUV2ZW50LndoZWVsWCA9IHdoZWVsWDsKICAgICAgICAgICAgbW91c2VFdmVudC53aGVlbFkgPSB3aGVlbFk7CiAgICAgICAgICAgIGlmICgxMCAqIE1hdGguYWJzKHdoZWVsWCkgPCBNYXRoLmFicyh3aGVlbFkpKSB3aGVlbFggPSAwOwogICAgICAgICAgICBpZiAoMTAgKiBNYXRoLmFicyh3aGVlbFkpIDwgTWF0aC5hYnMod2hlZWxYKSkgd2hlZWxZID0gMDsKICAgICAgICAgICAgaWYgKGR0ICE9IDApIHsKICAgICAgICAgICAgICAgIHZYID0gd2hlZWxYIC8gZHQ7CiAgICAgICAgICAgICAgICB2WSA9IHdoZWVsWSAvIGR0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVkaXRvci5fZW1pdCgibW91c2V3aGVlbCIsIG1vdXNlRXZlbnQpOwogICAgICAgICAgICBpZiAoIW1vdXNlRXZlbnQucHJvcGFnYXRpb25TdG9wcGVkKSB7CiAgICAgICAgICAgICAgICB2WCA9IHZZID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGV2ID0gbmV3IE1vdXNlRXZlbnQoZSwgZWRpdG9yKTsKICAgICAgICAgICAgdmFyIHBvcyA9IGV2LmdldERvY3VtZW50UG9zaXRpb24oKTsKICAgICAgICAgICAgaWYgKG1vZGUgPT0gImN1cnNvciIpCiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7CiAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gImFuY2hvciIpCiAgICAgICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNldFNlbGVjdGlvbkFuY2hvcihwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KHBvcyk7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICB9KTsKCiAgICBmdW5jdGlvbiBhbmltYXRlKCkgewogICAgICAgIGFuaW1hdGlvblN0ZXBzICs9IDYwOwogICAgICAgIGFuaW1hdGlvblRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChhbmltYXRpb25TdGVwcy0tIDw9IDApIHsKICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoYW5pbWF0aW9uVGltZXIpOwogICAgICAgICAgICAgICAgYW5pbWF0aW9uVGltZXIgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChNYXRoLmFicyh2WCkgPCAwLjAxKSB2WCA9IDA7CiAgICAgICAgICAgIGlmIChNYXRoLmFicyh2WSkgPCAwLjAxKSB2WSA9IDA7CiAgICAgICAgICAgIGlmIChhbmltYXRpb25TdGVwcyA8IDIwKSB2WCA9IDAuOSAqIHZYOwogICAgICAgICAgICBpZiAoYW5pbWF0aW9uU3RlcHMgPCAyMCkgdlkgPSAwLjkgKiB2WTsKICAgICAgICAgICAgdmFyIG9sZFNjcm9sbFRvcCA9IGVkaXRvci5zZXNzaW9uLmdldFNjcm9sbFRvcCgpOwogICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQnkoMTAgKiB2WCwgMTAgKiB2WSk7CiAgICAgICAgICAgIGlmIChvbGRTY3JvbGxUb3AgPT0gZWRpdG9yLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkpCiAgICAgICAgICAgICAgICBhbmltYXRpb25TdGVwcyA9IDA7CiAgICAgICAgfSwgMTApOwogICAgfQp9OwoKfSk7CgpkZWZpbmUoImFjZS9saWIvbmV0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIGRvbSA9IHJlcXVpcmUoIi4vZG9tIik7CgpleHBvcnRzLmdldCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrKSB7CiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTsKICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CiAgICAgICAgICAgIGNhbGxiYWNrKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgIH0KICAgIH07CiAgICB4aHIuc2VuZChudWxsKTsKfTsKCmV4cG9ydHMubG9hZFNjcmlwdCA9IGZ1bmN0aW9uKHBhdGgsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGVhZCA9IGRvbS5nZXREb2N1bWVudEhlYWQoKTsKICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CgogICAgcy5zcmMgPSBwYXRoOwogICAgaGVhZC5hcHBlbmRDaGlsZChzKTsKCiAgICBzLm9ubG9hZCA9IHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oXywgaXNBYm9ydCkgewogICAgICAgIGlmIChpc0Fib3J0IHx8ICFzLnJlYWR5U3RhdGUgfHwgcy5yZWFkeVN0YXRlID09ICJsb2FkZWQiIHx8IHMucmVhZHlTdGF0ZSA9PSAiY29tcGxldGUiKSB7CiAgICAgICAgICAgIHMgPSBzLm9ubG9hZCA9IHMub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDsKICAgICAgICAgICAgaWYgKCFpc0Fib3J0KQogICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9CiAgICB9Owp9OwpleHBvcnRzLnF1YWxpZnlVUkwgPSBmdW5jdGlvbih1cmwpIHsKICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogICAgYS5ocmVmID0gdXJsOwogICAgcmV0dXJuIGEuaHJlZjsKfTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9saWIvYXBwX2NvbmZpZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoibm8gdXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9vb3AiKTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBvcHRpb25zUHJvdmlkZXIgPSB7CiAgICBzZXRPcHRpb25zOiBmdW5jdGlvbihvcHRMaXN0KSB7CiAgICAgICAgT2JqZWN0LmtleXMob3B0TGlzdCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24oa2V5LCBvcHRMaXN0W2tleV0pOwogICAgICAgIH0sIHRoaXMpOwogICAgfSwKICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKG9wdGlvbk5hbWVzKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IHt9OwogICAgICAgIGlmICghb3B0aW9uTmFtZXMpIHsKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zOwogICAgICAgICAgICBvcHRpb25OYW1lcyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpLmZpbHRlcihmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhb3B0aW9uc1trZXldLmhpZGRlbjsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShvcHRpb25OYW1lcykpIHsKICAgICAgICAgICAgcmVzdWx0ID0gb3B0aW9uTmFtZXM7CiAgICAgICAgICAgIG9wdGlvbk5hbWVzID0gT2JqZWN0LmtleXMocmVzdWx0KTsKICAgICAgICB9CiAgICAgICAgb3B0aW9uTmFtZXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpOwogICAgICAgIH0sIHRoaXMpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9LAogICAgc2V0T3B0aW9uOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkgewogICAgICAgIGlmICh0aGlzWyIkIiArIG5hbWVdID09PSB2YWx1ZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBvcHQgPSB0aGlzLiRvcHRpb25zW25hbWVdOwogICAgICAgIGlmICghb3B0KSB7CiAgICAgICAgICAgIHJldHVybiB3YXJuKCdtaXNzcGVsbGVkIG9wdGlvbiAiJyArIG5hbWUgKyAnIicpOwogICAgICAgIH0KICAgICAgICBpZiAob3B0LmZvcndhcmRUbykKICAgICAgICAgICAgcmV0dXJuIHRoaXNbb3B0LmZvcndhcmRUb10gJiYgdGhpc1tvcHQuZm9yd2FyZFRvXS5zZXRPcHRpb24obmFtZSwgdmFsdWUpOwoKICAgICAgICBpZiAoIW9wdC5oYW5kbGVzU2V0KQogICAgICAgICAgICB0aGlzWyIkIiArIG5hbWVdID0gdmFsdWU7CiAgICAgICAgaWYgKG9wdCAmJiBvcHQuc2V0KQogICAgICAgICAgICBvcHQuc2V0LmNhbGwodGhpcywgdmFsdWUpOwogICAgfSwKICAgIGdldE9wdGlvbjogZnVuY3Rpb24obmFtZSkgewogICAgICAgIHZhciBvcHQgPSB0aGlzLiRvcHRpb25zW25hbWVdOwogICAgICAgIGlmICghb3B0KSB7CiAgICAgICAgICAgIHJldHVybiB3YXJuKCdtaXNzcGVsbGVkIG9wdGlvbiAiJyArIG5hbWUgKyAnIicpOwogICAgICAgIH0KICAgICAgICBpZiAob3B0LmZvcndhcmRUbykKICAgICAgICAgICAgcmV0dXJuIHRoaXNbb3B0LmZvcndhcmRUb10gJiYgdGhpc1tvcHQuZm9yd2FyZFRvXS5nZXRPcHRpb24obmFtZSk7CiAgICAgICAgcmV0dXJuIG9wdCAmJiBvcHQuZ2V0ID8gb3B0LmdldC5jYWxsKHRoaXMpIDogdGhpc1siJCIgKyBuYW1lXTsKICAgIH0KfTsKCmZ1bmN0aW9uIHdhcm4obWVzc2FnZSkgewogICAgaWYgKHR5cGVvZiBjb25zb2xlICE9ICJ1bmRlZmluZWQiICYmIGNvbnNvbGUud2FybikKICAgICAgICBjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSwgYXJndW1lbnRzKTsKfQoKZnVuY3Rpb24gcmVwb3J0RXJyb3IobXNnLCBkYXRhKSB7CiAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cpOwogICAgZS5kYXRhID0gZGF0YTsKICAgIGlmICh0eXBlb2YgY29uc29sZSA9PSAib2JqZWN0IiAmJiBjb25zb2xlLmVycm9yKQogICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyB0aHJvdyBlOyB9KTsKfQoKdmFyIEFwcENvbmZpZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kZGVmYXVsdE9wdGlvbnMgPSB7fTsKfTsKCihmdW5jdGlvbigpIHsKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgIHRoaXMuZGVmaW5lT3B0aW9ucyA9IGZ1bmN0aW9uKG9iaiwgcGF0aCwgb3B0aW9ucykgewogICAgICAgIGlmICghb2JqLiRvcHRpb25zKQogICAgICAgICAgICB0aGlzLiRkZWZhdWx0T3B0aW9uc1twYXRoXSA9IG9iai4kb3B0aW9ucyA9IHt9OwoKICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICB2YXIgb3B0ID0gb3B0aW9uc1trZXldOwogICAgICAgICAgICBpZiAodHlwZW9mIG9wdCA9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgIG9wdCA9IHtmb3J3YXJkVG86IG9wdH07CgogICAgICAgICAgICBvcHQubmFtZSB8fCAob3B0Lm5hbWUgPSBrZXkpOwogICAgICAgICAgICBvYmouJG9wdGlvbnNbb3B0Lm5hbWVdID0gb3B0OwogICAgICAgICAgICBpZiAoImluaXRpYWxWYWx1ZSIgaW4gb3B0KQogICAgICAgICAgICAgICAgb2JqWyIkIiArIG9wdC5uYW1lXSA9IG9wdC5pbml0aWFsVmFsdWU7CiAgICAgICAgfSk7CiAgICAgICAgb29wLmltcGxlbWVudChvYmosIG9wdGlvbnNQcm92aWRlcik7CgogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKCiAgICB0aGlzLnJlc2V0T3B0aW9ucyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIE9iamVjdC5rZXlzKG9iai4kb3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgdmFyIG9wdCA9IG9iai4kb3B0aW9uc1trZXldOwogICAgICAgICAgICBpZiAoInZhbHVlIiBpbiBvcHQpCiAgICAgICAgICAgICAgICBvYmouc2V0T3B0aW9uKGtleSwgb3B0LnZhbHVlKTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5zZXREZWZhdWx0VmFsdWUgPSBmdW5jdGlvbihwYXRoLCBuYW1lLCB2YWx1ZSkgewogICAgICAgIGlmICghcGF0aCkgewogICAgICAgICAgICBmb3IgKHBhdGggaW4gdGhpcy4kZGVmYXVsdE9wdGlvbnMpCiAgICAgICAgICAgICAgICBpZiAodGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF1bbmFtZV0pCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGlmICghdGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF1bbmFtZV0pCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBvcHRzID0gdGhpcy4kZGVmYXVsdE9wdGlvbnNbcGF0aF0gfHwgKHRoaXMuJGRlZmF1bHRPcHRpb25zW3BhdGhdID0ge30pOwogICAgICAgIGlmIChvcHRzW25hbWVdKSB7CiAgICAgICAgICAgIGlmIChvcHRzLmZvcndhcmRUbykKICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlKG9wdHMuZm9yd2FyZFRvLCBuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG9wdHNbbmFtZV0udmFsdWUgPSB2YWx1ZTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcyA9IGZ1bmN0aW9uKHBhdGgsIG9wdGlvbkhhc2gpIHsKICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25IYXNoKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZShwYXRoLCBrZXksIG9wdGlvbkhhc2hba2V5XSk7CiAgICAgICAgfSwgdGhpcyk7CiAgICB9OwogICAgCiAgICB0aGlzLndhcm4gPSB3YXJuOwogICAgdGhpcy5yZXBvcnRFcnJvciA9IHJlcG9ydEVycm9yOwogICAgCn0pLmNhbGwoQXBwQ29uZmlnLnByb3RvdHlwZSk7CgpleHBvcnRzLkFwcENvbmZpZyA9IEFwcENvbmZpZzsKCn0pOwoKZGVmaW5lKCJhY2UvY29uZmlnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL25ldCIsImFjZS9saWIvYXBwX2NvbmZpZyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKIm5vIHVzZSBzdHJpY3QiOwoKdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7CnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIG5ldCA9IHJlcXVpcmUoIi4vbGliL25ldCIpOwp2YXIgQXBwQ29uZmlnID0gcmVxdWlyZSgiLi9saWIvYXBwX2NvbmZpZyIpLkFwcENvbmZpZzsKCm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IG5ldyBBcHBDb25maWcoKTsKCnZhciBnbG9iYWwgPSAoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcyB8fCB0eXBlb2Ygd2luZG93ICE9ICJ1bmRlZmluZWQiICYmIHdpbmRvdzsKfSkoKTsKCnZhciBvcHRpb25zID0gewogICAgcGFja2FnZWQ6IGZhbHNlLAogICAgd29ya2VyUGF0aDogbnVsbCwKICAgIG1vZGVQYXRoOiBudWxsLAogICAgdGhlbWVQYXRoOiBudWxsLAogICAgYmFzZVBhdGg6ICIiLAogICAgc3VmZml4OiAiLmpzIiwKICAgICRtb2R1bGVVcmxzOiB7fSwKICAgIGxvYWRXb3JrZXJGcm9tQmxvYjogdHJ1ZSwKICAgIHNoYXJlZFBvcHVwczogZmFsc2UKfTsKCmV4cG9ydHMuZ2V0ID0gZnVuY3Rpb24oa2V5KSB7CiAgICBpZiAoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29uZmlnIGtleTogIiArIGtleSk7CgogICAgcmV0dXJuIG9wdGlvbnNba2V5XTsKfTsKCmV4cG9ydHMuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewogICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkKICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTsKICAgIGVsc2UgaWYgKHRoaXMuc2V0RGVmYXVsdFZhbHVlKCIiLCBrZXksIHZhbHVlKSA9PSBmYWxzZSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY29uZmlnIGtleTogIiArIGtleSk7Cn07CgpleHBvcnRzLmFsbCA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGxhbmcuY29weU9iamVjdChvcHRpb25zKTsKfTsKCmV4cG9ydHMuJG1vZGVzID0ge307CmV4cG9ydHMubW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgY29tcG9uZW50KSB7CiAgICBpZiAob3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXSkKICAgICAgICByZXR1cm4gb3B0aW9ucy4kbW9kdWxlVXJsc1tuYW1lXTsKCiAgICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KCIvIik7CiAgICBjb21wb25lbnQgPSBjb21wb25lbnQgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMl0gfHwgIiI7CiAgICB2YXIgc2VwID0gY29tcG9uZW50ID09ICJzbmlwcGV0cyIgPyAiLyIgOiAiLSI7CiAgICB2YXIgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdOwogICAgaWYgKGNvbXBvbmVudCA9PSAid29ya2VyIiAmJiBzZXAgPT0gIi0iKSB7CiAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXiIgKyBjb21wb25lbnQgKyAiW1xcLV9dfFtcXC1fXSIgKyBjb21wb25lbnQgKyAiJCIsICJnIik7CiAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZShyZSwgIiIpOwogICAgfQoKICAgIGlmICgoIWJhc2UgfHwgYmFzZSA9PSBjb21wb25lbnQpICYmIHBhcnRzLmxlbmd0aCA+IDEpCiAgICAgICAgYmFzZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdOwogICAgdmFyIHBhdGggPSBvcHRpb25zW2NvbXBvbmVudCArICJQYXRoIl07CiAgICBpZiAocGF0aCA9PSBudWxsKSB7CiAgICAgICAgcGF0aCA9IG9wdGlvbnMuYmFzZVBhdGg7CiAgICB9IGVsc2UgaWYgKHNlcCA9PSAiLyIpIHsKICAgICAgICBjb21wb25lbnQgPSBzZXAgPSAiIjsKICAgIH0KICAgIGlmIChwYXRoICYmIHBhdGguc2xpY2UoLTEpICE9ICIvIikKICAgICAgICBwYXRoICs9ICIvIjsKICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50ICsgc2VwICsgYmFzZSArIHRoaXMuZ2V0KCJzdWZmaXgiKTsKfTsKCmV4cG9ydHMuc2V0TW9kdWxlVXJsID0gZnVuY3Rpb24obmFtZSwgc3Vic3QpIHsKICAgIHJldHVybiBvcHRpb25zLiRtb2R1bGVVcmxzW25hbWVdID0gc3Vic3Q7Cn07CgpleHBvcnRzLiRsb2FkaW5nID0ge307CmV4cG9ydHMubG9hZE1vZHVsZSA9IGZ1bmN0aW9uKG1vZHVsZU5hbWUsIG9uTG9hZCkgewogICAgdmFyIG1vZHVsZSwgbW9kdWxlVHlwZTsKICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZU5hbWUpKSB7CiAgICAgICAgbW9kdWxlVHlwZSA9IG1vZHVsZU5hbWVbMF07CiAgICAgICAgbW9kdWxlTmFtZSA9IG1vZHVsZU5hbWVbMV07CiAgICB9CgogICAgdHJ5IHsKICAgICAgICBtb2R1bGUgPSByZXF1aXJlKG1vZHVsZU5hbWUpOwogICAgfSBjYXRjaCAoZSkge30KICAgIGlmIChtb2R1bGUgJiYgIWV4cG9ydHMuJGxvYWRpbmdbbW9kdWxlTmFtZV0pCiAgICAgICAgcmV0dXJuIG9uTG9hZCAmJiBvbkxvYWQobW9kdWxlKTsKCiAgICBpZiAoIWV4cG9ydHMuJGxvYWRpbmdbbW9kdWxlTmFtZV0pCiAgICAgICAgZXhwb3J0cy4kbG9hZGluZ1ttb2R1bGVOYW1lXSA9IFtdOwoKICAgIGV4cG9ydHMuJGxvYWRpbmdbbW9kdWxlTmFtZV0ucHVzaChvbkxvYWQpOwoKICAgIGlmIChleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdLmxlbmd0aCA+IDEpCiAgICAgICAgcmV0dXJuOwoKICAgIHZhciBhZnRlckxvYWQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXF1aXJlKFttb2R1bGVOYW1lXSwgZnVuY3Rpb24obW9kdWxlKSB7CiAgICAgICAgICAgIGV4cG9ydHMuX2VtaXQoImxvYWQubW9kdWxlIiwge25hbWU6IG1vZHVsZU5hbWUsIG1vZHVsZTogbW9kdWxlfSk7CiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdOwogICAgICAgICAgICBleHBvcnRzLiRsb2FkaW5nW21vZHVsZU5hbWVdID0gbnVsbDsKICAgICAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24ob25Mb2FkKSB7CiAgICAgICAgICAgICAgICBvbkxvYWQgJiYgb25Mb2FkKG1vZHVsZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfTsKCiAgICBpZiAoIWV4cG9ydHMuZ2V0KCJwYWNrYWdlZCIpKQogICAgICAgIHJldHVybiBhZnRlckxvYWQoKTsKICAgIAogICAgbmV0LmxvYWRTY3JpcHQoZXhwb3J0cy5tb2R1bGVVcmwobW9kdWxlTmFtZSwgbW9kdWxlVHlwZSksIGFmdGVyTG9hZCk7CiAgICByZXBvcnRFcnJvcklmUGF0aElzTm90Q29uZmlndXJlZCgpOwp9OwoKdmFyIHJlcG9ydEVycm9ySWZQYXRoSXNOb3RDb25maWd1cmVkID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoCiAgICAgICAgIW9wdGlvbnMuYmFzZVBhdGggJiYgIW9wdGlvbnMud29ya2VyUGF0aCAKICAgICAgICAmJiAhb3B0aW9ucy5tb2RlUGF0aCAmJiAhb3B0aW9ucy50aGVtZVBhdGgKICAgICAgICAmJiAhT2JqZWN0LmtleXMob3B0aW9ucy4kbW9kdWxlVXJscykubGVuZ3RoCiAgICApIHsKICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgICAiVW5hYmxlIHRvIGluZmVyIHBhdGggdG8gYWNlIGZyb20gc2NyaXB0IHNyYywiLAogICAgICAgICAgICAidXNlIGFjZS5jb25maWcuc2V0KCdiYXNlUGF0aCcsICdwYXRoJykgdG8gZW5hYmxlIGR5bmFtaWMgbG9hZGluZyBvZiBtb2RlcyBhbmQgdGhlbWVzIiwKICAgICAgICAgICAgIm9yIHdpdGggd2VicGFjayB1c2UgYWNlL3dlYnBhY2stcmVzb2x2ZXIiCiAgICAgICAgKTsKICAgICAgICByZXBvcnRFcnJvcklmUGF0aElzTm90Q29uZmlndXJlZCA9IGZ1bmN0aW9uKCkge307CiAgICB9Cn07CmluaXQodHJ1ZSk7ZnVuY3Rpb24gaW5pdChwYWNrYWdlZCkgewoKICAgIGlmICghZ2xvYmFsIHx8ICFnbG9iYWwuZG9jdW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgCiAgICBvcHRpb25zLnBhY2thZ2VkID0gcGFja2FnZWQgfHwgcmVxdWlyZS5wYWNrYWdlZCB8fCBtb2R1bGUucGFja2FnZWQgfHwgKGdsb2JhbC5kZWZpbmUgJiYgZGVmaW5lLnBhY2thZ2VkKTsKCiAgICB2YXIgc2NyaXB0T3B0aW9ucyA9IHt9OwogICAgdmFyIHNjcmlwdFVybCA9ICIiOwogICAgdmFyIGN1cnJlbnRTY3JpcHQgPSAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCB8fCBkb2N1bWVudC5fY3VycmVudFNjcmlwdCApOyAvLyBuYXRpdmUgb3IgcG9seWZpbGwKICAgIHZhciBjdXJyZW50RG9jdW1lbnQgPSBjdXJyZW50U2NyaXB0ICYmIGN1cnJlbnRTY3JpcHQub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDsKICAgIAogICAgdmFyIHNjcmlwdHMgPSBjdXJyZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpOwogICAgZm9yICh2YXIgaT0wOyBpPHNjcmlwdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgc2NyaXB0ID0gc2NyaXB0c1tpXTsKCiAgICAgICAgdmFyIHNyYyA9IHNjcmlwdC5zcmMgfHwgc2NyaXB0LmdldEF0dHJpYnV0ZSgic3JjIik7CiAgICAgICAgaWYgKCFzcmMpCiAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHNjcmlwdC5hdHRyaWJ1dGVzOwogICAgICAgIGZvciAodmFyIGo9MCwgbD1hdHRyaWJ1dGVzLmxlbmd0aDsgaiA8IGw7IGorKykgewogICAgICAgICAgICB2YXIgYXR0ciA9IGF0dHJpYnV0ZXNbal07CiAgICAgICAgICAgIGlmIChhdHRyLm5hbWUuaW5kZXhPZigiZGF0YS1hY2UtIikgPT09IDApIHsKICAgICAgICAgICAgICAgIHNjcmlwdE9wdGlvbnNbZGVIeXBoZW5hdGUoYXR0ci5uYW1lLnJlcGxhY2UoL15kYXRhLWFjZS0vLCAiIikpXSA9IGF0dHIudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBtID0gc3JjLm1hdGNoKC9eKC4qKVwvYWNlKFwtXHcrKT9cLmpzKFw/fCQpLyk7CiAgICAgICAgaWYgKG0pCiAgICAgICAgICAgIHNjcmlwdFVybCA9IG1bMV07CiAgICB9CgogICAgaWYgKHNjcmlwdFVybCkgewogICAgICAgIHNjcmlwdE9wdGlvbnMuYmFzZSA9IHNjcmlwdE9wdGlvbnMuYmFzZSB8fCBzY3JpcHRVcmw7CiAgICAgICAgc2NyaXB0T3B0aW9ucy5wYWNrYWdlZCA9IHRydWU7CiAgICB9CgogICAgc2NyaXB0T3B0aW9ucy5iYXNlUGF0aCA9IHNjcmlwdE9wdGlvbnMuYmFzZTsKICAgIHNjcmlwdE9wdGlvbnMud29ya2VyUGF0aCA9IHNjcmlwdE9wdGlvbnMud29ya2VyUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7CiAgICBzY3JpcHRPcHRpb25zLm1vZGVQYXRoID0gc2NyaXB0T3B0aW9ucy5tb2RlUGF0aCB8fCBzY3JpcHRPcHRpb25zLmJhc2U7CiAgICBzY3JpcHRPcHRpb25zLnRoZW1lUGF0aCA9IHNjcmlwdE9wdGlvbnMudGhlbWVQYXRoIHx8IHNjcmlwdE9wdGlvbnMuYmFzZTsKICAgIGRlbGV0ZSBzY3JpcHRPcHRpb25zLmJhc2U7CgogICAgZm9yICh2YXIga2V5IGluIHNjcmlwdE9wdGlvbnMpCiAgICAgICAgaWYgKHR5cGVvZiBzY3JpcHRPcHRpb25zW2tleV0gIT09ICJ1bmRlZmluZWQiKQogICAgICAgICAgICBleHBvcnRzLnNldChrZXksIHNjcmlwdE9wdGlvbnNba2V5XSk7Cn0KCmV4cG9ydHMuaW5pdCA9IGluaXQ7CgpmdW5jdGlvbiBkZUh5cGhlbmF0ZShzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvLSguKS9nLCBmdW5jdGlvbihtLCBtMSkgeyByZXR1cm4gbTEudG9VcHBlckNhc2UoKTsgfSk7Cn0KCmV4cG9ydHMudmVyc2lvbiA9ICIxLjQuNyI7Cgp9KTsKCmRlZmluZSgiYWNlL21vdXNlL21vdXNlX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbW91c2UvZGVmYXVsdF9oYW5kbGVycyIsImFjZS9tb3VzZS9kZWZhdWx0X2d1dHRlcl9oYW5kbGVyIiwiYWNlL21vdXNlL21vdXNlX2V2ZW50IiwiYWNlL21vdXNlL2RyYWdkcm9wX2hhbmRsZXIiLCJhY2UvbW91c2UvdG91Y2hfaGFuZGxlciIsImFjZS9jb25maWciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwp2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwp2YXIgRGVmYXVsdEhhbmRsZXJzID0gcmVxdWlyZSgiLi9kZWZhdWx0X2hhbmRsZXJzIikuRGVmYXVsdEhhbmRsZXJzOwp2YXIgRGVmYXVsdEd1dHRlckhhbmRsZXIgPSByZXF1aXJlKCIuL2RlZmF1bHRfZ3V0dGVyX2hhbmRsZXIiKS5HdXR0ZXJIYW5kbGVyOwp2YXIgTW91c2VFdmVudCA9IHJlcXVpcmUoIi4vbW91c2VfZXZlbnQiKS5Nb3VzZUV2ZW50Owp2YXIgRHJhZ2Ryb3BIYW5kbGVyID0gcmVxdWlyZSgiLi9kcmFnZHJvcF9oYW5kbGVyIikuRHJhZ2Ryb3BIYW5kbGVyOwp2YXIgYWRkVG91Y2hMaXN0ZW5lcnMgPSByZXF1aXJlKCIuL3RvdWNoX2hhbmRsZXIiKS5hZGRUb3VjaExpc3RlbmVyczsKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOwoKdmFyIE1vdXNlSGFuZGxlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOwoKICAgIG5ldyBEZWZhdWx0SGFuZGxlcnModGhpcyk7CiAgICBuZXcgRGVmYXVsdEd1dHRlckhhbmRsZXIodGhpcyk7CiAgICBuZXcgRHJhZ2Ryb3BIYW5kbGVyKHRoaXMpOwoKICAgIHZhciBmb2N1c0VkaXRvciA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgd2luZG93Qmx1cnJlZCA9ICFkb2N1bWVudC5oYXNGb2N1cyB8fCAhZG9jdW1lbnQuaGFzRm9jdXMoKQogICAgICAgICAgICB8fCAhZWRpdG9yLmlzRm9jdXNlZCgpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gKGVkaXRvci50ZXh0SW5wdXQgJiYgZWRpdG9yLnRleHRJbnB1dC5nZXRFbGVtZW50KCkpOwogICAgICAgIGlmICh3aW5kb3dCbHVycmVkKQogICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgIH07CgogICAgdmFyIG1vdXNlVGFyZ2V0ID0gZWRpdG9yLnJlbmRlcmVyLmdldE1vdXNlRXZlbnRUYXJnZXQoKTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAiY2xpY2siLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJjbGljayIpKTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAibW91c2Vtb3ZlIiwgdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMsICJtb3VzZW1vdmUiKSk7CiAgICBldmVudC5hZGRNdWx0aU1vdXNlRG93bkxpc3RlbmVyKFsKICAgICAgICBtb3VzZVRhcmdldCwKICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyViAmJiBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyVi5pbm5lciwKICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFySCAmJiBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFySC5pbm5lciwKICAgICAgICBlZGl0b3IudGV4dElucHV0ICYmIGVkaXRvci50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpCiAgICBdLmZpbHRlcihCb29sZWFuKSwgWzQwMCwgMzAwLCAyNTBdLCB0aGlzLCAib25Nb3VzZUV2ZW50Iik7CiAgICBldmVudC5hZGRNb3VzZVdoZWVsTGlzdGVuZXIoZWRpdG9yLmNvbnRhaW5lciwgdGhpcy5vbk1vdXNlV2hlZWwuYmluZCh0aGlzLCAibW91c2V3aGVlbCIpKTsKICAgIGFkZFRvdWNoTGlzdGVuZXJzKGVkaXRvci5jb250YWluZXIsIGVkaXRvcik7CgogICAgdmFyIGd1dHRlckVsID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXI7CiAgICBldmVudC5hZGRMaXN0ZW5lcihndXR0ZXJFbCwgIm1vdXNlZG93biIsIHRoaXMub25Nb3VzZUV2ZW50LmJpbmQodGhpcywgImd1dHRlcm1vdXNlZG93biIpKTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAiY2xpY2siLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJjbGljayIpKTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAiZGJsY2xpY2siLCB0aGlzLm9uTW91c2VFdmVudC5iaW5kKHRoaXMsICJndXR0ZXJkYmxjbGljayIpKTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKGd1dHRlckVsLCAibW91c2Vtb3ZlIiwgdGhpcy5vbk1vdXNlRXZlbnQuYmluZCh0aGlzLCAiZ3V0dGVybW91c2Vtb3ZlIikpOwoKICAgIGV2ZW50LmFkZExpc3RlbmVyKG1vdXNlVGFyZ2V0LCAibW91c2Vkb3duIiwgZm9jdXNFZGl0b3IpOwogICAgZXZlbnQuYWRkTGlzdGVuZXIoZ3V0dGVyRWwsICJtb3VzZWRvd24iLCBmb2N1c0VkaXRvcik7CiAgICBpZiAodXNlcmFnZW50LmlzSUUgJiYgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEJhclYpIHsKICAgICAgICBldmVudC5hZGRMaXN0ZW5lcihlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyVi5lbGVtZW50LCAibW91c2Vkb3duIiwgZm9jdXNFZGl0b3IpOwogICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKGVkaXRvci5yZW5kZXJlci5zY3JvbGxCYXJILmVsZW1lbnQsICJtb3VzZWRvd24iLCBmb2N1c0VkaXRvcik7CiAgICB9CgogICAgZWRpdG9yLm9uKCJtb3VzZW1vdmUiLCBmdW5jdGlvbihlKXsKICAgICAgICBpZiAoX3NlbGYuc3RhdGUgfHwgX3NlbGYuJGRyYWdEZWxheSB8fCAhX3NlbGYuJGRyYWdFbmFibGVkKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBjaGFyYWN0ZXIgPSBlZGl0b3IucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoZS54LCBlLnkpOwogICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZXNzaW9uLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwogICAgICAgIHZhciByZW5kZXJlciA9IGVkaXRvci5yZW5kZXJlcjsKCiAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkgJiYgcmFuZ2UuaW5zaWRlU3RhcnQoY2hhcmFjdGVyLnJvdywgY2hhcmFjdGVyLmNvbHVtbikpIHsKICAgICAgICAgICAgcmVuZGVyZXIuc2V0Q3Vyc29yU3R5bGUoImRlZmF1bHQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZW5kZXJlci5zZXRDdXJzb3JTdHlsZSgiIik7CiAgICAgICAgfQogICAgfSk7Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLm9uTW91c2VFdmVudCA9IGZ1bmN0aW9uKG5hbWUsIGUpIHsKICAgICAgICB0aGlzLmVkaXRvci5fZW1pdChuYW1lLCBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcikpOwogICAgfTsKCiAgICB0aGlzLm9uTW91c2VNb3ZlID0gZnVuY3Rpb24obmFtZSwgZSkgewogICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeSAmJiB0aGlzLmVkaXRvci5fZXZlbnRSZWdpc3RyeS5tb3VzZW1vdmU7CiAgICAgICAgaWYgKCFsaXN0ZW5lcnMgfHwgIWxpc3RlbmVycy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdGhpcy5lZGl0b3IuX2VtaXQobmFtZSwgbmV3IE1vdXNlRXZlbnQoZSwgdGhpcy5lZGl0b3IpKTsKICAgIH07CgogICAgdGhpcy5vbk1vdXNlV2hlZWwgPSBmdW5jdGlvbihuYW1lLCBlKSB7CiAgICAgICAgdmFyIG1vdXNlRXZlbnQgPSBuZXcgTW91c2VFdmVudChlLCB0aGlzLmVkaXRvcik7CiAgICAgICAgbW91c2VFdmVudC5zcGVlZCA9IHRoaXMuJHNjcm9sbFNwZWVkICogMjsKICAgICAgICBtb3VzZUV2ZW50LndoZWVsWCA9IGUud2hlZWxYOwogICAgICAgIG1vdXNlRXZlbnQud2hlZWxZID0gZS53aGVlbFk7CgogICAgICAgIHRoaXMuZWRpdG9yLl9lbWl0KG5hbWUsIG1vdXNlRXZlbnQpOwogICAgfTsKICAgIAogICAgdGhpcy5zZXRTdGF0ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlOwogICAgfTsKCiAgICB0aGlzLmNhcHR1cmVNb3VzZSA9IGZ1bmN0aW9uKGV2LCBtb3VzZU1vdmVIYW5kbGVyKSB7CiAgICAgICAgdGhpcy54ID0gZXYueDsKICAgICAgICB0aGlzLnkgPSBldi55OwoKICAgICAgICB0aGlzLmlzTW91c2VQcmVzc2VkID0gdHJ1ZTsKICAgICAgICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7CiAgICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5lZGl0b3IucmVuZGVyZXI7CiAgICAgICAgcmVuZGVyZXIuJGlzTW91c2VQcmVzc2VkID0gdHJ1ZTsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciBvbk1vdXNlTW92ZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCFlKSByZXR1cm47CiAgICAgICAgICAgIGlmICh1c2VyYWdlbnQuaXNXZWJLaXQgJiYgIWUud2hpY2ggJiYgc2VsZi5yZWxlYXNlTW91c2UpCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWxlYXNlTW91c2UoKTsKCiAgICAgICAgICAgIHNlbGYueCA9IGUuY2xpZW50WDsKICAgICAgICAgICAgc2VsZi55ID0gZS5jbGllbnRZOwogICAgICAgICAgICBtb3VzZU1vdmVIYW5kbGVyICYmIG1vdXNlTW92ZUhhbmRsZXIoZSk7CiAgICAgICAgICAgIHNlbGYubW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KGUsIHNlbGYuZWRpdG9yKTsKICAgICAgICAgICAgc2VsZi4kbW91c2VNb3ZlZCA9IHRydWU7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIG9uQ2FwdHVyZUVuZCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgZWRpdG9yLm9mZigiYmVmb3JlRW5kT3BlcmF0aW9uIiwgb25PcGVyYXRpb25FbmQpOwogICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOwogICAgICAgICAgICBvbkNhcHR1cmVJbnRlcnZhbCgpOwogICAgICAgICAgICBzZWxmW3NlbGYuc3RhdGUgKyAiRW5kIl0gJiYgc2VsZltzZWxmLnN0YXRlICsgIkVuZCJdKGUpOwogICAgICAgICAgICBzZWxmLnN0YXRlID0gIiI7CiAgICAgICAgICAgIHNlbGYuaXNNb3VzZVByZXNzZWQgPSByZW5kZXJlci4kaXNNb3VzZVByZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHJlbmRlcmVyLiRrZWVwVGV4dEFyZWFBdEN1cnNvcikKICAgICAgICAgICAgICAgIHJlbmRlcmVyLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOwogICAgICAgICAgICBzZWxmLiRvbkNhcHR1cmVNb3VzZU1vdmUgPSBzZWxmLnJlbGVhc2VNb3VzZSA9IG51bGw7CiAgICAgICAgICAgIGUgJiYgc2VsZi5vbk1vdXNlRXZlbnQoIm1vdXNldXAiLCBlKTsKICAgICAgICAgICAgZWRpdG9yLmVuZE9wZXJhdGlvbigpOwogICAgICAgIH07CgogICAgICAgIHZhciBvbkNhcHR1cmVJbnRlcnZhbCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZWxmW3NlbGYuc3RhdGVdICYmIHNlbGZbc2VsZi5zdGF0ZV0oKTsKICAgICAgICAgICAgc2VsZi4kbW91c2VNb3ZlZCA9IGZhbHNlOwogICAgICAgIH07CgogICAgICAgIGlmICh1c2VyYWdlbnQuaXNPbGRJRSAmJiBldi5kb21FdmVudC50eXBlID09ICJkYmxjbGljayIpIHsKICAgICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7b25DYXB0dXJlRW5kKGV2KTt9KTsKICAgICAgICB9CgogICAgICAgIHZhciBvbk9wZXJhdGlvbkVuZCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKCFzZWxmLnJlbGVhc2VNb3VzZSkgcmV0dXJuOwogICAgICAgICAgICBpZiAoZWRpdG9yLmN1ck9wLmNvbW1hbmQubmFtZSAmJiBlZGl0b3IuY3VyT3Auc2VsZWN0aW9uQ2hhbmdlZCkgewogICAgICAgICAgICAgICAgc2VsZltzZWxmLnN0YXRlICsgIkVuZCJdICYmIHNlbGZbc2VsZi5zdGF0ZSArICJFbmQiXSgpOwogICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9ICIiOwogICAgICAgICAgICAgICAgc2VsZi5yZWxlYXNlTW91c2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGVkaXRvci5vbigiYmVmb3JlRW5kT3BlcmF0aW9uIiwgb25PcGVyYXRpb25FbmQpOwogICAgICAgIGVkaXRvci5zdGFydE9wZXJhdGlvbih7Y29tbWFuZDoge25hbWU6ICJtb3VzZSJ9fSk7CgogICAgICAgIHNlbGYuJG9uQ2FwdHVyZU1vdXNlTW92ZSA9IG9uTW91c2VNb3ZlOwogICAgICAgIHNlbGYucmVsZWFzZU1vdXNlID0gZXZlbnQuY2FwdHVyZSh0aGlzLmVkaXRvci5jb250YWluZXIsIG9uTW91c2VNb3ZlLCBvbkNhcHR1cmVFbmQpOwogICAgICAgIHZhciB0aW1lcklkID0gc2V0SW50ZXJ2YWwob25DYXB0dXJlSW50ZXJ2YWwsIDIwKTsKICAgIH07CiAgICB0aGlzLnJlbGVhc2VNb3VzZSA9IG51bGw7CiAgICB0aGlzLmNhbmNlbENvbnRleHRNZW51ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN0b3AgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIGlmIChlICYmIGUuZG9tRXZlbnQgJiYgZS5kb21FdmVudC50eXBlICE9ICJjb250ZXh0bWVudSIpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9mZigibmF0aXZlY29udGV4dG1lbnUiLCBzdG9wKTsKICAgICAgICAgICAgaWYgKGUgJiYgZS5kb21FdmVudCkKICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BFdmVudChlLmRvbUV2ZW50KTsKICAgICAgICB9LmJpbmQodGhpcyk7CiAgICAgICAgc2V0VGltZW91dChzdG9wLCAxMCk7CiAgICAgICAgdGhpcy5lZGl0b3Iub24oIm5hdGl2ZWNvbnRleHRtZW51Iiwgc3RvcCk7CiAgICB9Owp9KS5jYWxsKE1vdXNlSGFuZGxlci5wcm90b3R5cGUpOwoKY29uZmlnLmRlZmluZU9wdGlvbnMoTW91c2VIYW5kbGVyLnByb3RvdHlwZSwgIm1vdXNlSGFuZGxlciIsIHsKICAgIHNjcm9sbFNwZWVkOiB7aW5pdGlhbFZhbHVlOiAyfSwKICAgIGRyYWdEZWxheToge2luaXRpYWxWYWx1ZTogKHVzZXJhZ2VudC5pc01hYyA/IDE1MCA6IDApfSwKICAgIGRyYWdFbmFibGVkOiB7aW5pdGlhbFZhbHVlOiB0cnVlfSwKICAgIGZvY3VzVGltZW91dDoge2luaXRpYWxWYWx1ZTogMH0sCiAgICB0b29sdGlwRm9sbG93c01vdXNlOiB7aW5pdGlhbFZhbHVlOiB0cnVlfQp9KTsKCgpleHBvcnRzLk1vdXNlSGFuZGxlciA9IE1vdXNlSGFuZGxlcjsKfSk7CgpkZWZpbmUoImFjZS9tb3VzZS9mb2xkX2hhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwoKZnVuY3Rpb24gRm9sZEhhbmRsZXIoZWRpdG9yKSB7CgogICAgZWRpdG9yLm9uKCJjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgcG9zaXRpb24gPSBlLmdldERvY3VtZW50UG9zaXRpb24oKTsKICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwogICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXRGb2xkQXQocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIDEpOwogICAgICAgIGlmIChmb2xkKSB7CiAgICAgICAgICAgIGlmIChlLmdldEFjY2VsS2V5KCkpCiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHNlc3Npb24uZXhwYW5kRm9sZChmb2xkKTsKCiAgICAgICAgICAgIGUuc3RvcCgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgdGFyZ2V0ID0gZS5kb21FdmVudCAmJiBlLmRvbUV2ZW50LnRhcmdldDsKICAgICAgICBpZiAodGFyZ2V0ICYmIGRvbS5oYXNDc3NDbGFzcyh0YXJnZXQsICJhY2VfaW5saW5lX2J1dHRvbiIpKSB7CiAgICAgICAgICAgIGlmIChkb20uaGFzQ3NzQ2xhc3ModGFyZ2V0LCAiYWNlX3RvZ2dsZV93cmFwIikpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uc2V0T3B0aW9uKCJ3cmFwIiwgIXNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSk7CiAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIGVkaXRvci5vbigiZ3V0dGVyY2xpY2siLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGd1dHRlclJlZ2lvbiA9IGVkaXRvci5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuZ2V0UmVnaW9uKGUpOwoKICAgICAgICBpZiAoZ3V0dGVyUmVnaW9uID09ICJmb2xkV2lkZ2V0cyIpIHsKICAgICAgICAgICAgdmFyIHJvdyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLnJvdzsKICAgICAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3Iuc2Vzc2lvbjsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZm9sZFdpZGdldHMgJiYgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3ddKQogICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ub25Gb2xkV2lkZ2V0Q2xpY2socm93LCBlKTsKICAgICAgICAgICAgaWYgKCFlZGl0b3IuaXNGb2N1c2VkKCkpCiAgICAgICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgfQogICAgfSk7CgogICAgZWRpdG9yLm9uKCJndXR0ZXJkYmxjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgZ3V0dGVyUmVnaW9uID0gZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci5nZXRSZWdpb24oZSk7CgogICAgICAgIGlmIChndXR0ZXJSZWdpb24gPT0gImZvbGRXaWRnZXRzIikgewogICAgICAgICAgICB2YXIgcm93ID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OwogICAgICAgICAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwogICAgICAgICAgICB2YXIgZGF0YSA9IHNlc3Npb24uZ2V0UGFyZW50Rm9sZFJhbmdlRGF0YShyb3csIHRydWUpOwogICAgICAgICAgICB2YXIgcmFuZ2UgPSBkYXRhLnJhbmdlIHx8IGRhdGEuZmlyc3RSYW5nZTsKCiAgICAgICAgICAgIGlmIChyYW5nZSkgewogICAgICAgICAgICAgICAgcm93ID0gcmFuZ2Uuc3RhcnQucm93OwogICAgICAgICAgICAgICAgdmFyIGZvbGQgPSBzZXNzaW9uLmdldEZvbGRBdChyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCwgMSk7CgogICAgICAgICAgICAgICAgaWYgKGZvbGQpIHsKICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZUZvbGQoZm9sZCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNlc3Npb24uYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOwogICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyh7cm93OiByYW5nZS5zdGFydC5yb3csIGNvbHVtbjogMH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGUuc3RvcCgpOwogICAgICAgIH0KICAgIH0pOwp9CgpleHBvcnRzLkZvbGRIYW5kbGVyID0gRm9sZEhhbmRsZXI7Cgp9KTsKCmRlZmluZSgiYWNlL2tleWJvYXJkL2tleWJpbmRpbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiLCJhY2UvbGliL2V2ZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIga2V5VXRpbCAgPSByZXF1aXJlKCIuLi9saWIva2V5cyIpOwp2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKCnZhciBLZXlCaW5kaW5nID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICB0aGlzLiRlZGl0b3IgPSBlZGl0b3I7CiAgICB0aGlzLiRkYXRhID0ge2VkaXRvcjogZWRpdG9yfTsKICAgIHRoaXMuJGhhbmRsZXJzID0gW107CiAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyKGVkaXRvci5jb21tYW5kcyk7Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKICAgICAgICB0aGlzLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRkZWZhdWx0SGFuZGxlcik7CiAgICAgICAgdGhpcy4kZGVmYXVsdEhhbmRsZXIgPSBrYjsKICAgICAgICB0aGlzLmFkZEtleWJvYXJkSGFuZGxlcihrYiwgMCk7CiAgICB9OwoKICAgIHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKICAgICAgICB2YXIgaCA9IHRoaXMuJGhhbmRsZXJzOwogICAgICAgIGlmIChoW2gubGVuZ3RoIC0gMV0gPT0ga2IpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgd2hpbGUgKGhbaC5sZW5ndGggLSAxXSAmJiBoW2gubGVuZ3RoIC0gMV0gIT0gdGhpcy4kZGVmYXVsdEhhbmRsZXIpCiAgICAgICAgICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKGhbaC5sZW5ndGggLSAxXSk7CgogICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRIYW5kbGVyKGtiLCAxKTsKICAgIH07CgogICAgdGhpcy5hZGRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrYiwgcG9zKSB7CiAgICAgICAgaWYgKCFrYikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0eXBlb2Yga2IgPT0gImZ1bmN0aW9uIiAmJiAha2IuaGFuZGxlS2V5Ym9hcmQpCiAgICAgICAgICAgIGtiLmhhbmRsZUtleWJvYXJkID0ga2I7CiAgICAgICAgdmFyIGkgPSB0aGlzLiRoYW5kbGVycy5pbmRleE9mKGtiKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpOwoKICAgICAgICBpZiAocG9zID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgdGhpcy4kaGFuZGxlcnMucHVzaChrYik7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0aGlzLiRoYW5kbGVycy5zcGxpY2UocG9zLCAwLCBrYik7CgogICAgICAgIGlmIChpID09IC0xICYmIGtiLmF0dGFjaCkKICAgICAgICAgICAga2IuYXR0YWNoKHRoaXMuJGVkaXRvcik7CiAgICB9OwoKICAgIHRoaXMucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2IpIHsKICAgICAgICB2YXIgaSA9IHRoaXMuJGhhbmRsZXJzLmluZGV4T2Yoa2IpOwogICAgICAgIGlmIChpID09IC0xKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdGhpcy4kaGFuZGxlcnMuc3BsaWNlKGksIDEpOwogICAgICAgIGtiLmRldGFjaCAmJiBrYi5kZXRhY2godGhpcy4kZWRpdG9yKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5nZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcnNbdGhpcy4kaGFuZGxlcnMubGVuZ3RoIC0gMV07CiAgICB9OwogICAgCiAgICB0aGlzLmdldFN0YXR1c1RleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZGF0YSA9IHRoaXMuJGRhdGE7CiAgICAgICAgdmFyIGVkaXRvciA9IGRhdGEuZWRpdG9yOwogICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVycy5tYXAoZnVuY3Rpb24oaCkgewogICAgICAgICAgICByZXR1cm4gaC5nZXRTdGF0dXNUZXh0ICYmIGguZ2V0U3RhdHVzVGV4dChlZGl0b3IsIGRhdGEpIHx8ICIiOwogICAgICAgIH0pLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7CiAgICB9OwoKICAgIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzID0gZnVuY3Rpb24oaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUpIHsKICAgICAgICB2YXIgdG9FeGVjdXRlOwogICAgICAgIHZhciBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgdmFyIGNvbW1hbmRzID0gdGhpcy4kZWRpdG9yLmNvbW1hbmRzOwoKICAgICAgICBmb3IgKHZhciBpID0gdGhpcy4kaGFuZGxlcnMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgICAgIHRvRXhlY3V0ZSA9IHRoaXMuJGhhbmRsZXJzW2ldLmhhbmRsZUtleWJvYXJkKAogICAgICAgICAgICAgICAgdGhpcy4kZGF0YSwgaGFzaElkLCBrZXlTdHJpbmcsIGtleUNvZGUsIGUKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCF0b0V4ZWN1dGUgfHwgIXRvRXhlY3V0ZS5jb21tYW5kKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICh0b0V4ZWN1dGUuY29tbWFuZCA9PSAibnVsbCIpIHsKICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3VjY2VzcyA9IGNvbW1hbmRzLmV4ZWModG9FeGVjdXRlLmNvbW1hbmQsIHRoaXMuJGVkaXRvciwgdG9FeGVjdXRlLmFyZ3MsIGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdWNjZXNzICYmIGUgJiYgaGFzaElkICE9IC0xICYmIAogICAgICAgICAgICAgICAgdG9FeGVjdXRlLnBhc3NFdmVudCAhPSB0cnVlICYmIHRvRXhlY3V0ZS5jb21tYW5kLnBhc3NFdmVudCAhPSB0cnVlCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgZXZlbnQuc3RvcEV2ZW50KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICghc3VjY2VzcyAmJiBoYXNoSWQgPT0gLTEpIHsKICAgICAgICAgICAgdG9FeGVjdXRlID0ge2NvbW1hbmQ6ICJpbnNlcnRzdHJpbmcifTsKICAgICAgICAgICAgc3VjY2VzcyA9IGNvbW1hbmRzLmV4ZWMoImluc2VydHN0cmluZyIsIHRoaXMuJGVkaXRvciwga2V5U3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy4kZWRpdG9yLl9zaWduYWwpCiAgICAgICAgICAgIHRoaXMuJGVkaXRvci5fc2lnbmFsKCJrZXlib2FyZEFjdGl2aXR5IiwgdG9FeGVjdXRlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gc3VjY2VzczsKICAgIH07CgogICAgdGhpcy5vbkNvbW1hbmRLZXkgPSBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNvZGUpIHsKICAgICAgICB2YXIga2V5U3RyaW5nID0ga2V5VXRpbC5rZXlDb2RlVG9TdHJpbmcoa2V5Q29kZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNhbGxLZXlib2FyZEhhbmRsZXJzKGhhc2hJZCwga2V5U3RyaW5nLCBrZXlDb2RlLCBlKTsKICAgIH07CgogICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY2FsbEtleWJvYXJkSGFuZGxlcnMoLTEsIHRleHQpOwogICAgfTsKCn0pLmNhbGwoS2V5QmluZGluZy5wcm90b3R5cGUpOwoKZXhwb3J0cy5LZXlCaW5kaW5nID0gS2V5QmluZGluZzsKfSk7CgpkZWZpbmUoImFjZS9saWIvYmlkaXV0aWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBBcmFiaWNBbGVmQmV0SW50ZXJ2YWxzQmVnaW5lID0gWydcdTA2MjEnLCAnXHUwNjQxJ107CnZhciBBcmFiaWNBbGVmQmV0SW50ZXJ2YWxzRW5kID0gWydcdTA2M0EnLCAnXHUwNjRhJ107CnZhciBkaXIgPSAwLCBoaUxldmVsID0gMDsKdmFyIGxhc3RBcmFiaWMgPSBmYWxzZSwgaGFzVUJBVF9BTCA9IGZhbHNlLCAgaGFzVUJBVF9CID0gZmFsc2UsICBoYXNVQkFUX1MgPSBmYWxzZSwgaGFzQmxvY2tTZXAgPSBmYWxzZSwgaGFzU2VnU2VwID0gZmFsc2U7Cgp2YXIgaW1wVGFiX0xUUiA9IFsJWwkwLAkJMywJCTAsCQkxLAkJMCwJCTAsCQkwCV0sCVsJMCwJCTMsCQkwLAkJMSwJCTIsCQkyLAkJMAldLAlbCTAsCQkzLAkJMCwJCTB4MTEsCQkyLAkJMCwJCTEJXSwJWwkwLAkJMywJCTUsCQk1LAkJNCwJCTEsCQkwCV0sCVsJMCwJCTMsCQkweDE1LAkJMHgxNSwJCTQsCQkwLAkJMQldLAlbCTAsCQkzLAkJNSwJCTUsCQk0LAkJMiwJCTAJXQpdOwoKdmFyIGltcFRhYl9SVEwgPSBbCVsJMiwJCTAsCQkxLAkJMSwJCTAsCQkxLAkJMAldLAlbCTIsCQkwLAkJMSwJCTEsCQkwLAkJMiwJCTAJXSwJWwkyLAkJMCwJCTIsCQkxLAkJMywJCTIsCQkwCV0sCVsJMiwJCTAsCQkyLAkJMHgyMSwJCTMsCQkxLAkJMQldCl07Cgp2YXIgTFRSID0gMCwgUlRMID0gMTsKCnZhciBMID0gMDsKdmFyIFIgPSAxOwp2YXIgRU4gPSAyOwp2YXIgQU4gPSAzOwp2YXIgT04gPSA0Owp2YXIgQiA9IDU7CnZhciBTID0gNjsKdmFyIEFMID0gNzsKdmFyIFdTID0gODsKdmFyIENTID0gOTsKdmFyIEVTID0gMTA7CnZhciBFVCA9IDExOwp2YXIgTlNNID0gMTI7CnZhciBMUkUgPSAxMzsKdmFyIFJMRSA9IDE0Owp2YXIgUERGID0gMTU7CnZhciBMUk8gPSAxNjsKdmFyIFJMTyA9IDE3Owp2YXIgQk4gPSAxODsKCnZhciBVbmljb2RlVEJMMDAgPSBbCkJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLFMsQixTLFdTLEIsQk4sQk4sCkJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEJOLEIsQixCLFMsCldTLE9OLE9OLEVULEVULEVULE9OLE9OLE9OLE9OLE9OLEVTLENTLEVTLENTLENTLApFTixFTixFTixFTixFTixFTixFTixFTixFTixFTixDUyxPTixPTixPTixPTixPTiwKT04sTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsCkwsTCxMLEwsTCxMLEwsTCxMLEwsTCxPTixPTixPTixPTixPTiwKT04sTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsTCxMLEwsCkwsTCxMLEwsTCxMLEwsTCxMLEwsTCxPTixPTixPTixPTixCTiwKQk4sQk4sQk4sQk4sQk4sQixCTixCTixCTixCTixCTixCTixCTixCTixCTixCTiwKQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sQk4sCkNTLE9OLEVULEVULEVULEVULE9OLE9OLE9OLE9OLEwsT04sT04sQk4sT04sT04sCkVULEVULEVOLEVOLE9OLEwsT04sT04sT04sRU4sTCxPTixPTixPTixPTixPTgpdOwoKdmFyIFVuaWNvZGVUQkwyMCA9IFsKV1MsV1MsV1MsV1MsV1MsV1MsV1MsV1MsV1MsV1MsV1MsQk4sQk4sQk4sTCxSCSwKT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sCk9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLFdTLEIsTFJFLFJMRSxQREYsTFJPLFJMTyxDUywKRVQsRVQsRVQsRVQsRVQsT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sT04sCk9OLE9OLE9OLE9OLENTLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLE9OLApPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixPTixXUwpdOwoKZnVuY3Rpb24gX2NvbXB1dGVMZXZlbHMoY2hhcnMsIGxldmVscywgbGVuLCBjaGFyVHlwZXMpIHsKCXZhciBpbXBUYWIgPSBkaXIgPyBpbXBUYWJfUlRMIDogaW1wVGFiX0xUUgoJCSwgcHJldlN0YXRlID0gbnVsbCwgbmV3Q2xhc3MgPSBudWxsLCBuZXdMZXZlbCA9IG51bGwsIG5ld1N0YXRlID0gMAoJCSwgYWN0aW9uID0gbnVsbCwgY29uZCA9IG51bGwsIGNvbmRQb3MgPSAtMSwgaSA9IG51bGwsIGl4ID0gbnVsbCwgY2xhc3NlcyA9IFtdOwoKCWlmICghY2hhclR5cGVzKSB7CgkJZm9yIChpID0gMCwgY2hhclR5cGVzID0gW107IGkgPCBsZW47IGkrKykgewoJCQljaGFyVHlwZXNbaV0gPSBfZ2V0Q2hhcmFjdGVyVHlwZShjaGFyc1tpXSk7CgkJfQoJfQoJaGlMZXZlbCA9IGRpcjsKCWxhc3RBcmFiaWMgPSBmYWxzZTsKCWhhc1VCQVRfQUwgPSBmYWxzZTsKCWhhc1VCQVRfQiA9IGZhbHNlOwoJaGFzVUJBVF9TID0gZmFsc2U7Cglmb3IgKGl4ID0gMDsgaXggPCBsZW47IGl4KyspewoJCXByZXZTdGF0ZSA9IG5ld1N0YXRlOwoJCWNsYXNzZXNbaXhdID0gbmV3Q2xhc3MgPSBfZ2V0Q2hhckNsYXNzKGNoYXJzLCBjaGFyVHlwZXMsIGNsYXNzZXMsIGl4KTsKCQluZXdTdGF0ZSA9IGltcFRhYltwcmV2U3RhdGVdW25ld0NsYXNzXTsKCQlhY3Rpb24gPSBuZXdTdGF0ZSAmIDB4RjA7CgkJbmV3U3RhdGUgJj0gMHgwRjsKCQlsZXZlbHNbaXhdID0gbmV3TGV2ZWwgPSBpbXBUYWJbbmV3U3RhdGVdWzVdOwoJCWlmIChhY3Rpb24gPiAwKXsKCQkJaWYgKGFjdGlvbiA9PSAweDEwKXsKCQkJCWZvcihpID0gY29uZFBvczsgaSA8IGl4OyBpKyspewoJCQkJCWxldmVsc1tpXSA9IDE7CgkJCQl9CgkJCQljb25kUG9zID0gLTE7CgkJCX0gZWxzZSB7CgkJCQljb25kUG9zID0gLTE7CgkJCX0KCQl9CgkJY29uZCA9IGltcFRhYltuZXdTdGF0ZV1bNl07CgkJaWYgKGNvbmQpewoJCQlpZihjb25kUG9zID09IC0xKXsKCQkJCWNvbmRQb3MgPSBpeDsKCQkJfQoJCX1lbHNlewoJCQlpZiAoY29uZFBvcyA+IC0xKXsKCQkJCWZvcihpID0gY29uZFBvczsgaSA8IGl4OyBpKyspewoJCQkJCWxldmVsc1tpXSA9IG5ld0xldmVsOwoJCQkJfQoJCQkJY29uZFBvcyA9IC0xOwoJCQl9CgkJfQoJCWlmIChjaGFyVHlwZXNbaXhdID09IEIpewoJCQlsZXZlbHNbaXhdID0gMDsKCQl9CgkJaGlMZXZlbCB8PSBuZXdMZXZlbDsKCX0KCWlmIChoYXNVQkFUX1MpewoJCWZvcihpID0gMDsgaSA8IGxlbjsgaSsrKXsKCQkJaWYoY2hhclR5cGVzW2ldID09IFMpewoJCQkJbGV2ZWxzW2ldID0gZGlyOwoJCQkJZm9yKHZhciBqID0gaSAtIDE7IGogPj0gMDsgai0tKXsKCQkJCQlpZihjaGFyVHlwZXNbal0gPT0gV1MpewoJCQkJCQlsZXZlbHNbal0gPSBkaXI7CgkJCQkJfWVsc2V7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0KfQoKZnVuY3Rpb24gX2ludmVydExldmVsKGxldiwgbGV2ZWxzLCBfYXJyYXkpIHsKCWlmIChoaUxldmVsIDwgbGV2KXsKCQlyZXR1cm47Cgl9CglpZiAobGV2ID09IDEgJiYgZGlyID09IFJUTCAmJiAhaGFzVUJBVF9CKXsKCQlfYXJyYXkucmV2ZXJzZSgpOwoJCXJldHVybjsKCX0KCXZhciBsZW4gPSBfYXJyYXkubGVuZ3RoLCBzdGFydCA9IDAsIGVuZCwgbG8sIGhpLCB0bXA7Cgl3aGlsZShzdGFydCA8IGxlbil7CgkJaWYgKGxldmVsc1tzdGFydF0gPj0gbGV2KXsKCQkJZW5kID0gc3RhcnQgKyAxOwoJCXdoaWxlKGVuZCA8IGxlbiAmJiBsZXZlbHNbZW5kXSA+PSBsZXYpewoJCQllbmQrKzsKCQl9CgkJZm9yKGxvID0gc3RhcnQsIGhpID0gZW5kIC0gMSA7IGxvIDwgaGk7IGxvKyssIGhpLS0pewoJCQl0bXAgPSBfYXJyYXlbbG9dOwoJCQlfYXJyYXlbbG9dID0gX2FycmF5W2hpXTsKCQkJX2FycmF5W2hpXSA9IHRtcDsKCQl9CgkJc3RhcnQgPSBlbmQ7Cgl9CglzdGFydCsrOwoJfQp9CgpmdW5jdGlvbiBfZ2V0Q2hhckNsYXNzKGNoYXJzLCB0eXBlcywgY2xhc3NlcywgaXgpIHsJCQkKCXZhciBjVHlwZSA9IHR5cGVzW2l4XSwgd1R5cGUsIG5UeXBlLCBsZW4sIGk7Cglzd2l0Y2goY1R5cGUpewoJCWNhc2UgTDoKCQljYXNlIFI6CgkJCWxhc3RBcmFiaWMgPSBmYWxzZTsKCQljYXNlIE9OOgoJCWNhc2UgQU46CgkJCXJldHVybiBjVHlwZTsKCQljYXNlIEVOOgoJCQlyZXR1cm4gbGFzdEFyYWJpYyA/IEFOIDogRU47CgkJY2FzZSBBTDoKCQkJbGFzdEFyYWJpYyA9IHRydWU7CgkJCWhhc1VCQVRfQUwgPSB0cnVlOwoJCQlyZXR1cm4gUjsKCQljYXNlIFdTOgoJCQlyZXR1cm4gT047CgkJY2FzZSBDUzoKCQkJaWYgKGl4IDwgMSB8fCAoaXggKyAxKSA+PSB0eXBlcy5sZW5ndGggfHwKCQkJCSgod1R5cGUgPSBjbGFzc2VzW2l4IC0gMV0pICE9IEVOICYmIHdUeXBlICE9IEFOKSB8fAoJCQkJKChuVHlwZSA9IHR5cGVzW2l4ICsgMV0pICE9IEVOICYmIG5UeXBlICE9IEFOKSl7CgkJCQlyZXR1cm4gT047CgkJCX0KCQkJaWYgKGxhc3RBcmFiaWMpe25UeXBlID0gQU47fQoJCQlyZXR1cm4gblR5cGUgPT0gd1R5cGUgPyBuVHlwZSA6IE9OOwoJCWNhc2UgRVM6CgkJCXdUeXBlID0gaXggPiAwID8gY2xhc3Nlc1tpeCAtIDFdIDogQjsKCQkJaWYgKHdUeXBlID09IEVOICYmIChpeCArIDEpIDwgdHlwZXMubGVuZ3RoICYmIHR5cGVzW2l4ICsgMV0gPT0gRU4pewoJCQkJcmV0dXJuIEVOOwoJCQl9CgkJCXJldHVybiBPTjsKCQljYXNlIEVUOgoJCQlpZiAoaXggPiAwICYmIGNsYXNzZXNbaXggLSAxXSA9PSBFTil7CgkJCQlyZXR1cm4gRU47CgkJCX0KCQkJaWYgKGxhc3RBcmFiaWMpewoJCQkJcmV0dXJuIE9OOwoJCQl9CgkJCWkgPSBpeCArIDE7CgkJCWxlbiA9IHR5cGVzLmxlbmd0aDsKCQkJd2hpbGUgKGkgPCBsZW4gJiYgdHlwZXNbaV0gPT0gRVQpewoJCQkJaSsrOwoJCQl9CgkJCWlmIChpIDwgbGVuICYmIHR5cGVzW2ldID09IEVOKXsKCQkJCXJldHVybiBFTjsKCQkJfQoJCQlyZXR1cm4gT047CgkJY2FzZSBOU006CgkJCWxlbiA9IHR5cGVzLmxlbmd0aDsKCQkJaSA9IGl4ICsgMTsKCQkJd2hpbGUgKGkgPCBsZW4gJiYgdHlwZXNbaV0gPT0gTlNNKXsKCQkJCWkrKzsKCQkJfQoJCQlpZiAoaSA8IGxlbil7CgkJCQl2YXIgYyA9IGNoYXJzW2l4XSwgcnRsQ2FuZGlkYXRlID0gKGMgPj0gMHgwNTkxICYmIGMgPD0gMHgwOEZGKSB8fCBjID09IDB4RkIxRTsKCQkJCQoJCQkJd1R5cGUgPSB0eXBlc1tpXTsKCQkJCWlmIChydGxDYW5kaWRhdGUgJiYgKHdUeXBlID09IFIgfHwgd1R5cGUgPT0gQUwpKXsKCQkJCQlyZXR1cm4gUjsKCQkJCX0KCQkJfQoKCQkJaWYgKGl4IDwgMSB8fCAod1R5cGUgPSB0eXBlc1tpeCAtIDFdKSA9PSBCKXsKCQkJCXJldHVybiBPTjsKCQkJfQoJCQlyZXR1cm4gY2xhc3Nlc1tpeCAtIDFdOwoJCWNhc2UgQjoKCQkJbGFzdEFyYWJpYyA9IGZhbHNlOwoJCQloYXNVQkFUX0IgPSB0cnVlOwoJCQlyZXR1cm4gZGlyOwoJCWNhc2UgUzoKCQkJaGFzVUJBVF9TID0gdHJ1ZTsKCQkJcmV0dXJuIE9OOwoJCWNhc2UgTFJFOgoJCWNhc2UgUkxFOgoJCWNhc2UgTFJPOgoJCWNhc2UgUkxPOgoJCWNhc2UgUERGOgoJCQlsYXN0QXJhYmljID0gZmFsc2U7CgkJY2FzZSBCTjoKCQkJcmV0dXJuIE9OOwoJfQp9CgpmdW5jdGlvbiBfZ2V0Q2hhcmFjdGVyVHlwZSggY2ggKSB7CQkKCXZhciB1YyA9IGNoLmNoYXJDb2RlQXQoMCksIGhpID0gdWMgPj4gODsKCQoJaWYgKGhpID09IDApIHsJCQoJCXJldHVybiAoKHVjID4gMHgwMEJGKSA/IEwgOiBVbmljb2RlVEJMMDBbdWNdKTsKCX0gZWxzZSBpZiAoaGkgPT0gNSkgewoJCXJldHVybiAoL1tcdTA1OTEtXHUwNWY0XS8udGVzdChjaCkgPyBSIDogTCk7Cgl9IGVsc2UgaWYgKGhpID09IDYpIHsKCQlpZiAoL1tcdTA2MTAtXHUwNjFhXHUwNjRiLVx1MDY1Zlx1MDZkNi1cdTA2ZTRcdTA2ZTctXHUwNmVkXS8udGVzdChjaCkpCgkJCXJldHVybiBOU007CgkJZWxzZSBpZiAoL1tcdTA2NjAtXHUwNjY5XHUwNjZiLVx1MDY2Y10vLnRlc3QoY2gpKQoJCQlyZXR1cm4gQU47CgkJZWxzZSBpZiAodWMgPT0gMHgwNjZBKQoJCQlyZXR1cm4gRVQ7CgkJZWxzZSBpZiAoL1tcdTA2ZjAtXHUwNmY5XS8udGVzdChjaCkpCgkJCXJldHVybiBFTjsJCQkKCQllbHNlCgkJCXJldHVybiBBTDsKCX0gZWxzZSBpZiAoaGkgPT0gMHgyMCAmJiB1YyA8PSAweDIwNUYpIHsKCQlyZXR1cm4gVW5pY29kZVRCTDIwW3VjICYgMHhGRl07Cgl9IGVsc2UgaWYgKGhpID09IDB4RkUpIHsKCQlyZXR1cm4gKHVjID49IDB4RkU3MCA/IEFMIDogT04pOwoJfQkJCglyZXR1cm4gT047CQp9CgpmdW5jdGlvbiBfaXNBcmFiaWNEaWFjcml0aWNzKCBjaCApIHsKCXJldHVybiAoY2ggPj0gJ1x1MDY0YicgJiYgY2ggPD0gJ1x1MDY1NScpOwp9CmV4cG9ydHMuTCA9IEw7CmV4cG9ydHMuUiA9IFI7CmV4cG9ydHMuRU4gPSBFTjsKZXhwb3J0cy5PTl9SID0gMzsKZXhwb3J0cy5BTiA9IDQ7CmV4cG9ydHMuUl9IID0gNTsKZXhwb3J0cy5CID0gNjsKZXhwb3J0cy5STEUgPSA3OwoKZXhwb3J0cy5ET1QgPSAiXHhCNyI7CmV4cG9ydHMuZG9CaWRpUmVvcmRlciA9IGZ1bmN0aW9uKHRleHQsIHRleHRDaGFyVHlwZXMsIGlzUnRsKSB7CglpZiAodGV4dC5sZW5ndGggPCAyKQoJCXJldHVybiB7fTsKCQkKCXZhciBjaGFycyA9IHRleHQuc3BsaXQoIiIpLCBsb2dpY2FsRnJvbVZpc3VhbCA9IG5ldyBBcnJheShjaGFycy5sZW5ndGgpLAoJCWJpZGlMZXZlbHMgPSBuZXcgQXJyYXkoY2hhcnMubGVuZ3RoKSwgbGV2ZWxzID0gW107IAoKCWRpciA9IGlzUnRsID8gUlRMIDogTFRSOwoKCV9jb21wdXRlTGV2ZWxzKGNoYXJzLCBsZXZlbHMsIGNoYXJzLmxlbmd0aCwgdGV4dENoYXJUeXBlcyk7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCBsb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGg7IGxvZ2ljYWxGcm9tVmlzdWFsW2ldID0gaSwgaSsrKTsKCglfaW52ZXJ0TGV2ZWwoMiwgbGV2ZWxzLCBsb2dpY2FsRnJvbVZpc3VhbCk7CglfaW52ZXJ0TGV2ZWwoMSwgbGV2ZWxzLCBsb2dpY2FsRnJvbVZpc3VhbCk7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCBsb2dpY2FsRnJvbVZpc3VhbC5sZW5ndGggLSAxOyBpKyspIHsgLy9maXggbGV2ZWxzIHRvIHJlZmxlY3QgY2hhcmFjdGVyIHdpZHRoCgkJaWYgKHRleHRDaGFyVHlwZXNbaV0gPT09IEFOKSB7CgkJCWxldmVsc1tpXSA9IGV4cG9ydHMuQU47CgkJfSBlbHNlIGlmIChsZXZlbHNbaV0gPT09IFIgJiYgKCh0ZXh0Q2hhclR5cGVzW2ldID4gQUwgJiYgdGV4dENoYXJUeXBlc1tpXSA8IExSRSkgCgkJCXx8IHRleHRDaGFyVHlwZXNbaV0gPT09IE9OIHx8IHRleHRDaGFyVHlwZXNbaV0gPT09IEJOKSkgewoJCQlsZXZlbHNbaV0gPSBleHBvcnRzLk9OX1I7CgkJfSBlbHNlIGlmICgoaSA+IDAgJiYgY2hhcnNbaSAtIDFdID09PSAnXHUwNjQ0JykgJiYgL1x1MDYyMnxcdTA2MjN8XHUwNjI1fFx1MDYyNy8udGVzdChjaGFyc1tpXSkpIHsKCQkJbGV2ZWxzW2kgLSAxXSA9IGxldmVsc1tpXSA9IGV4cG9ydHMuUl9IOwoJCQlpKys7CgkJfQoJfQoJaWYgKGNoYXJzW2NoYXJzLmxlbmd0aCAtIDFdID09PSBleHBvcnRzLkRPVCkKCQlsZXZlbHNbY2hhcnMubGVuZ3RoIC0gMV0gPSBleHBvcnRzLkI7CgkJCQkKCWlmIChjaGFyc1swXSA9PT0gJ1x1MjAyQicpCgkJbGV2ZWxzWzBdID0gZXhwb3J0cy5STEU7CgkJCQkKCWZvciAodmFyIGkgPSAwOyBpIDwgbG9naWNhbEZyb21WaXN1YWwubGVuZ3RoOyBpKyspIHsKCQliaWRpTGV2ZWxzW2ldID0gbGV2ZWxzW2xvZ2ljYWxGcm9tVmlzdWFsW2ldXTsKCX0KCglyZXR1cm4geydsb2dpY2FsRnJvbVZpc3VhbCc6IGxvZ2ljYWxGcm9tVmlzdWFsLCAnYmlkaUxldmVscyc6IGJpZGlMZXZlbHN9Owp9OwpleHBvcnRzLmhhc0JpZGlDaGFyYWN0ZXJzID0gZnVuY3Rpb24odGV4dCwgdGV4dENoYXJUeXBlcyl7Cgl2YXIgcmV0ID0gZmFsc2U7Cglmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspewoJCXRleHRDaGFyVHlwZXNbaV0gPSBfZ2V0Q2hhcmFjdGVyVHlwZSh0ZXh0LmNoYXJBdChpKSk7CgkJaWYgKCFyZXQgJiYgKHRleHRDaGFyVHlwZXNbaV0gPT0gUiB8fCB0ZXh0Q2hhclR5cGVzW2ldID09IEFMIHx8IHRleHRDaGFyVHlwZXNbaV0gPT0gQU4pKQoJCQlyZXQgPSB0cnVlOwoJfQoJcmV0dXJuIHJldDsKfTsJCmV4cG9ydHMuZ2V0VmlzdWFsRnJvbUxvZ2ljYWxJZHggPSBmdW5jdGlvbihsb2dJZHgsIHJvd01hcCkgewoJZm9yICh2YXIgaSA9IDA7IGkgPCByb3dNYXAubG9naWNhbEZyb21WaXN1YWwubGVuZ3RoOyBpKyspIHsKCQlpZiAocm93TWFwLmxvZ2ljYWxGcm9tVmlzdWFsW2ldID09IGxvZ0lkeCkKCQkJcmV0dXJuIGk7Cgl9CglyZXR1cm4gMDsKfTsKCn0pOwoKZGVmaW5lKCJhY2UvYmlkaWhhbmRsZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2JpZGl1dGlsIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgYmlkaVV0aWwgPSByZXF1aXJlKCIuL2xpYi9iaWRpdXRpbCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKdmFyIGJpZGlSRSA9IC9bXHUwNTkwLVx1MDVmNFx1MDYwMC1cdTA2ZmZcdTA3MDAtXHUwOGFjXHUyMDJCXS87CnZhciBCaWRpSGFuZGxlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CiAgICB0aGlzLmJpZGlNYXAgPSB7fTsKICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7CiAgICB0aGlzLmJpZGlVdGlsID0gYmlkaVV0aWw7CiAgICB0aGlzLmNoYXJXaWR0aHMgPSBbXTsKICAgIHRoaXMuRU9MID0gIlx4QUMiOwogICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IHRydWU7CiAgICB0aGlzLmlzUnRsRGlyID0gZmFsc2U7CiAgICB0aGlzLiRpc1J0bCA9IGZhbHNlOwogICAgdGhpcy5saW5lID0gIiI7CiAgICB0aGlzLndyYXBJbmRlbnQgPSAwOwogICAgdGhpcy5FT0YgPSAiXHhCNiI7CiAgICB0aGlzLlJMRSA9ICJcdTIwMkIiOwogICAgdGhpcy5jb250ZW50V2lkdGggPSAwOwogICAgdGhpcy5mb250TWV0cmljcyA9IG51bGw7CiAgICB0aGlzLnJ0bExpbmVPZmZzZXQgPSAwOwogICAgdGhpcy53cmFwT2Zmc2V0ID0gMDsKICAgIHRoaXMuaXNNb3ZlTGVmdE9wZXJhdGlvbiA9IGZhbHNlOwogICAgdGhpcy5zZWVuQmlkaSA9IGJpZGlSRS50ZXN0KHNlc3Npb24uZ2V0VmFsdWUoKSk7Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzQmlkaVJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgZG9jUm93LCBzcGxpdEluZGV4KSB7CiAgICAgICAgaWYgKCF0aGlzLnNlZW5CaWRpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHNjcmVlblJvdyAhPT0gdGhpcy5jdXJyZW50Um93KSB7CiAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IHNjcmVlblJvdzsKICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dMaW5lKGRvY1Jvdywgc3BsaXRJbmRleCk7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQmlkaU1hcCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5iaWRpTWFwLmJpZGlMZXZlbHM7CiAgICB9OwoKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmICghdGhpcy5zZWVuQmlkaSkgewogICAgICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiICYmIGJpZGlSRS50ZXN0KGRlbHRhLmxpbmVzLmpvaW4oIlxuIikpKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlZW5CaWRpID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9IAogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSBudWxsOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5nZXREb2N1bWVudFJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkb2NSb3cgPSAwOwogICAgICAgIHZhciByb3dDYWNoZSA9IHRoaXMuc2Vzc2lvbi4kc2NyZWVuUm93Q2FjaGU7CiAgICAgICAgaWYgKHJvd0NhY2hlLmxlbmd0aCkgewogICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnNlc3Npb24uJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIHRoaXMuY3VycmVudFJvdyk7CiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKQogICAgICAgICAgICAgICAgZG9jUm93ID0gdGhpcy5zZXNzaW9uLiRkb2NSb3dDYWNoZVtpbmRleF07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZG9jUm93OwogICAgfTsKCiAgICB0aGlzLmdldFNwbGl0SW5kZXggPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc3BsaXRJbmRleCA9IDA7CiAgICAgICAgdmFyIHJvd0NhY2hlID0gdGhpcy5zZXNzaW9uLiRzY3JlZW5Sb3dDYWNoZTsKICAgICAgICBpZiAocm93Q2FjaGUubGVuZ3RoKSB7CiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXgsIHByZXZJbmRleCA9IHRoaXMuc2Vzc2lvbi4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgdGhpcy5jdXJyZW50Um93KTsKICAgICAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFJvdyAtIHNwbGl0SW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXggPSB0aGlzLnNlc3Npb24uJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIHRoaXMuY3VycmVudFJvdyAtIHNwbGl0SW5kZXggLSAxKTsKICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IHByZXZJbmRleCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBwcmV2SW5kZXggPSBjdXJyZW50SW5kZXg7CiAgICAgICAgICAgICAgICBzcGxpdEluZGV4Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzcGxpdEluZGV4ID0gdGhpcy5jdXJyZW50Um93OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNwbGl0SW5kZXg7CiAgICB9OwoKICAgIHRoaXMudXBkYXRlUm93TGluZSA9IGZ1bmN0aW9uKGRvY1Jvdywgc3BsaXRJbmRleCkgewogICAgICAgIGlmIChkb2NSb3cgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgZG9jUm93ID0gdGhpcy5nZXREb2N1bWVudFJvdygpOwogICAgICAgICAgICAKICAgICAgICB2YXIgaXNMYXN0Um93ID0gKGRvY1JvdyA9PT0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpIC0gMSksCiAgICAgICAgICAgIGVuZE9mTGluZSA9IGlzTGFzdFJvdyA/IHRoaXMuRU9GIDogdGhpcy5FT0w7CgogICAgICAgIHRoaXMud3JhcEluZGVudCA9IDA7CiAgICAgICAgdGhpcy5saW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUoZG9jUm93KTsKICAgICAgICB0aGlzLmlzUnRsRGlyID0gdGhpcy4kaXNSdGwgfHwgdGhpcy5saW5lLmNoYXJBdCgwKSA9PT0gdGhpcy5STEU7CiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kdXNlV3JhcE1vZGUpIHsKICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuc2Vzc2lvbi4kd3JhcERhdGFbZG9jUm93XTsKICAgICAgICAgICAgaWYgKHNwbGl0cykgewogICAgICAgICAgICAgICAgaWYgKHNwbGl0SW5kZXggPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgICAgICBzcGxpdEluZGV4ID0gdGhpcy5nZXRTcGxpdEluZGV4KCk7CgogICAgICAgICAgICAgICAgaWYoc3BsaXRJbmRleCA+IDAgJiYgc3BsaXRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMud3JhcEluZGVudCA9IHNwbGl0cy5pbmRlbnQ7CiAgICAgICAgICAgICAgICAgICAgdGhpcy53cmFwT2Zmc2V0ID0gdGhpcy53cmFwSW5kZW50ICogdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLkxdOwogICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSA9IChzcGxpdEluZGV4IDwgc3BsaXRzLmxlbmd0aCkgPwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUuc3Vic3RyaW5nKHNwbGl0c1tzcGxpdEluZGV4IC0gMV0sIHNwbGl0c1tzcGxpdEluZGV4XSkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lLnN1YnN0cmluZyhzcGxpdHNbc3BsaXRzLmxlbmd0aCAtIDFdKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lID0gdGhpcy5saW5lLnN1YnN0cmluZygwLCBzcGxpdHNbc3BsaXRJbmRleF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzcGxpdEluZGV4ID09IHNwbGl0cy5sZW5ndGgpCiAgICAgICAgICAgICAgICB0aGlzLmxpbmUgKz0gKHRoaXMuc2hvd0ludmlzaWJsZXMpID8gZW5kT2ZMaW5lIDogYmlkaVV0aWwuRE9UOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMubGluZSArPSB0aGlzLnNob3dJbnZpc2libGVzID8gZW5kT2ZMaW5lIDogYmlkaVV0aWwuRE9UOwogICAgICAgIH0KICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbiwgc2hpZnQgPSAwLCBzaXplOwogICAgICAgIHRoaXMubGluZSA9IHRoaXMubGluZS5yZXBsYWNlKC9cdHxbXHUxMTAwLVx1MjAyOSwgXHUyMDJGLVx1RkZFNl0vZywgZnVuY3Rpb24oY2gsIGkpewogICAgICAgICAgICBpZiAoY2ggPT09ICdcdCcgfHwgc2Vzc2lvbi5pc0Z1bGxXaWR0aChjaC5jaGFyQ29kZUF0KDApKSkgewogICAgICAgICAgICAgICAgc2l6ZSA9IChjaCA9PT0gJ1x0JykgPyBzZXNzaW9uLmdldFNjcmVlblRhYlNpemUoaSArIHNoaWZ0KSA6IDI7CiAgICAgICAgICAgICAgICBzaGlmdCArPSBzaXplIC0gMTsKICAgICAgICAgICAgICAgIHJldHVybiBsYW5nLnN0cmluZ1JlcGVhdChiaWRpVXRpbC5ET1QsIHNpemUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjaDsKICAgICAgICB9KTsKCiAgICAgICAgaWYgKHRoaXMuaXNSdGxEaXIpIHsKICAgICAgICAgICAgdGhpcy5mb250TWV0cmljcy4kbWFpbi50ZXh0Q29udGVudCA9ICh0aGlzLmxpbmUuY2hhckF0KHRoaXMubGluZS5sZW5ndGggLSAxKSA9PSBiaWRpVXRpbC5ET1QpID8gdGhpcy5saW5lLnN1YnN0cigwLCB0aGlzLmxpbmUubGVuZ3RoIC0gMSkgOiB0aGlzLmxpbmU7CiAgICAgICAgICAgIHRoaXMucnRsTGluZU9mZnNldCA9IHRoaXMuY29udGVudFdpZHRoIC0gdGhpcy5mb250TWV0cmljcy4kbWFpbi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLnVwZGF0ZUJpZGlNYXAgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdGV4dENoYXJUeXBlcyA9IFtdOwogICAgICAgIGlmIChiaWRpVXRpbC5oYXNCaWRpQ2hhcmFjdGVycyh0aGlzLmxpbmUsIHRleHRDaGFyVHlwZXMpIHx8IHRoaXMuaXNSdGxEaXIpIHsKICAgICAgICAgICAgIHRoaXMuYmlkaU1hcCA9IGJpZGlVdGlsLmRvQmlkaVJlb3JkZXIodGhpcy5saW5lLCB0ZXh0Q2hhclR5cGVzLCB0aGlzLmlzUnRsRGlyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmJpZGlNYXAgPSB7fTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5tYXJrQXNEaXJ0eSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7CiAgICB9OwogICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJXaWR0aHMgPSBmdW5jdGlvbihmb250TWV0cmljcykgewogICAgICAgIGlmICh0aGlzLmNoYXJhY3RlcldpZHRoID09PSBmb250TWV0cmljcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLmZvbnRNZXRyaWNzID0gZm9udE1ldHJpY3M7CiAgICAgICAgdmFyIGNoYXJhY3RlcldpZHRoID0gdGhpcy5jaGFyYWN0ZXJXaWR0aCA9IGZvbnRNZXRyaWNzLiRjaGFyYWN0ZXJTaXplLndpZHRoOwogICAgICAgIHZhciBiaWRpQ2hhcldpZHRoID0gZm9udE1ldHJpY3MuJG1lYXN1cmVDaGFyV2lkdGgoIlx1MDVkNCIpOwoKICAgICAgICB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuTF0gPSB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuRU5dID0gdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLk9OX1JdID0gY2hhcmFjdGVyV2lkdGg7CiAgICAgICAgdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLlJdID0gdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLkFOXSA9IGJpZGlDaGFyV2lkdGg7CiAgICAgICAgdGhpcy5jaGFyV2lkdGhzW2JpZGlVdGlsLlJfSF0gPSBiaWRpQ2hhcldpZHRoICogMC40NTsKICAgICAgICB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuQl0gPSB0aGlzLmNoYXJXaWR0aHNbYmlkaVV0aWwuUkxFXSA9IDA7CgogICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGw7CiAgICB9OwoKICAgIHRoaXMuc2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbihzaG93SW52aXNpYmxlcykgewogICAgICAgIHRoaXMuc2hvd0ludmlzaWJsZXMgPSBzaG93SW52aXNpYmxlczsKICAgICAgICB0aGlzLmN1cnJlbnRSb3cgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLnNldEVvbENoYXIgPSBmdW5jdGlvbihlb2xDaGFyKSB7CiAgICAgICAgdGhpcy5FT0wgPSBlb2xDaGFyOyAKICAgIH07CgogICAgdGhpcy5zZXRDb250ZW50V2lkdGggPSBmdW5jdGlvbih3aWR0aCkgewogICAgICAgIHRoaXMuY29udGVudFdpZHRoID0gd2lkdGg7CiAgICB9OwoKICAgIHRoaXMuaXNSdGxMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgaWYgKHRoaXMuJGlzUnRsKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAocm93ICE9IHVuZGVmaW5lZCkKICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNlc3Npb24uZ2V0TGluZShyb3cpLmNoYXJBdCgwKSA9PSB0aGlzLlJMRSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gdGhpcy5pc1J0bERpcjsgCiAgICB9OwoKICAgIHRoaXMuc2V0UnRsRGlyZWN0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBpc1J0bERpcikgewogICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsgCiAgICAgICAgZm9yICh2YXIgcm93ID0gZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25BbmNob3IoKS5yb3c7IHJvdyA8PSBjdXJzb3Iucm93OyByb3crKykgewogICAgICAgICAgICBpZiAoIWlzUnRsRGlyICYmIGVkaXRvci5zZXNzaW9uLmdldExpbmUocm93KS5jaGFyQXQoMCkgPT09IGVkaXRvci5zZXNzaW9uLiRiaWRpSGFuZGxlci5STEUpCiAgICAgICAgICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5kb2MucmVtb3ZlSW5MaW5lKHJvdywgMCwgMSk7CiAgICAgICAgICAgIGVsc2UgaWYgKGlzUnRsRGlyICYmIGVkaXRvci5zZXNzaW9uLmdldExpbmUocm93KS5jaGFyQXQoMCkgIT09IGVkaXRvci5zZXNzaW9uLiRiaWRpSGFuZGxlci5STEUpCiAgICAgICAgICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5kb2MuaW5zZXJ0KHtjb2x1bW46IDAsIHJvdzogcm93fSwgZWRpdG9yLnNlc3Npb24uJGJpZGlIYW5kbGVyLlJMRSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0UG9zTGVmdCA9IGZ1bmN0aW9uKGNvbCkgewogICAgICAgIGNvbCAtPSB0aGlzLndyYXBJbmRlbnQ7CiAgICAgICAgdmFyIGxlZnRCb3VuZGFyeSA9ICh0aGlzLmxpbmUuY2hhckF0KDApID09PSB0aGlzLlJMRSkgPyAxIDogMDsKICAgICAgICB2YXIgbG9naWNhbElkeCA9IChjb2wgPiBsZWZ0Qm91bmRhcnkpID8gKHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSA/IGNvbCA6IGNvbCAtIDEpIDogbGVmdEJvdW5kYXJ5OwogICAgICAgIHZhciB2aXN1YWxJZHggPSBiaWRpVXRpbC5nZXRWaXN1YWxGcm9tTG9naWNhbElkeChsb2dpY2FsSWR4LCB0aGlzLmJpZGlNYXApLAogICAgICAgICAgICBsZXZlbHMgPSB0aGlzLmJpZGlNYXAuYmlkaUxldmVscywgbGVmdCA9IDA7CgogICAgICAgIGlmICghdGhpcy5zZXNzaW9uLmdldE92ZXJ3cml0ZSgpICYmIGNvbCA8PSBsZWZ0Qm91bmRhcnkgJiYgbGV2ZWxzW3Zpc3VhbElkeF0gJSAyICE9PSAwKQogICAgICAgICAgICB2aXN1YWxJZHgrKzsKICAgICAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aXN1YWxJZHg7IGkrKykgewogICAgICAgICAgICBsZWZ0ICs9IHRoaXMuY2hhcldpZHRoc1tsZXZlbHNbaV1dOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24uZ2V0T3ZlcndyaXRlKCkgJiYgKGNvbCA+IGxlZnRCb3VuZGFyeSkgJiYgKGxldmVsc1t2aXN1YWxJZHhdICUgMiA9PT0gMCkpCiAgICAgICAgICAgIGxlZnQgKz0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1t2aXN1YWxJZHhdXTsKCiAgICAgICAgaWYgKHRoaXMud3JhcEluZGVudCkKICAgICAgICAgICAgbGVmdCArPSB0aGlzLmlzUnRsRGlyID8gKC0xICogdGhpcy53cmFwT2Zmc2V0KSA6IHRoaXMud3JhcE9mZnNldDsKCiAgICAgICAgaWYgKHRoaXMuaXNSdGxEaXIpCiAgICAgICAgICAgIGxlZnQgKz0gdGhpcy5ydGxMaW5lT2Zmc2V0OwoKICAgICAgICByZXR1cm4gbGVmdDsKICAgIH07CiAgICB0aGlzLmdldFNlbGVjdGlvbnMgPSBmdW5jdGlvbihzdGFydENvbCwgZW5kQ29sKSB7CiAgICAgICAgdmFyIG1hcCA9IHRoaXMuYmlkaU1hcCwgbGV2ZWxzID0gbWFwLmJpZGlMZXZlbHMsIGxldmVsLCBzZWxlY3Rpb25zID0gW10sIG9mZnNldCA9IDAsCiAgICAgICAgICAgIHNlbENvbE1pbiA9IE1hdGgubWluKHN0YXJ0Q29sLCBlbmRDb2wpIC0gdGhpcy53cmFwSW5kZW50LCBzZWxDb2xNYXggPSBNYXRoLm1heChzdGFydENvbCwgZW5kQ29sKSAtIHRoaXMud3JhcEluZGVudCwKICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSBmYWxzZSwgaXNTZWxlY3RlZFByZXYgPSBmYWxzZSwgc2VsZWN0aW9uU3RhcnQgPSAwOwogICAgICAgICAgICAKICAgICAgICBpZiAodGhpcy53cmFwSW5kZW50KQogICAgICAgICAgICBvZmZzZXQgKz0gdGhpcy5pc1J0bERpciA/ICgtMSAqIHRoaXMud3JhcE9mZnNldCkgOiB0aGlzLndyYXBPZmZzZXQ7CgogICAgICAgIGZvciAodmFyIGxvZ0lkeCwgdmlzSWR4ID0gMDsgdmlzSWR4IDwgbGV2ZWxzLmxlbmd0aDsgdmlzSWR4KyspIHsKICAgICAgICAgICAgbG9nSWR4ID0gbWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc0lkeF07CiAgICAgICAgICAgIGxldmVsID0gbGV2ZWxzW3Zpc0lkeF07CiAgICAgICAgICAgIGlzU2VsZWN0ZWQgPSAobG9nSWR4ID49IHNlbENvbE1pbikgJiYgKGxvZ0lkeCA8IHNlbENvbE1heCk7CiAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkICYmICFpc1NlbGVjdGVkUHJldikgewogICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQgPSBvZmZzZXQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgaXNTZWxlY3RlZFByZXYpIHsKICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMucHVzaCh7bGVmdDogc2VsZWN0aW9uU3RhcnQsIHdpZHRoOiBvZmZzZXQgLSBzZWxlY3Rpb25TdGFydH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9mZnNldCArPSB0aGlzLmNoYXJXaWR0aHNbbGV2ZWxdOwogICAgICAgICAgICBpc1NlbGVjdGVkUHJldiA9IGlzU2VsZWN0ZWQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiAodmlzSWR4ID09PSBsZXZlbHMubGVuZ3RoKSkgewogICAgICAgICAgICBzZWxlY3Rpb25zLnB1c2goe2xlZnQ6IHNlbGVjdGlvblN0YXJ0LCB3aWR0aDogb2Zmc2V0IC0gc2VsZWN0aW9uU3RhcnR9KTsKICAgICAgICB9CgogICAgICAgIGlmKHRoaXMuaXNSdGxEaXIpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBzZWxlY3Rpb25zW2ldLmxlZnQgKz0gdGhpcy5ydGxMaW5lT2Zmc2V0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxlY3Rpb25zOwogICAgfTsKICAgIHRoaXMub2Zmc2V0VG9Db2wgPSBmdW5jdGlvbihwb3NYKSB7CiAgICAgICAgaWYodGhpcy5pc1J0bERpcikKICAgICAgICAgICAgcG9zWCAtPSB0aGlzLnJ0bExpbmVPZmZzZXQ7CgogICAgICAgIHZhciBsb2dpY2FsSWR4ID0gMCwgcG9zWCA9IE1hdGgubWF4KHBvc1gsIDApLAogICAgICAgICAgICBvZmZzZXQgPSAwLCB2aXN1YWxJZHggPSAwLCBsZXZlbHMgPSB0aGlzLmJpZGlNYXAuYmlkaUxldmVscywKICAgICAgICAgICAgICAgIGNoYXJXaWR0aCA9IHRoaXMuY2hhcldpZHRoc1tsZXZlbHNbdmlzdWFsSWR4XV07CgogICAgICAgIGlmICh0aGlzLndyYXBJbmRlbnQpCiAgICAgICAgICAgcG9zWCAtPSB0aGlzLmlzUnRsRGlyID8gKC0xICogdGhpcy53cmFwT2Zmc2V0KSA6IHRoaXMud3JhcE9mZnNldDsKICAgIAogICAgICAgIHdoaWxlKHBvc1ggPiBvZmZzZXQgKyBjaGFyV2lkdGgvMikgewogICAgICAgICAgICBvZmZzZXQgKz0gY2hhcldpZHRoOwogICAgICAgICAgICBpZih2aXN1YWxJZHggPT09IGxldmVscy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBjaGFyV2lkdGggPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2hhcldpZHRoID0gdGhpcy5jaGFyV2lkdGhzW2xldmVsc1srK3Zpc3VhbElkeF1dOwogICAgICAgIH0KICAgIAogICAgICAgIGlmICh2aXN1YWxJZHggPiAwICYmIChsZXZlbHNbdmlzdWFsSWR4IC0gMV0gJSAyICE9PSAwKSAmJiAobGV2ZWxzW3Zpc3VhbElkeF0gJSAyID09PSAwKSl7CiAgICAgICAgICAgIGlmKHBvc1ggPCBvZmZzZXQpCiAgICAgICAgICAgICAgICB2aXN1YWxJZHgtLTsKICAgICAgICAgICAgbG9naWNhbElkeCA9IHRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFt2aXN1YWxJZHhdOwoKICAgICAgICB9IGVsc2UgaWYgKHZpc3VhbElkeCA+IDAgJiYgKGxldmVsc1t2aXN1YWxJZHggLSAxXSAlIDIgPT09IDApICYmIChsZXZlbHNbdmlzdWFsSWR4XSAlIDIgIT09IDApKXsKICAgICAgICAgICAgbG9naWNhbElkeCA9IDEgKyAoKHBvc1ggPiBvZmZzZXQpID8gdGhpcy5iaWRpTWFwLmxvZ2ljYWxGcm9tVmlzdWFsW3Zpc3VhbElkeF0KICAgICAgICAgICAgICAgICAgICA6IHRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFt2aXN1YWxJZHggLSAxXSk7CgogICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNSdGxEaXIgJiYgdmlzdWFsSWR4ID09PSBsZXZlbHMubGVuZ3RoIC0gMSAmJiBjaGFyV2lkdGggPT09IDAgJiYgKGxldmVsc1t2aXN1YWxJZHggLSAxXSAlIDIgPT09IDApKQogICAgICAgICAgICAgICAgfHwgKCF0aGlzLmlzUnRsRGlyICYmIHZpc3VhbElkeCA9PT0gMCAmJiAobGV2ZWxzW3Zpc3VhbElkeF0gJSAyICE9PSAwKSkpewogICAgICAgICAgICBsb2dpY2FsSWR4ID0gMSArIHRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFt2aXN1YWxJZHhdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh2aXN1YWxJZHggPiAwICYmIChsZXZlbHNbdmlzdWFsSWR4IC0gMV0gJSAyICE9PSAwKSAmJiBjaGFyV2lkdGggIT09IDApCiAgICAgICAgICAgICAgICB2aXN1YWxJZHgtLTsKICAgICAgICAgICAgbG9naWNhbElkeCA9IHRoaXMuYmlkaU1hcC5sb2dpY2FsRnJvbVZpc3VhbFt2aXN1YWxJZHhdOwogICAgICAgIH0KCiAgICAgICAgaWYgKGxvZ2ljYWxJZHggPT09IDAgJiYgdGhpcy5pc1J0bERpcikKICAgICAgICAgICAgbG9naWNhbElkeCsrOwoKICAgICAgICByZXR1cm4gKGxvZ2ljYWxJZHggKyB0aGlzLndyYXBJbmRlbnQpOwogICAgfTsKCn0pLmNhbGwoQmlkaUhhbmRsZXIucHJvdG90eXBlKTsKCmV4cG9ydHMuQmlkaUhhbmRsZXIgPSBCaWRpSGFuZGxlcjsKfSk7CgpkZWZpbmUoImFjZS9zZWxlY3Rpb24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKdmFyIFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CiAgICB0aGlzLmRvYyA9IHNlc3Npb24uZ2V0RG9jdW1lbnQoKTsKCiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB0aGlzLmN1cnNvciA9IHRoaXMubGVhZCA9IHRoaXMuZG9jLmNyZWF0ZUFuY2hvcigwLCAwKTsKICAgIHRoaXMuYW5jaG9yID0gdGhpcy5kb2MuY3JlYXRlQW5jaG9yKDAsIDApOwogICAgdGhpcy4kc2lsZW50ID0gZmFsc2U7CgogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdGhpcy5jdXJzb3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBzZWxmLiRjdXJzb3JDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICBpZiAoIXNlbGYuJHNpbGVudCkKICAgICAgICAgICAgc2VsZi5fZW1pdCgiY2hhbmdlQ3Vyc29yIik7CiAgICAgICAgaWYgKCFzZWxmLiRpc0VtcHR5ICYmICFzZWxmLiRzaWxlbnQpCiAgICAgICAgICAgIHNlbGYuX2VtaXQoImNoYW5nZVNlbGVjdGlvbiIpOwogICAgICAgIGlmICghc2VsZi4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSAmJiBlLm9sZC5jb2x1bW4gIT0gZS52YWx1ZS5jb2x1bW4pCiAgICAgICAgICAgIHNlbGYuJGRlc2lyZWRDb2x1bW4gPSBudWxsOwogICAgfSk7CgogICAgdGhpcy5hbmNob3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgIHNlbGYuJGFuY2hvckNoYW5nZWQgPSB0cnVlOwogICAgICAgIGlmICghc2VsZi4kaXNFbXB0eSAmJiAhc2VsZi4kc2lsZW50KQogICAgICAgICAgICBzZWxmLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgIHRoaXMuaXNFbXB0eSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRpc0VtcHR5IHx8ICgKICAgICAgICAgICAgdGhpcy5hbmNob3Iucm93ID09IHRoaXMubGVhZC5yb3cgJiYKICAgICAgICAgICAgdGhpcy5hbmNob3IuY29sdW1uID09IHRoaXMubGVhZC5jb2x1bW4KICAgICAgICApOwogICAgfTsKICAgIHRoaXMuaXNNdWx0aUxpbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gIXRoaXMuJGlzRW1wdHkgJiYgdGhpcy5hbmNob3Iucm93ICE9IHRoaXMuY3Vyc29yLnJvdzsKICAgIH07CiAgICB0aGlzLmdldEN1cnNvciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTsKICAgIH07CiAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdGhpcy4kaXNFbXB0eSA9IGZhbHNlOwogICAgICAgIHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldEFuY2hvciA9IAogICAgdGhpcy5nZXRTZWxlY3Rpb25BbmNob3IgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kaXNFbXB0eSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCgpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmFuY2hvci5nZXRQb3NpdGlvbigpOwogICAgfTsKICAgIHRoaXMuZ2V0U2VsZWN0aW9uTGVhZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmxlYWQuZ2V0UG9zaXRpb24oKTsKICAgIH07CiAgICB0aGlzLmlzQmFja3dhcmRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuYW5jaG9yOwogICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOwogICAgICAgIHJldHVybiAoYW5jaG9yLnJvdyA+IGxlYWQucm93IHx8IChhbmNob3Iucm93ID09IGxlYWQucm93ICYmIGFuY2hvci5jb2x1bW4gPiBsZWFkLmNvbHVtbikpOwogICAgfTsKICAgIHRoaXMuZ2V0UmFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5hbmNob3I7CiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CgogICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KQogICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhsZWFkLCBsZWFkKTsKCiAgICAgICAgcmV0dXJuIHRoaXMuaXNCYWNrd2FyZHMoKQogICAgICAgICAgICA/IFJhbmdlLmZyb21Qb2ludHMobGVhZCwgYW5jaG9yKQogICAgICAgICAgICA6IFJhbmdlLmZyb21Qb2ludHMoYW5jaG9yLCBsZWFkKTsKICAgIH07CiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF0aGlzLiRpc0VtcHR5KSB7CiAgICAgICAgICAgIHRoaXMuJGlzRW1wdHkgPSB0cnVlOwogICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZWxlY3RBbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRzZXRTZWxlY3Rpb24oMCwgMCwgTnVtYmVyLk1BWF9WQUxVRSwgTnVtYmVyLk1BWF9WQUxVRSk7CiAgICB9OwogICAgdGhpcy5zZXRSYW5nZSA9CiAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24ocmFuZ2UsIHJldmVyc2UpIHsKICAgICAgICB2YXIgc3RhcnQgPSByZXZlcnNlID8gcmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnQ7CiAgICAgICAgdmFyIGVuZCA9IHJldmVyc2UgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKICAgICAgICB0aGlzLiRzZXRTZWxlY3Rpb24oc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwogICAgfTsKCiAgICB0aGlzLiRzZXRTZWxlY3Rpb24gPSBmdW5jdGlvbihhbmNob3JSb3csIGFuY2hvckNvbHVtbiwgY3Vyc29yUm93LCBjdXJzb3JDb2x1bW4pIHsKICAgICAgICB2YXIgd2FzRW1wdHkgPSB0aGlzLiRpc0VtcHR5OwogICAgICAgIHZhciB3YXNNdWx0aXNlbGVjdCA9IHRoaXMuaW5NdWx0aVNlbGVjdE1vZGU7CiAgICAgICAgdGhpcy4kc2lsZW50ID0gdHJ1ZTsKICAgICAgICB0aGlzLiRjdXJzb3JDaGFuZ2VkID0gdGhpcy4kYW5jaG9yQ2hhbmdlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuYW5jaG9yLnNldFBvc2l0aW9uKGFuY2hvclJvdywgYW5jaG9yQ29sdW1uKTsKICAgICAgICB0aGlzLmN1cnNvci5zZXRQb3NpdGlvbihjdXJzb3JSb3csIGN1cnNvckNvbHVtbik7CiAgICAgICAgdGhpcy4kaXNFbXB0eSA9ICFSYW5nZS5jb21wYXJlUG9pbnRzKHRoaXMuYW5jaG9yLCB0aGlzLmN1cnNvcik7CiAgICAgICAgdGhpcy4kc2lsZW50ID0gZmFsc2U7CiAgICAgICAgaWYgKHRoaXMuJGN1cnNvckNoYW5nZWQpCiAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZUN1cnNvciIpOwogICAgICAgIGlmICh0aGlzLiRjdXJzb3JDaGFuZ2VkIHx8IHRoaXMuJGFuY2hvckNoYW5nZWQgfHwgd2FzRW1wdHkgIT0gdGhpcy4kaXNFbXB0eSB8fCB3YXNNdWx0aXNlbGVjdCkKICAgICAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlU2VsZWN0aW9uIik7CiAgICB9OwoKICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24gPSBmdW5jdGlvbihtb3ZlcikgewogICAgICAgIHZhciBsZWFkID0gdGhpcy5sZWFkOwogICAgICAgIGlmICh0aGlzLiRpc0VtcHR5KQogICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkFuY2hvcihsZWFkLnJvdywgbGVhZC5jb2x1bW4pOwoKICAgICAgICBtb3Zlci5jYWxsKHRoaXMpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0VG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKICAgICAgICB9KTsKICAgIH07CiAgICB0aGlzLnNlbGVjdFRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7CiAgICAgICAgfSk7CiAgICB9OwogICAgdGhpcy5tb3ZlVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhyb3csIGNvbHVtbik7CiAgICB9OwogICAgdGhpcy5tb3ZlVG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHBvcyk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RVcCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yVXApOwogICAgfTsKICAgIHRoaXMuc2VsZWN0RG93biA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yRG93bik7CiAgICB9OwogICAgdGhpcy5zZWxlY3RSaWdodCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yUmlnaHQpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0TGVmdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVTZWxlY3Rpb24odGhpcy5tb3ZlQ3Vyc29yTGVmdCk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RMaW5lU3RhcnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckxpbmVTdGFydCk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RMaW5lRW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JMaW5lRW5kKTsKICAgIH07CiAgICB0aGlzLnNlbGVjdEZpbGVFbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvckZpbGVFbmQpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0RmlsZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0V29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbW92ZVNlbGVjdGlvbih0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0V29yZExlZnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb3ZlU2VsZWN0aW9uKHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0KTsKICAgIH07CiAgICB0aGlzLmdldFdvcmRSYW5nZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJvdyB8fCB0aGlzLmxlYWQ7CiAgICAgICAgICAgIHJvdyA9IGN1cnNvci5yb3c7CiAgICAgICAgICAgIGNvbHVtbiA9IGN1cnNvci5jb2x1bW47CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJvdywgY29sdW1uKTsKICAgIH07CiAgICB0aGlzLnNlbGVjdFdvcmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMuZ2V0V29yZFJhbmdlKCkpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0QVdvcmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3IoKTsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0QVdvcmRSYW5nZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTsKICAgIH07CgogICAgdGhpcy5nZXRMaW5lUmFuZ2UgPSBmdW5jdGlvbihyb3csIGV4Y2x1ZGVMYXN0Q2hhcikgewogICAgICAgIHZhciByb3dTdGFydCA9IHR5cGVvZiByb3cgPT0gIm51bWJlciIgPyByb3cgOiB0aGlzLmxlYWQucm93OwogICAgICAgIHZhciByb3dFbmQ7CgogICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRGb2xkTGluZShyb3dTdGFydCk7CiAgICAgICAgaWYgKGZvbGRMaW5lKSB7CiAgICAgICAgICAgIHJvd1N0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93OwogICAgICAgICAgICByb3dFbmQgPSBmb2xkTGluZS5lbmQucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJvd0VuZCA9IHJvd1N0YXJ0OwogICAgICAgIH0KICAgICAgICBpZiAoZXhjbHVkZUxhc3RDaGFyID09PSB0cnVlKQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHJvd1N0YXJ0LCAwLCByb3dFbmQsIHRoaXMuc2Vzc2lvbi5nZXRMaW5lKHJvd0VuZCkubGVuZ3RoKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93U3RhcnQsIDAsIHJvd0VuZCArIDEsIDApOwogICAgfTsKICAgIHRoaXMuc2VsZWN0TGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uUmFuZ2UodGhpcy5nZXRMaW5lUmFuZ2UoKSk7CiAgICB9OwogICAgdGhpcy5tb3ZlQ3Vyc29yVXAgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgtMSwgMCk7CiAgICB9OwogICAgdGhpcy5tb3ZlQ3Vyc29yRG93biA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDEsIDApOwogICAgfTsKICAgIHRoaXMud291bGRNb3ZlSW50b1NvZnRUYWIgPSBmdW5jdGlvbihjdXJzb3IsIHRhYlNpemUsIGRpcmVjdGlvbikgewogICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5jb2x1bW47CiAgICAgICAgdmFyIGVuZCA9IGN1cnNvci5jb2x1bW4gKyB0YWJTaXplOwoKICAgICAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewogICAgICAgICAgICBzdGFydCA9IGN1cnNvci5jb2x1bW4gLSB0YWJTaXplOwogICAgICAgICAgICBlbmQgPSBjdXJzb3IuY29sdW1uOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmlzVGFiU3RvcChjdXJzb3IpICYmIHRoaXMuZG9jLmdldExpbmUoY3Vyc29yLnJvdykuc2xpY2Uoc3RhcnQsIGVuZCkuc3BsaXQoIiAiKS5sZW5ndGgtMSA9PSB0YWJTaXplOwogICAgfTsKICAgIHRoaXMubW92ZUN1cnNvckxlZnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkLmdldFBvc2l0aW9uKCksCiAgICAgICAgICAgIGZvbGQ7CgogICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAtMSkpIHsKICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnNvci5jb2x1bW4gPT09IDApIHsKICAgICAgICAgICAgaWYgKGN1cnNvci5yb3cgPiAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhjdXJzb3Iucm93IC0gMSwgdGhpcy5kb2MuZ2V0TGluZShjdXJzb3Iucm93IC0gMSkubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpOwogICAgICAgICAgICBpZiAodGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihjdXJzb3IsIHRhYlNpemUsIC0xKSAmJiAhdGhpcy5zZXNzaW9uLmdldE5hdmlnYXRlV2l0aGluU29mdFRhYnMoKSkgewogICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgLXRhYlNpemUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yQnkoMCwgLTEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMubW92ZUN1cnNvclJpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMubGVhZC5nZXRQb3NpdGlvbigpLAogICAgICAgICAgICBmb2xkOwogICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCAxKSkgewogICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRoaXMubGVhZC5jb2x1bW4gPT0gdGhpcy5kb2MuZ2V0TGluZSh0aGlzLmxlYWQucm93KS5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKHRoaXMubGVhZC5yb3cgPCB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDEpIHsKICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHRoaXMubGVhZC5yb3cgKyAxLCAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLnNlc3Npb24uZ2V0VGFiU2l6ZSgpOwogICAgICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5sZWFkOwogICAgICAgICAgICBpZiAodGhpcy53b3VsZE1vdmVJbnRvU29mdFRhYihjdXJzb3IsIHRhYlNpemUsIDEpICYmICF0aGlzLnNlc3Npb24uZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicygpKSB7CiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeSgwLCB0YWJTaXplKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckJ5KDAsIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMubW92ZUN1cnNvckxpbmVTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OwogICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uOwogICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblJvdyhyb3csIGNvbHVtbik7CiAgICAgICAgdmFyIGZpcnN0Q29sdW1uUG9zaXRpb24gPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgMCk7CiAgICAgICAgdmFyIGJlZm9yZUN1cnNvciA9IHRoaXMuc2Vzc2lvbi5nZXREaXNwbGF5TGluZSgKICAgICAgICAgICAgcm93LCBudWxsLCBmaXJzdENvbHVtblBvc2l0aW9uLnJvdywKICAgICAgICAgICAgZmlyc3RDb2x1bW5Qb3NpdGlvbi5jb2x1bW4KICAgICAgICApOwoKICAgICAgICB2YXIgbGVhZGluZ1NwYWNlID0gYmVmb3JlQ3Vyc29yLm1hdGNoKC9eXHMqLyk7CiAgICAgICAgaWYgKGxlYWRpbmdTcGFjZVswXS5sZW5ndGggIT0gY29sdW1uICYmICF0aGlzLnNlc3Npb24uJHVzZUVtYWNzU3R5bGVMaW5lU3RhcnQpCiAgICAgICAgICAgIGZpcnN0Q29sdW1uUG9zaXRpb24uY29sdW1uICs9IGxlYWRpbmdTcGFjZVswXS5sZW5ndGg7CiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihmaXJzdENvbHVtblBvc2l0aW9uKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JMaW5lRW5kID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmxlYWQ7CiAgICAgICAgdmFyIGxpbmVFbmQgPSB0aGlzLnNlc3Npb24uZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24obGVhZC5yb3csIGxlYWQuY29sdW1uKTsKICAgICAgICBpZiAodGhpcy5sZWFkLmNvbHVtbiA9PSBsaW5lRW5kLmNvbHVtbikgewogICAgICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGxpbmVFbmQucm93KTsKICAgICAgICAgICAgaWYgKGxpbmVFbmQuY29sdW1uID09IGxpbmUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YXIgdGV4dEVuZCA9IGxpbmUuc2VhcmNoKC9ccyskLyk7CiAgICAgICAgICAgICAgICBpZiAodGV4dEVuZCA+IDApCiAgICAgICAgICAgICAgICAgICAgbGluZUVuZC5jb2x1bW4gPSB0ZXh0RW5kOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhsaW5lRW5kLnJvdywgbGluZUVuZC5jb2x1bW4pOwogICAgfTsKICAgIHRoaXMubW92ZUN1cnNvckZpbGVFbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93ID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxOwogICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKHJvdykubGVuZ3RoOwogICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JGaWxlU3RhcnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbygwLCAwKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZFJpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7CiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHJpZ2h0T2ZDdXJzb3IgPSBsaW5lLnN1YnN0cmluZyhjb2x1bW4pOwoKICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOwogICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7CiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHJvdywgY29sdW1uLCAxKTsKICAgICAgICBpZiAoZm9sZCkgewogICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMocmlnaHRPZkN1cnNvcikpIHsKICAgICAgICAgICAgY29sdW1uICs9IHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmxhc3RJbmRleDsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDsKICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CiAgICAgICAgfQogICAgICAgIGlmIChjb2x1bW4gPj0gbGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclJpZ2h0KCk7CiAgICAgICAgICAgIGlmIChyb3cgPCB0aGlzLmRvYy5nZXRMZW5ndGgoKSAtIDEpCiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zZXNzaW9uLnRva2VuUmUuZXhlYyhyaWdodE9mQ3Vyc29yKSkgewogICAgICAgICAgICBjb2x1bW4gKz0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4OwogICAgICAgICAgICB0aGlzLnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocm93LCBjb2x1bW4pOwogICAgfTsKICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkTGVmdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByb3cgPSB0aGlzLmxlYWQucm93OwogICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmxlYWQuY29sdW1uOwogICAgICAgIHZhciBmb2xkOwogICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgLTEpKSB7CiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBzdHIgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZFN0cmluZ0F0KHJvdywgY29sdW1uLCAtMSk7CiAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7CiAgICAgICAgICAgIHN0ciA9IHRoaXMuZG9jLmdldExpbmUocm93KS5zdWJzdHJpbmcoMCwgY29sdW1uKTsKICAgICAgICB9CgogICAgICAgIHZhciBsZWZ0T2ZDdXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2Uoc3RyKTsKICAgICAgICB0aGlzLnNlc3Npb24ubm9uVG9rZW5SZS5sYXN0SW5kZXggPSAwOwogICAgICAgIHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleCA9IDA7CiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5ub25Ub2tlblJlLmV4ZWMobGVmdE9mQ3Vyc29yKSkgewogICAgICAgICAgICBjb2x1bW4gLT0gdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4OwogICAgICAgICAgICBsZWZ0T2ZDdXJzb3IgPSBsZWZ0T2ZDdXJzb3Iuc2xpY2UodGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4KTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm5vblRva2VuUmUubGFzdEluZGV4ID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbHVtbiA8PSAwKSB7CiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgMCk7CiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckxlZnQoKTsKICAgICAgICAgICAgaWYgKHJvdyA+IDApCiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JXb3JkTGVmdCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKGxlZnRPZkN1cnNvcikpIHsKICAgICAgICAgICAgY29sdW1uIC09IHRoaXMuc2Vzc2lvbi50b2tlblJlLmxhc3RJbmRleDsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4ID0gMDsKICAgICAgICB9CgogICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKICAgIH07CgogICAgdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXggPSBmdW5jdGlvbihyaWdodE9mQ3Vyc29yKSB7CiAgICAgICAgdmFyIGluZGV4ID0gMCwgY2g7CiAgICAgICAgdmFyIHdoaXRlc3BhY2VSZSA9IC9ccy87CiAgICAgICAgdmFyIHRva2VuUmUgPSB0aGlzLnNlc3Npb24udG9rZW5SZTsKCiAgICAgICAgdG9rZW5SZS5sYXN0SW5kZXggPSAwOwogICAgICAgIGlmICh0aGlzLnNlc3Npb24udG9rZW5SZS5leGVjKHJpZ2h0T2ZDdXJzb3IpKSB7CiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5zZXNzaW9uLnRva2VuUmUubGFzdEluZGV4OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJlLnRlc3QoY2gpKQogICAgICAgICAgICAgICAgaW5kZXggKys7CgogICAgICAgICAgICBpZiAoaW5kZXggPCAxKSB7CiAgICAgICAgICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHJpZ2h0T2ZDdXJzb3JbaW5kZXhdKSAmJiAhdG9rZW5SZS50ZXN0KGNoKSkgewogICAgICAgICAgICAgICAgICAgIHRva2VuUmUubGFzdEluZGV4ID0gMDsKICAgICAgICAgICAgICAgICAgICBpbmRleCArKzsKICAgICAgICAgICAgICAgICAgICBpZiAod2hpdGVzcGFjZVJlLnRlc3QoY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSByaWdodE9mQ3Vyc29yW2luZGV4XSkgJiYgd2hpdGVzcGFjZVJlLnRlc3QoY2gpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0b2tlblJlLmxhc3RJbmRleCA9IDA7CgogICAgICAgIHJldHVybiBpbmRleDsKICAgIH07CgogICAgdGhpcy5tb3ZlQ3Vyc29yU2hvcnRXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93ID0gdGhpcy5sZWFkLnJvdzsKICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5sZWFkLmNvbHVtbjsKICAgICAgICB2YXIgbGluZSA9IHRoaXMuZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgcmlnaHRPZkN1cnNvciA9IGxpbmUuc3Vic3RyaW5nKGNvbHVtbik7CgogICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7CiAgICAgICAgaWYgKGZvbGQpCiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVDdXJzb3JUbyhmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbik7CgogICAgICAgIGlmIChjb2x1bW4gPT0gbGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGwgPSB0aGlzLmRvYy5nZXRMZW5ndGgoKTsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgcm93Kys7CiAgICAgICAgICAgICAgICByaWdodE9mQ3Vyc29yID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAgICAgICAgICB9IHdoaWxlIChyb3cgPCBsICYmIC9eXHMqJC8udGVzdChyaWdodE9mQ3Vyc29yKSk7CgogICAgICAgICAgICBpZiAoIS9eXHMrLy50ZXN0KHJpZ2h0T2ZDdXJzb3IpKQogICAgICAgICAgICAgICAgcmlnaHRPZkN1cnNvciA9ICIiOwogICAgICAgICAgICBjb2x1bW4gPSAwOwogICAgICAgIH0KCiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgocmlnaHRPZkN1cnNvcik7CgogICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uICsgaW5kZXgpOwogICAgfTsKCiAgICB0aGlzLm1vdmVDdXJzb3JTaG9ydFdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvdyA9IHRoaXMubGVhZC5yb3c7CiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMubGVhZC5jb2x1bW47CgogICAgICAgIHZhciBmb2xkOwogICAgICAgIGlmIChmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgLTEpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5tb3ZlQ3Vyc29yVG8oZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsKCiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3cpLnN1YnN0cmluZygwLCBjb2x1bW4pOwogICAgICAgIGlmIChjb2x1bW4gPT09IDApIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgICAgICBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAgICAgICAgICB9IHdoaWxlIChyb3cgPiAwICYmIC9eXHMqJC8udGVzdChsaW5lKSk7CgogICAgICAgICAgICBjb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICAgICAgaWYgKCEvXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIGxpbmUgPSAiIjsKICAgICAgICB9CgogICAgICAgIHZhciBsZWZ0T2ZDdXJzb3IgPSBsYW5nLnN0cmluZ1JldmVyc2UobGluZSk7CiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy4kc2hvcnRXb3JkRW5kSW5kZXgobGVmdE9mQ3Vyc29yKTsKCiAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvKHJvdywgY29sdW1uIC0gaW5kZXgpOwogICAgfTsKCiAgICB0aGlzLm1vdmVDdXJzb3JXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMpCiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvckxvbmdXb3JkUmlnaHQoKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZFJpZ2h0KCk7CiAgICB9OwoKICAgIHRoaXMubW92ZUN1cnNvcldvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzKQogICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JMb25nV29yZExlZnQoKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclNob3J0V29yZExlZnQoKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JCeSA9IGZ1bmN0aW9uKHJvd3MsIGNoYXJzKSB7CiAgICAgICAgdmFyIHNjcmVlblBvcyA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24oCiAgICAgICAgICAgIHRoaXMubGVhZC5yb3csCiAgICAgICAgICAgIHRoaXMubGVhZC5jb2x1bW4KICAgICAgICApOwoKICAgICAgICB2YXIgb2Zmc2V0WDsKCiAgICAgICAgaWYgKGNoYXJzID09PSAwKSB7CiAgICAgICAgICAgIGlmIChyb3dzICE9PSAwKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc0JpZGlSb3coc2NyZWVuUG9zLnJvdywgdGhpcy5sZWFkLnJvdykpIHsKICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5nZXRQb3NMZWZ0KHNjcmVlblBvcy5jb2x1bW4pOwogICAgICAgICAgICAgICAgICAgIHNjcmVlblBvcy5jb2x1bW4gPSBNYXRoLnJvdW5kKG9mZnNldFggLyB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmNoYXJXaWR0aHNbMF0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBvZmZzZXRYID0gc2NyZWVuUG9zLmNvbHVtbiAqIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuY2hhcldpZHRoc1swXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHRoaXMuJGRlc2lyZWRDb2x1bW4pCiAgICAgICAgICAgICAgICBzY3JlZW5Qb3MuY29sdW1uID0gdGhpcy4kZGVzaXJlZENvbHVtbjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IHNjcmVlblBvcy5jb2x1bW47CiAgICAgICAgfQoKICAgICAgICB2YXIgZG9jUG9zID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Qb3Mucm93ICsgcm93cywgc2NyZWVuUG9zLmNvbHVtbiwgb2Zmc2V0WCk7CiAgICAgICAgCiAgICAgICAgaWYgKHJvd3MgIT09IDAgJiYgY2hhcnMgPT09IDAgJiYgZG9jUG9zLnJvdyA9PT0gdGhpcy5sZWFkLnJvdyAmJiBkb2NQb3MuY29sdW1uID09PSB0aGlzLmxlYWQuY29sdW1uKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24ubGluZVdpZGdldHMgJiYgdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzW2RvY1Bvcy5yb3ddKSB7CiAgICAgICAgICAgICAgICBpZiAoZG9jUG9zLnJvdyA+IDAgfHwgcm93cyA+IDApCiAgICAgICAgICAgICAgICAgICAgZG9jUG9zLnJvdysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGRvY1Bvcy5yb3csIGRvY1Bvcy5jb2x1bW4gKyBjaGFycywgY2hhcnMgPT09IDApOwogICAgfTsKICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBrZWVwRGVzaXJlZENvbHVtbikgewogICAgICAgIHZhciBmb2xkID0gdGhpcy5zZXNzaW9uLmdldEZvbGRBdChyb3csIGNvbHVtbiwgMSk7CiAgICAgICAgaWYgKGZvbGQpIHsKICAgICAgICAgICAgcm93ID0gZm9sZC5zdGFydC5yb3c7CiAgICAgICAgICAgIGNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOwogICAgICAgIH0KCiAgICAgICAgdGhpcy4ka2VlcERlc2lyZWRDb2x1bW5PbkNoYW5nZSA9IHRydWU7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIGlmICgvW1x1REMwMC1cdURGRkZdLy50ZXN0KGxpbmUuY2hhckF0KGNvbHVtbikpICYmIGxpbmUuY2hhckF0KGNvbHVtbiAtIDEpKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmxlYWQucm93ID09IHJvdyAmJiB0aGlzLmxlYWQuY29sdW1uID09IGNvbHVtbiArIDEpCiAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gLSAxOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4gKyAxOwogICAgICAgIH0KICAgICAgICB0aGlzLmxlYWQuc2V0UG9zaXRpb24ocm93LCBjb2x1bW4pOwogICAgICAgIHRoaXMuJGtlZXBEZXNpcmVkQ29sdW1uT25DaGFuZ2UgPSBmYWxzZTsKCiAgICAgICAgaWYgKCFrZWVwRGVzaXJlZENvbHVtbikKICAgICAgICAgICAgdGhpcy4kZGVzaXJlZENvbHVtbiA9IG51bGw7CiAgICB9OwogICAgdGhpcy5tb3ZlQ3Vyc29yVG9TY3JlZW4gPSBmdW5jdGlvbihyb3csIGNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pIHsKICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihyb3csIGNvbHVtbik7CiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG8ocG9zLnJvdywgcG9zLmNvbHVtbiwga2VlcERlc2lyZWRDb2x1bW4pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5sZWFkLmRldGFjaCgpOwogICAgICAgIHRoaXMuYW5jaG9yLmRldGFjaCgpOwogICAgICAgIHRoaXMuc2Vzc2lvbiA9IHRoaXMuZG9jID0gbnVsbDsKICAgIH07CgogICAgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmFuZ2UuY3Vyc29yID09IHJhbmdlLnN0YXJ0KTsKICAgICAgICB0aGlzLiRkZXNpcmVkQ29sdW1uID0gcmFuZ2UuZGVzaXJlZENvbHVtbiB8fCB0aGlzLiRkZXNpcmVkQ29sdW1uOwogICAgfTsKCiAgICB0aGlzLnRvT3JpZW50ZWRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHIgPSB0aGlzLmdldFJhbmdlKCk7CiAgICAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHIuc3RhcnQuY29sdW1uOwogICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSByLnN0YXJ0LnJvdzsKICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IHIuZW5kLmNvbHVtbjsKICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9IHIuZW5kLnJvdzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByYW5nZSA9IHI7CiAgICAgICAgfQoKICAgICAgICByYW5nZS5jdXJzb3IgPSB0aGlzLmlzQmFja3dhcmRzKCkgPyByYW5nZS5zdGFydCA6IHJhbmdlLmVuZDsKICAgICAgICByYW5nZS5kZXNpcmVkQ29sdW1uID0gdGhpcy4kZGVzaXJlZENvbHVtbjsKICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICB9OwogICAgdGhpcy5nZXRSYW5nZU9mTW92ZW1lbnRzID0gZnVuY3Rpb24oZnVuYykgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuZ2V0Q3Vyc29yKCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZnVuYyh0aGlzKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHRoaXMuZ2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgc3RhcnQpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc3RhcnQpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy50b0pTT04gPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50KSB7CiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5yYW5nZXMubWFwKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgIHZhciByMSA9IHIuY2xvbmUoKTsKICAgICAgICAgICAgICAgIHIxLmlzQmFja3dhcmRzID0gci5jdXJzb3IgPT0gci5zdGFydDsKICAgICAgICAgICAgICAgIHJldHVybiByMTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFJhbmdlKCk7CiAgICAgICAgICAgIGRhdGEuaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRhOwogICAgfTsKCiAgICB0aGlzLmZyb21KU09OID0gZnVuY3Rpb24oZGF0YSkgewogICAgICAgIGlmIChkYXRhLnN0YXJ0ID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAodGhpcy5yYW5nZUxpc3QgJiYgZGF0YS5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICB0aGlzLnRvU2luZ2xlUmFuZ2UoZGF0YVswXSk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gZGF0YS5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBSYW5nZS5mcm9tUG9pbnRzKGRhdGFbaV0uc3RhcnQsIGRhdGFbaV0uZW5kKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXS5pc0JhY2t3YXJkcykKICAgICAgICAgICAgICAgICAgICAgICAgci5jdXJzb3IgPSByLnN0YXJ0OwogICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UociwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5yYW5nZUxpc3QpCiAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZShkYXRhKTsKICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKGRhdGEsIGRhdGEuaXNCYWNrd2FyZHMpOwogICAgfTsKCiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgaWYgKChkYXRhLmxlbmd0aCB8fCB0aGlzLnJhbmdlQ291bnQpICYmIGRhdGEubGVuZ3RoICE9IHRoaXMucmFuZ2VDb3VudCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmICghZGF0YS5sZW5ndGggfHwgIXRoaXMucmFuZ2VzKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZSgpLmlzRXF1YWwoZGF0YSk7CgogICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnJhbmdlcy5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5yYW5nZXNbaV0uaXNFcXVhbChkYXRhW2ldKSkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwoKfSkuY2FsbChTZWxlY3Rpb24ucHJvdG90eXBlKTsKCmV4cG9ydHMuU2VsZWN0aW9uID0gU2VsZWN0aW9uOwp9KTsKCmRlZmluZSgiYWNlL3Rva2VuaXplciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9jb25maWciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwp2YXIgTUFYX1RPS0VOX0NPVU5UID0gMjAwMDsKdmFyIFRva2VuaXplciA9IGZ1bmN0aW9uKHJ1bGVzKSB7CiAgICB0aGlzLnN0YXRlcyA9IHJ1bGVzOwoKICAgIHRoaXMucmVnRXhwcyA9IHt9OwogICAgdGhpcy5tYXRjaE1hcHBpbmdzID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zdGF0ZXMpIHsKICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlc1trZXldOwogICAgICAgIHZhciBydWxlUmVnRXhwcyA9IFtdOwogICAgICAgIHZhciBtYXRjaFRvdGFsID0gMDsKICAgICAgICB2YXIgbWFwcGluZyA9IHRoaXMubWF0Y2hNYXBwaW5nc1trZXldID0ge2RlZmF1bHRUb2tlbjogInRleHQifTsKICAgICAgICB2YXIgZmxhZyA9ICJnIjsKCiAgICAgICAgdmFyIHNwbGl0dGVyUnVybGVzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcnVsZSA9IHN0YXRlW2ldOwogICAgICAgICAgICBpZiAocnVsZS5kZWZhdWx0VG9rZW4pCiAgICAgICAgICAgICAgICBtYXBwaW5nLmRlZmF1bHRUb2tlbiA9IHJ1bGUuZGVmYXVsdFRva2VuOwogICAgICAgICAgICBpZiAocnVsZS5jYXNlSW5zZW5zaXRpdmUpCiAgICAgICAgICAgICAgICBmbGFnID0gImdpIjsKICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggPT0gbnVsbCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKHJ1bGUucmVnZXggaW5zdGFuY2VvZiBSZWdFeHApCiAgICAgICAgICAgICAgICBydWxlLnJlZ2V4ID0gcnVsZS5yZWdleC50b1N0cmluZygpLnNsaWNlKDEsIC0xKTsKICAgICAgICAgICAgdmFyIGFkanVzdGVkcmVnZXggPSBydWxlLnJlZ2V4OwogICAgICAgICAgICB2YXIgbWF0Y2hjb3VudCA9IG5ldyBSZWdFeHAoIig/OigiICsgYWRqdXN0ZWRyZWdleCArICIpfCguKSkiKS5leGVjKCJhIikubGVuZ3RoIC0gMjsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVsZS50b2tlbikpIHsKICAgICAgICAgICAgICAgIGlmIChydWxlLnRva2VuLmxlbmd0aCA9PSAxIHx8IG1hdGNoY291bnQgPT0gMSkgewogICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGNvdW50IC0gMSAhPSBydWxlLnRva2VuLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0RXJyb3IoIm51bWJlciBvZiBjbGFzc2VzIGFuZCByZWdleHAgZ3JvdXBzIGRvZXNuJ3QgbWF0Y2giLCB7IAogICAgICAgICAgICAgICAgICAgICAgICBydWxlOiBydWxlLAogICAgICAgICAgICAgICAgICAgICAgICBncm91cENvdW50OiBtYXRjaGNvdW50IC0gMQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBydWxlLnRva2VuWzBdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBydWxlLnRva2VuQXJyYXkgPSBydWxlLnRva2VuOwogICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSBudWxsOwogICAgICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IHRoaXMuJGFycmF5VG9rZW5zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBydWxlLnRva2VuID09ICJmdW5jdGlvbiIgJiYgIXJ1bGUub25NYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoY291bnQgPiAxKQogICAgICAgICAgICAgICAgICAgIHJ1bGUub25NYXRjaCA9IHRoaXMuJGFwcGx5VG9rZW47CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcnVsZS5vbk1hdGNoID0gcnVsZS50b2tlbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG1hdGNoY291bnQgPiAxKSB7CiAgICAgICAgICAgICAgICBpZiAoL1xcXGQvLnRlc3QocnVsZS5yZWdleCkpIHsKICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gcnVsZS5yZWdleC5yZXBsYWNlKC9cXChbMC05XSspL2csIGZ1bmN0aW9uKG1hdGNoLCBkaWdpdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlxcIiArIChwYXJzZUludChkaWdpdCwgMTApICsgbWF0Y2hUb3RhbCArIDEpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtYXRjaGNvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZHJlZ2V4ID0gdGhpcy5yZW1vdmVDYXB0dXJpbmdHcm91cHMocnVsZS5yZWdleCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXJ1bGUuc3BsaXRSZWdleCAmJiB0eXBlb2YgcnVsZS50b2tlbiAhPSAic3RyaW5nIikKICAgICAgICAgICAgICAgICAgICBzcGxpdHRlclJ1cmxlcy5wdXNoKHJ1bGUpOyAvLyBmbGFnIHdpbGwgYmUga25vd24gb25seSBhdCB0aGUgdmVyeSBlbmQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbWFwcGluZ1ttYXRjaFRvdGFsXSA9IGk7CiAgICAgICAgICAgIG1hdGNoVG90YWwgKz0gbWF0Y2hjb3VudDsKCiAgICAgICAgICAgIHJ1bGVSZWdFeHBzLnB1c2goYWRqdXN0ZWRyZWdleCk7CiAgICAgICAgICAgIGlmICghcnVsZS5vbk1hdGNoKQogICAgICAgICAgICAgICAgcnVsZS5vbk1hdGNoID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKCFydWxlUmVnRXhwcy5sZW5ndGgpIHsKICAgICAgICAgICAgbWFwcGluZ1swXSA9IDA7CiAgICAgICAgICAgIHJ1bGVSZWdFeHBzLnB1c2goIiQiKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc3BsaXR0ZXJSdXJsZXMuZm9yRWFjaChmdW5jdGlvbihydWxlKSB7CiAgICAgICAgICAgIHJ1bGUuc3BsaXRSZWdleCA9IHRoaXMuY3JlYXRlU3BsaXR0ZXJSZWdleHAocnVsZS5yZWdleCwgZmxhZyk7CiAgICAgICAgfSwgdGhpcyk7CgogICAgICAgIHRoaXMucmVnRXhwc1trZXldID0gbmV3IFJlZ0V4cCgiKCIgKyBydWxlUmVnRXhwcy5qb2luKCIpfCgiKSArICIpfCgkKSIsIGZsYWcpOwogICAgfQp9OwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy4kc2V0TWF4VG9rZW5Db3VudCA9IGZ1bmN0aW9uKG0pIHsKICAgICAgICBNQVhfVE9LRU5fQ09VTlQgPSBtIHwgMDsKICAgIH07CiAgICAKICAgIHRoaXMuJGFwcGx5VG9rZW4gPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5zcGxpdFJlZ2V4LmV4ZWMoc3RyKS5zbGljZSgxKTsKICAgICAgICB2YXIgdHlwZXMgPSB0aGlzLnRva2VuLmFwcGx5KHRoaXMsIHZhbHVlcyk7CiAgICAgICAgaWYgKHR5cGVvZiB0eXBlcyA9PT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHR5cGVzLCB2YWx1ZTogc3RyfV07CgogICAgICAgIHZhciB0b2tlbnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHR5cGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICBpZiAodmFsdWVzW2ldKQogICAgICAgICAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGhdID0gewogICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiB0b2tlbnM7CiAgICB9OwoKICAgIHRoaXMuJGFycmF5VG9rZW5zID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgaWYgKCFzdHIpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5zcGxpdFJlZ2V4LmV4ZWMoc3RyKTsKICAgICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgICAgcmV0dXJuICJ0ZXh0IjsKICAgICAgICB2YXIgdG9rZW5zID0gW107CiAgICAgICAgdmFyIHR5cGVzID0gdGhpcy50b2tlbkFycmF5OwogICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gdHlwZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh2YWx1ZXNbaSArIDFdKQogICAgICAgICAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGhdID0gewogICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzW2ldLAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaSArIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9rZW5zOwogICAgfTsKCiAgICB0aGlzLnJlbW92ZUNhcHR1cmluZ0dyb3VwcyA9IGZ1bmN0aW9uKHNyYykgewogICAgICAgIHZhciByID0gc3JjLnJlcGxhY2UoCiAgICAgICAgICAgIC9cXC58XFsoPzpcXC58W15cXFxdXSkqfFwoXD9bOj0hXXwoXCgpL2csCiAgICAgICAgICAgIGZ1bmN0aW9uKHgsIHkpIHtyZXR1cm4geSA/ICIoPzoiIDogeDt9CiAgICAgICAgKTsKICAgICAgICByZXR1cm4gcjsKICAgIH07CgogICAgdGhpcy5jcmVhdGVTcGxpdHRlclJlZ2V4cCA9IGZ1bmN0aW9uKHNyYywgZmxhZykgewogICAgICAgIGlmIChzcmMuaW5kZXhPZigiKD89IikgIT0gLTEpIHsKICAgICAgICAgICAgdmFyIHN0YWNrID0gMDsKICAgICAgICAgICAgdmFyIGluQ2hDbGFzcyA9IGZhbHNlOwogICAgICAgICAgICB2YXIgbGFzdENhcHR1cmUgPSB7fTsKICAgICAgICAgICAgc3JjLnJlcGxhY2UoLyhcXC4pfChcKCg/Olw/Wz0hXSk/KXwoXCkpfChbXFtcXV0pL2csIGZ1bmN0aW9uKAogICAgICAgICAgICAgICAgbSwgZXNjLCBwYXJlbk9wZW4sIHBhcmVuQ2xvc2UsIHNxdWFyZSwgaW5kZXgKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBpZiAoaW5DaENsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgaW5DaENsYXNzID0gc3F1YXJlICE9ICJdIjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3F1YXJlKSB7CiAgICAgICAgICAgICAgICAgICAgaW5DaENsYXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW5DbG9zZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjayA9PSBsYXN0Q2FwdHVyZS5zdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2FwdHVyZS5lbmQgPSBpbmRleCsxOwogICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2FwdHVyZS5zdGFjayA9IC0xOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzdGFjay0tOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbk9wZW4pIHsKICAgICAgICAgICAgICAgICAgICBzdGFjaysrOwogICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbk9wZW4ubGVuZ3RoICE9IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENhcHR1cmUuc3RhY2sgPSBzdGFjazsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENhcHR1cmUuc3RhcnQgPSBpbmRleDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAobGFzdENhcHR1cmUuZW5kICE9IG51bGwgJiYgL15cKSokLy50ZXN0KHNyYy5zdWJzdHIobGFzdENhcHR1cmUuZW5kKSkpCiAgICAgICAgICAgICAgICBzcmMgPSBzcmMuc3Vic3RyaW5nKDAsIGxhc3RDYXB0dXJlLnN0YXJ0KSArIHNyYy5zdWJzdHIobGFzdENhcHR1cmUuZW5kKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNyYy5jaGFyQXQoMCkgIT0gIl4iKSBzcmMgPSAiXiIgKyBzcmM7CiAgICAgICAgaWYgKHNyYy5jaGFyQXQoc3JjLmxlbmd0aCAtIDEpICE9ICIkIikgc3JjICs9ICIkIjsKICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzcmMsIChmbGFnfHwiIikucmVwbGFjZSgiZyIsICIiKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lVG9rZW5zID0gZnVuY3Rpb24obGluZSwgc3RhcnRTdGF0ZSkgewogICAgICAgIGlmIChzdGFydFN0YXRlICYmIHR5cGVvZiBzdGFydFN0YXRlICE9ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHZhciBzdGFjayA9IHN0YXJ0U3RhdGUuc2xpY2UoMCk7CiAgICAgICAgICAgIHN0YXJ0U3RhdGUgPSBzdGFja1swXTsKICAgICAgICAgICAgaWYgKHN0YXJ0U3RhdGUgPT09ICIjdG1wIikgewogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgIHN0YXJ0U3RhdGUgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHZhciBzdGFjayA9IFtdOwoKICAgICAgICB2YXIgY3VycmVudFN0YXRlID0gc3RhcnRTdGF0ZSB8fCAic3RhcnQiOwogICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07CiAgICAgICAgaWYgKCFzdGF0ZSkgewogICAgICAgICAgICBjdXJyZW50U3RhdGUgPSAic3RhcnQiOwogICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07CiAgICAgICAgfQogICAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5tYXRjaE1hcHBpbmdzW2N1cnJlbnRTdGF0ZV07CiAgICAgICAgdmFyIHJlID0gdGhpcy5yZWdFeHBzW2N1cnJlbnRTdGF0ZV07CiAgICAgICAgcmUubGFzdEluZGV4ID0gMDsKCiAgICAgICAgdmFyIG1hdGNoLCB0b2tlbnMgPSBbXTsKICAgICAgICB2YXIgbGFzdEluZGV4ID0gMDsKICAgICAgICB2YXIgbWF0Y2hBdHRlbXB0cyA9IDA7CgogICAgICAgIHZhciB0b2tlbiA9IHt0eXBlOiBudWxsLCB2YWx1ZTogIiJ9OwoKICAgICAgICB3aGlsZSAobWF0Y2ggPSByZS5leGVjKGxpbmUpKSB7CiAgICAgICAgICAgIHZhciB0eXBlID0gbWFwcGluZy5kZWZhdWx0VG9rZW47CiAgICAgICAgICAgIHZhciBydWxlID0gbnVsbDsKICAgICAgICAgICAgdmFyIHZhbHVlID0gbWF0Y2hbMF07CiAgICAgICAgICAgIHZhciBpbmRleCA9IHJlLmxhc3RJbmRleDsKCiAgICAgICAgICAgIGlmIChpbmRleCAtIHZhbHVlLmxlbmd0aCA+IGxhc3RJbmRleCkgewogICAgICAgICAgICAgICAgdmFyIHNraXBwZWQgPSBsaW5lLnN1YnN0cmluZyhsYXN0SW5kZXgsIGluZGV4IC0gdmFsdWUubGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IHR5cGUpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSBza2lwcGVkOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwogICAgICAgICAgICAgICAgICAgIHRva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiBza2lwcGVkfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaC5sZW5ndGgtMjsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbaSArIDFdID09PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgcnVsZSA9IHN0YXRlW21hcHBpbmdbaV1dOwoKICAgICAgICAgICAgICAgIGlmIChydWxlLm9uTWF0Y2gpCiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHJ1bGUub25NYXRjaCh2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaywgbGluZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHJ1bGUudG9rZW47CgogICAgICAgICAgICAgICAgaWYgKHJ1bGUubmV4dCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZS5uZXh0ID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHJ1bGUubmV4dDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBydWxlLm5leHQoY3VycmVudFN0YXRlLCBzdGFjayk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZXNbY3VycmVudFN0YXRlXTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0RXJyb3IoInN0YXRlIGRvZXNuJ3QgZXhpc3QiLCBjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGVzW2N1cnJlbnRTdGF0ZV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLm1hdGNoTWFwcGluZ3NbY3VycmVudFN0YXRlXTsKICAgICAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSBpbmRleDsKICAgICAgICAgICAgICAgICAgICByZSA9IHRoaXMucmVnRXhwc1tjdXJyZW50U3RhdGVdOwogICAgICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHJ1bGUuY29uc3VtZUxpbmVFbmQpCiAgICAgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCghcnVsZSB8fCBydWxlLm1lcmdlICE9PSBmYWxzZSkgJiYgdG9rZW4udHlwZSA9PT0gdHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi52YWx1ZSArPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB7dHlwZTogdHlwZSwgdmFsdWU6IHZhbHVlfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwogICAgICAgICAgICAgICAgICAgIHRva2VuID0ge3R5cGU6IG51bGwsIHZhbHVlOiAiIn07CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlLmxlbmd0aDsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh0eXBlW2ldKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA9PSBsaW5lLmxlbmd0aCkKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgbGFzdEluZGV4ID0gaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hBdHRlbXB0cysrID4gTUFYX1RPS0VOX0NPVU5UKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hBdHRlbXB0cyA+IDIgKiBsaW5lLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0RXJyb3IoImluZmluaXRlIGxvb3Agd2l0aCBpbiBhY2UgdG9rZW5pemVyIiwgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFydFN0YXRlOiBzdGFydFN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAobGFzdEluZGV4IDwgbGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwogICAgICAgICAgICAgICAgICAgIHRva2VuID0gewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbGluZS5zdWJzdHJpbmcobGFzdEluZGV4LCBsYXN0SW5kZXggKz0gNTAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogIm92ZXJmbG93IgogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc3RhY2sgPSBbXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAodG9rZW4udHlwZSkKICAgICAgICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwogICAgICAgIAogICAgICAgIGlmIChzdGFjay5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGlmIChzdGFja1swXSAhPT0gY3VycmVudFN0YXRlKQogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgiI3RtcCIsIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRva2VucyA6IHRva2VucywKICAgICAgICAgICAgc3RhdGUgOiBzdGFjay5sZW5ndGggPyBzdGFjayA6IGN1cnJlbnRTdGF0ZQogICAgICAgIH07CiAgICB9OwogICAgCiAgICB0aGlzLnJlcG9ydEVycm9yID0gY29uZmlnLnJlcG9ydEVycm9yOwogICAgCn0pLmNhbGwoVG9rZW5pemVyLnByb3RvdHlwZSk7CgpleHBvcnRzLlRva2VuaXplciA9IFRva2VuaXplcjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7Cgp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgICAgICByZWdleCA6ICdeJCcKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJ0ZXh0IgogICAgICAgIH1dCiAgICB9Owp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuYWRkUnVsZXMgPSBmdW5jdGlvbihydWxlcywgcHJlZml4KSB7CiAgICAgICAgaWYgKCFwcmVmaXgpIHsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJ1bGVzKQogICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNba2V5XSA9IHJ1bGVzW2tleV07CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIga2V5IGluIHJ1bGVzKSB7CiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHJ1bGVzW2tleV07CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVbaV07CiAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0IHx8IHJ1bGUub25NYXRjaCkgewogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZS5uZXh0ID09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLm5leHQuaW5kZXhPZihwcmVmaXgpICE9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcHJlZml4ICsgcnVsZS5uZXh0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5uZXh0U3RhdGUgJiYgcnVsZS5uZXh0U3RhdGUuaW5kZXhPZihwcmVmaXgpICE9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICBydWxlLm5leHRTdGF0ZSA9IHByZWZpeCArIHJ1bGUubmV4dFN0YXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJHJ1bGVzW3ByZWZpeCArIGtleV0gPSBzdGF0ZTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZ2V0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kcnVsZXM7CiAgICB9OwoKICAgIHRoaXMuZW1iZWRSdWxlcyA9IGZ1bmN0aW9uIChIaWdobGlnaHRSdWxlcywgcHJlZml4LCBlc2NhcGVSdWxlcywgc3RhdGVzLCBhcHBlbmQpIHsKICAgICAgICB2YXIgZW1iZWRSdWxlcyA9IHR5cGVvZiBIaWdobGlnaHRSdWxlcyA9PSAiZnVuY3Rpb24iCiAgICAgICAgICAgID8gbmV3IEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKQogICAgICAgICAgICA6IEhpZ2hsaWdodFJ1bGVzOwogICAgICAgIGlmIChzdGF0ZXMpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZXMubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICBzdGF0ZXNbaV0gPSBwcmVmaXggKyBzdGF0ZXNbaV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGVzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBlbWJlZFJ1bGVzKQogICAgICAgICAgICAgICAgc3RhdGVzLnB1c2gocHJlZml4ICsga2V5KTsKICAgICAgICB9CgogICAgICAgIHRoaXMuYWRkUnVsZXMoZW1iZWRSdWxlcywgcHJlZml4KTsKCiAgICAgICAgaWYgKGVzY2FwZVJ1bGVzKSB7CiAgICAgICAgICAgIHZhciBhZGRSdWxlcyA9IEFycmF5LnByb3RvdHlwZVthcHBlbmQgPyAicHVzaCIgOiAidW5zaGlmdCJdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlcy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgICAgIGFkZFJ1bGVzLmFwcGx5KHRoaXMuJHJ1bGVzW3N0YXRlc1tpXV0sIGxhbmcuZGVlcENvcHkoZXNjYXBlUnVsZXMpKTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy4kZW1iZWRzKQogICAgICAgICAgICB0aGlzLiRlbWJlZHMgPSBbXTsKICAgICAgICB0aGlzLiRlbWJlZHMucHVzaChwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLmdldEVtYmVkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRlbWJlZHM7CiAgICB9OwoKICAgIHZhciBwdXNoU3RhdGUgPSBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSAic3RhcnQiIHx8IHN0YWNrLmxlbmd0aCkKICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHRTdGF0ZSwgY3VycmVudFN0YXRlKTsKICAgICAgICByZXR1cm4gdGhpcy5uZXh0U3RhdGU7CiAgICB9OwogICAgdmFyIHBvcFN0YXRlID0gZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgcmV0dXJuIHN0YWNrLnNoaWZ0KCkgfHwgInN0YXJ0IjsKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBpZCA9IDA7CiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy4kcnVsZXM7CiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1N0YXRlKGtleSkgewogICAgICAgICAgICB2YXIgc3RhdGUgPSBydWxlc1trZXldOwogICAgICAgICAgICBzdGF0ZS5wcm9jZXNzZWQgPSB0cnVlOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IHN0YXRlW2ldOwogICAgICAgICAgICAgICAgdmFyIHRvSW5zZXJ0ID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7CiAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQgPSBydWxlOwogICAgICAgICAgICAgICAgICAgIHJ1bGUgPSB7fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghcnVsZS5yZWdleCAmJiBydWxlLnN0YXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgcnVsZS5yZWdleCA9IHJ1bGUuc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFydWxlLm5leHQpCiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IFtdOwogICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dC5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiBydWxlLnRva2VuCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogcnVsZS50b2tlbiArICIuZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IHJ1bGUuZW5kIHx8IHJ1bGUuc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IHJ1bGUudG9rZW4gKyAiLnN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICBydWxlLnB1c2ggPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIG5leHQgPSBydWxlLm5leHQgfHwgcnVsZS5wdXNoOwogICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgQXJyYXkuaXNBcnJheShuZXh0KSkgewogICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZU5hbWUgPSBydWxlLnN0YXRlTmFtZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlTmFtZSkgIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lID0gcnVsZS50b2tlbjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZU5hbWUgIT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUgPSBzdGF0ZU5hbWVbMF0gfHwgIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlc1tzdGF0ZU5hbWVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lICs9IGlkKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJ1bGVzW3N0YXRlTmFtZV0gPSBuZXh0OwogICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHN0YXRlTmFtZTsKICAgICAgICAgICAgICAgICAgICBwcm9jZXNzU3RhdGUoc3RhdGVOYW1lKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmV4dCA9PSAicG9wIikgewogICAgICAgICAgICAgICAgICAgIHJ1bGUubmV4dCA9IHBvcFN0YXRlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChydWxlLnB1c2gpIHsKICAgICAgICAgICAgICAgICAgICBydWxlLm5leHRTdGF0ZSA9IHJ1bGUubmV4dCB8fCBydWxlLnB1c2g7CiAgICAgICAgICAgICAgICAgICAgcnVsZS5uZXh0ID0gcHVzaFN0YXRlOwogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBydWxlLnB1c2g7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHJ1bGUucnVsZXMpIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByIGluIHJ1bGUucnVsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bGVzW3JdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnVsZXNbcl0ucHVzaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlc1tyXS5wdXNoLmFwcGx5KHJ1bGVzW3JdLCBydWxlLnJ1bGVzW3JdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzW3JdID0gcnVsZS5ydWxlc1tyXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBpbmNsdWRlTmFtZSA9IHR5cGVvZiBydWxlID09ICJzdHJpbmciID8gcnVsZSA6IHJ1bGUuaW5jbHVkZTsKICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlTmFtZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGluY2x1ZGVOYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQgPSBpbmNsdWRlTmFtZS5tYXAoZnVuY3Rpb24oeCkgeyByZXR1cm4gcnVsZXNbeF07IH0pOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQgPSBydWxlc1tpbmNsdWRlTmFtZV07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRvSW5zZXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbaSwgMV0uY29uY2F0KHRvSW5zZXJ0KTsKICAgICAgICAgICAgICAgICAgICBpZiAocnVsZS5ub0VzY2FwZSkKICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uKHgpIHtyZXR1cm4gIXgubmV4dDt9KTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zcGxpY2UuYXBwbHkoc3RhdGUsIGFyZ3MpOwogICAgICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHJ1bGUua2V5d29yZE1hcCkgewogICAgICAgICAgICAgICAgICAgIHJ1bGUudG9rZW4gPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoCiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUua2V5d29yZE1hcCwgcnVsZS5kZWZhdWx0VG9rZW4gfHwgInRleHQiLCBydWxlLmNhc2VJbnNlbnNpdGl2ZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJ1bGUuZGVmYXVsdFRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIE9iamVjdC5rZXlzKHJ1bGVzKS5mb3JFYWNoKHByb2Nlc3NTdGF0ZSwgdGhpcyk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlciA9IGZ1bmN0aW9uKG1hcCwgZGVmYXVsdFRva2VuLCBpZ25vcmVDYXNlLCBzcGxpdENoYXIpIHsKICAgICAgICB2YXIga2V5d29yZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgICAgICAgICAgdmFyIGEgPSBtYXBbY2xhc3NOYW1lXTsKICAgICAgICAgICAgaWYgKGlnbm9yZUNhc2UpCiAgICAgICAgICAgICAgICBhID0gYS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB2YXIgbGlzdCA9IGEuc3BsaXQoc3BsaXRDaGFyIHx8ICJ8Iik7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSBsaXN0Lmxlbmd0aDsgaS0tOyApCiAgICAgICAgICAgICAgICBrZXl3b3Jkc1tsaXN0W2ldXSA9IGNsYXNzTmFtZTsKICAgICAgICB9KTsKICAgICAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGtleXdvcmRzKSkgewogICAgICAgICAgICBrZXl3b3Jkcy5fX3Byb3RvX18gPSBudWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLiRrZXl3b3JkTGlzdCA9IE9iamVjdC5rZXlzKGtleXdvcmRzKTsKICAgICAgICBtYXAgPSBudWxsOwogICAgICAgIHJldHVybiBpZ25vcmVDYXNlCiAgICAgICAgICAgID8gZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFsdWUudG9Mb3dlckNhc2UoKV0gfHwgZGVmYXVsdFRva2VuOyB9CiAgICAgICAgICAgIDogZnVuY3Rpb24odmFsdWUpIHtyZXR1cm4ga2V5d29yZHNbdmFsdWVdIHx8IGRlZmF1bHRUb2tlbjsgfTsKICAgIH07CgogICAgdGhpcy5nZXRLZXl3b3JkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRrZXl3b3JkczsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKZXhwb3J0cy5UZXh0SGlnaGxpZ2h0UnVsZXMgPSBUZXh0SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBCZWhhdmlvdXIgPSBmdW5jdGlvbigpIHsKICAgdGhpcy4kYmVoYXZpb3VycyA9IHt9Owp9OwoKKGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmFkZCA9IGZ1bmN0aW9uIChuYW1lLCBhY3Rpb24sIGNhbGxiYWNrKSB7CiAgICAgICAgc3dpdGNoICh1bmRlZmluZWQpIHsKICAgICAgICAgIGNhc2UgdGhpcy4kYmVoYXZpb3VyczoKICAgICAgICAgICAgICB0aGlzLiRiZWhhdmlvdXJzID0ge307CiAgICAgICAgICBjYXNlIHRoaXMuJGJlaGF2aW91cnNbbmFtZV06CiAgICAgICAgICAgICAgdGhpcy4kYmVoYXZpb3Vyc1tuYW1lXSA9IHt9OwogICAgICAgIH0KICAgICAgICB0aGlzLiRiZWhhdmlvdXJzW25hbWVdW2FjdGlvbl0gPSBjYWxsYmFjazsKICAgIH07CiAgICAKICAgIHRoaXMuYWRkQmVoYXZpb3VycyA9IGZ1bmN0aW9uIChiZWhhdmlvdXJzKSB7CiAgICAgICAgZm9yICh2YXIga2V5IGluIGJlaGF2aW91cnMpIHsKICAgICAgICAgICAgZm9yICh2YXIgYWN0aW9uIGluIGJlaGF2aW91cnNba2V5XSkgewogICAgICAgICAgICAgICAgdGhpcy5hZGQoa2V5LCBhY3Rpb24sIGJlaGF2aW91cnNba2V5XVthY3Rpb25dKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICBpZiAodGhpcy4kYmVoYXZpb3VycyAmJiB0aGlzLiRiZWhhdmlvdXJzW25hbWVdKSB7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiRiZWhhdmlvdXJzW25hbWVdOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuaW5oZXJpdCA9IGZ1bmN0aW9uIChtb2RlLCBmaWx0ZXIpIHsKICAgICAgICBpZiAodHlwZW9mIG1vZGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdmFyIGJlaGF2aW91cnMgPSBuZXcgbW9kZSgpLmdldEJlaGF2aW91cnMoZmlsdGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgYmVoYXZpb3VycyA9IG1vZGUuZ2V0QmVoYXZpb3VycyhmaWx0ZXIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmFkZEJlaGF2aW91cnMoYmVoYXZpb3Vycyk7CiAgICB9OwogICAgCiAgICB0aGlzLmdldEJlaGF2aW91cnMgPSBmdW5jdGlvbiAoZmlsdGVyKSB7CiAgICAgICAgaWYgKCFmaWx0ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGJlaGF2aW91cnM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHJldCA9IHt9OwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbHRlci5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cnNbZmlsdGVyW2ldXSkgewogICAgICAgICAgICAgICAgICAgIHJldFtmaWx0ZXJbaV1dID0gdGhpcy4kYmVoYXZpb3Vyc1tmaWx0ZXJbaV1dOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoQmVoYXZpb3VyLnByb3RvdHlwZSk7CgpleHBvcnRzLkJlaGF2aW91ciA9IEJlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS90b2tlbl9pdGVyYXRvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwp2YXIgVG9rZW5JdGVyYXRvciA9IGZ1bmN0aW9uKHNlc3Npb24sIGluaXRpYWxSb3csIGluaXRpYWxDb2x1bW4pIHsKICAgIHRoaXMuJHNlc3Npb24gPSBzZXNzaW9uOwogICAgdGhpcy4kcm93ID0gaW5pdGlhbFJvdzsKICAgIHRoaXMuJHJvd1Rva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKGluaXRpYWxSb3cpOwoKICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChpbml0aWFsUm93LCBpbml0aWFsQ29sdW1uKTsKICAgIHRoaXMuJHRva2VuSW5kZXggPSB0b2tlbiA/IHRva2VuLmluZGV4IDogLTE7Cn07CgooZnVuY3Rpb24oKSB7IAogICAgdGhpcy5zdGVwQmFja3dhcmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiR0b2tlbkluZGV4IC09IDE7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKHRoaXMuJHRva2VuSW5kZXggPCAwKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdyAtPSAxOwogICAgICAgICAgICBpZiAodGhpcy4kcm93IDwgMCkgewogICAgICAgICAgICAgICAgdGhpcy4kcm93ID0gMDsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kcm93VG9rZW5zID0gdGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KTsKICAgICAgICAgICAgdGhpcy4kdG9rZW5JbmRleCA9IHRoaXMuJHJvd1Rva2Vucy5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuJHJvd1Rva2Vuc1t0aGlzLiR0b2tlbkluZGV4XTsKICAgIH07ICAgCiAgICB0aGlzLnN0ZXBGb3J3YXJkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kdG9rZW5JbmRleCArPSAxOwogICAgICAgIHZhciByb3dDb3VudDsKICAgICAgICB3aGlsZSAodGhpcy4kdG9rZW5JbmRleCA+PSB0aGlzLiRyb3dUb2tlbnMubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMuJHJvdyArPSAxOwogICAgICAgICAgICBpZiAoIXJvd0NvdW50KQogICAgICAgICAgICAgICAgcm93Q291bnQgPSB0aGlzLiRzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgICAgICBpZiAodGhpcy4kcm93ID49IHJvd0NvdW50KSB7CiAgICAgICAgICAgICAgICB0aGlzLiRyb3cgPSByb3dDb3VudCAtIDE7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy4kcm93VG9rZW5zID0gdGhpcy4kc2Vzc2lvbi5nZXRUb2tlbnModGhpcy4kcm93KTsKICAgICAgICAgICAgdGhpcy4kdG9rZW5JbmRleCA9IDA7CiAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdOwogICAgfTsgICAgICAKICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB0aGlzLiRyb3dUb2tlbnNbdGhpcy4kdG9rZW5JbmRleF07CiAgICB9OyAgICAgIAogICAgdGhpcy5nZXRDdXJyZW50VG9rZW5Sb3cgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdzsKICAgIH07ICAgICAKICAgIHRoaXMuZ2V0Q3VycmVudFRva2VuQ29sdW1uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvd1Rva2VucyA9IHRoaXMuJHJvd1Rva2VuczsKICAgICAgICB2YXIgdG9rZW5JbmRleCA9IHRoaXMuJHRva2VuSW5kZXg7CiAgICAgICAgdmFyIGNvbHVtbiA9IHJvd1Rva2Vuc1t0b2tlbkluZGV4XS5zdGFydDsKICAgICAgICBpZiAoY29sdW1uICE9PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHJldHVybiBjb2x1bW47CiAgICAgICAgICAgIAogICAgICAgIGNvbHVtbiA9IDA7CiAgICAgICAgd2hpbGUgKHRva2VuSW5kZXggPiAwKSB7CiAgICAgICAgICAgIHRva2VuSW5kZXggLT0gMTsKICAgICAgICAgICAgY29sdW1uICs9IHJvd1Rva2Vuc1t0b2tlbkluZGV4XS52YWx1ZS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBjb2x1bW47ICAKICAgIH07CiAgICB0aGlzLmdldEN1cnJlbnRUb2tlblBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHtyb3c6IHRoaXMuJHJvdywgY29sdW1uOiB0aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTsKICAgIH07CiAgICB0aGlzLmdldEN1cnJlbnRUb2tlblJhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHRva2VuID0gdGhpcy4kcm93VG9rZW5zW3RoaXMuJHRva2VuSW5kZXhdOwogICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy4kcm93LCBjb2x1bW4sIHRoaXMuJHJvdywgY29sdW1uICsgdG9rZW4udmFsdWUubGVuZ3RoKTsKICAgIH07CiAgICAKfSkuY2FsbChUb2tlbkl0ZXJhdG9yLnByb3RvdHlwZSk7CgpleHBvcnRzLlRva2VuSXRlcmF0b3IgPSBUb2tlbkl0ZXJhdG9yOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKdmFyIFNBRkVfSU5TRVJUX0lOX1RPS0VOUyA9CiAgICBbInRleHQiLCAicGFyZW4ucnBhcmVuIiwgInJwYXJlbiIsICJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciJdOwp2YXIgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyA9CiAgICBbInRleHQiLCAicGFyZW4ucnBhcmVuIiwgInJwYXJlbiIsICJwYXJlbiIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJjb21tZW50Il07Cgp2YXIgY29udGV4dDsKdmFyIGNvbnRleHRDYWNoZSA9IHt9Owp2YXIgZGVmYXVsdFF1b3RlcyA9IHsnIicgOiAnIicsICInIiA6ICInIn07Cgp2YXIgaW5pdENvbnRleHQgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgIHZhciBpZCA9IC0xOwogICAgaWYgKGVkaXRvci5tdWx0aVNlbGVjdCkgewogICAgICAgIGlkID0gZWRpdG9yLnNlbGVjdGlvbi5pbmRleDsKICAgICAgICBpZiAoY29udGV4dENhY2hlLnJhbmdlQ291bnQgIT0gZWRpdG9yLm11bHRpU2VsZWN0LnJhbmdlQ291bnQpCiAgICAgICAgICAgIGNvbnRleHRDYWNoZSA9IHtyYW5nZUNvdW50OiBlZGl0b3IubXVsdGlTZWxlY3QucmFuZ2VDb3VudH07CiAgICB9CiAgICBpZiAoY29udGV4dENhY2hlW2lkXSkKICAgICAgICByZXR1cm4gY29udGV4dCA9IGNvbnRleHRDYWNoZVtpZF07CiAgICBjb250ZXh0ID0gY29udGV4dENhY2hlW2lkXSA9IHsKICAgICAgICBhdXRvSW5zZXJ0ZWRCcmFja2V0czogMCwKICAgICAgICBhdXRvSW5zZXJ0ZWRSb3c6IC0xLAogICAgICAgIGF1dG9JbnNlcnRlZExpbmVFbmQ6ICIiLAogICAgICAgIG1heWJlSW5zZXJ0ZWRCcmFja2V0czogMCwKICAgICAgICBtYXliZUluc2VydGVkUm93OiAtMSwKICAgICAgICBtYXliZUluc2VydGVkTGluZVN0YXJ0OiAiIiwKICAgICAgICBtYXliZUluc2VydGVkTGluZUVuZDogIiIKICAgIH07Cn07Cgp2YXIgZ2V0V3JhcHBlZCA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgc2VsZWN0ZWQsIG9wZW5pbmcsIGNsb3NpbmcpIHsKICAgIHZhciByb3dEaWZmID0gc2VsZWN0aW9uLmVuZC5yb3cgLSBzZWxlY3Rpb24uc3RhcnQucm93OwogICAgcmV0dXJuIHsKICAgICAgICB0ZXh0OiBvcGVuaW5nICsgc2VsZWN0ZWQgKyBjbG9zaW5nLAogICAgICAgIHNlbGVjdGlvbjogWwogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zdGFydC5jb2x1bW4gKyAxLAogICAgICAgICAgICAgICAgcm93RGlmZiwKICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5lbmQuY29sdW1uICsgKHJvd0RpZmYgPyAwIDogMSkKICAgICAgICAgICAgXQogICAgfTsKfTsKCnZhciBDc3R5bGVCZWhhdmlvdXIgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmFkZCgiYnJhY2VzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgaWYgKHRleHQgPT0gJ3snKSB7CiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICJ7IiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBnZXRXcmFwcGVkKHNlbGVjdGlvbiwgc2VsZWN0ZWQsICd7JywgJ30nKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKICAgICAgICAgICAgICAgIGlmICgvW1xdXH1cKV0vLnRlc3QobGluZVtjdXJzb3IuY29sdW1uXSkgfHwgZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5icmFjZXMpIHsKICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkQXV0b0luc2VydChlZGl0b3IsIHNlc3Npb24sICJ9Iik7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ3t9JywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIucmVjb3JkTWF5YmVJbnNlcnQoZWRpdG9yLCBzZXNzaW9uLCAieyIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICd7JywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09ICd9JykgewogICAgICAgICAgICBpbml0Q29udGV4dChlZGl0b3IpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICd9JykgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoaW5nID0gc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KCd9Jywge2NvbHVtbjogY3Vyc29yLmNvbHVtbiArIDEsIHJvdzogY3Vyc29yLnJvd30pOwogICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nICE9PSBudWxsICYmIENzdHlsZUJlaGF2aW91ci5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCB0ZXh0KSkgewogICAgICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAiXG4iIHx8IHRleHQgPT0gIlxyXG4iKSB7CiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7CiAgICAgICAgICAgIHZhciBjbG9zaW5nID0gIiI7CiAgICAgICAgICAgIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKSB7CiAgICAgICAgICAgICAgICBjbG9zaW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoIn0iLCBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRCcmFja2V0cyk7CiAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICd9JykgewogICAgICAgICAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IHNlc3Npb24uZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiBjdXJzb3Iucm93LCBjb2x1bW46IGN1cnNvci5jb2x1bW4rMX0sICd9Jyk7CiAgICAgICAgICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB2YXIgbmV4dF9pbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoc2Vzc2lvbi5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjbG9zaW5nKSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dF9pbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBDc3R5bGVCZWhhdmlvdXIuY2xlYXJNYXliZUluc2VydGVkQ2xvc2luZygpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBuZXh0X2luZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdGV4dDogJ1xuJyArIGluZGVudCArICdcbicgKyBuZXh0X2luZGVudCArIGNsb3NpbmcsCiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5jbGVhck1heWJlSW5zZXJ0ZWRDbG9zaW5nKCk7CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImJyYWNlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAneycpIHsKICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ30nKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRCcmFja2V0cy0tOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInBhcmVucyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnKCcpIHsKICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTsKICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBnZXRXcmFwcGVkKHNlbGVjdGlvbiwgc2VsZWN0ZWQsICcoJywgJyknKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIikiKTsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJygpJywKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnKScpIHsKICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJyknKSB7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJyknLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CiAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInBhcmVucyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PSAnKCcpIHsKICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSAnKScpIHsKICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJicmFja2V0cyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnWycpIHsKICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTsKICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2Uoc2VsZWN0aW9uKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBnZXRXcmFwcGVkKHNlbGVjdGlvbiwgc2VsZWN0ZWQsICdbJywgJ10nKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChDc3R5bGVCZWhhdmlvdXIuaXNTYW5lSW5zZXJ0aW9uKGVkaXRvciwgc2Vzc2lvbikpIHsKICAgICAgICAgICAgICAgIENzdHlsZUJlaGF2aW91ci5yZWNvcmRBdXRvSW5zZXJ0KGVkaXRvciwgc2Vzc2lvbiwgIl0iKTsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1tdJywKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSAnXScpIHsKICAgICAgICAgICAgaW5pdENvbnRleHQoZWRpdG9yKTsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gJ10nKSB7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hpbmcgPSBzZXNzaW9uLiRmaW5kT3BlbmluZ0JyYWNrZXQoJ10nLCB7Y29sdW1uOiBjdXJzb3IuY29sdW1uICsgMSwgcm93OiBjdXJzb3Iucm93fSk7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmcgIT09IG51bGwgJiYgQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUsIHRleHQpKSB7CiAgICAgICAgICAgICAgICAgICAgQ3N0eWxlQmVoYXZpb3VyLnBvcEF1dG9JbnNlcnRlZENsb3NpbmcoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImJyYWNrZXRzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09ICdbJykgewogICAgICAgICAgICBpbml0Q29udGV4dChlZGl0b3IpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09ICddJykgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIHZhciBxdW90ZXMgPSBzZXNzaW9uLiRtb2RlLiRxdW90ZXMgfHwgZGVmYXVsdFF1b3RlczsKICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gMSAmJiBxdW90ZXNbdGV4dF0pIHsKICAgICAgICAgICAgaWYgKHRoaXMubGluZUNvbW1lbnRTdGFydCAmJiB0aGlzLmxpbmVDb21tZW50U3RhcnQuaW5kZXhPZih0ZXh0KSAhPSAtMSkgCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7CiAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHNlbGVjdGlvbik7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgKHNlbGVjdGVkLmxlbmd0aCAhPSAxIHx8ICFxdW90ZXNbc2VsZWN0ZWRdKSAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBnZXRXcmFwcGVkKHNlbGVjdGlvbiwgc2VsZWN0ZWQsIHF1b3RlLCBxdW90ZSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgbGVmdENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLTEsIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0VG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKGxlZnRDaGFyID09ICJcXCIgJiYgdG9rZW4gJiYgL2VzY2FwZS8udGVzdCh0b2tlbi50eXBlKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHN0cmluZ0JlZm9yZSA9IHRva2VuICYmIC9zdHJpbmd8ZXNjYXBlLy50ZXN0KHRva2VuLnR5cGUpOwogICAgICAgICAgICAgICAgdmFyIHN0cmluZ0FmdGVyID0gIXJpZ2h0VG9rZW4gfHwgL3N0cmluZ3xlc2NhcGUvLnRlc3QocmlnaHRUb2tlbi50eXBlKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHBhaXI7CiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlKSB7CiAgICAgICAgICAgICAgICAgICAgcGFpciA9IHN0cmluZ0JlZm9yZSAhPT0gc3RyaW5nQWZ0ZXI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhaXIgJiYgL3N0cmluZ1wuZW5kLy50ZXN0KHJpZ2h0VG9rZW4udHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHBhaXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0JlZm9yZSAmJiAhc3RyaW5nQWZ0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyB3cmFwIHN0cmluZyB3aXRoIGRpZmZlcmVudCBxdW90ZQogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmdCZWZvcmUgJiYgc3RyaW5nQWZ0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBkbyBub3QgcGFpciBxdW90ZXMgaW5zaWRlIHN0cmluZ3MKICAgICAgICAgICAgICAgICAgICB2YXIgd29yZFJlID0gc2Vzc2lvbi4kbW9kZS50b2tlblJlOwogICAgICAgICAgICAgICAgICAgIHdvcmRSZS5sYXN0SW5kZXggPSAwOwogICAgICAgICAgICAgICAgICAgIHZhciBpc1dvcmRCZWZvcmUgPSB3b3JkUmUudGVzdChsZWZ0Q2hhcik7CiAgICAgICAgICAgICAgICAgICAgd29yZFJlLmxhc3RJbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlzV29yZEFmdGVyID0gd29yZFJlLnRlc3QobGVmdENoYXIpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc1dvcmRCZWZvcmUgfHwgaXNXb3JkQWZ0ZXIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBiZWZvcmUgb3IgYWZ0ZXIgYWxwaGFudW1lcmljCiAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciAmJiAhL1tcczssLn0pXF1cXF0vLnRlc3QocmlnaHRDaGFyKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIHRoZXJlIGlzIHJpZ2h0Q2hhciBhbmQgaXQgaXNuJ3QgY2xvc2luZwogICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQmVmb3JlID0gbGluZVtjdXJzb3IuY29sdW1uIC0gMl07CiAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRDaGFyID09IHF1b3RlICYmICAoY2hhckJlZm9yZSA9PSBxdW90ZSB8fCB3b3JkUmUudGVzdChjaGFyQmVmb3JlKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgIHBhaXIgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwYWlyID8gcXVvdGUgKyBxdW90ZSA6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHF1b3RlcyA9IHNlc3Npb24uJG1vZGUuJHF1b3RlcyB8fCBkZWZhdWx0UXVvdGVzOwoKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBxdW90ZXMuaGFzT3duUHJvcGVydHkoc2VsZWN0ZWQpKSB7CiAgICAgICAgICAgIGluaXRDb250ZXh0KGVkaXRvcik7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKCiAgICAKQ3N0eWxlQmVoYXZpb3VyLmlzU2FuZUluc2VydGlvbiA9IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbikgewogICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICBpZiAoIXRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfSU5fVE9LRU5TKSkgewogICAgICAgIGlmICgvWyl9XF1dLy50ZXN0KGVkaXRvci5zZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdylbY3Vyc29yLmNvbHVtbl0pKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB2YXIgaXRlcmF0b3IyID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgIGlmICghdGhpcy4kbWF0Y2hUb2tlblR5cGUoaXRlcmF0b3IyLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfSU5fVE9LRU5TKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgIHJldHVybiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSAhPT0gY3Vyc29yLnJvdyB8fAogICAgICAgIHRoaXMuJG1hdGNoVG9rZW5UeXBlKGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8ICJ0ZXh0IiwgU0FGRV9JTlNFUlRfQkVGT1JFX1RPS0VOUyk7Cn07CgpDc3R5bGVCZWhhdmlvdXIuJG1hdGNoVG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW4sIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaW5kZXhPZih0b2tlbi50eXBlIHx8IHRva2VuKSA+IC0xOwp9OwoKQ3N0eWxlQmVoYXZpb3VyLnJlY29yZEF1dG9JbnNlcnQgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIGJyYWNrZXQpIHsKICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgIGlmICghdGhpcy5pc0F1dG9JbnNlcnRlZENsb3NpbmcoY3Vyc29yLCBsaW5lLCBjb250ZXh0LmF1dG9JbnNlcnRlZExpbmVFbmRbMF0pKQogICAgICAgIGNvbnRleHQuYXV0b0luc2VydGVkQnJhY2tldHMgPSAwOwogICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRSb3cgPSBjdXJzb3Iucm93OwogICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kID0gYnJhY2tldCArIGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pOwogICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRCcmFja2V0cysrOwp9OwoKQ3N0eWxlQmVoYXZpb3VyLnJlY29yZE1heWJlSW5zZXJ0ID0gZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBicmFja2V0KSB7CiAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICBpZiAoIXRoaXMuaXNNYXliZUluc2VydGVkQ2xvc2luZyhjdXJzb3IsIGxpbmUpKQogICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZEJyYWNrZXRzID0gMDsKICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZFJvdyA9IGN1cnNvci5yb3c7CiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRMaW5lU3RhcnQgPSBsaW5lLnN1YnN0cigwLCBjdXJzb3IuY29sdW1uKSArIGJyYWNrZXQ7CiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRMaW5lRW5kID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CiAgICBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRCcmFja2V0cysrOwp9OwoKQ3N0eWxlQmVoYXZpb3VyLmlzQXV0b0luc2VydGVkQ2xvc2luZyA9IGZ1bmN0aW9uKGN1cnNvciwgbGluZSwgYnJhY2tldCkgewogICAgcmV0dXJuIGNvbnRleHQuYXV0b0luc2VydGVkQnJhY2tldHMgPiAwICYmCiAgICAgICAgY3Vyc29yLnJvdyA9PT0gY29udGV4dC5hdXRvSW5zZXJ0ZWRSb3cgJiYKICAgICAgICBicmFja2V0ID09PSBjb250ZXh0LmF1dG9JbnNlcnRlZExpbmVFbmRbMF0gJiYKICAgICAgICBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKSA9PT0gY29udGV4dC5hdXRvSW5zZXJ0ZWRMaW5lRW5kOwp9OwoKQ3N0eWxlQmVoYXZpb3VyLmlzTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbihjdXJzb3IsIGxpbmUpIHsKICAgIHJldHVybiBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRCcmFja2V0cyA+IDAgJiYKICAgICAgICBjdXJzb3Iucm93ID09PSBjb250ZXh0Lm1heWJlSW5zZXJ0ZWRSb3cgJiYKICAgICAgICBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKSA9PT0gY29udGV4dC5tYXliZUluc2VydGVkTGluZUVuZCAmJgogICAgICAgIGxpbmUuc3Vic3RyKDAsIGN1cnNvci5jb2x1bW4pID09IGNvbnRleHQubWF5YmVJbnNlcnRlZExpbmVTdGFydDsKfTsKCkNzdHlsZUJlaGF2aW91ci5wb3BBdXRvSW5zZXJ0ZWRDbG9zaW5nID0gZnVuY3Rpb24oKSB7CiAgICBjb250ZXh0LmF1dG9JbnNlcnRlZExpbmVFbmQgPSBjb250ZXh0LmF1dG9JbnNlcnRlZExpbmVFbmQuc3Vic3RyKDEpOwogICAgY29udGV4dC5hdXRvSW5zZXJ0ZWRCcmFja2V0cy0tOwp9OwoKQ3N0eWxlQmVoYXZpb3VyLmNsZWFyTWF5YmVJbnNlcnRlZENsb3NpbmcgPSBmdW5jdGlvbigpIHsKICAgIGlmIChjb250ZXh0KSB7CiAgICAgICAgY29udGV4dC5tYXliZUluc2VydGVkQnJhY2tldHMgPSAwOwogICAgICAgIGNvbnRleHQubWF5YmVJbnNlcnRlZFJvdyA9IC0xOwogICAgfQp9OwoKCgpvb3AuaW5oZXJpdHMoQ3N0eWxlQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwoKZXhwb3J0cy5Dc3R5bGVCZWhhdmlvdXIgPSBDc3R5bGVCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvdW5pY29kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgd29yZENoYXJzID0gWzQ4LDksOCwyNSw1LDAsMiwyNSw0OCwwLDExLDAsNSwwLDYsMjIsMiwzMCwyLDQ1Nyw1LDExLDE1LDQsOCwwLDIsMCwxOCwxMTYsMiwxLDMsMyw5LDAsMiwyLDIsMCwyLDE5LDIsODIsMiwxMzgsMiw0LDMsMTU1LDEyLDM3LDMsMCw4LDM4LDEwLDQ0LDIsMCwyLDEsMiwxLDIsMCw5LDI2LDYsMiwzMCwxMCw3LDYxLDIsOSw1LDEwMSwyLDcsMyw5LDIsMTgsMywwLDE3LDU4LDMsMTAwLDE1LDUzLDUsMCw2LDQ1LDIxMSw1NywzLDE4LDIsNSwzLDExLDMsOSwyLDEsNyw2LDIsMiwyLDcsMywxLDMsMjEsMiw2LDIsMCw0LDMsMyw4LDMsMSwzLDMsOSwwLDUsMSwyLDQsMywxMSwxNiwyLDIsNSw1LDEsMywyMSwyLDYsMiwxLDIsMSwyLDEsMywwLDIsNCw1LDEsMywyLDQsMCw4LDMsMiwwLDgsMTUsMTIsMiwyLDgsMiwyLDIsMjEsMiw2LDIsMSwyLDQsMyw5LDIsMiwyLDIsMywwLDE2LDMsMyw5LDE4LDIsMiw3LDMsMSwzLDIxLDIsNiwyLDEsMiw0LDMsOCwzLDEsMywyLDksMSw1LDEsMiw0LDMsOSwyLDAsMTcsMSwyLDUsNCwyLDIsMyw0LDEsMiwwLDIsMSw0LDEsNCwyLDQsMTEsNSw0LDQsMiwyLDMsMywwLDcsMCwxNSw5LDE4LDIsMiw3LDIsMiwyLDIyLDIsOSwyLDQsNCw3LDIsMiwyLDMsOCwxLDIsMSw3LDMsMyw5LDE5LDEsMiw3LDIsMiwyLDIyLDIsOSwyLDQsMyw4LDIsMiwyLDMsOCwxLDgsMCwyLDMsMyw5LDE5LDEsMiw3LDIsMiwyLDIyLDIsMTUsNCw3LDIsMiwyLDMsMTAsMCw5LDMsMyw5LDExLDUsMywxLDIsMTcsNCwyMywyLDgsMiwwLDMsNiw0LDAsNSw1LDIsMCwyLDcsMTksMSwxNCw1Nyw2LDE0LDIsOSw0MCwxLDIsMCwzLDEsMiwwLDMsMCw3LDMsMiw2LDIsMiwyLDAsMiwwLDMsMSwyLDEyLDIsMiwzLDQsMiwwLDIsNSwzLDksMywxLDM1LDAsMjQsMSw3LDksMTIsMCwyLDAsMiwwLDUsOSwyLDM1LDUsMTksMiw1LDUsNywyLDM1LDEwLDAsNTgsNzMsNyw3NywzLDM3LDExLDQyLDIsMCw0LDMyOCwyLDMsMyw2LDIsMCwyLDMsMyw0MCwyLDMsMywzMiwyLDMsMyw2LDIsMCwyLDMsMywxNCwyLDU2LDIsMywzLDY2LDUsMCwzMywxNSwxNyw4NCwxMyw2MTksMywxNiwyLDI1LDYsNzQsMjIsMTIsMiw2LDEyLDIwLDEyLDE5LDEzLDEyLDIsMiwyLDEsMTMsNTEsMywyOSw0LDAsNSwxLDMsOSwzNCwyLDMsOSw3LDg3LDksNDIsNiw2OSwxMSwyOCw0LDExLDUsMTEsMTEsMzksMyw0LDEyLDQzLDUsMjUsNywxMCwzOCwyNyw1LDYyLDIsMjgsMywxMCw3LDksMTQsMCw4OSw3NSw1LDksMTgsOCwxMyw0Miw0LDExLDcxLDU1LDksOSw0LDQ4LDgzLDIsMiwzMCwxNCwyMzAsMjMsMjgwLDMsNSwzLDM3LDMsNSwzLDcsMiwwLDIsMCwyLDAsMiwzMCwzLDUyLDIsNiwyLDAsNCwyLDIsNiw0LDMsMyw1LDUsMTIsNiwyLDIsNiw2NywxLDIwLDAsMjksMCwxNCwwLDE3LDQsNjAsMTIsNSwwLDQsMTEsMTgsMCw1LDAsMyw5LDIsMCw0LDQsNywwLDIsMCwyLDAsMiwzLDIsMTAsMywzLDYsNCw1LDAsNTMsMSwyNjg0LDQ2LDIsNDYsMiwxMzIsNyw2LDE1LDM3LDExLDUzLDEwLDAsMTcsMjIsMTAsNiwyLDYsMiw2LDIsNiwyLDYsMiw2LDIsNiwyLDYsMiwzMSw0OCwwLDQ3MCwxLDM2LDUsMiw0LDYsMSw1LDg1LDMsMSwzLDIsMiw4OSwyLDMsNiw0MCw0LDkzLDE4LDIzLDU3LDE1LDUxMyw2NTgxLDc1LDIwOTM5LDUzLDExNjQsNjgsNDUsMywyNjgsNCwyNywyMSwzMSwzLDEzLDEzLDEsMiwyNCw5LDY5LDExLDEsMzgsOCwzLDEwMiwzLDEsMTExLDQ0LDI1LDUxLDEzLDY4LDEyLDksNywyMyw0LDAsNSw0NSwzLDM1LDEzLDI4LDQsNjQsMTUsMTAsMzksNTQsMTAsMTMsMyw5LDcsMjIsNCwxLDUsNjYsMjUsMiwyMjcsNDIsMiwxLDMsOSw3LDExMTcxLDEzLDIyLDUsNDgsODQ1MywzMDEsMyw2MSwzLDEwNSwzOSw2LDEzLDQsNiwxMSwyLDEyLDIsNCwyLDAsMiwxLDIsMSwyLDEwNywzNCwzNjIsMTksNjMsMyw1Myw0MSwxMSw1LDE1LDE3LDYsMTMsMSwyNSwyLDMzLDQsMiwxMzQsMjAsOSw4LDI1LDUsMCwyLDI1LDEyLDg4LDQsNSwzLDUsMyw1LDMsMl07Cgp2YXIgY29kZSA9IDA7CnZhciBzdHIgPSBbXTsKZm9yICh2YXIgaSA9IDA7IGkgPCB3b3JkQ2hhcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgIHN0ci5wdXNoKGNvZGUgKz0gd29yZENoYXJzW2ldKTsKICAgIGlmICh3b3JkQ2hhcnNbaSArIDFdKQogICAgICAgIHN0ci5wdXNoKDQ1LCBjb2RlICs9IHdvcmRDaGFyc1tpICsgMV0pOwp9CgpleHBvcnRzLndvcmRDaGFycyA9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgc3RyKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90ZXh0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2NvbmZpZyIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvdW5pY29kZSIsImFjZS9saWIvbGFuZyIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgY29uZmlnID0gcmVxdWlyZSgiLi4vY29uZmlnIik7Cgp2YXIgVG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIHVuaWNvZGUgPSByZXF1aXJlKCIuLi91bmljb2RlIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFRleHRIaWdobGlnaHRSdWxlczsKfTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuJGRlZmF1bHRCZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CgogICAgdGhpcy50b2tlblJlID0gbmV3IFJlZ0V4cCgiXlsiICsgdW5pY29kZS53b3JkQ2hhcnMgKyAiXFwkX10rIiwgImciKTsKCiAgICB0aGlzLm5vblRva2VuUmUgPSBuZXcgUmVnRXhwKCJeKD86W14iICsgdW5pY29kZS53b3JkQ2hhcnMgKyAiXFwkX118XFxzXSkrIiwgImciKTsKCiAgICB0aGlzLmdldFRva2VuaXplciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy4kdG9rZW5pemVyKSB7CiAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodFJ1bGVzID0gdGhpcy4kaGlnaGxpZ2h0UnVsZXMgfHwgbmV3IHRoaXMuSGlnaGxpZ2h0UnVsZXModGhpcy4kaGlnaGxpZ2h0UnVsZUNvbmZpZyk7CiAgICAgICAgICAgIHRoaXMuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIodGhpcy4kaGlnaGxpZ2h0UnVsZXMuZ2V0UnVsZXMoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLiR0b2tlbml6ZXI7CiAgICB9OwoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSAiIjsKCiAgICB0aGlzLnRvZ2dsZUNvbW1lbnRMaW5lcyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBzdGFydFJvdywgZW5kUm93KSB7CiAgICAgICAgdmFyIGRvYyA9IHNlc3Npb24uZG9jOwoKICAgICAgICB2YXIgaWdub3JlQmxhbmtMaW5lcyA9IHRydWU7CiAgICAgICAgdmFyIHNob3VsZFJlbW92ZSA9IHRydWU7CiAgICAgICAgdmFyIG1pbkluZGVudCA9IEluZmluaXR5OwogICAgICAgIHZhciB0YWJTaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7CiAgICAgICAgdmFyIGluc2VydEF0VGFiU3RvcCA9IGZhbHNlOwoKICAgICAgICBpZiAoIXRoaXMubGluZUNvbW1lbnRTdGFydCkgewogICAgICAgICAgICBpZiAoIXRoaXMuYmxvY2tDb21tZW50KQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMuYmxvY2tDb21tZW50LnN0YXJ0OwogICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRFbmQgPSB0aGlzLmJsb2NrQ29tbWVudC5lbmQ7CiAgICAgICAgICAgIHZhciByZWdleHBTdGFydCA9IG5ldyBSZWdFeHAoIl4oXFxzKikoPzoiICsgbGFuZy5lc2NhcGVSZWdFeHAobGluZUNvbW1lbnRTdGFydCkgKyAiKSIpOwogICAgICAgICAgICB2YXIgcmVnZXhwRW5kID0gbmV3IFJlZ0V4cCgiKD86IiArIGxhbmcuZXNjYXBlUmVnRXhwKGxpbmVDb21tZW50RW5kKSArICIpXFxzKiQiKTsKCiAgICAgICAgICAgIHZhciBjb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkgewogICAgICAgICAgICAgICAgaWYgKHRlc3RSZW1vdmUobGluZSwgaSkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVCbGFua0xpbmVzIHx8IC9cUy8udGVzdChsaW5lKSkgewogICAgICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRJbkxpbmUoe3JvdzogaSwgY29sdW1uOiBsaW5lLmxlbmd0aH0sIGxpbmVDb21tZW50RW5kKTsKICAgICAgICAgICAgICAgICAgICBkb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IGksIGNvbHVtbjogbWluSW5kZW50fSwgbGluZUNvbW1lbnRTdGFydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICB2YXIgdW5jb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkgewogICAgICAgICAgICAgICAgdmFyIG07CiAgICAgICAgICAgICAgICBpZiAobSA9IGxpbmUubWF0Y2gocmVnZXhwRW5kKSkKICAgICAgICAgICAgICAgICAgICBkb2MucmVtb3ZlSW5MaW5lKGksIGxpbmUubGVuZ3RoIC0gbVswXS5sZW5ndGgsIGxpbmUubGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmIChtID0gbGluZS5tYXRjaChyZWdleHBTdGFydCkpCiAgICAgICAgICAgICAgICAgICAgZG9jLnJlbW92ZUluTGluZShpLCBtWzFdLmxlbmd0aCwgbVswXS5sZW5ndGgpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdmFyIHRlc3RSZW1vdmUgPSBmdW5jdGlvbihsaW5lLCByb3cpIHsKICAgICAgICAgICAgICAgIGlmIChyZWdleHBTdGFydC50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbaV0udHlwZSA9PT0gImNvbW1lbnQiKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmxpbmVDb21tZW50U3RhcnQpKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVnZXhwU3RhcnQgPSB0aGlzLmxpbmVDb21tZW50U3RhcnQubWFwKGxhbmcuZXNjYXBlUmVnRXhwKS5qb2luKCJ8Iik7CiAgICAgICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydFswXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciByZWdleHBTdGFydCA9IGxhbmcuZXNjYXBlUmVnRXhwKHRoaXMubGluZUNvbW1lbnRTdGFydCk7CiAgICAgICAgICAgICAgICB2YXIgbGluZUNvbW1lbnRTdGFydCA9IHRoaXMubGluZUNvbW1lbnRTdGFydDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZWdleHBTdGFydCA9IG5ldyBSZWdFeHAoIl4oXFxzKikoPzoiICsgcmVnZXhwU3RhcnQgKyAiKSA/Iik7CiAgICAgICAgICAgIAogICAgICAgICAgICBpbnNlcnRBdFRhYlN0b3AgPSBzZXNzaW9uLmdldFVzZVNvZnRUYWJzKCk7CgogICAgICAgICAgICB2YXIgdW5jb21tZW50ID0gZnVuY3Rpb24obGluZSwgaSkgewogICAgICAgICAgICAgICAgdmFyIG0gPSBsaW5lLm1hdGNoKHJlZ2V4cFN0YXJ0KTsKICAgICAgICAgICAgICAgIGlmICghbSkgcmV0dXJuOwogICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gbVsxXS5sZW5ndGgsIGVuZCA9IG1bMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKCFzaG91bGRJbnNlcnRTcGFjZShsaW5lLCBzdGFydCwgZW5kKSAmJiBtWzBdW2VuZCAtIDFdID09ICIgIikKICAgICAgICAgICAgICAgICAgICBlbmQtLTsKICAgICAgICAgICAgICAgIGRvYy5yZW1vdmVJbkxpbmUoaSwgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBjb21tZW50V2l0aFNwYWNlID0gbGluZUNvbW1lbnRTdGFydCArICIgIjsKICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBmdW5jdGlvbihsaW5lLCBpKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUJsYW5rTGluZXMgfHwgL1xTLy50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEluc2VydFNwYWNlKGxpbmUsIG1pbkluZGVudCwgbWluSW5kZW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgZG9jLmluc2VydEluTGluZSh7cm93OiBpLCBjb2x1bW46IG1pbkluZGVudH0sIGNvbW1lbnRXaXRoU3BhY2UpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZG9jLmluc2VydEluTGluZSh7cm93OiBpLCBjb2x1bW46IG1pbkluZGVudH0sIGxpbmVDb21tZW50U3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB2YXIgdGVzdFJlbW92ZSA9IGZ1bmN0aW9uKGxpbmUsIGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiByZWdleHBTdGFydC50ZXN0KGxpbmUpOwogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHNob3VsZEluc2VydFNwYWNlID0gZnVuY3Rpb24obGluZSwgYmVmb3JlLCBhZnRlcikgewogICAgICAgICAgICAgICAgdmFyIHNwYWNlcyA9IDA7CiAgICAgICAgICAgICAgICB3aGlsZSAoYmVmb3JlLS0gJiYgbGluZS5jaGFyQXQoYmVmb3JlKSA9PSAiICIpCiAgICAgICAgICAgICAgICAgICAgc3BhY2VzKys7CiAgICAgICAgICAgICAgICBpZiAoc3BhY2VzICUgdGFiU2l6ZSAhPSAwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIHZhciBzcGFjZXMgPSAwOwogICAgICAgICAgICAgICAgd2hpbGUgKGxpbmUuY2hhckF0KGFmdGVyKyspID09ICIgIikKICAgICAgICAgICAgICAgICAgICBzcGFjZXMrKzsKICAgICAgICAgICAgICAgIGlmICh0YWJTaXplID4gMikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VzICUgdGFiU2l6ZSAhPSB0YWJTaXplIC0gMTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VzICUgdGFiU2l6ZSA9PSAwOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaXRlcihmdW4pIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKQogICAgICAgICAgICAgICAgZnVuKGRvYy5nZXRMaW5lKGkpLCBpKTsKICAgICAgICB9CgoKICAgICAgICB2YXIgbWluRW1wdHlMZW5ndGggPSBJbmZpbml0eTsKICAgICAgICBpdGVyKGZ1bmN0aW9uKGxpbmUsIGkpIHsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ICE9PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKGluZGVudCA8IG1pbkluZGVudCkKICAgICAgICAgICAgICAgICAgICBtaW5JbmRlbnQgPSBpbmRlbnQ7CiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlICYmICF0ZXN0UmVtb3ZlKGxpbmUsIGkpKQogICAgICAgICAgICAgICAgICAgIHNob3VsZFJlbW92ZSA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1pbkVtcHR5TGVuZ3RoID4gbGluZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIG1pbkVtcHR5TGVuZ3RoID0gbGluZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKG1pbkluZGVudCA9PSBJbmZpbml0eSkgewogICAgICAgICAgICBtaW5JbmRlbnQgPSBtaW5FbXB0eUxlbmd0aDsKICAgICAgICAgICAgaWdub3JlQmxhbmtMaW5lcyA9IGZhbHNlOwogICAgICAgICAgICBzaG91bGRSZW1vdmUgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChpbnNlcnRBdFRhYlN0b3AgJiYgbWluSW5kZW50ICUgdGFiU2l6ZSAhPSAwKQogICAgICAgICAgICBtaW5JbmRlbnQgPSBNYXRoLmZsb29yKG1pbkluZGVudCAvIHRhYlNpemUpICogdGFiU2l6ZTsKCiAgICAgICAgaXRlcihzaG91bGRSZW1vdmUgPyB1bmNvbW1lbnQgOiBjb21tZW50KTsKICAgIH07CgogICAgdGhpcy50b2dnbGVCbG9ja0NvbW1lbnQgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcmFuZ2UsIGN1cnNvcikgewogICAgICAgIHZhciBjb21tZW50ID0gdGhpcy5ibG9ja0NvbW1lbnQ7CiAgICAgICAgaWYgKCFjb21tZW50KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCFjb21tZW50LnN0YXJ0ICYmIGNvbW1lbnRbMF0pCiAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50WzBdOwoKICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgdmFyIHNlbCA9IHNlc3Npb24uc2VsZWN0aW9uOwogICAgICAgIHZhciBpbml0aWFsUmFuZ2UgPSBzZXNzaW9uLnNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTsKICAgICAgICB2YXIgc3RhcnRSb3csIGNvbERpZmY7CgogICAgICAgIGlmICh0b2tlbiAmJiAvY29tbWVudC8udGVzdCh0b2tlbi50eXBlKSkgewogICAgICAgICAgICB2YXIgc3RhcnRSYW5nZSwgZW5kUmFuZ2U7CiAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiAvY29tbWVudC8udGVzdCh0b2tlbi50eXBlKSkgewogICAgICAgICAgICAgICAgdmFyIGkgPSB0b2tlbi52YWx1ZS5pbmRleE9mKGNvbW1lbnQuc3RhcnQpOwogICAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgaTsKICAgICAgICAgICAgICAgICAgICBzdGFydFJhbmdlID0gbmV3IFJhbmdlKHJvdywgY29sdW1uLCByb3csIGNvbHVtbiArIGNvbW1lbnQuc3RhcnQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgd2hpbGUgKHRva2VuICYmIC9jb21tZW50Ly50ZXN0KHRva2VuLnR5cGUpKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IHRva2VuLnZhbHVlLmluZGV4T2YoY29tbWVudC5lbmQpOwogICAgICAgICAgICAgICAgaWYgKGkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgaTsKICAgICAgICAgICAgICAgICAgICBlbmRSYW5nZSA9IG5ldyBSYW5nZShyb3csIGNvbHVtbiwgcm93LCBjb2x1bW4gKyBjb21tZW50LmVuZC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChlbmRSYW5nZSkKICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKGVuZFJhbmdlKTsKICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKHN0YXJ0UmFuZ2UpOwogICAgICAgICAgICAgICAgc3RhcnRSb3cgPSBzdGFydFJhbmdlLnN0YXJ0LnJvdzsKICAgICAgICAgICAgICAgIGNvbERpZmYgPSAtY29tbWVudC5zdGFydC5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb2xEaWZmID0gY29tbWVudC5zdGFydC5sZW5ndGg7CiAgICAgICAgICAgIHN0YXJ0Um93ID0gcmFuZ2Uuc3RhcnQucm93OwogICAgICAgICAgICBzZXNzaW9uLmluc2VydChyYW5nZS5lbmQsIGNvbW1lbnQuZW5kKTsKICAgICAgICAgICAgc2Vzc2lvbi5pbnNlcnQocmFuZ2Uuc3RhcnQsIGNvbW1lbnQuc3RhcnQpOwogICAgICAgIH0KICAgICAgICBpZiAoaW5pdGlhbFJhbmdlLnN0YXJ0LnJvdyA9PSBzdGFydFJvdykKICAgICAgICAgICAgaW5pdGlhbFJhbmdlLnN0YXJ0LmNvbHVtbiArPSBjb2xEaWZmOwogICAgICAgIGlmIChpbml0aWFsUmFuZ2UuZW5kLnJvdyA9PSBzdGFydFJvdykKICAgICAgICAgICAgaW5pdGlhbFJhbmdlLmVuZC5jb2x1bW4gKz0gY29sRGlmZjsKICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi5mcm9tT3JpZW50ZWRSYW5nZShpbml0aWFsUmFuZ2UpOwogICAgfTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CgogICAgdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzID0gZnVuY3Rpb24gKG1hcHBpbmcpIHsKICAgICAgICB0aGlzLiRlbWJlZHMgPSBbXTsKICAgICAgICB0aGlzLiRtb2RlcyA9IHt9OwogICAgICAgIGZvciAodmFyIGkgaW4gbWFwcGluZykgewogICAgICAgICAgICBpZiAobWFwcGluZ1tpXSkgewogICAgICAgICAgICAgICAgdmFyIE1vZGUgPSBtYXBwaW5nW2ldOwogICAgICAgICAgICAgICAgdmFyIGlkID0gTW9kZS5wcm90b3R5cGUuJGlkOwogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBjb25maWcuJG1vZGVzW2lkXTsKICAgICAgICAgICAgICAgIGlmICghbW9kZSkKICAgICAgICAgICAgICAgICAgICBjb25maWcuJG1vZGVzW2lkXSA9IG1vZGUgPSBuZXcgTW9kZSgpOwogICAgICAgICAgICAgICAgaWYgKCFjb25maWcuJG1vZGVzW2ldKQogICAgICAgICAgICAgICAgICAgIGNvbmZpZy4kbW9kZXNbaV0gPSBtb2RlOwogICAgICAgICAgICAgICAgdGhpcy4kZW1iZWRzLnB1c2goaSk7CiAgICAgICAgICAgICAgICB0aGlzLiRtb2Rlc1tpXSA9IG1vZGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBkZWxlZ2F0aW9ucyA9IFsidG9nZ2xlQmxvY2tDb21tZW50IiwgInRvZ2dsZUNvbW1lbnRMaW5lcyIsICJnZXROZXh0TGluZUluZGVudCIsIAogICAgICAgICAgICAiY2hlY2tPdXRkZW50IiwgImF1dG9PdXRkZW50IiwgInRyYW5zZm9ybUFjdGlvbiIsICJnZXRDb21wbGV0aW9ucyJdOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGVnYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIChmdW5jdGlvbihzY29wZSkgewogICAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBkZWxlZ2F0aW9uc1tpXTsKICAgICAgICAgICAgICB2YXIgZGVmYXVsdEhhbmRsZXIgPSBzY29wZVtmdW5jdGlvbk5hbWVdOwogICAgICAgICAgICAgIHNjb3BlW2RlbGVnYXRpb25zW2ldXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kZGVsZWdhdG9yKGZ1bmN0aW9uTmFtZSwgYXJndW1lbnRzLCBkZWZhdWx0SGFuZGxlcik7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSh0aGlzKSk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRkZWxlZ2F0b3IgPSBmdW5jdGlvbihtZXRob2QsIGFyZ3MsIGRlZmF1bHRIYW5kbGVyKSB7CiAgICAgICAgdmFyIHN0YXRlID0gYXJnc1swXSB8fCAic3RhcnQiOwogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGVbMl0pKSB7CiAgICAgICAgICAgICAgICB2YXIgbGFuZ3VhZ2UgPSBzdGF0ZVsyXVtzdGF0ZVsyXS5sZW5ndGggLSAxXTsKICAgICAgICAgICAgICAgIHZhciBtb2RlID0gdGhpcy4kbW9kZXNbbGFuZ3VhZ2VdOwogICAgICAgICAgICAgICAgaWYgKG1vZGUpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVbbWV0aG9kXS5hcHBseShtb2RlLCBbc3RhdGVbMV1dLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3MsIDEpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXSB8fCAic3RhcnQiOwogICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRlbWJlZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKCF0aGlzLiRtb2Rlc1t0aGlzLiRlbWJlZHNbaV1dKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBzcGxpdCA9IHN0YXRlLnNwbGl0KHRoaXMuJGVtYmVkc1tpXSk7CiAgICAgICAgICAgIGlmICghc3BsaXRbMF0gJiYgc3BsaXRbMV0pIHsKICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSBzcGxpdFsxXTsKICAgICAgICAgICAgICAgIHZhciBtb2RlID0gdGhpcy4kbW9kZXNbdGhpcy4kZW1iZWRzW2ldXTsKICAgICAgICAgICAgICAgIHJldHVybiBtb2RlW21ldGhvZF0uYXBwbHkobW9kZSwgYXJncyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIHJldCA9IGRlZmF1bHRIYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgICAgIHJldHVybiBkZWZhdWx0SGFuZGxlciA/IHJldCA6IHVuZGVmaW5lZDsKICAgIH07CgogICAgdGhpcy50cmFuc2Zvcm1BY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHBhcmFtKSB7CiAgICAgICAgaWYgKHRoaXMuJGJlaGF2aW91cikgewogICAgICAgICAgICB2YXIgYmVoYXZpb3VycyA9IHRoaXMuJGJlaGF2aW91ci5nZXRCZWhhdmlvdXJzKCk7CiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBiZWhhdmlvdXJzKSB7CiAgICAgICAgICAgICAgICBpZiAoYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gYmVoYXZpb3Vyc1trZXldW2FjdGlvbl0uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRLZXl3b3JkcyA9IGZ1bmN0aW9uKGFwcGVuZCkgewogICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uS2V5d29yZHMpIHsKICAgICAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy4kdG9rZW5pemVyLnJ1bGVzOwogICAgICAgICAgICB2YXIgY29tcGxldGlvbktleXdvcmRzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIHJ1bGUgaW4gcnVsZXMpIHsKICAgICAgICAgICAgICAgIHZhciBydWxlSXRyID0gcnVsZXNbcnVsZV07CiAgICAgICAgICAgICAgICBmb3IgKHZhciByID0gMCwgbCA9IHJ1bGVJdHIubGVuZ3RoOyByIDwgbDsgcisrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlSXRyW3JdLnRva2VuID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoL2tleXdvcmR8c3VwcG9ydHxzdG9yYWdlLy50ZXN0KHJ1bGVJdHJbcl0udG9rZW4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbktleXdvcmRzLnB1c2gocnVsZUl0cltyXS5yZWdleCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBydWxlSXRyW3JdLnRva2VuID09PSAib2JqZWN0IikgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMCwgYUxlbmd0aCA9IHJ1bGVJdHJbcl0udG9rZW4ubGVuZ3RoOyBhIDwgYUxlbmd0aDsgYSsrKSB7ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9rZXl3b3JkfHN1cHBvcnR8c3RvcmFnZS8udGVzdChydWxlSXRyW3JdLnRva2VuW2FdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gcnVsZUl0cltyXS5yZWdleC5tYXRjaCgvXCguKz9cKS9nKVthXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uS2V5d29yZHMucHVzaChydWxlLnN1YnN0cigxLCBydWxlLmxlbmd0aCAtIDIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25LZXl3b3JkcyA9IGNvbXBsZXRpb25LZXl3b3JkczsKICAgICAgICB9CiAgICAgICAgaWYgKCFhcHBlbmQpCiAgICAgICAgICAgIHJldHVybiB0aGlzLiRrZXl3b3JkTGlzdDsKICAgICAgICByZXR1cm4gY29tcGxldGlvbktleXdvcmRzLmNvbmNhdCh0aGlzLiRrZXl3b3JkTGlzdCB8fCBbXSk7CiAgICB9OwogICAgCiAgICB0aGlzLiRjcmVhdGVLZXl3b3JkTGlzdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy4kaGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW5pemVyKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuJGtleXdvcmRMaXN0ID0gdGhpcy4kaGlnaGxpZ2h0UnVsZXMuJGtleXdvcmRMaXN0IHx8IFtdOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGtleXdvcmRzID0gdGhpcy4ka2V5d29yZExpc3QgfHwgdGhpcy4kY3JlYXRlS2V5d29yZExpc3QoKTsKICAgICAgICByZXR1cm4ga2V5d29yZHMubWFwKGZ1bmN0aW9uKHdvcmQpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5hbWU6IHdvcmQsCiAgICAgICAgICAgICAgICB2YWx1ZTogd29yZCwKICAgICAgICAgICAgICAgIHNjb3JlOiAwLAogICAgICAgICAgICAgICAgbWV0YTogImtleXdvcmQiCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3RleHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvYXBwbHlfZGVsdGEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmZ1bmN0aW9uIHRocm93RGVsdGFFcnJvcihkZWx0YSwgZXJyb3JUZXh0KXsKICAgIGNvbnNvbGUubG9nKCJJbnZhbGlkIERlbHRhOiIsIGRlbHRhKTsKICAgIHRocm93ICJJbnZhbGlkIERlbHRhOiAiICsgZXJyb3JUZXh0Owp9CgpmdW5jdGlvbiBwb3NpdGlvbkluRG9jdW1lbnQoZG9jTGluZXMsIHBvc2l0aW9uKSB7CiAgICByZXR1cm4gcG9zaXRpb24ucm93ICAgID49IDAgJiYgcG9zaXRpb24ucm93ICAgIDwgIGRvY0xpbmVzLmxlbmd0aCAmJgogICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA+PSAwICYmIHBvc2l0aW9uLmNvbHVtbiA8PSBkb2NMaW5lc1twb3NpdGlvbi5yb3ddLmxlbmd0aDsKfQoKZnVuY3Rpb24gdmFsaWRhdGVEZWx0YShkb2NMaW5lcywgZGVsdGEpIHsKICAgIGlmIChkZWx0YS5hY3Rpb24gIT0gImluc2VydCIgJiYgZGVsdGEuYWN0aW9uICE9ICJyZW1vdmUiKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmFjdGlvbiBtdXN0IGJlICdpbnNlcnQnIG9yICdyZW1vdmUnIik7CiAgICBpZiAoIShkZWx0YS5saW5lcyBpbnN0YW5jZW9mIEFycmF5KSkKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5saW5lcyBtdXN0IGJlIGFuIEFycmF5Iik7CiAgICBpZiAoIWRlbHRhLnN0YXJ0IHx8ICFkZWx0YS5lbmQpCiAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5zdGFydC9lbmQgbXVzdCBiZSBhbiBwcmVzZW50Iik7CiAgICB2YXIgc3RhcnQgPSBkZWx0YS5zdGFydDsKICAgIGlmICghcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBkZWx0YS5zdGFydCkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQgbXVzdCBiZSBjb250YWluZWQgaW4gZG9jdW1lbnQiKTsKICAgIHZhciBlbmQgPSBkZWx0YS5lbmQ7CiAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJyZW1vdmUiICYmICFwb3NpdGlvbkluRG9jdW1lbnQoZG9jTGluZXMsIGVuZCkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuZW5kIG11c3QgY29udGFpbmVkIGluIGRvY3VtZW50IGZvciAncmVtb3ZlJyBhY3Rpb25zIik7CiAgICB2YXIgbnVtUmFuZ2VSb3dzID0gZW5kLnJvdyAtIHN0YXJ0LnJvdzsKICAgIHZhciBudW1SYW5nZUxhc3RMaW5lQ2hhcnMgPSAoZW5kLmNvbHVtbiAtIChudW1SYW5nZVJvd3MgPT0gMCA/IHN0YXJ0LmNvbHVtbiA6IDApKTsKICAgIGlmIChudW1SYW5nZVJvd3MgIT0gZGVsdGEubGluZXMubGVuZ3RoIC0gMSB8fCBkZWx0YS5saW5lc1tudW1SYW5nZVJvd3NdLmxlbmd0aCAhPSBudW1SYW5nZUxhc3RMaW5lQ2hhcnMpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEucmFuZ2UgbXVzdCBtYXRjaCBkZWx0YSBsaW5lcyIpOwp9CgpleHBvcnRzLmFwcGx5RGVsdGEgPSBmdW5jdGlvbihkb2NMaW5lcywgZGVsdGEsIGRvTm90VmFsaWRhdGUpIHsKICAgIAogICAgdmFyIHJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsKICAgIHZhciBzdGFydENvbHVtbiA9IGRlbHRhLnN0YXJ0LmNvbHVtbjsKICAgIHZhciBsaW5lID0gZG9jTGluZXNbcm93XSB8fCAiIjsKICAgIHN3aXRjaCAoZGVsdGEuYWN0aW9uKSB7CiAgICAgICAgY2FzZSAiaW5zZXJ0IjoKICAgICAgICAgICAgdmFyIGxpbmVzID0gZGVsdGEubGluZXM7CiAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkZWx0YS5saW5lc1swXSArIGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW3JvdywgMV0uY29uY2F0KGRlbHRhLmxpbmVzKTsKICAgICAgICAgICAgICAgIGRvY0xpbmVzLnNwbGljZS5hcHBseShkb2NMaW5lcywgYXJncyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZG9jTGluZXNbcm93XTsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3JvdyArIGRlbHRhLmxpbmVzLmxlbmd0aCAtIDFdICs9IGxpbmUuc3Vic3RyaW5nKHN0YXJ0Q29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJyZW1vdmUiOgogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gZGVsdGEuZW5kLmNvbHVtbjsKICAgICAgICAgICAgdmFyIGVuZFJvdyA9IGRlbHRhLmVuZC5yb3c7CiAgICAgICAgICAgIGlmIChyb3cgPT09IGVuZFJvdykgewogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGxpbmUuc3Vic3RyaW5nKGVuZENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UoCiAgICAgICAgICAgICAgICAgICAgcm93LCBlbmRSb3cgLSByb3cgKyAxLAogICAgICAgICAgICAgICAgICAgIGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW2VuZFJvd10uc3Vic3RyaW5nKGVuZENvbHVtbikKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn07Cn0pOwoKZGVmaW5lKCJhY2UvYW5jaG9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cgp2YXIgQW5jaG9yID0gZXhwb3J0cy5BbmNob3IgPSBmdW5jdGlvbihkb2MsIHJvdywgY29sdW1uKSB7CiAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTsKICAgIHRoaXMuYXR0YWNoKGRvYyk7CiAgICAKICAgIGlmICh0eXBlb2YgY29sdW1uID09ICJ1bmRlZmluZWQiKQogICAgICAgIHRoaXMuc2V0UG9zaXRpb24ocm93LnJvdywgcm93LmNvbHVtbik7CiAgICBlbHNlCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3csIGNvbHVtbik7Cn07CgooZnVuY3Rpb24oKSB7CgogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwogICAgdGhpcy5nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHRoaXMucm93LCB0aGlzLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5nZXREb2N1bWVudCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50OwogICAgfTsKICAgIHRoaXMuJGluc2VydFJpZ2h0ID0gZmFsc2U7CiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICBpZiAoZGVsdGEuc3RhcnQucm93ID09IGRlbHRhLmVuZC5yb3cgJiYgZGVsdGEuc3RhcnQucm93ICE9IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPiB0aGlzLnJvdykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAKICAgICAgICB2YXIgcG9pbnQgPSAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwge3JvdzogdGhpcy5yb3csIGNvbHVtbjogdGhpcy5jb2x1bW59LCB0aGlzLiRpbnNlcnRSaWdodCk7CiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihwb2ludC5yb3csIHBvaW50LmNvbHVtbiwgdHJ1ZSk7CiAgICB9OwogICAgCiAgICBmdW5jdGlvbiAkcG9pbnRzSW5PcmRlcihwb2ludDEsIHBvaW50MiwgZXF1YWxQb2ludHNJbk9yZGVyKSB7CiAgICAgICAgdmFyIGJDb2xJc0FmdGVyID0gZXF1YWxQb2ludHNJbk9yZGVyID8gcG9pbnQxLmNvbHVtbiA8PSBwb2ludDIuY29sdW1uIDogcG9pbnQxLmNvbHVtbiA8IHBvaW50Mi5jb2x1bW47CiAgICAgICAgcmV0dXJuIChwb2ludDEucm93IDwgcG9pbnQyLnJvdykgfHwgKHBvaW50MS5yb3cgPT0gcG9pbnQyLnJvdyAmJiBiQ29sSXNBZnRlcik7CiAgICB9CiAgICAgICAgICAgIAogICAgZnVuY3Rpb24gJGdldFRyYW5zZm9ybWVkUG9pbnQoZGVsdGEsIHBvaW50LCBtb3ZlSWZFcXVhbCkgewogICAgICAgIHZhciBkZWx0YUlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIHZhciBkZWx0YVJvd1NoaWZ0ID0gKGRlbHRhSXNJbnNlcnQgPyAxIDogLTEpICogKGRlbHRhLmVuZC5yb3cgICAgLSBkZWx0YS5zdGFydC5yb3cpOwogICAgICAgIHZhciBkZWx0YUNvbFNoaWZ0ID0gKGRlbHRhSXNJbnNlcnQgPyAxIDogLTEpICogKGRlbHRhLmVuZC5jb2x1bW4gLSBkZWx0YS5zdGFydC5jb2x1bW4pOwogICAgICAgIHZhciBkZWx0YVN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICAgICAgdmFyIGRlbHRhRW5kID0gZGVsdGFJc0luc2VydCA/IGRlbHRhU3RhcnQgOiBkZWx0YS5lbmQ7IC8vIENvbGxhcHNlIGluc2VydCByYW5nZS4KICAgICAgICBpZiAoJHBvaW50c0luT3JkZXIocG9pbnQsIGRlbHRhU3RhcnQsIG1vdmVJZkVxdWFsKSkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcm93OiBwb2ludC5yb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IHBvaW50LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoJHBvaW50c0luT3JkZXIoZGVsdGFFbmQsIHBvaW50LCAhbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdyArIGRlbHRhUm93U2hpZnQsCiAgICAgICAgICAgICAgICBjb2x1bW46IHBvaW50LmNvbHVtbiArIChwb2ludC5yb3cgPT0gZGVsdGFFbmQucm93ID8gZGVsdGFDb2xTaGlmdCA6IDApCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJvdzogZGVsdGFTdGFydC5yb3csCiAgICAgICAgICAgIGNvbHVtbjogZGVsdGFTdGFydC5jb2x1bW4KICAgICAgICB9OwogICAgfQogICAgdGhpcy5zZXRQb3NpdGlvbiA9IGZ1bmN0aW9uKHJvdywgY29sdW1uLCBub0NsaXApIHsKICAgICAgICB2YXIgcG9zOwogICAgICAgIGlmIChub0NsaXApIHsKICAgICAgICAgICAgcG9zID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvcyA9IHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQocm93LCBjb2x1bW4pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMucm93ID09IHBvcy5yb3cgJiYgdGhpcy5jb2x1bW4gPT0gcG9zLmNvbHVtbikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgb2xkID0gewogICAgICAgICAgICByb3c6IHRoaXMucm93LAogICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uCiAgICAgICAgfTsKCiAgICAgICAgdGhpcy5yb3cgPSBwb3Mucm93OwogICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtbjsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZSIsIHsKICAgICAgICAgICAgb2xkOiBvbGQsCiAgICAgICAgICAgIHZhbHVlOiBwb3MKICAgICAgICB9KTsKICAgIH07CiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oZG9jKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvYyB8fCB0aGlzLmRvY3VtZW50OwogICAgICAgIHRoaXMuZG9jdW1lbnQub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKICAgIH07CiAgICB0aGlzLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgcG9zID0ge307CgogICAgICAgIGlmIChyb3cgPj0gdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBwb3Mucm93ID0gTWF0aC5tYXgoMCwgdGhpcy5kb2N1bWVudC5nZXRMZW5ndGgoKSAtIDEpOwogICAgICAgICAgICBwb3MuY29sdW1uID0gdGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocm93IDwgMCkgewogICAgICAgICAgICBwb3Mucm93ID0gMDsKICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBwb3Mucm93ID0gcm93OwogICAgICAgICAgICBwb3MuY29sdW1uID0gTWF0aC5taW4odGhpcy5kb2N1bWVudC5nZXRMaW5lKHBvcy5yb3cpLmxlbmd0aCwgTWF0aC5tYXgoMCwgY29sdW1uKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29sdW1uIDwgMCkKICAgICAgICAgICAgcG9zLmNvbHVtbiA9IDA7CgogICAgICAgIHJldHVybiBwb3M7CiAgICB9OwoKfSkuY2FsbChBbmNob3IucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvZG9jdW1lbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9hcHBseV9kZWx0YSIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9yYW5nZSIsImFjZS9hbmNob3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIGFwcGx5RGVsdGEgPSByZXF1aXJlKCIuL2FwcGx5X2RlbHRhIikuYXBwbHlEZWx0YTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEFuY2hvciA9IHJlcXVpcmUoIi4vYW5jaG9yIikuQW5jaG9yOwoKdmFyIERvY3VtZW50ID0gZnVuY3Rpb24odGV4dE9yTGluZXMpIHsKICAgIHRoaXMuJGxpbmVzID0gWyIiXTsKICAgIGlmICh0ZXh0T3JMaW5lcy5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGV4dE9yTGluZXMpKSB7CiAgICAgICAgdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0T3JMaW5lcyk7CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjowfSwgdGV4dE9yTGluZXMpOwogICAgfQp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIGxlbiA9IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxOwogICAgICAgIHRoaXMucmVtb3ZlKG5ldyBSYW5nZSgwLCAwLCBsZW4sIHRoaXMuZ2V0TGluZShsZW4pLmxlbmd0aCkpOwogICAgICAgIHRoaXMuaW5zZXJ0KHtyb3c6IDAsIGNvbHVtbjogMH0sIHRleHQpOwogICAgfTsKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRBbGxMaW5lcygpLmpvaW4odGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkpOwogICAgfTsKICAgIHRoaXMuY3JlYXRlQW5jaG9yID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4gbmV3IEFuY2hvcih0aGlzLCByb3csIGNvbHVtbik7CiAgICB9OwogICAgaWYgKCJhYWEiLnNwbGl0KC9hLykubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xyXG58XHIvZywgIlxuIikuc3BsaXQoIlxuIik7CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kc3BsaXQgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgICAgIHJldHVybiB0ZXh0LnNwbGl0KC9cclxufFxyfFxuLyk7CiAgICAgICAgfTsKICAgIH0KCgogICAgdGhpcy4kZGV0ZWN0TmV3TGluZSA9IGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICB2YXIgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eLio/KFxyXG58XHJ8XG4pL20pOwogICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gbWF0Y2ggPyBtYXRjaFsxXSA6ICJcbiI7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpOwogICAgfTsKICAgIHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHN3aXRjaCAodGhpcy4kbmV3TGluZU1vZGUpIHsKICAgICAgICAgIGNhc2UgIndpbmRvd3MiOgogICAgICAgICAgICByZXR1cm4gIlxyXG4iOwogICAgICAgICAgY2FzZSAidW5peCI6CiAgICAgICAgICAgIHJldHVybiAiXG4iOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGF1dG9OZXdMaW5lIHx8ICJcbiI7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRhdXRvTmV3TGluZSA9ICIiOwogICAgdGhpcy4kbmV3TGluZU1vZGUgPSAiYXV0byI7CiAgICB0aGlzLnNldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24obmV3TGluZU1vZGUpIHsKICAgICAgICBpZiAodGhpcy4kbmV3TGluZU1vZGUgPT09IG5ld0xpbmVNb2RlKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gbmV3TGluZU1vZGU7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VOZXdMaW5lTW9kZSIpOwogICAgfTsKICAgIHRoaXMuZ2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbmV3TGluZU1vZGU7CiAgICB9OwogICAgdGhpcy5pc05ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgcmV0dXJuICh0ZXh0ID09ICJcclxuIiB8fCB0ZXh0ID09ICJcciIgfHwgdGV4dCA9PSAiXG4iKTsKICAgIH07CiAgICB0aGlzLmdldExpbmUgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbGluZXNbcm93XSB8fCAiIjsKICAgIH07CiAgICB0aGlzLmdldExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbGluZXMuc2xpY2UoZmlyc3RSb3csIGxhc3RSb3cgKyAxKTsKICAgIH07CiAgICB0aGlzLmdldEFsbExpbmVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXMoMCwgdGhpcy5nZXRMZW5ndGgoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMZW5ndGggPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbGluZXMubGVuZ3RoOwogICAgfTsKICAgIHRoaXMuZ2V0VGV4dFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHJhbmdlKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmdldExpbmVzRm9yUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciBsaW5lczsKICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93KSB7CiAgICAgICAgICAgIGxpbmVzID0gW3RoaXMuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4pXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IHRoaXMuZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93KTsKICAgICAgICAgICAgbGluZXNbMF0gPSAobGluZXNbMF0gfHwgIiIpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgbCA9IGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgIGlmIChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93ID09IGwpCiAgICAgICAgICAgICAgICBsaW5lc1tsXSA9IGxpbmVzW2xdLnN1YnN0cmluZygwLCByYW5nZS5lbmQuY29sdW1uKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpbmVzOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TGluZXMgPSBmdW5jdGlvbihyb3csIGxpbmVzKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TGluZXMgaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBpbnNlcnRGdWxsTGluZXMgbWV0aG9kIGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0RnVsbExpbmVzKHJvdywgbGluZXMpOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50LnJlbW92ZUxpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgcmVtb3ZlRnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZ1bGxMaW5lcyhmaXJzdFJvdywgbGFzdFJvdyk7CiAgICB9OwogICAgdGhpcy5pbnNlcnROZXdMaW5lID0gZnVuY3Rpb24ocG9zaXRpb24pIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5pbnNlcnROZXdMaW5lIGlzIGRlcHJlY2F0ZWQuIFVzZSBpbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgWycnLCAnJ10pIGluc3RlYWQuIik7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsiIiwgIiJdKTsKICAgIH07CiAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRoaXMuZ2V0TGVuZ3RoKCkgPD0gMSkKICAgICAgICAgICAgdGhpcy4kZGV0ZWN0TmV3TGluZSh0ZXh0KTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyhwb3NpdGlvbiwgdGhpcy4kc3BsaXQodGV4dCkpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0SW5MaW5lID0gZnVuY3Rpb24ocG9zaXRpb24sIHRleHQpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB0aGlzLnBvcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiArIHRleHQubGVuZ3RoKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJpbnNlcnQiLAogICAgICAgICAgICBsaW5lczogW3RleHRdCiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xpcHBlZFBvcyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuZ2V0TGVuZ3RoKCk7CiAgICAgICAgaWYgKHJvdyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aDsKICAgICAgICB9IGVsc2UgaWYgKHJvdyA8IDApIHsKICAgICAgICAgICAgcm93ID0gMDsKICAgICAgICB9IGVsc2UgaWYgKHJvdyA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgcm93ID0gbGVuZ3RoIC0gMTsKICAgICAgICAgICAgY29sdW1uID0gdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgICB2YXIgbGluZSA9IHRoaXMuZ2V0TGluZShyb3cpOwogICAgICAgIGlmIChjb2x1bW4gPT0gdW5kZWZpbmVkKQogICAgICAgICAgICBjb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICBjb2x1bW4gPSBNYXRoLm1pbihNYXRoLm1heChjb2x1bW4sIDApLCBsaW5lLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgfTsKICAgIAogICAgdGhpcy5jbG9uZVBvcyA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHJldHVybiB7cm93OiBwb3Mucm93LCBjb2x1bW46IHBvcy5jb2x1bW59OwogICAgfTsKICAgIAogICAgdGhpcy5wb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuJGNsaXBQb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuZ2V0TGVuZ3RoKCk7CiAgICAgICAgaWYgKHBvc2l0aW9uLnJvdyA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgcG9zaXRpb24ucm93ID0gTWF0aC5tYXgoMCwgbGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IHRoaXMuZ2V0TGluZShsZW5ndGggLSAxKS5sZW5ndGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zaXRpb24ucm93ID0gTWF0aC5tYXgoMCwgcG9zaXRpb24ucm93KTsKICAgICAgICAgICAgcG9zaXRpb24uY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24uY29sdW1uLCAwKSwgdGhpcy5nZXRMaW5lKHBvc2l0aW9uLnJvdykubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0RnVsbExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIHJvdyA9IE1hdGgubWluKE1hdGgubWF4KHJvdywgMCksIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgICAgIHZhciBjb2x1bW4gPSAwOwogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KFsiIl0pOwogICAgICAgICAgICBjb2x1bW4gPSAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxpbmVzID0gWyIiXS5jb25jYXQobGluZXMpOwogICAgICAgICAgICByb3ctLTsKICAgICAgICAgICAgY29sdW1uID0gdGhpcy4kbGluZXNbcm93XS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0sIGxpbmVzKTsKICAgIH07ICAgIAogICAgdGhpcy5pbnNlcnRNZXJnZWRMaW5lcyA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBsaW5lcykgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgdmFyIGVuZCA9IHsKICAgICAgICAgICAgcm93OiBzdGFydC5yb3cgKyBsaW5lcy5sZW5ndGggLSAxLAogICAgICAgICAgICBjb2x1bW46IChsaW5lcy5sZW5ndGggPT0gMSA/IHN0YXJ0LmNvbHVtbiA6IDApICsgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoCiAgICAgICAgfTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJpbnNlcnQiLAogICAgICAgICAgICBsaW5lczogbGluZXMKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhlbmQpOwogICAgfTsKICAgIHRoaXMucmVtb3ZlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB0aGlzLmNsaXBwZWRQb3MocmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZSh7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH0pCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3Moc3RhcnQpOwogICAgfTsKICAgIHRoaXMucmVtb3ZlSW5MaW5lID0gZnVuY3Rpb24ocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgc3RhcnRDb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB0aGlzLmNsaXBwZWRQb3Mocm93LCBlbmRDb2x1bW4pOwogICAgICAgIAogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUZ1bGxMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgZmlyc3RSb3cgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBmaXJzdFJvdyksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICBsYXN0Um93ICA9IE1hdGgubWluKE1hdGgubWF4KDAsIGxhc3RSb3cgKSwgdGhpcy5nZXRMZW5ndGgoKSAtIDEpOwogICAgICAgIHZhciBkZWxldGVGaXJzdE5ld0xpbmUgPSBsYXN0Um93ID09IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxICYmIGZpcnN0Um93ID4gMDsKICAgICAgICB2YXIgZGVsZXRlTGFzdE5ld0xpbmUgID0gbGFzdFJvdyAgPCB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSAoIGRlbGV0ZUZpcnN0TmV3TGluZSA/IGZpcnN0Um93IC0gMSAgICAgICAgICAgICAgICAgIDogZmlyc3RSb3cgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIHN0YXJ0Q29sID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyB0aGlzLmdldExpbmUoc3RhcnRSb3cpLmxlbmd0aCA6IDAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBlbmRSb3cgICA9ICggZGVsZXRlTGFzdE5ld0xpbmUgID8gbGFzdFJvdyArIDEgICAgICAgICAgICAgICAgICAgOiBsYXN0Um93ICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kQ29sICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5nZXRMaW5lKGVuZFJvdykubGVuZ3RoICk7IAogICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2wsIGVuZFJvdywgZW5kQ29sKTsKICAgICAgICB2YXIgZGVsZXRlZExpbmVzID0gdGhpcy4kbGluZXMuc2xpY2UoZmlyc3RSb3csIGxhc3RSb3cgKyAxKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogcmFuZ2Uuc3RhcnQsCiAgICAgICAgICAgIGVuZDogcmFuZ2UuZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHJhbmdlKQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBkZWxldGVkTGluZXM7CiAgICB9OwogICAgdGhpcy5yZW1vdmVOZXdMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgaWYgKHJvdyA8IHRoaXMuZ2V0TGVuZ3RoKCkgLSAxICYmIHJvdyA+PSAwKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5wb3Mocm93LCB0aGlzLmdldExpbmUocm93KS5sZW5ndGgpLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyAxLCAwKSwKICAgICAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgICAgICBsaW5lczogWyIiLCAiIl0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KSB7CiAgICAgICAgaWYgKCEocmFuZ2UgaW5zdGFuY2VvZiBSYW5nZSkpCiAgICAgICAgICAgIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IDAgJiYgcmFuZ2UuaXNFbXB0eSgpKQogICAgICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgaWYgKHRleHQgPT0gdGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpKQogICAgICAgICAgICByZXR1cm4gcmFuZ2UuZW5kOwoKICAgICAgICB0aGlzLnJlbW92ZShyYW5nZSk7CiAgICAgICAgdmFyIGVuZDsKICAgICAgICBpZiAodGV4dCkgewogICAgICAgICAgICBlbmQgPSB0aGlzLmluc2VydChyYW5nZS5zdGFydCwgdGV4dCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBlbmQgPSByYW5nZS5zdGFydDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGVuZDsKICAgIH07CiAgICB0aGlzLmFwcGx5RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGRlbHRhcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGFzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5yZXZlcnREZWx0YXMgPSBmdW5jdGlvbihkZWx0YXMpIHsKICAgICAgICBmb3IgKHZhciBpPWRlbHRhcy5sZW5ndGgtMTsgaT49MDsgaS0tKSB7CiAgICAgICAgICAgIHRoaXMucmV2ZXJ0RGVsdGEoZGVsdGFzW2ldKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIGRvTm90VmFsaWRhdGUpIHsKICAgICAgICB2YXIgaXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgaWYgKGlzSW5zZXJ0ID8gZGVsdGEubGluZXMubGVuZ3RoIDw9IDEgJiYgIWRlbHRhLmxpbmVzWzBdCiAgICAgICAgICAgIDogIVJhbmdlLmNvbXBhcmVQb2ludHMoZGVsdGEuc3RhcnQsIGRlbHRhLmVuZCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoaXNJbnNlcnQgJiYgZGVsdGEubGluZXMubGVuZ3RoID4gMjAwMDApIHsKICAgICAgICAgICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEoZGVsdGEsIDIwMDAwKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGFwcGx5RGVsdGEodGhpcy4kbGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKTsKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2UiLCBkZWx0YSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy4kc3BsaXRBbmRhcHBseUxhcmdlRGVsdGEgPSBmdW5jdGlvbihkZWx0YSwgTUFYKSB7CiAgICAgICAgdmFyIGxpbmVzID0gZGVsdGEubGluZXM7CiAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSBNQVggKyAxOwogICAgICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7IAogICAgICAgIHZhciBjb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICAgICAgZm9yICh2YXIgZnJvbSA9IDAsIHRvID0gMDsgZnJvbSA8IGw7IGZyb20gPSB0bykgewogICAgICAgICAgICB0byArPSBNQVggLSAxOwogICAgICAgICAgICB2YXIgY2h1bmsgPSBsaW5lcy5zbGljZShmcm9tLCB0byk7CiAgICAgICAgICAgIGNodW5rLnB1c2goIiIpOwogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdyArIGZyb20sIGNvbHVtbiksCiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMucG9zKHJvdyArIHRvLCBjb2x1bW4gPSAwKSwKICAgICAgICAgICAgICAgIGFjdGlvbjogZGVsdGEuYWN0aW9uLAogICAgICAgICAgICAgICAgbGluZXM6IGNodW5rCiAgICAgICAgICAgIH0sIHRydWUpOwogICAgICAgIH0KICAgICAgICBkZWx0YS5saW5lcyA9IGxpbmVzLnNsaWNlKGZyb20pOwogICAgICAgIGRlbHRhLnN0YXJ0LnJvdyA9IHJvdyArIGZyb207CiAgICAgICAgZGVsdGEuc3RhcnQuY29sdW1uID0gY29sdW1uOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YShkZWx0YSwgdHJ1ZSk7CiAgICB9OwogICAgdGhpcy5yZXZlcnREZWx0YSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHRoaXMuY2xvbmVQb3MoZGVsdGEuc3RhcnQpLAogICAgICAgICAgICBlbmQ6IHRoaXMuY2xvbmVQb3MoZGVsdGEuZW5kKSwKICAgICAgICAgICAgYWN0aW9uOiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiID8gInJlbW92ZSIgOiAiaW5zZXJ0IiksCiAgICAgICAgICAgIGxpbmVzOiBkZWx0YS5saW5lcy5zbGljZSgpCiAgICAgICAgfSk7CiAgICB9OwogICAgdGhpcy5pbmRleFRvUG9zaXRpb24gPSBmdW5jdGlvbihpbmRleCwgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0Um93IHx8IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgaW5kZXggLT0gbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aDsKICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpLCBjb2x1bW46IGluZGV4ICsgbGluZXNbaV0ubGVuZ3RoICsgbmV3bGluZUxlbmd0aH07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7cm93OiBsLTEsIGNvbHVtbjogaW5kZXggKyBsaW5lc1tsLTFdLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgfTsKICAgIHRoaXMucG9zaXRpb25Ub0luZGV4ID0gZnVuY3Rpb24ocG9zLCBzdGFydFJvdykgewogICAgICAgIHZhciBsaW5lcyA9IHRoaXMuJGxpbmVzIHx8IHRoaXMuZ2V0QWxsTGluZXMoKTsKICAgICAgICB2YXIgbmV3bGluZUxlbmd0aCA9IHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpLmxlbmd0aDsKICAgICAgICB2YXIgaW5kZXggPSAwOwogICAgICAgIHZhciByb3cgPSBNYXRoLm1pbihwb3Mucm93LCBsaW5lcy5sZW5ndGgpOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwOyBpIDwgcm93OyArK2kpCiAgICAgICAgICAgIGluZGV4ICs9IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CgogICAgICAgIHJldHVybiBpbmRleCArIHBvcy5jb2x1bW47CiAgICB9OwoKfSkuY2FsbChEb2N1bWVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5Eb2N1bWVudCA9IERvY3VtZW50Owp9KTsKCmRlZmluZSgiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cgp2YXIgQmFja2dyb3VuZFRva2VuaXplciA9IGZ1bmN0aW9uKHRva2VuaXplciwgZWRpdG9yKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICAgIHRoaXMubGluZXMgPSBbXTsKICAgIHRoaXMuc3RhdGVzID0gW107CiAgICB0aGlzLmN1cnJlbnRMaW5lID0gMDsKICAgIHRoaXMudG9rZW5pemVyID0gdG9rZW5pemVyOwoKICAgIHZhciBzZWxmID0gdGhpczsKCiAgICB0aGlzLiR3b3JrZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXNlbGYucnVubmluZykgeyByZXR1cm47IH0KCiAgICAgICAgdmFyIHdvcmtlclN0YXJ0ID0gbmV3IERhdGUoKTsKICAgICAgICB2YXIgY3VycmVudExpbmUgPSBzZWxmLmN1cnJlbnRMaW5lOwogICAgICAgIHZhciBlbmRMaW5lID0gLTE7CiAgICAgICAgdmFyIGRvYyA9IHNlbGYuZG9jOwoKICAgICAgICB2YXIgc3RhcnRMaW5lID0gY3VycmVudExpbmU7CiAgICAgICAgd2hpbGUgKHNlbGYubGluZXNbY3VycmVudExpbmVdKQogICAgICAgICAgICBjdXJyZW50TGluZSsrOwogICAgICAgIAogICAgICAgIHZhciBsZW4gPSBkb2MuZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHByb2Nlc3NlZExpbmVzID0gMDsKICAgICAgICBzZWxmLnJ1bm5pbmcgPSBmYWxzZTsKICAgICAgICB3aGlsZSAoY3VycmVudExpbmUgPCBsZW4pIHsKICAgICAgICAgICAgc2VsZi4kdG9rZW5pemVSb3coY3VycmVudExpbmUpOwogICAgICAgICAgICBlbmRMaW5lID0gY3VycmVudExpbmU7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGN1cnJlbnRMaW5lKys7CiAgICAgICAgICAgIH0gd2hpbGUgKHNlbGYubGluZXNbY3VycmVudExpbmVdKTsKICAgICAgICAgICAgcHJvY2Vzc2VkTGluZXMgKys7CiAgICAgICAgICAgIGlmICgocHJvY2Vzc2VkTGluZXMgJSA1ID09PSAwKSAmJiAobmV3IERhdGUoKSAtIHdvcmtlclN0YXJ0KSA+IDIwKSB7CiAgICAgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHNlbGYuJHdvcmtlciwgMjApOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2VsZi5jdXJyZW50TGluZSA9IGN1cnJlbnRMaW5lOwogICAgICAgIAogICAgICAgIGlmIChlbmRMaW5lID09IC0xKQogICAgICAgICAgICBlbmRMaW5lID0gY3VycmVudExpbmU7CiAgICAgICAgCiAgICAgICAgaWYgKHN0YXJ0TGluZSA8PSBlbmRMaW5lKQogICAgICAgICAgICBzZWxmLmZpcmVVcGRhdGVFdmVudChzdGFydExpbmUsIGVuZExpbmUpOwogICAgfTsKfTsKCihmdW5jdGlvbigpewoKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgIHRoaXMuc2V0VG9rZW5pemVyID0gZnVuY3Rpb24odG9rZW5pemVyKSB7CiAgICAgICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7CiAgICAgICAgdGhpcy5saW5lcyA9IFtdOwogICAgICAgIHRoaXMuc3RhdGVzID0gW107CgogICAgICAgIHRoaXMuc3RhcnQoMCk7CiAgICB9OwogICAgdGhpcy5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykgewogICAgICAgIHRoaXMuZG9jID0gZG9jOwogICAgICAgIHRoaXMubGluZXMgPSBbXTsKICAgICAgICB0aGlzLnN0YXRlcyA9IFtdOwoKICAgICAgICB0aGlzLnN0b3AoKTsKICAgIH07CiAgICB0aGlzLmZpcmVVcGRhdGVFdmVudCA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgICAgIGZpcnN0OiBmaXJzdFJvdywKICAgICAgICAgICAgbGFzdDogbGFzdFJvdwogICAgICAgIH07CiAgICAgICAgdGhpcy5fc2lnbmFsKCJ1cGRhdGUiLCB7ZGF0YTogZGF0YX0pOwogICAgfTsKICAgIHRoaXMuc3RhcnQgPSBmdW5jdGlvbihzdGFydFJvdykgewogICAgICAgIHRoaXMuY3VycmVudExpbmUgPSBNYXRoLm1pbihzdGFydFJvdyB8fCAwLCB0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLmRvYy5nZXRMZW5ndGgoKSk7CiAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UodGhpcy5jdXJyZW50TGluZSwgdGhpcy5saW5lcy5sZW5ndGgpOwogICAgICAgIHRoaXMuc3RhdGVzLnNwbGljZSh0aGlzLmN1cnJlbnRMaW5lLCB0aGlzLnN0YXRlcy5sZW5ndGgpOwoKICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtlciwgNzAwKTsKICAgIH07CiAgICAKICAgIHRoaXMuc2NoZWR1bGVTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5ydW5uaW5nKQogICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBzZXRUaW1lb3V0KHRoaXMuJHdvcmtlciwgNzAwKTsKICAgIH07CgogICAgdGhpcy4kdXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHZhciBzdGFydFJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsKICAgICAgICB2YXIgbGVuID0gZGVsdGEuZW5kLnJvdyAtIHN0YXJ0Um93OwoKICAgICAgICBpZiAobGVuID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMubGluZXNbc3RhcnRSb3ddID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIikgewogICAgICAgICAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7CiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnNwbGljZShzdGFydFJvdywgbGVuICsgMSwgbnVsbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheShsZW4gKyAxKTsKICAgICAgICAgICAgYXJncy51bnNoaWZ0KHN0YXJ0Um93LCAxKTsKICAgICAgICAgICAgdGhpcy5saW5lcy5zcGxpY2UuYXBwbHkodGhpcy5saW5lcywgYXJncyk7CiAgICAgICAgICAgIHRoaXMuc3RhdGVzLnNwbGljZS5hcHBseSh0aGlzLnN0YXRlcywgYXJncyk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmN1cnJlbnRMaW5lID0gTWF0aC5taW4oc3RhcnRSb3csIHRoaXMuY3VycmVudExpbmUsIHRoaXMuZG9jLmdldExlbmd0aCgpKTsKCiAgICAgICAgdGhpcy5zdG9wKCk7CiAgICB9OwogICAgdGhpcy5zdG9wID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMucnVubmluZykKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucnVubmluZyk7CiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgICB9OwogICAgdGhpcy5nZXRUb2tlbnMgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy5saW5lc1tyb3ddIHx8IHRoaXMuJHRva2VuaXplUm93KHJvdyk7CiAgICB9OwogICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaW5lID09IHJvdykKICAgICAgICAgICAgdGhpcy4kdG9rZW5pemVSb3cocm93KTsKICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZXNbcm93XSB8fCAic3RhcnQiOwogICAgfTsKCiAgICB0aGlzLiR0b2tlbml6ZVJvdyA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVzW3JvdyAtIDFdOwoKICAgICAgICB2YXIgZGF0YSA9IHRoaXMudG9rZW5pemVyLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUsIHJvdyk7CgogICAgICAgIGlmICh0aGlzLnN0YXRlc1tyb3ddICsgIiIgIT09IGRhdGEuc3RhdGUgKyAiIikgewogICAgICAgICAgICB0aGlzLnN0YXRlc1tyb3ddID0gZGF0YS5zdGF0ZTsKICAgICAgICAgICAgdGhpcy5saW5lc1tyb3cgKyAxXSA9IG51bGw7CiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRMaW5lID4gcm93ICsgMSkKICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExpbmUgPSByb3cgKyAxOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50TGluZSA9PSByb3cpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50TGluZSA9IHJvdyArIDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5saW5lc1tyb3ddID0gZGF0YS50b2tlbnM7CiAgICB9OwoKfSkuY2FsbChCYWNrZ3JvdW5kVG9rZW5pemVyLnByb3RvdHlwZSk7CgpleHBvcnRzLkJhY2tncm91bmRUb2tlbml6ZXIgPSBCYWNrZ3JvdW5kVG9rZW5pemVyOwp9KTsKCmRlZmluZSgiYWNlL3NlYXJjaF9oaWdobGlnaHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7CnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwoKdmFyIFNlYXJjaEhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJlZ0V4cCwgY2xhenosIHR5cGUpIHsKICAgIHRoaXMuc2V0UmVnZXhwKHJlZ0V4cCk7CiAgICB0aGlzLmNsYXp6ID0gY2xheno7CiAgICB0aGlzLnR5cGUgPSB0eXBlIHx8ICJ0ZXh0IjsKfTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuTUFYX1JBTkdFUyA9IDUwMDsKICAgIAogICAgdGhpcy5zZXRSZWdleHAgPSBmdW5jdGlvbihyZWdFeHApIHsKICAgICAgICBpZiAodGhpcy5yZWdFeHArIiIgPT0gcmVnRXhwKyIiKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5yZWdFeHAgPSByZWdFeHA7CiAgICAgICAgdGhpcy5jYWNoZSA9IFtdOwogICAgfTsKCiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGh0bWwsIG1hcmtlckxheWVyLCBzZXNzaW9uLCBjb25maWcpIHsKICAgICAgICBpZiAoIXRoaXMucmVnRXhwKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIHN0YXJ0ID0gY29uZmlnLmZpcnN0Um93LCBlbmQgPSBjb25maWcubGFzdFJvdzsKCiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7CiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLmNhY2hlW2ldOwogICAgICAgICAgICBpZiAocmFuZ2VzID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHJhbmdlcyA9IGxhbmcuZ2V0TWF0Y2hPZmZzZXRzKHNlc3Npb24uZ2V0TGluZShpKSwgdGhpcy5yZWdFeHApOwogICAgICAgICAgICAgICAgaWYgKHJhbmdlcy5sZW5ndGggPiB0aGlzLk1BWF9SQU5HRVMpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gcmFuZ2VzLnNsaWNlKDAsIHRoaXMuTUFYX1JBTkdFUyk7CiAgICAgICAgICAgICAgICByYW5nZXMgPSByYW5nZXMubWFwKGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShpLCBtYXRjaC5vZmZzZXQsIGksIG1hdGNoLm9mZnNldCArIG1hdGNoLmxlbmd0aCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVbaV0gPSByYW5nZXMubGVuZ3RoID8gcmFuZ2VzIDogIiI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAodmFyIGogPSByYW5nZXMubGVuZ3RoOyBqIC0tOyApIHsKICAgICAgICAgICAgICAgIG1hcmtlckxheWVyLmRyYXdTaW5nbGVMaW5lTWFya2VyKAogICAgICAgICAgICAgICAgICAgIGh0bWwsIHJhbmdlc1tqXS50b1NjcmVlblJhbmdlKHNlc3Npb24pLCB0aGlzLmNsYXp6LCBjb25maWcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoU2VhcmNoSGlnaGxpZ2h0LnByb3RvdHlwZSk7CgpleHBvcnRzLlNlYXJjaEhpZ2hsaWdodCA9IFNlYXJjaEhpZ2hsaWdodDsKfSk7CgpkZWZpbmUoImFjZS9lZGl0X3Nlc3Npb24vZm9sZF9saW5lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwpmdW5jdGlvbiBGb2xkTGluZShmb2xkRGF0YSwgZm9sZHMpIHsKICAgIHRoaXMuZm9sZERhdGEgPSBmb2xkRGF0YTsKICAgIGlmIChBcnJheS5pc0FycmF5KGZvbGRzKSkgewogICAgICAgIHRoaXMuZm9sZHMgPSBmb2xkczsKICAgIH0gZWxzZSB7CiAgICAgICAgZm9sZHMgPSB0aGlzLmZvbGRzID0gWyBmb2xkcyBdOwogICAgfQoKICAgIHZhciBsYXN0ID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV07CiAgICB0aGlzLnJhbmdlID0gbmV3IFJhbmdlKGZvbGRzWzBdLnN0YXJ0LnJvdywgZm9sZHNbMF0uc3RhcnQuY29sdW1uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0LmVuZC5yb3csIGxhc3QuZW5kLmNvbHVtbik7CiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5yYW5nZS5zdGFydDsKICAgIHRoaXMuZW5kICAgPSB0aGlzLnJhbmdlLmVuZDsKCiAgICB0aGlzLmZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgewogICAgICAgIGZvbGQuc2V0Rm9sZExpbmUodGhpcyk7CiAgICB9LCB0aGlzKTsKfQoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5zaGlmdFJvdyA9IGZ1bmN0aW9uKHNoaWZ0KSB7CiAgICAgICAgdGhpcy5zdGFydC5yb3cgKz0gc2hpZnQ7CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHNoaWZ0OwogICAgICAgIHRoaXMuZm9sZHMuZm9yRWFjaChmdW5jdGlvbihmb2xkKSB7CiAgICAgICAgICAgIGZvbGQuc3RhcnQucm93ICs9IHNoaWZ0OwogICAgICAgICAgICBmb2xkLmVuZC5yb3cgKz0gc2hpZnQ7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuYWRkRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHsKICAgICAgICBpZiAoZm9sZC5zYW1lUm93KSB7CiAgICAgICAgICAgIGlmIChmb2xkLnN0YXJ0LnJvdyA8IHRoaXMuc3RhcnRSb3cgfHwgZm9sZC5lbmRSb3cgPiB0aGlzLmVuZFJvdykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW4ndCBhZGQgYSBmb2xkIHRvIHRoaXMgRm9sZExpbmUgYXMgaXQgaGFzIG5vIGNvbm5lY3Rpb24iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmZvbGRzLnB1c2goZm9sZCk7CiAgICAgICAgICAgIHRoaXMuZm9sZHMuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gLWEucmFuZ2UuY29tcGFyZUVuZChiLnN0YXJ0LnJvdywgYi5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2UuY29tcGFyZUVuZChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pID4gMCkgewogICAgICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93OwogICAgICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uID0gIGZvbGQuZW5kLmNvbHVtbjsKICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJhbmdlLmNvbXBhcmVTdGFydChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikgPCAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IGZvbGQuc3RhcnQucm93OwogICAgICAgICAgICAgICAgdGhpcy5zdGFydC5jb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZm9sZC5zdGFydC5yb3cgPT0gdGhpcy5lbmQucm93KSB7CiAgICAgICAgICAgIHRoaXMuZm9sZHMucHVzaChmb2xkKTsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZC5lbmQucm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBmb2xkLmVuZC5jb2x1bW47CiAgICAgICAgfSBlbHNlIGlmIChmb2xkLmVuZC5yb3cgPT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgdGhpcy5mb2xkcy51bnNoaWZ0KGZvbGQpOwogICAgICAgICAgICB0aGlzLnN0YXJ0LnJvdyA9IGZvbGQuc3RhcnQucm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBmb2xkIHRvIEZvbGRSb3cgdGhhdCBkb2Vzbid0IGhhdmUgYSBtYXRjaGluZyByb3ciKTsKICAgICAgICB9CiAgICAgICAgZm9sZC5mb2xkTGluZSA9IHRoaXM7CiAgICB9OwoKICAgIHRoaXMuY29udGFpbnNSb3cgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICByZXR1cm4gcm93ID49IHRoaXMuc3RhcnQucm93ICYmIHJvdyA8PSB0aGlzLmVuZC5yb3c7CiAgICB9OwoKICAgIHRoaXMud2FsayA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgICAgIHZhciBsYXN0RW5kID0gMCwKICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmZvbGRzLAogICAgICAgICAgICBmb2xkLAogICAgICAgICAgICBjbXAsIHN0b3AsIGlzTmV3Um93ID0gdHJ1ZTsKCiAgICAgICAgaWYgKGVuZFJvdyA9PSBudWxsKSB7CiAgICAgICAgICAgIGVuZFJvdyA9IHRoaXMuZW5kLnJvdzsKICAgICAgICAgICAgZW5kQ29sdW1uID0gdGhpcy5lbmQuY29sdW1uOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBmb2xkID0gZm9sZHNbaV07CgogICAgICAgICAgICBjbXAgPSBmb2xkLnJhbmdlLmNvbXBhcmVTdGFydChlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGVuZFJvdywgZW5kQ29sdW1uLCBsYXN0RW5kLCBpc05ld1Jvdyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0b3AgPSBjYWxsYmFjayhudWxsLCBmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4sIGxhc3RFbmQsIGlzTmV3Um93KTsKICAgICAgICAgICAgc3RvcCA9ICFzdG9wICYmIGNhbGxiYWNrKGZvbGQucGxhY2Vob2xkZXIsIGZvbGQuc3RhcnQucm93LCBmb2xkLnN0YXJ0LmNvbHVtbiwgbGFzdEVuZCk7CiAgICAgICAgICAgIGlmIChzdG9wIHx8IGNtcCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlzTmV3Um93ID0gIWZvbGQuc2FtZVJvdzsKICAgICAgICAgICAgbGFzdEVuZCA9IGZvbGQuZW5kLmNvbHVtbjsKICAgICAgICB9CiAgICAgICAgY2FsbGJhY2sobnVsbCwgZW5kUm93LCBlbmRDb2x1bW4sIGxhc3RFbmQsIGlzTmV3Um93KTsKICAgIH07CgogICAgdGhpcy5nZXROZXh0Rm9sZFRvID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgZm9sZCwgY21wOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb2xkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBmb2xkID0gdGhpcy5mb2xkc1tpXTsKICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlRW5kKHJvdywgY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICBmb2xkOiBmb2xkLAogICAgICAgICAgICAgICAgICAgIGtpbmQ6ICJhZnRlciIKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGZvbGQ6IGZvbGQsCiAgICAgICAgICAgICAgICAgICAga2luZDogImluc2lkZSIKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuYWRkUmVtb3ZlQ2hhcnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgbGVuKSB7CiAgICAgICAgdmFyIHJldCA9IHRoaXMuZ2V0TmV4dEZvbGRUbyhyb3csIGNvbHVtbiksCiAgICAgICAgICAgIGZvbGQsIGZvbGRzOwogICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgZm9sZCA9IHJldC5mb2xkOwogICAgICAgICAgICBpZiAocmV0LmtpbmQgPT0gImluc2lkZSIKICAgICAgICAgICAgICAgICYmIGZvbGQuc3RhcnQuY29sdW1uICE9IGNvbHVtbgogICAgICAgICAgICAgICAgJiYgZm9sZC5zdGFydC5yb3cgIT0gcm93KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cocm93LCBjb2x1bW4sIGZvbGQpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGQuc3RhcnQucm93ID09IHJvdykgewogICAgICAgICAgICAgICAgZm9sZHMgPSB0aGlzLmZvbGRzOwogICAgICAgICAgICAgICAgdmFyIGkgPSBmb2xkcy5pbmRleE9mKGZvbGQpOwogICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBsZW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGk7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIGZvbGQgPSBmb2xkc1tpXTsKICAgICAgICAgICAgICAgICAgICBmb2xkLnN0YXJ0LmNvbHVtbiArPSBsZW47CiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb2xkLnNhbWVSb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBmb2xkLmVuZC5jb2x1bW4gKz0gbGVuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5lbmQuY29sdW1uICs9IGxlbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5zcGxpdCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdmFyIHBvcyA9IHRoaXMuZ2V0TmV4dEZvbGRUbyhyb3csIGNvbHVtbik7CiAgICAgICAgCiAgICAgICAgaWYgKCFwb3MgfHwgcG9zLmtpbmQgPT0gImluc2lkZSIpCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAKICAgICAgICB2YXIgZm9sZCA9IHBvcy5mb2xkOwogICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZm9sZHM7CiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTsKICAgICAgICAKICAgICAgICB2YXIgaSA9IGZvbGRzLmluZGV4T2YoZm9sZCk7CiAgICAgICAgdmFyIGZvbGRCZWZvcmUgPSBmb2xkc1tpIC0gMV07CiAgICAgICAgdGhpcy5lbmQucm93ID0gZm9sZEJlZm9yZS5lbmQucm93OwogICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IGZvbGRCZWZvcmUuZW5kLmNvbHVtbjsKICAgICAgICBmb2xkcyA9IGZvbGRzLnNwbGljZShpLCBmb2xkcy5sZW5ndGggLSBpKTsKCiAgICAgICAgdmFyIG5ld0ZvbGRMaW5lID0gbmV3IEZvbGRMaW5lKGZvbGREYXRhLCBmb2xkcyk7CiAgICAgICAgZm9sZERhdGEuc3BsaWNlKGZvbGREYXRhLmluZGV4T2YodGhpcykgKyAxLCAwLCBuZXdGb2xkTGluZSk7CiAgICAgICAgcmV0dXJuIG5ld0ZvbGRMaW5lOwogICAgfTsKCiAgICB0aGlzLm1lcmdlID0gZnVuY3Rpb24oZm9sZExpbmVOZXh0KSB7CiAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVOZXh0LmZvbGRzOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hZGRGb2xkKGZvbGRzW2ldKTsKICAgICAgICB9CiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy5mb2xkRGF0YTsKICAgICAgICBmb2xkRGF0YS5zcGxpY2UoZm9sZERhdGEuaW5kZXhPZihmb2xkTGluZU5leHQpLCAxKTsKICAgIH07CgogICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByZXQgPSBbdGhpcy5yYW5nZS50b1N0cmluZygpICsgIjogWyIgXTsKCiAgICAgICAgdGhpcy5mb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKICAgICAgICAgICAgcmV0LnB1c2goIiAgIiArIGZvbGQudG9TdHJpbmcoKSk7CiAgICAgICAgfSk7CiAgICAgICAgcmV0LnB1c2goIl0iKTsKICAgICAgICByZXR1cm4gcmV0LmpvaW4oIlxuIik7CiAgICB9OwoKICAgIHRoaXMuaWR4VG9Qb3NpdGlvbiA9IGZ1bmN0aW9uKGlkeCkgewogICAgICAgIHZhciBsYXN0Rm9sZEVuZENvbHVtbiA9IDA7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb2xkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgZm9sZCA9IHRoaXMuZm9sZHNbaV07CgogICAgICAgICAgICBpZHggLT0gZm9sZC5zdGFydC5jb2x1bW4gLSBsYXN0Rm9sZEVuZENvbHVtbjsKICAgICAgICAgICAgaWYgKGlkeCA8IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgcm93OiBmb2xkLnN0YXJ0LnJvdywKICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGZvbGQuc3RhcnQuY29sdW1uICsgaWR4CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZHggLT0gZm9sZC5wbGFjZWhvbGRlci5sZW5ndGg7CiAgICAgICAgICAgIGlmIChpZHggPCAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZC5zdGFydDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGFzdEZvbGRFbmRDb2x1bW4gPSBmb2xkLmVuZC5jb2x1bW47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICByb3c6IHRoaXMuZW5kLnJvdywKICAgICAgICAgICAgY29sdW1uOiB0aGlzLmVuZC5jb2x1bW4gKyBpZHgKICAgICAgICB9OwogICAgfTsKfSkuY2FsbChGb2xkTGluZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Gb2xkTGluZSA9IEZvbGRMaW5lOwp9KTsKCmRlZmluZSgiYWNlL3JhbmdlX2xpc3QiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwp2YXIgY29tcGFyZVBvaW50cyA9IFJhbmdlLmNvbXBhcmVQb2ludHM7Cgp2YXIgUmFuZ2VMaXN0ID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLnJhbmdlcyA9IFtdOwogICAgdGhpcy4kYmlhcyA9IDE7Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmNvbXBhcmVQb2ludHMgPSBjb21wYXJlUG9pbnRzOwoKICAgIHRoaXMucG9pbnRJbmRleCA9IGZ1bmN0aW9uKHBvcywgZXhjbHVkZUVkZ2VzLCBzdGFydEluZGV4KSB7CiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlczsKCiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXggfHwgMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gbGlzdFtpXTsKICAgICAgICAgICAgdmFyIGNtcEVuZCA9IGNvbXBhcmVQb2ludHMocG9zLCByYW5nZS5lbmQpOwogICAgICAgICAgICBpZiAoY21wRW5kID4gMCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY21wU3RhcnQgPSBjb21wYXJlUG9pbnRzKHBvcywgcmFuZ2Uuc3RhcnQpOwogICAgICAgICAgICBpZiAoY21wRW5kID09PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIGV4Y2x1ZGVFZGdlcyAmJiBjbXBTdGFydCAhPT0gMCA/IC1pLTIgOiBpOwogICAgICAgICAgICBpZiAoY21wU3RhcnQgPiAwIHx8IChjbXBTdGFydCA9PT0gMCAmJiAhZXhjbHVkZUVkZ2VzKSkKICAgICAgICAgICAgICAgIHJldHVybiBpOwoKICAgICAgICAgICAgcmV0dXJuIC1pLTE7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtaSAtIDE7CiAgICB9OwoKICAgIHRoaXMuYWRkID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgZXhjbHVkZUVkZ2VzID0gIXJhbmdlLmlzRW1wdHkoKTsKICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHRoaXMucG9pbnRJbmRleChyYW5nZS5zdGFydCwgZXhjbHVkZUVkZ2VzKTsKICAgICAgICBpZiAoc3RhcnRJbmRleCA8IDApCiAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAtc3RhcnRJbmRleCAtIDE7CgogICAgICAgIHZhciBlbmRJbmRleCA9IHRoaXMucG9pbnRJbmRleChyYW5nZS5lbmQsIGV4Y2x1ZGVFZGdlcywgc3RhcnRJbmRleCk7CgogICAgICAgIGlmIChlbmRJbmRleCA8IDApCiAgICAgICAgICAgIGVuZEluZGV4ID0gLWVuZEluZGV4IC0gMTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVuZEluZGV4Kys7CiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZShzdGFydEluZGV4LCBlbmRJbmRleCAtIHN0YXJ0SW5kZXgsIHJhbmdlKTsKICAgIH07CgogICAgdGhpcy5hZGRMaXN0ID0gZnVuY3Rpb24obGlzdCkgewogICAgICAgIHZhciByZW1vdmVkID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07ICkgewogICAgICAgICAgICByZW1vdmVkLnB1c2guYXBwbHkocmVtb3ZlZCwgdGhpcy5hZGQobGlzdFtpXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgIH07CgogICAgdGhpcy5zdWJzdHJhY3RQb2ludCA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7CgogICAgICAgIGlmIChpID49IDApCiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhbmdlcy5zcGxpY2UoaSwgMSk7CiAgICB9OwogICAgdGhpcy5tZXJnZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByZW1vdmVkID0gW107CiAgICAgICAgdmFyIGxpc3QgPSB0aGlzLnJhbmdlczsKICAgICAgICAKICAgICAgICBsaXN0ID0gbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVQb2ludHMoYS5zdGFydCwgYi5zdGFydCk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgdmFyIG5leHQgPSBsaXN0WzBdLCByYW5nZTsKICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgcmFuZ2UgPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gbGlzdFtpXTsKICAgICAgICAgICAgdmFyIGNtcCA9IGNvbXBhcmVQb2ludHMocmFuZ2UuZW5kLCBuZXh0LnN0YXJ0KTsKICAgICAgICAgICAgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChjbXAgPT0gMCAmJiAhcmFuZ2UuaXNFbXB0eSgpICYmICFuZXh0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGNvbXBhcmVQb2ludHMocmFuZ2UuZW5kLCBuZXh0LmVuZCkgPCAwKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gbmV4dC5lbmQucm93OwogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IG5leHQuZW5kLmNvbHVtbjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGlzdC5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgIHJlbW92ZWQucHVzaChuZXh0KTsKICAgICAgICAgICAgbmV4dCA9IHJhbmdlOwogICAgICAgICAgICBpLS07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMucmFuZ2VzID0gbGlzdDsKCiAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICB9OwoKICAgIHRoaXMuY29udGFpbnMgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnBvaW50SW5kZXgoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pID49IDA7CiAgICB9OwoKICAgIHRoaXMuY29udGFpbnNQb2ludCA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHJldHVybiB0aGlzLnBvaW50SW5kZXgocG9zKSA+PSAwOwogICAgfTsKCiAgICB0aGlzLnJhbmdlQXRQb2ludCA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHZhciBpID0gdGhpcy5wb2ludEluZGV4KHBvcyk7CiAgICAgICAgaWYgKGkgPj0gMCkKICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzW2ldOwogICAgfTsKCgogICAgdGhpcy5jbGlwUm93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3cpIHsKICAgICAgICB2YXIgbGlzdCA9IHRoaXMucmFuZ2VzOwogICAgICAgIGlmIChsaXN0WzBdLnN0YXJ0LnJvdyA+IGVuZFJvdyB8fCBsaXN0W2xpc3QubGVuZ3RoIC0gMV0uc3RhcnQucm93IDwgc3RhcnRSb3cpCiAgICAgICAgICAgIHJldHVybiBbXTsKCiAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0aGlzLnBvaW50SW5kZXgoe3Jvdzogc3RhcnRSb3csIGNvbHVtbjogMH0pOwogICAgICAgIGlmIChzdGFydEluZGV4IDwgMCkKICAgICAgICAgICAgc3RhcnRJbmRleCA9IC1zdGFydEluZGV4IC0gMTsKICAgICAgICB2YXIgZW5kSW5kZXggPSB0aGlzLnBvaW50SW5kZXgoe3JvdzogZW5kUm93LCBjb2x1bW46IDB9LCBzdGFydEluZGV4KTsKICAgICAgICBpZiAoZW5kSW5kZXggPCAwKQogICAgICAgICAgICBlbmRJbmRleCA9IC1lbmRJbmRleCAtIDE7CgogICAgICAgIHZhciBjbGlwcGVkID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7CiAgICAgICAgICAgIGNsaXBwZWQucHVzaChsaXN0W2ldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNsaXBwZWQ7CiAgICB9OwoKICAgIHRoaXMucmVtb3ZlQWxsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNwbGljZSgwLCB0aGlzLnJhbmdlcy5sZW5ndGgpOwogICAgfTsKCiAgICB0aGlzLmF0dGFjaCA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICBpZiAodGhpcy5zZXNzaW9uKQogICAgICAgICAgICB0aGlzLmRldGFjaCgpOwoKICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwogICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLiRvbkNoYW5nZS5iaW5kKHRoaXMpOwoKICAgICAgICB0aGlzLnNlc3Npb24ub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2UpOwogICAgfTsKCiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5zZXNzaW9uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUxpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTsKICAgICAgICB0aGlzLnNlc3Npb24gPSBudWxsOwogICAgfTsKCiAgICB0aGlzLiRvbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICAgICAgdmFyIGVuZCA9IGRlbHRhLmVuZDsKICAgICAgICB2YXIgc3RhcnRSb3cgPSBzdGFydC5yb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IGVuZC5yb3c7CiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gcmFuZ2VzLmxlbmd0aDsgaSA8IG47IGkrKykgewogICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKICAgICAgICAgICAgaWYgKHIuZW5kLnJvdyA+PSBzdGFydFJvdykKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiKSB7CiAgICAgICAgICAgIHZhciBsaW5lRGlmID0gZW5kUm93IC0gc3RhcnRSb3c7CiAgICAgICAgICAgIHZhciBjb2xEaWZmID0gLXN0YXJ0LmNvbHVtbiArIGVuZC5jb2x1bW47CiAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKICAgICAgICAgICAgICAgIGlmIChyLnN0YXJ0LnJvdyA+IHN0YXJ0Um93KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgCiAgICAgICAgICAgICAgICBpZiAoci5zdGFydC5yb3cgPT0gc3RhcnRSb3cgJiYgci5zdGFydC5jb2x1bW4gPj0gc3RhcnQuY29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc3RhcnQuY29sdW1uID09IHN0YXJ0LmNvbHVtbiAmJiB0aGlzLiRiaWFzIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByLnN0YXJ0LmNvbHVtbiArPSBjb2xEaWZmOwogICAgICAgICAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyArPSBsaW5lRGlmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChyLmVuZC5yb3cgPT0gc3RhcnRSb3cgJiYgci5lbmQuY29sdW1uID49IHN0YXJ0LmNvbHVtbikgewogICAgICAgICAgICAgICAgICAgIGlmIChyLmVuZC5jb2x1bW4gPT0gc3RhcnQuY29sdW1uICYmIHRoaXMuJGJpYXMgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoci5lbmQuY29sdW1uID09IHN0YXJ0LmNvbHVtbiAmJiBjb2xEaWZmID4gMCAmJiBpIDwgbiAtIDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIuZW5kLmNvbHVtbiA+IHIuc3RhcnQuY29sdW1uICYmIHIuZW5kLmNvbHVtbiA9PSByYW5nZXNbaSsxXS5zdGFydC5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmVuZC5jb2x1bW4gLT0gY29sRGlmZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgci5lbmQuY29sdW1uICs9IGNvbERpZmY7CiAgICAgICAgICAgICAgICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgbGluZURpZiA9IHN0YXJ0Um93IC0gZW5kUm93OwogICAgICAgICAgICB2YXIgY29sRGlmZiA9IHN0YXJ0LmNvbHVtbiAtIGVuZC5jb2x1bW47CiAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHIuc3RhcnQucm93ID4gZW5kUm93KQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHIuZW5kLnJvdyA8IGVuZFJvdwogICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3cgPCByLmVuZC5yb3cgCiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXJ0Um93ID09IHIuZW5kLnJvdyAmJiBzdGFydC5jb2x1bW4gPCByLmVuZC5jb2x1bW4KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICByLmVuZC5yb3cgPSBzdGFydFJvdzsKICAgICAgICAgICAgICAgICAgICByLmVuZC5jb2x1bW4gPSBzdGFydC5jb2x1bW47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChyLmVuZC5yb3cgPT0gZW5kUm93KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIuZW5kLmNvbHVtbiA8PSBlbmQuY29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lRGlmIHx8IHIuZW5kLmNvbHVtbiA+IHN0YXJ0LmNvbHVtbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgci5lbmQuY29sdW1uID0gc3RhcnQuY29sdW1uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgci5lbmQucm93ID0gc3RhcnQucm93OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByLmVuZC5jb2x1bW4gKz0gY29sRGlmZjsKICAgICAgICAgICAgICAgICAgICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoci5lbmQucm93ID4gZW5kUm93KSB7CiAgICAgICAgICAgICAgICAgICAgci5lbmQucm93ICs9IGxpbmVEaWY7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChyLnN0YXJ0LnJvdyA8IGVuZFJvdwogICAgICAgICAgICAgICAgICAgICYmICgKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3cgPCByLnN0YXJ0LnJvdyAKICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RhcnRSb3cgPT0gci5zdGFydC5yb3cgJiYgc3RhcnQuY29sdW1uIDwgci5zdGFydC5jb2x1bW4KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyA9IHN0YXJ0Um93OwogICAgICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uID0gc3RhcnQuY29sdW1uOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoci5zdGFydC5yb3cgPT0gZW5kUm93KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHIuc3RhcnQuY29sdW1uIDw9IGVuZC5jb2x1bW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVEaWYgfHwgci5zdGFydC5jb2x1bW4gPiBzdGFydC5jb2x1bW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uID0gc3RhcnQuY29sdW1uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgci5zdGFydC5yb3cgPSBzdGFydC5yb3c7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uICs9IGNvbERpZmY7CiAgICAgICAgICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ICs9IGxpbmVEaWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoci5zdGFydC5yb3cgPiBlbmRSb3cpIHsKICAgICAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyArPSBsaW5lRGlmOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAobGluZURpZiAhPSAwICYmIGkgPCBuKSB7CiAgICAgICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IHJhbmdlc1tpXTsKICAgICAgICAgICAgICAgIHIuc3RhcnQucm93ICs9IGxpbmVEaWY7CiAgICAgICAgICAgICAgICByLmVuZC5yb3cgKz0gbGluZURpZjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKFJhbmdlTGlzdC5wcm90b3R5cGUpOwoKZXhwb3J0cy5SYW5nZUxpc3QgPSBSYW5nZUxpc3Q7Cn0pOwoKZGVmaW5lKCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2VfbGlzdCIsImFjZS9saWIvb29wIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2VMaXN0ID0gcmVxdWlyZSgiLi4vcmFuZ2VfbGlzdCIpLlJhbmdlTGlzdDsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEZvbGQgPSBleHBvcnRzLkZvbGQgPSBmdW5jdGlvbihyYW5nZSwgcGxhY2Vob2xkZXIpIHsKICAgIHRoaXMuZm9sZExpbmUgPSBudWxsOwogICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyOwogICAgdGhpcy5yYW5nZSA9IHJhbmdlOwogICAgdGhpcy5zdGFydCA9IHJhbmdlLnN0YXJ0OwogICAgdGhpcy5lbmQgPSByYW5nZS5lbmQ7CgogICAgdGhpcy5zYW1lUm93ID0gcmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3c7CiAgICB0aGlzLnN1YkZvbGRzID0gdGhpcy5yYW5nZXMgPSBbXTsKfTsKCm9vcC5pbmhlcml0cyhGb2xkLCBSYW5nZUxpc3QpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gJyInICsgdGhpcy5wbGFjZWhvbGRlciArICciICcgKyB0aGlzLnJhbmdlLnRvU3RyaW5nKCk7CiAgICB9OwoKICAgIHRoaXMuc2V0Rm9sZExpbmUgPSBmdW5jdGlvbihmb2xkTGluZSkgewogICAgICAgIHRoaXMuZm9sZExpbmUgPSBmb2xkTGluZTsKICAgICAgICB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgewogICAgICAgICAgICBmb2xkLnNldEZvbGRMaW5lKGZvbGRMaW5lKTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2UuY2xvbmUoKTsKICAgICAgICB2YXIgZm9sZCA9IG5ldyBGb2xkKHJhbmdlLCB0aGlzLnBsYWNlaG9sZGVyKTsKICAgICAgICB0aGlzLnN1YkZvbGRzLmZvckVhY2goZnVuY3Rpb24oc3ViRm9sZCkgewogICAgICAgICAgICBmb2xkLnN1YkZvbGRzLnB1c2goc3ViRm9sZC5jbG9uZSgpKTsKICAgICAgICB9KTsKICAgICAgICBmb2xkLmNvbGxhcHNlQ2hpbGRyZW4gPSB0aGlzLmNvbGxhcHNlQ2hpbGRyZW47CiAgICAgICAgcmV0dXJuIGZvbGQ7CiAgICB9OwoKICAgIHRoaXMuYWRkU3ViRm9sZCA9IGZ1bmN0aW9uKGZvbGQpIHsKICAgICAgICBpZiAodGhpcy5yYW5nZS5pc0VxdWFsKGZvbGQpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3VtZVJhbmdlKGZvbGQsIHRoaXMuc3RhcnQpOwoKICAgICAgICB2YXIgcm93ID0gZm9sZC5zdGFydC5yb3csIGNvbHVtbiA9IGZvbGQuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGkgPSAwLCBjbXAgPSAtMTsgaSA8IHRoaXMuc3ViRm9sZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY21wID0gdGhpcy5zdWJGb2xkc1tpXS5yYW5nZS5jb21wYXJlKHJvdywgY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCAhPSAxKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZhciBhZnRlclN0YXJ0ID0gdGhpcy5zdWJGb2xkc1tpXTsKICAgICAgICB2YXIgZmlyc3RDb25zdW1lZCA9IDA7CgogICAgICAgIGlmIChjbXAgPT0gMCkgewogICAgICAgICAgICBpZiAoYWZ0ZXJTdGFydC5yYW5nZS5jb250YWluc1JhbmdlKGZvbGQpKQogICAgICAgICAgICAgICAgcmV0dXJuIGFmdGVyU3RhcnQuYWRkU3ViRm9sZChmb2xkKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZmlyc3RDb25zdW1lZCA9IDE7CiAgICAgICAgfQogICAgICAgIHZhciByb3cgPSBmb2xkLnJhbmdlLmVuZC5yb3csIGNvbHVtbiA9IGZvbGQucmFuZ2UuZW5kLmNvbHVtbjsKICAgICAgICBmb3IgKHZhciBqID0gaSwgY21wID0gLTE7IGogPCB0aGlzLnN1YkZvbGRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuc3ViRm9sZHNbal0ucmFuZ2UuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgIT0gMSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY21wID09IDApICBqKys7CiAgICAgICAgdmFyIGNvbnN1bWVkRm9sZHMgPSB0aGlzLnN1YkZvbGRzLnNwbGljZShpLCBqIC0gaSwgZm9sZCk7CiAgICAgICAgdmFyIGxhc3QgPSBjbXAgPT0gMCA/IGNvbnN1bWVkRm9sZHMubGVuZ3RoIC0gMSA6IGNvbnN1bWVkRm9sZHMubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGsgPSBmaXJzdENvbnN1bWVkOyBrIDwgbGFzdDsgaysrKSB7CiAgICAgICAgICAgIGZvbGQuYWRkU3ViRm9sZChjb25zdW1lZEZvbGRzW2tdKTsKICAgICAgICB9CiAgICAgICAgZm9sZC5zZXRGb2xkTGluZSh0aGlzLmZvbGRMaW5lKTsKCiAgICAgICAgcmV0dXJuIGZvbGQ7CiAgICB9OwogICAgCiAgICB0aGlzLnJlc3RvcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHJlc3RvcmVSYW5nZShyYW5nZSwgdGhpcy5zdGFydCk7CiAgICB9OwoKfSkuY2FsbChGb2xkLnByb3RvdHlwZSk7CgpmdW5jdGlvbiBjb25zdW1lUG9pbnQocG9pbnQsIGFuY2hvcikgewogICAgcG9pbnQucm93IC09IGFuY2hvci5yb3c7CiAgICBpZiAocG9pbnQucm93ID09IDApCiAgICAgICAgcG9pbnQuY29sdW1uIC09IGFuY2hvci5jb2x1bW47Cn0KZnVuY3Rpb24gY29uc3VtZVJhbmdlKHJhbmdlLCBhbmNob3IpIHsKICAgIGNvbnN1bWVQb2ludChyYW5nZS5zdGFydCwgYW5jaG9yKTsKICAgIGNvbnN1bWVQb2ludChyYW5nZS5lbmQsIGFuY2hvcik7Cn0KZnVuY3Rpb24gcmVzdG9yZVBvaW50KHBvaW50LCBhbmNob3IpIHsKICAgIGlmIChwb2ludC5yb3cgPT0gMCkKICAgICAgICBwb2ludC5jb2x1bW4gKz0gYW5jaG9yLmNvbHVtbjsKICAgIHBvaW50LnJvdyArPSBhbmNob3Iucm93Owp9CmZ1bmN0aW9uIHJlc3RvcmVSYW5nZShyYW5nZSwgYW5jaG9yKSB7CiAgICByZXN0b3JlUG9pbnQocmFuZ2Uuc3RhcnQsIGFuY2hvcik7CiAgICByZXN0b3JlUG9pbnQocmFuZ2UuZW5kLCBhbmNob3IpOwp9Cgp9KTsKCmRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2VkaXRfc2Vzc2lvbi9mb2xkX2xpbmUiLCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGQiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBGb2xkTGluZSA9IHJlcXVpcmUoIi4vZm9sZF9saW5lIikuRm9sZExpbmU7CnZhciBGb2xkID0gcmVxdWlyZSgiLi9mb2xkIikuRm9sZDsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CgpmdW5jdGlvbiBGb2xkaW5nKCkgewogICAgdGhpcy5nZXRGb2xkQXQgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgc2lkZSkgewogICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUocm93KTsKICAgICAgICBpZiAoIWZvbGRMaW5lKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHM7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSBmb2xkc1tpXS5yYW5nZTsKICAgICAgICAgICAgaWYgKHJhbmdlLmNvbnRhaW5zKHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgaWYgKHNpZGUgPT0gMSAmJiByYW5nZS5pc0VuZChyb3csIGNvbHVtbikgJiYgIXJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWRlID09IC0xICYmIHJhbmdlLmlzU3RhcnQocm93LCBjb2x1bW4pICYmICFyYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmb2xkc1tpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRzSW5SYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgdmFyIGVuZCA9IHJhbmdlLmVuZDsKICAgICAgICB2YXIgZm9sZExpbmVzID0gdGhpcy4kZm9sZERhdGE7CiAgICAgICAgdmFyIGZvdW5kRm9sZHMgPSBbXTsKCiAgICAgICAgc3RhcnQuY29sdW1uICs9IDE7CiAgICAgICAgZW5kLmNvbHVtbiAtPSAxOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRMaW5lcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgY21wID0gZm9sZExpbmVzW2ldLnJhbmdlLmNvbXBhcmVSYW5nZShyYW5nZSk7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMikgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoY21wID09IC0yKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmVzW2ldLmZvbGRzOwogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGRzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICB2YXIgZm9sZCA9IGZvbGRzW2pdOwogICAgICAgICAgICAgICAgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlUmFuZ2UocmFuZ2UpOwogICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMikgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbXAgPT0gMikgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICBpZiAoY21wID09IDQyKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3VuZEZvbGRzLnB1c2goZm9sZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhcnQuY29sdW1uIC09IDE7CiAgICAgICAgZW5kLmNvbHVtbiArPSAxOwoKICAgICAgICByZXR1cm4gZm91bmRGb2xkczsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0ID0gZnVuY3Rpb24ocmFuZ2VzKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmFuZ2VzKSkgewogICAgICAgICAgICB2YXIgZm9sZHMgPSBbXTsKICAgICAgICAgICAgcmFuZ2VzLmZvckVhY2goZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgICAgIGZvbGRzID0gZm9sZHMuY29uY2F0KHRoaXMuZ2V0Rm9sZHNJblJhbmdlKHJhbmdlKSk7CiAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBmb2xkcyA9IHRoaXMuZ2V0Rm9sZHNJblJhbmdlKHJhbmdlcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb2xkczsKICAgIH07CiAgICB0aGlzLmdldEFsbEZvbGRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGZvbGRzID0gW107CiAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmVzLmxlbmd0aDsgaSsrKQogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvbGRMaW5lc1tpXS5mb2xkcy5sZW5ndGg7IGorKykKICAgICAgICAgICAgICAgIGZvbGRzLnB1c2goZm9sZExpbmVzW2ldLmZvbGRzW2pdKTsKCiAgICAgICAgcmV0dXJuIGZvbGRzOwogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFN0cmluZ0F0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIHRyaW0sIGZvbGRMaW5lKSB7CiAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZSB8fCB0aGlzLmdldEZvbGRMaW5lKHJvdyk7CiAgICAgICAgaWYgKCFmb2xkTGluZSkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciBsYXN0Rm9sZCA9IHsKICAgICAgICAgICAgZW5kOiB7IGNvbHVtbjogMCB9CiAgICAgICAgfTsKICAgICAgICB2YXIgc3RyLCBmb2xkOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9sZExpbmUuZm9sZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZm9sZCA9IGZvbGRMaW5lLmZvbGRzW2ldOwogICAgICAgICAgICB2YXIgY21wID0gZm9sZC5yYW5nZS5jb21wYXJlRW5kKHJvdywgY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgc3RyID0gdGhpcwogICAgICAgICAgICAgICAgICAgIC5nZXRMaW5lKGZvbGQuc3RhcnQucm93KQogICAgICAgICAgICAgICAgICAgIC5zdWJzdHJpbmcobGFzdEZvbGQuZW5kLmNvbHVtbiwgZm9sZC5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoY21wID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0Rm9sZCA9IGZvbGQ7CiAgICAgICAgfQogICAgICAgIGlmICghc3RyKQogICAgICAgICAgICBzdHIgPSB0aGlzLmdldExpbmUoZm9sZC5zdGFydC5yb3cpLnN1YnN0cmluZyhsYXN0Rm9sZC5lbmQuY29sdW1uKTsKCiAgICAgICAgaWYgKHRyaW0gPT0gLTEpCiAgICAgICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIGNvbHVtbiAtIGxhc3RGb2xkLmVuZC5jb2x1bW4pOwogICAgICAgIGVsc2UgaWYgKHRyaW0gPT0gMSkKICAgICAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoY29sdW1uIC0gbGFzdEZvbGQuZW5kLmNvbHVtbik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gc3RyOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRMaW5lID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRMaW5lKSB7CiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7CiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIGlmIChzdGFydEZvbGRMaW5lKQogICAgICAgICAgICBpID0gZm9sZERhdGEuaW5kZXhPZihzdGFydEZvbGRMaW5lKTsKICAgICAgICBpZiAoaSA9PSAtMSkKICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgZm9yIChpOyBpIDwgZm9sZERhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZERhdGFbaV07CiAgICAgICAgICAgIGlmIChmb2xkTGluZS5zdGFydC5yb3cgPD0gZG9jUm93ICYmIGZvbGRMaW5lLmVuZC5yb3cgPj0gZG9jUm93KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZExpbmU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZExpbmUuZW5kLnJvdyA+IGRvY1JvdykgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgdGhpcy5nZXROZXh0Rm9sZExpbmUgPSBmdW5jdGlvbihkb2NSb3csIHN0YXJ0Rm9sZExpbmUpIHsKICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgaWYgKHN0YXJ0Rm9sZExpbmUpCiAgICAgICAgICAgIGkgPSBmb2xkRGF0YS5pbmRleE9mKHN0YXJ0Rm9sZExpbmUpOwogICAgICAgIGlmIChpID09IC0xKQogICAgICAgICAgICBpID0gMDsKICAgICAgICBmb3IgKGk7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTsKICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmVuZC5yb3cgPj0gZG9jUm93KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZm9sZExpbmU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZGVkUm93Q291bnQgPSBmdW5jdGlvbihmaXJzdCwgbGFzdCkgewogICAgICAgIHZhciBmb2xkRGF0YSA9IHRoaXMuJGZvbGREYXRhLCByb3dDb3VudCA9IGxhc3QtZmlyc3QrMTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGREYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IGZvbGREYXRhW2ldLAogICAgICAgICAgICAgICAgZW5kID0gZm9sZExpbmUuZW5kLnJvdywKICAgICAgICAgICAgICAgIHN0YXJ0ID0gZm9sZExpbmUuc3RhcnQucm93OwogICAgICAgICAgICBpZiAoZW5kID49IGxhc3QpIHsKICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IGxhc3QpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gZmlyc3QpCiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09IGxhc3Qtc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCA9IDA7IC8vIGluIG9uZSBmb2xkCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIGlmIChlbmQgPj0gZmlyc3QpewogICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IGZpcnN0KSAvLyBmb2xkIGluc2lkZSByYW5nZQogICAgICAgICAgICAgICAgICAgIHJvd0NvdW50IC09ICBlbmQtc3RhcnQ7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgLT0gIGVuZC1maXJzdCsxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByb3dDb3VudDsKICAgIH07CgogICAgdGhpcy4kYWRkRm9sZExpbmUgPSBmdW5jdGlvbihmb2xkTGluZSkgewogICAgICAgIHRoaXMuJGZvbGREYXRhLnB1c2goZm9sZExpbmUpOwogICAgICAgIHRoaXMuJGZvbGREYXRhLnNvcnQoZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICByZXR1cm4gYS5zdGFydC5yb3cgLSBiLnN0YXJ0LnJvdzsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZm9sZExpbmU7CiAgICB9OwogICAgdGhpcy5hZGRGb2xkID0gZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJhbmdlKSB7CiAgICAgICAgdmFyIGZvbGREYXRhID0gdGhpcy4kZm9sZERhdGE7CiAgICAgICAgdmFyIGFkZGVkID0gZmFsc2U7CiAgICAgICAgdmFyIGZvbGQ7CiAgICAgICAgCiAgICAgICAgaWYgKHBsYWNlaG9sZGVyIGluc3RhbmNlb2YgRm9sZCkKICAgICAgICAgICAgZm9sZCA9IHBsYWNlaG9sZGVyOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBmb2xkID0gbmV3IEZvbGQocmFuZ2UsIHBsYWNlaG9sZGVyKTsKICAgICAgICAgICAgZm9sZC5jb2xsYXBzZUNoaWxkcmVuID0gcmFuZ2UuY29sbGFwc2VDaGlsZHJlbjsKICAgICAgICB9CiAgICAgICAgdGhpcy4kY2xpcFJhbmdlVG9Eb2N1bWVudChmb2xkLnJhbmdlKTsKCiAgICAgICAgdmFyIHN0YXJ0Um93ID0gZm9sZC5zdGFydC5yb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gZm9sZC5zdGFydC5jb2x1bW47CiAgICAgICAgdmFyIGVuZFJvdyA9IGZvbGQuZW5kLnJvdzsKICAgICAgICB2YXIgZW5kQ29sdW1uID0gZm9sZC5lbmQuY29sdW1uOwoKICAgICAgICB2YXIgc3RhcnRGb2xkID0gdGhpcy5nZXRGb2xkQXQoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCAxKTsKICAgICAgICB2YXIgZW5kRm9sZCA9IHRoaXMuZ2V0Rm9sZEF0KGVuZFJvdywgZW5kQ29sdW1uLCAtMSk7CiAgICAgICAgaWYgKHN0YXJ0Rm9sZCAmJiBlbmRGb2xkID09IHN0YXJ0Rm9sZCkKICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Rm9sZC5hZGRTdWJGb2xkKGZvbGQpOwoKICAgICAgICBpZiAoc3RhcnRGb2xkICYmICFzdGFydEZvbGQucmFuZ2UuaXNTdGFydChzdGFydFJvdywgc3RhcnRDb2x1bW4pKQogICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoc3RhcnRGb2xkKTsKICAgICAgICAKICAgICAgICBpZiAoZW5kRm9sZCAmJiAhZW5kRm9sZC5yYW5nZS5pc0VuZChlbmRSb3csIGVuZENvbHVtbikpCiAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChlbmRGb2xkKTsKICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShmb2xkLnJhbmdlKTsKICAgICAgICBpZiAoZm9sZHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGRzKGZvbGRzKTsKICAgICAgICAgICAgZm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7CiAgICAgICAgICAgICAgICBmb2xkLmFkZFN1YkZvbGQoc3ViRm9sZCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkRGF0YVtpXTsKICAgICAgICAgICAgaWYgKGVuZFJvdyA9PSBmb2xkTGluZS5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZEZvbGQoZm9sZCk7CiAgICAgICAgICAgICAgICBhZGRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydFJvdyA9PSBmb2xkTGluZS5lbmQucm93KSB7CiAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRGb2xkKGZvbGQpOwogICAgICAgICAgICAgICAgYWRkZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKCFmb2xkLnNhbWVSb3cpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVOZXh0ID0gZm9sZERhdGFbaSArIDFdOwogICAgICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZU5leHQgJiYgZm9sZExpbmVOZXh0LnN0YXJ0LnJvdyA9PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUubWVyZ2UoZm9sZExpbmVOZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kUm93IDw9IGZvbGRMaW5lLnN0YXJ0LnJvdykgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghYWRkZWQpCiAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy4kYWRkRm9sZExpbmUobmV3IEZvbGRMaW5lKHRoaXMuJGZvbGREYXRhLCBmb2xkKSk7CgogICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkKICAgICAgICAgICAgdGhpcy4kdXBkYXRlV3JhcERhdGEoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5yb3cpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93TGVuZ3RoQ2FjaGUoZm9sZExpbmUuc3RhcnQucm93LCBmb2xkTGluZS5zdGFydC5yb3cpOwogICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZUZvbGQiLCB7IGRhdGE6IGZvbGQsIGFjdGlvbjogImFkZCIgfSk7CgogICAgICAgIHJldHVybiBmb2xkOwogICAgfTsKCiAgICB0aGlzLmFkZEZvbGRzID0gZnVuY3Rpb24oZm9sZHMpIHsKICAgICAgICBmb2xkcy5mb3JFYWNoKGZ1bmN0aW9uKGZvbGQpIHsKICAgICAgICAgICAgdGhpcy5hZGRGb2xkKGZvbGQpOwogICAgICAgIH0sIHRoaXMpOwogICAgfTsKCiAgICB0aGlzLnJlbW92ZUZvbGQgPSBmdW5jdGlvbihmb2xkKSB7CiAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZC5mb2xkTGluZTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7CgogICAgICAgIHZhciBmb2xkTGluZXMgPSB0aGlzLiRmb2xkRGF0YTsKICAgICAgICB2YXIgZm9sZHMgPSBmb2xkTGluZS5mb2xkczsKICAgICAgICBpZiAoZm9sZHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgZm9sZExpbmVzLnNwbGljZShmb2xkTGluZXMuaW5kZXhPZihmb2xkTGluZSksIDEpOwogICAgICAgIH0gZWxzZQogICAgICAgIGlmIChmb2xkTGluZS5yYW5nZS5pc0VuZChmb2xkLmVuZC5yb3csIGZvbGQuZW5kLmNvbHVtbikpIHsKICAgICAgICAgICAgZm9sZHMucG9wKCk7CiAgICAgICAgICAgIGZvbGRMaW5lLmVuZC5yb3cgPSBmb2xkc1tmb2xkcy5sZW5ndGggLSAxXS5lbmQucm93OwogICAgICAgICAgICBmb2xkTGluZS5lbmQuY29sdW1uID0gZm9sZHNbZm9sZHMubGVuZ3RoIC0gMV0uZW5kLmNvbHVtbjsKICAgICAgICB9IGVsc2UKICAgICAgICBpZiAoZm9sZExpbmUucmFuZ2UuaXNTdGFydChmb2xkLnN0YXJ0LnJvdywgZm9sZC5zdGFydC5jb2x1bW4pKSB7CiAgICAgICAgICAgIGZvbGRzLnNoaWZ0KCk7CiAgICAgICAgICAgIGZvbGRMaW5lLnN0YXJ0LnJvdyA9IGZvbGRzWzBdLnN0YXJ0LnJvdzsKICAgICAgICAgICAgZm9sZExpbmUuc3RhcnQuY29sdW1uID0gZm9sZHNbMF0uc3RhcnQuY29sdW1uOwogICAgICAgIH0gZWxzZQogICAgICAgIGlmIChmb2xkLnNhbWVSb3cpIHsKICAgICAgICAgICAgZm9sZHMuc3BsaWNlKGZvbGRzLmluZGV4T2YoZm9sZCksIDEpOwogICAgICAgIH0gZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdmFyIG5ld0ZvbGRMaW5lID0gZm9sZExpbmUuc3BsaXQoZm9sZC5zdGFydC5yb3csIGZvbGQuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgZm9sZHMgPSBuZXdGb2xkTGluZS5mb2xkczsKICAgICAgICAgICAgZm9sZHMuc2hpZnQoKTsKICAgICAgICAgICAgbmV3Rm9sZExpbmUuc3RhcnQucm93ID0gZm9sZHNbMF0uc3RhcnQucm93OwogICAgICAgICAgICBuZXdGb2xkTGluZS5zdGFydC5jb2x1bW4gPSBmb2xkc1swXS5zdGFydC5jb2x1bW47CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRoaXMuJHVwZGF0aW5nKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkKICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKHN0YXJ0Um93LCBlbmRSb3cpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShzdGFydFJvdywgZW5kUm93KTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlRm9sZCIsIHsgZGF0YTogZm9sZCwgYWN0aW9uOiAicmVtb3ZlIiB9KTsKICAgIH07CgogICAgdGhpcy5yZW1vdmVGb2xkcyA9IGZ1bmN0aW9uKGZvbGRzKSB7CiAgICAgICAgdmFyIGNsb25lRm9sZHMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNsb25lRm9sZHMucHVzaChmb2xkc1tpXSk7CiAgICAgICAgfQoKICAgICAgICBjbG9uZUZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgewogICAgICAgICAgICB0aGlzLnJlbW92ZUZvbGQoZm9sZCk7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOwogICAgfTsKCiAgICB0aGlzLmV4cGFuZEZvbGQgPSBmdW5jdGlvbihmb2xkKSB7CiAgICAgICAgdGhpcy5yZW1vdmVGb2xkKGZvbGQpOwogICAgICAgIGZvbGQuc3ViRm9sZHMuZm9yRWFjaChmdW5jdGlvbihzdWJGb2xkKSB7CiAgICAgICAgICAgIGZvbGQucmVzdG9yZVJhbmdlKHN1YkZvbGQpOwogICAgICAgICAgICB0aGlzLmFkZEZvbGQoc3ViRm9sZCk7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgaWYgKGZvbGQuY29sbGFwc2VDaGlsZHJlbiA+IDApIHsKICAgICAgICAgICAgdGhpcy5mb2xkQWxsKGZvbGQuc3RhcnQucm93KzEsIGZvbGQuZW5kLnJvdywgZm9sZC5jb2xsYXBzZUNoaWxkcmVuLTEpOwogICAgICAgIH0KICAgICAgICBmb2xkLnN1YkZvbGRzID0gW107CiAgICB9OwoKICAgIHRoaXMuZXhwYW5kRm9sZHMgPSBmdW5jdGlvbihmb2xkcykgewogICAgICAgIGZvbGRzLmZvckVhY2goZnVuY3Rpb24oZm9sZCkgewogICAgICAgICAgICB0aGlzLmV4cGFuZEZvbGQoZm9sZCk7CiAgICAgICAgfSwgdGhpcyk7CiAgICB9OwoKICAgIHRoaXMudW5mb2xkID0gZnVuY3Rpb24obG9jYXRpb24sIGV4cGFuZElubmVyKSB7CiAgICAgICAgdmFyIHJhbmdlLCBmb2xkczsKICAgICAgICBpZiAobG9jYXRpb24gPT0gbnVsbCkgewogICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZSgwLCAwLCB0aGlzLmdldExlbmd0aCgpLCAwKTsKICAgICAgICAgICAgZXhwYW5kSW5uZXIgPSB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxvY2F0aW9uID09ICJudW1iZXIiKQogICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZShsb2NhdGlvbiwgMCwgbG9jYXRpb24sIHRoaXMuZ2V0TGluZShsb2NhdGlvbikubGVuZ3RoKTsKICAgICAgICBlbHNlIGlmICgicm93IiBpbiBsb2NhdGlvbikKICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGxvY2F0aW9uLCBsb2NhdGlvbik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByYW5nZSA9IGxvY2F0aW9uOwogICAgICAgIAogICAgICAgIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2VMaXN0KHJhbmdlKTsKICAgICAgICBpZiAoZXhwYW5kSW5uZXIpIHsKICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhmb2xkcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHN1YkZvbGRzID0gZm9sZHM7CiAgICAgICAgICAgIHdoaWxlIChzdWJGb2xkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoc3ViRm9sZHMpOwogICAgICAgICAgICAgICAgc3ViRm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZUxpc3QocmFuZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChmb2xkcy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiBmb2xkczsKICAgIH07CiAgICB0aGlzLmlzUm93Rm9sZGVkID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRSb3cpIHsKICAgICAgICByZXR1cm4gISF0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTsKICAgIH07CgogICAgdGhpcy5nZXRSb3dGb2xkRW5kID0gZnVuY3Rpb24oZG9jUm93LCBzdGFydEZvbGRSb3cpIHsKICAgICAgICB2YXIgZm9sZExpbmUgPSB0aGlzLmdldEZvbGRMaW5lKGRvY1Jvdywgc3RhcnRGb2xkUm93KTsKICAgICAgICByZXR1cm4gZm9sZExpbmUgPyBmb2xkTGluZS5lbmQucm93IDogZG9jUm93OwogICAgfTsKCiAgICB0aGlzLmdldFJvd0ZvbGRTdGFydCA9IGZ1bmN0aW9uKGRvY1Jvdywgc3RhcnRGb2xkUm93KSB7CiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShkb2NSb3csIHN0YXJ0Rm9sZFJvdyk7CiAgICAgICAgcmV0dXJuIGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogZG9jUm93OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGREaXNwbGF5TGluZSA9IGZ1bmN0aW9uKGZvbGRMaW5lLCBlbmRSb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgaWYgKHN0YXJ0Um93ID09IG51bGwpCiAgICAgICAgICAgIHN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OwogICAgICAgIGlmIChzdGFydENvbHVtbiA9PSBudWxsKQogICAgICAgICAgICBzdGFydENvbHVtbiA9IDA7CiAgICAgICAgaWYgKGVuZFJvdyA9PSBudWxsKQogICAgICAgICAgICBlbmRSb3cgPSBmb2xkTGluZS5lbmQucm93OwogICAgICAgIGlmIChlbmRDb2x1bW4gPT0gbnVsbCkKICAgICAgICAgICAgZW5kQ29sdW1uID0gdGhpcy5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgIHZhciBkb2MgPSB0aGlzLmRvYzsKICAgICAgICB2YXIgdGV4dExpbmUgPSAiIjsKCiAgICAgICAgZm9sZExpbmUud2FsayhmdW5jdGlvbihwbGFjZWhvbGRlciwgcm93LCBjb2x1bW4sIGxhc3RDb2x1bW4pIHsKICAgICAgICAgICAgaWYgKHJvdyA8IHN0YXJ0Um93KQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAocm93ID09IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgbGFzdENvbHVtbiA9IE1hdGgubWF4KHN0YXJ0Q29sdW1uLCBsYXN0Q29sdW1uKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRleHRMaW5lICs9IHBsYWNlaG9sZGVyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGV4dExpbmUgKz0gZG9jLmdldExpbmUocm93KS5zdWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICByZXR1cm4gdGV4dExpbmU7CiAgICB9OwoKICAgIHRoaXMuZ2V0RGlzcGxheUxpbmUgPSBmdW5jdGlvbihyb3csIGVuZENvbHVtbiwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShyb3cpOwoKICAgICAgICBpZiAoIWZvbGRMaW5lKSB7CiAgICAgICAgICAgIHZhciBsaW5lOwogICAgICAgICAgICBsaW5lID0gdGhpcy5kb2MuZ2V0TGluZShyb3cpOwogICAgICAgICAgICByZXR1cm4gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4gfHwgMCwgZW5kQ29sdW1uIHx8IGxpbmUubGVuZ3RoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoCiAgICAgICAgICAgICAgICBmb2xkTGluZSwgcm93LCBlbmRDb2x1bW4sIHN0YXJ0Um93LCBzdGFydENvbHVtbik7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRjbG9uZUZvbGREYXRhID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGZkID0gW107CiAgICAgICAgZmQgPSB0aGlzLiRmb2xkRGF0YS5tYXAoZnVuY3Rpb24oZm9sZExpbmUpIHsKICAgICAgICAgICAgdmFyIGZvbGRzID0gZm9sZExpbmUuZm9sZHMubWFwKGZ1bmN0aW9uKGZvbGQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmb2xkLmNsb25lKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gbmV3IEZvbGRMaW5lKGZkLCBmb2xkcyk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBmZDsKICAgIH07CgogICAgdGhpcy50b2dnbGVGb2xkID0gZnVuY3Rpb24odHJ5VG9VbmZvbGQpIHsKICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247CiAgICAgICAgdmFyIHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlKCk7CiAgICAgICAgdmFyIGZvbGQ7CiAgICAgICAgdmFyIGJyYWNrZXRQb3M7CgogICAgICAgIGlmIChyYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJhbmdlLnN0YXJ0OwogICAgICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CgogICAgICAgICAgICBpZiAoZm9sZCkgewogICAgICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9IGVsc2UgaWYgKGJyYWNrZXRQb3MgPSB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQoY3Vyc29yKSkgewogICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmVQb2ludChicmFja2V0UG9zKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gYnJhY2tldFBvczsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBicmFja2V0UG9zOwogICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrOwogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4tLTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChicmFja2V0UG9zID0gdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IGN1cnNvci5yb3csIGNvbHVtbjogY3Vyc29yLmNvbHVtbiArIDF9KSkgewogICAgICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmVQb2ludChicmFja2V0UG9zKSA9PSAxKQogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZCA9IGJyYWNrZXRQb3M7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSBicmFja2V0UG9zOwoKICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbikgfHwgcmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZm9sZHMgPSB0aGlzLmdldEZvbGRzSW5SYW5nZShyYW5nZSk7CiAgICAgICAgICAgIGlmICh0cnlUb1VuZm9sZCAmJiBmb2xkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZHMoZm9sZHMpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRzLmxlbmd0aCA9PSAxICkgewogICAgICAgICAgICAgICAgZm9sZCA9IGZvbGRzWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWZvbGQpCiAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CgogICAgICAgIGlmIChmb2xkICYmIGZvbGQucmFuZ2UudG9TdHJpbmcoKSA9PSByYW5nZS50b1N0cmluZygpKSB7CiAgICAgICAgICAgIHRoaXMuZXhwYW5kRm9sZChmb2xkKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gIi4uLiI7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIubGVuZ3RoIDwgNCkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlci50cmltKCkuc3Vic3RyaW5nKDAsIDIpICsgIi4uIjsKICAgICAgICB9CgogICAgICAgIHRoaXMuYWRkRm9sZChwbGFjZWhvbGRlciwgcmFuZ2UpOwogICAgfTsKCiAgICB0aGlzLmdldENvbW1lbnRGb2xkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbiwgZGlyKSB7CiAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIHZhciB0eXBlID0gdG9rZW4udHlwZTsKICAgICAgICBpZiAodG9rZW4gJiYgL15jb21tZW50fHN0cmluZy8udGVzdCh0eXBlKSkgewogICAgICAgICAgICB0eXBlID0gdHlwZS5tYXRjaCgvY29tbWVudHxzdHJpbmcvKVswXTsKICAgICAgICAgICAgaWYgKHR5cGUgPT0gImNvbW1lbnQiKQogICAgICAgICAgICAgICAgdHlwZSArPSAifGRvYy1zdGFydCI7CiAgICAgICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAodHlwZSk7CiAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZSgpOwogICAgICAgICAgICBpZiAoZGlyICE9IDEpIHsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgcmUudGVzdCh0b2tlbi50eXBlKSk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyAyOwoKICAgICAgICAgICAgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0aGlzLCByb3csIGNvbHVtbik7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoZGlyICE9IC0xKSB7CiAgICAgICAgICAgICAgICB2YXIgbGFzdFJvdyA9IC0xOwogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFJvdyA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLmdldFN0YXRlKGl0ZXJhdG9yLiRyb3cpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlLnRlc3Qoc3RhdGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJvdyA9IGl0ZXJhdG9yLiRyb3c7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRvci4kcm93ID4gbGFzdFJvdykgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiByZS50ZXN0KHRva2VuLnR5cGUpKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoIC0gMjsKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5mb2xkQWxsID0gZnVuY3Rpb24oc3RhcnRSb3csIGVuZFJvdywgZGVwdGgpIHsKICAgICAgICBpZiAoZGVwdGggPT0gdW5kZWZpbmVkKQogICAgICAgICAgICBkZXB0aCA9IDEwMDAwMDsgLy8gSlNPTi5zdHJpbmdpZnkgZG9lc24ndCBoYW5sZSBJbmZpbml0eQogICAgICAgIHZhciBmb2xkV2lkZ2V0cyA9IHRoaXMuZm9sZFdpZGdldHM7CiAgICAgICAgaWYgKCFmb2xkV2lkZ2V0cykKICAgICAgICAgICAgcmV0dXJuOyAvLyBtb2RlIGRvZXNuJ3Qgc3VwcG9ydCBmb2xkaW5nCiAgICAgICAgZW5kUm93ID0gZW5kUm93IHx8IHRoaXMuZ2V0TGVuZ3RoKCk7CiAgICAgICAgc3RhcnRSb3cgPSBzdGFydFJvdyB8fCAwOwogICAgICAgIGZvciAodmFyIHJvdyA9IHN0YXJ0Um93OyByb3cgPCBlbmRSb3c7IHJvdysrKSB7CiAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddID09IG51bGwpCiAgICAgICAgICAgICAgICBmb2xkV2lkZ2V0c1tyb3ddID0gdGhpcy5nZXRGb2xkV2lkZ2V0KHJvdyk7CiAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0c1tyb3ddICE9ICJzdGFydCIpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdyk7CiAgICAgICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5pc011bHRpTGluZSgpCiAgICAgICAgICAgICAgICAmJiByYW5nZS5lbmQucm93IDw9IGVuZFJvdwogICAgICAgICAgICAgICAgJiYgcmFuZ2Uuc3RhcnQucm93ID49IHN0YXJ0Um93CiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgcm93ID0gcmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLmFkZEZvbGQoIi4uLiIsIHJhbmdlKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZCkKICAgICAgICAgICAgICAgICAgICAgICAgZm9sZC5jb2xsYXBzZUNoaWxkcmVuID0gZGVwdGg7CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgdGhpcy4kZm9sZFN0eWxlcyA9IHsKICAgICAgICAibWFudWFsIjogMSwKICAgICAgICAibWFya2JlZ2luIjogMSwKICAgICAgICAibWFya2JlZ2luZW5kIjogMQogICAgfTsKICAgIHRoaXMuJGZvbGRTdHlsZSA9ICJtYXJrYmVnaW4iOwogICAgdGhpcy5zZXRGb2xkU3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgewogICAgICAgIGlmICghdGhpcy4kZm9sZFN0eWxlc1tzdHlsZV0pCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb2xkIHN0eWxlOiAiICsgc3R5bGUgKyAiWyIgKyBPYmplY3Qua2V5cyh0aGlzLiRmb2xkU3R5bGVzKS5qb2luKCIsICIpICsgIl0iKTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy4kZm9sZFN0eWxlID09IHN0eWxlKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHRoaXMuJGZvbGRTdHlsZSA9IHN0eWxlOwogICAgICAgIAogICAgICAgIGlmIChzdHlsZSA9PSAibWFudWFsIikKICAgICAgICAgICAgdGhpcy51bmZvbGQoKTsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGZvbGRNb2RlOwogICAgICAgIHRoaXMuJHNldEZvbGRpbmcobnVsbCk7CiAgICAgICAgdGhpcy4kc2V0Rm9sZGluZyhtb2RlKTsKICAgIH07CgogICAgdGhpcy4kc2V0Rm9sZGluZyA9IGZ1bmN0aW9uKGZvbGRNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJGZvbGRNb2RlID09IGZvbGRNb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHRoaXMuJGZvbGRNb2RlID0gZm9sZE1vZGU7CiAgICAgICAgCiAgICAgICAgdGhpcy5vZmYoJ2NoYW5nZScsIHRoaXMuJHVwZGF0ZUZvbGRXaWRnZXRzKTsKICAgICAgICB0aGlzLm9mZigndG9rZW5pemVyVXBkYXRlJywgdGhpcy4kdG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMpOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlQW5ub3RhdGlvbiIpOwogICAgICAgIAogICAgICAgIGlmICghZm9sZE1vZGUgfHwgdGhpcy4kZm9sZFN0eWxlID09ICJtYW51YWwiKSB7CiAgICAgICAgICAgIHRoaXMuZm9sZFdpZGdldHMgPSBudWxsOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuZm9sZFdpZGdldHMgPSBbXTsKICAgICAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmb2xkTW9kZS5nZXRGb2xkV2lkZ2V0LmJpbmQoZm9sZE1vZGUsIHRoaXMsIHRoaXMuJGZvbGRTdHlsZSk7CiAgICAgICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmb2xkTW9kZS5nZXRGb2xkV2lkZ2V0UmFuZ2UuYmluZChmb2xkTW9kZSwgdGhpcywgdGhpcy4kZm9sZFN0eWxlKTsKICAgICAgICAKICAgICAgICB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyA9IHRoaXMudXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKTsKICAgICAgICB0aGlzLiR0b2tlbml6ZXJVcGRhdGVGb2xkV2lkZ2V0cyA9IHRoaXMudG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMuYmluZCh0aGlzKTsKICAgICAgICB0aGlzLm9uKCdjaGFuZ2UnLCB0aGlzLiR1cGRhdGVGb2xkV2lkZ2V0cyk7CiAgICAgICAgdGhpcy5vbigndG9rZW5pemVyVXBkYXRlJywgdGhpcy4kdG9rZW5pemVyVXBkYXRlRm9sZFdpZGdldHMpOwogICAgfTsKCiAgICB0aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEgPSBmdW5jdGlvbiAocm93LCBpZ25vcmVDdXJyZW50KSB7CiAgICAgICAgdmFyIGZ3ID0gdGhpcy5mb2xkV2lkZ2V0czsKICAgICAgICBpZiAoIWZ3IHx8IChpZ25vcmVDdXJyZW50ICYmIGZ3W3Jvd10pKQogICAgICAgICAgICByZXR1cm4ge307CgogICAgICAgIHZhciBpID0gcm93IC0gMSwgZmlyc3RSYW5nZTsKICAgICAgICB3aGlsZSAoaSA+PSAwKSB7CiAgICAgICAgICAgIHZhciBjID0gZndbaV07CiAgICAgICAgICAgIGlmIChjID09IG51bGwpCiAgICAgICAgICAgICAgICBjID0gZndbaV0gPSB0aGlzLmdldEZvbGRXaWRnZXQoaSk7CgogICAgICAgICAgICBpZiAoYyA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShpKTsKICAgICAgICAgICAgICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gcmFuZ2U7CiAgICAgICAgICAgICAgICBpZiAocmFuZ2UgJiYgcmFuZ2UuZW5kLnJvdyA+PSByb3cpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaS0tOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcmFuZ2U6IGkgIT09IC0xICYmIHJhbmdlLAogICAgICAgICAgICBmaXJzdFJhbmdlOiBmaXJzdFJhbmdlCiAgICAgICAgfTsKICAgIH07CgogICAgdGhpcy5vbkZvbGRXaWRnZXRDbGljayA9IGZ1bmN0aW9uKHJvdywgZSkgewogICAgICAgIGUgPSBlLmRvbUV2ZW50OwogICAgICAgIHZhciBvcHRpb25zID0gewogICAgICAgICAgICBjaGlsZHJlbjogZS5zaGlmdEtleSwKICAgICAgICAgICAgYWxsOiBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5LAogICAgICAgICAgICBzaWJsaW5nczogZS5hbHRLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIHZhciByYW5nZSA9IHRoaXMuJHRvZ2dsZUZvbGRXaWRnZXQocm93LCBvcHRpb25zKTsKICAgICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgICAgIHZhciBlbCA9IChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpOwogICAgICAgICAgICBpZiAoZWwgJiYgL2FjZV9mb2xkLXdpZGdldC8udGVzdChlbC5jbGFzc05hbWUpKQogICAgICAgICAgICAgICAgZWwuY2xhc3NOYW1lICs9ICIgYWNlX2ludmFsaWQiOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHRvZ2dsZUZvbGRXaWRnZXQgPSBmdW5jdGlvbihyb3csIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIXRoaXMuZ2V0Rm9sZFdpZGdldCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciB0eXBlID0gdGhpcy5nZXRGb2xkV2lkZ2V0KHJvdyk7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKCiAgICAgICAgdmFyIGRpciA9IHR5cGUgPT09ICJlbmQiID8gLTEgOiAxOwogICAgICAgIHZhciBmb2xkID0gdGhpcy5nZXRGb2xkQXQocm93LCBkaXIgPT09IC0xID8gMCA6IGxpbmUubGVuZ3RoLCBkaXIpOwoKICAgICAgICBpZiAoZm9sZCkgewogICAgICAgICAgICBpZiAob3B0aW9ucy5jaGlsZHJlbiB8fCBvcHRpb25zLmFsbCkKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5leHBhbmRGb2xkKGZvbGQpOwogICAgICAgICAgICByZXR1cm4gZm9sZDsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHJvdywgdHJ1ZSk7CiAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgIGZvbGQgPSB0aGlzLmdldEZvbGRBdChyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgMSk7CiAgICAgICAgICAgIGlmIChmb2xkICYmIHJhbmdlLmlzRXF1YWwoZm9sZC5yYW5nZSkpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTsKICAgICAgICAgICAgICAgIHJldHVybiBmb2xkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChvcHRpb25zLnNpYmxpbmdzKSB7CiAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5nZXRQYXJlbnRGb2xkUmFuZ2VEYXRhKHJvdyk7CiAgICAgICAgICAgIGlmIChkYXRhLnJhbmdlKSB7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnRSb3cgPSBkYXRhLnJhbmdlLnN0YXJ0LnJvdyArIDE7CiAgICAgICAgICAgICAgICB2YXIgZW5kUm93ID0gZGF0YS5yYW5nZS5lbmQucm93OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuZm9sZEFsbChzdGFydFJvdywgZW5kUm93LCBvcHRpb25zLmFsbCA/IDEwMDAwIDogMCk7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNoaWxkcmVuKSB7CiAgICAgICAgICAgIGVuZFJvdyA9IHJhbmdlID8gcmFuZ2UuZW5kLnJvdyA6IHRoaXMuZ2V0TGVuZ3RoKCk7CiAgICAgICAgICAgIHRoaXMuZm9sZEFsbChyb3cgKyAxLCBlbmRSb3csIG9wdGlvbnMuYWxsID8gMTAwMDAgOiAwKTsKICAgICAgICB9IGVsc2UgaWYgKHJhbmdlKSB7CiAgICAgICAgICAgIGlmIChvcHRpb25zLmFsbCkgCiAgICAgICAgICAgICAgICByYW5nZS5jb2xsYXBzZUNoaWxkcmVuID0gMTAwMDA7CiAgICAgICAgICAgIHRoaXMuYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICB9OwogICAgCiAgICAKICAgIAogICAgdGhpcy50b2dnbGVGb2xkV2lkZ2V0ID0gZnVuY3Rpb24odG9nZ2xlUGFyZW50KSB7CiAgICAgICAgdmFyIHJvdyA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLnJvdzsKICAgICAgICByb3cgPSB0aGlzLmdldFJvd0ZvbGRTdGFydChyb3cpOwogICAgICAgIHZhciByYW5nZSA9IHRoaXMuJHRvZ2dsZUZvbGRXaWRnZXQocm93LCB7fSk7CiAgICAgICAgCiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldFBhcmVudEZvbGRSYW5nZURhdGEocm93LCB0cnVlKTsKICAgICAgICByYW5nZSA9IGRhdGEucmFuZ2UgfHwgZGF0YS5maXJzdFJhbmdlOwogICAgICAgIAogICAgICAgIGlmIChyYW5nZSkgewogICAgICAgICAgICByb3cgPSByYW5nZS5zdGFydC5yb3c7CiAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy5nZXRGb2xkQXQocm93LCB0aGlzLmdldExpbmUocm93KS5sZW5ndGgsIDEpOwoKICAgICAgICAgICAgaWYgKGZvbGQpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRm9sZChmb2xkKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9sZCgiLi4uIiwgcmFuZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLnVwZGF0ZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICB2YXIgZmlyc3RSb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICAgICAgdmFyIGxlbiA9IGRlbHRhLmVuZC5yb3cgLSBmaXJzdFJvdzsKCiAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmZvbGRXaWRnZXRzW2ZpcnN0Um93XSA9IG51bGw7CiAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5hY3Rpb24gPT0gJ3JlbW92ZScpIHsKICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuICsgMSk7CiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMSk7CiAgICAgICAgICAgIHRoaXMuZm9sZFdpZGdldHMuc3BsaWNlLmFwcGx5KHRoaXMuZm9sZFdpZGdldHMsIGFyZ3MpOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnRva2VuaXplclVwZGF0ZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciByb3dzID0gZS5kYXRhOwogICAgICAgIGlmIChyb3dzLmZpcnN0ICE9IHJvd3MubGFzdCkgewogICAgICAgICAgICBpZiAodGhpcy5mb2xkV2lkZ2V0cy5sZW5ndGggPiByb3dzLmZpcnN0KQogICAgICAgICAgICAgICAgdGhpcy5mb2xkV2lkZ2V0cy5zcGxpY2Uocm93cy5maXJzdCwgdGhpcy5mb2xkV2lkZ2V0cy5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cn0KCmV4cG9ydHMuRm9sZGluZyA9IEZvbGRpbmc7Cgp9KTsKCmRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbi9icmFja2V0X21hdGNoIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCgpmdW5jdGlvbiBCcmFja2V0TWF0Y2goKSB7CgogICAgdGhpcy5maW5kTWF0Y2hpbmdCcmFja2V0ID0gZnVuY3Rpb24ocG9zaXRpb24sIGNocikgewogICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPT0gMCkgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciBjaGFyQmVmb3JlQ3Vyc29yID0gY2hyIHx8IHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmNoYXJBdChwb3NpdGlvbi5jb2x1bW4tMSk7CiAgICAgICAgaWYgKGNoYXJCZWZvcmVDdXJzb3IgPT0gIiIpIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgbWF0Y2ggPSBjaGFyQmVmb3JlQ3Vyc29yLm1hdGNoKC8oW1woXFtce10pfChbXClcXVx9XSkvKTsKICAgICAgICBpZiAoIW1hdGNoKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZENsb3NpbmdCcmFja2V0KG1hdGNoWzFdLCBwb3NpdGlvbik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gdGhpcy4kZmluZE9wZW5pbmdCcmFja2V0KG1hdGNoWzJdLCBwb3NpdGlvbik7CiAgICB9OwogICAgCiAgICB0aGlzLmdldEJyYWNrZXRSYW5nZSA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHBvcy5yb3cpOwogICAgICAgIHZhciBiZWZvcmUgPSB0cnVlLCByYW5nZTsKCiAgICAgICAgdmFyIGNociA9IGxpbmUuY2hhckF0KHBvcy5jb2x1bW4tMSk7CiAgICAgICAgdmFyIG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7CiAgICAgICAgaWYgKCFtYXRjaCkgewogICAgICAgICAgICBjaHIgPSBsaW5lLmNoYXJBdChwb3MuY29sdW1uKTsKICAgICAgICAgICAgcG9zID0ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1uICsgMX07CiAgICAgICAgICAgIG1hdGNoID0gY2hyICYmIGNoci5tYXRjaCgvKFtcKFxbXHtdKXwoW1wpXF1cfV0pLyk7CiAgICAgICAgICAgIGJlZm9yZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIW1hdGNoKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgIHZhciBicmFja2V0UG9zID0gdGhpcy4kZmluZENsb3NpbmdCcmFja2V0KG1hdGNoWzFdLCBwb3MpOwogICAgICAgICAgICBpZiAoIWJyYWNrZXRQb3MpCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHBvcywgYnJhY2tldFBvcyk7CiAgICAgICAgICAgIGlmICghYmVmb3JlKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4tLTsKICAgICAgICAgICAgfQogICAgICAgICAgICByYW5nZS5jdXJzb3IgPSByYW5nZS5lbmQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGJyYWNrZXRQb3MgPSB0aGlzLiRmaW5kT3BlbmluZ0JyYWNrZXQobWF0Y2hbMl0sIHBvcyk7CiAgICAgICAgICAgIGlmICghYnJhY2tldFBvcykKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoYnJhY2tldFBvcywgcG9zKTsKICAgICAgICAgICAgaWYgKCFiZWZvcmUpIHsKICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbi0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJhbmdlLmN1cnNvciA9IHJhbmdlLnN0YXJ0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICB9OwoKICAgIHRoaXMuJGJyYWNrZXRzID0gewogICAgICAgICIpIjogIigiLAogICAgICAgICIoIjogIikiLAogICAgICAgICJdIjogIlsiLAogICAgICAgICJbIjogIl0iLAogICAgICAgICJ7IjogIn0iLAogICAgICAgICJ9IjogInsiLAogICAgICAgICI8IjogIj4iLAogICAgICAgICI+IjogIjwiCiAgICB9OwoKICAgIHRoaXMuJGZpbmRPcGVuaW5nQnJhY2tldCA9IGZ1bmN0aW9uKGJyYWNrZXQsIHBvc2l0aW9uLCB0eXBlUmUpIHsKICAgICAgICB2YXIgb3BlbkJyYWNrZXQgPSB0aGlzLiRicmFja2V0c1ticmFja2V0XTsKICAgICAgICB2YXIgZGVwdGggPSAxOwoKICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcih0aGlzLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAKICAgICAgICAgaWYgKCF0eXBlUmUpewogICAgICAgICAgICB0eXBlUmUgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICAgICAgIihcXC4/IiArCiAgICAgICAgICAgICAgICB0b2tlbi50eXBlLnJlcGxhY2UoIi4iLCAiXFwuIikucmVwbGFjZSgicnBhcmVuIiwgIi5wYXJlbiIpCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xiKD86ZW5kKVxiLywgIig/OnN0YXJ0fGJlZ2lufGVuZCkiKQogICAgICAgICAgICAgICAgKyAiKSsiCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHZhciB2YWx1ZUluZGV4ID0gcG9zaXRpb24uY29sdW1uIC0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgLSAyOwogICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOwogICAgICAgIAogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgCiAgICAgICAgICAgIHdoaWxlICh2YWx1ZUluZGV4ID49IDApIHsKICAgICAgICAgICAgICAgIHZhciBjaHIgPSB2YWx1ZS5jaGFyQXQodmFsdWVJbmRleCk7CiAgICAgICAgICAgICAgICBpZiAoY2hyID09IG9wZW5CcmFja2V0KSB7CiAgICAgICAgICAgICAgICAgICAgZGVwdGggLT0gMTsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHZhbHVlSW5kZXggKyBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKX07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09IGJyYWNrZXQpIHsKICAgICAgICAgICAgICAgICAgICBkZXB0aCArPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFsdWVJbmRleCAtPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0gd2hpbGUgKHRva2VuICYmICF0eXBlUmUudGVzdCh0b2tlbi50eXBlKSk7CgogICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIHZhbHVlSW5kZXggPSB2YWx1ZS5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CgogICAgdGhpcy4kZmluZENsb3NpbmdCcmFja2V0ID0gZnVuY3Rpb24oYnJhY2tldCwgcG9zaXRpb24sIHR5cGVSZSkgewogICAgICAgIHZhciBjbG9zaW5nQnJhY2tldCA9IHRoaXMuJGJyYWNrZXRzW2JyYWNrZXRdOwogICAgICAgIHZhciBkZXB0aCA9IDE7CgogICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMsIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoIXR5cGVSZSl7CiAgICAgICAgICAgIHR5cGVSZSA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgICAgICAiKFxcLj8iICsKICAgICAgICAgICAgICAgIHRva2VuLnR5cGUucmVwbGFjZSgiLiIsICJcXC4iKS5yZXBsYWNlKCJscGFyZW4iLCAiLnBhcmVuIikKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXGIoPzpzdGFydHxiZWdpbilcYi8sICIoPzpzdGFydHxiZWdpbnxlbmQpIikKICAgICAgICAgICAgICAgICsgIikrIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHBvc2l0aW9uLmNvbHVtbiAtIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwoKICAgICAgICB3aGlsZSAodHJ1ZSkgewoKICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgd2hpbGUgKHZhbHVlSW5kZXggPCB2YWx1ZUxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFyIGNociA9IHZhbHVlLmNoYXJBdCh2YWx1ZUluZGV4KTsKICAgICAgICAgICAgICAgIGlmIChjaHIgPT0gY2xvc2luZ0JyYWNrZXQpIHsKICAgICAgICAgICAgICAgICAgICBkZXB0aCAtPSAxOwogICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7cm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdmFsdWVJbmRleCArIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChjaHIgPT0gYnJhY2tldCkgewogICAgICAgICAgICAgICAgICAgIGRlcHRoICs9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YWx1ZUluZGV4ICs9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICB9IHdoaWxlICh0b2tlbiAmJiAhdHlwZVJlLnRlc3QodG9rZW4udHlwZSkpOwoKICAgICAgICAgICAgaWYgKHRva2VuID09IG51bGwpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIHZhbHVlSW5kZXggPSAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07Cn0KZXhwb3J0cy5CcmFja2V0TWF0Y2ggPSBCcmFja2V0TWF0Y2g7Cgp9KTsKCmRlZmluZSgiYWNlL2VkaXRfc2Vzc2lvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2JpZGloYW5kbGVyIiwiYWNlL2NvbmZpZyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9zZWxlY3Rpb24iLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3JhbmdlIiwiYWNlL2RvY3VtZW50IiwiYWNlL2JhY2tncm91bmRfdG9rZW5pemVyIiwiYWNlL3NlYXJjaF9oaWdobGlnaHQiLCJhY2UvZWRpdF9zZXNzaW9uL2ZvbGRpbmciLCJhY2UvZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2giXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7CnZhciBCaWRpSGFuZGxlciA9IHJlcXVpcmUoIi4vYmlkaWhhbmRsZXIiKS5CaWRpSGFuZGxlcjsKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgU2VsZWN0aW9uID0gcmVxdWlyZSgiLi9zZWxlY3Rpb24iKS5TZWxlY3Rpb247CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vbW9kZS90ZXh0IikuTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwp2YXIgRG9jdW1lbnQgPSByZXF1aXJlKCIuL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBCYWNrZ3JvdW5kVG9rZW5pemVyID0gcmVxdWlyZSgiLi9iYWNrZ3JvdW5kX3Rva2VuaXplciIpLkJhY2tncm91bmRUb2tlbml6ZXI7CnZhciBTZWFyY2hIaWdobGlnaHQgPSByZXF1aXJlKCIuL3NlYXJjaF9oaWdobGlnaHQiKS5TZWFyY2hIaWdobGlnaHQ7Cgp2YXIgRWRpdFNlc3Npb24gPSBmdW5jdGlvbih0ZXh0LCBtb2RlKSB7CiAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOwogICAgdGhpcy4kZGVjb3JhdGlvbnMgPSBbXTsKICAgIHRoaXMuJGZyb250TWFya2VycyA9IHt9OwogICAgdGhpcy4kYmFja01hcmtlcnMgPSB7fTsKICAgIHRoaXMuJG1hcmtlcklkID0gMTsKICAgIHRoaXMuJHVuZG9TZWxlY3QgPSB0cnVlOwoKICAgIHRoaXMuJGZvbGREYXRhID0gW107CiAgICB0aGlzLmlkID0gInNlc3Npb24iICsgKCsrRWRpdFNlc3Npb24uJHVpZCk7CiAgICB0aGlzLiRmb2xkRGF0YS50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmpvaW4oIlxuIik7CiAgICB9OwogICAgdGhpcy5vbigiY2hhbmdlRm9sZCIsIHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcykpOwogICAgdGhpcy4kb25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7CgogICAgaWYgKHR5cGVvZiB0ZXh0ICE9ICJvYmplY3QiIHx8ICF0ZXh0LmdldExpbmUpCiAgICAgICAgdGV4dCA9IG5ldyBEb2N1bWVudCh0ZXh0KTsKCiAgICB0aGlzLnNldERvY3VtZW50KHRleHQpOwogICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMpOwogICAgdGhpcy4kYmlkaUhhbmRsZXIgPSBuZXcgQmlkaUhhbmRsZXIodGhpcyk7CgogICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTsKICAgIHRoaXMuc2V0TW9kZShtb2RlKTsKICAgIGNvbmZpZy5fc2lnbmFsKCJzZXNzaW9uIiwgdGhpcyk7Cn07CgoKRWRpdFNlc3Npb24uJHVpZCA9IDA7CgooZnVuY3Rpb24oKSB7CgogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwogICAgdGhpcy5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykgewogICAgICAgIGlmICh0aGlzLmRvYykKICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKCiAgICAgICAgdGhpcy5kb2MgPSBkb2M7CiAgICAgICAgZG9jLm9uKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CgogICAgICAgIGlmICh0aGlzLmJnVG9rZW5pemVyKQogICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHRoaXMucmVzZXRDYWNoZXMoKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jOwogICAgfTsKICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUgPSBmdW5jdGlvbihkb2NSb3cpIHsKICAgICAgICBpZiAoIWRvY1JvdykgewogICAgICAgICAgICB0aGlzLiRkb2NSb3dDYWNoZSA9IFtdOwogICAgICAgICAgICB0aGlzLiRzY3JlZW5Sb3dDYWNoZSA9IFtdOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBsID0gdGhpcy4kZG9jUm93Q2FjaGUubGVuZ3RoOwogICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCh0aGlzLiRkb2NSb3dDYWNoZSwgZG9jUm93KSArIDE7CiAgICAgICAgaWYgKGwgPiBpKSB7CiAgICAgICAgICAgIHRoaXMuJGRvY1Jvd0NhY2hlLnNwbGljZShpLCBsKTsKICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUuc3BsaWNlKGksIGwpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kZ2V0Um93Q2FjaGVJbmRleCA9IGZ1bmN0aW9uKGNhY2hlQXJyYXksIHZhbCkgewogICAgICAgIHZhciBsb3cgPSAwOwogICAgICAgIHZhciBoaSA9IGNhY2hlQXJyYXkubGVuZ3RoIC0gMTsKCiAgICAgICAgd2hpbGUgKGxvdyA8PSBoaSkgewogICAgICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpKSA+PiAxOwogICAgICAgICAgICB2YXIgYyA9IGNhY2hlQXJyYXlbbWlkXTsKCiAgICAgICAgICAgIGlmICh2YWwgPiBjKQogICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICAgICAgZWxzZSBpZiAodmFsIDwgYykKICAgICAgICAgICAgICAgIGhpID0gbWlkIC0gMTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIG1pZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBsb3cgLTE7CiAgICB9OwoKICAgIHRoaXMucmVzZXRDYWNoZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CiAgICAgICAgdGhpcy4kd3JhcERhdGEgPSBbXTsKICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZSA9IFtdOwogICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoMCk7CiAgICAgICAgaWYgKHRoaXMuYmdUb2tlbml6ZXIpCiAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7CiAgICB9OwoKICAgIHRoaXMub25DaGFuZ2VGb2xkID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBmb2xkID0gZS5kYXRhOwogICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoZm9sZC5zdGFydC5yb3cpOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CiAgICAgICAgdGhpcy4kYmlkaUhhbmRsZXIub25DaGFuZ2UoZGVsdGEpOwogICAgICAgIHRoaXMuJHJlc2V0Um93Q2FjaGUoZGVsdGEuc3RhcnQucm93KTsKCiAgICAgICAgdmFyIHJlbW92ZWRGb2xkcyA9IHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlKGRlbHRhKTsKICAgICAgICBpZiAoIXRoaXMuJGZyb21VbmRvICYmIHRoaXMuJHVuZG9NYW5hZ2VyKSB7CiAgICAgICAgICAgIGlmIChyZW1vdmVkRm9sZHMgJiYgcmVtb3ZlZEZvbGRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdGhpcy4kdW5kb01hbmFnZXIuYWRkKHsKICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmVGb2xkcyIsCiAgICAgICAgICAgICAgICAgICAgZm9sZHM6ICByZW1vdmVkRm9sZHMKICAgICAgICAgICAgICAgIH0sIHRoaXMubWVyZ2VVbmRvRGVsdGFzKTsKICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VVbmRvRGVsdGFzID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiR1bmRvTWFuYWdlci5hZGQoZGVsdGEsIHRoaXMubWVyZ2VVbmRvRGVsdGFzKTsKICAgICAgICAgICAgdGhpcy5tZXJnZVVuZG9EZWx0YXMgPSB0cnVlOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy4kaW5mb3JtVW5kb01hbmFnZXIuc2NoZWR1bGUoKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuYmdUb2tlbml6ZXIgJiYgdGhpcy5iZ1Rva2VuaXplci4kdXBkYXRlT25DaGFuZ2UoZGVsdGEpOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgfTsKICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdGhpcy5kb2Muc2V0VmFsdWUodGV4dCk7CiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVRvKDAsIDApOwoKICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOwogICAgICAgIHRoaXMuc2V0VW5kb01hbmFnZXIodGhpcy4kdW5kb01hbmFnZXIpOwogICAgICAgIHRoaXMuZ2V0VW5kb01hbmFnZXIoKS5yZXNldCgpOwogICAgfTsKICAgIHRoaXMuZ2V0VmFsdWUgPQogICAgdGhpcy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRWYWx1ZSgpOwogICAgfTsKICAgIHRoaXMuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uOwogICAgfTsKICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpOwogICAgfTsKICAgIHRoaXMuZ2V0VG9rZW5zID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYmdUb2tlbml6ZXIuZ2V0VG9rZW5zKHJvdyk7CiAgICB9OwogICAgdGhpcy5nZXRUb2tlbkF0ID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5iZ1Rva2VuaXplci5nZXRUb2tlbnMocm93KTsKICAgICAgICB2YXIgdG9rZW4sIGMgPSAwOwogICAgICAgIGlmIChjb2x1bW4gPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgaSA9IHRva2Vucy5sZW5ndGggLSAxOwogICAgICAgICAgICBjID0gdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBjICs9IHRva2Vuc1tpXS52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoYyA+PSBjb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgdG9rZW4uaW5kZXggPSBpOwogICAgICAgIHRva2VuLnN0YXJ0ID0gYyAtIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9OwogICAgdGhpcy5zZXRVbmRvTWFuYWdlciA9IGZ1bmN0aW9uKHVuZG9NYW5hZ2VyKSB7CiAgICAgICAgdGhpcy4kdW5kb01hbmFnZXIgPSB1bmRvTWFuYWdlcjsKICAgICAgICAKICAgICAgICBpZiAodGhpcy4kaW5mb3JtVW5kb01hbmFnZXIpCiAgICAgICAgICAgIHRoaXMuJGluZm9ybVVuZG9NYW5hZ2VyLmNhbmNlbCgpOwogICAgICAgIAogICAgICAgIGlmICh1bmRvTWFuYWdlcikgewogICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgIHVuZG9NYW5hZ2VyLmFkZFNlc3Npb24odGhpcyk7CiAgICAgICAgICAgIHRoaXMuJHN5bmNJbmZvcm1VbmRvTWFuYWdlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgc2VsZi4kaW5mb3JtVW5kb01hbmFnZXIuY2FuY2VsKCk7CiAgICAgICAgICAgICAgICBzZWxmLm1lcmdlVW5kb0RlbHRhcyA9IGZhbHNlOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLiRpbmZvcm1VbmRvTWFuYWdlciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLiRzeW5jSW5mb3JtVW5kb01hbmFnZXIgPSBmdW5jdGlvbigpIHt9OwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLm1hcmtVbmRvR3JvdXAgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kc3luY0luZm9ybVVuZG9NYW5hZ2VyKQogICAgICAgICAgICB0aGlzLiRzeW5jSW5mb3JtVW5kb01hbmFnZXIoKTsKICAgIH07CiAgICAKICAgIHRoaXMuJGRlZmF1bHRVbmRvTWFuYWdlciA9IHsKICAgICAgICB1bmRvOiBmdW5jdGlvbigpIHt9LAogICAgICAgIHJlZG86IGZ1bmN0aW9uKCkge30sCiAgICAgICAgaGFzVW5kbzogZnVuY3Rpb24oKSB7fSwKICAgICAgICBoYXNSZWRvOiBmdW5jdGlvbigpIHt9LAogICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHt9LAogICAgICAgIGFkZDogZnVuY3Rpb24oKSB7fSwKICAgICAgICBhZGRTZWxlY3Rpb246IGZ1bmN0aW9uKCkge30sCiAgICAgICAgc3RhcnROZXdHcm91cDogZnVuY3Rpb24oKSB7fSwKICAgICAgICBhZGRTZXNzaW9uOiBmdW5jdGlvbigpIHt9CiAgICB9OwogICAgdGhpcy5nZXRVbmRvTWFuYWdlciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiR1bmRvTWFuYWdlciB8fCB0aGlzLiRkZWZhdWx0VW5kb01hbmFnZXI7CiAgICB9OwogICAgdGhpcy5nZXRUYWJTdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5nZXRVc2VTb2Z0VGFicygpKSB7CiAgICAgICAgICAgIHJldHVybiBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIHRoaXMuZ2V0VGFiU2l6ZSgpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gIlx0IjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJ1c2VTb2Z0VGFicyIsIHZhbCk7CiAgICB9OwogICAgdGhpcy5nZXRVc2VTb2Z0VGFicyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFicyAmJiAhdGhpcy4kbW9kZS4kaW5kZW50V2l0aFRhYnM7CiAgICB9OwogICAgdGhpcy5zZXRUYWJTaXplID0gZnVuY3Rpb24odGFiU2l6ZSkgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJ0YWJTaXplIiwgdGFiU2l6ZSk7CiAgICB9OwogICAgdGhpcy5nZXRUYWJTaXplID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHRhYlNpemU7CiAgICB9OwogICAgdGhpcy5pc1RhYlN0b3AgPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHJldHVybiB0aGlzLiR1c2VTb2Z0VGFicyAmJiAocG9zaXRpb24uY29sdW1uICUgdGhpcy4kdGFiU2l6ZSA9PT0gMCk7CiAgICB9OwogICAgdGhpcy5zZXROYXZpZ2F0ZVdpdGhpblNvZnRUYWJzID0gZnVuY3Rpb24gKG5hdmlnYXRlV2l0aGluU29mdFRhYnMpIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigibmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyIsIG5hdmlnYXRlV2l0aGluU29mdFRhYnMpOwogICAgfTsKICAgIHRoaXMuZ2V0TmF2aWdhdGVXaXRoaW5Tb2Z0VGFicyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzOwogICAgfTsKCiAgICB0aGlzLiRvdmVyd3JpdGUgPSBmYWxzZTsKICAgIHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oIm92ZXJ3cml0ZSIsIG92ZXJ3cml0ZSk7CiAgICB9OwogICAgdGhpcy5nZXRPdmVyd3JpdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3ZlcndyaXRlOwogICAgfTsKICAgIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5zZXRPdmVyd3JpdGUoIXRoaXMuJG92ZXJ3cml0ZSk7CiAgICB9OwogICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKICAgICAgICBpZiAoIXRoaXMuJGRlY29yYXRpb25zW3Jvd10pCiAgICAgICAgICAgIHRoaXMuJGRlY29yYXRpb25zW3Jvd10gPSAiIjsKICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddICs9ICIgIiArIGNsYXNzTmFtZTsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpIHsKICAgICAgICB0aGlzLiRkZWNvcmF0aW9uc1tyb3ddID0gKHRoaXMuJGRlY29yYXRpb25zW3Jvd10gfHwgIiIpLnJlcGxhY2UoIiAiICsgY2xhc3NOYW1lLCAiIik7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOwogICAgfTsKICAgIHRoaXMuZ2V0QnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kYnJlYWtwb2ludHM7CiAgICB9OwogICAgdGhpcy5zZXRCcmVha3BvaW50cyA9IGZ1bmN0aW9uKHJvd3MpIHsKICAgICAgICB0aGlzLiRicmVha3BvaW50cyA9IFtdOwogICAgICAgIGZvciAodmFyIGk9MDsgaTxyb3dzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd3NbaV1dID0gImFjZV9icmVha3BvaW50IjsKICAgICAgICB9CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOwogICAgfTsKICAgIHRoaXMuY2xlYXJCcmVha3BvaW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzID0gW107CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iiwge30pOwogICAgfTsKICAgIHRoaXMuc2V0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKSB7CiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gdW5kZWZpbmVkKQogICAgICAgICAgICBjbGFzc05hbWUgPSAiYWNlX2JyZWFrcG9pbnQiOwogICAgICAgIGlmIChjbGFzc05hbWUpCiAgICAgICAgICAgIHRoaXMuJGJyZWFrcG9pbnRzW3Jvd10gPSBjbGFzc05hbWU7CiAgICAgICAgZWxzZQogICAgICAgICAgICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CiAgICB9OwogICAgdGhpcy5jbGVhckJyZWFrcG9pbnQgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICBkZWxldGUgdGhpcy4kYnJlYWtwb2ludHNbcm93XTsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZUJyZWFrcG9pbnQiLCB7fSk7CiAgICB9OwogICAgdGhpcy5hZGRNYXJrZXIgPSBmdW5jdGlvbihyYW5nZSwgY2xhenosIHR5cGUsIGluRnJvbnQpIHsKICAgICAgICB2YXIgaWQgPSB0aGlzLiRtYXJrZXJJZCsrOwoKICAgICAgICB2YXIgbWFya2VyID0gewogICAgICAgICAgICByYW5nZSA6IHJhbmdlLAogICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIsCiAgICAgICAgICAgIHJlbmRlcmVyOiB0eXBlb2YgdHlwZSA9PSAiZnVuY3Rpb24iID8gdHlwZSA6IG51bGwsCiAgICAgICAgICAgIGNsYXp6IDogY2xhenosCiAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udCwKICAgICAgICAgICAgaWQ6IGlkCiAgICAgICAgfTsKCiAgICAgICAgaWYgKGluRnJvbnQpIHsKICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lkXSA9IG1hcmtlcjsKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VGcm9udE1hcmtlciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lkXSA9IG1hcmtlcjsKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VCYWNrTWFya2VyIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaWQ7CiAgICB9OwogICAgdGhpcy5hZGREeW5hbWljTWFya2VyID0gZnVuY3Rpb24obWFya2VyLCBpbkZyb250KSB7CiAgICAgICAgaWYgKCFtYXJrZXIudXBkYXRlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGlkID0gdGhpcy4kbWFya2VySWQrKzsKICAgICAgICBtYXJrZXIuaWQgPSBpZDsKICAgICAgICBtYXJrZXIuaW5Gcm9udCA9ICEhaW5Gcm9udDsKCiAgICAgICAgaWYgKGluRnJvbnQpIHsKICAgICAgICAgICAgdGhpcy4kZnJvbnRNYXJrZXJzW2lkXSA9IG1hcmtlcjsKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VGcm9udE1hcmtlciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJGJhY2tNYXJrZXJzW2lkXSA9IG1hcmtlcjsKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VCYWNrTWFya2VyIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbWFya2VyOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTWFya2VyID0gZnVuY3Rpb24obWFya2VySWQpIHsKICAgICAgICB2YXIgbWFya2VyID0gdGhpcy4kZnJvbnRNYXJrZXJzW21hcmtlcklkXSB8fCB0aGlzLiRiYWNrTWFya2Vyc1ttYXJrZXJJZF07CiAgICAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hcmtlcnMgPSBtYXJrZXIuaW5Gcm9udCA/IHRoaXMuJGZyb250TWFya2VycyA6IHRoaXMuJGJhY2tNYXJrZXJzOwogICAgICAgIGRlbGV0ZSAobWFya2Vyc1ttYXJrZXJJZF0pOwogICAgICAgIHRoaXMuX3NpZ25hbChtYXJrZXIuaW5Gcm9udCA/ICJjaGFuZ2VGcm9udE1hcmtlciIgOiAiY2hhbmdlQmFja01hcmtlciIpOwogICAgfTsKICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKGluRnJvbnQpIHsKICAgICAgICByZXR1cm4gaW5Gcm9udCA/IHRoaXMuJGZyb250TWFya2VycyA6IHRoaXMuJGJhY2tNYXJrZXJzOwogICAgfTsKCiAgICB0aGlzLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJlKSB7CiAgICAgICAgaWYgKCF0aGlzLiRzZWFyY2hIaWdobGlnaHQpIHsKICAgICAgICAgICAgdmFyIGhpZ2hsaWdodCA9IG5ldyBTZWFyY2hIaWdobGlnaHQobnVsbCwgImFjZV9zZWxlY3RlZC13b3JkIiwgInRleHQiKTsKICAgICAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0ID0gdGhpcy5hZGREeW5hbWljTWFya2VyKGhpZ2hsaWdodCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJHNlYXJjaEhpZ2hsaWdodC5zZXRSZWdleHAocmUpOwogICAgfTsKICAgIHRoaXMuaGlnaGxpZ2h0TGluZXMgPSBmdW5jdGlvbihzdGFydFJvdywgZW5kUm93LCBjbGF6eiwgaW5Gcm9udCkgewogICAgICAgIGlmICh0eXBlb2YgZW5kUm93ICE9ICJudW1iZXIiKSB7CiAgICAgICAgICAgIGNsYXp6ID0gZW5kUm93OwogICAgICAgICAgICBlbmRSb3cgPSBzdGFydFJvdzsKICAgICAgICB9CiAgICAgICAgaWYgKCFjbGF6eikKICAgICAgICAgICAgY2xhenogPSAiYWNlX3N0ZXAiOwoKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIDAsIGVuZFJvdywgSW5maW5pdHkpOwogICAgICAgIHJhbmdlLmlkID0gdGhpcy5hZGRNYXJrZXIocmFuZ2UsIGNsYXp6LCAiZnVsbExpbmUiLCBpbkZyb250KTsKICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICB9OwogICAgdGhpcy5zZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGFubm90YXRpb25zKSB7CiAgICAgICAgdGhpcy4kYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uczsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZUFubm90YXRpb24iLCB7fSk7CiAgICB9OwogICAgdGhpcy5nZXRBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRhbm5vdGF0aW9ucyB8fCBbXTsKICAgIH07CiAgICB0aGlzLmNsZWFyQW5ub3RhdGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNldEFubm90YXRpb25zKFtdKTsKICAgIH07CiAgICB0aGlzLiRkZXRlY3ROZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBtYXRjaCA9IHRleHQubWF0Y2goL14uKj8oXHI/XG4pL20pOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJGF1dG9OZXdMaW5lID0gIlxuIjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKHJvdyk7CgogICAgICAgIHZhciBpblRva2VuID0gZmFsc2U7CiAgICAgICAgaWYgKGNvbHVtbiA+IDApCiAgICAgICAgICAgIGluVG9rZW4gPSAhIWxpbmUuY2hhckF0KGNvbHVtbiAtIDEpLm1hdGNoKHRoaXMudG9rZW5SZSk7CgogICAgICAgIGlmICghaW5Ub2tlbikKICAgICAgICAgICAgaW5Ub2tlbiA9ICEhbGluZS5jaGFyQXQoY29sdW1uKS5tYXRjaCh0aGlzLnRva2VuUmUpOwoKICAgICAgICBpZiAoaW5Ub2tlbikKICAgICAgICAgICAgdmFyIHJlID0gdGhpcy50b2tlblJlOwogICAgICAgIGVsc2UgaWYgKC9eXHMrJC8udGVzdChsaW5lLnNsaWNlKGNvbHVtbi0xLCBjb2x1bW4rMSkpKQogICAgICAgICAgICB2YXIgcmUgPSAvXHMvOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIHJlID0gdGhpcy5ub25Ub2tlblJlOwoKICAgICAgICB2YXIgc3RhcnQgPSBjb2x1bW47CiAgICAgICAgaWYgKHN0YXJ0ID4gMCkgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBzdGFydC0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlIChzdGFydCA+PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KS5tYXRjaChyZSkpOwogICAgICAgICAgICBzdGFydCsrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZCA9IGNvbHVtbjsKICAgICAgICB3aGlsZSAoZW5kIDwgbGluZS5sZW5ndGggJiYgbGluZS5jaGFyQXQoZW5kKS5tYXRjaChyZSkpIHsKICAgICAgICAgICAgZW5kKys7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHJvdywgc3RhcnQsIHJvdywgZW5kKTsKICAgIH07CiAgICB0aGlzLmdldEFXb3JkUmFuZ2UgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciB3b3JkUmFuZ2UgPSB0aGlzLmdldFdvcmRSYW5nZShyb3csIGNvbHVtbik7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUod29yZFJhbmdlLmVuZC5yb3cpOwoKICAgICAgICB3aGlsZSAobGluZS5jaGFyQXQod29yZFJhbmdlLmVuZC5jb2x1bW4pLm1hdGNoKC9bIFx0XS8pKSB7CiAgICAgICAgICAgIHdvcmRSYW5nZS5lbmQuY29sdW1uICs9IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiB3b3JkUmFuZ2U7CiAgICB9OwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgdGhpcy5kb2Muc2V0TmV3TGluZU1vZGUobmV3TGluZU1vZGUpOwogICAgfTsKICAgIHRoaXMuZ2V0TmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTsKICAgIH07CiAgICB0aGlzLnNldFVzZVdvcmtlciA9IGZ1bmN0aW9uKHVzZVdvcmtlcikgeyB0aGlzLnNldE9wdGlvbigidXNlV29ya2VyIiwgdXNlV29ya2VyKTsgfTsKICAgIHRoaXMuZ2V0VXNlV29ya2VyID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLiR1c2VXb3JrZXI7IH07CiAgICB0aGlzLm9uUmVsb2FkVG9rZW5pemVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciByb3dzID0gZS5kYXRhOwogICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQocm93cy5maXJzdCk7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJ0b2tlbml6ZXJVcGRhdGUiLCBlKTsKICAgIH07CgogICAgdGhpcy4kbW9kZXMgPSBjb25maWcuJG1vZGVzOwogICAgdGhpcy4kbW9kZSA9IG51bGw7CiAgICB0aGlzLiRtb2RlSWQgPSBudWxsOwogICAgdGhpcy5zZXRNb2RlID0gZnVuY3Rpb24obW9kZSwgY2IpIHsKICAgICAgICBpZiAobW9kZSAmJiB0eXBlb2YgbW9kZSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgaWYgKG1vZGUuZ2V0VG9rZW5pemVyKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG9uQ2hhbmdlTW9kZShtb2RlKTsKICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBtb2RlOwogICAgICAgICAgICB2YXIgcGF0aCA9IG9wdGlvbnMucGF0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXRoID0gbW9kZSB8fCAiYWNlL21vZGUvdGV4dCI7CiAgICAgICAgfQogICAgICAgIGlmICghdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSkKICAgICAgICAgICAgdGhpcy4kbW9kZXNbImFjZS9tb2RlL3RleHQiXSA9IG5ldyBUZXh0TW9kZSgpOwoKICAgICAgICBpZiAodGhpcy4kbW9kZXNbcGF0aF0gJiYgIW9wdGlvbnMpIHsKICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzW3BhdGhdKTsKICAgICAgICAgICAgY2IgJiYgY2IoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLiRtb2RlSWQgPSBwYXRoOwogICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKFsibW9kZSIsIHBhdGhdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRtb2RlSWQgIT09IHBhdGgpCiAgICAgICAgICAgICAgICByZXR1cm4gY2IgJiYgY2IoKTsKICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGVzW3BhdGhdICYmICFvcHRpb25zKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUodGhpcy4kbW9kZXNbcGF0aF0pOwogICAgICAgICAgICB9IGVsc2UgaWYgKG0gJiYgbS5Nb2RlKSB7CiAgICAgICAgICAgICAgICBtID0gbmV3IG0uTW9kZShvcHRpb25zKTsKICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGVzW3BhdGhdID0gbTsKICAgICAgICAgICAgICAgICAgICBtLiRpZCA9IHBhdGg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUobSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2IgJiYgY2IoKTsKICAgICAgICB9LmJpbmQodGhpcykpOwogICAgICAgIGlmICghdGhpcy4kbW9kZSkKICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VNb2RlKHRoaXMuJG1vZGVzWyJhY2UvbW9kZS90ZXh0Il0sIHRydWUpOwogICAgfTsKCiAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihtb2RlLCAkaXNQbGFjZWhvbGRlcikgewogICAgICAgIGlmICghJGlzUGxhY2Vob2xkZXIpCiAgICAgICAgICAgIHRoaXMuJG1vZGVJZCA9IG1vZGUuJGlkOwogICAgICAgIGlmICh0aGlzLiRtb2RlID09PSBtb2RlKSAKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRtb2RlID0gbW9kZTsKCiAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOwoKICAgICAgICBpZiAodGhpcy4kdXNlV29ya2VyKQogICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOwoKICAgICAgICB2YXIgdG9rZW5pemVyID0gbW9kZS5nZXRUb2tlbml6ZXIoKTsKCiAgICAgICAgaWYodG9rZW5pemVyLmFkZEV2ZW50TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YXIgb25SZWxvYWRUb2tlbml6ZXIgPSB0aGlzLm9uUmVsb2FkVG9rZW5pemVyLmJpbmQodGhpcyk7CiAgICAgICAgICAgIHRva2VuaXplci5hZGRFdmVudExpc3RlbmVyKCJ1cGRhdGUiLCBvblJlbG9hZFRva2VuaXplcik7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRoaXMuYmdUb2tlbml6ZXIpIHsKICAgICAgICAgICAgdGhpcy5iZ1Rva2VuaXplciA9IG5ldyBCYWNrZ3JvdW5kVG9rZW5pemVyKHRva2VuaXplcik7CiAgICAgICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CiAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuYWRkRXZlbnRMaXN0ZW5lcigidXBkYXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgX3NlbGYuX3NpZ25hbCgidG9rZW5pemVyVXBkYXRlIiwgZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc2V0VG9rZW5pemVyKHRva2VuaXplcik7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KHRoaXMuZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHRoaXMudG9rZW5SZSA9IG1vZGUudG9rZW5SZTsKICAgICAgICB0aGlzLm5vblRva2VuUmUgPSBtb2RlLm5vblRva2VuUmU7CgogICAgICAgIAogICAgICAgIGlmICghJGlzUGxhY2Vob2xkZXIpIHsKICAgICAgICAgICAgaWYgKG1vZGUuYXR0YWNoVG9TZXNzaW9uKQogICAgICAgICAgICAgICAgbW9kZS5hdHRhY2hUb1Nlc3Npb24odGhpcyk7CiAgICAgICAgICAgIHRoaXMuJG9wdGlvbnMud3JhcE1ldGhvZC5zZXQuY2FsbCh0aGlzLCB0aGlzLiR3cmFwTWV0aG9kKTsKICAgICAgICAgICAgdGhpcy4kc2V0Rm9sZGluZyhtb2RlLmZvbGRpbmdSdWxlcyk7CiAgICAgICAgICAgIHRoaXMuYmdUb2tlbml6ZXIuc3RhcnQoMCk7CiAgICAgICAgICAgIHRoaXMuX2VtaXQoImNoYW5nZU1vZGUiKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJHN0b3BXb3JrZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kd29ya2VyKSB7CiAgICAgICAgICAgIHRoaXMuJHdvcmtlci50ZXJtaW5hdGUoKTsKICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJHN0YXJ0V29ya2VyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy4kd29ya2VyID0gdGhpcy4kbW9kZS5jcmVhdGVXb3JrZXIodGhpcyk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICBjb25maWcud2FybigiQ291bGQgbm90IGxvYWQgd29ya2VyIiwgZSk7CiAgICAgICAgICAgIHRoaXMuJHdvcmtlciA9IG51bGw7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0TW9kZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRtb2RlOwogICAgfTsKCiAgICB0aGlzLiRzY3JvbGxUb3AgPSAwOwogICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsKICAgICAgICBpZiAodGhpcy4kc2Nyb2xsVG9wID09PSBzY3JvbGxUb3AgfHwgaXNOYU4oc2Nyb2xsVG9wKSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRzY3JvbGxUb3AgPSBzY3JvbGxUb3A7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VTY3JvbGxUb3AiLCBzY3JvbGxUb3ApOwogICAgfTsKICAgIHRoaXMuZ2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbFRvcDsKICAgIH07CgogICAgdGhpcy4kc2Nyb2xsTGVmdCA9IDA7CiAgICB0aGlzLnNldFNjcm9sbExlZnQgPSBmdW5jdGlvbihzY3JvbGxMZWZ0KSB7CiAgICAgICAgaWYgKHRoaXMuJHNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgfHwgaXNOYU4oc2Nyb2xsTGVmdCkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdGhpcy4kc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VTY3JvbGxMZWZ0Iiwgc2Nyb2xsTGVmdCk7CiAgICB9OwogICAgdGhpcy5nZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHNjcm9sbExlZnQ7CiAgICB9OwogICAgdGhpcy5nZXRTY3JlZW5XaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGNvbXB1dGVXaWR0aCgpOwogICAgICAgIGlmICh0aGlzLmxpbmVXaWRnZXRzKSAKICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuZ2V0TGluZVdpZGdldE1heFdpZHRoKCksIHRoaXMuc2NyZWVuV2lkdGgpOwogICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRMaW5lV2lkZ2V0TWF4V2lkdGggPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5saW5lV2lkZ2V0c1dpZHRoICE9IG51bGwpIHJldHVybiB0aGlzLmxpbmVXaWRnZXRzV2lkdGg7CiAgICAgICAgdmFyIHdpZHRoID0gMDsKICAgICAgICB0aGlzLmxpbmVXaWRnZXRzLmZvckVhY2goZnVuY3Rpb24odykgewogICAgICAgICAgICBpZiAodyAmJiB3LnNjcmVlbldpZHRoID4gd2lkdGgpCiAgICAgICAgICAgICAgICB3aWR0aCA9IHcuc2NyZWVuV2lkdGg7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRoaXMubGluZVdpZGdldFdpZHRoID0gd2lkdGg7CiAgICB9OwoKICAgIHRoaXMuJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKGZvcmNlKSB7CiAgICAgICAgaWYgKHRoaXMuJG1vZGlmaWVkIHx8IGZvcmNlKSB7CiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY3JlZW5XaWR0aCA9IHRoaXMuJHdyYXBMaW1pdDsKCiAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExpbmVzKCk7CiAgICAgICAgICAgIHZhciBjYWNoZSA9IHRoaXMuJHJvd0xlbmd0aENhY2hlOwogICAgICAgICAgICB2YXIgbG9uZ2VzdFNjcmVlbkxpbmUgPSAwOwogICAgICAgICAgICB2YXIgZm9sZEluZGV4ID0gMDsKICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy4kZm9sZERhdGFbZm9sZEluZGV4XTsKICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CiAgICAgICAgICAgIHZhciBsZW4gPSBsaW5lcy5sZW5ndGg7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoaSA+IGZvbGRTdGFydCkgewogICAgICAgICAgICAgICAgICAgIGkgPSBmb2xkTGluZS5lbmQucm93ICsgMTsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBsZW4pCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy4kZm9sZERhdGFbZm9sZEluZGV4KytdOwogICAgICAgICAgICAgICAgICAgIGZvbGRTdGFydCA9IGZvbGRMaW5lID8gZm9sZExpbmUuc3RhcnQucm93IDogSW5maW5pdHk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID09IG51bGwpCiAgICAgICAgICAgICAgICAgICAgY2FjaGVbaV0gPSB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aChsaW5lc1tpXSlbMF07CgogICAgICAgICAgICAgICAgaWYgKGNhY2hlW2ldID4gbG9uZ2VzdFNjcmVlbkxpbmUpCiAgICAgICAgICAgICAgICAgICAgbG9uZ2VzdFNjcmVlbkxpbmUgPSBjYWNoZVtpXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gbG9uZ2VzdFNjcmVlbkxpbmU7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMaW5lKHJvdyk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKICAgIH07CiAgICB0aGlzLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRvYy5nZXRMZW5ndGgoKTsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmdldFRleHRSYW5nZShyYW5nZSB8fCB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpKTsKICAgIH07CiAgICB0aGlzLmluc2VydCA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLmluc2VydChwb3NpdGlvbiwgdGV4dCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmUgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmUocmFuZ2UpOwogICAgfTsKICAgIHRoaXMucmVtb3ZlRnVsbExpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpewogICAgICAgIHJldHVybiB0aGlzLmRvYy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMudW5kb0NoYW5nZXMgPSBmdW5jdGlvbihkZWx0YXMsIGRvbnRTZWxlY3QpIHsKICAgICAgICBpZiAoIWRlbHRhcy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdGhpcy4kZnJvbVVuZG8gPSB0cnVlOwogICAgICAgIGZvciAodmFyIGkgPSBkZWx0YXMubGVuZ3RoIC0gMTsgaSAhPSAtMTsgaS0tKSB7CiAgICAgICAgICAgIHZhciBkZWx0YSA9IGRlbHRhc1tpXTsKICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiB8fCBkZWx0YS5hY3Rpb24gPT0gInJlbW92ZSIpIHsKICAgICAgICAgICAgICAgIHRoaXMuZG9jLnJldmVydERlbHRhKGRlbHRhKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChkZWx0YS5mb2xkcykgewogICAgICAgICAgICAgICAgdGhpcy5hZGRGb2xkcyhkZWx0YS5mb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFkb250U2VsZWN0ICYmIHRoaXMuJHVuZG9TZWxlY3QpIHsKICAgICAgICAgICAgaWYgKGRlbHRhcy5zZWxlY3Rpb25CZWZvcmUpCiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5mcm9tSlNPTihkZWx0YXMuc2VsZWN0aW9uQmVmb3JlKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0UmFuZ2UodGhpcy4kZ2V0VW5kb1NlbGVjdGlvbihkZWx0YXMsIHRydWUpKTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKICAgIH07CiAgICB0aGlzLnJlZG9DaGFuZ2VzID0gZnVuY3Rpb24oZGVsdGFzLCBkb250U2VsZWN0KSB7CiAgICAgICAgaWYgKCFkZWx0YXMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHRoaXMuJGZyb21VbmRvID0gdHJ1ZTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CiAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gImluc2VydCIgfHwgZGVsdGEuYWN0aW9uID09ICJyZW1vdmUiKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRvYy5hcHBseURlbHRhKGRlbHRhKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFkb250U2VsZWN0ICYmIHRoaXMuJHVuZG9TZWxlY3QpIHsKICAgICAgICAgICAgaWYgKGRlbHRhcy5zZWxlY3Rpb25BZnRlcikKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmZyb21KU09OKGRlbHRhcy5zZWxlY3Rpb25BZnRlcik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHRoaXMuJGdldFVuZG9TZWxlY3Rpb24oZGVsdGFzLCBmYWxzZSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IGZhbHNlOwogICAgfTsKICAgIHRoaXMuc2V0VW5kb1NlbGVjdCA9IGZ1bmN0aW9uKGVuYWJsZSkgewogICAgICAgIHRoaXMuJHVuZG9TZWxlY3QgPSBlbmFibGU7CiAgICB9OwoKICAgIHRoaXMuJGdldFVuZG9TZWxlY3Rpb24gPSBmdW5jdGlvbihkZWx0YXMsIGlzVW5kbykgewogICAgICAgIGZ1bmN0aW9uIGlzSW5zZXJ0KGRlbHRhKSB7CiAgICAgICAgICAgIHJldHVybiBpc1VuZG8gPyBkZWx0YS5hY3Rpb24gIT09ICJpbnNlcnQiIDogZGVsdGEuYWN0aW9uID09PSAiaW5zZXJ0IjsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSwgcG9pbnQ7CiAgICAgICAgdmFyIGxhc3REZWx0YUlzSW5zZXJ0OwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbHRhcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgZGVsdGEgPSBkZWx0YXNbaV07CiAgICAgICAgICAgIGlmICghZGVsdGEuc3RhcnQpIGNvbnRpbnVlOyAvLyBza2lwIGZvbGRzCiAgICAgICAgICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEuc3RhcnQsIGRlbHRhLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgbGFzdERlbHRhSXNJbnNlcnQgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEuc3RhcnQsIGRlbHRhLnN0YXJ0KTsKICAgICAgICAgICAgICAgICAgICBsYXN0RGVsdGFJc0luc2VydCA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChpc0luc2VydChkZWx0YSkpIHsKICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEuc3RhcnQ7CiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRTdGFydChwb2ludCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwb2ludCA9IGRlbHRhLmVuZDsKICAgICAgICAgICAgICAgIGlmIChyYW5nZS5jb21wYXJlKHBvaW50LnJvdywgcG9pbnQuY29sdW1uKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKHBvaW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBvaW50ID0gZGVsdGEuc3RhcnQ7CiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuY29tcGFyZShwb2ludC5yb3csIHBvaW50LmNvbHVtbikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoZGVsdGEuc3RhcnQsIGRlbHRhLnN0YXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxhc3REZWx0YUlzSW5zZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgfTsKICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKHJhbmdlLCB0ZXh0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jLnJlcGxhY2UocmFuZ2UsIHRleHQpOwogICAgfTsKICAgIHRoaXMubW92ZVRleHQgPSBmdW5jdGlvbihmcm9tUmFuZ2UsIHRvUG9zaXRpb24sIGNvcHkpIHsKICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0VGV4dFJhbmdlKGZyb21SYW5nZSk7CiAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZnJvbVJhbmdlKTsKCiAgICAgICAgdmFyIHRvUmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHRvUG9zaXRpb24sIHRvUG9zaXRpb24pOwogICAgICAgIGlmICghY29weSkgewogICAgICAgICAgICB0aGlzLnJlbW92ZShmcm9tUmFuZ2UpOwogICAgICAgICAgICB2YXIgcm93RGlmZiA9IGZyb21SYW5nZS5zdGFydC5yb3cgLSBmcm9tUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgdmFyIGNvbGxEaWZmID0gcm93RGlmZiA/IC1mcm9tUmFuZ2UuZW5kLmNvbHVtbiA6IGZyb21SYW5nZS5zdGFydC5jb2x1bW4gLSBmcm9tUmFuZ2UuZW5kLmNvbHVtbjsKICAgICAgICAgICAgaWYgKGNvbGxEaWZmKSB7CiAgICAgICAgICAgICAgICBpZiAodG9SYW5nZS5zdGFydC5yb3cgPT0gZnJvbVJhbmdlLmVuZC5yb3cgJiYgdG9SYW5nZS5zdGFydC5jb2x1bW4gPiBmcm9tUmFuZ2UuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICB0b1JhbmdlLnN0YXJ0LmNvbHVtbiArPSBjb2xsRGlmZjsKICAgICAgICAgICAgICAgIGlmICh0b1JhbmdlLmVuZC5yb3cgPT0gZnJvbVJhbmdlLmVuZC5yb3cgJiYgdG9SYW5nZS5lbmQuY29sdW1uID4gZnJvbVJhbmdlLmVuZC5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgdG9SYW5nZS5lbmQuY29sdW1uICs9IGNvbGxEaWZmOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyb3dEaWZmICYmIHRvUmFuZ2Uuc3RhcnQucm93ID49IGZyb21SYW5nZS5lbmQucm93KSB7CiAgICAgICAgICAgICAgICB0b1JhbmdlLnN0YXJ0LnJvdyArPSByb3dEaWZmOwogICAgICAgICAgICAgICAgdG9SYW5nZS5lbmQucm93ICs9IHJvd0RpZmY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRvUmFuZ2UuZW5kID0gdGhpcy5pbnNlcnQodG9SYW5nZS5zdGFydCwgdGV4dCk7CiAgICAgICAgaWYgKGZvbGRzLmxlbmd0aCkgewogICAgICAgICAgICB2YXIgb2xkU3RhcnQgPSBmcm9tUmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAgIHZhciBuZXdTdGFydCA9IHRvUmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAgIHZhciByb3dEaWZmID0gbmV3U3RhcnQucm93IC0gb2xkU3RhcnQucm93OwogICAgICAgICAgICB2YXIgY29sbERpZmYgPSBuZXdTdGFydC5jb2x1bW4gLSBvbGRTdGFydC5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuYWRkRm9sZHMoZm9sZHMubWFwKGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgIHggPSB4LmNsb25lKCk7CiAgICAgICAgICAgICAgICBpZiAoeC5zdGFydC5yb3cgPT0gb2xkU3RhcnQucm93KQogICAgICAgICAgICAgICAgICAgIHguc3RhcnQuY29sdW1uICs9IGNvbGxEaWZmOwogICAgICAgICAgICAgICAgaWYgKHguZW5kLnJvdyA9PSBvbGRTdGFydC5yb3cpCiAgICAgICAgICAgICAgICAgICAgeC5lbmQuY29sdW1uICs9IGNvbGxEaWZmOwogICAgICAgICAgICAgICAgeC5zdGFydC5yb3cgKz0gcm93RGlmZjsKICAgICAgICAgICAgICAgIHguZW5kLnJvdyArPSByb3dEaWZmOwogICAgICAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgICAgIH0pKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0b1JhbmdlOwogICAgfTsKICAgIHRoaXMuaW5kZW50Um93cyA9IGZ1bmN0aW9uKHN0YXJ0Um93LCBlbmRSb3csIGluZGVudFN0cmluZykgewogICAgICAgIGluZGVudFN0cmluZyA9IGluZGVudFN0cmluZy5yZXBsYWNlKC9cdC9nLCB0aGlzLmdldFRhYlN0cmluZygpKTsKICAgICAgICBmb3IgKHZhciByb3c9c3RhcnRSb3c7IHJvdzw9ZW5kUm93OyByb3crKykKICAgICAgICAgICAgdGhpcy5kb2MuaW5zZXJ0SW5MaW5lKHtyb3c6IHJvdywgY29sdW1uOiAwfSwgaW5kZW50U3RyaW5nKTsKICAgIH07CiAgICB0aGlzLm91dGRlbnRSb3dzID0gZnVuY3Rpb24gKHJhbmdlKSB7CiAgICAgICAgdmFyIHJvd1JhbmdlID0gcmFuZ2UuY29sbGFwc2VSb3dzKCk7CiAgICAgICAgdmFyIGRlbGV0ZVJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApOwogICAgICAgIHZhciBzaXplID0gdGhpcy5nZXRUYWJTaXplKCk7CgogICAgICAgIGZvciAodmFyIGkgPSByb3dSYW5nZS5zdGFydC5yb3c7IGkgPD0gcm93UmFuZ2UuZW5kLnJvdzsgKytpKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5nZXRMaW5lKGkpOwoKICAgICAgICAgICAgZGVsZXRlUmFuZ2Uuc3RhcnQucm93ID0gaTsKICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLnJvdyA9IGk7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgKytqKQogICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGopICE9ICcgJykKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgaWYgKGogPCBzaXplICYmIGxpbmUuY2hhckF0KGopID09ICdcdCcpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LmNvbHVtbiA9IGo7CiAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gaiArIDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZWxldGVSYW5nZS5zdGFydC5jb2x1bW4gPSAwOwogICAgICAgICAgICAgICAgZGVsZXRlUmFuZ2UuZW5kLmNvbHVtbiA9IGo7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZW1vdmUoZGVsZXRlUmFuZ2UpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3csIGRpcikgewogICAgICAgIGZpcnN0Um93ID0gdGhpcy5nZXRSb3dGb2xkU3RhcnQoZmlyc3RSb3cpOwogICAgICAgIGxhc3RSb3cgPSB0aGlzLmdldFJvd0ZvbGRFbmQobGFzdFJvdyk7CiAgICAgICAgaWYgKGRpciA8IDApIHsKICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93Rm9sZFN0YXJ0KGZpcnN0Um93ICsgZGlyKTsKICAgICAgICAgICAgaWYgKHJvdyA8IDApIHJldHVybiAwOwogICAgICAgICAgICB2YXIgZGlmZiA9IHJvdy1maXJzdFJvdzsKICAgICAgICB9IGVsc2UgaWYgKGRpciA+IDApIHsKICAgICAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93Rm9sZEVuZChsYXN0Um93ICsgZGlyKTsKICAgICAgICAgICAgaWYgKHJvdyA+IHRoaXMuZG9jLmdldExlbmd0aCgpLTEpIHJldHVybiAwOwogICAgICAgICAgICB2YXIgZGlmZiA9IHJvdy1sYXN0Um93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpcnN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQoZmlyc3RSb3cpOwogICAgICAgICAgICBsYXN0Um93ID0gdGhpcy4kY2xpcFJvd1RvRG9jdW1lbnQobGFzdFJvdyk7CiAgICAgICAgICAgIHZhciBkaWZmID0gbGFzdFJvdyAtIGZpcnN0Um93ICsgMTsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShmaXJzdFJvdywgMCwgbGFzdFJvdywgTnVtYmVyLk1BWF9WQUxVRSk7CiAgICAgICAgdmFyIGZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UocmFuZ2UpLm1hcChmdW5jdGlvbih4KXsKICAgICAgICAgICAgeCA9IHguY2xvbmUoKTsKICAgICAgICAgICAgeC5zdGFydC5yb3cgKz0gZGlmZjsKICAgICAgICAgICAgeC5lbmQucm93ICs9IGRpZmY7CiAgICAgICAgICAgIHJldHVybiB4OwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHZhciBsaW5lcyA9IGRpciA9PSAwCiAgICAgICAgICAgID8gdGhpcy5kb2MuZ2V0TGluZXMoZmlyc3RSb3csIGxhc3RSb3cpCiAgICAgICAgICAgIDogdGhpcy5kb2MucmVtb3ZlRnVsbExpbmVzKGZpcnN0Um93LCBsYXN0Um93KTsKICAgICAgICB0aGlzLmRvYy5pbnNlcnRGdWxsTGluZXMoZmlyc3RSb3crZGlmZiwgbGluZXMpOwogICAgICAgIGZvbGRzLmxlbmd0aCAmJiB0aGlzLmFkZEZvbGRzKGZvbGRzKTsKICAgICAgICByZXR1cm4gZGlmZjsKICAgIH07CiAgICB0aGlzLm1vdmVMaW5lc1VwID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbW92ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93LCAtMSk7CiAgICB9OwogICAgdGhpcy5tb3ZlTGluZXNEb3duID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbW92ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93LCAxKTsKICAgIH07CiAgICB0aGlzLmR1cGxpY2F0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICByZXR1cm4gdGhpcy4kbW92ZUxpbmVzKGZpcnN0Um93LCBsYXN0Um93LCAwKTsKICAgIH07CgoKICAgIHRoaXMuJGNsaXBSb3dUb0RvY3VtZW50ID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvdywgdGhpcy5kb2MuZ2V0TGVuZ3RoKCktMSkpOwogICAgfTsKCiAgICB0aGlzLiRjbGlwQ29sdW1uVG9Sb3cgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5kb2MuZ2V0TGluZShyb3cpLmxlbmd0aCwgY29sdW1uKTsKICAgIH07CgoKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGNvbHVtbiA9IE1hdGgubWF4KDAsIGNvbHVtbik7CgogICAgICAgIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgICAgIGNvbHVtbiA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGxlbiA9IHRoaXMuZG9jLmdldExlbmd0aCgpOwogICAgICAgICAgICBpZiAocm93ID49IGxlbikgewogICAgICAgICAgICAgICAgcm93ID0gbGVuIC0gMTsKICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuZG9jLmdldExpbmUobGVuLTEpLmxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbHVtbiA9IE1hdGgubWluKHRoaXMuZG9jLmdldExpbmUocm93KS5sZW5ndGgsIGNvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICBjb2x1bW46IGNvbHVtbgogICAgICAgIH07CiAgICB9OwoKICAgIHRoaXMuJGNsaXBSYW5nZVRvRG9jdW1lbnQgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPCAwKSB7CiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LnJvdyA9IDA7CiAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gdGhpcy4kY2xpcENvbHVtblRvUm93KAogICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93LAogICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB2YXIgbGVuID0gdGhpcy5kb2MuZ2V0TGVuZ3RoKCkgLSAxOwogICAgICAgIGlmIChyYW5nZS5lbmQucm93ID4gbGVuKSB7CiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgPSBsZW47CiAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0aGlzLmRvYy5nZXRMaW5lKGxlbikubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSB0aGlzLiRjbGlwQ29sdW1uVG9Sb3coCiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93LAogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICB9OwogICAgdGhpcy4kd3JhcExpbWl0ID0gODA7CiAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IGZhbHNlOwogICAgdGhpcy4kd3JhcExpbWl0UmFuZ2UgPSB7CiAgICAgICAgbWluIDogbnVsbCwKICAgICAgICBtYXggOiBudWxsCiAgICB9OwogICAgdGhpcy5zZXRVc2VXcmFwTW9kZSA9IGZ1bmN0aW9uKHVzZVdyYXBNb2RlKSB7CiAgICAgICAgaWYgKHVzZVdyYXBNb2RlICE9IHRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgIHRoaXMuJHVzZVdyYXBNb2RlID0gdXNlV3JhcE1vZGU7CiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy4kcmVzZXRSb3dDYWNoZSgwKTsKICAgICAgICAgICAgaWYgKHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5nZXRMZW5ndGgoKTsKICAgICAgICAgICAgICAgIHRoaXMuJHdyYXBEYXRhID0gQXJyYXkobGVuKTsKICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVdyYXBEYXRhKDAsIGxlbiAtIDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZVdyYXBNb2RlIik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0VXNlV3JhcE1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kdXNlV3JhcE1vZGU7CiAgICB9OwogICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZSA9IGZ1bmN0aW9uKG1pbiwgbWF4KSB7CiAgICAgICAgaWYgKHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1pbiAhPT0gbWluIHx8IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heCAhPT0gbWF4KSB7CiAgICAgICAgICAgIHRoaXMuJHdyYXBMaW1pdFJhbmdlID0geyBtaW46IG1pbiwgbWF4OiBtYXggfTsKICAgICAgICAgICAgdGhpcy4kbW9kaWZpZWQgPSB0cnVlOwogICAgICAgICAgICB0aGlzLiRiaWRpSGFuZGxlci5tYXJrQXNEaXJ0eSgpOwogICAgICAgICAgICBpZiAodGhpcy4kdXNlV3JhcE1vZGUpCiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZVdyYXBNb2RlIik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYWRqdXN0V3JhcExpbWl0ID0gZnVuY3Rpb24oZGVzaXJlZExpbWl0LCAkcHJpbnRNYXJnaW4pIHsKICAgICAgICB2YXIgbGltaXRzID0gdGhpcy4kd3JhcExpbWl0UmFuZ2U7CiAgICAgICAgaWYgKGxpbWl0cy5tYXggPCAwKQogICAgICAgICAgICBsaW1pdHMgPSB7bWluOiAkcHJpbnRNYXJnaW4sIG1heDogJHByaW50TWFyZ2lufTsKICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kY29uc3RyYWluV3JhcExpbWl0KGRlc2lyZWRMaW1pdCwgbGltaXRzLm1pbiwgbGltaXRzLm1heCk7CiAgICAgICAgaWYgKHdyYXBMaW1pdCAhPSB0aGlzLiR3cmFwTGltaXQgJiYgd3JhcExpbWl0ID4gMSkgewogICAgICAgICAgICB0aGlzLiR3cmFwTGltaXQgPSB3cmFwTGltaXQ7CiAgICAgICAgICAgIHRoaXMuJG1vZGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YSgwLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgICAgICB0aGlzLiRyZXNldFJvd0NhY2hlKDApOwogICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VXcmFwTGltaXQiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB0aGlzLiRjb25zdHJhaW5XcmFwTGltaXQgPSBmdW5jdGlvbih3cmFwTGltaXQsIG1pbiwgbWF4KSB7CiAgICAgICAgaWYgKG1pbikKICAgICAgICAgICAgd3JhcExpbWl0ID0gTWF0aC5tYXgobWluLCB3cmFwTGltaXQpOwoKICAgICAgICBpZiAobWF4KQogICAgICAgICAgICB3cmFwTGltaXQgPSBNYXRoLm1pbihtYXgsIHdyYXBMaW1pdCk7CgogICAgICAgIHJldHVybiB3cmFwTGltaXQ7CiAgICB9OwogICAgdGhpcy5nZXRXcmFwTGltaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kd3JhcExpbWl0OwogICAgfTsKICAgIHRoaXMuc2V0V3JhcExpbWl0ID0gZnVuY3Rpb24gKGxpbWl0KSB7CiAgICAgICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZShsaW1pdCwgbGltaXQpOwogICAgfTsKICAgIHRoaXMuZ2V0V3JhcExpbWl0UmFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBtaW4gOiB0aGlzLiR3cmFwTGltaXRSYW5nZS5taW4sCiAgICAgICAgICAgIG1heCA6IHRoaXMuJHdyYXBMaW1pdFJhbmdlLm1heAogICAgICAgIH07CiAgICB9OwoKICAgIHRoaXMuJHVwZGF0ZUludGVybmFsRGF0YU9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICB2YXIgdXNlV3JhcE1vZGUgPSB0aGlzLiR1c2VXcmFwTW9kZTsKICAgICAgICB2YXIgYWN0aW9uID0gZGVsdGEuYWN0aW9uOwogICAgICAgIHZhciBzdGFydCA9IGRlbHRhLnN0YXJ0OwogICAgICAgIHZhciBlbmQgPSBkZWx0YS5lbmQ7CiAgICAgICAgdmFyIGZpcnN0Um93ID0gc3RhcnQucm93OwogICAgICAgIHZhciBsYXN0Um93ID0gZW5kLnJvdzsKICAgICAgICB2YXIgbGVuID0gbGFzdFJvdyAtIGZpcnN0Um93OwogICAgICAgIHZhciByZW1vdmVkRm9sZHMgPSBudWxsOwogICAgICAgIAogICAgICAgIHRoaXMuJHVwZGF0aW5nID0gdHJ1ZTsKICAgICAgICBpZiAobGVuICE9IDApIHsKICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gInJlbW92ZSIpIHsKICAgICAgICAgICAgICAgIHRoaXNbdXNlV3JhcE1vZGUgPyAiJHdyYXBEYXRhIiA6ICIkcm93TGVuZ3RoQ2FjaGUiXS5zcGxpY2UoZmlyc3RSb3csIGxlbik7CgogICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOwogICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZGVsdGEpOwogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOwoKICAgICAgICAgICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUoZW5kLnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewogICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGVuZC5yb3csIGVuZC5jb2x1bW4sIHN0YXJ0LmNvbHVtbiAtIGVuZC5jb2x1bW4pOwogICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KC1sZW4pOwoKICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmVCZWZvcmUgPSB0aGlzLmdldEZvbGRMaW5lKGZpcnN0Um93KTsKICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmVCZWZvcmUgJiYgZm9sZExpbmVCZWZvcmUgIT09IGZvbGRMaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lQmVmb3JlLm1lcmdlKGZvbGRMaW5lKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZUJlZm9yZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWR4ID0gZm9sZExpbmVzLmluZGV4T2YoZm9sZExpbmUpICsgMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBmb3IgKGlkeDsgaWR4IDwgZm9sZExpbmVzLmxlbmd0aDsgaWR4KyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZm9sZExpbmUgPSBmb2xkTGluZXNbaWR4XTsKICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZExpbmUuc3RhcnQucm93ID49IGVuZC5yb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3coLWxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxhc3RSb3cgPSBmaXJzdFJvdzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuKTsKICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChmaXJzdFJvdywgMCk7CiAgICAgICAgICAgICAgICB2YXIgYXJyID0gdXNlV3JhcE1vZGUgPyB0aGlzLiR3cmFwRGF0YSA6IHRoaXMuJHJvd0xlbmd0aENhY2hlOwogICAgICAgICAgICAgICAgYXJyLnNwbGljZS5hcHBseShhcnIsIGFyZ3MpOwogICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lcyA9IHRoaXMuJGZvbGREYXRhOwogICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CiAgICAgICAgICAgICAgICB2YXIgaWR4ID0gMDsKICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBjbXAgPSBmb2xkTGluZS5yYW5nZS5jb21wYXJlSW5zaWRlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgICAgICAgICBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSBmb2xkTGluZS5zcGxpdChzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUuc2hpZnRSb3cobGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLmFkZFJlbW92ZUNoYXJzKGxhc3RSb3csIDAsIGVuZC5jb2x1bW4gLSBzdGFydC5jb2x1bW4pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5hZGRSZW1vdmVDaGFycyhmaXJzdFJvdywgMCwgZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRMaW5lLnNoaWZ0Um93KGxlbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlkeCA9IGZvbGRMaW5lcy5pbmRleE9mKGZvbGRMaW5lKSArIDE7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZm9yIChpZHg7IGlkeCA8IGZvbGRMaW5lcy5sZW5ndGg7IGlkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gZm9sZExpbmVzW2lkeF07CiAgICAgICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLnN0YXJ0LnJvdyA+PSBmaXJzdFJvdykgewogICAgICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5zaGlmdFJvdyhsZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxlbiA9IE1hdGguYWJzKGRlbHRhLnN0YXJ0LmNvbHVtbiAtIGRlbHRhLmVuZC5jb2x1bW4pOwogICAgICAgICAgICBpZiAoYWN0aW9uID09PSAicmVtb3ZlIikgewogICAgICAgICAgICAgICAgcmVtb3ZlZEZvbGRzID0gdGhpcy5nZXRGb2xkc0luUmFuZ2UoZGVsdGEpOwogICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGb2xkcyhyZW1vdmVkRm9sZHMpOwoKICAgICAgICAgICAgICAgIGxlbiA9IC1sZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXRGb2xkTGluZShmaXJzdFJvdyk7CiAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewogICAgICAgICAgICAgICAgZm9sZExpbmUuYWRkUmVtb3ZlQ2hhcnMoZmlyc3RSb3csIHN0YXJ0LmNvbHVtbiwgbGVuKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHVzZVdyYXBNb2RlICYmIHRoaXMuJHdyYXBEYXRhLmxlbmd0aCAhPSB0aGlzLmRvYy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJkb2MuZ2V0TGVuZ3RoKCkgYW5kICR3cmFwRGF0YS5sZW5ndGggaGF2ZSB0byBiZSB0aGUgc2FtZSEiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kdXBkYXRpbmcgPSBmYWxzZTsKCiAgICAgICAgaWYgKHVzZVdyYXBNb2RlKQogICAgICAgICAgICB0aGlzLiR1cGRhdGVXcmFwRGF0YShmaXJzdFJvdywgbGFzdFJvdyk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0aGlzLiR1cGRhdGVSb3dMZW5ndGhDYWNoZShmaXJzdFJvdywgbGFzdFJvdyk7CgogICAgICAgIHJldHVybiByZW1vdmVkRm9sZHM7CiAgICB9OwoKICAgIHRoaXMuJHVwZGF0ZVJvd0xlbmd0aENhY2hlID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3csIGIpIHsKICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZVtmaXJzdFJvd10gPSBudWxsOwogICAgICAgIHRoaXMuJHJvd0xlbmd0aENhY2hlW2xhc3RSb3ddID0gbnVsbDsKICAgIH07CgogICAgdGhpcy4kdXBkYXRlV3JhcERhdGEgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIHZhciBsaW5lcyA9IHRoaXMuZG9jLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIHRhYlNpemUgPSB0aGlzLmdldFRhYlNpemUoKTsKICAgICAgICB2YXIgd3JhcERhdGEgPSB0aGlzLiR3cmFwRGF0YTsKICAgICAgICB2YXIgd3JhcExpbWl0ID0gdGhpcy4kd3JhcExpbWl0OwogICAgICAgIHZhciB0b2tlbnM7CiAgICAgICAgdmFyIGZvbGRMaW5lOwoKICAgICAgICB2YXIgcm93ID0gZmlyc3RSb3c7CiAgICAgICAgbGFzdFJvdyA9IE1hdGgubWluKGxhc3RSb3csIGxpbmVzLmxlbmd0aCAtIDEpOwogICAgICAgIHdoaWxlIChyb3cgPD0gbGFzdFJvdykgewogICAgICAgICAgICBmb2xkTGluZSA9IHRoaXMuZ2V0Rm9sZExpbmUocm93LCBmb2xkTGluZSk7CiAgICAgICAgICAgIGlmICghZm9sZExpbmUpIHsKICAgICAgICAgICAgICAgIHRva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMobGluZXNbcm93XSk7CiAgICAgICAgICAgICAgICB3cmFwRGF0YVtyb3ddID0gdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHModG9rZW5zLCB3cmFwTGltaXQsIHRhYlNpemUpOwogICAgICAgICAgICAgICAgcm93ICsrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdG9rZW5zID0gW107CiAgICAgICAgICAgICAgICBmb2xkTGluZS53YWxrKGZ1bmN0aW9uKHBsYWNlaG9sZGVyLCByb3csIGNvbHVtbiwgbGFzdENvbHVtbikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2Fsa1Rva2VuczsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnMgPSB0aGlzLiRnZXREaXNwbGF5VG9rZW5zKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLCB0b2tlbnMubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbMF0gPSBQTEFDRUhPTERFUl9TVEFSVDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgd2Fsa1Rva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtUb2tlbnNbaV0gPSBQTEFDRUhPTERFUl9CT0RZOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fsa1Rva2VucyA9IHRoaXMuJGdldERpc3BsYXlUb2tlbnMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbcm93XS5zdWJzdHJpbmcobGFzdENvbHVtbiwgY29sdW1uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSB0b2tlbnMuY29uY2F0KHdhbGtUb2tlbnMpOwogICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSwKICAgICAgICAgICAgICAgICAgICBmb2xkTGluZS5lbmQucm93LAogICAgICAgICAgICAgICAgICAgIGxpbmVzW2ZvbGRMaW5lLmVuZC5yb3ddLmxlbmd0aCArIDEKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgd3JhcERhdGFbZm9sZExpbmUuc3RhcnQucm93XSA9IHRoaXMuJGNvbXB1dGVXcmFwU3BsaXRzKHRva2Vucywgd3JhcExpbWl0LCB0YWJTaXplKTsKICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHZhciBDSEFSID0gMSwKICAgICAgICBDSEFSX0VYVCA9IDIsCiAgICAgICAgUExBQ0VIT0xERVJfU1RBUlQgPSAzLAogICAgICAgIFBMQUNFSE9MREVSX0JPRFkgPSAgNCwKICAgICAgICBQVU5DVFVBVElPTiA9IDksCiAgICAgICAgU1BBQ0UgPSAxMCwKICAgICAgICBUQUIgPSAxMSwKICAgICAgICBUQUJfU1BBQ0UgPSAxMjsKCgogICAgdGhpcy4kY29tcHV0ZVdyYXBTcGxpdHMgPSBmdW5jdGlvbih0b2tlbnMsIHdyYXBMaW1pdCwgdGFiU2l6ZSkgewogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgdmFyIHNwbGl0cyA9IFtdOwogICAgICAgIHZhciBkaXNwbGF5TGVuZ3RoID0gdG9rZW5zLmxlbmd0aDsKICAgICAgICB2YXIgbGFzdFNwbGl0ID0gMCwgbGFzdERvY1NwbGl0ID0gMDsKCiAgICAgICAgdmFyIGlzQ29kZSA9IHRoaXMuJHdyYXBBc0NvZGU7CgogICAgICAgIHZhciBpbmRlbnRlZFNvZnRXcmFwID0gdGhpcy4kaW5kZW50ZWRTb2Z0V3JhcDsKICAgICAgICB2YXIgbWF4SW5kZW50ID0gd3JhcExpbWl0IDw9IE1hdGgubWF4KDIgKiB0YWJTaXplLCA4KQogICAgICAgICAgICB8fCBpbmRlbnRlZFNvZnRXcmFwID09PSBmYWxzZSA/IDAgOiBNYXRoLmZsb29yKHdyYXBMaW1pdCAvIDIpOwoKICAgICAgICBmdW5jdGlvbiBnZXRXcmFwSW5kZW50KCkgewogICAgICAgICAgICB2YXIgaW5kZW50YXRpb24gPSAwOwogICAgICAgICAgICBpZiAobWF4SW5kZW50ID09PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudGF0aW9uOwogICAgICAgICAgICBpZiAoaW5kZW50ZWRTb2Z0V3JhcCkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IFNQQUNFKQogICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiArPSAxOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09IFRBQikKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50YXRpb24gKz0gdGFiU2l6ZTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSBUQUJfU1BBQ0UpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzQ29kZSAmJiBpbmRlbnRlZFNvZnRXcmFwICE9PSBmYWxzZSkKICAgICAgICAgICAgICAgIGluZGVudGF0aW9uICs9IHRhYlNpemU7CiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihpbmRlbnRhdGlvbiwgbWF4SW5kZW50KTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkU3BsaXQoc2NyZWVuUG9zKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSBzY3JlZW5Qb3MgLSBsYXN0U3BsaXQ7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSBsYXN0U3BsaXQ7IGkgPCBzY3JlZW5Qb3M7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNoID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMiB8fCBjaCA9PT0gMikgbGVuIC09IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghc3BsaXRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgaW5kZW50ID0gZ2V0V3JhcEluZGVudCgpOwogICAgICAgICAgICAgICAgc3BsaXRzLmluZGVudCA9IGluZGVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0RG9jU3BsaXQgKz0gbGVuOwogICAgICAgICAgICBzcGxpdHMucHVzaChsYXN0RG9jU3BsaXQpOwogICAgICAgICAgICBsYXN0U3BsaXQgPSBzY3JlZW5Qb3M7CiAgICAgICAgfQogICAgICAgIHZhciBpbmRlbnQgPSAwOwogICAgICAgIHdoaWxlIChkaXNwbGF5TGVuZ3RoIC0gbGFzdFNwbGl0ID4gd3JhcExpbWl0IC0gaW5kZW50KSB7CiAgICAgICAgICAgIHZhciBzcGxpdCA9IGxhc3RTcGxpdCArIHdyYXBMaW1pdCAtIGluZGVudDsKICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdCAtIDFdID49IFNQQUNFICYmIHRva2Vuc1tzcGxpdF0gPj0gU1BBQ0UpIHsKICAgICAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX1NUQVJUIHx8IHRva2Vuc1tzcGxpdF0gPT0gUExBQ0VIT0xERVJfQk9EWSkgewogICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3BsaXQgIT0gbGFzdFNwbGl0IC0gMTsgc3BsaXQtLSkgewogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IFBMQUNFSE9MREVSX1NUQVJUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzcGxpdCA+IGxhc3RTcGxpdCkgewogICAgICAgICAgICAgICAgICAgIGFkZFNwbGl0KHNwbGl0KTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNwbGl0ID0gbGFzdFNwbGl0ICsgd3JhcExpbWl0OwogICAgICAgICAgICAgICAgZm9yIChzcGxpdDsgc3BsaXQgPCB0b2tlbnMubGVuZ3RoOyBzcGxpdCsrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1tzcGxpdF0gIT0gUExBQ0VIT0xERVJfQk9EWSkgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc3BsaXQgPT0gdG9rZW5zLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gQnJlYWtzIHRoZSB3aGlsZS1sb29wLgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1pblNwbGl0ID0gTWF0aC5tYXgoc3BsaXQgLSAod3JhcExpbWl0IC0od3JhcExpbWl0Pj4yKSksIGxhc3RTcGxpdCAtIDEpOwogICAgICAgICAgICB3aGlsZSAoc3BsaXQgPiBtaW5TcGxpdCAmJiB0b2tlbnNbc3BsaXRdIDwgUExBQ0VIT0xERVJfU1RBUlQpIHsKICAgICAgICAgICAgICAgIHNwbGl0IC0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChpc0NvZGUpIHsKICAgICAgICAgICAgICAgIHdoaWxlIChzcGxpdCA+IG1pblNwbGl0ICYmIHRva2Vuc1tzcGxpdF0gPCBQTEFDRUhPTERFUl9TVEFSVCkgewogICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA9PSBQVU5DVFVBVElPTikgewogICAgICAgICAgICAgICAgICAgIHNwbGl0IC0tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgd2hpbGUgKHNwbGl0ID4gbWluU3BsaXQgJiYgdG9rZW5zW3NwbGl0XSA8IFNQQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgc3BsaXQgLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHNwbGl0ID4gbWluU3BsaXQpIHsKICAgICAgICAgICAgICAgIGFkZFNwbGl0KCsrc3BsaXQpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3BsaXQgPSBsYXN0U3BsaXQgKyB3cmFwTGltaXQ7CiAgICAgICAgICAgIGlmICh0b2tlbnNbc3BsaXRdID09IENIQVJfRVhUKQogICAgICAgICAgICAgICAgc3BsaXQtLTsKICAgICAgICAgICAgYWRkU3BsaXQoc3BsaXQgLSBpbmRlbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3BsaXRzOwogICAgfTsKICAgIHRoaXMuJGdldERpc3BsYXlUb2tlbnMgPSBmdW5jdGlvbihzdHIsIG9mZnNldCkgewogICAgICAgIHZhciBhcnIgPSBbXTsKICAgICAgICB2YXIgdGFiU2l6ZTsKICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGMgPSBzdHIuY2hhckNvZGVBdChpKTsKICAgICAgICAgICAgaWYgKGMgPT0gOSkgewogICAgICAgICAgICAgICAgdGFiU2l6ZSA9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShhcnIubGVuZ3RoICsgb2Zmc2V0KTsKICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQik7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMTsgbiA8IHRhYlNpemU7IG4rKykgewogICAgICAgICAgICAgICAgICAgIGFyci5wdXNoKFRBQl9TUEFDRSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAzMikgewogICAgICAgICAgICAgICAgYXJyLnB1c2goU1BBQ0UpOwogICAgICAgICAgICB9IGVsc2UgaWYoKGMgPiAzOSAmJiBjIDwgNDgpIHx8IChjID4gNTcgJiYgYyA8IDY0KSkgewogICAgICAgICAgICAgICAgYXJyLnB1c2goUFVOQ1RVQVRJT04pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMTAwICYmIGlzRnVsbFdpZHRoKGMpKSB7CiAgICAgICAgICAgICAgICBhcnIucHVzaChDSEFSLCBDSEFSX0VYVCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhcnIucHVzaChDSEFSKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyOwogICAgfTsKICAgIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoID0gZnVuY3Rpb24oc3RyLCBtYXhTY3JlZW5Db2x1bW4sIHNjcmVlbkNvbHVtbikgewogICAgICAgIGlmIChtYXhTY3JlZW5Db2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIFswLCAwXTsKICAgICAgICBpZiAobWF4U2NyZWVuQ29sdW1uID09IG51bGwpCiAgICAgICAgICAgIG1heFNjcmVlbkNvbHVtbiA9IEluZmluaXR5OwogICAgICAgIHNjcmVlbkNvbHVtbiA9IHNjcmVlbkNvbHVtbiB8fCAwOwoKICAgICAgICB2YXIgYywgY29sdW1uOwogICAgICAgIGZvciAoY29sdW1uID0gMDsgY29sdW1uIDwgc3RyLmxlbmd0aDsgY29sdW1uKyspIHsKICAgICAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KGNvbHVtbik7CiAgICAgICAgICAgIGlmIChjID09IDkpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0aGlzLmdldFNjcmVlblRhYlNpemUoc2NyZWVuQ29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChjID49IDB4MTEwMCAmJiBpc0Z1bGxXaWR0aChjKSkgewogICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtzY3JlZW5Db2x1bW4sIGNvbHVtbl07CiAgICB9OwoKICAgIHRoaXMubGluZVdpZGdldHMgPSBudWxsOwogICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICBpZiAodGhpcy5saW5lV2lkZ2V0cykKICAgICAgICAgICAgdmFyIGggPSB0aGlzLmxpbmVXaWRnZXRzW3Jvd10gJiYgdGhpcy5saW5lV2lkZ2V0c1tyb3ddLnJvd0NvdW50IHx8IDA7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgaCA9IDA7CiAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSB8fCAhdGhpcy4kd3JhcERhdGFbcm93XSkgewogICAgICAgICAgICByZXR1cm4gMSArIGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd10ubGVuZ3RoICsgMSArIGg7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Um93TGluZUNvdW50ID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgaWYgKCF0aGlzLiR1c2VXcmFwTW9kZSB8fCAhdGhpcy4kd3JhcERhdGFbcm93XSkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5nZXRSb3dXcmFwSW5kZW50ID0gZnVuY3Rpb24oc2NyZWVuUm93KSB7CiAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgIHZhciBwb3MgPSB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhfVkFMVUUpOwogICAgICAgICAgICB2YXIgc3BsaXRzID0gdGhpcy4kd3JhcERhdGFbcG9zLnJvd107CiAgICAgICAgICAgIHJldHVybiBzcGxpdHMubGVuZ3RoICYmIHNwbGl0c1swXSA8IHBvcy5jb2x1bW4gPyBzcGxpdHMuaW5kZW50IDogMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRTY3JlZW5MYXN0Um93Q29sdW1uID0gZnVuY3Rpb24oc2NyZWVuUm93KSB7CiAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgTnVtYmVyLk1BWF9WQUxVRSk7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50TGFzdFJvd0NvbHVtbiA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CiAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuZG9jdW1lbnRUb1NjcmVlblJvdyhkb2NSb3csIGRvY0NvbHVtbik7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NyZWVuTGFzdFJvd0NvbHVtbihzY3JlZW5Sb3cpOwogICAgfTsKICAgIHRoaXMuZ2V0RG9jdW1lbnRMYXN0Um93Q29sdW1uUG9zaXRpb24gPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewogICAgICAgIHZhciBzY3JlZW5Sb3cgPSB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3coZG9jUm93LCBkb2NDb2x1bW4pOwogICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIE51bWJlci5NQVhfVkFMVUUgLyAxMCk7CiAgICB9OwogICAgdGhpcy5nZXRSb3dTcGxpdERhdGEgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdyYXBEYXRhW3Jvd107CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZSA9IGZ1bmN0aW9uKHNjcmVlbkNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLiR0YWJTaXplIC0gKHNjcmVlbkNvbHVtbiAlIHRoaXMuJHRhYlNpemUgfCAwKTsKICAgIH07CgoKICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFJvdyA9IGZ1bmN0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblJvdywgc2NyZWVuQ29sdW1uKS5yb3c7CiAgICB9OwoKCiAgICB0aGlzLnNjcmVlblRvRG9jdW1lbnRDb2x1bW4gPSBmdW5jdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5Sb3csIHNjcmVlbkNvbHVtbikuY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24oc2NyZWVuUm93LCBzY3JlZW5Db2x1bW4sIG9mZnNldFgpIHsKICAgICAgICBpZiAoc2NyZWVuUm93IDwgMCkKICAgICAgICAgICAgcmV0dXJuIHtyb3c6IDAsIGNvbHVtbjogMH07CgogICAgICAgIHZhciBsaW5lOwogICAgICAgIHZhciBkb2NSb3cgPSAwOwogICAgICAgIHZhciBkb2NDb2x1bW4gPSAwOwogICAgICAgIHZhciBjb2x1bW47CiAgICAgICAgdmFyIHJvdyA9IDA7CiAgICAgICAgdmFyIHJvd0xlbmd0aCA9IDA7CgogICAgICAgIHZhciByb3dDYWNoZSA9IHRoaXMuJHNjcmVlblJvd0NhY2hlOwogICAgICAgIHZhciBpID0gdGhpcy4kZ2V0Um93Q2FjaGVJbmRleChyb3dDYWNoZSwgc2NyZWVuUm93KTsKICAgICAgICB2YXIgbCA9IHJvd0NhY2hlLmxlbmd0aDsKICAgICAgICBpZiAobCAmJiBpID49IDApIHsKICAgICAgICAgICAgdmFyIHJvdyA9IHJvd0NhY2hlW2ldOwogICAgICAgICAgICB2YXIgZG9jUm93ID0gdGhpcy4kZG9jUm93Q2FjaGVbaV07CiAgICAgICAgICAgIHZhciBkb0NhY2hlID0gc2NyZWVuUm93ID4gcm93Q2FjaGVbbCAtIDFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBkb0NhY2hlID0gIWw7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF4Um93ID0gdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUoZG9jUm93KTsKICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKCiAgICAgICAgd2hpbGUgKHJvdyA8PSBzY3JlZW5Sb3cpIHsKICAgICAgICAgICAgcm93TGVuZ3RoID0gdGhpcy5nZXRSb3dMZW5ndGgoZG9jUm93KTsKICAgICAgICAgICAgaWYgKHJvdyArIHJvd0xlbmd0aCA+IHNjcmVlblJvdyB8fCBkb2NSb3cgPj0gbWF4Um93KSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJvdyArPSByb3dMZW5ndGg7CiAgICAgICAgICAgICAgICBkb2NSb3crKzsKICAgICAgICAgICAgICAgIGlmIChkb2NSb3cgPiBmb2xkU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5lbmQucm93KzE7CiAgICAgICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLmdldE5leHRGb2xkTGluZShkb2NSb3csIGZvbGRMaW5lKTsKICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/IGZvbGRMaW5lLnN0YXJ0LnJvdyA6IEluZmluaXR5OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoZG9DYWNoZSkgewogICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUucHVzaChkb2NSb3cpOwogICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChyb3cpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZExpbmUgJiYgZm9sZExpbmUuc3RhcnQucm93IDw9IGRvY1JvdykgewogICAgICAgICAgICBsaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUpOwogICAgICAgICAgICBkb2NSb3cgPSBmb2xkTGluZS5zdGFydC5yb3c7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgKyByb3dMZW5ndGggPD0gc2NyZWVuUm93IHx8IGRvY1JvdyA+IG1heFJvdykgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcm93OiBtYXhSb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuZ2V0TGluZShtYXhSb3cpLmxlbmd0aAogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxpbmUgPSB0aGlzLmdldExpbmUoZG9jUm93KTsKICAgICAgICAgICAgZm9sZExpbmUgPSBudWxsOwogICAgICAgIH0KICAgICAgICB2YXIgd3JhcEluZGVudCA9IDAsIHNwbGl0SW5kZXggPSBNYXRoLmZsb29yKHNjcmVlblJvdyAtIHJvdyk7CiAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgIHZhciBzcGxpdHMgPSB0aGlzLiR3cmFwRGF0YVtkb2NSb3ddOwogICAgICAgICAgICBpZiAoc3BsaXRzKSB7CiAgICAgICAgICAgICAgICBjb2x1bW4gPSBzcGxpdHNbc3BsaXRJbmRleF07CiAgICAgICAgICAgICAgICBpZihzcGxpdEluZGV4ID4gMCAmJiBzcGxpdHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgd3JhcEluZGVudCA9IHNwbGl0cy5pbmRlbnQ7CiAgICAgICAgICAgICAgICAgICAgZG9jQ29sdW1uID0gc3BsaXRzW3NwbGl0SW5kZXggLSAxXSB8fCBzcGxpdHNbc3BsaXRzLmxlbmd0aCAtIDFdOwogICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN1YnN0cmluZyhkb2NDb2x1bW4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAob2Zmc2V0WCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyb3cgKyBzcGxpdEluZGV4LCBkb2NSb3csIHNwbGl0SW5kZXgpKQogICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRiaWRpSGFuZGxlci5vZmZzZXRUb0NvbChvZmZzZXRYKTsKCiAgICAgICAgZG9jQ29sdW1uICs9IHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKGxpbmUsIHNjcmVlbkNvbHVtbiAtIHdyYXBJbmRlbnQpWzFdOwogICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSAmJiBkb2NDb2x1bW4gPj0gY29sdW1uKQogICAgICAgICAgICBkb2NDb2x1bW4gPSBjb2x1bW4gLSAxOwoKICAgICAgICBpZiAoZm9sZExpbmUpCiAgICAgICAgICAgIHJldHVybiBmb2xkTGluZS5pZHhUb1Bvc2l0aW9uKGRvY0NvbHVtbik7CgogICAgICAgIHJldHVybiB7cm93OiBkb2NSb3csIGNvbHVtbjogZG9jQ29sdW1ufTsKICAgIH07CiAgICB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbiA9IGZ1bmN0aW9uKGRvY1JvdywgZG9jQ29sdW1uKSB7CiAgICAgICAgaWYgKHR5cGVvZiBkb2NDb2x1bW4gPT09ICJ1bmRlZmluZWQiKQogICAgICAgICAgICB2YXIgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChkb2NSb3cucm93LCBkb2NSb3cuY29sdW1uKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHBvcyA9IHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQoZG9jUm93LCBkb2NDb2x1bW4pOwoKICAgICAgICBkb2NSb3cgPSBwb3Mucm93OwogICAgICAgIGRvY0NvbHVtbiA9IHBvcy5jb2x1bW47CgogICAgICAgIHZhciBzY3JlZW5Sb3cgPSAwOwogICAgICAgIHZhciBmb2xkU3RhcnRSb3cgPSBudWxsOwogICAgICAgIHZhciBmb2xkID0gbnVsbDsKICAgICAgICBmb2xkID0gdGhpcy5nZXRGb2xkQXQoZG9jUm93LCBkb2NDb2x1bW4sIDEpOwogICAgICAgIGlmIChmb2xkKSB7CiAgICAgICAgICAgIGRvY1JvdyA9IGZvbGQuc3RhcnQucm93OwogICAgICAgICAgICBkb2NDb2x1bW4gPSBmb2xkLnN0YXJ0LmNvbHVtbjsKICAgICAgICB9CgogICAgICAgIHZhciByb3dFbmQsIHJvdyA9IDA7CgoKICAgICAgICB2YXIgcm93Q2FjaGUgPSB0aGlzLiRkb2NSb3dDYWNoZTsKICAgICAgICB2YXIgaSA9IHRoaXMuJGdldFJvd0NhY2hlSW5kZXgocm93Q2FjaGUsIGRvY1Jvdyk7CiAgICAgICAgdmFyIGwgPSByb3dDYWNoZS5sZW5ndGg7CiAgICAgICAgaWYgKGwgJiYgaSA+PSAwKSB7CiAgICAgICAgICAgIHZhciByb3cgPSByb3dDYWNoZVtpXTsKICAgICAgICAgICAgdmFyIHNjcmVlblJvdyA9IHRoaXMuJHNjcmVlblJvd0NhY2hlW2ldOwogICAgICAgICAgICB2YXIgZG9DYWNoZSA9IGRvY1JvdyA+IHJvd0NhY2hlW2wgLSAxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgZG9DYWNoZSA9ICFsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93KTsKICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgP2ZvbGRMaW5lLnN0YXJ0LnJvdyA6SW5maW5pdHk7CgogICAgICAgIHdoaWxlIChyb3cgPCBkb2NSb3cpIHsKICAgICAgICAgICAgaWYgKHJvdyA+PSBmb2xkU3RhcnQpIHsKICAgICAgICAgICAgICAgIHJvd0VuZCA9IGZvbGRMaW5lLmVuZC5yb3cgKyAxOwogICAgICAgICAgICAgICAgaWYgKHJvd0VuZCA+IGRvY1JvdykKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5nZXROZXh0Rm9sZExpbmUocm93RW5kLCBmb2xkTGluZSk7CiAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkTGluZSA/Zm9sZExpbmUuc3RhcnQucm93IDpJbmZpbml0eTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJvd0VuZCA9IHJvdyArIDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHNjcmVlblJvdyArPSB0aGlzLmdldFJvd0xlbmd0aChyb3cpOwogICAgICAgICAgICByb3cgPSByb3dFbmQ7CgogICAgICAgICAgICBpZiAoZG9DYWNoZSkgewogICAgICAgICAgICAgICAgdGhpcy4kZG9jUm93Q2FjaGUucHVzaChyb3cpOwogICAgICAgICAgICAgICAgdGhpcy4kc2NyZWVuUm93Q2FjaGUucHVzaChzY3JlZW5Sb3cpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciB0ZXh0TGluZSA9ICIiOwogICAgICAgIGlmIChmb2xkTGluZSAmJiByb3cgPj0gZm9sZFN0YXJ0KSB7CiAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRGb2xkRGlzcGxheUxpbmUoZm9sZExpbmUsIGRvY1JvdywgZG9jQ29sdW1uKTsKICAgICAgICAgICAgZm9sZFN0YXJ0Um93ID0gZm9sZExpbmUuc3RhcnQucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRleHRMaW5lID0gdGhpcy5nZXRMaW5lKGRvY1Jvdykuc3Vic3RyaW5nKDAsIGRvY0NvbHVtbik7CiAgICAgICAgICAgIGZvbGRTdGFydFJvdyA9IGRvY1JvdzsKICAgICAgICB9CiAgICAgICAgdmFyIHdyYXBJbmRlbnQgPSAwOwogICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgewogICAgICAgICAgICB2YXIgd3JhcFJvdyA9IHRoaXMuJHdyYXBEYXRhW2ZvbGRTdGFydFJvd107CiAgICAgICAgICAgIGlmICh3cmFwUm93KSB7CiAgICAgICAgICAgICAgICB2YXIgc2NyZWVuUm93T2Zmc2V0ID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlICh0ZXh0TGluZS5sZW5ndGggPj0gd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXRdKSB7CiAgICAgICAgICAgICAgICAgICAgc2NyZWVuUm93ICsrOwogICAgICAgICAgICAgICAgICAgIHNjcmVlblJvd09mZnNldCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGV4dExpbmUgPSB0ZXh0TGluZS5zdWJzdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgd3JhcFJvd1tzY3JlZW5Sb3dPZmZzZXQgLSAxXSB8fCAwLCB0ZXh0TGluZS5sZW5ndGgKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB3cmFwSW5kZW50ID0gc2NyZWVuUm93T2Zmc2V0ID4gMCA/IHdyYXBSb3cuaW5kZW50IDogMDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBzY3JlZW5Sb3csCiAgICAgICAgICAgIGNvbHVtbjogd3JhcEluZGVudCArIHRoaXMuJGdldFN0cmluZ1NjcmVlbldpZHRoKHRleHRMaW5lKVswXQogICAgICAgIH07CiAgICB9OwogICAgdGhpcy5kb2N1bWVudFRvU2NyZWVuQ29sdW1uID0gZnVuY3Rpb24ocm93LCBkb2NDb2x1bW4pIHsKICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24ocm93LCBkb2NDb2x1bW4pLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLmRvY3VtZW50VG9TY3JlZW5Sb3cgPSBmdW5jdGlvbihkb2NSb3csIGRvY0NvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihkb2NSb3csIGRvY0NvbHVtbikucm93OwogICAgfTsKICAgIHRoaXMuZ2V0U2NyZWVuTGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNjcmVlblJvd3MgPSAwOwogICAgICAgIHZhciBmb2xkID0gbnVsbDsKICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgIHNjcmVlblJvd3MgPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgICAgICB2YXIgZm9sZERhdGEgPSB0aGlzLiRmb2xkRGF0YTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb2xkRGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgZm9sZCA9IGZvbGREYXRhW2ldOwogICAgICAgICAgICAgICAgc2NyZWVuUm93cyAtPSBmb2xkLmVuZC5yb3cgLSBmb2xkLnN0YXJ0LnJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBsYXN0Um93ID0gdGhpcy4kd3JhcERhdGEubGVuZ3RoOwogICAgICAgICAgICB2YXIgcm93ID0gMCwgaSA9IDA7CiAgICAgICAgICAgIHZhciBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKICAgICAgICAgICAgdmFyIGZvbGRTdGFydCA9IGZvbGQgPyBmb2xkLnN0YXJ0LnJvdyA6SW5maW5pdHk7CgogICAgICAgICAgICB3aGlsZSAocm93IDwgbGFzdFJvdykgewogICAgICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuJHdyYXBEYXRhW3Jvd107CiAgICAgICAgICAgICAgICBzY3JlZW5Sb3dzICs9IHNwbGl0cyA/IHNwbGl0cy5sZW5ndGggKyAxIDogMTsKICAgICAgICAgICAgICAgIHJvdyArKzsKICAgICAgICAgICAgICAgIGlmIChyb3cgPiBmb2xkU3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkLmVuZC5yb3crMTsKICAgICAgICAgICAgICAgICAgICBmb2xkID0gdGhpcy4kZm9sZERhdGFbaSsrXTsKICAgICAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkID9mb2xkLnN0YXJ0LnJvdyA6SW5maW5pdHk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubGluZVdpZGdldHMpCiAgICAgICAgICAgIHNjcmVlblJvd3MgKz0gdGhpcy4kZ2V0V2lkZ2V0U2NyZWVuTGVuZ3RoKCk7CgogICAgICAgIHJldHVybiBzY3JlZW5Sb3dzOwogICAgfTsKICAgIHRoaXMuJHNldEZvbnRNZXRyaWNzID0gZnVuY3Rpb24oZm0pIHsKICAgICAgICBpZiAoIXRoaXMuJGVuYWJsZVZhckNoYXIpIHJldHVybjsKICAgICAgICB0aGlzLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCA9IGZ1bmN0aW9uKHN0ciwgbWF4U2NyZWVuQ29sdW1uLCBzY3JlZW5Db2x1bW4pIHsKICAgICAgICAgICAgaWYgKG1heFNjcmVlbkNvbHVtbiA9PT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBbMCwgMF07CiAgICAgICAgICAgIGlmICghbWF4U2NyZWVuQ29sdW1uKQogICAgICAgICAgICAgICAgbWF4U2NyZWVuQ29sdW1uID0gSW5maW5pdHk7CiAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHNjcmVlbkNvbHVtbiB8fCAwOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGMsIGNvbHVtbjsKICAgICAgICAgICAgZm9yIChjb2x1bW4gPSAwOyBjb2x1bW4gPCBzdHIubGVuZ3RoOyBjb2x1bW4rKykgewogICAgICAgICAgICAgICAgYyA9IHN0ci5jaGFyQXQoY29sdW1uKTsKICAgICAgICAgICAgICAgIGlmIChjID09PSAiXHQiKSB7CiAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IHRoaXMuZ2V0U2NyZWVuVGFiU2l6ZShzY3JlZW5Db2x1bW4pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gKz0gZm0uZ2V0Q2hhcmFjdGVyV2lkdGgoYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uID4gbWF4U2NyZWVuQ29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBbc2NyZWVuQ29sdW1uLCBjb2x1bW5dOwogICAgICAgIH07CiAgICB9OwogICAgCiAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5iZ1Rva2VuaXplcikgewogICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyLnNldERvY3VtZW50KG51bGwpOwogICAgICAgICAgICB0aGlzLmJnVG9rZW5pemVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgdGhpcy4kc3RvcFdvcmtlcigpOwogICAgfTsKCiAgICB0aGlzLmlzRnVsbFdpZHRoID0gaXNGdWxsV2lkdGg7CiAgICBmdW5jdGlvbiBpc0Z1bGxXaWR0aChjKSB7CiAgICAgICAgaWYgKGMgPCAweDExMDApCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gYyA+PSAweDExMDAgJiYgYyA8PSAweDExNUYgfHwKICAgICAgICAgICAgICAgYyA+PSAweDExQTMgJiYgYyA8PSAweDExQTcgfHwKICAgICAgICAgICAgICAgYyA+PSAweDExRkEgJiYgYyA8PSAweDExRkYgfHwKICAgICAgICAgICAgICAgYyA+PSAweDIzMjkgJiYgYyA8PSAweDIzMkEgfHwKICAgICAgICAgICAgICAgYyA+PSAweDJFODAgJiYgYyA8PSAweDJFOTkgfHwKICAgICAgICAgICAgICAgYyA+PSAweDJFOUIgJiYgYyA8PSAweDJFRjMgfHwKICAgICAgICAgICAgICAgYyA+PSAweDJGMDAgJiYgYyA8PSAweDJGRDUgfHwKICAgICAgICAgICAgICAgYyA+PSAweDJGRjAgJiYgYyA8PSAweDJGRkIgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMwMDAgJiYgYyA8PSAweDMwM0UgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMwNDEgJiYgYyA8PSAweDMwOTYgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMwOTkgJiYgYyA8PSAweDMwRkYgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMxMDUgJiYgYyA8PSAweDMxMkQgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMxMzEgJiYgYyA8PSAweDMxOEUgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMxOTAgJiYgYyA8PSAweDMxQkEgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMxQzAgJiYgYyA8PSAweDMxRTMgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMxRjAgJiYgYyA8PSAweDMyMUUgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMyMjAgJiYgYyA8PSAweDMyNDcgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMyNTAgJiYgYyA8PSAweDMyRkUgfHwKICAgICAgICAgICAgICAgYyA+PSAweDMzMDAgJiYgYyA8PSAweDREQkYgfHwKICAgICAgICAgICAgICAgYyA+PSAweDRFMDAgJiYgYyA8PSAweEE0OEMgfHwKICAgICAgICAgICAgICAgYyA+PSAweEE0OTAgJiYgYyA8PSAweEE0QzYgfHwKICAgICAgICAgICAgICAgYyA+PSAweEE5NjAgJiYgYyA8PSAweEE5N0MgfHwKICAgICAgICAgICAgICAgYyA+PSAweEFDMDAgJiYgYyA8PSAweEQ3QTMgfHwKICAgICAgICAgICAgICAgYyA+PSAweEQ3QjAgJiYgYyA8PSAweEQ3QzYgfHwKICAgICAgICAgICAgICAgYyA+PSAweEQ3Q0IgJiYgYyA8PSAweEQ3RkIgfHwKICAgICAgICAgICAgICAgYyA+PSAweEY5MDAgJiYgYyA8PSAweEZBRkYgfHwKICAgICAgICAgICAgICAgYyA+PSAweEZFMTAgJiYgYyA8PSAweEZFMTkgfHwKICAgICAgICAgICAgICAgYyA+PSAweEZFMzAgJiYgYyA8PSAweEZFNTIgfHwKICAgICAgICAgICAgICAgYyA+PSAweEZFNTQgJiYgYyA8PSAweEZFNjYgfHwKICAgICAgICAgICAgICAgYyA+PSAweEZFNjggJiYgYyA8PSAweEZFNkIgfHwKICAgICAgICAgICAgICAgYyA+PSAweEZGMDEgJiYgYyA8PSAweEZGNjAgfHwKICAgICAgICAgICAgICAgYyA+PSAweEZGRTAgJiYgYyA8PSAweEZGRTY7CiAgICB9Cgp9KS5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CgpyZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbi9mb2xkaW5nIikuRm9sZGluZy5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CnJlcXVpcmUoIi4vZWRpdF9zZXNzaW9uL2JyYWNrZXRfbWF0Y2giKS5CcmFja2V0TWF0Y2guY2FsbChFZGl0U2Vzc2lvbi5wcm90b3R5cGUpOwoKCmNvbmZpZy5kZWZpbmVPcHRpb25zKEVkaXRTZXNzaW9uLnByb3RvdHlwZSwgInNlc3Npb24iLCB7CiAgICB3cmFwOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09ICJvZmYiKQogICAgICAgICAgICAgICAgdmFsdWUgPSBmYWxzZTsKICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImZyZWUiKQogICAgICAgICAgICAgICAgdmFsdWUgPSB0cnVlOwogICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAicHJpbnRNYXJnaW4iKQogICAgICAgICAgICAgICAgdmFsdWUgPSAtMTsKICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlID09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApIHx8IGZhbHNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuJHdyYXAgPT0gdmFsdWUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRoaXMuJHdyYXAgPSB2YWx1ZTsKICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgdGhpcy5zZXRVc2VXcmFwTW9kZShmYWxzZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgY29sID0gdHlwZW9mIHZhbHVlID09ICJudW1iZXIiID8gdmFsdWUgOiBudWxsOwogICAgICAgICAgICAgICAgdGhpcy5zZXRXcmFwTGltaXRSYW5nZShjb2wsIGNvbCk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFVzZVdyYXBNb2RlKHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5nZXRVc2VXcmFwTW9kZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy4kd3JhcCA9PSAtMSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gInByaW50TWFyZ2luIjsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRXcmFwTGltaXRSYW5nZSgpLm1pbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZyZWUiOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHdyYXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICJvZmYiOwogICAgICAgIH0sCiAgICAgICAgaGFuZGxlc1NldDogdHJ1ZQogICAgfSwgICAgCiAgICB3cmFwTWV0aG9kOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgdmFsID0gdmFsID09ICJhdXRvIgogICAgICAgICAgICAgICAgPyB0aGlzLiRtb2RlLnR5cGUgIT0gInRleHQiCiAgICAgICAgICAgICAgICA6IHZhbCAhPSAidGV4dCI7CiAgICAgICAgICAgIGlmICh2YWwgIT0gdGhpcy4kd3JhcEFzQ29kZSkgewogICAgICAgICAgICAgICAgdGhpcy4kd3JhcEFzQ29kZSA9IHZhbDsKICAgICAgICAgICAgICAgIGlmICh0aGlzLiR1c2VXcmFwTW9kZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuJHVzZVdyYXBNb2RlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSh0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiAiYXV0byIKICAgIH0sCiAgICBpbmRlbnRlZFNvZnRXcmFwOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJHVzZVdyYXBNb2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLiR1c2VXcmFwTW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgdGhpcy5zZXRVc2VXcmFwTW9kZSh0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlIAogICAgfSwKICAgIGZpcnN0TGluZU51bWJlcjogewogICAgICAgIHNldDogZnVuY3Rpb24oKSB7dGhpcy5fc2lnbmFsKCJjaGFuZ2VCcmVha3BvaW50Iik7fSwKICAgICAgICBpbml0aWFsVmFsdWU6IDEKICAgIH0sCiAgICB1c2VXb3JrZXI6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHVzZVdvcmtlcikgewogICAgICAgICAgICB0aGlzLiR1c2VXb3JrZXIgPSB1c2VXb3JrZXI7CgogICAgICAgICAgICB0aGlzLiRzdG9wV29ya2VyKCk7CiAgICAgICAgICAgIGlmICh1c2VXb3JrZXIpCiAgICAgICAgICAgICAgICB0aGlzLiRzdGFydFdvcmtlcigpOwogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCiAgICB9LAogICAgdXNlU29mdFRhYnM6IHtpbml0aWFsVmFsdWU6IHRydWV9LAogICAgdGFiU2l6ZTogewogICAgICAgIHNldDogZnVuY3Rpb24odGFiU2l6ZSkgewogICAgICAgICAgICB0YWJTaXplID0gcGFyc2VJbnQodGFiU2l6ZSk7CiAgICAgICAgICAgIGlmICh0YWJTaXplID4gMCAmJiB0aGlzLiR0YWJTaXplICE9PSB0YWJTaXplKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRtb2RpZmllZCA9IHRydWU7CiAgICAgICAgICAgICAgICB0aGlzLiRyb3dMZW5ndGhDYWNoZSA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy4kdGFiU2l6ZSA9IHRhYlNpemU7CiAgICAgICAgICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZVRhYlNpemUiKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiA0LAogICAgICAgIGhhbmRsZXNTZXQ6IHRydWUKICAgIH0sCiAgICBuYXZpZ2F0ZVdpdGhpblNvZnRUYWJzOiB7aW5pdGlhbFZhbHVlOiBmYWxzZX0sCiAgICBmb2xkU3R5bGU6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge3RoaXMuc2V0Rm9sZFN0eWxlKHZhbCk7fSwKICAgICAgICBoYW5kbGVzU2V0OiB0cnVlCiAgICB9LAogICAgb3ZlcndyaXRlOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHt0aGlzLl9zaWduYWwoImNoYW5nZU92ZXJ3cml0ZSIpO30sCiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZQogICAgfSwKICAgIG5ld0xpbmVNb2RlOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHt0aGlzLmRvYy5zZXROZXdMaW5lTW9kZSh2YWwpO30sCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5kb2MuZ2V0TmV3TGluZU1vZGUoKTt9LAogICAgICAgIGhhbmRsZXNTZXQ6IHRydWUKICAgIH0sCiAgICBtb2RlOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsgdGhpcy5zZXRNb2RlKHZhbCk7IH0sCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuJG1vZGVJZDsgfSwKICAgICAgICBoYW5kbGVzU2V0OiB0cnVlCiAgICB9Cn0pOwoKZXhwb3J0cy5FZGl0U2Vzc2lvbiA9IEVkaXRTZXNzaW9uOwp9KTsKCmRlZmluZSgiYWNlL3NlYXJjaCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7Cgp2YXIgU2VhcmNoID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRvcHRpb25zID0ge307Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnNldCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICBvb3AubWl4aW4odGhpcy4kb3B0aW9ucywgb3B0aW9ucyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgdGhpcy5nZXRPcHRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGxhbmcuY29weU9iamVjdCh0aGlzLiRvcHRpb25zKTsKICAgIH07CiAgICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7CiAgICB9OwogICAgdGhpcy5maW5kID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9uczsKICAgICAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLiRtYXRjaEl0ZXJhdG9yKHNlc3Npb24sIG9wdGlvbnMpOwogICAgICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdmFyIGZpcnN0UmFuZ2UgPSBudWxsOwogICAgICAgIGl0ZXJhdG9yLmZvckVhY2goZnVuY3Rpb24oc3IsIHNjLCBlciwgZWMpIHsKICAgICAgICAgICAgZmlyc3RSYW5nZSA9IG5ldyBSYW5nZShzciwgc2MsIGVyLCBlYyk7CiAgICAgICAgICAgIGlmIChzYyA9PSBlYyAmJiBvcHRpb25zLnN0YXJ0ICYmIG9wdGlvbnMuc3RhcnQuc3RhcnQKICAgICAgICAgICAgICAgICYmIG9wdGlvbnMuc2tpcEN1cnJlbnQgIT0gZmFsc2UgJiYgZmlyc3RSYW5nZS5pc0VxdWFsKG9wdGlvbnMuc3RhcnQpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgZmlyc3RSYW5nZSA9IG51bGw7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTsKICAgIH07CiAgICB0aGlzLmZpbmRBbGwgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zOwogICAgICAgIGlmICghb3B0aW9ucy5uZWVkbGUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB0aGlzLiRhc3NlbWJsZVJlZ0V4cChvcHRpb25zKTsKCiAgICAgICAgdmFyIHJhbmdlID0gb3B0aW9ucy5yYW5nZTsKICAgICAgICB2YXIgbGluZXMgPSByYW5nZQogICAgICAgICAgICA/IHNlc3Npb24uZ2V0TGluZXMocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5lbmQucm93KQogICAgICAgICAgICA6IHNlc3Npb24uZG9jLmdldEFsbExpbmVzKCk7CgogICAgICAgIHZhciByYW5nZXMgPSBbXTsKICAgICAgICB2YXIgcmUgPSBvcHRpb25zLnJlOwogICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkgewogICAgICAgICAgICB2YXIgbGVuID0gcmUubGVuZ3RoOwogICAgICAgICAgICB2YXIgbWF4Um93ID0gbGluZXMubGVuZ3RoIC0gbGVuOwogICAgICAgICAgICB2YXIgcHJldlJhbmdlOwogICAgICAgICAgICBvdXRlcjogZm9yICh2YXIgcm93ID0gcmUub2Zmc2V0IHx8IDA7IHJvdyA8PSBtYXhSb3c7IHJvdysrKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKQogICAgICAgICAgICAgICAgICAgIGlmIChsaW5lc1tyb3cgKyBqXS5zZWFyY2gocmVbal0pID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGxpbmVzW3Jvd107CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW3JvdyArIGxlbiAtIDFdOwogICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBzdGFydExpbmUubGVuZ3RoIC0gc3RhcnRMaW5lLm1hdGNoKHJlWzBdKVswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlW2xlbiAtIDFdKVswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChwcmV2UmFuZ2UgJiYgcHJldlJhbmdlLmVuZC5yb3cgPT09IHJvdyAmJgogICAgICAgICAgICAgICAgICAgIHByZXZSYW5nZS5lbmQuY29sdW1uID4gc3RhcnRJbmRleAogICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByYW5nZXMucHVzaChwcmV2UmFuZ2UgPSBuZXcgUmFuZ2UoCiAgICAgICAgICAgICAgICAgICAgcm93LCBzdGFydEluZGV4LCByb3cgKyBsZW4gLSAxLCBlbmRJbmRleAogICAgICAgICAgICAgICAgKSk7CiAgICAgICAgICAgICAgICBpZiAobGVuID4gMikKICAgICAgICAgICAgICAgICAgICByb3cgPSByb3cgKyBsZW4gLSAyOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBsYW5nLmdldE1hdGNoT2Zmc2V0cyhsaW5lc1tpXSwgcmUpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXRjaGVzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hlc1tqXTsKICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaChuZXcgUmFuZ2UoaSwgbWF0Y2gub2Zmc2V0LCBpLCBtYXRjaC5vZmZzZXQgKyBtYXRjaC5sZW5ndGgpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHJhbmdlLnN0YXJ0LmNvbHVtbjsKICAgICAgICAgICAgdmFyIGkgPSAwLCBqID0gcmFuZ2VzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgIHdoaWxlIChpIDwgaiAmJiByYW5nZXNbaV0uc3RhcnQuY29sdW1uIDwgc3RhcnRDb2x1bW4gJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZS5zdGFydC5yb3cpCiAgICAgICAgICAgICAgICBpKys7CgogICAgICAgICAgICB3aGlsZSAoaSA8IGogJiYgcmFuZ2VzW2pdLmVuZC5jb2x1bW4gPiBlbmRDb2x1bW4gJiYgcmFuZ2VzW2pdLmVuZC5yb3cgPT0gcmFuZ2UuZW5kLnJvdykKICAgICAgICAgICAgICAgIGotLTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHJhbmdlcyA9IHJhbmdlcy5zbGljZShpLCBqICsgMSk7CiAgICAgICAgICAgIGZvciAoaSA9IDAsIGogPSByYW5nZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7CiAgICAgICAgICAgICAgICByYW5nZXNbaV0uc3RhcnQucm93ICs9IHJhbmdlLnN0YXJ0LnJvdzsKICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5lbmQucm93ICs9IHJhbmdlLnN0YXJ0LnJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihpbnB1dCwgcmVwbGFjZW1lbnQpIHsKICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMuJG9wdGlvbnM7CgogICAgICAgIHZhciByZSA9IHRoaXMuJGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpOwogICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkKICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwoKICAgICAgICBpZiAoIXJlKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IHJlLmV4ZWMoaW5wdXQpOwogICAgICAgIGlmICghbWF0Y2ggfHwgbWF0Y2hbMF0ubGVuZ3RoICE9IGlucHV0Lmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgCiAgICAgICAgcmVwbGFjZW1lbnQgPSBpbnB1dC5yZXBsYWNlKHJlLCByZXBsYWNlbWVudCk7CiAgICAgICAgaWYgKG9wdGlvbnMucHJlc2VydmVDYXNlKSB7CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQuc3BsaXQoIiIpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5taW4oaW5wdXQubGVuZ3RoLCBpbnB1dC5sZW5ndGgpOyBpLS07ICkgewogICAgICAgICAgICAgICAgdmFyIGNoID0gaW5wdXRbaV07CiAgICAgICAgICAgICAgICBpZiAoY2ggJiYgY2gudG9Mb3dlckNhc2UoKSAhPSBjaCkKICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudFtpXSA9IHJlcGxhY2VtZW50W2ldLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbaV0gPSByZXBsYWNlbWVudFtpXS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQuam9pbigiIik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgIH07CgogICAgdGhpcy4kYXNzZW1ibGVSZWdFeHAgPSBmdW5jdGlvbihvcHRpb25zLCAkZGlzYWJsZUZha2VNdWx0aWxpbmUpIHsKICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgaW5zdGFuY2VvZiBSZWdFeHApCiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlID0gb3B0aW9ucy5uZWVkbGU7CgogICAgICAgIHZhciBuZWVkbGUgPSBvcHRpb25zLm5lZWRsZTsKCiAgICAgICAgaWYgKCFvcHRpb25zLm5lZWRsZSkKICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSBmYWxzZTsKCiAgICAgICAgaWYgKCFvcHRpb25zLnJlZ0V4cCkKICAgICAgICAgICAgbmVlZGxlID0gbGFuZy5lc2NhcGVSZWdFeHAobmVlZGxlKTsKCiAgICAgICAgaWYgKG9wdGlvbnMud2hvbGVXb3JkKQogICAgICAgICAgICBuZWVkbGUgPSBhZGRXb3JkQm91bmRhcnkobmVlZGxlLCBvcHRpb25zKTsKCiAgICAgICAgdmFyIG1vZGlmaWVyID0gb3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8gImdtIiA6ICJnbWkiOwoKICAgICAgICBvcHRpb25zLiRpc011bHRpTGluZSA9ICEkZGlzYWJsZUZha2VNdWx0aWxpbmUgJiYgL1tcblxyXS8udGVzdChuZWVkbGUpOwogICAgICAgIGlmIChvcHRpb25zLiRpc011bHRpTGluZSkKICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSB0aGlzLiRhc3NlbWJsZU11bHRpbGluZVJlZ0V4cChuZWVkbGUsIG1vZGlmaWVyKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cChuZWVkbGUsIG1vZGlmaWVyKTsKICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgcmUgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmUgPSByZTsKICAgIH07CgogICAgdGhpcy4kYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAgPSBmdW5jdGlvbihuZWVkbGUsIG1vZGlmaWVyKSB7CiAgICAgICAgdmFyIHBhcnRzID0gbmVlZGxlLnJlcGxhY2UoL1xyXG58XHJ8XG4vZywgIiRcbl4iKS5zcGxpdCgiXG4iKTsKICAgICAgICB2YXIgcmUgPSBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB0cnkgewogICAgICAgICAgICByZS5wdXNoKG5ldyBSZWdFeHAocGFydHNbaV0sIG1vZGlmaWVyKSk7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlOwogICAgfTsKCiAgICB0aGlzLiRtYXRjaEl0ZXJhdG9yID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykgewogICAgICAgIHZhciByZSA9IHRoaXMuJGFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpOwogICAgICAgIGlmICghcmUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB2YXIgYmFja3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHMgPT0gdHJ1ZTsKICAgICAgICB2YXIgc2tpcEN1cnJlbnQgPSBvcHRpb25zLnNraXBDdXJyZW50ICE9IGZhbHNlOwoKICAgICAgICB2YXIgcmFuZ2UgPSBvcHRpb25zLnJhbmdlOwogICAgICAgIHZhciBzdGFydCA9IG9wdGlvbnMuc3RhcnQ7CiAgICAgICAgaWYgKCFzdGFydCkKICAgICAgICAgICAgc3RhcnQgPSByYW5nZSA/IHJhbmdlW2JhY2t3YXJkcyA/ICJlbmQiIDogInN0YXJ0Il0gOiBzZXNzaW9uLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwogICAgICAgICAKICAgICAgICBpZiAoc3RhcnQuc3RhcnQpCiAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnRbc2tpcEN1cnJlbnQgIT0gYmFja3dhcmRzID8gImVuZCIgOiAic3RhcnQiXTsKCiAgICAgICAgdmFyIGZpcnN0Um93ID0gcmFuZ2UgPyByYW5nZS5zdGFydC5yb3cgOiAwOwogICAgICAgIHZhciBsYXN0Um93ID0gcmFuZ2UgPyByYW5nZS5lbmQucm93IDogc2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgCiAgICAgICAgaWYgKGJhY2t3YXJkcykgewogICAgICAgICAgICB2YXIgZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICB2YXIgcm93ID0gc3RhcnQucm93OwogICAgICAgICAgICAgICAgaWYgKGZvckVhY2hJbkxpbmUocm93LCBzdGFydC5jb2x1bW4sIGNhbGxiYWNrKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBmb3IgKHJvdy0tOyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKQogICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgTnVtYmVyLk1BWF9WQUxVRSwgY2FsbGJhY2spKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09IGZhbHNlKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGZvciAocm93ID0gbGFzdFJvdywgZmlyc3RSb3cgPSBzdGFydC5yb3c7IHJvdyA+PSBmaXJzdFJvdzsgcm93LS0pCiAgICAgICAgICAgICAgICAgICAgaWYgKGZvckVhY2hJbkxpbmUocm93LCBOdW1iZXIuTUFYX1ZBTFVFLCBjYWxsYmFjaykpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBmb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBzdGFydC5yb3c7CiAgICAgICAgICAgICAgICBpZiAoZm9yRWFjaEluTGluZShyb3csIHN0YXJ0LmNvbHVtbiwgY2FsbGJhY2spKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGZvciAocm93ID0gcm93ICsgMTsgcm93IDw9IGxhc3RSb3c7IHJvdysrKQogICAgICAgICAgICAgICAgICAgIGlmIChmb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09IGZhbHNlKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGZvciAocm93ID0gZmlyc3RSb3csIGxhc3RSb3cgPSBzdGFydC5yb3c7IHJvdyA8PSBsYXN0Um93OyByb3crKykKICAgICAgICAgICAgICAgICAgICBpZiAoZm9yRWFjaEluTGluZShyb3csIDAsIGNhbGxiYWNrKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAob3B0aW9ucy4kaXNNdWx0aUxpbmUpIHsKICAgICAgICAgICAgdmFyIGxlbiA9IHJlLmxlbmd0aDsKICAgICAgICAgICAgdmFyIGZvckVhY2hJbkxpbmUgPSBmdW5jdGlvbihyb3csIG9mZnNldCwgY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHZhciBzdGFydFJvdyA9IGJhY2t3YXJkcyA/IHJvdyAtIGxlbiArIDEgOiByb3c7CiAgICAgICAgICAgICAgICBpZiAoc3RhcnRSb3cgPCAwKSByZXR1cm47CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShzdGFydFJvdyk7CiAgICAgICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGxpbmUuc2VhcmNoKHJlWzBdKTsKICAgICAgICAgICAgICAgIGlmICghYmFja3dhcmRzICYmIHN0YXJ0SW5kZXggPCBvZmZzZXQgfHwgc3RhcnRJbmRleCA9PT0gLTEpIHJldHVybjsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHN0YXJ0Um93ICsgaSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUuc2VhcmNoKHJlW2ldKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gbGluZS5tYXRjaChyZVtsZW4gLSAxXSlbMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKGJhY2t3YXJkcyAmJiBlbmRJbmRleCA+IG9mZnNldCkgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHN0YXJ0Um93LCBzdGFydEluZGV4LCBzdGFydFJvdyArIGxlbiAtIDEsIGVuZEluZGV4KSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoYmFja3dhcmRzKSB7CiAgICAgICAgICAgIHZhciBmb3JFYWNoSW5MaW5lID0gZnVuY3Rpb24ocm93LCBlbmRJbmRleCwgY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdOwogICAgICAgICAgICAgICAgdmFyIG0sIGxhc3QgPSAwOwogICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlKChtID0gcmUuZXhlYyhsaW5lKSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbVswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG0uaW5kZXg7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QgPj0gbGluZS5sZW5ndGgpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICByZS5sYXN0SW5kZXggPSBsYXN0ICs9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChtLmluZGV4ICsgbGVuZ3RoID4gZW5kSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChtLmluZGV4LCBsZW5ndGgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IG1hdGNoZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hlc1tpIC0gMV07CiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG1hdGNoZXNbaV07CiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKHJvdywgY29sdW1uLCByb3csIGNvbHVtbiArIGxlbmd0aCkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGZvckVhY2hJbkxpbmUgPSBmdW5jdGlvbihyb3csIHN0YXJ0SW5kZXgsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICAgICAgdmFyIGxhc3Q7CiAgICAgICAgICAgICAgICB2YXIgbTsKICAgICAgICAgICAgICAgIHJlLmxhc3RJbmRleCA9IHN0YXJ0SW5kZXg7CiAgICAgICAgICAgICAgICB3aGlsZSgobSA9IHJlLmV4ZWMobGluZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG1bMF0ubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGxhc3QgPSBtLmluZGV4OwogICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhyb3csIGxhc3QsIHJvdyxsYXN0ICsgbGVuZ3RoKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmUubGFzdEluZGV4ID0gbGFzdCArPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdCA+PSBsaW5lLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHtmb3JFYWNoOiBmb3JFYWNofTsKICAgIH07Cgp9KS5jYWxsKFNlYXJjaC5wcm90b3R5cGUpOwoKZnVuY3Rpb24gYWRkV29yZEJvdW5kYXJ5KG5lZWRsZSwgb3B0aW9ucykgewogICAgZnVuY3Rpb24gd29yZEJvdW5kYXJ5KGMpIHsKICAgICAgICBpZiAoL1x3Ly50ZXN0KGMpIHx8IG9wdGlvbnMucmVnRXhwKSByZXR1cm4gIlxcYiI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcmV0dXJuIHdvcmRCb3VuZGFyeShuZWVkbGVbMF0pICsgbmVlZGxlCiAgICAgICAgKyB3b3JkQm91bmRhcnkobmVlZGxlW25lZWRsZS5sZW5ndGggLSAxXSk7Cn0KCmV4cG9ydHMuU2VhcmNoID0gU2VhcmNoOwp9KTsKCmRlZmluZSgiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIva2V5cyIsImFjZS9saWIvdXNlcmFnZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIga2V5VXRpbCA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7CnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7CnZhciBLRVlfTU9EUyA9IGtleVV0aWwuS0VZX01PRFM7CgpmdW5jdGlvbiBIYXNoSGFuZGxlcihjb25maWcsIHBsYXRmb3JtKSB7CiAgICB0aGlzLnBsYXRmb3JtID0gcGxhdGZvcm0gfHwgKHVzZXJhZ2VudC5pc01hYyA/ICJtYWMiIDogIndpbiIpOwogICAgdGhpcy5jb21tYW5kcyA9IHt9OwogICAgdGhpcy5jb21tYW5kS2V5QmluZGluZyA9IHt9OwogICAgdGhpcy5hZGRDb21tYW5kcyhjb25maWcpOwogICAgdGhpcy4kc2luZ2xlQ29tbWFuZCA9IHRydWU7Cn0KCmZ1bmN0aW9uIE11bHRpSGFzaEhhbmRsZXIoY29uZmlnLCBwbGF0Zm9ybSkgewogICAgSGFzaEhhbmRsZXIuY2FsbCh0aGlzLCBjb25maWcsIHBsYXRmb3JtKTsKICAgIHRoaXMuJHNpbmdsZUNvbW1hbmQgPSBmYWxzZTsKfQoKTXVsdGlIYXNoSGFuZGxlci5wcm90b3R5cGUgPSBIYXNoSGFuZGxlci5wcm90b3R5cGU7CgooZnVuY3Rpb24oKSB7CiAgICAKCiAgICB0aGlzLmFkZENvbW1hbmQgPSBmdW5jdGlvbihjb21tYW5kKSB7CiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZC5uYW1lXSkKICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmQpOwoKICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmQubmFtZV0gPSBjb21tYW5kOwoKICAgICAgICBpZiAoY29tbWFuZC5iaW5kS2V5KQogICAgICAgICAgICB0aGlzLl9idWlsZEtleUhhc2goY29tbWFuZCk7CiAgICB9OwoKICAgIHRoaXMucmVtb3ZlQ29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQsIGtlZXBDb21tYW5kKSB7CiAgICAgICAgdmFyIG5hbWUgPSBjb21tYW5kICYmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycgPyBjb21tYW5kIDogY29tbWFuZC5uYW1lKTsKICAgICAgICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1tuYW1lXTsKICAgICAgICBpZiAoIWtlZXBDb21tYW5kKQogICAgICAgICAgICBkZWxldGUgdGhpcy5jb21tYW5kc1tuYW1lXTsKICAgICAgICB2YXIgY2tiID0gdGhpcy5jb21tYW5kS2V5QmluZGluZzsKICAgICAgICBmb3IgKHZhciBrZXlJZCBpbiBja2IpIHsKICAgICAgICAgICAgdmFyIGNtZEdyb3VwID0gY2tiW2tleUlkXTsKICAgICAgICAgICAgaWYgKGNtZEdyb3VwID09IGNvbW1hbmQpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBja2Jba2V5SWRdOwogICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY21kR3JvdXApKSB7CiAgICAgICAgICAgICAgICB2YXIgaSA9IGNtZEdyb3VwLmluZGV4T2YoY29tbWFuZCk7CiAgICAgICAgICAgICAgICBpZiAoaSAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgIGNtZEdyb3VwLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpZiAoY21kR3JvdXAubGVuZ3RoID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIGNrYltrZXlJZF0gPSBjbWRHcm91cFswXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5iaW5kS2V5ID0gZnVuY3Rpb24oa2V5LCBjb21tYW5kLCBwb3NpdGlvbikgewogICAgICAgIGlmICh0eXBlb2Yga2V5ID09ICJvYmplY3QiICYmIGtleSkgewogICAgICAgICAgICBpZiAocG9zaXRpb24gPT0gdW5kZWZpbmVkKQogICAgICAgICAgICAgICAgcG9zaXRpb24gPSBrZXkucG9zaXRpb247CiAgICAgICAgICAgIGtleSA9IGtleVt0aGlzLnBsYXRmb3JtXTsKICAgICAgICB9CiAgICAgICAgaWYgKCFrZXkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29tbWFuZCh7ZXhlYzogY29tbWFuZCwgYmluZEtleToga2V5LCBuYW1lOiBjb21tYW5kLm5hbWUgfHwga2V5fSk7CiAgICAgICAgCiAgICAgICAga2V5LnNwbGl0KCJ8IikuZm9yRWFjaChmdW5jdGlvbihrZXlQYXJ0KSB7CiAgICAgICAgICAgIHZhciBjaGFpbiA9ICIiOwogICAgICAgICAgICBpZiAoa2V5UGFydC5pbmRleE9mKCIgIikgIT0gLTEpIHsKICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IGtleVBhcnQuc3BsaXQoL1xzKy8pOwogICAgICAgICAgICAgICAga2V5UGFydCA9IHBhcnRzLnBvcCgpOwogICAgICAgICAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbihrZXlQYXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSB0aGlzLnBhcnNlS2V5cyhrZXlQYXJ0KTsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBLRVlfTU9EU1tiaW5kaW5nLmhhc2hJZF0gKyBiaW5kaW5nLmtleTsKICAgICAgICAgICAgICAgICAgICBjaGFpbiArPSAoY2hhaW4gPyAiICIgOiAiIikgKyBpZDsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRDb21tYW5kVG9CaW5kaW5nKGNoYWluLCAiY2hhaW5LZXlzIik7CiAgICAgICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgICAgIGNoYWluICs9ICIgIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYmluZGluZyA9IHRoaXMucGFyc2VLZXlzKGtleVBhcnQpOwogICAgICAgICAgICB2YXIgaWQgPSBLRVlfTU9EU1tiaW5kaW5nLmhhc2hJZF0gKyBiaW5kaW5nLmtleTsKICAgICAgICAgICAgdGhpcy5fYWRkQ29tbWFuZFRvQmluZGluZyhjaGFpbiArIGlkLCBjb21tYW5kLCBwb3NpdGlvbik7CiAgICAgICAgfSwgdGhpcyk7CiAgICB9OwogICAgCiAgICBmdW5jdGlvbiBnZXRQb3NpdGlvbihjb21tYW5kKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBjb21tYW5kID09ICJvYmplY3QiICYmIGNvbW1hbmQuYmluZEtleQogICAgICAgICAgICAmJiBjb21tYW5kLmJpbmRLZXkucG9zaXRpb24gCiAgICAgICAgICAgIHx8IChjb21tYW5kLmlzRGVmYXVsdCA/IC0xMDAgOiAwKTsKICAgIH0KICAgIHRoaXMuX2FkZENvbW1hbmRUb0JpbmRpbmcgPSBmdW5jdGlvbihrZXlJZCwgY29tbWFuZCwgcG9zaXRpb24pIHsKICAgICAgICB2YXIgY2tiID0gdGhpcy5jb21tYW5kS2V5QmluZGluZywgaTsKICAgICAgICBpZiAoIWNvbW1hbmQpIHsKICAgICAgICAgICAgZGVsZXRlIGNrYltrZXlJZF07CiAgICAgICAgfSBlbHNlIGlmICghY2tiW2tleUlkXSB8fCB0aGlzLiRzaW5nbGVDb21tYW5kKSB7CiAgICAgICAgICAgIGNrYltrZXlJZF0gPSBjb21tYW5kOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShja2Jba2V5SWRdKSkgewogICAgICAgICAgICAgICAgY2tiW2tleUlkXSA9IFtja2Jba2V5SWRdXTsKICAgICAgICAgICAgfSBlbHNlIGlmICgoaSA9IGNrYltrZXlJZF0uaW5kZXhPZihjb21tYW5kKSkgIT0gLTEpIHsKICAgICAgICAgICAgICAgIGNrYltrZXlJZF0uc3BsaWNlKGksIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodHlwZW9mIHBvc2l0aW9uICE9ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGdldFBvc2l0aW9uKGNvbW1hbmQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY29tbWFuZHMgPSBja2Jba2V5SWRdOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tbWFuZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNvbW1hbmRzW2ldOwogICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gZ2V0UG9zaXRpb24ob3RoZXIpOwogICAgICAgICAgICAgICAgaWYgKG90aGVyUG9zID4gcG9zaXRpb24pCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29tbWFuZHMuc3BsaWNlKGksIDAsIGNvbW1hbmQpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5hZGRDb21tYW5kcyA9IGZ1bmN0aW9uKGNvbW1hbmRzKSB7CiAgICAgICAgY29tbWFuZHMgJiYgT2JqZWN0LmtleXMoY29tbWFuZHMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzW25hbWVdOwogICAgICAgICAgICBpZiAoIWNvbW1hbmQpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmluZEtleShjb21tYW5kLCBuYW1lKTsKCiAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgICAgIGNvbW1hbmQgPSB7IGV4ZWM6IGNvbW1hbmQgfTsKCiAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCAhPT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICBpZiAoIWNvbW1hbmQubmFtZSkKICAgICAgICAgICAgICAgIGNvbW1hbmQubmFtZSA9IG5hbWU7CgogICAgICAgICAgICB0aGlzLmFkZENvbW1hbmQoY29tbWFuZCk7CiAgICAgICAgfSwgdGhpcyk7CiAgICB9OwoKICAgIHRoaXMucmVtb3ZlQ29tbWFuZHMgPSBmdW5jdGlvbihjb21tYW5kcykgewogICAgICAgIE9iamVjdC5rZXlzKGNvbW1hbmRzKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tYW5kKGNvbW1hbmRzW25hbWVdKTsKICAgICAgICB9LCB0aGlzKTsKICAgIH07CgogICAgdGhpcy5iaW5kS2V5cyA9IGZ1bmN0aW9uKGtleUxpc3QpIHsKICAgICAgICBPYmplY3Qua2V5cyhrZXlMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgICAgICAgICB0aGlzLmJpbmRLZXkoa2V5LCBrZXlMaXN0W2tleV0pOwogICAgICAgIH0sIHRoaXMpOwogICAgfTsKCiAgICB0aGlzLl9idWlsZEtleUhhc2ggPSBmdW5jdGlvbihjb21tYW5kKSB7CiAgICAgICAgdGhpcy5iaW5kS2V5KGNvbW1hbmQuYmluZEtleSwgY29tbWFuZCk7CiAgICB9OwogICAgdGhpcy5wYXJzZUtleXMgPSBmdW5jdGlvbihrZXlzKSB7CiAgICAgICAgdmFyIHBhcnRzID0ga2V5cy50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXC1cK10oW1wtXCtdKT8vKS5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHg7fSk7CiAgICAgICAgdmFyIGtleSA9IHBhcnRzLnBvcCgpOwoKICAgICAgICB2YXIga2V5Q29kZSA9IGtleVV0aWxba2V5XTsKICAgICAgICBpZiAoa2V5VXRpbC5GVU5DVElPTl9LRVlTW2tleUNvZGVdKQogICAgICAgICAgICBrZXkgPSBrZXlVdGlsLkZVTkNUSU9OX0tFWVNba2V5Q29kZV0udG9Mb3dlckNhc2UoKTsKICAgICAgICBlbHNlIGlmICghcGFydHMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4ge2tleToga2V5LCBoYXNoSWQ6IC0xfTsKICAgICAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT0gMSAmJiBwYXJ0c1swXSA9PSAic2hpZnQiKQogICAgICAgICAgICByZXR1cm4ge2tleToga2V5LnRvVXBwZXJDYXNlKCksIGhhc2hJZDogLTF9OwoKICAgICAgICB2YXIgaGFzaElkID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gcGFydHMubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgICAgIHZhciBtb2RpZmllciA9IGtleVV0aWwuS0VZX01PRFNbcGFydHNbaV1dOwogICAgICAgICAgICBpZiAobW9kaWZpZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9ICJ1bmRlZmluZWQiKQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoImludmFsaWQgbW9kaWZpZXIgIiArIHBhcnRzW2ldICsgIiBpbiAiICsga2V5cyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGFzaElkIHw9IG1vZGlmaWVyOwogICAgICAgIH0KICAgICAgICByZXR1cm4ge2tleToga2V5LCBoYXNoSWQ6IGhhc2hJZH07CiAgICB9OwoKICAgIHRoaXMuZmluZEtleUNvbW1hbmQgPSBmdW5jdGlvbiBmaW5kS2V5Q29tbWFuZChoYXNoSWQsIGtleVN0cmluZykgewogICAgICAgIHZhciBrZXkgPSBLRVlfTU9EU1toYXNoSWRdICsga2V5U3RyaW5nOwogICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmRLZXlCaW5kaW5nW2tleV07CiAgICB9OwoKICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmQgPSBmdW5jdGlvbihkYXRhLCBoYXNoSWQsIGtleVN0cmluZywga2V5Q29kZSkgewogICAgICAgIGlmIChrZXlDb2RlIDwgMCkgcmV0dXJuOwogICAgICAgIHZhciBrZXkgPSBLRVlfTU9EU1toYXNoSWRdICsga2V5U3RyaW5nOwogICAgICAgIHZhciBjb21tYW5kID0gdGhpcy5jb21tYW5kS2V5QmluZGluZ1trZXldOwogICAgICAgIGlmIChkYXRhLiRrZXlDaGFpbikgewogICAgICAgICAgICBkYXRhLiRrZXlDaGFpbiArPSAiICIgKyBrZXk7CiAgICAgICAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRLZXlCaW5kaW5nW2RhdGEuJGtleUNoYWluXSB8fCBjb21tYW5kOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoY29tbWFuZCkgewogICAgICAgICAgICBpZiAoY29tbWFuZCA9PSAiY2hhaW5LZXlzIiB8fCBjb21tYW5kW2NvbW1hbmQubGVuZ3RoIC0gMV0gPT0gImNoYWluS2V5cyIpIHsKICAgICAgICAgICAgICAgIGRhdGEuJGtleUNoYWluID0gZGF0YS4ka2V5Q2hhaW4gfHwga2V5OwogICAgICAgICAgICAgICAgcmV0dXJuIHtjb21tYW5kOiAibnVsbCJ9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChkYXRhLiRrZXlDaGFpbikgewogICAgICAgICAgICBpZiAoKCFoYXNoSWQgfHwgaGFzaElkID09IDQpICYmIGtleVN0cmluZy5sZW5ndGggPT0gMSkKICAgICAgICAgICAgICAgIGRhdGEuJGtleUNoYWluID0gZGF0YS4ka2V5Q2hhaW4uc2xpY2UoMCwgLWtleS5sZW5ndGggLSAxKTsgLy8gd2FpdCBmb3IgaW5wdXQKICAgICAgICAgICAgZWxzZSBpZiAoaGFzaElkID09IC0xIHx8IGtleUNvZGUgPiAwKQogICAgICAgICAgICAgICAgZGF0YS4ka2V5Q2hhaW4gPSAiIjsgLy8gcmVzZXQga2V5Q2hhaW4KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHtjb21tYW5kOiBjb21tYW5kfTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U3RhdHVzVGV4dCA9IGZ1bmN0aW9uKGVkaXRvciwgZGF0YSkgewogICAgICAgIHJldHVybiBkYXRhLiRrZXlDaGFpbiB8fCAiIjsKICAgIH07Cgp9KS5jYWxsKEhhc2hIYW5kbGVyLnByb3RvdHlwZSk7CgpleHBvcnRzLkhhc2hIYW5kbGVyID0gSGFzaEhhbmRsZXI7CmV4cG9ydHMuTXVsdGlIYXNoSGFuZGxlciA9IE11bHRpSGFzaEhhbmRsZXI7Cn0pOwoKZGVmaW5lKCJhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgTXVsdGlIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLk11bHRpSGFzaEhhbmRsZXI7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBDb21tYW5kTWFuYWdlciA9IGZ1bmN0aW9uKHBsYXRmb3JtLCBjb21tYW5kcykgewogICAgTXVsdGlIYXNoSGFuZGxlci5jYWxsKHRoaXMsIGNvbW1hbmRzLCBwbGF0Zm9ybSk7CiAgICB0aGlzLmJ5TmFtZSA9IHRoaXMuY29tbWFuZHM7CiAgICB0aGlzLnNldERlZmF1bHRIYW5kbGVyKCJleGVjIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHJldHVybiBlLmNvbW1hbmQuZXhlYyhlLmVkaXRvciwgZS5hcmdzIHx8IHt9KTsKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKENvbW1hbmRNYW5hZ2VyLCBNdWx0aUhhc2hIYW5kbGVyKTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CgogICAgdGhpcy5leGVjID0gZnVuY3Rpb24oY29tbWFuZCwgZWRpdG9yLCBhcmdzKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tbWFuZCkpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNvbW1hbmQubGVuZ3RoOyBpLS07ICkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZXhlYyhjb21tYW5kW2ldLCBlZGl0b3IsIGFyZ3MpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09ICJzdHJpbmciKQogICAgICAgICAgICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1tjb21tYW5kXTsKCiAgICAgICAgaWYgKCFjb21tYW5kKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChlZGl0b3IgJiYgZWRpdG9yLiRyZWFkT25seSAmJiAhY29tbWFuZC5yZWFkT25seSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAodGhpcy4kY2hlY2tDb21tYW5kU3RhdGUgIT0gZmFsc2UgJiYgY29tbWFuZC5pc0F2YWlsYWJsZSAmJiAhY29tbWFuZC5pc0F2YWlsYWJsZShlZGl0b3IpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHZhciBlID0ge2VkaXRvcjogZWRpdG9yLCBjb21tYW5kOiBjb21tYW5kLCBhcmdzOiBhcmdzfTsKICAgICAgICBlLnJldHVyblZhbHVlID0gdGhpcy5fZW1pdCgiZXhlYyIsIGUpOwogICAgICAgIHRoaXMuX3NpZ25hbCgiYWZ0ZXJFeGVjIiwgZSk7CgogICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTsKICAgIH07CgogICAgdGhpcy50b2dnbGVSZWNvcmRpbmcgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBpZiAodGhpcy4kaW5SZXBsYXkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgZWRpdG9yICYmIGVkaXRvci5fZW1pdCgiY2hhbmdlU3RhdHVzIik7CiAgICAgICAgaWYgKHRoaXMucmVjb3JkaW5nKSB7CiAgICAgICAgICAgIHRoaXMubWFjcm8ucG9wKCk7CiAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXhlYyIsIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvKTsKCiAgICAgICAgICAgIGlmICghdGhpcy5tYWNyby5sZW5ndGgpCiAgICAgICAgICAgICAgICB0aGlzLm1hY3JvID0gdGhpcy5vbGRNYWNybzsKCiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlY29yZGluZyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMuJGFkZENvbW1hbmRUb01hY3JvKSB7CiAgICAgICAgICAgIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgdGhpcy5tYWNyby5wdXNoKFtlLmNvbW1hbmQsIGUuYXJnc10pOwogICAgICAgICAgICB9LmJpbmQodGhpcyk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLm9sZE1hY3JvID0gdGhpcy5tYWNybzsKICAgICAgICB0aGlzLm1hY3JvID0gW107CiAgICAgICAgdGhpcy5vbigiZXhlYyIsIHRoaXMuJGFkZENvbW1hbmRUb01hY3JvKTsKICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRpbmcgPSB0cnVlOwogICAgfTsKCiAgICB0aGlzLnJlcGxheSA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGlmICh0aGlzLiRpblJlcGxheSB8fCAhdGhpcy5tYWNybykKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAodGhpcy5yZWNvcmRpbmcpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZVJlY29yZGluZyhlZGl0b3IpOwoKICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLiRpblJlcGxheSA9IHRydWU7CiAgICAgICAgICAgIHRoaXMubWFjcm8uZm9yRWFjaChmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHggPT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjKHgsIGVkaXRvcik7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjKHhbMF0sIGVkaXRvciwgeFsxXSk7CiAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMuJGluUmVwbGF5ID0gZmFsc2U7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLnRyaW1NYWNybyA9IGZ1bmN0aW9uKG0pIHsKICAgICAgICByZXR1cm4gbS5tYXAoZnVuY3Rpb24oeCl7CiAgICAgICAgICAgIGlmICh0eXBlb2YgeFswXSAhPSAic3RyaW5nIikKICAgICAgICAgICAgICAgIHhbMF0gPSB4WzBdLm5hbWU7CiAgICAgICAgICAgIGlmICgheFsxXSkKICAgICAgICAgICAgICAgIHggPSB4WzBdOwogICAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKENvbW1hbmRNYW5hZ2VyLnByb3RvdHlwZSk7CgpleHBvcnRzLkNvbW1hbmRNYW5hZ2VyID0gQ29tbWFuZE1hbmFnZXI7Cgp9KTsKCmRlZmluZSgiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciLCJhY2UvY29uZmlnIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBjb25maWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCmZ1bmN0aW9uIGJpbmRLZXkod2luLCBtYWMpIHsKICAgIHJldHVybiB7d2luOiB3aW4sIG1hYzogbWFjfTsKfQpleHBvcnRzLmNvbW1hbmRzID0gW3sKICAgIG5hbWU6ICJzaG93U2V0dGluZ3NNZW51IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtLCIsICJDb21tYW5kLSwiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKCJhY2UvZXh0L3NldHRpbmdzX21lbnUiLCBmdW5jdGlvbihtb2R1bGUpIHsKICAgICAgICAgICAgbW9kdWxlLmluaXQoZWRpdG9yKTsKICAgICAgICAgICAgZWRpdG9yLnNob3dTZXR0aW5nc01lbnUoKTsKICAgICAgICB9KTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZ29Ub05leHRFcnJvciIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtRSIsICJGNCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoIi4vZXh0L2Vycm9yX21hcmtlciIsIGZ1bmN0aW9uKG1vZHVsZSkgewogICAgICAgICAgICBtb2R1bGUuc2hvd0Vycm9yTWFya2VyKGVkaXRvciwgMSk7CiAgICAgICAgfSk7CiAgICB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJhbmltYXRlIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJnb1RvUHJldmlvdXNFcnJvciIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtU2hpZnQtRSIsICJTaGlmdC1GNCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoIi4vZXh0L2Vycm9yX21hcmtlciIsIGZ1bmN0aW9uKG1vZHVsZSkgewogICAgICAgICAgICBtb2R1bGUuc2hvd0Vycm9yTWFya2VyKGVkaXRvciwgLTEpOwogICAgICAgIH0pOwogICAgfSwKICAgIHNjcm9sbEludG9WaWV3OiAiYW5pbWF0ZSIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAic2VsZWN0YWxsIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IGFsbCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUEiLCAiQ29tbWFuZC1BIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdEFsbCgpOyB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImNlbnRlcnNlbGVjdGlvbiIsCiAgICBkZXNjcmlwdGlvbjogIkNlbnRlciBzZWxlY3Rpb24iLAogICAgYmluZEtleTogYmluZEtleShudWxsLCAiQ3RybC1MIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNlbnRlclNlbGVjdGlvbigpOyB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImdvdG9saW5lIiwKICAgIGRlc2NyaXB0aW9uOiAiR28gdG8gbGluZS4uLiIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUwiLCAiQ29tbWFuZC1MIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGxpbmUpIHsKICAgICAgICBpZiAodHlwZW9mIGxpbmUgPT09ICJudW1iZXIiICYmICFpc05hTihsaW5lKSkKICAgICAgICAgICAgZWRpdG9yLmdvdG9MaW5lKGxpbmUpOwogICAgICAgIGVkaXRvci5wcm9tcHQoeyAkdHlwZTogImdvdG9MaW5lIiB9KTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZm9sZCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtTHxDdHJsLUYxIiwgIkNvbW1hbmQtQWx0LUx8Q29tbWFuZC1GMSIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnRvZ2dsZUZvbGQoZmFsc2UpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY2VudGVyIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJ1bmZvbGQiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LUx8Q3RybC1TaGlmdC1GMSIsICJDb21tYW5kLUFsdC1TaGlmdC1MfENvbW1hbmQtU2hpZnQtRjEiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi50b2dnbGVGb2xkKHRydWUpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY2VudGVyIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJ0b2dnbGVGb2xkV2lkZ2V0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkYyIiwgIkYyIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24udG9nZ2xlRm9sZFdpZGdldCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY2VudGVyIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJ0b2dnbGVQYXJlbnRGb2xkV2lkZ2V0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1GMiIsICJBbHQtRjIiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Vzc2lvbi50b2dnbGVGb2xkV2lkZ2V0KHRydWUpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY2VudGVyIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJmb2xkYWxsIiwKICAgIGRlc2NyaXB0aW9uOiAiRm9sZCBhbGwiLAogICAgYmluZEtleTogYmluZEtleShudWxsLCAiQ3RybC1Db21tYW5kLU9wdGlvbi0wIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlc3Npb24uZm9sZEFsbCgpOyB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjZW50ZXIiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImZvbGRPdGhlciIsCiAgICBkZXNjcmlwdGlvbjogIkZvbGQgb3RoZXIiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LTAiLCAiQ29tbWFuZC1PcHRpb24tMCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IAogICAgICAgIGVkaXRvci5zZXNzaW9uLmZvbGRBbGwoKTsKICAgICAgICBlZGl0b3Iuc2Vzc2lvbi51bmZvbGQoZWRpdG9yLnNlbGVjdGlvbi5nZXRBbGxSYW5nZXMoKSk7CiAgICB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjZW50ZXIiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInVuZm9sZGFsbCIsCiAgICBkZXNjcmlwdGlvbjogIlVuZm9sZCBhbGwiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LTAiLCAiQ29tbWFuZC1PcHRpb24tU2hpZnQtMCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZXNzaW9uLnVuZm9sZCgpOyB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjZW50ZXIiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImZpbmRuZXh0IiwKICAgIGRlc2NyaXB0aW9uOiAiRmluZCBuZXh0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtSyIsICJDb21tYW5kLUciKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZE5leHQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImNlbnRlciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZmluZHByZXZpb3VzIiwKICAgIGRlc2NyaXB0aW9uOiAiRmluZCBwcmV2aW91cyIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUsiLCAiQ29tbWFuZC1TaGlmdC1HIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmZpbmRQcmV2aW91cygpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY2VudGVyIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3RPckZpbmROZXh0IiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IG9yIGZpbmQgbmV4dCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtSyIsICJDdHJsLUciKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBlZGl0b3IuZmluZE5leHQoKTsgCiAgICB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdE9yRmluZFByZXZpb3VzIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IG9yIGZpbmQgcHJldmlvdXMiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LUsiLCAiQ3RybC1TaGlmdC1HIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgCiAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVkaXRvci5maW5kUHJldmlvdXMoKTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZmluZCIsCiAgICBkZXNjcmlwdGlvbjogIkZpbmQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1GIiwgIkNvbW1hbmQtRiIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoImFjZS9leHQvc2VhcmNoYm94IiwgZnVuY3Rpb24oZSkge2UuU2VhcmNoKGVkaXRvcik7fSk7CiAgICB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogIm92ZXJ3cml0ZSIsCiAgICBkZXNjcmlwdGlvbjogIk92ZXJ3cml0ZSIsCiAgICBiaW5kS2V5OiAiSW5zZXJ0IiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9nZ2xlT3ZlcndyaXRlKCk7IH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAic2VsZWN0dG9zdGFydCIsCiAgICBkZXNjcmlwdGlvbjogIlNlbGVjdCB0byBzdGFydCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUhvbWUiLCAiQ29tbWFuZC1TaGlmdC1Ib21lfENvbW1hbmQtU2hpZnQtVXAiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZVN0YXJ0KCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgcmVhZE9ubHk6IHRydWUsCiAgICBzY3JvbGxJbnRvVmlldzogImFuaW1hdGUiLAogICAgYWNlQ29tbWFuZEdyb3VwOiAiZmlsZUp1bXAiCn0sIHsKICAgIG5hbWU6ICJnb3Rvc3RhcnQiLAogICAgZGVzY3JpcHRpb246ICJHbyB0byBzdGFydCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUhvbWUiLCAiQ29tbWFuZC1Ib21lfENvbW1hbmQtVXAiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVGaWxlU3RhcnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICByZWFkT25seTogdHJ1ZSwKICAgIHNjcm9sbEludG9WaWV3OiAiYW5pbWF0ZSIsCiAgICBhY2VDb21tYW5kR3JvdXA6ICJmaWxlSnVtcCIKfSwgewogICAgbmFtZTogInNlbGVjdHVwIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IHVwIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LVVwIiwgIlNoaWZ0LVVwfEN0cmwtU2hpZnQtUCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RVcCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJnb2xpbmV1cCIsCiAgICBkZXNjcmlwdGlvbjogIkdvIGxpbmUgdXAiLAogICAgYmluZEtleTogYmluZEtleSgiVXAiLCAiVXB8Q3RybC1QIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsgZWRpdG9yLm5hdmlnYXRlVXAoYXJncy50aW1lcyk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHRvZW5kIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IHRvIGVuZCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUVuZCIsICJDb21tYW5kLVNoaWZ0LUVuZHxDb21tYW5kLVNoaWZ0LURvd24iKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0RmlsZUVuZCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHJlYWRPbmx5OiB0cnVlLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJhbmltYXRlIiwKICAgIGFjZUNvbW1hbmRHcm91cDogImZpbGVKdW1wIgp9LCB7CiAgICBuYW1lOiAiZ290b2VuZCIsCiAgICBkZXNjcmlwdGlvbjogIkdvIHRvIGVuZCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLUVuZCIsICJDb21tYW5kLUVuZHxDb21tYW5kLURvd24iKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVGaWxlRW5kKCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgcmVhZE9ubHk6IHRydWUsCiAgICBzY3JvbGxJbnRvVmlldzogImFuaW1hdGUiLAogICAgYWNlQ29tbWFuZEdyb3VwOiAiZmlsZUp1bXAiCn0sIHsKICAgIG5hbWU6ICJzZWxlY3Rkb3duIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IGRvd24iLAogICAgYmluZEtleTogYmluZEtleSgiU2hpZnQtRG93biIsICJTaGlmdC1Eb3dufEN0cmwtU2hpZnQtTiIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3REb3duKCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImdvbGluZWRvd24iLAogICAgZGVzY3JpcHRpb246ICJHbyBsaW5lIGRvd24iLAogICAgYmluZEtleTogYmluZEtleSgiRG93biIsICJEb3dufEN0cmwtTiIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZURvd24oYXJncy50aW1lcyk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHdvcmRsZWZ0IiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IHdvcmQgbGVmdCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LUxlZnQiLCAiT3B0aW9uLVNoaWZ0LUxlZnQiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0V29yZExlZnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZ290b3dvcmRsZWZ0IiwKICAgIGRlc2NyaXB0aW9uOiAiR28gdG8gd29yZCBsZWZ0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtTGVmdCIsICJPcHRpb24tTGVmdCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZVdvcmRMZWZ0KCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHRvbGluZXN0YXJ0IiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IHRvIGxpbmUgc3RhcnQiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LUxlZnQiLCAiQ29tbWFuZC1TaGlmdC1MZWZ0fEN0cmwtU2hpZnQtQSIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lU3RhcnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZ290b2xpbmVzdGFydCIsCiAgICBkZXNjcmlwdGlvbjogIkdvIHRvIGxpbmUgc3RhcnQiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LUxlZnR8SG9tZSIsICJDb21tYW5kLUxlZnR8SG9tZXxDdHJsLUEiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lU3RhcnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAic2VsZWN0bGVmdCIsCiAgICBkZXNjcmlwdGlvbjogIlNlbGVjdCBsZWZ0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LUxlZnQiLCAiU2hpZnQtTGVmdHxDdHJsLVNoaWZ0LUIiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuc2VsZWN0TGVmdCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJnb3RvbGVmdCIsCiAgICBkZXNjcmlwdGlvbjogIkdvIHRvIGxlZnQiLAogICAgYmluZEtleTogYmluZEtleSgiTGVmdCIsICJMZWZ0fEN0cmwtQiIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZUxlZnQoYXJncy50aW1lcyk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHdvcmRyaWdodCIsCiAgICBkZXNjcmlwdGlvbjogIlNlbGVjdCB3b3JkIHJpZ2h0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtUmlnaHQiLCAiT3B0aW9uLVNoaWZ0LVJpZ2h0IiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFdvcmRSaWdodCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJnb3Rvd29yZHJpZ2h0IiwKICAgIGRlc2NyaXB0aW9uOiAiR28gdG8gd29yZCByaWdodCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVJpZ2h0IiwgIk9wdGlvbi1SaWdodCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5uYXZpZ2F0ZVdvcmRSaWdodCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3R0b2xpbmVlbmQiLAogICAgZGVzY3JpcHRpb246ICJTZWxlY3QgdG8gbGluZSBlbmQiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LVJpZ2h0IiwgIkNvbW1hbmQtU2hpZnQtUmlnaHR8U2hpZnQtRW5kfEN0cmwtU2hpZnQtRSIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImdvdG9saW5lZW5kIiwKICAgIGRlc2NyaXB0aW9uOiAiR28gdG8gbGluZSBlbmQiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVJpZ2h0fEVuZCIsICJDb21tYW5kLVJpZ2h0fEVuZHxDdHJsLUUiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubmF2aWdhdGVMaW5lRW5kKCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHJpZ2h0IiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IHJpZ2h0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LVJpZ2h0IiwgIlNoaWZ0LVJpZ2h0IiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdFJpZ2h0KCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImdvdG9yaWdodCIsCiAgICBkZXNjcmlwdGlvbjogIkdvIHRvIHJpZ2h0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIlJpZ2h0IiwgIlJpZ2h0fEN0cmwtRiIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7IGVkaXRvci5uYXZpZ2F0ZVJpZ2h0KGFyZ3MudGltZXMpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3RwYWdlZG93biIsCiAgICBkZXNjcmlwdGlvbjogIlNlbGVjdCBwYWdlIGRvd24iLAogICAgYmluZEtleTogIlNoaWZ0LVBhZ2VEb3duIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0UGFnZURvd24oKTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJwYWdlZG93biIsCiAgICBkZXNjcmlwdGlvbjogIlBhZ2UgZG93biIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsICJPcHRpb24tUGFnZURvd24iKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZURvd24oKTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJnb3RvcGFnZWRvd24iLAogICAgZGVzY3JpcHRpb246ICJHbyB0byBwYWdlIGRvd24iLAogICAgYmluZEtleTogYmluZEtleSgiUGFnZURvd24iLCAiUGFnZURvd258Q3RybC1WIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdvdG9QYWdlRG93bigpOyB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHBhZ2V1cCIsCiAgICBkZXNjcmlwdGlvbjogIlNlbGVjdCBwYWdlIHVwIiwKICAgIGJpbmRLZXk6ICJTaGlmdC1QYWdlVXAiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RQYWdlVXAoKTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJwYWdldXAiLAogICAgZGVzY3JpcHRpb246ICJQYWdlIHVwIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkobnVsbCwgIk9wdGlvbi1QYWdlVXAiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2Nyb2xsUGFnZVVwKCk7IH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZ290b3BhZ2V1cCIsCiAgICBkZXNjcmlwdGlvbjogIkdvIHRvIHBhZ2UgdXAiLAogICAgYmluZEtleTogIlBhZ2VVcCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdvdG9QYWdlVXAoKTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzY3JvbGx1cCIsCiAgICBkZXNjcmlwdGlvbjogIlNjcm9sbCB1cCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVVwIiwgbnVsbCksCiAgICBleGVjOiBmdW5jdGlvbihlKSB7IGUucmVuZGVyZXIuc2Nyb2xsQnkoMCwgLTIgKiBlLnJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQpOyB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNjcm9sbGRvd24iLAogICAgZGVzY3JpcHRpb246ICJTY3JvbGwgZG93biIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLURvd24iLCBudWxsKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGUpIHsgZS5yZW5kZXJlci5zY3JvbGxCeSgwLCAyICogZS5yZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0KTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3RsaW5lc3RhcnQiLAogICAgZGVzY3JpcHRpb246ICJTZWxlY3QgbGluZSBzdGFydCIsCiAgICBiaW5kS2V5OiAiU2hpZnQtSG9tZSIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmdldFNlbGVjdGlvbigpLnNlbGVjdExpbmVTdGFydCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3RsaW5lZW5kIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IGxpbmUgZW5kIiwKICAgIGJpbmRLZXk6ICJTaGlmdC1FbmQiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5zZWxlY3RMaW5lRW5kKCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInRvZ2dsZXJlY29yZGluZyIsCiAgICBkZXNjcmlwdGlvbjogIlRvZ2dsZSByZWNvcmRpbmciLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1BbHQtRSIsICJDb21tYW5kLU9wdGlvbi1FIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbW1hbmRzLnRvZ2dsZVJlY29yZGluZyhlZGl0b3IpOyB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInJlcGxheW1hY3JvIiwKICAgIGRlc2NyaXB0aW9uOiAiUmVwbGF5IG1hY3JvIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRSIsICJDb21tYW5kLVNoaWZ0LUUiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tbWFuZHMucmVwbGF5KGVkaXRvcik7IH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAianVtcHRvbWF0Y2hpbmciLAogICAgZGVzY3JpcHRpb246ICJKdW1wIHRvIG1hdGNoaW5nIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtXFx8Q3RybC1QIiwgIkNvbW1hbmQtXFwiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuanVtcFRvTWF0Y2hpbmcoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImFuaW1hdGUiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNlbGVjdHRvbWF0Y2hpbmciLAogICAgZGVzY3JpcHRpb246ICJTZWxlY3QgdG8gbWF0Y2hpbmciLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1cXHxDdHJsLVNoaWZ0LVAiLCAiQ29tbWFuZC1TaGlmdC1cXCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZyh0cnVlKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImFuaW1hdGUiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImV4cGFuZFRvTWF0Y2hpbmciLAogICAgZGVzY3JpcHRpb246ICJFeHBhbmQgdG8gbWF0Y2hpbmciLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1NIiwgIkN0cmwtU2hpZnQtTSIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5qdW1wVG9NYXRjaGluZyh0cnVlLCB0cnVlKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImFuaW1hdGUiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInBhc3NLZXlzVG9Ccm93c2VyIiwKICAgIGRlc2NyaXB0aW9uOiAiUGFzcyBrZXlzIHRvIGJyb3dzZXIiLAogICAgYmluZEtleTogYmluZEtleShudWxsLCBudWxsKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKCkge30sCiAgICBwYXNzRXZlbnQ6IHRydWUsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiY29weSIsCiAgICBkZXNjcmlwdGlvbjogIkNvcHkiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwKewogICAgbmFtZTogImN1dCIsCiAgICBkZXNjcmlwdGlvbjogIkN1dCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgY3V0TGluZSA9IGVkaXRvci4kY29weVdpdGhFbXB0eVNlbGVjdGlvbiAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKTsKICAgICAgICB2YXIgcmFuZ2UgPSBjdXRMaW5lID8gZWRpdG9yLnNlbGVjdGlvbi5nZXRMaW5lUmFuZ2UoKSA6IGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgICBlZGl0b3IuX2VtaXQoImN1dCIsIHJhbmdlKTsKCiAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpCiAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CiAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgp9LCB7CiAgICBuYW1lOiAicGFzdGUiLAogICAgZGVzY3JpcHRpb246ICJQYXN0ZSIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsKICAgICAgICBlZGl0b3IuJGhhbmRsZVBhc3RlKGFyZ3MpOwogICAgfSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIgp9LCB7CiAgICBuYW1lOiAicmVtb3ZlbGluZSIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSBsaW5lIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRCIsICJDb21tYW5kLUQiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlTGluZXMoKTsgfSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaExpbmUiCn0sIHsKICAgIG5hbWU6ICJkdXBsaWNhdGVTZWxlY3Rpb24iLAogICAgZGVzY3JpcHRpb246ICJEdXBsaWNhdGUgc2VsZWN0aW9uIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRCIsICJDb21tYW5kLVNoaWZ0LUQiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZHVwbGljYXRlU2VsZWN0aW9uKCk7IH0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCn0sIHsKICAgIG5hbWU6ICJzb3J0bGluZXMiLAogICAgZGVzY3JpcHRpb246ICJTb3J0IGxpbmVzIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtQWx0LVMiLCAiQ29tbWFuZC1BbHQtUyIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zb3J0TGluZXMoKTsgfSwKICAgIHNjcm9sbEludG9WaWV3OiAic2VsZWN0aW9uIiwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaExpbmUiCn0sIHsKICAgIG5hbWU6ICJ0b2dnbGVjb21tZW50IiwKICAgIGRlc2NyaXB0aW9uOiAiVG9nZ2xlIGNvbW1lbnQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC0vIiwgIkNvbW1hbmQtLyIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50b2dnbGVDb21tZW50TGluZXMoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaExpbmUiLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJzZWxlY3Rpb25QYXJ0Igp9LCB7CiAgICBuYW1lOiAidG9nZ2xlQmxvY2tDb21tZW50IiwKICAgIGRlc2NyaXB0aW9uOiAiVG9nZ2xlIGJsb2NrIGNvbW1lbnQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC0vIiwgIkNvbW1hbmQtU2hpZnQtLyIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50b2dnbGVCbG9ja0NvbW1lbnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogInNlbGVjdGlvblBhcnQiCn0sIHsKICAgIG5hbWU6ICJtb2RpZnlOdW1iZXJVcCIsCiAgICBkZXNjcmlwdGlvbjogIk1vZGlmeSBudW1iZXIgdXAiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1VcCIsICJBbHQtU2hpZnQtVXAiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW9kaWZ5TnVtYmVyKDEpOyB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIgp9LCB7CiAgICBuYW1lOiAibW9kaWZ5TnVtYmVyRG93biIsCiAgICBkZXNjcmlwdGlvbjogIk1vZGlmeSBudW1iZXIgZG93biIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LURvd24iLCAiQWx0LVNoaWZ0LURvd24iKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW9kaWZ5TnVtYmVyKC0xKTsgfSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKfSwgewogICAgbmFtZTogInJlcGxhY2UiLAogICAgZGVzY3JpcHRpb246ICJSZXBsYWNlIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtSCIsICJDb21tYW5kLU9wdGlvbi1GIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBjb25maWcubG9hZE1vZHVsZSgiYWNlL2V4dC9zZWFyY2hib3giLCBmdW5jdGlvbihlKSB7ZS5TZWFyY2goZWRpdG9yLCB0cnVlKTt9KTsKICAgIH0KfSwgewogICAgbmFtZTogInVuZG8iLAogICAgZGVzY3JpcHRpb246ICJVbmRvIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtWiIsICJDb21tYW5kLVoiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudW5kbygpOyB9Cn0sIHsKICAgIG5hbWU6ICJyZWRvIiwKICAgIGRlc2NyaXB0aW9uOiAiUmVkbyIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJDdHJsLVNoaWZ0LVp8Q3RybC1ZIiwgIkNvbW1hbmQtU2hpZnQtWnxDb21tYW5kLVkiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVkbygpOyB9Cn0sIHsKICAgIG5hbWU6ICJjb3B5bGluZXN1cCIsCiAgICBkZXNjcmlwdGlvbjogIkNvcHkgbGluZXMgdXAiLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LVVwIiwgIkNvbW1hbmQtT3B0aW9uLVVwIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvcHlMaW5lc1VwKCk7IH0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogIm1vdmVsaW5lc3VwIiwKICAgIGRlc2NyaXB0aW9uOiAiTW92ZSBsaW5lcyB1cCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtVXAiLCAiT3B0aW9uLVVwIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm1vdmVMaW5lc1VwKCk7IH0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogImNvcHlsaW5lc2Rvd24iLAogICAgZGVzY3JpcHRpb246ICJDb3B5IGxpbmVzIGRvd24iLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LVNoaWZ0LURvd24iLCAiQ29tbWFuZC1PcHRpb24tRG93biIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb3B5TGluZXNEb3duKCk7IH0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogIm1vdmVsaW5lc2Rvd24iLAogICAgZGVzY3JpcHRpb246ICJNb3ZlIGxpbmVzIGRvd24iLAogICAgYmluZEtleTogYmluZEtleSgiQWx0LURvd24iLCAiT3B0aW9uLURvd24iKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IubW92ZUxpbmVzRG93bigpOyB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiCn0sIHsKICAgIG5hbWU6ICJkZWwiLAogICAgZGVzY3JpcHRpb246ICJEZWxldGUiLAogICAgYmluZEtleTogYmluZEtleSgiRGVsZXRlIiwgIkRlbGV0ZXxDdHJsLUR8U2hpZnQtRGVsZXRlIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnJlbW92ZSgicmlnaHQiKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogImJhY2tzcGFjZSIsCiAgICBkZXNjcmlwdGlvbjogIkJhY2tzcGFjZSIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KAogICAgICAgICJTaGlmdC1CYWNrc3BhY2V8QmFja3NwYWNlIiwKICAgICAgICAiQ3RybC1CYWNrc3BhY2V8U2hpZnQtQmFja3NwYWNlfEJhY2tzcGFjZXxDdHJsLUgiCiAgICApLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmUoImxlZnQiKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogImN1dF9vcl9kZWxldGUiLAogICAgZGVzY3JpcHRpb246ICJDdXQgb3IgZGVsZXRlIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIlNoaWZ0LURlbGV0ZSIsIG51bGwpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IAogICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICBlZGl0b3IucmVtb3ZlKCJsZWZ0Iik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiCn0sIHsKICAgIG5hbWU6ICJyZW1vdmV0b2xpbmVzdGFydCIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSB0byBsaW5lIHN0YXJ0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1CYWNrc3BhY2UiLCAiQ29tbWFuZC1CYWNrc3BhY2UiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlVG9MaW5lU3RhcnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInJlbW92ZXRvbGluZWVuZCIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSB0byBsaW5lIGVuZCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJBbHQtRGVsZXRlIiwgIkN0cmwtS3xDb21tYW5kLURlbGV0ZSIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5yZW1vdmVUb0xpbmVFbmQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInJlbW92ZXRvbGluZXN0YXJ0aGFyZCIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSB0byBsaW5lIHN0YXJ0IGhhcmQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1TaGlmdC1CYWNrc3BhY2UiLCBudWxsKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSAwOwogICAgICAgIGVkaXRvci5zZXNzaW9uLnJlbW92ZShyYW5nZSk7CiAgICB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIgp9LCB7CiAgICBuYW1lOiAicmVtb3ZldG9saW5lZW5kaGFyZCIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSB0byBsaW5lIGVuZCBoYXJkIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtRGVsZXRlIiwgbnVsbCksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgcmFuZ2UgPSBlZGl0b3Iuc2VsZWN0aW9uLmdldFJhbmdlKCk7CiAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IE51bWJlci5NQVhfVkFMVUU7CiAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgIH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiCn0sIHsKICAgIG5hbWU6ICJyZW1vdmV3b3JkbGVmdCIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSB3b3JkIGxlZnQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1CYWNrc3BhY2UiLCAiQWx0LUJhY2tzcGFjZXxDdHJsLUFsdC1CYWNrc3BhY2UiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlV29yZExlZnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInJlbW92ZXdvcmRyaWdodCIsCiAgICBkZXNjcmlwdGlvbjogIlJlbW92ZSB3b3JkIHJpZ2h0IiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtRGVsZXRlIiwgIkFsdC1EZWxldGUiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IucmVtb3ZlV29yZFJpZ2h0KCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiCn0sIHsKICAgIG5hbWU6ICJvdXRkZW50IiwKICAgIGRlc2NyaXB0aW9uOiAiT3V0ZGVudCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJTaGlmdC1UYWIiLCAiU2hpZnQtVGFiIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmJsb2NrT3V0ZGVudCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAic2VsZWN0aW9uUGFydCIKfSwgewogICAgbmFtZTogImluZGVudCIsCiAgICBkZXNjcmlwdGlvbjogIkluZGVudCIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KCJUYWIiLCAiVGFiIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmluZGVudCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAic2VsZWN0aW9uUGFydCIKfSwgewogICAgbmFtZTogImJsb2Nrb3V0ZGVudCIsCiAgICBkZXNjcmlwdGlvbjogIkJsb2NrIG91dGRlbnQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1bIiwgIkN0cmwtWyIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja091dGRlbnQoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaExpbmUiLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJzZWxlY3Rpb25QYXJ0Igp9LCB7CiAgICBuYW1lOiAiYmxvY2tpbmRlbnQiLAogICAgZGVzY3JpcHRpb246ICJCbG9jayBpbmRlbnQiLAogICAgYmluZEtleTogYmluZEtleSgiQ3RybC1dIiwgIkN0cmwtXSIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5ibG9ja0luZGVudCgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoTGluZSIsCiAgICBzY3JvbGxJbnRvVmlldzogInNlbGVjdGlvblBhcnQiCn0sIHsKICAgIG5hbWU6ICJpbnNlcnRzdHJpbmciLAogICAgZGVzY3JpcHRpb246ICJJbnNlcnQgc3RyaW5nIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgc3RyKSB7IGVkaXRvci5pbnNlcnQoc3RyKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogImluc2VydHRleHQiLAogICAgZGVzY3JpcHRpb246ICJJbnNlcnQgdGV4dCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsKICAgICAgICBlZGl0b3IuaW5zZXJ0KGxhbmcuc3RyaW5nUmVwZWF0KGFyZ3MudGV4dCAgfHwgIiIsIGFyZ3MudGltZXMgfHwgMSkpOwogICAgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInNwbGl0bGluZSIsCiAgICBkZXNjcmlwdGlvbjogIlNwbGl0IGxpbmUiLAogICAgYmluZEtleTogYmluZEtleShudWxsLCAiQ3RybC1PIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNwbGl0TGluZSgpOyB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIgp9LCB7CiAgICBuYW1lOiAidHJhbnNwb3NlbGV0dGVycyIsCiAgICBkZXNjcmlwdGlvbjogIlRyYW5zcG9zZSBsZXR0ZXJzIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkFsdC1TaGlmdC1YIiwgIkN0cmwtVCIpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci50cmFuc3Bvc2VMZXR0ZXJzKCk7IH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogZnVuY3Rpb24oZWRpdG9yKSB7ZWRpdG9yLnRyYW5zcG9zZVNlbGVjdGlvbnMoMSk7IH0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInRvdXBwZXJjYXNlIiwKICAgIGRlc2NyaXB0aW9uOiAiVG8gdXBwZXJjYXNlIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtVSIsICJDdHJsLVUiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9VcHBlckNhc2UoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInRvbG93ZXJjYXNlIiwKICAgIGRlc2NyaXB0aW9uOiAiVG8gbG93ZXJjYXNlIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtVSIsICJDdHJsLVNoaWZ0LVUiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IudG9Mb3dlckNhc2UoKTsgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogImV4cGFuZHRvbGluZSIsCiAgICBkZXNjcmlwdGlvbjogIkV4cGFuZCB0byBsaW5lIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkN0cmwtU2hpZnQtTCIsICJDb21tYW5kLVNoaWZ0LUwiKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKCiAgICAgICAgcmFuZ2Uuc3RhcnQuY29sdW1uID0gcmFuZ2UuZW5kLmNvbHVtbiA9IDA7CiAgICAgICAgcmFuZ2UuZW5kLnJvdysrOwogICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2V0UmFuZ2UocmFuZ2UsIGZhbHNlKTsKICAgIH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImpvaW5saW5lcyIsCiAgICBkZXNjcmlwdGlvbjogIkpvaW4gbGluZXMiLAogICAgYmluZEtleTogYmluZEtleShudWxsLCBudWxsKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBpc0JhY2t3YXJkcyA9IGVkaXRvci5zZWxlY3Rpb24uaXNCYWNrd2FyZHMoKTsKICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSBpc0JhY2t3YXJkcyA/IGVkaXRvci5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uTGVhZCgpIDogZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25BbmNob3IoKTsKICAgICAgICB2YXIgc2VsZWN0aW9uRW5kID0gaXNCYWNrd2FyZHMgPyBlZGl0b3Iuc2VsZWN0aW9uLmdldFNlbGVjdGlvbkFuY2hvcigpIDogZWRpdG9yLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25MZWFkKCk7CiAgICAgICAgdmFyIGZpcnN0TGluZUVuZENvbCA9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKHNlbGVjdGlvblN0YXJ0LnJvdykubGVuZ3RoOwogICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKSk7CiAgICAgICAgdmFyIHNlbGVjdGVkQ291bnQgPSBzZWxlY3RlZFRleHQucmVwbGFjZSgvXG5ccyovLCAiICIpLmxlbmd0aDsKICAgICAgICB2YXIgaW5zZXJ0TGluZSA9IGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKHNlbGVjdGlvblN0YXJ0LnJvdyk7CgogICAgICAgIGZvciAodmFyIGkgPSBzZWxlY3Rpb25TdGFydC5yb3cgKyAxOyBpIDw9IHNlbGVjdGlvbkVuZC5yb3cgKyAxOyBpKyspIHsKICAgICAgICAgICAgdmFyIGN1ckxpbmUgPSBsYW5nLnN0cmluZ1RyaW1MZWZ0KGxhbmcuc3RyaW5nVHJpbVJpZ2h0KGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMaW5lKGkpKSk7CiAgICAgICAgICAgIGlmIChjdXJMaW5lLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICAgICAgY3VyTGluZSA9ICIgIiArIGN1ckxpbmU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW5zZXJ0TGluZSArPSBjdXJMaW5lOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNlbGVjdGlvbkVuZC5yb3cgKyAxIDwgKGVkaXRvci5zZXNzaW9uLmRvYy5nZXRMZW5ndGgoKSAtIDEpKSB7CiAgICAgICAgICAgIGluc2VydExpbmUgKz0gZWRpdG9yLnNlc3Npb24uZG9jLmdldE5ld0xpbmVDaGFyYWN0ZXIoKTsKICAgICAgICB9CgogICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwogICAgICAgIGVkaXRvci5zZXNzaW9uLmRvYy5yZXBsYWNlKG5ldyBSYW5nZShzZWxlY3Rpb25TdGFydC5yb3csIDAsIHNlbGVjdGlvbkVuZC5yb3cgKyAyLCAwKSwgaW5zZXJ0TGluZSk7CgogICAgICAgIGlmIChzZWxlY3RlZENvdW50ID4gMCkgewogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVDdXJzb3JUbyhzZWxlY3Rpb25TdGFydC5yb3csIHNlbGVjdGlvblN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0VG8oc2VsZWN0aW9uU3RhcnQucm93LCBzZWxlY3Rpb25TdGFydC5jb2x1bW4gKyBzZWxlY3RlZENvdW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmaXJzdExpbmVFbmRDb2wgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0TGluZShzZWxlY3Rpb25TdGFydC5yb3cpLmxlbmd0aCA+IGZpcnN0TGluZUVuZENvbCA/IChmaXJzdExpbmVFbmRDb2wgKyAxKSA6IGZpcnN0TGluZUVuZENvbDsKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yVG8oc2VsZWN0aW9uU3RhcnQucm93LCBmaXJzdExpbmVFbmRDb2wpOwogICAgICAgIH0KICAgIH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImludmVydFNlbGVjdGlvbiIsCiAgICBkZXNjcmlwdGlvbjogIkludmVydCBzZWxlY3Rpb24iLAogICAgYmluZEtleTogYmluZEtleShudWxsLCBudWxsKSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBlbmRSb3cgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0TGVuZ3RoKCkgLSAxOwogICAgICAgIHZhciBlbmRDb2wgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MuZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICB2YXIgcmFuZ2VzID0gZWRpdG9yLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzOwogICAgICAgIHZhciBuZXdSYW5nZXMgPSBbXTsKICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA8IDEpIHsKICAgICAgICAgICAgcmFuZ2VzID0gW2VkaXRvci5zZWxlY3Rpb24uZ2V0UmFuZ2UoKV07CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSA9PSAocmFuZ2VzLmxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICAgICBpZiAoIShyYW5nZXNbaV0uZW5kLnJvdyA9PT0gZW5kUm93ICYmIHJhbmdlc1tpXS5lbmQuY29sdW1uID09PSBlbmRDb2wpKSB7CiAgICAgICAgICAgICAgICAgICAgbmV3UmFuZ2VzLnB1c2gobmV3IFJhbmdlKHJhbmdlc1tpXS5lbmQucm93LCByYW5nZXNbaV0uZW5kLmNvbHVtbiwgZW5kUm93LCBlbmRDb2wpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGkgPT09IDApIHsKICAgICAgICAgICAgICAgIGlmICghKHJhbmdlc1tpXS5zdGFydC5yb3cgPT09IDAgJiYgcmFuZ2VzW2ldLnN0YXJ0LmNvbHVtbiA9PT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICBuZXdSYW5nZXMucHVzaChuZXcgUmFuZ2UoMCwgMCwgcmFuZ2VzW2ldLnN0YXJ0LnJvdywgcmFuZ2VzW2ldLnN0YXJ0LmNvbHVtbikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbmV3UmFuZ2VzLnB1c2gobmV3IFJhbmdlKHJhbmdlc1tpLTFdLmVuZC5yb3csIHJhbmdlc1tpLTFdLmVuZC5jb2x1bW4sIHJhbmdlc1tpXS5zdGFydC5yb3csIHJhbmdlc1tpXS5zdGFydC5jb2x1bW4pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKCiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IG5ld1Jhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1Jhbmdlc1tpXSwgZmFsc2UpOwogICAgICAgIH0KICAgIH0sCiAgICByZWFkT25seTogdHJ1ZSwKICAgIHNjcm9sbEludG9WaWV3OiAibm9uZSIKfSwgewogICAgbmFtZTogIm9wZW5Db21tYW5kUGFsbGV0ZSIsCiAgICBkZXNjcmlwdGlvbjogIk9wZW4gY29tbWFuZCBwYWxsZXRlIiwKICAgIGJpbmRLZXk6IGJpbmRLZXkoIkYxIiwgIkYxIiksCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBlZGl0b3IucHJvbXB0KHsgJHR5cGU6ICJjb21tYW5kcyIgfSk7CiAgICB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogIm1vZGVTZWxlY3QiLAogICAgZGVzY3JpcHRpb246ICJDaGFuZ2UgbGFuZ3VhZ2UgbW9kZS4uLiIsCiAgICBiaW5kS2V5OiBiaW5kS2V5KG51bGwsIG51bGwpLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgZWRpdG9yLnByb21wdCh7ICR0eXBlOiAibW9kZXMiIH0pOwogICAgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn1dOwoKfSk7CgpkZWZpbmUoImFjZS9lZGl0b3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2ZpeG9sZGJyb3dzZXJzIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2tleWJvYXJkL3RleHRpbnB1dCIsImFjZS9tb3VzZS9tb3VzZV9oYW5kbGVyIiwiYWNlL21vdXNlL2ZvbGRfaGFuZGxlciIsImFjZS9rZXlib2FyZC9rZXliaW5kaW5nIiwiYWNlL2VkaXRfc2Vzc2lvbiIsImFjZS9zZWFyY2giLCJhY2UvcmFuZ2UiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvY29tbWFuZHMvY29tbWFuZF9tYW5hZ2VyIiwiYWNlL2NvbW1hbmRzL2RlZmF1bHRfY29tbWFuZHMiLCJhY2UvY29uZmlnIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2NsaXBib2FyZCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKcmVxdWlyZSgiLi9saWIvZml4b2xkYnJvd3NlcnMiKTsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIGRvbSA9IHJlcXVpcmUoIi4vbGliL2RvbSIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKdmFyIHVzZXJhZ2VudCA9IHJlcXVpcmUoIi4vbGliL3VzZXJhZ2VudCIpOwp2YXIgVGV4dElucHV0ID0gcmVxdWlyZSgiLi9rZXlib2FyZC90ZXh0aW5wdXQiKS5UZXh0SW5wdXQ7CnZhciBNb3VzZUhhbmRsZXIgPSByZXF1aXJlKCIuL21vdXNlL21vdXNlX2hhbmRsZXIiKS5Nb3VzZUhhbmRsZXI7CnZhciBGb2xkSGFuZGxlciA9IHJlcXVpcmUoIi4vbW91c2UvZm9sZF9oYW5kbGVyIikuRm9sZEhhbmRsZXI7CnZhciBLZXlCaW5kaW5nID0gcmVxdWlyZSgiLi9rZXlib2FyZC9rZXliaW5kaW5nIikuS2V5QmluZGluZzsKdmFyIEVkaXRTZXNzaW9uID0gcmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsKdmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4vc2VhcmNoIikuU2VhcmNoOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgQ29tbWFuZE1hbmFnZXIgPSByZXF1aXJlKCIuL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlciIpLkNvbW1hbmRNYW5hZ2VyOwp2YXIgZGVmYXVsdENvbW1hbmRzID0gcmVxdWlyZSgiLi9jb21tYW5kcy9kZWZhdWx0X2NvbW1hbmRzIikuY29tbWFuZHM7CnZhciBjb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIGNsaXBib2FyZCA9IHJlcXVpcmUoIi4vY2xpcGJvYXJkIik7CnZhciBFZGl0b3IgPSBmdW5jdGlvbihyZW5kZXJlciwgc2Vzc2lvbiwgb3B0aW9ucykgewogICAgdmFyIGNvbnRhaW5lciA9IHJlbmRlcmVyLmdldENvbnRhaW5lckVsZW1lbnQoKTsKICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyOwogICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyOwogICAgdGhpcy5pZCA9ICJlZGl0b3IiICsgKCsrRWRpdG9yLiR1aWQpOwoKICAgIHRoaXMuY29tbWFuZHMgPSBuZXcgQ29tbWFuZE1hbmFnZXIodXNlcmFnZW50LmlzTWFjID8gIm1hYyIgOiAid2luIiwgZGVmYXVsdENvbW1hbmRzKTsKICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT0gIm9iamVjdCIpIHsKICAgICAgICB0aGlzLnRleHRJbnB1dCA9IG5ldyBUZXh0SW5wdXQocmVuZGVyZXIuZ2V0VGV4dEFyZWFDb250YWluZXIoKSwgdGhpcyk7CiAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0YXJlYSA9IHRoaXMudGV4dElucHV0LmdldEVsZW1lbnQoKTsKICAgICAgICB0aGlzLiRtb3VzZUhhbmRsZXIgPSBuZXcgTW91c2VIYW5kbGVyKHRoaXMpOwogICAgICAgIG5ldyBGb2xkSGFuZGxlcih0aGlzKTsKICAgIH0KCiAgICB0aGlzLmtleUJpbmRpbmcgPSBuZXcgS2V5QmluZGluZyh0aGlzKTsKCiAgICB0aGlzLiRzZWFyY2ggPSBuZXcgU2VhcmNoKCkuc2V0KHsKICAgICAgICB3cmFwOiB0cnVlCiAgICB9KTsKCiAgICB0aGlzLiRoaXN0b3J5VHJhY2tlciA9IHRoaXMuJGhpc3RvcnlUcmFja2VyLmJpbmQodGhpcyk7CiAgICB0aGlzLmNvbW1hbmRzLm9uKCJleGVjIiwgdGhpcy4kaGlzdG9yeVRyYWNrZXIpOwoKICAgIHRoaXMuJGluaXRPcGVyYXRpb25MaXN0ZW5lcnMoKTsKICAgIAogICAgdGhpcy5fJGVtaXRJbnB1dEV2ZW50ID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9zaWduYWwoImlucHV0Iiwge30pOwogICAgICAgIGlmICh0aGlzLnNlc3Npb24gJiYgdGhpcy5zZXNzaW9uLmJnVG9rZW5pemVyKQogICAgICAgICAgICB0aGlzLnNlc3Npb24uYmdUb2tlbml6ZXIuc2NoZWR1bGVTdGFydCgpOwogICAgfS5iaW5kKHRoaXMpKTsKICAgIAogICAgdGhpcy5vbigiY2hhbmdlIiwgZnVuY3Rpb24oXywgX3NlbGYpIHsKICAgICAgICBfc2VsZi5fJGVtaXRJbnB1dEV2ZW50LnNjaGVkdWxlKDMxKTsKICAgIH0pOwoKICAgIHRoaXMuc2V0U2Vzc2lvbihzZXNzaW9uIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXNzaW9uIHx8IG5ldyBFZGl0U2Vzc2lvbigiIikpOwogICAgY29uZmlnLnJlc2V0T3B0aW9ucyh0aGlzKTsKICAgIGlmIChvcHRpb25zKQogICAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTsKICAgIGNvbmZpZy5fc2lnbmFsKCJlZGl0b3IiLCB0aGlzKTsKfTsKCkVkaXRvci4kdWlkID0gMDsKCihmdW5jdGlvbigpewoKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKCiAgICB0aGlzLiRpbml0T3BlcmF0aW9uTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5jb21tYW5kcy5vbigiZXhlYyIsIHRoaXMuc3RhcnRPcGVyYXRpb24uYmluZCh0aGlzKSwgdHJ1ZSk7CiAgICAgICAgdGhpcy5jb21tYW5kcy5vbigiYWZ0ZXJFeGVjIiwgdGhpcy5lbmRPcGVyYXRpb24uYmluZCh0aGlzKSwgdHJ1ZSk7CgogICAgICAgIHRoaXMuJG9wUmVzZXRUaW1lciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5lbmRPcGVyYXRpb24uYmluZCh0aGlzLCB0cnVlKSk7CiAgICAgICAgdGhpcy5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5jdXJPcCkgewogICAgICAgICAgICAgICAgdGhpcy5zdGFydE9wZXJhdGlvbigpOwogICAgICAgICAgICAgICAgdGhpcy5jdXJPcC5zZWxlY3Rpb25CZWZvcmUgPSB0aGlzLiRsYXN0U2VsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuY3VyT3AuZG9jQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgfS5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICAgICAKICAgICAgICB0aGlzLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLmN1ck9wKSB7CiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgICAgICAgICB0aGlzLmN1ck9wLnNlbGVjdGlvbkJlZm9yZSA9IHRoaXMuJGxhc3RTZWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jdXJPcC5zZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTsKICAgICAgICB9LmJpbmQodGhpcyksIHRydWUpOwogICAgfTsKCiAgICB0aGlzLmN1ck9wID0gbnVsbDsKICAgIHRoaXMucHJldk9wID0ge307CiAgICB0aGlzLnN0YXJ0T3BlcmF0aW9uID0gZnVuY3Rpb24oY29tbWFuZEV2ZW50KSB7CiAgICAgICAgaWYgKHRoaXMuY3VyT3ApIHsKICAgICAgICAgICAgaWYgKCFjb21tYW5kRXZlbnQgfHwgdGhpcy5jdXJPcC5jb21tYW5kKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB0aGlzLnByZXZPcCA9IHRoaXMuY3VyT3A7CiAgICAgICAgfQogICAgICAgIGlmICghY29tbWFuZEV2ZW50KSB7CiAgICAgICAgICAgIHRoaXMucHJldmlvdXNDb21tYW5kID0gbnVsbDsKICAgICAgICAgICAgY29tbWFuZEV2ZW50ID0ge307CiAgICAgICAgfQoKICAgICAgICB0aGlzLiRvcFJlc2V0VGltZXIuc2NoZWR1bGUoKTsKICAgICAgICB0aGlzLmN1ck9wID0gdGhpcy5zZXNzaW9uLmN1ck9wID0gewogICAgICAgICAgICBjb21tYW5kOiBjb21tYW5kRXZlbnQuY29tbWFuZCB8fCB7fSwKICAgICAgICAgICAgYXJnczogY29tbWFuZEV2ZW50LmFyZ3MsCiAgICAgICAgICAgIHNjcm9sbFRvcDogdGhpcy5yZW5kZXJlci5zY3JvbGxUb3AKICAgICAgICB9OwogICAgICAgIHRoaXMuY3VyT3Auc2VsZWN0aW9uQmVmb3JlID0gdGhpcy5zZWxlY3Rpb24udG9KU09OKCk7CiAgICB9OwoKICAgIHRoaXMuZW5kT3BlcmF0aW9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmICh0aGlzLmN1ck9wKSB7CiAgICAgICAgICAgIGlmIChlICYmIGUucmV0dXJuVmFsdWUgPT09IGZhbHNlKQogICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLmN1ck9wID0gbnVsbCk7CiAgICAgICAgICAgIGlmIChlID09IHRydWUgJiYgdGhpcy5jdXJPcC5jb21tYW5kICYmIHRoaXMuY3VyT3AuY29tbWFuZC5uYW1lID09ICJtb3VzZSIpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiYmVmb3JlRW5kT3BlcmF0aW9uIik7CiAgICAgICAgICAgIGlmICghdGhpcy5jdXJPcCkgcmV0dXJuOwogICAgICAgICAgICB2YXIgY29tbWFuZCA9IHRoaXMuY3VyT3AuY29tbWFuZDsKICAgICAgICAgICAgdmFyIHNjcm9sbEludG9WaWV3ID0gY29tbWFuZCAmJiBjb21tYW5kLnNjcm9sbEludG9WaWV3OwogICAgICAgICAgICBpZiAoc2Nyb2xsSW50b1ZpZXcpIHsKICAgICAgICAgICAgICAgIHN3aXRjaCAoc2Nyb2xsSW50b1ZpZXcpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJjZW50ZXItYW5pbWF0ZSI6CiAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbEludG9WaWV3ID0gImFuaW1hdGUiOwogICAgICAgICAgICAgICAgICAgIGNhc2UgImNlbnRlciI6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiYW5pbWF0ZSI6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiY3Vyc29yIjoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldygpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICJzZWxlY3Rpb25QYXJ0IjoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHRoaXMucmVuZGVyZXIubGF5ZXJDb25maWc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZS5zdGFydC5yb3cgPj0gY29uZmlnLmxhc3RSb3cgfHwgcmFuZ2UuZW5kLnJvdyA8PSBjb25maWcuZmlyc3RSb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcodGhpcy5zZWxlY3Rpb24uYW5jaG9yLCB0aGlzLnNlbGVjdGlvbi5sZWFkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzY3JvbGxJbnRvVmlldyA9PSAiYW5pbWF0ZSIpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHRoaXMuY3VyT3Auc2Nyb2xsVG9wKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgc2VsID0gdGhpcy5zZWxlY3Rpb24udG9KU09OKCk7CiAgICAgICAgICAgIHRoaXMuY3VyT3Auc2VsZWN0aW9uQWZ0ZXIgPSBzZWw7CiAgICAgICAgICAgIHRoaXMuJGxhc3RTZWwgPSB0aGlzLnNlbGVjdGlvbi50b0pTT04oKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkuYWRkU2VsZWN0aW9uKHNlbCk7CiAgICAgICAgICAgIHRoaXMucHJldk9wID0gdGhpcy5jdXJPcDsKICAgICAgICAgICAgdGhpcy5jdXJPcCA9IG51bGw7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuJG1lcmdlYWJsZUNvbW1hbmRzID0gWyJiYWNrc3BhY2UiLCAiZGVsIiwgImluc2VydHN0cmluZyJdOwogICAgdGhpcy4kaGlzdG9yeVRyYWNrZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCF0aGlzLiRtZXJnZVVuZG9EZWx0YXMpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHByZXYgPSB0aGlzLnByZXZPcDsKICAgICAgICB2YXIgbWVyZ2VhYmxlQ29tbWFuZHMgPSB0aGlzLiRtZXJnZWFibGVDb21tYW5kczsKICAgICAgICB2YXIgc2hvdWxkTWVyZ2UgPSBwcmV2LmNvbW1hbmQgJiYgKGUuY29tbWFuZC5uYW1lID09IHByZXYuY29tbWFuZC5uYW1lKTsKICAgICAgICBpZiAoZS5jb21tYW5kLm5hbWUgPT0gImluc2VydHN0cmluZyIpIHsKICAgICAgICAgICAgdmFyIHRleHQgPSBlLmFyZ3M7CiAgICAgICAgICAgIGlmICh0aGlzLm1lcmdlTmV4dENvbW1hbmQgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VOZXh0Q29tbWFuZCA9IHRydWU7CgogICAgICAgICAgICBzaG91bGRNZXJnZSA9IHNob3VsZE1lcmdlCiAgICAgICAgICAgICAgICAmJiB0aGlzLm1lcmdlTmV4dENvbW1hbmQgLy8gcHJldmlvdXMgY29tbWFuZCBhbGxvd3MgdG8gY29hbGVzY2Ugd2l0aAogICAgICAgICAgICAgICAgJiYgKCEvXHMvLnRlc3QodGV4dCkgfHwgL1xzLy50ZXN0KHByZXYuYXJncykpOyAvLyBwcmV2aW91cyBpbnNlcnRpb24gd2FzIG9mIHNhbWUgdHlwZQoKICAgICAgICAgICAgdGhpcy5tZXJnZU5leHRDb21tYW5kID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaG91bGRNZXJnZSA9IHNob3VsZE1lcmdlCiAgICAgICAgICAgICAgICAmJiBtZXJnZWFibGVDb21tYW5kcy5pbmRleE9mKGUuY29tbWFuZC5uYW1lKSAhPT0gLTE7IC8vIHRoZSBjb21tYW5kIGlzIG1lcmdlYWJsZQogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICB0aGlzLiRtZXJnZVVuZG9EZWx0YXMgIT0gImFsd2F5cyIKICAgICAgICAgICAgJiYgRGF0ZS5ub3coKSAtIHRoaXMuc2VxdWVuY2VTdGFydFRpbWUgPiAyMDAwCiAgICAgICAgKSB7CiAgICAgICAgICAgIHNob3VsZE1lcmdlID0gZmFsc2U7IC8vIHRoZSBzZXF1ZW5jZSBpcyB0b28gbG9uZwogICAgICAgIH0KCiAgICAgICAgaWYgKHNob3VsZE1lcmdlKQogICAgICAgICAgICB0aGlzLnNlc3Npb24ubWVyZ2VVbmRvRGVsdGFzID0gdHJ1ZTsKICAgICAgICBlbHNlIGlmIChtZXJnZWFibGVDb21tYW5kcy5pbmRleE9mKGUuY29tbWFuZC5uYW1lKSAhPT0gLTEpCiAgICAgICAgICAgIHRoaXMuc2VxdWVuY2VTdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgfTsKICAgIHRoaXMuc2V0S2V5Ym9hcmRIYW5kbGVyID0gZnVuY3Rpb24oa2V5Ym9hcmRIYW5kbGVyLCBjYikgewogICAgICAgIGlmIChrZXlib2FyZEhhbmRsZXIgJiYgdHlwZW9mIGtleWJvYXJkSGFuZGxlciA9PT0gInN0cmluZyIgJiYga2V5Ym9hcmRIYW5kbGVyICE9ICJhY2UiKSB7CiAgICAgICAgICAgIHRoaXMuJGtleWJpbmRpbmdJZCA9IGtleWJvYXJkSGFuZGxlcjsKICAgICAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKICAgICAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoWyJrZXliaW5kaW5nIiwga2V5Ym9hcmRIYW5kbGVyXSwgZnVuY3Rpb24obW9kdWxlKSB7CiAgICAgICAgICAgICAgICBpZiAoX3NlbGYuJGtleWJpbmRpbmdJZCA9PSBrZXlib2FyZEhhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgX3NlbGYua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIobW9kdWxlICYmIG1vZHVsZS5oYW5kbGVyKTsKICAgICAgICAgICAgICAgIGNiICYmIGNiKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJGtleWJpbmRpbmdJZCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMua2V5QmluZGluZy5zZXRLZXlib2FyZEhhbmRsZXIoa2V5Ym9hcmRIYW5kbGVyKTsKICAgICAgICAgICAgY2IgJiYgY2IoKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5rZXlCaW5kaW5nLmdldEtleWJvYXJkSGFuZGxlcigpOwogICAgfTsKICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09IHNlc3Npb24pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAodGhpcy5jdXJPcCkgdGhpcy5lbmRPcGVyYXRpb24oKTsKICAgICAgICB0aGlzLmN1ck9wID0ge307CgogICAgICAgIHZhciBvbGRTZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIGlmIChvbGRTZXNzaW9uKSB7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZSIsIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VNb2RlIiwgdGhpcy4kb25DaGFuZ2VNb2RlKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZigidG9rZW5pemVyVXBkYXRlIiwgdGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VUYWJTaXplIiwgdGhpcy4kb25DaGFuZ2VUYWJTaXplKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlV3JhcExpbWl0IiwgdGhpcy4kb25DaGFuZ2VXcmFwTGltaXQpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VXcmFwTW9kZSIsIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VGb2xkIiwgdGhpcy4kb25DaGFuZ2VGb2xkKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlRnJvbnRNYXJrZXIiLCB0aGlzLiRvbkNoYW5nZUZyb250TWFya2VyKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlQmFja01hcmtlciIsIHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlcik7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZUJyZWFrcG9pbnQiLCB0aGlzLiRvbkNoYW5nZUJyZWFrcG9pbnQpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VBbm5vdGF0aW9uIiwgdGhpcy4kb25DaGFuZ2VBbm5vdGF0aW9uKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9mZigiY2hhbmdlT3ZlcndyaXRlIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub2ZmKCJjaGFuZ2VTY3JvbGxUb3AiLCB0aGlzLiRvblNjcm9sbFRvcENoYW5nZSk7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vZmYoImNoYW5nZVNjcm9sbExlZnQiLCB0aGlzLiRvblNjcm9sbExlZnRDaGFuZ2UpOwoKICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgc2VsZWN0aW9uLm9mZigiY2hhbmdlQ3Vyc29yIiwgdGhpcy4kb25DdXJzb3JDaGFuZ2UpOwogICAgICAgICAgICBzZWxlY3Rpb24ub2ZmKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwogICAgICAgIGlmIChzZXNzaW9uKSB7CiAgICAgICAgICAgIHRoaXMuJG9uRG9jdW1lbnRDaGFuZ2UgPSB0aGlzLm9uRG9jdW1lbnRDaGFuZ2UuYmluZCh0aGlzKTsKICAgICAgICAgICAgc2Vzc2lvbi5vbigiY2hhbmdlIiwgdGhpcy4kb25Eb2N1bWVudENoYW5nZSk7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgIAogICAgICAgICAgICB0aGlzLiRvbkNoYW5nZU1vZGUgPSB0aGlzLm9uQ2hhbmdlTW9kZS5iaW5kKHRoaXMpOwogICAgICAgICAgICBzZXNzaW9uLm9uKCJjaGFuZ2VNb2RlIiwgdGhpcy4kb25DaGFuZ2VNb2RlKTsKICAgIAogICAgICAgICAgICB0aGlzLiRvblRva2VuaXplclVwZGF0ZSA9IHRoaXMub25Ub2tlbml6ZXJVcGRhdGUuYmluZCh0aGlzKTsKICAgICAgICAgICAgc2Vzc2lvbi5vbigidG9rZW5pemVyVXBkYXRlIiwgdGhpcy4kb25Ub2tlbml6ZXJVcGRhdGUpOwogICAgCiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlVGFiU2l6ZSA9IHRoaXMucmVuZGVyZXIub25DaGFuZ2VUYWJTaXplLmJpbmQodGhpcy5yZW5kZXJlcik7CiAgICAgICAgICAgIHNlc3Npb24ub24oImNoYW5nZVRhYlNpemUiLCB0aGlzLiRvbkNoYW5nZVRhYlNpemUpOwogICAgCiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlV3JhcExpbWl0ID0gdGhpcy5vbkNoYW5nZVdyYXBMaW1pdC5iaW5kKHRoaXMpOwogICAgICAgICAgICBzZXNzaW9uLm9uKCJjaGFuZ2VXcmFwTGltaXQiLCB0aGlzLiRvbkNoYW5nZVdyYXBMaW1pdCk7CiAgICAKICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VXcmFwTW9kZSA9IHRoaXMub25DaGFuZ2VXcmFwTW9kZS5iaW5kKHRoaXMpOwogICAgICAgICAgICBzZXNzaW9uLm9uKCJjaGFuZ2VXcmFwTW9kZSIsIHRoaXMuJG9uQ2hhbmdlV3JhcE1vZGUpOwogICAgCiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlRm9sZCA9IHRoaXMub25DaGFuZ2VGb2xkLmJpbmQodGhpcyk7CiAgICAgICAgICAgIHNlc3Npb24ub24oImNoYW5nZUZvbGQiLCB0aGlzLiRvbkNoYW5nZUZvbGQpOwogICAgCiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIgPSB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIuYmluZCh0aGlzKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2VGcm9udE1hcmtlciIsIHRoaXMuJG9uQ2hhbmdlRnJvbnRNYXJrZXIpOwogICAgCiAgICAgICAgICAgIHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlciA9IHRoaXMub25DaGFuZ2VCYWNrTWFya2VyLmJpbmQodGhpcyk7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlQmFja01hcmtlciIsIHRoaXMuJG9uQ2hhbmdlQmFja01hcmtlcik7CiAgICAKICAgICAgICAgICAgdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50ID0gdGhpcy5vbkNoYW5nZUJyZWFrcG9pbnQuYmluZCh0aGlzKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2VCcmVha3BvaW50IiwgdGhpcy4kb25DaGFuZ2VCcmVha3BvaW50KTsKICAgIAogICAgICAgICAgICB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24gPSB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbi5iaW5kKHRoaXMpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oImNoYW5nZUFubm90YXRpb24iLCB0aGlzLiRvbkNoYW5nZUFubm90YXRpb24pOwogICAgCiAgICAgICAgICAgIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlID0gdGhpcy5vbkN1cnNvckNoYW5nZS5iaW5kKHRoaXMpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ub24oImNoYW5nZU92ZXJ3cml0ZSIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKICAgIAogICAgICAgICAgICB0aGlzLiRvblNjcm9sbFRvcENoYW5nZSA9IHRoaXMub25TY3JvbGxUb3BDaGFuZ2UuYmluZCh0aGlzKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2VTY3JvbGxUb3AiLCB0aGlzLiRvblNjcm9sbFRvcENoYW5nZSk7CiAgICAKICAgICAgICAgICAgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlID0gdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UuYmluZCh0aGlzKTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm9uKCJjaGFuZ2VTY3JvbGxMZWZ0IiwgdGhpcy4kb25TY3JvbGxMZWZ0Q2hhbmdlKTsKICAgIAogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlc3Npb24uZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm9uKCJjaGFuZ2VDdXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7CiAgICAKICAgICAgICAgICAgdGhpcy4kb25TZWxlY3Rpb25DaGFuZ2UgPSB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSk7CiAgICAKICAgICAgICAgICAgdGhpcy5vbkNoYW5nZU1vZGUoKTsKICAgIAogICAgICAgICAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlKCk7CiAgICAKICAgICAgICAgICAgdGhpcy5vblNjcm9sbFRvcENoYW5nZSgpOwogICAgICAgICAgICB0aGlzLm9uU2Nyb2xsTGVmdENoYW5nZSgpOwogICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7CiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VGcm9udE1hcmtlcigpOwogICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQmFja01hcmtlcigpOwogICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQnJlYWtwb2ludCgpOwogICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbigpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSAmJiB0aGlzLnJlbmRlcmVyLmFkanVzdFdyYXBMaW1pdCgpOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZ1bGwoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IG51bGw7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlU2Vzc2lvbiIsIHsKICAgICAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbiwKICAgICAgICAgICAgb2xkU2Vzc2lvbjogb2xkU2Vzc2lvbgogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHRoaXMuY3VyT3AgPSBudWxsOwogICAgICAgIAogICAgICAgIG9sZFNlc3Npb24gJiYgb2xkU2Vzc2lvbi5fc2lnbmFsKCJjaGFuZ2VFZGl0b3IiLCB7b2xkRWRpdG9yOiB0aGlzfSk7CiAgICAgICAgc2Vzc2lvbiAmJiBzZXNzaW9uLl9zaWduYWwoImNoYW5nZUVkaXRvciIsIHtlZGl0b3I6IHRoaXN9KTsKICAgICAgICAKICAgICAgICBpZiAoc2Vzc2lvbiAmJiBzZXNzaW9uLmJnVG9rZW5pemVyKQogICAgICAgICAgICBzZXNzaW9uLmJnVG9rZW5pemVyLnNjaGVkdWxlU3RhcnQoKTsKICAgIH07CiAgICB0aGlzLmdldFNlc3Npb24gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uOwogICAgfTsKICAgIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih2YWwsIGN1cnNvclBvcykgewogICAgICAgIHRoaXMuc2Vzc2lvbi5kb2Muc2V0VmFsdWUodmFsKTsKCiAgICAgICAgaWYgKCFjdXJzb3JQb3MpCiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsKCk7CiAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9zID09IDEpCiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVGaWxlRW5kKCk7CiAgICAgICAgZWxzZSBpZiAoY3Vyc29yUG9zID09IC0xKQogICAgICAgICAgICB0aGlzLm5hdmlnYXRlRmlsZVN0YXJ0KCk7CgogICAgICAgIHJldHVybiB2YWw7CiAgICB9OwogICAgdGhpcy5nZXRWYWx1ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uZ2V0VmFsdWUoKTsKICAgIH07CiAgICB0aGlzLmdldFNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbjsKICAgIH07CiAgICB0aGlzLnJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlKSB7CiAgICAgICAgdGhpcy5yZW5kZXJlci5vblJlc2l6ZShmb3JjZSk7CiAgICB9OwogICAgdGhpcy5zZXRUaGVtZSA9IGZ1bmN0aW9uKHRoZW1lLCBjYikgewogICAgICAgIHRoaXMucmVuZGVyZXIuc2V0VGhlbWUodGhlbWUsIGNiKTsKICAgIH07CiAgICB0aGlzLmdldFRoZW1lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0VGhlbWUoKTsKICAgIH07CiAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHN0eWxlKTsKICAgIH07CiAgICB0aGlzLnVuc2V0U3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgewogICAgICAgIHRoaXMucmVuZGVyZXIudW5zZXRTdHlsZShzdHlsZSk7CiAgICB9OwogICAgdGhpcy5nZXRGb250U2l6ZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImZvbnRTaXplIikgfHwKICAgICAgICAgICBkb20uY29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcikuZm9udFNpemU7CiAgICB9OwogICAgdGhpcy5zZXRGb250U2l6ZSA9IGZ1bmN0aW9uKHNpemUpIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigiZm9udFNpemUiLCBzaXplKTsKICAgIH07CgogICAgdGhpcy4kaGlnaGxpZ2h0QnJhY2tldHMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0KSB7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0KTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRicmFja2V0SGlnaGxpZ2h0ID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRQZW5kaW5nKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHRoaXMuJGhpZ2hsaWdodFBlbmRpbmcgPSB0cnVlOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlbGYuJGhpZ2hsaWdodFBlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIHNlc3Npb24gPSBzZWxmLnNlc3Npb247CiAgICAgICAgICAgIGlmICghc2Vzc2lvbiB8fCAhc2Vzc2lvbi5iZ1Rva2VuaXplcikgcmV0dXJuOwogICAgICAgICAgICB2YXIgcG9zID0gc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHNlbGYuZ2V0Q3Vyc29yUG9zaXRpb24oKSk7CiAgICAgICAgICAgIGlmIChwb3MpIHsKICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBwb3MuY29sdW1uICsgMSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Vzc2lvbi4kbW9kZS5nZXRNYXRjaGluZykgewogICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi4kbW9kZS5nZXRNYXRjaGluZyhzZWxmLnNlc3Npb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgICAgIHNlc3Npb24uJGJyYWNrZXRIaWdobGlnaHQgPSBzZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9icmFja2V0IiwgInRleHQiKTsKICAgICAgICB9LCA1MCk7CiAgICB9OwogICAgdGhpcy4kaGlnaGxpZ2h0VGFncyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRUYWdQZW5kaW5nKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHRoaXMuJGhpZ2hsaWdodFRhZ1BlbmRpbmcgPSB0cnVlOwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlbGYuJGhpZ2hsaWdodFRhZ1BlbmRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gc2VsZi5zZXNzaW9uOwogICAgICAgICAgICBpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24uYmdUb2tlbml6ZXIpIHJldHVybjsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3MgPSBzZWxmLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlbGYuc2Vzc2lvbiwgcG9zLnJvdywgcG9zLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhL1xiKD86dGFnLW9wZW58dGFnLW5hbWUpLy50ZXN0KHRva2VuLnR5cGUpKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNzaW9uLiR0YWdIaWdobGlnaHQpOwogICAgICAgICAgICAgICAgc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0ID0gbnVsbDsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUuaW5kZXhPZigidGFnLW9wZW4iKSAhPSAtMSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgdmFyIGRlcHRoID0gMDsKICAgICAgICAgICAgdmFyIHByZXZUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PSAnPCcpewogICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgIHByZXZUb2tlbiA9IHRva2VuOwogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUgPT09IHRhZyAmJiB0b2tlbi50eXBlLmluZGV4T2YoJ3RhZy1uYW1lJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8Jyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aC0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgZGVwdGggPj0gMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBwcmV2VG9rZW47CiAgICAgICAgICAgICAgICAgICAgcHJldlRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlID09PSB0YWcgJiYgdG9rZW4udHlwZS5pbmRleE9mKCd0YWctbmFtZScpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoKys7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPC8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aC0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSB3aGlsZSAocHJldlRva2VuICYmIGRlcHRoIDw9IDApOwogICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCF0b2tlbikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0KTsKICAgICAgICAgICAgICAgIHNlc3Npb24uJHRhZ0hpZ2hsaWdodCA9IG51bGw7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIGNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uocm93LCBjb2x1bW4sIHJvdywgY29sdW1uK3Rva2VuLnZhbHVlLmxlbmd0aCk7CiAgICAgICAgICAgIHZhciBzYm0gPSBzZXNzaW9uLiRiYWNrTWFya2Vyc1tzZXNzaW9uLiR0YWdIaWdobGlnaHRdOwogICAgICAgICAgICBpZiAoc2Vzc2lvbi4kdGFnSGlnaGxpZ2h0ICYmIHNibSAhPSB1bmRlZmluZWQgJiYgcmFuZ2UuY29tcGFyZVJhbmdlKHNibS5yYW5nZSkgIT09IDApIHsKICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHNlc3Npb24uJHRhZ0hpZ2hsaWdodCk7CiAgICAgICAgICAgICAgICBzZXNzaW9uLiR0YWdIaWdobGlnaHQgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIXNlc3Npb24uJHRhZ0hpZ2hsaWdodCkKICAgICAgICAgICAgICAgIHNlc3Npb24uJHRhZ0hpZ2hsaWdodCA9IHNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNlX2JyYWNrZXQiLCAidGV4dCIpOwogICAgICAgIH0sIDUwKTsKICAgIH07CiAgICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIV9zZWxmLmlzRm9jdXNlZCgpKQogICAgICAgICAgICAgICAgX3NlbGYudGV4dElucHV0LmZvY3VzKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy50ZXh0SW5wdXQuZm9jdXMoKTsKICAgIH07CiAgICB0aGlzLmlzRm9jdXNlZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQoKTsKICAgIH07CiAgICB0aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnRleHRJbnB1dC5ibHVyKCk7CiAgICB9OwogICAgdGhpcy5vbkZvY3VzID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmICh0aGlzLiRpc0ZvY3VzZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLiRpc0ZvY3VzZWQgPSB0cnVlOwogICAgICAgIHRoaXMucmVuZGVyZXIuc2hvd0N1cnNvcigpOwogICAgICAgIHRoaXMucmVuZGVyZXIudmlzdWFsaXplRm9jdXMoKTsKICAgICAgICB0aGlzLl9lbWl0KCJmb2N1cyIsIGUpOwogICAgfTsKICAgIHRoaXMub25CbHVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghdGhpcy4kaXNGb2N1c2VkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy4kaXNGb2N1c2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7CiAgICAgICAgdGhpcy5yZW5kZXJlci52aXN1YWxpemVCbHVyKCk7CiAgICAgICAgdGhpcy5fZW1pdCgiYmx1ciIsIGUpOwogICAgfTsKCiAgICB0aGlzLiRjdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwogICAgfTsKICAgIHRoaXMub25Eb2N1bWVudENoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgdmFyIHdyYXAgPSB0aGlzLnNlc3Npb24uJHVzZVdyYXBNb2RlOwogICAgICAgIHZhciBsYXN0Um93ID0gKGRlbHRhLnN0YXJ0LnJvdyA9PSBkZWx0YS5lbmQucm93ID8gZGVsdGEuZW5kLnJvdyA6IEluZmluaXR5KTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKGRlbHRhLnN0YXJ0LnJvdywgbGFzdFJvdywgd3JhcCk7CgogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIHRoaXMuJGN1cnNvckNoYW5nZSgpOwogICAgICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKICAgIH07CgogICAgdGhpcy5vblRva2VuaXplclVwZGF0ZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgcm93cyA9IGUuZGF0YTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCk7CiAgICB9OwoKCiAgICB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxUb1kodGhpcy5zZXNzaW9uLmdldFNjcm9sbFRvcCgpKTsKICAgIH07CgogICAgdGhpcy5vblNjcm9sbExlZnRDaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvWCh0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsTGVmdCgpKTsKICAgIH07CiAgICB0aGlzLm9uQ3Vyc29yQ2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kY3Vyc29yQ2hhbmdlKCk7CgogICAgICAgIHRoaXMuJGhpZ2hsaWdodEJyYWNrZXRzKCk7CiAgICAgICAgdGhpcy4kaGlnaGxpZ2h0VGFncygpOwogICAgICAgIHRoaXMuJHVwZGF0ZUhpZ2hsaWdodEFjdGl2ZUxpbmUoKTsKICAgICAgICB0aGlzLl9zaWduYWwoImNoYW5nZVNlbGVjdGlvbiIpOwogICAgfTsKCiAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLmdldFNlc3Npb24oKTsKCiAgICAgICAgdmFyIGhpZ2hsaWdodDsKICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0QWN0aXZlTGluZSkgewogICAgICAgICAgICBpZiAodGhpcy4kc2VsZWN0aW9uU3R5bGUgIT0gImxpbmUiIHx8ICF0aGlzLnNlbGVjdGlvbi5pc011bHRpTGluZSgpKQogICAgICAgICAgICAgICAgaGlnaGxpZ2h0ID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJlci50aGVtZSAmJiB0aGlzLnJlbmRlcmVyLnRoZW1lLiRzZWxlY3Rpb25Db2xvckNvbmZsaWN0ICYmICF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyZXIuJG1heExpbmVzICYmIHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKSA9PT0gMSAmJiAhKHRoaXMucmVuZGVyZXIuJG1pbkxpbmVzID4gMSkpCiAgICAgICAgICAgICAgICBoaWdobGlnaHQgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyICYmICFoaWdobGlnaHQpIHsKICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5pZCk7CiAgICAgICAgICAgIHNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgPSBudWxsOwogICAgICAgIH0gZWxzZSBpZiAoIXNlc3Npb24uJGhpZ2hsaWdodExpbmVNYXJrZXIgJiYgaGlnaGxpZ2h0KSB7CiAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBSYW5nZShoaWdobGlnaHQucm93LCBoaWdobGlnaHQuY29sdW1uLCBoaWdobGlnaHQucm93LCBJbmZpbml0eSk7CiAgICAgICAgICAgIHJhbmdlLmlkID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2VfYWN0aXZlLWxpbmUiLCAic2NyZWVuTGluZSIpOwogICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyID0gcmFuZ2U7CiAgICAgICAgfSBlbHNlIGlmIChoaWdobGlnaHQpIHsKICAgICAgICAgICAgc2Vzc2lvbi4kaGlnaGxpZ2h0TGluZU1hcmtlci5zdGFydC5yb3cgPSBoaWdobGlnaHQucm93OwogICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyLmVuZC5yb3cgPSBoaWdobGlnaHQucm93OwogICAgICAgICAgICBzZXNzaW9uLiRoaWdobGlnaHRMaW5lTWFya2VyLnN0YXJ0LmNvbHVtbiA9IGhpZ2hsaWdodC5jb2x1bW47CiAgICAgICAgICAgIHNlc3Npb24uX3NpZ25hbCgiY2hhbmdlQmFja01hcmtlciIpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKCiAgICAgICAgaWYgKHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcikgewogICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIpOwogICAgICAgIH0KICAgICAgICBzZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXIgPSBudWxsOwoKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwogICAgICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLmdldFNlbGVjdGlvblN0eWxlKCk7CiAgICAgICAgICAgIHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlciA9IHNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNlX3NlbGVjdGlvbiIsIHN0eWxlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgJiYgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCk7CiAgICAgICAgdGhpcy5zZXNzaW9uLmhpZ2hsaWdodChyZSk7CgogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlU2VsZWN0aW9uIik7CiAgICB9OwoKICAgIHRoaXMuJGdldFNlbGVjdGlvbkhpZ2hMaWdodFJlZ2V4cCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwoKICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpIHx8IHNlbGVjdGlvbi5pc011bHRpTGluZSgpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNlbGVjdGlvbi5zdGFydC5jb2x1bW47CiAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlbGVjdGlvbi5lbmQuY29sdW1uOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHNlbGVjdGlvbi5zdGFydC5yb3cpOwogICAgICAgIAogICAgICAgIHZhciBuZWVkbGUgPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbiwgZW5kQ29sdW1uKTsKICAgICAgICBpZiAobmVlZGxlLmxlbmd0aCA+IDUwMDAgfHwgIS9bXHdcZF0vLnRlc3QobmVlZGxlKSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgcmUgPSB0aGlzLiRzZWFyY2guJGFzc2VtYmxlUmVnRXhwKHsKICAgICAgICAgICAgd2hvbGVXb3JkOiB0cnVlLAogICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiB0cnVlLAogICAgICAgICAgICBuZWVkbGU6IG5lZWRsZQogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHZhciB3b3JkV2l0aEJvdW5kYXJ5ID0gbGluZS5zdWJzdHJpbmcoc3RhcnRDb2x1bW4gLSAxLCBlbmRDb2x1bW4gKyAxKTsKICAgICAgICBpZiAoIXJlLnRlc3Qod29yZFdpdGhCb3VuZGFyeSkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAKICAgICAgICByZXR1cm4gcmU7CiAgICB9OwoKCiAgICB0aGlzLm9uQ2hhbmdlRnJvbnRNYXJrZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUZyb250TWFya2VycygpOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlQmFja01hcmtlciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKICAgIH07CgoKICAgIHRoaXMub25DaGFuZ2VCcmVha3BvaW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCcmVha3BvaW50cygpOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlQW5ub3RhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QW5ub3RhdGlvbnModGhpcy5zZXNzaW9uLmdldEFubm90YXRpb25zKCkpOwogICAgfTsKCgogICAgdGhpcy5vbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVUZXh0KCk7CiAgICAgICAgdGhpcy5fZW1pdCgiY2hhbmdlTW9kZSIsIGUpOwogICAgfTsKCgogICAgdGhpcy5vbkNoYW5nZVdyYXBMaW1pdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlRnVsbCgpOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlV3JhcE1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHRydWUpOwogICAgfTsKCgogICAgdGhpcy5vbkNoYW5nZUZvbGQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7CiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCk7CiAgICB9OwogICAgdGhpcy5nZXRTZWxlY3RlZFRleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29weVRleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXh0KCk7CiAgICAgICAgdmFyIG5sID0gdGhpcy5zZXNzaW9uLmRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCk7CiAgICAgICAgdmFyIGNvcHlMaW5lPSBmYWxzZTsKICAgICAgICBpZiAoIXRleHQgJiYgdGhpcy4kY29weVdpdGhFbXB0eVNlbGVjdGlvbikgewogICAgICAgICAgICBjb3B5TGluZSA9IHRydWU7CiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnNlbGVjdGlvbi5nZXRBbGxSYW5nZXMoKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHJhbmdlc1tpXTsKICAgICAgICAgICAgICAgIGlmIChpICYmIHJhbmdlc1tpIC0gMV0uc3RhcnQucm93ID09IHJhbmdlLnN0YXJ0LnJvdykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIHRleHQgKz0gdGhpcy5zZXNzaW9uLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KSArIG5sOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBlID0ge3RleHQ6IHRleHR9OwogICAgICAgIHRoaXMuX3NpZ25hbCgiY29weSIsIGUpOwogICAgICAgIGNsaXBib2FyZC5saW5lTW9kZSA9IGNvcHlMaW5lID8gZS50ZXh0IDogIiI7CiAgICAgICAgcmV0dXJuIGUudGV4dDsKICAgIH07CiAgICB0aGlzLm9uQ29weSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY29tbWFuZHMuZXhlYygiY29weSIsIHRoaXMpOwogICAgfTsKICAgIHRoaXMub25DdXQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoImN1dCIsIHRoaXMpOwogICAgfTsKICAgIHRoaXMub25QYXN0ZSA9IGZ1bmN0aW9uKHRleHQsIGV2ZW50KSB7CiAgICAgICAgdmFyIGUgPSB7dGV4dDogdGV4dCwgZXZlbnQ6IGV2ZW50fTsKICAgICAgICB0aGlzLmNvbW1hbmRzLmV4ZWMoInBhc3RlIiwgdGhpcywgZSk7CiAgICB9OwogICAgCiAgICB0aGlzLiRoYW5kbGVQYXN0ZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAodHlwZW9mIGUgPT0gInN0cmluZyIpIAogICAgICAgICAgICBlID0ge3RleHQ6IGV9OwogICAgICAgIHRoaXMuX3NpZ25hbCgicGFzdGUiLCBlKTsKICAgICAgICB2YXIgdGV4dCA9IGUudGV4dDsKCiAgICAgICAgdmFyIGxpbmVNb2RlID0gdGV4dCA9PSBjbGlwYm9hcmQubGluZU1vZGU7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CiAgICAgICAgaWYgKCF0aGlzLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICAgICAgICBpZiAobGluZU1vZGUpCiAgICAgICAgICAgICAgICBzZXNzaW9uLmluc2VydCh7IHJvdzogdGhpcy5zZWxlY3Rpb24ubGVhZC5yb3csIGNvbHVtbjogMCB9LCB0ZXh0KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7CiAgICAgICAgfSBlbHNlIGlmIChsaW5lTW9kZSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzLmZvckVhY2goZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uaW5zZXJ0KHsgcm93OiByYW5nZS5zdGFydC5yb3csIGNvbHVtbjogMCB9LCB0ZXh0KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgICAgICB2YXIgcmFuZ2VzID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2VMaXN0LnJhbmdlczsKICAgIAogICAgICAgICAgICB2YXIgaXNGdWxsTGluZSA9IGxpbmVzLmxlbmd0aCA9PSAyICYmICghbGluZXNbMF0gfHwgIWxpbmVzWzFdKTsKICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCAhPSByYW5nZXMubGVuZ3RoIHx8IGlzRnVsbExpbmUpCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tYW5kcy5leGVjKCJpbnNlcnRzdHJpbmciLCB0aGlzLCB0ZXh0KTsKICAgIAogICAgICAgICAgICBmb3IgKHZhciBpID0gcmFuZ2VzLmxlbmd0aDsgaS0tOykgewogICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOwogICAgCiAgICAgICAgICAgICAgICBzZXNzaW9uLmluc2VydChyYW5nZS5zdGFydCwgbGluZXNbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmV4ZWNDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCwgYXJncykgewogICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmRzLmV4ZWMoY29tbWFuZCwgdGhpcywgYXJncyk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbih0ZXh0LCBwYXN0ZWQpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICB2YXIgbW9kZSA9IHNlc3Npb24uZ2V0TW9kZSgpOwogICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKCk7CgogICAgICAgIGlmICh0aGlzLmdldEJlaGF2aW91cnNFbmFibGVkKCkgJiYgIXBhc3RlZCkgewogICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbW9kZS50cmFuc2Zvcm1BY3Rpb24oc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KSwgJ2luc2VydGlvbicsIHRoaXMsIHNlc3Npb24sIHRleHQpOwogICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7CiAgICAgICAgICAgICAgICBpZiAodGV4dCAhPT0gdHJhbnNmb3JtLnRleHQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubWVyZ2VVbmRvRGVsdGFzID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VOZXh0Q29tbWFuZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRleHQgPSB0cmFuc2Zvcm0udGV4dDsKCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHRleHQgPT0gIlx0IikKICAgICAgICAgICAgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CiAgICAgICAgICAgIGN1cnNvciA9IHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOwogICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKSAmJiB0ZXh0LmluZGV4T2YoIlxuIikgPT0gLTEpIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlLmZyb21Qb2ludHMoY3Vyc29yLCBjdXJzb3IpOwogICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICs9IHRleHQubGVuZ3RoOwogICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXh0ID09ICJcbiIgfHwgdGV4dCA9PSAiXHJcbiIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIGlmIChjdXJzb3IuY29sdW1uID4gbGluZS5zZWFyY2goL1xTfCQvKSkgewogICAgICAgICAgICAgICAgdmFyIGQgPSBsaW5lLnN1YnN0cihjdXJzb3IuY29sdW1uKS5zZWFyY2goL1xTfCQvKTsKICAgICAgICAgICAgICAgIHNlc3Npb24uZG9jLnJlbW92ZUluTGluZShjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwoKICAgICAgICB2YXIgc3RhcnQgPSBjdXJzb3IuY29sdW1uOwogICAgICAgIHZhciBsaW5lU3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKGN1cnNvci5yb3cpOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgIHZhciBzaG91bGRPdXRkZW50ID0gbW9kZS5jaGVja091dGRlbnQobGluZVN0YXRlLCBsaW5lLCB0ZXh0KTsKICAgICAgICBzZXNzaW9uLmluc2VydChjdXJzb3IsIHRleHQpOwoKICAgICAgICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5zZWxlY3Rpb24pIHsKICAgICAgICAgICAgaWYgKHRyYW5zZm9ybS5zZWxlY3Rpb24ubGVuZ3RoID09IDIpIHsgLy8gVHJhbnNmb3JtIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGNvbHVtbgogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UoCiAgICAgICAgICAgICAgICAgICAgbmV3IFJhbmdlKGN1cnNvci5yb3csIHN0YXJ0ICsgdHJhbnNmb3JtLnNlbGVjdGlvblswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLnJvdywgc3RhcnQgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzFdKSk7CiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFRyYW5zZm9ybSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByb3cuCiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3Rpb25SYW5nZSgKICAgICAgICAgICAgICAgICAgICBuZXcgUmFuZ2UoY3Vyc29yLnJvdyArIHRyYW5zZm9ybS5zZWxlY3Rpb25bMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5zZWxlY3Rpb25bMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvci5yb3cgKyB0cmFuc2Zvcm0uc2VsZWN0aW9uWzJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uc2VsZWN0aW9uWzNdKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzZXNzaW9uLmdldERvY3VtZW50KCkuaXNOZXdMaW5lKHRleHQpKSB7CiAgICAgICAgICAgIHZhciBsaW5lSW5kZW50ID0gbW9kZS5nZXROZXh0TGluZUluZGVudChsaW5lU3RhdGUsIGxpbmUuc2xpY2UoMCwgY3Vyc29yLmNvbHVtbiksIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCkpOwoKICAgICAgICAgICAgc2Vzc2lvbi5pbnNlcnQoe3JvdzogY3Vyc29yLnJvdysxLCBjb2x1bW46IDB9LCBsaW5lSW5kZW50KTsKICAgICAgICB9CiAgICAgICAgaWYgKHNob3VsZE91dGRlbnQpCiAgICAgICAgICAgIG1vZGUuYXV0b091dGRlbnQobGluZVN0YXRlLCBzZXNzaW9uLCBjdXJzb3Iucm93KTsKICAgIH07CgogICAgdGhpcy5vblRleHRJbnB1dCA9IGZ1bmN0aW9uKHRleHQsIGNvbXBvc2l0aW9uKSB7CiAgICAgICAgaWYgKCFjb21wb3NpdGlvbikKICAgICAgICAgICAgcmV0dXJuIHRoaXMua2V5QmluZGluZy5vblRleHRJbnB1dCh0ZXh0KTsKICAgICAgICAKICAgICAgICB0aGlzLnN0YXJ0T3BlcmF0aW9uKHtjb21tYW5kOiB7IG5hbWU6ICJpbnNlcnRzdHJpbmciIH19KTsKICAgICAgICB2YXIgYXBwbHlDb21wb3NpdGlvbiA9IHRoaXMuYXBwbHlDb21wb3NpdGlvbi5iaW5kKHRoaXMsIHRleHQsIGNvbXBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ucmFuZ2VDb3VudCkKICAgICAgICAgICAgdGhpcy5mb3JFYWNoU2VsZWN0aW9uKGFwcGx5Q29tcG9zaXRpb24pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYXBwbHlDb21wb3NpdGlvbigpOwogICAgICAgIHRoaXMuZW5kT3BlcmF0aW9uKCk7CiAgICB9OwogICAgCiAgICB0aGlzLmFwcGx5Q29tcG9zaXRpb24gPSBmdW5jdGlvbih0ZXh0LCBjb21wb3NpdGlvbikgewogICAgICAgIGlmIChjb21wb3NpdGlvbi5leHRlbmRMZWZ0IHx8IGNvbXBvc2l0aW9uLmV4dGVuZFJpZ2h0KSB7CiAgICAgICAgICAgIHZhciByID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gLT0gY29tcG9zaXRpb24uZXh0ZW5kTGVmdDsKICAgICAgICAgICAgci5lbmQuY29sdW1uICs9IGNvbXBvc2l0aW9uLmV4dGVuZFJpZ2h0OwogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyKTsKICAgICAgICAgICAgaWYgKCF0ZXh0ICYmICFyLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0ZXh0IHx8ICF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHRleHQsIHRydWUpOwogICAgICAgIGlmIChjb21wb3NpdGlvbi5yZXN0b3JlU3RhcnQgfHwgY29tcG9zaXRpb24ucmVzdG9yZUVuZCkgewogICAgICAgICAgICB2YXIgciA9IHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CiAgICAgICAgICAgIHIuc3RhcnQuY29sdW1uIC09IGNvbXBvc2l0aW9uLnJlc3RvcmVTdGFydDsKICAgICAgICAgICAgci5lbmQuY29sdW1uIC09IGNvbXBvc2l0aW9uLnJlc3RvcmVFbmQ7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHIpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5vbkNvbW1hbmRLZXkgPSBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNvZGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5rZXlCaW5kaW5nLm9uQ29tbWFuZEtleShlLCBoYXNoSWQsIGtleUNvZGUpOwogICAgfTsKICAgIHRoaXMuc2V0T3ZlcndyaXRlID0gZnVuY3Rpb24ob3ZlcndyaXRlKSB7CiAgICAgICAgdGhpcy5zZXNzaW9uLnNldE92ZXJ3cml0ZShvdmVyd3JpdGUpOwogICAgfTsKICAgIHRoaXMuZ2V0T3ZlcndyaXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTsKICAgIH07CiAgICB0aGlzLnRvZ2dsZU92ZXJ3cml0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2Vzc2lvbi50b2dnbGVPdmVyd3JpdGUoKTsKICAgIH07CiAgICB0aGlzLnNldFNjcm9sbFNwZWVkID0gZnVuY3Rpb24oc3BlZWQpIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigic2Nyb2xsU3BlZWQiLCBzcGVlZCk7CiAgICB9OwogICAgdGhpcy5nZXRTY3JvbGxTcGVlZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigic2Nyb2xsU3BlZWQiKTsKICAgIH07CiAgICB0aGlzLnNldERyYWdEZWxheSA9IGZ1bmN0aW9uKGRyYWdEZWxheSkgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJkcmFnRGVsYXkiLCBkcmFnRGVsYXkpOwogICAgfTsKICAgIHRoaXMuZ2V0RHJhZ0RlbGF5ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJkcmFnRGVsYXkiKTsKICAgIH07CiAgICB0aGlzLnNldFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oInNlbGVjdGlvblN0eWxlIiwgdmFsKTsKICAgIH07CiAgICB0aGlzLmdldFNlbGVjdGlvblN0eWxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJzZWxlY3Rpb25TdHlsZSIpOwogICAgfTsKICAgIHRoaXMuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZSA9IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJoaWdobGlnaHRBY3RpdmVMaW5lIiwgc2hvdWxkSGlnaGxpZ2h0KTsKICAgIH07CiAgICB0aGlzLmdldEhpZ2hsaWdodEFjdGl2ZUxpbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImhpZ2hsaWdodEFjdGl2ZUxpbmUiKTsKICAgIH07CiAgICB0aGlzLnNldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIsIHNob3VsZEhpZ2hsaWdodCk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiaGlnaGxpZ2h0R3V0dGVyTGluZSIpOwogICAgfTsKICAgIHRoaXMuc2V0SGlnaGxpZ2h0U2VsZWN0ZWRXb3JkID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oImhpZ2hsaWdodFNlbGVjdGVkV29yZCIsIHNob3VsZEhpZ2hsaWdodCk7CiAgICB9OwogICAgdGhpcy5nZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOwogICAgfTsKCiAgICB0aGlzLnNldEFuaW1hdGVkU2Nyb2xsID0gZnVuY3Rpb24oc2hvdWxkQW5pbWF0ZSl7CiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRlZFNjcm9sbChzaG91bGRBbmltYXRlKTsKICAgIH07CgogICAgdGhpcy5nZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0QW5pbWF0ZWRTY3JvbGwoKTsKICAgIH07CiAgICB0aGlzLnNldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oc2hvd0ludmlzaWJsZXMpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFNob3dJbnZpc2libGVzKHNob3dJbnZpc2libGVzKTsKICAgIH07CiAgICB0aGlzLmdldFNob3dJbnZpc2libGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0U2hvd0ludmlzaWJsZXMoKTsKICAgIH07CgogICAgdGhpcy5zZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oZGlzcGxheSkgewogICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RGlzcGxheUluZGVudEd1aWRlcyhkaXNwbGF5KTsKICAgIH07CgogICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0RGlzcGxheUluZGVudEd1aWRlcygpOwogICAgfTsKICAgIHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7CiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTaG93UHJpbnRNYXJnaW4oc2hvd1ByaW50TWFyZ2luKTsKICAgIH07CiAgICB0aGlzLmdldFNob3dQcmludE1hcmdpbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFNob3dQcmludE1hcmdpbigpOwogICAgfTsKICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByaW50TWFyZ2luQ29sdW1uKHNob3dQcmludE1hcmdpbik7CiAgICB9OwogICAgdGhpcy5nZXRQcmludE1hcmdpbkNvbHVtbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldFByaW50TWFyZ2luQ29sdW1uKCk7CiAgICB9OwogICAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oInJlYWRPbmx5IiwgcmVhZE9ubHkpOwogICAgfTsKICAgIHRoaXMuZ2V0UmVhZE9ubHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInJlYWRPbmx5Iik7CiAgICB9OwogICAgdGhpcy5zZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uIChlbmFibGVkKSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oImJlaGF2aW91cnNFbmFibGVkIiwgZW5hYmxlZCk7CiAgICB9OwogICAgdGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImJlaGF2aW91cnNFbmFibGVkIik7CiAgICB9OwogICAgdGhpcy5zZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQgPSBmdW5jdGlvbiAoZW5hYmxlZCkgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJ3cmFwQmVoYXZpb3Vyc0VuYWJsZWQiLCBlbmFibGVkKTsKICAgIH07CiAgICB0aGlzLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oIndyYXBCZWhhdmlvdXJzRW5hYmxlZCIpOwogICAgfTsKICAgIHRoaXMuc2V0U2hvd0ZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJzaG93Rm9sZFdpZGdldHMiLCBzaG93KTsKCiAgICB9OwogICAgdGhpcy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dGb2xkV2lkZ2V0cyIpOwogICAgfTsKCiAgICB0aGlzLnNldEZhZGVGb2xkV2lkZ2V0cyA9IGZ1bmN0aW9uKGZhZGUpIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIiwgZmFkZSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdldHMiKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKGRpcikgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpewogICAgICAgICAgICBpZiAoZGlyID09ICJsZWZ0IikKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0UmlnaHQoKTsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICBpZiAodGhpcy5nZXRCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgICAgICB2YXIgc3RhdGUgPSBzZXNzaW9uLmdldFN0YXRlKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciBuZXdfcmFuZ2UgPSBzZXNzaW9uLmdldE1vZGUoKS50cmFuc2Zvcm1BY3Rpb24oc3RhdGUsICdkZWxldGlvbicsIHRoaXMsIHNlc3Npb24sIHJhbmdlKTsKCiAgICAgICAgICAgIGlmIChyYW5nZS5lbmQuY29sdW1uID09PSAwKSB7CiAgICAgICAgICAgICAgICB2YXIgdGV4dCA9IHNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICAgICAgICAgIGlmICh0ZXh0W3RleHQubGVuZ3RoIC0gMV0gPT0gIlxuIikgewogICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJhbmdlLmVuZC5yb3cpOwogICAgICAgICAgICAgICAgICAgIGlmICgvXlxzKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV3X3JhbmdlKQogICAgICAgICAgICAgICAgcmFuZ2UgPSBuZXdfcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkUmlnaHQoKTsKCiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZVdvcmRMZWZ0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQoKTsKCiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZVRvTGluZVN0YXJ0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZVN0YXJ0KCk7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCgpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVUb0xpbmVFbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lRW5kKCk7CgogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICBpZiAocmFuZ2Uuc3RhcnQuY29sdW1uID09IHJhbmdlLmVuZC5jb2x1bW4gJiYgcmFuZ2Uuc3RhcnQucm93ID09IHJhbmdlLmVuZC5yb3cpIHsKICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IDA7CiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3crKzsKICAgICAgICB9CgogICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOwogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLnNwbGl0TGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICB0aGlzLmluc2VydCgiXG4iKTsKICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKGN1cnNvcik7CiAgICB9OwogICAgdGhpcy50cmFuc3Bvc2VMZXR0ZXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIGN1cnNvciA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICB2YXIgY29sdW1uID0gY3Vyc29yLmNvbHVtbjsKICAgICAgICBpZiAoY29sdW1uID09PSAwKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgdmFyIHN3YXAsIHJhbmdlOwogICAgICAgIGlmIChjb2x1bW4gPCBsaW5lLmxlbmd0aCkgewogICAgICAgICAgICBzd2FwID0gbGluZS5jaGFyQXQoY29sdW1uKSArIGxpbmUuY2hhckF0KGNvbHVtbi0xKTsKICAgICAgICAgICAgcmFuZ2UgPSBuZXcgUmFuZ2UoY3Vyc29yLnJvdywgY29sdW1uLTEsIGN1cnNvci5yb3csIGNvbHVtbisxKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHN3YXAgPSBsaW5lLmNoYXJBdChjb2x1bW4tMSkgKyBsaW5lLmNoYXJBdChjb2x1bW4tMik7CiAgICAgICAgICAgIHJhbmdlID0gbmV3IFJhbmdlKGN1cnNvci5yb3csIGNvbHVtbi0yLCBjdXJzb3Iucm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgc3dhcCk7CiAgICAgICAgdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihyYW5nZS5lbmQpOwogICAgfTsKICAgIHRoaXMudG9Mb3dlckNhc2UgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB0ZXh0LnRvTG93ZXJDYXNlKCkpOwogICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdpbmFsUmFuZ2UpOwogICAgfTsKICAgIHRoaXMudG9VcHBlckNhc2UgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb3JpZ2luYWxSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTsKICAgICAgICB9CgogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICB2YXIgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB0ZXh0LnRvVXBwZXJDYXNlKCkpOwogICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKG9yaWdpbmFsUmFuZ2UpOwogICAgfTsKICAgIHRoaXMuaW5kZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpOwoKICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93IDwgcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOwogICAgICAgICAgICBzZXNzaW9uLmluZGVudFJvd3Mocm93cy5maXJzdCwgcm93cy5sYXN0LCAiXHQiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAocmFuZ2Uuc3RhcnQuY29sdW1uIDwgcmFuZ2UuZW5kLmNvbHVtbikgewogICAgICAgICAgICB2YXIgdGV4dCA9IHNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICAgICAgaWYgKCEvXlxzKyQvLnRlc3QodGV4dCkpIHsKICAgICAgICAgICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmluZGVudFJvd3Mocm93cy5maXJzdCwgcm93cy5sYXN0LCAiXHQiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgIHZhciBwb3NpdGlvbiA9IHJhbmdlLnN0YXJ0OwogICAgICAgIHZhciBzaXplID0gc2Vzc2lvbi5nZXRUYWJTaXplKCk7CiAgICAgICAgdmFyIGNvbHVtbiA9IHNlc3Npb24uZG9jdW1lbnRUb1NjcmVlbkNvbHVtbihwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CgogICAgICAgIGlmICh0aGlzLnNlc3Npb24uZ2V0VXNlU29mdFRhYnMoKSkgewogICAgICAgICAgICB2YXIgY291bnQgPSAoc2l6ZSAtIGNvbHVtbiAlIHNpemUpOwogICAgICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCBjb3VudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGNvdW50ID0gY29sdW1uICUgc2l6ZTsKICAgICAgICAgICAgd2hpbGUgKGxpbmVbcmFuZ2Uuc3RhcnQuY29sdW1uIC0gMV0gPT0gIiAiICYmIGNvdW50KSB7CiAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4tLTsKICAgICAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpOwogICAgICAgICAgICBpbmRlbnRTdHJpbmcgPSAiXHQiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnQoaW5kZW50U3RyaW5nKTsKICAgIH07CiAgICB0aGlzLmJsb2NrSW5kZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKICAgICAgICB0aGlzLnNlc3Npb24uaW5kZW50Um93cyhyb3dzLmZpcnN0LCByb3dzLmxhc3QsICJcdCIpOwogICAgfTsKICAgIHRoaXMuYmxvY2tPdXRkZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2Vzc2lvbi5nZXRTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLnNlc3Npb24ub3V0ZGVudFJvd3Moc2VsZWN0aW9uLmdldFJhbmdlKCkpOwogICAgfTsKICAgIHRoaXMuc29ydExpbmVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MoKTsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKCiAgICAgICAgdmFyIGxpbmVzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IHJvd3MuZmlyc3Q7IGkgPD0gcm93cy5sYXN0OyBpKyspCiAgICAgICAgICAgIGxpbmVzLnB1c2goc2Vzc2lvbi5nZXRMaW5lKGkpKTsKCiAgICAgICAgbGluZXMuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgIGlmIChhLnRvTG93ZXJDYXNlKCkgPCBiLnRvTG93ZXJDYXNlKCkpIHJldHVybiAtMTsKICAgICAgICAgICAgaWYgKGEudG9Mb3dlckNhc2UoKSA+IGIudG9Mb3dlckNhc2UoKSkgcmV0dXJuIDE7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0pOwoKICAgICAgICB2YXIgZGVsZXRlUmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CiAgICAgICAgZm9yICh2YXIgaSA9IHJvd3MuZmlyc3Q7IGkgPD0gcm93cy5sYXN0OyBpKyspIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoaSk7CiAgICAgICAgICAgIGRlbGV0ZVJhbmdlLnN0YXJ0LnJvdyA9IGk7CiAgICAgICAgICAgIGRlbGV0ZVJhbmdlLmVuZC5yb3cgPSBpOwogICAgICAgICAgICBkZWxldGVSYW5nZS5lbmQuY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgICAgIHNlc3Npb24ucmVwbGFjZShkZWxldGVSYW5nZSwgbGluZXNbaS1yb3dzLmZpcnN0XSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5zZXNzaW9uLmdldFN0YXRlKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3cpOwogICAgICAgIHZhciByb3dzID0gdGhpcy4kZ2V0U2VsZWN0ZWRSb3dzKCk7CiAgICAgICAgdGhpcy5zZXNzaW9uLmdldE1vZGUoKS50b2dnbGVDb21tZW50TGluZXMoc3RhdGUsIHRoaXMuc2Vzc2lvbiwgcm93cy5maXJzdCwgcm93cy5sYXN0KTsKICAgIH07CgogICAgdGhpcy50b2dnbGVCbG9ja0NvbW1lbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KTsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCk7CiAgICAgICAgdGhpcy5zZXNzaW9uLmdldE1vZGUoKS50b2dnbGVCbG9ja0NvbW1lbnQoc3RhdGUsIHRoaXMuc2Vzc2lvbiwgcmFuZ2UsIGN1cnNvcik7CiAgICB9OwogICAgdGhpcy5nZXROdW1iZXJBdCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdmFyIF9udW1iZXJSeCA9IC9bXC1dP1swLTldKyg/OlwuWzAtOV0rKT8vZzsKICAgICAgICBfbnVtYmVyUngubGFzdEluZGV4ID0gMDsKCiAgICAgICAgdmFyIHMgPSB0aGlzLnNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHdoaWxlIChfbnVtYmVyUngubGFzdEluZGV4IDwgY29sdW1uKSB7CiAgICAgICAgICAgIHZhciBtID0gX251bWJlclJ4LmV4ZWMocyk7CiAgICAgICAgICAgIGlmKG0uaW5kZXggPD0gY29sdW1uICYmIG0uaW5kZXgrbVswXS5sZW5ndGggPj0gY29sdW1uKXsKICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1bMF0sCiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG0uaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgZW5kOiBtLmluZGV4K21bMF0ubGVuZ3RoCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICB0aGlzLm1vZGlmeU51bWJlciA9IGZ1bmN0aW9uKGFtb3VudCkgewogICAgICAgIHZhciByb3cgPSB0aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5yb3c7CiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLmNvbHVtbjsKICAgICAgICB2YXIgY2hhclJhbmdlID0gbmV3IFJhbmdlKHJvdywgY29sdW1uLTEsIHJvdywgY29sdW1uKTsKCiAgICAgICAgdmFyIGMgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGNoYXJSYW5nZSk7CiAgICAgICAgaWYgKCFpc05hTihwYXJzZUZsb2F0KGMpKSAmJiBpc0Zpbml0ZShjKSkgewogICAgICAgICAgICB2YXIgbnIgPSB0aGlzLmdldE51bWJlckF0KHJvdywgY29sdW1uKTsKICAgICAgICAgICAgaWYgKG5yKSB7CiAgICAgICAgICAgICAgICB2YXIgZnAgPSBuci52YWx1ZS5pbmRleE9mKCIuIikgPj0gMCA/IG5yLnN0YXJ0ICsgbnIudmFsdWUuaW5kZXhPZigiLiIpICsgMSA6IG5yLmVuZDsKICAgICAgICAgICAgICAgIHZhciBkZWNpbWFscyA9IG5yLnN0YXJ0ICsgbnIudmFsdWUubGVuZ3RoIC0gZnA7CgogICAgICAgICAgICAgICAgdmFyIHQgPSBwYXJzZUZsb2F0KG5yLnZhbHVlKTsKICAgICAgICAgICAgICAgIHQgKj0gTWF0aC5wb3coMTAsIGRlY2ltYWxzKTsKCgogICAgICAgICAgICAgICAgaWYoZnAgIT09IG5yLmVuZCAmJiBjb2x1bW4gPCBmcCl7CiAgICAgICAgICAgICAgICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4gLSAxKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYW1vdW50ICo9IE1hdGgucG93KDEwLCBuci5lbmQgLSBjb2x1bW4pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHQgKz0gYW1vdW50OwogICAgICAgICAgICAgICAgdCAvPSBNYXRoLnBvdygxMCwgZGVjaW1hbHMpOwogICAgICAgICAgICAgICAgdmFyIG5uciA9IHQudG9GaXhlZChkZWNpbWFscyk7CiAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZVJhbmdlID0gbmV3IFJhbmdlKHJvdywgbnIuc3RhcnQsIHJvdywgbnIuZW5kKTsKICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKHJlcGxhY2VSYW5nZSwgbm5yKTsKICAgICAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvKHJvdywgTWF0aC5tYXgobnIuc3RhcnQgKzEsIGNvbHVtbiArIG5uci5sZW5ndGggLSBuci52YWx1ZS5sZW5ndGgpKTsKCiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLnRvZ2dsZVdvcmQoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJHRvZ2dsZVdvcmRQYWlycyA9IFsKICAgICAgICBbImZpcnN0IiwgImxhc3QiXSwKICAgICAgICBbInRydWUiLCAiZmFsc2UiXSwKICAgICAgICBbInllcyIsICJubyJdLAogICAgICAgIFsid2lkdGgiLCAiaGVpZ2h0Il0sCiAgICAgICAgWyJ0b3AiLCAiYm90dG9tIl0sCiAgICAgICAgWyJyaWdodCIsICJsZWZ0Il0sCiAgICAgICAgWyJvbiIsICJvZmYiXSwKICAgICAgICBbIngiLCAieSJdLAogICAgICAgIFsiZ2V0IiwgInNldCJdLAogICAgICAgIFsibWF4IiwgIm1pbiJdLAogICAgICAgIFsiaG9yaXpvbnRhbCIsICJ2ZXJ0aWNhbCJdLAogICAgICAgIFsic2hvdyIsICJoaWRlIl0sCiAgICAgICAgWyJhZGQiLCAicmVtb3ZlIl0sCiAgICAgICAgWyJ1cCIsICJkb3duIl0sCiAgICAgICAgWyJiZWZvcmUiLCAiYWZ0ZXIiXSwKICAgICAgICBbImV2ZW4iLCAib2RkIl0sCiAgICAgICAgWyJpbiIsICJvdXQiXSwKICAgICAgICBbImluc2lkZSIsICJvdXRzaWRlIl0sCiAgICAgICAgWyJuZXh0IiwgInByZXZpb3VzIl0sCiAgICAgICAgWyJpbmNyZWFzZSIsICJkZWNyZWFzZSJdLAogICAgICAgIFsiYXR0YWNoIiwgImRldGFjaCJdLAogICAgICAgIFsiJiYiLCAifHwiXSwKICAgICAgICBbIj09IiwgIiE9Il0KICAgIF07CgogICAgdGhpcy50b2dnbGVXb3JkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciByb3cgPSB0aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKS5yb3c7CiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuc2VsZWN0aW9uLmdldEN1cnNvcigpLmNvbHVtbjsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CiAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXh0KCk7CiAgICAgICAgdmFyIGN1cnJXb3JkU3RhcnQgPSB0aGlzLnNlbGVjdGlvbi5nZXRXb3JkUmFuZ2UoKS5zdGFydC5jb2x1bW47CiAgICAgICAgdmFyIHdvcmRQYXJ0cyA9IGN1cnJlbnRTdGF0ZS5yZXBsYWNlKC8oW2Etel0rfFtBLVpdKykoPz1bQS1aX118JCkvZywgJyQxICcpLnNwbGl0KC9ccy8pOwogICAgICAgIHZhciBkZWx0YSA9IGNvbHVtbiAtIGN1cnJXb3JkU3RhcnQgLSAxOwogICAgICAgIGlmIChkZWx0YSA8IDApIGRlbHRhID0gMDsKICAgICAgICB2YXIgY3VyTGVuZ3RoID0gMCwgaXRMZW5ndGggPSAwOwogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICBpZiAoY3VycmVudFN0YXRlLm1hdGNoKC9bQS1aYS16MC05X10rLykpIHsKICAgICAgICAgICAgd29yZFBhcnRzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHsKICAgICAgICAgICAgICAgIGl0TGVuZ3RoID0gY3VyTGVuZ3RoICsgaXRlbS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPj0gY3VyTGVuZ3RoICYmIGRlbHRhIDw9IGl0TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gaXRlbTsKICAgICAgICAgICAgICAgICAgICB0aGF0LnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgICAgIHRoYXQubW92ZUN1cnNvclRvKHJvdywgY3VyTGVuZ3RoICsgY3VycldvcmRTdGFydCk7CiAgICAgICAgICAgICAgICAgICAgdGhhdC5zZWxlY3Rpb24uc2VsZWN0VG8ocm93LCBpdExlbmd0aCArIGN1cnJXb3JkU3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY3VyTGVuZ3RoID0gaXRMZW5ndGg7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdmFyIHdvcmRQYWlycyA9IHRoaXMuJHRvZ2dsZVdvcmRQYWlyczsKICAgICAgICB2YXIgcmVnOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZFBhaXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gd29yZFBhaXJzW2ldOwogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8PSAxOyBqKyspIHsKICAgICAgICAgICAgICAgIHZhciBuZWdhdGUgPSArIWo7CiAgICAgICAgICAgICAgICB2YXIgZmlyc3RDb25kaXRpb24gPSBjdXJyZW50U3RhdGUubWF0Y2gobmV3IFJlZ0V4cCgnXlxccz9fPygnICsgbGFuZy5lc2NhcGVSZWdFeHAoaXRlbVtqXSkgKyAnKVxccz8kJywgJ2knKSk7CiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb25kaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kQ29uZGl0aW9uID0gY3VycmVudFN0YXRlLm1hdGNoKG5ldyBSZWdFeHAoJyhbX118XnxcXHMpKCcgKyBsYW5nLmVzY2FwZVJlZ0V4cChmaXJzdENvbmRpdGlvblsxXSkgKyAnKSgkfFxccyknLCAnZycpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kQ29uZGl0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IGN1cnJlbnRTdGF0ZS5yZXBsYWNlKG5ldyBSZWdFeHAobGFuZy5lc2NhcGVSZWdFeHAoaXRlbVtqXSksICdpJyksIGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBpdGVtW25lZ2F0ZV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRvVXBwZXJDYXNlKCkgPT0gcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSA9PSByZXN1bHQuY2hhckF0KDApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzLnN1YnN0cigwLCAwKSArIGl0ZW1bbmVnYXRlXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcy5zdWJzdHIoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnQocmVnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gIiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmVtb3ZlTGluZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cygpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVGdWxsTGluZXMocm93cy5maXJzdCwgcm93cy5sYXN0KTsKICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9OwoKICAgIHRoaXMuZHVwbGljYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlbCA9IHRoaXMuc2VsZWN0aW9uOwogICAgICAgIHZhciBkb2MgPSB0aGlzLnNlc3Npb247CiAgICAgICAgdmFyIHJhbmdlID0gc2VsLmdldFJhbmdlKCk7CiAgICAgICAgdmFyIHJldmVyc2UgPSBzZWwuaXNCYWNrd2FyZHMoKTsKICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciByb3cgPSByYW5nZS5zdGFydC5yb3c7CiAgICAgICAgICAgIGRvYy5kdXBsaWNhdGVMaW5lcyhyb3csIHJvdyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHBvaW50ID0gcmV2ZXJzZSA/IHJhbmdlLnN0YXJ0IDogcmFuZ2UuZW5kOwogICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBkb2MuaW5zZXJ0KHBvaW50LCBkb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKSwgZmFsc2UpOwogICAgICAgICAgICByYW5nZS5zdGFydCA9IHBvaW50OwogICAgICAgICAgICByYW5nZS5lbmQgPSBlbmRQb2ludDsKCiAgICAgICAgICAgIHNlbC5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgcmV2ZXJzZSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMubW92ZUxpbmVzRG93biA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVMaW5lcygxLCBmYWxzZSk7CiAgICB9OwogICAgdGhpcy5tb3ZlTGluZXNVcCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVMaW5lcygtMSwgZmFsc2UpOwogICAgfTsKICAgIHRoaXMubW92ZVRleHQgPSBmdW5jdGlvbihyYW5nZSwgdG9Qb3NpdGlvbiwgY29weSkgewogICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24ubW92ZVRleHQocmFuZ2UsIHRvUG9zaXRpb24sIGNvcHkpOwogICAgfTsKICAgIHRoaXMuY29weUxpbmVzVXAgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb3ZlTGluZXMoLTEsIHRydWUpOwogICAgfTsKICAgIHRoaXMuY29weUxpbmVzRG93biA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVMaW5lcygxLCB0cnVlKTsKICAgIH07CiAgICB0aGlzLiRtb3ZlTGluZXMgPSBmdW5jdGlvbihkaXIsIGNvcHkpIHsKICAgICAgICB2YXIgcm93cywgbW92ZWQ7CiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uOwogICAgICAgIGlmICghc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlIHx8IHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CiAgICAgICAgICAgIHJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2UpOwogICAgICAgICAgICBtb3ZlZCA9IHRoaXMuc2Vzc2lvbi4kbW92ZUxpbmVzKHJvd3MuZmlyc3QsIHJvd3MubGFzdCwgY29weSA/IDAgOiBkaXIpOwogICAgICAgICAgICBpZiAoY29weSAmJiBkaXIgPT0gLTEpIG1vdmVkID0gMDsKICAgICAgICAgICAgcmFuZ2UubW92ZUJ5KG1vdmVkLCAwKTsKICAgICAgICAgICAgc2VsZWN0aW9uLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgcmFuZ2VzID0gc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZXM7CiAgICAgICAgICAgIHNlbGVjdGlvbi5yYW5nZUxpc3QuZGV0YWNoKHRoaXMuc2Vzc2lvbik7CiAgICAgICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGlmZiA9IDA7CiAgICAgICAgICAgIHZhciB0b3RhbERpZmYgPSAwOwogICAgICAgICAgICB2YXIgbCA9IHJhbmdlcy5sZW5ndGg7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VJbmRleCA9IGk7CiAgICAgICAgICAgICAgICByYW5nZXNbaV0ubW92ZUJ5KGRpZmYsIDApOwogICAgICAgICAgICAgICAgcm93cyA9IHRoaXMuJGdldFNlbGVjdGVkUm93cyhyYW5nZXNbaV0pOwogICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gcm93cy5maXJzdDsKICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gcm93cy5sYXN0OwogICAgICAgICAgICAgICAgd2hpbGUgKCsraSA8IGwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodG90YWxEaWZmKSByYW5nZXNbaV0ubW92ZUJ5KHRvdGFsRGlmZiwgMCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YlJvd3MgPSB0aGlzLiRnZXRTZWxlY3RlZFJvd3MocmFuZ2VzW2ldKTsKICAgICAgICAgICAgICAgICAgICBpZiAoY29weSAmJiBzdWJSb3dzLmZpcnN0ICE9IGxhc3QpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFjb3B5ICYmIHN1YlJvd3MuZmlyc3QgPiBsYXN0ICsgMSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHN1YlJvd3MubGFzdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgICAgIGRpZmYgPSB0aGlzLnNlc3Npb24uJG1vdmVMaW5lcyhmaXJzdCwgbGFzdCwgY29weSA/IDAgOiBkaXIpOwogICAgICAgICAgICAgICAgaWYgKGNvcHkgJiYgZGlyID09IC0xKSByYW5nZUluZGV4ID0gaSArIDE7CiAgICAgICAgICAgICAgICB3aGlsZSAocmFuZ2VJbmRleCA8PSBpKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW3JhbmdlSW5kZXhdLm1vdmVCeShkaWZmLCAwKTsKICAgICAgICAgICAgICAgICAgICByYW5nZUluZGV4Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIWNvcHkpIGRpZmYgPSAwOwogICAgICAgICAgICAgICAgdG90YWxEaWZmICs9IGRpZmY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHNlbGVjdGlvbi5mcm9tT3JpZW50ZWRSYW5nZShzZWxlY3Rpb24ucmFuZ2VzWzBdKTsKICAgICAgICAgICAgc2VsZWN0aW9uLnJhbmdlTGlzdC5hdHRhY2godGhpcy5zZXNzaW9uKTsKICAgICAgICAgICAgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuJGdldFNlbGVjdGVkUm93cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmFuZ2UgPSAocmFuZ2UgfHwgdGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKS5jb2xsYXBzZVJvd3MoKTsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgZmlyc3Q6IHRoaXMuc2Vzc2lvbi5nZXRSb3dGb2xkU3RhcnQocmFuZ2Uuc3RhcnQucm93KSwKICAgICAgICAgICAgbGFzdDogdGhpcy5zZXNzaW9uLmdldFJvd0ZvbGRFbmQocmFuZ2UuZW5kLnJvdykKICAgICAgICB9OwogICAgfTsKCiAgICB0aGlzLm9uQ29tcG9zaXRpb25TdGFydCA9IGZ1bmN0aW9uKGNvbXBvc2l0aW9uU3RhdGUpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDb21wb3NpdGlvbihjb21wb3NpdGlvblN0YXRlKTsKICAgIH07CgogICAgdGhpcy5vbkNvbXBvc2l0aW9uVXBkYXRlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHRoaXMucmVuZGVyZXIuc2V0Q29tcG9zaXRpb25UZXh0KHRleHQpOwogICAgfTsKCiAgICB0aGlzLm9uQ29tcG9zaXRpb25FbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVDb21wb3NpdGlvbigpOwogICAgfTsKICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXIuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7CiAgICB9OwogICAgdGhpcy5nZXRMYXN0VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmdldExhc3RWaXNpYmxlUm93KCk7CiAgICB9OwogICAgdGhpcy5pc1Jvd1Zpc2libGUgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICByZXR1cm4gKHJvdyA+PSB0aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpICYmIHJvdyA8PSB0aGlzLmdldExhc3RWaXNpYmxlUm93KCkpOwogICAgfTsKICAgIHRoaXMuaXNSb3dGdWxseVZpc2libGUgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICByZXR1cm4gKHJvdyA+PSB0aGlzLnJlbmRlcmVyLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCkgJiYgcm93IDw9IHRoaXMucmVuZGVyZXIuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpKTsKICAgIH07CiAgICB0aGlzLiRnZXRWaXNpYmxlUm93Q291bnQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlci5nZXRTY3JvbGxCb3R0b21Sb3coKSAtIHRoaXMucmVuZGVyZXIuZ2V0U2Nyb2xsVG9wUm93KCkgKyAxOwogICAgfTsKCiAgICB0aGlzLiRtb3ZlQnlQYWdlID0gZnVuY3Rpb24oZGlyLCBzZWxlY3QpIHsKICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyOwogICAgICAgIHZhciBjb25maWcgPSB0aGlzLnJlbmRlcmVyLmxheWVyQ29uZmlnOwogICAgICAgIHZhciByb3dzID0gZGlyICogTWF0aC5mbG9vcihjb25maWcuaGVpZ2h0IC8gY29uZmlnLmxpbmVIZWlnaHQpOwoKICAgICAgICBpZiAoc2VsZWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLiRtb3ZlU2VsZWN0aW9uKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JCeShyb3dzLCAwKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3QgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeShyb3dzLCAwKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICB9CgogICAgICAgIHZhciBzY3JvbGxUb3AgPSByZW5kZXJlci5zY3JvbGxUb3A7CgogICAgICAgIHJlbmRlcmVyLnNjcm9sbEJ5KDAsIHJvd3MgKiBjb25maWcubGluZUhlaWdodCk7CiAgICAgICAgaWYgKHNlbGVjdCAhPSBudWxsKQogICAgICAgICAgICByZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUpOwoKICAgICAgICByZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRvcCk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RQYWdlRG93biA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJG1vdmVCeVBhZ2UoMSwgdHJ1ZSk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RQYWdlVXAgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKC0xLCB0cnVlKTsKICAgIH07CiAgICB0aGlzLmdvdG9QYWdlRG93biA9IGZ1bmN0aW9uKCkgewogICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgxLCBmYWxzZSk7CiAgICB9OwogICAgdGhpcy5nb3RvUGFnZVVwID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSwgZmFsc2UpOwogICAgfTsKICAgIHRoaXMuc2Nyb2xsUGFnZURvd24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtb3ZlQnlQYWdlKDEpOwogICAgfTsKICAgIHRoaXMuc2Nyb2xsUGFnZVVwID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbW92ZUJ5UGFnZSgtMSk7CiAgICB9OwogICAgdGhpcy5zY3JvbGxUb1JvdyA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsVG9Sb3cocm93KTsKICAgIH07CiAgICB0aGlzLnNjcm9sbFRvTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGNlbnRlciwgYW5pbWF0ZSwgY2FsbGJhY2spIHsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFRvTGluZShsaW5lLCBjZW50ZXIsIGFuaW1hdGUsIGNhbGxiYWNrKTsKICAgIH07CiAgICB0aGlzLmNlbnRlclNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICB2YXIgcG9zID0gewogICAgICAgICAgICByb3c6IE1hdGguZmxvb3IocmFuZ2Uuc3RhcnQucm93ICsgKHJhbmdlLmVuZC5yb3cgLSByYW5nZS5zdGFydC5yb3cpIC8gMiksCiAgICAgICAgICAgIGNvbHVtbjogTWF0aC5mbG9vcihyYW5nZS5zdGFydC5jb2x1bW4gKyAocmFuZ2UuZW5kLmNvbHVtbiAtIHJhbmdlLnN0YXJ0LmNvbHVtbikgLyAyKQogICAgICAgIH07CiAgICAgICAgdGhpcy5yZW5kZXJlci5hbGlnbkN1cnNvcihwb3MsIDAuNSk7CiAgICB9OwogICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTsKICAgIH07CiAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uU2NyZWVuID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpKTsKICAgIH07CiAgICB0aGlzLmdldFNlbGVjdGlvblJhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmdldFJhbmdlKCk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RBbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwoKTsKICAgIH07CiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JUbyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKICAgIH07CiAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uID0gZnVuY3Rpb24ocG9zKSB7CiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZUN1cnNvclRvUG9zaXRpb24ocG9zKTsKICAgIH07CiAgICB0aGlzLmp1bXBUb01hdGNoaW5nID0gZnVuY3Rpb24oc2VsZWN0LCBleHBhbmQpIHsKICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMuc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgdmFyIHByZXZUb2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIHZhciB0b2tlbiA9IHByZXZUb2tlbiB8fCBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwoKICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47CiAgICAgICAgdmFyIG1hdGNoVHlwZTsKICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKICAgICAgICB2YXIgZGVwdGggPSB7fTsKICAgICAgICB2YXIgaSA9IGN1cnNvci5jb2x1bW4gLSB0b2tlbi5zdGFydDsKICAgICAgICB2YXIgYnJhY2tldFR5cGU7CiAgICAgICAgdmFyIGJyYWNrZXRzID0gewogICAgICAgICAgICAiKSI6ICIoIiwKICAgICAgICAgICAgIigiOiAiKCIsCiAgICAgICAgICAgICJdIjogIlsiLAogICAgICAgICAgICAiWyI6ICJbIiwKICAgICAgICAgICAgInsiOiAieyIsCiAgICAgICAgICAgICJ9IjogInsiCiAgICAgICAgfTsKICAgICAgICAKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZS5tYXRjaCgvW3t9KClcW1xdXS9nKSkgewogICAgICAgICAgICAgICAgZm9yICg7IGkgPCB0b2tlbi52YWx1ZS5sZW5ndGggJiYgIWZvdW5kOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWJyYWNrZXRzW3Rva2VuLnZhbHVlW2ldXSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGJyYWNrZXRUeXBlID0gYnJhY2tldHNbdG9rZW4udmFsdWVbaV1dICsgJy4nICsgdG9rZW4udHlwZS5yZXBsYWNlKCJycGFyZW4iLCAibHBhcmVuIik7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihkZXB0aFticmFja2V0VHlwZV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoW2JyYWNrZXRUeXBlXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJygnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aFticmFja2V0VHlwZV0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcpJzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ30nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGhbYnJhY2tldFR5cGVdLS07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoW2JyYWNrZXRUeXBlXSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFR5cGUgPSAnYnJhY2tldCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZS5pbmRleE9mKCd0YWctbmFtZScpICE9PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKGlzTmFOKGRlcHRoW3Rva2VuLnZhbHVlXSkpIHsKICAgICAgICAgICAgICAgICAgICBkZXB0aFt0b2tlbi52YWx1ZV0gPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnPCcpIHsKICAgICAgICAgICAgICAgICAgICBkZXB0aFt0b2tlbi52YWx1ZV0rKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJykgewogICAgICAgICAgICAgICAgICAgIGRlcHRoW3Rva2VuLnZhbHVlXS0tOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoZGVwdGhbdG9rZW4udmFsdWVdID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIG1hdGNoVHlwZSA9ICd0YWcnOwogICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgICAgcHJldlRva2VuID0gdG9rZW47CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKHRva2VuICYmICFmb3VuZCk7CiAgICAgICAgaWYgKCFtYXRjaFR5cGUpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHJhbmdlLCBwb3M7CiAgICAgICAgaWYgKG1hdGNoVHlwZSA9PT0gJ2JyYWNrZXQnKSB7CiAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEJyYWNrZXRSYW5nZShjdXJzb3IpOwogICAgICAgICAgICBpZiAoIXJhbmdlKSB7CiAgICAgICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZSgKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIGkgLSAxLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgaSAtIDEKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwb3MgPSByYW5nZS5zdGFydDsKICAgICAgICAgICAgICAgIGlmIChleHBhbmQgfHwgcG9zLnJvdyA9PT0gY3Vyc29yLnJvdyAmJiBNYXRoLmFicyhwb3MuY29sdW1uIC0gY3Vyc29yLmNvbHVtbikgPCAyKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldEJyYWNrZXRSYW5nZShwb3MpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG1hdGNoVHlwZSA9PT0gJ3RhZycpIHsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSAhPT0gLTEpIAogICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByYW5nZSA9IG5ldyBSYW5nZSgKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpLAogICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgLSAyLAogICAgICAgICAgICAgICAgaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksCiAgICAgICAgICAgICAgICBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSAtIDIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKHJhbmdlLmNvbXBhcmUoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbikgPT09IDApIHsKICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBwcmV2VG9rZW47CiAgICAgICAgICAgICAgICAgICAgcHJldlRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZUb2tlbikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldlRva2VuLnR5cGUuaW5kZXhPZigndGFnLWNsb3NlJykgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZS5zZXRFbmQoaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCksIGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gdGFnICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udmFsdWUgPT09ICc8JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoW3RhZ10rKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJzwvJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoW3RhZ10tLTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcHRoW3RhZ10gPT09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSB3aGlsZSAocHJldlRva2VuICYmICFmb3VuZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigndGFnLW5hbWUnKSkgewogICAgICAgICAgICAgICAgcG9zID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAgICAgICBpZiAocG9zLnJvdyA9PSBjdXJzb3Iucm93ICYmIE1hdGguYWJzKHBvcy5jb2x1bW4gLSBjdXJzb3IuY29sdW1uKSA8IDIpCiAgICAgICAgICAgICAgICAgICAgcG9zID0gcmFuZ2UuZW5kOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwb3MgPSByYW5nZSAmJiByYW5nZS5jdXJzb3IgfHwgcG9zOwogICAgICAgIGlmIChwb3MpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdCkgewogICAgICAgICAgICAgICAgaWYgKHJhbmdlICYmIGV4cGFuZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UgJiYgcmFuZ2UuaXNFcXVhbCh0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RUbyhwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVUbyhwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdvdG9MaW5lID0gZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uLCBhbmltYXRlKSB7CiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLnNlc3Npb24udW5mb2xkKHtyb3c6IGxpbmVOdW1iZXIgLSAxLCBjb2x1bW46IGNvbHVtbiB8fCAwfSk7CiAgICAgICAgdGhpcy5leGl0TXVsdGlTZWxlY3RNb2RlICYmIHRoaXMuZXhpdE11bHRpU2VsZWN0TW9kZSgpOwogICAgICAgIHRoaXMubW92ZUN1cnNvclRvKGxpbmVOdW1iZXIgLSAxLCBjb2x1bW4gfHwgMCk7CgogICAgICAgIGlmICghdGhpcy5pc1Jvd0Z1bGx5VmlzaWJsZShsaW5lTnVtYmVyIC0gMSkpCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9MaW5lKGxpbmVOdW1iZXIgLSAxLCB0cnVlLCBhbmltYXRlKTsKICAgIH07CiAgICB0aGlzLm5hdmlnYXRlVG8gPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVUbyhyb3csIGNvbHVtbik7CiAgICB9OwogICAgdGhpcy5uYXZpZ2F0ZVVwID0gZnVuY3Rpb24odGltZXMpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSAmJiAhdGhpcy5zZWxlY3Rpb24uaXNCYWNrd2FyZHMoKSkgewogICAgICAgICAgICB2YXIgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLnNlbGVjdGlvbi5hbmNob3IuZ2V0UG9zaXRpb24oKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc2VsZWN0aW9uU3RhcnQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhclNlbGVjdGlvbigpOwogICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JCeSgtdGltZXMgfHwgLTEsIDApOwogICAgfTsKICAgIHRoaXMubmF2aWdhdGVEb3duID0gZnVuY3Rpb24odGltZXMpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNNdWx0aUxpbmUoKSAmJiB0aGlzLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSB0aGlzLnNlbGVjdGlvbi5hbmNob3IuZ2V0UG9zaXRpb24oKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92ZUN1cnNvclRvUG9zaXRpb24oc2VsZWN0aW9uRW5kKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yQnkodGltZXMgfHwgMSwgMCk7CiAgICB9OwogICAgdGhpcy5uYXZpZ2F0ZUxlZnQgPSBmdW5jdGlvbih0aW1lcykgewogICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDsKICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7CiAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGVmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLm5hdmlnYXRlUmlnaHQgPSBmdW5jdGlvbih0aW1lcykgewogICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSB0aGlzLmdldFNlbGVjdGlvblJhbmdlKCkuZW5kOwogICAgICAgICAgICB0aGlzLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHNlbGVjdGlvbkVuZCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aW1lcyA9IHRpbWVzIHx8IDE7CiAgICAgICAgICAgIHdoaWxlICh0aW1lcy0tKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yUmlnaHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9OwogICAgdGhpcy5uYXZpZ2F0ZUxpbmVTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JMaW5lU3RhcnQoKTsKICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7CiAgICB9OwogICAgdGhpcy5uYXZpZ2F0ZUxpbmVFbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTGluZUVuZCgpOwogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLm5hdmlnYXRlRmlsZUVuZCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JGaWxlRW5kKCk7CiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgfTsKICAgIHRoaXMubmF2aWdhdGVGaWxlU3RhcnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yRmlsZVN0YXJ0KCk7CiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgfTsKICAgIHRoaXMubmF2aWdhdGVXb3JkUmlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7CiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpOwogICAgfTsKICAgIHRoaXMubmF2aWdhdGVXb3JkTGVmdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVDdXJzb3JXb3JkTGVmdCgpOwogICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyZXBsYWNlbWVudCwgb3B0aW9ucykgewogICAgICAgIGlmIChvcHRpb25zKQogICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOwoKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pOwogICAgICAgIHZhciByZXBsYWNlZCA9IDA7CiAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VkOwoKICAgICAgICBpZiAodGhpcy4kdHJ5UmVwbGFjZShyYW5nZSwgcmVwbGFjZW1lbnQpKSB7CiAgICAgICAgICAgIHJlcGxhY2VkID0gMTsKICAgICAgICB9CgogICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlKTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3KHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwoKICAgICAgICByZXR1cm4gcmVwbGFjZWQ7CiAgICB9OwogICAgdGhpcy5yZXBsYWNlQWxsID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQsIG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucykgewogICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7CiAgICAgICAgdmFyIHJlcGxhY2VkID0gMDsKICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiByZXBsYWNlZDsKCiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlVG8oMCwgMCk7CgogICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgaWYodGhpcy4kdHJ5UmVwbGFjZShyYW5nZXNbaV0sIHJlcGxhY2VtZW50KSkgewogICAgICAgICAgICAgICAgcmVwbGFjZWQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uKTsKCiAgICAgICAgcmV0dXJuIHJlcGxhY2VkOwogICAgfTsKCiAgICB0aGlzLiR0cnlSZXBsYWNlID0gZnVuY3Rpb24ocmFuZ2UsIHJlcGxhY2VtZW50KSB7CiAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgcmVwbGFjZW1lbnQgPSB0aGlzLiRzZWFyY2gucmVwbGFjZShpbnB1dCwgcmVwbGFjZW1lbnQpOwogICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gbnVsbCkgewogICAgICAgICAgICByYW5nZS5lbmQgPSB0aGlzLnNlc3Npb24ucmVwbGFjZShyYW5nZSwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0TGFzdFNlYXJjaE9wdGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kc2VhcmNoLmdldE9wdGlvbnMoKTsKICAgIH07CiAgICB0aGlzLmZpbmQgPSBmdW5jdGlvbihuZWVkbGUsIG9wdGlvbnMsIGFuaW1hdGUpIHsKICAgICAgICBpZiAoIW9wdGlvbnMpCiAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKCiAgICAgICAgaWYgKHR5cGVvZiBuZWVkbGUgPT0gInN0cmluZyIgfHwgbmVlZGxlIGluc3RhbmNlb2YgUmVnRXhwKQogICAgICAgICAgICBvcHRpb25zLm5lZWRsZSA9IG5lZWRsZTsKICAgICAgICBlbHNlIGlmICh0eXBlb2YgbmVlZGxlID09ICJvYmplY3QiKQogICAgICAgICAgICBvb3AubWl4aW4ob3B0aW9ucywgbmVlZGxlKTsKCiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgICBpZiAob3B0aW9ucy5uZWVkbGUgPT0gbnVsbCkgewogICAgICAgICAgICBuZWVkbGUgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKQogICAgICAgICAgICAgICAgfHwgdGhpcy4kc2VhcmNoLiRvcHRpb25zLm5lZWRsZTsKICAgICAgICAgICAgaWYgKCFuZWVkbGUpIHsKICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5zZXNzaW9uLmdldFdvcmRSYW5nZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgICAgICBuZWVkbGUgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRzZWFyY2guc2V0KHtuZWVkbGU6IG5lZWRsZX0pOwogICAgICAgIH0KCiAgICAgICAgdGhpcy4kc2VhcmNoLnNldChvcHRpb25zKTsKICAgICAgICBpZiAoIW9wdGlvbnMuc3RhcnQpCiAgICAgICAgICAgIHRoaXMuJHNlYXJjaC5zZXQoe3N0YXJ0OiByYW5nZX0pOwoKICAgICAgICB2YXIgbmV3UmFuZ2UgPSB0aGlzLiRzZWFyY2guZmluZCh0aGlzLnNlc3Npb24pOwogICAgICAgIGlmIChvcHRpb25zLnByZXZlbnRTY3JvbGwpCiAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTsKICAgICAgICBpZiAobmV3UmFuZ2UpIHsKICAgICAgICAgICAgdGhpcy5yZXZlYWxSYW5nZShuZXdSYW5nZSwgYW5pbWF0ZSk7CiAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdGlvbnMuYmFja3dhcmRzKQogICAgICAgICAgICByYW5nZS5zdGFydCA9IHJhbmdlLmVuZDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0OwogICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTsKICAgIH07CiAgICB0aGlzLmZpbmROZXh0ID0gZnVuY3Rpb24ob3B0aW9ucywgYW5pbWF0ZSkgewogICAgICAgIHRoaXMuZmluZCh7c2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogZmFsc2V9LCBvcHRpb25zLCBhbmltYXRlKTsKICAgIH07CiAgICB0aGlzLmZpbmRQcmV2aW91cyA9IGZ1bmN0aW9uKG9wdGlvbnMsIGFuaW1hdGUpIHsKICAgICAgICB0aGlzLmZpbmQob3B0aW9ucywge3NraXBDdXJyZW50OiB0cnVlLCBiYWNrd2FyZHM6IHRydWV9LCBhbmltYXRlKTsKICAgIH07CgogICAgdGhpcy5yZXZlYWxSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlLCBhbmltYXRlKSB7CiAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZChyYW5nZSk7CiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0aW9uUmFuZ2UocmFuZ2UpOwoKICAgICAgICB2YXIgc2Nyb2xsVG9wID0gdGhpcy5yZW5kZXJlci5zY3JvbGxUb3A7CiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCAwLjUpOwogICAgICAgIGlmIChhbmltYXRlICE9PSBmYWxzZSkKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKHNjcm9sbFRvcCk7CiAgICB9OwogICAgdGhpcy51bmRvID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCkudW5kbyh0aGlzLnNlc3Npb24pOwogICAgICAgIHRoaXMucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTsKICAgIH07CiAgICB0aGlzLnJlZG8gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNlc3Npb24uZ2V0VW5kb01hbmFnZXIoKS5yZWRvKHRoaXMuc2Vzc2lvbik7CiAgICAgICAgdGhpcy5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUpOwogICAgfTsKICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIuZGVzdHJveSgpOwogICAgICAgIHRoaXMuX3NpZ25hbCgiZGVzdHJveSIsIHRoaXMpOwogICAgICAgIGlmICh0aGlzLnNlc3Npb24pIHsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRlc3Ryb3koKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRBdXRvU2Nyb2xsRWRpdG9ySW50b1ZpZXcgPSBmdW5jdGlvbihlbmFibGUpIHsKICAgICAgICBpZiAoIWVuYWJsZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciByZWN0OwogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICB2YXIgc2hvdWxkU2Nyb2xsID0gZmFsc2U7CiAgICAgICAgaWYgKCF0aGlzLiRzY3JvbGxBbmNob3IpCiAgICAgICAgICAgIHRoaXMuJHNjcm9sbEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIHZhciBzY3JvbGxBbmNob3IgPSB0aGlzLiRzY3JvbGxBbmNob3I7CiAgICAgICAgc2Nyb2xsQW5jaG9yLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJzb2x1dGUiOwogICAgICAgIHRoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZShzY3JvbGxBbmNob3IsIHRoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQpOwogICAgICAgIHZhciBvbkNoYW5nZVNlbGVjdGlvbiA9IHRoaXMub24oImNoYW5nZVNlbGVjdGlvbiIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzaG91bGRTY3JvbGwgPSB0cnVlOwogICAgICAgIH0pOwogICAgICAgIHZhciBvbkJlZm9yZVJlbmRlciA9IHRoaXMucmVuZGVyZXIub24oImJlZm9yZVJlbmRlciIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKQogICAgICAgICAgICAgICAgcmVjdCA9IHNlbGYucmVuZGVyZXIuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIH0pOwogICAgICAgIHZhciBvbkFmdGVyUmVuZGVyID0gdGhpcy5yZW5kZXJlci5vbigiYWZ0ZXJSZW5kZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCAmJiByZWN0ICYmIChzZWxmLmlzRm9jdXNlZCgpCiAgICAgICAgICAgICAgICB8fCBzZWxmLnNlYXJjaEJveCAmJiBzZWxmLnNlYXJjaEJveC5pc0ZvY3VzZWQoKSkKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyZXIgPSBzZWxmLnJlbmRlcmVyOwogICAgICAgICAgICAgICAgdmFyIHBvcyA9IHJlbmRlcmVyLiRjdXJzb3JMYXllci4kcGl4ZWxQb3M7CiAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0gcmVuZGVyZXIubGF5ZXJDb25maWc7CiAgICAgICAgICAgICAgICB2YXIgdG9wID0gcG9zLnRvcCAtIGNvbmZpZy5vZmZzZXQ7CiAgICAgICAgICAgICAgICBpZiAocG9zLnRvcCA+PSAwICYmIHRvcCArIHJlY3QudG9wIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHNob3VsZFNjcm9sbCA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcy50b3AgPCBjb25maWcuaGVpZ2h0ICYmCiAgICAgICAgICAgICAgICAgICAgcG9zLnRvcCArIHJlY3QudG9wICsgY29uZmlnLmxpbmVIZWlnaHQgPiB3aW5kb3cuaW5uZXJIZWlnaHQpIHsKICAgICAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2hvdWxkU2Nyb2xsID0gbnVsbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzaG91bGRTY3JvbGwgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS50b3AgPSB0b3AgKyAicHgiOwogICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5sZWZ0ID0gcG9zLmxlZnQgKyAicHgiOwogICAgICAgICAgICAgICAgICAgIHNjcm9sbEFuY2hvci5zdHlsZS5oZWlnaHQgPSBjb25maWcubGluZUhlaWdodCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsQW5jaG9yLnNjcm9sbEludG9WaWV3KHNob3VsZFNjcm9sbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzaG91bGRTY3JvbGwgPSByZWN0ID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuc2V0QXV0b1Njcm9sbEVkaXRvckludG9WaWV3ID0gZnVuY3Rpb24oZW5hYmxlKSB7CiAgICAgICAgICAgIGlmIChlbmFibGUpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldzsKICAgICAgICAgICAgdGhpcy5vZmYoImNoYW5nZVNlbGVjdGlvbiIsIG9uQ2hhbmdlU2VsZWN0aW9uKTsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5vZmYoImFmdGVyUmVuZGVyIiwgb25BZnRlclJlbmRlcik7CiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIub2ZmKCJiZWZvcmVSZW5kZXIiLCBvbkJlZm9yZVJlbmRlcik7CiAgICAgICAgfTsKICAgIH07CgoKICAgIHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc3R5bGUgPSB0aGlzLiRjdXJzb3JTdHlsZSB8fCAiYWNlIjsKICAgICAgICB2YXIgY3Vyc29yTGF5ZXIgPSB0aGlzLnJlbmRlcmVyLiRjdXJzb3JMYXllcjsKICAgICAgICBpZiAoIWN1cnNvckxheWVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgY3Vyc29yTGF5ZXIuc2V0U21vb3RoQmxpbmtpbmcoL3Ntb290aC8udGVzdChzdHlsZSkpOwogICAgICAgIGN1cnNvckxheWVyLmlzQmxpbmtpbmcgPSAhdGhpcy4kcmVhZE9ubHkgJiYgc3R5bGUgIT0gIndpZGUiOwogICAgICAgIGRvbS5zZXRDc3NDbGFzcyhjdXJzb3JMYXllci5lbGVtZW50LCAiYWNlX3NsaW0tY3Vyc29ycyIsIC9zbGltLy50ZXN0KHN0eWxlKSk7CiAgICB9OwogICAgdGhpcy5wcm9tcHQgPSBmdW5jdGlvbihtZXNzYWdlLCBvcHRpb25zLCBjYWxsYmFjaykgewogICAgICAgIHZhciBlZGl0b3IgPSB0aGlzOwogICAgICAgIGNvbmZpZy5sb2FkTW9kdWxlKCIuL2V4dC9wcm9tcHQiLCBmdW5jdGlvbiAobW9kdWxlKSB7CiAgICAgICAgICAgIG1vZHVsZS5wcm9tcHQoZWRpdG9yLCBtZXNzYWdlLCBvcHRpb25zLCBjYWxsYmFjayk7CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTsKCgoKY29uZmlnLmRlZmluZU9wdGlvbnMoRWRpdG9yLnByb3RvdHlwZSwgImVkaXRvciIsIHsKICAgIHNlbGVjdGlvblN0eWxlOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbihzdHlsZSkgewogICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlU2VsZWN0aW9uU3R5bGUiLCB7ZGF0YTogc3R5bGV9KTsKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogImxpbmUiCiAgICB9LAogICAgaGlnaGxpZ2h0QWN0aXZlTGluZTogewogICAgICAgIHNldDogZnVuY3Rpb24oKSB7dGhpcy4kdXBkYXRlSGlnaGxpZ2h0QWN0aXZlTGluZSgpO30sCiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCiAgICB9LAogICAgaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbihzaG91bGRIaWdobGlnaHQpIHt0aGlzLiRvblNlbGVjdGlvbkNoYW5nZSgpO30sCiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCiAgICB9LAogICAgcmVhZE9ubHk6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHJlYWRPbmx5KSB7CiAgICAgICAgICAgIHRoaXMudGV4dElucHV0LnNldFJlYWRPbmx5KHJlYWRPbmx5KTsKICAgICAgICAgICAgdGhpcy4kcmVzZXRDdXJzb3JTdHlsZSgpOyAKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UKICAgIH0sCiAgICBjb3B5V2l0aEVtcHR5U2VsZWN0aW9uOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICB0aGlzLnRleHRJbnB1dC5zZXRDb3B5V2l0aEVtcHR5U2VsZWN0aW9uKHZhbHVlKTsKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogZmFsc2UKICAgIH0sCiAgICBjdXJzb3JTdHlsZTogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7IHRoaXMuJHJlc2V0Q3Vyc29yU3R5bGUoKTsgfSwKICAgICAgICB2YWx1ZXM6IFsiYWNlIiwgInNsaW0iLCAic21vb3RoIiwgIndpZGUiXSwKICAgICAgICBpbml0aWFsVmFsdWU6ICJhY2UiCiAgICB9LAogICAgbWVyZ2VVbmRvRGVsdGFzOiB7CiAgICAgICAgdmFsdWVzOiBbZmFsc2UsIHRydWUsICJhbHdheXMiXSwKICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKICAgIH0sCiAgICBiZWhhdmlvdXJzRW5hYmxlZDoge2luaXRpYWxWYWx1ZTogdHJ1ZX0sCiAgICB3cmFwQmVoYXZpb3Vyc0VuYWJsZWQ6IHtpbml0aWFsVmFsdWU6IHRydWV9LAogICAgYXV0b1Njcm9sbEVkaXRvckludG9WaWV3OiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHt0aGlzLnNldEF1dG9TY3JvbGxFZGl0b3JJbnRvVmlldyh2YWwpO30KICAgIH0sCiAgICBrZXlib2FyZEhhbmRsZXI6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgeyB0aGlzLnNldEtleWJvYXJkSGFuZGxlcih2YWwpOyB9LAogICAgICAgIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLiRrZXliaW5kaW5nSWQ7IH0sCiAgICAgICAgaGFuZGxlc1NldDogdHJ1ZQogICAgfSwKICAgIHZhbHVlOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsgdGhpcy5zZXNzaW9uLnNldFZhbHVlKHZhbCk7IH0sCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTsgfSwKICAgICAgICBoYW5kbGVzU2V0OiB0cnVlLAogICAgICAgIGhpZGRlbjogdHJ1ZQogICAgfSwKICAgIHNlc3Npb246IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgeyB0aGlzLnNldFNlc3Npb24odmFsKTsgfSwKICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zZXNzaW9uOyB9LAogICAgICAgIGhhbmRsZXNTZXQ6IHRydWUsCiAgICAgICAgaGlkZGVuOiB0cnVlCiAgICB9LAogICAgCiAgICBzaG93TGluZU51bWJlcnM6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpIHsKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci4kZ3V0dGVyTGF5ZXIuc2V0U2hvd0xpbmVOdW1iZXJzKHNob3cpOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLiRsb29wLnNjaGVkdWxlKHRoaXMucmVuZGVyZXIuQ0hBTkdFX0dVVFRFUik7CiAgICAgICAgICAgIGlmIChzaG93ICYmIHRoaXMuJHJlbGF0aXZlTGluZU51bWJlcnMpCiAgICAgICAgICAgICAgICByZWxhdGl2ZU51bWJlclJlbmRlcmVyLmF0dGFjaCh0aGlzKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmVsYXRpdmVOdW1iZXJSZW5kZXJlci5kZXRhY2godGhpcyk7CiAgICAgICAgfSwKICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKICAgIH0sCiAgICByZWxhdGl2ZUxpbmVOdW1iZXJzOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICBpZiAodGhpcy4kc2hvd0xpbmVOdW1iZXJzICYmIHZhbHVlKQogICAgICAgICAgICAgICAgcmVsYXRpdmVOdW1iZXJSZW5kZXJlci5hdHRhY2godGhpcyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJlbGF0aXZlTnVtYmVyUmVuZGVyZXIuZGV0YWNoKHRoaXMpOwogICAgICAgIH0KICAgIH0sCiAgICBwbGFjZWhvbGRlcjogewogICAgICAgIHNldDogZnVuY3Rpb24obWVzc2FnZSkgewogICAgICAgICAgICBpZiAoIXRoaXMuJHVwZGF0ZVBsYWNlaG9sZGVyKSB7CiAgICAgICAgICAgICAgICB0aGlzLiR1cGRhdGVQbGFjZWhvbGRlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMucmVuZGVyZXIuJGNvbXBvc2l0aW9uIHx8IHRoaXMuZ2V0VmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5vZmYoImFmdGVyUmVuZGVyIiwgdGhpcy4kdXBkYXRlUGxhY2Vob2xkZXIpOwogICAgICAgICAgICAgICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsICJhY2VfaGFzUGxhY2Vob2xkZXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGUucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucGxhY2Vob2xkZXJOb2RlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZSAmJiAhdGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5vbigiYWZ0ZXJSZW5kZXIiLCB0aGlzLiR1cGRhdGVQbGFjZWhvbGRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9oYXNQbGFjZWhvbGRlciIpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWwgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTmFtZSA9ICJhY2VfcGxhY2Vob2xkZXIiOwogICAgICAgICAgICAgICAgICAgICAgICBlbC50ZXh0Q29udGVudCA9IHRoaXMuJHBsYWNlaG9sZGVyIHx8ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnBsYWNlaG9sZGVyTm9kZSA9IGVsOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmNvbnRlbnQuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlci5wbGFjZWhvbGRlck5vZGUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMub24oImlucHV0IiwgdGhpcy4kdXBkYXRlUGxhY2Vob2xkZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVBsYWNlaG9sZGVyKCk7CiAgICAgICAgfQogICAgfSwKCiAgICBoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZTogInJlbmRlcmVyIiwKICAgIHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiAicmVuZGVyZXIiLAogICAgaGlnaGxpZ2h0R3V0dGVyTGluZTogInJlbmRlcmVyIiwKICAgIGFuaW1hdGVkU2Nyb2xsOiAicmVuZGVyZXIiLAogICAgc2hvd0ludmlzaWJsZXM6ICJyZW5kZXJlciIsCiAgICBzaG93UHJpbnRNYXJnaW46ICJyZW5kZXJlciIsCiAgICBwcmludE1hcmdpbkNvbHVtbjogInJlbmRlcmVyIiwKICAgIHByaW50TWFyZ2luOiAicmVuZGVyZXIiLAogICAgZmFkZUZvbGRXaWRnZXRzOiAicmVuZGVyZXIiLAogICAgc2hvd0ZvbGRXaWRnZXRzOiAicmVuZGVyZXIiLAogICAgZGlzcGxheUluZGVudEd1aWRlczogInJlbmRlcmVyIiwKICAgIHNob3dHdXR0ZXI6ICJyZW5kZXJlciIsCiAgICBmb250U2l6ZTogInJlbmRlcmVyIiwKICAgIGZvbnRGYW1pbHk6ICJyZW5kZXJlciIsCiAgICBtYXhMaW5lczogInJlbmRlcmVyIiwKICAgIG1pbkxpbmVzOiAicmVuZGVyZXIiLAogICAgc2Nyb2xsUGFzdEVuZDogInJlbmRlcmVyIiwKICAgIGZpeGVkV2lkdGhHdXR0ZXI6ICJyZW5kZXJlciIsCiAgICB0aGVtZTogInJlbmRlcmVyIiwKICAgIGhhc0Nzc1RyYW5zZm9ybXM6ICJyZW5kZXJlciIsCiAgICBtYXhQaXhlbEhlaWdodDogInJlbmRlcmVyIiwKICAgIHVzZVRleHRhcmVhRm9ySU1FOiAicmVuZGVyZXIiLAoKICAgIHNjcm9sbFNwZWVkOiAiJG1vdXNlSGFuZGxlciIsCiAgICBkcmFnRGVsYXk6ICIkbW91c2VIYW5kbGVyIiwKICAgIGRyYWdFbmFibGVkOiAiJG1vdXNlSGFuZGxlciIsCiAgICBmb2N1c1RpbWVvdXQ6ICIkbW91c2VIYW5kbGVyIiwKICAgIHRvb2x0aXBGb2xsb3dzTW91c2U6ICIkbW91c2VIYW5kbGVyIiwKCiAgICBmaXJzdExpbmVOdW1iZXI6ICJzZXNzaW9uIiwKICAgIG92ZXJ3cml0ZTogInNlc3Npb24iLAogICAgbmV3TGluZU1vZGU6ICJzZXNzaW9uIiwKICAgIHVzZVdvcmtlcjogInNlc3Npb24iLAogICAgdXNlU29mdFRhYnM6ICJzZXNzaW9uIiwKICAgIG5hdmlnYXRlV2l0aGluU29mdFRhYnM6ICJzZXNzaW9uIiwKICAgIHRhYlNpemU6ICJzZXNzaW9uIiwKICAgIHdyYXA6ICJzZXNzaW9uIiwKICAgIGluZGVudGVkU29mdFdyYXA6ICJzZXNzaW9uIiwKICAgIGZvbGRTdHlsZTogInNlc3Npb24iLAogICAgbW9kZTogInNlc3Npb24iCn0pOwoKCnZhciByZWxhdGl2ZU51bWJlclJlbmRlcmVyID0gewogICAgZ2V0VGV4dDogZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgcmV0dXJuIChNYXRoLmFicyhzZXNzaW9uLnNlbGVjdGlvbi5sZWFkLnJvdyAtIHJvdykgfHwgKHJvdyArIDEgKyAocm93IDwgOSA/ICJceGI3IiA6ICIiKSkpICsgIiI7CiAgICB9LAogICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKHNlc3Npb24sIGxhc3RMaW5lTnVtYmVyLCBjb25maWcpIHsKICAgICAgICByZXR1cm4gTWF0aC5tYXgoCiAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoLAogICAgICAgICAgICAoY29uZmlnLmxhc3RSb3cgKyAxKS50b1N0cmluZygpLmxlbmd0aCwKICAgICAgICAgICAgMgogICAgICAgICkgKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CiAgICB9LAogICAgdXBkYXRlOiBmdW5jdGlvbihlLCBlZGl0b3IpIHsKICAgICAgICBlZGl0b3IucmVuZGVyZXIuJGxvb3Auc2NoZWR1bGUoZWRpdG9yLnJlbmRlcmVyLkNIQU5HRV9HVVRURVIpOwogICAgfSwKICAgIGF0dGFjaDogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kcmVuZGVyZXIgPSB0aGlzOwogICAgICAgIGVkaXRvci5vbigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy51cGRhdGUpOwogICAgICAgIHRoaXMudXBkYXRlKG51bGwsIGVkaXRvcik7CiAgICB9LAogICAgZGV0YWNoOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBpZiAoZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kcmVuZGVyZXIgPT0gdGhpcykKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLiRndXR0ZXJMYXllci4kcmVuZGVyZXIgPSBudWxsOwogICAgICAgIGVkaXRvci5vZmYoImNoYW5nZVNlbGVjdGlvbiIsIHRoaXMudXBkYXRlKTsKICAgICAgICB0aGlzLnVwZGF0ZShudWxsLCBlZGl0b3IpOwogICAgfQp9OwoKZXhwb3J0cy5FZGl0b3IgPSBFZGl0b3I7Cn0pOwoKZGVmaW5lKCJhY2UvdW5kb21hbmFnZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIFVuZG9NYW5hZ2VyID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRtYXhSZXYgPSAwOwogICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKICAgIHRoaXMucmVzZXQoKTsKfTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5hZGRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHRoaXMuJHNlc3Npb24gPSBzZXNzaW9uOwogICAgfTsKICAgIHRoaXMuYWRkID0gZnVuY3Rpb24oZGVsdGEsIGFsbG93TWVyZ2UsIHNlc3Npb24pIHsKICAgICAgICBpZiAodGhpcy4kZnJvbVVuZG8pIHJldHVybjsKICAgICAgICBpZiAoZGVsdGEgPT0gdGhpcy4kbGFzdERlbHRhKSByZXR1cm47CiAgICAgICAgaWYgKGFsbG93TWVyZ2UgPT09IGZhbHNlIHx8ICF0aGlzLmxhc3REZWx0YXMpIHsKICAgICAgICAgICAgdGhpcy5sYXN0RGVsdGFzID0gW107CiAgICAgICAgICAgIHRoaXMuJHVuZG9TdGFjay5wdXNoKHRoaXMubGFzdERlbHRhcyk7CiAgICAgICAgICAgIGRlbHRhLmlkID0gdGhpcy4kcmV2ID0gKyt0aGlzLiRtYXhSZXY7CiAgICAgICAgfQogICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZSIgfHwgZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiKQogICAgICAgICAgICB0aGlzLiRsYXN0RGVsdGEgPSBkZWx0YTsKICAgICAgICB0aGlzLmxhc3REZWx0YXMucHVzaChkZWx0YSk7CiAgICB9OwogICAgCiAgICB0aGlzLmFkZFNlbGVjdGlvbiA9IGZ1bmN0aW9uKHNlbGVjdGlvbiwgcmV2KSB7CiAgICAgICAgdGhpcy5zZWxlY3Rpb25zLnB1c2goewogICAgICAgICAgICB2YWx1ZTogc2VsZWN0aW9uLAogICAgICAgICAgICByZXY6IHJldiB8fCB0aGlzLiRyZXYKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIHRoaXMuc3RhcnROZXdHcm91cCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMubGFzdERlbHRhcyA9IG51bGw7CiAgICAgICAgcmV0dXJuIHRoaXMuJHJldjsKICAgIH07CiAgICAKICAgIHRoaXMubWFya0lnbm9yZWQgPSBmdW5jdGlvbihmcm9tLCB0bykgewogICAgICAgIGlmICh0byA9PSBudWxsKSB0byA9IHRoaXMuJHJldiArIDE7CiAgICAgICAgdmFyIHN0YWNrID0gdGhpcy4kdW5kb1N0YWNrOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgdmFyIGRlbHRhID0gc3RhY2tbaV1bMF07CiAgICAgICAgICAgIGlmIChkZWx0YS5pZCA8PSBmcm9tKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGlmIChkZWx0YS5pZCA8IHRvKQogICAgICAgICAgICAgICAgZGVsdGEuaWdub3JlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5sYXN0RGVsdGFzID0gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24ocmV2LCBhZnRlcikgewogICAgICAgIHZhciBzdGFjayA9IHRoaXMuc2VsZWN0aW9uczsKICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoOyBpLS07KSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSBzdGFja1tpXTsKICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yZXYgPCByZXYpIHsKICAgICAgICAgICAgICAgIGlmIChhZnRlcikKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSBzdGFja1tpICsgMV07CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRSZXZpc2lvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRyZXY7CiAgICB9OwogICAgCiAgICB0aGlzLmdldERlbHRhcyA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7CiAgICAgICAgaWYgKHRvID09IG51bGwpIHRvID0gdGhpcy4kcmV2ICsgMTsKICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLiR1bmRvU3RhY2s7CiAgICAgICAgdmFyIGVuZCA9IG51bGwsIHN0YXJ0ID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gc3RhY2subGVuZ3RoOyBpLS07KSB7CiAgICAgICAgICAgIHZhciBkZWx0YSA9IHN0YWNrW2ldWzBdOwogICAgICAgICAgICBpZiAoZGVsdGEuaWQgPCB0byAmJiAhZW5kKQogICAgICAgICAgICAgICAgZW5kID0gaSsxOwogICAgICAgICAgICBpZiAoZGVsdGEuaWQgPD0gZnJvbSkgewogICAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdGFjay5zbGljZShzdGFydCwgZW5kKTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q2hhbmdlZFJhbmdlcyA9IGZ1bmN0aW9uKGZyb20sIHRvKSB7CiAgICAgICAgaWYgKHRvID09IG51bGwpIHRvID0gdGhpcy4kcmV2ICsgMTsKICAgICAgICAKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q2hhbmdlZExpbmVzID0gZnVuY3Rpb24oZnJvbSwgdG8pIHsKICAgICAgICBpZiAodG8gPT0gbnVsbCkgdG8gPSB0aGlzLiRyZXYgKyAxOwogICAgICAgIAogICAgfTsKICAgIHRoaXMudW5kbyA9IGZ1bmN0aW9uKHNlc3Npb24sIGRvbnRTZWxlY3QpIHsKICAgICAgICB0aGlzLmxhc3REZWx0YXMgPSBudWxsOwogICAgICAgIHZhciBzdGFjayA9IHRoaXMuJHVuZG9TdGFjazsKICAgICAgICAKICAgICAgICBpZiAoIXJlYXJyYW5nZVVuZG9TdGFjayhzdGFjaywgc3RhY2subGVuZ3RoKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIAogICAgICAgIGlmICghc2Vzc2lvbikKICAgICAgICAgICAgc2Vzc2lvbiA9IHRoaXMuJHNlc3Npb247CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuJHJlZG9TdGFja0Jhc2VSZXYgIT09IHRoaXMuJHJldiAmJiB0aGlzLiRyZWRvU3RhY2subGVuZ3RoKQogICAgICAgICAgICB0aGlzLiRyZWRvU3RhY2sgPSBbXTsKICAgICAgICAKICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7CiAgICAgICAgCiAgICAgICAgdmFyIGRlbHRhU2V0ID0gc3RhY2sucG9wKCk7CiAgICAgICAgdmFyIHVuZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7CiAgICAgICAgaWYgKGRlbHRhU2V0ICYmIGRlbHRhU2V0Lmxlbmd0aCkgewogICAgICAgICAgICB1bmRvU2VsZWN0aW9uUmFuZ2UgPSBzZXNzaW9uLnVuZG9DaGFuZ2VzKGRlbHRhU2V0LCBkb250U2VsZWN0KTsKICAgICAgICAgICAgdGhpcy4kcmVkb1N0YWNrLnB1c2goZGVsdGFTZXQpOwogICAgICAgICAgICB0aGlzLiRzeW5jUmV2KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuJGZyb21VbmRvID0gZmFsc2U7CgogICAgICAgIHJldHVybiB1bmRvU2VsZWN0aW9uUmFuZ2U7CiAgICB9OwogICAgdGhpcy5yZWRvID0gZnVuY3Rpb24oc2Vzc2lvbiwgZG9udFNlbGVjdCkgewogICAgICAgIHRoaXMubGFzdERlbHRhcyA9IG51bGw7CiAgICAgICAgCiAgICAgICAgaWYgKCFzZXNzaW9uKQogICAgICAgICAgICBzZXNzaW9uID0gdGhpcy4kc2Vzc2lvbjsKICAgICAgICAKICAgICAgICB0aGlzLiRmcm9tVW5kbyA9IHRydWU7CiAgICAgICAgaWYgKHRoaXMuJHJlZG9TdGFja0Jhc2VSZXYgIT0gdGhpcy4kcmV2KSB7CiAgICAgICAgICAgIHZhciBkaWZmID0gdGhpcy5nZXREZWx0YXModGhpcy4kcmVkb1N0YWNrQmFzZVJldiwgdGhpcy4kcmV2ICsgMSk7CiAgICAgICAgICAgIHJlYmFzZVJlZG9TdGFjayh0aGlzLiRyZWRvU3RhY2ssIGRpZmYpOwogICAgICAgICAgICB0aGlzLiRyZWRvU3RhY2tCYXNlUmV2ID0gdGhpcy4kcmV2OwogICAgICAgICAgICB0aGlzLiRyZWRvU3RhY2suZm9yRWFjaChmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICB4WzBdLmlkID0gKyt0aGlzLiRtYXhSZXY7CiAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsdGFTZXQgPSB0aGlzLiRyZWRvU3RhY2sucG9wKCk7CiAgICAgICAgdmFyIHJlZG9TZWxlY3Rpb25SYW5nZSA9IG51bGw7CiAgICAgICAgCiAgICAgICAgaWYgKGRlbHRhU2V0KSB7CiAgICAgICAgICAgIHJlZG9TZWxlY3Rpb25SYW5nZSA9IHNlc3Npb24ucmVkb0NoYW5nZXMoZGVsdGFTZXQsIGRvbnRTZWxlY3QpOwogICAgICAgICAgICB0aGlzLiR1bmRvU3RhY2sucHVzaChkZWx0YVNldCk7CiAgICAgICAgICAgIHRoaXMuJHN5bmNSZXYoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy4kZnJvbVVuZG8gPSBmYWxzZTsKICAgICAgICAKICAgICAgICByZXR1cm4gcmVkb1NlbGVjdGlvblJhbmdlOwogICAgfTsKICAgIAogICAgdGhpcy4kc3luY1JldiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdGFjayA9IHRoaXMuJHVuZG9TdGFjazsKICAgICAgICB2YXIgbmV4dERlbHRhID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAgdmFyIGlkID0gbmV4dERlbHRhICYmIG5leHREZWx0YVswXS5pZCB8fCAwOwogICAgICAgIHRoaXMuJHJlZG9TdGFja0Jhc2VSZXYgPSBpZDsKICAgICAgICB0aGlzLiRyZXYgPSBpZDsKICAgIH07CiAgICB0aGlzLnJlc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5sYXN0RGVsdGFzID0gbnVsbDsKICAgICAgICB0aGlzLiRsYXN0RGVsdGEgPSBudWxsOwogICAgICAgIHRoaXMuJHVuZG9TdGFjayA9IFtdOwogICAgICAgIHRoaXMuJHJlZG9TdGFjayA9IFtdOwogICAgICAgIHRoaXMuJHJldiA9IDA7CiAgICAgICAgdGhpcy5tYXJrID0gMDsKICAgICAgICB0aGlzLiRyZWRvU3RhY2tCYXNlUmV2ID0gdGhpcy4kcmV2OwogICAgICAgIHRoaXMuc2VsZWN0aW9ucyA9IFtdOwogICAgfTsKICAgIHRoaXMuY2FuVW5kbyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiR1bmRvU3RhY2subGVuZ3RoID4gMDsKICAgIH07CiAgICB0aGlzLmNhblJlZG8gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kcmVkb1N0YWNrLmxlbmd0aCA+IDA7CiAgICB9OwogICAgdGhpcy5ib29rbWFyayA9IGZ1bmN0aW9uKHJldikgewogICAgICAgIGlmIChyZXYgPT0gdW5kZWZpbmVkKQogICAgICAgICAgICByZXYgPSB0aGlzLiRyZXY7CiAgICAgICAgdGhpcy5tYXJrID0gcmV2OwogICAgfTsKICAgIHRoaXMuaXNBdEJvb2ttYXJrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHJldiA9PT0gdGhpcy5tYXJrOwogICAgfTsKICAgIAogICAgdGhpcy50b0pTT04gPSBmdW5jdGlvbigpIHsKICAgICAgICAKICAgIH07CiAgICAKICAgIHRoaXMuZnJvbUpTT04gPSBmdW5jdGlvbigpIHsKICAgICAgICAKICAgIH07CiAgICAKICAgIHRoaXMuaGFzVW5kbyA9IHRoaXMuY2FuVW5kbzsKICAgIHRoaXMuaGFzUmVkbyA9IHRoaXMuY2FuUmVkbzsKICAgIHRoaXMuaXNDbGVhbiA9IHRoaXMuaXNBdEJvb2ttYXJrOwogICAgdGhpcy5tYXJrQ2xlYW4gPSB0aGlzLmJvb2ttYXJrOwogICAgCiAgICB0aGlzLiRwcmV0dHlQcmludCA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgaWYgKGRlbHRhKSByZXR1cm4gc3RyaW5naWZ5RGVsdGEoZGVsdGEpOwogICAgICAgIHJldHVybiBzdHJpbmdpZnlEZWx0YSh0aGlzLiR1bmRvU3RhY2spICsgIlxuLS0tXG4iICsgc3RyaW5naWZ5RGVsdGEodGhpcy4kcmVkb1N0YWNrKTsKICAgIH07Cn0pLmNhbGwoVW5kb01hbmFnZXIucHJvdG90eXBlKTsKCmZ1bmN0aW9uIHJlYXJyYW5nZVVuZG9TdGFjayhzdGFjaywgcG9zKSB7CiAgICBmb3IgKHZhciBpID0gcG9zOyBpLS07ICkgewogICAgICAgIHZhciBkZWx0YVNldCA9IHN0YWNrW2ldOwogICAgICAgIGlmIChkZWx0YVNldCAmJiAhZGVsdGFTZXRbMF0uaWdub3JlKSB7CiAgICAgICAgICAgIHdoaWxlKGkgPCBwb3MgLSAxKSB7CiAgICAgICAgICAgICAgICB2YXIgc3dhcHBlZCA9IHN3YXBHcm91cHMoc3RhY2tbaV0sIHN0YWNrW2kgKyAxXSk7CiAgICAgICAgICAgICAgICBzdGFja1tpXSA9IHN3YXBwZWRbMF07CiAgICAgICAgICAgICAgICBzdGFja1tpICsgMV0gPSBzd2FwcGVkWzFdOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KfQoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwp2YXIgY21wID0gUmFuZ2UuY29tcGFyZVBvaW50czsKdmFyIGNvbXBhcmVQb2ludHMgPSBSYW5nZS5jb21wYXJlUG9pbnRzOwoKZnVuY3Rpb24gJHVwZGF0ZU1hcmtlcnMoZGVsdGEpIHsKICAgIHZhciBpc0luc2VydCA9IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IjsKICAgIHZhciBzdGFydCA9IGRlbHRhLnN0YXJ0OwogICAgdmFyIGVuZCA9IGRlbHRhLmVuZDsKICAgIHZhciByb3dTaGlmdCA9IChlbmQucm93IC0gc3RhcnQucm93KSAqIChpc0luc2VydCA/IDEgOiAtMSk7CiAgICB2YXIgY29sU2hpZnQgPSAoZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbikgKiAoaXNJbnNlcnQgPyAxIDogLTEpOwogICAgaWYgKGlzSW5zZXJ0KSBlbmQgPSBzdGFydDsKCiAgICBmb3IgKHZhciBpIGluIHRoaXMubWFya3MpIHsKICAgICAgICB2YXIgcG9pbnQgPSB0aGlzLm1hcmtzW2ldOwogICAgICAgIHZhciBjbXAgPSBjb21wYXJlUG9pbnRzKHBvaW50LCBzdGFydCk7CiAgICAgICAgaWYgKGNtcCA8IDApIHsKICAgICAgICAgICAgY29udGludWU7IC8vIGRlbHRhIHN0YXJ0cyBhZnRlciB0aGUgcmFuZ2UKICAgICAgICB9CiAgICAgICAgaWYgKGNtcCA9PT0gMCkgewogICAgICAgICAgICBpZiAoaXNJbnNlcnQpIHsKICAgICAgICAgICAgICAgIGlmIChwb2ludC5iaWFzID09IDEpIHsKICAgICAgICAgICAgICAgICAgICBjbXAgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcG9pbnQuYmlhcyA9PSAtMTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgY21wMiA9IGlzSW5zZXJ0ID8gY21wIDogY29tcGFyZVBvaW50cyhwb2ludCwgZW5kKTsKICAgICAgICBpZiAoY21wMiA+IDApIHsKICAgICAgICAgICAgcG9pbnQucm93ICs9IHJvd1NoaWZ0OwogICAgICAgICAgICBwb2ludC5jb2x1bW4gKz0gcG9pbnQucm93ID09IGVuZC5yb3cgPyBjb2xTaGlmdCA6IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzSW5zZXJ0ICYmIGNtcDIgPD0gMCkgewogICAgICAgICAgICBwb2ludC5yb3cgPSBzdGFydC5yb3c7CiAgICAgICAgICAgIHBvaW50LmNvbHVtbiA9IHN0YXJ0LmNvbHVtbjsKICAgICAgICAgICAgaWYgKGNtcDIgPT09IDApCiAgICAgICAgICAgICAgICBwb2ludC5iaWFzID0gMTsKICAgICAgICB9CiAgICB9Cn0KCgoKZnVuY3Rpb24gY2xvbmVQb3MocG9zKSB7CiAgICByZXR1cm4ge3JvdzogcG9zLnJvdyxjb2x1bW46IHBvcy5jb2x1bW59Owp9CmZ1bmN0aW9uIGNsb25lRGVsdGEoZCkgewogICAgcmV0dXJuIHsKICAgICAgICBzdGFydDogY2xvbmVQb3MoZC5zdGFydCksCiAgICAgICAgZW5kOiBjbG9uZVBvcyhkLmVuZCksCiAgICAgICAgYWN0aW9uOiBkLmFjdGlvbiwKICAgICAgICBsaW5lczogZC5saW5lcy5zbGljZSgpCiAgICB9Owp9CmZ1bmN0aW9uIHN0cmluZ2lmeURlbHRhKGQpIHsKICAgIGQgPSBkIHx8IHRoaXM7CiAgICBpZiAoQXJyYXkuaXNBcnJheShkKSkgewogICAgICAgIHJldHVybiBkLm1hcChzdHJpbmdpZnlEZWx0YSkuam9pbigiXG4iKTsKICAgIH0KICAgIHZhciB0eXBlID0gIiI7CiAgICBpZiAoZC5hY3Rpb24pIHsKICAgICAgICB0eXBlID0gZC5hY3Rpb24gPT0gImluc2VydCIgPyAiKyIgOiAiLSI7CiAgICAgICAgdHlwZSArPSAiWyIgKyBkLmxpbmVzICsgIl0iOwogICAgfSBlbHNlIGlmIChkLnZhbHVlKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZC52YWx1ZSkpIHsKICAgICAgICAgICAgdHlwZSA9IGQudmFsdWUubWFwKHN0cmluZ2lmeVJhbmdlKS5qb2luKCJcbiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHR5cGUgPSBzdHJpbmdpZnlSYW5nZShkLnZhbHVlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZC5zdGFydCkgewogICAgICAgIHR5cGUgKz0gc3RyaW5naWZ5UmFuZ2UoZCk7CiAgICB9CiAgICBpZiAoZC5pZCB8fCBkLnJldikgewogICAgICAgIHR5cGUgKz0gIlx0KCIgKyAoZC5pZCB8fCBkLnJldikgKyAiKSI7CiAgICB9CiAgICByZXR1cm4gdHlwZTsKfQpmdW5jdGlvbiBzdHJpbmdpZnlSYW5nZShyKSB7CiAgICByZXR1cm4gci5zdGFydC5yb3cgKyAiOiIgKyByLnN0YXJ0LmNvbHVtbiAKICAgICAgICArICI9PiIgKyByLmVuZC5yb3cgKyAiOiIgKyByLmVuZC5jb2x1bW47Cn0KCmZ1bmN0aW9uIHN3YXAoZDEsIGQyKSB7CiAgICB2YXIgaTEgPSBkMS5hY3Rpb24gPT0gImluc2VydCI7CiAgICB2YXIgaTIgPSBkMi5hY3Rpb24gPT0gImluc2VydCI7CiAgICAKICAgIGlmIChpMSAmJiBpMikgewogICAgICAgIGlmIChjbXAoZDIuc3RhcnQsIGQxLmVuZCkgPj0gMCkgewogICAgICAgICAgICBzaGlmdChkMiwgZDEsIC0xKTsKICAgICAgICB9IGVsc2UgaWYgKGNtcChkMi5zdGFydCwgZDEuc3RhcnQpIDw9IDApIHsKICAgICAgICAgICAgc2hpZnQoZDEsIGQyLCArMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfSBlbHNlIGlmIChpMSAmJiAhaTIpIHsKICAgICAgICBpZiAoY21wKGQyLnN0YXJ0LCBkMS5lbmQpID49IDApIHsKICAgICAgICAgICAgc2hpZnQoZDIsIGQxLCAtMSk7CiAgICAgICAgfSBlbHNlIGlmIChjbXAoZDIuZW5kLCBkMS5zdGFydCkgPD0gMCkgewogICAgICAgICAgICBzaGlmdChkMSwgZDIsIC0xKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCFpMSAmJiBpMikgewogICAgICAgIGlmIChjbXAoZDIuc3RhcnQsIGQxLnN0YXJ0KSA+PSAwKSB7CiAgICAgICAgICAgIHNoaWZ0KGQyLCBkMSwgKzEpOwogICAgICAgIH0gZWxzZSBpZiAoY21wKGQyLnN0YXJ0LCBkMS5zdGFydCkgPD0gMCkgewogICAgICAgICAgICBzaGlmdChkMSwgZDIsICsxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCFpMSAmJiAhaTIpIHsKICAgICAgICBpZiAoY21wKGQyLnN0YXJ0LCBkMS5zdGFydCkgPj0gMCkgewogICAgICAgICAgICBzaGlmdChkMiwgZDEsICsxKTsKICAgICAgICB9IGVsc2UgaWYgKGNtcChkMi5lbmQsIGQxLnN0YXJ0KSA8PSAwKSB7CiAgICAgICAgICAgIHNoaWZ0KGQxLCBkMiwgLTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBbZDIsIGQxXTsKfQpmdW5jdGlvbiBzd2FwR3JvdXBzKGRzMSwgZHMyKSB7CiAgICBmb3IgKHZhciBpID0gZHMxLmxlbmd0aDsgaS0tOyApIHsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRzMi5sZW5ndGg7IGorKykgewogICAgICAgICAgICBpZiAoIXN3YXAoZHMxW2ldLCBkczJbal0pKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGRzMS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoai0tKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN3YXAoZHMyW2pdLCBkczFbaV0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBqID0gZHMyLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgcmV0dXJuIFtkczEsIGRzMl07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBkczEuc2VsZWN0aW9uQmVmb3JlID0gZHMyLnNlbGVjdGlvbkJlZm9yZSA9IAogICAgZHMxLnNlbGVjdGlvbkFmdGVyID0gZHMyLnNlbGVjdGlvbkFmdGVyID0gbnVsbDsKICAgIHJldHVybiBbZHMyLCBkczFdOwp9CmZ1bmN0aW9uIHhmb3JtKGQxLCBjMSkgewogICAgdmFyIGkxID0gZDEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgdmFyIGkyID0gYzEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgCiAgICBpZiAoaTEgJiYgaTIpIHsKICAgICAgICBpZiAoY21wKGQxLnN0YXJ0LCBjMS5zdGFydCkgPCAwKSB7CiAgICAgICAgICAgIHNoaWZ0KGMxLCBkMSwgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hpZnQoZDEsIGMxLCAxKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKGkxICYmICFpMikgewogICAgICAgIGlmIChjbXAoZDEuc3RhcnQsIGMxLmVuZCkgPj0gMCkgewogICAgICAgICAgICBzaGlmdChkMSwgYzEsIC0xKTsKICAgICAgICB9IGVsc2UgaWYgKGNtcChkMS5zdGFydCwgYzEuc3RhcnQpIDw9IDApIHsKICAgICAgICAgICAgc2hpZnQoYzEsIGQxLCArMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hpZnQoZDEsIFJhbmdlLmZyb21Qb2ludHMoYzEuc3RhcnQsIGQxLnN0YXJ0KSwgLTEpOwogICAgICAgICAgICBzaGlmdChjMSwgZDEsICsxKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCFpMSAmJiBpMikgewogICAgICAgIGlmIChjbXAoYzEuc3RhcnQsIGQxLmVuZCkgPj0gMCkgewogICAgICAgICAgICBzaGlmdChjMSwgZDEsIC0xKTsKICAgICAgICB9IGVsc2UgaWYgKGNtcChjMS5zdGFydCwgZDEuc3RhcnQpIDw9IDApIHsKICAgICAgICAgICAgc2hpZnQoZDEsIGMxLCArMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hpZnQoYzEsIFJhbmdlLmZyb21Qb2ludHMoZDEuc3RhcnQsIGMxLnN0YXJ0KSwgLTEpOwogICAgICAgICAgICBzaGlmdChkMSwgYzEsICsxKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCFpMSAmJiAhaTIpIHsKICAgICAgICBpZiAoY21wKGMxLnN0YXJ0LCBkMS5lbmQpID49IDApIHsKICAgICAgICAgICAgc2hpZnQoYzEsIGQxLCAtMSk7CiAgICAgICAgfSBlbHNlIGlmIChjbXAoYzEuZW5kLCBkMS5zdGFydCkgPD0gMCkgewogICAgICAgICAgICBzaGlmdChkMSwgYzEsIC0xKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgYmVmb3JlLCBhZnRlcjsKICAgICAgICAgICAgaWYgKGNtcChkMS5zdGFydCwgYzEuc3RhcnQpIDwgMCkgewogICAgICAgICAgICAgICAgYmVmb3JlID0gZDE7CiAgICAgICAgICAgICAgICBkMSA9IHNwbGl0RGVsdGEoZDEsIGMxLnN0YXJ0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY21wKGQxLmVuZCwgYzEuZW5kKSA+IDApIHsKICAgICAgICAgICAgICAgIGFmdGVyID0gc3BsaXREZWx0YShkMSwgYzEuZW5kKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2hpZnRQb3MoYzEuZW5kLCBkMS5zdGFydCwgZDEuZW5kLCAtMSk7CiAgICAgICAgICAgIGlmIChhZnRlciAmJiAhYmVmb3JlKSB7CiAgICAgICAgICAgICAgICBkMS5saW5lcyA9IGFmdGVyLmxpbmVzOwogICAgICAgICAgICAgICAgZDEuc3RhcnQgPSBhZnRlci5zdGFydDsKICAgICAgICAgICAgICAgIGQxLmVuZCA9IGFmdGVyLmVuZDsKICAgICAgICAgICAgICAgIGFmdGVyID0gZDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBbYzEsIGJlZm9yZSwgYWZ0ZXJdLmZpbHRlcihCb29sZWFuKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gW2MxLCBkMV07Cn0KICAgIApmdW5jdGlvbiBzaGlmdChkMSwgZDIsIGRpcikgewogICAgc2hpZnRQb3MoZDEuc3RhcnQsIGQyLnN0YXJ0LCBkMi5lbmQsIGRpcik7CiAgICBzaGlmdFBvcyhkMS5lbmQsIGQyLnN0YXJ0LCBkMi5lbmQsIGRpcik7Cn0KZnVuY3Rpb24gc2hpZnRQb3MocG9zLCBzdGFydCwgZW5kLCBkaXIpIHsKICAgIGlmIChwb3Mucm93ID09IChkaXIgPT0gMSA/IHN0YXJ0IDogZW5kKS5yb3cpIHsKICAgICAgICBwb3MuY29sdW1uICs9IGRpciAqIChlbmQuY29sdW1uIC0gc3RhcnQuY29sdW1uKTsKICAgIH0KICAgIHBvcy5yb3cgKz0gZGlyICogKGVuZC5yb3cgLSBzdGFydC5yb3cpOwp9CmZ1bmN0aW9uIHNwbGl0RGVsdGEoYywgcG9zKSB7CiAgICB2YXIgbGluZXMgPSBjLmxpbmVzOwogICAgdmFyIGVuZCA9IGMuZW5kOwogICAgYy5lbmQgPSBjbG9uZVBvcyhwb3MpOyAgICAKICAgIHZhciByb3dzQmVmb3JlID0gYy5lbmQucm93IC0gYy5zdGFydC5yb3c7CiAgICB2YXIgb3RoZXJMaW5lcyA9IGxpbmVzLnNwbGljZShyb3dzQmVmb3JlLCBsaW5lcy5sZW5ndGgpOwogICAgCiAgICB2YXIgY29sID0gcm93c0JlZm9yZSA/IHBvcy5jb2x1bW4gOiBwb3MuY29sdW1uIC0gYy5zdGFydC5jb2x1bW47CiAgICBsaW5lcy5wdXNoKG90aGVyTGluZXNbMF0uc3Vic3RyaW5nKDAsIGNvbCkpOwogICAgb3RoZXJMaW5lc1swXSA9IG90aGVyTGluZXNbMF0uc3Vic3RyKGNvbCkgICA7IAogICAgdmFyIHJlc3QgPSB7CiAgICAgICAgc3RhcnQ6IGNsb25lUG9zKHBvcyksCiAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgbGluZXM6IG90aGVyTGluZXMsCiAgICAgICAgYWN0aW9uOiBjLmFjdGlvbgogICAgfTsKICAgIHJldHVybiByZXN0Owp9CgpmdW5jdGlvbiBtb3ZlRGVsdGFzQnlPbmUocmVkb1N0YWNrLCBkKSB7CiAgICBkID0gY2xvbmVEZWx0YShkKTsKICAgIGZvciAodmFyIGogPSByZWRvU3RhY2subGVuZ3RoOyBqLS07KSB7CiAgICAgICAgdmFyIGRlbHRhU2V0ID0gcmVkb1N0YWNrW2pdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFTZXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHggPSBkZWx0YVNldFtpXTsKICAgICAgICAgICAgdmFyIHhmb3JtZWQgPSB4Zm9ybSh4LCBkKTsKICAgICAgICAgICAgZCA9IHhmb3JtZWRbMF07CiAgICAgICAgICAgIGlmICh4Zm9ybWVkLmxlbmd0aCAhPSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoeGZvcm1lZFsyXSkgewogICAgICAgICAgICAgICAgICAgIGRlbHRhU2V0LnNwbGljZShpICsgMSwgMSwgeGZvcm1lZFsxXSwgeGZvcm1lZFsyXSk7CiAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgheGZvcm1lZFsxXSkgewogICAgICAgICAgICAgICAgICAgIGRlbHRhU2V0LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFkZWx0YVNldC5sZW5ndGgpIHsKICAgICAgICAgICAgcmVkb1N0YWNrLnNwbGljZShqLCAxKTsgCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlZG9TdGFjazsKfQpmdW5jdGlvbiByZWJhc2VSZWRvU3RhY2socmVkb1N0YWNrLCBkZWx0YVNldHMpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsdGFTZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlbHRhcyA9IGRlbHRhU2V0c1tpXTsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRlbHRhcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICBtb3ZlRGVsdGFzQnlPbmUocmVkb1N0YWNrLCBkZWx0YXNbal0pOwogICAgICAgIH0KICAgIH0KfQoKZXhwb3J0cy5VbmRvTWFuYWdlciA9IFVuZG9NYW5hZ2VyOwoKfSk7CgpkZWZpbmUoImFjZS9sYXllci9saW5lcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwoKdmFyIExpbmVzID0gZnVuY3Rpb24oZWxlbWVudCwgY2FudmFzSGVpZ2h0KSB7CiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwogICAgdGhpcy5jYW52YXNIZWlnaHQgPSBjYW52YXNIZWlnaHQgfHwgNTAwMDAwOwogICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICh0aGlzLmNhbnZhc0hlaWdodCAqIDIpICsgInB4IjsKICAgIAogICAgdGhpcy5jZWxscyA9IFtdOwogICAgdGhpcy5jZWxsQ2FjaGUgPSBbXTsKICAgIHRoaXMuJG9mZnNldENvZWZmaWNpZW50ID0gMDsKfTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5tb3ZlQ29udGFpbmVyID0gZnVuY3Rpb24oY29uZmlnKSB7CiAgICAgICAgZG9tLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC0oKGNvbmZpZy5maXJzdFJvd1NjcmVlbiAqIGNvbmZpZy5saW5lSGVpZ2h0KSAlIHRoaXMuY2FudmFzSGVpZ2h0KSAtIGNvbmZpZy5vZmZzZXQgKiB0aGlzLiRvZmZzZXRDb2VmZmljaWVudCk7CiAgICB9OyAgICAKICAgIAogICAgdGhpcy5wYWdlQ2hhbmdlZCA9IGZ1bmN0aW9uKG9sZENvbmZpZywgbmV3Q29uZmlnKSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgTWF0aC5mbG9vcigob2xkQ29uZmlnLmZpcnN0Um93U2NyZWVuICogb2xkQ29uZmlnLmxpbmVIZWlnaHQpIC8gdGhpcy5jYW52YXNIZWlnaHQpICE9PQogICAgICAgICAgICBNYXRoLmZsb29yKChuZXdDb25maWcuZmlyc3RSb3dTY3JlZW4gKiBuZXdDb25maWcubGluZUhlaWdodCkgLyB0aGlzLmNhbnZhc0hlaWdodCkKICAgICAgICApOwogICAgfTsKICAgIAogICAgdGhpcy5jb21wdXRlTGluZVRvcCA9IGZ1bmN0aW9uKHJvdywgY29uZmlnLCBzZXNzaW9uKSB7CiAgICAgICAgdmFyIHNjcmVlblRvcCA9IGNvbmZpZy5maXJzdFJvd1NjcmVlbiAqIGNvbmZpZy5saW5lSGVpZ2h0OwogICAgICAgIHZhciBzY3JlZW5QYWdlID0gTWF0aC5mbG9vcihzY3JlZW5Ub3AgLyB0aGlzLmNhbnZhc0hlaWdodCk7CiAgICAgICAgdmFyIGxpbmVUb3AgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Sb3cocm93LCAwKSAqIGNvbmZpZy5saW5lSGVpZ2h0OwogICAgICAgIHJldHVybiBsaW5lVG9wIC0gKHNjcmVlblBhZ2UgKiB0aGlzLmNhbnZhc0hlaWdodCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNvbXB1dGVMaW5lSGVpZ2h0ID0gZnVuY3Rpb24ocm93LCBjb25maWcsIHNlc3Npb24pIHsKICAgICAgICByZXR1cm4gY29uZmlnLmxpbmVIZWlnaHQgKiBzZXNzaW9uLmdldFJvd0xlbmd0aChyb3cpOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRMZW5ndGggPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5jZWxscy5sZW5ndGg7CiAgICB9OwogICAgCiAgICB0aGlzLmdldCA9IGZ1bmN0aW9uKGluZGV4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbHNbaW5kZXhdOwogICAgfTsKICAgIAogICAgdGhpcy5zaGlmdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGNhY2hlQ2VsbCh0aGlzLmNlbGxzLnNoaWZ0KCkpOwogICAgfTsKICAgIAogICAgdGhpcy5wb3AgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRjYWNoZUNlbGwodGhpcy5jZWxscy5wb3AoKSk7CiAgICB9OwogICAgCiAgICB0aGlzLnB1c2ggPSBmdW5jdGlvbihjZWxsKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2VsbCkpIHsKICAgICAgICAgICAgdGhpcy5jZWxscy5wdXNoLmFwcGx5KHRoaXMuY2VsbHMsIGNlbGwpOwogICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBkb20uY3JlYXRlRnJhZ21lbnQodGhpcy5lbGVtZW50KTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNlbGwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNlbGxbaV0uZWxlbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5jZWxscy5wdXNoKGNlbGwpOwogICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2VsbC5lbGVtZW50KTsKICAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy51bnNoaWZ0ID0gZnVuY3Rpb24oY2VsbCkgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNlbGwpKSB7CiAgICAgICAgICAgIHRoaXMuY2VsbHMudW5zaGlmdC5hcHBseSh0aGlzLmNlbGxzLCBjZWxsKTsKICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gZG9tLmNyZWF0ZUZyYWdtZW50KHRoaXMuZWxlbWVudCk7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjZWxsLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjZWxsW2ldLmVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCkKICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5pbnNlcnRCZWZvcmUoZnJhZ21lbnQsIHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5jZWxscy51bnNoaWZ0KGNlbGwpOwogICAgICAgICAgICB0aGlzLmVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJhZnRlcmJlZ2luIiwgY2VsbC5lbGVtZW50KTsKICAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5sYXN0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuY2VsbHMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gdGhpcy5jZWxsc1t0aGlzLmNlbGxzLmxlbmd0aC0xXTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy4kY2FjaGVDZWxsID0gZnVuY3Rpb24oY2VsbCkgewogICAgICAgIGlmICghY2VsbCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAKICAgICAgICBjZWxsLmVsZW1lbnQucmVtb3ZlKCk7CiAgICAgICAgdGhpcy5jZWxsQ2FjaGUucHVzaChjZWxsKTsKICAgIH07CiAgICAKICAgIHRoaXMuY3JlYXRlQ2VsbCA9IGZ1bmN0aW9uKHJvdywgY29uZmlnLCBzZXNzaW9uLCBpbml0RWxlbWVudCkgewogICAgICAgIHZhciBjZWxsID0gdGhpcy5jZWxsQ2FjaGUucG9wKCk7CiAgICAgICAgaWYgKCFjZWxsKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICBpZiAoaW5pdEVsZW1lbnQpCiAgICAgICAgICAgICAgICBpbml0RWxlbWVudChlbGVtZW50KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNlbGwgPSB7CiAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50LAogICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICByb3c6IHJvdwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBjZWxsLnJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICByZXR1cm4gY2VsbDsKICAgIH07CiAgICAKfSkuY2FsbChMaW5lcy5wcm90b3R5cGUpOwoKZXhwb3J0cy5MaW5lcyA9IExpbmVzOwoKfSk7CgpkZWZpbmUoImFjZS9sYXllci9ndXR0ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xheWVyL2xpbmVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKdmFyIExpbmVzID0gcmVxdWlyZSgiLi9saW5lcyIpLkxpbmVzOwoKdmFyIEd1dHRlciA9IGZ1bmN0aW9uKHBhcmVudEVsKSB7CiAgICB0aGlzLmVsZW1lbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfZ3V0dGVyLWxheWVyIjsKICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CiAgICB0aGlzLnNldFNob3dGb2xkV2lkZ2V0cyh0aGlzLiRzaG93Rm9sZFdpZGdldHMpOwogICAgCiAgICB0aGlzLmd1dHRlcldpZHRoID0gMDsKCiAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IFtdOwogICAgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMgPSB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucy5iaW5kKHRoaXMpOwogICAgCiAgICB0aGlzLiRsaW5lcyA9IG5ldyBMaW5lcyh0aGlzLmVsZW1lbnQpOwogICAgdGhpcy4kbGluZXMuJG9mZnNldENvZWZmaWNpZW50ID0gMTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CgogICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLnNlc3Npb24pCiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiR1cGRhdGVBbm5vdGF0aW9ucyk7CiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKICAgICAgICBpZiAoc2Vzc2lvbikKICAgICAgICAgICAgc2Vzc2lvbi5vbigiY2hhbmdlIiwgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMpOwogICAgfTsKCiAgICB0aGlzLmFkZEd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewogICAgICAgIGlmICh3aW5kb3cuY29uc29sZSkKICAgICAgICAgICAgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2FybigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5hZGRHdXR0ZXJEZWNvcmF0aW9uIik7CiAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOwogICAgfTsKCiAgICB0aGlzLnJlbW92ZUd1dHRlckRlY29yYXRpb24gPSBmdW5jdGlvbihyb3csIGNsYXNzTmFtZSkgewogICAgICAgIGlmICh3aW5kb3cuY29uc29sZSkKICAgICAgICAgICAgY29uc29sZS53YXJuICYmIGNvbnNvbGUud2FybigiZGVwcmVjYXRlZCB1c2Ugc2Vzc2lvbi5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uIik7CiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOwogICAgfTsKCiAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHsKICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucyA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTsKICAgICAgICAgICAgdmFyIHJvdyA9IGFubm90YXRpb24ucm93OwogICAgICAgICAgICB2YXIgcm93SW5mbyA9IHRoaXMuJGFubm90YXRpb25zW3Jvd107CiAgICAgICAgICAgIGlmICghcm93SW5mbykKICAgICAgICAgICAgICAgIHJvd0luZm8gPSB0aGlzLiRhbm5vdGF0aW9uc1tyb3ddID0ge3RleHQ6IFtdfTsKICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGFubm9UZXh0ID0gYW5ub3RhdGlvbi50ZXh0OwogICAgICAgICAgICBhbm5vVGV4dCA9IGFubm9UZXh0ID8gbGFuZy5lc2NhcGVIVE1MKGFubm9UZXh0KSA6IGFubm90YXRpb24uaHRtbCB8fCAiIjsKCiAgICAgICAgICAgIGlmIChyb3dJbmZvLnRleHQuaW5kZXhPZihhbm5vVGV4dCkgPT09IC0xKQogICAgICAgICAgICAgICAgcm93SW5mby50ZXh0LnB1c2goYW5ub1RleHQpOwoKICAgICAgICAgICAgdmFyIHR5cGUgPSBhbm5vdGF0aW9uLnR5cGU7CiAgICAgICAgICAgIGlmICh0eXBlID09ICJlcnJvciIpCiAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX2Vycm9yIjsKICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAid2FybmluZyIgJiYgcm93SW5mby5jbGFzc05hbWUgIT0gIiBhY2VfZXJyb3IiKQogICAgICAgICAgICAgICAgcm93SW5mby5jbGFzc05hbWUgPSAiIGFjZV93YXJuaW5nIjsKICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAiaW5mbyIgJiYgKCFyb3dJbmZvLmNsYXNzTmFtZSkpCiAgICAgICAgICAgICAgICByb3dJbmZvLmNsYXNzTmFtZSA9ICIgYWNlX2luZm8iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kdXBkYXRlQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAoZGVsdGEpIHsKICAgICAgICBpZiAoIXRoaXMuJGFubm90YXRpb25zLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBmaXJzdFJvdyA9IGRlbHRhLnN0YXJ0LnJvdzsKICAgICAgICB2YXIgbGVuID0gZGVsdGEuZW5kLnJvdyAtIGZpcnN0Um93OwogICAgICAgIGlmIChsZW4gPT09IDApIHsKICAgICAgICB9IGVsc2UgaWYgKGRlbHRhLmFjdGlvbiA9PSAncmVtb3ZlJykgewogICAgICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UoZmlyc3RSb3csIGxlbiArIDEsIG51bGwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpOwogICAgICAgICAgICBhcmdzLnVuc2hpZnQoZmlyc3RSb3csIDEpOwogICAgICAgICAgICB0aGlzLiRhbm5vdGF0aW9ucy5zcGxpY2UuYXBwbHkodGhpcy4kYW5ub3RhdGlvbnMsIGFyZ3MpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy51cGRhdGUgPSBmdW5jdGlvbihjb25maWcpIHsKICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKICAgICAgICAKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICB2YXIgZmlyc3RSb3cgPSBjb25maWcuZmlyc3RSb3c7CiAgICAgICAgdmFyIGxhc3RSb3cgPSBNYXRoLm1pbihjb25maWcubGFzdFJvdyArIGNvbmZpZy5ndXR0ZXJPZmZzZXQsICAvLyBuZWVkZWQgdG8gY29tcGVuc2F0ZSBmb3IgaG9yIHNjb2xsYmFyCiAgICAgICAgICAgIHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICAgICAgCiAgICAgICAgdGhpcy5vbGRMYXN0Um93ID0gbGFzdFJvdzsKICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKICAgICAgICAKICAgICAgICB0aGlzLiRsaW5lcy5tb3ZlQ29udGFpbmVyKGNvbmZpZyk7CiAgICAgICAgdGhpcy4kdXBkYXRlQ3Vyc29yUm93KCk7CiAgICAgICAgICAgIAogICAgICAgIHZhciBmb2xkID0gc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUoZmlyc3RSb3cpOwogICAgICAgIHZhciBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOiBJbmZpbml0eTsKCiAgICAgICAgdmFyIGNlbGwgPSBudWxsOwogICAgICAgIHZhciBpbmRleCA9IC0xOwogICAgICAgIHZhciByb3cgPSBmaXJzdFJvdzsKICAgICAgICAKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBpZiAocm93ID4gZm9sZFN0YXJ0KSB7CiAgICAgICAgICAgICAgICByb3cgPSBmb2xkLmVuZC5yb3cgKyAxOwogICAgICAgICAgICAgICAgZm9sZCA9IHNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZCk7CiAgICAgICAgICAgICAgICBmb2xkU3RhcnQgPSBmb2xkID8gZm9sZC5zdGFydC5yb3cgOiBJbmZpbml0eTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykgewogICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuJGxpbmVzLmdldExlbmd0aCgpID4gaW5kZXggKyAxKQogICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpbmVzLnBvcCgpOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNlbGwgPSB0aGlzLiRsaW5lcy5nZXQoKytpbmRleCk7CiAgICAgICAgICAgIGlmIChjZWxsKSB7CiAgICAgICAgICAgICAgICBjZWxsLnJvdyA9IHJvdzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNlbGwgPSB0aGlzLiRsaW5lcy5jcmVhdGVDZWxsKHJvdywgY29uZmlnLCB0aGlzLnNlc3Npb24sIG9uQ3JlYXRlQ2VsbCk7CiAgICAgICAgICAgICAgICB0aGlzLiRsaW5lcy5wdXNoKGNlbGwpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLiRyZW5kZXJDZWxsKGNlbGwsIGNvbmZpZywgZm9sZCwgcm93KTsKICAgICAgICAgICAgcm93Kys7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKTsKICAgICAgICB0aGlzLiR1cGRhdGVHdXR0ZXJXaWR0aChjb25maWcpOwogICAgfTsKCiAgICB0aGlzLiR1cGRhdGVHdXR0ZXJXaWR0aCA9IGZ1bmN0aW9uKGNvbmZpZykgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIAogICAgICAgIHZhciBndXR0ZXJSZW5kZXJlciA9IHNlc3Npb24uZ3V0dGVyUmVuZGVyZXIgfHwgdGhpcy4kcmVuZGVyZXI7CiAgICAgICAgCiAgICAgICAgdmFyIGZpcnN0TGluZU51bWJlciA9IHNlc3Npb24uJGZpcnN0TGluZU51bWJlcjsKICAgICAgICB2YXIgbGFzdExpbmVUZXh0ID0gdGhpcy4kbGluZXMubGFzdCgpID8gdGhpcy4kbGluZXMubGFzdCgpLnRleHQgOiAiIjsKICAgICAgICAKICAgICAgICBpZiAodGhpcy4kZml4ZWRXaWR0aCB8fCBzZXNzaW9uLiR1c2VXcmFwTW9kZSkKICAgICAgICAgICAgbGFzdExpbmVUZXh0ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKSArIGZpcnN0TGluZU51bWJlciAtIDE7CgogICAgICAgIHZhciBndXR0ZXJXaWR0aCA9IGd1dHRlclJlbmRlcmVyIAogICAgICAgICAgICA/IGd1dHRlclJlbmRlcmVyLmdldFdpZHRoKHNlc3Npb24sIGxhc3RMaW5lVGV4dCwgY29uZmlnKQogICAgICAgICAgICA6IGxhc3RMaW5lVGV4dC50b1N0cmluZygpLmxlbmd0aCAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKICAgICAgICAKICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTsKICAgICAgICBndXR0ZXJXaWR0aCArPSBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OwogICAgICAgIGlmIChndXR0ZXJXaWR0aCAhPT0gdGhpcy5ndXR0ZXJXaWR0aCAmJiAhaXNOYU4oZ3V0dGVyV2lkdGgpKSB7CiAgICAgICAgICAgIHRoaXMuZ3V0dGVyV2lkdGggPSBndXR0ZXJXaWR0aDsKICAgICAgICAgICAgdGhpcy5lbGVtZW50LnBhcmVudE5vZGUuc3R5bGUud2lkdGggPSAKICAgICAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gTWF0aC5jZWlsKHRoaXMuZ3V0dGVyV2lkdGgpICsgInB4IjsKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJjaGFuZ2VHdXR0ZXJXaWR0aCIsIGd1dHRlcldpZHRoKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLiR1cGRhdGVDdXJzb3JSb3cgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgCiAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTsKICAgICAgICBpZiAodGhpcy4kY3Vyc29yUm93ID09PSBwb3NpdGlvbi5yb3cpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAKICAgICAgICB0aGlzLiRjdXJzb3JSb3cgPSBwb3NpdGlvbi5yb3c7CiAgICB9OwogICAgCiAgICB0aGlzLnVwZGF0ZUxpbmVIaWdobGlnaHQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgcm93ID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5jdXJzb3Iucm93OwogICAgICAgIHRoaXMuJGN1cnNvclJvdyA9IHJvdzsKCiAgICAgICAgaWYgKHRoaXMuJGN1cnNvckNlbGwgJiYgdGhpcy4kY3Vyc29yQ2VsbC5yb3cgPT0gcm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuJGN1cnNvckNlbGwpCiAgICAgICAgICAgIHRoaXMuJGN1cnNvckNlbGwuZWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLiRjdXJzb3JDZWxsLmVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUgIiwgIiIpOwogICAgICAgIHZhciBjZWxscyA9IHRoaXMuJGxpbmVzLmNlbGxzOwogICAgICAgIHRoaXMuJGN1cnNvckNlbGwgPSBudWxsOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNlbGwgPSBjZWxsc1tpXTsKICAgICAgICAgICAgaWYgKGNlbGwucm93ID49IHRoaXMuJGN1cnNvclJvdykgewogICAgICAgICAgICAgICAgaWYgKGNlbGwucm93ID4gdGhpcy4kY3Vyc29yUm93KSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZExpbmUodGhpcy4kY3Vyc29yUm93KTsKICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgZm9sZCAmJiBmb2xkLnN0YXJ0LnJvdyA9PSBjZWxsc1tpIC0gMV0ucm93KQogICAgICAgICAgICAgICAgICAgICAgICBjZWxsID0gY2VsbHNbaSAtIDFdOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjZWxsLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUgIiArIGNlbGwuZWxlbWVudC5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICB0aGlzLiRjdXJzb3JDZWxsID0gY2VsbDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5zY3JvbGxMaW5lcyA9IGZ1bmN0aW9uKGNvbmZpZykgewogICAgICAgIHZhciBvbGRDb25maWcgPSB0aGlzLmNvbmZpZzsKICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKICAgICAgICAKICAgICAgICB0aGlzLiR1cGRhdGVDdXJzb3JSb3coKTsKICAgICAgICBpZiAodGhpcy4kbGluZXMucGFnZUNoYW5nZWQob2xkQ29uZmlnLCBjb25maWcpKQogICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoY29uZmlnKTsKICAgICAgICAKICAgICAgICB0aGlzLiRsaW5lcy5tb3ZlQ29udGFpbmVyKGNvbmZpZyk7CgogICAgICAgIHZhciBsYXN0Um93ID0gTWF0aC5taW4oY29uZmlnLmxhc3RSb3cgKyBjb25maWcuZ3V0dGVyT2Zmc2V0LCAgLy8gbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIGhvciBzY29sbGJhcgogICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgb2xkTGFzdFJvdyA9IHRoaXMub2xkTGFzdFJvdzsKICAgICAgICB0aGlzLm9sZExhc3RSb3cgPSBsYXN0Um93OwogICAgICAgIAogICAgICAgIGlmICghb2xkQ29uZmlnIHx8IG9sZExhc3RSb3cgPCBjb25maWcuZmlyc3RSb3cpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpOwoKICAgICAgICBpZiAobGFzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdykKICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7CgogICAgICAgIGlmIChvbGRDb25maWcuZmlyc3RSb3cgPCBjb25maWcuZmlyc3RSb3cpCiAgICAgICAgICAgIGZvciAodmFyIHJvdz10aGlzLnNlc3Npb24uZ2V0Rm9sZGVkUm93Q291bnQob2xkQ29uZmlnLmZpcnN0Um93LCBjb25maWcuZmlyc3RSb3cgLSAxKTsgcm93PjA7IHJvdy0tKQogICAgICAgICAgICAgICAgdGhpcy4kbGluZXMuc2hpZnQoKTsKCiAgICAgICAgaWYgKG9sZExhc3RSb3cgPiBsYXN0Um93KQogICAgICAgICAgICBmb3IgKHZhciByb3c9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGxhc3RSb3cgKyAxLCBvbGRMYXN0Um93KTsgcm93PjA7IHJvdy0tKQogICAgICAgICAgICAgICAgdGhpcy4kbGluZXMucG9wKCk7CgogICAgICAgIGlmIChjb25maWcuZmlyc3RSb3cgPCBvbGRDb25maWcuZmlyc3RSb3cpIHsKICAgICAgICAgICAgdGhpcy4kbGluZXMudW5zaGlmdCh0aGlzLiRyZW5kZXJMaW5lcyhjb25maWcsIGNvbmZpZy5maXJzdFJvdywgb2xkQ29uZmlnLmZpcnN0Um93IC0gMSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGxhc3RSb3cgPiBvbGRMYXN0Um93KSB7CiAgICAgICAgICAgIHRoaXMuJGxpbmVzLnB1c2godGhpcy4kcmVuZGVyTGluZXMoY29uZmlnLCBvbGRMYXN0Um93ICsgMSwgbGFzdFJvdykpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLnVwZGF0ZUxpbmVIaWdobGlnaHQoKTsKICAgICAgICAKICAgICAgICB0aGlzLl9zaWduYWwoImFmdGVyUmVuZGVyIik7CiAgICAgICAgdGhpcy4kdXBkYXRlR3V0dGVyV2lkdGgoY29uZmlnKTsKICAgIH07CgogICAgdGhpcy4kcmVuZGVyTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgdmFyIGZyYWdtZW50ID0gW107CiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93OwogICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93KTsKICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgewogICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxOwogICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpOwogICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgdmFyIGNlbGwgPSB0aGlzLiRsaW5lcy5jcmVhdGVDZWxsKHJvdywgY29uZmlnLCB0aGlzLnNlc3Npb24sIG9uQ3JlYXRlQ2VsbCk7CiAgICAgICAgICAgIHRoaXMuJHJlbmRlckNlbGwoY2VsbCwgY29uZmlnLCBmb2xkTGluZSwgcm93KTsKICAgICAgICAgICAgZnJhZ21lbnQucHVzaChjZWxsKTsKCiAgICAgICAgICAgIHJvdysrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICB9OwogICAgCiAgICB0aGlzLiRyZW5kZXJDZWxsID0gZnVuY3Rpb24oY2VsbCwgY29uZmlnLCBmb2xkLCByb3cpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGNlbGwuZWxlbWVudDsKICAgICAgICAKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICAKICAgICAgICB2YXIgdGV4dE5vZGUgPSBlbGVtZW50LmNoaWxkTm9kZXNbMF07CiAgICAgICAgdmFyIGZvbGRXaWRnZXQgPSBlbGVtZW50LmNoaWxkTm9kZXNbMV07CgogICAgICAgIHZhciBmaXJzdExpbmVOdW1iZXIgPSBzZXNzaW9uLiRmaXJzdExpbmVOdW1iZXI7CiAgICAgICAgCiAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gc2Vzc2lvbi4kYnJlYWtwb2ludHM7CiAgICAgICAgdmFyIGRlY29yYXRpb25zID0gc2Vzc2lvbi4kZGVjb3JhdGlvbnM7CiAgICAgICAgdmFyIGd1dHRlclJlbmRlcmVyID0gc2Vzc2lvbi5ndXR0ZXJSZW5kZXJlciB8fCB0aGlzLiRyZW5kZXJlcjsKICAgICAgICB2YXIgZm9sZFdpZGdldHMgPSB0aGlzLiRzaG93Rm9sZFdpZGdldHMgJiYgc2Vzc2lvbi5mb2xkV2lkZ2V0czsKICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZCA/IGZvbGQuc3RhcnQucm93IDogTnVtYmVyLk1BWF9WQUxVRTsKICAgICAgICAKICAgICAgICB2YXIgY2xhc3NOYW1lID0gImFjZV9ndXR0ZXItY2VsbCAiOwogICAgICAgIGlmICh0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lKSB7CiAgICAgICAgICAgIGlmIChyb3cgPT0gdGhpcy4kY3Vyc29yUm93IHx8IChmb2xkICYmIHJvdyA8IHRoaXMuJGN1cnNvclJvdyAmJiByb3cgPj0gZm9sZFN0YXJ0ICYmICB0aGlzLiRjdXJzb3JSb3cgPD0gZm9sZC5lbmQucm93KSkgewogICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9ICJhY2VfZ3V0dGVyLWFjdGl2ZS1saW5lICI7CiAgICAgICAgICAgICAgICBpZiAodGhpcy4kY3Vyc29yQ2VsbCAhPSBjZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJGN1cnNvckNlbGwpCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGN1cnNvckNlbGwuZWxlbWVudC5jbGFzc05hbWUgPSB0aGlzLiRjdXJzb3JDZWxsLmVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoImFjZV9ndXR0ZXItYWN0aXZlLWxpbmUgIiwgIiIpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuJGN1cnNvckNlbGwgPSBjZWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmIChicmVha3BvaW50c1tyb3ddKQogICAgICAgICAgICBjbGFzc05hbWUgKz0gYnJlYWtwb2ludHNbcm93XTsKICAgICAgICBpZiAoZGVjb3JhdGlvbnNbcm93XSkKICAgICAgICAgICAgY2xhc3NOYW1lICs9IGRlY29yYXRpb25zW3Jvd107CiAgICAgICAgaWYgKHRoaXMuJGFubm90YXRpb25zW3Jvd10pCiAgICAgICAgICAgIGNsYXNzTmFtZSArPSB0aGlzLiRhbm5vdGF0aW9uc1tyb3ddLmNsYXNzTmFtZTsKICAgICAgICBpZiAoZWxlbWVudC5jbGFzc05hbWUgIT0gY2xhc3NOYW1lKQogICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKCiAgICAgICAgaWYgKGZvbGRXaWRnZXRzKSB7CiAgICAgICAgICAgIHZhciBjID0gZm9sZFdpZGdldHNbcm93XTsKICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkKICAgICAgICAgICAgICAgIGMgPSBmb2xkV2lkZ2V0c1tyb3ddID0gc2Vzc2lvbi5nZXRGb2xkV2lkZ2V0KHJvdyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoYykgewogICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gImFjZV9mb2xkLXdpZGdldCBhY2VfIiArIGM7CiAgICAgICAgICAgIGlmIChjID09ICJzdGFydCIgJiYgcm93ID09IGZvbGRTdGFydCAmJiByb3cgPCBmb2xkLmVuZC5yb3cpCiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gIiBhY2VfY2xvc2VkIjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9ICIgYWNlX29wZW4iOwogICAgICAgICAgICBpZiAoZm9sZFdpZGdldC5jbGFzc05hbWUgIT0gY2xhc3NOYW1lKQogICAgICAgICAgICAgICAgZm9sZFdpZGdldC5jbGFzc05hbWUgPSBjbGFzc05hbWU7CgogICAgICAgICAgICB2YXIgZm9sZEhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKICAgICAgICAgICAgZG9tLnNldFN0eWxlKGZvbGRXaWRnZXQuc3R5bGUsICJoZWlnaHQiLCBmb2xkSGVpZ2h0KTsKICAgICAgICAgICAgZG9tLnNldFN0eWxlKGZvbGRXaWRnZXQuc3R5bGUsICJkaXNwbGF5IiwgImlubGluZS1ibG9jayIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChmb2xkV2lkZ2V0KSB7CiAgICAgICAgICAgICAgICBkb20uc2V0U3R5bGUoZm9sZFdpZGdldC5zdHlsZSwgImRpc3BsYXkiLCAibm9uZSIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciB0ZXh0ID0gKGd1dHRlclJlbmRlcmVyCiAgICAgICAgICAgID8gZ3V0dGVyUmVuZGVyZXIuZ2V0VGV4dChzZXNzaW9uLCByb3cpCiAgICAgICAgICAgIDogcm93ICsgZmlyc3RMaW5lTnVtYmVyKS50b1N0cmluZygpOwogICAgICAgICAgICAKICAgICAgICBpZiAodGV4dCAhPT0gdGV4dE5vZGUuZGF0YSkgewogICAgICAgICAgICB0ZXh0Tm9kZS5kYXRhID0gdGV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZG9tLnNldFN0eWxlKGNlbGwuZWxlbWVudC5zdHlsZSwgImhlaWdodCIsIHRoaXMuJGxpbmVzLmNvbXB1dGVMaW5lSGVpZ2h0KHJvdywgY29uZmlnLCBzZXNzaW9uKSArICJweCIpOwogICAgICAgIGRvbS5zZXRTdHlsZShjZWxsLmVsZW1lbnQuc3R5bGUsICJ0b3AiLCB0aGlzLiRsaW5lcy5jb21wdXRlTGluZVRvcChyb3csIGNvbmZpZywgc2Vzc2lvbikgKyAicHgiKTsKICAgICAgICAKICAgICAgICBjZWxsLnRleHQgPSB0ZXh0OwogICAgICAgIHJldHVybiBjZWxsOwogICAgfTsKCiAgICB0aGlzLiRmaXhlZFdpZHRoID0gZmFsc2U7CiAgICAKICAgIHRoaXMuJGhpZ2hsaWdodEd1dHRlckxpbmUgPSB0cnVlOwogICAgdGhpcy4kcmVuZGVyZXIgPSAiIjsKICAgIHRoaXMuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZSA9IGZ1bmN0aW9uKGhpZ2hsaWdodEd1dHRlckxpbmUpIHsKICAgICAgICB0aGlzLiRoaWdobGlnaHRHdXR0ZXJMaW5lID0gaGlnaGxpZ2h0R3V0dGVyTGluZTsKICAgIH07CiAgICAKICAgIHRoaXMuJHNob3dMaW5lTnVtYmVycyA9IHRydWU7CiAgICB0aGlzLiRyZW5kZXJlciA9ICIiOwogICAgdGhpcy5zZXRTaG93TGluZU51bWJlcnMgPSBmdW5jdGlvbihzaG93KSB7CiAgICAgICAgdGhpcy4kcmVuZGVyZXIgPSAhc2hvdyAmJiB7CiAgICAgICAgICAgIGdldFdpZHRoOiBmdW5jdGlvbigpIHtyZXR1cm4gMDt9LAogICAgICAgICAgICBnZXRUZXh0OiBmdW5jdGlvbigpIHtyZXR1cm4gIiI7fQogICAgICAgIH07CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNob3dMaW5lTnVtYmVycyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRzaG93TGluZU51bWJlcnM7CiAgICB9OwogICAgCiAgICB0aGlzLiRzaG93Rm9sZFdpZGdldHMgPSB0cnVlOwogICAgdGhpcy5zZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbihzaG93KSB7CiAgICAgICAgaWYgKHNob3cpCiAgICAgICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2VfZm9sZGluZy1lbmFibGVkIik7CiAgICAgICAgZWxzZQogICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2ZvbGRpbmctZW5hYmxlZCIpOwoKICAgICAgICB0aGlzLiRzaG93Rm9sZFdpZGdldHMgPSBzaG93OwogICAgICAgIHRoaXMuJHBhZGRpbmcgPSBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRTaG93Rm9sZFdpZGdldHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kc2hvd0ZvbGRXaWRnZXRzOwogICAgfTsKCiAgICB0aGlzLiRjb21wdXRlUGFkZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpCiAgICAgICAgICAgIHJldHVybiB7bGVmdDogMCwgcmlnaHQ6IDB9OwogICAgICAgIHZhciBzdHlsZSA9IGRvbS5jb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudC5maXJzdENoaWxkKTsKICAgICAgICB0aGlzLiRwYWRkaW5nID0ge307CiAgICAgICAgdGhpcy4kcGFkZGluZy5sZWZ0ID0gKHBhcnNlSW50KHN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMCkKICAgICAgICAgICAgKyAocGFyc2VJbnQoc3R5bGUucGFkZGluZ0xlZnQpIHx8IDApICsgMTsKICAgICAgICB0aGlzLiRwYWRkaW5nLnJpZ2h0ID0gKHBhcnNlSW50KHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgpIHx8IDApCiAgICAgICAgICAgICsgKHBhcnNlSW50KHN0eWxlLnBhZGRpbmdSaWdodCkgfHwgMCk7CiAgICAgICAgcmV0dXJuIHRoaXMuJHBhZGRpbmc7CiAgICB9OwoKICAgIHRoaXMuZ2V0UmVnaW9uID0gZnVuY3Rpb24ocG9pbnQpIHsKICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmcgfHwgdGhpcy4kY29tcHV0ZVBhZGRpbmcoKTsKICAgICAgICB2YXIgcmVjdCA9IHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBpZiAocG9pbnQueCA8IHBhZGRpbmcubGVmdCArIHJlY3QubGVmdCkKICAgICAgICAgICAgcmV0dXJuICJtYXJrZXJzIjsKICAgICAgICBpZiAodGhpcy4kc2hvd0ZvbGRXaWRnZXRzICYmIHBvaW50LnggPiByZWN0LnJpZ2h0IC0gcGFkZGluZy5yaWdodCkKICAgICAgICAgICAgcmV0dXJuICJmb2xkV2lkZ2V0cyI7CiAgICB9OwoKfSkuY2FsbChHdXR0ZXIucHJvdG90eXBlKTsKCmZ1bmN0aW9uIG9uQ3JlYXRlQ2VsbChlbGVtZW50KSB7CiAgICB2YXIgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7CiAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHROb2RlKTsKICAgIAogICAgdmFyIGZvbGRXaWRnZXQgPSBkb20uY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgZWxlbWVudC5hcHBlbmRDaGlsZChmb2xkV2lkZ2V0KTsKICAgIAogICAgcmV0dXJuIGVsZW1lbnQ7Cn0KCmV4cG9ydHMuR3V0dGVyID0gR3V0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9sYXllci9tYXJrZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKCnZhciBNYXJrZXIgPSBmdW5jdGlvbihwYXJlbnRFbCkgewogICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2VfbGF5ZXIgYWNlX21hcmtlci1sYXllciI7CiAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHBhZGRpbmcgPSAwOwoKICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZzsKICAgIH07CiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdGhpcy5zZXNzaW9uID0gc2Vzc2lvbjsKICAgIH07CiAgICAKICAgIHRoaXMuc2V0TWFya2VycyA9IGZ1bmN0aW9uKG1hcmtlcnMpIHsKICAgICAgICB0aGlzLm1hcmtlcnMgPSBtYXJrZXJzOwogICAgfTsKICAgIAogICAgdGhpcy5lbHQgPSBmdW5jdGlvbihjbGFzc05hbWUsIGNzcykgewogICAgICAgIHZhciB4ID0gdGhpcy5pICE9IC0xICYmIHRoaXMuZWxlbWVudC5jaGlsZE5vZGVzW3RoaXMuaV07CiAgICAgICAgaWYgKCF4KSB7CiAgICAgICAgICAgIHggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHgpOwogICAgICAgICAgICB0aGlzLmkgPSAtMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmkrKzsKICAgICAgICB9CiAgICAgICAgeC5zdHlsZS5jc3NUZXh0ID0gY3NzOwogICAgICAgIHguY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgfTsKCiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgewogICAgICAgIGlmICghY29uZmlnKSByZXR1cm47CgogICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnOwoKICAgICAgICB0aGlzLmkgPSAwOwogICAgICAgIHZhciBodG1sOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLm1hcmtlcnMpIHsKICAgICAgICAgICAgdmFyIG1hcmtlciA9IHRoaXMubWFya2Vyc1trZXldOwoKICAgICAgICAgICAgaWYgKCFtYXJrZXIucmFuZ2UpIHsKICAgICAgICAgICAgICAgIG1hcmtlci51cGRhdGUoaHRtbCwgdGhpcywgdGhpcy5zZXNzaW9uLCBjb25maWcpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByYW5nZSA9IG1hcmtlci5yYW5nZS5jbGlwUm93cyhjb25maWcuZmlyc3RSb3csIGNvbmZpZy5sYXN0Um93KTsKICAgICAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgY29udGludWU7CgogICAgICAgICAgICByYW5nZSA9IHJhbmdlLnRvU2NyZWVuUmFuZ2UodGhpcy5zZXNzaW9uKTsKICAgICAgICAgICAgaWYgKG1hcmtlci5yZW5kZXJlcikgewogICAgICAgICAgICAgICAgdmFyIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IHRoaXMuJHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CiAgICAgICAgICAgICAgICBtYXJrZXIucmVuZGVyZXIoaHRtbCwgcmFuZ2UsIGxlZnQsIHRvcCwgY29uZmlnKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIudHlwZSA9PSAiZnVsbExpbmUiKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRyYXdGdWxsTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1hcmtlci50eXBlID09ICJzY3JlZW5MaW5lIikgewogICAgICAgICAgICAgICAgdGhpcy5kcmF3U2NyZWVuTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9PSAidGV4dCIpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3VGV4dE1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhd011bHRpTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6LCBjb25maWcpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlcihodG1sLCByYW5nZSwgbWFya2VyLmNsYXp6ICsgIiBhY2Vfc3RhcnQiICsgIiBhY2VfYnIxNSIsIGNvbmZpZyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaSAhPS0xKSB7CiAgICAgICAgICAgIHdoaWxlICh0aGlzLmkgPCB0aGlzLmVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQpCiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50Lmxhc3RDaGlsZCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRnZXRUb3AgPSBmdW5jdGlvbihyb3csIGxheWVyQ29uZmlnKSB7CiAgICAgICAgcmV0dXJuIChyb3cgLSBsYXllckNvbmZpZy5maXJzdFJvd1NjcmVlbikgKiBsYXllckNvbmZpZy5saW5lSGVpZ2h0OwogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRCb3JkZXJDbGFzcyh0bCwgdHIsIGJyLCBibCkgewogICAgICAgIHJldHVybiAodGwgPyAxIDogMCkgfCAodHIgPyAyIDogMCkgfCAoYnIgPyA0IDogMCkgfCAoYmwgPyA4IDogMCk7CiAgICB9CiAgICB0aGlzLmRyYXdUZXh0TWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBsYXllckNvbmZpZywgZXh0cmFTdHlsZSkgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LnJvdzsKICAgICAgICB2YXIgZW5kID0gcmFuZ2UuZW5kLnJvdzsKICAgICAgICB2YXIgcm93ID0gc3RhcnQ7CiAgICAgICAgdmFyIHByZXYgPSAwOyAKICAgICAgICB2YXIgY3VyciA9IDA7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldFNjcmVlbkxhc3RSb3dDb2x1bW4ocm93KTsKICAgICAgICB2YXIgbGluZVJhbmdlID0gbmV3IFJhbmdlKHJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCByb3csIGN1cnIpOwogICAgICAgIGZvciAoOyByb3cgPD0gZW5kOyByb3crKykgewogICAgICAgICAgICBsaW5lUmFuZ2Uuc3RhcnQucm93ID0gbGluZVJhbmdlLmVuZC5yb3cgPSByb3c7CiAgICAgICAgICAgIGxpbmVSYW5nZS5zdGFydC5jb2x1bW4gPSByb3cgPT0gc3RhcnQgPyByYW5nZS5zdGFydC5jb2x1bW4gOiBzZXNzaW9uLmdldFJvd1dyYXBJbmRlbnQocm93KTsKICAgICAgICAgICAgbGluZVJhbmdlLmVuZC5jb2x1bW4gPSBuZXh0OwogICAgICAgICAgICBwcmV2ID0gY3VycjsKICAgICAgICAgICAgY3VyciA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSByb3cgKyAxIDwgZW5kID8gc2Vzc2lvbi5nZXRTY3JlZW5MYXN0Um93Q29sdW1uKHJvdyArIDEpIDogcm93ID09IGVuZCA/IDAgOiByYW5nZS5lbmQuY29sdW1uOwogICAgICAgICAgICB0aGlzLmRyYXdTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIGxpbmVSYW5nZSwgCiAgICAgICAgICAgICAgICBjbGF6eiArIChyb3cgPT0gc3RhcnQgID8gIiBhY2Vfc3RhcnQiIDogIiIpICsgIiBhY2VfYnIiCiAgICAgICAgICAgICAgICAgICAgKyBnZXRCb3JkZXJDbGFzcyhyb3cgPT0gc3RhcnQgfHwgcm93ID09IHN0YXJ0ICsgMSAmJiByYW5nZS5zdGFydC5jb2x1bW4sIHByZXYgPCBjdXJyLCBjdXJyID4gbmV4dCwgcm93ID09IGVuZCksCiAgICAgICAgICAgICAgICBsYXllckNvbmZpZywgcm93ID09IGVuZCA/IDAgOiAxLCBleHRyYVN0eWxlKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5kcmF3TXVsdGlMaW5lTWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhU3R5bGUpIHsKICAgICAgICB2YXIgcGFkZGluZyA9IHRoaXMuJHBhZGRpbmc7CiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OwogICAgICAgIHZhciB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpOwogICAgICAgIHZhciBsZWZ0ID0gcGFkZGluZyArIHJhbmdlLnN0YXJ0LmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKICAgICAgICBleHRyYVN0eWxlID0gZXh0cmFTdHlsZSB8fCAiIjsKCiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHJhbmdlLnN0YXJ0LnJvdykpIHsKICAgICAgICAgICB2YXIgcmFuZ2UxID0gcmFuZ2UuY2xvbmUoKTsKICAgICAgICAgICByYW5nZTEuZW5kLnJvdyA9IHJhbmdlMS5zdGFydC5yb3c7CiAgICAgICAgICAgcmFuZ2UxLmVuZC5jb2x1bW4gPSB0aGlzLnNlc3Npb24uZ2V0TGluZShyYW5nZTEuc3RhcnQucm93KS5sZW5ndGg7CiAgICAgICAgICAgdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgcmFuZ2UxLCBjbGF6eiArICIgYWNlX2JyMSBhY2Vfc3RhcnQiLCBjb25maWcsIG51bGwsIGV4dHJhU3R5bGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuZWx0KAogICAgICAgICAgICAgICAgY2xhenogKyAiIGFjZV9icjEgYWNlX3N0YXJ0IiwKICAgICAgICAgICAgICAgICJoZWlnaHQ6IisgaGVpZ2h0KyAicHg7IisgInJpZ2h0OjA7IisgInRvcDoiK3RvcCsgInB4O2xlZnQ6IisgbGVmdCsgInB4OyIgKyAoZXh0cmFTdHlsZSB8fCAiIikKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHJhbmdlLmVuZC5yb3cpKSB7CiAgICAgICAgICAgdmFyIHJhbmdlMSA9IHJhbmdlLmNsb25lKCk7CiAgICAgICAgICAgcmFuZ2UxLnN0YXJ0LnJvdyA9IHJhbmdlMS5lbmQucm93OwogICAgICAgICAgIHJhbmdlMS5zdGFydC5jb2x1bW4gPSAwOwogICAgICAgICAgIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyKHN0cmluZ0J1aWxkZXIsIHJhbmdlMSwgY2xhenogKyAiIGFjZV9icjEyIiwgY29uZmlnLCBudWxsLCBleHRyYVN0eWxlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2UuZW5kLnJvdywgY29uZmlnKTsKICAgICAgICAgICAgdmFyIHdpZHRoID0gcmFuZ2UuZW5kLmNvbHVtbiAqIGNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKCiAgICAgICAgICAgIHRoaXMuZWx0KAogICAgICAgICAgICAgICAgY2xhenogKyAiIGFjZV9icjEyIiwKICAgICAgICAgICAgICAgICJoZWlnaHQ6IisgaGVpZ2h0KyAicHg7IisKICAgICAgICAgICAgICAgICJ3aWR0aDoiKyB3aWR0aCsgInB4OyIrCiAgICAgICAgICAgICAgICAidG9wOiIrIHRvcCsgInB4OyIrCiAgICAgICAgICAgICAgICAibGVmdDoiKyBwYWRkaW5nKyAicHg7IisgKGV4dHJhU3R5bGUgfHwgIiIpCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGhlaWdodCA9IChyYW5nZS5lbmQucm93IC0gcmFuZ2Uuc3RhcnQucm93IC0gMSkgKiBjb25maWcubGluZUhlaWdodDsKICAgICAgICBpZiAoaGVpZ2h0IDw9IDApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93ICsgMSwgY29uZmlnKTsKICAgICAgICAKICAgICAgICB2YXIgcmFkaXVzQ2xhc3MgPSAocmFuZ2Uuc3RhcnQuY29sdW1uID8gMSA6IDApIHwgKHJhbmdlLmVuZC5jb2x1bW4gPyAwIDogOCk7CgogICAgICAgIHRoaXMuZWx0KAogICAgICAgICAgICBjbGF6eiArIChyYWRpdXNDbGFzcyA/ICIgYWNlX2JyIiArIHJhZGl1c0NsYXNzIDogIiIpLAogICAgICAgICAgICAiaGVpZ2h0OiIrIGhlaWdodCsgInB4OyIrCiAgICAgICAgICAgICJyaWdodDowOyIrCiAgICAgICAgICAgICJ0b3A6IisgdG9wKyAicHg7IisKICAgICAgICAgICAgImxlZnQ6IisgcGFkZGluZysgInB4OyIrIChleHRyYVN0eWxlIHx8ICIiKQogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5kcmF3U2luZ2xlTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYUxlbmd0aCwgZXh0cmFTdHlsZSkgewogICAgICAgIGlmICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhyYW5nZS5zdGFydC5yb3cpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3QmlkaVNpbmdsZUxpbmVNYXJrZXIoc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhTGVuZ3RoLCBleHRyYVN0eWxlKTsKICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7CiAgICAgICAgdmFyIHdpZHRoID0gKHJhbmdlLmVuZC5jb2x1bW4gKyAoZXh0cmFMZW5ndGggfHwgMCkgLSByYW5nZS5zdGFydC5jb2x1bW4pICogY29uZmlnLmNoYXJhY3RlcldpZHRoOwoKICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKICAgICAgICB2YXIgbGVmdCA9IHRoaXMuJHBhZGRpbmcgKyByYW5nZS5zdGFydC5jb2x1bW4gKiBjb25maWcuY2hhcmFjdGVyV2lkdGg7CgogICAgICAgIHRoaXMuZWx0KAogICAgICAgICAgICBjbGF6eiwKICAgICAgICAgICAgImhlaWdodDoiKyBoZWlnaHQrICJweDsiKwogICAgICAgICAgICAid2lkdGg6Iisgd2lkdGgrICJweDsiKwogICAgICAgICAgICAidG9wOiIrIHRvcCsgInB4OyIrCiAgICAgICAgICAgICJsZWZ0OiIrIGxlZnQrICJweDsiKyAoZXh0cmFTdHlsZSB8fCAiIikKICAgICAgICApOwogICAgfTsKICAgIHRoaXMuZHJhd0JpZGlTaW5nbGVMaW5lTWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhTGVuZ3RoLCBleHRyYVN0eWxlKSB7CiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0LCB0b3AgPSB0aGlzLiRnZXRUb3AocmFuZ2Uuc3RhcnQucm93LCBjb25maWcpLCBwYWRkaW5nID0gdGhpcy4kcGFkZGluZzsKICAgICAgICB2YXIgc2VsZWN0aW9ucyA9IHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0U2VsZWN0aW9ucyhyYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4pOwoKICAgICAgICBzZWxlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oc2VsZWN0aW9uKSB7CiAgICAgICAgICAgIHRoaXMuZWx0KAogICAgICAgICAgICAgICAgY2xhenosCiAgICAgICAgICAgICAgICAiaGVpZ2h0OiIgKyBoZWlnaHQgKyAicHg7IiArCiAgICAgICAgICAgICAgICAid2lkdGg6IiArIHNlbGVjdGlvbi53aWR0aCArIChleHRyYUxlbmd0aCB8fCAwKSArICJweDsiICsKICAgICAgICAgICAgICAgICJ0b3A6IiArIHRvcCArICJweDsiICsKICAgICAgICAgICAgICAgICJsZWZ0OiIgKyAocGFkZGluZyArIHNlbGVjdGlvbi5sZWZ0KSArICJweDsiICsgKGV4dHJhU3R5bGUgfHwgIiIpCiAgICAgICAgICAgICk7CiAgICAgICAgfSwgdGhpcyk7CiAgICB9OwoKICAgIHRoaXMuZHJhd0Z1bGxMaW5lTWFya2VyID0gZnVuY3Rpb24oc3RyaW5nQnVpbGRlciwgcmFuZ2UsIGNsYXp6LCBjb25maWcsIGV4dHJhU3R5bGUpIHsKICAgICAgICB2YXIgdG9wID0gdGhpcy4kZ2V0VG9wKHJhbmdlLnN0YXJ0LnJvdywgY29uZmlnKTsKICAgICAgICB2YXIgaGVpZ2h0ID0gY29uZmlnLmxpbmVIZWlnaHQ7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPSByYW5nZS5lbmQucm93KQogICAgICAgICAgICBoZWlnaHQgKz0gdGhpcy4kZ2V0VG9wKHJhbmdlLmVuZC5yb3csIGNvbmZpZykgLSB0b3A7CgogICAgICAgIHRoaXMuZWx0KAogICAgICAgICAgICBjbGF6eiwKICAgICAgICAgICAgImhlaWdodDoiKyBoZWlnaHQrICJweDsiKwogICAgICAgICAgICAidG9wOiIrIHRvcCsgInB4OyIrCiAgICAgICAgICAgICJsZWZ0OjA7cmlnaHQ6MDsiKyAoZXh0cmFTdHlsZSB8fCAiIikKICAgICAgICApOwogICAgfTsKICAgIAogICAgdGhpcy5kcmF3U2NyZWVuTGluZU1hcmtlciA9IGZ1bmN0aW9uKHN0cmluZ0J1aWxkZXIsIHJhbmdlLCBjbGF6eiwgY29uZmlnLCBleHRyYVN0eWxlKSB7CiAgICAgICAgdmFyIHRvcCA9IHRoaXMuJGdldFRvcChyYW5nZS5zdGFydC5yb3csIGNvbmZpZyk7CiAgICAgICAgdmFyIGhlaWdodCA9IGNvbmZpZy5saW5lSGVpZ2h0OwoKICAgICAgICB0aGlzLmVsdCgKICAgICAgICAgICAgY2xhenosCiAgICAgICAgICAgICJoZWlnaHQ6IisgaGVpZ2h0KyAicHg7IisKICAgICAgICAgICAgInRvcDoiKyB0b3ArICJweDsiKwogICAgICAgICAgICAibGVmdDowO3JpZ2h0OjA7IisgKGV4dHJhU3R5bGUgfHwgIiIpCiAgICAgICAgKTsKICAgIH07Cgp9KS5jYWxsKE1hcmtlci5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXJrZXIgPSBNYXJrZXI7Cgp9KTsKCmRlZmluZSgiYWNlL2xheWVyL3RleHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xheWVyL2xpbmVzIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBMaW5lcyA9IHJlcXVpcmUoIi4vbGluZXMiKS5MaW5lczsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwoKdmFyIFRleHQgPSBmdW5jdGlvbihwYXJlbnRFbCkgewogICAgdGhpcy5kb20gPSBkb207IAogICAgdGhpcy5lbGVtZW50ID0gdGhpcy5kb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gImFjZV9sYXllciBhY2VfdGV4dC1sYXllciI7CiAgICBwYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwogICAgdGhpcy4kdXBkYXRlRW9sQ2hhciA9IHRoaXMuJHVwZGF0ZUVvbENoYXIuYmluZCh0aGlzKTsKICAgIHRoaXMuJGxpbmVzID0gbmV3IExpbmVzKHRoaXMuZWxlbWVudCk7Cn07CgooZnVuY3Rpb24oKSB7CgogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwoKICAgIHRoaXMuRU9GX0NIQVIgPSAiXHhCNiI7CiAgICB0aGlzLkVPTF9DSEFSX0xGID0gIlx4QUMiOwogICAgdGhpcy5FT0xfQ0hBUl9DUkxGID0gIlx4YTQiOwogICAgdGhpcy5FT0xfQ0hBUiA9IHRoaXMuRU9MX0NIQVJfTEY7CiAgICB0aGlzLlRBQl9DSEFSID0gIlx1MjAxNCI7IC8vIlx1MjFFNSI7CiAgICB0aGlzLlNQQUNFX0NIQVIgPSAiXHhCNyI7CiAgICB0aGlzLiRwYWRkaW5nID0gMDsKICAgIHRoaXMuTUFYX0xJTkVfTEVOR1RIID0gMTAwMDA7CgogICAgdGhpcy4kdXBkYXRlRW9sQ2hhciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkb2MgPSB0aGlzLnNlc3Npb24uZG9jOwogICAgICAgIHZhciB1bml4TW9kZSA9IGRvYy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkgPT0gIlxuIiAmJiBkb2MuZ2V0TmV3TGluZU1vZGUoKSAhPSAid2luZG93cyI7CiAgICAgICAgdmFyIEVPTF9DSEFSID0gdW5peE1vZGUgPyB0aGlzLkVPTF9DSEFSX0xGIDogdGhpcy5FT0xfQ0hBUl9DUkxGOwogICAgICAgIGlmICh0aGlzLkVPTF9DSEFSICE9IEVPTF9DSEFSKSB7CiAgICAgICAgICAgIHRoaXMuRU9MX0NIQVIgPSBFT0xfQ0hBUjsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7CiAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7CiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLm1hcmdpbiA9ICIwICIgKyBwYWRkaW5nICsgInB4IjsKICAgIH07CgogICAgdGhpcy5nZXRMaW5lSGVpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGZvbnRNZXRyaWNzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCB8fCAwOwogICAgfTsKCiAgICB0aGlzLmdldENoYXJhY3RlcldpZHRoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGZvbnRNZXRyaWNzLiRjaGFyYWN0ZXJTaXplLndpZHRoIHx8IDA7CiAgICB9OwogICAgCiAgICB0aGlzLiRzZXRGb250TWV0cmljcyA9IGZ1bmN0aW9uKG1lYXN1cmUpIHsKICAgICAgICB0aGlzLiRmb250TWV0cmljcyA9IG1lYXN1cmU7CiAgICAgICAgdGhpcy4kZm9udE1ldHJpY3Mub24oImNoYW5nZUNoYXJhY3RlclNpemUiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlQ2hhcmFjdGVyU2l6ZSIsIGUpOwogICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICAgICAgdGhpcy4kcG9sbFNpemVDaGFuZ2VzKCk7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tGb3JTaXplQ2hhbmdlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGZvbnRNZXRyaWNzLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKICAgIH07CiAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgPSB0aGlzLiRmb250TWV0cmljcy4kcG9sbFNpemVDaGFuZ2VzKCk7CiAgICB9OwogICAgdGhpcy5zZXRTZXNzaW9uID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CiAgICAgICAgaWYgKHNlc3Npb24pCiAgICAgICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTsKICAgIH07CgogICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IGZhbHNlOwogICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7CiAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMgPT0gc2hvd0ludmlzaWJsZXMpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdGhpcy5zaG93SW52aXNpYmxlcyA9IHNob3dJbnZpc2libGVzOwogICAgICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID0gdHJ1ZTsKICAgIHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3BsYXkpIHsKICAgICAgICBpZiAodGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID09IGRpc3BsYXkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzID0gZGlzcGxheTsKICAgICAgICB0aGlzLiRjb21wdXRlVGFiU3RyaW5nKCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwoKICAgIHRoaXMuJHRhYlN0cmluZ3MgPSBbXTsKICAgIHRoaXMub25DaGFuZ2VUYWJTaXplID0KICAgIHRoaXMuJGNvbXB1dGVUYWJTdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdGFiU2l6ZSA9IHRoaXMuc2Vzc2lvbi5nZXRUYWJTaXplKCk7CiAgICAgICAgdGhpcy50YWJTaXplID0gdGFiU2l6ZTsKICAgICAgICB2YXIgdGFiU3RyID0gdGhpcy4kdGFiU3RyaW5ncyA9IFswXTsKICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHRhYlNpemUgKyAxOyBpKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ludmlzaWJsZXMpIHsKICAgICAgICAgICAgICAgIHZhciBzcGFuID0gdGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAiYWNlX2ludmlzaWJsZSBhY2VfaW52aXNpYmxlX3RhYiI7CiAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gbGFuZy5zdHJpbmdSZXBlYXQodGhpcy5UQUJfQ0hBUiwgaSk7CiAgICAgICAgICAgICAgICB0YWJTdHIucHVzaChzcGFuKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRhYlN0ci5wdXNoKHRoaXMuZG9tLmNyZWF0ZVRleHROb2RlKGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgaSksIHRoaXMuZWxlbWVudCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpIHsKICAgICAgICAgICAgdGhpcy4kaW5kZW50R3VpZGVSZSA9ICAvXHNcU3wgXHR8XHQgfFxzJC87CiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAiYWNlX2luZGVudC1ndWlkZSI7CiAgICAgICAgICAgIHZhciBzcGFjZUNsYXNzID0gIiI7CiAgICAgICAgICAgIHZhciB0YWJDbGFzcyA9ICIiOwogICAgICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcykgewogICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9ICIgYWNlX2ludmlzaWJsZSI7CiAgICAgICAgICAgICAgICBzcGFjZUNsYXNzID0gIiBhY2VfaW52aXNpYmxlX3NwYWNlIjsKICAgICAgICAgICAgICAgIHRhYkNsYXNzID0gIiBhY2VfaW52aXNpYmxlX3RhYiI7CiAgICAgICAgICAgICAgICB2YXIgc3BhY2VDb250ZW50ID0gbGFuZy5zdHJpbmdSZXBlYXQodGhpcy5TUEFDRV9DSEFSLCB0aGlzLnRhYlNpemUpOwogICAgICAgICAgICAgICAgdmFyIHRhYkNvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdCh0aGlzLlRBQl9DSEFSLCB0aGlzLnRhYlNpemUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHNwYWNlQ29udGVudCA9IGxhbmcuc3RyaW5nUmVwZWF0KCIgIiwgdGhpcy50YWJTaXplKTsKICAgICAgICAgICAgICAgIHZhciB0YWJDb250ZW50ID0gc3BhY2VDb250ZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc3BhbiA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjbGFzc05hbWUgKyBzcGFjZUNsYXNzOwogICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gc3BhY2VDb250ZW50OwogICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyIgIl0gPSBzcGFuOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHNwYW4gPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgIHNwYW4uY2xhc3NOYW1lID0gY2xhc3NOYW1lICsgdGFiQ2xhc3M7CiAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSB0YWJDb250ZW50OwogICAgICAgICAgICB0aGlzLiR0YWJTdHJpbmdzWyJcdCJdID0gc3BhbjsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMudXBkYXRlTGluZXMgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxhc3RSb3cgIT0gY29uZmlnLmxhc3RSb3cgfHwKICAgICAgICAgICAgdGhpcy5jb25maWcuZmlyc3RSb3cgIT0gY29uZmlnLmZpcnN0Um93KSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKCiAgICAgICAgdmFyIGZpcnN0ID0gTWF0aC5tYXgoZmlyc3RSb3csIGNvbmZpZy5maXJzdFJvdyk7CiAgICAgICAgdmFyIGxhc3QgPSBNYXRoLm1pbihsYXN0Um93LCBjb25maWcubGFzdFJvdyk7CgogICAgICAgIHZhciBsaW5lRWxlbWVudHMgPSB0aGlzLmVsZW1lbnQuY2hpbGROb2RlczsKICAgICAgICB2YXIgbGluZUVsZW1lbnRzSWR4ID0gMDsKCiAgICAgICAgZm9yICh2YXIgcm93ID0gY29uZmlnLmZpcnN0Um93OyByb3cgPCBmaXJzdDsgcm93KyspIHsKICAgICAgICAgICAgdmFyIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7CiAgICAgICAgICAgIGlmIChmb2xkTGluZSkgewogICAgICAgICAgICAgICAgaWYgKGZvbGRMaW5lLmNvbnRhaW5zUm93KGZpcnN0KSkgewogICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZm9sZExpbmUuc3RhcnQucm93OwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBmb2xkTGluZS5lbmQucm93OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpbmVFbGVtZW50c0lkeCArKzsKICAgICAgICB9CgogICAgICAgIHZhciBoZWlnaHRDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgdmFyIHJvdyA9IGZpcnN0OwogICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93KTsKICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgewogICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxOwogICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpOwogICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOkluZmluaXR5OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyb3cgPiBsYXN0KQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICB2YXIgbGluZUVsZW1lbnQgPSBsaW5lRWxlbWVudHNbbGluZUVsZW1lbnRzSWR4KytdOwogICAgICAgICAgICBpZiAobGluZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIHRoaXMuZG9tLnJlbW92ZUNoaWxkcmVuKGxpbmVFbGVtZW50KTsKICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlckxpbmUoCiAgICAgICAgICAgICAgICAgICAgbGluZUVsZW1lbnQsIHJvdywgcm93ID09IGZvbGRTdGFydCA/IGZvbGRMaW5lIDogZmFsc2UKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKGhlaWdodENoYW5nZWQpCiAgICAgICAgICAgICAgICAgICAgbGluZUVsZW1lbnQuc3R5bGUudG9wID0gdGhpcy4kbGluZXMuY29tcHV0ZUxpbmVUb3Aocm93LCBjb25maWcsIHRoaXMuc2Vzc2lvbikgKyAicHgiOwoKICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAoY29uZmlnLmxpbmVIZWlnaHQgKiB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoKHJvdykpICsgInB4IjsKICAgICAgICAgICAgICAgIGlmIChsaW5lRWxlbWVudC5zdHlsZS5oZWlnaHQgIT0gaGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Q2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgbGluZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJvdysrOwogICAgICAgIH0KICAgICAgICBpZiAoaGVpZ2h0Q2hhbmdlZCkgewogICAgICAgICAgICB3aGlsZSAobGluZUVsZW1lbnRzSWR4IDwgdGhpcy4kbGluZXMuY2VsbHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB2YXIgY2VsbCA9IHRoaXMuJGxpbmVzLmNlbGxzW2xpbmVFbGVtZW50c0lkeCsrXTsKICAgICAgICAgICAgICAgIGNlbGwuZWxlbWVudC5zdHlsZS50b3AgPSB0aGlzLiRsaW5lcy5jb21wdXRlTGluZVRvcChjZWxsLnJvdywgY29uZmlnLCB0aGlzLnNlc3Npb24pICsgInB4IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5zY3JvbGxMaW5lcyA9IGZ1bmN0aW9uKGNvbmZpZykgewogICAgICAgIHZhciBvbGRDb25maWcgPSB0aGlzLmNvbmZpZzsKICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKCiAgICAgICAgaWYgKHRoaXMuJGxpbmVzLnBhZ2VDaGFuZ2VkKG9sZENvbmZpZywgY29uZmlnKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7CiAgICAgICAgICAgIAogICAgICAgIHRoaXMuJGxpbmVzLm1vdmVDb250YWluZXIoY29uZmlnKTsKICAgICAgICAKICAgICAgICB2YXIgbGFzdFJvdyA9IGNvbmZpZy5sYXN0Um93OwogICAgICAgIHZhciBvbGRMYXN0Um93ID0gb2xkQ29uZmlnID8gb2xkQ29uZmlnLmxhc3RSb3cgOiAtMTsKCiAgICAgICAgaWYgKCFvbGRDb25maWcgfHwgb2xkTGFzdFJvdyA8IGNvbmZpZy5maXJzdFJvdykKICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKGNvbmZpZyk7CgogICAgICAgIGlmIChsYXN0Um93IDwgb2xkQ29uZmlnLmZpcnN0Um93KQogICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUoY29uZmlnKTsKCiAgICAgICAgaWYgKCFvbGRDb25maWcgfHwgb2xkQ29uZmlnLmxhc3RSb3cgPCBjb25maWcuZmlyc3RSb3cpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpOwoKICAgICAgICBpZiAoY29uZmlnLmxhc3RSb3cgPCBvbGRDb25maWcuZmlyc3RSb3cpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZShjb25maWcpOwoKICAgICAgICBpZiAob2xkQ29uZmlnLmZpcnN0Um93IDwgY29uZmlnLmZpcnN0Um93KQogICAgICAgICAgICBmb3IgKHZhciByb3c9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KG9sZENvbmZpZy5maXJzdFJvdywgY29uZmlnLmZpcnN0Um93IC0gMSk7IHJvdz4wOyByb3ctLSkKICAgICAgICAgICAgICAgIHRoaXMuJGxpbmVzLnNoaWZ0KCk7CgogICAgICAgIGlmIChvbGRDb25maWcubGFzdFJvdyA+IGNvbmZpZy5sYXN0Um93KQogICAgICAgICAgICBmb3IgKHZhciByb3c9dGhpcy5zZXNzaW9uLmdldEZvbGRlZFJvd0NvdW50KGNvbmZpZy5sYXN0Um93ICsgMSwgb2xkQ29uZmlnLmxhc3RSb3cpOyByb3c+MDsgcm93LS0pCiAgICAgICAgICAgICAgICB0aGlzLiRsaW5lcy5wb3AoKTsKCiAgICAgICAgaWYgKGNvbmZpZy5maXJzdFJvdyA8IG9sZENvbmZpZy5maXJzdFJvdykgewogICAgICAgICAgICB0aGlzLiRsaW5lcy51bnNoaWZ0KHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQoY29uZmlnLCBjb25maWcuZmlyc3RSb3csIG9sZENvbmZpZy5maXJzdFJvdyAtIDEpKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcubGFzdFJvdyA+IG9sZENvbmZpZy5sYXN0Um93KSB7CiAgICAgICAgICAgIHRoaXMuJGxpbmVzLnB1c2godGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudChjb25maWcsIG9sZENvbmZpZy5sYXN0Um93ICsgMSwgY29uZmlnLmxhc3RSb3cpKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJHJlbmRlckxpbmVzRnJhZ21lbnQgPSBmdW5jdGlvbihjb25maWcsIGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgdmFyIGZyYWdtZW50ID0gW107CiAgICAgICAgdmFyIHJvdyA9IGZpcnN0Um93OwogICAgICAgIHZhciBmb2xkTGluZSA9IHRoaXMuc2Vzc2lvbi5nZXROZXh0Rm9sZExpbmUocm93KTsKICAgICAgICB2YXIgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHJvdyA+IGZvbGRTdGFydCkgewogICAgICAgICAgICAgICAgcm93ID0gZm9sZExpbmUuZW5kLnJvdysxOwogICAgICAgICAgICAgICAgZm9sZExpbmUgPSB0aGlzLnNlc3Npb24uZ2V0TmV4dEZvbGRMaW5lKHJvdywgZm9sZExpbmUpOwogICAgICAgICAgICAgICAgZm9sZFN0YXJ0ID0gZm9sZExpbmUgPyBmb2xkTGluZS5zdGFydC5yb3cgOiBJbmZpbml0eTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocm93ID4gbGFzdFJvdykKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgdmFyIGxpbmUgPSB0aGlzLiRsaW5lcy5jcmVhdGVDZWxsKHJvdywgY29uZmlnLCB0aGlzLnNlc3Npb24pOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGxpbmVFbCA9IGxpbmUuZWxlbWVudDsKICAgICAgICAgICAgdGhpcy5kb20ucmVtb3ZlQ2hpbGRyZW4obGluZUVsKTsKICAgICAgICAgICAgZG9tLnNldFN0eWxlKGxpbmVFbC5zdHlsZSwgImhlaWdodCIsIHRoaXMuJGxpbmVzLmNvbXB1dGVMaW5lSGVpZ2h0KHJvdywgY29uZmlnLCB0aGlzLnNlc3Npb24pICsgInB4Iik7CiAgICAgICAgICAgIGRvbS5zZXRTdHlsZShsaW5lRWwuc3R5bGUsICJ0b3AiLCB0aGlzLiRsaW5lcy5jb21wdXRlTGluZVRvcChyb3csIGNvbmZpZywgdGhpcy5zZXNzaW9uKSArICJweCIpOwogICAgICAgICAgICB0aGlzLiRyZW5kZXJMaW5lKGxpbmVFbCwgcm93LCByb3cgPT0gZm9sZFN0YXJ0ID8gZm9sZExpbmUgOiBmYWxzZSk7CgogICAgICAgICAgICBpZiAodGhpcy4kdXNlTGluZUdyb3VwcygpKSB7CiAgICAgICAgICAgICAgICBsaW5lRWwuY2xhc3NOYW1lID0gImFjZV9saW5lX2dyb3VwIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxpbmVFbC5jbGFzc05hbWUgPSAiYWNlX2xpbmUiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZyYWdtZW50LnB1c2gobGluZSk7CgogICAgICAgICAgICByb3crKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogICAgfTsKCiAgICB0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZykgewogICAgICAgIHRoaXMuJGxpbmVzLm1vdmVDb250YWluZXIoY29uZmlnKTsKICAgICAgICAKICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZzsKCiAgICAgICAgdmFyIGZpcnN0Um93ID0gY29uZmlnLmZpcnN0Um93OwogICAgICAgIHZhciBsYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7CgogICAgICAgIHZhciBsaW5lcyA9IHRoaXMuJGxpbmVzOwogICAgICAgIHdoaWxlIChsaW5lcy5nZXRMZW5ndGgoKSkKICAgICAgICAgICAgbGluZXMucG9wKCk7CiAgICAgICAgICAgIAogICAgICAgIGxpbmVzLnB1c2godGhpcy4kcmVuZGVyTGluZXNGcmFnbWVudChjb25maWcsIGZpcnN0Um93LCBsYXN0Um93KSk7CiAgICB9OwoKICAgIHRoaXMuJHRleHRUb2tlbiA9IHsKICAgICAgICAidGV4dCI6IHRydWUsCiAgICAgICAgInJwYXJlbiI6IHRydWUsCiAgICAgICAgImxwYXJlbiI6IHRydWUKICAgIH07CgogICAgdGhpcy4kcmVuZGVyVG9rZW4gPSBmdW5jdGlvbihwYXJlbnQsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciByZSA9IC8oXHQpfCggKyl8KFtceDAwLVx4MWZceDgwLVx4YTBceGFkXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAwZlx1MjAyOFx1MjAyOVx1MjAyRlx1MjA1Rlx1RkVGRlx1RkZGOS1cdUZGRkNdKyl8KFx1MzAwMCl8KFtcdTExMDAtXHUxMTVGXHUxMUEzLVx1MTFBN1x1MTFGQS1cdTExRkZcdTIzMjktXHUyMzJBXHUyRTgwLVx1MkU5OVx1MkU5Qi1cdTJFRjNcdTJGMDAtXHUyRkQ1XHUyRkYwLVx1MkZGQlx1MzAwMS1cdTMwM0VcdTMwNDEtXHUzMDk2XHUzMDk5LVx1MzBGRlx1MzEwNS1cdTMxMkRcdTMxMzEtXHUzMThFXHUzMTkwLVx1MzFCQVx1MzFDMC1cdTMxRTNcdTMxRjAtXHUzMjFFXHUzMjIwLVx1MzI0N1x1MzI1MC1cdTMyRkVcdTMzMDAtXHU0REJGXHU0RTAwLVx1QTQ4Q1x1QTQ5MC1cdUE0QzZcdUE5NjAtXHVBOTdDXHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0ItXHVEN0ZCXHVGOTAwLVx1RkFGRlx1RkUxMC1cdUZFMTlcdUZFMzAtXHVGRTUyXHVGRTU0LVx1RkU2Nlx1RkU2OC1cdUZFNkJcdUZGMDEtXHVGRjYwXHVGRkUwLVx1RkZFNl18W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdKS9nOwogICAgICAgIAogICAgICAgIHZhciB2YWx1ZUZyYWdtZW50ID0gdGhpcy5kb20uY3JlYXRlRnJhZ21lbnQodGhpcy5lbGVtZW50KTsKCiAgICAgICAgdmFyIG07CiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHdoaWxlIChtID0gcmUuZXhlYyh2YWx1ZSkpIHsKICAgICAgICAgICAgdmFyIHRhYiA9IG1bMV07CiAgICAgICAgICAgIHZhciBzaW1wbGVTcGFjZSA9IG1bMl07CiAgICAgICAgICAgIHZhciBjb250cm9sQ2hhcmFjdGVyID0gbVszXTsKICAgICAgICAgICAgdmFyIGNqa1NwYWNlID0gbVs0XTsKICAgICAgICAgICAgdmFyIGNqayA9IG1bNV07CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIXNlbGYuc2hvd0ludmlzaWJsZXMgJiYgc2ltcGxlU3BhY2UpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBiZWZvcmUgPSBpICE9IG0uaW5kZXggPyB2YWx1ZS5zbGljZShpLCBtLmluZGV4KSA6ICIiOwoKICAgICAgICAgICAgaSA9IG0uaW5kZXggKyBtWzBdLmxlbmd0aDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChiZWZvcmUpIHsKICAgICAgICAgICAgICAgIHZhbHVlRnJhZ21lbnQuYXBwZW5kQ2hpbGQodGhpcy5kb20uY3JlYXRlVGV4dE5vZGUoYmVmb3JlLCB0aGlzLmVsZW1lbnQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0YWIpIHsKICAgICAgICAgICAgICAgIHZhciB0YWJTaXplID0gc2VsZi5zZXNzaW9uLmdldFNjcmVlblRhYlNpemUoc2NyZWVuQ29sdW1uICsgbS5pbmRleCk7CiAgICAgICAgICAgICAgICB2YWx1ZUZyYWdtZW50LmFwcGVuZENoaWxkKHNlbGYuJHRhYlN0cmluZ3NbdGFiU2l6ZV0uY2xvbmVOb2RlKHRydWUpKTsKICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSB0YWJTaXplIC0gMTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzaW1wbGVTcGFjZSkgewogICAgICAgICAgICAgICAgaWYgKHNlbGYuc2hvd0ludmlzaWJsZXMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfc3BhY2UiOwogICAgICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBsYW5nLnN0cmluZ1JlcGVhdChzZWxmLlNQQUNFX0NIQVIsIHNpbXBsZVNwYWNlLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbS5jcmVhdGVUZXh0Tm9kZShzaW1wbGVTcGFjZSwgdGhpcy5lbGVtZW50KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbENoYXJhY3RlcikgewogICAgICAgICAgICAgICAgdmFyIHNwYW4gPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfc3BhY2UgYWNlX2ludmFsaWQiOwogICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGxhbmcuc3RyaW5nUmVwZWF0KHNlbGYuU1BBQ0VfQ0hBUiwgY29udHJvbENoYXJhY3Rlci5sZW5ndGgpOwogICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjamtTcGFjZSkgewogICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uICs9IDE7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBzcGFuID0gdGhpcy5kb20uY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS53aWR0aCA9IChzZWxmLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCAqIDIpICsgInB4IjsKICAgICAgICAgICAgICAgIHNwYW4uY2xhc3NOYW1lID0gc2VsZi5zaG93SW52aXNpYmxlcyA/ICJhY2VfY2prIGFjZV9pbnZpc2libGUgYWNlX2ludmlzaWJsZV9zcGFjZSIgOiAiYWNlX2NqayI7CiAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gc2VsZi5zaG93SW52aXNpYmxlcyA/IHNlbGYuU1BBQ0VfQ0hBUiA6IGNqa1NwYWNlOwogICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjamspIHsKICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiArPSAxOwogICAgICAgICAgICAgICAgdmFyIHNwYW4gPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLndpZHRoID0gKHNlbGYuY29uZmlnLmNoYXJhY3RlcldpZHRoICogMikgKyAicHgiOwogICAgICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAiYWNlX2NqayI7CiAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gY2prOwogICAgICAgICAgICAgICAgdmFsdWVGcmFnbWVudC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YWx1ZUZyYWdtZW50LmFwcGVuZENoaWxkKHRoaXMuZG9tLmNyZWF0ZVRleHROb2RlKGkgPyB2YWx1ZS5zbGljZShpKSA6IHZhbHVlLCB0aGlzLmVsZW1lbnQpKTsKCiAgICAgICAgaWYgKCF0aGlzLiR0ZXh0VG9rZW5bdG9rZW4udHlwZV0pIHsKICAgICAgICAgICAgdmFyIGNsYXNzZXMgPSAiYWNlXyIgKyB0b2tlbi50eXBlLnJlcGxhY2UoL1wuL2csICIgYWNlXyIpOwogICAgICAgICAgICB2YXIgc3BhbiA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gImZvbGQiKQogICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS53aWR0aCA9ICh0b2tlbi52YWx1ZS5sZW5ndGggKiB0aGlzLmNvbmZpZy5jaGFyYWN0ZXJXaWR0aCkgKyAicHgiOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHNwYW4uY2xhc3NOYW1lID0gY2xhc3NlczsKICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChzcGFuKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZCh2YWx1ZUZyYWdtZW50KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHNjcmVlbkNvbHVtbiArIHZhbHVlLmxlbmd0aDsKICAgIH07CgogICAgdGhpcy5yZW5kZXJJbmRlbnRHdWlkZSA9IGZ1bmN0aW9uKHBhcmVudCwgdmFsdWUsIG1heCkgewogICAgICAgIHZhciBjb2xzID0gdmFsdWUuc2VhcmNoKHRoaXMuJGluZGVudEd1aWRlUmUpOwogICAgICAgIGlmIChjb2xzIDw9IDAgfHwgY29scyA+PSBtYXgpCiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICBpZiAodmFsdWVbMF0gPT0gIiAiKSB7CiAgICAgICAgICAgIGNvbHMgLT0gY29scyAlIHRoaXMudGFiU2l6ZTsKICAgICAgICAgICAgdmFyIGNvdW50ID0gY29scy90aGlzLnRhYlNpemU7CiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy4kdGFiU3RyaW5nc1siICJdLmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cihjb2xzKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlWzBdID09ICJcdCIpIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbHM7IGkrKykgewogICAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuJHRhYlN0cmluZ3NbIlx0Il0uY2xvbmVOb2RlKHRydWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyKGNvbHMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9OwoKICAgIHRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIGxpbmVFbCA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGxpbmVFbC5jbGFzc05hbWUgPSAiYWNlX2xpbmUiOwogICAgICAgIGxpbmVFbC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbmZpZy5saW5lSGVpZ2h0ICsgInB4IjsKICAgICAgICAKICAgICAgICByZXR1cm4gbGluZUVsOwogICAgfTsKCiAgICB0aGlzLiRyZW5kZXJXcmFwcGVkTGluZSA9IGZ1bmN0aW9uKHBhcmVudCwgdG9rZW5zLCBzcGxpdHMpIHsKICAgICAgICB2YXIgY2hhcnMgPSAwOwogICAgICAgIHZhciBzcGxpdCA9IDA7CiAgICAgICAgdmFyIHNwbGl0Q2hhcnMgPSBzcGxpdHNbMF07CiAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7CgogICAgICAgIHZhciBsaW5lRWwgPSB0aGlzLiRjcmVhdGVMaW5lRWxlbWVudCgpOwogICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChsaW5lRWwpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIGlmIChpID09IDAgJiYgdGhpcy5kaXNwbGF5SW5kZW50R3VpZGVzKSB7CiAgICAgICAgICAgICAgICBjaGFycyA9IHZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShsaW5lRWwsIHZhbHVlLCBzcGxpdENoYXJzKTsKICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICBjaGFycyAtPSB2YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjaGFycyArIHZhbHVlLmxlbmd0aCA8IHNwbGl0Q2hhcnMpIHsKICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKGxpbmVFbCwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOwogICAgICAgICAgICAgICAgY2hhcnMgKz0gdmFsdWUubGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzICsgdmFsdWUubGVuZ3RoID49IHNwbGl0Q2hhcnMpIHsKICAgICAgICAgICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbigKICAgICAgICAgICAgICAgICAgICAgICAgbGluZUVsLCBzY3JlZW5Db2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLCB2YWx1ZS5zdWJzdHJpbmcoMCwgc3BsaXRDaGFycyAtIGNoYXJzKQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoc3BsaXRDaGFycyAtIGNoYXJzKTsKICAgICAgICAgICAgICAgICAgICBjaGFycyA9IHNwbGl0Q2hhcnM7CgogICAgICAgICAgICAgICAgICAgIGxpbmVFbCA9IHRoaXMuJGNyZWF0ZUxpbmVFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGxpbmVFbCk7CgogICAgICAgICAgICAgICAgICAgIGxpbmVFbC5hcHBlbmRDaGlsZCh0aGlzLmRvbS5jcmVhdGVUZXh0Tm9kZShsYW5nLnN0cmluZ1JlcGVhdCgiXHhhMCIsIHNwbGl0cy5pbmRlbnQpLCB0aGlzLmVsZW1lbnQpKTsKCiAgICAgICAgICAgICAgICAgICAgc3BsaXQgKys7CiAgICAgICAgICAgICAgICAgICAgc2NyZWVuQ29sdW1uID0gMDsKICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXJzID0gc3BsaXRzW3NwbGl0XSB8fCBOdW1iZXIuTUFYX1ZBTFVFOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgY2hhcnMgKz0gdmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lRWwsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3BsaXRzW3NwbGl0cy5sZW5ndGggLSAxXSA+IHRoaXMuTUFYX0xJTkVfTEVOR1RIKQogICAgICAgICAgICB0aGlzLiRyZW5kZXJPdmVyZmxvd01lc3NhZ2UobGluZUVsLCBzY3JlZW5Db2x1bW4sIG51bGwsICIiLCB0cnVlKTsKICAgIH07CgogICAgdGhpcy4kcmVuZGVyU2ltcGxlTGluZSA9IGZ1bmN0aW9uKHBhcmVudCwgdG9rZW5zKSB7CiAgICAgICAgdmFyIHNjcmVlbkNvbHVtbiA9IDA7CiAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zWzBdOwogICAgICAgIHZhciB2YWx1ZSA9IHRva2VuLnZhbHVlOwogICAgICAgIGlmICh0aGlzLmRpc3BsYXlJbmRlbnRHdWlkZXMpCiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yZW5kZXJJbmRlbnRHdWlkZShwYXJlbnQsIHZhbHVlKTsKICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgIHNjcmVlbkNvbHVtbiA9IHRoaXMuJHJlbmRlclRva2VuKHBhcmVudCwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOwogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICB2YWx1ZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBpZiAoc2NyZWVuQ29sdW1uICsgdmFsdWUubGVuZ3RoID4gdGhpcy5NQVhfTElORV9MRU5HVEgpCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kcmVuZGVyT3ZlcmZsb3dNZXNzYWdlKHBhcmVudCwgc2NyZWVuQ29sdW1uLCB0b2tlbiwgdmFsdWUpOwogICAgICAgICAgICBzY3JlZW5Db2x1bW4gPSB0aGlzLiRyZW5kZXJUb2tlbihwYXJlbnQsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLiRyZW5kZXJPdmVyZmxvd01lc3NhZ2UgPSBmdW5jdGlvbihwYXJlbnQsIHNjcmVlbkNvbHVtbiwgdG9rZW4sIHZhbHVlLCBoaWRlKSB7CiAgICAgICAgdG9rZW4gJiYgdGhpcy4kcmVuZGVyVG9rZW4ocGFyZW50LCBzY3JlZW5Db2x1bW4sIHRva2VuLAogICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCB0aGlzLk1BWF9MSU5FX0xFTkdUSCAtIHNjcmVlbkNvbHVtbikpOwogICAgICAgICAgICAKICAgICAgICB2YXIgb3ZlcmZsb3dFbCA9IHRoaXMuZG9tLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICBvdmVyZmxvd0VsLmNsYXNzTmFtZSA9ICJhY2VfaW5saW5lX2J1dHRvbiBhY2Vfa2V5d29yZCBhY2VfdG9nZ2xlX3dyYXAiOwogICAgICAgIG92ZXJmbG93RWwudGV4dENvbnRlbnQgPSBoaWRlID8gIjxoaWRlPiIgOiAiPGNsaWNrIHRvIHNlZSBtb3JlLi4uPiI7CiAgICAgICAgCiAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKG92ZXJmbG93RWwpOyAgICAgICAgCiAgICB9OwogICAgdGhpcy4kcmVuZGVyTGluZSA9IGZ1bmN0aW9uKHBhcmVudCwgcm93LCBmb2xkTGluZSkgewogICAgICAgIGlmICghZm9sZExpbmUgJiYgZm9sZExpbmUgIT0gZmFsc2UpCiAgICAgICAgICAgIGZvbGRMaW5lID0gdGhpcy5zZXNzaW9uLmdldEZvbGRMaW5lKHJvdyk7CgogICAgICAgIGlmIChmb2xkTGluZSkKICAgICAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuJGdldEZvbGRMaW5lVG9rZW5zKHJvdywgZm9sZExpbmUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKCiAgICAgICAgdmFyIGxhc3RMaW5lRWwgPSBwYXJlbnQ7CiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIHNwbGl0cyA9IHRoaXMuc2Vzc2lvbi5nZXRSb3dTcGxpdERhdGEocm93KTsKICAgICAgICAgICAgaWYgKHNwbGl0cyAmJiBzcGxpdHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRyZW5kZXJXcmFwcGVkTGluZShwYXJlbnQsIHRva2Vucywgc3BsaXRzKTsKICAgICAgICAgICAgICAgIHZhciBsYXN0TGluZUVsID0gcGFyZW50Lmxhc3RDaGlsZDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBsYXN0TGluZUVsID0gcGFyZW50OwogICAgICAgICAgICAgICAgaWYgKHRoaXMuJHVzZUxpbmVHcm91cHMoKSkgewogICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lRWwgPSB0aGlzLiRjcmVhdGVMaW5lRWxlbWVudCgpOwogICAgICAgICAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChsYXN0TGluZUVsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuJHJlbmRlclNpbXBsZUxpbmUobGFzdExpbmVFbCwgdG9rZW5zKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodGhpcy4kdXNlTGluZUdyb3VwcygpKSB7CiAgICAgICAgICAgIGxhc3RMaW5lRWwgPSB0aGlzLiRjcmVhdGVMaW5lRWxlbWVudCgpOwogICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQobGFzdExpbmVFbCk7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyAmJiBsYXN0TGluZUVsKSB7CiAgICAgICAgICAgIGlmIChmb2xkTGluZSkKICAgICAgICAgICAgICAgIHJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7CgogICAgICAgICAgICB2YXIgaW52aXNpYmxlRWwgPSB0aGlzLmRvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgIGludmlzaWJsZUVsLmNsYXNzTmFtZSA9ICJhY2VfaW52aXNpYmxlIGFjZV9pbnZpc2libGVfZW9sIjsKICAgICAgICAgICAgaW52aXNpYmxlRWwudGV4dENvbnRlbnQgPSByb3cgPT0gdGhpcy5zZXNzaW9uLmdldExlbmd0aCgpIC0gMSA/IHRoaXMuRU9GX0NIQVIgOiB0aGlzLkVPTF9DSEFSOwogICAgICAgICAgICAKICAgICAgICAgICAgbGFzdExpbmVFbC5hcHBlbmRDaGlsZChpbnZpc2libGVFbCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRnZXRGb2xkTGluZVRva2VucyA9IGZ1bmN0aW9uKHJvdywgZm9sZExpbmUpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICB2YXIgcmVuZGVyVG9rZW5zID0gW107CgogICAgICAgIGZ1bmN0aW9uIGFkZFRva2Vucyh0b2tlbnMsIGZyb20sIHRvKSB7CiAgICAgICAgICAgIHZhciBpZHggPSAwLCBjb2wgPSAwOwogICAgICAgICAgICB3aGlsZSAoKGNvbCArIHRva2Vuc1tpZHhdLnZhbHVlLmxlbmd0aCkgPCBmcm9tKSB7CiAgICAgICAgICAgICAgICBjb2wgKz0gdG9rZW5zW2lkeF0udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgaWR4Kys7CgogICAgICAgICAgICAgICAgaWYgKGlkeCA9PSB0b2tlbnMubGVuZ3RoKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY29sICE9IGZyb20pIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2Vuc1tpZHhdLnZhbHVlLnN1YnN0cmluZyhmcm9tIC0gY29sKTsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAodG8gLSBmcm9tKSkKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB0byAtIGZyb20pOwoKICAgICAgICAgICAgICAgIHJlbmRlclRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2tlbnNbaWR4XS50eXBlLAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgY29sID0gZnJvbSArIHZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlkeCArPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICB3aGlsZSAoY29sIDwgdG8gJiYgaWR4IDwgdG9rZW5zLmxlbmd0aCkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdG9rZW5zW2lkeF0udmFsdWU7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICsgY29sID4gdG8pIHsKICAgICAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHRva2Vuc1tpZHhdLnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5zdWJzdHJpbmcoMCwgdG8gLSBjb2wpCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICByZW5kZXJUb2tlbnMucHVzaCh0b2tlbnNbaWR4XSk7CiAgICAgICAgICAgICAgICBjb2wgKz0gdmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgaWR4ICs9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIGZvbGRMaW5lLndhbGsoZnVuY3Rpb24ocGxhY2Vob2xkZXIsIHJvdywgY29sdW1uLCBsYXN0Q29sdW1uLCBpc05ld1JvdykgewogICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmVuZGVyVG9rZW5zLnB1c2goewogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJmb2xkIiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGxhY2Vob2xkZXIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGlzTmV3Um93KQogICAgICAgICAgICAgICAgICAgIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CgogICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgYWRkVG9rZW5zKHRva2VucywgbGFzdENvbHVtbiwgY29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIGZvbGRMaW5lLmVuZC5yb3csIHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGZvbGRMaW5lLmVuZC5yb3cpLmxlbmd0aCk7CgogICAgICAgIHJldHVybiByZW5kZXJUb2tlbnM7CiAgICB9OwoKICAgIHRoaXMuJHVzZUxpbmVHcm91cHMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCk7CiAgICB9OwoKICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge307Cn0pLmNhbGwoVGV4dC5wcm90b3R5cGUpOwoKZXhwb3J0cy5UZXh0ID0gVGV4dDsKCn0pOwoKZGVmaW5lKCJhY2UvbGF5ZXIvY3Vyc29yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7Cgp2YXIgQ3Vyc29yID0gZnVuY3Rpb24ocGFyZW50RWwpIHsKICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9jdXJzb3ItbGF5ZXIiOwogICAgcGFyZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50KTsKICAgIAogICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTsKICAgIHRoaXMuaXNCbGlua2luZyA9IHRydWU7CiAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSAxMDAwOwogICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IGZhbHNlOwoKICAgIHRoaXMuY3Vyc29ycyA9IFtdOwogICAgdGhpcy5jdXJzb3IgPSB0aGlzLmFkZEN1cnNvcigpOwogICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9oaWRkZW4tY3Vyc29ycyIpOwogICAgdGhpcy4kdXBkYXRlQ3Vyc29ycyA9IHRoaXMuJHVwZGF0ZU9wYWNpdHkuYmluZCh0aGlzKTsKfTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy4kdXBkYXRlT3BhY2l0eSA9IGZ1bmN0aW9uKHZhbCkgewogICAgICAgIHZhciBjdXJzb3JzID0gdGhpcy5jdXJzb3JzOwogICAgICAgIGZvciAodmFyIGkgPSBjdXJzb3JzLmxlbmd0aDsgaS0tOyApCiAgICAgICAgICAgIGRvbS5zZXRTdHlsZShjdXJzb3JzW2ldLnN0eWxlLCAib3BhY2l0eSIsIHZhbCA/ICIiIDogIjAiKTsKICAgIH07CgogICAgdGhpcy4kc3RhcnRDc3NBbmltYXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgY3Vyc29ycyA9IHRoaXMuY3Vyc29yczsKICAgICAgICBmb3IgKHZhciBpID0gY3Vyc29ycy5sZW5ndGg7IGktLTsgKQogICAgICAgICAgICBjdXJzb3JzW2ldLnN0eWxlLmFuaW1hdGlvbkR1cmF0aW9uID0gdGhpcy5ibGlua0ludGVydmFsICsgIm1zIjsKCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9hbmltYXRlLWJsaW5raW5nIik7CiAgICAgICAgfS5iaW5kKHRoaXMpKTsKICAgIH07CiAgICAKICAgIHRoaXMuJHN0b3BDc3NBbmltYXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2FuaW1hdGUtYmxpbmtpbmciKTsKICAgIH07CgogICAgdGhpcy4kcGFkZGluZyA9IDA7CiAgICB0aGlzLnNldFBhZGRpbmcgPSBmdW5jdGlvbihwYWRkaW5nKSB7CiAgICAgICAgdGhpcy4kcGFkZGluZyA9IHBhZGRpbmc7CiAgICB9OwoKICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwogICAgfTsKCiAgICB0aGlzLnNldEJsaW5raW5nID0gZnVuY3Rpb24oYmxpbmtpbmcpIHsKICAgICAgICBpZiAoYmxpbmtpbmcgIT0gdGhpcy5pc0JsaW5raW5nKSB7CiAgICAgICAgICAgIHRoaXMuaXNCbGlua2luZyA9IGJsaW5raW5nOwogICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5zZXRCbGlua0ludGVydmFsID0gZnVuY3Rpb24oYmxpbmtJbnRlcnZhbCkgewogICAgICAgIGlmIChibGlua0ludGVydmFsICE9IHRoaXMuYmxpbmtJbnRlcnZhbCkgewogICAgICAgICAgICB0aGlzLmJsaW5rSW50ZXJ2YWwgPSBibGlua0ludGVydmFsOwogICAgICAgICAgICB0aGlzLnJlc3RhcnRUaW1lcigpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5zZXRTbW9vdGhCbGlua2luZyA9IGZ1bmN0aW9uKHNtb290aEJsaW5raW5nKSB7CiAgICAgICAgaWYgKHNtb290aEJsaW5raW5nICE9IHRoaXMuc21vb3RoQmxpbmtpbmcpIHsKICAgICAgICAgICAgdGhpcy5zbW9vdGhCbGlua2luZyA9IHNtb290aEJsaW5raW5nOwogICAgICAgICAgICBkb20uc2V0Q3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290aC1ibGlua2luZyIsIHNtb290aEJsaW5raW5nKTsKICAgICAgICAgICAgdGhpcy4kdXBkYXRlQ3Vyc29ycyh0cnVlKTsKICAgICAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuYWRkQ3Vyc29yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGVsLmNsYXNzTmFtZSA9ICJhY2VfY3Vyc29yIjsKICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZWwpOwogICAgICAgIHRoaXMuY3Vyc29ycy5wdXNoKGVsKTsKICAgICAgICByZXR1cm4gZWw7CiAgICB9OwoKICAgIHRoaXMucmVtb3ZlQ3Vyc29yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuY3Vyc29ycy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMuY3Vyc29ycy5wb3AoKTsKICAgICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbCk7CiAgICAgICAgICAgIHJldHVybiBlbDsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuaGlkZUN1cnNvciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgZG9tLmFkZENzc0NsYXNzKHRoaXMuZWxlbWVudCwgImFjZV9oaWRkZW4tY3Vyc29ycyIpOwogICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CiAgICB9OwoKICAgIHRoaXMuc2hvd0N1cnNvciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTsKICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX2hpZGRlbi1jdXJzb3JzIik7CiAgICAgICAgdGhpcy5yZXN0YXJ0VGltZXIoKTsKICAgIH07CgogICAgdGhpcy5yZXN0YXJ0VGltZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdXBkYXRlID0gdGhpcy4kdXBkYXRlQ3Vyc29yczsKICAgICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTsKICAgICAgICB0aGlzLiRzdG9wQ3NzQW5pbWF0aW9uKCk7CgogICAgICAgIGlmICh0aGlzLnNtb290aEJsaW5raW5nKSB7CiAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfc21vb3RoLWJsaW5raW5nIik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHVwZGF0ZSh0cnVlKTsKCiAgICAgICAgaWYgKCF0aGlzLmlzQmxpbmtpbmcgfHwgIXRoaXMuYmxpbmtJbnRlcnZhbCB8fCAhdGhpcy5pc1Zpc2libGUpIHsKICAgICAgICAgICAgdGhpcy4kc3RvcENzc0FuaW1hdGlvbigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5zbW9vdGhCbGlua2luZykgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX3Ntb290aC1ibGlua2luZyIpOwogICAgICAgICAgICB9LmJpbmQodGhpcykpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoZG9tLkhBU19DU1NfQU5JTUFUSU9OKSB7CiAgICAgICAgICAgIHRoaXMuJHN0YXJ0Q3NzQW5pbWF0aW9uKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGJsaW5rID0gZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB1cGRhdGUoZmFsc2UpOwogICAgICAgICAgICAgICAgfSwgMC42ICogdGhpcy5ibGlua0ludGVydmFsKTsKICAgICAgICAgICAgfS5iaW5kKHRoaXMpOwogICAgCiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdXBkYXRlKHRydWUpOwogICAgICAgICAgICAgICAgYmxpbmsoKTsKICAgICAgICAgICAgfSwgdGhpcy5ibGlua0ludGVydmFsKTsKICAgICAgICAgICAgYmxpbmsoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZ2V0UGl4ZWxQb3NpdGlvbiA9IGZ1bmN0aW9uKHBvc2l0aW9uLCBvblNjcmVlbikgewogICAgICAgIGlmICghdGhpcy5jb25maWcgfHwgIXRoaXMuc2Vzc2lvbikKICAgICAgICAgICAgcmV0dXJuIHtsZWZ0IDogMCwgdG9wIDogMH07CgogICAgICAgIGlmICghcG9zaXRpb24pCiAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTsKICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgdmFyIGN1cnNvckxlZnQgPSB0aGlzLiRwYWRkaW5nICsgKHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNCaWRpUm93KHBvcy5yb3csIHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgPyB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmdldFBvc0xlZnQocG9zLmNvbHVtbikKICAgICAgICAgICAgOiBwb3MuY29sdW1uICogdGhpcy5jb25maWcuY2hhcmFjdGVyV2lkdGgpOwoKICAgICAgICB2YXIgY3Vyc29yVG9wID0gKHBvcy5yb3cgLSAob25TY3JlZW4gPyB0aGlzLmNvbmZpZy5maXJzdFJvd1NjcmVlbiA6IDApKSAqCiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxpbmVIZWlnaHQ7CgogICAgICAgIHJldHVybiB7bGVmdCA6IGN1cnNvckxlZnQsIHRvcCA6IGN1cnNvclRvcH07CiAgICB9OwoKICAgIHRoaXMuaXNDdXJzb3JJblZpZXcgPSBmdW5jdGlvbihwaXhlbFBvcywgY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHBpeGVsUG9zLnRvcCA+PSAwICYmIHBpeGVsUG9zLnRvcCA8IGNvbmZpZy5tYXhIZWlnaHQ7CiAgICB9OwoKICAgIHRoaXMudXBkYXRlID0gZnVuY3Rpb24oY29uZmlnKSB7CiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7CgogICAgICAgIHZhciBzZWxlY3Rpb25zID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzOwogICAgICAgIHZhciBpID0gMCwgY3Vyc29ySW5kZXggPSAwOwoKICAgICAgICBpZiAoc2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHNlbGVjdGlvbnMubGVuZ3RoID09PSAwKXsKICAgICAgICAgICAgc2VsZWN0aW9ucyA9IFt7Y3Vyc29yOiBudWxsfV07CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHNlbGVjdGlvbnMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgIHZhciBwaXhlbFBvcyA9IHRoaXMuZ2V0UGl4ZWxQb3NpdGlvbihzZWxlY3Rpb25zW2ldLmN1cnNvciwgdHJ1ZSk7CiAgICAgICAgICAgIGlmICgocGl4ZWxQb3MudG9wID4gY29uZmlnLmhlaWdodCArIGNvbmZpZy5vZmZzZXQgfHwKICAgICAgICAgICAgICAgICBwaXhlbFBvcy50b3AgPCAwKSAmJiBpID4gMSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5jdXJzb3JzW2N1cnNvckluZGV4KytdIHx8IHRoaXMuYWRkQ3Vyc29yKCk7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGVsZW1lbnQuc3R5bGU7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIXRoaXMuZHJhd0N1cnNvcikgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ3Vyc29ySW5WaWV3KHBpeGVsUG9zLCBjb25maWcpKSB7CiAgICAgICAgICAgICAgICAgICAgZG9tLnNldFN0eWxlKHN0eWxlLCAiZGlzcGxheSIsICJub25lIik7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGRvbS5zZXRTdHlsZShzdHlsZSwgImRpc3BsYXkiLCAiYmxvY2siKTsKICAgICAgICAgICAgICAgICAgICBkb20udHJhbnNsYXRlKGVsZW1lbnQsIHBpeGVsUG9zLmxlZnQsIHBpeGVsUG9zLnRvcCk7CiAgICAgICAgICAgICAgICAgICAgZG9tLnNldFN0eWxlKHN0eWxlLCAid2lkdGgiLCBNYXRoLnJvdW5kKGNvbmZpZy5jaGFyYWN0ZXJXaWR0aCkgKyAicHgiKTsKICAgICAgICAgICAgICAgICAgICBkb20uc2V0U3R5bGUoc3R5bGUsICJoZWlnaHQiLCBjb25maWcubGluZUhlaWdodCArICJweCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5kcmF3Q3Vyc29yKGVsZW1lbnQsIHBpeGVsUG9zLCBjb25maWcsIHNlbGVjdGlvbnNbaV0sIHRoaXMuc2Vzc2lvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2hpbGUgKHRoaXMuY3Vyc29ycy5sZW5ndGggPiBjdXJzb3JJbmRleCkKICAgICAgICAgICAgdGhpcy5yZW1vdmVDdXJzb3IoKTsKCiAgICAgICAgdmFyIG92ZXJ3cml0ZSA9IHRoaXMuc2Vzc2lvbi5nZXRPdmVyd3JpdGUoKTsKICAgICAgICB0aGlzLiRzZXRPdmVyd3JpdGUob3ZlcndyaXRlKTsKICAgICAgICB0aGlzLiRwaXhlbFBvcyA9IHBpeGVsUG9zOwogICAgICAgIHRoaXMucmVzdGFydFRpbWVyKCk7CiAgICB9OwogICAgCiAgICB0aGlzLmRyYXdDdXJzb3IgPSBudWxsOwoKICAgIHRoaXMuJHNldE92ZXJ3cml0ZSA9IGZ1bmN0aW9uKG92ZXJ3cml0ZSkgewogICAgICAgIGlmIChvdmVyd3JpdGUgIT0gdGhpcy5vdmVyd3JpdGUpIHsKICAgICAgICAgICAgdGhpcy5vdmVyd3JpdGUgPSBvdmVyd3JpdGU7CiAgICAgICAgICAgIGlmIChvdmVyd3JpdGUpCiAgICAgICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5lbGVtZW50LCAiYWNlX292ZXJ3cml0ZS1jdXJzb3JzIik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmVsZW1lbnQsICJhY2Vfb3ZlcndyaXRlLWN1cnNvcnMiKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SWQpOwogICAgfTsKCn0pLmNhbGwoQ3Vyc29yLnByb3RvdHlwZSk7CgpleHBvcnRzLkN1cnNvciA9IEN1cnNvcjsKCn0pOwoKZGVmaW5lKCJhY2Uvc2Nyb2xsYmFyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIGRvbSA9IHJlcXVpcmUoIi4vbGliL2RvbSIpOwp2YXIgZXZlbnQgPSByZXF1aXJlKCIuL2xpYi9ldmVudCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKdmFyIE1BWF9TQ1JPTExfSCA9IDB4ODAwMDsKdmFyIFNjcm9sbEJhciA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgdGhpcy5lbGVtZW50ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJhY2Vfc2Nyb2xsYmFyIGFjZV9zY3JvbGxiYXIiICsgdGhpcy5jbGFzc1N1ZmZpeDsKCiAgICB0aGlzLmlubmVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5pbm5lci5jbGFzc05hbWUgPSAiYWNlX3Njcm9sbGJhci1pbm5lciI7CiAgICB0aGlzLmlubmVyLnRleHRDb250ZW50ID0gIlx4YTAiOwogICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaW5uZXIpOwoKICAgIHBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpOwoKICAgIHRoaXMuc2V0VmlzaWJsZShmYWxzZSk7CiAgICB0aGlzLnNraXBFdmVudCA9IGZhbHNlOwoKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMuZWxlbWVudCwgInNjcm9sbCIsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7CiAgICBldmVudC5hZGRMaXN0ZW5lcih0aGlzLmVsZW1lbnQsICJtb3VzZWRvd24iLCBldmVudC5wcmV2ZW50RGVmYXVsdCk7Cn07CgooZnVuY3Rpb24oKSB7CiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CgogICAgdGhpcy5zZXRWaXNpYmxlID0gZnVuY3Rpb24oaXNWaXNpYmxlKSB7CiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBpc1Zpc2libGUgPyAiIiA6ICJub25lIjsKICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGlzVmlzaWJsZTsKICAgICAgICB0aGlzLmNvZWZmID0gMTsKICAgIH07Cn0pLmNhbGwoU2Nyb2xsQmFyLnByb3RvdHlwZSk7CnZhciBWU2Nyb2xsQmFyID0gZnVuY3Rpb24ocGFyZW50LCByZW5kZXJlcikgewogICAgU2Nyb2xsQmFyLmNhbGwodGhpcywgcGFyZW50KTsKICAgIHRoaXMuc2Nyb2xsVG9wID0gMDsKICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gMDsKICAgIHJlbmRlcmVyLiRzY3JvbGxiYXJXaWR0aCA9IAogICAgdGhpcy53aWR0aCA9IGRvbS5zY3JvbGxiYXJXaWR0aChwYXJlbnQub3duZXJEb2N1bWVudCk7CiAgICB0aGlzLmlubmVyLnN0eWxlLndpZHRoID0KICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9ICh0aGlzLndpZHRoIHx8IDE1KSArIDUgKyAicHgiOwogICAgdGhpcy4kbWluV2lkdGggPSAwOwp9OwoKb29wLmluaGVyaXRzKFZTY3JvbGxCYXIsIFNjcm9sbEJhcik7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jbGFzc1N1ZmZpeCA9ICctdic7CiAgICB0aGlzLm9uU2Nyb2xsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF0aGlzLnNraXBFdmVudCkgewogICAgICAgICAgICB0aGlzLnNjcm9sbFRvcCA9IHRoaXMuZWxlbWVudC5zY3JvbGxUb3A7CiAgICAgICAgICAgIGlmICh0aGlzLmNvZWZmICE9IDEpIHsKICAgICAgICAgICAgICAgIHZhciBoID0gdGhpcy5lbGVtZW50LmNsaWVudEhlaWdodCAvIHRoaXMuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcCAqICgxIC0gaCkgLyAodGhpcy5jb2VmZiAtIGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuX2VtaXQoInNjcm9sbCIsIHtkYXRhOiB0aGlzLnNjcm9sbFRvcH0pOwogICAgICAgIH0KICAgICAgICB0aGlzLnNraXBFdmVudCA9IGZhbHNlOwogICAgfTsKICAgIHRoaXMuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5pc1Zpc2libGUgPyB0aGlzLndpZHRoIDogMCwgdGhpcy4kbWluV2lkdGggfHwgMCk7CiAgICB9OwogICAgdGhpcy5zZXRIZWlnaHQgPSBmdW5jdGlvbihoZWlnaHQpIHsKICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsKICAgIH07CiAgICB0aGlzLnNldElubmVySGVpZ2h0ID0gCiAgICB0aGlzLnNldFNjcm9sbEhlaWdodCA9IGZ1bmN0aW9uKGhlaWdodCkgewogICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgIGlmIChoZWlnaHQgPiBNQVhfU0NST0xMX0gpIHsKICAgICAgICAgICAgdGhpcy5jb2VmZiA9IE1BWF9TQ1JPTExfSCAvIGhlaWdodDsKICAgICAgICAgICAgaGVpZ2h0ID0gTUFYX1NDUk9MTF9IOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2VmZiAhPSAxKSB7CiAgICAgICAgICAgIHRoaXMuY29lZmYgPSAxOwogICAgICAgIH0KICAgICAgICB0aGlzLmlubmVyLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7CiAgICB9OwogICAgdGhpcy5zZXRTY3JvbGxUb3AgPSBmdW5jdGlvbihzY3JvbGxUb3ApIHsKICAgICAgICBpZiAodGhpcy5zY3JvbGxUb3AgIT0gc2Nyb2xsVG9wKSB7CiAgICAgICAgICAgIHRoaXMuc2tpcEV2ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zY3JvbGxUb3AgPSBzY3JvbGxUb3AgKiB0aGlzLmNvZWZmOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKFZTY3JvbGxCYXIucHJvdG90eXBlKTsKdmFyIEhTY3JvbGxCYXIgPSBmdW5jdGlvbihwYXJlbnQsIHJlbmRlcmVyKSB7CiAgICBTY3JvbGxCYXIuY2FsbCh0aGlzLCBwYXJlbnQpOwogICAgdGhpcy5zY3JvbGxMZWZ0ID0gMDsKICAgIHRoaXMuaGVpZ2h0ID0gcmVuZGVyZXIuJHNjcm9sbGJhcldpZHRoOwogICAgdGhpcy5pbm5lci5zdHlsZS5oZWlnaHQgPQogICAgdGhpcy5lbGVtZW50LnN0eWxlLmhlaWdodCA9ICh0aGlzLmhlaWdodCB8fCAxNSkgKyA1ICsgInB4IjsKfTsKCm9vcC5pbmhlcml0cyhIU2Nyb2xsQmFyLCBTY3JvbGxCYXIpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2xhc3NTdWZmaXggPSAnLWgnOwogICAgdGhpcy5vblNjcm9sbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5za2lwRXZlbnQpIHsKICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy5lbGVtZW50LnNjcm9sbExlZnQ7CiAgICAgICAgICAgIHRoaXMuX2VtaXQoInNjcm9sbCIsIHtkYXRhOiB0aGlzLnNjcm9sbExlZnR9KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5za2lwRXZlbnQgPSBmYWxzZTsKICAgIH07CiAgICB0aGlzLmdldEhlaWdodCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuaGVpZ2h0IDogMDsKICAgIH07CiAgICB0aGlzLnNldFdpZHRoID0gZnVuY3Rpb24od2lkdGgpIHsKICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICJweCI7CiAgICB9OwogICAgdGhpcy5zZXRJbm5lcldpZHRoID0gZnVuY3Rpb24od2lkdGgpIHsKICAgICAgICB0aGlzLmlubmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwogICAgfTsKICAgIHRoaXMuc2V0U2Nyb2xsV2lkdGggPSBmdW5jdGlvbih3aWR0aCkgewogICAgICAgIHRoaXMuaW5uZXIuc3R5bGUud2lkdGggPSB3aWR0aCArICJweCI7CiAgICB9OwogICAgdGhpcy5zZXRTY3JvbGxMZWZ0ID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkgewogICAgICAgIGlmICh0aGlzLnNjcm9sbExlZnQgIT0gc2Nyb2xsTGVmdCkgewogICAgICAgICAgICB0aGlzLnNraXBFdmVudCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChIU2Nyb2xsQmFyLnByb3RvdHlwZSk7CgoKZXhwb3J0cy5TY3JvbGxCYXIgPSBWU2Nyb2xsQmFyOyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CmV4cG9ydHMuU2Nyb2xsQmFyViA9IFZTY3JvbGxCYXI7IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKZXhwb3J0cy5TY3JvbGxCYXJIID0gSFNjcm9sbEJhcjsgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eQoKZXhwb3J0cy5WU2Nyb2xsQmFyID0gVlNjcm9sbEJhcjsKZXhwb3J0cy5IU2Nyb2xsQmFyID0gSFNjcm9sbEJhcjsKfSk7CgpkZWZpbmUoImFjZS9yZW5kZXJsb29wIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQiKTsKCgp2YXIgUmVuZGVyTG9vcCA9IGZ1bmN0aW9uKG9uUmVuZGVyLCB3aW4pIHsKICAgIHRoaXMub25SZW5kZXIgPSBvblJlbmRlcjsKICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgdGhpcy5jaGFuZ2VzID0gMDsKICAgIHRoaXMuJHJlY3Vyc2lvbkxpbWl0ID0gMjsKICAgIHRoaXMud2luZG93ID0gd2luIHx8IHdpbmRvdzsKICAgIHZhciBfc2VsZiA9IHRoaXM7CiAgICB0aGlzLl9mbHVzaCA9IGZ1bmN0aW9uKHRzKSB7CiAgICAgICAgX3NlbGYucGVuZGluZyA9IGZhbHNlOwogICAgICAgIHZhciBjaGFuZ2VzID0gX3NlbGYuY2hhbmdlczsKCiAgICAgICAgaWYgKGNoYW5nZXMpIHsKICAgICAgICAgICAgZXZlbnQuYmxvY2tJZGxlKDEwMCk7CiAgICAgICAgICAgIF9zZWxmLmNoYW5nZXMgPSAwOwogICAgICAgICAgICBfc2VsZi5vblJlbmRlcihjaGFuZ2VzKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKF9zZWxmLmNoYW5nZXMpIHsKICAgICAgICAgICAgaWYgKF9zZWxmLiRyZWN1cnNpb25MaW1pdC0tIDwgMCkgcmV0dXJuOwogICAgICAgICAgICBfc2VsZi5zY2hlZHVsZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9zZWxmLiRyZWN1cnNpb25MaW1pdCA9IDI7CiAgICAgICAgfQogICAgfTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLnNjaGVkdWxlID0gZnVuY3Rpb24oY2hhbmdlKSB7CiAgICAgICAgdGhpcy5jaGFuZ2VzID0gdGhpcy5jaGFuZ2VzIHwgY2hhbmdlOwogICAgICAgIGlmICh0aGlzLmNoYW5nZXMgJiYgIXRoaXMucGVuZGluZykgewogICAgICAgICAgICBldmVudC5uZXh0RnJhbWUodGhpcy5fZmx1c2gpOwogICAgICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5jbGVhciA9IGZ1bmN0aW9uKGNoYW5nZSkgewogICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy5jaGFuZ2VzOwogICAgICAgIHRoaXMuY2hhbmdlcyA9IDA7CiAgICAgICAgcmV0dXJuIGNoYW5nZXM7CiAgICB9OwoKfSkuY2FsbChSZW5kZXJMb29wLnByb3RvdHlwZSk7CgpleHBvcnRzLlJlbmRlckxvb3AgPSBSZW5kZXJMb29wOwp9KTsKCmRlZmluZSgiYWNlL2xheWVyL2ZvbnRfbWV0cmljcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL2V2ZW50IiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwp2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7Cgp2YXIgQ0hBUl9DT1VOVCA9IDI1NjsKdmFyIFVTRV9PQlNFUlZFUiA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciA9PSAiZnVuY3Rpb24iOwp2YXIgTCA9IDIwMDsKCnZhciBGb250TWV0cmljcyA9IGV4cG9ydHMuRm9udE1ldHJpY3MgPSBmdW5jdGlvbihwYXJlbnRFbCkgewogICAgdGhpcy5lbCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRoaXMuJHNldE1lYXN1cmVOb2RlU3R5bGVzKHRoaXMuZWwuc3R5bGUsIHRydWUpOwogICAgCiAgICB0aGlzLiRtYWluID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXModGhpcy4kbWFpbi5zdHlsZSk7CiAgICAKICAgIHRoaXMuJG1lYXN1cmVOb2RlID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy4kc2V0TWVhc3VyZU5vZGVTdHlsZXModGhpcy4kbWVhc3VyZU5vZGUuc3R5bGUpOwogICAgCiAgICAKICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQodGhpcy4kbWFpbik7CiAgICB0aGlzLmVsLmFwcGVuZENoaWxkKHRoaXMuJG1lYXN1cmVOb2RlKTsKICAgIHBhcmVudEVsLmFwcGVuZENoaWxkKHRoaXMuZWwpOwogICAgCiAgICB0aGlzLiRtZWFzdXJlTm9kZS5pbm5lckhUTUwgPSBsYW5nLnN0cmluZ1JlcGVhdCgiWCIsIENIQVJfQ09VTlQpOwogICAgCiAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9OwogICAgCiAgICAKICAgIGlmIChVU0VfT0JTRVJWRVIpCiAgICAgICAgdGhpcy4kYWRkT2JzZXJ2ZXIoKTsKICAgIGVsc2UKICAgICAgICB0aGlzLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgCiAgICB0aGlzLiRjaGFyYWN0ZXJTaXplID0ge3dpZHRoOiAwLCBoZWlnaHQ6IDB9OwogICAgCiAgICB0aGlzLiRzZXRNZWFzdXJlTm9kZVN0eWxlcyA9IGZ1bmN0aW9uKHN0eWxlLCBpc1Jvb3QpIHsKICAgICAgICBzdHlsZS53aWR0aCA9IHN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgICAgICBzdHlsZS5sZWZ0ID0gc3R5bGUudG9wID0gIjBweCI7CiAgICAgICAgc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgIHN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICBzdHlsZS53aGl0ZVNwYWNlID0gInByZSI7CgogICAgICAgIGlmICh1c2VyYWdlbnQuaXNJRSA8IDgpIHsKICAgICAgICAgICAgc3R5bGVbImZvbnQtZmFtaWx5Il0gPSAiaW5oZXJpdCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3R5bGUuZm9udCA9ICJpbmhlcml0IjsKICAgICAgICB9CiAgICAgICAgc3R5bGUub3ZlcmZsb3cgPSBpc1Jvb3QgPyAiaGlkZGVuIiA6ICJ2aXNpYmxlIjsKICAgIH07CgogICAgdGhpcy5jaGVja0ZvclNpemVDaGFuZ2VzID0gZnVuY3Rpb24oc2l6ZSkgewogICAgICAgIGlmIChzaXplID09PSB1bmRlZmluZWQpCiAgICAgICAgICAgIHNpemUgPSB0aGlzLiRtZWFzdXJlU2l6ZXMoKTsKICAgICAgICBpZiAoc2l6ZSAmJiAodGhpcy4kY2hhcmFjdGVyU2l6ZS53aWR0aCAhPT0gc2l6ZS53aWR0aCB8fCB0aGlzLiRjaGFyYWN0ZXJTaXplLmhlaWdodCAhPT0gc2l6ZS5oZWlnaHQpKSB7CiAgICAgICAgICAgIHRoaXMuJG1lYXN1cmVOb2RlLnN0eWxlLmZvbnRXZWlnaHQgPSAiYm9sZCI7CiAgICAgICAgICAgIHZhciBib2xkU2l6ZSA9IHRoaXMuJG1lYXN1cmVTaXplcygpOwogICAgICAgICAgICB0aGlzLiRtZWFzdXJlTm9kZS5zdHlsZS5mb250V2VpZ2h0ID0gIiI7CiAgICAgICAgICAgIHRoaXMuJGNoYXJhY3RlclNpemUgPSBzaXplOwogICAgICAgICAgICB0aGlzLmNoYXJTaXplcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgICAgIHRoaXMuYWxsb3dCb2xkRm9udHMgPSBib2xkU2l6ZSAmJiBib2xkU2l6ZS53aWR0aCA9PT0gc2l6ZS53aWR0aCAmJiBib2xkU2l6ZS5oZWlnaHQgPT09IHNpemUuaGVpZ2h0OwogICAgICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VDaGFyYWN0ZXJTaXplIiwge2RhdGE6IHNpemV9KTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLiRhZGRPYnNlcnZlciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICB0aGlzLiRvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oZSkgewogICAgICAgICAgICB2YXIgcmVjdCA9IGVbMF0uY29udGVudFJlY3Q7CiAgICAgICAgICAgIHNlbGYuY2hlY2tGb3JTaXplQ2hhbmdlcyh7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LAogICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGggLyBDSEFSX0NPVU5UCiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuJG9ic2VydmVyLm9ic2VydmUodGhpcy4kbWVhc3VyZU5vZGUpOwogICAgfTsKCiAgICB0aGlzLiRwb2xsU2l6ZUNoYW5nZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIgfHwgdGhpcy4kb2JzZXJ2ZXIpCiAgICAgICAgICAgIHJldHVybiB0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcjsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyID0gZXZlbnQub25JZGxlKGZ1bmN0aW9uIGNiKCkgewogICAgICAgICAgICBzZWxmLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKICAgICAgICAgICAgZXZlbnQub25JZGxlKGNiLCA1MDApOwogICAgICAgIH0sIDUwMCk7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFBvbGxpbmcgPSBmdW5jdGlvbih2YWwpIHsKICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlcygpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy4kcG9sbFNpemVDaGFuZ2VzVGltZXIpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcik7CiAgICAgICAgICAgIHRoaXMuJHBvbGxTaXplQ2hhbmdlc1RpbWVyID0gMDsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJG1lYXN1cmVTaXplcyA9IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICB2YXIgc2l6ZSA9IHsKICAgICAgICAgICAgaGVpZ2h0OiAobm9kZSB8fCB0aGlzLiRtZWFzdXJlTm9kZSkuY2xpZW50SGVpZ2h0LAogICAgICAgICAgICB3aWR0aDogKG5vZGUgfHwgdGhpcy4kbWVhc3VyZU5vZGUpLmNsaWVudFdpZHRoIC8gQ0hBUl9DT1VOVAogICAgICAgIH07CiAgICAgICAgaWYgKHNpemUud2lkdGggPT09IDAgfHwgc2l6ZS5oZWlnaHQgPT09IDApCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBzaXplOwogICAgfTsKCiAgICB0aGlzLiRtZWFzdXJlQ2hhcldpZHRoID0gZnVuY3Rpb24oY2gpIHsKICAgICAgICB0aGlzLiRtYWluLmlubmVySFRNTCA9IGxhbmcuc3RyaW5nUmVwZWF0KGNoLCBDSEFSX0NPVU5UKTsKICAgICAgICB2YXIgcmVjdCA9IHRoaXMuJG1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgcmV0dXJuIHJlY3Qud2lkdGggLyBDSEFSX0NPVU5UOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRDaGFyYWN0ZXJXaWR0aCA9IGZ1bmN0aW9uKGNoKSB7CiAgICAgICAgdmFyIHcgPSB0aGlzLmNoYXJTaXplc1tjaF07CiAgICAgICAgaWYgKHcgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB3ID0gdGhpcy5jaGFyU2l6ZXNbY2hdID0gdGhpcy4kbWVhc3VyZUNoYXJXaWR0aChjaCkgLyB0aGlzLiRjaGFyYWN0ZXJTaXplLndpZHRoOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdzsKICAgIH07CgogICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLiRwb2xsU2l6ZUNoYW5nZXNUaW1lcik7CiAgICAgICAgaWYgKHRoaXMuJG9ic2VydmVyKQogICAgICAgICAgICB0aGlzLiRvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgaWYgKHRoaXMuZWwgJiYgdGhpcy5lbC5wYXJlbnROb2RlKQogICAgICAgICAgICB0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCk7CiAgICB9OwoKICAgIAogICAgdGhpcy4kZ2V0Wm9vbSA9IGZ1bmN0aW9uIGdldFpvb20oZWxlbWVudCkgewogICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuIDE7CiAgICAgICAgcmV0dXJuICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS56b29tIHx8IDEpICogZ2V0Wm9vbShlbGVtZW50LnBhcmVudEVsZW1lbnQpOwogICAgfTsKICAgIHRoaXMuJGluaXRUcmFuc2Zvcm1NZWFzdXJlTm9kZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdCA9IGZ1bmN0aW9uKHQsIGwpIHsKICAgICAgICAgICAgcmV0dXJuIFsiZGl2IiwgewogICAgICAgICAgICAgICAgc3R5bGU6ICJwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiIgKyB0ICsgInB4O2xlZnQ6IiArIGwgKyAicHg7IgogICAgICAgICAgICB9XTsKICAgICAgICB9OwogICAgICAgIHRoaXMuZWxzID0gZG9tLmJ1aWxkRG9tKFt0KDAsIDApLCB0KEwsIDApLCB0KDAsIEwpLCB0KEwsIEwpXSwgdGhpcy5lbCk7CiAgICB9OwogICAgdGhpcy50cmFuc2Zvcm1Db29yZGluYXRlcyA9IGZ1bmN0aW9uKGNsaWVudFBvcywgZWxQb3MpIHsKICAgICAgICBpZiAoY2xpZW50UG9zKSB7CiAgICAgICAgICAgIHZhciB6b29tID0gdGhpcy4kZ2V0Wm9vbSh0aGlzLmVsKTsKICAgICAgICAgICAgY2xpZW50UG9zID0gbXVsKDEgLyB6b29tLCBjbGllbnRQb3MpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBzb2x2ZShsMSwgbDIsIHIpIHsKICAgICAgICAgICAgdmFyIGRldCA9IGwxWzFdICogbDJbMF0gLSBsMVswXSAqIGwyWzFdOwogICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgKC1sMlsxXSAqIHJbMF0gKyBsMlswXSAqIHJbMV0pIC8gZGV0LAogICAgICAgICAgICAgICAgKCtsMVsxXSAqIHJbMF0gLSBsMVswXSAqIHJbMV0pIC8gZGV0CiAgICAgICAgICAgIF07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIHN1YihhLCBiKSB7IHJldHVybiBbYVswXSAtIGJbMF0sIGFbMV0gLSBiWzFdXTsgfQogICAgICAgIGZ1bmN0aW9uIGFkZChhLCBiKSB7IHJldHVybiBbYVswXSArIGJbMF0sIGFbMV0gKyBiWzFdXTsgfQogICAgICAgIGZ1bmN0aW9uIG11bChhLCBiKSB7IHJldHVybiBbYSAqIGJbMF0sIGEgKiBiWzFdXTsgfQoKICAgICAgICBpZiAoIXRoaXMuZWxzKQogICAgICAgICAgICB0aGlzLiRpbml0VHJhbnNmb3JtTWVhc3VyZU5vZGVzKCk7CiAgICAgICAgCiAgICAgICAgZnVuY3Rpb24gcChlbCkgewogICAgICAgICAgICB2YXIgciA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICByZXR1cm4gW3IubGVmdCwgci50b3BdOwogICAgICAgIH0KCiAgICAgICAgdmFyIGEgPSBwKHRoaXMuZWxzWzBdKTsKICAgICAgICB2YXIgYiA9IHAodGhpcy5lbHNbMV0pOwogICAgICAgIHZhciBjID0gcCh0aGlzLmVsc1syXSk7CiAgICAgICAgdmFyIGQgPSBwKHRoaXMuZWxzWzNdKTsKCiAgICAgICAgdmFyIGggPSBzb2x2ZShzdWIoZCwgYiksIHN1YihkLCBjKSwgc3ViKGFkZChiLCBjKSwgYWRkKGQsIGEpKSk7CgogICAgICAgIHZhciBtMSA9IG11bCgxICsgaFswXSwgc3ViKGIsIGEpKTsKICAgICAgICB2YXIgbTIgPSBtdWwoMSArIGhbMV0sIHN1YihjLCBhKSk7CiAgICAgICAgCiAgICAgICAgaWYgKGVsUG9zKSB7CiAgICAgICAgICAgIHZhciB4ID0gZWxQb3M7CiAgICAgICAgICAgIHZhciBrID0gaFswXSAqIHhbMF0gLyBMICsgaFsxXSAqIHhbMV0gLyBMICsgMTsKICAgICAgICAgICAgdmFyIHV0ID0gYWRkKG11bCh4WzBdLCBtMSksIG11bCh4WzFdLCBtMikpOwogICAgICAgICAgICByZXR1cm4gIGFkZChtdWwoMSAvIGsgLyBMLCB1dCksIGEpOwogICAgICAgIH0KICAgICAgICB2YXIgdSA9IHN1YihjbGllbnRQb3MsIGEpOwogICAgICAgIHZhciBmID0gc29sdmUoc3ViKG0xLCBtdWwoaFswXSwgdSkpLCBzdWIobTIsIG11bChoWzFdLCB1KSksIHUpOwogICAgICAgIHJldHVybiBtdWwoTCwgZik7CiAgICB9OwogICAgCn0pLmNhbGwoRm9udE1ldHJpY3MucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvdmlydHVhbF9yZW5kZXJlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9kb20iLCJhY2UvY29uZmlnIiwiYWNlL2xheWVyL2d1dHRlciIsImFjZS9sYXllci9tYXJrZXIiLCJhY2UvbGF5ZXIvdGV4dCIsImFjZS9sYXllci9jdXJzb3IiLCJhY2Uvc2Nyb2xsYmFyIiwiYWNlL3Njcm9sbGJhciIsImFjZS9yZW5kZXJsb29wIiwiYWNlL2xheWVyL2ZvbnRfbWV0cmljcyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9saWIvdXNlcmFnZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4vY29uZmlnIik7CnZhciBHdXR0ZXJMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvZ3V0dGVyIikuR3V0dGVyOwp2YXIgTWFya2VyTGF5ZXIgPSByZXF1aXJlKCIuL2xheWVyL21hcmtlciIpLk1hcmtlcjsKdmFyIFRleHRMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvdGV4dCIpLlRleHQ7CnZhciBDdXJzb3JMYXllciA9IHJlcXVpcmUoIi4vbGF5ZXIvY3Vyc29yIikuQ3Vyc29yOwp2YXIgSFNjcm9sbEJhciA9IHJlcXVpcmUoIi4vc2Nyb2xsYmFyIikuSFNjcm9sbEJhcjsKdmFyIFZTY3JvbGxCYXIgPSByZXF1aXJlKCIuL3Njcm9sbGJhciIpLlZTY3JvbGxCYXI7CnZhciBSZW5kZXJMb29wID0gcmVxdWlyZSgiLi9yZW5kZXJsb29wIikuUmVuZGVyTG9vcDsKdmFyIEZvbnRNZXRyaWNzID0gcmVxdWlyZSgiLi9sYXllci9mb250X21ldHJpY3MiKS5Gb250TWV0cmljczsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBlZGl0b3JDc3MgPSAiXAouYWNlX2JyMSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDt9XAouYWNlX2JyMiB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDt9XAouYWNlX2JyMyB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDt9XAouYWNlX2JyNCB7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XAouYWNlX2JyNSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XAouYWNlX2JyNiB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XAouYWNlX2JyNyB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9XAouYWNlX2JyOCB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyA6IDNweDt9XAouYWNlX2JyOSB7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XAouYWNlX2JyMTB7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XAouYWNlX2JyMTF7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XAouYWNlX2JyMTJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XAouYWNlX2JyMTN7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XAouYWNlX2JyMTR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXMgICA6IDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogIDNweDt9XAouYWNlX2JyMTV7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1cyAgICA6IDNweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICAgIDNweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogM3B4O31cCi5hY2VfZWRpdG9yIHtcCnBvc2l0aW9uOiByZWxhdGl2ZTtcCm92ZXJmbG93OiBoaWRkZW47XApmb250OiAxMnB4L25vcm1hbCAnTW9uYWNvJywgJ01lbmxvJywgJ1VidW50dSBNb25vJywgJ0NvbnNvbGFzJywgJ3NvdXJjZS1jb2RlLXBybycsIG1vbm9zcGFjZTtcCmRpcmVjdGlvbjogbHRyO1wKdGV4dC1hbGlnbjogbGVmdDtcCi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcCn1cCi5hY2Vfc2Nyb2xsZXIge1wKcG9zaXRpb246IGFic29sdXRlO1wKb3ZlcmZsb3c6IGhpZGRlbjtcCnRvcDogMDtcCmJvdHRvbTogMDtcCmJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7XAotbXMtdXNlci1zZWxlY3Q6IG5vbmU7XAotbW96LXVzZXItc2VsZWN0OiBub25lO1wKLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcCnVzZXItc2VsZWN0OiBub25lO1wKY3Vyc29yOiB0ZXh0O1wKfVwKLmFjZV9jb250ZW50IHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCmJveC1zaXppbmc6IGJvcmRlci1ib3g7XAptaW4td2lkdGg6IDEwMCU7XApjb250YWluOiBzdHlsZSBzaXplIGxheW91dDtcCn1cCi5hY2VfZHJhZ2dpbmcgLmFjZV9zY3JvbGxlcjpiZWZvcmV7XApwb3NpdGlvbjogYWJzb2x1dGU7XAp0b3A6IDA7XApsZWZ0OiAwO1wKcmlnaHQ6IDA7XApib3R0b206IDA7XApjb250ZW50OiAnJztcCmJhY2tncm91bmQ6IHJnYmEoMjUwLCAyNTAsIDI1MCwgMC4wMSk7XAp6LWluZGV4OiAxMDAwO1wKfVwKLmFjZV9kcmFnZ2luZy5hY2VfZGFyayAuYWNlX3Njcm9sbGVyOmJlZm9yZXtcCmJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wMSk7XAp9XAouYWNlX3NlbGVjdGluZywgLmFjZV9zZWxlY3RpbmcgKiB7XApjdXJzb3I6IHRleHQgIWltcG9ydGFudDtcCn1cCi5hY2VfZ3V0dGVyIHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCm92ZXJmbG93IDogaGlkZGVuO1wKd2lkdGg6IGF1dG87XAp0b3A6IDA7XApib3R0b206IDA7XApsZWZ0OiAwO1wKY3Vyc29yOiBkZWZhdWx0O1wKei1pbmRleDogNDtcCi1tcy11c2VyLXNlbGVjdDogbm9uZTtcCi1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XAotd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1wKdXNlci1zZWxlY3Q6IG5vbmU7XApjb250YWluOiBzdHlsZSBzaXplIGxheW91dDtcCn1cCi5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCmxlZnQ6IDA7XApyaWdodDogMDtcCn1cCi5hY2Vfc2Nyb2xsZXIuYWNlX3Njcm9sbC1sZWZ0IHtcCmJveC1zaGFkb3c6IDE3cHggMCAxNnB4IC0xNnB4IHJnYmEoMCwgMCwgMCwgMC40KSBpbnNldDtcCn1cCi5hY2VfZ3V0dGVyLWNlbGwge1wKcG9zaXRpb246IGFic29sdXRlO1wKdG9wOiAwO1wKbGVmdDogMDtcCnJpZ2h0OiAwO1wKcGFkZGluZy1sZWZ0OiAxOXB4O1wKcGFkZGluZy1yaWdodDogNnB4O1wKYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCn1cCi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2Vycm9yIHtcCmJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUJPRkJNVkVYLy8vLy8vLy8vUVJzd0ZBYi9VaTR3RkFZd0ZBWXdGQWFXR0FmRFJ5bXpPU0gvUHhzd0ZBYi9TaVV3RkFZd0ZBYlVQUnZqUWlEbGxvZzVIaEhkUnlic1RpMy9UeXY5VGlyK1N5ai9VQzMvLy8vWHVyZWJNQkl3RkFiL1JTSGJQeC9nVXpmZHdMM2t6TWl2S0JBd0ZBYmJ2Ym5oUHg2Nk5ob3dGQVl3RkFhWkpnOHdGQWF4S0JEWnVyZi9SQjZtTXhiL1NDTXdGQVl3RkFieFFCMytSQjR3RkFiL1FoeTRPaCs0UWlmYk5SY3dGQVl3RkFZd0ZBYi9RUnpkTmhnd0ZBWXdGQWJhdjd2L1V5N29hRTY4TUJLNUx4TGV3ci9yMk5YZXdMc3dGQWF4Snc0d0ZBYmtQUnkyUHlZd0ZBYXhLaExtMXRNd0ZBYXpQaVF3RkFhVUdBYi9RQnJmT3gzYnZydi9WQy9tYUU0d0ZBYlJQQnE2TVJPOFF5bmV3OERwMnRqZndiMHdGQWJ4NmVqdTUrYnk2dW5zNHVIOS9mMzYrdnIvR2tIakFBQUFZblJTVGxNQUd0KzY0cm5XdS9ibzhlQUE0SW5IMytEd29ON2o0ZUxpNHhQOTlOZmc0K2IrL3U5Qi9lRHMxTUQxbU83KzRQSGcyTVhhMzQ3Zzd2RGl6TUxONGVHK1B2N2k1ZXZzL3Y3OXl1N1MzL0RWNy80OThZdjI0ZUgrNHVmUTNPenUvdjcreTEzc1Jxd0FBQURMU1VSQlZIamFaYy9YRHNGZ0dJQmh0RHJzaGxpdG1rMklyYkhGcUwycHZYZi8rNzhEUG9rajcrRno5cXBVLzlVWEpJbGhtUGFUYVE2UVBhejBtbSs1Z3drZ292Y1Y2R1p6ZDVKdENRd2dzeG9IT3ZKTzE1a2xlUkxBbk1nSEZJRVNVRVBtYXdCOW5nbWVsVHRpcHd3ZkFTaWx4T0x5aVY1VVZVeVZBZmJHMGNDUEhpZytHQmt6QUVOSFMwQXN0VkY2YmFjWklPemdMbXhzSGJ0Mk9lY05nSkM4M0pFUm1lUFVZcThBUkdrSng2WHRGc2RkZEJRZ1pFMm5QUjZDSUNaaGF3akE0RmIvY2h2KzM5OWtmUitNTU1ER09RQUFBQUJKUlU1RXJrSmdnZz09XCIpO1wKYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcCmJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XAp9XAouYWNlX2d1dHRlci1jZWxsLmFjZV93YXJuaW5nIHtcCmJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBTUFBQUFvTFE5VEFBQUFtVkJNVkVYLy8vOEFBQUQvLy84QUFBQUFBQUJQU3piLzVzQUFBQUIvYmxILzczei91bGtBQUFBQUFBRDg1cGtBQUFBQUFBQUNBZ1Avdkd6L3JrRGVyR2JHclY3L3BrUUlDQWYvLy8vZTBJc0FBQUQvb0VEL3FUdmhyblVBQUFEL3lIRC9uamNBQUFEdXYyci9uei8vb1RqL3AwNjRvR2YvekhBQUFBQTlOaXIvdEZJQUFBRC90bFRpdVdmL3RrSUFBQUN5blhFQUFBQUFBQUF0SVJXN3pCcEJBQUFBTTNSU1RsTUFBQlIxbTdSWE84TG4zMVozNnpUK25lWGU1T3pvb1JEZm4rVFo0cDNoMmhUZjR0M2szdWN5ck4xSzUrWGFrczUyU2ZzOUNYZ3JBQUFBamtsRVFWUjQybzNQYlErQ0lCUUZZRXdib1BoU1lnb1l1bklxcUxuNi96OHVZZEg4Vm1kbnU5dno0V3dYZ04veFRQUkQyK3NnT2NaanNnZS93aFhaZ1VhWVl2VDhRbnVKYVVyanJIVVFyZUdjenVFYWZRQ08vU0pUdWZUYnJvV3NQZ3NsbFZocTN3SkVrMmpVU3pYM0NVRURKQzg0NzA3ZGpSYzVNVEFReG9MZ3VwV1J3VzZVQjVmUysrTlY4QWJPWmduc0M3QnBFQUFBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCmJhY2tncm91bmQtcG9zaXRpb246IDJweCBjZW50ZXI7XAp9XAouYWNlX2d1dHRlci1jZWxsLmFjZV9pbmZvIHtcCmJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBQUFBQUE2bUtDOUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBQUowVWs1VEFBQjJrODA0QUFBQVBrbEVRVlFZMDJOZ0lCNjhRdU8zdGlMem5qQXdwS1RnTnlEYk1lZ3dpc0NIWlVFVFVaVjBacU9xdUJwWGoycnRucFNKVDFBRW5uUm1MMk9nR2dBQUlLa1JRYXAyaHRnQUFBQUFTVVZPUks1Q1lJST1cIik7XApiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggY2VudGVyO1wKfVwKLmFjZV9kYXJrIC5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1wKYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQkFNQUFBRHQzZUpTQUFBQUpGQk1WRVVBQUFDaG9hR0FnSUFxS2lxK3ZyNnRyYTFaV1ZtVWxKU2JtNXM4UER4dWJtNTZlbnJkZ3pnM0FBQUFBWFJTVGxNQVFPYllaZ0FBQUNsSlJFRlVlTnBqWU1BUGRzTVlIZWd5SlpGUUJsc1VsTUZWQ1dVWUtrQVpNeFpBR2R4bERNUUJBRytUQlA0QjZSeUpBQUFBQUVsRlRrU3VRbUNDXCIpO1wKfVwKLmFjZV9zY3JvbGxiYXIge1wKY29udGFpbjogc3RyaWN0O1wKcG9zaXRpb246IGFic29sdXRlO1wKcmlnaHQ6IDA7XApib3R0b206IDA7XAp6LWluZGV4OiA2O1wKfVwKLmFjZV9zY3JvbGxiYXItaW5uZXIge1wKcG9zaXRpb246IGFic29sdXRlO1wKY3Vyc29yOiB0ZXh0O1wKbGVmdDogMDtcCnRvcDogMDtcCn1cCi5hY2Vfc2Nyb2xsYmFyLXZ7XApvdmVyZmxvdy14OiBoaWRkZW47XApvdmVyZmxvdy15OiBzY3JvbGw7XAp0b3A6IDA7XAp9XAouYWNlX3Njcm9sbGJhci1oIHtcCm92ZXJmbG93LXg6IHNjcm9sbDtcCm92ZXJmbG93LXk6IGhpZGRlbjtcCmxlZnQ6IDA7XAp9XAouYWNlX3ByaW50LW1hcmdpbiB7XApwb3NpdGlvbjogYWJzb2x1dGU7XApoZWlnaHQ6IDEwMCU7XAp9XAouYWNlX3RleHQtaW5wdXQge1wKcG9zaXRpb246IGFic29sdXRlO1wKei1pbmRleDogMDtcCndpZHRoOiAwLjVlbTtcCmhlaWdodDogMWVtO1wKb3BhY2l0eTogMDtcCmJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wKLW1vei1hcHBlYXJhbmNlOiBub25lO1wKYXBwZWFyYW5jZTogbm9uZTtcCmJvcmRlcjogbm9uZTtcCnJlc2l6ZTogbm9uZTtcCm91dGxpbmU6IG5vbmU7XApvdmVyZmxvdzogaGlkZGVuO1wKZm9udDogaW5oZXJpdDtcCnBhZGRpbmc6IDAgMXB4O1wKbWFyZ2luOiAwIC0xcHg7XApjb250YWluOiBzdHJpY3Q7XAotbXMtdXNlci1zZWxlY3Q6IHRleHQ7XAotbW96LXVzZXItc2VsZWN0OiB0ZXh0O1wKLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDtcCnVzZXItc2VsZWN0OiB0ZXh0O1wKd2hpdGUtc3BhY2U6IHByZSFpbXBvcnRhbnQ7XAp9XAouYWNlX3RleHQtaW5wdXQuYWNlX2NvbXBvc2l0aW9uIHtcCmJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1wKY29sb3I6IGluaGVyaXQ7XAp6LWluZGV4OiAxMDAwO1wKb3BhY2l0eTogMTtcCn1cCi5hY2VfY29tcG9zaXRpb25fcGxhY2Vob2xkZXIgeyBjb2xvcjogdHJhbnNwYXJlbnQgfVwKLmFjZV9jb21wb3NpdGlvbl9tYXJrZXIgeyBcCmJvcmRlci1ib3R0b206IDFweCBzb2xpZDtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCmJvcmRlci1yYWRpdXM6IDA7XAptYXJnaW4tdG9wOiAxcHg7XAp9XApbYWNlX25vY29udGV4dD10cnVlXSB7XAp0cmFuc2Zvcm06IG5vbmUhaW1wb3J0YW50O1wKZmlsdGVyOiBub25lIWltcG9ydGFudDtcCnBlcnNwZWN0aXZlOiBub25lIWltcG9ydGFudDtcCmNsaXAtcGF0aDogbm9uZSFpbXBvcnRhbnQ7XAptYXNrIDogbm9uZSFpbXBvcnRhbnQ7XApjb250YWluOiBub25lIWltcG9ydGFudDtcCnBlcnNwZWN0aXZlOiBub25lIWltcG9ydGFudDtcCm1peC1ibGVuZC1tb2RlOiBpbml0aWFsIWltcG9ydGFudDtcCnotaW5kZXg6IGF1dG87XAp9XAouYWNlX2xheWVyIHtcCnotaW5kZXg6IDE7XApwb3NpdGlvbjogYWJzb2x1dGU7XApvdmVyZmxvdzogaGlkZGVuO1wKd29yZC13cmFwOiBub3JtYWw7XAp3aGl0ZS1zcGFjZTogcHJlO1wKaGVpZ2h0OiAxMDAlO1wKd2lkdGg6IDEwMCU7XApib3gtc2l6aW5nOiBib3JkZXItYm94O1wKcG9pbnRlci1ldmVudHM6IG5vbmU7XAp9XAouYWNlX2d1dHRlci1sYXllciB7XApwb3NpdGlvbjogcmVsYXRpdmU7XAp3aWR0aDogYXV0bztcCnRleHQtYWxpZ246IHJpZ2h0O1wKcG9pbnRlci1ldmVudHM6IGF1dG87XApoZWlnaHQ6IDEwMDAwMDBweDtcCmNvbnRhaW46IHN0eWxlIHNpemUgbGF5b3V0O1wKfVwKLmFjZV90ZXh0LWxheWVyIHtcCmZvbnQ6IGluaGVyaXQgIWltcG9ydGFudDtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCmhlaWdodDogMTAwMDAwMHB4O1wKd2lkdGg6IDEwMDAwMDBweDtcCmNvbnRhaW46IHN0eWxlIHNpemUgbGF5b3V0O1wKfVwKLmFjZV90ZXh0LWxheWVyID4gLmFjZV9saW5lLCAuYWNlX3RleHQtbGF5ZXIgPiAuYWNlX2xpbmVfZ3JvdXAge1wKY29udGFpbjogc3R5bGUgc2l6ZSBsYXlvdXQ7XApwb3NpdGlvbjogYWJzb2x1dGU7XAp0b3A6IDA7XApsZWZ0OiAwO1wKcmlnaHQ6IDA7XAp9XAouYWNlX2hpZHBpIC5hY2VfdGV4dC1sYXllcixcCi5hY2VfaGlkcGkgLmFjZV9ndXR0ZXItbGF5ZXIsXAouYWNlX2hpZHBpIC5hY2VfY29udGVudCxcCi5hY2VfaGlkcGkgLmFjZV9ndXR0ZXIge1wKY29udGFpbjogc3RyaWN0O1wKd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcCn1cCi5hY2VfaGlkcGkgLmFjZV90ZXh0LWxheWVyID4gLmFjZV9saW5lLCBcCi5hY2VfaGlkcGkgLmFjZV90ZXh0LWxheWVyID4gLmFjZV9saW5lX2dyb3VwIHtcCmNvbnRhaW46IHN0cmljdDtcCn1cCi5hY2VfY2prIHtcCmRpc3BsYXk6IGlubGluZS1ibG9jaztcCnRleHQtYWxpZ246IGNlbnRlcjtcCn1cCi5hY2VfY3Vyc29yLWxheWVyIHtcCnotaW5kZXg6IDQ7XAp9XAouYWNlX2N1cnNvciB7XAp6LWluZGV4OiA0O1wKcG9zaXRpb246IGFic29sdXRlO1wKYm94LXNpemluZzogYm9yZGVyLWJveDtcCmJvcmRlci1sZWZ0OiAycHggc29saWQ7XAp0cmFuc2Zvcm06IHRyYW5zbGF0ZXooMCk7XAp9XAouYWNlX211bHRpc2VsZWN0IC5hY2VfY3Vyc29yIHtcCmJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XAp9XAouYWNlX3NsaW0tY3Vyc29ycyAuYWNlX2N1cnNvciB7XApib3JkZXItbGVmdC13aWR0aDogMXB4O1wKfVwKLmFjZV9vdmVyd3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XApib3JkZXItbGVmdC13aWR0aDogMDtcCmJvcmRlci1ib3R0b206IDFweCBzb2xpZDtcCn1cCi5hY2VfaGlkZGVuLWN1cnNvcnMgLmFjZV9jdXJzb3Ige1wKb3BhY2l0eTogMC4yO1wKfVwKLmFjZV9oYXNQbGFjZWhvbGRlciAuYWNlX2hpZGRlbi1jdXJzb3JzIC5hY2VfY3Vyc29yIHtcCm9wYWNpdHk6IDA7XAp9XAouYWNlX3Ntb290aC1ibGlua2luZyAuYWNlX2N1cnNvciB7XAp0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzO1wKfVwKLmFjZV9hbmltYXRlLWJsaW5raW5nIC5hY2VfY3Vyc29yIHtcCmFuaW1hdGlvbi1kdXJhdGlvbjogMTAwMG1zO1wKYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogc3RlcC1lbmQ7XAphbmltYXRpb24tbmFtZTogYmxpbmstYWNlLWFuaW1hdGU7XAphbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcCn1cCi5hY2VfYW5pbWF0ZS1ibGlua2luZy5hY2Vfc21vb3RoLWJsaW5raW5nIC5hY2VfY3Vyc29yIHtcCmFuaW1hdGlvbi1kdXJhdGlvbjogMTAwMG1zO1wKYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbi1vdXQ7XAphbmltYXRpb24tbmFtZTogYmxpbmstYWNlLWFuaW1hdGUtc21vb3RoO1wKfVwKQGtleWZyYW1lcyBibGluay1hY2UtYW5pbWF0ZSB7XApmcm9tLCB0byB7IG9wYWNpdHk6IDE7IH1cCjYwJSB7IG9wYWNpdHk6IDA7IH1cCn1cCkBrZXlmcmFtZXMgYmxpbmstYWNlLWFuaW1hdGUtc21vb3RoIHtcCmZyb20sIHRvIHsgb3BhY2l0eTogMTsgfVwKNDUlIHsgb3BhY2l0eTogMTsgfVwKNjAlIHsgb3BhY2l0eTogMDsgfVwKODUlIHsgb3BhY2l0eTogMDsgfVwKfVwKLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwLCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCnotaW5kZXg6IDM7XAp9XAouYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApwb3NpdGlvbjogYWJzb2x1dGU7XAp6LWluZGV4OiA1O1wKfVwKLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCnotaW5kZXg6IDY7XAp9XAouYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCnotaW5kZXg6IDI7XAp9XAouYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKcG9zaXRpb246IGFic29sdXRlO1wKei1pbmRleDogNDtcCmJveC1zaXppbmc6IGJvcmRlci1ib3g7XAp9XAouYWNlX2xpbmUgLmFjZV9mb2xkIHtcCmJveC1zaXppbmc6IGJvcmRlci1ib3g7XApkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XApoZWlnaHQ6IDExcHg7XAptYXJnaW4tdG9wOiAtMnB4O1wKdmVydGljYWwtYWxpZ246IG1pZGRsZTtcCmJhY2tncm91bmQtaW1hZ2U6XAp1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJFQUFBQUpDQVlBQUFEVTZNY01BQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUpwSlJFRlVlTnBpL1AvL1B3T2xnQVhHWUdSa2xBVlNva0Q4R21qd1kxd2FzS2xqUXBZQUN0cENGZUFEY0hWUWZReU1RQXd6d0FaSTN3Skt2Q0xrZktCYU1TQ2xCbFI3Qk9RaWtDRkdRRUVySUgwVnFrYWJpR0NBcXdVYWRBelpKUnhRci8wZ3dpWElhbDh6UVFQbk5WVGdKMVRkYXdMMFQ1Z0JJUDFNVUpOaEJ2MkhLb1FISGpxTnJBNFdPNHpZMGdseU5LTFQyS0lmSU1BQVFzZGdHaVh2Z25ZQUFBQUFTVVZPUks1Q1lJST1cIiksXAp1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQTNDQVlBQUFETk5pQTVBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUNKSlJFRlVlTnBpK1AvL2Z4Z1RBd1BEQnhEeEQwNzhSU1grWWVFeURGTUNJTUFBSTNJTm1YaXdmMllBQUFBQVNVVk9SSzVDWUlJPVwiKTtcCmJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQsIHJlcGVhdC14O1wKYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlciwgdG9wIGxlZnQ7XApjb2xvcjogdHJhbnNwYXJlbnQ7XApib3JkZXI6IDFweCBzb2xpZCBibGFjaztcCmJvcmRlci1yYWRpdXM6IDJweDtcCmN1cnNvcjogcG9pbnRlcjtcCnBvaW50ZXItZXZlbnRzOiBhdXRvO1wKfVwKLmFjZV9kYXJrIC5hY2VfZm9sZCB7XAp9XAouYWNlX2ZvbGQ6aG92ZXJ7XApiYWNrZ3JvdW5kLWltYWdlOlwKdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCRUFBQUFKQ0FZQUFBRFU2TWNNQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFKcEpSRUZVZU5waS9QLy9Qd09sZ0FYR1lHUmtsQVZTb2tEOEdtandZMXdhc0tsalFwWUFDdHBDRmVBRGNIVlFmUXlNUUF3endBWkkzd0pLdkNMa2ZLQmFNU0NsQmxSN0JPUWlrQ0ZHUUVFcklIMFZxa2FiaUdDQXF3VWFkQXpaSlJ4UXIvMGd3aVhJYWw4elFRUG5OVlRnSjFUZGF3TDBUNWdCSVAxTVVKTmhCdjJIS29RSEhqcU5yQTRXTzR6WTBnbHlOS0xUMktJZklNQUFRc2RnR2lYdmduWUFBQUFBU1VWT1JLNUNZSUk9XCIpLFwKdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUEzQ0FZQUFBRE5OaUE1QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFDQkpSRUZVZU5waStQLy9mejRUQXdQRFp4RHhENVg0aTVmTE1Fd0pnQUFEQUVQVkRiak53ODdaQUFBQUFFbEZUa1N1UW1DQ1wiKTtcCn1cCi5hY2VfdG9vbHRpcCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGO1wKYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XApib3JkZXI6IDFweCBzb2xpZCBncmF5O1wKYm9yZGVyLXJhZGl1czogMXB4O1wKYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcCmNvbG9yOiBibGFjaztcCm1heC13aWR0aDogMTAwJTtcCnBhZGRpbmc6IDNweCA0cHg7XApwb3NpdGlvbjogZml4ZWQ7XAp6LWluZGV4OiA5OTk5OTk7XApib3gtc2l6aW5nOiBib3JkZXItYm94O1wKY3Vyc29yOiBkZWZhdWx0O1wKd2hpdGUtc3BhY2U6IHByZTtcCndvcmQtd3JhcDogYnJlYWstd29yZDtcCmxpbmUtaGVpZ2h0OiBub3JtYWw7XApmb250LXN0eWxlOiBub3JtYWw7XApmb250LXdlaWdodDogbm9ybWFsO1wKbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcCnBvaW50ZXItZXZlbnRzOiBub25lO1wKfVwKLmFjZV9mb2xkaW5nLWVuYWJsZWQgPiAuYWNlX2d1dHRlci1jZWxsIHtcCnBhZGRpbmctcmlnaHQ6IDEzcHg7XAp9XAouYWNlX2ZvbGQtd2lkZ2V0IHtcCmJveC1zaXppbmc6IGJvcmRlci1ib3g7XAptYXJnaW46IDAgLTEycHggMCAxcHg7XApkaXNwbGF5OiBub25lO1wKd2lkdGg6IDExcHg7XAp2ZXJ0aWNhbC1hbGlnbjogdG9wO1wKYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQU5FbEVRVlI0Mm1XS3NRMEFNQXpDOGl4TGxyelFqem1CaUVqcDBBNld3QkNTUGdLQVhvTGtxU290N25OM3lNd1I3cFozMk56cEtrVm9EQlV4S0FBQUFBQkpSVTVFcmtKZ2dnPT1cIik7XApiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1wKYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1wKYm9yZGVyLXJhZGl1czogM3B4O1wKYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XApjdXJzb3I6IHBvaW50ZXI7XAp9XAouYWNlX2ZvbGRpbmctZW5hYmxlZCAuYWNlX2ZvbGQtd2lkZ2V0IHtcCmRpc3BsYXk6IGlubGluZS1ibG9jazsgICBcCn1cCi5hY2VfZm9sZC13aWRnZXQuYWNlX2VuZCB7XApiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBTkVsRVFWUjQybTNId1FrQU1BaEQwWXpzUmNoRktJN3NBaWtlV2tyeHdTY0VCMG5oNWU3S1RQV2ltWmtpNHRZZlZiWCtNTmw0cHlaWGVqVU8xUUFBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCn1cCi5hY2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZCB7XApiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQUdDQVlBQUFBRzVTUU1BQUFBT1VsRVFWUjQyalhLd1FrQU1BZ0R3S3dxS0Q0RXdRMjZzU09rVldqZ0lJSEF6UGlDZ2FxaXFuSkhabktJQ0JFUkhOMTk0TzViOXZiTHVBVlJMK2wwWVduWkFBQUFBRWxGVGtTdVFtQ0NYQT09XCIpO1wKfVwKLmFjZV9mb2xkLXdpZGdldDpob3ZlciB7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMyk7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XApib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wKfVwKLmFjZV9mb2xkLXdpZGdldDphY3RpdmUge1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjQpO1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcCmJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7XAp9XAouYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldCB7XApiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBSGtsRVFWUUlXMlA0Ly84L0F6b0dFUTdvR0NhTExBaFdpU3dCMTQ2QkFRQ1NUUFlvY3FUMEFBQUFBRWxGVGtTdVFtQ0NcIik7XAp9XAouYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kIHtcCmJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBRkNBWUFBQUNOYnlibEFBQUFIMGxFUVZRSVcyUDQvLzgvQXhRN3dOaklBakRNZ0M0QXhqQ1ZLQmlySUFBRjBrejJybGh4cEFBQUFBQkpSVTVFcmtKZ2dnPT1cIik7XAp9XAouYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkIHtcCmJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQU1BQUFBRkNBWUFBQUNBY1ZhaUFBQUFIRWxFUVZRSVcyUDQvLysvQXhBemdEQURsT09Bem5IQUtnUFdBd0FSamk4VUlEVGZRUUFBQUFCSlJVNUVya0pnZ2c9PVwiKTtcCn1cCi5hY2VfZGFyayAuYWNlX2ZvbGQtd2lkZ2V0OmhvdmVyIHtcCmJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7XAp9XAouYWNlX2RhcmsgLmFjZV9mb2xkLXdpZGdldDphY3RpdmUge1wKYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcCn1cCi5hY2VfaW5saW5lX2J1dHRvbiB7XApib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7XApkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XAptYXJnaW46IC0xcHggOHB4O1wKcGFkZGluZzogMCA1cHg7XApwb2ludGVyLWV2ZW50czogYXV0bztcCmN1cnNvcjogcG9pbnRlcjtcCn1cCi5hY2VfaW5saW5lX2J1dHRvbjpob3ZlciB7XApib3JkZXItY29sb3I6IGdyYXk7XApiYWNrZ3JvdW5kOiByZ2JhKDIwMCwyMDAsMjAwLDAuMik7XApkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XApwb2ludGVyLWV2ZW50czogYXV0bztcCn1cCi5hY2VfZm9sZC13aWRnZXQuYWNlX2ludmFsaWQge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGQjRCNDtcCmJvcmRlci1jb2xvcjogI0RFNTU1NTtcCn1cCi5hY2VfZmFkZS1mb2xkLXdpZGdldHMgLmFjZV9mb2xkLXdpZGdldCB7XAp0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSAwLjA1cztcCm9wYWNpdHk6IDA7XAp9XAouYWNlX2ZhZGUtZm9sZC13aWRnZXRzOmhvdmVyIC5hY2VfZm9sZC13aWRnZXQge1wKdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA1cyBlYXNlIDAuMDVzO1wKb3BhY2l0eToxO1wKfVwKLmFjZV91bmRlcmxpbmUge1wKdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XAp9XAouYWNlX2JvbGQge1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlX25vYm9sZCAuYWNlX2JvbGQge1wKZm9udC13ZWlnaHQ6IG5vcm1hbDtcCn1cCi5hY2VfaXRhbGljIHtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCn1cCi5hY2VfZXJyb3ItbWFya2VyIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAwLCAwLDAuMik7XApwb3NpdGlvbjogYWJzb2x1dGU7XAp6LWluZGV4OiA5O1wKfVwKLmFjZV9oaWdobGlnaHQtbWFya2VyIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDAsMC4yKTtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCnotaW5kZXg6IDg7XAp9XAouYWNlX21vYmlsZS1tZW51IHtcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCmxpbmUtaGVpZ2h0OiAxLjU7XApib3JkZXItcmFkaXVzOiA0cHg7XAotbXMtdXNlci1zZWxlY3Q6IG5vbmU7XAotbW96LXVzZXItc2VsZWN0OiBub25lO1wKLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcCnVzZXItc2VsZWN0OiBub25lO1wKYmFja2dyb3VuZDogd2hpdGU7XApib3gtc2hhZG93OiAxcHggM3B4IDJweCBncmV5O1wKYm9yZGVyOiAxcHggc29saWQgI2RjZGNkYztcCmNvbG9yOiBibGFjaztcCn1cCi5hY2VfZGFyayA+IC5hY2VfbW9iaWxlLW1lbnUge1wKYmFja2dyb3VuZDogIzMzMztcCmNvbG9yOiAjY2NjO1wKYm94LXNoYWRvdzogMXB4IDNweCAycHggZ3JleTtcCmJvcmRlcjogMXB4IHNvbGlkICM0NDQ7XAp9XAouYWNlX21vYmlsZS1idXR0b24ge1wKcGFkZGluZzogMnB4O1wKY3Vyc29yOiBwb2ludGVyO1wKb3ZlcmZsb3c6IGhpZGRlbjtcCn1cCi5hY2VfbW9iaWxlLWJ1dHRvbjpob3ZlciB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1wKb3BhY2l0eToxO1wKfVwKLmFjZV9tb2JpbGUtYnV0dG9uOmFjdGl2ZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1wKfVwKLmFjZV9wbGFjZWhvbGRlciB7XApmb250LWZhbWlseTogYXJpYWw7XAp0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XApvcGFjaXR5OiAwLjc7XAp0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0O1wKdGV4dC1pbmRlbnQ6IDEwcHg7XAp9IjsKCnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuL2xpYi91c2VyYWdlbnQiKTsKdmFyIEhJREVfVEVYVEFSRUEgPSB1c2VyYWdlbnQuaXNJRTsKCmRvbS5pbXBvcnRDc3NTdHJpbmcoZWRpdG9yQ3NzLCAiYWNlX2VkaXRvci5jc3MiKTsKCnZhciBWaXJ0dWFsUmVuZGVyZXIgPSBmdW5jdGlvbihjb250YWluZXIsIHRoZW1lKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwoKICAgIHRoaXMuY29udGFpbmVyID0gY29udGFpbmVyIHx8IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCiAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsICJhY2VfZWRpdG9yIik7CiAgICBpZiAoZG9tLkhJX0RQSSkgZG9tLmFkZENzc0NsYXNzKHRoaXMuY29udGFpbmVyLCAiYWNlX2hpZHBpIik7CgogICAgdGhpcy5zZXRUaGVtZSh0aGVtZSk7CgogICAgdGhpcy4kZ3V0dGVyID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy4kZ3V0dGVyLmNsYXNzTmFtZSA9ICJhY2VfZ3V0dGVyIjsKICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJGd1dHRlcik7CiAgICB0aGlzLiRndXR0ZXIuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsIHRydWUpOwoKICAgIHRoaXMuc2Nyb2xsZXIgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLnNjcm9sbGVyLmNsYXNzTmFtZSA9ICJhY2Vfc2Nyb2xsZXIiOwogICAgCiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnNjcm9sbGVyKTsKCiAgICB0aGlzLmNvbnRlbnQgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB0aGlzLmNvbnRlbnQuY2xhc3NOYW1lID0gImFjZV9jb250ZW50IjsKICAgIHRoaXMuc2Nyb2xsZXIuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50KTsKCiAgICB0aGlzLiRndXR0ZXJMYXllciA9IG5ldyBHdXR0ZXJMYXllcih0aGlzLiRndXR0ZXIpOwogICAgdGhpcy4kZ3V0dGVyTGF5ZXIub24oImNoYW5nZUd1dHRlcldpZHRoIiwgdGhpcy5vbkd1dHRlclJlc2l6ZS5iaW5kKHRoaXMpKTsKCiAgICB0aGlzLiRtYXJrZXJCYWNrID0gbmV3IE1hcmtlckxheWVyKHRoaXMuY29udGVudCk7CgogICAgdmFyIHRleHRMYXllciA9IHRoaXMuJHRleHRMYXllciA9IG5ldyBUZXh0TGF5ZXIodGhpcy5jb250ZW50KTsKICAgIHRoaXMuY2FudmFzID0gdGV4dExheWVyLmVsZW1lbnQ7CgogICAgdGhpcy4kbWFya2VyRnJvbnQgPSBuZXcgTWFya2VyTGF5ZXIodGhpcy5jb250ZW50KTsKCiAgICB0aGlzLiRjdXJzb3JMYXllciA9IG5ldyBDdXJzb3JMYXllcih0aGlzLmNvbnRlbnQpOwogICAgdGhpcy4kaG9yaXpTY3JvbGwgPSBmYWxzZTsKICAgIHRoaXMuJHZTY3JvbGwgPSBmYWxzZTsKCiAgICB0aGlzLnNjcm9sbEJhciA9IAogICAgdGhpcy5zY3JvbGxCYXJWID0gbmV3IFZTY3JvbGxCYXIodGhpcy5jb250YWluZXIsIHRoaXMpOwogICAgdGhpcy5zY3JvbGxCYXJIID0gbmV3IEhTY3JvbGxCYXIodGhpcy5jb250YWluZXIsIHRoaXMpOwogICAgdGhpcy5zY3JvbGxCYXJWLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIV9zZWxmLiRzY3JvbGxBbmltYXRpb24pCiAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKGUuZGF0YSAtIF9zZWxmLnNjcm9sbE1hcmdpbi50b3ApOwogICAgfSk7CiAgICB0aGlzLnNjcm9sbEJhckguYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghX3NlbGYuJHNjcm9sbEFuaW1hdGlvbikKICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGUuZGF0YSAtIF9zZWxmLnNjcm9sbE1hcmdpbi5sZWZ0KTsKICAgIH0pOwoKICAgIHRoaXMuc2Nyb2xsVG9wID0gMDsKICAgIHRoaXMuc2Nyb2xsTGVmdCA9IDA7CgogICAgdGhpcy5jdXJzb3JQb3MgPSB7CiAgICAgICAgcm93IDogMCwKICAgICAgICBjb2x1bW4gOiAwCiAgICB9OwoKICAgIHRoaXMuJGZvbnRNZXRyaWNzID0gbmV3IEZvbnRNZXRyaWNzKHRoaXMuY29udGFpbmVyKTsKICAgIHRoaXMuJHRleHRMYXllci4kc2V0Rm9udE1ldHJpY3ModGhpcy4kZm9udE1ldHJpY3MpOwogICAgdGhpcy4kdGV4dExheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZUNoYXJhY3RlclNpemUiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgX3NlbGYudXBkYXRlQ2hhcmFjdGVyU2l6ZSgpOwogICAgICAgIF9zZWxmLm9uUmVzaXplKHRydWUsIF9zZWxmLmd1dHRlcldpZHRoLCBfc2VsZi4kc2l6ZS53aWR0aCwgX3NlbGYuJHNpemUuaGVpZ2h0KTsKICAgICAgICBfc2VsZi5fc2lnbmFsKCJjaGFuZ2VDaGFyYWN0ZXJTaXplIiwgZSk7CiAgICB9KTsKCiAgICB0aGlzLiRzaXplID0gewogICAgICAgIHdpZHRoOiAwLAogICAgICAgIGhlaWdodDogMCwKICAgICAgICBzY3JvbGxlckhlaWdodDogMCwKICAgICAgICBzY3JvbGxlcldpZHRoOiAwLAogICAgICAgICRkaXJ0eTogdHJ1ZQogICAgfTsKCiAgICB0aGlzLmxheWVyQ29uZmlnID0gewogICAgICAgIHdpZHRoIDogMSwKICAgICAgICBwYWRkaW5nIDogMCwKICAgICAgICBmaXJzdFJvdyA6IDAsCiAgICAgICAgZmlyc3RSb3dTY3JlZW46IDAsCiAgICAgICAgbGFzdFJvdyA6IDAsCiAgICAgICAgbGluZUhlaWdodCA6IDAsCiAgICAgICAgY2hhcmFjdGVyV2lkdGggOiAwLAogICAgICAgIG1pbkhlaWdodCA6IDEsCiAgICAgICAgbWF4SGVpZ2h0IDogMSwKICAgICAgICBvZmZzZXQgOiAwLAogICAgICAgIGhlaWdodCA6IDEsCiAgICAgICAgZ3V0dGVyT2Zmc2V0OiAxCiAgICB9OwogICAgCiAgICB0aGlzLnNjcm9sbE1hcmdpbiA9IHsKICAgICAgICBsZWZ0OiAwLAogICAgICAgIHJpZ2h0OiAwLAogICAgICAgIHRvcDogMCwKICAgICAgICBib3R0b206IDAsCiAgICAgICAgdjogMCwKICAgICAgICBoOiAwCiAgICB9OwogICAgCiAgICB0aGlzLm1hcmdpbiA9IHsKICAgICAgICBsZWZ0OiAwLAogICAgICAgIHJpZ2h0OiAwLAogICAgICAgIHRvcDogMCwKICAgICAgICBib3R0b206IDAsCiAgICAgICAgdjogMCwKICAgICAgICBoOiAwCiAgICB9OwogICAgCiAgICB0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciA9ICF1c2VyYWdlbnQuaXNJT1M7CgogICAgdGhpcy4kbG9vcCA9IG5ldyBSZW5kZXJMb29wKAogICAgICAgIHRoaXMuJHJlbmRlckNoYW5nZXMuYmluZCh0aGlzKSwKICAgICAgICB0aGlzLmNvbnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3CiAgICApOwogICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKCiAgICB0aGlzLnVwZGF0ZUNoYXJhY3RlclNpemUoKTsKICAgIHRoaXMuc2V0UGFkZGluZyg0KTsKICAgIGNvbmZpZy5yZXNldE9wdGlvbnModGhpcyk7CiAgICBjb25maWcuX3NpZ25hbCgicmVuZGVyZXIiLCB0aGlzKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLkNIQU5HRV9DVVJTT1IgPSAxOwogICAgdGhpcy5DSEFOR0VfTUFSS0VSID0gMjsKICAgIHRoaXMuQ0hBTkdFX0dVVFRFUiA9IDQ7CiAgICB0aGlzLkNIQU5HRV9TQ1JPTEwgPSA4OwogICAgdGhpcy5DSEFOR0VfTElORVMgPSAxNjsKICAgIHRoaXMuQ0hBTkdFX1RFWFQgPSAzMjsKICAgIHRoaXMuQ0hBTkdFX1NJWkUgPSA2NDsKICAgIHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLID0gMTI4OwogICAgdGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UID0gMjU2OwogICAgdGhpcy5DSEFOR0VfRlVMTCA9IDUxMjsKICAgIHRoaXMuQ0hBTkdFX0hfU0NST0xMID0gMTAyNDsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CgogICAgdGhpcy51cGRhdGVDaGFyYWN0ZXJTaXplID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5hbGxvd0JvbGRGb250cyAhPSB0aGlzLiRhbGxvd0JvbGRGb250cykgewogICAgICAgICAgICB0aGlzLiRhbGxvd0JvbGRGb250cyA9IHRoaXMuJHRleHRMYXllci5hbGxvd0JvbGRGb250czsKICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSgiYWNlX25vYm9sZCIsICF0aGlzLiRhbGxvd0JvbGRGb250cyk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLmxheWVyQ29uZmlnLmNoYXJhY3RlcldpZHRoID0KICAgICAgICB0aGlzLmNoYXJhY3RlcldpZHRoID0gdGhpcy4kdGV4dExheWVyLmdldENoYXJhY3RlcldpZHRoKCk7CiAgICAgICAgdGhpcy5sYXllckNvbmZpZy5saW5lSGVpZ2h0ID0KICAgICAgICB0aGlzLmxpbmVIZWlnaHQgPSB0aGlzLiR0ZXh0TGF5ZXIuZ2V0TGluZUhlaWdodCgpOwogICAgICAgIHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7CiAgICAgICAgZG9tLnNldFN0eWxlKHRoaXMuc2Nyb2xsZXIuc3R5bGUsICJsaW5lLWhlaWdodCIsIHRoaXMubGluZUhlaWdodCArICJweCIpOwogICAgfTsKICAgIHRoaXMuc2V0U2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICBpZiAodGhpcy5zZXNzaW9uKQogICAgICAgICAgICB0aGlzLnNlc3Npb24uZG9jLm9mZigiY2hhbmdlTmV3TGluZU1vZGUiLCB0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUpOwogICAgICAgICAgICAKICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwogICAgICAgIGlmIChzZXNzaW9uICYmIHRoaXMuc2Nyb2xsTWFyZ2luLnRvcCAmJiBzZXNzaW9uLmdldFNjcm9sbFRvcCgpIDw9IDApCiAgICAgICAgICAgIHNlc3Npb24uc2V0U2Nyb2xsVG9wKC10aGlzLnNjcm9sbE1hcmdpbi50b3ApOwoKICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5zZXRTZXNzaW9uKHNlc3Npb24pOwogICAgICAgIHRoaXMuJG1hcmtlckJhY2suc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC5zZXRTZXNzaW9uKHNlc3Npb24pOwogICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CiAgICAgICAgdGhpcy4kdGV4dExheWVyLnNldFNlc3Npb24oc2Vzc2lvbik7CiAgICAgICAgaWYgKCFzZXNzaW9uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgCiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKICAgICAgICB0aGlzLnNlc3Npb24uJHNldEZvbnRNZXRyaWNzKHRoaXMuJGZvbnRNZXRyaWNzKTsKICAgICAgICB0aGlzLnNjcm9sbEJhckguc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsQmFyVi5zY3JvbGxUb3AgPSBudWxsOwogICAgICAgIAogICAgICAgIHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSA9IHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZS5iaW5kKHRoaXMpOwogICAgICAgIHRoaXMub25DaGFuZ2VOZXdMaW5lTW9kZSgpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5kb2Mub24oImNoYW5nZU5ld0xpbmVNb2RlIiwgdGhpcy5vbkNoYW5nZU5ld0xpbmVNb2RlKTsKICAgIH07CiAgICB0aGlzLnVwZGF0ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3csIGZvcmNlKSB7CiAgICAgICAgaWYgKGxhc3RSb3cgPT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgbGFzdFJvdyA9IEluZmluaXR5OwoKICAgICAgICBpZiAoIXRoaXMuJGNoYW5nZWRMaW5lcykgewogICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSB7CiAgICAgICAgICAgICAgICBmaXJzdFJvdzogZmlyc3RSb3csCiAgICAgICAgICAgICAgICBsYXN0Um93OiBsYXN0Um93CiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAodGhpcy4kY2hhbmdlZExpbmVzLmZpcnN0Um93ID4gZmlyc3RSb3cpCiAgICAgICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3cgPSBmaXJzdFJvdzsKCiAgICAgICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA8IGxhc3RSb3cpCiAgICAgICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA9IGxhc3RSb3c7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdyA8IHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3cpIHsKICAgICAgICAgICAgaWYgKGZvcmNlKQogICAgICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzLmxhc3RSb3cgPSB0aGlzLmxheWVyQ29uZmlnLmxhc3RSb3c7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuJGNoYW5nZWRMaW5lcy5maXJzdFJvdyA+IHRoaXMubGF5ZXJDb25maWcubGFzdFJvdykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfTElORVMpOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlTmV3TGluZU1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOwogICAgICAgIHRoaXMuJHRleHRMYXllci4kdXBkYXRlRW9sQ2hhcigpOwogICAgICAgIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0RW9sQ2hhcih0aGlzLiR0ZXh0TGF5ZXIuRU9MX0NIQVIpOwogICAgfTsKICAgIAogICAgdGhpcy5vbkNoYW5nZVRhYlNpemUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQgfCB0aGlzLkNIQU5HRV9NQVJLRVIpOwogICAgICAgIHRoaXMuJHRleHRMYXllci5vbkNoYW5nZVRhYlNpemUoKTsKICAgIH07CiAgICB0aGlzLnVwZGF0ZVRleHQgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOwogICAgfTsKICAgIHRoaXMudXBkYXRlRnVsbCA9IGZ1bmN0aW9uKGZvcmNlKSB7CiAgICAgICAgaWYgKGZvcmNlKQogICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKHRoaXMuQ0hBTkdFX0ZVTEwsIHRydWUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKICAgIH07CiAgICB0aGlzLnVwZGF0ZUZvbnRTaXplID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kdGV4dExheWVyLmNoZWNrRm9yU2l6ZUNoYW5nZXMoKTsKICAgIH07CgogICAgdGhpcy4kY2hhbmdlcyA9IDA7CiAgICB0aGlzLiR1cGRhdGVTaXplQXN5bmMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kbG9vcC5wZW5kaW5nKQogICAgICAgICAgICB0aGlzLiRzaXplLiRkaXJ0eSA9IHRydWU7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0aGlzLm9uUmVzaXplKCk7CiAgICB9OwogICAgdGhpcy5vblJlc2l6ZSA9IGZ1bmN0aW9uKGZvcmNlLCBndXR0ZXJXaWR0aCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgIGlmICh0aGlzLnJlc2l6aW5nID4gMikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsc2UgaWYgKHRoaXMucmVzaXppbmcgPiAwKQogICAgICAgICAgICB0aGlzLnJlc2l6aW5nKys7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0aGlzLnJlc2l6aW5nID0gZm9yY2UgPyAxIDogMDsKICAgICAgICB2YXIgZWwgPSB0aGlzLmNvbnRhaW5lcjsKICAgICAgICBpZiAoIWhlaWdodCkKICAgICAgICAgICAgaGVpZ2h0ID0gZWwuY2xpZW50SGVpZ2h0IHx8IGVsLnNjcm9sbEhlaWdodDsKICAgICAgICBpZiAoIXdpZHRoKQogICAgICAgICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoIHx8IGVsLnNjcm9sbFdpZHRoOwogICAgICAgIHZhciBjaGFuZ2VzID0gdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZShmb3JjZSwgZ3V0dGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpOwoKICAgICAgICAKICAgICAgICBpZiAoIXRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgfHwgKCF3aWR0aCAmJiAhaGVpZ2h0KSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzaXppbmcgPSAwOwoKICAgICAgICBpZiAoZm9yY2UpCiAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLiRwYWRkaW5nID0gbnVsbDsKCiAgICAgICAgaWYgKGZvcmNlKQogICAgICAgICAgICB0aGlzLiRyZW5kZXJDaGFuZ2VzKGNoYW5nZXMgfCB0aGlzLiRjaGFuZ2VzLCB0cnVlKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUoY2hhbmdlcyB8IHRoaXMuJGNoYW5nZXMpOwoKICAgICAgICBpZiAodGhpcy5yZXNpemluZykKICAgICAgICAgICAgdGhpcy5yZXNpemluZyA9IDA7CiAgICAgICAgdGhpcy5zY3JvbGxCYXJWLnNjcm9sbExlZnQgPSB0aGlzLnNjcm9sbEJhclYuc2Nyb2xsVG9wID0gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHVwZGF0ZUNhY2hlZFNpemUgPSBmdW5jdGlvbihmb3JjZSwgZ3V0dGVyV2lkdGgsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICBoZWlnaHQgLT0gKHRoaXMuJGV4dHJhSGVpZ2h0IHx8IDApOwogICAgICAgIHZhciBjaGFuZ2VzID0gMDsKICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJHNpemU7CiAgICAgICAgdmFyIG9sZFNpemUgPSB7CiAgICAgICAgICAgIHdpZHRoOiBzaXplLndpZHRoLAogICAgICAgICAgICBoZWlnaHQ6IHNpemUuaGVpZ2h0LAogICAgICAgICAgICBzY3JvbGxlckhlaWdodDogc2l6ZS5zY3JvbGxlckhlaWdodCwKICAgICAgICAgICAgc2Nyb2xsZXJXaWR0aDogc2l6ZS5zY3JvbGxlcldpZHRoCiAgICAgICAgfTsKICAgICAgICBpZiAoaGVpZ2h0ICYmIChmb3JjZSB8fCBzaXplLmhlaWdodCAhPSBoZWlnaHQpKSB7CiAgICAgICAgICAgIHNpemUuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICBjaGFuZ2VzIHw9IHRoaXMuQ0hBTkdFX1NJWkU7CgogICAgICAgICAgICBzaXplLnNjcm9sbGVySGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgIGlmICh0aGlzLiRob3JpelNjcm9sbCkKICAgICAgICAgICAgICAgIHNpemUuc2Nyb2xsZXJIZWlnaHQgLT0gdGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpOwogICAgICAgICAgICB0aGlzLnNjcm9sbEJhclYuZWxlbWVudC5zdHlsZS5ib3R0b20gPSB0aGlzLnNjcm9sbEJhckguZ2V0SGVpZ2h0KCkgKyAicHgiOwoKICAgICAgICAgICAgY2hhbmdlcyA9IGNoYW5nZXMgfCB0aGlzLkNIQU5HRV9TQ1JPTEw7CiAgICAgICAgfQoKICAgICAgICBpZiAod2lkdGggJiYgKGZvcmNlIHx8IHNpemUud2lkdGggIT0gd2lkdGgpKSB7CiAgICAgICAgICAgIGNoYW5nZXMgfD0gdGhpcy5DSEFOR0VfU0laRTsKICAgICAgICAgICAgc2l6ZS53aWR0aCA9IHdpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGd1dHRlcldpZHRoID09IG51bGwpCiAgICAgICAgICAgICAgICBndXR0ZXJXaWR0aCA9IHRoaXMuJHNob3dHdXR0ZXIgPyB0aGlzLiRndXR0ZXIub2Zmc2V0V2lkdGggOiAwOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5ndXR0ZXJXaWR0aCA9IGd1dHRlcldpZHRoOwogICAgICAgICAgICAKICAgICAgICAgICAgZG9tLnNldFN0eWxlKHRoaXMuc2Nyb2xsQmFySC5lbGVtZW50LnN0eWxlLCAibGVmdCIsIGd1dHRlcldpZHRoICsgInB4Iik7CiAgICAgICAgICAgIGRvbS5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCAibGVmdCIsIGd1dHRlcldpZHRoICsgdGhpcy5tYXJnaW4ubGVmdCArICJweCIpOwogICAgICAgICAgICBzaXplLnNjcm9sbGVyV2lkdGggPSBNYXRoLm1heCgwLCB3aWR0aCAtIGd1dHRlcldpZHRoIC0gdGhpcy5zY3JvbGxCYXJWLmdldFdpZHRoKCkgLSB0aGlzLm1hcmdpbi5oKTsKICAgICAgICAgICAgZG9tLnNldFN0eWxlKHRoaXMuJGd1dHRlci5zdHlsZSwgImxlZnQiLCB0aGlzLm1hcmdpbi5sZWZ0ICsgInB4Iik7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLnNjcm9sbEJhclYuZ2V0V2lkdGgoKSArICJweCI7CiAgICAgICAgICAgIGRvbS5zZXRTdHlsZSh0aGlzLnNjcm9sbEJhckguZWxlbWVudC5zdHlsZSwgInJpZ2h0IiwgcmlnaHQpOwogICAgICAgICAgICBkb20uc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwgInJpZ2h0IiwgcmlnaHQpOwogICAgICAgICAgICBkb20uc2V0U3R5bGUodGhpcy5zY3JvbGxlci5zdHlsZSwgImJvdHRvbSIsIHRoaXMuc2Nyb2xsQmFySC5nZXRIZWlnaHQoKSk7CgogICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uICYmIHRoaXMuc2Vzc2lvbi5nZXRVc2VXcmFwTW9kZSgpICYmIHRoaXMuYWRqdXN0V3JhcExpbWl0KCkgfHwgZm9yY2UpIHsKICAgICAgICAgICAgICAgIGNoYW5nZXMgfD0gdGhpcy5DSEFOR0VfRlVMTDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBzaXplLiRkaXJ0eSA9ICF3aWR0aCB8fCAhaGVpZ2h0OwoKICAgICAgICBpZiAoY2hhbmdlcykKICAgICAgICAgICAgdGhpcy5fc2lnbmFsKCJyZXNpemUiLCBvbGRTaXplKTsKCiAgICAgICAgcmV0dXJuIGNoYW5nZXM7CiAgICB9OwoKICAgIHRoaXMub25HdXR0ZXJSZXNpemUgPSBmdW5jdGlvbih3aWR0aCkgewogICAgICAgIHZhciBndXR0ZXJXaWR0aCA9IHRoaXMuJHNob3dHdXR0ZXIgPyB3aWR0aCA6IDA7CiAgICAgICAgaWYgKGd1dHRlcldpZHRoICE9IHRoaXMuZ3V0dGVyV2lkdGgpCiAgICAgICAgICAgIHRoaXMuJGNoYW5nZXMgfD0gdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZSh0cnVlLCBndXR0ZXJXaWR0aCwgdGhpcy4kc2l6ZS53aWR0aCwgdGhpcy4kc2l6ZS5oZWlnaHQpOwoKICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmdldFVzZVdyYXBNb2RlKCkgJiYgdGhpcy5hZGp1c3RXcmFwTGltaXQoKSkgewogICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy4kc2l6ZS4kZGlydHkpIHsKICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9GVUxMKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcoKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5hZGp1c3RXcmFwTGltaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXZhaWxhYmxlV2lkdGggPSB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGggLSB0aGlzLiRwYWRkaW5nICogMjsKICAgICAgICB2YXIgbGltaXQgPSBNYXRoLmZsb29yKGF2YWlsYWJsZVdpZHRoIC8gdGhpcy5jaGFyYWN0ZXJXaWR0aCk7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5hZGp1c3RXcmFwTGltaXQobGltaXQsIHRoaXMuJHNob3dQcmludE1hcmdpbiAmJiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbik7CiAgICB9OwogICAgdGhpcy5zZXRBbmltYXRlZFNjcm9sbCA9IGZ1bmN0aW9uKHNob3VsZEFuaW1hdGUpewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJhbmltYXRlZFNjcm9sbCIsIHNob3VsZEFuaW1hdGUpOwogICAgfTsKICAgIHRoaXMuZ2V0QW5pbWF0ZWRTY3JvbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kYW5pbWF0ZWRTY3JvbGw7CiAgICB9OwogICAgdGhpcy5zZXRTaG93SW52aXNpYmxlcyA9IGZ1bmN0aW9uKHNob3dJbnZpc2libGVzKSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oInNob3dJbnZpc2libGVzIiwgc2hvd0ludmlzaWJsZXMpOwogICAgICAgIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0U2hvd0ludmlzaWJsZXMoc2hvd0ludmlzaWJsZXMpOwogICAgfTsKICAgIHRoaXMuZ2V0U2hvd0ludmlzaWJsZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dJbnZpc2libGVzIik7CiAgICB9OwogICAgdGhpcy5nZXREaXNwbGF5SW5kZW50R3VpZGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKCJkaXNwbGF5SW5kZW50R3VpZGVzIik7CiAgICB9OwoKICAgIHRoaXMuc2V0RGlzcGxheUluZGVudEd1aWRlcyA9IGZ1bmN0aW9uKGRpc3BsYXkpIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigiZGlzcGxheUluZGVudEd1aWRlcyIsIGRpc3BsYXkpOwogICAgfTsKICAgIHRoaXMuc2V0U2hvd1ByaW50TWFyZ2luID0gZnVuY3Rpb24oc2hvd1ByaW50TWFyZ2luKSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oInNob3dQcmludE1hcmdpbiIsIHNob3dQcmludE1hcmdpbik7CiAgICB9OwogICAgdGhpcy5nZXRTaG93UHJpbnRNYXJnaW4gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dQcmludE1hcmdpbiIpOwogICAgfTsKICAgIHRoaXMuc2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbihzaG93UHJpbnRNYXJnaW4pIHsKICAgICAgICB0aGlzLnNldE9wdGlvbigicHJpbnRNYXJnaW5Db2x1bW4iLCBzaG93UHJpbnRNYXJnaW4pOwogICAgfTsKICAgIHRoaXMuZ2V0UHJpbnRNYXJnaW5Db2x1bW4gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInByaW50TWFyZ2luQ29sdW1uIik7CiAgICB9OwogICAgdGhpcy5nZXRTaG93R3V0dGVyID0gZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oInNob3dHdXR0ZXIiKTsKICAgIH07CiAgICB0aGlzLnNldFNob3dHdXR0ZXIgPSBmdW5jdGlvbihzaG93KXsKICAgICAgICByZXR1cm4gdGhpcy5zZXRPcHRpb24oInNob3dHdXR0ZXIiLCBzaG93KTsKICAgIH07CgogICAgdGhpcy5nZXRGYWRlRm9sZFdpZGdldHMgPSBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbigiZmFkZUZvbGRXaWRnZXRzIik7CiAgICB9OwoKICAgIHRoaXMuc2V0RmFkZUZvbGRXaWRnZXRzID0gZnVuY3Rpb24oc2hvdykgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJmYWRlRm9sZFdpZGdldHMiLCBzaG93KTsKICAgIH07CgogICAgdGhpcy5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lID0gZnVuY3Rpb24oc2hvdWxkSGlnaGxpZ2h0KSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oImhpZ2hsaWdodEd1dHRlckxpbmUiLCBzaG91bGRIaWdobGlnaHQpOwogICAgfTsKCiAgICB0aGlzLmdldEhpZ2hsaWdodEd1dHRlckxpbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb24oImhpZ2hsaWdodEd1dHRlckxpbmUiKTsKICAgIH07CgogICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4gPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuJHNob3dQcmludE1hcmdpbiAmJiAhdGhpcy4kcHJpbnRNYXJnaW5FbCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoIXRoaXMuJHByaW50TWFyZ2luRWwpIHsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lckVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICBjb250YWluZXJFbC5jbGFzc05hbWUgPSAiYWNlX2xheWVyIGFjZV9wcmludC1tYXJnaW4tbGF5ZXIiOwogICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICB0aGlzLiRwcmludE1hcmdpbkVsLmNsYXNzTmFtZSA9ICJhY2VfcHJpbnQtbWFyZ2luIjsKICAgICAgICAgICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy4kcHJpbnRNYXJnaW5FbCk7CiAgICAgICAgICAgIHRoaXMuY29udGVudC5pbnNlcnRCZWZvcmUoY29udGFpbmVyRWwsIHRoaXMuY29udGVudC5maXJzdENoaWxkKTsKICAgICAgICB9CgogICAgICAgIHZhciBzdHlsZSA9IHRoaXMuJHByaW50TWFyZ2luRWwuc3R5bGU7CiAgICAgICAgc3R5bGUubGVmdCA9IE1hdGgucm91bmQodGhpcy5jaGFyYWN0ZXJXaWR0aCAqIHRoaXMuJHByaW50TWFyZ2luQ29sdW1uICsgdGhpcy4kcGFkZGluZykgKyAicHgiOwogICAgICAgIHN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLiRzaG93UHJpbnRNYXJnaW4gPyAidmlzaWJsZSIgOiAiaGlkZGVuIjsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zZXNzaW9uICYmIHRoaXMuc2Vzc2lvbi4kd3JhcCA9PSAtMSkKICAgICAgICAgICAgdGhpcy5hZGp1c3RXcmFwTGltaXQoKTsKICAgIH07CiAgICB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgICB9OwogICAgdGhpcy5nZXRNb3VzZUV2ZW50VGFyZ2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsZXI7CiAgICB9OwogICAgdGhpcy5nZXRUZXh0QXJlYUNvbnRhaW5lciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjsKICAgIH07CiAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLiRpc01vdXNlUHJlc3NlZCkgcmV0dXJuOwogICAgICAgIHZhciBzdHlsZSA9IHRoaXMudGV4dGFyZWEuc3R5bGU7CiAgICAgICAgdmFyIGNvbXBvc2l0aW9uID0gdGhpcy4kY29tcG9zaXRpb247CiAgICAgICAgaWYgKCF0aGlzLiRrZWVwVGV4dEFyZWFBdEN1cnNvciAmJiAhY29tcG9zaXRpb24pIHsKICAgICAgICAgICAgZG9tLnRyYW5zbGF0ZSh0aGlzLnRleHRhcmVhLCAtMTAwLCAwKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgcGl4ZWxQb3MgPSB0aGlzLiRjdXJzb3JMYXllci4kcGl4ZWxQb3M7CiAgICAgICAgaWYgKCFwaXhlbFBvcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChjb21wb3NpdGlvbiAmJiBjb21wb3NpdGlvbi5tYXJrZXJSYW5nZSkKICAgICAgICAgICAgcGl4ZWxQb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGNvbXBvc2l0aW9uLm1hcmtlclJhbmdlLnN0YXJ0LCB0cnVlKTsKICAgICAgICAKICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5sYXllckNvbmZpZzsKICAgICAgICB2YXIgcG9zVG9wID0gcGl4ZWxQb3MudG9wOwogICAgICAgIHZhciBwb3NMZWZ0ID0gcGl4ZWxQb3MubGVmdDsKICAgICAgICBwb3NUb3AgLT0gY29uZmlnLm9mZnNldDsKCiAgICAgICAgdmFyIGggPSBjb21wb3NpdGlvbiAmJiBjb21wb3NpdGlvbi51c2VUZXh0YXJlYUZvcklNRSA/IHRoaXMubGluZUhlaWdodCA6IEhJREVfVEVYVEFSRUEgPyAwIDogMTsKICAgICAgICBpZiAocG9zVG9wIDwgMCB8fCBwb3NUb3AgPiBjb25maWcuaGVpZ2h0IC0gaCkgewogICAgICAgICAgICBkb20udHJhbnNsYXRlKHRoaXMudGV4dGFyZWEsIDAsIDApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgdyA9IDE7CiAgICAgICAgdmFyIG1heFRvcCA9IHRoaXMuJHNpemUuaGVpZ2h0IC0gaDsKICAgICAgICBpZiAoIWNvbXBvc2l0aW9uKSB7CiAgICAgICAgICAgIHBvc1RvcCArPSB0aGlzLmxpbmVIZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoY29tcG9zaXRpb24udXNlVGV4dGFyZWFGb3JJTUUpIHsKICAgICAgICAgICAgICAgIHZhciB2YWwgPSB0aGlzLnRleHRhcmVhLnZhbHVlOwogICAgICAgICAgICAgICAgdyA9IHRoaXMuY2hhcmFjdGVyV2lkdGggKiAodGhpcy5zZXNzaW9uLiRnZXRTdHJpbmdTY3JlZW5XaWR0aCh2YWwpWzBdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHBvc1RvcCArPSB0aGlzLmxpbmVIZWlnaHQgKyAyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHBvc0xlZnQgLT0gdGhpcy5zY3JvbGxMZWZ0OwogICAgICAgIGlmIChwb3NMZWZ0ID4gdGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gdykKICAgICAgICAgICAgcG9zTGVmdCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHc7CgogICAgICAgIHBvc0xlZnQgKz0gdGhpcy5ndXR0ZXJXaWR0aCArIHRoaXMubWFyZ2luLmxlZnQ7CgogICAgICAgIGRvbS5zZXRTdHlsZShzdHlsZSwgImhlaWdodCIsIGggKyAicHgiKTsKICAgICAgICBkb20uc2V0U3R5bGUoc3R5bGUsICJ3aWR0aCIsIHcgKyAicHgiKTsKICAgICAgICBkb20udHJhbnNsYXRlKHRoaXMudGV4dGFyZWEsIE1hdGgubWluKHBvc0xlZnQsIHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCAtIHcpLCBNYXRoLm1pbihwb3NUb3AsIG1heFRvcCkpOwogICAgfTsKICAgIHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGF5ZXJDb25maWcuZmlyc3RSb3c7CiAgICB9OwogICAgdGhpcy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmxheWVyQ29uZmlnLmZpcnN0Um93ICsgKHRoaXMubGF5ZXJDb25maWcub2Zmc2V0ID09PSAwID8gMCA6IDEpOwogICAgfTsKICAgIHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjb25maWcgPSB0aGlzLmxheWVyQ29uZmlnOwogICAgICAgIHZhciBsYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7CiAgICAgICAgdmFyIHRvcCA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KGxhc3RSb3csIDApICogY29uZmlnLmxpbmVIZWlnaHQ7CiAgICAgICAgaWYgKHRvcCAtIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSA+IGNvbmZpZy5oZWlnaHQgLSBjb25maWcubGluZUhlaWdodCkKICAgICAgICAgICAgcmV0dXJuIGxhc3RSb3cgLSAxOwogICAgICAgIHJldHVybiBsYXN0Um93OwogICAgfTsKICAgIHRoaXMuZ2V0TGFzdFZpc2libGVSb3cgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5sYXllckNvbmZpZy5sYXN0Um93OwogICAgfTsKCiAgICB0aGlzLiRwYWRkaW5nID0gbnVsbDsKICAgIHRoaXMuc2V0UGFkZGluZyA9IGZ1bmN0aW9uKHBhZGRpbmcpIHsKICAgICAgICB0aGlzLiRwYWRkaW5nID0gcGFkZGluZzsKICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuc2V0UGFkZGluZyhwYWRkaW5nKTsKICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5zZXRQYWRkaW5nKHBhZGRpbmcpOwogICAgICAgIHRoaXMuJG1hcmtlckZyb250LnNldFBhZGRpbmcocGFkZGluZyk7CiAgICAgICAgdGhpcy4kbWFya2VyQmFjay5zZXRQYWRkaW5nKHBhZGRpbmcpOwogICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfRlVMTCk7CiAgICAgICAgdGhpcy4kdXBkYXRlUHJpbnRNYXJnaW4oKTsKICAgIH07CiAgICAKICAgIHRoaXMuc2V0U2Nyb2xsTWFyZ2luID0gZnVuY3Rpb24odG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0KSB7CiAgICAgICAgdmFyIHNtID0gdGhpcy5zY3JvbGxNYXJnaW47CiAgICAgICAgc20udG9wID0gdG9wfDA7CiAgICAgICAgc20uYm90dG9tID0gYm90dG9tfDA7CiAgICAgICAgc20ucmlnaHQgPSByaWdodHwwOwogICAgICAgIHNtLmxlZnQgPSBsZWZ0fDA7CiAgICAgICAgc20udiA9IHNtLnRvcCArIHNtLmJvdHRvbTsKICAgICAgICBzbS5oID0gc20ubGVmdCArIHNtLnJpZ2h0OwogICAgICAgIGlmIChzbS50b3AgJiYgdGhpcy5zY3JvbGxUb3AgPD0gMCAmJiB0aGlzLnNlc3Npb24pCiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3AoLXNtLnRvcCk7CiAgICAgICAgdGhpcy51cGRhdGVGdWxsKCk7CiAgICB9OwogICAgCiAgICB0aGlzLnNldE1hcmdpbiA9IGZ1bmN0aW9uKHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCkgewogICAgICAgIHZhciBzbSA9IHRoaXMubWFyZ2luOwogICAgICAgIHNtLnRvcCA9IHRvcHwwOwogICAgICAgIHNtLmJvdHRvbSA9IGJvdHRvbXwwOwogICAgICAgIHNtLnJpZ2h0ID0gcmlnaHR8MDsKICAgICAgICBzbS5sZWZ0ID0gbGVmdHwwOwogICAgICAgIHNtLnYgPSBzbS50b3AgKyBzbS5ib3R0b207CiAgICAgICAgc20uaCA9IHNtLmxlZnQgKyBzbS5yaWdodDsKICAgICAgICB0aGlzLiR1cGRhdGVDYWNoZWRTaXplKHRydWUsIHRoaXMuZ3V0dGVyV2lkdGgsIHRoaXMuJHNpemUud2lkdGgsIHRoaXMuJHNpemUuaGVpZ2h0KTsKICAgICAgICB0aGlzLnVwZGF0ZUZ1bGwoKTsKICAgIH07CiAgICB0aGlzLmdldEhTY3JvbGxCYXJBbHdheXNWaXNpYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlOwogICAgfTsKICAgIHRoaXMuc2V0SFNjcm9sbEJhckFsd2F5c1Zpc2libGUgPSBmdW5jdGlvbihhbHdheXNWaXNpYmxlKSB7CiAgICAgICAgdGhpcy5zZXRPcHRpb24oImhTY3JvbGxCYXJBbHdheXNWaXNpYmxlIiwgYWx3YXlzVmlzaWJsZSk7CiAgICB9OwogICAgdGhpcy5nZXRWU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiR2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZTsKICAgIH07CiAgICB0aGlzLnNldFZTY3JvbGxCYXJBbHdheXNWaXNpYmxlID0gZnVuY3Rpb24oYWx3YXlzVmlzaWJsZSkgewogICAgICAgIHRoaXMuc2V0T3B0aW9uKCJ2U2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSIsIGFsd2F5c1Zpc2libGUpOwogICAgfTsKCiAgICB0aGlzLiR1cGRhdGVTY3JvbGxCYXJWID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNjcm9sbEhlaWdodCA9IHRoaXMubGF5ZXJDb25maWcubWF4SGVpZ2h0OwogICAgICAgIHZhciBzY3JvbGxlckhlaWdodCA9IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7CiAgICAgICAgaWYgKCF0aGlzLiRtYXhMaW5lcyAmJiB0aGlzLiRzY3JvbGxQYXN0RW5kKSB7CiAgICAgICAgICAgIHNjcm9sbEhlaWdodCAtPSAoc2Nyb2xsZXJIZWlnaHQgLSB0aGlzLmxpbmVIZWlnaHQpICogdGhpcy4kc2Nyb2xsUGFzdEVuZDsKICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsVG9wID4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsZXJIZWlnaHQpIHsKICAgICAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IHRoaXMuc2Nyb2xsVG9wICsgc2Nyb2xsZXJIZWlnaHQ7CiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEJhclYuc2Nyb2xsVG9wID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnNjcm9sbEJhclYuc2V0U2Nyb2xsSGVpZ2h0KHNjcm9sbEhlaWdodCArIHRoaXMuc2Nyb2xsTWFyZ2luLnYpOwogICAgICAgIHRoaXMuc2Nyb2xsQmFyVi5zZXRTY3JvbGxUb3AodGhpcy5zY3JvbGxUb3AgKyB0aGlzLnNjcm9sbE1hcmdpbi50b3ApOwogICAgfTsKICAgIHRoaXMuJHVwZGF0ZVNjcm9sbEJhckggPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnNjcm9sbEJhckguc2V0U2Nyb2xsV2lkdGgodGhpcy5sYXllckNvbmZpZy53aWR0aCArIDIgKiB0aGlzLiRwYWRkaW5nICsgdGhpcy5zY3JvbGxNYXJnaW4uaCk7CiAgICAgICAgdGhpcy5zY3JvbGxCYXJILnNldFNjcm9sbExlZnQodGhpcy5zY3JvbGxMZWZ0ICsgdGhpcy5zY3JvbGxNYXJnaW4ubGVmdCk7CiAgICB9OwogICAgCiAgICB0aGlzLiRmcm96ZW4gPSBmYWxzZTsKICAgIHRoaXMuZnJlZXplID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kZnJvemVuID0gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMudW5mcmVlemUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRmcm96ZW4gPSBmYWxzZTsKICAgIH07CgogICAgdGhpcy4kcmVuZGVyQ2hhbmdlcyA9IGZ1bmN0aW9uKGNoYW5nZXMsIGZvcmNlKSB7CiAgICAgICAgaWYgKHRoaXMuJGNoYW5nZXMpIHsKICAgICAgICAgICAgY2hhbmdlcyB8PSB0aGlzLiRjaGFuZ2VzOwogICAgICAgICAgICB0aGlzLiRjaGFuZ2VzID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKCghdGhpcy5zZXNzaW9uIHx8ICF0aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0aCB8fCB0aGlzLiRmcm96ZW4pIHx8ICghY2hhbmdlcyAmJiAhZm9yY2UpKSB7CiAgICAgICAgICAgIHRoaXMuJGNoYW5nZXMgfD0gY2hhbmdlczsKICAgICAgICAgICAgcmV0dXJuOyAKICAgICAgICB9IAogICAgICAgIGlmICh0aGlzLiRzaXplLiRkaXJ0eSkgewogICAgICAgICAgICB0aGlzLiRjaGFuZ2VzIHw9IGNoYW5nZXM7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uUmVzaXplKHRydWUpOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMubGluZUhlaWdodCkgewogICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuY2hlY2tGb3JTaXplQ2hhbmdlcygpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLl9zaWduYWwoImJlZm9yZVJlbmRlciIpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnNlc3Npb24gJiYgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlcikKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci51cGRhdGVDaGFyYWN0ZXJXaWR0aHModGhpcy4kZm9udE1ldHJpY3MpOwoKICAgICAgICB2YXIgY29uZmlnID0gdGhpcy5sYXllckNvbmZpZzsKICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwgfHwKICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1NJWkUgfHwKICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwKICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTIHx8CiAgICAgICAgICAgIGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9TQ1JPTEwgfHwKICAgICAgICAgICAgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0hfU0NST0xMCiAgICAgICAgKSB7CiAgICAgICAgICAgIGNoYW5nZXMgfD0gdGhpcy4kY29tcHV0ZUxheWVyQ29uZmlnKCkgfCB0aGlzLiRsb29wLmNsZWFyKCk7CiAgICAgICAgICAgIGlmIChjb25maWcuZmlyc3RSb3cgIT0gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdyAmJiBjb25maWcuZmlyc3RSb3dTY3JlZW4gPT0gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvd1NjcmVlbikgewogICAgICAgICAgICAgICAgdmFyIHN0ID0gdGhpcy5zY3JvbGxUb3AgKyAoY29uZmlnLmZpcnN0Um93IC0gdGhpcy5sYXllckNvbmZpZy5maXJzdFJvdykgKiB0aGlzLmxpbmVIZWlnaHQ7CiAgICAgICAgICAgICAgICBpZiAoc3QgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzdDsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlcyB8IHRoaXMuQ0hBTkdFX1NDUk9MTDsKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzIHw9IHRoaXMuJGNvbXB1dGVMYXllckNvbmZpZygpIHwgdGhpcy4kbG9vcC5jbGVhcigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbmZpZyA9IHRoaXMubGF5ZXJDb25maWc7CiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVNjcm9sbEJhclYoKTsKICAgICAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9IX1NDUk9MTCkKICAgICAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVNjcm9sbEJhckgoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRvbS50cmFuc2xhdGUodGhpcy5jb250ZW50LCAtdGhpcy5zY3JvbGxMZWZ0LCAtY29uZmlnLm9mZnNldCk7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgd2lkdGggPSBjb25maWcud2lkdGggKyAyICogdGhpcy4kcGFkZGluZyArICJweCI7CiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBjb25maWcubWluSGVpZ2h0ICsgInB4IjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRvbS5zZXRTdHlsZSh0aGlzLmNvbnRlbnQuc3R5bGUsICJ3aWR0aCIsIHdpZHRoKTsKICAgICAgICAgICAgZG9tLnNldFN0eWxlKHRoaXMuY29udGVudC5zdHlsZSwgImhlaWdodCIsIGhlaWdodCk7CiAgICAgICAgfQogICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfSF9TQ1JPTEwpIHsKICAgICAgICAgICAgZG9tLnRyYW5zbGF0ZSh0aGlzLmNvbnRlbnQsIC10aGlzLnNjcm9sbExlZnQsIC1jb25maWcub2Zmc2V0KTsKICAgICAgICAgICAgdGhpcy5zY3JvbGxlci5jbGFzc05hbWUgPSB0aGlzLnNjcm9sbExlZnQgPD0gMCA/ICJhY2Vfc2Nyb2xsZXIiIDogImFjZV9zY3JvbGxlciBhY2Vfc2Nyb2xsLWxlZnQiOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0ZVTEwpIHsKICAgICAgICAgICAgdGhpcy4kY2hhbmdlZExpbmVzID0gbnVsbDsKICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShjb25maWcpOwogICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShjb25maWcpOwogICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShjb25maWcpOwogICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUoY29uZmlnKTsKICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKGNvbmZpZyk7CiAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1NDUk9MTCkgewogICAgICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsOwogICAgICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX1RFWFQgfHwgY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTKQogICAgICAgICAgICAgICAgdGhpcy4kdGV4dExheWVyLnVwZGF0ZShjb25maWcpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0TGF5ZXIuc2Nyb2xsTGluZXMoY29uZmlnKTsKCiAgICAgICAgICAgIGlmICh0aGlzLiRzaG93R3V0dGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0dVVFRFUiB8fCBjaGFuZ2VzICYgdGhpcy5DSEFOR0VfTElORVMpCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGNvbmZpZyk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIuc2Nyb2xsTGluZXMoY29uZmlnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShjb25maWcpOwogICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUoY29uZmlnKTsKICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIudXBkYXRlKGNvbmZpZyk7CiAgICAgICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiYWZ0ZXJSZW5kZXIiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUKSB7CiAgICAgICAgICAgIHRoaXMuJGNoYW5nZWRMaW5lcyA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUoY29uZmlnKTsKICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpCiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUoY29uZmlnKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0xJTkVTKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiR1cGRhdGVMaW5lcygpIHx8IChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfR1VUVEVSKSAmJiB0aGlzLiRzaG93R3V0dGVyKQogICAgICAgICAgICAgICAgdGhpcy4kZ3V0dGVyTGF5ZXIudXBkYXRlKGNvbmZpZyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9URVhUIHx8IGNoYW5nZXMgJiB0aGlzLkNIQU5HRV9HVVRURVIpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJHNob3dHdXR0ZXIpCiAgICAgICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci51cGRhdGUoY29uZmlnKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY2hhbmdlcyAmIHRoaXMuQ0hBTkdFX0NVUlNPUikgewogICAgICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0R3V0dGVyTGluZSkKICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZUxpbmVIaWdobGlnaHQoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIGlmIChjaGFuZ2VzICYgdGhpcy5DSEFOR0VfQ1VSU09SKSB7CiAgICAgICAgICAgIHRoaXMuJGN1cnNvckxheWVyLnVwZGF0ZShjb25maWcpOwogICAgICAgICAgICB0aGlzLiRtb3ZlVGV4dEFyZWFUb0N1cnNvcigpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoYW5nZXMgJiAodGhpcy5DSEFOR0VfTUFSS0VSIHwgdGhpcy5DSEFOR0VfTUFSS0VSX0ZST05UKSkgewogICAgICAgICAgICB0aGlzLiRtYXJrZXJGcm9udC51cGRhdGUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIGlmIChjaGFuZ2VzICYgKHRoaXMuQ0hBTkdFX01BUktFUiB8IHRoaXMuQ0hBTkdFX01BUktFUl9CQUNLKSkgewogICAgICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnVwZGF0ZShjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5fc2lnbmFsKCJhZnRlclJlbmRlciIpOwogICAgfTsKCiAgICAKICAgIHRoaXMuJGF1dG9zaXplID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuc2Vzc2lvbi5nZXRTY3JlZW5MZW5ndGgoKSAqIHRoaXMubGluZUhlaWdodDsKICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gdGhpcy4kbWF4TGluZXMgKiB0aGlzLmxpbmVIZWlnaHQ7CiAgICAgICAgdmFyIGRlc2lyZWRIZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsIAogICAgICAgICAgICBNYXRoLm1heCgodGhpcy4kbWluTGluZXMgfHwgMSkgKiB0aGlzLmxpbmVIZWlnaHQsIGhlaWdodCkKICAgICAgICApICsgdGhpcy5zY3JvbGxNYXJnaW4udiArICh0aGlzLiRleHRyYUhlaWdodCB8fCAwKTsKICAgICAgICBpZiAodGhpcy4kaG9yaXpTY3JvbGwpCiAgICAgICAgICAgIGRlc2lyZWRIZWlnaHQgKz0gdGhpcy5zY3JvbGxCYXJILmdldEhlaWdodCgpOwogICAgICAgIGlmICh0aGlzLiRtYXhQaXhlbEhlaWdodCAmJiBkZXNpcmVkSGVpZ2h0ID4gdGhpcy4kbWF4UGl4ZWxIZWlnaHQpCiAgICAgICAgICAgIGRlc2lyZWRIZWlnaHQgPSB0aGlzLiRtYXhQaXhlbEhlaWdodDsKICAgICAgICAKICAgICAgICB2YXIgaGlkZVNjcm9sbGJhcnMgPSBkZXNpcmVkSGVpZ2h0IDw9IDIgKiB0aGlzLmxpbmVIZWlnaHQ7CiAgICAgICAgdmFyIHZTY3JvbGwgPSAhaGlkZVNjcm9sbGJhcnMgJiYgaGVpZ2h0ID4gbWF4SGVpZ2h0OwogICAgICAgIAogICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IHRoaXMuZGVzaXJlZEhlaWdodCB8fAogICAgICAgICAgICB0aGlzLiRzaXplLmhlaWdodCAhPSB0aGlzLmRlc2lyZWRIZWlnaHQgfHwgdlNjcm9sbCAhPSB0aGlzLiR2U2Nyb2xsKSB7CiAgICAgICAgICAgIGlmICh2U2Nyb2xsICE9IHRoaXMuJHZTY3JvbGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuJHZTY3JvbGwgPSB2U2Nyb2xsOwogICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXJWLnNldFZpc2libGUodlNjcm9sbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB3ID0gdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGg7CiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGRlc2lyZWRIZWlnaHQgKyAicHgiOwogICAgICAgICAgICB0aGlzLiR1cGRhdGVDYWNoZWRTaXplKHRydWUsIHRoaXMuJGd1dHRlcldpZHRoLCB3LCBkZXNpcmVkSGVpZ2h0KTsKICAgICAgICAgICAgdGhpcy5kZXNpcmVkSGVpZ2h0ID0gZGVzaXJlZEhlaWdodDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiYXV0b3NpemUiKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLiRjb21wdXRlTGF5ZXJDb25maWcgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuJHNpemU7CiAgICAgICAgCiAgICAgICAgdmFyIGhpZGVTY3JvbGxiYXJzID0gc2l6ZS5oZWlnaHQgPD0gMiAqIHRoaXMubGluZUhlaWdodDsKICAgICAgICB2YXIgc2NyZWVuTGluZXMgPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCk7CiAgICAgICAgdmFyIG1heEhlaWdodCA9IHNjcmVlbkxpbmVzICogdGhpcy5saW5lSGVpZ2h0OwoKICAgICAgICB2YXIgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25nZXN0TGluZSgpOwogICAgICAgIAogICAgICAgIHZhciBob3JpelNjcm9sbCA9ICFoaWRlU2Nyb2xsYmFycyAmJiAodGhpcy4kaFNjcm9sbEJhckFsd2F5c1Zpc2libGUgfHwKICAgICAgICAgICAgc2l6ZS5zY3JvbGxlcldpZHRoIC0gbG9uZ2VzdExpbmUgLSAyICogdGhpcy4kcGFkZGluZyA8IDApOwoKICAgICAgICB2YXIgaFNjcm9sbENoYW5nZWQgPSB0aGlzLiRob3JpelNjcm9sbCAhPT0gaG9yaXpTY3JvbGw7CiAgICAgICAgaWYgKGhTY3JvbGxDaGFuZ2VkKSB7CiAgICAgICAgICAgIHRoaXMuJGhvcml6U2Nyb2xsID0gaG9yaXpTY3JvbGw7CiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQmFySC5zZXRWaXNpYmxlKGhvcml6U2Nyb2xsKTsKICAgICAgICB9CiAgICAgICAgdmFyIHZTY3JvbGxCZWZvcmUgPSB0aGlzLiR2U2Nyb2xsOyAvLyBhdXRvc2l6ZSBjYW4gY2hhbmdlIHZzY3JvbGwgdmFsdWUgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIHVwZGF0ZSBsb25nZXN0TGluZQogICAgICAgIGlmICh0aGlzLiRtYXhMaW5lcyAmJiB0aGlzLmxpbmVIZWlnaHQgPiAxKQogICAgICAgICAgICB0aGlzLiRhdXRvc2l6ZSgpOwoKICAgICAgICB2YXIgbWluSGVpZ2h0ID0gc2l6ZS5zY3JvbGxlckhlaWdodCArIHRoaXMubGluZUhlaWdodDsKICAgICAgICAKICAgICAgICB2YXIgc2Nyb2xsUGFzdEVuZCA9ICF0aGlzLiRtYXhMaW5lcyAmJiB0aGlzLiRzY3JvbGxQYXN0RW5kCiAgICAgICAgICAgID8gKHNpemUuc2Nyb2xsZXJIZWlnaHQgLSB0aGlzLmxpbmVIZWlnaHQpICogdGhpcy4kc2Nyb2xsUGFzdEVuZAogICAgICAgICAgICA6IDA7CiAgICAgICAgbWF4SGVpZ2h0ICs9IHNjcm9sbFBhc3RFbmQ7CiAgICAgICAgCiAgICAgICAgdmFyIHNtID0gdGhpcy5zY3JvbGxNYXJnaW47CiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChNYXRoLm1heCgtc20udG9wLAogICAgICAgICAgICBNYXRoLm1pbih0aGlzLnNjcm9sbFRvcCwgbWF4SGVpZ2h0IC0gc2l6ZS5zY3JvbGxlckhlaWdodCArIHNtLmJvdHRvbSkpKTsKCiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQoTWF0aC5tYXgoLXNtLmxlZnQsIE1hdGgubWluKHRoaXMuc2Nyb2xsTGVmdCwgCiAgICAgICAgICAgIGxvbmdlc3RMaW5lICsgMiAqIHRoaXMuJHBhZGRpbmcgLSBzaXplLnNjcm9sbGVyV2lkdGggKyBzbS5yaWdodCkpKTsKICAgICAgICAKICAgICAgICB2YXIgdlNjcm9sbCA9ICFoaWRlU2Nyb2xsYmFycyAmJiAodGhpcy4kdlNjcm9sbEJhckFsd2F5c1Zpc2libGUgfHwKICAgICAgICAgICAgc2l6ZS5zY3JvbGxlckhlaWdodCAtIG1heEhlaWdodCArIHNjcm9sbFBhc3RFbmQgPCAwIHx8IHRoaXMuc2Nyb2xsVG9wID4gc20udG9wKTsKICAgICAgICB2YXIgdlNjcm9sbENoYW5nZWQgPSB2U2Nyb2xsQmVmb3JlICE9PSB2U2Nyb2xsOwogICAgICAgIGlmICh2U2Nyb2xsQ2hhbmdlZCkgewogICAgICAgICAgICB0aGlzLiR2U2Nyb2xsID0gdlNjcm9sbDsKICAgICAgICAgICAgdGhpcy5zY3JvbGxCYXJWLnNldFZpc2libGUodlNjcm9sbCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5zY3JvbGxUb3AgJSB0aGlzLmxpbmVIZWlnaHQ7CiAgICAgICAgdmFyIGxpbmVDb3VudCA9IE1hdGguY2VpbChtaW5IZWlnaHQgLyB0aGlzLmxpbmVIZWlnaHQpIC0gMTsKICAgICAgICB2YXIgZmlyc3RSb3cgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKCh0aGlzLnNjcm9sbFRvcCAtIG9mZnNldCkgLyB0aGlzLmxpbmVIZWlnaHQpKTsKICAgICAgICB2YXIgbGFzdFJvdyA9IGZpcnN0Um93ICsgbGluZUNvdW50OwogICAgICAgIHZhciBmaXJzdFJvd1NjcmVlbiwgZmlyc3RSb3dIZWlnaHQ7CiAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSB0aGlzLmxpbmVIZWlnaHQ7CiAgICAgICAgZmlyc3RSb3cgPSBzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRSb3coZmlyc3RSb3csIDApOwogICAgICAgIHZhciBmb2xkTGluZSA9IHNlc3Npb24uZ2V0Rm9sZExpbmUoZmlyc3RSb3cpOwogICAgICAgIGlmIChmb2xkTGluZSkgewogICAgICAgICAgICBmaXJzdFJvdyA9IGZvbGRMaW5lLnN0YXJ0LnJvdzsKICAgICAgICB9CgogICAgICAgIGZpcnN0Um93U2NyZWVuID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUm93KGZpcnN0Um93LCAwKTsKICAgICAgICBmaXJzdFJvd0hlaWdodCA9IHNlc3Npb24uZ2V0Um93TGVuZ3RoKGZpcnN0Um93KSAqIGxpbmVIZWlnaHQ7CgogICAgICAgIGxhc3RSb3cgPSBNYXRoLm1pbihzZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRSb3cobGFzdFJvdywgMCksIHNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICBtaW5IZWlnaHQgPSBzaXplLnNjcm9sbGVySGVpZ2h0ICsgc2Vzc2lvbi5nZXRSb3dMZW5ndGgobGFzdFJvdykgKiBsaW5lSGVpZ2h0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSb3dIZWlnaHQ7CgogICAgICAgIG9mZnNldCA9IHRoaXMuc2Nyb2xsVG9wIC0gZmlyc3RSb3dTY3JlZW4gKiBsaW5lSGVpZ2h0OwoKICAgICAgICB2YXIgY2hhbmdlcyA9IDA7CiAgICAgICAgaWYgKHRoaXMubGF5ZXJDb25maWcud2lkdGggIT0gbG9uZ2VzdExpbmUgfHwgaFNjcm9sbENoYW5nZWQpIAogICAgICAgICAgICBjaGFuZ2VzID0gdGhpcy5DSEFOR0VfSF9TQ1JPTEw7CiAgICAgICAgaWYgKGhTY3JvbGxDaGFuZ2VkIHx8IHZTY3JvbGxDaGFuZ2VkKSB7CiAgICAgICAgICAgIGNoYW5nZXMgfD0gdGhpcy4kdXBkYXRlQ2FjaGVkU2l6ZSh0cnVlLCB0aGlzLmd1dHRlcldpZHRoLCBzaXplLndpZHRoLCBzaXplLmhlaWdodCk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgic2Nyb2xsYmFyVmlzaWJpbGl0eUNoYW5nZWQiKTsKICAgICAgICAgICAgaWYgKHZTY3JvbGxDaGFuZ2VkKQogICAgICAgICAgICAgICAgbG9uZ2VzdExpbmUgPSB0aGlzLiRnZXRMb25nZXN0TGluZSgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLmxheWVyQ29uZmlnID0gewogICAgICAgICAgICB3aWR0aCA6IGxvbmdlc3RMaW5lLAogICAgICAgICAgICBwYWRkaW5nIDogdGhpcy4kcGFkZGluZywKICAgICAgICAgICAgZmlyc3RSb3cgOiBmaXJzdFJvdywKICAgICAgICAgICAgZmlyc3RSb3dTY3JlZW46IGZpcnN0Um93U2NyZWVuLAogICAgICAgICAgICBsYXN0Um93IDogbGFzdFJvdywKICAgICAgICAgICAgbGluZUhlaWdodCA6IGxpbmVIZWlnaHQsCiAgICAgICAgICAgIGNoYXJhY3RlcldpZHRoIDogdGhpcy5jaGFyYWN0ZXJXaWR0aCwKICAgICAgICAgICAgbWluSGVpZ2h0IDogbWluSGVpZ2h0LAogICAgICAgICAgICBtYXhIZWlnaHQgOiBtYXhIZWlnaHQsCiAgICAgICAgICAgIG9mZnNldCA6IG9mZnNldCwKICAgICAgICAgICAgZ3V0dGVyT2Zmc2V0IDogbGluZUhlaWdodCA/IE1hdGgubWF4KDAsIE1hdGguY2VpbCgob2Zmc2V0ICsgc2l6ZS5oZWlnaHQgLSBzaXplLnNjcm9sbGVySGVpZ2h0KSAvIGxpbmVIZWlnaHQpKSA6IDAsCiAgICAgICAgICAgIGhlaWdodCA6IHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQKICAgICAgICB9OwoKICAgICAgICBpZiAodGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlcikKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLiRiaWRpSGFuZGxlci5zZXRDb250ZW50V2lkdGgobG9uZ2VzdExpbmUgLSB0aGlzLiRwYWRkaW5nKTsKCiAgICAgICAgcmV0dXJuIGNoYW5nZXM7CiAgICB9OwoKICAgIHRoaXMuJHVwZGF0ZUxpbmVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF0aGlzLiRjaGFuZ2VkTGluZXMpIHJldHVybjsKICAgICAgICB2YXIgZmlyc3RSb3cgPSB0aGlzLiRjaGFuZ2VkTGluZXMuZmlyc3RSb3c7CiAgICAgICAgdmFyIGxhc3RSb3cgPSB0aGlzLiRjaGFuZ2VkTGluZXMubGFzdFJvdzsKICAgICAgICB0aGlzLiRjaGFuZ2VkTGluZXMgPSBudWxsOwoKICAgICAgICB2YXIgbGF5ZXJDb25maWcgPSB0aGlzLmxheWVyQ29uZmlnOwoKICAgICAgICBpZiAoZmlyc3RSb3cgPiBsYXllckNvbmZpZy5sYXN0Um93ICsgMSkgeyByZXR1cm47IH0KICAgICAgICBpZiAobGFzdFJvdyA8IGxheWVyQ29uZmlnLmZpcnN0Um93KSB7IHJldHVybjsgfQogICAgICAgIGlmIChsYXN0Um93ID09PSBJbmZpbml0eSkgewogICAgICAgICAgICBpZiAodGhpcy4kc2hvd0d1dHRlcikKICAgICAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLnVwZGF0ZShsYXllckNvbmZpZyk7CiAgICAgICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGUobGF5ZXJDb25maWcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuJHRleHRMYXllci51cGRhdGVMaW5lcyhsYXllckNvbmZpZywgZmlyc3RSb3csIGxhc3RSb3cpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLiRnZXRMb25nZXN0TGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBjaGFyQ291bnQgPSB0aGlzLnNlc3Npb24uZ2V0U2NyZWVuV2lkdGgoKTsKICAgICAgICBpZiAodGhpcy5zaG93SW52aXNpYmxlcyAmJiAhdGhpcy5zZXNzaW9uLiR1c2VXcmFwTW9kZSkKICAgICAgICAgICAgY2hhckNvdW50ICs9IDE7CiAgICAgICAgICAgIAogICAgICAgIGlmICh0aGlzLiR0ZXh0TGF5ZXIgJiYgY2hhckNvdW50ID4gdGhpcy4kdGV4dExheWVyLk1BWF9MSU5FX0xFTkdUSCkKICAgICAgICAgICAgY2hhckNvdW50ID0gdGhpcy4kdGV4dExheWVyLk1BWF9MSU5FX0xFTkdUSCArIDMwOwoKICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy4kc2l6ZS5zY3JvbGxlcldpZHRoIC0gMiAqIHRoaXMuJHBhZGRpbmcsIE1hdGgucm91bmQoY2hhckNvdW50ICogdGhpcy5jaGFyYWN0ZXJXaWR0aCkpOwogICAgfTsKICAgIHRoaXMudXBkYXRlRnJvbnRNYXJrZXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbWFya2VyRnJvbnQuc2V0TWFya2Vycyh0aGlzLnNlc3Npb24uZ2V0TWFya2Vycyh0cnVlKSk7CiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfRlJPTlQpOwogICAgfTsKICAgIHRoaXMudXBkYXRlQmFja01hcmtlcnMgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRtYXJrZXJCYWNrLnNldE1hcmtlcnModGhpcy5zZXNzaW9uLmdldE1hcmtlcnMoKSk7CiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9NQVJLRVJfQkFDSyk7CiAgICB9OwogICAgdGhpcy5hZGRHdXR0ZXJEZWNvcmF0aW9uID0gZnVuY3Rpb24ocm93LCBjbGFzc05hbWUpewogICAgICAgIHRoaXMuJGd1dHRlckxheWVyLmFkZEd1dHRlckRlY29yYXRpb24ocm93LCBjbGFzc05hbWUpOwogICAgfTsKICAgIHRoaXMucmVtb3ZlR3V0dGVyRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKHJvdywgY2xhc3NOYW1lKXsKICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5yZW1vdmVHdXR0ZXJEZWNvcmF0aW9uKHJvdywgY2xhc3NOYW1lKTsKICAgIH07CiAgICB0aGlzLnVwZGF0ZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24ocm93cykgewogICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKICAgIH07CiAgICB0aGlzLnNldEFubm90YXRpb25zID0gZnVuY3Rpb24oYW5ub3RhdGlvbnMpIHsKICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7CiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9HVVRURVIpOwogICAgfTsKICAgIHRoaXMudXBkYXRlQ3Vyc29yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9DVVJTT1IpOwogICAgfTsKICAgIHRoaXMuaGlkZUN1cnNvciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmhpZGVDdXJzb3IoKTsKICAgIH07CiAgICB0aGlzLnNob3dDdXJzb3IgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5zaG93Q3Vyc29yKCk7CiAgICB9OwoKICAgIHRoaXMuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcgPSBmdW5jdGlvbihhbmNob3IsIGxlYWQsIG9mZnNldCkgewogICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoYW5jaG9yLCBvZmZzZXQpOwogICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobGVhZCwgb2Zmc2V0KTsKICAgIH07CiAgICB0aGlzLnNjcm9sbEN1cnNvckludG9WaWV3ID0gZnVuY3Rpb24oY3Vyc29yLCBvZmZzZXQsICR2aWV3TWFyZ2luKSB7CiAgICAgICAgaWYgKHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQgPT09IDApCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHBvcyA9IHRoaXMuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24oY3Vyc29yKTsKCiAgICAgICAgdmFyIGxlZnQgPSBwb3MubGVmdDsKICAgICAgICB2YXIgdG9wID0gcG9zLnRvcDsKICAgICAgICAKICAgICAgICB2YXIgdG9wTWFyZ2luID0gJHZpZXdNYXJnaW4gJiYgJHZpZXdNYXJnaW4udG9wIHx8IDA7CiAgICAgICAgdmFyIGJvdHRvbU1hcmdpbiA9ICR2aWV3TWFyZ2luICYmICR2aWV3TWFyZ2luLmJvdHRvbSB8fCAwOwogICAgICAgIAogICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiRzY3JvbGxBbmltYXRpb24gPyB0aGlzLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCkgOiB0aGlzLnNjcm9sbFRvcDsKICAgICAgICAKICAgICAgICBpZiAoc2Nyb2xsVG9wICsgdG9wTWFyZ2luID4gdG9wKSB7CiAgICAgICAgICAgIGlmIChvZmZzZXQgJiYgc2Nyb2xsVG9wICsgdG9wTWFyZ2luID4gdG9wICsgdGhpcy5saW5lSGVpZ2h0KQogICAgICAgICAgICAgICAgdG9wIC09IG9mZnNldCAqIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQ7CiAgICAgICAgICAgIGlmICh0b3AgPT09IDApCiAgICAgICAgICAgICAgICB0b3AgPSAtdGhpcy5zY3JvbGxNYXJnaW4udG9wOwogICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRvcCk7CiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgKyB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0IC0gYm90dG9tTWFyZ2luIDwgdG9wICsgdGhpcy5saW5lSGVpZ2h0KSB7CiAgICAgICAgICAgIGlmIChvZmZzZXQgJiYgc2Nyb2xsVG9wICsgdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIGJvdHRvbU1hcmdpbiA8IHRvcCAtICB0aGlzLmxpbmVIZWlnaHQpCiAgICAgICAgICAgICAgICB0b3AgKz0gb2Zmc2V0ICogdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodDsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcCh0b3AgKyB0aGlzLmxpbmVIZWlnaHQgKyBib3R0b21NYXJnaW4gLSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0KTsKICAgICAgICB9CgogICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0OwoKICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+IGxlZnQpIHsKICAgICAgICAgICAgaWYgKGxlZnQgPCB0aGlzLiRwYWRkaW5nICsgMiAqIHRoaXMubGF5ZXJDb25maWcuY2hhcmFjdGVyV2lkdGgpCiAgICAgICAgICAgICAgICBsZWZ0ID0gLXRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQ7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KGxlZnQpOwogICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCArIHRoaXMuJHNpemUuc2Nyb2xsZXJXaWR0aCA8IGxlZnQgKyB0aGlzLmNoYXJhY3RlcldpZHRoKSB7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KE1hdGgucm91bmQobGVmdCArIHRoaXMuY2hhcmFjdGVyV2lkdGggLSB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgpKTsKICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPD0gdGhpcy4kcGFkZGluZyAmJiBsZWZ0IC0gc2Nyb2xsTGVmdCA8IHRoaXMuY2hhcmFjdGVyV2lkdGgpIHsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbExlZnQoMCk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0U2Nyb2xsVG9wID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKTsKICAgIH07CiAgICB0aGlzLmdldFNjcm9sbExlZnQgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldFNjcm9sbExlZnQoKTsKICAgIH07CiAgICB0aGlzLmdldFNjcm9sbFRvcFJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvcCAvIHRoaXMubGluZUhlaWdodDsKICAgIH07CiAgICB0aGlzLmdldFNjcm9sbEJvdHRvbVJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aGlzLnNjcm9sbFRvcCArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQpIC8gdGhpcy5saW5lSGVpZ2h0KSAtIDEpOwogICAgfTsKICAgIHRoaXMuc2Nyb2xsVG9Sb3cgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHJvdyAqIHRoaXMubGluZUhlaWdodCk7CiAgICB9OwoKICAgIHRoaXMuYWxpZ25DdXJzb3IgPSBmdW5jdGlvbihjdXJzb3IsIGFsaWdubWVudCkgewogICAgICAgIGlmICh0eXBlb2YgY3Vyc29yID09ICJudW1iZXIiKQogICAgICAgICAgICBjdXJzb3IgPSB7cm93OiBjdXJzb3IsIGNvbHVtbjogMH07CgogICAgICAgIHZhciBwb3MgPSB0aGlzLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKGN1cnNvcik7CiAgICAgICAgdmFyIGggPSB0aGlzLiRzaXplLnNjcm9sbGVySGVpZ2h0IC0gdGhpcy5saW5lSGVpZ2h0OwogICAgICAgIHZhciBvZmZzZXQgPSBwb3MudG9wIC0gaCAqIChhbGlnbm1lbnQgfHwgMCk7CgogICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aob2Zmc2V0KTsKICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgfTsKCiAgICB0aGlzLlNURVBTID0gODsKICAgIHRoaXMuJGNhbGNTdGVwcyA9IGZ1bmN0aW9uKGZyb21WYWx1ZSwgdG9WYWx1ZSl7CiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHZhciBsID0gdGhpcy5TVEVQUzsKICAgICAgICB2YXIgc3RlcHMgPSBbXTsKCiAgICAgICAgdmFyIGZ1bmMgID0gZnVuY3Rpb24odCwgeF9taW4sIGR4KSB7CiAgICAgICAgICAgIHJldHVybiBkeCAqIChNYXRoLnBvdyh0IC0gMSwgMykgKyAxKSArIHhfbWluOwogICAgICAgIH07CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsOyArK2kpCiAgICAgICAgICAgIHN0ZXBzLnB1c2goZnVuYyhpIC8gdGhpcy5TVEVQUywgZnJvbVZhbHVlLCB0b1ZhbHVlIC0gZnJvbVZhbHVlKSk7CgogICAgICAgIHJldHVybiBzdGVwczsKICAgIH07CiAgICB0aGlzLnNjcm9sbFRvTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGNlbnRlciwgYW5pbWF0ZSwgY2FsbGJhY2spIHsKICAgICAgICB2YXIgcG9zID0gdGhpcy4kY3Vyc29yTGF5ZXIuZ2V0UGl4ZWxQb3NpdGlvbih7cm93OiBsaW5lLCBjb2x1bW46IDB9KTsKICAgICAgICB2YXIgb2Zmc2V0ID0gcG9zLnRvcDsKICAgICAgICBpZiAoY2VudGVyKQogICAgICAgICAgICBvZmZzZXQgLT0gdGhpcy4kc2l6ZS5zY3JvbGxlckhlaWdodCAvIDI7CgogICAgICAgIHZhciBpbml0aWFsU2Nyb2xsID0gdGhpcy5zY3JvbGxUb3A7CiAgICAgICAgdGhpcy5zZXNzaW9uLnNldFNjcm9sbFRvcChvZmZzZXQpOwogICAgICAgIGlmIChhbmltYXRlICE9PSBmYWxzZSkKICAgICAgICAgICAgdGhpcy5hbmltYXRlU2Nyb2xsaW5nKGluaXRpYWxTY3JvbGwsIGNhbGxiYWNrKTsKICAgIH07CgogICAgdGhpcy5hbmltYXRlU2Nyb2xsaW5nID0gZnVuY3Rpb24oZnJvbVZhbHVlLCBjYWxsYmFjaykgewogICAgICAgIHZhciB0b1ZhbHVlID0gdGhpcy5zY3JvbGxUb3A7CiAgICAgICAgaWYgKCF0aGlzLiRhbmltYXRlZFNjcm9sbCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CiAgICAgICAgCiAgICAgICAgaWYgKGZyb21WYWx1ZSA9PSB0b1ZhbHVlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuJHNjcm9sbEFuaW1hdGlvbikgewogICAgICAgICAgICB2YXIgb2xkU3RlcHMgPSB0aGlzLiRzY3JvbGxBbmltYXRpb24uc3RlcHM7CiAgICAgICAgICAgIGlmIChvbGRTdGVwcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGZyb21WYWx1ZSA9IG9sZFN0ZXBzWzBdOwogICAgICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSA9PSB0b1ZhbHVlKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgc3RlcHMgPSBfc2VsZi4kY2FsY1N0ZXBzKGZyb21WYWx1ZSwgdG9WYWx1ZSk7CiAgICAgICAgdGhpcy4kc2Nyb2xsQW5pbWF0aW9uID0ge2Zyb206IGZyb21WYWx1ZSwgdG86IHRvVmFsdWUsIHN0ZXBzOiBzdGVwc307CgogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4kdGltZXIpOwoKICAgICAgICBfc2VsZi5zZXNzaW9uLnNldFNjcm9sbFRvcChzdGVwcy5zaGlmdCgpKTsKICAgICAgICBfc2VsZi5zZXNzaW9uLiRzY3JvbGxUb3AgPSB0b1ZhbHVlOwogICAgICAgIHRoaXMuJHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChzdGVwcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHN0ZXBzLnNoaWZ0KCkpOwogICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi4kc2Nyb2xsVG9wID0gdG9WYWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0b1ZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIF9zZWxmLnNlc3Npb24uJHNjcm9sbFRvcCA9IC0xOwogICAgICAgICAgICAgICAgX3NlbGYuc2Vzc2lvbi5zZXRTY3JvbGxUb3AodG9WYWx1ZSk7CiAgICAgICAgICAgICAgICB0b1ZhbHVlID0gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9zZWxmLiR0aW1lciA9IGNsZWFySW50ZXJ2YWwoX3NlbGYuJHRpbWVyKTsKICAgICAgICAgICAgICAgIF9zZWxmLiRzY3JvbGxBbmltYXRpb24gPSBudWxsOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIDEwKTsKICAgIH07CiAgICB0aGlzLnNjcm9sbFRvWSA9IGZ1bmN0aW9uKHNjcm9sbFRvcCkgewogICAgICAgIGlmICh0aGlzLnNjcm9sbFRvcCAhPT0gc2Nyb2xsVG9wKSB7CiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTsKICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuc2Nyb2xsVG9YID0gZnVuY3Rpb24oc2Nyb2xsTGVmdCkgewogICAgICAgIGlmICh0aGlzLnNjcm9sbExlZnQgIT09IHNjcm9sbExlZnQpCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7CiAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9IX1NDUk9MTCk7CiAgICB9OwogICAgdGhpcy5zY3JvbGxUbyA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgICAgICB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHkpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHkpOwogICAgfTsKICAgIHRoaXMuc2Nyb2xsQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRhWSkgewogICAgICAgIGRlbHRhWSAmJiB0aGlzLnNlc3Npb24uc2V0U2Nyb2xsVG9wKHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIGRlbHRhWSk7CiAgICAgICAgZGVsdGFYICYmIHRoaXMuc2Vzc2lvbi5zZXRTY3JvbGxMZWZ0KHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkgKyBkZWx0YVgpOwogICAgfTsKICAgIHRoaXMuaXNTY3JvbGxhYmxlQnkgPSBmdW5jdGlvbihkZWx0YVgsIGRlbHRhWSkgewogICAgICAgIGlmIChkZWx0YVkgPCAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSA+PSAxIC0gdGhpcy5zY3JvbGxNYXJnaW4udG9wKQogICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChkZWx0YVkgPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxUb3AoKSArIHRoaXMuJHNpemUuc2Nyb2xsZXJIZWlnaHQKICAgICAgICAgICAgLSB0aGlzLmxheWVyQ29uZmlnLm1heEhlaWdodCA8IC0xICsgdGhpcy5zY3JvbGxNYXJnaW4uYm90dG9tKQogICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChkZWx0YVggPCAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkgPj0gMSAtIHRoaXMuc2Nyb2xsTWFyZ2luLmxlZnQpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChkZWx0YVggPiAwICYmIHRoaXMuc2Vzc2lvbi5nZXRTY3JvbGxMZWZ0KCkgKyB0aGlzLiRzaXplLnNjcm9sbGVyV2lkdGgKICAgICAgICAgICAgLSB0aGlzLmxheWVyQ29uZmlnLndpZHRoIDwgLTEgKyB0aGlzLnNjcm9sbE1hcmdpbi5yaWdodCkKICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5waXhlbFRvU2NyZWVuQ29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7CiAgICAgICAgdmFyIGNhbnZhc1BvczsKICAgICAgICBpZiAodGhpcy4kaGFzQ3NzVHJhbnNmb3JtcykgewogICAgICAgICAgICBjYW52YXNQb3MgPSB7dG9wOjAsIGxlZnQ6IDB9OwogICAgICAgICAgICB2YXIgcCA9IHRoaXMuJGZvbnRNZXRyaWNzLnRyYW5zZm9ybUNvb3JkaW5hdGVzKFt4LCB5XSk7CiAgICAgICAgICAgIHggPSBwWzFdIC0gdGhpcy5ndXR0ZXJXaWR0aCAtIHRoaXMubWFyZ2luLmxlZnQ7CiAgICAgICAgICAgIHkgPSBwWzBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBvZmZzZXRYID0geCArIHRoaXMuc2Nyb2xsTGVmdCAtIGNhbnZhc1Bvcy5sZWZ0IC0gdGhpcy4kcGFkZGluZzsKICAgICAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0WCAvIHRoaXMuY2hhcmFjdGVyV2lkdGg7CiAgICAgICAgdmFyIHJvdyA9IE1hdGguZmxvb3IoKHkgKyB0aGlzLnNjcm9sbFRvcCAtIGNhbnZhc1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0KTsKICAgICAgICB2YXIgY29sID0gdGhpcy4kYmxvY2tDdXJzb3IgPyBNYXRoLmZsb29yKG9mZnNldCkgOiBNYXRoLnJvdW5kKG9mZnNldCk7CgogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sLCBzaWRlOiBvZmZzZXQgLSBjb2wgPiAwID8gMSA6IC0xLCBvZmZzZXRYOiAgb2Zmc2V0WH07CiAgICB9OwoKICAgIHRoaXMuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMgPSBmdW5jdGlvbih4LCB5KSB7CiAgICAgICAgdmFyIGNhbnZhc1BvczsKICAgICAgICBpZiAodGhpcy4kaGFzQ3NzVHJhbnNmb3JtcykgewogICAgICAgICAgICBjYW52YXNQb3MgPSB7dG9wOjAsIGxlZnQ6IDB9OwogICAgICAgICAgICB2YXIgcCA9IHRoaXMuJGZvbnRNZXRyaWNzLnRyYW5zZm9ybUNvb3JkaW5hdGVzKFt4LCB5XSk7CiAgICAgICAgICAgIHggPSBwWzFdIC0gdGhpcy5ndXR0ZXJXaWR0aCAtIHRoaXMubWFyZ2luLmxlZnQ7CiAgICAgICAgICAgIHkgPSBwWzBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhbnZhc1BvcyA9IHRoaXMuc2Nyb2xsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgb2Zmc2V0WCA9IHggKyB0aGlzLnNjcm9sbExlZnQgLSBjYW52YXNQb3MubGVmdCAtIHRoaXMuJHBhZGRpbmc7CiAgICAgICAgdmFyIG9mZnNldCA9IG9mZnNldFggLyB0aGlzLmNoYXJhY3RlcldpZHRoOwogICAgICAgIHZhciBjb2wgPSB0aGlzLiRibG9ja0N1cnNvciA/IE1hdGguZmxvb3Iob2Zmc2V0KSA6IE1hdGgucm91bmQob2Zmc2V0KTsKCiAgICAgICAgdmFyIHJvdyA9IE1hdGguZmxvb3IoKHkgKyB0aGlzLnNjcm9sbFRvcCAtIGNhbnZhc1Bvcy50b3ApIC8gdGhpcy5saW5lSGVpZ2h0KTsKCiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5zY3JlZW5Ub0RvY3VtZW50UG9zaXRpb24ocm93LCBNYXRoLm1heChjb2wsIDApLCBvZmZzZXRYKTsKICAgIH07CiAgICB0aGlzLnRleHRUb1NjcmVlbkNvb3JkaW5hdGVzID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY2FudmFzUG9zID0gdGhpcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB2YXIgcG9zID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyb3csIGNvbHVtbik7CgogICAgICAgIHZhciB4ID0gdGhpcy4kcGFkZGluZyArICh0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzQmlkaVJvdyhwb3Mucm93LCByb3cpCiAgICAgICAgICAgICA/IHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuZ2V0UG9zTGVmdChwb3MuY29sdW1uKQogICAgICAgICAgICAgOiBNYXRoLnJvdW5kKHBvcy5jb2x1bW4gKiB0aGlzLmNoYXJhY3RlcldpZHRoKSk7CiAgICAgICAgCiAgICAgICAgdmFyIHkgPSBwb3Mucm93ICogdGhpcy5saW5lSGVpZ2h0OwoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwYWdlWDogY2FudmFzUG9zLmxlZnQgKyB4IC0gdGhpcy5zY3JvbGxMZWZ0LAogICAgICAgICAgICBwYWdlWTogY2FudmFzUG9zLnRvcCArIHkgLSB0aGlzLnNjcm9sbFRvcAogICAgICAgIH07CiAgICB9OwogICAgdGhpcy52aXN1YWxpemVGb2N1cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRvbS5hZGRDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9mb2N1cyIpOwogICAgfTsKICAgIHRoaXMudmlzdWFsaXplQmx1ciA9IGZ1bmN0aW9uKCkgewogICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyh0aGlzLmNvbnRhaW5lciwgImFjZV9mb2N1cyIpOwogICAgfTsKICAgIHRoaXMuc2hvd0NvbXBvc2l0aW9uID0gZnVuY3Rpb24oY29tcG9zaXRpb24pIHsKICAgICAgICB0aGlzLiRjb21wb3NpdGlvbiA9IGNvbXBvc2l0aW9uOwogICAgICAgIGlmICghY29tcG9zaXRpb24uY3NzVGV4dCkgewogICAgICAgICAgICBjb21wb3NpdGlvbi5jc3NUZXh0ID0gdGhpcy50ZXh0YXJlYS5zdHlsZS5jc3NUZXh0OwogICAgICAgIH0KICAgICAgICBjb21wb3NpdGlvbi51c2VUZXh0YXJlYUZvcklNRSA9IHRoaXMuJHVzZVRleHRhcmVhRm9ySU1FOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLiR1c2VUZXh0YXJlYUZvcklNRSkgewogICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3ModGhpcy50ZXh0YXJlYSwgImFjZV9jb21wb3NpdGlvbiIpOwogICAgICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSAiIjsKICAgICAgICAgICAgdGhpcy4kbW92ZVRleHRBcmVhVG9DdXJzb3IoKTsKICAgICAgICAgICAgdGhpcy4kY3Vyc29yTGF5ZXIuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgY29tcG9zaXRpb24ubWFya2VySWQgPSB0aGlzLnNlc3Npb24uYWRkTWFya2VyKGNvbXBvc2l0aW9uLm1hcmtlclJhbmdlLCAiYWNlX2NvbXBvc2l0aW9uX21hcmtlciIsICJ0ZXh0Iik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuc2V0Q29tcG9zaXRpb25UZXh0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLmN1cnNvcjsKICAgICAgICB0aGlzLmFkZFRva2VuKHRleHQsICJjb21wb3NpdGlvbl9wbGFjZWhvbGRlciIsIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgIHRoaXMuJG1vdmVUZXh0QXJlYVRvQ3Vyc29yKCk7CiAgICB9OwogICAgdGhpcy5oaWRlQ29tcG9zaXRpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuJGNvbXBvc2l0aW9uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuJGNvbXBvc2l0aW9uLm1hcmtlcklkKQogICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTWFya2VyKHRoaXMuJGNvbXBvc2l0aW9uLm1hcmtlcklkKTsKCiAgICAgICAgZG9tLnJlbW92ZUNzc0NsYXNzKHRoaXMudGV4dGFyZWEsICJhY2VfY29tcG9zaXRpb24iKTsKICAgICAgICB0aGlzLnRleHRhcmVhLnN0eWxlLmNzc1RleHQgPSB0aGlzLiRjb21wb3NpdGlvbi5jc3NUZXh0OwogICAgICAgIHRoaXMuJGNvbXBvc2l0aW9uID0gbnVsbDsKICAgICAgICB0aGlzLiRjdXJzb3JMYXllci5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIH07CiAgICAKICAgIHRoaXMuYWRkVG9rZW4gPSBmdW5jdGlvbih0ZXh0LCB0eXBlLCByb3csIGNvbHVtbikgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIHNlc3Npb24uYmdUb2tlbml6ZXIubGluZXNbcm93XSA9IG51bGw7CiAgICAgICAgdmFyIG5ld1Rva2VuID0ge3R5cGU6IHR5cGUsIHZhbHVlOiB0ZXh0fTsKICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IG51bGwpIHsKICAgICAgICAgICAgdG9rZW5zLnB1c2gobmV3VG9rZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBsID0gMDsKICAgICAgICAgICAgZm9yICh2YXIgaSA9MDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgbCArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAoY29sdW1uIDw9IGwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHRva2VuLnZhbHVlLmxlbmd0aCAtIChsIC0gY29sdW1uKTsKICAgICAgICAgICAgICAgICAgICB2YXIgYmVmb3JlID0gdG9rZW4udmFsdWUuc2xpY2UoMCwgZGlmZik7CiAgICAgICAgICAgICAgICAgICAgdmFyIGFmdGVyID0gdG9rZW4udmFsdWUuc2xpY2UoZGlmZik7CiAgICAKICAgICAgICAgICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGksIDEsIHt0eXBlOiB0b2tlbi50eXBlLCB2YWx1ZTogYmVmb3JlfSwgIG5ld1Rva2VuLCAge3R5cGU6IHRva2VuLnR5cGUsIHZhbHVlOiBhZnRlcn0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMudXBkYXRlTGluZXMocm93LCByb3cpOwogICAgfTsKICAgIHRoaXMuc2V0VGhlbWUgPSBmdW5jdGlvbih0aGVtZSwgY2IpIHsKICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgICAgIHRoaXMuJHRoZW1lSWQgPSB0aGVtZTsKICAgICAgICBfc2VsZi5fZGlzcGF0Y2hFdmVudCgndGhlbWVDaGFuZ2UnLHt0aGVtZTp0aGVtZX0pOwoKICAgICAgICBpZiAoIXRoZW1lIHx8IHR5cGVvZiB0aGVtZSA9PSAic3RyaW5nIikgewogICAgICAgICAgICB2YXIgbW9kdWxlTmFtZSA9IHRoZW1lIHx8IHRoaXMuJG9wdGlvbnMudGhlbWUuaW5pdGlhbFZhbHVlOwogICAgICAgICAgICBjb25maWcubG9hZE1vZHVsZShbInRoZW1lIiwgbW9kdWxlTmFtZV0sIGFmdGVyTG9hZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWZ0ZXJMb2FkKHRoZW1lKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGFmdGVyTG9hZChtb2R1bGUpIHsKICAgICAgICAgICAgaWYgKF9zZWxmLiR0aGVtZUlkICE9IHRoZW1lKQogICAgICAgICAgICAgICAgcmV0dXJuIGNiICYmIGNiKCk7CiAgICAgICAgICAgIGlmICghbW9kdWxlIHx8ICFtb2R1bGUuY3NzQ2xhc3MpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNvdWxkbid0IGxvYWQgbW9kdWxlICIgKyB0aGVtZSArICIgb3IgaXQgZGlkbid0IGNhbGwgZGVmaW5lIik7CiAgICAgICAgICAgIGlmIChtb2R1bGUuJGlkKQogICAgICAgICAgICAgICAgX3NlbGYuJHRoZW1lSWQgPSBtb2R1bGUuJGlkOwogICAgICAgICAgICBkb20uaW1wb3J0Q3NzU3RyaW5nKAogICAgICAgICAgICAgICAgbW9kdWxlLmNzc1RleHQsCiAgICAgICAgICAgICAgICBtb2R1bGUuY3NzQ2xhc3MsCiAgICAgICAgICAgICAgICBfc2VsZi5jb250YWluZXIKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmIChfc2VsZi50aGVtZSkKICAgICAgICAgICAgICAgIGRvbS5yZW1vdmVDc3NDbGFzcyhfc2VsZi5jb250YWluZXIsIF9zZWxmLnRoZW1lLmNzc0NsYXNzKTsKCiAgICAgICAgICAgIHZhciBwYWRkaW5nID0gInBhZGRpbmciIGluIG1vZHVsZSA/IG1vZHVsZS5wYWRkaW5nIAogICAgICAgICAgICAgICAgOiAicGFkZGluZyIgaW4gKF9zZWxmLnRoZW1lIHx8IHt9KSA/IDQgOiBfc2VsZi4kcGFkZGluZzsKICAgICAgICAgICAgaWYgKF9zZWxmLiRwYWRkaW5nICYmIHBhZGRpbmcgIT0gX3NlbGYuJHBhZGRpbmcpCiAgICAgICAgICAgICAgICBfc2VsZi5zZXRQYWRkaW5nKHBhZGRpbmcpOwogICAgICAgICAgICBfc2VsZi4kdGhlbWUgPSBtb2R1bGUuY3NzQ2xhc3M7CgogICAgICAgICAgICBfc2VsZi50aGVtZSA9IG1vZHVsZTsKICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgbW9kdWxlLmNzc0NsYXNzKTsKICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKF9zZWxmLmNvbnRhaW5lciwgImFjZV9kYXJrIiwgbW9kdWxlLmlzRGFyayk7CiAgICAgICAgICAgIGlmIChfc2VsZi4kc2l6ZSkgewogICAgICAgICAgICAgICAgX3NlbGYuJHNpemUud2lkdGggPSAwOwogICAgICAgICAgICAgICAgX3NlbGYuJHVwZGF0ZVNpemVBc3luYygpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBfc2VsZi5fZGlzcGF0Y2hFdmVudCgndGhlbWVMb2FkZWQnLCB7dGhlbWU6bW9kdWxlfSk7CiAgICAgICAgICAgIGNiICYmIGNiKCk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0VGhlbWUgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy4kdGhlbWVJZDsKICAgIH07CiAgICB0aGlzLnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUsIGluY2x1ZGUpIHsKICAgICAgICBkb20uc2V0Q3NzQ2xhc3ModGhpcy5jb250YWluZXIsIHN0eWxlLCBpbmNsdWRlICE9PSBmYWxzZSk7CiAgICB9OwogICAgdGhpcy51bnNldFN0eWxlID0gZnVuY3Rpb24oc3R5bGUpIHsKICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModGhpcy5jb250YWluZXIsIHN0eWxlKTsKICAgIH07CiAgICAKICAgIHRoaXMuc2V0Q3Vyc29yU3R5bGUgPSBmdW5jdGlvbihzdHlsZSkgewogICAgICAgIGRvbS5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCAiY3Vyc29yIiwgc3R5bGUpOwogICAgfTsKICAgIHRoaXMuc2V0TW91c2VDdXJzb3IgPSBmdW5jdGlvbihjdXJzb3JTdHlsZSkgewogICAgICAgIGRvbS5zZXRTdHlsZSh0aGlzLnNjcm9sbGVyLnN0eWxlLCAiY3Vyc29yIiwgY3Vyc29yU3R5bGUpOwogICAgfTsKICAgIAogICAgdGhpcy5hdHRhY2hUb1NoYWRvd1Jvb3QgPSBmdW5jdGlvbigpIHsKICAgICAgICBkb20uaW1wb3J0Q3NzU3RyaW5nKGVkaXRvckNzcywgImFjZV9lZGl0b3IuY3NzIiwgdGhpcy5jb250YWluZXIpOwogICAgfTsKICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgdGhpcy4kZm9udE1ldHJpY3MuZGVzdHJveSgpOwogICAgICAgIHRoaXMuJGN1cnNvckxheWVyLmRlc3Ryb3koKTsKICAgIH07Cgp9KS5jYWxsKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUpOwoKCmNvbmZpZy5kZWZpbmVPcHRpb25zKFZpcnR1YWxSZW5kZXJlci5wcm90b3R5cGUsICJyZW5kZXJlciIsIHsKICAgIGFuaW1hdGVkU2Nyb2xsOiB7aW5pdGlhbFZhbHVlOiBmYWxzZX0sCiAgICBzaG93SW52aXNpYmxlczogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXRTaG93SW52aXNpYmxlcyh2YWx1ZSkpCiAgICAgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1RFWFQpOwogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZQogICAgfSwKICAgIHNob3dQcmludE1hcmdpbjogewogICAgICAgIHNldDogZnVuY3Rpb24oKSB7IHRoaXMuJHVwZGF0ZVByaW50TWFyZ2luKCk7IH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiB0cnVlCiAgICB9LAogICAgcHJpbnRNYXJnaW5Db2x1bW46IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKCkgeyB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOyB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogODAKICAgIH0sCiAgICBwcmludE1hcmdpbjogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09ICJudW1iZXIiKQogICAgICAgICAgICAgICAgdGhpcy4kcHJpbnRNYXJnaW5Db2x1bW4gPSB2YWw7CiAgICAgICAgICAgIHRoaXMuJHNob3dQcmludE1hcmdpbiA9ICEhdmFsOwogICAgICAgICAgICB0aGlzLiR1cGRhdGVQcmludE1hcmdpbigpOwogICAgICAgIH0sCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHNob3dQcmludE1hcmdpbiAmJiB0aGlzLiRwcmludE1hcmdpbkNvbHVtbjsgCiAgICAgICAgfQogICAgfSwKICAgIHNob3dHdXR0ZXI6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpewogICAgICAgICAgICB0aGlzLiRndXR0ZXIuc3R5bGUuZGlzcGxheSA9IHNob3cgPyAiYmxvY2siIDogIm5vbmUiOwogICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX0ZVTEwpOwogICAgICAgICAgICB0aGlzLm9uR3V0dGVyUmVzaXplKCk7CiAgICAgICAgfSwKICAgICAgICBpbml0aWFsVmFsdWU6IHRydWUKICAgIH0sCiAgICBmYWRlRm9sZFdpZGdldHM6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpIHsKICAgICAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuJGd1dHRlciwgImFjZV9mYWRlLWZvbGQtd2lkZ2V0cyIsIHNob3cpOwogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZQogICAgfSwKICAgIHNob3dGb2xkV2lkZ2V0czogewogICAgICAgIHNldDogZnVuY3Rpb24oc2hvdykgewogICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5zZXRTaG93Rm9sZFdpZGdldHMoc2hvdyk7CiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQogICAgfSwKICAgIGRpc3BsYXlJbmRlbnRHdWlkZXM6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3cpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJHRleHRMYXllci5zZXREaXNwbGF5SW5kZW50R3VpZGVzKHNob3cpKQogICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9URVhUKTsKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQogICAgfSwKICAgIGhpZ2hsaWdodEd1dHRlckxpbmU6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHNob3VsZEhpZ2hsaWdodCkgewogICAgICAgICAgICB0aGlzLiRndXR0ZXJMYXllci5zZXRIaWdobGlnaHRHdXR0ZXJMaW5lKHNob3VsZEhpZ2hsaWdodCk7CiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogdHJ1ZQogICAgfSwKICAgIGhTY3JvbGxCYXJBbHdheXNWaXNpYmxlOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLiRoU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZSB8fCAhdGhpcy4kaG9yaXpTY3JvbGwpCiAgICAgICAgICAgICAgICB0aGlzLiRsb29wLnNjaGVkdWxlKHRoaXMuQ0hBTkdFX1NDUk9MTCk7CiAgICAgICAgfSwKICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlCiAgICB9LAogICAgdlNjcm9sbEJhckFsd2F5c1Zpc2libGU6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAoIXRoaXMuJHZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIHx8ICF0aGlzLiR2U2Nyb2xsKQogICAgICAgICAgICAgICAgdGhpcy4kbG9vcC5zY2hlZHVsZSh0aGlzLkNIQU5HRV9TQ1JPTEwpOwogICAgICAgIH0sCiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZQogICAgfSwKICAgIGZvbnRTaXplOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2l6ZSA9PSAibnVtYmVyIikKICAgICAgICAgICAgICAgIHNpemUgPSBzaXplICsgInB4IjsKICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZm9udFNpemUgPSBzaXplOwogICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplKCk7CiAgICAgICAgfSwKICAgICAgICBpbml0aWFsVmFsdWU6IDEyCiAgICB9LAogICAgZm9udEZhbWlseTogewogICAgICAgIHNldDogZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5mb250RmFtaWx5ID0gbmFtZTsKICAgICAgICAgICAgdGhpcy51cGRhdGVGb250U2l6ZSgpOwogICAgICAgIH0KICAgIH0sCiAgICBtYXhMaW5lczogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlRnVsbCgpOwogICAgICAgIH0KICAgIH0sCiAgICBtaW5MaW5lczogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIGlmICghKHRoaXMuJG1pbkxpbmVzIDwgMHgxZmZmZmZmZmZmZmZmKSkKICAgICAgICAgICAgICAgIHRoaXMuJG1pbkxpbmVzID0gMDsKICAgICAgICAgICAgdGhpcy51cGRhdGVGdWxsKCk7CiAgICAgICAgfQogICAgfSwKICAgIG1heFBpeGVsSGVpZ2h0OiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgdGhpcy51cGRhdGVGdWxsKCk7CiAgICAgICAgfSwKICAgICAgICBpbml0aWFsVmFsdWU6IDAKICAgIH0sCiAgICBzY3JvbGxQYXN0RW5kOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgdmFsID0gK3ZhbCB8fCAwOwogICAgICAgICAgICBpZiAodGhpcy4kc2Nyb2xsUGFzdEVuZCA9PSB2YWwpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHRoaXMuJHNjcm9sbFBhc3RFbmQgPSB2YWw7CiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfU0NST0xMKTsKICAgICAgICB9LAogICAgICAgIGluaXRpYWxWYWx1ZTogMCwKICAgICAgICBoYW5kbGVzU2V0OiB0cnVlCiAgICB9LAogICAgZml4ZWRXaWR0aEd1dHRlcjogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHRoaXMuJGd1dHRlckxheWVyLiRmaXhlZFdpZHRoID0gISF2YWw7CiAgICAgICAgICAgIHRoaXMuJGxvb3Auc2NoZWR1bGUodGhpcy5DSEFOR0VfR1VUVEVSKTsKICAgICAgICB9CiAgICB9LAogICAgdGhlbWU6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgeyB0aGlzLnNldFRoZW1lKHZhbCk7IH0sCiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuJHRoZW1lSWQgfHwgdGhpcy50aGVtZTsgfSwKICAgICAgICBpbml0aWFsVmFsdWU6ICIuL3RoZW1lL3RleHRtYXRlIiwKICAgICAgICBoYW5kbGVzU2V0OiB0cnVlCiAgICB9LAogICAgaGFzQ3NzVHJhbnNmb3JtczogewogICAgfSwKICAgIHVzZVRleHRhcmVhRm9ySU1FOiB7CiAgICAgICAgaW5pdGlhbFZhbHVlOiAhdXNlcmFnZW50LmlzTW9iaWxlICYmICF1c2VyYWdlbnQuaXNJRQogICAgfQp9KTsKCmV4cG9ydHMuVmlydHVhbFJlbmRlcmVyID0gVmlydHVhbFJlbmRlcmVyOwp9KTsKCmRlZmluZSgiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL25ldCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9jb25maWciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBuZXQgPSByZXF1aXJlKCIuLi9saWIvbmV0Iik7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOwoKZnVuY3Rpb24gJHdvcmtlckJsb2Iod29ya2VyVXJsKSB7CiAgICB2YXIgc2NyaXB0ID0gImltcG9ydFNjcmlwdHMoJyIgKyBuZXQucXVhbGlmeVVSTCh3b3JrZXJVcmwpICsgIicpOyI7CiAgICB0cnkgewogICAgICAgIHJldHVybiBuZXcgQmxvYihbc2NyaXB0XSwgeyJ0eXBlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSk7CiAgICB9IGNhdGNoIChlKSB7IC8vIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5CiAgICAgICAgdmFyIEJsb2JCdWlsZGVyID0gd2luZG93LkJsb2JCdWlsZGVyIHx8IHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlciB8fCB3aW5kb3cuTW96QmxvYkJ1aWxkZXI7CiAgICAgICAgdmFyIGJsb2JCdWlsZGVyID0gbmV3IEJsb2JCdWlsZGVyKCk7CiAgICAgICAgYmxvYkJ1aWxkZXIuYXBwZW5kKHNjcmlwdCk7CiAgICAgICAgcmV0dXJuIGJsb2JCdWlsZGVyLmdldEJsb2IoImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKTsKICAgIH0KfQoKZnVuY3Rpb24gY3JlYXRlV29ya2VyKHdvcmtlclVybCkgewogICAgaWYgKHR5cGVvZiBXb3JrZXIgPT0gInVuZGVmaW5lZCIpCiAgICAgICAgcmV0dXJuIHsgcG9zdE1lc3NhZ2U6IGZ1bmN0aW9uKCkge30sIHRlcm1pbmF0ZTogZnVuY3Rpb24oKSB7fSB9OwogICAgaWYgKGNvbmZpZy5nZXQoImxvYWRXb3JrZXJGcm9tQmxvYiIpKSB7CiAgICAgICAgdmFyIGJsb2IgPSAkd29ya2VyQmxvYih3b3JrZXJVcmwpOwogICAgICAgIHZhciBVUkwgPSB3aW5kb3cuVVJMIHx8IHdpbmRvdy53ZWJraXRVUkw7CiAgICAgICAgdmFyIGJsb2JVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICAgIHJldHVybiBuZXcgV29ya2VyKGJsb2JVUkwpOwogICAgfQogICAgcmV0dXJuIG5ldyBXb3JrZXIod29ya2VyVXJsKTsKfQoKdmFyIFdvcmtlckNsaWVudCA9IGZ1bmN0aW9uKHdvcmtlcikgewogICAgaWYgKCF3b3JrZXIucG9zdE1lc3NhZ2UpCiAgICAgICAgd29ya2VyID0gdGhpcy4kY3JlYXRlV29ya2VyRnJvbU9sZENvbmZpZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoKICAgIHRoaXMuJHdvcmtlciA9IHdvcmtlcjsKICAgIHRoaXMuJHNlbmREZWx0YVF1ZXVlID0gdGhpcy4kc2VuZERlbHRhUXVldWUuYmluZCh0aGlzKTsKICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSB0aGlzLmNoYW5nZUxpc3RlbmVyLmJpbmQodGhpcyk7CiAgICB0aGlzLm9uTWVzc2FnZSA9IHRoaXMub25NZXNzYWdlLmJpbmQodGhpcyk7CgogICAgdGhpcy5jYWxsYmFja0lkID0gMTsKICAgIHRoaXMuY2FsbGJhY2tzID0ge307CgogICAgdGhpcy4kd29ya2VyLm9ubWVzc2FnZSA9IHRoaXMub25NZXNzYWdlOwp9OwoKKGZ1bmN0aW9uKCl7CgogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwoKICAgIHRoaXMuJGNyZWF0ZVdvcmtlckZyb21PbGRDb25maWcgPSBmdW5jdGlvbih0b3BMZXZlbE5hbWVzcGFjZXMsIG1vZCwgY2xhc3NuYW1lLCB3b3JrZXJVcmwsIGltcG9ydFNjcmlwdHMpIHsKICAgICAgICBpZiAocmVxdWlyZS5uYW1lVG9VcmwgJiYgIXJlcXVpcmUudG9VcmwpCiAgICAgICAgICAgIHJlcXVpcmUudG9VcmwgPSByZXF1aXJlLm5hbWVUb1VybDsKCiAgICAgICAgaWYgKGNvbmZpZy5nZXQoInBhY2thZ2VkIikgfHwgIXJlcXVpcmUudG9VcmwpIHsKICAgICAgICAgICAgd29ya2VyVXJsID0gd29ya2VyVXJsIHx8IGNvbmZpZy5tb2R1bGVVcmwobW9kLCAid29ya2VyIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIG5vcm1hbGl6ZVBhdGggPSB0aGlzLiRub3JtYWxpemVQYXRoOwogICAgICAgICAgICB3b3JrZXJVcmwgPSB3b3JrZXJVcmwgfHwgbm9ybWFsaXplUGF0aChyZXF1aXJlLnRvVXJsKCJhY2Uvd29ya2VyL3dvcmtlci5qcyIsIG51bGwsICJfIikpOwoKICAgICAgICAgICAgdmFyIHRsbnMgPSB7fTsKICAgICAgICAgICAgdG9wTGV2ZWxOYW1lc3BhY2VzLmZvckVhY2goZnVuY3Rpb24obnMpIHsKICAgICAgICAgICAgICAgIHRsbnNbbnNdID0gbm9ybWFsaXplUGF0aChyZXF1aXJlLnRvVXJsKG5zLCBudWxsLCAiXyIpLnJlcGxhY2UoLyhcLmpzKT8oXD8uKik/JC8sICIiKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdGhpcy4kd29ya2VyID0gY3JlYXRlV29ya2VyKHdvcmtlclVybCk7CiAgICAgICAgaWYgKGltcG9ydFNjcmlwdHMpIHsKICAgICAgICAgICAgdGhpcy5zZW5kKCJpbXBvcnRTY3JpcHRzIiwgaW1wb3J0U2NyaXB0cyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJHdvcmtlci5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgIGluaXQgOiB0cnVlLAogICAgICAgICAgICB0bG5zIDogdGxucywKICAgICAgICAgICAgbW9kdWxlIDogbW9kLAogICAgICAgICAgICBjbGFzc25hbWUgOiBjbGFzc25hbWUKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGhpcy4kd29ya2VyOwogICAgfTsKCiAgICB0aGlzLm9uTWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgICAgIHN3aXRjaCAobXNnLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAiZXZlbnQiOgogICAgICAgICAgICAgICAgdGhpcy5fc2lnbmFsKG1zZy5uYW1lLCB7ZGF0YTogbXNnLmRhdGF9KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjYWxsIjoKICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuY2FsbGJhY2tzW21zZy5pZF07CiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhtc2cuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FsbGJhY2tzW21zZy5pZF07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRFcnJvcihtc2cuZGF0YSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibG9nIjoKICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlICYmIGNvbnNvbGUubG9nICYmIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIG1zZy5kYXRhKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB3aW5kb3cuY29uc29sZSAmJiBjb25zb2xlLmVycm9yICYmIGNvbnNvbGUuZXJyb3IoZXJyKTsKICAgIH07CgogICAgdGhpcy4kbm9ybWFsaXplUGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgICByZXR1cm4gbmV0LnF1YWxpZnlVUkwocGF0aCk7CiAgICB9OwoKICAgIHRoaXMudGVybWluYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJ0ZXJtaW5hdGUiLCB7fSk7CiAgICAgICAgdGhpcy5kZWx0YVF1ZXVlID0gbnVsbDsKICAgICAgICB0aGlzLiR3b3JrZXIudGVybWluYXRlKCk7CiAgICAgICAgdGhpcy4kd29ya2VyID0gbnVsbDsKICAgICAgICBpZiAodGhpcy4kZG9jKQogICAgICAgICAgICB0aGlzLiRkb2Mub2ZmKCJjaGFuZ2UiLCB0aGlzLmNoYW5nZUxpc3RlbmVyKTsKICAgICAgICB0aGlzLiRkb2MgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLnNlbmQgPSBmdW5jdGlvbihjbWQsIGFyZ3MpIHsKICAgICAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IGNtZCwgYXJnczogYXJnc30pOwogICAgfTsKCiAgICB0aGlzLmNhbGwgPSBmdW5jdGlvbihjbWQsIGFyZ3MsIGNhbGxiYWNrKSB7CiAgICAgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgICAgIHZhciBpZCA9IHRoaXMuY2FsbGJhY2tJZCsrOwogICAgICAgICAgICB0aGlzLmNhbGxiYWNrc1tpZF0gPSBjYWxsYmFjazsKICAgICAgICAgICAgYXJncy5wdXNoKGlkKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zZW5kKGNtZCwgYXJncyk7CiAgICB9OwoKICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKGV2ZW50LCBkYXRhKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAmJiBkYXRhLmRhdGEuZXJyKQogICAgICAgICAgICAgICAgZGF0YS5kYXRhLmVyciA9IHttZXNzYWdlOiBkYXRhLmRhdGEuZXJyLm1lc3NhZ2UsIHN0YWNrOiBkYXRhLmRhdGEuZXJyLnN0YWNrLCBjb2RlOiBkYXRhLmRhdGEuZXJyLmNvZGV9OwogICAgICAgICAgICB0aGlzLiR3b3JrZXIucG9zdE1lc3NhZ2Uoe2V2ZW50OiBldmVudCwgZGF0YToge2RhdGE6IGRhdGEuZGF0YX19KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXgpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihleC5zdGFjayk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmF0dGFjaFRvRG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICBpZiAodGhpcy4kZG9jKQogICAgICAgICAgICB0aGlzLnRlcm1pbmF0ZSgpOwoKICAgICAgICB0aGlzLiRkb2MgPSBkb2M7CiAgICAgICAgdGhpcy5jYWxsKCJzZXRWYWx1ZSIsIFtkb2MuZ2V0VmFsdWUoKV0pOwogICAgICAgIGRvYy5vbigiY2hhbmdlIiwgdGhpcy5jaGFuZ2VMaXN0ZW5lcik7CiAgICB9OwoKICAgIHRoaXMuY2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmICghdGhpcy5kZWx0YVF1ZXVlKSB7CiAgICAgICAgICAgIHRoaXMuZGVsdGFRdWV1ZSA9IFtdOwogICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMuJHNlbmREZWx0YVF1ZXVlLCAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IikKICAgICAgICAgICAgdGhpcy5kZWx0YVF1ZXVlLnB1c2goZGVsdGEuc3RhcnQsIGRlbHRhLmxpbmVzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRoaXMuZGVsdGFRdWV1ZS5wdXNoKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpOwogICAgfTsKCiAgICB0aGlzLiRzZW5kRGVsdGFRdWV1ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBxID0gdGhpcy5kZWx0YVF1ZXVlOwogICAgICAgIGlmICghcSkgcmV0dXJuOwogICAgICAgIHRoaXMuZGVsdGFRdWV1ZSA9IG51bGw7CiAgICAgICAgaWYgKHEubGVuZ3RoID4gNTAgJiYgcS5sZW5ndGggPiB0aGlzLiRkb2MuZ2V0TGVuZ3RoKCkgPj4gMSkgewogICAgICAgICAgICB0aGlzLmNhbGwoInNldFZhbHVlIiwgW3RoaXMuJGRvYy5nZXRWYWx1ZSgpXSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIHRoaXMuZW1pdCgiY2hhbmdlIiwge2RhdGE6IHF9KTsKICAgIH07Cgp9KS5jYWxsKFdvcmtlckNsaWVudC5wcm90b3R5cGUpOwoKCnZhciBVSVdvcmtlckNsaWVudCA9IGZ1bmN0aW9uKHRvcExldmVsTmFtZXNwYWNlcywgbW9kLCBjbGFzc25hbWUpIHsKICAgIHZhciBtYWluID0gbnVsbDsKICAgIHZhciBlbWl0U3luYyA9IGZhbHNlOwogICAgdmFyIHNlbmRlciA9IE9iamVjdC5jcmVhdGUoRXZlbnRFbWl0dGVyKTsKCiAgICB2YXIgbWVzc2FnZUJ1ZmZlciA9IFtdOwogICAgdmFyIHdvcmtlckNsaWVudCA9IG5ldyBXb3JrZXJDbGllbnQoewogICAgICAgIG1lc3NhZ2VCdWZmZXI6IG1lc3NhZ2VCdWZmZXIsCiAgICAgICAgdGVybWluYXRlOiBmdW5jdGlvbigpIHt9LAogICAgICAgIHBvc3RNZXNzYWdlOiBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIG1lc3NhZ2VCdWZmZXIucHVzaChlKTsKICAgICAgICAgICAgaWYgKCFtYWluKSByZXR1cm47CiAgICAgICAgICAgIGlmIChlbWl0U3luYykKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQocHJvY2Vzc05leHQpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwcm9jZXNzTmV4dCgpOwogICAgICAgIH0KICAgIH0pOwoKICAgIHdvcmtlckNsaWVudC5zZXRFbWl0U3luYyA9IGZ1bmN0aW9uKHZhbCkgeyBlbWl0U3luYyA9IHZhbDsgfTsKCiAgICB2YXIgcHJvY2Vzc05leHQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbXNnID0gbWVzc2FnZUJ1ZmZlci5zaGlmdCgpOwogICAgICAgIGlmIChtc2cuY29tbWFuZCkKICAgICAgICAgICAgbWFpblttc2cuY29tbWFuZF0uYXBwbHkobWFpbiwgbXNnLmFyZ3MpOwogICAgICAgIGVsc2UgaWYgKG1zZy5ldmVudCkKICAgICAgICAgICAgc2VuZGVyLl9zaWduYWwobXNnLmV2ZW50LCBtc2cuZGF0YSk7CiAgICB9OwoKICAgIHNlbmRlci5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uKG1zZykgewogICAgICAgIHdvcmtlckNsaWVudC5vbk1lc3NhZ2Uoe2RhdGE6IG1zZ30pOwogICAgfTsKICAgIHNlbmRlci5jYWxsYmFjayA9IGZ1bmN0aW9uKGRhdGEsIGNhbGxiYWNrSWQpIHsKICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHt0eXBlOiAiY2FsbCIsIGlkOiBjYWxsYmFja0lkLCBkYXRhOiBkYXRhfSk7CiAgICB9OwogICAgc2VuZGVyLmVtaXQgPSBmdW5jdGlvbihuYW1lLCBkYXRhKSB7CiAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTogImV2ZW50IiwgbmFtZTogbmFtZSwgZGF0YTogZGF0YX0pOwogICAgfTsKCiAgICBjb25maWcubG9hZE1vZHVsZShbIndvcmtlciIsIG1vZF0sIGZ1bmN0aW9uKE1haW4pIHsKICAgICAgICBtYWluID0gbmV3IE1haW5bY2xhc3NuYW1lXShzZW5kZXIpOwogICAgICAgIHdoaWxlIChtZXNzYWdlQnVmZmVyLmxlbmd0aCkKICAgICAgICAgICAgcHJvY2Vzc05leHQoKTsKICAgIH0pOwoKICAgIHJldHVybiB3b3JrZXJDbGllbnQ7Cn07CgpleHBvcnRzLlVJV29ya2VyQ2xpZW50ID0gVUlXb3JrZXJDbGllbnQ7CmV4cG9ydHMuV29ya2VyQ2xpZW50ID0gV29ya2VyQ2xpZW50OwpleHBvcnRzLmNyZWF0ZVdvcmtlciA9IGNyZWF0ZVdvcmtlcjsKCgp9KTsKCmRlZmluZSgiYWNlL3BsYWNlaG9sZGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xpYi9vb3AiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKCnZhciBQbGFjZUhvbGRlciA9IGZ1bmN0aW9uKHNlc3Npb24sIGxlbmd0aCwgcG9zLCBvdGhlcnMsIG1haW5DbGFzcywgb3RoZXJzQ2xhc3MpIHsKICAgIHZhciBfc2VsZiA9IHRoaXM7CiAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDsKICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CiAgICB0aGlzLmRvYyA9IHNlc3Npb24uZ2V0RG9jdW1lbnQoKTsKICAgIHRoaXMubWFpbkNsYXNzID0gbWFpbkNsYXNzOwogICAgdGhpcy5vdGhlcnNDbGFzcyA9IG90aGVyc0NsYXNzOwogICAgdGhpcy4kb25VcGRhdGUgPSB0aGlzLm9uVXBkYXRlLmJpbmQodGhpcyk7CiAgICB0aGlzLmRvYy5vbigiY2hhbmdlIiwgdGhpcy4kb25VcGRhdGUpOwogICAgdGhpcy4kb3RoZXJzID0gb3RoZXJzOwogICAgCiAgICB0aGlzLiRvbkN1cnNvckNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF9zZWxmLm9uQ3Vyc29yQ2hhbmdlKCk7CiAgICAgICAgfSk7CiAgICB9OwogICAgCiAgICB0aGlzLiRwb3MgPSBwb3M7CiAgICB2YXIgdW5kb1N0YWNrID0gc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLiR1bmRvU3RhY2sgfHwgc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpLiR1bmRvc3RhY2sgfHwge2xlbmd0aDogLTF9OwogICAgdGhpcy4kdW5kb1N0YWNrRGVwdGggPSB1bmRvU3RhY2subGVuZ3RoOwogICAgdGhpcy5zZXR1cCgpOwoKICAgIHNlc3Npb24uc2VsZWN0aW9uLm9uKCJjaGFuZ2VDdXJzb3IiLCB0aGlzLiRvbkN1cnNvckNoYW5nZSk7Cn07CgooZnVuY3Rpb24oKSB7CgogICAgb29wLmltcGxlbWVudCh0aGlzLCBFdmVudEVtaXR0ZXIpOwogICAgdGhpcy5zZXR1cCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfc2VsZiA9IHRoaXM7CiAgICAgICAgdmFyIGRvYyA9IHRoaXMuZG9jOwogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIAogICAgICAgIHRoaXMuc2VsZWN0aW9uQmVmb3JlID0gc2Vzc2lvbi5zZWxlY3Rpb24udG9KU09OKCk7CiAgICAgICAgaWYgKHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKQogICAgICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKCk7CgogICAgICAgIHRoaXMucG9zID0gZG9jLmNyZWF0ZUFuY2hvcih0aGlzLiRwb3Mucm93LCB0aGlzLiRwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7CiAgICAgICAgcG9zLiRpbnNlcnRSaWdodCA9IHRydWU7CiAgICAgICAgcG9zLmRldGFjaCgpOwogICAgICAgIHBvcy5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKG5ldyBSYW5nZShwb3Mucm93LCBwb3MuY29sdW1uLCBwb3Mucm93LCBwb3MuY29sdW1uICsgdGhpcy5sZW5ndGgpLCB0aGlzLm1haW5DbGFzcywgbnVsbCwgZmFsc2UpOwogICAgICAgIHRoaXMub3RoZXJzID0gW107CiAgICAgICAgdGhpcy4kb3RoZXJzLmZvckVhY2goZnVuY3Rpb24ob3RoZXIpIHsKICAgICAgICAgICAgdmFyIGFuY2hvciA9IGRvYy5jcmVhdGVBbmNob3Iob3RoZXIucm93LCBvdGhlci5jb2x1bW4pOwogICAgICAgICAgICBhbmNob3IuJGluc2VydFJpZ2h0ID0gdHJ1ZTsKICAgICAgICAgICAgYW5jaG9yLmRldGFjaCgpOwogICAgICAgICAgICBfc2VsZi5vdGhlcnMucHVzaChhbmNob3IpOwogICAgICAgIH0pOwogICAgICAgIHNlc3Npb24uc2V0VW5kb1NlbGVjdChmYWxzZSk7CiAgICB9OwogICAgdGhpcy5zaG93T3RoZXJNYXJrZXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMub3RoZXJzQWN0aXZlKSByZXR1cm47CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CiAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKICAgICAgICB0aGlzLm90aGVyc0FjdGl2ZSA9IHRydWU7CiAgICAgICAgdGhpcy5vdGhlcnMuZm9yRWFjaChmdW5jdGlvbihhbmNob3IpIHsKICAgICAgICAgICAgYW5jaG9yLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIobmV3IFJhbmdlKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4sIGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4rX3NlbGYubGVuZ3RoKSwgX3NlbGYub3RoZXJzQ2xhc3MsIG51bGwsIGZhbHNlKTsKICAgICAgICB9KTsKICAgIH07CiAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMub3RoZXJzQWN0aXZlKSByZXR1cm47CiAgICAgICAgdGhpcy5vdGhlcnNBY3RpdmUgPSBmYWxzZTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3RoZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5vdGhlcnNbaV0ubWFya2VySWQpOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICBpZiAodGhpcy4kdXBkYXRpbmcpCiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUFuY2hvcnMoZGVsdGEpOwogICAgICAgICAgICAKICAgICAgICB2YXIgcmFuZ2UgPSBkZWx0YTsKICAgICAgICBpZiAocmFuZ2Uuc3RhcnQucm93ICE9PSByYW5nZS5lbmQucm93KSByZXR1cm47CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyAhPT0gdGhpcy5wb3Mucm93KSByZXR1cm47CiAgICAgICAgdGhpcy4kdXBkYXRpbmcgPSB0cnVlOwogICAgICAgIHZhciBsZW5ndGhEaWZmID0gZGVsdGEuYWN0aW9uID09PSAiaW5zZXJ0IiA/IHJhbmdlLmVuZC5jb2x1bW4gLSByYW5nZS5zdGFydC5jb2x1bW4gOiByYW5nZS5zdGFydC5jb2x1bW4gLSByYW5nZS5lbmQuY29sdW1uOwogICAgICAgIHZhciBpbk1haW5SYW5nZSA9IHJhbmdlLnN0YXJ0LmNvbHVtbiA+PSB0aGlzLnBvcy5jb2x1bW4gJiYgcmFuZ2Uuc3RhcnQuY29sdW1uIDw9IHRoaXMucG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoICsgMTsKICAgICAgICB2YXIgZGlzdGFuY2VGcm9tU3RhcnQgPSByYW5nZS5zdGFydC5jb2x1bW4gLSB0aGlzLnBvcy5jb2x1bW47CiAgICAgICAgCiAgICAgICAgdGhpcy51cGRhdGVBbmNob3JzKGRlbHRhKTsKICAgICAgICAKICAgICAgICBpZiAoaW5NYWluUmFuZ2UpCiAgICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGxlbmd0aERpZmY7CgogICAgICAgIGlmIChpbk1haW5SYW5nZSAmJiAhdGhpcy5zZXNzaW9uLiRmcm9tVW5kbykgewogICAgICAgICAgICBpZiAoZGVsdGEuYWN0aW9uID09PSAnaW5zZXJ0JykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3RoZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhpcy5vdGhlcnNbaV07CiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6IG90aGVyUG9zLnJvdywgY29sdW1uOiBvdGhlclBvcy5jb2x1bW4gKyBkaXN0YW5jZUZyb21TdGFydH07CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2MuaW5zZXJ0TWVyZ2VkTGluZXMobmV3UG9zLCBkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09PSAncmVtb3ZlJykgewogICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMub3RoZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUG9zID0gdGhpcy5vdGhlcnNbaV07CiAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1BvcyA9IHtyb3c6IG90aGVyUG9zLnJvdywgY29sdW1uOiBvdGhlclBvcy5jb2x1bW4gKyBkaXN0YW5jZUZyb21TdGFydH07CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2MucmVtb3ZlKG5ldyBSYW5nZShuZXdQb3Mucm93LCBuZXdQb3MuY29sdW1uLCBuZXdQb3Mucm93LCBuZXdQb3MuY29sdW1uIC0gbGVuZ3RoRGlmZikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuJHVwZGF0aW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy51cGRhdGVNYXJrZXJzKCk7CiAgICB9OwogICAgCiAgICB0aGlzLnVwZGF0ZUFuY2hvcnMgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMucG9zLm9uQ2hhbmdlKGRlbHRhKTsKICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5vdGhlcnMubGVuZ3RoOyBpLS07KQogICAgICAgICAgICB0aGlzLm90aGVyc1tpXS5vbkNoYW5nZShkZWx0YSk7CiAgICAgICAgdGhpcy51cGRhdGVNYXJrZXJzKCk7CiAgICB9OwogICAgCiAgICB0aGlzLnVwZGF0ZU1hcmtlcnMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kdXBkYXRpbmcpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIHZhciB1cGRhdGVNYXJrZXIgPSBmdW5jdGlvbihwb3MsIGNsYXNzTmFtZSkgewogICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihwb3MubWFya2VySWQpOwogICAgICAgICAgICBwb3MubWFya2VySWQgPSBzZXNzaW9uLmFkZE1hcmtlcihuZXcgUmFuZ2UocG9zLnJvdywgcG9zLmNvbHVtbiwgcG9zLnJvdywgcG9zLmNvbHVtbitfc2VsZi5sZW5ndGgpLCBjbGFzc05hbWUsIG51bGwsIGZhbHNlKTsKICAgICAgICB9OwogICAgICAgIHVwZGF0ZU1hcmtlcih0aGlzLnBvcywgdGhpcy5tYWluQ2xhc3MpOwogICAgICAgIGZvciAodmFyIGkgPSB0aGlzLm90aGVycy5sZW5ndGg7IGktLTspCiAgICAgICAgICAgIHVwZGF0ZU1hcmtlcih0aGlzLm90aGVyc1tpXSwgdGhpcy5vdGhlcnNDbGFzcyk7CiAgICB9OwoKICAgIHRoaXMub25DdXJzb3JDaGFuZ2UgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgIGlmICh0aGlzLiR1cGRhdGluZyB8fCAhdGhpcy5zZXNzaW9uKSByZXR1cm47CiAgICAgICAgdmFyIHBvcyA9IHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CiAgICAgICAgaWYgKHBvcy5yb3cgPT09IHRoaXMucG9zLnJvdyAmJiBwb3MuY29sdW1uID49IHRoaXMucG9zLmNvbHVtbiAmJiBwb3MuY29sdW1uIDw9IHRoaXMucG9zLmNvbHVtbiArIHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMuc2hvd090aGVyTWFya2VycygpOwogICAgICAgICAgICB0aGlzLl9lbWl0KCJjdXJzb3JFbnRlciIsIGV2ZW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmhpZGVPdGhlck1hcmtlcnMoKTsKICAgICAgICAgICAgdGhpcy5fZW1pdCgiY3Vyc29yTGVhdmUiLCBldmVudCk7CiAgICAgICAgfQogICAgfTsgICAgCiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIodGhpcy5wb3MgJiYgdGhpcy5wb3MubWFya2VySWQpOwogICAgICAgIHRoaXMuaGlkZU90aGVyTWFya2VycygpOwogICAgICAgIHRoaXMuZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uVXBkYXRlKTsKICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNoYW5nZUN1cnNvciIsIHRoaXMuJG9uQ3Vyc29yQ2hhbmdlKTsKICAgICAgICB0aGlzLnNlc3Npb24uc2V0VW5kb1NlbGVjdCh0cnVlKTsKICAgICAgICB0aGlzLnNlc3Npb24gPSBudWxsOwogICAgfTsKICAgIHRoaXMuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuJHVuZG9TdGFja0RlcHRoID09PSAtMSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciB1bmRvTWFuYWdlciA9IHRoaXMuc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpOwogICAgICAgIHZhciB1bmRvc1JlcXVpcmVkID0gKHVuZG9NYW5hZ2VyLiR1bmRvU3RhY2sgfHwgdW5kb01hbmFnZXIuJHVuZG9zdGFjaykubGVuZ3RoIC0gdGhpcy4kdW5kb1N0YWNrRGVwdGg7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bmRvc1JlcXVpcmVkOyBpKyspIHsKICAgICAgICAgICAgdW5kb01hbmFnZXIudW5kbyh0aGlzLnNlc3Npb24sIHRydWUpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25CZWZvcmUpCiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb24uZnJvbUpTT04odGhpcy5zZWxlY3Rpb25CZWZvcmUpOwogICAgfTsKfSkuY2FsbChQbGFjZUhvbGRlci5wcm90b3R5cGUpOwoKCmV4cG9ydHMuUGxhY2VIb2xkZXIgPSBQbGFjZUhvbGRlcjsKfSk7CgpkZWZpbmUoImFjZS9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL3VzZXJhZ2VudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBldmVudCA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudCIpOwp2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwpmdW5jdGlvbiBpc1NhbWVQb2ludChwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgPT0gcDIucm93ICYmIHAxLmNvbHVtbiA9PSBwMi5jb2x1bW47Cn0KCmZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKICAgIHZhciBldiA9IGUuZG9tRXZlbnQ7CiAgICB2YXIgYWx0ID0gZXYuYWx0S2V5OwogICAgdmFyIHNoaWZ0ID0gZXYuc2hpZnRLZXk7CiAgICB2YXIgY3RybCA9IGV2LmN0cmxLZXk7CiAgICB2YXIgYWNjZWwgPSBlLmdldEFjY2VsS2V5KCk7CiAgICB2YXIgYnV0dG9uID0gZS5nZXRCdXR0b24oKTsKICAgIAogICAgaWYgKGN0cmwgJiYgdXNlcmFnZW50LmlzTWFjKQogICAgICAgIGJ1dHRvbiA9IGV2LmJ1dHRvbjsKCiAgICBpZiAoZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUgJiYgYnV0dG9uID09IDIpIHsKICAgICAgICBlLmVkaXRvci50ZXh0SW5wdXQub25Db250ZXh0TWVudShlLmRvbUV2ZW50KTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGlmICghY3RybCAmJiAhYWx0ICYmICFhY2NlbCkgewogICAgICAgIGlmIChidXR0b24gPT09IDAgJiYgZS5lZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGUpCiAgICAgICAgICAgIGUuZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAKICAgIGlmIChidXR0b24gIT09IDApCiAgICAgICAgcmV0dXJuOwoKICAgIHZhciBlZGl0b3IgPSBlLmVkaXRvcjsKICAgIHZhciBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0aW9uOwogICAgdmFyIGlzTXVsdGlTZWxlY3QgPSBlZGl0b3IuaW5NdWx0aVNlbGVjdE1vZGU7CiAgICB2YXIgcG9zID0gZS5nZXREb2N1bWVudFBvc2l0aW9uKCk7CiAgICB2YXIgY3Vyc29yID0gc2VsZWN0aW9uLmdldEN1cnNvcigpOwogICAgdmFyIGluU2VsZWN0aW9uID0gZS5pblNlbGVjdGlvbigpIHx8IChzZWxlY3Rpb24uaXNFbXB0eSgpICYmIGlzU2FtZVBvaW50KHBvcywgY3Vyc29yKSk7CgogICAgdmFyIG1vdXNlWCA9IGUueCwgbW91c2VZID0gZS55OwogICAgdmFyIG9uTW91c2VTZWxlY3Rpb24gPSBmdW5jdGlvbihlKSB7CiAgICAgICAgbW91c2VYID0gZS5jbGllbnRYOwogICAgICAgIG1vdXNlWSA9IGUuY2xpZW50WTsKICAgIH07CiAgICAKICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247CiAgICB2YXIgc2NyZWVuQW5jaG9yID0gZWRpdG9yLnJlbmRlcmVyLnBpeGVsVG9TY3JlZW5Db29yZGluYXRlcyhtb3VzZVgsIG1vdXNlWSk7CiAgICB2YXIgc2NyZWVuQ3Vyc29yID0gc2NyZWVuQW5jaG9yOwogICAgCiAgICB2YXIgc2VsZWN0aW9uTW9kZTsKICAgIGlmIChlZGl0b3IuJG1vdXNlSGFuZGxlci4kZW5hYmxlSnVtcFRvRGVmKSB7CiAgICAgICAgaWYgKGN0cmwgJiYgYWx0IHx8IGFjY2VsICYmIGFsdCkKICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9IHNoaWZ0ID8gImJsb2NrIiA6ICJhZGQiOwogICAgICAgIGVsc2UgaWYgKGFsdCAmJiBlZGl0b3IuJGJsb2NrU2VsZWN0RW5hYmxlZCkKICAgICAgICAgICAgc2VsZWN0aW9uTW9kZSA9ICJibG9jayI7CiAgICB9IGVsc2UgewogICAgICAgIGlmIChhY2NlbCAmJiAhYWx0KSB7CiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGUgPSAiYWRkIjsKICAgICAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0ICYmIHNoaWZ0KQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAoYWx0ICYmIGVkaXRvci4kYmxvY2tTZWxlY3RFbmFibGVkKSB7CiAgICAgICAgICAgIHNlbGVjdGlvbk1vZGUgPSAiYmxvY2siOwogICAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHNlbGVjdGlvbk1vZGUgJiYgdXNlcmFnZW50LmlzTWFjICYmIGV2LmN0cmxLZXkpIHsKICAgICAgICBlZGl0b3IuJG1vdXNlSGFuZGxlci5jYW5jZWxDb250ZXh0TWVudSgpOwogICAgfQoKICAgIGlmIChzZWxlY3Rpb25Nb2RlID09ICJhZGQiKSB7CiAgICAgICAgaWYgKCFpc011bHRpU2VsZWN0ICYmIGluU2VsZWN0aW9uKQogICAgICAgICAgICByZXR1cm47IC8vIGRyYWdnaW5nCgogICAgICAgIGlmICghaXNNdWx0aVNlbGVjdCkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CiAgICAgICAgICAgIGVkaXRvci5hZGRTZWxlY3Rpb25NYXJrZXIocmFuZ2UpOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9sZFJhbmdlID0gc2VsZWN0aW9uLnJhbmdlTGlzdC5yYW5nZUF0UG9pbnQocG9zKTsKICAgICAgICAKICAgICAgICBlZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7CiAgICAgICAgCiAgICAgICAgaWYgKHNoaWZ0KSB7CiAgICAgICAgICAgIG9sZFJhbmdlID0gbnVsbDsKICAgICAgICAgICAgcmFuZ2UgPSBzZWxlY3Rpb24ucmFuZ2VzWzBdIHx8IHJhbmdlOwogICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VyKHJhbmdlKTsKICAgICAgICB9CiAgICAgICAgZWRpdG9yLm9uY2UoIm1vdXNldXAiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHRtcFNlbCA9IHNlbGVjdGlvbi50b09yaWVudGVkUmFuZ2UoKTsKCiAgICAgICAgICAgIGlmIChvbGRSYW5nZSAmJiB0bXBTZWwuaXNFbXB0eSgpICYmIGlzU2FtZVBvaW50KG9sZFJhbmdlLmN1cnNvciwgdG1wU2VsLmN1cnNvcikpCiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG1wU2VsLmN1cnNvcik7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHNoaWZ0KSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnN1YnN0cmFjdFBvaW50KHJhbmdlLmN1cnNvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlKSB7CiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcihyYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0bXBTZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7CiAgICAgICAgfSk7CgogICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09ICJibG9jayIpIHsKICAgICAgICBlLnN0b3AoKTsKICAgICAgICBlZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7ICAgICAgICAKICAgICAgICB2YXIgaW5pdGlhbFJhbmdlOwogICAgICAgIHZhciByZWN0U2VsID0gW107CiAgICAgICAgdmFyIGJsb2NrU2VsZWN0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBuZXdDdXJzb3IgPSBlZGl0b3IucmVuZGVyZXIucGl4ZWxUb1NjcmVlbkNvb3JkaW5hdGVzKG1vdXNlWCwgbW91c2VZKTsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IHNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKG5ld0N1cnNvci5yb3csIG5ld0N1cnNvci5jb2x1bW4sIG5ld0N1cnNvci5vZmZzZXRYKTsKCiAgICAgICAgICAgIGlmIChpc1NhbWVQb2ludChzY3JlZW5DdXJzb3IsIG5ld0N1cnNvcikgJiYgaXNTYW1lUG9pbnQoY3Vyc29yLCBzZWxlY3Rpb24ubGVhZCkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNjcmVlbkN1cnNvciA9IG5ld0N1cnNvcjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24oY3Vyc29yKTsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KCk7CgogICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTsKICAgICAgICAgICAgcmVjdFNlbCA9IHNlbGVjdGlvbi5yZWN0YW5ndWxhclJhbmdlQmxvY2soc2NyZWVuQ3Vyc29yLCBzY3JlZW5BbmNob3IpOwogICAgICAgICAgICBpZiAoZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uICYmIHJlY3RTZWwubGVuZ3RoID09IDEgJiYgcmVjdFNlbFswXS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICByZWN0U2VsWzBdID0gZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGNsaWNrU2VsZWN0aW9uLmNsb25lKCk7CiAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaChlZGl0b3IuYWRkU2VsZWN0aW9uTWFya2VyLCBlZGl0b3IpOwogICAgICAgICAgICBlZGl0b3IudXBkYXRlU2VsZWN0aW9uTWFya2VycygpOwogICAgICAgIH07CiAgICAgICAgaWYgKGlzTXVsdGlTZWxlY3QgJiYgIWFjY2VsKSB7CiAgICAgICAgICAgIHNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKCk7CiAgICAgICAgfSBlbHNlIGlmICghaXNNdWx0aVNlbGVjdCAmJiBhY2NlbCkgewogICAgICAgICAgICBpbml0aWFsUmFuZ2UgPSBzZWxlY3Rpb24udG9PcmllbnRlZFJhbmdlKCk7CiAgICAgICAgICAgIGVkaXRvci5hZGRTZWxlY3Rpb25NYXJrZXIoaW5pdGlhbFJhbmdlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHNoaWZ0KQogICAgICAgICAgICBzY3JlZW5BbmNob3IgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihzZWxlY3Rpb24ubGVhZCk7ICAgICAgICAgICAgCiAgICAgICAgZWxzZQogICAgICAgICAgICBzZWxlY3Rpb24ubW92ZVRvUG9zaXRpb24ocG9zKTsKICAgICAgICAKICAgICAgICBzY3JlZW5DdXJzb3IgPSB7cm93OiAtMSwgY29sdW1uOiAtMX07CgogICAgICAgIHZhciBvbk1vdXNlU2VsZWN0aW9uRW5kID0gZnVuY3Rpb24oZSkgewogICAgICAgICAgICBibG9ja1NlbGVjdCgpOwogICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpOwogICAgICAgICAgICBlZGl0b3IucmVtb3ZlU2VsZWN0aW9uTWFya2VycyhyZWN0U2VsKTsKICAgICAgICAgICAgaWYgKCFyZWN0U2VsLmxlbmd0aCkKICAgICAgICAgICAgICAgIHJlY3RTZWwgPSBbc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpXTsKICAgICAgICAgICAgaWYgKGluaXRpYWxSYW5nZSkgewogICAgICAgICAgICAgICAgZWRpdG9yLnJlbW92ZVNlbGVjdGlvbk1hcmtlcihpbml0aWFsUmFuZ2UpOwogICAgICAgICAgICAgICAgc2VsZWN0aW9uLnRvU2luZ2xlUmFuZ2UoaW5pdGlhbFJhbmdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlY3RTZWwubGVuZ3RoOyBpKyspCiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmVjdFNlbFtpXSk7CiAgICAgICAgICAgIGVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZmFsc2U7CiAgICAgICAgICAgIGVkaXRvci4kbW91c2VIYW5kbGVyLiRjbGlja1NlbGVjdGlvbiA9IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgdmFyIG9uU2VsZWN0aW9uSW50ZXJ2YWwgPSBibG9ja1NlbGVjdDsKCiAgICAgICAgZXZlbnQuY2FwdHVyZShlZGl0b3IuY29udGFpbmVyLCBvbk1vdXNlU2VsZWN0aW9uLCBvbk1vdXNlU2VsZWN0aW9uRW5kKTsKICAgICAgICB2YXIgdGltZXJJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge29uU2VsZWN0aW9uSW50ZXJ2YWwoKTt9LCAyMCk7CgogICAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB9Cn0KCgpleHBvcnRzLm9uTW91c2VEb3duID0gb25Nb3VzZURvd247Cgp9KTsKCmRlZmluZSgiYWNlL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CmV4cG9ydHMuZGVmYXVsdENvbW1hbmRzID0gW3sKICAgIG5hbWU6ICJhZGRDdXJzb3JBYm92ZSIsCiAgICBkZXNjcmlwdGlvbjogIkFkZCBjdXJzb3IgYWJvdmUiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlTGluZXMoLTEpOyB9LAogICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVVwIiwgbWFjOiAiQ3RybC1BbHQtVXAifSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJhZGRDdXJzb3JCZWxvdyIsCiAgICBkZXNjcmlwdGlvbjogIkFkZCBjdXJzb3IgYmVsb3ciLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlTGluZXMoMSk7IH0sCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtRG93biIsIG1hYzogIkN0cmwtQWx0LURvd24ifSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJhZGRDdXJzb3JBYm92ZVNraXBDdXJyZW50IiwKICAgIGRlc2NyaXB0aW9uOiAiQWRkIGN1cnNvciBhYm92ZSAoc2tpcCBjdXJyZW50KSIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmVMaW5lcygtMSwgdHJ1ZSk7IH0sCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtVXAiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1VcCJ9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImFkZEN1cnNvckJlbG93U2tpcEN1cnJlbnQiLAogICAgZGVzY3JpcHRpb246ICJBZGQgY3Vyc29yIGJlbG93IChza2lwIGN1cnJlbnQpIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZUxpbmVzKDEsIHRydWUpOyB9LAogICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVNoaWZ0LURvd24iLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1Eb3duIn0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAic2VsZWN0TW9yZUJlZm9yZSIsCiAgICBkZXNjcmlwdGlvbjogIlNlbGVjdCBtb3JlIGJlZm9yZSIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoLTEpOyB9LAogICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUxlZnQiLCBtYWM6ICJDdHJsLUFsdC1MZWZ0In0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAic2VsZWN0TW9yZUFmdGVyIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IG1vcmUgYWZ0ZXIiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5zZWxlY3RNb3JlKDEpOyB9LAogICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LVJpZ2h0IiwgbWFjOiAiQ3RybC1BbHQtUmlnaHQifSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3ROZXh0QmVmb3JlIiwKICAgIGRlc2NyaXB0aW9uOiAiU2VsZWN0IG5leHQgYmVmb3JlIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3Iuc2VsZWN0TW9yZSgtMSwgdHJ1ZSk7IH0sCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtTGVmdCIsIG1hYzogIkN0cmwtQWx0LVNoaWZ0LUxlZnQifSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJzZWxlY3ROZXh0QWZ0ZXIiLAogICAgZGVzY3JpcHRpb246ICJTZWxlY3QgbmV4dCBhZnRlciIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLnNlbGVjdE1vcmUoMSwgdHJ1ZSk7IH0sCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtU2hpZnQtUmlnaHQiLCBtYWM6ICJDdHJsLUFsdC1TaGlmdC1SaWdodCJ9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogInNwbGl0SW50b0xpbmVzIiwKICAgIGRlc2NyaXB0aW9uOiAiU3BsaXQgaW50byBsaW5lcyIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLm11bHRpU2VsZWN0LnNwbGl0SW50b0xpbmVzKCk7IH0sCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtTCIsIG1hYzogIkN0cmwtQWx0LUwifSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJhbGlnbkN1cnNvcnMiLAogICAgZGVzY3JpcHRpb246ICJBbGlnbiBjdXJzb3JzIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuYWxpZ25DdXJzb3JzKCk7IH0sCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1BbHQtQSIsIG1hYzogIkN0cmwtQWx0LUEifSwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIgp9LCB7CiAgICBuYW1lOiAiZmluZEFsbCIsCiAgICBkZXNjcmlwdGlvbjogIkZpbmQgYWxsIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuZmluZEFsbCgpOyB9LAogICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LUsiLCBtYWM6ICJDdHJsLUFsdC1HIn0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9XTsKZXhwb3J0cy5tdWx0aVNlbGVjdENvbW1hbmRzID0gW3sKICAgIG5hbWU6ICJzaW5nbGVTZWxlY3Rpb24iLAogICAgZGVzY3JpcHRpb246ICJTaW5nbGUgc2VsZWN0aW9uIiwKICAgIGJpbmRLZXk6ICJlc2MiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5leGl0TXVsdGlTZWxlY3RNb2RlKCk7IH0sCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZSwKICAgIGlzQXZhaWxhYmxlOiBmdW5jdGlvbihlZGl0b3IpIHtyZXR1cm4gZWRpdG9yICYmIGVkaXRvci5pbk11bHRpU2VsZWN0TW9kZTt9Cn1dOwoKdmFyIEhhc2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7CmV4cG9ydHMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IEhhc2hIYW5kbGVyKGV4cG9ydHMubXVsdGlTZWxlY3RDb21tYW5kcyk7Cgp9KTsKCmRlZmluZSgiYWNlL211bHRpX3NlbGVjdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZV9saXN0IiwiYWNlL3JhbmdlIiwiYWNlL3NlbGVjdGlvbiIsImFjZS9tb3VzZS9tdWx0aV9zZWxlY3RfaGFuZGxlciIsImFjZS9saWIvZXZlbnQiLCJhY2UvbGliL2xhbmciLCJhY2UvY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIiwiYWNlL3NlYXJjaCIsImFjZS9lZGl0X3Nlc3Npb24iLCJhY2UvZWRpdG9yIiwiYWNlL2NvbmZpZyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBSYW5nZUxpc3QgPSByZXF1aXJlKCIuL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3Q7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKdmFyIFNlbGVjdGlvbiA9IHJlcXVpcmUoIi4vc2VsZWN0aW9uIikuU2VsZWN0aW9uOwp2YXIgb25Nb3VzZURvd24gPSByZXF1aXJlKCIuL21vdXNlL211bHRpX3NlbGVjdF9oYW5kbGVyIikub25Nb3VzZURvd247CnZhciBldmVudCA9IHJlcXVpcmUoIi4vbGliL2V2ZW50Iik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwp2YXIgY29tbWFuZHMgPSByZXF1aXJlKCIuL2NvbW1hbmRzL211bHRpX3NlbGVjdF9jb21tYW5kcyIpOwpleHBvcnRzLmNvbW1hbmRzID0gY29tbWFuZHMuZGVmYXVsdENvbW1hbmRzLmNvbmNhdChjb21tYW5kcy5tdWx0aVNlbGVjdENvbW1hbmRzKTsKdmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4vc2VhcmNoIikuU2VhcmNoOwp2YXIgc2VhcmNoID0gbmV3IFNlYXJjaCgpOwoKZnVuY3Rpb24gZmluZChzZXNzaW9uLCBuZWVkbGUsIGRpcikgewogICAgc2VhcmNoLiRvcHRpb25zLndyYXAgPSB0cnVlOwogICAgc2VhcmNoLiRvcHRpb25zLm5lZWRsZSA9IG5lZWRsZTsKICAgIHNlYXJjaC4kb3B0aW9ucy5iYWNrd2FyZHMgPSBkaXIgPT0gLTE7CiAgICByZXR1cm4gc2VhcmNoLmZpbmQoc2Vzc2lvbik7Cn0KdmFyIEVkaXRTZXNzaW9uID0gcmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5nZXRTZWxlY3Rpb25NYXJrZXJzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHNlbGVjdGlvbk1hcmtlcnM7CiAgICB9Owp9KS5jYWxsKEVkaXRTZXNzaW9uLnByb3RvdHlwZSk7CihmdW5jdGlvbigpIHsKICAgIHRoaXMucmFuZ2VzID0gbnVsbDsKICAgIHRoaXMucmFuZ2VMaXN0ID0gbnVsbDsKICAgIHRoaXMuYWRkUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSwgJGJsb2NrQ2hhbmdlRXZlbnRzKSB7CiAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBpZiAoIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgJiYgdGhpcy5yYW5nZUNvdW50ID09PSAwKSB7CiAgICAgICAgICAgIHZhciBvbGRSYW5nZSA9IHRoaXMudG9PcmllbnRlZFJhbmdlKCk7CiAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChvbGRSYW5nZSk7CiAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LmFkZChyYW5nZSk7CiAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlTGlzdC5yYW5nZXMubGVuZ3RoICE9IDIpIHsKICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpOwogICAgICAgICAgICAgICAgcmV0dXJuICRibG9ja0NoYW5nZUV2ZW50cyB8fCB0aGlzLmZyb21PcmllbnRlZFJhbmdlKHJhbmdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5yZW1vdmVBbGwoKTsKICAgICAgICAgICAgdGhpcy5yYW5nZUxpc3QuYWRkKG9sZFJhbmdlKTsKICAgICAgICAgICAgdGhpcy4kb25BZGRSYW5nZShvbGRSYW5nZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXJhbmdlLmN1cnNvcikKICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gcmFuZ2UuZW5kOwoKICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LmFkZChyYW5nZSk7CgogICAgICAgIHRoaXMuJG9uQWRkUmFuZ2UocmFuZ2UpOwoKICAgICAgICBpZiAocmVtb3ZlZC5sZW5ndGgpCiAgICAgICAgICAgIHRoaXMuJG9uUmVtb3ZlUmFuZ2UocmVtb3ZlZCk7CgogICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPiAxICYmICF0aGlzLmluTXVsdGlTZWxlY3RNb2RlKSB7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgibXVsdGlTZWxlY3QiKTsKICAgICAgICAgICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kdW5kb1NlbGVjdCA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5hdHRhY2godGhpcy5zZXNzaW9uKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYmxvY2tDaGFuZ2VFdmVudHMgfHwgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7CiAgICB9OwoKICAgIHRoaXMudG9TaW5nbGVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmFuZ2UgPSByYW5nZSB8fCB0aGlzLnJhbmdlc1swXTsKICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMucmFuZ2VMaXN0LnJlbW92ZUFsbCgpOwogICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5nZShyZW1vdmVkKTsKCiAgICAgICAgcmFuZ2UgJiYgdGhpcy5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZSk7CiAgICB9OwogICAgdGhpcy5zdWJzdHJhY3RQb2ludCA9IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5yYW5nZUxpc3Quc3Vic3RyYWN0UG9pbnQocG9zKTsKICAgICAgICBpZiAocmVtb3ZlZCkgewogICAgICAgICAgICB0aGlzLiRvblJlbW92ZVJhbmdlKHJlbW92ZWQpOwogICAgICAgICAgICByZXR1cm4gcmVtb3ZlZFswXTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5tZXJnZU92ZXJsYXBwaW5nUmFuZ2VzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnJhbmdlTGlzdC5tZXJnZSgpOwogICAgICAgIGlmIChyZW1vdmVkLmxlbmd0aCkKICAgICAgICAgICAgdGhpcy4kb25SZW1vdmVSYW5nZShyZW1vdmVkKTsKICAgIH07CgogICAgdGhpcy4kb25BZGRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdGhpcy5yYW5nZUNvdW50ID0gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmxlbmd0aDsKICAgICAgICB0aGlzLnJhbmdlcy51bnNoaWZ0KHJhbmdlKTsKICAgICAgICB0aGlzLl9zaWduYWwoImFkZFJhbmdlIiwge3JhbmdlOiByYW5nZX0pOwogICAgfTsKCiAgICB0aGlzLiRvblJlbW92ZVJhbmdlID0gZnVuY3Rpb24ocmVtb3ZlZCkgewogICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5sZW5ndGg7CiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA9PSAxICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlcy5wb3AoKTsKICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGxhc3RSYW5nZSk7CiAgICAgICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IDA7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gcmVtb3ZlZC5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMucmFuZ2VzLmluZGV4T2YocmVtb3ZlZFtpXSk7CiAgICAgICAgICAgIHRoaXMucmFuZ2VzLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLl9zaWduYWwoInJlbW92ZVJhbmdlIiwge3JhbmdlczogcmVtb3ZlZH0pOwoKICAgICAgICBpZiAodGhpcy5yYW5nZUNvdW50ID09PSAwICYmIHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUpIHsKICAgICAgICAgICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IGZhbHNlOwogICAgICAgICAgICB0aGlzLl9zaWduYWwoInNpbmdsZVNlbGVjdCIpOwogICAgICAgICAgICB0aGlzLnNlc3Npb24uJHVuZG9TZWxlY3QgPSB0cnVlOwogICAgICAgICAgICB0aGlzLnJhbmdlTGlzdC5kZXRhY2godGhpcy5zZXNzaW9uKTsKICAgICAgICB9CgogICAgICAgIGxhc3RSYW5nZSA9IGxhc3RSYW5nZSB8fCB0aGlzLnJhbmdlc1swXTsKICAgICAgICBpZiAobGFzdFJhbmdlICYmICFsYXN0UmFuZ2UuaXNFcXVhbCh0aGlzLmdldFJhbmdlKCkpKQogICAgICAgICAgICB0aGlzLmZyb21PcmllbnRlZFJhbmdlKGxhc3RSYW5nZSk7CiAgICB9OwogICAgdGhpcy4kaW5pdFJhbmdlTGlzdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnJhbmdlTGlzdCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLnJhbmdlTGlzdCA9IG5ldyBSYW5nZUxpc3QoKTsKICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOwogICAgICAgIHRoaXMucmFuZ2VDb3VudCA9IDA7CiAgICB9OwogICAgdGhpcy5nZXRBbGxSYW5nZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5yYW5nZUNvdW50ID8gdGhpcy5yYW5nZUxpc3QucmFuZ2VzLmNvbmNhdCgpIDogW3RoaXMuZ2V0UmFuZ2UoKV07CiAgICB9OwoKICAgIHRoaXMuc3BsaXRJbnRvTGluZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKHRoaXMucmFuZ2VDb3VudCA+IDEpIHsKICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VMaXN0LnJhbmdlczsKICAgICAgICAgICAgdmFyIGxhc3RSYW5nZSA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV07CiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2VzWzBdLnN0YXJ0LCBsYXN0UmFuZ2UuZW5kKTsKCiAgICAgICAgICAgIHRoaXMudG9TaW5nbGVSYW5nZSgpOwogICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlLCBsYXN0UmFuZ2UuY3Vyc29yID09IGxhc3RSYW5nZS5zdGFydCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5nZXRSYW5nZSgpOwogICAgICAgICAgICB2YXIgaXNCYWNrd2FyZHMgPSB0aGlzLmlzQmFja3dhcmRzKCk7CiAgICAgICAgICAgIHZhciBzdGFydFJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgIGlmIChzdGFydFJvdyA9PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGlmIChpc0JhY2t3YXJkcykKICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSByYW5nZS5lbmQsIGVuZCA9IHJhbmdlLnN0YXJ0OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHJhbmdlLnN0YXJ0LCBlbmQgPSByYW5nZS5lbmQ7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2UoUmFuZ2UuZnJvbVBvaW50cyhlbmQsIGVuZCkpOwogICAgICAgICAgICAgICAgdGhpcy5hZGRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBzdGFydCkpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmVjdFNlbCA9IFtdOwogICAgICAgICAgICB2YXIgciA9IHRoaXMuZ2V0TGluZVJhbmdlKHN0YXJ0Um93LCB0cnVlKTsKICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByYW5nZS5zdGFydC5jb2x1bW47CiAgICAgICAgICAgIHJlY3RTZWwucHVzaChyKTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyArIDE7IGkgPCBlbmRSb3c7IGkrKykKICAgICAgICAgICAgICAgIHJlY3RTZWwucHVzaCh0aGlzLmdldExpbmVSYW5nZShpLCB0cnVlKSk7CgogICAgICAgICAgICByID0gdGhpcy5nZXRMaW5lUmFuZ2UoZW5kUm93LCB0cnVlKTsKICAgICAgICAgICAgci5lbmQuY29sdW1uID0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgICAgICAgICAgcmVjdFNlbC5wdXNoKHIpOwoKICAgICAgICAgICAgcmVjdFNlbC5mb3JFYWNoKHRoaXMuYWRkUmFuZ2UsIHRoaXMpOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnRvZ2dsZUJsb2NrU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzLnJhbmdlQ291bnQgPiAxKSB7CiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlTGlzdC5yYW5nZXM7CiAgICAgICAgICAgIHZhciBsYXN0UmFuZ2UgPSByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdOwogICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHJhbmdlc1swXS5zdGFydCwgbGFzdFJhbmdlLmVuZCk7CgogICAgICAgICAgICB0aGlzLnRvU2luZ2xlUmFuZ2UoKTsKICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25SYW5nZShyYW5nZSwgbGFzdFJhbmdlLmN1cnNvciA9PSBsYXN0UmFuZ2Uuc3RhcnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHRoaXMuY3Vyc29yKTsKICAgICAgICAgICAgdmFyIGFuY2hvciA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5hbmNob3IpOwoKICAgICAgICAgICAgdmFyIHJlY3RTZWwgPSB0aGlzLnJlY3Rhbmd1bGFyUmFuZ2VCbG9jayhjdXJzb3IsIGFuY2hvcik7CiAgICAgICAgICAgIHJlY3RTZWwuZm9yRWFjaCh0aGlzLmFkZFJhbmdlLCB0aGlzKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5yZWN0YW5ndWxhclJhbmdlQmxvY2sgPSBmdW5jdGlvbihzY3JlZW5DdXJzb3IsIHNjcmVlbkFuY2hvciwgaW5jbHVkZUVtcHR5TGluZXMpIHsKICAgICAgICB2YXIgcmVjdFNlbCA9IFtdOwoKICAgICAgICB2YXIgeEJhY2t3YXJkcyA9IHNjcmVlbkN1cnNvci5jb2x1bW4gPCBzY3JlZW5BbmNob3IuY29sdW1uOwogICAgICAgIGlmICh4QmFja3dhcmRzKSB7CiAgICAgICAgICAgIHZhciBzdGFydENvbHVtbiA9IHNjcmVlbkN1cnNvci5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzY3JlZW5BbmNob3IuY29sdW1uOwogICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXRYID0gc2NyZWVuQ3Vyc29yLm9mZnNldFg7CiAgICAgICAgICAgIHZhciBlbmRPZmZzZXRYID0gc2NyZWVuQW5jaG9yLm9mZnNldFg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gc2NyZWVuQW5jaG9yLmNvbHVtbjsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNjcmVlbkN1cnNvci5jb2x1bW47CiAgICAgICAgICAgIHZhciBzdGFydE9mZnNldFggPSBzY3JlZW5BbmNob3Iub2Zmc2V0WDsKICAgICAgICAgICAgdmFyIGVuZE9mZnNldFggPSBzY3JlZW5DdXJzb3Iub2Zmc2V0WDsKICAgICAgICB9CgogICAgICAgIHZhciB5QmFja3dhcmRzID0gc2NyZWVuQ3Vyc29yLnJvdyA8IHNjcmVlbkFuY2hvci5yb3c7CiAgICAgICAgaWYgKHlCYWNrd2FyZHMpIHsKICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQ3Vyc29yLnJvdzsKICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNjcmVlbkFuY2hvci5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHN0YXJ0Um93ID0gc2NyZWVuQW5jaG9yLnJvdzsKICAgICAgICAgICAgdmFyIGVuZFJvdyA9IHNjcmVlbkN1cnNvci5yb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhcnRDb2x1bW4gPCAwKQogICAgICAgICAgICBzdGFydENvbHVtbiA9IDA7CiAgICAgICAgaWYgKHN0YXJ0Um93IDwgMCkKICAgICAgICAgICAgc3RhcnRSb3cgPSAwOwoKICAgICAgICBpZiAoc3RhcnRSb3cgPT0gZW5kUm93KQogICAgICAgICAgICBpbmNsdWRlRW1wdHlMaW5lcyA9IHRydWU7CgogICAgICAgIHZhciBkb2NFbmQ7CiAgICAgICAgZm9yICh2YXIgcm93ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7CiAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoCiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgc3RhcnRDb2x1bW4sIHN0YXJ0T2Zmc2V0WCksCiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgZW5kQ29sdW1uLCBlbmRPZmZzZXRYKQogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZG9jRW5kICYmIGlzU2FtZVBvaW50KHJhbmdlLmVuZCwgZG9jRW5kKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRvY0VuZCA9IHJhbmdlLmVuZDsKICAgICAgICAgICAgfQogICAgICAgICAgICByYW5nZS5jdXJzb3IgPSB4QmFja3dhcmRzID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7CiAgICAgICAgICAgIHJlY3RTZWwucHVzaChyYW5nZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoeUJhY2t3YXJkcykKICAgICAgICAgICAgcmVjdFNlbC5yZXZlcnNlKCk7CgogICAgICAgIGlmICghaW5jbHVkZUVtcHR5TGluZXMpIHsKICAgICAgICAgICAgdmFyIGVuZCA9IHJlY3RTZWwubGVuZ3RoIC0gMTsKICAgICAgICAgICAgd2hpbGUgKHJlY3RTZWxbZW5kXS5pc0VtcHR5KCkgJiYgZW5kID4gMCkKICAgICAgICAgICAgICAgIGVuZC0tOwogICAgICAgICAgICBpZiAoZW5kID4gMCkgewogICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgIHdoaWxlIChyZWN0U2VsW3N0YXJ0XS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpID0gZW5kOyBpID49IHN0YXJ0OyBpLS0pIHsKICAgICAgICAgICAgICAgIGlmIChyZWN0U2VsW2ldLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICAgICByZWN0U2VsLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlY3RTZWw7CiAgICB9Owp9KS5jYWxsKFNlbGVjdGlvbi5wcm90b3R5cGUpOwp2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi9lZGl0b3IiKS5FZGl0b3I7CihmdW5jdGlvbigpIHsKICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOwogICAgfTsKICAgIHRoaXMuYWRkU2VsZWN0aW9uTWFya2VyID0gZnVuY3Rpb24ob3JpZW50ZWRSYW5nZSkgewogICAgICAgIGlmICghb3JpZW50ZWRSYW5nZS5jdXJzb3IpCiAgICAgICAgICAgIG9yaWVudGVkUmFuZ2UuY3Vyc29yID0gb3JpZW50ZWRSYW5nZS5lbmQ7CgogICAgICAgIHZhciBzdHlsZSA9IHRoaXMuZ2V0U2VsZWN0aW9uU3R5bGUoKTsKICAgICAgICBvcmllbnRlZFJhbmdlLm1hcmtlciA9IHRoaXMuc2Vzc2lvbi5hZGRNYXJrZXIob3JpZW50ZWRSYW5nZSwgImFjZV9zZWxlY3Rpb24iLCBzdHlsZSk7CgogICAgICAgIHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5wdXNoKG9yaWVudGVkUmFuZ2UpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGg7CiAgICAgICAgcmV0dXJuIG9yaWVudGVkUmFuZ2U7CiAgICB9OwogICAgdGhpcy5yZW1vdmVTZWxlY3Rpb25NYXJrZXIgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIGlmICghcmFuZ2UubWFya2VyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU1hcmtlcihyYW5nZS5tYXJrZXIpOwogICAgICAgIHZhciBpbmRleCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5pbmRleE9mKHJhbmdlKTsKICAgICAgICBpZiAoaW5kZXggIT0gLTEpCiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIHRoaXMuc2Vzc2lvbi5zZWxlY3Rpb25NYXJrZXJDb3VudCA9IHRoaXMuc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2Vycy5sZW5ndGg7CiAgICB9OwoKICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uTWFya2VycyA9IGZ1bmN0aW9uKHJhbmdlcykgewogICAgICAgIHZhciBtYXJrZXJMaXN0ID0gdGhpcy5zZXNzaW9uLiRzZWxlY3Rpb25NYXJrZXJzOwogICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSByYW5nZXNbaV07CiAgICAgICAgICAgIGlmICghcmFuZ2UubWFya2VyKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VyKTsKICAgICAgICAgICAgdmFyIGluZGV4ID0gbWFya2VyTGlzdC5pbmRleE9mKHJhbmdlKTsKICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKQogICAgICAgICAgICAgICAgbWFya2VyTGlzdC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIH0KICAgICAgICB0aGlzLnNlc3Npb24uc2VsZWN0aW9uTWFya2VyQ291bnQgPSBtYXJrZXJMaXN0Lmxlbmd0aDsKICAgIH07CgogICAgdGhpcy4kb25BZGRSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB0aGlzLmFkZFNlbGVjdGlvbk1hcmtlcihlLnJhbmdlKTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKICAgIH07CgogICAgdGhpcy4kb25SZW1vdmVSYW5nZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbk1hcmtlcnMoZS5yYW5nZXMpOwogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOwogICAgfTsKCiAgICB0aGlzLiRvbk11bHRpU2VsZWN0ID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmICh0aGlzLmluTXVsdGlTZWxlY3RNb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IHRydWU7CgogICAgICAgIHRoaXMuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIpOwogICAgICAgIHRoaXMua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKICAgICAgICB0aGlzLmNvbW1hbmRzLnNldERlZmF1bHRIYW5kbGVyKCJleGVjIiwgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMpOwoKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKICAgIH07CgogICAgdGhpcy4kb25TaW5nbGVTZWxlY3QgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5tdWx0aVNlbGVjdC5pblZpcnR1YWxNb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5pbk11bHRpU2VsZWN0TW9kZSA9IGZhbHNlOwoKICAgICAgICB0aGlzLnVuc2V0U3R5bGUoImFjZV9tdWx0aXNlbGVjdCIpOwogICAgICAgIHRoaXMua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIoY29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKCiAgICAgICAgdGhpcy5jb21tYW5kcy5yZW1vdmVEZWZhdWx0SGFuZGxlcigiZXhlYyIsIHRoaXMuJG9uTXVsdGlTZWxlY3RFeGVjKTsKICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwogICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKICAgICAgICB0aGlzLl9lbWl0KCJjaGFuZ2VTZWxlY3Rpb24iKTsKICAgIH07CgogICAgdGhpcy4kb25NdWx0aVNlbGVjdEV4ZWMgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGNvbW1hbmQgPSBlLmNvbW1hbmQ7CiAgICAgICAgdmFyIGVkaXRvciA9IGUuZWRpdG9yOwogICAgICAgIGlmICghZWRpdG9yLm11bHRpU2VsZWN0KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKCFjb21tYW5kLm11bHRpU2VsZWN0QWN0aW9uKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBjb21tYW5kLmV4ZWMoZWRpdG9yLCBlLmFyZ3MgfHwge30pOwogICAgICAgICAgICBlZGl0b3IubXVsdGlTZWxlY3QuYWRkUmFuZ2UoZWRpdG9yLm11bHRpU2VsZWN0LnRvT3JpZW50ZWRSYW5nZSgpKTsKICAgICAgICAgICAgZWRpdG9yLm11bHRpU2VsZWN0Lm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24gPT0gImZvckVhY2giKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGVkaXRvci5mb3JFYWNoU2VsZWN0aW9uKGNvbW1hbmQsIGUuYXJncyk7CiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLm11bHRpU2VsZWN0QWN0aW9uID09ICJmb3JFYWNoTGluZSIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gZWRpdG9yLmZvckVhY2hTZWxlY3Rpb24oY29tbWFuZCwgZS5hcmdzLCB0cnVlKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQubXVsdGlTZWxlY3RBY3Rpb24gPT0gInNpbmdsZSIpIHsKICAgICAgICAgICAgZWRpdG9yLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKICAgICAgICAgICAgcmVzdWx0ID0gY29tbWFuZC5leGVjKGVkaXRvciwgZS5hcmdzIHx8IHt9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgPSBjb21tYW5kLm11bHRpU2VsZWN0QWN0aW9uKGVkaXRvciwgZS5hcmdzIHx8IHt9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07IAogICAgdGhpcy5mb3JFYWNoU2VsZWN0aW9uID0gZnVuY3Rpb24oY21kLCBhcmdzLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBrZWVwT3JkZXIgPSBvcHRpb25zICYmIG9wdGlvbnMua2VlcE9yZGVyOwogICAgICAgIHZhciAkYnlMaW5lcyA9IG9wdGlvbnMgPT0gdHJ1ZSB8fCBvcHRpb25zICYmIG9wdGlvbnMuJGJ5TGluZXM7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247CiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uOwogICAgICAgIHZhciByYW5nZUxpc3QgPSBzZWxlY3Rpb24ucmFuZ2VMaXN0OwogICAgICAgIHZhciByYW5nZXMgPSAoa2VlcE9yZGVyID8gc2VsZWN0aW9uIDogcmFuZ2VMaXN0KS5yYW5nZXM7CiAgICAgICAgdmFyIHJlc3VsdDsKICAgICAgICAKICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiBjbWQuZXhlYyA/IGNtZC5leGVjKHRoaXMsIGFyZ3MgfHwge30pIDogY21kKHRoaXMsIGFyZ3MgfHwge30pOwogICAgICAgIAogICAgICAgIHZhciByZWcgPSBzZWxlY3Rpb24uX2V2ZW50UmVnaXN0cnk7CiAgICAgICAgc2VsZWN0aW9uLl9ldmVudFJlZ2lzdHJ5ID0ge307CgogICAgICAgIHZhciB0bXBTZWwgPSBuZXcgU2VsZWN0aW9uKHNlc3Npb24pOwogICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7CiAgICAgICAgZm9yICh2YXIgaSA9IHJhbmdlcy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgaWYgKCRieUxpbmVzKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoaSA+IDAgJiYgcmFuZ2VzW2ldLnN0YXJ0LnJvdyA9PSByYW5nZXNbaSAtIDFdLmVuZC5yb3cpCiAgICAgICAgICAgICAgICAgICAgaS0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRtcFNlbC5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZXNbaV0pOwogICAgICAgICAgICB0bXBTZWwuaW5kZXggPSBpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlc3Npb24uc2VsZWN0aW9uID0gdG1wU2VsOwogICAgICAgICAgICB2YXIgY21kUmVzdWx0ID0gY21kLmV4ZWMgPyBjbWQuZXhlYyh0aGlzLCBhcmdzIHx8IHt9KSA6IGNtZCh0aGlzLCBhcmdzIHx8IHt9KTsKICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgY21kUmVzdWx0ICE9PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgICByZXN1bHQgPSBjbWRSZXN1bHQ7CiAgICAgICAgICAgIHRtcFNlbC50b09yaWVudGVkUmFuZ2UocmFuZ2VzW2ldKTsKICAgICAgICB9CiAgICAgICAgdG1wU2VsLmRldGFjaCgpOwoKICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlc3Npb24uc2VsZWN0aW9uID0gc2VsZWN0aW9uOwogICAgICAgIHRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IGZhbHNlOwogICAgICAgIHNlbGVjdGlvbi5fZXZlbnRSZWdpc3RyeSA9IHJlZzsKICAgICAgICBzZWxlY3Rpb24ubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpOwogICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VzWzBdKQogICAgICAgICAgICBzZWxlY3Rpb24uZnJvbU9yaWVudGVkUmFuZ2Uoc2VsZWN0aW9uLnJhbmdlc1swXSk7CiAgICAgICAgCiAgICAgICAgdmFyIGFuaW0gPSB0aGlzLnJlbmRlcmVyLiRzY3JvbGxBbmltYXRpb247CiAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZSgpOwogICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgICBpZiAoYW5pbSAmJiBhbmltLmZyb20gPT0gYW5pbS50bykKICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hbmltYXRlU2Nyb2xsaW5nKGFuaW0uZnJvbSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICB0aGlzLmV4aXRNdWx0aVNlbGVjdE1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgfHwgdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC50b1NpbmdsZVJhbmdlKCk7CiAgICB9OwoKICAgIHRoaXMuZ2V0U2VsZWN0ZWRUZXh0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHRleHQgPSAiIjsKICAgICAgICBpZiAodGhpcy5pbk11bHRpU2VsZWN0TW9kZSAmJiAhdGhpcy5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKSB7CiAgICAgICAgICAgIHZhciByYW5nZXMgPSB0aGlzLm11bHRpU2VsZWN0LnJhbmdlTGlzdC5yYW5nZXM7CiAgICAgICAgICAgIHZhciBidWYgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGJ1Zi5wdXNoKHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2VzW2ldKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG5sID0gdGhpcy5zZXNzaW9uLmdldERvY3VtZW50KCkuZ2V0TmV3TGluZUNoYXJhY3RlcigpOwogICAgICAgICAgICB0ZXh0ID0gYnVmLmpvaW4obmwpOwogICAgICAgICAgICBpZiAodGV4dC5sZW5ndGggPT0gKGJ1Zi5sZW5ndGggLSAxKSAqIG5sLmxlbmd0aCkKICAgICAgICAgICAgICAgIHRleHQgPSAiIjsKICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdGV4dCA9IHRoaXMuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodGhpcy5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRleHQ7CiAgICB9OwogICAgCiAgICB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlID0gZnVuY3Rpb24oZSwgYW5jaG9yKSB7CiAgICAgICAgaWYgKHRoaXMuaW5NdWx0aVNlbGVjdE1vZGUgJiYgIXRoaXMuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLm11bHRpU2VsZWN0LnJhbmdlc1swXTsKICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3QuaXNFbXB0eSgpICYmIGFuY2hvciA9PSB0aGlzLm11bHRpU2VsZWN0LmFuY2hvcikKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIHBvcyA9IGFuY2hvciA9PSB0aGlzLm11bHRpU2VsZWN0LmFuY2hvcgogICAgICAgICAgICAgICAgPyByYW5nZS5jdXJzb3IgPT0gcmFuZ2Uuc3RhcnQgPyByYW5nZS5lbmQgOiByYW5nZS5zdGFydAogICAgICAgICAgICAgICAgOiByYW5nZS5jdXJzb3I7CiAgICAgICAgICAgIGlmIChwb3Mucm93ICE9IGFuY2hvci5yb3cgCiAgICAgICAgICAgICAgICB8fCB0aGlzLnNlc3Npb24uJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQocG9zLnJvdywgcG9zLmNvbHVtbikuY29sdW1uICE9IGFuY2hvci5jb2x1bW4pCiAgICAgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LnRvU2luZ2xlUmFuZ2UodGhpcy5tdWx0aVNlbGVjdC50b09yaWVudGVkUmFuZ2UoKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QubWVyZ2VPdmVybGFwcGluZ1JhbmdlcygpOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmZpbmRBbGwgPSBmdW5jdGlvbihuZWVkbGUsIG9wdGlvbnMsIGFkZGl0aXZlKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgb3B0aW9ucy5uZWVkbGUgPSBuZWVkbGUgfHwgb3B0aW9ucy5uZWVkbGU7CiAgICAgICAgaWYgKG9wdGlvbnMubmVlZGxlID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkKICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3Rpb24uZ2V0V29yZFJhbmdlKCkKICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3Rpb24uZ2V0UmFuZ2UoKTsKICAgICAgICAgICAgb3B0aW9ucy5uZWVkbGUgPSB0aGlzLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICB9ICAgIAogICAgICAgIHRoaXMuJHNlYXJjaC5zZXQob3B0aW9ucyk7CiAgICAgICAgCiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuJHNlYXJjaC5maW5kQWxsKHRoaXMuc2Vzc2lvbik7CiAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMubXVsdGlTZWxlY3Q7CgogICAgICAgIGlmICghYWRkaXRpdmUpCiAgICAgICAgICAgIHNlbGVjdGlvbi50b1NpbmdsZVJhbmdlKHJhbmdlc1swXSk7CgogICAgICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07ICkKICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlc1tpXSwgdHJ1ZSk7CiAgICAgICAgaWYgKHJhbmdlICYmIHNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VBdFBvaW50KHJhbmdlLnN0YXJ0KSkKICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlLCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gcmFuZ2VzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLnNlbGVjdE1vcmVMaW5lcyA9IGZ1bmN0aW9uKGRpciwgc2tpcCkgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnRvT3JpZW50ZWRSYW5nZSgpOwogICAgICAgIHZhciBpc0JhY2t3YXJkcyA9IHJhbmdlLmN1cnNvciA9PSByYW5nZS5lbmQ7CgogICAgICAgIHZhciBzY3JlZW5MZWFkID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihyYW5nZS5jdXJzb3IpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbikKICAgICAgICAgICAgc2NyZWVuTGVhZC5jb2x1bW4gPSB0aGlzLnNlbGVjdGlvbi4kZGVzaXJlZENvbHVtbjsKCiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlbkxlYWQucm93ICsgZGlyLCBzY3JlZW5MZWFkLmNvbHVtbik7CgogICAgICAgIGlmICghcmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBzY3JlZW5BbmNob3IgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKGlzQmFja3dhcmRzID8gcmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnQpOwogICAgICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5zZXNzaW9uLnNjcmVlblRvRG9jdW1lbnRQb3NpdGlvbihzY3JlZW5BbmNob3Iucm93ICsgZGlyLCBzY3JlZW5BbmNob3IuY29sdW1uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgYW5jaG9yID0gbGVhZDsKICAgICAgICB9CgogICAgICAgIGlmIChpc0JhY2t3YXJkcykgewogICAgICAgICAgICB2YXIgbmV3UmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKGxlYWQsIGFuY2hvcik7CiAgICAgICAgICAgIG5ld1JhbmdlLmN1cnNvciA9IG5ld1JhbmdlLnN0YXJ0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBuZXdSYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMoYW5jaG9yLCBsZWFkKTsKICAgICAgICAgICAgbmV3UmFuZ2UuY3Vyc29yID0gbmV3UmFuZ2UuZW5kOwogICAgICAgIH0KCiAgICAgICAgbmV3UmFuZ2UuZGVzaXJlZENvbHVtbiA9IHNjcmVlbkxlYWQuY29sdW1uOwogICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaW5NdWx0aVNlbGVjdE1vZGUpIHsKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChza2lwKQogICAgICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gcmFuZ2UuY3Vyc29yOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpOwogICAgICAgIGlmICh0b1JlbW92ZSkKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc3Vic3RyYWN0UG9pbnQodG9SZW1vdmUpOwogICAgfTsKICAgIHRoaXMudHJhbnNwb3NlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKGRpcikgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0OwogICAgICAgIHZhciBhbGwgPSBzZWwucmFuZ2VzOwoKICAgICAgICBmb3IgKHZhciBpID0gYWxsLmxlbmd0aDsgaS0tOyApIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gYWxsW2ldOwogICAgICAgICAgICBpZiAocmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICB2YXIgdG1wID0gc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ID0gdG1wLnN0YXJ0LnJvdzsKICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiA9IHRtcC5zdGFydC5jb2x1bW47CiAgICAgICAgICAgICAgICByYW5nZS5lbmQucm93ID0gdG1wLmVuZC5yb3c7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gdG1wLmVuZC5jb2x1bW47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc2VsLm1lcmdlT3ZlcmxhcHBpbmdSYW5nZXMoKTsKCiAgICAgICAgdmFyIHdvcmRzID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IGFsbC5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTsKICAgICAgICAgICAgd29yZHMudW5zaGlmdChzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSkpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRpciA8IDApCiAgICAgICAgICAgIHdvcmRzLnVuc2hpZnQod29yZHMucG9wKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgd29yZHMucHVzaCh3b3Jkcy5zaGlmdCgpKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IGFsbC5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgIHZhciByYW5nZSA9IGFsbFtpXTsKICAgICAgICAgICAgdmFyIHRtcCA9IHJhbmdlLmNsb25lKCk7CiAgICAgICAgICAgIHNlc3Npb24ucmVwbGFjZShyYW5nZSwgd29yZHNbaV0pOwogICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgPSB0bXAuc3RhcnQucm93OwogICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSB0bXAuc3RhcnQuY29sdW1uOwogICAgICAgIH0KICAgICAgICBzZWwuZnJvbU9yaWVudGVkUmFuZ2Uoc2VsLnJhbmdlc1swXSk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RNb3JlID0gZnVuY3Rpb24oZGlyLCBza2lwLCBzdG9wQXRGaXJzdCkgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5zZXNzaW9uOwogICAgICAgIHZhciBzZWwgPSBzZXNzaW9uLm11bHRpU2VsZWN0OwoKICAgICAgICB2YXIgcmFuZ2UgPSBzZWwudG9PcmllbnRlZFJhbmdlKCk7CiAgICAgICAgaWYgKHJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICByYW5nZSA9IHNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgcmFuZ2UuY3Vyc29yID0gZGlyID09IC0xID8gcmFuZ2Uuc3RhcnQgOiByYW5nZS5lbmQ7CiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QuYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgICAgICBpZiAoc3RvcEF0Rmlyc3QpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBuZWVkbGUgPSBzZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CgogICAgICAgIHZhciBuZXdSYW5nZSA9IGZpbmQoc2Vzc2lvbiwgbmVlZGxlLCBkaXIpOwogICAgICAgIGlmIChuZXdSYW5nZSkgewogICAgICAgICAgICBuZXdSYW5nZS5jdXJzb3IgPSBkaXIgPT0gLTEgPyBuZXdSYW5nZS5zdGFydCA6IG5ld1JhbmdlLmVuZDsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnVuZm9sZChuZXdSYW5nZSk7CiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QuYWRkUmFuZ2UobmV3UmFuZ2UpOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIDAuNSk7CiAgICAgICAgfQogICAgICAgIGlmIChza2lwKQogICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0LnN1YnN0cmFjdFBvaW50KHJhbmdlLmN1cnNvcik7CiAgICB9OwogICAgdGhpcy5hbGlnbkN1cnNvcnMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICB2YXIgc2VsID0gc2Vzc2lvbi5tdWx0aVNlbGVjdDsKICAgICAgICB2YXIgcmFuZ2VzID0gc2VsLnJhbmdlczsKICAgICAgICB2YXIgcm93ID0gLTE7CiAgICAgICAgdmFyIHNhbWVSb3dSYW5nZXMgPSByYW5nZXMuZmlsdGVyKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgaWYgKHIuY3Vyc29yLnJvdyA9PSByb3cpCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgcm93ID0gci5jdXJzb3Iucm93OwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCB8fCBzYW1lUm93UmFuZ2VzLmxlbmd0aCA9PSByYW5nZXMubGVuZ3RoIC0gMSkgewogICAgICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5nZXRSYW5nZSgpOwogICAgICAgICAgICB2YXIgZnIgPSByYW5nZS5zdGFydC5yb3csIGxyID0gcmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgdmFyIGd1ZXNzUmFuZ2UgPSBmciA9PSBscjsKICAgICAgICAgICAgaWYgKGd1ZXNzUmFuZ2UpIHsKICAgICAgICAgICAgICAgIHZhciBtYXggPSB0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICB2YXIgbGluZTsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gdGhpcy5zZXNzaW9uLmdldExpbmUobHIpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoL1s9Ol0vLnRlc3QobGluZSkgJiYgKytsciA8IG1heCk7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5lKGZyKTsKICAgICAgICAgICAgICAgIH0gd2hpbGUgKC9bPTpdLy50ZXN0KGxpbmUpICYmIC0tZnIgPiAwKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKGZyIDwgMCkgZnIgPSAwOwogICAgICAgICAgICAgICAgaWYgKGxyID49IG1heCkgbHIgPSBtYXggLSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBsaW5lcyA9IHRoaXMuc2Vzc2lvbi5yZW1vdmVGdWxsTGluZXMoZnIsIGxyKTsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLiRyZUFsaWduVGV4dChsaW5lcywgZ3Vlc3NSYW5nZSk7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnQoe3JvdzogZnIsIGNvbHVtbjogMH0sIGxpbmVzLmpvaW4oIlxuIikgKyAiXG4iKTsKICAgICAgICAgICAgaWYgKCFndWVzc1JhbmdlKSB7CiAgICAgICAgICAgICAgICByYW5nZS5zdGFydC5jb2x1bW4gPSAwOwogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2FtZVJvd1Jhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgICAgIHNlbC5zdWJzdHJhY3RQb2ludChyLmN1cnNvcik7CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdmFyIG1heENvbCA9IDA7CiAgICAgICAgICAgIHZhciBtaW5TcGFjZSA9IEluZmluaXR5OwogICAgICAgICAgICB2YXIgc3BhY2VPZmZzZXRzID0gcmFuZ2VzLm1hcChmdW5jdGlvbihyKSB7CiAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yOwogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHNwYWNlT2Zmc2V0ID0gbGluZS5zdWJzdHIocC5jb2x1bW4pLnNlYXJjaCgvXFMvZyk7CiAgICAgICAgICAgICAgICBpZiAoc3BhY2VPZmZzZXQgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgc3BhY2VPZmZzZXQgPSAwOwoKICAgICAgICAgICAgICAgIGlmIChwLmNvbHVtbiA+IG1heENvbCkKICAgICAgICAgICAgICAgICAgICBtYXhDb2wgPSBwLmNvbHVtbjsKICAgICAgICAgICAgICAgIGlmIChzcGFjZU9mZnNldCA8IG1pblNwYWNlKQogICAgICAgICAgICAgICAgICAgIG1pblNwYWNlID0gc3BhY2VPZmZzZXQ7CiAgICAgICAgICAgICAgICByZXR1cm4gc3BhY2VPZmZzZXQ7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByYW5nZXMuZm9yRWFjaChmdW5jdGlvbihyLCBpKSB7CiAgICAgICAgICAgICAgICB2YXIgcCA9IHIuY3Vyc29yOwogICAgICAgICAgICAgICAgdmFyIGwgPSBtYXhDb2wgLSBwLmNvbHVtbjsKICAgICAgICAgICAgICAgIHZhciBkID0gc3BhY2VPZmZzZXRzW2ldIC0gbWluU3BhY2U7CiAgICAgICAgICAgICAgICBpZiAobCA+IGQpCiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5pbnNlcnQocCwgbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCBsIC0gZCkpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKG5ldyBSYW5nZShwLnJvdywgcC5jb2x1bW4sIHAucm93LCBwLmNvbHVtbiAtIGwgKyBkKSk7CgogICAgICAgICAgICAgICAgci5zdGFydC5jb2x1bW4gPSByLmVuZC5jb2x1bW4gPSBtYXhDb2w7CiAgICAgICAgICAgICAgICByLnN0YXJ0LnJvdyA9IHIuZW5kLnJvdyA9IHAucm93OwogICAgICAgICAgICAgICAgci5jdXJzb3IgPSByLmVuZDsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHNlbC5mcm9tT3JpZW50ZWRSYW5nZShyYW5nZXNbMF0pOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpOwogICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUJhY2tNYXJrZXJzKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRyZUFsaWduVGV4dCA9IGZ1bmN0aW9uKGxpbmVzLCBmb3JjZUxlZnQpIHsKICAgICAgICB2YXIgaXNMZWZ0QWxpZ25lZCA9IHRydWUsIGlzUmlnaHRBbGlnbmVkID0gdHJ1ZTsKICAgICAgICB2YXIgc3RhcnRXLCB0ZXh0VywgZW5kVzsKCiAgICAgICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICAgIHZhciBtID0gbGluZS5tYXRjaCgvKFxzKikoLio/KShccyopKFs9Ol0uKikvKTsKICAgICAgICAgICAgaWYgKCFtKQogICAgICAgICAgICAgICAgcmV0dXJuIFtsaW5lXTsKCiAgICAgICAgICAgIGlmIChzdGFydFcgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgc3RhcnRXID0gbVsxXS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0ZXh0VyA9IG1bMl0ubGVuZ3RoOwogICAgICAgICAgICAgICAgZW5kVyA9IG1bM10ubGVuZ3RoOwogICAgICAgICAgICAgICAgcmV0dXJuIG07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzdGFydFcgKyB0ZXh0VyArIGVuZFcgIT0gbVsxXS5sZW5ndGggKyBtWzJdLmxlbmd0aCArIG1bM10ubGVuZ3RoKQogICAgICAgICAgICAgICAgaXNSaWdodEFsaWduZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHN0YXJ0VyAhPSBtWzFdLmxlbmd0aCkKICAgICAgICAgICAgICAgIGlzTGVmdEFsaWduZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmIChzdGFydFcgPiBtWzFdLmxlbmd0aCkKICAgICAgICAgICAgICAgIHN0YXJ0VyA9IG1bMV0ubGVuZ3RoOwogICAgICAgICAgICBpZiAodGV4dFcgPCBtWzJdLmxlbmd0aCkKICAgICAgICAgICAgICAgIHRleHRXID0gbVsyXS5sZW5ndGg7CiAgICAgICAgICAgIGlmIChlbmRXID4gbVszXS5sZW5ndGgpCiAgICAgICAgICAgICAgICBlbmRXID0gbVszXS5sZW5ndGg7CgogICAgICAgICAgICByZXR1cm4gbTsKICAgICAgICB9KS5tYXAoZm9yY2VMZWZ0ID8gYWxpZ25MZWZ0IDoKICAgICAgICAgICAgaXNMZWZ0QWxpZ25lZCA/IGlzUmlnaHRBbGlnbmVkID8gYWxpZ25SaWdodCA6IGFsaWduTGVmdCA6IHVuQWxpZ24pOwoKICAgICAgICBmdW5jdGlvbiBzcGFjZXMobikgewogICAgICAgICAgICByZXR1cm4gbGFuZy5zdHJpbmdSZXBlYXQoIiAiLCBuKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGFsaWduTGVmdChtKSB7CiAgICAgICAgICAgIHJldHVybiAhbVsyXSA/IG1bMF0gOiBzcGFjZXMoc3RhcnRXKSArIG1bMl0KICAgICAgICAgICAgICAgICsgc3BhY2VzKHRleHRXIC0gbVsyXS5sZW5ndGggKyBlbmRXKQogICAgICAgICAgICAgICAgKyBtWzRdLnJlcGxhY2UoL14oWz06XSlccysvLCAiJDEgIik7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFsaWduUmlnaHQobSkgewogICAgICAgICAgICByZXR1cm4gIW1bMl0gPyBtWzBdIDogc3BhY2VzKHN0YXJ0VyArIHRleHRXIC0gbVsyXS5sZW5ndGgpICsgbVsyXQogICAgICAgICAgICAgICAgKyBzcGFjZXMoZW5kVykKICAgICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiB1bkFsaWduKG0pIHsKICAgICAgICAgICAgcmV0dXJuICFtWzJdID8gbVswXSA6IHNwYWNlcyhzdGFydFcpICsgbVsyXQogICAgICAgICAgICAgICAgKyBzcGFjZXMoZW5kVykKICAgICAgICAgICAgICAgICsgbVs0XS5yZXBsYWNlKC9eKFs9Ol0pXHMrLywgIiQxICIpOwogICAgICAgIH0KICAgIH07Cn0pLmNhbGwoRWRpdG9yLnByb3RvdHlwZSk7CgoKZnVuY3Rpb24gaXNTYW1lUG9pbnQocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93ID09IHAyLnJvdyAmJiBwMS5jb2x1bW4gPT0gcDIuY29sdW1uOwp9CmV4cG9ydHMub25TZXNzaW9uQ2hhbmdlID0gZnVuY3Rpb24oZSkgewogICAgdmFyIHNlc3Npb24gPSBlLnNlc3Npb247CiAgICBpZiAoc2Vzc2lvbiAmJiAhc2Vzc2lvbi5tdWx0aVNlbGVjdCkgewogICAgICAgIHNlc3Npb24uJHNlbGVjdGlvbk1hcmtlcnMgPSBbXTsKICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi4kaW5pdFJhbmdlTGlzdCgpOwogICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QgPSBzZXNzaW9uLnNlbGVjdGlvbjsKICAgIH0KICAgIHRoaXMubXVsdGlTZWxlY3QgPSBzZXNzaW9uICYmIHNlc3Npb24ubXVsdGlTZWxlY3Q7CgogICAgdmFyIG9sZFNlc3Npb24gPSBlLm9sZFNlc3Npb247CiAgICBpZiAob2xkU2Vzc2lvbikgewogICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3Qub2ZmKCJhZGRSYW5nZSIsIHRoaXMuJG9uQWRkUmFuZ2UpOwogICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3Qub2ZmKCJyZW1vdmVSYW5nZSIsIHRoaXMuJG9uUmVtb3ZlUmFuZ2UpOwogICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3Qub2ZmKCJtdWx0aVNlbGVjdCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpOwogICAgICAgIG9sZFNlc3Npb24ubXVsdGlTZWxlY3Qub2ZmKCJzaW5nbGVTZWxlY3QiLCB0aGlzLiRvblNpbmdsZVNlbGVjdCk7CiAgICAgICAgb2xkU2Vzc2lvbi5tdWx0aVNlbGVjdC5sZWFkLm9mZigiY2hhbmdlIiwgdGhpcy4kY2hlY2tNdWx0aXNlbGVjdENoYW5nZSk7CiAgICAgICAgb2xkU2Vzc2lvbi5tdWx0aVNlbGVjdC5hbmNob3Iub2ZmKCJjaGFuZ2UiLCB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKTsKICAgIH0KCiAgICBpZiAoc2Vzc2lvbikgewogICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oImFkZFJhbmdlIiwgdGhpcy4kb25BZGRSYW5nZSk7CiAgICAgICAgc2Vzc2lvbi5tdWx0aVNlbGVjdC5vbigicmVtb3ZlUmFuZ2UiLCB0aGlzLiRvblJlbW92ZVJhbmdlKTsKICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0Lm9uKCJtdWx0aVNlbGVjdCIsIHRoaXMuJG9uTXVsdGlTZWxlY3QpOwogICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3Qub24oInNpbmdsZVNlbGVjdCIsIHRoaXMuJG9uU2luZ2xlU2VsZWN0KTsKICAgICAgICBzZXNzaW9uLm11bHRpU2VsZWN0LmxlYWQub24oImNoYW5nZSIsIHRoaXMuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UpOwogICAgICAgIHNlc3Npb24ubXVsdGlTZWxlY3QuYW5jaG9yLm9uKCJjaGFuZ2UiLCB0aGlzLiRjaGVja011bHRpc2VsZWN0Q2hhbmdlKTsKICAgIH0KCiAgICBpZiAoc2Vzc2lvbiAmJiB0aGlzLmluTXVsdGlTZWxlY3RNb2RlICE9IHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKSB7CiAgICAgICAgaWYgKHNlc3Npb24uc2VsZWN0aW9uLmluTXVsdGlTZWxlY3RNb2RlKQogICAgICAgICAgICB0aGlzLiRvbk11bHRpU2VsZWN0KCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICB0aGlzLiRvblNpbmdsZVNlbGVjdCgpOwogICAgfQp9OwpmdW5jdGlvbiBNdWx0aVNlbGVjdChlZGl0b3IpIHsKICAgIGlmIChlZGl0b3IuJG11bHRpc2VsZWN0T25TZXNzaW9uQ2hhbmdlKQogICAgICAgIHJldHVybjsKICAgIGVkaXRvci4kb25BZGRSYW5nZSA9IGVkaXRvci4kb25BZGRSYW5nZS5iaW5kKGVkaXRvcik7CiAgICBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2UgPSBlZGl0b3IuJG9uUmVtb3ZlUmFuZ2UuYmluZChlZGl0b3IpOwogICAgZWRpdG9yLiRvbk11bHRpU2VsZWN0ID0gZWRpdG9yLiRvbk11bHRpU2VsZWN0LmJpbmQoZWRpdG9yKTsKICAgIGVkaXRvci4kb25TaW5nbGVTZWxlY3QgPSBlZGl0b3IuJG9uU2luZ2xlU2VsZWN0LmJpbmQoZWRpdG9yKTsKICAgIGVkaXRvci4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UgPSBleHBvcnRzLm9uU2Vzc2lvbkNoYW5nZS5iaW5kKGVkaXRvcik7CiAgICBlZGl0b3IuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UgPSBlZGl0b3IuJGNoZWNrTXVsdGlzZWxlY3RDaGFuZ2UuYmluZChlZGl0b3IpOwoKICAgIGVkaXRvci4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UoZWRpdG9yKTsKICAgIGVkaXRvci5vbigiY2hhbmdlU2Vzc2lvbiIsIGVkaXRvci4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpOwoKICAgIGVkaXRvci5vbigibW91c2Vkb3duIiwgb25Nb3VzZURvd24pOwogICAgZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmRzKGNvbW1hbmRzLmRlZmF1bHRDb21tYW5kcyk7CgogICAgYWRkQWx0Q3Vyc29yTGlzdGVuZXJzKGVkaXRvcik7Cn0KCmZ1bmN0aW9uIGFkZEFsdEN1cnNvckxpc3RlbmVycyhlZGl0b3IpewogICAgaWYgKCFlZGl0b3IudGV4dElucHV0KSByZXR1cm47CiAgICB2YXIgZWwgPSBlZGl0b3IudGV4dElucHV0LmdldEVsZW1lbnQoKTsKICAgIHZhciBhbHRDdXJzb3IgPSBmYWxzZTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKGVsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgYWx0RG93biA9IGUua2V5Q29kZSA9PSAxOCAmJiAhKGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSk7CiAgICAgICAgaWYgKGVkaXRvci4kYmxvY2tTZWxlY3RFbmFibGVkICYmIGFsdERvd24pIHsKICAgICAgICAgICAgaWYgKCFhbHRDdXJzb3IpIHsKICAgICAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRNb3VzZUN1cnNvcigiY3Jvc3NoYWlyIik7CiAgICAgICAgICAgICAgICBhbHRDdXJzb3IgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChhbHRDdXJzb3IpIHsKICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICB9CiAgICB9KTsKCiAgICBldmVudC5hZGRMaXN0ZW5lcihlbCwgImtleXVwIiwgcmVzZXQpOwogICAgZXZlbnQuYWRkTGlzdGVuZXIoZWwsICJibHVyIiwgcmVzZXQpOwogICAgZnVuY3Rpb24gcmVzZXQoZSkgewogICAgICAgIGlmIChhbHRDdXJzb3IpIHsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNldE1vdXNlQ3Vyc29yKCIiKTsKICAgICAgICAgICAgYWx0Q3Vyc29yID0gZmFsc2U7CiAgICAgICAgfQogICAgfQp9CgpleHBvcnRzLk11bHRpU2VsZWN0ID0gTXVsdGlTZWxlY3Q7CgoKcmVxdWlyZSgiLi9jb25maWciKS5kZWZpbmVPcHRpb25zKEVkaXRvci5wcm90b3R5cGUsICJlZGl0b3IiLCB7CiAgICBlbmFibGVNdWx0aXNlbGVjdDogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIE11bHRpU2VsZWN0KHRoaXMpOwogICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uKCJjaGFuZ2VTZXNzaW9uIiwgdGhpcy4kbXVsdGlzZWxlY3RPblNlc3Npb25DaGFuZ2UpOwogICAgICAgICAgICAgICAgdGhpcy5vbigibW91c2Vkb3duIiwgb25Nb3VzZURvd24pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5vZmYoImNoYW5nZVNlc3Npb24iLCB0aGlzLiRtdWx0aXNlbGVjdE9uU2Vzc2lvbkNoYW5nZSk7CiAgICAgICAgICAgICAgICB0aGlzLm9mZigibW91c2Vkb3duIiwgb25Nb3VzZURvd24pOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB2YWx1ZTogdHJ1ZQogICAgfSwKICAgIGVuYWJsZUJsb2NrU2VsZWN0OiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgdGhpcy4kYmxvY2tTZWxlY3RFbmFibGVkID0gdmFsOwogICAgICAgIH0sCiAgICAgICAgdmFsdWU6IHRydWUKICAgIH0KfSk7CgoKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbnVsbDsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBudWxsOwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIGlmICh0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBpZiAoZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiCiAgICAgICAgICAgICAgICAmJiB0aGlzLmZvbGRpbmdTdG9wTWFya2VyCiAgICAgICAgICAgICAgICAmJiB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAiZW5kIjsKICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CgogICAgdGhpcy5pbmRlbnRhdGlvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gY29sdW1uIHx8IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgdmFyIGxldmVsID0gc2Vzc2lvbi5nZXRMaW5lKHJvdykuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxldmVsIDw9IHN0YXJ0TGV2ZWwpIHsKICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIDApOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlICE9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbiArIDF9OwogICAgICAgIHZhciBlbmQgPSBzZXNzaW9uLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYnJhY2tldCwgc3RhcnQsIHR5cGVSZSk7CiAgICAgICAgaWYgKCFlbmQpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIGZ3ID0gc2Vzc2lvbi5mb2xkV2lkZ2V0c1tlbmQucm93XTsKICAgICAgICBpZiAoZncgPT0gbnVsbCkKICAgICAgICAgICAgZncgPSBzZXNzaW9uLmdldEZvbGRXaWRnZXQoZW5kLnJvdyk7CgogICAgICAgIGlmIChmdyA9PSAic3RhcnQiICYmIGVuZC5yb3cgPiBzdGFydC5yb3cpIHsKICAgICAgICAgICAgZW5kLnJvdyAtLTsKICAgICAgICAgICAgZW5kLmNvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmQucm93KS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpOwogICAgfTsKCiAgICB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBicmFja2V0LCByb3csIGNvbHVtbiwgdHlwZVJlKSB7CiAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIHZhciBzdGFydCA9IHNlc3Npb24uJGZpbmRPcGVuaW5nQnJhY2tldChicmFja2V0LCBlbmQpOwoKICAgICAgICBpZiAoIXN0YXJ0KQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHN0YXJ0LmNvbHVtbisrOwogICAgICAgIGVuZC5jb2x1bW4tLTsKCiAgICAgICAgcmV0dXJuICBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCBlbmQpOwogICAgfTsKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS90aGVtZS90ZXh0bWF0ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS10bSI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLXRtIC5hY2VfZ3V0dGVyIHtcCmJhY2tncm91bmQ6ICNmMGYwZjA7XApjb2xvcjogIzMzMztcCn1cCi5hY2UtdG0gLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICNlOGU4ZTg7XAp9XAouYWNlLXRtIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjNkI3MkU2O1wKfVwKLmFjZS10bSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS10bSAuYWNlX2N1cnNvciB7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlLXRtIC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiByZ2IoMTkxLCAxOTEsIDE5MSk7XAp9XAouYWNlLXRtIC5hY2Vfc3RvcmFnZSxcCi5hY2UtdG0gLmFjZV9rZXl3b3JkIHtcCmNvbG9yOiBibHVlO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiByZ2IoMTk3LCA2LCAxMSk7XAp9XAouYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4ge1wKY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XAp9XAouYWNlLXRtIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiByZ2IoODgsIDkyLCAyNDYpO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLXRtIC5hY2VfaW52YWxpZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMCwgMCwgMC4xKTtcCmNvbG9yOiByZWQ7XAp9XAouYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAp9XAouYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6IHJnYig2LCAxNTAsIDE0KTtcCn1cCi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV90eXBlLFwKLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHtcCmNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7XAp9XAouYWNlLXRtIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6IHJnYigxMDQsIDExOCwgMTM1KTtcCn1cCi5hY2UtdG0gLmFjZV9zdHJpbmcge1wKY29sb3I6IHJnYigzLCAxMDYsIDcpO1wKfVwKLmFjZS10bSAuYWNlX2NvbW1lbnQge1wKY29sb3I6IHJnYig3NiwgMTM2LCAxMDcpO1wKfVwKLmFjZS10bSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XApjb2xvcjogcmdiKDAsIDEwMiwgMjU1KTtcCn1cCi5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7XApjb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtcCmNvbG9yOiByZ2IoMCwgMCwgMjA1KTtcCn1cCi5hY2UtdG0gLmFjZV92YXJpYWJsZSB7XApjb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7XAp9XAouYWNlLXRtIC5hY2VfeG1sLXBlIHtcCmNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTtcCn1cCi5hY2UtdG0gLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiAjMDAwMEEyO1wKfVwKLmFjZS10bSAuYWNlX2hlYWRpbmcge1wKY29sb3I6IHJnYigxMiwgNywgMjU1KTtcCn1cCi5hY2UtdG0gLmFjZV9saXN0IHtcCmNvbG9yOnJnYigxODUsIDYsIDE0NCk7XAp9XAouYWNlLXRtIC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOnJnYigwLCAyMiwgMTQyKTtcCn1cCi5hY2UtdG0gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHtcCmNvbG9yOiByZ2IoMjU1LCAwLCAwKVwKfVwKLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7XAp9XAouYWNlLXRtLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggd2hpdGU7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XApiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO1wKfVwKLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCmJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO1wKfVwKLmFjZS10bSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yIDogI2RjZGNkYztcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTtcCn1cCi5hY2UtdG0gLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15O1wKfVwKIjsKZXhwb3J0cy4kaWQgPSAiYWNlL3RoZW1lL3RleHRtYXRlIjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7CgpkZWZpbmUoImFjZS9saW5lX3dpZGdldHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZG9tIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwoKCmZ1bmN0aW9uIExpbmVXaWRnZXRzKHNlc3Npb24pIHsKICAgIHRoaXMuc2Vzc2lvbiA9IHNlc3Npb247CiAgICB0aGlzLnNlc3Npb24ud2lkZ2V0TWFuYWdlciA9IHRoaXM7CiAgICB0aGlzLnNlc3Npb24uZ2V0Um93TGVuZ3RoID0gdGhpcy5nZXRSb3dMZW5ndGg7CiAgICB0aGlzLnNlc3Npb24uJGdldFdpZGdldFNjcmVlbkxlbmd0aCA9IHRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aDsKICAgIHRoaXMudXBkYXRlT25DaGFuZ2UgPSB0aGlzLnVwZGF0ZU9uQ2hhbmdlLmJpbmQodGhpcyk7CiAgICB0aGlzLnJlbmRlcldpZGdldHMgPSB0aGlzLnJlbmRlcldpZGdldHMuYmluZCh0aGlzKTsKICAgIHRoaXMubWVhc3VyZVdpZGdldHMgPSB0aGlzLm1lYXN1cmVXaWRnZXRzLmJpbmQodGhpcyk7CiAgICB0aGlzLnNlc3Npb24uX2NoYW5nZWRXaWRnZXRzID0gW107CiAgICB0aGlzLiRvbkNoYW5nZUVkaXRvciA9IHRoaXMuJG9uQ2hhbmdlRWRpdG9yLmJpbmQodGhpcyk7CiAgICAKICAgIHRoaXMuc2Vzc2lvbi5vbigiY2hhbmdlIiwgdGhpcy51cGRhdGVPbkNoYW5nZSk7CiAgICB0aGlzLnNlc3Npb24ub24oImNoYW5nZUZvbGQiLCB0aGlzLnVwZGF0ZU9uRm9sZCk7CiAgICB0aGlzLnNlc3Npb24ub24oImNoYW5nZUVkaXRvciIsIHRoaXMuJG9uQ2hhbmdlRWRpdG9yKTsKfQoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5nZXRSb3dMZW5ndGggPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICB2YXIgaDsKICAgICAgICBpZiAodGhpcy5saW5lV2lkZ2V0cykKICAgICAgICAgICAgaCA9IHRoaXMubGluZVdpZGdldHNbcm93XSAmJiB0aGlzLmxpbmVXaWRnZXRzW3Jvd10ucm93Q291bnQgfHwgMDsKICAgICAgICBlbHNlIAogICAgICAgICAgICBoID0gMDsKICAgICAgICBpZiAoIXRoaXMuJHVzZVdyYXBNb2RlIHx8ICF0aGlzLiR3cmFwRGF0YVtyb3ddKSB7CiAgICAgICAgICAgIHJldHVybiAxICsgaDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy4kd3JhcERhdGFbcm93XS5sZW5ndGggKyAxICsgaDsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJGdldFdpZGdldFNjcmVlbkxlbmd0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzY3JlZW5Sb3dzID0gMDsKICAgICAgICB0aGlzLmxpbmVXaWRnZXRzLmZvckVhY2goZnVuY3Rpb24odyl7CiAgICAgICAgICAgIGlmICh3ICYmIHcucm93Q291bnQgJiYgIXcuaGlkZGVuKQogICAgICAgICAgICAgICAgc2NyZWVuUm93cyArPSB3LnJvd0NvdW50OwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzY3JlZW5Sb3dzOwogICAgfTsgICAgCiAgICAKICAgIHRoaXMuJG9uQ2hhbmdlRWRpdG9yID0gZnVuY3Rpb24oZSkgewogICAgICAgIHRoaXMuYXR0YWNoKGUuZWRpdG9yKTsKICAgIH07CiAgICAKICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgaWYgKGVkaXRvciAgJiYgZWRpdG9yLndpZGdldE1hbmFnZXIgJiYgZWRpdG9yLndpZGdldE1hbmFnZXIgIT0gdGhpcykKICAgICAgICAgICAgZWRpdG9yLndpZGdldE1hbmFnZXIuZGV0YWNoKCk7CgogICAgICAgIGlmICh0aGlzLmVkaXRvciA9PSBlZGl0b3IpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKICAgICAgICAKICAgICAgICBpZiAoZWRpdG9yKSB7CiAgICAgICAgICAgIGVkaXRvci53aWRnZXRNYW5hZ2VyID0gdGhpczsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9uKCJiZWZvcmVSZW5kZXIiLCB0aGlzLm1lYXN1cmVXaWRnZXRzKTsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9uKCJhZnRlclJlbmRlciIsIHRoaXMucmVuZGVyV2lkZ2V0cyk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBlZGl0b3IgPSB0aGlzLmVkaXRvcjsKICAgICAgICBpZiAoIWVkaXRvcikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIAogICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDsKICAgICAgICBlZGl0b3Iud2lkZ2V0TWFuYWdlciA9IG51bGw7CiAgICAgICAgCiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9mZigiYmVmb3JlUmVuZGVyIiwgdGhpcy5tZWFzdXJlV2lkZ2V0cyk7CiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9mZigiYWZ0ZXJSZW5kZXIiLCB0aGlzLnJlbmRlcldpZGdldHMpOwogICAgICAgIHZhciBsaW5lV2lkZ2V0cyA9IHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0czsKICAgICAgICBsaW5lV2lkZ2V0cyAmJiBsaW5lV2lkZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHcpIHsKICAgICAgICAgICAgaWYgKHcgJiYgdy5lbCAmJiB3LmVsLnBhcmVudE5vZGUpIHsKICAgICAgICAgICAgICAgIHcuX2luRG9jdW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHcuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh3LmVsKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLnVwZGF0ZU9uRm9sZCA9IGZ1bmN0aW9uKGUsIHNlc3Npb24pIHsKICAgICAgICB2YXIgbGluZVdpZGdldHMgPSBzZXNzaW9uLmxpbmVXaWRnZXRzOwogICAgICAgIGlmICghbGluZVdpZGdldHMgfHwgIWUuYWN0aW9uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGZvbGQgPSBlLmRhdGE7CiAgICAgICAgdmFyIHN0YXJ0ID0gZm9sZC5zdGFydC5yb3c7CiAgICAgICAgdmFyIGVuZCA9IGZvbGQuZW5kLnJvdzsKICAgICAgICB2YXIgaGlkZSA9IGUuYWN0aW9uID09ICJhZGQiOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydCArIDE7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgICBpZiAobGluZVdpZGdldHNbaV0pCiAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tpXS5oaWRkZW4gPSBoaWRlOwogICAgICAgIH0KICAgICAgICBpZiAobGluZVdpZGdldHNbZW5kXSkgewogICAgICAgICAgICBpZiAoaGlkZSkgewogICAgICAgICAgICAgICAgaWYgKCFsaW5lV2lkZ2V0c1tzdGFydF0pCiAgICAgICAgICAgICAgICAgICAgbGluZVdpZGdldHNbc3RhcnRdID0gbGluZVdpZGdldHNbZW5kXTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBsaW5lV2lkZ2V0c1tlbmRdLmhpZGRlbiA9IGhpZGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAobGluZVdpZGdldHNbc3RhcnRdID09IGxpbmVXaWRnZXRzW2VuZF0pCiAgICAgICAgICAgICAgICAgICAgbGluZVdpZGdldHNbc3RhcnRdID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgbGluZVdpZGdldHNbZW5kXS5oaWRkZW4gPSBoaWRlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy51cGRhdGVPbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzOwogICAgICAgIGlmICghbGluZVdpZGdldHMpIHJldHVybjsKICAgICAgICAKICAgICAgICB2YXIgc3RhcnRSb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICAgICAgdmFyIGxlbiA9IGRlbHRhLmVuZC5yb3cgLSBzdGFydFJvdzsKCiAgICAgICAgaWYgKGxlbiA9PT0gMCkgewogICAgICAgIH0gZWxzZSBpZiAoZGVsdGEuYWN0aW9uID09ICdyZW1vdmUnKSB7CiAgICAgICAgICAgIHZhciByZW1vdmVkID0gbGluZVdpZGdldHMuc3BsaWNlKHN0YXJ0Um93ICsgMSwgbGVuKTsKICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKGZ1bmN0aW9uKHcpIHsKICAgICAgICAgICAgICAgIHcgJiYgdGhpcy5yZW1vdmVMaW5lV2lkZ2V0KHcpOwogICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgdGhpcy4kdXBkYXRlUm93cygpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7CiAgICAgICAgICAgIGFyZ3MudW5zaGlmdChzdGFydFJvdywgMCk7CiAgICAgICAgICAgIGxpbmVXaWRnZXRzLnNwbGljZS5hcHBseShsaW5lV2lkZ2V0cywgYXJncyk7CiAgICAgICAgICAgIHRoaXMuJHVwZGF0ZVJvd3MoKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLiR1cGRhdGVSb3dzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGxpbmVXaWRnZXRzID0gdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzOwogICAgICAgIGlmICghbGluZVdpZGdldHMpIHJldHVybjsKICAgICAgICB2YXIgbm9XaWRnZXRzID0gdHJ1ZTsKICAgICAgICBsaW5lV2lkZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uKHcsIGkpIHsKICAgICAgICAgICAgaWYgKHcpIHsKICAgICAgICAgICAgICAgIG5vV2lkZ2V0cyA9IGZhbHNlOwogICAgICAgICAgICAgICAgdy5yb3cgPSBpOwogICAgICAgICAgICAgICAgd2hpbGUgKHcuJG9sZFdpZGdldCkgewogICAgICAgICAgICAgICAgICAgIHcuJG9sZFdpZGdldC5yb3cgPSBpOwogICAgICAgICAgICAgICAgICAgIHcgPSB3LiRvbGRXaWRnZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAobm9XaWRnZXRzKQogICAgICAgICAgICB0aGlzLnNlc3Npb24ubGluZVdpZGdldHMgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLmFkZExpbmVXaWRnZXQgPSBmdW5jdGlvbih3KSB7CiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24ubGluZVdpZGdldHMpCiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0cyA9IG5ldyBBcnJheSh0aGlzLnNlc3Npb24uZ2V0TGVuZ3RoKCkpOwogICAgICAgIAogICAgICAgIHZhciBvbGQgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHNbdy5yb3ddOwogICAgICAgIGlmIChvbGQpIHsKICAgICAgICAgICAgdy4kb2xkV2lkZ2V0ID0gb2xkOwogICAgICAgICAgICBpZiAob2xkLmVsICYmIG9sZC5lbC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBvbGQuZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGQuZWwpOwogICAgICAgICAgICAgICAgb2xkLl9pbkRvY3VtZW50ID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1t3LnJvd10gPSB3OwogICAgICAgIAogICAgICAgIHcuc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbjsKICAgICAgICAKICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLmVkaXRvci5yZW5kZXJlcjsKICAgICAgICBpZiAody5odG1sICYmICF3LmVsKSB7CiAgICAgICAgICAgIHcuZWwgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgIHcuZWwuaW5uZXJIVE1MID0gdy5odG1sOwogICAgICAgIH0KICAgICAgICBpZiAody5lbCkgewogICAgICAgICAgICBkb20uYWRkQ3NzQ2xhc3Mody5lbCwgImFjZV9saW5lV2lkZ2V0Q29udGFpbmVyIik7CiAgICAgICAgICAgIHcuZWwuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgICAgICB3LmVsLnN0eWxlLnpJbmRleCA9IDU7CiAgICAgICAgICAgIHJlbmRlcmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh3LmVsKTsKICAgICAgICAgICAgdy5faW5Eb2N1bWVudCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGlmICghdy5jb3Zlckd1dHRlcikgewogICAgICAgICAgICB3LmVsLnN0eWxlLnpJbmRleCA9IDM7CiAgICAgICAgfQogICAgICAgIGlmICh3LnBpeGVsSGVpZ2h0ID09IG51bGwpIHsKICAgICAgICAgICAgdy5waXhlbEhlaWdodCA9IHcuZWwub2Zmc2V0SGVpZ2h0OwogICAgICAgIH0KICAgICAgICBpZiAody5yb3dDb3VudCA9PSBudWxsKSB7CiAgICAgICAgICAgIHcucm93Q291bnQgPSB3LnBpeGVsSGVpZ2h0IC8gcmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGZvbGQgPSB0aGlzLnNlc3Npb24uZ2V0Rm9sZEF0KHcucm93LCAwKTsKICAgICAgICB3LiRmb2xkID0gZm9sZDsKICAgICAgICBpZiAoZm9sZCkgewogICAgICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7CiAgICAgICAgICAgIGlmICh3LnJvdyA9PSBmb2xkLmVuZC5yb3cgJiYgIWxpbmVXaWRnZXRzW2ZvbGQuc3RhcnQucm93XSkKICAgICAgICAgICAgICAgIGxpbmVXaWRnZXRzW2ZvbGQuc3RhcnQucm93XSA9IHc7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHcuaGlkZGVuID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIHRoaXMuc2Vzc2lvbi5fZW1pdCgiY2hhbmdlRm9sZCIsIHtkYXRhOntzdGFydDp7cm93OiB3LnJvd319fSk7CiAgICAgICAgCiAgICAgICAgdGhpcy4kdXBkYXRlUm93cygpOwogICAgICAgIHRoaXMucmVuZGVyV2lkZ2V0cyhudWxsLCByZW5kZXJlcik7CiAgICAgICAgdGhpcy5vbldpZGdldENoYW5nZWQodyk7CiAgICAgICAgcmV0dXJuIHc7CiAgICB9OwogICAgCiAgICB0aGlzLnJlbW92ZUxpbmVXaWRnZXQgPSBmdW5jdGlvbih3KSB7CiAgICAgICAgdy5faW5Eb2N1bWVudCA9IGZhbHNlOwogICAgICAgIHcuc2Vzc2lvbiA9IG51bGw7CiAgICAgICAgaWYgKHcuZWwgJiYgdy5lbC5wYXJlbnROb2RlKQogICAgICAgICAgICB3LmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQody5lbCk7CiAgICAgICAgaWYgKHcuZWRpdG9yICYmIHcuZWRpdG9yLmRlc3Ryb3kpIHRyeSB7CiAgICAgICAgICAgIHcuZWRpdG9yLmRlc3Ryb3koKTsKICAgICAgICB9IGNhdGNoKGUpe30KICAgICAgICBpZiAodGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRzKSB7CiAgICAgICAgICAgIHZhciB3MSA9IHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1t3LnJvd107CiAgICAgICAgICAgIGlmICh3MSA9PSB3KSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubGluZVdpZGdldHNbdy5yb3ddID0gdy4kb2xkV2lkZ2V0OwogICAgICAgICAgICAgICAgaWYgKHcuJG9sZFdpZGdldCkKICAgICAgICAgICAgICAgICAgICB0aGlzLm9uV2lkZ2V0Q2hhbmdlZCh3LiRvbGRXaWRnZXQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgd2hpbGUgKHcxKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHcxLiRvbGRXaWRnZXQgPT0gdykgewogICAgICAgICAgICAgICAgICAgICAgICB3MS4kb2xkV2lkZ2V0ID0gdy4kb2xkV2lkZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdzEgPSB3MS4kb2xkV2lkZ2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuc2Vzc2lvbi5fZW1pdCgiY2hhbmdlRm9sZCIsIHtkYXRhOntzdGFydDp7cm93OiB3LnJvd319fSk7CiAgICAgICAgdGhpcy4kdXBkYXRlUm93cygpOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRXaWRnZXRzQXRSb3cgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICB2YXIgbGluZVdpZGdldHMgPSB0aGlzLnNlc3Npb24ubGluZVdpZGdldHM7CiAgICAgICAgdmFyIHcgPSBsaW5lV2lkZ2V0cyAmJiBsaW5lV2lkZ2V0c1tyb3ddOwogICAgICAgIHZhciBsaXN0ID0gW107CiAgICAgICAgd2hpbGUgKHcpIHsKICAgICAgICAgICAgbGlzdC5wdXNoKHcpOwogICAgICAgICAgICB3ID0gdy4kb2xkV2lkZ2V0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlzdDsKICAgIH07CiAgICAKICAgIHRoaXMub25XaWRnZXRDaGFuZ2VkID0gZnVuY3Rpb24odykgewogICAgICAgIHRoaXMuc2Vzc2lvbi5fY2hhbmdlZFdpZGdldHMucHVzaCh3KTsKICAgICAgICB0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCk7CiAgICB9OwogICAgCiAgICB0aGlzLm1lYXN1cmVXaWRnZXRzID0gZnVuY3Rpb24oZSwgcmVuZGVyZXIpIHsKICAgICAgICB2YXIgY2hhbmdlZFdpZGdldHMgPSB0aGlzLnNlc3Npb24uX2NoYW5nZWRXaWRnZXRzOwogICAgICAgIHZhciBjb25maWcgPSByZW5kZXJlci5sYXllckNvbmZpZzsKICAgICAgICAKICAgICAgICBpZiAoIWNoYW5nZWRXaWRnZXRzIHx8ICFjaGFuZ2VkV2lkZ2V0cy5sZW5ndGgpIHJldHVybjsKICAgICAgICB2YXIgbWluID0gSW5maW5pdHk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFuZ2VkV2lkZ2V0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgdyA9IGNoYW5nZWRXaWRnZXRzW2ldOwogICAgICAgICAgICBpZiAoIXcgfHwgIXcuZWwpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAody5zZXNzaW9uICE9IHRoaXMuc2Vzc2lvbikgY29udGludWU7CiAgICAgICAgICAgIGlmICghdy5faW5Eb2N1bWVudCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0c1t3LnJvd10gIT0gdykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIHcuX2luRG9jdW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgcmVuZGVyZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHcuZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB3LmggPSB3LmVsLm9mZnNldEhlaWdodDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghdy5maXhlZFdpZHRoKSB7CiAgICAgICAgICAgICAgICB3LncgPSB3LmVsLm9mZnNldFdpZHRoOwogICAgICAgICAgICAgICAgdy5zY3JlZW5XaWR0aCA9IE1hdGguY2VpbCh3LncgLyBjb25maWcuY2hhcmFjdGVyV2lkdGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcm93Q291bnQgPSB3LmggLyBjb25maWcubGluZUhlaWdodDsKICAgICAgICAgICAgaWYgKHcuY292ZXJMaW5lKSB7CiAgICAgICAgICAgICAgICByb3dDb3VudCAtPSB0aGlzLnNlc3Npb24uZ2V0Um93TGluZUNvdW50KHcucm93KTsKICAgICAgICAgICAgICAgIGlmIChyb3dDb3VudCA8IDApCiAgICAgICAgICAgICAgICAgICAgcm93Q291bnQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh3LnJvd0NvdW50ICE9IHJvd0NvdW50KSB7CiAgICAgICAgICAgICAgICB3LnJvd0NvdW50ID0gcm93Q291bnQ7CiAgICAgICAgICAgICAgICBpZiAody5yb3cgPCBtaW4pCiAgICAgICAgICAgICAgICAgICAgbWluID0gdy5yb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG1pbiAhPSBJbmZpbml0eSkgewogICAgICAgICAgICB0aGlzLnNlc3Npb24uX2VtaXQoImNoYW5nZUZvbGQiLCB7ZGF0YTp7c3RhcnQ6e3JvdzogbWlufX19KTsKICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmxpbmVXaWRnZXRXaWR0aCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2Vzc2lvbi5fY2hhbmdlZFdpZGdldHMgPSBbXTsKICAgIH07CiAgICAKICAgIHRoaXMucmVuZGVyV2lkZ2V0cyA9IGZ1bmN0aW9uKGUsIHJlbmRlcmVyKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVyQ29uZmlnOwogICAgICAgIHZhciBsaW5lV2lkZ2V0cyA9IHRoaXMuc2Vzc2lvbi5saW5lV2lkZ2V0czsKICAgICAgICBpZiAoIWxpbmVXaWRnZXRzKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGZpcnN0ID0gTWF0aC5taW4odGhpcy5maXJzdFJvdywgY29uZmlnLmZpcnN0Um93KTsKICAgICAgICB2YXIgbGFzdCA9IE1hdGgubWF4KHRoaXMubGFzdFJvdywgY29uZmlnLmxhc3RSb3csIGxpbmVXaWRnZXRzLmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgd2hpbGUgKGZpcnN0ID4gMCAmJiAhbGluZVdpZGdldHNbZmlyc3RdKQogICAgICAgICAgICBmaXJzdC0tOwogICAgICAgIAogICAgICAgIHRoaXMuZmlyc3RSb3cgPSBjb25maWcuZmlyc3RSb3c7CiAgICAgICAgdGhpcy5sYXN0Um93ID0gY29uZmlnLmxhc3RSb3c7CgogICAgICAgIHJlbmRlcmVyLiRjdXJzb3JMYXllci5jb25maWcgPSBjb25maWc7CiAgICAgICAgZm9yICh2YXIgaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewogICAgICAgICAgICB2YXIgdyA9IGxpbmVXaWRnZXRzW2ldOwogICAgICAgICAgICBpZiAoIXcgfHwgIXcuZWwpIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAody5oaWRkZW4pIHsKICAgICAgICAgICAgICAgIHcuZWwuc3R5bGUudG9wID0gLTEwMCAtICh3LnBpeGVsSGVpZ2h0IHx8IDApICsgInB4IjsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdy5faW5Eb2N1bWVudCkgewogICAgICAgICAgICAgICAgdy5faW5Eb2N1bWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICByZW5kZXJlci5jb250YWluZXIuYXBwZW5kQ2hpbGQody5lbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHRvcCA9IHJlbmRlcmVyLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKHtyb3c6IGksIGNvbHVtbjowfSwgdHJ1ZSkudG9wOwogICAgICAgICAgICBpZiAoIXcuY292ZXJMaW5lKQogICAgICAgICAgICAgICAgdG9wICs9IGNvbmZpZy5saW5lSGVpZ2h0ICogdGhpcy5zZXNzaW9uLmdldFJvd0xpbmVDb3VudCh3LnJvdyk7CiAgICAgICAgICAgIHcuZWwuc3R5bGUudG9wID0gdG9wIC0gY29uZmlnLm9mZnNldCArICJweCI7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbGVmdCA9IHcuY292ZXJHdXR0ZXIgPyAwIDogcmVuZGVyZXIuZ3V0dGVyV2lkdGg7CiAgICAgICAgICAgIGlmICghdy5maXhlZFdpZHRoKQogICAgICAgICAgICAgICAgbGVmdCAtPSByZW5kZXJlci5zY3JvbGxMZWZ0OwogICAgICAgICAgICB3LmVsLnN0eWxlLmxlZnQgPSBsZWZ0ICsgInB4IjsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh3LmZ1bGxXaWR0aCAmJiB3LnNjcmVlbldpZHRoKSB7CiAgICAgICAgICAgICAgICB3LmVsLnN0eWxlLm1pbldpZHRoID0gY29uZmlnLndpZHRoICsgMiAqIGNvbmZpZy5wYWRkaW5nICsgInB4IjsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHcuZml4ZWRXaWR0aCkgewogICAgICAgICAgICAgICAgdy5lbC5zdHlsZS5yaWdodCA9IHJlbmRlcmVyLnNjcm9sbEJhci5nZXRXaWR0aCgpICsgInB4IjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHcuZWwuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKfSkuY2FsbChMaW5lV2lkZ2V0cy5wcm90b3R5cGUpOwoKCmV4cG9ydHMuTGluZVdpZGdldHMgPSBMaW5lV2lkZ2V0czsKCn0pOwoKZGVmaW5lKCJhY2UvZXh0L2Vycm9yX21hcmtlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saW5lX3dpZGdldHMiLCJhY2UvbGliL2RvbSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgTGluZVdpZGdldHMgPSByZXF1aXJlKCIuLi9saW5lX3dpZGdldHMiKS5MaW5lV2lkZ2V0czsKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCmZ1bmN0aW9uIGJpbmFyeVNlYXJjaChhcnJheSwgbmVlZGxlLCBjb21wYXJhdG9yKSB7CiAgICB2YXIgZmlyc3QgPSAwOwogICAgdmFyIGxhc3QgPSBhcnJheS5sZW5ndGggLSAxOwoKICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0KSB7CiAgICAgICAgdmFyIG1pZCA9IChmaXJzdCArIGxhc3QpID4+IDE7CiAgICAgICAgdmFyIGMgPSBjb21wYXJhdG9yKG5lZWRsZSwgYXJyYXlbbWlkXSk7CiAgICAgICAgaWYgKGMgPiAwKQogICAgICAgICAgICBmaXJzdCA9IG1pZCArIDE7CiAgICAgICAgZWxzZSBpZiAoYyA8IDApCiAgICAgICAgICAgIGxhc3QgPSBtaWQgLSAxOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIG1pZDsKICAgIH0KICAgIHJldHVybiAtKGZpcnN0ICsgMSk7Cn0KCmZ1bmN0aW9uIGZpbmRBbm5vdGF0aW9ucyhzZXNzaW9uLCByb3csIGRpcikgewogICAgdmFyIGFubm90YXRpb25zID0gc2Vzc2lvbi5nZXRBbm5vdGF0aW9ucygpLnNvcnQoUmFuZ2UuY29tcGFyZVBvaW50cyk7CiAgICBpZiAoIWFubm90YXRpb25zLmxlbmd0aCkKICAgICAgICByZXR1cm47CiAgICAKICAgIHZhciBpID0gYmluYXJ5U2VhcmNoKGFubm90YXRpb25zLCB7cm93OiByb3csIGNvbHVtbjogLTF9LCBSYW5nZS5jb21wYXJlUG9pbnRzKTsKICAgIGlmIChpIDwgMCkKICAgICAgICBpID0gLWkgLSAxOwogICAgCiAgICBpZiAoaSA+PSBhbm5vdGF0aW9ucy5sZW5ndGgpCiAgICAgICAgaSA9IGRpciA+IDAgPyAwIDogYW5ub3RhdGlvbnMubGVuZ3RoIC0gMTsKICAgIGVsc2UgaWYgKGkgPT09IDAgJiYgZGlyIDwgMCkKICAgICAgICBpID0gYW5ub3RhdGlvbnMubGVuZ3RoIC0gMTsKICAgIAogICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTsKICAgIGlmICghYW5ub3RhdGlvbiB8fCAhZGlyKQogICAgICAgIHJldHVybjsKCiAgICBpZiAoYW5ub3RhdGlvbi5yb3cgPT09IHJvdykgewogICAgICAgIGRvIHsKICAgICAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2kgKz0gZGlyXTsKICAgICAgICB9IHdoaWxlIChhbm5vdGF0aW9uICYmIGFubm90YXRpb24ucm93ID09PSByb3cpOwogICAgICAgIGlmICghYW5ub3RhdGlvbikKICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb25zLnNsaWNlKCk7CiAgICB9CiAgICAKICAgIAogICAgdmFyIG1hdGNoZWQgPSBbXTsKICAgIHJvdyA9IGFubm90YXRpb24ucm93OwogICAgZG8gewogICAgICAgIG1hdGNoZWRbZGlyIDwgMCA/ICJ1bnNoaWZ0IiA6ICJwdXNoIl0oYW5ub3RhdGlvbik7CiAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2kgKz0gZGlyXTsKICAgIH0gd2hpbGUgKGFubm90YXRpb24gJiYgYW5ub3RhdGlvbi5yb3cgPT0gcm93KTsKICAgIHJldHVybiBtYXRjaGVkLmxlbmd0aCAmJiBtYXRjaGVkOwp9CgpleHBvcnRzLnNob3dFcnJvck1hcmtlciA9IGZ1bmN0aW9uKGVkaXRvciwgZGlyKSB7CiAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwogICAgaWYgKCFzZXNzaW9uLndpZGdldE1hbmFnZXIpIHsKICAgICAgICBzZXNzaW9uLndpZGdldE1hbmFnZXIgPSBuZXcgTGluZVdpZGdldHMoc2Vzc2lvbik7CiAgICAgICAgc2Vzc2lvbi53aWRnZXRNYW5hZ2VyLmF0dGFjaChlZGl0b3IpOwogICAgfQogICAgCiAgICB2YXIgcG9zID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICB2YXIgcm93ID0gcG9zLnJvdzsKICAgIHZhciBvbGRXaWRnZXQgPSBzZXNzaW9uLndpZGdldE1hbmFnZXIuZ2V0V2lkZ2V0c0F0Um93KHJvdykuZmlsdGVyKGZ1bmN0aW9uKHcpIHsKICAgICAgICByZXR1cm4gdy50eXBlID09ICJlcnJvck1hcmtlciI7CiAgICB9KVswXTsKICAgIGlmIChvbGRXaWRnZXQpIHsKICAgICAgICBvbGRXaWRnZXQuZGVzdHJveSgpOwogICAgfSBlbHNlIHsKICAgICAgICByb3cgLT0gZGlyOwogICAgfQogICAgdmFyIGFubm90YXRpb25zID0gZmluZEFubm90YXRpb25zKHNlc3Npb24sIHJvdywgZGlyKTsKICAgIHZhciBndXR0ZXJBbm5vOwogICAgaWYgKGFubm90YXRpb25zKSB7CiAgICAgICAgdmFyIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1swXTsKICAgICAgICBwb3MuY29sdW1uID0gKGFubm90YXRpb24ucG9zICYmIHR5cGVvZiBhbm5vdGF0aW9uLmNvbHVtbiAhPSAibnVtYmVyIgogICAgICAgICAgICA/IGFubm90YXRpb24ucG9zLnNjCiAgICAgICAgICAgIDogYW5ub3RhdGlvbi5jb2x1bW4pIHx8IDA7CiAgICAgICAgcG9zLnJvdyA9IGFubm90YXRpb24ucm93OwogICAgICAgIGd1dHRlckFubm8gPSBlZGl0b3IucmVuZGVyZXIuJGd1dHRlckxheWVyLiRhbm5vdGF0aW9uc1twb3Mucm93XTsKICAgIH0gZWxzZSBpZiAob2xkV2lkZ2V0KSB7CiAgICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgICBndXR0ZXJBbm5vID0gewogICAgICAgICAgICB0ZXh0OiBbIkxvb2tzIGdvb2QhIl0sCiAgICAgICAgICAgIGNsYXNzTmFtZTogImFjZV9vayIKICAgICAgICB9OwogICAgfQogICAgZWRpdG9yLnNlc3Npb24udW5mb2xkKHBvcy5yb3cpOwogICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpOwogICAgCiAgICB2YXIgdyA9IHsKICAgICAgICByb3c6IHBvcy5yb3csIAogICAgICAgIGZpeGVkV2lkdGg6IHRydWUsCiAgICAgICAgY292ZXJHdXR0ZXI6IHRydWUsCiAgICAgICAgZWw6IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKSwKICAgICAgICB0eXBlOiAiZXJyb3JNYXJrZXIiCiAgICB9OwogICAgdmFyIGVsID0gdy5lbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgdmFyIGFycm93ID0gdy5lbC5hcHBlbmRDaGlsZChkb20uY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgYXJyb3cuY2xhc3NOYW1lID0gImVycm9yX3dpZGdldF9hcnJvdyAiICsgZ3V0dGVyQW5uby5jbGFzc05hbWU7CiAgICAKICAgIHZhciBsZWZ0ID0gZWRpdG9yLnJlbmRlcmVyLiRjdXJzb3JMYXllcgogICAgICAgIC5nZXRQaXhlbFBvc2l0aW9uKHBvcykubGVmdDsKICAgIGFycm93LnN0eWxlLmxlZnQgPSBsZWZ0ICsgZWRpdG9yLnJlbmRlcmVyLmd1dHRlcldpZHRoIC0gNSArICJweCI7CiAgICAKICAgIHcuZWwuY2xhc3NOYW1lID0gImVycm9yX3dpZGdldF93cmFwcGVyIjsKICAgIGVsLmNsYXNzTmFtZSA9ICJlcnJvcl93aWRnZXQgIiArIGd1dHRlckFubm8uY2xhc3NOYW1lOwogICAgZWwuaW5uZXJIVE1MID0gZ3V0dGVyQW5uby50ZXh0LmpvaW4oIjxicj4iKTsKICAgIAogICAgZWwuYXBwZW5kQ2hpbGQoZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgIAogICAgdmFyIGtiID0gZnVuY3Rpb24oXywgaGFzaElkLCBrZXlTdHJpbmcpIHsKICAgICAgICBpZiAoaGFzaElkID09PSAwICYmIChrZXlTdHJpbmcgPT09ICJlc2MiIHx8IGtleVN0cmluZyA9PT0gInJldHVybiIpKSB7CiAgICAgICAgICAgIHcuZGVzdHJveSgpOwogICAgICAgICAgICByZXR1cm4ge2NvbW1hbmQ6ICJudWxsIn07CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdy5kZXN0cm95ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGVkaXRvci4kbW91c2VIYW5kbGVyLmlzTW91c2VQcmVzc2VkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgZWRpdG9yLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKGtiKTsKICAgICAgICBzZXNzaW9uLndpZGdldE1hbmFnZXIucmVtb3ZlTGluZVdpZGdldCh3KTsKICAgICAgICBlZGl0b3Iub2ZmKCJjaGFuZ2VTZWxlY3Rpb24iLCB3LmRlc3Ryb3kpOwogICAgICAgIGVkaXRvci5vZmYoImNoYW5nZVNlc3Npb24iLCB3LmRlc3Ryb3kpOwogICAgICAgIGVkaXRvci5vZmYoIm1vdXNldXAiLCB3LmRlc3Ryb3kpOwogICAgICAgIGVkaXRvci5vZmYoImNoYW5nZSIsIHcuZGVzdHJveSk7CiAgICB9OwogICAgCiAgICBlZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIoa2IpOwogICAgZWRpdG9yLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCB3LmRlc3Ryb3kpOwogICAgZWRpdG9yLm9uKCJjaGFuZ2VTZXNzaW9uIiwgdy5kZXN0cm95KTsKICAgIGVkaXRvci5vbigibW91c2V1cCIsIHcuZGVzdHJveSk7CiAgICBlZGl0b3Iub24oImNoYW5nZSIsIHcuZGVzdHJveSk7CiAgICAKICAgIGVkaXRvci5zZXNzaW9uLndpZGdldE1hbmFnZXIuYWRkTGluZVdpZGdldCh3KTsKICAgIAogICAgdy5lbC5vbm1vdXNlZG93biA9IGVkaXRvci5mb2N1cy5iaW5kKGVkaXRvcik7CiAgICAKICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCAwLjUsIHtib3R0b206IHcuZWwub2Zmc2V0SGVpZ2h0fSk7Cn07CgoKZG9tLmltcG9ydENzc1N0cmluZygiXAogICAgLmVycm9yX3dpZGdldF93cmFwcGVyIHtcCiAgICAgICAgYmFja2dyb3VuZDogaW5oZXJpdDtcCiAgICAgICAgY29sb3I6IGluaGVyaXQ7XAogICAgICAgIGJvcmRlcjpub25lXAogICAgfVwKICAgIC5lcnJvcl93aWRnZXQge1wKICAgICAgICBib3JkZXItdG9wOiBzb2xpZCAycHg7XAogICAgICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDJweDtcCiAgICAgICAgbWFyZ2luOiA1cHggMDtcCiAgICAgICAgcGFkZGluZzogMTBweCA0MHB4O1wKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XAogICAgfVwKICAgIC5lcnJvcl93aWRnZXQuYWNlX2Vycm9yLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9lcnJvcntcCiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZmY1YTVhXAogICAgfVwKICAgIC5lcnJvcl93aWRnZXQuYWNlX3dhcm5pbmcsIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX3dhcm5pbmd7XAogICAgICAgIGJvcmRlci1jb2xvcjogI0YxRDgxN1wKICAgIH1cCiAgICAuZXJyb3Jfd2lkZ2V0LmFjZV9pbmZvLCAuZXJyb3Jfd2lkZ2V0X2Fycm93LmFjZV9pbmZve1wKICAgICAgICBib3JkZXItY29sb3I6ICM1YTVhNWFcCiAgICB9XAogICAgLmVycm9yX3dpZGdldC5hY2Vfb2ssIC5lcnJvcl93aWRnZXRfYXJyb3cuYWNlX29re1wKICAgICAgICBib3JkZXItY29sb3I6ICM1YWFhNWFcCiAgICB9XAogICAgLmVycm9yX3dpZGdldF9hcnJvdyB7XAogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcCiAgICAgICAgYm9yZGVyOiBzb2xpZCA1cHg7XAogICAgICAgIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50IWltcG9ydGFudDtcCiAgICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudCFpbXBvcnRhbnQ7XAogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCFpbXBvcnRhbnQ7XAogICAgICAgIHRvcDogLTVweDtcCiAgICB9XAoiLCAiIik7Cgp9KTsKCmRlZmluZSgiYWNlL2FjZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZml4b2xkYnJvd3NlcnMiLCJhY2UvbGliL2RvbSIsImFjZS9saWIvZXZlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvZWRpdG9yIiwiYWNlL2VkaXRfc2Vzc2lvbiIsImFjZS91bmRvbWFuYWdlciIsImFjZS92aXJ0dWFsX3JlbmRlcmVyIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9wbGFjZWhvbGRlciIsImFjZS9tdWx0aV9zZWxlY3QiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90aGVtZS90ZXh0bWF0ZSIsImFjZS9leHQvZXJyb3JfbWFya2VyIiwiYWNlL2NvbmZpZyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKcmVxdWlyZSgiLi9saWIvZml4b2xkYnJvd3NlcnMiKTsKCnZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi9saWIvZXZlbnQiKTsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwp2YXIgRWRpdFNlc3Npb24gPSByZXF1aXJlKCIuL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uOwp2YXIgVW5kb01hbmFnZXIgPSByZXF1aXJlKCIuL3VuZG9tYW5hZ2VyIikuVW5kb01hbmFnZXI7CnZhciBSZW5kZXJlciA9IHJlcXVpcmUoIi4vdmlydHVhbF9yZW5kZXJlciIpLlZpcnR1YWxSZW5kZXJlcjsKcmVxdWlyZSgiLi93b3JrZXIvd29ya2VyX2NsaWVudCIpOwpyZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpOwpyZXF1aXJlKCIuL3BsYWNlaG9sZGVyIik7CnJlcXVpcmUoIi4vbXVsdGlfc2VsZWN0Iik7CnJlcXVpcmUoIi4vbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIpOwpyZXF1aXJlKCIuL3RoZW1lL3RleHRtYXRlIik7CnJlcXVpcmUoIi4vZXh0L2Vycm9yX21hcmtlciIpOwoKZXhwb3J0cy5jb25maWcgPSByZXF1aXJlKCIuL2NvbmZpZyIpOwpleHBvcnRzLnJlcXVpcmUgPSByZXF1aXJlOwoKaWYgKHR5cGVvZiBkZWZpbmUgPT09ICJmdW5jdGlvbiIpCiAgICBleHBvcnRzLmRlZmluZSA9IGRlZmluZTsKZXhwb3J0cy5lZGl0ID0gZnVuY3Rpb24oZWwsIG9wdGlvbnMpIHsKICAgIGlmICh0eXBlb2YgZWwgPT0gInN0cmluZyIpIHsKICAgICAgICB2YXIgX2lkID0gZWw7CiAgICAgICAgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfaWQpOwogICAgICAgIGlmICghZWwpCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYWNlLmVkaXQgY2FuJ3QgZmluZCBkaXYgIyIgKyBfaWQpOwogICAgfQoKICAgIGlmIChlbCAmJiBlbC5lbnYgJiYgZWwuZW52LmVkaXRvciBpbnN0YW5jZW9mIEVkaXRvcikKICAgICAgICByZXR1cm4gZWwuZW52LmVkaXRvcjsKCiAgICB2YXIgdmFsdWUgPSAiIjsKICAgIGlmIChlbCAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGVsLnRhZ05hbWUpKSB7CiAgICAgICAgdmFyIG9sZE5vZGUgPSBlbDsKICAgICAgICB2YWx1ZSA9IG9sZE5vZGUudmFsdWU7CiAgICAgICAgZWwgPSBkb20uY3JlYXRlRWxlbWVudCgicHJlIik7CiAgICAgICAgb2xkTm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbCwgb2xkTm9kZSk7CiAgICB9IGVsc2UgaWYgKGVsKSB7CiAgICAgICAgdmFsdWUgPSBlbC50ZXh0Q29udGVudDsKICAgICAgICBlbC5pbm5lckhUTUwgPSAiIjsKICAgIH0KCiAgICB2YXIgZG9jID0gZXhwb3J0cy5jcmVhdGVFZGl0U2Vzc2lvbih2YWx1ZSk7CgogICAgdmFyIGVkaXRvciA9IG5ldyBFZGl0b3IobmV3IFJlbmRlcmVyKGVsKSwgZG9jLCBvcHRpb25zKTsKCiAgICB2YXIgZW52ID0gewogICAgICAgIGRvY3VtZW50OiBkb2MsCiAgICAgICAgZWRpdG9yOiBlZGl0b3IsCiAgICAgICAgb25SZXNpemU6IGVkaXRvci5yZXNpemUuYmluZChlZGl0b3IsIG51bGwpCiAgICB9OwogICAgaWYgKG9sZE5vZGUpIGVudi50ZXh0YXJlYSA9IG9sZE5vZGU7CiAgICBldmVudC5hZGRMaXN0ZW5lcih3aW5kb3csICJyZXNpemUiLCBlbnYub25SZXNpemUpOwogICAgZWRpdG9yLm9uKCJkZXN0cm95IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgZXZlbnQucmVtb3ZlTGlzdGVuZXIod2luZG93LCAicmVzaXplIiwgZW52Lm9uUmVzaXplKTsKICAgICAgICBlbnYuZWRpdG9yLmNvbnRhaW5lci5lbnYgPSBudWxsOyAvLyBwcmV2ZW50IG1lbW9yeSBsZWFrIG9uIG9sZCBpZQogICAgfSk7CiAgICBlZGl0b3IuY29udGFpbmVyLmVudiA9IGVkaXRvci5lbnYgPSBlbnY7CiAgICByZXR1cm4gZWRpdG9yOwp9OwpleHBvcnRzLmNyZWF0ZUVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4dCwgbW9kZSkgewogICAgdmFyIGRvYyA9IG5ldyBFZGl0U2Vzc2lvbih0ZXh0LCBtb2RlKTsKICAgIGRvYy5zZXRVbmRvTWFuYWdlcihuZXcgVW5kb01hbmFnZXIoKSk7CiAgICByZXR1cm4gZG9jOwp9OwpleHBvcnRzLlJhbmdlID0gUmFuZ2U7CmV4cG9ydHMuRWRpdG9yID0gRWRpdG9yOwpleHBvcnRzLkVkaXRTZXNzaW9uID0gRWRpdFNlc3Npb247CmV4cG9ydHMuVW5kb01hbmFnZXIgPSBVbmRvTWFuYWdlcjsKZXhwb3J0cy5WaXJ0dWFsUmVuZGVyZXIgPSBSZW5kZXJlcjsKZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5jb25maWcudmVyc2lvbjsKfSk7ICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvYWNlIl0sIGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYSkgewogICAgICAgICAgICAgICAgICAgICAgICBhLmNvbmZpZy5pbml0KHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBhLmRlZmluZSA9IHdpbmRvdy5kZWZpbmU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghd2luZG93LmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmFjZSA9IGE7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGEpIGlmIChhLmhhc093blByb3BlcnR5KGtleSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hY2Vba2V5XSA9IGFba2V5XTsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWNlWyJkZWZhdWx0Il0gPSB3aW5kb3cuYWNlOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdy5hY2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ChangeLog.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MjAxMi4wOS4xNywgVmVyc2lvbiAwLjEuMA0KDQoqIE5ldyBGZWF0dXJlcw0KICAtIE11bHRpcGxlIGN1cnNvcnMgYW5kIHNlbGVjdGlvbnMgKGh0dHBzOi8vYzkuaW8vc2l0ZS9ibG9nLzIwMTIvMDgvYmUtYW4tYXJtZW5pYW4td2Fycmlvci13aXRoLWJsb2NrLXNlbGVjdGlvbi1vbi1zdGVyb2lkcy8pDQogIC0gRm9sZCBidXR0b25zIGRpc3BsYXllZCBpbiB0aGUgZ3V0dGVyDQogIC0gSW5kZW50IEd1aWRlcw0KICAtIENvbXBsZXRlbHkgcmV3b3JrZWQgdmltIG1vZGUgKFNlcmdpIE1hbnNpbGxhKQ0KICAtIEltcHJvdmVkIGVtYWNzIGtleWJpbmRpbmdzDQogIC0gQXV0b2Nsb3Npbmcgb2YgaHRtbCB0YWdzIChkYW55YVBvc3RmYWN0dW0pDQoNCiogMjAgTmV3IGxhbmd1YWdlIG1vZGVzDQogIC0gQ29sZGZ1c2lvbiAoUnVzcykNCiAgLSBEaWZmDQogIC0gR0xTTCAoRWQgTWFja2V5KQ0KICAtIEdvIChEYXZpZGUgU2F1cmlubykNCiAgLSBIYXhlIChKYXNvbiBPJ05laWwpDQogIC0gSmFkZSAoR2FyZW4gVG9yaWtpYW4pDQogIC0ganN4IChTeXUgS2F0bykNCiAgLSBMYVRlWCAoSmFtZXMgQWxsZW4pDQogIC0gTGVzcyAoSm9obiBSb2Vwa2UpDQogIC0gTGlxdWlkIChCZXJuaWUgVGVsbGVzKQ0KICAtIEx1YSAoTGVlIEdhbykNCiAgLSBMdWFQYWdlIChDaG9vbnN0ZXIpDQogIC0gTWFya2Rvd24gKENocmlzIFNwZW5jZXIpDQogIC0gUG9zdGdyZVNRTCAoSm9obiBEZVNvaSkNCiAgLSBQb3dlcnNoZWxsIChKb2huIEthbmUpDQogIC0gU2ggKFJpY2hvIEhlYWxleSkNCiAgLSBTUUwgKEpvbmF0aGFuIENhbWlsZSkNCiAgLSBUY2wgKENyaXN0b3BoIEhvY2hyZWluZXIpDQogIC0gWFF1ZXJ5IChXaWxsaWFtIENhbmRpbGxpb24pDQogIC0gWWFtbCAoTWVnIFNoYXJrZXkpDQoNCiAgKiBMaXZlIHN5bnRheCBjaGVja3MNCiAgLSBmb3IgWFF1ZXJ5IGFuZCBKU09ODQoNCiogTmV3IFRoZW1lcw0KICAtIEFtYmlhbmNlIChJcmFrbGkgR296YWxpc2h2aWxpKQ0KICAtIERyZWFtd2VhdmVyIChBZGFtIEppbWVuZXopDQogIC0gR2l0aHViIChib290c3RyYXBvbmxpbmUpDQogIC0gVG9tbW9ycm93IHRoZW1lcyAoaHR0cHM6Ly9naXRodWIuY29tL2Nocmlza2VtcHNvbi90b21vcnJvdy10aGVtZSkNCiAgLSBYQ29kZQ0KDQoqIE1hbnkgU21hbGwgRW5oYW5jZW1lbnRzIGFuZCBCdWdmaXhlcw0KIA0KMjAxMS4wOC4wMiwgVmVyc2lvbiAwLjIuMA0KDQoqIFNwbGl0IHZpZXcgKEp1bGlhbiBWaWVyZWNrKQ0KICAtIHNwbGl0IGVkaXRvciBhcmVhIGhvcml6b250YWxseSBvciB2ZXJ0aXZhbGx5IHRvIHNob3cgdHdvIGZpbGVzIGF0IHRoZSBzYW1lDQogICAgdGltZQ0KDQoqIENvZGUgRm9sZGluZyAoSnVsaWFuIFZpZXJlY2spDQogIC0gVW5zdHJ1Y3R1cmVkIGNvZGUgZm9sZGluZw0KICAtIFdpbGwgYmUgdGhlIGJhc2lzIGZvciBsYW5ndWFnZSBhd2FyZSBmb2xkaW5nDQoNCiogTW9kZSBiZWhhdmlvdXJzIChDaHJpcyBTcGVuY2VyKQ0KICAtIEFkZHMgbW9kZSBzcGVjaWZpYyBob29rcyB3aGljaCBhbGxvdyB0cmFuc2Zvcm1hdGlvbnMgb2YgZW50ZXJlZCB0ZXh0DQogIC0gQXV0b2Nsb3Npbmcgb2YgYnJhY2VzLCBwYXJhbnRoZXNpcyBhbmQgcXVvdGF0aW9uIG1hcmtzIGluIEMgc3R5bGUgbW9kZXMNCiAgLSBBdXRvY2xvc2luZyBvZiBhbmd1bGFyIGJyYWNrZXRzIGluIFhNTCBzdHlsZSBtb2Rlcw0KDQoqIE5ldyBsYW5ndWFnZSBtb2Rlcw0KICAtIENsb2p1cmUgKENhcmluIE1laWVyKQ0KICAtIEMjIChSb2IgQ29uZXJ5KQ0KICAtIEdyb292eSAoQmVuIFRpbGZvcmQpDQogIC0gU2NhbGEgKEJlbiBUaWxmb3JkKQ0KICAtIEpTT04NCiAgLSBPQ2FtbCAoU2VyZ2kgTWFuc2lsbGEpDQogIC0gUGVybCAoUGFuYWdpb3RpcyBBc3RpdGhhcykNCiAgLSBTQ1NTL1NBU1MgKEFuZHJlYXMgTWFkc2VuKQ0KICAtIFNWRw0KICAtIFRleHRpbGUgKEtlbGxleSB2YW4gRXZlcnQpDQogIC0gU0NBRCAoSmFjb2IgSGFuc3NvbikNCiAgDQoqIExpdmUgc3ludGF4IGNoZWNrcw0KICAtIExpbnQgZm9yIENTUyB1c2luZyBDU1MgTGludCA8aHR0cDovL2Nzc2xpbnQubmV0Lz4NCiAgLSBDb2ZmZWVTY3JpcHQNCg0KKiBOZXcgVGhlbWVzDQogIC0gQ3JpbXNvbiBFZGl0b3IgKGllYnVnZ3kpDQogIC0gTWVyYml2b3JlIChNaWNoYWVsIFNjaHdhcnR6KQ0KICAtIE1lcmJpdm9yZSBzb2Z0IChNaWNoYWVsIFNjaHdhcnR6KQ0KICAtIFNvbGFyaXplZCBkYXJrL2xpZ2h0IDxodHRwOi8vZXRoYW5zY2hvb25vdmVyLmNvbS9zb2xhcml6ZWQ+IChEYXZpZCBBbGFuIEhqZWxsZSkNCiAgLSBWaWJyYW50IEluayAoTWljaGFlbCBTY2h3YXJ0eikNCg0KKiBTbWFsbCBGZWF0dXJlcy9FbmhhbmNlbWVudHMNCiAgLSBMb3RzIG9mIHJlbmRlciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIChIYXJ1dHl1biBBbWlyamFueWFuKQ0KICAtIEltcHJvdmVkIFJ1YnkgaGlnaGxpZ2h0aW5nIChDaHJpcyBXYW5zdHJhdGgsIFRyZW50IE9ncmVuKQ0KICAtIEltcHJvdmVkIFBIUCBoaWdobGlnaHRpbmcgKFRob21hcyBIcnVza2EpDQogIC0gSW1wcm92ZWQgQ1NTIGhpZ2hsaWdodGluZyAoU2VhbiBLZWxsb2dnKQ0KICAtIENsaWNrcyB3aGljaCBjYXVzZSB0aGUgZWRpdG9yIHRvIGJlIGZvY3VzZWQgZG9uJ3QgcmVzZXQgdGhlIHNlbGVjdGlvbg0KICAtIE1ha2UgcGFkZGluZyB0ZXh0IGxheWVyIHNwZWNpZmljIHNvIHRoYXQgcHJpbnQgbWFyZ2luIGFuZCBhY3RpdmUgbGluZQ0KICAgIGhpZ2hsaWdodCBhcmUgbm90IGFmZmVjdGVkIChJcmFrbGkgR296YWxpc2h2aWxpKQ0KICAtIEFkZGVkIHNldEZvbnRTaXplIG1ldGhvZA0KICAtIEltcHJvdmVkIHZpIGtleWJpbmRpbmdzIChUcmVudCBPZ3JlbikNCiAgLSBXaGVuIHVuZm9jdXNlZCBtYWtlIGN1cnNvciB0cmFuc3BhcmVudCBpbnN0ZWFkIG9mIHJlbW92aW5nIGl0IChIYXJ1dHl1biBBbWlyamFueWFuKQ0KICAtIFN1cHBvcnQgZm9yIG1hdGNoaW5nIGdyb3VwcyBpbiB0b2tlbml6ZXIgd2l0aCBhcnJheXMgb2YgdG9rZW5zIChDaHJpcyBTcGVuY2VyKQ0KDQoqIEJ1ZyBmaXhlcw0KICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgbmV3IE9TWCBzY3JvbGwgYmFycw0KICAtIFByb3Blcmx5IGhpZ2hsaWdodCBKYXZhU2NyaXB0IHJlZ2V4cCBsaXRlcmFscw0KICAtIFByb3BlciBoYW5kbGluZyBvZiB1bmljb2RlIGNoYXJhY3RlcnMgaW4gSmF2YVNjcmlwdCBpZGVudGlmaWVycw0KICAtIEZpeCByZW1vdmUgbGluZXMgY29tbWFuZCBvbiBsYXN0IGxpbmUgKEhhcnV0eXVuIEFtaXJqYW55YW4pDQogIC0gRml4IHNjcm9sbCB3aGVlbCBzbHVnZ2lzaG5lc3MgaW4gU2FmYXJpDQogIC0gTWFrZSBrZXlib2FyZCBpbmZyYXN0cnVjdHVyZSByb3V0ZSBrZXlzIGxpa2UgW11eJCB0aGUgcmlnaHQgd2F5IChKdWxpYW4gVmllcmVjaykNCg0KMjAxMS4wMi4xNCwgVmVyc2lvbiAwLjEuNg0KDQoqIEZsb2F0aW5nIEFuY2hvcnMNCiAgLSBBbiBBbmNob3IgaXMgYSBmbG9hdGluZyBwb2ludGVyIGluIHRoZSBkb2N1bWVudC4gDQogIC0gV2hlbmV2ZXIgdGV4dCBpcyBpbnNlcnRlZCBvciBkZWxldGVkIGJlZm9yZSB0aGUgY3Vyc29yLCB0aGUgcG9zaXRpb24gb2YNCiAgICB0aGUgY3Vyc29yIGlzIHVwZGF0ZWQNCiAgLSBVc2VzZCBmb3IgdGhlIGN1cnNvciBhbmQgc2VsZWN0aW9uDQogIC0gQmFzaXMgZm9yIGJvb2ttYXJrcywgbXVsdGlwbGUgY3Vyc29ycyBhbmQgc25pcHBldHMgaW4gdGhlIGZ1dHVyZQ0KKiBFeHRlbnNpdmUgc3VwcG9ydCBmb3IgQ29jb2Egc3R5bGUga2V5YmluZGluZ3Mgb24gdGhlIE1hYyA8aHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL2lzc3Vlcy9jbG9zZWQjaXNzdWUvMTE2L2NvbW1lbnQvNzY3ODAzPg0KKiBOZXcgY29tbWFuZHM6DQogIC0gY2VudGVyIHNlbGVjdGlvbiBpbiB2aWV3cG9ydA0KICAtIHJlbW92ZSB0byBlbmQvc3RhcnQgb2YgbGluZQ0KICAtIHNwbGl0IGxpbmUNCiAgLSB0cmFuc3Bvc2UgbGV0dGVycw0KKiBSZWZhdG9yIG1hcmtlcnMgIA0KICAtIEN1c3RvbSBjb2RlIGNhbiBiZSB1c2VkIHRvIHJlbmRlciBtYXJrZXJzDQogIC0gTWFya2VycyBjYW4gYmUgaW4gZnJvbnQgb3IgYmVoaW5kIHRoZSB0ZXh0DQogIC0gTWFya2VycyBhcmUgbm93IHN0b3JlZCBpbiB0aGUgc2Vzc2lvbiAod2FzIGluIHRoZSByZW5kZXJlcikNCiogTG90cyBvZiBJRTggZml4ZXMgaW5jbHVkaW5nIGNvcHksIGN1dCBhbmQgc2VsZWN0aW9ucw0KKiBVbml0IHRlc3RzIGNhbiBhbHNvIGJlIHJ1biBpbiB0aGUgYnJvd3Nlcg0KICA8aHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL2Jsb2IvbWFzdGVyL2xpYi9hY2UvdGVzdC90ZXN0cy5odG1sPg0KKiBTb2Z0IHdyYXAgY2FuIGFkYXB0IHRvIHRoZSB3aWR0aCBvZiB0aGUgZWRpdG9yIChNaWtlIFJhdGNsaWZmZSwgSm9lIENoZW5nKQ0KKiBBZGQgbWluaW1hbCBub2RlIHNlcnZlciBzZXJ2ZXIuanMgdG8gcnVuIHRoZSBBY2UgZGVtbyBpbiBDaHJvbWUNCiogVGhlIHRvcCBsZXZlbCBlZGl0b3IuaHRtbCBkZW1vIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW5kZXguaHRtbA0KKiBCdWcgZml4ZXMNCiAgLSBGaXhlZCBnb3RvTGluZSB0byBjb25zaWRlciB3cmFwcGVkIGxpbmVzIHdoZW4gY2FsY3VsYXRpbmcgd2hlcmUgdG8gc2Nyb2xsIHRvIChKYW1lcyBBbGxlbikNCiAgLSBGaXhlZCBpc3VlcyB3aGVuIHRoZSBlZGl0b3Igd2FzIHNjcm9sbGVkIGluIHRoZSB3ZWIgcGFnZSAoRXJpYyBBbGxhbSkNCiAgLSBIaWdobGlnaHRpbmcgb2YgUHl0aG9uIHN0cmluZyBsaXRlcmFscw0KICAtIFN5bnRheCBydWxlIGZvciBQSFAgY29tbWVudHMNCg0KMjAxMS4wMi4wOCwgVmVyc2lvbiAwLjEuNQ0KDQoqIEFkZCBDb2ZmZWVzY3JpcHQgTW9kZSAoU2F0b3NoaSBNdXJha2FtaSkNCiogRml4IHdvcmQgd3JhcCBidWcgKEp1bGlhbiBWaWVyZWNrKQ0KKiBGaXggcGFja2FnZWQgdmVyc2lvbiBvZiB0aGUgRWNsaXBzZSBtb2RlDQoqIExvYWRpbmcgb2Ygd29ya2VycyBpcyBtb3JlIHJvYnVzdA0KKiBGaXggImNsaWNrIHNlbGVjdGlvbiINCiogQWxsb3cgdG9raXppbmcgZW1wdHkgbGluZXMgKERhbmllbCBLcmVjaCkNCiogTWFrZSBQYWdlVXAvRG93biBiZWhhdmlvciBtb3JlIGNvbnNpc3RlbnQgd2l0aCBuYXRpdmUgT1MgKEpvZSBDaGVuZykNCg0KMjAxMS4wMi4wNCwgVmVyc2lvbiAwLjEuNA0KDQoqIEFkZCBDL0MrKyBtb2RlIGNvbnRyaWJ1dGVkIGJ5IEdhc3TDs24gS2xlaW1hbg0KKiBGaXggZXhjZXB0aW9uIGluIGtleSBpbnB1dA0KDQoyMDExLjAyLjA0LCBWZXJzaW9uIDAuMS4zDQoNCiogTGV0IHRoZSBwYWNrYWdlZCB2ZXJzaW9uIHBsYXkgbmljZSB3aXRoIHJlcXVpcmVKUw0KKiBBZGQgUnVieSBtb2RlIGNvbnRyaWJ1dGVkIGJ5IFNobG9tbyBaYWxtYW4gSGVpZ2gNCiogQWRkIEphdmEgbW9kZSBjb250cmlidXRlZCBieSBUb20gVGFzY2hlDQoqIEZpeCBhbm5vdGF0aW9uIGJ1Zw0KKiBDaGFuZ2luZyBhIGRvY3VtZW50IGFkZGVkIGEgbmV3IGVtcHR5IGxpbmUgYXQgdGhlIGVuZA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-beautify.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L2JlYXV0aWZ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KZXhwb3J0cy5zaW5nbGV0b25UYWdzID0gWyJhcmVhIiwgImJhc2UiLCAiYnIiLCAiY29sIiwgImNvbW1hbmQiLCAiZW1iZWQiLCAiaHIiLCAiaHRtbCIsICJpbWciLCAiaW5wdXQiLCAia2V5Z2VuIiwgImxpbmsiLCAibWV0YSIsICJwYXJhbSIsICJzb3VyY2UiLCAidHJhY2siLCAid2JyIl07CmV4cG9ydHMuYmxvY2tUYWdzID0gWyJhcnRpY2xlIiwgImFzaWRlIiwgImJsb2NrcXVvdGUiLCAiYm9keSIsICJkaXYiLCAiZGwiLCAiZmllbGRzZXQiLCAiZm9vdGVyIiwgImZvcm0iLCAiaGVhZCIsICJoZWFkZXIiLCAiaHRtbCIsICJuYXYiLCAib2wiLCAicCIsICJzY3JpcHQiLCAic2VjdGlvbiIsICJzdHlsZSIsICJ0YWJsZSIsICJ0Ym9keSIsICJ0Zm9vdCIsICJ0aGVhZCIsICJ1bCJdOwoKZXhwb3J0cy5iZWF1dGlmeSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIDAsIDApOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB2YXIgdGFiU3RyaW5nID0gc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKICAgIHZhciBzaW5nbGV0b25UYWdzID0gZXhwb3J0cy5zaW5nbGV0b25UYWdzOwogICAgdmFyIGJsb2NrVGFncyA9IGV4cG9ydHMuYmxvY2tUYWdzOwogICAgdmFyIG5leHRUb2tlbjsKICAgIHZhciBicmVha0JlZm9yZSA9IGZhbHNlOwogICAgdmFyIHNwYWNlQmVmb3JlID0gZmFsc2U7CiAgICB2YXIgc3BhY2VBZnRlciA9IGZhbHNlOwogICAgdmFyIGNvZGUgPSAiIjsKICAgIHZhciB2YWx1ZSA9ICIiOwogICAgdmFyIHRhZ05hbWUgPSAiIjsKICAgIHZhciBkZXB0aCA9IDA7CiAgICB2YXIgbGFzdERlcHRoID0gMDsKICAgIHZhciBsYXN0SW5kZW50ID0gMDsKICAgIHZhciBpbmRlbnQgPSAwOwogICAgdmFyIHVuaW5kZW50ID0gMDsKICAgIHZhciByb3VuZERlcHRoID0gMDsKICAgIHZhciBjdXJseURlcHRoID0gMDsKICAgIHZhciByb3c7CiAgICB2YXIgY3VyUm93ID0gMDsKICAgIHZhciByb3dzVG9BZGQgPSAwOwogICAgdmFyIHJvd1Rva2VucyA9IFtdOwogICAgdmFyIGFib3J0ID0gZmFsc2U7CiAgICB2YXIgaTsKICAgIHZhciBpbmRlbnROZXh0TGluZSA9IGZhbHNlOwogICAgdmFyIGluVGFnID0gZmFsc2U7CiAgICB2YXIgaW5DU1MgPSBmYWxzZTsKICAgIHZhciBpbkJsb2NrID0gZmFsc2U7CiAgICB2YXIgbGV2ZWxzID0gezA6IDB9OwogICAgdmFyIHBhcmVudHMgPSBbXTsKCiAgICB2YXIgdHJpbU5leHQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAobmV4dFRva2VuICYmIG5leHRUb2tlbi52YWx1ZSAmJiBuZXh0VG9rZW4udHlwZSAhPT0gJ3N0cmluZy5yZWdleHAnKQogICAgICAgICAgICBuZXh0VG9rZW4udmFsdWUgPSBuZXh0VG9rZW4udmFsdWUudHJpbSgpOwogICAgfTsKCiAgICB2YXIgdHJpbUxpbmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC8gKyQvLCAiIik7CiAgICB9OwoKICAgIHZhciB0cmltQ29kZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGNvZGUgPSBjb2RlLnRyaW1SaWdodCgpOwogICAgICAgIGJyZWFrQmVmb3JlID0gZmFsc2U7CiAgICB9OwoKICAgIHdoaWxlICh0b2tlbiAhPT0gbnVsbCkgewogICAgICAgIGN1clJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgIHJvd1Rva2VucyA9IGl0ZXJhdG9yLiRyb3dUb2tlbnM7CiAgICAgICAgbmV4dFRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKCiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgdW5pbmRlbnQgPSAwOwogICAgICAgICAgICBpbkNTUyA9ICh0YWdOYW1lID09PSAic3R5bGUiIHx8IHNlc3Npb24uJG1vZGVJZCA9PT0gImFjZS9tb2RlL2NzcyIpOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICBpblRhZyA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAobmV4dFRva2VuKQogICAgICAgICAgICAgICAgICAgIGluQmxvY2sgPSAoYmxvY2tUYWdzLmluZGV4T2YobmV4dFRva2VuLnZhbHVlKSAhPT0gLTEpOwogICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGluQmxvY2sgJiYgIWJyZWFrQmVmb3JlICYmIHJvd3NUb0FkZCA8IDEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3NUb0FkZCsrOwoKICAgICAgICAgICAgICAgICAgICBpZiAoaW5DU1MpCiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3NUb0FkZCA9IDE7CgogICAgICAgICAgICAgICAgICAgIHVuaW5kZW50ID0gMTsKICAgICAgICAgICAgICAgICAgICBpbkJsb2NrID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgaW5UYWcgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgImNvbW1lbnQuc3RhcnQiKSkgewogICAgICAgICAgICAgICAgaW5CbG9jayA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJjb21tZW50LmVuZCIpKSB7CiAgICAgICAgICAgICAgICBpbkJsb2NrID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFpblRhZyAmJiAhcm93c1RvQWRkICYmIHRva2VuLnR5cGUgPT09ICJwYXJlbi5ycGFyZW4iICYmIHRva2VuLnZhbHVlLnN1YnN0cigwLCAxKSA9PT0gIn0iKSB7CiAgICAgICAgICAgICAgICByb3dzVG9BZGQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoY3VyUm93ICE9PSByb3cpIHsKICAgICAgICAgICAgICAgIHJvd3NUb0FkZCA9IGN1clJvdzsKCiAgICAgICAgICAgICAgICBpZiAocm93KQogICAgICAgICAgICAgICAgICAgIHJvd3NUb0FkZCAtPSByb3c7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChyb3dzVG9BZGQpIHsKICAgICAgICAgICAgICAgIHRyaW1Db2RlKCk7CiAgICAgICAgICAgICAgICBmb3IgKDsgcm93c1RvQWRkID4gMDsgcm93c1RvQWRkLS0pCiAgICAgICAgICAgICAgICAgICAgY29kZSArPSAiXG4iOwoKICAgICAgICAgICAgICAgIGJyZWFrQmVmb3JlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmICghaXModG9rZW4sICJjb21tZW50IikgJiYgIXRva2VuLnR5cGUubWF0Y2goL14oY29tbWVudHxzdHJpbmcpJC8pKQogICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltTGVmdCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAia2V5d29yZCIgJiYgdmFsdWUubWF0Y2goL14oaWZ8ZWxzZXxlbHNlaWZ8Zm9yfGZvcmVhY2h8d2hpbGV8c3dpdGNoKSQvKSkgewogICAgICAgICAgICAgICAgICAgIHBhcmVudHNbZGVwdGhdID0gdmFsdWU7CgogICAgICAgICAgICAgICAgICAgIHRyaW1OZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgc3BhY2VBZnRlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKC9eKGVsc2V8ZWxzZWlmKSQvKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZS5tYXRjaCgvXH1bXHNdKiQvKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpbUNvZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQmVmb3JlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInBhcmVuLmxwYXJlbiIpIHsKICAgICAgICAgICAgICAgICAgICB0cmltTmV4dCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdWJzdHIoLTEpID09PSAieyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VBZnRlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudE5leHRMaW5lID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgICAgICBpZighaW5UYWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzVG9BZGQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3Vic3RyKDAsIDEpID09PSAieyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZS5zdWJzdHIoLTEpICE9PSAnWycgJiYgY29kZS50cmltUmlnaHQoKS5zdWJzdHIoLTEpID09PSAnWycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaW1Db2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUJlZm9yZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUudHJpbVJpZ2h0KCkuc3Vic3RyKC0xKSA9PT0gJyknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltQ29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpbUxpbmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInBhcmVuLnJwYXJlbiIpIHsKICAgICAgICAgICAgICAgICAgICB1bmluZGVudCA9IDE7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN1YnN0cigwLCAxKSA9PT0gIn0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRzW2RlcHRoLTFdID09PSAnY2FzZScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmluZGVudCsrOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUudHJpbVJpZ2h0KCkuc3Vic3RyKC0xKSA9PT0gJ3snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltQ29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbkNTUykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzVG9BZGQrPTI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN1YnN0cigwLCAxKSA9PT0gIl0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlLnN1YnN0cigtMSkgIT09ICd9JyAmJiBjb2RlLnRyaW1SaWdodCgpLnN1YnN0cigtMSkgPT09ICd9JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpbUNvZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3Vic3RyKDAsIDEpID09PSAiKSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUuc3Vic3RyKC0xKSAhPT0gJygnICYmIGNvZGUudHJpbVJpZ2h0KCkuc3Vic3RyKC0xKSA9PT0gJygnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUJlZm9yZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmltQ29kZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0cmltTGluZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICgodG9rZW4udHlwZSA9PT0gImtleXdvcmQub3BlcmF0b3IiIHx8IHRva2VuLnR5cGUgPT09ICJrZXl3b3JkIikgJiYgdmFsdWUubWF0Y2goL14oPXw9PXw9PT18IT18IT09fCYmfFx8XHx8YW5kfG9yfHhvcnxcKz18Lj18Pnw+PXw8fDw9fD0+KSQvKSkgewogICAgICAgICAgICAgICAgICAgIHRyaW1Db2RlKCk7CiAgICAgICAgICAgICAgICAgICAgdHJpbU5leHQoKTsKICAgICAgICAgICAgICAgICAgICBzcGFjZUJlZm9yZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgc3BhY2VBZnRlciA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT09ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIgJiYgdmFsdWUgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHRyaW1Db2RlKCk7CiAgICAgICAgICAgICAgICAgICAgdHJpbU5leHQoKTsKICAgICAgICAgICAgICAgICAgICBzcGFjZUFmdGVyID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGluQ1NTKQogICAgICAgICAgICAgICAgICAgICAgICByb3dzVG9BZGQrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInB1bmN0dWF0aW9uLm9wZXJhdG9yIiAmJiB2YWx1ZS5tYXRjaCgvXig6fCwpJC8pKSB7CiAgICAgICAgICAgICAgICAgICAgdHJpbUNvZGUoKTsKICAgICAgICAgICAgICAgICAgICB0cmltTmV4dCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaCgvXigsKSQvKSAmJiBjdXJseURlcHRoPjAgJiYgcm91bmREZXB0aD09PTApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcm93c1RvQWRkKys7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VBZnRlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQmVmb3JlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAic3VwcG9ydC5waHBfdGFnIiAmJiB2YWx1ZSA9PT0gIj8+IiAmJiAhYnJlYWtCZWZvcmUpIHsKICAgICAgICAgICAgICAgICAgICB0cmltQ29kZSgpOwogICAgICAgICAgICAgICAgICAgIHNwYWNlQmVmb3JlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpICYmIGNvZGUuc3Vic3RyKC0xKS5tYXRjaCgvXlxzJC8pKSB7CiAgICAgICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSkgewogICAgICAgICAgICAgICAgICAgIHRyaW1MaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgdHJpbU5leHQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgIHRyaW1MaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgPT09ICIvPiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQmVmb3JlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChicmVha0JlZm9yZSAmJiAhKHRva2VuLnR5cGUubWF0Y2goL14oY29tbWVudCkkLykgJiYgIXZhbHVlLnN1YnN0cigwLCAxKS5tYXRjaCgvXlsvI10kLykpICYmICEodG9rZW4udHlwZS5tYXRjaCgvXihzdHJpbmcpJC8pICYmICF2YWx1ZS5zdWJzdHIoMCwgMSkubWF0Y2goL15bJyJdJC8pKSkgewoKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBsYXN0SW5kZW50OwoKICAgICAgICAgICAgICAgICAgICBpZihkZXB0aCA+IGxhc3REZXB0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQrKzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT1kZXB0aDsgaSA+IGxhc3REZXB0aDsgaS0tKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzW2ldID0gaW5kZW50OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihkZXB0aCA8IGxhc3REZXB0aCkKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gbGV2ZWxzW2RlcHRoXTsKCiAgICAgICAgICAgICAgICAgICAgbGFzdERlcHRoID0gZGVwdGg7CiAgICAgICAgICAgICAgICAgICAgbGFzdEluZGVudCA9IGluZGVudDsKCiAgICAgICAgICAgICAgICAgICAgaWYodW5pbmRlbnQpCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCAtPSB1bmluZGVudDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGVudE5leHRMaW5lICYmICFyb3VuZERlcHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluZGVudCsrOwogICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnROZXh0TGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGluZGVudDsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICBjb2RlICs9IHRhYlN0cmluZzsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJrZXl3b3JkIiAmJiB2YWx1ZS5tYXRjaCgvXihjYXNlfGRlZmF1bHQpJC8pKSB7CiAgICAgICAgICAgICAgICAgICAgcGFyZW50c1tkZXB0aF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICBkZXB0aCsrOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gImtleXdvcmQiICYmIHZhbHVlLm1hdGNoKC9eKGJyZWFrKSQvKSkgewogICAgICAgICAgICAgICAgICAgIGlmKHBhcmVudHNbZGVwdGgtMV0gJiYgcGFyZW50c1tkZXB0aC0xXS5tYXRjaCgvXihjYXNlfGRlZmF1bHQpJC8pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLS07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJlbi5scGFyZW4iKSB7CiAgICAgICAgICAgICAgICAgICAgcm91bmREZXB0aCArPSAodmFsdWUubWF0Y2goL1woL2cpIHx8IFtdKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgY3VybHlEZXB0aCArPSAodmFsdWUubWF0Y2goL1x7L2cpIHx8IFtdKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gdmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAia2V5d29yZCIgJiYgdmFsdWUubWF0Y2goL14oaWZ8ZWxzZXxlbHNlaWZ8Zm9yfHdoaWxlKSQvKSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudE5leHRMaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICByb3VuZERlcHRoID0gMDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJvdW5kRGVwdGggJiYgdmFsdWUudHJpbSgpICYmIHRva2VuLnR5cGUgIT09ICJjb21tZW50IikKICAgICAgICAgICAgICAgICAgICBpbmRlbnROZXh0TGluZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyZW4ucnBhcmVuIikgewogICAgICAgICAgICAgICAgICAgIHJvdW5kRGVwdGggLT0gKHZhbHVlLm1hdGNoKC9cKS9nKSB8fCBbXSkubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGN1cmx5RGVwdGggLT0gKHZhbHVlLm1hdGNoKC9cfS9nKSB8fCBbXSkubGVuZ3RoOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgtLTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUuc3Vic3RyKGksIDEpPT09J30nICYmIHBhcmVudHNbZGVwdGhdPT09J2Nhc2UnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aC0tOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHNwYWNlQmVmb3JlICYmICFicmVha0JlZm9yZSkgewogICAgICAgICAgICAgICAgICAgIHRyaW1MaW5lKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUuc3Vic3RyKC0xKSAhPT0gIlxuIikKICAgICAgICAgICAgICAgICAgICAgICAgY29kZSArPSAiICI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29kZSArPSB2YWx1ZTsKCiAgICAgICAgICAgICAgICBpZiAoc3BhY2VBZnRlcikKICAgICAgICAgICAgICAgICAgICBjb2RlICs9ICIgIjsKCiAgICAgICAgICAgICAgICBicmVha0JlZm9yZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgc3BhY2VCZWZvcmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHNwYWNlQWZ0ZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGlmICgoaXModG9rZW4sICJ0YWctY2xvc2UiKSAmJiAoaW5CbG9jayB8fCBibG9ja1RhZ3MuaW5kZXhPZih0YWdOYW1lKSAhPT0gLTEpKSB8fCAoaXModG9rZW4sICJkb2N0eXBlIikgJiYgdmFsdWUgPT09ICI+IikpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5CbG9jayAmJiBuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKQogICAgICAgICAgICAgICAgICAgICAgICByb3dzVG9BZGQgPSAtMTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3NUb0FkZCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpICYmIHZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgZGVwdGgtLTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpICYmIHZhbHVlID09PSAiPCIgJiYgc2luZ2xldG9uVGFncy5pbmRleE9mKG5leHRUb2tlbi52YWx1ZSkgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgZGVwdGgrKzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgdGFnTmFtZSA9IHZhbHVlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpICYmIHZhbHVlID09PSAiLz4iICYmIHNpbmdsZXRvblRhZ3MuaW5kZXhPZih0YWdOYW1lKSA9PT0gLTEpewogICAgICAgICAgICAgICAgICAgIGRlcHRoLS07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcm93ID0gY3VyUm93OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0b2tlbiA9IG5leHRUb2tlbjsKICAgIH0KCiAgICBjb2RlID0gY29kZS50cmltKCk7CiAgICBzZXNzaW9uLmRvYy5zZXRWYWx1ZShjb2RlKTsKfTsKCmV4cG9ydHMuY29tbWFuZHMgPSBbewogICAgbmFtZTogImJlYXV0aWZ5IiwKICAgIGRlc2NyaXB0aW9uOiAiRm9ybWF0IHNlbGVjdGlvbiAoQmVhdXRpZnkpIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGV4cG9ydHMuYmVhdXRpZnkoZWRpdG9yLnNlc3Npb24pOwogICAgfSwKICAgIGJpbmRLZXk6ICJDdHJsLVNoaWZ0LUIiCn1dOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvYmVhdXRpZnkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-chromevox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L2Nocm9tZXZveCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9lZGl0b3IiLCJhY2UvY29uZmlnIl0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGd0KCl7cmV0dXJuIHR5cGVvZiBjdm94IT0idW5kZWZpbmVkIiYmY3ZveCYmY3ZveC5BcGl9ZnVuY3Rpb24gd3QoZSl7aWYoZ3QoKSltdChlKTtlbHNle3l0Kys7aWYoeXQ+PWJ0KXJldHVybjt3aW5kb3cuc2V0VGltZW91dCh3dCw1MDAsZSl9fXZhciByPXt9O3IuU3BlZWNoUHJvcGVydHksci5DdXJzb3Isci5Ub2tlbixyLkFubm90YXRpb247dmFyIGk9e3JhdGU6LjgscGl0Y2g6LjQsdm9sdW1lOi45fSxzPXtyYXRlOjEscGl0Y2g6LjUsdm9sdW1lOi45fSxvPXtyYXRlOi44LHBpdGNoOi44LHZvbHVtZTouOX0sdT17cmF0ZTouOCxwaXRjaDouMyx2b2x1bWU6Ljl9LGE9e3JhdGU6LjgscGl0Y2g6Ljcsdm9sdW1lOi45fSxmPXtyYXRlOi44LHBpdGNoOi44LHZvbHVtZTouOX0sbD17cHVuY3R1YXRpb25FY2hvOiJub25lIixyZWxhdGl2ZVBpdGNoOi0wLjZ9LGM9IkFMRVJUX05PTk1PREFMIixoPSJBTEVSVF9NT0RBTCIscD0iSU5WQUxJRF9LRVlQUkVTUyIsZD0iaW5zZXJ0TW9kZSIsdj0ic3RhcnQiLG09W3tzdWJzdHI6IjsiLG5ld1N1YnN0cjoiIHNlbWljb2xvbiAifSx7c3Vic3RyOiI6IixuZXdTdWJzdHI6IiBjb2xvbiAifV0sZz17U1BFQUtfQU5OT1Q6ImFubm90cyIsU1BFQUtfQUxMX0FOTk9UUzoiYWxsX2Fubm90cyIsVE9HR0xFX0xPQ0FUSU9OOiJ0b2dnbGVfbG9jYXRpb24iLFNQRUFLX01PREU6Im1vZGUiLFNQRUFLX1JPV19DT0w6InJvd19jb2wiLFRPR0dMRV9ESVNQTEFDRU1FTlQ6InRvZ2dsZV9kaXNwbGFjZW1lbnQiLEZPQ1VTX1RFWFQ6ImZvY3VzX3RleHQifSx5PSJDT05UUk9MICsgU0hJRlQgIjtyLmVkaXRvcj1udWxsO3ZhciBiPW51bGwsdz17fSxFPSExLFM9ITEseD0hMSxUPW51bGwsTj17fSxDPXt9LGs9ZnVuY3Rpb24oZSl7cmV0dXJuIHkrU3RyaW5nLmZyb21DaGFyQ29kZShlKX0sTD1mdW5jdGlvbigpe3ZhciBlPXIuZWRpdG9yLmtleUJpbmRpbmcuZ2V0S2V5Ym9hcmRIYW5kbGVyKCk7cmV0dXJuIGUuJGlkPT09ImFjZS9rZXlib2FyZC92aW0ifSxBPWZ1bmN0aW9uKGUpe3JldHVybiByLmVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VG9rZW5BdChlLnJvdyxlLmNvbHVtbisxKX0sTz1mdW5jdGlvbihlKXtyZXR1cm4gci5lZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExpbmUoZS5yb3cpfSxNPWZ1bmN0aW9uKGUpe3dbZS5yb3ddJiZjdm94LkFwaS5wbGF5RWFyY29uKGMpLEU/KGN2b3guQXBpLnN0b3AoKSxXKGUpLFIoQShlKSksSShlLnJvdywxKSk6SShlLnJvdywwKX0sXz1mdW5jdGlvbihlKXt2YXIgdD1PKGUpLG49dC5zdWJzdHIoZS5jb2x1bW4tMSk7ZS5jb2x1bW49PT0wJiYobj0iICIrdCk7dmFyIHI9L15cVyhcdyspLyxpPXIuZXhlYyhuKTtyZXR1cm4gaSE9PW51bGx9LEQ9e2NvbnN0YW50Ontwcm9wOml9LGVudGl0eTp7cHJvcDpvfSxrZXl3b3JkOntwcm9wOnV9LHN0b3JhZ2U6e3Byb3A6YX0sdmFyaWFibGU6e3Byb3A6Zn0sbWV0YTp7cHJvcDpzLHJlcGxhY2U6W3tzdWJzdHI6IjwvIixuZXdTdWJzdHI6IiBjbG9zaW5nIHRhZyAifSx7c3Vic3RyOiIvPiIsbmV3U3Vic3RyOiIgY2xvc2UgdGFnICJ9LHtzdWJzdHI6IjwiLG5ld1N1YnN0cjoiIHRhZyBzdGFydCAifSx7c3Vic3RyOiI+IixuZXdTdWJzdHI6IiB0YWcgZW5kICJ9XX19LFA9e3Byb3A6UH0sSD1mdW5jdGlvbihlLHQpe3ZhciBuPWU7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBpPXRbcl0scz1uZXcgUmVnRXhwKGkuc3Vic3RyLCJnIik7bj1uLnJlcGxhY2UocyxpLm5ld1N1YnN0cil9cmV0dXJuIG59LEI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXt9O3IudmFsdWU9IiIsci50eXBlPWVbdF0udHlwZTtmb3IodmFyIGk9dDtpPG47aSsrKXIudmFsdWUrPWVbaV0udmFsdWU7cmV0dXJuIHJ9LGo9ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg8PTEpcmV0dXJuIGU7dmFyIHQ9W10sbj0wO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW25dLHM9ZVtyXTtVKGkpIT09VShzKSYmKHQucHVzaChCKGUsbixyKSksbj1yKX1yZXR1cm4gdC5wdXNoKEIoZSxuLGUubGVuZ3RoKSksdH0sRj1mdW5jdGlvbihlKXt2YXIgdD1yLmVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0TGluZShlKSxuPS9eXHMqJC87cmV0dXJuIG4uZXhlYyh0KSE9PW51bGx9LEk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1yLmVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VG9rZW5zKGUpO2lmKG4ubGVuZ3RoPT09MHx8RihlKSl7Y3ZveC5BcGkucGxheUVhcmNvbigiRURJVEFCTEVfVEVYVCIpO3JldHVybn1uPWoobik7dmFyIGk9blswXTtuPW4uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09aX0pLHooaSx0KSxuLmZvckVhY2goUil9LHE9ZnVuY3Rpb24oZSl7eihlLDApfSxSPWZ1bmN0aW9uKGUpe3ooZSwxKX0sVT1mdW5jdGlvbihlKXtpZighZXx8IWUudHlwZSlyZXR1cm47dmFyIHQ9ZS50eXBlLnNwbGl0KCIuIik7aWYodC5sZW5ndGg9PT0wKXJldHVybjt2YXIgbj10WzBdLHI9RFtuXTtyZXR1cm4gcj9yOlB9LHo9ZnVuY3Rpb24oZSx0KXt2YXIgbj1VKGUpLHI9SChlLnZhbHVlLG0pO24ucmVwbGFjZSYmKHI9SChyLG4ucmVwbGFjZSkpLGN2b3guQXBpLnNwZWFrKHIsdCxuLnByb3ApfSxXPWZ1bmN0aW9uKGUpe3ZhciB0PU8oZSk7Y3ZveC5BcGkuc3BlYWsodFtlLmNvbHVtbl0sMSl9LFg9ZnVuY3Rpb24oZSx0KXt2YXIgbj1PKHQpLHI9bi5zdWJzdHJpbmcoZS5jb2x1bW4sdC5jb2x1bW4pO3I9ci5yZXBsYWNlKC8gL2csIiBzcGFjZSAiKSxjdm94LkFwaS5zcGVhayhyKX0sVj1mdW5jdGlvbihlLHQpe2lmKE1hdGguYWJzKGUuY29sdW1uLXQuY29sdW1uKSE9PTEpe3ZhciBuPU8odCkubGVuZ3RoO2lmKHQuY29sdW1uPT09MHx8dC5jb2x1bW49PT1uKXtJKHQucm93LDApO3JldHVybn1pZihfKHQpKXtjdm94LkFwaS5zdG9wKCksUihBKHQpKTtyZXR1cm59fVcodCl9LCQ9ZnVuY3Rpb24oZSx0KXtyLmVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpP1M/WChlLHQpOlYoZSx0KTooWChlLHQpLGN2b3guQXBpLnNwZWFrKCJzZWxlY3RlZCIsMSkpfSxKPWZ1bmN0aW9uKGUpe2lmKHgpe3g9ITE7cmV0dXJufXZhciB0PXIuZWRpdG9yLnNlbGVjdGlvbi5nZXRDdXJzb3IoKTt0LnJvdyE9PWIucm93P00odCk6JChiLHQpLGI9dH0sSz1mdW5jdGlvbihlKXtyLmVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpJiZjdm94LkFwaS5zcGVhaygidW5zZWxlY3RlZCIpfSxRPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YTtzd2l0Y2godC5hY3Rpb24pe2Nhc2UicmVtb3ZlVGV4dCI6Y3ZveC5BcGkuc3BlYWsodC50ZXh0LDAsbCkseD0hMDticmVhaztjYXNlImluc2VydFRleHQiOmN2b3guQXBpLnNwZWFrKHQudGV4dCwwKSx4PSEwfX0sRz1mdW5jdGlvbihlKXt2YXIgdD1lLnJvdyxuPWUuY29sdW1uO3JldHVybiF3W3RdfHwhd1t0XVtuXX0sWT1mdW5jdGlvbihlKXt3PXt9O2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdLHI9bi5yb3csaT1uLmNvbHVtbjt3W3JdfHwod1tyXT17fSksd1tyXVtpXT1ufX0sWj1mdW5jdGlvbihlKXt2YXIgdD1yLmVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0QW5ub3RhdGlvbnMoKSxuPXQuZmlsdGVyKEcpO24ubGVuZ3RoPjAmJmN2b3guQXBpLnBsYXlFYXJjb24oYyksWSh0KX0sZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50eXBlKyIgIitlLnRleHQrIiBvbiAiK250KGUucm93LGUuY29sdW1uKTt0PXQucmVwbGFjZSgiOyIsInNlbWljb2xvbiIpLGN2b3guQXBpLnNwZWFrKHQsMSl9LHR0PWZ1bmN0aW9uKGUpe3ZhciB0PXdbZV07Zm9yKHZhciBuIGluIHQpZXQodFtuXSl9LG50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuInJvdyAiKyhlKzEpKyIgY29sdW1uICIrKHQrMSl9LHJ0PWZ1bmN0aW9uKCl7Y3ZveC5BcGkuc3BlYWsobnQoYi5yb3csYi5jb2x1bW4pKX0saXQ9ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdyl0dChlKX0sc3Q9ZnVuY3Rpb24oKXtpZighTCgpKXJldHVybjtzd2l0Y2goci5lZGl0b3Iua2V5QmluZGluZy4kZGF0YS5zdGF0ZSl7Y2FzZSBkOmN2b3guQXBpLnNwZWFrKCJJbnNlcnQgbW9kZSIpO2JyZWFrO2Nhc2Ugdjpjdm94LkFwaS5zcGVhaygiQ29tbWFuZCBtb2RlIil9fSxvdD1mdW5jdGlvbigpe0U9IUUsRT9jdm94LkFwaS5zcGVhaygiU3BlYWsgbG9jYXRpb24gb24gcm93IGNoYW5nZSBlbmFibGVkLiIpOmN2b3guQXBpLnNwZWFrKCJTcGVhayBsb2NhdGlvbiBvbiByb3cgY2hhbmdlIGRpc2FibGVkLiIpfSx1dD1mdW5jdGlvbigpe1M9IVMsUz9jdm94LkFwaS5zcGVhaygiU3BlYWsgZGlzcGxhY2VtZW50IG9uIGNvbHVtbiBjaGFuZ2VzLiIpOmN2b3guQXBpLnNwZWFrKCJTcGVhayBjdXJyZW50IGNoYXJhY3RlciBvciB3b3JkIG9uIGNvbHVtbiBjaGFuZ2VzLiIpfSxhdD1mdW5jdGlvbihlKXtpZihlLmN0cmxLZXkmJmUuc2hpZnRLZXkpe3ZhciB0PU5bZS5rZXlDb2RlXTt0JiZ0LmZ1bmMoKX19LGZ0PWZ1bmN0aW9uKGUsdCl7aWYoIUwoKSlyZXR1cm47dmFyIG49dC5rZXlCaW5kaW5nLiRkYXRhLnN0YXRlO2lmKG49PT1UKXJldHVybjtzd2l0Y2gobil7Y2FzZSBkOmN2b3guQXBpLnBsYXlFYXJjb24oaCksY3ZveC5BcGkuc2V0S2V5RWNobyghMCk7YnJlYWs7Y2FzZSB2OmN2b3guQXBpLnBsYXlFYXJjb24oaCksY3ZveC5BcGkuc2V0S2V5RWNobyghMSl9VD1ufSxsdD1mdW5jdGlvbihlKXt2YXIgdD1lLmRldGFpbC5jdXN0b21Db21tYW5kLG49Q1t0XTtuJiYobi5mdW5jKCksci5lZGl0b3IuZm9jdXMoKSl9LGN0PWZ1bmN0aW9uKCl7dmFyIGU9ZHQubWFwKGZ1bmN0aW9uKGUpe3JldHVybntkZXNjOmUuZGVzYytrKGUua2V5Q29kZSksY21kOmUuY21kfX0pLHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO3Quc2V0QXR0cmlidXRlKCJjb250ZXh0TWVudUFjdGlvbnMiLEpTT04uc3RyaW5naWZ5KGUpKSx0LmFkZEV2ZW50TGlzdGVuZXIoIkFUQ3VzdG9tRXZlbnQiLGx0LCEwKX0saHQ9ZnVuY3Rpb24oZSl7ZS5tYXRjaD9JKGIucm93LDApOmN2b3guQXBpLnBsYXlFYXJjb24ocCl9LHB0PWZ1bmN0aW9uKCl7ci5lZGl0b3IuZm9jdXMoKX0sZHQ9W3trZXlDb2RlOjQ5LGZ1bmM6ZnVuY3Rpb24oKXt0dChiLnJvdyl9LGNtZDpnLlNQRUFLX0FOTk9ULGRlc2M6IlNwZWFrIGFubm90YXRpb25zIG9uIGxpbmUifSx7a2V5Q29kZTo1MCxmdW5jOml0LGNtZDpnLlNQRUFLX0FMTF9BTk5PVFMsZGVzYzoiU3BlYWsgYWxsIGFubm90YXRpb25zIn0se2tleUNvZGU6NTEsZnVuYzpzdCxjbWQ6Zy5TUEVBS19NT0RFLGRlc2M6IlNwZWFrIFZpbSBtb2RlIn0se2tleUNvZGU6NTIsZnVuYzpvdCxjbWQ6Zy5UT0dHTEVfTE9DQVRJT04sZGVzYzoiVG9nZ2xlIHNwZWFrIHJvdyBsb2NhdGlvbiJ9LHtrZXlDb2RlOjUzLGZ1bmM6cnQsY21kOmcuU1BFQUtfUk9XX0NPTCxkZXNjOiJTcGVhayByb3cgYW5kIGNvbHVtbiJ9LHtrZXlDb2RlOjU0LGZ1bmM6dXQsY21kOmcuVE9HR0xFX0RJU1BMQUNFTUVOVCxkZXNjOiJUb2dnbGUgc3BlYWsgZGlzcGxhY2VtZW50In0se2tleUNvZGU6NTUsZnVuYzpwdCxjbWQ6Zy5GT0NVU19URVhULGRlc2M6IkZvY3VzIHRleHQifV0sdnQ9ZnVuY3Rpb24oKXtyLmVkaXRvcj1lZGl0b3IsZWRpdG9yLmdldFNlc3Npb24oKS5zZWxlY3Rpb24ub24oImNoYW5nZUN1cnNvciIsSiksZWRpdG9yLmdldFNlc3Npb24oKS5zZWxlY3Rpb24ub24oImNoYW5nZVNlbGVjdGlvbiIsSyksZWRpdG9yLmdldFNlc3Npb24oKS5vbigiY2hhbmdlIixRKSxlZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCJjaGFuZ2VBbm5vdGF0aW9uIixaKSxlZGl0b3Iub24oImNoYW5nZVN0YXR1cyIsZnQpLGVkaXRvci5vbigiZmluZFNlYXJjaEJveCIsaHQpLGVkaXRvci5jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYXQpLGI9ZWRpdG9yLnNlbGVjdGlvbi5nZXRDdXJzb3IoKX0sbXQ9ZnVuY3Rpb24oZSl7dnQoKSxkdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe05bZS5rZXlDb2RlXT1lLENbZS5jbWRdPWV9KSxlLm9uKCJmb2N1cyIsdnQpLEwoKSYmY3ZveC5BcGkuc2V0S2V5RWNobyghMSksY3QoKX0seXQ9MCxidD0xNSxFdD1lKCIuLi9lZGl0b3IiKS5FZGl0b3I7ZSgiLi4vY29uZmlnIikuZGVmaW5lT3B0aW9ucyhFdC5wcm90b3R5cGUsImVkaXRvciIse2VuYWJsZUNocm9tZXZveEVuaGFuY2VtZW50czp7c2V0OmZ1bmN0aW9uKGUpe2UmJnd0KHRoaXMpfSx2YWx1ZTohMH19KX0p]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-elastic_tabstops_lite.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L2VsYXN0aWNfdGFic3RvcHNfbGl0ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9lZGl0b3IiLCJhY2UvY29uZmlnIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgRWxhc3RpY1RhYnN0b3BzTGl0ZSA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgdGhpcy4kZWRpdG9yID0gZWRpdG9yOwogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdmFyIGNoYW5nZWRSb3dzID0gW107CiAgICB2YXIgcmVjb3JkQ2hhbmdlcyA9IGZhbHNlOwogICAgdGhpcy5vbkFmdGVyRXhlYyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJlY29yZENoYW5nZXMgPSBmYWxzZTsKICAgICAgICBzZWxmLnByb2Nlc3NSb3dzKGNoYW5nZWRSb3dzKTsKICAgICAgICBjaGFuZ2VkUm93cyA9IFtdOwogICAgfTsKICAgIHRoaXMub25FeGVjID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmVjb3JkQ2hhbmdlcyA9IHRydWU7CiAgICB9OwogICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgaWYgKHJlY29yZENoYW5nZXMpIHsKICAgICAgICAgICAgaWYgKGNoYW5nZWRSb3dzLmluZGV4T2YoZGVsdGEuc3RhcnQucm93KSA9PSAtMSkKICAgICAgICAgICAgICAgIGNoYW5nZWRSb3dzLnB1c2goZGVsdGEuc3RhcnQucm93KTsKICAgICAgICAgICAgaWYgKGRlbHRhLmVuZC5yb3cgIT0gZGVsdGEuc3RhcnQucm93KQogICAgICAgICAgICAgICAgY2hhbmdlZFJvd3MucHVzaChkZWx0YS5lbmQucm93KTsKICAgICAgICB9CiAgICB9Owp9OwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5wcm9jZXNzUm93cyA9IGZ1bmN0aW9uKHJvd3MpIHsKICAgICAgICB0aGlzLiRpbkNoYW5nZSA9IHRydWU7CiAgICAgICAgdmFyIGNoZWNrZWRSb3dzID0gW107CgogICAgICAgIGZvciAodmFyIHIgPSAwLCByb3dDb3VudCA9IHJvd3MubGVuZ3RoOyByIDwgcm93Q291bnQ7IHIrKykgewogICAgICAgICAgICB2YXIgcm93ID0gcm93c1tyXTsKCiAgICAgICAgICAgIGlmIChjaGVja2VkUm93cy5pbmRleE9mKHJvdykgPiAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGNlbGxXaWR0aE9iaiA9IHRoaXMuJGZpbmRDZWxsV2lkdGhzRm9yQmxvY2socm93KTsKICAgICAgICAgICAgdmFyIGNlbGxXaWR0aHMgPSB0aGlzLiRzZXRCbG9ja0NlbGxXaWR0aHNUb01heChjZWxsV2lkdGhPYmouY2VsbFdpZHRocyk7CiAgICAgICAgICAgIHZhciByb3dJbmRleCA9IGNlbGxXaWR0aE9iai5maXJzdFJvdzsKCiAgICAgICAgICAgIGZvciAodmFyIHcgPSAwLCBsID0gY2VsbFdpZHRocy5sZW5ndGg7IHcgPCBsOyB3KyspIHsKICAgICAgICAgICAgICAgIHZhciB3aWR0aHMgPSBjZWxsV2lkdGhzW3ddOwogICAgICAgICAgICAgICAgY2hlY2tlZFJvd3MucHVzaChyb3dJbmRleCk7CiAgICAgICAgICAgICAgICB0aGlzLiRhZGp1c3RSb3cocm93SW5kZXgsIHdpZHRocyk7CiAgICAgICAgICAgICAgICByb3dJbmRleCsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuJGluQ2hhbmdlID0gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuJGZpbmRDZWxsV2lkdGhzRm9yQmxvY2sgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICB2YXIgY2VsbFdpZHRocyA9IFtdLCB3aWR0aHM7CiAgICAgICAgdmFyIHJvd0l0ZXIgPSByb3c7CiAgICAgICAgd2hpbGUgKHJvd0l0ZXIgPj0gMCkgewogICAgICAgICAgICB3aWR0aHMgPSB0aGlzLiRjZWxsV2lkdGhzRm9yUm93KHJvd0l0ZXIpOwogICAgICAgICAgICBpZiAod2lkdGhzLmxlbmd0aCA9PSAwKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjZWxsV2lkdGhzLnVuc2hpZnQod2lkdGhzKTsKICAgICAgICAgICAgcm93SXRlci0tOwogICAgICAgIH0KICAgICAgICB2YXIgZmlyc3RSb3cgPSByb3dJdGVyICsgMTsKICAgICAgICByb3dJdGVyID0gcm93OwogICAgICAgIHZhciBudW1Sb3dzID0gdGhpcy4kZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCk7CgogICAgICAgIHdoaWxlIChyb3dJdGVyIDwgbnVtUm93cyAtIDEpIHsKICAgICAgICAgICAgcm93SXRlcisrOwoKICAgICAgICAgICAgd2lkdGhzID0gdGhpcy4kY2VsbFdpZHRoc0ZvclJvdyhyb3dJdGVyKTsKICAgICAgICAgICAgaWYgKHdpZHRocy5sZW5ndGggPT0gMCkKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2VsbFdpZHRocy5wdXNoKHdpZHRocyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geyBjZWxsV2lkdGhzOiBjZWxsV2lkdGhzLCBmaXJzdFJvdzogZmlyc3RSb3cgfTsKICAgIH07CgogICAgdGhpcy4kY2VsbFdpZHRoc0ZvclJvdyA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHZhciBzZWxlY3Rpb25Db2x1bW5zID0gdGhpcy4kc2VsZWN0aW9uQ29sdW1uc0ZvclJvdyhyb3cpOwoKICAgICAgICB2YXIgdGFicyA9IFstMV0uY29uY2F0KHRoaXMuJHRhYnNGb3JSb3cocm93KSk7CiAgICAgICAgdmFyIHdpZHRocyA9IHRhYnMubWFwKGZ1bmN0aW9uKGVsKSB7IHJldHVybiAwOyB9ICkuc2xpY2UoMSk7CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLiRlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CgogICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0YWJzLmxlbmd0aCAtIDE7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICB2YXIgbGVmdEVkZ2UgPSB0YWJzW2ldKzE7CiAgICAgICAgICAgIHZhciByaWdodEVkZ2UgPSB0YWJzW2krMV07CgogICAgICAgICAgICB2YXIgcmlnaHRtb3N0U2VsZWN0aW9uID0gdGhpcy4kcmlnaHRtb3N0U2VsZWN0aW9uSW5DZWxsKHNlbGVjdGlvbkNvbHVtbnMsIHJpZ2h0RWRnZSk7CiAgICAgICAgICAgIHZhciBjZWxsID0gbGluZS5zdWJzdHJpbmcobGVmdEVkZ2UsIHJpZ2h0RWRnZSk7CiAgICAgICAgICAgIHdpZHRoc1tpXSA9IE1hdGgubWF4KGNlbGwucmVwbGFjZSgvXHMrJC9nLCcnKS5sZW5ndGgsIHJpZ2h0bW9zdFNlbGVjdGlvbiAtIGxlZnRFZGdlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB3aWR0aHM7CiAgICB9OwoKICAgIHRoaXMuJHNlbGVjdGlvbkNvbHVtbnNGb3JSb3cgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICB2YXIgc2VsZWN0aW9ucyA9IFtdLCBjdXJzb3IgPSB0aGlzLiRlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICBpZiAodGhpcy4kZWRpdG9yLnNlc3Npb24uZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGlmIChyb3cgPT0gY3Vyc29yLnJvdykKICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMucHVzaChjdXJzb3IuY29sdW1uKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxlY3Rpb25zOwogICAgfTsKCiAgICB0aGlzLiRzZXRCbG9ja0NlbGxXaWR0aHNUb01heCA9IGZ1bmN0aW9uKGNlbGxXaWR0aHMpIHsKICAgICAgICB2YXIgc3RhcnRpbmdOZXdCbG9jayA9IHRydWUsIGJsb2NrU3RhcnRSb3csIGJsb2NrRW5kUm93LCBtYXhXaWR0aDsKICAgICAgICB2YXIgY29sdW1uSW5mbyA9IHRoaXMuJGl6aXBfbG9uZ2VzdChjZWxsV2lkdGhzKTsKCiAgICAgICAgZm9yICh2YXIgYyA9IDAsIGwgPSBjb2x1bW5JbmZvLmxlbmd0aDsgYyA8IGw7IGMrKykgewogICAgICAgICAgICB2YXIgY29sdW1uID0gY29sdW1uSW5mb1tjXTsKICAgICAgICAgICAgaWYgKCFjb2x1bW4ucHVzaCkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihjb2x1bW4pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29sdW1uLnB1c2goTmFOKTsKCiAgICAgICAgICAgIGZvciAodmFyIHIgPSAwLCBzID0gY29sdW1uLmxlbmd0aDsgciA8IHM7IHIrKykgewogICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gY29sdW1uW3JdOwogICAgICAgICAgICAgICAgaWYgKHN0YXJ0aW5nTmV3QmxvY2spIHsKICAgICAgICAgICAgICAgICAgICBibG9ja1N0YXJ0Um93ID0gcjsKICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aCA9IDA7CiAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmdOZXdCbG9jayA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHdpZHRoKSkgewogICAgICAgICAgICAgICAgICAgIGJsb2NrRW5kUm93ID0gcjsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGJsb2NrU3RhcnRSb3c7IGogPCBibG9ja0VuZFJvdzsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxXaWR0aHNbal1bY10gPSBtYXhXaWR0aDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgc3RhcnRpbmdOZXdCbG9jayA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbWF4V2lkdGggPSBNYXRoLm1heChtYXhXaWR0aCwgd2lkdGgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY2VsbFdpZHRoczsKICAgIH07CgogICAgdGhpcy4kcmlnaHRtb3N0U2VsZWN0aW9uSW5DZWxsID0gZnVuY3Rpb24oc2VsZWN0aW9uQ29sdW1ucywgY2VsbFJpZ2h0RWRnZSkgewogICAgICAgIHZhciByaWdodG1vc3QgPSAwOwoKICAgICAgICBpZiAoc2VsZWN0aW9uQ29sdW1ucy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGxlbmd0aHMgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgcyA9IDAsIGxlbmd0aCA9IHNlbGVjdGlvbkNvbHVtbnMubGVuZ3RoOyBzIDwgbGVuZ3RoOyBzKyspIHsKICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Db2x1bW5zW3NdIDw9IGNlbGxSaWdodEVkZ2UpCiAgICAgICAgICAgICAgICAgICAgbGVuZ3Rocy5wdXNoKHMpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGxlbmd0aHMucHVzaCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByaWdodG1vc3QgPSBNYXRoLm1heC5hcHBseShNYXRoLCBsZW5ndGhzKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByaWdodG1vc3Q7CiAgICB9OwoKICAgIHRoaXMuJHRhYnNGb3JSb3cgPSBmdW5jdGlvbihyb3cpIHsKICAgICAgICB2YXIgcm93VGFicyA9IFtdLCBsaW5lID0gdGhpcy4kZWRpdG9yLnNlc3Npb24uZ2V0TGluZShyb3cpLAogICAgICAgICAgICByZSA9IC9cdC9nLCBtYXRjaDsKCiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlLmV4ZWMobGluZSkpICE9IG51bGwpIHsKICAgICAgICAgICAgcm93VGFicy5wdXNoKG1hdGNoLmluZGV4KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByb3dUYWJzOwogICAgfTsKCiAgICB0aGlzLiRhZGp1c3RSb3cgPSBmdW5jdGlvbihyb3csIHdpZHRocykgewogICAgICAgIHZhciByb3dUYWJzID0gdGhpcy4kdGFic0ZvclJvdyhyb3cpOwoKICAgICAgICBpZiAocm93VGFicy5sZW5ndGggPT0gMCkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgYmlhcyA9IDAsIGxvY2F0aW9uID0gLTE7CiAgICAgICAgdmFyIGV4cGFuZGVkU2V0ID0gdGhpcy4kaXppcCh3aWR0aHMsIHJvd1RhYnMpOwoKICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGV4cGFuZGVkU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICB2YXIgdyA9IGV4cGFuZGVkU2V0W2ldWzBdLCBpdCA9IGV4cGFuZGVkU2V0W2ldWzFdOwogICAgICAgICAgICBsb2NhdGlvbiArPSAxICsgdzsKICAgICAgICAgICAgaXQgKz0gYmlhczsKICAgICAgICAgICAgdmFyIGRpZmZlcmVuY2UgPSBsb2NhdGlvbiAtIGl0OwoKICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPT0gMCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIHBhcnRpYWxMaW5lID0gdGhpcy4kZWRpdG9yLnNlc3Npb24uZ2V0TGluZShyb3cpLnN1YnN0cigwLCBpdCApOwogICAgICAgICAgICB2YXIgc3RyaXBwZWRQYXJ0aWFsTGluZSA9IHBhcnRpYWxMaW5lLnJlcGxhY2UoL1xzKiQvZywgIiIpOwogICAgICAgICAgICB2YXIgaXNwYWNlcyA9IHBhcnRpYWxMaW5lLmxlbmd0aCAtIHN0cmlwcGVkUGFydGlhbExpbmUubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRlZGl0b3Iuc2Vzc2lvbi5nZXREb2N1bWVudCgpLmluc2VydEluTGluZSh7cm93OiByb3csIGNvbHVtbjogaXQgKyAxfSwgQXJyYXkoZGlmZmVyZW5jZSArIDEpLmpvaW4oIiAiKSArICJcdCIpOwogICAgICAgICAgICAgICAgdGhpcy4kZWRpdG9yLnNlc3Npb24uZ2V0RG9jdW1lbnQoKS5yZW1vdmVJbkxpbmUocm93LCBpdCwgaXQgKyAxKTsKCiAgICAgICAgICAgICAgICBiaWFzICs9IGRpZmZlcmVuY2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlIDwgMCAmJiBpc3BhY2VzID49IC1kaWZmZXJlbmNlKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRlZGl0b3Iuc2Vzc2lvbi5nZXREb2N1bWVudCgpLnJlbW92ZUluTGluZShyb3csIGl0ICsgZGlmZmVyZW5jZSwgaXQpOwogICAgICAgICAgICAgICAgYmlhcyArPSBkaWZmZXJlbmNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuJGl6aXBfbG9uZ2VzdCA9IGZ1bmN0aW9uKGl0ZXJhYmxlcykgewogICAgICAgIGlmICghaXRlcmFibGVzWzBdKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGxvbmdlc3QgPSBpdGVyYWJsZXNbMF0ubGVuZ3RoOwogICAgICAgIHZhciBpdGVyYWJsZXNMZW5ndGggPSBpdGVyYWJsZXMubGVuZ3RoOwoKICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGl0ZXJhYmxlc0xlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBpTGVuZ3RoID0gaXRlcmFibGVzW2ldLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGlMZW5ndGggPiBsb25nZXN0KQogICAgICAgICAgICAgICAgbG9uZ2VzdCA9IGlMZW5ndGg7CiAgICAgICAgfQoKICAgICAgICB2YXIgZXhwYW5kZWRTZXQgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBsb25nZXN0OyBsKyspIHsKICAgICAgICAgICAgdmFyIHNldCA9IFtdOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhYmxlc0xlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVzW2ldW2xdID09PSAiIikKICAgICAgICAgICAgICAgICAgICBzZXQucHVzaChOYU4pOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHNldC5wdXNoKGl0ZXJhYmxlc1tpXVtsXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGV4cGFuZGVkU2V0LnB1c2goc2V0KTsKICAgICAgICB9CgoKICAgICAgICByZXR1cm4gZXhwYW5kZWRTZXQ7CiAgICB9OwogICAgdGhpcy4kaXppcCA9IGZ1bmN0aW9uKHdpZHRocywgdGFicykgewogICAgICAgIHZhciBzaXplID0gd2lkdGhzLmxlbmd0aCA+PSB0YWJzLmxlbmd0aCA/IHRhYnMubGVuZ3RoIDogd2lkdGhzLmxlbmd0aDsKCiAgICAgICAgdmFyIGV4cGFuZGVkU2V0ID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgdmFyIHNldCA9IFsgd2lkdGhzW2ldLCB0YWJzW2ldIF07CiAgICAgICAgICAgIGV4cGFuZGVkU2V0LnB1c2goc2V0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGV4cGFuZGVkU2V0OwogICAgfTsKCn0pLmNhbGwoRWxhc3RpY1RhYnN0b3BzTGl0ZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5FbGFzdGljVGFic3RvcHNMaXRlID0gRWxhc3RpY1RhYnN0b3BzTGl0ZTsKCnZhciBFZGl0b3IgPSByZXF1aXJlKCIuLi9lZGl0b3IiKS5FZGl0b3I7CnJlcXVpcmUoIi4uL2NvbmZpZyIpLmRlZmluZU9wdGlvbnMoRWRpdG9yLnByb3RvdHlwZSwgImVkaXRvciIsIHsKICAgIHVzZUVsYXN0aWNUYWJzdG9wczogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbGFzdGljVGFic3RvcHMpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGFzdGljVGFic3RvcHMgPSBuZXcgRWxhc3RpY1RhYnN0b3BzTGl0ZSh0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZHMub24oImFmdGVyRXhlYyIsIHRoaXMuZWxhc3RpY1RhYnN0b3BzLm9uQWZ0ZXJFeGVjKTsKICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZHMub24oImV4ZWMiLCB0aGlzLmVsYXN0aWNUYWJzdG9wcy5vbkV4ZWMpOwogICAgICAgICAgICAgICAgdGhpcy5vbigiY2hhbmdlIiwgdGhpcy5lbGFzdGljVGFic3RvcHMub25DaGFuZ2UpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWxhc3RpY1RhYnN0b3BzKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRzLnJlbW92ZUxpc3RlbmVyKCJhZnRlckV4ZWMiLCB0aGlzLmVsYXN0aWNUYWJzdG9wcy5vbkFmdGVyRXhlYyk7CiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRzLnJlbW92ZUxpc3RlbmVyKCJleGVjIiwgdGhpcy5lbGFzdGljVGFic3RvcHMub25FeGVjKTsKICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuZWxhc3RpY1RhYnN0b3BzLm9uQ2hhbmdlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfSk7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC9lbGFzdGljX3RhYnN0b3BzX2xpdGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-emmet.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9saWIvbGFuZyIsImFjZS9yYW5nZSIsImFjZS9yYW5nZV9saXN0IiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS90b2tlbml6ZXIiLCJhY2UvY2xpcGJvYXJkIiwiYWNlL2xpYi9kb20iLCJhY2UvZWRpdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBSYW5nZUxpc3QgPSByZXF1aXJlKCIuL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3Q7CnZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7CnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuL3Rva2VuaXplciIpLlRva2VuaXplcjsKdmFyIGNsaXBib2FyZCA9IHJlcXVpcmUoIi4vY2xpcGJvYXJkIik7Cgp2YXIgVkFSSUFCTEVTID0gewogICAgQ1VSUkVOVF9XT1JEOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGVkaXRvci5zZXNzaW9uLmdldFdvcmRSYW5nZSgpKTsKICAgIH0sCiAgICBTRUxFQ1RJT046IGZ1bmN0aW9uKGVkaXRvciwgbmFtZSwgaW5kZW50YXRpb24pIHsKICAgICAgICB2YXIgdGV4dCA9IGVkaXRvci5zZXNzaW9uLmdldFRleHRSYW5nZSgpOwogICAgICAgIGlmIChpbmRlbnRhdGlvbikKICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXG5ccj8oWyBcdF0qXFMpL2csICJcbiIgKyBpbmRlbnRhdGlvbiArICIkMSIpOwogICAgICAgIHJldHVybiB0ZXh0OwogICAgfSwKICAgIENVUlJFTlRfTElORTogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zZXNzaW9uLmdldExpbmUoZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCkucm93KTsKICAgIH0sCiAgICBQUkVWX0xJTkU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyAtIDEpOwogICAgfSwKICAgIExJTkVfSU5ERVg6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3c7CiAgICB9LAogICAgTElORV9OVU1CRVI6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3cgKyAxOwogICAgfSwKICAgIFNPRlRfVEFCUzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkgPyAiWUVTIiA6ICJOTyI7CiAgICB9LAogICAgVEFCX1NJWkU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5nZXRUYWJTaXplKCk7CiAgICB9LAogICAgQ0xJUEJPQVJEOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gY2xpcGJvYXJkLmdldFRleHQgJiYgY2xpcGJvYXJkLmdldFRleHQoKTsKICAgIH0sCiAgICBGSUxFTkFNRTogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIC9bXi9cXF0qJC8uZXhlYyh0aGlzLkZJTEVQQVRIKGVkaXRvcikpWzBdOwogICAgfSwKICAgIEZJTEVOQU1FX0JBU0U6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiAvW14vXFxdKiQvLmV4ZWModGhpcy5GSUxFUEFUSChlZGl0b3IpKVswXS5yZXBsYWNlKC9cLlteLl0qJC8sICIiKTsKICAgIH0sCiAgICBESVJFQ1RPUlk6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiB0aGlzLkZJTEVQQVRIKGVkaXRvcikucmVwbGFjZSgvW14vXFxdKiQvLCAiIik7CiAgICB9LAogICAgRklMRVBBVEg6IGZ1bmN0aW9uKGVkaXRvcikgeyByZXR1cm4gIi9ub3QgaW1wbGVtZW50ZWQudHh0IjsgfSwKICAgIFdPUktTUEFDRV9OQU1FOiBmdW5jdGlvbigpIHsgcmV0dXJuICJVbmtub3duIjsgfSwKICAgIEZVTExOQU1FOiBmdW5jdGlvbigpIHsgcmV0dXJuICJVbmtub3duIjsgfSwKICAgIEJMT0NLX0NPTU1FTlRfU1RBUlQ6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBtb2RlID0gZWRpdG9yLnNlc3Npb24uJG1vZGUgfHwge307CiAgICAgICAgcmV0dXJuIG1vZGUuYmxvY2tDb21tZW50ICYmIG1vZGUuYmxvY2tDb21tZW50LnN0YXJ0IHx8ICIiOwogICAgfSwKICAgIEJMT0NLX0NPTU1FTlRfRU5EOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgbW9kZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlIHx8IHt9OwogICAgICAgIHJldHVybiBtb2RlLmJsb2NrQ29tbWVudCAmJiBtb2RlLmJsb2NrQ29tbWVudC5lbmQgfHwgIiI7CiAgICB9LAogICAgTElORV9DT01NRU5UOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgbW9kZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlIHx8IHt9OwogICAgICAgIHJldHVybiBtb2RlLmxpbmVDb21tZW50U3RhcnQgfHwgIiI7CiAgICB9LAogICAgQ1VSUkVOVF9ZRUFSOiBkYXRlLmJpbmQobnVsbCwge3llYXI6ICJudW1lcmljIn0pLAogICAgQ1VSUkVOVF9ZRUFSX1NIT1JUOiBkYXRlLmJpbmQobnVsbCwge3llYXI6ICIyLWRpZ2l0In0pLAogICAgQ1VSUkVOVF9NT05USDogZGF0ZS5iaW5kKG51bGwsIHttb250aDogIm51bWVyaWMifSksCiAgICBDVVJSRU5UX01PTlRIX05BTUU6IGRhdGUuYmluZChudWxsLCB7bW9udGg6ICJsb25nIn0pLAogICAgQ1VSUkVOVF9NT05USF9OQU1FX1NIT1JUOiBkYXRlLmJpbmQobnVsbCwge21vbnRoOiAic2hvcnQifSksCiAgICBDVVJSRU5UX0RBVEU6IGRhdGUuYmluZChudWxsLCB7ZGF5OiAiMi1kaWdpdCJ9KSwKICAgIENVUlJFTlRfREFZX05BTUU6IGRhdGUuYmluZChudWxsLCB7d2Vla2RheTogImxvbmcifSksCiAgICBDVVJSRU5UX0RBWV9OQU1FX1NIT1JUOiBkYXRlLmJpbmQobnVsbCwge3dlZWtkYXk6ICJzaG9ydCJ9KSwKICAgIENVUlJFTlRfSE9VUjogZGF0ZS5iaW5kKG51bGwsIHtob3VyOiAiMi1kaWdpdCIsIGhvdXIxMjogZmFsc2V9KSwKICAgIENVUlJFTlRfTUlOVVRFOiBkYXRlLmJpbmQobnVsbCwge21pbnV0ZTogIjItZGlnaXQifSksCiAgICBDVVJSRU5UX1NFQ09ORDogZGF0ZS5iaW5kKG51bGwsIHtzZWNvbmQ6ICIyLWRpZ2l0In0pCn07CgpWQVJJQUJMRVMuU0VMRUNURURfVEVYVCA9IFZBUklBQkxFUy5TRUxFQ1RJT047CgpmdW5jdGlvbiBkYXRlKGRhdGVGb3JtYXQpIHsKICAgIHZhciBzdHIgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCJlbi11cyIsIGRhdGVGb3JtYXQpOwogICAgcmV0dXJuIHN0ci5sZW5ndGggPT0gMSA/ICIwIiArIHN0ciA6IHN0cjsKfQoKdmFyIFNuaXBwZXRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLnNuaXBwZXRNYXAgPSB7fTsKICAgIHRoaXMuc25pcHBldE5hbWVNYXAgPSB7fTsKfTsKCihmdW5jdGlvbigpIHsKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgIAogICAgdGhpcy5nZXRUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gU25pcHBldE1hbmFnZXIuJHRva2VuaXplciB8fCB0aGlzLmNyZWF0ZVRva2VuaXplcigpOwogICAgfTsKICAgIAogICAgdGhpcy5jcmVhdGVUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBUYWJzdG9wVG9rZW4oc3RyKSB7CiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMSk7CiAgICAgICAgICAgIGlmICgvXlxkKyQvLnRlc3Qoc3RyKSkKICAgICAgICAgICAgICAgIHJldHVybiBbe3RhYnN0b3BJZDogcGFyc2VJbnQoc3RyLCAxMCl9XTsKICAgICAgICAgICAgcmV0dXJuIFt7dGV4dDogc3RyfV07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGVzY2FwZShjaCkgewogICAgICAgICAgICByZXR1cm4gIig/OlteXFxcXCIgKyBjaCArICJdfFxcXFwuKSI7CiAgICAgICAgfQogICAgICAgIHZhciBmb3JtYXRNYXRjaGVyID0gewogICAgICAgICAgICByZWdleDogIi8oIiArIGVzY2FwZSgiLyIpICsgIispLyIsIAogICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdmFyIHRzID0gc3RhY2tbMF07CiAgICAgICAgICAgICAgICB0cy5mbXRTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgdHMuZ3VhcmQgPSB2YWwuc2xpY2UoMSwgLTEpOwogICAgICAgICAgICAgICAgdHMuZmxhZyA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0OiAiZm9ybWF0U3RyaW5nIgogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgU25pcHBldE1hbmFnZXIuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoewogICAgICAgICAgICBzdGFydDogWwogICAgICAgICAgICAgICAge3JlZ2V4OiAvXFwuLywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB2YWxbMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJ9IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYCRcXCIuaW5kZXhPZihjaCkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsXTsKICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvfS8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzdGFjay5sZW5ndGggPyBzdGFjay5zaGlmdCgpIDogdmFsXTsKICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXCQoPzpcZCt8XHcrKS8sIG9uTWF0Y2g6IFRhYnN0b3BUb2tlbn0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cJFx7W1xkQS1aX2Etel0rLywgb25NYXRjaDogZnVuY3Rpb24oc3RyLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IFRhYnN0b3BUb2tlbihzdHIuc3Vic3RyKDEpKTsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRbMF0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgICAgfSwgbmV4dDogInNuaXBwZXRWYXIifSwKICAgICAgICAgICAgICAgIHtyZWdleDogL1xuLywgdG9rZW46ICJuZXdsaW5lIiwgbWVyZ2U6IGZhbHNlfQogICAgICAgICAgICBdLAogICAgICAgICAgICBzbmlwcGV0VmFyOiBbCiAgICAgICAgICAgICAgICB7cmVnZXg6ICJcXHwiICsgZXNjYXBlKCJcXHwiKSArICIqXFx8Iiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2hvaWNlcyA9IHZhbC5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFxbLHxcXF18LC9nLCBmdW5jdGlvbihvcGVyYXRvcikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IubGVuZ3RoID09IDIgPyBvcGVyYXRvclsxXSA6ICJceDAwIjsKICAgICAgICAgICAgICAgICAgICB9KS5zcGxpdCgiXHgwMCIpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmNob2ljZXMgPSBjaG9pY2VzOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbY2hvaWNlc1swXV07CiAgICAgICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAgICAgIGZvcm1hdE1hdGNoZXIsCiAgICAgICAgICAgICAgICB7cmVnZXg6ICIoW146fVxcXFxdfFxcXFwuKSo6PyIsIHRva2VuOiAiIiwgbmV4dDogInN0YXJ0In0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiBbCiAgICAgICAgICAgICAgICB7cmVnZXg6IC86Lywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICYmIHN0YWNrWzBdLmV4cGVjdEVsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbMF0uZXhwZWN0RWxzZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFja1swXS5pZkVuZCA9IHtlbHNlRW5kOiBzdGFja1swXX07CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc3RhY2tbMF0uaWZFbmRdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjoiOwogICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cXC4vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHZhbFsxXTsKICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoImAkXFwiLmluZGV4T2YoY2gpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBjaDsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAibiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gInQiKQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAiXHQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJ1bFVMRSIuaW5kZXhPZihjaCkgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHtjaGFuZ2VDYXNlOiBjaCwgbG9jYWw6IGNoID4gImEifTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbF07CiAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgICAgIHtyZWdleDogIi9cXHcqfSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmZsYWcgPSB2YWwuc2xpY2UoMSwgLTEpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IG5leHQgJiYgbmV4dC50YWJzdG9wSWQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtuZXh0IHx8IHZhbF07CiAgICAgICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAgICAgIHtyZWdleDogL1wkKD86XGQrfFx3KykvLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbe3RleHQ6IHZhbC5zbGljZSgxKX1dOwogICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cJHtcdysvLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHt0ZXh0OiB2YWwuc2xpY2UoMil9OwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodG9rZW4pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbdG9rZW5dOwogICAgICAgICAgICAgICAgfSwgbmV4dDogImZvcm1hdFN0cmluZ1ZhciJ9LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXG4vLCB0b2tlbjogIm5ld2xpbmUiLCBtZXJnZTogZmFsc2V9LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvfS8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IG5leHQgJiYgbmV4dC50YWJzdG9wSWQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtuZXh0IHx8IHZhbF07CiAgICAgICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifQogICAgICAgICAgICBdLAogICAgICAgICAgICBmb3JtYXRTdHJpbmdWYXI6IFsKICAgICAgICAgICAgICAgIHtyZWdleDogLzpcL1x3K30vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciB0cyA9IHN0YWNrWzBdOwogICAgICAgICAgICAgICAgICAgIHRzLmZvcm1hdEZ1bmN0aW9uID0gdmFsLnNsaWNlKDIsIC0xKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3N0YWNrLnNoaWZ0KCldOwogICAgICAgICAgICAgICAgfSwgbmV4dDogImZvcm1hdFN0cmluZyJ9LAogICAgICAgICAgICAgICAgZm9ybWF0TWF0Y2hlciwKICAgICAgICAgICAgICAgIHtyZWdleDogLzpbXD9cLStdPy8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFsxXSA9PSAiKyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmlmRW5kID0gc3RhY2tbMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFsxXSA9PSAiPyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmV4cGVjdEVsc2UgPSB0cnVlOwogICAgICAgICAgICAgICAgfSwgbmV4dDogImZvcm1hdFN0cmluZyJ9LAogICAgICAgICAgICAgICAge3JlZ2V4OiAiKFteOn1cXFxcXXxcXFxcLikqOj8iLCB0b2tlbjogIiIsIG5leHQ6ICJmb3JtYXRTdHJpbmcifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIFNuaXBwZXRNYW5hZ2VyLiR0b2tlbml6ZXI7CiAgICB9OwoKICAgIHRoaXMudG9rZW5pemVUbVNuaXBwZXQgPSBmdW5jdGlvbihzdHIsIHN0YXJ0U3RhdGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKHN0ciwgc3RhcnRTdGF0ZSkudG9rZW5zLm1hcChmdW5jdGlvbih4KSB7CiAgICAgICAgICAgIHJldHVybiB4LnZhbHVlIHx8IHg7CiAgICAgICAgfSk7CiAgICB9OwogICAgCiAgICB0aGlzLmdldFZhcmlhYmxlVmFsdWUgPSBmdW5jdGlvbihlZGl0b3IsIG5hbWUsIGluZGVudGF0aW9uKSB7CiAgICAgICAgaWYgKC9eXGQrJC8udGVzdChuYW1lKSkKICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhcmlhYmxlcy5fXyB8fCB7fSlbbmFtZV0gfHwgIiI7CiAgICAgICAgaWYgKC9eW0EtWl1cZCskLy50ZXN0KG5hbWUpKQogICAgICAgICAgICByZXR1cm4gKHRoaXMudmFyaWFibGVzW25hbWVbMF0gKyAiX18iXSB8fCB7fSlbbmFtZS5zdWJzdHIoMSldIHx8ICIiOwogICAgICAgIAogICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL15UTV8vLCAiIik7CiAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFyaWFibGVzW25hbWVdOwogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tuYW1lXShlZGl0b3IsIG5hbWUsIGluZGVudGF0aW9uKTsKICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWU7CiAgICB9OwogICAgCiAgICB0aGlzLnZhcmlhYmxlcyA9IFZBUklBQkxFUzsKICAgIHRoaXMudG1TdHJGb3JtYXQgPSBmdW5jdGlvbihzdHIsIGNoLCBlZGl0b3IpIHsKICAgICAgICBpZiAoIWNoLmZtdCkgcmV0dXJuIHN0cjsKICAgICAgICB2YXIgZmxhZyA9IGNoLmZsYWcgfHwgIiI7CiAgICAgICAgdmFyIHJlID0gY2guZ3VhcmQ7CiAgICAgICAgcmUgPSBuZXcgUmVnRXhwKHJlLCBmbGFnLnJlcGxhY2UoL1teZ2ltXS9nLCAiIikpOwogICAgICAgIHZhciBmbXRUb2tlbnMgPSB0eXBlb2YgY2guZm10ID09ICJzdHJpbmciID8gdGhpcy50b2tlbml6ZVRtU25pcHBldChjaC5mbXQsICJmb3JtYXRTdHJpbmciKSA6IGNoLmZtdDsKICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgICAgIHZhciBmb3JtYXR0ZWQgPSBzdHIucmVwbGFjZShyZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBvbGRBcmdzID0gX3NlbGYudmFyaWFibGVzLl9fOwogICAgICAgICAgICBfc2VsZi52YXJpYWJsZXMuX18gPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CiAgICAgICAgICAgIHZhciBmbXRQYXJ0cyA9IF9zZWxmLnJlc29sdmVWYXJpYWJsZXMoZm10VG9rZW5zLCBlZGl0b3IpOwogICAgICAgICAgICB2YXIgZ0NoYW5nZUNhc2UgPSAiRSI7CiAgICAgICAgICAgIGZvciAodmFyIGkgID0gMDsgaSA8IGZtdFBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY2ggPSBmbXRQYXJ0c1tpXTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ggPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgICAgICAgICBmbXRQYXJ0c1tpXSA9ICIiOwogICAgICAgICAgICAgICAgICAgIGlmIChjaC5jaGFuZ2VDYXNlICYmIGNoLmxvY2FsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gZm10UGFydHNbaSArIDFdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiB0eXBlb2YgbmV4dCA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoLmNoYW5nZUNhc2UgPT0gInUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdFBhcnRzW2ldID0gbmV4dFswXS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdFBhcnRzW2ldID0gbmV4dFswXS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10UGFydHNbaSArIDFdID0gbmV4dC5zdWJzdHIoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoLmNoYW5nZUNhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ0NoYW5nZUNhc2UgPSBjaC5jaGFuZ2VDYXNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ0NoYW5nZUNhc2UgPT0gIlUiKSB7CiAgICAgICAgICAgICAgICAgICAgZm10UGFydHNbaV0gPSBjaC50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChnQ2hhbmdlQ2FzZSA9PSAiTCIpIHsKICAgICAgICAgICAgICAgICAgICBmbXRQYXJ0c1tpXSA9IGNoLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3NlbGYudmFyaWFibGVzLl9fID0gb2xkQXJnczsKICAgICAgICAgICAgcmV0dXJuIGZtdFBhcnRzLmpvaW4oIiIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9OwogICAgCiAgICB0aGlzLnRtRm9ybWF0RnVuY3Rpb24gPSBmdW5jdGlvbihzdHIsIGNoLCBlZGl0b3IpIHsKICAgICAgICBpZiAoY2guZm9ybWF0RnVuY3Rpb24gPT0gInVwY2FzZSIpCiAgICAgICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTsKICAgICAgICBpZiAoY2guZm9ybWF0RnVuY3Rpb24gPT0gImRvd25jYXNlIikKICAgICAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiBzdHI7CiAgICB9OwoKICAgIHRoaXMucmVzb2x2ZVZhcmlhYmxlcyA9IGZ1bmN0aW9uKHNuaXBwZXQsIGVkaXRvcikgewogICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICB2YXIgaW5kZW50YXRpb24gPSAiIjsKICAgICAgICB2YXIgYWZ0ZXJOZXdMaW5lID0gdHJ1ZTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNuaXBwZXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNoID0gc25pcHBldFtpXTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBjaCA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2gpOwogICAgICAgICAgICAgICAgaWYgKGNoID09ICJcbiIpIHsKICAgICAgICAgICAgICAgICAgICBhZnRlck5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uID0gIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChhZnRlck5ld0xpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiA9IC9eXHQqLy5leGVjKGNoKVswXTsKICAgICAgICAgICAgICAgICAgICBhZnRlck5ld0xpbmUgPSAvXFMvLnRlc3QoY2gpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFjaCkgIGNvbnRpbnVlOwogICAgICAgICAgICBhZnRlck5ld0xpbmUgPSBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjaC5mbXRTdHJpbmcpIHsKICAgICAgICAgICAgICAgIHZhciBqID0gc25pcHBldC5pbmRleE9mKGNoLCBpICsgMSk7CiAgICAgICAgICAgICAgICBpZiAoaiA9PSAtMSkgaiA9IHNuaXBwZXQubGVuZ3RoOwogICAgICAgICAgICAgICAgY2guZm10ID0gc25pcHBldC5zbGljZShpICsgMSwgaik7CiAgICAgICAgICAgICAgICBpID0gajsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGNoLnRleHQpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFyaWFibGVWYWx1ZShlZGl0b3IsIGNoLnRleHQsIGluZGVudGF0aW9uKSArICIiOwogICAgICAgICAgICAgICAgaWYgKGNoLmZtdFN0cmluZykKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG1TdHJGb3JtYXQodmFsdWUsIGNoLCBlZGl0b3IpOwogICAgICAgICAgICAgICAgaWYgKGNoLmZvcm1hdEZ1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50bUZvcm1hdEZ1bmN0aW9uKHZhbHVlLCBjaCwgZWRpdG9yKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmICFjaC5pZkVuZCkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBnb3RvTmV4dChjaCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZSAmJiBjaC5pZkVuZCkgewogICAgICAgICAgICAgICAgICAgIGdvdG9OZXh0KGNoLmlmRW5kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChjaC5lbHNlRW5kKSB7CiAgICAgICAgICAgICAgICBnb3RvTmV4dChjaC5lbHNlRW5kKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjaC50YWJzdG9wSWQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2gpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNoLmNoYW5nZUNhc2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdvdG9OZXh0KGNoKSB7CiAgICAgICAgICAgIHZhciBpMSA9IHNuaXBwZXQuaW5kZXhPZihjaCwgaSArIDEpOwogICAgICAgICAgICBpZiAoaTEgIT0gLTEpCiAgICAgICAgICAgICAgICBpID0gaTE7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwoKICAgIHRoaXMuaW5zZXJ0U25pcHBldEZvclNlbGVjdGlvbiA9IGZ1bmN0aW9uKGVkaXRvciwgc25pcHBldFRleHQpIHsKICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgdmFyIGxpbmUgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgIHZhciB0YWJTdHJpbmcgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgICAgIAogICAgICAgIGlmIChjdXJzb3IuY29sdW1uIDwgaW5kZW50U3RyaW5nLmxlbmd0aCkKICAgICAgICAgICAgaW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nLnNsaWNlKDAsIGN1cnNvci5jb2x1bW4pOwoKICAgICAgICBzbmlwcGV0VGV4dCA9IHNuaXBwZXRUZXh0LnJlcGxhY2UoL1xyL2csICIiKTsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy50b2tlbml6ZVRtU25pcHBldChzbmlwcGV0VGV4dCk7CiAgICAgICAgdG9rZW5zID0gdGhpcy5yZXNvbHZlVmFyaWFibGVzKHRva2VucywgZWRpdG9yKTsKICAgICAgICB0b2tlbnMgPSB0b2tlbnMubWFwKGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgaWYgKHggPT0gIlxuIikKICAgICAgICAgICAgICAgIHJldHVybiB4ICsgaW5kZW50U3RyaW5nOwogICAgICAgICAgICBpZiAodHlwZW9mIHggPT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICByZXR1cm4geC5yZXBsYWNlKC9cdC9nLCB0YWJTdHJpbmcpOwogICAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9KTsKICAgICAgICB2YXIgdGFic3RvcHMgPSBbXTsKICAgICAgICB0b2tlbnMuZm9yRWFjaChmdW5jdGlvbihwLCBpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPSAib2JqZWN0IikKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIGlkID0gcC50YWJzdG9wSWQ7CiAgICAgICAgICAgIHZhciB0cyA9IHRhYnN0b3BzW2lkXTsKICAgICAgICAgICAgaWYgKCF0cykgewogICAgICAgICAgICAgICAgdHMgPSB0YWJzdG9wc1tpZF0gPSBbXTsKICAgICAgICAgICAgICAgIHRzLmluZGV4ID0gaWQ7CiAgICAgICAgICAgICAgICB0cy52YWx1ZSA9ICIiOwogICAgICAgICAgICAgICAgdHMucGFyZW50cyA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0cy5pbmRleE9mKHApICE9PSAtMSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKHAuY2hvaWNlcyAmJiAhdHMuY2hvaWNlcykKICAgICAgICAgICAgICAgIHRzLmNob2ljZXMgPSBwLmNob2ljZXM7CiAgICAgICAgICAgIHRzLnB1c2gocCk7CiAgICAgICAgICAgIHZhciBpMSA9IHRva2Vucy5pbmRleE9mKHAsIGkgKyAxKTsKICAgICAgICAgICAgaWYgKGkxID09PSAtMSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2Vucy5zbGljZShpICsgMSwgaTEpOwogICAgICAgICAgICB2YXIgaXNOZXN0ZWQgPSB2YWx1ZS5zb21lKGZ1bmN0aW9uKHQpIHtyZXR1cm4gdHlwZW9mIHQgPT09ICJvYmplY3QiO30pOwogICAgICAgICAgICBpZiAoaXNOZXN0ZWQgJiYgIXRzLnZhbHVlKSB7CiAgICAgICAgICAgICAgICB0cy52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCAmJiAoIXRzLnZhbHVlIHx8IHR5cGVvZiB0cy52YWx1ZSAhPT0gInN0cmluZyIpKSB7CiAgICAgICAgICAgICAgICB0cy52YWx1ZSA9IHZhbHVlLmpvaW4oIiIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGFic3RvcHMuZm9yRWFjaChmdW5jdGlvbih0cykge3RzLmxlbmd0aCA9IDA7fSk7CiAgICAgICAgdmFyIGV4cGFuZGluZyA9IHt9OwogICAgICAgIGZ1bmN0aW9uIGNvcHlWYWx1ZSh2YWwpIHsKICAgICAgICAgICAgdmFyIGNvcHkgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBwID0gdmFsW2ldOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZGluZ1twLnRhYnN0b3BJZF0pCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIHZhciBqID0gdmFsLmxhc3RJbmRleE9mKHAsIGkgLSAxKTsKICAgICAgICAgICAgICAgICAgICBwID0gY29weVtqXSB8fCB7dGFic3RvcElkOiBwLnRhYnN0b3BJZH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3B5W2ldID0gcDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY29weTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHAgPSB0b2tlbnNbaV07CiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPSAib2JqZWN0IikKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgaWQgPSBwLnRhYnN0b3BJZDsKICAgICAgICAgICAgdmFyIHRzID0gdGFic3RvcHNbaWRdOwogICAgICAgICAgICB2YXIgaTEgPSB0b2tlbnMuaW5kZXhPZihwLCBpICsgMSk7CiAgICAgICAgICAgIGlmIChleHBhbmRpbmdbaWRdKSB7CiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kaW5nW2lkXSA9PT0gcCkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHBhbmRpbmdbaWRdOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV4cGFuZGluZykuZm9yRWFjaChmdW5jdGlvbihwYXJlbnRJZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0cy5wYXJlbnRzW3BhcmVudElkXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBleHBhbmRpbmdbaWRdID0gcDsKICAgICAgICAgICAgdmFyIHZhbHVlID0gdHMudmFsdWU7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5VmFsdWUodmFsdWUpOwogICAgICAgICAgICBlbHNlIGlmIChwLmZtdCkKICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50bVN0ckZvcm1hdCh2YWx1ZSwgcCwgZWRpdG9yKTsKICAgICAgICAgICAgdG9rZW5zLnNwbGljZS5hcHBseSh0b2tlbnMsIFtpICsgMSwgTWF0aC5tYXgoMCwgaTEgLSBpKV0uY29uY2F0KHZhbHVlLCBwKSk7CgogICAgICAgICAgICBpZiAodHMuaW5kZXhPZihwKSA9PT0gLTEpCiAgICAgICAgICAgICAgICB0cy5wdXNoKHApOwogICAgICAgIH0KICAgICAgICB2YXIgcm93ID0gMCwgY29sdW1uID0gMDsKICAgICAgICB2YXIgdGV4dCA9ICIiOwogICAgICAgIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gdC5zcGxpdCgiXG4iKTsKICAgICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICBjb2x1bW4gKz0gdC5sZW5ndGg7CiAgICAgICAgICAgICAgICB0ZXh0ICs9IHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodCkgewogICAgICAgICAgICAgICAgaWYgKCF0LnN0YXJ0KQogICAgICAgICAgICAgICAgICAgIHQuc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0LmVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CiAgICAgICAgdmFyIGVuZCA9IGVkaXRvci5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQpOwoKICAgICAgICB2YXIgdGFic3RvcE1hbmFnZXIgPSBuZXcgVGFic3RvcE1hbmFnZXIoZWRpdG9yKTsKICAgICAgICB2YXIgc2VsZWN0aW9uSWQgPSBlZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmluZGV4OwogICAgICAgIHRhYnN0b3BNYW5hZ2VyLmFkZFRhYnN0b3BzKHRhYnN0b3BzLCByYW5nZS5zdGFydCwgZW5kLCBzZWxlY3Rpb25JZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmluc2VydFNuaXBwZXQgPSBmdW5jdGlvbihlZGl0b3IsIHNuaXBwZXRUZXh0KSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIGlmIChlZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5zZXJ0U25pcHBldEZvclNlbGVjdGlvbihlZGl0b3IsIHNuaXBwZXRUZXh0KTsKICAgICAgICAKICAgICAgICBlZGl0b3IuZm9yRWFjaFNlbGVjdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2VsZi5pbnNlcnRTbmlwcGV0Rm9yU2VsZWN0aW9uKGVkaXRvciwgc25pcHBldFRleHQpOwogICAgICAgIH0sIG51bGwsIHtrZWVwT3JkZXI6IHRydWV9KTsKICAgICAgICAKICAgICAgICBpZiAoZWRpdG9yLnRhYnN0b3BNYW5hZ2VyKQogICAgICAgICAgICBlZGl0b3IudGFic3RvcE1hbmFnZXIudGFiTmV4dCgpOwogICAgfTsKCiAgICB0aGlzLiRnZXRTY29wZSA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBzY29wZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlLiRpZCB8fCAiIjsKICAgICAgICBzY29wZSA9IHNjb3BlLnNwbGl0KCIvIikucG9wKCk7CiAgICAgICAgaWYgKHNjb3BlID09PSAiaHRtbCIgfHwgc2NvcGUgPT09ICJwaHAiKSB7CiAgICAgICAgICAgIGlmIChzY29wZSA9PT0gInBocCIgJiYgIWVkaXRvci5zZXNzaW9uLiRtb2RlLmlubGluZVBocCkgCiAgICAgICAgICAgICAgICBzY29wZSA9ICJodG1sIjsKICAgICAgICAgICAgdmFyIGMgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIHN0YXRlID0gZWRpdG9yLnNlc3Npb24uZ2V0U3RhdGUoYy5yb3cpOwogICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAib2JqZWN0IikgewogICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RhdGUuc3Vic3RyaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3Vic3RyaW5nKDAsIDMpID09ICJqcy0iKQogICAgICAgICAgICAgICAgICAgIHNjb3BlID0gImphdmFzY3JpcHQiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3Vic3RyaW5nKDAsIDQpID09ICJjc3MtIikKICAgICAgICAgICAgICAgICAgICBzY29wZSA9ICJjc3MiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3Vic3RyaW5nKDAsIDQpID09ICJwaHAtIikKICAgICAgICAgICAgICAgICAgICBzY29wZSA9ICJwaHAiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBzY29wZTsKICAgIH07CgogICAgdGhpcy5nZXRBY3RpdmVTY29wZXMgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgc2NvcGUgPSB0aGlzLiRnZXRTY29wZShlZGl0b3IpOwogICAgICAgIHZhciBzY29wZXMgPSBbc2NvcGVdOwogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIGlmIChzbmlwcGV0TWFwW3Njb3BlXSAmJiBzbmlwcGV0TWFwW3Njb3BlXS5pbmNsdWRlU2NvcGVzKSB7CiAgICAgICAgICAgIHNjb3Blcy5wdXNoLmFwcGx5KHNjb3Blcywgc25pcHBldE1hcFtzY29wZV0uaW5jbHVkZVNjb3Blcyk7CiAgICAgICAgfQogICAgICAgIHNjb3Blcy5wdXNoKCJfIik7CiAgICAgICAgcmV0dXJuIHNjb3BlczsKICAgIH07CgogICAgdGhpcy5leHBhbmRXaXRoVGFiID0gZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciByZXN1bHQgPSBlZGl0b3IuZm9yRWFjaFNlbGVjdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kU25pcHBldEZvclNlbGVjdGlvbihlZGl0b3IsIG9wdGlvbnMpOwogICAgICAgIH0sIG51bGwsIHtrZWVwT3JkZXI6IHRydWV9KTsKICAgICAgICBpZiAocmVzdWx0ICYmIGVkaXRvci50YWJzdG9wTWFuYWdlcikKICAgICAgICAgICAgZWRpdG9yLnRhYnN0b3BNYW5hZ2VyLnRhYk5leHQoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIAogICAgdGhpcy5leHBhbmRTbmlwcGV0Rm9yU2VsZWN0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgIHZhciBsaW5lID0gZWRpdG9yLnNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICB2YXIgYmVmb3JlID0gbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgdmFyIGFmdGVyID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CgogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIHZhciBzbmlwcGV0OwogICAgICAgIHRoaXMuZ2V0QWN0aXZlU2NvcGVzKGVkaXRvcikuc29tZShmdW5jdGlvbihzY29wZSkgewogICAgICAgICAgICB2YXIgc25pcHBldHMgPSBzbmlwcGV0TWFwW3Njb3BlXTsKICAgICAgICAgICAgaWYgKHNuaXBwZXRzKQogICAgICAgICAgICAgICAgc25pcHBldCA9IHRoaXMuZmluZE1hdGNoaW5nU25pcHBldChzbmlwcGV0cywgYmVmb3JlLCBhZnRlcik7CiAgICAgICAgICAgIHJldHVybiAhIXNuaXBwZXQ7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgaWYgKCFzbmlwcGV0KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kcnlSdW4pCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVkaXRvci5zZXNzaW9uLmRvYy5yZW1vdmVJbkxpbmUoY3Vyc29yLnJvdywKICAgICAgICAgICAgY3Vyc29yLmNvbHVtbiAtIHNuaXBwZXQucmVwbGFjZUJlZm9yZS5sZW5ndGgsCiAgICAgICAgICAgIGN1cnNvci5jb2x1bW4gKyBzbmlwcGV0LnJlcGxhY2VBZnRlci5sZW5ndGgKICAgICAgICApOwoKICAgICAgICB0aGlzLnZhcmlhYmxlcy5NX18gPSBzbmlwcGV0Lm1hdGNoQmVmb3JlOwogICAgICAgIHRoaXMudmFyaWFibGVzLlRfXyA9IHNuaXBwZXQubWF0Y2hBZnRlcjsKICAgICAgICB0aGlzLmluc2VydFNuaXBwZXRGb3JTZWxlY3Rpb24oZWRpdG9yLCBzbmlwcGV0LmNvbnRlbnQpOwoKICAgICAgICB0aGlzLnZhcmlhYmxlcy5NX18gPSB0aGlzLnZhcmlhYmxlcy5UX18gPSBudWxsOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLmZpbmRNYXRjaGluZ1NuaXBwZXQgPSBmdW5jdGlvbihzbmlwcGV0TGlzdCwgYmVmb3JlLCBhZnRlcikgewogICAgICAgIGZvciAodmFyIGkgPSBzbmlwcGV0TGlzdC5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgdmFyIHMgPSBzbmlwcGV0TGlzdFtpXTsKICAgICAgICAgICAgaWYgKHMuc3RhcnRSZSAmJiAhcy5zdGFydFJlLnRlc3QoYmVmb3JlKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAocy5lbmRSZSAmJiAhcy5lbmRSZS50ZXN0KGFmdGVyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIXMuc3RhcnRSZSAmJiAhcy5lbmRSZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgcy5tYXRjaEJlZm9yZSA9IHMuc3RhcnRSZSA/IHMuc3RhcnRSZS5leGVjKGJlZm9yZSkgOiBbIiJdOwogICAgICAgICAgICBzLm1hdGNoQWZ0ZXIgPSBzLmVuZFJlID8gcy5lbmRSZS5leGVjKGFmdGVyKSA6IFsiIl07CiAgICAgICAgICAgIHMucmVwbGFjZUJlZm9yZSA9IHMudHJpZ2dlclJlID8gcy50cmlnZ2VyUmUuZXhlYyhiZWZvcmUpWzBdIDogIiI7CiAgICAgICAgICAgIHMucmVwbGFjZUFmdGVyID0gcy5lbmRUcmlnZ2VyUmUgPyBzLmVuZFRyaWdnZXJSZS5leGVjKGFmdGVyKVswXSA6ICIiOwogICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuc25pcHBldE1hcCA9IHt9OwogICAgdGhpcy5zbmlwcGV0TmFtZU1hcCA9IHt9OwogICAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKHNuaXBwZXRzLCBzY29wZSkgewogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIHZhciBzbmlwcGV0TmFtZU1hcCA9IHRoaXMuc25pcHBldE5hbWVNYXA7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIAogICAgICAgIGlmICghc25pcHBldHMpIAogICAgICAgICAgICBzbmlwcGV0cyA9IFtdOwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIHdyYXBSZWdleHAoc3JjKSB7CiAgICAgICAgICAgIGlmIChzcmMgJiYgIS9eXF4/XCguKlwpXCQ/JHxeXFxiJC8udGVzdChzcmMpKQogICAgICAgICAgICAgICAgc3JjID0gIig/OiIgKyBzcmMgKyAiKSI7CgogICAgICAgICAgICByZXR1cm4gc3JjIHx8ICIiOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBndWFyZGVkUmVnZXhwKHJlLCBndWFyZCwgb3BlbmluZykgewogICAgICAgICAgICByZSA9IHdyYXBSZWdleHAocmUpOwogICAgICAgICAgICBndWFyZCA9IHdyYXBSZWdleHAoZ3VhcmQpOwogICAgICAgICAgICBpZiAob3BlbmluZykgewogICAgICAgICAgICAgICAgcmUgPSBndWFyZCArIHJlOwogICAgICAgICAgICAgICAgaWYgKHJlICYmIHJlW3JlLmxlbmd0aCAtIDFdICE9ICIkIikKICAgICAgICAgICAgICAgICAgICByZSA9IHJlICsgIiQiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmUgPSByZSArIGd1YXJkOwogICAgICAgICAgICAgICAgaWYgKHJlICYmIHJlWzBdICE9ICJeIikKICAgICAgICAgICAgICAgICAgICByZSA9ICJeIiArIHJlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHJlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGFkZFNuaXBwZXQocykgewogICAgICAgICAgICBpZiAoIXMuc2NvcGUpCiAgICAgICAgICAgICAgICBzLnNjb3BlID0gc2NvcGUgfHwgIl8iOwogICAgICAgICAgICBzY29wZSA9IHMuc2NvcGU7CiAgICAgICAgICAgIGlmICghc25pcHBldE1hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgIHNuaXBwZXRNYXBbc2NvcGVdID0gW107CiAgICAgICAgICAgICAgICBzbmlwcGV0TmFtZU1hcFtzY29wZV0gPSB7fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG1hcCA9IHNuaXBwZXROYW1lTWFwW3Njb3BlXTsKICAgICAgICAgICAgaWYgKHMubmFtZSkgewogICAgICAgICAgICAgICAgdmFyIG9sZCA9IG1hcFtzLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKG9sZCkKICAgICAgICAgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIob2xkKTsKICAgICAgICAgICAgICAgIG1hcFtzLm5hbWVdID0gczsKICAgICAgICAgICAgfQogICAgICAgICAgICBzbmlwcGV0TWFwW3Njb3BlXS5wdXNoKHMpOwoKICAgICAgICAgICAgaWYgKHMudGFiVHJpZ2dlciAmJiAhcy50cmlnZ2VyKSB7CiAgICAgICAgICAgICAgICBpZiAoIXMuZ3VhcmQgJiYgL15cdy8udGVzdChzLnRhYlRyaWdnZXIpKQogICAgICAgICAgICAgICAgICAgIHMuZ3VhcmQgPSAiXFxiIjsKICAgICAgICAgICAgICAgIHMudHJpZ2dlciA9IGxhbmcuZXNjYXBlUmVnRXhwKHMudGFiVHJpZ2dlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghcy50cmlnZ2VyICYmICFzLmd1YXJkICYmICFzLmVuZFRyaWdnZXIgJiYgIXMuZW5kR3VhcmQpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgICAgICBzLnN0YXJ0UmUgPSBndWFyZGVkUmVnZXhwKHMudHJpZ2dlciwgcy5ndWFyZCwgdHJ1ZSk7CiAgICAgICAgICAgIHMudHJpZ2dlclJlID0gbmV3IFJlZ0V4cChzLnRyaWdnZXIpOwoKICAgICAgICAgICAgcy5lbmRSZSA9IGd1YXJkZWRSZWdleHAocy5lbmRUcmlnZ2VyLCBzLmVuZEd1YXJkLCB0cnVlKTsKICAgICAgICAgICAgcy5lbmRUcmlnZ2VyUmUgPSBuZXcgUmVnRXhwKHMuZW5kVHJpZ2dlcik7CiAgICAgICAgfQoKICAgICAgICBpZiAoc25pcHBldHMgJiYgc25pcHBldHMuY29udGVudCkKICAgICAgICAgICAgYWRkU25pcHBldChzbmlwcGV0cyk7CiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzbmlwcGV0cykpCiAgICAgICAgICAgIHNuaXBwZXRzLmZvckVhY2goYWRkU25pcHBldCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5fc2lnbmFsKCJyZWdpc3RlclNuaXBwZXRzIiwge3Njb3BlOiBzY29wZX0pOwogICAgfTsKICAgIHRoaXMudW5yZWdpc3RlciA9IGZ1bmN0aW9uKHNuaXBwZXRzLCBzY29wZSkgewogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIHZhciBzbmlwcGV0TmFtZU1hcCA9IHRoaXMuc25pcHBldE5hbWVNYXA7CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZVNuaXBwZXQocykgewogICAgICAgICAgICB2YXIgbmFtZU1hcCA9IHNuaXBwZXROYW1lTWFwW3Muc2NvcGV8fHNjb3BlXTsKICAgICAgICAgICAgaWYgKG5hbWVNYXAgJiYgbmFtZU1hcFtzLm5hbWVdKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgbmFtZU1hcFtzLm5hbWVdOwogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHNuaXBwZXRNYXBbcy5zY29wZXx8c2NvcGVdOwogICAgICAgICAgICAgICAgdmFyIGkgPSBtYXAgJiYgbWFwLmluZGV4T2Yocyk7CiAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKQogICAgICAgICAgICAgICAgICAgIG1hcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHNuaXBwZXRzLmNvbnRlbnQpCiAgICAgICAgICAgIHJlbW92ZVNuaXBwZXQoc25pcHBldHMpOwogICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc25pcHBldHMpKQogICAgICAgICAgICBzbmlwcGV0cy5mb3JFYWNoKHJlbW92ZVNuaXBwZXQpOwogICAgfTsKICAgIHRoaXMucGFyc2VTbmlwcGV0RmlsZSA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cci9nLCAiIik7CiAgICAgICAgdmFyIGxpc3QgPSBbXSwgc25pcHBldCA9IHt9OwogICAgICAgIHZhciByZSA9IC9eIy4qfF4oe1tcc1xTXSp9KVxzKiR8XihcUyspICguKikkfF4oKD86XG4qXHQuKikrKS9nbTsKICAgICAgICB2YXIgbTsKICAgICAgICB3aGlsZSAobSA9IHJlLmV4ZWMoc3RyKSkgewogICAgICAgICAgICBpZiAobVsxXSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0ID0gSlNPTi5wYXJzZShtWzFdKTsKICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goc25pcHBldCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICB9IGlmIChtWzRdKSB7CiAgICAgICAgICAgICAgICBzbmlwcGV0LmNvbnRlbnQgPSBtWzRdLnJlcGxhY2UoL15cdC9nbSwgIiIpOwogICAgICAgICAgICAgICAgbGlzdC5wdXNoKHNuaXBwZXQpOwogICAgICAgICAgICAgICAgc25pcHBldCA9IHt9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGtleSA9IG1bMl0sIHZhbCA9IG1bM107CiAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICJyZWdleCIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZ3VhcmRSZSA9IC9cLygoPzpbXlwvXFxdfFxcLikqKXwkL2c7CiAgICAgICAgICAgICAgICAgICAgc25pcHBldC5ndWFyZCA9IGd1YXJkUmUuZXhlYyh2YWwpWzFdOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQudHJpZ2dlciA9IGd1YXJkUmUuZXhlYyh2YWwpWzFdOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQuZW5kVHJpZ2dlciA9IGd1YXJkUmUuZXhlYyh2YWwpWzFdOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQuZW5kR3VhcmQgPSBndWFyZFJlLmV4ZWModmFsKVsxXTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJzbmlwcGV0IikgewogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQudGFiVHJpZ2dlciA9IHZhbC5tYXRjaCgvXlxTKi8pWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICghc25pcHBldC5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICBzbmlwcGV0Lm5hbWUgPSB2YWw7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNuaXBwZXRba2V5XSA9IHZhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlzdDsKICAgIH07CiAgICB0aGlzLmdldFNuaXBwZXRCeU5hbWUgPSBmdW5jdGlvbihuYW1lLCBlZGl0b3IpIHsKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHRoaXMuc25pcHBldE5hbWVNYXA7CiAgICAgICAgdmFyIHNuaXBwZXQ7CiAgICAgICAgdGhpcy5nZXRBY3RpdmVTY29wZXMoZWRpdG9yKS5zb21lKGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBzbmlwcGV0cyA9IHNuaXBwZXRNYXBbc2NvcGVdOwogICAgICAgICAgICBpZiAoc25pcHBldHMpCiAgICAgICAgICAgICAgICBzbmlwcGV0ID0gc25pcHBldHNbbmFtZV07CiAgICAgICAgICAgIHJldHVybiAhIXNuaXBwZXQ7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgcmV0dXJuIHNuaXBwZXQ7CiAgICB9OwoKfSkuY2FsbChTbmlwcGV0TWFuYWdlci5wcm90b3R5cGUpOwoKCnZhciBUYWJzdG9wTWFuYWdlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgaWYgKGVkaXRvci50YWJzdG9wTWFuYWdlcikKICAgICAgICByZXR1cm4gZWRpdG9yLnRhYnN0b3BNYW5hZ2VyOwogICAgZWRpdG9yLnRhYnN0b3BNYW5hZ2VyID0gdGhpczsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24gPSBsYW5nLmRlbGF5ZWRDYWxsKHRoaXMub25DaGFuZ2VTZWxlY3Rpb24uYmluZCh0aGlzKSkuc2NoZWR1bGU7CiAgICB0aGlzLiRvbkNoYW5nZVNlc3Npb24gPSB0aGlzLm9uQ2hhbmdlU2Vzc2lvbi5iaW5kKHRoaXMpOwogICAgdGhpcy4kb25BZnRlckV4ZWMgPSB0aGlzLm9uQWZ0ZXJFeGVjLmJpbmQodGhpcyk7CiAgICB0aGlzLmF0dGFjaChlZGl0b3IpOwp9OwooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmF0dGFjaCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHRoaXMuaW5kZXggPSAwOwogICAgICAgIHRoaXMucmFuZ2VzID0gW107CiAgICAgICAgdGhpcy50YWJzdG9wcyA9IFtdOwogICAgICAgIHRoaXMuJG9wZW5UYWJzdG9wcyA9IG51bGw7CiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYnN0b3AgPSBudWxsOwoKICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKICAgICAgICB0aGlzLmVkaXRvci5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgICAgIHRoaXMuZWRpdG9yLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvbkNoYW5nZVNlbGVjdGlvbik7CiAgICAgICAgdGhpcy5lZGl0b3Iub24oImNoYW5nZVNlc3Npb24iLCB0aGlzLiRvbkNoYW5nZVNlc3Npb24pOwogICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLm9uKCJhZnRlckV4ZWMiLCB0aGlzLiRvbkFmdGVyRXhlYyk7CiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy50YWJzdG9wcy5mb3JFYWNoKHRoaXMucmVtb3ZlVGFic3RvcE1hcmtlcnMsIHRoaXMpOwogICAgICAgIHRoaXMucmFuZ2VzID0gbnVsbDsKICAgICAgICB0aGlzLnRhYnN0b3BzID0gbnVsbDsKICAgICAgICB0aGlzLnNlbGVjdGVkVGFic3RvcCA9IG51bGw7CiAgICAgICAgdGhpcy5lZGl0b3IucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKICAgICAgICB0aGlzLmVkaXRvci5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuZWRpdG9yLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2VTZXNzaW9uIiwgdGhpcy4kb25DaGFuZ2VTZXNzaW9uKTsKICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5yZW1vdmVMaXN0ZW5lcigiYWZ0ZXJFeGVjIiwgdGhpcy4kb25BZnRlckV4ZWMpOwogICAgICAgIHRoaXMuZWRpdG9yLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMua2V5Ym9hcmRIYW5kbGVyKTsKICAgICAgICB0aGlzLmVkaXRvci50YWJzdG9wTWFuYWdlciA9IG51bGw7CiAgICAgICAgdGhpcy5lZGl0b3IgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICB2YXIgaXNSZW1vdmUgPSBkZWx0YS5hY3Rpb25bMF0gPT0gInIiOwogICAgICAgIHZhciBwYXJlbnRzID0gdGhpcy5zZWxlY3RlZFRhYnN0b3AgJiYgdGhpcy5zZWxlY3RlZFRhYnN0b3AucGFyZW50cyB8fCB7fTsKICAgICAgICB2YXIgdGFic3RvcHMgPSAodGhpcy50YWJzdG9wcyB8fCBbXSkuc2xpY2UoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnN0b3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0cyA9IHRhYnN0b3BzW2ldOwogICAgICAgICAgICB2YXIgYWN0aXZlID0gdHMgPT0gdGhpcy5zZWxlY3RlZFRhYnN0b3AgfHwgcGFyZW50c1t0cy5pbmRleF07CiAgICAgICAgICAgIHRzLnJhbmdlTGlzdC4kYmlhcyA9IGFjdGl2ZSA/IDAgOiAxOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiB0cyAhPT0gdGhpcy5zZWxlY3RlZFRhYnN0b3ApIHsKICAgICAgICAgICAgICAgIHZhciBwYXJlbnRBY3RpdmUgPSB0cy5wYXJlbnRzICYmIHRzLnBhcmVudHNbdGhpcy5zZWxlY3RlZFRhYnN0b3AuaW5kZXhdOwogICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0cy5yYW5nZUxpc3QucG9pbnRJbmRleChkZWx0YS5zdGFydCwgcGFyZW50QWN0aXZlKTsKICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4IDwgMCA/IC1zdGFydEluZGV4IC0gMSA6IHN0YXJ0SW5kZXggKyAxOwogICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gdHMucmFuZ2VMaXN0LnBvaW50SW5kZXgoZGVsdGEuZW5kLCBwYXJlbnRBY3RpdmUpOwogICAgICAgICAgICAgICAgZW5kSW5kZXggPSBlbmRJbmRleCA8IDAgPyAtZW5kSW5kZXggLSAxIDogZW5kSW5kZXggLSAxOwogICAgICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gdHMucmFuZ2VMaXN0LnJhbmdlcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRvUmVtb3ZlLmxlbmd0aDsgaisrKQogICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUmFuZ2UodG9SZW1vdmVbal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRzLnJhbmdlTGlzdC4kb25DaGFuZ2UoZGVsdGEpOwogICAgICAgIH0KICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZWRpdG9yLnNlc3Npb247CiAgICAgICAgaWYgKCF0aGlzLiRpbkNoYW5nZSAmJiBpc1JlbW92ZSAmJiBzZXNzaW9uLmdldExlbmd0aCgpID09IDEgJiYgIXNlc3Npb24uZ2V0VmFsdWUoKSkKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgIH07CiAgICB0aGlzLnVwZGF0ZUxpbmtlZEZpZWxkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB0cyA9IHRoaXMuc2VsZWN0ZWRUYWJzdG9wOwogICAgICAgIGlmICghdHMgfHwgIXRzLmhhc0xpbmtlZFJhbmdlcyB8fCAhdHMuZmlyc3ROb25MaW5rZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLiRpbkNoYW5nZSA9IHRydWU7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLmVkaXRvci5zZXNzaW9uOwogICAgICAgIHZhciB0ZXh0ID0gc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodHMuZmlyc3ROb25MaW5rZWQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gdHNbaV07CiAgICAgICAgICAgIGlmICghcmFuZ2UubGlua2VkKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHZhciBvcmlnaW5hbCA9IHJhbmdlLm9yaWdpbmFsOwogICAgICAgICAgICB2YXIgZm10ID0gZXhwb3J0cy5zbmlwcGV0TWFuYWdlci50bVN0ckZvcm1hdCh0ZXh0LCBvcmlnaW5hbCwgdGhpcy5lZGl0b3IpOwogICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UocmFuZ2UsIGZtdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJGluQ2hhbmdlID0gZmFsc2U7CiAgICB9OwogICAgdGhpcy5vbkFmdGVyRXhlYyA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZS5jb21tYW5kICYmICFlLmNvbW1hbmQucmVhZE9ubHkpCiAgICAgICAgICAgIHRoaXMudXBkYXRlTGlua2VkRmllbGRzKCk7CiAgICB9OwogICAgdGhpcy5vbkNoYW5nZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgbGVhZCA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5sZWFkOwogICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmVkaXRvci5zZWxlY3Rpb24uYW5jaG9yOwogICAgICAgIHZhciBpc0VtcHR5ID0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlc1tpXS5saW5rZWQpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGNvbnRhaW5zTGVhZCA9IHRoaXMucmFuZ2VzW2ldLmNvbnRhaW5zKGxlYWQucm93LCBsZWFkLmNvbHVtbik7CiAgICAgICAgICAgIHZhciBjb250YWluc0FuY2hvciA9IGlzRW1wdHkgfHwgdGhpcy5yYW5nZXNbaV0uY29udGFpbnMoYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjb250YWluc0xlYWQgJiYgY29udGFpbnNBbmNob3IpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwogICAgdGhpcy5vbkNoYW5nZVNlc3Npb24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRldGFjaCgpOwogICAgfTsKICAgIHRoaXMudGFiTmV4dCA9IGZ1bmN0aW9uKGRpcikgewogICAgICAgIHZhciBtYXggPSB0aGlzLnRhYnN0b3BzLmxlbmd0aDsKICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4ICsgKGRpciB8fCAxKTsKICAgICAgICBpbmRleCA9IE1hdGgubWluKE1hdGgubWF4KGluZGV4LCAxKSwgbWF4KTsKICAgICAgICBpZiAoaW5kZXggPT0gbWF4KQogICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgdGhpcy5zZWxlY3RUYWJzdG9wKGluZGV4KTsKICAgICAgICBpZiAoaW5kZXggPT09IDApCiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RUYWJzdG9wID0gZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgICB0aGlzLiRvcGVuVGFic3RvcHMgPSBudWxsOwogICAgICAgIHZhciB0cyA9IHRoaXMudGFic3RvcHNbdGhpcy5pbmRleF07CiAgICAgICAgaWYgKHRzKQogICAgICAgICAgICB0aGlzLmFkZFRhYnN0b3BNYXJrZXJzKHRzKTsKICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CiAgICAgICAgdHMgPSB0aGlzLnRhYnN0b3BzW3RoaXMuaW5kZXhdOwogICAgICAgIGlmICghdHMgfHwgIXRzLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIAogICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJzdG9wID0gdHM7CiAgICAgICAgdmFyIHJhbmdlID0gdHMuZmlyc3ROb25MaW5rZWQgfHwgdHM7CiAgICAgICAgaWYgKCF0aGlzLmVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKSB7CiAgICAgICAgICAgIHZhciBzZWwgPSB0aGlzLmVkaXRvci5tdWx0aVNlbGVjdDsKICAgICAgICAgICAgc2VsLnRvU2luZ2xlUmFuZ2UocmFuZ2UuY2xvbmUoKSk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmICh0cy5oYXNMaW5rZWRSYW5nZXMgJiYgdHNbaV0ubGlua2VkKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHRzW2ldLmNsb25lKCksIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzZWwucmFuZ2VzWzBdKQogICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHNlbC5yYW5nZXNbMF0uY2xvbmUoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFic3RvcCAmJiB0aGlzLnNlbGVjdGVkVGFic3RvcC5jaG9pY2VzKQogICAgICAgICAgICB0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgic3RhcnRBdXRvY29tcGxldGUiLCB7bWF0Y2hlczogdGhpcy5zZWxlY3RlZFRhYnN0b3AuY2hvaWNlc30pOwogICAgfTsKICAgIHRoaXMuYWRkVGFic3RvcHMgPSBmdW5jdGlvbih0YWJzdG9wcywgc3RhcnQsIGVuZCkgewogICAgICAgIHZhciB1c2VMaW5rID0gdGhpcy51c2VMaW5rIHx8ICF0aGlzLmVkaXRvci5nZXRPcHRpb24oImVuYWJsZU11bHRpc2VsZWN0Iik7CiAgICAgICAgCiAgICAgICAgaWYgKCF0aGlzLiRvcGVuVGFic3RvcHMpCiAgICAgICAgICAgIHRoaXMuJG9wZW5UYWJzdG9wcyA9IFtdOwogICAgICAgIGlmICghdGFic3RvcHNbMF0pIHsKICAgICAgICAgICAgdmFyIHAgPSBSYW5nZS5mcm9tUG9pbnRzKGVuZCwgZW5kKTsKICAgICAgICAgICAgbW92ZVJlbGF0aXZlKHAuc3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgbW92ZVJlbGF0aXZlKHAuZW5kLCBzdGFydCk7CiAgICAgICAgICAgIHRhYnN0b3BzWzBdID0gW3BdOwogICAgICAgICAgICB0YWJzdG9wc1swXS5pbmRleCA9IDA7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXg7CiAgICAgICAgdmFyIGFyZyA9IFtpICsgMSwgMF07CiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzOwogICAgICAgIHRhYnN0b3BzLmZvckVhY2goZnVuY3Rpb24odHMsIGluZGV4KSB7CiAgICAgICAgICAgIHZhciBkZXN0ID0gdGhpcy4kb3BlblRhYnN0b3BzW2luZGV4XSB8fCB0czsKICAgICAgICAgICAgdHMucmFuZ2VMaXN0ID0gbmV3IFJhbmdlTGlzdCgpOwogICAgICAgICAgICB0cy5yYW5nZUxpc3QuJGJpYXMgPSAwOwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHAgPSB0c1tpXTsKICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocC5zdGFydCwgcC5lbmQgfHwgcC5zdGFydCk7CiAgICAgICAgICAgICAgICBtb3ZlUG9pbnQocmFuZ2Uuc3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgICAgIG1vdmVQb2ludChyYW5nZS5lbmQsIHN0YXJ0KTsKICAgICAgICAgICAgICAgIHJhbmdlLm9yaWdpbmFsID0gcDsKICAgICAgICAgICAgICAgIHJhbmdlLnRhYnN0b3AgPSBkZXN0OwogICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gocmFuZ2UpOwogICAgICAgICAgICAgICAgdHMucmFuZ2VMaXN0LnJhbmdlcy5wdXNoKHJhbmdlKTsKICAgICAgICAgICAgICAgIGlmIChkZXN0ICE9IHRzKQogICAgICAgICAgICAgICAgICAgIGRlc3QudW5zaGlmdChyYW5nZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IHJhbmdlOwogICAgICAgICAgICAgICAgaWYgKHAuZm10U3RyaW5nIHx8IChkZXN0LmZpcnN0Tm9uTGlua2VkICYmIHVzZUxpbmspKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UubGlua2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBkZXN0Lmhhc0xpbmtlZFJhbmdlcyA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXN0LmZpcnN0Tm9uTGlua2VkKQogICAgICAgICAgICAgICAgICAgIGRlc3QuZmlyc3ROb25MaW5rZWQgPSByYW5nZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWRlc3QuZmlyc3ROb25MaW5rZWQpCiAgICAgICAgICAgICAgICBkZXN0Lmhhc0xpbmtlZFJhbmdlcyA9IGZhbHNlOwogICAgICAgICAgICBpZiAoZGVzdCA9PT0gdHMpIHsKICAgICAgICAgICAgICAgIGFyZy5wdXNoKGRlc3QpOwogICAgICAgICAgICAgICAgdGhpcy4kb3BlblRhYnN0b3BzW2luZGV4XSA9IGRlc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hZGRUYWJzdG9wTWFya2VycyhkZXN0KTsKICAgICAgICB9LCB0aGlzKTsKICAgICAgICAKICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgaWYgKHRoaXMudGFic3RvcHMubGVuZ3RoKQogICAgICAgICAgICAgICAgYXJnLnB1c2goYXJnLnNwbGljZSgyLCAxKVswXSk7CiAgICAgICAgICAgIHRoaXMudGFic3RvcHMuc3BsaWNlLmFwcGx5KHRoaXMudGFic3RvcHMsIGFyZyk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmFkZFRhYnN0b3BNYXJrZXJzID0gZnVuY3Rpb24odHMpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZWRpdG9yLnNlc3Npb247CiAgICAgICAgdHMuZm9yRWFjaChmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICBpZiAgKCFyYW5nZS5tYXJrZXJJZCkKICAgICAgICAgICAgICAgIHJhbmdlLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2Vfc25pcHBldC1tYXJrZXIiLCAidGV4dCIpOwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMucmVtb3ZlVGFic3RvcE1hcmtlcnMgPSBmdW5jdGlvbih0cykgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5lZGl0b3Iuc2Vzc2lvbjsKICAgICAgICB0cy5mb3JFYWNoKGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcklkKTsKICAgICAgICAgICAgcmFuZ2UubWFya2VySWQgPSBudWxsOwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciBpID0gcmFuZ2UudGFic3RvcC5pbmRleE9mKHJhbmdlKTsKICAgICAgICBpZiAoaSAhPSAtMSkgcmFuZ2UudGFic3RvcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgaSA9IHRoaXMucmFuZ2VzLmluZGV4T2YocmFuZ2UpOwogICAgICAgIGlmIChpICE9IC0xKSB0aGlzLnJhbmdlcy5zcGxpY2UoaSwgMSk7CiAgICAgICAgaSA9IHJhbmdlLnRhYnN0b3AucmFuZ2VMaXN0LnJhbmdlcy5pbmRleE9mKHJhbmdlKTsKICAgICAgICBpZiAoaSAhPSAtMSkgcmFuZ2UudGFic3RvcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VySWQpOwogICAgICAgIGlmICghcmFuZ2UudGFic3RvcC5sZW5ndGgpIHsKICAgICAgICAgICAgaSA9IHRoaXMudGFic3RvcHMuaW5kZXhPZihyYW5nZS50YWJzdG9wKTsKICAgICAgICAgICAgaWYgKGkgIT0gLTEpCiAgICAgICAgICAgICAgICB0aGlzLnRhYnN0b3BzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgaWYgKCF0aGlzLnRhYnN0b3BzLmxlbmd0aCkKICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG5ldyBIYXNoSGFuZGxlcigpOwogICAgdGhpcy5rZXlib2FyZEhhbmRsZXIuYmluZEtleXMoewogICAgICAgICJUYWIiOiBmdW5jdGlvbihlZCkgewogICAgICAgICAgICBpZiAoZXhwb3J0cy5zbmlwcGV0TWFuYWdlciAmJiBleHBvcnRzLnNuaXBwZXRNYW5hZ2VyLmV4cGFuZFdpdGhUYWIoZWQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVkLnRhYnN0b3BNYW5hZ2VyLnRhYk5leHQoMSk7CiAgICAgICAgfSwKICAgICAgICAiU2hpZnQtVGFiIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgZWQudGFic3RvcE1hbmFnZXIudGFiTmV4dCgtMSk7CiAgICAgICAgfSwKICAgICAgICAiRXNjIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgZWQudGFic3RvcE1hbmFnZXIuZGV0YWNoKCk7CiAgICAgICAgfSwKICAgICAgICAiUmV0dXJuIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwp9KS5jYWxsKFRhYnN0b3BNYW5hZ2VyLnByb3RvdHlwZSk7CgoKCnZhciBtb3ZlUG9pbnQgPSBmdW5jdGlvbihwb2ludCwgZGlmZikgewogICAgaWYgKHBvaW50LnJvdyA9PSAwKQogICAgICAgIHBvaW50LmNvbHVtbiArPSBkaWZmLmNvbHVtbjsKICAgIHBvaW50LnJvdyArPSBkaWZmLnJvdzsKfTsKCnZhciBtb3ZlUmVsYXRpdmUgPSBmdW5jdGlvbihwb2ludCwgc3RhcnQpIHsKICAgIGlmIChwb2ludC5yb3cgPT0gc3RhcnQucm93KQogICAgICAgIHBvaW50LmNvbHVtbiAtPSBzdGFydC5jb2x1bW47CiAgICBwb2ludC5yb3cgLT0gc3RhcnQucm93Owp9OwoKCnJlcXVpcmUoIi4vbGliL2RvbSIpLmltcG9ydENzc1N0cmluZygiXAouYWNlX3NuaXBwZXQtbWFya2VyIHtcCiAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAogICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE5NCwgMTkzLCAyMDgsIDAuMDkpO1wKICAgIGJvcmRlcjogMXB4IGRvdHRlZCByZ2JhKDIxMSwgMjA4LCAyMzUsIDAuNjIpO1wKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcCn0iKTsKCmV4cG9ydHMuc25pcHBldE1hbmFnZXIgPSBuZXcgU25pcHBldE1hbmFnZXIoKTsKCgp2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi9lZGl0b3IiKS5FZGl0b3I7CihmdW5jdGlvbigpIHsKICAgIHRoaXMuaW5zZXJ0U25pcHBldCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gZXhwb3J0cy5zbmlwcGV0TWFuYWdlci5pbnNlcnRTbmlwcGV0KHRoaXMsIGNvbnRlbnQsIG9wdGlvbnMpOwogICAgfTsKICAgIHRoaXMuZXhwYW5kU25pcHBldCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gZXhwb3J0cy5zbmlwcGV0TWFuYWdlci5leHBhbmRXaXRoVGFiKHRoaXMsIG9wdGlvbnMpOwogICAgfTsKfSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvZXh0L2VtbWV0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9lZGl0b3IiLCJhY2Uvc25pcHBldHMiLCJhY2UvcmFuZ2UiLCJhY2UvY29uZmlnIiwicmVzb3VyY2VzIiwicmVzb3VyY2VzIiwidGFiU3RvcHMiLCJyZXNvdXJjZXMiLCJ1dGlscyIsImFjdGlvbnMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIEhhc2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7CnZhciBFZGl0b3IgPSByZXF1aXJlKCIuLi9lZGl0b3IiKS5FZGl0b3I7CnZhciBzbmlwcGV0TWFuYWdlciA9IHJlcXVpcmUoIi4uL3NuaXBwZXRzIikuc25pcHBldE1hbmFnZXI7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBjb25maWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKdmFyIGVtbWV0LCBlbW1ldFBhdGg7CmZ1bmN0aW9uIEFjZUVtbWV0RWRpdG9yKCkge30KCkFjZUVtbWV0RWRpdG9yLnByb3RvdHlwZSA9IHsKICAgIHNldHVwQ29udGV4dDogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdGhpcy5hY2UgPSBlZGl0b3I7CiAgICAgICAgdGhpcy5pbmRlbnRhdGlvbiA9IGVkaXRvci5zZXNzaW9uLmdldFRhYlN0cmluZygpOwogICAgICAgIGlmICghZW1tZXQpCiAgICAgICAgICAgIGVtbWV0ID0gd2luZG93LmVtbWV0OwogICAgICAgIHZhciByZXNvdXJjZXMgPSBlbW1ldC5yZXNvdXJjZXMgfHwgZW1tZXQucmVxdWlyZSgicmVzb3VyY2VzIik7CiAgICAgICAgcmVzb3VyY2VzLnNldFZhcmlhYmxlKCJpbmRlbnRhdGlvbiIsIHRoaXMuaW5kZW50YXRpb24pOwogICAgICAgIHRoaXMuJHN5bnRheCA9IG51bGw7CiAgICAgICAgdGhpcy4kc3ludGF4ID0gdGhpcy5nZXRTeW50YXgoKTsKICAgIH0sCiAgICBnZXRTZWxlY3Rpb25SYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5hY2UuZ2V0U2VsZWN0aW9uUmFuZ2UoKTsKICAgICAgICB2YXIgZG9jID0gdGhpcy5hY2Uuc2Vzc2lvbi5kb2M7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc3RhcnQ6IGRvYy5wb3NpdGlvblRvSW5kZXgocmFuZ2Uuc3RhcnQpLAogICAgICAgICAgICBlbmQ6IGRvYy5wb3NpdGlvblRvSW5kZXgocmFuZ2UuZW5kKQogICAgICAgIH07CiAgICB9LAogICAgY3JlYXRlU2VsZWN0aW9uOiBmdW5jdGlvbihzdGFydCwgZW5kKSB7CiAgICAgICAgdmFyIGRvYyA9IHRoaXMuYWNlLnNlc3Npb24uZG9jOwogICAgICAgIHRoaXMuYWNlLnNlbGVjdGlvbi5zZXRSYW5nZSh7CiAgICAgICAgICAgIHN0YXJ0OiBkb2MuaW5kZXhUb1Bvc2l0aW9uKHN0YXJ0KSwKICAgICAgICAgICAgZW5kOiBkb2MuaW5kZXhUb1Bvc2l0aW9uKGVuZCkKICAgICAgICB9KTsKICAgIH0sCiAgICBnZXRDdXJyZW50TGluZVJhbmdlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYWNlID0gdGhpcy5hY2U7CiAgICAgICAgdmFyIHJvdyA9IGFjZS5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdzsKICAgICAgICB2YXIgbGluZUxlbmd0aCA9IGFjZS5zZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gYWNlLnNlc3Npb24uZG9jLnBvc2l0aW9uVG9JbmRleCh7cm93OiByb3csIGNvbHVtbjogMH0pOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0OiBpbmRleCwKICAgICAgICAgICAgZW5kOiBpbmRleCArIGxpbmVMZW5ndGgKICAgICAgICB9OwogICAgfSwKICAgIGdldENhcmV0UG9zOiBmdW5jdGlvbigpewogICAgICAgIHZhciBwb3MgPSB0aGlzLmFjZS5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgIHJldHVybiB0aGlzLmFjZS5zZXNzaW9uLmRvYy5wb3NpdGlvblRvSW5kZXgocG9zKTsKICAgIH0sCiAgICBzZXRDYXJldFBvczogZnVuY3Rpb24oaW5kZXgpewogICAgICAgIHZhciBwb3MgPSB0aGlzLmFjZS5zZXNzaW9uLmRvYy5pbmRleFRvUG9zaXRpb24oaW5kZXgpOwogICAgICAgIHRoaXMuYWNlLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpOwogICAgfSwKICAgIGdldEN1cnJlbnRMaW5lOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93ID0gdGhpcy5hY2UuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3c7CiAgICAgICAgcmV0dXJuIHRoaXMuYWNlLnNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgfSwKICAgIHJlcGxhY2VDb250ZW50OiBmdW5jdGlvbih2YWx1ZSwgc3RhcnQsIGVuZCwgbm9JbmRlbnQpIHsKICAgICAgICBpZiAoZW5kID09IG51bGwpCiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ID09IG51bGwgPyB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggOiBzdGFydDsKICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkKICAgICAgICAgICAgc3RhcnQgPSAwOyAgICAgICAgCiAgICAgICAgCiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuYWNlOwogICAgICAgIHZhciBkb2MgPSBlZGl0b3Iuc2Vzc2lvbi5kb2M7CiAgICAgICAgdmFyIHJhbmdlID0gUmFuZ2UuZnJvbVBvaW50cyhkb2MuaW5kZXhUb1Bvc2l0aW9uKHN0YXJ0KSwgZG9jLmluZGV4VG9Qb3NpdGlvbihlbmQpKTsKICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpOwogICAgICAgIAogICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0OwogICAgICAgIAogICAgICAgIHZhbHVlID0gdGhpcy4kdXBkYXRlVGFic3RvcHModmFsdWUpOwogICAgICAgIHNuaXBwZXRNYW5hZ2VyLmluc2VydFNuaXBwZXQoZWRpdG9yLCB2YWx1ZSk7CiAgICB9LAogICAgZ2V0Q29udGVudDogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5hY2UuZ2V0VmFsdWUoKTsKICAgIH0sCiAgICBnZXRTeW50YXg6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLiRzeW50YXgpCiAgICAgICAgICAgIHJldHVybiB0aGlzLiRzeW50YXg7CiAgICAgICAgdmFyIHN5bnRheCA9IHRoaXMuYWNlLnNlc3Npb24uJG1vZGVJZC5zcGxpdCgiLyIpLnBvcCgpOwogICAgICAgIGlmIChzeW50YXggPT0gImh0bWwiIHx8IHN5bnRheCA9PSAicGhwIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5hY2UuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5hY2Uuc2Vzc2lvbi5nZXRTdGF0ZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPSAic3RyaW5nIikKICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVbMF07CiAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZS5zcGxpdCgiLSIpOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlLmxlbmd0aCA+IDEpCiAgICAgICAgICAgICAgICAgICAgc3ludGF4ID0gc3RhdGVbMF07CiAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggPT0gInBocCIpCiAgICAgICAgICAgICAgICAgICAgc3ludGF4ID0gImh0bWwiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzeW50YXg7CiAgICB9LAogICAgZ2V0UHJvZmlsZU5hbWU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciByZXNvdXJjZXMgPSBlbW1ldC5yZXNvdXJjZXMgfHwgZW1tZXQucmVxdWlyZSgicmVzb3VyY2VzIik7CiAgICAgICAgc3dpdGNoICh0aGlzLmdldFN5bnRheCgpKSB7CiAgICAgICAgICBjYXNlICJjc3MiOiByZXR1cm4gImNzcyI7CiAgICAgICAgICBjYXNlICJ4bWwiOgogICAgICAgICAgY2FzZSAieHNsIjoKICAgICAgICAgICAgcmV0dXJuICJ4bWwiOwogICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgIHZhciBwcm9maWxlID0gcmVzb3VyY2VzLmdldFZhcmlhYmxlKCJwcm9maWxlIik7CiAgICAgICAgICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgICAgICAgIHByb2ZpbGUgPSB0aGlzLmFjZS5zZXNzaW9uLmdldExpbmVzKDAsMikuam9pbigiIikuc2VhcmNoKC88IURPQ1RZUEVbXj5dK1hIVE1ML2kpICE9IC0xID8gInhodG1sIjogImh0bWwiOwogICAgICAgICAgICByZXR1cm4gcHJvZmlsZTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHZhciBtb2RlID0gdGhpcy5hY2Uuc2Vzc2lvbi4kbW9kZTsKICAgICAgICAgICAgcmV0dXJuIG1vZGUuZW1tZXRDb25maWcgJiYgbW9kZS5lbW1ldENvbmZpZy5wcm9maWxlIHx8ICJ4aHRtbCI7CiAgICAgICAgfQogICAgfSwKICAgIHByb21wdDogZnVuY3Rpb24odGl0bGUpIHsKICAgICAgICByZXR1cm4gcHJvbXB0KHRpdGxlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hbGVydAogICAgfSwKICAgIGdldFNlbGVjdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYWNlLnNlc3Npb24uZ2V0VGV4dFJhbmdlKCk7CiAgICB9LAogICAgZ2V0RmlsZVBhdGg6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAiIjsKICAgIH0sCiAgICAkdXBkYXRlVGFic3RvcHM6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGJhc2UgPSAxMDAwOwogICAgICAgIHZhciB6ZXJvQmFzZSA9IDA7CiAgICAgICAgdmFyIGxhc3RaZXJvID0gbnVsbDsKICAgICAgICB2YXIgdHMgPSBlbW1ldC50YWJTdG9wcyB8fCBlbW1ldC5yZXF1aXJlKCd0YWJTdG9wcycpOwogICAgICAgIHZhciByZXNvdXJjZXMgPSBlbW1ldC5yZXNvdXJjZXMgfHwgZW1tZXQucmVxdWlyZSgicmVzb3VyY2VzIik7CiAgICAgICAgdmFyIHNldHRpbmdzID0gcmVzb3VyY2VzLmdldFZvY2FidWxhcnkoInVzZXIiKTsKICAgICAgICB2YXIgdGFic3RvcE9wdGlvbnMgPSB7CiAgICAgICAgICAgIHRhYnN0b3A6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgICAgIHZhciBncm91cCA9IHBhcnNlSW50KGRhdGEuZ3JvdXAsIDEwKTsKICAgICAgICAgICAgICAgIHZhciBpc1plcm8gPSBncm91cCA9PT0gMDsKICAgICAgICAgICAgICAgIGlmIChpc1plcm8pCiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSArK3plcm9CYXNlOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGdyb3VwICs9IGJhc2U7CgogICAgICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZGF0YS5wbGFjZWhvbGRlcjsKICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlcikgewogICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdHMucHJvY2Vzc1RleHQocGxhY2Vob2xkZXIsIHRhYnN0b3BPcHRpb25zKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gJyR7JyArIGdyb3VwICsgKHBsYWNlaG9sZGVyID8gJzonICsgcGxhY2Vob2xkZXIgOiAnJykgKyAnfSc7CgogICAgICAgICAgICAgICAgaWYgKGlzWmVybykgewogICAgICAgICAgICAgICAgICAgIGxhc3RaZXJvID0gW2RhdGEuc3RhcnQsIHJlc3VsdF07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXNjYXBlOiBmdW5jdGlvbihjaCkgewogICAgICAgICAgICAgICAgaWYgKGNoID09ICckJykgcmV0dXJuICdcXCQnOwogICAgICAgICAgICAgICAgaWYgKGNoID09ICdcXCcpIHJldHVybiAnXFxcXCc7CiAgICAgICAgICAgICAgICByZXR1cm4gY2g7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2YWx1ZSA9IHRzLnByb2Nlc3NUZXh0KHZhbHVlLCB0YWJzdG9wT3B0aW9ucyk7CgogICAgICAgIGlmIChzZXR0aW5ncy52YXJpYWJsZXNbJ2luc2VydF9maW5hbF90YWJzdG9wJ10gJiYgIS9cJFx7MFx9JC8udGVzdCh2YWx1ZSkpIHsKICAgICAgICAgICAgdmFsdWUgKz0gJyR7MH0nOwogICAgICAgIH0gZWxzZSBpZiAobGFzdFplcm8pIHsKICAgICAgICAgICAgdmFyIGNvbW1vbiA9IGVtbWV0LnV0aWxzID8gZW1tZXQudXRpbHMuY29tbW9uIDogZW1tZXQucmVxdWlyZSgndXRpbHMnKTsKICAgICAgICAgICAgdmFsdWUgPSBjb21tb24ucmVwbGFjZVN1YnN0cmluZyh2YWx1ZSwgJyR7MH0nLCBsYXN0WmVyb1swXSwgbGFzdFplcm9bMV0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9Cn07CgoKdmFyIGtleW1hcCA9IHsKICAgIGV4cGFuZF9hYmJyZXZpYXRpb246IHsibWFjIjogImN0cmwrYWx0K2UiLCAid2luIjogImFsdCtlIn0sCiAgICBtYXRjaF9wYWlyX291dHdhcmQ6IHsibWFjIjogImN0cmwrZCIsICJ3aW4iOiAiY3RybCssIn0sCiAgICBtYXRjaF9wYWlyX2lud2FyZDogeyJtYWMiOiAiY3RybCtqIiwgIndpbiI6ICJjdHJsK3NoaWZ0KzAifSwKICAgIG1hdGNoaW5nX3BhaXI6IHsibWFjIjogImN0cmwrYWx0K2oiLCAid2luIjogImFsdCtqIn0sCiAgICBuZXh0X2VkaXRfcG9pbnQ6ICJhbHQrcmlnaHQiLAogICAgcHJldl9lZGl0X3BvaW50OiAiYWx0K2xlZnQiLAogICAgdG9nZ2xlX2NvbW1lbnQ6IHsibWFjIjogImNvbW1hbmQrLyIsICJ3aW4iOiAiY3RybCsvIn0sCiAgICBzcGxpdF9qb2luX3RhZzogeyJtYWMiOiAic2hpZnQrY29tbWFuZCsnIiwgIndpbiI6ICJzaGlmdCtjdHJsK2AifSwKICAgIHJlbW92ZV90YWc6IHsibWFjIjogImNvbW1hbmQrJyIsICJ3aW4iOiAic2hpZnQrY3RybCs7In0sCiAgICBldmFsdWF0ZV9tYXRoX2V4cHJlc3Npb246IHsibWFjIjogInNoaWZ0K2NvbW1hbmQreSIsICJ3aW4iOiAic2hpZnQrY3RybCt5In0sCiAgICBpbmNyZW1lbnRfbnVtYmVyX2J5XzE6ICJjdHJsK3VwIiwKICAgIGRlY3JlbWVudF9udW1iZXJfYnlfMTogImN0cmwrZG93biIsCiAgICBpbmNyZW1lbnRfbnVtYmVyX2J5XzAxOiAiYWx0K3VwIiwKICAgIGRlY3JlbWVudF9udW1iZXJfYnlfMDE6ICJhbHQrZG93biIsCiAgICBpbmNyZW1lbnRfbnVtYmVyX2J5XzEwOiB7Im1hYyI6ICJhbHQrY29tbWFuZCt1cCIsICJ3aW4iOiAic2hpZnQrYWx0K3VwIn0sCiAgICBkZWNyZW1lbnRfbnVtYmVyX2J5XzEwOiB7Im1hYyI6ICJhbHQrY29tbWFuZCtkb3duIiwgIndpbiI6ICJzaGlmdCthbHQrZG93biJ9LAogICAgc2VsZWN0X25leHRfaXRlbTogeyJtYWMiOiAic2hpZnQrY29tbWFuZCsuIiwgIndpbiI6ICJzaGlmdCtjdHJsKy4ifSwKICAgIHNlbGVjdF9wcmV2aW91c19pdGVtOiB7Im1hYyI6ICJzaGlmdCtjb21tYW5kKywiLCAid2luIjogInNoaWZ0K2N0cmwrLCJ9LAogICAgcmVmbGVjdF9jc3NfdmFsdWU6IHsibWFjIjogInNoaWZ0K2NvbW1hbmQrciIsICJ3aW4iOiAic2hpZnQrY3RybCtyIn0sCgogICAgZW5jb2RlX2RlY29kZV9kYXRhX3VybDogeyJtYWMiOiAic2hpZnQrY3RybCtkIiwgIndpbiI6ICJjdHJsKycifSwKICAgIGV4cGFuZF9hYmJyZXZpYXRpb25fd2l0aF90YWI6ICJUYWIiLAogICAgd3JhcF93aXRoX2FiYnJldmlhdGlvbjogeyJtYWMiOiAic2hpZnQrY3RybCthIiwgIndpbiI6ICJzaGlmdCtjdHJsK2EifQp9OwoKdmFyIGVkaXRvclByb3h5ID0gbmV3IEFjZUVtbWV0RWRpdG9yKCk7CmV4cG9ydHMuY29tbWFuZHMgPSBuZXcgSGFzaEhhbmRsZXIoKTsKZXhwb3J0cy5ydW5FbW1ldENvbW1hbmQgPSBmdW5jdGlvbiBydW5FbW1ldENvbW1hbmQoZWRpdG9yKSB7CiAgICBpZiAodGhpcy5hY3Rpb24gPT0gImV4cGFuZF9hYmJyZXZpYXRpb25fd2l0aF90YWIiKSB7CiAgICAgICAgaWYgKCFlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHZhciBwb3MgPSBlZGl0b3Iuc2VsZWN0aW9uLmxlYWQ7CiAgICAgICAgdmFyIHRva2VuID0gZWRpdG9yLnNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICBpZiAodG9rZW4gJiYgL1xidGFnXGIvLnRlc3QodG9rZW4udHlwZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHRyeSB7CiAgICAgICAgZWRpdG9yUHJveHkuc2V0dXBDb250ZXh0KGVkaXRvcik7CiAgICAgICAgdmFyIGFjdGlvbnMgPSBlbW1ldC5hY3Rpb25zIHx8IGVtbWV0LnJlcXVpcmUoImFjdGlvbnMiKTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5hY3Rpb24gPT0gIndyYXBfd2l0aF9hYmJyZXZpYXRpb24iKSB7CiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgYWN0aW9ucy5ydW4oIndyYXBfd2l0aF9hYmJyZXZpYXRpb24iLCBlZGl0b3JQcm94eSk7CiAgICAgICAgICAgIH0sIDApOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgcmVzdWx0ID0gYWN0aW9ucy5ydW4odGhpcy5hY3Rpb24sIGVkaXRvclByb3h5KTsKICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmICghZW1tZXQpIHsKICAgICAgICAgICAgdmFyIGxvYWRpbmcgPSBleHBvcnRzLmxvYWQocnVuRW1tZXRDb21tYW5kLmJpbmQodGhpcywgZWRpdG9yKSk7CiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbiA9PSAiZXhwYW5kX2FiYnJldmlhdGlvbl93aXRoX3RhYiIpCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBsb2FkaW5nOwogICAgICAgIH0KICAgICAgICBlZGl0b3IuX3NpZ25hbCgiY2hhbmdlU3RhdHVzIiwgdHlwZW9mIGUgPT0gInN0cmluZyIgPyBlIDogZS5tZXNzYWdlKTsKICAgICAgICBjb25maWcud2FybihlKTsKICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7Cn07Cgpmb3IgKHZhciBjb21tYW5kIGluIGtleW1hcCkgewogICAgZXhwb3J0cy5jb21tYW5kcy5hZGRDb21tYW5kKHsKICAgICAgICBuYW1lOiAiZW1tZXQ6IiArIGNvbW1hbmQsCiAgICAgICAgYWN0aW9uOiBjb21tYW5kLAogICAgICAgIGJpbmRLZXk6IGtleW1hcFtjb21tYW5kXSwKICAgICAgICBleGVjOiBleHBvcnRzLnJ1bkVtbWV0Q29tbWFuZCwKICAgICAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCiAgICB9KTsKfQoKZXhwb3J0cy51cGRhdGVDb21tYW5kcyA9IGZ1bmN0aW9uKGVkaXRvciwgZW5hYmxlZCkgewogICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBlZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIoZXhwb3J0cy5jb21tYW5kcyk7CiAgICB9IGVsc2UgewogICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcihleHBvcnRzLmNvbW1hbmRzKTsKICAgIH0KfTsKCmV4cG9ydHMuaXNTdXBwb3J0ZWRNb2RlID0gZnVuY3Rpb24obW9kZSkgewogICAgaWYgKCFtb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobW9kZS5lbW1ldENvbmZpZykgcmV0dXJuIHRydWU7CiAgICB2YXIgaWQgPSBtb2RlLiRpZCB8fCBtb2RlOwogICAgcmV0dXJuIC9jc3N8bGVzc3xzY3NzfHNhc3N8c3R5bHVzfGh0bWx8cGhwfHR3aWd8ZWpzfGhhbmRsZWJhcnMvLnRlc3QoaWQpOwp9OwoKZXhwb3J0cy5pc0F2YWlsYWJsZSA9IGZ1bmN0aW9uKGVkaXRvciwgY29tbWFuZCkgewogICAgaWYgKC8oZXZhbHVhdGVfbWF0aF9leHByZXNzaW9ufGV4cGFuZF9hYmJyZXZpYXRpb24pJC8udGVzdChjb21tYW5kKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIHZhciBtb2RlID0gZWRpdG9yLnNlc3Npb24uJG1vZGU7CiAgICB2YXIgaXNTdXBwb3J0ZWQgPSBleHBvcnRzLmlzU3VwcG9ydGVkTW9kZShtb2RlKTsKICAgIGlmIChpc1N1cHBvcnRlZCAmJiBtb2RlLiRtb2RlcykgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGVkaXRvclByb3h5LnNldHVwQ29udGV4dChlZGl0b3IpOwogICAgICAgICAgICBpZiAoL2pzfHBocC8udGVzdChlZGl0b3JQcm94eS5nZXRTeW50YXgoKSkpCiAgICAgICAgICAgICAgICBpc1N1cHBvcnRlZCA9IGZhbHNlOwogICAgICAgIH0gY2F0Y2goZSkge30KICAgIH0KICAgIHJldHVybiBpc1N1cHBvcnRlZDsKfTsKCnZhciBvbkNoYW5nZU1vZGUgPSBmdW5jdGlvbihlLCB0YXJnZXQpIHsKICAgIHZhciBlZGl0b3IgPSB0YXJnZXQ7CiAgICBpZiAoIWVkaXRvcikKICAgICAgICByZXR1cm47CiAgICB2YXIgZW5hYmxlZCA9IGV4cG9ydHMuaXNTdXBwb3J0ZWRNb2RlKGVkaXRvci5zZXNzaW9uLiRtb2RlKTsKICAgIGlmIChlLmVuYWJsZUVtbWV0ID09PSBmYWxzZSkKICAgICAgICBlbmFibGVkID0gZmFsc2U7CiAgICBpZiAoZW5hYmxlZCkKICAgICAgICBleHBvcnRzLmxvYWQoKTsKICAgIGV4cG9ydHMudXBkYXRlQ29tbWFuZHMoZWRpdG9yLCBlbmFibGVkKTsKfTsKCmV4cG9ydHMubG9hZCA9IGZ1bmN0aW9uKGNiKSB7CiAgICBpZiAodHlwZW9mIGVtbWV0UGF0aCAhPT0gInN0cmluZyIpIHsKICAgICAgICBjb25maWcud2Fybigic2NyaXB0IGZvciBlbW1ldC1jb3JlIGlzIG5vdCBsb2FkZWQiKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBjb25maWcubG9hZE1vZHVsZShlbW1ldFBhdGgsIGZ1bmN0aW9uKCkgewogICAgICAgIGVtbWV0UGF0aCA9IG51bGw7CiAgICAgICAgY2IgJiYgY2IoKTsKICAgIH0pOwogICAgcmV0dXJuIHRydWU7Cn07CgpleHBvcnRzLkFjZUVtbWV0RWRpdG9yID0gQWNlRW1tZXRFZGl0b3I7CmNvbmZpZy5kZWZpbmVPcHRpb25zKEVkaXRvci5wcm90b3R5cGUsICJlZGl0b3IiLCB7CiAgICBlbmFibGVFbW1ldDogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHRoaXNbdmFsID8gIm9uIiA6ICJyZW1vdmVMaXN0ZW5lciJdKCJjaGFuZ2VNb2RlIiwgb25DaGFuZ2VNb2RlKTsKICAgICAgICAgICAgb25DaGFuZ2VNb2RlKHtlbmFibGVFbW1ldDogISF2YWx9LCB0aGlzKTsKICAgICAgICB9LAogICAgICAgIHZhbHVlOiB0cnVlCiAgICB9Cn0pOwoKZXhwb3J0cy5zZXRDb3JlID0gZnVuY3Rpb24oZSkgewogICAgaWYgKHR5cGVvZiBlID09ICJzdHJpbmciKQogICAgICAgZW1tZXRQYXRoID0gZTsKICAgIGVsc2UKICAgICAgIGVtbWV0ID0gZTsKfTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvZW1tZXQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-error_marker.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC9lcnJvcl9tYXJrZXIiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-keybinding_menu.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L21lbnVfdG9vbHMvb3ZlcmxheV9wYWdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIGRvbSA9IHJlcXVpcmUoIi4uLy4uL2xpYi9kb20iKTsKdmFyIGNzc1RleHQgPSAiI2FjZV9zZXR0aW5nc21lbnUsICNrYnNob3J0Y3V0bWVudSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGN0Y3O1wKY29sb3I6IGJsYWNrO1wKYm94LXNoYWRvdzogLTVweCA0cHggNXB4IHJnYmEoMTI2LCAxMjYsIDEyNiwgMC41NSk7XApwYWRkaW5nOiAxZW0gMC41ZW0gMmVtIDFlbTtcCm92ZXJmbG93OiBhdXRvO1wKcG9zaXRpb246IGFic29sdXRlO1wKbWFyZ2luOiAwO1wKYm90dG9tOiAwO1wKcmlnaHQ6IDA7XAp0b3A6IDA7XAp6LWluZGV4OiA5OTkxO1wKY3Vyc29yOiBkZWZhdWx0O1wKfVwKLmFjZV9kYXJrICNhY2Vfc2V0dGluZ3NtZW51LCAuYWNlX2RhcmsgI2tic2hvcnRjdXRtZW51IHtcCmJveC1zaGFkb3c6IC0yMHB4IDEwcHggMjVweCByZ2JhKDEyNiwgMTI2LCAxMjYsIDAuMjUpO1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5OmhvdmVyIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAwLCAxMDAsIDEwMCwgMC4xKTtcCnRyYW5zaXRpb246IGFsbCAwLjNzXAp9XAouYWNlX2Nsb3NlQnV0dG9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxNDYsIDE0NiwgMC41KTtcCmJvcmRlcjogMXB4IHNvbGlkICNGNDhBOEE7XApib3JkZXItcmFkaXVzOiA1MCU7XApwYWRkaW5nOiA3cHg7XApwb3NpdGlvbjogYWJzb2x1dGU7XApyaWdodDogLThweDtcCnRvcDogLThweDtcCnotaW5kZXg6IDEwMDAwMDtcCn1cCi5hY2VfY2xvc2VCdXR0b257XApiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTQ2LCAxNDYsIDAuOSk7XAp9XAouYWNlX29wdGlvbnNNZW51S2V5IHtcCmNvbG9yOiBkYXJrc2xhdGVibHVlO1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlX29wdGlvbnNNZW51Q29tbWFuZCB7XApjb2xvcjogZGFya2N5YW47XApmb250LXdlaWdodDogbm9ybWFsO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGlucHV0LCAuYWNlX29wdGlvbnNNZW51RW50cnkgYnV0dG9uIHtcCnZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XAp9XAouYWNlX29wdGlvbnNNZW51RW50cnkgYnV0dG9uW2FjZV9zZWxlY3RlZF9idXR0b249dHJ1ZV0ge1wKYmFja2dyb3VuZDogI2U3ZTdlNztcCmJveC1zaGFkb3c6IDFweCAwcHggMnB4IDBweCAjYWRhZGFkIGluc2V0O1wKYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbiB7XApiYWNrZ3JvdW5kOiB3aGl0ZTtcCmJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTtcCm1hcmdpbjogMHB4O1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbjpob3ZlcntcCmJhY2tncm91bmQ6ICNmMGYwZjA7XAp9IjsKZG9tLmltcG9ydENzc1N0cmluZyhjc3NUZXh0KTsKCm1vZHVsZS5leHBvcnRzLm92ZXJsYXlQYWdlID0gZnVuY3Rpb24gb3ZlcmxheVBhZ2UoZWRpdG9yLCBjb250ZW50RWxlbWVudCwgY2FsbGJhY2spIHsKICAgIHZhciBjbG9zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHZhciBpZ25vcmVGb2N1c091dCA9IGZhbHNlOwoKICAgIGZ1bmN0aW9uIGRvY3VtZW50RXNjTGlzdGVuZXIoZSkgewogICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7CiAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICAgIGlmICghY2xvc2VyKSByZXR1cm47CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGRvY3VtZW50RXNjTGlzdGVuZXIpOwogICAgICAgIGNsb3Nlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb3Nlcik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgY2xvc2VyID0gbnVsbDsKICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOwogICAgfQogICAgZnVuY3Rpb24gc2V0SWdub3JlRm9jdXNPdXQoaWdub3JlKSB7CiAgICAgICAgaWdub3JlRm9jdXNPdXQgPSBpZ25vcmU7CiAgICAgICAgaWYgKGlnbm9yZSkgewogICAgICAgICAgICBjbG9zZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJhdXRvIjsKICAgICAgICB9CiAgICB9CgogICAgY2xvc2VyLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyAnICsKICAgICAgICAncG9zaXRpb246IGZpeGVkOyB0b3A6MDsgYm90dG9tOjA7IGxlZnQ6MDsgcmlnaHQ6MDsnICsKICAgICAgICAnei1pbmRleDogOTk5MDsgJyArCiAgICAgICAgKGVkaXRvciA/ICdiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7JyA6ICcnKTsKICAgIGNsb3Nlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWlnbm9yZUZvY3VzT3V0KSB7CiAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgfQogICAgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZG9jdW1lbnRFc2NMaXN0ZW5lcik7CgogICAgY29udGVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9KTsKCiAgICBjbG9zZXIuYXBwZW5kQ2hpbGQoY29udGVudEVsZW1lbnQpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9zZXIpOwogICAgaWYgKGVkaXRvcikgewogICAgICAgIGVkaXRvci5ibHVyKCk7CiAgICB9CiAgICByZXR1cm4gewogICAgICAgIGNsb3NlOiBjbG9zZSwKICAgICAgICBzZXRJZ25vcmVGb2N1c091dDogc2V0SWdub3JlRm9jdXNPdXQKICAgIH07Cn07Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9tZW51X3Rvb2xzL2dldF9lZGl0b3Jfa2V5Ym9hcmRfc2hvcnRjdXRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9rZXlzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBrZXlzID0gcmVxdWlyZSgiLi4vLi4vbGliL2tleXMiKTsKbW9kdWxlLmV4cG9ydHMuZ2V0RWRpdG9yS2V5Ym9yZFNob3J0Y3V0cyA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgdmFyIEtFWV9NT0RTID0ga2V5cy5LRVlfTU9EUzsKICAgIHZhciBrZXliaW5kaW5ncyA9IFtdOwogICAgdmFyIGNvbW1hbmRNYXAgPSB7fTsKICAgIGVkaXRvci5rZXlCaW5kaW5nLiRoYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhhbmRsZXIpIHsKICAgICAgICB2YXIgY2tiID0gaGFuZGxlci5jb21tYW5kS2V5QmluZGluZzsKICAgICAgICBmb3IgKHZhciBpIGluIGNrYikgewogICAgICAgICAgICB2YXIga2V5ID0gaS5yZXBsYWNlKC8oXnwtKVx3L2csIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHgudG9VcHBlckNhc2UoKTsgfSk7CiAgICAgICAgICAgIHZhciBjb21tYW5kcyA9IGNrYltpXTsKICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1hbmRzKSkKICAgICAgICAgICAgICAgIGNvbW1hbmRzID0gW2NvbW1hbmRzXTsKICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChmdW5jdGlvbihjb21tYW5kKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgIT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCAgPSBjb21tYW5kLm5hbWU7CiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZE1hcFtjb21tYW5kXSkgewogICAgICAgICAgICAgICAgICAgIGNvbW1hbmRNYXBbY29tbWFuZF0ua2V5ICs9ICJ8IiArIGtleTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcFtjb21tYW5kXSA9IHtrZXk6IGtleSwgY29tbWFuZDogY29tbWFuZH07CiAgICAgICAgICAgICAgICAgICAga2V5YmluZGluZ3MucHVzaChjb21tYW5kTWFwW2NvbW1hbmRdKTsKICAgICAgICAgICAgICAgIH0gICAgICAgICAKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSk7CiAgICByZXR1cm4ga2V5YmluZGluZ3M7Cn07Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9rZXliaW5kaW5nX21lbnUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvZWRpdG9yIiwiYWNlL2V4dC9tZW51X3Rvb2xzL292ZXJsYXlfcGFnZSIsImFjZS9leHQvbWVudV90b29scy9nZXRfZWRpdG9yX2tleWJvYXJkX3Nob3J0Y3V0cyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBFZGl0b3IgPSByZXF1aXJlKCIuLi9lZGl0b3IiKS5FZGl0b3I7CiAgICBmdW5jdGlvbiBzaG93S2V5Ym9hcmRTaG9ydGN1dHMgKGVkaXRvcikgewogICAgICAgIGlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgna2JzaG9ydGN1dG1lbnUnKSkgewogICAgICAgICAgICB2YXIgb3ZlcmxheVBhZ2UgPSByZXF1aXJlKCcuL21lbnVfdG9vbHMvb3ZlcmxheV9wYWdlJykub3ZlcmxheVBhZ2U7CiAgICAgICAgICAgIHZhciBnZXRFZGl0b3JLZXlib3JkU2hvcnRjdXRzID0gcmVxdWlyZSgnLi9tZW51X3Rvb2xzL2dldF9lZGl0b3Jfa2V5Ym9hcmRfc2hvcnRjdXRzJykuZ2V0RWRpdG9yS2V5Ym9yZFNob3J0Y3V0czsKICAgICAgICAgICAgdmFyIGtiID0gZ2V0RWRpdG9yS2V5Ym9yZFNob3J0Y3V0cyhlZGl0b3IpOwogICAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgICAgdmFyIGNvbW1hbmRzID0ga2IucmVkdWNlKGZ1bmN0aW9uKHByZXZpb3VzLCBjdXJyZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcHJldmlvdXMgKyAnPGRpdiBjbGFzcz0iYWNlX29wdGlvbnNNZW51RW50cnkiPjxzcGFuIGNsYXNzPSJhY2Vfb3B0aW9uc01lbnVDb21tYW5kIj4nIAogICAgICAgICAgICAgICAgICAgICsgY3VycmVudC5jb21tYW5kICsgJzwvc3Bhbj4gOiAnCiAgICAgICAgICAgICAgICAgICAgKyAnPHNwYW4gY2xhc3M9ImFjZV9vcHRpb25zTWVudUtleSI+JyArIGN1cnJlbnQua2V5ICsgJzwvc3Bhbj48L2Rpdj4nOwogICAgICAgICAgICB9LCAnJyk7CgogICAgICAgICAgICBlbC5pZCA9ICdrYnNob3J0Y3V0bWVudSc7CiAgICAgICAgICAgIGVsLmlubmVySFRNTCA9ICc8aDE+S2V5Ym9hcmQgU2hvcnRjdXRzPC9oMT4nICsgY29tbWFuZHMgKyAnPC9kaXY+JzsKICAgICAgICAgICAgb3ZlcmxheVBhZ2UoZWRpdG9yLCBlbCk7CiAgICAgICAgfQogICAgfQogICAgbW9kdWxlLmV4cG9ydHMuaW5pdCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIEVkaXRvci5wcm90b3R5cGUuc2hvd0tleWJvYXJkU2hvcnRjdXRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNob3dLZXlib2FyZFNob3J0Y3V0cyh0aGlzKTsKICAgICAgICB9OwogICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbewogICAgICAgICAgICBuYW1lOiAic2hvd0tleWJvYXJkU2hvcnRjdXRzIiwKICAgICAgICAgICAgYmluZEtleToge3dpbjogIkN0cmwtQWx0LWgiLCBtYWM6ICJDb21tYW5kLUFsdC1oIn0sCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgbGluZSkgewogICAgICAgICAgICAgICAgZWRpdG9yLnNob3dLZXlib2FyZFNob3J0Y3V0cygpOwogICAgICAgICAgICB9CiAgICAgICAgfV0pOwogICAgfTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvZXh0L2tleWJpbmRpbmdfbWVudSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-language_tools.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9saWIvbGFuZyIsImFjZS9yYW5nZSIsImFjZS9yYW5nZV9saXN0IiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS90b2tlbml6ZXIiLCJhY2UvY2xpcGJvYXJkIiwiYWNlL2xpYi9kb20iLCJhY2UvZWRpdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBsYW5nID0gcmVxdWlyZSgiLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBSYW5nZUxpc3QgPSByZXF1aXJlKCIuL3JhbmdlX2xpc3QiKS5SYW5nZUxpc3Q7CnZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7CnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuL3Rva2VuaXplciIpLlRva2VuaXplcjsKdmFyIGNsaXBib2FyZCA9IHJlcXVpcmUoIi4vY2xpcGJvYXJkIik7Cgp2YXIgVkFSSUFCTEVTID0gewogICAgQ1VSUkVOVF9XT1JEOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLnNlc3Npb24uZ2V0VGV4dFJhbmdlKGVkaXRvci5zZXNzaW9uLmdldFdvcmRSYW5nZSgpKTsKICAgIH0sCiAgICBTRUxFQ1RJT046IGZ1bmN0aW9uKGVkaXRvciwgbmFtZSwgaW5kZW50YXRpb24pIHsKICAgICAgICB2YXIgdGV4dCA9IGVkaXRvci5zZXNzaW9uLmdldFRleHRSYW5nZSgpOwogICAgICAgIGlmIChpbmRlbnRhdGlvbikKICAgICAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXG5ccj8oWyBcdF0qXFMpL2csICJcbiIgKyBpbmRlbnRhdGlvbiArICIkMSIpOwogICAgICAgIHJldHVybiB0ZXh0OwogICAgfSwKICAgIENVUlJFTlRfTElORTogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zZXNzaW9uLmdldExpbmUoZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCkucm93KTsKICAgIH0sCiAgICBQUkVWX0xJTkU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyAtIDEpOwogICAgfSwKICAgIExJTkVfSU5ERVg6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3c7CiAgICB9LAogICAgTElORV9OVU1CRVI6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3cgKyAxOwogICAgfSwKICAgIFNPRlRfVEFCUzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkgPyAiWUVTIiA6ICJOTyI7CiAgICB9LAogICAgVEFCX1NJWkU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5nZXRUYWJTaXplKCk7CiAgICB9LAogICAgQ0xJUEJPQVJEOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gY2xpcGJvYXJkLmdldFRleHQgJiYgY2xpcGJvYXJkLmdldFRleHQoKTsKICAgIH0sCiAgICBGSUxFTkFNRTogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIC9bXi9cXF0qJC8uZXhlYyh0aGlzLkZJTEVQQVRIKGVkaXRvcikpWzBdOwogICAgfSwKICAgIEZJTEVOQU1FX0JBU0U6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiAvW14vXFxdKiQvLmV4ZWModGhpcy5GSUxFUEFUSChlZGl0b3IpKVswXS5yZXBsYWNlKC9cLlteLl0qJC8sICIiKTsKICAgIH0sCiAgICBESVJFQ1RPUlk6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiB0aGlzLkZJTEVQQVRIKGVkaXRvcikucmVwbGFjZSgvW14vXFxdKiQvLCAiIik7CiAgICB9LAogICAgRklMRVBBVEg6IGZ1bmN0aW9uKGVkaXRvcikgeyByZXR1cm4gIi9ub3QgaW1wbGVtZW50ZWQudHh0IjsgfSwKICAgIFdPUktTUEFDRV9OQU1FOiBmdW5jdGlvbigpIHsgcmV0dXJuICJVbmtub3duIjsgfSwKICAgIEZVTExOQU1FOiBmdW5jdGlvbigpIHsgcmV0dXJuICJVbmtub3duIjsgfSwKICAgIEJMT0NLX0NPTU1FTlRfU1RBUlQ6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBtb2RlID0gZWRpdG9yLnNlc3Npb24uJG1vZGUgfHwge307CiAgICAgICAgcmV0dXJuIG1vZGUuYmxvY2tDb21tZW50ICYmIG1vZGUuYmxvY2tDb21tZW50LnN0YXJ0IHx8ICIiOwogICAgfSwKICAgIEJMT0NLX0NPTU1FTlRfRU5EOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgbW9kZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlIHx8IHt9OwogICAgICAgIHJldHVybiBtb2RlLmJsb2NrQ29tbWVudCAmJiBtb2RlLmJsb2NrQ29tbWVudC5lbmQgfHwgIiI7CiAgICB9LAogICAgTElORV9DT01NRU5UOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgbW9kZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlIHx8IHt9OwogICAgICAgIHJldHVybiBtb2RlLmxpbmVDb21tZW50U3RhcnQgfHwgIiI7CiAgICB9LAogICAgQ1VSUkVOVF9ZRUFSOiBkYXRlLmJpbmQobnVsbCwge3llYXI6ICJudW1lcmljIn0pLAogICAgQ1VSUkVOVF9ZRUFSX1NIT1JUOiBkYXRlLmJpbmQobnVsbCwge3llYXI6ICIyLWRpZ2l0In0pLAogICAgQ1VSUkVOVF9NT05USDogZGF0ZS5iaW5kKG51bGwsIHttb250aDogIm51bWVyaWMifSksCiAgICBDVVJSRU5UX01PTlRIX05BTUU6IGRhdGUuYmluZChudWxsLCB7bW9udGg6ICJsb25nIn0pLAogICAgQ1VSUkVOVF9NT05USF9OQU1FX1NIT1JUOiBkYXRlLmJpbmQobnVsbCwge21vbnRoOiAic2hvcnQifSksCiAgICBDVVJSRU5UX0RBVEU6IGRhdGUuYmluZChudWxsLCB7ZGF5OiAiMi1kaWdpdCJ9KSwKICAgIENVUlJFTlRfREFZX05BTUU6IGRhdGUuYmluZChudWxsLCB7d2Vla2RheTogImxvbmcifSksCiAgICBDVVJSRU5UX0RBWV9OQU1FX1NIT1JUOiBkYXRlLmJpbmQobnVsbCwge3dlZWtkYXk6ICJzaG9ydCJ9KSwKICAgIENVUlJFTlRfSE9VUjogZGF0ZS5iaW5kKG51bGwsIHtob3VyOiAiMi1kaWdpdCIsIGhvdXIxMjogZmFsc2V9KSwKICAgIENVUlJFTlRfTUlOVVRFOiBkYXRlLmJpbmQobnVsbCwge21pbnV0ZTogIjItZGlnaXQifSksCiAgICBDVVJSRU5UX1NFQ09ORDogZGF0ZS5iaW5kKG51bGwsIHtzZWNvbmQ6ICIyLWRpZ2l0In0pCn07CgpWQVJJQUJMRVMuU0VMRUNURURfVEVYVCA9IFZBUklBQkxFUy5TRUxFQ1RJT047CgpmdW5jdGlvbiBkYXRlKGRhdGVGb3JtYXQpIHsKICAgIHZhciBzdHIgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCJlbi11cyIsIGRhdGVGb3JtYXQpOwogICAgcmV0dXJuIHN0ci5sZW5ndGggPT0gMSA/ICIwIiArIHN0ciA6IHN0cjsKfQoKdmFyIFNuaXBwZXRNYW5hZ2VyID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLnNuaXBwZXRNYXAgPSB7fTsKICAgIHRoaXMuc25pcHBldE5hbWVNYXAgPSB7fTsKfTsKCihmdW5jdGlvbigpIHsKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKICAgIAogICAgdGhpcy5nZXRUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gU25pcHBldE1hbmFnZXIuJHRva2VuaXplciB8fCB0aGlzLmNyZWF0ZVRva2VuaXplcigpOwogICAgfTsKICAgIAogICAgdGhpcy5jcmVhdGVUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBmdW5jdGlvbiBUYWJzdG9wVG9rZW4oc3RyKSB7CiAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMSk7CiAgICAgICAgICAgIGlmICgvXlxkKyQvLnRlc3Qoc3RyKSkKICAgICAgICAgICAgICAgIHJldHVybiBbe3RhYnN0b3BJZDogcGFyc2VJbnQoc3RyLCAxMCl9XTsKICAgICAgICAgICAgcmV0dXJuIFt7dGV4dDogc3RyfV07CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGVzY2FwZShjaCkgewogICAgICAgICAgICByZXR1cm4gIig/OlteXFxcXCIgKyBjaCArICJdfFxcXFwuKSI7CiAgICAgICAgfQogICAgICAgIHZhciBmb3JtYXRNYXRjaGVyID0gewogICAgICAgICAgICByZWdleDogIi8oIiArIGVzY2FwZSgiLyIpICsgIispLyIsIAogICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdmFyIHRzID0gc3RhY2tbMF07CiAgICAgICAgICAgICAgICB0cy5mbXRTdHJpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgdHMuZ3VhcmQgPSB2YWwuc2xpY2UoMSwgLTEpOwogICAgICAgICAgICAgICAgdHMuZmxhZyA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0OiAiZm9ybWF0U3RyaW5nIgogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgU25pcHBldE1hbmFnZXIuJHRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIoewogICAgICAgICAgICBzdGFydDogWwogICAgICAgICAgICAgICAge3JlZ2V4OiAvXFwuLywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB2YWxbMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJ9IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYCRcXCIuaW5kZXhPZihjaCkgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBbdmFsXTsKICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvfS8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzdGFjay5sZW5ndGggPyBzdGFjay5zaGlmdCgpIDogdmFsXTsKICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXCQoPzpcZCt8XHcrKS8sIG9uTWF0Y2g6IFRhYnN0b3BUb2tlbn0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cJFx7W1xkQS1aX2Etel0rLywgb25NYXRjaDogZnVuY3Rpb24oc3RyLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IFRhYnN0b3BUb2tlbihzdHIuc3Vic3RyKDEpKTsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRbMF0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0OwogICAgICAgICAgICAgICAgfSwgbmV4dDogInNuaXBwZXRWYXIifSwKICAgICAgICAgICAgICAgIHtyZWdleDogL1xuLywgdG9rZW46ICJuZXdsaW5lIiwgbWVyZ2U6IGZhbHNlfQogICAgICAgICAgICBdLAogICAgICAgICAgICBzbmlwcGV0VmFyOiBbCiAgICAgICAgICAgICAgICB7cmVnZXg6ICJcXHwiICsgZXNjYXBlKCJcXHwiKSArICIqXFx8Iiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2hvaWNlcyA9IHZhbC5zbGljZSgxLCAtMSkucmVwbGFjZSgvXFxbLHxcXF18LC9nLCBmdW5jdGlvbihvcGVyYXRvcikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IubGVuZ3RoID09IDIgPyBvcGVyYXRvclsxXSA6ICJceDAwIjsKICAgICAgICAgICAgICAgICAgICB9KS5zcGxpdCgiXHgwMCIpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmNob2ljZXMgPSBjaG9pY2VzOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbY2hvaWNlc1swXV07CiAgICAgICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAgICAgIGZvcm1hdE1hdGNoZXIsCiAgICAgICAgICAgICAgICB7cmVnZXg6ICIoW146fVxcXFxdfFxcXFwuKSo6PyIsIHRva2VuOiAiIiwgbmV4dDogInN0YXJ0In0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nOiBbCiAgICAgICAgICAgICAgICB7cmVnZXg6IC86Lywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICYmIHN0YWNrWzBdLmV4cGVjdEVsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbMF0uZXhwZWN0RWxzZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFja1swXS5pZkVuZCA9IHtlbHNlRW5kOiBzdGFja1swXX07CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbc3RhY2tbMF0uaWZFbmRdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjoiOwogICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cXC4vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHZhbFsxXTsKICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoImAkXFwiLmluZGV4T2YoY2gpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBjaDsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAibiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gInQiKQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAiXHQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJ1bFVMRSIuaW5kZXhPZihjaCkgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHtjaGFuZ2VDYXNlOiBjaCwgbG9jYWw6IGNoID4gImEifTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbF07CiAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgICAgIHtyZWdleDogIi9cXHcqfSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0KQogICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmZsYWcgPSB2YWwuc2xpY2UoMSwgLTEpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IG5leHQgJiYgbmV4dC50YWJzdG9wSWQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtuZXh0IHx8IHZhbF07CiAgICAgICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAgICAgIHtyZWdleDogL1wkKD86XGQrfFx3KykvLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbe3RleHQ6IHZhbC5zbGljZSgxKX1dOwogICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cJHtcdysvLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHt0ZXh0OiB2YWwuc2xpY2UoMil9OwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodG9rZW4pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbdG9rZW5dOwogICAgICAgICAgICAgICAgfSwgbmV4dDogImZvcm1hdFN0cmluZ1ZhciJ9LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXG4vLCB0b2tlbjogIm5ld2xpbmUiLCBtZXJnZTogZmFsc2V9LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvfS8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IG5leHQgJiYgbmV4dC50YWJzdG9wSWQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtuZXh0IHx8IHZhbF07CiAgICAgICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifQogICAgICAgICAgICBdLAogICAgICAgICAgICBmb3JtYXRTdHJpbmdWYXI6IFsKICAgICAgICAgICAgICAgIHtyZWdleDogLzpcL1x3K30vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciB0cyA9IHN0YWNrWzBdOwogICAgICAgICAgICAgICAgICAgIHRzLmZvcm1hdEZ1bmN0aW9uID0gdmFsLnNsaWNlKDIsIC0xKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3N0YWNrLnNoaWZ0KCldOwogICAgICAgICAgICAgICAgfSwgbmV4dDogImZvcm1hdFN0cmluZyJ9LAogICAgICAgICAgICAgICAgZm9ybWF0TWF0Y2hlciwKICAgICAgICAgICAgICAgIHtyZWdleDogLzpbXD9cLStdPy8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFsxXSA9PSAiKyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmlmRW5kID0gc3RhY2tbMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbFsxXSA9PSAiPyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmV4cGVjdEVsc2UgPSB0cnVlOwogICAgICAgICAgICAgICAgfSwgbmV4dDogImZvcm1hdFN0cmluZyJ9LAogICAgICAgICAgICAgICAge3JlZ2V4OiAiKFteOn1cXFxcXXxcXFxcLikqOj8iLCB0b2tlbjogIiIsIG5leHQ6ICJmb3JtYXRTdHJpbmcifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIFNuaXBwZXRNYW5hZ2VyLiR0b2tlbml6ZXI7CiAgICB9OwoKICAgIHRoaXMudG9rZW5pemVUbVNuaXBwZXQgPSBmdW5jdGlvbihzdHIsIHN0YXJ0U3RhdGUpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKHN0ciwgc3RhcnRTdGF0ZSkudG9rZW5zLm1hcChmdW5jdGlvbih4KSB7CiAgICAgICAgICAgIHJldHVybiB4LnZhbHVlIHx8IHg7CiAgICAgICAgfSk7CiAgICB9OwogICAgCiAgICB0aGlzLmdldFZhcmlhYmxlVmFsdWUgPSBmdW5jdGlvbihlZGl0b3IsIG5hbWUsIGluZGVudGF0aW9uKSB7CiAgICAgICAgaWYgKC9eXGQrJC8udGVzdChuYW1lKSkKICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhcmlhYmxlcy5fXyB8fCB7fSlbbmFtZV0gfHwgIiI7CiAgICAgICAgaWYgKC9eW0EtWl1cZCskLy50ZXN0KG5hbWUpKQogICAgICAgICAgICByZXR1cm4gKHRoaXMudmFyaWFibGVzW25hbWVbMF0gKyAiX18iXSB8fCB7fSlbbmFtZS5zdWJzdHIoMSldIHx8ICIiOwogICAgICAgIAogICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL15UTV8vLCAiIik7CiAgICAgICAgaWYgKCF0aGlzLnZhcmlhYmxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFyaWFibGVzW25hbWVdOwogICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tuYW1lXShlZGl0b3IsIG5hbWUsIGluZGVudGF0aW9uKTsKICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICIiIDogdmFsdWU7CiAgICB9OwogICAgCiAgICB0aGlzLnZhcmlhYmxlcyA9IFZBUklBQkxFUzsKICAgIHRoaXMudG1TdHJGb3JtYXQgPSBmdW5jdGlvbihzdHIsIGNoLCBlZGl0b3IpIHsKICAgICAgICBpZiAoIWNoLmZtdCkgcmV0dXJuIHN0cjsKICAgICAgICB2YXIgZmxhZyA9IGNoLmZsYWcgfHwgIiI7CiAgICAgICAgdmFyIHJlID0gY2guZ3VhcmQ7CiAgICAgICAgcmUgPSBuZXcgUmVnRXhwKHJlLCBmbGFnLnJlcGxhY2UoL1teZ2ltXS9nLCAiIikpOwogICAgICAgIHZhciBmbXRUb2tlbnMgPSB0eXBlb2YgY2guZm10ID09ICJzdHJpbmciID8gdGhpcy50b2tlbml6ZVRtU25pcHBldChjaC5mbXQsICJmb3JtYXRTdHJpbmciKSA6IGNoLmZtdDsKICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgICAgIHZhciBmb3JtYXR0ZWQgPSBzdHIucmVwbGFjZShyZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBvbGRBcmdzID0gX3NlbGYudmFyaWFibGVzLl9fOwogICAgICAgICAgICBfc2VsZi52YXJpYWJsZXMuX18gPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CiAgICAgICAgICAgIHZhciBmbXRQYXJ0cyA9IF9zZWxmLnJlc29sdmVWYXJpYWJsZXMoZm10VG9rZW5zLCBlZGl0b3IpOwogICAgICAgICAgICB2YXIgZ0NoYW5nZUNhc2UgPSAiRSI7CiAgICAgICAgICAgIGZvciAodmFyIGkgID0gMDsgaSA8IGZtdFBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgY2ggPSBmbXRQYXJ0c1tpXTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ggPT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgICAgICAgICBmbXRQYXJ0c1tpXSA9ICIiOwogICAgICAgICAgICAgICAgICAgIGlmIChjaC5jaGFuZ2VDYXNlICYmIGNoLmxvY2FsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gZm10UGFydHNbaSArIDFdOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCAmJiB0eXBlb2YgbmV4dCA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoLmNoYW5nZUNhc2UgPT0gInUiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdFBhcnRzW2ldID0gbmV4dFswXS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdFBhcnRzW2ldID0gbmV4dFswXS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10UGFydHNbaSArIDFdID0gbmV4dC5zdWJzdHIoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoLmNoYW5nZUNhc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZ0NoYW5nZUNhc2UgPSBjaC5jaGFuZ2VDYXNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ0NoYW5nZUNhc2UgPT0gIlUiKSB7CiAgICAgICAgICAgICAgICAgICAgZm10UGFydHNbaV0gPSBjaC50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChnQ2hhbmdlQ2FzZSA9PSAiTCIpIHsKICAgICAgICAgICAgICAgICAgICBmbXRQYXJ0c1tpXSA9IGNoLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX3NlbGYudmFyaWFibGVzLl9fID0gb2xkQXJnczsKICAgICAgICAgICAgcmV0dXJuIGZtdFBhcnRzLmpvaW4oIiIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICB9OwogICAgCiAgICB0aGlzLnRtRm9ybWF0RnVuY3Rpb24gPSBmdW5jdGlvbihzdHIsIGNoLCBlZGl0b3IpIHsKICAgICAgICBpZiAoY2guZm9ybWF0RnVuY3Rpb24gPT0gInVwY2FzZSIpCiAgICAgICAgICAgIHJldHVybiBzdHIudG9VcHBlckNhc2UoKTsKICAgICAgICBpZiAoY2guZm9ybWF0RnVuY3Rpb24gPT0gImRvd25jYXNlIikKICAgICAgICAgICAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiBzdHI7CiAgICB9OwoKICAgIHRoaXMucmVzb2x2ZVZhcmlhYmxlcyA9IGZ1bmN0aW9uKHNuaXBwZXQsIGVkaXRvcikgewogICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICB2YXIgaW5kZW50YXRpb24gPSAiIjsKICAgICAgICB2YXIgYWZ0ZXJOZXdMaW5lID0gdHJ1ZTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNuaXBwZXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNoID0gc25pcHBldFtpXTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBjaCA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2gpOwogICAgICAgICAgICAgICAgaWYgKGNoID09ICJcbiIpIHsKICAgICAgICAgICAgICAgICAgICBhZnRlck5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGluZGVudGF0aW9uID0gIiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChhZnRlck5ld0xpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiA9IC9eXHQqLy5leGVjKGNoKVswXTsKICAgICAgICAgICAgICAgICAgICBhZnRlck5ld0xpbmUgPSAvXFMvLnRlc3QoY2gpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFjaCkgIGNvbnRpbnVlOwogICAgICAgICAgICBhZnRlck5ld0xpbmUgPSBmYWxzZTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjaC5mbXRTdHJpbmcpIHsKICAgICAgICAgICAgICAgIHZhciBqID0gc25pcHBldC5pbmRleE9mKGNoLCBpICsgMSk7CiAgICAgICAgICAgICAgICBpZiAoaiA9PSAtMSkgaiA9IHNuaXBwZXQubGVuZ3RoOwogICAgICAgICAgICAgICAgY2guZm10ID0gc25pcHBldC5zbGljZShpICsgMSwgaik7CiAgICAgICAgICAgICAgICBpID0gajsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGNoLnRleHQpIHsKICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFyaWFibGVWYWx1ZShlZGl0b3IsIGNoLnRleHQsIGluZGVudGF0aW9uKSArICIiOwogICAgICAgICAgICAgICAgaWYgKGNoLmZtdFN0cmluZykKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG1TdHJGb3JtYXQodmFsdWUsIGNoLCBlZGl0b3IpOwogICAgICAgICAgICAgICAgaWYgKGNoLmZvcm1hdEZ1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50bUZvcm1hdEZ1bmN0aW9uKHZhbHVlLCBjaCwgZWRpdG9yKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmICFjaC5pZkVuZCkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBnb3RvTmV4dChjaCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZSAmJiBjaC5pZkVuZCkgewogICAgICAgICAgICAgICAgICAgIGdvdG9OZXh0KGNoLmlmRW5kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChjaC5lbHNlRW5kKSB7CiAgICAgICAgICAgICAgICBnb3RvTmV4dChjaC5lbHNlRW5kKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjaC50YWJzdG9wSWQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2gpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNoLmNoYW5nZUNhc2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGdvdG9OZXh0KGNoKSB7CiAgICAgICAgICAgIHZhciBpMSA9IHNuaXBwZXQuaW5kZXhPZihjaCwgaSArIDEpOwogICAgICAgICAgICBpZiAoaTEgIT0gLTEpCiAgICAgICAgICAgICAgICBpID0gaTE7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwoKICAgIHRoaXMuaW5zZXJ0U25pcHBldEZvclNlbGVjdGlvbiA9IGZ1bmN0aW9uKGVkaXRvciwgc25pcHBldFRleHQpIHsKICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgdmFyIGxpbmUgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgIHZhciB0YWJTdHJpbmcgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgICAgIAogICAgICAgIGlmIChjdXJzb3IuY29sdW1uIDwgaW5kZW50U3RyaW5nLmxlbmd0aCkKICAgICAgICAgICAgaW5kZW50U3RyaW5nID0gaW5kZW50U3RyaW5nLnNsaWNlKDAsIGN1cnNvci5jb2x1bW4pOwoKICAgICAgICBzbmlwcGV0VGV4dCA9IHNuaXBwZXRUZXh0LnJlcGxhY2UoL1xyL2csICIiKTsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy50b2tlbml6ZVRtU25pcHBldChzbmlwcGV0VGV4dCk7CiAgICAgICAgdG9rZW5zID0gdGhpcy5yZXNvbHZlVmFyaWFibGVzKHRva2VucywgZWRpdG9yKTsKICAgICAgICB0b2tlbnMgPSB0b2tlbnMubWFwKGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgaWYgKHggPT0gIlxuIikKICAgICAgICAgICAgICAgIHJldHVybiB4ICsgaW5kZW50U3RyaW5nOwogICAgICAgICAgICBpZiAodHlwZW9mIHggPT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICByZXR1cm4geC5yZXBsYWNlKC9cdC9nLCB0YWJTdHJpbmcpOwogICAgICAgICAgICByZXR1cm4geDsKICAgICAgICB9KTsKICAgICAgICB2YXIgdGFic3RvcHMgPSBbXTsKICAgICAgICB0b2tlbnMuZm9yRWFjaChmdW5jdGlvbihwLCBpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPSAib2JqZWN0IikKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIGlkID0gcC50YWJzdG9wSWQ7CiAgICAgICAgICAgIHZhciB0cyA9IHRhYnN0b3BzW2lkXTsKICAgICAgICAgICAgaWYgKCF0cykgewogICAgICAgICAgICAgICAgdHMgPSB0YWJzdG9wc1tpZF0gPSBbXTsKICAgICAgICAgICAgICAgIHRzLmluZGV4ID0gaWQ7CiAgICAgICAgICAgICAgICB0cy52YWx1ZSA9ICIiOwogICAgICAgICAgICAgICAgdHMucGFyZW50cyA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0cy5pbmRleE9mKHApICE9PSAtMSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKHAuY2hvaWNlcyAmJiAhdHMuY2hvaWNlcykKICAgICAgICAgICAgICAgIHRzLmNob2ljZXMgPSBwLmNob2ljZXM7CiAgICAgICAgICAgIHRzLnB1c2gocCk7CiAgICAgICAgICAgIHZhciBpMSA9IHRva2Vucy5pbmRleE9mKHAsIGkgKyAxKTsKICAgICAgICAgICAgaWYgKGkxID09PSAtMSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRva2Vucy5zbGljZShpICsgMSwgaTEpOwogICAgICAgICAgICB2YXIgaXNOZXN0ZWQgPSB2YWx1ZS5zb21lKGZ1bmN0aW9uKHQpIHtyZXR1cm4gdHlwZW9mIHQgPT09ICJvYmplY3QiO30pOwogICAgICAgICAgICBpZiAoaXNOZXN0ZWQgJiYgIXRzLnZhbHVlKSB7CiAgICAgICAgICAgICAgICB0cy52YWx1ZSA9IHZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCAmJiAoIXRzLnZhbHVlIHx8IHR5cGVvZiB0cy52YWx1ZSAhPT0gInN0cmluZyIpKSB7CiAgICAgICAgICAgICAgICB0cy52YWx1ZSA9IHZhbHVlLmpvaW4oIiIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGFic3RvcHMuZm9yRWFjaChmdW5jdGlvbih0cykge3RzLmxlbmd0aCA9IDA7fSk7CiAgICAgICAgdmFyIGV4cGFuZGluZyA9IHt9OwogICAgICAgIGZ1bmN0aW9uIGNvcHlWYWx1ZSh2YWwpIHsKICAgICAgICAgICAgdmFyIGNvcHkgPSBbXTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBwID0gdmFsW2ldOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZGluZ1twLnRhYnN0b3BJZF0pCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIHZhciBqID0gdmFsLmxhc3RJbmRleE9mKHAsIGkgLSAxKTsKICAgICAgICAgICAgICAgICAgICBwID0gY29weVtqXSB8fCB7dGFic3RvcElkOiBwLnRhYnN0b3BJZH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb3B5W2ldID0gcDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY29weTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHAgPSB0b2tlbnNbaV07CiAgICAgICAgICAgIGlmICh0eXBlb2YgcCAhPSAib2JqZWN0IikKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgaWQgPSBwLnRhYnN0b3BJZDsKICAgICAgICAgICAgdmFyIHRzID0gdGFic3RvcHNbaWRdOwogICAgICAgICAgICB2YXIgaTEgPSB0b2tlbnMuaW5kZXhPZihwLCBpICsgMSk7CiAgICAgICAgICAgIGlmIChleHBhbmRpbmdbaWRdKSB7CiAgICAgICAgICAgICAgICBpZiAoZXhwYW5kaW5nW2lkXSA9PT0gcCkgewogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBleHBhbmRpbmdbaWRdOwogICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGV4cGFuZGluZykuZm9yRWFjaChmdW5jdGlvbihwYXJlbnRJZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0cy5wYXJlbnRzW3BhcmVudElkXSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBleHBhbmRpbmdbaWRdID0gcDsKICAgICAgICAgICAgdmFyIHZhbHVlID0gdHMudmFsdWU7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgdmFsdWUgPSBjb3B5VmFsdWUodmFsdWUpOwogICAgICAgICAgICBlbHNlIGlmIChwLmZtdCkKICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50bVN0ckZvcm1hdCh2YWx1ZSwgcCwgZWRpdG9yKTsKICAgICAgICAgICAgdG9rZW5zLnNwbGljZS5hcHBseSh0b2tlbnMsIFtpICsgMSwgTWF0aC5tYXgoMCwgaTEgLSBpKV0uY29uY2F0KHZhbHVlLCBwKSk7CgogICAgICAgICAgICBpZiAodHMuaW5kZXhPZihwKSA9PT0gLTEpCiAgICAgICAgICAgICAgICB0cy5wdXNoKHApOwogICAgICAgIH0KICAgICAgICB2YXIgcm93ID0gMCwgY29sdW1uID0gMDsKICAgICAgICB2YXIgdGV4dCA9ICIiOwogICAgICAgIHRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiB0ID09PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gdC5zcGxpdCgiXG4iKTsKICAgICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgcm93ICs9IGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICBjb2x1bW4gKz0gdC5sZW5ndGg7CiAgICAgICAgICAgICAgICB0ZXh0ICs9IHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodCkgewogICAgICAgICAgICAgICAgaWYgKCF0LnN0YXJ0KQogICAgICAgICAgICAgICAgICAgIHQuc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0LmVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHJhbmdlID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CiAgICAgICAgdmFyIGVuZCA9IGVkaXRvci5zZXNzaW9uLnJlcGxhY2UocmFuZ2UsIHRleHQpOwoKICAgICAgICB2YXIgdGFic3RvcE1hbmFnZXIgPSBuZXcgVGFic3RvcE1hbmFnZXIoZWRpdG9yKTsKICAgICAgICB2YXIgc2VsZWN0aW9uSWQgPSBlZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSAmJiBlZGl0b3Iuc2VsZWN0aW9uLmluZGV4OwogICAgICAgIHRhYnN0b3BNYW5hZ2VyLmFkZFRhYnN0b3BzKHRhYnN0b3BzLCByYW5nZS5zdGFydCwgZW5kLCBzZWxlY3Rpb25JZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmluc2VydFNuaXBwZXQgPSBmdW5jdGlvbihlZGl0b3IsIHNuaXBwZXRUZXh0KSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIGlmIChlZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkKICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5zZXJ0U25pcHBldEZvclNlbGVjdGlvbihlZGl0b3IsIHNuaXBwZXRUZXh0KTsKICAgICAgICAKICAgICAgICBlZGl0b3IuZm9yRWFjaFNlbGVjdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2VsZi5pbnNlcnRTbmlwcGV0Rm9yU2VsZWN0aW9uKGVkaXRvciwgc25pcHBldFRleHQpOwogICAgICAgIH0sIG51bGwsIHtrZWVwT3JkZXI6IHRydWV9KTsKICAgICAgICAKICAgICAgICBpZiAoZWRpdG9yLnRhYnN0b3BNYW5hZ2VyKQogICAgICAgICAgICBlZGl0b3IudGFic3RvcE1hbmFnZXIudGFiTmV4dCgpOwogICAgfTsKCiAgICB0aGlzLiRnZXRTY29wZSA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBzY29wZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlLiRpZCB8fCAiIjsKICAgICAgICBzY29wZSA9IHNjb3BlLnNwbGl0KCIvIikucG9wKCk7CiAgICAgICAgaWYgKHNjb3BlID09PSAiaHRtbCIgfHwgc2NvcGUgPT09ICJwaHAiKSB7CiAgICAgICAgICAgIGlmIChzY29wZSA9PT0gInBocCIgJiYgIWVkaXRvci5zZXNzaW9uLiRtb2RlLmlubGluZVBocCkgCiAgICAgICAgICAgICAgICBzY29wZSA9ICJodG1sIjsKICAgICAgICAgICAgdmFyIGMgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIHN0YXRlID0gZWRpdG9yLnNlc3Npb24uZ2V0U3RhdGUoYy5yb3cpOwogICAgICAgICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAib2JqZWN0IikgewogICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RhdGUuc3Vic3RyaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3Vic3RyaW5nKDAsIDMpID09ICJqcy0iKQogICAgICAgICAgICAgICAgICAgIHNjb3BlID0gImphdmFzY3JpcHQiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3Vic3RyaW5nKDAsIDQpID09ICJjc3MtIikKICAgICAgICAgICAgICAgICAgICBzY29wZSA9ICJjc3MiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUuc3Vic3RyaW5nKDAsIDQpID09ICJwaHAtIikKICAgICAgICAgICAgICAgICAgICBzY29wZSA9ICJwaHAiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBzY29wZTsKICAgIH07CgogICAgdGhpcy5nZXRBY3RpdmVTY29wZXMgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgc2NvcGUgPSB0aGlzLiRnZXRTY29wZShlZGl0b3IpOwogICAgICAgIHZhciBzY29wZXMgPSBbc2NvcGVdOwogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIGlmIChzbmlwcGV0TWFwW3Njb3BlXSAmJiBzbmlwcGV0TWFwW3Njb3BlXS5pbmNsdWRlU2NvcGVzKSB7CiAgICAgICAgICAgIHNjb3Blcy5wdXNoLmFwcGx5KHNjb3Blcywgc25pcHBldE1hcFtzY29wZV0uaW5jbHVkZVNjb3Blcyk7CiAgICAgICAgfQogICAgICAgIHNjb3Blcy5wdXNoKCJfIik7CiAgICAgICAgcmV0dXJuIHNjb3BlczsKICAgIH07CgogICAgdGhpcy5leHBhbmRXaXRoVGFiID0gZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHZhciByZXN1bHQgPSBlZGl0b3IuZm9yRWFjaFNlbGVjdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kU25pcHBldEZvclNlbGVjdGlvbihlZGl0b3IsIG9wdGlvbnMpOwogICAgICAgIH0sIG51bGwsIHtrZWVwT3JkZXI6IHRydWV9KTsKICAgICAgICBpZiAocmVzdWx0ICYmIGVkaXRvci50YWJzdG9wTWFuYWdlcikKICAgICAgICAgICAgZWRpdG9yLnRhYnN0b3BNYW5hZ2VyLnRhYk5leHQoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIAogICAgdGhpcy5leHBhbmRTbmlwcGV0Rm9yU2VsZWN0aW9uID0gZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgIHZhciBsaW5lID0gZWRpdG9yLnNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICB2YXIgYmVmb3JlID0gbGluZS5zdWJzdHJpbmcoMCwgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgdmFyIGFmdGVyID0gbGluZS5zdWJzdHIoY3Vyc29yLmNvbHVtbik7CgogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIHZhciBzbmlwcGV0OwogICAgICAgIHRoaXMuZ2V0QWN0aXZlU2NvcGVzKGVkaXRvcikuc29tZShmdW5jdGlvbihzY29wZSkgewogICAgICAgICAgICB2YXIgc25pcHBldHMgPSBzbmlwcGV0TWFwW3Njb3BlXTsKICAgICAgICAgICAgaWYgKHNuaXBwZXRzKQogICAgICAgICAgICAgICAgc25pcHBldCA9IHRoaXMuZmluZE1hdGNoaW5nU25pcHBldChzbmlwcGV0cywgYmVmb3JlLCBhZnRlcik7CiAgICAgICAgICAgIHJldHVybiAhIXNuaXBwZXQ7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgaWYgKCFzbmlwcGV0KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kcnlSdW4pCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGVkaXRvci5zZXNzaW9uLmRvYy5yZW1vdmVJbkxpbmUoY3Vyc29yLnJvdywKICAgICAgICAgICAgY3Vyc29yLmNvbHVtbiAtIHNuaXBwZXQucmVwbGFjZUJlZm9yZS5sZW5ndGgsCiAgICAgICAgICAgIGN1cnNvci5jb2x1bW4gKyBzbmlwcGV0LnJlcGxhY2VBZnRlci5sZW5ndGgKICAgICAgICApOwoKICAgICAgICB0aGlzLnZhcmlhYmxlcy5NX18gPSBzbmlwcGV0Lm1hdGNoQmVmb3JlOwogICAgICAgIHRoaXMudmFyaWFibGVzLlRfXyA9IHNuaXBwZXQubWF0Y2hBZnRlcjsKICAgICAgICB0aGlzLmluc2VydFNuaXBwZXRGb3JTZWxlY3Rpb24oZWRpdG9yLCBzbmlwcGV0LmNvbnRlbnQpOwoKICAgICAgICB0aGlzLnZhcmlhYmxlcy5NX18gPSB0aGlzLnZhcmlhYmxlcy5UX18gPSBudWxsOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLmZpbmRNYXRjaGluZ1NuaXBwZXQgPSBmdW5jdGlvbihzbmlwcGV0TGlzdCwgYmVmb3JlLCBhZnRlcikgewogICAgICAgIGZvciAodmFyIGkgPSBzbmlwcGV0TGlzdC5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgdmFyIHMgPSBzbmlwcGV0TGlzdFtpXTsKICAgICAgICAgICAgaWYgKHMuc3RhcnRSZSAmJiAhcy5zdGFydFJlLnRlc3QoYmVmb3JlKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAocy5lbmRSZSAmJiAhcy5lbmRSZS50ZXN0KGFmdGVyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoIXMuc3RhcnRSZSAmJiAhcy5lbmRSZSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgcy5tYXRjaEJlZm9yZSA9IHMuc3RhcnRSZSA/IHMuc3RhcnRSZS5leGVjKGJlZm9yZSkgOiBbIiJdOwogICAgICAgICAgICBzLm1hdGNoQWZ0ZXIgPSBzLmVuZFJlID8gcy5lbmRSZS5leGVjKGFmdGVyKSA6IFsiIl07CiAgICAgICAgICAgIHMucmVwbGFjZUJlZm9yZSA9IHMudHJpZ2dlclJlID8gcy50cmlnZ2VyUmUuZXhlYyhiZWZvcmUpWzBdIDogIiI7CiAgICAgICAgICAgIHMucmVwbGFjZUFmdGVyID0gcy5lbmRUcmlnZ2VyUmUgPyBzLmVuZFRyaWdnZXJSZS5leGVjKGFmdGVyKVswXSA6ICIiOwogICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuc25pcHBldE1hcCA9IHt9OwogICAgdGhpcy5zbmlwcGV0TmFtZU1hcCA9IHt9OwogICAgdGhpcy5yZWdpc3RlciA9IGZ1bmN0aW9uKHNuaXBwZXRzLCBzY29wZSkgewogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIHZhciBzbmlwcGV0TmFtZU1hcCA9IHRoaXMuc25pcHBldE5hbWVNYXA7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIAogICAgICAgIGlmICghc25pcHBldHMpIAogICAgICAgICAgICBzbmlwcGV0cyA9IFtdOwogICAgICAgIAogICAgICAgIGZ1bmN0aW9uIHdyYXBSZWdleHAoc3JjKSB7CiAgICAgICAgICAgIGlmIChzcmMgJiYgIS9eXF4/XCguKlwpXCQ/JHxeXFxiJC8udGVzdChzcmMpKQogICAgICAgICAgICAgICAgc3JjID0gIig/OiIgKyBzcmMgKyAiKSI7CgogICAgICAgICAgICByZXR1cm4gc3JjIHx8ICIiOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBndWFyZGVkUmVnZXhwKHJlLCBndWFyZCwgb3BlbmluZykgewogICAgICAgICAgICByZSA9IHdyYXBSZWdleHAocmUpOwogICAgICAgICAgICBndWFyZCA9IHdyYXBSZWdleHAoZ3VhcmQpOwogICAgICAgICAgICBpZiAob3BlbmluZykgewogICAgICAgICAgICAgICAgcmUgPSBndWFyZCArIHJlOwogICAgICAgICAgICAgICAgaWYgKHJlICYmIHJlW3JlLmxlbmd0aCAtIDFdICE9ICIkIikKICAgICAgICAgICAgICAgICAgICByZSA9IHJlICsgIiQiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmUgPSByZSArIGd1YXJkOwogICAgICAgICAgICAgICAgaWYgKHJlICYmIHJlWzBdICE9ICJeIikKICAgICAgICAgICAgICAgICAgICByZSA9ICJeIiArIHJlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHJlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGFkZFNuaXBwZXQocykgewogICAgICAgICAgICBpZiAoIXMuc2NvcGUpCiAgICAgICAgICAgICAgICBzLnNjb3BlID0gc2NvcGUgfHwgIl8iOwogICAgICAgICAgICBzY29wZSA9IHMuc2NvcGU7CiAgICAgICAgICAgIGlmICghc25pcHBldE1hcFtzY29wZV0pIHsKICAgICAgICAgICAgICAgIHNuaXBwZXRNYXBbc2NvcGVdID0gW107CiAgICAgICAgICAgICAgICBzbmlwcGV0TmFtZU1hcFtzY29wZV0gPSB7fTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG1hcCA9IHNuaXBwZXROYW1lTWFwW3Njb3BlXTsKICAgICAgICAgICAgaWYgKHMubmFtZSkgewogICAgICAgICAgICAgICAgdmFyIG9sZCA9IG1hcFtzLm5hbWVdOwogICAgICAgICAgICAgICAgaWYgKG9sZCkKICAgICAgICAgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIob2xkKTsKICAgICAgICAgICAgICAgIG1hcFtzLm5hbWVdID0gczsKICAgICAgICAgICAgfQogICAgICAgICAgICBzbmlwcGV0TWFwW3Njb3BlXS5wdXNoKHMpOwoKICAgICAgICAgICAgaWYgKHMudGFiVHJpZ2dlciAmJiAhcy50cmlnZ2VyKSB7CiAgICAgICAgICAgICAgICBpZiAoIXMuZ3VhcmQgJiYgL15cdy8udGVzdChzLnRhYlRyaWdnZXIpKQogICAgICAgICAgICAgICAgICAgIHMuZ3VhcmQgPSAiXFxiIjsKICAgICAgICAgICAgICAgIHMudHJpZ2dlciA9IGxhbmcuZXNjYXBlUmVnRXhwKHMudGFiVHJpZ2dlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghcy50cmlnZ2VyICYmICFzLmd1YXJkICYmICFzLmVuZFRyaWdnZXIgJiYgIXMuZW5kR3VhcmQpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgICAgICBzLnN0YXJ0UmUgPSBndWFyZGVkUmVnZXhwKHMudHJpZ2dlciwgcy5ndWFyZCwgdHJ1ZSk7CiAgICAgICAgICAgIHMudHJpZ2dlclJlID0gbmV3IFJlZ0V4cChzLnRyaWdnZXIpOwoKICAgICAgICAgICAgcy5lbmRSZSA9IGd1YXJkZWRSZWdleHAocy5lbmRUcmlnZ2VyLCBzLmVuZEd1YXJkLCB0cnVlKTsKICAgICAgICAgICAgcy5lbmRUcmlnZ2VyUmUgPSBuZXcgUmVnRXhwKHMuZW5kVHJpZ2dlcik7CiAgICAgICAgfQoKICAgICAgICBpZiAoc25pcHBldHMgJiYgc25pcHBldHMuY29udGVudCkKICAgICAgICAgICAgYWRkU25pcHBldChzbmlwcGV0cyk7CiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzbmlwcGV0cykpCiAgICAgICAgICAgIHNuaXBwZXRzLmZvckVhY2goYWRkU25pcHBldCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5fc2lnbmFsKCJyZWdpc3RlclNuaXBwZXRzIiwge3Njb3BlOiBzY29wZX0pOwogICAgfTsKICAgIHRoaXMudW5yZWdpc3RlciA9IGZ1bmN0aW9uKHNuaXBwZXRzLCBzY29wZSkgewogICAgICAgIHZhciBzbmlwcGV0TWFwID0gdGhpcy5zbmlwcGV0TWFwOwogICAgICAgIHZhciBzbmlwcGV0TmFtZU1hcCA9IHRoaXMuc25pcHBldE5hbWVNYXA7CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZVNuaXBwZXQocykgewogICAgICAgICAgICB2YXIgbmFtZU1hcCA9IHNuaXBwZXROYW1lTWFwW3Muc2NvcGV8fHNjb3BlXTsKICAgICAgICAgICAgaWYgKG5hbWVNYXAgJiYgbmFtZU1hcFtzLm5hbWVdKSB7CiAgICAgICAgICAgICAgICBkZWxldGUgbmFtZU1hcFtzLm5hbWVdOwogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHNuaXBwZXRNYXBbcy5zY29wZXx8c2NvcGVdOwogICAgICAgICAgICAgICAgdmFyIGkgPSBtYXAgJiYgbWFwLmluZGV4T2Yocyk7CiAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKQogICAgICAgICAgICAgICAgICAgIG1hcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHNuaXBwZXRzLmNvbnRlbnQpCiAgICAgICAgICAgIHJlbW92ZVNuaXBwZXQoc25pcHBldHMpOwogICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc25pcHBldHMpKQogICAgICAgICAgICBzbmlwcGV0cy5mb3JFYWNoKHJlbW92ZVNuaXBwZXQpOwogICAgfTsKICAgIHRoaXMucGFyc2VTbmlwcGV0RmlsZSA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cci9nLCAiIik7CiAgICAgICAgdmFyIGxpc3QgPSBbXSwgc25pcHBldCA9IHt9OwogICAgICAgIHZhciByZSA9IC9eIy4qfF4oe1tcc1xTXSp9KVxzKiR8XihcUyspICguKikkfF4oKD86XG4qXHQuKikrKS9nbTsKICAgICAgICB2YXIgbTsKICAgICAgICB3aGlsZSAobSA9IHJlLmV4ZWMoc3RyKSkgewogICAgICAgICAgICBpZiAobVsxXSkgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0ID0gSlNPTi5wYXJzZShtWzFdKTsKICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goc25pcHBldCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICB9IGlmIChtWzRdKSB7CiAgICAgICAgICAgICAgICBzbmlwcGV0LmNvbnRlbnQgPSBtWzRdLnJlcGxhY2UoL15cdC9nbSwgIiIpOwogICAgICAgICAgICAgICAgbGlzdC5wdXNoKHNuaXBwZXQpOwogICAgICAgICAgICAgICAgc25pcHBldCA9IHt9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIGtleSA9IG1bMl0sIHZhbCA9IG1bM107CiAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICJyZWdleCIpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZ3VhcmRSZSA9IC9cLygoPzpbXlwvXFxdfFxcLikqKXwkL2c7CiAgICAgICAgICAgICAgICAgICAgc25pcHBldC5ndWFyZCA9IGd1YXJkUmUuZXhlYyh2YWwpWzFdOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQudHJpZ2dlciA9IGd1YXJkUmUuZXhlYyh2YWwpWzFdOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQuZW5kVHJpZ2dlciA9IGd1YXJkUmUuZXhlYyh2YWwpWzFdOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQuZW5kR3VhcmQgPSBndWFyZFJlLmV4ZWModmFsKVsxXTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09ICJzbmlwcGV0IikgewogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQudGFiVHJpZ2dlciA9IHZhbC5tYXRjaCgvXlxTKi8pWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICghc25pcHBldC5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICBzbmlwcGV0Lm5hbWUgPSB2YWw7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNuaXBwZXRba2V5XSA9IHZhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlzdDsKICAgIH07CiAgICB0aGlzLmdldFNuaXBwZXRCeU5hbWUgPSBmdW5jdGlvbihuYW1lLCBlZGl0b3IpIHsKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHRoaXMuc25pcHBldE5hbWVNYXA7CiAgICAgICAgdmFyIHNuaXBwZXQ7CiAgICAgICAgdGhpcy5nZXRBY3RpdmVTY29wZXMoZWRpdG9yKS5zb21lKGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgICAgIHZhciBzbmlwcGV0cyA9IHNuaXBwZXRNYXBbc2NvcGVdOwogICAgICAgICAgICBpZiAoc25pcHBldHMpCiAgICAgICAgICAgICAgICBzbmlwcGV0ID0gc25pcHBldHNbbmFtZV07CiAgICAgICAgICAgIHJldHVybiAhIXNuaXBwZXQ7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgcmV0dXJuIHNuaXBwZXQ7CiAgICB9OwoKfSkuY2FsbChTbmlwcGV0TWFuYWdlci5wcm90b3R5cGUpOwoKCnZhciBUYWJzdG9wTWFuYWdlciA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgaWYgKGVkaXRvci50YWJzdG9wTWFuYWdlcikKICAgICAgICByZXR1cm4gZWRpdG9yLnRhYnN0b3BNYW5hZ2VyOwogICAgZWRpdG9yLnRhYnN0b3BNYW5hZ2VyID0gdGhpczsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24gPSBsYW5nLmRlbGF5ZWRDYWxsKHRoaXMub25DaGFuZ2VTZWxlY3Rpb24uYmluZCh0aGlzKSkuc2NoZWR1bGU7CiAgICB0aGlzLiRvbkNoYW5nZVNlc3Npb24gPSB0aGlzLm9uQ2hhbmdlU2Vzc2lvbi5iaW5kKHRoaXMpOwogICAgdGhpcy4kb25BZnRlckV4ZWMgPSB0aGlzLm9uQWZ0ZXJFeGVjLmJpbmQodGhpcyk7CiAgICB0aGlzLmF0dGFjaChlZGl0b3IpOwp9OwooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmF0dGFjaCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHRoaXMuaW5kZXggPSAwOwogICAgICAgIHRoaXMucmFuZ2VzID0gW107CiAgICAgICAgdGhpcy50YWJzdG9wcyA9IFtdOwogICAgICAgIHRoaXMuJG9wZW5UYWJzdG9wcyA9IG51bGw7CiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYnN0b3AgPSBudWxsOwoKICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKICAgICAgICB0aGlzLmVkaXRvci5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgICAgIHRoaXMuZWRpdG9yLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCB0aGlzLiRvbkNoYW5nZVNlbGVjdGlvbik7CiAgICAgICAgdGhpcy5lZGl0b3Iub24oImNoYW5nZVNlc3Npb24iLCB0aGlzLiRvbkNoYW5nZVNlc3Npb24pOwogICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLm9uKCJhZnRlckV4ZWMiLCB0aGlzLiRvbkFmdGVyRXhlYyk7CiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy50YWJzdG9wcy5mb3JFYWNoKHRoaXMucmVtb3ZlVGFic3RvcE1hcmtlcnMsIHRoaXMpOwogICAgICAgIHRoaXMucmFuZ2VzID0gbnVsbDsKICAgICAgICB0aGlzLnRhYnN0b3BzID0gbnVsbDsKICAgICAgICB0aGlzLnNlbGVjdGVkVGFic3RvcCA9IG51bGw7CiAgICAgICAgdGhpcy5lZGl0b3IucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKICAgICAgICB0aGlzLmVkaXRvci5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuZWRpdG9yLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2VTZXNzaW9uIiwgdGhpcy4kb25DaGFuZ2VTZXNzaW9uKTsKICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5yZW1vdmVMaXN0ZW5lcigiYWZ0ZXJFeGVjIiwgdGhpcy4kb25BZnRlckV4ZWMpOwogICAgICAgIHRoaXMuZWRpdG9yLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMua2V5Ym9hcmRIYW5kbGVyKTsKICAgICAgICB0aGlzLmVkaXRvci50YWJzdG9wTWFuYWdlciA9IG51bGw7CiAgICAgICAgdGhpcy5lZGl0b3IgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgICAgICB2YXIgaXNSZW1vdmUgPSBkZWx0YS5hY3Rpb25bMF0gPT0gInIiOwogICAgICAgIHZhciBwYXJlbnRzID0gdGhpcy5zZWxlY3RlZFRhYnN0b3AgJiYgdGhpcy5zZWxlY3RlZFRhYnN0b3AucGFyZW50cyB8fCB7fTsKICAgICAgICB2YXIgdGFic3RvcHMgPSAodGhpcy50YWJzdG9wcyB8fCBbXSkuc2xpY2UoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhYnN0b3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0cyA9IHRhYnN0b3BzW2ldOwogICAgICAgICAgICB2YXIgYWN0aXZlID0gdHMgPT0gdGhpcy5zZWxlY3RlZFRhYnN0b3AgfHwgcGFyZW50c1t0cy5pbmRleF07CiAgICAgICAgICAgIHRzLnJhbmdlTGlzdC4kYmlhcyA9IGFjdGl2ZSA/IDAgOiAxOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiB0cyAhPT0gdGhpcy5zZWxlY3RlZFRhYnN0b3ApIHsKICAgICAgICAgICAgICAgIHZhciBwYXJlbnRBY3RpdmUgPSB0cy5wYXJlbnRzICYmIHRzLnBhcmVudHNbdGhpcy5zZWxlY3RlZFRhYnN0b3AuaW5kZXhdOwogICAgICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSB0cy5yYW5nZUxpc3QucG9pbnRJbmRleChkZWx0YS5zdGFydCwgcGFyZW50QWN0aXZlKTsKICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBzdGFydEluZGV4IDwgMCA/IC1zdGFydEluZGV4IC0gMSA6IHN0YXJ0SW5kZXggKyAxOwogICAgICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gdHMucmFuZ2VMaXN0LnBvaW50SW5kZXgoZGVsdGEuZW5kLCBwYXJlbnRBY3RpdmUpOwogICAgICAgICAgICAgICAgZW5kSW5kZXggPSBlbmRJbmRleCA8IDAgPyAtZW5kSW5kZXggLSAxIDogZW5kSW5kZXggLSAxOwogICAgICAgICAgICAgICAgdmFyIHRvUmVtb3ZlID0gdHMucmFuZ2VMaXN0LnJhbmdlcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRvUmVtb3ZlLmxlbmd0aDsgaisrKQogICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUmFuZ2UodG9SZW1vdmVbal0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRzLnJhbmdlTGlzdC4kb25DaGFuZ2UoZGVsdGEpOwogICAgICAgIH0KICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZWRpdG9yLnNlc3Npb247CiAgICAgICAgaWYgKCF0aGlzLiRpbkNoYW5nZSAmJiBpc1JlbW92ZSAmJiBzZXNzaW9uLmdldExlbmd0aCgpID09IDEgJiYgIXNlc3Npb24uZ2V0VmFsdWUoKSkKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgIH07CiAgICB0aGlzLnVwZGF0ZUxpbmtlZEZpZWxkcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB0cyA9IHRoaXMuc2VsZWN0ZWRUYWJzdG9wOwogICAgICAgIGlmICghdHMgfHwgIXRzLmhhc0xpbmtlZFJhbmdlcyB8fCAhdHMuZmlyc3ROb25MaW5rZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLiRpbkNoYW5nZSA9IHRydWU7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLmVkaXRvci5zZXNzaW9uOwogICAgICAgIHZhciB0ZXh0ID0gc2Vzc2lvbi5nZXRUZXh0UmFuZ2UodHMuZmlyc3ROb25MaW5rZWQpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHJhbmdlID0gdHNbaV07CiAgICAgICAgICAgIGlmICghcmFuZ2UubGlua2VkKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHZhciBvcmlnaW5hbCA9IHJhbmdlLm9yaWdpbmFsOwogICAgICAgICAgICB2YXIgZm10ID0gZXhwb3J0cy5zbmlwcGV0TWFuYWdlci50bVN0ckZvcm1hdCh0ZXh0LCBvcmlnaW5hbCwgdGhpcy5lZGl0b3IpOwogICAgICAgICAgICBzZXNzaW9uLnJlcGxhY2UocmFuZ2UsIGZtdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuJGluQ2hhbmdlID0gZmFsc2U7CiAgICB9OwogICAgdGhpcy5vbkFmdGVyRXhlYyA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZS5jb21tYW5kICYmICFlLmNvbW1hbmQucmVhZE9ubHkpCiAgICAgICAgICAgIHRoaXMudXBkYXRlTGlua2VkRmllbGRzKCk7CiAgICB9OwogICAgdGhpcy5vbkNoYW5nZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgbGVhZCA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5sZWFkOwogICAgICAgIHZhciBhbmNob3IgPSB0aGlzLmVkaXRvci5zZWxlY3Rpb24uYW5jaG9yOwogICAgICAgIHZhciBpc0VtcHR5ID0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlc1tpXS5saW5rZWQpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGNvbnRhaW5zTGVhZCA9IHRoaXMucmFuZ2VzW2ldLmNvbnRhaW5zKGxlYWQucm93LCBsZWFkLmNvbHVtbik7CiAgICAgICAgICAgIHZhciBjb250YWluc0FuY2hvciA9IGlzRW1wdHkgfHwgdGhpcy5yYW5nZXNbaV0uY29udGFpbnMoYW5jaG9yLnJvdywgYW5jaG9yLmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjb250YWluc0xlYWQgJiYgY29udGFpbnNBbmNob3IpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwogICAgdGhpcy5vbkNoYW5nZVNlc3Npb24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmRldGFjaCgpOwogICAgfTsKICAgIHRoaXMudGFiTmV4dCA9IGZ1bmN0aW9uKGRpcikgewogICAgICAgIHZhciBtYXggPSB0aGlzLnRhYnN0b3BzLmxlbmd0aDsKICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4ICsgKGRpciB8fCAxKTsKICAgICAgICBpbmRleCA9IE1hdGgubWluKE1hdGgubWF4KGluZGV4LCAxKSwgbWF4KTsKICAgICAgICBpZiAoaW5kZXggPT0gbWF4KQogICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgdGhpcy5zZWxlY3RUYWJzdG9wKGluZGV4KTsKICAgICAgICBpZiAoaW5kZXggPT09IDApCiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwogICAgdGhpcy5zZWxlY3RUYWJzdG9wID0gZnVuY3Rpb24oaW5kZXgpIHsKICAgICAgICB0aGlzLiRvcGVuVGFic3RvcHMgPSBudWxsOwogICAgICAgIHZhciB0cyA9IHRoaXMudGFic3RvcHNbdGhpcy5pbmRleF07CiAgICAgICAgaWYgKHRzKQogICAgICAgICAgICB0aGlzLmFkZFRhYnN0b3BNYXJrZXJzKHRzKTsKICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7CiAgICAgICAgdHMgPSB0aGlzLnRhYnN0b3BzW3RoaXMuaW5kZXhdOwogICAgICAgIGlmICghdHMgfHwgIXRzLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIAogICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJzdG9wID0gdHM7CiAgICAgICAgdmFyIHJhbmdlID0gdHMuZmlyc3ROb25MaW5rZWQgfHwgdHM7CiAgICAgICAgaWYgKCF0aGlzLmVkaXRvci5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKSB7CiAgICAgICAgICAgIHZhciBzZWwgPSB0aGlzLmVkaXRvci5tdWx0aVNlbGVjdDsKICAgICAgICAgICAgc2VsLnRvU2luZ2xlUmFuZ2UocmFuZ2UuY2xvbmUoKSk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmICh0cy5oYXNMaW5rZWRSYW5nZXMgJiYgdHNbaV0ubGlua2VkKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHRzW2ldLmNsb25lKCksIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzZWwucmFuZ2VzWzBdKQogICAgICAgICAgICAgICAgc2VsLmFkZFJhbmdlKHNlbC5yYW5nZXNbMF0uY2xvbmUoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLnNldFJhbmdlKHJhbmdlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFic3RvcCAmJiB0aGlzLnNlbGVjdGVkVGFic3RvcC5jaG9pY2VzKQogICAgICAgICAgICB0aGlzLmVkaXRvci5leGVjQ29tbWFuZCgic3RhcnRBdXRvY29tcGxldGUiLCB7bWF0Y2hlczogdGhpcy5zZWxlY3RlZFRhYnN0b3AuY2hvaWNlc30pOwogICAgfTsKICAgIHRoaXMuYWRkVGFic3RvcHMgPSBmdW5jdGlvbih0YWJzdG9wcywgc3RhcnQsIGVuZCkgewogICAgICAgIHZhciB1c2VMaW5rID0gdGhpcy51c2VMaW5rIHx8ICF0aGlzLmVkaXRvci5nZXRPcHRpb24oImVuYWJsZU11bHRpc2VsZWN0Iik7CiAgICAgICAgCiAgICAgICAgaWYgKCF0aGlzLiRvcGVuVGFic3RvcHMpCiAgICAgICAgICAgIHRoaXMuJG9wZW5UYWJzdG9wcyA9IFtdOwogICAgICAgIGlmICghdGFic3RvcHNbMF0pIHsKICAgICAgICAgICAgdmFyIHAgPSBSYW5nZS5mcm9tUG9pbnRzKGVuZCwgZW5kKTsKICAgICAgICAgICAgbW92ZVJlbGF0aXZlKHAuc3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgbW92ZVJlbGF0aXZlKHAuZW5kLCBzdGFydCk7CiAgICAgICAgICAgIHRhYnN0b3BzWzBdID0gW3BdOwogICAgICAgICAgICB0YWJzdG9wc1swXS5pbmRleCA9IDA7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IHRoaXMuaW5kZXg7CiAgICAgICAgdmFyIGFyZyA9IFtpICsgMSwgMF07CiAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMucmFuZ2VzOwogICAgICAgIHRhYnN0b3BzLmZvckVhY2goZnVuY3Rpb24odHMsIGluZGV4KSB7CiAgICAgICAgICAgIHZhciBkZXN0ID0gdGhpcy4kb3BlblRhYnN0b3BzW2luZGV4XSB8fCB0czsKICAgICAgICAgICAgdHMucmFuZ2VMaXN0ID0gbmV3IFJhbmdlTGlzdCgpOwogICAgICAgICAgICB0cy5yYW5nZUxpc3QuJGJpYXMgPSAwOwogICAgICAgICAgICAKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIHAgPSB0c1tpXTsKICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocC5zdGFydCwgcC5lbmQgfHwgcC5zdGFydCk7CiAgICAgICAgICAgICAgICBtb3ZlUG9pbnQocmFuZ2Uuc3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgICAgIG1vdmVQb2ludChyYW5nZS5lbmQsIHN0YXJ0KTsKICAgICAgICAgICAgICAgIHJhbmdlLm9yaWdpbmFsID0gcDsKICAgICAgICAgICAgICAgIHJhbmdlLnRhYnN0b3AgPSBkZXN0OwogICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2gocmFuZ2UpOwogICAgICAgICAgICAgICAgdHMucmFuZ2VMaXN0LnJhbmdlcy5wdXNoKHJhbmdlKTsKICAgICAgICAgICAgICAgIGlmIChkZXN0ICE9IHRzKQogICAgICAgICAgICAgICAgICAgIGRlc3QudW5zaGlmdChyYW5nZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZGVzdFtpXSA9IHJhbmdlOwogICAgICAgICAgICAgICAgaWYgKHAuZm10U3RyaW5nIHx8IChkZXN0LmZpcnN0Tm9uTGlua2VkICYmIHVzZUxpbmspKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UubGlua2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBkZXN0Lmhhc0xpbmtlZFJhbmdlcyA9IHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFkZXN0LmZpcnN0Tm9uTGlua2VkKQogICAgICAgICAgICAgICAgICAgIGRlc3QuZmlyc3ROb25MaW5rZWQgPSByYW5nZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWRlc3QuZmlyc3ROb25MaW5rZWQpCiAgICAgICAgICAgICAgICBkZXN0Lmhhc0xpbmtlZFJhbmdlcyA9IGZhbHNlOwogICAgICAgICAgICBpZiAoZGVzdCA9PT0gdHMpIHsKICAgICAgICAgICAgICAgIGFyZy5wdXNoKGRlc3QpOwogICAgICAgICAgICAgICAgdGhpcy4kb3BlblRhYnN0b3BzW2luZGV4XSA9IGRlc3Q7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hZGRUYWJzdG9wTWFya2VycyhkZXN0KTsKICAgICAgICB9LCB0aGlzKTsKICAgICAgICAKICAgICAgICBpZiAoYXJnLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgaWYgKHRoaXMudGFic3RvcHMubGVuZ3RoKQogICAgICAgICAgICAgICAgYXJnLnB1c2goYXJnLnNwbGljZSgyLCAxKVswXSk7CiAgICAgICAgICAgIHRoaXMudGFic3RvcHMuc3BsaWNlLmFwcGx5KHRoaXMudGFic3RvcHMsIGFyZyk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmFkZFRhYnN0b3BNYXJrZXJzID0gZnVuY3Rpb24odHMpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZWRpdG9yLnNlc3Npb247CiAgICAgICAgdHMuZm9yRWFjaChmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICBpZiAgKCFyYW5nZS5tYXJrZXJJZCkKICAgICAgICAgICAgICAgIHJhbmdlLm1hcmtlcklkID0gc2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJhY2Vfc25pcHBldC1tYXJrZXIiLCAidGV4dCIpOwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMucmVtb3ZlVGFic3RvcE1hcmtlcnMgPSBmdW5jdGlvbih0cykgewogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5lZGl0b3Iuc2Vzc2lvbjsKICAgICAgICB0cy5mb3JFYWNoKGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcklkKTsKICAgICAgICAgICAgcmFuZ2UubWFya2VySWQgPSBudWxsOwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHZhciBpID0gcmFuZ2UudGFic3RvcC5pbmRleE9mKHJhbmdlKTsKICAgICAgICBpZiAoaSAhPSAtMSkgcmFuZ2UudGFic3RvcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgaSA9IHRoaXMucmFuZ2VzLmluZGV4T2YocmFuZ2UpOwogICAgICAgIGlmIChpICE9IC0xKSB0aGlzLnJhbmdlcy5zcGxpY2UoaSwgMSk7CiAgICAgICAgaSA9IHJhbmdlLnRhYnN0b3AucmFuZ2VMaXN0LnJhbmdlcy5pbmRleE9mKHJhbmdlKTsKICAgICAgICBpZiAoaSAhPSAtMSkgcmFuZ2UudGFic3RvcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgdGhpcy5lZGl0b3Iuc2Vzc2lvbi5yZW1vdmVNYXJrZXIocmFuZ2UubWFya2VySWQpOwogICAgICAgIGlmICghcmFuZ2UudGFic3RvcC5sZW5ndGgpIHsKICAgICAgICAgICAgaSA9IHRoaXMudGFic3RvcHMuaW5kZXhPZihyYW5nZS50YWJzdG9wKTsKICAgICAgICAgICAgaWYgKGkgIT0gLTEpCiAgICAgICAgICAgICAgICB0aGlzLnRhYnN0b3BzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgaWYgKCF0aGlzLnRhYnN0b3BzLmxlbmd0aCkKICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG5ldyBIYXNoSGFuZGxlcigpOwogICAgdGhpcy5rZXlib2FyZEhhbmRsZXIuYmluZEtleXMoewogICAgICAgICJUYWIiOiBmdW5jdGlvbihlZCkgewogICAgICAgICAgICBpZiAoZXhwb3J0cy5zbmlwcGV0TWFuYWdlciAmJiBleHBvcnRzLnNuaXBwZXRNYW5hZ2VyLmV4cGFuZFdpdGhUYWIoZWQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVkLnRhYnN0b3BNYW5hZ2VyLnRhYk5leHQoMSk7CiAgICAgICAgfSwKICAgICAgICAiU2hpZnQtVGFiIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgZWQudGFic3RvcE1hbmFnZXIudGFiTmV4dCgtMSk7CiAgICAgICAgfSwKICAgICAgICAiRXNjIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgZWQudGFic3RvcE1hbmFnZXIuZGV0YWNoKCk7CiAgICAgICAgfSwKICAgICAgICAiUmV0dXJuIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwp9KS5jYWxsKFRhYnN0b3BNYW5hZ2VyLnByb3RvdHlwZSk7CgoKCnZhciBtb3ZlUG9pbnQgPSBmdW5jdGlvbihwb2ludCwgZGlmZikgewogICAgaWYgKHBvaW50LnJvdyA9PSAwKQogICAgICAgIHBvaW50LmNvbHVtbiArPSBkaWZmLmNvbHVtbjsKICAgIHBvaW50LnJvdyArPSBkaWZmLnJvdzsKfTsKCnZhciBtb3ZlUmVsYXRpdmUgPSBmdW5jdGlvbihwb2ludCwgc3RhcnQpIHsKICAgIGlmIChwb2ludC5yb3cgPT0gc3RhcnQucm93KQogICAgICAgIHBvaW50LmNvbHVtbiAtPSBzdGFydC5jb2x1bW47CiAgICBwb2ludC5yb3cgLT0gc3RhcnQucm93Owp9OwoKCnJlcXVpcmUoIi4vbGliL2RvbSIpLmltcG9ydENzc1N0cmluZygiXAouYWNlX3NuaXBwZXQtbWFya2VyIHtcCiAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XAogICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE5NCwgMTkzLCAyMDgsIDAuMDkpO1wKICAgIGJvcmRlcjogMXB4IGRvdHRlZCByZ2JhKDIxMSwgMjA4LCAyMzUsIDAuNjIpO1wKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcCn0iKTsKCmV4cG9ydHMuc25pcHBldE1hbmFnZXIgPSBuZXcgU25pcHBldE1hbmFnZXIoKTsKCgp2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi9lZGl0b3IiKS5FZGl0b3I7CihmdW5jdGlvbigpIHsKICAgIHRoaXMuaW5zZXJ0U25pcHBldCA9IGZ1bmN0aW9uKGNvbnRlbnQsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gZXhwb3J0cy5zbmlwcGV0TWFuYWdlci5pbnNlcnRTbmlwcGV0KHRoaXMsIGNvbnRlbnQsIG9wdGlvbnMpOwogICAgfTsKICAgIHRoaXMuZXhwYW5kU25pcHBldCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gZXhwb3J0cy5zbmlwcGV0TWFuYWdlci5leHBhbmRXaXRoVGFiKHRoaXMsIG9wdGlvbnMpOwogICAgfTsKfSkuY2FsbChFZGl0b3IucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvYXV0b2NvbXBsZXRlL3BvcHVwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3ZpcnR1YWxfcmVuZGVyZXIiLCJhY2UvZWRpdG9yIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmVuZGVyZXIgPSByZXF1aXJlKCIuLi92aXJ0dWFsX3JlbmRlcmVyIikuVmlydHVhbFJlbmRlcmVyOwp2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi4vZWRpdG9yIikuRWRpdG9yOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwoKdmFyICRzaW5nbGVMaW5lRWRpdG9yID0gZnVuY3Rpb24oZWwpIHsKICAgIHZhciByZW5kZXJlciA9IG5ldyBSZW5kZXJlcihlbCk7CgogICAgcmVuZGVyZXIuJG1heExpbmVzID0gNDsKCiAgICB2YXIgZWRpdG9yID0gbmV3IEVkaXRvcihyZW5kZXJlcik7CgogICAgZWRpdG9yLnNldEhpZ2hsaWdodEFjdGl2ZUxpbmUoZmFsc2UpOwogICAgZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7CiAgICBlZGl0b3IucmVuZGVyZXIuc2V0U2hvd0d1dHRlcihmYWxzZSk7CiAgICBlZGl0b3IucmVuZGVyZXIuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZShmYWxzZSk7CgogICAgZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGZvY3VzVGltZW91dCA9IDA7CiAgICBlZGl0b3IuJGhpZ2hsaWdodFRhZ1BlbmRpbmcgPSB0cnVlOwoKICAgIHJldHVybiBlZGl0b3I7Cn07Cgp2YXIgQWNlUG9wdXAgPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7CiAgICB2YXIgZWwgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB2YXIgcG9wdXAgPSBuZXcgJHNpbmdsZUxpbmVFZGl0b3IoZWwpOwoKICAgIGlmIChwYXJlbnROb2RlKQogICAgICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZWwpOwogICAgZWwuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHBvcHVwLnJlbmRlcmVyLmNvbnRlbnQuc3R5bGUuY3Vyc29yID0gImRlZmF1bHQiOwogICAgcG9wdXAucmVuZGVyZXIuc2V0U3R5bGUoImFjZV9hdXRvY29tcGxldGUiKTsKCiAgICBwb3B1cC5zZXRPcHRpb24oImRpc3BsYXlJbmRlbnRHdWlkZXMiLCBmYWxzZSk7CiAgICBwb3B1cC5zZXRPcHRpb24oImRyYWdEZWxheSIsIDE1MCk7CgogICAgdmFyIG5vb3AgPSBmdW5jdGlvbigpe307CgogICAgcG9wdXAuZm9jdXMgPSBub29wOwogICAgcG9wdXAuJGlzRm9jdXNlZCA9IHRydWU7CgogICAgcG9wdXAucmVuZGVyZXIuJGN1cnNvckxheWVyLnJlc3RhcnRUaW1lciA9IG5vb3A7CiAgICBwb3B1cC5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMDsKCiAgICBwb3B1cC5yZW5kZXJlci4kbWF4TGluZXMgPSA4OwogICAgcG9wdXAucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gZmFsc2U7CgogICAgcG9wdXAuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZShmYWxzZSk7CiAgICBwb3B1cC5zZXNzaW9uLmhpZ2hsaWdodCgiIik7CiAgICBwb3B1cC5zZXNzaW9uLiRzZWFyY2hIaWdobGlnaHQuY2xhenogPSAiYWNlX2hpZ2hsaWdodC1tYXJrZXIiOwoKICAgIHBvcHVwLm9uKCJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIHBvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOwogICAgICAgIHBvcHVwLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpOwogICAgICAgIHNlbGVjdGlvbk1hcmtlci5zdGFydC5yb3cgPSBzZWxlY3Rpb25NYXJrZXIuZW5kLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgZS5zdG9wKCk7CiAgICB9KTsKCiAgICB2YXIgbGFzdE1vdXNlRXZlbnQ7CiAgICB2YXIgaG92ZXJNYXJrZXIgPSBuZXcgUmFuZ2UoLTEsMCwtMSxJbmZpbml0eSk7CiAgICB2YXIgc2VsZWN0aW9uTWFya2VyID0gbmV3IFJhbmdlKC0xLDAsLTEsSW5maW5pdHkpOwogICAgc2VsZWN0aW9uTWFya2VyLmlkID0gcG9wdXAuc2Vzc2lvbi5hZGRNYXJrZXIoc2VsZWN0aW9uTWFya2VyLCAiYWNlX2FjdGl2ZS1saW5lIiwgImZ1bGxMaW5lIik7CiAgICBwb3B1cC5zZXRTZWxlY3RPbkhvdmVyID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgaWYgKCF2YWwpIHsKICAgICAgICAgICAgaG92ZXJNYXJrZXIuaWQgPSBwb3B1cC5zZXNzaW9uLmFkZE1hcmtlcihob3Zlck1hcmtlciwgImFjZV9saW5lLWhvdmVyIiwgImZ1bGxMaW5lIik7CiAgICAgICAgfSBlbHNlIGlmIChob3Zlck1hcmtlci5pZCkgewogICAgICAgICAgICBwb3B1cC5zZXNzaW9uLnJlbW92ZU1hcmtlcihob3Zlck1hcmtlci5pZCk7CiAgICAgICAgICAgIGhvdmVyTWFya2VyLmlkID0gbnVsbDsKICAgICAgICB9CiAgICB9OwogICAgcG9wdXAuc2V0U2VsZWN0T25Ib3ZlcihmYWxzZSk7CiAgICBwb3B1cC5vbigibW91c2Vtb3ZlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghbGFzdE1vdXNlRXZlbnQpIHsKICAgICAgICAgICAgbGFzdE1vdXNlRXZlbnQgPSBlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChsYXN0TW91c2VFdmVudC54ID09IGUueCAmJiBsYXN0TW91c2VFdmVudC55ID09IGUueSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxhc3RNb3VzZUV2ZW50ID0gZTsKICAgICAgICBsYXN0TW91c2VFdmVudC5zY3JvbGxUb3AgPSBwb3B1cC5yZW5kZXJlci5zY3JvbGxUb3A7CiAgICAgICAgdmFyIHJvdyA9IGxhc3RNb3VzZUV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CiAgICAgICAgaWYgKGhvdmVyTWFya2VyLnN0YXJ0LnJvdyAhPSByb3cpIHsKICAgICAgICAgICAgaWYgKCFob3Zlck1hcmtlci5pZCkKICAgICAgICAgICAgICAgIHBvcHVwLnNldFJvdyhyb3cpOwogICAgICAgICAgICBzZXRIb3Zlck1hcmtlcihyb3cpOwogICAgICAgIH0KICAgIH0pOwogICAgcG9wdXAucmVuZGVyZXIub24oImJlZm9yZVJlbmRlciIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChsYXN0TW91c2VFdmVudCAmJiBob3Zlck1hcmtlci5zdGFydC5yb3cgIT0gLTEpIHsKICAgICAgICAgICAgbGFzdE1vdXNlRXZlbnQuJHBvcyA9IG51bGw7CiAgICAgICAgICAgIHZhciByb3cgPSBsYXN0TW91c2VFdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OwogICAgICAgICAgICBpZiAoIWhvdmVyTWFya2VyLmlkKQogICAgICAgICAgICAgICAgcG9wdXAuc2V0Um93KHJvdyk7CiAgICAgICAgICAgIHNldEhvdmVyTWFya2VyKHJvdywgdHJ1ZSk7CiAgICAgICAgfQogICAgfSk7CiAgICBwb3B1cC5yZW5kZXJlci5vbigiYWZ0ZXJSZW5kZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93ID0gcG9wdXAuZ2V0Um93KCk7CiAgICAgICAgdmFyIHQgPSBwb3B1cC5yZW5kZXJlci4kdGV4dExheWVyOwogICAgICAgIHZhciBzZWxlY3RlZCA9IHQuZWxlbWVudC5jaGlsZE5vZGVzW3JvdyAtIHQuY29uZmlnLmZpcnN0Um93XTsKICAgICAgICBpZiAoc2VsZWN0ZWQgIT09IHQuc2VsZWN0ZWROb2RlICYmIHQuc2VsZWN0ZWROb2RlKQogICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModC5zZWxlY3RlZE5vZGUsICJhY2Vfc2VsZWN0ZWQiKTsKICAgICAgICB0LnNlbGVjdGVkTm9kZSA9IHNlbGVjdGVkOwogICAgICAgIGlmIChzZWxlY3RlZCkKICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHNlbGVjdGVkLCAiYWNlX3NlbGVjdGVkIik7CiAgICB9KTsKICAgIHZhciBoaWRlSG92ZXJNYXJrZXIgPSBmdW5jdGlvbigpIHsgc2V0SG92ZXJNYXJrZXIoLTEpOyB9OwogICAgdmFyIHNldEhvdmVyTWFya2VyID0gZnVuY3Rpb24ocm93LCBzdXBwcmVzc1JlZHJhdykgewogICAgICAgIGlmIChyb3cgIT09IGhvdmVyTWFya2VyLnN0YXJ0LnJvdykgewogICAgICAgICAgICBob3Zlck1hcmtlci5zdGFydC5yb3cgPSBob3Zlck1hcmtlci5lbmQucm93ID0gcm93OwogICAgICAgICAgICBpZiAoIXN1cHByZXNzUmVkcmF3KQogICAgICAgICAgICAgICAgcG9wdXAuc2Vzc2lvbi5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpOwogICAgICAgICAgICBwb3B1cC5fZW1pdCgiY2hhbmdlSG92ZXJNYXJrZXIiKTsKICAgICAgICB9CiAgICB9OwogICAgcG9wdXAuZ2V0SG92ZXJlZFJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBob3Zlck1hcmtlci5zdGFydC5yb3c7CiAgICB9OwoKICAgIGV2ZW50LmFkZExpc3RlbmVyKHBvcHVwLmNvbnRhaW5lciwgIm1vdXNlb3V0IiwgaGlkZUhvdmVyTWFya2VyKTsKICAgIHBvcHVwLm9uKCJoaWRlIiwgaGlkZUhvdmVyTWFya2VyKTsKICAgIHBvcHVwLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCBoaWRlSG92ZXJNYXJrZXIpOwoKICAgIHBvcHVwLnNlc3Npb24uZG9jLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBwb3B1cC5kYXRhLmxlbmd0aDsKICAgIH07CiAgICBwb3B1cC5zZXNzaW9uLmRvYy5nZXRMaW5lID0gZnVuY3Rpb24oaSkgewogICAgICAgIHZhciBkYXRhID0gcG9wdXAuZGF0YVtpXTsKICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIHJldHVybiAoZGF0YSAmJiBkYXRhLnZhbHVlKSB8fCAiIjsKICAgIH07CgogICAgdmFyIGJnVG9rZW5pemVyID0gcG9wdXAuc2Vzc2lvbi5iZ1Rva2VuaXplcjsKICAgIGJnVG9rZW5pemVyLiR0b2tlbml6ZVJvdyA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHZhciBkYXRhID0gcG9wdXAuZGF0YVtyb3ddOwogICAgICAgIHZhciB0b2tlbnMgPSBbXTsKICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICJzdHJpbmciKQogICAgICAgICAgICBkYXRhID0ge3ZhbHVlOiBkYXRhfTsKICAgICAgICB2YXIgY2FwdGlvbiA9IGRhdGEuY2FwdGlvbiB8fCBkYXRhLnZhbHVlIHx8IGRhdGEubmFtZTsKCiAgICAgICAgZnVuY3Rpb24gYWRkVG9rZW4odmFsdWUsIGNsYXNzTmFtZSkgewogICAgICAgICAgICB2YWx1ZSAmJiB0b2tlbnMucHVzaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAoZGF0YS5jbGFzc05hbWUgfHwgIiIpICsgKGNsYXNzTmFtZSB8fCAiIiksIAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgbG93ZXIgPSBjYXB0aW9uLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgdmFyIGZpbHRlclRleHQgPSAocG9wdXAuZmlsdGVyVGV4dCB8fCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICB2YXIgbGFzdEluZGV4ID0gMDsKICAgICAgICB2YXIgbGFzdEkgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGZpbHRlclRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgIT0gbGFzdEkgJiYgKGRhdGEubWF0Y2hNYXNrICYgKDEgPDwgaSkgfHwgaSA9PSBmaWx0ZXJUZXh0Lmxlbmd0aCkpIHsKICAgICAgICAgICAgICAgIHZhciBzdWIgPSBmaWx0ZXJUZXh0LnNsaWNlKGxhc3RJLCBpKTsKICAgICAgICAgICAgICAgIGxhc3RJID0gaTsKICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxvd2VyLmluZGV4T2Yoc3ViLCBsYXN0SW5kZXgpOwogICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGFkZFRva2VuKGNhcHRpb24uc2xpY2UobGFzdEluZGV4LCBpbmRleCksICIiKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgc3ViLmxlbmd0aDsKICAgICAgICAgICAgICAgIGFkZFRva2VuKGNhcHRpb24uc2xpY2UoaW5kZXgsIGxhc3RJbmRleCksICJjb21wbGV0aW9uLWhpZ2hsaWdodCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFkZFRva2VuKGNhcHRpb24uc2xpY2UobGFzdEluZGV4LCBjYXB0aW9uLmxlbmd0aCksICIiKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5tZXRhKQogICAgICAgICAgICB0b2tlbnMucHVzaCh7dHlwZTogImNvbXBsZXRpb24tbWV0YSIsIHZhbHVlOiBkYXRhLm1ldGF9KTsKICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKQogICAgICAgICAgICB0b2tlbnMucHVzaCh7dHlwZTogImNvbXBsZXRpb24tbWVzc2FnZSIsIHZhbHVlOiBkYXRhLm1lc3NhZ2V9KTsKCiAgICAgICAgcmV0dXJuIHRva2VuczsKICAgIH07CiAgICBiZ1Rva2VuaXplci4kdXBkYXRlT25DaGFuZ2UgPSBub29wOwogICAgYmdUb2tlbml6ZXIuc3RhcnQgPSBub29wOwoKICAgIHBvcHVwLnNlc3Npb24uJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gMDsKICAgIH07CiAgICBwb3B1cC5pc09wZW4gPSBmYWxzZTsKICAgIHBvcHVwLmlzVG9wZG93biA9IGZhbHNlOwogICAgcG9wdXAuYXV0b1NlbGVjdCA9IHRydWU7CiAgICBwb3B1cC5maWx0ZXJUZXh0ID0gIiI7CgogICAgcG9wdXAuZGF0YSA9IFtdOwogICAgcG9wdXAuc2V0RGF0YSA9IGZ1bmN0aW9uKGxpc3QsIGZpbHRlclRleHQpIHsKICAgICAgICBwb3B1cC5maWx0ZXJUZXh0ID0gZmlsdGVyVGV4dCB8fCAiIjsKICAgICAgICBwb3B1cC5zZXRWYWx1ZShsYW5nLnN0cmluZ1JlcGVhdCgiXG4iLCBsaXN0Lmxlbmd0aCksIC0xKTsKICAgICAgICBwb3B1cC5kYXRhID0gbGlzdCB8fCBbXTsKICAgICAgICBwb3B1cC5zZXRSb3coMCk7CiAgICB9OwogICAgcG9wdXAuZ2V0RGF0YSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHJldHVybiBwb3B1cC5kYXRhW3Jvd107CiAgICB9OwoKICAgIHBvcHVwLmdldFJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzZWxlY3Rpb25NYXJrZXIuc3RhcnQucm93OwogICAgfTsKICAgIHBvcHVwLnNldFJvdyA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBsaW5lID0gTWF0aC5tYXgodGhpcy5hdXRvU2VsZWN0ID8gMCA6IC0xLCBNYXRoLm1pbih0aGlzLmRhdGEubGVuZ3RoLCBsaW5lKSk7CiAgICAgICAgaWYgKHNlbGVjdGlvbk1hcmtlci5zdGFydC5yb3cgIT0gbGluZSkgewogICAgICAgICAgICBwb3B1cC5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgICAgc2VsZWN0aW9uTWFya2VyLnN0YXJ0LnJvdyA9IHNlbGVjdGlvbk1hcmtlci5lbmQucm93ID0gbGluZSB8fCAwOwogICAgICAgICAgICBwb3B1cC5zZXNzaW9uLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIik7CiAgICAgICAgICAgIHBvcHVwLm1vdmVDdXJzb3JUbyhsaW5lIHx8IDAsIDApOwogICAgICAgICAgICBpZiAocG9wdXAuaXNPcGVuKQogICAgICAgICAgICAgICAgcG9wdXAuX3NpZ25hbCgic2VsZWN0Iik7CiAgICAgICAgfQogICAgfTsKCiAgICBwb3B1cC5vbigiY2hhbmdlU2VsZWN0aW9uIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHBvcHVwLmlzT3BlbikKICAgICAgICAgICAgcG9wdXAuc2V0Um93KHBvcHVwLnNlbGVjdGlvbi5sZWFkLnJvdyk7CiAgICAgICAgcG9wdXAucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgIH0pOwoKICAgIHBvcHVwLmhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIHRoaXMuX3NpZ25hbCgiaGlkZSIpOwogICAgICAgIHBvcHVwLmlzT3BlbiA9IGZhbHNlOwogICAgfTsKICAgIHBvcHVwLnNob3cgPSBmdW5jdGlvbihwb3MsIGxpbmVIZWlnaHQsIHRvcGRvd25Pbmx5KSB7CiAgICAgICAgdmFyIGVsID0gdGhpcy5jb250YWluZXI7CiAgICAgICAgdmFyIHNjcmVlbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICB2YXIgc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyOwogICAgICAgIHZhciBtYXhIID0gcmVuZGVyZXIuJG1heExpbmVzICogbGluZUhlaWdodCAqIDEuNDsKICAgICAgICB2YXIgdG9wID0gcG9zLnRvcCArIHRoaXMuJGJvcmRlclNpemU7CiAgICAgICAgdmFyIGFsbG93VG9wZG93biA9IHRvcCA+IHNjcmVlbkhlaWdodCAvIDIgJiYgIXRvcGRvd25Pbmx5OwogICAgICAgIGlmIChhbGxvd1RvcGRvd24gJiYgdG9wICsgbGluZUhlaWdodCArIG1heEggPiBzY3JlZW5IZWlnaHQpIHsKICAgICAgICAgICAgcmVuZGVyZXIuJG1heFBpeGVsSGVpZ2h0ID0gdG9wIC0gMiAqIHRoaXMuJGJvcmRlclNpemU7CiAgICAgICAgICAgIGVsLnN0eWxlLnRvcCA9ICIiOwogICAgICAgICAgICBlbC5zdHlsZS5ib3R0b20gPSBzY3JlZW5IZWlnaHQgLSB0b3AgKyAicHgiOwogICAgICAgICAgICBwb3B1cC5pc1RvcGRvd24gPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b3AgKz0gbGluZUhlaWdodDsKICAgICAgICAgICAgcmVuZGVyZXIuJG1heFBpeGVsSGVpZ2h0ID0gc2NyZWVuSGVpZ2h0IC0gdG9wIC0gMC4yICogbGluZUhlaWdodDsKICAgICAgICAgICAgZWwuc3R5bGUudG9wID0gdG9wICsgInB4IjsKICAgICAgICAgICAgZWwuc3R5bGUuYm90dG9tID0gIiI7CiAgICAgICAgICAgIHBvcHVwLmlzVG9wZG93biA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gIiI7CgogICAgICAgIHZhciBsZWZ0ID0gcG9zLmxlZnQ7CiAgICAgICAgaWYgKGxlZnQgKyBlbC5vZmZzZXRXaWR0aCA+IHNjcmVlbldpZHRoKQogICAgICAgICAgICBsZWZ0ID0gc2NyZWVuV2lkdGggLSBlbC5vZmZzZXRXaWR0aDsKCiAgICAgICAgZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOwoKICAgICAgICB0aGlzLl9zaWduYWwoInNob3ciKTsKICAgICAgICBsYXN0TW91c2VFdmVudCA9IG51bGw7CiAgICAgICAgcG9wdXAuaXNPcGVuID0gdHJ1ZTsKICAgIH07CgogICAgcG9wdXAuZ29UbyA9IGZ1bmN0aW9uKHdoZXJlKSB7CiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93KCk7CiAgICAgICAgdmFyIG1heCA9IHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDE7CgogICAgICAgIHN3aXRjaCh3aGVyZSkgewogICAgICAgICAgICBjYXNlICJ1cCI6IHJvdyA9IHJvdyA8PSAwID8gbWF4IDogcm93IC0gMTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRvd24iOiByb3cgPSByb3cgPj0gbWF4ID8gLTEgOiByb3cgKyAxOyBicmVhazsKICAgICAgICAgICAgY2FzZSAic3RhcnQiOiByb3cgPSAwOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiZW5kIjogcm93ID0gbWF4OyBicmVhazsKICAgICAgICB9CgogICAgICAgIHRoaXMuc2V0Um93KHJvdyk7CiAgICB9OwoKCiAgICBwb3B1cC5nZXRUZXh0TGVmdE9mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRib3JkZXJTaXplICsgdGhpcy5yZW5kZXJlci4kcGFkZGluZyArIHRoaXMuJGltYWdlU2l6ZTsKICAgIH07CgogICAgcG9wdXAuJGltYWdlU2l6ZSA9IDA7CiAgICBwb3B1cC4kYm9yZGVyU2l6ZSA9IDE7CgogICAgcmV0dXJuIHBvcHVwOwp9OwoKZG9tLmltcG9ydENzc1N0cmluZygiXAouYWNlX2VkaXRvci5hY2VfYXV0b2NvbXBsZXRlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKICAgIGJhY2tncm91bmQtY29sb3I6ICNDQUQ2RkE7XAogICAgei1pbmRleDogMTtcCn1cCi5hY2VfZGFyay5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XAogICAgYmFja2dyb3VuZC1jb2xvcjogIzNhNjc0ZTtcCn1cCi5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUgLmFjZV9saW5lLWhvdmVyIHtcCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWJiZmZlO1wKICAgIG1hcmdpbi10b3A6IC0xcHg7XAogICAgYmFja2dyb3VuZDogcmdiYSgyMzMsMjMzLDI1MywwLjQpO1wKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcCiAgICB6LWluZGV4OiAyO1wKfVwKLmFjZV9kYXJrLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2xpbmUtaG92ZXIge1wKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTA5LCAxNTAsIDEzLCAwLjgpO1wKICAgIGJhY2tncm91bmQ6IHJnYmEoNTgsIDEwMywgNzgsIDAuNjIpO1wKfVwKLmFjZV9jb21wbGV0aW9uLW1ldGEge1wKICAgIG9wYWNpdHk6IDAuNTtcCiAgICBtYXJnaW46IDAuOWVtO1wKfVwKLmFjZV9jb21wbGV0aW9uLW1lc3NhZ2Uge1wKICAgIGNvbG9yOiBibHVlO1wKfVwKLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2NvbXBsZXRpb24taGlnaGxpZ2h0e1wKICAgIGNvbG9yOiAjMmQ2OWM3O1wKfVwKLmFjZV9kYXJrLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2NvbXBsZXRpb24taGlnaGxpZ2h0e1wKICAgIGNvbG9yOiAjOTNjYTEyO1wKfVwKLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSB7XAogICAgd2lkdGg6IDMwMHB4O1wKICAgIHotaW5kZXg6IDIwMDAwMDtcCiAgICBib3JkZXI6IDFweCBsaWdodGdyYXkgc29saWQ7XAogICAgcG9zaXRpb246IGZpeGVkO1wKICAgIGJveC1zaGFkb3c6IDJweCAzcHggNXB4IHJnYmEoMCwwLDAsLjIpO1wKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XAogICAgYmFja2dyb3VuZDogI2ZlZmVmZTtcCiAgICBjb2xvcjogIzExMTtcCn1cCi5hY2VfZGFyay5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUge1wKICAgIGJvcmRlcjogMXB4ICM0ODQ3NDcgc29saWQ7XAogICAgYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUxKTtcCiAgICBsaW5lLWhlaWdodDogMS40O1wKICAgIGJhY2tncm91bmQ6ICMyNTI4MmM7XAogICAgY29sb3I6ICNjMWMxYzE7XAp9IiwgImF1dG9jb21wbGV0aW9uLmNzcyIpOwoKZXhwb3J0cy5BY2VQb3B1cCA9IEFjZVBvcHVwOwpleHBvcnRzLiRzaW5nbGVMaW5lRWRpdG9yID0gJHNpbmdsZUxpbmVFZGl0b3I7Cn0pOwoKZGVmaW5lKCJhY2UvYXV0b2NvbXBsZXRlL3V0aWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMucGFyRm9yRWFjaCA9IGZ1bmN0aW9uKGFycmF5LCBmbiwgY2FsbGJhY2spIHsKICAgIHZhciBjb21wbGV0ZWQgPSAwOwogICAgdmFyIGFyTGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgaWYgKGFyTGVuZ3RoID09PSAwKQogICAgICAgIGNhbGxiYWNrKCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyTGVuZ3RoOyBpKyspIHsKICAgICAgICBmbihhcnJheVtpXSwgZnVuY3Rpb24ocmVzdWx0LCBlcnIpIHsKICAgICAgICAgICAgY29tcGxldGVkKys7CiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IGFyTGVuZ3RoKQogICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0LCBlcnIpOwogICAgICAgIH0pOwogICAgfQp9OwoKdmFyIElEX1JFR0VYID0gL1thLXpBLVpfMC05XCRcLVx1MDBBMi1cdUZGRkZdLzsKCmV4cG9ydHMucmV0cmlldmVQcmVjZWRpbmdJZGVudGlmaWVyID0gZnVuY3Rpb24odGV4dCwgcG9zLCByZWdleCkgewogICAgcmVnZXggPSByZWdleCB8fCBJRF9SRUdFWDsKICAgIHZhciBidWYgPSBbXTsKICAgIGZvciAodmFyIGkgPSBwb3MtMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBpZiAocmVnZXgudGVzdCh0ZXh0W2ldKSkKICAgICAgICAgICAgYnVmLnB1c2godGV4dFtpXSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBidWYucmV2ZXJzZSgpLmpvaW4oIiIpOwp9OwoKZXhwb3J0cy5yZXRyaWV2ZUZvbGxvd2luZ0lkZW50aWZpZXIgPSBmdW5jdGlvbih0ZXh0LCBwb3MsIHJlZ2V4KSB7CiAgICByZWdleCA9IHJlZ2V4IHx8IElEX1JFR0VYOwogICAgdmFyIGJ1ZiA9IFtdOwogICAgZm9yICh2YXIgaSA9IHBvczsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAocmVnZXgudGVzdCh0ZXh0W2ldKSkKICAgICAgICAgICAgYnVmLnB1c2godGV4dFtpXSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBidWY7Cn07CgpleHBvcnRzLmdldENvbXBsZXRpb25QcmVmaXggPSBmdW5jdGlvbiAoZWRpdG9yKSB7CiAgICB2YXIgcG9zID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICB2YXIgbGluZSA9IGVkaXRvci5zZXNzaW9uLmdldExpbmUocG9zLnJvdyk7CiAgICB2YXIgcHJlZml4OwogICAgZWRpdG9yLmNvbXBsZXRlcnMuZm9yRWFjaChmdW5jdGlvbihjb21wbGV0ZXIpIHsKICAgICAgICBpZiAoY29tcGxldGVyLmlkZW50aWZpZXJSZWdleHBzKSB7CiAgICAgICAgICAgIGNvbXBsZXRlci5pZGVudGlmaWVyUmVnZXhwcy5mb3JFYWNoKGZ1bmN0aW9uKGlkZW50aWZpZXJSZWdleCkgewogICAgICAgICAgICAgICAgaWYgKCFwcmVmaXggJiYgaWRlbnRpZmllclJlZ2V4KQogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucmV0cmlldmVQcmVjZWRpbmdJZGVudGlmaWVyKGxpbmUsIHBvcy5jb2x1bW4sIGlkZW50aWZpZXJSZWdleCk7CiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgfS5iaW5kKHRoaXMpKTsKICAgIHJldHVybiBwcmVmaXggfHwgdGhpcy5yZXRyaWV2ZVByZWNlZGluZ0lkZW50aWZpZXIobGluZSwgcG9zLmNvbHVtbik7Cn07Cgp9KTsKCmRlZmluZSgiYWNlL2F1dG9jb21wbGV0ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLCJhY2UvYXV0b2NvbXBsZXRlL3BvcHVwIiwiYWNlL2F1dG9jb21wbGV0ZS91dGlsIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9kb20iLCJhY2Uvc25pcHBldHMiLCJhY2UvY29uZmlnIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgSGFzaEhhbmRsZXIgPSByZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwp2YXIgQWNlUG9wdXAgPSByZXF1aXJlKCIuL2F1dG9jb21wbGV0ZS9wb3B1cCIpLkFjZVBvcHVwOwp2YXIgdXRpbCA9IHJlcXVpcmUoIi4vYXV0b2NvbXBsZXRlL3V0aWwiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7CnZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKdmFyIHNuaXBwZXRNYW5hZ2VyID0gcmVxdWlyZSgiLi9zbmlwcGV0cyIpLnNuaXBwZXRNYW5hZ2VyOwp2YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKCnZhciBBdXRvY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuYXV0b0luc2VydCA9IGZhbHNlOwogICAgdGhpcy5hdXRvU2VsZWN0ID0gdHJ1ZTsKICAgIHRoaXMuZXhhY3RNYXRjaCA9IGZhbHNlOwogICAgdGhpcy5nYXRoZXJDb21wbGV0aW9uc0lkID0gMDsKICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IEhhc2hIYW5kbGVyKCk7CiAgICB0aGlzLmtleWJvYXJkSGFuZGxlci5iaW5kS2V5cyh0aGlzLmNvbW1hbmRzKTsKCiAgICB0aGlzLmJsdXJMaXN0ZW5lciA9IHRoaXMuYmx1ckxpc3RlbmVyLmJpbmQodGhpcyk7CiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOwogICAgdGhpcy5tb3VzZWRvd25MaXN0ZW5lciA9IHRoaXMubW91c2Vkb3duTGlzdGVuZXIuYmluZCh0aGlzKTsKICAgIHRoaXMubW91c2V3aGVlbExpc3RlbmVyID0gdGhpcy5tb3VzZXdoZWVsTGlzdGVuZXIuYmluZCh0aGlzKTsKCiAgICB0aGlzLmNoYW5nZVRpbWVyID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRpb25zKHRydWUpOwogICAgfS5iaW5kKHRoaXMpKTsKCiAgICB0aGlzLnRvb2x0aXBUaW1lciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy51cGRhdGVEb2NUb29sdGlwLmJpbmQodGhpcyksIDUwKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBBY2VQb3B1cChkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgICAgdGhpcy5wb3B1cC5vbigiY2xpY2siLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TWF0Y2goKTsKICAgICAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgfS5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLnBvcHVwLmZvY3VzID0gdGhpcy5lZGl0b3IuZm9jdXMuYmluZCh0aGlzLmVkaXRvcik7CiAgICAgICAgdGhpcy5wb3B1cC5vbigic2hvdyIsIHRoaXMudG9vbHRpcFRpbWVyLmJpbmQobnVsbCwgbnVsbCkpOwogICAgICAgIHRoaXMucG9wdXAub24oInNlbGVjdCIsIHRoaXMudG9vbHRpcFRpbWVyLmJpbmQobnVsbCwgbnVsbCkpOwogICAgICAgIHRoaXMucG9wdXAub24oImNoYW5nZUhvdmVyTWFya2VyIiwgdGhpcy50b29sdGlwVGltZXIuYmluZChudWxsLCBudWxsKSk7CiAgICAgICAgcmV0dXJuIHRoaXMucG9wdXA7CiAgICB9OwoKICAgIHRoaXMuZ2V0UG9wdXAgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wb3B1cCB8fCB0aGlzLiRpbml0KCk7CiAgICB9OwoKICAgIHRoaXMub3BlblBvcHVwID0gZnVuY3Rpb24oZWRpdG9yLCBwcmVmaXgsIGtlZXBQb3B1cFBvc2l0aW9uKSB7CiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKQogICAgICAgICAgICB0aGlzLiRpbml0KCk7CgogICAgICAgIHRoaXMucG9wdXAuYXV0b1NlbGVjdCA9IHRoaXMuYXV0b1NlbGVjdDsKCiAgICAgICAgdGhpcy5wb3B1cC5zZXREYXRhKHRoaXMuY29tcGxldGlvbnMuZmlsdGVyZWQsIHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dCk7CgogICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlcik7CiAgICAgICAgCiAgICAgICAgdmFyIHJlbmRlcmVyID0gZWRpdG9yLnJlbmRlcmVyOwogICAgICAgIHRoaXMucG9wdXAuc2V0Um93KHRoaXMuYXV0b1NlbGVjdCA/IDAgOiAtMSk7CiAgICAgICAgaWYgKCFrZWVwUG9wdXBQb3NpdGlvbikgewogICAgICAgICAgICB0aGlzLnBvcHVwLnNldFRoZW1lKGVkaXRvci5nZXRUaGVtZSgpKTsKICAgICAgICAgICAgdGhpcy5wb3B1cC5zZXRGb250U2l6ZShlZGl0b3IuZ2V0Rm9udFNpemUoKSk7CgogICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9IHJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7CgogICAgICAgICAgICB2YXIgcG9zID0gcmVuZGVyZXIuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24odGhpcy5iYXNlLCB0cnVlKTsKICAgICAgICAgICAgcG9zLmxlZnQgLT0gdGhpcy5wb3B1cC5nZXRUZXh0TGVmdE9mZnNldCgpOwoKICAgICAgICAgICAgdmFyIHJlY3QgPSBlZGl0b3IuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBwb3MudG9wICs9IHJlY3QudG9wIC0gcmVuZGVyZXIubGF5ZXJDb25maWcub2Zmc2V0OwogICAgICAgICAgICBwb3MubGVmdCArPSByZWN0LmxlZnQgLSBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsTGVmdDsKICAgICAgICAgICAgcG9zLmxlZnQgKz0gcmVuZGVyZXIuZ3V0dGVyV2lkdGg7CgogICAgICAgICAgICB0aGlzLnBvcHVwLnNob3cocG9zLCBsaW5lSGVpZ2h0KTsKICAgICAgICB9IGVsc2UgaWYgKGtlZXBQb3B1cFBvc2l0aW9uICYmICFwcmVmaXgpIHsKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpOwogICAgICAgIHRoaXMuZWRpdG9yLm9mZigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy5jaGFuZ2VMaXN0ZW5lcik7CiAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKCJibHVyIiwgdGhpcy5ibHVyTGlzdGVuZXIpOwogICAgICAgIHRoaXMuZWRpdG9yLm9mZigibW91c2Vkb3duIiwgdGhpcy5tb3VzZWRvd25MaXN0ZW5lcik7CiAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKCJtb3VzZXdoZWVsIiwgdGhpcy5tb3VzZXdoZWVsTGlzdGVuZXIpOwogICAgICAgIHRoaXMuY2hhbmdlVGltZXIuY2FuY2VsKCk7CiAgICAgICAgdGhpcy5oaWRlRG9jVG9vbHRpcCgpOwoKICAgICAgICB0aGlzLmdhdGhlckNvbXBsZXRpb25zSWQgKz0gMTsKICAgICAgICBpZiAodGhpcy5wb3B1cCAmJiB0aGlzLnBvcHVwLmlzT3BlbikKICAgICAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7CgogICAgICAgIGlmICh0aGlzLmJhc2UpCiAgICAgICAgICAgIHRoaXMuYmFzZS5kZXRhY2goKTsKICAgICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY29tcGxldGlvbnMgPSB0aGlzLmJhc2UgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmVkaXRvci5zZWxlY3Rpb24ubGVhZDsKICAgICAgICBpZiAoY3Vyc29yLnJvdyAhPSB0aGlzLmJhc2Uucm93IHx8IGN1cnNvci5jb2x1bW4gPCB0aGlzLmJhc2UuY29sdW1uKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmFjdGl2YXRlZCkKICAgICAgICAgICAgdGhpcy5jaGFuZ2VUaW1lci5zY2hlZHVsZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgIH07CgogICAgdGhpcy5ibHVyTGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZWRpdG9yLnRleHRJbnB1dC5nZXRFbGVtZW50KCk7CiAgICAgICAgdmFyIGZyb21Ub29sdGlwID0gZS5yZWxhdGVkVGFyZ2V0ICYmIHRoaXMudG9vbHRpcE5vZGUgJiYgdGhpcy50b29sdGlwTm9kZS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpOwogICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLnBvcHVwICYmIHRoaXMucG9wdXAuY29udGFpbmVyOwogICAgICAgIGlmIChlbCAhPSB0ZXh0ICYmIGVsLnBhcmVudE5vZGUgIT0gY29udGFpbmVyICYmICFmcm9tVG9vbHRpcAogICAgICAgICAgICAmJiBlbCAhPSB0aGlzLnRvb2x0aXBOb2RlICYmIGUucmVsYXRlZFRhcmdldCAhPSB0ZXh0CiAgICAgICAgKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLm1vdXNlZG93bkxpc3RlbmVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwoKICAgIHRoaXMubW91c2V3aGVlbExpc3RlbmVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwoKICAgIHRoaXMuZ29UbyA9IGZ1bmN0aW9uKHdoZXJlKSB7CiAgICAgICAgdGhpcy5wb3B1cC5nb1RvKHdoZXJlKTsKICAgIH07CgogICAgdGhpcy5pbnNlcnRNYXRjaCA9IGZ1bmN0aW9uKGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgIGRhdGEgPSB0aGlzLnBvcHVwLmdldERhdGEodGhpcy5wb3B1cC5nZXRSb3coKSk7CiAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChkYXRhLmNvbXBsZXRlciAmJiBkYXRhLmNvbXBsZXRlci5pbnNlcnRNYXRjaCkgewogICAgICAgICAgICBkYXRhLmNvbXBsZXRlci5pbnNlcnRNYXRjaCh0aGlzLmVkaXRvciwgZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dCkgewogICAgICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5nZXRBbGxSYW5nZXMoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByYW5nZTsgcmFuZ2UgPSByYW5nZXNbaV07IGkrKykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiAtPSB0aGlzLmNvbXBsZXRpb25zLmZpbHRlclRleHQubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZGF0YS5zbmlwcGV0KQogICAgICAgICAgICAgICAgc25pcHBldE1hbmFnZXIuaW5zZXJ0U25pcHBldCh0aGlzLmVkaXRvciwgZGF0YS5zbmlwcGV0KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoImluc2VydHN0cmluZyIsIGRhdGEudmFsdWUgfHwgZGF0YSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwoKCiAgICB0aGlzLmNvbW1hbmRzID0gewogICAgICAgICJVcCI6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tcGxldGVyLmdvVG8oInVwIik7IH0sCiAgICAgICAgIkRvd24iOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbXBsZXRlci5nb1RvKCJkb3duIik7IH0sCiAgICAgICAgIkN0cmwtVXB8Q3RybC1Ib21lIjogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb21wbGV0ZXIuZ29Ubygic3RhcnQiKTsgfSwKICAgICAgICAiQ3RybC1Eb3dufEN0cmwtRW5kIjogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb21wbGV0ZXIuZ29UbygiZW5kIik7IH0sCgogICAgICAgICJFc2MiOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbXBsZXRlci5kZXRhY2goKTsgfSwKICAgICAgICAiUmV0dXJuIjogZnVuY3Rpb24oZWRpdG9yKSB7IHJldHVybiBlZGl0b3IuY29tcGxldGVyLmluc2VydE1hdGNoKCk7IH0sCiAgICAgICAgIlNoaWZ0LVJldHVybiI6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tcGxldGVyLmluc2VydE1hdGNoKG51bGwsIHtkZWxldGVTdWZmaXg6IHRydWV9KTsgfSwKICAgICAgICAiVGFiIjogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlZGl0b3IuY29tcGxldGVyLmluc2VydE1hdGNoKCk7CiAgICAgICAgICAgIGlmICghcmVzdWx0ICYmICFlZGl0b3IudGFic3RvcE1hbmFnZXIpCiAgICAgICAgICAgICAgICBlZGl0b3IuY29tcGxldGVyLmdvVG8oImRvd24iKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAoKICAgICAgICAiUGFnZVVwIjogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb21wbGV0ZXIucG9wdXAuZ290b1BhZ2VVcCgpOyB9LAogICAgICAgICJQYWdlRG93biI6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tcGxldGVyLnBvcHVwLmdvdG9QYWdlRG93bigpOyB9CiAgICB9OwoKICAgIHRoaXMuZ2F0aGVyQ29tcGxldGlvbnMgPSBmdW5jdGlvbihlZGl0b3IsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3IuZ2V0U2Vzc2lvbigpOwogICAgICAgIHZhciBwb3MgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKCiAgICAgICAgdmFyIHByZWZpeCA9IHV0aWwuZ2V0Q29tcGxldGlvblByZWZpeChlZGl0b3IpOwoKICAgICAgICB0aGlzLmJhc2UgPSBzZXNzaW9uLmRvYy5jcmVhdGVBbmNob3IocG9zLnJvdywgcG9zLmNvbHVtbiAtIHByZWZpeC5sZW5ndGgpOwogICAgICAgIHRoaXMuYmFzZS4kaW5zZXJ0UmlnaHQgPSB0cnVlOwoKICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdOwogICAgICAgIHZhciB0b3RhbCA9IGVkaXRvci5jb21wbGV0ZXJzLmxlbmd0aDsKICAgICAgICBlZGl0b3IuY29tcGxldGVycy5mb3JFYWNoKGZ1bmN0aW9uKGNvbXBsZXRlciwgaSkgewogICAgICAgICAgICBjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoZWRpdG9yLCBzZXNzaW9uLCBwb3MsIHByZWZpeCwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7CiAgICAgICAgICAgICAgICBpZiAoIWVyciAmJiByZXN1bHRzKQogICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLmNvbmNhdChyZXN1bHRzKTsKICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHV0aWwuZ2V0Q29tcGxldGlvblByZWZpeChlZGl0b3IpLAogICAgICAgICAgICAgICAgICAgIG1hdGNoZXM6IG1hdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQ6ICgtLXRvdGFsID09PSAwKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLnNob3dQb3B1cCA9IGZ1bmN0aW9uKGVkaXRvciwgb3B0aW9ucykgewogICAgICAgIGlmICh0aGlzLmVkaXRvcikKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKCiAgICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlOwoKICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKICAgICAgICBpZiAoZWRpdG9yLmNvbXBsZXRlciAhPSB0aGlzKSB7CiAgICAgICAgICAgIGlmIChlZGl0b3IuY29tcGxldGVyKQogICAgICAgICAgICAgICAgZWRpdG9yLmNvbXBsZXRlci5kZXRhY2goKTsKICAgICAgICAgICAgZWRpdG9yLmNvbXBsZXRlciA9IHRoaXM7CiAgICAgICAgfQoKICAgICAgICBlZGl0b3Iub24oImNoYW5nZVNlbGVjdGlvbiIsIHRoaXMuY2hhbmdlTGlzdGVuZXIpOwogICAgICAgIGVkaXRvci5vbigiYmx1ciIsIHRoaXMuYmx1ckxpc3RlbmVyKTsKICAgICAgICBlZGl0b3Iub24oIm1vdXNlZG93biIsIHRoaXMubW91c2Vkb3duTGlzdGVuZXIpOwogICAgICAgIGVkaXRvci5vbigibW91c2V3aGVlbCIsIHRoaXMubW91c2V3aGVlbExpc3RlbmVyKTsKCiAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0aW9ucyhmYWxzZSwgb3B0aW9ucyk7CiAgICB9OwoKICAgIHRoaXMudXBkYXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihrZWVwUG9wdXBQb3NpdGlvbiwgb3B0aW9ucykgewogICAgICAgIGlmIChrZWVwUG9wdXBQb3NpdGlvbiAmJiB0aGlzLmJhc2UgJiYgdGhpcy5jb21wbGV0aW9ucykgewogICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5lZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIHByZWZpeCA9IHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHtzdGFydDogdGhpcy5iYXNlLCBlbmQ6IHBvc30pOwogICAgICAgICAgICBpZiAocHJlZml4ID09IHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dCkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdGhpcy5jb21wbGV0aW9ucy5zZXRGaWx0ZXIocHJlZml4KTsKICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBsZXRpb25zLmZpbHRlcmVkLmxlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaCgpOwogICAgICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZC5sZW5ndGggPT0gMQogICAgICAgICAgICAmJiB0aGlzLmNvbXBsZXRpb25zLmZpbHRlcmVkWzBdLnZhbHVlID09IHByZWZpeAogICAgICAgICAgICAmJiAhdGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZFswXS5zbmlwcGV0KQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgICAgIHRoaXMub3BlblBvcHVwKHRoaXMuZWRpdG9yLCBwcmVmaXgsIGtlZXBQb3B1cFBvc2l0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1hdGNoZXMpIHsKICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHRoaXMuYmFzZSA9IHRoaXMuZWRpdG9yLnNlc3Npb24uZG9jLmNyZWF0ZUFuY2hvcihwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgdGhpcy5iYXNlLiRpbnNlcnRSaWdodCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuY29tcGxldGlvbnMgPSBuZXcgRmlsdGVyZWRMaXN0KG9wdGlvbnMubWF0Y2hlcyk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5Qb3B1cCh0aGlzLmVkaXRvciwgIiIsIGtlZXBQb3B1cFBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgdmFyIF9pZCA9IHRoaXMuZ2F0aGVyQ29tcGxldGlvbnNJZDsKICAgICAgICB0aGlzLmdhdGhlckNvbXBsZXRpb25zKHRoaXMuZWRpdG9yLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHsKICAgICAgICAgICAgdmFyIGRldGFjaElmRmluaXNoZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5maW5pc2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgICAgIH0uYmluZCh0aGlzKTsKCiAgICAgICAgICAgIHZhciBwcmVmaXggPSByZXN1bHRzLnByZWZpeDsKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSByZXN1bHRzICYmIHJlc3VsdHMubWF0Y2hlczsKCiAgICAgICAgICAgIGlmICghbWF0Y2hlcyB8fCAhbWF0Y2hlcy5sZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWNoSWZGaW5pc2hlZCgpOwogICAgICAgICAgICBpZiAocHJlZml4LmluZGV4T2YocmVzdWx0cy5wcmVmaXgpICE9PSAwIHx8IF9pZCAhPSB0aGlzLmdhdGhlckNvbXBsZXRpb25zSWQpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25zID0gbmV3IEZpbHRlcmVkTGlzdChtYXRjaGVzKTsKCiAgICAgICAgICAgIGlmICh0aGlzLmV4YWN0TWF0Y2gpCiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25zLmV4YWN0TWF0Y2ggPSB0cnVlOwoKICAgICAgICAgICAgdGhpcy5jb21wbGV0aW9ucy5zZXRGaWx0ZXIocHJlZml4KTsKICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gdGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZDsKICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZC5sZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWNoSWZGaW5pc2hlZCgpOwogICAgICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09IDEgJiYgZmlsdGVyZWRbMF0udmFsdWUgPT0gcHJlZml4ICYmICFmaWx0ZXJlZFswXS5zbmlwcGV0KQogICAgICAgICAgICAgICAgcmV0dXJuIGRldGFjaElmRmluaXNoZWQoKTsKICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0luc2VydCAmJiBmaWx0ZXJlZC5sZW5ndGggPT0gMSAmJiByZXN1bHRzLmZpbmlzaGVkKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWF0Y2goZmlsdGVyZWRbMF0pOwoKICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAodGhpcy5lZGl0b3IsIHByZWZpeCwga2VlcFBvcHVwUG9zaXRpb24pOwogICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICB9OwoKICAgIHRoaXMuY2FuY2VsQ29udGV4dE1lbnUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmVkaXRvci4kbW91c2VIYW5kbGVyLmNhbmNlbENvbnRleHRNZW51KCk7CiAgICB9OwoKICAgIHRoaXMudXBkYXRlRG9jVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBwb3B1cCA9IHRoaXMucG9wdXA7CiAgICAgICAgdmFyIGFsbCA9IHBvcHVwLmRhdGE7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gYWxsICYmIChhbGxbcG9wdXAuZ2V0SG92ZXJlZFJvdygpXSB8fCBhbGxbcG9wdXAuZ2V0Um93KCldKTsKICAgICAgICB2YXIgZG9jID0gbnVsbDsKICAgICAgICBpZiAoIXNlbGVjdGVkIHx8ICF0aGlzLmVkaXRvciB8fCAhdGhpcy5wb3B1cC5pc09wZW4pCiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZGVEb2NUb29sdGlwKCk7CiAgICAgICAgdGhpcy5lZGl0b3IuY29tcGxldGVycy5zb21lKGZ1bmN0aW9uKGNvbXBsZXRlcikgewogICAgICAgICAgICBpZiAoY29tcGxldGVyLmdldERvY1Rvb2x0aXApCiAgICAgICAgICAgICAgICBkb2MgPSBjb21wbGV0ZXIuZ2V0RG9jVG9vbHRpcChzZWxlY3RlZCk7CiAgICAgICAgICAgIHJldHVybiBkb2M7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFkb2MgJiYgdHlwZW9mIHNlbGVjdGVkICE9ICJzdHJpbmciKQogICAgICAgICAgICBkb2MgPSBzZWxlY3RlZDsKCiAgICAgICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpCiAgICAgICAgICAgIGRvYyA9IHtkb2NUZXh0OiBkb2N9OwogICAgICAgIGlmICghZG9jIHx8ICEoZG9jLmRvY0hUTUwgfHwgZG9jLmRvY1RleHQpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRlRG9jVG9vbHRpcCgpOwogICAgICAgIHRoaXMuc2hvd0RvY1Rvb2x0aXAoZG9jKTsKICAgIH07CgogICAgdGhpcy5zaG93RG9jVG9vbHRpcCA9IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICBpZiAoIXRoaXMudG9vbHRpcE5vZGUpIHsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZS5jbGFzc05hbWUgPSAiYWNlX3Rvb2x0aXAgYWNlX2RvYy10b29sdGlwIjsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZS5zdHlsZS5tYXJnaW4gPSAwOwogICAgICAgICAgICB0aGlzLnRvb2x0aXBOb2RlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAiYXV0byI7CiAgICAgICAgICAgIHRoaXMudG9vbHRpcE5vZGUudGFiSW5kZXggPSAtMTsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZS5vbmJsdXIgPSB0aGlzLmJsdXJMaXN0ZW5lci5iaW5kKHRoaXMpOwogICAgICAgICAgICB0aGlzLnRvb2x0aXBOb2RlLm9uY2xpY2sgPSB0aGlzLm9uVG9vbHRpcENsaWNrLmJpbmQodGhpcyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgdG9vbHRpcE5vZGUgPSB0aGlzLnRvb2x0aXBOb2RlOwogICAgICAgIGlmIChpdGVtLmRvY0hUTUwpIHsKICAgICAgICAgICAgdG9vbHRpcE5vZGUuaW5uZXJIVE1MID0gaXRlbS5kb2NIVE1MOwogICAgICAgIH0gZWxzZSBpZiAoaXRlbS5kb2NUZXh0KSB7CiAgICAgICAgICAgIHRvb2x0aXBOb2RlLnRleHRDb250ZW50ID0gaXRlbS5kb2NUZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0b29sdGlwTm9kZS5wYXJlbnROb2RlKQogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBOb2RlKTsKICAgICAgICB2YXIgcG9wdXAgPSB0aGlzLnBvcHVwOwogICAgICAgIHZhciByZWN0ID0gcG9wdXAuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHRvb2x0aXBOb2RlLnN0eWxlLnRvcCA9IHBvcHVwLmNvbnRhaW5lci5zdHlsZS50b3A7CiAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUuYm90dG9tID0gcG9wdXAuY29udGFpbmVyLnN0eWxlLmJvdHRvbTsKCiAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIC0gcmVjdC5yaWdodCA8IDMyMCkgewogICAgICAgICAgICBpZiAocmVjdC5sZWZ0IDwgMzIwKSB7CiAgICAgICAgICAgICAgICBpZihwb3B1cC5pc1RvcGRvd24pIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS50b3AgPSByZWN0LmJvdHRvbSArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS5ib3R0b20gPSAiIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUudG9wID0gcG9wdXAuY29udGFpbmVyLm9mZnNldFRvcCAtIHRvb2x0aXBOb2RlLm9mZnNldEhlaWdodCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS5ib3R0b20gPSAiIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRvb2x0aXBOb2RlLnN0eWxlLnJpZ2h0ID0gd2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgKyAicHgiOwogICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9ICIiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9IChyZWN0LnJpZ2h0ICsgMSkgKyAicHgiOwogICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5oaWRlRG9jVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMudG9vbHRpcFRpbWVyLmNhbmNlbCgpOwogICAgICAgIGlmICghdGhpcy50b29sdGlwTm9kZSkgcmV0dXJuOwogICAgICAgIHZhciBlbCA9IHRoaXMudG9vbHRpcE5vZGU7CiAgICAgICAgaWYgKCF0aGlzLmVkaXRvci5pc0ZvY3VzZWQoKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsKQogICAgICAgICAgICB0aGlzLmVkaXRvci5mb2N1cygpOwogICAgICAgIHRoaXMudG9vbHRpcE5vZGUgPSBudWxsOwogICAgICAgIGlmIChlbC5wYXJlbnROb2RlKQogICAgICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKICAgIH07CiAgICAKICAgIHRoaXMub25Ub29sdGlwQ2xpY2sgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGEgPSBlLnRhcmdldDsKICAgICAgICB3aGlsZSAoYSAmJiBhICE9IHRoaXMudG9vbHRpcE5vZGUpIHsKICAgICAgICAgICAgaWYgKGEubm9kZU5hbWUgPT0gIkEiICYmIGEuaHJlZikgewogICAgICAgICAgICAgICAgYS5yZWwgPSAibm9yZWZlcnJlciI7CiAgICAgICAgICAgICAgICBhLnRhcmdldCA9ICJfYmxhbmsiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYSA9IGEucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgaWYgKHRoaXMucG9wdXApIHsKICAgICAgICAgICAgdGhpcy5wb3B1cC5kZXN0cm95KCk7CiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMucG9wdXAuY29udGFpbmVyOwogICAgICAgICAgICBpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkKICAgICAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IuY29tcGxldGVyID09IHRoaXMpCiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNvbXBsZXRlciA9PSBudWxsOwogICAgICAgIHRoaXMucG9wdXAgPSBudWxsOwogICAgfTsKCn0pLmNhbGwoQXV0b2NvbXBsZXRlLnByb3RvdHlwZSk7CgoKQXV0b2NvbXBsZXRlLmZvciA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgaWYgKGVkaXRvci5jb21wbGV0ZXIpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLmNvbXBsZXRlcjsKICAgIH0KICAgIGlmIChjb25maWcuZ2V0KCJzaGFyZWRQb3B1cHMiKSkgewogICAgICAgIGlmICghQXV0b2NvbXBsZXRlLiRzaGFyZWQpCiAgICAgICAgICAgIEF1dG9jb21wbGV0ZS4kc2hhcmVkSW5zdGFuY2UgPSBuZXcgQXV0b2NvbXBsZXRlKCk7CiAgICAgICAgZWRpdG9yLmNvbXBsZXRlciA9IEF1dG9jb21wbGV0ZS4kc2hhcmVkSW5zdGFuY2U7CiAgICB9IGVsc2UgewogICAgICAgIGVkaXRvci5jb21wbGV0ZXIgPSBuZXcgQXV0b2NvbXBsZXRlKCk7CiAgICAgICAgZWRpdG9yLm9uY2UoImRlc3Ryb3kiLCBmdW5jdGlvbihlLCBlZGl0b3IpIHsKICAgICAgICAgICAgZWRpdG9yLmNvbXBsZXRlci5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZWRpdG9yLmNvbXBsZXRlcjsKfTsKCkF1dG9jb21wbGV0ZS5zdGFydENvbW1hbmQgPSB7CiAgICBuYW1lOiAic3RhcnRBdXRvY29tcGxldGUiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGNvbXBsZXRlciA9IEF1dG9jb21wbGV0ZS5mb3IoZWRpdG9yKTsKICAgICAgICBjb21wbGV0ZXIuYXV0b0luc2VydCA9IGZhbHNlOwogICAgICAgIGNvbXBsZXRlci5hdXRvU2VsZWN0ID0gdHJ1ZTsKICAgICAgICBjb21wbGV0ZXIuc2hvd1BvcHVwKGVkaXRvciwgb3B0aW9ucyk7CiAgICAgICAgY29tcGxldGVyLmNhbmNlbENvbnRleHRNZW51KCk7CiAgICB9LAogICAgYmluZEtleTogIkN0cmwtU3BhY2V8Q3RybC1TaGlmdC1TcGFjZXxBbHQtU3BhY2UiCn07Cgp2YXIgRmlsdGVyZWRMaXN0ID0gZnVuY3Rpb24oYXJyYXksIGZpbHRlclRleHQpIHsKICAgIHRoaXMuYWxsID0gYXJyYXk7CiAgICB0aGlzLmZpbHRlcmVkID0gYXJyYXk7CiAgICB0aGlzLmZpbHRlclRleHQgPSBmaWx0ZXJUZXh0IHx8ICIiOwogICAgdGhpcy5leGFjdE1hdGNoID0gZmFsc2U7Cn07CihmdW5jdGlvbigpewogICAgdGhpcy5zZXRGaWx0ZXIgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IHRoaXMuZmlsdGVyVGV4dCAmJiBzdHIubGFzdEluZGV4T2YodGhpcy5maWx0ZXJUZXh0LCAwKSA9PT0gMCkKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLmZpbHRlcmVkOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLmFsbDsKCiAgICAgICAgdGhpcy5maWx0ZXJUZXh0ID0gc3RyOwogICAgICAgIG1hdGNoZXMgPSB0aGlzLmZpbHRlckNvbXBsZXRpb25zKG1hdGNoZXMsIHRoaXMuZmlsdGVyVGV4dCk7CiAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgIHJldHVybiBiLmV4YWN0TWF0Y2ggLSBhLmV4YWN0TWF0Y2ggfHwgYi4kc2NvcmUgLSBhLiRzY29yZSAKICAgICAgICAgICAgICAgIHx8IChhLmNhcHRpb24gfHwgYS52YWx1ZSkubG9jYWxlQ29tcGFyZShiLmNhcHRpb24gfHwgYi52YWx1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHByZXYgPSBudWxsOwogICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbihpdGVtKXsKICAgICAgICAgICAgdmFyIGNhcHRpb24gPSBpdGVtLnNuaXBwZXQgfHwgaXRlbS5jYXB0aW9uIHx8IGl0ZW0udmFsdWU7CiAgICAgICAgICAgIGlmIChjYXB0aW9uID09PSBwcmV2KSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHByZXYgPSBjYXB0aW9uOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5maWx0ZXJlZCA9IG1hdGNoZXM7CiAgICB9OwogICAgdGhpcy5maWx0ZXJDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKGl0ZW1zLCBuZWVkbGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgICAgIHZhciB1cHBlciA9IG5lZWRsZS50b1VwcGVyQ2FzZSgpOwogICAgICAgIHZhciBsb3dlciA9IG5lZWRsZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGxvb3A6IGZvciAodmFyIGkgPSAwLCBpdGVtOyBpdGVtID0gaXRlbXNbaV07IGkrKykgewogICAgICAgICAgICB2YXIgY2FwdGlvbiA9IGl0ZW0uY2FwdGlvbiB8fCBpdGVtLnZhbHVlIHx8IGl0ZW0uc25pcHBldDsKICAgICAgICAgICAgaWYgKCFjYXB0aW9uKSBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGxhc3RJbmRleCA9IC0xOwogICAgICAgICAgICB2YXIgbWF0Y2hNYXNrID0gMDsKICAgICAgICAgICAgdmFyIHBlbmFsdHkgPSAwOwogICAgICAgICAgICB2YXIgaW5kZXgsIGRpc3RhbmNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuZXhhY3RNYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG5lZWRsZSAhPT0gY2FwdGlvbi5zdWJzdHIoMCwgbmVlZGxlLmxlbmd0aCkpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUgbG9vcDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBmdWxsTWF0Y2hJbmRleCA9IGNhcHRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGxvd2VyKTsKICAgICAgICAgICAgICAgIGlmIChmdWxsTWF0Y2hJbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcGVuYWx0eSA9IGZ1bGxNYXRjaEluZGV4OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5lZWRsZS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTEgPSBjYXB0aW9uLmluZGV4T2YobG93ZXJbal0sIGxhc3RJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTIgPSBjYXB0aW9uLmluZGV4T2YodXBwZXJbal0sIGxhc3RJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IChpMSA+PSAwKSA/ICgoaTIgPCAwIHx8IGkxIDwgaTIpID8gaTEgOiBpMikgOiBpMjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gaW5kZXggLSBsYXN0SW5kZXggLSAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5ICs9IDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eSArPSBkaXN0YW5jZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTWFzayA9IG1hdGNoTWFzayB8ICgxIDw8IGopOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpdGVtLm1hdGNoTWFzayA9IG1hdGNoTWFzazsKICAgICAgICAgICAgaXRlbS5leGFjdE1hdGNoID0gcGVuYWx0eSA/IDAgOiAxOwogICAgICAgICAgICBpdGVtLiRzY29yZSA9IChpdGVtLnNjb3JlIHx8IDApIC0gcGVuYWx0eTsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH07Cn0pLmNhbGwoRmlsdGVyZWRMaXN0LnByb3RvdHlwZSk7CgpleHBvcnRzLkF1dG9jb21wbGV0ZSA9IEF1dG9jb21wbGV0ZTsKZXhwb3J0cy5GaWx0ZXJlZExpc3QgPSBGaWx0ZXJlZExpc3Q7Cgp9KTsKCmRlZmluZSgiYWNlL2F1dG9jb21wbGV0ZS90ZXh0X2NvbXBsZXRlciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgIHZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CiAgICAKICAgIHZhciBzcGxpdFJlZ2V4ID0gL1teYS16QS1aXzAtOVwkXC1cdTAwQzAtXHUxRkZGXHUyQzAwLVx1RDdGRlx3XSsvOwoKICAgIGZ1bmN0aW9uIGdldFdvcmRJbmRleChkb2MsIHBvcykgewogICAgICAgIHZhciB0ZXh0QmVmb3JlID0gZG9jLmdldFRleHRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKHtyb3c6IDAsIGNvbHVtbjowfSwgcG9zKSk7CiAgICAgICAgcmV0dXJuIHRleHRCZWZvcmUuc3BsaXQoc3BsaXRSZWdleCkubGVuZ3RoIC0gMTsKICAgIH0KICAgIGZ1bmN0aW9uIHdvcmREaXN0YW5jZShkb2MsIHBvcykgewogICAgICAgIHZhciBwcmVmaXhQb3MgPSBnZXRXb3JkSW5kZXgoZG9jLCBwb3MpOwogICAgICAgIHZhciB3b3JkcyA9IGRvYy5nZXRWYWx1ZSgpLnNwbGl0KHNwbGl0UmVnZXgpOwogICAgICAgIHZhciB3b3JkU2NvcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgICAgICAKICAgICAgICB2YXIgY3VycmVudFdvcmQgPSB3b3Jkc1twcmVmaXhQb3NdOwoKICAgICAgICB3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uKHdvcmQsIGlkeCkgewogICAgICAgICAgICBpZiAoIXdvcmQgfHwgd29yZCA9PT0gY3VycmVudFdvcmQpIHJldHVybjsKCiAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IE1hdGguYWJzKHByZWZpeFBvcyAtIGlkeCk7CiAgICAgICAgICAgIHZhciBzY29yZSA9IHdvcmRzLmxlbmd0aCAtIGRpc3RhbmNlOwogICAgICAgICAgICBpZiAod29yZFNjb3Jlc1t3b3JkXSkgewogICAgICAgICAgICAgICAgd29yZFNjb3Jlc1t3b3JkXSA9IE1hdGgubWF4KHNjb3JlLCB3b3JkU2NvcmVzW3dvcmRdKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHdvcmRTY29yZXNbd29yZF0gPSBzY29yZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB3b3JkU2NvcmVzOwogICAgfQoKICAgIGV4cG9ydHMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIHBvcywgcHJlZml4LCBjYWxsYmFjaykgewogICAgICAgIHZhciB3b3JkU2NvcmUgPSB3b3JkRGlzdGFuY2Uoc2Vzc2lvbiwgcG9zKTsKICAgICAgICB2YXIgd29yZExpc3QgPSBPYmplY3Qua2V5cyh3b3JkU2NvcmUpOwogICAgICAgIGNhbGxiYWNrKG51bGwsIHdvcmRMaXN0Lm1hcChmdW5jdGlvbih3b3JkKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB3b3JkLAogICAgICAgICAgICAgICAgdmFsdWU6IHdvcmQsCiAgICAgICAgICAgICAgICBzY29yZTogd29yZFNjb3JlW3dvcmRdLAogICAgICAgICAgICAgICAgbWV0YTogImxvY2FsIgogICAgICAgICAgICB9OwogICAgICAgIH0pKTsKICAgIH07Cn0pOwoKZGVmaW5lKCJhY2UvZXh0L2xhbmd1YWdlX3Rvb2xzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3NuaXBwZXRzIiwiYWNlL2F1dG9jb21wbGV0ZSIsImFjZS9jb25maWciLCJhY2UvbGliL2xhbmciLCJhY2UvYXV0b2NvbXBsZXRlL3V0aWwiLCJhY2UvYXV0b2NvbXBsZXRlL3RleHRfY29tcGxldGVyIiwiYWNlL2VkaXRvciIsImFjZS9jb25maWciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBzbmlwcGV0TWFuYWdlciA9IHJlcXVpcmUoIi4uL3NuaXBwZXRzIikuc25pcHBldE1hbmFnZXI7CnZhciBBdXRvY29tcGxldGUgPSByZXF1aXJlKCIuLi9hdXRvY29tcGxldGUiKS5BdXRvY29tcGxldGU7CnZhciBjb25maWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgdXRpbCA9IHJlcXVpcmUoIi4uL2F1dG9jb21wbGV0ZS91dGlsIik7Cgp2YXIgdGV4dENvbXBsZXRlciA9IHJlcXVpcmUoIi4uL2F1dG9jb21wbGV0ZS90ZXh0X2NvbXBsZXRlciIpOwp2YXIga2V5V29yZENvbXBsZXRlciA9IHsKICAgIGdldENvbXBsZXRpb25zOiBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIHBvcywgcHJlZml4LCBjYWxsYmFjaykgewogICAgICAgIGlmIChzZXNzaW9uLiRtb2RlLmNvbXBsZXRlcikgewogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi4kbW9kZS5jb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoZWRpdG9yLCBzZXNzaW9uLCBwb3MsIHByZWZpeCwgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgICB2YXIgc3RhdGUgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRTdGF0ZShwb3Mucm93KTsKICAgICAgICB2YXIgY29tcGxldGlvbnMgPSBzZXNzaW9uLiRtb2RlLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgY2FsbGJhY2sobnVsbCwgY29tcGxldGlvbnMpOwogICAgfQp9OwoKdmFyIHNuaXBwZXRDb21wbGV0ZXIgPSB7CiAgICBnZXRDb21wbGV0aW9uczogZnVuY3Rpb24oZWRpdG9yLCBzZXNzaW9uLCBwb3MsIHByZWZpeCwgY2FsbGJhY2spIHsKICAgICAgICB2YXIgc2NvcGVzID0gW107CiAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLm1hdGNoKC8odGFnLW5hbWV8dGFnLW9wZW58dGFnLXdoaXRlc3BhY2V8YXR0cmlidXRlLW5hbWV8YXR0cmlidXRlLXZhbHVlKVwueG1sJC8pKQogICAgICAgICAgICBzY29wZXMucHVzaCgnaHRtbC10YWcnKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNjb3BlcyA9IHNuaXBwZXRNYW5hZ2VyLmdldEFjdGl2ZVNjb3BlcyhlZGl0b3IpOwoKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHNuaXBwZXRNYW5hZ2VyLnNuaXBwZXRNYXA7CiAgICAgICAgdmFyIGNvbXBsZXRpb25zID0gW107CiAgICAgICAgc2NvcGVzLmZvckVhY2goZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICAgICAgdmFyIHNuaXBwZXRzID0gc25pcHBldE1hcFtzY29wZV0gfHwgW107CiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzbmlwcGV0cy5sZW5ndGg7IGktLTspIHsKICAgICAgICAgICAgICAgIHZhciBzID0gc25pcHBldHNbaV07CiAgICAgICAgICAgICAgICB2YXIgY2FwdGlvbiA9IHMubmFtZSB8fCBzLnRhYlRyaWdnZXI7CiAgICAgICAgICAgICAgICBpZiAoIWNhcHRpb24pCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICBjb21wbGV0aW9ucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBjYXB0aW9uOiBjYXB0aW9uLAogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHMuY29udGVudCwKICAgICAgICAgICAgICAgICAgICBtZXRhOiBzLnRhYlRyaWdnZXIgJiYgIXMubmFtZSA/IHMudGFiVHJpZ2dlciArICJcdTIxRTUgIiA6ICJzbmlwcGV0IiwKICAgICAgICAgICAgICAgICAgICB0eXBlOiAic25pcHBldCIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgY2FsbGJhY2sobnVsbCwgY29tcGxldGlvbnMpOwogICAgfSwKICAgIGdldERvY1Rvb2x0aXA6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbS50eXBlID09ICJzbmlwcGV0IiAmJiAhaXRlbS5kb2NIVE1MKSB7CiAgICAgICAgICAgIGl0ZW0uZG9jSFRNTCA9IFsKICAgICAgICAgICAgICAgICI8Yj4iLCBsYW5nLmVzY2FwZUhUTUwoaXRlbS5jYXB0aW9uKSwgIjwvYj4iLCAiPGhyPjwvaHI+IiwKICAgICAgICAgICAgICAgIGxhbmcuZXNjYXBlSFRNTChpdGVtLnNuaXBwZXQpCiAgICAgICAgICAgIF0uam9pbigiIik7CiAgICAgICAgfQogICAgfQp9OwoKdmFyIGNvbXBsZXRlcnMgPSBbc25pcHBldENvbXBsZXRlciwgdGV4dENvbXBsZXRlciwga2V5V29yZENvbXBsZXRlcl07CmV4cG9ydHMuc2V0Q29tcGxldGVycyA9IGZ1bmN0aW9uKHZhbCkgewogICAgY29tcGxldGVycy5sZW5ndGggPSAwOwogICAgaWYgKHZhbCkgY29tcGxldGVycy5wdXNoLmFwcGx5KGNvbXBsZXRlcnMsIHZhbCk7Cn07CmV4cG9ydHMuYWRkQ29tcGxldGVyID0gZnVuY3Rpb24oY29tcGxldGVyKSB7CiAgICBjb21wbGV0ZXJzLnB1c2goY29tcGxldGVyKTsKfTsKZXhwb3J0cy50ZXh0Q29tcGxldGVyID0gdGV4dENvbXBsZXRlcjsKZXhwb3J0cy5rZXlXb3JkQ29tcGxldGVyID0ga2V5V29yZENvbXBsZXRlcjsKZXhwb3J0cy5zbmlwcGV0Q29tcGxldGVyID0gc25pcHBldENvbXBsZXRlcjsKCnZhciBleHBhbmRTbmlwcGV0ID0gewogICAgbmFtZTogImV4cGFuZFNuaXBwZXQiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIHNuaXBwZXRNYW5hZ2VyLmV4cGFuZFdpdGhUYWIoZWRpdG9yKTsKICAgIH0sCiAgICBiaW5kS2V5OiAiVGFiIgp9OwoKdmFyIG9uQ2hhbmdlTW9kZSA9IGZ1bmN0aW9uKGUsIGVkaXRvcikgewogICAgbG9hZFNuaXBwZXRzRm9yTW9kZShlZGl0b3Iuc2Vzc2lvbi4kbW9kZSk7Cn07Cgp2YXIgbG9hZFNuaXBwZXRzRm9yTW9kZSA9IGZ1bmN0aW9uKG1vZGUpIHsKICAgIHZhciBpZCA9IG1vZGUuJGlkOwogICAgaWYgKCFzbmlwcGV0TWFuYWdlci5maWxlcykKICAgICAgICBzbmlwcGV0TWFuYWdlci5maWxlcyA9IHt9OwogICAgbG9hZFNuaXBwZXRGaWxlKGlkKTsKICAgIGlmIChtb2RlLm1vZGVzKQogICAgICAgIG1vZGUubW9kZXMuZm9yRWFjaChsb2FkU25pcHBldHNGb3JNb2RlKTsKfTsKCnZhciBsb2FkU25pcHBldEZpbGUgPSBmdW5jdGlvbihpZCkgewogICAgaWYgKCFpZCB8fCBzbmlwcGV0TWFuYWdlci5maWxlc1tpZF0pCiAgICAgICAgcmV0dXJuOwogICAgdmFyIHNuaXBwZXRGaWxlUGF0aCA9IGlkLnJlcGxhY2UoIm1vZGUiLCAic25pcHBldHMiKTsKICAgIHNuaXBwZXRNYW5hZ2VyLmZpbGVzW2lkXSA9IHt9OwogICAgY29uZmlnLmxvYWRNb2R1bGUoc25pcHBldEZpbGVQYXRoLCBmdW5jdGlvbihtKSB7CiAgICAgICAgaWYgKG0pIHsKICAgICAgICAgICAgc25pcHBldE1hbmFnZXIuZmlsZXNbaWRdID0gbTsKICAgICAgICAgICAgaWYgKCFtLnNuaXBwZXRzICYmIG0uc25pcHBldFRleHQpCiAgICAgICAgICAgICAgICBtLnNuaXBwZXRzID0gc25pcHBldE1hbmFnZXIucGFyc2VTbmlwcGV0RmlsZShtLnNuaXBwZXRUZXh0KTsKICAgICAgICAgICAgc25pcHBldE1hbmFnZXIucmVnaXN0ZXIobS5zbmlwcGV0cyB8fCBbXSwgbS5zY29wZSk7CiAgICAgICAgICAgIGlmIChtLmluY2x1ZGVTY29wZXMpIHsKICAgICAgICAgICAgICAgIHNuaXBwZXRNYW5hZ2VyLnNuaXBwZXRNYXBbbS5zY29wZV0uaW5jbHVkZVNjb3BlcyA9IG0uaW5jbHVkZVNjb3BlczsKICAgICAgICAgICAgICAgIG0uaW5jbHVkZVNjb3Blcy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgICAgICBsb2FkU25pcHBldEZpbGUoImFjZS9tb2RlLyIgKyB4KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cn07Cgp2YXIgZG9MaXZlQXV0b2NvbXBsZXRlID0gZnVuY3Rpb24oZSkgewogICAgdmFyIGVkaXRvciA9IGUuZWRpdG9yOwogICAgdmFyIGhhc0NvbXBsZXRlciA9IGVkaXRvci5jb21wbGV0ZXIgJiYgZWRpdG9yLmNvbXBsZXRlci5hY3RpdmF0ZWQ7CiAgICBpZiAoZS5jb21tYW5kLm5hbWUgPT09ICJiYWNrc3BhY2UiKSB7CiAgICAgICAgaWYgKGhhc0NvbXBsZXRlciAmJiAhdXRpbC5nZXRDb21wbGV0aW9uUHJlZml4KGVkaXRvcikpCiAgICAgICAgICAgIGVkaXRvci5jb21wbGV0ZXIuZGV0YWNoKCk7CiAgICB9CiAgICBlbHNlIGlmIChlLmNvbW1hbmQubmFtZSA9PT0gImluc2VydHN0cmluZyIpIHsKICAgICAgICB2YXIgcHJlZml4ID0gdXRpbC5nZXRDb21wbGV0aW9uUHJlZml4KGVkaXRvcik7CiAgICAgICAgaWYgKHByZWZpeCAmJiAhaGFzQ29tcGxldGVyKSB7CiAgICAgICAgICAgIHZhciBjb21wbGV0ZXIgPSBBdXRvY29tcGxldGUuZm9yKGVkaXRvcik7CiAgICAgICAgICAgIGNvbXBsZXRlci5hdXRvSW5zZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgIGNvbXBsZXRlci5zaG93UG9wdXAoZWRpdG9yKTsKICAgICAgICB9CiAgICB9Cn07Cgp2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi4vZWRpdG9yIikuRWRpdG9yOwpyZXF1aXJlKCIuLi9jb25maWciKS5kZWZpbmVPcHRpb25zKEVkaXRvci5wcm90b3R5cGUsICJlZGl0b3IiLCB7CiAgICBlbmFibGVCYXNpY0F1dG9jb21wbGV0aW9uOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBsZXRlcnMpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZXJzID0gQXJyYXkuaXNBcnJheSh2YWwpPyB2YWw6IGNvbXBsZXRlcnM7CiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRzLmFkZENvbW1hbmQoQXV0b2NvbXBsZXRlLnN0YXJ0Q29tbWFuZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRzLnJlbW92ZUNvbW1hbmQoQXV0b2NvbXBsZXRlLnN0YXJ0Q29tbWFuZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHZhbHVlOiBmYWxzZQogICAgfSwKICAgIGVuYWJsZUxpdmVBdXRvY29tcGxldGlvbjogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb21wbGV0ZXJzKQogICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVycyA9IEFycmF5LmlzQXJyYXkodmFsKT8gdmFsOiBjb21wbGV0ZXJzOwogICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5vbignYWZ0ZXJFeGVjJywgZG9MaXZlQXV0b2NvbXBsZXRlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZHMucmVtb3ZlTGlzdGVuZXIoJ2FmdGVyRXhlYycsIGRvTGl2ZUF1dG9jb21wbGV0ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHZhbHVlOiBmYWxzZQogICAgfSwKICAgIGVuYWJsZVNuaXBwZXRzOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5hZGRDb21tYW5kKGV4cGFuZFNuaXBwZXQpOwogICAgICAgICAgICAgICAgdGhpcy5vbigiY2hhbmdlTW9kZSIsIG9uQ2hhbmdlTW9kZSk7CiAgICAgICAgICAgICAgICBvbkNoYW5nZU1vZGUobnVsbCwgdGhpcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRzLnJlbW92ZUNvbW1hbmQoZXhwYW5kU25pcHBldCk7CiAgICAgICAgICAgICAgICB0aGlzLm9mZigiY2hhbmdlTW9kZSIsIG9uQ2hhbmdlTW9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHZhbHVlOiBmYWxzZQogICAgfQp9KTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvbGFuZ3VhZ2VfdG9vbHMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-linking.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L2xpbmtpbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvZWRpdG9yIiwiYWNlL2NvbmZpZyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBFZGl0b3IgPSByZXF1aXJlKCIuLi9lZGl0b3IiKS5FZGl0b3I7CgpyZXF1aXJlKCIuLi9jb25maWciKS5kZWZpbmVPcHRpb25zKEVkaXRvci5wcm90b3R5cGUsICJlZGl0b3IiLCB7CiAgICBlbmFibGVMaW5raW5nOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICAgICAgdGhpcy5vbigiY2xpY2siLCBvbkNsaWNrKTsKICAgICAgICAgICAgICAgIHRoaXMub24oIm1vdXNlbW92ZSIsIG9uTW91c2VNb3ZlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMub2ZmKCJjbGljayIsIG9uQ2xpY2spOwogICAgICAgICAgICAgICAgdGhpcy5vZmYoIm1vdXNlbW92ZSIsIG9uTW91c2VNb3ZlKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgdmFsdWU6IGZhbHNlCiAgICB9Cn0pOwoKZXhwb3J0cy5wcmV2aW91c0xpbmtpbmdIb3ZlciA9IGZhbHNlOwoKZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkgewogICAgdmFyIGVkaXRvciA9IGUuZWRpdG9yOwogICAgdmFyIGN0cmwgPSBlLmdldEFjY2VsS2V5KCk7CgogICAgaWYgKGN0cmwpIHsKICAgICAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7CiAgICAgICAgdmFyIGRvY1BvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOwogICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247CiAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGRvY1Bvcy5yb3csIGRvY1Bvcy5jb2x1bW4pOwoKICAgICAgICBpZiAoZXhwb3J0cy5wcmV2aW91c0xpbmtpbmdIb3ZlciAmJiBleHBvcnRzLnByZXZpb3VzTGlua2luZ0hvdmVyICE9IHRva2VuKSB7CiAgICAgICAgICAgIGVkaXRvci5fZW1pdCgibGlua0hvdmVyT3V0Iik7CiAgICAgICAgfQogICAgICAgIGVkaXRvci5fZW1pdCgibGlua0hvdmVyIiwge3Bvc2l0aW9uOiBkb2NQb3MsIHRva2VuOiB0b2tlbn0pOwogICAgICAgIGV4cG9ydHMucHJldmlvdXNMaW5raW5nSG92ZXIgPSB0b2tlbjsKICAgIH0gZWxzZSBpZiAoZXhwb3J0cy5wcmV2aW91c0xpbmtpbmdIb3ZlcikgewogICAgICAgIGVkaXRvci5fZW1pdCgibGlua0hvdmVyT3V0Iik7CiAgICAgICAgZXhwb3J0cy5wcmV2aW91c0xpbmtpbmdIb3ZlciA9IGZhbHNlOwogICAgfQp9CgpmdW5jdGlvbiBvbkNsaWNrKGUpIHsKICAgIHZhciBjdHJsID0gZS5nZXRBY2NlbEtleSgpOwogICAgdmFyIGJ1dHRvbiA9IGUuZ2V0QnV0dG9uKCk7CgogICAgaWYgKGJ1dHRvbiA9PSAwICYmIGN0cmwpIHsKICAgICAgICB2YXIgZWRpdG9yID0gZS5lZGl0b3I7CiAgICAgICAgdmFyIGRvY1BvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOwogICAgICAgIHZhciBzZXNzaW9uID0gZWRpdG9yLnNlc3Npb247CiAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGRvY1Bvcy5yb3csIGRvY1Bvcy5jb2x1bW4pOwoKICAgICAgICBlZGl0b3IuX2VtaXQoImxpbmtDbGljayIsIHtwb3NpdGlvbjogZG9jUG9zLCB0b2tlbjogdG9rZW59KTsKICAgIH0KfQoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvbGlua2luZyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-modelist.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L21vZGVsaXN0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbW9kZXMgPSBbXTsKZnVuY3Rpb24gZ2V0TW9kZUZvclBhdGgocGF0aCkgewogICAgdmFyIG1vZGUgPSBtb2Rlc0J5TmFtZS50ZXh0OwogICAgdmFyIGZpbGVOYW1lID0gcGF0aC5zcGxpdCgvW1wvXFxdLykucG9wKCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKG1vZGVzW2ldLnN1cHBvcnRzRmlsZShmaWxlTmFtZSkpIHsKICAgICAgICAgICAgbW9kZSA9IG1vZGVzW2ldOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbW9kZTsKfQoKdmFyIE1vZGUgPSBmdW5jdGlvbihuYW1lLCBjYXB0aW9uLCBleHRlbnNpb25zKSB7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgdGhpcy5jYXB0aW9uID0gY2FwdGlvbjsKICAgIHRoaXMubW9kZSA9ICJhY2UvbW9kZS8iICsgbmFtZTsKICAgIHRoaXMuZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnM7CiAgICB2YXIgcmU7CiAgICBpZiAoL1xeLy50ZXN0KGV4dGVuc2lvbnMpKSB7CiAgICAgICAgcmUgPSBleHRlbnNpb25zLnJlcGxhY2UoL1x8KFxeKT8vZywgZnVuY3Rpb24oYSwgYil7CiAgICAgICAgICAgIHJldHVybiAiJHwiICsgKGIgPyAiXiIgOiAiXi4qXFwuIik7CiAgICAgICAgfSkgKyAiJCI7CiAgICB9IGVsc2UgewogICAgICAgIHJlID0gIl4uKlxcLigiICsgZXh0ZW5zaW9ucyArICIpJCI7CiAgICB9CgogICAgdGhpcy5leHRSZSA9IG5ldyBSZWdFeHAocmUsICJnaSIpOwp9OwoKTW9kZS5wcm90b3R5cGUuc3VwcG9ydHNGaWxlID0gZnVuY3Rpb24oZmlsZW5hbWUpIHsKICAgIHJldHVybiBmaWxlbmFtZS5tYXRjaCh0aGlzLmV4dFJlKTsKfTsKdmFyIHN1cHBvcnRlZE1vZGVzID0gewogICAgQUJBUDogICAgICAgIFsiYWJhcCJdLAogICAgQUJDOiAgICAgICAgIFsiYWJjIl0sCiAgICBBY3Rpb25TY3JpcHQ6WyJhcyJdLAogICAgQURBOiAgICAgICAgIFsiYWRhfGFkYiJdLAogICAgQXBhY2hlX0NvbmY6IFsiXmh0YWNjZXNzfF5odGdyb3Vwc3xeaHRwYXNzd2R8XmNvbmZ8aHRhY2Nlc3N8aHRncm91cHN8aHRwYXNzd2QiXSwKICAgIEFzY2lpRG9jOiAgICBbImFzY2lpZG9jfGFkb2MiXSwKICAgIEFTTDogICAgICAgICBbImRzbHxhc2wiXSwKICAgIEFzc2VtYmx5X3g4NjpbImFzbXxhIl0sCiAgICBBdXRvSG90S2V5OiAgWyJhaGsiXSwKICAgIEFwZXg6ICAgICAgICBbImFwZXh8Y2xzfHRyaWdnZXJ8dGdyIl0sCiAgICBBUUw6ICAgICAgICAgWyJhcWwiXSwKICAgIEJhdGNoRmlsZTogICBbImJhdHxjbWQiXSwKICAgIENfQ3BwOiAgICAgICBbImNwcHxjfGNjfGN4eHxofGhofGhwcHxpbm8iXSwKICAgIEM5U2VhcmNoOiAgICBbImM5c2VhcmNoX3Jlc3VsdHMiXSwKICAgIENyeXN0YWw6ICAgICBbImNyIl0sCiAgICBDaXJydTogICAgICAgWyJjaXJydXxjciJdLAogICAgQ2xvanVyZTogICAgIFsiY2xqfGNsanMiXSwKICAgIENvYm9sOiAgICAgICBbIkNCTHxDT0IiXSwKICAgIGNvZmZlZTogICAgICBbImNvZmZlZXxjZnxjc29ufF5DYWtlZmlsZSJdLAogICAgQ29sZEZ1c2lvbjogIFsiY2ZtIl0sCiAgICBDU2hhcnA6ICAgICAgWyJjcyJdLAogICAgQ3NvdW5kX0RvY3VtZW50OiBbImNzZCJdLAogICAgQ3NvdW5kX09yY2hlc3RyYTogWyJvcmMiXSwKICAgIENzb3VuZF9TY29yZTogWyJzY28iXSwKICAgIENTUzogICAgICAgICBbImNzcyJdLAogICAgQ3VybHk6ICAgICAgIFsiY3VybHkiXSwKICAgIEQ6ICAgICAgICAgICBbImR8ZGkiXSwKICAgIERhcnQ6ICAgICAgICBbImRhcnQiXSwKICAgIERpZmY6ICAgICAgICBbImRpZmZ8cGF0Y2giXSwKICAgIERvY2tlcmZpbGU6ICBbIl5Eb2NrZXJmaWxlIl0sCiAgICBEb3Q6ICAgICAgICAgWyJkb3QiXSwKICAgIERyb29sczogICAgICBbImRybCJdLAogICAgRWRpZmFjdDogICAgIFsiZWRpIl0sCiAgICBFaWZmZWw6ICAgICAgWyJlfGdlIl0sCiAgICBFSlM6ICAgICAgICAgWyJlanMiXSwKICAgIEVsaXhpcjogICAgICBbImV4fGV4cyJdLAogICAgRWxtOiAgICAgICAgIFsiZWxtIl0sCiAgICBFcmxhbmc6ICAgICAgWyJlcmx8aHJsIl0sCiAgICBGb3J0aDogICAgICAgWyJmcnR8ZnN8bGRyfGZ0aHw0dGgiXSwKICAgIEZvcnRyYW46ICAgICBbImZ8ZjkwIl0sCiAgICBGU2hhcnA6ICAgICAgWyJmc2l8ZnN8bWx8bWxpfGZzeHxmc3NjcmlwdCJdLAogICAgRlNMOiAgICAgICAgIFsiZnNsIl0sCiAgICBGVEw6ICAgICAgICAgWyJmdGwiXSwKICAgIEdjb2RlOiAgICAgICBbImdjb2RlIl0sCiAgICBHaGVya2luOiAgICAgWyJmZWF0dXJlIl0sCiAgICBHaXRpZ25vcmU6ICAgWyJeLmdpdGlnbm9yZSJdLAogICAgR2xzbDogICAgICAgIFsiZ2xzbHxmcmFnfHZlcnQiXSwKICAgIEdvYnN0b25lczogICBbImdicyJdLAogICAgZ29sYW5nOiAgICAgIFsiZ28iXSwKICAgIEdyYXBoUUxTY2hlbWE6IFsiZ3FsIl0sCiAgICBHcm9vdnk6ICAgICAgWyJncm9vdnkiXSwKICAgIEhBTUw6ICAgICAgICBbImhhbWwiXSwKICAgIEhhbmRsZWJhcnM6ICBbImhic3xoYW5kbGViYXJzfHRwbHxtdXN0YWNoZSJdLAogICAgSGFza2VsbDogICAgIFsiaHMiXSwKICAgIEhhc2tlbGxfQ2FiYWw6IFsiY2FiYWwiXSwKICAgIGhhWGU6ICAgICAgICBbImh4Il0sCiAgICBIanNvbjogICAgICAgWyJoanNvbiJdLAogICAgSFRNTDogICAgICAgIFsiaHRtbHxodG18eGh0bWx8dnVlfHdlfHdweSJdLAogICAgSFRNTF9FbGl4aXI6IFsiZWV4fGh0bWwuZWV4Il0sCiAgICBIVE1MX1J1Ynk6ICAgWyJlcmJ8cmh0bWx8aHRtbC5lcmIiXSwKICAgIElOSTogICAgICAgICBbImluaXxjb25mfGNmZ3xwcmVmcyJdLAogICAgSW86ICAgICAgICAgIFsiaW8iXSwKICAgIEphY2s6ICAgICAgICBbImphY2siXSwKICAgIEphZGU6ICAgICAgICBbImphZGV8cHVnIl0sCiAgICBKYXZhOiAgICAgICAgWyJqYXZhIl0sCiAgICBKYXZhU2NyaXB0OiAgWyJqc3xqc218anN4Il0sCiAgICBKU09OOiAgICAgICAgWyJqc29uIl0sCiAgICBKU09OaXE6ICAgICAgWyJqcSJdLAogICAgSlNQOiAgICAgICAgIFsianNwIl0sCiAgICBKU1NNOiAgICAgICAgWyJqc3NtfGpzc21fc3RhdGUiXSwKICAgIEpTWDogICAgICAgICBbImpzeCJdLAogICAgSnVsaWE6ICAgICAgIFsiamwiXSwKICAgIEtvdGxpbjogICAgICBbImt0fGt0cyJdLAogICAgTGFUZVg6ICAgICAgIFsidGV4fGxhdGV4fGx0eHxiaWIiXSwKICAgIExFU1M6ICAgICAgICBbImxlc3MiXSwKICAgIExpcXVpZDogICAgICBbImxpcXVpZCJdLAogICAgTGlzcDogICAgICAgIFsibGlzcCJdLAogICAgTGl2ZVNjcmlwdDogIFsibHMiXSwKICAgIExvZ2lRTDogICAgICBbImxvZ2ljfGxxbCJdLAogICAgTFNMOiAgICAgICAgIFsibHNsIl0sCiAgICBMdWE6ICAgICAgICAgWyJsdWEiXSwKICAgIEx1YVBhZ2U6ICAgICBbImxwIl0sCiAgICBMdWNlbmU6ICAgICAgWyJsdWNlbmUiXSwKICAgIE1ha2VmaWxlOiAgICBbIl5NYWtlZmlsZXxeR05VbWFrZWZpbGV8Xm1ha2VmaWxlfF5PQ2FtbE1ha2VmaWxlfG1ha2UiXSwKICAgIE1hcmtkb3duOiAgICBbIm1kfG1hcmtkb3duIl0sCiAgICBNYXNrOiAgICAgICAgWyJtYXNrIl0sCiAgICBNQVRMQUI6ICAgICAgWyJtYXRsYWIiXSwKICAgIE1hemU6ICAgICAgICBbIm16Il0sCiAgICBNRUw6ICAgICAgICAgWyJtZWwiXSwKICAgIE1JWEFMOiAgICAgICBbIm1peGFsIl0sCiAgICBNVVNIQ29kZTogICAgWyJtY3xtdXNoIl0sCiAgICBNeVNRTDogICAgICAgWyJteXNxbCJdLAogICAgTmdpbng6ICAgICAgIFsibmdpbnh8Y29uZiJdLAogICAgTml4OiAgICAgICAgIFsibml4Il0sCiAgICBOaW06ICAgICAgICAgWyJuaW0iXSwKICAgIE5TSVM6ICAgICAgICBbIm5zaXxuc2giXSwKICAgIE9iamVjdGl2ZUM6ICBbIm18bW0iXSwKICAgIE9DYW1sOiAgICAgICBbIm1sfG1saSJdLAogICAgUGFzY2FsOiAgICAgIFsicGFzfHAiXSwKICAgIFBlcmw6ICAgICAgICBbInBsfHBtIl0sCiAgICBQZXJsNjogICAgICAgWyJwNnxwbDZ8cG02Il0sCiAgICBwZ1NRTDogICAgICAgWyJwZ3NxbCJdLAogICAgUEhQX0xhcmF2ZWxfYmxhZGU6IFsiYmxhZGUucGhwIl0sCiAgICBQSFA6ICAgICAgICAgWyJwaHB8aW5jfHBodG1sfHNodG1sfHBocDN8cGhwNHxwaHA1fHBocHN8cGhwdHxhd3xjdHB8bW9kdWxlIl0sCiAgICBQdXBwZXQ6ICAgICAgWyJlcHB8cHAiXSwKICAgIFBpZzogICAgICAgICBbInBpZyJdLAogICAgUG93ZXJzaGVsbDogIFsicHMxIl0sCiAgICBQcmFhdDogICAgICAgWyJwcmFhdHxwcmFhdHNjcmlwdHxwc2N8cHJvYyJdLAogICAgUHJvbG9nOiAgICAgIFsicGxnfHByb2xvZyJdLAogICAgUHJvcGVydGllczogIFsicHJvcGVydGllcyJdLAogICAgUHJvdG9idWY6ICAgIFsicHJvdG8iXSwKICAgIFB5dGhvbjogICAgICBbInB5Il0sCiAgICBSOiAgICAgICAgICAgWyJyIl0sCiAgICBSYXpvcjogICAgICAgWyJjc2h0bWx8YXNwIl0sCiAgICBSRG9jOiAgICAgICAgWyJSZCJdLAogICAgUmVkOiAgICAgICAgIFsicmVkfHJlZHMiXSwKICAgIFJIVE1MOiAgICAgICBbIlJodG1sIl0sCiAgICBSU1Q6ICAgICAgICAgWyJyc3QiXSwKICAgIFJ1Ynk6ICAgICAgICBbInJifHJ1fGdlbXNwZWN8cmFrZXxeR3VhcmRmaWxlfF5SYWtlZmlsZXxeR2VtZmlsZSJdLAogICAgUnVzdDogICAgICAgIFsicnMiXSwKICAgIFNBU1M6ICAgICAgICBbInNhc3MiXSwKICAgIFNDQUQ6ICAgICAgICBbInNjYWQiXSwKICAgIFNjYWxhOiAgICAgICBbInNjYWxhfHNidCJdLAogICAgU2NoZW1lOiAgICAgIFsic2NtfHNtfHJrdHxvYWt8c2NoZW1lIl0sCiAgICBTQ1NTOiAgICAgICAgWyJzY3NzIl0sCiAgICBTSDogICAgICAgICAgWyJzaHxiYXNofF4uYmFzaHJjIl0sCiAgICBTSlM6ICAgICAgICAgWyJzanMiXSwKICAgIFNsaW06ICAgICAgICBbInNsaW18c2tpbSJdLAogICAgU21hcnR5OiAgICAgIFsic21hcnR5fHRwbCJdLAogICAgc25pcHBldHM6ICAgIFsic25pcHBldHMiXSwKICAgIFNveV9UZW1wbGF0ZTpbInNveSJdLAogICAgU3BhY2U6ICAgICAgIFsic3BhY2UiXSwKICAgIFNRTDogICAgICAgICBbInNxbCJdLAogICAgU1FMU2VydmVyOiAgIFsic3Fsc2VydmVyIl0sCiAgICBTdHlsdXM6ICAgICAgWyJzdHlsfHN0eWx1cyJdLAogICAgU1ZHOiAgICAgICAgIFsic3ZnIl0sCiAgICBTd2lmdDogICAgICAgWyJzd2lmdCJdLAogICAgVGNsOiAgICAgICAgIFsidGNsIl0sCiAgICBUZXJyYWZvcm06ICAgWyJ0ZiIsICJ0ZnZhcnMiLCAidGVycmFncnVudCJdLAogICAgVGV4OiAgICAgICAgIFsidGV4Il0sCiAgICBUZXh0OiAgICAgICAgWyJ0eHQiXSwKICAgIFRleHRpbGU6ICAgICBbInRleHRpbGUiXSwKICAgIFRvbWw6ICAgICAgICBbInRvbWwiXSwKICAgIFRTWDogICAgICAgICBbInRzeCJdLAogICAgVHdpZzogICAgICAgIFsibGF0dGV8dHdpZ3xzd2lnIl0sCiAgICBUeXBlc2NyaXB0OiAgWyJ0c3x0eXBlc2NyaXB0fHN0ciJdLAogICAgVmFsYTogICAgICAgIFsidmFsYSJdLAogICAgVkJTY3JpcHQ6ICAgIFsidmJzfHZiIl0sCiAgICBWZWxvY2l0eTogICAgWyJ2bSJdLAogICAgVmVyaWxvZzogICAgIFsidnx2aHxzdnxzdmgiXSwKICAgIFZIREw6ICAgICAgICBbInZoZHx2aGRsIl0sCiAgICBWaXN1YWxmb3JjZTogWyJ2ZnB8Y29tcG9uZW50fHBhZ2UiXSwKICAgIFdvbGxvazogICAgICBbIndsa3x3cGdtfHd0ZXN0Il0sCiAgICBYTUw6ICAgICAgICAgWyJ4bWx8cmRmfHJzc3x3c2RsfHhzbHR8YXRvbXxtYXRobWx8bW1sfHh1bHx4Ymx8eGFtbCJdLAogICAgWFF1ZXJ5OiAgICAgIFsieHEiXSwKICAgIFlBTUw6ICAgICAgICBbInlhbWx8eW1sIl0sCiAgICBaZWVrOiAgICAgICAgWyJ6ZWVrfGJybyJdLAogICAgRGphbmdvOiAgICAgIFsiaHRtbCJdCn07Cgp2YXIgbmFtZU92ZXJyaWRlcyA9IHsKICAgIE9iamVjdGl2ZUM6ICJPYmplY3RpdmUtQyIsCiAgICBDU2hhcnA6ICJDIyIsCiAgICBnb2xhbmc6ICJHbyIsCiAgICBDX0NwcDogIkMgYW5kIEMrKyIsCiAgICBDc291bmRfRG9jdW1lbnQ6ICJDc291bmQgRG9jdW1lbnQiLAogICAgQ3NvdW5kX09yY2hlc3RyYTogIkNzb3VuZCIsCiAgICBDc291bmRfU2NvcmU6ICJDc291bmQgU2NvcmUiLAogICAgY29mZmVlOiAiQ29mZmVlU2NyaXB0IiwKICAgIEhUTUxfUnVieTogIkhUTUwgKFJ1YnkpIiwKICAgIEhUTUxfRWxpeGlyOiAiSFRNTCAoRWxpeGlyKSIsCiAgICBGVEw6ICJGcmVlTWFya2VyIiwKICAgIFBIUF9MYXJhdmVsX2JsYWRlOiAiUEhQIChCbGFkZSBUZW1wbGF0ZSkiLAogICAgUGVybDY6ICJQZXJsIDYiLAogICAgQXV0b0hvdEtleTogIkF1dG9Ib3RrZXkgLyBBdXRvSXQiCn07CnZhciBtb2Rlc0J5TmFtZSA9IHt9Owpmb3IgKHZhciBuYW1lIGluIHN1cHBvcnRlZE1vZGVzKSB7CiAgICB2YXIgZGF0YSA9IHN1cHBvcnRlZE1vZGVzW25hbWVdOwogICAgdmFyIGRpc3BsYXlOYW1lID0gKG5hbWVPdmVycmlkZXNbbmFtZV0gfHwgbmFtZSkucmVwbGFjZSgvXy9nLCAiICIpOwogICAgdmFyIGZpbGVuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIG1vZGUgPSBuZXcgTW9kZShmaWxlbmFtZSwgZGlzcGxheU5hbWUsIGRhdGFbMF0pOwogICAgbW9kZXNCeU5hbWVbZmlsZW5hbWVdID0gbW9kZTsKICAgIG1vZGVzLnB1c2gobW9kZSk7Cn0KCm1vZHVsZS5leHBvcnRzID0gewogICAgZ2V0TW9kZUZvclBhdGg6IGdldE1vZGVGb3JQYXRoLAogICAgbW9kZXM6IG1vZGVzLAogICAgbW9kZXNCeU5hbWU6IG1vZGVzQnlOYW1lCn07Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC9tb2RlbGlzdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-old_ie.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L29sZF9pZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL3Rva2VuaXplciIsImFjZS9leHQvc2VhcmNoYm94Il0sZnVuY3Rpb24ocmVxdWlyZSxleHBvcnRzLG1vZHVsZSl7ZnVuY3Rpb24gcGF0Y2gob2JqLG5hbWUscmVnZXhwLHJlcGxhY2VtZW50KXtldmFsKCJvYmpbJyIrbmFtZSsiJ109IitvYmpbbmFtZV0udG9TdHJpbmcoKS5yZXBsYWNlKHJlZ2V4cCxyZXBsYWNlbWVudCkpfXZhciBNQVhfVE9LRU5fQ09VTlQ9MWUzLHVzZXJhZ2VudD1yZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50IiksVG9rZW5pemVyTW9kdWxlPXJlcXVpcmUoIi4uL3Rva2VuaXplciIpO3VzZXJhZ2VudC5pc0lFJiZ1c2VyYWdlbnQuaXNJRTwxMCYmd2luZG93LnRvcC5kb2N1bWVudC5jb21wYXRNb2RlPT09IkJhY2tDb21wYXQiJiYodXNlcmFnZW50LmlzT2xkSUU9ITApO2lmKHR5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJiFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucXVlcnlTZWxlY3Rvcil7dXNlcmFnZW50LmlzT2xkSUU9ITA7dmFyIHFzPWZ1bmN0aW9uKGUsdCl7aWYodC5jaGFyQXQoMCk9PSIuIil2YXIgbj10LnNsaWNlKDEpO2Vsc2UgdmFyIHI9dC5tYXRjaCgvKFx3Kyk9KFx3KykvKSxpPXImJnJbMV0scz1yJiZyWzJdO2Zvcih2YXIgbz0wO288ZS5hbGwubGVuZ3RoO28rKyl7dmFyIHU9ZS5hbGxbb107aWYobil7aWYodS5jbGFzc05hbWUuaW5kZXhPZihuKSE9LTEpcmV0dXJuIHV9ZWxzZSBpZihpJiZ1LmdldEF0dHJpYnV0ZShpKT09cylyZXR1cm4gdX19LHNiPXJlcXVpcmUoIi4vc2VhcmNoYm94IikuU2VhcmNoQm94LnByb3RvdHlwZTtwYXRjaChzYiwiJGluaXRFbGVtZW50cyIsLyhbXlxzPV0qKS5xdWVyeVNlbGVjdG9yXCgoIi4qPyIpXCkvZywicXMoJDEsICQyKSIpfXZhciBjb21wbGlhbnRFeGVjTnBjZz0vKCk/Py8uZXhlYygiIilbMV09PT11bmRlZmluZWQ7aWYoY29tcGxpYW50RXhlY05wY2cpcmV0dXJuO3ZhciBwcm90bz1Ub2tlbml6ZXJNb2R1bGUuVG9rZW5pemVyLnByb3RvdHlwZTtUb2tlbml6ZXJNb2R1bGUuVG9rZW5pemVyX29yaWc9VG9rZW5pemVyTW9kdWxlLlRva2VuaXplcixwcm90by5nZXRMaW5lVG9rZW5zX29yaWc9cHJvdG8uZ2V0TGluZVRva2VucyxwYXRjaChUb2tlbml6ZXJNb2R1bGUsIlRva2VuaXplciIsInJ1bGVSZWdFeHBzLnB1c2goYWRqdXN0ZWRyZWdleCk7XG4iLGZ1bmN0aW9uKGUpe3JldHVybiBlKycgICAgICAgIGlmIChzdGF0ZVtpXS5uZXh0ICYmIFJlZ0V4cChhZGp1c3RlZHJlZ2V4KS50ZXN0KCIiKSlcbiAgICAgICAgICAgIHJ1bGUuX3FyZSA9IFJlZ0V4cChhZGp1c3RlZHJlZ2V4LCAiZyIpO1xuICAgICAgICAnfSksVG9rZW5pemVyTW9kdWxlLlRva2VuaXplci5wcm90b3R5cGU9cHJvdG8scGF0Y2gocHJvdG8sImdldExpbmVUb2tlbnMiLC9pZiBcKG1hdGNoXFtpIFwrIDFcXSA9PT0gdW5kZWZpbmVkXClccypjb250aW51ZTsvLCJpZiAoIW1hdGNoW2kgKyAxXSkge1xuICAgICAgICBpZiAodmFsdWUpY29udGludWU7XG4gICAgICAgIHZhciBxcmUgPSBzdGF0ZVttYXBwaW5nW2ldXS5fcXJlO1xuICAgICAgICBpZiAoIXFyZSkgY29udGludWU7XG4gICAgICAgIHFyZS5sYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgIGlmICghcXJlLmV4ZWMobGluZSkgfHwgcXJlLmxhc3RJbmRleCAhPSBsYXN0SW5kZXgpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICB9IiksdXNlcmFnZW50LmlzT2xkSUU9ITB9KSxkZWZpbmUoImFjZS9leHQvc2VhcmNoYm94IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2xhbmciLCJhY2UvbGliL2V2ZW50IiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9saWIva2V5cyJdLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuLi9saWIvZG9tIiksaT1lKCIuLi9saWIvbGFuZyIpLHM9ZSgiLi4vbGliL2V2ZW50Iiksbz0iLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKiBFZGl0b3IgU2VhcmNoIEZvcm0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLy5hY2Vfc2VhcmNoIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO2JvcmRlcjogMXB4IHNvbGlkICNjYmNiY2I7Ym9yZGVyLXRvcDogMCBub25lO21heC13aWR0aDogMjk3cHg7b3ZlcmZsb3c6IGhpZGRlbjttYXJnaW46IDA7cGFkZGluZzogNHB4O3BhZGRpbmctcmlnaHQ6IDZweDtwYWRkaW5nLWJvdHRvbTogMDtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiAwcHg7ei1pbmRleDogOTk7fS5hY2Vfc2VhcmNoLmxlZnQge2JvcmRlci1sZWZ0OiAwIG5vbmU7Ym9yZGVyLXJhZGl1czogMHB4IDBweCA1cHggMHB4O2xlZnQ6IDA7fS5hY2Vfc2VhcmNoLnJpZ2h0IHtib3JkZXItcmFkaXVzOiAwcHggMHB4IDBweCA1cHg7Ym9yZGVyLXJpZ2h0OiAwIG5vbmU7cmlnaHQ6IDA7fS5hY2Vfc2VhcmNoX2Zvcm0sIC5hY2VfcmVwbGFjZV9mb3JtIHtib3JkZXItcmFkaXVzOiAzcHg7Ym9yZGVyOiAxcHggc29saWQgI2NiY2JjYjtmbG9hdDogbGVmdDttYXJnaW4tYm90dG9tOiA0cHg7b3ZlcmZsb3c6IGhpZGRlbjt9LmFjZV9zZWFyY2hfZm9ybS5hY2Vfbm9tYXRjaCB7b3V0bGluZTogMXB4IHNvbGlkIHJlZDt9LmFjZV9zZWFyY2hfZmllbGQge2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JvcmRlci1yaWdodDogMXB4IHNvbGlkICNjYmNiY2I7Ym9yZGVyOiAwIG5vbmU7LXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94Oy1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtib3gtc2l6aW5nOiBib3JkZXItYm94O2Rpc3BsYXk6IGJsb2NrO2Zsb2F0OiBsZWZ0O2hlaWdodDogMjJweDtvdXRsaW5lOiAwO3BhZGRpbmc6IDAgN3B4O3dpZHRoOiAyMTRweDttYXJnaW46IDA7fS5hY2Vfc2VhcmNoYnRuLC5hY2VfcmVwbGFjZWJ0biB7YmFja2dyb3VuZDogI2ZmZjtib3JkZXI6IDAgbm9uZTtib3JkZXItbGVmdDogMXB4IHNvbGlkICNkY2RjZGM7Y3Vyc29yOiBwb2ludGVyO2Rpc3BsYXk6IGJsb2NrO2Zsb2F0OiBsZWZ0O2hlaWdodDogMjJweDttYXJnaW46IDA7cGFkZGluZzogMDtwb3NpdGlvbjogcmVsYXRpdmU7fS5hY2Vfc2VhcmNoYnRuOmxhc3QtY2hpbGQsLmFjZV9yZXBsYWNlYnRuOmxhc3QtY2hpbGQge2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDNweDt9LmFjZV9zZWFyY2hidG46ZGlzYWJsZWQge2JhY2tncm91bmQ6IG5vbmU7Y3Vyc29yOiBkZWZhdWx0O30uYWNlX3NlYXJjaGJ0biB7YmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTtiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O3dpZHRoOiAyN3B4O30uYWNlX3NlYXJjaGJ0bi5wcmV2IHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFGQ0FZQUFBQjRrYTFWQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFERkpSRUZVZU5waVNVMU5aVUFDLzZFMEkweUFDWXNrQ3BzSml5U0tJaVkwU1VaazQwRnlURWdDakdnS3dUUkFnQUVBUUpVSVBDRStxZmtBQUFBQVNVVk9SSzVDWUlJPSk7ICAgIH0uYWNlX3NlYXJjaGJ0bi5uZXh0IHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBZ0FBQUFGQ0FZQUFBQjRrYTFWQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFEUkpSRUZVZU5waVRFMU5aUUNDLzBETXlJQUt3R0pNVUFZREVvM00vcytFcHZNL21rS3dDUXhZakllTE1hRUxvTE1CQWd3QVU3VUpPYlRLc3ZBQUFBQUFTVVZPUks1Q1lJST0pOyAgICB9LmFjZV9zZWFyY2hidG5fY2xvc2Uge2JhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUE0QUFBQWNDQVlBQUFCUlZvNUJBQUFBWjBsRVFWUjQydTJTVVFyQU1BaER2YXpuOE9qWkJpbENrWVZWeGlpczhINENUMFZyQUpiNFdIVDNDNXhVMmEySVFaWEpqaVFJUk1ka0VvSjVRMnlNcXBmRElvK1hZNGs2aCtZWE95S3FUSWo1UkVheGxvTkFkMHhpS21BdHNUSHFXOHNSMlc1ZjdnQ3U1bldGVXBWalp3QUFBQUJKUlU1RXJrSmdnZz09KSBuby1yZXBlYXQgNTAlIDA7Ym9yZGVyLXJhZGl1czogNTAlO2JvcmRlcjogMCBub25lO2NvbG9yOiAjNjU2NTY1O2N1cnNvcjogcG9pbnRlcjtkaXNwbGF5OiBibG9jaztmbG9hdDogcmlnaHQ7Zm9udC1mYW1pbHk6IEFyaWFsO2ZvbnQtc2l6ZTogMTZweDtoZWlnaHQ6IDE0cHg7bGluZS1oZWlnaHQ6IDE2cHg7bWFyZ2luOiA1cHggMXB4IDlweCA1cHg7cGFkZGluZzogMDt0ZXh0LWFsaWduOiBjZW50ZXI7d2lkdGg6IDE0cHg7fS5hY2Vfc2VhcmNoYnRuX2Nsb3NlOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjNjU2NTY1O2JhY2tncm91bmQtcG9zaXRpb246IDUwJSAxMDAlO2NvbG9yOiB3aGl0ZTt9LmFjZV9yZXBsYWNlYnRuLnByZXYge3dpZHRoOiA1NHB4fS5hY2VfcmVwbGFjZWJ0bi5uZXh0IHt3aWR0aDogMjdweH0uYWNlX2J1dHRvbiB7bWFyZ2luLWxlZnQ6IDJweDtjdXJzb3I6IHBvaW50ZXI7LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTstbW96LXVzZXItc2VsZWN0OiBub25lOy1vLXVzZXItc2VsZWN0OiBub25lOy1tcy11c2VyLXNlbGVjdDogbm9uZTt1c2VyLXNlbGVjdDogbm9uZTtvdmVyZmxvdzogaGlkZGVuO29wYWNpdHk6IDAuNztib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwMCwxMDAsMTAwLDAuMjMpO3BhZGRpbmc6IDFweDstbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ym94LXNpemluZzogICAgYm9yZGVyLWJveDtjb2xvcjogYmxhY2s7fS5hY2VfYnV0dG9uOmhvdmVyIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO29wYWNpdHk6MTt9LmFjZV9idXR0b246YWN0aXZlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO30uYWNlX2J1dHRvbi5jaGVja2VkIHtib3JkZXItY29sb3I6ICMzMzk5ZmY7b3BhY2l0eToxO30uYWNlX3NlYXJjaF9vcHRpb25ze21hcmdpbi1ib3R0b206IDNweDt0ZXh0LWFsaWduOiByaWdodDstd2Via2l0LXVzZXItc2VsZWN0OiBub25lOy1tb3otdXNlci1zZWxlY3Q6IG5vbmU7LW8tdXNlci1zZWxlY3Q6IG5vbmU7LW1zLXVzZXItc2VsZWN0OiBub25lO3VzZXItc2VsZWN0OiBub25lO30iLHU9ZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXIsYT1lKCIuLi9saWIva2V5cyIpO3IuaW1wb3J0Q3NzU3RyaW5nKG8sImFjZV9zZWFyY2hib3giKTt2YXIgZj0nPGRpdiBjbGFzcz0iYWNlX3NlYXJjaCByaWdodCI+ICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBhY3Rpb249ImhpZGUiIGNsYXNzPSJhY2Vfc2VhcmNoYnRuX2Nsb3NlIj48L2J1dHRvbj4gICAgPGRpdiBjbGFzcz0iYWNlX3NlYXJjaF9mb3JtIj4gICAgICAgIDxpbnB1dCBjbGFzcz0iYWNlX3NlYXJjaF9maWVsZCIgcGxhY2Vob2xkZXI9IlNlYXJjaCBmb3IiIHNwZWxsY2hlY2s9ImZhbHNlIj48L2lucHV0PiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGFjdGlvbj0iZmluZE5leHQiIGNsYXNzPSJhY2Vfc2VhcmNoYnRuIG5leHQiPjwvYnV0dG9uPiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGFjdGlvbj0iZmluZFByZXYiIGNsYXNzPSJhY2Vfc2VhcmNoYnRuIHByZXYiPjwvYnV0dG9uPiAgICA8L2Rpdj4gICAgPGRpdiBjbGFzcz0iYWNlX3JlcGxhY2VfZm9ybSI+ICAgICAgICA8aW5wdXQgY2xhc3M9ImFjZV9zZWFyY2hfZmllbGQiIHBsYWNlaG9sZGVyPSJSZXBsYWNlIHdpdGgiIHNwZWxsY2hlY2s9ImZhbHNlIj48L2lucHV0PiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGFjdGlvbj0icmVwbGFjZUFuZEZpbmROZXh0IiBjbGFzcz0iYWNlX3JlcGxhY2VidG4iPlJlcGxhY2U8L2J1dHRvbj4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBhY3Rpb249InJlcGxhY2VBbGwiIGNsYXNzPSJhY2VfcmVwbGFjZWJ0biI+QWxsPC9idXR0b24+ICAgIDwvZGl2PiAgICA8ZGl2IGNsYXNzPSJhY2Vfc2VhcmNoX29wdGlvbnMiPiAgICAgICAgPHNwYW4gYWN0aW9uPSJ0b2dnbGVSZWdleHBNb2RlIiBjbGFzcz0iYWNlX2J1dHRvbiIgdGl0bGU9IlJlZ0V4cCBTZWFyY2giPi4qPC9zcGFuPiAgICAgICAgPHNwYW4gYWN0aW9uPSJ0b2dnbGVDYXNlU2Vuc2l0aXZlIiBjbGFzcz0iYWNlX2J1dHRvbiIgdGl0bGU9IkNhc2VTZW5zaXRpdmUgU2VhcmNoIj5BYTwvc3Bhbj4gICAgICAgIDxzcGFuIGFjdGlvbj0idG9nZ2xlV2hvbGVXb3JkcyIgY2xhc3M9ImFjZV9idXR0b24iIHRpdGxlPSJXaG9sZSBXb3JkIFNlYXJjaCI+XFxiPC9zcGFuPiAgICA8L2Rpdj48L2Rpdj4nLnJlcGxhY2UoLz5ccysvZywiPiIpLGw9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5pbm5lckhUTUw9Zix0aGlzLmVsZW1lbnQ9aS5maXJzdENoaWxkLHRoaXMuJGluaXQoKSx0aGlzLnNldEVkaXRvcihlKX07KGZ1bmN0aW9uKCl7dGhpcy5zZXRFZGl0b3I9ZnVuY3Rpb24oZSl7ZS5zZWFyY2hCb3g9dGhpcyxlLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpLHRoaXMuZWRpdG9yPWV9LHRoaXMuJGluaXRFbGVtZW50cz1mdW5jdGlvbihlKXt0aGlzLnNlYXJjaEJveD1lLnF1ZXJ5U2VsZWN0b3IoIi5hY2Vfc2VhcmNoX2Zvcm0iKSx0aGlzLnJlcGxhY2VCb3g9ZS5xdWVyeVNlbGVjdG9yKCIuYWNlX3JlcGxhY2VfZm9ybSIpLHRoaXMuc2VhcmNoT3B0aW9ucz1lLnF1ZXJ5U2VsZWN0b3IoIi5hY2Vfc2VhcmNoX29wdGlvbnMiKSx0aGlzLnJlZ0V4cE9wdGlvbj1lLnF1ZXJ5U2VsZWN0b3IoIlthY3Rpb249dG9nZ2xlUmVnZXhwTW9kZV0iKSx0aGlzLmNhc2VTZW5zaXRpdmVPcHRpb249ZS5xdWVyeVNlbGVjdG9yKCJbYWN0aW9uPXRvZ2dsZUNhc2VTZW5zaXRpdmVdIiksdGhpcy53aG9sZVdvcmRPcHRpb249ZS5xdWVyeVNlbGVjdG9yKCJbYWN0aW9uPXRvZ2dsZVdob2xlV29yZHNdIiksdGhpcy5zZWFyY2hJbnB1dD10aGlzLnNlYXJjaEJveC5xdWVyeVNlbGVjdG9yKCIuYWNlX3NlYXJjaF9maWVsZCIpLHRoaXMucmVwbGFjZUlucHV0PXRoaXMucmVwbGFjZUJveC5xdWVyeVNlbGVjdG9yKCIuYWNlX3NlYXJjaF9maWVsZCIpfSx0aGlzLiRpbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50O3RoaXMuJGluaXRFbGVtZW50cyhlKTt2YXIgdD10aGlzO3MuYWRkTGlzdGVuZXIoZSwibW91c2Vkb3duIixmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5hY3RpdmVJbnB1dC5mb2N1cygpfSwwKSxzLnN0b3BQcm9wYWdhdGlvbihlKX0pLHMuYWRkTGlzdGVuZXIoZSwiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0fHxlLnNyY0VsZW1lbnQscj1uLmdldEF0dHJpYnV0ZSgiYWN0aW9uIik7ciYmdFtyXT90W3JdKCk6dC4kc2VhcmNoQmFyS2IuY29tbWFuZHNbcl0mJnQuJHNlYXJjaEJhcktiLmNvbW1hbmRzW3JdLmV4ZWModCkscy5zdG9wUHJvcGFnYXRpb24oZSl9KSxzLmFkZENvbW1hbmRLZXlMaXN0ZW5lcihlLGZ1bmN0aW9uKGUsbixyKXt2YXIgaT1hLmtleUNvZGVUb1N0cmluZyhyKSxvPXQuJHNlYXJjaEJhcktiLmZpbmRLZXlDb21tYW5kKG4saSk7byYmby5leGVjJiYoby5leGVjKHQpLHMuc3RvcEV2ZW50KGUpKX0pLHRoaXMuJG9uQ2hhbmdlPWkuZGVsYXllZENhbGwoZnVuY3Rpb24oKXt0LmZpbmQoITEsITEpfSkscy5hZGRMaXN0ZW5lcih0aGlzLnNlYXJjaElucHV0LCJpbnB1dCIsZnVuY3Rpb24oKXt0LiRvbkNoYW5nZS5zY2hlZHVsZSgyMCl9KSxzLmFkZExpc3RlbmVyKHRoaXMuc2VhcmNoSW5wdXQsImZvY3VzIixmdW5jdGlvbigpe3QuYWN0aXZlSW5wdXQ9dC5zZWFyY2hJbnB1dCx0LnNlYXJjaElucHV0LnZhbHVlJiZ0LmhpZ2hsaWdodCgpfSkscy5hZGRMaXN0ZW5lcih0aGlzLnJlcGxhY2VJbnB1dCwiZm9jdXMiLGZ1bmN0aW9uKCl7dC5hY3RpdmVJbnB1dD10LnJlcGxhY2VJbnB1dCx0LnNlYXJjaElucHV0LnZhbHVlJiZ0LmhpZ2hsaWdodCgpfSl9LHRoaXMuJGNsb3NlU2VhcmNoQmFyS2I9bmV3IHUoW3tiaW5kS2V5OiJFc2MiLG5hbWU6ImNsb3NlU2VhcmNoQmFyIixleGVjOmZ1bmN0aW9uKGUpe2Uuc2VhcmNoQm94LmhpZGUoKX19XSksdGhpcy4kc2VhcmNoQmFyS2I9bmV3IHUsdGhpcy4kc2VhcmNoQmFyS2IuYmluZEtleXMoeyJDdHJsLWZ8Q29tbWFuZC1mfEN0cmwtSHxDb21tYW5kLU9wdGlvbi1GIjpmdW5jdGlvbihlKXt2YXIgdD1lLmlzUmVwbGFjZT0hZS5pc1JlcGxhY2U7ZS5yZXBsYWNlQm94LnN0eWxlLmRpc3BsYXk9dD8iIjoibm9uZSIsZVt0PyJyZXBsYWNlSW5wdXQiOiJzZWFyY2hJbnB1dCJdLmZvY3VzKCl9LCJDdHJsLUd8Q29tbWFuZC1HIjpmdW5jdGlvbihlKXtlLmZpbmROZXh0KCl9LCJDdHJsLVNoaWZ0LUd8Q29tbWFuZC1TaGlmdC1HIjpmdW5jdGlvbihlKXtlLmZpbmRQcmV2KCl9LGVzYzpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5oaWRlKCl9KX0sUmV0dXJuOmZ1bmN0aW9uKGUpe2UuYWN0aXZlSW5wdXQ9PWUucmVwbGFjZUlucHV0JiZlLnJlcGxhY2UoKSxlLmZpbmROZXh0KCl9LCJTaGlmdC1SZXR1cm4iOmZ1bmN0aW9uKGUpe2UuYWN0aXZlSW5wdXQ9PWUucmVwbGFjZUlucHV0JiZlLnJlcGxhY2UoKSxlLmZpbmRQcmV2KCl9LFRhYjpmdW5jdGlvbihlKXsoZS5hY3RpdmVJbnB1dD09ZS5yZXBsYWNlSW5wdXQ/ZS5zZWFyY2hJbnB1dDplLnJlcGxhY2VJbnB1dCkuZm9jdXMoKX19KSx0aGlzLiRzZWFyY2hCYXJLYi5hZGRDb21tYW5kcyhbe25hbWU6InRvZ2dsZVJlZ2V4cE1vZGUiLGJpbmRLZXk6e3dpbjoiQWx0LVJ8QWx0LS8iLG1hYzoiQ3RybC1BbHQtUnxDdHJsLUFsdC0vIn0sZXhlYzpmdW5jdGlvbihlKXtlLnJlZ0V4cE9wdGlvbi5jaGVja2VkPSFlLnJlZ0V4cE9wdGlvbi5jaGVja2VkLGUuJHN5bmNPcHRpb25zKCl9fSx7bmFtZToidG9nZ2xlQ2FzZVNlbnNpdGl2ZSIsYmluZEtleTp7d2luOiJBbHQtQ3xBbHQtSSIsbWFjOiJDdHJsLUFsdC1SfEN0cmwtQWx0LUkifSxleGVjOmZ1bmN0aW9uKGUpe2UuY2FzZVNlbnNpdGl2ZU9wdGlvbi5jaGVja2VkPSFlLmNhc2VTZW5zaXRpdmVPcHRpb24uY2hlY2tlZCxlLiRzeW5jT3B0aW9ucygpfX0se25hbWU6InRvZ2dsZVdob2xlV29yZHMiLGJpbmRLZXk6e3dpbjoiQWx0LUJ8QWx0LVciLG1hYzoiQ3RybC1BbHQtQnxDdHJsLUFsdC1XIn0sZXhlYzpmdW5jdGlvbihlKXtlLndob2xlV29yZE9wdGlvbi5jaGVja2VkPSFlLndob2xlV29yZE9wdGlvbi5jaGVja2VkLGUuJHN5bmNPcHRpb25zKCl9fV0pLHRoaXMuJHN5bmNPcHRpb25zPWZ1bmN0aW9uKCl7ci5zZXRDc3NDbGFzcyh0aGlzLnJlZ0V4cE9wdGlvbiwiY2hlY2tlZCIsdGhpcy5yZWdFeHBPcHRpb24uY2hlY2tlZCksci5zZXRDc3NDbGFzcyh0aGlzLndob2xlV29yZE9wdGlvbiwiY2hlY2tlZCIsdGhpcy53aG9sZVdvcmRPcHRpb24uY2hlY2tlZCksci5zZXRDc3NDbGFzcyh0aGlzLmNhc2VTZW5zaXRpdmVPcHRpb24sImNoZWNrZWQiLHRoaXMuY2FzZVNlbnNpdGl2ZU9wdGlvbi5jaGVja2VkKSx0aGlzLmZpbmQoITEsITEpfSx0aGlzLmhpZ2hsaWdodD1mdW5jdGlvbihlKXt0aGlzLmVkaXRvci5zZXNzaW9uLmhpZ2hsaWdodChlfHx0aGlzLmVkaXRvci4kc2VhcmNoLiRvcHRpb25zLnJlKSx0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpfSx0aGlzLmZpbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmVkaXRvci5maW5kKHRoaXMuc2VhcmNoSW5wdXQudmFsdWUse3NraXBDdXJyZW50OmUsYmFja3dhcmRzOnQsd3JhcDohMCxyZWdFeHA6dGhpcy5yZWdFeHBPcHRpb24uY2hlY2tlZCxjYXNlU2Vuc2l0aXZlOnRoaXMuY2FzZVNlbnNpdGl2ZU9wdGlvbi5jaGVja2VkLHdob2xlV29yZDp0aGlzLndob2xlV29yZE9wdGlvbi5jaGVja2VkfSksaT0hbiYmdGhpcy5zZWFyY2hJbnB1dC52YWx1ZTtyLnNldENzc0NsYXNzKHRoaXMuc2VhcmNoQm94LCJhY2Vfbm9tYXRjaCIsaSksdGhpcy5lZGl0b3IuX2VtaXQoImZpbmRTZWFyY2hCb3giLHttYXRjaDohaX0pLHRoaXMuaGlnaGxpZ2h0KCl9LHRoaXMuZmluZE5leHQ9ZnVuY3Rpb24oKXt0aGlzLmZpbmQoITAsITEpfSx0aGlzLmZpbmRQcmV2PWZ1bmN0aW9uKCl7dGhpcy5maW5kKCEwLCEwKX0sdGhpcy5yZXBsYWNlPWZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IuZ2V0UmVhZE9ubHkoKXx8dGhpcy5lZGl0b3IucmVwbGFjZSh0aGlzLnJlcGxhY2VJbnB1dC52YWx1ZSl9LHRoaXMucmVwbGFjZUFuZEZpbmROZXh0PWZ1bmN0aW9uKCl7dGhpcy5lZGl0b3IuZ2V0UmVhZE9ubHkoKXx8KHRoaXMuZWRpdG9yLnJlcGxhY2UodGhpcy5yZXBsYWNlSW5wdXQudmFsdWUpLHRoaXMuZmluZE5leHQoKSl9LHRoaXMucmVwbGFjZUFsbD1mdW5jdGlvbigpe3RoaXMuZWRpdG9yLmdldFJlYWRPbmx5KCl8fHRoaXMuZWRpdG9yLnJlcGxhY2VBbGwodGhpcy5yZXBsYWNlSW5wdXQudmFsdWUpfSx0aGlzLmhpZGU9ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lZGl0b3Iua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy4kY2xvc2VTZWFyY2hCYXJLYiksdGhpcy5lZGl0b3IuZm9jdXMoKX0sdGhpcy5zaG93PWZ1bmN0aW9uKGUsdCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5yZXBsYWNlQm94LnN0eWxlLmRpc3BsYXk9dD8iIjoibm9uZSIsdGhpcy5pc1JlcGxhY2U9dCxlJiYodGhpcy5zZWFyY2hJbnB1dC52YWx1ZT1lKSx0aGlzLnNlYXJjaElucHV0LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dC5zZWxlY3QoKSx0aGlzLmVkaXRvci5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcih0aGlzLiRjbG9zZVNlYXJjaEJhcktiKX19KS5jYWxsKGwucHJvdG90eXBlKSx0LlNlYXJjaEJveD1sLHQuU2VhcmNoPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5zZWFyY2hCb3h8fG5ldyBsKGUpO24uc2hvdyhlLnNlc3Npb24uZ2V0VGV4dFJhbmdlKCksdCl9fSk=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-options.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L21lbnVfdG9vbHMvb3ZlcmxheV9wYWdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIGRvbSA9IHJlcXVpcmUoIi4uLy4uL2xpYi9kb20iKTsKdmFyIGNzc1RleHQgPSAiI2FjZV9zZXR0aW5nc21lbnUsICNrYnNob3J0Y3V0bWVudSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGN0Y3O1wKY29sb3I6IGJsYWNrO1wKYm94LXNoYWRvdzogLTVweCA0cHggNXB4IHJnYmEoMTI2LCAxMjYsIDEyNiwgMC41NSk7XApwYWRkaW5nOiAxZW0gMC41ZW0gMmVtIDFlbTtcCm92ZXJmbG93OiBhdXRvO1wKcG9zaXRpb246IGFic29sdXRlO1wKbWFyZ2luOiAwO1wKYm90dG9tOiAwO1wKcmlnaHQ6IDA7XAp0b3A6IDA7XAp6LWluZGV4OiA5OTkxO1wKY3Vyc29yOiBkZWZhdWx0O1wKfVwKLmFjZV9kYXJrICNhY2Vfc2V0dGluZ3NtZW51LCAuYWNlX2RhcmsgI2tic2hvcnRjdXRtZW51IHtcCmJveC1zaGFkb3c6IC0yMHB4IDEwcHggMjVweCByZ2JhKDEyNiwgMTI2LCAxMjYsIDAuMjUpO1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5OmhvdmVyIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAwLCAxMDAsIDEwMCwgMC4xKTtcCnRyYW5zaXRpb246IGFsbCAwLjNzXAp9XAouYWNlX2Nsb3NlQnV0dG9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxNDYsIDE0NiwgMC41KTtcCmJvcmRlcjogMXB4IHNvbGlkICNGNDhBOEE7XApib3JkZXItcmFkaXVzOiA1MCU7XApwYWRkaW5nOiA3cHg7XApwb3NpdGlvbjogYWJzb2x1dGU7XApyaWdodDogLThweDtcCnRvcDogLThweDtcCnotaW5kZXg6IDEwMDAwMDtcCn1cCi5hY2VfY2xvc2VCdXR0b257XApiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTQ2LCAxNDYsIDAuOSk7XAp9XAouYWNlX29wdGlvbnNNZW51S2V5IHtcCmNvbG9yOiBkYXJrc2xhdGVibHVlO1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlX29wdGlvbnNNZW51Q29tbWFuZCB7XApjb2xvcjogZGFya2N5YW47XApmb250LXdlaWdodDogbm9ybWFsO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGlucHV0LCAuYWNlX29wdGlvbnNNZW51RW50cnkgYnV0dG9uIHtcCnZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XAp9XAouYWNlX29wdGlvbnNNZW51RW50cnkgYnV0dG9uW2FjZV9zZWxlY3RlZF9idXR0b249dHJ1ZV0ge1wKYmFja2dyb3VuZDogI2U3ZTdlNztcCmJveC1zaGFkb3c6IDFweCAwcHggMnB4IDBweCAjYWRhZGFkIGluc2V0O1wKYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbiB7XApiYWNrZ3JvdW5kOiB3aGl0ZTtcCmJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTtcCm1hcmdpbjogMHB4O1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbjpob3ZlcntcCmJhY2tncm91bmQ6ICNmMGYwZjA7XAp9IjsKZG9tLmltcG9ydENzc1N0cmluZyhjc3NUZXh0KTsKCm1vZHVsZS5leHBvcnRzLm92ZXJsYXlQYWdlID0gZnVuY3Rpb24gb3ZlcmxheVBhZ2UoZWRpdG9yLCBjb250ZW50RWxlbWVudCwgY2FsbGJhY2spIHsKICAgIHZhciBjbG9zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHZhciBpZ25vcmVGb2N1c091dCA9IGZhbHNlOwoKICAgIGZ1bmN0aW9uIGRvY3VtZW50RXNjTGlzdGVuZXIoZSkgewogICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7CiAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICAgIGlmICghY2xvc2VyKSByZXR1cm47CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGRvY3VtZW50RXNjTGlzdGVuZXIpOwogICAgICAgIGNsb3Nlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb3Nlcik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgY2xvc2VyID0gbnVsbDsKICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOwogICAgfQogICAgZnVuY3Rpb24gc2V0SWdub3JlRm9jdXNPdXQoaWdub3JlKSB7CiAgICAgICAgaWdub3JlRm9jdXNPdXQgPSBpZ25vcmU7CiAgICAgICAgaWYgKGlnbm9yZSkgewogICAgICAgICAgICBjbG9zZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJhdXRvIjsKICAgICAgICB9CiAgICB9CgogICAgY2xvc2VyLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyAnICsKICAgICAgICAncG9zaXRpb246IGZpeGVkOyB0b3A6MDsgYm90dG9tOjA7IGxlZnQ6MDsgcmlnaHQ6MDsnICsKICAgICAgICAnei1pbmRleDogOTk5MDsgJyArCiAgICAgICAgKGVkaXRvciA/ICdiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7JyA6ICcnKTsKICAgIGNsb3Nlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWlnbm9yZUZvY3VzT3V0KSB7CiAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgfQogICAgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZG9jdW1lbnRFc2NMaXN0ZW5lcik7CgogICAgY29udGVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9KTsKCiAgICBjbG9zZXIuYXBwZW5kQ2hpbGQoY29udGVudEVsZW1lbnQpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9zZXIpOwogICAgaWYgKGVkaXRvcikgewogICAgICAgIGVkaXRvci5ibHVyKCk7CiAgICB9CiAgICByZXR1cm4gewogICAgICAgIGNsb3NlOiBjbG9zZSwKICAgICAgICBzZXRJZ25vcmVGb2N1c091dDogc2V0SWdub3JlRm9jdXNPdXQKICAgIH07Cn07Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9tb2RlbGlzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG1vZGVzID0gW107CmZ1bmN0aW9uIGdldE1vZGVGb3JQYXRoKHBhdGgpIHsKICAgIHZhciBtb2RlID0gbW9kZXNCeU5hbWUudGV4dDsKICAgIHZhciBmaWxlTmFtZSA9IHBhdGguc3BsaXQoL1tcL1xcXS8pLnBvcCgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChtb2Rlc1tpXS5zdXBwb3J0c0ZpbGUoZmlsZU5hbWUpKSB7CiAgICAgICAgICAgIG1vZGUgPSBtb2Rlc1tpXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG1vZGU7Cn0KCnZhciBNb2RlID0gZnVuY3Rpb24obmFtZSwgY2FwdGlvbiwgZXh0ZW5zaW9ucykgewogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMuY2FwdGlvbiA9IGNhcHRpb247CiAgICB0aGlzLm1vZGUgPSAiYWNlL21vZGUvIiArIG5hbWU7CiAgICB0aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOwogICAgdmFyIHJlOwogICAgaWYgKC9cXi8udGVzdChleHRlbnNpb25zKSkgewogICAgICAgIHJlID0gZXh0ZW5zaW9ucy5yZXBsYWNlKC9cfChcXik/L2csIGZ1bmN0aW9uKGEsIGIpewogICAgICAgICAgICByZXR1cm4gIiR8IiArIChiID8gIl4iIDogIl4uKlxcLiIpOwogICAgICAgIH0pICsgIiQiOwogICAgfSBlbHNlIHsKICAgICAgICByZSA9ICJeLipcXC4oIiArIGV4dGVuc2lvbnMgKyAiKSQiOwogICAgfQoKICAgIHRoaXMuZXh0UmUgPSBuZXcgUmVnRXhwKHJlLCAiZ2kiKTsKfTsKCk1vZGUucHJvdG90eXBlLnN1cHBvcnRzRmlsZSA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7CiAgICByZXR1cm4gZmlsZW5hbWUubWF0Y2godGhpcy5leHRSZSk7Cn07CnZhciBzdXBwb3J0ZWRNb2RlcyA9IHsKICAgIEFCQVA6ICAgICAgICBbImFiYXAiXSwKICAgIEFCQzogICAgICAgICBbImFiYyJdLAogICAgQWN0aW9uU2NyaXB0OlsiYXMiXSwKICAgIEFEQTogICAgICAgICBbImFkYXxhZGIiXSwKICAgIEFwYWNoZV9Db25mOiBbIl5odGFjY2Vzc3xeaHRncm91cHN8Xmh0cGFzc3dkfF5jb25mfGh0YWNjZXNzfGh0Z3JvdXBzfGh0cGFzc3dkIl0sCiAgICBBc2NpaURvYzogICAgWyJhc2NpaWRvY3xhZG9jIl0sCiAgICBBU0w6ICAgICAgICAgWyJkc2x8YXNsIl0sCiAgICBBc3NlbWJseV94ODY6WyJhc218YSJdLAogICAgQXV0b0hvdEtleTogIFsiYWhrIl0sCiAgICBBcGV4OiAgICAgICAgWyJhcGV4fGNsc3x0cmlnZ2VyfHRnciJdLAogICAgQVFMOiAgICAgICAgIFsiYXFsIl0sCiAgICBCYXRjaEZpbGU6ICAgWyJiYXR8Y21kIl0sCiAgICBDX0NwcDogICAgICAgWyJjcHB8Y3xjY3xjeHh8aHxoaHxocHB8aW5vIl0sCiAgICBDOVNlYXJjaDogICAgWyJjOXNlYXJjaF9yZXN1bHRzIl0sCiAgICBDcnlzdGFsOiAgICAgWyJjciJdLAogICAgQ2lycnU6ICAgICAgIFsiY2lycnV8Y3IiXSwKICAgIENsb2p1cmU6ICAgICBbImNsanxjbGpzIl0sCiAgICBDb2JvbDogICAgICAgWyJDQkx8Q09CIl0sCiAgICBjb2ZmZWU6ICAgICAgWyJjb2ZmZWV8Y2Z8Y3NvbnxeQ2FrZWZpbGUiXSwKICAgIENvbGRGdXNpb246ICBbImNmbSJdLAogICAgQ1NoYXJwOiAgICAgIFsiY3MiXSwKICAgIENzb3VuZF9Eb2N1bWVudDogWyJjc2QiXSwKICAgIENzb3VuZF9PcmNoZXN0cmE6IFsib3JjIl0sCiAgICBDc291bmRfU2NvcmU6IFsic2NvIl0sCiAgICBDU1M6ICAgICAgICAgWyJjc3MiXSwKICAgIEN1cmx5OiAgICAgICBbImN1cmx5Il0sCiAgICBEOiAgICAgICAgICAgWyJkfGRpIl0sCiAgICBEYXJ0OiAgICAgICAgWyJkYXJ0Il0sCiAgICBEaWZmOiAgICAgICAgWyJkaWZmfHBhdGNoIl0sCiAgICBEb2NrZXJmaWxlOiAgWyJeRG9ja2VyZmlsZSJdLAogICAgRG90OiAgICAgICAgIFsiZG90Il0sCiAgICBEcm9vbHM6ICAgICAgWyJkcmwiXSwKICAgIEVkaWZhY3Q6ICAgICBbImVkaSJdLAogICAgRWlmZmVsOiAgICAgIFsiZXxnZSJdLAogICAgRUpTOiAgICAgICAgIFsiZWpzIl0sCiAgICBFbGl4aXI6ICAgICAgWyJleHxleHMiXSwKICAgIEVsbTogICAgICAgICBbImVsbSJdLAogICAgRXJsYW5nOiAgICAgIFsiZXJsfGhybCJdLAogICAgRm9ydGg6ICAgICAgIFsiZnJ0fGZzfGxkcnxmdGh8NHRoIl0sCiAgICBGb3J0cmFuOiAgICAgWyJmfGY5MCJdLAogICAgRlNoYXJwOiAgICAgIFsiZnNpfGZzfG1sfG1saXxmc3h8ZnNzY3JpcHQiXSwKICAgIEZTTDogICAgICAgICBbImZzbCJdLAogICAgRlRMOiAgICAgICAgIFsiZnRsIl0sCiAgICBHY29kZTogICAgICAgWyJnY29kZSJdLAogICAgR2hlcmtpbjogICAgIFsiZmVhdHVyZSJdLAogICAgR2l0aWdub3JlOiAgIFsiXi5naXRpZ25vcmUiXSwKICAgIEdsc2w6ICAgICAgICBbImdsc2x8ZnJhZ3x2ZXJ0Il0sCiAgICBHb2JzdG9uZXM6ICAgWyJnYnMiXSwKICAgIGdvbGFuZzogICAgICBbImdvIl0sCiAgICBHcmFwaFFMU2NoZW1hOiBbImdxbCJdLAogICAgR3Jvb3Z5OiAgICAgIFsiZ3Jvb3Z5Il0sCiAgICBIQU1MOiAgICAgICAgWyJoYW1sIl0sCiAgICBIYW5kbGViYXJzOiAgWyJoYnN8aGFuZGxlYmFyc3x0cGx8bXVzdGFjaGUiXSwKICAgIEhhc2tlbGw6ICAgICBbImhzIl0sCiAgICBIYXNrZWxsX0NhYmFsOiBbImNhYmFsIl0sCiAgICBoYVhlOiAgICAgICAgWyJoeCJdLAogICAgSGpzb246ICAgICAgIFsiaGpzb24iXSwKICAgIEhUTUw6ICAgICAgICBbImh0bWx8aHRtfHhodG1sfHZ1ZXx3ZXx3cHkiXSwKICAgIEhUTUxfRWxpeGlyOiBbImVleHxodG1sLmVleCJdLAogICAgSFRNTF9SdWJ5OiAgIFsiZXJifHJodG1sfGh0bWwuZXJiIl0sCiAgICBJTkk6ICAgICAgICAgWyJpbml8Y29uZnxjZmd8cHJlZnMiXSwKICAgIElvOiAgICAgICAgICBbImlvIl0sCiAgICBKYWNrOiAgICAgICAgWyJqYWNrIl0sCiAgICBKYWRlOiAgICAgICAgWyJqYWRlfHB1ZyJdLAogICAgSmF2YTogICAgICAgIFsiamF2YSJdLAogICAgSmF2YVNjcmlwdDogIFsianN8anNtfGpzeCJdLAogICAgSlNPTjogICAgICAgIFsianNvbiJdLAogICAgSlNPTmlxOiAgICAgIFsianEiXSwKICAgIEpTUDogICAgICAgICBbImpzcCJdLAogICAgSlNTTTogICAgICAgIFsianNzbXxqc3NtX3N0YXRlIl0sCiAgICBKU1g6ICAgICAgICAgWyJqc3giXSwKICAgIEp1bGlhOiAgICAgICBbImpsIl0sCiAgICBLb3RsaW46ICAgICAgWyJrdHxrdHMiXSwKICAgIExhVGVYOiAgICAgICBbInRleHxsYXRleHxsdHh8YmliIl0sCiAgICBMRVNTOiAgICAgICAgWyJsZXNzIl0sCiAgICBMaXF1aWQ6ICAgICAgWyJsaXF1aWQiXSwKICAgIExpc3A6ICAgICAgICBbImxpc3AiXSwKICAgIExpdmVTY3JpcHQ6ICBbImxzIl0sCiAgICBMb2dpUUw6ICAgICAgWyJsb2dpY3xscWwiXSwKICAgIExTTDogICAgICAgICBbImxzbCJdLAogICAgTHVhOiAgICAgICAgIFsibHVhIl0sCiAgICBMdWFQYWdlOiAgICAgWyJscCJdLAogICAgTHVjZW5lOiAgICAgIFsibHVjZW5lIl0sCiAgICBNYWtlZmlsZTogICAgWyJeTWFrZWZpbGV8XkdOVW1ha2VmaWxlfF5tYWtlZmlsZXxeT0NhbWxNYWtlZmlsZXxtYWtlIl0sCiAgICBNYXJrZG93bjogICAgWyJtZHxtYXJrZG93biJdLAogICAgTWFzazogICAgICAgIFsibWFzayJdLAogICAgTUFUTEFCOiAgICAgIFsibWF0bGFiIl0sCiAgICBNYXplOiAgICAgICAgWyJteiJdLAogICAgTUVMOiAgICAgICAgIFsibWVsIl0sCiAgICBNSVhBTDogICAgICAgWyJtaXhhbCJdLAogICAgTVVTSENvZGU6ICAgIFsibWN8bXVzaCJdLAogICAgTXlTUUw6ICAgICAgIFsibXlzcWwiXSwKICAgIE5naW54OiAgICAgICBbIm5naW54fGNvbmYiXSwKICAgIE5peDogICAgICAgICBbIm5peCJdLAogICAgTmltOiAgICAgICAgIFsibmltIl0sCiAgICBOU0lTOiAgICAgICAgWyJuc2l8bnNoIl0sCiAgICBPYmplY3RpdmVDOiAgWyJtfG1tIl0sCiAgICBPQ2FtbDogICAgICAgWyJtbHxtbGkiXSwKICAgIFBhc2NhbDogICAgICBbInBhc3xwIl0sCiAgICBQZXJsOiAgICAgICAgWyJwbHxwbSJdLAogICAgUGVybDY6ICAgICAgIFsicDZ8cGw2fHBtNiJdLAogICAgcGdTUUw6ICAgICAgIFsicGdzcWwiXSwKICAgIFBIUF9MYXJhdmVsX2JsYWRlOiBbImJsYWRlLnBocCJdLAogICAgUEhQOiAgICAgICAgIFsicGhwfGluY3xwaHRtbHxzaHRtbHxwaHAzfHBocDR8cGhwNXxwaHBzfHBocHR8YXd8Y3RwfG1vZHVsZSJdLAogICAgUHVwcGV0OiAgICAgIFsiZXBwfHBwIl0sCiAgICBQaWc6ICAgICAgICAgWyJwaWciXSwKICAgIFBvd2Vyc2hlbGw6ICBbInBzMSJdLAogICAgUHJhYXQ6ICAgICAgIFsicHJhYXR8cHJhYXRzY3JpcHR8cHNjfHByb2MiXSwKICAgIFByb2xvZzogICAgICBbInBsZ3xwcm9sb2ciXSwKICAgIFByb3BlcnRpZXM6ICBbInByb3BlcnRpZXMiXSwKICAgIFByb3RvYnVmOiAgICBbInByb3RvIl0sCiAgICBQeXRob246ICAgICAgWyJweSJdLAogICAgUjogICAgICAgICAgIFsiciJdLAogICAgUmF6b3I6ICAgICAgIFsiY3NodG1sfGFzcCJdLAogICAgUkRvYzogICAgICAgIFsiUmQiXSwKICAgIFJlZDogICAgICAgICBbInJlZHxyZWRzIl0sCiAgICBSSFRNTDogICAgICAgWyJSaHRtbCJdLAogICAgUlNUOiAgICAgICAgIFsicnN0Il0sCiAgICBSdWJ5OiAgICAgICAgWyJyYnxydXxnZW1zcGVjfHJha2V8Xkd1YXJkZmlsZXxeUmFrZWZpbGV8XkdlbWZpbGUiXSwKICAgIFJ1c3Q6ICAgICAgICBbInJzIl0sCiAgICBTQVNTOiAgICAgICAgWyJzYXNzIl0sCiAgICBTQ0FEOiAgICAgICAgWyJzY2FkIl0sCiAgICBTY2FsYTogICAgICAgWyJzY2FsYXxzYnQiXSwKICAgIFNjaGVtZTogICAgICBbInNjbXxzbXxya3R8b2FrfHNjaGVtZSJdLAogICAgU0NTUzogICAgICAgIFsic2NzcyJdLAogICAgU0g6ICAgICAgICAgIFsic2h8YmFzaHxeLmJhc2hyYyJdLAogICAgU0pTOiAgICAgICAgIFsic2pzIl0sCiAgICBTbGltOiAgICAgICAgWyJzbGltfHNraW0iXSwKICAgIFNtYXJ0eTogICAgICBbInNtYXJ0eXx0cGwiXSwKICAgIHNuaXBwZXRzOiAgICBbInNuaXBwZXRzIl0sCiAgICBTb3lfVGVtcGxhdGU6WyJzb3kiXSwKICAgIFNwYWNlOiAgICAgICBbInNwYWNlIl0sCiAgICBTUUw6ICAgICAgICAgWyJzcWwiXSwKICAgIFNRTFNlcnZlcjogICBbInNxbHNlcnZlciJdLAogICAgU3R5bHVzOiAgICAgIFsic3R5bHxzdHlsdXMiXSwKICAgIFNWRzogICAgICAgICBbInN2ZyJdLAogICAgU3dpZnQ6ICAgICAgIFsic3dpZnQiXSwKICAgIFRjbDogICAgICAgICBbInRjbCJdLAogICAgVGVycmFmb3JtOiAgIFsidGYiLCAidGZ2YXJzIiwgInRlcnJhZ3J1bnQiXSwKICAgIFRleDogICAgICAgICBbInRleCJdLAogICAgVGV4dDogICAgICAgIFsidHh0Il0sCiAgICBUZXh0aWxlOiAgICAgWyJ0ZXh0aWxlIl0sCiAgICBUb21sOiAgICAgICAgWyJ0b21sIl0sCiAgICBUU1g6ICAgICAgICAgWyJ0c3giXSwKICAgIFR3aWc6ICAgICAgICBbImxhdHRlfHR3aWd8c3dpZyJdLAogICAgVHlwZXNjcmlwdDogIFsidHN8dHlwZXNjcmlwdHxzdHIiXSwKICAgIFZhbGE6ICAgICAgICBbInZhbGEiXSwKICAgIFZCU2NyaXB0OiAgICBbInZic3x2YiJdLAogICAgVmVsb2NpdHk6ICAgIFsidm0iXSwKICAgIFZlcmlsb2c6ICAgICBbInZ8dmh8c3Z8c3ZoIl0sCiAgICBWSERMOiAgICAgICAgWyJ2aGR8dmhkbCJdLAogICAgVmlzdWFsZm9yY2U6IFsidmZwfGNvbXBvbmVudHxwYWdlIl0sCiAgICBXb2xsb2s6ICAgICAgWyJ3bGt8d3BnbXx3dGVzdCJdLAogICAgWE1MOiAgICAgICAgIFsieG1sfHJkZnxyc3N8d3NkbHx4c2x0fGF0b218bWF0aG1sfG1tbHx4dWx8eGJsfHhhbWwiXSwKICAgIFhRdWVyeTogICAgICBbInhxIl0sCiAgICBZQU1MOiAgICAgICAgWyJ5YW1sfHltbCJdLAogICAgWmVlazogICAgICAgIFsiemVla3xicm8iXSwKICAgIERqYW5nbzogICAgICBbImh0bWwiXQp9OwoKdmFyIG5hbWVPdmVycmlkZXMgPSB7CiAgICBPYmplY3RpdmVDOiAiT2JqZWN0aXZlLUMiLAogICAgQ1NoYXJwOiAiQyMiLAogICAgZ29sYW5nOiAiR28iLAogICAgQ19DcHA6ICJDIGFuZCBDKysiLAogICAgQ3NvdW5kX0RvY3VtZW50OiAiQ3NvdW5kIERvY3VtZW50IiwKICAgIENzb3VuZF9PcmNoZXN0cmE6ICJDc291bmQiLAogICAgQ3NvdW5kX1Njb3JlOiAiQ3NvdW5kIFNjb3JlIiwKICAgIGNvZmZlZTogIkNvZmZlZVNjcmlwdCIsCiAgICBIVE1MX1J1Ynk6ICJIVE1MIChSdWJ5KSIsCiAgICBIVE1MX0VsaXhpcjogIkhUTUwgKEVsaXhpcikiLAogICAgRlRMOiAiRnJlZU1hcmtlciIsCiAgICBQSFBfTGFyYXZlbF9ibGFkZTogIlBIUCAoQmxhZGUgVGVtcGxhdGUpIiwKICAgIFBlcmw2OiAiUGVybCA2IiwKICAgIEF1dG9Ib3RLZXk6ICJBdXRvSG90a2V5IC8gQXV0b0l0Igp9Owp2YXIgbW9kZXNCeU5hbWUgPSB7fTsKZm9yICh2YXIgbmFtZSBpbiBzdXBwb3J0ZWRNb2RlcykgewogICAgdmFyIGRhdGEgPSBzdXBwb3J0ZWRNb2Rlc1tuYW1lXTsKICAgIHZhciBkaXNwbGF5TmFtZSA9IChuYW1lT3ZlcnJpZGVzW25hbWVdIHx8IG5hbWUpLnJlcGxhY2UoL18vZywgIiAiKTsKICAgIHZhciBmaWxlbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgIHZhciBtb2RlID0gbmV3IE1vZGUoZmlsZW5hbWUsIGRpc3BsYXlOYW1lLCBkYXRhWzBdKTsKICAgIG1vZGVzQnlOYW1lW2ZpbGVuYW1lXSA9IG1vZGU7CiAgICBtb2Rlcy5wdXNoKG1vZGUpOwp9Cgptb2R1bGUuZXhwb3J0cyA9IHsKICAgIGdldE1vZGVGb3JQYXRoOiBnZXRNb2RlRm9yUGF0aCwKICAgIG1vZGVzOiBtb2RlcywKICAgIG1vZGVzQnlOYW1lOiBtb2Rlc0J5TmFtZQp9OwoKfSk7CgpkZWZpbmUoImFjZS9leHQvdGhlbWVsaXN0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgdGhlbWVEYXRhID0gWwogICAgWyJDaHJvbWUiICAgICAgICAgXSwKICAgIFsiQ2xvdWRzIiAgICAgICAgIF0sCiAgICBbIkNyaW1zb24gRWRpdG9yIiBdLAogICAgWyJEYXduIiAgICAgICAgICAgXSwKICAgIFsiRHJlYW13ZWF2ZXIiICAgIF0sCiAgICBbIkVjbGlwc2UiICAgICAgICBdLAogICAgWyJHaXRIdWIiICAgICAgICAgXSwKICAgIFsiSVBsYXN0aWMiICAgICAgIF0sCiAgICBbIlNvbGFyaXplZCBMaWdodCJdLAogICAgWyJUZXh0TWF0ZSIgICAgICAgXSwKICAgIFsiVG9tb3Jyb3ciICAgICAgIF0sCiAgICBbIlhDb2RlIiAgICAgICAgICBdLAogICAgWyJLdXJvaXIiXSwKICAgIFsiS2F0emVuTWlsY2giXSwKICAgIFsiU1FMIFNlcnZlciIgICAgICAgICAgICwic3Fsc2VydmVyIiAgICAgICAgICAgICAgICwgImxpZ2h0Il0sCiAgICBbIkFtYmlhbmNlIiAgICAgICAgICAgICAsImFtYmlhbmNlIiAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJDaGFvcyIgICAgICAgICAgICAgICAgLCJjaGFvcyIgICAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiQ2xvdWRzIE1pZG5pZ2h0IiAgICAgICwiY2xvdWRzX21pZG5pZ2h0IiAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIkRyYWN1bGEiICAgICAgICAgICAgICAsIiIgICAgICAgICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJDb2JhbHQiICAgICAgICAgICAgICAgLCJjb2JhbHQiICAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiR3J1dmJveCIgICAgICAgICAgICAgICwiZ3J1dmJveCIgICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIkdyZWVuIG9uIEJsYWNrIiAgICAgICAsImdvYiIgICAgICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJpZGxlIEZpbmdlcnMiICAgICAgICAgLCJpZGxlX2ZpbmdlcnMiICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsia3JUaGVtZSIgICAgICAgICAgICAgICwia3JfdGhlbWUiICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIk1lcmJpdm9yZSIgICAgICAgICAgICAsIm1lcmJpdm9yZSIgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJNZXJiaXZvcmUgU29mdCIgICAgICAgLCJtZXJiaXZvcmVfc29mdCIgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiTW9ubyBJbmR1c3RyaWFsIiAgICAgICwibW9ub19pbmR1c3RyaWFsIiAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIk1vbm9rYWkiICAgICAgICAgICAgICAsIm1vbm9rYWkiICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJQYXN0ZWwgb24gZGFyayIgICAgICAgLCJwYXN0ZWxfb25fZGFyayIgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiU29sYXJpemVkIERhcmsiICAgICAgICwic29sYXJpemVkX2RhcmsiICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIlRlcm1pbmFsIiAgICAgICAgICAgICAsInRlcm1pbmFsIiAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJUb21vcnJvdyBOaWdodCIgICAgICAgLCJ0b21vcnJvd19uaWdodCIgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiVG9tb3Jyb3cgTmlnaHQgQmx1ZSIgICwidG9tb3Jyb3dfbmlnaHRfYmx1ZSIgICAgICwgICJkYXJrIl0sCiAgICBbIlRvbW9ycm93IE5pZ2h0IEJyaWdodCIsInRvbW9ycm93X25pZ2h0X2JyaWdodCIgICAsICAiZGFyayJdLAogICAgWyJUb21vcnJvdyBOaWdodCA4MHMiICAgLCJ0b21vcnJvd19uaWdodF9laWdodGllcyIgLCAgImRhcmsiXSwKICAgIFsiVHdpbGlnaHQiICAgICAgICAgICAgICwidHdpbGlnaHQiICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIlZpYnJhbnQgSW5rIiAgICAgICAgICAsInZpYnJhbnRfaW5rIiAgICAgICAgICAgICAsICAiZGFyayJdCl07CgoKZXhwb3J0cy50aGVtZXNCeU5hbWUgPSB7fTsKZXhwb3J0cy50aGVtZXMgPSB0aGVtZURhdGEubWFwKGZ1bmN0aW9uKGRhdGEpIHsKICAgIHZhciBuYW1lID0gZGF0YVsxXSB8fCBkYXRhWzBdLnJlcGxhY2UoLyAvZywgIl8iKS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIHRoZW1lID0gewogICAgICAgIGNhcHRpb246IGRhdGFbMF0sCiAgICAgICAgdGhlbWU6ICJhY2UvdGhlbWUvIiArIG5hbWUsCiAgICAgICAgaXNEYXJrOiBkYXRhWzJdID09ICJkYXJrIiwKICAgICAgICBuYW1lOiBuYW1lCiAgICB9OwogICAgZXhwb3J0cy50aGVtZXNCeU5hbWVbbmFtZV0gPSB0aGVtZTsKICAgIHJldHVybiB0aGVtZTsKfSk7Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9vcHRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2V4dC9tZW51X3Rvb2xzL292ZXJsYXlfcGFnZSIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9vb3AiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2V4dC9tb2RlbGlzdCIsImFjZS9leHQvdGhlbWVsaXN0Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBvdmVybGF5UGFnZSA9IHJlcXVpcmUoJy4vbWVudV90b29scy9vdmVybGF5X3BhZ2UnKS5vdmVybGF5UGFnZTsKCiAKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBidWlsZERvbSA9IGRvbS5idWlsZERvbTsKCnZhciBtb2RlbGlzdCA9IHJlcXVpcmUoIi4vbW9kZWxpc3QiKTsKdmFyIHRoZW1lbGlzdCA9IHJlcXVpcmUoIi4vdGhlbWVsaXN0Iik7Cgp2YXIgdGhlbWVzID0geyBCcmlnaHQ6IFtdLCBEYXJrOiBbXSB9Owp0aGVtZWxpc3QudGhlbWVzLmZvckVhY2goZnVuY3Rpb24oeCkgewogICAgdGhlbWVzW3guaXNEYXJrID8gIkRhcmsiIDogIkJyaWdodCJdLnB1c2goeyBjYXB0aW9uOiB4LmNhcHRpb24sIHZhbHVlOiB4LnRoZW1lIH0pOwp9KTsKCnZhciBtb2RlcyA9IG1vZGVsaXN0Lm1vZGVzLm1hcChmdW5jdGlvbih4KXsgCiAgICByZXR1cm4geyBjYXB0aW9uOiB4LmNhcHRpb24sIHZhbHVlOiB4Lm1vZGUgfTsgCn0pOwoKCnZhciBvcHRpb25Hcm91cHMgPSB7CiAgICBNYWluOiB7CiAgICAgICAgTW9kZTogewogICAgICAgICAgICBwYXRoOiAibW9kZSIsCiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiLAogICAgICAgICAgICBpdGVtczogbW9kZXMKICAgICAgICB9LAogICAgICAgIFRoZW1lOiB7CiAgICAgICAgICAgIHBhdGg6ICJ0aGVtZSIsCiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiLAogICAgICAgICAgICBpdGVtczogdGhlbWVzCiAgICAgICAgfSwKICAgICAgICAiS2V5YmluZGluZyI6IHsKICAgICAgICAgICAgdHlwZTogImJ1dHRvbkJhciIsCiAgICAgICAgICAgIHBhdGg6ICJrZXlib2FyZEhhbmRsZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIkFjZSIsIHZhbHVlIDogbnVsbCB9LAogICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIlZpbSIsIHZhbHVlIDogImFjZS9rZXlib2FyZC92aW0iIH0sCiAgICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiRW1hY3MiLCB2YWx1ZSA6ICJhY2Uva2V5Ym9hcmQvZW1hY3MiIH0sCiAgICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiU3VibGltZSIsIHZhbHVlIDogImFjZS9rZXlib2FyZC9zdWJsaW1lIiB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJGb250IFNpemUiOiB7CiAgICAgICAgICAgIHBhdGg6ICJmb250U2l6ZSIsCiAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICBkZWZhdWx0VmFsdWU6IDEyLAogICAgICAgICAgICBkZWZhdWx0czogWwogICAgICAgICAgICAgICAge2NhcHRpb246ICIxMnB4IiwgdmFsdWU6IDEyfSwKICAgICAgICAgICAgICAgIHtjYXB0aW9uOiAiMjRweCIsIHZhbHVlOiAyNH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIlNvZnQgV3JhcCI6IHsKICAgICAgICAgICAgdHlwZTogImJ1dHRvbkJhciIsCiAgICAgICAgICAgIHBhdGg6ICJ3cmFwIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIk9mZiIsICB2YWx1ZSA6ICJvZmYiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJWaWV3IiwgdmFsdWUgOiAiZnJlZSIgfSwKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIm1hcmdpbiIsIHZhbHVlIDogInByaW50TWFyZ2luIiB9LAogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiNDAiLCAgIHZhbHVlIDogIjQwIiB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJDdXJzb3IgU3R5bGUiOiB7CiAgICAgICAgICAgIHBhdGg6ICJjdXJzb3JTdHlsZSIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJBY2UiLCAgICB2YWx1ZSA6ICJhY2UiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJTbGltIiwgICB2YWx1ZSA6ICJzbGltIiB9LAogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiU21vb3RoIiwgdmFsdWUgOiAic21vb3RoIiB9LAogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiU21vb3RoIEFuZCBTbGltIiwgdmFsdWUgOiAic21vb3RoIHNsaW0iIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJXaWRlIiwgICB2YWx1ZSA6ICJ3aWRlIiB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJGb2xkaW5nIjogewogICAgICAgICAgICBwYXRoOiAiZm9sZFN0eWxlIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJNYW51YWwiLCB2YWx1ZSA6ICJtYW51YWwiIH0sCiAgICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiTWFyayBiZWdpbiIsIHZhbHVlIDogIm1hcmtiZWdpbiIgfSwKICAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJNYXJrIGJlZ2luIGFuZCBlbmQiLCB2YWx1ZSA6ICJtYXJrYmVnaW5lbmQiIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIlNvZnQgVGFicyI6IFt7CiAgICAgICAgICAgIHBhdGg6ICJ1c2VTb2Z0VGFicyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHBhdGg6ICJ0YWJTaXplIiwKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIHZhbHVlczogWzIsIDMsIDQsIDgsIDE2XQogICAgICAgIH1dLAogICAgICAgICJPdmVyc2Nyb2xsIjogewogICAgICAgICAgICB0eXBlOiAiYnV0dG9uQmFyIiwKICAgICAgICAgICAgcGF0aDogInNjcm9sbFBhc3RFbmQiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiTm9uZSIsICB2YWx1ZSA6IDAgfSwKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIkhhbGYiLCAgIHZhbHVlIDogMC41IH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJGdWxsIiwgICB2YWx1ZSA6IDEgfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgfSwKICAgIE1vcmU6IHsKICAgICAgICAiQXRvbWljIHNvZnQgdGFicyI6IHsKICAgICAgICAgICAgcGF0aDogIm5hdmlnYXRlV2l0aGluU29mdFRhYnMiCiAgICAgICAgfSwKICAgICAgICAiRW5hYmxlIEJlaGF2aW91cnMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJiZWhhdmlvdXJzRW5hYmxlZCIKICAgICAgICB9LAogICAgICAgICJGdWxsIExpbmUgU2VsZWN0aW9uIjogewogICAgICAgICAgICB0eXBlOiAiY2hlY2tib3giLAogICAgICAgICAgICB2YWx1ZXM6ICJ0ZXh0fGxpbmUiLAogICAgICAgICAgICBwYXRoOiAic2VsZWN0aW9uU3R5bGUiCiAgICAgICAgfSwKICAgICAgICAiSGlnaGxpZ2h0IEFjdGl2ZSBMaW5lIjogewogICAgICAgICAgICBwYXRoOiAiaGlnaGxpZ2h0QWN0aXZlTGluZSIKICAgICAgICB9LAogICAgICAgICJTaG93IEludmlzaWJsZXMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJzaG93SW52aXNpYmxlcyIKICAgICAgICB9LAogICAgICAgICJTaG93IEluZGVudCBHdWlkZXMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJkaXNwbGF5SW5kZW50R3VpZGVzIgogICAgICAgIH0sCiAgICAgICAgIlBlcnNpc3RlbnQgU2Nyb2xsYmFyIjogW3sKICAgICAgICAgICAgcGF0aDogImhTY3JvbGxCYXJBbHdheXNWaXNpYmxlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgcGF0aDogInZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIgogICAgICAgIH1dLAogICAgICAgICJBbmltYXRlIHNjcm9sbGluZyI6IHsKICAgICAgICAgICAgcGF0aDogImFuaW1hdGVkU2Nyb2xsIgogICAgICAgIH0sCiAgICAgICAgIlNob3cgR3V0dGVyIjogewogICAgICAgICAgICBwYXRoOiAic2hvd0d1dHRlciIKICAgICAgICB9LAogICAgICAgICJTaG93IExpbmUgTnVtYmVycyI6IHsKICAgICAgICAgICAgcGF0aDogInNob3dMaW5lTnVtYmVycyIKICAgICAgICB9LAogICAgICAgICJSZWxhdGl2ZSBMaW5lIE51bWJlcnMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJyZWxhdGl2ZUxpbmVOdW1iZXJzIgogICAgICAgIH0sCiAgICAgICAgIkZpeGVkIEd1dHRlciBXaWR0aCI6IHsKICAgICAgICAgICAgcGF0aDogImZpeGVkV2lkdGhHdXR0ZXIiCiAgICAgICAgfSwKICAgICAgICAiU2hvdyBQcmludCBNYXJnaW4iOiBbewogICAgICAgICAgICBwYXRoOiAic2hvd1ByaW50TWFyZ2luIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIHBhdGg6ICJwcmludE1hcmdpbkNvbHVtbiIKICAgICAgICB9XSwKICAgICAgICAiSW5kZW50ZWQgU29mdCBXcmFwIjogewogICAgICAgICAgICBwYXRoOiAiaW5kZW50ZWRTb2Z0V3JhcCIKICAgICAgICB9LAogICAgICAgICJIaWdobGlnaHQgc2VsZWN0ZWQgd29yZCI6IHsKICAgICAgICAgICAgcGF0aDogImhpZ2hsaWdodFNlbGVjdGVkV29yZCIKICAgICAgICB9LAogICAgICAgICJGYWRlIEZvbGQgV2lkZ2V0cyI6IHsKICAgICAgICAgICAgcGF0aDogImZhZGVGb2xkV2lkZ2V0cyIKICAgICAgICB9LAogICAgICAgICJVc2UgdGV4dGFyZWEgZm9yIElNRSI6IHsKICAgICAgICAgICAgcGF0aDogInVzZVRleHRhcmVhRm9ySU1FIgogICAgICAgIH0sCiAgICAgICAgIk1lcmdlIFVuZG8gRGVsdGFzIjogewogICAgICAgICAgICBwYXRoOiAibWVyZ2VVbmRvRGVsdGFzIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIkFsd2F5cyIsICB2YWx1ZSA6ICJhbHdheXMiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJOZXZlciIsICAgdmFsdWUgOiAiZmFsc2UiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJUaW1lZCIsICAgdmFsdWUgOiAidHJ1ZSIgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAiRWxhc3RpYyBUYWJzdG9wcyI6IHsKICAgICAgICAgICAgcGF0aDogInVzZUVsYXN0aWNUYWJzdG9wcyIKICAgICAgICB9LAogICAgICAgICJJbmNyZW1lbnRhbCBTZWFyY2giOiB7CiAgICAgICAgICAgIHBhdGg6ICJ1c2VJbmNyZW1lbnRhbFNlYXJjaCIKICAgICAgICB9LAogICAgICAgICJSZWFkLW9ubHkiOiB7CiAgICAgICAgICAgIHBhdGg6ICJyZWFkT25seSIKICAgICAgICB9LAogICAgICAgICJDb3B5IHdpdGhvdXQgc2VsZWN0aW9uIjogewogICAgICAgICAgICBwYXRoOiAiY29weVdpdGhFbXB0eVNlbGVjdGlvbiIKICAgICAgICB9LAogICAgICAgICJMaXZlIEF1dG9jb21wbGV0aW9uIjogewogICAgICAgICAgICBwYXRoOiAiZW5hYmxlTGl2ZUF1dG9jb21wbGV0aW9uIgogICAgICAgIH0KICAgIH0KfTsKCgp2YXIgT3B0aW9uUGFuZWwgPSBmdW5jdGlvbihlZGl0b3IsIGVsZW1lbnQpIHsKICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOwogICAgdGhpcy5jb250YWluZXIgPSBlbGVtZW50IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5ncm91cHMgPSBbXTsKICAgIHRoaXMub3B0aW9ucyA9IHt9Owp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAKICAgIHRoaXMuYWRkID0gZnVuY3Rpb24oY29uZmlnKSB7CiAgICAgICAgaWYgKGNvbmZpZy5NYWluKQogICAgICAgICAgICBvb3AubWl4aW4ob3B0aW9uR3JvdXBzLk1haW4sIGNvbmZpZy5NYWluKTsKICAgICAgICBpZiAoY29uZmlnLk1vcmUpCiAgICAgICAgICAgIG9vcC5taXhpbihvcHRpb25Hcm91cHMuTW9yZSwgY29uZmlnLk1vcmUpOwogICAgfTsKICAgIAogICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICBidWlsZERvbShbInRhYmxlIiwge2lkOiAiY29udHJvbHMifSwgCiAgICAgICAgICAgIHRoaXMucmVuZGVyT3B0aW9uR3JvdXAob3B0aW9uR3JvdXBzLk1haW4pLAogICAgICAgICAgICBbInRyIiwgbnVsbCwgWyJ0ZCIsIHtjb2xzcGFuOiAyfSwKICAgICAgICAgICAgICAgIFsidGFibGUiLCB7aWQ6ICJtb3JlLWNvbnRyb2xzIn0sIAogICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyT3B0aW9uR3JvdXAob3B0aW9uR3JvdXBzLk1vcmUpCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIF1dLAogICAgICAgICAgICBbInRyIiwgbnVsbCwgWyJ0ZCIsIHtjb2xzcGFuOiAyfSwgInZlcnNpb24gIiArIGNvbmZpZy52ZXJzaW9uXV0KICAgICAgICBdLCB0aGlzLmNvbnRhaW5lcik7CiAgICB9OwogICAgCiAgICB0aGlzLnJlbmRlck9wdGlvbkdyb3VwID0gZnVuY3Rpb24oZ3JvdXApIHsKICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcChmdW5jdGlvbihrZXksIGkpIHsKICAgICAgICAgICAgdmFyIGl0ZW0gPSBncm91cFtrZXldOwogICAgICAgICAgICBpZiAoIWl0ZW0ucG9zaXRpb24pCiAgICAgICAgICAgICAgICBpdGVtLnBvc2l0aW9uID0gaSAvIDEwMDAwOwogICAgICAgICAgICBpZiAoIWl0ZW0ubGFiZWwpCiAgICAgICAgICAgICAgICBpdGVtLmxhYmVsID0ga2V5OwogICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgcmV0dXJuIGEucG9zaXRpb24gLSBiLnBvc2l0aW9uOwogICAgICAgIH0pLm1hcChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck9wdGlvbihpdGVtLmxhYmVsLCBpdGVtKTsKICAgICAgICB9LCB0aGlzKTsKICAgIH07CiAgICAKICAgIHRoaXMucmVuZGVyT3B0aW9uQ29udHJvbCA9IGZ1bmN0aW9uKGtleSwgb3B0aW9uKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbikpIHsKICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5tYXAoZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVuZGVyT3B0aW9uQ29udHJvbChrZXksIHgpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdmFyIGNvbnRyb2w7CiAgICAgICAgCiAgICAgICAgdmFyIHZhbHVlID0gc2VsZi5nZXRPcHRpb24ob3B0aW9uKTsKICAgICAgICAKICAgICAgICBpZiAob3B0aW9uLnZhbHVlcyAmJiBvcHRpb24udHlwZSAhPSAiY2hlY2tib3giKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnZhbHVlcyA9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZXMgPSBvcHRpb24udmFsdWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIG9wdGlvbi5pdGVtcyA9IG9wdGlvbi52YWx1ZXMubWFwKGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2LCBuYW1lOiB2IH07CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAob3B0aW9uLnR5cGUgPT0gImJ1dHRvbkJhciIpIHsKICAgICAgICAgICAgY29udHJvbCA9IFsiZGl2Iiwgb3B0aW9uLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWyJidXR0b24iLCB7IAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICBhY2Vfc2VsZWN0ZWRfYnV0dG9uOiB2YWx1ZSA9PSBpdGVtLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICBvbmNsaWNrOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRPcHRpb24ob3B0aW9uLCBpdGVtLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlthY2Vfc2VsZWN0ZWRfYnV0dG9uXSIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImFjZV9zZWxlY3RlZF9idXR0b24iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgiYWNlX3NlbGVjdGVkX2J1dHRvbiIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICB9LCBpdGVtLmRlc2MgfHwgaXRlbS5jYXB0aW9uIHx8IGl0ZW0ubmFtZV07CiAgICAgICAgICAgIH0pXTsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi50eXBlID09ICJudW1iZXIiKSB7CiAgICAgICAgICAgIGNvbnRyb2wgPSBbImlucHV0Iiwge3R5cGU6ICJudW1iZXIiLCB2YWx1ZTogdmFsdWUgfHwgb3B0aW9uLmRlZmF1bHRWYWx1ZSwgc3R5bGU6IndpZHRoOjNlbSIsIG9uaW5wdXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgc2VsZi5zZXRPcHRpb24ob3B0aW9uLCBwYXJzZUludCh0aGlzLnZhbHVlKSk7CiAgICAgICAgICAgIH19XTsKICAgICAgICAgICAgaWYgKG9wdGlvbi5kZWZhdWx0cykgewogICAgICAgICAgICAgICAgY29udHJvbCA9IFtjb250cm9sLCBvcHRpb24uZGVmYXVsdHMubWFwKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJidXR0b24iLCB7b25jbGljazogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Lm9uaW5wdXQoKTsKICAgICAgICAgICAgICAgICAgICB9fSwgaXRlbS5jYXB0aW9uXTsKICAgICAgICAgICAgICAgIH0pXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLml0ZW1zKSB7CiAgICAgICAgICAgIHZhciBidWlsZEl0ZW1zID0gZnVuY3Rpb24oaXRlbXMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbIm9wdGlvbiIsIHsgdmFsdWU6IGl0ZW0udmFsdWUgfHwgaXRlbS5uYW1lIH0sIGl0ZW0uZGVzYyB8fCBpdGVtLmNhcHRpb24gfHwgaXRlbS5uYW1lXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGl0ZW1zID0gQXJyYXkuaXNBcnJheShvcHRpb24uaXRlbXMpIAogICAgICAgICAgICAgICAgPyBidWlsZEl0ZW1zKG9wdGlvbi5pdGVtcykKICAgICAgICAgICAgICAgIDogT2JqZWN0LmtleXMob3B0aW9uLml0ZW1zKS5tYXAoZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsib3B0Z3JvdXAiLCB7ImxhYmVsIjoga2V5fSwgYnVpbGRJdGVtcyhvcHRpb24uaXRlbXNba2V5XSldOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRyb2wgPSBbInNlbGVjdCIsIHsgaWQ6IGtleSwgdmFsdWU6IHZhbHVlLCBvbmNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBzZWxmLnNldE9wdGlvbihvcHRpb24sIHRoaXMudmFsdWUpOwogICAgICAgICAgICB9IH0sIGl0ZW1zXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbi52YWx1ZXMgPT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWVzID0gb3B0aW9uLnZhbHVlcy5zcGxpdCgifCIpOwogICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlcykgdmFsdWUgPSB2YWx1ZSA9PSBvcHRpb24udmFsdWVzWzFdOwogICAgICAgICAgICBjb250cm9sID0gWyJpbnB1dCIsIHsgdHlwZTogImNoZWNrYm94IiwgaWQ6IGtleSwgY2hlY2tlZDogdmFsdWUgfHwgbnVsbCwgb25jaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5jaGVja2VkOwogICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZXMpIHZhbHVlID0gb3B0aW9uLnZhbHVlc1t2YWx1ZSA/IDEgOiAwXTsKICAgICAgICAgICAgICAgIHNlbGYuc2V0T3B0aW9uKG9wdGlvbiwgdmFsdWUpOwogICAgICAgICAgICB9fV07CiAgICAgICAgICAgIGlmIChvcHRpb24udHlwZSA9PSAiY2hlY2tlZE51bWJlciIpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBbY29udHJvbCwgW11dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb250cm9sOwogICAgfTsKICAgIAogICAgdGhpcy5yZW5kZXJPcHRpb24gPSBmdW5jdGlvbihrZXksIG9wdGlvbikgewogICAgICAgIGlmIChvcHRpb24ucGF0aCAmJiAhb3B0aW9uLm9uY2hhbmdlICYmICF0aGlzLmVkaXRvci4kb3B0aW9uc1tvcHRpb24ucGF0aF0pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLm9wdGlvbnNbb3B0aW9uLnBhdGhdID0gb3B0aW9uOwogICAgICAgIHZhciBzYWZlS2V5ID0gIi0iICsgb3B0aW9uLnBhdGg7CiAgICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLnJlbmRlck9wdGlvbkNvbnRyb2woc2FmZUtleSwgb3B0aW9uKTsKICAgICAgICByZXR1cm4gWyJ0ciIsIHtjbGFzczogImFjZV9vcHRpb25zTWVudUVudHJ5In0sIFsidGQiLAogICAgICAgICAgICBbImxhYmVsIiwge2Zvcjogc2FmZUtleX0sIGtleV0KICAgICAgICBdLCBbInRkIiwgY29udHJvbF1dOwogICAgfTsKICAgIAogICAgdGhpcy5zZXRPcHRpb24gPSBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7CiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gInN0cmluZyIpCiAgICAgICAgICAgIG9wdGlvbiA9IHRoaXMub3B0aW9uc1tvcHRpb25dOwogICAgICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKSB2YWx1ZSA9IGZhbHNlOwogICAgICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpIHZhbHVlID0gdHJ1ZTsKICAgICAgICBpZiAodmFsdWUgPT0gIm51bGwiKSB2YWx1ZSA9IG51bGw7CiAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB2YWx1ZSA9IHVuZGVmaW5lZDsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICJzdHJpbmciICYmIHBhcnNlRmxvYXQodmFsdWUpLnRvU3RyaW5nKCkgPT0gdmFsdWUpCiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7CiAgICAgICAgaWYgKG9wdGlvbi5vbmNoYW5nZSkKICAgICAgICAgICAgb3B0aW9uLm9uY2hhbmdlKHZhbHVlKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24ucGF0aCkKICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9uKG9wdGlvbi5wYXRoLCB2YWx1ZSk7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJzZXRPcHRpb24iLCB7bmFtZTogb3B0aW9uLnBhdGgsIHZhbHVlOiB2YWx1ZX0pOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHsKICAgICAgICBpZiAob3B0aW9uLmdldFZhbHVlKQogICAgICAgICAgICByZXR1cm4gb3B0aW9uLmdldFZhbHVlKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldE9wdGlvbihvcHRpb24ucGF0aCk7CiAgICB9OwogICAgCn0pLmNhbGwoT3B0aW9uUGFuZWwucHJvdG90eXBlKTsKCmV4cG9ydHMuT3B0aW9uUGFuZWwgPSBPcHRpb25QYW5lbDsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvZXh0L29wdGlvbnMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-prompt.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L21lbnVfdG9vbHMvZ2V0X2VkaXRvcl9rZXlib2FyZF9zaG9ydGN1dHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2tleXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIGtleXMgPSByZXF1aXJlKCIuLi8uLi9saWIva2V5cyIpOwptb2R1bGUuZXhwb3J0cy5nZXRFZGl0b3JLZXlib3JkU2hvcnRjdXRzID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICB2YXIgS0VZX01PRFMgPSBrZXlzLktFWV9NT0RTOwogICAgdmFyIGtleWJpbmRpbmdzID0gW107CiAgICB2YXIgY29tbWFuZE1hcCA9IHt9OwogICAgZWRpdG9yLmtleUJpbmRpbmcuJGhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24oaGFuZGxlcikgewogICAgICAgIHZhciBja2IgPSBoYW5kbGVyLmNvbW1hbmRLZXlCaW5kaW5nOwogICAgICAgIGZvciAodmFyIGkgaW4gY2tiKSB7CiAgICAgICAgICAgIHZhciBrZXkgPSBpLnJlcGxhY2UoLyhefC0pXHcvZywgZnVuY3Rpb24oeCkgeyByZXR1cm4geC50b1VwcGVyQ2FzZSgpOyB9KTsKICAgICAgICAgICAgdmFyIGNvbW1hbmRzID0gY2tiW2ldOwogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29tbWFuZHMpKQogICAgICAgICAgICAgICAgY29tbWFuZHMgPSBbY29tbWFuZHNdOwogICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uKGNvbW1hbmQpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCAhPSAic3RyaW5nIikKICAgICAgICAgICAgICAgICAgICBjb21tYW5kICA9IGNvbW1hbmQubmFtZTsKICAgICAgICAgICAgICAgIGlmIChjb21tYW5kTWFwW2NvbW1hbmRdKSB7CiAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcFtjb21tYW5kXS5rZXkgKz0gInwiICsga2V5OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjb21tYW5kTWFwW2NvbW1hbmRdID0ge2tleToga2V5LCBjb21tYW5kOiBjb21tYW5kfTsKICAgICAgICAgICAgICAgICAgICBrZXliaW5kaW5ncy5wdXNoKGNvbW1hbmRNYXBbY29tbWFuZF0pOwogICAgICAgICAgICAgICAgfSAgICAgICAgIAogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9KTsKICAgIHJldHVybiBrZXliaW5kaW5nczsKfTsKCn0pOwoKZGVmaW5lKCJhY2UvYXV0b2NvbXBsZXRlL3BvcHVwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3ZpcnR1YWxfcmVuZGVyZXIiLCJhY2UvZWRpdG9yIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmVuZGVyZXIgPSByZXF1aXJlKCIuLi92aXJ0dWFsX3JlbmRlcmVyIikuVmlydHVhbFJlbmRlcmVyOwp2YXIgRWRpdG9yID0gcmVxdWlyZSgiLi4vZWRpdG9yIikuRWRpdG9yOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwoKdmFyICRzaW5nbGVMaW5lRWRpdG9yID0gZnVuY3Rpb24oZWwpIHsKICAgIHZhciByZW5kZXJlciA9IG5ldyBSZW5kZXJlcihlbCk7CgogICAgcmVuZGVyZXIuJG1heExpbmVzID0gNDsKCiAgICB2YXIgZWRpdG9yID0gbmV3IEVkaXRvcihyZW5kZXJlcik7CgogICAgZWRpdG9yLnNldEhpZ2hsaWdodEFjdGl2ZUxpbmUoZmFsc2UpOwogICAgZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7CiAgICBlZGl0b3IucmVuZGVyZXIuc2V0U2hvd0d1dHRlcihmYWxzZSk7CiAgICBlZGl0b3IucmVuZGVyZXIuc2V0SGlnaGxpZ2h0R3V0dGVyTGluZShmYWxzZSk7CgogICAgZWRpdG9yLiRtb3VzZUhhbmRsZXIuJGZvY3VzVGltZW91dCA9IDA7CiAgICBlZGl0b3IuJGhpZ2hsaWdodFRhZ1BlbmRpbmcgPSB0cnVlOwoKICAgIHJldHVybiBlZGl0b3I7Cn07Cgp2YXIgQWNlUG9wdXAgPSBmdW5jdGlvbihwYXJlbnROb2RlKSB7CiAgICB2YXIgZWwgPSBkb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB2YXIgcG9wdXAgPSBuZXcgJHNpbmdsZUxpbmVFZGl0b3IoZWwpOwoKICAgIGlmIChwYXJlbnROb2RlKQogICAgICAgIHBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZWwpOwogICAgZWwuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHBvcHVwLnJlbmRlcmVyLmNvbnRlbnQuc3R5bGUuY3Vyc29yID0gImRlZmF1bHQiOwogICAgcG9wdXAucmVuZGVyZXIuc2V0U3R5bGUoImFjZV9hdXRvY29tcGxldGUiKTsKCiAgICBwb3B1cC5zZXRPcHRpb24oImRpc3BsYXlJbmRlbnRHdWlkZXMiLCBmYWxzZSk7CiAgICBwb3B1cC5zZXRPcHRpb24oImRyYWdEZWxheSIsIDE1MCk7CgogICAgdmFyIG5vb3AgPSBmdW5jdGlvbigpe307CgogICAgcG9wdXAuZm9jdXMgPSBub29wOwogICAgcG9wdXAuJGlzRm9jdXNlZCA9IHRydWU7CgogICAgcG9wdXAucmVuZGVyZXIuJGN1cnNvckxheWVyLnJlc3RhcnRUaW1lciA9IG5vb3A7CiAgICBwb3B1cC5yZW5kZXJlci4kY3Vyc29yTGF5ZXIuZWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gMDsKCiAgICBwb3B1cC5yZW5kZXJlci4kbWF4TGluZXMgPSA4OwogICAgcG9wdXAucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gZmFsc2U7CgogICAgcG9wdXAuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZShmYWxzZSk7CiAgICBwb3B1cC5zZXNzaW9uLmhpZ2hsaWdodCgiIik7CiAgICBwb3B1cC5zZXNzaW9uLiRzZWFyY2hIaWdobGlnaHQuY2xhenogPSAiYWNlX2hpZ2hsaWdodC1tYXJrZXIiOwoKICAgIHBvcHVwLm9uKCJtb3VzZWRvd24iLCBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIHBvcyA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpOwogICAgICAgIHBvcHVwLnNlbGVjdGlvbi5tb3ZlVG9Qb3NpdGlvbihwb3MpOwogICAgICAgIHNlbGVjdGlvbk1hcmtlci5zdGFydC5yb3cgPSBzZWxlY3Rpb25NYXJrZXIuZW5kLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgZS5zdG9wKCk7CiAgICB9KTsKCiAgICB2YXIgbGFzdE1vdXNlRXZlbnQ7CiAgICB2YXIgaG92ZXJNYXJrZXIgPSBuZXcgUmFuZ2UoLTEsMCwtMSxJbmZpbml0eSk7CiAgICB2YXIgc2VsZWN0aW9uTWFya2VyID0gbmV3IFJhbmdlKC0xLDAsLTEsSW5maW5pdHkpOwogICAgc2VsZWN0aW9uTWFya2VyLmlkID0gcG9wdXAuc2Vzc2lvbi5hZGRNYXJrZXIoc2VsZWN0aW9uTWFya2VyLCAiYWNlX2FjdGl2ZS1saW5lIiwgImZ1bGxMaW5lIik7CiAgICBwb3B1cC5zZXRTZWxlY3RPbkhvdmVyID0gZnVuY3Rpb24odmFsKSB7CiAgICAgICAgaWYgKCF2YWwpIHsKICAgICAgICAgICAgaG92ZXJNYXJrZXIuaWQgPSBwb3B1cC5zZXNzaW9uLmFkZE1hcmtlcihob3Zlck1hcmtlciwgImFjZV9saW5lLWhvdmVyIiwgImZ1bGxMaW5lIik7CiAgICAgICAgfSBlbHNlIGlmIChob3Zlck1hcmtlci5pZCkgewogICAgICAgICAgICBwb3B1cC5zZXNzaW9uLnJlbW92ZU1hcmtlcihob3Zlck1hcmtlci5pZCk7CiAgICAgICAgICAgIGhvdmVyTWFya2VyLmlkID0gbnVsbDsKICAgICAgICB9CiAgICB9OwogICAgcG9wdXAuc2V0U2VsZWN0T25Ib3ZlcihmYWxzZSk7CiAgICBwb3B1cC5vbigibW91c2Vtb3ZlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGlmICghbGFzdE1vdXNlRXZlbnQpIHsKICAgICAgICAgICAgbGFzdE1vdXNlRXZlbnQgPSBlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChsYXN0TW91c2VFdmVudC54ID09IGUueCAmJiBsYXN0TW91c2VFdmVudC55ID09IGUueSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxhc3RNb3VzZUV2ZW50ID0gZTsKICAgICAgICBsYXN0TW91c2VFdmVudC5zY3JvbGxUb3AgPSBwb3B1cC5yZW5kZXJlci5zY3JvbGxUb3A7CiAgICAgICAgdmFyIHJvdyA9IGxhc3RNb3VzZUV2ZW50LmdldERvY3VtZW50UG9zaXRpb24oKS5yb3c7CiAgICAgICAgaWYgKGhvdmVyTWFya2VyLnN0YXJ0LnJvdyAhPSByb3cpIHsKICAgICAgICAgICAgaWYgKCFob3Zlck1hcmtlci5pZCkKICAgICAgICAgICAgICAgIHBvcHVwLnNldFJvdyhyb3cpOwogICAgICAgICAgICBzZXRIb3Zlck1hcmtlcihyb3cpOwogICAgICAgIH0KICAgIH0pOwogICAgcG9wdXAucmVuZGVyZXIub24oImJlZm9yZVJlbmRlciIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChsYXN0TW91c2VFdmVudCAmJiBob3Zlck1hcmtlci5zdGFydC5yb3cgIT0gLTEpIHsKICAgICAgICAgICAgbGFzdE1vdXNlRXZlbnQuJHBvcyA9IG51bGw7CiAgICAgICAgICAgIHZhciByb3cgPSBsYXN0TW91c2VFdmVudC5nZXREb2N1bWVudFBvc2l0aW9uKCkucm93OwogICAgICAgICAgICBpZiAoIWhvdmVyTWFya2VyLmlkKQogICAgICAgICAgICAgICAgcG9wdXAuc2V0Um93KHJvdyk7CiAgICAgICAgICAgIHNldEhvdmVyTWFya2VyKHJvdywgdHJ1ZSk7CiAgICAgICAgfQogICAgfSk7CiAgICBwb3B1cC5yZW5kZXJlci5vbigiYWZ0ZXJSZW5kZXIiLCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgcm93ID0gcG9wdXAuZ2V0Um93KCk7CiAgICAgICAgdmFyIHQgPSBwb3B1cC5yZW5kZXJlci4kdGV4dExheWVyOwogICAgICAgIHZhciBzZWxlY3RlZCA9IHQuZWxlbWVudC5jaGlsZE5vZGVzW3JvdyAtIHQuY29uZmlnLmZpcnN0Um93XTsKICAgICAgICBpZiAoc2VsZWN0ZWQgIT09IHQuc2VsZWN0ZWROb2RlICYmIHQuc2VsZWN0ZWROb2RlKQogICAgICAgICAgICBkb20ucmVtb3ZlQ3NzQ2xhc3ModC5zZWxlY3RlZE5vZGUsICJhY2Vfc2VsZWN0ZWQiKTsKICAgICAgICB0LnNlbGVjdGVkTm9kZSA9IHNlbGVjdGVkOwogICAgICAgIGlmIChzZWxlY3RlZCkKICAgICAgICAgICAgZG9tLmFkZENzc0NsYXNzKHNlbGVjdGVkLCAiYWNlX3NlbGVjdGVkIik7CiAgICB9KTsKICAgIHZhciBoaWRlSG92ZXJNYXJrZXIgPSBmdW5jdGlvbigpIHsgc2V0SG92ZXJNYXJrZXIoLTEpOyB9OwogICAgdmFyIHNldEhvdmVyTWFya2VyID0gZnVuY3Rpb24ocm93LCBzdXBwcmVzc1JlZHJhdykgewogICAgICAgIGlmIChyb3cgIT09IGhvdmVyTWFya2VyLnN0YXJ0LnJvdykgewogICAgICAgICAgICBob3Zlck1hcmtlci5zdGFydC5yb3cgPSBob3Zlck1hcmtlci5lbmQucm93ID0gcm93OwogICAgICAgICAgICBpZiAoIXN1cHByZXNzUmVkcmF3KQogICAgICAgICAgICAgICAgcG9wdXAuc2Vzc2lvbi5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpOwogICAgICAgICAgICBwb3B1cC5fZW1pdCgiY2hhbmdlSG92ZXJNYXJrZXIiKTsKICAgICAgICB9CiAgICB9OwogICAgcG9wdXAuZ2V0SG92ZXJlZFJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBob3Zlck1hcmtlci5zdGFydC5yb3c7CiAgICB9OwoKICAgIGV2ZW50LmFkZExpc3RlbmVyKHBvcHVwLmNvbnRhaW5lciwgIm1vdXNlb3V0IiwgaGlkZUhvdmVyTWFya2VyKTsKICAgIHBvcHVwLm9uKCJoaWRlIiwgaGlkZUhvdmVyTWFya2VyKTsKICAgIHBvcHVwLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCBoaWRlSG92ZXJNYXJrZXIpOwoKICAgIHBvcHVwLnNlc3Npb24uZG9jLmdldExlbmd0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBwb3B1cC5kYXRhLmxlbmd0aDsKICAgIH07CiAgICBwb3B1cC5zZXNzaW9uLmRvYy5nZXRMaW5lID0gZnVuY3Rpb24oaSkgewogICAgICAgIHZhciBkYXRhID0gcG9wdXAuZGF0YVtpXTsKICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT0gInN0cmluZyIpCiAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgIHJldHVybiAoZGF0YSAmJiBkYXRhLnZhbHVlKSB8fCAiIjsKICAgIH07CgogICAgdmFyIGJnVG9rZW5pemVyID0gcG9wdXAuc2Vzc2lvbi5iZ1Rva2VuaXplcjsKICAgIGJnVG9rZW5pemVyLiR0b2tlbml6ZVJvdyA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHZhciBkYXRhID0gcG9wdXAuZGF0YVtyb3ddOwogICAgICAgIHZhciB0b2tlbnMgPSBbXTsKICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICJzdHJpbmciKQogICAgICAgICAgICBkYXRhID0ge3ZhbHVlOiBkYXRhfTsKICAgICAgICB2YXIgY2FwdGlvbiA9IGRhdGEuY2FwdGlvbiB8fCBkYXRhLnZhbHVlIHx8IGRhdGEubmFtZTsKCiAgICAgICAgZnVuY3Rpb24gYWRkVG9rZW4odmFsdWUsIGNsYXNzTmFtZSkgewogICAgICAgICAgICB2YWx1ZSAmJiB0b2tlbnMucHVzaCh7CiAgICAgICAgICAgICAgICB0eXBlOiAoZGF0YS5jbGFzc05hbWUgfHwgIiIpICsgKGNsYXNzTmFtZSB8fCAiIiksIAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgbG93ZXIgPSBjYXB0aW9uLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgdmFyIGZpbHRlclRleHQgPSAocG9wdXAuZmlsdGVyVGV4dCB8fCAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICB2YXIgbGFzdEluZGV4ID0gMDsKICAgICAgICB2YXIgbGFzdEkgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGZpbHRlclRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgIT0gbGFzdEkgJiYgKGRhdGEubWF0Y2hNYXNrICYgKDEgPDwgaSkgfHwgaSA9PSBmaWx0ZXJUZXh0Lmxlbmd0aCkpIHsKICAgICAgICAgICAgICAgIHZhciBzdWIgPSBmaWx0ZXJUZXh0LnNsaWNlKGxhc3RJLCBpKTsKICAgICAgICAgICAgICAgIGxhc3RJID0gaTsKICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGxvd2VyLmluZGV4T2Yoc3ViLCBsYXN0SW5kZXgpOwogICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIGFkZFRva2VuKGNhcHRpb24uc2xpY2UobGFzdEluZGV4LCBpbmRleCksICIiKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgc3ViLmxlbmd0aDsKICAgICAgICAgICAgICAgIGFkZFRva2VuKGNhcHRpb24uc2xpY2UoaW5kZXgsIGxhc3RJbmRleCksICJjb21wbGV0aW9uLWhpZ2hsaWdodCIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFkZFRva2VuKGNhcHRpb24uc2xpY2UobGFzdEluZGV4LCBjYXB0aW9uLmxlbmd0aCksICIiKTsKICAgICAgICAKICAgICAgICBpZiAoZGF0YS5tZXRhKQogICAgICAgICAgICB0b2tlbnMucHVzaCh7dHlwZTogImNvbXBsZXRpb24tbWV0YSIsIHZhbHVlOiBkYXRhLm1ldGF9KTsKICAgICAgICBpZiAoZGF0YS5tZXNzYWdlKQogICAgICAgICAgICB0b2tlbnMucHVzaCh7dHlwZTogImNvbXBsZXRpb24tbWVzc2FnZSIsIHZhbHVlOiBkYXRhLm1lc3NhZ2V9KTsKCiAgICAgICAgcmV0dXJuIHRva2VuczsKICAgIH07CiAgICBiZ1Rva2VuaXplci4kdXBkYXRlT25DaGFuZ2UgPSBub29wOwogICAgYmdUb2tlbml6ZXIuc3RhcnQgPSBub29wOwoKICAgIHBvcHVwLnNlc3Npb24uJGNvbXB1dGVXaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNjcmVlbldpZHRoID0gMDsKICAgIH07CiAgICBwb3B1cC5pc09wZW4gPSBmYWxzZTsKICAgIHBvcHVwLmlzVG9wZG93biA9IGZhbHNlOwogICAgcG9wdXAuYXV0b1NlbGVjdCA9IHRydWU7CiAgICBwb3B1cC5maWx0ZXJUZXh0ID0gIiI7CgogICAgcG9wdXAuZGF0YSA9IFtdOwogICAgcG9wdXAuc2V0RGF0YSA9IGZ1bmN0aW9uKGxpc3QsIGZpbHRlclRleHQpIHsKICAgICAgICBwb3B1cC5maWx0ZXJUZXh0ID0gZmlsdGVyVGV4dCB8fCAiIjsKICAgICAgICBwb3B1cC5zZXRWYWx1ZShsYW5nLnN0cmluZ1JlcGVhdCgiXG4iLCBsaXN0Lmxlbmd0aCksIC0xKTsKICAgICAgICBwb3B1cC5kYXRhID0gbGlzdCB8fCBbXTsKICAgICAgICBwb3B1cC5zZXRSb3coMCk7CiAgICB9OwogICAgcG9wdXAuZ2V0RGF0YSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIHJldHVybiBwb3B1cC5kYXRhW3Jvd107CiAgICB9OwoKICAgIHBvcHVwLmdldFJvdyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzZWxlY3Rpb25NYXJrZXIuc3RhcnQucm93OwogICAgfTsKICAgIHBvcHVwLnNldFJvdyA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBsaW5lID0gTWF0aC5tYXgodGhpcy5hdXRvU2VsZWN0ID8gMCA6IC0xLCBNYXRoLm1pbih0aGlzLmRhdGEubGVuZ3RoLCBsaW5lKSk7CiAgICAgICAgaWYgKHNlbGVjdGlvbk1hcmtlci5zdGFydC5yb3cgIT0gbGluZSkgewogICAgICAgICAgICBwb3B1cC5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgICAgc2VsZWN0aW9uTWFya2VyLnN0YXJ0LnJvdyA9IHNlbGVjdGlvbk1hcmtlci5lbmQucm93ID0gbGluZSB8fCAwOwogICAgICAgICAgICBwb3B1cC5zZXNzaW9uLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIik7CiAgICAgICAgICAgIHBvcHVwLm1vdmVDdXJzb3JUbyhsaW5lIHx8IDAsIDApOwogICAgICAgICAgICBpZiAocG9wdXAuaXNPcGVuKQogICAgICAgICAgICAgICAgcG9wdXAuX3NpZ25hbCgic2VsZWN0Iik7CiAgICAgICAgfQogICAgfTsKCiAgICBwb3B1cC5vbigiY2hhbmdlU2VsZWN0aW9uIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHBvcHVwLmlzT3BlbikKICAgICAgICAgICAgcG9wdXAuc2V0Um93KHBvcHVwLnNlbGVjdGlvbi5sZWFkLnJvdyk7CiAgICAgICAgcG9wdXAucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgIH0pOwoKICAgIHBvcHVwLmhpZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIHRoaXMuX3NpZ25hbCgiaGlkZSIpOwogICAgICAgIHBvcHVwLmlzT3BlbiA9IGZhbHNlOwogICAgfTsKICAgIHBvcHVwLnNob3cgPSBmdW5jdGlvbihwb3MsIGxpbmVIZWlnaHQsIHRvcGRvd25Pbmx5KSB7CiAgICAgICAgdmFyIGVsID0gdGhpcy5jb250YWluZXI7CiAgICAgICAgdmFyIHNjcmVlbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICB2YXIgc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgICAgICB2YXIgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyOwogICAgICAgIHZhciBtYXhIID0gcmVuZGVyZXIuJG1heExpbmVzICogbGluZUhlaWdodCAqIDEuNDsKICAgICAgICB2YXIgdG9wID0gcG9zLnRvcCArIHRoaXMuJGJvcmRlclNpemU7CiAgICAgICAgdmFyIGFsbG93VG9wZG93biA9IHRvcCA+IHNjcmVlbkhlaWdodCAvIDIgJiYgIXRvcGRvd25Pbmx5OwogICAgICAgIGlmIChhbGxvd1RvcGRvd24gJiYgdG9wICsgbGluZUhlaWdodCArIG1heEggPiBzY3JlZW5IZWlnaHQpIHsKICAgICAgICAgICAgcmVuZGVyZXIuJG1heFBpeGVsSGVpZ2h0ID0gdG9wIC0gMiAqIHRoaXMuJGJvcmRlclNpemU7CiAgICAgICAgICAgIGVsLnN0eWxlLnRvcCA9ICIiOwogICAgICAgICAgICBlbC5zdHlsZS5ib3R0b20gPSBzY3JlZW5IZWlnaHQgLSB0b3AgKyAicHgiOwogICAgICAgICAgICBwb3B1cC5pc1RvcGRvd24gPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b3AgKz0gbGluZUhlaWdodDsKICAgICAgICAgICAgcmVuZGVyZXIuJG1heFBpeGVsSGVpZ2h0ID0gc2NyZWVuSGVpZ2h0IC0gdG9wIC0gMC4yICogbGluZUhlaWdodDsKICAgICAgICAgICAgZWwuc3R5bGUudG9wID0gdG9wICsgInB4IjsKICAgICAgICAgICAgZWwuc3R5bGUuYm90dG9tID0gIiI7CiAgICAgICAgICAgIHBvcHVwLmlzVG9wZG93biA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gIiI7CgogICAgICAgIHZhciBsZWZ0ID0gcG9zLmxlZnQ7CiAgICAgICAgaWYgKGxlZnQgKyBlbC5vZmZzZXRXaWR0aCA+IHNjcmVlbldpZHRoKQogICAgICAgICAgICBsZWZ0ID0gc2NyZWVuV2lkdGggLSBlbC5vZmZzZXRXaWR0aDsKCiAgICAgICAgZWwuc3R5bGUubGVmdCA9IGxlZnQgKyAicHgiOwoKICAgICAgICB0aGlzLl9zaWduYWwoInNob3ciKTsKICAgICAgICBsYXN0TW91c2VFdmVudCA9IG51bGw7CiAgICAgICAgcG9wdXAuaXNPcGVuID0gdHJ1ZTsKICAgIH07CgogICAgcG9wdXAuZ29UbyA9IGZ1bmN0aW9uKHdoZXJlKSB7CiAgICAgICAgdmFyIHJvdyA9IHRoaXMuZ2V0Um93KCk7CiAgICAgICAgdmFyIG1heCA9IHRoaXMuc2Vzc2lvbi5nZXRMZW5ndGgoKSAtIDE7CgogICAgICAgIHN3aXRjaCh3aGVyZSkgewogICAgICAgICAgICBjYXNlICJ1cCI6IHJvdyA9IHJvdyA8PSAwID8gbWF4IDogcm93IC0gMTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRvd24iOiByb3cgPSByb3cgPj0gbWF4ID8gLTEgOiByb3cgKyAxOyBicmVhazsKICAgICAgICAgICAgY2FzZSAic3RhcnQiOiByb3cgPSAwOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiZW5kIjogcm93ID0gbWF4OyBicmVhazsKICAgICAgICB9CgogICAgICAgIHRoaXMuc2V0Um93KHJvdyk7CiAgICB9OwoKCiAgICBwb3B1cC5nZXRUZXh0TGVmdE9mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRib3JkZXJTaXplICsgdGhpcy5yZW5kZXJlci4kcGFkZGluZyArIHRoaXMuJGltYWdlU2l6ZTsKICAgIH07CgogICAgcG9wdXAuJGltYWdlU2l6ZSA9IDA7CiAgICBwb3B1cC4kYm9yZGVyU2l6ZSA9IDE7CgogICAgcmV0dXJuIHBvcHVwOwp9OwoKZG9tLmltcG9ydENzc1N0cmluZygiXAouYWNlX2VkaXRvci5hY2VfYXV0b2NvbXBsZXRlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKICAgIGJhY2tncm91bmQtY29sb3I6ICNDQUQ2RkE7XAogICAgei1pbmRleDogMTtcCn1cCi5hY2VfZGFyay5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XAogICAgYmFja2dyb3VuZC1jb2xvcjogIzNhNjc0ZTtcCn1cCi5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUgLmFjZV9saW5lLWhvdmVyIHtcCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWJiZmZlO1wKICAgIG1hcmdpbi10b3A6IC0xcHg7XAogICAgYmFja2dyb3VuZDogcmdiYSgyMzMsMjMzLDI1MywwLjQpO1wKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcCiAgICB6LWluZGV4OiAyO1wKfVwKLmFjZV9kYXJrLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2xpbmUtaG92ZXIge1wKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTA5LCAxNTAsIDEzLCAwLjgpO1wKICAgIGJhY2tncm91bmQ6IHJnYmEoNTgsIDEwMywgNzgsIDAuNjIpO1wKfVwKLmFjZV9jb21wbGV0aW9uLW1ldGEge1wKICAgIG9wYWNpdHk6IDAuNTtcCiAgICBtYXJnaW46IDAuOWVtO1wKfVwKLmFjZV9jb21wbGV0aW9uLW1lc3NhZ2Uge1wKICAgIGNvbG9yOiBibHVlO1wKfVwKLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2NvbXBsZXRpb24taGlnaGxpZ2h0e1wKICAgIGNvbG9yOiAjMmQ2OWM3O1wKfVwKLmFjZV9kYXJrLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSAuYWNlX2NvbXBsZXRpb24taGlnaGxpZ2h0e1wKICAgIGNvbG9yOiAjOTNjYTEyO1wKfVwKLmFjZV9lZGl0b3IuYWNlX2F1dG9jb21wbGV0ZSB7XAogICAgd2lkdGg6IDMwMHB4O1wKICAgIHotaW5kZXg6IDIwMDAwMDtcCiAgICBib3JkZXI6IDFweCBsaWdodGdyYXkgc29saWQ7XAogICAgcG9zaXRpb246IGZpeGVkO1wKICAgIGJveC1zaGFkb3c6IDJweCAzcHggNXB4IHJnYmEoMCwwLDAsLjIpO1wKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XAogICAgYmFja2dyb3VuZDogI2ZlZmVmZTtcCiAgICBjb2xvcjogIzExMTtcCn1cCi5hY2VfZGFyay5hY2VfZWRpdG9yLmFjZV9hdXRvY29tcGxldGUge1wKICAgIGJvcmRlcjogMXB4ICM0ODQ3NDcgc29saWQ7XAogICAgYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUxKTtcCiAgICBsaW5lLWhlaWdodDogMS40O1wKICAgIGJhY2tncm91bmQ6ICMyNTI4MmM7XAogICAgY29sb3I6ICNjMWMxYzE7XAp9IiwgImF1dG9jb21wbGV0aW9uLmNzcyIpOwoKZXhwb3J0cy5BY2VQb3B1cCA9IEFjZVBvcHVwOwpleHBvcnRzLiRzaW5nbGVMaW5lRWRpdG9yID0gJHNpbmdsZUxpbmVFZGl0b3I7Cn0pOwoKZGVmaW5lKCJhY2UvYXV0b2NvbXBsZXRlL3V0aWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMucGFyRm9yRWFjaCA9IGZ1bmN0aW9uKGFycmF5LCBmbiwgY2FsbGJhY2spIHsKICAgIHZhciBjb21wbGV0ZWQgPSAwOwogICAgdmFyIGFyTGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgaWYgKGFyTGVuZ3RoID09PSAwKQogICAgICAgIGNhbGxiYWNrKCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyTGVuZ3RoOyBpKyspIHsKICAgICAgICBmbihhcnJheVtpXSwgZnVuY3Rpb24ocmVzdWx0LCBlcnIpIHsKICAgICAgICAgICAgY29tcGxldGVkKys7CiAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IGFyTGVuZ3RoKQogICAgICAgICAgICAgICAgY2FsbGJhY2socmVzdWx0LCBlcnIpOwogICAgICAgIH0pOwogICAgfQp9OwoKdmFyIElEX1JFR0VYID0gL1thLXpBLVpfMC05XCRcLVx1MDBBMi1cdUZGRkZdLzsKCmV4cG9ydHMucmV0cmlldmVQcmVjZWRpbmdJZGVudGlmaWVyID0gZnVuY3Rpb24odGV4dCwgcG9zLCByZWdleCkgewogICAgcmVnZXggPSByZWdleCB8fCBJRF9SRUdFWDsKICAgIHZhciBidWYgPSBbXTsKICAgIGZvciAodmFyIGkgPSBwb3MtMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBpZiAocmVnZXgudGVzdCh0ZXh0W2ldKSkKICAgICAgICAgICAgYnVmLnB1c2godGV4dFtpXSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBidWYucmV2ZXJzZSgpLmpvaW4oIiIpOwp9OwoKZXhwb3J0cy5yZXRyaWV2ZUZvbGxvd2luZ0lkZW50aWZpZXIgPSBmdW5jdGlvbih0ZXh0LCBwb3MsIHJlZ2V4KSB7CiAgICByZWdleCA9IHJlZ2V4IHx8IElEX1JFR0VYOwogICAgdmFyIGJ1ZiA9IFtdOwogICAgZm9yICh2YXIgaSA9IHBvczsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAocmVnZXgudGVzdCh0ZXh0W2ldKSkKICAgICAgICAgICAgYnVmLnB1c2godGV4dFtpXSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBidWY7Cn07CgpleHBvcnRzLmdldENvbXBsZXRpb25QcmVmaXggPSBmdW5jdGlvbiAoZWRpdG9yKSB7CiAgICB2YXIgcG9zID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICB2YXIgbGluZSA9IGVkaXRvci5zZXNzaW9uLmdldExpbmUocG9zLnJvdyk7CiAgICB2YXIgcHJlZml4OwogICAgZWRpdG9yLmNvbXBsZXRlcnMuZm9yRWFjaChmdW5jdGlvbihjb21wbGV0ZXIpIHsKICAgICAgICBpZiAoY29tcGxldGVyLmlkZW50aWZpZXJSZWdleHBzKSB7CiAgICAgICAgICAgIGNvbXBsZXRlci5pZGVudGlmaWVyUmVnZXhwcy5mb3JFYWNoKGZ1bmN0aW9uKGlkZW50aWZpZXJSZWdleCkgewogICAgICAgICAgICAgICAgaWYgKCFwcmVmaXggJiYgaWRlbnRpZmllclJlZ2V4KQogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHRoaXMucmV0cmlldmVQcmVjZWRpbmdJZGVudGlmaWVyKGxpbmUsIHBvcy5jb2x1bW4sIGlkZW50aWZpZXJSZWdleCk7CiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICAgICAgfQogICAgfS5iaW5kKHRoaXMpKTsKICAgIHJldHVybiBwcmVmaXggfHwgdGhpcy5yZXRyaWV2ZVByZWNlZGluZ0lkZW50aWZpZXIobGluZSwgcG9zLmNvbHVtbik7Cn07Cgp9KTsKCmRlZmluZSgiYWNlL3NuaXBwZXRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2V2ZW50X2VtaXR0ZXIiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvcmFuZ2VfbGlzdCIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLCJhY2UvdG9rZW5pemVyIiwiYWNlL2NsaXBib2FyZCIsImFjZS9saWIvZG9tIiwiYWNlL2VkaXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4vbGliL2xhbmciKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi9yYW5nZSIpLlJhbmdlOwp2YXIgUmFuZ2VMaXN0ID0gcmVxdWlyZSgiLi9yYW5nZV9saXN0IikuUmFuZ2VMaXN0Owp2YXIgSGFzaEhhbmRsZXIgPSByZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwp2YXIgVG9rZW5pemVyID0gcmVxdWlyZSgiLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7CnZhciBjbGlwYm9hcmQgPSByZXF1aXJlKCIuL2NsaXBib2FyZCIpOwoKdmFyIFZBUklBQkxFUyA9IHsKICAgIENVUlJFTlRfV09SRDogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zZXNzaW9uLmdldFRleHRSYW5nZShlZGl0b3Iuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UoKSk7CiAgICB9LAogICAgU0VMRUNUSU9OOiBmdW5jdGlvbihlZGl0b3IsIG5hbWUsIGluZGVudGF0aW9uKSB7CiAgICAgICAgdmFyIHRleHQgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoKTsKICAgICAgICBpZiAoaW5kZW50YXRpb24pCiAgICAgICAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xuXHI/KFsgXHRdKlxTKS9nLCAiXG4iICsgaW5kZW50YXRpb24gKyAiJDEiKTsKICAgICAgICByZXR1cm4gdGV4dDsKICAgIH0sCiAgICBDVVJSRU5UX0xJTkU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpLnJvdyk7CiAgICB9LAogICAgUFJFVl9MSU5FOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLnNlc3Npb24uZ2V0TGluZShlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKS5yb3cgLSAxKTsKICAgIH0sCiAgICBMSU5FX0lOREVYOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCkucm93OwogICAgfSwKICAgIExJTkVfTlVNQkVSOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCkucm93ICsgMTsKICAgIH0sCiAgICBTT0ZUX1RBQlM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5nZXRVc2VTb2Z0VGFicygpID8gIllFUyIgOiAiTk8iOwogICAgfSwKICAgIFRBQl9TSVpFOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLnNlc3Npb24uZ2V0VGFiU2l6ZSgpOwogICAgfSwKICAgIENMSVBCT0FSRDogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgcmV0dXJuIGNsaXBib2FyZC5nZXRUZXh0ICYmIGNsaXBib2FyZC5nZXRUZXh0KCk7CiAgICB9LAogICAgRklMRU5BTUU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHJldHVybiAvW14vXFxdKiQvLmV4ZWModGhpcy5GSUxFUEFUSChlZGl0b3IpKVswXTsKICAgIH0sCiAgICBGSUxFTkFNRV9CQVNFOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gL1teL1xcXSokLy5leGVjKHRoaXMuRklMRVBBVEgoZWRpdG9yKSlbMF0ucmVwbGFjZSgvXC5bXi5dKiQvLCAiIik7CiAgICB9LAogICAgRElSRUNUT1JZOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICByZXR1cm4gdGhpcy5GSUxFUEFUSChlZGl0b3IpLnJlcGxhY2UoL1teL1xcXSokLywgIiIpOwogICAgfSwKICAgIEZJTEVQQVRIOiBmdW5jdGlvbihlZGl0b3IpIHsgcmV0dXJuICIvbm90IGltcGxlbWVudGVkLnR4dCI7IH0sCiAgICBXT1JLU1BBQ0VfTkFNRTogZnVuY3Rpb24oKSB7IHJldHVybiAiVW5rbm93biI7IH0sCiAgICBGVUxMTkFNRTogZnVuY3Rpb24oKSB7IHJldHVybiAiVW5rbm93biI7IH0sCiAgICBCTE9DS19DT01NRU5UX1NUQVJUOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgbW9kZSA9IGVkaXRvci5zZXNzaW9uLiRtb2RlIHx8IHt9OwogICAgICAgIHJldHVybiBtb2RlLmJsb2NrQ29tbWVudCAmJiBtb2RlLmJsb2NrQ29tbWVudC5zdGFydCB8fCAiIjsKICAgIH0sCiAgICBCTE9DS19DT01NRU5UX0VORDogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIG1vZGUgPSBlZGl0b3Iuc2Vzc2lvbi4kbW9kZSB8fCB7fTsKICAgICAgICByZXR1cm4gbW9kZS5ibG9ja0NvbW1lbnQgJiYgbW9kZS5ibG9ja0NvbW1lbnQuZW5kIHx8ICIiOwogICAgfSwKICAgIExJTkVfQ09NTUVOVDogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIG1vZGUgPSBlZGl0b3Iuc2Vzc2lvbi4kbW9kZSB8fCB7fTsKICAgICAgICByZXR1cm4gbW9kZS5saW5lQ29tbWVudFN0YXJ0IHx8ICIiOwogICAgfSwKICAgIENVUlJFTlRfWUVBUjogZGF0ZS5iaW5kKG51bGwsIHt5ZWFyOiAibnVtZXJpYyJ9KSwKICAgIENVUlJFTlRfWUVBUl9TSE9SVDogZGF0ZS5iaW5kKG51bGwsIHt5ZWFyOiAiMi1kaWdpdCJ9KSwKICAgIENVUlJFTlRfTU9OVEg6IGRhdGUuYmluZChudWxsLCB7bW9udGg6ICJudW1lcmljIn0pLAogICAgQ1VSUkVOVF9NT05USF9OQU1FOiBkYXRlLmJpbmQobnVsbCwge21vbnRoOiAibG9uZyJ9KSwKICAgIENVUlJFTlRfTU9OVEhfTkFNRV9TSE9SVDogZGF0ZS5iaW5kKG51bGwsIHttb250aDogInNob3J0In0pLAogICAgQ1VSUkVOVF9EQVRFOiBkYXRlLmJpbmQobnVsbCwge2RheTogIjItZGlnaXQifSksCiAgICBDVVJSRU5UX0RBWV9OQU1FOiBkYXRlLmJpbmQobnVsbCwge3dlZWtkYXk6ICJsb25nIn0pLAogICAgQ1VSUkVOVF9EQVlfTkFNRV9TSE9SVDogZGF0ZS5iaW5kKG51bGwsIHt3ZWVrZGF5OiAic2hvcnQifSksCiAgICBDVVJSRU5UX0hPVVI6IGRhdGUuYmluZChudWxsLCB7aG91cjogIjItZGlnaXQiLCBob3VyMTI6IGZhbHNlfSksCiAgICBDVVJSRU5UX01JTlVURTogZGF0ZS5iaW5kKG51bGwsIHttaW51dGU6ICIyLWRpZ2l0In0pLAogICAgQ1VSUkVOVF9TRUNPTkQ6IGRhdGUuYmluZChudWxsLCB7c2Vjb25kOiAiMi1kaWdpdCJ9KQp9OwoKVkFSSUFCTEVTLlNFTEVDVEVEX1RFWFQgPSBWQVJJQUJMRVMuU0VMRUNUSU9OOwoKZnVuY3Rpb24gZGF0ZShkYXRlRm9ybWF0KSB7CiAgICB2YXIgc3RyID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygiZW4tdXMiLCBkYXRlRm9ybWF0KTsKICAgIHJldHVybiBzdHIubGVuZ3RoID09IDEgPyAiMCIgKyBzdHIgOiBzdHI7Cn0KCnZhciBTbmlwcGV0TWFuYWdlciA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5zbmlwcGV0TWFwID0ge307CiAgICB0aGlzLnNuaXBwZXROYW1lTWFwID0ge307Cn07CgooZnVuY3Rpb24oKSB7CiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAKICAgIHRoaXMuZ2V0VG9rZW5pemVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIFNuaXBwZXRNYW5hZ2VyLiR0b2tlbml6ZXIgfHwgdGhpcy5jcmVhdGVUb2tlbml6ZXIoKTsKICAgIH07CiAgICAKICAgIHRoaXMuY3JlYXRlVG9rZW5pemVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gVGFic3RvcFRva2VuKHN0cikgewogICAgICAgICAgICBzdHIgPSBzdHIuc3Vic3RyKDEpOwogICAgICAgICAgICBpZiAoL15cZCskLy50ZXN0KHN0cikpCiAgICAgICAgICAgICAgICByZXR1cm4gW3t0YWJzdG9wSWQ6IHBhcnNlSW50KHN0ciwgMTApfV07CiAgICAgICAgICAgIHJldHVybiBbe3RleHQ6IHN0cn1dOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBlc2NhcGUoY2gpIHsKICAgICAgICAgICAgcmV0dXJuICIoPzpbXlxcXFwiICsgY2ggKyAiXXxcXFxcLikiOwogICAgICAgIH0KICAgICAgICB2YXIgZm9ybWF0TWF0Y2hlciA9IHsKICAgICAgICAgICAgcmVnZXg6ICIvKCIgKyBlc2NhcGUoIi8iKSArICIrKS8iLCAKICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHZhciB0cyA9IHN0YWNrWzBdOwogICAgICAgICAgICAgICAgdHMuZm10U3RyaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHRzLmd1YXJkID0gdmFsLnNsaWNlKDEsIC0xKTsKICAgICAgICAgICAgICAgIHRzLmZsYWcgPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbmV4dDogImZvcm1hdFN0cmluZyIKICAgICAgICB9OwogICAgICAgIAogICAgICAgIFNuaXBwZXRNYW5hZ2VyLiR0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKHsKICAgICAgICAgICAgc3RhcnQ6IFsKICAgICAgICAgICAgICAgIHtyZWdleDogL1xcLi8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdmFsWzFdOwogICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGNoOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImAkXFwiLmluZGV4T2YoY2gpICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGNoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3ZhbF07CiAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgICAgIHtyZWdleDogL30vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbc3RhY2subGVuZ3RoID8gc3RhY2suc2hpZnQoKSA6IHZhbF07CiAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgICAgIHtyZWdleDogL1wkKD86XGQrfFx3KykvLCBvbk1hdGNoOiBUYWJzdG9wVG9rZW59LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXCRce1tcZEEtWl9hLXpdKy8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHN0ciwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBUYWJzdG9wVG9rZW4oc3RyLnN1YnN0cigxKSk7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0WzBdKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgICAgIH0sIG5leHQ6ICJzbmlwcGV0VmFyIn0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cbi8sIHRva2VuOiAibmV3bGluZSIsIG1lcmdlOiBmYWxzZX0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgc25pcHBldFZhcjogWwogICAgICAgICAgICAgICAge3JlZ2V4OiAiXFx8IiArIGVzY2FwZSgiXFx8IikgKyAiKlxcfCIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNob2ljZXMgPSB2YWwuc2xpY2UoMSwgLTEpLnJlcGxhY2UoL1xcWyx8XFxdfCwvZywgZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yLmxlbmd0aCA9PSAyID8gb3BlcmF0b3JbMV0gOiAiXHgwMCI7CiAgICAgICAgICAgICAgICAgICAgfSkuc3BsaXQoIlx4MDAiKTsKICAgICAgICAgICAgICAgICAgICBzdGFja1swXS5jaG9pY2VzID0gY2hvaWNlczsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2Nob2ljZXNbMF1dOwogICAgICAgICAgICAgICAgfSwgbmV4dDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICBmb3JtYXRNYXRjaGVyLAogICAgICAgICAgICAgICAge3JlZ2V4OiAiKFteOn1cXFxcXXxcXFxcLikqOj8iLCB0b2tlbjogIiIsIG5leHQ6ICJzdGFydCJ9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGZvcm1hdFN0cmluZzogWwogICAgICAgICAgICAgICAge3JlZ2V4OiAvOi8sIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAmJiBzdGFja1swXS5leHBlY3RFbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdLmV4cGVjdEVsc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbMF0uaWZFbmQgPSB7ZWxzZUVuZDogc3RhY2tbMF19OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3N0YWNrWzBdLmlmRW5kXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICI6IjsKICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXFwuLywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB2YWxbMV07CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJ9IiAmJiBzdGFjay5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGNoOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJgJFxcIi5pbmRleE9mKGNoKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2g7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gIm4iKQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSAiXG4iOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICJ0IikKICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gIlx0IjsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgidWxVTEUiLmluZGV4T2YoY2gpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB7Y2hhbmdlQ2FzZTogY2gsIGxvY2FsOiBjaCA+ICJhIn07CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt2YWxdOwogICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB7cmVnZXg6ICIvXFx3Kn0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5mbGFnID0gdmFsLnNsaWNlKDEsIC0xKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBuZXh0ICYmIG5leHQudGFic3RvcElkID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbbmV4dCB8fCB2YWxdOwogICAgICAgICAgICAgICAgfSwgbmV4dDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICB7cmVnZXg6IC9cJCg/OlxkK3xcdyspLywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3t0ZXh0OiB2YWwuc2xpY2UoMSl9XTsKICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAge3JlZ2V4OiAvXCR7XHcrLywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB7dGV4dDogdmFsLnNsaWNlKDIpfTsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRva2VuKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3Rva2VuXTsKICAgICAgICAgICAgICAgIH0sIG5leHQ6ICJmb3JtYXRTdHJpbmdWYXIifSwKICAgICAgICAgICAgICAgIHtyZWdleDogL1xuLywgdG9rZW46ICJuZXdsaW5lIiwgbWVyZ2U6IGZhbHNlfSwKICAgICAgICAgICAgICAgIHtyZWdleDogL30vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBuZXh0ICYmIG5leHQudGFic3RvcElkID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbbmV4dCB8fCB2YWxdOwogICAgICAgICAgICAgICAgfSwgbmV4dDogInN0YXJ0In0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgZm9ybWF0U3RyaW5nVmFyOiBbCiAgICAgICAgICAgICAgICB7cmVnZXg6IC86XC9cdyt9Lywgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgdHMgPSBzdGFja1swXTsKICAgICAgICAgICAgICAgICAgICB0cy5mb3JtYXRGdW5jdGlvbiA9IHZhbC5zbGljZSgyLCAtMSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzdGFjay5zaGlmdCgpXTsKICAgICAgICAgICAgICAgIH0sIG5leHQ6ICJmb3JtYXRTdHJpbmcifSwKICAgICAgICAgICAgICAgIGZvcm1hdE1hdGNoZXIsCiAgICAgICAgICAgICAgICB7cmVnZXg6IC86W1w/XC0rXT8vLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIGlmICh2YWxbMV0gPT0gIisiKQogICAgICAgICAgICAgICAgICAgICAgICBzdGFja1swXS5pZkVuZCA9IHN0YWNrWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh2YWxbMV0gPT0gIj8iKQogICAgICAgICAgICAgICAgICAgICAgICBzdGFja1swXS5leHBlY3RFbHNlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0sIG5leHQ6ICJmb3JtYXRTdHJpbmcifSwKICAgICAgICAgICAgICAgIHtyZWdleDogIihbXjp9XFxcXF18XFxcXC4pKjo/IiwgdG9rZW46ICIiLCBuZXh0OiAiZm9ybWF0U3RyaW5nIn0KICAgICAgICAgICAgXQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBTbmlwcGV0TWFuYWdlci4kdG9rZW5pemVyOwogICAgfTsKCiAgICB0aGlzLnRva2VuaXplVG1TbmlwcGV0ID0gZnVuY3Rpb24oc3RyLCBzdGFydFN0YXRlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhzdHIsIHN0YXJ0U3RhdGUpLnRva2Vucy5tYXAoZnVuY3Rpb24oeCkgewogICAgICAgICAgICByZXR1cm4geC52YWx1ZSB8fCB4OwogICAgICAgIH0pOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRWYXJpYWJsZVZhbHVlID0gZnVuY3Rpb24oZWRpdG9yLCBuYW1lLCBpbmRlbnRhdGlvbikgewogICAgICAgIGlmICgvXlxkKyQvLnRlc3QobmFtZSkpCiAgICAgICAgICAgIHJldHVybiAodGhpcy52YXJpYWJsZXMuX18gfHwge30pW25hbWVdIHx8ICIiOwogICAgICAgIGlmICgvXltBLVpdXGQrJC8udGVzdChuYW1lKSkKICAgICAgICAgICAgcmV0dXJuICh0aGlzLnZhcmlhYmxlc1tuYW1lWzBdICsgIl9fIl0gfHwge30pW25hbWUuc3Vic3RyKDEpXSB8fCAiIjsKICAgICAgICAKICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9eVE1fLywgIiIpOwogICAgICAgIGlmICghdGhpcy52YXJpYWJsZXMuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tuYW1lXTsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICJmdW5jdGlvbiIpCiAgICAgICAgICAgIHZhbHVlID0gdGhpcy52YXJpYWJsZXNbbmFtZV0oZWRpdG9yLCBuYW1lLCBpbmRlbnRhdGlvbik7CiAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlOwogICAgfTsKICAgIAogICAgdGhpcy52YXJpYWJsZXMgPSBWQVJJQUJMRVM7CiAgICB0aGlzLnRtU3RyRm9ybWF0ID0gZnVuY3Rpb24oc3RyLCBjaCwgZWRpdG9yKSB7CiAgICAgICAgaWYgKCFjaC5mbXQpIHJldHVybiBzdHI7CiAgICAgICAgdmFyIGZsYWcgPSBjaC5mbGFnIHx8ICIiOwogICAgICAgIHZhciByZSA9IGNoLmd1YXJkOwogICAgICAgIHJlID0gbmV3IFJlZ0V4cChyZSwgZmxhZy5yZXBsYWNlKC9bXmdpbV0vZywgIiIpKTsKICAgICAgICB2YXIgZm10VG9rZW5zID0gdHlwZW9mIGNoLmZtdCA9PSAic3RyaW5nIiA/IHRoaXMudG9rZW5pemVUbVNuaXBwZXQoY2guZm10LCAiZm9ybWF0U3RyaW5nIikgOiBjaC5mbXQ7CiAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKICAgICAgICB2YXIgZm9ybWF0dGVkID0gc3RyLnJlcGxhY2UocmUsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgb2xkQXJncyA9IF9zZWxmLnZhcmlhYmxlcy5fXzsKICAgICAgICAgICAgX3NlbGYudmFyaWFibGVzLl9fID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICAgICAgICB2YXIgZm10UGFydHMgPSBfc2VsZi5yZXNvbHZlVmFyaWFibGVzKGZtdFRva2VucywgZWRpdG9yKTsKICAgICAgICAgICAgdmFyIGdDaGFuZ2VDYXNlID0gIkUiOwogICAgICAgICAgICBmb3IgKHZhciBpICA9IDA7IGkgPCBmbXRQYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGNoID0gZm10UGFydHNbaV07CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNoID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgZm10UGFydHNbaV0gPSAiIjsKICAgICAgICAgICAgICAgICAgICBpZiAoY2guY2hhbmdlQ2FzZSAmJiBjaC5sb2NhbCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZtdFBhcnRzW2kgKyAxXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgdHlwZW9mIG5leHQgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaC5jaGFuZ2VDYXNlID09ICJ1IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRQYXJ0c1tpXSA9IG5leHRbMF0udG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRQYXJ0c1tpXSA9IG5leHRbMF0udG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdFBhcnRzW2kgKyAxXSA9IG5leHQuc3Vic3RyKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaC5jaGFuZ2VDYXNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdDaGFuZ2VDYXNlID0gY2guY2hhbmdlQ2FzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGdDaGFuZ2VDYXNlID09ICJVIikgewogICAgICAgICAgICAgICAgICAgIGZtdFBhcnRzW2ldID0gY2gudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ0NoYW5nZUNhc2UgPT0gIkwiKSB7CiAgICAgICAgICAgICAgICAgICAgZm10UGFydHNbaV0gPSBjaC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zZWxmLnZhcmlhYmxlcy5fXyA9IG9sZEFyZ3M7CiAgICAgICAgICAgIHJldHVybiBmbXRQYXJ0cy5qb2luKCIiKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZm9ybWF0dGVkOwogICAgfTsKICAgIAogICAgdGhpcy50bUZvcm1hdEZ1bmN0aW9uID0gZnVuY3Rpb24oc3RyLCBjaCwgZWRpdG9yKSB7CiAgICAgICAgaWYgKGNoLmZvcm1hdEZ1bmN0aW9uID09ICJ1cGNhc2UiKQogICAgICAgICAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgaWYgKGNoLmZvcm1hdEZ1bmN0aW9uID09ICJkb3duY2FzZSIpCiAgICAgICAgICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTsKICAgICAgICByZXR1cm4gc3RyOwogICAgfTsKCiAgICB0aGlzLnJlc29sdmVWYXJpYWJsZXMgPSBmdW5jdGlvbihzbmlwcGV0LCBlZGl0b3IpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgICAgdmFyIGluZGVudGF0aW9uID0gIiI7CiAgICAgICAgdmFyIGFmdGVyTmV3TGluZSA9IHRydWU7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbmlwcGV0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHNuaXBwZXRbaV07CiAgICAgICAgICAgIGlmICh0eXBlb2YgY2ggPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoKTsKICAgICAgICAgICAgICAgIGlmIChjaCA9PSAiXG4iKSB7CiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbiA9ICIiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAoYWZ0ZXJOZXdMaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50YXRpb24gPSAvXlx0Ki8uZXhlYyhjaClbMF07CiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJOZXdMaW5lID0gL1xTLy50ZXN0KGNoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghY2gpICBjb250aW51ZTsKICAgICAgICAgICAgYWZ0ZXJOZXdMaW5lID0gZmFsc2U7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoY2guZm10U3RyaW5nKSB7CiAgICAgICAgICAgICAgICB2YXIgaiA9IHNuaXBwZXQuaW5kZXhPZihjaCwgaSArIDEpOwogICAgICAgICAgICAgICAgaWYgKGogPT0gLTEpIGogPSBzbmlwcGV0Lmxlbmd0aDsKICAgICAgICAgICAgICAgIGNoLmZtdCA9IHNuaXBwZXQuc2xpY2UoaSArIDEsIGopOwogICAgICAgICAgICAgICAgaSA9IGo7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjaC50ZXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhcmlhYmxlVmFsdWUoZWRpdG9yLCBjaC50ZXh0LCBpbmRlbnRhdGlvbikgKyAiIjsKICAgICAgICAgICAgICAgIGlmIChjaC5mbXRTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnRtU3RyRm9ybWF0KHZhbHVlLCBjaCwgZWRpdG9yKTsKICAgICAgICAgICAgICAgIGlmIChjaC5mb3JtYXRGdW5jdGlvbikKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG1Gb3JtYXRGdW5jdGlvbih2YWx1ZSwgY2gsIGVkaXRvcik7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhY2guaWZFbmQpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgZ290b05leHQoY2gpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdmFsdWUgJiYgY2guaWZFbmQpIHsKICAgICAgICAgICAgICAgICAgICBnb3RvTmV4dChjaC5pZkVuZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2guZWxzZUVuZCkgewogICAgICAgICAgICAgICAgZ290b05leHQoY2guZWxzZUVuZCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2gudGFic3RvcElkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChjaC5jaGFuZ2VDYXNlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBnb3RvTmV4dChjaCkgewogICAgICAgICAgICB2YXIgaTEgPSBzbmlwcGV0LmluZGV4T2YoY2gsIGkgKyAxKTsKICAgICAgICAgICAgaWYgKGkxICE9IC0xKQogICAgICAgICAgICAgICAgaSA9IGkxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKCiAgICB0aGlzLmluc2VydFNuaXBwZXRGb3JTZWxlY3Rpb24gPSBmdW5jdGlvbihlZGl0b3IsIHNuaXBwZXRUZXh0KSB7CiAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgIHZhciBsaW5lID0gZWRpdG9yLnNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICB2YXIgdGFiU3RyaW5nID0gZWRpdG9yLnNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CiAgICAgICAgdmFyIGluZGVudFN0cmluZyA9IGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgICAgICAKICAgICAgICBpZiAoY3Vyc29yLmNvbHVtbiA8IGluZGVudFN0cmluZy5sZW5ndGgpCiAgICAgICAgICAgIGluZGVudFN0cmluZyA9IGluZGVudFN0cmluZy5zbGljZSgwLCBjdXJzb3IuY29sdW1uKTsKCiAgICAgICAgc25pcHBldFRleHQgPSBzbmlwcGV0VGV4dC5yZXBsYWNlKC9cci9nLCAiIik7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMudG9rZW5pemVUbVNuaXBwZXQoc25pcHBldFRleHQpOwogICAgICAgIHRva2VucyA9IHRoaXMucmVzb2x2ZVZhcmlhYmxlcyh0b2tlbnMsIGVkaXRvcik7CiAgICAgICAgdG9rZW5zID0gdG9rZW5zLm1hcChmdW5jdGlvbih4KSB7CiAgICAgICAgICAgIGlmICh4ID09ICJcbiIpCiAgICAgICAgICAgICAgICByZXR1cm4geCArIGluZGVudFN0cmluZzsKICAgICAgICAgICAgaWYgKHR5cGVvZiB4ID09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgcmV0dXJuIHgucmVwbGFjZSgvXHQvZywgdGFiU3RyaW5nKTsKICAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHRhYnN0b3BzID0gW107CiAgICAgICAgdG9rZW5zLmZvckVhY2goZnVuY3Rpb24ocCwgaSkgewogICAgICAgICAgICBpZiAodHlwZW9mIHAgIT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBpZCA9IHAudGFic3RvcElkOwogICAgICAgICAgICB2YXIgdHMgPSB0YWJzdG9wc1tpZF07CiAgICAgICAgICAgIGlmICghdHMpIHsKICAgICAgICAgICAgICAgIHRzID0gdGFic3RvcHNbaWRdID0gW107CiAgICAgICAgICAgICAgICB0cy5pbmRleCA9IGlkOwogICAgICAgICAgICAgICAgdHMudmFsdWUgPSAiIjsKICAgICAgICAgICAgICAgIHRzLnBhcmVudHMgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHMuaW5kZXhPZihwKSAhPT0gLTEpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChwLmNob2ljZXMgJiYgIXRzLmNob2ljZXMpCiAgICAgICAgICAgICAgICB0cy5jaG9pY2VzID0gcC5jaG9pY2VzOwogICAgICAgICAgICB0cy5wdXNoKHApOwogICAgICAgICAgICB2YXIgaTEgPSB0b2tlbnMuaW5kZXhPZihwLCBpICsgMSk7CiAgICAgICAgICAgIGlmIChpMSA9PT0gLTEpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB2YXIgdmFsdWUgPSB0b2tlbnMuc2xpY2UoaSArIDEsIGkxKTsKICAgICAgICAgICAgdmFyIGlzTmVzdGVkID0gdmFsdWUuc29tZShmdW5jdGlvbih0KSB7cmV0dXJuIHR5cGVvZiB0ID09PSAib2JqZWN0Ijt9KTsKICAgICAgICAgICAgaWYgKGlzTmVzdGVkICYmICF0cy52YWx1ZSkgewogICAgICAgICAgICAgICAgdHMudmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggJiYgKCF0cy52YWx1ZSB8fCB0eXBlb2YgdHMudmFsdWUgIT09ICJzdHJpbmciKSkgewogICAgICAgICAgICAgICAgdHMudmFsdWUgPSB2YWx1ZS5qb2luKCIiKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRhYnN0b3BzLmZvckVhY2goZnVuY3Rpb24odHMpIHt0cy5sZW5ndGggPSAwO30pOwogICAgICAgIHZhciBleHBhbmRpbmcgPSB7fTsKICAgICAgICBmdW5jdGlvbiBjb3B5VmFsdWUodmFsKSB7CiAgICAgICAgICAgIHZhciBjb3B5ID0gW107CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgcCA9IHZhbFtpXTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcCA9PSAib2JqZWN0IikgewogICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmRpbmdbcC50YWJzdG9wSWRdKQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IHZhbC5sYXN0SW5kZXhPZihwLCBpIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgcCA9IGNvcHlbal0gfHwge3RhYnN0b3BJZDogcC50YWJzdG9wSWR9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29weVtpXSA9IHA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGNvcHk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBwID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAodHlwZW9mIHAgIT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGlkID0gcC50YWJzdG9wSWQ7CiAgICAgICAgICAgIHZhciB0cyA9IHRhYnN0b3BzW2lkXTsKICAgICAgICAgICAgdmFyIGkxID0gdG9rZW5zLmluZGV4T2YocCwgaSArIDEpOwogICAgICAgICAgICBpZiAoZXhwYW5kaW5nW2lkXSkgewogICAgICAgICAgICAgICAgaWYgKGV4cGFuZGluZ1tpZF0gPT09IHApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXhwYW5kaW5nW2lkXTsKICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhleHBhbmRpbmcpLmZvckVhY2goZnVuY3Rpb24ocGFyZW50SWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHMucGFyZW50c1twYXJlbnRJZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXhwYW5kaW5nW2lkXSA9IHA7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRzLnZhbHVlOwogICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgIHZhbHVlID0gY29weVZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgZWxzZSBpZiAocC5mbXQpCiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG1TdHJGb3JtYXQodmFsdWUsIHAsIGVkaXRvcik7CiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBbaSArIDEsIE1hdGgubWF4KDAsIGkxIC0gaSldLmNvbmNhdCh2YWx1ZSwgcCkpOwoKICAgICAgICAgICAgaWYgKHRzLmluZGV4T2YocCkgPT09IC0xKQogICAgICAgICAgICAgICAgdHMucHVzaChwKTsKICAgICAgICB9CiAgICAgICAgdmFyIHJvdyA9IDAsIGNvbHVtbiA9IDA7CiAgICAgICAgdmFyIHRleHQgPSAiIjsKICAgICAgICB0b2tlbnMuZm9yRWFjaChmdW5jdGlvbih0KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IHQuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMSl7CiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJvdyArPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgY29sdW1uICs9IHQubGVuZ3RoOwogICAgICAgICAgICAgICAgdGV4dCArPSB0OwogICAgICAgICAgICB9IGVsc2UgaWYgKHQpIHsKICAgICAgICAgICAgICAgIGlmICghdC5zdGFydCkKICAgICAgICAgICAgICAgICAgICB0LnN0YXJ0ID0ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdC5lbmQgPSB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgIHZhciBlbmQgPSBlZGl0b3Iuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCB0ZXh0KTsKCiAgICAgICAgdmFyIHRhYnN0b3BNYW5hZ2VyID0gbmV3IFRhYnN0b3BNYW5hZ2VyKGVkaXRvcik7CiAgICAgICAgdmFyIHNlbGVjdGlvbklkID0gZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUgJiYgZWRpdG9yLnNlbGVjdGlvbi5pbmRleDsKICAgICAgICB0YWJzdG9wTWFuYWdlci5hZGRUYWJzdG9wcyh0YWJzdG9wcywgcmFuZ2Uuc3RhcnQsIGVuZCwgc2VsZWN0aW9uSWQpOwogICAgfTsKICAgIAogICAgdGhpcy5pbnNlcnRTbmlwcGV0ID0gZnVuY3Rpb24oZWRpdG9yLCBzbmlwcGV0VGV4dCkgewogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICBpZiAoZWRpdG9yLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpCiAgICAgICAgICAgIHJldHVybiBzZWxmLmluc2VydFNuaXBwZXRGb3JTZWxlY3Rpb24oZWRpdG9yLCBzbmlwcGV0VGV4dCk7CiAgICAgICAgCiAgICAgICAgZWRpdG9yLmZvckVhY2hTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlbGYuaW5zZXJ0U25pcHBldEZvclNlbGVjdGlvbihlZGl0b3IsIHNuaXBwZXRUZXh0KTsKICAgICAgICB9LCBudWxsLCB7a2VlcE9yZGVyOiB0cnVlfSk7CiAgICAgICAgCiAgICAgICAgaWYgKGVkaXRvci50YWJzdG9wTWFuYWdlcikKICAgICAgICAgICAgZWRpdG9yLnRhYnN0b3BNYW5hZ2VyLnRhYk5leHQoKTsKICAgIH07CgogICAgdGhpcy4kZ2V0U2NvcGUgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgc2NvcGUgPSBlZGl0b3Iuc2Vzc2lvbi4kbW9kZS4kaWQgfHwgIiI7CiAgICAgICAgc2NvcGUgPSBzY29wZS5zcGxpdCgiLyIpLnBvcCgpOwogICAgICAgIGlmIChzY29wZSA9PT0gImh0bWwiIHx8IHNjb3BlID09PSAicGhwIikgewogICAgICAgICAgICBpZiAoc2NvcGUgPT09ICJwaHAiICYmICFlZGl0b3Iuc2Vzc2lvbi4kbW9kZS5pbmxpbmVQaHApIAogICAgICAgICAgICAgICAgc2NvcGUgPSAiaHRtbCI7CiAgICAgICAgICAgIHZhciBjID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBzdGF0ZSA9IGVkaXRvci5zZXNzaW9uLmdldFN0YXRlKGMucm93KTsKICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVbMF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXRlLnN1YnN0cmluZykgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnN1YnN0cmluZygwLCAzKSA9PSAianMtIikKICAgICAgICAgICAgICAgICAgICBzY29wZSA9ICJqYXZhc2NyaXB0IjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN1YnN0cmluZygwLCA0KSA9PSAiY3NzLSIpCiAgICAgICAgICAgICAgICAgICAgc2NvcGUgPSAiY3NzIjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN1YnN0cmluZygwLCA0KSA9PSAicGhwLSIpCiAgICAgICAgICAgICAgICAgICAgc2NvcGUgPSAicGhwIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gc2NvcGU7CiAgICB9OwoKICAgIHRoaXMuZ2V0QWN0aXZlU2NvcGVzID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIHNjb3BlID0gdGhpcy4kZ2V0U2NvcGUoZWRpdG9yKTsKICAgICAgICB2YXIgc2NvcGVzID0gW3Njb3BlXTsKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHRoaXMuc25pcHBldE1hcDsKICAgICAgICBpZiAoc25pcHBldE1hcFtzY29wZV0gJiYgc25pcHBldE1hcFtzY29wZV0uaW5jbHVkZVNjb3BlcykgewogICAgICAgICAgICBzY29wZXMucHVzaC5hcHBseShzY29wZXMsIHNuaXBwZXRNYXBbc2NvcGVdLmluY2x1ZGVTY29wZXMpOwogICAgICAgIH0KICAgICAgICBzY29wZXMucHVzaCgiXyIpOwogICAgICAgIHJldHVybiBzY29wZXM7CiAgICB9OwoKICAgIHRoaXMuZXhwYW5kV2l0aFRhYiA9IGZ1bmN0aW9uKGVkaXRvciwgb3B0aW9ucykgewogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICB2YXIgcmVzdWx0ID0gZWRpdG9yLmZvckVhY2hTZWxlY3Rpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZFNuaXBwZXRGb3JTZWxlY3Rpb24oZWRpdG9yLCBvcHRpb25zKTsKICAgICAgICB9LCBudWxsLCB7a2VlcE9yZGVyOiB0cnVlfSk7CiAgICAgICAgaWYgKHJlc3VsdCAmJiBlZGl0b3IudGFic3RvcE1hbmFnZXIpCiAgICAgICAgICAgIGVkaXRvci50YWJzdG9wTWFuYWdlci50YWJOZXh0KCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICAKICAgIHRoaXMuZXhwYW5kU25pcHBldEZvclNlbGVjdGlvbiA9IGZ1bmN0aW9uKGVkaXRvciwgb3B0aW9ucykgewogICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICB2YXIgbGluZSA9IGVkaXRvci5zZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgdmFyIGJlZm9yZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGN1cnNvci5jb2x1bW4pOwogICAgICAgIHZhciBhZnRlciA9IGxpbmUuc3Vic3RyKGN1cnNvci5jb2x1bW4pOwoKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHRoaXMuc25pcHBldE1hcDsKICAgICAgICB2YXIgc25pcHBldDsKICAgICAgICB0aGlzLmdldEFjdGl2ZVNjb3BlcyhlZGl0b3IpLnNvbWUoZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICAgICAgdmFyIHNuaXBwZXRzID0gc25pcHBldE1hcFtzY29wZV07CiAgICAgICAgICAgIGlmIChzbmlwcGV0cykKICAgICAgICAgICAgICAgIHNuaXBwZXQgPSB0aGlzLmZpbmRNYXRjaGluZ1NuaXBwZXQoc25pcHBldHMsIGJlZm9yZSwgYWZ0ZXIpOwogICAgICAgICAgICByZXR1cm4gISFzbmlwcGV0OwogICAgICAgIH0sIHRoaXMpOwogICAgICAgIGlmICghc25pcHBldCkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZHJ5UnVuKQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5kb2MucmVtb3ZlSW5MaW5lKGN1cnNvci5yb3csCiAgICAgICAgICAgIGN1cnNvci5jb2x1bW4gLSBzbmlwcGV0LnJlcGxhY2VCZWZvcmUubGVuZ3RoLAogICAgICAgICAgICBjdXJzb3IuY29sdW1uICsgc25pcHBldC5yZXBsYWNlQWZ0ZXIubGVuZ3RoCiAgICAgICAgKTsKCiAgICAgICAgdGhpcy52YXJpYWJsZXMuTV9fID0gc25pcHBldC5tYXRjaEJlZm9yZTsKICAgICAgICB0aGlzLnZhcmlhYmxlcy5UX18gPSBzbmlwcGV0Lm1hdGNoQWZ0ZXI7CiAgICAgICAgdGhpcy5pbnNlcnRTbmlwcGV0Rm9yU2VsZWN0aW9uKGVkaXRvciwgc25pcHBldC5jb250ZW50KTsKCiAgICAgICAgdGhpcy52YXJpYWJsZXMuTV9fID0gdGhpcy52YXJpYWJsZXMuVF9fID0gbnVsbDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5maW5kTWF0Y2hpbmdTbmlwcGV0ID0gZnVuY3Rpb24oc25pcHBldExpc3QsIGJlZm9yZSwgYWZ0ZXIpIHsKICAgICAgICBmb3IgKHZhciBpID0gc25pcHBldExpc3QubGVuZ3RoOyBpLS07KSB7CiAgICAgICAgICAgIHZhciBzID0gc25pcHBldExpc3RbaV07CiAgICAgICAgICAgIGlmIChzLnN0YXJ0UmUgJiYgIXMuc3RhcnRSZS50ZXN0KGJlZm9yZSkpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKHMuZW5kUmUgJiYgIXMuZW5kUmUudGVzdChhZnRlcikpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCFzLnN0YXJ0UmUgJiYgIXMuZW5kUmUpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIHMubWF0Y2hCZWZvcmUgPSBzLnN0YXJ0UmUgPyBzLnN0YXJ0UmUuZXhlYyhiZWZvcmUpIDogWyIiXTsKICAgICAgICAgICAgcy5tYXRjaEFmdGVyID0gcy5lbmRSZSA/IHMuZW5kUmUuZXhlYyhhZnRlcikgOiBbIiJdOwogICAgICAgICAgICBzLnJlcGxhY2VCZWZvcmUgPSBzLnRyaWdnZXJSZSA/IHMudHJpZ2dlclJlLmV4ZWMoYmVmb3JlKVswXSA6ICIiOwogICAgICAgICAgICBzLnJlcGxhY2VBZnRlciA9IHMuZW5kVHJpZ2dlclJlID8gcy5lbmRUcmlnZ2VyUmUuZXhlYyhhZnRlcilbMF0gOiAiIjsKICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLnNuaXBwZXRNYXAgPSB7fTsKICAgIHRoaXMuc25pcHBldE5hbWVNYXAgPSB7fTsKICAgIHRoaXMucmVnaXN0ZXIgPSBmdW5jdGlvbihzbmlwcGV0cywgc2NvcGUpIHsKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHRoaXMuc25pcHBldE1hcDsKICAgICAgICB2YXIgc25pcHBldE5hbWVNYXAgPSB0aGlzLnNuaXBwZXROYW1lTWFwOwogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICAKICAgICAgICBpZiAoIXNuaXBwZXRzKSAKICAgICAgICAgICAgc25pcHBldHMgPSBbXTsKICAgICAgICAKICAgICAgICBmdW5jdGlvbiB3cmFwUmVnZXhwKHNyYykgewogICAgICAgICAgICBpZiAoc3JjICYmICEvXlxeP1woLipcKVwkPyR8XlxcYiQvLnRlc3Qoc3JjKSkKICAgICAgICAgICAgICAgIHNyYyA9ICIoPzoiICsgc3JjICsgIikiOwoKICAgICAgICAgICAgcmV0dXJuIHNyYyB8fCAiIjsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZ3VhcmRlZFJlZ2V4cChyZSwgZ3VhcmQsIG9wZW5pbmcpIHsKICAgICAgICAgICAgcmUgPSB3cmFwUmVnZXhwKHJlKTsKICAgICAgICAgICAgZ3VhcmQgPSB3cmFwUmVnZXhwKGd1YXJkKTsKICAgICAgICAgICAgaWYgKG9wZW5pbmcpIHsKICAgICAgICAgICAgICAgIHJlID0gZ3VhcmQgKyByZTsKICAgICAgICAgICAgICAgIGlmIChyZSAmJiByZVtyZS5sZW5ndGggLSAxXSAhPSAiJCIpCiAgICAgICAgICAgICAgICAgICAgcmUgPSByZSArICIkIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlID0gcmUgKyBndWFyZDsKICAgICAgICAgICAgICAgIGlmIChyZSAmJiByZVswXSAhPSAiXiIpCiAgICAgICAgICAgICAgICAgICAgcmUgPSAiXiIgKyByZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChyZSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBhZGRTbmlwcGV0KHMpIHsKICAgICAgICAgICAgaWYgKCFzLnNjb3BlKQogICAgICAgICAgICAgICAgcy5zY29wZSA9IHNjb3BlIHx8ICJfIjsKICAgICAgICAgICAgc2NvcGUgPSBzLnNjb3BlOwogICAgICAgICAgICBpZiAoIXNuaXBwZXRNYXBbc2NvcGVdKSB7CiAgICAgICAgICAgICAgICBzbmlwcGV0TWFwW3Njb3BlXSA9IFtdOwogICAgICAgICAgICAgICAgc25pcHBldE5hbWVNYXBbc2NvcGVdID0ge307CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBtYXAgPSBzbmlwcGV0TmFtZU1hcFtzY29wZV07CiAgICAgICAgICAgIGlmIChzLm5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBvbGQgPSBtYXBbcy5uYW1lXTsKICAgICAgICAgICAgICAgIGlmIChvbGQpCiAgICAgICAgICAgICAgICAgICAgc2VsZi51bnJlZ2lzdGVyKG9sZCk7CiAgICAgICAgICAgICAgICBtYXBbcy5uYW1lXSA9IHM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc25pcHBldE1hcFtzY29wZV0ucHVzaChzKTsKCiAgICAgICAgICAgIGlmIChzLnRhYlRyaWdnZXIgJiYgIXMudHJpZ2dlcikgewogICAgICAgICAgICAgICAgaWYgKCFzLmd1YXJkICYmIC9eXHcvLnRlc3Qocy50YWJUcmlnZ2VyKSkKICAgICAgICAgICAgICAgICAgICBzLmd1YXJkID0gIlxcYiI7CiAgICAgICAgICAgICAgICBzLnRyaWdnZXIgPSBsYW5nLmVzY2FwZVJlZ0V4cChzLnRhYlRyaWdnZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoIXMudHJpZ2dlciAmJiAhcy5ndWFyZCAmJiAhcy5lbmRUcmlnZ2VyICYmICFzLmVuZEd1YXJkKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAKICAgICAgICAgICAgcy5zdGFydFJlID0gZ3VhcmRlZFJlZ2V4cChzLnRyaWdnZXIsIHMuZ3VhcmQsIHRydWUpOwogICAgICAgICAgICBzLnRyaWdnZXJSZSA9IG5ldyBSZWdFeHAocy50cmlnZ2VyKTsKCiAgICAgICAgICAgIHMuZW5kUmUgPSBndWFyZGVkUmVnZXhwKHMuZW5kVHJpZ2dlciwgcy5lbmRHdWFyZCwgdHJ1ZSk7CiAgICAgICAgICAgIHMuZW5kVHJpZ2dlclJlID0gbmV3IFJlZ0V4cChzLmVuZFRyaWdnZXIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNuaXBwZXRzICYmIHNuaXBwZXRzLmNvbnRlbnQpCiAgICAgICAgICAgIGFkZFNuaXBwZXQoc25pcHBldHMpOwogICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc25pcHBldHMpKQogICAgICAgICAgICBzbmlwcGV0cy5mb3JFYWNoKGFkZFNuaXBwZXQpOwogICAgICAgIAogICAgICAgIHRoaXMuX3NpZ25hbCgicmVnaXN0ZXJTbmlwcGV0cyIsIHtzY29wZTogc2NvcGV9KTsKICAgIH07CiAgICB0aGlzLnVucmVnaXN0ZXIgPSBmdW5jdGlvbihzbmlwcGV0cywgc2NvcGUpIHsKICAgICAgICB2YXIgc25pcHBldE1hcCA9IHRoaXMuc25pcHBldE1hcDsKICAgICAgICB2YXIgc25pcHBldE5hbWVNYXAgPSB0aGlzLnNuaXBwZXROYW1lTWFwOwoKICAgICAgICBmdW5jdGlvbiByZW1vdmVTbmlwcGV0KHMpIHsKICAgICAgICAgICAgdmFyIG5hbWVNYXAgPSBzbmlwcGV0TmFtZU1hcFtzLnNjb3BlfHxzY29wZV07CiAgICAgICAgICAgIGlmIChuYW1lTWFwICYmIG5hbWVNYXBbcy5uYW1lXSkgewogICAgICAgICAgICAgICAgZGVsZXRlIG5hbWVNYXBbcy5uYW1lXTsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBzbmlwcGV0TWFwW3Muc2NvcGV8fHNjb3BlXTsKICAgICAgICAgICAgICAgIHZhciBpID0gbWFwICYmIG1hcC5pbmRleE9mKHMpOwogICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkKICAgICAgICAgICAgICAgICAgICBtYXAuc3BsaWNlKGksIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzbmlwcGV0cy5jb250ZW50KQogICAgICAgICAgICByZW1vdmVTbmlwcGV0KHNuaXBwZXRzKTsKICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHNuaXBwZXRzKSkKICAgICAgICAgICAgc25pcHBldHMuZm9yRWFjaChyZW1vdmVTbmlwcGV0KTsKICAgIH07CiAgICB0aGlzLnBhcnNlU25pcHBldEZpbGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXHIvZywgIiIpOwogICAgICAgIHZhciBsaXN0ID0gW10sIHNuaXBwZXQgPSB7fTsKICAgICAgICB2YXIgcmUgPSAvXiMuKnxeKHtbXHNcU10qfSlccyokfF4oXFMrKSAoLiopJHxeKCg/OlxuKlx0LiopKykvZ207CiAgICAgICAgdmFyIG07CiAgICAgICAgd2hpbGUgKG0gPSByZS5leGVjKHN0cikpIHsKICAgICAgICAgICAgaWYgKG1bMV0pIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgc25pcHBldCA9IEpTT04ucGFyc2UobVsxXSk7CiAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKHNuaXBwZXQpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KICAgICAgICAgICAgfSBpZiAobVs0XSkgewogICAgICAgICAgICAgICAgc25pcHBldC5jb250ZW50ID0gbVs0XS5yZXBsYWNlKC9eXHQvZ20sICIiKTsKICAgICAgICAgICAgICAgIGxpc3QucHVzaChzbmlwcGV0KTsKICAgICAgICAgICAgICAgIHNuaXBwZXQgPSB7fTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBrZXkgPSBtWzJdLCB2YWwgPSBtWzNdOwogICAgICAgICAgICAgICAgaWYgKGtleSA9PSAicmVnZXgiKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGd1YXJkUmUgPSAvXC8oKD86W15cL1xcXXxcXC4pKil8JC9nOwogICAgICAgICAgICAgICAgICAgIHNuaXBwZXQuZ3VhcmQgPSBndWFyZFJlLmV4ZWModmFsKVsxXTsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0LnRyaWdnZXIgPSBndWFyZFJlLmV4ZWModmFsKVsxXTsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0LmVuZFRyaWdnZXIgPSBndWFyZFJlLmV4ZWModmFsKVsxXTsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0LmVuZEd1YXJkID0gZ3VhcmRSZS5leGVjKHZhbClbMV07CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PSAic25pcHBldCIpIHsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0LnRhYlRyaWdnZXIgPSB2YWwubWF0Y2goL15cUyovKVswXTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXNuaXBwZXQubmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgc25pcHBldC5uYW1lID0gdmFsOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzbmlwcGV0W2tleV0gPSB2YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICB9OwogICAgdGhpcy5nZXRTbmlwcGV0QnlOYW1lID0gZnVuY3Rpb24obmFtZSwgZWRpdG9yKSB7CiAgICAgICAgdmFyIHNuaXBwZXRNYXAgPSB0aGlzLnNuaXBwZXROYW1lTWFwOwogICAgICAgIHZhciBzbmlwcGV0OwogICAgICAgIHRoaXMuZ2V0QWN0aXZlU2NvcGVzKGVkaXRvcikuc29tZShmdW5jdGlvbihzY29wZSkgewogICAgICAgICAgICB2YXIgc25pcHBldHMgPSBzbmlwcGV0TWFwW3Njb3BlXTsKICAgICAgICAgICAgaWYgKHNuaXBwZXRzKQogICAgICAgICAgICAgICAgc25pcHBldCA9IHNuaXBwZXRzW25hbWVdOwogICAgICAgICAgICByZXR1cm4gISFzbmlwcGV0OwogICAgICAgIH0sIHRoaXMpOwogICAgICAgIHJldHVybiBzbmlwcGV0OwogICAgfTsKCn0pLmNhbGwoU25pcHBldE1hbmFnZXIucHJvdG90eXBlKTsKCgp2YXIgVGFic3RvcE1hbmFnZXIgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgIGlmIChlZGl0b3IudGFic3RvcE1hbmFnZXIpCiAgICAgICAgcmV0dXJuIGVkaXRvci50YWJzdG9wTWFuYWdlcjsKICAgIGVkaXRvci50YWJzdG9wTWFuYWdlciA9IHRoaXM7CiAgICB0aGlzLiRvbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTsKICAgIHRoaXMuJG9uQ2hhbmdlU2VsZWN0aW9uID0gbGFuZy5kZWxheWVkQ2FsbCh0aGlzLm9uQ2hhbmdlU2VsZWN0aW9uLmJpbmQodGhpcykpLnNjaGVkdWxlOwogICAgdGhpcy4kb25DaGFuZ2VTZXNzaW9uID0gdGhpcy5vbkNoYW5nZVNlc3Npb24uYmluZCh0aGlzKTsKICAgIHRoaXMuJG9uQWZ0ZXJFeGVjID0gdGhpcy5vbkFmdGVyRXhlYy5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZWRpdG9yKTsKfTsKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB0aGlzLmluZGV4ID0gMDsKICAgICAgICB0aGlzLnJhbmdlcyA9IFtdOwogICAgICAgIHRoaXMudGFic3RvcHMgPSBbXTsKICAgICAgICB0aGlzLiRvcGVuVGFic3RvcHMgPSBudWxsOwogICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJzdG9wID0gbnVsbDsKCiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CiAgICAgICAgdGhpcy5lZGl0b3Iub24oImNoYW5nZSIsIHRoaXMuJG9uQ2hhbmdlKTsKICAgICAgICB0aGlzLmVkaXRvci5vbigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy4kb25DaGFuZ2VTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuZWRpdG9yLm9uKCJjaGFuZ2VTZXNzaW9uIiwgdGhpcy4kb25DaGFuZ2VTZXNzaW9uKTsKICAgICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5vbigiYWZ0ZXJFeGVjIiwgdGhpcy4kb25BZnRlckV4ZWMpOwogICAgICAgIHRoaXMuZWRpdG9yLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKHRoaXMua2V5Ym9hcmRIYW5kbGVyKTsKICAgIH07CiAgICB0aGlzLmRldGFjaCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMudGFic3RvcHMuZm9yRWFjaCh0aGlzLnJlbW92ZVRhYnN0b3BNYXJrZXJzLCB0aGlzKTsKICAgICAgICB0aGlzLnJhbmdlcyA9IG51bGw7CiAgICAgICAgdGhpcy50YWJzdG9wcyA9IG51bGw7CiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYnN0b3AgPSBudWxsOwogICAgICAgIHRoaXMuZWRpdG9yLnJlbW92ZUxpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICAgICAgdGhpcy5lZGl0b3IucmVtb3ZlTGlzdGVuZXIoImNoYW5nZVNlbGVjdGlvbiIsIHRoaXMuJG9uQ2hhbmdlU2VsZWN0aW9uKTsKICAgICAgICB0aGlzLmVkaXRvci5yZW1vdmVMaXN0ZW5lcigiY2hhbmdlU2Vzc2lvbiIsIHRoaXMuJG9uQ2hhbmdlU2Vzc2lvbik7CiAgICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMucmVtb3ZlTGlzdGVuZXIoImFmdGVyRXhlYyIsIHRoaXMuJG9uQWZ0ZXJFeGVjKTsKICAgICAgICB0aGlzLmVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlcik7CiAgICAgICAgdGhpcy5lZGl0b3IudGFic3RvcE1hbmFnZXIgPSBudWxsOwogICAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDsKICAgIH07CgogICAgdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uKGRlbHRhKSB7CiAgICAgICAgdmFyIGlzUmVtb3ZlID0gZGVsdGEuYWN0aW9uWzBdID09ICJyIjsKICAgICAgICB2YXIgcGFyZW50cyA9IHRoaXMuc2VsZWN0ZWRUYWJzdG9wICYmIHRoaXMuc2VsZWN0ZWRUYWJzdG9wLnBhcmVudHMgfHwge307CiAgICAgICAgdmFyIHRhYnN0b3BzID0gKHRoaXMudGFic3RvcHMgfHwgW10pLnNsaWNlKCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJzdG9wcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgdHMgPSB0YWJzdG9wc1tpXTsKICAgICAgICAgICAgdmFyIGFjdGl2ZSA9IHRzID09IHRoaXMuc2VsZWN0ZWRUYWJzdG9wIHx8IHBhcmVudHNbdHMuaW5kZXhdOwogICAgICAgICAgICB0cy5yYW5nZUxpc3QuJGJpYXMgPSBhY3RpdmUgPyAwIDogMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChkZWx0YS5hY3Rpb24gPT0gInJlbW92ZSIgJiYgdHMgIT09IHRoaXMuc2VsZWN0ZWRUYWJzdG9wKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFyZW50QWN0aXZlID0gdHMucGFyZW50cyAmJiB0cy5wYXJlbnRzW3RoaXMuc2VsZWN0ZWRUYWJzdG9wLmluZGV4XTsKICAgICAgICAgICAgICAgIHZhciBzdGFydEluZGV4ID0gdHMucmFuZ2VMaXN0LnBvaW50SW5kZXgoZGVsdGEuc3RhcnQsIHBhcmVudEFjdGl2ZSk7CiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA8IDAgPyAtc3RhcnRJbmRleCAtIDEgOiBzdGFydEluZGV4ICsgMTsKICAgICAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IHRzLnJhbmdlTGlzdC5wb2ludEluZGV4KGRlbHRhLmVuZCwgcGFyZW50QWN0aXZlKTsKICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gZW5kSW5kZXggPCAwID8gLWVuZEluZGV4IC0gMSA6IGVuZEluZGV4IC0gMTsKICAgICAgICAgICAgICAgIHZhciB0b1JlbW92ZSA9IHRzLnJhbmdlTGlzdC5yYW5nZXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0b1JlbW92ZS5sZW5ndGg7IGorKykKICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVJhbmdlKHRvUmVtb3ZlW2pdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cy5yYW5nZUxpc3QuJG9uQ2hhbmdlKGRlbHRhKTsKICAgICAgICB9CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLmVkaXRvci5zZXNzaW9uOwogICAgICAgIGlmICghdGhpcy4kaW5DaGFuZ2UgJiYgaXNSZW1vdmUgJiYgc2Vzc2lvbi5nZXRMZW5ndGgoKSA9PSAxICYmICFzZXNzaW9uLmdldFZhbHVlKCkpCiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwogICAgdGhpcy51cGRhdGVMaW5rZWRGaWVsZHMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdHMgPSB0aGlzLnNlbGVjdGVkVGFic3RvcDsKICAgICAgICBpZiAoIXRzIHx8ICF0cy5oYXNMaW5rZWRSYW5nZXMgfHwgIXRzLmZpcnN0Tm9uTGlua2VkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdGhpcy4kaW5DaGFuZ2UgPSB0cnVlOwogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy5lZGl0b3Iuc2Vzc2lvbjsKICAgICAgICB2YXIgdGV4dCA9IHNlc3Npb24uZ2V0VGV4dFJhbmdlKHRzLmZpcnN0Tm9uTGlua2VkKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciByYW5nZSA9IHRzW2ldOwogICAgICAgICAgICBpZiAoIXJhbmdlLmxpbmtlZCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgb3JpZ2luYWwgPSByYW5nZS5vcmlnaW5hbDsKICAgICAgICAgICAgdmFyIGZtdCA9IGV4cG9ydHMuc25pcHBldE1hbmFnZXIudG1TdHJGb3JtYXQodGV4dCwgb3JpZ2luYWwsIHRoaXMuZWRpdG9yKTsKICAgICAgICAgICAgc2Vzc2lvbi5yZXBsYWNlKHJhbmdlLCBmbXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLiRpbkNoYW5nZSA9IGZhbHNlOwogICAgfTsKICAgIHRoaXMub25BZnRlckV4ZWMgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKGUuY29tbWFuZCAmJiAhZS5jb21tYW5kLnJlYWRPbmx5KQogICAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmtlZEZpZWxkcygpOwogICAgfTsKICAgIHRoaXMub25DaGFuZ2VTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuZWRpdG9yKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIGxlYWQgPSB0aGlzLmVkaXRvci5zZWxlY3Rpb24ubGVhZDsKICAgICAgICB2YXIgYW5jaG9yID0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uLmFuY2hvcjsKICAgICAgICB2YXIgaXNFbXB0eSA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCk7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAodGhpcy5yYW5nZXNbaV0ubGlua2VkKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHZhciBjb250YWluc0xlYWQgPSB0aGlzLnJhbmdlc1tpXS5jb250YWlucyhsZWFkLnJvdywgbGVhZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgY29udGFpbnNBbmNob3IgPSBpc0VtcHR5IHx8IHRoaXMucmFuZ2VzW2ldLmNvbnRhaW5zKGFuY2hvci5yb3csIGFuY2hvci5jb2x1bW4pOwogICAgICAgICAgICBpZiAoY29udGFpbnNMZWFkICYmIGNvbnRhaW5zQW5jaG9yKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmRldGFjaCgpOwogICAgfTsKICAgIHRoaXMub25DaGFuZ2VTZXNzaW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgIH07CiAgICB0aGlzLnRhYk5leHQgPSBmdW5jdGlvbihkaXIpIHsKICAgICAgICB2YXIgbWF4ID0gdGhpcy50YWJzdG9wcy5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCArIChkaXIgfHwgMSk7CiAgICAgICAgaW5kZXggPSBNYXRoLm1pbihNYXRoLm1heChpbmRleCwgMSksIG1heCk7CiAgICAgICAgaWYgKGluZGV4ID09IG1heCkKICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgIHRoaXMuc2VsZWN0VGFic3RvcChpbmRleCk7CiAgICAgICAgaWYgKGluZGV4ID09PSAwKQogICAgICAgICAgICB0aGlzLmRldGFjaCgpOwogICAgfTsKICAgIHRoaXMuc2VsZWN0VGFic3RvcCA9IGZ1bmN0aW9uKGluZGV4KSB7CiAgICAgICAgdGhpcy4kb3BlblRhYnN0b3BzID0gbnVsbDsKICAgICAgICB2YXIgdHMgPSB0aGlzLnRhYnN0b3BzW3RoaXMuaW5kZXhdOwogICAgICAgIGlmICh0cykKICAgICAgICAgICAgdGhpcy5hZGRUYWJzdG9wTWFya2Vycyh0cyk7CiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwogICAgICAgIHRzID0gdGhpcy50YWJzdG9wc1t0aGlzLmluZGV4XTsKICAgICAgICBpZiAoIXRzIHx8ICF0cy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAKICAgICAgICB0aGlzLnNlbGVjdGVkVGFic3RvcCA9IHRzOwogICAgICAgIHZhciByYW5nZSA9IHRzLmZpcnN0Tm9uTGlua2VkIHx8IHRzOwogICAgICAgIGlmICghdGhpcy5lZGl0b3IuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICAgICAgICB2YXIgc2VsID0gdGhpcy5lZGl0b3IubXVsdGlTZWxlY3Q7CiAgICAgICAgICAgIHNlbC50b1NpbmdsZVJhbmdlKHJhbmdlLmNsb25lKCkpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAodHMuaGFzTGlua2VkUmFuZ2VzICYmIHRzW2ldLmxpbmtlZCkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIHNlbC5hZGRSYW5nZSh0c1tpXS5jbG9uZSgpLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2VsLnJhbmdlc1swXSkKICAgICAgICAgICAgICAgIHNlbC5hZGRSYW5nZShzZWwucmFuZ2VzWzBdLmNsb25lKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5zZXRSYW5nZShyYW5nZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRoaXMuZWRpdG9yLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKHRoaXMua2V5Ym9hcmRIYW5kbGVyKTsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYnN0b3AgJiYgdGhpcy5zZWxlY3RlZFRhYnN0b3AuY2hvaWNlcykKICAgICAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoInN0YXJ0QXV0b2NvbXBsZXRlIiwge21hdGNoZXM6IHRoaXMuc2VsZWN0ZWRUYWJzdG9wLmNob2ljZXN9KTsKICAgIH07CiAgICB0aGlzLmFkZFRhYnN0b3BzID0gZnVuY3Rpb24odGFic3RvcHMsIHN0YXJ0LCBlbmQpIHsKICAgICAgICB2YXIgdXNlTGluayA9IHRoaXMudXNlTGluayB8fCAhdGhpcy5lZGl0b3IuZ2V0T3B0aW9uKCJlbmFibGVNdWx0aXNlbGVjdCIpOwogICAgICAgIAogICAgICAgIGlmICghdGhpcy4kb3BlblRhYnN0b3BzKQogICAgICAgICAgICB0aGlzLiRvcGVuVGFic3RvcHMgPSBbXTsKICAgICAgICBpZiAoIXRhYnN0b3BzWzBdKSB7CiAgICAgICAgICAgIHZhciBwID0gUmFuZ2UuZnJvbVBvaW50cyhlbmQsIGVuZCk7CiAgICAgICAgICAgIG1vdmVSZWxhdGl2ZShwLnN0YXJ0LCBzdGFydCk7CiAgICAgICAgICAgIG1vdmVSZWxhdGl2ZShwLmVuZCwgc3RhcnQpOwogICAgICAgICAgICB0YWJzdG9wc1swXSA9IFtwXTsKICAgICAgICAgICAgdGFic3RvcHNbMF0uaW5kZXggPSAwOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4OwogICAgICAgIHZhciBhcmcgPSBbaSArIDEsIDBdOwogICAgICAgIHZhciByYW5nZXMgPSB0aGlzLnJhbmdlczsKICAgICAgICB0YWJzdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKHRzLCBpbmRleCkgewogICAgICAgICAgICB2YXIgZGVzdCA9IHRoaXMuJG9wZW5UYWJzdG9wc1tpbmRleF0gfHwgdHM7CiAgICAgICAgICAgIHRzLnJhbmdlTGlzdCA9IG5ldyBSYW5nZUxpc3QoKTsKICAgICAgICAgICAgdHMucmFuZ2VMaXN0LiRiaWFzID0gMDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBwID0gdHNbaV07CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHAuc3RhcnQsIHAuZW5kIHx8IHAuc3RhcnQpOwogICAgICAgICAgICAgICAgbW92ZVBvaW50KHJhbmdlLnN0YXJ0LCBzdGFydCk7CiAgICAgICAgICAgICAgICBtb3ZlUG9pbnQocmFuZ2UuZW5kLCBzdGFydCk7CiAgICAgICAgICAgICAgICByYW5nZS5vcmlnaW5hbCA9IHA7CiAgICAgICAgICAgICAgICByYW5nZS50YWJzdG9wID0gZGVzdDsKICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHJhbmdlKTsKICAgICAgICAgICAgICAgIHRzLnJhbmdlTGlzdC5yYW5nZXMucHVzaChyYW5nZSk7CiAgICAgICAgICAgICAgICBpZiAoZGVzdCAhPSB0cykKICAgICAgICAgICAgICAgICAgICBkZXN0LnVuc2hpZnQocmFuZ2UpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGRlc3RbaV0gPSByYW5nZTsKICAgICAgICAgICAgICAgIGlmIChwLmZtdFN0cmluZyB8fCAoZGVzdC5maXJzdE5vbkxpbmtlZCAmJiB1c2VMaW5rKSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmxpbmtlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgZGVzdC5oYXNMaW5rZWRSYW5nZXMgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghZGVzdC5maXJzdE5vbkxpbmtlZCkKICAgICAgICAgICAgICAgICAgICBkZXN0LmZpcnN0Tm9uTGlua2VkID0gcmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFkZXN0LmZpcnN0Tm9uTGlua2VkKQogICAgICAgICAgICAgICAgZGVzdC5oYXNMaW5rZWRSYW5nZXMgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKGRlc3QgPT09IHRzKSB7CiAgICAgICAgICAgICAgICBhcmcucHVzaChkZXN0KTsKICAgICAgICAgICAgICAgIHRoaXMuJG9wZW5UYWJzdG9wc1tpbmRleF0gPSBkZXN0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuYWRkVGFic3RvcE1hcmtlcnMoZGVzdCk7CiAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgCiAgICAgICAgaWYgKGFyZy5sZW5ndGggPiAyKSB7CiAgICAgICAgICAgIGlmICh0aGlzLnRhYnN0b3BzLmxlbmd0aCkKICAgICAgICAgICAgICAgIGFyZy5wdXNoKGFyZy5zcGxpY2UoMiwgMSlbMF0pOwogICAgICAgICAgICB0aGlzLnRhYnN0b3BzLnNwbGljZS5hcHBseSh0aGlzLnRhYnN0b3BzLCBhcmcpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5hZGRUYWJzdG9wTWFya2VycyA9IGZ1bmN0aW9uKHRzKSB7CiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLmVkaXRvci5zZXNzaW9uOwogICAgICAgIHRzLmZvckVhY2goZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICAgICAgaWYgICghcmFuZ2UubWFya2VySWQpCiAgICAgICAgICAgICAgICByYW5nZS5tYXJrZXJJZCA9IHNlc3Npb24uYWRkTWFya2VyKHJhbmdlLCAiYWNlX3NuaXBwZXQtbWFya2VyIiwgInRleHQiKTsKICAgICAgICB9KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZVRhYnN0b3BNYXJrZXJzID0gZnVuY3Rpb24odHMpIHsKICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZWRpdG9yLnNlc3Npb247CiAgICAgICAgdHMuZm9yRWFjaChmdW5jdGlvbihyYW5nZSkgewogICAgICAgICAgICBzZXNzaW9uLnJlbW92ZU1hcmtlcihyYW5nZS5tYXJrZXJJZCk7CiAgICAgICAgICAgIHJhbmdlLm1hcmtlcklkID0gbnVsbDsKICAgICAgICB9KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZVJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgaSA9IHJhbmdlLnRhYnN0b3AuaW5kZXhPZihyYW5nZSk7CiAgICAgICAgaWYgKGkgIT0gLTEpIHJhbmdlLnRhYnN0b3Auc3BsaWNlKGksIDEpOwogICAgICAgIGkgPSB0aGlzLnJhbmdlcy5pbmRleE9mKHJhbmdlKTsKICAgICAgICBpZiAoaSAhPSAtMSkgdGhpcy5yYW5nZXMuc3BsaWNlKGksIDEpOwogICAgICAgIGkgPSByYW5nZS50YWJzdG9wLnJhbmdlTGlzdC5yYW5nZXMuaW5kZXhPZihyYW5nZSk7CiAgICAgICAgaWYgKGkgIT0gLTEpIHJhbmdlLnRhYnN0b3Auc3BsaWNlKGksIDEpOwogICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24ucmVtb3ZlTWFya2VyKHJhbmdlLm1hcmtlcklkKTsKICAgICAgICBpZiAoIXJhbmdlLnRhYnN0b3AubGVuZ3RoKSB7CiAgICAgICAgICAgIGkgPSB0aGlzLnRhYnN0b3BzLmluZGV4T2YocmFuZ2UudGFic3RvcCk7CiAgICAgICAgICAgIGlmIChpICE9IC0xKQogICAgICAgICAgICAgICAgdGhpcy50YWJzdG9wcy5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgIGlmICghdGhpcy50YWJzdG9wcy5sZW5ndGgpCiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaCgpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5rZXlib2FyZEhhbmRsZXIgPSBuZXcgSGFzaEhhbmRsZXIoKTsKICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyLmJpbmRLZXlzKHsKICAgICAgICAiVGFiIjogZnVuY3Rpb24oZWQpIHsKICAgICAgICAgICAgaWYgKGV4cG9ydHMuc25pcHBldE1hbmFnZXIgJiYgZXhwb3J0cy5zbmlwcGV0TWFuYWdlci5leHBhbmRXaXRoVGFiKGVkKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBlZC50YWJzdG9wTWFuYWdlci50YWJOZXh0KDEpOwogICAgICAgIH0sCiAgICAgICAgIlNoaWZ0LVRhYiI6IGZ1bmN0aW9uKGVkKSB7CiAgICAgICAgICAgIGVkLnRhYnN0b3BNYW5hZ2VyLnRhYk5leHQoLTEpOwogICAgICAgIH0sCiAgICAgICAgIkVzYyI6IGZ1bmN0aW9uKGVkKSB7CiAgICAgICAgICAgIGVkLnRhYnN0b3BNYW5hZ2VyLmRldGFjaCgpOwogICAgICAgIH0sCiAgICAgICAgIlJldHVybiI6IGZ1bmN0aW9uKGVkKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKfSkuY2FsbChUYWJzdG9wTWFuYWdlci5wcm90b3R5cGUpOwoKCgp2YXIgbW92ZVBvaW50ID0gZnVuY3Rpb24ocG9pbnQsIGRpZmYpIHsKICAgIGlmIChwb2ludC5yb3cgPT0gMCkKICAgICAgICBwb2ludC5jb2x1bW4gKz0gZGlmZi5jb2x1bW47CiAgICBwb2ludC5yb3cgKz0gZGlmZi5yb3c7Cn07Cgp2YXIgbW92ZVJlbGF0aXZlID0gZnVuY3Rpb24ocG9pbnQsIHN0YXJ0KSB7CiAgICBpZiAocG9pbnQucm93ID09IHN0YXJ0LnJvdykKICAgICAgICBwb2ludC5jb2x1bW4gLT0gc3RhcnQuY29sdW1uOwogICAgcG9pbnQucm93IC09IHN0YXJ0LnJvdzsKfTsKCgpyZXF1aXJlKCIuL2xpYi9kb20iKS5pbXBvcnRDc3NTdHJpbmcoIlwKLmFjZV9zbmlwcGV0LW1hcmtlciB7XAogICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1wKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XAogICAgYmFja2dyb3VuZDogcmdiYSgxOTQsIDE5MywgMjA4LCAwLjA5KTtcCiAgICBib3JkZXI6IDFweCBkb3R0ZWQgcmdiYSgyMTEsIDIwOCwgMjM1LCAwLjYyKTtcCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XAp9Iik7CgpleHBvcnRzLnNuaXBwZXRNYW5hZ2VyID0gbmV3IFNuaXBwZXRNYW5hZ2VyKCk7CgoKdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmluc2VydFNuaXBwZXQgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIGV4cG9ydHMuc25pcHBldE1hbmFnZXIuaW5zZXJ0U25pcHBldCh0aGlzLCBjb250ZW50LCBvcHRpb25zKTsKICAgIH07CiAgICB0aGlzLmV4cGFuZFNuaXBwZXQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIGV4cG9ydHMuc25pcHBldE1hbmFnZXIuZXhwYW5kV2l0aFRhYih0aGlzLCBvcHRpb25zKTsKICAgIH07Cn0pLmNhbGwoRWRpdG9yLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL2F1dG9jb21wbGV0ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLCJhY2UvYXV0b2NvbXBsZXRlL3BvcHVwIiwiYWNlL2F1dG9jb21wbGV0ZS91dGlsIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9kb20iLCJhY2Uvc25pcHBldHMiLCJhY2UvY29uZmlnIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgSGFzaEhhbmRsZXIgPSByZXF1aXJlKCIuL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwp2YXIgQWNlUG9wdXAgPSByZXF1aXJlKCIuL2F1dG9jb21wbGV0ZS9wb3B1cCIpLkFjZVBvcHVwOwp2YXIgdXRpbCA9IHJlcXVpcmUoIi4vYXV0b2NvbXBsZXRlL3V0aWwiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7CnZhciBkb20gPSByZXF1aXJlKCIuL2xpYi9kb20iKTsKdmFyIHNuaXBwZXRNYW5hZ2VyID0gcmVxdWlyZSgiLi9zbmlwcGV0cyIpLnNuaXBwZXRNYW5hZ2VyOwp2YXIgY29uZmlnID0gcmVxdWlyZSgiLi9jb25maWciKTsKCnZhciBBdXRvY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuYXV0b0luc2VydCA9IGZhbHNlOwogICAgdGhpcy5hdXRvU2VsZWN0ID0gdHJ1ZTsKICAgIHRoaXMuZXhhY3RNYXRjaCA9IGZhbHNlOwogICAgdGhpcy5nYXRoZXJDb21wbGV0aW9uc0lkID0gMDsKICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IEhhc2hIYW5kbGVyKCk7CiAgICB0aGlzLmtleWJvYXJkSGFuZGxlci5iaW5kS2V5cyh0aGlzLmNvbW1hbmRzKTsKCiAgICB0aGlzLmJsdXJMaXN0ZW5lciA9IHRoaXMuYmx1ckxpc3RlbmVyLmJpbmQodGhpcyk7CiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gdGhpcy5jaGFuZ2VMaXN0ZW5lci5iaW5kKHRoaXMpOwogICAgdGhpcy5tb3VzZWRvd25MaXN0ZW5lciA9IHRoaXMubW91c2Vkb3duTGlzdGVuZXIuYmluZCh0aGlzKTsKICAgIHRoaXMubW91c2V3aGVlbExpc3RlbmVyID0gdGhpcy5tb3VzZXdoZWVsTGlzdGVuZXIuYmluZCh0aGlzKTsKCiAgICB0aGlzLmNoYW5nZVRpbWVyID0gbGFuZy5kZWxheWVkQ2FsbChmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRpb25zKHRydWUpOwogICAgfS5iaW5kKHRoaXMpKTsKCiAgICB0aGlzLnRvb2x0aXBUaW1lciA9IGxhbmcuZGVsYXllZENhbGwodGhpcy51cGRhdGVEb2NUb29sdGlwLmJpbmQodGhpcyksIDUwKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpbml0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5wb3B1cCA9IG5ldyBBY2VQb3B1cChkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7CiAgICAgICAgdGhpcy5wb3B1cC5vbigiY2xpY2siLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TWF0Y2goKTsKICAgICAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgfS5iaW5kKHRoaXMpKTsKICAgICAgICB0aGlzLnBvcHVwLmZvY3VzID0gdGhpcy5lZGl0b3IuZm9jdXMuYmluZCh0aGlzLmVkaXRvcik7CiAgICAgICAgdGhpcy5wb3B1cC5vbigic2hvdyIsIHRoaXMudG9vbHRpcFRpbWVyLmJpbmQobnVsbCwgbnVsbCkpOwogICAgICAgIHRoaXMucG9wdXAub24oInNlbGVjdCIsIHRoaXMudG9vbHRpcFRpbWVyLmJpbmQobnVsbCwgbnVsbCkpOwogICAgICAgIHRoaXMucG9wdXAub24oImNoYW5nZUhvdmVyTWFya2VyIiwgdGhpcy50b29sdGlwVGltZXIuYmluZChudWxsLCBudWxsKSk7CiAgICAgICAgcmV0dXJuIHRoaXMucG9wdXA7CiAgICB9OwoKICAgIHRoaXMuZ2V0UG9wdXAgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5wb3B1cCB8fCB0aGlzLiRpbml0KCk7CiAgICB9OwoKICAgIHRoaXMub3BlblBvcHVwID0gZnVuY3Rpb24oZWRpdG9yLCBwcmVmaXgsIGtlZXBQb3B1cFBvc2l0aW9uKSB7CiAgICAgICAgaWYgKCF0aGlzLnBvcHVwKQogICAgICAgICAgICB0aGlzLiRpbml0KCk7CgogICAgICAgIHRoaXMucG9wdXAuYXV0b1NlbGVjdCA9IHRoaXMuYXV0b1NlbGVjdDsKCiAgICAgICAgdGhpcy5wb3B1cC5zZXREYXRhKHRoaXMuY29tcGxldGlvbnMuZmlsdGVyZWQsIHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dCk7CgogICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLmFkZEtleWJvYXJkSGFuZGxlcih0aGlzLmtleWJvYXJkSGFuZGxlcik7CiAgICAgICAgCiAgICAgICAgdmFyIHJlbmRlcmVyID0gZWRpdG9yLnJlbmRlcmVyOwogICAgICAgIHRoaXMucG9wdXAuc2V0Um93KHRoaXMuYXV0b1NlbGVjdCA/IDAgOiAtMSk7CiAgICAgICAgaWYgKCFrZWVwUG9wdXBQb3NpdGlvbikgewogICAgICAgICAgICB0aGlzLnBvcHVwLnNldFRoZW1lKGVkaXRvci5nZXRUaGVtZSgpKTsKICAgICAgICAgICAgdGhpcy5wb3B1cC5zZXRGb250U2l6ZShlZGl0b3IuZ2V0Rm9udFNpemUoKSk7CgogICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9IHJlbmRlcmVyLmxheWVyQ29uZmlnLmxpbmVIZWlnaHQ7CgogICAgICAgICAgICB2YXIgcG9zID0gcmVuZGVyZXIuJGN1cnNvckxheWVyLmdldFBpeGVsUG9zaXRpb24odGhpcy5iYXNlLCB0cnVlKTsKICAgICAgICAgICAgcG9zLmxlZnQgLT0gdGhpcy5wb3B1cC5nZXRUZXh0TGVmdE9mZnNldCgpOwoKICAgICAgICAgICAgdmFyIHJlY3QgPSBlZGl0b3IuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICBwb3MudG9wICs9IHJlY3QudG9wIC0gcmVuZGVyZXIubGF5ZXJDb25maWcub2Zmc2V0OwogICAgICAgICAgICBwb3MubGVmdCArPSByZWN0LmxlZnQgLSBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsTGVmdDsKICAgICAgICAgICAgcG9zLmxlZnQgKz0gcmVuZGVyZXIuZ3V0dGVyV2lkdGg7CgogICAgICAgICAgICB0aGlzLnBvcHVwLnNob3cocG9zLCBsaW5lSGVpZ2h0KTsKICAgICAgICB9IGVsc2UgaWYgKGtlZXBQb3B1cFBvc2l0aW9uICYmICFwcmVmaXgpIHsKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5yZW1vdmVLZXlib2FyZEhhbmRsZXIodGhpcy5rZXlib2FyZEhhbmRsZXIpOwogICAgICAgIHRoaXMuZWRpdG9yLm9mZigiY2hhbmdlU2VsZWN0aW9uIiwgdGhpcy5jaGFuZ2VMaXN0ZW5lcik7CiAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKCJibHVyIiwgdGhpcy5ibHVyTGlzdGVuZXIpOwogICAgICAgIHRoaXMuZWRpdG9yLm9mZigibW91c2Vkb3duIiwgdGhpcy5tb3VzZWRvd25MaXN0ZW5lcik7CiAgICAgICAgdGhpcy5lZGl0b3Iub2ZmKCJtb3VzZXdoZWVsIiwgdGhpcy5tb3VzZXdoZWVsTGlzdGVuZXIpOwogICAgICAgIHRoaXMuY2hhbmdlVGltZXIuY2FuY2VsKCk7CiAgICAgICAgdGhpcy5oaWRlRG9jVG9vbHRpcCgpOwoKICAgICAgICB0aGlzLmdhdGhlckNvbXBsZXRpb25zSWQgKz0gMTsKICAgICAgICBpZiAodGhpcy5wb3B1cCAmJiB0aGlzLnBvcHVwLmlzT3BlbikKICAgICAgICAgICAgdGhpcy5wb3B1cC5oaWRlKCk7CgogICAgICAgIGlmICh0aGlzLmJhc2UpCiAgICAgICAgICAgIHRoaXMuYmFzZS5kZXRhY2goKTsKICAgICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlOwogICAgICAgIHRoaXMuY29tcGxldGlvbnMgPSB0aGlzLmJhc2UgPSBudWxsOwogICAgfTsKCiAgICB0aGlzLmNoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBjdXJzb3IgPSB0aGlzLmVkaXRvci5zZWxlY3Rpb24ubGVhZDsKICAgICAgICBpZiAoY3Vyc29yLnJvdyAhPSB0aGlzLmJhc2Uucm93IHx8IGN1cnNvci5jb2x1bW4gPCB0aGlzLmJhc2UuY29sdW1uKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmFjdGl2YXRlZCkKICAgICAgICAgICAgdGhpcy5jaGFuZ2VUaW1lci5zY2hlZHVsZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKICAgIH07CgogICAgdGhpcy5ibHVyTGlzdGVuZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgICAgICB2YXIgdGV4dCA9IHRoaXMuZWRpdG9yLnRleHRJbnB1dC5nZXRFbGVtZW50KCk7CiAgICAgICAgdmFyIGZyb21Ub29sdGlwID0gZS5yZWxhdGVkVGFyZ2V0ICYmIHRoaXMudG9vbHRpcE5vZGUgJiYgdGhpcy50b29sdGlwTm9kZS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpOwogICAgICAgIHZhciBjb250YWluZXIgPSB0aGlzLnBvcHVwICYmIHRoaXMucG9wdXAuY29udGFpbmVyOwogICAgICAgIGlmIChlbCAhPSB0ZXh0ICYmIGVsLnBhcmVudE5vZGUgIT0gY29udGFpbmVyICYmICFmcm9tVG9vbHRpcAogICAgICAgICAgICAmJiBlbCAhPSB0aGlzLnRvb2x0aXBOb2RlICYmIGUucmVsYXRlZFRhcmdldCAhPSB0ZXh0CiAgICAgICAgKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLm1vdXNlZG93bkxpc3RlbmVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwoKICAgIHRoaXMubW91c2V3aGVlbExpc3RlbmVyID0gZnVuY3Rpb24oZSkgewogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwoKICAgIHRoaXMuZ29UbyA9IGZ1bmN0aW9uKHdoZXJlKSB7CiAgICAgICAgdGhpcy5wb3B1cC5nb1RvKHdoZXJlKTsKICAgIH07CgogICAgdGhpcy5pbnNlcnRNYXRjaCA9IGZ1bmN0aW9uKGRhdGEsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgIGRhdGEgPSB0aGlzLnBvcHVwLmdldERhdGEodGhpcy5wb3B1cC5nZXRSb3coKSk7CiAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGlmIChkYXRhLmNvbXBsZXRlciAmJiBkYXRhLmNvbXBsZXRlci5pbnNlcnRNYXRjaCkgewogICAgICAgICAgICBkYXRhLmNvbXBsZXRlci5pbnNlcnRNYXRjaCh0aGlzLmVkaXRvciwgZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dCkgewogICAgICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5nZXRBbGxSYW5nZXMoKTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByYW5nZTsgcmFuZ2UgPSByYW5nZXNbaV07IGkrKykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLnN0YXJ0LmNvbHVtbiAtPSB0aGlzLmNvbXBsZXRpb25zLmZpbHRlclRleHQubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZGF0YS5zbmlwcGV0KQogICAgICAgICAgICAgICAgc25pcHBldE1hbmFnZXIuaW5zZXJ0U25pcHBldCh0aGlzLmVkaXRvciwgZGF0YS5zbmlwcGV0KTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoImluc2VydHN0cmluZyIsIGRhdGEudmFsdWUgfHwgZGF0YSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICB9OwoKCiAgICB0aGlzLmNvbW1hbmRzID0gewogICAgICAgICJVcCI6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tcGxldGVyLmdvVG8oInVwIik7IH0sCiAgICAgICAgIkRvd24iOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbXBsZXRlci5nb1RvKCJkb3duIik7IH0sCiAgICAgICAgIkN0cmwtVXB8Q3RybC1Ib21lIjogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb21wbGV0ZXIuZ29Ubygic3RhcnQiKTsgfSwKICAgICAgICAiQ3RybC1Eb3dufEN0cmwtRW5kIjogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb21wbGV0ZXIuZ29UbygiZW5kIik7IH0sCgogICAgICAgICJFc2MiOiBmdW5jdGlvbihlZGl0b3IpIHsgZWRpdG9yLmNvbXBsZXRlci5kZXRhY2goKTsgfSwKICAgICAgICAiUmV0dXJuIjogZnVuY3Rpb24oZWRpdG9yKSB7IHJldHVybiBlZGl0b3IuY29tcGxldGVyLmluc2VydE1hdGNoKCk7IH0sCiAgICAgICAgIlNoaWZ0LVJldHVybiI6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tcGxldGVyLmluc2VydE1hdGNoKG51bGwsIHtkZWxldGVTdWZmaXg6IHRydWV9KTsgfSwKICAgICAgICAiVGFiIjogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlZGl0b3IuY29tcGxldGVyLmluc2VydE1hdGNoKCk7CiAgICAgICAgICAgIGlmICghcmVzdWx0ICYmICFlZGl0b3IudGFic3RvcE1hbmFnZXIpCiAgICAgICAgICAgICAgICBlZGl0b3IuY29tcGxldGVyLmdvVG8oImRvd24iKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9LAoKICAgICAgICAiUGFnZVVwIjogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5jb21wbGV0ZXIucG9wdXAuZ290b1BhZ2VVcCgpOyB9LAogICAgICAgICJQYWdlRG93biI6IGZ1bmN0aW9uKGVkaXRvcikgeyBlZGl0b3IuY29tcGxldGVyLnBvcHVwLmdvdG9QYWdlRG93bigpOyB9CiAgICB9OwoKICAgIHRoaXMuZ2F0aGVyQ29tcGxldGlvbnMgPSBmdW5jdGlvbihlZGl0b3IsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIHNlc3Npb24gPSBlZGl0b3IuZ2V0U2Vzc2lvbigpOwogICAgICAgIHZhciBwb3MgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKCiAgICAgICAgdmFyIHByZWZpeCA9IHV0aWwuZ2V0Q29tcGxldGlvblByZWZpeChlZGl0b3IpOwoKICAgICAgICB0aGlzLmJhc2UgPSBzZXNzaW9uLmRvYy5jcmVhdGVBbmNob3IocG9zLnJvdywgcG9zLmNvbHVtbiAtIHByZWZpeC5sZW5ndGgpOwogICAgICAgIHRoaXMuYmFzZS4kaW5zZXJ0UmlnaHQgPSB0cnVlOwoKICAgICAgICB2YXIgbWF0Y2hlcyA9IFtdOwogICAgICAgIHZhciB0b3RhbCA9IGVkaXRvci5jb21wbGV0ZXJzLmxlbmd0aDsKICAgICAgICBlZGl0b3IuY29tcGxldGVycy5mb3JFYWNoKGZ1bmN0aW9uKGNvbXBsZXRlciwgaSkgewogICAgICAgICAgICBjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoZWRpdG9yLCBzZXNzaW9uLCBwb3MsIHByZWZpeCwgZnVuY3Rpb24oZXJyLCByZXN1bHRzKSB7CiAgICAgICAgICAgICAgICBpZiAoIWVyciAmJiByZXN1bHRzKQogICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLmNvbmNhdChyZXN1bHRzKTsKICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHsKICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IHV0aWwuZ2V0Q29tcGxldGlvblByZWZpeChlZGl0b3IpLAogICAgICAgICAgICAgICAgICAgIG1hdGNoZXM6IG1hdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQ6ICgtLXRvdGFsID09PSAwKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLnNob3dQb3B1cCA9IGZ1bmN0aW9uKGVkaXRvciwgb3B0aW9ucykgewogICAgICAgIGlmICh0aGlzLmVkaXRvcikKICAgICAgICAgICAgdGhpcy5kZXRhY2goKTsKCiAgICAgICAgdGhpcy5hY3RpdmF0ZWQgPSB0cnVlOwoKICAgICAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjsKICAgICAgICBpZiAoZWRpdG9yLmNvbXBsZXRlciAhPSB0aGlzKSB7CiAgICAgICAgICAgIGlmIChlZGl0b3IuY29tcGxldGVyKQogICAgICAgICAgICAgICAgZWRpdG9yLmNvbXBsZXRlci5kZXRhY2goKTsKICAgICAgICAgICAgZWRpdG9yLmNvbXBsZXRlciA9IHRoaXM7CiAgICAgICAgfQoKICAgICAgICBlZGl0b3Iub24oImNoYW5nZVNlbGVjdGlvbiIsIHRoaXMuY2hhbmdlTGlzdGVuZXIpOwogICAgICAgIGVkaXRvci5vbigiYmx1ciIsIHRoaXMuYmx1ckxpc3RlbmVyKTsKICAgICAgICBlZGl0b3Iub24oIm1vdXNlZG93biIsIHRoaXMubW91c2Vkb3duTGlzdGVuZXIpOwogICAgICAgIGVkaXRvci5vbigibW91c2V3aGVlbCIsIHRoaXMubW91c2V3aGVlbExpc3RlbmVyKTsKCiAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0aW9ucyhmYWxzZSwgb3B0aW9ucyk7CiAgICB9OwoKICAgIHRoaXMudXBkYXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihrZWVwUG9wdXBQb3NpdGlvbiwgb3B0aW9ucykgewogICAgICAgIGlmIChrZWVwUG9wdXBQb3NpdGlvbiAmJiB0aGlzLmJhc2UgJiYgdGhpcy5jb21wbGV0aW9ucykgewogICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5lZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIHByZWZpeCA9IHRoaXMuZWRpdG9yLnNlc3Npb24uZ2V0VGV4dFJhbmdlKHtzdGFydDogdGhpcy5iYXNlLCBlbmQ6IHBvc30pOwogICAgICAgICAgICBpZiAocHJlZml4ID09IHRoaXMuY29tcGxldGlvbnMuZmlsdGVyVGV4dCkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdGhpcy5jb21wbGV0aW9ucy5zZXRGaWx0ZXIocHJlZml4KTsKICAgICAgICAgICAgaWYgKCF0aGlzLmNvbXBsZXRpb25zLmZpbHRlcmVkLmxlbmd0aCkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRldGFjaCgpOwogICAgICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZC5sZW5ndGggPT0gMQogICAgICAgICAgICAmJiB0aGlzLmNvbXBsZXRpb25zLmZpbHRlcmVkWzBdLnZhbHVlID09IHByZWZpeAogICAgICAgICAgICAmJiAhdGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZFswXS5zbmlwcGV0KQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgICAgIHRoaXMub3BlblBvcHVwKHRoaXMuZWRpdG9yLCBwcmVmaXgsIGtlZXBQb3B1cFBvc2l0aW9uKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1hdGNoZXMpIHsKICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMuZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHRoaXMuYmFzZSA9IHRoaXMuZWRpdG9yLnNlc3Npb24uZG9jLmNyZWF0ZUFuY2hvcihwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgdGhpcy5iYXNlLiRpbnNlcnRSaWdodCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuY29tcGxldGlvbnMgPSBuZXcgRmlsdGVyZWRMaXN0KG9wdGlvbnMubWF0Y2hlcyk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5Qb3B1cCh0aGlzLmVkaXRvciwgIiIsIGtlZXBQb3B1cFBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgdmFyIF9pZCA9IHRoaXMuZ2F0aGVyQ29tcGxldGlvbnNJZDsKICAgICAgICB0aGlzLmdhdGhlckNvbXBsZXRpb25zKHRoaXMuZWRpdG9yLCBmdW5jdGlvbihlcnIsIHJlc3VsdHMpIHsKICAgICAgICAgICAgdmFyIGRldGFjaElmRmluaXNoZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cy5maW5pc2hlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgICAgIH0uYmluZCh0aGlzKTsKCiAgICAgICAgICAgIHZhciBwcmVmaXggPSByZXN1bHRzLnByZWZpeDsKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSByZXN1bHRzICYmIHJlc3VsdHMubWF0Y2hlczsKCiAgICAgICAgICAgIGlmICghbWF0Y2hlcyB8fCAhbWF0Y2hlcy5sZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWNoSWZGaW5pc2hlZCgpOwogICAgICAgICAgICBpZiAocHJlZml4LmluZGV4T2YocmVzdWx0cy5wcmVmaXgpICE9PSAwIHx8IF9pZCAhPSB0aGlzLmdhdGhlckNvbXBsZXRpb25zSWQpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25zID0gbmV3IEZpbHRlcmVkTGlzdChtYXRjaGVzKTsKCiAgICAgICAgICAgIGlmICh0aGlzLmV4YWN0TWF0Y2gpCiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25zLmV4YWN0TWF0Y2ggPSB0cnVlOwoKICAgICAgICAgICAgdGhpcy5jb21wbGV0aW9ucy5zZXRGaWx0ZXIocHJlZml4KTsKICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gdGhpcy5jb21wbGV0aW9ucy5maWx0ZXJlZDsKICAgICAgICAgICAgaWYgKCFmaWx0ZXJlZC5sZW5ndGgpCiAgICAgICAgICAgICAgICByZXR1cm4gZGV0YWNoSWZGaW5pc2hlZCgpOwogICAgICAgICAgICBpZiAoZmlsdGVyZWQubGVuZ3RoID09IDEgJiYgZmlsdGVyZWRbMF0udmFsdWUgPT0gcHJlZml4ICYmICFmaWx0ZXJlZFswXS5zbmlwcGV0KQogICAgICAgICAgICAgICAgcmV0dXJuIGRldGFjaElmRmluaXNoZWQoKTsKICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0luc2VydCAmJiBmaWx0ZXJlZC5sZW5ndGggPT0gMSAmJiByZXN1bHRzLmZpbmlzaGVkKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWF0Y2goZmlsdGVyZWRbMF0pOwoKICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAodGhpcy5lZGl0b3IsIHByZWZpeCwga2VlcFBvcHVwUG9zaXRpb24pOwogICAgICAgIH0uYmluZCh0aGlzKSk7CiAgICB9OwoKICAgIHRoaXMuY2FuY2VsQ29udGV4dE1lbnUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmVkaXRvci4kbW91c2VIYW5kbGVyLmNhbmNlbENvbnRleHRNZW51KCk7CiAgICB9OwoKICAgIHRoaXMudXBkYXRlRG9jVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBwb3B1cCA9IHRoaXMucG9wdXA7CiAgICAgICAgdmFyIGFsbCA9IHBvcHVwLmRhdGE7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gYWxsICYmIChhbGxbcG9wdXAuZ2V0SG92ZXJlZFJvdygpXSB8fCBhbGxbcG9wdXAuZ2V0Um93KCldKTsKICAgICAgICB2YXIgZG9jID0gbnVsbDsKICAgICAgICBpZiAoIXNlbGVjdGVkIHx8ICF0aGlzLmVkaXRvciB8fCAhdGhpcy5wb3B1cC5pc09wZW4pCiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZGVEb2NUb29sdGlwKCk7CiAgICAgICAgdGhpcy5lZGl0b3IuY29tcGxldGVycy5zb21lKGZ1bmN0aW9uKGNvbXBsZXRlcikgewogICAgICAgICAgICBpZiAoY29tcGxldGVyLmdldERvY1Rvb2x0aXApCiAgICAgICAgICAgICAgICBkb2MgPSBjb21wbGV0ZXIuZ2V0RG9jVG9vbHRpcChzZWxlY3RlZCk7CiAgICAgICAgICAgIHJldHVybiBkb2M7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFkb2MgJiYgdHlwZW9mIHNlbGVjdGVkICE9ICJzdHJpbmciKQogICAgICAgICAgICBkb2MgPSBzZWxlY3RlZDsKCiAgICAgICAgaWYgKHR5cGVvZiBkb2MgPT0gInN0cmluZyIpCiAgICAgICAgICAgIGRvYyA9IHtkb2NUZXh0OiBkb2N9OwogICAgICAgIGlmICghZG9jIHx8ICEoZG9jLmRvY0hUTUwgfHwgZG9jLmRvY1RleHQpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5oaWRlRG9jVG9vbHRpcCgpOwogICAgICAgIHRoaXMuc2hvd0RvY1Rvb2x0aXAoZG9jKTsKICAgIH07CgogICAgdGhpcy5zaG93RG9jVG9vbHRpcCA9IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICBpZiAoIXRoaXMudG9vbHRpcE5vZGUpIHsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZSA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZS5jbGFzc05hbWUgPSAiYWNlX3Rvb2x0aXAgYWNlX2RvYy10b29sdGlwIjsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZS5zdHlsZS5tYXJnaW4gPSAwOwogICAgICAgICAgICB0aGlzLnRvb2x0aXBOb2RlLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAiYXV0byI7CiAgICAgICAgICAgIHRoaXMudG9vbHRpcE5vZGUudGFiSW5kZXggPSAtMTsKICAgICAgICAgICAgdGhpcy50b29sdGlwTm9kZS5vbmJsdXIgPSB0aGlzLmJsdXJMaXN0ZW5lci5iaW5kKHRoaXMpOwogICAgICAgICAgICB0aGlzLnRvb2x0aXBOb2RlLm9uY2xpY2sgPSB0aGlzLm9uVG9vbHRpcENsaWNrLmJpbmQodGhpcyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgdG9vbHRpcE5vZGUgPSB0aGlzLnRvb2x0aXBOb2RlOwogICAgICAgIGlmIChpdGVtLmRvY0hUTUwpIHsKICAgICAgICAgICAgdG9vbHRpcE5vZGUuaW5uZXJIVE1MID0gaXRlbS5kb2NIVE1MOwogICAgICAgIH0gZWxzZSBpZiAoaXRlbS5kb2NUZXh0KSB7CiAgICAgICAgICAgIHRvb2x0aXBOb2RlLnRleHRDb250ZW50ID0gaXRlbS5kb2NUZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0b29sdGlwTm9kZS5wYXJlbnROb2RlKQogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2x0aXBOb2RlKTsKICAgICAgICB2YXIgcG9wdXAgPSB0aGlzLnBvcHVwOwogICAgICAgIHZhciByZWN0ID0gcG9wdXAuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIHRvb2x0aXBOb2RlLnN0eWxlLnRvcCA9IHBvcHVwLmNvbnRhaW5lci5zdHlsZS50b3A7CiAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUuYm90dG9tID0gcG9wdXAuY29udGFpbmVyLnN0eWxlLmJvdHRvbTsKCiAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIC0gcmVjdC5yaWdodCA8IDMyMCkgewogICAgICAgICAgICBpZiAocmVjdC5sZWZ0IDwgMzIwKSB7CiAgICAgICAgICAgICAgICBpZihwb3B1cC5pc1RvcGRvd24pIHsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS50b3AgPSByZWN0LmJvdHRvbSArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS5ib3R0b20gPSAiIjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUudG9wID0gcG9wdXAuY29udGFpbmVyLm9mZnNldFRvcCAtIHRvb2x0aXBOb2RlLm9mZnNldEhlaWdodCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9IHJlY3QubGVmdCArICJweCI7CiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUucmlnaHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS5ib3R0b20gPSAiIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRvb2x0aXBOb2RlLnN0eWxlLnJpZ2h0ID0gd2luZG93LmlubmVyV2lkdGggLSByZWN0LmxlZnQgKyAicHgiOwogICAgICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9ICIiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG9vbHRpcE5vZGUuc3R5bGUubGVmdCA9IChyZWN0LnJpZ2h0ICsgMSkgKyAicHgiOwogICAgICAgICAgICB0b29sdGlwTm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5oaWRlRG9jVG9vbHRpcCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMudG9vbHRpcFRpbWVyLmNhbmNlbCgpOwogICAgICAgIGlmICghdGhpcy50b29sdGlwTm9kZSkgcmV0dXJuOwogICAgICAgIHZhciBlbCA9IHRoaXMudG9vbHRpcE5vZGU7CiAgICAgICAgaWYgKCF0aGlzLmVkaXRvci5pc0ZvY3VzZWQoKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsKQogICAgICAgICAgICB0aGlzLmVkaXRvci5mb2N1cygpOwogICAgICAgIHRoaXMudG9vbHRpcE5vZGUgPSBudWxsOwogICAgICAgIGlmIChlbC5wYXJlbnROb2RlKQogICAgICAgICAgICBlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsKTsKICAgIH07CiAgICAKICAgIHRoaXMub25Ub29sdGlwQ2xpY2sgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdmFyIGEgPSBlLnRhcmdldDsKICAgICAgICB3aGlsZSAoYSAmJiBhICE9IHRoaXMudG9vbHRpcE5vZGUpIHsKICAgICAgICAgICAgaWYgKGEubm9kZU5hbWUgPT0gIkEiICYmIGEuaHJlZikgewogICAgICAgICAgICAgICAgYS5yZWwgPSAibm9yZWZlcnJlciI7CiAgICAgICAgICAgICAgICBhLnRhcmdldCA9ICJfYmxhbmsiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYSA9IGEucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuZGV0YWNoKCk7CiAgICAgICAgaWYgKHRoaXMucG9wdXApIHsKICAgICAgICAgICAgdGhpcy5wb3B1cC5kZXN0cm95KCk7CiAgICAgICAgICAgIHZhciBlbCA9IHRoaXMucG9wdXAuY29udGFpbmVyOwogICAgICAgICAgICBpZiAoZWwgJiYgZWwucGFyZW50Tm9kZSkKICAgICAgICAgICAgICAgIGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IuY29tcGxldGVyID09IHRoaXMpCiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNvbXBsZXRlciA9PSBudWxsOwogICAgICAgIHRoaXMucG9wdXAgPSBudWxsOwogICAgfTsKCn0pLmNhbGwoQXV0b2NvbXBsZXRlLnByb3RvdHlwZSk7CgoKQXV0b2NvbXBsZXRlLmZvciA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgaWYgKGVkaXRvci5jb21wbGV0ZXIpIHsKICAgICAgICByZXR1cm4gZWRpdG9yLmNvbXBsZXRlcjsKICAgIH0KICAgIGlmIChjb25maWcuZ2V0KCJzaGFyZWRQb3B1cHMiKSkgewogICAgICAgIGlmICghQXV0b2NvbXBsZXRlLiRzaGFyZWQpCiAgICAgICAgICAgIEF1dG9jb21wbGV0ZS4kc2hhcmVkSW5zdGFuY2UgPSBuZXcgQXV0b2NvbXBsZXRlKCk7CiAgICAgICAgZWRpdG9yLmNvbXBsZXRlciA9IEF1dG9jb21wbGV0ZS4kc2hhcmVkSW5zdGFuY2U7CiAgICB9IGVsc2UgewogICAgICAgIGVkaXRvci5jb21wbGV0ZXIgPSBuZXcgQXV0b2NvbXBsZXRlKCk7CiAgICAgICAgZWRpdG9yLm9uY2UoImRlc3Ryb3kiLCBmdW5jdGlvbihlLCBlZGl0b3IpIHsKICAgICAgICAgICAgZWRpdG9yLmNvbXBsZXRlci5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gZWRpdG9yLmNvbXBsZXRlcjsKfTsKCkF1dG9jb21wbGV0ZS5zdGFydENvbW1hbmQgPSB7CiAgICBuYW1lOiAic3RhcnRBdXRvY29tcGxldGUiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGNvbXBsZXRlciA9IEF1dG9jb21wbGV0ZS5mb3IoZWRpdG9yKTsKICAgICAgICBjb21wbGV0ZXIuYXV0b0luc2VydCA9IGZhbHNlOwogICAgICAgIGNvbXBsZXRlci5hdXRvU2VsZWN0ID0gdHJ1ZTsKICAgICAgICBjb21wbGV0ZXIuc2hvd1BvcHVwKGVkaXRvciwgb3B0aW9ucyk7CiAgICAgICAgY29tcGxldGVyLmNhbmNlbENvbnRleHRNZW51KCk7CiAgICB9LAogICAgYmluZEtleTogIkN0cmwtU3BhY2V8Q3RybC1TaGlmdC1TcGFjZXxBbHQtU3BhY2UiCn07Cgp2YXIgRmlsdGVyZWRMaXN0ID0gZnVuY3Rpb24oYXJyYXksIGZpbHRlclRleHQpIHsKICAgIHRoaXMuYWxsID0gYXJyYXk7CiAgICB0aGlzLmZpbHRlcmVkID0gYXJyYXk7CiAgICB0aGlzLmZpbHRlclRleHQgPSBmaWx0ZXJUZXh0IHx8ICIiOwogICAgdGhpcy5leGFjdE1hdGNoID0gZmFsc2U7Cn07CihmdW5jdGlvbigpewogICAgdGhpcy5zZXRGaWx0ZXIgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IHRoaXMuZmlsdGVyVGV4dCAmJiBzdHIubGFzdEluZGV4T2YodGhpcy5maWx0ZXJUZXh0LCAwKSA9PT0gMCkKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLmZpbHRlcmVkOwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSB0aGlzLmFsbDsKCiAgICAgICAgdGhpcy5maWx0ZXJUZXh0ID0gc3RyOwogICAgICAgIG1hdGNoZXMgPSB0aGlzLmZpbHRlckNvbXBsZXRpb25zKG1hdGNoZXMsIHRoaXMuZmlsdGVyVGV4dCk7CiAgICAgICAgbWF0Y2hlcyA9IG1hdGNoZXMuc29ydChmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgICAgIHJldHVybiBiLmV4YWN0TWF0Y2ggLSBhLmV4YWN0TWF0Y2ggfHwgYi4kc2NvcmUgLSBhLiRzY29yZSAKICAgICAgICAgICAgICAgIHx8IChhLmNhcHRpb24gfHwgYS52YWx1ZSkubG9jYWxlQ29tcGFyZShiLmNhcHRpb24gfHwgYi52YWx1ZSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIHByZXYgPSBudWxsOwogICAgICAgIG1hdGNoZXMgPSBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbihpdGVtKXsKICAgICAgICAgICAgdmFyIGNhcHRpb24gPSBpdGVtLnNuaXBwZXQgfHwgaXRlbS5jYXB0aW9uIHx8IGl0ZW0udmFsdWU7CiAgICAgICAgICAgIGlmIChjYXB0aW9uID09PSBwcmV2KSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHByZXYgPSBjYXB0aW9uOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5maWx0ZXJlZCA9IG1hdGNoZXM7CiAgICB9OwogICAgdGhpcy5maWx0ZXJDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKGl0ZW1zLCBuZWVkbGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgICAgIHZhciB1cHBlciA9IG5lZWRsZS50b1VwcGVyQ2FzZSgpOwogICAgICAgIHZhciBsb3dlciA9IG5lZWRsZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGxvb3A6IGZvciAodmFyIGkgPSAwLCBpdGVtOyBpdGVtID0gaXRlbXNbaV07IGkrKykgewogICAgICAgICAgICB2YXIgY2FwdGlvbiA9IGl0ZW0uY2FwdGlvbiB8fCBpdGVtLnZhbHVlIHx8IGl0ZW0uc25pcHBldDsKICAgICAgICAgICAgaWYgKCFjYXB0aW9uKSBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGxhc3RJbmRleCA9IC0xOwogICAgICAgICAgICB2YXIgbWF0Y2hNYXNrID0gMDsKICAgICAgICAgICAgdmFyIHBlbmFsdHkgPSAwOwogICAgICAgICAgICB2YXIgaW5kZXgsIGRpc3RhbmNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuZXhhY3RNYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG5lZWRsZSAhPT0gY2FwdGlvbi5zdWJzdHIoMCwgbmVlZGxlLmxlbmd0aCkpCiAgICAgICAgICAgICAgICAgICAgY29udGludWUgbG9vcDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBmdWxsTWF0Y2hJbmRleCA9IGNhcHRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGxvd2VyKTsKICAgICAgICAgICAgICAgIGlmIChmdWxsTWF0Y2hJbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcGVuYWx0eSA9IGZ1bGxNYXRjaEluZGV4OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5lZWRsZS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTEgPSBjYXB0aW9uLmluZGV4T2YobG93ZXJbal0sIGxhc3RJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTIgPSBjYXB0aW9uLmluZGV4T2YodXBwZXJbal0sIGxhc3RJbmRleCArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IChpMSA+PSAwKSA/ICgoaTIgPCAwIHx8IGkxIDwgaTIpID8gaTEgOiBpMikgOiBpMjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gaW5kZXggLSBsYXN0SW5kZXggLSAxOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEluZGV4ID09PSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5hbHR5ICs9IDEwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuYWx0eSArPSBkaXN0YW5jZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTWFzayA9IG1hdGNoTWFzayB8ICgxIDw8IGopOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IGluZGV4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpdGVtLm1hdGNoTWFzayA9IG1hdGNoTWFzazsKICAgICAgICAgICAgaXRlbS5leGFjdE1hdGNoID0gcGVuYWx0eSA/IDAgOiAxOwogICAgICAgICAgICBpdGVtLiRzY29yZSA9IChpdGVtLnNjb3JlIHx8IDApIC0gcGVuYWx0eTsKICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGl0ZW0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgIH07Cn0pLmNhbGwoRmlsdGVyZWRMaXN0LnByb3RvdHlwZSk7CgpleHBvcnRzLkF1dG9jb21wbGV0ZSA9IEF1dG9jb21wbGV0ZTsKZXhwb3J0cy5GaWx0ZXJlZExpc3QgPSBGaWx0ZXJlZExpc3Q7Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9tZW51X3Rvb2xzL292ZXJsYXlfcGFnZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewondXNlIHN0cmljdCc7CnZhciBkb20gPSByZXF1aXJlKCIuLi8uLi9saWIvZG9tIik7CnZhciBjc3NUZXh0ID0gIiNhY2Vfc2V0dGluZ3NtZW51LCAja2JzaG9ydGN1dG1lbnUge1wKYmFja2dyb3VuZC1jb2xvcjogI0Y3RjdGNztcCmNvbG9yOiBibGFjaztcCmJveC1zaGFkb3c6IC01cHggNHB4IDVweCByZ2JhKDEyNiwgMTI2LCAxMjYsIDAuNTUpO1wKcGFkZGluZzogMWVtIDAuNWVtIDJlbSAxZW07XApvdmVyZmxvdzogYXV0bztcCnBvc2l0aW9uOiBhYnNvbHV0ZTtcCm1hcmdpbjogMDtcCmJvdHRvbTogMDtcCnJpZ2h0OiAwO1wKdG9wOiAwO1wKei1pbmRleDogOTk5MTtcCmN1cnNvcjogZGVmYXVsdDtcCn1cCi5hY2VfZGFyayAjYWNlX3NldHRpbmdzbWVudSwgLmFjZV9kYXJrICNrYnNob3J0Y3V0bWVudSB7XApib3gtc2hhZG93OiAtMjBweCAxMHB4IDI1cHggcmdiYSgxMjYsIDEyNiwgMTI2LCAwLjI1KTtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTtcCmNvbG9yOiBibGFjaztcCn1cCi5hY2Vfb3B0aW9uc01lbnVFbnRyeTpob3ZlciB7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEwMCwgMTAwLCAxMDAsIDAuMSk7XAp0cmFuc2l0aW9uOiBhbGwgMC4zc1wKfVwKLmFjZV9jbG9zZUJ1dHRvbiB7XApiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTQ2LCAxNDYsIDAuNSk7XApib3JkZXI6IDFweCBzb2xpZCAjRjQ4QThBO1wKYm9yZGVyLXJhZGl1czogNTAlO1wKcGFkZGluZzogN3B4O1wKcG9zaXRpb246IGFic29sdXRlO1wKcmlnaHQ6IC04cHg7XAp0b3A6IC04cHg7XAp6LWluZGV4OiAxMDAwMDA7XAp9XAouYWNlX2Nsb3NlQnV0dG9ue1wKYmFja2dyb3VuZDogcmdiYSgyNDUsIDE0NiwgMTQ2LCAwLjkpO1wKfVwKLmFjZV9vcHRpb25zTWVudUtleSB7XApjb2xvcjogZGFya3NsYXRlYmx1ZTtcCmZvbnQtd2VpZ2h0OiBib2xkO1wKfVwKLmFjZV9vcHRpb25zTWVudUNvbW1hbmQge1wKY29sb3I6IGRhcmtjeWFuO1wKZm9udC13ZWlnaHQ6IG5vcm1hbDtcCn1cCi5hY2Vfb3B0aW9uc01lbnVFbnRyeSBpbnB1dCwgLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbiB7XAp2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvblthY2Vfc2VsZWN0ZWRfYnV0dG9uPXRydWVdIHtcCmJhY2tncm91bmQ6ICNlN2U3ZTc7XApib3gtc2hhZG93OiAxcHggMHB4IDJweCAwcHggI2FkYWRhZCBpbnNldDtcCmJvcmRlci1jb2xvcjogI2FkYWRhZDtcCn1cCi5hY2Vfb3B0aW9uc01lbnVFbnRyeSBidXR0b24ge1wKYmFja2dyb3VuZDogd2hpdGU7XApib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7XAptYXJnaW46IDBweDtcCn1cCi5hY2Vfb3B0aW9uc01lbnVFbnRyeSBidXR0b246aG92ZXJ7XApiYWNrZ3JvdW5kOiAjZjBmMGYwO1wKfSI7CmRvbS5pbXBvcnRDc3NTdHJpbmcoY3NzVGV4dCk7Cgptb2R1bGUuZXhwb3J0cy5vdmVybGF5UGFnZSA9IGZ1bmN0aW9uIG92ZXJsYXlQYWdlKGVkaXRvciwgY29udGVudEVsZW1lbnQsIGNhbGxiYWNrKSB7CiAgICB2YXIgY2xvc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB2YXIgaWdub3JlRm9jdXNPdXQgPSBmYWxzZTsKCiAgICBmdW5jdGlvbiBkb2N1bWVudEVzY0xpc3RlbmVyKGUpIHsKICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykgewogICAgICAgICAgICBjbG9zZSgpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgICBpZiAoIWNsb3NlcikgcmV0dXJuOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBkb2N1bWVudEVzY0xpc3RlbmVyKTsKICAgICAgICBjbG9zZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjbG9zZXIpOwogICAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIGNsb3NlciA9IG51bGw7CiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldElnbm9yZUZvY3VzT3V0KGlnbm9yZSkgewogICAgICAgIGlnbm9yZUZvY3VzT3V0ID0gaWdub3JlOwogICAgICAgIGlmIChpZ25vcmUpIHsKICAgICAgICAgICAgY2xvc2VyLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgICAgICAgIGNvbnRlbnRFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAiYXV0byI7CiAgICAgICAgfQogICAgfQoKICAgIGNsb3Nlci5zdHlsZS5jc3NUZXh0ID0gJ21hcmdpbjogMDsgcGFkZGluZzogMDsgJyArCiAgICAgICAgJ3Bvc2l0aW9uOiBmaXhlZDsgdG9wOjA7IGJvdHRvbTowOyBsZWZ0OjA7IHJpZ2h0OjA7JyArCiAgICAgICAgJ3otaW5kZXg6IDk5OTA7ICcgKwogICAgICAgIChlZGl0b3IgPyAnYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjMpOycgOiAnJyk7CiAgICBjbG9zZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKCFpZ25vcmVGb2N1c091dCkgewogICAgICAgICAgICBjbG9zZSgpOwogICAgICAgIH0KICAgIH0pOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGRvY3VtZW50RXNjTGlzdGVuZXIpOwoKICAgIGNvbnRlbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfSk7CgogICAgY2xvc2VyLmFwcGVuZENoaWxkKGNvbnRlbnRFbGVtZW50KTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2xvc2VyKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgICBlZGl0b3IuYmx1cigpOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICBjbG9zZTogY2xvc2UsCiAgICAgICAgc2V0SWdub3JlRm9jdXNPdXQ6IHNldElnbm9yZUZvY3VzT3V0CiAgICB9Owp9OwoKfSk7CgpkZWZpbmUoImFjZS9leHQvbW9kZWxpc3QiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBtb2RlcyA9IFtdOwpmdW5jdGlvbiBnZXRNb2RlRm9yUGF0aChwYXRoKSB7CiAgICB2YXIgbW9kZSA9IG1vZGVzQnlOYW1lLnRleHQ7CiAgICB2YXIgZmlsZU5hbWUgPSBwYXRoLnNwbGl0KC9bXC9cXF0vKS5wb3AoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobW9kZXNbaV0uc3VwcG9ydHNGaWxlKGZpbGVOYW1lKSkgewogICAgICAgICAgICBtb2RlID0gbW9kZXNbaV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBtb2RlOwp9Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKG5hbWUsIGNhcHRpb24sIGV4dGVuc2lvbnMpIHsKICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICB0aGlzLmNhcHRpb24gPSBjYXB0aW9uOwogICAgdGhpcy5tb2RlID0gImFjZS9tb2RlLyIgKyBuYW1lOwogICAgdGhpcy5leHRlbnNpb25zID0gZXh0ZW5zaW9uczsKICAgIHZhciByZTsKICAgIGlmICgvXF4vLnRlc3QoZXh0ZW5zaW9ucykpIHsKICAgICAgICByZSA9IGV4dGVuc2lvbnMucmVwbGFjZSgvXHwoXF4pPy9nLCBmdW5jdGlvbihhLCBiKXsKICAgICAgICAgICAgcmV0dXJuICIkfCIgKyAoYiA/ICJeIiA6ICJeLipcXC4iKTsKICAgICAgICB9KSArICIkIjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmUgPSAiXi4qXFwuKCIgKyBleHRlbnNpb25zICsgIikkIjsKICAgIH0KCiAgICB0aGlzLmV4dFJlID0gbmV3IFJlZ0V4cChyZSwgImdpIik7Cn07CgpNb2RlLnByb3RvdHlwZS5zdXBwb3J0c0ZpbGUgPSBmdW5jdGlvbihmaWxlbmFtZSkgewogICAgcmV0dXJuIGZpbGVuYW1lLm1hdGNoKHRoaXMuZXh0UmUpOwp9Owp2YXIgc3VwcG9ydGVkTW9kZXMgPSB7CiAgICBBQkFQOiAgICAgICAgWyJhYmFwIl0sCiAgICBBQkM6ICAgICAgICAgWyJhYmMiXSwKICAgIEFjdGlvblNjcmlwdDpbImFzIl0sCiAgICBBREE6ICAgICAgICAgWyJhZGF8YWRiIl0sCiAgICBBcGFjaGVfQ29uZjogWyJeaHRhY2Nlc3N8Xmh0Z3JvdXBzfF5odHBhc3N3ZHxeY29uZnxodGFjY2Vzc3xodGdyb3Vwc3xodHBhc3N3ZCJdLAogICAgQXNjaWlEb2M6ICAgIFsiYXNjaWlkb2N8YWRvYyJdLAogICAgQVNMOiAgICAgICAgIFsiZHNsfGFzbCJdLAogICAgQXNzZW1ibHlfeDg2OlsiYXNtfGEiXSwKICAgIEF1dG9Ib3RLZXk6ICBbImFoayJdLAogICAgQXBleDogICAgICAgIFsiYXBleHxjbHN8dHJpZ2dlcnx0Z3IiXSwKICAgIEFRTDogICAgICAgICBbImFxbCJdLAogICAgQmF0Y2hGaWxlOiAgIFsiYmF0fGNtZCJdLAogICAgQ19DcHA6ICAgICAgIFsiY3BwfGN8Y2N8Y3h4fGh8aGh8aHBwfGlubyJdLAogICAgQzlTZWFyY2g6ICAgIFsiYzlzZWFyY2hfcmVzdWx0cyJdLAogICAgQ3J5c3RhbDogICAgIFsiY3IiXSwKICAgIENpcnJ1OiAgICAgICBbImNpcnJ1fGNyIl0sCiAgICBDbG9qdXJlOiAgICAgWyJjbGp8Y2xqcyJdLAogICAgQ29ib2w6ICAgICAgIFsiQ0JMfENPQiJdLAogICAgY29mZmVlOiAgICAgIFsiY29mZmVlfGNmfGNzb258XkNha2VmaWxlIl0sCiAgICBDb2xkRnVzaW9uOiAgWyJjZm0iXSwKICAgIENTaGFycDogICAgICBbImNzIl0sCiAgICBDc291bmRfRG9jdW1lbnQ6IFsiY3NkIl0sCiAgICBDc291bmRfT3JjaGVzdHJhOiBbIm9yYyJdLAogICAgQ3NvdW5kX1Njb3JlOiBbInNjbyJdLAogICAgQ1NTOiAgICAgICAgIFsiY3NzIl0sCiAgICBDdXJseTogICAgICAgWyJjdXJseSJdLAogICAgRDogICAgICAgICAgIFsiZHxkaSJdLAogICAgRGFydDogICAgICAgIFsiZGFydCJdLAogICAgRGlmZjogICAgICAgIFsiZGlmZnxwYXRjaCJdLAogICAgRG9ja2VyZmlsZTogIFsiXkRvY2tlcmZpbGUiXSwKICAgIERvdDogICAgICAgICBbImRvdCJdLAogICAgRHJvb2xzOiAgICAgIFsiZHJsIl0sCiAgICBFZGlmYWN0OiAgICAgWyJlZGkiXSwKICAgIEVpZmZlbDogICAgICBbImV8Z2UiXSwKICAgIEVKUzogICAgICAgICBbImVqcyJdLAogICAgRWxpeGlyOiAgICAgIFsiZXh8ZXhzIl0sCiAgICBFbG06ICAgICAgICAgWyJlbG0iXSwKICAgIEVybGFuZzogICAgICBbImVybHxocmwiXSwKICAgIEZvcnRoOiAgICAgICBbImZydHxmc3xsZHJ8ZnRofDR0aCJdLAogICAgRm9ydHJhbjogICAgIFsiZnxmOTAiXSwKICAgIEZTaGFycDogICAgICBbImZzaXxmc3xtbHxtbGl8ZnN4fGZzc2NyaXB0Il0sCiAgICBGU0w6ICAgICAgICAgWyJmc2wiXSwKICAgIEZUTDogICAgICAgICBbImZ0bCJdLAogICAgR2NvZGU6ICAgICAgIFsiZ2NvZGUiXSwKICAgIEdoZXJraW46ICAgICBbImZlYXR1cmUiXSwKICAgIEdpdGlnbm9yZTogICBbIl4uZ2l0aWdub3JlIl0sCiAgICBHbHNsOiAgICAgICAgWyJnbHNsfGZyYWd8dmVydCJdLAogICAgR29ic3RvbmVzOiAgIFsiZ2JzIl0sCiAgICBnb2xhbmc6ICAgICAgWyJnbyJdLAogICAgR3JhcGhRTFNjaGVtYTogWyJncWwiXSwKICAgIEdyb292eTogICAgICBbImdyb292eSJdLAogICAgSEFNTDogICAgICAgIFsiaGFtbCJdLAogICAgSGFuZGxlYmFyczogIFsiaGJzfGhhbmRsZWJhcnN8dHBsfG11c3RhY2hlIl0sCiAgICBIYXNrZWxsOiAgICAgWyJocyJdLAogICAgSGFza2VsbF9DYWJhbDogWyJjYWJhbCJdLAogICAgaGFYZTogICAgICAgIFsiaHgiXSwKICAgIEhqc29uOiAgICAgICBbImhqc29uIl0sCiAgICBIVE1MOiAgICAgICAgWyJodG1sfGh0bXx4aHRtbHx2dWV8d2V8d3B5Il0sCiAgICBIVE1MX0VsaXhpcjogWyJlZXh8aHRtbC5lZXgiXSwKICAgIEhUTUxfUnVieTogICBbImVyYnxyaHRtbHxodG1sLmVyYiJdLAogICAgSU5JOiAgICAgICAgIFsiaW5pfGNvbmZ8Y2ZnfHByZWZzIl0sCiAgICBJbzogICAgICAgICAgWyJpbyJdLAogICAgSmFjazogICAgICAgIFsiamFjayJdLAogICAgSmFkZTogICAgICAgIFsiamFkZXxwdWciXSwKICAgIEphdmE6ICAgICAgICBbImphdmEiXSwKICAgIEphdmFTY3JpcHQ6ICBbImpzfGpzbXxqc3giXSwKICAgIEpTT046ICAgICAgICBbImpzb24iXSwKICAgIEpTT05pcTogICAgICBbImpxIl0sCiAgICBKU1A6ICAgICAgICAgWyJqc3AiXSwKICAgIEpTU006ICAgICAgICBbImpzc218anNzbV9zdGF0ZSJdLAogICAgSlNYOiAgICAgICAgIFsianN4Il0sCiAgICBKdWxpYTogICAgICAgWyJqbCJdLAogICAgS290bGluOiAgICAgIFsia3R8a3RzIl0sCiAgICBMYVRlWDogICAgICAgWyJ0ZXh8bGF0ZXh8bHR4fGJpYiJdLAogICAgTEVTUzogICAgICAgIFsibGVzcyJdLAogICAgTGlxdWlkOiAgICAgIFsibGlxdWlkIl0sCiAgICBMaXNwOiAgICAgICAgWyJsaXNwIl0sCiAgICBMaXZlU2NyaXB0OiAgWyJscyJdLAogICAgTG9naVFMOiAgICAgIFsibG9naWN8bHFsIl0sCiAgICBMU0w6ICAgICAgICAgWyJsc2wiXSwKICAgIEx1YTogICAgICAgICBbImx1YSJdLAogICAgTHVhUGFnZTogICAgIFsibHAiXSwKICAgIEx1Y2VuZTogICAgICBbImx1Y2VuZSJdLAogICAgTWFrZWZpbGU6ICAgIFsiXk1ha2VmaWxlfF5HTlVtYWtlZmlsZXxebWFrZWZpbGV8Xk9DYW1sTWFrZWZpbGV8bWFrZSJdLAogICAgTWFya2Rvd246ICAgIFsibWR8bWFya2Rvd24iXSwKICAgIE1hc2s6ICAgICAgICBbIm1hc2siXSwKICAgIE1BVExBQjogICAgICBbIm1hdGxhYiJdLAogICAgTWF6ZTogICAgICAgIFsibXoiXSwKICAgIE1FTDogICAgICAgICBbIm1lbCJdLAogICAgTUlYQUw6ICAgICAgIFsibWl4YWwiXSwKICAgIE1VU0hDb2RlOiAgICBbIm1jfG11c2giXSwKICAgIE15U1FMOiAgICAgICBbIm15c3FsIl0sCiAgICBOZ2lueDogICAgICAgWyJuZ2lueHxjb25mIl0sCiAgICBOaXg6ICAgICAgICAgWyJuaXgiXSwKICAgIE5pbTogICAgICAgICBbIm5pbSJdLAogICAgTlNJUzogICAgICAgIFsibnNpfG5zaCJdLAogICAgT2JqZWN0aXZlQzogIFsibXxtbSJdLAogICAgT0NhbWw6ICAgICAgIFsibWx8bWxpIl0sCiAgICBQYXNjYWw6ICAgICAgWyJwYXN8cCJdLAogICAgUGVybDogICAgICAgIFsicGx8cG0iXSwKICAgIFBlcmw2OiAgICAgICBbInA2fHBsNnxwbTYiXSwKICAgIHBnU1FMOiAgICAgICBbInBnc3FsIl0sCiAgICBQSFBfTGFyYXZlbF9ibGFkZTogWyJibGFkZS5waHAiXSwKICAgIFBIUDogICAgICAgICBbInBocHxpbmN8cGh0bWx8c2h0bWx8cGhwM3xwaHA0fHBocDV8cGhwc3xwaHB0fGF3fGN0cHxtb2R1bGUiXSwKICAgIFB1cHBldDogICAgICBbImVwcHxwcCJdLAogICAgUGlnOiAgICAgICAgIFsicGlnIl0sCiAgICBQb3dlcnNoZWxsOiAgWyJwczEiXSwKICAgIFByYWF0OiAgICAgICBbInByYWF0fHByYWF0c2NyaXB0fHBzY3xwcm9jIl0sCiAgICBQcm9sb2c6ICAgICAgWyJwbGd8cHJvbG9nIl0sCiAgICBQcm9wZXJ0aWVzOiAgWyJwcm9wZXJ0aWVzIl0sCiAgICBQcm90b2J1ZjogICAgWyJwcm90byJdLAogICAgUHl0aG9uOiAgICAgIFsicHkiXSwKICAgIFI6ICAgICAgICAgICBbInIiXSwKICAgIFJhem9yOiAgICAgICBbImNzaHRtbHxhc3AiXSwKICAgIFJEb2M6ICAgICAgICBbIlJkIl0sCiAgICBSZWQ6ICAgICAgICAgWyJyZWR8cmVkcyJdLAogICAgUkhUTUw6ICAgICAgIFsiUmh0bWwiXSwKICAgIFJTVDogICAgICAgICBbInJzdCJdLAogICAgUnVieTogICAgICAgIFsicmJ8cnV8Z2Vtc3BlY3xyYWtlfF5HdWFyZGZpbGV8XlJha2VmaWxlfF5HZW1maWxlIl0sCiAgICBSdXN0OiAgICAgICAgWyJycyJdLAogICAgU0FTUzogICAgICAgIFsic2FzcyJdLAogICAgU0NBRDogICAgICAgIFsic2NhZCJdLAogICAgU2NhbGE6ICAgICAgIFsic2NhbGF8c2J0Il0sCiAgICBTY2hlbWU6ICAgICAgWyJzY218c218cmt0fG9ha3xzY2hlbWUiXSwKICAgIFNDU1M6ICAgICAgICBbInNjc3MiXSwKICAgIFNIOiAgICAgICAgICBbInNofGJhc2h8Xi5iYXNocmMiXSwKICAgIFNKUzogICAgICAgICBbInNqcyJdLAogICAgU2xpbTogICAgICAgIFsic2xpbXxza2ltIl0sCiAgICBTbWFydHk6ICAgICAgWyJzbWFydHl8dHBsIl0sCiAgICBzbmlwcGV0czogICAgWyJzbmlwcGV0cyJdLAogICAgU295X1RlbXBsYXRlOlsic295Il0sCiAgICBTcGFjZTogICAgICAgWyJzcGFjZSJdLAogICAgU1FMOiAgICAgICAgIFsic3FsIl0sCiAgICBTUUxTZXJ2ZXI6ICAgWyJzcWxzZXJ2ZXIiXSwKICAgIFN0eWx1czogICAgICBbInN0eWx8c3R5bHVzIl0sCiAgICBTVkc6ICAgICAgICAgWyJzdmciXSwKICAgIFN3aWZ0OiAgICAgICBbInN3aWZ0Il0sCiAgICBUY2w6ICAgICAgICAgWyJ0Y2wiXSwKICAgIFRlcnJhZm9ybTogICBbInRmIiwgInRmdmFycyIsICJ0ZXJyYWdydW50Il0sCiAgICBUZXg6ICAgICAgICAgWyJ0ZXgiXSwKICAgIFRleHQ6ICAgICAgICBbInR4dCJdLAogICAgVGV4dGlsZTogICAgIFsidGV4dGlsZSJdLAogICAgVG9tbDogICAgICAgIFsidG9tbCJdLAogICAgVFNYOiAgICAgICAgIFsidHN4Il0sCiAgICBUd2lnOiAgICAgICAgWyJsYXR0ZXx0d2lnfHN3aWciXSwKICAgIFR5cGVzY3JpcHQ6ICBbInRzfHR5cGVzY3JpcHR8c3RyIl0sCiAgICBWYWxhOiAgICAgICAgWyJ2YWxhIl0sCiAgICBWQlNjcmlwdDogICAgWyJ2YnN8dmIiXSwKICAgIFZlbG9jaXR5OiAgICBbInZtIl0sCiAgICBWZXJpbG9nOiAgICAgWyJ2fHZofHN2fHN2aCJdLAogICAgVkhETDogICAgICAgIFsidmhkfHZoZGwiXSwKICAgIFZpc3VhbGZvcmNlOiBbInZmcHxjb21wb25lbnR8cGFnZSJdLAogICAgV29sbG9rOiAgICAgIFsid2xrfHdwZ218d3Rlc3QiXSwKICAgIFhNTDogICAgICAgICBbInhtbHxyZGZ8cnNzfHdzZGx8eHNsdHxhdG9tfG1hdGhtbHxtbWx8eHVsfHhibHx4YW1sIl0sCiAgICBYUXVlcnk6ICAgICAgWyJ4cSJdLAogICAgWUFNTDogICAgICAgIFsieWFtbHx5bWwiXSwKICAgIFplZWs6ICAgICAgICBbInplZWt8YnJvIl0sCiAgICBEamFuZ286ICAgICAgWyJodG1sIl0KfTsKCnZhciBuYW1lT3ZlcnJpZGVzID0gewogICAgT2JqZWN0aXZlQzogIk9iamVjdGl2ZS1DIiwKICAgIENTaGFycDogIkMjIiwKICAgIGdvbGFuZzogIkdvIiwKICAgIENfQ3BwOiAiQyBhbmQgQysrIiwKICAgIENzb3VuZF9Eb2N1bWVudDogIkNzb3VuZCBEb2N1bWVudCIsCiAgICBDc291bmRfT3JjaGVzdHJhOiAiQ3NvdW5kIiwKICAgIENzb3VuZF9TY29yZTogIkNzb3VuZCBTY29yZSIsCiAgICBjb2ZmZWU6ICJDb2ZmZWVTY3JpcHQiLAogICAgSFRNTF9SdWJ5OiAiSFRNTCAoUnVieSkiLAogICAgSFRNTF9FbGl4aXI6ICJIVE1MIChFbGl4aXIpIiwKICAgIEZUTDogIkZyZWVNYXJrZXIiLAogICAgUEhQX0xhcmF2ZWxfYmxhZGU6ICJQSFAgKEJsYWRlIFRlbXBsYXRlKSIsCiAgICBQZXJsNjogIlBlcmwgNiIsCiAgICBBdXRvSG90S2V5OiAiQXV0b0hvdGtleSAvIEF1dG9JdCIKfTsKdmFyIG1vZGVzQnlOYW1lID0ge307CmZvciAodmFyIG5hbWUgaW4gc3VwcG9ydGVkTW9kZXMpIHsKICAgIHZhciBkYXRhID0gc3VwcG9ydGVkTW9kZXNbbmFtZV07CiAgICB2YXIgZGlzcGxheU5hbWUgPSAobmFtZU92ZXJyaWRlc1tuYW1lXSB8fCBuYW1lKS5yZXBsYWNlKC9fL2csICIgIik7CiAgICB2YXIgZmlsZW5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CiAgICB2YXIgbW9kZSA9IG5ldyBNb2RlKGZpbGVuYW1lLCBkaXNwbGF5TmFtZSwgZGF0YVswXSk7CiAgICBtb2Rlc0J5TmFtZVtmaWxlbmFtZV0gPSBtb2RlOwogICAgbW9kZXMucHVzaChtb2RlKTsKfQoKbW9kdWxlLmV4cG9ydHMgPSB7CiAgICBnZXRNb2RlRm9yUGF0aDogZ2V0TW9kZUZvclBhdGgsCiAgICBtb2RlczogbW9kZXMsCiAgICBtb2Rlc0J5TmFtZTogbW9kZXNCeU5hbWUKfTsKCn0pOwoKZGVmaW5lKCJhY2UvZXh0L3Byb21wdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSIsImFjZS9saWIvZG9tIiwiYWNlL2V4dC9tZW51X3Rvb2xzL2dldF9lZGl0b3Jfa2V5Ym9hcmRfc2hvcnRjdXRzIiwiYWNlL2F1dG9jb21wbGV0ZSIsImFjZS9hdXRvY29tcGxldGUvcG9wdXAiLCJhY2UvYXV0b2NvbXBsZXRlL3BvcHVwIiwiYWNlL3VuZG9tYW5hZ2VyIiwiYWNlL3Rva2VuaXplciIsImFjZS9leHQvbWVudV90b29scy9vdmVybGF5X3BhZ2UiLCJhY2UvZXh0L21vZGVsaXN0Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwp2YXIgc2hvcnRjdXRzID0gcmVxdWlyZSgiLi4vZXh0L21lbnVfdG9vbHMvZ2V0X2VkaXRvcl9rZXlib2FyZF9zaG9ydGN1dHMiKTsKdmFyIEZpbHRlcmVkTGlzdD0gcmVxdWlyZSgiLi4vYXV0b2NvbXBsZXRlIikuRmlsdGVyZWRMaXN0Owp2YXIgQWNlUG9wdXAgPSByZXF1aXJlKCcuLi9hdXRvY29tcGxldGUvcG9wdXAnKS5BY2VQb3B1cDsKdmFyICRzaW5nbGVMaW5lRWRpdG9yID0gcmVxdWlyZSgnLi4vYXV0b2NvbXBsZXRlL3BvcHVwJykuJHNpbmdsZUxpbmVFZGl0b3I7CnZhciBVbmRvTWFuYWdlciA9IHJlcXVpcmUoIi4uL3VuZG9tYW5hZ2VyIikuVW5kb01hbmFnZXI7CnZhciBUb2tlbml6ZXIgPSByZXF1aXJlKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXI7CnZhciBvdmVybGF5UGFnZSA9IHJlcXVpcmUoIi4vbWVudV90b29scy9vdmVybGF5X3BhZ2UiKS5vdmVybGF5UGFnZTsKdmFyIG1vZGVsaXN0ID0gcmVxdWlyZSgiLi9tb2RlbGlzdCIpOwp2YXIgb3BlblByb21wdDsKCmZ1bmN0aW9uIHByb21wdChlZGl0b3IsIG1lc3NhZ2UsIG9wdGlvbnMsIGNhbGxiYWNrKSB7CiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT0gIm9iamVjdCIpIHsKICAgICAgICByZXR1cm4gcHJvbXB0KGVkaXRvciwgIiIsIG1lc3NhZ2UsIG9wdGlvbnMpOwogICAgfQogICAgaWYgKG9wZW5Qcm9tcHQpIHsKICAgICAgICB2YXIgbGFzdFByb21wdCA9IG9wZW5Qcm9tcHQ7CiAgICAgICAgZWRpdG9yID0gbGFzdFByb21wdC5lZGl0b3I7CiAgICAgICAgbGFzdFByb21wdC5jbG9zZSgpOwogICAgICAgIGlmIChsYXN0UHJvbXB0Lm5hbWUgJiYgbGFzdFByb21wdC5uYW1lID09IG9wdGlvbnMubmFtZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG9wdGlvbnMuJHR5cGUpCiAgICAgICByZXR1cm4gcHJvbXB0W29wdGlvbnMuJHR5cGVdKGVkaXRvciwgY2FsbGJhY2spOwoKICAgIHZhciBjbWRMaW5lID0gJHNpbmdsZUxpbmVFZGl0b3IoKTsKICAgIGNtZExpbmUuc2Vzc2lvbi5zZXRVbmRvTWFuYWdlcihuZXcgVW5kb01hbmFnZXIoKSk7CgogICAgdmFyIGVsID0gZG9tLmJ1aWxkRG9tKFsiZGl2Iiwge2NsYXNzOiAiYWNlX3Byb21wdF9jb250YWluZXIiICsgKG9wdGlvbnMuaGFzRGVzY3JpcHRpb24gPyAiIGlucHV0LWJveC13aXRoLWRlc2NyaXB0aW9uIiA6ICIiKX1dKTsKICAgIHZhciBvdmVybGF5ID0gb3ZlcmxheVBhZ2UoZWRpdG9yLCBlbCwgZG9uZSk7CiAgICBlbC5hcHBlbmRDaGlsZChjbWRMaW5lLmNvbnRhaW5lcik7CgogICAgaWYgKGVkaXRvcikgewogICAgICAgIGVkaXRvci5jbWRMaW5lID0gY21kTGluZTsKICAgICAgICBjbWRMaW5lLnNldE9wdGlvbigiZm9udFNpemUiLCBlZGl0b3IuZ2V0T3B0aW9uKCJmb250U2l6ZSIpKTsKICAgIH0KICAgIGlmIChtZXNzYWdlKSB7CiAgICAgICAgY21kTGluZS5zZXRWYWx1ZShtZXNzYWdlLCAxKTsKICAgIH0KICAgIGlmIChvcHRpb25zLnNlbGVjdGlvbikgewogICAgICAgIGNtZExpbmUuc2VsZWN0aW9uLnNldFJhbmdlKHsKICAgICAgICAgICAgc3RhcnQ6IGNtZExpbmUuc2Vzc2lvbi5kb2MuaW5kZXhUb1Bvc2l0aW9uKG9wdGlvbnMuc2VsZWN0aW9uWzBdKSwKICAgICAgICAgICAgZW5kOiBjbWRMaW5lLnNlc3Npb24uZG9jLmluZGV4VG9Qb3NpdGlvbihvcHRpb25zLnNlbGVjdGlvblsxXSkKICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAob3B0aW9ucy5nZXRDb21wbGV0aW9ucykgewogICAgICAgIHZhciBwb3B1cCA9IG5ldyBBY2VQb3B1cCgpOwogICAgICAgIHBvcHVwLnJlbmRlcmVyLnNldFN0eWxlKCJhY2VfYXV0b2NvbXBsZXRlX2lubGluZSIpOwogICAgICAgIHBvcHVwLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICBwb3B1cC5jb250YWluZXIuc3R5bGUubWF4V2lkdGggPSAiNjAwcHgiOwogICAgICAgIHBvcHVwLmNvbnRhaW5lci5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICBwb3B1cC5jb250YWluZXIuc3R5bGUubWFyZ2luVG9wID0gIjNweCI7CiAgICAgICAgcG9wdXAucmVuZGVyZXIuc2V0U2Nyb2xsTWFyZ2luKDIsIDIsIDAsIDApOwogICAgICAgIHBvcHVwLmF1dG9TZWxlY3QgPSBmYWxzZTsKICAgICAgICBwb3B1cC5yZW5kZXJlci4kbWF4TGluZXMgPSAxNTsKICAgICAgICBwb3B1cC5zZXRSb3coLTEpOwogICAgICAgIHBvcHVwLm9uKCJjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgdmFyIGRhdGEgPSBwb3B1cC5nZXREYXRhKHBvcHVwLmdldFJvdygpKTsKICAgICAgICAgICAgaWYgKCFkYXRhLmVycm9yKSB7CiAgICAgICAgICAgICAgICBjbWRMaW5lLnNldFZhbHVlKGRhdGEudmFsdWUgfHwgZGF0YS5uYW1lIHx8IGRhdGEpOwogICAgICAgICAgICAgICAgYWNjZXB0KCk7CiAgICAgICAgICAgICAgICBlLnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGVsLmFwcGVuZENoaWxkKHBvcHVwLmNvbnRhaW5lcik7CiAgICAgICAgdXBkYXRlQ29tcGxldGlvbnMoKTsKICAgIH0KCiAgICBpZiAob3B0aW9ucy4kcnVsZXMpIHsKICAgICAgICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihvcHRpb25zLiRydWxlcyk7CiAgICAgICAgY21kTGluZS5zZXNzaW9uLmJnVG9rZW5pemVyLnNldFRva2VuaXplcih0b2tlbml6ZXIpOwogICAgfQoKICAgIGlmIChvcHRpb25zLnBsYWNlaG9sZGVyKSB7CiAgICAgICAgY21kTGluZS5zZXRPcHRpb24oInBsYWNlaG9sZGVyIiwgb3B0aW9ucy5wbGFjZWhvbGRlcik7CiAgICB9CgogICAgaWYgKG9wdGlvbnMuaGFzRGVzY3JpcHRpb24pIHsKICAgICAgICB2YXIgcHJvbXB0VGV4dENvbnRhaW5lciA9IGRvbS5idWlsZERvbShbImRpdiIsIHtjbGFzczogImFjZV9wcm9tcHRfdGV4dF9jb250YWluZXIifV0pOwogICAgICAgIGRvbS5idWlsZERvbShvcHRpb25zLnByb21wdCB8fCAiUHJlc3MgJ0VudGVyJyB0byBjb25maXJtIG9yICdFc2NhcGUnIHRvIGNhbmNlbCIsIHByb21wdFRleHRDb250YWluZXIpOwogICAgICAgIGVsLmFwcGVuZENoaWxkKHByb21wdFRleHRDb250YWluZXIpOwogICAgfQoKICAgIG92ZXJsYXkuc2V0SWdub3JlRm9jdXNPdXQob3B0aW9ucy5pZ25vcmVGb2N1c091dCk7CgogICAgZnVuY3Rpb24gYWNjZXB0KCkgewogICAgICAgIHZhciB2YWw7CiAgICAgICAgaWYgKHBvcHVwICYmIHBvcHVwLmdldEN1cnNvclBvc2l0aW9uKCkucm93ID4gMCkgewogICAgICAgICAgICB2YWwgPSB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsID0gY21kTGluZS5nZXRWYWx1ZSgpOwogICAgICAgIH0KICAgICAgICB2YXIgY3VyRGF0YSA9IHBvcHVwID8gcG9wdXAuZ2V0RGF0YShwb3B1cC5nZXRSb3coKSkgOiB2YWw7CiAgICAgICAgaWYgKGN1ckRhdGEgJiYgIWN1ckRhdGEuZXJyb3IpIHsKICAgICAgICAgICAgZG9uZSgpOwogICAgICAgICAgICBvcHRpb25zLm9uQWNjZXB0ICYmIG9wdGlvbnMub25BY2NlcHQoewogICAgICAgICAgICAgICAgdmFsdWU6IHZhbCwKICAgICAgICAgICAgICAgIGl0ZW06IGN1ckRhdGEKICAgICAgICAgICAgfSwgY21kTGluZSk7CiAgICAgICAgfQogICAgfQoKICAgIHZhciBrZXlzID0gewogICAgICAgICJFbnRlciI6IGFjY2VwdCwKICAgICAgICAiRXNjfFNoaWZ0LUVzYyI6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBvcHRpb25zLm9uQ2FuY2VsICYmIG9wdGlvbnMub25DYW5jZWwoY21kTGluZS5nZXRWYWx1ZSgpLCBjbWRMaW5lKTsKICAgICAgICAgICAgZG9uZSgpOwogICAgICAgIH0KICAgIH07CgogICAgaWYgKHBvcHVwKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihrZXlzLCB7CiAgICAgICAgICAgICJVcCI6IGZ1bmN0aW9uKGVkaXRvcikgeyBwb3B1cC5nb1RvKCJ1cCIpOyB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7fSwKICAgICAgICAgICAgIkRvd24iOiBmdW5jdGlvbihlZGl0b3IpIHsgcG9wdXAuZ29UbygiZG93biIpOyB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7fSwKICAgICAgICAgICAgIkN0cmwtVXB8Q3RybC1Ib21lIjogZnVuY3Rpb24oZWRpdG9yKSB7IHBvcHVwLmdvVG8oInN0YXJ0Iik7IHZhbHVlRnJvbVJlY2VudExpc3QoKTt9LAogICAgICAgICAgICAiQ3RybC1Eb3dufEN0cmwtRW5kIjogZnVuY3Rpb24oZWRpdG9yKSB7IHBvcHVwLmdvVG8oImVuZCIpOyB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7fSwKICAgICAgICAgICAgIlRhYiI6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgICAgICAgICAgcG9wdXAuZ29UbygiZG93biIpOyB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJQYWdlVXAiOiBmdW5jdGlvbihlZGl0b3IpIHsgcG9wdXAuZ290b1BhZ2VVcCgpOyB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7fSwKICAgICAgICAgICAgIlBhZ2VEb3duIjogZnVuY3Rpb24oZWRpdG9yKSB7IHBvcHVwLmdvdG9QYWdlRG93bigpOyB2YWx1ZUZyb21SZWNlbnRMaXN0KCk7fQogICAgICAgIH0pOwogICAgfQoKICAgIGNtZExpbmUuY29tbWFuZHMuYmluZEtleXMoa2V5cyk7CgogICAgZnVuY3Rpb24gZG9uZSgpIHsKICAgICAgICBvdmVybGF5LmNsb3NlKCk7CiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTsKICAgICAgICBvcGVuUHJvbXB0ID0gbnVsbDsKICAgIH0KCiAgICBjbWRMaW5lLm9uKCJpbnB1dCIsIGZ1bmN0aW9uKCkgewogICAgICAgIG9wdGlvbnMub25JbnB1dCAmJiBvcHRpb25zLm9uSW5wdXQoKTsKICAgICAgICB1cGRhdGVDb21wbGV0aW9ucygpOwogICAgfSk7CgogICAgZnVuY3Rpb24gdXBkYXRlQ29tcGxldGlvbnMoKSB7CiAgICAgICAgaWYgKG9wdGlvbnMuZ2V0Q29tcGxldGlvbnMpIHsKICAgICAgICAgICAgdmFyIHByZWZpeDsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuZ2V0UHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBvcHRpb25zLmdldFByZWZpeChjbWRMaW5lKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25zID0gb3B0aW9ucy5nZXRDb21wbGV0aW9ucyhjbWRMaW5lKTsKICAgICAgICAgICAgcG9wdXAuc2V0RGF0YShjb21wbGV0aW9ucywgcHJlZml4KTsKICAgICAgICAgICAgcG9wdXAucmVzaXplKHRydWUpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB2YWx1ZUZyb21SZWNlbnRMaXN0KCkgewogICAgICAgIHZhciBjdXJyZW50ID0gcG9wdXAuZ2V0RGF0YShwb3B1cC5nZXRSb3coKSk7CiAgICAgICAgaWYgKGN1cnJlbnQgJiYgIWN1cnJlbnQuZXJyb3IpCiAgICAgICAgICAgIHJldHVybiBjdXJyZW50LnZhbHVlIHx8IGN1cnJlbnQuY2FwdGlvbiB8fCBjdXJyZW50OwogICAgfQoKICAgIGNtZExpbmUucmVzaXplKHRydWUpOwogICAgaWYgKHBvcHVwKSB7CiAgICAgICAgcG9wdXAucmVzaXplKHRydWUpOwogICAgfQogICAgY21kTGluZS5mb2N1cygpOwoKICAgIG9wZW5Qcm9tcHQgPSB7CiAgICAgICAgY2xvc2U6IGRvbmUsCiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLAogICAgICAgIGVkaXRvcjogZWRpdG9yCiAgICB9Owp9Cgpwcm9tcHQuZ290b0xpbmUgPSBmdW5jdGlvbihlZGl0b3IsIGNhbGxiYWNrKSB7CiAgICBmdW5jdGlvbiBzdHJpbmdpZnlTZWxlY3Rpb24oc2VsZWN0aW9uKSB7CiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNlbGVjdGlvbikpCiAgICAgICAgICAgIHNlbGVjdGlvbiA9IFtzZWxlY3Rpb25dOwogICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKGZ1bmN0aW9uKHIpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IHIuaXNCYWNrd2FyZHMgPyByLnN0YXJ0OiByLmVuZDsKICAgICAgICAgICAgdmFyIGFuY2hvciA9IHIuaXNCYWNrd2FyZHMgPyByLmVuZDogci5zdGFydDsKICAgICAgICAgICAgdmFyIHJvdyA9IGFuY2hvci5yb3c7CiAgICAgICAgICAgIHZhciBzID0gKHJvdyArIDEpICsgIjoiICsgYW5jaG9yLmNvbHVtbjsKCiAgICAgICAgICAgIGlmIChhbmNob3Iucm93ID09IGN1cnNvci5yb3cpIHsKICAgICAgICAgICAgICAgIGlmIChhbmNob3IuY29sdW1uICE9IGN1cnNvci5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcyArPSAiPiIgKyAiOiIgKyBjdXJzb3IuY29sdW1uOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcyArPSAiPiIgKyAoY3Vyc29yLnJvdyArIDEpICsgIjoiICsgY3Vyc29yLmNvbHVtbjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9KS5yZXZlcnNlKCkuam9pbigiLCAiKTsKICAgIH0KCiAgICBwcm9tcHQoZWRpdG9yLCAiOiIgKyBzdHJpbmdpZnlTZWxlY3Rpb24oZWRpdG9yLnNlbGVjdGlvbi50b0pTT04oKSksIHsKICAgICAgICBuYW1lOiAiZ290b0xpbmUiLAogICAgICAgIHNlbGVjdGlvbjogWzEsIE51bWJlci5NQVhfVkFMVUVdLAogICAgICAgIG9uQWNjZXB0OiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGEudmFsdWU7CiAgICAgICAgICAgIHZhciBfaGlzdG9yeSA9IHByb21wdC5nb3RvTGluZS5faGlzdG9yeTsKICAgICAgICAgICAgaWYgKCFfaGlzdG9yeSkKICAgICAgICAgICAgICAgIHByb21wdC5nb3RvTGluZS5faGlzdG9yeSA9IF9oaXN0b3J5ID0gW107CiAgICAgICAgICAgIGlmIChfaGlzdG9yeS5pbmRleE9mKHZhbHVlKSAhPSAtMSkKICAgICAgICAgICAgICAgIF9oaXN0b3J5LnNwbGljZShfaGlzdG9yeS5pbmRleE9mKHZhbHVlKSwgMSk7CiAgICAgICAgICAgIF9oaXN0b3J5LnVuc2hpZnQodmFsdWUpOwogICAgICAgICAgICBpZiAoX2hpc3RvcnkubGVuZ3RoID4gMjApIF9oaXN0b3J5Lmxlbmd0aCA9IDIwOwogICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3MgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIHJhbmdlcyA9IFtdOwogICAgICAgICAgICB2YWx1ZS5yZXBsYWNlKC9eOi8sICIiKS5zcGxpdCgvLC8pLm1hcChmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgvKFs8PjorLV18Yz9cZCspfFteY1xkPD46Ky1dKy8pLmZpbHRlcihCb29sZWFuKTsKICAgICAgICAgICAgICAgIHZhciBpID0gMDsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRQb3NpdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHBhcnRzW2krK107CiAgICAgICAgICAgICAgICAgICAgaWYgKCFjKSByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgaWYgKGNbMF0gPT0gImMiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGMuc2xpY2UoMSkpIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlZGl0b3Iuc2Vzc2lvbi5kb2MuaW5kZXhUb1Bvc2l0aW9uKGluZGV4KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHBvcy5yb3c7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgaWYgKC9cZC8udGVzdChjKSkgewogICAgICAgICAgICAgICAgICAgICAgICByb3cgPSBwYXJzZUludChjKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBwYXJ0c1tpKytdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAiOiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHBhcnRzW2krK107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXGQvLnRlc3QoYykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHBhcnNlSW50KGMpIHx8IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcG9zID0gcmVhZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBSYW5nZS5mcm9tUG9pbnRzKHBvcywgcG9zKTsKICAgICAgICAgICAgICAgIGlmIChwYXJ0c1tpXSA9PSAiPiIpIHsKICAgICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kID0gcmVhZFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJ0c1tpXSA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2Uuc3RhcnQgPSByZWFkUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJhbmdlcy51bnNoaWZ0KHJhbmdlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uZnJvbUpTT04ocmFuZ2VzKTsKICAgICAgICAgICAgdmFyIHNjcm9sbFRvcCA9IGVkaXRvci5yZW5kZXJlci5zY3JvbGxUb3A7CiAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldygKICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLCAKICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY3Vyc29yLCAKICAgICAgICAgICAgICAgIDAuNQogICAgICAgICAgICApOwogICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuYW5pbWF0ZVNjcm9sbGluZyhzY3JvbGxUb3ApOwogICAgICAgIH0sCiAgICAgICAgaGlzdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciB1bmRvTWFuYWdlciA9IGVkaXRvci5zZXNzaW9uLmdldFVuZG9NYW5hZ2VyKCk7CiAgICAgICAgICAgIGlmICghcHJvbXB0LmdvdG9MaW5lLl9oaXN0b3J5KQogICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgICByZXR1cm4gcHJvbXB0LmdvdG9MaW5lLl9oaXN0b3J5OwoKICAgICAgICB9LAogICAgICAgIGdldENvbXBsZXRpb25zOiBmdW5jdGlvbihjbWRMaW5lKSB7CiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGNtZExpbmUuZ2V0VmFsdWUoKTsKICAgICAgICAgICAgdmFyIG0gPSB2YWx1ZS5yZXBsYWNlKC9eOi8sICIiKS5zcGxpdCgiOiIpOwogICAgICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocGFyc2VJbnQobVswXSkgfHwgMSwgZWRpdG9yLnNlc3Npb24uZ2V0TGVuZ3RoKCkpIC0gMTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdmFsdWUgKyAiICAiICsgbGluZTsKICAgICAgICAgICAgcmV0dXJuIFtjdXJyZW50XS5jb25jYXQodGhpcy5oaXN0b3J5KCkpOwogICAgICAgIH0sCiAgICAgICAgJHJ1bGVzOiB7CiAgICAgICAgICAgIHN0YXJ0OiBbewogICAgICAgICAgICAgICAgcmVnZXg6IC9cZCsvLAogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAvWzosPjwrXC1jXS8sCiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfQogICAgfSk7Cn07Cgpwcm9tcHQuY29tbWFuZHMgPSBmdW5jdGlvbihlZGl0b3IsIGNhbGxiYWNrKSB7CiAgICBmdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHsKICAgICAgICByZXR1cm4gKG5hbWUgfHwgIiIpLnJlcGxhY2UoL14uLywgZnVuY3Rpb24oeCkgewogICAgICAgICAgICByZXR1cm4geC50b1VwcGVyQ2FzZSh4KTsKICAgICAgICB9KS5yZXBsYWNlKC9bYS16XVtBLVpdL2csIGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgcmV0dXJuIHhbMF0gKyAiICIgKyB4WzFdLnRvTG93ZXJDYXNlKHgpOwogICAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gZ2V0RWRpdG9yQ29tbWFuZHNCeU5hbWUoZXhjbHVkZUNvbW1hbmRzKSB7CiAgICAgICAgdmFyIGNvbW1hbmRzQnlOYW1lID0gW107CiAgICAgICAgdmFyIGNvbW1hbmRNYXAgPSB7fTsKICAgICAgICBlZGl0b3Iua2V5QmluZGluZy4kaGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbihoYW5kbGVyKSB7CiAgICAgICAgICAgIHZhciBwbGF0Zm9ybSA9IGhhbmRsZXIucGxhdGZvcm07CiAgICAgICAgICAgIHZhciBjYm4gPSBoYW5kbGVyLmJ5TmFtZTsKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBjYm4pIHsKICAgICAgICAgICAgICAgIHZhciBrZXk7CiAgICAgICAgICAgICAgICBpZiAoY2JuW2ldLmJpbmRLZXkgJiYgY2JuW2ldLmJpbmRLZXlbcGxhdGZvcm1dICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAga2V5ID0gY2JuW2ldLmJpbmRLZXlbIndpbiJdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBrZXkgPSAiIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgY29tbWFuZHMgPSBjYm5baV07CiAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSBjb21tYW5kcy5kZXNjcmlwdGlvbiB8fCBub3JtYWxpemVOYW1lKGNvbW1hbmRzLm5hbWUpOwogICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbW1hbmRzKSkKICAgICAgICAgICAgICAgICAgICBjb21tYW5kcyA9IFtjb21tYW5kc107CiAgICAgICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uKGNvbW1hbmQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgIT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5lZWRsZSA9IGV4Y2x1ZGVDb21tYW5kcy5maW5kKGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbCA9PT0gY29tbWFuZDsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoIW5lZWRsZSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZE1hcFtjb21tYW5kXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcFtjb21tYW5kXS5rZXkgKz0gInwiICsga2V5OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZE1hcFtjb21tYW5kXSA9IHtrZXk6IGtleSwgY29tbWFuZDogY29tbWFuZCwgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9ufTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzQnlOYW1lLnB1c2goY29tbWFuZE1hcFtjb21tYW5kXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBjb21tYW5kc0J5TmFtZTsKICAgIH0KICAgIHZhciBleGNsdWRlQ29tbWFuZHNMaXN0ID0gWyJpbnNlcnRzdHJpbmciLCAiaW5zZXJ0dGV4dCIsICJzZXRJbmRlbnRhdGlvbiIsICJwYXN0ZSJdOwogICAgdmFyIHNob3J0Y3V0c0FycmF5ID0gZ2V0RWRpdG9yQ29tbWFuZHNCeU5hbWUoZXhjbHVkZUNvbW1hbmRzTGlzdCk7CiAgICBzaG9ydGN1dHNBcnJheSA9IHNob3J0Y3V0c0FycmF5Lm1hcChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgcmV0dXJuIHt2YWx1ZTogaXRlbS5kZXNjcmlwdGlvbiwgbWV0YTogaXRlbS5rZXksIGNvbW1hbmQ6IGl0ZW0uY29tbWFuZH07CiAgICB9KTsKICAgIHByb21wdChlZGl0b3IsICIiLCAgewogICAgICAgIG5hbWU6ICJjb21tYW5kcyIsCiAgICAgICAgc2VsZWN0aW9uOiBbMCwgTnVtYmVyLk1BWF9WQUxVRV0sCiAgICAgICAgbWF4SGlzdG9yeUNvdW50OiA1LAogICAgICAgIG9uQWNjZXB0OiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgIGlmIChkYXRhLml0ZW0pIHsKICAgICAgICAgICAgICAgIHZhciBjb21tYW5kTmFtZSA9IGRhdGEuaXRlbS5jb21tYW5kOwogICAgICAgICAgICAgICAgdGhpcy5hZGRUb0hpc3RvcnkoZGF0YS5pdGVtKTsKCiAgICAgICAgICAgICAgICBlZGl0b3IuZXhlY0NvbW1hbmQoY29tbWFuZE5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBhZGRUb0hpc3Rvcnk6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgdmFyIGhpc3RvcnkgPSB0aGlzLmhpc3RvcnkoKTsKICAgICAgICAgICAgaGlzdG9yeS51bnNoaWZ0KGl0ZW0pOwogICAgICAgICAgICBkZWxldGUgaXRlbS5tZXNzYWdlOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGhpc3RvcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChoaXN0b3J5W2ldWyJjb21tYW5kIl0gPT0gaXRlbS5jb21tYW5kICkgewogICAgICAgICAgICAgICAgICAgIGhpc3Rvcnkuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLm1heEhpc3RvcnlDb3VudCA+IDAgJiYgaGlzdG9yeS5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnlDb3VudCkgewogICAgICAgICAgICAgICAgaGlzdG9yeS5zcGxpY2UoaGlzdG9yeS5sZW5ndGggLSAxLCAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcm9tcHQuY29tbWFuZHMuaGlzdG9yeSA9IGhpc3Rvcnk7CiAgICAgICAgfSwKICAgICAgICBoaXN0b3J5OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHByb21wdC5jb21tYW5kcy5oaXN0b3J5IHx8IFtdOwogICAgICAgIH0sCiAgICAgICAgZ2V0UHJlZml4OiBmdW5jdGlvbihjbWRMaW5lKSB7CiAgICAgICAgICAgIHZhciBjdXJyZW50UG9zID0gY21kTGluZS5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgZmlsdGVyVmFsdWUgPSBjbWRMaW5lLmdldFZhbHVlKCk7CiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5zdWJzdHJpbmcoMCwgY3VycmVudFBvcy5jb2x1bW4pOwogICAgICAgIH0sCiAgICAgICAgZ2V0Q29tcGxldGlvbnM6IGZ1bmN0aW9uKGNtZExpbmUpIHsKICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RmlsdGVyZWRDb21wbGV0aW9ucyhjb21tYW5kcywgcHJlZml4KSB7CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0Q29tbWFuZHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1hbmRzKSk7CgogICAgICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gbmV3IEZpbHRlcmVkTGlzdChyZXN1bHRDb21tYW5kcyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQuZmlsdGVyQ29tcGxldGlvbnMocmVzdWx0Q29tbWFuZHMsIHByZWZpeCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIGdldFVuaXF1ZUNvbW1hbmRMaXN0KGNvbW1hbmRzLCB1c2VkQ29tbWFuZHMpIHsKICAgICAgICAgICAgICAgIGlmICghdXNlZENvbW1hbmRzIHx8ICF1c2VkQ29tbWFuZHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1hbmRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGV4Y2x1ZGVDb21tYW5kcyA9IFtdOwogICAgICAgICAgICAgICAgdXNlZENvbW1hbmRzLmZvckVhY2goZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVDb21tYW5kcy5wdXNoKGl0ZW0uY29tbWFuZCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0Q29tbWFuZHMgPSBbXTsKCiAgICAgICAgICAgICAgICBjb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZUNvbW1hbmRzLmluZGV4T2YoaXRlbS5jb21tYW5kKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q29tbWFuZHMucHVzaChpdGVtKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Q29tbWFuZHM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBwcmVmaXggPSB0aGlzLmdldFByZWZpeChjbWRMaW5lKTsKICAgICAgICAgICAgdmFyIHJlY2VudGx5VXNlZENvbW1hbmRzID0gZ2V0RmlsdGVyZWRDb21wbGV0aW9ucyh0aGlzLmhpc3RvcnkoKSwgcHJlZml4KTsKICAgICAgICAgICAgdmFyIG90aGVyQ29tbWFuZHMgPSBnZXRVbmlxdWVDb21tYW5kTGlzdChzaG9ydGN1dHNBcnJheSwgcmVjZW50bHlVc2VkQ29tbWFuZHMpOwogICAgICAgICAgICBvdGhlckNvbW1hbmRzID0gZ2V0RmlsdGVyZWRDb21wbGV0aW9ucyhvdGhlckNvbW1hbmRzLCBwcmVmaXgpOwoKICAgICAgICAgICAgaWYgKHJlY2VudGx5VXNlZENvbW1hbmRzLmxlbmd0aCAmJiBvdGhlckNvbW1hbmRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmVjZW50bHlVc2VkQ29tbWFuZHNbMF1bIm1lc3NhZ2UiXSA9ICIgUmVjZW50bHkgdXNlZCI7CiAgICAgICAgICAgICAgICBvdGhlckNvbW1hbmRzWzBdWyJtZXNzYWdlIl0gPSAiIE90aGVyIGNvbW1hbmRzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGNvbXBsZXRpb25zID0gcmVjZW50bHlVc2VkQ29tbWFuZHMuY29uY2F0KG90aGVyQ29tbWFuZHMpOwogICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbnMubGVuZ3RoID4gMCA/IGNvbXBsZXRpb25zIDogW3sKICAgICAgICAgICAgICAgIHZhbHVlOiAiTm8gbWF0Y2hpbmcgY29tbWFuZHMiLAogICAgICAgICAgICAgICAgZXJyb3I6IDEKICAgICAgICAgICAgfV07CiAgICAgICAgfQogICAgfSk7Cn07Cgpwcm9tcHQubW9kZXMgPSBmdW5jdGlvbihlZGl0b3IsIGNhbGxiYWNrKSB7CiAgICB2YXIgbW9kZXNBcnJheSA9IG1vZGVsaXN0Lm1vZGVzOwogICAgbW9kZXNBcnJheSA9IG1vZGVzQXJyYXkubWFwKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICByZXR1cm4ge3ZhbHVlOiBpdGVtLmNhcHRpb24sIG1vZGU6IGl0ZW0ubmFtZX07CiAgICB9KTsKICAgIHByb21wdChlZGl0b3IsICIiLCAgewogICAgICAgIG5hbWU6ICJtb2RlcyIsCiAgICAgICAgc2VsZWN0aW9uOiBbMCwgTnVtYmVyLk1BWF9WQUxVRV0sCiAgICAgICAgb25BY2NlcHQ6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgaWYgKGRhdGEuaXRlbSkgewogICAgICAgICAgICAgICAgdmFyIG1vZGVOYW1lID0gImFjZS9tb2RlLyIgKyBkYXRhLml0ZW0ubW9kZTsKICAgICAgICAgICAgICAgIGVkaXRvci5zZXNzaW9uLnNldE1vZGUobW9kZU5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBnZXRQcmVmaXg6IGZ1bmN0aW9uKGNtZExpbmUpIHsKICAgICAgICAgICAgdmFyIGN1cnJlbnRQb3MgPSBjbWRMaW5lLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9IGNtZExpbmUuZ2V0VmFsdWUoKTsKICAgICAgICAgICAgcmV0dXJuIGZpbHRlclZhbHVlLnN1YnN0cmluZygwLCBjdXJyZW50UG9zLmNvbHVtbik7CiAgICAgICAgfSwKICAgICAgICBnZXRDb21wbGV0aW9uczogZnVuY3Rpb24oY21kTGluZSkgewogICAgICAgICAgICBmdW5jdGlvbiBnZXRGaWx0ZXJlZENvbXBsZXRpb25zKG1vZGVzLCBwcmVmaXgpIHsKICAgICAgICAgICAgICAgIHZhciByZXN1bHRDb21tYW5kcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobW9kZXMpKTsKCiAgICAgICAgICAgICAgICB2YXIgZmlsdGVyZWQgPSBuZXcgRmlsdGVyZWRMaXN0KHJlc3VsdENvbW1hbmRzKTsKICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZC5maWx0ZXJDb21wbGV0aW9ucyhyZXN1bHRDb21tYW5kcywgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4KGNtZExpbmUpOwogICAgICAgICAgICB2YXIgY29tcGxldGlvbnMgPSBnZXRGaWx0ZXJlZENvbXBsZXRpb25zKG1vZGVzQXJyYXksIHByZWZpeCk7CiAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9ucy5sZW5ndGggPiAwID8gY29tcGxldGlvbnMgOiBbewogICAgICAgICAgICAgICAgImNhcHRpb24iOiAiTm8gbW9kZSBtYXRjaGluZyIsCiAgICAgICAgICAgICAgICAidmFsdWUiOiAiTm8gbW9kZSBtYXRjaGluZyIsCiAgICAgICAgICAgICAgICAiZXJyb3IiOiAxCiAgICAgICAgICAgIH1dOwogICAgICAgIH0KICAgIH0pOwp9OwoKZG9tLmltcG9ydENzc1N0cmluZygiLmFjZV9wcm9tcHRfY29udGFpbmVyIHtcCiAgICBtYXgtd2lkdGg6IDYwMHB4O1wKICAgIHdpZHRoOiAxMDAlO1wKICAgIG1hcmdpbjogMjBweCBhdXRvO1wKICAgIHBhZGRpbmc6IDNweDtcCiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcCiAgICBib3JkZXItcmFkaXVzOiAycHg7XAogICAgYm94LXNoYWRvdzogMHB4IDJweCAzcHggMHB4ICM1NTU7XAp9Iik7CgoKZXhwb3J0cy5wcm9tcHQgPSBwcm9tcHQ7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC9wcm9tcHQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-rtl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3J0bCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9lZGl0b3IiLCJhY2UvY29uZmlnIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgY29tbWFuZHMgPSBbewogICAgbmFtZTogImxlZnRUb1JpZ2h0IiwKICAgIGJpbmRLZXk6IHsgd2luOiAiQ3RybC1BbHQtU2hpZnQtTCIsIG1hYzogIkNvbW1hbmQtQWx0LVNoaWZ0LUwiIH0sCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBlZGl0b3Iuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuc2V0UnRsRGlyZWN0aW9uKGVkaXRvciwgZmFsc2UpOwogICAgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJyaWdodFRvTGVmdCIsCiAgICBiaW5kS2V5OiB7IHdpbjogIkN0cmwtQWx0LVNoaWZ0LVIiLCAgbWFjOiAiQ29tbWFuZC1BbHQtU2hpZnQtUiIgfSwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGVkaXRvci5zZXNzaW9uLiRiaWRpSGFuZGxlci5zZXRSdGxEaXJlY3Rpb24oZWRpdG9yLCB0cnVlKTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9XTsKCnZhciBFZGl0b3IgPSByZXF1aXJlKCIuLi9lZGl0b3IiKS5FZGl0b3I7CnJlcXVpcmUoIi4uL2NvbmZpZyIpLmRlZmluZU9wdGlvbnMoRWRpdG9yLnByb3RvdHlwZSwgImVkaXRvciIsIHsKICAgIHJ0bFRleHQ6IHsKICAgICAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9uKCJjaGFuZ2UiLCBvbkNoYW5nZSk7CiAgICAgICAgICAgICAgICB0aGlzLm9uKCJjaGFuZ2VTZWxlY3Rpb24iLCBvbkNoYW5nZVNlbGVjdGlvbik7CiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLm9uKCJhZnRlclJlbmRlciIsIHVwZGF0ZUxpbmVEaXJlY3Rpb24pOwogICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5vbigiZXhlYyIsIG9uQ29tbWFuZEVtaXR0ZWQpOwogICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21tYW5kcyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLm9mZigiY2hhbmdlIiwgb25DaGFuZ2UpOwogICAgICAgICAgICAgICAgdGhpcy5vZmYoImNoYW5nZVNlbGVjdGlvbiIsIG9uQ2hhbmdlU2VsZWN0aW9uKTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIub2ZmKCJhZnRlclJlbmRlciIsIHVwZGF0ZUxpbmVEaXJlY3Rpb24pOwogICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kcy5vZmYoImV4ZWMiLCBvbkNvbW1hbmRFbWl0dGVkKTsKICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZHMucmVtb3ZlQ29tbWFuZHMoY29tbWFuZHMpOwogICAgICAgICAgICAgICAgY2xlYXJUZXh0TGF5ZXIodGhpcy5yZW5kZXJlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCk7CiAgICAgICAgfQogICAgfSwKICAgIHJ0bDogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuJGlzUnRsID0gdmFsOwogICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbigicnRsVGV4dCIsIGZhbHNlKTsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIub24oImFmdGVyUmVuZGVyIiwgdXBkYXRlTGluZURpcmVjdGlvbik7CiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uJGJpZGlIYW5kbGVyLnNlZW5CaWRpID0gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIub2ZmKCJhZnRlclJlbmRlciIsIHVwZGF0ZUxpbmVEaXJlY3Rpb24pOwogICAgICAgICAgICAgICAgY2xlYXJUZXh0TGF5ZXIodGhpcy5yZW5kZXJlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVGdWxsKCk7CiAgICAgICAgfQogICAgfQp9KTsKZnVuY3Rpb24gb25DaGFuZ2VTZWxlY3Rpb24oZSwgZWRpdG9yKSB7CiAgICB2YXIgbGVhZCA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKS5sZWFkOwogICAgaWYgKGVkaXRvci5zZXNzaW9uLiRiaWRpSGFuZGxlci5pc1J0bExpbmUobGVhZC5yb3cpKSB7CiAgICAgICAgaWYgKGxlYWQuY29sdW1uID09PSAwKSB7CiAgICAgICAgICAgIGlmIChlZGl0b3Iuc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNNb3ZlTGVmdE9wZXJhdGlvbiAmJiBsZWFkLnJvdyA+IDApIHsKICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZWxlY3Rpb24oKS5tb3ZlQ3Vyc29yVG8obGVhZC5yb3cgLSAxLCBlZGl0b3Iuc2Vzc2lvbi5nZXRMaW5lKGxlYWQucm93IC0gMSkubGVuZ3RoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChlZGl0b3IuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgIGxlYWQuY29sdW1uICs9IDE7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgbGVhZC5zZXRQb3NpdGlvbihsZWFkLnJvdywgbGVhZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKZnVuY3Rpb24gb25Db21tYW5kRW1pdHRlZChjb21tYWRFdmVudCkgewogICAgY29tbWFkRXZlbnQuZWRpdG9yLnNlc3Npb24uJGJpZGlIYW5kbGVyLmlzTW92ZUxlZnRPcGVyYXRpb24gPSAvZ290b2xlZnR8c2VsZWN0bGVmdHxiYWNrc3BhY2V8cmVtb3Zld29yZGxlZnQvLnRlc3QoY29tbWFkRXZlbnQuY29tbWFuZC5uYW1lKTsKfQpmdW5jdGlvbiBvbkNoYW5nZShkZWx0YSwgZWRpdG9yKSB7CiAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwogICAgc2Vzc2lvbi4kYmlkaUhhbmRsZXIuY3VycmVudFJvdyA9IG51bGw7CiAgICBpZiAoc2Vzc2lvbi4kYmlkaUhhbmRsZXIuaXNSdGxMaW5lKGRlbHRhLnN0YXJ0LnJvdykgJiYgZGVsdGEuYWN0aW9uID09PSAnaW5zZXJ0JyAmJiBkZWx0YS5saW5lcy5sZW5ndGggPiAxKSB7CiAgICAgICAgZm9yICh2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyByb3cgPCBkZWx0YS5lbmQucm93OyByb3crKykgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpLmNoYXJBdCgwKSAhPT0gc2Vzc2lvbi4kYmlkaUhhbmRsZXIuUkxFKQogICAgICAgICAgICAgICAgc2Vzc2lvbi5kb2MuJGxpbmVzW3JvdyArIDFdID0gc2Vzc2lvbi4kYmlkaUhhbmRsZXIuUkxFICsgc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIH0KICAgIH0KfQoKZnVuY3Rpb24gdXBkYXRlTGluZURpcmVjdGlvbihlLCByZW5kZXJlcikgewogICAgdmFyIHNlc3Npb24gPSByZW5kZXJlci5zZXNzaW9uOwogICAgdmFyICRiaWRpSGFuZGxlciA9IHNlc3Npb24uJGJpZGlIYW5kbGVyOwogICAgdmFyIGNlbGxzID0gcmVuZGVyZXIuJHRleHRMYXllci4kbGluZXMuY2VsbHM7CiAgICB2YXIgd2lkdGggPSByZW5kZXJlci5sYXllckNvbmZpZy53aWR0aCAtIHJlbmRlcmVyLmxheWVyQ29uZmlnLnBhZGRpbmcgKyAicHgiOwogICAgY2VsbHMuZm9yRWFjaChmdW5jdGlvbihjZWxsKSB7CiAgICAgICAgdmFyIHN0eWxlID0gY2VsbC5lbGVtZW50LnN0eWxlOwogICAgICAgIGlmICgkYmlkaUhhbmRsZXIgJiYgJGJpZGlIYW5kbGVyLmlzUnRsTGluZShjZWxsLnJvdykpIHsKICAgICAgICAgICAgc3R5bGUuZGlyZWN0aW9uID0gInJ0bCI7CiAgICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9ICJyaWdodCI7CiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3R5bGUuZGlyZWN0aW9uID0gIiI7CiAgICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9ICIiOwogICAgICAgICAgICBzdHlsZS53aWR0aCA9ICIiOwogICAgICAgIH0KICAgIH0pOwp9CgpmdW5jdGlvbiBjbGVhclRleHRMYXllcihyZW5kZXJlcikgewogICAgdmFyIGxpbmVzID0gcmVuZGVyZXIuJHRleHRMYXllci4kbGluZXM7CiAgICBsaW5lcy5jZWxscy5mb3JFYWNoKGNsZWFyKTsKICAgIGxpbmVzLmNlbGxDYWNoZS5mb3JFYWNoKGNsZWFyKTsKICAgIGZ1bmN0aW9uIGNsZWFyKGNlbGwpIHsKICAgICAgICB2YXIgc3R5bGUgPSBjZWxsLmVsZW1lbnQuc3R5bGU7CiAgICAgICAgc3R5bGUuZGlyZWN0aW9uID0gc3R5bGUudGV4dEFsaWduID0gc3R5bGUud2lkdGggPSAiIjsKICAgIH0KfQoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvcnRsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-searchbox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3NlYXJjaGJveCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9ldmVudCIsImFjZS9rZXlib2FyZC9oYXNoX2hhbmRsZXIiLCJhY2UvbGliL2tleXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CnZhciBzZWFyY2hib3hDc3MgPSAiXAouYWNlX3NlYXJjaCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkO1wKY29sb3I6ICM2NjY7XApib3JkZXI6IDFweCBzb2xpZCAjY2JjYmNiO1wKYm9yZGVyLXRvcDogMCBub25lO1wKb3ZlcmZsb3c6IGhpZGRlbjtcCm1hcmdpbjogMDtcCnBhZGRpbmc6IDRweCA2cHggMCA0cHg7XApwb3NpdGlvbjogYWJzb2x1dGU7XAp0b3A6IDA7XAp6LWluZGV4OiA5OTtcCndoaXRlLXNwYWNlOiBub3JtYWw7XAp9XAouYWNlX3NlYXJjaC5sZWZ0IHtcCmJvcmRlci1sZWZ0OiAwIG5vbmU7XApib3JkZXItcmFkaXVzOiAwcHggMHB4IDVweCAwcHg7XApsZWZ0OiAwO1wKfVwKLmFjZV9zZWFyY2gucmlnaHQge1wKYm9yZGVyLXJhZGl1czogMHB4IDBweCAwcHggNXB4O1wKYm9yZGVyLXJpZ2h0OiAwIG5vbmU7XApyaWdodDogMDtcCn1cCi5hY2Vfc2VhcmNoX2Zvcm0sIC5hY2VfcmVwbGFjZV9mb3JtIHtcCm1hcmdpbjogMCAyMHB4IDRweCAwO1wKb3ZlcmZsb3c6IGhpZGRlbjtcCmxpbmUtaGVpZ2h0OiAxLjk7XAp9XAouYWNlX3JlcGxhY2VfZm9ybSB7XAptYXJnaW4tcmlnaHQ6IDA7XAp9XAouYWNlX3NlYXJjaF9mb3JtLmFjZV9ub21hdGNoIHtcCm91dGxpbmU6IDFweCBzb2xpZCByZWQ7XAp9XAouYWNlX3NlYXJjaF9maWVsZCB7XApib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDtcCmJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wKY29sb3I6IGJsYWNrO1wKYm9yZGVyOiAxcHggc29saWQgI2NiY2JjYjtcCmJvcmRlci1yaWdodDogMCBub25lO1wKb3V0bGluZTogMDtcCnBhZGRpbmc6IDA7XApmb250LXNpemU6IGluaGVyaXQ7XAptYXJnaW46IDA7XApsaW5lLWhlaWdodDogaW5oZXJpdDtcCnBhZGRpbmc6IDAgNnB4O1wKbWluLXdpZHRoOiAxN2VtO1wKdmVydGljYWwtYWxpZ246IHRvcDtcCm1pbi1oZWlnaHQ6IDEuOGVtO1wKYm94LXNpemluZzogY29udGVudC1ib3g7XAp9XAouYWNlX3NlYXJjaGJ0biB7XApib3JkZXI6IDFweCBzb2xpZCAjY2JjYmNiO1wKbGluZS1oZWlnaHQ6IGluaGVyaXQ7XApkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XApwYWRkaW5nOiAwIDZweDtcCmJhY2tncm91bmQ6ICNmZmY7XApib3JkZXItcmlnaHQ6IDAgbm9uZTtcCmJvcmRlci1sZWZ0OiAxcHggc29saWQgI2RjZGNkYztcCmN1cnNvcjogcG9pbnRlcjtcCm1hcmdpbjogMDtcCnBvc2l0aW9uOiByZWxhdGl2ZTtcCmNvbG9yOiAjNjY2O1wKfVwKLmFjZV9zZWFyY2hidG46bGFzdC1jaGlsZCB7XApib3JkZXItcmFkaXVzOiAwIDNweCAzcHggMDtcCmJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjYmNiY2I7XAp9XAouYWNlX3NlYXJjaGJ0bjpkaXNhYmxlZCB7XApiYWNrZ3JvdW5kOiBub25lO1wKY3Vyc29yOiBkZWZhdWx0O1wKfVwKLmFjZV9zZWFyY2hidG46aG92ZXIge1wKYmFja2dyb3VuZC1jb2xvcjogI2VlZjFmNjtcCn1cCi5hY2Vfc2VhcmNoYnRuLnByZXYsIC5hY2Vfc2VhcmNoYnRuLm5leHQge1wKcGFkZGluZzogMHB4IDAuN2VtXAp9XAouYWNlX3NlYXJjaGJ0bi5wcmV2OmFmdGVyLCAuYWNlX3NlYXJjaGJ0bi5uZXh0OmFmdGVyIHtcCmNvbnRlbnQ6IFwiXCI7XApib3JkZXI6IHNvbGlkIDJweCAjODg4O1wKd2lkdGg6IDAuNWVtO1wKaGVpZ2h0OiAwLjVlbTtcCmJvcmRlci13aWR0aDogIDJweCAwIDAgMnB4O1wKZGlzcGxheTppbmxpbmUtYmxvY2s7XAp0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1wKfVwKLmFjZV9zZWFyY2hidG4ubmV4dDphZnRlciB7XApib3JkZXItd2lkdGg6IDAgMnB4IDJweCAwIDtcCn1cCi5hY2Vfc2VhcmNoYnRuX2Nsb3NlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUE0QUFBQWNDQVlBQUFCUlZvNUJBQUFBWjBsRVFWUjQydTJTVVFyQU1BaER2YXpuOE9qWkJpbENrWVZWeGlpczhINENUMFZyQUpiNFdIVDNDNXhVMmEySVFaWEpqaVFJUk1ka0VvSjVRMnlNcXBmRElvK1hZNGs2aCtZWE95S3FUSWo1UkVheGxvTkFkMHhpS21BdHNUSHFXOHNSMlc1ZjdnQ3U1bldGVXBWalp3QUFBQUJKUlU1RXJrSmdnZz09KSBuby1yZXBlYXQgNTAlIDA7XApib3JkZXItcmFkaXVzOiA1MCU7XApib3JkZXI6IDAgbm9uZTtcCmNvbG9yOiAjNjU2NTY1O1wKY3Vyc29yOiBwb2ludGVyO1wKZm9udDogMTZweC8xNnB4IEFyaWFsO1wKcGFkZGluZzogMDtcCmhlaWdodDogMTRweDtcCndpZHRoOiAxNHB4O1wKdG9wOiA5cHg7XApyaWdodDogN3B4O1wKcG9zaXRpb246IGFic29sdXRlO1wKfVwKLmFjZV9zZWFyY2hidG5fY2xvc2U6aG92ZXIge1wKYmFja2dyb3VuZC1jb2xvcjogIzY1NjU2NTtcCmJhY2tncm91bmQtcG9zaXRpb246IDUwJSAxMDAlO1wKY29sb3I6IHdoaXRlO1wKfVwKLmFjZV9idXR0b24ge1wKbWFyZ2luLWxlZnQ6IDJweDtcCmN1cnNvcjogcG9pbnRlcjtcCi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XAotbW96LXVzZXItc2VsZWN0OiBub25lO1wKLW8tdXNlci1zZWxlY3Q6IG5vbmU7XAotbXMtdXNlci1zZWxlY3Q6IG5vbmU7XAp1c2VyLXNlbGVjdDogbm9uZTtcCm92ZXJmbG93OiBoaWRkZW47XApvcGFjaXR5OiAwLjc7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwMCwxMDAsMTAwLDAuMjMpO1wKcGFkZGluZzogMXB4O1wKYm94LXNpemluZzogICAgYm9yZGVyLWJveCFpbXBvcnRhbnQ7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlX2J1dHRvbjpob3ZlciB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1wKb3BhY2l0eToxO1wKfVwKLmFjZV9idXR0b246YWN0aXZlIHtcCmJhY2tncm91bmQtY29sb3I6ICNkZGQ7XAp9XAouYWNlX2J1dHRvbi5jaGVja2VkIHtcCmJvcmRlci1jb2xvcjogIzMzOTlmZjtcCm9wYWNpdHk6MTtcCn1cCi5hY2Vfc2VhcmNoX29wdGlvbnN7XAptYXJnaW4tYm90dG9tOiAzcHg7XAp0ZXh0LWFsaWduOiByaWdodDtcCi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XAotbW96LXVzZXItc2VsZWN0OiBub25lO1wKLW8tdXNlci1zZWxlY3Q6IG5vbmU7XAotbXMtdXNlci1zZWxlY3Q6IG5vbmU7XAp1c2VyLXNlbGVjdDogbm9uZTtcCmNsZWFyOiBib3RoO1wKfVwKLmFjZV9zZWFyY2hfY291bnRlciB7XApmbG9hdDogbGVmdDtcCmZvbnQtZmFtaWx5OiBhcmlhbDtcCnBhZGRpbmc6IDAgOHB4O1wKfSI7CnZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwp2YXIga2V5VXRpbCA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7Cgp2YXIgTUFYX0NPVU5UID0gOTk5OwoKZG9tLmltcG9ydENzc1N0cmluZyhzZWFyY2hib3hDc3MsICJhY2Vfc2VhcmNoYm94Iik7Cgp2YXIgU2VhcmNoQm94ID0gZnVuY3Rpb24oZWRpdG9yLCByYW5nZSwgc2hvd1JlcGxhY2VGb3JtKSB7CiAgICB2YXIgZGl2ID0gZG9tLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZG9tLmJ1aWxkRG9tKFsiZGl2Iiwge2NsYXNzOiJhY2Vfc2VhcmNoIHJpZ2h0In0sCiAgICAgICAgWyJzcGFuIiwge2FjdGlvbjogImhpZGUiLCBjbGFzczogImFjZV9zZWFyY2hidG5fY2xvc2UifV0sCiAgICAgICAgWyJkaXYiLCB7Y2xhc3M6ICJhY2Vfc2VhcmNoX2Zvcm0ifSwKICAgICAgICAgICAgWyJpbnB1dCIsIHtjbGFzczogImFjZV9zZWFyY2hfZmllbGQiLCBwbGFjZWhvbGRlcjogIlNlYXJjaCBmb3IiLCBzcGVsbGNoZWNrOiAiZmFsc2UifV0sCiAgICAgICAgICAgIFsic3BhbiIsIHthY3Rpb246ICJmaW5kUHJldiIsIGNsYXNzOiAiYWNlX3NlYXJjaGJ0biBwcmV2In0sICJcdTIwMGIiXSwKICAgICAgICAgICAgWyJzcGFuIiwge2FjdGlvbjogImZpbmROZXh0IiwgY2xhc3M6ICJhY2Vfc2VhcmNoYnRuIG5leHQifSwgIlx1MjAwYiJdLAogICAgICAgICAgICBbInNwYW4iLCB7YWN0aW9uOiAiZmluZEFsbCIsIGNsYXNzOiAiYWNlX3NlYXJjaGJ0biIsIHRpdGxlOiAiQWx0LUVudGVyIn0sICJBbGwiXQogICAgICAgIF0sCiAgICAgICAgWyJkaXYiLCB7Y2xhc3M6ICJhY2VfcmVwbGFjZV9mb3JtIn0sCiAgICAgICAgICAgIFsiaW5wdXQiLCB7Y2xhc3M6ICJhY2Vfc2VhcmNoX2ZpZWxkIiwgcGxhY2Vob2xkZXI6ICJSZXBsYWNlIHdpdGgiLCBzcGVsbGNoZWNrOiAiZmFsc2UifV0sCiAgICAgICAgICAgIFsic3BhbiIsIHthY3Rpb246ICJyZXBsYWNlQW5kRmluZE5leHQiLCBjbGFzczogImFjZV9zZWFyY2hidG4ifSwgIlJlcGxhY2UiXSwKICAgICAgICAgICAgWyJzcGFuIiwge2FjdGlvbjogInJlcGxhY2VBbGwiLCBjbGFzczogImFjZV9zZWFyY2hidG4ifSwgIkFsbCJdCiAgICAgICAgXSwKICAgICAgICBbImRpdiIsIHtjbGFzczogImFjZV9zZWFyY2hfb3B0aW9ucyJ9LAogICAgICAgICAgICBbInNwYW4iLCB7YWN0aW9uOiAidG9nZ2xlUmVwbGFjZSIsIGNsYXNzOiAiYWNlX2J1dHRvbiIsIHRpdGxlOiAiVG9nZ2xlIFJlcGxhY2UgbW9kZSIsCiAgICAgICAgICAgICAgICBzdHlsZTogImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDotMnB4O3BhZGRpbmc6MCA1cHg7In0sICIrIl0sCiAgICAgICAgICAgIFsic3BhbiIsIHtjbGFzczogImFjZV9zZWFyY2hfY291bnRlciJ9XSwKICAgICAgICAgICAgWyJzcGFuIiwge2FjdGlvbjogInRvZ2dsZVJlZ2V4cE1vZGUiLCBjbGFzczogImFjZV9idXR0b24iLCB0aXRsZTogIlJlZ0V4cCBTZWFyY2gifSwgIi4qIl0sCiAgICAgICAgICAgIFsic3BhbiIsIHthY3Rpb246ICJ0b2dnbGVDYXNlU2Vuc2l0aXZlIiwgY2xhc3M6ICJhY2VfYnV0dG9uIiwgdGl0bGU6ICJDYXNlU2Vuc2l0aXZlIFNlYXJjaCJ9LCAiQWEiXSwKICAgICAgICAgICAgWyJzcGFuIiwge2FjdGlvbjogInRvZ2dsZVdob2xlV29yZHMiLCBjbGFzczogImFjZV9idXR0b24iLCB0aXRsZTogIldob2xlIFdvcmQgU2VhcmNoIn0sICJcXGIiXSwKICAgICAgICAgICAgWyJzcGFuIiwge2FjdGlvbjogInNlYXJjaEluU2VsZWN0aW9uIiwgY2xhc3M6ICJhY2VfYnV0dG9uIiwgdGl0bGU6ICJTZWFyY2ggSW4gU2VsZWN0aW9uIn0sICJTIl0KICAgICAgICBdCiAgICBdLCBkaXYpOwogICAgdGhpcy5lbGVtZW50ID0gZGl2LmZpcnN0Q2hpbGQ7CiAgICAKICAgIHRoaXMuc2V0U2Vzc2lvbiA9IHRoaXMuc2V0U2Vzc2lvbi5iaW5kKHRoaXMpOwoKICAgIHRoaXMuJGluaXQoKTsKICAgIHRoaXMuc2V0RWRpdG9yKGVkaXRvcik7CiAgICBkb20uaW1wb3J0Q3NzU3RyaW5nKHNlYXJjaGJveENzcywgImFjZV9zZWFyY2hib3giLCBlZGl0b3IuY29udGFpbmVyKTsKfTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuc2V0RWRpdG9yID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgZWRpdG9yLnNlYXJjaEJveCA9IHRoaXM7CiAgICAgICAgZWRpdG9yLnJlbmRlcmVyLnNjcm9sbGVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CiAgICAgICAgdGhpcy5lZGl0b3IgPSBlZGl0b3I7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihlKSB7CiAgICAgICAgdGhpcy5zZWFyY2hSYW5nZSA9IG51bGw7CiAgICAgICAgdGhpcy4kc3luY09wdGlvbnModHJ1ZSk7CiAgICB9OwoKICAgIHRoaXMuJGluaXRFbGVtZW50cyA9IGZ1bmN0aW9uKHNiKSB7CiAgICAgICAgdGhpcy5zZWFyY2hCb3ggPSBzYi5xdWVyeVNlbGVjdG9yKCIuYWNlX3NlYXJjaF9mb3JtIik7CiAgICAgICAgdGhpcy5yZXBsYWNlQm94ID0gc2IucXVlcnlTZWxlY3RvcigiLmFjZV9yZXBsYWNlX2Zvcm0iKTsKICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbiA9IHNiLnF1ZXJ5U2VsZWN0b3IoIlthY3Rpb249c2VhcmNoSW5TZWxlY3Rpb25dIik7CiAgICAgICAgdGhpcy5yZXBsYWNlT3B0aW9uID0gc2IucXVlcnlTZWxlY3RvcigiW2FjdGlvbj10b2dnbGVSZXBsYWNlXSIpOwogICAgICAgIHRoaXMucmVnRXhwT3B0aW9uID0gc2IucXVlcnlTZWxlY3RvcigiW2FjdGlvbj10b2dnbGVSZWdleHBNb2RlXSIpOwogICAgICAgIHRoaXMuY2FzZVNlbnNpdGl2ZU9wdGlvbiA9IHNiLnF1ZXJ5U2VsZWN0b3IoIlthY3Rpb249dG9nZ2xlQ2FzZVNlbnNpdGl2ZV0iKTsKICAgICAgICB0aGlzLndob2xlV29yZE9wdGlvbiA9IHNiLnF1ZXJ5U2VsZWN0b3IoIlthY3Rpb249dG9nZ2xlV2hvbGVXb3Jkc10iKTsKICAgICAgICB0aGlzLnNlYXJjaElucHV0ID0gdGhpcy5zZWFyY2hCb3gucXVlcnlTZWxlY3RvcigiLmFjZV9zZWFyY2hfZmllbGQiKTsKICAgICAgICB0aGlzLnJlcGxhY2VJbnB1dCA9IHRoaXMucmVwbGFjZUJveC5xdWVyeVNlbGVjdG9yKCIuYWNlX3NlYXJjaF9maWVsZCIpOwogICAgICAgIHRoaXMuc2VhcmNoQ291bnRlciA9IHNiLnF1ZXJ5U2VsZWN0b3IoIi5hY2Vfc2VhcmNoX2NvdW50ZXIiKTsKICAgIH07CiAgICAKICAgIHRoaXMuJGluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc2IgPSB0aGlzLmVsZW1lbnQ7CiAgICAgICAgCiAgICAgICAgdGhpcy4kaW5pdEVsZW1lbnRzKHNiKTsKICAgICAgICAKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHNiLCAibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBfdGhpcy5hY3RpdmVJbnB1dC5mb2N1cygpOwogICAgICAgICAgICB9LCAwKTsKICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKGUpOwogICAgICAgIH0pOwogICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHNiLCAiY2xpY2siLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciB0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50OwogICAgICAgICAgICB2YXIgYWN0aW9uID0gdC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOwogICAgICAgICAgICBpZiAoYWN0aW9uICYmIF90aGlzW2FjdGlvbl0pCiAgICAgICAgICAgICAgICBfdGhpc1thY3Rpb25dKCk7CiAgICAgICAgICAgIGVsc2UgaWYgKF90aGlzLiRzZWFyY2hCYXJLYi5jb21tYW5kc1thY3Rpb25dKQogICAgICAgICAgICAgICAgX3RoaXMuJHNlYXJjaEJhcktiLmNvbW1hbmRzW2FjdGlvbl0uZXhlYyhfdGhpcyk7CiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbihlKTsKICAgICAgICB9KTsKCiAgICAgICAgZXZlbnQuYWRkQ29tbWFuZEtleUxpc3RlbmVyKHNiLCBmdW5jdGlvbihlLCBoYXNoSWQsIGtleUNvZGUpIHsKICAgICAgICAgICAgdmFyIGtleVN0cmluZyA9IGtleVV0aWwua2V5Q29kZVRvU3RyaW5nKGtleUNvZGUpOwogICAgICAgICAgICB2YXIgY29tbWFuZCA9IF90aGlzLiRzZWFyY2hCYXJLYi5maW5kS2V5Q29tbWFuZChoYXNoSWQsIGtleVN0cmluZyk7CiAgICAgICAgICAgIGlmIChjb21tYW5kICYmIGNvbW1hbmQuZXhlYykgewogICAgICAgICAgICAgICAgY29tbWFuZC5leGVjKF90aGlzKTsKICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BFdmVudChlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICB0aGlzLiRvbkNoYW5nZSA9IGxhbmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLmZpbmQoZmFsc2UsIGZhbHNlKTsKICAgICAgICB9KTsKCiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5zZWFyY2hJbnB1dCwgImlucHV0IiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLiRvbkNoYW5nZS5zY2hlZHVsZSgyMCk7CiAgICAgICAgfSk7CiAgICAgICAgZXZlbnQuYWRkTGlzdGVuZXIodGhpcy5zZWFyY2hJbnB1dCwgImZvY3VzIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLmFjdGl2ZUlucHV0ID0gX3RoaXMuc2VhcmNoSW5wdXQ7CiAgICAgICAgICAgIF90aGlzLnNlYXJjaElucHV0LnZhbHVlICYmIF90aGlzLmhpZ2hsaWdodCgpOwogICAgICAgIH0pOwogICAgICAgIGV2ZW50LmFkZExpc3RlbmVyKHRoaXMucmVwbGFjZUlucHV0LCAiZm9jdXMiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgX3RoaXMuYWN0aXZlSW5wdXQgPSBfdGhpcy5yZXBsYWNlSW5wdXQ7CiAgICAgICAgICAgIF90aGlzLnNlYXJjaElucHV0LnZhbHVlICYmIF90aGlzLmhpZ2hsaWdodCgpOwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuJGNsb3NlU2VhcmNoQmFyS2IgPSBuZXcgSGFzaEhhbmRsZXIoW3sKICAgICAgICBiaW5kS2V5OiAiRXNjIiwKICAgICAgICBuYW1lOiAiY2xvc2VTZWFyY2hCYXIiLAogICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgICAgICBlZGl0b3Iuc2VhcmNoQm94LmhpZGUoKTsKICAgICAgICB9CiAgICB9XSk7CiAgICB0aGlzLiRzZWFyY2hCYXJLYiA9IG5ldyBIYXNoSGFuZGxlcigpOwogICAgdGhpcy4kc2VhcmNoQmFyS2IuYmluZEtleXMoewogICAgICAgICJDdHJsLWZ8Q29tbWFuZC1mIjogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgdmFyIGlzUmVwbGFjZSA9IHNiLmlzUmVwbGFjZSA9ICFzYi5pc1JlcGxhY2U7CiAgICAgICAgICAgIHNiLnJlcGxhY2VCb3guc3R5bGUuZGlzcGxheSA9IGlzUmVwbGFjZSA/ICIiIDogIm5vbmUiOwogICAgICAgICAgICBzYi5yZXBsYWNlT3B0aW9uLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgc2IuJHN5bmNPcHRpb25zKCk7CiAgICAgICAgICAgIHNiLnNlYXJjaElucHV0LmZvY3VzKCk7CiAgICAgICAgfSwKICAgICAgICAiQ3RybC1IfENvbW1hbmQtT3B0aW9uLUYiOiBmdW5jdGlvbihzYikgewogICAgICAgICAgICBpZiAoc2IuZWRpdG9yLmdldFJlYWRPbmx5KCkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHNiLnJlcGxhY2VPcHRpb24uY2hlY2tlZCA9IHRydWU7CiAgICAgICAgICAgIHNiLiRzeW5jT3B0aW9ucygpOwogICAgICAgICAgICBzYi5yZXBsYWNlSW5wdXQuZm9jdXMoKTsKICAgICAgICB9LAogICAgICAgICJDdHJsLUd8Q29tbWFuZC1HIjogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgc2IuZmluZE5leHQoKTsKICAgICAgICB9LAogICAgICAgICJDdHJsLVNoaWZ0LUd8Q29tbWFuZC1TaGlmdC1HIjogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgc2IuZmluZFByZXYoKTsKICAgICAgICB9LAogICAgICAgICJlc2MiOiBmdW5jdGlvbihzYikgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzYi5oaWRlKCk7fSk7CiAgICAgICAgfSwKICAgICAgICAiUmV0dXJuIjogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgaWYgKHNiLmFjdGl2ZUlucHV0ID09IHNiLnJlcGxhY2VJbnB1dCkKICAgICAgICAgICAgICAgIHNiLnJlcGxhY2UoKTsKICAgICAgICAgICAgc2IuZmluZE5leHQoKTsKICAgICAgICB9LAogICAgICAgICJTaGlmdC1SZXR1cm4iOiBmdW5jdGlvbihzYikgewogICAgICAgICAgICBpZiAoc2IuYWN0aXZlSW5wdXQgPT0gc2IucmVwbGFjZUlucHV0KQogICAgICAgICAgICAgICAgc2IucmVwbGFjZSgpOwogICAgICAgICAgICBzYi5maW5kUHJldigpOwogICAgICAgIH0sCiAgICAgICAgIkFsdC1SZXR1cm4iOiBmdW5jdGlvbihzYikgewogICAgICAgICAgICBpZiAoc2IuYWN0aXZlSW5wdXQgPT0gc2IucmVwbGFjZUlucHV0KQogICAgICAgICAgICAgICAgc2IucmVwbGFjZUFsbCgpOwogICAgICAgICAgICBzYi5maW5kQWxsKCk7CiAgICAgICAgfSwKICAgICAgICAiVGFiIjogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgKHNiLmFjdGl2ZUlucHV0ID09IHNiLnJlcGxhY2VJbnB1dCA/IHNiLnNlYXJjaElucHV0IDogc2IucmVwbGFjZUlucHV0KS5mb2N1cygpOwogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuJHNlYXJjaEJhcktiLmFkZENvbW1hbmRzKFt7CiAgICAgICAgbmFtZTogInRvZ2dsZVJlZ2V4cE1vZGUiLAogICAgICAgIGJpbmRLZXk6IHt3aW46ICJBbHQtUnxBbHQtLyIsIG1hYzogIkN0cmwtQWx0LVJ8Q3RybC1BbHQtLyJ9LAogICAgICAgIGV4ZWM6IGZ1bmN0aW9uKHNiKSB7CiAgICAgICAgICAgIHNiLnJlZ0V4cE9wdGlvbi5jaGVja2VkID0gIXNiLnJlZ0V4cE9wdGlvbi5jaGVja2VkOwogICAgICAgICAgICBzYi4kc3luY09wdGlvbnMoKTsKICAgICAgICB9CiAgICB9LCB7CiAgICAgICAgbmFtZTogInRvZ2dsZUNhc2VTZW5zaXRpdmUiLAogICAgICAgIGJpbmRLZXk6IHt3aW46ICJBbHQtQ3xBbHQtSSIsIG1hYzogIkN0cmwtQWx0LVJ8Q3RybC1BbHQtSSJ9LAogICAgICAgIGV4ZWM6IGZ1bmN0aW9uKHNiKSB7CiAgICAgICAgICAgIHNiLmNhc2VTZW5zaXRpdmVPcHRpb24uY2hlY2tlZCA9ICFzYi5jYXNlU2Vuc2l0aXZlT3B0aW9uLmNoZWNrZWQ7CiAgICAgICAgICAgIHNiLiRzeW5jT3B0aW9ucygpOwogICAgICAgIH0KICAgIH0sIHsKICAgICAgICBuYW1lOiAidG9nZ2xlV2hvbGVXb3JkcyIsCiAgICAgICAgYmluZEtleToge3dpbjogIkFsdC1CfEFsdC1XIiwgbWFjOiAiQ3RybC1BbHQtQnxDdHJsLUFsdC1XIn0sCiAgICAgICAgZXhlYzogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgc2Iud2hvbGVXb3JkT3B0aW9uLmNoZWNrZWQgPSAhc2Iud2hvbGVXb3JkT3B0aW9uLmNoZWNrZWQ7CiAgICAgICAgICAgIHNiLiRzeW5jT3B0aW9ucygpOwogICAgICAgIH0KICAgIH0sIHsKICAgICAgICBuYW1lOiAidG9nZ2xlUmVwbGFjZSIsCiAgICAgICAgZXhlYzogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgc2IucmVwbGFjZU9wdGlvbi5jaGVja2VkID0gIXNiLnJlcGxhY2VPcHRpb24uY2hlY2tlZDsKICAgICAgICAgICAgc2IuJHN5bmNPcHRpb25zKCk7CiAgICAgICAgfQogICAgfSwgewogICAgICAgIG5hbWU6ICJzZWFyY2hJblNlbGVjdGlvbiIsCiAgICAgICAgZXhlYzogZnVuY3Rpb24oc2IpIHsKICAgICAgICAgICAgc2Iuc2VhcmNoT3B0aW9uLmNoZWNrZWQgPSAhc2Iuc2VhcmNoUmFuZ2U7CiAgICAgICAgICAgIHNiLnNldFNlYXJjaFJhbmdlKHNiLnNlYXJjaE9wdGlvbi5jaGVja2VkICYmIHNiLmVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgc2IuJHN5bmNPcHRpb25zKCk7CiAgICAgICAgfQogICAgfV0pOwogICAgCiAgICB0aGlzLnNldFNlYXJjaFJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB0aGlzLnNlYXJjaFJhbmdlID0gcmFuZ2U7CiAgICAgICAgaWYgKHJhbmdlKSB7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoUmFuZ2VNYXJrZXIgPSB0aGlzLmVkaXRvci5zZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImFjZV9hY3RpdmUtbGluZSIpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hSYW5nZU1hcmtlcikgewogICAgICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLnJlbW92ZU1hcmtlcih0aGlzLnNlYXJjaFJhbmdlTWFya2VyKTsKICAgICAgICAgICAgdGhpcy5zZWFyY2hSYW5nZU1hcmtlciA9IG51bGw7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRzeW5jT3B0aW9ucyA9IGZ1bmN0aW9uKHByZXZlbnRTY3JvbGwpIHsKICAgICAgICBkb20uc2V0Q3NzQ2xhc3ModGhpcy5yZXBsYWNlT3B0aW9uLCAiY2hlY2tlZCIsIHRoaXMuc2VhcmNoUmFuZ2UpOwogICAgICAgIGRvbS5zZXRDc3NDbGFzcyh0aGlzLnNlYXJjaE9wdGlvbiwgImNoZWNrZWQiLCB0aGlzLnNlYXJjaE9wdGlvbi5jaGVja2VkKTsKICAgICAgICB0aGlzLnJlcGxhY2VPcHRpb24udGV4dENvbnRlbnQgPSB0aGlzLnJlcGxhY2VPcHRpb24uY2hlY2tlZCA/ICItIiA6ICIrIjsKICAgICAgICBkb20uc2V0Q3NzQ2xhc3ModGhpcy5yZWdFeHBPcHRpb24sICJjaGVja2VkIiwgdGhpcy5yZWdFeHBPcHRpb24uY2hlY2tlZCk7CiAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMud2hvbGVXb3JkT3B0aW9uLCAiY2hlY2tlZCIsIHRoaXMud2hvbGVXb3JkT3B0aW9uLmNoZWNrZWQpOwogICAgICAgIGRvbS5zZXRDc3NDbGFzcyh0aGlzLmNhc2VTZW5zaXRpdmVPcHRpb24sICJjaGVja2VkIiwgdGhpcy5jYXNlU2Vuc2l0aXZlT3B0aW9uLmNoZWNrZWQpOwogICAgICAgIHZhciByZWFkT25seSA9IHRoaXMuZWRpdG9yLmdldFJlYWRPbmx5KCk7CiAgICAgICAgdGhpcy5yZXBsYWNlT3B0aW9uLnN0eWxlLmRpc3BsYXkgPSByZWFkT25seSA/ICJub25lIiA6ICIiOwogICAgICAgIHRoaXMucmVwbGFjZUJveC5zdHlsZS5kaXNwbGF5ID0gdGhpcy5yZXBsYWNlT3B0aW9uLmNoZWNrZWQgJiYgIXJlYWRPbmx5ID8gIiIgOiAibm9uZSI7CiAgICAgICAgdGhpcy5maW5kKGZhbHNlLCBmYWxzZSwgcHJldmVudFNjcm9sbCk7CiAgICB9OwoKICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmUpIHsKICAgICAgICB0aGlzLmVkaXRvci5zZXNzaW9uLmhpZ2hsaWdodChyZSB8fCB0aGlzLmVkaXRvci4kc2VhcmNoLiRvcHRpb25zLnJlKTsKICAgICAgICB0aGlzLmVkaXRvci5yZW5kZXJlci51cGRhdGVCYWNrTWFya2VycygpOwogICAgfTsKICAgIHRoaXMuZmluZCA9IGZ1bmN0aW9uKHNraXBDdXJyZW50LCBiYWNrd2FyZHMsIHByZXZlbnRTY3JvbGwpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmVkaXRvci5maW5kKHRoaXMuc2VhcmNoSW5wdXQudmFsdWUsIHsKICAgICAgICAgICAgc2tpcEN1cnJlbnQ6IHNraXBDdXJyZW50LAogICAgICAgICAgICBiYWNrd2FyZHM6IGJhY2t3YXJkcywKICAgICAgICAgICAgd3JhcDogdHJ1ZSwKICAgICAgICAgICAgcmVnRXhwOiB0aGlzLnJlZ0V4cE9wdGlvbi5jaGVja2VkLAogICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiB0aGlzLmNhc2VTZW5zaXRpdmVPcHRpb24uY2hlY2tlZCwKICAgICAgICAgICAgd2hvbGVXb3JkOiB0aGlzLndob2xlV29yZE9wdGlvbi5jaGVja2VkLAogICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiBwcmV2ZW50U2Nyb2xsLAogICAgICAgICAgICByYW5nZTogdGhpcy5zZWFyY2hSYW5nZQogICAgICAgIH0pOwogICAgICAgIHZhciBub01hdGNoID0gIXJhbmdlICYmIHRoaXMuc2VhcmNoSW5wdXQudmFsdWU7CiAgICAgICAgZG9tLnNldENzc0NsYXNzKHRoaXMuc2VhcmNoQm94LCAiYWNlX25vbWF0Y2giLCBub01hdGNoKTsKICAgICAgICB0aGlzLmVkaXRvci5fZW1pdCgiZmluZFNlYXJjaEJveCIsIHsgbWF0Y2g6ICFub01hdGNoIH0pOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0KCk7CiAgICAgICAgdGhpcy51cGRhdGVDb3VudGVyKCk7CiAgICB9OwogICAgdGhpcy51cGRhdGVDb3VudGVyID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVkaXRvciA9IHRoaXMuZWRpdG9yOwogICAgICAgIHZhciByZWdleCA9IGVkaXRvci4kc2VhcmNoLiRvcHRpb25zLnJlOwogICAgICAgIHZhciBhbGwgPSAwOwogICAgICAgIHZhciBiZWZvcmUgPSAwOwogICAgICAgIGlmIChyZWdleCkgewogICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlYXJjaFJhbmdlCiAgICAgICAgICAgICAgICA/IGVkaXRvci5zZXNzaW9uLmdldFRleHRSYW5nZSh0aGlzLnNlYXJjaFJhbmdlKQogICAgICAgICAgICAgICAgOiBlZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBlZGl0b3Iuc2Vzc2lvbi5kb2MucG9zaXRpb25Ub0luZGV4KGVkaXRvci5zZWxlY3Rpb24uYW5jaG9yKTsKICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoUmFuZ2UpCiAgICAgICAgICAgICAgICBvZmZzZXQgLT0gZWRpdG9yLnNlc3Npb24uZG9jLnBvc2l0aW9uVG9JbmRleCh0aGlzLnNlYXJjaFJhbmdlLnN0YXJ0KTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbGFzdCA9IHJlZ2V4Lmxhc3RJbmRleCA9IDA7CiAgICAgICAgICAgIHZhciBtOwogICAgICAgICAgICB3aGlsZSAoKG0gPSByZWdleC5leGVjKHZhbHVlKSkpIHsKICAgICAgICAgICAgICAgIGFsbCsrOwogICAgICAgICAgICAgICAgbGFzdCA9IG0uaW5kZXg7CiAgICAgICAgICAgICAgICBpZiAobGFzdCA8PSBvZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgYmVmb3JlKys7CiAgICAgICAgICAgICAgICBpZiAoYWxsID4gTUFYX0NPVU5UKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgaWYgKCFtWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gbGFzdCArPSAxOwogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID49IHZhbHVlLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5zZWFyY2hDb3VudGVyLnRleHRDb250ZW50ID0gYmVmb3JlICsgIiBvZiAiICsgKGFsbCA+IE1BWF9DT1VOVCA/IE1BWF9DT1VOVCArICIrIiA6IGFsbCk7CiAgICB9OwogICAgdGhpcy5maW5kTmV4dCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuZmluZCh0cnVlLCBmYWxzZSk7CiAgICB9OwogICAgdGhpcy5maW5kUHJldiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuZmluZCh0cnVlLCB0cnVlKTsKICAgIH07CiAgICB0aGlzLmZpbmRBbGwgPSBmdW5jdGlvbigpewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZWRpdG9yLmZpbmRBbGwodGhpcy5zZWFyY2hJbnB1dC52YWx1ZSwgeyAgICAgICAgICAgIAogICAgICAgICAgICByZWdFeHA6IHRoaXMucmVnRXhwT3B0aW9uLmNoZWNrZWQsCiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IHRoaXMuY2FzZVNlbnNpdGl2ZU9wdGlvbi5jaGVja2VkLAogICAgICAgICAgICB3aG9sZVdvcmQ6IHRoaXMud2hvbGVXb3JkT3B0aW9uLmNoZWNrZWQKICAgICAgICB9KTsKICAgICAgICB2YXIgbm9NYXRjaCA9ICFyYW5nZSAmJiB0aGlzLnNlYXJjaElucHV0LnZhbHVlOwogICAgICAgIGRvbS5zZXRDc3NDbGFzcyh0aGlzLnNlYXJjaEJveCwgImFjZV9ub21hdGNoIiwgbm9NYXRjaCk7CiAgICAgICAgdGhpcy5lZGl0b3IuX2VtaXQoImZpbmRTZWFyY2hCb3giLCB7IG1hdGNoOiAhbm9NYXRjaCB9KTsKICAgICAgICB0aGlzLmhpZ2hsaWdodCgpOwogICAgICAgIHRoaXMuaGlkZSgpOwogICAgfTsKICAgIHRoaXMucmVwbGFjZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5lZGl0b3IuZ2V0UmVhZE9ubHkoKSkKICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVwbGFjZSh0aGlzLnJlcGxhY2VJbnB1dC52YWx1ZSk7CiAgICB9OyAgICAKICAgIHRoaXMucmVwbGFjZUFuZEZpbmROZXh0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCF0aGlzLmVkaXRvci5nZXRSZWFkT25seSgpKSB7CiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlcGxhY2UodGhpcy5yZXBsYWNlSW5wdXQudmFsdWUpOwogICAgICAgICAgICB0aGlzLmZpbmROZXh0KCk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghdGhpcy5lZGl0b3IuZ2V0UmVhZE9ubHkoKSkKICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVwbGFjZUFsbCh0aGlzLnJlcGxhY2VJbnB1dC52YWx1ZSk7CiAgICB9OwoKICAgIHRoaXMuaGlkZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgdGhpcy5zZXRTZWFyY2hSYW5nZShudWxsKTsKICAgICAgICB0aGlzLmVkaXRvci5vZmYoImNoYW5nZVNlc3Npb24iLCB0aGlzLnNldFNlc3Npb24pOwogICAgICAgIAogICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIHRoaXMuZWRpdG9yLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGNsb3NlU2VhcmNoQmFyS2IpOwogICAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKCk7CiAgICB9OwogICAgdGhpcy5zaG93ID0gZnVuY3Rpb24odmFsdWUsIGlzUmVwbGFjZSkgewogICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTsKICAgICAgICB0aGlzLmVkaXRvci5vbigiY2hhbmdlU2Vzc2lvbiIsIHRoaXMuc2V0U2Vzc2lvbik7CiAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB0aGlzLnJlcGxhY2VPcHRpb24uY2hlY2tlZCA9IGlzUmVwbGFjZTsKICAgICAgICAKICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQudmFsdWUgPSB2YWx1ZTsKICAgICAgICAKICAgICAgICB0aGlzLnNlYXJjaElucHV0LmZvY3VzKCk7CiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC5zZWxlY3QoKTsKCiAgICAgICAgdGhpcy5lZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIodGhpcy4kY2xvc2VTZWFyY2hCYXJLYik7CiAgICAgICAgCiAgICAgICAgdGhpcy4kc3luY09wdGlvbnModHJ1ZSk7CiAgICB9OwoKICAgIHRoaXMuaXNGb2N1c2VkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDsKICAgICAgICByZXR1cm4gZWwgPT0gdGhpcy5zZWFyY2hJbnB1dCB8fCBlbCA9PSB0aGlzLnJlcGxhY2VJbnB1dDsKICAgIH07Cn0pLmNhbGwoU2VhcmNoQm94LnByb3RvdHlwZSk7CgpleHBvcnRzLlNlYXJjaEJveCA9IFNlYXJjaEJveDsKCmV4cG9ydHMuU2VhcmNoID0gZnVuY3Rpb24oZWRpdG9yLCBpc1JlcGxhY2UpIHsKICAgIHZhciBzYiA9IGVkaXRvci5zZWFyY2hCb3ggfHwgbmV3IFNlYXJjaEJveChlZGl0b3IpOwogICAgc2Iuc2hvdyhlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UoKSwgaXNSZXBsYWNlKTsKfTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvZXh0L3NlYXJjaGJveCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-settings_menu.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L21lbnVfdG9vbHMvb3ZlcmxheV9wYWdlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cid1c2Ugc3RyaWN0JzsKdmFyIGRvbSA9IHJlcXVpcmUoIi4uLy4uL2xpYi9kb20iKTsKdmFyIGNzc1RleHQgPSAiI2FjZV9zZXR0aW5nc21lbnUsICNrYnNob3J0Y3V0bWVudSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGN0Y3O1wKY29sb3I6IGJsYWNrO1wKYm94LXNoYWRvdzogLTVweCA0cHggNXB4IHJnYmEoMTI2LCAxMjYsIDEyNiwgMC41NSk7XApwYWRkaW5nOiAxZW0gMC41ZW0gMmVtIDFlbTtcCm92ZXJmbG93OiBhdXRvO1wKcG9zaXRpb246IGFic29sdXRlO1wKbWFyZ2luOiAwO1wKYm90dG9tOiAwO1wKcmlnaHQ6IDA7XAp0b3A6IDA7XAp6LWluZGV4OiA5OTkxO1wKY3Vyc29yOiBkZWZhdWx0O1wKfVwKLmFjZV9kYXJrICNhY2Vfc2V0dGluZ3NtZW51LCAuYWNlX2RhcmsgI2tic2hvcnRjdXRtZW51IHtcCmJveC1zaGFkb3c6IC0yMHB4IDEwcHggMjVweCByZ2JhKDEyNiwgMTI2LCAxMjYsIDAuMjUpO1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpO1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5OmhvdmVyIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMTAwLCAxMDAsIDEwMCwgMC4xKTtcCnRyYW5zaXRpb246IGFsbCAwLjNzXAp9XAouYWNlX2Nsb3NlQnV0dG9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxNDYsIDE0NiwgMC41KTtcCmJvcmRlcjogMXB4IHNvbGlkICNGNDhBOEE7XApib3JkZXItcmFkaXVzOiA1MCU7XApwYWRkaW5nOiA3cHg7XApwb3NpdGlvbjogYWJzb2x1dGU7XApyaWdodDogLThweDtcCnRvcDogLThweDtcCnotaW5kZXg6IDEwMDAwMDtcCn1cCi5hY2VfY2xvc2VCdXR0b257XApiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTQ2LCAxNDYsIDAuOSk7XAp9XAouYWNlX29wdGlvbnNNZW51S2V5IHtcCmNvbG9yOiBkYXJrc2xhdGVibHVlO1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlX29wdGlvbnNNZW51Q29tbWFuZCB7XApjb2xvcjogZGFya2N5YW47XApmb250LXdlaWdodDogbm9ybWFsO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGlucHV0LCAuYWNlX29wdGlvbnNNZW51RW50cnkgYnV0dG9uIHtcCnZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XAp9XAouYWNlX29wdGlvbnNNZW51RW50cnkgYnV0dG9uW2FjZV9zZWxlY3RlZF9idXR0b249dHJ1ZV0ge1wKYmFja2dyb3VuZDogI2U3ZTdlNztcCmJveC1zaGFkb3c6IDFweCAwcHggMnB4IDBweCAjYWRhZGFkIGluc2V0O1wKYm9yZGVyLWNvbG9yOiAjYWRhZGFkO1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbiB7XApiYWNrZ3JvdW5kOiB3aGl0ZTtcCmJvcmRlcjogMXB4IHNvbGlkIGxpZ2h0Z3JheTtcCm1hcmdpbjogMHB4O1wKfVwKLmFjZV9vcHRpb25zTWVudUVudHJ5IGJ1dHRvbjpob3ZlcntcCmJhY2tncm91bmQ6ICNmMGYwZjA7XAp9IjsKZG9tLmltcG9ydENzc1N0cmluZyhjc3NUZXh0KTsKCm1vZHVsZS5leHBvcnRzLm92ZXJsYXlQYWdlID0gZnVuY3Rpb24gb3ZlcmxheVBhZ2UoZWRpdG9yLCBjb250ZW50RWxlbWVudCwgY2FsbGJhY2spIHsKICAgIHZhciBjbG9zZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHZhciBpZ25vcmVGb2N1c091dCA9IGZhbHNlOwoKICAgIGZ1bmN0aW9uIGRvY3VtZW50RXNjTGlzdGVuZXIoZSkgewogICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7CiAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICAgIGlmICghY2xvc2VyKSByZXR1cm47CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGRvY3VtZW50RXNjTGlzdGVuZXIpOwogICAgICAgIGNsb3Nlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNsb3Nlcik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgY2xvc2VyID0gbnVsbDsKICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOwogICAgfQogICAgZnVuY3Rpb24gc2V0SWdub3JlRm9jdXNPdXQoaWdub3JlKSB7CiAgICAgICAgaWdub3JlRm9jdXNPdXQgPSBpZ25vcmU7CiAgICAgICAgaWYgKGlnbm9yZSkgewogICAgICAgICAgICBjbG9zZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgICAgICAgY29udGVudEVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJhdXRvIjsKICAgICAgICB9CiAgICB9CgogICAgY2xvc2VyLnN0eWxlLmNzc1RleHQgPSAnbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyAnICsKICAgICAgICAncG9zaXRpb246IGZpeGVkOyB0b3A6MDsgYm90dG9tOjA7IGxlZnQ6MDsgcmlnaHQ6MDsnICsKICAgICAgICAnei1pbmRleDogOTk5MDsgJyArCiAgICAgICAgKGVkaXRvciA/ICdiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7JyA6ICcnKTsKICAgIGNsb3Nlci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWlnbm9yZUZvY3VzT3V0KSB7CiAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgfQogICAgfSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZG9jdW1lbnRFc2NMaXN0ZW5lcik7CgogICAgY29udGVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgewogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9KTsKCiAgICBjbG9zZXIuYXBwZW5kQ2hpbGQoY29udGVudEVsZW1lbnQpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjbG9zZXIpOwogICAgaWYgKGVkaXRvcikgewogICAgICAgIGVkaXRvci5ibHVyKCk7CiAgICB9CiAgICByZXR1cm4gewogICAgICAgIGNsb3NlOiBjbG9zZSwKICAgICAgICBzZXRJZ25vcmVGb2N1c091dDogc2V0SWdub3JlRm9jdXNPdXQKICAgIH07Cn07Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9tb2RlbGlzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG1vZGVzID0gW107CmZ1bmN0aW9uIGdldE1vZGVGb3JQYXRoKHBhdGgpIHsKICAgIHZhciBtb2RlID0gbW9kZXNCeU5hbWUudGV4dDsKICAgIHZhciBmaWxlTmFtZSA9IHBhdGguc3BsaXQoL1tcL1xcXS8pLnBvcCgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChtb2Rlc1tpXS5zdXBwb3J0c0ZpbGUoZmlsZU5hbWUpKSB7CiAgICAgICAgICAgIG1vZGUgPSBtb2Rlc1tpXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIG1vZGU7Cn0KCnZhciBNb2RlID0gZnVuY3Rpb24obmFtZSwgY2FwdGlvbiwgZXh0ZW5zaW9ucykgewogICAgdGhpcy5uYW1lID0gbmFtZTsKICAgIHRoaXMuY2FwdGlvbiA9IGNhcHRpb247CiAgICB0aGlzLm1vZGUgPSAiYWNlL21vZGUvIiArIG5hbWU7CiAgICB0aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOwogICAgdmFyIHJlOwogICAgaWYgKC9cXi8udGVzdChleHRlbnNpb25zKSkgewogICAgICAgIHJlID0gZXh0ZW5zaW9ucy5yZXBsYWNlKC9cfChcXik/L2csIGZ1bmN0aW9uKGEsIGIpewogICAgICAgICAgICByZXR1cm4gIiR8IiArIChiID8gIl4iIDogIl4uKlxcLiIpOwogICAgICAgIH0pICsgIiQiOwogICAgfSBlbHNlIHsKICAgICAgICByZSA9ICJeLipcXC4oIiArIGV4dGVuc2lvbnMgKyAiKSQiOwogICAgfQoKICAgIHRoaXMuZXh0UmUgPSBuZXcgUmVnRXhwKHJlLCAiZ2kiKTsKfTsKCk1vZGUucHJvdG90eXBlLnN1cHBvcnRzRmlsZSA9IGZ1bmN0aW9uKGZpbGVuYW1lKSB7CiAgICByZXR1cm4gZmlsZW5hbWUubWF0Y2godGhpcy5leHRSZSk7Cn07CnZhciBzdXBwb3J0ZWRNb2RlcyA9IHsKICAgIEFCQVA6ICAgICAgICBbImFiYXAiXSwKICAgIEFCQzogICAgICAgICBbImFiYyJdLAogICAgQWN0aW9uU2NyaXB0OlsiYXMiXSwKICAgIEFEQTogICAgICAgICBbImFkYXxhZGIiXSwKICAgIEFwYWNoZV9Db25mOiBbIl5odGFjY2Vzc3xeaHRncm91cHN8Xmh0cGFzc3dkfF5jb25mfGh0YWNjZXNzfGh0Z3JvdXBzfGh0cGFzc3dkIl0sCiAgICBBc2NpaURvYzogICAgWyJhc2NpaWRvY3xhZG9jIl0sCiAgICBBU0w6ICAgICAgICAgWyJkc2x8YXNsIl0sCiAgICBBc3NlbWJseV94ODY6WyJhc218YSJdLAogICAgQXV0b0hvdEtleTogIFsiYWhrIl0sCiAgICBBcGV4OiAgICAgICAgWyJhcGV4fGNsc3x0cmlnZ2VyfHRnciJdLAogICAgQVFMOiAgICAgICAgIFsiYXFsIl0sCiAgICBCYXRjaEZpbGU6ICAgWyJiYXR8Y21kIl0sCiAgICBDX0NwcDogICAgICAgWyJjcHB8Y3xjY3xjeHh8aHxoaHxocHB8aW5vIl0sCiAgICBDOVNlYXJjaDogICAgWyJjOXNlYXJjaF9yZXN1bHRzIl0sCiAgICBDcnlzdGFsOiAgICAgWyJjciJdLAogICAgQ2lycnU6ICAgICAgIFsiY2lycnV8Y3IiXSwKICAgIENsb2p1cmU6ICAgICBbImNsanxjbGpzIl0sCiAgICBDb2JvbDogICAgICAgWyJDQkx8Q09CIl0sCiAgICBjb2ZmZWU6ICAgICAgWyJjb2ZmZWV8Y2Z8Y3NvbnxeQ2FrZWZpbGUiXSwKICAgIENvbGRGdXNpb246ICBbImNmbSJdLAogICAgQ1NoYXJwOiAgICAgIFsiY3MiXSwKICAgIENzb3VuZF9Eb2N1bWVudDogWyJjc2QiXSwKICAgIENzb3VuZF9PcmNoZXN0cmE6IFsib3JjIl0sCiAgICBDc291bmRfU2NvcmU6IFsic2NvIl0sCiAgICBDU1M6ICAgICAgICAgWyJjc3MiXSwKICAgIEN1cmx5OiAgICAgICBbImN1cmx5Il0sCiAgICBEOiAgICAgICAgICAgWyJkfGRpIl0sCiAgICBEYXJ0OiAgICAgICAgWyJkYXJ0Il0sCiAgICBEaWZmOiAgICAgICAgWyJkaWZmfHBhdGNoIl0sCiAgICBEb2NrZXJmaWxlOiAgWyJeRG9ja2VyZmlsZSJdLAogICAgRG90OiAgICAgICAgIFsiZG90Il0sCiAgICBEcm9vbHM6ICAgICAgWyJkcmwiXSwKICAgIEVkaWZhY3Q6ICAgICBbImVkaSJdLAogICAgRWlmZmVsOiAgICAgIFsiZXxnZSJdLAogICAgRUpTOiAgICAgICAgIFsiZWpzIl0sCiAgICBFbGl4aXI6ICAgICAgWyJleHxleHMiXSwKICAgIEVsbTogICAgICAgICBbImVsbSJdLAogICAgRXJsYW5nOiAgICAgIFsiZXJsfGhybCJdLAogICAgRm9ydGg6ICAgICAgIFsiZnJ0fGZzfGxkcnxmdGh8NHRoIl0sCiAgICBGb3J0cmFuOiAgICAgWyJmfGY5MCJdLAogICAgRlNoYXJwOiAgICAgIFsiZnNpfGZzfG1sfG1saXxmc3h8ZnNzY3JpcHQiXSwKICAgIEZTTDogICAgICAgICBbImZzbCJdLAogICAgRlRMOiAgICAgICAgIFsiZnRsIl0sCiAgICBHY29kZTogICAgICAgWyJnY29kZSJdLAogICAgR2hlcmtpbjogICAgIFsiZmVhdHVyZSJdLAogICAgR2l0aWdub3JlOiAgIFsiXi5naXRpZ25vcmUiXSwKICAgIEdsc2w6ICAgICAgICBbImdsc2x8ZnJhZ3x2ZXJ0Il0sCiAgICBHb2JzdG9uZXM6ICAgWyJnYnMiXSwKICAgIGdvbGFuZzogICAgICBbImdvIl0sCiAgICBHcmFwaFFMU2NoZW1hOiBbImdxbCJdLAogICAgR3Jvb3Z5OiAgICAgIFsiZ3Jvb3Z5Il0sCiAgICBIQU1MOiAgICAgICAgWyJoYW1sIl0sCiAgICBIYW5kbGViYXJzOiAgWyJoYnN8aGFuZGxlYmFyc3x0cGx8bXVzdGFjaGUiXSwKICAgIEhhc2tlbGw6ICAgICBbImhzIl0sCiAgICBIYXNrZWxsX0NhYmFsOiBbImNhYmFsIl0sCiAgICBoYVhlOiAgICAgICAgWyJoeCJdLAogICAgSGpzb246ICAgICAgIFsiaGpzb24iXSwKICAgIEhUTUw6ICAgICAgICBbImh0bWx8aHRtfHhodG1sfHZ1ZXx3ZXx3cHkiXSwKICAgIEhUTUxfRWxpeGlyOiBbImVleHxodG1sLmVleCJdLAogICAgSFRNTF9SdWJ5OiAgIFsiZXJifHJodG1sfGh0bWwuZXJiIl0sCiAgICBJTkk6ICAgICAgICAgWyJpbml8Y29uZnxjZmd8cHJlZnMiXSwKICAgIElvOiAgICAgICAgICBbImlvIl0sCiAgICBKYWNrOiAgICAgICAgWyJqYWNrIl0sCiAgICBKYWRlOiAgICAgICAgWyJqYWRlfHB1ZyJdLAogICAgSmF2YTogICAgICAgIFsiamF2YSJdLAogICAgSmF2YVNjcmlwdDogIFsianN8anNtfGpzeCJdLAogICAgSlNPTjogICAgICAgIFsianNvbiJdLAogICAgSlNPTmlxOiAgICAgIFsianEiXSwKICAgIEpTUDogICAgICAgICBbImpzcCJdLAogICAgSlNTTTogICAgICAgIFsianNzbXxqc3NtX3N0YXRlIl0sCiAgICBKU1g6ICAgICAgICAgWyJqc3giXSwKICAgIEp1bGlhOiAgICAgICBbImpsIl0sCiAgICBLb3RsaW46ICAgICAgWyJrdHxrdHMiXSwKICAgIExhVGVYOiAgICAgICBbInRleHxsYXRleHxsdHh8YmliIl0sCiAgICBMRVNTOiAgICAgICAgWyJsZXNzIl0sCiAgICBMaXF1aWQ6ICAgICAgWyJsaXF1aWQiXSwKICAgIExpc3A6ICAgICAgICBbImxpc3AiXSwKICAgIExpdmVTY3JpcHQ6ICBbImxzIl0sCiAgICBMb2dpUUw6ICAgICAgWyJsb2dpY3xscWwiXSwKICAgIExTTDogICAgICAgICBbImxzbCJdLAogICAgTHVhOiAgICAgICAgIFsibHVhIl0sCiAgICBMdWFQYWdlOiAgICAgWyJscCJdLAogICAgTHVjZW5lOiAgICAgIFsibHVjZW5lIl0sCiAgICBNYWtlZmlsZTogICAgWyJeTWFrZWZpbGV8XkdOVW1ha2VmaWxlfF5tYWtlZmlsZXxeT0NhbWxNYWtlZmlsZXxtYWtlIl0sCiAgICBNYXJrZG93bjogICAgWyJtZHxtYXJrZG93biJdLAogICAgTWFzazogICAgICAgIFsibWFzayJdLAogICAgTUFUTEFCOiAgICAgIFsibWF0bGFiIl0sCiAgICBNYXplOiAgICAgICAgWyJteiJdLAogICAgTUVMOiAgICAgICAgIFsibWVsIl0sCiAgICBNSVhBTDogICAgICAgWyJtaXhhbCJdLAogICAgTVVTSENvZGU6ICAgIFsibWN8bXVzaCJdLAogICAgTXlTUUw6ICAgICAgIFsibXlzcWwiXSwKICAgIE5naW54OiAgICAgICBbIm5naW54fGNvbmYiXSwKICAgIE5peDogICAgICAgICBbIm5peCJdLAogICAgTmltOiAgICAgICAgIFsibmltIl0sCiAgICBOU0lTOiAgICAgICAgWyJuc2l8bnNoIl0sCiAgICBPYmplY3RpdmVDOiAgWyJtfG1tIl0sCiAgICBPQ2FtbDogICAgICAgWyJtbHxtbGkiXSwKICAgIFBhc2NhbDogICAgICBbInBhc3xwIl0sCiAgICBQZXJsOiAgICAgICAgWyJwbHxwbSJdLAogICAgUGVybDY6ICAgICAgIFsicDZ8cGw2fHBtNiJdLAogICAgcGdTUUw6ICAgICAgIFsicGdzcWwiXSwKICAgIFBIUF9MYXJhdmVsX2JsYWRlOiBbImJsYWRlLnBocCJdLAogICAgUEhQOiAgICAgICAgIFsicGhwfGluY3xwaHRtbHxzaHRtbHxwaHAzfHBocDR8cGhwNXxwaHBzfHBocHR8YXd8Y3RwfG1vZHVsZSJdLAogICAgUHVwcGV0OiAgICAgIFsiZXBwfHBwIl0sCiAgICBQaWc6ICAgICAgICAgWyJwaWciXSwKICAgIFBvd2Vyc2hlbGw6ICBbInBzMSJdLAogICAgUHJhYXQ6ICAgICAgIFsicHJhYXR8cHJhYXRzY3JpcHR8cHNjfHByb2MiXSwKICAgIFByb2xvZzogICAgICBbInBsZ3xwcm9sb2ciXSwKICAgIFByb3BlcnRpZXM6ICBbInByb3BlcnRpZXMiXSwKICAgIFByb3RvYnVmOiAgICBbInByb3RvIl0sCiAgICBQeXRob246ICAgICAgWyJweSJdLAogICAgUjogICAgICAgICAgIFsiciJdLAogICAgUmF6b3I6ICAgICAgIFsiY3NodG1sfGFzcCJdLAogICAgUkRvYzogICAgICAgIFsiUmQiXSwKICAgIFJlZDogICAgICAgICBbInJlZHxyZWRzIl0sCiAgICBSSFRNTDogICAgICAgWyJSaHRtbCJdLAogICAgUlNUOiAgICAgICAgIFsicnN0Il0sCiAgICBSdWJ5OiAgICAgICAgWyJyYnxydXxnZW1zcGVjfHJha2V8Xkd1YXJkZmlsZXxeUmFrZWZpbGV8XkdlbWZpbGUiXSwKICAgIFJ1c3Q6ICAgICAgICBbInJzIl0sCiAgICBTQVNTOiAgICAgICAgWyJzYXNzIl0sCiAgICBTQ0FEOiAgICAgICAgWyJzY2FkIl0sCiAgICBTY2FsYTogICAgICAgWyJzY2FsYXxzYnQiXSwKICAgIFNjaGVtZTogICAgICBbInNjbXxzbXxya3R8b2FrfHNjaGVtZSJdLAogICAgU0NTUzogICAgICAgIFsic2NzcyJdLAogICAgU0g6ICAgICAgICAgIFsic2h8YmFzaHxeLmJhc2hyYyJdLAogICAgU0pTOiAgICAgICAgIFsic2pzIl0sCiAgICBTbGltOiAgICAgICAgWyJzbGltfHNraW0iXSwKICAgIFNtYXJ0eTogICAgICBbInNtYXJ0eXx0cGwiXSwKICAgIHNuaXBwZXRzOiAgICBbInNuaXBwZXRzIl0sCiAgICBTb3lfVGVtcGxhdGU6WyJzb3kiXSwKICAgIFNwYWNlOiAgICAgICBbInNwYWNlIl0sCiAgICBTUUw6ICAgICAgICAgWyJzcWwiXSwKICAgIFNRTFNlcnZlcjogICBbInNxbHNlcnZlciJdLAogICAgU3R5bHVzOiAgICAgIFsic3R5bHxzdHlsdXMiXSwKICAgIFNWRzogICAgICAgICBbInN2ZyJdLAogICAgU3dpZnQ6ICAgICAgIFsic3dpZnQiXSwKICAgIFRjbDogICAgICAgICBbInRjbCJdLAogICAgVGVycmFmb3JtOiAgIFsidGYiLCAidGZ2YXJzIiwgInRlcnJhZ3J1bnQiXSwKICAgIFRleDogICAgICAgICBbInRleCJdLAogICAgVGV4dDogICAgICAgIFsidHh0Il0sCiAgICBUZXh0aWxlOiAgICAgWyJ0ZXh0aWxlIl0sCiAgICBUb21sOiAgICAgICAgWyJ0b21sIl0sCiAgICBUU1g6ICAgICAgICAgWyJ0c3giXSwKICAgIFR3aWc6ICAgICAgICBbImxhdHRlfHR3aWd8c3dpZyJdLAogICAgVHlwZXNjcmlwdDogIFsidHN8dHlwZXNjcmlwdHxzdHIiXSwKICAgIFZhbGE6ICAgICAgICBbInZhbGEiXSwKICAgIFZCU2NyaXB0OiAgICBbInZic3x2YiJdLAogICAgVmVsb2NpdHk6ICAgIFsidm0iXSwKICAgIFZlcmlsb2c6ICAgICBbInZ8dmh8c3Z8c3ZoIl0sCiAgICBWSERMOiAgICAgICAgWyJ2aGR8dmhkbCJdLAogICAgVmlzdWFsZm9yY2U6IFsidmZwfGNvbXBvbmVudHxwYWdlIl0sCiAgICBXb2xsb2s6ICAgICAgWyJ3bGt8d3BnbXx3dGVzdCJdLAogICAgWE1MOiAgICAgICAgIFsieG1sfHJkZnxyc3N8d3NkbHx4c2x0fGF0b218bWF0aG1sfG1tbHx4dWx8eGJsfHhhbWwiXSwKICAgIFhRdWVyeTogICAgICBbInhxIl0sCiAgICBZQU1MOiAgICAgICAgWyJ5YW1sfHltbCJdLAogICAgWmVlazogICAgICAgIFsiemVla3xicm8iXSwKICAgIERqYW5nbzogICAgICBbImh0bWwiXQp9OwoKdmFyIG5hbWVPdmVycmlkZXMgPSB7CiAgICBPYmplY3RpdmVDOiAiT2JqZWN0aXZlLUMiLAogICAgQ1NoYXJwOiAiQyMiLAogICAgZ29sYW5nOiAiR28iLAogICAgQ19DcHA6ICJDIGFuZCBDKysiLAogICAgQ3NvdW5kX0RvY3VtZW50OiAiQ3NvdW5kIERvY3VtZW50IiwKICAgIENzb3VuZF9PcmNoZXN0cmE6ICJDc291bmQiLAogICAgQ3NvdW5kX1Njb3JlOiAiQ3NvdW5kIFNjb3JlIiwKICAgIGNvZmZlZTogIkNvZmZlZVNjcmlwdCIsCiAgICBIVE1MX1J1Ynk6ICJIVE1MIChSdWJ5KSIsCiAgICBIVE1MX0VsaXhpcjogIkhUTUwgKEVsaXhpcikiLAogICAgRlRMOiAiRnJlZU1hcmtlciIsCiAgICBQSFBfTGFyYXZlbF9ibGFkZTogIlBIUCAoQmxhZGUgVGVtcGxhdGUpIiwKICAgIFBlcmw2OiAiUGVybCA2IiwKICAgIEF1dG9Ib3RLZXk6ICJBdXRvSG90a2V5IC8gQXV0b0l0Igp9Owp2YXIgbW9kZXNCeU5hbWUgPSB7fTsKZm9yICh2YXIgbmFtZSBpbiBzdXBwb3J0ZWRNb2RlcykgewogICAgdmFyIGRhdGEgPSBzdXBwb3J0ZWRNb2Rlc1tuYW1lXTsKICAgIHZhciBkaXNwbGF5TmFtZSA9IChuYW1lT3ZlcnJpZGVzW25hbWVdIHx8IG5hbWUpLnJlcGxhY2UoL18vZywgIiAiKTsKICAgIHZhciBmaWxlbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgIHZhciBtb2RlID0gbmV3IE1vZGUoZmlsZW5hbWUsIGRpc3BsYXlOYW1lLCBkYXRhWzBdKTsKICAgIG1vZGVzQnlOYW1lW2ZpbGVuYW1lXSA9IG1vZGU7CiAgICBtb2Rlcy5wdXNoKG1vZGUpOwp9Cgptb2R1bGUuZXhwb3J0cyA9IHsKICAgIGdldE1vZGVGb3JQYXRoOiBnZXRNb2RlRm9yUGF0aCwKICAgIG1vZGVzOiBtb2RlcywKICAgIG1vZGVzQnlOYW1lOiBtb2Rlc0J5TmFtZQp9OwoKfSk7CgpkZWZpbmUoImFjZS9leHQvdGhlbWVsaXN0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgdGhlbWVEYXRhID0gWwogICAgWyJDaHJvbWUiICAgICAgICAgXSwKICAgIFsiQ2xvdWRzIiAgICAgICAgIF0sCiAgICBbIkNyaW1zb24gRWRpdG9yIiBdLAogICAgWyJEYXduIiAgICAgICAgICAgXSwKICAgIFsiRHJlYW13ZWF2ZXIiICAgIF0sCiAgICBbIkVjbGlwc2UiICAgICAgICBdLAogICAgWyJHaXRIdWIiICAgICAgICAgXSwKICAgIFsiSVBsYXN0aWMiICAgICAgIF0sCiAgICBbIlNvbGFyaXplZCBMaWdodCJdLAogICAgWyJUZXh0TWF0ZSIgICAgICAgXSwKICAgIFsiVG9tb3Jyb3ciICAgICAgIF0sCiAgICBbIlhDb2RlIiAgICAgICAgICBdLAogICAgWyJLdXJvaXIiXSwKICAgIFsiS2F0emVuTWlsY2giXSwKICAgIFsiU1FMIFNlcnZlciIgICAgICAgICAgICwic3Fsc2VydmVyIiAgICAgICAgICAgICAgICwgImxpZ2h0Il0sCiAgICBbIkFtYmlhbmNlIiAgICAgICAgICAgICAsImFtYmlhbmNlIiAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJDaGFvcyIgICAgICAgICAgICAgICAgLCJjaGFvcyIgICAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiQ2xvdWRzIE1pZG5pZ2h0IiAgICAgICwiY2xvdWRzX21pZG5pZ2h0IiAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIkRyYWN1bGEiICAgICAgICAgICAgICAsIiIgICAgICAgICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJDb2JhbHQiICAgICAgICAgICAgICAgLCJjb2JhbHQiICAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiR3J1dmJveCIgICAgICAgICAgICAgICwiZ3J1dmJveCIgICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIkdyZWVuIG9uIEJsYWNrIiAgICAgICAsImdvYiIgICAgICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJpZGxlIEZpbmdlcnMiICAgICAgICAgLCJpZGxlX2ZpbmdlcnMiICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsia3JUaGVtZSIgICAgICAgICAgICAgICwia3JfdGhlbWUiICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIk1lcmJpdm9yZSIgICAgICAgICAgICAsIm1lcmJpdm9yZSIgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJNZXJiaXZvcmUgU29mdCIgICAgICAgLCJtZXJiaXZvcmVfc29mdCIgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiTW9ubyBJbmR1c3RyaWFsIiAgICAgICwibW9ub19pbmR1c3RyaWFsIiAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIk1vbm9rYWkiICAgICAgICAgICAgICAsIm1vbm9rYWkiICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJQYXN0ZWwgb24gZGFyayIgICAgICAgLCJwYXN0ZWxfb25fZGFyayIgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiU29sYXJpemVkIERhcmsiICAgICAgICwic29sYXJpemVkX2RhcmsiICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIlRlcm1pbmFsIiAgICAgICAgICAgICAsInRlcm1pbmFsIiAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJUb21vcnJvdyBOaWdodCIgICAgICAgLCJ0b21vcnJvd19uaWdodCIgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiVG9tb3Jyb3cgTmlnaHQgQmx1ZSIgICwidG9tb3Jyb3dfbmlnaHRfYmx1ZSIgICAgICwgICJkYXJrIl0sCiAgICBbIlRvbW9ycm93IE5pZ2h0IEJyaWdodCIsInRvbW9ycm93X25pZ2h0X2JyaWdodCIgICAsICAiZGFyayJdLAogICAgWyJUb21vcnJvdyBOaWdodCA4MHMiICAgLCJ0b21vcnJvd19uaWdodF9laWdodGllcyIgLCAgImRhcmsiXSwKICAgIFsiVHdpbGlnaHQiICAgICAgICAgICAgICwidHdpbGlnaHQiICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIlZpYnJhbnQgSW5rIiAgICAgICAgICAsInZpYnJhbnRfaW5rIiAgICAgICAgICAgICAsICAiZGFyayJdCl07CgoKZXhwb3J0cy50aGVtZXNCeU5hbWUgPSB7fTsKZXhwb3J0cy50aGVtZXMgPSB0aGVtZURhdGEubWFwKGZ1bmN0aW9uKGRhdGEpIHsKICAgIHZhciBuYW1lID0gZGF0YVsxXSB8fCBkYXRhWzBdLnJlcGxhY2UoLyAvZywgIl8iKS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIHRoZW1lID0gewogICAgICAgIGNhcHRpb246IGRhdGFbMF0sCiAgICAgICAgdGhlbWU6ICJhY2UvdGhlbWUvIiArIG5hbWUsCiAgICAgICAgaXNEYXJrOiBkYXRhWzJdID09ICJkYXJrIiwKICAgICAgICBuYW1lOiBuYW1lCiAgICB9OwogICAgZXhwb3J0cy50aGVtZXNCeU5hbWVbbmFtZV0gPSB0aGVtZTsKICAgIHJldHVybiB0aGVtZTsKfSk7Cgp9KTsKCmRlZmluZSgiYWNlL2V4dC9vcHRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2V4dC9tZW51X3Rvb2xzL292ZXJsYXlfcGFnZSIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9vb3AiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2V4dC9tb2RlbGlzdCIsImFjZS9leHQvdGhlbWVsaXN0Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBvdmVybGF5UGFnZSA9IHJlcXVpcmUoJy4vbWVudV90b29scy9vdmVybGF5X3BhZ2UnKS5vdmVybGF5UGFnZTsKCiAKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50X2VtaXR0ZXIiKS5FdmVudEVtaXR0ZXI7CnZhciBidWlsZERvbSA9IGRvbS5idWlsZERvbTsKCnZhciBtb2RlbGlzdCA9IHJlcXVpcmUoIi4vbW9kZWxpc3QiKTsKdmFyIHRoZW1lbGlzdCA9IHJlcXVpcmUoIi4vdGhlbWVsaXN0Iik7Cgp2YXIgdGhlbWVzID0geyBCcmlnaHQ6IFtdLCBEYXJrOiBbXSB9Owp0aGVtZWxpc3QudGhlbWVzLmZvckVhY2goZnVuY3Rpb24oeCkgewogICAgdGhlbWVzW3guaXNEYXJrID8gIkRhcmsiIDogIkJyaWdodCJdLnB1c2goeyBjYXB0aW9uOiB4LmNhcHRpb24sIHZhbHVlOiB4LnRoZW1lIH0pOwp9KTsKCnZhciBtb2RlcyA9IG1vZGVsaXN0Lm1vZGVzLm1hcChmdW5jdGlvbih4KXsgCiAgICByZXR1cm4geyBjYXB0aW9uOiB4LmNhcHRpb24sIHZhbHVlOiB4Lm1vZGUgfTsgCn0pOwoKCnZhciBvcHRpb25Hcm91cHMgPSB7CiAgICBNYWluOiB7CiAgICAgICAgTW9kZTogewogICAgICAgICAgICBwYXRoOiAibW9kZSIsCiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiLAogICAgICAgICAgICBpdGVtczogbW9kZXMKICAgICAgICB9LAogICAgICAgIFRoZW1lOiB7CiAgICAgICAgICAgIHBhdGg6ICJ0aGVtZSIsCiAgICAgICAgICAgIHR5cGU6ICJzZWxlY3QiLAogICAgICAgICAgICBpdGVtczogdGhlbWVzCiAgICAgICAgfSwKICAgICAgICAiS2V5YmluZGluZyI6IHsKICAgICAgICAgICAgdHlwZTogImJ1dHRvbkJhciIsCiAgICAgICAgICAgIHBhdGg6ICJrZXlib2FyZEhhbmRsZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIkFjZSIsIHZhbHVlIDogbnVsbCB9LAogICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIlZpbSIsIHZhbHVlIDogImFjZS9rZXlib2FyZC92aW0iIH0sCiAgICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiRW1hY3MiLCB2YWx1ZSA6ICJhY2Uva2V5Ym9hcmQvZW1hY3MiIH0sCiAgICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiU3VibGltZSIsIHZhbHVlIDogImFjZS9rZXlib2FyZC9zdWJsaW1lIiB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJGb250IFNpemUiOiB7CiAgICAgICAgICAgIHBhdGg6ICJmb250U2l6ZSIsCiAgICAgICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgICAgICBkZWZhdWx0VmFsdWU6IDEyLAogICAgICAgICAgICBkZWZhdWx0czogWwogICAgICAgICAgICAgICAge2NhcHRpb246ICIxMnB4IiwgdmFsdWU6IDEyfSwKICAgICAgICAgICAgICAgIHtjYXB0aW9uOiAiMjRweCIsIHZhbHVlOiAyNH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIlNvZnQgV3JhcCI6IHsKICAgICAgICAgICAgdHlwZTogImJ1dHRvbkJhciIsCiAgICAgICAgICAgIHBhdGg6ICJ3cmFwIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIk9mZiIsICB2YWx1ZSA6ICJvZmYiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJWaWV3IiwgdmFsdWUgOiAiZnJlZSIgfSwKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIm1hcmdpbiIsIHZhbHVlIDogInByaW50TWFyZ2luIiB9LAogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiNDAiLCAgIHZhbHVlIDogIjQwIiB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJDdXJzb3IgU3R5bGUiOiB7CiAgICAgICAgICAgIHBhdGg6ICJjdXJzb3JTdHlsZSIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJBY2UiLCAgICB2YWx1ZSA6ICJhY2UiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJTbGltIiwgICB2YWx1ZSA6ICJzbGltIiB9LAogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiU21vb3RoIiwgdmFsdWUgOiAic21vb3RoIiB9LAogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiU21vb3RoIEFuZCBTbGltIiwgdmFsdWUgOiAic21vb3RoIHNsaW0iIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJXaWRlIiwgICB2YWx1ZSA6ICJ3aWRlIiB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJGb2xkaW5nIjogewogICAgICAgICAgICBwYXRoOiAiZm9sZFN0eWxlIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJNYW51YWwiLCB2YWx1ZSA6ICJtYW51YWwiIH0sCiAgICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiTWFyayBiZWdpbiIsIHZhbHVlIDogIm1hcmtiZWdpbiIgfSwKICAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJNYXJrIGJlZ2luIGFuZCBlbmQiLCB2YWx1ZSA6ICJtYXJrYmVnaW5lbmQiIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIlNvZnQgVGFicyI6IFt7CiAgICAgICAgICAgIHBhdGg6ICJ1c2VTb2Z0VGFicyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHBhdGg6ICJ0YWJTaXplIiwKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIHZhbHVlczogWzIsIDMsIDQsIDgsIDE2XQogICAgICAgIH1dLAogICAgICAgICJPdmVyc2Nyb2xsIjogewogICAgICAgICAgICB0eXBlOiAiYnV0dG9uQmFyIiwKICAgICAgICAgICAgcGF0aDogInNjcm9sbFBhc3RFbmQiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgICB7IGNhcHRpb24gOiAiTm9uZSIsICB2YWx1ZSA6IDAgfSwKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIkhhbGYiLCAgIHZhbHVlIDogMC41IH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJGdWxsIiwgICB2YWx1ZSA6IDEgfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgfSwKICAgIE1vcmU6IHsKICAgICAgICAiQXRvbWljIHNvZnQgdGFicyI6IHsKICAgICAgICAgICAgcGF0aDogIm5hdmlnYXRlV2l0aGluU29mdFRhYnMiCiAgICAgICAgfSwKICAgICAgICAiRW5hYmxlIEJlaGF2aW91cnMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJiZWhhdmlvdXJzRW5hYmxlZCIKICAgICAgICB9LAogICAgICAgICJGdWxsIExpbmUgU2VsZWN0aW9uIjogewogICAgICAgICAgICB0eXBlOiAiY2hlY2tib3giLAogICAgICAgICAgICB2YWx1ZXM6ICJ0ZXh0fGxpbmUiLAogICAgICAgICAgICBwYXRoOiAic2VsZWN0aW9uU3R5bGUiCiAgICAgICAgfSwKICAgICAgICAiSGlnaGxpZ2h0IEFjdGl2ZSBMaW5lIjogewogICAgICAgICAgICBwYXRoOiAiaGlnaGxpZ2h0QWN0aXZlTGluZSIKICAgICAgICB9LAogICAgICAgICJTaG93IEludmlzaWJsZXMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJzaG93SW52aXNpYmxlcyIKICAgICAgICB9LAogICAgICAgICJTaG93IEluZGVudCBHdWlkZXMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJkaXNwbGF5SW5kZW50R3VpZGVzIgogICAgICAgIH0sCiAgICAgICAgIlBlcnNpc3RlbnQgU2Nyb2xsYmFyIjogW3sKICAgICAgICAgICAgcGF0aDogImhTY3JvbGxCYXJBbHdheXNWaXNpYmxlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgcGF0aDogInZTY3JvbGxCYXJBbHdheXNWaXNpYmxlIgogICAgICAgIH1dLAogICAgICAgICJBbmltYXRlIHNjcm9sbGluZyI6IHsKICAgICAgICAgICAgcGF0aDogImFuaW1hdGVkU2Nyb2xsIgogICAgICAgIH0sCiAgICAgICAgIlNob3cgR3V0dGVyIjogewogICAgICAgICAgICBwYXRoOiAic2hvd0d1dHRlciIKICAgICAgICB9LAogICAgICAgICJTaG93IExpbmUgTnVtYmVycyI6IHsKICAgICAgICAgICAgcGF0aDogInNob3dMaW5lTnVtYmVycyIKICAgICAgICB9LAogICAgICAgICJSZWxhdGl2ZSBMaW5lIE51bWJlcnMiOiB7CiAgICAgICAgICAgIHBhdGg6ICJyZWxhdGl2ZUxpbmVOdW1iZXJzIgogICAgICAgIH0sCiAgICAgICAgIkZpeGVkIEd1dHRlciBXaWR0aCI6IHsKICAgICAgICAgICAgcGF0aDogImZpeGVkV2lkdGhHdXR0ZXIiCiAgICAgICAgfSwKICAgICAgICAiU2hvdyBQcmludCBNYXJnaW4iOiBbewogICAgICAgICAgICBwYXRoOiAic2hvd1ByaW50TWFyZ2luIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgICAgIHBhdGg6ICJwcmludE1hcmdpbkNvbHVtbiIKICAgICAgICB9XSwKICAgICAgICAiSW5kZW50ZWQgU29mdCBXcmFwIjogewogICAgICAgICAgICBwYXRoOiAiaW5kZW50ZWRTb2Z0V3JhcCIKICAgICAgICB9LAogICAgICAgICJIaWdobGlnaHQgc2VsZWN0ZWQgd29yZCI6IHsKICAgICAgICAgICAgcGF0aDogImhpZ2hsaWdodFNlbGVjdGVkV29yZCIKICAgICAgICB9LAogICAgICAgICJGYWRlIEZvbGQgV2lkZ2V0cyI6IHsKICAgICAgICAgICAgcGF0aDogImZhZGVGb2xkV2lkZ2V0cyIKICAgICAgICB9LAogICAgICAgICJVc2UgdGV4dGFyZWEgZm9yIElNRSI6IHsKICAgICAgICAgICAgcGF0aDogInVzZVRleHRhcmVhRm9ySU1FIgogICAgICAgIH0sCiAgICAgICAgIk1lcmdlIFVuZG8gRGVsdGFzIjogewogICAgICAgICAgICBwYXRoOiAibWVyZ2VVbmRvRGVsdGFzIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICAgeyBjYXB0aW9uIDogIkFsd2F5cyIsICB2YWx1ZSA6ICJhbHdheXMiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJOZXZlciIsICAgdmFsdWUgOiAiZmFsc2UiIH0sCiAgICAgICAgICAgICAgIHsgY2FwdGlvbiA6ICJUaW1lZCIsICAgdmFsdWUgOiAidHJ1ZSIgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAiRWxhc3RpYyBUYWJzdG9wcyI6IHsKICAgICAgICAgICAgcGF0aDogInVzZUVsYXN0aWNUYWJzdG9wcyIKICAgICAgICB9LAogICAgICAgICJJbmNyZW1lbnRhbCBTZWFyY2giOiB7CiAgICAgICAgICAgIHBhdGg6ICJ1c2VJbmNyZW1lbnRhbFNlYXJjaCIKICAgICAgICB9LAogICAgICAgICJSZWFkLW9ubHkiOiB7CiAgICAgICAgICAgIHBhdGg6ICJyZWFkT25seSIKICAgICAgICB9LAogICAgICAgICJDb3B5IHdpdGhvdXQgc2VsZWN0aW9uIjogewogICAgICAgICAgICBwYXRoOiAiY29weVdpdGhFbXB0eVNlbGVjdGlvbiIKICAgICAgICB9LAogICAgICAgICJMaXZlIEF1dG9jb21wbGV0aW9uIjogewogICAgICAgICAgICBwYXRoOiAiZW5hYmxlTGl2ZUF1dG9jb21wbGV0aW9uIgogICAgICAgIH0KICAgIH0KfTsKCgp2YXIgT3B0aW9uUGFuZWwgPSBmdW5jdGlvbihlZGl0b3IsIGVsZW1lbnQpIHsKICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yOwogICAgdGhpcy5jb250YWluZXIgPSBlbGVtZW50IHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5ncm91cHMgPSBbXTsKICAgIHRoaXMub3B0aW9ucyA9IHt9Owp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAKICAgIHRoaXMuYWRkID0gZnVuY3Rpb24oY29uZmlnKSB7CiAgICAgICAgaWYgKGNvbmZpZy5NYWluKQogICAgICAgICAgICBvb3AubWl4aW4ob3B0aW9uR3JvdXBzLk1haW4sIGNvbmZpZy5NYWluKTsKICAgICAgICBpZiAoY29uZmlnLk1vcmUpCiAgICAgICAgICAgIG9vcC5taXhpbihvcHRpb25Hcm91cHMuTW9yZSwgY29uZmlnLk1vcmUpOwogICAgfTsKICAgIAogICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICBidWlsZERvbShbInRhYmxlIiwge2lkOiAiY29udHJvbHMifSwgCiAgICAgICAgICAgIHRoaXMucmVuZGVyT3B0aW9uR3JvdXAob3B0aW9uR3JvdXBzLk1haW4pLAogICAgICAgICAgICBbInRyIiwgbnVsbCwgWyJ0ZCIsIHtjb2xzcGFuOiAyfSwKICAgICAgICAgICAgICAgIFsidGFibGUiLCB7aWQ6ICJtb3JlLWNvbnRyb2xzIn0sIAogICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyT3B0aW9uR3JvdXAob3B0aW9uR3JvdXBzLk1vcmUpCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIF1dLAogICAgICAgICAgICBbInRyIiwgbnVsbCwgWyJ0ZCIsIHtjb2xzcGFuOiAyfSwgInZlcnNpb24gIiArIGNvbmZpZy52ZXJzaW9uXV0KICAgICAgICBdLCB0aGlzLmNvbnRhaW5lcik7CiAgICB9OwogICAgCiAgICB0aGlzLnJlbmRlck9wdGlvbkdyb3VwID0gZnVuY3Rpb24oZ3JvdXApIHsKICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcChmdW5jdGlvbihrZXksIGkpIHsKICAgICAgICAgICAgdmFyIGl0ZW0gPSBncm91cFtrZXldOwogICAgICAgICAgICBpZiAoIWl0ZW0ucG9zaXRpb24pCiAgICAgICAgICAgICAgICBpdGVtLnBvc2l0aW9uID0gaSAvIDEwMDAwOwogICAgICAgICAgICBpZiAoIWl0ZW0ubGFiZWwpCiAgICAgICAgICAgICAgICBpdGVtLmxhYmVsID0ga2V5OwogICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgcmV0dXJuIGEucG9zaXRpb24gLSBiLnBvc2l0aW9uOwogICAgICAgIH0pLm1hcChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck9wdGlvbihpdGVtLmxhYmVsLCBpdGVtKTsKICAgICAgICB9LCB0aGlzKTsKICAgIH07CiAgICAKICAgIHRoaXMucmVuZGVyT3B0aW9uQ29udHJvbCA9IGZ1bmN0aW9uKGtleSwgb3B0aW9uKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbikpIHsKICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5tYXAoZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVuZGVyT3B0aW9uQ29udHJvbChrZXksIHgpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdmFyIGNvbnRyb2w7CiAgICAgICAgCiAgICAgICAgdmFyIHZhbHVlID0gc2VsZi5nZXRPcHRpb24ob3B0aW9uKTsKICAgICAgICAKICAgICAgICBpZiAob3B0aW9uLnZhbHVlcyAmJiBvcHRpb24udHlwZSAhPSAiY2hlY2tib3giKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uLnZhbHVlcyA9PSAic3RyaW5nIikKICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZXMgPSBvcHRpb24udmFsdWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIG9wdGlvbi5pdGVtcyA9IG9wdGlvbi52YWx1ZXMubWFwKGZ1bmN0aW9uKHYpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2LCBuYW1lOiB2IH07CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAob3B0aW9uLnR5cGUgPT0gImJ1dHRvbkJhciIpIHsKICAgICAgICAgICAgY29udHJvbCA9IFsiZGl2Iiwgb3B0aW9uLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWyJidXR0b24iLCB7IAogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICBhY2Vfc2VsZWN0ZWRfYnV0dG9uOiB2YWx1ZSA9PSBpdGVtLnZhbHVlLCAKICAgICAgICAgICAgICAgICAgICBvbmNsaWNrOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRPcHRpb24ob3B0aW9uLCBpdGVtLnZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIlthY2Vfc2VsZWN0ZWRfYnV0dG9uXSIpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImFjZV9zZWxlY3RlZF9idXR0b24iKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgiYWNlX3NlbGVjdGVkX2J1dHRvbiIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICB9LCBpdGVtLmRlc2MgfHwgaXRlbS5jYXB0aW9uIHx8IGl0ZW0ubmFtZV07CiAgICAgICAgICAgIH0pXTsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbi50eXBlID09ICJudW1iZXIiKSB7CiAgICAgICAgICAgIGNvbnRyb2wgPSBbImlucHV0Iiwge3R5cGU6ICJudW1iZXIiLCB2YWx1ZTogdmFsdWUgfHwgb3B0aW9uLmRlZmF1bHRWYWx1ZSwgc3R5bGU6IndpZHRoOjNlbSIsIG9uaW5wdXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgc2VsZi5zZXRPcHRpb24ob3B0aW9uLCBwYXJzZUludCh0aGlzLnZhbHVlKSk7CiAgICAgICAgICAgIH19XTsKICAgICAgICAgICAgaWYgKG9wdGlvbi5kZWZhdWx0cykgewogICAgICAgICAgICAgICAgY29udHJvbCA9IFtjb250cm9sLCBvcHRpb24uZGVmYXVsdHMubWFwKGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJidXR0b24iLCB7b25jbGljazogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IGl0ZW0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Lm9uaW5wdXQoKTsKICAgICAgICAgICAgICAgICAgICB9fSwgaXRlbS5jYXB0aW9uXTsKICAgICAgICAgICAgICAgIH0pXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLml0ZW1zKSB7CiAgICAgICAgICAgIHZhciBidWlsZEl0ZW1zID0gZnVuY3Rpb24oaXRlbXMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBbIm9wdGlvbiIsIHsgdmFsdWU6IGl0ZW0udmFsdWUgfHwgaXRlbS5uYW1lIH0sIGl0ZW0uZGVzYyB8fCBpdGVtLmNhcHRpb24gfHwgaXRlbS5uYW1lXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIGl0ZW1zID0gQXJyYXkuaXNBcnJheShvcHRpb24uaXRlbXMpIAogICAgICAgICAgICAgICAgPyBidWlsZEl0ZW1zKG9wdGlvbi5pdGVtcykKICAgICAgICAgICAgICAgIDogT2JqZWN0LmtleXMob3B0aW9uLml0ZW1zKS5tYXAoZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsib3B0Z3JvdXAiLCB7ImxhYmVsIjoga2V5fSwgYnVpbGRJdGVtcyhvcHRpb24uaXRlbXNba2V5XSldOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbnRyb2wgPSBbInNlbGVjdCIsIHsgaWQ6IGtleSwgdmFsdWU6IHZhbHVlLCBvbmNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBzZWxmLnNldE9wdGlvbihvcHRpb24sIHRoaXMudmFsdWUpOwogICAgICAgICAgICB9IH0sIGl0ZW1zXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbi52YWx1ZXMgPT0gInN0cmluZyIpCiAgICAgICAgICAgICAgICBvcHRpb24udmFsdWVzID0gb3B0aW9uLnZhbHVlcy5zcGxpdCgifCIpOwogICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlcykgdmFsdWUgPSB2YWx1ZSA9PSBvcHRpb24udmFsdWVzWzFdOwogICAgICAgICAgICBjb250cm9sID0gWyJpbnB1dCIsIHsgdHlwZTogImNoZWNrYm94IiwgaWQ6IGtleSwgY2hlY2tlZDogdmFsdWUgfHwgbnVsbCwgb25jaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5jaGVja2VkOwogICAgICAgICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZXMpIHZhbHVlID0gb3B0aW9uLnZhbHVlc1t2YWx1ZSA/IDEgOiAwXTsKICAgICAgICAgICAgICAgIHNlbGYuc2V0T3B0aW9uKG9wdGlvbiwgdmFsdWUpOwogICAgICAgICAgICB9fV07CiAgICAgICAgICAgIGlmIChvcHRpb24udHlwZSA9PSAiY2hlY2tlZE51bWJlciIpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBbY29udHJvbCwgW11dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb250cm9sOwogICAgfTsKICAgIAogICAgdGhpcy5yZW5kZXJPcHRpb24gPSBmdW5jdGlvbihrZXksIG9wdGlvbikgewogICAgICAgIGlmIChvcHRpb24ucGF0aCAmJiAhb3B0aW9uLm9uY2hhbmdlICYmICF0aGlzLmVkaXRvci4kb3B0aW9uc1tvcHRpb24ucGF0aF0pCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLm9wdGlvbnNbb3B0aW9uLnBhdGhdID0gb3B0aW9uOwogICAgICAgIHZhciBzYWZlS2V5ID0gIi0iICsgb3B0aW9uLnBhdGg7CiAgICAgICAgdmFyIGNvbnRyb2wgPSB0aGlzLnJlbmRlck9wdGlvbkNvbnRyb2woc2FmZUtleSwgb3B0aW9uKTsKICAgICAgICByZXR1cm4gWyJ0ciIsIHtjbGFzczogImFjZV9vcHRpb25zTWVudUVudHJ5In0sIFsidGQiLAogICAgICAgICAgICBbImxhYmVsIiwge2Zvcjogc2FmZUtleX0sIGtleV0KICAgICAgICBdLCBbInRkIiwgY29udHJvbF1dOwogICAgfTsKICAgIAogICAgdGhpcy5zZXRPcHRpb24gPSBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7CiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gInN0cmluZyIpCiAgICAgICAgICAgIG9wdGlvbiA9IHRoaXMub3B0aW9uc1tvcHRpb25dOwogICAgICAgIGlmICh2YWx1ZSA9PSAiZmFsc2UiKSB2YWx1ZSA9IGZhbHNlOwogICAgICAgIGlmICh2YWx1ZSA9PSAidHJ1ZSIpIHZhbHVlID0gdHJ1ZTsKICAgICAgICBpZiAodmFsdWUgPT0gIm51bGwiKSB2YWx1ZSA9IG51bGw7CiAgICAgICAgaWYgKHZhbHVlID09ICJ1bmRlZmluZWQiKSB2YWx1ZSA9IHVuZGVmaW5lZDsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICJzdHJpbmciICYmIHBhcnNlRmxvYXQodmFsdWUpLnRvU3RyaW5nKCkgPT0gdmFsdWUpCiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSk7CiAgICAgICAgaWYgKG9wdGlvbi5vbmNoYW5nZSkKICAgICAgICAgICAgb3B0aW9uLm9uY2hhbmdlKHZhbHVlKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24ucGF0aCkKICAgICAgICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9uKG9wdGlvbi5wYXRoLCB2YWx1ZSk7CiAgICAgICAgdGhpcy5fc2lnbmFsKCJzZXRPcHRpb24iLCB7bmFtZTogb3B0aW9uLnBhdGgsIHZhbHVlOiB2YWx1ZX0pOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHsKICAgICAgICBpZiAob3B0aW9uLmdldFZhbHVlKQogICAgICAgICAgICByZXR1cm4gb3B0aW9uLmdldFZhbHVlKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yLmdldE9wdGlvbihvcHRpb24ucGF0aCk7CiAgICB9OwogICAgCn0pLmNhbGwoT3B0aW9uUGFuZWwucHJvdG90eXBlKTsKCmV4cG9ydHMuT3B0aW9uUGFuZWwgPSBPcHRpb25QYW5lbDsKCn0pOwoKZGVmaW5lKCJhY2UvZXh0L3NldHRpbmdzX21lbnUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvZXh0L29wdGlvbnMiLCJhY2UvZXh0L21lbnVfdG9vbHMvb3ZlcmxheV9wYWdlIiwiYWNlL2VkaXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwp2YXIgT3B0aW9uUGFuZWwgPSByZXF1aXJlKCIuL29wdGlvbnMiKS5PcHRpb25QYW5lbDsKdmFyIG92ZXJsYXlQYWdlID0gcmVxdWlyZSgnLi9tZW51X3Rvb2xzL292ZXJsYXlfcGFnZScpLm92ZXJsYXlQYWdlOwpmdW5jdGlvbiBzaG93U2V0dGluZ3NNZW51KGVkaXRvcikgewogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWNlX3NldHRpbmdzbWVudScpKSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSBuZXcgT3B0aW9uUGFuZWwoZWRpdG9yKTsKICAgICAgICBvcHRpb25zLnJlbmRlcigpOwogICAgICAgIG9wdGlvbnMuY29udGFpbmVyLmlkID0gImFjZV9zZXR0aW5nc21lbnUiOwogICAgICAgIG92ZXJsYXlQYWdlKGVkaXRvciwgb3B0aW9ucy5jb250YWluZXIpOwogICAgICAgIG9wdGlvbnMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoInNlbGVjdCxpbnB1dCxidXR0b24sY2hlY2tib3giKS5mb2N1cygpOwogICAgfQp9Cm1vZHVsZS5leHBvcnRzLmluaXQgPSBmdW5jdGlvbigpIHsKICAgIHZhciBFZGl0b3IgPSByZXF1aXJlKCIuLi9lZGl0b3IiKS5FZGl0b3I7CiAgICBFZGl0b3IucHJvdG90eXBlLnNob3dTZXR0aW5nc01lbnUgPSBmdW5jdGlvbigpIHsKICAgICAgICBzaG93U2V0dGluZ3NNZW51KHRoaXMpOwogICAgfTsKfTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvc2V0dGluZ3NfbWVudSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-spellcheck.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3NwZWxsY2hlY2siLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2V2ZW50IiwiYWNlL2VkaXRvciIsImFjZS9jb25maWciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CgpleHBvcnRzLmNvbnRleHRNZW51SGFuZGxlciA9IGZ1bmN0aW9uKGUpewogICAgdmFyIGhvc3QgPSBlLnRhcmdldDsKICAgIHZhciB0ZXh0ID0gaG9zdC50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpOwogICAgaWYgKCFob3N0LnNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuOwogICAgdmFyIGMgPSBob3N0LmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICB2YXIgciA9IGhvc3Quc2Vzc2lvbi5nZXRXb3JkUmFuZ2UoYy5yb3csIGMuY29sdW1uKTsKICAgIHZhciB3ID0gaG9zdC5zZXNzaW9uLmdldFRleHRSYW5nZShyKTsKCiAgICBob3N0LnNlc3Npb24udG9rZW5SZS5sYXN0SW5kZXggPSAwOwogICAgaWYgKCFob3N0LnNlc3Npb24udG9rZW5SZS50ZXN0KHcpKQogICAgICAgIHJldHVybjsKICAgIHZhciBQTEFDRUhPTERFUiA9ICJceDAxXHgwMSI7CiAgICB2YXIgdmFsdWUgPSB3ICsgIiAiICsgUExBQ0VIT0xERVI7CiAgICB0ZXh0LnZhbHVlID0gdmFsdWU7CiAgICB0ZXh0LnNldFNlbGVjdGlvblJhbmdlKHcubGVuZ3RoLCB3Lmxlbmd0aCArIDEpOwogICAgdGV4dC5zZXRTZWxlY3Rpb25SYW5nZSgwLCAwKTsKICAgIHRleHQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgdy5sZW5ndGgpOwoKICAgIHZhciBhZnRlcktleWRvd24gPSBmYWxzZTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKHRleHQsICJrZXlkb3duIiwgZnVuY3Rpb24gb25LZXlkb3duKCkgewogICAgICAgIGV2ZW50LnJlbW92ZUxpc3RlbmVyKHRleHQsICJrZXlkb3duIiwgb25LZXlkb3duKTsKICAgICAgICBhZnRlcktleWRvd24gPSB0cnVlOwogICAgfSk7CgogICAgaG9zdC50ZXh0SW5wdXQuc2V0SW5wdXRIYW5kbGVyKGZ1bmN0aW9uKG5ld1ZhbCkgewogICAgICAgIGNvbnNvbGUubG9nKG5ld1ZhbCAsIHZhbHVlLCB0ZXh0LnNlbGVjdGlvblN0YXJ0LCB0ZXh0LnNlbGVjdGlvbkVuZCk7CiAgICAgICAgaWYgKG5ld1ZhbCA9PSB2YWx1ZSkKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIGlmIChuZXdWYWwubGFzdEluZGV4T2YodmFsdWUsIDApID09PSAwKQogICAgICAgICAgICByZXR1cm4gbmV3VmFsLnNsaWNlKHZhbHVlLmxlbmd0aCk7CiAgICAgICAgaWYgKG5ld1ZhbC5zdWJzdHIodGV4dC5zZWxlY3Rpb25FbmQpID09IHZhbHVlKQogICAgICAgICAgICByZXR1cm4gbmV3VmFsLnNsaWNlKDAsIC12YWx1ZS5sZW5ndGgpOwogICAgICAgIGlmIChuZXdWYWwuc2xpY2UoLTIpID09IFBMQUNFSE9MREVSKSB7CiAgICAgICAgICAgIHZhciB2YWwgPSBuZXdWYWwuc2xpY2UoMCwgLTIpOwogICAgICAgICAgICBpZiAodmFsLnNsaWNlKC0xKSA9PSAiICIpIHsKICAgICAgICAgICAgICAgIGlmIChhZnRlcktleWRvd24pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbC5zdWJzdHJpbmcoMCwgdGV4dC5zZWxlY3Rpb25FbmQpOwogICAgICAgICAgICAgICAgdmFsID0gdmFsLnNsaWNlKDAsIC0xKTsKICAgICAgICAgICAgICAgIGhvc3Quc2Vzc2lvbi5yZXBsYWNlKHIsIHZhbCk7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXdWYWw7CiAgICB9KTsKfTsKdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4uL2VkaXRvciIpLkVkaXRvcjsKcmVxdWlyZSgiLi4vY29uZmlnIikuZGVmaW5lT3B0aW9ucyhFZGl0b3IucHJvdG90eXBlLCAiZWRpdG9yIiwgewogICAgc3BlbGxjaGVjazogewogICAgICAgIHNldDogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gdGhpcy50ZXh0SW5wdXQuZ2V0RWxlbWVudCgpOwogICAgICAgICAgICB0ZXh0LnNwZWxsY2hlY2sgPSAhIXZhbDsKICAgICAgICAgICAgaWYgKCF2YWwpCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCJuYXRpdmVjb250ZXh0bWVudSIsIGV4cG9ydHMuY29udGV4dE1lbnVIYW5kbGVyKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy5vbigibmF0aXZlY29udGV4dG1lbnUiLCBleHBvcnRzLmNvbnRleHRNZW51SGFuZGxlcik7CiAgICAgICAgfSwKICAgICAgICB2YWx1ZTogdHJ1ZQogICAgfQp9KTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvZXh0L3NwZWxsY2hlY2siXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-split.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc3BsaXQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9saWIvZXZlbnRfZW1pdHRlciIsImFjZS9lZGl0b3IiLCJhY2UvdmlydHVhbF9yZW5kZXJlciIsImFjZS9lZGl0X3Nlc3Npb24iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuL2xpYi9sYW5nIik7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwoKdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwp2YXIgUmVuZGVyZXIgPSByZXF1aXJlKCIuL3ZpcnR1YWxfcmVuZGVyZXIiKS5WaXJ0dWFsUmVuZGVyZXI7CnZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4vZWRpdF9zZXNzaW9uIikuRWRpdFNlc3Npb247CgoKdmFyIFNwbGl0ID0gZnVuY3Rpb24oY29udGFpbmVyLCB0aGVtZSwgc3BsaXRzKSB7CiAgICB0aGlzLkJFTE9XID0gMTsKICAgIHRoaXMuQkVTSURFID0gMDsKCiAgICB0aGlzLiRjb250YWluZXIgPSBjb250YWluZXI7CiAgICB0aGlzLiR0aGVtZSA9IHRoZW1lOwogICAgdGhpcy4kc3BsaXRzID0gMDsKICAgIHRoaXMuJGVkaXRvckNTUyA9ICIiOwogICAgdGhpcy4kZWRpdG9ycyA9IFtdOwogICAgdGhpcy4kb3JpZW50YXRpb24gPSB0aGlzLkJFU0lERTsKCiAgICB0aGlzLnNldFNwbGl0cyhzcGxpdHMgfHwgMSk7CiAgICB0aGlzLiRjRWRpdG9yID0gdGhpcy4kZWRpdG9yc1swXTsKCgogICAgdGhpcy5vbigiZm9jdXMiLCBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB0aGlzLiRjRWRpdG9yID0gZWRpdG9yOwogICAgfS5iaW5kKHRoaXMpKTsKfTsKCihmdW5jdGlvbigpewoKICAgIG9vcC5pbXBsZW1lbnQodGhpcywgRXZlbnRFbWl0dGVyKTsKCiAgICB0aGlzLiRjcmVhdGVFZGl0b3IgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICBlbC5jbGFzc05hbWUgPSB0aGlzLiRlZGl0b3JDU1M7CiAgICAgICAgZWwuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDowcHg7IGJvdHRvbTowcHgiOwogICAgICAgIHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbCk7CiAgICAgICAgdmFyIGVkaXRvciA9IG5ldyBFZGl0b3IobmV3IFJlbmRlcmVyKGVsLCB0aGlzLiR0aGVtZSkpOwoKICAgICAgICBlZGl0b3Iub24oImZvY3VzIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuX2VtaXQoImZvY3VzIiwgZWRpdG9yKTsKICAgICAgICB9LmJpbmQodGhpcykpOwoKICAgICAgICB0aGlzLiRlZGl0b3JzLnB1c2goZWRpdG9yKTsKICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUodGhpcy4kZm9udFNpemUpOwogICAgICAgIHJldHVybiBlZGl0b3I7CiAgICB9OwoKICAgIHRoaXMuc2V0U3BsaXRzID0gZnVuY3Rpb24oc3BsaXRzKSB7CiAgICAgICAgdmFyIGVkaXRvcjsKICAgICAgICBpZiAoc3BsaXRzIDwgMSkgewogICAgICAgICAgICB0aHJvdyAiVGhlIG51bWJlciBvZiBzcGxpdHMgaGF2ZSB0byBiZSA+IDAhIjsKICAgICAgICB9CgogICAgICAgIGlmIChzcGxpdHMgPT0gdGhpcy4kc3BsaXRzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgaWYgKHNwbGl0cyA+IHRoaXMuJHNwbGl0cykgewogICAgICAgICAgICB3aGlsZSAodGhpcy4kc3BsaXRzIDwgdGhpcy4kZWRpdG9ycy5sZW5ndGggJiYgdGhpcy4kc3BsaXRzIDwgc3BsaXRzKSB7CiAgICAgICAgICAgICAgICBlZGl0b3IgPSB0aGlzLiRlZGl0b3JzW3RoaXMuJHNwbGl0c107CiAgICAgICAgICAgICAgICB0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQoZWRpdG9yLmNvbnRhaW5lcik7CiAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUodGhpcy4kZm9udFNpemUpOwogICAgICAgICAgICAgICAgdGhpcy4kc3BsaXRzICsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlICh0aGlzLiRzcGxpdHMgPCBzcGxpdHMpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGNyZWF0ZUVkaXRvcigpOwogICAgICAgICAgICAgICAgdGhpcy4kc3BsaXRzICsrOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKHRoaXMuJHNwbGl0cyA+IHNwbGl0cykgewogICAgICAgICAgICAgICAgZWRpdG9yID0gdGhpcy4kZWRpdG9yc1t0aGlzLiRzcGxpdHMgLSAxXTsKICAgICAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmVDaGlsZChlZGl0b3IuY29udGFpbmVyKTsKICAgICAgICAgICAgICAgIHRoaXMuJHNwbGl0cyAtLTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZSgpOwogICAgfTsKICAgIHRoaXMuZ2V0U3BsaXRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJHNwbGl0czsKICAgIH07CiAgICB0aGlzLmdldEVkaXRvciA9IGZ1bmN0aW9uKGlkeCkgewogICAgICAgIHJldHVybiB0aGlzLiRlZGl0b3JzW2lkeF07CiAgICB9OwogICAgdGhpcy5nZXRDdXJyZW50RWRpdG9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNFZGl0b3I7CiAgICB9OwogICAgdGhpcy5mb2N1cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGNFZGl0b3IuZm9jdXMoKTsKICAgIH07CiAgICB0aGlzLmJsdXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLiRjRWRpdG9yLmJsdXIoKTsKICAgIH07CiAgICB0aGlzLnNldFRoZW1lID0gZnVuY3Rpb24odGhlbWUpIHsKICAgICAgICB0aGlzLiRlZGl0b3JzLmZvckVhY2goZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgICAgIGVkaXRvci5zZXRUaGVtZSh0aGVtZSk7CiAgICAgICAgfSk7CiAgICB9OwogICAgdGhpcy5zZXRLZXlib2FyZEhhbmRsZXIgPSBmdW5jdGlvbihrZXliaW5kaW5nKSB7CiAgICAgICAgdGhpcy4kZWRpdG9ycy5mb3JFYWNoKGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgICAgICBlZGl0b3Iuc2V0S2V5Ym9hcmRIYW5kbGVyKGtleWJpbmRpbmcpOwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZm9yRWFjaCA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBzY29wZSkgewogICAgICAgIHRoaXMuJGVkaXRvcnMuZm9yRWFjaChjYWxsYmFjaywgc2NvcGUpOwogICAgfTsKCgogICAgdGhpcy4kZm9udFNpemUgPSAiIjsKICAgIHRoaXMuc2V0Rm9udFNpemUgPSBmdW5jdGlvbihzaXplKSB7CiAgICAgICAgdGhpcy4kZm9udFNpemUgPSBzaXplOwogICAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUoc2l6ZSk7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuJGNsb25lU2Vzc2lvbiA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgcyA9IG5ldyBFZGl0U2Vzc2lvbihzZXNzaW9uLmdldERvY3VtZW50KCksIHNlc3Npb24uZ2V0TW9kZSgpKTsKCiAgICAgICAgdmFyIHVuZG9NYW5hZ2VyID0gc2Vzc2lvbi5nZXRVbmRvTWFuYWdlcigpOwogICAgICAgIHMuc2V0VW5kb01hbmFnZXIodW5kb01hbmFnZXIpOwogICAgICAgIHMuc2V0VGFiU2l6ZShzZXNzaW9uLmdldFRhYlNpemUoKSk7CiAgICAgICAgcy5zZXRVc2VTb2Z0VGFicyhzZXNzaW9uLmdldFVzZVNvZnRUYWJzKCkpOwogICAgICAgIHMuc2V0T3ZlcndyaXRlKHNlc3Npb24uZ2V0T3ZlcndyaXRlKCkpOwogICAgICAgIHMuc2V0QnJlYWtwb2ludHMoc2Vzc2lvbi5nZXRCcmVha3BvaW50cygpKTsKICAgICAgICBzLnNldFVzZVdyYXBNb2RlKHNlc3Npb24uZ2V0VXNlV3JhcE1vZGUoKSk7CiAgICAgICAgcy5zZXRVc2VXb3JrZXIoc2Vzc2lvbi5nZXRVc2VXb3JrZXIoKSk7CiAgICAgICAgcy5zZXRXcmFwTGltaXRSYW5nZShzZXNzaW9uLiR3cmFwTGltaXRSYW5nZS5taW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLiR3cmFwTGltaXRSYW5nZS5tYXgpOwogICAgICAgIHMuJGZvbGREYXRhID0gc2Vzc2lvbi4kY2xvbmVGb2xkRGF0YSgpOwoKICAgICAgICByZXR1cm4gczsKICAgIH07CiAgICB0aGlzLnNldFNlc3Npb24gPSBmdW5jdGlvbihzZXNzaW9uLCBpZHgpIHsKICAgICAgICB2YXIgZWRpdG9yOwogICAgICAgIGlmIChpZHggPT0gbnVsbCkgewogICAgICAgICAgICBlZGl0b3IgPSB0aGlzLiRjRWRpdG9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGVkaXRvciA9IHRoaXMuJGVkaXRvcnNbaWR4XTsKICAgICAgICB9CiAgICAgICAgdmFyIGlzVXNlZCA9IHRoaXMuJGVkaXRvcnMuc29tZShmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICAgICByZXR1cm4gZWRpdG9yLnNlc3Npb24gPT09IHNlc3Npb247CiAgICAgICAgfSk7CgogICAgICAgIGlmIChpc1VzZWQpIHsKICAgICAgICAgICAgc2Vzc2lvbiA9IHRoaXMuJGNsb25lU2Vzc2lvbihzZXNzaW9uKTsKICAgICAgICB9CiAgICAgICAgZWRpdG9yLnNldFNlc3Npb24oc2Vzc2lvbik7CiAgICAgICAgcmV0dXJuIHNlc3Npb247CiAgICB9OwogICAgdGhpcy5nZXRPcmllbnRhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLiRvcmllbnRhdGlvbjsKICAgIH07CiAgICB0aGlzLnNldE9yaWVudGF0aW9uID0gZnVuY3Rpb24ob3JpZW50YXRpb24pIHsKICAgICAgICBpZiAodGhpcy4kb3JpZW50YXRpb24gPT0gb3JpZW50YXRpb24pIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLiRvcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOwogICAgICAgIHRoaXMucmVzaXplKCk7CiAgICB9OwogICAgdGhpcy5yZXNpemUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgd2lkdGggPSB0aGlzLiRjb250YWluZXIuY2xpZW50V2lkdGg7CiAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuJGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7CiAgICAgICAgdmFyIGVkaXRvcjsKCiAgICAgICAgaWYgKHRoaXMuJG9yaWVudGF0aW9uID09IHRoaXMuQkVTSURFKSB7CiAgICAgICAgICAgIHZhciBlZGl0b3JXaWR0aCA9IHdpZHRoIC8gdGhpcy4kc3BsaXRzOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuJHNwbGl0czsgaSsrKSB7CiAgICAgICAgICAgICAgICBlZGl0b3IgPSB0aGlzLiRlZGl0b3JzW2ldOwogICAgICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGVkaXRvcldpZHRoICsgInB4IjsKICAgICAgICAgICAgICAgIGVkaXRvci5jb250YWluZXIuc3R5bGUudG9wID0gIjBweCI7CiAgICAgICAgICAgICAgICBlZGl0b3IuY29udGFpbmVyLnN0eWxlLmxlZnQgPSBpICogZWRpdG9yV2lkdGggKyAicHgiOwogICAgICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwogICAgICAgICAgICAgICAgZWRpdG9yLnJlc2l6ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIGVkaXRvckhlaWdodCA9IGhlaWdodCAvIHRoaXMuJHNwbGl0czsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLiRzcGxpdHM7IGkrKykgewogICAgICAgICAgICAgICAgZWRpdG9yID0gdGhpcy4kZWRpdG9yc1tpXTsKICAgICAgICAgICAgICAgIGVkaXRvci5jb250YWluZXIuc3R5bGUud2lkdGggPSB3aWR0aCArICJweCI7CiAgICAgICAgICAgICAgICBlZGl0b3IuY29udGFpbmVyLnN0eWxlLnRvcCA9IGkgKiBlZGl0b3JIZWlnaHQgKyAicHgiOwogICAgICAgICAgICAgICAgZWRpdG9yLmNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjBweCI7CiAgICAgICAgICAgICAgICBlZGl0b3IuY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGVkaXRvckhlaWdodCArICJweCI7CiAgICAgICAgICAgICAgICBlZGl0b3IucmVzaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChTcGxpdC5wcm90b3R5cGUpOwoKZXhwb3J0cy5TcGxpdCA9IFNwbGl0Owp9KTsKCmRlZmluZSgiYWNlL2V4dC9zcGxpdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9zcGxpdCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwptb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoIi4uL3NwbGl0Iik7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC9zcGxpdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-static_highlight.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3N0YXRpY19oaWdobGlnaHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvZWRpdF9zZXNzaW9uIiwiYWNlL2xheWVyL3RleHQiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL2xhbmciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFZGl0U2Vzc2lvbiA9IHJlcXVpcmUoIi4uL2VkaXRfc2Vzc2lvbiIpLkVkaXRTZXNzaW9uOwp2YXIgVGV4dExheWVyID0gcmVxdWlyZSgiLi4vbGF5ZXIvdGV4dCIpLlRleHQ7CnZhciBiYXNlU3R5bGVzID0gIi5hY2Vfc3RhdGljX2hpZ2hsaWdodCB7XApmb250LWZhbWlseTogJ01vbmFjbycsICdNZW5sbycsICdVYnVudHUgTW9ubycsICdDb25zb2xhcycsICdzb3VyY2UtY29kZS1wcm8nLCAnRHJvaWQgU2FucyBNb25vJywgbW9ub3NwYWNlO1wKZm9udC1zaXplOiAxMnB4O1wKd2hpdGUtc3BhY2U6IHByZS13cmFwXAp9XAouYWNlX3N0YXRpY19oaWdobGlnaHQgLmFjZV9ndXR0ZXIge1wKd2lkdGg6IDJlbTtcCnRleHQtYWxpZ246IHJpZ2h0O1wKcGFkZGluZzogMCAzcHggMCAwO1wKbWFyZ2luLXJpZ2h0OiAzcHg7XApjb250YWluOiBub25lO1wKfVwKLmFjZV9zdGF0aWNfaGlnaGxpZ2h0LmFjZV9zaG93X2d1dHRlciAuYWNlX2xpbmUge1wKcGFkZGluZy1sZWZ0OiAyLjZlbTtcCn1cCi5hY2Vfc3RhdGljX2hpZ2hsaWdodCAuYWNlX2xpbmUgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH1cCi5hY2Vfc3RhdGljX2hpZ2hsaWdodCAuYWNlX2d1dHRlci1jZWxsIHtcCi1tb3otdXNlci1zZWxlY3Q6IC1tb3otbm9uZTtcCi1raHRtbC11c2VyLXNlbGVjdDogbm9uZTtcCi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XAp1c2VyLXNlbGVjdDogbm9uZTtcCnRvcDogMDtcCmJvdHRvbTogMDtcCmxlZnQ6IDA7XApwb3NpdGlvbjogYWJzb2x1dGU7XAp9XAouYWNlX3N0YXRpY19oaWdobGlnaHQgLmFjZV9ndXR0ZXItY2VsbDpiZWZvcmUge1wKY29udGVudDogY291bnRlcihhY2VfbGluZSwgZGVjaW1hbCk7XApjb3VudGVyLWluY3JlbWVudDogYWNlX2xpbmU7XAp9XAouYWNlX3N0YXRpY19oaWdobGlnaHQge1wKY291bnRlci1yZXNldDogYWNlX2xpbmU7XAp9XAoiOwp2YXIgY29uZmlnID0gcmVxdWlyZSgiLi4vY29uZmlnIik7CnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CnZhciBlc2NhcGVIVE1MID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKS5lc2NhcGVIVE1MOwoKZnVuY3Rpb24gRWxlbWVudCh0eXBlKSB7CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5zdHlsZSA9IHt9OwogICAgdGhpcy50ZXh0Q29udGVudCA9ICIiOwp9CkVsZW1lbnQucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7Cn07CkVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24oY2hpbGQpIHsKICAgIHRoaXMudGV4dENvbnRlbnQgKz0gY2hpbGQudG9TdHJpbmcoKTsKfTsKRWxlbWVudC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsKICAgIHZhciBzdHJpbmdCdWlsZGVyID0gW107CiAgICBpZiAodGhpcy50eXBlICE9ICJmcmFnbWVudCIpIHsKICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goIjwiLCB0aGlzLnR5cGUpOwogICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkKICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5wdXNoKCIgY2xhc3M9JyIsIHRoaXMuY2xhc3NOYW1lLCAiJyIpOwogICAgICAgIHZhciBzdHlsZVN0ciA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN0eWxlKSB7CiAgICAgICAgICAgIHN0eWxlU3RyLnB1c2goa2V5LCAiOiIsIHRoaXMuc3R5bGVba2V5XSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdHlsZVN0ci5sZW5ndGgpCiAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCgiIHN0eWxlPSciLCBzdHlsZVN0ci5qb2luKCIiKSwgIiciKTsKICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goIj4iKTsKICAgIH0KCiAgICBpZiAodGhpcy50ZXh0Q29udGVudCkgewogICAgICAgIHN0cmluZ0J1aWxkZXIucHVzaCh0aGlzLnRleHRDb250ZW50KTsKICAgIH0KCiAgICBpZiAodGhpcy50eXBlICE9ICJmcmFnbWVudCIpIHsKICAgICAgICBzdHJpbmdCdWlsZGVyLnB1c2goIjwvIiwgdGhpcy50eXBlLCAiPiIpOwogICAgfQogICAgCiAgICByZXR1cm4gc3RyaW5nQnVpbGRlci5qb2luKCIiKTsKfTsKCgp2YXIgc2ltcGxlRG9tID0gewogICAgY3JlYXRlVGV4dE5vZGU6IGZ1bmN0aW9uKHRleHRDb250ZW50LCBlbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIGVzY2FwZUhUTUwodGV4dENvbnRlbnQpOwogICAgfSwKICAgIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnQodHlwZSk7CiAgICB9LAogICAgY3JlYXRlRnJhZ21lbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBuZXcgRWxlbWVudCgiZnJhZ21lbnQiKTsKICAgIH0KfTsKCnZhciBTaW1wbGVUZXh0TGF5ZXIgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuY29uZmlnID0ge307CiAgICB0aGlzLmRvbSA9IHNpbXBsZURvbTsKfTsKU2ltcGxlVGV4dExheWVyLnByb3RvdHlwZSA9IFRleHRMYXllci5wcm90b3R5cGU7Cgp2YXIgaGlnaGxpZ2h0ID0gZnVuY3Rpb24oZWwsIG9wdHMsIGNhbGxiYWNrKSB7CiAgICB2YXIgbSA9IGVsLmNsYXNzTmFtZS5tYXRjaCgvbGFuZy0oXHcrKS8pOwogICAgdmFyIG1vZGUgPSBvcHRzLm1vZGUgfHwgbSAmJiAoImFjZS9tb2RlLyIgKyBtWzFdKTsKICAgIGlmICghbW9kZSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB2YXIgdGhlbWUgPSBvcHRzLnRoZW1lIHx8ICJhY2UvdGhlbWUvdGV4dG1hdGUiOwogICAgCiAgICB2YXIgZGF0YSA9ICIiOwogICAgdmFyIG5vZGVzID0gW107CgogICAgaWYgKGVsLmZpcnN0RWxlbWVudENoaWxkKSB7CiAgICAgICAgdmFyIHRleHRMZW4gPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgY2ggPSBlbC5jaGlsZE5vZGVzW2ldOwogICAgICAgICAgICBpZiAoY2gubm9kZVR5cGUgPT0gMykgewogICAgICAgICAgICAgICAgdGV4dExlbiArPSBjaC5kYXRhLmxlbmd0aDsKICAgICAgICAgICAgICAgIGRhdGEgKz0gY2guZGF0YTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGVzLnB1c2godGV4dExlbiwgY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBkYXRhID0gZWwudGV4dENvbnRlbnQ7CiAgICAgICAgaWYgKG9wdHMudHJpbSkKICAgICAgICAgICAgZGF0YSA9IGRhdGEudHJpbSgpOwogICAgfQogICAgCiAgICBoaWdobGlnaHQucmVuZGVyKGRhdGEsIG1vZGUsIHRoZW1lLCBvcHRzLmZpcnN0TGluZU51bWJlciwgIW9wdHMuc2hvd0d1dHRlciwgZnVuY3Rpb24gKGhpZ2hsaWdodGVkKSB7CiAgICAgICAgZG9tLmltcG9ydENzc1N0cmluZyhoaWdobGlnaHRlZC5jc3MsICJhY2VfaGlnaGxpZ2h0Iik7CiAgICAgICAgZWwuaW5uZXJIVE1MID0gaGlnaGxpZ2h0ZWQuaHRtbDsKICAgICAgICB2YXIgY29udGFpbmVyID0gZWwuZmlyc3RDaGlsZC5maXJzdENoaWxkOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgdmFyIHBvcyA9IGhpZ2hsaWdodGVkLnNlc3Npb24uZG9jLmluZGV4VG9Qb3NpdGlvbihub2Rlc1tpXSk7CiAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaSArIDFdOwogICAgICAgICAgICB2YXIgbGluZUVsID0gY29udGFpbmVyLmNoaWxkcmVuW3Bvcy5yb3ddOwogICAgICAgICAgICBsaW5lRWwgJiYgbGluZUVsLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgIH0KICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpOwogICAgfSk7Cn07CmhpZ2hsaWdodC5yZW5kZXIgPSBmdW5jdGlvbihpbnB1dCwgbW9kZSwgdGhlbWUsIGxpbmVTdGFydCwgZGlzYWJsZUd1dHRlciwgY2FsbGJhY2spIHsKICAgIHZhciB3YWl0aW5nID0gMTsKICAgIHZhciBtb2RlQ2FjaGUgPSBFZGl0U2Vzc2lvbi5wcm90b3R5cGUuJG1vZGVzOwogICAgaWYgKHR5cGVvZiB0aGVtZSA9PSAic3RyaW5nIikgewogICAgICAgIHdhaXRpbmcrKzsKICAgICAgICBjb25maWcubG9hZE1vZHVsZShbJ3RoZW1lJywgdGhlbWVdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgIHRoZW1lID0gbTsKICAgICAgICAgICAgLS13YWl0aW5nIHx8IGRvbmUoKTsKICAgICAgICB9KTsKICAgIH0KICAgIHZhciBtb2RlT3B0aW9uczsKICAgIGlmIChtb2RlICYmIHR5cGVvZiBtb2RlID09PSAib2JqZWN0IiAmJiAhbW9kZS5nZXRUb2tlbml6ZXIpIHsKICAgICAgICBtb2RlT3B0aW9ucyA9IG1vZGU7CiAgICAgICAgbW9kZSA9IG1vZGVPcHRpb25zLnBhdGg7CiAgICB9CiAgICBpZiAodHlwZW9mIG1vZGUgPT0gInN0cmluZyIpIHsKICAgICAgICB3YWl0aW5nKys7CiAgICAgICAgY29uZmlnLmxvYWRNb2R1bGUoWydtb2RlJywgbW9kZV0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgaWYgKCFtb2RlQ2FjaGVbbW9kZV0gfHwgbW9kZU9wdGlvbnMpCiAgICAgICAgICAgICAgICBtb2RlQ2FjaGVbbW9kZV0gPSBuZXcgbS5Nb2RlKG1vZGVPcHRpb25zKTsKICAgICAgICAgICAgbW9kZSA9IG1vZGVDYWNoZVttb2RlXTsKICAgICAgICAgICAgLS13YWl0aW5nIHx8IGRvbmUoKTsKICAgICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGRvbmUoKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGhpZ2hsaWdodC5yZW5kZXJTeW5jKGlucHV0LCBtb2RlLCB0aGVtZSwgbGluZVN0YXJ0LCBkaXNhYmxlR3V0dGVyKTsKICAgICAgICByZXR1cm4gY2FsbGJhY2sgPyBjYWxsYmFjayhyZXN1bHQpIDogcmVzdWx0OwogICAgfQogICAgcmV0dXJuIC0td2FpdGluZyB8fCBkb25lKCk7Cn07CmhpZ2hsaWdodC5yZW5kZXJTeW5jID0gZnVuY3Rpb24oaW5wdXQsIG1vZGUsIHRoZW1lLCBsaW5lU3RhcnQsIGRpc2FibGVHdXR0ZXIpIHsKICAgIGxpbmVTdGFydCA9IHBhcnNlSW50KGxpbmVTdGFydCB8fCAxLCAxMCk7CgogICAgdmFyIHNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb24oIiIpOwogICAgc2Vzc2lvbi5zZXRVc2VXb3JrZXIoZmFsc2UpOwogICAgc2Vzc2lvbi5zZXRNb2RlKG1vZGUpOwoKICAgIHZhciB0ZXh0TGF5ZXIgPSBuZXcgU2ltcGxlVGV4dExheWVyKCk7CiAgICB0ZXh0TGF5ZXIuc2V0U2Vzc2lvbihzZXNzaW9uKTsKICAgIE9iamVjdC5rZXlzKHRleHRMYXllci4kdGFiU3RyaW5ncykuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0TGF5ZXIuJHRhYlN0cmluZ3Nba10gPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgdmFyIGVsID0gc2ltcGxlRG9tLmNyZWF0ZUZyYWdtZW50KCk7CiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gdGV4dExheWVyLiR0YWJTdHJpbmdzW2tdOwogICAgICAgICAgICB0ZXh0TGF5ZXIuJHRhYlN0cmluZ3Nba10gPSBlbDsKICAgICAgICB9CiAgICB9KTsKCiAgICBzZXNzaW9uLnNldFZhbHVlKGlucHV0KTsKICAgIHZhciBsZW5ndGggPSAgc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgIAogICAgdmFyIG91dGVyRWwgPSBzaW1wbGVEb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBvdXRlckVsLmNsYXNzTmFtZSA9IHRoZW1lLmNzc0NsYXNzOwogICAgCiAgICB2YXIgaW5uZXJFbCA9IHNpbXBsZURvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGlubmVyRWwuY2xhc3NOYW1lID0gImFjZV9zdGF0aWNfaGlnaGxpZ2h0IiArIChkaXNhYmxlR3V0dGVyID8gIiIgOiAiIGFjZV9zaG93X2d1dHRlciIpOwogICAgaW5uZXJFbC5zdHlsZVsiY291bnRlci1yZXNldCJdID0gImFjZV9saW5lICIgKyAobGluZVN0YXJ0IC0gMSk7CgogICAgZm9yICh2YXIgaXggPSAwOyBpeCA8IGxlbmd0aDsgaXgrKykgewogICAgICAgIHZhciBsaW5lRWwgPSBzaW1wbGVEb20uY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgbGluZUVsLmNsYXNzTmFtZSA9ICJhY2VfbGluZSI7CiAgICAgICAgCiAgICAgICAgaWYgKCFkaXNhYmxlR3V0dGVyKSB7CiAgICAgICAgICAgIHZhciBndXR0ZXJFbCA9IHNpbXBsZURvbS5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgICAgIGd1dHRlckVsLmNsYXNzTmFtZSA9ImFjZV9ndXR0ZXIgYWNlX2d1dHRlci1jZWxsIjsKICAgICAgICAgICAgZ3V0dGVyRWwudGV4dENvbnRlbnQgPSAiIjsKICAgICAgICAgICAgbGluZUVsLmFwcGVuZENoaWxkKGd1dHRlckVsKTsKICAgICAgICB9CiAgICAgICAgdGV4dExheWVyLiRyZW5kZXJMaW5lKGxpbmVFbCwgaXgsIGZhbHNlKTsKICAgICAgICBsaW5lRWwudGV4dENvbnRlbnQgKz0gIlxuIjsKICAgICAgICBpbm5lckVsLmFwcGVuZENoaWxkKGxpbmVFbCk7CiAgICB9CiAgICBvdXRlckVsLmFwcGVuZENoaWxkKGlubmVyRWwpOwoKICAgIHJldHVybiB7CiAgICAgICAgY3NzOiBiYXNlU3R5bGVzICsgdGhlbWUuY3NzVGV4dCwKICAgICAgICBodG1sOiBvdXRlckVsLnRvU3RyaW5nKCksCiAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbgogICAgfTsKfTsKCm1vZHVsZS5leHBvcnRzID0gaGlnaGxpZ2h0Owptb2R1bGUuZXhwb3J0cy5oaWdobGlnaHQgPSBoaWdobGlnaHQ7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvZXh0L3N0YXRpY19oaWdobGlnaHQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-statusbar.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3N0YXR1c2JhciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKCnZhciBTdGF0dXNCYXIgPSBmdW5jdGlvbihlZGl0b3IsIHBhcmVudE5vZGUpIHsKICAgIHRoaXMuZWxlbWVudCA9IGRvbS5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAiYWNlX3N0YXR1cy1pbmRpY2F0b3IiOwogICAgdGhpcy5lbGVtZW50LnN0eWxlLmNzc1RleHQgPSAiZGlzcGxheTogaW5saW5lLWJsb2NrOyI7CiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7CgogICAgdmFyIHN0YXR1c1VwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwoZnVuY3Rpb24oKXsKICAgICAgICB0aGlzLnVwZGF0ZVN0YXR1cyhlZGl0b3IpOwogICAgfS5iaW5kKHRoaXMpKS5zY2hlZHVsZS5iaW5kKG51bGwsIDEwMCk7CiAgICAKICAgIGVkaXRvci5vbigiY2hhbmdlU3RhdHVzIiwgc3RhdHVzVXBkYXRlKTsKICAgIGVkaXRvci5vbigiY2hhbmdlU2VsZWN0aW9uIiwgc3RhdHVzVXBkYXRlKTsKICAgIGVkaXRvci5vbigia2V5Ym9hcmRBY3Rpdml0eSIsIHN0YXR1c1VwZGF0ZSk7Cn07CgooZnVuY3Rpb24oKXsKICAgIHRoaXMudXBkYXRlU3RhdHVzID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIHN0YXR1cyA9IFtdOwogICAgICAgIGZ1bmN0aW9uIGFkZChzdHIsIHNlcGFyYXRvcikgewogICAgICAgICAgICBzdHIgJiYgc3RhdHVzLnB1c2goc3RyLCBzZXBhcmF0b3IgfHwgInwiKTsKICAgICAgICB9CgogICAgICAgIGFkZChlZGl0b3Iua2V5QmluZGluZy5nZXRTdGF0dXNUZXh0KGVkaXRvcikpOwogICAgICAgIGlmIChlZGl0b3IuY29tbWFuZHMucmVjb3JkaW5nKQogICAgICAgICAgICBhZGQoIlJFQyIpOwogICAgICAgIAogICAgICAgIHZhciBzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uOwogICAgICAgIHZhciBjID0gc2VsLmxlYWQ7CiAgICAgICAgCiAgICAgICAgaWYgKCFzZWwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciByID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCk7CiAgICAgICAgICAgIGFkZCgiKCIgKyAoci5lbmQucm93IC0gci5zdGFydC5yb3cpICsgIjoiICArKHIuZW5kLmNvbHVtbiAtIHIuc3RhcnQuY29sdW1uKSArICIpIiwgIiAiKTsKICAgICAgICB9CiAgICAgICAgYWRkKGMucm93ICsgIjoiICsgYy5jb2x1bW4sICIgIik7ICAgICAgICAKICAgICAgICBpZiAoc2VsLnJhbmdlQ291bnQpCiAgICAgICAgICAgIGFkZCgiWyIgKyBzZWwucmFuZ2VDb3VudCArICJdIiwgIiAiKTsKICAgICAgICBzdGF0dXMucG9wKCk7CiAgICAgICAgdGhpcy5lbGVtZW50LnRleHRDb250ZW50ID0gc3RhdHVzLmpvaW4oIiIpOwogICAgfTsKfSkuY2FsbChTdGF0dXNCYXIucHJvdG90eXBlKTsKCmV4cG9ydHMuU3RhdHVzQmFyID0gU3RhdHVzQmFyOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvc3RhdHVzYmFyIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-textarea.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdGV4dG1hdGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pc0RhcmsgPSBmYWxzZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdG0iOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS10bSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjZjBmMGYwO1wKY29sb3I6ICMzMzM7XAp9XAouYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKfVwKLmFjZS10bSAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzZCNzJFNjtcCn1cCi5hY2UtdG0ge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCmNvbG9yOiBibGFjaztcCn1cCi5hY2UtdG0gLmFjZV9jdXJzb3Ige1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS10bSAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKfVwKLmFjZS10bSAuYWNlX3N0b3JhZ2UsXAouYWNlLXRtIC5hY2Vfa2V5d29yZCB7XApjb2xvcjogYmx1ZTtcCn1cCi5hY2UtdG0gLmFjZV9jb25zdGFudCB7XApjb2xvcjogcmdiKDE5NywgNiwgMTEpO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHtcCmNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogcmdiKDg4LCA5MiwgMjQ2KTtcCn1cCi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XApjb2xvcjogcmdiKDYsIDE1MCwgMTQpO1wKfVwKLmFjZS10bSAuYWNlX2ludmFsaWQge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDAsIDAsIDAuMSk7XApjb2xvcjogcmVkO1wKfVwKLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO1wKfVwKLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSxcCi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7XApjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1wKfVwKLmFjZS10bSAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCmNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XAp9XAouYWNlLXRtIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiByZ2IoMywgMTA2LCA3KTtcCn1cCi5hY2UtdG0gLmFjZV9jb21tZW50IHtcCmNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtcCn1cCi5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2Mge1wKY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7XAp9XAouYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcge1wKY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcCn1cCi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAp9XAouYWNlLXRtIC5hY2VfdmFyaWFibGUge1wKY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKfVwKLmFjZS10bSAuYWNlX3htbC1wZSB7XApjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAp9XAouYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzAwMDBBMjtcCn1cCi5hY2UtdG0gLmFjZV9oZWFkaW5nIHtcCmNvbG9yOiByZ2IoMTIsIDcsIDI1NSk7XAp9XAouYWNlLXRtIC5hY2VfbGlzdCB7XApjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO1wKfVwKLmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7XApjb2xvcjpyZ2IoMCwgMjIsIDE0Mik7XAp9XAouYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XApjb2xvcjogcmdiKDI1NSwgMCwgMClcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1wKfVwKLmFjZS10bS5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4IHdoaXRlO1wKfVwKLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTtcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7XApiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCn1cCi5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvciA6ICNkY2RjZGM7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMjAwLCAyMDAsIDI1MCk7XAp9XAouYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVwiKSByaWdodCByZXBlYXQteTtcCn1cCiI7CmV4cG9ydHMuJGlkID0gImFjZS90aGVtZS90ZXh0bWF0ZSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOwoKZGVmaW5lKCJhY2UvZXh0L3RleHRhcmVhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9ldmVudCIsImFjZS9saWIvdXNlcmFnZW50IiwiYWNlL2xpYi9uZXQiLCJhY2UvYWNlIiwiYWNlL3RoZW1lL3RleHRtYXRlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgZXZlbnQgPSByZXF1aXJlKCIuLi9saWIvZXZlbnQiKTsKdmFyIFVBID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwp2YXIgbmV0ID0gcmVxdWlyZSgiLi4vbGliL25ldCIpOwp2YXIgYWNlID0gcmVxdWlyZSgiLi4vYWNlIik7CgpyZXF1aXJlKCIuLi90aGVtZS90ZXh0bWF0ZSIpOwoKbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gYWNlOwp2YXIgZ2V0Q1NTUHJvcGVydHkgPSBmdW5jdGlvbihlbGVtZW50LCBjb250YWluZXIsIHByb3BlcnR5KSB7CiAgICB2YXIgcmV0ID0gZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV07CgogICAgaWYgKCFyZXQpIHsKICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHsKICAgICAgICAgICAgcmV0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgJycpLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldCA9IGVsZW1lbnQuY3VycmVudFN0eWxlW3Byb3BlcnR5XTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCFyZXQgfHwgcmV0ID09ICdhdXRvJyB8fCByZXQgPT0gJ2ludHJpbnNpYycpIHsKICAgICAgICByZXQgPSBjb250YWluZXIuc3R5bGVbcHJvcGVydHldOwogICAgfQogICAgcmV0dXJuIHJldDsKfTsKCmZ1bmN0aW9uIGFwcGx5U3R5bGVzKGVsbSwgc3R5bGVzKSB7CiAgICBmb3IgKHZhciBzdHlsZSBpbiBzdHlsZXMpIHsKICAgICAgICBlbG0uc3R5bGVbc3R5bGVdID0gc3R5bGVzW3N0eWxlXTsKICAgIH0KfQoKZnVuY3Rpb24gc2V0dXBDb250YWluZXIoZWxlbWVudCwgZ2V0VmFsdWUpIHsKICAgIGlmIChlbGVtZW50LnR5cGUgIT0gJ3RleHRhcmVhJykgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiVGV4dGFyZWEgcmVxdWlyZWQhIik7CiAgICB9CgogICAgdmFyIHBhcmVudE5vZGUgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICB2YXIgcmVzaXplRXZlbnQgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc3R5bGUgPSAncG9zaXRpb246cmVsYXRpdmU7JzsKICAgICAgICBbCiAgICAgICAgICAgICdtYXJnaW4tdG9wJywgJ21hcmdpbi1sZWZ0JywgJ21hcmdpbi1yaWdodCcsICdtYXJnaW4tYm90dG9tJwogICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgICAgIHN0eWxlICs9IGl0ZW0gKyAnOicgKwogICAgICAgICAgICAgICAgICAgICAgICBnZXRDU1NQcm9wZXJ0eShlbGVtZW50LCBjb250YWluZXIsIGl0ZW0pICsgJzsnOwogICAgICAgIH0pOwogICAgICAgIHZhciB3aWR0aCA9IGdldENTU1Byb3BlcnR5KGVsZW1lbnQsIGNvbnRhaW5lciwgJ3dpZHRoJykgfHwgKGVsZW1lbnQuY2xpZW50V2lkdGggKyAicHgiKTsKICAgICAgICB2YXIgaGVpZ2h0ID0gZ2V0Q1NTUHJvcGVydHkoZWxlbWVudCwgY29udGFpbmVyLCAnaGVpZ2h0JykgIHx8IChlbGVtZW50LmNsaWVudEhlaWdodCArICJweCIpOwogICAgICAgIHN0eWxlICs9ICdoZWlnaHQ6JyArIGhlaWdodCArICc7d2lkdGg6JyArIHdpZHRoICsgJzsnOwogICAgICAgIHN0eWxlICs9ICdkaXNwbGF5OmlubGluZS1ibG9jazsnOwogICAgICAgIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGUpOwogICAgfTsKICAgIGV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywgJ3Jlc2l6ZScsIHJlc2l6ZUV2ZW50KTsKICAgIHJlc2l6ZUV2ZW50KCk7CiAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjb250YWluZXIsIGVsZW1lbnQubmV4dFNpYmxpbmcpOwogICAgd2hpbGUgKHBhcmVudE5vZGUgIT09IGRvY3VtZW50KSB7CiAgICAgICAgaWYgKHBhcmVudE5vZGUudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnRk9STScpIHsKICAgICAgICAgICAgdmFyIG9sZFN1bWl0ID0gcGFyZW50Tm9kZS5vbnN1Ym1pdDsKICAgICAgICAgICAgcGFyZW50Tm9kZS5vbnN1Ym1pdCA9IGZ1bmN0aW9uKGV2dCkgewogICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZSA9IGdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICBpZiAob2xkU3VtaXQpIHsKICAgICAgICAgICAgICAgICAgICBvbGRTdW1pdC5jYWxsKHRoaXMsIGV2dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlOwogICAgfQogICAgcmV0dXJuIGNvbnRhaW5lcjsKfQoKZXhwb3J0cy50cmFuc2Zvcm1UZXh0YXJlYSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgIHZhciBpc0ZvY3VzZWQgPSBlbGVtZW50LmF1dG9mb2N1cyB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGVsZW1lbnQ7CiAgICB2YXIgc2Vzc2lvbjsKICAgIHZhciBjb250YWluZXIgPSBzZXR1cENvbnRhaW5lcihlbGVtZW50LCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRWYWx1ZSgpOwogICAgfSk7CiAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBjb250YWluZXIuc3R5bGUuYmFja2dyb3VuZCA9ICd3aGl0ZSc7CiAgICB2YXIgZWRpdG9yRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBhcHBseVN0eWxlcyhlZGl0b3JEaXYsIHsKICAgICAgICB0b3A6ICIwcHgiLAogICAgICAgIGxlZnQ6ICIwcHgiLAogICAgICAgIHJpZ2h0OiAiMHB4IiwKICAgICAgICBib3R0b206ICIwcHgiLAogICAgICAgIGJvcmRlcjogIjFweCBzb2xpZCBncmF5IiwKICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIgogICAgfSk7CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWRpdG9yRGl2KTsKCiAgICB2YXIgc2V0dGluZ09wZW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgYXBwbHlTdHlsZXMoc2V0dGluZ09wZW5lciwgewogICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAgIHJpZ2h0OiAiMHB4IiwKICAgICAgICBib3R0b206ICIwcHgiLAogICAgICAgIGN1cnNvcjogIm53LXJlc2l6ZSIsCiAgICAgICAgYm9yZGVyOiAic29saWQgOXB4IiwKICAgICAgICBib3JkZXJDb2xvcjogImxpZ2h0Ymx1ZSBncmF5IGdyYXkgI2NlYWRlNiIsCiAgICAgICAgekluZGV4OiAxMDEKICAgIH0pOwoKICAgIHZhciBzZXR0aW5nRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICB2YXIgc2V0dGluZ0RpdlN0eWxlcyA9IHsKICAgICAgICB0b3A6ICIwcHgiLAogICAgICAgIGxlZnQ6ICIyMCUiLAogICAgICAgIHJpZ2h0OiAiMHB4IiwKICAgICAgICBib3R0b206ICIwcHgiLAogICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAgIHBhZGRpbmc6ICI1cHgiLAogICAgICAgIHpJbmRleDogMTAwLAogICAgICAgIGNvbG9yOiAid2hpdGUiLAogICAgICAgIGRpc3BsYXk6ICJub25lIiwKICAgICAgICBvdmVyZmxvdzogImF1dG8iLAogICAgICAgIGZvbnRTaXplOiAiMTRweCIsCiAgICAgICAgYm94U2hhZG93OiAiLTVweCAycHggM3B4IGdyYXkiCiAgICB9OwogICAgaWYgKCFVQS5pc09sZElFKSB7CiAgICAgICAgc2V0dGluZ0RpdlN0eWxlcy5iYWNrZ3JvdW5kQ29sb3IgPSAicmdiYSgwLCAwLCAwLCAwLjYpIjsKICAgIH0gZWxzZSB7CiAgICAgICAgc2V0dGluZ0RpdlN0eWxlcy5iYWNrZ3JvdW5kQ29sb3IgPSAiIzMzMyI7CiAgICB9CgogICAgYXBwbHlTdHlsZXMoc2V0dGluZ0Rpdiwgc2V0dGluZ0RpdlN0eWxlcyk7CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2V0dGluZ0Rpdik7CgogICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgZXhwb3J0cy5kZWZhdWx0T3B0aW9uczsKICAgIHZhciBlZGl0b3IgPSBhY2UuZWRpdChlZGl0b3JEaXYpOwogICAgc2Vzc2lvbiA9IGVkaXRvci5nZXRTZXNzaW9uKCk7CgogICAgc2Vzc2lvbi5zZXRWYWx1ZShlbGVtZW50LnZhbHVlIHx8IGVsZW1lbnQuaW5uZXJIVE1MKTsKICAgIGlmIChpc0ZvY3VzZWQpCiAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2V0dGluZ09wZW5lcik7CiAgICBzZXR1cEFwaShlZGl0b3IsIGVkaXRvckRpdiwgc2V0dGluZ0RpdiwgYWNlLCBvcHRpb25zKTsKICAgIHNldHVwU2V0dGluZ1BhbmVsKHNldHRpbmdEaXYsIHNldHRpbmdPcGVuZXIsIGVkaXRvcik7CgogICAgdmFyIHN0YXRlID0gIiI7CiAgICBldmVudC5hZGRMaXN0ZW5lcihzZXR0aW5nT3BlbmVyLCAibW91c2Vtb3ZlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICB2YXIgeCA9IGUuY2xpZW50WCAtIHJlY3QubGVmdCwgeSA9IGUuY2xpZW50WSAtIHJlY3QudG9wOwogICAgICAgIGlmICh4ICsgeSA8IChyZWN0LndpZHRoICsgcmVjdC5oZWlnaHQpLzIpIHsKICAgICAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAicG9pbnRlciI7CiAgICAgICAgICAgIHN0YXRlID0gInRvZ2dsZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUgPSAicmVzaXplIjsKICAgICAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAibnctcmVzaXplIjsKICAgICAgICB9CiAgICB9KTsKCiAgICBldmVudC5hZGRMaXN0ZW5lcihzZXR0aW5nT3BlbmVyLCAibW91c2Vkb3duIiwgZnVuY3Rpb24oZSkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAoc3RhdGUgPT0gInRvZ2dsZSIpIHsKICAgICAgICAgICAgZWRpdG9yLnNldERpc3BsYXlTZXR0aW5ncygpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lci5zdHlsZS56SW5kZXggPSAxMDAwMDA7CiAgICAgICAgdmFyIHJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgdmFyIHN0YXJ0WCA9IHJlY3Qud2lkdGggICsgcmVjdC5sZWZ0IC0gZS5jbGllbnRYOwogICAgICAgIHZhciBzdGFydFkgPSByZWN0LmhlaWdodCAgKyByZWN0LnRvcCAtIGUuY2xpZW50WTsKICAgICAgICBldmVudC5jYXB0dXJlKHNldHRpbmdPcGVuZXIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gZS5jbGllbnRYIC0gcmVjdC5sZWZ0ICsgc3RhcnRYICsgInB4IjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGUuY2xpZW50WSAtIHJlY3QudG9wICsgc3RhcnRZICsgInB4IjsKICAgICAgICAgICAgZWRpdG9yLnJlc2l6ZSgpOwogICAgICAgIH0sIGZ1bmN0aW9uKCkge30pOwogICAgfSk7CgogICAgcmV0dXJuIGVkaXRvcjsKfTsKCmZ1bmN0aW9uIGxvYWQodXJsLCBtb2R1bGUsIGNhbGxiYWNrKSB7CiAgICBuZXQubG9hZFNjcmlwdCh1cmwsIGZ1bmN0aW9uKCkgewogICAgICAgIHJlcXVpcmUoW21vZHVsZV0sIGNhbGxiYWNrKTsKICAgIH0pOwp9CgpmdW5jdGlvbiBzZXR1cEFwaShlZGl0b3IsIGVkaXRvckRpdiwgc2V0dGluZ0RpdiwgYWNlLCBvcHRpb25zKSB7CiAgICB2YXIgc2Vzc2lvbiA9IGVkaXRvci5nZXRTZXNzaW9uKCk7CiAgICB2YXIgcmVuZGVyZXIgPSBlZGl0b3IucmVuZGVyZXI7CgogICAgZnVuY3Rpb24gdG9Cb29sKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAidHJ1ZSIgfHwgdmFsdWUgPT0gdHJ1ZTsKICAgIH0KCiAgICBlZGl0b3Iuc2V0RGlzcGxheVNldHRpbmdzID0gZnVuY3Rpb24oZGlzcGxheSkgewogICAgICAgIGlmIChkaXNwbGF5ID09IG51bGwpCiAgICAgICAgICAgIGRpc3BsYXkgPSBzZXR0aW5nRGl2LnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiOwogICAgICAgIGlmIChkaXNwbGF5KSB7CiAgICAgICAgICAgIHNldHRpbmdEaXYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgICAgIHNldHRpbmdEaXYuaGlkZUJ1dHRvbi5mb2N1cygpOwogICAgICAgICAgICBlZGl0b3Iub24oImZvY3VzIiwgZnVuY3Rpb24gb25Gb2N1cygpIHsKICAgICAgICAgICAgICAgIGVkaXRvci5yZW1vdmVMaXN0ZW5lcigiZm9jdXMiLCBvbkZvY3VzKTsKICAgICAgICAgICAgICAgIHNldHRpbmdEaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgfQogICAgfTsKCiAgICBlZGl0b3IuJHNldE9wdGlvbiA9IGVkaXRvci5zZXRPcHRpb247CiAgICBlZGl0b3IuJGdldE9wdGlvbiA9IGVkaXRvci5nZXRPcHRpb247CiAgICBlZGl0b3Iuc2V0T3B0aW9uID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkgewogICAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1vZGUiOgogICAgICAgICAgICAgICAgZWRpdG9yLiRzZXRPcHRpb24oIm1vZGUiLCAiYWNlL21vZGUvIiArIHZhbHVlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRoZW1lIjoKICAgICAgICAgICAgICAgIGVkaXRvci4kc2V0T3B0aW9uKCJ0aGVtZSIsICJhY2UvdGhlbWUvIiArIHZhbHVlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImtleWJpbmRpbmdzIjoKICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICJ2aW0iOgogICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0S2V5Ym9hcmRIYW5kbGVyKCJhY2Uva2V5Ym9hcmQvdmltIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgImVtYWNzIjoKICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnNldEtleWJvYXJkSGFuZGxlcigiYWNlL2tleWJvYXJkL2VtYWNzIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5zZXRLZXlib2FyZEhhbmRsZXIobnVsbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAid3JhcCI6CiAgICAgICAgICAgIGNhc2UgImZvbnRTaXplIjoKICAgICAgICAgICAgICAgIGVkaXRvci4kc2V0T3B0aW9uKGtleSwgdmFsdWUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBlZGl0b3IuJHNldE9wdGlvbihrZXksIHRvQm9vbCh2YWx1ZSkpOwogICAgICAgIH0KICAgIH07CgogICAgZWRpdG9yLmdldE9wdGlvbiA9IGZ1bmN0aW9uKGtleSkgewogICAgICAgIHN3aXRjaCAoa2V5KSB7CiAgICAgICAgICAgIGNhc2UgIm1vZGUiOgogICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvci4kZ2V0T3B0aW9uKCJtb2RlIikuc3Vic3RyKCJhY2UvbW9kZS8iLmxlbmd0aCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAidGhlbWUiOgogICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvci4kZ2V0T3B0aW9uKCJ0aGVtZSIpLnN1YnN0cigiYWNlL3RoZW1lLyIubGVuZ3RoKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICJrZXliaW5kaW5ncyI6CiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBlZGl0b3IuZ2V0S2V5Ym9hcmRIYW5kbGVyKCk7CiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlICYmIHZhbHVlLiRpZCkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgImFjZS9rZXlib2FyZC92aW0iOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZpbSI7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiYWNlL2tleWJvYXJkL2VtYWNzIjoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJlbWFjcyI7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJhY2UiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm4gZWRpdG9yLiRnZXRPcHRpb24oa2V5KTsKICAgICAgICB9CiAgICB9OwoKICAgIGVkaXRvci5zZXRPcHRpb25zKG9wdGlvbnMpOwogICAgcmV0dXJuIGVkaXRvcjsKfQoKZnVuY3Rpb24gc2V0dXBTZXR0aW5nUGFuZWwoc2V0dGluZ0Rpdiwgc2V0dGluZ09wZW5lciwgZWRpdG9yKSB7CiAgICB2YXIgQk9PTCA9IG51bGw7CgogICAgdmFyIGRlc2MgPSB7CiAgICAgICAgbW9kZTogICAgICAgICAgICAiTW9kZToiLAogICAgICAgIHdyYXA6ICAgICAgICAgICAgIlNvZnQgV3JhcDoiLAogICAgICAgIHRoZW1lOiAgICAgICAgICAgIlRoZW1lOiIsCiAgICAgICAgZm9udFNpemU6ICAgICAgICAiRm9udCBTaXplOiIsCiAgICAgICAgc2hvd0d1dHRlcjogICAgICAiRGlzcGxheSBHdXR0ZXI6IiwKICAgICAgICBrZXliaW5kaW5nczogICAgICJLZXlib2FyZCIsCiAgICAgICAgc2hvd1ByaW50TWFyZ2luOiAiU2hvdyBQcmludCBNYXJnaW46IiwKICAgICAgICB1c2VTb2Z0VGFiczogICAgICJVc2UgU29mdCBUYWJzOiIsCiAgICAgICAgc2hvd0ludmlzaWJsZXM6ICAiU2hvdyBJbnZpc2libGVzIgogICAgfTsKCiAgICB2YXIgb3B0aW9uVmFsdWVzID0gewogICAgICAgIG1vZGU6IHsKICAgICAgICAgICAgdGV4dDogICAgICAgIlBsYWluIiwKICAgICAgICAgICAgamF2YXNjcmlwdDogIkphdmFTY3JpcHQiLAogICAgICAgICAgICB4bWw6ICAgICAgICAiWE1MIiwKICAgICAgICAgICAgaHRtbDogICAgICAgIkhUTUwiLAogICAgICAgICAgICBjc3M6ICAgICAgICAiQ1NTIiwKICAgICAgICAgICAgc2NzczogICAgICAgIlNDU1MiLAogICAgICAgICAgICBweXRob246ICAgICAiUHl0aG9uIiwKICAgICAgICAgICAgcGhwOiAgICAgICAgIlBIUCIsCiAgICAgICAgICAgIGphdmE6ICAgICAgICJKYXZhIiwKICAgICAgICAgICAgcnVieTogICAgICAgIlJ1YnkiLAogICAgICAgICAgICBjX2NwcDogICAgICAiQy9DKysiLAogICAgICAgICAgICBjb2ZmZWU6ICAgICAiQ29mZmVlU2NyaXB0IiwKICAgICAgICAgICAganNvbjogICAgICAgImpzb24iLAogICAgICAgICAgICBwZXJsOiAgICAgICAiUGVybCIsCiAgICAgICAgICAgIGNsb2p1cmU6ICAgICJDbG9qdXJlIiwKICAgICAgICAgICAgb2NhbWw6ICAgICAgIk9DYW1sIiwKICAgICAgICAgICAgY3NoYXJwOiAgICAgIkMjIiwKICAgICAgICAgICAgaGF4ZTogICAgICAgImhhWGUiLAogICAgICAgICAgICBzdmc6ICAgICAgICAiU1ZHIiwKICAgICAgICAgICAgdGV4dGlsZTogICAgIlRleHRpbGUiLAogICAgICAgICAgICBncm9vdnk6ICAgICAiR3Jvb3Z5IiwKICAgICAgICAgICAgbGlxdWlkOiAgICAgIkxpcXVpZCIsCiAgICAgICAgICAgIFNjYWxhOiAgICAgICJTY2FsYSIKICAgICAgICB9LAogICAgICAgIHRoZW1lOiB7CiAgICAgICAgICAgIGNsb3VkczogICAgICAgICAgICJDbG91ZHMiLAogICAgICAgICAgICBjbG91ZHNfbWlkbmlnaHQ6ICAiQ2xvdWRzIE1pZG5pZ2h0IiwKICAgICAgICAgICAgY29iYWx0OiAgICAgICAgICAgIkNvYmFsdCIsCiAgICAgICAgICAgIGNyaW1zb25fZWRpdG9yOiAgICJDcmltc29uIEVkaXRvciIsCiAgICAgICAgICAgIGRhd246ICAgICAgICAgICAgICJEYXduIiwKICAgICAgICAgICAgZ29iOiAgICAgICAgICAgICAgIkdyZWVuIG9uIEJsYWNrIiwKICAgICAgICAgICAgZWNsaXBzZTogICAgICAgICAgIkVjbGlwc2UiLAogICAgICAgICAgICBpZGxlX2ZpbmdlcnM6ICAgICAiSWRsZSBGaW5nZXJzIiwKICAgICAgICAgICAga3JfdGhlbWU6ICAgICAgICAgIktyIFRoZW1lIiwKICAgICAgICAgICAgbWVyYml2b3JlOiAgICAgICAgIk1lcmJpdm9yZSIsCiAgICAgICAgICAgIG1lcmJpdm9yZV9zb2Z0OiAgICJNZXJiaXZvcmUgU29mdCIsCiAgICAgICAgICAgIG1vbm9faW5kdXN0cmlhbDogICJNb25vIEluZHVzdHJpYWwiLAogICAgICAgICAgICBtb25va2FpOiAgICAgICAgICAiTW9ub2thaSIsCiAgICAgICAgICAgIHBhc3RlbF9vbl9kYXJrOiAgICJQYXN0ZWwgT24gRGFyayIsCiAgICAgICAgICAgIHNvbGFyaXplZF9kYXJrOiAgICJTb2xhcml6ZWQgRGFyayIsCiAgICAgICAgICAgIHNvbGFyaXplZF9saWdodDogICJTb2xhcml6ZWQgTGlnaHQiLAogICAgICAgICAgICB0ZXh0bWF0ZTogICAgICAgICAiVGV4dG1hdGUiLAogICAgICAgICAgICB0d2lsaWdodDogICAgICAgICAiVHdpbGlnaHQiLAogICAgICAgICAgICB2aWJyYW50X2luazogICAgICAiVmlicmFudCBJbmsiCiAgICAgICAgfSwKICAgICAgICBzaG93R3V0dGVyOiBCT09MLAogICAgICAgIGZvbnRTaXplOiB7CiAgICAgICAgICAgICIxMHB4IjogIjEwcHgiLAogICAgICAgICAgICAiMTFweCI6ICIxMXB4IiwKICAgICAgICAgICAgIjEycHgiOiAiMTJweCIsCiAgICAgICAgICAgICIxNHB4IjogIjE0cHgiLAogICAgICAgICAgICAiMTZweCI6ICIxNnB4IgogICAgICAgIH0sCiAgICAgICAgd3JhcDogewogICAgICAgICAgICBvZmY6ICAgICJPZmYiLAogICAgICAgICAgICA0MDogICAgICI0MCIsCiAgICAgICAgICAgIDgwOiAgICAgIjgwIiwKICAgICAgICAgICAgZnJlZTogICAiRnJlZSIKICAgICAgICB9LAogICAgICAgIGtleWJpbmRpbmdzOiB7CiAgICAgICAgICAgIGFjZTogImFjZSIsCiAgICAgICAgICAgIHZpbTogInZpbSIsCiAgICAgICAgICAgIGVtYWNzOiAiZW1hY3MiCiAgICAgICAgfSwKICAgICAgICBzaG93UHJpbnRNYXJnaW46ICAgIEJPT0wsCiAgICAgICAgdXNlU29mdFRhYnM6ICAgICAgICBCT09MLAogICAgICAgIHNob3dJbnZpc2libGVzOiAgICAgQk9PTAogICAgfTsKCiAgICB2YXIgdGFibGUgPSBbXTsKICAgIHRhYmxlLnB1c2goIjx0YWJsZT48dHI+PHRoPlNldHRpbmc8L3RoPjx0aD5WYWx1ZTwvdGg+PC90cj4iKTsKCiAgICBmdW5jdGlvbiByZW5kZXJPcHRpb24oYnVpbGRlciwgb3B0aW9uLCBvYmosIGNWYWx1ZSkgewogICAgICAgIGlmICghb2JqKSB7CiAgICAgICAgICAgIGJ1aWxkZXIucHVzaCgKICAgICAgICAgICAgICAgICI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIHRpdGxlPSciLCBvcHRpb24sICInICIsCiAgICAgICAgICAgICAgICAgICAgY1ZhbHVlICsgIiIgPT0gInRydWUiID8gImNoZWNrZWQ9J3RydWUnIiA6ICIiLAogICAgICAgICAgICAgICAiJz48L2lucHV0PiIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBidWlsZGVyLnB1c2goIjxzZWxlY3QgdGl0bGU9JyIgKyBvcHRpb24gKyAiJz4iKTsKICAgICAgICBmb3IgKHZhciB2YWx1ZSBpbiBvYmopIHsKICAgICAgICAgICAgYnVpbGRlci5wdXNoKCI8b3B0aW9uIHZhbHVlPSciICsgdmFsdWUgKyAiJyAiKTsKCiAgICAgICAgICAgIGlmIChjVmFsdWUgPT0gdmFsdWUpIHsKICAgICAgICAgICAgICAgIGJ1aWxkZXIucHVzaCgiIHNlbGVjdGVkICIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBidWlsZGVyLnB1c2goIj4iLAogICAgICAgICAgICAgICAgb2JqW3ZhbHVlXSwKICAgICAgICAgICAgICAgICI8L29wdGlvbj4iKTsKICAgICAgICB9CiAgICAgICAgYnVpbGRlci5wdXNoKCI8L3NlbGVjdD4iKTsKICAgIH0KCiAgICBmb3IgKHZhciBvcHRpb24gaW4gZXhwb3J0cy5kZWZhdWx0T3B0aW9ucykgewogICAgICAgIHRhYmxlLnB1c2goIjx0cj48dGQ+IiwgZGVzY1tvcHRpb25dLCAiPC90ZD4iKTsKICAgICAgICB0YWJsZS5wdXNoKCI8dGQ+Iik7CiAgICAgICAgcmVuZGVyT3B0aW9uKHRhYmxlLCBvcHRpb24sIG9wdGlvblZhbHVlc1tvcHRpb25dLCBlZGl0b3IuZ2V0T3B0aW9uKG9wdGlvbikpOwogICAgICAgIHRhYmxlLnB1c2goIjwvdGQ+PC90cj4iKTsKICAgIH0KICAgIHRhYmxlLnB1c2goIjwvdGFibGU+Iik7CiAgICBzZXR0aW5nRGl2LmlubmVySFRNTCA9IHRhYmxlLmpvaW4oIiIpOwoKICAgIHZhciBvbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICB2YXIgc2VsZWN0ID0gZS5jdXJyZW50VGFyZ2V0OwogICAgICAgIGVkaXRvci5zZXRPcHRpb24oc2VsZWN0LnRpdGxlLCBzZWxlY3QudmFsdWUpOwogICAgfTsKICAgIHZhciBvbkNsaWNrID0gZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBjYiA9IGUuY3VycmVudFRhcmdldDsKICAgICAgICBlZGl0b3Iuc2V0T3B0aW9uKGNiLnRpdGxlLCBjYi5jaGVja2VkKTsKICAgIH07CiAgICB2YXIgc2VsZWN0cyA9IHNldHRpbmdEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNlbGVjdCIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RzLmxlbmd0aDsgaSsrKQogICAgICAgIHNlbGVjdHNbaV0ub25jaGFuZ2UgPSBvbkNoYW5nZTsKICAgIHZhciBjYnMgPSBzZXR0aW5nRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyBpKyspCiAgICAgICAgY2JzW2ldLm9uY2xpY2sgPSBvbkNsaWNrOwoKCiAgICB2YXIgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgIGJ1dHRvbi50eXBlID0gImJ1dHRvbiI7CiAgICBidXR0b24udmFsdWUgPSAiSGlkZSI7CiAgICBldmVudC5hZGRMaXN0ZW5lcihidXR0b24sICJjbGljayIsIGZ1bmN0aW9uKCkgewogICAgICAgIGVkaXRvci5zZXREaXNwbGF5U2V0dGluZ3MoZmFsc2UpOwogICAgfSk7CiAgICBzZXR0aW5nRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7CiAgICBzZXR0aW5nRGl2LmhpZGVCdXR0b24gPSBidXR0b247Cn0KZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IHsKICAgIG1vZGU6ICAgICAgICAgICAgICAgImphdmFzY3JpcHQiLAogICAgdGhlbWU6ICAgICAgICAgICAgICAidGV4dG1hdGUiLAogICAgd3JhcDogICAgICAgICAgICAgICAib2ZmIiwKICAgIGZvbnRTaXplOiAgICAgICAgICAgIjEycHgiLAogICAgc2hvd0d1dHRlcjogICAgICAgICAiZmFsc2UiLAogICAga2V5YmluZGluZ3M6ICAgICAgICAiYWNlIiwKICAgIHNob3dQcmludE1hcmdpbjogICAgImZhbHNlIiwKICAgIHVzZVNvZnRUYWJzOiAgICAgICAgInRydWUiLAogICAgc2hvd0ludmlzaWJsZXM6ICAgICAiZmFsc2UiCn07Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC90ZXh0YXJlYSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-themelist.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3RoZW1lbGlzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHRoZW1lRGF0YSA9IFsKICAgIFsiQ2hyb21lIiAgICAgICAgIF0sCiAgICBbIkNsb3VkcyIgICAgICAgICBdLAogICAgWyJDcmltc29uIEVkaXRvciIgXSwKICAgIFsiRGF3biIgICAgICAgICAgIF0sCiAgICBbIkRyZWFtd2VhdmVyIiAgICBdLAogICAgWyJFY2xpcHNlIiAgICAgICAgXSwKICAgIFsiR2l0SHViIiAgICAgICAgIF0sCiAgICBbIklQbGFzdGljIiAgICAgICBdLAogICAgWyJTb2xhcml6ZWQgTGlnaHQiXSwKICAgIFsiVGV4dE1hdGUiICAgICAgIF0sCiAgICBbIlRvbW9ycm93IiAgICAgICBdLAogICAgWyJYQ29kZSIgICAgICAgICAgXSwKICAgIFsiS3Vyb2lyIl0sCiAgICBbIkthdHplbk1pbGNoIl0sCiAgICBbIlNRTCBTZXJ2ZXIiICAgICAgICAgICAsInNxbHNlcnZlciIgICAgICAgICAgICAgICAsICJsaWdodCJdLAogICAgWyJBbWJpYW5jZSIgICAgICAgICAgICAgLCJhbWJpYW5jZSIgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiQ2hhb3MiICAgICAgICAgICAgICAgICwiY2hhb3MiICAgICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIkNsb3VkcyBNaWRuaWdodCIgICAgICAsImNsb3Vkc19taWRuaWdodCIgICAgICAgICAsICAiZGFyayJdLAogICAgWyJEcmFjdWxhIiAgICAgICAgICAgICAgLCIiICAgICAgICAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiQ29iYWx0IiAgICAgICAgICAgICAgICwiY29iYWx0IiAgICAgICAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIkdydXZib3giICAgICAgICAgICAgICAsImdydXZib3giICAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJHcmVlbiBvbiBCbGFjayIgICAgICAgLCJnb2IiICAgICAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiaWRsZSBGaW5nZXJzIiAgICAgICAgICwiaWRsZV9maW5nZXJzIiAgICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbImtyVGhlbWUiICAgICAgICAgICAgICAsImtyX3RoZW1lIiAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJNZXJiaXZvcmUiICAgICAgICAgICAgLCJtZXJiaXZvcmUiICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiTWVyYml2b3JlIFNvZnQiICAgICAgICwibWVyYml2b3JlX3NvZnQiICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIk1vbm8gSW5kdXN0cmlhbCIgICAgICAsIm1vbm9faW5kdXN0cmlhbCIgICAgICAgICAsICAiZGFyayJdLAogICAgWyJNb25va2FpIiAgICAgICAgICAgICAgLCJtb25va2FpIiAgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiUGFzdGVsIG9uIGRhcmsiICAgICAgICwicGFzdGVsX29uX2RhcmsiICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIlNvbGFyaXplZCBEYXJrIiAgICAgICAsInNvbGFyaXplZF9kYXJrIiAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJUZXJtaW5hbCIgICAgICAgICAgICAgLCJ0ZXJtaW5hbCIgICAgICAgICAgICAgICAgLCAgImRhcmsiXSwKICAgIFsiVG9tb3Jyb3cgTmlnaHQiICAgICAgICwidG9tb3Jyb3dfbmlnaHQiICAgICAgICAgICwgICJkYXJrIl0sCiAgICBbIlRvbW9ycm93IE5pZ2h0IEJsdWUiICAsInRvbW9ycm93X25pZ2h0X2JsdWUiICAgICAsICAiZGFyayJdLAogICAgWyJUb21vcnJvdyBOaWdodCBCcmlnaHQiLCJ0b21vcnJvd19uaWdodF9icmlnaHQiICAgLCAgImRhcmsiXSwKICAgIFsiVG9tb3Jyb3cgTmlnaHQgODBzIiAgICwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMiICwgICJkYXJrIl0sCiAgICBbIlR3aWxpZ2h0IiAgICAgICAgICAgICAsInR3aWxpZ2h0IiAgICAgICAgICAgICAgICAsICAiZGFyayJdLAogICAgWyJWaWJyYW50IEluayIgICAgICAgICAgLCJ2aWJyYW50X2luayIgICAgICAgICAgICAgLCAgImRhcmsiXQpdOwoKCmV4cG9ydHMudGhlbWVzQnlOYW1lID0ge307CmV4cG9ydHMudGhlbWVzID0gdGhlbWVEYXRhLm1hcChmdW5jdGlvbihkYXRhKSB7CiAgICB2YXIgbmFtZSA9IGRhdGFbMV0gfHwgZGF0YVswXS5yZXBsYWNlKC8gL2csICJfIikudG9Mb3dlckNhc2UoKTsKICAgIHZhciB0aGVtZSA9IHsKICAgICAgICBjYXB0aW9uOiBkYXRhWzBdLAogICAgICAgIHRoZW1lOiAiYWNlL3RoZW1lLyIgKyBuYW1lLAogICAgICAgIGlzRGFyazogZGF0YVsyXSA9PSAiZGFyayIsCiAgICAgICAgbmFtZTogbmFtZQogICAgfTsKICAgIGV4cG9ydHMudGhlbWVzQnlOYW1lW25hbWVdID0gdGhlbWU7CiAgICByZXR1cm4gdGhlbWU7Cn0pOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9leHQvdGhlbWVsaXN0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/ext-whitespace.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvZXh0L3doaXRlc3BhY2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2xhbmciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKZXhwb3J0cy4kZGV0ZWN0SW5kZW50YXRpb24gPSBmdW5jdGlvbihsaW5lcywgZmFsbGJhY2spIHsKICAgIHZhciBzdGF0cyA9IFtdOwogICAgdmFyIGNoYW5nZXMgPSBbXTsKICAgIHZhciB0YWJJbmRlbnRzID0gMDsKICAgIHZhciBwcmV2U3BhY2VzID0gMDsKICAgIHZhciBtYXggPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIDEwMDApOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXg7IGkrKykgewogICAgICAgIHZhciBsaW5lID0gbGluZXNbaV07CiAgICAgICAgaWYgKCEvXlxzKlteKitcLVxzXS8udGVzdChsaW5lKSkKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgIGlmIChsaW5lWzBdID09ICJcdCIpIHsKICAgICAgICAgICAgdGFiSW5kZW50cysrOwogICAgICAgICAgICBwcmV2U3BhY2VzID0gLU51bWJlci5NQVhfVkFMVUU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHNwYWNlcyA9IGxpbmUubWF0Y2goL14gKi8pWzBdLmxlbmd0aDsKICAgICAgICAgICAgaWYgKHNwYWNlcyAmJiBsaW5lW3NwYWNlc10gIT0gIlx0IikgewogICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBzcGFjZXMgLSBwcmV2U3BhY2VzOwogICAgICAgICAgICAgICAgaWYgKGRpZmYgPiAwICYmICEocHJldlNwYWNlcyVkaWZmKSAmJiAhKHNwYWNlcyVkaWZmKSkKICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzW2RpZmZdID0gKGNoYW5nZXNbZGlmZl0gfHwgMCkgKyAxOwogICAgCiAgICAgICAgICAgICAgICBzdGF0c1tzcGFjZXNdID0gKHN0YXRzW3NwYWNlc10gfHwgMCkgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZXZTcGFjZXMgPSBzcGFjZXM7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChpIDwgbWF4ICYmIGxpbmVbbGluZS5sZW5ndGggLSAxXSA9PSAiXFwiKQogICAgICAgICAgICBsaW5lID0gbGluZXNbaSsrXTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZ2V0U2NvcmUoaW5kZW50KSB7CiAgICAgICAgdmFyIHNjb3JlID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gaW5kZW50OyBpIDwgc3RhdHMubGVuZ3RoOyBpICs9IGluZGVudCkKICAgICAgICAgICAgc2NvcmUgKz0gc3RhdHNbaV0gfHwgMDsKICAgICAgICByZXR1cm4gc2NvcmU7CiAgICB9CgogICAgdmFyIGNoYW5nZXNUb3RhbCA9IGNoYW5nZXMucmVkdWNlKGZ1bmN0aW9uKGEsYil7cmV0dXJuIGErYjt9LCAwKTsKCiAgICB2YXIgZmlyc3QgPSB7c2NvcmU6IDAsIGxlbmd0aDogMH07CiAgICB2YXIgc3BhY2VJbmRlbnRzID0gMDsKICAgIGZvciAodmFyIGkgPSAxOyBpIDwgMTI7IGkrKykgewogICAgICAgIHZhciBzY29yZSA9IGdldFNjb3JlKGkpOwogICAgICAgIGlmIChpID09IDEpIHsKICAgICAgICAgICAgc3BhY2VJbmRlbnRzID0gc2NvcmU7CiAgICAgICAgICAgIHNjb3JlID0gc3RhdHNbMV0gPyAwLjkgOiAwLjg7CiAgICAgICAgICAgIGlmICghc3RhdHMubGVuZ3RoKQogICAgICAgICAgICAgICAgc2NvcmUgPSAwOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICBzY29yZSAvPSBzcGFjZUluZGVudHM7CgogICAgICAgIGlmIChjaGFuZ2VzW2ldKQogICAgICAgICAgICBzY29yZSArPSBjaGFuZ2VzW2ldIC8gY2hhbmdlc1RvdGFsOwoKICAgICAgICBpZiAoc2NvcmUgPiBmaXJzdC5zY29yZSkKICAgICAgICAgICAgZmlyc3QgPSB7c2NvcmU6IHNjb3JlLCBsZW5ndGg6IGl9OwogICAgfQoKICAgIGlmIChmaXJzdC5zY29yZSAmJiBmaXJzdC5zY29yZSA+IDEuNCkKICAgICAgICB2YXIgdGFiTGVuZ3RoID0gZmlyc3QubGVuZ3RoOwoKICAgIGlmICh0YWJJbmRlbnRzID4gc3BhY2VJbmRlbnRzICsgMSkgewogICAgICAgIGlmICh0YWJMZW5ndGggPT0gMSB8fCBzcGFjZUluZGVudHMgPCB0YWJJbmRlbnRzIC8gNCB8fCBmaXJzdC5zY29yZSA8IDEuOCkKICAgICAgICAgICAgdGFiTGVuZ3RoID0gdW5kZWZpbmVkOwogICAgICAgIHJldHVybiB7Y2g6ICJcdCIsIGxlbmd0aDogdGFiTGVuZ3RofTsKICAgIH0KICAgIGlmIChzcGFjZUluZGVudHMgPiB0YWJJbmRlbnRzICsgMSkKICAgICAgICByZXR1cm4ge2NoOiAiICIsIGxlbmd0aDogdGFiTGVuZ3RofTsKfTsKCmV4cG9ydHMuZGV0ZWN0SW5kZW50YXRpb24gPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICB2YXIgbGluZXMgPSBzZXNzaW9uLmdldExpbmVzKDAsIDEwMDApOwogICAgdmFyIGluZGVudCA9IGV4cG9ydHMuJGRldGVjdEluZGVudGF0aW9uKGxpbmVzKSB8fCB7fTsKCiAgICBpZiAoaW5kZW50LmNoKQogICAgICAgIHNlc3Npb24uc2V0VXNlU29mdFRhYnMoaW5kZW50LmNoID09ICIgIik7CgogICAgaWYgKGluZGVudC5sZW5ndGgpCiAgICAgICAgc2Vzc2lvbi5zZXRUYWJTaXplKGluZGVudC5sZW5ndGgpOwogICAgcmV0dXJuIGluZGVudDsKfTsKZXhwb3J0cy50cmltVHJhaWxpbmdTcGFjZSA9IGZ1bmN0aW9uKHNlc3Npb24sIG9wdGlvbnMpIHsKICAgIHZhciBkb2MgPSBzZXNzaW9uLmdldERvY3VtZW50KCk7CiAgICB2YXIgbGluZXMgPSBkb2MuZ2V0QWxsTGluZXMoKTsKICAgIAogICAgdmFyIG1pbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmltRW1wdHkgPyAtMSA6IDA7CiAgICB2YXIgY3Vyc29ycyA9IFtdLCBjaSA9IC0xOwogICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5rZWVwQ3Vyc29yUG9zaXRpb24pIHsKICAgICAgICBpZiAoc2Vzc2lvbi5zZWxlY3Rpb24ucmFuZ2VDb3VudCkgewogICAgICAgICAgICBzZXNzaW9uLnNlbGVjdGlvbi5yYW5nZUxpc3QucmFuZ2VzLmZvckVhY2goZnVuY3Rpb24oeCwgaSwgcmFuZ2VzKSB7CiAgICAgICAgICAgICAgIHZhciBuZXh0ID0gcmFuZ2VzW2kgKyAxXTsKICAgICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC5jdXJzb3Iucm93ID09IHguY3Vyc29yLnJvdykKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIGN1cnNvcnMucHVzaCh4LmN1cnNvcik7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGN1cnNvcnMucHVzaChzZXNzaW9uLnNlbGVjdGlvbi5nZXRDdXJzb3IoKSk7CiAgICAgICAgfQogICAgICAgIGNpID0gMDsKICAgIH0KICAgIHZhciBjdXJzb3JSb3cgPSBjdXJzb3JzW2NpXSAmJiBjdXJzb3JzW2NpXS5yb3c7CgogICAgZm9yICh2YXIgaSA9IDAsIGw9bGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTsKICAgICAgICB2YXIgaW5kZXggPSBsaW5lLnNlYXJjaCgvXHMrJC8pOwoKICAgICAgICBpZiAoaSA9PSBjdXJzb3JSb3cpIHsKICAgICAgICAgICAgaWYgKGluZGV4IDwgY3Vyc29yc1tjaV0uY29sdW1uICYmIGluZGV4ID4gbWluKQogICAgICAgICAgICAgICBpbmRleCA9IGN1cnNvcnNbY2ldLmNvbHVtbjsKICAgICAgICAgICAgY2krKzsKICAgICAgICAgICAgY3Vyc29yUm93ID0gY3Vyc29yc1tjaV0gPyBjdXJzb3JzW2NpXS5yb3cgOiAtMTsKICAgICAgICB9CgogICAgICAgIGlmIChpbmRleCA+IG1pbikKICAgICAgICAgICAgZG9jLnJlbW92ZUluTGluZShpLCBpbmRleCwgbGluZS5sZW5ndGgpOwogICAgfQp9OwoKZXhwb3J0cy5jb252ZXJ0SW5kZW50YXRpb24gPSBmdW5jdGlvbihzZXNzaW9uLCBjaCwgbGVuKSB7CiAgICB2YXIgb2xkQ2ggPSBzZXNzaW9uLmdldFRhYlN0cmluZygpWzBdOwogICAgdmFyIG9sZExlbiA9IHNlc3Npb24uZ2V0VGFiU2l6ZSgpOwogICAgaWYgKCFsZW4pIGxlbiA9IG9sZExlbjsKICAgIGlmICghY2gpIGNoID0gb2xkQ2g7CgogICAgdmFyIHRhYiA9IGNoID09ICJcdCIgPyBjaDogbGFuZy5zdHJpbmdSZXBlYXQoY2gsIGxlbik7CgogICAgdmFyIGRvYyA9IHNlc3Npb24uZG9jOwogICAgdmFyIGxpbmVzID0gZG9jLmdldEFsbExpbmVzKCk7CgogICAgdmFyIGNhY2hlID0ge307CiAgICB2YXIgc3BhY2VDYWNoZSA9IHt9OwogICAgZm9yICh2YXIgaSA9IDAsIGw9bGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciB3ID0gc2Vzc2lvbi4kZ2V0U3RyaW5nU2NyZWVuV2lkdGgobWF0Y2gpWzBdOwogICAgICAgICAgICB2YXIgdGFiQ291bnQgPSBNYXRoLmZsb29yKHcvb2xkTGVuKTsKICAgICAgICAgICAgdmFyIHJlbWluZGVyID0gdyVvbGRMZW47CiAgICAgICAgICAgIHZhciB0b0luc2VydCA9IGNhY2hlW3RhYkNvdW50XSB8fCAoY2FjaGVbdGFiQ291bnRdID0gbGFuZy5zdHJpbmdSZXBlYXQodGFiLCB0YWJDb3VudCkpOwogICAgICAgICAgICB0b0luc2VydCArPSBzcGFjZUNhY2hlW3JlbWluZGVyXSB8fCAoc3BhY2VDYWNoZVtyZW1pbmRlcl0gPSBsYW5nLnN0cmluZ1JlcGVhdCgiICIsIHJlbWluZGVyKSk7CgogICAgICAgICAgICBpZiAodG9JbnNlcnQgIT0gbWF0Y2gpIHsKICAgICAgICAgICAgICAgIGRvYy5yZW1vdmVJbkxpbmUoaSwgMCwgbWF0Y2gubGVuZ3RoKTsKICAgICAgICAgICAgICAgIGRvYy5pbnNlcnRJbkxpbmUoe3JvdzogaSwgY29sdW1uOiAwfSwgdG9JbnNlcnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgc2Vzc2lvbi5zZXRUYWJTaXplKGxlbik7CiAgICBzZXNzaW9uLnNldFVzZVNvZnRUYWJzKGNoID09ICIgIik7Cn07CgpleHBvcnRzLiRwYXJzZVN0cmluZ0FyZyA9IGZ1bmN0aW9uKHRleHQpIHsKICAgIHZhciBpbmRlbnQgPSB7fTsKICAgIGlmICgvdC8udGVzdCh0ZXh0KSkKICAgICAgICBpbmRlbnQuY2ggPSAiXHQiOwogICAgZWxzZSBpZiAoL3MvLnRlc3QodGV4dCkpCiAgICAgICAgaW5kZW50LmNoID0gIiAiOwogICAgdmFyIG0gPSB0ZXh0Lm1hdGNoKC9cZCsvKTsKICAgIGlmIChtKQogICAgICAgIGluZGVudC5sZW5ndGggPSBwYXJzZUludChtWzBdLCAxMCk7CiAgICByZXR1cm4gaW5kZW50Owp9OwoKZXhwb3J0cy4kcGFyc2VBcmcgPSBmdW5jdGlvbihhcmcpIHsKICAgIGlmICghYXJnKQogICAgICAgIHJldHVybiB7fTsKICAgIGlmICh0eXBlb2YgYXJnID09ICJzdHJpbmciKQogICAgICAgIHJldHVybiBleHBvcnRzLiRwYXJzZVN0cmluZ0FyZyhhcmcpOwogICAgaWYgKHR5cGVvZiBhcmcudGV4dCA9PSAic3RyaW5nIikKICAgICAgICByZXR1cm4gZXhwb3J0cy4kcGFyc2VTdHJpbmdBcmcoYXJnLnRleHQpOwogICAgcmV0dXJuIGFyZzsKfTsKCmV4cG9ydHMuY29tbWFuZHMgPSBbewogICAgbmFtZTogImRldGVjdEluZGVudGF0aW9uIiwKICAgIGRlc2NyaXB0aW9uOiAiRGV0ZWN0IGluZGVudGF0aW9uIGZyb20gY29udGVudCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBleHBvcnRzLmRldGVjdEluZGVudGF0aW9uKGVkaXRvci5zZXNzaW9uKTsKICAgIH0KfSwgewogICAgbmFtZTogInRyaW1UcmFpbGluZ1NwYWNlIiwKICAgIGRlc2NyaXB0aW9uOiAiVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJncykgewogICAgICAgIGV4cG9ydHMudHJpbVRyYWlsaW5nU3BhY2UoZWRpdG9yLnNlc3Npb24sIGFyZ3MpOwogICAgfQp9LCB7CiAgICBuYW1lOiAiY29udmVydEluZGVudGF0aW9uIiwKICAgIGRlc2NyaXB0aW9uOiAiQ29udmVydCBpbmRlbnRhdGlvbiB0byAuLi4iLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmcpIHsKICAgICAgICB2YXIgaW5kZW50ID0gZXhwb3J0cy4kcGFyc2VBcmcoYXJnKTsKICAgICAgICBleHBvcnRzLmNvbnZlcnRJbmRlbnRhdGlvbihlZGl0b3Iuc2Vzc2lvbiwgaW5kZW50LmNoLCBpbmRlbnQubGVuZ3RoKTsKICAgIH0KfSwgewogICAgbmFtZTogInNldEluZGVudGF0aW9uIiwKICAgIGRlc2NyaXB0aW9uOiAiU2V0IGluZGVudGF0aW9uIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgYXJnKSB7CiAgICAgICAgdmFyIGluZGVudCA9IGV4cG9ydHMuJHBhcnNlQXJnKGFyZyk7CiAgICAgICAgaW5kZW50Lmxlbmd0aCAmJiBlZGl0b3Iuc2Vzc2lvbi5zZXRUYWJTaXplKGluZGVudC5sZW5ndGgpOwogICAgICAgIGluZGVudC5jaCAmJiBlZGl0b3Iuc2Vzc2lvbi5zZXRVc2VTb2Z0VGFicyhpbmRlbnQuY2ggPT0gIiAiKTsKICAgIH0KfV07Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2V4dC93aGl0ZXNwYWNlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/ace/keybinding-emacs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvb2NjdXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9zZWFyY2giLCJhY2UvZWRpdF9zZXNzaW9uIiwiYWNlL3NlYXJjaF9oaWdobGlnaHQiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBTZWFyY2ggPSByZXF1aXJlKCIuL3NlYXJjaCIpLlNlYXJjaDsKdmFyIEVkaXRTZXNzaW9uID0gcmVxdWlyZSgiLi9lZGl0X3Nlc3Npb24iKS5FZGl0U2Vzc2lvbjsKdmFyIFNlYXJjaEhpZ2hsaWdodCA9IHJlcXVpcmUoIi4vc2VhcmNoX2hpZ2hsaWdodCIpLlNlYXJjaEhpZ2hsaWdodDsKZnVuY3Rpb24gT2NjdXIoKSB7fQoKb29wLmluaGVyaXRzKE9jY3VyLCBTZWFyY2gpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5lbnRlciA9IGZ1bmN0aW9uKGVkaXRvciwgb3B0aW9ucykgewogICAgICAgIGlmICghb3B0aW9ucy5uZWVkbGUpIHJldHVybiBmYWxzZTsKICAgICAgICB2YXIgcG9zID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgdGhpcy5kaXNwbGF5T2NjdXJDb250ZW50KGVkaXRvciwgb3B0aW9ucyk7CiAgICAgICAgdmFyIHRyYW5zbGF0ZWRQb3MgPSB0aGlzLm9yaWdpbmFsVG9PY2N1clBvc2l0aW9uKGVkaXRvci5zZXNzaW9uLCBwb3MpOwogICAgICAgIGVkaXRvci5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbih0cmFuc2xhdGVkUG9zKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICB0aGlzLmV4aXQgPSBmdW5jdGlvbihlZGl0b3IsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgcG9zID0gb3B0aW9ucy50cmFuc2xhdGVQb3NpdGlvbiAmJiBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICB2YXIgdHJhbnNsYXRlZFBvcyA9IHBvcyAmJiB0aGlzLm9jY3VyVG9PcmlnaW5hbFBvc2l0aW9uKGVkaXRvci5zZXNzaW9uLCBwb3MpOwogICAgICAgIHRoaXMuZGlzcGxheU9yaWdpbmFsQ29udGVudChlZGl0b3IpOwogICAgICAgIGlmICh0cmFuc2xhdGVkUG9zKQogICAgICAgICAgICBlZGl0b3IubW92ZUN1cnNvclRvUG9zaXRpb24odHJhbnNsYXRlZFBvcyk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwoKICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24oc2VzcywgcmVnZXhwKSB7CiAgICAgICAgdmFyIGhsID0gc2Vzcy4kb2NjdXJIaWdobGlnaHQgPSBzZXNzLiRvY2N1ckhpZ2hsaWdodCB8fCBzZXNzLmFkZER5bmFtaWNNYXJrZXIoCiAgICAgICAgICAgICAgICBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vfb2NjdXItaGlnaGxpZ2h0IiwgInRleHQiKSk7CiAgICAgICAgaGwuc2V0UmVnZXhwKHJlZ2V4cCk7CiAgICAgICAgc2Vzcy5fZW1pdCgiY2hhbmdlQmFja01hcmtlciIpOyAvLyBmb3JjZSBoaWdobGlnaHQgbGF5ZXIgcmVkcmF3CiAgICB9OwoKICAgIHRoaXMuZGlzcGxheU9jY3VyQ29udGVudCA9IGZ1bmN0aW9uKGVkaXRvciwgb3B0aW9ucykgewogICAgICAgIHRoaXMuJG9yaWdpbmFsU2Vzc2lvbiA9IGVkaXRvci5zZXNzaW9uOwogICAgICAgIHZhciBmb3VuZCA9IHRoaXMubWF0Y2hpbmdMaW5lcyhlZGl0b3Iuc2Vzc2lvbiwgb3B0aW9ucyk7CiAgICAgICAgdmFyIGxpbmVzID0gZm91bmQubWFwKGZ1bmN0aW9uKGZvdW5kTGluZSkgeyByZXR1cm4gZm91bmRMaW5lLmNvbnRlbnQ7IH0pOwogICAgICAgIHZhciBvY2N1clNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb24obGluZXMuam9pbignXG4nKSk7CiAgICAgICAgb2NjdXJTZXNzaW9uLiRvY2N1ciA9IHRoaXM7CiAgICAgICAgb2NjdXJTZXNzaW9uLiRvY2N1ck1hdGNoaW5nTGluZXMgPSBmb3VuZDsKICAgICAgICBlZGl0b3Iuc2V0U2Vzc2lvbihvY2N1clNlc3Npb24pOwogICAgICAgIHRoaXMuJHVzZUVtYWNzU3R5bGVMaW5lU3RhcnQgPSB0aGlzLiRvcmlnaW5hbFNlc3Npb24uJHVzZUVtYWNzU3R5bGVMaW5lU3RhcnQ7CiAgICAgICAgb2NjdXJTZXNzaW9uLiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0ID0gdGhpcy4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydDsKICAgICAgICB0aGlzLmhpZ2hsaWdodChvY2N1clNlc3Npb24sIG9wdGlvbnMucmUpOwogICAgICAgIG9jY3VyU2Vzc2lvbi5fZW1pdCgnY2hhbmdlQmFja01hcmtlcicpOwogICAgfTsKCiAgICB0aGlzLmRpc3BsYXlPcmlnaW5hbENvbnRlbnQgPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBlZGl0b3Iuc2V0U2Vzc2lvbih0aGlzLiRvcmlnaW5hbFNlc3Npb24pOwogICAgICAgIHRoaXMuJG9yaWdpbmFsU2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydCA9IHRoaXMuJHVzZUVtYWNzU3R5bGVMaW5lU3RhcnQ7CiAgICB9OwogICAgdGhpcy5vcmlnaW5hbFRvT2NjdXJQb3NpdGlvbiA9IGZ1bmN0aW9uKHNlc3Npb24sIHBvcykgewogICAgICAgIHZhciBsaW5lcyA9IHNlc3Npb24uJG9jY3VyTWF0Y2hpbmdMaW5lczsKICAgICAgICB2YXIgbnVsbFBvcyA9IHtyb3c6IDAsIGNvbHVtbjogMH07CiAgICAgICAgaWYgKCFsaW5lcykgcmV0dXJuIG51bGxQb3M7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAobGluZXNbaV0ucm93ID09PSBwb3Mucm93KQogICAgICAgICAgICAgICAgcmV0dXJuIHtyb3c6IGksIGNvbHVtbjogcG9zLmNvbHVtbn07CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsUG9zOwogICAgfTsKICAgIHRoaXMub2NjdXJUb09yaWdpbmFsUG9zaXRpb24gPSBmdW5jdGlvbihzZXNzaW9uLCBwb3MpIHsKICAgICAgICB2YXIgbGluZXMgPSBzZXNzaW9uLiRvY2N1ck1hdGNoaW5nTGluZXM7CiAgICAgICAgaWYgKCFsaW5lcyB8fCAhbGluZXNbcG9zLnJvd10pCiAgICAgICAgICAgIHJldHVybiBwb3M7CiAgICAgICAgcmV0dXJuIHtyb3c6IGxpbmVzW3Bvcy5yb3ddLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CgogICAgdGhpcy5tYXRjaGluZ0xpbmVzID0gZnVuY3Rpb24oc2Vzc2lvbiwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvb3AubWl4aW4oe30sIG9wdGlvbnMpOwogICAgICAgIGlmICghc2Vzc2lvbiB8fCAhb3B0aW9ucy5uZWVkbGUpIHJldHVybiBbXTsKICAgICAgICB2YXIgc2VhcmNoID0gbmV3IFNlYXJjaCgpOwogICAgICAgIHNlYXJjaC5zZXQob3B0aW9ucyk7CiAgICAgICAgcmV0dXJuIHNlYXJjaC5maW5kQWxsKHNlc3Npb24pLnJlZHVjZShmdW5jdGlvbihsaW5lcywgcmFuZ2UpIHsKICAgICAgICAgICAgdmFyIHJvdyA9IHJhbmdlLnN0YXJ0LnJvdzsKICAgICAgICAgICAgdmFyIGxhc3QgPSBsaW5lc1tsaW5lcy5sZW5ndGgtMV07CiAgICAgICAgICAgIHJldHVybiBsYXN0ICYmIGxhc3Qucm93ID09PSByb3cgPwogICAgICAgICAgICAgICAgbGluZXMgOgogICAgICAgICAgICAgICAgbGluZXMuY29uY2F0KHtyb3c6IHJvdywgY29udGVudDogc2Vzc2lvbi5nZXRMaW5lKHJvdyl9KTsKICAgICAgICB9LCBbXSk7CiAgICB9OwoKfSkuY2FsbChPY2N1ci5wcm90b3R5cGUpOwoKdmFyIGRvbSA9IHJlcXVpcmUoJy4vbGliL2RvbScpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKCIuYWNlX29jY3VyLWhpZ2hsaWdodCB7XG5cCiAgICBib3JkZXItcmFkaXVzOiA0cHg7XG5cCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDg3LCAyNTUsIDgsIDAuMjUpO1xuXAogICAgcG9zaXRpb246IGFic29sdXRlO1xuXAogICAgei1pbmRleDogNDtcblwKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cCiAgICBib3gtc2hhZG93OiAwIDAgNHB4IHJnYig5MSwgMjU1LCA1MCk7XG5cCn1cblwKLmFjZV9kYXJrIC5hY2Vfb2NjdXItaGlnaGxpZ2h0IHtcblwKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYig4MCwgMTQwLCA4NSk7XG5cCiAgICBib3gtc2hhZG93OiAwIDAgNHB4IHJnYig2MCwgMTIwLCA3MCk7XG5cCn1cbiIsICJpbmNyZW1lbnRhbC1vY2N1ci1oaWdobGlnaHRpbmciKTsKCmV4cG9ydHMuT2NjdXIgPSBPY2N1cjsKCn0pOwoKZGVmaW5lKCJhY2UvY29tbWFuZHMvb2NjdXJfY29tbWFuZHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvY29uZmlnIiwiYWNlL29jY3VyIiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9saWIvb29wIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKdmFyIGNvbmZpZyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpLAogICAgT2NjdXIgPSByZXF1aXJlKCIuLi9vY2N1ciIpLk9jY3VyOwp2YXIgb2NjdXJTdGFydENvbW1hbmQgPSB7CiAgICBuYW1lOiAib2NjdXIiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIGFscmVhZHlJbk9jY3VyID0gISFlZGl0b3Iuc2Vzc2lvbi4kb2NjdXI7CiAgICAgICAgdmFyIG9jY3VyU2Vzc2lvbkFjdGl2ZSA9IG5ldyBPY2N1cigpLmVudGVyKGVkaXRvciwgb3B0aW9ucyk7CiAgICAgICAgaWYgKG9jY3VyU2Vzc2lvbkFjdGl2ZSAmJiAhYWxyZWFkeUluT2NjdXIpCiAgICAgICAgICAgIE9jY3VyS2V5Ym9hcmRIYW5kbGVyLmluc3RhbGxJbihlZGl0b3IpOwogICAgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn07Cgp2YXIgb2NjdXJDb21tYW5kcyA9IFt7CiAgICBuYW1lOiAib2NjdXJleGl0IiwKICAgIGJpbmRLZXk6ICdlc2N8Q3RybC1HJywKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBvY2N1ciA9IGVkaXRvci5zZXNzaW9uLiRvY2N1cjsKICAgICAgICBpZiAoIW9jY3VyKSByZXR1cm47CiAgICAgICAgb2NjdXIuZXhpdChlZGl0b3IsIHt9KTsKICAgICAgICBpZiAoIWVkaXRvci5zZXNzaW9uLiRvY2N1cikgT2NjdXJLZXlib2FyZEhhbmRsZXIudW5pbnN0YWxsRnJvbShlZGl0b3IpOwogICAgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJvY2N1cmFjY2VwdCIsCiAgICBiaW5kS2V5OiAnZW50ZXInLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIG9jY3VyID0gZWRpdG9yLnNlc3Npb24uJG9jY3VyOwogICAgICAgIGlmICghb2NjdXIpIHJldHVybjsKICAgICAgICBvY2N1ci5leGl0KGVkaXRvciwge3RyYW5zbGF0ZVBvc2l0aW9uOiB0cnVlfSk7CiAgICAgICAgaWYgKCFlZGl0b3Iuc2Vzc2lvbi4kb2NjdXIpIE9jY3VyS2V5Ym9hcmRIYW5kbGVyLnVuaW5zdGFsbEZyb20oZWRpdG9yKTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9XTsKCnZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKCmZ1bmN0aW9uIE9jY3VyS2V5Ym9hcmRIYW5kbGVyKCkge30KCm9vcC5pbmhlcml0cyhPY2N1cktleWJvYXJkSGFuZGxlciwgSGFzaEhhbmRsZXIpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuaXNPY2N1ckhhbmRsZXIgPSB0cnVlOwoKICAgIHRoaXMuYXR0YWNoID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgSGFzaEhhbmRsZXIuY2FsbCh0aGlzLCBvY2N1ckNvbW1hbmRzLCBlZGl0b3IuY29tbWFuZHMucGxhdGZvcm0pOwogICAgICAgIHRoaXMuJGVkaXRvciA9IGVkaXRvcjsKICAgIH07CgogICAgdmFyIGhhbmRsZUtleWJvYXJkJHN1cGVyID0gdGhpcy5oYW5kbGVLZXlib2FyZDsKICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmQgPSBmdW5jdGlvbihkYXRhLCBoYXNoSWQsIGtleSwga2V5Q29kZSkgewogICAgICAgIHZhciBjbWQgPSBoYW5kbGVLZXlib2FyZCRzdXBlci5jYWxsKHRoaXMsIGRhdGEsIGhhc2hJZCwga2V5LCBrZXlDb2RlKTsKICAgICAgICByZXR1cm4gKGNtZCAmJiBjbWQuY29tbWFuZCkgPyBjbWQgOiB1bmRlZmluZWQ7CiAgICB9OwoKfSkuY2FsbChPY2N1cktleWJvYXJkSGFuZGxlci5wcm90b3R5cGUpOwoKT2NjdXJLZXlib2FyZEhhbmRsZXIuaW5zdGFsbEluID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICB2YXIgaGFuZGxlciA9IG5ldyB0aGlzKCk7CiAgICBlZGl0b3Iua2V5QmluZGluZy5hZGRLZXlib2FyZEhhbmRsZXIoaGFuZGxlcik7CiAgICBlZGl0b3IuY29tbWFuZHMuYWRkQ29tbWFuZHMob2NjdXJDb21tYW5kcyk7Cn07CgpPY2N1cktleWJvYXJkSGFuZGxlci51bmluc3RhbGxGcm9tID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICBlZGl0b3IuY29tbWFuZHMucmVtb3ZlQ29tbWFuZHMob2NjdXJDb21tYW5kcyk7CiAgICB2YXIgaGFuZGxlciA9IGVkaXRvci5nZXRLZXlib2FyZEhhbmRsZXIoKTsKICAgIGlmIChoYW5kbGVyLmlzT2NjdXJIYW5kbGVyKQogICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcihoYW5kbGVyKTsKfTsKCmV4cG9ydHMub2NjdXJTdGFydENvbW1hbmQgPSBvY2N1clN0YXJ0Q29tbWFuZDsKCn0pOwoKZGVmaW5lKCJhY2UvY29tbWFuZHMvaW5jcmVtZW50YWxfc2VhcmNoX2NvbW1hbmRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2NvbmZpZyIsImFjZS9saWIvb29wIiwiYWNlL2tleWJvYXJkL2hhc2hfaGFuZGxlciIsImFjZS9jb21tYW5kcy9vY2N1cl9jb21tYW5kcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBjb25maWcgPSByZXF1aXJlKCIuLi9jb25maWciKTsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEhhc2hIYW5kbGVyID0gcmVxdWlyZSgiLi4va2V5Ym9hcmQvaGFzaF9oYW5kbGVyIikuSGFzaEhhbmRsZXI7CnZhciBvY2N1clN0YXJ0Q29tbWFuZCA9IHJlcXVpcmUoIi4vb2NjdXJfY29tbWFuZHMiKS5vY2N1clN0YXJ0Q29tbWFuZDsKZXhwb3J0cy5pU2VhcmNoU3RhcnRDb21tYW5kcyA9IFt7CiAgICBuYW1lOiAiaVNlYXJjaCIsCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1GIiwgbWFjOiAiQ29tbWFuZC1GIn0sCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIG9wdGlvbnMpIHsKICAgICAgICBjb25maWcubG9hZE1vZHVsZShbImNvcmUiLCAiYWNlL2luY3JlbWVudGFsX3NlYXJjaCJdLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBpU2VhcmNoID0gZS5pU2VhcmNoID0gZS5pU2VhcmNoIHx8IG5ldyBlLkluY3JlbWVudGFsU2VhcmNoKCk7CiAgICAgICAgICAgIGlTZWFyY2guYWN0aXZhdGUoZWRpdG9yLCBvcHRpb25zLmJhY2t3YXJkcyk7CiAgICAgICAgICAgIGlmIChvcHRpb25zLmp1bXBUb0ZpcnN0TWF0Y2gpIGlTZWFyY2gubmV4dChvcHRpb25zKTsKICAgICAgICB9KTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiaVNlYXJjaEJhY2t3YXJkcyIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGp1bXBUb05leHQpIHsgZWRpdG9yLmV4ZWNDb21tYW5kKCdpU2VhcmNoJywge2JhY2t3YXJkczogdHJ1ZX0pOyB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImlTZWFyY2hBbmRHbyIsCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1LIiwgbWFjOiAiQ29tbWFuZC1HIn0sCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGp1bXBUb05leHQpIHsgZWRpdG9yLmV4ZWNDb21tYW5kKCdpU2VhcmNoJywge2p1bXBUb0ZpcnN0TWF0Y2g6IHRydWUsIHVzZUN1cnJlbnRPclByZXZTZWFyY2g6IHRydWV9KTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJpU2VhcmNoQmFja3dhcmRzQW5kR28iLAogICAgYmluZEtleToge3dpbjogIkN0cmwtU2hpZnQtSyIsIG1hYzogIkNvbW1hbmQtU2hpZnQtRyJ9LAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7IGVkaXRvci5leGVjQ29tbWFuZCgnaVNlYXJjaCcsIHtqdW1wVG9GaXJzdE1hdGNoOiB0cnVlLCBiYWNrd2FyZHM6IHRydWUsIHVzZUN1cnJlbnRPclByZXZTZWFyY2g6IHRydWV9KTsgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn1dOwpleHBvcnRzLmlTZWFyY2hDb21tYW5kcyA9IFt7CiAgICBuYW1lOiAicmVzdGFydFNlYXJjaCIsCiAgICBiaW5kS2V5OiB7d2luOiAiQ3RybC1GIiwgbWFjOiAiQ29tbWFuZC1GIn0sCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoKSB7CiAgICAgICAgaVNlYXJjaC5jYW5jZWxTZWFyY2godHJ1ZSk7CiAgICB9Cn0sIHsKICAgIG5hbWU6ICJzZWFyY2hGb3J3YXJkIiwKICAgIGJpbmRLZXk6IHt3aW46ICJDdHJsLVN8Q3RybC1LIiwgbWFjOiAiQ3RybC1TfENvbW1hbmQtRyJ9LAogICAgZXhlYzogZnVuY3Rpb24oaVNlYXJjaCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMudXNlQ3VycmVudE9yUHJldlNlYXJjaCA9IHRydWU7CiAgICAgICAgaVNlYXJjaC5uZXh0KG9wdGlvbnMpOwogICAgfQp9LCB7CiAgICBuYW1lOiAic2VhcmNoQmFja3dhcmQiLAogICAgYmluZEtleToge3dpbjogIkN0cmwtUnxDdHJsLVNoaWZ0LUsiLCBtYWM6ICJDdHJsLVJ8Q29tbWFuZC1TaGlmdC1HIn0sCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoLCBvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucy51c2VDdXJyZW50T3JQcmV2U2VhcmNoID0gdHJ1ZTsKICAgICAgICBvcHRpb25zLmJhY2t3YXJkcyA9IHRydWU7CiAgICAgICAgaVNlYXJjaC5uZXh0KG9wdGlvbnMpOwogICAgfQp9LCB7CiAgICBuYW1lOiAiZXh0ZW5kU2VhcmNoVGVybSIsCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoLCBzdHJpbmcpIHsKICAgICAgICBpU2VhcmNoLmFkZFN0cmluZyhzdHJpbmcpOwogICAgfQp9LCB7CiAgICBuYW1lOiAiZXh0ZW5kU2VhcmNoVGVybVNwYWNlIiwKICAgIGJpbmRLZXk6ICJzcGFjZSIsCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoKSB7IGlTZWFyY2guYWRkU3RyaW5nKCcgJyk7IH0KfSwgewogICAgbmFtZTogInNocmlua1NlYXJjaFRlcm0iLAogICAgYmluZEtleTogImJhY2tzcGFjZSIsCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoKSB7CiAgICAgICAgaVNlYXJjaC5yZW1vdmVDaGFyKCk7CiAgICB9Cn0sIHsKICAgIG5hbWU6ICdjb25maXJtU2VhcmNoJywKICAgIGJpbmRLZXk6ICdyZXR1cm4nLAogICAgZXhlYzogZnVuY3Rpb24oaVNlYXJjaCkgeyBpU2VhcmNoLmRlYWN0aXZhdGUoKTsgfQp9LCB7CiAgICBuYW1lOiAnY2FuY2VsU2VhcmNoJywKICAgIGJpbmRLZXk6ICdlc2N8Q3RybC1HJywKICAgIGV4ZWM6IGZ1bmN0aW9uKGlTZWFyY2gpIHsgaVNlYXJjaC5kZWFjdGl2YXRlKHRydWUpOyB9Cn0sIHsKICAgIG5hbWU6ICdvY2N1cmlzZWFyY2gnLAogICAgYmluZEtleTogJ0N0cmwtTycsCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoKSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSBvb3AubWl4aW4oe30sIGlTZWFyY2guJG9wdGlvbnMpOwogICAgICAgIGlTZWFyY2guZGVhY3RpdmF0ZSgpOwogICAgICAgIG9jY3VyU3RhcnRDb21tYW5kLmV4ZWMoaVNlYXJjaC4kZWRpdG9yLCBvcHRpb25zKTsKICAgIH0KfSwgewogICAgbmFtZTogInlhbmtOZXh0V29yZCIsCiAgICBiaW5kS2V5OiAiQ3RybC13IiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGlTZWFyY2gpIHsKICAgICAgICB2YXIgZWQgPSBpU2VhcmNoLiRlZGl0b3IsCiAgICAgICAgICAgIHJhbmdlID0gZWQuc2VsZWN0aW9uLmdldFJhbmdlT2ZNb3ZlbWVudHMoZnVuY3Rpb24oc2VsKSB7IHNlbC5tb3ZlQ3Vyc29yV29yZFJpZ2h0KCk7IH0pLAogICAgICAgICAgICBzdHJpbmcgPSBlZC5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaVNlYXJjaC5hZGRTdHJpbmcoc3RyaW5nKTsKICAgIH0KfSwgewogICAgbmFtZTogInlhbmtOZXh0Q2hhciIsCiAgICBiaW5kS2V5OiAiQ3RybC1BbHQteSIsCiAgICBleGVjOiBmdW5jdGlvbihpU2VhcmNoKSB7CiAgICAgICAgdmFyIGVkID0gaVNlYXJjaC4kZWRpdG9yLAogICAgICAgICAgICByYW5nZSA9IGVkLnNlbGVjdGlvbi5nZXRSYW5nZU9mTW92ZW1lbnRzKGZ1bmN0aW9uKHNlbCkgeyBzZWwubW92ZUN1cnNvclJpZ2h0KCk7IH0pLAogICAgICAgICAgICBzdHJpbmcgPSBlZC5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaVNlYXJjaC5hZGRTdHJpbmcoc3RyaW5nKTsKICAgIH0KfSwgewogICAgbmFtZTogJ3JlY2VudGVyVG9wQm90dG9tJywKICAgIGJpbmRLZXk6ICdDdHJsLWwnLAogICAgZXhlYzogZnVuY3Rpb24oaVNlYXJjaCkgeyBpU2VhcmNoLiRlZGl0b3IuZXhlY0NvbW1hbmQoJ3JlY2VudGVyVG9wQm90dG9tJyk7IH0KfSwgewogICAgbmFtZTogJ3NlbGVjdEFsbE1hdGNoZXMnLAogICAgYmluZEtleTogJ0N0cmwtc3BhY2UnLAogICAgZXhlYzogZnVuY3Rpb24oaVNlYXJjaCkgewogICAgICAgIHZhciBlZCA9IGlTZWFyY2guJGVkaXRvciwKICAgICAgICAgICAgaGwgPSBlZC5zZXNzaW9uLiRpc2VhcmNoSGlnaGxpZ2h0LAogICAgICAgICAgICByYW5nZXMgPSBobCAmJiBobC5jYWNoZSA/IGhsLmNhY2hlCiAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uKHJhbmdlcywgZWEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2VzLmNvbmNhdChlYSA/IGVhIDogW10pOyB9LCBbXSkgOiBbXTsKICAgICAgICBpU2VhcmNoLmRlYWN0aXZhdGUoZmFsc2UpOwogICAgICAgIHJhbmdlcy5mb3JFYWNoKGVkLnNlbGVjdGlvbi5hZGRSYW5nZS5iaW5kKGVkLnNlbGVjdGlvbikpOwogICAgfQp9LCB7CiAgICBuYW1lOiAnc2VhcmNoQXNSZWdFeHAnLAogICAgYmluZEtleTogJ0FsdC1yJywKICAgIGV4ZWM6IGZ1bmN0aW9uKGlTZWFyY2gpIHsKICAgICAgICBpU2VhcmNoLmNvbnZlcnROZWVkbGVUb1JlZ0V4cCgpOwogICAgfQp9XS5tYXAoZnVuY3Rpb24oY21kKSB7CiAgICBjbWQucmVhZE9ubHkgPSB0cnVlOwogICAgY21kLmlzSW5jcmVtZW50YWxTZWFyY2hDb21tYW5kID0gdHJ1ZTsKICAgIGNtZC5zY3JvbGxJbnRvVmlldyA9ICJhbmltYXRlLWN1cnNvciI7CiAgICByZXR1cm4gY21kOwp9KTsKCmZ1bmN0aW9uIEluY3JlbWVudGFsU2VhcmNoS2V5Ym9hcmRIYW5kbGVyKGlTZWFyY2gpIHsKICAgIHRoaXMuJGlTZWFyY2ggPSBpU2VhcmNoOwp9Cgpvb3AuaW5oZXJpdHMoSW5jcmVtZW50YWxTZWFyY2hLZXlib2FyZEhhbmRsZXIsIEhhc2hIYW5kbGVyKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmF0dGFjaCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBpU2VhcmNoID0gdGhpcy4kaVNlYXJjaDsKICAgICAgICBIYXNoSGFuZGxlci5jYWxsKHRoaXMsIGV4cG9ydHMuaVNlYXJjaENvbW1hbmRzLCBlZGl0b3IuY29tbWFuZHMucGxhdGZvcm0pOwogICAgICAgIHRoaXMuJGNvbW1hbmRFeGVjSGFuZGxlciA9IGVkaXRvci5jb21tYW5kcy5hZGRFdmVudExpc3RlbmVyKCdleGVjJywgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBpZiAoIWUuY29tbWFuZC5pc0luY3JlbWVudGFsU2VhcmNoQ29tbWFuZCkKICAgICAgICAgICAgICAgIHJldHVybiBpU2VhcmNoLmRlYWN0aXZhdGUoKTsKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB2YXIgc2Nyb2xsVG9wID0gZWRpdG9yLnNlc3Npb24uZ2V0U2Nyb2xsVG9wKCk7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlLmNvbW1hbmQuZXhlYyhpU2VhcmNoLCBlLmFyZ3MgfHwge30pOwogICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgMC41KTsKICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLmFuaW1hdGVTY3JvbGxpbmcoc2Nyb2xsVG9wKTsKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5kZXRhY2ggPSBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBpZiAoIXRoaXMuJGNvbW1hbmRFeGVjSGFuZGxlcikgcmV0dXJuOwogICAgICAgIGVkaXRvci5jb21tYW5kcy5yZW1vdmVFdmVudExpc3RlbmVyKCdleGVjJywgdGhpcy4kY29tbWFuZEV4ZWNIYW5kbGVyKTsKICAgICAgICBkZWxldGUgdGhpcy4kY29tbWFuZEV4ZWNIYW5kbGVyOwogICAgfTsKCiAgICB2YXIgaGFuZGxlS2V5Ym9hcmQkc3VwZXIgPSB0aGlzLmhhbmRsZUtleWJvYXJkOwogICAgdGhpcy5oYW5kbGVLZXlib2FyZCA9IGZ1bmN0aW9uKGRhdGEsIGhhc2hJZCwga2V5LCBrZXlDb2RlKSB7CiAgICAgICAgaWYgKCgoaGFzaElkID09PSAxLypjdHJsKi8gfHwgaGFzaElkID09PSA4Lypjb21tYW5kKi8pICYmIGtleSA9PT0gJ3YnKQogICAgICAgICB8fCAoaGFzaElkID09PSAxLypjdHJsKi8gJiYga2V5ID09PSAneScpKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgY21kID0gaGFuZGxlS2V5Ym9hcmQkc3VwZXIuY2FsbCh0aGlzLCBkYXRhLCBoYXNoSWQsIGtleSwga2V5Q29kZSk7CiAgICAgICAgaWYgKGNtZC5jb21tYW5kKSB7IHJldHVybiBjbWQ7IH0KICAgICAgICBpZiAoaGFzaElkID09IC0xKSB7CiAgICAgICAgICAgIHZhciBleHRlbmRDbWQgPSB0aGlzLmNvbW1hbmRzLmV4dGVuZFNlYXJjaFRlcm07CiAgICAgICAgICAgIGlmIChleHRlbmRDbWQpIHsgcmV0dXJuIHtjb21tYW5kOiBleHRlbmRDbWQsIGFyZ3M6IGtleX07IH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCn0pLmNhbGwoSW5jcmVtZW50YWxTZWFyY2hLZXlib2FyZEhhbmRsZXIucHJvdG90eXBlKTsKCgpleHBvcnRzLkluY3JlbWVudGFsU2VhcmNoS2V5Ym9hcmRIYW5kbGVyID0gSW5jcmVtZW50YWxTZWFyY2hLZXlib2FyZEhhbmRsZXI7Cgp9KTsKCmRlZmluZSgiYWNlL2luY3JlbWVudGFsX3NlYXJjaCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL3NlYXJjaCIsImFjZS9zZWFyY2hfaGlnaGxpZ2h0IiwiYWNlL2NvbW1hbmRzL2luY3JlbWVudGFsX3NlYXJjaF9jb21tYW5kcyIsImFjZS9saWIvZG9tIiwiYWNlL2NvbW1hbmRzL2NvbW1hbmRfbWFuYWdlciIsImFjZS9lZGl0b3IiLCJhY2UvY29uZmlnIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4vcmFuZ2UiKS5SYW5nZTsKdmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4vc2VhcmNoIikuU2VhcmNoOwp2YXIgU2VhcmNoSGlnaGxpZ2h0ID0gcmVxdWlyZSgiLi9zZWFyY2hfaGlnaGxpZ2h0IikuU2VhcmNoSGlnaGxpZ2h0Owp2YXIgaVNlYXJjaENvbW1hbmRNb2R1bGUgPSByZXF1aXJlKCIuL2NvbW1hbmRzL2luY3JlbWVudGFsX3NlYXJjaF9jb21tYW5kcyIpOwp2YXIgSVNlYXJjaEtiZCA9IGlTZWFyY2hDb21tYW5kTW9kdWxlLkluY3JlbWVudGFsU2VhcmNoS2V5Ym9hcmRIYW5kbGVyOwpmdW5jdGlvbiBJbmNyZW1lbnRhbFNlYXJjaCgpIHsKICAgIHRoaXMuJG9wdGlvbnMgPSB7d3JhcDogZmFsc2UsIHNraXBDdXJyZW50OiBmYWxzZX07CiAgICB0aGlzLiRrZXlib2FyZEhhbmRsZXIgPSBuZXcgSVNlYXJjaEtiZCh0aGlzKTsKfQoKb29wLmluaGVyaXRzKEluY3JlbWVudGFsU2VhcmNoLCBTZWFyY2gpOwoKZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7CiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgUmVnRXhwOwp9CgpmdW5jdGlvbiByZWdFeHBUb09iamVjdChyZSkgewogICAgdmFyIHN0cmluZyA9IFN0cmluZyhyZSksCiAgICAgICAgc3RhcnQgPSBzdHJpbmcuaW5kZXhPZignLycpLAogICAgICAgIGZsYWdTdGFydCA9IHN0cmluZy5sYXN0SW5kZXhPZignLycpOwogICAgcmV0dXJuIHsKICAgICAgICBleHByZXNzaW9uOiBzdHJpbmcuc2xpY2Uoc3RhcnQrMSwgZmxhZ1N0YXJ0KSwKICAgICAgICBmbGFnczogc3RyaW5nLnNsaWNlKGZsYWdTdGFydCsxKQogICAgfTsKfQoKZnVuY3Rpb24gc3RyaW5nVG9SZWdFeHAoc3RyaW5nLCBmbGFncykgewogICAgdHJ5IHsKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzdHJpbmcsIGZsYWdzKTsKICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuIHN0cmluZzsgfQp9CgpmdW5jdGlvbiBvYmplY3RUb1JlZ0V4cChvYmopIHsKICAgIHJldHVybiBzdHJpbmdUb1JlZ0V4cChvYmouZXhwcmVzc2lvbiwgb2JqLmZsYWdzKTsKfQoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuYWN0aXZhdGUgPSBmdW5jdGlvbihlZCwgYmFja3dhcmRzKSB7CiAgICAgICAgdGhpcy4kZWRpdG9yID0gZWQ7CiAgICAgICAgdGhpcy4kc3RhcnRQb3MgPSB0aGlzLiRjdXJyZW50UG9zID0gZWQuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICB0aGlzLiRvcHRpb25zLm5lZWRsZSA9ICcnOwogICAgICAgIHRoaXMuJG9wdGlvbnMuYmFja3dhcmRzID0gYmFja3dhcmRzOwogICAgICAgIGVkLmtleUJpbmRpbmcuYWRkS2V5Ym9hcmRIYW5kbGVyKHRoaXMuJGtleWJvYXJkSGFuZGxlcik7CiAgICAgICAgdGhpcy4kb3JpZ2luYWxFZGl0b3JPblBhc3RlID0gZWQub25QYXN0ZTsgZWQub25QYXN0ZSA9IHRoaXMub25QYXN0ZS5iaW5kKHRoaXMpOwogICAgICAgIHRoaXMuJG1vdXNlZG93bkhhbmRsZXIgPSBlZC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcykpOwogICAgICAgIHRoaXMuc2VsZWN0aW9uRml4KGVkKTsKICAgICAgICB0aGlzLnN0YXR1c01lc3NhZ2UodHJ1ZSk7CiAgICB9OwoKICAgIHRoaXMuZGVhY3RpdmF0ZSA9IGZ1bmN0aW9uKHJlc2V0KSB7CiAgICAgICAgdGhpcy5jYW5jZWxTZWFyY2gocmVzZXQpOwogICAgICAgIHZhciBlZCA9IHRoaXMuJGVkaXRvcjsKICAgICAgICBlZC5rZXlCaW5kaW5nLnJlbW92ZUtleWJvYXJkSGFuZGxlcih0aGlzLiRrZXlib2FyZEhhbmRsZXIpOwogICAgICAgIGlmICh0aGlzLiRtb3VzZWRvd25IYW5kbGVyKSB7CiAgICAgICAgICAgIGVkLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuJG1vdXNlZG93bkhhbmRsZXIpOwogICAgICAgICAgICBkZWxldGUgdGhpcy4kbW91c2Vkb3duSGFuZGxlcjsKICAgICAgICB9CiAgICAgICAgZWQub25QYXN0ZSA9IHRoaXMuJG9yaWdpbmFsRWRpdG9yT25QYXN0ZTsKICAgICAgICB0aGlzLm1lc3NhZ2UoJycpOwogICAgfTsKCiAgICB0aGlzLnNlbGVjdGlvbkZpeCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSAmJiAhZWRpdG9yLnNlc3Npb24uJGVtYWNzTWFyaykgewogICAgICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24ocmVnZXhwKSB7CiAgICAgICAgdmFyIHNlc3MgPSB0aGlzLiRlZGl0b3Iuc2Vzc2lvbiwKICAgICAgICAgICAgaGwgPSBzZXNzLiRpc2VhcmNoSGlnaGxpZ2h0ID0gc2Vzcy4kaXNlYXJjaEhpZ2hsaWdodCB8fCBzZXNzLmFkZER5bmFtaWNNYXJrZXIoCiAgICAgICAgICAgICAgICBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2VfaXNlYXJjaC1yZXN1bHQiLCAidGV4dCIpKTsKICAgICAgICBobC5zZXRSZWdleHAocmVnZXhwKTsKICAgICAgICBzZXNzLl9lbWl0KCJjaGFuZ2VCYWNrTWFya2VyIik7IC8vIGZvcmNlIGhpZ2hsaWdodCBsYXllciByZWRyYXcKICAgIH07CgogICAgdGhpcy5jYW5jZWxTZWFyY2ggPSBmdW5jdGlvbihyZXNldCkgewogICAgICAgIHZhciBlID0gdGhpcy4kZWRpdG9yOwogICAgICAgIHRoaXMuJHByZXZOZWVkbGUgPSB0aGlzLiRvcHRpb25zLm5lZWRsZTsKICAgICAgICB0aGlzLiRvcHRpb25zLm5lZWRsZSA9ICcnOwogICAgICAgIGlmIChyZXNldCkgewogICAgICAgICAgICBlLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKHRoaXMuJHN0YXJ0UG9zKTsKICAgICAgICAgICAgdGhpcy4kY3VycmVudFBvcyA9IHRoaXMuJHN0YXJ0UG9zOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGUucHVzaEVtYWNzTWFyayAmJiBlLnB1c2hFbWFjc01hcmsodGhpcy4kc3RhcnRQb3MsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oaWdobGlnaHQobnVsbCk7CiAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGhpcy4kY3VycmVudFBvcywgdGhpcy4kY3VycmVudFBvcyk7CiAgICB9OwoKICAgIHRoaXMuaGlnaGxpZ2h0QW5kRmluZFdpdGhOZWVkbGUgPSBmdW5jdGlvbihtb3ZlVG9OZXh0LCBuZWVkbGVVcGRhdGVGdW5jKSB7CiAgICAgICAgaWYgKCF0aGlzLiRlZGl0b3IpIHJldHVybiBudWxsOwogICAgICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9uczsKICAgICAgICBpZiAobmVlZGxlVXBkYXRlRnVuYykgewogICAgICAgICAgICBvcHRpb25zLm5lZWRsZSA9IG5lZWRsZVVwZGF0ZUZ1bmMuY2FsbCh0aGlzLCBvcHRpb25zLm5lZWRsZSB8fCAnJykgfHwgJyc7CiAgICAgICAgfQogICAgICAgIGlmIChvcHRpb25zLm5lZWRsZS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlKHRydWUpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5jYW5jZWxTZWFyY2godHJ1ZSk7CiAgICAgICAgfQogICAgICAgIG9wdGlvbnMuc3RhcnQgPSB0aGlzLiRjdXJyZW50UG9zOwogICAgICAgIHZhciBzZXNzaW9uID0gdGhpcy4kZWRpdG9yLnNlc3Npb24sCiAgICAgICAgICAgIGZvdW5kID0gdGhpcy5maW5kKHNlc3Npb24pLAogICAgICAgICAgICBzaG91bGRTZWxlY3QgPSB0aGlzLiRlZGl0b3IuZW1hY3NNYXJrID8KICAgICAgICAgICAgICAgICEhdGhpcy4kZWRpdG9yLmVtYWNzTWFyaygpIDogIXRoaXMuJGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpOwogICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICBpZiAob3B0aW9ucy5iYWNrd2FyZHMpIGZvdW5kID0gUmFuZ2UuZnJvbVBvaW50cyhmb3VuZC5lbmQsIGZvdW5kLnN0YXJ0KTsKICAgICAgICAgICAgdGhpcy4kZWRpdG9yLnNlbGVjdGlvbi5zZXRSYW5nZShSYW5nZS5mcm9tUG9pbnRzKHNob3VsZFNlbGVjdCA/IHRoaXMuJHN0YXJ0UG9zIDogZm91bmQuZW5kLCBmb3VuZC5lbmQpKTsKICAgICAgICAgICAgaWYgKG1vdmVUb05leHQpIHRoaXMuJGN1cnJlbnRQb3MgPSBmb3VuZC5lbmQ7CiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KG9wdGlvbnMucmUpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlKGZvdW5kKTsKCiAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgfTsKCiAgICB0aGlzLmFkZFN0cmluZyA9IGZ1bmN0aW9uKHMpIHsKICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRBbmRGaW5kV2l0aE5lZWRsZShmYWxzZSwgZnVuY3Rpb24obmVlZGxlKSB7CiAgICAgICAgICAgIGlmICghaXNSZWdFeHAobmVlZGxlKSkKICAgICAgICAgICAgICByZXR1cm4gbmVlZGxlICsgczsKICAgICAgICAgICAgdmFyIHJlT2JqID0gcmVnRXhwVG9PYmplY3QobmVlZGxlKTsKICAgICAgICAgICAgcmVPYmouZXhwcmVzc2lvbiArPSBzOwogICAgICAgICAgICByZXR1cm4gb2JqZWN0VG9SZWdFeHAocmVPYmopOwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLnJlbW92ZUNoYXIgPSBmdW5jdGlvbihjKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0QW5kRmluZFdpdGhOZWVkbGUoZmFsc2UsIGZ1bmN0aW9uKG5lZWRsZSkgewogICAgICAgICAgICBpZiAoIWlzUmVnRXhwKG5lZWRsZSkpCiAgICAgICAgICAgICAgcmV0dXJuIG5lZWRsZS5zdWJzdHJpbmcoMCwgbmVlZGxlLmxlbmd0aC0xKTsKICAgICAgICAgICAgdmFyIHJlT2JqID0gcmVnRXhwVG9PYmplY3QobmVlZGxlKTsKICAgICAgICAgICAgcmVPYmouZXhwcmVzc2lvbiA9IHJlT2JqLmV4cHJlc3Npb24uc3Vic3RyaW5nKDAsIHJlT2JqLmV4cHJlc3Npb24ubGVuZ3RoLTEpOwogICAgICAgICAgICByZXR1cm4gb2JqZWN0VG9SZWdFeHAocmVPYmopOwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLm5leHQgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgdGhpcy4kb3B0aW9ucy5iYWNrd2FyZHMgPSAhIW9wdGlvbnMuYmFja3dhcmRzOwogICAgICAgIHRoaXMuJGN1cnJlbnRQb3MgPSB0aGlzLiRlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRBbmRGaW5kV2l0aE5lZWRsZSh0cnVlLCBmdW5jdGlvbihuZWVkbGUpIHsKICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMudXNlQ3VycmVudE9yUHJldlNlYXJjaCAmJiBuZWVkbGUubGVuZ3RoID09PSAwID8KICAgICAgICAgICAgICAgIHRoaXMuJHByZXZOZWVkbGUgfHwgJycgOiBuZWVkbGU7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMub25Nb3VzZURvd24gPSBmdW5jdGlvbihldnQpIHsKICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5vblBhc3RlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHRoaXMuYWRkU3RyaW5nKHRleHQpOwogICAgfTsKCiAgICB0aGlzLmNvbnZlcnROZWVkbGVUb1JlZ0V4cCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEFuZEZpbmRXaXRoTmVlZGxlKGZhbHNlLCBmdW5jdGlvbihuZWVkbGUpIHsKICAgICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKG5lZWRsZSkgPyBuZWVkbGUgOiBzdHJpbmdUb1JlZ0V4cChuZWVkbGUsICdpZycpOwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmNvbnZlcnROZWVkbGVUb1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEFuZEZpbmRXaXRoTmVlZGxlKGZhbHNlLCBmdW5jdGlvbihuZWVkbGUpIHsKICAgICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKG5lZWRsZSkgPyByZWdFeHBUb09iamVjdChuZWVkbGUpLmV4cHJlc3Npb24gOiBuZWVkbGU7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuc3RhdHVzTWVzc2FnZSA9IGZ1bmN0aW9uKGZvdW5kKSB7CiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zLCBtc2cgPSAnJzsKICAgICAgICBtc2cgKz0gb3B0aW9ucy5iYWNrd2FyZHMgPyAncmV2ZXJzZS0nIDogJyc7CiAgICAgICAgbXNnICs9ICdpc2VhcmNoOiAnICsgb3B0aW9ucy5uZWVkbGU7CiAgICAgICAgbXNnICs9IGZvdW5kID8gJycgOiAnIChub3QgZm91bmQpJzsKICAgICAgICB0aGlzLm1lc3NhZ2UobXNnKTsKICAgIH07CgogICAgdGhpcy5tZXNzYWdlID0gZnVuY3Rpb24obXNnKSB7CiAgICAgICAgaWYgKHRoaXMuJGVkaXRvci5zaG93Q29tbWFuZExpbmUpIHsKICAgICAgICAgICAgdGhpcy4kZWRpdG9yLnNob3dDb21tYW5kTGluZShtc2cpOwogICAgICAgICAgICB0aGlzLiRlZGl0b3IuZm9jdXMoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEluY3JlbWVudGFsU2VhcmNoLnByb3RvdHlwZSk7CgoKZXhwb3J0cy5JbmNyZW1lbnRhbFNlYXJjaCA9IEluY3JlbWVudGFsU2VhcmNoOwoKdmFyIGRvbSA9IHJlcXVpcmUoJy4vbGliL2RvbScpOwpkb20uaW1wb3J0Q3NzU3RyaW5nICYmIGRvbS5pbXBvcnRDc3NTdHJpbmcoIlwKLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9pc2VhcmNoLXJlc3VsdCB7XAogIHBvc2l0aW9uOiBhYnNvbHV0ZTtcCiAgei1pbmRleDogNjtcCiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcCn1cCmRpdi5hY2VfaXNlYXJjaC1yZXN1bHQge1wKICBib3JkZXItcmFkaXVzOiA0cHg7XAogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyMDAsIDAsIDAuNSk7XAogIGJveC1zaGFkb3c6IDAgMCA0cHggcmdiKDI1NSwgMjAwLCAwKTtcCn1cCi5hY2VfZGFyayBkaXYuYWNlX2lzZWFyY2gtcmVzdWx0IHtcCiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCwgMTEwLCAxNjApO1wKICBib3gtc2hhZG93OiAwIDAgNHB4IHJnYig4MCwgOTAsIDE0MCk7XAp9IiwgImluY3JlbWVudGFsLXNlYXJjaC1oaWdobGlnaHRpbmciKTsKdmFyIGNvbW1hbmRzID0gcmVxdWlyZSgiLi9jb21tYW5kcy9jb21tYW5kX21hbmFnZXIiKTsKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5zZXR1cEluY3JlbWVudGFsU2VhcmNoID0gZnVuY3Rpb24oZWRpdG9yLCB2YWwpIHsKICAgICAgICBpZiAodGhpcy51c2VzSW5jcmVtZW50YWxTZWFyY2ggPT0gdmFsKSByZXR1cm47CiAgICAgICAgdGhpcy51c2VzSW5jcmVtZW50YWxTZWFyY2ggPSB2YWw7CiAgICAgICAgdmFyIGlTZWFyY2hDb21tYW5kcyA9IGlTZWFyY2hDb21tYW5kTW9kdWxlLmlTZWFyY2hTdGFydENvbW1hbmRzOwogICAgICAgIHZhciBtZXRob2QgPSB2YWwgPyAnYWRkQ29tbWFuZHMnIDogJ3JlbW92ZUNvbW1hbmRzJzsKICAgICAgICB0aGlzW21ldGhvZF0oaVNlYXJjaENvbW1hbmRzKTsKICAgIH07Cn0pLmNhbGwoY29tbWFuZHMuQ29tbWFuZE1hbmFnZXIucHJvdG90eXBlKTsKdmFyIEVkaXRvciA9IHJlcXVpcmUoIi4vZWRpdG9yIikuRWRpdG9yOwpyZXF1aXJlKCIuL2NvbmZpZyIpLmRlZmluZU9wdGlvbnMoRWRpdG9yLnByb3RvdHlwZSwgImVkaXRvciIsIHsKICAgIHVzZUluY3JlbWVudGFsU2VhcmNoOiB7CiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWwpIHsKICAgICAgICAgICAgdGhpcy5rZXlCaW5kaW5nLiRoYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyLnNldHVwSW5jcmVtZW50YWxTZWFyY2gpIHsKICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNldHVwSW5jcmVtZW50YWxTZWFyY2godGhpcywgdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2luY3JlbWVudGFsU2VhcmNoU2V0dGluZ0NoYW5nZWQnLCB7aXNFbmFibGVkOiB2YWx9KTsKICAgICAgICB9CiAgICB9Cn0pOwoKfSk7CgpkZWZpbmUoImFjZS9rZXlib2FyZC9lbWFjcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIiwiYWNlL2luY3JlbWVudGFsX3NlYXJjaCIsImFjZS9jb21tYW5kcy9pbmNyZW1lbnRhbF9zZWFyY2hfY29tbWFuZHMiLCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyIiwiYWNlL2xpYi9rZXlzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpyZXF1aXJlKCIuLi9pbmNyZW1lbnRhbF9zZWFyY2giKTsKdmFyIGlTZWFyY2hDb21tYW5kTW9kdWxlID0gcmVxdWlyZSgiLi4vY29tbWFuZHMvaW5jcmVtZW50YWxfc2VhcmNoX2NvbW1hbmRzIik7CgoKdmFyIEhhc2hIYW5kbGVyID0gcmVxdWlyZSgiLi9oYXNoX2hhbmRsZXIiKS5IYXNoSGFuZGxlcjsKZXhwb3J0cy5oYW5kbGVyID0gbmV3IEhhc2hIYW5kbGVyKCk7CgpleHBvcnRzLmhhbmRsZXIuaXNFbWFjcyA9IHRydWU7CmV4cG9ydHMuaGFuZGxlci4kaWQgPSAiYWNlL2tleWJvYXJkL2VtYWNzIjsKCnZhciBpbml0aWFsaXplZCA9IGZhbHNlOwp2YXIgJGZvcm1lckxvbmdXb3JkczsKdmFyICRmb3JtZXJMaW5lU3RhcnQ7CgpleHBvcnRzLmhhbmRsZXIuYXR0YWNoID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgIGRvbS5pbXBvcnRDc3NTdHJpbmcoJ1wKICAgICAgICAgICAgLmVtYWNzLW1vZGUgLmFjZV9jdXJzb3J7XAogICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggcmdiYSg1MCwyNTAsNTAsMC44KSBzb2xpZCFpbXBvcnRhbnQ7XAogICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCFpbXBvcnRhbnQ7XAogICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDI1MCwwLDAuOSk7XAogICAgICAgICAgICAgICAgb3BhY2l0eTogMC41O1wKICAgICAgICAgICAgfVwKICAgICAgICAgICAgLmVtYWNzLW1vZGUgLmFjZV9oaWRkZW4tY3Vyc29ycyAuYWNlX2N1cnNvcntcCiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1wKICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1wKICAgICAgICAgICAgfVwKICAgICAgICAgICAgLmVtYWNzLW1vZGUgLmFjZV9vdmVyd3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XAogICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcCiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcCiAgICAgICAgICAgICAgICBib3JkZXItd2lkdGg6IDAgMCAycHggMnB4ICFpbXBvcnRhbnQ7XAogICAgICAgICAgICB9XAogICAgICAgICAgICAuZW1hY3MtbW9kZSAuYWNlX3RleHQtbGF5ZXIge1wKICAgICAgICAgICAgICAgIHotaW5kZXg6IDRcCiAgICAgICAgICAgIH1cCiAgICAgICAgICAgIC5lbWFjcy1tb2RlIC5hY2VfY3Vyc29yLWxheWVyIHtcCiAgICAgICAgICAgICAgICB6LWluZGV4OiAyXAogICAgICAgICAgICB9JywgJ2VtYWNzTW9kZScKICAgICAgICApOwogICAgfQogICAgJGZvcm1lckxvbmdXb3JkcyA9IGVkaXRvci5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHM7CiAgICBlZGl0b3Iuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzID0gdHJ1ZTsKICAgICRmb3JtZXJMaW5lU3RhcnQgPSBlZGl0b3Iuc2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydDsKICAgIGVkaXRvci5zZXNzaW9uLiR1c2VFbWFjc1N0eWxlTGluZVN0YXJ0ID0gdHJ1ZTsKCiAgICBlZGl0b3Iuc2Vzc2lvbi4kZW1hY3NNYXJrID0gbnVsbDsgLy8gdGhlIGFjdGl2ZSBtYXJrCiAgICBlZGl0b3Iuc2Vzc2lvbi4kZW1hY3NNYXJrUmluZyA9IGVkaXRvci5zZXNzaW9uLiRlbWFjc01hcmtSaW5nIHx8IFtdOwoKICAgIGVkaXRvci5lbWFjc01hcmsgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLiRlbWFjc01hcms7CiAgICB9OwoKICAgIGVkaXRvci5zZXRFbWFjc01hcmsgPSBmdW5jdGlvbihwKSB7CiAgICAgICAgdGhpcy5zZXNzaW9uLiRlbWFjc01hcmsgPSBwOwogICAgfTsKCiAgICBlZGl0b3IucHVzaEVtYWNzTWFyayA9IGZ1bmN0aW9uKHAsIGFjdGl2YXRlKSB7CiAgICAgICAgdmFyIHByZXZNYXJrID0gdGhpcy5zZXNzaW9uLiRlbWFjc01hcms7CiAgICAgICAgaWYgKHByZXZNYXJrKQogICAgICAgICAgICB0aGlzLnNlc3Npb24uJGVtYWNzTWFya1JpbmcucHVzaChwcmV2TWFyayk7CiAgICAgICAgaWYgKCFwIHx8IGFjdGl2YXRlKSB0aGlzLnNldEVtYWNzTWFyayhwKTsKICAgICAgICBlbHNlIHRoaXMuc2Vzc2lvbi4kZW1hY3NNYXJrUmluZy5wdXNoKHApOwogICAgfTsKCiAgICBlZGl0b3IucG9wRW1hY3NNYXJrID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1hcmsgPSB0aGlzLmVtYWNzTWFyaygpOwogICAgICAgIGlmIChtYXJrKSB7IHRoaXMuc2V0RW1hY3NNYXJrKG51bGwpOyByZXR1cm4gbWFyazsgfQogICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uJGVtYWNzTWFya1JpbmcucG9wKCk7CiAgICB9OwoKICAgIGVkaXRvci5nZXRMYXN0RW1hY3NNYXJrID0gZnVuY3Rpb24ocCkgewogICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uJGVtYWNzTWFyayB8fCB0aGlzLnNlc3Npb24uJGVtYWNzTWFya1Jpbmcuc2xpY2UoLTEpWzBdOwogICAgfTsKCiAgICBlZGl0b3IuZW1hY3NNYXJrRm9yU2VsZWN0aW9uID0gZnVuY3Rpb24ocmVwbGFjZW1lbnQpIHsKICAgICAgICB2YXIgc2VsID0gdGhpcy5zZWxlY3Rpb24sCiAgICAgICAgICAgIG11bHRpUmFuZ2VMZW5ndGggPSB0aGlzLm11bHRpU2VsZWN0ID8KICAgICAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3QuZ2V0QWxsUmFuZ2VzKCkubGVuZ3RoIDogMSwKICAgICAgICAgICAgc2VsSW5kZXggPSBzZWwuaW5kZXggfHwgMCwKICAgICAgICAgICAgbWFya1JpbmcgPSB0aGlzLnNlc3Npb24uJGVtYWNzTWFya1JpbmcsCiAgICAgICAgICAgIG1hcmtJbmRleCA9IG1hcmtSaW5nLmxlbmd0aCAtIChtdWx0aVJhbmdlTGVuZ3RoIC0gc2VsSW5kZXgpLAogICAgICAgICAgICBsYXN0TWFyayA9IG1hcmtSaW5nW21hcmtJbmRleF0gfHwgc2VsLmFuY2hvcjsKICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHsKICAgICAgICAgICAgbWFya1Jpbmcuc3BsaWNlKG1hcmtJbmRleCwgMSwKICAgICAgICAgICAgICAgICJyb3ciIGluIHJlcGxhY2VtZW50ICYmICJjb2x1bW4iIGluIHJlcGxhY2VtZW50ID8KICAgICAgICAgICAgICAgICAgICByZXBsYWNlbWVudCA6IHVuZGVmaW5lZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsYXN0TWFyazsKICAgIH07CgogICAgZWRpdG9yLm9uKCJjbGljayIsICRyZXNldE1hcmtNb2RlKTsKICAgIGVkaXRvci5vbigiY2hhbmdlU2Vzc2lvbiIsICRrYlNlc3Npb25DaGFuZ2UpOwogICAgZWRpdG9yLnJlbmRlcmVyLiRibG9ja0N1cnNvciA9IHRydWU7CiAgICBlZGl0b3Iuc2V0U3R5bGUoImVtYWNzLW1vZGUiKTsKICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhjb21tYW5kcyk7CiAgICBleHBvcnRzLmhhbmRsZXIucGxhdGZvcm0gPSBlZGl0b3IuY29tbWFuZHMucGxhdGZvcm07CiAgICBlZGl0b3IuJGVtYWNzTW9kZUhhbmRsZXIgPSB0aGlzOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCB0aGlzLm9uQ29weSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLm9uUGFzdGUpOwp9OwoKZXhwb3J0cy5oYW5kbGVyLmRldGFjaCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgZWRpdG9yLnJlbmRlcmVyLiRibG9ja0N1cnNvciA9IGZhbHNlOwogICAgZWRpdG9yLnNlc3Npb24uJHNlbGVjdExvbmdXb3JkcyA9ICRmb3JtZXJMb25nV29yZHM7CiAgICBlZGl0b3Iuc2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydCA9ICRmb3JtZXJMaW5lU3RhcnQ7CiAgICBlZGl0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAkcmVzZXRNYXJrTW9kZSk7CiAgICBlZGl0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlU2Vzc2lvbiIsICRrYlNlc3Npb25DaGFuZ2UpOwogICAgZWRpdG9yLnVuc2V0U3R5bGUoImVtYWNzLW1vZGUiKTsKICAgIGVkaXRvci5jb21tYW5kcy5yZW1vdmVDb21tYW5kcyhjb21tYW5kcyk7CiAgICBlZGl0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29weScsIHRoaXMub25Db3B5KTsKICAgIGVkaXRvci5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXN0ZScsIHRoaXMub25QYXN0ZSk7CiAgICBlZGl0b3IuJGVtYWNzTW9kZUhhbmRsZXIgPSBudWxsOwp9OwoKdmFyICRrYlNlc3Npb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICBpZiAoZS5vbGRTZXNzaW9uKSB7CiAgICAgICAgZS5vbGRTZXNzaW9uLiRzZWxlY3RMb25nV29yZHMgPSAkZm9ybWVyTG9uZ1dvcmRzOwogICAgICAgIGUub2xkU2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydCA9ICRmb3JtZXJMaW5lU3RhcnQ7CiAgICB9CgogICAgJGZvcm1lckxvbmdXb3JkcyA9IGUuc2Vzc2lvbi4kc2VsZWN0TG9uZ1dvcmRzOwogICAgZS5zZXNzaW9uLiRzZWxlY3RMb25nV29yZHMgPSB0cnVlOwogICAgJGZvcm1lckxpbmVTdGFydCA9IGUuc2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydDsKICAgIGUuc2Vzc2lvbi4kdXNlRW1hY3NTdHlsZUxpbmVTdGFydCA9IHRydWU7CgogICAgaWYgKCFlLnNlc3Npb24uaGFzT3duUHJvcGVydHkoJyRlbWFjc01hcmsnKSkKICAgICAgICBlLnNlc3Npb24uJGVtYWNzTWFyayA9IG51bGw7CiAgICBpZiAoIWUuc2Vzc2lvbi5oYXNPd25Qcm9wZXJ0eSgnJGVtYWNzTWFya1JpbmcnKSkKICAgICAgICBlLnNlc3Npb24uJGVtYWNzTWFya1JpbmcgPSBbXTsKfTsKCnZhciAkcmVzZXRNYXJrTW9kZSA9IGZ1bmN0aW9uKGUpIHsKICAgIGUuZWRpdG9yLnNlc3Npb24uJGVtYWNzTWFyayA9IG51bGw7Cn07Cgp2YXIga2V5cyA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIikuS0VZX01PRFM7CnZhciBlTW9kcyA9IHtDOiAiY3RybCIsIFM6ICJzaGlmdCIsIE06ICJhbHQiLCBDTUQ6ICJjb21tYW5kIn07CnZhciBjb21iaW5hdGlvbnMgPSBbIkMtUy1NLUNNRCIsCiAgICAgICAgICAgICAgICAgICAgIlMtTS1DTUQiLCAiQy1NLUNNRCIsICJDLVMtQ01EIiwgIkMtUy1NIiwKICAgICAgICAgICAgICAgICAgICAiTS1DTUQiLCAiUy1DTUQiLCAiUy1NIiwgIkMtQ01EIiwgIkMtTSIsICJDLVMiLAogICAgICAgICAgICAgICAgICAgICJDTUQiLCAiTSIsICJTIiwgIkMiXTsKY29tYmluYXRpb25zLmZvckVhY2goZnVuY3Rpb24oYykgewogICAgdmFyIGhhc2hJZCA9IDA7CiAgICBjLnNwbGl0KCItIikuZm9yRWFjaChmdW5jdGlvbihjKSB7CiAgICAgICAgaGFzaElkID0gaGFzaElkIHwga2V5c1tlTW9kc1tjXV07CiAgICB9KTsKICAgIGVNb2RzW2hhc2hJZF0gPSBjLnRvTG93ZXJDYXNlKCkgKyAiLSI7Cn0pOwoKZXhwb3J0cy5oYW5kbGVyLm9uQ29weSA9IGZ1bmN0aW9uKGUsIGVkaXRvcikgewogICAgaWYgKGVkaXRvci4kaGFuZGxlc0VtYWNzT25Db3B5KSByZXR1cm47CiAgICBlZGl0b3IuJGhhbmRsZXNFbWFjc09uQ29weSA9IHRydWU7CiAgICBleHBvcnRzLmhhbmRsZXIuY29tbWFuZHMua2lsbFJpbmdTYXZlLmV4ZWMoZWRpdG9yKTsKICAgIGVkaXRvci4kaGFuZGxlc0VtYWNzT25Db3B5ID0gZmFsc2U7Cn07CgpleHBvcnRzLmhhbmRsZXIub25QYXN0ZSA9IGZ1bmN0aW9uKGUsIGVkaXRvcikgewogICAgZWRpdG9yLnB1c2hFbWFjc01hcmsoZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCkpOwp9OwoKZXhwb3J0cy5oYW5kbGVyLmJpbmRLZXkgPSBmdW5jdGlvbihrZXksIGNvbW1hbmQpIHsKICAgIGlmICh0eXBlb2Yga2V5ID09ICJvYmplY3QiKQogICAgICAgIGtleSA9IGtleVt0aGlzLnBsYXRmb3JtXTsKICAgIGlmICgha2V5KQogICAgICAgIHJldHVybjsKCiAgICB2YXIgY2tiID0gdGhpcy5jb21tYW5kS2V5QmluZGluZzsKICAgIGtleS5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oa2V5UGFydCkgewogICAgICAgIGtleVBhcnQgPSBrZXlQYXJ0LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgY2tiW2tleVBhcnRdID0gY29tbWFuZDsKICAgICAgICB2YXIga2V5UGFydHMgPSBrZXlQYXJ0LnNwbGl0KCIgIikuc2xpY2UoMCwtMSk7CiAgICAgICAga2V5UGFydHMucmVkdWNlKGZ1bmN0aW9uKGtleU1hcEtleXMsIGtleVBhcnQsIGkpIHsKICAgICAgICAgICAgdmFyIHByZWZpeCA9IGtleU1hcEtleXNbaS0xXSA/IGtleU1hcEtleXNbaS0xXSArICcgJyA6ICcnOwogICAgICAgICAgICByZXR1cm4ga2V5TWFwS2V5cy5jb25jYXQoW3ByZWZpeCArIGtleVBhcnRdKTsKICAgICAgICB9LCBbXSkuZm9yRWFjaChmdW5jdGlvbihrZXlQYXJ0KSB7CiAgICAgICAgICAgIGlmICghY2tiW2tleVBhcnRdKSBja2Jba2V5UGFydF0gPSAibnVsbCI7CiAgICAgICAgfSk7CiAgICB9LCB0aGlzKTsKfTsKCmV4cG9ydHMuaGFuZGxlci5nZXRTdGF0dXNUZXh0ID0gZnVuY3Rpb24oZWRpdG9yLCBkYXRhKSB7CiAgdmFyIHN0ciA9ICIiOwogIGlmIChkYXRhLmNvdW50KQogICAgc3RyICs9IGRhdGEuY291bnQ7CiAgaWYgKGRhdGEua2V5Q2hhaW4pCiAgICBzdHIgKz0gIiAiICsgZGF0YS5rZXlDaGFpbjsKICByZXR1cm4gc3RyOwp9OwoKZXhwb3J0cy5oYW5kbGVyLmhhbmRsZUtleWJvYXJkID0gZnVuY3Rpb24oZGF0YSwgaGFzaElkLCBrZXksIGtleUNvZGUpIHsKICAgIGlmIChrZXlDb2RlID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDsKCiAgICB2YXIgZWRpdG9yID0gZGF0YS5lZGl0b3I7CiAgICBlZGl0b3IuX3NpZ25hbCgiY2hhbmdlU3RhdHVzIik7CiAgICBpZiAoaGFzaElkID09IC0xKSB7CiAgICAgICAgZWRpdG9yLnB1c2hFbWFjc01hcmsoKTsKICAgICAgICBpZiAoZGF0YS5jb3VudCkgewogICAgICAgICAgICB2YXIgc3RyID0gbmV3IEFycmF5KGRhdGEuY291bnQgKyAxKS5qb2luKGtleSk7CiAgICAgICAgICAgIGRhdGEuY291bnQgPSBudWxsOwogICAgICAgICAgICByZXR1cm4ge2NvbW1hbmQ6ICJpbnNlcnRzdHJpbmciLCBhcmdzOiBzdHJ9OwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgbW9kaWZpZXIgPSBlTW9kc1toYXNoSWRdOwogICAgaWYgKG1vZGlmaWVyID09ICJjLSIgfHwgZGF0YS5jb3VudCkgewogICAgICAgIHZhciBjb3VudCA9IHBhcnNlSW50KGtleVtrZXkubGVuZ3RoIC0gMV0pOwogICAgICAgIGlmICh0eXBlb2YgY291bnQgPT09ICdudW1iZXInICYmICFpc05hTihjb3VudCkpIHsKICAgICAgICAgICAgZGF0YS5jb3VudCA9IE1hdGgubWF4KGRhdGEuY291bnQsIDApIHx8IDA7CiAgICAgICAgICAgIGRhdGEuY291bnQgPSAxMCAqIGRhdGEuY291bnQgKyBjb3VudDsKICAgICAgICAgICAgcmV0dXJuIHtjb21tYW5kOiAibnVsbCJ9OwogICAgICAgIH0KICAgIH0KICAgIGlmIChtb2RpZmllcikga2V5ID0gbW9kaWZpZXIgKyBrZXk7CiAgICBpZiAoZGF0YS5rZXlDaGFpbikga2V5ID0gZGF0YS5rZXlDaGFpbiArPSAiICIgKyBrZXk7CiAgICB2YXIgY29tbWFuZCA9IHRoaXMuY29tbWFuZEtleUJpbmRpbmdba2V5XTsKICAgIGRhdGEua2V5Q2hhaW4gPSBjb21tYW5kID09ICJudWxsIiA/IGtleSA6ICIiOwogICAgaWYgKCFjb21tYW5kKSByZXR1cm4gdW5kZWZpbmVkOwogICAgaWYgKGNvbW1hbmQgPT09ICJudWxsIikgcmV0dXJuIHtjb21tYW5kOiAibnVsbCJ9OwoKICAgIGlmIChjb21tYW5kID09PSAidW5pdmVyc2FsQXJndW1lbnQiKSB7CiAgICAgICAgZGF0YS5jb3VudCA9IC00OwogICAgICAgIHJldHVybiB7Y29tbWFuZDogIm51bGwifTsKICAgIH0KICAgIHZhciBhcmdzOwogICAgaWYgKHR5cGVvZiBjb21tYW5kICE9PSAic3RyaW5nIikgewogICAgICAgIGFyZ3MgPSBjb21tYW5kLmFyZ3M7CiAgICAgICAgaWYgKGNvbW1hbmQuY29tbWFuZCkgY29tbWFuZCA9IGNvbW1hbmQuY29tbWFuZDsKICAgICAgICBpZiAoY29tbWFuZCA9PT0gImdvb3JzZWxlY3QiKSB7CiAgICAgICAgICAgIGNvbW1hbmQgPSBlZGl0b3IuZW1hY3NNYXJrKCkgPyBhcmdzWzFdIDogYXJnc1swXTsKICAgICAgICAgICAgYXJncyA9IG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gInN0cmluZyIpIHsKICAgICAgICBpZiAoY29tbWFuZCA9PT0gImluc2VydHN0cmluZyIgfHwKICAgICAgICAgICAgY29tbWFuZCA9PT0gInNwbGl0bGluZSIgfHwKICAgICAgICAgICAgY29tbWFuZCA9PT0gInRvZ2dsZWNvbW1lbnQiKSB7CiAgICAgICAgICAgIGVkaXRvci5wdXNoRW1hY3NNYXJrKCk7CiAgICAgICAgfQogICAgICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmRdIHx8IGVkaXRvci5jb21tYW5kcy5jb21tYW5kc1tjb21tYW5kXTsKICAgICAgICBpZiAoIWNvbW1hbmQpIHJldHVybiB1bmRlZmluZWQ7CiAgICB9CgogICAgaWYgKCFjb21tYW5kLnJlYWRPbmx5ICYmICFjb21tYW5kLmlzWWFuaykKICAgICAgICBkYXRhLmxhc3RDb21tYW5kID0gbnVsbDsKCiAgICBpZiAoIWNvbW1hbmQucmVhZE9ubHkgJiYgZWRpdG9yLmVtYWNzTWFyaygpKQogICAgICAgIGVkaXRvci5zZXRFbWFjc01hcmsobnVsbCk7CiAgICAgICAgCiAgICBpZiAoZGF0YS5jb3VudCkgewogICAgICAgIHZhciBjb3VudCA9IGRhdGEuY291bnQ7CiAgICAgICAgZGF0YS5jb3VudCA9IDA7CiAgICAgICAgaWYgKCFjb21tYW5kIHx8ICFjb21tYW5kLmhhbmRsZXNDb3VudCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgYXJnczogYXJncywKICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHsKICAgICAgICAgICAgICAgICAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IsIGFyZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC5leGVjKGVkaXRvciwgYXJncyk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdEFjdGlvbjogY29tbWFuZC5tdWx0aVNlbGVjdEFjdGlvbgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghYXJncykgYXJncyA9IHt9OwogICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSBhcmdzLmNvdW50ID0gY291bnQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB7Y29tbWFuZDogY29tbWFuZCwgYXJnczogYXJnc307Cn07CgpleHBvcnRzLmVtYWNzS2V5cyA9IHsKICAgICJVcHxDLXAiICAgICAgOiB7Y29tbWFuZDogImdvb3JzZWxlY3QiLCBhcmdzOiBbImdvbGluZXVwIiwic2VsZWN0dXAiXX0sCiAgICAiRG93bnxDLW4iICAgIDoge2NvbW1hbmQ6ICJnb29yc2VsZWN0IiwgYXJnczogWyJnb2xpbmVkb3duIiwic2VsZWN0ZG93biJdfSwKICAgICJMZWZ0fEMtYiIgICAgOiB7Y29tbWFuZDogImdvb3JzZWxlY3QiLCBhcmdzOiBbImdvdG9sZWZ0Iiwic2VsZWN0bGVmdCJdfSwKICAgICJSaWdodHxDLWYiICAgOiB7Y29tbWFuZDogImdvb3JzZWxlY3QiLCBhcmdzOiBbImdvdG9yaWdodCIsInNlbGVjdHJpZ2h0Il19LAogICAgIkMtTGVmdHxNLWIiICA6IHtjb21tYW5kOiAiZ29vcnNlbGVjdCIsIGFyZ3M6IFsiZ290b3dvcmRsZWZ0Iiwic2VsZWN0d29yZGxlZnQiXX0sCiAgICAiQy1SaWdodHxNLWYiIDoge2NvbW1hbmQ6ICJnb29yc2VsZWN0IiwgYXJnczogWyJnb3Rvd29yZHJpZ2h0Iiwic2VsZWN0d29yZHJpZ2h0Il19LAogICAgIkhvbWV8Qy1hIiAgICA6IHtjb21tYW5kOiAiZ29vcnNlbGVjdCIsIGFyZ3M6IFsiZ290b2xpbmVzdGFydCIsInNlbGVjdHRvbGluZXN0YXJ0Il19LAogICAgIkVuZHxDLWUiICAgICA6IHtjb21tYW5kOiAiZ29vcnNlbGVjdCIsIGFyZ3M6IFsiZ290b2xpbmVlbmQiLCJzZWxlY3R0b2xpbmVlbmQiXX0sCiAgICAiQy1Ib21lfFMtTS0sIjoge2NvbW1hbmQ6ICJnb29yc2VsZWN0IiwgYXJnczogWyJnb3Rvc3RhcnQiLCJzZWxlY3R0b3N0YXJ0Il19LAogICAgIkMtRW5kfFMtTS0uIiA6IHtjb21tYW5kOiAiZ29vcnNlbGVjdCIsIGFyZ3M6IFsiZ290b2VuZCIsInNlbGVjdHRvZW5kIl19LAogICAgIlMtVXB8Uy1DLXAiICAgICAgOiAic2VsZWN0dXAiLAogICAgIlMtRG93bnxTLUMtbiIgICAgOiAic2VsZWN0ZG93biIsCiAgICAiUy1MZWZ0fFMtQy1iIiAgICA6ICJzZWxlY3RsZWZ0IiwKICAgICJTLVJpZ2h0fFMtQy1mIiAgIDogInNlbGVjdHJpZ2h0IiwKICAgICJTLUMtTGVmdHxTLU0tYiIgIDogInNlbGVjdHdvcmRsZWZ0IiwKICAgICJTLUMtUmlnaHR8Uy1NLWYiIDogInNlbGVjdHdvcmRyaWdodCIsCiAgICAiUy1Ib21lfFMtQy1hIiAgICA6ICJzZWxlY3R0b2xpbmVzdGFydCIsCiAgICAiUy1FbmR8Uy1DLWUiICAgICA6ICJzZWxlY3R0b2xpbmVlbmQiLAogICAgIlMtQy1Ib21lIiAgICAgICAgOiAic2VsZWN0dG9zdGFydCIsCiAgICAiUy1DLUVuZCIgICAgICAgICA6ICJzZWxlY3R0b2VuZCIsCgogICAgIkMtbCIgOiAicmVjZW50ZXJUb3BCb3R0b20iLAogICAgIk0tcyIgOiAiY2VudGVyc2VsZWN0aW9uIiwKICAgICJNLWciOiAiZ290b2xpbmUiLAogICAgIkMteCBDLXAiOiAic2VsZWN0YWxsIiwKICAgICJDLURvd24iOiB7Y29tbWFuZDogImdvb3JzZWxlY3QiLCBhcmdzOiBbImdvdG9wYWdlZG93biIsInNlbGVjdHBhZ2Vkb3duIl19LAogICAgIkMtVXAiOiB7Y29tbWFuZDogImdvb3JzZWxlY3QiLCBhcmdzOiBbImdvdG9wYWdldXAiLCJzZWxlY3RwYWdldXAiXX0sCiAgICAiUGFnZURvd258Qy12Ijoge2NvbW1hbmQ6ICJnb29yc2VsZWN0IiwgYXJnczogWyJnb3RvcGFnZWRvd24iLCJzZWxlY3RwYWdlZG93biJdfSwKICAgICJQYWdlVXB8TS12Ijoge2NvbW1hbmQ6ICJnb29yc2VsZWN0IiwgYXJnczogWyJnb3RvcGFnZXVwIiwic2VsZWN0cGFnZXVwIl19LAogICAgIlMtQy1Eb3duIjogInNlbGVjdHBhZ2Vkb3duIiwKICAgICJTLUMtVXAiOiAic2VsZWN0cGFnZXVwIiwKCiAgICAiQy1zIjogImlTZWFyY2giLAogICAgIkMtciI6ICJpU2VhcmNoQmFja3dhcmRzIiwKCiAgICAiTS1DLXMiOiAiZmluZG5leHQiLAogICAgIk0tQy1yIjogImZpbmRwcmV2aW91cyIsCiAgICAiUy1NLTUiOiAicmVwbGFjZSIsCiAgICAiQmFja3NwYWNlIjogImJhY2tzcGFjZSIsCiAgICAiRGVsZXRlfEMtZCI6ICJkZWwiLAogICAgIlJldHVybnxDLW0iOiB7Y29tbWFuZDogImluc2VydHN0cmluZyIsIGFyZ3M6ICJcbiJ9LCAvLyAibmV3bGluZSIKICAgICJDLW8iOiAic3BsaXRsaW5lIiwKCiAgICAiTS1kfEMtRGVsZXRlIjoge2NvbW1hbmQ6ICJraWxsV29yZCIsIGFyZ3M6ICJyaWdodCJ9LAogICAgIkMtQmFja3NwYWNlfE0tQmFja3NwYWNlfE0tRGVsZXRlIjoge2NvbW1hbmQ6ICJraWxsV29yZCIsIGFyZ3M6ICJsZWZ0In0sCiAgICAiQy1rIjogImtpbGxMaW5lIiwKCiAgICAiQy15fFMtRGVsZXRlIjogInlhbmsiLAogICAgIk0teSI6ICJ5YW5rUm90YXRlIiwKICAgICJDLWciOiAia2V5Ym9hcmRRdWl0IiwKCiAgICAiQy13fEMtUy1XIjogImtpbGxSZWdpb24iLAogICAgIk0tdyI6ICJraWxsUmluZ1NhdmUiLAogICAgIkMtU3BhY2UiOiAic2V0TWFyayIsCiAgICAiQy14IEMteCI6ICJleGNoYW5nZVBvaW50QW5kTWFyayIsCgogICAgIkMtdCI6ICJ0cmFuc3Bvc2VsZXR0ZXJzIiwKICAgICJNLXUiOiAidG91cHBlcmNhc2UiLCAgICAvLyBEb2Vzbid0IHdvcmsKICAgICJNLWwiOiAidG9sb3dlcmNhc2UiLAogICAgIk0tLyI6ICJhdXRvY29tcGxldGUiLCAgIC8vIERvZXNuJ3Qgd29yawogICAgIkMtdSI6ICJ1bml2ZXJzYWxBcmd1bWVudCIsCgogICAgIk0tOyI6ICJ0b2dnbGVjb21tZW50IiwKCiAgICAiQy0vfEMteCB1fFMtQy0tfEMteiI6ICJ1bmRvIiwKICAgICJTLUMtL3xTLUMteCB1fEMtLXxTLUMteiI6ICJyZWRvIiwgLy8gaW5maW5pdGUgdW5kbz8KICAgICJDLXggciI6ICAic2VsZWN0UmVjdGFuZ3VsYXJSZWdpb24iLAogICAgIk0teCI6IHtjb21tYW5kOiAiZm9jdXNDb21tYW5kTGluZSIsIGFyZ3M6ICJNLXggIn0KfTsKCgpleHBvcnRzLmhhbmRsZXIuYmluZEtleXMoZXhwb3J0cy5lbWFjc0tleXMpOwoKZXhwb3J0cy5oYW5kbGVyLmFkZENvbW1hbmRzKHsKICAgIHJlY2VudGVyVG9wQm90dG9tOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgcmVuZGVyZXIgPSBlZGl0b3IucmVuZGVyZXI7CiAgICAgICAgdmFyIHBvcyA9IHJlbmRlcmVyLiRjdXJzb3JMYXllci5nZXRQaXhlbFBvc2l0aW9uKCk7CiAgICAgICAgdmFyIGggPSByZW5kZXJlci4kc2l6ZS5zY3JvbGxlckhlaWdodCAtIHJlbmRlcmVyLmxpbmVIZWlnaHQ7CiAgICAgICAgdmFyIHNjcm9sbFRvcCA9IHJlbmRlcmVyLnNjcm9sbFRvcDsKICAgICAgICBpZiAoTWF0aC5hYnMocG9zLnRvcCAtIHNjcm9sbFRvcCkgPCAyKSB7CiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHBvcy50b3AgLSBoOwogICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMocG9zLnRvcCAtIHNjcm9sbFRvcCAtIGggKiAwLjUpIDwgMikgewogICAgICAgICAgICBzY3JvbGxUb3AgPSBwb3MudG9wOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNjcm9sbFRvcCA9IHBvcy50b3AgLSBoICogMC41OwogICAgICAgIH0KICAgICAgICBlZGl0b3Iuc2Vzc2lvbi5zZXRTY3JvbGxUb3Aoc2Nyb2xsVG9wKTsKICAgIH0sCiAgICBzZWxlY3RSZWN0YW5ndWxhclJlZ2lvbjogIGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGVkaXRvci5tdWx0aVNlbGVjdC50b2dnbGVCbG9ja1NlbGVjdGlvbigpOwogICAgfSwKICAgIHNldE1hcms6ICB7CiAgICAgICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yLCBhcmdzKSB7CgogICAgICAgICAgICBpZiAoYXJncyAmJiBhcmdzLmNvdW50KSB7CiAgICAgICAgICAgICAgICBpZiAoZWRpdG9yLmluTXVsdGlTZWxlY3RNb2RlKSBlZGl0b3IuZm9yRWFjaFNlbGVjdGlvbihtb3ZlVG9NYXJrKTsKICAgICAgICAgICAgICAgIGVsc2UgbW92ZVRvTWFyaygpOwogICAgICAgICAgICAgICAgbW92ZVRvTWFyaygpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgbWFyayA9IGVkaXRvci5lbWFjc01hcmsoKSwKICAgICAgICAgICAgICAgIHJhbmdlcyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0QWxsUmFuZ2VzKCksCiAgICAgICAgICAgICAgICByYW5nZVBvc2l0aW9ucyA9IHJhbmdlcy5tYXAoZnVuY3Rpb24ocikgeyByZXR1cm4ge3Jvdzogci5zdGFydC5yb3csIGNvbHVtbjogci5zdGFydC5jb2x1bW59OyB9KSwKICAgICAgICAgICAgICAgIHRyYW5zaWVudE1hcmtNb2RlQWN0aXZlID0gdHJ1ZSwKICAgICAgICAgICAgICAgIGhhc05vU2VsZWN0aW9uID0gcmFuZ2VzLmV2ZXJ5KGZ1bmN0aW9uKHJhbmdlKSB7IHJldHVybiByYW5nZS5pc0VtcHR5KCk7IH0pOwogICAgICAgICAgICBpZiAodHJhbnNpZW50TWFya01vZGVBY3RpdmUgJiYgKG1hcmsgfHwgIWhhc05vU2VsZWN0aW9uKSkgewogICAgICAgICAgICAgICAgaWYgKGVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSkgZWRpdG9yLmZvckVhY2hTZWxlY3Rpb24oe2V4ZWM6IGVkaXRvci5jbGVhclNlbGVjdGlvbi5iaW5kKGVkaXRvcil9KTsKICAgICAgICAgICAgICAgIGVsc2UgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAobWFyaykgZWRpdG9yLnB1c2hFbWFjc01hcmsobnVsbCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghbWFyaykgewogICAgICAgICAgICAgICAgcmFuZ2VQb3NpdGlvbnMuZm9yRWFjaChmdW5jdGlvbihwb3MpIHsgZWRpdG9yLnB1c2hFbWFjc01hcmsocG9zKTsgfSk7CiAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0RW1hY3NNYXJrKHJhbmdlUG9zaXRpb25zW3JhbmdlUG9zaXRpb25zLmxlbmd0aC0xXSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVUb01hcmsoKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFyayA9IGVkaXRvci5wb3BFbWFjc01hcmsoKTsKICAgICAgICAgICAgICAgIG1hcmsgJiYgZWRpdG9yLm1vdmVDdXJzb3JUb1Bvc2l0aW9uKG1hcmspOwogICAgICAgICAgICB9CgogICAgICAgIH0sCiAgICAgICAgcmVhZE9ubHk6IHRydWUsCiAgICAgICAgaGFuZGxlc0NvdW50OiB0cnVlCiAgICB9LAogICAgZXhjaGFuZ2VQb2ludEFuZE1hcms6IHsKICAgICAgICBleGVjOiBmdW5jdGlvbiBleGNoYW5nZVBvaW50QW5kTWFyayRleGVjKGVkaXRvciwgYXJncykgewogICAgICAgICAgICB2YXIgc2VsID0gZWRpdG9yLnNlbGVjdGlvbjsKICAgICAgICAgICAgaWYgKCFhcmdzLmNvdW50ICYmICFzZWwuaXNFbXB0eSgpKSB7IC8vIGp1c3QgaW52ZXJ0IHNlbGVjdGlvbgogICAgICAgICAgICAgICAgc2VsLnNldFNlbGVjdGlvblJhbmdlKHNlbC5nZXRSYW5nZSgpLCAhc2VsLmlzQmFja3dhcmRzKCkpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYXJncy5jb3VudCkgeyAvLyByZXBsYWNlIG1hcmsgYW5kIHBvaW50CiAgICAgICAgICAgICAgICB2YXIgcG9zID0ge3Jvdzogc2VsLmxlYWQucm93LCBjb2x1bW46IHNlbC5sZWFkLmNvbHVtbn07CiAgICAgICAgICAgICAgICBzZWwuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgIHNlbC5tb3ZlQ3Vyc29yVG9Qb3NpdGlvbihlZGl0b3IuZW1hY3NNYXJrRm9yU2VsZWN0aW9uKHBvcykpOwogICAgICAgICAgICB9IGVsc2UgeyAvLyBjcmVhdGUgc2VsZWN0aW9uIHRvIGxhc3QgbWFyawogICAgICAgICAgICAgICAgc2VsLnNlbGVjdFRvUG9zaXRpb24oZWRpdG9yLmVtYWNzTWFya0ZvclNlbGVjdGlvbigpKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVhZE9ubHk6IHRydWUsCiAgICAgICAgaGFuZGxlc0NvdW50OiB0cnVlLAogICAgICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKICAgIH0sCiAgICBraWxsV29yZDogewogICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvciwgZGlyKSB7CiAgICAgICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwogICAgICAgICAgICBpZiAoZGlyID09ICJsZWZ0IikKICAgICAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQoKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkUmlnaHQoKTsKCiAgICAgICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgICAgICB2YXIgdGV4dCA9IGVkaXRvci5zZXNzaW9uLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgICAgIGV4cG9ydHMua2lsbFJpbmcuYWRkKHRleHQpOwoKICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgICAgICAgICAgZWRpdG9yLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgfSwKICAgICAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giCiAgICB9LAogICAga2lsbExpbmU6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGVkaXRvci5wdXNoRW1hY3NNYXJrKG51bGwpOwogICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwogICAgICAgIHZhciByYW5nZSA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpOwogICAgICAgIHZhciBsaW5lID0gZWRpdG9yLnNlc3Npb24uZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICBsaW5lID0gbGluZS5zdWJzdHIocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAKICAgICAgICB2YXIgZm9sZExpbmUgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRGb2xkTGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgIGlmIChmb2xkTGluZSAmJiByYW5nZS5lbmQucm93ICE9IGZvbGRMaW5lLmVuZC5yb3cpIHsKICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyA9IGZvbGRMaW5lLmVuZC5yb3c7CiAgICAgICAgICAgIGxpbmUgPSAieCI7CiAgICAgICAgfQogICAgICAgIGlmICgvXlxzKiQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdysrOwogICAgICAgICAgICBsaW5lID0gZWRpdG9yLnNlc3Npb24uZ2V0TGluZShyYW5nZS5lbmQucm93KTsKICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IC9eXHMqJC8udGVzdChsaW5lKSA/IGxpbmUubGVuZ3RoIDogMDsKICAgICAgICB9CiAgICAgICAgdmFyIHRleHQgPSBlZGl0b3Iuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmIChlZGl0b3IucHJldk9wLmNvbW1hbmQgPT0gdGhpcykKICAgICAgICAgICAgZXhwb3J0cy5raWxsUmluZy5hcHBlbmQodGV4dCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICBleHBvcnRzLmtpbGxSaW5nLmFkZCh0ZXh0KTsKCiAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHJhbmdlKTsKICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH0sCiAgICB5YW5rOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBlZGl0b3Iub25QYXN0ZShleHBvcnRzLmtpbGxSaW5nLmdldCgpIHx8ICcnKTsKICAgICAgICBlZGl0b3Iua2V5QmluZGluZy4kZGF0YS5sYXN0Q29tbWFuZCA9ICJ5YW5rIjsKICAgIH0sCiAgICB5YW5rUm90YXRlOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBpZiAoZWRpdG9yLmtleUJpbmRpbmcuJGRhdGEubGFzdENvbW1hbmQgIT0gInlhbmsiKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgZWRpdG9yLnVuZG8oKTsKICAgICAgICBlZGl0b3Iuc2Vzc2lvbi4kZW1hY3NNYXJrUmluZy5wb3AoKTsgLy8gYWxzbyB1bmRvIHJlY29yZGluZyBtYXJrCiAgICAgICAgZWRpdG9yLm9uUGFzdGUoZXhwb3J0cy5raWxsUmluZy5yb3RhdGUoKSk7CiAgICAgICAgZWRpdG9yLmtleUJpbmRpbmcuJGRhdGEubGFzdENvbW1hbmQgPSAieWFuayI7CiAgICB9LAogICAga2lsbFJlZ2lvbjogewogICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgICAgICBleHBvcnRzLmtpbGxSaW5nLmFkZChlZGl0b3IuZ2V0Q29weVRleHQoKSk7CiAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5ieU5hbWUuY3V0LmV4ZWMoZWRpdG9yKTsKICAgICAgICAgICAgZWRpdG9yLnNldEVtYWNzTWFyayhudWxsKTsKICAgICAgICB9LAogICAgICAgIHJlYWRPbmx5OiB0cnVlLAogICAgICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIKICAgIH0sCiAgICBraWxsUmluZ1NhdmU6IHsKICAgICAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKCiAgICAgICAgICAgIGVkaXRvci4kaGFuZGxlc0VtYWNzT25Db3B5ID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIG1hcmtzID0gZWRpdG9yLnNlc3Npb24uJGVtYWNzTWFya1Jpbmcuc2xpY2UoKSwKICAgICAgICAgICAgICAgIGRlc2VsZWN0ZWRNYXJrcyA9IFtdOwogICAgICAgICAgICBleHBvcnRzLmtpbGxSaW5nLmFkZChlZGl0b3IuZ2V0Q29weVRleHQoKSk7CgogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVzZWxlY3QoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbCA9IGVkaXRvci5zZWxlY3Rpb24sIHJhbmdlID0gc2VsLmdldFJhbmdlKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IHNlbC5pc0JhY2t3YXJkcygpID8gcmFuZ2UuZW5kIDogcmFuZ2Uuc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZE1hcmtzLnB1c2goe3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufSk7CiAgICAgICAgICAgICAgICAgICAgc2VsLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlZGl0b3IuJGhhbmRsZXNFbWFjc09uQ29weSA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKGVkaXRvci5pbk11bHRpU2VsZWN0TW9kZSkgZWRpdG9yLmZvckVhY2hTZWxlY3Rpb24oe2V4ZWM6IGRlc2VsZWN0fSk7CiAgICAgICAgICAgICAgICBlbHNlIGRlc2VsZWN0KCk7CiAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0RW1hY3NNYXJrKG51bGwpOwogICAgICAgICAgICAgICAgZWRpdG9yLnNlc3Npb24uJGVtYWNzTWFya1JpbmcgPSBtYXJrcy5jb25jYXQoZGVzZWxlY3RlZE1hcmtzLnJldmVyc2UoKSk7CiAgICAgICAgICAgIH0sIDApOwogICAgICAgIH0sCiAgICAgICAgcmVhZE9ubHk6IHRydWUKICAgIH0sCiAgICBrZXlib2FyZFF1aXQ6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGVkaXRvci5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICBlZGl0b3Iuc2V0RW1hY3NNYXJrKG51bGwpOwogICAgICAgIGVkaXRvci5rZXlCaW5kaW5nLiRkYXRhLmNvdW50ID0gbnVsbDsKICAgIH0sCiAgICBmb2N1c0NvbW1hbmRMaW5lOiBmdW5jdGlvbihlZGl0b3IsIGFyZykgewogICAgICAgIGlmIChlZGl0b3Iuc2hvd0NvbW1hbmRMaW5lKQogICAgICAgICAgICBlZGl0b3Iuc2hvd0NvbW1hbmRMaW5lKGFyZyk7CiAgICB9Cn0pOwoKZXhwb3J0cy5oYW5kbGVyLmFkZENvbW1hbmRzKGlTZWFyY2hDb21tYW5kTW9kdWxlLmlTZWFyY2hTdGFydENvbW1hbmRzKTsKCnZhciBjb21tYW5kcyA9IGV4cG9ydHMuaGFuZGxlci5jb21tYW5kczsKY29tbWFuZHMueWFuay5pc1lhbmsgPSB0cnVlOwpjb21tYW5kcy55YW5rUm90YXRlLmlzWWFuayA9IHRydWU7CgpleHBvcnRzLmtpbGxSaW5nID0gewogICAgJGRhdGE6IFtdLAogICAgYWRkOiBmdW5jdGlvbihzdHIpIHsKICAgICAgICBzdHIgJiYgdGhpcy4kZGF0YS5wdXNoKHN0cik7CiAgICAgICAgaWYgKHRoaXMuJGRhdGEubGVuZ3RoID4gMzApCiAgICAgICAgICAgIHRoaXMuJGRhdGEuc2hpZnQoKTsKICAgIH0sCiAgICBhcHBlbmQ6IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHZhciBpZHggPSB0aGlzLiRkYXRhLmxlbmd0aCAtIDE7CiAgICAgICAgdmFyIHRleHQgPSB0aGlzLiRkYXRhW2lkeF0gfHwgIiI7CiAgICAgICAgaWYgKHN0cikgdGV4dCArPSBzdHI7CiAgICAgICAgaWYgKHRleHQpIHRoaXMuJGRhdGFbaWR4XSA9IHRleHQ7CiAgICB9LAogICAgZ2V0OiBmdW5jdGlvbihuKSB7CiAgICAgICAgbiA9IG4gfHwgMTsKICAgICAgICByZXR1cm4gdGhpcy4kZGF0YS5zbGljZSh0aGlzLiRkYXRhLmxlbmd0aC1uLCB0aGlzLiRkYXRhLmxlbmd0aCkucmV2ZXJzZSgpLmpvaW4oJ1xuJyk7CiAgICB9LAogICAgcG9wOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy4kZGF0YS5sZW5ndGggPiAxKQogICAgICAgICAgICB0aGlzLiRkYXRhLnBvcCgpOwogICAgICAgIHJldHVybiB0aGlzLmdldCgpOwogICAgfSwKICAgIHJvdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy4kZGF0YS51bnNoaWZ0KHRoaXMuJGRhdGEucG9wKCkpOwogICAgICAgIHJldHVybiB0aGlzLmdldCgpOwogICAgfQp9OwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9rZXlib2FyZC9lbWFjcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/keybinding-sublime.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uva2V5Ym9hcmQvc3VibGltZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIva2V5cyIsImFjZS9saWIvb29wIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2Uva2V5Ym9hcmQvaGFzaF9oYW5kbGVyIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIga2V5VXRpbCA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7CnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciB1c2VyYWdlbnQgPSByZXF1aXJlKCIuLi9saWIvdXNlcmFnZW50Iik7CnZhciBIYXNoSGFuZGxlciA9IHJlcXVpcmUoIi4uL2tleWJvYXJkL2hhc2hfaGFuZGxlciIpLkhhc2hIYW5kbGVyOwoKZnVuY3Rpb24gbW92ZUJ5U3ViV29yZHMoZWRpdG9yLCBkaXJlY3Rpb24sIGV4dGVuZCkgewogICAgdmFyIHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3Rpb247CiAgICB2YXIgcm93ID0gc2VsZWN0aW9uLmxlYWQucm93OwogICAgdmFyIGNvbHVtbiA9IHNlbGVjdGlvbi5sZWFkLmNvbHVtbjsKCiAgICB2YXIgbGluZSA9IGVkaXRvci5zZXNzaW9uLmdldExpbmUocm93KTsKICAgIGlmICghbGluZVtjb2x1bW4gKyBkaXJlY3Rpb25dKSB7CiAgICAgICAgdmFyIG1ldGhvZCA9IChleHRlbmQgPyAic2VsZWN0V29yZCIgOiAibW92ZUN1cnNvclNob3J0V29yZCIpCiAgICAgICAgICAgICsgKGRpcmVjdGlvbiA9PSAxID8gIlJpZ2h0IiA6ICJMZWZ0Iik7CiAgICAgICAgcmV0dXJuIGVkaXRvci5zZWxlY3Rpb25bbWV0aG9kXSgpOwogICAgfQogICAgaWYgKGRpcmVjdGlvbiA9PSAtMSkgY29sdW1uLS07CiAgICB3aGlsZSAobGluZVtjb2x1bW5dKSB7CiAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKGxpbmVbY29sdW1uXSkgKyBnZXRUeXBlKGxpbmVbY29sdW1uICsgZGlyZWN0aW9uXSk7CiAgICAgICAgY29sdW1uICs9IGRpcmVjdGlvbjsKICAgICAgICBpZiAoZGlyZWN0aW9uID09IDEpIHsKICAgICAgICAgICAgaWYgKHR5cGUgPT0gIldXIiAmJiBnZXRUeXBlKGxpbmVbY29sdW1uICsgMV0pID09ICJ3IikKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKHR5cGUgPT0gIndXIikgewogICAgICAgICAgICAgICAgaWYgKGdldFR5cGUobGluZVtjb2x1bW4gLSAxXSkgPT0gIlciKSB7CiAgICAgICAgICAgICAgICAgICAgY29sdW1uIC09IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0eXBlID09ICJXdyIpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKC93W3Nfb1ddfF9bc1dvXXxvW3Nfd1ddfHNbV118V1tzb10vLnRlc3QodHlwZSkpCiAgICAgICAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKGRpcmVjdGlvbiA9PSAtMSkgY29sdW1uKys7CiAgICBpZiAoZXh0ZW5kKQogICAgICAgIGVkaXRvci5zZWxlY3Rpb24ubW92ZUN1cnNvclRvKHJvdywgY29sdW1uKTsKICAgIGVsc2UKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVUbyhyb3csIGNvbHVtbik7CiAgICAKICAgIGZ1bmN0aW9uIGdldFR5cGUoeCkgewogICAgICAgIGlmICgheCkgcmV0dXJuICItIjsKICAgICAgICBpZiAoL1xzLy50ZXN0KHgpKSByZXR1cm4gInMiOwogICAgICAgIGlmICh4ID09ICJfIikgcmV0dXJuICJfIjsKICAgICAgICBpZiAoeC50b1VwcGVyQ2FzZSgpID09IHggJiYgeC50b0xvd2VyQ2FzZSgpICE9IHgpIHJldHVybiAiVyI7CiAgICAgICAgaWYgKHgudG9VcHBlckNhc2UoKSAhPSB4ICYmIHgudG9Mb3dlckNhc2UoKSA9PSB4KSByZXR1cm4gInciOwogICAgICAgIHJldHVybiAibyI7CiAgICB9Cn0KCmV4cG9ydHMuaGFuZGxlciA9IG5ldyBIYXNoSGFuZGxlcigpOwogCmV4cG9ydHMuaGFuZGxlci5hZGRDb21tYW5kcyhbewogICAgbmFtZTogImZpbmRfYWxsX3VuZGVyIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5zZWxlY3RXb3JkKCk7CiAgICAgICAgZWRpdG9yLmZpbmRBbGwoKTsKICAgIH0sCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAiZmluZF91bmRlciIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpCiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb24uc2VsZWN0V29yZCgpOwogICAgICAgIGVkaXRvci5maW5kTmV4dCgpOwogICAgfSwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJmaW5kX3VuZGVyX3ByZXYiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKQogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLnNlbGVjdFdvcmQoKTsKICAgICAgICBlZGl0b3IuZmluZFByZXZpb3VzKCk7CiAgICB9LAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImZpbmRfdW5kZXJfZXhwYW5kIiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIGVkaXRvci5zZWxlY3RNb3JlKDEsIGZhbHNlLCB0cnVlKTsKICAgIH0sCiAgICBzY3JvbGxJbnRvVmlldzogImFuaW1hdGUiLAogICAgcmVhZE9ubHk6IHRydWUKfSwgewogICAgbmFtZTogImZpbmRfdW5kZXJfZXhwYW5kX3NraXAiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgZWRpdG9yLnNlbGVjdE1vcmUoMSwgdHJ1ZSwgdHJ1ZSk7CiAgICB9LAogICAgc2Nyb2xsSW50b1ZpZXc6ICJhbmltYXRlIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJkZWxldGVfdG9faGFyZF9ib2wiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIHBvcyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CiAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHsKICAgICAgICAgICAgc3RhcnQ6IHsgcm93OiBwb3Mucm93LCBjb2x1bW46IDAgfSwKICAgICAgICAgICAgZW5kOiBwb3MKICAgICAgICB9KTsKICAgIH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiCn0sIHsKICAgIG5hbWU6ICJkZWxldGVfdG9faGFyZF9lb2wiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgdmFyIHBvcyA9IGVkaXRvci5zZWxlY3Rpb24uZ2V0Q3Vyc29yKCk7CiAgICAgICAgZWRpdG9yLnNlc3Npb24ucmVtb3ZlKHsKICAgICAgICAgICAgc3RhcnQ6IHBvcywKICAgICAgICAgICAgZW5kOiB7IHJvdzogcG9zLnJvdywgY29sdW1uOiBJbmZpbml0eSB9CiAgICAgICAgfSk7CiAgICB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIgp9LCB7CiAgICBuYW1lOiAibW92ZVRvV29yZFN0YXJ0TGVmdCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLm1vdmVDdXJzb3JMb25nV29yZExlZnQoKTsKICAgICAgICBlZGl0b3IuY2xlYXJTZWxlY3Rpb24oKTsKICAgIH0sCiAgICBtdWx0aVNlbGVjdEFjdGlvbjogImZvckVhY2giLAogICAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiCn0sIHsKICAgIG5hbWU6ICJtb3ZlVG9Xb3JkRW5kUmlnaHQiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgZWRpdG9yLnNlbGVjdGlvbi5tb3ZlQ3Vyc29yTG9uZ1dvcmRSaWdodCgpOwogICAgICAgIGVkaXRvci5jbGVhclNlbGVjdGlvbigpOwogICAgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInNlbGVjdFRvV29yZFN0YXJ0TGVmdCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICB2YXIgc2VsID0gZWRpdG9yLnNlbGVjdGlvbjsKICAgICAgICBzZWwuJG1vdmVTZWxlY3Rpb24oc2VsLm1vdmVDdXJzb3JMb25nV29yZExlZnQpOwogICAgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInNlbGVjdFRvV29yZEVuZFJpZ2h0IiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIHZhciBzZWwgPSBlZGl0b3Iuc2VsZWN0aW9uOwogICAgICAgIHNlbC4kbW92ZVNlbGVjdGlvbihzZWwubW92ZUN1cnNvckxvbmdXb3JkUmlnaHQpOwogICAgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIKfSwgewogICAgbmFtZTogInNlbGVjdFN1YldvcmRSaWdodCIsCiAgICBleGVjOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgICBtb3ZlQnlTdWJXb3JkcyhlZGl0b3IsIDEsIHRydWUpOwogICAgfSwKICAgIG11bHRpU2VsZWN0QWN0aW9uOiAiZm9yRWFjaCIsCiAgICBzY3JvbGxJbnRvVmlldzogImN1cnNvciIsCiAgICByZWFkT25seTogdHJ1ZQp9LCB7CiAgICBuYW1lOiAic2VsZWN0U3ViV29yZExlZnQiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgbW92ZUJ5U3ViV29yZHMoZWRpdG9yLCAtMSwgdHJ1ZSk7CiAgICB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJtb3ZlU3ViV29yZFJpZ2h0IiwKICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICAgIG1vdmVCeVN1YldvcmRzKGVkaXRvciwgMSk7CiAgICB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn0sIHsKICAgIG5hbWU6ICJtb3ZlU3ViV29yZExlZnQiLAogICAgZXhlYzogZnVuY3Rpb24oZWRpdG9yKSB7CiAgICAgICAgbW92ZUJ5U3ViV29yZHMoZWRpdG9yLCAtMSk7CiAgICB9LAogICAgbXVsdGlTZWxlY3RBY3Rpb246ICJmb3JFYWNoIiwKICAgIHNjcm9sbEludG9WaWV3OiAiY3Vyc29yIiwKICAgIHJlYWRPbmx5OiB0cnVlCn1dKTsKCgpbewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtayBjbWQtYmFja3NwYWNlfGNtZC1iYWNrc3BhY2UiLCB3aW46ICJjdHJsLXNoaWZ0LWJhY2tzcGFjZXxjdHJsLWsgY3RybC1iYWNrc3BhY2UiIH0sCiAgICBuYW1lOiAicmVtb3ZldG9saW5lc3RhcnRoYXJkIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1rIGNtZC1rfGNtZC1kZWxldGV8Y3RybC1rIiwgd2luOiAiY3RybC1zaGlmdC1kZWxldGV8Y3RybC1rIGN0cmwtayIgfSwKICAgIG5hbWU6ICJyZW1vdmV0b2xpbmVlbmRoYXJkIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1zaGlmdC1kIiwgd2luOiAiY3RybC1zaGlmdC1kIiB9LAogICAgbmFtZTogImR1cGxpY2F0ZVNlbGVjdGlvbiIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtbCIsIHdpbjogImN0cmwtbCIgfSwKICAgIG5hbWU6ICJleHBhbmR0b2xpbmUiCn0sIAp7CiAgICBiaW5kS2V5OiB7bWFjOiAiY21kLXNoaWZ0LWEiLCB3aW46ICJjdHJsLXNoaWZ0LWEifSwKICAgIG5hbWU6ICJleHBhbmRTZWxlY3Rpb24iLAogICAgYXJnczoge3RvOiAidGFnIn0KfSwgewogICAgYmluZEtleToge21hYzogImNtZC1zaGlmdC1qIiwgd2luOiAiY3RybC1zaGlmdC1qIn0sCiAgICBuYW1lOiAiZXhwYW5kU2VsZWN0aW9uIiwKICAgIGFyZ3M6IHt0bzogImluZGVudGF0aW9uIn0KfSwgewogICAgYmluZEtleToge21hYzogImN0cmwtc2hpZnQtbSIsIHdpbjogImN0cmwtc2hpZnQtbSJ9LAogICAgbmFtZTogImV4cGFuZFNlbGVjdGlvbiIsCiAgICBhcmdzOiB7dG86ICJicmFja2V0cyJ9Cn0sIHsKICAgIGJpbmRLZXk6IHttYWM6ICJjbWQtc2hpZnQtc3BhY2UiLCB3aW46ICJjdHJsLXNoaWZ0LXNwYWNlIn0sCiAgICBuYW1lOiAiZXhwYW5kU2VsZWN0aW9uIiwKICAgIGFyZ3M6IHt0bzogInNjb3BlIn0KfSwKewogICAgYmluZEtleTogeyBtYWM6ICJjdHJsLWNtZC1nIiwgd2luOiAiYWx0LWYzIiB9LAogICAgbmFtZTogImZpbmRfYWxsX3VuZGVyIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImFsdC1jbWQtZyIsIHdpbjogImN0cmwtZjMiIH0sCiAgICBuYW1lOiAiZmluZF91bmRlciIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJzaGlmdC1hbHQtY21kLWciLCB3aW46ICJjdHJsLXNoaWZ0LWYzIiB9LAogICAgbmFtZTogImZpbmRfdW5kZXJfcHJldiIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtZyIsIHdpbjogImYzIiB9LAogICAgbmFtZTogImZpbmRuZXh0Igp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogInNoaWZ0LWNtZC1nIiwgd2luOiAic2hpZnQtZjMiIH0sCiAgICBuYW1lOiAiZmluZHByZXZpb3VzIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1kIiwgd2luOiAiY3RybC1kIiB9LAogICAgbmFtZTogImZpbmRfdW5kZXJfZXhwYW5kIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1rIGNtZC1kIiwgd2luOiAiY3RybC1rIGN0cmwtZCIgfSwKICAgIG5hbWU6ICJmaW5kX3VuZGVyX2V4cGFuZF9za2lwIgp9LCAKewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtYWx0LVsiLCB3aW46ICJjdHJsLXNoaWZ0LVsiIH0sCiAgICBuYW1lOiAidG9nZ2xlRm9sZFdpZGdldCIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtYWx0LV0iLCB3aW46ICJjdHJsLXNoaWZ0LV0iIH0sCiAgICBuYW1lOiAidW5mb2xkIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1rIGNtZC0wfGNtZC1rIGNtZC1qIiwgd2luOiAiY3RybC1rIGN0cmwtMHxjdHJsLWsgY3RybC1qIiB9LAogICAgbmFtZTogInVuZm9sZGFsbCIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtayBjbWQtMSIsIHdpbjogImN0cmwtayBjdHJsLTEiIH0sCiAgICBuYW1lOiAiZm9sZE90aGVyIiwKICAgIGFyZ3M6IHsgbGV2ZWw6IDEgfQp9LAp7CiAgICBiaW5kS2V5OiB7IHdpbjogImN0cmwtbGVmdCIsIG1hYzogImFsdC1sZWZ0IiB9LAogICAgbmFtZTogIm1vdmVUb1dvcmRTdGFydExlZnQiCn0sIHsKICAgIGJpbmRLZXk6IHsgd2luOiAiY3RybC1yaWdodCIsIG1hYzogImFsdC1yaWdodCIgfSwKICAgIG5hbWU6ICJtb3ZlVG9Xb3JkRW5kUmlnaHQiCn0sIHsKICAgIGJpbmRLZXk6IHsgd2luOiAiY3RybC1zaGlmdC1sZWZ0IiwgbWFjOiAiYWx0LXNoaWZ0LWxlZnQiIH0sCiAgICBuYW1lOiAic2VsZWN0VG9Xb3JkU3RhcnRMZWZ0Igp9LCB7CiAgICBiaW5kS2V5OiB7IHdpbjogImN0cmwtc2hpZnQtcmlnaHQiLCBtYWM6ICJhbHQtc2hpZnQtcmlnaHQiIH0sCiAgICBuYW1lOiAic2VsZWN0VG9Xb3JkRW5kUmlnaHQiCn0sIAp7CiAgICBiaW5kS2V5OiB7bWFjOiAiY3RybC1hbHQtc2hpZnQtcmlnaHR8Y3RybC1zaGlmdC1yaWdodCIsIHdpbjogImFsdC1zaGlmdC1yaWdodCJ9LAogICAgbmFtZTogInNlbGVjdFN1YldvcmRSaWdodCIKfSwgewogICAgYmluZEtleToge21hYzogImN0cmwtYWx0LXNoaWZ0LWxlZnR8Y3RybC1zaGlmdC1sZWZ0Iiwgd2luOiAiYWx0LXNoaWZ0LWxlZnQifSwKICAgIG5hbWU6ICJzZWxlY3RTdWJXb3JkTGVmdCIKfSwgewogICAgYmluZEtleToge21hYzogImN0cmwtYWx0LXJpZ2h0fGN0cmwtcmlnaHQiLCB3aW46ICJhbHQtcmlnaHQifSwKICAgIG5hbWU6ICJtb3ZlU3ViV29yZFJpZ2h0Igp9LCB7CiAgICBiaW5kS2V5OiB7bWFjOiAiY3RybC1hbHQtbGVmdHxjdHJsLWxlZnQiLCB3aW46ICJhbHQtbGVmdCJ9LAogICAgbmFtZTogIm1vdmVTdWJXb3JkTGVmdCIKfSwgCnsKICAgIGJpbmRLZXk6IHsgbWFjOiAiY3RybC1tIiwgd2luOiAiY3RybC1tIiB9LAogICAgbmFtZTogImp1bXB0b21hdGNoaW5nIiwKICAgIGFyZ3M6IHsgdG86ICJicmFja2V0cyIgfQp9LCAKewogICAgYmluZEtleTogeyBtYWM6ICJjdHJsLWY2Iiwgd2luOiAiY3RybC1mNiIgfSwKICAgIG5hbWU6ICJnb1RvTmV4dEVycm9yIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImN0cmwtc2hpZnQtZjYiLCB3aW46ICJjdHJsLXNoaWZ0LWY2IiB9LAogICAgbmFtZTogImdvVG9QcmV2aW91c0Vycm9yIgp9LAoKewogICAgYmluZEtleTogeyBtYWM6ICJjdHJsLW8iIH0sCiAgICBuYW1lOiAic3BsaXRsaW5lIgp9LCAKewogICAgYmluZEtleToge21hYzogImN0cmwtc2hpZnQtdyIsIHdpbjogImFsdC1zaGlmdC13In0sCiAgICBuYW1lOiAic3Vycm93bmRXaXRoVGFnIgp9LHsKICAgIGJpbmRLZXk6IHttYWM6ICJjbWQtYWx0LS4iLCB3aW46ICJhbHQtLiJ9LAogICAgbmFtZTogImNsb3NlX3RhZyIKfSwgCnsKICAgIGJpbmRLZXk6IHsgbWFjOiAiY21kLWoiLCB3aW46ICJjdHJsLWoiIH0sCiAgICBuYW1lOiAiam9pbmxpbmVzIgp9LCAKCnsKICAgIGJpbmRLZXk6IHttYWM6ICJjdHJsLS0iLCB3aW46ICJhbHQtLSJ9LAogICAgbmFtZTogImp1bXBCYWNrIgp9LCB7CiAgICBiaW5kS2V5OiB7bWFjOiAiY3RybC1zaGlmdC0tIiwgd2luOiAiYWx0LXNoaWZ0LS0ifSwKICAgIG5hbWU6ICJqdW1wRm9yd2FyZCIKfSwgCgp7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1rIGNtZC1sIiwgd2luOiAiY3RybC1rIGN0cmwtbCIgfSwKICAgIG5hbWU6ICJ0b2xvd2VyY2FzZSIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtayBjbWQtdSIsIHdpbjogImN0cmwtayBjdHJsLXUiIH0sCiAgICBuYW1lOiAidG91cHBlcmNhc2UiCn0sIAoKewogICAgYmluZEtleToge21hYzogImNtZC1zaGlmdC12Iiwgd2luOiAiY3RybC1zaGlmdC12In0sCiAgICBuYW1lOiAicGFzdGVfYW5kX2luZGVudCIKfSwgewogICAgYmluZEtleToge21hYzogImNtZC1rIGNtZC12fGNtZC1hbHQtdiIsIHdpbjogImN0cmwtayBjdHJsLXYifSwKICAgIG5hbWU6ICJwYXN0ZV9mcm9tX2hpc3RvcnkiCn0sIAoKewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtc2hpZnQtZW50ZXIiLCB3aW46ICJjdHJsLXNoaWZ0LWVudGVyIiB9LAogICAgbmFtZTogImFkZExpbmVCZWZvcmUiCn0sIHsKICAgIGJpbmRLZXk6IHsgbWFjOiAiY21kLWVudGVyIiwgd2luOiAiY3RybC1lbnRlciIgfSwKICAgIG5hbWU6ICJhZGRMaW5lQWZ0ZXIiCn0sIHsKICAgIGJpbmRLZXk6IHsgbWFjOiAiY3RybC1zaGlmdC1rIiwgd2luOiAiY3RybC1zaGlmdC1rIiB9LAogICAgbmFtZTogInJlbW92ZWxpbmUiCn0sIHsKICAgIGJpbmRLZXk6IHsgbWFjOiAiY3RybC1hbHQtdXAiLCB3aW46ICJjdHJsLXVwIiB9LAogICAgbmFtZTogInNjcm9sbHVwIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImN0cmwtYWx0LWRvd24iLCB3aW46ICJjdHJsLWRvd24iIH0sCiAgICBuYW1lOiAic2Nyb2xsZG93biIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtYSIsIHdpbjogImN0cmwtYSIgfSwKICAgIG5hbWU6ICJzZWxlY3RhbGwiCn0sIHsKICAgIGJpbmRLZXk6IHsgbGludXg6ICJhbHQtc2hpZnQtZG93biIsIG1hYzogImN0cmwtc2hpZnQtZG93biIsIHdpbjogImN0cmwtYWx0LWRvd24iIH0sCiAgICBuYW1lOiAiYWRkQ3Vyc29yQmVsb3ciCn0sIHsKICAgIGJpbmRLZXk6IHsgbGludXg6ICJhbHQtc2hpZnQtdXAiLCBtYWM6ICJjdHJsLXNoaWZ0LXVwIiwgd2luOiAiY3RybC1hbHQtdXAiIH0sCiAgICBuYW1lOiAiYWRkQ3Vyc29yQWJvdmUiCn0sCgoKewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtayBjbWQtY3xjdHJsLWwiLCB3aW46ICJjdHJsLWsgY3RybC1jIiB9LAogICAgbmFtZTogImNlbnRlcnNlbGVjdGlvbiIKfSwgCgp7CiAgICBiaW5kS2V5OiB7IG1hYzogImY1Iiwgd2luOiAiZjkiIH0sCiAgICBuYW1lOiAic29ydGxpbmVzIgp9LCAKewogICAgYmluZEtleToge21hYzogImN0cmwtZjUiLCB3aW46ICJjdHJsLWY5In0sCiAgICBuYW1lOiAic29ydGxpbmVzIiwKICAgIGFyZ3M6IHtjYXNlU2Vuc2l0aXZlOiB0cnVlfQp9LAp7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1zaGlmdC1sIiwgd2luOiAiY3RybC1zaGlmdC1sIiB9LAogICAgbmFtZTogInNwbGl0SW50b0xpbmVzIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImN0cmwtY21kLWRvd24iLCB3aW46ICJjdHJsLXNoaWZ0LWRvd24iIH0sCiAgICBuYW1lOiAibW92ZWxpbmVzZG93biIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjdHJsLWNtZC11cCIsIHdpbjogImN0cmwtc2hpZnQtdXAiIH0sCiAgICBuYW1lOiAibW92ZWxpbmVzdXAiCn0sIHsKICAgIGJpbmRLZXk6IHsgbWFjOiAiYWx0LWRvd24iLCB3aW46ICJhbHQtZG93biIgfSwKICAgIG5hbWU6ICJtb2RpZnlOdW1iZXJEb3duIgp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImFsdC11cCIsIHdpbjogImFsdC11cCIgfSwKICAgIG5hbWU6ICJtb2RpZnlOdW1iZXJVcCIKfSwgewogICAgYmluZEtleTogeyBtYWM6ICJjbWQtLyIsIHdpbjogImN0cmwtLyIgfSwKICAgIG5hbWU6ICJ0b2dnbGVjb21tZW50Igp9LCB7CiAgICBiaW5kS2V5OiB7IG1hYzogImNtZC1hbHQtLyIsIHdpbjogImN0cmwtc2hpZnQtLyIgfSwKICAgIG5hbWU6ICJ0b2dnbGVCbG9ja0NvbW1lbnQiCn0sCgoKewogICAgYmluZEtleTogeyBsaW51eDogImN0cmwtYWx0LXEiLCBtYWM6ICJjdHJsLXEiLCB3aW46ICJjdHJsLXEiIH0sCiAgICBuYW1lOiAidG9nZ2xlcmVjb3JkaW5nIgp9LCB7CiAgICBiaW5kS2V5OiB7IGxpbnV4OiAiY3RybC1hbHQtc2hpZnQtcSIsIG1hYzogImN0cmwtc2hpZnQtcSIsIHdpbjogImN0cmwtc2hpZnQtcSIgfSwKICAgIG5hbWU6ICJyZXBsYXltYWNybyIKfSwgCgp7CiAgICBiaW5kS2V5OiB7IG1hYzogImN0cmwtdCIsIHdpbjogImN0cmwtdCIgfSwKICAgIG5hbWU6ICJ0cmFuc3Bvc2UiCn0KCl0uZm9yRWFjaChmdW5jdGlvbihiaW5kaW5nKSB7CiAgICB2YXIgY29tbWFuZCA9IGV4cG9ydHMuaGFuZGxlci5jb21tYW5kc1tiaW5kaW5nLm5hbWVdOwogICAgaWYgKGNvbW1hbmQpCiAgICAgICAgY29tbWFuZC5iaW5kS2V5ID0gYmluZGluZy5iaW5kS2V5OwogICAgZXhwb3J0cy5oYW5kbGVyLmJpbmRLZXkoYmluZGluZy5iaW5kS2V5LCBjb21tYW5kIHx8IGJpbmRpbmcubmFtZSk7Cn0pOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9rZXlib2FyZC9zdWJsaW1lIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/keybinding-vim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uva2V5Ym9hcmQvdmltIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9ldmVudF9lbWl0dGVyIiwiYWNlL2xpYi9kb20iLCJhY2UvbGliL29vcCIsImFjZS9saWIva2V5cyIsImFjZS9saWIvZXZlbnQiLCJhY2Uvc2VhcmNoIiwiYWNlL2xpYi91c2VyYWdlbnQiLCJhY2Uvc2VhcmNoX2hpZ2hsaWdodCIsImFjZS9jb21tYW5kcy9tdWx0aV9zZWxlY3RfY29tbWFuZHMiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL211bHRpX3NlbGVjdCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAndXNlIHN0cmljdCc7CgogIGZ1bmN0aW9uIGxvZygpIHsKICAgIHZhciBkID0gIiI7CiAgICBmdW5jdGlvbiBmb3JtYXQocCkgewogICAgICBpZiAodHlwZW9mIHAgIT0gIm9iamVjdCIpCiAgICAgICAgcmV0dXJuIHAgKyAiIjsKICAgICAgaWYgKCJsaW5lIiBpbiBwKSB7CiAgICAgICAgcmV0dXJuIHAubGluZSArICI6IiArIHAuY2g7CiAgICAgIH0KICAgICAgaWYgKCJhbmNob3IiIGluIHApIHsKICAgICAgICByZXR1cm4gZm9ybWF0KHAuYW5jaG9yKSArICItPiIgKyBmb3JtYXQocC5oZWFkKTsKICAgICAgfQogICAgICBpZiAoQXJyYXkuaXNBcnJheShwKSkKICAgICAgICByZXR1cm4gIlsiICsgcC5tYXAoZnVuY3Rpb24oeCkgewogICAgICAgICAgcmV0dXJuIGZvcm1hdCh4KTsKICAgICAgICB9KSArICJdIjsKICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHApOwogICAgfQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHAgPSBhcmd1bWVudHNbaV07CiAgICAgIHZhciBmID0gZm9ybWF0KHApOwogICAgICBkICs9IGYgKyAiICAiOwogICAgfQogICAgY29uc29sZS5sb2coZCk7CiAgfQogIHZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CiAgdmFyIEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoIi4uL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwogIHZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CiAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICB2YXIgS0VZUyA9IHJlcXVpcmUoIi4uL2xpYi9rZXlzIik7CiAgdmFyIGV2ZW50ID0gcmVxdWlyZSgiLi4vbGliL2V2ZW50Iik7CiAgdmFyIFNlYXJjaCA9IHJlcXVpcmUoIi4uL3NlYXJjaCIpLlNlYXJjaDsKICB2YXIgdXNlcmFnZW50ID0gcmVxdWlyZSgiLi4vbGliL3VzZXJhZ2VudCIpOwogIHZhciBTZWFyY2hIaWdobGlnaHQgPSByZXF1aXJlKCIuLi9zZWFyY2hfaGlnaGxpZ2h0IikuU2VhcmNoSGlnaGxpZ2h0OwogIHZhciBtdWx0aVNlbGVjdENvbW1hbmRzID0gcmVxdWlyZSgiLi4vY29tbWFuZHMvbXVsdGlfc2VsZWN0X2NvbW1hbmRzIik7CiAgdmFyIFRleHRNb2RlVG9rZW5SZSA9IHJlcXVpcmUoIi4uL21vZGUvdGV4dCIpLk1vZGUucHJvdG90eXBlLnRva2VuUmU7CiAgcmVxdWlyZSgiLi4vbXVsdGlfc2VsZWN0Iik7CgogIHZhciBDb2RlTWlycm9yID0gZnVuY3Rpb24oYWNlKSB7CiAgICB0aGlzLmFjZSA9IGFjZTsKICAgIHRoaXMuc3RhdGUgPSB7fTsKICAgIHRoaXMubWFya3MgPSB7fTsKICAgIHRoaXMuJHVpZCA9IDA7CiAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKTsKICAgIHRoaXMub25CZWZvcmVFbmRPcGVyYXRpb24gPSB0aGlzLm9uQmVmb3JlRW5kT3BlcmF0aW9uLmJpbmQodGhpcyk7CiAgICB0aGlzLmFjZS5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZSk7CiAgICB0aGlzLmFjZS5vbignY2hhbmdlU2VsZWN0aW9uJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSk7CiAgICB0aGlzLmFjZS5vbignYmVmb3JlRW5kT3BlcmF0aW9uJywgdGhpcy5vbkJlZm9yZUVuZE9wZXJhdGlvbik7CiAgfTsKICBDb2RlTWlycm9yLlBvcyA9IGZ1bmN0aW9uKGxpbmUsIGNoKSB7CiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUG9zKSkgcmV0dXJuIG5ldyBQb3MobGluZSwgY2gpOwogICAgdGhpcy5saW5lID0gbGluZTsgdGhpcy5jaCA9IGNoOwogIH07CiAgQ29kZU1pcnJvci5kZWZpbmVPcHRpb24gPSBmdW5jdGlvbihuYW1lLCB2YWwsIHNldHRlcikge307CiAgQ29kZU1pcnJvci5jb21tYW5kcyA9IHsKICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7IGNtLmFjZS5yZWRvKCk7IH0sCiAgICB1bmRvOiBmdW5jdGlvbihjbSkgeyBjbS5hY2UudW5kbygpOyB9LAogICAgbmV3bGluZUFuZEluZGVudDogZnVuY3Rpb24oY20pIHsgY20uYWNlLmluc2VydCgiXG4iKTsgfQogIH07CiAgQ29kZU1pcnJvci5rZXlNYXAgPSB7fTsKICBDb2RlTWlycm9yLmFkZENsYXNzID0gQ29kZU1pcnJvci5ybUNsYXNzID0gZnVuY3Rpb24oKSB7fTsKICBDb2RlTWlycm9yLmVfc3RvcCA9IENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdCA9IGV2ZW50LnN0b3BFdmVudDsKICBDb2RlTWlycm9yLmtleU5hbWUgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIga2V5ID0gKEtFWVNbZS5rZXlDb2RlXSB8fCBlLmtleSB8fCAiIik7CiAgICBpZiAoa2V5Lmxlbmd0aCA9PSAxKSBrZXkgPSBrZXkudG9VcHBlckNhc2UoKTsKICAgIGtleSA9IGV2ZW50LmdldE1vZGlmaWVyU3RyaW5nKGUpLnJlcGxhY2UoLyhefC0pXHcvZywgZnVuY3Rpb24obSkgewogICAgICByZXR1cm4gbS50b1VwcGVyQ2FzZSgpOwogICAgfSkgKyBrZXk7CiAgICByZXR1cm4ga2V5OwogIH07CiAgQ29kZU1pcnJvci5rZXlNYXBbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uKGtleSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBjbWQgPSBjbS5hY2UuY29tbWFuZHMuY29tbWFuZEtleUJpbmRpbmdba2V5LnRvTG93ZXJDYXNlKCldOwogICAgICByZXR1cm4gY21kICYmIGNtLmFjZS5leGVjQ29tbWFuZChjbWQpICE9PSBmYWxzZTsKICAgIH07CiAgfTsKICBDb2RlTWlycm9yLmxvb2t1cEtleSA9IGZ1bmN0aW9uIGxvb2t1cEtleShrZXksIG1hcCwgaGFuZGxlKSB7CiAgICBpZiAoIW1hcCkgbWFwID0gImRlZmF1bHQiOwogICAgaWYgKHR5cGVvZiBtYXAgPT0gInN0cmluZyIpCiAgICAgIG1hcCA9IENvZGVNaXJyb3Iua2V5TWFwW21hcF07CiAgICB2YXIgZm91bmQgPSB0eXBlb2YgbWFwID09ICJmdW5jdGlvbiIgPyBtYXAoa2V5KSA6IG1hcFtrZXldOwogICAgaWYgKGZvdW5kID09PSBmYWxzZSkgcmV0dXJuICJub3RoaW5nIjsKICAgIGlmIChmb3VuZCA9PT0gIi4uLiIpIHJldHVybiAibXVsdGkiOwogICAgaWYgKGZvdW5kICE9IG51bGwgJiYgaGFuZGxlKGZvdW5kKSkgcmV0dXJuICJoYW5kbGVkIjsKCiAgICBpZiAobWFwLmZhbGx0aHJvdWdoKSB7CiAgICAgIGlmICghQXJyYXkuaXNBcnJheShtYXAuZmFsbHRocm91Z2gpKQogICAgICAgIHJldHVybiBsb29rdXBLZXkoa2V5LCBtYXAuZmFsbHRocm91Z2gsIGhhbmRsZSk7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFwLmZhbGx0aHJvdWdoLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGxvb2t1cEtleShrZXksIG1hcC5mYWxsdGhyb3VnaFtpXSwgaGFuZGxlKTsKICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgfTsKCiAgQ29kZU1pcnJvci5zaWduYWwgPSBmdW5jdGlvbihvLCBuYW1lLCBlKSB7IHJldHVybiBvLl9zaWduYWwobmFtZSwgZSkgfTsKICBDb2RlTWlycm9yLm9uID0gZXZlbnQuYWRkTGlzdGVuZXI7CiAgQ29kZU1pcnJvci5vZmYgPSBldmVudC5yZW1vdmVMaXN0ZW5lcjsKICBDb2RlTWlycm9yLmlzV29yZENoYXIgPSBmdW5jdGlvbihjaCkgewogICAgaWYgKGNoIDwgIlx4N2YiKSByZXR1cm4gL15cdyQvLnRlc3QoY2gpOwogICAgVGV4dE1vZGVUb2tlblJlLmxhc3RJbmRleCA9IDA7CiAgICByZXR1cm4gVGV4dE1vZGVUb2tlblJlLnRlc3QoY2gpOwogIH07CiAgCihmdW5jdGlvbigpIHsKICBvb3AuaW1wbGVtZW50KENvZGVNaXJyb3IucHJvdG90eXBlLCBFdmVudEVtaXR0ZXIpOwogIAogIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5hY2Uub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlKTsKICAgIHRoaXMuYWNlLm9mZignY2hhbmdlU2VsZWN0aW9uJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSk7CiAgICB0aGlzLmFjZS5vZmYoJ2JlZm9yZUVuZE9wZXJhdGlvbicsIHRoaXMub25CZWZvcmVFbmRPcGVyYXRpb24pOwogICAgdGhpcy5yZW1vdmVPdmVybGF5KCk7CiAgfTsKICB0aGlzLnZpcnR1YWxTZWxlY3Rpb25Nb2RlID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5hY2UuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSAmJiB0aGlzLmFjZS5zZWxlY3Rpb24uaW5kZXg7CiAgfTsKICB0aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgIHZhciBjaGFuZ2UgPSB7IHRleHQ6IGRlbHRhLmFjdGlvblswXSA9PSAnaScgPyBkZWx0YS5saW5lcyA6IFtdIH07CiAgICB2YXIgY3VyT3AgPSB0aGlzLmN1ck9wID0gdGhpcy5jdXJPcCB8fCB7fTsKICAgIGlmICghY3VyT3AuY2hhbmdlSGFuZGxlcnMpCiAgICAgIGN1ck9wLmNoYW5nZUhhbmRsZXJzID0gdGhpcy5fZXZlbnRSZWdpc3RyeVsiY2hhbmdlIl0gJiYgdGhpcy5fZXZlbnRSZWdpc3RyeVsiY2hhbmdlIl0uc2xpY2UoKTsKICAgIGlmICghY3VyT3AubGFzdENoYW5nZSkgewogICAgICBjdXJPcC5sYXN0Q2hhbmdlID0gY3VyT3AuY2hhbmdlID0gY2hhbmdlOwogICAgfSBlbHNlIHsKICAgICAgY3VyT3AubGFzdENoYW5nZS5uZXh0ID0gY3VyT3AubGFzdENoYW5nZSA9IGNoYW5nZTsKICAgIH0KICAgIHRoaXMuJHVwZGF0ZU1hcmtlcnMoZGVsdGEpOwogIH07CiAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGN1ck9wID0gdGhpcy5jdXJPcCA9IHRoaXMuY3VyT3AgfHwge307CiAgICBpZiAoIWN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMpCiAgICAgIGN1ck9wLmN1cnNvckFjdGl2aXR5SGFuZGxlcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5WyJjdXJzb3JBY3Rpdml0eSJdICYmIHRoaXMuX2V2ZW50UmVnaXN0cnlbImN1cnNvckFjdGl2aXR5Il0uc2xpY2UoKTsKICAgIHRoaXMuY3VyT3AuY3Vyc29yQWN0aXZpdHkgPSB0cnVlOwogICAgaWYgKHRoaXMuYWNlLmluTXVsdGlTZWxlY3RNb2RlKSB7CiAgICAgIHRoaXMuYWNlLmtleUJpbmRpbmcucmVtb3ZlS2V5Ym9hcmRIYW5kbGVyKG11bHRpU2VsZWN0Q29tbWFuZHMua2V5Ym9hcmRIYW5kbGVyKTsKICAgIH0KICB9OwogIHRoaXMub3BlcmF0aW9uID0gZnVuY3Rpb24oZm4sIGZvcmNlKSB7CiAgICBpZiAoIWZvcmNlICYmIHRoaXMuY3VyT3AgfHwgZm9yY2UgJiYgdGhpcy5jdXJPcCAmJiB0aGlzLmN1ck9wLmZvcmNlKSB7CiAgICAgIHJldHVybiBmbigpOwogICAgfQogICAgaWYgKGZvcmNlIHx8ICF0aGlzLmFjZS5jdXJPcCkgewogICAgICBpZiAodGhpcy5jdXJPcCkKICAgICAgICB0aGlzLm9uQmVmb3JlRW5kT3BlcmF0aW9uKCk7CiAgICB9CiAgICBpZiAoIXRoaXMuYWNlLmN1ck9wKSB7CiAgICAgIHZhciBwcmV2T3AgPSB0aGlzLmFjZS5wcmV2T3A7CiAgICAgIHRoaXMuYWNlLnN0YXJ0T3BlcmF0aW9uKHsKICAgICAgICBjb21tYW5kOiB7IG5hbWU6ICJ2aW0iLCAgc2Nyb2xsSW50b1ZpZXc6ICJjdXJzb3IiIH0KICAgICAgfSk7CiAgICB9CiAgICB2YXIgY3VyT3AgPSB0aGlzLmN1ck9wID0gdGhpcy5jdXJPcCB8fCB7fTsKICAgIHRoaXMuY3VyT3AuZm9yY2UgPSBmb3JjZTsKICAgIHZhciByZXN1bHQgPSBmbigpOwogICAgaWYgKHRoaXMuYWNlLmN1ck9wICYmIHRoaXMuYWNlLmN1ck9wLmNvbW1hbmQubmFtZSA9PSAidmltIikgewogICAgICBpZiAodGhpcy5zdGF0ZS5kaWFsb2cpCiAgICAgICAgdGhpcy5hY2UuY3VyT3AuY29tbWFuZC5zY3JvbGxJbnRvVmlldyA9IGZhbHNlOwogICAgICB0aGlzLmFjZS5lbmRPcGVyYXRpb24oKTsKICAgICAgaWYgKCFjdXJPcC5jdXJzb3JBY3Rpdml0eSAmJiAhY3VyT3AubGFzdENoYW5nZSAmJiBwcmV2T3ApCiAgICAgICAgdGhpcy5hY2UucHJldk9wID0gcHJldk9wOwogICAgfQogICAgaWYgKGZvcmNlIHx8ICF0aGlzLmFjZS5jdXJPcCkgewogICAgICBpZiAodGhpcy5jdXJPcCkKICAgICAgICB0aGlzLm9uQmVmb3JlRW5kT3BlcmF0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH07CiAgdGhpcy5vbkJlZm9yZUVuZE9wZXJhdGlvbiA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wID0gdGhpcy5jdXJPcDsKICAgIGlmIChvcCkgewogICAgICBpZiAob3AuY2hhbmdlKSB7IHRoaXMuc2lnbmFsKCJjaGFuZ2UiLCBvcC5jaGFuZ2UsIG9wKTsgfQogICAgICBpZiAob3AgJiYgb3AuY3Vyc29yQWN0aXZpdHkpIHsgdGhpcy5zaWduYWwoImN1cnNvckFjdGl2aXR5IiwgbnVsbCwgb3ApOyB9CiAgICAgIHRoaXMuY3VyT3AgPSBudWxsOwogICAgfQogIH07CgogIHRoaXMuc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlLCBoYW5kbGVycykgewogICAgdmFyIGxpc3RlbmVycyA9IGhhbmRsZXJzID8gaGFuZGxlcnNbZXZlbnROYW1lICsgIkhhbmRsZXJzIl0KICAgICAgICA6ICh0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9KVtldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMpCiAgICAgICAgcmV0dXJuOwogICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7CiAgICBmb3IgKHZhciBpPTA7IGk8bGlzdGVuZXJzLmxlbmd0aDsgaSsrKQogICAgICAgIGxpc3RlbmVyc1tpXSh0aGlzLCBlKTsKICB9OwogIHRoaXMuZmlyc3RMaW5lID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9OwogIHRoaXMubGFzdExpbmUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuYWNlLnNlc3Npb24uZ2V0TGVuZ3RoKCkgLSAxOyB9OwogIHRoaXMubGluZUNvdW50ID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmFjZS5zZXNzaW9uLmdldExlbmd0aCgpOyB9OwogIHRoaXMuc2V0Q3Vyc29yID0gZnVuY3Rpb24obGluZSwgY2gpIHsKICAgIGlmICh0eXBlb2YgbGluZSA9PT0gJ29iamVjdCcpIHsKICAgICAgY2ggPSBsaW5lLmNoOwogICAgICBsaW5lID0gbGluZS5saW5lOwogICAgfQogICAgaWYgKCF0aGlzLmFjZS5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQogICAgICB0aGlzLmFjZS5leGl0TXVsdGlTZWxlY3RNb2RlKCk7CiAgICB0aGlzLmFjZS5zZXNzaW9uLnVuZm9sZCh7cm93OiBsaW5lLCBjb2x1bW46IGNofSk7CiAgICB0aGlzLmFjZS5zZWxlY3Rpb24ubW92ZVRvKGxpbmUsIGNoKTsKICB9OwogIHRoaXMuZ2V0Q3Vyc29yID0gZnVuY3Rpb24ocCkgewogICAgdmFyIHNlbCA9IHRoaXMuYWNlLnNlbGVjdGlvbjsKICAgIHZhciBwb3MgPSBwID09ICdhbmNob3InID8gKHNlbC5pc0VtcHR5KCkgPyBzZWwubGVhZCA6IHNlbC5hbmNob3IpIDoKICAgICAgICBwID09ICdoZWFkJyB8fCAhcCA/IHNlbC5sZWFkIDogc2VsLmdldFJhbmdlKClbcF07CiAgICByZXR1cm4gdG9DbVBvcyhwb3MpOwogIH07CiAgdGhpcy5saXN0U2VsZWN0aW9ucyA9IGZ1bmN0aW9uKHApIHsKICAgIHZhciByYW5nZXMgPSB0aGlzLmFjZS5tdWx0aVNlbGVjdC5yYW5nZUxpc3QucmFuZ2VzOwogICAgaWYgKCFyYW5nZXMubGVuZ3RoIHx8IHRoaXMuYWNlLmluVmlydHVhbFNlbGVjdGlvbk1vZGUpCiAgICAgIHJldHVybiBbe2FuY2hvcjogdGhpcy5nZXRDdXJzb3IoJ2FuY2hvcicpLCBoZWFkOiB0aGlzLmdldEN1cnNvcignaGVhZCcpfV07CiAgICByZXR1cm4gcmFuZ2VzLm1hcChmdW5jdGlvbihyKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgYW5jaG9yOiB0aGlzLmNsaXBQb3ModG9DbVBvcyhyLmN1cnNvciA9PSByLmVuZCA/IHIuc3RhcnQgOiByLmVuZCkpLAogICAgICAgIGhlYWQ6IHRoaXMuY2xpcFBvcyh0b0NtUG9zKHIuY3Vyc29yKSkKICAgICAgfTsKICAgIH0sIHRoaXMpOwogIH07CiAgdGhpcy5zZXRTZWxlY3Rpb25zID0gZnVuY3Rpb24ocCwgcHJpbUluZGV4KSB7CiAgICB2YXIgc2VsID0gdGhpcy5hY2UubXVsdGlTZWxlY3Q7CiAgICB2YXIgcmFuZ2VzID0gcC5tYXAoZnVuY3Rpb24oeCkgewogICAgICB2YXIgYW5jaG9yID0gdG9BY2VQb3MoeC5hbmNob3IpOwogICAgICB2YXIgaGVhZCA9IHRvQWNlUG9zKHguaGVhZCk7CiAgICAgIHZhciByID0gUmFuZ2UuY29tcGFyZVBvaW50cyhhbmNob3IsIGhlYWQpIDwgMAogICAgICAgID8gbmV3IFJhbmdlLmZyb21Qb2ludHMoYW5jaG9yLCBoZWFkKQogICAgICAgIDogbmV3IFJhbmdlLmZyb21Qb2ludHMoaGVhZCwgYW5jaG9yKTsKICAgICAgci5jdXJzb3IgPSBSYW5nZS5jb21wYXJlUG9pbnRzKHIuc3RhcnQsIGhlYWQpID8gci5lbmQgOiByLnN0YXJ0OwogICAgICByZXR1cm4gcjsKICAgIH0pOwogICAgCiAgICBpZiAodGhpcy5hY2UuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICB0aGlzLmFjZS5zZWxlY3Rpb24uZnJvbU9yaWVudGVkUmFuZ2UocmFuZ2VzWzBdKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFwcmltSW5kZXgpIHsKICAgICAgICByYW5nZXMgPSByYW5nZXMucmV2ZXJzZSgpOwogICAgfSBlbHNlIGlmIChyYW5nZXNbcHJpbUluZGV4XSkgewogICAgICAgcmFuZ2VzLnB1c2gocmFuZ2VzLnNwbGljZShwcmltSW5kZXgsIDEpWzBdKTsKICAgIH0KICAgIHNlbC50b1NpbmdsZVJhbmdlKHJhbmdlc1swXS5jbG9uZSgpKTsKICAgIHZhciBzZXNzaW9uID0gdGhpcy5hY2Uuc2Vzc2lvbjsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uJGNsaXBSYW5nZVRvRG9jdW1lbnQocmFuZ2VzW2ldKTsgLy8gdG9kbyB3aHkgYWNlIGRvZXNuJ3QgZG8gdGhpcz8KICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTsKICAgIH0KICB9OwogIHRoaXMuc2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oYSwgaCwgb3B0aW9ucykgewogICAgdmFyIHNlbCA9IHRoaXMuYWNlLnNlbGVjdGlvbjsKICAgIHNlbC5tb3ZlVG8oYS5saW5lLCBhLmNoKTsKICAgIHNlbC5zZWxlY3RUbyhoLmxpbmUsIGguY2gpOwogICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vcmlnaW4gPT0gJyptb3VzZScpIHsKICAgICAgdGhpcy5vbkJlZm9yZUVuZE9wZXJhdGlvbigpOwogICAgfQogIH07CiAgdGhpcy5zb21ldGhpbmdTZWxlY3RlZCA9IGZ1bmN0aW9uKHApIHsKICAgIHJldHVybiAhdGhpcy5hY2Uuc2VsZWN0aW9uLmlzRW1wdHkoKTsKICB9OwogIHRoaXMuY2xpcFBvcyA9IGZ1bmN0aW9uKHApIHsKICAgIHZhciBwb3MgPSB0aGlzLmFjZS5zZXNzaW9uLiRjbGlwUG9zaXRpb25Ub0RvY3VtZW50KHAubGluZSwgcC5jaCk7CiAgICByZXR1cm4gdG9DbVBvcyhwb3MpOwogIH07CiAgdGhpcy5tYXJrVGV4dCA9IGZ1bmN0aW9uKGN1cnNvcikgewogICAgcmV0dXJuIHtjbGVhcjogZnVuY3Rpb24oKSB7fSwgZmluZDogZnVuY3Rpb24oKSB7fX07CiAgfTsKICB0aGlzLiR1cGRhdGVNYXJrZXJzID0gZnVuY3Rpb24oZGVsdGEpIHsKICAgIHZhciBpc0luc2VydCA9IGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IjsKICAgIHZhciBzdGFydCA9IGRlbHRhLnN0YXJ0OwogICAgdmFyIGVuZCA9IGRlbHRhLmVuZDsKICAgIHZhciByb3dTaGlmdCA9IChlbmQucm93IC0gc3RhcnQucm93KSAqIChpc0luc2VydCA/IDEgOiAtMSk7CiAgICB2YXIgY29sU2hpZnQgPSAoZW5kLmNvbHVtbiAtIHN0YXJ0LmNvbHVtbikgKiAoaXNJbnNlcnQgPyAxIDogLTEpOwogICAgaWYgKGlzSW5zZXJ0KSBlbmQgPSBzdGFydDsKICAgIAogICAgZm9yICh2YXIgaSBpbiB0aGlzLm1hcmtzKSB7CiAgICAgIHZhciBwb2ludCA9IHRoaXMubWFya3NbaV07CiAgICAgIHZhciBjbXAgPSBSYW5nZS5jb21wYXJlUG9pbnRzKHBvaW50LCBzdGFydCk7CiAgICAgIGlmIChjbXAgPCAwKSB7CiAgICAgICAgY29udGludWU7IC8vIGRlbHRhIHN0YXJ0cyBhZnRlciB0aGUgcmFuZ2UKICAgICAgfQogICAgICBpZiAoY21wID09PSAwKSB7CiAgICAgICAgaWYgKGlzSW5zZXJ0KSB7CiAgICAgICAgICBpZiAocG9pbnQuYmlhcyA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IDE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwb2ludC5iaWFzID0gLTE7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgY21wMiA9IGlzSW5zZXJ0ID8gY21wIDogUmFuZ2UuY29tcGFyZVBvaW50cyhwb2ludCwgZW5kKTsKICAgICAgaWYgKGNtcDIgPiAwKSB7CiAgICAgICAgcG9pbnQucm93ICs9IHJvd1NoaWZ0OwogICAgICAgIHBvaW50LmNvbHVtbiArPSBwb2ludC5yb3cgPT0gZW5kLnJvdyA/IGNvbFNoaWZ0IDogMDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoIWlzSW5zZXJ0ICYmIGNtcDIgPD0gMCkgewogICAgICAgIHBvaW50LnJvdyA9IHN0YXJ0LnJvdzsKICAgICAgICBwb2ludC5jb2x1bW4gPSBzdGFydC5jb2x1bW47CiAgICAgICAgaWYgKGNtcDIgPT09IDApCiAgICAgICAgICBwb2ludC5iaWFzID0gMTsKICAgICAgfQogICAgfQogIH07CiAgdmFyIE1hcmtlciA9IGZ1bmN0aW9uKGNtLCBpZCwgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuY20gPSBjbTsKICAgIHRoaXMuaWQgPSBpZDsKICAgIHRoaXMucm93ID0gcm93OwogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICBjbS5tYXJrc1t0aGlzLmlkXSA9IHRoaXM7CiAgfTsKICBNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7IGRlbGV0ZSB0aGlzLmNtLm1hcmtzW3RoaXMuaWRdIH07CiAgTWFya2VyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oKSB7IHJldHVybiB0b0NtUG9zKHRoaXMpIH07CiAgdGhpcy5zZXRCb29rbWFyayA9IGZ1bmN0aW9uKGN1cnNvciwgb3B0aW9ucykgewogICAgdmFyIGJtID0gbmV3IE1hcmtlcih0aGlzLCB0aGlzLiR1aWQrKywgY3Vyc29yLmxpbmUsIGN1cnNvci5jaCk7CiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMuaW5zZXJ0TGVmdCkKICAgICAgYm0uJGluc2VydFJpZ2h0ID0gdHJ1ZTsKICAgIHRoaXMubWFya3NbYm0uaWRdID0gYm07CiAgICByZXR1cm4gYm07CiAgfTsKICB0aGlzLm1vdmVIID0gZnVuY3Rpb24oaW5jcmVtZW50LCB1bml0KSB7CiAgICBpZiAodW5pdCA9PSAnY2hhcicpIHsKICAgICAgdmFyIHNlbCA9IHRoaXMuYWNlLnNlbGVjdGlvbjsKICAgICAgc2VsLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgIHNlbC5tb3ZlQ3Vyc29yQnkoMCwgaW5jcmVtZW50KTsKICAgIH0KICB9OwogIHRoaXMuZmluZFBvc1YgPSBmdW5jdGlvbihzdGFydCwgYW1vdW50LCB1bml0LCBnb2FsQ29sdW1uKSB7CiAgICBpZiAodW5pdCA9PSAncGFnZScpIHsKICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5hY2UucmVuZGVyZXI7CiAgICAgIHZhciBjb25maWcgPSByZW5kZXJlci5sYXllckNvbmZpZzsKICAgICAgYW1vdW50ID0gYW1vdW50ICogTWF0aC5mbG9vcihjb25maWcuaGVpZ2h0IC8gY29uZmlnLmxpbmVIZWlnaHQpOwogICAgICB1bml0ID0gJ2xpbmUnOwogICAgfQogICAgaWYgKHVuaXQgPT0gJ2xpbmUnKSB7CiAgICAgIHZhciBzY3JlZW5Qb3MgPSB0aGlzLmFjZS5zZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbihzdGFydC5saW5lLCBzdGFydC5jaCk7CiAgICAgIGlmIChnb2FsQ29sdW1uICE9IG51bGwpCiAgICAgICAgc2NyZWVuUG9zLmNvbHVtbiA9IGdvYWxDb2x1bW47CiAgICAgIHNjcmVlblBvcy5yb3cgKz0gYW1vdW50OwogICAgICBzY3JlZW5Qb3Mucm93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgc2NyZWVuUG9zLnJvdyksIHRoaXMuYWNlLnNlc3Npb24uZ2V0U2NyZWVuTGVuZ3RoKCkgLSAxKTsKICAgICAgdmFyIHBvcyA9IHRoaXMuYWNlLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHNjcmVlblBvcy5yb3csIHNjcmVlblBvcy5jb2x1bW4pOwogICAgICByZXR1cm4gdG9DbVBvcyhwb3MpOwogICAgfSBlbHNlIHsKICAgICAgZGVidWdnZXI7CiAgICB9CiAgfTsKICB0aGlzLmNoYXJDb29yZHMgPSBmdW5jdGlvbihwb3MsIG1vZGUpIHsKICAgIGlmIChtb2RlID09ICdkaXYnIHx8ICFtb2RlKSB7CiAgICAgIHZhciBzYyA9IHRoaXMuYWNlLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHBvcy5saW5lLCBwb3MuY2gpOwogICAgICByZXR1cm4ge2xlZnQ6IHNjLmNvbHVtbiwgdG9wOiBzYy5yb3d9OwogICAgfWlmIChtb2RlID09ICdsb2NhbCcpIHsKICAgICAgdmFyIHJlbmRlcmVyID0gdGhpcy5hY2UucmVuZGVyZXI7CiAgICAgIHZhciBzYyA9IHRoaXMuYWNlLnNlc3Npb24uZG9jdW1lbnRUb1NjcmVlblBvc2l0aW9uKHBvcy5saW5lLCBwb3MuY2gpOwogICAgICB2YXIgbGggPSByZW5kZXJlci5sYXllckNvbmZpZy5saW5lSGVpZ2h0OwogICAgICB2YXIgY3cgPSByZW5kZXJlci5sYXllckNvbmZpZy5jaGFyYWN0ZXJXaWR0aDsKICAgICAgdmFyIHRvcCA9IGxoICogc2Mucm93OwogICAgICByZXR1cm4ge2xlZnQ6IHNjLmNvbHVtbiAqIGN3LCB0b3A6IHRvcCwgYm90dG9tOiB0b3AgKyBsaH07CiAgICB9CiAgfTsKICB0aGlzLmNvb3Jkc0NoYXIgPSBmdW5jdGlvbihwb3MsIG1vZGUpIHsKICAgIHZhciByZW5kZXJlciA9IHRoaXMuYWNlLnJlbmRlcmVyOwogICAgaWYgKG1vZGUgPT0gJ2xvY2FsJykgewogICAgICB2YXIgcm93ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihwb3MudG9wIC8gcmVuZGVyZXIubGluZUhlaWdodCkpOwogICAgICB2YXIgY29sID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcihwb3MubGVmdCAvIHJlbmRlcmVyLmNoYXJhY3RlcldpZHRoKSk7CiAgICAgIHZhciBjaCA9IHJlbmRlcmVyLnNlc3Npb24uc2NyZWVuVG9Eb2N1bWVudFBvc2l0aW9uKHJvdywgY29sKTsKICAgICAgcmV0dXJuIHRvQ21Qb3MoY2gpOwogICAgfSBlbHNlIGlmIChtb2RlID09ICdkaXYnKSB7CiAgICAgIHRocm93ICJub3QgaW1wbGVtZW50ZWQiOwogICAgfQogIH07CiAgdGhpcy5nZXRTZWFyY2hDdXJzb3IgPSBmdW5jdGlvbihxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAgdmFyIGNhc2VTZW5zaXRpdmUgPSBmYWxzZTsKICAgIHZhciBpc1JlZ2V4cCA9IGZhbHNlOwogICAgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgUmVnRXhwICYmICFxdWVyeS5nbG9iYWwpIHsKICAgICAgY2FzZVNlbnNpdGl2ZSA9ICFxdWVyeS5pZ25vcmVDYXNlOwogICAgICBxdWVyeSA9IHF1ZXJ5LnNvdXJjZTsKICAgICAgaXNSZWdleHAgPSB0cnVlOwogICAgfQogICAgdmFyIHNlYXJjaCA9IG5ldyBTZWFyY2goKTsKICAgIGlmIChwb3MuY2ggPT0gdW5kZWZpbmVkKSBwb3MuY2ggPSBOdW1iZXIuTUFYX1ZBTFVFOwogICAgdmFyIGFjZVBvcyA9IHtyb3c6IHBvcy5saW5lLCBjb2x1bW46IHBvcy5jaH07CiAgICB2YXIgY20gPSB0aGlzOwogICAgdmFyIGxhc3QgPSBudWxsOwogICAgcmV0dXJuIHsKICAgICAgZmluZE5leHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5maW5kKGZhbHNlKSB9LAogICAgICBmaW5kUHJldmlvdXM6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLmZpbmQodHJ1ZSkgfSwKICAgICAgZmluZDogZnVuY3Rpb24oYmFjaykgewogICAgICAgIHNlYXJjaC5zZXRPcHRpb25zKHsKICAgICAgICAgIG5lZWRsZTogcXVlcnksCiAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLAogICAgICAgICAgd3JhcDogZmFsc2UsCiAgICAgICAgICBiYWNrd2FyZHM6IGJhY2ssCiAgICAgICAgICByZWdFeHA6IGlzUmVnZXhwLAogICAgICAgICAgc3RhcnQ6IGxhc3QgfHwgYWNlUG9zCiAgICAgICAgfSk7CiAgICAgICAgdmFyIHJhbmdlID0gc2VhcmNoLmZpbmQoY20uYWNlLnNlc3Npb24pOwogICAgICAgIGlmIChyYW5nZSAmJiByYW5nZS5pc0VtcHR5KCkpIHsKICAgICAgICAgIGlmIChjbS5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdykubGVuZ3RoID09IHJhbmdlLnN0YXJ0LmNvbHVtbikgewogICAgICAgICAgICBzZWFyY2guJG9wdGlvbnMuc3RhcnQgPSByYW5nZTsKICAgICAgICAgICAgcmFuZ2UgPSBzZWFyY2guZmluZChjbS5hY2Uuc2Vzc2lvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxhc3QgPSByYW5nZTsKICAgICAgICByZXR1cm4gbGFzdDsKICAgICAgfSwKICAgICAgZnJvbTogZnVuY3Rpb24oKSB7IHJldHVybiBsYXN0ICYmIHRvQ21Qb3MobGFzdC5zdGFydCkgfSwKICAgICAgdG86IGZ1bmN0aW9uKCkgeyByZXR1cm4gbGFzdCAmJiB0b0NtUG9zKGxhc3QuZW5kKSB9LAogICAgICByZXBsYWNlOiBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgaWYgKGxhc3QpIHsKICAgICAgICAgIGxhc3QuZW5kID0gY20uYWNlLnNlc3Npb24uZG9jLnJlcGxhY2UobGFzdCwgdGV4dCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH07CiAgdGhpcy5zY3JvbGxUbyA9IGZ1bmN0aW9uKHgsIHkpIHsKICAgIHZhciByZW5kZXJlciA9IHRoaXMuYWNlLnJlbmRlcmVyOwogICAgdmFyIGNvbmZpZyA9IHJlbmRlcmVyLmxheWVyQ29uZmlnOwogICAgdmFyIG1heEhlaWdodCA9IGNvbmZpZy5tYXhIZWlnaHQ7CiAgICBtYXhIZWlnaHQgLT0gKHJlbmRlcmVyLiRzaXplLnNjcm9sbGVySGVpZ2h0IC0gcmVuZGVyZXIubGluZUhlaWdodCkgKiByZW5kZXJlci4kc2Nyb2xsUGFzdEVuZDsKICAgIGlmICh5ICE9IG51bGwpIHRoaXMuYWNlLnNlc3Npb24uc2V0U2Nyb2xsVG9wKE1hdGgubWF4KDAsIE1hdGgubWluKHksIG1heEhlaWdodCkpKTsKICAgIGlmICh4ICE9IG51bGwpIHRoaXMuYWNlLnNlc3Npb24uc2V0U2Nyb2xsTGVmdChNYXRoLm1heCgwLCBNYXRoLm1pbih4LCBjb25maWcud2lkdGgpKSk7CiAgfTsKICB0aGlzLnNjcm9sbEluZm8gPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07CiAgdGhpcy5zY3JvbGxJbnRvVmlldyA9IGZ1bmN0aW9uKHBvcywgbWFyZ2luKSB7CiAgICBpZiAocG9zKSB7CiAgICAgIHZhciByZW5kZXJlciA9IHRoaXMuYWNlLnJlbmRlcmVyOwogICAgICB2YXIgdmlld01hcmdpbiA9IHsgInRvcCI6IDAsICJib3R0b20iOiBtYXJnaW4gfTsKICAgICAgcmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcodG9BY2VQb3MocG9zKSwKICAgICAgICAocmVuZGVyZXIubGluZUhlaWdodCAqIDIpIC8gcmVuZGVyZXIuJHNpemUuc2Nyb2xsZXJIZWlnaHQsIHZpZXdNYXJnaW4pOwogICAgfQogIH07CiAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7IHJldHVybiB0aGlzLmFjZS5zZXNzaW9uLmdldExpbmUocm93KSB9OwogIHRoaXMuZ2V0UmFuZ2UgPSBmdW5jdGlvbihzLCBlKSB7CiAgICByZXR1cm4gdGhpcy5hY2Uuc2Vzc2lvbi5nZXRUZXh0UmFuZ2UobmV3IFJhbmdlKHMubGluZSwgcy5jaCwgZS5saW5lLCBlLmNoKSk7CiAgfTsKICB0aGlzLnJlcGxhY2VSYW5nZSA9IGZ1bmN0aW9uKHRleHQsIHMsIGUpIHsKICAgIGlmICghZSkgZSA9IHM7CiAgICByZXR1cm4gdGhpcy5hY2Uuc2Vzc2lvbi5yZXBsYWNlKG5ldyBSYW5nZShzLmxpbmUsIHMuY2gsIGUubGluZSwgZS5jaCksIHRleHQpOwogIH07CiAgdGhpcy5yZXBsYWNlU2VsZWN0aW9ucyA9IGZ1bmN0aW9uKHApIHsKICAgIHZhciBzZWwgPSB0aGlzLmFjZS5zZWxlY3Rpb247CiAgICBpZiAodGhpcy5hY2UuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSkgewogICAgICB0aGlzLmFjZS5zZXNzaW9uLnJlcGxhY2Uoc2VsLmdldFJhbmdlKCksIHBbMF0gfHwgIiIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzZWwuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IHRydWU7CiAgICB2YXIgcmFuZ2VzID0gc2VsLnJhbmdlTGlzdC5yYW5nZXM7CiAgICBpZiAoIXJhbmdlcy5sZW5ndGgpIHJhbmdlcyA9IFt0aGlzLmFjZS5tdWx0aVNlbGVjdC5nZXRSYW5nZSgpXTsKICAgIGZvciAodmFyIGkgPSByYW5nZXMubGVuZ3RoOyBpLS07KQogICAgICAgdGhpcy5hY2Uuc2Vzc2lvbi5yZXBsYWNlKHJhbmdlc1tpXSwgcFtpXSB8fCAiIik7CiAgICBzZWwuaW5WaXJ0dWFsU2VsZWN0aW9uTW9kZSA9IGZhbHNlOwogIH07CiAgdGhpcy5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmFjZS5nZXRTZWxlY3RlZFRleHQoKTsKICB9OwogIHRoaXMuZ2V0U2VsZWN0aW9ucyA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMubGlzdFNlbGVjdGlvbnMoKS5tYXAoZnVuY3Rpb24oeCkgewogICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZSh4LmFuY2hvciwgeC5oZWFkKTsKICAgIH0sIHRoaXMpOwogIH07CiAgdGhpcy5nZXRJbnB1dEZpZWxkID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5hY2UudGV4dElucHV0LmdldEVsZW1lbnQoKTsKICB9OwogIHRoaXMuZ2V0V3JhcHBlckVsZW1lbnQgPSBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmFjZS5jb250YWluZXI7CiAgfTsKICB2YXIgb3B0TWFwID0gewogICAgaW5kZW50V2l0aFRhYnM6ICJ1c2VTb2Z0VGFicyIsCiAgICBpbmRlbnRVbml0OiAidGFiU2l6ZSIsCiAgICB0YWJTaXplOiAidGFiU2l6ZSIsCiAgICBmaXJzdExpbmVOdW1iZXI6ICJmaXJzdExpbmVOdW1iZXIiLAogICAgcmVhZE9ubHk6ICJyZWFkT25seSIKICB9OwogIHRoaXMuc2V0T3B0aW9uID0gZnVuY3Rpb24obmFtZSwgdmFsKSB7CiAgICB0aGlzLnN0YXRlW25hbWVdID0gdmFsOwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgIGNhc2UgJ2luZGVudFdpdGhUYWJzJzoKICAgICAgICBuYW1lID0gb3B0TWFwW25hbWVdOwogICAgICAgIHZhbCA9ICF2YWw7CiAgICAgIGJyZWFrOwogICAgICBjYXNlICdrZXlNYXAnOgogICAgICAgIHRoaXMuc3RhdGUuJGtleU1hcCA9IHZhbDsKICAgICAgICByZXR1cm47CiAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIG5hbWUgPSBvcHRNYXBbbmFtZV07CiAgICB9CiAgICBpZiAobmFtZSkKICAgICAgdGhpcy5hY2Uuc2V0T3B0aW9uKG5hbWUsIHZhbCk7CiAgfTsKICB0aGlzLmdldE9wdGlvbiA9IGZ1bmN0aW9uKG5hbWUsIHZhbCkgewogICAgdmFyIGFjZU9wdCA9IG9wdE1hcFtuYW1lXTsKICAgIGlmIChhY2VPcHQpCiAgICAgIHZhbCA9IHRoaXMuYWNlLmdldE9wdGlvbihhY2VPcHQpOwogICAgc3dpdGNoIChuYW1lKSB7CiAgICAgIGNhc2UgJ2luZGVudFdpdGhUYWJzJzoKICAgICAgICBuYW1lID0gb3B0TWFwW25hbWVdOwogICAgICAgIHJldHVybiAhdmFsOwogICAgICBjYXNlICdrZXlNYXAnOgogICAgICAgIHJldHVybiB0aGlzLnN0YXRlLiRrZXlNYXA7CiAgICB9CiAgICByZXR1cm4gYWNlT3B0ID8gdmFsIDogdGhpcy5zdGF0ZVtuYW1lXTsKICB9OwogIHRoaXMudG9nZ2xlT3ZlcndyaXRlID0gZnVuY3Rpb24ob24pIHsKICAgIHRoaXMuc3RhdGUub3ZlcndyaXRlID0gb247CiAgICByZXR1cm4gdGhpcy5hY2Uuc2V0T3ZlcndyaXRlKG9uKTsKICB9OwogIHRoaXMuYWRkT3ZlcmxheSA9IGZ1bmN0aW9uKG8pIHsKICAgIGlmICghdGhpcy4kc2VhcmNoSGlnaGxpZ2h0IHx8ICF0aGlzLiRzZWFyY2hIaWdobGlnaHQuc2Vzc2lvbikgewogICAgICB2YXIgaGlnaGxpZ2h0ID0gbmV3IFNlYXJjaEhpZ2hsaWdodChudWxsLCAiYWNlX2hpZ2hsaWdodC1tYXJrZXIiLCAidGV4dCIpOwogICAgICB2YXIgbWFya2VyID0gdGhpcy5hY2Uuc2Vzc2lvbi5hZGREeW5hbWljTWFya2VyKGhpZ2hsaWdodCk7CiAgICAgIGhpZ2hsaWdodC5pZCA9IG1hcmtlci5pZDsKICAgICAgaGlnaGxpZ2h0LnNlc3Npb24gPSB0aGlzLmFjZS5zZXNzaW9uOwogICAgICBoaWdobGlnaHQuZGVzdHJveSA9IGZ1bmN0aW9uKG8pIHsKICAgICAgICBoaWdobGlnaHQuc2Vzc2lvbi5vZmYoImNoYW5nZSIsIGhpZ2hsaWdodC51cGRhdGVPbkNoYW5nZSk7CiAgICAgICAgaGlnaGxpZ2h0LnNlc3Npb24ub2ZmKCJjaGFuZ2VFZGl0b3IiLCBoaWdobGlnaHQuZGVzdHJveSk7CiAgICAgICAgaGlnaGxpZ2h0LnNlc3Npb24ucmVtb3ZlTWFya2VyKGhpZ2hsaWdodC5pZCk7CiAgICAgICAgaGlnaGxpZ2h0LnNlc3Npb24gPSBudWxsOwogICAgICB9OwogICAgICBoaWdobGlnaHQudXBkYXRlT25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICAgICAgaWYgKHJvdyA9PSBkZWx0YS5lbmQucm93KSBoaWdobGlnaHQuY2FjaGVbcm93XSA9IHVuZGVmaW5lZDsKICAgICAgICBlbHNlIGhpZ2hsaWdodC5jYWNoZS5zcGxpY2Uocm93LCBoaWdobGlnaHQuY2FjaGUubGVuZ3RoKTsKICAgICAgfTsKICAgICAgaGlnaGxpZ2h0LnNlc3Npb24ub24oImNoYW5nZUVkaXRvciIsIGhpZ2hsaWdodC5kZXN0cm95KTsKICAgICAgaGlnaGxpZ2h0LnNlc3Npb24ub24oImNoYW5nZSIsIGhpZ2hsaWdodC51cGRhdGVPbkNoYW5nZSk7CiAgICB9CiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKG8ucXVlcnkuc291cmNlLCAiZ21pIik7CiAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQgPSBvLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKICAgIHRoaXMuJHNlYXJjaEhpZ2hsaWdodC5zZXRSZWdleHAocmUpOwogICAgdGhpcy5hY2UucmVuZGVyZXIudXBkYXRlQmFja01hcmtlcnMoKTsKICB9OwogIHRoaXMucmVtb3ZlT3ZlcmxheSA9IGZ1bmN0aW9uKG8pIHsKICAgIGlmICh0aGlzLiRzZWFyY2hIaWdobGlnaHQgJiYgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0LnNlc3Npb24pIHsKICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0LmRlc3Ryb3koKTsKICAgIH0KICB9OwogIHRoaXMuZ2V0U2Nyb2xsSW5mbyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHJlbmRlcmVyID0gdGhpcy5hY2UucmVuZGVyZXI7CiAgICB2YXIgY29uZmlnID0gcmVuZGVyZXIubGF5ZXJDb25maWc7CiAgICByZXR1cm4gewogICAgICBsZWZ0OiByZW5kZXJlci5zY3JvbGxMZWZ0LAogICAgICB0b3A6IHJlbmRlcmVyLnNjcm9sbFRvcCwKICAgICAgaGVpZ2h0OiBjb25maWcubWF4SGVpZ2h0LAogICAgICB3aWR0aDogY29uZmlnLndpZHRoLAogICAgICBjbGllbnRIZWlnaHQ6IGNvbmZpZy5oZWlnaHQsCiAgICAgIGNsaWVudFdpZHRoOiBjb25maWcud2lkdGgKICAgIH07CiAgfTsKICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5hY2UuZ2V0VmFsdWUoKTsKICB9OwogIHRoaXMuc2V0VmFsdWUgPSBmdW5jdGlvbih2KSB7CiAgICByZXR1cm4gdGhpcy5hY2Uuc2V0VmFsdWUodiwgLTEpOwogIH07CiAgdGhpcy5nZXRUb2tlblR5cGVBdCA9IGZ1bmN0aW9uKHBvcykgewogICAgdmFyIHRva2VuID0gdGhpcy5hY2Uuc2Vzc2lvbi5nZXRUb2tlbkF0KHBvcy5saW5lLCBwb3MuY2gpOwogICAgcmV0dXJuIHRva2VuICYmIC9jb21tZW50fHN0cmluZy8udGVzdCh0b2tlbi50eXBlKSA/ICJzdHJpbmciIDogIiI7CiAgfTsKICB0aGlzLmZpbmRNYXRjaGluZ0JyYWNrZXQgPSBmdW5jdGlvbihwb3MpIHsKICAgIHZhciBtID0gdGhpcy5hY2Uuc2Vzc2lvbi5maW5kTWF0Y2hpbmdCcmFja2V0KHRvQWNlUG9zKHBvcykpOwogICAgcmV0dXJuIHt0bzogbSAmJiB0b0NtUG9zKG0pfTsKICB9OwogIHRoaXMuaW5kZW50TGluZSA9IGZ1bmN0aW9uKGxpbmUsIG1ldGhvZCkgewogICAgaWYgKG1ldGhvZCA9PT0gdHJ1ZSkKICAgICAgICB0aGlzLmFjZS5zZXNzaW9uLmluZGVudFJvd3MobGluZSwgbGluZSwgIlx0Iik7CiAgICBlbHNlIGlmIChtZXRob2QgPT09IGZhbHNlKQogICAgICAgIHRoaXMuYWNlLnNlc3Npb24ub3V0ZGVudFJvd3MobmV3IFJhbmdlKGxpbmUsIDAsIGxpbmUsIDApKTsKICB9OwogIHRoaXMuaW5kZXhGcm9tUG9zID0gZnVuY3Rpb24ocG9zKSB7CiAgICByZXR1cm4gdGhpcy5hY2Uuc2Vzc2lvbi5kb2MucG9zaXRpb25Ub0luZGV4KHRvQWNlUG9zKHBvcykpOwogIH07CiAgdGhpcy5wb3NGcm9tSW5kZXggPSBmdW5jdGlvbihpbmRleCkgewogICAgcmV0dXJuIHRvQ21Qb3ModGhpcy5hY2Uuc2Vzc2lvbi5kb2MuaW5kZXhUb1Bvc2l0aW9uKGluZGV4KSk7CiAgfTsKICB0aGlzLmZvY3VzID0gZnVuY3Rpb24oaW5kZXgpIHsKICAgIHJldHVybiB0aGlzLmFjZS50ZXh0SW5wdXQuZm9jdXMoKTsKICB9OwogIHRoaXMuYmx1ciA9IGZ1bmN0aW9uKGluZGV4KSB7CiAgICByZXR1cm4gdGhpcy5hY2UuYmx1cigpOwogIH07CiAgdGhpcy5kZWZhdWx0VGV4dEhlaWdodCA9IGZ1bmN0aW9uKGluZGV4KSB7CiAgICByZXR1cm4gdGhpcy5hY2UucmVuZGVyZXIubGF5ZXJDb25maWcubGluZUhlaWdodDsKICB9OwogIHRoaXMuc2NhbkZvckJyYWNrZXQgPSBmdW5jdGlvbihwb3MsIGRpciwgXywgb3B0aW9ucykgewogICAgdmFyIHJlID0gb3B0aW9ucy5icmFja2V0UmVnZXguc291cmNlOwogICAgdmFyIHRva2VuUmUgPSAvcGFyZW58dGV4dHxvcGVyYXRvcnx0YWcvOwogICAgaWYgKGRpciA9PSAxKSB7CiAgICAgIHZhciBtID0gdGhpcy5hY2Uuc2Vzc2lvbi4kZmluZENsb3NpbmdCcmFja2V0KHJlLnNsaWNlKDEsIDIpLCB0b0FjZVBvcyhwb3MpLCB0b2tlblJlKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBtID0gdGhpcy5hY2Uuc2Vzc2lvbi4kZmluZE9wZW5pbmdCcmFja2V0KHJlLnNsaWNlKC0yLCAtMSksIHtyb3c6IHBvcy5saW5lLCBjb2x1bW46IHBvcy5jaCArIDF9LCB0b2tlblJlKTsKICAgIH0KICAgIHJldHVybiBtICYmIHtwb3M6IHRvQ21Qb3MobSl9OwogIH07CiAgdGhpcy5yZWZyZXNoID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5hY2UucmVzaXplKHRydWUpOwogIH07CiAgdGhpcy5nZXRNb2RlID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4geyBuYW1lIDogdGhpcy5nZXRPcHRpb24oIm1vZGUiKSB9OwogIH07CiAgdGhpcy5leGVjQ29tbWFuZCA9IGZ1bmN0aW9uKCkgewoKICB9Owp9KS5jYWxsKENvZGVNaXJyb3IucHJvdG90eXBlKTsKICBmdW5jdGlvbiB0b0FjZVBvcyhjbVBvcykgewogICAgcmV0dXJuIHtyb3c6IGNtUG9zLmxpbmUsIGNvbHVtbjogY21Qb3MuY2h9OwogIH0KICBmdW5jdGlvbiB0b0NtUG9zKGFjZVBvcykgewogICAgcmV0dXJuIG5ldyBQb3MoYWNlUG9zLnJvdywgYWNlUG9zLmNvbHVtbik7CiAgfQoKICB2YXIgU3RyaW5nU3RyZWFtID0gQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBmdW5jdGlvbihzdHJpbmcsIHRhYlNpemUpIHsKICAgIHRoaXMucG9zID0gdGhpcy5zdGFydCA9IDA7CiAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODsKICAgIHRoaXMubGFzdENvbHVtblBvcyA9IHRoaXMubGFzdENvbHVtblZhbHVlID0gMDsKICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKICB9OwoKICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogICAgZW9sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPj0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCiAgICBzb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA9PSB0aGlzLmxpbmVTdGFydDt9LAogICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykgfHwgdW5kZWZpbmVkO30sCiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMucG9zIDwgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICAgIHJldHVybiB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MrKyk7CiAgICB9LAogICAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgICB2YXIgY2ggPSB0aGlzLnN0cmluZy5jaGFyQXQodGhpcy5wb3MpOwogICAgICBpZiAodHlwZW9mIG1hdGNoID09ICJzdHJpbmciKSB2YXIgb2sgPSBjaCA9PSBtYXRjaDsKICAgICAgZWxzZSB2YXIgb2sgPSBjaCAmJiAobWF0Y2gudGVzdCA/IG1hdGNoLnRlc3QoY2gpIDogbWF0Y2goY2gpKTsKICAgICAgaWYgKG9rKSB7Kyt0aGlzLnBvczsgcmV0dXJuIGNoO30KICAgIH0sCiAgICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7CiAgICAgIHdoaWxlICh0aGlzLmVhdChtYXRjaCkpe30KICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7CiAgICB9LAogICAgZWF0U3BhY2U6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgICAgd2hpbGUgKC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpKSArK3RoaXMucG9zOwogICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKICAgIH0sCiAgICBza2lwVG9FbmQ6IGZ1bmN0aW9uKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCiAgICBza2lwVG86IGZ1bmN0aW9uKGNoKSB7CiAgICAgIHZhciBmb3VuZCA9IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKTsKICAgICAgaWYgKGZvdW5kID4gLTEpIHt0aGlzLnBvcyA9IGZvdW5kOyByZXR1cm4gdHJ1ZTt9CiAgICB9LAogICAgYmFja1VwOiBmdW5jdGlvbihuKSB7dGhpcy5wb3MgLT0gbjt9LAogICAgY29sdW1uOiBmdW5jdGlvbigpIHsKICAgICAgdGhyb3cgIm5vdCBpbXBsZW1lbnRlZCI7CiAgICB9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKCkgewogICAgICB0aHJvdyAibm90IGltcGxlbWVudGVkIjsKICAgIH0sCiAgICBtYXRjaDogZnVuY3Rpb24ocGF0dGVybiwgY29uc3VtZSwgY2FzZUluc2Vuc2l0aXZlKSB7CiAgICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICAgIHZhciBjYXNlZCA9IGZ1bmN0aW9uKHN0cikge3JldHVybiBjYXNlSW5zZW5zaXRpdmUgPyBzdHIudG9Mb3dlckNhc2UoKSA6IHN0cjt9OwogICAgICAgIHZhciBzdWJzdHIgPSB0aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsIHBhdHRlcm4ubGVuZ3RoKTsKICAgICAgICBpZiAoY2FzZWQoc3Vic3RyKSA9PSBjYXNlZChwYXR0ZXJuKSkgewogICAgICAgICAgaWYgKGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBwYXR0ZXJuLmxlbmd0aDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnBvcykubWF0Y2gocGF0dGVybik7CiAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4ID4gMCkgcmV0dXJuIG51bGw7CiAgICAgICAgaWYgKG1hdGNoICYmIGNvbnN1bWUgIT09IGZhbHNlKSB0aGlzLnBvcyArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICB9CiAgICB9LAogICAgY3VycmVudDogZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJpbmcuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5wb3MpO30sCiAgICBoaWRlRmlyc3RDaGFyczogZnVuY3Rpb24obiwgaW5uZXIpIHsKICAgICAgdGhpcy5saW5lU3RhcnQgKz0gbjsKICAgICAgdHJ5IHsgcmV0dXJuIGlubmVyKCk7IH0KICAgICAgZmluYWxseSB7IHRoaXMubGluZVN0YXJ0IC09IG47IH0KICAgIH0KICB9OwpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbiA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7CiAgQ29kZU1pcnJvci5wcm90b3R5cGVbbmFtZV0gPSBmbjsKfTsKZG9tLmltcG9ydENzc1N0cmluZygiLm5vcm1hbC1tb2RlIC5hY2VfY3Vyc29ye1wKICAgIGJvcmRlcjogbm9uZTtcCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwwLDAsMC41KTtcCn1cCi5ub3JtYWwtbW9kZSAuYWNlX2hpZGRlbi1jdXJzb3JzIC5hY2VfY3Vyc29ye1wKICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcCiAgYm9yZGVyOiAxcHggc29saWQgcmVkO1wKICBvcGFjaXR5OiAwLjdcCn1cCi5hY2VfZGlhbG9nIHtcCiAgcG9zaXRpb246IGFic29sdXRlO1wKICBsZWZ0OiAwOyByaWdodDogMDtcCiAgYmFja2dyb3VuZDogaW5oZXJpdDtcCiAgei1pbmRleDogMTU7XAogIHBhZGRpbmc6IC4xZW0gLjhlbTtcCiAgb3ZlcmZsb3c6IGhpZGRlbjtcCiAgY29sb3I6IGluaGVyaXQ7XAp9XAouYWNlX2RpYWxvZy10b3Age1wKICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQ0NDtcCiAgdG9wOiAwO1wKfVwKLmFjZV9kaWFsb2ctYm90dG9tIHtcCiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM0NDQ7XAogIGJvdHRvbTogMDtcCn1cCi5hY2VfZGlhbG9nIGlucHV0IHtcCiAgYm9yZGVyOiBub25lO1wKICBvdXRsaW5lOiBub25lO1wKICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcCiAgd2lkdGg6IDIwZW07XAogIGNvbG9yOiBpbmhlcml0O1wKICBmb250LWZhbWlseTogbW9ub3NwYWNlO1wKfSIsICJ2aW1Nb2RlIik7CihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBkaWFsb2dEaXYoY20sIHRlbXBsYXRlLCBib3R0b20pIHsKICAgIHZhciB3cmFwID0gY20uYWNlLmNvbnRhaW5lcjsKICAgIHZhciBkaWFsb2c7CiAgICBkaWFsb2cgPSB3cmFwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgIGlmIChib3R0b20pCiAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAiYWNlX2RpYWxvZyBhY2VfZGlhbG9nLWJvdHRvbSI7CiAgICBlbHNlCiAgICAgIGRpYWxvZy5jbGFzc05hbWUgPSAiYWNlX2RpYWxvZyBhY2VfZGlhbG9nLXRvcCI7CgogICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PSAic3RyaW5nIikgewogICAgICBkaWFsb2cuaW5uZXJIVE1MID0gdGVtcGxhdGU7CiAgICB9IGVsc2UgeyAvLyBBc3N1bWluZyBpdCdzIGEgZGV0YWNoZWQgRE9NIGVsZW1lbnQuCiAgICAgIGRpYWxvZy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7CiAgICB9CiAgICByZXR1cm4gZGlhbG9nOwogIH0KCiAgZnVuY3Rpb24gY2xvc2VOb3RpZmljYXRpb24oY20sIG5ld1ZhbCkgewogICAgaWYgKGNtLnN0YXRlLmN1cnJlbnROb3RpZmljYXRpb25DbG9zZSkKICAgICAgY20uc3RhdGUuY3VycmVudE5vdGlmaWNhdGlvbkNsb3NlKCk7CiAgICBjbS5zdGF0ZS5jdXJyZW50Tm90aWZpY2F0aW9uQ2xvc2UgPSBuZXdWYWw7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkRpYWxvZyIsIGZ1bmN0aW9uKHRlbXBsYXRlLCBjYWxsYmFjaywgb3B0aW9ucykgewogICAgaWYgKHRoaXMudmlydHVhbFNlbGVjdGlvbk1vZGUoKSkgcmV0dXJuOwogICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CgogICAgY2xvc2VOb3RpZmljYXRpb24odGhpcywgbnVsbCk7CgogICAgdmFyIGRpYWxvZyA9IGRpYWxvZ0Rpdih0aGlzLCB0ZW1wbGF0ZSwgb3B0aW9ucy5ib3R0b20pOwogICAgdmFyIGNsb3NlZCA9IGZhbHNlLCBtZSA9IHRoaXM7CiAgICB0aGlzLnN0YXRlLmRpYWxvZyA9IGRpYWxvZzsKICAgIGZ1bmN0aW9uIGNsb3NlKG5ld1ZhbCkgewogICAgICBpZiAodHlwZW9mIG5ld1ZhbCA9PSAnc3RyaW5nJykgewogICAgICAgIGlucC52YWx1ZSA9IG5ld1ZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgICAgCiAgICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwudHlwZSA9PSAiYmx1ciIpIHsKICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBpbnApCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgbWUuc3RhdGUuZGlhbG9nID0gbnVsbDsKICAgICAgICBjbG9zZWQgPSB0cnVlOwogICAgICAgIGRpYWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAgICAgICAgbWUuZm9jdXMoKTsKCiAgICAgICAgaWYgKG9wdGlvbnMub25DbG9zZSkgb3B0aW9ucy5vbkNsb3NlKGRpYWxvZyk7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgaW5wID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdLCBidXR0b247CiAgICBpZiAoaW5wKSB7CiAgICAgIGlmIChvcHRpb25zLnZhbHVlKSB7CiAgICAgICAgaW5wLnZhbHVlID0gb3B0aW9ucy52YWx1ZTsKICAgICAgICBpZiAob3B0aW9ucy5zZWxlY3RWYWx1ZU9uT3BlbiAhPT0gZmFsc2UpIGlucC5zZWxlY3QoKTsKICAgICAgfQoKICAgICAgaWYgKG9wdGlvbnMub25JbnB1dCkKICAgICAgICBDb2RlTWlycm9yLm9uKGlucCwgImlucHV0IiwgZnVuY3Rpb24oZSkgeyBvcHRpb25zLm9uSW5wdXQoZSwgaW5wLnZhbHVlLCBjbG9zZSk7fSk7CiAgICAgIGlmIChvcHRpb25zLm9uS2V5VXApCiAgICAgICAgQ29kZU1pcnJvci5vbihpbnAsICJrZXl1cCIsIGZ1bmN0aW9uKGUpIHtvcHRpb25zLm9uS2V5VXAoZSwgaW5wLnZhbHVlLCBjbG9zZSk7fSk7CgogICAgICBDb2RlTWlycm9yLm9uKGlucCwgImtleWRvd24iLCBmdW5jdGlvbihlKSB7CiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vbktleURvd24gJiYgb3B0aW9ucy5vbktleURvd24oZSwgaW5wLnZhbHVlLCBjbG9zZSkpIHsgcmV0dXJuOyB9CiAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAxMykgY2FsbGJhY2soaW5wLnZhbHVlKTsKICAgICAgICBpZiAoZS5rZXlDb2RlID09IDI3IHx8IChvcHRpb25zLmNsb3NlT25FbnRlciAhPT0gZmFsc2UgJiYgZS5rZXlDb2RlID09IDEzKSkgewogICAgICAgICAgaW5wLmJsdXIoKTsKICAgICAgICAgIENvZGVNaXJyb3IuZV9zdG9wKGUpOwogICAgICAgICAgY2xvc2UoKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgaWYgKG9wdGlvbnMuY2xvc2VPbkJsdXIgIT09IGZhbHNlKSBDb2RlTWlycm9yLm9uKGlucCwgImJsdXIiLCBjbG9zZSk7CgogICAgICBpbnAuZm9jdXMoKTsKICAgIH0gZWxzZSBpZiAoYnV0dG9uID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKVswXSkgewogICAgICBDb2RlTWlycm9yLm9uKGJ1dHRvbiwgImNsaWNrIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgY2xvc2UoKTsKICAgICAgICBtZS5mb2N1cygpOwogICAgICB9KTsKCiAgICAgIGlmIChvcHRpb25zLmNsb3NlT25CbHVyICE9PSBmYWxzZSkgQ29kZU1pcnJvci5vbihidXR0b24sICJibHVyIiwgY2xvc2UpOwoKICAgICAgYnV0dG9uLmZvY3VzKCk7CiAgICB9CiAgICByZXR1cm4gY2xvc2U7CiAgfSk7CgogIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJvcGVuTm90aWZpY2F0aW9uIiwgZnVuY3Rpb24odGVtcGxhdGUsIG9wdGlvbnMpIHsKICAgIGlmICh0aGlzLnZpcnR1YWxTZWxlY3Rpb25Nb2RlKCkpIHJldHVybjsKICAgIGNsb3NlTm90aWZpY2F0aW9uKHRoaXMsIGNsb3NlKTsKICAgIHZhciBkaWFsb2cgPSBkaWFsb2dEaXYodGhpcywgdGVtcGxhdGUsIG9wdGlvbnMgJiYgb3B0aW9ucy5ib3R0b20pOwogICAgdmFyIGNsb3NlZCA9IGZhbHNlLCBkb25lVGltZXI7CiAgICB2YXIgZHVyYXRpb24gPSBvcHRpb25zICYmIHR5cGVvZiBvcHRpb25zLmR1cmF0aW9uICE9PSAidW5kZWZpbmVkIiA/IG9wdGlvbnMuZHVyYXRpb24gOiA1MDAwOwoKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgIGNsZWFyVGltZW91dChkb25lVGltZXIpOwogICAgICBkaWFsb2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaWFsb2cpOwogICAgfQoKICAgIENvZGVNaXJyb3Iub24oZGlhbG9nLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7CiAgICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgY2xvc2UoKTsKICAgIH0pOwoKICAgIGlmIChkdXJhdGlvbikKICAgICAgZG9uZVRpbWVyID0gc2V0VGltZW91dChjbG9zZSwgZHVyYXRpb24pOwoKICAgIHJldHVybiBjbG9zZTsKICB9KTsKfSkoKTsKCiAgCiAgdmFyIGRlZmF1bHRLZXltYXAgPSBbCiAgICB7IGtleXM6ICc8TGVmdD4nLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICdoJyB9LAogICAgeyBrZXlzOiAnPFJpZ2h0PicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJ2wnIH0sCiAgICB7IGtleXM6ICc8VXA+JywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnaycgfSwKICAgIHsga2V5czogJzxEb3duPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJ2onIH0sCiAgICB7IGtleXM6ICc8U3BhY2U+JywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnbCcgfSwKICAgIHsga2V5czogJzxCUz4nLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICdoJywgY29udGV4dDogJ25vcm1hbCd9LAogICAgeyBrZXlzOiAnPERlbD4nLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICd4JywgY29udGV4dDogJ25vcm1hbCd9LAogICAgeyBrZXlzOiAnPEMtU3BhY2U+JywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnVycgfSwKICAgIHsga2V5czogJzxDLUJTPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJ0InLCBjb250ZXh0OiAnbm9ybWFsJyB9LAogICAgeyBrZXlzOiAnPFMtU3BhY2U+JywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAndycgfSwKICAgIHsga2V5czogJzxTLUJTPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJ2InLCBjb250ZXh0OiAnbm9ybWFsJyB9LAogICAgeyBrZXlzOiAnPEMtbj4nLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICdqJyB9LAogICAgeyBrZXlzOiAnPEMtcD4nLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICdrJyB9LAogICAgeyBrZXlzOiAnPEMtWz4nLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICc8RXNjPicgfSwKICAgIHsga2V5czogJzxDLWM+JywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnPEVzYz4nIH0sCiAgICB7IGtleXM6ICc8Qy1bPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJzxFc2M+JywgY29udGV4dDogJ2luc2VydCcgfSwKICAgIHsga2V5czogJzxDLWM+JywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnPEVzYz4nLCBjb250ZXh0OiAnaW5zZXJ0JyB9LAogICAgeyBrZXlzOiAnPEMtRXNjPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJzxFc2M+JyB9LCAvLyBhY2VfcGF0Y2ggaXBhZCBrZXlib2FyZCBzZW5kcyBDLUVzYyBpbnN0ZWFkIG9mIEMtWwogICAgeyBrZXlzOiAnPEMtRXNjPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJzxFc2M+JywgY29udGV4dDogJ2luc2VydCcgfSwKICAgIHsga2V5czogJ3MnLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICdjbCcsIGNvbnRleHQ6ICdub3JtYWwnIH0sCiAgICB7IGtleXM6ICdzJywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnYycsIGNvbnRleHQ6ICd2aXN1YWwnfSwKICAgIHsga2V5czogJ1MnLCB0eXBlOiAna2V5VG9LZXknLCB0b0tleXM6ICdjYycsIGNvbnRleHQ6ICdub3JtYWwnIH0sCiAgICB7IGtleXM6ICdTJywgdHlwZTogJ2tleVRvS2V5JywgdG9LZXlzOiAnVmRPJywgY29udGV4dDogJ3Zpc3VhbCcgfSwKICAgIHsga2V5czogJzxIb21lPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJzAnIH0sCiAgICB7IGtleXM6ICc8RW5kPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJyQnIH0sCiAgICB7IGtleXM6ICc8UGFnZVVwPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJzxDLWI+JyB9LAogICAgeyBrZXlzOiAnPFBhZ2VEb3duPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJzxDLWY+JyB9LAogICAgeyBrZXlzOiAnPENSPicsIHR5cGU6ICdrZXlUb0tleScsIHRvS2V5czogJ2peJywgY29udGV4dDogJ25vcm1hbCcgfSwKICAgIHsga2V5czogJzxJbnM+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ3RvZ2dsZU92ZXJ3cml0ZScsIGNvbnRleHQ6ICdpbnNlcnQnIH0sCiAgICB7IGtleXM6ICdIJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVUb1RvcExpbmUnLCBtb3Rpb25BcmdzOiB7IGxpbmV3aXNlOiB0cnVlLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnTScsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9NaWRkbGVMaW5lJywgbW90aW9uQXJnczogeyBsaW5ld2lzZTogdHJ1ZSwgdG9KdW1wbGlzdDogdHJ1ZSB9fSwKICAgIHsga2V5czogJ0wnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZVRvQm90dG9tTGluZScsIG1vdGlvbkFyZ3M6IHsgbGluZXdpc2U6IHRydWUsIHRvSnVtcGxpc3Q6IHRydWUgfX0sCiAgICB7IGtleXM6ICdoJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeUNoYXJhY3RlcnMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH19LAogICAgeyBrZXlzOiAnbCcsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlDaGFyYWN0ZXJzJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlIH19LAogICAgeyBrZXlzOiAnaicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlMaW5lcycsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgbGluZXdpc2U6IHRydWUgfX0sCiAgICB7IGtleXM6ICdrJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeUxpbmVzJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiBmYWxzZSwgbGluZXdpc2U6IHRydWUgfX0sCiAgICB7IGtleXM6ICdnaicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlEaXNwbGF5TGluZXMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IHRydWUgfX0sCiAgICB7IGtleXM6ICdnaycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlEaXNwbGF5TGluZXMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH19LAogICAgeyBrZXlzOiAndycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlXb3JkcycsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgd29yZEVuZDogZmFsc2UgfX0sCiAgICB7IGtleXM6ICdXJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeVdvcmRzJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlLCB3b3JkRW5kOiBmYWxzZSwgYmlnV29yZDogdHJ1ZSB9fSwKICAgIHsga2V5czogJ2UnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5V29yZHMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IHRydWUsIHdvcmRFbmQ6IHRydWUsIGluY2x1c2l2ZTogdHJ1ZSB9fSwKICAgIHsga2V5czogJ0UnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5V29yZHMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IHRydWUsIHdvcmRFbmQ6IHRydWUsIGJpZ1dvcmQ6IHRydWUsIGluY2x1c2l2ZTogdHJ1ZSB9fSwKICAgIHsga2V5czogJ2InLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5V29yZHMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCB3b3JkRW5kOiBmYWxzZSB9fSwKICAgIHsga2V5czogJ0InLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5V29yZHMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCB3b3JkRW5kOiBmYWxzZSwgYmlnV29yZDogdHJ1ZSB9fSwKICAgIHsga2V5czogJ2dlJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeVdvcmRzJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiBmYWxzZSwgd29yZEVuZDogdHJ1ZSwgaW5jbHVzaXZlOiB0cnVlIH19LAogICAgeyBrZXlzOiAnZ0UnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5V29yZHMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCB3b3JkRW5kOiB0cnVlLCBiaWdXb3JkOiB0cnVlLCBpbmNsdXNpdmU6IHRydWUgfX0sCiAgICB7IGtleXM6ICd7JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeVBhcmFncmFwaCcsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogZmFsc2UsIHRvSnVtcGxpc3Q6IHRydWUgfX0sCiAgICB7IGtleXM6ICd9JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeVBhcmFncmFwaCcsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgdG9KdW1wbGlzdDogdHJ1ZSB9fSwKICAgIHsga2V5czogJygnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5U2VudGVuY2UnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH19LAogICAgeyBrZXlzOiAnKScsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlTZW50ZW5jZScsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSB9fSwKICAgIHsga2V5czogJzxDLWY+JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeVBhZ2UnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IHRydWUgfX0sCiAgICB7IGtleXM6ICc8Qy1iPicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlQYWdlJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiBmYWxzZSB9fSwKICAgIHsga2V5czogJzxDLWQ+JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVCeVNjcm9sbCcsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgZXhwbGljaXRSZXBlYXQ6IHRydWUgfX0sCiAgICB7IGtleXM6ICc8Qy11PicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlTY3JvbGwnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCBleHBsaWNpdFJlcGVhdDogdHJ1ZSB9fSwKICAgIHsga2V5czogJ2dnJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVUb0xpbmVPckVkZ2VPZkRvY3VtZW50JywgbW90aW9uQXJnczogeyBmb3J3YXJkOiBmYWxzZSwgZXhwbGljaXRSZXBlYXQ6IHRydWUsIGxpbmV3aXNlOiB0cnVlLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnRycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9MaW5lT3JFZGdlT2ZEb2N1bWVudCcsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgZXhwbGljaXRSZXBlYXQ6IHRydWUsIGxpbmV3aXNlOiB0cnVlLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnMCcsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9TdGFydE9mTGluZScgfSwKICAgIHsga2V5czogJ14nLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZVRvRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyJyB9LAogICAgeyBrZXlzOiAnKycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlMaW5lcycsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgdG9GaXJzdENoYXI6dHJ1ZSB9fSwKICAgIHsga2V5czogJy0nLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZUJ5TGluZXMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCB0b0ZpcnN0Q2hhcjp0cnVlIH19LAogICAgeyBrZXlzOiAnXycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlQnlMaW5lcycsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgdG9GaXJzdENoYXI6dHJ1ZSwgcmVwZWF0T2Zmc2V0Oi0xIH19LAogICAgeyBrZXlzOiAnJCcsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9Fb2wnLCBtb3Rpb25BcmdzOiB7IGluY2x1c2l2ZTogdHJ1ZSB9fSwKICAgIHsga2V5czogJyUnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZVRvTWF0Y2hlZFN5bWJvbCcsIG1vdGlvbkFyZ3M6IHsgaW5jbHVzaXZlOiB0cnVlLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnZjxjaGFyYWN0ZXI+JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVUb0NoYXJhY3RlcicsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSAsIGluY2x1c2l2ZTogdHJ1ZSB9fSwKICAgIHsga2V5czogJ0Y8Y2hhcmFjdGVyPicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9DaGFyYWN0ZXInLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH19LAogICAgeyBrZXlzOiAndDxjaGFyYWN0ZXI+JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVUaWxsQ2hhcmFjdGVyJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlLCBpbmNsdXNpdmU6IHRydWUgfX0sCiAgICB7IGtleXM6ICdUPGNoYXJhY3Rlcj4nLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnbW92ZVRpbGxDaGFyYWN0ZXInLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH19LAogICAgeyBrZXlzOiAnOycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdyZXBlYXRMYXN0Q2hhcmFjdGVyU2VhcmNoJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlIH19LAogICAgeyBrZXlzOiAnLCcsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdyZXBlYXRMYXN0Q2hhcmFjdGVyU2VhcmNoJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiBmYWxzZSB9fSwKICAgIHsga2V5czogJ1wnPGNoYXJhY3Rlcj4nLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnZ29Ub01hcmsnLCBtb3Rpb25BcmdzOiB7dG9KdW1wbGlzdDogdHJ1ZSwgbGluZXdpc2U6IHRydWV9fSwKICAgIHsga2V5czogJ2A8Y2hhcmFjdGVyPicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdnb1RvTWFyaycsIG1vdGlvbkFyZ3M6IHt0b0p1bXBsaXN0OiB0cnVlfX0sCiAgICB7IGtleXM6ICddYCcsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdqdW1wVG9NYXJrJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlIH0gfSwKICAgIHsga2V5czogJ1tgJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ2p1bXBUb01hcmsnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH0gfSwKICAgIHsga2V5czogJ11cJycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdqdW1wVG9NYXJrJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlLCBsaW5ld2lzZTogdHJ1ZSB9IH0sCiAgICB7IGtleXM6ICdbXCcnLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAnanVtcFRvTWFyaycsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogZmFsc2UsIGxpbmV3aXNlOiB0cnVlIH0gfSwKICAgIHsga2V5czogJ11wJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ3Bhc3RlJywgaXNFZGl0OiB0cnVlLCBhY3Rpb25BcmdzOiB7IGFmdGVyOiB0cnVlLCBpc0VkaXQ6IHRydWUsIG1hdGNoSW5kZW50OiB0cnVlfX0sCiAgICB7IGtleXM6ICdbcCcsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdwYXN0ZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBhZnRlcjogZmFsc2UsIGlzRWRpdDogdHJ1ZSwgbWF0Y2hJbmRlbnQ6IHRydWV9fSwKICAgIHsga2V5czogJ108Y2hhcmFjdGVyPicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9TeW1ib2wnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IHRydWUsIHRvSnVtcGxpc3Q6IHRydWV9fSwKICAgIHsga2V5czogJ1s8Y2hhcmFjdGVyPicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9TeW1ib2wnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCB0b0p1bXBsaXN0OiB0cnVlfX0sCiAgICB7IGtleXM6ICd8JywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVUb0NvbHVtbid9LAogICAgeyBrZXlzOiAnbycsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdtb3ZlVG9PdGhlckhpZ2hsaWdodGVkRW5kJywgY29udGV4dDondmlzdWFsJ30sCiAgICB7IGtleXM6ICdPJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ21vdmVUb090aGVySGlnaGxpZ2h0ZWRFbmQnLCBtb3Rpb25BcmdzOiB7c2FtZUxpbmU6IHRydWV9LCBjb250ZXh0Oid2aXN1YWwnfSwKICAgIHsga2V5czogJ2QnLCB0eXBlOiAnb3BlcmF0b3InLCBvcGVyYXRvcjogJ2RlbGV0ZScgfSwKICAgIHsga2V5czogJ3knLCB0eXBlOiAnb3BlcmF0b3InLCBvcGVyYXRvcjogJ3lhbmsnIH0sCiAgICB7IGtleXM6ICdjJywgdHlwZTogJ29wZXJhdG9yJywgb3BlcmF0b3I6ICdjaGFuZ2UnIH0sCiAgICB7IGtleXM6ICc9JywgdHlwZTogJ29wZXJhdG9yJywgb3BlcmF0b3I6ICdpbmRlbnRBdXRvJyB9LAogICAgeyBrZXlzOiAnPicsIHR5cGU6ICdvcGVyYXRvcicsIG9wZXJhdG9yOiAnaW5kZW50Jywgb3BlcmF0b3JBcmdzOiB7IGluZGVudFJpZ2h0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnPCcsIHR5cGU6ICdvcGVyYXRvcicsIG9wZXJhdG9yOiAnaW5kZW50Jywgb3BlcmF0b3JBcmdzOiB7IGluZGVudFJpZ2h0OiBmYWxzZSB9fSwKICAgIHsga2V5czogJ2d+JywgdHlwZTogJ29wZXJhdG9yJywgb3BlcmF0b3I6ICdjaGFuZ2VDYXNlJyB9LAogICAgeyBrZXlzOiAnZ3UnLCB0eXBlOiAnb3BlcmF0b3InLCBvcGVyYXRvcjogJ2NoYW5nZUNhc2UnLCBvcGVyYXRvckFyZ3M6IHt0b0xvd2VyOiB0cnVlfSwgaXNFZGl0OiB0cnVlIH0sCiAgICB7IGtleXM6ICdnVScsIHR5cGU6ICdvcGVyYXRvcicsIG9wZXJhdG9yOiAnY2hhbmdlQ2FzZScsIG9wZXJhdG9yQXJnczoge3RvTG93ZXI6IGZhbHNlfSwgaXNFZGl0OiB0cnVlIH0sCiAgICB7IGtleXM6ICduJywgdHlwZTogJ21vdGlvbicsIG1vdGlvbjogJ2ZpbmROZXh0JywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnTicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICdmaW5kTmV4dCcsIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogZmFsc2UsIHRvSnVtcGxpc3Q6IHRydWUgfX0sCiAgICB7IGtleXM6ICd4JywgdHlwZTogJ29wZXJhdG9yTW90aW9uJywgb3BlcmF0b3I6ICdkZWxldGUnLCBtb3Rpb246ICdtb3ZlQnlDaGFyYWN0ZXJzJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlIH0sIG9wZXJhdG9yTW90aW9uQXJnczogeyB2aXN1YWxMaW5lOiBmYWxzZSB9fSwKICAgIHsga2V5czogJ1gnLCB0eXBlOiAnb3BlcmF0b3JNb3Rpb24nLCBvcGVyYXRvcjogJ2RlbGV0ZScsIG1vdGlvbjogJ21vdmVCeUNoYXJhY3RlcnMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH0sIG9wZXJhdG9yTW90aW9uQXJnczogeyB2aXN1YWxMaW5lOiB0cnVlIH19LAogICAgeyBrZXlzOiAnRCcsIHR5cGU6ICdvcGVyYXRvck1vdGlvbicsIG9wZXJhdG9yOiAnZGVsZXRlJywgbW90aW9uOiAnbW92ZVRvRW9sJywgbW90aW9uQXJnczogeyBpbmNsdXNpdmU6IHRydWUgfSwgY29udGV4dDogJ25vcm1hbCd9LAogICAgeyBrZXlzOiAnRCcsIHR5cGU6ICdvcGVyYXRvcicsIG9wZXJhdG9yOiAnZGVsZXRlJywgb3BlcmF0b3JBcmdzOiB7IGxpbmV3aXNlOiB0cnVlIH0sIGNvbnRleHQ6ICd2aXN1YWwnfSwKICAgIHsga2V5czogJ1knLCB0eXBlOiAnb3BlcmF0b3JNb3Rpb24nLCBvcGVyYXRvcjogJ3lhbmsnLCBtb3Rpb246ICdleHBhbmRUb0xpbmUnLCBtb3Rpb25BcmdzOiB7IGxpbmV3aXNlOiB0cnVlIH0sIGNvbnRleHQ6ICdub3JtYWwnfSwKICAgIHsga2V5czogJ1knLCB0eXBlOiAnb3BlcmF0b3InLCBvcGVyYXRvcjogJ3lhbmsnLCBvcGVyYXRvckFyZ3M6IHsgbGluZXdpc2U6IHRydWUgfSwgY29udGV4dDogJ3Zpc3VhbCd9LAogICAgeyBrZXlzOiAnQycsIHR5cGU6ICdvcGVyYXRvck1vdGlvbicsIG9wZXJhdG9yOiAnY2hhbmdlJywgbW90aW9uOiAnbW92ZVRvRW9sJywgbW90aW9uQXJnczogeyBpbmNsdXNpdmU6IHRydWUgfSwgY29udGV4dDogJ25vcm1hbCd9LAogICAgeyBrZXlzOiAnQycsIHR5cGU6ICdvcGVyYXRvcicsIG9wZXJhdG9yOiAnY2hhbmdlJywgb3BlcmF0b3JBcmdzOiB7IGxpbmV3aXNlOiB0cnVlIH0sIGNvbnRleHQ6ICd2aXN1YWwnfSwKICAgIHsga2V5czogJ34nLCB0eXBlOiAnb3BlcmF0b3JNb3Rpb24nLCBvcGVyYXRvcjogJ2NoYW5nZUNhc2UnLCBtb3Rpb246ICdtb3ZlQnlDaGFyYWN0ZXJzJywgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlIH0sIG9wZXJhdG9yQXJnczogeyBzaG91bGRNb3ZlQ3Vyc29yOiB0cnVlIH0sIGNvbnRleHQ6ICdub3JtYWwnfSwKICAgIHsga2V5czogJ34nLCB0eXBlOiAnb3BlcmF0b3InLCBvcGVyYXRvcjogJ2NoYW5nZUNhc2UnLCBjb250ZXh0OiAndmlzdWFsJ30sCiAgICB7IGtleXM6ICc8Qy13PicsIHR5cGU6ICdvcGVyYXRvck1vdGlvbicsIG9wZXJhdG9yOiAnZGVsZXRlJywgbW90aW9uOiAnbW92ZUJ5V29yZHMnLCBtb3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCB3b3JkRW5kOiBmYWxzZSB9LCBjb250ZXh0OiAnaW5zZXJ0JyB9LAogICAgeyBrZXlzOiAnPEMtdz4nLCB0eXBlOiAnaWRsZScsIGNvbnRleHQ6ICdub3JtYWwnIH0sCiAgICB7IGtleXM6ICc8Qy1pPicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdqdW1wTGlzdFdhbGsnLCBhY3Rpb25BcmdzOiB7IGZvcndhcmQ6IHRydWUgfX0sCiAgICB7IGtleXM6ICc8Qy1vPicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdqdW1wTGlzdFdhbGsnLCBhY3Rpb25BcmdzOiB7IGZvcndhcmQ6IGZhbHNlIH19LAogICAgeyBrZXlzOiAnPEMtZT4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnc2Nyb2xsJywgYWN0aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlLCBsaW5ld2lzZTogdHJ1ZSB9fSwKICAgIHsga2V5czogJzxDLXk+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ3Njcm9sbCcsIGFjdGlvbkFyZ3M6IHsgZm9yd2FyZDogZmFsc2UsIGxpbmV3aXNlOiB0cnVlIH19LAogICAgeyBrZXlzOiAnYScsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdlbnRlckluc2VydE1vZGUnLCBpc0VkaXQ6IHRydWUsIGFjdGlvbkFyZ3M6IHsgaW5zZXJ0QXQ6ICdjaGFyQWZ0ZXInIH0sIGNvbnRleHQ6ICdub3JtYWwnIH0sCiAgICB7IGtleXM6ICdBJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2VudGVySW5zZXJ0TW9kZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBpbnNlcnRBdDogJ2VvbCcgfSwgY29udGV4dDogJ25vcm1hbCcgfSwKICAgIHsga2V5czogJ0EnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZW50ZXJJbnNlcnRNb2RlJywgaXNFZGl0OiB0cnVlLCBhY3Rpb25BcmdzOiB7IGluc2VydEF0OiAnZW5kT2ZTZWxlY3RlZEFyZWEnIH0sIGNvbnRleHQ6ICd2aXN1YWwnIH0sCiAgICB7IGtleXM6ICdpJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2VudGVySW5zZXJ0TW9kZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBpbnNlcnRBdDogJ2lucGxhY2UnIH0sIGNvbnRleHQ6ICdub3JtYWwnIH0sCiAgICB7IGtleXM6ICdJJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2VudGVySW5zZXJ0TW9kZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBpbnNlcnRBdDogJ2ZpcnN0Tm9uQmxhbmsnfSwgY29udGV4dDogJ25vcm1hbCcgfSwKICAgIHsga2V5czogJ0knLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZW50ZXJJbnNlcnRNb2RlJywgaXNFZGl0OiB0cnVlLCBhY3Rpb25BcmdzOiB7IGluc2VydEF0OiAnc3RhcnRPZlNlbGVjdGVkQXJlYScgfSwgY29udGV4dDogJ3Zpc3VhbCcgfSwKICAgIHsga2V5czogJ28nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnbmV3TGluZUFuZEVudGVySW5zZXJ0TW9kZScsIGlzRWRpdDogdHJ1ZSwgaW50ZXJsYWNlSW5zZXJ0UmVwZWF0OiB0cnVlLCBhY3Rpb25BcmdzOiB7IGFmdGVyOiB0cnVlIH0sIGNvbnRleHQ6ICdub3JtYWwnIH0sCiAgICB7IGtleXM6ICdPJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ25ld0xpbmVBbmRFbnRlckluc2VydE1vZGUnLCBpc0VkaXQ6IHRydWUsIGludGVybGFjZUluc2VydFJlcGVhdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBhZnRlcjogZmFsc2UgfSwgY29udGV4dDogJ25vcm1hbCcgfSwKICAgIHsga2V5czogJ3YnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAndG9nZ2xlVmlzdWFsTW9kZScgfSwKICAgIHsga2V5czogJ1YnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAndG9nZ2xlVmlzdWFsTW9kZScsIGFjdGlvbkFyZ3M6IHsgbGluZXdpc2U6IHRydWUgfX0sCiAgICB7IGtleXM6ICc8Qy12PicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICd0b2dnbGVWaXN1YWxNb2RlJywgYWN0aW9uQXJnczogeyBibG9ja3dpc2U6IHRydWUgfX0sCiAgICB7IGtleXM6ICc8Qy1xPicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICd0b2dnbGVWaXN1YWxNb2RlJywgYWN0aW9uQXJnczogeyBibG9ja3dpc2U6IHRydWUgfX0sCiAgICB7IGtleXM6ICdndicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdyZXNlbGVjdExhc3RTZWxlY3Rpb24nIH0sCiAgICB7IGtleXM6ICdKJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2pvaW5MaW5lcycsIGlzRWRpdDogdHJ1ZSB9LAogICAgeyBrZXlzOiAncCcsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdwYXN0ZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBhZnRlcjogdHJ1ZSwgaXNFZGl0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnUCcsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdwYXN0ZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyBhZnRlcjogZmFsc2UsIGlzRWRpdDogdHJ1ZSB9fSwKICAgIHsga2V5czogJ3I8Y2hhcmFjdGVyPicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdyZXBsYWNlJywgaXNFZGl0OiB0cnVlIH0sCiAgICB7IGtleXM6ICdAPGNoYXJhY3Rlcj4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAncmVwbGF5TWFjcm8nIH0sCiAgICB7IGtleXM6ICdxPGNoYXJhY3Rlcj4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZW50ZXJNYWNyb1JlY29yZE1vZGUnIH0sCiAgICB7IGtleXM6ICdSJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2VudGVySW5zZXJ0TW9kZScsIGlzRWRpdDogdHJ1ZSwgYWN0aW9uQXJnczogeyByZXBsYWNlOiB0cnVlIH0sIGNvbnRleHQ6ICdub3JtYWwnfSwKICAgIHsga2V5czogJ1InLCB0eXBlOiAnb3BlcmF0b3InLCBvcGVyYXRvcjogJ2NoYW5nZScsIG9wZXJhdG9yQXJnczogeyBsaW5ld2lzZTogdHJ1ZSwgZnVsbExpbmU6IHRydWUgfSwgY29udGV4dDogJ3Zpc3VhbCcsIGV4aXRWaXN1YWxCbG9jazogdHJ1ZX0sCiAgICB7IGtleXM6ICd1JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ3VuZG8nLCBjb250ZXh0OiAnbm9ybWFsJyB9LAogICAgeyBrZXlzOiAndScsIHR5cGU6ICdvcGVyYXRvcicsIG9wZXJhdG9yOiAnY2hhbmdlQ2FzZScsIG9wZXJhdG9yQXJnczoge3RvTG93ZXI6IHRydWV9LCBjb250ZXh0OiAndmlzdWFsJywgaXNFZGl0OiB0cnVlIH0sCiAgICB7IGtleXM6ICdVJywgdHlwZTogJ29wZXJhdG9yJywgb3BlcmF0b3I6ICdjaGFuZ2VDYXNlJywgb3BlcmF0b3JBcmdzOiB7dG9Mb3dlcjogZmFsc2V9LCBjb250ZXh0OiAndmlzdWFsJywgaXNFZGl0OiB0cnVlIH0sCiAgICB7IGtleXM6ICc8Qy1yPicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdyZWRvJyB9LAogICAgeyBrZXlzOiAnbTxjaGFyYWN0ZXI+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ3NldE1hcmsnIH0sCiAgICB7IGtleXM6ICciPGNoYXJhY3Rlcj4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnc2V0UmVnaXN0ZXInIH0sCiAgICB7IGtleXM6ICd6eicsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdzY3JvbGxUb0N1cnNvcicsIGFjdGlvbkFyZ3M6IHsgcG9zaXRpb246ICdjZW50ZXInIH19LAogICAgeyBrZXlzOiAnei4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnc2Nyb2xsVG9DdXJzb3InLCBhY3Rpb25BcmdzOiB7IHBvc2l0aW9uOiAnY2VudGVyJyB9LCBtb3Rpb246ICdtb3ZlVG9GaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXInIH0sCiAgICB7IGtleXM6ICd6dCcsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdzY3JvbGxUb0N1cnNvcicsIGFjdGlvbkFyZ3M6IHsgcG9zaXRpb246ICd0b3AnIH19LAogICAgeyBrZXlzOiAnejxDUj4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnc2Nyb2xsVG9DdXJzb3InLCBhY3Rpb25BcmdzOiB7IHBvc2l0aW9uOiAndG9wJyB9LCBtb3Rpb246ICdtb3ZlVG9GaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXInIH0sCiAgICB7IGtleXM6ICd6LScsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdzY3JvbGxUb0N1cnNvcicsIGFjdGlvbkFyZ3M6IHsgcG9zaXRpb246ICdib3R0b20nIH19LAogICAgeyBrZXlzOiAnemInLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnc2Nyb2xsVG9DdXJzb3InLCBhY3Rpb25BcmdzOiB7IHBvc2l0aW9uOiAnYm90dG9tJyB9LCBtb3Rpb246ICdtb3ZlVG9GaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXInIH0sCiAgICB7IGtleXM6ICcuJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ3JlcGVhdExhc3RFZGl0JyB9LAogICAgeyBrZXlzOiAnPEMtYT4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnaW5jcmVtZW50TnVtYmVyVG9rZW4nLCBpc0VkaXQ6IHRydWUsIGFjdGlvbkFyZ3M6IHtpbmNyZWFzZTogdHJ1ZSwgYmFja3RyYWNrOiBmYWxzZX19LAogICAgeyBrZXlzOiAnPEMteD4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnaW5jcmVtZW50TnVtYmVyVG9rZW4nLCBpc0VkaXQ6IHRydWUsIGFjdGlvbkFyZ3M6IHtpbmNyZWFzZTogZmFsc2UsIGJhY2t0cmFjazogZmFsc2V9fSwKICAgIHsga2V5czogJzxDLXQ+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2luZGVudCcsIGFjdGlvbkFyZ3M6IHsgaW5kZW50UmlnaHQ6IHRydWUgfSwgY29udGV4dDogJ2luc2VydCcgfSwKICAgIHsga2V5czogJzxDLWQ+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2luZGVudCcsIGFjdGlvbkFyZ3M6IHsgaW5kZW50UmlnaHQ6IGZhbHNlIH0sIGNvbnRleHQ6ICdpbnNlcnQnIH0sCiAgICB7IGtleXM6ICdhPGNoYXJhY3Rlcj4nLCB0eXBlOiAnbW90aW9uJywgbW90aW9uOiAndGV4dE9iamVjdE1hbmlwdWxhdGlvbicgfSwKICAgIHsga2V5czogJ2k8Y2hhcmFjdGVyPicsIHR5cGU6ICdtb3Rpb24nLCBtb3Rpb246ICd0ZXh0T2JqZWN0TWFuaXB1bGF0aW9uJywgbW90aW9uQXJnczogeyB0ZXh0T2JqZWN0SW5uZXI6IHRydWUgfX0sCiAgICB7IGtleXM6ICcvJywgdHlwZTogJ3NlYXJjaCcsIHNlYXJjaEFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgcXVlcnlTcmM6ICdwcm9tcHQnLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnPycsIHR5cGU6ICdzZWFyY2gnLCBzZWFyY2hBcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCBxdWVyeVNyYzogJ3Byb21wdCcsIHRvSnVtcGxpc3Q6IHRydWUgfX0sCiAgICB7IGtleXM6ICcqJywgdHlwZTogJ3NlYXJjaCcsIHNlYXJjaEFyZ3M6IHsgZm9yd2FyZDogdHJ1ZSwgcXVlcnlTcmM6ICd3b3JkVW5kZXJDdXJzb3InLCB3aG9sZVdvcmRPbmx5OiB0cnVlLCB0b0p1bXBsaXN0OiB0cnVlIH19LAogICAgeyBrZXlzOiAnIycsIHR5cGU6ICdzZWFyY2gnLCBzZWFyY2hBcmdzOiB7IGZvcndhcmQ6IGZhbHNlLCBxdWVyeVNyYzogJ3dvcmRVbmRlckN1cnNvcicsIHdob2xlV29yZE9ubHk6IHRydWUsIHRvSnVtcGxpc3Q6IHRydWUgfX0sCiAgICB7IGtleXM6ICdnKicsIHR5cGU6ICdzZWFyY2gnLCBzZWFyY2hBcmdzOiB7IGZvcndhcmQ6IHRydWUsIHF1ZXJ5U3JjOiAnd29yZFVuZGVyQ3Vyc29yJywgdG9KdW1wbGlzdDogdHJ1ZSB9fSwKICAgIHsga2V5czogJ2cjJywgdHlwZTogJ3NlYXJjaCcsIHNlYXJjaEFyZ3M6IHsgZm9yd2FyZDogZmFsc2UsIHF1ZXJ5U3JjOiAnd29yZFVuZGVyQ3Vyc29yJywgdG9KdW1wbGlzdDogdHJ1ZSB9fSwKICAgIHsga2V5czogJzonLCB0eXBlOiAnZXgnIH0KICBdOwogIHZhciBkZWZhdWx0S2V5bWFwTGVuZ3RoID0gZGVmYXVsdEtleW1hcC5sZW5ndGg7CiAgdmFyIGRlZmF1bHRFeENvbW1hbmRNYXAgPSBbCiAgICB7IG5hbWU6ICdjb2xvcnNjaGVtZScsIHNob3J0TmFtZTogJ2NvbG8nIH0sCiAgICB7IG5hbWU6ICdtYXAnIH0sCiAgICB7IG5hbWU6ICdpbWFwJywgc2hvcnROYW1lOiAnaW0nIH0sCiAgICB7IG5hbWU6ICdubWFwJywgc2hvcnROYW1lOiAnbm0nIH0sCiAgICB7IG5hbWU6ICd2bWFwJywgc2hvcnROYW1lOiAndm0nIH0sCiAgICB7IG5hbWU6ICd1bm1hcCcgfSwKICAgIHsgbmFtZTogJ3dyaXRlJywgc2hvcnROYW1lOiAndycgfSwKICAgIHsgbmFtZTogJ3VuZG8nLCBzaG9ydE5hbWU6ICd1JyB9LAogICAgeyBuYW1lOiAncmVkbycsIHNob3J0TmFtZTogJ3JlZCcgfSwKICAgIHsgbmFtZTogJ3NldCcsIHNob3J0TmFtZTogJ3NlJyB9LAogICAgeyBuYW1lOiAnc2V0Jywgc2hvcnROYW1lOiAnc2UnIH0sCiAgICB7IG5hbWU6ICdzZXRsb2NhbCcsIHNob3J0TmFtZTogJ3NldGwnIH0sCiAgICB7IG5hbWU6ICdzZXRnbG9iYWwnLCBzaG9ydE5hbWU6ICdzZXRnJyB9LAogICAgeyBuYW1lOiAnc29ydCcsIHNob3J0TmFtZTogJ3NvcicgfSwKICAgIHsgbmFtZTogJ3N1YnN0aXR1dGUnLCBzaG9ydE5hbWU6ICdzJywgcG9zc2libHlBc3luYzogdHJ1ZSB9LAogICAgeyBuYW1lOiAnbm9obHNlYXJjaCcsIHNob3J0TmFtZTogJ25vaCcgfSwKICAgIHsgbmFtZTogJ3lhbmsnLCBzaG9ydE5hbWU6ICd5JyB9LAogICAgeyBuYW1lOiAnZGVsbWFya3MnLCBzaG9ydE5hbWU6ICdkZWxtJyB9LAogICAgeyBuYW1lOiAncmVnaXN0ZXJzJywgc2hvcnROYW1lOiAncmVnJywgZXhjbHVkZUZyb21Db21tYW5kSGlzdG9yeTogdHJ1ZSB9LAogICAgeyBuYW1lOiAnZ2xvYmFsJywgc2hvcnROYW1lOiAnZycgfQogIF07CgogIHZhciBQb3MgPSBDb2RlTWlycm9yLlBvczsKCiAgdmFyIFZpbSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdmltQXBpOyB9IC8vewogICAgZnVuY3Rpb24gZW50ZXJWaW1Nb2RlKGNtKSB7CiAgICAgIGNtLnNldE9wdGlvbignZGlzYWJsZUlucHV0JywgdHJ1ZSk7CiAgICAgIGNtLnNldE9wdGlvbignc2hvd0N1cnNvcldoZW5TZWxlY3RpbmcnLCBmYWxzZSk7CiAgICAgIENvZGVNaXJyb3Iuc2lnbmFsKGNtLCAidmltLW1vZGUtY2hhbmdlIiwge21vZGU6ICJub3JtYWwifSk7CiAgICAgIGNtLm9uKCdjdXJzb3JBY3Rpdml0eScsIG9uQ3Vyc29yQWN0aXZpdHkpOwogICAgICBtYXliZUluaXRWaW1TdGF0ZShjbSk7CiAgICAgIENvZGVNaXJyb3Iub24oY20uZ2V0SW5wdXRGaWVsZCgpLCAncGFzdGUnLCBnZXRPblBhc3RlRm4oY20pKTsKICAgIH0KCiAgICBmdW5jdGlvbiBsZWF2ZVZpbU1vZGUoY20pIHsKICAgICAgY20uc2V0T3B0aW9uKCdkaXNhYmxlSW5wdXQnLCBmYWxzZSk7CiAgICAgIGNtLm9mZignY3Vyc29yQWN0aXZpdHknLCBvbkN1cnNvckFjdGl2aXR5KTsKICAgICAgQ29kZU1pcnJvci5vZmYoY20uZ2V0SW5wdXRGaWVsZCgpLCAncGFzdGUnLCBnZXRPblBhc3RlRm4oY20pKTsKICAgICAgY20uc3RhdGUudmltID0gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBkZXRhY2hWaW1NYXAoY20sIG5leHQpIHsKICAgICAgaWYgKHRoaXMgPT0gQ29kZU1pcnJvci5rZXlNYXAudmltKQogICAgICAgIENvZGVNaXJyb3Iucm1DbGFzcyhjbS5nZXRXcmFwcGVyRWxlbWVudCgpLCAiY20tZmF0LWN1cnNvciIpOwoKICAgICAgaWYgKCFuZXh0IHx8IG5leHQuYXR0YWNoICE9IGF0dGFjaFZpbU1hcCkKICAgICAgICBsZWF2ZVZpbU1vZGUoY20pOwogICAgfQogICAgZnVuY3Rpb24gYXR0YWNoVmltTWFwKGNtLCBwcmV2KSB7CiAgICAgIGlmICh0aGlzID09IENvZGVNaXJyb3Iua2V5TWFwLnZpbSkKICAgICAgICBDb2RlTWlycm9yLmFkZENsYXNzKGNtLmdldFdyYXBwZXJFbGVtZW50KCksICJjbS1mYXQtY3Vyc29yIik7CgogICAgICBpZiAoIXByZXYgfHwgcHJldi5hdHRhY2ggIT0gYXR0YWNoVmltTWFwKQogICAgICAgIGVudGVyVmltTW9kZShjbSk7CiAgICB9CiAgICBDb2RlTWlycm9yLmRlZmluZU9wdGlvbigndmltTW9kZScsIGZhbHNlLCBmdW5jdGlvbihjbSwgdmFsLCBwcmV2KSB7CiAgICAgIGlmICh2YWwgJiYgY20uZ2V0T3B0aW9uKCJrZXlNYXAiKSAhPSAidmltIikKICAgICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0iKTsKICAgICAgZWxzZSBpZiAoIXZhbCAmJiBwcmV2ICE9IENvZGVNaXJyb3IuSW5pdCAmJiAvXnZpbS8udGVzdChjbS5nZXRPcHRpb24oImtleU1hcCIpKSkKICAgICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJkZWZhdWx0Iik7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBjbUtleShrZXksIGNtKSB7CiAgICAgIGlmICghY20pIHsgcmV0dXJuIHVuZGVmaW5lZDsgfQogICAgICBpZiAodGhpc1trZXldKSB7IHJldHVybiB0aGlzW2tleV07IH0KICAgICAgdmFyIHZpbUtleSA9IGNtS2V5VG9WaW1LZXkoa2V5KTsKICAgICAgaWYgKCF2aW1LZXkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGNtZCA9IENvZGVNaXJyb3IuVmltLmZpbmRLZXkoY20sIHZpbUtleSk7CiAgICAgIGlmICh0eXBlb2YgY21kID09ICdmdW5jdGlvbicpIHsKICAgICAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgJ3ZpbS1rZXlwcmVzcycsIHZpbUtleSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNtZDsKICAgIH0KCiAgICB2YXIgbW9kaWZpZXJzID0geydTaGlmdCc6ICdTJywgJ0N0cmwnOiAnQycsICdBbHQnOiAnQScsICdDbWQnOiAnRCcsICdNb2QnOiAnQSd9OwogICAgdmFyIHNwZWNpYWxLZXlzID0ge0VudGVyOidDUicsQmFja3NwYWNlOidCUycsRGVsZXRlOidEZWwnLEluc2VydDonSW5zJ307CiAgICBmdW5jdGlvbiBjbUtleVRvVmltS2V5KGtleSkgewogICAgICBpZiAoa2V5LmNoYXJBdCgwKSA9PSAnXCcnKSB7CiAgICAgICAgcmV0dXJuIGtleS5jaGFyQXQoMSk7CiAgICAgIH0KICAgICAgdmFyIHBpZWNlcyA9IGtleS5zcGxpdCgvLSg/ISQpLyk7CiAgICAgIHZhciBsYXN0UGllY2UgPSBwaWVjZXNbcGllY2VzLmxlbmd0aCAtIDFdOwogICAgICBpZiAocGllY2VzLmxlbmd0aCA9PSAxICYmIHBpZWNlc1swXS5sZW5ndGggPT0gMSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChwaWVjZXMubGVuZ3RoID09IDIgJiYgcGllY2VzWzBdID09ICdTaGlmdCcgJiYgbGFzdFBpZWNlLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBoYXNDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwaWVjZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcGllY2UgPSBwaWVjZXNbaV07CiAgICAgICAgaWYgKHBpZWNlIGluIG1vZGlmaWVycykgeyBwaWVjZXNbaV0gPSBtb2RpZmllcnNbcGllY2VdOyB9CiAgICAgICAgZWxzZSB7IGhhc0NoYXJhY3RlciA9IHRydWU7IH0KICAgICAgICBpZiAocGllY2UgaW4gc3BlY2lhbEtleXMpIHsgcGllY2VzW2ldID0gc3BlY2lhbEtleXNbcGllY2VdOyB9CiAgICAgIH0KICAgICAgaWYgKCFoYXNDaGFyYWN0ZXIpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGlzVXBwZXJDYXNlKGxhc3RQaWVjZSkpIHsKICAgICAgICBwaWVjZXNbcGllY2VzLmxlbmd0aCAtIDFdID0gbGFzdFBpZWNlLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuICc8JyArIHBpZWNlcy5qb2luKCctJykgKyAnPic7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T25QYXN0ZUZuKGNtKSB7CiAgICAgIHZhciB2aW0gPSBjbS5zdGF0ZS52aW07CiAgICAgIGlmICghdmltLm9uUGFzdGVGbikgewogICAgICAgIHZpbS5vblBhc3RlRm4gPSBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmICghdmltLmluc2VydE1vZGUpIHsKICAgICAgICAgICAgY20uc2V0Q3Vyc29yKG9mZnNldEN1cnNvcihjbS5nZXRDdXJzb3IoKSwgMCwgMSkpOwogICAgICAgICAgICBhY3Rpb25zLmVudGVySW5zZXJ0TW9kZShjbSwge30sIHZpbSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gdmltLm9uUGFzdGVGbjsKICAgIH0KCiAgICB2YXIgbnVtYmVyUmVnZXggPSAvW1xkXS87CiAgICB2YXIgd29yZENoYXJUZXN0ID0gW0NvZGVNaXJyb3IuaXNXb3JkQ2hhciwgZnVuY3Rpb24oY2gpIHsKICAgICAgcmV0dXJuIGNoICYmICFDb2RlTWlycm9yLmlzV29yZENoYXIoY2gpICYmICEvXHMvLnRlc3QoY2gpOwogICAgfV0sIGJpZ1dvcmRDaGFyVGVzdCA9IFtmdW5jdGlvbihjaCkgewogICAgICByZXR1cm4gL1xTLy50ZXN0KGNoKTsKICAgIH1dOwogICAgZnVuY3Rpb24gbWFrZUtleVJhbmdlKHN0YXJ0LCBzaXplKSB7CiAgICAgIHZhciBrZXlzID0gW107CiAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgc2l6ZTsgaSsrKSB7CiAgICAgICAga2V5cy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpOwogICAgICB9CiAgICAgIHJldHVybiBrZXlzOwogICAgfQogICAgdmFyIHVwcGVyQ2FzZUFscGhhYmV0ID0gbWFrZUtleVJhbmdlKDY1LCAyNik7CiAgICB2YXIgbG93ZXJDYXNlQWxwaGFiZXQgPSBtYWtlS2V5UmFuZ2UoOTcsIDI2KTsKICAgIHZhciBudW1iZXJzID0gbWFrZUtleVJhbmdlKDQ4LCAxMCk7CiAgICB2YXIgdmFsaWRNYXJrcyA9IFtdLmNvbmNhdCh1cHBlckNhc2VBbHBoYWJldCwgbG93ZXJDYXNlQWxwaGFiZXQsIG51bWJlcnMsIFsnPCcsICc+J10pOwogICAgdmFyIHZhbGlkUmVnaXN0ZXJzID0gW10uY29uY2F0KHVwcGVyQ2FzZUFscGhhYmV0LCBsb3dlckNhc2VBbHBoYWJldCwgbnVtYmVycywgWyctJywgJyInLCAnLicsICc6JywgJy8nXSk7CgogICAgZnVuY3Rpb24gaXNMaW5lKGNtLCBsaW5lKSB7CiAgICAgIHJldHVybiBsaW5lID49IGNtLmZpcnN0TGluZSgpICYmIGxpbmUgPD0gY20ubGFzdExpbmUoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTG93ZXJDYXNlKGspIHsKICAgICAgcmV0dXJuICgvXlthLXpdJC8pLnRlc3Qoayk7CiAgICB9CiAgICBmdW5jdGlvbiBpc01hdGNoYWJsZVN5bWJvbChrKSB7CiAgICAgIHJldHVybiAnKClbXXt9Jy5pbmRleE9mKGspICE9IC0xOwogICAgfQogICAgZnVuY3Rpb24gaXNOdW1iZXIoaykgewogICAgICByZXR1cm4gbnVtYmVyUmVnZXgudGVzdChrKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVXBwZXJDYXNlKGspIHsKICAgICAgcmV0dXJuICgvXltBLVpdJC8pLnRlc3Qoayk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1doaXRlU3BhY2VTdHJpbmcoaykgewogICAgICByZXR1cm4gKC9eXHMqJC8pLnRlc3Qoayk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0VuZE9mU2VudGVuY2VTeW1ib2woaykgewogICAgICByZXR1cm4gJy4/IScuaW5kZXhPZihrKSAhPSAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIGluQXJyYXkodmFsLCBhcnIpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoYXJyW2ldID09IHZhbCkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgb3B0aW9ucyA9IHt9OwogICAgZnVuY3Rpb24gZGVmaW5lT3B0aW9uKG5hbWUsIGRlZmF1bHRWYWx1ZSwgdHlwZSwgYWxpYXNlcywgY2FsbGJhY2spIHsKICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICFjYWxsYmFjaykgewogICAgICAgIHRocm93IEVycm9yKCdkZWZhdWx0VmFsdWUgaXMgcmVxdWlyZWQgdW5sZXNzIGNhbGxiYWNrIGlzIHByb3ZpZGVkJyk7CiAgICAgIH0KICAgICAgaWYgKCF0eXBlKSB7IHR5cGUgPSAnc3RyaW5nJzsgfQogICAgICBvcHRpb25zW25hbWVdID0gewogICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsCiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrCiAgICAgIH07CiAgICAgIGlmIChhbGlhc2VzKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBvcHRpb25zW2FsaWFzZXNbaV1dID0gb3B0aW9uc1tuYW1lXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkgewogICAgICAgIHNldE9wdGlvbihuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gc2V0T3B0aW9uKG5hbWUsIHZhbHVlLCBjbSwgY2ZnKSB7CiAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zW25hbWVdOwogICAgICBjZmcgPSBjZmcgfHwge307CiAgICAgIHZhciBzY29wZSA9IGNmZy5zY29wZTsKICAgICAgaWYgKCFvcHRpb24pIHsKICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdVbmtub3duIG9wdGlvbjogJyArIG5hbWUpOwogICAgICB9CiAgICAgIGlmIChvcHRpb24udHlwZSA9PSAnYm9vbGVhbicpIHsKICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgIT09IHRydWUpIHsKICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQ6ICcgKyBuYW1lICsgJz0nICsgdmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IGZhbHNlKSB7CiAgICAgICAgICB2YWx1ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChvcHRpb24uY2FsbGJhY2spIHsKICAgICAgICBpZiAoc2NvcGUgIT09ICdsb2NhbCcpIHsKICAgICAgICAgIG9wdGlvbi5jYWxsYmFjayh2YWx1ZSwgdW5kZWZpbmVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNjb3BlICE9PSAnZ2xvYmFsJyAmJiBjbSkgewogICAgICAgICAgb3B0aW9uLmNhbGxiYWNrKHZhbHVlLCBjbSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChzY29wZSAhPT0gJ2xvY2FsJykgewogICAgICAgICAgb3B0aW9uLnZhbHVlID0gb3B0aW9uLnR5cGUgPT0gJ2Jvb2xlYW4nID8gISF2YWx1ZSA6IHZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAoc2NvcGUgIT09ICdnbG9iYWwnICYmIGNtKSB7CiAgICAgICAgICBjbS5zdGF0ZS52aW0ub3B0aW9uc1tuYW1lXSA9IHt2YWx1ZTogdmFsdWV9OwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGdldE9wdGlvbihuYW1lLCBjbSwgY2ZnKSB7CiAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zW25hbWVdOwogICAgICBjZmcgPSBjZmcgfHwge307CiAgICAgIHZhciBzY29wZSA9IGNmZy5zY29wZTsKICAgICAgaWYgKCFvcHRpb24pIHsKICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdVbmtub3duIG9wdGlvbjogJyArIG5hbWUpOwogICAgICB9CiAgICAgIGlmIChvcHRpb24uY2FsbGJhY2spIHsKICAgICAgICB2YXIgbG9jYWwgPSBjbSAmJiBvcHRpb24uY2FsbGJhY2sodW5kZWZpbmVkLCBjbSk7CiAgICAgICAgaWYgKHNjb3BlICE9PSAnZ2xvYmFsJyAmJiBsb2NhbCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWw7CiAgICAgICAgfQogICAgICAgIGlmIChzY29wZSAhPT0gJ2xvY2FsJykgewogICAgICAgICAgcmV0dXJuIG9wdGlvbi5jYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGxvY2FsID0gKHNjb3BlICE9PSAnZ2xvYmFsJykgJiYgKGNtICYmIGNtLnN0YXRlLnZpbS5vcHRpb25zW25hbWVdKTsKICAgICAgICByZXR1cm4gKGxvY2FsIHx8IChzY29wZSAhPT0gJ2xvY2FsJykgJiYgb3B0aW9uIHx8IHt9KS52YWx1ZTsKICAgICAgfQogICAgfQoKICAgIGRlZmluZU9wdGlvbignZmlsZXR5cGUnLCB1bmRlZmluZWQsICdzdHJpbmcnLCBbJ2Z0J10sIGZ1bmN0aW9uKG5hbWUsIGNtKSB7CiAgICAgIGlmIChjbSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChuYW1lID09PSB1bmRlZmluZWQpIHsKICAgICAgICB2YXIgbW9kZSA9IGNtLmdldE9wdGlvbignbW9kZScpOwogICAgICAgIHJldHVybiBtb2RlID09ICdudWxsJyA/ICcnIDogbW9kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbW9kZSA9IG5hbWUgPT0gJycgPyAnbnVsbCcgOiBuYW1lOwogICAgICAgIGNtLnNldE9wdGlvbignbW9kZScsIG1vZGUpOwogICAgICB9CiAgICB9KTsKCiAgICB2YXIgY3JlYXRlQ2lyY3VsYXJKdW1wTGlzdCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc2l6ZSA9IDEwMDsKICAgICAgdmFyIHBvaW50ZXIgPSAtMTsKICAgICAgdmFyIGhlYWQgPSAwOwogICAgICB2YXIgdGFpbCA9IDA7CiAgICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXkoc2l6ZSk7CiAgICAgIGZ1bmN0aW9uIGFkZChjbSwgb2xkQ3VyLCBuZXdDdXIpIHsKICAgICAgICB2YXIgY3VycmVudCA9IHBvaW50ZXIgJSBzaXplOwogICAgICAgIHZhciBjdXJNYXJrID0gYnVmZmVyW2N1cnJlbnRdOwogICAgICAgIGZ1bmN0aW9uIHVzZU5leHRTbG90KGN1cnNvcikgewogICAgICAgICAgdmFyIG5leHQgPSArK3BvaW50ZXIgJSBzaXplOwogICAgICAgICAgdmFyIHRyYXNoTWFyayA9IGJ1ZmZlcltuZXh0XTsKICAgICAgICAgIGlmICh0cmFzaE1hcmspIHsKICAgICAgICAgICAgdHJhc2hNYXJrLmNsZWFyKCk7CiAgICAgICAgICB9CiAgICAgICAgICBidWZmZXJbbmV4dF0gPSBjbS5zZXRCb29rbWFyayhjdXJzb3IpOwogICAgICAgIH0KICAgICAgICBpZiAoY3VyTWFyaykgewogICAgICAgICAgdmFyIG1hcmtQb3MgPSBjdXJNYXJrLmZpbmQoKTsKICAgICAgICAgIGlmIChtYXJrUG9zICYmICFjdXJzb3JFcXVhbChtYXJrUG9zLCBvbGRDdXIpKSB7CiAgICAgICAgICAgIHVzZU5leHRTbG90KG9sZEN1cik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHVzZU5leHRTbG90KG9sZEN1cik7CiAgICAgICAgfQogICAgICAgIHVzZU5leHRTbG90KG5ld0N1cik7CiAgICAgICAgaGVhZCA9IHBvaW50ZXI7CiAgICAgICAgdGFpbCA9IHBvaW50ZXIgLSBzaXplICsgMTsKICAgICAgICBpZiAodGFpbCA8IDApIHsKICAgICAgICAgIHRhaWwgPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBmdW5jdGlvbiBtb3ZlKGNtLCBvZmZzZXQpIHsKICAgICAgICBwb2ludGVyICs9IG9mZnNldDsKICAgICAgICBpZiAocG9pbnRlciA+IGhlYWQpIHsKICAgICAgICAgIHBvaW50ZXIgPSBoZWFkOwogICAgICAgIH0gZWxzZSBpZiAocG9pbnRlciA8IHRhaWwpIHsKICAgICAgICAgIHBvaW50ZXIgPSB0YWlsOwogICAgICAgIH0KICAgICAgICB2YXIgbWFyayA9IGJ1ZmZlclsoc2l6ZSArIHBvaW50ZXIpICUgc2l6ZV07CiAgICAgICAgaWYgKG1hcmsgJiYgIW1hcmsuZmluZCgpKSB7CiAgICAgICAgICB2YXIgaW5jID0gb2Zmc2V0ID4gMCA/IDEgOiAtMTsKICAgICAgICAgIHZhciBuZXdDdXI7CiAgICAgICAgICB2YXIgb2xkQ3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgICAgICBkbyB7CiAgICAgICAgICAgIHBvaW50ZXIgKz0gaW5jOwogICAgICAgICAgICBtYXJrID0gYnVmZmVyWyhzaXplICsgcG9pbnRlcikgJSBzaXplXTsKICAgICAgICAgICAgaWYgKG1hcmsgJiYKICAgICAgICAgICAgICAgIChuZXdDdXIgPSBtYXJrLmZpbmQoKSkgJiYKICAgICAgICAgICAgICAgICFjdXJzb3JFcXVhbChvbGRDdXIsIG5ld0N1cikpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfSB3aGlsZSAocG9pbnRlciA8IGhlYWQgJiYgcG9pbnRlciA+IHRhaWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbWFyazsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGNhY2hlZEN1cnNvcjogdW5kZWZpbmVkLCAvL3VzZWQgZm9yICMgYW5kICoganVtcHMKICAgICAgICBhZGQ6IGFkZCwKICAgICAgICBtb3ZlOiBtb3ZlCiAgICAgIH07CiAgICB9OwogICAgdmFyIGNyZWF0ZUluc2VydE1vZGVDaGFuZ2VzID0gZnVuY3Rpb24oYykgewogICAgICBpZiAoYykgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjaGFuZ2VzOiBjLmNoYW5nZXMsCiAgICAgICAgICBleHBlY3RDdXJzb3JBY3Rpdml0eUZvckNoYW5nZTogYy5leHBlY3RDdXJzb3JBY3Rpdml0eUZvckNoYW5nZQogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBjaGFuZ2VzOiBbXSwKICAgICAgICBleHBlY3RDdXJzb3JBY3Rpdml0eUZvckNoYW5nZTogZmFsc2UKICAgICAgfTsKICAgIH07CgogICAgZnVuY3Rpb24gTWFjcm9Nb2RlU3RhdGUoKSB7CiAgICAgIHRoaXMubGF0ZXN0UmVnaXN0ZXIgPSB1bmRlZmluZWQ7CiAgICAgIHRoaXMuaXNQbGF5aW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTsKICAgICAgdGhpcy5yZXBsYXlTZWFyY2hRdWVyaWVzID0gW107CiAgICAgIHRoaXMub25SZWNvcmRpbmdEb25lID0gdW5kZWZpbmVkOwogICAgICB0aGlzLmxhc3RJbnNlcnRNb2RlQ2hhbmdlcyA9IGNyZWF0ZUluc2VydE1vZGVDaGFuZ2VzKCk7CiAgICB9CiAgICBNYWNyb01vZGVTdGF0ZS5wcm90b3R5cGUgPSB7CiAgICAgIGV4aXRNYWNyb1JlY29yZE1vZGU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBtYWNyb01vZGVTdGF0ZSA9IHZpbUdsb2JhbFN0YXRlLm1hY3JvTW9kZVN0YXRlOwogICAgICAgIGlmIChtYWNyb01vZGVTdGF0ZS5vblJlY29yZGluZ0RvbmUpIHsKICAgICAgICAgIG1hY3JvTW9kZVN0YXRlLm9uUmVjb3JkaW5nRG9uZSgpOyAvLyBjbG9zZSBkaWFsb2cKICAgICAgICB9CiAgICAgICAgbWFjcm9Nb2RlU3RhdGUub25SZWNvcmRpbmdEb25lID0gdW5kZWZpbmVkOwogICAgICAgIG1hY3JvTW9kZVN0YXRlLmlzUmVjb3JkaW5nID0gZmFsc2U7CiAgICAgIH0sCiAgICAgIGVudGVyTWFjcm9SZWNvcmRNb2RlOiBmdW5jdGlvbihjbSwgcmVnaXN0ZXJOYW1lKSB7CiAgICAgICAgdmFyIHJlZ2lzdGVyID0KICAgICAgICAgICAgdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyLmdldFJlZ2lzdGVyKHJlZ2lzdGVyTmFtZSk7CiAgICAgICAgaWYgKHJlZ2lzdGVyKSB7CiAgICAgICAgICByZWdpc3Rlci5jbGVhcigpOwogICAgICAgICAgdGhpcy5sYXRlc3RSZWdpc3RlciA9IHJlZ2lzdGVyTmFtZTsKICAgICAgICAgIGlmIChjbS5vcGVuRGlhbG9nKSB7CiAgICAgICAgICAgIHRoaXMub25SZWNvcmRpbmdEb25lID0gY20ub3BlbkRpYWxvZygKICAgICAgICAgICAgICAgICcocmVjb3JkaW5nKVsnK3JlZ2lzdGVyTmFtZSsnXScsIG51bGwsIHtib3R0b206dHJ1ZX0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIG1heWJlSW5pdFZpbVN0YXRlKGNtKSB7CiAgICAgIGlmICghY20uc3RhdGUudmltKSB7CiAgICAgICAgY20uc3RhdGUudmltID0gewogICAgICAgICAgaW5wdXRTdGF0ZTogbmV3IElucHV0U3RhdGUoKSwKICAgICAgICAgIGxhc3RFZGl0SW5wdXRTdGF0ZTogdW5kZWZpbmVkLAogICAgICAgICAgbGFzdEVkaXRBY3Rpb25Db21tYW5kOiB1bmRlZmluZWQsCiAgICAgICAgICBsYXN0SFBvczogLTEsCiAgICAgICAgICBsYXN0SFNQb3M6IC0xLAogICAgICAgICAgbGFzdE1vdGlvbjogbnVsbCwKICAgICAgICAgIG1hcmtzOiB7fSwKICAgICAgICAgIGZha2VDdXJzb3I6IG51bGwsCiAgICAgICAgICBpbnNlcnRNb2RlOiBmYWxzZSwKICAgICAgICAgIGluc2VydE1vZGVSZXBlYXQ6IHVuZGVmaW5lZCwKICAgICAgICAgIHZpc3VhbE1vZGU6IGZhbHNlLAogICAgICAgICAgdmlzdWFsTGluZTogZmFsc2UsCiAgICAgICAgICB2aXN1YWxCbG9jazogZmFsc2UsCiAgICAgICAgICBsYXN0U2VsZWN0aW9uOiBudWxsLAogICAgICAgICAgbGFzdFBhc3RlZFRleHQ6IG51bGwsCiAgICAgICAgICBzZWw6IHt9LAogICAgICAgICAgb3B0aW9uczoge30KICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBjbS5zdGF0ZS52aW07CiAgICB9CiAgICB2YXIgdmltR2xvYmFsU3RhdGU7CiAgICBmdW5jdGlvbiByZXNldFZpbUdsb2JhbFN0YXRlKCkgewogICAgICB2aW1HbG9iYWxTdGF0ZSA9IHsKICAgICAgICBzZWFyY2hRdWVyeTogbnVsbCwKICAgICAgICBzZWFyY2hJc1JldmVyc2VkOiBmYWxzZSwKICAgICAgICBsYXN0U3Vic3RpdHV0ZVJlcGxhY2VQYXJ0OiB1bmRlZmluZWQsCiAgICAgICAganVtcExpc3Q6IGNyZWF0ZUNpcmN1bGFySnVtcExpc3QoKSwKICAgICAgICBtYWNyb01vZGVTdGF0ZTogbmV3IE1hY3JvTW9kZVN0YXRlLAogICAgICAgIGxhc3RDaGFyYWN0ZXJTZWFyY2g6IHtpbmNyZW1lbnQ6MCwgZm9yd2FyZDp0cnVlLCBzZWxlY3RlZENoYXJhY3RlcjonJ30sCiAgICAgICAgcmVnaXN0ZXJDb250cm9sbGVyOiBuZXcgUmVnaXN0ZXJDb250cm9sbGVyKHt9KSwKICAgICAgICBzZWFyY2hIaXN0b3J5Q29udHJvbGxlcjogbmV3IEhpc3RvcnlDb250cm9sbGVyKCksCiAgICAgICAgZXhDb21tYW5kSGlzdG9yeUNvbnRyb2xsZXIgOiBuZXcgSGlzdG9yeUNvbnRyb2xsZXIoKQogICAgICB9OwogICAgICBmb3IgKHZhciBvcHRpb25OYW1lIGluIG9wdGlvbnMpIHsKICAgICAgICB2YXIgb3B0aW9uID0gb3B0aW9uc1tvcHRpb25OYW1lXTsKICAgICAgICBvcHRpb24udmFsdWUgPSBvcHRpb24uZGVmYXVsdFZhbHVlOwogICAgICB9CiAgICB9CgogICAgdmFyIGxhc3RJbnNlcnRNb2RlS2V5VGltZXI7CiAgICB2YXIgdmltQXBpPSB7CiAgICAgIGJ1aWxkS2V5TWFwOiBmdW5jdGlvbigpIHsKICAgICAgfSwKICAgICAgZ2V0UmVnaXN0ZXJDb250cm9sbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyOwogICAgICB9LAogICAgICByZXNldFZpbUdsb2JhbFN0YXRlXzogcmVzZXRWaW1HbG9iYWxTdGF0ZSwKICAgICAgZ2V0VmltR2xvYmFsU3RhdGVfOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmltR2xvYmFsU3RhdGU7CiAgICAgIH0sCiAgICAgIG1heWJlSW5pdFZpbVN0YXRlXzogbWF5YmVJbml0VmltU3RhdGUsCgogICAgICBzdXBwcmVzc0Vycm9yTG9nZ2luZzogZmFsc2UsCgogICAgICBJbnNlcnRNb2RlS2V5OiBJbnNlcnRNb2RlS2V5LAogICAgICBtYXA6IGZ1bmN0aW9uKGxocywgcmhzLCBjdHgpIHsKICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLm1hcChsaHMsIHJocywgY3R4KTsKICAgICAgfSwKICAgICAgdW5tYXA6IGZ1bmN0aW9uKGxocywgY3R4KSB7CiAgICAgICAgZXhDb21tYW5kRGlzcGF0Y2hlci51bm1hcChsaHMsIGN0eCk7CiAgICAgIH0sCiAgICAgIG5vcmVtYXA6IGZ1bmN0aW9uKGxocywgcmhzLCBjdHgpIHsKICAgICAgICBmdW5jdGlvbiB0b0N0eEFycmF5KGN0eCkgewogICAgICAgICAgcmV0dXJuIGN0eCA/IFtjdHhdIDogWydub3JtYWwnLCAnaW5zZXJ0JywgJ3Zpc3VhbCddOwogICAgICAgIH0KICAgICAgICB2YXIgY3R4c1RvTWFwID0gdG9DdHhBcnJheShjdHgpOwogICAgICAgIHZhciBhY3R1YWxMZW5ndGggPSBkZWZhdWx0S2V5bWFwLmxlbmd0aCwgb3JpZ0xlbmd0aCA9IGRlZmF1bHRLZXltYXBMZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaSA9IGFjdHVhbExlbmd0aCAtIG9yaWdMZW5ndGg7CiAgICAgICAgICAgICBpIDwgYWN0dWFsTGVuZ3RoICYmIGN0eHNUb01hcC5sZW5ndGg7CiAgICAgICAgICAgICBpKyspIHsKICAgICAgICAgIHZhciBtYXBwaW5nID0gZGVmYXVsdEtleW1hcFtpXTsKICAgICAgICAgIGlmIChtYXBwaW5nLmtleXMgPT0gcmhzICYmCiAgICAgICAgICAgICAgKCFjdHggfHwgIW1hcHBpbmcuY29udGV4dCB8fCBtYXBwaW5nLmNvbnRleHQgPT09IGN0eCkgJiYKICAgICAgICAgICAgICBtYXBwaW5nLnR5cGUuc3Vic3RyKDAsIDIpICE9PSAnZXgnICYmCiAgICAgICAgICAgICAgbWFwcGluZy50eXBlLnN1YnN0cigwLCAzKSAhPT0gJ2tleScpIHsKICAgICAgICAgICAgdmFyIG5ld01hcHBpbmcgPSB7fTsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1hcHBpbmcpIHsKICAgICAgICAgICAgICBuZXdNYXBwaW5nW2tleV0gPSBtYXBwaW5nW2tleV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV3TWFwcGluZy5rZXlzID0gbGhzOwogICAgICAgICAgICBpZiAoY3R4ICYmICFuZXdNYXBwaW5nLmNvbnRleHQpIHsKICAgICAgICAgICAgICBuZXdNYXBwaW5nLmNvbnRleHQgPSBjdHg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5fbWFwQ29tbWFuZChuZXdNYXBwaW5nKTsKICAgICAgICAgICAgdmFyIG1hcHBlZEN0eHMgPSB0b0N0eEFycmF5KG1hcHBpbmcuY29udGV4dCk7CiAgICAgICAgICAgIGN0eHNUb01hcCA9IGN0eHNUb01hcC5maWx0ZXIoZnVuY3Rpb24oZWwpIHsgcmV0dXJuIG1hcHBlZEN0eHMuaW5kZXhPZihlbCkgPT09IC0xOyB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1hcGNsZWFyOiBmdW5jdGlvbihjdHgpIHsKICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gZGVmYXVsdEtleW1hcC5sZW5ndGgsCiAgICAgICAgICAgIG9yaWdMZW5ndGggPSBkZWZhdWx0S2V5bWFwTGVuZ3RoOwogICAgICAgIHZhciB1c2VyS2V5bWFwID0gZGVmYXVsdEtleW1hcC5zbGljZSgwLCBhY3R1YWxMZW5ndGggLSBvcmlnTGVuZ3RoKTsKICAgICAgICBkZWZhdWx0S2V5bWFwID0gZGVmYXVsdEtleW1hcC5zbGljZShhY3R1YWxMZW5ndGggLSBvcmlnTGVuZ3RoKTsKICAgICAgICBpZiAoY3R4KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gdXNlcktleW1hcC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICB2YXIgbWFwcGluZyA9IHVzZXJLZXltYXBbaV07CiAgICAgICAgICAgIGlmIChjdHggIT09IG1hcHBpbmcuY29udGV4dCkgewogICAgICAgICAgICAgIGlmIChtYXBwaW5nLmNvbnRleHQpIHsKICAgICAgICAgICAgICAgIHRoaXMuX21hcENvbW1hbmQobWFwcGluZyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBjb250ZXh0cyA9IFsnbm9ybWFsJywgJ2luc2VydCcsICd2aXN1YWwnXTsKICAgICAgICAgICAgICAgIGZvciAodmFyIGogaW4gY29udGV4dHMpIHsKICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHRzW2pdICE9PSBjdHgpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TWFwcGluZyA9IHt9OwogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBtYXBwaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICBuZXdNYXBwaW5nW2tleV0gPSBtYXBwaW5nW2tleV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG5ld01hcHBpbmcuY29udGV4dCA9IGNvbnRleHRzW2pdOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcENvbW1hbmQobmV3TWFwcGluZyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNldE9wdGlvbjogc2V0T3B0aW9uLAogICAgICBnZXRPcHRpb246IGdldE9wdGlvbiwKICAgICAgZGVmaW5lT3B0aW9uOiBkZWZpbmVPcHRpb24sCiAgICAgIGRlZmluZUV4OiBmdW5jdGlvbihuYW1lLCBwcmVmaXgsIGZ1bmMpewogICAgICAgIGlmICghcHJlZml4KSB7CiAgICAgICAgICBwcmVmaXggPSBuYW1lOwogICAgICAgIH0gZWxzZSBpZiAobmFtZS5pbmRleE9mKHByZWZpeCkgIT09IDApIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcignKFZpbS5kZWZpbmVFeCkgIicrcHJlZml4KyciIGlzIG5vdCBhIHByZWZpeCBvZiAiJytuYW1lKyciLCBjb21tYW5kIG5vdCByZWdpc3RlcmVkJyk7CiAgICAgICAgfQogICAgICAgIGV4Q29tbWFuZHNbbmFtZV09ZnVuYzsKICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLmNvbW1hbmRNYXBfW3ByZWZpeF09e25hbWU6bmFtZSwgc2hvcnROYW1lOnByZWZpeCwgdHlwZTonYXBpJ307CiAgICAgIH0sCiAgICAgIGhhbmRsZUtleTogZnVuY3Rpb24gKGNtLCBrZXksIG9yaWdpbikgewogICAgICAgIHZhciBjb21tYW5kID0gdGhpcy5maW5kS2V5KGNtLCBrZXksIG9yaWdpbik7CiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICByZXR1cm4gY29tbWFuZCgpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmluZEtleTogZnVuY3Rpb24oY20sIGtleSwgb3JpZ2luKSB7CiAgICAgICAgdmFyIHZpbSA9IG1heWJlSW5pdFZpbVN0YXRlKGNtKTsKICAgICAgICBmdW5jdGlvbiBoYW5kbGVNYWNyb1JlY29yZGluZygpIHsKICAgICAgICAgIHZhciBtYWNyb01vZGVTdGF0ZSA9IHZpbUdsb2JhbFN0YXRlLm1hY3JvTW9kZVN0YXRlOwogICAgICAgICAgaWYgKG1hY3JvTW9kZVN0YXRlLmlzUmVjb3JkaW5nKSB7CiAgICAgICAgICAgIGlmIChrZXkgPT0gJ3EnKSB7CiAgICAgICAgICAgICAgbWFjcm9Nb2RlU3RhdGUuZXhpdE1hY3JvUmVjb3JkTW9kZSgpOwogICAgICAgICAgICAgIGNsZWFySW5wdXRTdGF0ZShjbSk7CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG9yaWdpbiAhPSAnbWFwcGluZycpIHsKICAgICAgICAgICAgICBsb2dLZXkobWFjcm9Nb2RlU3RhdGUsIGtleSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gaGFuZGxlRXNjKCkgewogICAgICAgICAgaWYgKGtleSA9PSAnPEVzYz4nKSB7CiAgICAgICAgICAgIGNsZWFySW5wdXRTdGF0ZShjbSk7CiAgICAgICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgICAgIGV4aXRWaXN1YWxNb2RlKGNtKTsKICAgICAgICAgICAgfSBlbHNlIGlmICh2aW0uaW5zZXJ0TW9kZSkgewogICAgICAgICAgICAgIGV4aXRJbnNlcnRNb2RlKGNtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZG9LZXlUb0tleShrZXlzKSB7CiAgICAgICAgICB2YXIgbWF0Y2g7CiAgICAgICAgICB3aGlsZSAoa2V5cykgewogICAgICAgICAgICBtYXRjaCA9ICgvPFx3Ky0uKz8+fDxcdys+fC4vKS5leGVjKGtleXMpOwogICAgICAgICAgICBrZXkgPSBtYXRjaFswXTsKICAgICAgICAgICAga2V5cyA9IGtleXMuc3Vic3RyaW5nKG1hdGNoLmluZGV4ICsga2V5Lmxlbmd0aCk7CiAgICAgICAgICAgIENvZGVNaXJyb3IuVmltLmhhbmRsZUtleShjbSwga2V5LCAnbWFwcGluZycpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaGFuZGxlS2V5SW5zZXJ0TW9kZSgpIHsKICAgICAgICAgIGlmIChoYW5kbGVFc2MoKSkgeyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICAgdmFyIGtleXMgPSB2aW0uaW5wdXRTdGF0ZS5rZXlCdWZmZXIgPSB2aW0uaW5wdXRTdGF0ZS5rZXlCdWZmZXIgKyBrZXk7CiAgICAgICAgICB2YXIga2V5c0FyZUNoYXJzID0ga2V5Lmxlbmd0aCA9PSAxOwogICAgICAgICAgdmFyIG1hdGNoID0gY29tbWFuZERpc3BhdGNoZXIubWF0Y2hDb21tYW5kKGtleXMsIGRlZmF1bHRLZXltYXAsIHZpbS5pbnB1dFN0YXRlLCAnaW5zZXJ0Jyk7CiAgICAgICAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiAxICYmIG1hdGNoLnR5cGUgIT0gJ2Z1bGwnKSB7CiAgICAgICAgICAgIHZhciBrZXlzID0gdmltLmlucHV0U3RhdGUua2V5QnVmZmVyID0ga2V5cy5zbGljZSgxKTsKICAgICAgICAgICAgdmFyIHRoaXNNYXRjaCA9IGNvbW1hbmREaXNwYXRjaGVyLm1hdGNoQ29tbWFuZChrZXlzLCBkZWZhdWx0S2V5bWFwLCB2aW0uaW5wdXRTdGF0ZSwgJ2luc2VydCcpOwogICAgICAgICAgICBpZiAodGhpc01hdGNoLnR5cGUgIT0gJ25vbmUnKSB7IG1hdGNoID0gdGhpc01hdGNoOyB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobWF0Y2gudHlwZSA9PSAnbm9uZScpIHsgY2xlYXJJbnB1dFN0YXRlKGNtKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgICBlbHNlIGlmIChtYXRjaC50eXBlID09ICdwYXJ0aWFsJykgewogICAgICAgICAgICBpZiAobGFzdEluc2VydE1vZGVLZXlUaW1lcikgeyB3aW5kb3cuY2xlYXJUaW1lb3V0KGxhc3RJbnNlcnRNb2RlS2V5VGltZXIpOyB9CiAgICAgICAgICAgIGxhc3RJbnNlcnRNb2RlS2V5VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgKICAgICAgICAgICAgICBmdW5jdGlvbigpIHsgaWYgKHZpbS5pbnNlcnRNb2RlICYmIHZpbS5pbnB1dFN0YXRlLmtleUJ1ZmZlcikgeyBjbGVhcklucHV0U3RhdGUoY20pOyB9IH0sCiAgICAgICAgICAgICAgZ2V0T3B0aW9uKCdpbnNlcnRNb2RlRXNjS2V5c1RpbWVvdXQnKSk7CiAgICAgICAgICAgIHJldHVybiAha2V5c0FyZUNoYXJzOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChsYXN0SW5zZXJ0TW9kZUtleVRpbWVyKSB7IHdpbmRvdy5jbGVhclRpbWVvdXQobGFzdEluc2VydE1vZGVLZXlUaW1lcik7IH0KICAgICAgICAgIGlmIChrZXlzQXJlQ2hhcnMpIHsKICAgICAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSBjbS5saXN0U2VsZWN0aW9ucygpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICB2YXIgaGVyZSA9IHNlbGVjdGlvbnNbaV0uaGVhZDsKICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoJycsIG9mZnNldEN1cnNvcihoZXJlLCAwLCAtKGtleXMubGVuZ3RoIC0gMSkpLCBoZXJlLCAnK2lucHV0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmltR2xvYmFsU3RhdGUubWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzLmNoYW5nZXMucG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgICBjbGVhcklucHV0U3RhdGUoY20pOwogICAgICAgICAgcmV0dXJuIG1hdGNoLmNvbW1hbmQ7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYW5kbGVLZXlOb25JbnNlcnRNb2RlKCkgewogICAgICAgICAgaWYgKGhhbmRsZU1hY3JvUmVjb3JkaW5nKCkgfHwgaGFuZGxlRXNjKCkpIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgICAgICB2YXIga2V5cyA9IHZpbS5pbnB1dFN0YXRlLmtleUJ1ZmZlciA9IHZpbS5pbnB1dFN0YXRlLmtleUJ1ZmZlciArIGtleTsKICAgICAgICAgIGlmICgvXlsxLTldXGQqJC8udGVzdChrZXlzKSkgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICAgIHZhciBrZXlzTWF0Y2hlciA9IC9eKFxkKikoLiopJC8uZXhlYyhrZXlzKTsKICAgICAgICAgIGlmICgha2V5c01hdGNoZXIpIHsgY2xlYXJJbnB1dFN0YXRlKGNtKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgICB2YXIgY29udGV4dCA9IHZpbS52aXN1YWxNb2RlID8gJ3Zpc3VhbCcgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3JtYWwnOwogICAgICAgICAgdmFyIG1hdGNoID0gY29tbWFuZERpc3BhdGNoZXIubWF0Y2hDb21tYW5kKGtleXNNYXRjaGVyWzJdIHx8IGtleXNNYXRjaGVyWzFdLCBkZWZhdWx0S2V5bWFwLCB2aW0uaW5wdXRTdGF0ZSwgY29udGV4dCk7CiAgICAgICAgICBpZiAobWF0Y2gudHlwZSA9PSAnbm9uZScpIHsgY2xlYXJJbnB1dFN0YXRlKGNtKTsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgICBlbHNlIGlmIChtYXRjaC50eXBlID09ICdwYXJ0aWFsJykgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICAgIHZpbS5pbnB1dFN0YXRlLmtleUJ1ZmZlciA9ICcnOwogICAgICAgICAgdmFyIGtleXNNYXRjaGVyID0gL14oXGQqKSguKikkLy5leGVjKGtleXMpOwogICAgICAgICAgaWYgKGtleXNNYXRjaGVyWzFdICYmIGtleXNNYXRjaGVyWzFdICE9ICcwJykgewogICAgICAgICAgICB2aW0uaW5wdXRTdGF0ZS5wdXNoUmVwZWF0RGlnaXQoa2V5c01hdGNoZXJbMV0pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG1hdGNoLmNvbW1hbmQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgY29tbWFuZDsKICAgICAgICBpZiAodmltLmluc2VydE1vZGUpIHsgY29tbWFuZCA9IGhhbmRsZUtleUluc2VydE1vZGUoKTsgfQogICAgICAgIGVsc2UgeyBjb21tYW5kID0gaGFuZGxlS2V5Tm9uSW5zZXJ0TW9kZSgpOyB9CiAgICAgICAgaWYgKGNvbW1hbmQgPT09IGZhbHNlKSB7CiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvL2FjZV9wYXRjaAogICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PT0gdHJ1ZSkgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoKGNvbW1hbmQub3BlcmF0b3IgfHwgY29tbWFuZC5pc0VkaXQpICYmIGNtLmdldE9wdGlvbigncmVhZE9ubHknKSkKICAgICAgICAgICAgICByZXR1cm47IC8vIGFjZV9wYXRjaAogICAgICAgICAgICByZXR1cm4gY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNtLmN1ck9wLmlzVmltT3AgPSB0cnVlOwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZC50eXBlID09ICdrZXlUb0tleScpIHsKICAgICAgICAgICAgICAgICAgZG9LZXlUb0tleShjb21tYW5kLnRvS2V5cyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBjb21tYW5kRGlzcGF0Y2hlci5wcm9jZXNzQ29tbWFuZChjbSwgdmltLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICBjbS5zdGF0ZS52aW0gPSB1bmRlZmluZWQ7CiAgICAgICAgICAgICAgICBtYXliZUluaXRWaW1TdGF0ZShjbSk7CiAgICAgICAgICAgICAgICBpZiAoIUNvZGVNaXJyb3IuVmltLnN1cHByZXNzRXJyb3JMb2dnaW5nKSB7CiAgICAgICAgICAgICAgICAgIGNvbnNvbGVbJ2xvZyddKGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGhhbmRsZUV4OiBmdW5jdGlvbihjbSwgaW5wdXQpIHsKICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLnByb2Nlc3NDb21tYW5kKGNtLCBpbnB1dCk7CiAgICAgIH0sCgogICAgICBkZWZpbmVNb3Rpb246IGRlZmluZU1vdGlvbiwKICAgICAgZGVmaW5lQWN0aW9uOiBkZWZpbmVBY3Rpb24sCiAgICAgIGRlZmluZU9wZXJhdG9yOiBkZWZpbmVPcGVyYXRvciwKICAgICAgbWFwQ29tbWFuZDogbWFwQ29tbWFuZCwKICAgICAgX21hcENvbW1hbmQ6IF9tYXBDb21tYW5kLAoKICAgICAgZGVmaW5lUmVnaXN0ZXI6IGRlZmluZVJlZ2lzdGVyLAoKICAgICAgZXhpdFZpc3VhbE1vZGU6IGV4aXRWaXN1YWxNb2RlLAogICAgICBleGl0SW5zZXJ0TW9kZTogZXhpdEluc2VydE1vZGUKICAgIH07CiAgICBmdW5jdGlvbiBJbnB1dFN0YXRlKCkgewogICAgICB0aGlzLnByZWZpeFJlcGVhdCA9IFtdOwogICAgICB0aGlzLm1vdGlvblJlcGVhdCA9IFtdOwoKICAgICAgdGhpcy5vcGVyYXRvciA9IG51bGw7CiAgICAgIHRoaXMub3BlcmF0b3JBcmdzID0gbnVsbDsKICAgICAgdGhpcy5tb3Rpb24gPSBudWxsOwogICAgICB0aGlzLm1vdGlvbkFyZ3MgPSBudWxsOwogICAgICB0aGlzLmtleUJ1ZmZlciA9IFtdOyAvLyBGb3IgbWF0Y2hpbmcgbXVsdGkta2V5IGNvbW1hbmRzLgogICAgICB0aGlzLnJlZ2lzdGVyTmFtZSA9IG51bGw7IC8vIERlZmF1bHRzIHRvIHRoZSB1bm5hbWVkIHJlZ2lzdGVyLgogICAgfQogICAgSW5wdXRTdGF0ZS5wcm90b3R5cGUucHVzaFJlcGVhdERpZ2l0ID0gZnVuY3Rpb24obikgewogICAgICBpZiAoIXRoaXMub3BlcmF0b3IpIHsKICAgICAgICB0aGlzLnByZWZpeFJlcGVhdCA9IHRoaXMucHJlZml4UmVwZWF0LmNvbmNhdChuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLm1vdGlvblJlcGVhdCA9IHRoaXMubW90aW9uUmVwZWF0LmNvbmNhdChuKTsKICAgICAgfQogICAgfTsKICAgIElucHV0U3RhdGUucHJvdG90eXBlLmdldFJlcGVhdCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcmVwZWF0ID0gMDsKICAgICAgaWYgKHRoaXMucHJlZml4UmVwZWF0Lmxlbmd0aCA+IDAgfHwgdGhpcy5tb3Rpb25SZXBlYXQubGVuZ3RoID4gMCkgewogICAgICAgIHJlcGVhdCA9IDE7CiAgICAgICAgaWYgKHRoaXMucHJlZml4UmVwZWF0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHJlcGVhdCAqPSBwYXJzZUludCh0aGlzLnByZWZpeFJlcGVhdC5qb2luKCcnKSwgMTApOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5tb3Rpb25SZXBlYXQubGVuZ3RoID4gMCkgewogICAgICAgICAgcmVwZWF0ICo9IHBhcnNlSW50KHRoaXMubW90aW9uUmVwZWF0LmpvaW4oJycpLCAxMCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXBlYXQ7CiAgICB9OwoKICAgIGZ1bmN0aW9uIGNsZWFySW5wdXRTdGF0ZShjbSwgcmVhc29uKSB7CiAgICAgIGNtLnN0YXRlLnZpbS5pbnB1dFN0YXRlID0gbmV3IElucHV0U3RhdGUoKTsKICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICd2aW0tY29tbWFuZC1kb25lJywgcmVhc29uKTsKICAgIH0KICAgIGZ1bmN0aW9uIFJlZ2lzdGVyKHRleHQsIGxpbmV3aXNlLCBibG9ja3dpc2UpIHsKICAgICAgdGhpcy5jbGVhcigpOwogICAgICB0aGlzLmtleUJ1ZmZlciA9IFt0ZXh0IHx8ICcnXTsKICAgICAgdGhpcy5pbnNlcnRNb2RlQ2hhbmdlcyA9IFtdOwogICAgICB0aGlzLnNlYXJjaFF1ZXJpZXMgPSBbXTsKICAgICAgdGhpcy5saW5ld2lzZSA9ICEhbGluZXdpc2U7CiAgICAgIHRoaXMuYmxvY2t3aXNlID0gISFibG9ja3dpc2U7CiAgICB9CiAgICBSZWdpc3Rlci5wcm90b3R5cGUgPSB7CiAgICAgIHNldFRleHQ6IGZ1bmN0aW9uKHRleHQsIGxpbmV3aXNlLCBibG9ja3dpc2UpIHsKICAgICAgICB0aGlzLmtleUJ1ZmZlciA9IFt0ZXh0IHx8ICcnXTsKICAgICAgICB0aGlzLmxpbmV3aXNlID0gISFsaW5ld2lzZTsKICAgICAgICB0aGlzLmJsb2Nrd2lzZSA9ICEhYmxvY2t3aXNlOwogICAgICB9LAogICAgICBwdXNoVGV4dDogZnVuY3Rpb24odGV4dCwgbGluZXdpc2UpIHsKICAgICAgICBpZiAobGluZXdpc2UpIHsKICAgICAgICAgIGlmICghdGhpcy5saW5ld2lzZSkgewogICAgICAgICAgICB0aGlzLmtleUJ1ZmZlci5wdXNoKCdcbicpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5saW5ld2lzZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHRoaXMua2V5QnVmZmVyLnB1c2godGV4dCk7CiAgICAgIH0sCiAgICAgIHB1c2hJbnNlcnRNb2RlQ2hhbmdlczogZnVuY3Rpb24oY2hhbmdlcykgewogICAgICAgIHRoaXMuaW5zZXJ0TW9kZUNoYW5nZXMucHVzaChjcmVhdGVJbnNlcnRNb2RlQ2hhbmdlcyhjaGFuZ2VzKSk7CiAgICAgIH0sCiAgICAgIHB1c2hTZWFyY2hRdWVyeTogZnVuY3Rpb24ocXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaFF1ZXJpZXMucHVzaChxdWVyeSk7CiAgICAgIH0sCiAgICAgIGNsZWFyOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmtleUJ1ZmZlciA9IFtdOwogICAgICAgIHRoaXMuaW5zZXJ0TW9kZUNoYW5nZXMgPSBbXTsKICAgICAgICB0aGlzLnNlYXJjaFF1ZXJpZXMgPSBbXTsKICAgICAgICB0aGlzLmxpbmV3aXNlID0gZmFsc2U7CiAgICAgIH0sCiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5rZXlCdWZmZXIuam9pbignJyk7CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBkZWZpbmVSZWdpc3RlcihuYW1lLCByZWdpc3RlcikgewogICAgICB2YXIgcmVnaXN0ZXJzID0gdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyLnJlZ2lzdGVyczsKICAgICAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoICE9IDEpIHsKICAgICAgICB0aHJvdyBFcnJvcignUmVnaXN0ZXIgbmFtZSBtdXN0IGJlIDEgY2hhcmFjdGVyJyk7CiAgICAgIH0KICAgICAgcmVnaXN0ZXJzW25hbWVdID0gcmVnaXN0ZXI7CiAgICAgIHZhbGlkUmVnaXN0ZXJzLnB1c2gobmFtZSk7CiAgICB9CiAgICBmdW5jdGlvbiBSZWdpc3RlckNvbnRyb2xsZXIocmVnaXN0ZXJzKSB7CiAgICAgIHRoaXMucmVnaXN0ZXJzID0gcmVnaXN0ZXJzOwogICAgICB0aGlzLnVubmFtZWRSZWdpc3RlciA9IHJlZ2lzdGVyc1snIiddID0gbmV3IFJlZ2lzdGVyKCk7CiAgICAgIHJlZ2lzdGVyc1snLiddID0gbmV3IFJlZ2lzdGVyKCk7CiAgICAgIHJlZ2lzdGVyc1snOiddID0gbmV3IFJlZ2lzdGVyKCk7CiAgICAgIHJlZ2lzdGVyc1snLyddID0gbmV3IFJlZ2lzdGVyKCk7CiAgICB9CiAgICBSZWdpc3RlckNvbnRyb2xsZXIucHJvdG90eXBlID0gewogICAgICBwdXNoVGV4dDogZnVuY3Rpb24ocmVnaXN0ZXJOYW1lLCBvcGVyYXRvciwgdGV4dCwgbGluZXdpc2UsIGJsb2Nrd2lzZSkgewogICAgICAgIGlmIChsaW5ld2lzZSAmJiB0ZXh0LmNoYXJBdCh0ZXh0Lmxlbmd0aCAtIDEpICE9PSAnXG4nKXsKICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAgICB9CiAgICAgICAgdmFyIHJlZ2lzdGVyID0gdGhpcy5pc1ZhbGlkUmVnaXN0ZXIocmVnaXN0ZXJOYW1lKSA/CiAgICAgICAgICAgIHRoaXMuZ2V0UmVnaXN0ZXIocmVnaXN0ZXJOYW1lKSA6IG51bGw7CiAgICAgICAgaWYgKCFyZWdpc3RlcikgewogICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikgewogICAgICAgICAgICBjYXNlICd5YW5rJzoKICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyc1snMCddID0gbmV3IFJlZ2lzdGVyKHRleHQsIGxpbmV3aXNlLCBibG9ja3dpc2UpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkZWxldGUnOgogICAgICAgICAgICBjYXNlICdjaGFuZ2UnOgogICAgICAgICAgICAgIGlmICh0ZXh0LmluZGV4T2YoJ1xuJykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJzWyctJ10gPSBuZXcgUmVnaXN0ZXIodGV4dCwgbGluZXdpc2UpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0TnVtZXJpY1JlZ2lzdGVyc18oKTsKICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJzWycxJ10gPSBuZXcgUmVnaXN0ZXIodGV4dCwgbGluZXdpc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMudW5uYW1lZFJlZ2lzdGVyLnNldFRleHQodGV4dCwgbGluZXdpc2UsIGJsb2Nrd2lzZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBhcHBlbmQgPSBpc1VwcGVyQ2FzZShyZWdpc3Rlck5hbWUpOwogICAgICAgIGlmIChhcHBlbmQpIHsKICAgICAgICAgIHJlZ2lzdGVyLnB1c2hUZXh0KHRleHQsIGxpbmV3aXNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVnaXN0ZXIuc2V0VGV4dCh0ZXh0LCBsaW5ld2lzZSwgYmxvY2t3aXNlKTsKICAgICAgICB9CiAgICAgICAgdGhpcy51bm5hbWVkUmVnaXN0ZXIuc2V0VGV4dChyZWdpc3Rlci50b1N0cmluZygpLCBsaW5ld2lzZSk7CiAgICAgIH0sCiAgICAgIGdldFJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRSZWdpc3RlcihuYW1lKSkgewogICAgICAgICAgcmV0dXJuIHRoaXMudW5uYW1lZFJlZ2lzdGVyOwogICAgICAgIH0KICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmICghdGhpcy5yZWdpc3RlcnNbbmFtZV0pIHsKICAgICAgICAgIHRoaXMucmVnaXN0ZXJzW25hbWVdID0gbmV3IFJlZ2lzdGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyc1tuYW1lXTsKICAgICAgfSwKICAgICAgaXNWYWxpZFJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgcmV0dXJuIG5hbWUgJiYgaW5BcnJheShuYW1lLCB2YWxpZFJlZ2lzdGVycyk7CiAgICAgIH0sCiAgICAgIHNoaWZ0TnVtZXJpY1JlZ2lzdGVyc186IGZ1bmN0aW9uKCkgewogICAgICAgIGZvciAodmFyIGkgPSA5OyBpID49IDI7IGktLSkgewogICAgICAgICAgdGhpcy5yZWdpc3RlcnNbaV0gPSB0aGlzLmdldFJlZ2lzdGVyKCcnICsgKGkgLSAxKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gSGlzdG9yeUNvbnRyb2xsZXIoKSB7CiAgICAgICAgdGhpcy5oaXN0b3J5QnVmZmVyID0gW107CiAgICAgICAgdGhpcy5pdGVyYXRvciA9IDA7CiAgICAgICAgdGhpcy5pbml0aWFsUHJlZml4ID0gbnVsbDsKICAgIH0KICAgIEhpc3RvcnlDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKICAgICAgbmV4dE1hdGNoOiBmdW5jdGlvbiAoaW5wdXQsIHVwKSB7CiAgICAgICAgdmFyIGhpc3RvcnlCdWZmZXIgPSB0aGlzLmhpc3RvcnlCdWZmZXI7CiAgICAgICAgdmFyIGRpciA9IHVwID8gLTEgOiAxOwogICAgICAgIGlmICh0aGlzLmluaXRpYWxQcmVmaXggPT09IG51bGwpIHRoaXMuaW5pdGlhbFByZWZpeCA9IGlucHV0OwogICAgICAgIGZvciAodmFyIGkgPSB0aGlzLml0ZXJhdG9yICsgZGlyOyB1cCA/IGkgPj0gMCA6IGkgPCBoaXN0b3J5QnVmZmVyLmxlbmd0aDsgaSs9IGRpcikgewogICAgICAgICAgdmFyIGVsZW1lbnQgPSBoaXN0b3J5QnVmZmVyW2ldOwogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPD0gZWxlbWVudC5sZW5ndGg7IGorKykgewogICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsUHJlZml4ID09IGVsZW1lbnQuc3Vic3RyaW5nKDAsIGopKSB7CiAgICAgICAgICAgICAgdGhpcy5pdGVyYXRvciA9IGk7CiAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGkgPj0gaGlzdG9yeUJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMuaXRlcmF0b3IgPSBoaXN0b3J5QnVmZmVyLmxlbmd0aDsKICAgICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxQcmVmaXg7CiAgICAgICAgfQogICAgICAgIGlmIChpIDwgMCApIHJldHVybiBpbnB1dDsKICAgICAgfSwKICAgICAgcHVzaElucHV0OiBmdW5jdGlvbihpbnB1dCkgewogICAgICAgIHZhciBpbmRleCA9IHRoaXMuaGlzdG9yeUJ1ZmZlci5pbmRleE9mKGlucHV0KTsKICAgICAgICBpZiAoaW5kZXggPiAtMSkgdGhpcy5oaXN0b3J5QnVmZmVyLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCkgdGhpcy5oaXN0b3J5QnVmZmVyLnB1c2goaW5wdXQpOwogICAgICB9LAogICAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5pbml0aWFsUHJlZml4ID0gbnVsbDsKICAgICAgICB0aGlzLml0ZXJhdG9yID0gdGhpcy5oaXN0b3J5QnVmZmVyLmxlbmd0aDsKICAgICAgfQogICAgfTsKICAgIHZhciBjb21tYW5kRGlzcGF0Y2hlciA9IHsKICAgICAgbWF0Y2hDb21tYW5kOiBmdW5jdGlvbihrZXlzLCBrZXlNYXAsIGlucHV0U3RhdGUsIGNvbnRleHQpIHsKICAgICAgICB2YXIgbWF0Y2hlcyA9IGNvbW1hbmRNYXRjaGVzKGtleXMsIGtleU1hcCwgY29udGV4dCwgaW5wdXRTdGF0ZSk7CiAgICAgICAgaWYgKCFtYXRjaGVzLmZ1bGwgJiYgIW1hdGNoZXMucGFydGlhbCkgewogICAgICAgICAgcmV0dXJuIHt0eXBlOiAnbm9uZSd9OwogICAgICAgIH0gZWxzZSBpZiAoIW1hdGNoZXMuZnVsbCAmJiBtYXRjaGVzLnBhcnRpYWwpIHsKICAgICAgICAgIHJldHVybiB7dHlwZTogJ3BhcnRpYWwnfTsKICAgICAgICB9CgogICAgICAgIHZhciBiZXN0TWF0Y2g7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVzLmZ1bGwubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoZXMuZnVsbFtpXTsKICAgICAgICAgIGlmICghYmVzdE1hdGNoKSB7CiAgICAgICAgICAgIGJlc3RNYXRjaCA9IG1hdGNoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoYmVzdE1hdGNoLmtleXMuc2xpY2UoLTExKSA9PSAnPGNoYXJhY3Rlcj4nKSB7CiAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gbGFzdENoYXIoa2V5cyk7CiAgICAgICAgICBpZiAoLzxDLS4+Ly50ZXN0KGNoYXJhY3RlcikgfHwgIWNoYXJhY3RlcikgcmV0dXJuIHt0eXBlOiAnbm9uZSd9OyAvL2FjZV9wYXRjaAogICAgICAgICAgaW5wdXRTdGF0ZS5zZWxlY3RlZENoYXJhY3RlciA9IGNoYXJhY3RlcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHt0eXBlOiAnZnVsbCcsIGNvbW1hbmQ6IGJlc3RNYXRjaH07CiAgICAgIH0sCiAgICAgIHByb2Nlc3NDb21tYW5kOiBmdW5jdGlvbihjbSwgdmltLCBjb21tYW5kKSB7CiAgICAgICAgdmltLmlucHV0U3RhdGUucmVwZWF0T3ZlcnJpZGUgPSBjb21tYW5kLnJlcGVhdE92ZXJyaWRlOwogICAgICAgIHN3aXRjaCAoY29tbWFuZC50eXBlKSB7CiAgICAgICAgICBjYXNlICdtb3Rpb24nOgogICAgICAgICAgICB0aGlzLnByb2Nlc3NNb3Rpb24oY20sIHZpbSwgY29tbWFuZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnb3BlcmF0b3InOgogICAgICAgICAgICB0aGlzLnByb2Nlc3NPcGVyYXRvcihjbSwgdmltLCBjb21tYW5kKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdvcGVyYXRvck1vdGlvbic6CiAgICAgICAgICAgIHRoaXMucHJvY2Vzc09wZXJhdG9yTW90aW9uKGNtLCB2aW0sIGNvbW1hbmQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ2FjdGlvbic6CiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0FjdGlvbihjbSwgdmltLCBjb21tYW5kKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdzZWFyY2gnOgogICAgICAgICAgICB0aGlzLnByb2Nlc3NTZWFyY2goY20sIHZpbSwgY29tbWFuZCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnZXgnOgogICAgICAgICAgY2FzZSAna2V5VG9FeCc6CiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0V4KGNtLCB2aW0sIGNvbW1hbmQpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJvY2Vzc01vdGlvbjogZnVuY3Rpb24oY20sIHZpbSwgY29tbWFuZCkgewogICAgICAgIHZpbS5pbnB1dFN0YXRlLm1vdGlvbiA9IGNvbW1hbmQubW90aW9uOwogICAgICAgIHZpbS5pbnB1dFN0YXRlLm1vdGlvbkFyZ3MgPSBjb3B5QXJncyhjb21tYW5kLm1vdGlvbkFyZ3MpOwogICAgICAgIHRoaXMuZXZhbElucHV0KGNtLCB2aW0pOwogICAgICB9LAogICAgICBwcm9jZXNzT3BlcmF0b3I6IGZ1bmN0aW9uKGNtLCB2aW0sIGNvbW1hbmQpIHsKICAgICAgICB2YXIgaW5wdXRTdGF0ZSA9IHZpbS5pbnB1dFN0YXRlOwogICAgICAgIGlmIChpbnB1dFN0YXRlLm9wZXJhdG9yKSB7CiAgICAgICAgICBpZiAoaW5wdXRTdGF0ZS5vcGVyYXRvciA9PSBjb21tYW5kLm9wZXJhdG9yKSB7CiAgICAgICAgICAgIGlucHV0U3RhdGUubW90aW9uID0gJ2V4cGFuZFRvTGluZSc7CiAgICAgICAgICAgIGlucHV0U3RhdGUubW90aW9uQXJncyA9IHsgbGluZXdpc2U6IHRydWUgfTsKICAgICAgICAgICAgdGhpcy5ldmFsSW5wdXQoY20sIHZpbSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNsZWFySW5wdXRTdGF0ZShjbSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlucHV0U3RhdGUub3BlcmF0b3IgPSBjb21tYW5kLm9wZXJhdG9yOwogICAgICAgIGlucHV0U3RhdGUub3BlcmF0b3JBcmdzID0gY29weUFyZ3MoY29tbWFuZC5vcGVyYXRvckFyZ3MpOwogICAgICAgIGlmIChjb21tYW5kLmV4aXRWaXN1YWxCbG9jaykgewogICAgICAgICAgICB2aW0udmlzdWFsQmxvY2sgPSBmYWxzZTsKICAgICAgICAgICAgdXBkYXRlQ21TZWxlY3Rpb24oY20pOwogICAgICAgIH0KICAgICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICAgIHRoaXMuZXZhbElucHV0KGNtLCB2aW0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJvY2Vzc09wZXJhdG9yTW90aW9uOiBmdW5jdGlvbihjbSwgdmltLCBjb21tYW5kKSB7CiAgICAgICAgdmFyIHZpc3VhbE1vZGUgPSB2aW0udmlzdWFsTW9kZTsKICAgICAgICB2YXIgb3BlcmF0b3JNb3Rpb25BcmdzID0gY29weUFyZ3MoY29tbWFuZC5vcGVyYXRvck1vdGlvbkFyZ3MpOwogICAgICAgIGlmIChvcGVyYXRvck1vdGlvbkFyZ3MpIHsKICAgICAgICAgIGlmICh2aXN1YWxNb2RlICYmIG9wZXJhdG9yTW90aW9uQXJncy52aXN1YWxMaW5lKSB7CiAgICAgICAgICAgIHZpbS52aXN1YWxMaW5lID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5wcm9jZXNzT3BlcmF0b3IoY20sIHZpbSwgY29tbWFuZCk7CiAgICAgICAgaWYgKCF2aXN1YWxNb2RlKSB7CiAgICAgICAgICB0aGlzLnByb2Nlc3NNb3Rpb24oY20sIHZpbSwgY29tbWFuZCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBwcm9jZXNzQWN0aW9uOiBmdW5jdGlvbihjbSwgdmltLCBjb21tYW5kKSB7CiAgICAgICAgdmFyIGlucHV0U3RhdGUgPSB2aW0uaW5wdXRTdGF0ZTsKICAgICAgICB2YXIgcmVwZWF0ID0gaW5wdXRTdGF0ZS5nZXRSZXBlYXQoKTsKICAgICAgICB2YXIgcmVwZWF0SXNFeHBsaWNpdCA9ICEhcmVwZWF0OwogICAgICAgIHZhciBhY3Rpb25BcmdzID0gY29weUFyZ3MoY29tbWFuZC5hY3Rpb25BcmdzKSB8fCB7fTsKICAgICAgICBpZiAoaW5wdXRTdGF0ZS5zZWxlY3RlZENoYXJhY3RlcikgewogICAgICAgICAgYWN0aW9uQXJncy5zZWxlY3RlZENoYXJhY3RlciA9IGlucHV0U3RhdGUuc2VsZWN0ZWRDaGFyYWN0ZXI7CiAgICAgICAgfQogICAgICAgIGlmIChjb21tYW5kLm9wZXJhdG9yKSB7CiAgICAgICAgICB0aGlzLnByb2Nlc3NPcGVyYXRvcihjbSwgdmltLCBjb21tYW5kKTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbW1hbmQubW90aW9uKSB7CiAgICAgICAgICB0aGlzLnByb2Nlc3NNb3Rpb24oY20sIHZpbSwgY29tbWFuZCk7CiAgICAgICAgfQogICAgICAgIGlmIChjb21tYW5kLm1vdGlvbiB8fCBjb21tYW5kLm9wZXJhdG9yKSB7CiAgICAgICAgICB0aGlzLmV2YWxJbnB1dChjbSwgdmltKTsKICAgICAgICB9CiAgICAgICAgYWN0aW9uQXJncy5yZXBlYXQgPSByZXBlYXQgfHwgMTsKICAgICAgICBhY3Rpb25BcmdzLnJlcGVhdElzRXhwbGljaXQgPSByZXBlYXRJc0V4cGxpY2l0OwogICAgICAgIGFjdGlvbkFyZ3MucmVnaXN0ZXJOYW1lID0gaW5wdXRTdGF0ZS5yZWdpc3Rlck5hbWU7CiAgICAgICAgY2xlYXJJbnB1dFN0YXRlKGNtKTsKICAgICAgICB2aW0ubGFzdE1vdGlvbiA9IG51bGw7CiAgICAgICAgaWYgKGNvbW1hbmQuaXNFZGl0KSB7CiAgICAgICAgICB0aGlzLnJlY29yZExhc3RFZGl0KHZpbSwgaW5wdXRTdGF0ZSwgY29tbWFuZCk7CiAgICAgICAgfQogICAgICAgIGFjdGlvbnNbY29tbWFuZC5hY3Rpb25dKGNtLCBhY3Rpb25BcmdzLCB2aW0pOwogICAgICB9LAogICAgICBwcm9jZXNzU2VhcmNoOiBmdW5jdGlvbihjbSwgdmltLCBjb21tYW5kKSB7CiAgICAgICAgaWYgKCFjbS5nZXRTZWFyY2hDdXJzb3IpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGZvcndhcmQgPSBjb21tYW5kLnNlYXJjaEFyZ3MuZm9yd2FyZDsKICAgICAgICB2YXIgd2hvbGVXb3JkT25seSA9IGNvbW1hbmQuc2VhcmNoQXJncy53aG9sZVdvcmRPbmx5OwogICAgICAgIGdldFNlYXJjaFN0YXRlKGNtKS5zZXRSZXZlcnNlZCghZm9yd2FyZCk7CiAgICAgICAgdmFyIHByb21wdFByZWZpeCA9IChmb3J3YXJkKSA/ICcvJyA6ICc/JzsKICAgICAgICB2YXIgb3JpZ2luYWxRdWVyeSA9IGdldFNlYXJjaFN0YXRlKGNtKS5nZXRRdWVyeSgpOwogICAgICAgIHZhciBvcmlnaW5hbFNjcm9sbFBvcyA9IGNtLmdldFNjcm9sbEluZm8oKTsKICAgICAgICBmdW5jdGlvbiBoYW5kbGVRdWVyeShxdWVyeSwgaWdub3JlQ2FzZSwgc21hcnRDYXNlKSB7CiAgICAgICAgICB2aW1HbG9iYWxTdGF0ZS5zZWFyY2hIaXN0b3J5Q29udHJvbGxlci5wdXNoSW5wdXQocXVlcnkpOwogICAgICAgICAgdmltR2xvYmFsU3RhdGUuc2VhcmNoSGlzdG9yeUNvbnRyb2xsZXIucmVzZXQoKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHVwZGF0ZVNlYXJjaFF1ZXJ5KGNtLCBxdWVyeSwgaWdub3JlQ2FzZSwgc21hcnRDYXNlKTsKICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdJbnZhbGlkIHJlZ2V4OiAnICsgcXVlcnkpOwogICAgICAgICAgICBjbGVhcklucHV0U3RhdGUoY20pOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb21tYW5kRGlzcGF0Y2hlci5wcm9jZXNzTW90aW9uKGNtLCB2aW0sIHsKICAgICAgICAgICAgdHlwZTogJ21vdGlvbicsCiAgICAgICAgICAgIG1vdGlvbjogJ2ZpbmROZXh0JywKICAgICAgICAgICAgbW90aW9uQXJnczogeyBmb3J3YXJkOiB0cnVlLCB0b0p1bXBsaXN0OiBjb21tYW5kLnNlYXJjaEFyZ3MudG9KdW1wbGlzdCB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gb25Qcm9tcHRDbG9zZShxdWVyeSkgewogICAgICAgICAgaGFuZGxlUXVlcnkocXVlcnksIHRydWUgLyoqIGlnbm9yZUNhc2UgKi8sIHRydWUgLyoqIHNtYXJ0Q2FzZSAqLyk7CiAgICAgICAgICB2YXIgbWFjcm9Nb2RlU3RhdGUgPSB2aW1HbG9iYWxTdGF0ZS5tYWNyb01vZGVTdGF0ZTsKICAgICAgICAgIGlmIChtYWNyb01vZGVTdGF0ZS5pc1JlY29yZGluZykgewogICAgICAgICAgICBsb2dTZWFyY2hRdWVyeShtYWNyb01vZGVTdGF0ZSwgcXVlcnkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBvblByb21wdEtleVVwKGUsIHF1ZXJ5LCBjbG9zZSkgewogICAgICAgICAgdmFyIGtleU5hbWUgPSBDb2RlTWlycm9yLmtleU5hbWUoZSksIHVwLCBvZmZzZXQ7CiAgICAgICAgICBpZiAoa2V5TmFtZSA9PSAnVXAnIHx8IGtleU5hbWUgPT0gJ0Rvd24nKSB7CiAgICAgICAgICAgIHVwID0ga2V5TmFtZSA9PSAnVXAnID8gdHJ1ZSA6IGZhbHNlOwogICAgICAgICAgICBvZmZzZXQgPSBlLnRhcmdldCA/IGUudGFyZ2V0LnNlbGVjdGlvbkVuZCA6IDA7CiAgICAgICAgICAgIHF1ZXJ5ID0gdmltR2xvYmFsU3RhdGUuc2VhcmNoSGlzdG9yeUNvbnRyb2xsZXIubmV4dE1hdGNoKHF1ZXJ5LCB1cCkgfHwgJyc7CiAgICAgICAgICAgIGNsb3NlKHF1ZXJ5KTsKICAgICAgICAgICAgaWYgKG9mZnNldCAmJiBlLnRhcmdldCkgZS50YXJnZXQuc2VsZWN0aW9uRW5kID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPSBNYXRoLm1pbihvZmZzZXQsIGUudGFyZ2V0LnZhbHVlLmxlbmd0aCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIGtleU5hbWUgIT0gJ0xlZnQnICYmIGtleU5hbWUgIT0gJ1JpZ2h0JyAmJiBrZXlOYW1lICE9ICdDdHJsJyAmJiBrZXlOYW1lICE9ICdBbHQnICYmIGtleU5hbWUgIT0gJ1NoaWZ0JykKICAgICAgICAgICAgICB2aW1HbG9iYWxTdGF0ZS5zZWFyY2hIaXN0b3J5Q29udHJvbGxlci5yZXNldCgpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHBhcnNlZFF1ZXJ5OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcGFyc2VkUXVlcnkgPSB1cGRhdGVTZWFyY2hRdWVyeShjbSwgcXVlcnksCiAgICAgICAgICAgICAgICB0cnVlIC8qKiBpZ25vcmVDYXNlICovLCB0cnVlIC8qKiBzbWFydENhc2UgKi8pOwogICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgfQogICAgICAgICAgaWYgKHBhcnNlZFF1ZXJ5KSB7CiAgICAgICAgICAgIGNtLnNjcm9sbEludG9WaWV3KGZpbmROZXh0KGNtLCAhZm9yd2FyZCwgcGFyc2VkUXVlcnkpLCAzMCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjbGVhclNlYXJjaEhpZ2hsaWdodChjbSk7CiAgICAgICAgICAgIGNtLnNjcm9sbFRvKG9yaWdpbmFsU2Nyb2xsUG9zLmxlZnQsIG9yaWdpbmFsU2Nyb2xsUG9zLnRvcCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIG9uUHJvbXB0S2V5RG93bihlLCBxdWVyeSwgY2xvc2UpIHsKICAgICAgICAgIHZhciBrZXlOYW1lID0gQ29kZU1pcnJvci5rZXlOYW1lKGUpOwogICAgICAgICAgaWYgKGtleU5hbWUgPT0gJ0VzYycgfHwga2V5TmFtZSA9PSAnQ3RybC1DJyB8fCBrZXlOYW1lID09ICdDdHJsLVsnIHx8CiAgICAgICAgICAgICAgKGtleU5hbWUgPT0gJ0JhY2tzcGFjZScgJiYgcXVlcnkgPT0gJycpKSB7CiAgICAgICAgICAgIHZpbUdsb2JhbFN0YXRlLnNlYXJjaEhpc3RvcnlDb250cm9sbGVyLnB1c2hJbnB1dChxdWVyeSk7CiAgICAgICAgICAgIHZpbUdsb2JhbFN0YXRlLnNlYXJjaEhpc3RvcnlDb250cm9sbGVyLnJlc2V0KCk7CiAgICAgICAgICAgIHVwZGF0ZVNlYXJjaFF1ZXJ5KGNtLCBvcmlnaW5hbFF1ZXJ5KTsKICAgICAgICAgICAgY2xlYXJTZWFyY2hIaWdobGlnaHQoY20pOwogICAgICAgICAgICBjbS5zY3JvbGxUbyhvcmlnaW5hbFNjcm9sbFBvcy5sZWZ0LCBvcmlnaW5hbFNjcm9sbFBvcy50b3ApOwogICAgICAgICAgICBDb2RlTWlycm9yLmVfc3RvcChlKTsKICAgICAgICAgICAgY2xlYXJJbnB1dFN0YXRlKGNtKTsKICAgICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgICAgY20uZm9jdXMoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PSAnVXAnIHx8IGtleU5hbWUgPT0gJ0Rvd24nKSB7CiAgICAgICAgICAgIENvZGVNaXJyb3IuZV9zdG9wKGUpOwogICAgICAgICAgfSBlbHNlIGlmIChrZXlOYW1lID09ICdDdHJsLVUnKSB7CiAgICAgICAgICAgIENvZGVNaXJyb3IuZV9zdG9wKGUpOwogICAgICAgICAgICBjbG9zZSgnJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoY29tbWFuZC5zZWFyY2hBcmdzLnF1ZXJ5U3JjKSB7CiAgICAgICAgICBjYXNlICdwcm9tcHQnOgogICAgICAgICAgICB2YXIgbWFjcm9Nb2RlU3RhdGUgPSB2aW1HbG9iYWxTdGF0ZS5tYWNyb01vZGVTdGF0ZTsKICAgICAgICAgICAgaWYgKG1hY3JvTW9kZVN0YXRlLmlzUGxheWluZykgewogICAgICAgICAgICAgIHZhciBxdWVyeSA9IG1hY3JvTW9kZVN0YXRlLnJlcGxheVNlYXJjaFF1ZXJpZXMuc2hpZnQoKTsKICAgICAgICAgICAgICBoYW5kbGVRdWVyeShxdWVyeSwgdHJ1ZSAvKiogaWdub3JlQ2FzZSAqLywgZmFsc2UgLyoqIHNtYXJ0Q2FzZSAqLyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc2hvd1Byb21wdChjbSwgewogICAgICAgICAgICAgICAgICBvbkNsb3NlOiBvblByb21wdENsb3NlLAogICAgICAgICAgICAgICAgICBwcmVmaXg6IHByb21wdFByZWZpeCwKICAgICAgICAgICAgICAgICAgZGVzYzogc2VhcmNoUHJvbXB0RGVzYywKICAgICAgICAgICAgICAgICAgb25LZXlVcDogb25Qcm9tcHRLZXlVcCwKICAgICAgICAgICAgICAgICAgb25LZXlEb3duOiBvblByb21wdEtleURvd24KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3dvcmRVbmRlckN1cnNvcic6CiAgICAgICAgICAgIHZhciB3b3JkID0gZXhwYW5kV29yZFVuZGVyQ3Vyc29yKGNtLCBmYWxzZSAvKiogaW5jbHVzaXZlICovLAogICAgICAgICAgICAgICAgdHJ1ZSAvKiogZm9yd2FyZCAqLywgZmFsc2UgLyoqIGJpZ1dvcmQgKi8sCiAgICAgICAgICAgICAgICB0cnVlIC8qKiBub1N5bWJvbCAqLyk7CiAgICAgICAgICAgIHZhciBpc0tleXdvcmQgPSB0cnVlOwogICAgICAgICAgICBpZiAoIXdvcmQpIHsKICAgICAgICAgICAgICB3b3JkID0gZXhwYW5kV29yZFVuZGVyQ3Vyc29yKGNtLCBmYWxzZSAvKiogaW5jbHVzaXZlICovLAogICAgICAgICAgICAgICAgICB0cnVlIC8qKiBmb3J3YXJkICovLCBmYWxzZSAvKiogYmlnV29yZCAqLywKICAgICAgICAgICAgICAgICAgZmFsc2UgLyoqIG5vU3ltYm9sICovKTsKICAgICAgICAgICAgICBpc0tleXdvcmQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXdvcmQpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gY20uZ2V0TGluZSh3b3JkLnN0YXJ0LmxpbmUpLnN1YnN0cmluZyh3b3JkLnN0YXJ0LmNoLAogICAgICAgICAgICAgICAgd29yZC5lbmQuY2gpOwogICAgICAgICAgICBpZiAoaXNLZXl3b3JkICYmIHdob2xlV29yZE9ubHkpIHsKICAgICAgICAgICAgICAgIHF1ZXJ5ID0gJ1xcYicgKyBxdWVyeSArICdcXGInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHF1ZXJ5ID0gZXNjYXBlUmVnZXgocXVlcnkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpbUdsb2JhbFN0YXRlLmp1bXBMaXN0LmNhY2hlZEN1cnNvciA9IGNtLmdldEN1cnNvcigpOwogICAgICAgICAgICBjbS5zZXRDdXJzb3Iod29yZC5zdGFydCk7CgogICAgICAgICAgICBoYW5kbGVRdWVyeShxdWVyeSwgdHJ1ZSAvKiogaWdub3JlQ2FzZSAqLywgZmFsc2UgLyoqIHNtYXJ0Q2FzZSAqLyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJvY2Vzc0V4OiBmdW5jdGlvbihjbSwgdmltLCBjb21tYW5kKSB7CiAgICAgICAgZnVuY3Rpb24gb25Qcm9tcHRDbG9zZShpbnB1dCkgewogICAgICAgICAgdmltR2xvYmFsU3RhdGUuZXhDb21tYW5kSGlzdG9yeUNvbnRyb2xsZXIucHVzaElucHV0KGlucHV0KTsKICAgICAgICAgIHZpbUdsb2JhbFN0YXRlLmV4Q29tbWFuZEhpc3RvcnlDb250cm9sbGVyLnJlc2V0KCk7CiAgICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLnByb2Nlc3NDb21tYW5kKGNtLCBpbnB1dCk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIG9uUHJvbXB0S2V5RG93bihlLCBpbnB1dCwgY2xvc2UpIHsKICAgICAgICAgIHZhciBrZXlOYW1lID0gQ29kZU1pcnJvci5rZXlOYW1lKGUpLCB1cCwgb2Zmc2V0OwogICAgICAgICAgaWYgKGtleU5hbWUgPT0gJ0VzYycgfHwga2V5TmFtZSA9PSAnQ3RybC1DJyB8fCBrZXlOYW1lID09ICdDdHJsLVsnIHx8CiAgICAgICAgICAgICAgKGtleU5hbWUgPT0gJ0JhY2tzcGFjZScgJiYgaW5wdXQgPT0gJycpKSB7CiAgICAgICAgICAgIHZpbUdsb2JhbFN0YXRlLmV4Q29tbWFuZEhpc3RvcnlDb250cm9sbGVyLnB1c2hJbnB1dChpbnB1dCk7CiAgICAgICAgICAgIHZpbUdsb2JhbFN0YXRlLmV4Q29tbWFuZEhpc3RvcnlDb250cm9sbGVyLnJlc2V0KCk7CiAgICAgICAgICAgIENvZGVNaXJyb3IuZV9zdG9wKGUpOwogICAgICAgICAgICBjbGVhcklucHV0U3RhdGUoY20pOwogICAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgICBjbS5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGtleU5hbWUgPT0gJ1VwJyB8fCBrZXlOYW1lID09ICdEb3duJykgewogICAgICAgICAgICBDb2RlTWlycm9yLmVfc3RvcChlKTsKICAgICAgICAgICAgdXAgPSBrZXlOYW1lID09ICdVcCcgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICAgIG9mZnNldCA9IGUudGFyZ2V0ID8gZS50YXJnZXQuc2VsZWN0aW9uRW5kIDogMDsKICAgICAgICAgICAgaW5wdXQgPSB2aW1HbG9iYWxTdGF0ZS5leENvbW1hbmRIaXN0b3J5Q29udHJvbGxlci5uZXh0TWF0Y2goaW5wdXQsIHVwKSB8fCAnJzsKICAgICAgICAgICAgY2xvc2UoaW5wdXQpOwogICAgICAgICAgICBpZiAob2Zmc2V0ICYmIGUudGFyZ2V0KSBlLnRhcmdldC5zZWxlY3Rpb25FbmQgPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydCA9IE1hdGgubWluKG9mZnNldCwgZS50YXJnZXQudmFsdWUubGVuZ3RoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PSAnQ3RybC1VJykgewogICAgICAgICAgICBDb2RlTWlycm9yLmVfc3RvcChlKTsKICAgICAgICAgICAgY2xvc2UoJycpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCBrZXlOYW1lICE9ICdMZWZ0JyAmJiBrZXlOYW1lICE9ICdSaWdodCcgJiYga2V5TmFtZSAhPSAnQ3RybCcgJiYga2V5TmFtZSAhPSAnQWx0JyAmJiBrZXlOYW1lICE9ICdTaGlmdCcpCiAgICAgICAgICAgICAgdmltR2xvYmFsU3RhdGUuZXhDb21tYW5kSGlzdG9yeUNvbnRyb2xsZXIucmVzZXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvbW1hbmQudHlwZSA9PSAna2V5VG9FeCcpIHsKICAgICAgICAgIGV4Q29tbWFuZERpc3BhdGNoZXIucHJvY2Vzc0NvbW1hbmQoY20sIGNvbW1hbmQuZXhBcmdzLmlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICAgIHNob3dQcm9tcHQoY20sIHsgb25DbG9zZTogb25Qcm9tcHRDbG9zZSwgcHJlZml4OiAnOicsIHZhbHVlOiAnXCc8LFwnPicsCiAgICAgICAgICAgICAgICBvbktleURvd246IG9uUHJvbXB0S2V5RG93biwgc2VsZWN0VmFsdWVPbk9wZW46IGZhbHNlfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaG93UHJvbXB0KGNtLCB7IG9uQ2xvc2U6IG9uUHJvbXB0Q2xvc2UsIHByZWZpeDogJzonLAogICAgICAgICAgICAgICAgb25LZXlEb3duOiBvblByb21wdEtleURvd259KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGV2YWxJbnB1dDogZnVuY3Rpb24oY20sIHZpbSkgewogICAgICAgIHZhciBpbnB1dFN0YXRlID0gdmltLmlucHV0U3RhdGU7CiAgICAgICAgdmFyIG1vdGlvbiA9IGlucHV0U3RhdGUubW90aW9uOwogICAgICAgIHZhciBtb3Rpb25BcmdzID0gaW5wdXRTdGF0ZS5tb3Rpb25BcmdzIHx8IHt9OwogICAgICAgIHZhciBvcGVyYXRvciA9IGlucHV0U3RhdGUub3BlcmF0b3I7CiAgICAgICAgdmFyIG9wZXJhdG9yQXJncyA9IGlucHV0U3RhdGUub3BlcmF0b3JBcmdzIHx8IHt9OwogICAgICAgIHZhciByZWdpc3Rlck5hbWUgPSBpbnB1dFN0YXRlLnJlZ2lzdGVyTmFtZTsKICAgICAgICB2YXIgc2VsID0gdmltLnNlbDsKICAgICAgICB2YXIgb3JpZ0hlYWQgPSBjb3B5Q3Vyc29yKHZpbS52aXN1YWxNb2RlID8gY2xpcEN1cnNvclRvQ29udGVudChjbSwgc2VsLmhlYWQpOiBjbS5nZXRDdXJzb3IoJ2hlYWQnKSk7CiAgICAgICAgdmFyIG9yaWdBbmNob3IgPSBjb3B5Q3Vyc29yKHZpbS52aXN1YWxNb2RlID8gY2xpcEN1cnNvclRvQ29udGVudChjbSwgc2VsLmFuY2hvcikgOiBjbS5nZXRDdXJzb3IoJ2FuY2hvcicpKTsKICAgICAgICB2YXIgb2xkSGVhZCA9IGNvcHlDdXJzb3Iob3JpZ0hlYWQpOwogICAgICAgIHZhciBvbGRBbmNob3IgPSBjb3B5Q3Vyc29yKG9yaWdBbmNob3IpOwogICAgICAgIHZhciBuZXdIZWFkLCBuZXdBbmNob3I7CiAgICAgICAgdmFyIHJlcGVhdDsKICAgICAgICBpZiAob3BlcmF0b3IpIHsKICAgICAgICAgIHRoaXMucmVjb3JkTGFzdEVkaXQodmltLCBpbnB1dFN0YXRlKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0U3RhdGUucmVwZWF0T3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcmVwZWF0ID0gaW5wdXRTdGF0ZS5yZXBlYXRPdmVycmlkZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwZWF0ID0gaW5wdXRTdGF0ZS5nZXRSZXBlYXQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlcGVhdCA+IDAgJiYgbW90aW9uQXJncy5leHBsaWNpdFJlcGVhdCkgewogICAgICAgICAgbW90aW9uQXJncy5yZXBlYXRJc0V4cGxpY2l0ID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgaWYgKG1vdGlvbkFyZ3Mubm9SZXBlYXQgfHwKICAgICAgICAgICAgKCFtb3Rpb25BcmdzLmV4cGxpY2l0UmVwZWF0ICYmIHJlcGVhdCA9PT0gMCkpIHsKICAgICAgICAgIHJlcGVhdCA9IDE7CiAgICAgICAgICBtb3Rpb25BcmdzLnJlcGVhdElzRXhwbGljaXQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0U3RhdGUuc2VsZWN0ZWRDaGFyYWN0ZXIpIHsKICAgICAgICAgIG1vdGlvbkFyZ3Muc2VsZWN0ZWRDaGFyYWN0ZXIgPSBvcGVyYXRvckFyZ3Muc2VsZWN0ZWRDaGFyYWN0ZXIgPQogICAgICAgICAgICAgIGlucHV0U3RhdGUuc2VsZWN0ZWRDaGFyYWN0ZXI7CiAgICAgICAgfQogICAgICAgIG1vdGlvbkFyZ3MucmVwZWF0ID0gcmVwZWF0OwogICAgICAgIGNsZWFySW5wdXRTdGF0ZShjbSk7CiAgICAgICAgaWYgKG1vdGlvbikgewogICAgICAgICAgdmFyIG1vdGlvblJlc3VsdCA9IG1vdGlvbnNbbW90aW9uXShjbSwgb3JpZ0hlYWQsIG1vdGlvbkFyZ3MsIHZpbSk7CiAgICAgICAgICB2aW0ubGFzdE1vdGlvbiA9IG1vdGlvbnNbbW90aW9uXTsKICAgICAgICAgIGlmICghbW90aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChtb3Rpb25BcmdzLnRvSnVtcGxpc3QpIHsKICAgICAgICAgICAgaWYgKCFvcGVyYXRvciAmJiBjbS5hY2UuY3VyT3AgIT0gbnVsbCkKICAgICAgICAgICAgICBjbS5hY2UuY3VyT3AuY29tbWFuZC5zY3JvbGxJbnRvVmlldyA9ICJjZW50ZXItYW5pbWF0ZSI7IC8vIGFjZV9wYXRjaAogICAgICAgICAgICB2YXIganVtcExpc3QgPSB2aW1HbG9iYWxTdGF0ZS5qdW1wTGlzdDsKICAgICAgICAgICAgdmFyIGNhY2hlZEN1cnNvciA9IGp1bXBMaXN0LmNhY2hlZEN1cnNvcjsKICAgICAgICAgICAgaWYgKGNhY2hlZEN1cnNvcikgewogICAgICAgICAgICAgIHJlY29yZEp1bXBQb3NpdGlvbihjbSwgY2FjaGVkQ3Vyc29yLCBtb3Rpb25SZXN1bHQpOwogICAgICAgICAgICAgIGRlbGV0ZSBqdW1wTGlzdC5jYWNoZWRDdXJzb3I7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmVjb3JkSnVtcFBvc2l0aW9uKGNtLCBvcmlnSGVhZCwgbW90aW9uUmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKG1vdGlvblJlc3VsdCBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICAgICAgICAgIG5ld0FuY2hvciA9IG1vdGlvblJlc3VsdFswXTsKICAgICAgICAgICAgbmV3SGVhZCA9IG1vdGlvblJlc3VsdFsxXTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld0hlYWQgPSBtb3Rpb25SZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW5ld0hlYWQpIHsKICAgICAgICAgICAgbmV3SGVhZCA9IGNvcHlDdXJzb3Iob3JpZ0hlYWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICAgIGlmICghKHZpbS52aXN1YWxCbG9jayAmJiBuZXdIZWFkLmNoID09PSBJbmZpbml0eSkpIHsKICAgICAgICAgICAgICBuZXdIZWFkID0gY2xpcEN1cnNvclRvQ29udGVudChjbSwgbmV3SGVhZCwgdmltLnZpc3VhbEJsb2NrKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV3QW5jaG9yKSB7CiAgICAgICAgICAgICAgbmV3QW5jaG9yID0gY2xpcEN1cnNvclRvQ29udGVudChjbSwgbmV3QW5jaG9yLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBuZXdBbmNob3IgPSBuZXdBbmNob3IgfHwgb2xkQW5jaG9yOwogICAgICAgICAgICBzZWwuYW5jaG9yID0gbmV3QW5jaG9yOwogICAgICAgICAgICBzZWwuaGVhZCA9IG5ld0hlYWQ7CiAgICAgICAgICAgIHVwZGF0ZUNtU2VsZWN0aW9uKGNtKTsKICAgICAgICAgICAgdXBkYXRlTWFyayhjbSwgdmltLCAnPCcsCiAgICAgICAgICAgICAgICBjdXJzb3JJc0JlZm9yZShuZXdBbmNob3IsIG5ld0hlYWQpID8gbmV3QW5jaG9yCiAgICAgICAgICAgICAgICAgICAgOiBuZXdIZWFkKTsKICAgICAgICAgICAgdXBkYXRlTWFyayhjbSwgdmltLCAnPicsCiAgICAgICAgICAgICAgICBjdXJzb3JJc0JlZm9yZShuZXdBbmNob3IsIG5ld0hlYWQpID8gbmV3SGVhZAogICAgICAgICAgICAgICAgICAgIDogbmV3QW5jaG9yKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIW9wZXJhdG9yKSB7CiAgICAgICAgICAgIG5ld0hlYWQgPSBjbGlwQ3Vyc29yVG9Db250ZW50KGNtLCBuZXdIZWFkKTsKICAgICAgICAgICAgY20uc2V0Q3Vyc29yKG5ld0hlYWQubGluZSwgbmV3SGVhZC5jaCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvcGVyYXRvcikgewogICAgICAgICAgaWYgKG9wZXJhdG9yQXJncy5sYXN0U2VsKSB7CiAgICAgICAgICAgIG5ld0FuY2hvciA9IG9sZEFuY2hvcjsKICAgICAgICAgICAgdmFyIGxhc3RTZWwgPSBvcGVyYXRvckFyZ3MubGFzdFNlbDsKICAgICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSBNYXRoLmFicyhsYXN0U2VsLmhlYWQubGluZSAtIGxhc3RTZWwuYW5jaG9yLmxpbmUpOwogICAgICAgICAgICB2YXIgY2hPZmZzZXQgPSBNYXRoLmFicyhsYXN0U2VsLmhlYWQuY2ggLSBsYXN0U2VsLmFuY2hvci5jaCk7CiAgICAgICAgICAgIGlmIChsYXN0U2VsLnZpc3VhbExpbmUpIHsKICAgICAgICAgICAgICBuZXdIZWFkID0gUG9zKG9sZEFuY2hvci5saW5lICsgbGluZU9mZnNldCwgb2xkQW5jaG9yLmNoKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0U2VsLnZpc3VhbEJsb2NrKSB7CiAgICAgICAgICAgICAgbmV3SGVhZCA9IFBvcyhvbGRBbmNob3IubGluZSArIGxpbmVPZmZzZXQsIG9sZEFuY2hvci5jaCArIGNoT2Zmc2V0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0U2VsLmhlYWQubGluZSA9PSBsYXN0U2VsLmFuY2hvci5saW5lKSB7CiAgICAgICAgICAgICAgbmV3SGVhZCA9IFBvcyhvbGRBbmNob3IubGluZSwgb2xkQW5jaG9yLmNoICsgY2hPZmZzZXQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG5ld0hlYWQgPSBQb3Mob2xkQW5jaG9yLmxpbmUgKyBsaW5lT2Zmc2V0LCBvbGRBbmNob3IuY2gpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpbS52aXN1YWxNb2RlID0gdHJ1ZTsKICAgICAgICAgICAgdmltLnZpc3VhbExpbmUgPSBsYXN0U2VsLnZpc3VhbExpbmU7CiAgICAgICAgICAgIHZpbS52aXN1YWxCbG9jayA9IGxhc3RTZWwudmlzdWFsQmxvY2s7CiAgICAgICAgICAgIHNlbCA9IHZpbS5zZWwgPSB7CiAgICAgICAgICAgICAgYW5jaG9yOiBuZXdBbmNob3IsCiAgICAgICAgICAgICAgaGVhZDogbmV3SGVhZAogICAgICAgICAgICB9OwogICAgICAgICAgICB1cGRhdGVDbVNlbGVjdGlvbihjbSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICAgIG9wZXJhdG9yQXJncy5sYXN0U2VsID0gewogICAgICAgICAgICAgIGFuY2hvcjogY29weUN1cnNvcihzZWwuYW5jaG9yKSwKICAgICAgICAgICAgICBoZWFkOiBjb3B5Q3Vyc29yKHNlbC5oZWFkKSwKICAgICAgICAgICAgICB2aXN1YWxCbG9jazogdmltLnZpc3VhbEJsb2NrLAogICAgICAgICAgICAgIHZpc3VhbExpbmU6IHZpbS52aXN1YWxMaW5lCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgY3VyU3RhcnQsIGN1ckVuZCwgbGluZXdpc2UsIG1vZGU7CiAgICAgICAgICB2YXIgY21TZWw7CiAgICAgICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICAgICAgY3VyU3RhcnQgPSBjdXJzb3JNaW4oc2VsLmhlYWQsIHNlbC5hbmNob3IpOwogICAgICAgICAgICBjdXJFbmQgPSBjdXJzb3JNYXgoc2VsLmhlYWQsIHNlbC5hbmNob3IpOwogICAgICAgICAgICBsaW5ld2lzZSA9IHZpbS52aXN1YWxMaW5lIHx8IG9wZXJhdG9yQXJncy5saW5ld2lzZTsKICAgICAgICAgICAgbW9kZSA9IHZpbS52aXN1YWxCbG9jayA/ICdibG9jaycgOgogICAgICAgICAgICAgICAgICAgbGluZXdpc2UgPyAnbGluZScgOgogICAgICAgICAgICAgICAgICAgJ2NoYXInOwogICAgICAgICAgICBjbVNlbCA9IG1ha2VDbVNlbGVjdGlvbihjbSwgewogICAgICAgICAgICAgIGFuY2hvcjogY3VyU3RhcnQsCiAgICAgICAgICAgICAgaGVhZDogY3VyRW5kCiAgICAgICAgICAgIH0sIG1vZGUpOwogICAgICAgICAgICBpZiAobGluZXdpc2UpIHsKICAgICAgICAgICAgICB2YXIgcmFuZ2VzID0gY21TZWwucmFuZ2VzOwogICAgICAgICAgICAgIGlmIChtb2RlID09ICdibG9jaycpIHsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5oZWFkLmNoID0gbGluZUxlbmd0aChjbSwgcmFuZ2VzW2ldLmhlYWQubGluZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09ICdsaW5lJykgewogICAgICAgICAgICAgICAgcmFuZ2VzWzBdLmhlYWQgPSBQb3MocmFuZ2VzWzBdLmhlYWQubGluZSArIDEsIDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY3VyU3RhcnQgPSBjb3B5Q3Vyc29yKG5ld0FuY2hvciB8fCBvbGRBbmNob3IpOwogICAgICAgICAgICBjdXJFbmQgPSBjb3B5Q3Vyc29yKG5ld0hlYWQgfHwgb2xkSGVhZCk7CiAgICAgICAgICAgIGlmIChjdXJzb3JJc0JlZm9yZShjdXJFbmQsIGN1clN0YXJ0KSkgewogICAgICAgICAgICAgIHZhciB0bXAgPSBjdXJTdGFydDsKICAgICAgICAgICAgICBjdXJTdGFydCA9IGN1ckVuZDsKICAgICAgICAgICAgICBjdXJFbmQgPSB0bXA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGluZXdpc2UgPSBtb3Rpb25BcmdzLmxpbmV3aXNlIHx8IG9wZXJhdG9yQXJncy5saW5ld2lzZTsKICAgICAgICAgICAgaWYgKGxpbmV3aXNlKSB7CiAgICAgICAgICAgICAgZXhwYW5kU2VsZWN0aW9uVG9MaW5lKGNtLCBjdXJTdGFydCwgY3VyRW5kKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChtb3Rpb25BcmdzLmZvcndhcmQpIHsKICAgICAgICAgICAgICBjbGlwVG9MaW5lKGNtLCBjdXJTdGFydCwgY3VyRW5kKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBtb2RlID0gJ2NoYXInOwogICAgICAgICAgICB2YXIgZXhjbHVzaXZlID0gIW1vdGlvbkFyZ3MuaW5jbHVzaXZlIHx8IGxpbmV3aXNlOwogICAgICAgICAgICBjbVNlbCA9IG1ha2VDbVNlbGVjdGlvbihjbSwgewogICAgICAgICAgICAgIGFuY2hvcjogY3VyU3RhcnQsCiAgICAgICAgICAgICAgaGVhZDogY3VyRW5kCiAgICAgICAgICAgIH0sIG1vZGUsIGV4Y2x1c2l2ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBjbS5zZXRTZWxlY3Rpb25zKGNtU2VsLnJhbmdlcywgY21TZWwucHJpbWFyeSk7CiAgICAgICAgICB2aW0ubGFzdE1vdGlvbiA9IG51bGw7CiAgICAgICAgICBvcGVyYXRvckFyZ3MucmVwZWF0ID0gcmVwZWF0OyAvLyBGb3IgaW5kZW50IGluIHZpc3VhbCBtb2RlLgogICAgICAgICAgb3BlcmF0b3JBcmdzLnJlZ2lzdGVyTmFtZSA9IHJlZ2lzdGVyTmFtZTsKICAgICAgICAgIG9wZXJhdG9yQXJncy5saW5ld2lzZSA9IGxpbmV3aXNlOwogICAgICAgICAgdmFyIG9wZXJhdG9yTW92ZVRvID0gb3BlcmF0b3JzW29wZXJhdG9yXSgKICAgICAgICAgICAgY20sIG9wZXJhdG9yQXJncywgY21TZWwucmFuZ2VzLCBvbGRBbmNob3IsIG5ld0hlYWQpOwogICAgICAgICAgaWYgKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICAgIGV4aXRWaXN1YWxNb2RlKGNtLCBvcGVyYXRvck1vdmVUbyAhPSBudWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcGVyYXRvck1vdmVUbykgewogICAgICAgICAgICBjbS5zZXRDdXJzb3Iob3BlcmF0b3JNb3ZlVG8pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgcmVjb3JkTGFzdEVkaXQ6IGZ1bmN0aW9uKHZpbSwgaW5wdXRTdGF0ZSwgYWN0aW9uQ29tbWFuZCkgewogICAgICAgIHZhciBtYWNyb01vZGVTdGF0ZSA9IHZpbUdsb2JhbFN0YXRlLm1hY3JvTW9kZVN0YXRlOwogICAgICAgIGlmIChtYWNyb01vZGVTdGF0ZS5pc1BsYXlpbmcpIHsgcmV0dXJuOyB9CiAgICAgICAgdmltLmxhc3RFZGl0SW5wdXRTdGF0ZSA9IGlucHV0U3RhdGU7CiAgICAgICAgdmltLmxhc3RFZGl0QWN0aW9uQ29tbWFuZCA9IGFjdGlvbkNvbW1hbmQ7CiAgICAgICAgbWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzLmNoYW5nZXMgPSBbXTsKICAgICAgICBtYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMuZXhwZWN0Q3Vyc29yQWN0aXZpdHlGb3JDaGFuZ2UgPSBmYWxzZTsKICAgICAgICBtYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMudmlzdWFsQmxvY2sgPSB2aW0udmlzdWFsQmxvY2sgPyB2aW0uc2VsLmhlYWQubGluZSAtIHZpbS5zZWwuYW5jaG9yLmxpbmUgOiAwOwogICAgICB9CiAgICB9OwogICAgdmFyIG1vdGlvbnMgPSB7CiAgICAgIG1vdmVUb1RvcExpbmU6IGZ1bmN0aW9uKGNtLCBfaGVhZCwgbW90aW9uQXJncykgewogICAgICAgIHZhciBsaW5lID0gZ2V0VXNlclZpc2libGVMaW5lcyhjbSkudG9wICsgbW90aW9uQXJncy5yZXBlYXQgLTE7CiAgICAgICAgcmV0dXJuIFBvcyhsaW5lLCBmaW5kRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGNtLmdldExpbmUobGluZSkpKTsKICAgICAgfSwKICAgICAgbW92ZVRvTWlkZGxlTGluZTogZnVuY3Rpb24oY20pIHsKICAgICAgICB2YXIgcmFuZ2UgPSBnZXRVc2VyVmlzaWJsZUxpbmVzKGNtKTsKICAgICAgICB2YXIgbGluZSA9IE1hdGguZmxvb3IoKHJhbmdlLnRvcCArIHJhbmdlLmJvdHRvbSkgKiAwLjUpOwogICAgICAgIHJldHVybiBQb3MobGluZSwgZmluZEZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihjbS5nZXRMaW5lKGxpbmUpKSk7CiAgICAgIH0sCiAgICAgIG1vdmVUb0JvdHRvbUxpbmU6IGZ1bmN0aW9uKGNtLCBfaGVhZCwgbW90aW9uQXJncykgewogICAgICAgIHZhciBsaW5lID0gZ2V0VXNlclZpc2libGVMaW5lcyhjbSkuYm90dG9tIC0gbW90aW9uQXJncy5yZXBlYXQgKzE7CiAgICAgICAgcmV0dXJuIFBvcyhsaW5lLCBmaW5kRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGNtLmdldExpbmUobGluZSkpKTsKICAgICAgfSwKICAgICAgZXhwYW5kVG9MaW5lOiBmdW5jdGlvbihfY20sIGhlYWQsIG1vdGlvbkFyZ3MpIHsKICAgICAgICB2YXIgY3VyID0gaGVhZDsKICAgICAgICByZXR1cm4gUG9zKGN1ci5saW5lICsgbW90aW9uQXJncy5yZXBlYXQgLSAxLCBJbmZpbml0eSk7CiAgICAgIH0sCiAgICAgIGZpbmROZXh0OiBmdW5jdGlvbihjbSwgX2hlYWQsIG1vdGlvbkFyZ3MpIHsKICAgICAgICB2YXIgc3RhdGUgPSBnZXRTZWFyY2hTdGF0ZShjbSk7CiAgICAgICAgdmFyIHF1ZXJ5ID0gc3RhdGUuZ2V0UXVlcnkoKTsKICAgICAgICBpZiAoIXF1ZXJ5KSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBwcmV2ID0gIW1vdGlvbkFyZ3MuZm9yd2FyZDsKICAgICAgICBwcmV2ID0gKHN0YXRlLmlzUmV2ZXJzZWQoKSkgPyAhcHJldiA6IHByZXY7CiAgICAgICAgaGlnaGxpZ2h0U2VhcmNoTWF0Y2hlcyhjbSwgcXVlcnkpOwogICAgICAgIHJldHVybiBmaW5kTmV4dChjbSwgcHJldi8qKiBwcmV2ICovLCBxdWVyeSwgbW90aW9uQXJncy5yZXBlYXQpOwogICAgICB9LAogICAgICBnb1RvTWFyazogZnVuY3Rpb24oY20sIF9oZWFkLCBtb3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICB2YXIgcG9zID0gZ2V0TWFya1BvcyhjbSwgdmltLCBtb3Rpb25BcmdzLnNlbGVjdGVkQ2hhcmFjdGVyKTsKICAgICAgICBpZiAocG9zKSB7CiAgICAgICAgICByZXR1cm4gbW90aW9uQXJncy5saW5ld2lzZSA/IHsgbGluZTogcG9zLmxpbmUsIGNoOiBmaW5kRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGNtLmdldExpbmUocG9zLmxpbmUpKSB9IDogcG9zOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSwKICAgICAgbW92ZVRvT3RoZXJIaWdobGlnaHRlZEVuZDogZnVuY3Rpb24oY20sIF9oZWFkLCBtb3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICBpZiAodmltLnZpc3VhbEJsb2NrICYmIG1vdGlvbkFyZ3Muc2FtZUxpbmUpIHsKICAgICAgICAgIHZhciBzZWwgPSB2aW0uc2VsOwogICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgY2xpcEN1cnNvclRvQ29udGVudChjbSwgUG9zKHNlbC5hbmNob3IubGluZSwgc2VsLmhlYWQuY2gpKSwKICAgICAgICAgICAgY2xpcEN1cnNvclRvQ29udGVudChjbSwgUG9zKHNlbC5oZWFkLmxpbmUsIHNlbC5hbmNob3IuY2gpKQogICAgICAgICAgXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIChbdmltLnNlbC5oZWFkLCB2aW0uc2VsLmFuY2hvcl0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAganVtcFRvTWFyazogZnVuY3Rpb24oY20sIGhlYWQsIG1vdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIHZhciBiZXN0ID0gaGVhZDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vdGlvbkFyZ3MucmVwZWF0OyBpKyspIHsKICAgICAgICAgIHZhciBjdXJzb3IgPSBiZXN0OwogICAgICAgICAgZm9yICh2YXIga2V5IGluIHZpbS5tYXJrcykgewogICAgICAgICAgICBpZiAoIWlzTG93ZXJDYXNlKGtleSkpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWFyayA9IHZpbS5tYXJrc1trZXldLmZpbmQoKTsKICAgICAgICAgICAgdmFyIGlzV3JvbmdEaXJlY3Rpb24gPSAobW90aW9uQXJncy5mb3J3YXJkKSA/CiAgICAgICAgICAgICAgY3Vyc29ySXNCZWZvcmUobWFyaywgY3Vyc29yKSA6IGN1cnNvcklzQmVmb3JlKGN1cnNvciwgbWFyayk7CgogICAgICAgICAgICBpZiAoaXNXcm9uZ0RpcmVjdGlvbikgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtb3Rpb25BcmdzLmxpbmV3aXNlICYmIChtYXJrLmxpbmUgPT0gY3Vyc29yLmxpbmUpKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBlcXVhbCA9IGN1cnNvckVxdWFsKGN1cnNvciwgYmVzdCk7CiAgICAgICAgICAgIHZhciBiZXR3ZWVuID0gKG1vdGlvbkFyZ3MuZm9yd2FyZCkgPwogICAgICAgICAgICAgIGN1cnNvcklzQmV0d2VlbihjdXJzb3IsIG1hcmssIGJlc3QpIDoKICAgICAgICAgICAgICBjdXJzb3JJc0JldHdlZW4oYmVzdCwgbWFyaywgY3Vyc29yKTsKCiAgICAgICAgICAgIGlmIChlcXVhbCB8fCBiZXR3ZWVuKSB7CiAgICAgICAgICAgICAgYmVzdCA9IG1hcms7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChtb3Rpb25BcmdzLmxpbmV3aXNlKSB7CiAgICAgICAgICBiZXN0ID0gUG9zKGJlc3QubGluZSwgZmluZEZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihjbS5nZXRMaW5lKGJlc3QubGluZSkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJlc3Q7CiAgICAgIH0sCiAgICAgIG1vdmVCeUNoYXJhY3RlcnM6IGZ1bmN0aW9uKF9jbSwgaGVhZCwgbW90aW9uQXJncykgewogICAgICAgIHZhciBjdXIgPSBoZWFkOwogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICB2YXIgY2ggPSBtb3Rpb25BcmdzLmZvcndhcmQgPyBjdXIuY2ggKyByZXBlYXQgOiBjdXIuY2ggLSByZXBlYXQ7CiAgICAgICAgcmV0dXJuIFBvcyhjdXIubGluZSwgY2gpOwogICAgICB9LAogICAgICBtb3ZlQnlMaW5lczogZnVuY3Rpb24oY20sIGhlYWQsIG1vdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIHZhciBjdXIgPSBoZWFkOwogICAgICAgIHZhciBlbmRDaCA9IGN1ci5jaDsKICAgICAgICBzd2l0Y2ggKHZpbS5sYXN0TW90aW9uKSB7CiAgICAgICAgICBjYXNlIHRoaXMubW92ZUJ5TGluZXM6CiAgICAgICAgICBjYXNlIHRoaXMubW92ZUJ5RGlzcGxheUxpbmVzOgogICAgICAgICAgY2FzZSB0aGlzLm1vdmVCeVNjcm9sbDoKICAgICAgICAgIGNhc2UgdGhpcy5tb3ZlVG9Db2x1bW46CiAgICAgICAgICBjYXNlIHRoaXMubW92ZVRvRW9sOgogICAgICAgICAgICBlbmRDaCA9IHZpbS5sYXN0SFBvczsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB2aW0ubGFzdEhQb3MgPSBlbmRDaDsKICAgICAgICB9CiAgICAgICAgdmFyIHJlcGVhdCA9IG1vdGlvbkFyZ3MucmVwZWF0Kyhtb3Rpb25BcmdzLnJlcGVhdE9mZnNldHx8MCk7CiAgICAgICAgdmFyIGxpbmUgPSBtb3Rpb25BcmdzLmZvcndhcmQgPyBjdXIubGluZSArIHJlcGVhdCA6IGN1ci5saW5lIC0gcmVwZWF0OwogICAgICAgIHZhciBmaXJzdCA9IGNtLmZpcnN0TGluZSgpOwogICAgICAgIHZhciBsYXN0ID0gY20ubGFzdExpbmUoKTsKICAgICAgICBpZiAobGluZSA8IGZpcnN0ICYmIGN1ci5saW5lID09IGZpcnN0KXsKICAgICAgICAgIHJldHVybiB0aGlzLm1vdmVUb1N0YXJ0T2ZMaW5lKGNtLCBoZWFkLCBtb3Rpb25BcmdzLCB2aW0pOwogICAgICAgIH1lbHNlIGlmIChsaW5lID4gbGFzdCAmJiBjdXIubGluZSA9PSBsYXN0KXsKICAgICAgICAgICAgcmV0dXJuIHRoaXMubW92ZVRvRW9sKGNtLCBoZWFkLCBtb3Rpb25BcmdzLCB2aW0sIHRydWUpOwogICAgICAgIH0KICAgICAgICB2YXIgZm9sZCA9IGNtLmFjZS5zZXNzaW9uLmdldEZvbGRMaW5lKGxpbmUpOwogICAgICAgIGlmIChmb2xkKSB7CiAgICAgICAgICBpZiAobW90aW9uQXJncy5mb3J3YXJkKSB7CiAgICAgICAgICAgIGlmIChsaW5lID4gZm9sZC5zdGFydC5yb3cpCiAgICAgICAgICAgICAgbGluZSA9IGZvbGQuZW5kLnJvdyArIDE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lID0gZm9sZC5zdGFydC5yb3c7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChtb3Rpb25BcmdzLnRvRmlyc3RDaGFyKXsKICAgICAgICAgIGVuZENoPWZpbmRGaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXIoY20uZ2V0TGluZShsaW5lKSk7CiAgICAgICAgICB2aW0ubGFzdEhQb3MgPSBlbmRDaDsKICAgICAgICB9CiAgICAgICAgdmltLmxhc3RIU1BvcyA9IGNtLmNoYXJDb29yZHMoUG9zKGxpbmUsIGVuZENoKSwnZGl2JykubGVmdDsKICAgICAgICByZXR1cm4gUG9zKGxpbmUsIGVuZENoKTsKICAgICAgfSwKICAgICAgbW92ZUJ5RGlzcGxheUxpbmVzOiBmdW5jdGlvbihjbSwgaGVhZCwgbW90aW9uQXJncywgdmltKSB7CiAgICAgICAgdmFyIGN1ciA9IGhlYWQ7CiAgICAgICAgc3dpdGNoICh2aW0ubGFzdE1vdGlvbikgewogICAgICAgICAgY2FzZSB0aGlzLm1vdmVCeURpc3BsYXlMaW5lczoKICAgICAgICAgIGNhc2UgdGhpcy5tb3ZlQnlTY3JvbGw6CiAgICAgICAgICBjYXNlIHRoaXMubW92ZUJ5TGluZXM6CiAgICAgICAgICBjYXNlIHRoaXMubW92ZVRvQ29sdW1uOgogICAgICAgICAgY2FzZSB0aGlzLm1vdmVUb0VvbDoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB2aW0ubGFzdEhTUG9zID0gY20uY2hhckNvb3JkcyhjdXIsJ2RpdicpLmxlZnQ7CiAgICAgICAgfQogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICB2YXIgcmVzPWNtLmZpbmRQb3NWKGN1ciwobW90aW9uQXJncy5mb3J3YXJkID8gcmVwZWF0IDogLXJlcGVhdCksJ2xpbmUnLHZpbS5sYXN0SFNQb3MpOwogICAgICAgIGlmIChyZXMuaGl0U2lkZSkgewogICAgICAgICAgaWYgKG1vdGlvbkFyZ3MuZm9yd2FyZCkgewogICAgICAgICAgICB2YXIgbGFzdENoYXJDb29yZHMgPSBjbS5jaGFyQ29vcmRzKHJlcywgJ2RpdicpOwogICAgICAgICAgICB2YXIgZ29hbENvb3JkcyA9IHsgdG9wOiBsYXN0Q2hhckNvb3Jkcy50b3AgKyA4LCBsZWZ0OiB2aW0ubGFzdEhTUG9zIH07CiAgICAgICAgICAgIHZhciByZXMgPSBjbS5jb29yZHNDaGFyKGdvYWxDb29yZHMsICdkaXYnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciByZXNDb29yZHMgPSBjbS5jaGFyQ29vcmRzKFBvcyhjbS5maXJzdExpbmUoKSwgMCksICdkaXYnKTsKICAgICAgICAgICAgcmVzQ29vcmRzLmxlZnQgPSB2aW0ubGFzdEhTUG9zOwogICAgICAgICAgICByZXMgPSBjbS5jb29yZHNDaGFyKHJlc0Nvb3JkcywgJ2RpdicpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2aW0ubGFzdEhQb3MgPSByZXMuY2g7CiAgICAgICAgcmV0dXJuIHJlczsKICAgICAgfSwKICAgICAgbW92ZUJ5UGFnZTogZnVuY3Rpb24oY20sIGhlYWQsIG1vdGlvbkFyZ3MpIHsKICAgICAgICB2YXIgY3VyU3RhcnQgPSBoZWFkOwogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICByZXR1cm4gY20uZmluZFBvc1YoY3VyU3RhcnQsIChtb3Rpb25BcmdzLmZvcndhcmQgPyByZXBlYXQgOiAtcmVwZWF0KSwgJ3BhZ2UnKTsKICAgICAgfSwKICAgICAgbW92ZUJ5UGFyYWdyYXBoOiBmdW5jdGlvbihjbSwgaGVhZCwgbW90aW9uQXJncykgewogICAgICAgIHZhciBkaXIgPSBtb3Rpb25BcmdzLmZvcndhcmQgPyAxIDogLTE7CiAgICAgICAgcmV0dXJuIGZpbmRQYXJhZ3JhcGgoY20sIGhlYWQsIG1vdGlvbkFyZ3MucmVwZWF0LCBkaXIpOwogICAgICB9LAogICAgICBtb3ZlQnlTZW50ZW5jZTogZnVuY3Rpb24oY20sIGhlYWQsIG1vdGlvbkFyZ3MpIHsKICAgICAgICB2YXIgZGlyID0gbW90aW9uQXJncy5mb3J3YXJkID8gMSA6IC0xOwogICAgICAgIHJldHVybiBmaW5kU2VudGVuY2UoY20sIGhlYWQsIG1vdGlvbkFyZ3MucmVwZWF0LCBkaXIpOwogICAgICB9LAogICAgICBtb3ZlQnlTY3JvbGw6IGZ1bmN0aW9uKGNtLCBoZWFkLCBtb3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICB2YXIgc2Nyb2xsYm94ID0gY20uZ2V0U2Nyb2xsSW5mbygpOwogICAgICAgIHZhciBjdXJFbmQgPSBudWxsOwogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICBpZiAoIXJlcGVhdCkgewogICAgICAgICAgcmVwZWF0ID0gc2Nyb2xsYm94LmNsaWVudEhlaWdodCAvICgyICogY20uZGVmYXVsdFRleHRIZWlnaHQoKSk7CiAgICAgICAgfQogICAgICAgIHZhciBvcmlnID0gY20uY2hhckNvb3JkcyhoZWFkLCAnbG9jYWwnKTsKICAgICAgICBtb3Rpb25BcmdzLnJlcGVhdCA9IHJlcGVhdDsKICAgICAgICB2YXIgY3VyRW5kID0gbW90aW9ucy5tb3ZlQnlEaXNwbGF5TGluZXMoY20sIGhlYWQsIG1vdGlvbkFyZ3MsIHZpbSk7CiAgICAgICAgaWYgKCFjdXJFbmQpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICB2YXIgZGVzdCA9IGNtLmNoYXJDb29yZHMoY3VyRW5kLCAnbG9jYWwnKTsKICAgICAgICBjbS5zY3JvbGxUbyhudWxsLCBzY3JvbGxib3gudG9wICsgZGVzdC50b3AgLSBvcmlnLnRvcCk7CiAgICAgICAgcmV0dXJuIGN1ckVuZDsKICAgICAgfSwKICAgICAgbW92ZUJ5V29yZHM6IGZ1bmN0aW9uKGNtLCBoZWFkLCBtb3Rpb25BcmdzKSB7CiAgICAgICAgcmV0dXJuIG1vdmVUb1dvcmQoY20sIGhlYWQsIG1vdGlvbkFyZ3MucmVwZWF0LCAhIW1vdGlvbkFyZ3MuZm9yd2FyZCwKICAgICAgICAgICAgISFtb3Rpb25BcmdzLndvcmRFbmQsICEhbW90aW9uQXJncy5iaWdXb3JkKTsKICAgICAgfSwKICAgICAgbW92ZVRpbGxDaGFyYWN0ZXI6IGZ1bmN0aW9uKGNtLCBfaGVhZCwgbW90aW9uQXJncykgewogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICB2YXIgY3VyRW5kID0gbW92ZVRvQ2hhcmFjdGVyKGNtLCByZXBlYXQsIG1vdGlvbkFyZ3MuZm9yd2FyZCwKICAgICAgICAgICAgbW90aW9uQXJncy5zZWxlY3RlZENoYXJhY3Rlcik7CiAgICAgICAgdmFyIGluY3JlbWVudCA9IG1vdGlvbkFyZ3MuZm9yd2FyZCA/IC0xIDogMTsKICAgICAgICByZWNvcmRMYXN0Q2hhcmFjdGVyU2VhcmNoKGluY3JlbWVudCwgbW90aW9uQXJncyk7CiAgICAgICAgaWYgKCFjdXJFbmQpIHJldHVybiBudWxsOwogICAgICAgIGN1ckVuZC5jaCArPSBpbmNyZW1lbnQ7CiAgICAgICAgcmV0dXJuIGN1ckVuZDsKICAgICAgfSwKICAgICAgbW92ZVRvQ2hhcmFjdGVyOiBmdW5jdGlvbihjbSwgaGVhZCwgbW90aW9uQXJncykgewogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICByZWNvcmRMYXN0Q2hhcmFjdGVyU2VhcmNoKDAsIG1vdGlvbkFyZ3MpOwogICAgICAgIHJldHVybiBtb3ZlVG9DaGFyYWN0ZXIoY20sIHJlcGVhdCwgbW90aW9uQXJncy5mb3J3YXJkLAogICAgICAgICAgICBtb3Rpb25BcmdzLnNlbGVjdGVkQ2hhcmFjdGVyKSB8fCBoZWFkOwogICAgICB9LAogICAgICBtb3ZlVG9TeW1ib2w6IGZ1bmN0aW9uKGNtLCBoZWFkLCBtb3Rpb25BcmdzKSB7CiAgICAgICAgdmFyIHJlcGVhdCA9IG1vdGlvbkFyZ3MucmVwZWF0OwogICAgICAgIHJldHVybiBmaW5kU3ltYm9sKGNtLCByZXBlYXQsIG1vdGlvbkFyZ3MuZm9yd2FyZCwKICAgICAgICAgICAgbW90aW9uQXJncy5zZWxlY3RlZENoYXJhY3RlcikgfHwgaGVhZDsKICAgICAgfSwKICAgICAgbW92ZVRvQ29sdW1uOiBmdW5jdGlvbihjbSwgaGVhZCwgbW90aW9uQXJncywgdmltKSB7CiAgICAgICAgdmFyIHJlcGVhdCA9IG1vdGlvbkFyZ3MucmVwZWF0OwogICAgICAgIHZpbS5sYXN0SFBvcyA9IHJlcGVhdCAtIDE7CiAgICAgICAgdmltLmxhc3RIU1BvcyA9IGNtLmNoYXJDb29yZHMoaGVhZCwnZGl2JykubGVmdDsKICAgICAgICByZXR1cm4gbW92ZVRvQ29sdW1uKGNtLCByZXBlYXQpOwogICAgICB9LAogICAgICBtb3ZlVG9Fb2w6IGZ1bmN0aW9uKGNtLCBoZWFkLCBtb3Rpb25BcmdzLCB2aW0sIGtlZXBIUG9zKSB7CiAgICAgICAgdmFyIGN1ciA9IGhlYWQ7CiAgICAgICAgdmFyIHJldHZhbD0gUG9zKGN1ci5saW5lICsgbW90aW9uQXJncy5yZXBlYXQgLSAxLCBJbmZpbml0eSk7CiAgICAgICAgdmFyIGVuZD1jbS5jbGlwUG9zKHJldHZhbCk7CiAgICAgICAgZW5kLmNoLS07CiAgICAgICAgaWYgKCFrZWVwSFBvcykgewogICAgICAgICAgdmltLmxhc3RIUG9zID0gSW5maW5pdHk7CiAgICAgICAgICB2aW0ubGFzdEhTUG9zID0gY20uY2hhckNvb3JkcyhlbmQsJ2RpdicpLmxlZnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR2YWw7CiAgICAgIH0sCiAgICAgIG1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcjogZnVuY3Rpb24oY20sIGhlYWQpIHsKICAgICAgICB2YXIgY3Vyc29yID0gaGVhZDsKICAgICAgICByZXR1cm4gUG9zKGN1cnNvci5saW5lLAogICAgICAgICAgICAgICAgICAgZmluZEZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihjbS5nZXRMaW5lKGN1cnNvci5saW5lKSkpOwogICAgICB9LAogICAgICBtb3ZlVG9NYXRjaGVkU3ltYm9sOiBmdW5jdGlvbihjbSwgaGVhZCkgewogICAgICAgIHZhciBjdXJzb3IgPSBoZWFkOwogICAgICAgIHZhciBsaW5lID0gY3Vyc29yLmxpbmU7CiAgICAgICAgdmFyIGNoID0gY3Vyc29yLmNoOwogICAgICAgIHZhciBsaW5lVGV4dCA9IGNtLmdldExpbmUobGluZSk7CiAgICAgICAgdmFyIHN5bWJvbDsKICAgICAgICBmb3IgKDsgY2ggPCBsaW5lVGV4dC5sZW5ndGg7IGNoKyspIHsKICAgICAgICAgIHN5bWJvbCA9IGxpbmVUZXh0LmNoYXJBdChjaCk7CiAgICAgICAgICBpZiAoc3ltYm9sICYmIGlzTWF0Y2hhYmxlU3ltYm9sKHN5bWJvbCkpIHsKICAgICAgICAgICAgdmFyIHN0eWxlID0gY20uZ2V0VG9rZW5UeXBlQXQoUG9zKGxpbmUsIGNoICsgMSkpOwogICAgICAgICAgICBpZiAoc3R5bGUgIT09ICJzdHJpbmciICYmIHN0eWxlICE9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY2ggPCBsaW5lVGV4dC5sZW5ndGgpIHsKICAgICAgICAgIHZhciByZSA9IC9bPD5dLy50ZXN0KGxpbmVUZXh0W2NoXSkgPyAvWygpe31bXF08Pl0vIDogL1soKXt9W1xdXS87CiAgICAgICAgICB2YXIgbWF0Y2hlZCA9IGNtLmZpbmRNYXRjaGluZ0JyYWNrZXQoUG9zKGxpbmUsIGNoKzEpLCB7YnJhY2tldFJlZ2V4OiByZX0pOwogICAgICAgICAgcmV0dXJuIG1hdGNoZWQudG87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjdXJzb3I7CiAgICAgICAgfQogICAgICB9LAogICAgICBtb3ZlVG9TdGFydE9mTGluZTogZnVuY3Rpb24oX2NtLCBoZWFkKSB7CiAgICAgICAgcmV0dXJuIFBvcyhoZWFkLmxpbmUsIDApOwogICAgICB9LAogICAgICBtb3ZlVG9MaW5lT3JFZGdlT2ZEb2N1bWVudDogZnVuY3Rpb24oY20sIF9oZWFkLCBtb3Rpb25BcmdzKSB7CiAgICAgICAgdmFyIGxpbmVOdW0gPSBtb3Rpb25BcmdzLmZvcndhcmQgPyBjbS5sYXN0TGluZSgpIDogY20uZmlyc3RMaW5lKCk7CiAgICAgICAgaWYgKG1vdGlvbkFyZ3MucmVwZWF0SXNFeHBsaWNpdCkgewogICAgICAgICAgbGluZU51bSA9IG1vdGlvbkFyZ3MucmVwZWF0IC0gY20uZ2V0T3B0aW9uKCdmaXJzdExpbmVOdW1iZXInKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvcyhsaW5lTnVtLAogICAgICAgICAgICAgICAgICAgZmluZEZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihjbS5nZXRMaW5lKGxpbmVOdW0pKSk7CiAgICAgIH0sCiAgICAgIHRleHRPYmplY3RNYW5pcHVsYXRpb246IGZ1bmN0aW9uKGNtLCBoZWFkLCBtb3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICB2YXIgbWlycm9yZWRQYWlycyA9IHsnKCc6ICcpJywgJyknOiAnKCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3snOiAnfScsICd9JzogJ3snLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbJzogJ10nLCAnXSc6ICdbJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCc6ICc+JywgJz4nOiAnPCd9OwogICAgICAgIHZhciBzZWxmUGFpcmVkID0geydcJyc6IHRydWUsICciJzogdHJ1ZSwgJ2AnOiB0cnVlfTsKCiAgICAgICAgdmFyIGNoYXJhY3RlciA9IG1vdGlvbkFyZ3Muc2VsZWN0ZWRDaGFyYWN0ZXI7CiAgICAgICAgaWYgKGNoYXJhY3RlciA9PSAnYicpIHsKICAgICAgICAgIGNoYXJhY3RlciA9ICcoJzsKICAgICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PSAnQicpIHsKICAgICAgICAgIGNoYXJhY3RlciA9ICd7JzsKICAgICAgICB9CiAgICAgICAgdmFyIGluY2x1c2l2ZSA9ICFtb3Rpb25BcmdzLnRleHRPYmplY3RJbm5lcjsKCiAgICAgICAgdmFyIHRtcDsKICAgICAgICBpZiAobWlycm9yZWRQYWlyc1tjaGFyYWN0ZXJdKSB7CiAgICAgICAgICB0bXAgPSBzZWxlY3RDb21wYW5pb25PYmplY3QoY20sIGhlYWQsIGNoYXJhY3RlciwgaW5jbHVzaXZlKTsKICAgICAgICB9IGVsc2UgaWYgKHNlbGZQYWlyZWRbY2hhcmFjdGVyXSkgewogICAgICAgICAgdG1wID0gZmluZEJlZ2lubmluZ0FuZEVuZChjbSwgaGVhZCwgY2hhcmFjdGVyLCBpbmNsdXNpdmUpOwogICAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSAnVycpIHsKICAgICAgICAgIHRtcCA9IGV4cGFuZFdvcmRVbmRlckN1cnNvcihjbSwgaW5jbHVzaXZlLCB0cnVlIC8qKiBmb3J3YXJkICovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyoqIGJpZ1dvcmQgKi8pOwogICAgICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSAndycpIHsKICAgICAgICAgIHRtcCA9IGV4cGFuZFdvcmRVbmRlckN1cnNvcihjbSwgaW5jbHVzaXZlLCB0cnVlIC8qKiBmb3J3YXJkICovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qKiBiaWdXb3JkICovKTsKICAgICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA9PT0gJ3AnKSB7CiAgICAgICAgICB0bXAgPSBmaW5kUGFyYWdyYXBoKGNtLCBoZWFkLCBtb3Rpb25BcmdzLnJlcGVhdCwgMCwgaW5jbHVzaXZlKTsKICAgICAgICAgIG1vdGlvbkFyZ3MubGluZXdpc2UgPSB0cnVlOwogICAgICAgICAgaWYgKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICAgIGlmICghdmltLnZpc3VhbExpbmUpIHsgdmltLnZpc3VhbExpbmUgPSB0cnVlOyB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb3BlcmF0b3JBcmdzID0gdmltLmlucHV0U3RhdGUub3BlcmF0b3JBcmdzOwogICAgICAgICAgICBpZiAob3BlcmF0b3JBcmdzKSB7IG9wZXJhdG9yQXJncy5saW5ld2lzZSA9IHRydWU7IH0KICAgICAgICAgICAgdG1wLmVuZC5saW5lLS07CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFjbS5zdGF0ZS52aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgcmV0dXJuIFt0bXAuc3RhcnQsIHRtcC5lbmRdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZXhwYW5kU2VsZWN0aW9uKGNtLCB0bXAuc3RhcnQsIHRtcC5lbmQpOwogICAgICAgIH0KICAgICAgfSwKCiAgICAgIHJlcGVhdExhc3RDaGFyYWN0ZXJTZWFyY2g6IGZ1bmN0aW9uKGNtLCBoZWFkLCBtb3Rpb25BcmdzKSB7CiAgICAgICAgdmFyIGxhc3RTZWFyY2ggPSB2aW1HbG9iYWxTdGF0ZS5sYXN0Q2hhcmFjdGVyU2VhcmNoOwogICAgICAgIHZhciByZXBlYXQgPSBtb3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICB2YXIgZm9yd2FyZCA9IG1vdGlvbkFyZ3MuZm9yd2FyZCA9PT0gbGFzdFNlYXJjaC5mb3J3YXJkOwogICAgICAgIHZhciBpbmNyZW1lbnQgPSAobGFzdFNlYXJjaC5pbmNyZW1lbnQgPyAxIDogMCkgKiAoZm9yd2FyZCA/IC0xIDogMSk7CiAgICAgICAgY20ubW92ZUgoLWluY3JlbWVudCwgJ2NoYXInKTsKICAgICAgICBtb3Rpb25BcmdzLmluY2x1c2l2ZSA9IGZvcndhcmQgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgdmFyIGN1ckVuZCA9IG1vdmVUb0NoYXJhY3RlcihjbSwgcmVwZWF0LCBmb3J3YXJkLCBsYXN0U2VhcmNoLnNlbGVjdGVkQ2hhcmFjdGVyKTsKICAgICAgICBpZiAoIWN1ckVuZCkgewogICAgICAgICAgY20ubW92ZUgoaW5jcmVtZW50LCAnY2hhcicpOwogICAgICAgICAgcmV0dXJuIGhlYWQ7CiAgICAgICAgfQogICAgICAgIGN1ckVuZC5jaCArPSBpbmNyZW1lbnQ7CiAgICAgICAgcmV0dXJuIGN1ckVuZDsKICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBkZWZpbmVNb3Rpb24obmFtZSwgZm4pIHsKICAgICAgbW90aW9uc1tuYW1lXSA9IGZuOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbGxBcnJheSh2YWwsIHRpbWVzKSB7CiAgICAgIHZhciBhcnIgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aW1lczsgaSsrKSB7CiAgICAgICAgYXJyLnB1c2godmFsKTsKICAgICAgfQogICAgICByZXR1cm4gYXJyOwogICAgfQogICAgdmFyIG9wZXJhdG9ycyA9IHsKICAgICAgY2hhbmdlOiBmdW5jdGlvbihjbSwgYXJncywgcmFuZ2VzKSB7CiAgICAgICAgdmFyIGZpbmFsSGVhZCwgdGV4dDsKICAgICAgICB2YXIgdmltID0gY20uc3RhdGUudmltOwogICAgICAgIHZhciBhbmNob3IgPSByYW5nZXNbMF0uYW5jaG9yLAogICAgICAgICAgICBoZWFkID0gcmFuZ2VzWzBdLmhlYWQ7CiAgICAgICAgaWYgKCF2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgdGV4dCA9IGNtLmdldFJhbmdlKGFuY2hvciwgaGVhZCk7CiAgICAgICAgICB2YXIgbGFzdFN0YXRlID0gdmltLmxhc3RFZGl0SW5wdXRTdGF0ZSB8fCB7fTsKICAgICAgICAgIGlmIChsYXN0U3RhdGUubW90aW9uID09ICJtb3ZlQnlXb3JkcyIgJiYgIWlzV2hpdGVTcGFjZVN0cmluZyh0ZXh0KSkgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSAoL1xzKyQvKS5leGVjKHRleHQpOwogICAgICAgICAgICBpZiAobWF0Y2ggJiYgbGFzdFN0YXRlLm1vdGlvbkFyZ3MgJiYgbGFzdFN0YXRlLm1vdGlvbkFyZ3MuZm9yd2FyZCkgewogICAgICAgICAgICAgIGhlYWQgPSBvZmZzZXRDdXJzb3IoaGVhZCwgMCwgLSBtYXRjaFswXS5sZW5ndGgpOwogICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIC0gbWF0Y2hbMF0ubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdmFyIHByZXZMaW5lRW5kID0gbmV3IFBvcyhhbmNob3IubGluZSAtIDEsIE51bWJlci5NQVhfVkFMVUUpOwogICAgICAgICAgdmFyIHdhc0xhc3RMaW5lID0gY20uZmlyc3RMaW5lKCkgPT0gY20ubGFzdExpbmUoKTsKICAgICAgICAgIGlmIChoZWFkLmxpbmUgPiBjbS5sYXN0TGluZSgpICYmIGFyZ3MubGluZXdpc2UgJiYgIXdhc0xhc3RMaW5lKSB7CiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgnJywgcHJldkxpbmVFbmQsIGhlYWQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKCcnLCBhbmNob3IsIGhlYWQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGFyZ3MubGluZXdpc2UpIHsKICAgICAgICAgICAgaWYgKCF3YXNMYXN0TGluZSkgewogICAgICAgICAgICAgIGNtLnNldEN1cnNvcihwcmV2TGluZUVuZCk7CiAgICAgICAgICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50KGNtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbmNob3IuY2ggPSBOdW1iZXIuTUFYX1ZBTFVFOwogICAgICAgICAgfQogICAgICAgICAgZmluYWxIZWFkID0gYW5jaG9yOwogICAgICAgIH0gZWxzZSBpZiAoYXJncy5mdWxsTGluZSkgewogICAgICAgICAgICBoZWFkLmNoID0gTnVtYmVyLk1BWF9WQUxVRTsKICAgICAgICAgICAgaGVhZC5saW5lLS07CiAgICAgICAgICAgIGNtLnNldFNlbGVjdGlvbihhbmNob3IsIGhlYWQpCiAgICAgICAgICAgIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoIiIpOwogICAgICAgICAgICBmaW5hbEhlYWQgPSBhbmNob3IKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGV4dCA9IGNtLmdldFNlbGVjdGlvbigpOwogICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZmlsbEFycmF5KCcnLCByYW5nZXMubGVuZ3RoKTsKICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHJlcGxhY2VtZW50KTsKICAgICAgICAgIGZpbmFsSGVhZCA9IGN1cnNvck1pbihyYW5nZXNbMF0uaGVhZCwgcmFuZ2VzWzBdLmFuY2hvcik7CiAgICAgICAgfQogICAgICAgIHZpbUdsb2JhbFN0YXRlLnJlZ2lzdGVyQ29udHJvbGxlci5wdXNoVGV4dCgKICAgICAgICAgICAgYXJncy5yZWdpc3Rlck5hbWUsICdjaGFuZ2UnLCB0ZXh0LAogICAgICAgICAgICBhcmdzLmxpbmV3aXNlLCByYW5nZXMubGVuZ3RoID4gMSk7CiAgICAgICAgYWN0aW9ucy5lbnRlckluc2VydE1vZGUoY20sIHtoZWFkOiBmaW5hbEhlYWR9LCBjbS5zdGF0ZS52aW0pOwogICAgICB9LAogICAgICAnZGVsZXRlJzogZnVuY3Rpb24oY20sIGFyZ3MsIHJhbmdlcykgewogICAgICAgIHZhciBmaW5hbEhlYWQsIHRleHQ7CiAgICAgICAgdmFyIHZpbSA9IGNtLnN0YXRlLnZpbTsKICAgICAgICBpZiAoIXZpbS52aXN1YWxCbG9jaykgewogICAgICAgICAgdmFyIGFuY2hvciA9IHJhbmdlc1swXS5hbmNob3IsCiAgICAgICAgICAgICAgaGVhZCA9IHJhbmdlc1swXS5oZWFkOwogICAgICAgICAgaWYgKGFyZ3MubGluZXdpc2UgJiYKICAgICAgICAgICAgICBoZWFkLmxpbmUgIT0gY20uZmlyc3RMaW5lKCkgJiYKICAgICAgICAgICAgICBhbmNob3IubGluZSA9PSBjbS5sYXN0TGluZSgpICYmCiAgICAgICAgICAgICAgYW5jaG9yLmxpbmUgPT0gaGVhZC5saW5lIC0gMSkgewogICAgICAgICAgICBpZiAoYW5jaG9yLmxpbmUgPT0gY20uZmlyc3RMaW5lKCkpIHsKICAgICAgICAgICAgICBhbmNob3IuY2ggPSAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFuY2hvciA9IFBvcyhhbmNob3IubGluZSAtIDEsIGxpbmVMZW5ndGgoY20sIGFuY2hvci5saW5lIC0gMSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0ZXh0ID0gY20uZ2V0UmFuZ2UoYW5jaG9yLCBoZWFkKTsKICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgnJywgYW5jaG9yLCBoZWFkKTsKICAgICAgICAgIGZpbmFsSGVhZCA9IGFuY2hvcjsKICAgICAgICAgIGlmIChhcmdzLmxpbmV3aXNlKSB7CiAgICAgICAgICAgIGZpbmFsSGVhZCA9IG1vdGlvbnMubW92ZVRvRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGNtLCBhbmNob3IpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0ZXh0ID0gY20uZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBmaWxsQXJyYXkoJycsIHJhbmdlcy5sZW5ndGgpOwogICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMocmVwbGFjZW1lbnQpOwogICAgICAgICAgZmluYWxIZWFkID0gcmFuZ2VzWzBdLmFuY2hvcjsKICAgICAgICB9CiAgICAgICAgdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyLnB1c2hUZXh0KAogICAgICAgICAgICBhcmdzLnJlZ2lzdGVyTmFtZSwgJ2RlbGV0ZScsIHRleHQsCiAgICAgICAgICAgIGFyZ3MubGluZXdpc2UsIHZpbS52aXN1YWxCbG9jayk7CiAgICAgICAgdmFyIGluY2x1ZGVMaW5lQnJlYWsgPSB2aW0uaW5zZXJ0TW9kZQogICAgICAgIHJldHVybiBjbGlwQ3Vyc29yVG9Db250ZW50KGNtLCBmaW5hbEhlYWQsIGluY2x1ZGVMaW5lQnJlYWspOwogICAgICB9LAogICAgICBpbmRlbnQ6IGZ1bmN0aW9uKGNtLCBhcmdzLCByYW5nZXMpIHsKICAgICAgICB2YXIgdmltID0gY20uc3RhdGUudmltOwogICAgICAgIHZhciBzdGFydExpbmUgPSByYW5nZXNbMF0uYW5jaG9yLmxpbmU7CiAgICAgICAgdmFyIGVuZExpbmUgPSB2aW0udmlzdWFsQmxvY2sgPwogICAgICAgICAgcmFuZ2VzW3Jhbmdlcy5sZW5ndGggLSAxXS5hbmNob3IubGluZSA6CiAgICAgICAgICByYW5nZXNbMF0uaGVhZC5saW5lOwogICAgICAgIHZhciByZXBlYXQgPSAodmltLnZpc3VhbE1vZGUpID8gYXJncy5yZXBlYXQgOiAxOwogICAgICAgIGlmIChhcmdzLmxpbmV3aXNlKSB7CiAgICAgICAgICBlbmRMaW5lLS07CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSBzdGFydExpbmU7IGkgPD0gZW5kTGluZTsgaSsrKSB7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJlcGVhdDsgaisrKSB7CiAgICAgICAgICAgIGNtLmluZGVudExpbmUoaSwgYXJncy5pbmRlbnRSaWdodCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBtb3Rpb25zLm1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihjbSwgcmFuZ2VzWzBdLmFuY2hvcik7CiAgICAgIH0sCiAgICAgIGluZGVudEF1dG86IGZ1bmN0aW9uKGNtLCBfYXJncywgcmFuZ2VzKSB7CiAgICAgICAgY20uZXhlY0NvbW1hbmQoImluZGVudEF1dG8iKTsKICAgICAgICByZXR1cm4gbW90aW9ucy5tb3ZlVG9GaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXIoY20sIHJhbmdlc1swXS5hbmNob3IpOwogICAgICB9LAogICAgICBjaGFuZ2VDYXNlOiBmdW5jdGlvbihjbSwgYXJncywgcmFuZ2VzLCBvbGRBbmNob3IsIG5ld0hlYWQpIHsKICAgICAgICB2YXIgc2VsZWN0aW9ucyA9IGNtLmdldFNlbGVjdGlvbnMoKTsKICAgICAgICB2YXIgc3dhcHBlZCA9IFtdOwogICAgICAgIHZhciB0b0xvd2VyID0gYXJncy50b0xvd2VyOwogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VsZWN0aW9ucy5sZW5ndGg7IGorKykgewogICAgICAgICAgdmFyIHRvU3dhcCA9IHNlbGVjdGlvbnNbal07CiAgICAgICAgICB2YXIgdGV4dCA9ICcnOwogICAgICAgICAgaWYgKHRvTG93ZXIgPT09IHRydWUpIHsKICAgICAgICAgICAgdGV4dCA9IHRvU3dhcC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgfSBlbHNlIGlmICh0b0xvd2VyID09PSBmYWxzZSkgewogICAgICAgICAgICB0ZXh0ID0gdG9Td2FwLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvU3dhcC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIHZhciBjaGFyYWN0ZXIgPSB0b1N3YXAuY2hhckF0KGkpOwogICAgICAgICAgICAgIHRleHQgKz0gaXNVcHBlckNhc2UoY2hhcmFjdGVyKSA/IGNoYXJhY3Rlci50b0xvd2VyQ2FzZSgpIDoKICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHN3YXBwZWQucHVzaCh0ZXh0KTsKICAgICAgICB9CiAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoc3dhcHBlZCk7CiAgICAgICAgaWYgKGFyZ3Muc2hvdWxkTW92ZUN1cnNvcil7CiAgICAgICAgICByZXR1cm4gbmV3SGVhZDsKICAgICAgICB9IGVsc2UgaWYgKCFjbS5zdGF0ZS52aW0udmlzdWFsTW9kZSAmJiBhcmdzLmxpbmV3aXNlICYmIHJhbmdlc1swXS5hbmNob3IubGluZSArIDEgPT0gcmFuZ2VzWzBdLmhlYWQubGluZSkgewogICAgICAgICAgcmV0dXJuIG1vdGlvbnMubW92ZVRvRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGNtLCBvbGRBbmNob3IpOwogICAgICAgIH0gZWxzZSBpZiAoYXJncy5saW5ld2lzZSl7CiAgICAgICAgICByZXR1cm4gb2xkQW5jaG9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY3Vyc29yTWluKHJhbmdlc1swXS5hbmNob3IsIHJhbmdlc1swXS5oZWFkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHlhbms6IGZ1bmN0aW9uKGNtLCBhcmdzLCByYW5nZXMsIG9sZEFuY2hvcikgewogICAgICAgIHZhciB2aW0gPSBjbS5zdGF0ZS52aW07CiAgICAgICAgdmFyIHRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICAgICB2YXIgZW5kUG9zID0gdmltLnZpc3VhbE1vZGUKICAgICAgICAgID8gY3Vyc29yTWluKHZpbS5zZWwuYW5jaG9yLCB2aW0uc2VsLmhlYWQsIHJhbmdlc1swXS5oZWFkLCByYW5nZXNbMF0uYW5jaG9yKQogICAgICAgICAgOiBvbGRBbmNob3I7CiAgICAgICAgdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyLnB1c2hUZXh0KAogICAgICAgICAgICBhcmdzLnJlZ2lzdGVyTmFtZSwgJ3lhbmsnLAogICAgICAgICAgICB0ZXh0LCBhcmdzLmxpbmV3aXNlLCB2aW0udmlzdWFsQmxvY2spOwogICAgICAgIHJldHVybiBlbmRQb3M7CiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZGVmaW5lT3BlcmF0b3IobmFtZSwgZm4pIHsKICAgICAgb3BlcmF0b3JzW25hbWVdID0gZm47CiAgICB9CgogICAgdmFyIGFjdGlvbnMgPSB7CiAgICAgIGp1bXBMaXN0V2FsazogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgcmVwZWF0ID0gYWN0aW9uQXJncy5yZXBlYXQ7CiAgICAgICAgdmFyIGZvcndhcmQgPSBhY3Rpb25BcmdzLmZvcndhcmQ7CiAgICAgICAgdmFyIGp1bXBMaXN0ID0gdmltR2xvYmFsU3RhdGUuanVtcExpc3Q7CgogICAgICAgIHZhciBtYXJrID0ganVtcExpc3QubW92ZShjbSwgZm9yd2FyZCA/IHJlcGVhdCA6IC1yZXBlYXQpOwogICAgICAgIHZhciBtYXJrUG9zID0gbWFyayA/IG1hcmsuZmluZCgpIDogdW5kZWZpbmVkOwogICAgICAgIG1hcmtQb3MgPSBtYXJrUG9zID8gbWFya1BvcyA6IGNtLmdldEN1cnNvcigpOwogICAgICAgIGNtLnNldEN1cnNvcihtYXJrUG9zKTsKICAgICAgICBjbS5hY2UuY3VyT3AuY29tbWFuZC5zY3JvbGxJbnRvVmlldyA9ICJjZW50ZXItYW5pbWF0ZSI7IC8vIGFjZV9wYXRjaAogICAgICB9LAogICAgICBzY3JvbGw6IGZ1bmN0aW9uKGNtLCBhY3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIHJlcGVhdCA9IGFjdGlvbkFyZ3MucmVwZWF0IHx8IDE7CiAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSBjbS5kZWZhdWx0VGV4dEhlaWdodCgpOwogICAgICAgIHZhciB0b3AgPSBjbS5nZXRTY3JvbGxJbmZvKCkudG9wOwogICAgICAgIHZhciBkZWx0YSA9IGxpbmVIZWlnaHQgKiByZXBlYXQ7CiAgICAgICAgdmFyIG5ld1BvcyA9IGFjdGlvbkFyZ3MuZm9yd2FyZCA/IHRvcCArIGRlbHRhIDogdG9wIC0gZGVsdGE7CiAgICAgICAgdmFyIGN1cnNvciA9IGNvcHlDdXJzb3IoY20uZ2V0Q3Vyc29yKCkpOwogICAgICAgIHZhciBjdXJzb3JDb29yZHMgPSBjbS5jaGFyQ29vcmRzKGN1cnNvciwgJ2xvY2FsJyk7CiAgICAgICAgaWYgKGFjdGlvbkFyZ3MuZm9yd2FyZCkgewogICAgICAgICAgaWYgKG5ld1BvcyA+IGN1cnNvckNvb3Jkcy50b3ApIHsKICAgICAgICAgICAgIGN1cnNvci5saW5lICs9IChuZXdQb3MgLSBjdXJzb3JDb29yZHMudG9wKSAvIGxpbmVIZWlnaHQ7CiAgICAgICAgICAgICBjdXJzb3IubGluZSA9IE1hdGguY2VpbChjdXJzb3IubGluZSk7CiAgICAgICAgICAgICBjbS5zZXRDdXJzb3IoY3Vyc29yKTsKICAgICAgICAgICAgIGN1cnNvckNvb3JkcyA9IGNtLmNoYXJDb29yZHMoY3Vyc29yLCAnbG9jYWwnKTsKICAgICAgICAgICAgIGNtLnNjcm9sbFRvKG51bGwsIGN1cnNvckNvb3Jkcy50b3ApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNtLnNjcm9sbFRvKG51bGwsIG5ld1Bvcyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBuZXdCb3R0b20gPSBuZXdQb3MgKyBjbS5nZXRTY3JvbGxJbmZvKCkuY2xpZW50SGVpZ2h0OwogICAgICAgICAgaWYgKG5ld0JvdHRvbSA8IGN1cnNvckNvb3Jkcy5ib3R0b20pIHsKICAgICAgICAgICAgIGN1cnNvci5saW5lIC09IChjdXJzb3JDb29yZHMuYm90dG9tIC0gbmV3Qm90dG9tKSAvIGxpbmVIZWlnaHQ7CiAgICAgICAgICAgICBjdXJzb3IubGluZSA9IE1hdGguZmxvb3IoY3Vyc29yLmxpbmUpOwogICAgICAgICAgICAgY20uc2V0Q3Vyc29yKGN1cnNvcik7CiAgICAgICAgICAgICBjdXJzb3JDb29yZHMgPSBjbS5jaGFyQ29vcmRzKGN1cnNvciwgJ2xvY2FsJyk7CiAgICAgICAgICAgICBjbS5zY3JvbGxUbygKICAgICAgICAgICAgICAgICBudWxsLCBjdXJzb3JDb29yZHMuYm90dG9tIC0gY20uZ2V0U2Nyb2xsSW5mbygpLmNsaWVudEhlaWdodCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY20uc2Nyb2xsVG8obnVsbCwgbmV3UG9zKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNjcm9sbFRvQ3Vyc29yOiBmdW5jdGlvbihjbSwgYWN0aW9uQXJncykgewogICAgICAgIHZhciBsaW5lTnVtID0gY20uZ2V0Q3Vyc29yKCkubGluZTsKICAgICAgICB2YXIgY2hhckNvb3JkcyA9IGNtLmNoYXJDb29yZHMoUG9zKGxpbmVOdW0sIDApLCAnbG9jYWwnKTsKICAgICAgICB2YXIgaGVpZ2h0ID0gY20uZ2V0U2Nyb2xsSW5mbygpLmNsaWVudEhlaWdodDsKICAgICAgICB2YXIgeSA9IGNoYXJDb29yZHMudG9wOwogICAgICAgIHZhciBsaW5lSGVpZ2h0ID0gY2hhckNvb3Jkcy5ib3R0b20gLSB5OwogICAgICAgIHN3aXRjaCAoYWN0aW9uQXJncy5wb3NpdGlvbikgewogICAgICAgICAgY2FzZSAnY2VudGVyJzogeSA9IHkgLSAoaGVpZ2h0IC8gMikgKyBsaW5lSGVpZ2h0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6IHkgPSB5IC0gaGVpZ2h0ICsgbGluZUhlaWdodDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNtLnNjcm9sbFRvKG51bGwsIHkpOwogICAgICB9LAogICAgICByZXBsYXlNYWNybzogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIHZhciByZWdpc3Rlck5hbWUgPSBhY3Rpb25BcmdzLnNlbGVjdGVkQ2hhcmFjdGVyOwogICAgICAgIHZhciByZXBlYXQgPSBhY3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICB2YXIgbWFjcm9Nb2RlU3RhdGUgPSB2aW1HbG9iYWxTdGF0ZS5tYWNyb01vZGVTdGF0ZTsKICAgICAgICBpZiAocmVnaXN0ZXJOYW1lID09ICdAJykgewogICAgICAgICAgcmVnaXN0ZXJOYW1lID0gbWFjcm9Nb2RlU3RhdGUubGF0ZXN0UmVnaXN0ZXI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1hY3JvTW9kZVN0YXRlLmxhdGVzdFJlZ2lzdGVyID0gcmVnaXN0ZXJOYW1lOwogICAgICAgIH0KICAgICAgICB3aGlsZShyZXBlYXQtLSl7CiAgICAgICAgICBleGVjdXRlTWFjcm9SZWdpc3RlcihjbSwgdmltLCBtYWNyb01vZGVTdGF0ZSwgcmVnaXN0ZXJOYW1lKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGVudGVyTWFjcm9SZWNvcmRNb2RlOiBmdW5jdGlvbihjbSwgYWN0aW9uQXJncykgewogICAgICAgIHZhciBtYWNyb01vZGVTdGF0ZSA9IHZpbUdsb2JhbFN0YXRlLm1hY3JvTW9kZVN0YXRlOwogICAgICAgIHZhciByZWdpc3Rlck5hbWUgPSBhY3Rpb25BcmdzLnNlbGVjdGVkQ2hhcmFjdGVyOwogICAgICAgIGlmICh2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuaXNWYWxpZFJlZ2lzdGVyKHJlZ2lzdGVyTmFtZSkpIHsKICAgICAgICAgIG1hY3JvTW9kZVN0YXRlLmVudGVyTWFjcm9SZWNvcmRNb2RlKGNtLCByZWdpc3Rlck5hbWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG9nZ2xlT3ZlcndyaXRlOiBmdW5jdGlvbihjbSkgewogICAgICAgIGlmICghY20uc3RhdGUub3ZlcndyaXRlKSB7CiAgICAgICAgICBjbS50b2dnbGVPdmVyd3JpdGUodHJ1ZSk7CiAgICAgICAgICBjbS5zZXRPcHRpb24oJ2tleU1hcCcsICd2aW0tcmVwbGFjZScpOwogICAgICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICJ2aW0tbW9kZS1jaGFuZ2UiLCB7bW9kZTogInJlcGxhY2UifSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNtLnRvZ2dsZU92ZXJ3cml0ZShmYWxzZSk7CiAgICAgICAgICBjbS5zZXRPcHRpb24oJ2tleU1hcCcsICd2aW0taW5zZXJ0Jyk7CiAgICAgICAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgInZpbS1tb2RlLWNoYW5nZSIsIHttb2RlOiAiaW5zZXJ0In0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZW50ZXJJbnNlcnRNb2RlOiBmdW5jdGlvbihjbSwgYWN0aW9uQXJncywgdmltKSB7CiAgICAgICAgaWYgKGNtLmdldE9wdGlvbigncmVhZE9ubHknKSkgeyByZXR1cm47IH0KICAgICAgICB2aW0uaW5zZXJ0TW9kZSA9IHRydWU7CiAgICAgICAgdmltLmluc2VydE1vZGVSZXBlYXQgPSBhY3Rpb25BcmdzICYmIGFjdGlvbkFyZ3MucmVwZWF0IHx8IDE7CiAgICAgICAgdmFyIGluc2VydEF0ID0gKGFjdGlvbkFyZ3MpID8gYWN0aW9uQXJncy5pbnNlcnRBdCA6IG51bGw7CiAgICAgICAgdmFyIHNlbCA9IHZpbS5zZWw7CiAgICAgICAgdmFyIGhlYWQgPSBhY3Rpb25BcmdzLmhlYWQgfHwgY20uZ2V0Q3Vyc29yKCdoZWFkJyk7CiAgICAgICAgdmFyIGhlaWdodCA9IGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoOwogICAgICAgIGlmIChpbnNlcnRBdCA9PSAnZW9sJykgewogICAgICAgICAgaGVhZCA9IFBvcyhoZWFkLmxpbmUsIGxpbmVMZW5ndGgoY20sIGhlYWQubGluZSkpOwogICAgICAgIH0gZWxzZSBpZiAoaW5zZXJ0QXQgPT0gJ2NoYXJBZnRlcicpIHsKICAgICAgICAgIGhlYWQgPSBvZmZzZXRDdXJzb3IoaGVhZCwgMCwgMSk7CiAgICAgICAgfSBlbHNlIGlmIChpbnNlcnRBdCA9PSAnZmlyc3ROb25CbGFuaycpIHsKICAgICAgICAgIGhlYWQgPSBtb3Rpb25zLm1vdmVUb0ZpcnN0Tm9uV2hpdGVTcGFjZUNoYXJhY3RlcihjbSwgaGVhZCk7CiAgICAgICAgfSBlbHNlIGlmIChpbnNlcnRBdCA9PSAnc3RhcnRPZlNlbGVjdGVkQXJlYScpIHsKICAgICAgICAgIGlmICghdmltLnZpc3VhbE1vZGUpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgaWYgKCF2aW0udmlzdWFsQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbC5oZWFkLmxpbmUgPCBzZWwuYW5jaG9yLmxpbmUpIHsKICAgICAgICAgICAgICBoZWFkID0gc2VsLmhlYWQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaGVhZCA9IFBvcyhzZWwuYW5jaG9yLmxpbmUsIDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoZWFkID0gUG9zKAogICAgICAgICAgICAgICAgTWF0aC5taW4oc2VsLmhlYWQubGluZSwgc2VsLmFuY2hvci5saW5lKSwKICAgICAgICAgICAgICAgIE1hdGgubWluKHNlbC5oZWFkLmNoLCBzZWwuYW5jaG9yLmNoKSk7CiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguYWJzKHNlbC5oZWFkLmxpbmUgLSBzZWwuYW5jaG9yLmxpbmUpICsgMTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGluc2VydEF0ID09ICdlbmRPZlNlbGVjdGVkQXJlYScpIHsKICAgICAgICAgICAgaWYgKCF2aW0udmlzdWFsTW9kZSkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBpZiAoIXZpbS52aXN1YWxCbG9jaykgewogICAgICAgICAgICBpZiAoc2VsLmhlYWQubGluZSA+PSBzZWwuYW5jaG9yLmxpbmUpIHsKICAgICAgICAgICAgICBoZWFkID0gb2Zmc2V0Q3Vyc29yKHNlbC5oZWFkLCAwLCAxKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBoZWFkID0gUG9zKHNlbC5hbmNob3IubGluZSwgMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhlYWQgPSBQb3MoCiAgICAgICAgICAgICAgICBNYXRoLm1pbihzZWwuaGVhZC5saW5lLCBzZWwuYW5jaG9yLmxpbmUpLAogICAgICAgICAgICAgICAgTWF0aC5tYXgoc2VsLmhlYWQuY2ggKyAxLCBzZWwuYW5jaG9yLmNoKSk7CiAgICAgICAgICAgIGhlaWdodCA9IE1hdGguYWJzKHNlbC5oZWFkLmxpbmUgLSBzZWwuYW5jaG9yLmxpbmUpICsgMTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGluc2VydEF0ID09ICdpbnBsYWNlJykgewogICAgICAgICAgaWYgKHZpbS52aXN1YWxNb2RlKXsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbS5zZXRPcHRpb24oJ2Rpc2FibGVJbnB1dCcsIGZhbHNlKTsKICAgICAgICBpZiAoYWN0aW9uQXJncyAmJiBhY3Rpb25BcmdzLnJlcGxhY2UpIHsKICAgICAgICAgIGNtLnRvZ2dsZU92ZXJ3cml0ZSh0cnVlKTsKICAgICAgICAgIGNtLnNldE9wdGlvbigna2V5TWFwJywgJ3ZpbS1yZXBsYWNlJyk7CiAgICAgICAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgInZpbS1tb2RlLWNoYW5nZSIsIHttb2RlOiAicmVwbGFjZSJ9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY20udG9nZ2xlT3ZlcndyaXRlKGZhbHNlKTsKICAgICAgICAgIGNtLnNldE9wdGlvbigna2V5TWFwJywgJ3ZpbS1pbnNlcnQnKTsKICAgICAgICAgIENvZGVNaXJyb3Iuc2lnbmFsKGNtLCAidmltLW1vZGUtY2hhbmdlIiwge21vZGU6ICJpbnNlcnQifSk7CiAgICAgICAgfQogICAgICAgIGlmICghdmltR2xvYmFsU3RhdGUubWFjcm9Nb2RlU3RhdGUuaXNQbGF5aW5nKSB7CiAgICAgICAgICBjbS5vbignY2hhbmdlJywgb25DaGFuZ2UpOwogICAgICAgICAgQ29kZU1pcnJvci5vbihjbS5nZXRJbnB1dEZpZWxkKCksICdrZXlkb3duJywgb25LZXlFdmVudFRhcmdldEtleURvd24pOwogICAgICAgIH0KICAgICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICAgIGV4aXRWaXN1YWxNb2RlKGNtKTsKICAgICAgICB9CiAgICAgICAgc2VsZWN0Rm9ySW5zZXJ0KGNtLCBoZWFkLCBoZWlnaHQpOwogICAgICB9LAogICAgICB0b2dnbGVWaXN1YWxNb2RlOiBmdW5jdGlvbihjbSwgYWN0aW9uQXJncywgdmltKSB7CiAgICAgICAgdmFyIHJlcGVhdCA9IGFjdGlvbkFyZ3MucmVwZWF0OwogICAgICAgIHZhciBhbmNob3IgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICB2YXIgaGVhZDsKICAgICAgICBpZiAoIXZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICB2aW0udmlzdWFsTW9kZSA9IHRydWU7CiAgICAgICAgICB2aW0udmlzdWFsTGluZSA9ICEhYWN0aW9uQXJncy5saW5ld2lzZTsKICAgICAgICAgIHZpbS52aXN1YWxCbG9jayA9ICEhYWN0aW9uQXJncy5ibG9ja3dpc2U7CiAgICAgICAgICBoZWFkID0gY2xpcEN1cnNvclRvQ29udGVudCgKICAgICAgICAgICAgICBjbSwgUG9zKGFuY2hvci5saW5lLCBhbmNob3IuY2ggKyByZXBlYXQgLSAxKSwKICAgICAgICAgICAgICB0cnVlIC8qKiBpbmNsdWRlTGluZUJyZWFrICovKTsKICAgICAgICAgIHZpbS5zZWwgPSB7CiAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yLAogICAgICAgICAgICBoZWFkOiBoZWFkCiAgICAgICAgICB9OwogICAgICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICJ2aW0tbW9kZS1jaGFuZ2UiLCB7bW9kZTogInZpc3VhbCIsIHN1Yk1vZGU6IHZpbS52aXN1YWxMaW5lID8gImxpbmV3aXNlIiA6IHZpbS52aXN1YWxCbG9jayA/ICJibG9ja3dpc2UiIDogIiJ9KTsKICAgICAgICAgIHVwZGF0ZUNtU2VsZWN0aW9uKGNtKTsKICAgICAgICAgIHVwZGF0ZU1hcmsoY20sIHZpbSwgJzwnLCBjdXJzb3JNaW4oYW5jaG9yLCBoZWFkKSk7CiAgICAgICAgICB1cGRhdGVNYXJrKGNtLCB2aW0sICc+JywgY3Vyc29yTWF4KGFuY2hvciwgaGVhZCkpOwogICAgICAgIH0gZWxzZSBpZiAodmltLnZpc3VhbExpbmUgXiBhY3Rpb25BcmdzLmxpbmV3aXNlIHx8CiAgICAgICAgICAgIHZpbS52aXN1YWxCbG9jayBeIGFjdGlvbkFyZ3MuYmxvY2t3aXNlKSB7CiAgICAgICAgICB2aW0udmlzdWFsTGluZSA9ICEhYWN0aW9uQXJncy5saW5ld2lzZTsKICAgICAgICAgIHZpbS52aXN1YWxCbG9jayA9ICEhYWN0aW9uQXJncy5ibG9ja3dpc2U7CiAgICAgICAgICBDb2RlTWlycm9yLnNpZ25hbChjbSwgInZpbS1tb2RlLWNoYW5nZSIsIHttb2RlOiAidmlzdWFsIiwgc3ViTW9kZTogdmltLnZpc3VhbExpbmUgPyAibGluZXdpc2UiIDogdmltLnZpc3VhbEJsb2NrID8gImJsb2Nrd2lzZSIgOiAiIn0pOwogICAgICAgICAgdXBkYXRlQ21TZWxlY3Rpb24oY20pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleGl0VmlzdWFsTW9kZShjbSk7CiAgICAgICAgfQogICAgICB9LAogICAgICByZXNlbGVjdExhc3RTZWxlY3Rpb246IGZ1bmN0aW9uKGNtLCBfYWN0aW9uQXJncywgdmltKSB7CiAgICAgICAgdmFyIGxhc3RTZWxlY3Rpb24gPSB2aW0ubGFzdFNlbGVjdGlvbjsKICAgICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICAgIHVwZGF0ZUxhc3RTZWxlY3Rpb24oY20sIHZpbSk7CiAgICAgICAgfQogICAgICAgIGlmIChsYXN0U2VsZWN0aW9uKSB7CiAgICAgICAgICB2YXIgYW5jaG9yID0gbGFzdFNlbGVjdGlvbi5hbmNob3JNYXJrLmZpbmQoKTsKICAgICAgICAgIHZhciBoZWFkID0gbGFzdFNlbGVjdGlvbi5oZWFkTWFyay5maW5kKCk7CiAgICAgICAgICBpZiAoIWFuY2hvciB8fCAhaGVhZCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB2aW0uc2VsID0gewogICAgICAgICAgICBhbmNob3I6IGFuY2hvciwKICAgICAgICAgICAgaGVhZDogaGVhZAogICAgICAgICAgfTsKICAgICAgICAgIHZpbS52aXN1YWxNb2RlID0gdHJ1ZTsKICAgICAgICAgIHZpbS52aXN1YWxMaW5lID0gbGFzdFNlbGVjdGlvbi52aXN1YWxMaW5lOwogICAgICAgICAgdmltLnZpc3VhbEJsb2NrID0gbGFzdFNlbGVjdGlvbi52aXN1YWxCbG9jazsKICAgICAgICAgIHVwZGF0ZUNtU2VsZWN0aW9uKGNtKTsKICAgICAgICAgIHVwZGF0ZU1hcmsoY20sIHZpbSwgJzwnLCBjdXJzb3JNaW4oYW5jaG9yLCBoZWFkKSk7CiAgICAgICAgICB1cGRhdGVNYXJrKGNtLCB2aW0sICc+JywgY3Vyc29yTWF4KGFuY2hvciwgaGVhZCkpOwogICAgICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICd2aW0tbW9kZS1jaGFuZ2UnLCB7CiAgICAgICAgICAgIG1vZGU6ICd2aXN1YWwnLAogICAgICAgICAgICBzdWJNb2RlOiB2aW0udmlzdWFsTGluZSA/ICdsaW5ld2lzZScgOgogICAgICAgICAgICAgICAgICAgICB2aW0udmlzdWFsQmxvY2sgPyAnYmxvY2t3aXNlJyA6ICcnfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBqb2luTGluZXM6IGZ1bmN0aW9uKGNtLCBhY3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICB2YXIgY3VyU3RhcnQsIGN1ckVuZDsKICAgICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICAgIGN1clN0YXJ0ID0gY20uZ2V0Q3Vyc29yKCdhbmNob3InKTsKICAgICAgICAgIGN1ckVuZCA9IGNtLmdldEN1cnNvcignaGVhZCcpOwogICAgICAgICAgaWYgKGN1cnNvcklzQmVmb3JlKGN1ckVuZCwgY3VyU3RhcnQpKSB7CiAgICAgICAgICAgIHZhciB0bXAgPSBjdXJFbmQ7CiAgICAgICAgICAgIGN1ckVuZCA9IGN1clN0YXJ0OwogICAgICAgICAgICBjdXJTdGFydCA9IHRtcDsKICAgICAgICAgIH0KICAgICAgICAgIGN1ckVuZC5jaCA9IGxpbmVMZW5ndGgoY20sIGN1ckVuZC5saW5lKSAtIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciByZXBlYXQgPSBNYXRoLm1heChhY3Rpb25BcmdzLnJlcGVhdCwgMik7CiAgICAgICAgICBjdXJTdGFydCA9IGNtLmdldEN1cnNvcigpOwogICAgICAgICAgY3VyRW5kID0gY2xpcEN1cnNvclRvQ29udGVudChjbSwgUG9zKGN1clN0YXJ0LmxpbmUgKyByZXBlYXQgLSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZmluaXR5KSk7CiAgICAgICAgfQogICAgICAgIHZhciBmaW5hbENoID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gY3VyU3RhcnQubGluZTsgaSA8IGN1ckVuZC5saW5lOyBpKyspIHsKICAgICAgICAgIGZpbmFsQ2ggPSBsaW5lTGVuZ3RoKGNtLCBjdXJTdGFydC5saW5lKTsKICAgICAgICAgIHZhciB0bXAgPSBQb3MoY3VyU3RhcnQubGluZSArIDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVMZW5ndGgoY20sIGN1clN0YXJ0LmxpbmUgKyAxKSk7CiAgICAgICAgICB2YXIgdGV4dCA9IGNtLmdldFJhbmdlKGN1clN0YXJ0LCB0bXApOwogICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXG5ccyovZywgJyAnKTsKICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSh0ZXh0LCBjdXJTdGFydCwgdG1wKTsKICAgICAgICB9CiAgICAgICAgdmFyIGN1ckZpbmFsUG9zID0gUG9zKGN1clN0YXJ0LmxpbmUsIGZpbmFsQ2gpOwogICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgZXhpdFZpc3VhbE1vZGUoY20sIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgY20uc2V0Q3Vyc29yKGN1ckZpbmFsUG9zKTsKICAgICAgfSwKICAgICAgbmV3TGluZUFuZEVudGVySW5zZXJ0TW9kZTogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIHZpbS5pbnNlcnRNb2RlID0gdHJ1ZTsKICAgICAgICB2YXIgaW5zZXJ0QXQgPSBjb3B5Q3Vyc29yKGNtLmdldEN1cnNvcigpKTsKICAgICAgICBpZiAoaW5zZXJ0QXQubGluZSA9PT0gY20uZmlyc3RMaW5lKCkgJiYgIWFjdGlvbkFyZ3MuYWZ0ZXIpIHsKICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSgnXG4nLCBQb3MoY20uZmlyc3RMaW5lKCksIDApKTsKICAgICAgICAgIGNtLnNldEN1cnNvcihjbS5maXJzdExpbmUoKSwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluc2VydEF0LmxpbmUgPSAoYWN0aW9uQXJncy5hZnRlcikgPyBpbnNlcnRBdC5saW5lIDoKICAgICAgICAgICAgICBpbnNlcnRBdC5saW5lIC0gMTsKICAgICAgICAgIGluc2VydEF0LmNoID0gbGluZUxlbmd0aChjbSwgaW5zZXJ0QXQubGluZSk7CiAgICAgICAgICBjbS5zZXRDdXJzb3IoaW5zZXJ0QXQpOwogICAgICAgICAgdmFyIG5ld2xpbmVGbiA9IENvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudENvbnRpbnVlQ29tbWVudCB8fAogICAgICAgICAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudDsKICAgICAgICAgIG5ld2xpbmVGbihjbSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuZW50ZXJJbnNlcnRNb2RlKGNtLCB7IHJlcGVhdDogYWN0aW9uQXJncy5yZXBlYXQgfSwgdmltKTsKICAgICAgfSwKICAgICAgcGFzdGU6IGZ1bmN0aW9uKGNtLCBhY3Rpb25BcmdzLCB2aW0pIHsKICAgICAgICB2YXIgY3VyID0gY29weUN1cnNvcihjbS5nZXRDdXJzb3IoKSk7CiAgICAgICAgdmFyIHJlZ2lzdGVyID0gdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyLmdldFJlZ2lzdGVyKAogICAgICAgICAgICBhY3Rpb25BcmdzLnJlZ2lzdGVyTmFtZSk7CiAgICAgICAgdmFyIHRleHQgPSByZWdpc3Rlci50b1N0cmluZygpOwogICAgICAgIGlmICghdGV4dCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoYWN0aW9uQXJncy5tYXRjaEluZGVudCkgewogICAgICAgICAgdmFyIHRhYlNpemUgPSBjbS5nZXRPcHRpb24oInRhYlNpemUiKTsKICAgICAgICAgIHZhciB3aGl0ZXNwYWNlTGVuZ3RoID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIHZhciB0YWJzID0gKHN0ci5zcGxpdCgiXHQiKS5sZW5ndGggLSAxKTsKICAgICAgICAgICAgdmFyIHNwYWNlcyA9IChzdHIuc3BsaXQoIiAiKS5sZW5ndGggLSAxKTsKICAgICAgICAgICAgcmV0dXJuIHRhYnMgKiB0YWJTaXplICsgc3BhY2VzICogMTsKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgY3VycmVudExpbmUgPSBjbS5nZXRMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUpOwogICAgICAgICAgdmFyIGluZGVudCA9IHdoaXRlc3BhY2VMZW5ndGgoY3VycmVudExpbmUubWF0Y2goL15ccyovKVswXSk7CiAgICAgICAgICB2YXIgY2hvbXBlZFRleHQgPSB0ZXh0LnJlcGxhY2UoL1xuJC8sICcnKTsKICAgICAgICAgIHZhciB3YXNDaG9tcGVkID0gdGV4dCAhPT0gY2hvbXBlZFRleHQ7CiAgICAgICAgICB2YXIgZmlyc3RJbmRlbnQgPSB3aGl0ZXNwYWNlTGVuZ3RoKHRleHQubWF0Y2goL15ccyovKVswXSk7CiAgICAgICAgICB2YXIgdGV4dCA9IGNob21wZWRUZXh0LnJlcGxhY2UoL15ccyovZ20sIGZ1bmN0aW9uKHdzcGFjZSkgewogICAgICAgICAgICB2YXIgbmV3SW5kZW50ID0gaW5kZW50ICsgKHdoaXRlc3BhY2VMZW5ndGgod3NwYWNlKSAtIGZpcnN0SW5kZW50KTsKICAgICAgICAgICAgaWYgKG5ld0luZGVudCA8IDApIHsKICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoY20uZ2V0T3B0aW9uKCJpbmRlbnRXaXRoVGFicyIpKSB7CiAgICAgICAgICAgICAgdmFyIHF1b3RpZW50ID0gTWF0aC5mbG9vcihuZXdJbmRlbnQgLyB0YWJTaXplKTsKICAgICAgICAgICAgICByZXR1cm4gQXJyYXkocXVvdGllbnQgKyAxKS5qb2luKCdcdCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBBcnJheShuZXdJbmRlbnQgKyAxKS5qb2luKCcgJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgdGV4dCArPSB3YXNDaG9tcGVkID8gIlxuIiA6ICIiOwogICAgICAgIH0KICAgICAgICBpZiAoYWN0aW9uQXJncy5yZXBlYXQgPiAxKSB7CiAgICAgICAgICB2YXIgdGV4dCA9IEFycmF5KGFjdGlvbkFyZ3MucmVwZWF0ICsgMSkuam9pbih0ZXh0KTsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmV3aXNlID0gcmVnaXN0ZXIubGluZXdpc2U7CiAgICAgICAgdmFyIGJsb2Nrd2lzZSA9IHJlZ2lzdGVyLmJsb2Nrd2lzZTsKICAgICAgICBpZiAoYmxvY2t3aXNlKSB7CiAgICAgICAgICB0ZXh0ID0gdGV4dC5zcGxpdCgnXG4nKTsKICAgICAgICAgIGlmIChsaW5ld2lzZSkgewogICAgICAgICAgICAgIHRleHQucG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGV4dFtpXSA9ICh0ZXh0W2ldID09ICcnKSA/ICcgJyA6IHRleHRbaV07CiAgICAgICAgICB9CiAgICAgICAgICBjdXIuY2ggKz0gYWN0aW9uQXJncy5hZnRlciA/IDEgOiAwOwogICAgICAgICAgY3VyLmNoID0gTWF0aC5taW4obGluZUxlbmd0aChjbSwgY3VyLmxpbmUpLCBjdXIuY2gpOwogICAgICAgIH0gZWxzZSBpZiAobGluZXdpc2UpIHsKICAgICAgICAgIGlmKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICAgIHRleHQgPSB2aW0udmlzdWFsTGluZSA/IHRleHQuc2xpY2UoMCwgLTEpIDogJ1xuJyArIHRleHQuc2xpY2UoMCwgdGV4dC5sZW5ndGggLSAxKSArICdcbic7CiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbkFyZ3MuYWZ0ZXIpIHsKICAgICAgICAgICAgdGV4dCA9ICdcbicgKyB0ZXh0LnNsaWNlKDAsIHRleHQubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIGN1ci5jaCA9IGxpbmVMZW5ndGgoY20sIGN1ci5saW5lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGN1ci5jaCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1ci5jaCArPSBhY3Rpb25BcmdzLmFmdGVyID8gMSA6IDA7CiAgICAgICAgfQogICAgICAgIHZhciBjdXJQb3NGaW5hbDsKICAgICAgICB2YXIgaWR4OwogICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgdmltLmxhc3RQYXN0ZWRUZXh0ID0gdGV4dDsKICAgICAgICAgIHZhciBsYXN0U2VsZWN0aW9uQ3VyRW5kOwogICAgICAgICAgdmFyIHNlbGVjdGVkQXJlYSA9IGdldFNlbGVjdGVkQXJlYVJhbmdlKGNtLCB2aW0pOwogICAgICAgICAgdmFyIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0ZWRBcmVhWzBdOwogICAgICAgICAgdmFyIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGVkQXJlYVsxXTsKICAgICAgICAgIHZhciBzZWxlY3RlZFRleHQgPSBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgIHZhciBzZWxlY3Rpb25zID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKICAgICAgICAgIHZhciBlbXB0eVN0cmluZ3MgPSBuZXcgQXJyYXkoc2VsZWN0aW9ucy5sZW5ndGgpLmpvaW4oJzEnKS5zcGxpdCgnMScpOwogICAgICAgICAgaWYgKHZpbS5sYXN0U2VsZWN0aW9uKSB7CiAgICAgICAgICAgIGxhc3RTZWxlY3Rpb25DdXJFbmQgPSB2aW0ubGFzdFNlbGVjdGlvbi5oZWFkTWFyay5maW5kKCk7CiAgICAgICAgICB9CiAgICAgICAgICB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIudW5uYW1lZFJlZ2lzdGVyLnNldFRleHQoc2VsZWN0ZWRUZXh0KTsKICAgICAgICAgIGlmIChibG9ja3dpc2UpIHsKICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMoZW1wdHlTdHJpbmdzKTsKICAgICAgICAgICAgc2VsZWN0aW9uRW5kID0gUG9zKHNlbGVjdGlvblN0YXJ0LmxpbmUgKyB0ZXh0Lmxlbmd0aC0xLCBzZWxlY3Rpb25TdGFydC5jaCk7CiAgICAgICAgICAgIGNtLnNldEN1cnNvcihzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgICAgIHNlbGVjdEJsb2NrKGNtLCBzZWxlY3Rpb25FbmQpOwogICAgICAgICAgICBjbS5yZXBsYWNlU2VsZWN0aW9ucyh0ZXh0KTsKICAgICAgICAgICAgY3VyUG9zRmluYWwgPSBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgIH0gZWxzZSBpZiAodmltLnZpc3VhbEJsb2NrKSB7CiAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKGVtcHR5U3RyaW5ncyk7CiAgICAgICAgICAgIGNtLnNldEN1cnNvcihzZWxlY3Rpb25TdGFydCk7CiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSh0ZXh0LCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uU3RhcnQpOwogICAgICAgICAgICBjdXJQb3NGaW5hbCA9IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKHRleHQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogICAgICAgICAgICBjdXJQb3NGaW5hbCA9IGNtLnBvc0Zyb21JbmRleChjbS5pbmRleEZyb21Qb3Moc2VsZWN0aW9uU3RhcnQpICsgdGV4dC5sZW5ndGggLSAxKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmKGxhc3RTZWxlY3Rpb25DdXJFbmQpIHsKICAgICAgICAgICAgdmltLmxhc3RTZWxlY3Rpb24uaGVhZE1hcmsgPSBjbS5zZXRCb29rbWFyayhsYXN0U2VsZWN0aW9uQ3VyRW5kKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsaW5ld2lzZSkgewogICAgICAgICAgICBjdXJQb3NGaW5hbC5jaD0wOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYmxvY2t3aXNlKSB7CiAgICAgICAgICAgIGNtLnNldEN1cnNvcihjdXIpOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICB2YXIgbGluZSA9IGN1ci5saW5lK2k7CiAgICAgICAgICAgICAgaWYgKGxpbmUgPiBjbS5sYXN0TGluZSgpKSB7CiAgICAgICAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UoJ1xuJywgIFBvcyhsaW5lLCAwKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBsYXN0Q2ggPSBsaW5lTGVuZ3RoKGNtLCBsaW5lKTsKICAgICAgICAgICAgICBpZiAobGFzdENoIDwgY3VyLmNoKSB7CiAgICAgICAgICAgICAgICBleHRlbmRMaW5lVG9Db2x1bW4oY20sIGxpbmUsIGN1ci5jaCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNtLnNldEN1cnNvcihjdXIpOwogICAgICAgICAgICBzZWxlY3RCbG9jayhjbSwgUG9zKGN1ci5saW5lICsgdGV4dC5sZW5ndGgtMSwgY3VyLmNoKSk7CiAgICAgICAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb25zKHRleHQpOwogICAgICAgICAgICBjdXJQb3NGaW5hbCA9IGN1cjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZSh0ZXh0LCBjdXIpOwogICAgICAgICAgICBpZiAobGluZXdpc2UgJiYgYWN0aW9uQXJncy5hZnRlcikgewogICAgICAgICAgICAgIGN1clBvc0ZpbmFsID0gUG9zKAogICAgICAgICAgICAgIGN1ci5saW5lICsgMSwKICAgICAgICAgICAgICBmaW5kRmlyc3ROb25XaGl0ZVNwYWNlQ2hhcmFjdGVyKGNtLmdldExpbmUoY3VyLmxpbmUgKyAxKSkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmV3aXNlICYmICFhY3Rpb25BcmdzLmFmdGVyKSB7CiAgICAgICAgICAgICAgY3VyUG9zRmluYWwgPSBQb3MoCiAgICAgICAgICAgICAgICBjdXIubGluZSwKICAgICAgICAgICAgICAgIGZpbmRGaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXIoY20uZ2V0TGluZShjdXIubGluZSkpKTsKICAgICAgICAgICAgfSBlbHNlIGlmICghbGluZXdpc2UgJiYgYWN0aW9uQXJncy5hZnRlcikgewogICAgICAgICAgICAgIGlkeCA9IGNtLmluZGV4RnJvbVBvcyhjdXIpOwogICAgICAgICAgICAgIGN1clBvc0ZpbmFsID0gY20ucG9zRnJvbUluZGV4KGlkeCArIHRleHQubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaWR4ID0gY20uaW5kZXhGcm9tUG9zKGN1cik7CiAgICAgICAgICAgICAgY3VyUG9zRmluYWwgPSBjbS5wb3NGcm9tSW5kZXgoaWR4ICsgdGV4dC5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgZXhpdFZpc3VhbE1vZGUoY20sIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgY20uc2V0Q3Vyc29yKGN1clBvc0ZpbmFsKTsKICAgICAgfSwKICAgICAgdW5kbzogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MpIHsKICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXBlYXRGbihjbSwgQ29kZU1pcnJvci5jb21tYW5kcy51bmRvLCBhY3Rpb25BcmdzLnJlcGVhdCkoKTsKICAgICAgICAgIGNtLnNldEN1cnNvcihjbS5nZXRDdXJzb3IoJ2FuY2hvcicpKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVkbzogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MpIHsKICAgICAgICByZXBlYXRGbihjbSwgQ29kZU1pcnJvci5jb21tYW5kcy5yZWRvLCBhY3Rpb25BcmdzLnJlcGVhdCkoKTsKICAgICAgfSwKICAgICAgc2V0UmVnaXN0ZXI6IGZ1bmN0aW9uKF9jbSwgYWN0aW9uQXJncywgdmltKSB7CiAgICAgICAgdmltLmlucHV0U3RhdGUucmVnaXN0ZXJOYW1lID0gYWN0aW9uQXJncy5zZWxlY3RlZENoYXJhY3RlcjsKICAgICAgfSwKICAgICAgc2V0TWFyazogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIHZhciBtYXJrTmFtZSA9IGFjdGlvbkFyZ3Muc2VsZWN0ZWRDaGFyYWN0ZXI7CiAgICAgICAgdXBkYXRlTWFyayhjbSwgdmltLCBtYXJrTmFtZSwgY20uZ2V0Q3Vyc29yKCkpOwogICAgICB9LAogICAgICByZXBsYWNlOiBmdW5jdGlvbihjbSwgYWN0aW9uQXJncywgdmltKSB7CiAgICAgICAgdmFyIHJlcGxhY2VXaXRoID0gYWN0aW9uQXJncy5zZWxlY3RlZENoYXJhY3RlcjsKICAgICAgICB2YXIgY3VyU3RhcnQgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICB2YXIgcmVwbGFjZVRvOwogICAgICAgIHZhciBjdXJFbmQ7CiAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSBjbS5saXN0U2VsZWN0aW9ucygpOwogICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgY3VyU3RhcnQgPSBjbS5nZXRDdXJzb3IoJ3N0YXJ0Jyk7CiAgICAgICAgICBjdXJFbmQgPSBjbS5nZXRDdXJzb3IoJ2VuZCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUoY3VyU3RhcnQubGluZSk7CiAgICAgICAgICByZXBsYWNlVG8gPSBjdXJTdGFydC5jaCArIGFjdGlvbkFyZ3MucmVwZWF0OwogICAgICAgICAgaWYgKHJlcGxhY2VUbyA+IGxpbmUubGVuZ3RoKSB7CiAgICAgICAgICAgIHJlcGxhY2VUbz1saW5lLmxlbmd0aDsKICAgICAgICAgIH0KICAgICAgICAgIGN1ckVuZCA9IFBvcyhjdXJTdGFydC5saW5lLCByZXBsYWNlVG8pOwogICAgICAgIH0KICAgICAgICBpZiAocmVwbGFjZVdpdGg9PSdcbicpIHsKICAgICAgICAgIGlmICghdmltLnZpc3VhbE1vZGUpIGNtLnJlcGxhY2VSYW5nZSgnJywgY3VyU3RhcnQsIGN1ckVuZCk7CiAgICAgICAgICAoQ29kZU1pcnJvci5jb21tYW5kcy5uZXdsaW5lQW5kSW5kZW50Q29udGludWVDb21tZW50IHx8IENvZGVNaXJyb3IuY29tbWFuZHMubmV3bGluZUFuZEluZGVudCkoY20pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgcmVwbGFjZVdpdGhTdHIgPSBjbS5nZXRSYW5nZShjdXJTdGFydCwgY3VyRW5kKTsKICAgICAgICAgIHJlcGxhY2VXaXRoU3RyID0gcmVwbGFjZVdpdGhTdHIucmVwbGFjZSgvW15cbl0vZywgcmVwbGFjZVdpdGgpOwogICAgICAgICAgaWYgKHZpbS52aXN1YWxCbG9jaykgewogICAgICAgICAgICB2YXIgc3BhY2VzID0gbmV3IEFycmF5KGNtLmdldE9wdGlvbigidGFiU2l6ZSIpKzEpLmpvaW4oJyAnKTsKICAgICAgICAgICAgcmVwbGFjZVdpdGhTdHIgPSBjbS5nZXRTZWxlY3Rpb24oKTsKICAgICAgICAgICAgcmVwbGFjZVdpdGhTdHIgPSByZXBsYWNlV2l0aFN0ci5yZXBsYWNlKC9cdC9nLCBzcGFjZXMpLnJlcGxhY2UoL1teXG5dL2csIHJlcGxhY2VXaXRoKS5zcGxpdCgnXG4nKTsKICAgICAgICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbnMocmVwbGFjZVdpdGhTdHIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKHJlcGxhY2VXaXRoU3RyLCBjdXJTdGFydCwgY3VyRW5kKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgICAgICBjdXJTdGFydCA9IGN1cnNvcklzQmVmb3JlKHNlbGVjdGlvbnNbMF0uYW5jaG9yLCBzZWxlY3Rpb25zWzBdLmhlYWQpID8KICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbnNbMF0uYW5jaG9yIDogc2VsZWN0aW9uc1swXS5oZWFkOwogICAgICAgICAgICBjbS5zZXRDdXJzb3IoY3VyU3RhcnQpOwogICAgICAgICAgICBleGl0VmlzdWFsTW9kZShjbSwgZmFsc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY20uc2V0Q3Vyc29yKG9mZnNldEN1cnNvcihjdXJFbmQsIDAsIC0xKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBpbmNyZW1lbnROdW1iZXJUb2tlbjogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MpIHsKICAgICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgICAgdmFyIGxpbmVTdHIgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKICAgICAgICB2YXIgcmUgPSAvKC0/KSg/OigweCkoW1xkYS1mXSspfCgwYnwwfCkoXGQrKSkvZ2k7CiAgICAgICAgdmFyIG1hdGNoOwogICAgICAgIHZhciBzdGFydDsKICAgICAgICB2YXIgZW5kOwogICAgICAgIHZhciBudW1iZXJTdHI7CiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlLmV4ZWMobGluZVN0cikpICE9PSBudWxsKSB7CiAgICAgICAgICBzdGFydCA9IG1hdGNoLmluZGV4OwogICAgICAgICAgZW5kID0gc3RhcnQgKyBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgICBpZiAoY3VyLmNoIDwgZW5kKWJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoIWFjdGlvbkFyZ3MuYmFja3RyYWNrICYmIChlbmQgPD0gY3VyLmNoKSlyZXR1cm47CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICB2YXIgYmFzZVN0ciA9IG1hdGNoWzJdIHx8IG1hdGNoWzRdCiAgICAgICAgICB2YXIgZGlnaXRzID0gbWF0Y2hbM10gfHwgbWF0Y2hbNV0KICAgICAgICAgIHZhciBpbmNyZW1lbnQgPSBhY3Rpb25BcmdzLmluY3JlYXNlID8gMSA6IC0xOwogICAgICAgICAgdmFyIGJhc2UgPSB7JzBiJzogMiwgJzAnOiA4LCAnJzogMTAsICcweCc6IDE2fVtiYXNlU3RyLnRvTG93ZXJDYXNlKCldOwogICAgICAgICAgdmFyIG51bWJlciA9IHBhcnNlSW50KG1hdGNoWzFdICsgZGlnaXRzLCBiYXNlKSArIChpbmNyZW1lbnQgKiBhY3Rpb25BcmdzLnJlcGVhdCk7CiAgICAgICAgICBudW1iZXJTdHIgPSBudW1iZXIudG9TdHJpbmcoYmFzZSk7CiAgICAgICAgICB2YXIgemVyb1BhZGRpbmcgPSBiYXNlU3RyID8gbmV3IEFycmF5KGRpZ2l0cy5sZW5ndGggLSBudW1iZXJTdHIubGVuZ3RoICsgMSArIG1hdGNoWzFdLmxlbmd0aCkuam9pbignMCcpIDogJycKICAgICAgICAgIGlmIChudW1iZXJTdHIuY2hhckF0KDApID09PSAnLScpIHsKICAgICAgICAgICAgbnVtYmVyU3RyID0gJy0nICsgYmFzZVN0ciArIHplcm9QYWRkaW5nICsgbnVtYmVyU3RyLnN1YnN0cigxKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG51bWJlclN0ciA9IGJhc2VTdHIgKyB6ZXJvUGFkZGluZyArIG51bWJlclN0cjsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBmcm9tID0gUG9zKGN1ci5saW5lLCBzdGFydCk7CiAgICAgICAgICB2YXIgdG8gPSBQb3MoY3VyLmxpbmUsIGVuZCk7CiAgICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobnVtYmVyU3RyLCBmcm9tLCB0byk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY20uc2V0Q3Vyc29yKFBvcyhjdXIubGluZSwgc3RhcnQgKyBudW1iZXJTdHIubGVuZ3RoIC0gMSkpOwogICAgICB9LAogICAgICByZXBlYXRMYXN0RWRpdDogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MsIHZpbSkgewogICAgICAgIHZhciBsYXN0RWRpdElucHV0U3RhdGUgPSB2aW0ubGFzdEVkaXRJbnB1dFN0YXRlOwogICAgICAgIGlmICghbGFzdEVkaXRJbnB1dFN0YXRlKSB7IHJldHVybjsgfQogICAgICAgIHZhciByZXBlYXQgPSBhY3Rpb25BcmdzLnJlcGVhdDsKICAgICAgICBpZiAocmVwZWF0ICYmIGFjdGlvbkFyZ3MucmVwZWF0SXNFeHBsaWNpdCkgewogICAgICAgICAgdmltLmxhc3RFZGl0SW5wdXRTdGF0ZS5yZXBlYXRPdmVycmlkZSA9IHJlcGVhdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwZWF0ID0gdmltLmxhc3RFZGl0SW5wdXRTdGF0ZS5yZXBlYXRPdmVycmlkZSB8fCByZXBlYXQ7CiAgICAgICAgfQogICAgICAgIHJlcGVhdExhc3RFZGl0KGNtLCB2aW0sIHJlcGVhdCwgZmFsc2UgLyoqIHJlcGVhdEZvckluc2VydCAqLyk7CiAgICAgIH0sCiAgICAgIGluZGVudDogZnVuY3Rpb24oY20sIGFjdGlvbkFyZ3MpIHsKICAgICAgICBjbS5pbmRlbnRMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUsIGFjdGlvbkFyZ3MuaW5kZW50UmlnaHQpOwogICAgICB9LAogICAgICBleGl0SW5zZXJ0TW9kZTogZXhpdEluc2VydE1vZGUKICAgIH07CgogICAgZnVuY3Rpb24gZGVmaW5lQWN0aW9uKG5hbWUsIGZuKSB7CiAgICAgIGFjdGlvbnNbbmFtZV0gPSBmbjsKICAgIH0KICAgIGZ1bmN0aW9uIGNsaXBDdXJzb3JUb0NvbnRlbnQoY20sIGN1ciwgaW5jbHVkZUxpbmVCcmVhaykgewogICAgICB2YXIgbGluZSA9IE1hdGgubWluKE1hdGgubWF4KGNtLmZpcnN0TGluZSgpLCBjdXIubGluZSksIGNtLmxhc3RMaW5lKCkgKTsKICAgICAgdmFyIG1heENoID0gbGluZUxlbmd0aChjbSwgbGluZSkgLSAxOwogICAgICBtYXhDaCA9IChpbmNsdWRlTGluZUJyZWFrKSA/IG1heENoICsgMSA6IG1heENoOwogICAgICB2YXIgY2ggPSBNYXRoLm1pbihNYXRoLm1heCgwLCBjdXIuY2gpLCBtYXhDaCk7CiAgICAgIHJldHVybiBQb3MobGluZSwgY2gpOwogICAgfQogICAgZnVuY3Rpb24gY29weUFyZ3MoYXJncykgewogICAgICB2YXIgcmV0ID0ge307CiAgICAgIGZvciAodmFyIHByb3AgaW4gYXJncykgewogICAgICAgIGlmIChhcmdzLmhhc093blByb3BlcnR5KHByb3ApKSB7CiAgICAgICAgICByZXRbcHJvcF0gPSBhcmdzW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmV0OwogICAgfQogICAgZnVuY3Rpb24gb2Zmc2V0Q3Vyc29yKGN1ciwgb2Zmc2V0TGluZSwgb2Zmc2V0Q2gpIHsKICAgICAgaWYgKHR5cGVvZiBvZmZzZXRMaW5lID09PSAnb2JqZWN0JykgewogICAgICAgIG9mZnNldENoID0gb2Zmc2V0TGluZS5jaDsKICAgICAgICBvZmZzZXRMaW5lID0gb2Zmc2V0TGluZS5saW5lOwogICAgICB9CiAgICAgIHJldHVybiBQb3MoY3VyLmxpbmUgKyBvZmZzZXRMaW5lLCBjdXIuY2ggKyBvZmZzZXRDaCk7CiAgICB9CiAgICBmdW5jdGlvbiBjb21tYW5kTWF0Y2hlcyhrZXlzLCBrZXlNYXAsIGNvbnRleHQsIGlucHV0U3RhdGUpIHsKICAgICAgdmFyIG1hdGNoLCBwYXJ0aWFsID0gW10sIGZ1bGwgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlNYXAubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgY29tbWFuZCA9IGtleU1hcFtpXTsKICAgICAgICBpZiAoY29udGV4dCA9PSAnaW5zZXJ0JyAmJiBjb21tYW5kLmNvbnRleHQgIT0gJ2luc2VydCcgfHwKICAgICAgICAgICAgY29tbWFuZC5jb250ZXh0ICYmIGNvbW1hbmQuY29udGV4dCAhPSBjb250ZXh0IHx8CiAgICAgICAgICAgIGlucHV0U3RhdGUub3BlcmF0b3IgJiYgY29tbWFuZC50eXBlID09ICdhY3Rpb24nIHx8CiAgICAgICAgICAgICEobWF0Y2ggPSBjb21tYW5kTWF0Y2goa2V5cywgY29tbWFuZC5rZXlzKSkpIHsgY29udGludWU7IH0KICAgICAgICBpZiAobWF0Y2ggPT0gJ3BhcnRpYWwnKSB7IHBhcnRpYWwucHVzaChjb21tYW5kKTsgfQogICAgICAgIGlmIChtYXRjaCA9PSAnZnVsbCcpIHsgZnVsbC5wdXNoKGNvbW1hbmQpOyB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBwYXJ0aWFsOiBwYXJ0aWFsLmxlbmd0aCAmJiBwYXJ0aWFsLAogICAgICAgIGZ1bGw6IGZ1bGwubGVuZ3RoICYmIGZ1bGwKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbW1hbmRNYXRjaChwcmVzc2VkLCBtYXBwZWQpIHsKICAgICAgaWYgKG1hcHBlZC5zbGljZSgtMTEpID09ICc8Y2hhcmFjdGVyPicpIHsKICAgICAgICB2YXIgcHJlZml4TGVuID0gbWFwcGVkLmxlbmd0aCAtIDExOwogICAgICAgIHZhciBwcmVzc2VkUHJlZml4ID0gcHJlc3NlZC5zbGljZSgwLCBwcmVmaXhMZW4pOwogICAgICAgIHZhciBtYXBwZWRQcmVmaXggPSBtYXBwZWQuc2xpY2UoMCwgcHJlZml4TGVuKTsKICAgICAgICByZXR1cm4gcHJlc3NlZFByZWZpeCA9PSBtYXBwZWRQcmVmaXggJiYgcHJlc3NlZC5sZW5ndGggPiBwcmVmaXhMZW4gPyAnZnVsbCcgOgogICAgICAgICAgICAgICBtYXBwZWRQcmVmaXguaW5kZXhPZihwcmVzc2VkUHJlZml4KSA9PSAwID8gJ3BhcnRpYWwnIDogZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHByZXNzZWQgPT0gbWFwcGVkID8gJ2Z1bGwnIDoKICAgICAgICAgICAgICAgbWFwcGVkLmluZGV4T2YocHJlc3NlZCkgPT0gMCA/ICdwYXJ0aWFsJyA6IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBsYXN0Q2hhcihrZXlzKSB7CiAgICAgIHZhciBtYXRjaCA9IC9eLiooPFtePl0rPikkLy5leGVjKGtleXMpOwogICAgICB2YXIgc2VsZWN0ZWRDaGFyYWN0ZXIgPSBtYXRjaCA/IG1hdGNoWzFdIDoga2V5cy5zbGljZSgtMSk7CiAgICAgIGlmIChzZWxlY3RlZENoYXJhY3Rlci5sZW5ndGggPiAxKXsKICAgICAgICBzd2l0Y2goc2VsZWN0ZWRDaGFyYWN0ZXIpewogICAgICAgICAgY2FzZSAnPENSPic6CiAgICAgICAgICAgIHNlbGVjdGVkQ2hhcmFjdGVyPSdcbic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnPFNwYWNlPic6CiAgICAgICAgICAgIHNlbGVjdGVkQ2hhcmFjdGVyPScgJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBzZWxlY3RlZENoYXJhY3Rlcj0nJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZWxlY3RlZENoYXJhY3RlcjsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcGVhdEZuKGNtLCBmbiwgcmVwZWF0KSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGVhdDsgaSsrKSB7CiAgICAgICAgICBmbihjbSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY29weUN1cnNvcihjdXIpIHsKICAgICAgcmV0dXJuIFBvcyhjdXIubGluZSwgY3VyLmNoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGN1cnNvckVxdWFsKGN1cjEsIGN1cjIpIHsKICAgICAgcmV0dXJuIGN1cjEuY2ggPT0gY3VyMi5jaCAmJiBjdXIxLmxpbmUgPT0gY3VyMi5saW5lOwogICAgfQogICAgZnVuY3Rpb24gY3Vyc29ySXNCZWZvcmUoY3VyMSwgY3VyMikgewogICAgICBpZiAoY3VyMS5saW5lIDwgY3VyMi5saW5lKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGN1cjEubGluZSA9PSBjdXIyLmxpbmUgJiYgY3VyMS5jaCA8IGN1cjIuY2gpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiBjdXJzb3JNaW4oY3VyMSwgY3VyMikgewogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKICAgICAgICBjdXIyID0gY3Vyc29yTWluLmFwcGx5KHVuZGVmaW5lZCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGN1cnNvcklzQmVmb3JlKGN1cjEsIGN1cjIpID8gY3VyMSA6IGN1cjI7CiAgICB9CiAgICBmdW5jdGlvbiBjdXJzb3JNYXgoY3VyMSwgY3VyMikgewogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHsKICAgICAgICBjdXIyID0gY3Vyc29yTWF4LmFwcGx5KHVuZGVmaW5lZCwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGN1cnNvcklzQmVmb3JlKGN1cjEsIGN1cjIpID8gY3VyMiA6IGN1cjE7CiAgICB9CiAgICBmdW5jdGlvbiBjdXJzb3JJc0JldHdlZW4oY3VyMSwgY3VyMiwgY3VyMykgewogICAgICB2YXIgY3VyMWJlZm9yZTIgPSBjdXJzb3JJc0JlZm9yZShjdXIxLCBjdXIyKTsKICAgICAgdmFyIGN1cjJiZWZvcmUzID0gY3Vyc29ySXNCZWZvcmUoY3VyMiwgY3VyMyk7CiAgICAgIHJldHVybiBjdXIxYmVmb3JlMiAmJiBjdXIyYmVmb3JlMzsKICAgIH0KICAgIGZ1bmN0aW9uIGxpbmVMZW5ndGgoY20sIGxpbmVOdW0pIHsKICAgICAgcmV0dXJuIGNtLmdldExpbmUobGluZU51bSkubGVuZ3RoOwogICAgfQogICAgZnVuY3Rpb24gdHJpbShzKSB7CiAgICAgIGlmIChzLnRyaW0pIHsKICAgICAgICByZXR1cm4gcy50cmltKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHMpIHsKICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKFsuPyorJFxbXF1cL1xcKCl7fXxcLV0pL2csICdcXCQxJyk7CiAgICB9CiAgICBmdW5jdGlvbiBleHRlbmRMaW5lVG9Db2x1bW4oY20sIGxpbmVOdW0sIGNvbHVtbikgewogICAgICB2YXIgZW5kQ2ggPSBsaW5lTGVuZ3RoKGNtLCBsaW5lTnVtKTsKICAgICAgdmFyIHNwYWNlcyA9IG5ldyBBcnJheShjb2x1bW4tZW5kQ2grMSkuam9pbignICcpOwogICAgICBjbS5zZXRDdXJzb3IoUG9zKGxpbmVOdW0sIGVuZENoKSk7CiAgICAgIGNtLnJlcGxhY2VSYW5nZShzcGFjZXMsIGNtLmdldEN1cnNvcigpKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlbGVjdEJsb2NrKGNtLCBzZWxlY3Rpb25FbmQpIHsKICAgICAgdmFyIHNlbGVjdGlvbnMgPSBbXSwgcmFuZ2VzID0gY20ubGlzdFNlbGVjdGlvbnMoKTsKICAgICAgdmFyIGhlYWQgPSBjb3B5Q3Vyc29yKGNtLmNsaXBQb3Moc2VsZWN0aW9uRW5kKSk7CiAgICAgIHZhciBpc0NsaXBwZWQgPSAhY3Vyc29yRXF1YWwoc2VsZWN0aW9uRW5kLCBoZWFkKTsKICAgICAgdmFyIGN1ckhlYWQgPSBjbS5nZXRDdXJzb3IoJ2hlYWQnKTsKICAgICAgdmFyIHByaW1JbmRleCA9IGdldEluZGV4KHJhbmdlcywgY3VySGVhZCk7CiAgICAgIHZhciB3YXNDbGlwcGVkID0gY3Vyc29yRXF1YWwocmFuZ2VzW3ByaW1JbmRleF0uaGVhZCwgcmFuZ2VzW3ByaW1JbmRleF0uYW5jaG9yKTsKICAgICAgdmFyIG1heCA9IHJhbmdlcy5sZW5ndGggLSAxOwogICAgICB2YXIgaW5kZXggPSBtYXggLSBwcmltSW5kZXggPiBwcmltSW5kZXggPyBtYXggOiAwOwogICAgICB2YXIgYmFzZSA9IHJhbmdlc1tpbmRleF0uYW5jaG9yOwoKICAgICAgdmFyIGZpcnN0TGluZSA9IE1hdGgubWluKGJhc2UubGluZSwgaGVhZC5saW5lKTsKICAgICAgdmFyIGxhc3RMaW5lID0gTWF0aC5tYXgoYmFzZS5saW5lLCBoZWFkLmxpbmUpOwogICAgICB2YXIgYmFzZUNoID0gYmFzZS5jaCwgaGVhZENoID0gaGVhZC5jaDsKCiAgICAgIHZhciBkaXIgPSByYW5nZXNbaW5kZXhdLmhlYWQuY2ggLSBiYXNlQ2g7CiAgICAgIHZhciBuZXdEaXIgPSBoZWFkQ2ggLSBiYXNlQ2g7CiAgICAgIGlmIChkaXIgPiAwICYmIG5ld0RpciA8PSAwKSB7CiAgICAgICAgYmFzZUNoKys7CiAgICAgICAgaWYgKCFpc0NsaXBwZWQpIHsgaGVhZENoLS07IH0KICAgICAgfSBlbHNlIGlmIChkaXIgPCAwICYmIG5ld0RpciA+PSAwKSB7CiAgICAgICAgYmFzZUNoLS07CiAgICAgICAgaWYgKCF3YXNDbGlwcGVkKSB7IGhlYWRDaCsrOyB9CiAgICAgIH0gZWxzZSBpZiAoZGlyIDwgMCAmJiBuZXdEaXIgPT0gLTEpIHsKICAgICAgICBiYXNlQ2gtLTsKICAgICAgICBoZWFkQ2grKzsKICAgICAgfQogICAgICBmb3IgKHZhciBsaW5lID0gZmlyc3RMaW5lOyBsaW5lIDw9IGxhc3RMaW5lOyBsaW5lKyspIHsKICAgICAgICB2YXIgcmFuZ2UgPSB7YW5jaG9yOiBuZXcgUG9zKGxpbmUsIGJhc2VDaCksIGhlYWQ6IG5ldyBQb3MobGluZSwgaGVhZENoKX07CiAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHJhbmdlKTsKICAgICAgfQogICAgICBjbS5zZXRTZWxlY3Rpb25zKHNlbGVjdGlvbnMpOwogICAgICBzZWxlY3Rpb25FbmQuY2ggPSBoZWFkQ2g7CiAgICAgIGJhc2UuY2ggPSBiYXNlQ2g7CiAgICAgIHJldHVybiBiYXNlOwogICAgfQogICAgZnVuY3Rpb24gc2VsZWN0Rm9ySW5zZXJ0KGNtLCBoZWFkLCBoZWlnaHQpIHsKICAgICAgdmFyIHNlbCA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CiAgICAgICAgdmFyIGxpbmVIZWFkID0gb2Zmc2V0Q3Vyc29yKGhlYWQsIGksIDApOwogICAgICAgIHNlbC5wdXNoKHthbmNob3I6IGxpbmVIZWFkLCBoZWFkOiBsaW5lSGVhZH0pOwogICAgICB9CiAgICAgIGNtLnNldFNlbGVjdGlvbnMoc2VsLCAwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldEluZGV4KHJhbmdlcywgY3Vyc29yLCBlbmQpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgYXRBbmNob3IgPSBlbmQgIT0gJ2hlYWQnICYmIGN1cnNvckVxdWFsKHJhbmdlc1tpXS5hbmNob3IsIGN1cnNvcik7CiAgICAgICAgdmFyIGF0SGVhZCA9IGVuZCAhPSAnYW5jaG9yJyAmJiBjdXJzb3JFcXVhbChyYW5nZXNbaV0uaGVhZCwgY3Vyc29yKTsKICAgICAgICBpZiAoYXRBbmNob3IgfHwgYXRIZWFkKSB7CiAgICAgICAgICByZXR1cm4gaTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRBcmVhUmFuZ2UoY20sIHZpbSkgewogICAgICB2YXIgbGFzdFNlbGVjdGlvbiA9IHZpbS5sYXN0U2VsZWN0aW9uOwogICAgICB2YXIgZ2V0Q3VycmVudFNlbGVjdGVkQXJlYVJhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSBjbS5saXN0U2VsZWN0aW9ucygpOwogICAgICAgIHZhciBzdGFydCA9ICBzZWxlY3Rpb25zWzBdOwogICAgICAgIHZhciBlbmQgPSBzZWxlY3Rpb25zW3NlbGVjdGlvbnMubGVuZ3RoLTFdOwogICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IGN1cnNvcklzQmVmb3JlKHN0YXJ0LmFuY2hvciwgc3RhcnQuaGVhZCkgPyBzdGFydC5hbmNob3IgOiBzdGFydC5oZWFkOwogICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSBjdXJzb3JJc0JlZm9yZShlbmQuYW5jaG9yLCBlbmQuaGVhZCkgPyBlbmQuaGVhZCA6IGVuZC5hbmNob3I7CiAgICAgICAgcmV0dXJuIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXTsKICAgICAgfTsKICAgICAgdmFyIGdldExhc3RTZWxlY3RlZEFyZWFSYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzZWxlY3Rpb25TdGFydCA9IGNtLmdldEN1cnNvcigpOwogICAgICAgIHZhciBzZWxlY3Rpb25FbmQgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICB2YXIgYmxvY2sgPSBsYXN0U2VsZWN0aW9uLnZpc3VhbEJsb2NrOwogICAgICAgIGlmIChibG9jaykgewogICAgICAgICAgdmFyIHdpZHRoID0gYmxvY2sud2lkdGg7CiAgICAgICAgICB2YXIgaGVpZ2h0ID0gYmxvY2suaGVpZ2h0OwogICAgICAgICAgc2VsZWN0aW9uRW5kID0gUG9zKHNlbGVjdGlvblN0YXJ0LmxpbmUgKyBoZWlnaHQsIHNlbGVjdGlvblN0YXJ0LmNoICsgd2lkdGgpOwogICAgICAgICAgdmFyIHNlbGVjdGlvbnMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGkgPSBzZWxlY3Rpb25TdGFydC5saW5lOyBpIDwgc2VsZWN0aW9uRW5kLmxpbmU7IGkrKykgewogICAgICAgICAgICB2YXIgYW5jaG9yID0gUG9zKGksIHNlbGVjdGlvblN0YXJ0LmNoKTsKICAgICAgICAgICAgdmFyIGhlYWQgPSBQb3MoaSwgc2VsZWN0aW9uRW5kLmNoKTsKICAgICAgICAgICAgdmFyIHJhbmdlID0ge2FuY2hvcjogYW5jaG9yLCBoZWFkOiBoZWFkfTsKICAgICAgICAgICAgc2VsZWN0aW9ucy5wdXNoKHJhbmdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGNtLnNldFNlbGVjdGlvbnMoc2VsZWN0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBzdGFydCA9IGxhc3RTZWxlY3Rpb24uYW5jaG9yTWFyay5maW5kKCk7CiAgICAgICAgICB2YXIgZW5kID0gbGFzdFNlbGVjdGlvbi5oZWFkTWFyay5maW5kKCk7CiAgICAgICAgICB2YXIgbGluZSA9IGVuZC5saW5lIC0gc3RhcnQubGluZTsKICAgICAgICAgIHZhciBjaCA9IGVuZC5jaCAtIHN0YXJ0LmNoOwogICAgICAgICAgc2VsZWN0aW9uRW5kID0ge2xpbmU6IHNlbGVjdGlvbkVuZC5saW5lICsgbGluZSwgY2g6IGxpbmUgPyBzZWxlY3Rpb25FbmQuY2ggOiBjaCArIHNlbGVjdGlvbkVuZC5jaH07CiAgICAgICAgICBpZiAobGFzdFNlbGVjdGlvbi52aXN1YWxMaW5lKSB7CiAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gUG9zKHNlbGVjdGlvblN0YXJ0LmxpbmUsIDApOwogICAgICAgICAgICBzZWxlY3Rpb25FbmQgPSBQb3Moc2VsZWN0aW9uRW5kLmxpbmUsIGxpbmVMZW5ndGgoY20sIHNlbGVjdGlvbkVuZC5saW5lKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjbS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBbc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF07CiAgICAgIH07CiAgICAgIGlmICghdmltLnZpc3VhbE1vZGUpIHsKICAgICAgICByZXR1cm4gZ2V0TGFzdFNlbGVjdGVkQXJlYVJhbmdlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRTZWxlY3RlZEFyZWFSYW5nZSgpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVMYXN0U2VsZWN0aW9uKGNtLCB2aW0pIHsKICAgICAgdmFyIGFuY2hvciA9IHZpbS5zZWwuYW5jaG9yOwogICAgICB2YXIgaGVhZCA9IHZpbS5zZWwuaGVhZDsKICAgICAgaWYgKHZpbS5sYXN0UGFzdGVkVGV4dCkgewogICAgICAgIGhlYWQgPSBjbS5wb3NGcm9tSW5kZXgoY20uaW5kZXhGcm9tUG9zKGFuY2hvcikgKyB2aW0ubGFzdFBhc3RlZFRleHQubGVuZ3RoKTsKICAgICAgICB2aW0ubGFzdFBhc3RlZFRleHQgPSBudWxsOwogICAgICB9CiAgICAgIHZpbS5sYXN0U2VsZWN0aW9uID0geydhbmNob3JNYXJrJzogY20uc2V0Qm9va21hcmsoYW5jaG9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYWRNYXJrJzogY20uc2V0Qm9va21hcmsoaGVhZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmNob3InOiBjb3B5Q3Vyc29yKGFuY2hvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkJzogY29weUN1cnNvcihoZWFkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Zpc3VhbE1vZGUnOiB2aW0udmlzdWFsTW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Zpc3VhbExpbmUnOiB2aW0udmlzdWFsTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Zpc3VhbEJsb2NrJzogdmltLnZpc3VhbEJsb2NrfTsKICAgIH0KICAgIGZ1bmN0aW9uIGV4cGFuZFNlbGVjdGlvbihjbSwgc3RhcnQsIGVuZCkgewogICAgICB2YXIgc2VsID0gY20uc3RhdGUudmltLnNlbDsKICAgICAgdmFyIGhlYWQgPSBzZWwuaGVhZDsKICAgICAgdmFyIGFuY2hvciA9IHNlbC5hbmNob3I7CiAgICAgIHZhciB0bXA7CiAgICAgIGlmIChjdXJzb3JJc0JlZm9yZShlbmQsIHN0YXJ0KSkgewogICAgICAgIHRtcCA9IGVuZDsKICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBzdGFydCA9IHRtcDsKICAgICAgfQogICAgICBpZiAoY3Vyc29ySXNCZWZvcmUoaGVhZCwgYW5jaG9yKSkgewogICAgICAgIGhlYWQgPSBjdXJzb3JNaW4oc3RhcnQsIGhlYWQpOwogICAgICAgIGFuY2hvciA9IGN1cnNvck1heChhbmNob3IsIGVuZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYW5jaG9yID0gY3Vyc29yTWluKHN0YXJ0LCBhbmNob3IpOwogICAgICAgIGhlYWQgPSBjdXJzb3JNYXgoaGVhZCwgZW5kKTsKICAgICAgICBoZWFkID0gb2Zmc2V0Q3Vyc29yKGhlYWQsIDAsIC0xKTsKICAgICAgICBpZiAoaGVhZC5jaCA9PSAtMSAmJiBoZWFkLmxpbmUgIT0gY20uZmlyc3RMaW5lKCkpIHsKICAgICAgICAgIGhlYWQgPSBQb3MoaGVhZC5saW5lIC0gMSwgbGluZUxlbmd0aChjbSwgaGVhZC5saW5lIC0gMSkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gW2FuY2hvciwgaGVhZF07CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVDbVNlbGVjdGlvbihjbSwgc2VsLCBtb2RlKSB7CiAgICAgIHZhciB2aW0gPSBjbS5zdGF0ZS52aW07CiAgICAgIHNlbCA9IHNlbCB8fCB2aW0uc2VsOwogICAgICB2YXIgbW9kZSA9IG1vZGUgfHwKICAgICAgICB2aW0udmlzdWFsTGluZSA/ICdsaW5lJyA6IHZpbS52aXN1YWxCbG9jayA/ICdibG9jaycgOiAnY2hhcic7CiAgICAgIHZhciBjbVNlbCA9IG1ha2VDbVNlbGVjdGlvbihjbSwgc2VsLCBtb2RlKTsKICAgICAgY20uc2V0U2VsZWN0aW9ucyhjbVNlbC5yYW5nZXMsIGNtU2VsLnByaW1hcnkpOwogICAgICB1cGRhdGVGYWtlQ3Vyc29yKGNtKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1ha2VDbVNlbGVjdGlvbihjbSwgc2VsLCBtb2RlLCBleGNsdXNpdmUpIHsKICAgICAgdmFyIGhlYWQgPSBjb3B5Q3Vyc29yKHNlbC5oZWFkKTsKICAgICAgdmFyIGFuY2hvciA9IGNvcHlDdXJzb3Ioc2VsLmFuY2hvcik7CiAgICAgIGlmIChtb2RlID09ICdjaGFyJykgewogICAgICAgIHZhciBoZWFkT2Zmc2V0ID0gIWV4Y2x1c2l2ZSAmJiAhY3Vyc29ySXNCZWZvcmUoc2VsLmhlYWQsIHNlbC5hbmNob3IpID8gMSA6IDA7CiAgICAgICAgdmFyIGFuY2hvck9mZnNldCA9IGN1cnNvcklzQmVmb3JlKHNlbC5oZWFkLCBzZWwuYW5jaG9yKSA/IDEgOiAwOwogICAgICAgIGhlYWQgPSBvZmZzZXRDdXJzb3Ioc2VsLmhlYWQsIDAsIGhlYWRPZmZzZXQpOwogICAgICAgIGFuY2hvciA9IG9mZnNldEN1cnNvcihzZWwuYW5jaG9yLCAwLCBhbmNob3JPZmZzZXQpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICByYW5nZXM6IFt7YW5jaG9yOiBhbmNob3IsIGhlYWQ6IGhlYWR9XSwKICAgICAgICAgIHByaW1hcnk6IDAKICAgICAgICB9OwogICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gJ2xpbmUnKSB7CiAgICAgICAgaWYgKCFjdXJzb3JJc0JlZm9yZShzZWwuaGVhZCwgc2VsLmFuY2hvcikpIHsKICAgICAgICAgIGFuY2hvci5jaCA9IDA7CgogICAgICAgICAgdmFyIGxhc3RMaW5lID0gY20ubGFzdExpbmUoKTsKICAgICAgICAgIGlmIChoZWFkLmxpbmUgPiBsYXN0TGluZSkgewogICAgICAgICAgICBoZWFkLmxpbmUgPSBsYXN0TGluZTsKICAgICAgICAgIH0KICAgICAgICAgIGhlYWQuY2ggPSBsaW5lTGVuZ3RoKGNtLCBoZWFkLmxpbmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoZWFkLmNoID0gMDsKICAgICAgICAgIGFuY2hvci5jaCA9IGxpbmVMZW5ndGgoY20sIGFuY2hvci5saW5lKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJhbmdlczogW3thbmNob3I6IGFuY2hvciwgaGVhZDogaGVhZH1dLAogICAgICAgICAgcHJpbWFyeTogMAogICAgICAgIH07CiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSAnYmxvY2snKSB7CiAgICAgICAgdmFyIHRvcCA9IE1hdGgubWluKGFuY2hvci5saW5lLCBoZWFkLmxpbmUpLAogICAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4oYW5jaG9yLmNoLCBoZWFkLmNoKSwKICAgICAgICAgICAgYm90dG9tID0gTWF0aC5tYXgoYW5jaG9yLmxpbmUsIGhlYWQubGluZSksCiAgICAgICAgICAgIHJpZ2h0ID0gTWF0aC5tYXgoYW5jaG9yLmNoLCBoZWFkLmNoKSArIDE7CiAgICAgICAgdmFyIGhlaWdodCA9IGJvdHRvbSAtIHRvcCArIDE7CiAgICAgICAgdmFyIHByaW1hcnkgPSBoZWFkLmxpbmUgPT0gdG9wID8gMCA6IGhlaWdodCAtIDE7CiAgICAgICAgdmFyIHJhbmdlcyA9IFtdOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKICAgICAgICAgIHJhbmdlcy5wdXNoKHsKICAgICAgICAgICAgYW5jaG9yOiBQb3ModG9wICsgaSwgbGVmdCksCiAgICAgICAgICAgIGhlYWQ6IFBvcyh0b3AgKyBpLCByaWdodCkKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAgcmFuZ2VzOiByYW5nZXMsCiAgICAgICAgICBwcmltYXJ5OiBwcmltYXJ5CiAgICAgICAgfTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZ2V0SGVhZChjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCdoZWFkJyk7CiAgICAgIGlmIChjbS5nZXRTZWxlY3Rpb24oKS5sZW5ndGggPT0gMSkgewogICAgICAgIGN1ciA9IGN1cnNvck1pbihjdXIsIGNtLmdldEN1cnNvcignYW5jaG9yJykpOwogICAgICB9CiAgICAgIHJldHVybiBjdXI7CiAgICB9CiAgICBmdW5jdGlvbiBleGl0VmlzdWFsTW9kZShjbSwgbW92ZUhlYWQpIHsKICAgICAgdmFyIHZpbSA9IGNtLnN0YXRlLnZpbTsKICAgICAgaWYgKG1vdmVIZWFkICE9PSBmYWxzZSkgewogICAgICAgIGNtLnNldEN1cnNvcihjbGlwQ3Vyc29yVG9Db250ZW50KGNtLCB2aW0uc2VsLmhlYWQpKTsKICAgICAgfQogICAgICB1cGRhdGVMYXN0U2VsZWN0aW9uKGNtLCB2aW0pOwogICAgICB2aW0udmlzdWFsTW9kZSA9IGZhbHNlOwogICAgICB2aW0udmlzdWFsTGluZSA9IGZhbHNlOwogICAgICB2aW0udmlzdWFsQmxvY2sgPSBmYWxzZTsKICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICJ2aW0tbW9kZS1jaGFuZ2UiLCB7bW9kZTogIm5vcm1hbCJ9KTsKICAgICAgaWYgKHZpbS5mYWtlQ3Vyc29yKSB7CiAgICAgICAgdmltLmZha2VDdXJzb3IuY2xlYXIoKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gY2xpcFRvTGluZShjbSwgY3VyU3RhcnQsIGN1ckVuZCkgewogICAgICB2YXIgc2VsZWN0aW9uID0gY20uZ2V0UmFuZ2UoY3VyU3RhcnQsIGN1ckVuZCk7CiAgICAgIGlmICgvXG5ccyokLy50ZXN0KHNlbGVjdGlvbikpIHsKICAgICAgICB2YXIgbGluZXMgPSBzZWxlY3Rpb24uc3BsaXQoJ1xuJyk7CiAgICAgICAgbGluZXMucG9wKCk7CiAgICAgICAgdmFyIGxpbmU7CiAgICAgICAgZm9yICh2YXIgbGluZSA9IGxpbmVzLnBvcCgpOyBsaW5lcy5sZW5ndGggPiAwICYmIGxpbmUgJiYgaXNXaGl0ZVNwYWNlU3RyaW5nKGxpbmUpOyBsaW5lID0gbGluZXMucG9wKCkpIHsKICAgICAgICAgIGN1ckVuZC5saW5lLS07CiAgICAgICAgICBjdXJFbmQuY2ggPSAwOwogICAgICAgIH0KICAgICAgICBpZiAobGluZSkgewogICAgICAgICAgY3VyRW5kLmxpbmUtLTsKICAgICAgICAgIGN1ckVuZC5jaCA9IGxpbmVMZW5ndGgoY20sIGN1ckVuZC5saW5lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY3VyRW5kLmNoID0gMDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGV4cGFuZFNlbGVjdGlvblRvTGluZShfY20sIGN1clN0YXJ0LCBjdXJFbmQpIHsKICAgICAgY3VyU3RhcnQuY2ggPSAwOwogICAgICBjdXJFbmQuY2ggPSAwOwogICAgICBjdXJFbmQubGluZSsrOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbmRGaXJzdE5vbldoaXRlU3BhY2VDaGFyYWN0ZXIodGV4dCkgewogICAgICBpZiAoIXRleHQpIHsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICB2YXIgZmlyc3ROb25XUyA9IHRleHQuc2VhcmNoKC9cUy8pOwogICAgICByZXR1cm4gZmlyc3ROb25XUyA9PSAtMSA/IHRleHQubGVuZ3RoIDogZmlyc3ROb25XUzsKICAgIH0KCiAgICBmdW5jdGlvbiBleHBhbmRXb3JkVW5kZXJDdXJzb3IoY20sIGluY2x1c2l2ZSwgX2ZvcndhcmQsIGJpZ1dvcmQsIG5vU3ltYm9sKSB7CiAgICAgIHZhciBjdXIgPSBnZXRIZWFkKGNtKTsKICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGN1ci5saW5lKTsKICAgICAgdmFyIGlkeCA9IGN1ci5jaDsKICAgICAgdmFyIHRlc3QgPSBub1N5bWJvbCA/IHdvcmRDaGFyVGVzdFswXSA6IGJpZ1dvcmRDaGFyVGVzdCBbMF07CiAgICAgIHdoaWxlICghdGVzdChsaW5lLmNoYXJBdChpZHgpKSkgewogICAgICAgIGlkeCsrOwogICAgICAgIGlmIChpZHggPj0gbGluZS5sZW5ndGgpIHsgcmV0dXJuIG51bGw7IH0KICAgICAgfQoKICAgICAgaWYgKGJpZ1dvcmQpIHsKICAgICAgICB0ZXN0ID0gYmlnV29yZENoYXJUZXN0WzBdOwogICAgICB9IGVsc2UgewogICAgICAgIHRlc3QgPSB3b3JkQ2hhclRlc3RbMF07CiAgICAgICAgaWYgKCF0ZXN0KGxpbmUuY2hhckF0KGlkeCkpKSB7CiAgICAgICAgICB0ZXN0ID0gd29yZENoYXJUZXN0WzFdOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGVuZCA9IGlkeCwgc3RhcnQgPSBpZHg7CiAgICAgIHdoaWxlICh0ZXN0KGxpbmUuY2hhckF0KGVuZCkpICYmIGVuZCA8IGxpbmUubGVuZ3RoKSB7IGVuZCsrOyB9CiAgICAgIHdoaWxlICh0ZXN0KGxpbmUuY2hhckF0KHN0YXJ0KSkgJiYgc3RhcnQgPj0gMCkgeyBzdGFydC0tOyB9CiAgICAgIHN0YXJ0Kys7CgogICAgICBpZiAoaW5jbHVzaXZlKSB7CiAgICAgICAgdmFyIHdvcmRFbmQgPSBlbmQ7CiAgICAgICAgd2hpbGUgKC9ccy8udGVzdChsaW5lLmNoYXJBdChlbmQpKSAmJiBlbmQgPCBsaW5lLmxlbmd0aCkgeyBlbmQrKzsgfQogICAgICAgIGlmICh3b3JkRW5kID09IGVuZCkgewogICAgICAgICAgdmFyIHdvcmRTdGFydCA9IHN0YXJ0OwogICAgICAgICAgd2hpbGUgKC9ccy8udGVzdChsaW5lLmNoYXJBdChzdGFydCAtIDEpKSAmJiBzdGFydCA+IDApIHsgc3RhcnQtLTsgfQogICAgICAgICAgaWYgKCFzdGFydCkgeyBzdGFydCA9IHdvcmRTdGFydDsgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4geyBzdGFydDogUG9zKGN1ci5saW5lLCBzdGFydCksIGVuZDogUG9zKGN1ci5saW5lLCBlbmQpIH07CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3JkSnVtcFBvc2l0aW9uKGNtLCBvbGRDdXIsIG5ld0N1cikgewogICAgICBpZiAoIWN1cnNvckVxdWFsKG9sZEN1ciwgbmV3Q3VyKSkgewogICAgICAgIHZpbUdsb2JhbFN0YXRlLmp1bXBMaXN0LmFkZChjbSwgb2xkQ3VyLCBuZXdDdXIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcmVjb3JkTGFzdENoYXJhY3RlclNlYXJjaChpbmNyZW1lbnQsIGFyZ3MpIHsKICAgICAgICB2aW1HbG9iYWxTdGF0ZS5sYXN0Q2hhcmFjdGVyU2VhcmNoLmluY3JlbWVudCA9IGluY3JlbWVudDsKICAgICAgICB2aW1HbG9iYWxTdGF0ZS5sYXN0Q2hhcmFjdGVyU2VhcmNoLmZvcndhcmQgPSBhcmdzLmZvcndhcmQ7CiAgICAgICAgdmltR2xvYmFsU3RhdGUubGFzdENoYXJhY3RlclNlYXJjaC5zZWxlY3RlZENoYXJhY3RlciA9IGFyZ3Muc2VsZWN0ZWRDaGFyYWN0ZXI7CiAgICB9CgogICAgdmFyIHN5bWJvbFRvTW9kZSA9IHsKICAgICAgICAnKCc6ICdicmFja2V0JywgJyknOiAnYnJhY2tldCcsICd7JzogJ2JyYWNrZXQnLCAnfSc6ICdicmFja2V0JywKICAgICAgICAnWyc6ICdzZWN0aW9uJywgJ10nOiAnc2VjdGlvbicsCiAgICAgICAgJyonOiAnY29tbWVudCcsICcvJzogJ2NvbW1lbnQnLAogICAgICAgICdtJzogJ21ldGhvZCcsICdNJzogJ21ldGhvZCcsCiAgICAgICAgJyMnOiAncHJlcHJvY2VzcycKICAgIH07CiAgICB2YXIgZmluZFN5bWJvbE1vZGVzID0gewogICAgICBicmFja2V0OiB7CiAgICAgICAgaXNDb21wbGV0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICAgIGlmIChzdGF0ZS5uZXh0Q2ggPT09IHN0YXRlLnN5bWIpIHsKICAgICAgICAgICAgc3RhdGUuZGVwdGgrKzsKICAgICAgICAgICAgaWYgKHN0YXRlLmRlcHRoID49IDEpcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLm5leHRDaCA9PT0gc3RhdGUucmV2ZXJzZVN5bWIpIHsKICAgICAgICAgICAgc3RhdGUuZGVwdGgtLTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNlY3Rpb246IHsKICAgICAgICBpbml0OiBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgICAgc3RhdGUuY3VyTW92ZVRocm91Z2ggPSB0cnVlOwogICAgICAgICAgc3RhdGUuc3ltYiA9IChzdGF0ZS5mb3J3YXJkID8gJ10nIDogJ1snKSA9PT0gc3RhdGUuc3ltYiA/ICd7JyA6ICd9JzsKICAgICAgICB9LAogICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICByZXR1cm4gc3RhdGUuaW5kZXggPT09IDAgJiYgc3RhdGUubmV4dENoID09PSBzdGF0ZS5zeW1iOwogICAgICAgIH0KICAgICAgfSwKICAgICAgY29tbWVudDogewogICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICB2YXIgZm91bmQgPSBzdGF0ZS5sYXN0Q2ggPT09ICcqJyAmJiBzdGF0ZS5uZXh0Q2ggPT09ICcvJzsKICAgICAgICAgIHN0YXRlLmxhc3RDaCA9IHN0YXRlLm5leHRDaDsKICAgICAgICAgIHJldHVybiBmb3VuZDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1ldGhvZDogewogICAgICAgIGluaXQ6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICBzdGF0ZS5zeW1iID0gKHN0YXRlLnN5bWIgPT09ICdtJyA/ICd7JyA6ICd9Jyk7CiAgICAgICAgICBzdGF0ZS5yZXZlcnNlU3ltYiA9IHN0YXRlLnN5bWIgPT09ICd7JyA/ICd9JyA6ICd7JzsKICAgICAgICB9LAogICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICBpZiAoc3RhdGUubmV4dENoID09PSBzdGF0ZS5zeW1iKXJldHVybiB0cnVlOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJlcHJvY2VzczogewogICAgICAgIGluaXQ6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgICBzdGF0ZS5pbmRleCA9IDA7CiAgICAgICAgfSwKICAgICAgICBpc0NvbXBsZXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgICAgaWYgKHN0YXRlLm5leHRDaCA9PT0gJyMnKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHN0YXRlLmxpbmVUZXh0Lm1hdGNoKC8jKFx3KykvKVsxXTsKICAgICAgICAgICAgaWYgKHRva2VuID09PSAnZW5kaWYnKSB7CiAgICAgICAgICAgICAgaWYgKHN0YXRlLmZvcndhcmQgJiYgc3RhdGUuZGVwdGggPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzdGF0ZS5kZXB0aCsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnaWYnKSB7CiAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5mb3J3YXJkICYmIHN0YXRlLmRlcHRoID09PSAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3RhdGUuZGVwdGgtLTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gPT09ICdlbHNlJyAmJiBzdGF0ZS5kZXB0aCA9PT0gMClyZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBmaW5kU3ltYm9sKGNtLCByZXBlYXQsIGZvcndhcmQsIHN5bWIpIHsKICAgICAgdmFyIGN1ciA9IGNvcHlDdXJzb3IoY20uZ2V0Q3Vyc29yKCkpOwogICAgICB2YXIgaW5jcmVtZW50ID0gZm9yd2FyZCA/IDEgOiAtMTsKICAgICAgdmFyIGVuZExpbmUgPSBmb3J3YXJkID8gY20ubGluZUNvdW50KCkgOiAtMTsKICAgICAgdmFyIGN1ckNoID0gY3VyLmNoOwogICAgICB2YXIgbGluZSA9IGN1ci5saW5lOwogICAgICB2YXIgbGluZVRleHQgPSBjbS5nZXRMaW5lKGxpbmUpOwogICAgICB2YXIgc3RhdGUgPSB7CiAgICAgICAgbGluZVRleHQ6IGxpbmVUZXh0LAogICAgICAgIG5leHRDaDogbGluZVRleHQuY2hhckF0KGN1ckNoKSwKICAgICAgICBsYXN0Q2g6IG51bGwsCiAgICAgICAgaW5kZXg6IGN1ckNoLAogICAgICAgIHN5bWI6IHN5bWIsCiAgICAgICAgcmV2ZXJzZVN5bWI6IChmb3J3YXJkID8gIHsgJyknOiAnKCcsICd9JzogJ3snIH0gOiB7ICcoJzogJyknLCAneyc6ICd9JyB9KVtzeW1iXSwKICAgICAgICBmb3J3YXJkOiBmb3J3YXJkLAogICAgICAgIGRlcHRoOiAwLAogICAgICAgIGN1ck1vdmVUaHJvdWdoOiBmYWxzZQogICAgICB9OwogICAgICB2YXIgbW9kZSA9IHN5bWJvbFRvTW9kZVtzeW1iXTsKICAgICAgaWYgKCFtb2RlKXJldHVybiBjdXI7CiAgICAgIHZhciBpbml0ID0gZmluZFN5bWJvbE1vZGVzW21vZGVdLmluaXQ7CiAgICAgIHZhciBpc0NvbXBsZXRlID0gZmluZFN5bWJvbE1vZGVzW21vZGVdLmlzQ29tcGxldGU7CiAgICAgIGlmIChpbml0KSB7IGluaXQoc3RhdGUpOyB9CiAgICAgIHdoaWxlIChsaW5lICE9PSBlbmRMaW5lICYmIHJlcGVhdCkgewogICAgICAgIHN0YXRlLmluZGV4ICs9IGluY3JlbWVudDsKICAgICAgICBzdGF0ZS5uZXh0Q2ggPSBzdGF0ZS5saW5lVGV4dC5jaGFyQXQoc3RhdGUuaW5kZXgpOwogICAgICAgIGlmICghc3RhdGUubmV4dENoKSB7CiAgICAgICAgICBsaW5lICs9IGluY3JlbWVudDsKICAgICAgICAgIHN0YXRlLmxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKSB8fCAnJzsKICAgICAgICAgIGlmIChpbmNyZW1lbnQgPiAwKSB7CiAgICAgICAgICAgIHN0YXRlLmluZGV4ID0gMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBsaW5lTGVuID0gc3RhdGUubGluZVRleHQubGVuZ3RoOwogICAgICAgICAgICBzdGF0ZS5pbmRleCA9IChsaW5lTGVuID4gMCkgPyAobGluZUxlbi0xKSA6IDA7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZS5uZXh0Q2ggPSBzdGF0ZS5saW5lVGV4dC5jaGFyQXQoc3RhdGUuaW5kZXgpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHsKICAgICAgICAgIGN1ci5saW5lID0gbGluZTsKICAgICAgICAgIGN1ci5jaCA9IHN0YXRlLmluZGV4OwogICAgICAgICAgcmVwZWF0LS07CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZS5uZXh0Q2ggfHwgc3RhdGUuY3VyTW92ZVRocm91Z2gpIHsKICAgICAgICByZXR1cm4gUG9zKGxpbmUsIHN0YXRlLmluZGV4KTsKICAgICAgfQogICAgICByZXR1cm4gY3VyOwogICAgfQogICAgZnVuY3Rpb24gZmluZFdvcmQoY20sIGN1ciwgZm9yd2FyZCwgYmlnV29yZCwgZW1wdHlMaW5lSXNXb3JkKSB7CiAgICAgIHZhciBsaW5lTnVtID0gY3VyLmxpbmU7CiAgICAgIHZhciBwb3MgPSBjdXIuY2g7CiAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShsaW5lTnVtKTsKICAgICAgdmFyIGRpciA9IGZvcndhcmQgPyAxIDogLTE7CiAgICAgIHZhciBjaGFyVGVzdHMgPSBiaWdXb3JkID8gYmlnV29yZENoYXJUZXN0OiB3b3JkQ2hhclRlc3Q7CgogICAgICBpZiAoZW1wdHlMaW5lSXNXb3JkICYmIGxpbmUgPT0gJycpIHsKICAgICAgICBsaW5lTnVtICs9IGRpcjsKICAgICAgICBsaW5lID0gY20uZ2V0TGluZShsaW5lTnVtKTsKICAgICAgICBpZiAoIWlzTGluZShjbSwgbGluZU51bSkpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBwb3MgPSAoZm9yd2FyZCkgPyAwIDogbGluZS5sZW5ndGg7CiAgICAgIH0KCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaWYgKGVtcHR5TGluZUlzV29yZCAmJiBsaW5lID09ICcnKSB7CiAgICAgICAgICByZXR1cm4geyBmcm9tOiAwLCB0bzogMCwgbGluZTogbGluZU51bSB9OwogICAgICAgIH0KICAgICAgICB2YXIgc3RvcCA9IChkaXIgPiAwKSA/IGxpbmUubGVuZ3RoIDogLTE7CiAgICAgICAgdmFyIHdvcmRTdGFydCA9IHN0b3AsIHdvcmRFbmQgPSBzdG9wOwogICAgICAgIHdoaWxlIChwb3MgIT0gc3RvcCkgewogICAgICAgICAgdmFyIGZvdW5kV29yZCA9IGZhbHNlOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFyVGVzdHMubGVuZ3RoICYmICFmb3VuZFdvcmQ7ICsraSkgewogICAgICAgICAgICBpZiAoY2hhclRlc3RzW2ldKGxpbmUuY2hhckF0KHBvcykpKSB7CiAgICAgICAgICAgICAgd29yZFN0YXJ0ID0gcG9zOwogICAgICAgICAgICAgIHdoaWxlIChwb3MgIT0gc3RvcCAmJiBjaGFyVGVzdHNbaV0obGluZS5jaGFyQXQocG9zKSkpIHsKICAgICAgICAgICAgICAgIHBvcyArPSBkaXI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHdvcmRFbmQgPSBwb3M7CiAgICAgICAgICAgICAgZm91bmRXb3JkID0gd29yZFN0YXJ0ICE9IHdvcmRFbmQ7CiAgICAgICAgICAgICAgaWYgKHdvcmRTdGFydCA9PSBjdXIuY2ggJiYgbGluZU51bSA9PSBjdXIubGluZSAmJgogICAgICAgICAgICAgICAgICB3b3JkRW5kID09IHdvcmRTdGFydCArIGRpcikgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgIGZyb206IE1hdGgubWluKHdvcmRTdGFydCwgd29yZEVuZCArIDEpLAogICAgICAgICAgICAgICAgICB0bzogTWF0aC5tYXgod29yZFN0YXJ0LCB3b3JkRW5kKSwKICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bSB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFmb3VuZFdvcmQpIHsKICAgICAgICAgICAgcG9zICs9IGRpcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGluZU51bSArPSBkaXI7CiAgICAgICAgaWYgKCFpc0xpbmUoY20sIGxpbmVOdW0pKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgbGluZSA9IGNtLmdldExpbmUobGluZU51bSk7CiAgICAgICAgcG9zID0gKGRpciA+IDApID8gMCA6IGxpbmUubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBtb3ZlVG9Xb3JkKGNtLCBjdXIsIHJlcGVhdCwgZm9yd2FyZCwgd29yZEVuZCwgYmlnV29yZCkgewogICAgICB2YXIgY3VyU3RhcnQgPSBjb3B5Q3Vyc29yKGN1cik7CiAgICAgIHZhciB3b3JkcyA9IFtdOwogICAgICBpZiAoZm9yd2FyZCAmJiAhd29yZEVuZCB8fCAhZm9yd2FyZCAmJiB3b3JkRW5kKSB7CiAgICAgICAgcmVwZWF0Kys7CiAgICAgIH0KICAgICAgdmFyIGVtcHR5TGluZUlzV29yZCA9ICEoZm9yd2FyZCAmJiB3b3JkRW5kKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykgewogICAgICAgIHZhciB3b3JkID0gZmluZFdvcmQoY20sIGN1ciwgZm9yd2FyZCwgYmlnV29yZCwgZW1wdHlMaW5lSXNXb3JkKTsKICAgICAgICBpZiAoIXdvcmQpIHsKICAgICAgICAgIHZhciBlb2RDaCA9IGxpbmVMZW5ndGgoY20sIGNtLmxhc3RMaW5lKCkpOwogICAgICAgICAgd29yZHMucHVzaChmb3J3YXJkCiAgICAgICAgICAgICAgPyB7bGluZTogY20ubGFzdExpbmUoKSwgZnJvbTogZW9kQ2gsIHRvOiBlb2RDaH0KICAgICAgICAgICAgICA6IHtsaW5lOiAwLCBmcm9tOiAwLCB0bzogMH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHdvcmRzLnB1c2god29yZCk7CiAgICAgICAgY3VyID0gUG9zKHdvcmQubGluZSwgZm9yd2FyZCA/ICh3b3JkLnRvIC0gMSkgOiB3b3JkLmZyb20pOwogICAgICB9CiAgICAgIHZhciBzaG9ydENpcmN1aXQgPSB3b3Jkcy5sZW5ndGggIT0gcmVwZWF0OwogICAgICB2YXIgZmlyc3RXb3JkID0gd29yZHNbMF07CiAgICAgIHZhciBsYXN0V29yZCA9IHdvcmRzLnBvcCgpOwogICAgICBpZiAoZm9yd2FyZCAmJiAhd29yZEVuZCkgewogICAgICAgIGlmICghc2hvcnRDaXJjdWl0ICYmIChmaXJzdFdvcmQuZnJvbSAhPSBjdXJTdGFydC5jaCB8fCBmaXJzdFdvcmQubGluZSAhPSBjdXJTdGFydC5saW5lKSkgewogICAgICAgICAgbGFzdFdvcmQgPSB3b3Jkcy5wb3AoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFBvcyhsYXN0V29yZC5saW5lLCBsYXN0V29yZC5mcm9tKTsKICAgICAgfSBlbHNlIGlmIChmb3J3YXJkICYmIHdvcmRFbmQpIHsKICAgICAgICByZXR1cm4gUG9zKGxhc3RXb3JkLmxpbmUsIGxhc3RXb3JkLnRvIC0gMSk7CiAgICAgIH0gZWxzZSBpZiAoIWZvcndhcmQgJiYgd29yZEVuZCkgewogICAgICAgIGlmICghc2hvcnRDaXJjdWl0ICYmIChmaXJzdFdvcmQudG8gIT0gY3VyU3RhcnQuY2ggfHwgZmlyc3RXb3JkLmxpbmUgIT0gY3VyU3RhcnQubGluZSkpIHsKICAgICAgICAgIGxhc3RXb3JkID0gd29yZHMucG9wKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQb3MobGFzdFdvcmQubGluZSwgbGFzdFdvcmQudG8pOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBQb3MobGFzdFdvcmQubGluZSwgbGFzdFdvcmQuZnJvbSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtb3ZlVG9DaGFyYWN0ZXIoY20sIHJlcGVhdCwgZm9yd2FyZCwgY2hhcmFjdGVyKSB7CiAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgdmFyIHN0YXJ0ID0gY3VyLmNoOwogICAgICB2YXIgaWR4OwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcGVhdDsgaSArKykgewogICAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICAgICAgaWR4ID0gY2hhcklkeEluTGluZShzdGFydCwgbGluZSwgY2hhcmFjdGVyLCBmb3J3YXJkLCB0cnVlKTsKICAgICAgICBpZiAoaWR4ID09IC0xKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgc3RhcnQgPSBpZHg7CiAgICAgIH0KICAgICAgcmV0dXJuIFBvcyhjbS5nZXRDdXJzb3IoKS5saW5lLCBpZHgpOwogICAgfQoKICAgIGZ1bmN0aW9uIG1vdmVUb0NvbHVtbihjbSwgcmVwZWF0KSB7CiAgICAgIHZhciBsaW5lID0gY20uZ2V0Q3Vyc29yKCkubGluZTsKICAgICAgcmV0dXJuIGNsaXBDdXJzb3JUb0NvbnRlbnQoY20sIFBvcyhsaW5lLCByZXBlYXQgLSAxKSk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlTWFyayhjbSwgdmltLCBtYXJrTmFtZSwgcG9zKSB7CiAgICAgIGlmICghaW5BcnJheShtYXJrTmFtZSwgdmFsaWRNYXJrcykpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHZpbS5tYXJrc1ttYXJrTmFtZV0pIHsKICAgICAgICB2aW0ubWFya3NbbWFya05hbWVdLmNsZWFyKCk7CiAgICAgIH0KICAgICAgdmltLm1hcmtzW21hcmtOYW1lXSA9IGNtLnNldEJvb2ttYXJrKHBvcyk7CiAgICB9CgogICAgZnVuY3Rpb24gY2hhcklkeEluTGluZShzdGFydCwgbGluZSwgY2hhcmFjdGVyLCBmb3J3YXJkLCBpbmNsdWRlQ2hhcikgewogICAgICB2YXIgaWR4OwogICAgICBpZiAoZm9yd2FyZCkgewogICAgICAgIGlkeCA9IGxpbmUuaW5kZXhPZihjaGFyYWN0ZXIsIHN0YXJ0ICsgMSk7CiAgICAgICAgaWYgKGlkeCAhPSAtMSAmJiAhaW5jbHVkZUNoYXIpIHsKICAgICAgICAgIGlkeCAtPSAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZHggPSBsaW5lLmxhc3RJbmRleE9mKGNoYXJhY3Rlciwgc3RhcnQgLSAxKTsKICAgICAgICBpZiAoaWR4ICE9IC0xICYmICFpbmNsdWRlQ2hhcikgewogICAgICAgICAgaWR4ICs9IDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpZHg7CiAgICB9CgogICAgZnVuY3Rpb24gZmluZFBhcmFncmFwaChjbSwgaGVhZCwgcmVwZWF0LCBkaXIsIGluY2x1c2l2ZSkgewogICAgICB2YXIgbGluZSA9IGhlYWQubGluZTsKICAgICAgdmFyIG1pbiA9IGNtLmZpcnN0TGluZSgpOwogICAgICB2YXIgbWF4ID0gY20ubGFzdExpbmUoKTsKICAgICAgdmFyIHN0YXJ0LCBlbmQsIGkgPSBsaW5lOwogICAgICBmdW5jdGlvbiBpc0VtcHR5KGkpIHsgcmV0dXJuICEvXFMvLnRlc3QoY20uZ2V0TGluZShpKSk7IH0gLy8gYWNlX3BhdGNoCiAgICAgIGZ1bmN0aW9uIGlzQm91bmRhcnkoaSwgZGlyLCBhbnkpIHsKICAgICAgICBpZiAoYW55KSB7IHJldHVybiBpc0VtcHR5KGkpICE9IGlzRW1wdHkoaSArIGRpcik7IH0KICAgICAgICByZXR1cm4gIWlzRW1wdHkoaSkgJiYgaXNFbXB0eShpICsgZGlyKTsKICAgICAgfQogICAgICBmdW5jdGlvbiBza2lwRm9sZChpKSB7CiAgICAgICAgICBkaXIgPSBkaXIgPiAwID8gMSA6IC0xOwogICAgICAgICAgdmFyIGZvbGRMaW5lID0gY20uYWNlLnNlc3Npb24uZ2V0Rm9sZExpbmUoaSk7CiAgICAgICAgICBpZiAoZm9sZExpbmUpIHsKICAgICAgICAgICAgICBpZiAoaSArIGRpciA+IGZvbGRMaW5lLnN0YXJ0LnJvdyAmJiBpICsgZGlyIDwgZm9sZExpbmUuZW5kLnJvdykKICAgICAgICAgICAgICAgICAgZGlyID0gKGRpciA+IDAgPyBmb2xkTGluZS5lbmQucm93IDogZm9sZExpbmUuc3RhcnQucm93KSAtIGk7CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRpcikgewogICAgICAgIHdoaWxlIChtaW4gPD0gaSAmJiBpIDw9IG1heCAmJiByZXBlYXQgPiAwKSB7CiAgICAgICAgICBza2lwRm9sZChpKTsKICAgICAgICAgIGlmIChpc0JvdW5kYXJ5KGksIGRpcikpIHsgcmVwZWF0LS07IH0KICAgICAgICAgIGkgKz0gZGlyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IFBvcyhpLCAwKTsKICAgICAgfQoKICAgICAgdmFyIHZpbSA9IGNtLnN0YXRlLnZpbTsKICAgICAgaWYgKHZpbS52aXN1YWxMaW5lICYmIGlzQm91bmRhcnkobGluZSwgMSwgdHJ1ZSkpIHsKICAgICAgICB2YXIgYW5jaG9yID0gdmltLnNlbC5hbmNob3I7CiAgICAgICAgaWYgKGlzQm91bmRhcnkoYW5jaG9yLmxpbmUsIC0xLCB0cnVlKSkgewogICAgICAgICAgaWYgKCFpbmNsdXNpdmUgfHwgYW5jaG9yLmxpbmUgIT0gbGluZSkgewogICAgICAgICAgICBsaW5lICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBzdGFydFN0YXRlID0gaXNFbXB0eShsaW5lKTsKICAgICAgZm9yIChpID0gbGluZTsgaSA8PSBtYXggJiYgcmVwZWF0OyBpKyspIHsKICAgICAgICBpZiAoaXNCb3VuZGFyeShpLCAxLCB0cnVlKSkgewogICAgICAgICAgaWYgKCFpbmNsdXNpdmUgfHwgaXNFbXB0eShpKSAhPSBzdGFydFN0YXRlKSB7CiAgICAgICAgICAgIHJlcGVhdC0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBlbmQgPSBuZXcgUG9zKGksIDApOwogICAgICBpZiAoaSA+IG1heCAmJiAhc3RhcnRTdGF0ZSkgeyBzdGFydFN0YXRlID0gdHJ1ZTsgfQogICAgICBlbHNlIHsgaW5jbHVzaXZlID0gZmFsc2U7IH0KICAgICAgZm9yIChpID0gbGluZTsgaSA+IG1pbjsgaS0tKSB7CiAgICAgICAgaWYgKCFpbmNsdXNpdmUgfHwgaXNFbXB0eShpKSA9PSBzdGFydFN0YXRlIHx8IGkgPT0gbGluZSkgewogICAgICAgICAgaWYgKGlzQm91bmRhcnkoaSwgLTEsIHRydWUpKSB7IGJyZWFrOyB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXJ0ID0gbmV3IFBvcyhpLCAwKTsKICAgICAgcmV0dXJuIHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbmRTZW50ZW5jZShjbSwgY3VyLCByZXBlYXQsIGRpcikgewogICAgICBmdW5jdGlvbiBuZXh0Q2hhcihjbSwgaWR4KSB7CiAgICAgICAgaWYgKGlkeC5wb3MgKyBpZHguZGlyIDwgMCB8fCBpZHgucG9zICsgaWR4LmRpciA+PSBpZHgubGluZS5sZW5ndGgpIHsKICAgICAgICAgIGlkeC5sbiArPSBpZHguZGlyOwogICAgICAgICAgaWYgKCFpc0xpbmUoY20sIGlkeC5sbikpIHsKICAgICAgICAgICAgaWR4LmxpbmUgPSBudWxsOwogICAgICAgICAgICBpZHgubG4gPSBudWxsOwogICAgICAgICAgICBpZHgucG9zID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWR4LmxpbmUgPSBjbS5nZXRMaW5lKGlkeC5sbik7CiAgICAgICAgICBpZHgucG9zID0gKGlkeC5kaXIgPiAwKSA/IDAgOiBpZHgubGluZS5sZW5ndGggLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGlkeC5wb3MgKz0gaWR4LmRpcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZm9yd2FyZChjbSwgbG4sIHBvcywgZGlyKSB7CiAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGxuKTsKICAgICAgICB2YXIgc3RvcCA9IChsaW5lID09PSAiIik7CgogICAgICAgIHZhciBjdXJyID0gewogICAgICAgICAgbGluZTogbGluZSwKICAgICAgICAgIGxuOiBsbiwKICAgICAgICAgIHBvczogcG9zLAogICAgICAgICAgZGlyOiBkaXIsCiAgICAgICAgfQoKICAgICAgICB2YXIgbGFzdF92YWxpZCA9IHsKICAgICAgICAgIGxuOiBjdXJyLmxuLAogICAgICAgICAgcG9zOiBjdXJyLnBvcywKICAgICAgICB9CgogICAgICAgIHZhciBza2lwX2VtcHR5X2xpbmVzID0gKGN1cnIubGluZSA9PT0gIiIpOwogICAgICAgIG5leHRDaGFyKGNtLCBjdXJyKTsKCiAgICAgICAgd2hpbGUgKGN1cnIubGluZSAhPT0gbnVsbCkgewogICAgICAgICAgbGFzdF92YWxpZC5sbiA9IGN1cnIubG47CiAgICAgICAgICBsYXN0X3ZhbGlkLnBvcyA9IGN1cnIucG9zOwoKICAgICAgICAgIGlmIChjdXJyLmxpbmUgPT09ICIiICYmICFza2lwX2VtcHR5X2xpbmVzKSB7CiAgICAgICAgICAgIHJldHVybiB7IGxuOiBjdXJyLmxuLCBwb3M6IGN1cnIucG9zLCB9OwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoc3RvcCAmJiBjdXJyLmxpbmUgIT09ICIiICYmICFpc1doaXRlU3BhY2VTdHJpbmcoY3Vyci5saW5lW2N1cnIucG9zXSkpIHsKICAgICAgICAgICAgcmV0dXJuIHsgbG46IGN1cnIubG4sIHBvczogY3Vyci5wb3MsIH07CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChpc0VuZE9mU2VudGVuY2VTeW1ib2woY3Vyci5saW5lW2N1cnIucG9zXSkKICAgICAgICAgICAgJiYgIXN0b3AKICAgICAgICAgICAgJiYgKGN1cnIucG9zID09PSBjdXJyLmxpbmUubGVuZ3RoIC0gMQogICAgICAgICAgICAgIHx8IGlzV2hpdGVTcGFjZVN0cmluZyhjdXJyLmxpbmVbY3Vyci5wb3MgKyAxXSkpKSB7CiAgICAgICAgICAgIHN0b3AgPSB0cnVlOwogICAgICAgICAgfQoKICAgICAgICAgIG5leHRDaGFyKGNtLCBjdXJyKTsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGxhc3RfdmFsaWQubG4pOwogICAgICAgIGxhc3RfdmFsaWQucG9zID0gMDsKICAgICAgICBmb3IodmFyIGkgPSBsaW5lLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgICBpZiAoIWlzV2hpdGVTcGFjZVN0cmluZyhsaW5lW2ldKSkgewogICAgICAgICAgICBsYXN0X3ZhbGlkLnBvcyA9IGk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGxhc3RfdmFsaWQ7CgogICAgICB9CiAgICAgIGZ1bmN0aW9uIHJldmVyc2UoY20sIGxuLCBwb3MsIGRpcikgewogICAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShsbik7CgogICAgICAgIHZhciBjdXJyID0gewogICAgICAgICAgbGluZTogbGluZSwKICAgICAgICAgIGxuOiBsbiwKICAgICAgICAgIHBvczogcG9zLAogICAgICAgICAgZGlyOiBkaXIsCiAgICAgICAgfQoKICAgICAgICB2YXIgbGFzdF92YWxpZCA9IHsKICAgICAgICAgIGxuOiBjdXJyLmxuLAogICAgICAgICAgcG9zOiBudWxsLAogICAgICAgIH07CgogICAgICAgIHZhciBza2lwX2VtcHR5X2xpbmVzID0gKGN1cnIubGluZSA9PT0gIiIpOwogICAgICAgIG5leHRDaGFyKGNtLCBjdXJyKTsKCiAgICAgICAgd2hpbGUgKGN1cnIubGluZSAhPT0gbnVsbCkgewoKICAgICAgICAgIGlmIChjdXJyLmxpbmUgPT09ICIiICYmICFza2lwX2VtcHR5X2xpbmVzKSB7CiAgICAgICAgICAgIGlmIChsYXN0X3ZhbGlkLnBvcyAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHJldHVybiBsYXN0X3ZhbGlkOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIHJldHVybiB7IGxuOiBjdXJyLmxuLCBwb3M6IGN1cnIucG9zIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKGlzRW5kT2ZTZW50ZW5jZVN5bWJvbChjdXJyLmxpbmVbY3Vyci5wb3NdKQogICAgICAgICAgICAgICYmIGxhc3RfdmFsaWQucG9zICE9PSBudWxsCiAgICAgICAgICAgICAgJiYgIShjdXJyLmxuID09PSBsYXN0X3ZhbGlkLmxuICYmIGN1cnIucG9zICsgMSA9PT0gbGFzdF92YWxpZC5wb3MpKSB7CiAgICAgICAgICAgIHJldHVybiBsYXN0X3ZhbGlkOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoY3Vyci5saW5lICE9PSAiIiAmJiAhaXNXaGl0ZVNwYWNlU3RyaW5nKGN1cnIubGluZVtjdXJyLnBvc10pKSB7CiAgICAgICAgICAgIHNraXBfZW1wdHlfbGluZXMgPSBmYWxzZTsKICAgICAgICAgICAgbGFzdF92YWxpZCA9IHsgbG46IGN1cnIubG4sIHBvczogY3Vyci5wb3MgfQogICAgICAgICAgfQoKICAgICAgICAgIG5leHRDaGFyKGNtLCBjdXJyKTsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSBjbS5nZXRMaW5lKGxhc3RfdmFsaWQubG4pOwogICAgICAgIGxhc3RfdmFsaWQucG9zID0gMDsKICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGluZS5sZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2VTdHJpbmcobGluZVtpXSkpIHsKICAgICAgICAgICAgbGFzdF92YWxpZC5wb3MgPSBpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxhc3RfdmFsaWQ7CiAgICAgIH0KCiAgICAgIHZhciBjdXJyX2luZGV4ID0gewogICAgICAgIGxuOiBjdXIubGluZSwKICAgICAgICBwb3M6IGN1ci5jaCwKICAgICAgfTsKCiAgICAgIHdoaWxlIChyZXBlYXQgPiAwKSB7CiAgICAgICAgaWYgKGRpciA8IDApIHsKICAgICAgICAgIGN1cnJfaW5kZXggPSByZXZlcnNlKGNtLCBjdXJyX2luZGV4LmxuLCBjdXJyX2luZGV4LnBvcywgZGlyKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBjdXJyX2luZGV4ID0gZm9yd2FyZChjbSwgY3Vycl9pbmRleC5sbiwgY3Vycl9pbmRleC5wb3MsIGRpcik7CiAgICAgICAgfQogICAgICAgIHJlcGVhdC0tOwogICAgICB9CgogICAgICByZXR1cm4gUG9zKGN1cnJfaW5kZXgubG4sIGN1cnJfaW5kZXgucG9zKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlbGVjdENvbXBhbmlvbk9iamVjdChjbSwgaGVhZCwgc3ltYiwgaW5jbHVzaXZlKSB7CiAgICAgIHZhciBjdXIgPSBoZWFkLCBzdGFydCwgZW5kOwoKICAgICAgdmFyIGJyYWNrZXRSZWdleHAgPSAoewogICAgICAgICcoJzogL1soKV0vLCAnKSc6IC9bKCldLywKICAgICAgICAnWyc6IC9bW1xdXS8sICddJzogL1tbXF1dLywKICAgICAgICAneyc6IC9be31dLywgJ30nOiAvW3t9XS8sCiAgICAgICAgJzwnOiAvWzw+XS8sICc+JzogL1s8Pl0vfSlbc3ltYl07CiAgICAgIHZhciBvcGVuU3ltID0gKHsKICAgICAgICAnKCc6ICcoJywgJyknOiAnKCcsCiAgICAgICAgJ1snOiAnWycsICddJzogJ1snLAogICAgICAgICd7JzogJ3snLCAnfSc6ICd7JywKICAgICAgICAnPCc6ICc8JywgJz4nOiAnPCd9KVtzeW1iXTsKICAgICAgdmFyIGN1ckNoYXIgPSBjbS5nZXRMaW5lKGN1ci5saW5lKS5jaGFyQXQoY3VyLmNoKTsKICAgICAgdmFyIG9mZnNldCA9IGN1ckNoYXIgPT09IG9wZW5TeW0gPyAxIDogMDsKCiAgICAgIHN0YXJ0ID0gY20uc2NhbkZvckJyYWNrZXQoUG9zKGN1ci5saW5lLCBjdXIuY2ggKyBvZmZzZXQpLCAtMSwgdW5kZWZpbmVkLCB7J2JyYWNrZXRSZWdleCc6IGJyYWNrZXRSZWdleHB9KTsKICAgICAgZW5kID0gY20uc2NhbkZvckJyYWNrZXQoUG9zKGN1ci5saW5lLCBjdXIuY2ggKyBvZmZzZXQpLCAxLCB1bmRlZmluZWQsIHsnYnJhY2tldFJlZ2V4JzogYnJhY2tldFJlZ2V4cH0pOwoKICAgICAgaWYgKCFzdGFydCB8fCAhZW5kKSB7CiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IGN1ciwgZW5kOiBjdXIgfTsKICAgICAgfQoKICAgICAgc3RhcnQgPSBzdGFydC5wb3M7CiAgICAgIGVuZCA9IGVuZC5wb3M7CgogICAgICBpZiAoKHN0YXJ0LmxpbmUgPT0gZW5kLmxpbmUgJiYgc3RhcnQuY2ggPiBlbmQuY2gpCiAgICAgICAgICB8fCAoc3RhcnQubGluZSA+IGVuZC5saW5lKSkgewogICAgICAgIHZhciB0bXAgPSBzdGFydDsKICAgICAgICBzdGFydCA9IGVuZDsKICAgICAgICBlbmQgPSB0bXA7CiAgICAgIH0KCiAgICAgIGlmIChpbmNsdXNpdmUpIHsKICAgICAgICBlbmQuY2ggKz0gMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGFydC5jaCArPSAxOwogICAgICB9CgogICAgICByZXR1cm4geyBzdGFydDogc3RhcnQsIGVuZDogZW5kIH07CiAgICB9CiAgICBmdW5jdGlvbiBmaW5kQmVnaW5uaW5nQW5kRW5kKGNtLCBoZWFkLCBzeW1iLCBpbmNsdXNpdmUpIHsKICAgICAgdmFyIGN1ciA9IGNvcHlDdXJzb3IoaGVhZCk7CiAgICAgIHZhciBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICAgIHZhciBjaGFycyA9IGxpbmUuc3BsaXQoJycpOwogICAgICB2YXIgc3RhcnQsIGVuZCwgaSwgbGVuOwogICAgICB2YXIgZmlyc3RJbmRleCA9IGNoYXJzLmluZGV4T2Yoc3ltYik7CiAgICAgIGlmIChjdXIuY2ggPCBmaXJzdEluZGV4KSB7CiAgICAgICAgY3VyLmNoID0gZmlyc3RJbmRleDsKICAgICAgfQogICAgICBlbHNlIGlmIChmaXJzdEluZGV4IDwgY3VyLmNoICYmIGNoYXJzW2N1ci5jaF0gPT0gc3ltYikgewogICAgICAgIGVuZCA9IGN1ci5jaDsgLy8gYXNzaWduIGVuZCB0byB0aGUgY3VycmVudCBjdXJzb3IKICAgICAgICAtLWN1ci5jaDsgLy8gbWFrZSBzdXJlIHRvIGxvb2sgYmFja3dhcmRzCiAgICAgIH0KICAgICAgaWYgKGNoYXJzW2N1ci5jaF0gPT0gc3ltYiAmJiAhZW5kKSB7CiAgICAgICAgc3RhcnQgPSBjdXIuY2ggKyAxOyAvLyBhc3NpZ24gc3RhcnQgdG8gYWhlYWQgb2YgdGhlIGN1cnNvcgogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoaSA9IGN1ci5jaDsgaSA+IC0xICYmICFzdGFydDsgaS0tKSB7CiAgICAgICAgICBpZiAoY2hhcnNbaV0gPT0gc3ltYikgewogICAgICAgICAgICBzdGFydCA9IGkgKyAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhcnQgJiYgIWVuZCkgewogICAgICAgIGZvciAoaSA9IHN0YXJ0LCBsZW4gPSBjaGFycy5sZW5ndGg7IGkgPCBsZW4gJiYgIWVuZDsgaSsrKSB7CiAgICAgICAgICBpZiAoY2hhcnNbaV0gPT0gc3ltYikgewogICAgICAgICAgICBlbmQgPSBpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHsKICAgICAgICByZXR1cm4geyBzdGFydDogY3VyLCBlbmQ6IGN1ciB9OwogICAgICB9CiAgICAgIGlmIChpbmNsdXNpdmUpIHsKICAgICAgICAtLXN0YXJ0OyArK2VuZDsKICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBzdGFydDogUG9zKGN1ci5saW5lLCBzdGFydCksCiAgICAgICAgZW5kOiBQb3MoY3VyLmxpbmUsIGVuZCkKICAgICAgfTsKICAgIH0KICAgIGRlZmluZU9wdGlvbigncGNyZScsIHRydWUsICdib29sZWFuJyk7CiAgICBmdW5jdGlvbiBTZWFyY2hTdGF0ZSgpIHt9CiAgICBTZWFyY2hTdGF0ZS5wcm90b3R5cGUgPSB7CiAgICAgIGdldFF1ZXJ5OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmltR2xvYmFsU3RhdGUucXVlcnk7CiAgICAgIH0sCiAgICAgIHNldFF1ZXJ5OiBmdW5jdGlvbihxdWVyeSkgewogICAgICAgIHZpbUdsb2JhbFN0YXRlLnF1ZXJ5ID0gcXVlcnk7CiAgICAgIH0sCiAgICAgIGdldE92ZXJsYXk6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLnNlYXJjaE92ZXJsYXk7CiAgICAgIH0sCiAgICAgIHNldE92ZXJsYXk6IGZ1bmN0aW9uKG92ZXJsYXkpIHsKICAgICAgICB0aGlzLnNlYXJjaE92ZXJsYXkgPSBvdmVybGF5OwogICAgICB9LAogICAgICBpc1JldmVyc2VkOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmltR2xvYmFsU3RhdGUuaXNSZXZlcnNlZDsKICAgICAgfSwKICAgICAgc2V0UmV2ZXJzZWQ6IGZ1bmN0aW9uKHJldmVyc2VkKSB7CiAgICAgICAgdmltR2xvYmFsU3RhdGUuaXNSZXZlcnNlZCA9IHJldmVyc2VkOwogICAgICB9LAogICAgICBnZXRTY3JvbGxiYXJBbm5vdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGU7CiAgICAgIH0sCiAgICAgIHNldFNjcm9sbGJhckFubm90YXRlOiBmdW5jdGlvbihhbm5vdGF0ZSkgewogICAgICAgIHRoaXMuYW5ub3RhdGUgPSBhbm5vdGF0ZTsKICAgICAgfQogICAgfTsKICAgIGZ1bmN0aW9uIGdldFNlYXJjaFN0YXRlKGNtKSB7CiAgICAgIHZhciB2aW0gPSBjbS5zdGF0ZS52aW07CiAgICAgIHJldHVybiB2aW0uc2VhcmNoU3RhdGVfIHx8ICh2aW0uc2VhcmNoU3RhdGVfID0gbmV3IFNlYXJjaFN0YXRlKCkpOwogICAgfQogICAgZnVuY3Rpb24gZGlhbG9nKGNtLCB0ZW1wbGF0ZSwgc2hvcnRUZXh0LCBvbkNsb3NlLCBvcHRpb25zKSB7CiAgICAgIGlmIChjbS5vcGVuRGlhbG9nKSB7CiAgICAgICAgY20ub3BlbkRpYWxvZyh0ZW1wbGF0ZSwgb25DbG9zZSwgeyBib3R0b206IHRydWUsIHZhbHVlOiBvcHRpb25zLnZhbHVlLAogICAgICAgICAgICBvbktleURvd246IG9wdGlvbnMub25LZXlEb3duLCBvbktleVVwOiBvcHRpb25zLm9uS2V5VXAsCiAgICAgICAgICAgIHNlbGVjdFZhbHVlT25PcGVuOiBmYWxzZSwgb25DbG9zZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKGNtLnN0YXRlLnZpbSkgewogICAgICAgICAgICAgICAgY20uc3RhdGUudmltLnN0YXR1cyA9ICIiOwogICAgICAgICAgICAgICAgY20uYWNlLnJlbmRlcmVyLiRsb29wLnNjaGVkdWxlKGNtLmFjZS5yZW5kZXJlci5DSEFOR0VfQ1VSU09SKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH19KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBvbkNsb3NlKHByb21wdChzaG9ydFRleHQsICcnKSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNwbGl0QnlTbGFzaChhcmdTdHJpbmcpIHsKICAgICAgcmV0dXJuIHNwbGl0QnlTZXBhcmF0b3IoYXJnU3RyaW5nLCAnLycpOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbmRVbmVzY2FwZWRTbGFzaGVzKGFyZ1N0cmluZykgewogICAgICByZXR1cm4gZmluZFVuZXNjYXBlZFNlcGFyYXRvcnMoYXJnU3RyaW5nLCAnLycpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNwbGl0QnlTZXBhcmF0b3IoYXJnU3RyaW5nLCBzZXBhcmF0b3IpIHsKICAgICAgdmFyIHNsYXNoZXMgPSBmaW5kVW5lc2NhcGVkU2VwYXJhdG9ycyhhcmdTdHJpbmcsIHNlcGFyYXRvcikgfHwgW107CiAgICAgIGlmICghc2xhc2hlcy5sZW5ndGgpIHJldHVybiBbXTsKICAgICAgdmFyIHRva2VucyA9IFtdOwogICAgICBpZiAoc2xhc2hlc1swXSAhPT0gMCkgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsYXNoZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodHlwZW9mIHNsYXNoZXNbaV0gPT0gJ251bWJlcicpCiAgICAgICAgICB0b2tlbnMucHVzaChhcmdTdHJpbmcuc3Vic3RyaW5nKHNsYXNoZXNbaV0gKyAxLCBzbGFzaGVzW2krMV0pKTsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5zOwogICAgfQoKICAgIGZ1bmN0aW9uIGZpbmRVbmVzY2FwZWRTZXBhcmF0b3JzKHN0ciwgc2VwYXJhdG9yKSB7CiAgICAgIGlmICghc2VwYXJhdG9yKQogICAgICAgIHNlcGFyYXRvciA9ICcvJzsKCiAgICAgIHZhciBlc2NhcGVOZXh0Q2hhciA9IGZhbHNlOwogICAgICB2YXIgc2xhc2hlcyA9IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjID0gc3RyLmNoYXJBdChpKTsKICAgICAgICBpZiAoIWVzY2FwZU5leHRDaGFyICYmIGMgPT0gc2VwYXJhdG9yKSB7CiAgICAgICAgICBzbGFzaGVzLnB1c2goaSk7CiAgICAgICAgfQogICAgICAgIGVzY2FwZU5leHRDaGFyID0gIWVzY2FwZU5leHRDaGFyICYmIChjID09ICdcXCcpOwogICAgICB9CiAgICAgIHJldHVybiBzbGFzaGVzOwogICAgfQogICAgZnVuY3Rpb24gdHJhbnNsYXRlUmVnZXgoc3RyKSB7CiAgICAgIHZhciBzcGVjaWFscyA9ICd8KCl7JzsKICAgICAgdmFyIHVuZXNjYXBlID0gJ30nOwogICAgICB2YXIgZXNjYXBlTmV4dENoYXIgPSBmYWxzZTsKICAgICAgdmFyIG91dCA9IFtdOwogICAgICBmb3IgKHZhciBpID0gLTE7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgYyA9IHN0ci5jaGFyQXQoaSkgfHwgJyc7CiAgICAgICAgdmFyIG4gPSBzdHIuY2hhckF0KGkrMSkgfHwgJyc7CiAgICAgICAgdmFyIHNwZWNpYWxDb21lc05leHQgPSAobiAmJiBzcGVjaWFscy5pbmRleE9mKG4pICE9IC0xKTsKICAgICAgICBpZiAoZXNjYXBlTmV4dENoYXIpIHsKICAgICAgICAgIGlmIChjICE9PSAnXFwnIHx8ICFzcGVjaWFsQ29tZXNOZXh0KSB7CiAgICAgICAgICAgIG91dC5wdXNoKGMpOwogICAgICAgICAgfQogICAgICAgICAgZXNjYXBlTmV4dENoYXIgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGMgPT09ICdcXCcpIHsKICAgICAgICAgICAgZXNjYXBlTmV4dENoYXIgPSB0cnVlOwogICAgICAgICAgICBpZiAobiAmJiB1bmVzY2FwZS5pbmRleE9mKG4pICE9IC0xKSB7CiAgICAgICAgICAgICAgc3BlY2lhbENvbWVzTmV4dCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFzcGVjaWFsQ29tZXNOZXh0IHx8IG4gPT09ICdcXCcpIHsKICAgICAgICAgICAgICBvdXQucHVzaChjKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3V0LnB1c2goYyk7CiAgICAgICAgICAgIGlmIChzcGVjaWFsQ29tZXNOZXh0ICYmIG4gIT09ICdcXCcpIHsKICAgICAgICAgICAgICBvdXQucHVzaCgnXFwnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3V0LmpvaW4oJycpOwogICAgfQogICAgdmFyIGNoYXJVbmVzY2FwZXMgPSB7J1xcbic6ICdcbicsICdcXHInOiAnXHInLCAnXFx0JzogJ1x0J307CiAgICBmdW5jdGlvbiB0cmFuc2xhdGVSZWdleFJlcGxhY2Uoc3RyKSB7CiAgICAgIHZhciBlc2NhcGVOZXh0Q2hhciA9IGZhbHNlOwogICAgICB2YXIgb3V0ID0gW107CiAgICAgIGZvciAodmFyIGkgPSAtMTsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjID0gc3RyLmNoYXJBdChpKSB8fCAnJzsKICAgICAgICB2YXIgbiA9IHN0ci5jaGFyQXQoaSsxKSB8fCAnJzsKICAgICAgICBpZiAoY2hhclVuZXNjYXBlc1tjICsgbl0pIHsKICAgICAgICAgIG91dC5wdXNoKGNoYXJVbmVzY2FwZXNbYytuXSk7CiAgICAgICAgICBpKys7CiAgICAgICAgfSBlbHNlIGlmIChlc2NhcGVOZXh0Q2hhcikgewogICAgICAgICAgb3V0LnB1c2goYyk7CiAgICAgICAgICBlc2NhcGVOZXh0Q2hhciA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYyA9PT0gJ1xcJykgewogICAgICAgICAgICBlc2NhcGVOZXh0Q2hhciA9IHRydWU7CiAgICAgICAgICAgIGlmICgoaXNOdW1iZXIobikgfHwgbiA9PT0gJyQnKSkgewogICAgICAgICAgICAgIG91dC5wdXNoKCckJyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobiAhPT0gJy8nICYmIG4gIT09ICdcXCcpIHsKICAgICAgICAgICAgICBvdXQucHVzaCgnXFwnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGMgPT09ICckJykgewogICAgICAgICAgICAgIG91dC5wdXNoKCckJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3V0LnB1c2goYyk7CiAgICAgICAgICAgIGlmIChuID09PSAnLycpIHsKICAgICAgICAgICAgICBvdXQucHVzaCgnXFwnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3V0LmpvaW4oJycpOwogICAgfQogICAgdmFyIHVuZXNjYXBlcyA9IHsnXFwvJzogJy8nLCAnXFxcXCc6ICdcXCcsICdcXG4nOiAnXG4nLCAnXFxyJzogJ1xyJywgJ1xcdCc6ICdcdCd9OwogICAgZnVuY3Rpb24gdW5lc2NhcGVSZWdleFJlcGxhY2Uoc3RyKSB7CiAgICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0oc3RyKTsKICAgICAgdmFyIG91dHB1dCA9IFtdOwogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIHdoaWxlIChzdHJlYW0ucGVlaygpICYmIHN0cmVhbS5wZWVrKCkgIT0gJ1xcJykgewogICAgICAgICAgb3V0cHV0LnB1c2goc3RyZWFtLm5leHQoKSk7CiAgICAgICAgfQogICAgICAgIHZhciBtYXRjaGVkID0gZmFsc2U7CiAgICAgICAgZm9yICh2YXIgbWF0Y2hlciBpbiB1bmVzY2FwZXMpIHsKICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2gobWF0Y2hlciwgdHJ1ZSkpIHsKICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKHVuZXNjYXBlc1ttYXRjaGVyXSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIW1hdGNoZWQpIHsKICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmVhbS5uZXh0KCkpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb3V0cHV0LmpvaW4oJycpOwogICAgfQogICAgZnVuY3Rpb24gcGFyc2VRdWVyeShxdWVyeSwgaWdub3JlQ2FzZSwgc21hcnRDYXNlKSB7CiAgICAgIHZhciBsYXN0U2VhcmNoUmVnaXN0ZXIgPSB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIoJy8nKTsKICAgICAgbGFzdFNlYXJjaFJlZ2lzdGVyLnNldFRleHQocXVlcnkpOwogICAgICBpZiAocXVlcnkgaW5zdGFuY2VvZiBSZWdFeHApIHsgcmV0dXJuIHF1ZXJ5OyB9CiAgICAgIHZhciBzbGFzaGVzID0gZmluZFVuZXNjYXBlZFNsYXNoZXMocXVlcnkpOwogICAgICB2YXIgcmVnZXhQYXJ0OwogICAgICB2YXIgZm9yY2VJZ25vcmVDYXNlOwogICAgICBpZiAoIXNsYXNoZXMubGVuZ3RoKSB7CiAgICAgICAgcmVnZXhQYXJ0ID0gcXVlcnk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVnZXhQYXJ0ID0gcXVlcnkuc3Vic3RyaW5nKDAsIHNsYXNoZXNbMF0pOwogICAgICAgIHZhciBmbGFnc1BhcnQgPSBxdWVyeS5zdWJzdHJpbmcoc2xhc2hlc1swXSk7CiAgICAgICAgZm9yY2VJZ25vcmVDYXNlID0gKGZsYWdzUGFydC5pbmRleE9mKCdpJykgIT0gLTEpOwogICAgICB9CiAgICAgIGlmICghcmVnZXhQYXJ0KSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKCFnZXRPcHRpb24oJ3BjcmUnKSkgewogICAgICAgIHJlZ2V4UGFydCA9IHRyYW5zbGF0ZVJlZ2V4KHJlZ2V4UGFydCk7CiAgICAgIH0KICAgICAgaWYgKHNtYXJ0Q2FzZSkgewogICAgICAgIGlnbm9yZUNhc2UgPSAoL15bXkEtWl0qJC8pLnRlc3QocmVnZXhQYXJ0KTsKICAgICAgfQogICAgICB2YXIgcmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleFBhcnQsCiAgICAgICAgICAoaWdub3JlQ2FzZSB8fCBmb3JjZUlnbm9yZUNhc2UpID8gJ2knIDogdW5kZWZpbmVkKTsKICAgICAgcmV0dXJuIHJlZ2V4cDsKICAgIH0KICAgIGZ1bmN0aW9uIHNob3dDb25maXJtKGNtLCB0ZXh0KSB7CiAgICAgIGlmIChjbS5vcGVuTm90aWZpY2F0aW9uKSB7CiAgICAgICAgY20ub3Blbk5vdGlmaWNhdGlvbignPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQiPicgKyB0ZXh0ICsgJzwvc3Bhbj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAge2JvdHRvbTogdHJ1ZSwgZHVyYXRpb246IDUwMDB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhbGVydCh0ZXh0KTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbWFrZVByb21wdChwcmVmaXgsIGRlc2MpIHsKICAgICAgdmFyIHJhdyA9ICc8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgd2hpdGUtc3BhY2U6IHByZSI+JyArCiAgICAgICAgICAocHJlZml4IHx8ICIiKSArICc8aW5wdXQgdHlwZT0idGV4dCIgYXV0b2NvcnJlY3Q9Im9mZiIgYXV0b2NhcGl0YWxpemU9Im5vbmUiIGF1dG9jb21wbGV0ZT0ib2ZmIj48L3NwYW4+JzsKICAgICAgaWYgKGRlc2MpCiAgICAgICAgcmF3ICs9ICcgPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4nICsgZGVzYyArICc8L3NwYW4+JzsKICAgICAgcmV0dXJuIHJhdzsKICAgIH0KICAgIHZhciBzZWFyY2hQcm9tcHREZXNjID0gJyhKYXZhc2NyaXB0IHJlZ2V4cCknOwogICAgZnVuY3Rpb24gc2hvd1Byb21wdChjbSwgb3B0aW9ucykgewogICAgICB2YXIgc2hvcnRUZXh0ID0gKG9wdGlvbnMucHJlZml4IHx8ICcnKSArICcgJyArIChvcHRpb25zLmRlc2MgfHwgJycpOwogICAgICB2YXIgcHJvbXB0ID0gbWFrZVByb21wdChvcHRpb25zLnByZWZpeCwgb3B0aW9ucy5kZXNjKTsKICAgICAgZGlhbG9nKGNtLCBwcm9tcHQsIHNob3J0VGV4dCwgb3B0aW9ucy5vbkNsb3NlLCBvcHRpb25zKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlZ2V4RXF1YWwocjEsIHIyKSB7CiAgICAgIGlmIChyMSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByMiBpbnN0YW5jZW9mIFJlZ0V4cCkgewogICAgICAgICAgdmFyIHByb3BzID0gWydnbG9iYWwnLCAnbXVsdGlsaW5lJywgJ2lnbm9yZUNhc2UnLCAnc291cmNlJ107CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgdmFyIHByb3AgPSBwcm9wc1tpXTsKICAgICAgICAgICAgICBpZiAocjFbcHJvcF0gIT09IHIyW3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiB1cGRhdGVTZWFyY2hRdWVyeShjbSwgcmF3UXVlcnksIGlnbm9yZUNhc2UsIHNtYXJ0Q2FzZSkgewogICAgICBpZiAoIXJhd1F1ZXJ5KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgICAgdmFyIHF1ZXJ5ID0gcGFyc2VRdWVyeShyYXdRdWVyeSwgISFpZ25vcmVDYXNlLCAhIXNtYXJ0Q2FzZSk7CiAgICAgIGlmICghcXVlcnkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaGlnaGxpZ2h0U2VhcmNoTWF0Y2hlcyhjbSwgcXVlcnkpOwogICAgICBpZiAocmVnZXhFcXVhbChxdWVyeSwgc3RhdGUuZ2V0UXVlcnkoKSkpIHsKICAgICAgICByZXR1cm4gcXVlcnk7CiAgICAgIH0KICAgICAgc3RhdGUuc2V0UXVlcnkocXVlcnkpOwogICAgICByZXR1cm4gcXVlcnk7CiAgICB9CiAgICBmdW5jdGlvbiBzZWFyY2hPdmVybGF5KHF1ZXJ5KSB7CiAgICAgIGlmIChxdWVyeS5zb3VyY2UuY2hhckF0KDApID09ICdeJykgewogICAgICAgIHZhciBtYXRjaFNvbCA9IHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtKSB7CiAgICAgICAgICBpZiAobWF0Y2hTb2wgJiYgIXN0cmVhbS5zb2woKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBtYXRjaCA9IHN0cmVhbS5tYXRjaChxdWVyeSwgZmFsc2UpOwogICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGlmIChtYXRjaFswXS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgcmV0dXJuICdzZWFyY2hpbmcnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgICAgICAgICBpZiAoIXF1ZXJ5LmV4ZWMoc3RyZWFtLm5leHQoKSArIG1hdGNoWzBdKSkgewogICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzdHJlYW0ubWF0Y2gocXVlcnkpOwogICAgICAgICAgICByZXR1cm4gJ3NlYXJjaGluZyc7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHF1ZXJ5LCBmYWxzZSkpIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcXVlcnk6IHF1ZXJ5CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBoaWdobGlnaHRTZWFyY2hNYXRjaGVzKGNtLCBxdWVyeSkgewogICAgICB2YXIgc2VhcmNoU3RhdGUgPSBnZXRTZWFyY2hTdGF0ZShjbSk7CiAgICAgIHZhciBvdmVybGF5ID0gc2VhcmNoU3RhdGUuZ2V0T3ZlcmxheSgpOwogICAgICBpZiAoIW92ZXJsYXkgfHwgcXVlcnkgIT0gb3ZlcmxheS5xdWVyeSkgewogICAgICAgIGlmIChvdmVybGF5KSB7CiAgICAgICAgICBjbS5yZW1vdmVPdmVybGF5KG92ZXJsYXkpOwogICAgICAgIH0KICAgICAgICBvdmVybGF5ID0gc2VhcmNoT3ZlcmxheShxdWVyeSk7CiAgICAgICAgY20uYWRkT3ZlcmxheShvdmVybGF5KTsKICAgICAgICBpZiAoY20uc2hvd01hdGNoZXNPblNjcm9sbGJhcikgewogICAgICAgICAgaWYgKHNlYXJjaFN0YXRlLmdldFNjcm9sbGJhckFubm90YXRlKCkpIHsKICAgICAgICAgICAgc2VhcmNoU3RhdGUuZ2V0U2Nyb2xsYmFyQW5ub3RhdGUoKS5jbGVhcigpOwogICAgICAgICAgfQogICAgICAgICAgc2VhcmNoU3RhdGUuc2V0U2Nyb2xsYmFyQW5ub3RhdGUoY20uc2hvd01hdGNoZXNPblNjcm9sbGJhcihxdWVyeSkpOwogICAgICAgIH0KICAgICAgICBzZWFyY2hTdGF0ZS5zZXRPdmVybGF5KG92ZXJsYXkpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBmaW5kTmV4dChjbSwgcHJldiwgcXVlcnksIHJlcGVhdCkgewogICAgICBpZiAocmVwZWF0ID09PSB1bmRlZmluZWQpIHsgcmVwZWF0ID0gMTsgfQogICAgICByZXR1cm4gY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBwb3MgPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICB2YXIgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHF1ZXJ5LCBwb3MpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZWF0OyBpKyspIHsKICAgICAgICAgIHZhciBmb3VuZCA9IGN1cnNvci5maW5kKHByZXYpOwogICAgICAgICAgaWYgKGkgPT0gMCAmJiBmb3VuZCAmJiBjdXJzb3JFcXVhbChjdXJzb3IuZnJvbSgpLCBwb3MpKSB7IGZvdW5kID0gY3Vyc29yLmZpbmQocHJldik7IH0KICAgICAgICAgIGlmICghZm91bmQpIHsKICAgICAgICAgICAgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHF1ZXJ5LAogICAgICAgICAgICAgICAgKHByZXYpID8gUG9zKGNtLmxhc3RMaW5lKCkpIDogUG9zKGNtLmZpcnN0TGluZSgpLCAwKSApOwogICAgICAgICAgICBpZiAoIWN1cnNvci5maW5kKHByZXYpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjdXJzb3IuZnJvbSgpOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsZWFyU2VhcmNoSGlnaGxpZ2h0KGNtKSB7CiAgICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgICAgY20ucmVtb3ZlT3ZlcmxheShnZXRTZWFyY2hTdGF0ZShjbSkuZ2V0T3ZlcmxheSgpKTsKICAgICAgc3RhdGUuc2V0T3ZlcmxheShudWxsKTsKICAgICAgaWYgKHN0YXRlLmdldFNjcm9sbGJhckFubm90YXRlKCkpIHsKICAgICAgICBzdGF0ZS5nZXRTY3JvbGxiYXJBbm5vdGF0ZSgpLmNsZWFyKCk7CiAgICAgICAgc3RhdGUuc2V0U2Nyb2xsYmFyQW5ub3RhdGUobnVsbCk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGlzSW5SYW5nZShwb3MsIHN0YXJ0LCBlbmQpIHsKICAgICAgaWYgKHR5cGVvZiBwb3MgIT0gJ251bWJlcicpIHsKICAgICAgICBwb3MgPSBwb3MubGluZTsKICAgICAgfQogICAgICBpZiAoc3RhcnQgaW5zdGFuY2VvZiBBcnJheSkgewogICAgICAgIHJldHVybiBpbkFycmF5KHBvcywgc3RhcnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChlbmQpIHsKICAgICAgICAgIHJldHVybiAocG9zID49IHN0YXJ0ICYmIHBvcyA8PSBlbmQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gcG9zID09IHN0YXJ0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZ2V0VXNlclZpc2libGVMaW5lcyhjbSkgewogICAgICB2YXIgcmVuZGVyZXIgPSBjbS5hY2UucmVuZGVyZXI7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9wOiByZW5kZXJlci5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLAogICAgICAgIGJvdHRvbTogcmVuZGVyZXIuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpCiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNYXJrUG9zKGNtLCB2aW0sIG1hcmtOYW1lKSB7CgogICAgICB2YXIgbWFyayA9IHZpbS5tYXJrc1ttYXJrTmFtZV07CiAgICAgIHJldHVybiBtYXJrICYmIG1hcmsuZmluZCgpOwogICAgfQoKICAgIHZhciBFeENvbW1hbmREaXNwYXRjaGVyID0gZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMuYnVpbGRDb21tYW5kTWFwXygpOwogICAgfTsKICAgIEV4Q29tbWFuZERpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgICBwcm9jZXNzQ29tbWFuZDogZnVuY3Rpb24oY20sIGlucHV0LCBvcHRfcGFyYW1zKSB7CiAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBjbS5jdXJPcC5pc1ZpbU9wID0gdHJ1ZTsKICAgICAgICAgIHRoYXQuX3Byb2Nlc3NDb21tYW5kKGNtLCBpbnB1dCwgb3B0X3BhcmFtcyk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIF9wcm9jZXNzQ29tbWFuZDogZnVuY3Rpb24oY20sIGlucHV0LCBvcHRfcGFyYW1zKSB7CiAgICAgICAgdmFyIHZpbSA9IGNtLnN0YXRlLnZpbTsKICAgICAgICB2YXIgY29tbWFuZEhpc3RvcnlSZWdpc3RlciA9IHZpbUdsb2JhbFN0YXRlLnJlZ2lzdGVyQ29udHJvbGxlci5nZXRSZWdpc3RlcignOicpOwogICAgICAgIHZhciBwcmV2aW91c0NvbW1hbmQgPSBjb21tYW5kSGlzdG9yeVJlZ2lzdGVyLnRvU3RyaW5nKCk7CiAgICAgICAgaWYgKHZpbS52aXN1YWxNb2RlKSB7CiAgICAgICAgICBleGl0VmlzdWFsTW9kZShjbSk7CiAgICAgICAgfQogICAgICAgIHZhciBpbnB1dFN0cmVhbSA9IG5ldyBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbShpbnB1dCk7CiAgICAgICAgY29tbWFuZEhpc3RvcnlSZWdpc3Rlci5zZXRUZXh0KGlucHV0KTsKICAgICAgICB2YXIgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTsKICAgICAgICBwYXJhbXMuaW5wdXQgPSBpbnB1dDsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5wYXJzZUlucHV0XyhjbSwgaW5wdXRTdHJlYW0sIHBhcmFtcyk7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICBzaG93Q29uZmlybShjbSwgZSk7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgICB2YXIgY29tbWFuZDsKICAgICAgICB2YXIgY29tbWFuZE5hbWU7CiAgICAgICAgaWYgKCFwYXJhbXMuY29tbWFuZE5hbWUpIHsKICAgICAgICAgIGlmIChwYXJhbXMubGluZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGNvbW1hbmROYW1lID0gJ21vdmUnOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb21tYW5kID0gdGhpcy5tYXRjaENvbW1hbmRfKHBhcmFtcy5jb21tYW5kTmFtZSk7CiAgICAgICAgICBpZiAoY29tbWFuZCkgewogICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTsKICAgICAgICAgICAgaWYgKGNvbW1hbmQuZXhjbHVkZUZyb21Db21tYW5kSGlzdG9yeSkgewogICAgICAgICAgICAgIGNvbW1hbmRIaXN0b3J5UmVnaXN0ZXIuc2V0VGV4dChwcmV2aW91c0NvbW1hbmQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMucGFyc2VDb21tYW5kQXJnc18oaW5wdXRTdHJlYW0sIHBhcmFtcywgY29tbWFuZCk7CiAgICAgICAgICAgIGlmIChjb21tYW5kLnR5cGUgPT0gJ2V4VG9LZXknKSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21tYW5kLnRvS2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgQ29kZU1pcnJvci5WaW0uaGFuZGxlS2V5KGNtLCBjb21tYW5kLnRvS2V5c1tpXSwgJ21hcHBpbmcnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQudHlwZSA9PSAnZXhUb0V4JykgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvbW1hbmQoY20sIGNvbW1hbmQudG9JbnB1dCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghY29tbWFuZE5hbWUpIHsKICAgICAgICAgIHNob3dDb25maXJtKGNtLCAnTm90IGFuIGVkaXRvciBjb21tYW5kICI6JyArIGlucHV0ICsgJyInKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGV4Q29tbWFuZHNbY29tbWFuZE5hbWVdKGNtLCBwYXJhbXMpOwogICAgICAgICAgaWYgKCghY29tbWFuZCB8fCAhY29tbWFuZC5wb3NzaWJseUFzeW5jKSAmJiBwYXJhbXMuY2FsbGJhY2spIHsKICAgICAgICAgICAgcGFyYW1zLmNhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICBzaG93Q29uZmlybShjbSwgZSk7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGFyc2VJbnB1dF86IGZ1bmN0aW9uKGNtLCBpbnB1dFN0cmVhbSwgcmVzdWx0KSB7CiAgICAgICAgaW5wdXRTdHJlYW0uZWF0V2hpbGUoJzonKTsKICAgICAgICBpZiAoaW5wdXRTdHJlYW0uZWF0KCclJykpIHsKICAgICAgICAgIHJlc3VsdC5saW5lID0gY20uZmlyc3RMaW5lKCk7CiAgICAgICAgICByZXN1bHQubGluZUVuZCA9IGNtLmxhc3RMaW5lKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdC5saW5lID0gdGhpcy5wYXJzZUxpbmVTcGVjXyhjbSwgaW5wdXRTdHJlYW0pOwogICAgICAgICAgaWYgKHJlc3VsdC5saW5lICE9PSB1bmRlZmluZWQgJiYgaW5wdXRTdHJlYW0uZWF0KCcsJykpIHsKICAgICAgICAgICAgcmVzdWx0LmxpbmVFbmQgPSB0aGlzLnBhcnNlTGluZVNwZWNfKGNtLCBpbnB1dFN0cmVhbSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBjb21tYW5kTWF0Y2ggPSBpbnB1dFN0cmVhbS5tYXRjaCgvXihcdyspLyk7CiAgICAgICAgaWYgKGNvbW1hbmRNYXRjaCkgewogICAgICAgICAgcmVzdWx0LmNvbW1hbmROYW1lID0gY29tbWFuZE1hdGNoWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQuY29tbWFuZE5hbWUgPSBpbnB1dFN0cmVhbS5tYXRjaCgvLiovKVswXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0sCiAgICAgIHBhcnNlTGluZVNwZWNfOiBmdW5jdGlvbihjbSwgaW5wdXRTdHJlYW0pIHsKICAgICAgICB2YXIgbnVtYmVyTWF0Y2ggPSBpbnB1dFN0cmVhbS5tYXRjaCgvXihcZCspLyk7CiAgICAgICAgaWYgKG51bWJlck1hdGNoKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobnVtYmVyTWF0Y2hbMV0sIDEwKSAtIDE7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoaW5wdXRTdHJlYW0ubmV4dCgpKSB7CiAgICAgICAgICBjYXNlICcuJzoKICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaW5lU3BlY09mZnNldF8oaW5wdXRTdHJlYW0sIGNtLmdldEN1cnNvcigpLmxpbmUpOwogICAgICAgICAgY2FzZSAnJCc6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlTGluZVNwZWNPZmZzZXRfKGlucHV0U3RyZWFtLCBjbS5sYXN0TGluZSgpKTsKICAgICAgICAgIGNhc2UgJ1wnJzoKICAgICAgICAgICAgdmFyIG1hcmtOYW1lID0gaW5wdXRTdHJlYW0ubmV4dCgpOwogICAgICAgICAgICB2YXIgbWFya1BvcyA9IGdldE1hcmtQb3MoY20sIGNtLnN0YXRlLnZpbSwgbWFya05hbWUpOwogICAgICAgICAgICBpZiAoIW1hcmtQb3MpIHRocm93IG5ldyBFcnJvcignTWFyayBub3Qgc2V0Jyk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlTGluZVNwZWNPZmZzZXRfKGlucHV0U3RyZWFtLCBtYXJrUG9zLmxpbmUpOwogICAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgaW5wdXRTdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUxpbmVTcGVjT2Zmc2V0XyhpbnB1dFN0cmVhbSwgY20uZ2V0Q3Vyc29yKCkubGluZSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBpbnB1dFN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICB9LAogICAgICBwYXJzZUxpbmVTcGVjT2Zmc2V0XzogZnVuY3Rpb24oaW5wdXRTdHJlYW0sIGxpbmUpIHsKICAgICAgICB2YXIgb2Zmc2V0TWF0Y2ggPSBpbnB1dFN0cmVhbS5tYXRjaCgvXihbKy1dKT8oXGQrKS8pOwogICAgICAgIGlmIChvZmZzZXRNYXRjaCkgewogICAgICAgICAgdmFyIG9mZnNldCA9IHBhcnNlSW50KG9mZnNldE1hdGNoWzJdLCAxMCk7CiAgICAgICAgICBpZiAob2Zmc2V0TWF0Y2hbMV0gPT0gIi0iKSB7CiAgICAgICAgICAgIGxpbmUgLT0gb2Zmc2V0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZSArPSBvZmZzZXQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lOwogICAgICB9LAogICAgICBwYXJzZUNvbW1hbmRBcmdzXzogZnVuY3Rpb24oaW5wdXRTdHJlYW0sIHBhcmFtcywgY29tbWFuZCkgewogICAgICAgIGlmIChpbnB1dFN0cmVhbS5lb2woKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBwYXJhbXMuYXJnU3RyaW5nID0gaW5wdXRTdHJlYW0ubWF0Y2goLy4qLylbMF07CiAgICAgICAgdmFyIGRlbGltID0gY29tbWFuZC5hcmdEZWxpbWl0ZXIgfHwgL1xzKy87CiAgICAgICAgdmFyIGFyZ3MgPSB0cmltKHBhcmFtcy5hcmdTdHJpbmcpLnNwbGl0KGRlbGltKTsKICAgICAgICBpZiAoYXJncy5sZW5ndGggJiYgYXJnc1swXSkgewogICAgICAgICAgcGFyYW1zLmFyZ3MgPSBhcmdzOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbWF0Y2hDb21tYW5kXzogZnVuY3Rpb24oY29tbWFuZE5hbWUpIHsKICAgICAgICBmb3IgKHZhciBpID0gY29tbWFuZE5hbWUubGVuZ3RoOyBpID4gMDsgaS0tKSB7CiAgICAgICAgICB2YXIgcHJlZml4ID0gY29tbWFuZE5hbWUuc3Vic3RyaW5nKDAsIGkpOwogICAgICAgICAgaWYgKHRoaXMuY29tbWFuZE1hcF9bcHJlZml4XSkgewogICAgICAgICAgICB2YXIgY29tbWFuZCA9IHRoaXMuY29tbWFuZE1hcF9bcHJlZml4XTsKICAgICAgICAgICAgaWYgKGNvbW1hbmQubmFtZS5pbmRleE9mKGNvbW1hbmROYW1lKSA9PT0gMCkgewogICAgICAgICAgICAgIHJldHVybiBjb21tYW5kOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9LAogICAgICBidWlsZENvbW1hbmRNYXBfOiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNvbW1hbmRNYXBfID0ge307CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWZhdWx0RXhDb21tYW5kTWFwLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY29tbWFuZCA9IGRlZmF1bHRFeENvbW1hbmRNYXBbaV07CiAgICAgICAgICB2YXIga2V5ID0gY29tbWFuZC5zaG9ydE5hbWUgfHwgY29tbWFuZC5uYW1lOwogICAgICAgICAgdGhpcy5jb21tYW5kTWFwX1trZXldID0gY29tbWFuZDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1hcDogZnVuY3Rpb24obGhzLCByaHMsIGN0eCkgewogICAgICAgIGlmIChsaHMgIT0gJzonICYmIGxocy5jaGFyQXQoMCkgPT0gJzonKSB7CiAgICAgICAgICBpZiAoY3R4KSB7IHRocm93IEVycm9yKCdNb2RlIG5vdCBzdXBwb3J0ZWQgZm9yIGV4IG1hcHBpbmdzJyk7IH0KICAgICAgICAgIHZhciBjb21tYW5kTmFtZSA9IGxocy5zdWJzdHJpbmcoMSk7CiAgICAgICAgICBpZiAocmhzICE9ICc6JyAmJiByaHMuY2hhckF0KDApID09ICc6JykgewogICAgICAgICAgICB0aGlzLmNvbW1hbmRNYXBfW2NvbW1hbmROYW1lXSA9IHsKICAgICAgICAgICAgICBuYW1lOiBjb21tYW5kTmFtZSwKICAgICAgICAgICAgICB0eXBlOiAnZXhUb0V4JywKICAgICAgICAgICAgICB0b0lucHV0OiByaHMuc3Vic3RyaW5nKDEpLAogICAgICAgICAgICAgIHVzZXI6IHRydWUKICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuY29tbWFuZE1hcF9bY29tbWFuZE5hbWVdID0gewogICAgICAgICAgICAgIG5hbWU6IGNvbW1hbmROYW1lLAogICAgICAgICAgICAgIHR5cGU6ICdleFRvS2V5JywKICAgICAgICAgICAgICB0b0tleXM6IHJocywKICAgICAgICAgICAgICB1c2VyOiB0cnVlCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChyaHMgIT0gJzonICYmIHJocy5jaGFyQXQoMCkgPT0gJzonKSB7CiAgICAgICAgICAgIHZhciBtYXBwaW5nID0gewogICAgICAgICAgICAgIGtleXM6IGxocywKICAgICAgICAgICAgICB0eXBlOiAna2V5VG9FeCcsCiAgICAgICAgICAgICAgZXhBcmdzOiB7IGlucHV0OiByaHMuc3Vic3RyaW5nKDEpIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGN0eCkgeyBtYXBwaW5nLmNvbnRleHQgPSBjdHg7IH0KICAgICAgICAgICAgZGVmYXVsdEtleW1hcC51bnNoaWZ0KG1hcHBpbmcpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSB7CiAgICAgICAgICAgICAga2V5czogbGhzLAogICAgICAgICAgICAgIHR5cGU6ICdrZXlUb0tleScsCiAgICAgICAgICAgICAgdG9LZXlzOiByaHMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGN0eCkgeyBtYXBwaW5nLmNvbnRleHQgPSBjdHg7IH0KICAgICAgICAgICAgZGVmYXVsdEtleW1hcC51bnNoaWZ0KG1hcHBpbmcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgdW5tYXA6IGZ1bmN0aW9uKGxocywgY3R4KSB7CiAgICAgICAgaWYgKGxocyAhPSAnOicgJiYgbGhzLmNoYXJBdCgwKSA9PSAnOicpIHsKICAgICAgICAgIGlmIChjdHgpIHsgdGhyb3cgRXJyb3IoJ01vZGUgbm90IHN1cHBvcnRlZCBmb3IgZXggbWFwcGluZ3MnKTsgfQogICAgICAgICAgdmFyIGNvbW1hbmROYW1lID0gbGhzLnN1YnN0cmluZygxKTsKICAgICAgICAgIGlmICh0aGlzLmNvbW1hbmRNYXBfW2NvbW1hbmROYW1lXSAmJiB0aGlzLmNvbW1hbmRNYXBfW2NvbW1hbmROYW1lXS51c2VyKSB7CiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbW1hbmRNYXBfW2NvbW1hbmROYW1lXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIga2V5cyA9IGxoczsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVmYXVsdEtleW1hcC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoa2V5cyA9PSBkZWZhdWx0S2V5bWFwW2ldLmtleXMKICAgICAgICAgICAgICAgICYmIGRlZmF1bHRLZXltYXBbaV0uY29udGV4dCA9PT0gY3R4KSB7CiAgICAgICAgICAgICAgZGVmYXVsdEtleW1hcC5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwoKICAgIHZhciBleENvbW1hbmRzID0gewogICAgICBjb2xvcnNjaGVtZTogZnVuY3Rpb24oY20sIHBhcmFtcykgewogICAgICAgIGlmICghcGFyYW1zLmFyZ3MgfHwgcGFyYW1zLmFyZ3MubGVuZ3RoIDwgMSkgewogICAgICAgICAgc2hvd0NvbmZpcm0oY20sIGNtLmdldE9wdGlvbigndGhlbWUnKSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNtLnNldE9wdGlvbigndGhlbWUnLCBwYXJhbXMuYXJnc1swXSk7CiAgICAgIH0sCiAgICAgIG1hcDogZnVuY3Rpb24oY20sIHBhcmFtcywgY3R4KSB7CiAgICAgICAgdmFyIG1hcEFyZ3MgPSBwYXJhbXMuYXJnczsKICAgICAgICBpZiAoIW1hcEFyZ3MgfHwgbWFwQXJncy5sZW5ndGggPCAyKSB7CiAgICAgICAgICBpZiAoY20pIHsKICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdJbnZhbGlkIG1hcHBpbmc6ICcgKyBwYXJhbXMuaW5wdXQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLm1hcChtYXBBcmdzWzBdLCBtYXBBcmdzWzFdLCBjdHgpOwogICAgICB9LAogICAgICBpbWFwOiBmdW5jdGlvbihjbSwgcGFyYW1zKSB7IHRoaXMubWFwKGNtLCBwYXJhbXMsICdpbnNlcnQnKTsgfSwKICAgICAgbm1hcDogZnVuY3Rpb24oY20sIHBhcmFtcykgeyB0aGlzLm1hcChjbSwgcGFyYW1zLCAnbm9ybWFsJyk7IH0sCiAgICAgIHZtYXA6IGZ1bmN0aW9uKGNtLCBwYXJhbXMpIHsgdGhpcy5tYXAoY20sIHBhcmFtcywgJ3Zpc3VhbCcpOyB9LAogICAgICB1bm1hcDogZnVuY3Rpb24oY20sIHBhcmFtcywgY3R4KSB7CiAgICAgICAgdmFyIG1hcEFyZ3MgPSBwYXJhbXMuYXJnczsKICAgICAgICBpZiAoIW1hcEFyZ3MgfHwgbWFwQXJncy5sZW5ndGggPCAxKSB7CiAgICAgICAgICBpZiAoY20pIHsKICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdObyBzdWNoIG1hcHBpbmc6ICcgKyBwYXJhbXMuaW5wdXQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLnVubWFwKG1hcEFyZ3NbMF0sIGN0eCk7CiAgICAgIH0sCiAgICAgIG1vdmU6IGZ1bmN0aW9uKGNtLCBwYXJhbXMpIHsKICAgICAgICBjb21tYW5kRGlzcGF0Y2hlci5wcm9jZXNzQ29tbWFuZChjbSwgY20uc3RhdGUudmltLCB7CiAgICAgICAgICAgIHR5cGU6ICdtb3Rpb24nLAogICAgICAgICAgICBtb3Rpb246ICdtb3ZlVG9MaW5lT3JFZGdlT2ZEb2N1bWVudCcsCiAgICAgICAgICAgIG1vdGlvbkFyZ3M6IHsgZm9yd2FyZDogZmFsc2UsIGV4cGxpY2l0UmVwZWF0OiB0cnVlLAogICAgICAgICAgICAgIGxpbmV3aXNlOiB0cnVlIH0sCiAgICAgICAgICAgIHJlcGVhdE92ZXJyaWRlOiBwYXJhbXMubGluZSsxfSk7CiAgICAgIH0sCiAgICAgIHNldDogZnVuY3Rpb24oY20sIHBhcmFtcykgewogICAgICAgIHZhciBzZXRBcmdzID0gcGFyYW1zLmFyZ3M7CiAgICAgICAgdmFyIHNldENmZyA9IHBhcmFtcy5zZXRDZmcgfHwge307CiAgICAgICAgaWYgKCFzZXRBcmdzIHx8IHNldEFyZ3MubGVuZ3RoIDwgMSkgewogICAgICAgICAgaWYgKGNtKSB7CiAgICAgICAgICAgIHNob3dDb25maXJtKGNtLCAnSW52YWxpZCBtYXBwaW5nOiAnICsgcGFyYW1zLmlucHV0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGV4cHIgPSBzZXRBcmdzWzBdLnNwbGl0KCc9Jyk7CiAgICAgICAgdmFyIG9wdGlvbk5hbWUgPSBleHByWzBdOwogICAgICAgIHZhciB2YWx1ZSA9IGV4cHJbMV07CiAgICAgICAgdmFyIGZvcmNlR2V0ID0gZmFsc2U7CgogICAgICAgIGlmIChvcHRpb25OYW1lLmNoYXJBdChvcHRpb25OYW1lLmxlbmd0aCAtIDEpID09ICc/JykgewogICAgICAgICAgaWYgKHZhbHVlKSB7IHRocm93IEVycm9yKCdUcmFpbGluZyBjaGFyYWN0ZXJzOiAnICsgcGFyYW1zLmFyZ1N0cmluZyk7IH0KICAgICAgICAgIG9wdGlvbk5hbWUgPSBvcHRpb25OYW1lLnN1YnN0cmluZygwLCBvcHRpb25OYW1lLmxlbmd0aCAtIDEpOwogICAgICAgICAgZm9yY2VHZXQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25OYW1lLnN1YnN0cmluZygwLCAyKSA9PSAnbm8nKSB7CiAgICAgICAgICBvcHRpb25OYW1lID0gb3B0aW9uTmFtZS5zdWJzdHJpbmcoMik7CiAgICAgICAgICB2YWx1ZSA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9wdGlvbklzQm9vbGVhbiA9IG9wdGlvbnNbb3B0aW9uTmFtZV0gJiYgb3B0aW9uc1tvcHRpb25OYW1lXS50eXBlID09ICdib29sZWFuJzsKICAgICAgICBpZiAob3B0aW9uSXNCb29sZWFuICYmIHZhbHVlID09IHVuZGVmaW5lZCkgewogICAgICAgICAgdmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIW9wdGlvbklzQm9vbGVhbiAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGZvcmNlR2V0KSB7CiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBnZXRPcHRpb24ob3B0aW9uTmFtZSwgY20sIHNldENmZyk7CiAgICAgICAgICBpZiAob2xkVmFsdWUgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgICBzaG93Q29uZmlybShjbSwgb2xkVmFsdWUubWVzc2FnZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKG9sZFZhbHVlID09PSB0cnVlIHx8IG9sZFZhbHVlID09PSBmYWxzZSkgewogICAgICAgICAgICBzaG93Q29uZmlybShjbSwgJyAnICsgKG9sZFZhbHVlID8gJycgOiAnbm8nKSArIG9wdGlvbk5hbWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICcgICcgKyBvcHRpb25OYW1lICsgJz0nICsgb2xkVmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc2V0T3B0aW9uUmV0dXJuID0gc2V0T3B0aW9uKG9wdGlvbk5hbWUsIHZhbHVlLCBjbSwgc2V0Q2ZnKTsKICAgICAgICAgIGlmIChzZXRPcHRpb25SZXR1cm4gaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgICAgICBzaG93Q29uZmlybShjbSwgc2V0T3B0aW9uUmV0dXJuLm1lc3NhZ2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgc2V0bG9jYWw6IGZ1bmN0aW9uIChjbSwgcGFyYW1zKSB7CiAgICAgICAgcGFyYW1zLnNldENmZyA9IHtzY29wZTogJ2xvY2FsJ307CiAgICAgICAgdGhpcy5zZXQoY20sIHBhcmFtcyk7CiAgICAgIH0sCiAgICAgIHNldGdsb2JhbDogZnVuY3Rpb24gKGNtLCBwYXJhbXMpIHsKICAgICAgICBwYXJhbXMuc2V0Q2ZnID0ge3Njb3BlOiAnZ2xvYmFsJ307CiAgICAgICAgdGhpcy5zZXQoY20sIHBhcmFtcyk7CiAgICAgIH0sCiAgICAgIHJlZ2lzdGVyczogZnVuY3Rpb24oY20sIHBhcmFtcykgewogICAgICAgIHZhciByZWdBcmdzID0gcGFyYW1zLmFyZ3M7CiAgICAgICAgdmFyIHJlZ2lzdGVycyA9IHZpbUdsb2JhbFN0YXRlLnJlZ2lzdGVyQ29udHJvbGxlci5yZWdpc3RlcnM7CiAgICAgICAgdmFyIHJlZ0luZm8gPSAnLS0tLS0tLS0tLVJlZ2lzdGVycy0tLS0tLS0tLS08YnI+PGJyPic7CiAgICAgICAgaWYgKCFyZWdBcmdzKSB7CiAgICAgICAgICBmb3IgKHZhciByZWdpc3Rlck5hbWUgaW4gcmVnaXN0ZXJzKSB7CiAgICAgICAgICAgIHZhciB0ZXh0ID0gcmVnaXN0ZXJzW3JlZ2lzdGVyTmFtZV0udG9TdHJpbmcoKTsKICAgICAgICAgICAgaWYgKHRleHQubGVuZ3RoKSB7CiAgICAgICAgICAgICAgcmVnSW5mbyArPSAnIicgKyByZWdpc3Rlck5hbWUgKyAnICAgICcgKyB0ZXh0ICsgJzxicj4nOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciByZWdpc3Rlck5hbWU7CiAgICAgICAgICByZWdBcmdzID0gcmVnQXJncy5qb2luKCcnKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVnQXJncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICByZWdpc3Rlck5hbWUgPSByZWdBcmdzLmNoYXJBdChpKTsKICAgICAgICAgICAgaWYgKCF2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuaXNWYWxpZFJlZ2lzdGVyKHJlZ2lzdGVyTmFtZSkpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmVnaXN0ZXIgPSByZWdpc3RlcnNbcmVnaXN0ZXJOYW1lXSB8fCBuZXcgUmVnaXN0ZXIoKTsKICAgICAgICAgICAgcmVnSW5mbyArPSAnIicgKyByZWdpc3Rlck5hbWUgKyAnICAgICcgKyByZWdpc3Rlci50b1N0cmluZygpICsgJzxicj4nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzaG93Q29uZmlybShjbSwgcmVnSW5mbyk7CiAgICAgIH0sCiAgICAgIHNvcnQ6IGZ1bmN0aW9uKGNtLCBwYXJhbXMpIHsKICAgICAgICB2YXIgcmV2ZXJzZSwgaWdub3JlQ2FzZSwgdW5pcXVlLCBudW1iZXIsIHBhdHRlcm47CiAgICAgICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkgewogICAgICAgICAgaWYgKHBhcmFtcy5hcmdTdHJpbmcpIHsKICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ocGFyYW1zLmFyZ1N0cmluZyk7CiAgICAgICAgICAgIGlmIChhcmdzLmVhdCgnIScpKSB7IHJldmVyc2UgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmIChhcmdzLmVvbCgpKSB7IHJldHVybjsgfQogICAgICAgICAgICBpZiAoIWFyZ3MuZWF0U3BhY2UoKSkgeyByZXR1cm4gJ0ludmFsaWQgYXJndW1lbnRzJzsgfQogICAgICAgICAgICB2YXIgb3B0cyA9IGFyZ3MubWF0Y2goLyhbZGludW94XSspP1xzKihcLy4rXC8pP1xzKi8pOwogICAgICAgICAgICBpZiAoIW9wdHMgJiYgIWFyZ3MuZW9sKCkpIHsgcmV0dXJuICdJbnZhbGlkIGFyZ3VtZW50cyc7IH0KICAgICAgICAgICAgaWYgKG9wdHNbMV0pIHsKICAgICAgICAgICAgICBpZ25vcmVDYXNlID0gb3B0c1sxXS5pbmRleE9mKCdpJykgIT0gLTE7CiAgICAgICAgICAgICAgdW5pcXVlID0gb3B0c1sxXS5pbmRleE9mKCd1JykgIT0gLTE7CiAgICAgICAgICAgICAgdmFyIGRlY2ltYWwgPSBvcHRzWzFdLmluZGV4T2YoJ2QnKSAhPSAtMSB8fCBvcHRzWzFdLmluZGV4T2YoJ24nKSAhPSAtMSAmJiAxOwogICAgICAgICAgICAgIHZhciBoZXggPSBvcHRzWzFdLmluZGV4T2YoJ3gnKSAhPSAtMSAmJiAxOwogICAgICAgICAgICAgIHZhciBvY3RhbCA9IG9wdHNbMV0uaW5kZXhPZignbycpICE9IC0xICYmIDE7CiAgICAgICAgICAgICAgaWYgKGRlY2ltYWwgKyBoZXggKyBvY3RhbCA+IDEpIHsgcmV0dXJuICdJbnZhbGlkIGFyZ3VtZW50cyc7IH0KICAgICAgICAgICAgICBudW1iZXIgPSBkZWNpbWFsICYmICdkZWNpbWFsJyB8fCBoZXggJiYgJ2hleCcgfHwgb2N0YWwgJiYgJ29jdGFsJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAob3B0c1syXSkgewogICAgICAgICAgICAgIHBhdHRlcm4gPSBuZXcgUmVnRXhwKG9wdHNbMl0uc3Vic3RyKDEsIG9wdHNbMl0ubGVuZ3RoIC0gMiksIGlnbm9yZUNhc2UgPyAnaScgOiAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGVyciA9IHBhcnNlQXJncygpOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgIHNob3dDb25maXJtKGNtLCBlcnIgKyAnOiAnICsgcGFyYW1zLmFyZ1N0cmluZyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBsaW5lU3RhcnQgPSBwYXJhbXMubGluZSB8fCBjbS5maXJzdExpbmUoKTsKICAgICAgICB2YXIgbGluZUVuZCA9IHBhcmFtcy5saW5lRW5kIHx8IHBhcmFtcy5saW5lIHx8IGNtLmxhc3RMaW5lKCk7CiAgICAgICAgaWYgKGxpbmVTdGFydCA9PSBsaW5lRW5kKSB7IHJldHVybjsgfQogICAgICAgIHZhciBjdXJTdGFydCA9IFBvcyhsaW5lU3RhcnQsIDApOwogICAgICAgIHZhciBjdXJFbmQgPSBQb3MobGluZUVuZCwgbGluZUxlbmd0aChjbSwgbGluZUVuZCkpOwogICAgICAgIHZhciB0ZXh0ID0gY20uZ2V0UmFuZ2UoY3VyU3RhcnQsIGN1ckVuZCkuc3BsaXQoJ1xuJyk7CiAgICAgICAgdmFyIG51bWJlclJlZ2V4ID0gcGF0dGVybiA/IHBhdHRlcm4gOgogICAgICAgICAgIChudW1iZXIgPT0gJ2RlY2ltYWwnKSA/IC8oLT8pKFtcZF0rKS8gOgogICAgICAgICAgIChudW1iZXIgPT0gJ2hleCcpID8gLygtPykoPzoweCk/KFswLTlhLWZdKykvaSA6CiAgICAgICAgICAgKG51bWJlciA9PSAnb2N0YWwnKSA/IC8oWzAtN10rKS8gOiBudWxsOwogICAgICAgIHZhciByYWRpeCA9IChudW1iZXIgPT0gJ2RlY2ltYWwnKSA/IDEwIDogKG51bWJlciA9PSAnaGV4JykgPyAxNiA6IChudW1iZXIgPT0gJ29jdGFsJykgPyA4IDogbnVsbDsKICAgICAgICB2YXIgbnVtUGFydCA9IFtdLCB0ZXh0UGFydCA9IFtdOwogICAgICAgIGlmIChudW1iZXIgfHwgcGF0dGVybikgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBtYXRjaFBhcnQgPSBwYXR0ZXJuID8gdGV4dFtpXS5tYXRjaChwYXR0ZXJuKSA6IG51bGw7CiAgICAgICAgICAgIGlmIChtYXRjaFBhcnQgJiYgbWF0Y2hQYXJ0WzBdICE9ICcnKSB7CiAgICAgICAgICAgICAgbnVtUGFydC5wdXNoKG1hdGNoUGFydCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXBhdHRlcm4gJiYgbnVtYmVyUmVnZXguZXhlYyh0ZXh0W2ldKSkgewogICAgICAgICAgICAgIG51bVBhcnQucHVzaCh0ZXh0W2ldKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0ZXh0UGFydC5wdXNoKHRleHRbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRleHRQYXJ0ID0gdGV4dDsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gY29tcGFyZUZuKGEsIGIpIHsKICAgICAgICAgIGlmIChyZXZlcnNlKSB7IHZhciB0bXA7IHRtcCA9IGE7IGEgPSBiOyBiID0gdG1wOyB9CiAgICAgICAgICBpZiAoaWdub3JlQ2FzZSkgeyBhID0gYS50b0xvd2VyQ2FzZSgpOyBiID0gYi50b0xvd2VyQ2FzZSgpOyB9CiAgICAgICAgICB2YXIgYW51bSA9IG51bWJlciAmJiBudW1iZXJSZWdleC5leGVjKGEpOwogICAgICAgICAgdmFyIGJudW0gPSBudW1iZXIgJiYgbnVtYmVyUmVnZXguZXhlYyhiKTsKICAgICAgICAgIGlmICghYW51bSkgeyByZXR1cm4gYSA8IGIgPyAtMSA6IDE7IH0KICAgICAgICAgIGFudW0gPSBwYXJzZUludCgoYW51bVsxXSArIGFudW1bMl0pLnRvTG93ZXJDYXNlKCksIHJhZGl4KTsKICAgICAgICAgIGJudW0gPSBwYXJzZUludCgoYm51bVsxXSArIGJudW1bMl0pLnRvTG93ZXJDYXNlKCksIHJhZGl4KTsKICAgICAgICAgIHJldHVybiBhbnVtIC0gYm51bTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gY29tcGFyZVBhdHRlcm5GbihhLCBiKSB7CiAgICAgICAgICBpZiAocmV2ZXJzZSkgeyB2YXIgdG1wOyB0bXAgPSBhOyBhID0gYjsgYiA9IHRtcDsgfQogICAgICAgICAgaWYgKGlnbm9yZUNhc2UpIHsgYVswXSA9IGFbMF0udG9Mb3dlckNhc2UoKTsgYlswXSA9IGJbMF0udG9Mb3dlckNhc2UoKTsgfQogICAgICAgICAgcmV0dXJuIChhWzBdIDwgYlswXSkgPyAtMSA6IDE7CiAgICAgICAgfQogICAgICAgIG51bVBhcnQuc29ydChwYXR0ZXJuID8gY29tcGFyZVBhdHRlcm5GbiA6IGNvbXBhcmVGbik7CiAgICAgICAgaWYgKHBhdHRlcm4pIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtUGFydC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBudW1QYXJ0W2ldID0gbnVtUGFydFtpXS5pbnB1dDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFudW1iZXIpIHsgdGV4dFBhcnQuc29ydChjb21wYXJlRm4pOyB9CiAgICAgICAgdGV4dCA9ICghcmV2ZXJzZSkgPyB0ZXh0UGFydC5jb25jYXQobnVtUGFydCkgOiBudW1QYXJ0LmNvbmNhdCh0ZXh0UGFydCk7CiAgICAgICAgaWYgKHVuaXF1ZSkgeyAvLyBSZW1vdmUgZHVwbGljYXRlIGxpbmVzCiAgICAgICAgICB2YXIgdGV4dE9sZCA9IHRleHQ7CiAgICAgICAgICB2YXIgbGFzdExpbmU7CiAgICAgICAgICB0ZXh0ID0gW107CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRPbGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKHRleHRPbGRbaV0gIT0gbGFzdExpbmUpIHsKICAgICAgICAgICAgICB0ZXh0LnB1c2godGV4dE9sZFtpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGFzdExpbmUgPSB0ZXh0T2xkW2ldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjbS5yZXBsYWNlUmFuZ2UodGV4dC5qb2luKCdcbicpLCBjdXJTdGFydCwgY3VyRW5kKTsKICAgICAgfSwKICAgICAgZ2xvYmFsOiBmdW5jdGlvbihjbSwgcGFyYW1zKSB7CiAgICAgICAgdmFyIGFyZ1N0cmluZyA9IHBhcmFtcy5hcmdTdHJpbmc7CiAgICAgICAgaWYgKCFhcmdTdHJpbmcpIHsKICAgICAgICAgIHNob3dDb25maXJtKGNtLCAnUmVndWxhciBFeHByZXNzaW9uIG1pc3NpbmcgZnJvbSBnbG9iYWwnKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmVTdGFydCA9IChwYXJhbXMubGluZSAhPT0gdW5kZWZpbmVkKSA/IHBhcmFtcy5saW5lIDogY20uZmlyc3RMaW5lKCk7CiAgICAgICAgdmFyIGxpbmVFbmQgPSBwYXJhbXMubGluZUVuZCB8fCBwYXJhbXMubGluZSB8fCBjbS5sYXN0TGluZSgpOwogICAgICAgIHZhciB0b2tlbnMgPSBzcGxpdEJ5U2xhc2goYXJnU3RyaW5nKTsKICAgICAgICB2YXIgcmVnZXhQYXJ0ID0gYXJnU3RyaW5nLCBjbWQ7CiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGgpIHsKICAgICAgICAgIHJlZ2V4UGFydCA9IHRva2Vuc1swXTsKICAgICAgICAgIGNtZCA9IHRva2Vucy5zbGljZSgxLCB0b2tlbnMubGVuZ3RoKS5qb2luKCcvJyk7CiAgICAgICAgfQogICAgICAgIGlmIChyZWdleFBhcnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgdXBkYXRlU2VhcmNoUXVlcnkoY20sIHJlZ2V4UGFydCwgdHJ1ZSAvKiogaWdub3JlQ2FzZSAqLywKICAgICAgICAgICAgIHRydWUgLyoqIHNtYXJ0Q2FzZSAqLyk7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdJbnZhbGlkIHJlZ2V4OiAnICsgcmVnZXhQYXJ0KTsKICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBxdWVyeSA9IGdldFNlYXJjaFN0YXRlKGNtKS5nZXRRdWVyeSgpOwogICAgICAgIHZhciBtYXRjaGVkTGluZXMgPSBbXSwgY29udGVudCA9ICcnOwogICAgICAgIGZvciAodmFyIGkgPSBsaW5lU3RhcnQ7IGkgPD0gbGluZUVuZDsgaSsrKSB7CiAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHF1ZXJ5LnRlc3QoY20uZ2V0TGluZShpKSk7CiAgICAgICAgICBpZiAobWF0Y2hlZCkgewogICAgICAgICAgICBtYXRjaGVkTGluZXMucHVzaChpKzEpOwogICAgICAgICAgICBjb250ZW50Kz0gY20uZ2V0TGluZShpKSArICc8YnI+JzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFjbWQpIHsKICAgICAgICAgIHNob3dDb25maXJtKGNtLCBjb250ZW50KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgbmV4dENvbW1hbmQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChpbmRleCA8IG1hdGNoZWRMaW5lcy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGNvbW1hbmQgPSBtYXRjaGVkTGluZXNbaW5kZXhdICsgY21kOwogICAgICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLnByb2Nlc3NDb21tYW5kKGNtLCBjb21tYW5kLCB7CiAgICAgICAgICAgICAgY2FsbGJhY2s6IG5leHRDb21tYW5kCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9OwogICAgICAgIG5leHRDb21tYW5kKCk7CiAgICAgIH0sCiAgICAgIHN1YnN0aXR1dGU6IGZ1bmN0aW9uKGNtLCBwYXJhbXMpIHsKICAgICAgICBpZiAoIWNtLmdldFNlYXJjaEN1cnNvcikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWFyY2ggZmVhdHVyZSBub3QgYXZhaWxhYmxlLiBSZXF1aXJlcyBzZWFyY2hjdXJzb3IuanMgb3IgJyArCiAgICAgICAgICAgICAgJ2FueSBvdGhlciBnZXRTZWFyY2hDdXJzb3IgaW1wbGVtZW50YXRpb24uJyk7CiAgICAgICAgfQogICAgICAgIHZhciBhcmdTdHJpbmcgPSBwYXJhbXMuYXJnU3RyaW5nOwogICAgICAgIHZhciB0b2tlbnMgPSBhcmdTdHJpbmcgPyBzcGxpdEJ5U2VwYXJhdG9yKGFyZ1N0cmluZywgYXJnU3RyaW5nWzBdKSA6IFtdOwogICAgICAgIHZhciByZWdleFBhcnQsIHJlcGxhY2VQYXJ0ID0gJycsIHRyYWlsaW5nLCBmbGFnc1BhcnQsIGNvdW50OwogICAgICAgIHZhciBjb25maXJtID0gZmFsc2U7IC8vIFdoZXRoZXIgdG8gY29uZmlybSBlYWNoIHJlcGxhY2UuCiAgICAgICAgdmFyIGdsb2JhbCA9IGZhbHNlOyAvLyBUcnVlIHRvIHJlcGxhY2UgYWxsIGluc3RhbmNlcyBvbiBhIGxpbmUsIGZhbHNlIHRvIHJlcGxhY2Ugb25seSAxLgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoKSB7CiAgICAgICAgICByZWdleFBhcnQgPSB0b2tlbnNbMF07CiAgICAgICAgICByZXBsYWNlUGFydCA9IHRva2Vuc1sxXTsKICAgICAgICAgIGlmIChyZWdleFBhcnQgJiYgcmVnZXhQYXJ0W3JlZ2V4UGFydC5sZW5ndGggLSAxXSA9PT0gJyQnKSB7CiAgICAgICAgICAgIHJlZ2V4UGFydCA9IHJlZ2V4UGFydC5zbGljZSgwLCByZWdleFBhcnQubGVuZ3RoIC0gMSkgKyAnXFxuJzsKICAgICAgICAgICAgcmVwbGFjZVBhcnQgPSByZXBsYWNlUGFydCA/IHJlcGxhY2VQYXJ0ICsgJ1xuJyA6ICdcbic7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAocmVwbGFjZVBhcnQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAoZ2V0T3B0aW9uKCdwY3JlJykpIHsKICAgICAgICAgICAgICByZXBsYWNlUGFydCA9IHVuZXNjYXBlUmVnZXhSZXBsYWNlKHJlcGxhY2VQYXJ0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXBsYWNlUGFydCA9IHRyYW5zbGF0ZVJlZ2V4UmVwbGFjZShyZXBsYWNlUGFydCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmltR2xvYmFsU3RhdGUubGFzdFN1YnN0aXR1dGVSZXBsYWNlUGFydCA9IHJlcGxhY2VQYXJ0OwogICAgICAgICAgfQogICAgICAgICAgdHJhaWxpbmcgPSB0b2tlbnNbMl0gPyB0b2tlbnNbMl0uc3BsaXQoJyAnKSA6IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoYXJnU3RyaW5nICYmIGFyZ1N0cmluZy5sZW5ndGgpIHsKICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdTdWJzdGl0dXRpb25zIHNob3VsZCBiZSBvZiB0aGUgZm9ybSAnICsKICAgICAgICAgICAgICAgICc6cy9wYXR0ZXJuL3JlcGxhY2UvJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRyYWlsaW5nKSB7CiAgICAgICAgICBmbGFnc1BhcnQgPSB0cmFpbGluZ1swXTsKICAgICAgICAgIGNvdW50ID0gcGFyc2VJbnQodHJhaWxpbmdbMV0pOwogICAgICAgICAgaWYgKGZsYWdzUGFydCkgewogICAgICAgICAgICBpZiAoZmxhZ3NQYXJ0LmluZGV4T2YoJ2MnKSAhPSAtMSkgewogICAgICAgICAgICAgIGNvbmZpcm0gPSB0cnVlOwogICAgICAgICAgICAgIGZsYWdzUGFydC5yZXBsYWNlKCdjJywgJycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmbGFnc1BhcnQuaW5kZXhPZignZycpICE9IC0xKSB7CiAgICAgICAgICAgICAgZ2xvYmFsID0gdHJ1ZTsKICAgICAgICAgICAgICBmbGFnc1BhcnQucmVwbGFjZSgnZycsICcnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZWdleFBhcnQgPSByZWdleFBhcnQucmVwbGFjZSgvXC8vZywgIlxcLyIpICsgJy8nICsgZmxhZ3NQYXJ0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAocmVnZXhQYXJ0KSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB1cGRhdGVTZWFyY2hRdWVyeShjbSwgcmVnZXhQYXJ0LCB0cnVlIC8qKiBpZ25vcmVDYXNlICovLAogICAgICAgICAgICAgIHRydWUgLyoqIHNtYXJ0Q2FzZSAqLyk7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIHNob3dDb25maXJtKGNtLCAnSW52YWxpZCByZWdleDogJyArIHJlZ2V4UGFydCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVwbGFjZVBhcnQgPSByZXBsYWNlUGFydCB8fCB2aW1HbG9iYWxTdGF0ZS5sYXN0U3Vic3RpdHV0ZVJlcGxhY2VQYXJ0OwogICAgICAgIGlmIChyZXBsYWNlUGFydCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBzaG93Q29uZmlybShjbSwgJ05vIHByZXZpb3VzIHN1YnN0aXR1dGUgcmVndWxhciBleHByZXNzaW9uJyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgICAgICB2YXIgcXVlcnkgPSBzdGF0ZS5nZXRRdWVyeSgpOwogICAgICAgIHZhciBsaW5lU3RhcnQgPSAocGFyYW1zLmxpbmUgIT09IHVuZGVmaW5lZCkgPyBwYXJhbXMubGluZSA6IGNtLmdldEN1cnNvcigpLmxpbmU7CiAgICAgICAgdmFyIGxpbmVFbmQgPSBwYXJhbXMubGluZUVuZCB8fCBsaW5lU3RhcnQ7CiAgICAgICAgaWYgKGxpbmVTdGFydCA9PSBjbS5maXJzdExpbmUoKSAmJiBsaW5lRW5kID09IGNtLmxhc3RMaW5lKCkpIHsKICAgICAgICAgIGxpbmVFbmQgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvdW50KSB7CiAgICAgICAgICBsaW5lU3RhcnQgPSBsaW5lRW5kOwogICAgICAgICAgbGluZUVuZCA9IGxpbmVTdGFydCArIGNvdW50IC0gMTsKICAgICAgICB9CiAgICAgICAgdmFyIHN0YXJ0UG9zID0gY2xpcEN1cnNvclRvQ29udGVudChjbSwgUG9zKGxpbmVTdGFydCwgMCkpOwogICAgICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHN0YXJ0UG9zKTsKICAgICAgICBkb1JlcGxhY2UoY20sIGNvbmZpcm0sIGdsb2JhbCwgbGluZVN0YXJ0LCBsaW5lRW5kLCBjdXJzb3IsIHF1ZXJ5LCByZXBsYWNlUGFydCwgcGFyYW1zLmNhbGxiYWNrKTsKICAgICAgfSwKICAgICAgcmVkbzogQ29kZU1pcnJvci5jb21tYW5kcy5yZWRvLAogICAgICB1bmRvOiBDb2RlTWlycm9yLmNvbW1hbmRzLnVuZG8sCiAgICAgIHdyaXRlOiBmdW5jdGlvbihjbSkgewogICAgICAgIGlmIChDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUpIHsKICAgICAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuc2F2ZShjbSk7CiAgICAgICAgfSBlbHNlIGlmIChjbS5zYXZlKSB7CiAgICAgICAgICBjbS5zYXZlKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBub2hsc2VhcmNoOiBmdW5jdGlvbihjbSkgewogICAgICAgIGNsZWFyU2VhcmNoSGlnaGxpZ2h0KGNtKTsKICAgICAgfSwKICAgICAgeWFuazogZnVuY3Rpb24gKGNtKSB7CiAgICAgICAgdmFyIGN1ciA9IGNvcHlDdXJzb3IoY20uZ2V0Q3Vyc29yKCkpOwogICAgICAgIHZhciBsaW5lID0gY3VyLmxpbmU7CiAgICAgICAgdmFyIGxpbmVUZXh0ID0gY20uZ2V0TGluZShsaW5lKTsKICAgICAgICB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIucHVzaFRleHQoCiAgICAgICAgICAnMCcsICd5YW5rJywgbGluZVRleHQsIHRydWUsIHRydWUpOwogICAgICB9LAogICAgICBkZWxtYXJrczogZnVuY3Rpb24oY20sIHBhcmFtcykgewogICAgICAgIGlmICghcGFyYW1zLmFyZ1N0cmluZyB8fCAhdHJpbShwYXJhbXMuYXJnU3RyaW5nKSkgewogICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdBcmd1bWVudCByZXF1aXJlZCcpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXRlID0gY20uc3RhdGUudmltOwogICAgICAgIHZhciBzdHJlYW0gPSBuZXcgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0odHJpbShwYXJhbXMuYXJnU3RyaW5nKSk7CiAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgICAgdmFyIGNvdW50ID0gc3RyZWFtLnBvczsKCiAgICAgICAgICBpZiAoIXN0cmVhbS5tYXRjaCgvW2EtekEtWl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdJbnZhbGlkIGFyZ3VtZW50OiAnICsgcGFyYW1zLmFyZ1N0cmluZy5zdWJzdHJpbmcoY291bnQpKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBzeW0gPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgnLScsIHRydWUpKSB7CiAgICAgICAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9bYS16QS1aXS8sIGZhbHNlKSkgewogICAgICAgICAgICAgIHNob3dDb25maXJtKGNtLCAnSW52YWxpZCBhcmd1bWVudDogJyArIHBhcmFtcy5hcmdTdHJpbmcuc3Vic3RyaW5nKGNvdW50KSk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgc3RhcnRNYXJrID0gc3ltOwogICAgICAgICAgICB2YXIgZmluaXNoTWFyayA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgIGlmIChpc0xvd2VyQ2FzZShzdGFydE1hcmspICYmIGlzTG93ZXJDYXNlKGZpbmlzaE1hcmspIHx8CiAgICAgICAgICAgICAgICBpc1VwcGVyQ2FzZShzdGFydE1hcmspICYmIGlzVXBwZXJDYXNlKGZpbmlzaE1hcmspKSB7CiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gc3RhcnRNYXJrLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgICAgICAgdmFyIGZpbmlzaCA9IGZpbmlzaE1hcmsuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gZmluaXNoKSB7CiAgICAgICAgICAgICAgICBzaG93Q29uZmlybShjbSwgJ0ludmFsaWQgYXJndW1lbnQ6ICcgKyBwYXJhbXMuYXJnU3RyaW5nLnN1YnN0cmluZyhjb3VudCkpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8PSBmaW5pc2ggLSBzdGFydDsgaisrKSB7CiAgICAgICAgICAgICAgICB2YXIgbWFyayA9IFN0cmluZy5mcm9tQ2hhckNvZGUoc3RhcnQgKyBqKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5tYXJrc1ttYXJrXTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc2hvd0NvbmZpcm0oY20sICdJbnZhbGlkIGFyZ3VtZW50OiAnICsgc3RhcnRNYXJrICsgJy0nKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5tYXJrc1tzeW1dOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgICB2YXIgZXhDb21tYW5kRGlzcGF0Y2hlciA9IG5ldyBFeENvbW1hbmREaXNwYXRjaGVyKCk7CiAgICBmdW5jdGlvbiBkb1JlcGxhY2UoY20sIGNvbmZpcm0sIGdsb2JhbCwgbGluZVN0YXJ0LCBsaW5lRW5kLCBzZWFyY2hDdXJzb3IsIHF1ZXJ5LAogICAgICAgIHJlcGxhY2VXaXRoLCBjYWxsYmFjaykgewogICAgICBjbS5zdGF0ZS52aW0uZXhNb2RlID0gdHJ1ZTsKICAgICAgdmFyIGRvbmUgPSBmYWxzZTsKICAgICAgdmFyIGxhc3RQb3MgPSBzZWFyY2hDdXJzb3IuZnJvbSgpOwogICAgICBmdW5jdGlvbiByZXBsYWNlQWxsKCkgewogICAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIHdoaWxlICghZG9uZSkgewogICAgICAgICAgICByZXBsYWNlKCk7CiAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgIH0KICAgICAgICAgIHN0b3AoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBmdW5jdGlvbiByZXBsYWNlKCkgewogICAgICAgIHZhciB0ZXh0ID0gY20uZ2V0UmFuZ2Uoc2VhcmNoQ3Vyc29yLmZyb20oKSwgc2VhcmNoQ3Vyc29yLnRvKCkpOwogICAgICAgIHZhciBuZXdUZXh0ID0gdGV4dC5yZXBsYWNlKHF1ZXJ5LCByZXBsYWNlV2l0aCk7CiAgICAgICAgc2VhcmNoQ3Vyc29yLnJlcGxhY2UobmV3VGV4dCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbmV4dCgpIHsKICAgICAgICB3aGlsZShzZWFyY2hDdXJzb3IuZmluZE5leHQoKSAmJgogICAgICAgICAgICAgIGlzSW5SYW5nZShzZWFyY2hDdXJzb3IuZnJvbSgpLCBsaW5lU3RhcnQsIGxpbmVFbmQpKSB7CiAgICAgICAgICBpZiAoIWdsb2JhbCAmJiBsYXN0UG9zICYmIHNlYXJjaEN1cnNvci5mcm9tKCkubGluZSA9PSBsYXN0UG9zLmxpbmUpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjbS5zY3JvbGxJbnRvVmlldyhzZWFyY2hDdXJzb3IuZnJvbSgpLCAzMCk7CiAgICAgICAgICBjbS5zZXRTZWxlY3Rpb24oc2VhcmNoQ3Vyc29yLmZyb20oKSwgc2VhcmNoQ3Vyc29yLnRvKCkpOwogICAgICAgICAgbGFzdFBvcyA9IHNlYXJjaEN1cnNvci5mcm9tKCk7CiAgICAgICAgICBkb25lID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRvbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHN0b3AoY2xvc2UpIHsKICAgICAgICBpZiAoY2xvc2UpIHsgY2xvc2UoKTsgfQogICAgICAgIGNtLmZvY3VzKCk7CiAgICAgICAgaWYgKGxhc3RQb3MpIHsKICAgICAgICAgIGNtLnNldEN1cnNvcihsYXN0UG9zKTsKICAgICAgICAgIHZhciB2aW0gPSBjbS5zdGF0ZS52aW07CiAgICAgICAgICB2aW0uZXhNb2RlID0gZmFsc2U7CiAgICAgICAgICB2aW0ubGFzdEhQb3MgPSB2aW0ubGFzdEhTUG9zID0gbGFzdFBvcy5jaDsKICAgICAgICB9CiAgICAgICAgaWYgKGNhbGxiYWNrKSB7IGNhbGxiYWNrKCk7IH0KICAgICAgfQogICAgICBmdW5jdGlvbiBvblByb21wdEtleURvd24oZSwgX3ZhbHVlLCBjbG9zZSkgewogICAgICAgIENvZGVNaXJyb3IuZV9zdG9wKGUpOwogICAgICAgIHZhciBrZXlOYW1lID0gQ29kZU1pcnJvci5rZXlOYW1lKGUpOwogICAgICAgIHN3aXRjaCAoa2V5TmFtZSkgewogICAgICAgICAgY2FzZSAnWSc6CiAgICAgICAgICAgIHJlcGxhY2UoKTsgbmV4dCgpOyBicmVhazsKICAgICAgICAgIGNhc2UgJ04nOgogICAgICAgICAgICBuZXh0KCk7IGJyZWFrOwogICAgICAgICAgY2FzZSAnQSc6CiAgICAgICAgICAgIHZhciBzYXZlZENhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkOwogICAgICAgICAgICBjbS5vcGVyYXRpb24ocmVwbGFjZUFsbCk7CiAgICAgICAgICAgIGNhbGxiYWNrID0gc2F2ZWRDYWxsYmFjazsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdMJzoKICAgICAgICAgICAgcmVwbGFjZSgpOwogICAgICAgICAgY2FzZSAnUSc6CiAgICAgICAgICBjYXNlICdFc2MnOgogICAgICAgICAgY2FzZSAnQ3RybC1DJzoKICAgICAgICAgIGNhc2UgJ0N0cmwtWyc6CiAgICAgICAgICAgIHN0b3AoY2xvc2UpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGRvbmUpIHsgc3RvcChjbG9zZSk7IH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBuZXh0KCk7CiAgICAgIGlmIChkb25lKSB7CiAgICAgICAgc2hvd0NvbmZpcm0oY20sICdObyBtYXRjaGVzIGZvciAnICsgcXVlcnkuc291cmNlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCFjb25maXJtKSB7CiAgICAgICAgcmVwbGFjZUFsbCgpOwogICAgICAgIGlmIChjYWxsYmFjaykgeyBjYWxsYmFjaygpOyB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHNob3dQcm9tcHQoY20sIHsKICAgICAgICBwcmVmaXg6ICdyZXBsYWNlIHdpdGggPHN0cm9uZz4nICsgcmVwbGFjZVdpdGggKyAnPC9zdHJvbmc+ICh5L24vYS9xL2wpJywKICAgICAgICBvbktleURvd246IG9uUHJvbXB0S2V5RG93bgogICAgICB9KTsKICAgIH0KCiAgICBDb2RlTWlycm9yLmtleU1hcC52aW0gPSB7CiAgICAgIGF0dGFjaDogYXR0YWNoVmltTWFwLAogICAgICBkZXRhY2g6IGRldGFjaFZpbU1hcCwKICAgICAgY2FsbDogY21LZXkKICAgIH07CgogICAgZnVuY3Rpb24gZXhpdEluc2VydE1vZGUoY20pIHsKICAgICAgdmFyIHZpbSA9IGNtLnN0YXRlLnZpbTsKICAgICAgdmFyIG1hY3JvTW9kZVN0YXRlID0gdmltR2xvYmFsU3RhdGUubWFjcm9Nb2RlU3RhdGU7CiAgICAgIHZhciBpbnNlcnRNb2RlQ2hhbmdlUmVnaXN0ZXIgPSB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIoJy4nKTsKICAgICAgdmFyIGlzUGxheWluZyA9IG1hY3JvTW9kZVN0YXRlLmlzUGxheWluZzsKICAgICAgdmFyIGxhc3RDaGFuZ2UgPSBtYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXM7CiAgICAgIGlmICghaXNQbGF5aW5nKSB7CiAgICAgICAgY20ub2ZmKCdjaGFuZ2UnLCBvbkNoYW5nZSk7CiAgICAgICAgQ29kZU1pcnJvci5vZmYoY20uZ2V0SW5wdXRGaWVsZCgpLCAna2V5ZG93bicsIG9uS2V5RXZlbnRUYXJnZXRLZXlEb3duKTsKICAgICAgfQogICAgICBpZiAoIWlzUGxheWluZyAmJiB2aW0uaW5zZXJ0TW9kZVJlcGVhdCA+IDEpIHsKICAgICAgICByZXBlYXRMYXN0RWRpdChjbSwgdmltLCB2aW0uaW5zZXJ0TW9kZVJlcGVhdCAtIDEsCiAgICAgICAgICAgIHRydWUgLyoqIHJlcGVhdEZvckluc2VydCAqLyk7CiAgICAgICAgdmltLmxhc3RFZGl0SW5wdXRTdGF0ZS5yZXBlYXRPdmVycmlkZSA9IHZpbS5pbnNlcnRNb2RlUmVwZWF0OwogICAgICB9CiAgICAgIGRlbGV0ZSB2aW0uaW5zZXJ0TW9kZVJlcGVhdDsKICAgICAgdmltLmluc2VydE1vZGUgPSBmYWxzZTsKICAgICAgY20uc2V0Q3Vyc29yKGNtLmdldEN1cnNvcigpLmxpbmUsIGNtLmdldEN1cnNvcigpLmNoLTEpOwogICAgICBjbS5zZXRPcHRpb24oJ2tleU1hcCcsICd2aW0nKTsKICAgICAgY20uc2V0T3B0aW9uKCdkaXNhYmxlSW5wdXQnLCB0cnVlKTsKICAgICAgY20udG9nZ2xlT3ZlcndyaXRlKGZhbHNlKTsgLy8gZXhpdCByZXBsYWNlIG1vZGUgaWYgd2Ugd2VyZSBpbiBpdC4KICAgICAgaW5zZXJ0TW9kZUNoYW5nZVJlZ2lzdGVyLnNldFRleHQobGFzdENoYW5nZS5jaGFuZ2VzLmpvaW4oJycpKTsKICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICJ2aW0tbW9kZS1jaGFuZ2UiLCB7bW9kZTogIm5vcm1hbCJ9KTsKICAgICAgaWYgKG1hY3JvTW9kZVN0YXRlLmlzUmVjb3JkaW5nKSB7CiAgICAgICAgbG9nSW5zZXJ0TW9kZUNoYW5nZShtYWNyb01vZGVTdGF0ZSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfbWFwQ29tbWFuZChjb21tYW5kKSB7CiAgICAgIGRlZmF1bHRLZXltYXAudW5zaGlmdChjb21tYW5kKTsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXBDb21tYW5kKGtleXMsIHR5cGUsIG5hbWUsIGFyZ3MsIGV4dHJhKSB7CiAgICAgIHZhciBjb21tYW5kID0ge2tleXM6IGtleXMsIHR5cGU6IHR5cGV9OwogICAgICBjb21tYW5kW3R5cGVdID0gbmFtZTsKICAgICAgY29tbWFuZFt0eXBlICsgIkFyZ3MiXSA9IGFyZ3M7CiAgICAgIGZvciAodmFyIGtleSBpbiBleHRyYSkKICAgICAgICBjb21tYW5kW2tleV0gPSBleHRyYVtrZXldOwogICAgICBfbWFwQ29tbWFuZChjb21tYW5kKTsKICAgIH0KICAgIGRlZmluZU9wdGlvbignaW5zZXJ0TW9kZUVzY0tleXNUaW1lb3V0JywgMjAwLCAnbnVtYmVyJyk7CgogICAgQ29kZU1pcnJvci5rZXlNYXBbJ3ZpbS1pbnNlcnQnXSA9IHsKICAgICAgZmFsbHRocm91Z2g6IFsnZGVmYXVsdCddLAogICAgICBhdHRhY2g6IGF0dGFjaFZpbU1hcCwKICAgICAgZGV0YWNoOiBkZXRhY2hWaW1NYXAsCiAgICAgIGNhbGw6IGNtS2V5CiAgICB9OwoKICAgIENvZGVNaXJyb3Iua2V5TWFwWyd2aW0tcmVwbGFjZSddID0gewogICAgICAnQmFja3NwYWNlJzogJ2dvQ2hhckxlZnQnLAogICAgICBmYWxsdGhyb3VnaDogWyd2aW0taW5zZXJ0J10sCiAgICAgIGF0dGFjaDogYXR0YWNoVmltTWFwLAogICAgICBkZXRhY2g6IGRldGFjaFZpbU1hcCwKICAgICAgY2FsbDogY21LZXkKICAgIH07CgogICAgZnVuY3Rpb24gZXhlY3V0ZU1hY3JvUmVnaXN0ZXIoY20sIHZpbSwgbWFjcm9Nb2RlU3RhdGUsIHJlZ2lzdGVyTmFtZSkgewogICAgICB2YXIgcmVnaXN0ZXIgPSB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIocmVnaXN0ZXJOYW1lKTsKICAgICAgaWYgKHJlZ2lzdGVyTmFtZSA9PSAnOicpIHsKICAgICAgICBpZiAocmVnaXN0ZXIua2V5QnVmZmVyWzBdKSB7CiAgICAgICAgICBleENvbW1hbmREaXNwYXRjaGVyLnByb2Nlc3NDb21tYW5kKGNtLCByZWdpc3Rlci5rZXlCdWZmZXJbMF0pOwogICAgICAgIH0KICAgICAgICBtYWNyb01vZGVTdGF0ZS5pc1BsYXlpbmcgPSBmYWxzZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGtleUJ1ZmZlciA9IHJlZ2lzdGVyLmtleUJ1ZmZlcjsKICAgICAgdmFyIGltYyA9IDA7CiAgICAgIG1hY3JvTW9kZVN0YXRlLmlzUGxheWluZyA9IHRydWU7CiAgICAgIG1hY3JvTW9kZVN0YXRlLnJlcGxheVNlYXJjaFF1ZXJpZXMgPSByZWdpc3Rlci5zZWFyY2hRdWVyaWVzLnNsaWNlKDApOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleUJ1ZmZlci5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB0ZXh0ID0ga2V5QnVmZmVyW2ldOwogICAgICAgIHZhciBtYXRjaCwga2V5OwogICAgICAgIHdoaWxlICh0ZXh0KSB7CiAgICAgICAgICBtYXRjaCA9ICgvPFx3Ky0uKz8+fDxcdys+fC4vKS5leGVjKHRleHQpOwogICAgICAgICAga2V5ID0gbWF0Y2hbMF07CiAgICAgICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBrZXkubGVuZ3RoKTsKICAgICAgICAgIENvZGVNaXJyb3IuVmltLmhhbmRsZUtleShjbSwga2V5LCAnbWFjcm8nKTsKICAgICAgICAgIGlmICh2aW0uaW5zZXJ0TW9kZSkgewogICAgICAgICAgICB2YXIgY2hhbmdlcyA9IHJlZ2lzdGVyLmluc2VydE1vZGVDaGFuZ2VzW2ltYysrXS5jaGFuZ2VzOwogICAgICAgICAgICB2aW1HbG9iYWxTdGF0ZS5tYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMuY2hhbmdlcyA9CiAgICAgICAgICAgICAgICBjaGFuZ2VzOwogICAgICAgICAgICByZXBlYXRJbnNlcnRNb2RlQ2hhbmdlcyhjbSwgY2hhbmdlcywgMSk7CiAgICAgICAgICAgIGV4aXRJbnNlcnRNb2RlKGNtKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgbWFjcm9Nb2RlU3RhdGUuaXNQbGF5aW5nID0gZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gbG9nS2V5KG1hY3JvTW9kZVN0YXRlLCBrZXkpIHsKICAgICAgaWYgKG1hY3JvTW9kZVN0YXRlLmlzUGxheWluZykgeyByZXR1cm47IH0KICAgICAgdmFyIHJlZ2lzdGVyTmFtZSA9IG1hY3JvTW9kZVN0YXRlLmxhdGVzdFJlZ2lzdGVyOwogICAgICB2YXIgcmVnaXN0ZXIgPSB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIocmVnaXN0ZXJOYW1lKTsKICAgICAgaWYgKHJlZ2lzdGVyKSB7CiAgICAgICAgcmVnaXN0ZXIucHVzaFRleHQoa2V5KTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGxvZ0luc2VydE1vZGVDaGFuZ2UobWFjcm9Nb2RlU3RhdGUpIHsKICAgICAgaWYgKG1hY3JvTW9kZVN0YXRlLmlzUGxheWluZykgeyByZXR1cm47IH0KICAgICAgdmFyIHJlZ2lzdGVyTmFtZSA9IG1hY3JvTW9kZVN0YXRlLmxhdGVzdFJlZ2lzdGVyOwogICAgICB2YXIgcmVnaXN0ZXIgPSB2aW1HbG9iYWxTdGF0ZS5yZWdpc3RlckNvbnRyb2xsZXIuZ2V0UmVnaXN0ZXIocmVnaXN0ZXJOYW1lKTsKICAgICAgaWYgKHJlZ2lzdGVyICYmIHJlZ2lzdGVyLnB1c2hJbnNlcnRNb2RlQ2hhbmdlcykgewogICAgICAgIHJlZ2lzdGVyLnB1c2hJbnNlcnRNb2RlQ2hhbmdlcyhtYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbG9nU2VhcmNoUXVlcnkobWFjcm9Nb2RlU3RhdGUsIHF1ZXJ5KSB7CiAgICAgIGlmIChtYWNyb01vZGVTdGF0ZS5pc1BsYXlpbmcpIHsgcmV0dXJuOyB9CiAgICAgIHZhciByZWdpc3Rlck5hbWUgPSBtYWNyb01vZGVTdGF0ZS5sYXRlc3RSZWdpc3RlcjsKICAgICAgdmFyIHJlZ2lzdGVyID0gdmltR2xvYmFsU3RhdGUucmVnaXN0ZXJDb250cm9sbGVyLmdldFJlZ2lzdGVyKHJlZ2lzdGVyTmFtZSk7CiAgICAgIGlmIChyZWdpc3RlciAmJiByZWdpc3Rlci5wdXNoU2VhcmNoUXVlcnkpIHsKICAgICAgICByZWdpc3Rlci5wdXNoU2VhcmNoUXVlcnkocXVlcnkpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBvbkNoYW5nZShjbSwgY2hhbmdlT2JqKSB7CiAgICAgIHZhciBtYWNyb01vZGVTdGF0ZSA9IHZpbUdsb2JhbFN0YXRlLm1hY3JvTW9kZVN0YXRlOwogICAgICB2YXIgbGFzdENoYW5nZSA9IG1hY3JvTW9kZVN0YXRlLmxhc3RJbnNlcnRNb2RlQ2hhbmdlczsKICAgICAgaWYgKCFtYWNyb01vZGVTdGF0ZS5pc1BsYXlpbmcpIHsKICAgICAgICB3aGlsZShjaGFuZ2VPYmopIHsKICAgICAgICAgIGxhc3RDaGFuZ2UuZXhwZWN0Q3Vyc29yQWN0aXZpdHlGb3JDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgaWYgKGxhc3RDaGFuZ2UuaWdub3JlQ291bnQgPiAxKSB7CiAgICAgICAgICAgIGxhc3RDaGFuZ2UuaWdub3JlQ291bnQtLTsKICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlT2JqLm9yaWdpbiA9PSAnK2lucHV0JyB8fCBjaGFuZ2VPYmoub3JpZ2luID09ICdwYXN0ZScKICAgICAgICAgICAgICB8fCBjaGFuZ2VPYmoub3JpZ2luID09PSB1bmRlZmluZWQgLyogb25seSBpbiB0ZXN0aW5nICovKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25Db3VudCA9IGNtLmxpc3RTZWxlY3Rpb25zKCkubGVuZ3RoOwogICAgICAgICAgICBpZiAoc2VsZWN0aW9uQ291bnQgPiAxKQogICAgICAgICAgICAgIGxhc3RDaGFuZ2UuaWdub3JlQ291bnQgPSBzZWxlY3Rpb25Db3VudDsKICAgICAgICAgICAgdmFyIHRleHQgPSBjaGFuZ2VPYmoudGV4dC5qb2luKCdcbicpOwogICAgICAgICAgICBpZiAobGFzdENoYW5nZS5tYXliZVJlc2V0KSB7CiAgICAgICAgICAgICAgbGFzdENoYW5nZS5jaGFuZ2VzID0gW107CiAgICAgICAgICAgICAgbGFzdENoYW5nZS5tYXliZVJlc2V0ID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgICBpZiAoY20uc3RhdGUub3ZlcndyaXRlICYmICEvXG4vLnRlc3QodGV4dCkpIHsKICAgICAgICAgICAgICAgIGxhc3RDaGFuZ2UuY2hhbmdlcy5wdXNoKFt0ZXh0XSk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxhc3RDaGFuZ2UuY2hhbmdlcy5wdXNoKHRleHQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY2hhbmdlT2JqID0gY2hhbmdlT2JqLm5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBvbkN1cnNvckFjdGl2aXR5KGNtKSB7CiAgICAgIHZhciB2aW0gPSBjbS5zdGF0ZS52aW07CiAgICAgIGlmICh2aW0uaW5zZXJ0TW9kZSkgewogICAgICAgIHZhciBtYWNyb01vZGVTdGF0ZSA9IHZpbUdsb2JhbFN0YXRlLm1hY3JvTW9kZVN0YXRlOwogICAgICAgIGlmIChtYWNyb01vZGVTdGF0ZS5pc1BsYXlpbmcpIHsgcmV0dXJuOyB9CiAgICAgICAgdmFyIGxhc3RDaGFuZ2UgPSBtYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXM7CiAgICAgICAgaWYgKGxhc3RDaGFuZ2UuZXhwZWN0Q3Vyc29yQWN0aXZpdHlGb3JDaGFuZ2UpIHsKICAgICAgICAgIGxhc3RDaGFuZ2UuZXhwZWN0Q3Vyc29yQWN0aXZpdHlGb3JDaGFuZ2UgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGFzdENoYW5nZS5tYXliZVJlc2V0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIWNtLmN1ck9wLmlzVmltT3ApIHsKICAgICAgICBoYW5kbGVFeHRlcm5hbFNlbGVjdGlvbihjbSwgdmltKTsKICAgICAgfQogICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICB1cGRhdGVGYWtlQ3Vyc29yKGNtKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdXBkYXRlRmFrZUN1cnNvcihjbSkgewogICAgICB2YXIgdmltID0gY20uc3RhdGUudmltOwogICAgICB2YXIgZnJvbSA9IGNsaXBDdXJzb3JUb0NvbnRlbnQoY20sIGNvcHlDdXJzb3IodmltLnNlbC5oZWFkKSk7CiAgICAgIHZhciB0byA9IG9mZnNldEN1cnNvcihmcm9tLCAwLCAxKTsKICAgICAgaWYgKHZpbS5mYWtlQ3Vyc29yKSB7CiAgICAgICAgdmltLmZha2VDdXJzb3IuY2xlYXIoKTsKICAgICAgfQogICAgICB2aW0uZmFrZUN1cnNvciA9IGNtLm1hcmtUZXh0KGZyb20sIHRvLCB7Y2xhc3NOYW1lOiAnY20tYW5pbWF0ZS1mYXQtY3Vyc29yJ30pOwogICAgfQogICAgZnVuY3Rpb24gaGFuZGxlRXh0ZXJuYWxTZWxlY3Rpb24oY20sIHZpbSwga2VlcEhQb3MpIHsKICAgICAgdmFyIGFuY2hvciA9IGNtLmdldEN1cnNvcignYW5jaG9yJyk7CiAgICAgIHZhciBoZWFkID0gY20uZ2V0Q3Vyc29yKCdoZWFkJyk7CiAgICAgIGlmICh2aW0udmlzdWFsTW9kZSAmJiAhY20uc29tZXRoaW5nU2VsZWN0ZWQoKSkgewogICAgICAgIGV4aXRWaXN1YWxNb2RlKGNtLCBmYWxzZSk7CiAgICAgIH0gZWxzZSBpZiAoIXZpbS52aXN1YWxNb2RlICYmICF2aW0uaW5zZXJ0TW9kZSAmJiBjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAgICAgdmltLnZpc3VhbE1vZGUgPSB0cnVlOwogICAgICAgIHZpbS52aXN1YWxMaW5lID0gZmFsc2U7CiAgICAgICAgQ29kZU1pcnJvci5zaWduYWwoY20sICJ2aW0tbW9kZS1jaGFuZ2UiLCB7bW9kZTogInZpc3VhbCJ9KTsKICAgICAgfQogICAgICBpZiAodmltLnZpc3VhbE1vZGUpIHsKICAgICAgICB2YXIgaGVhZE9mZnNldCA9ICFjdXJzb3JJc0JlZm9yZShoZWFkLCBhbmNob3IpID8gLTEgOiAwOwogICAgICAgIHZhciBhbmNob3JPZmZzZXQgPSBjdXJzb3JJc0JlZm9yZShoZWFkLCBhbmNob3IpID8gLTEgOiAwOwogICAgICAgIGhlYWQgPSBvZmZzZXRDdXJzb3IoaGVhZCwgMCwgaGVhZE9mZnNldCk7CiAgICAgICAgYW5jaG9yID0gb2Zmc2V0Q3Vyc29yKGFuY2hvciwgMCwgYW5jaG9yT2Zmc2V0KTsKICAgICAgICB2aW0uc2VsID0gewogICAgICAgICAgYW5jaG9yOiBhbmNob3IsCiAgICAgICAgICBoZWFkOiBoZWFkCiAgICAgICAgfTsKICAgICAgICB1cGRhdGVNYXJrKGNtLCB2aW0sICc8JywgY3Vyc29yTWluKGhlYWQsIGFuY2hvcikpOwogICAgICAgIHVwZGF0ZU1hcmsoY20sIHZpbSwgJz4nLCBjdXJzb3JNYXgoaGVhZCwgYW5jaG9yKSk7CiAgICAgIH0gZWxzZSBpZiAoIXZpbS5pbnNlcnRNb2RlICYmICFrZWVwSFBvcykgewogICAgICAgIHZpbS5sYXN0SFBvcyA9IGNtLmdldEN1cnNvcigpLmNoOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBJbnNlcnRNb2RlS2V5KGtleU5hbWUpIHsKICAgICAgdGhpcy5rZXlOYW1lID0ga2V5TmFtZTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uS2V5RXZlbnRUYXJnZXRLZXlEb3duKGUpIHsKICAgICAgdmFyIG1hY3JvTW9kZVN0YXRlID0gdmltR2xvYmFsU3RhdGUubWFjcm9Nb2RlU3RhdGU7CiAgICAgIHZhciBsYXN0Q2hhbmdlID0gbWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzOwogICAgICB2YXIga2V5TmFtZSA9IENvZGVNaXJyb3Iua2V5TmFtZShlKTsKICAgICAgaWYgKCFrZXlOYW1lKSB7IHJldHVybjsgfQogICAgICBmdW5jdGlvbiBvbktleUZvdW5kKCkgewogICAgICAgIGlmIChsYXN0Q2hhbmdlLm1heWJlUmVzZXQpIHsKICAgICAgICAgIGxhc3RDaGFuZ2UuY2hhbmdlcyA9IFtdOwogICAgICAgICAgbGFzdENoYW5nZS5tYXliZVJlc2V0ID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGxhc3RDaGFuZ2UuY2hhbmdlcy5wdXNoKG5ldyBJbnNlcnRNb2RlS2V5KGtleU5hbWUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoa2V5TmFtZS5pbmRleE9mKCdEZWxldGUnKSAhPSAtMSB8fCBrZXlOYW1lLmluZGV4T2YoJ0JhY2tzcGFjZScpICE9IC0xKSB7CiAgICAgICAgQ29kZU1pcnJvci5sb29rdXBLZXkoa2V5TmFtZSwgJ3ZpbS1pbnNlcnQnLCBvbktleUZvdW5kKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcmVwZWF0TGFzdEVkaXQoY20sIHZpbSwgcmVwZWF0LCByZXBlYXRGb3JJbnNlcnQpIHsKICAgICAgdmFyIG1hY3JvTW9kZVN0YXRlID0gdmltR2xvYmFsU3RhdGUubWFjcm9Nb2RlU3RhdGU7CiAgICAgIG1hY3JvTW9kZVN0YXRlLmlzUGxheWluZyA9IHRydWU7CiAgICAgIHZhciBpc0FjdGlvbiA9ICEhdmltLmxhc3RFZGl0QWN0aW9uQ29tbWFuZDsKICAgICAgdmFyIGNhY2hlZElucHV0U3RhdGUgPSB2aW0uaW5wdXRTdGF0ZTsKICAgICAgZnVuY3Rpb24gcmVwZWF0Q29tbWFuZCgpIHsKICAgICAgICBpZiAoaXNBY3Rpb24pIHsKICAgICAgICAgIGNvbW1hbmREaXNwYXRjaGVyLnByb2Nlc3NBY3Rpb24oY20sIHZpbSwgdmltLmxhc3RFZGl0QWN0aW9uQ29tbWFuZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbW1hbmREaXNwYXRjaGVyLmV2YWxJbnB1dChjbSwgdmltKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gcmVwZWF0SW5zZXJ0KHJlcGVhdCkgewogICAgICAgIGlmIChtYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMuY2hhbmdlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICByZXBlYXQgPSAhdmltLmxhc3RFZGl0QWN0aW9uQ29tbWFuZCA/IDEgOiByZXBlYXQ7CiAgICAgICAgICB2YXIgY2hhbmdlT2JqZWN0ID0gbWFjcm9Nb2RlU3RhdGUubGFzdEluc2VydE1vZGVDaGFuZ2VzOwogICAgICAgICAgcmVwZWF0SW5zZXJ0TW9kZUNoYW5nZXMoY20sIGNoYW5nZU9iamVjdC5jaGFuZ2VzLCByZXBlYXQpOwogICAgICAgIH0KICAgICAgfQogICAgICB2aW0uaW5wdXRTdGF0ZSA9IHZpbS5sYXN0RWRpdElucHV0U3RhdGU7CiAgICAgIGlmIChpc0FjdGlvbiAmJiB2aW0ubGFzdEVkaXRBY3Rpb25Db21tYW5kLmludGVybGFjZUluc2VydFJlcGVhdCkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVwZWF0OyBpKyspIHsKICAgICAgICAgIHJlcGVhdENvbW1hbmQoKTsKICAgICAgICAgIHJlcGVhdEluc2VydCgxKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKCFyZXBlYXRGb3JJbnNlcnQpIHsKICAgICAgICAgIHJlcGVhdENvbW1hbmQoKTsKICAgICAgICB9CiAgICAgICAgcmVwZWF0SW5zZXJ0KHJlcGVhdCk7CiAgICAgIH0KICAgICAgdmltLmlucHV0U3RhdGUgPSBjYWNoZWRJbnB1dFN0YXRlOwogICAgICBpZiAodmltLmluc2VydE1vZGUgJiYgIXJlcGVhdEZvckluc2VydCkgewogICAgICAgIGV4aXRJbnNlcnRNb2RlKGNtKTsKICAgICAgfQogICAgICBtYWNyb01vZGVTdGF0ZS5pc1BsYXlpbmcgPSBmYWxzZTsKICAgIH0KCiAgICBmdW5jdGlvbiByZXBlYXRJbnNlcnRNb2RlQ2hhbmdlcyhjbSwgY2hhbmdlcywgcmVwZWF0KSB7CiAgICAgIGZ1bmN0aW9uIGtleUhhbmRsZXIoYmluZGluZykgewogICAgICAgIGlmICh0eXBlb2YgYmluZGluZyA9PSAnc3RyaW5nJykgewogICAgICAgICAgQ29kZU1pcnJvci5jb21tYW5kc1tiaW5kaW5nXShjbSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJpbmRpbmcoY20pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICB2YXIgaGVhZCA9IGNtLmdldEN1cnNvcignaGVhZCcpOwogICAgICB2YXIgdmlzdWFsQmxvY2sgPSB2aW1HbG9iYWxTdGF0ZS5tYWNyb01vZGVTdGF0ZS5sYXN0SW5zZXJ0TW9kZUNoYW5nZXMudmlzdWFsQmxvY2s7CiAgICAgIGlmICh2aXN1YWxCbG9jaykgewogICAgICAgIHNlbGVjdEZvckluc2VydChjbSwgaGVhZCwgdmlzdWFsQmxvY2sgKyAxKTsKICAgICAgICByZXBlYXQgPSBjbS5saXN0U2VsZWN0aW9ucygpLmxlbmd0aDsKICAgICAgICBjbS5zZXRDdXJzb3IoaGVhZCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXBlYXQ7IGkrKykgewogICAgICAgIGlmICh2aXN1YWxCbG9jaykgewogICAgICAgICAgY20uc2V0Q3Vyc29yKG9mZnNldEN1cnNvcihoZWFkLCBpLCAwKSk7CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hhbmdlcy5sZW5ndGg7IGorKykgewogICAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbal07CiAgICAgICAgICBpZiAoY2hhbmdlIGluc3RhbmNlb2YgSW5zZXJ0TW9kZUtleSkgewogICAgICAgICAgICBDb2RlTWlycm9yLmxvb2t1cEtleShjaGFuZ2Uua2V5TmFtZSwgJ3ZpbS1pbnNlcnQnLCBrZXlIYW5kbGVyKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNoYW5nZSA9PSAic3RyaW5nIikgewogICAgICAgICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIGNtLnJlcGxhY2VSYW5nZShjaGFuZ2UsIGN1ciwgY3VyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IGNtLmdldEN1cnNvcigpOwogICAgICAgICAgICB2YXIgZW5kID0gb2Zmc2V0Q3Vyc29yKHN0YXJ0LCAwLCBjaGFuZ2VbMF0ubGVuZ3RoKTsKICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGNoYW5nZVswXSwgc3RhcnQsIGVuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh2aXN1YWxCbG9jaykgewogICAgICAgIGNtLnNldEN1cnNvcihvZmZzZXRDdXJzb3IoaGVhZCwgMCwgMSkpOwogICAgICB9CiAgICB9CgogICAgcmVzZXRWaW1HbG9iYWxTdGF0ZSgpOwogIENvZGVNaXJyb3IuVmltID0gVmltKCk7CgogIFZpbSA9IENvZGVNaXJyb3IuVmltOwoKICB2YXIgc3BlY2lhbEtleSA9IHsncmV0dXJuJzonQ1InLGJhY2tzcGFjZTonQlMnLCdkZWxldGUnOidEZWwnLGVzYzonRXNjJywKICAgIGxlZnQ6J0xlZnQnLHJpZ2h0OidSaWdodCcsdXA6J1VwJyxkb3duOidEb3duJyxzcGFjZTogJ1NwYWNlJywKICAgIGhvbWU6J0hvbWUnLGVuZDonRW5kJyxwYWdldXA6J1BhZ2VVcCcscGFnZWRvd246J1BhZ2VEb3duJywgZW50ZXI6ICdDUicKICB9OwogIGZ1bmN0aW9uIGxvb2t1cEtleShoYXNoSWQsIGtleSwgZSkgewogICAgaWYgKGtleS5sZW5ndGggPiAxICYmIGtleVswXSA9PSAibiIpIHsKICAgICAga2V5ID0ga2V5LnJlcGxhY2UoIm51bXBhZCIsICIiKTsKICAgIH0KICAgIGtleSA9IHNwZWNpYWxLZXlba2V5XSB8fCBrZXk7CiAgICB2YXIgbmFtZSA9ICcnOwogICAgaWYgKGUuY3RybEtleSkgeyBuYW1lICs9ICdDLSc7IH0KICAgIGlmIChlLmFsdEtleSkgeyBuYW1lICs9ICdBLSc7IH0KICAgIGlmICgobmFtZSB8fCBrZXkubGVuZ3RoID4gMSkgJiYgZS5zaGlmdEtleSkgeyBuYW1lICs9ICdTLSc7IH0KCiAgICBuYW1lICs9IGtleTsKICAgIGlmIChuYW1lLmxlbmd0aCA+IDEpIHsgbmFtZSA9ICc8JyArIG5hbWUgKyAnPic7IH0KICAgIHJldHVybiBuYW1lOwogIH0KICB2YXIgaGFuZGxlS2V5ID0gVmltLmhhbmRsZUtleS5iaW5kKFZpbSk7CiAgVmltLmhhbmRsZUtleSA9IGZ1bmN0aW9uKGNtLCBrZXksIG9yaWdpbikgewogICAgcmV0dXJuIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGhhbmRsZUtleShjbSwga2V5LCBvcmlnaW4pOwogICAgfSwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIGNsb25lVmltU3RhdGUoc3RhdGUpIHsKICAgIHZhciBuID0gbmV3IHN0YXRlLmNvbnN0cnVjdG9yKCk7CiAgICBPYmplY3Qua2V5cyhzdGF0ZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHsKICAgICAgdmFyIG8gPSBzdGF0ZVtrZXldOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShvKSkKICAgICAgICBvID0gby5zbGljZSgpOwogICAgICBlbHNlIGlmIChvICYmIHR5cGVvZiBvID09ICJvYmplY3QiICYmIG8uY29uc3RydWN0b3IgIT0gT2JqZWN0KQogICAgICAgIG8gPSBjbG9uZVZpbVN0YXRlKG8pOwogICAgICBuW2tleV0gPSBvOwogICAgfSk7CiAgICBpZiAoc3RhdGUuc2VsKSB7CiAgICAgIG4uc2VsID0gewogICAgICAgIGhlYWQ6IHN0YXRlLnNlbC5oZWFkICYmIGNvcHlDdXJzb3Ioc3RhdGUuc2VsLmhlYWQpLAogICAgICAgIGFuY2hvcjogc3RhdGUuc2VsLmFuY2hvciAmJiBjb3B5Q3Vyc29yKHN0YXRlLnNlbC5hbmNob3IpCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gbjsKICB9CiAgZnVuY3Rpb24gbXVsdGlTZWxlY3RIYW5kbGVLZXkoY20sIGtleSwgb3JpZ2luKSB7CiAgICB2YXIgaXNIYW5kbGVkID0gZmFsc2U7CiAgICB2YXIgdmltID0gVmltLm1heWJlSW5pdFZpbVN0YXRlXyhjbSk7CiAgICB2YXIgdmlzdWFsQmxvY2sgPSB2aW0udmlzdWFsQmxvY2sgfHwgdmltLndhc0luVmlzdWFsQmxvY2s7CgogICAgdmFyIHdhc011bHRpc2VsZWN0ID0gY20uYWNlLmluTXVsdGlTZWxlY3RNb2RlOwogICAgaWYgKHZpbS53YXNJblZpc3VhbEJsb2NrICYmICF3YXNNdWx0aXNlbGVjdCkgewogICAgICB2aW0ud2FzSW5WaXN1YWxCbG9jayA9IGZhbHNlOwogICAgfSBlbHNlIGlmICh3YXNNdWx0aXNlbGVjdCAmJiB2aW0udmlzdWFsQmxvY2spIHsKICAgICAgIHZpbS53YXNJblZpc3VhbEJsb2NrID0gdHJ1ZTsKICAgIH0KICAgIAogICAgaWYgKGtleSA9PSAnPEVzYz4nICYmICF2aW0uaW5zZXJ0TW9kZSAmJiAhdmltLnZpc3VhbE1vZGUgJiYgd2FzTXVsdGlzZWxlY3QpIHsKICAgICAgY20uYWNlLmV4aXRNdWx0aVNlbGVjdE1vZGUoKTsKICAgIH0gZWxzZSBpZiAodmlzdWFsQmxvY2sgfHwgIXdhc011bHRpc2VsZWN0IHx8IGNtLmFjZS5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKSB7CiAgICAgIGlzSGFuZGxlZCA9IFZpbS5oYW5kbGVLZXkoY20sIGtleSwgb3JpZ2luKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBvbGQgPSBjbG9uZVZpbVN0YXRlKHZpbSk7CiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICBjbS5hY2UuZm9yRWFjaFNlbGVjdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBzZWwgPSBjbS5hY2Uuc2VsZWN0aW9uOwogICAgICAgICAgY20uc3RhdGUudmltLmxhc3RIUG9zID0gc2VsLiRkZXNpcmVkQ29sdW1uID09IG51bGwgPyBzZWwubGVhZC5jb2x1bW4gOiBzZWwuJGRlc2lyZWRDb2x1bW47CiAgICAgICAgICB2YXIgaGVhZCA9IGNtLmdldEN1cnNvcigiaGVhZCIpOwogICAgICAgICAgdmFyIGFuY2hvciA9IGNtLmdldEN1cnNvcigiYW5jaG9yIik7CiAgICAgICAgICB2YXIgaGVhZE9mZnNldCA9ICFjdXJzb3JJc0JlZm9yZShoZWFkLCBhbmNob3IpID8gLTEgOiAwOwogICAgICAgICAgdmFyIGFuY2hvck9mZnNldCA9IGN1cnNvcklzQmVmb3JlKGhlYWQsIGFuY2hvcikgPyAtMSA6IDA7CiAgICAgICAgICBoZWFkID0gb2Zmc2V0Q3Vyc29yKGhlYWQsIDAsIGhlYWRPZmZzZXQpOwogICAgICAgICAgYW5jaG9yID0gb2Zmc2V0Q3Vyc29yKGFuY2hvciwgMCwgYW5jaG9yT2Zmc2V0KTsKICAgICAgICAgIGNtLnN0YXRlLnZpbS5zZWwuaGVhZCA9IGhlYWQ7CiAgICAgICAgICBjbS5zdGF0ZS52aW0uc2VsLmFuY2hvciA9IGFuY2hvcjsKICAgICAgICAgIAogICAgICAgICAgaXNIYW5kbGVkID0gaGFuZGxlS2V5KGNtLCBrZXksIG9yaWdpbik7CiAgICAgICAgICBzZWwuJGRlc2lyZWRDb2x1bW4gPSBjbS5zdGF0ZS52aW0ubGFzdEhQb3MgPT0gLTEgPyBudWxsIDogY20uc3RhdGUudmltLmxhc3RIUG9zOwogICAgICAgICAgaWYgKGNtLnZpcnR1YWxTZWxlY3Rpb25Nb2RlKCkpIHsKICAgICAgICAgICAgY20uc3RhdGUudmltID0gY2xvbmVWaW1TdGF0ZShvbGQpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmIChjbS5jdXJPcC5jdXJzb3JBY3Rpdml0eSAmJiAhaXNIYW5kbGVkKQogICAgICAgICAgY20uY3VyT3AuY3Vyc29yQWN0aXZpdHkgPSBmYWxzZTsKICAgICAgfSwgdHJ1ZSk7CiAgICB9CiAgICBpZiAoaXNIYW5kbGVkICYmICF2aW0udmlzdWFsTW9kZSAmJiAhdmltLmluc2VydCAmJiB2aW0udmlzdWFsTW9kZSAhPSBjbS5zb21ldGhpbmdTZWxlY3RlZCgpKSB7CiAgICAgIGhhbmRsZUV4dGVybmFsU2VsZWN0aW9uKGNtLCB2aW0sIHRydWUpOwogICAgfQogICAgcmV0dXJuIGlzSGFuZGxlZDsKICB9CiAgZXhwb3J0cy5Db2RlTWlycm9yID0gQ29kZU1pcnJvcjsKICB2YXIgZ2V0VmltID0gVmltLm1heWJlSW5pdFZpbVN0YXRlXzsKICBleHBvcnRzLmhhbmRsZXIgPSB7CiAgICAkaWQ6ICJhY2Uva2V5Ym9hcmQvdmltIiwKICAgIGRyYXdDdXJzb3I6IGZ1bmN0aW9uKGVsZW1lbnQsIHBpeGVsUG9zLCBjb25maWcsIHNlbCwgc2Vzc2lvbikgewogICAgICB2YXIgdmltID0gdGhpcy5zdGF0ZS52aW0gfHwge307CiAgICAgIHZhciB3ID0gY29uZmlnLmNoYXJhY3RlcldpZHRoOwogICAgICB2YXIgaCA9IGNvbmZpZy5saW5lSGVpZ2h0OwogICAgICB2YXIgdG9wID0gcGl4ZWxQb3MudG9wOwogICAgICB2YXIgbGVmdCA9IHBpeGVsUG9zLmxlZnQ7CiAgICAgIGlmICghdmltLmluc2VydE1vZGUpIHsKICAgICAgICB2YXIgaXNiYWNrd2FyZHMgPSAhc2VsLmN1cnNvciAKICAgICAgICAgICAgPyBzZXNzaW9uLnNlbGVjdGlvbi5pc0JhY2t3YXJkcygpIHx8IHNlc3Npb24uc2VsZWN0aW9uLmlzRW1wdHkoKQogICAgICAgICAgICA6IFJhbmdlLmNvbXBhcmVQb2ludHMoc2VsLmN1cnNvciwgc2VsLnN0YXJ0KSA8PSAwOwogICAgICAgIGlmICghaXNiYWNrd2FyZHMgJiYgbGVmdCA+IHcpCiAgICAgICAgICBsZWZ0IC09IHc7CiAgICAgIH0gICAgIAogICAgICBpZiAoIXZpbS5pbnNlcnRNb2RlICYmIHZpbS5zdGF0dXMpIHsKICAgICAgICBoID0gaCAvIDI7CiAgICAgICAgdG9wICs9IGg7CiAgICAgIH0KICAgICAgZG9tLnRyYW5zbGF0ZShlbGVtZW50LCBsZWZ0LCB0b3ApOwogICAgICBkb20uc2V0U3R5bGUoZWxlbWVudC5zdHlsZSwgIndpZHRoIiwgdyArICJweCIpOwogICAgICBkb20uc2V0U3R5bGUoZWxlbWVudC5zdHlsZSwgImhlaWdodCIsIGggKyAicHgiKTsKICAgIH0sCiAgICBoYW5kbGVLZXlib2FyZDogZnVuY3Rpb24oZGF0YSwgaGFzaElkLCBrZXksIGtleUNvZGUsIGUpIHsKICAgICAgdmFyIGVkaXRvciA9IGRhdGEuZWRpdG9yOwogICAgICB2YXIgY20gPSBlZGl0b3Iuc3RhdGUuY207CiAgICAgIHZhciB2aW0gPSBnZXRWaW0oY20pOwogICAgICBpZiAoa2V5Q29kZSA9PSAtMSkgcmV0dXJuOwogICAgICBpZiAoIXZpbS5pbnNlcnRNb2RlKSB7CiAgICAgICAgaWYgKGhhc2hJZCA9PSAtMSkgewogICAgICAgICAgaWYgKGtleS5jaGFyQ29kZUF0KDApID4gMHhGRikgewogICAgICAgICAgICBpZiAoZGF0YS5pbnB1dEtleSkgewogICAgICAgICAgICAgIGtleSA9IGRhdGEuaW5wdXRLZXk7CiAgICAgICAgICAgICAgaWYgKGtleSAmJiBkYXRhLmlucHV0SGFzaCA9PSA0KQogICAgICAgICAgICAgICAga2V5ID0ga2V5LnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGRhdGEuaW5wdXRDaGFyID0ga2V5OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChoYXNoSWQgPT0gNCB8fCBoYXNoSWQgPT0gMCkgewogICAgICAgICAgaWYgKGRhdGEuaW5wdXRLZXkgPT0ga2V5ICYmIGRhdGEuaW5wdXRIYXNoID09IGhhc2hJZCAmJiBkYXRhLmlucHV0Q2hhcikgewogICAgICAgICAgICBrZXkgPSBkYXRhLmlucHV0Q2hhcjsKICAgICAgICAgICAgaGFzaElkID0gLTEKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBkYXRhLmlucHV0Q2hhciA9IG51bGw7CiAgICAgICAgICAgIGRhdGEuaW5wdXRLZXkgPSBrZXk7CiAgICAgICAgICAgIGRhdGEuaW5wdXRIYXNoID0gaGFzaElkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGRhdGEuaW5wdXRDaGFyID0gZGF0YS5pbnB1dEtleSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChrZXkgPT0gImMiICYmIGhhc2hJZCA9PSAxKSB7IC8vIGtleSA9PSAiY3RybC1jIgogICAgICAgIGlmICghdXNlcmFnZW50LmlzTWFjICYmIGVkaXRvci5nZXRDb3B5VGV4dCgpKSB7CiAgICAgICAgICBlZGl0b3Iub25jZSgiY29weSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7Y29tbWFuZDogIm51bGwiLCBwYXNzRXZlbnQ6IHRydWV9OwogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgaWYgKGtleSA9PSAiZXNjIiAmJiAhdmltLmluc2VydE1vZGUgJiYgIXZpbS52aXN1YWxNb2RlICYmICFjbS5hY2UuaW5NdWx0aVNlbGVjdE1vZGUpIHsKICAgICAgICB2YXIgc2VhcmNoU3RhdGUgPSBnZXRTZWFyY2hTdGF0ZShjbSk7CiAgICAgICAgdmFyIG92ZXJsYXkgPSBzZWFyY2hTdGF0ZS5nZXRPdmVybGF5KCk7CiAgICAgICAgaWYgKG92ZXJsYXkpIGNtLnJlbW92ZU92ZXJsYXkob3ZlcmxheSk7CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChoYXNoSWQgPT0gLTEgfHwgaGFzaElkICYgMSB8fCBoYXNoSWQgPT09IDAgJiYga2V5Lmxlbmd0aCA+IDEpIHsKICAgICAgICB2YXIgaW5zZXJ0TW9kZSA9IHZpbS5pbnNlcnRNb2RlOwogICAgICAgIHZhciBuYW1lID0gbG9va3VwS2V5KGhhc2hJZCwga2V5LCBlIHx8IHt9KTsKICAgICAgICBpZiAodmltLnN0YXR1cyA9PSBudWxsKQogICAgICAgICAgdmltLnN0YXR1cyA9ICIiOwogICAgICAgIHZhciBpc0hhbmRsZWQgPSBtdWx0aVNlbGVjdEhhbmRsZUtleShjbSwgbmFtZSwgJ3VzZXInKTsKICAgICAgICB2aW0gPSBnZXRWaW0oY20pOyAvLyBtYXkgYmUgY2hhbmdlZCBieSBtdWx0aVNlbGVjdEhhbmRsZUtleQogICAgICAgIGlmIChpc0hhbmRsZWQgJiYgdmltLnN0YXR1cyAhPSBudWxsKQogICAgICAgICAgdmltLnN0YXR1cyArPSBuYW1lOwogICAgICAgIGVsc2UgaWYgKHZpbS5zdGF0dXMgPT0gbnVsbCkKICAgICAgICAgIHZpbS5zdGF0dXMgPSAiIjsKICAgICAgICBjbS5fc2lnbmFsKCJjaGFuZ2VTdGF0dXMiKTsKICAgICAgICBpZiAoIWlzSGFuZGxlZCAmJiAoaGFzaElkICE9IC0xIHx8IGluc2VydE1vZGUpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHJldHVybiB7Y29tbWFuZDogIm51bGwiLCBwYXNzRXZlbnQ6ICFpc0hhbmRsZWR9OwogICAgICB9CiAgICB9LAogICAgYXR0YWNoOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgaWYgKCFlZGl0b3Iuc3RhdGUpIGVkaXRvci5zdGF0ZSA9IHt9OwogICAgICB2YXIgY20gPSBuZXcgQ29kZU1pcnJvcihlZGl0b3IpOwogICAgICBlZGl0b3Iuc3RhdGUuY20gPSBjbTsKICAgICAgZWRpdG9yLiR2aW1Nb2RlSGFuZGxlciA9IHRoaXM7CiAgICAgIENvZGVNaXJyb3Iua2V5TWFwLnZpbS5hdHRhY2goY20pOwogICAgICBnZXRWaW0oY20pLnN0YXR1cyA9IG51bGw7CiAgICAgIGNtLm9uKCd2aW0tY29tbWFuZC1kb25lJywgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGNtLnZpcnR1YWxTZWxlY3Rpb25Nb2RlKCkpIHJldHVybjsKICAgICAgICBnZXRWaW0oY20pLnN0YXR1cyA9IG51bGw7CiAgICAgICAgY20uYWNlLl9zaWduYWwoImNoYW5nZVN0YXR1cyIpOwogICAgICAgIGNtLmFjZS5zZXNzaW9uLm1hcmtVbmRvR3JvdXAoKTsKICAgICAgfSk7CiAgICAgIGNtLm9uKCJjaGFuZ2VTdGF0dXMiLCBmdW5jdGlvbigpIHsKICAgICAgICBjbS5hY2UucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7CiAgICAgICAgY20uYWNlLl9zaWduYWwoImNoYW5nZVN0YXR1cyIpOwogICAgICB9KTsKICAgICAgY20ub24oInZpbS1tb2RlLWNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChjbS52aXJ0dWFsU2VsZWN0aW9uTW9kZSgpKSByZXR1cm47CiAgICAgICAgdXBkYXRlSW5wdXRNb2RlKCk7CiAgICAgICAgY20uX3NpZ25hbCgiY2hhbmdlU3RhdHVzIik7CiAgICAgIH0pOwogICAgICBmdW5jdGlvbiB1cGRhdGVJbnB1dE1vZGUoKSB7CiAgICAgICAgdmFyIGlzSW50c2VydCA9IGdldFZpbShjbSkuaW5zZXJ0TW9kZTsKICAgICAgICBjbS5hY2UucmVuZGVyZXIuc2V0U3R5bGUoIm5vcm1hbC1tb2RlIiwgIWlzSW50c2VydCk7CiAgICAgICAgZWRpdG9yLnRleHRJbnB1dC5zZXRDb21tYW5kTW9kZSghaXNJbnRzZXJ0KTsKICAgICAgICBlZGl0b3IucmVuZGVyZXIuJGtlZXBUZXh0QXJlYUF0Q3Vyc29yID0gaXNJbnRzZXJ0OwogICAgICAgIGVkaXRvci5yZW5kZXJlci4kYmxvY2tDdXJzb3IgPSAhaXNJbnRzZXJ0OwogICAgICB9CiAgICAgIHVwZGF0ZUlucHV0TW9kZSgpOwogICAgICBlZGl0b3IucmVuZGVyZXIuJGN1cnNvckxheWVyLmRyYXdDdXJzb3IgPSB0aGlzLmRyYXdDdXJzb3IuYmluZChjbSk7CiAgICB9LAogICAgZGV0YWNoOiBmdW5jdGlvbihlZGl0b3IpIHsKICAgICAgdmFyIGNtID0gZWRpdG9yLnN0YXRlLmNtOwogICAgICBDb2RlTWlycm9yLmtleU1hcC52aW0uZGV0YWNoKGNtKTsKICAgICAgY20uZGVzdHJveSgpOwogICAgICBlZGl0b3Iuc3RhdGUuY20gPSBudWxsOwogICAgICBlZGl0b3IuJHZpbU1vZGVIYW5kbGVyID0gbnVsbDsKICAgICAgZWRpdG9yLnJlbmRlcmVyLiRjdXJzb3JMYXllci5kcmF3Q3Vyc29yID0gbnVsbDsKICAgICAgZWRpdG9yLnJlbmRlcmVyLnNldFN0eWxlKCJub3JtYWwtbW9kZSIsIGZhbHNlKTsKICAgICAgZWRpdG9yLnRleHRJbnB1dC5zZXRDb21tYW5kTW9kZShmYWxzZSk7CiAgICAgIGVkaXRvci5yZW5kZXJlci4ka2VlcFRleHRBcmVhQXRDdXJzb3IgPSB0cnVlOwogICAgfSwKICAgIGdldFN0YXR1c1RleHQ6IGZ1bmN0aW9uKGVkaXRvcikgewogICAgICB2YXIgY20gPSBlZGl0b3Iuc3RhdGUuY207CiAgICAgIHZhciB2aW0gPSBnZXRWaW0oY20pOwogICAgICBpZiAodmltLmluc2VydE1vZGUpCiAgICAgICAgcmV0dXJuICJJTlNFUlQiOwogICAgICB2YXIgc3RhdHVzID0gIiI7CiAgICAgIGlmICh2aW0udmlzdWFsTW9kZSkgewogICAgICAgIHN0YXR1cyArPSAiVklTVUFMIjsKICAgICAgICBpZiAodmltLnZpc3VhbExpbmUpCiAgICAgICAgICBzdGF0dXMgKz0gIiBMSU5FIjsKICAgICAgICBpZiAodmltLnZpc3VhbEJsb2NrKQogICAgICAgICAgc3RhdHVzICs9ICIgQkxPQ0siOwogICAgICB9CiAgICAgIGlmICh2aW0uc3RhdHVzKQogICAgICAgIHN0YXR1cyArPSAoc3RhdHVzID8gIiAiIDogIiIpICsgdmltLnN0YXR1czsKICAgICAgcmV0dXJuIHN0YXR1czsKICAgIH0KICB9OwogIFZpbS5kZWZpbmVPcHRpb24oewogICAgbmFtZTogIndyYXAiLAogICAgc2V0OiBmdW5jdGlvbih2YWx1ZSwgY20pIHsKICAgICAgaWYgKGNtKSB7Y20uYWNlLnNldE9wdGlvbigid3JhcCIsIHZhbHVlKX0KICAgIH0sCiAgICB0eXBlOiAiYm9vbGVhbiIKICB9LCBmYWxzZSk7CiAgVmltLmRlZmluZUV4KCd3cml0ZScsICd3JywgZnVuY3Rpb24oKSB7CiAgICBjb25zb2xlLmxvZygnOndyaXRlIGlzIG5vdCBpbXBsZW1lbnRlZCcpCiAgfSk7CiAgZGVmYXVsdEtleW1hcC5wdXNoKAogICAgeyBrZXlzOiAnemMnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZm9sZCcsIGFjdGlvbkFyZ3M6IHsgb3BlbjogZmFsc2UgfSB9LAogICAgeyBrZXlzOiAnekMnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZm9sZCcsIGFjdGlvbkFyZ3M6IHsgb3BlbjogZmFsc2UsIGFsbDogdHJ1ZSB9IH0sCiAgICB7IGtleXM6ICd6bycsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdmb2xkJywgYWN0aW9uQXJnczogeyBvcGVuOiB0cnVlIH0gfSwKICAgIHsga2V5czogJ3pPJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2ZvbGQnLCBhY3Rpb25BcmdzOiB7IG9wZW46IHRydWUsIGFsbDogdHJ1ZSB9IH0sCiAgICB7IGtleXM6ICd6YScsIHR5cGU6ICdhY3Rpb24nLCBhY3Rpb246ICdmb2xkJywgYWN0aW9uQXJnczogeyB0b2dnbGU6IHRydWUgfSB9LAogICAgeyBrZXlzOiAnekEnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZm9sZCcsIGFjdGlvbkFyZ3M6IHsgdG9nZ2xlOiB0cnVlLCBhbGw6IHRydWUgfSB9LAogICAgeyBrZXlzOiAnemYnLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnZm9sZCcsIGFjdGlvbkFyZ3M6IHsgb3BlbjogdHJ1ZSwgYWxsOiB0cnVlIH0gfSwKICAgIHsga2V5czogJ3pkJywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2ZvbGQnLCBhY3Rpb25BcmdzOiB7IG9wZW46IHRydWUsIGFsbDogdHJ1ZSB9IH0sCiAgICAKICAgIHsga2V5czogJzxDLUEtaz4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnYWNlQ29tbWFuZCcsIGFjdGlvbkFyZ3M6IHsgbmFtZTogImFkZEN1cnNvckFib3ZlIiB9IH0sCiAgICB7IGtleXM6ICc8Qy1BLWo+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2FjZUNvbW1hbmQnLCBhY3Rpb25BcmdzOiB7IG5hbWU6ICJhZGRDdXJzb3JCZWxvdyIgfSB9LAogICAgeyBrZXlzOiAnPEMtQS1TLWs+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2FjZUNvbW1hbmQnLCBhY3Rpb25BcmdzOiB7IG5hbWU6ICJhZGRDdXJzb3JBYm92ZVNraXBDdXJyZW50IiB9IH0sCiAgICB7IGtleXM6ICc8Qy1BLVMtaj4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnYWNlQ29tbWFuZCcsIGFjdGlvbkFyZ3M6IHsgbmFtZTogImFkZEN1cnNvckJlbG93U2tpcEN1cnJlbnQiIH0gfSwKICAgIHsga2V5czogJzxDLUEtaD4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnYWNlQ29tbWFuZCcsIGFjdGlvbkFyZ3M6IHsgbmFtZTogInNlbGVjdE1vcmVCZWZvcmUiIH0gfSwKICAgIHsga2V5czogJzxDLUEtbD4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnYWNlQ29tbWFuZCcsIGFjdGlvbkFyZ3M6IHsgbmFtZTogInNlbGVjdE1vcmVBZnRlciIgfSB9LAogICAgeyBrZXlzOiAnPEMtQS1TLWg+JywgdHlwZTogJ2FjdGlvbicsIGFjdGlvbjogJ2FjZUNvbW1hbmQnLCBhY3Rpb25BcmdzOiB7IG5hbWU6ICJzZWxlY3ROZXh0QmVmb3JlIiB9IH0sCiAgICB7IGtleXM6ICc8Qy1BLVMtbD4nLCB0eXBlOiAnYWN0aW9uJywgYWN0aW9uOiAnYWNlQ29tbWFuZCcsIGFjdGlvbkFyZ3M6IHsgbmFtZTogInNlbGVjdE5leHRBZnRlciIgfSB9CiAgKTsKICBhY3Rpb25zLmFjZUNvbW1hbmQgPSBmdW5jdGlvbihjbSwgYWN0aW9uQXJncywgdmltKSB7CiAgICBjbS52aW1DbWQgPSBhY3Rpb25BcmdzOwogICAgaWYgKGNtLmFjZS5pblZpcnR1YWxTZWxlY3Rpb25Nb2RlKQogICAgICBjbS5hY2Uub24oImJlZm9yZUVuZE9wZXJhdGlvbiIsIGRlbGF5ZWRFeGVjQWNlQ29tbWFuZCk7CiAgICBlbHNlCiAgICAgIGRlbGF5ZWRFeGVjQWNlQ29tbWFuZChudWxsLCBjbS5hY2UpOwogIH07CiAgZnVuY3Rpb24gZGVsYXllZEV4ZWNBY2VDb21tYW5kKG9wLCBhY2UpIHsKICAgIGFjZS5vZmYoImJlZm9yZUVuZE9wZXJhdGlvbiIsIGRlbGF5ZWRFeGVjQWNlQ29tbWFuZCk7CiAgICB2YXIgY21kID0gYWNlLnN0YXRlLmNtLnZpbUNtZDsKICAgIGlmIChjbWQpIHsKICAgICAgYWNlLmV4ZWNDb21tYW5kKGNtZC5leGVjID8gY21kIDogY21kLm5hbWUsIGNtZC5hcmdzKTsKICAgIH0KICAgIGFjZS5jdXJPcCA9IGFjZS5wcmV2T3A7CiAgfQogIGFjdGlvbnMuZm9sZCA9IGZ1bmN0aW9uKGNtLCBhY3Rpb25BcmdzLCB2aW0pIHsKICAgIGNtLmFjZS5leGVjQ29tbWFuZChbJ3RvZ2dsZUZvbGRXaWRnZXQnLCAndG9nZ2xlRm9sZFdpZGdldCcsICdmb2xkT3RoZXInLCAndW5mb2xkYWxsJwogICAgICBdWyhhY3Rpb25BcmdzLmFsbCA/IDIgOiAwKSArIChhY3Rpb25BcmdzLm9wZW4gPyAxIDogMCldKTsKICB9OwoKICBleHBvcnRzLmhhbmRsZXIuZGVmYXVsdEtleW1hcCA9IGRlZmF1bHRLZXltYXA7CiAgZXhwb3J0cy5oYW5kbGVyLmFjdGlvbnMgPSBhY3Rpb25zOwogIGV4cG9ydHMuVmltID0gVmltOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL2tleWJvYXJkL3ZpbSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDEwLCBBamF4Lm9yZyBCLlYuCkFsbCByaWdodHMgcmVzZXJ2ZWQuCgpSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFqYXgub3JnIEIuVi4gbm9yIHRoZQogICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwogICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBSkFYLk9SRyBCLlYuIEJFIExJQUJMRSBGT1IgQU5ZCkRJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECk9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTClNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ace/modes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-abap.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hYmFwX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEFiYXBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImtleXdvcmQiOiAKICAgICAgICAgICAgIkFERCBBTElBUyBBTElBU0VTIEFTQ0VORElORyBBU1NFUlQgQVNTSUdOIEFTU0lHTklORyBBVCBCQUNLIiArCiAgICAgICAgICAgICIgQ0FMTCBDQVNFIENBVENIIENIRUNLIENMQVNTIENMRUFSIENMT1NFIENOVCBDT0xMRUNUIENPTU1JVCBDT01NVU5JQ0FUSU9OIENPTVBVVEUgQ09OQ0FURU5BVEUgQ09OREVOU0UgQ09OU1RBTlRTIENPTlRJTlVFIENPTlRST0xTIENPTlZFUlQgQ1JFQVRFIENVUlJFTkNZIiArCiAgICAgICAgICAgICIgREFUQSBERUZJTkUgREVGSU5JVElPTiBERUZFUlJFRCBERUxFVEUgREVTQ0VORElORyBERVNDUklCRSBERVRBSUwgRElWSURFIERPIiArCiAgICAgICAgICAgICIgRUxTRSBFTFNFSUYgRU5EQVQgRU5EQ0FTRSBFTkRDTEFTUyBFTkRETyBFTkRFWEVDIEVOREZPUk0gRU5ERlVOQ1RJT04gRU5ESUYgRU5ESUZFTkQgRU5ESU5URVJGQUNFIEVORExPT1AgRU5ETUVUSE9EIEVORE1PRFVMRSBFTkRPTiBFTkRQUk9WSURFIEVORFNFTEVDVCBFTkRUUlkgRU5EV0hJTEUgRVZFTlQgRVZFTlRTIEVYRUMgRVhJVCBFWFBPUlQgRVhQT1JUSU5HIEVYVFJBQ1QiICsKICAgICAgICAgICAgIiBGRVRDSCBGSUVMRFMgRk9STSBGT1JNQVQgRlJFRSBGUk9NIEZVTkNUSU9OIiArCiAgICAgICAgICAgICIgR0VORVJBVEUgR0VUIiArCiAgICAgICAgICAgICIgSElERSIgKwogICAgICAgICAgICAiIElGIElNUE9SVCBJTVBPUlRJTkcgSU5ERVggSU5GT1RZUEVTIElOSVRJQUxJWkFUSU9OIElOVEVSRkFDRSBJTlRFUkZBQ0VTIElOUFVUIElOU0VSVCBJTVBMRU1FTlRBVElPTiIgKwogICAgICAgICAgICAiIExFQVZFIExJS0UgTElORSBMT0FEIExPQ0FMIExPT1AiICsKICAgICAgICAgICAgIiBNRVNTQUdFIE1FVEhPRCBNRVRIT0RTIE1PRElGWSBNT0RVTEUgTU9WRSBNVUxUSVBMWSIgKwogICAgICAgICAgICAiIE9OIE9WRVJMQVkgT1BUSU9OQUwgT1RIRVJTIiArCiAgICAgICAgICAgICIgUEFDSyBQQVJBTUVURVJTIFBFUkZPUk0gUE9TSVRJT04gUFJPR1JBTSBQUk9WSURFIFBVVCIgKwogICAgICAgICAgICAiIFJBSVNFIFJBTkdFUyBSRUFEIFJFQ0VJVkUgUkVDRUlWSU5HIFJFREVGSU5JVElPTiBSRUZFUkVOQ0UgUkVGUkVTSCBSRUpFQ1QgUkVQTEFDRSBSRVBPUlQgUkVTRVJWRSBSRVNUT1JFIFJFVFVSTiBSRVRVUk5JTkcgUk9MTEJBQ0siICsKICAgICAgICAgICAgIiBTQ0FOIFNDUk9MTCBTRUFSQ0ggU0VMRUNUIFNFVCBTSElGVCBTS0lQIFNPUlQgU09SVEVEIFNQTElUIFNUQU5EQVJEIFNUQVRJQ1MgU1RFUCBTVE9QIFNVQk1JVCBTVUJUUkFDVCBTVU0gU1VNTUFSWSBTVVBQUkVTUyIgKwogICAgICAgICAgICAiIFRBQkxFUyBUSU1FUyBUUkFOU0ZFUiBUUkFOU0xBVEUgVFJZIFRZUEUgVFlQRVMiICsKICAgICAgICAgICAgIiBVTkFTU0lHTiBVTElORSBVTlBBQ0sgVVBEQVRFIiArCiAgICAgICAgICAgICIgV0hFTiBXSElMRSBXSU5ET1cgV1JJVEUiICsKICAgICAgICAgICAgIiBPQ0NVUlMgU1RSVUNUVVJFIE9CSkVDVCBQUk9QRVJUWSIgKwogICAgICAgICAgICAiIENBU1RJTkcgQVBQRU5EIFJBSVNJTkcgVkFMVUUgQ09MT1IiICsKICAgICAgICAgICAgIiBDSEFOR0lORyBFWENFUFRJT04gRVhDRVBUSU9OUyBERUZBVUxUIENIRUNLQk9YIENPTU1FTlQiICsKICAgICAgICAgICAgIiBJRCBOVU1CRVIgRk9SIFRJVExFIE9VVFBVVCIgKwogICAgICAgICAgICAiIFdJVEggRVhJVCBVU0lORyIgKwogICAgICAgICAgICAiIElOVE8gV0hFUkUgR1JPVVAgQlkgSEFWSU5HIE9SREVSIEJZIFNJTkdMRSIgKwogICAgICAgICAgICAiIEFQUEVORElORyBDT1JSRVNQT05ESU5HIEZJRUxEUyBPRiBUQUJMRSIgKwogICAgICAgICAgICAiIExFRlQgUklHSFQgT1VURVIgSU5ORVIgSk9JTiBBUyBDTElFTlQgU1BFQ0lGSUVEIEJZUEFTU0lORyBCVUZGRVIgVVAgVE8gUk9XUyBDT05ORUNUSU5HIiArCiAgICAgICAgICAgICIgRVEgTkUgTFQgTEUgR1QgR0UgTk9UIEFORCBPUiBYT1IgSU4gTElLRSBCRVRXRUVOIiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiAKICAgICAgICAgICAgIlRSVUUgRkFMU0UgTlVMTCBTUEFDRSIsCiAgICAgICAgInN1cHBvcnQudHlwZSI6IAogICAgICAgICAgICAiYyBuIGkgcCBmIGQgdCB4IHN0cmluZyB4c3RyaW5nIGRlY2Zsb2F0MTYgZGVjZmxvYXQzNCIsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiOgogICAgICAgICAgICAiYWJzIHNpZ24gY2VpbCBmbG9vciB0cnVuYyBmcmFjIGFjb3MgYXNpbiBhdGFuIGNvcyBzaW4gdGFuIiArCiAgICAgICAgICAgICIgYWJhcE9wZXJhdG9yIGNvc2ggc2luaCB0YW5oIGV4cCBsb2cgbG9nMTAgc3FydCIgKwogICAgICAgICAgICAiIHN0cmxlbiB4c3RybGVuIGNoYXJsZW4gbnVtb2ZjaGFyIGRibWF4bGVuIGxpbmVzIiAKICAgIH0sICJ0ZXh0IiwgdHJ1ZSwgIiAiKTsKCiAgICB2YXIgY29tcG91bmRLZXl3b3JkcyA9ICJXSVRIXFxXKyg/OkhFQURFUlxcVytMSU5FfEZSQU1FfEtFWSl8Tk9cXFcrU1RBTkRBUkRcXFcrUEFHRVxcVytIRUFESU5HfCIrCiAgICAgICAgIkVYSVRcXFcrRlJPTVxcVytTVEVQXFxXK0xPT1B8QkVHSU5cXFcrT0ZcXFcrKD86QkxPQ0t8TElORSl8QkVHSU5cXFcrT0Z8IisKICAgICAgICAiRU5EXFxXK09GXFxXKyg/OkJMT0NLfExJTkUpfEVORFxcVytPRnxOT1xcVytJTlRFUlZBTFN8IisKICAgICAgICAiUkVTUEVDVElOR1xcVytCTEFOS1N8U0VQQVJBVEVEXFxXK0JZfFVTSU5HXFxXKyg/OkVESVRcXFcrTUFTSyl8IisKICAgICAgICAiV0hFUkVcXFcrKD86TElORSl8UkFESU9CVVRUT05cXFcrR1JPVVB8UkVGXFxXK1RPfCIrCiAgICAgICAgIig/OlBVQkxJQ3xQUklWQVRFfFBST1RFQ1RFRCkoPzpcXFcrU0VDVElPTik/fERFTEVUSU5HXFxXKyg/OlRSQUlMSU5HfExFQURJTkcpIisKICAgICAgICAiKD86QUxMXFxXK09DQ1VSUkVOQ0VTKXwoPzpGSVJTVHxMQVNUKVxcVytPQ0NVUlJFTkNFfElOSEVSSVRJTkdcXFcrRlJPTXwiKwogICAgICAgICJMSU5FLUNPVU5UfEFERC1DT1JSRVNQT05ESU5HfEFVVEhPUklUWS1DSEVDS3xCUkVBSy1QT0lOVHxDTEFTUy1EQVRBfENMQVNTLU1FVEhPRFN8IisKICAgICAgICAiQ0xBU1MtTUVUSE9EfERJVklERS1DT1JSRVNQT05ESU5HfEVESVRPUi1DQUxMfEVORC1PRi1ERUZJTklUSU9OfEVORC1PRi1QQUdFfEVORC1PRi1TRUxFQ1RJT058IisKICAgICAgICAiRklFTEQtR1JPVVBTfEZJRUxELVNZTUJPTFN8RlVOQ1RJT04tUE9PTHxNT1ZFLUNPUlJFU1BPTkRJTkd8TVVMVElQTFktQ09SUkVTUE9ORElOR3xORVctTElORXwiKwogICAgICAgICJORVctUEFHRXxORVctU0VDVElPTnxQUklOVC1DT05UUk9MfFJQLVBST1ZJREUtRlJPTS1MQVNUfFNFTEVDVC1PUFRJT05TfFNFTEVDVElPTi1TQ1JFRU58IisKICAgICAgICAiU1RBUlQtT0YtU0VMRUNUSU9OfFNVQlRSQUNULUNPUlJFU1BPTkRJTkd8U1lOVEFYLUNIRUNLfFNZTlRBWC1UUkFDRXxUT1AtT0YtUEFHRXxUWVBFLVBPT0x8IisKICAgICAgICAiVFlQRS1QT09MU3xMSU5FLVNJWkV8TElORS1DT1VOVHxNRVNTQUdFLUlEfERJU1BMQVktTU9ERXxSRUFEKD86LU9OTFkpP3wiKwogICAgICAgICJJU1xcVysoPzpOT1RcXFcrKT8oPzpBU1NJR05FRHxCT1VORHxJTklUSUFMfFNVUFBMSUVEKSI7CiAgICAgCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiYCIsIG5leHQgIDogInN0cmluZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiJyIsIG5leHQgIDogInFzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogImRvYy5jb21tZW50IiwgcmVnZXggOiAvXlwqLisvfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCAgcmVnZXggOiAvIi4rJC99LAogICAgICAgICAgICB7dG9rZW4gOiAiaW52YWxpZCIsIHJlZ2V4OiAiXFwuezIsfSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsIHJlZ2V4OiAvXFdbXC0rJT08PipdXFd8XCpcKnxbfjosXC4mJF18LT4qP3w9Pi99LAogICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4ubHBhcmVuIiwgcmVnZXggOiAiW1xcWyh7XSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4ucnBhcmVuIiwgcmVnZXggOiAiW1xcXSl9XSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIHJlZ2V4OiAiWystXT9cXGQrXFxiIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCByZWdleCA6IC9zeXxwYT9cZFxkXGRcZFx8dFxkXGRcZFwufGlubm5uL30sIAogICAgICAgICAgICB7dG9rZW4gOiAia2V5d29yZCIsIHJlZ2V4IDogY29tcG91bmRLZXl3b3Jkc30sIAogICAgICAgICAgICB7dG9rZW4gOiAidmFyaWFibGUucGFyYW1ldGVyIiwgcmVnZXggOiAvXHcrLVx3W1wtXHddKi99LAogICAgICAgICAgICB7dG9rZW4gOiBrZXl3b3JkTWFwcGVyLCByZWdleCA6ICJcXGJcXHcrXFxiIn0sCiAgICAgICAgICAgIHtjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCAgIHJlZ2V4IDogIicnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICInIiwgICAgIG5leHQgIDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nIn0KICAgICAgICBdLAogICAgICAgICJzdHJpbmciIDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgICByZWdleCA6ICJgYCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiYCIsICAgICBuZXh0ICA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZyJ9CiAgICAgICAgXQogICAgfTsKfTsKb29wLmluaGVyaXRzKEFiYXBIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQWJhcEhpZ2hsaWdodFJ1bGVzID0gQWJhcEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYWJhcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9tb2RlL2FiYXBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL2xpYi9vb3AiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSdWxlcyA9IHJlcXVpcmUoIi4vYWJhcF9oaWdobGlnaHRfcnVsZXMiKS5BYmFwSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKCmZ1bmN0aW9uIE1vZGUoKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwp9Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAnIic7CiAgICAKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsgICAgCiAgICAKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2FiYXAiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvYWJhcCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-abc.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hYmNfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICAgIHZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKICAgIHZhciBBQkNIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgICAgIHN0YXJ0OiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46IFsnenVwZm5vdGVyLmluZm9ybWF0aW9uLmNvbW1lbnQubGluZS5wZXJjZW50YWdlJywgJ2luZm9ybWF0aW9uLmtleXdvcmQnLCAnaW4gZm9ybWF0aW9uLmtleXdvcmQuZW1iZWRkZWQnXSwKICAgICAgICAgICAgICAgICAgICByZWdleDogJyglJSUlKShoblxcLlthLXpdKikoLiopJywKICAgICAgICAgICAgICAgICAgICBjb21tZW50OiAnSW5zdHJ1Y3Rpb24gQ29tbWVudCcKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46IFsnaW5mb3JtYXRpb24uY29tbWVudC5saW5lLnBlcmNlbnRhZ2UnLCAnaW5mb3JtYXRpb24ua2V5d29yZC5lbWJlZGRlZCddLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnKCUlKSguKiknLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdJbnN0cnVjdGlvbiBDb21tZW50JwogICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdjb21tZW50LmxpbmUucGVyY2VudGFnZScsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICclLionLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdDb21tZW50cycKICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAnYmFybGluZS5rZXl3b3JkLm9wZXJhdG9yJywKICAgICAgICAgICAgICAgICAgICByZWdleDogJ1tcXFs6XSpbfDpdW3xcXF06XSooPzpcXFs/WzAtOV0rKT98XFxbWzAtOV0rJywKICAgICAgICAgICAgICAgICAgICBjb21tZW50OiAnQmFyIGxpbmVzJwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogWydpbmZvcm1hdGlvbi5rZXl3b3JkLmVtYmVkZGVkJywgJ2luZm9ybWF0aW9uLmFyZ3VtZW50LnN0cmluZy51bnF1b3RlZCddLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFxcW1tBLVphLXpdOikoW15cXF1dKlxcXSknLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdlbWJlZGRlZCBIZWFkZXIgbGluZXMnCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiBbJ2luZm9ybWF0aW9uLmtleXdvcmQnLCAnaW5mb3JtYXRpb24uYXJndW1lbnQuc3RyaW5nLnVucXVvdGVkJ10sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdeKFtBLVphLXpdOikoW14lXFxcXF0qKScsCiAgICAgICAgICAgICAgICAgICAgY29tbWVudDogJ0hlYWRlciBsaW5lcycKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46IFsndGV4dCcsICdlbnRpdHkubmFtZS5mdW5jdGlvbicsICdzdHJpbmcudW5xdW90ZWQnLCAndGV4dCddLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFxcWykoW0EtWl06KSguKj8pKFxcXSknLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdJbmxpbmUgZmllbGRzJwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogWydhY2NlbnQuY29uc3RhbnQubGFuZ3VhZ2UnLCAncGl0Y2guY29uc3RhbnQubnVtZXJpYycsICdkdXJhdGlvbi5jb25zdGFudC5udW1lcmljJ10sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICcoW1xcXj1fXSopKFtBLUdhLWd6XVssXCddKikoWzAtOV0qLypbPjwwLTldKiknLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdOb3RlcycKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICd6dXBmbm90ZXIuanVtcHRhcmdldC5zdHJpbmcucXVvdGVkJywKICAgICAgICAgICAgICAgICAgICByZWdleDogJ1tcXCIhXVxcXlxcOi4qP1tcXCIhXScsCiAgICAgICAgICAgICAgICAgICAgY29tbWVudDogJ1p1cGZub3RlciBqdW1wdGFyZ2V0JwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAnenVwZm5vdGVyLmdvdG8uc3RyaW5nLnF1b3RlZCcsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdbXFwiIV1cXF5cXEAuKj9bXFwiIV0nLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdadXBmbm90ZXIgZ290bycKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICd6dXBmbm90ZXIuYW5ub3RhdGlvbi5zdHJpbmcucXVvdGVkJywKICAgICAgICAgICAgICAgICAgICByZWdleDogJ1tcXCIhXVxcXlxcIS4qP1tcXCIhXScsCiAgICAgICAgICAgICAgICAgICAgY29tbWVudDogJ1p1cGZub3RlciBhbm5vYXRpb24nCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAnenVwZm5vdGVyLmFubm90YXRpb25yZWYuc3RyaW5nLnF1b3RlZCcsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdbXFwiIV1cXF5cXCMuKj9bXFwiIV0nLAogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdadXBmbm90ZXIgYW5ub3RhdGlvbiByZWZlcmVuY2UnCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAnY2hvcmRuYW1lLnN0cmluZy5xdW90ZWQnLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnW1xcIiFdXFxeLio/W1xcIiFdJywKICAgICAgICAgICAgICAgICAgICBjb21tZW50OiAnYWJjIGNob3JkJwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ3N0cmluZy5xdW90ZWQnLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnW1xcIiFdLio/W1xcIiFdJywKICAgICAgICAgICAgICAgICAgICBjb21tZW50OiAnYWJjIGFubm90YXRpb24nCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICBdCiAgICAgICAgfTsKCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwogICAgfTsKCiAgICBBQkNIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsKICAgICAgICBmaWxlVHlwZXM6IFsnYWJjJ10sCiAgICAgICAgbmFtZTogJ0FCQycsCiAgICAgICAgc2NvcGVOYW1lOiAndGV4dC5hYmNub3RhdGlvbicKICAgIH07CgoKICAgIG9vcC5pbmhlcml0cyhBQkNIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCiAgICBleHBvcnRzLkFCQ0hpZ2hsaWdodFJ1bGVzID0gQUJDSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYWJjIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvYWJjX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICAgdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKICAgIHZhciBBQkNIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vYWJjX2hpZ2hsaWdodF9ydWxlcyIpLkFCQ0hpZ2hsaWdodFJ1bGVzOwogICAgdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKICAgIHZhciBNb2RlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBBQkNIaWdobGlnaHRSdWxlczsKICAgICAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7CiAgICB9OwogICAgb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCiAgICAoZnVuY3Rpb24gKCkgewogICAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2FiYyI7CiAgICB9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCiAgICBleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvYWJjIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-actionscript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hY3Rpb25zY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQWN0aW9uU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IHRva2VuOiAnc3VwcG9ydC5jbGFzcy5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpSKD86ZWNvcmRzZXR8REJNU1Jlc29sdmVyfGFkaW9CdXR0b24oPzpHcm91cCk/KXxYKD86TUwoPzpTb2NrZXR8Tm9kZXxDb25uZWN0b3IpP3xVcGRhdGVSZXNvbHZlckRhdGFIb2xkZXIpfE0oPzpNKD86U2F2ZXxFeGVjdXRlKXxpY3JvcGhvbmVNaWNyb3Bob25lfG8oPzp1c2V8dmllQ2xpcCg/OkxvYWRlcik/KXxlKD86bnUoPzpCYXIpP3xkaWEoPzpDb250cm9sbGVyfERpc3BsYXl8UGxheWJhY2spKXxhdGgpfEIoPzp5TmFtZXxpbmRpbmd8dXR0b24pfFMoPzpoYXJlZE9iamVjdHx5c3RlbXxjcm9sbFBhbmV8dCg/OnlsZVNoZWV0fGFnZXxyZWFtKXxvdW5kfGUoPzpuZEV2ZW50fHJ2aWNlT2JqZWN0KXxPQVBDYWxsfGxpZGUpfE4oPzp1bWVyaWNTdGVwcGVyfGV0KD86c3RyZWFtfFMoPzp0cmVhbXxlcnZpY2VzKXxDb25uZWN0aW9ufERlYnVnKD86Q29uZmlnKT8pKXxDKD86aGVja0JveHxvKD86bnRleHRNZW51KD86SXRlbSk/fG9raWV8bG9yfG0oPzpwb25lbnRNaXhpbnN8Ym9Cb3gpKXx1c3RvbUFjdGlvbnN8bGllbnR8YW1lcmEpfFQoPzp5cGVkVmFsdWV8ZXh0KD86U25hcHNob3R8SW5wdXR8Rig/OmllbGR8b3JtYXQpfEFyZWEpfHJlZXxBQil8T2JqZWN0fEQoPzpvd25sb2FkfGVsdGEoPzpJdGVtfFBhY2tldCk/fGF0KD86ZSg/OkNob29zZXJ8RmllbGQpP3xhKD86Ryg/Omx1ZXxyaWQpfFNldHxUeXBlKSkpfFUoPzpSTHxUQ3xJU2Nyb2xsQmFyKXxQKD86b3BVcE1hbmFnZXJ8ZW5kaW5nQ2FsbHxyKD86aW50Sm9ifG8oPzpkdWN0fGdyZXNzQmFyKSkpfEUoPzpuZFBvaW50fHJyb3IpfFZpZGVvfEtleXxGKD86UmFkaW9CdXR0b258R3JpZENvbHVtbnxNZXNzYWdlQm94fEJhckNoYXJ0fFMoPzpjcm9sbCg/OkJhcnxQYW5lKXx0eWxlRm9ybWF0fHBsaXRWaWV3KXxvcm18Qyg/OmhlY2tib3h8b21ib0JveHxhbGVuZGFyKXx1bmN0aW9ufFQoPzppY2tlcnxvb2x0aXAoPzpMaXRlKT98cmVlKD86Tm9kZSk/KXxJY29uQnV0dG9ufEQoPzphdGFHcmlkfHJhZ2dhYmxlUGFuZSl8UCg/OmllQ2hhcnR8dXNoQnV0dG9ufHJvKD86Z3Jlc3NCYXJ8bXB0Qm94KSl8TCg/OmkoPzpzdEJveHxuZUNoYXJ0KXxvYWRpbmdCb3gpfEFkdmFuY2VkTWVzc2FnZUJveCl8Vyg/OmluZG93fFNETFVSTHxlYlNlcnZpY2UoPzpDb25uZWN0b3IpPyl8TCg/OmlzdHxvKD86Y2FsQ29ubmVjdGlvbnxhZCg/OmVyfFZhcnMpfGcpfGEoPzp1bmNofGJlbCkpfEEoPzpzQnJvYWRjYXN0ZXJ8Y2MoPzpvcmRpb258ZXNzaWJpbGl0eSl8Uyg/OlNldCg/Ok5hdGl2ZXxQcm9wRmxhZ3MpfE4oPzpld3xhdGl2ZSl8Qyg/Om9uc3RydWN0b3J8bGFtcCg/OjIpPyl8SW5zdGFuY2VPZil8cHBsaWNhdGlvbnxsZXJ0fHJyYXkpKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86cyg/OmgoPzppZnR8b3coPzpHcmlkTGluZXN8TWVudXxCb3JkZXJ8U2V0dGluZ3N8SGVhZGVyc3xDb2x1bW5IZWFkZXJzfFRvZGF5fFByZWZlcmVuY2VzKT98YWQoPzpvd3xlUGFuZSkpfGMoPzpoZW1hfGFsZSg/Olh8TW9kZXxZfENvbnRlbnQpfHIoPzpvbGwoPzpUcmFja3xEcmFnKT98ZWVuKD86UmVzb2x1dGlvbnxDb2xvcnxEUEkpKSl8dCg/OnlsZVNoZWV0fG9wKD86RHJhZ3xBKD86bmltYXRpb258bGxTb3VuZHN8Z2VudCkpP3xlcFNpemV8YSg/OnR1c3xydCg/OkRyYWd8QSg/Om5pbWF0aW9ufGdlbnQpKT8pKXxpKD86bnx6ZXxsZW5jZSg/OlRpbWVPdXR8TGV2ZWwpKXxvKD86bmduYW1lfHVyY2V8cnQoPzpJdGVtcyg/OkJ5KT98T24oPzpIZWFkZXJSZWxlYXNlKT98YWJsZSg/OkNvbHVtbnMpPyk/KXx1KD86cHByZXNzSW52YWxpZENhbGxzfGJzdHIoPzppbmcpPyl8cCg/OmxpKD86Y2V8dCl8YWNlQ29sKD86dW1uc0VxdWFsbHl8bHVtbnNFcXVhbGx5KSl8ZSg/Om5kKD86RGVmYXVsdFB1c2hCdXR0b25FdmVudHxBbmRMb2FkKT98Y3VyaXR5fHQoPzpSKD86R0J8byg/Om90Tm9kZXx3KD86SGVpZ2h0fENvdW50KSl8ZXNpemFibGUoPzpDb2x1bW5zKT98YSg/Om5nZXx0ZSkpfEcoPzphaW58cm91cE5hbWUpfFgoPzpBeGlzVGl0bGUpP3xNKD86aSg/Om4oPzppbXVtfHV0ZXMpfGxsaXNlY29uZHMpfG8oPzpudGgoPzpOYW1lcyk/fHRpb25MZXZlbHxkZSl8dWx0aWxpbmVNb2RlfGUoPzpzc2FnZXxudSg/Okl0ZW1FbmFibGVkKD86QXQpP3xFbmFibGVkQXQpfGRpYSl8YSg/OnNrfHhpbXVtKSl8Qig/OnUoPzp0dG9uKD86c3xXaWR0aCl8ZmZlclRpbWUpfGEoPzpzZVRhYkluZGV4fG5kd2lkdGhMaW1pdHxja2dyb3VuZCkpfFMoPzpob3dBc0Rpc2FibGVkfGNyb2xsKD86aW5nfFNwZWVkfENvbnRlbnR8VGFyZ2V0fFAoPzpvc2l0aW9ufHJvcGVydGllcyl8YmFyU3RhdGV8TG9jYXRpb24pfHQoPzp5bGUoPzpQcm9wZXJ0eSk/fG9wT25Gb2N1c3xhdCg/OnVzfGUpKXxpKD86emV8bGVuY2VMZXZlbCl8b3J0KD86YWJsZSg/OkNvbHVtbnMpP3xGdW5jdGlvbil8cCg/OmxpdHRlckJhclBvc2l0aW9ufGFjaW5nKXxlKD86Y29uZHN8bGVjdCg/Ok11bHRpcGxlfGlvbig/OlJlcXVpcmVkfFR5cGUpP3xTdHlsZXxDb2xvcnxlZCg/Ok5vZGUoPzpzKT98Q2VsbHxJKD86bmQoPzppY2VzfGV4KXx0ZW0oPzpzKT8pKT98YWJsZSkpfGtpbnxtKD86b290aG5lc3N8YWxsU2Nyb2xsKSl8SCg/OmlnaGxpZ2h0KD86c3xDb2xvcil8U2Nyb2xsfG8oPzp1cnN8cml6b250YWwpfGVhZGVyKD86U3ltYm9sfEhlaWdodHxUZXh0fFByb3BlcnR5fEZvcm1hdHxXaWR0aHxMb2NhdGlvbik/fGFzKD86U2hhZGVyfENsb3NlQm94KSl8WSg/OmVhcnxBeGlzVGl0bGUpP3xOKD86b2RlKD86UHJvcGVydGllc3xFeHBhbnNpb25IYW5kbGVyKXxld1RleHRGb3JtYXQpfEMoPzpoKD86aWxkTm9kZXN8YSg/Om5nZUhhbmRsZXJ8cnQoPzpUaXRsZXxFdmVudEhhbmRsZXIpKSl8byg/Om50ZW50KD86U2l6ZSk/fG9raWV8bHVtbnMpfGVsbCg/OlN5bWJvbHxEYXRhKXxsKD86aSg/OmNrSGFuZGxlcnxwYm9hcmQpfG9zZUhhbmRsZXIpfHJlZGVudGlhbHMpfFQoPzp5cGUoPzpkVmF1bGUpP3xpKD86dGxlKD86YmFySGVpZ2h0KT98cCg/OlRhcmdldHxPZmZzZXQpP3xtZSg/Om91dCg/OkhhbmRsZXIpPyk/KXxvZ2dsZXxleHRGb3JtYXR8cmFuc2Zvcm0pfEkoPzpzKD86QnJhbmNofE9wZW4pfG4oPzp0ZXJ2YWx8cHV0UHJvcGVydHkpfGNvbig/OlN5bWJvbE5hbWUpP3x0ZSg/OnJhdG9yfG0oPzpCeUtleXxTeW1ib2wpKSl8T3JpZW50YXRpb258RCg/OmkoPzpzcGxheSg/OlJhbmdlfEdyYXBoaWNzfE1vZGV8Q2xpcHxUZXh0fGVkTW9udGgpfHJlY3Rpb24pfHVyYXRpb258ZSg/OnB0aCg/OkJlbG93fFRvfEFib3ZlKXxmYXVsdCg/OkdhdGV3YXlVUkx8TWFwcGluZ3N8Tm9kZUljb25TeW1ib2xOYW1lKXxsKD86aXZlcnlNb2RlfGF5KXxidWcoPzpJRCk/KXxhKD86eU9mV2Vla05hbWVzfHQoPzplKD86RmlsdGVyKT98YSg/Ok1hcHBpbmcoPzpzKT98SXRlbSg/OlRleHR8UHJvcGVydHl8Rm9ybWF0KXxQcm92aWRlcnxBbGwoPzpIZWlnaHR8UHJvcGVydHl8Rm9ybWF0fFdpZHRoKSk/KSl8cmEoPzp3Q29ubmVjdG9yc3xnQ29udGVudCkpfFUoPzpzZSg/OlNoYWRvd3xIYW5kQ3Vyc29yfEVjaG9TdXBwcmVzc2lvbnxySW5wdXR8RmFkZSl8VEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcikpfFAoPzpvc2l0aW9ufGVyY2VudENvbXBsZXRlfGFuKD86ZSg/Ok0oPzppbmltdW1TaXplfGF4aW11bVNpemUpfFNpemV8VGl0bGUpKT98cm8oPzpwZXJ0KD86eSg/OkRhdGEpP3xpZXNBdCl8Z3Jlc3MpKXxFKD86bmFibGVkfGRpdCg/OkhhbmRsZXJ8YWJsZSl8eHBhbmQoPzpOb2RlVHJpZ2dlcnxlclN5bWJvbE5hbWUpKXxWKD86U2Nyb2xsfG9sdW1lfGFsdWUoPzpTb3VyY2UpPyl8S2V5RnJhbWVJbnRlcnZhbHxRdWFsaXR5fEYoPzppKD86ZWxkfHJzdCg/OkRheU9mV2Vla3xWaXNpYmxlTm9kZSkpfG9jdXN8dWxsWWVhcnxwc3xhZGUoPzpJbkxlbmd0aHxPdXRMZW5ndGgpfHJhbWUoPzpDb2xvcnxXaWR0aCkpfFdpZHRofEwoPzppbmUoPzpDb2xvcnxXZWlnaHQpfG8oPzpvcGJhY2t8YWRUYXJnZXQpfGEoPzpyZ2VTY3JvbGx8YmVsKD86U291cmNlfFBsYWNlbWVudCk/KSl8QSg/OnMoPzpCb29sZWFufFN0cmluZ3xOdW1iZXIpfG4oPzp5VHlwZWRWYWx1ZXxpbWF0aW9uKXxjdGl2KD86ZSg/OlN0YXRlKD86SGFuZGxlcik/fEhhbmRsZXIpfGF0ZUhhbmRsZXIpfHV0b0goPzppZGVTY3JvbGxCYXJ8ZWlnaHQpKSk/fHBhcmF0b3JCZWZvcmV8ZWt8bGVjdCg/Omlvbig/OkRpc2FibGVkfFVuZm9jdXNlZCk/fGVkKD86Tm9kZSg/OnMpP3xDaGlsZHxJKD86bmQoPzppY2VzfGV4KXx0ZW0oPzpzKT8pfERhdCg/OmV8YSkpP3xhYmxlKD86UmFuZ2VzKT8pfHJ2ZXIoPzpTdHJpbmcpPyl8a2lwfHFydHx3YXBEZXB0aHN8bGljZXxhdmVUb1NoYXJlZE9ianxtb290aGluZyl8aCg/OnNjcm9sbCg/OlBvbGljeSk/fHRtbCg/OlRleHQpP3xpKD86dCg/OlRlc3QoPzpUZXh0TmVhclBvcyk/fEFyZWEpfGRlKD86QnVpbHRJbkl0ZW1zfENoaWxkKT98Z2hsaWdodCg/OjJEfDNEKT8pfG9yaXpvbnRhbHxlKD86aWdodHxhZGVyKD86UmUoPzpuZGVyZXJ8bGVhc2UpfEhlaWdodHxUZXh0KSl8UCg/Om9zaXRpb258YWdlU2Nyb2xsU2l6ZSl8YSg/OnMoPzpjaGlsZE5vZGVzfE1QM3xTKD86Y3JlZW4oPzpCcm9hZGNhc3R8UGxheWJhY2spfHRyZWFtaW5nKD86VmlkZW98QXVkaW8pfG9ydCl8TmV4dHxPd25Qcm9wZXJ0eXxQcig/OmludGluZ3xldmlvdXMpfEVtYmVkZGVkVmlkZW98VmlkZW9FbmNvZGVyfEEoPzpjY2VzaWJpbGl0eXx1ZGlvKD86RW5jb2Rlcik/KSl8bmRsZXJOYW1lKXxMaW5lU2Nyb2xsU2l6ZSl8eWUoPzpzTGFiZWx8YXIpfG4oPzpvKD86dHxkZSg/Ok5hbWV8Q2xvc2V8VHlwZXxPcGVufFZhbHVlKXxMYWJlbCl8dSg/OmxsVmFsdWV8bUNoaWxkKD86Uyg/OmNyZWVuc3xsaWRlcyl8cmVufEZvcm1zKSl8ZSg/OncoPzpJdGVtfGxpbmV8VmFsdWV8TG9jYXRpb25EaWFsb2cpfHh0KD86Uyg/OmNlbmV8aWJsaW5nfGxpZGUpfFRhYkluZGV4fFZhbHVlfEZyYW1lKT8pP3xhbWUoPzpzKT8pfGMoPzpoKD86aWxkTm9kZXN8ZWNrfGEoPzpuZ2UoPzpzUGVuZGluZyk/fHIoPzpDb2RlQXR8QXQpKXxyKXxvKD86c3xuKD86c3QoPzphbnR8cnVjdG9yKXxuZWN0fGMoPzp1cnJlbmN5fGF0KXx0KD86ZW50KD86VHlwZXxQYXRoKT98YWluc3xyb2woPzpQbGFjZW1lbnR8bGVyUG9saWN5KSl8ZGVuc2VXaGl0ZXx2ZXJzaW9uKXxweXxsKD86b3J8dW1uKD86U3RyZXRjaHxOYW1lKD86cyk/fENvdW50KSl8bSg/OnAoPzpvbmVudHxsZXRlKXxtZW50KSl8dSg/OnN0b21JdGVtc3xlUG9pbnQoPzpzKT98cig/OnZlVG98VmFsdWV8cmVudCg/OlNsaWRlfENoaWxkU2xpZGV8SXRlbXxGKD86b2N1c2VkKD86Uyg/OmNyZWVufGxpZGUpfEZvcm0pfHBzKSkpKXxlKD86aWx8bGwoPzpSZW5kZXJlcnxQcmVzc3xFZGl0fEZvY3VzKD86SW58T3V0KSkpfGwoPzppKD86Y2t8ZW50cyl8byg/OnNlKD86QnV0dG9ufFBhbmUpP3xuZSg/Ok5vZGUpPyl8ZWFyKD86Uyg/OmhhcmVkT2JqZWN0c3x0cmVhbXMpfFRpbWVvdXR8SW50ZXJ2YWwpPyl8YSg/Om5jZWxMYWJlbHx0Y2h8cCg/OnRpb258YWJpbGl0aWVzKXxsKD86Y0ZpZWxkc3xsKD86ZSg/OmV8cikpPykpfHJlYXRlKD86R2F0ZXdheUNvbm5lY3Rpb258TWVudXxTZSg/OnJ2ZXJ8Z21lbnQpfEMoPzpoaWxkKD86QXREZXB0aCk/fGwoPzppZW50fGFzcyg/OkNoaWxkQXREZXB0aHxPYmplY3QoPzpBdERlcHRoKT8pKXxhbGwpfFRleHQoPzpOb2RlfEZpZWxkKXxJdGVtfE9iamVjdCg/OkF0RGVwdGgpP3xQb3BVcHxFKD86bGVtZW50fG1wdHlNb3ZpZUNsaXApKSl8dCg/OmgoPzppc3xyb3cpfHlwZSg/Om9mfE5hbWUpP3xpKD86dGxlKD86U3R5bGVEZWNsYXJhdGlvbik/fG1lKD86b3V0KT8pfG8oPzp0YWxUaW1lfFN0cmluZ3xvbFRpcFRleHR8cHxVcHBlckNhc2V8Z2dsZSg/OkhpZ2hRdWFsaXR5KT98TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlKD86c3R8bGxUYXJnZXR8eHQoPzpSaWdodE1hcmdpbnxCb2xkfFMoPzppemV8ZWxlY3RlZCl8SGVpZ2h0fENvbG9yfEkoPzpuZGVudHx0YWxpYyl8RGlzYWJsZWR8VW5kZXJsaW5lfEYoPzppZWxkfG9udCl8V2lkdGh8TGVmdE1hcmdpbnxBbGlnbik/KXxhKD86bnxyZ2V0KD86UGF0aCk/fGIoPzpTdG9wc3xDaGlsZHJlbnxJbmRleHxFbmFibGVkfGxlTmFtZSkpfHIoPzp5fGlnZ2VyfGFjKD86ZXxrKD86QXNNZW51KT8pKSl8aSg/OnMoPzpSdW5uaW5nfEJyYW5jaHxOYU58Q29uKD86c29sZU9wZW58bmVjdGVkKXxUb2dnbGVkfEluc3RhbGxlZHxPcGVufEQoPzpvd258ZWJ1Z2dlcil8UCg/OnVyY2hhc2VkfHJvKD86dG90eXBlT2Z8cGVydHlFbnVtZXJhYmxlKSl8RW1wdHl8Rig/OmluaXRlfHVsbHlQb3B1bGF0ZWQpfExvY2FsfEFjdGl2ZSl8big/OnMoPzp0YWxsfGVydEJlZm9yZSl8Y2x1ZGVEZWx0YVBhY2tldEluZm98dHxpdCg/OmlhbGl6ZXxDb21wb25lbnR8UG9kfEEoPzpwcGxpY2F0aW9ufGdlbnQpKT98ZGUoPzpudHx0ZXJtaW5hdGV8eCg/OkluUGFyZW50KD86U2xpZGV8Rm9ybSk/fE9mKT8pfHB1dHx2YWxpZGF0ZXxmaW5pdHl8TG9jYWxJbnRlcm5ldENhY2hlKT98Y29uKD86Rig/OmllbGR8dW5jdGlvbikpP3x0KD86ZSg/OnJhdG9yU2Nyb2xsZWR8bSg/OnN8Um9sbE8oPzp1dHx2ZXIpfENsYXNzTmFtZSkpfGFsaWMpfGQzfHB8ZkZyYW1lTG9hZGVkfGdub3JlKD86Q2FzZXxXaGl0ZSkpfG8oPzpzfG4oPzpSKD86b2xsTyg/OnV0fHZlcil8ZSg/OnMoPzppemV8dWx0KXxsKD86ZWFzZSg/Ok91dHNpZGUpP3xhc2VPdXRzaWRlKSkpfFhNTHxNb3VzZSg/Ok1vdmV8RG93bnxVcHxXaGVlbCl8Uyg/OnluY3xjcm9sbGVyfHRhdHVzfG91bmRDb21wbGV0ZXxlKD86dEZvY3VzfGxlY3QoPzplZEl0ZW0pPykpfE4oPzpvdGljZUV2ZW50fGV0d29ya0NoYW5nZSl8Qyg/OmhhbmdlZHxvbm5lY3R8bCg/OmlwRXZlbnR8b3NlKSl8SUQzfEQoPzppc2Nvbm5lY3R8ZWFjdGl2YXRlfGF0YXxyYWdPKD86dXR8dmVyKSl8VW4oPzppbnN0YWxsfGxvYWQpfFAoPzpheW1lbnRSZXN1bHR8cmVzcyl8RW50ZXJGcmFtZXxLKD86aWxsRm9jdXN8ZXkoPzpEb3dufFVwKSl8RmF1bHR8TG8oPzphZHxnKXxBKD86Y3Rpdig/Oml0eXxhdGUpfHBwU3QoPzpvcHxhcnQpKSk/fHBlKD86bnxyYXRpb24pfHZlckxheUNoaWxkcmVufGtMYWJlbHxsZFZhbHVlfHIoPzpkKT8pfGQoPzppKD86cyg/OmNvbm5lY3R8cGxheSg/Ok5vcm1hbHxlZCg/Ok1vbnRofFllYXIpfEZ1bGwpfGFibGUoPzpTaGFkZXJ8ZCg/OlJhbmdlc3xEYXlzKXxDbG9zZUJveHxFdmVudHMpKXxyZWN0aW9uKXxvKD86Y1R5cGVEZWNsfHRhbGx8RGVjb2Rpbmd8bWFpbnxMYXp5RGVjb2RpbmcpfHUoPzpwbGljYXRlTW92aWVDbGlwfHJhdGlvbil8ZSg/OnN0cm95KD86Q2hpbGRBdHxPYmplY3QpfGNvZGV8ZmF1bHQoPzpQdXNoQnV0dG9uKD86RW5hYmxlZCk/fEtleWRvd25IYW5kbGVyKT98bCg/OnRhKD86UGFja2V0KD86Q2hhbmdlZCk/KT98ZXRlKD86UG9wVXB8QWxsKT8pfGJsb2NraW5nKXxhKD86c2hCb2FyZFNhdmV8eU5hbWVzfHRhKD86UHJvdmlkZXIpP3xya3NoYWRvdyl8cig/Om9wZG93big/OldpZHRoKT98YSg/Ond8Z08oPzp1dHx2ZXIpKSkpfHUoPzpzZSg/OlNvcnR8SGFuZEN1cnNvcnxDb2RlcGFnZXxFY2hvU3VwcHJlc3Npb24pfG4oPzpzaGlmdHxpbnN0YWxsfGRlcmxpbmV8ZXNjYXBlfGZvcm1hdHx3YXRjaHxsbyg/OmNrfGFkKD86TW92aWUoPzpOdW0pPyk/KSl8cGRhdGUoPzpSZXN1bHRzfE1vZGV8SSg/Om5wdXRQcm9wZXJ0aWVzfHRlbSg/OkJ5SW5kZXgpPyl8UCg/OmFja2V0fHJvcGVydGllcyl8Vmlld3xBZnRlckV2ZW50KXxybCl8am9pbnxwKD86aXhlbEFzcGVjdFJhdGlvfG8oPzpzaXRpb258cHx3KXx1KD86c2h8cmdlfGJsaXNoKXxlcmNlbig/OnRDb21wbGV0ZXxMb2FkZWQpfGxheSg/OmhlYWQoPzpDaGFuZ2V8VGltZSl8aW5nfEhpZGRlbnxlclR5cGUpP3xhKD86c3N3b3JkfHVzZXxyKD86c2UoPzpYTUx8Q1NTfEludHxGbG9hdCl8ZW50KD86Tm9kZXxJcyg/OlMoPzpjcmVlbnxsaWRlKXxGb3JtKSl8YW1zKSl8cig/OmludCg/Ok51bXxBc0JpdG1hcCg/Ok51bSk/KT98byg/OnRvKD86dHlwZSk/fHBlcnQoPzp5fGllcyl8Z3Jlc3MpfGUoPzpzc3x2KD86aW91cyg/OlMoPzppYmxpbmd8bGlkZSl8VmFsdWUpP3xTY2VuZXxGcmFtZSl8ZmVycmVkKD86SGVpZ2h0fFdpZHRoKSkpKXxlKD86c2NhcGV8big/OmNvZGUoPzpyKT98dGVyKD86RnJhbWUpP3xkRmlsbHxhYmxlKD86U2hhZGVyfGR8Q2xvc2VCb3h8RXZlbnRzKSl8ZGl0KD86YWJsZXxGaWVsZHxMb2NhdGlvbkRpYWxvZyl8dig/OmVudHxhbCg/OnVhdGUpPyl8cXx4KD86dGVuZGVkfHB8ZWMoPzp1dGUpP3xhY3RTZXR0aW5ncyl8bSg/OnBoYXNpemVkKD86U3R5bGVEZWNsYXJhdGlvbik/fGJlZEZvbnRzKSl8dig/OmkoPzpzaWJsZXxld1BvZCl8U2Nyb2xsUG9saWN5fG8oPzppZHxsdW1lKXxlcnNpb258UCg/Om9zaXRpb258YWdlU2Nyb2xsU2l6ZSl8YSg/OmwoPzppZGF0KD86aW9uRXJyb3J8ZSg/OlByb3BlcnR5fEFjdGl2YXRpb25LZXkpPyl8dWUoPzpPZik/KXxyaWFibGUpfExpbmVTY3JvbGxTaXplKXxrKD86aW5kfGV5KD86RG93bnxVcHxQcmVzc3xGcmFtZUludGVydmFsKSl8cSg/OnNvcnR8dWFsaXR5KXxmKD86c2NvbW1hbmR8aSg/Om4oPzpkKD86VGV4dHxGaXJzdHxMYXN0KT98YWxseSl8ZWxkSW5mb3xsdGVyKD86ZWR8RnVuYyk/fHJzdCg/OlNsaWRlfENoaWxkfERheU9mV2Vla3xWaXNpYmxlTm9kZSk/KXxvKD86bnR8Y3VzKD86SW58ZWRDZWxsfE91dHxFbmFibGVkKXxyKD86ZWdyb3VuZERpc2FibGVkfG1hdCg/OnRlcik/KSl8dW5jdGlvbk5hbWV8cHN8bCg/Om9vcnx1c2gpfGFjZXxyb21DaGFyQ29kZSl8dyg/OmkoPzp0aHxkdGgpfG9yZFdyYXB8YXRjaHxyaXRlQWNjZXNzKXxsKD86dHxpKD86c3QoPzpPd25lcik/fG5lKD86U3R5bGV8VG8pKXxvKD86Yyg/Omt8YSg/OnQoPzppb258ZUJ5bGQpfGwoPzpUb0dsb2JhbHxGaWxlUmVhZERpc2FibGUpKSl8b3BiYWNrfGFkKD86TW92aWUoPzpOdW0pP3xTKD86Y3JvbGxDb250ZW50fG91bmQpfGVkfFZhcmlhYmxlcyg/Ok51bSk/fEFwcGxpY2F0aW9uKT98Zyg/OkNoYW5nZXMpPyl8ZSg/Om5ndGh8ZnQoPzpNYXJnaW4pP3xhZGluZyk/fGEoPzpzdCg/OlNsaWRlfENoaWxkfEluZGV4KD86T2YpPyk/fG5ndWFnZXxiKD86ZWwoPzpQbGFjZW1lbnR8Rig/OmllbGR8dW5jdGlvbikpP3xsZUZpZWxkKSkpfGEoPzpzKD86c2NvY2lhdGUoPzpDb250cm9sbGVyfERpc3BsYXkpfGlufHBlY3RSYXRpb3xmdW5jdGlvbil8bmR8Yyg/OmNlcHRDb25uZWN0aW9ufHRpdig/Oml0eUxldmVsfGVQbGF5Q29udHJvbCl8b3MpfHQoPzp0KD86YWNoKD86TW92aWV8U291bmR8VmlkZW98QXVkaW8pfHJpYnV0ZXMpfGFuKD86Mik/KXxkZCg/OmhlYWRlcnxSZXF1ZXN0SGVhZGVyfE1lbnUoPzpJdGVtKD86QXQpP3xBdCk/fFNvcnR8SGVhZGVyfE5vKD86dGljZXxkZSg/OkF0KT8pfEMoPzpvbHVtbig/OkF0KT98dWVQb2ludCl8VCg/Om9Mb2NhbEludGVybmV0Q2FjaGV8cmVlTm9kZSg/OkF0KT8pfEkoPzpjb258dGVtKD86cyg/OkF0KT98QXQpPyl8RGVsdGFJdGVtfFAoPzpvZHxhZ2V8cm9wZXJ0eSl8RXZlbnRMaXN0ZW5lcnxWaWV3fEZpZWxkSW5mb3xMaXN0ZW5lcnxBbmltYXRpb24pP3x1dG8oPzpTaXplfFBsYXl8S2V5TmF2fExvYWQpfHBwKD86ZW5kQ2hpbGR8bHkoPzpDaGFuZ2VzfFVwZGF0ZXMpPyl8dkhhcmR3YXJlRGlzYWJsZXxmdGVyTG9hZGVkfGwoPzp0ZXJuYXRlUm93Q29sb3JzfGlnbnxsKD86b3coPzpJbnNlY3VyZURvbWFpbnxEb21haW4pfFRyYW5zaXRpb25zKD86SW5Eb25lfE91dERvbmUpKXxidW0pfHIoPzp0aXN0fHJvd3xnKD86dW1lbnRzfExpc3QpKXxnZW50fGJzKXxyKD86aWdodCg/Ok1hcmdpbik/fG8oPzpvdCg/OlMoPzpjcmVlbnxsaWRlKXxGb3JtKXx1bmR8dyg/OkhlaWdodHxDb3VudCl8bGxPKD86dXR8dmVyKSl8ZSg/OnMoPzp5bmNEZXB0aHx0KD86b3JlUGFuZXxhcnRBbmltYXRpb258cmljdCl8aXooPzplfGFibGUoPzpDb2x1bW5zKT8pfG9sdmVEZWx0YXx1bHQoPzpzKT98cG9uc2UpfGMoPzpvKD86bmNpbGUoPzpSZXN1bHRzfFVwZGF0ZXMpfHJkKXxlaXZlKD86VmlkZW98QXVkaW8pKXxkcmF3fGplY3RDb25uZWN0aW9ufHBsYWNlKD86U2VsfEl0ZW1BdHxBbGxJdGVtcyk/fHZlKD86YWwoPzpDaGlsZCk/fHJzZSl8cXVlc3QoPzpTaXplQ2hhbmdlfFBheW1lbnQpP3xmKD86ZXJyZXJ8cmVzaCg/OlNjcm9sbENvbnRlbnR8RGVzdGluYXRpb25zfFBhbmV8RnJvbVNvdXJjZXMpPyl8bGVhc2UoPzpPdXRzaWRlKT98YWQoPzpPbmx5fEFjY2Vzcyl8Z2lzdGVyKD86U2tpbkVsZW1lbnR8Qyg/Om9sb3IoPzpTdHlsZXxOYW1lKXxsYXNzKXxJbmhlcml0aW5nU3R5bGV8UHJveHkpfG1vdmUoPzpSYW5nZXxNKD86b3ZpZUNsaXB8ZW51KD86SXRlbSg/OkF0KT98QXQpKXxCYWNrZ3JvdW5kfFNvcnR8Tm8oPzp0aWNlfGRlKD86c0F0fEF0KT8pfEMoPzpvbHVtKD86bkF0fEF0KXx1ZVBvaW50cyl8VCg/OmV4dEZpZWxkfHJlZU5vZGUoPzpBdCk/KXxJdGVtKD86QXQpP3xQb2R8RXZlbnRMaXN0ZW5lcnxGcm9tTG9jYWxJbnRlcm5ldENhY2hlfExpc3RlbmVyfEFsbCg/OkMoPzpvbHVtbnN8dWVQb2ludHMpfEl0ZW1zKT8pKXxhKD86bmRvbXx0ZXxkaW9Eb3QpKXxnKD86dHxvdG8oPzpTbGlkZXxOZXh0U2xpZGV8UHJldmlvdXNTbGlkZXxGaXJzdFNsaWRlfExhc3RTbGlkZXxBbmQoPzpTdG9wfFBsYXkpKXxlKD86bnJlfHQoPzpSKD86R0J8byg/Om90Tm9kZXx3Q291bnQpfGUoPzpzaXphYmxlfG1vdGUpKXxYKD86QXhpc1RpdGxlKT98TSg/OmkoPzpuKD86aW11bSg/OlNpemUpP3x1dGVzKXxsbGlzZWNvbmRzKXxvbnRoKD86TmFtZXMpP3x1bHRpbGluZU1vZGV8ZSg/OnNzYWdlfG51KD86SXRlbUF0fEVuYWJsZWRBdHxBdCkpfGF4aW11bSg/OlNpemUpPyl8Qig/Onl0ZXMoPzpUb3RhbHxMb2FkZWQpfG91bmRzfHV0dG9uKD86c3xXaWR0aCl8ZWdpbkluZGV4fGEoPzpuZHdpZHRoTGltaXR8Y2tncm91bmQpKXxTKD86aG93QXNEaXNhYmxlZHxjcm9sbCg/OmluZ3xTcGVlZHxDb250ZW50fFBvc2l0aW9ufGJhclN0YXRlfExvY2F0aW9uKXx0KD86eWxlKD86TmFtZXMpP3xvcE9uRm9jdXN8YXRlKXxpemV8byg/OnVyY2V8cnRTdGF0ZSl8cCg/OmxpdHRlckJhclBvc2l0aW9ufGFjaW5nKXxlKD86Y29uZHN8bGVjdCg/Ok11bHRpcGxlfGlvbig/OlJlcXVpcmVkfFR5cGUpfFN0eWxlfGVkKD86Tm9kZSg/OnMpP3xDZWxsfFRleHR8SSg/Om5kKD86aWNlc3xleCl8dGVtKD86cyk/KSk/KXxydmljZSl8bW9vdGhuZXNzfFdGVmVyc2lvbil8SCg/OmlnaGxpZ2h0KD86c3xDb2xvcil8b3Vyc3xlKD86aWdodHxhZGVyKD86SGVpZ2h0fFRleHR8UHJvcGVydHl8Rm9ybWF0fFdpZHRofExvY2F0aW9uKT8pfGFzKD86U2hhZGVyfENsb3NlQm94KSl8WSg/OmVhcnxBeGlzVGl0bGUpP3xOKD86byg/OnRpY2VzfGRlKD86RGlzcGxheWVkQXR8QXQpKXx1bSg/OkNoaWxkcmVufGJlckF2YWlsYWJsZSl8ZSg/OndUZXh0Rm9ybWF0fHh0SGlnaGVzdERlcHRoKSl8Qyg/OmgoPzppbGQoPzpTKD86Y3JlZW58bGlkZSl8Tm9kZXN8Rm9ybXxBdCl8YXJ0VGl0bGUpfG8oPzpuKD86dGVudHxmaWdJbmZvKXxva2llfGRlfHVudHxsdW1uKD86TmFtZXN8Q291bnR8SW5kZXh8QXQpKXx1ZVBvaW50fGVsbEluZGV4fGxvc2VIYW5kbGVyfGEoPzpsbHxyZXRJbmRleCkpfFQoPzp5cGVkVmFsdWV8aSg/OnRsZSg/OmJhckhlaWdodCk/fHAoPzpUYXJnZXR8T2Zmc2V0KT98bWUoPzpzdGFtcHx6b25lT2Zmc2V0fG91dCg/OlN0YXRlfEhhbmRsZXIpfHIpPyl8b2dnbGV8ZXh0KD86RXh0ZW50fEZvcm1hdCk/fHIoPzplZSg/Ok5vZGVBdHxMZW5ndGgpfGFucyg/OmZvcm18YWN0aW9uSWQpKSl8SSg/OnMoPzpCcmFuY2h8T3Blbil8big/OnN0YW5jZUF0RGVwdGh8ZCg/OmljZXNCeUtleXxleEJ5S2V5KSl8Y29uKD86U3ltYm9sTmFtZSk/fHRlKD86cmF0b3J8bSg/OnNCeUtleXxCeSg/Ok5hbWV8S2V5KXxpZHxJRHxBdCkpfGQpfE8oPzp1dHB1dCg/OlBhcmFtZXRlcig/OnN8QnlOYW1lKT98VmFsdWUoPzpzKT8pfHBlcmF0aW9ufHJpKD86ZW50YXRpb258Z2luYWxDZWxsRGF0YSkpfEQoPzppKD86cyg/OnBsYXkoPzpSYW5nZXxNb2RlfENsaXB8SW5kZXh8ZWRNb250aCl8a1VzYWdlKXxyZWN0aW9uKXx1cmF0aW9ufGUoPzpwdGh8ZmF1bHROb2RlSWNvblN5bWJvbE5hbWV8bCg/OnRhUGFja2V0fGF5KXxidWcoPzpDb25maWd8SUQpPyl8YSg/OnkoPzpPZldlZWtOYW1lcyk/fHQoPzplfGEoPzpNYXBwaW5nKD86cyk/fEl0ZW0oPzpUZXh0fFByb3BlcnR5fEZvcm1hdCl8TGFiZWx8QWxsKD86SGVpZ2h0fFByb3BlcnR5fEZvcm1hdHxXaWR0aCkpPykpfHJhd0Nvbm5lY3RvcnMpfFUoPzpzZSg/OlNoYWRvd3xIYW5kQ3Vyc29yfHJJbnB1dHxGYWRlKXxSTHxUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKSl8UCg/Om8oPzpzaXRpb258ZHMpfGVyY2VudENvbXBsZXRlfGEoPzpuKD86ZSg/Ok0oPzppbmltdW1zfGF4aW11bXMpfEhlaWdodHxUaXRsZXxXaWR0aCkpP3xyZW50Tm9kZSl8cig/Om9wZXJ0eSg/Ok5hbWV8RGF0YSk/fGVmZXIoPzplbmNlc3xyZWQoPzpIZWlnaHR8V2lkdGgpKSkpfEUoPzpuKD86ZEluZGV4fGFibGVkKXxkaXRpbmdEYXRhfHgoPzpwYW5kZXJTeW1ib2xOYW1lfGFuZE5vZGVUcmlnZ2VyKSl8Vig/Omlld2VkKD86UG9kc3xBcHBsaWNhdGlvbnMpfG9sdW1lfGVyc2lvbnxhbHVlKD86U291cmNlKT8pfEYoPzppKD86ZWxkfHJzdCg/OkRheU9mV2Vla3xWaXNpYmxlTm9kZSkpfG8oPzpudExpc3R8Y3VzKXx1bGxZZWFyfGFkZSg/OkluTGVuZ3RofE91dExlbmd0aCl8cmFtZSg/OkNvbG9yfFdpZHRoKSl8V2lkdGh8TCg/OmluZSg/OkNvbG9yfFdlaWdodCl8byg/OmNhbHxhZFRhcmdldCl8ZW5ndGh8YSg/OnN0VGFiSW5kZXh8YmVsKD86U291cmNlKT8pKXxBKD86cyg/OmNpaXxCb29sZWFufFN0cmluZ3xOdW1iZXIpfG4oPzp5VHlwZWRWYWx1ZXxpbWF0aW9uKXxjdGl2KD86ZVN0YXRlKD86SGFuZGxlcik/fGF0ZUhhbmRsZXIpfHV0b0goPzppZGVTY3JvbGxCYXJ8ZWlnaHQpfGxsSXRlbXN8Z2VudCkpPyk/fGxvYmFsKD86U3R5bGVGb3JtYXR8VG9Mb2NhbCk/fGFpbnxyb3VwTmFtZSl8eCg/OnVwZGF0ZVBhY2tldHl8bWxEZWNsKT98bSg/OnkoPzpNZXRob2ROYW1lfENhbGwpfGluKD86aW11bSk/fG8oPzpudGhOYW1lc3x0aW9uKD86VGltZU91dHxMZXZlbCl8ZGUoPzpsQ2hhbmdlZCk/fHVzZSg/Ok1vdmV8Tyg/OnV0fHZlcil8RG93big/OlNvbWV3aGVyZXxPdXRzaWRlKT98VXAoPzpTb21ld2hlcmUpP3xXaGVlbEVuYWJsZWQpfHZlKD86VG8pPyl8dSg/OnRlZHxsdGkoPzpwbGVTKD86aW11bHRhbmVvdXNBbGxvd2VkfGVsZWN0aW9ucyl8bGluZSkpfGUoPzpzc2FnZXxudSg/OlNob3d8SGlkZSk/fHRoKD86b2QpP3xkaWFUeXBlKXxhKD86bnVmYWN0dXJlcnx0Y2h8eCg/OnNjcm9sbHxoc2Nyb2xsfGltdW18SFBvc2l0aW9ufENoYXJzfFZQb3NpdGlvbik/KXxiKD86c3Vic3RyaW5nfGNocnxvcmR8bGVuZ3RoKSl8Yig/Onl0ZXMoPzpUb3RhbHxMb2FkZWQpfGluZEZvcm1hdCg/OlN0cmluZ3N8RnVuY3Rpb24pfG8oPzp0dG9tKD86U2Nyb2xsKT98bGR8cmRlcig/OkNvbG9yKT8pfHUoPzp0dG9uKD86SGVpZ2h0fFdpZHRoKXxpbHRJbkl0ZW1zfGZmZXIoPzpUaW1lfExlbmd0aCl8bGxldCl8ZSg/OmZvcmVBcHBseVVwZGF0ZXN8Z2luKD86R3JhZGllbnRGaWxsfEZpbGwpKXxsb2NrSW5kZW50fGEoPzpuZHdpZHRofGNrZ3JvdW5kKD86U3R5bGV8Q29sb3J8RGlzYWJsZWQpPyl8cm9hZGNhc3RNZXNzYWdlKXxvbkhUVFBTdGF0dXMpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5jb25zdGFudC5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpfX3Byb3RvX198X19yZXNvbHZlfF9hY2NQcm9wc3xfYWxwaGF8X2NoYW5nZWR8X2N1cnJlbnRmcmFtZXxfZHJvcHRhcmdldHxfZmxhc2h8X2ZvY3VzcmVjdHxfZnJhbWVzbG9hZGVkfF9nbG9iYWx8X2hlaWdodHxfaGlnaHF1YWxpdHl8X2xldmVsfF9saXN0ZW5lcnN8X2xvY2tyb290fF9uYW1lfF9wYXJlbnR8X3F1YWxpdHl8X3Jvb3R8X3JvdGF0aW9ufF9zb3VuZGJ1ZnRpbWV8X3RhcmdldHxfdG90YWxmcmFtZXN8X3VybHxfdmlzaWJsZXxfd2lkdGh8X3h8X3htb3VzZXxfeHNjYWxlfF95fF95bW91c2V8X3lzY2FsZSlcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86ZHluYW1pY3xleHRlbmRzfGltcG9ydHxpbXBsZW1lbnRzfGludGVyZmFjZXxwdWJsaWN8cHJpdmF0ZXxuZXd8c3RhdGljfHN1cGVyfHZhcnxmb3J8aW58YnJlYWt8Y29udGludWV8d2hpbGV8ZG98cmV0dXJufGlmfGVsc2V8Y2FzZXxzd2l0Y2gpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3RvcmFnZS50eXBlLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkJvb2xlYW58TnVtYmVyfFN0cmluZ3xWb2lkKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICByZWdleDogJ1xcYig/Om51bGx8dW5kZWZpbmVkfHRydWV8ZmFsc2UpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubnVtZXJpYy5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzowKD86eHxYKVswLTlhLWZBLUZdKnwoPzpbMC05XStcXC4/WzAtOV0qfFxcLlswLTldKykoPzooPzplfEUpKD86XFwrfC0pP1swLTldKyk/KSg/Okx8bHxVTHx1bHx1fFV8RnxmKT9cXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5hY3Rpb25zY3JpcHQuMicgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgICAgICByZWdleDogJ1wnJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXFxcLicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQuc2luZ2xlLmFjdGlvbnNjcmlwdC4yJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuY29uc3RhbnQuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86QkFDS1NQQUNFfENBUFNMT0NLfENPTlRST0x8REVMRVRFS0VZfERPV058RU5EfEVOVEVSfEhPTUV8SU5TRVJUfExFRlR8TE4xMHxMTjJ8TE9HMTBFfExPRzJFfE1BWF9WQUxVRXxNSU5fVkFMVUV8TkVHQVRJVkVfSU5GSU5JVFl8TmFOfFBHRE58UEdVUHxQSXxQT1NJVElWRV9JTkZJTklUWXxSSUdIVHxTUEFDRXxTUVJUMV8yfFNRUlQyfFVQKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICcvXFwqJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwqLycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay5hY3Rpb25zY3JpcHQuMicgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgIHJlZ2V4OiAnLy8uKiQnLAogICAgICAgICAgIHB1c2hfOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5saW5lLmRvdWJsZS1zbGFzaC5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgICAgICByZWdleDogJyQnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQubGluZS5kb3VibGUtc2xhc2guYWN0aW9uc2NyaXB0LjInIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICdcXGJpbnN0YW5jZW9mXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5zeW1ib2xpYy5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgcmVnZXg6ICdbLSElJiorPS8/Ol0nIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdtZXRhLnByZXByb2Nlc3Nvci5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucHJlcHJvY2Vzc29yLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAnbWV0YS5wcmVwcm9jZXNzb3IuYWN0aW9uc2NyaXB0LjInIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFsgXFx0XSopKCMpKFthLXpBLVpdKyknIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdzdG9yYWdlLnR5cGUuZnVuY3Rpb24uYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICdtZXRhLmZ1bmN0aW9uLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICdtZXRhLmZ1bmN0aW9uLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmJlZ2luLmFjdGlvbnNjcmlwdC4yJyBdLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKGZ1bmN0aW9uKShcXHMrKShbYS16QS1aX11cXHcqKShcXHMqKShcXCgpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmVuZC5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICd2YXJpYWJsZS5wYXJhbWV0ZXIuZnVuY3Rpb24uYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdbXiwpJF0rJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5mdW5jdGlvbi5hY3Rpb25zY3JpcHQuMicgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdzdG9yYWdlLnR5cGUuY2xhc3MuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICdtZXRhLmNsYXNzLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudHlwZS5jbGFzcy5hY3Rpb25zY3JpcHQuMicsCiAgICAgICAgICAgICAgJ21ldGEuY2xhc3MuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICdzdG9yYWdlLm1vZGlmaWVyLmV4dGVuZHMuYWN0aW9uc2NyaXB0LjInLAogICAgICAgICAgICAgICdtZXRhLmNsYXNzLmFjdGlvbnNjcmlwdC4yJywKICAgICAgICAgICAgICAnZW50aXR5Lm90aGVyLmluaGVyaXRlZC1jbGFzcy5hY3Rpb25zY3JpcHQuMicgXSwKICAgICAgICAgICByZWdleDogJ1xcYihjbGFzcykoXFxzKykoW2EtekEtWl9dKD86XFx3fFxcLikqKSg/OihcXHMrKShleHRlbmRzKShcXHMrKShbYS16QS1aX10oPzpcXHd8XFwuKSopKT8nIH0gXSB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpBY3Rpb25TY3JpcHRIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsgZmlsZVR5cGVzOiBbICdhcycgXSwKICAgICAga2V5RXF1aXZhbGVudDogJ15+QScsCiAgICAgIG5hbWU6ICdBY3Rpb25TY3JpcHQnLAogICAgICBzY29wZU5hbWU6ICdzb3VyY2UuYWN0aW9uc2NyaXB0LjInIH07CgoKb29wLmluaGVyaXRzKEFjdGlvblNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5BY3Rpb25TY3JpcHRIaWdobGlnaHRSdWxlcyA9IEFjdGlvblNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2FjdGlvbnNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2FjdGlvbnNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEFjdGlvblNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9hY3Rpb25zY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuQWN0aW9uU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQWN0aW9uU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2FjdGlvbnNjcmlwdCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FjdGlvbnNjcmlwdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-ada.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hZGFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQWRhSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKdmFyIGtleXdvcmRzID0gImFib3J0fGVsc2V8bmV3fHJldHVybnxhYnN8ZWxzaWZ8bm90fHJldmVyc2V8YWJzdHJhY3R8ZW5kfG51bGx8YWNjZXB0fGVudHJ5fHNlbGVjdHwiICsKImFjY2Vzc3xleGNlcHRpb258b2Z8c2VwYXJhdGV8YWxpYXNlZHxleGl0fG9yfHNvbWV8YWxsfG90aGVyc3xzdWJ0eXBlfGFuZHxmb3J8b3V0fHN5bmNocm9uaXplZHwiICsKImFycmF5fGZ1bmN0aW9ufG92ZXJyaWRpbmd8YXR8dGFnZ2VkfGdlbmVyaWN8cGFja2FnZXx0YXNrfGJlZ2lufGdvdG98cHJhZ21hfHRlcm1pbmF0ZXwiICsKImJvZHl8cHJpdmF0ZXx0aGVufGlmfHByb2NlZHVyZXx0eXBlfGNhc2V8aW58cHJvdGVjdGVkfGNvbnN0YW50fGludGVyZmFjZXx1bnRpbHwiICsKInxpc3xyYWlzZXx1c2V8ZGVjbGFyZXxyYW5nZXxkZWxheXxsaW1pdGVkfHJlY29yZHx3aGVufGRlbHRhfGxvb3B8cmVtfHdoaWxlfGRpZ2l0c3xyZW5hbWVzfHdpdGh8ZG98bW9kfHJlcXVldWV8eG9yIjsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgKICAgICAgICAidHJ1ZXxmYWxzZXxudWxsIgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiY291bnR8bWlufG1heHxhdmd8c3VtfHJhbmt8bm93fGNvYWxlc2NlfG1haW4iCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi0tLiokIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vICIgc3RyaW5nCiAgICAgICAgICAgIHJlZ2V4IDogJyIuKj8iJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vIGNoYXJhY3RlcgogICAgICAgICAgICByZWdleCA6ICInLiciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcL3xcXC9cXC98JXw8QD58QD58PEB8JnxcXF58fnw8fD58PD18PT58PT18IT18PD58PSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXChdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9IF0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoQWRhSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkFkYUhpZ2hsaWdodFJ1bGVzID0gQWRhSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9hZGEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9hZGFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQWRhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2FkYV9oaWdobGlnaHRfcnVsZXMiKS5BZGFIaWdobGlnaHRSdWxlczsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQWRhSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooYmVnaW58bG9vcHx0aGVufGlzfGRvKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHZhciBjb21wbGV0ZV9saW5lID0gbGluZSArIGlucHV0OwogICAgICAgIGlmIChjb21wbGV0ZV9saW5lLm1hdGNoKC9eXHMqKGJlZ2lufGVuZCkkLykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcm93KSB7CgogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHByZXZMaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHByZXZMaW5lKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKS5sZW5ndGg7CiAgICAgICAgaWYgKGluZGVudCA8PSBwcmV2SW5kZW50KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHNlc3Npb24ub3V0ZGVudFJvd3MobmV3IFJhbmdlKHJvdywgMCwgcm93ICsgMiwgMCkpOwogICAgfTsKCgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvYWRhIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FkYSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-apache_conf.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hcGFjaGVfY29uZl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBBcGFjaGVDb25mSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmFwYWNoZWNvbmYnLAogICAgICAgICAgICAgICdjb21tZW50LmxpbmUuaGFzaC5pbmknLAogICAgICAgICAgICAgICdjb21tZW50LmxpbmUuaGFzaC5pbmknIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKCg/OlxccykqKSgjKSguKiQpJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuYXBhY2hlY29uZicsCiAgICAgICAgICAgICAgJ2VudGl0eS50YWcuYXBhY2hlY29uZicsCiAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICdzdHJpbmcudmFsdWUuYXBhY2hlY29uZicsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmFwYWNoZWNvbmYnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoPCkoUHJveHl8UHJveHlNYXRjaHxJZlZlcnNpb258RGlyZWN0b3J5fERpcmVjdG9yeU1hdGNofEZpbGVzfEZpbGVzTWF0Y2h8SWZEZWZpbmV8SWZNb2R1bGV8TGltaXR8TGltaXRFeGNlcHR8TG9jYXRpb258TG9jYXRpb25NYXRjaHxWaXJ0dWFsSG9zdCkoPzooXFxzKSguKz8pKT8oPiknIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5hcGFjaGVjb25mJywKICAgICAgICAgICAgICAnZW50aXR5LnRhZy5hcGFjaGVjb25mJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuYXBhY2hlY29uZicgXSwKICAgICAgICAgICByZWdleDogJyg8LykoUHJveHl8UHJveHlNYXRjaHxJZlZlcnNpb258RGlyZWN0b3J5fERpcmVjdG9yeU1hdGNofEZpbGVzfEZpbGVzTWF0Y2h8SWZEZWZpbmV8SWZNb2R1bGV8TGltaXR8TGltaXRFeGNlcHR8TG9jYXRpb258TG9jYXRpb25NYXRjaHxWaXJ0dWFsSG9zdCkoPiknIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdrZXl3b3JkLmFsaWFzLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5yZWdleHAuYXBhY2hlY29uZicsICd0ZXh0JywKICAgICAgICAgICAgICAnc3RyaW5nLnJlcGxhY2VtZW50LmFwYWNoZWNvbmYnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhSZXdyaXRlKD86UnVsZXxDb25kKSkoXFxzKykoLis/KShcXHMrKSguKz8pKCR8XFxzKScgfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2tleXdvcmQuYWxpYXMuYXBhY2hlY29uZicsICd0ZXh0JywKICAgICAgICAgICAgICAnZW50aXR5LnN0YXR1cy5hcGFjaGVjb25mJywgJ3RleHQnLAogICAgICAgICAgICAgICdzdHJpbmcucmVnZXhwLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5wYXRoLmFwYWNoZWNvbmYnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhSZWRpcmVjdE1hdGNoKSg/OihcXHMrKShcXGRcXGRcXGR8cGVybWFuZW50fHRlbXB8c2Vlb3RoZXJ8Z29uZSkpPyhcXHMrKSguKz8pKFxccyspKD86KC4rPykoJHxcXHMpKT8nIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdrZXl3b3JkLmFsaWFzLmFwYWNoZWNvbmYnLCAndGV4dCcsIAogICAgICAgICAgICAgICdlbnRpdHkuc3RhdHVzLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5wYXRoLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5wYXRoLmFwYWNoZWNvbmYnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhSZWRpcmVjdCkoPzooXFxzKykoXFxkXFxkXFxkfHBlcm1hbmVudHx0ZW1wfHNlZW90aGVyfGdvbmUpKT8oXFxzKykoLis/KShcXHMrKSg/OiguKz8pKCR8XFxzKSk/JyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAna2V5d29yZC5hbGlhcy5hcGFjaGVjb25mJywgJ3RleHQnLAogICAgICAgICAgICAgICdzdHJpbmcucmVnZXhwLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5wYXRoLmFwYWNoZWNvbmYnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhTY3JpcHRBbGlhc01hdGNofEFsaWFzTWF0Y2gpKFxccyspKC4rPykoXFxzKykoPzooLis/KShcXHMpKT8nIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdrZXl3b3JkLmFsaWFzLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5wYXRoLmFwYWNoZWNvbmYnLCAndGV4dCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5wYXRoLmFwYWNoZWNvbmYnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhSZWRpcmVjdFBlcm1hbmVudHxSZWRpcmVjdFRlbXB8U2NyaXB0QWxpYXN8QWxpYXMpKFxccyspKC4rPykoXFxzKykoPzooLis/KSgkfFxccykpPycgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29yZS5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkFjY2VwdFBhdGhJbmZvfEFjY2Vzc0ZpbGVOYW1lfEFkZERlZmF1bHRDaGFyc2V0fEFkZE91dHB1dEZpbHRlckJ5VHlwZXxBbGxvd0VuY29kZWRTbGFzaGVzfEFsbG93T3ZlcnJpZGV8QXV0aE5hbWV8QXV0aFR5cGV8Q0dJTWFwRXh0ZW5zaW9ufENvbnRlbnREaWdlc3R8RGVmYXVsdFR5cGV8RG9jdW1lbnRSb290fEVuYWJsZU1NQVB8RW5hYmxlU2VuZGZpbGV8RXJyb3JEb2N1bWVudHxFcnJvckxvZ3xGaWxlRVRhZ3xGb3JjZVR5cGV8SG9zdG5hbWVMb29rdXBzfElkZW50aXR5Q2hlY2t8SW5jbHVkZXxLZWVwQWxpdmV8S2VlcEFsaXZlVGltZW91dHxMaW1pdEludGVybmFsUmVjdXJzaW9ufExpbWl0UmVxdWVzdEJvZHl8TGltaXRSZXF1ZXN0RmllbGRzfExpbWl0UmVxdWVzdEZpZWxkU2l6ZXxMaW1pdFJlcXVlc3RMaW5lfExpbWl0WE1MUmVxdWVzdEJvZHl8TG9nTGV2ZWx8TWF4S2VlcEFsaXZlUmVxdWVzdHN8TmFtZVZpcnR1YWxIb3N0fE9wdGlvbnN8UmVxdWlyZXxSTGltaXRDUFV8UkxpbWl0TUVNfFJMaW1pdE5QUk9DfFNhdGlzZnl8U2NyaXB0SW50ZXJwcmV0ZXJTb3VyY2V8U2VydmVyQWRtaW58U2VydmVyQWxpYXN8U2VydmVyTmFtZXxTZXJ2ZXJQYXRofFNlcnZlclJvb3R8U2VydmVyU2lnbmF0dXJlfFNlcnZlclRva2Vuc3xTZXRIYW5kbGVyfFNldElucHV0RmlsdGVyfFNldE91dHB1dEZpbHRlcnxUaW1lT3V0fFRyYWNlRW5hYmxlfFVzZUNhbm9uaWNhbE5hbWUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5tcG0uYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpBY2NlcHRNdXRleHxBc3NpZ25Vc2VySUR8QlMyMDAwQWNjb3VudHxDaGlsZFBlclVzZXJJRHxDb3JlRHVtcERpcmVjdG9yeXxFbmFibGVFeGNlcHRpb25Ib29rfEdyb3VwfExpc3RlbnxMaXN0ZW5CYWNrbG9nfExvY2tGaWxlfE1heENsaWVudHN8TWF4TWVtRnJlZXxNYXhSZXF1ZXN0c1BlckNoaWxkfE1heFJlcXVlc3RzUGVyVGhyZWFkfE1heFNwYXJlU2VydmVyc3xNYXhTcGFyZVRocmVhZHN8TWF4VGhyZWFkc3xNYXhUaHJlYWRzUGVyQ2hpbGR8TWluU3BhcmVTZXJ2ZXJzfE1pblNwYXJlVGhyZWFkc3xOdW1TZXJ2ZXJzfFBpZEZpbGV8UmVjZWl2ZUJ1ZmZlclNpemV8U2NvcmVCb2FyZEZpbGV8U2VuZEJ1ZmZlclNpemV8U2VydmVyTGltaXR8U3RhcnRTZXJ2ZXJzfFN0YXJ0VGhyZWFkc3xUaHJlYWRMaW1pdHxUaHJlYWRzUGVyQ2hpbGR8VGhyZWFkU3RhY2tTaXplfFVzZXJ8V2luMzJEaXNhYmxlQWNjZXB0RXgpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5hY2Nlc3MuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpBbGxvd3xEZW55fE9yZGVyKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuYWN0aW9ucy5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkFjdGlvbnxTY3JpcHQpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5hbGlhcy5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkFsaWFzfEFsaWFzTWF0Y2h8UmVkaXJlY3R8UmVkaXJlY3RNYXRjaHxSZWRpcmVjdFBlcm1hbmVudHxSZWRpcmVjdFRlbXB8U2NyaXB0QWxpYXN8U2NyaXB0QWxpYXNNYXRjaClcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmF1dGguYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpBdXRoQXV0aG9yaXRhdGl2ZXxBdXRoR3JvdXBGaWxlfEF1dGhVc2VyRmlsZSlcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmF1dGhfYW5vbi5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkFub255bW91c3xBbm9ueW1vdXNfQXV0aG9yaXRhdGl2ZXxBbm9ueW1vdXNfTG9nRW1haWx8QW5vbnltb3VzX011c3RHaXZlRW1haWx8QW5vbnltb3VzX05vVXNlcklEfEFub255bW91c19WZXJpZnlFbWFpbClcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmF1dGhfZGJtLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86QXV0aERCTUF1dGhvcml0YXRpdmV8QXV0aERCTUdyb3VwRmlsZXxBdXRoREJNVHlwZXxBdXRoREJNVXNlckZpbGUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5hdXRoX2RpZ2VzdC5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkF1dGhEaWdlc3RBbGdvcml0aG18QXV0aERpZ2VzdERvbWFpbnxBdXRoRGlnZXN0RmlsZXxBdXRoRGlnZXN0R3JvdXBGaWxlfEF1dGhEaWdlc3ROY0NoZWNrfEF1dGhEaWdlc3ROb25jZUZvcm1hdHxBdXRoRGlnZXN0Tm9uY2VMaWZldGltZXxBdXRoRGlnZXN0UW9wfEF1dGhEaWdlc3RTaG1lbVNpemUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5hdXRoX2xkYXAuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpBdXRoTERBUEF1dGhvcml0YXRpdmV8QXV0aExEQVBCaW5kRE58QXV0aExEQVBCaW5kUGFzc3dvcmR8QXV0aExEQVBDaGFyc2V0Q29uZmlnfEF1dGhMREFQQ29tcGFyZUROT25TZXJ2ZXJ8QXV0aExEQVBEZXJlZmVyZW5jZUFsaWFzZXN8QXV0aExEQVBFbmFibGVkfEF1dGhMREFQRnJvbnRQYWdlSGFja3xBdXRoTERBUEdyb3VwQXR0cmlidXRlfEF1dGhMREFQR3JvdXBBdHRyaWJ1dGVJc0ROfEF1dGhMREFQUmVtb3RlVXNlcklzRE58QXV0aExEQVBVcmwpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5hdXRvaW5kZXguYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpBZGRBbHR8QWRkQWx0QnlFbmNvZGluZ3xBZGRBbHRCeVR5cGV8QWRkRGVzY3JpcHRpb258QWRkSWNvbnxBZGRJY29uQnlFbmNvZGluZ3xBZGRJY29uQnlUeXBlfERlZmF1bHRJY29ufEhlYWRlck5hbWV8SW5kZXhJZ25vcmV8SW5kZXhPcHRpb25zfEluZGV4T3JkZXJEZWZhdWx0fFJlYWRtZU5hbWUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jYWNoZS5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkNhY2hlRGVmYXVsdEV4cGlyZXxDYWNoZURpc2FibGV8Q2FjaGVFbmFibGV8Q2FjaGVGb3JjZUNvbXBsZXRpb258Q2FjaGVJZ25vcmVDYWNoZUNvbnRyb2x8Q2FjaGVJZ25vcmVIZWFkZXJzfENhY2hlSWdub3JlTm9MYXN0TW9kfENhY2hlTGFzdE1vZGlmaWVkRmFjdG9yfENhY2hlTWF4RXhwaXJlKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY2Vybl9tZXRhLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86TWV0YURpcnxNZXRhRmlsZXN8TWV0YVN1ZmZpeClcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmNnaS5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OlNjcmlwdExvZ3xTY3JpcHRMb2dCdWZmZXJ8U2NyaXB0TG9nTGVuZ3RoKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY2dpZC5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OlNjcmlwdExvZ3xTY3JpcHRMb2dCdWZmZXJ8U2NyaXB0TG9nTGVuZ3RofFNjcmlwdFNvY2spXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jaGFyc2V0X2xpdGUuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpDaGFyc2V0RGVmYXVsdHxDaGFyc2V0T3B0aW9uc3xDaGFyc2V0U291cmNlRW5jKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuZGF2LmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86RGF2fERhdkRlcHRoSW5maW5pdHl8RGF2TWluVGltZW91dHxEYXZMb2NrREIpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5kZWZsYXRlLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86RGVmbGF0ZUJ1ZmZlclNpemV8RGVmbGF0ZUNvbXByZXNzaW9uTGV2ZWx8RGVmbGF0ZUZpbHRlck5vdGV8RGVmbGF0ZU1lbUxldmVsfERlZmxhdGVXaW5kb3dTaXplKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuZGlyLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86RGlyZWN0b3J5SW5kZXh8RGlyZWN0b3J5U2xhc2gpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5kaXNrX2NhY2hlLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Q2FjaGVEaXJMZW5ndGh8Q2FjaGVEaXJMZXZlbHN8Q2FjaGVFeHBpcnlDaGVja3xDYWNoZUdjQ2xlYW58Q2FjaGVHY0RhaWx5fENhY2hlR2NJbnRlcnZhbHxDYWNoZUdjTWVtVXNhZ2V8Q2FjaGVHY1VudXNlZHxDYWNoZU1heEZpbGVTaXplfENhY2hlTWluRmlsZVNpemV8Q2FjaGVSb290fENhY2hlU2l6ZXxDYWNoZVRpbWVNYXJnaW4pXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5kdW1waW8uYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpEdW1wSU9JbnB1dHxEdW1wSU9PdXRwdXQpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5lbnYuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpQYXNzRW52fFNldEVudnxVbnNldEVudilcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmV4cGlyZXMuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpFeHBpcmVzQWN0aXZlfEV4cGlyZXNCeVR5cGV8RXhwaXJlc0RlZmF1bHQpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5leHRfZmlsdGVyLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86RXh0RmlsdGVyRGVmaW5lfEV4dEZpbHRlck9wdGlvbnMpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5maWxlX2NhY2hlLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Q2FjaGVGaWxlfE1NYXBGaWxlKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuaGVhZGVycy5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkhlYWRlcnxSZXF1ZXN0SGVhZGVyKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuaW1hcC5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkltYXBCYXNlfEltYXBEZWZhdWx0fEltYXBNZW51KVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuaW5jbHVkZS5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OlNTSUVuZFRhZ3xTU0lFcnJvck1zZ3xTU0lTdGFydFRhZ3xTU0lUaW1lRm9ybWF0fFNTSVVuZGVmaW5lZEVjaG98WEJpdEhhY2spXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5pc2FwaS5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OklTQVBJQXBwZW5kTG9nVG9FcnJvcnN8SVNBUElBcHBlbmRMb2dUb1F1ZXJ5fElTQVBJQ2FjaGVGaWxlfElTQVBJRmFrZUFzeW5jfElTQVBJTG9nTm90U3VwcG9ydGVkfElTQVBJUmVhZEFoZWFkQnVmZmVyKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQubGRhcC5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkxEQVBDYWNoZUVudHJpZXN8TERBUENhY2hlVFRMfExEQVBDb25uZWN0aW9uVGltZW91dHxMREFQT3BDYWNoZUVudHJpZXN8TERBUE9wQ2FjaGVUVEx8TERBUFNoYXJlZENhY2hlRmlsZXxMREFQU2hhcmVkQ2FjaGVTaXplfExEQVBUcnVzdGVkQ0F8TERBUFRydXN0ZWRDQVR5cGUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5sb2cuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpCdWZmZXJlZExvZ3N8Q29va2llTG9nfEN1c3RvbUxvZ3xMb2dGb3JtYXR8VHJhbnNmZXJMb2d8Rm9yZW5zaWNMb2cpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5tZW1fY2FjaGUuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpNQ2FjaGVNYXhPYmplY3RDb3VudHxNQ2FjaGVNYXhPYmplY3RTaXplfE1DYWNoZU1heFN0cmVhbWluZ0J1ZmZlcnxNQ2FjaGVNaW5PYmplY3RTaXplfE1DYWNoZVJlbW92YWxBbGdvcml0aG18TUNhY2hlU2l6ZSlcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm1pbWUuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpBZGRDaGFyc2V0fEFkZEVuY29kaW5nfEFkZEhhbmRsZXJ8QWRkSW5wdXRGaWx0ZXJ8QWRkTGFuZ3VhZ2V8QWRkT3V0cHV0RmlsdGVyfEFkZFR5cGV8RGVmYXVsdExhbmd1YWdlfE1vZE1pbWVVc2VQYXRoSW5mb3xNdWx0aXZpZXdzTWF0Y2h8UmVtb3ZlQ2hhcnNldHxSZW1vdmVFbmNvZGluZ3xSZW1vdmVIYW5kbGVyfFJlbW92ZUlucHV0RmlsdGVyfFJlbW92ZUxhbmd1YWdlfFJlbW92ZU91dHB1dEZpbHRlcnxSZW1vdmVUeXBlfFR5cGVzQ29uZmlnKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQubWlzYy5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OlByb3RvY29sRWNob3xFeGFtcGxlfEFkZE1vZHVsZUluZm98TWltZU1hZ2ljRmlsZXxDaGVja1NwZWxsaW5nfEV4dGVuZGVkU3RhdHVzfFN1ZXhlY1VzZXJHcm91cHxVc2VyRGlyKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQubmVnb3RpYXRpb24uYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpDYWNoZU5lZ290aWF0ZWREb2NzfEZvcmNlTGFuZ3VhZ2VQcmlvcml0eXxMYW5ndWFnZVByaW9yaXR5KVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQubndfc3NsLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86TldTU0xUcnVzdGVkQ2VydHN8TldTU0xVcGdyYWRlYWJsZXxTZWN1cmVMaXN0ZW4pXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5wcm94eS5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkFsbG93Q09OTkVDVHxOb1Byb3h5fFByb3h5QmFkSGVhZGVyfFByb3h5QmxvY2t8UHJveHlEb21haW58UHJveHlFcnJvck92ZXJyaWRlfFByb3h5RnRwRGlyQ2hhcnNldHxQcm94eUlPQnVmZmVyU2l6ZXxQcm94eU1heEZvcndhcmRzfFByb3h5UGFzc3xQcm94eVBhc3NSZXZlcnNlfFByb3h5UHJlc2VydmVIb3N0fFByb3h5UmVjZWl2ZUJ1ZmZlclNpemV8UHJveHlSZW1vdGV8UHJveHlSZW1vdGVNYXRjaHxQcm94eVJlcXVlc3RzfFByb3h5VGltZW91dHxQcm94eVZpYSlcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLnJld3JpdGUuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpSZXdyaXRlQmFzZXxSZXdyaXRlQ29uZHxSZXdyaXRlRW5naW5lfFJld3JpdGVMb2NrfFJld3JpdGVMb2d8UmV3cml0ZUxvZ0xldmVsfFJld3JpdGVNYXB8UmV3cml0ZU9wdGlvbnN8UmV3cml0ZVJ1bGUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5zZXRlbnZpZi5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkJyb3dzZXJNYXRjaHxCcm93c2VyTWF0Y2hOb0Nhc2V8U2V0RW52SWZ8U2V0RW52SWZOb0Nhc2UpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5zby5hcGFjaGVjb25mJywKICAgICAgICAgICByZWdleDogJ1xcYig/OkxvYWRGaWxlfExvYWRNb2R1bGUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5zc2wuYXBhY2hlY29uZicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpTU0xDQUNlcnRpZmljYXRlRmlsZXxTU0xDQUNlcnRpZmljYXRlUGF0aHxTU0xDQVJldm9jYXRpb25GaWxlfFNTTENBUmV2b2NhdGlvblBhdGh8U1NMQ2VydGlmaWNhdGVDaGFpbkZpbGV8U1NMQ2VydGlmaWNhdGVGaWxlfFNTTENlcnRpZmljYXRlS2V5RmlsZXxTU0xDaXBoZXJTdWl0ZXxTU0xFbmdpbmV8U1NMTXV0ZXh8U1NMT3B0aW9uc3xTU0xQYXNzUGhyYXNlRGlhbG9nfFNTTFByb3RvY29sfFNTTFByb3h5Q0FDZXJ0aWZpY2F0ZUZpbGV8U1NMUHJveHlDQUNlcnRpZmljYXRlUGF0aHxTU0xQcm94eUNBUmV2b2NhdGlvbkZpbGV8U1NMUHJveHlDQVJldm9jYXRpb25QYXRofFNTTFByb3h5Q2lwaGVyU3VpdGV8U1NMUHJveHlFbmdpbmV8U1NMUHJveHlNYWNoaW5lQ2VydGlmaWNhdGVGaWxlfFNTTFByb3h5TWFjaGluZUNlcnRpZmljYXRlUGF0aHxTU0xQcm94eVByb3RvY29sfFNTTFByb3h5VmVyaWZ5fFNTTFByb3h5VmVyaWZ5RGVwdGh8U1NMUmFuZG9tU2VlZHxTU0xSZXF1aXJlfFNTTFJlcXVpcmVTU0x8U1NMU2Vzc2lvbkNhY2hlfFNTTFNlc3Npb25DYWNoZVRpbWVvdXR8U1NMVXNlck5hbWV8U1NMVmVyaWZ5Q2xpZW50fFNTTFZlcmlmeURlcHRoKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQudXNlcnRyYWNrLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Q29va2llRG9tYWlufENvb2tpZUV4cGlyZXN8Q29va2llTmFtZXxDb29raWVTdHlsZXxDb29raWVUcmFja2luZylcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLnZob3N0X2FsaWFzLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86VmlydHVhbERvY3VtZW50Um9vdHxWaXJ0dWFsRG9jdW1lbnRSb290SVB8VmlydHVhbFNjcmlwdEFsaWFzfFZpcnR1YWxTY3JpcHRBbGlhc0lQKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2tleXdvcmQucGhwLmFwYWNoZWNvbmYnLAogICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAnZW50aXR5LnByb3BlcnR5LmFwYWNoZWNvbmYnLAogICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAnc3RyaW5nLnZhbHVlLmFwYWNoZWNvbmYnLAogICAgICAgICAgICAgICd0ZXh0JyBdLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKHBocF92YWx1ZXxwaHBfZmxhZylcXGIoPzooXFxzKykoLis/KSg/OihcXHMrKSguKz8pKT8pPyhcXHMpJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24udmFyaWFibGUuYXBhY2hlY29uZicsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLmVudi5hcGFjaGVjb25mJywKICAgICAgICAgICAgICAndmFyaWFibGUubWlzYy5hcGFjaGVjb25mJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24udmFyaWFibGUuYXBhY2hlY29uZicgXSwKICAgICAgICAgICByZWdleDogJyglXFx7KSg/OihIVFRQX1VTRVJfQUdFTlR8SFRUUF9SRUZFUkVSfEhUVFBfQ09PS0lFfEhUVFBfRk9SV0FSREVEfEhUVFBfSE9TVHxIVFRQX1BST1hZX0NPTk5FQ1RJT058SFRUUF9BQ0NFUFR8UkVNT1RFX0FERFJ8UkVNT1RFX0hPU1R8UkVNT1RFX1BPUlR8UkVNT1RFX1VTRVJ8UkVNT1RFX0lERU5UfFJFUVVFU1RfTUVUSE9EfFNDUklQVF9GSUxFTkFNRXxQQVRIX0lORk98UVVFUllfU1RSSU5HfEFVVEhfVFlQRXxET0NVTUVOVF9ST09UfFNFUlZFUl9BRE1JTnxTRVJWRVJfTkFNRXxTRVJWRVJfQUREUnxTRVJWRVJfUE9SVHxTRVJWRVJfUFJPVE9DT0x8U0VSVkVSX1NPRlRXQVJFfFRJTUVfWUVBUnxUSU1FX01PTnxUSU1FX0RBWXxUSU1FX0hPVVJ8VElNRV9NSU58VElNRV9TRUN8VElNRV9XREFZfFRJTUV8QVBJX1ZFUlNJT058VEhFX1JFUVVFU1R8UkVRVUVTVF9VUkl8UkVRVUVTVF9GSUxFTkFNRXxJU19TVUJSRVF8SFRUUFMpfCguKj8pKShcXH0pJyB9LAogICAgICAgICB7IHRva2VuOiBbICdlbnRpdHkubWltZS10eXBlLmFwYWNoZWNvbmYnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJ1xcYigoPzp0ZXh0fGltYWdlfGFwcGxpY2F0aW9ufHZpZGVvfGF1ZGlvKS8uKz8pKFxccyknIH0sCiAgICAgICAgIHsgdG9rZW46ICdlbnRpdHkuaGVscGVyLmFwYWNoZWNvbmYnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86ZnJvbXx1bnNldHxzZXR8b258b2ZmKVxcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5pbnRlZ2VyLmFwYWNoZWNvbmYnLCByZWdleDogJ1xcYlxcZCtcXGInIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICd0ZXh0JywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5mbGFnLmFwYWNoZWNvbmYnLAogICAgICAgICAgICAgICdzdHJpbmcuZmxhZy5hcGFjaGVjb25mJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5mbGFnLmFwYWNoZWNvbmYnLAogICAgICAgICAgICAgICd0ZXh0JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxccykoXFxbKSguKj8pKFxcXSkoXFxzKScgfSBdIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCkFwYWNoZUNvbmZIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsgZmlsZVR5cGVzOiAKICAgICAgIFsgJ2NvbmYnLAogICAgICAgICAnQ09ORicsCiAgICAgICAgICdodGFjY2VzcycsCiAgICAgICAgICdIVEFDQ0VTUycsCiAgICAgICAgICdodGdyb3VwcycsCiAgICAgICAgICdIVEdST1VQUycsCiAgICAgICAgICdodHBhc3N3ZCcsCiAgICAgICAgICdIVFBBU1NXRCcsCiAgICAgICAgICcuaHRhY2Nlc3MnLAogICAgICAgICAnLkhUQUNDRVNTJywKICAgICAgICAgJy5odGdyb3VwcycsCiAgICAgICAgICcuSFRHUk9VUFMnLAogICAgICAgICAnLmh0cGFzc3dkJywKICAgICAgICAgJy5IVFBBU1NXRCcgXSwKICAgICAgbmFtZTogJ0FwYWNoZSBDb25mJywKICAgICAgc2NvcGVOYW1lOiAnc291cmNlLmFwYWNoZWNvbmYnIH07CgoKb29wLmluaGVyaXRzKEFwYWNoZUNvbmZIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQXBhY2hlQ29uZkhpZ2hsaWdodFJ1bGVzID0gQXBhY2hlQ29uZkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2FwYWNoZV9jb25mIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvYXBhY2hlX2NvbmZfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBBcGFjaGVDb25mSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2FwYWNoZV9jb25mX2hpZ2hsaWdodF9ydWxlcyIpLkFwYWNoZUNvbmZIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBBcGFjaGVDb25mSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2FwYWNoZV9jb25mIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvYXBhY2hlX2NvbmYiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-apex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9hcGV4X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuLi9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi4vbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQXBleEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbWFpbktleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJhY3RpdmF0ZXxhbnl8YXV0b25vbW91c3xiZWdpbnxiaWdkZWNpbWFsfGJ5dGV8Y2FzdHxjaGFyfGNvbGxlY3R8Y29uc3QiCiAgICAgICAgICAgICArICJ8ZW5kfGV4aXR8ZXhwb3J0fGZsb2F0fGdvdG98Z3JvdXB8aGF2aW5nfGhpbnR8aW1wb3J0fGlubmVyfGludG98am9pbnxsb29wfG51bWJlcnxvYmplY3R8b2Z8b3V0ZXIiCiAgICAgICAgICAgICArICJ8cGFyYWxsZWx8cHJhZ21hfHJldHJpZXZlfHJldHVybmluZ3xzZWFyY2h8c2hvcnR8c3RhdHxzeW5jaHJvbml6ZWR8dGhlbnx0aGlzX21vbnRoIgogICAgICAgICAgICAgKyAifHRyYW5zYWN0aW9ufHR5cGV8d2hlbiIsCiAgICAgICAgImtleXdvcmQiOiAicHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfG5hdGl2ZXxzeW5jaHJvbml6ZWR8YWJzdHJhY3R8dGhyZWFkc2FmZXx0cmFuc2llbnR8c3RhdGljfGZpbmFsIgogICAgICAgICAgICAgKyAifGFuZHxhcnJheXxhc3xhc2N8YnJlYWt8YnVsa3xieXxjYXRjaHxjbGFzc3xjb21taXR8Y29udGludWV8Y29udmVydGN1cnJlbmN5IgogICAgICAgICAgICAgKyAifGRlbGV0ZXxkZXNjfGRvfGVsc2V8ZW51bXxleHRlbmRzfGZhbHNlfGZpbmFsfGZpbmFsbHl8Zm9yfGZyb218ZnV0dXJlfGdsb2JhbCIKICAgICAgICAgICAgICsgInxpZnxpbXBsZW1lbnRzfGlufGluc2VydHxpbnN0YW5jZW9mfGludGVyZmFjZXxsYXN0XzkwX2RheXN8bGFzdF9tb250aCIKICAgICAgICAgICAgICsgInxsYXN0X25fZGF5c3xsYXN0X3dlZWt8bGlrZXxsaW1pdHxsaXN0fG1hcHxtZXJnZXxuZXd8bmV4dF85MF9kYXlzfG5leHRfbW9udGh8bmV4dF9uX2RheXMiCiAgICAgICAgICAgICArICJ8bmV4dF93ZWVrfG5vdHxudWxsfG51bGxzfG9ufG9yfG92ZXJyaWRlfHBhY2thZ2V8cmV0dXJuIgogICAgICAgICAgICAgKyAifHJvbGxiYWNrfHNhdmVwb2ludHxzZWxlY3R8c2V0fHNvcnR8c3VwZXJ8dGVzdG1ldGhvZHx0aGlzfHRoaXNfd2Vla3x0aHJvd3x0b2RheSIKICAgICAgICAgICAgICsgInx0b2xhYmVsfHRvbW9ycm93fHRyaWdnZXJ8dHJ1ZXx0cnl8dW5kZWxldGV8dXBkYXRlfHVwc2VydHx1c2luZ3x2aXJ0dWFsfHdlYnNlcnZpY2UiCiAgICAgICAgICAgICArICJ8d2hlcmV8d2hpbGV8eWVzdGVyZGF5fHN3aXRjaHxjYXNlfGRlZmF1bHQiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiZGVmfGJvb2xlYW58Ynl0ZXxjaGFyfHNob3J0fGludHxmbG9hdHxwYmxvYnxkYXRlfGRhdGV0aW1lfGRlY2ltYWx8ZG91YmxlfGlkfGludGVnZXJ8bG9uZ3xzdHJpbmd8dGltZXx2b2lkfGJsb2J8T2JqZWN0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOgogICAgICAgICAgICAidHJ1ZXxmYWxzZXxudWxsfGFmdGVyfGJlZm9yZXxjb3VudHxleGNsdWRlc3xmaXJzdHxpbmNsdWRlc3xsYXN0fG9yZGVyfHNoYXJpbmd8d2l0aCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAic3lzdGVtfGFwZXh8bGFiZWx8YXBleHBhZ2VzfHVzZXJpbmZvfHNjaGVtYSIKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7CiAgICBmdW5jdGlvbiBrZXl3b3JkTWFwcGVyKHZhbHVlKSB7CiAgICAgICAgaWYgKHZhbHVlLnNsaWNlKC0zKSA9PSAiX19jIikgcmV0dXJuICJzdXBwb3J0LmZ1bmN0aW9uIjsKICAgICAgICByZXR1cm4gbWFpbktleXdvcmRNYXBwZXIodmFsdWUpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBzdHJpbmcoc3RhcnQsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZWdleDogc3RhcnQgKyAob3B0aW9ucy5tdWx0aWxpbmUgPyAiIiA6ICIoPz0uKSIpLAogICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIG5leHQ6IFt7CiAgICAgICAgICAgICAgICByZWdleDogb3B0aW9ucy5lc2NhcGUsCiAgICAgICAgICAgICAgICB0b2tlbjogImNoYXJhY3Rlci5lc2NhcGUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiBvcHRpb25zLmVycm9yLAogICAgICAgICAgICAgICAgdG9rZW46ICJlcnJvci5pbnZhbGlkIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICByZWdleDogc3RhcnQgKyAob3B0aW9ucy5tdWx0aWxpbmUgPyAiIiA6ICJ8JCIpLAogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgIG5leHQ6IG9wdGlvbnMubmV4dCB8fCAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9OwogICAgfQogICAgCiAgICBmdW5jdGlvbiBjb21tZW50cygpIHsKICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCA6IFsKICAgICAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICAgICAgbmV4dCA6IFsKICAgICAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgIF07CiAgICB9CiAgICAKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbCiAgICAgICAgICAgIHN0cmluZygiJyIsIHsKICAgICAgICAgICAgICAgIGVzY2FwZTogL1xcW25iJyJcXF0vLAogICAgICAgICAgICAgICAgZXJyb3I6IC9cXC4vLAogICAgICAgICAgICAgICAgbXVsdGlsaW5lOiBmYWxzZQogICAgICAgICAgICB9KSwKICAgICAgICAgICAgY29tbWVudHMoImMiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHlwZTogImRlY29yYXRpb24iLAogICAgICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICAgICAibWV0YS5wYWNrYWdlLmFwZXgiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm90aGVyLnBhY2thZ2UuYXBleCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEucGFja2FnZS5hcGV4IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS5tb2RpZmllci5wYWNrYWdlLmFwZXgiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnBhY2thZ2UuYXBleCIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLnRlcm1pbmF0b3IuYXBleCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleDogL14oXHMqKShwYWNrYWdlKVxiKD86KFxzKikoW14gOyRdKykoXHMqKSgoPzo7KT8pKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICByZWdleDogL0BbYS16QS1aXyRdW2EtekEtWl8kXGRcdTAwODAtXHVmZmZlXSovLAogICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAvW2EtekEtWl8kXVthLXpBLVpfJFxkXHUwMDgwLVx1ZmZmZV0qLywKICAgICAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyCiAgICAgICAgICAgIH0sICAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVnZXg6ICJgIyUiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlcnJvci5pbnZhbGlkIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1srLV0/XGQrKD86KD86XC5cZCopPyg/OltMbERkRWVdWystXT9cZCspPylcYnxcLlxkK1tMbERkRWVdLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcfFx8fFw/XDp8WyEkJSYqK1wtflwvXl09Py8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWz86LDsuXS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcW10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWF5YmVfc29xbCIsCiAgICAgICAgICAgICAgICBtZXJnZSA6IGZhbHNlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAogICAgICAgICAgICAgICAgbWVyZ2UgOiBmYWxzZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLywKICAgICAgICAgICAgICAgIG1lcmdlIDogZmFsc2UKICAgICAgICAgICAgfSAKICAgICAgICBdLCAKICAgICAgICBtYXliZV9zb3FsOiBbewogICAgICAgICAgICByZWdleDogL1xzKy8sCiAgICAgICAgICAgIHRva2VuOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAvKFNFTEVDVHxGSU5EKVxiLywKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlLAogICAgICAgICAgICBuZXh0OiAic29xbCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgdG9rZW46ICJub25lIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH1dLAogICAgICAgIHNvcWw6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAiKDo/QVNDfEJZfENBVEVHT1JZfENVQkV8REFUQXxERVNDfEVORHxGSU5EfEZJUlNUfEZPUnxGUk9NfEdST1VQfEhBVklOR3xJTnxMQVNUIgogICAgICAgICAgICAgICAgKyAifExJTUlUfE5FVFdPUkt8TlVMTFN8T0ZGU0VUfE9SREVSfFJFRkVSRU5DRXxSRVRVUk5JTkd8Uk9MTFVQfFNDT1BFfFNFTEVDVCIKICAgICAgICAgICAgICAgICsgInxTTklQUEVUfFRSQUNLSU5HfFRZUEVPRnxVUERBVEV8VVNJTkd8VklFV3xWSUVXU1RBVHxXSEVSRXxXSVRIfEFORHxPUilcXGIiLAogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAiKDo/dGFyZ2V0X2xlbmd0aHx0b0xhYmVsfGNvbnZlcnRDdXJyZW5jeXxjb3VudHxDb250YWN0fEFjY291bnR8VXNlcnxGSUVMRFMpXFxiIiwKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6IC9bXF1dLywKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiLAogICAgICAgICAgICBtZXJnZSA6IGZhbHNlCiAgICAgICAgfSwgCiAgICAgICAgc3RyaW5nKCInIiwgewogICAgICAgICAgICBlc2NhcGU6IC9cXFtuYiciXFxdLywKICAgICAgICAgICAgZXJyb3I6IC9cXC4vLAogICAgICAgICAgICBtdWx0aWxpbmU6IGZhbHNlLAogICAgICAgICAgICBuZXh0OiAic29xbCIKICAgICAgICB9KSwKICAgICAgICBzdHJpbmcoJyInLCB7CiAgICAgICAgICAgIGVzY2FwZTogL1xcW25iJyJcXF0vLAogICAgICAgICAgICBlcnJvcjogL1xcLi8sCiAgICAgICAgICAgIG11bHRpbGluZTogZmFsc2UsCiAgICAgICAgICAgIG5leHQ6ICJzb3FsIgogICAgICAgIH0pLAogICAgICAgIHsKICAgICAgICAgICAgcmVnZXg6IC9cXC4vLAogICAgICAgICAgICB0b2tlbjogImNoYXJhY3Rlci5lc2NhcGUiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4IDogL1tcP1wmXHxcIVx7XH1cW1xdXChcKVxeXH5cKlw6XCJcJ1wrXC1cLFwuPVxcXC9dLywKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIKICAgICAgICB9XSwKICAgICAgICAKICAgICAgICAibG9nLXN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJ0aW1lc3RhbXAuaW52aXNpYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAvXltcZDouKCkgXStcfC8sIAogICAgICAgICAgICBuZXh0OiAibG9nLWhlYWRlciIKICAgICAgICB9LCAgewogICAgICAgICAgICB0b2tlbiA6ICJ0aW1lc3RhbXAuaW52aXNpYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAvXiAgKE51bWJlciBvZnxNYXhpbXVtKVteOl0qOi8sCiAgICAgICAgICAgIG5leHQ6ICJsb2ctY29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImludmlzaWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL15FeGVjdXRlIEFub255bW91czovLAogICAgICAgICAgICBuZXh0OiAibG9nLWNvbW1lbnQiCiAgICAgICAgfSwgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAidGV4dCIKICAgICAgICB9XSwKICAgICAgICAibG9nLWNvbW1lbnQiOiBbewogICAgICAgICAgICB0b2tlbiA6ICJsb2ctY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogLy4qJC8sCiAgICAgICAgICAgIG5leHQ6ICJsb2ctc3RhcnQiCiAgICAgICAgfV0sCiAgICAgICAgImxvZy1oZWFkZXIiOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ0aW1lc3RhbXAuaW52aXNpYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAvKChVU0VSX0RFQlVHfFxbXGQrXF18REVCVUcpXHwpKy8KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86RVhFQ1VUSU9OX0ZJTklTSEVEfEVYRUNVVElPTl9TVEFSVEVEfENPREVfVU5JVF9TVEFSVEVEIgogICAgICAgICAgICAgICAgKyAifENVTVVMQVRJVkVfTElNSVRfVVNBR0V8TElNSVRfVVNBR0VfRk9SX05TIgogICAgICAgICAgICAgICAgKyAifENVTVVMQVRJVkVfTElNSVRfVVNBR0VfRU5EfENPREVfVU5JVF9GSU5JU0hFRCkiCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgIG5leHQ6ICJsb2ctc3RhcnQiCiAgICAgICAgfV0KICAgIH07CiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgICAgICAKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKb29wLmluaGVyaXRzKEFwZXhIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQXBleEhpZ2hsaWdodFJ1bGVzID0gQXBleEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2FwZXgiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9hcGV4X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi4vbW9kZS90ZXh0IikuTW9kZTsKdmFyIEFwZXhIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vYXBleF9oaWdobGlnaHRfcnVsZXMiKS5BcGV4SGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4uL21vZGUvZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKCmZ1bmN0aW9uIEFwZXhNb2RlKCkgewogICAgVGV4dE1vZGUuY2FsbCh0aGlzKTsKCiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQXBleEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKfQoKb29wLmluaGVyaXRzKEFwZXhNb2RlLCBUZXh0TW9kZSk7CgpBcGV4TW9kZS5wcm90b3R5cGUubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CgpBcGV4TW9kZS5wcm90b3R5cGUuYmxvY2tDb21tZW50ID0gewogICAgc3RhcnQ6ICIvKiIsCiAgICBlbmQ6ICIqLyIKfTsKCmV4cG9ydHMuTW9kZSA9IEFwZXhNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FwZXgiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-applescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hcHBsZXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBBcHBsZVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImFib3V0fGFib3ZlfGFmdGVyfGFnYWluc3R8YW5kfGFyb3VuZHxhc3xhdHxiYWNrfGJlZm9yZXxiZWdpbm5pbmd8IiArCiAgICAgICAgImJlaGluZHxiZWxvd3xiZW5lYXRofGJlc2lkZXxiZXR3ZWVufGJ1dHxieXxjb25zaWRlcmluZ3wiICsKICAgICAgICAiY29udGFpbnxjb250YWluc3xjb250aW51ZXxjb3B5fGRpdnxkb2VzfGVpZ2h0aHxlbHNlfGVuZHxlcXVhbHwiICsKICAgICAgICAiZXF1YWxzfGVycm9yfGV2ZXJ5fGV4aXR8ZmlmdGh8Zmlyc3R8Zm9yfGZvdXJ0aHxmcm9tfGZyb250fCIgKwogICAgICAgICJnZXR8Z2l2ZW58Z2xvYmFsfGlmfGlnbm9yaW5nfGlufGludG98aXN8aXR8aXRzfGxhc3R8bG9jYWx8bWV8IiArCiAgICAgICAgIm1pZGRsZXxtb2R8bXl8bmludGh8bm90fG9mfG9ufG9udG98b3J8b3Zlcnxwcm9wfHByb3BlcnR5fHB1dHxyZWZ8IiArCiAgICAgICAgInJlZmVyZW5jZXxyZXBlYXR8cmV0dXJuaW5nfHNjcmlwdHxzZWNvbmR8c2V0fHNldmVudGh8c2luY2V8IiArCiAgICAgICAgInNpeHRofHNvbWV8dGVsbHx0ZW50aHx0aGF0fHRoZXx0aGVufHRoaXJkfHRocm91Z2h8dGhydXwiICsKICAgICAgICAidGltZW91dHx0aW1lc3x0b3x0cmFuc2FjdGlvbnx0cnl8dW50aWx8d2hlcmV8d2hpbGV8d2hvc2V8d2l0aHx3aXRob3V0IgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgKICAgICAgICAiQXBwbGVTY3JpcHR8ZmFsc2V8bGluZWZlZWR8cmV0dXJufHBpfHF1b3RlfHJlc3VsdHxzcGFjZXx0YWJ8dHJ1ZSIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5GdW5jdGlvbnMgPSAoCiAgICAgICAgImFjdGl2YXRlfGJlZXB8Y291bnR8ZGVsYXl8bGF1bmNofGxvZ3xvZmZzZXR8cmVhZHxyb3VuZHxydW58c2F5fCIgKwogICAgICAgICJzdW1tYXJpemV8d3JpdGUiCiAgICApOwoKICAgIHZhciBidWlsdGluVHlwZXMgPSAoCiAgICAgICAgImFsaWFzfGFwcGxpY2F0aW9ufGJvb2xlYW58Y2xhc3N8Y29uc3RhbnR8ZGF0ZXxmaWxlfGludGVnZXJ8bGlzdHwiICsKICAgICAgICAibnVtYmVyfHJlYWx8cmVjb3JkfHN0cmluZ3x0ZXh0fGNoYXJhY3RlcnxjaGFyYWN0ZXJzfGNvbnRlbnRzfGRheXwiICsKICAgICAgICAiZnJvbnRtb3N0fGlkfGl0ZW18bGVuZ3RofG1vbnRofG5hbWV8cGFyYWdyYXBofHBhcmFncmFwaHN8cmVzdHwiICsKICAgICAgICAicmV2ZXJzZXxydW5uaW5nfHRpbWV8dmVyc2lvbnx3ZWVrZGF5fHdvcmR8d29yZHN8eWVhciIKICAgICk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzLAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBidWlsdGluVHlwZXMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogIi0tLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXChcXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICAgICAgcmVnZXg6ICciLio/IicKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LnR5cGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGIoUE9TSVggZmlsZXxQT1NJWCBwYXRofChkYXRlfHRpbWUpIHN0cmluZ3xxdW90ZWQgZm9ybSlcXGInCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihjbGlwYm9hcmQgaW5mb3x0aGUgY2xpcGJvYXJkfGluZm8gZm9yfGxpc3QgKGRpc2tzfGZvbGRlcil8JyArCiAgICAgICAgICAnbW91bnQgdm9sdW1lfHBhdGggdG98KGNsb3NlfG9wZW4gZm9yKSBhY2Nlc3N8KGdldHxzZXQpIGVvZnwnICsKICAgICAgICAgICdjdXJyZW50IGRhdGV8ZG8gc2hlbGwgc2NyaXB0fGdldCB2b2x1bWUgc2V0dGluZ3N8cmFuZG9tIG51bWJlcnwnICsKICAgICAgICAgICdzZXQgdm9sdW1lfHN5c3RlbSBhdHRyaWJ1dGV8c3lzdGVtIGluZm98dGltZSB0byBHTVR8JyArCiAgICAgICAgICAnKGxvYWR8cnVufHN0b3JlKSBzY3JpcHR8c2NyaXB0aW5nIGNvbXBvbmVudHN8JyArCiAgICAgICAgICAnQVNDSUkgKGNoYXJhY3RlcnxudW1iZXIpfGxvY2FsaXplZCBzdHJpbmd8JyArCiAgICAgICAgICAnY2hvb3NlIChhcHBsaWNhdGlvbnxjb2xvcnxmaWxlfGZpbGUgbmFtZXwnICsKICAgICAgICAgICdmb2xkZXJ8ZnJvbSBsaXN0fHJlbW90ZSBhcHBsaWNhdGlvbnxVUkwpfCcgKwogICAgICAgICAgJ2Rpc3BsYXkgKGFsZXJ0fGRpYWxvZykpXFxifF5cXHMqcmV0dXJuXFxiJwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiKHRleHQgaXRlbSBkZWxpbWl0ZXJzfGN1cnJlbnQgYXBwbGljYXRpb258bWlzc2luZyB2YWx1ZSlcXGInCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihhcGFydCBmcm9tfGFzaWRlIGZyb218aW5zdGVhZCBvZnxvdXQgb2Z8Z3JlYXRlciB0aGFufCcgKwogICAgICAgICAgImlzbid0fChkb2Vzbid0fGRvZXMgbm90KSAoZXF1YWx8Y29tZSBiZWZvcmV8Y29tZSBhZnRlcnxjb250YWluKXwiICsKICAgICAgICAgICcoZ3JlYXRlcnxsZXNzKSB0aGFuKCBvciBlcXVhbCk/fChzdGFydHM/fGVuZHN8YmVnaW5zPykgd2l0aHwnICsKICAgICAgICAgICdjb250YWluZWQgYnl8Y29tZXMgKGJlZm9yZXxhZnRlcil8YSAocmVmfHJlZmVyZW5jZSkpXFxiJwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl1bYS16QS1aMC05X10qXFxiIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleDogIlxcKlxcKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhBcHBsZVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5BcHBsZVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gQXBwbGVTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9hcHBsZXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2FwcGxlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQXBwbGVTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vYXBwbGVzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuQXBwbGVTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBBcHBsZVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLS0iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIoKiIsIGVuZDogIiopIn07CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9hcHBsZXNjcmlwdCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FwcGxlc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-aql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hcWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAidXNlIHN0cmljdCI7CgogIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CgogIHZhciBBcWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICAgImZvcnxzZWFyY2h8b3V0Ym91bmR8aW5ib3VuZHxhbnl8Z3JhcGh8cHJ1bmV8b3B0aW9uc3xzaG9ydGVzdF9wYXRofHRvfGlufHJldHVybnxmaWx0ZXJ8c29ydHxsaW1pdHxsZXR8Y29sbGVjdHxyZW1vdmV8dXBkYXRlfHJlcGxhY2V8aW5zZXJzfHVwc2VydHx3aXRoIgogICAgICApOwoKICAgICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoCiAgICAgICAgICAidHJ1ZXxmYWxzZSIKICAgICAgKTsKCiAgICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICAgImFwcGVuZHxjb250YWluc19hcnJheXxjb3VudHxjb3VudF9kaXN0aW5jdHxjb3VudF91bmlxdWV8Zmlyc3R8ZmxhdHRlbnxpbnRlcnNlY3Rpb258bGFzdHxsZW5ndGh8bWludXN8bnRofG91dGVyc2VjdGlvbnxwb3B8cG9zaXRpb258cHVzaHxyZW1vdmVfbnRofHJlbW92ZV92YWx1ZXxyZW1vdmVfdmFsdWVzfHJldmVyc2V8c2hpZnR8c2xpY2V8c29ydGVkfHNvcnRlZF91bmlxdWV8dW5pb258dW5pb25fZGlzdGluY3R8dW5pcXVlfHVuc2hpZnR8IiArCiAgICAgICAgICAiZGF0ZV9ub3d8ZGF0ZV9pc284NjAxfGRhdGVfdGltZXN0YW1wfGlzX2RhdGVzdHJpbmd8ZGF0ZV9kYXlvZndlZWt8ZGF0ZV95ZWFyfGRhdGVfbW9udGh8ZGF0ZV9kYXl8ZGF0ZV9ob3VyfGRhdGVfbWludXRlfGRhdGVfc2Vjb25kfGRhdGVfbWlsbGlzZWNvbmR8ZGF0ZV9kYXlvZnllYXJ8ZGF0ZV9pc293ZWVrfGRhdGVfbGVhcHllYXJ8ZGF0ZV9xdWFydGVyfGRhdGVfZGF5c19pbl9tb250aHxkYXRlX3RydW5jfGRhdGVfZm9ybWF0fGRhdGVfYWRkfGRhdGVfc3VidHJhY3R8ZGF0ZV9kaWZmfGRhdGVfY29tcGFyZXwiICsKICAgICAgICAgICJhdHRyaWJ1dGVzfGNvdW50fGhhc3xpc19zYW1lX2NvbGxlY3Rpb258a2VlcHxsZW5ndGh8bWF0Y2hlc3xtZXJnZXxtZXJnZV9yZWN1cnNpdmV8cGFyc2VfaWRlbnRpZmllcnx0cmFuc2xhdGV8dW5zZXR8dW5zZXRfcmVjdXJzaXZlfHZhbHVlc3x6aXB8IiArCiAgICAgICAgICAiZnVsbHRleHR8IiArCiAgICAgICAgICAiZGlzdGFuY2V8Z2VvX2NvbnRhaW5zfGdlb19kaXN0YW5jZXxnZW9fZXF1YWxzfGdlb19pbnRlcnNlY3RzfGlzX2luX3BvbHlnb258IiArCiAgICAgICAgICAibm90X251bGx8Zmlyc3RfbGlzdHxmaXJzdF9kb2N1bWVudHxjaGVja19kb2N1bWVudHxjb2xsZWN0aW9uX2NvdW50fGNvbGxlY3Rpb25zfGNvdW50fGN1cnJlbnRfdXNlcnxkb2N1bWVudHxsZW5ndGh8aGFzaHxhcHBseXxhc3NlcnR8LyB3YXJufGNhbGx8ZmFpbHxub29wdHxwYXNzdGhydXxzbGVlcHx2OHx2ZXJzaW9ufCIgKwogICAgICAgICAgImFic3xhY29zfGFzaW58YXRhbnxhdGFuMnxhdmVyYWdlfGF2Z3xjZWlsfGNvc3xkZWdyZWVzfGV4cHxleHAyfGZsb29yfGxvZ3xsb2cyfGxvZzEwfG1heHxtZWRpYW58bWlufHBlcmNlbnRpbGV8cGl8cG93fHJhZGlhbnN8cmFuZHxyYW5nZXxyb3VuZHxzaW58c3FydHxzdGRkZXZfcG9wdWxhdGlvbnxzdGRkZXZfc2FtcGxlfHN0ZGRldnxzdW18dGFufHZhcmlhbmNlX3BvcHVsYXRpb258dmFyaWFuY2Vfc2FtcGxlfHZhcmlhbmNlfCIgKwogICAgICAgICAgImNoYXJfbGVuZ3RofGNvbmNhdHxjb25jYXRfc2VwYXJhdG9yfGNvbnRhaW5zfGNvdW50fGVuY29kZV91cmlfY29tcG9uZW50fGZpbmRfZmlyc3R8ZmluZF9sYXN0fGpzb25fcGFyc2V8anNvbl9zdHJpbmdpZnl8bGVmdHxsZW5ndGh8bGV2ZW5zaHRlaW5fZGlzdGFuY2V8bGlrZXxsb3dlcnxsdHJpbXxtZDV8cmFuZG9tX3Rva2VufHJlZ2V4X21hdGNoZXN8cmVnZXhfc3BsaXR8cmVnZXhfdGVzdHxyZWdleF9yZXBsYWNlfHJldmVyc2V8cmlnaHR8cnRyaW18c2hhMXxzaGE1MTJ8c3BsaXR8c291bmRleHxzdWJzdGl0dXRlfHN1YnN0cmluZ3x0b2tlbnN8dG9fYmFzZTY0fHRvX2hleHx0cmltfHVwcGVyfHV1aWR8IiArCiAgICAgICAgICAidG9fYm9vbHx0b19udW1iZXJ8dG9fc3RyaW5nfHRvX2FycmF5fHRvX2xpc3R8aXNfbnVsbHxpc19ib29sfGlzX251bWJlcnxpc19zdHJpbmd8aXNfYXJyYXl8aXNfbGlzdHxpc19vYmplY3R8aXNfZG9jdW1lbnR8aXNfZGF0ZXN0cmluZ3xpc19rZXl8dHlwZW5hbWV8IgogICAgICApOwoKICAgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWx0aW5Db25zdGFudHMKICAgICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCiAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgIHJlZ2V4IDogIi8vLiokIgogICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICAgIHJlZ2V4IDogJyIuKj8iJwogICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICAgIHJlZ2V4IDogIicuKj8nIgogICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgcmVnZXggOiAiXFwrfFxcLXxcXC98XFwvXFwvfCV8PEA+fEA+fDxAfCZ8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0iCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICByZWdleCA6ICJbXFwoXSIKICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgIHJlZ2V4IDogIltcXCldIgogICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICB9IF0KICAgICAgfTsKICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwogIH07CgogIG9vcC5pbmhlcml0cyhBcWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCiAgZXhwb3J0cy5BcWxIaWdobGlnaHRSdWxlcyA9IEFxbEhpZ2hsaWdodFJ1bGVzOwogIH0pOwoKZGVmaW5lKCJhY2UvbW9kZS9hcWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9hcWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICJ1c2Ugc3RyaWN0IjsKCiAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICB2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwogIHZhciBBcWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vYXFsX2hpZ2hsaWdodF9ydWxlcyIpLkFxbEhpZ2hsaWdodFJ1bGVzOwoKICB2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQXFsSGlnaGxpZ2h0UnVsZXM7CiAgICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7CiAgfTsKICBvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKICAoZnVuY3Rpb24oKSB7CgogICAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwoKICAgICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvYXFsIjsKICB9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCiAgZXhwb3J0cy5Nb2RlID0gTW9kZTsKCiAgfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FxbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-asciidoc.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hc2NpaWRvY19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBBc2NpaWRvY0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcdTAwYTEtXHVmZmZmXStcXGIiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAge3Rva2VuOiAiZW1wdHkiLCAgIHJlZ2V4OiAvJC99LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eXC57NCx9XHMqJC8sICBuZXh0OiAibGlzdGluZ0Jsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbjogImxpdGVyYWwiLCByZWdleDogL14tezQsfVxzKiQvLCAgIG5leHQ6ICJsaXRlcmFsQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAic3RyaW5nIiwgIHJlZ2V4OiAvXlwrezQsfVxzKiQvLCAgbmV4dDogInBhc3N0aHJvdWdoQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZCIsIHJlZ2V4OiAvXj17NCx9XHMqJC99LAogICAgICAgICAgICB7dG9rZW46ICJ0ZXh0IiwgICAgcmVnZXg6IC9eXHMqJC99LAogICAgICAgICAgICB7dG9rZW46ICJlbXB0eSIsIHJlZ2V4OiAiIiwgbmV4dDogImRpc3NhbGxvd0RlbGltaXRlZEJsb2NrIn0KICAgICAgICBdLAoKICAgICAgICAiZGlzc2FsbG93RGVsaW1pdGVkQmxvY2siOiBbCiAgICAgICAgICAgIHtpbmNsdWRlOiAicGFyYWdyYXBoRW5kIn0sCiAgICAgICAgICAgIHt0b2tlbjogImNvbW1lbnQiLCByZWdleDogJ14vLy4rJCd9LAogICAgICAgICAgICB7dG9rZW46ICJrZXl3b3JkIiwgcmVnZXg6ICJeKD86Tk9URXxUSVB8SU1QT1JUQU5UfFdBUk5JTkd8Q0FVVElPTik6In0sCgogICAgICAgICAgICB7aW5jbHVkZTogImxpc3RTdGFydCJ9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eXHMrLiskLywgbmV4dDogImluZGVudGVkQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAiZW1wdHkiLCAgIHJlZ2V4OiAiIiwgbmV4dDogInRleHQifQogICAgICAgIF0sCgogICAgICAgICJwYXJhZ3JhcGhFbmQiOiBbCiAgICAgICAgICAgIHt0b2tlbjogImRvYy5jb21tZW50IiwgcmVnZXg6IC9eXC97NCx9XHMqJC8sICAgIG5leHQ6ICJjb21tZW50QmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAidGFibGVCbG9jayIsICByZWdleDogL15ccypbfCFdPStccyokLywgbmV4dDogInRhYmxlQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZCIsICAgICByZWdleDogL14oPzotLXwnJycpXHMqJC8sIG5leHQ6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW46ICJvcHRpb24iLCAgICAgIHJlZ2V4OiAvXlxbLipcXVxzKiQvLCAgICAgbmV4dDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbjogInBhZ2VCcmVhayIsICAgcmVnZXg6IC9ePnszLH0kLywgICAgICAgICBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsICAgICByZWdleDogL15cLns0LH1ccyokLywgICAgIG5leHQ6ICJsaXN0aW5nQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAidGl0bGVVbmRlcmxpbmUiLCAgICByZWdleDogL14oPzo9ezIsfXwtezIsfXx+ezIsfXxcXnsyLH18XCt7Mix9KVxzKiQvLCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuOiAic2luZ2xlTGluZVRpdGxlIiwgICByZWdleDogL149ezEsNX1ccytcUy4qJC8sIG5leHQ6ICJzdGFydCJ9LAoKICAgICAgICAgICAge3Rva2VuOiAib3RoZXJCbG9jayIsICAgIHJlZ2V4OiAvXig/OlwqezIsfXxfezIsfSlccyokLywgbmV4dDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbjogIm9wdGlvbmFsVGl0bGUiLCByZWdleDogL15cLlteLlxzXS4rJC8sICBuZXh0OiAic3RhcnQifQogICAgICAgIF0sCgogICAgICAgICJsaXN0U3RhcnQiOiBbCiAgICAgICAgICAgIHt0b2tlbjogImtleXdvcmQiLCAgcmVnZXg6IC9eXHMqKD86XGQrXC58W2EtekEtWl1cLnxbaXh2bUlYVk1dK1wpfFwqezEsNX18LXxcLnsxLDV9KVxzLywgbmV4dDogImxpc3RUZXh0In0sCiAgICAgICAgICAgIHt0b2tlbjogIm1ldGEudGFnIiwgcmVnZXg6IC9eLisoPzo6ezIsNH18OzspKD86IHwkKS8sIG5leHQ6ICJsaXN0VGV4dCJ9LAogICAgICAgICAgICB7dG9rZW46ICJzdXBwb3J0LmZ1bmN0aW9uLmxpc3QuY2FsbG91dCIsIHJlZ2V4OiAvXig/OjxcZCs+fFxkKz58PikgLywgbmV4dDogInRleHQifSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZCIsICByZWdleDogL15cK1xzKiQvLCBuZXh0OiAic3RhcnQifQogICAgICAgIF0sCgogICAgICAgICJ0ZXh0IjogWwogICAgICAgICAgICB7dG9rZW46IFsibGluayIsICJ2YXJpYWJsZS5sYW5ndWFnZSJdLCByZWdleDogLygoPzpodHRwcz86XC9cL3xmdHA6XC9cL3xmaWxlOlwvXC98bWFpbHRvOnxjYWxsdG86KVteXHNcW10rKShcWy4qP1xdKS99LAogICAgICAgICAgICB7dG9rZW46ICJsaW5rIiwgcmVnZXg6IC8oPzpodHRwcz86XC9cL3xmdHA6XC9cL3xmaWxlOlwvXC98bWFpbHRvOnxjYWxsdG86KVteXHNcW10rL30sCiAgICAgICAgICAgIHt0b2tlbjogImxpbmsiLCByZWdleDogL1xiW1x3XC5cL1wtXStAW1x3XC5cL1wtXStcYi99LAogICAgICAgICAgICB7aW5jbHVkZTogIm1hY3JvcyJ9LAogICAgICAgICAgICB7aW5jbHVkZTogInBhcmFncmFwaEVuZCJ9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6L1wrezMsfS8sIG5leHQ6InNtYWxsUGFzc3Rocm91Z2gifSwKICAgICAgICAgICAge3Rva2VuOiAiZXNjYXBlIiwgcmVnZXg6IC9cKCg/OkN8VE18UilcKXxcLnszfXwtPnw8LXw9Pnw8PXwmIyg/OlxkK3x4W2EtZkEtRlxkXSspO3woPzogfF4pLS0oPz1ccytcUykvfSwKICAgICAgICAgICAge3Rva2VuOiAiZXNjYXBlIiwgcmVnZXg6IC9cXFtfKidgKyNdfFxcezJ9W18qJ2ArI117Mn0vfSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZCIsIHJlZ2V4OiAvXHNcKyQvfSwKICAgICAgICAgICAge3Rva2VuOiAidGV4dCIsIHJlZ2V4OiBpZGVudGlmaWVyUmV9LAogICAgICAgICAgICB7dG9rZW46IFsia2V5d29yZCIsICJzdHJpbmciLCAia2V5d29yZCJdLAogICAgICAgICAgICAgICAgcmVnZXg6IC8oPDxbXHdcZFwtJF0rLCkoLio/KSg+PnwkKS99LAogICAgICAgICAgICB7dG9rZW46ICJrZXl3b3JkIiwgcmVnZXg6IC88PFtcd1xkXC0kXSssP3w+Pi99LAogICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIiLCByZWdleDogL1woezIsM30uKj9cKXsyLDN9L30sCiAgICAgICAgICAgIHt0b2tlbjogImtleXdvcmQiLCByZWdleDogL1xbXFsuKz9cXVxdL30sCiAgICAgICAgICAgIHt0b2tlbjogInN1cHBvcnQiLCByZWdleDogL15cW3szfVtcd1xkID1cLV0rXF17M30vfSwKCiAgICAgICAgICAgIHtpbmNsdWRlOiAicXVvdGVzIn0sCiAgICAgICAgICAgIHt0b2tlbjogImVtcHR5IiwgcmVnZXg6IC9eXHMqJC8sIG5leHQ6ICJzdGFydCJ9CiAgICAgICAgXSwKCiAgICAgICAgImxpc3RUZXh0IjogWwogICAgICAgICAgICB7aW5jbHVkZTogImxpc3RTdGFydCJ9LAogICAgICAgICAgICB7aW5jbHVkZTogInRleHQifQogICAgICAgIF0sCgogICAgICAgICJpbmRlbnRlZEJsb2NrIjogWwogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eW1xzXHddLiskLywgbmV4dDogImluZGVudGVkQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiAiIiwgbmV4dDogInN0YXJ0In0KICAgICAgICBdLAoKICAgICAgICAibGlzdGluZ0Jsb2NrIjogWwogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eXC57NCx9XHMqJC8sIG5leHQ6ICJkaXNzYWxsb3dEZWxpbWl0ZWRCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgcmVnZXg6ICc8XFxkKz4nfSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiAnW148XSsnfSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiAnPCd9CiAgICAgICAgXSwKICAgICAgICAibGl0ZXJhbEJsb2NrIjogWwogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eLXs0LH1ccyokLywgbmV4dDogImRpc3NhbGxvd0RlbGltaXRlZEJsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCByZWdleDogJzxcXGQrPid9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6ICdbXjxdKyd9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6ICc8J30KICAgICAgICBdLAogICAgICAgICJwYXNzdGhyb3VnaEJsb2NrIjogWwogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eXCt7NCx9XHMqJC8sIG5leHQ6ICJkaXNzYWxsb3dEZWxpbWl0ZWRCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IGlkZW50aWZpZXJSZSArICJ8XFxkKyJ9LAogICAgICAgICAgICB7aW5jbHVkZTogIm1hY3JvcyJ9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6ICIuIn0KICAgICAgICBdLAoKICAgICAgICAic21hbGxQYXNzdGhyb3VnaCI6IFsKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiAvWytdezMsfS8sIG5leHQ6ICJkaXNzYWxsb3dEZWxpbWl0ZWRCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IC9eXHMqJC8sIG5leHQ6ICJkaXNzYWxsb3dEZWxpbWl0ZWRCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW46ICJsaXRlcmFsIiwgcmVnZXg6IGlkZW50aWZpZXJSZSArICJ8XFxkKyJ9LAogICAgICAgICAgICB7aW5jbHVkZTogIm1hY3JvcyJ9CiAgICAgICAgXSwKCiAgICAgICAgImNvbW1lbnRCbG9jayI6IFsKICAgICAgICAgICAge3Rva2VuOiAiZG9jLmNvbW1lbnQiLCByZWdleDogL15cL3s0LH1ccyokLywgbmV4dDogImRpc3NhbGxvd0RlbGltaXRlZEJsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbjogImRvYy5jb21tZW50IiwgcmVnZXg6ICdeLiokJ30KICAgICAgICBdLAogICAgICAgICJ0YWJsZUJsb2NrIjogWwogICAgICAgICAgICB7dG9rZW46ICJ0YWJsZUJsb2NrIiwgcmVnZXg6IC9eXHMqXHw9ezMsfVxzKiQvLCBuZXh0OiAiZGlzc2FsbG93RGVsaW1pdGVkQmxvY2sifSwKICAgICAgICAgICAge3Rva2VuOiAidGFibGVCbG9jayIsIHJlZ2V4OiAvXlxzKiE9ezMsfVxzKiQvLCBuZXh0OiAiaW5uZXJUYWJsZUJsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbjogInRhYmxlQmxvY2siLCByZWdleDogL1x8L30sCiAgICAgICAgICAgIHtpbmNsdWRlOiAidGV4dCIsIG5vRXNjYXBlOiB0cnVlfQogICAgICAgIF0sCiAgICAgICAgImlubmVyVGFibGVCbG9jayI6IFsKICAgICAgICAgICAge3Rva2VuOiAidGFibGVCbG9jayIsIHJlZ2V4OiAvXlxzKiE9ezMsfVxzKiQvLCBuZXh0OiAidGFibGVCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW46ICJ0YWJsZUJsb2NrIiwgcmVnZXg6IC9eXHMqfD17Myx9XHMqJC8sIG5leHQ6ICJkaXNzYWxsb3dEZWxpbWl0ZWRCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW46ICJ0YWJsZUJsb2NrIiwgcmVnZXg6IC8hL30KICAgICAgICBdLAogICAgICAgICJtYWNyb3MiOiBbCiAgICAgICAgICAgIHt0b2tlbjogIm1hY3JvIiwgcmVnZXg6IC97W1x3XC0kXSt9L30sCiAgICAgICAgICAgIHt0b2tlbjogWyJ0ZXh0IiwgInN0cmluZyIsICJ0ZXh0IiwgImNvbnN0YW50LmNoYXJhY3RlciIsICJ0ZXh0Il0sIHJlZ2V4OiAvKHspKFtcd1wtJF0rKSg6KT8oLispPyh9KS99LAogICAgICAgICAgICB7dG9rZW46IFsidGV4dCIsICJtYXJrdXAubGlzdC5tYWNybyIsICJrZXl3b3JkIiwgInN0cmluZyJdLCByZWdleDogLyhcdyspKGZvb3Rub3RlKD86cmVmKT86Oj8pKFteXHNcW10rKT8oXFsuKj9cXSk/L30sCiAgICAgICAgICAgIHt0b2tlbjogWyJtYXJrdXAubGlzdC5tYWNybyIsICJrZXl3b3JkIiwgInN0cmluZyJdLCByZWdleDogLyhbYS16QS1aXC1dW1x3XC5cL1wtXSo6Oj8pKFteXHNcW10rKShcWy4qP1xdKT8vfSwKICAgICAgICAgICAge3Rva2VuOiBbIm1hcmt1cC5saXN0Lm1hY3JvIiwgImtleXdvcmQiXSwgcmVnZXg6IC8oW2EtekEtWlwtXVtcd1wuXC9cLV0rOjo/KShcWy4qP1xdKS99LAogICAgICAgICAgICB7dG9rZW46ICJrZXl3b3JkIiwgICAgIHJlZ2V4OiAvXjouKz86KD89IHwkKS99CiAgICAgICAgXSwKCiAgICAgICAgInF1b3RlcyI6IFsKICAgICAgICAgICAge3Rva2VuOiAic3RyaW5nLml0YWxpYyIsIHJlZ2V4OiAvX19bXl9cc10uKj9fXy99LAogICAgICAgICAgICB7dG9rZW46ICJzdHJpbmcuaXRhbGljIiwgcmVnZXg6IHF1b3RlUnVsZSgiXyIpfSwKICAgICAgICAgICAgCiAgICAgICAgICAgIHt0b2tlbjogImtleXdvcmQuYm9sZCIsIHJlZ2V4OiAvXCpcKlteKlxzXS4qP1wqXCovfSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZC5ib2xkIiwgcmVnZXg6IHF1b3RlUnVsZSgiXFwqIil9LAogICAgICAgICAgICAKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiBxdW90ZVJ1bGUoIlxcKyIpfSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiAvXCtcK1teK1xzXS4qP1wrXCsvfSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiAvXCRcJC4rP1wkXCQvfSwKICAgICAgICAgICAge3Rva2VuOiAibGl0ZXJhbCIsIHJlZ2V4OiBxdW90ZVJ1bGUoImAiKX0sCgogICAgICAgICAgICB7dG9rZW46ICJrZXl3b3JkIiwgcmVnZXg6IHF1b3RlUnVsZSgiXiIpfSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZCIsIHJlZ2V4OiBxdW90ZVJ1bGUoIn4iKX0sCiAgICAgICAgICAgIHt0b2tlbjogImtleXdvcmQiLCByZWdleDogLyMjPy99LAogICAgICAgICAgICB7dG9rZW46ICJrZXl3b3JkIiwgcmVnZXg6IC8oPzpcQnxeKWBgfFxiJycvfQogICAgICAgIF0KCiAgICB9OwoKICAgIGZ1bmN0aW9uIHF1b3RlUnVsZShjaCkgewogICAgICAgIHZhciBwcmVmaXggPSAvXHcvLnRlc3QoY2gpID8gIlxcYiIgOiAiKD86XFxCfF4pIjsKICAgICAgICByZXR1cm4gcHJlZml4ICsgY2ggKyAiW14iICsgY2ggKyAiXS4qPyIgKyBjaCArICIoPyFbXFx3Kl0pIjsKICAgIH0KCiAgICB2YXIgdG9rZW5NYXAgPSB7CiAgICAgICAgbWFjcm86ICJjb25zdGFudC5jaGFyYWN0ZXIiLAogICAgICAgIHRhYmxlQmxvY2s6ICJkb2MuY29tbWVudCIsCiAgICAgICAgdGl0bGVVbmRlcmxpbmU6ICJtYXJrdXAuaGVhZGluZyIsCiAgICAgICAgc2luZ2xlTGluZVRpdGxlOiAibWFya3VwLmhlYWRpbmciLAogICAgICAgIHBhZ2VCcmVhazogInN0cmluZyIsCiAgICAgICAgb3B0aW9uOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgb3RoZXJCbG9jazogIm1hcmt1cC5saXN0IiwKICAgICAgICBsaXRlcmFsOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgb3B0aW9uYWxUaXRsZTogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgIGVzY2FwZTogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgbGluazogIm1hcmt1cC51bmRlcmxpbmUubGlzdCIKICAgIH07CgogICAgZm9yICh2YXIgc3RhdGUgaW4gdGhpcy4kcnVsZXMpIHsKICAgICAgICB2YXIgc3RhdGVSdWxlcyA9IHRoaXMuJHJ1bGVzW3N0YXRlXTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhdGVSdWxlcy5sZW5ndGg7IGktLTsgKSB7CiAgICAgICAgICAgIHZhciBydWxlID0gc3RhdGVSdWxlc1tpXTsKICAgICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZSB8fCB0eXBlb2YgcnVsZSA9PSAic3RyaW5nIikgewogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbaSwgMV0uY29uY2F0KHRoaXMuJHJ1bGVzW3J1bGUuaW5jbHVkZSB8fCBydWxlXSk7CiAgICAgICAgICAgICAgICBpZiAocnVsZS5ub0VzY2FwZSkgewogICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzLmZpbHRlcihmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAheC5uZXh0OwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGVSdWxlcy5zcGxpY2UuYXBwbHkoc3RhdGVSdWxlcywgYXJncyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS50b2tlbiBpbiB0b2tlbk1hcCkgewogICAgICAgICAgICAgICAgcnVsZS50b2tlbiA9IHRva2VuTWFwW3J1bGUudG9rZW5dOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Owpvb3AuaW5oZXJpdHMoQXNjaWlkb2NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQXNjaWlkb2NIaWdobGlnaHRSdWxlcyA9IEFzY2lpZG9jSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2FzY2lpZG9jIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvXig/Olx8PXsxMCx9fFtcLlwvPVwtfl4rXXs0LH1ccyokfD17MSw1fSApLzsKICAgIHRoaXMuc2luZ2xlTGluZUhlYWRpbmdSZSA9IC9ePXsxLDV9KD89XHMrXFMpLzsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgaWYgKCF0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmIChsaW5lWzBdID09ICI9IikgewogICAgICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lSGVhZGluZ1JlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKS5sZW5ndGggIT0gc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICB9CiAgICAgICAgaWYgKHNlc3Npb24uYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KSA9PSAiZGlzc2FsbG93RGVsaW1pdGVkQmxvY2siKQogICAgICAgICAgICByZXR1cm4gImVuZCI7CiAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmICghbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcikpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHRva2VuOwogICAgICAgIGZ1bmN0aW9uIGdldFRva2VuVHlwZShyb3cpIHsKICAgICAgICAgICAgdG9rZW4gPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpWzBdOwogICAgICAgICAgICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHlwZTsKICAgICAgICB9CgogICAgICAgIHZhciBsZXZlbHMgPSBbIj0iLCItIiwifiIsIl4iLCIrIl07CiAgICAgICAgdmFyIGhlYWRpbmcgPSAibWFya3VwLmhlYWRpbmciOwogICAgICAgIHZhciBzaW5nbGVMaW5lSGVhZGluZ1JlID0gdGhpcy5zaW5nbGVMaW5lSGVhZGluZ1JlOwogICAgICAgIGZ1bmN0aW9uIGdldExldmVsKCkgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSB0b2tlbi52YWx1ZS5tYXRjaChzaW5nbGVMaW5lSGVhZGluZ1JlKTsKICAgICAgICAgICAgaWYgKG1hdGNoKQogICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGV2ZWxzLmluZGV4T2YodG9rZW4udmFsdWVbMF0pICsgMTsKICAgICAgICAgICAgaWYgKGxldmVsID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMSkubGVuZ3RoICE9IHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5maW5pdHk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGxldmVsOwogICAgICAgIH0KCiAgICAgICAgaWYgKGdldFRva2VuVHlwZShyb3cpID09IGhlYWRpbmcpIHsKICAgICAgICAgICAgdmFyIHN0YXJ0SGVhZGluZ0xldmVsID0gZ2V0TGV2ZWwoKTsKICAgICAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgICAgICBpZiAoZ2V0VG9rZW5UeXBlKHJvdykgIT0gaGVhZGluZykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IGdldExldmVsKCk7CiAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPD0gc3RhcnRIZWFkaW5nTGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBpc1NpbmdsZUxpbmVIZWFkaW5nID0gdG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2godGhpcy5zaW5nbGVMaW5lSGVhZGluZ1JlKTsKICAgICAgICAgICAgZW5kUm93ID0gaXNTaW5nbGVMaW5lSGVhZGluZyA/IHJvdyAtIDEgOiByb3cgLSAyOwoKICAgICAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoZW5kUm93ID4gc3RhcnRSb3cgJiYgKCFnZXRUb2tlblR5cGUoZW5kUm93KSB8fCB0b2tlbi52YWx1ZVswXSA9PSAiWyIpKQogICAgICAgICAgICAgICAgICAgIGVuZFJvdy0tOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHN0YXRlID0gc2Vzc2lvbi5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpOwogICAgICAgICAgICBpZiAoc3RhdGUgPT0gImRpc3NhbGxvd0RlbGltaXRlZEJsb2NrIikgewogICAgICAgICAgICAgICAgd2hpbGUgKHJvdyAtLSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpLmxhc3RJbmRleE9mKCJCbG9jayIpID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVuZFJvdyA9IHJvdyArIDE7CiAgICAgICAgICAgICAgICBpZiAoZW5kUm93IDwgc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2UoZW5kUm93LCA1LCBzdGFydFJvdywgc3RhcnRDb2x1bW4gLSA1KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLmJnVG9rZW5pemVyLmdldFN0YXRlKHJvdykgPT0gImRpc3NhbGxvd0RlbGltaXRlZEJsb2NrIikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIDUsIGVuZFJvdywgZW5kQ29sdW1uIC0gNSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2FzY2lpZG9jIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvYXNjaWlkb2NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9hc2NpaWRvYyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEFzY2lpZG9jSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2FzY2lpZG9jX2hpZ2hsaWdodF9ydWxlcyIpLkFzY2lpZG9jSGlnaGxpZ2h0UnVsZXM7CnZhciBBc2NpaWRvY0ZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2FzY2lpZG9jIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEFzY2lpZG9jSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEFzY2lpZG9jRm9sZE1vZGUoKTsgICAgCn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnR5cGUgPSAidGV4dCI7CiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIGlmIChzdGF0ZSA9PSAibGlzdGJsb2NrIikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXigoPzouKyk/KShbLSsqXVsgXSspLy5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkobWF0Y2hbMV0ubGVuZ3RoICsgMSkuam9pbigiICIpICsgbWF0Y2hbMl07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9hc2NpaWRvYyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FzY2lpZG9jIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-asl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9hc2xfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICAgdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwogICAgdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CgogICAgdmFyIEFTTEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICAgICAiRGVmYXVsdHxEZWZpbml0aW9uQmxvY2t8RGV2aWNlfE1ldGhvZHxFbHNlfEVsc2VJZnxGb3J8RnVuY3Rpb258SWZ8SW5jbHVkZXxNZXRob2R8UmV0dXJufCIgKwogICAgICAgICAgICAiU2NvcGV8U3dpdGNofENhc2V8V2hpbGV8QnJlYWt8QnJlYWtQb2ludHxDb250aW51ZXxOb09wfFdhaXQiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGtleXdvcmRPcGVyYXRvcnMgPSAoCiAgICAgICAgICAgICJBZGR8QW5kfERlY3JlbWVudHxEaXZpZGV8SW5jcmVtZW50fEluZGV4fExBbmR8TEVxdWFsfExHcmVhdGVyfExHcmVhdGVyRXF1YWx8IiArCiAgICAgICAgICAgICJMTGVzc3xMTGVzc0VxdWFsfExOb3R8TE5vdEVxdWFsfExPcnxNb2R8TXVsdGlwbHl8TkFuZHxOT3J8Tm90fE9yfFJlZk9mfFJldmlzaW9ufCIgKwogICAgICAgICAgICAiU2hpZnRMZWZ0fFNoaWZ0UmlnaHR8U3VidHJhY3R8WE9yfERlcmVmT2YiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGJ1aWxkaW5GdW5jdGlvbnMgPSAoCiAgICAgICAgICAgICJBY2Nlc3NBc3xBY3F1aXJlfEFsaWFzfEJhbmtGaWVsZHxCdWZmZXJ8Q29uY2F0ZW5hdGV8Q29uY2F0ZW5hdGVSZXNUZW1wbGF0ZXwiICsKICAgICAgICAgICAgIkNvbmRSZWZPZnxDb25uZWN0aW9ufENvcHlPYmplY3R8Q3JlYXRlQml0RmllbGR8Q3JlYXRlQnl0ZUZpZWxkfENyZWF0ZURXb3JkRmllbGR8IiArCiAgICAgICAgICAgICJDcmVhdGVGaWVsZHxDcmVhdGVRV29yZEZpZWxkfENyZWF0ZVdvcmRGaWVsZHxEYXRhVGFibGVSZWdpb258RGVidWd8IiArCiAgICAgICAgICAgICJETUF8RFdvcmRJT3xEV29yZE1lbW9yeXxEV29yZFNwYWNlfEVpc2FJZHxFSVNBSUR8RW5kRGVwZW5kZW50Rm58RXZlbnR8RXh0ZW5kZWRJT3wiICsKICAgICAgICAgICAgIkV4dGVuZGVkTWVtb3J5fEV4dGVuZGVkU3BhY2V8RXh0ZXJuYWx8RmF0YWx8RmllbGR8RmluZFNldExlZnRCaXR8RmluZFNldFJpZ2h0Qml0fCIgKwogICAgICAgICAgICAiRml4ZWRETUF8Rml4ZWRJT3xGcHJpbnRmfEZyb21CQ0R8R3Bpb0ludHxHcGlvSW98STJDU2VyaWFsQnVzVjJ8SW5kZXhGaWVsZHwiICsKICAgICAgICAgICAgIkludGVycnVwdHxJT3xJUlF8SVJRTm9GbGFnc3xMb2FkfExvYWRUYWJsZXxNYXRjaHxNZW1vcnkzMnxNZW1vcnkzMkZpeGVkfCIgKwogICAgICAgICAgICAiTWlkfE11dGV4fE5hbWV8Tm90aWZ5fE9mZnNldHxPYmplY3RUeXBlfE9wZXJhdGlvblJlZ2lvbnxQYWNrYWdlfFBvd2VyUmVzb3VyY2V8UHJpbnRmfCIgKwogICAgICAgICAgICAiUVdvcmRJT3xRV29yZE1lbW9yeXxRV29yZFNwYWNlfFJhd0RhdGFCdWZmZXJ8UmVnaXN0ZXJ8UmVsZWFzZXxSZXNldHxSZXNvdXJjZVRlbXBsYXRlfCIgKwogICAgICAgICAgICAiU2lnbmFsfFNpemVPZnxTbGVlcHxTUElTZXJpYWxCdXNWMnxTdGFsbHxTdGFydERlcGVuZGVudEZufFN0YXJ0RGVwZW5kZW50Rm5Ob1ByaXwiICsKICAgICAgICAgICAgIlN0b3JlfFRoZXJtYWxab25lfFRpbWVyfFRvQkNEfFRvQnVmZmVyfFRvRGVjaW1hbFN0cmluZ3xUb0ludGVnZXJ8VG9QTER8VG9TdHJpbmd8IiArCiAgICAgICAgICAgICJUb1VVSUR8VUFSVFNlcmlhbEJ1c1YyfFVuaWNvZGV8VW5sb2FkfFZlbmRvckxvbmd8VmVuZG9yU2hvcnR8V29yZEJ1c051bWJlcnxXb3JkSU98IiArCiAgICAgICAgICAgICJXb3JkU3BhY2UiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGZsYWdzID0gKAogICAgICAgICAgICAiQXR0cmliUXVpY2t8QXR0cmliU2VuZFJlY2VpdmV8QXR0cmliQnl0ZXxBdHRyaWJCeXRlc3xBdHRyaWJSYXdCeXRlc3wiICsKICAgICAgICAgICAgIkF0dHJpYlJhd1Byb2Nlc3NCeXRlc3xBdHRyaWJXb3JkfEF0dHJpYkJsb2NrfEF0dHJpYlByb2Nlc3NDYWxsfEF0dHJpYkJsb2NrUHJvY2Vzc0NhbGx8IiArCiAgICAgICAgICAgICJBbnlBY2N8Qnl0ZUFjY3xXb3JkQWNjfERXb3JkQWNjfFFXb3JkQWNjfEJ1ZmZlckFjY3wiICsKICAgICAgICAgICAgIkFkZHJlc3NSYW5nZU1lbW9yeXxBZGRyZXNzUmFuZ2VSZXNlcnZlZHxBZGRyZXNzUmFuZ2VOVlN8QWRkcmVzc1JhbmdlQUNQSXwiICsKICAgICAgICAgICAgIlJlZ2lvblNwYWNlS2V5d29yZHxGRml4ZWRIV3xQQ0N8IiArCiAgICAgICAgICAgICJBZGRyZXNzaW5nTW9kZTdCaXR8QWRkcmVzc2luZ01vZGUxMEJpdHwiICsKICAgICAgICAgICAgIkRhdGFCaXRzRml2ZXxEYXRhQml0c1NpeHxEYXRhQml0c1NldmVufERhdGFCaXRzRWlnaHR8RGF0YUJpdHNOaW5lfCIgKwogICAgICAgICAgICAiQnVzTWFzdGVyfE5vdEJ1c01hc3RlcnwiICsKICAgICAgICAgICAgIkNsb2NrUGhhc2VGaXJzdHxDbG9ja1BoYXNlU2Vjb25kfENsb2NrUG9sYXJpdHlMb3d8Q2xvY2tQb2xhcml0eUhpZ2h8IiArCiAgICAgICAgICAgICJTdWJEZWNvZGV8UG9zRGVjb2RlfCIgKwogICAgICAgICAgICAiQmlnRW5kaWFuaW5nfExpdHRsZUVuZGlhbnwiICsKICAgICAgICAgICAgIkZsb3dDb250cm9sTm9uZXxGbG93Q29udHJvbFhvbnxGbG93Q29udHJvbEhhcmR3YXJlfCIgKwogICAgICAgICAgICAiRWRnZXxMZXZlbHxBY3RpdmVIaWdofEFjdGl2ZUxvd3xBY3RpdmVCb3RofERlY29kZTE2fERlY29kZTEwfCIgKwogICAgICAgICAgICAiSW9SZXN0cmljdGlvbk5vbmV8SW9SZXN0cmljdGlvbklucHV0T25seXxJb1Jlc3RyaWN0aW9uT3V0cHV0T25seXwiICsKICAgICAgICAgICAgIklvUmVzdHJpY3Rpb25Ob25lQW5kUHJlc2VydmV8TG9ja3xOb0xvY2t8TVRSfE1FUXxNTEV8TUxUfE1HRXxNR1R8IiArCiAgICAgICAgICAgICJNYXhGaXhlZHxNYXhOb3RGaXhlZHxDYWNoZWFibGV8V3JpdGVDb21iaW5pbmd8UHJlZmV0Y2hhYmxlfE5vbkNhY2hlYWJsZXwiICsKICAgICAgICAgICAgIk1pbkZpeGVkfE1pbk5vdEZpeGVkfCIgKwogICAgICAgICAgICAiUGFyaXR5VHlwZU5vbmV8UGFyaXR5VHlwZVNwYWNlfFBhcml0eVR5cGVNYXJrfFBhcml0eVR5cGVPZGR8UGFyaXR5VHlwZUV2ZW58IiArCiAgICAgICAgICAgICJQdWxsRGVmYXVsdHxQdWxsVXB8UHVsbERvd258UHVsbE5vbmV8UG9sYXJpdHlIaWdofFBvbGFyaXR5TG93fCIgKwogICAgICAgICAgICAiSVNBT25seVJhbmdlc3xOb25JU0FPbmx5UmFuZ2VzfEVudGlyZVJhbmdlfFJlYWRXcml0ZXxSZWFkT25seXwiICsKICAgICAgICAgICAgIlVzZXJEZWZSZWdpb25TcGFjZXxTeXN0ZW1JT3xTeXN0ZW1NZW1vcnl8UENJX0NvbmZpZ3xFbWJlZGRlZENvbnRyb2x8IiArCiAgICAgICAgICAgICJTTUJ1c3xTeXN0ZW1DTU9TfFBjaUJhclRhcmdldHxJUE1JfEdlbmVyYWxQdXJwb3NlSU98R2VuZXJpY1NlcmlhbEJ1c3wiICsKICAgICAgICAgICAgIlJlc291cmNlQ29uc3VtZXJ8UmVzb3VyY2VQcm9kdWNlcnxTZXJpYWxpemVkfE5vdFNlcmlhbGl6ZWR8IiArCiAgICAgICAgICAgICJTaGFyZWR8RXhjbHVzaXZlfFNoYXJlZEFuZFdha2V8RXhjbHVzaXZlQW5kV2FrZXxDb250cm9sbGVySW5pdGlhdGVkfERldmljZUluaXRpYXRlZHwiICsKICAgICAgICAgICAgIlN0b3BCaXRzWmVyb3xTdG9wQml0c09uZXxTdG9wQml0c09uZVBsdXNIYWxmfFN0b3BCaXRzVHdvfCIgKwogICAgICAgICAgICAiV2lkdGg4Qml0fFdpZHRoMTZCaXR8V2lkdGgzMkJpdHxXaWR0aDY0Qml0fFdpZHRoMTI4Qml0fFdpZHRoMjU2Qml0fCIgKwogICAgICAgICAgICAiU3BhcnNlVHJhbnNsYXRpb258RGVuc2VUcmFuc2xhdGlvbnxUeXBlVHJhbnNsYXRpb258VHlwZVN0YXRpY3wiICsKICAgICAgICAgICAgIlByZXNlcnZlfFdyaXRlQXNPbmVzfFdyaXRlQXNaZXJvc3xUcmFuc2Zlcjh8VHJhbnNmZXIxNnxUcmFuc2ZlcjhfMTZ8IiArCiAgICAgICAgICAgICJUaHJlZVdpcmVNb2RlfEZvdXJXaXJlTW9kZSIKICAgICAgICApOwoKICAgICAgICB2YXIgc3RvcmFnZVR5cGVzID0gKAogICAgICAgICAgICAiVW5rbm93bk9ianxJbnRPYmp8U3RyT2JqfEJ1ZmZPYmp8UGtnT2JqfEZpZWxkVW5pdE9ianxEZXZpY2VPYmp8IiArCiAgICAgICAgICAgICJFdmVudE9ianxNZXRob2RPYmp8TXV0ZXhPYmp8T3BSZWdpb25PYmp8UG93ZXJSZXNPYmp8UHJvY2Vzc29yT2JqfCIgKwogICAgICAgICAgICAiVGhlcm1hbFpvbmVPYmp8QnVmZkZpZWxkT2JqfEREQkhhbmRsZU9iaiIKICAgICAgICApOwoKICAgICAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgKICAgICAgICAgICAgIl9fRklMRV9ffF9fUEFUSF9ffF9fTElORV9ffF9fREFURV9ffF9fSUFTTF9fIgogICAgICAgICk7CgogICAgICAgIHZhciBkZXByZWNhdGVkID0gKAogICAgICAgICAgICAiTWVtb3J5MjR8UHJvY2Vzc29yIgogICAgICAgICk7CgogICAgICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiOiBrZXl3b3JkT3BlcmF0b3JzLAogICAgICAgICAgICAiZnVuY3Rpb24uYnVpbGRpbiI6IGJ1aWxkaW5GdW5jdGlvbnMsCiAgICAgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWxkaW5Db25zdGFudHMsCiAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiOiBzdG9yYWdlVHlwZXMsCiAgICAgICAgICAgICJjb25zdGFudC5jaGFyYWN0ZXIiOiBmbGFncywKICAgICAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6IGRlcHJlY2F0ZWQKICAgICAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgICAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBpZ25vcmVkIGZpZWxkcyAvIGNvbW1lbnRzCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcWyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCA6ICJpZ25vcmVkZmllbGQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcTG9jYWxbMC03XXxcXEFyZ1swLTZdIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBwcmUtY29tcGlsZXIgZGlyZWN0aXZlcwogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86ZGVmaW5lfGVsaWZ8ZWxzZXxlbmRpZnxlcnJvcnxpZnxpZmRlZnxpZm5kZWZ8aW5jbHVkZXxpbmNsdWRlYnVmZmVyfGxpbmV8cHJhZ21hfHVuZGVmfHdhcm5pbmcpXFxiIiwKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3RlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvMFt4WF1bMC05YS1mQS1GXStcYi8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oT25lKHMpP3xaZXJvfFRydWV8RmFsc2V8WzAtOV0rKVxiLwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiL3whfFxcJHwlfCZ8XFx8fFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PXw9fCE9fFxcXnw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcfD0iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAibHBhcmVuIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJycGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJpZ25vcmVkZmllbGQiIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGlnbm9yZWQgZmllbGRzIC8gY29tbWVudHMKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxdIiwKICAgICAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLy4qXFwvCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqPC4rPz4qcyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdKnMnLAogICAgICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1teXFxcL10rLywKICAgICAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfTsKCiAgICAgICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwogICAgfTsKCiAgICBvb3AuaW5oZXJpdHMoQVNMSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgogICAgZXhwb3J0cy5BU0xIaWdobGlnaHRSdWxlcyA9IEFTTEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2FzbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2FzbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICAgIHZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CiAgICB2YXIgQVNMSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2FzbF9oaWdobGlnaHRfcnVsZXMiKS5BU0xIaWdobGlnaHRSdWxlczsKICAgIHZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCiAgICB2YXIgTW9kZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQVNMSGlnaGxpZ2h0UnVsZXM7CiAgICAgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgICAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwogICAgfTsKICAgIG9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgogICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9hc2wiOwogICAgfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgogICAgZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2FzbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-assembly_x86.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hc3NlbWJseV94ODZfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQXNzZW1ibHlYODZIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0geyBzdGFydDogCiAgICAgICBbIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wuYXNzZW1ibHknLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86YWFhfGFhZHxhYW18YWFzfGFkY3xhZGR8YWRkcGR8YWRkcHN8YWRkc2R8YWRkc3N8YWRkc3VicGR8YWRkc3VicHN8YWVzZGVjfGFlc2RlY2xhc3R8YWVzZW5jfGFlc2VuY2xhc3R8YWVzaW1jfGFlc2tleWdlbmFzc2lzdHxhbmR8YW5kcGR8YW5kcHN8YW5kbnBkfGFuZG5wc3xhcnBsfGJsZW5kcGR8YmxlbmRwc3xibGVuZHZwZHxibGVuZHZwc3xib3VuZHxic2Z8YnNyfGJzd2FwfGJ0fGJ0Y3xidHJ8YnRzfGNid3xjd2RlfGNkcWV8Y2xjfGNsZHxjZmx1c2h8Y2x0c3xjbWN8Y21vdig/Om4/ZXxnZT98YWU/fGxlP3xiZT98bj9vfG4/eil8Y21wfGNtcHBkfGNtcHBzfGNtcHN8Y25wc2J8Y21wc3d8Y21wc2R8Y21wc3F8Y21wc3N8Y21weGNoZ3xjbXB4Y2hnOGJ8Y21weGNoZzE2Ynxjb21pc2R8Y29taXNzfGNwdWlkfGNyYzMyfGN2dGRxMnBkfGN2dGRxMnBzfGN2dHBkMmRxfGN2dHBkMnBpfGN2dHBkMnBzfGN2dHBpMnBkfGN2dHBpMnBzfGN2dHBzMmRxfGN2dHBzMnBkfGN2dHBzMnBpfGN2dHNkMnNpfGN2dHNkMnNzfGN2dHMyc2R8Y3Z0c2kyc3N8Y3Z0c3Myc2R8Y3Z0c3Myc2l8Y3Z0dHBkMmRxfGN2dHBkMnBpfGN2dHRwczJkcXxjdnR0cHMycGl8Y3Z0dHBzMmRxfGN2dHRwczJwaXxjdnR0c2Qyc2l8Y3Z0dHNzMnNpfGN3ZHxjZHF8Y3FvfGRhYXxkYXN8ZGVjfGRpdnxkaXZwZHxkaXZwc3xkaXZzZHxkaXZzc3xkcHBkfGRwcHN8ZW1tc3xlbnRlcnxleHRyYWN0cHN8ZjJ4bTF8ZmFic3xmYWRkfGZhZGRwfGZpYWRkfGZibGR8ZmJzdHB8ZmNoc3xmY2xleHxmbmNsZXh8ZmNtb3YoPzpuP2V8Z2U/fGFlP3xsZT98YmU/fG4/b3xuP3opfGZjb218ZmNtb3B8ZmNvbXBwfGZjb21pfGZjb21pcHxmdWNvbWl8ZnVjb21pcHxmY29zfGZkZWNzdHB8ZmRpdnxmZGl2cHxmaWRpdnxmZGl2cnxmZGl2cnB8ZmlkaXZyfGZmcmVlfGZpY29tfGZpY29tcHxmaWxkfGZpbmNzdHB8ZmluaXR8Zm5pbnR8ZmlzdHxmaXN0cHxmaXN0dHB8ZmxkfGZsZDF8ZmxkbDJ0fGZsZGwyZXxmbGRwaXxmbGRsZzJ8ZmxkbG4yfGZsZHp8ZmxkY3d8ZmxkZW52fGZtdWx8Zm11bHB8ZmltdWx8Zm5vcHxmcGF0YW58ZnByZW18ZnByZW0xfGZwdGFufGZybmRpbnR8ZnJzdG9yfGZzYXZlfGZuc2F2ZXxmc2NhbGV8ZnNpbnxmc2luY29zfGZzcXJ0fGZzdHxmc3RwfGZzdGN3fGZuc3Rjd3xmc3RlbnZ8Zm5zdGVudnxmc3RzfGZuc3Rzd3xmc3VifGZzdWJwfGZpc3VifGZzdWJyfGZzdWJycHxmaXN1YnJ8ZnRzdHxmdWNvbXxmdWNvbXB8ZnVjb21wcHxmeGFtfGZ4Y2h8Znhyc3RvcnxmeHNhdmV8Znh0cmFjdHxmeWwyeHxmeWwyeHAxfGhhZGRwZHxoYWRkcHN8aHVzYnBkfGhzdWJwc3xpZGl2fGltdWx8aW58aW5jfGluc3xpbnNifGluc3d8aW5zZHxpbnNlcnRwc3xpbnR8aW50b3xpbnZkfGludnBsZ3xpbnZwY2lkfGlyZXR8aXJldGR8aXJldHF8bGFoZnxsYXJ8bGRkcXV8bGRteGNzcnxsZHN8bGVzfGxmc3xsZ3N8bHNzfGxlYXxsZWF2ZXxsZmVuY2V8bGdkdHxsaWR0fGxsZ2R0fGxtc3d8bG9ja3xsb2RzfGxvZHNifGxvZHN3fGxvZHNkfGxvZHNxfGxzbHxsdHJ8bWFza21vdmRxdXxtYXNrbW92cXxtYXhwZHxtYXhwc3xtYXhzZHxtYXhzc3xtZmVuY2V8bWlucGR8bWlucHN8bWluc2R8bWluc3N8bW9uaXRvcnxtb3Z8bW92YXBkfG1vdmFwc3xtb3ZiZXxtb3ZkfG1vdnF8bW92ZGR1cHxtb3ZkcWF8bW92ZHF1fG1vdnEycXxtb3ZobHBzfG1vdmhwZHxtb3ZocHN8bW92bGhwc3xtb3ZscGR8bW92bHBzfG1vdm1za3BkfG1vdm1za3BzfG1vdm50ZHFhfG1vdm50ZHF8bW92bnRpfG1vdm50cGR8bW92bnRwc3xtb3ZudHF8bW92cXxtb3ZxMmRxfG1vdnN8bW92c2J8bW92c3d8bW92c2R8bW92c3F8bW92c2R8bW92c2hkdXB8bW92c2xkdXB8bW92c3N8bW92c3h8bW92c3hkfG1vdnVwZHxtb3Z1cHN8bW92enh8bXBzYWRid3xtdWx8bXVscGR8bXVscHN8bXVsc2R8bXVsc3N8bXdhaXR8bmVnfG5vdHxvcnxvcnBkfG9ycHN8b3V0fG91dHN8b3V0c2J8b3V0c3d8b3V0c2R8cGFic2J8cGFic3d8cGFic2R8cGFja3Nzd2J8cGFja3NzZHd8cGFja3VzZHd8cGFja3Vzd2JwYWRkYnxwYWRkd3xwYWRkZHxwYWRkcXxwYWRkc2J8cGFkZHN3fHBhZGR1c2J8cGFkZHVzd3xwYWxpZ25yfHBhbmR8cGFuZG58cGF1c2V8cGF2Z2J8cGF2Z3d8cGJsZW5kdmJ8cGJsZW5kd3xwY2xtdWxxZHF8cGNtcGVxYnxwY21wZXF3fHBjbXBlcWR8cGNtcGVxcXxwY21wZXN0cml8cGNtcGVzdHJtfHBjbXB0YnxwY21wdGd3fHBjbXBndGR8cGNtcGd0cXxwY21waXN0cml8cGNtcGlzcm18cGV4dHJifHBleHRyZHxwZXh0cnF8cGV4dHJ3fHBoYWRkd3xwaGFkZGR8cGhhZGRzd3xwaGlucG9zdXd8cGhzdWJ3fHBoc3ViZHxwaHN1YnN3fHBpbnNyYnxwaW5zcmR8cGluc3JxfHBpbnNyd3xwbWFkZHVic3d8cG1hZGRkd2R8cG1heHNifHBtYXhzZHxwbWF4c3d8cG1heHN3fHBtYXh1YnxwbWF4dWR8cG1heHV3fHBtaW5zYnxwbWluc2R8cG1pbnN3fHBtaW51YnxwbWludWR8cG1pbnV3fHBtb3Ztc2tifHBtb3ZzeHxwbW92enh8cG11bGRxfHBtdWxocnN3fHBtdWxodXd8cG11bGh3fHBtdWxsZHxwbXVsbHd8cG11bHVkd3xwb3B8cG9wYXxwb3BhZHxwb3BjbnR8cG9wZnxwb3BmZHxwb3BmcXxwb3J8cHJlZmV0Y2h8cHNhZGJ3fHBzaHVmYnxwc2h1ZmR8cHNodWZod3xwc2h1Zmx3fHBzaHVmd3xwc2lnbmJ8cHNpZ253fHBzaWduZHxwc2xsZHF8cHNsbHd8cHNsbGR8cHNsbHF8cHNyYXd8cHNyYWR8cHNybGRxfHBzcmx3fHBzcmxkfHBzcmxxfHBzdWJifHBzdWJ3fHBzdWJkfHBzdWJxfHBzdWJzYnxwc3Vic3d8cHN1YnVzYnxwc3VidXN3fHRlc3R8cHRlc3R8cHVucGNraGJ3fHB1bnBja2h3ZHxwdW5wY2toZHF8cHVucGNraGRkcXxwdW5wY2tsYnd8cHVucGNrbHdkfHB1bnBja2xkcXxwdW5wY2tsZHFkfHB1c2h8cHVzaGF8cHVzaGFkfHB1c2hmfHB1c2hmZHxweG9yfHByY2x8cmNyfHJvbHxyb3J8cmNwcHN8cmNwc3N8cmRmc2Jhc2V8cmRnc2Jhc2V8cmRtc3J8cmRwbWN8cmRyYW5kfHJkdHNjfHJkdHNjcHxyZXB8cmVwZXxyZXB6fHJlcG5lfHJlcG56fHJvdW5kcGR8cm91bmRwc3xyb3VuZHNkfHJvdW5kc3N8cnNtfHJzcXJwc3xyc3FydHNzfHNhaGZ8c2FsfHNhcnxzaGx8c2hyfHNiYnxzY2FzfHNjYXNifHNjYXN3fHNjYXNkfHNldCg/Om4/ZXxnZT98YWU/fGxlP3xiZT98bj9vfG4/eil8c2ZlbmNlfHNnZHR8c2hsZHxzaHJkfHNodWZwZHxzaHVmcHN8c2lkdHxzbGR0fHNtc3d8c3FydHBkfHNxcnRwc3xzcXJ0c2R8c3FydHNzfHN0Y3xzdGR8c3RteGNzcnxzdG9zfHN0b3NifHN0b3N3fHN0b3NkfHN0b3NxfHN0cnxzdWJ8c3VicGR8c3VicHN8c3Vic2R8c3Vic3N8c3dhcGdzfHN5c2NhbGx8c3lzZW50ZXJ8c3lzZXhpdHxzeXNyZXR8dGVzZXR8dWNvbWlzZHx1Y29taXNzfHVkMnx1bnBja2hwZHx1bnBja2hwc3x1bnBja2xwZHx1bnBja2xwc3x2YnJvYWRjYXN0fHZjdnRwaDJwc3x2Y3Z0cDJzcGh8dmVycnx2ZXJ3fHZleHRyYWN0ZjEyOHx2aW5zZXJ0ZjEyOHx2bWFza21vdnx2cGVybWlscGR8dnBlcm1pbHBzfHZwZXJtMmYxMjh8dnRlc3RwZHx2dGVzdHBzfHZ6ZXJvYWxsfHZ6ZXJvdXBwZXJ8d2FpdHxmd2FpdHx3YmludmR8d3Jmc2Jhc2V8d3Jnc2Jhc2V8d3Jtc3J8eGFkZHx4Y2hnfHhnZXRidnx4bGF0fHhsYXRifHhvcnx4b3JwZHx4b3Jwc3x4cnN0b3J8eHNhdmV8eHNhdmVvcHR8eHNldGJ2fGx6Y250fGV4dHJxfGluc2VydHF8bW92bnRzZHxtb3ZudHNzfHZmbWFkZHBkfHZmbWFkZHBzfHZmbWFkZHNkfHZmbWFkZHNzfHZmbWFkZHN1YmJwZHx2Zm1hZGRzdWJwc3x2Zm1zdWJhZGRwZHx2Zm1zdWJhZGRwc3x2Zm1zdWJwZHx2Zm1zdWJwc3x2Zm1zdWJzZHx2Zm5tYWRkcGR8dmZubWFkZHBzfHZmbm1hZGRzZHx2Zm5tYWRkc3N8dmZubXN1YnBkfHZmbm11c2Jwc3x2Zm5tdXNic2R8dmZubXVzYnNzfGN2dHx4b3J8Y2xpfHN0aXxobHR8bm9wfGxvY2t8d2FpdHxlbnRlcnxsZWF2ZXxyZXR8bG9vcCg/Om4/ZXxuP3opP3xjYWxsfGooPzptcHxuP2V8Z2U/fGFlP3xsZT98YmU/fG4/b3xuP3opKVxcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICd2YXJpYWJsZS5wYXJhbWV0ZXIucmVnaXN0ZXIuYXNzZW1ibHknLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Q1N8RFN8RVN8RlN8R1N8U1N8UkFYfEVBWHxSQlh8RUJYfFJDWHxFQ1h8UkRYfEVEWHxSQ1h8UklQfEVJUHxJUHxSU1B8RVNQfFNQfFJTSXxFU0l8U0l8UkRJfEVESXxESXxSRkxBR1N8RUZMQUdTfEZMQUdTfFI4LTE1fCg/Oll8WClNTSg/OlswLTldfDEwfDExfDEyfDEzfDE0fDE1KXwoPzpBfEJ8Q3xEKSg/Olh8SHxMKXxDUig/OlswLTRdfERSKD86WzAtN118VFI2fFRSN3xFRkVSKSkpXFxiJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5kZWNpbWFsLmFzc2VtYmx5JywKICAgICAgICAgICByZWdleDogJ1xcYlswLTldK1xcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5oZXhhZGVjaW1hbC5hc3NlbWJseScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIweFtBLUYwLTldK1xcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuaGV4YWRlY2ltYWwuYXNzZW1ibHknLAogICAgICAgICAgIHJlZ2V4OiAnXFxiW0EtRjAtOV0raFxcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdHJpbmcuYXNzZW1ibHknLCByZWdleDogLycoW15cXCddfFxcLikqJy8gfSwKICAgICAgICAgeyB0b2tlbjogJ3N0cmluZy5hc3NlbWJseScsIHJlZ2V4OiAvIihbXlxcIl18XFwuKSoiLyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5kaXJlY3RpdmUuYXNzZW1ibHknLAogICAgICAgICAgIHJlZ2V4OiAnXlxcWycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uZGlyZWN0aXZlLmFzc2VtYmx5JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxdJCcsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5kaXJlY3RpdmUuYXNzZW1ibHknIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAnc3VwcG9ydC5mdW5jdGlvbi5kaXJlY3RpdmUuYXNzZW1ibHknLAogICAgICAgICAgICAgICdzdXBwb3J0LmZ1bmN0aW9uLmRpcmVjdGl2ZS5hc3NlbWJseScsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLmFzc2VtYmx5JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKF5zdHJ1YykoICkoW19hLXpBLVpdW19hLXpBLVowLTldKiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmRpcmVjdGl2ZS5hc3NlbWJseScsCiAgICAgICAgICAgcmVnZXg6ICdeZW5kc3RydWNcXGInIH0sCiAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3N1cHBvcnQuZnVuY3Rpb24uZGlyZWN0aXZlLmFzc2VtYmx5JywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uYXNzZW1ibHknLAogICAgICAgICAgICAgICdzdXBwb3J0LmZ1bmN0aW9uLmRpcmVjdGl2ZS5hc3NlbWJseScsCiAgICAgICAgICAgICAgJ2NvbnN0YW50LmNoYXJhY3Rlci5hc3NlbWJseScgXSwKICAgICAgICAgICByZWdleDogJ14oJW1hY3JvICkoW19hLXpBLVpdW19hLXpBLVowLTldKikoICkoWzAtOV0rKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uZGlyZWN0aXZlLmFzc2VtYmx5JywKICAgICAgICAgICByZWdleDogJ14lZW5kbWFjcm8nIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICd0ZXh0JywKICAgICAgICAgICAgICAnc3VwcG9ydC5mdW5jdGlvbi5kaXJlY3RpdmUuYXNzZW1ibHknLAogICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uYXNzZW1ibHknIF0sCiAgICAgICAgICAgcmVnZXg6ICcoXFxzKikoJWRlZmluZXwleGRlZmluZXwlaWRlZmluZXwldW5kZWZ8JWFzc2lnbnwlZGVmc3RyfCVzdHJjYXR8JXN0cmxlbnwlc3Vic3RyfCUwMHwlMHwlcm90YXRlfCVyZXB8JWVuZHJlcHwlaW5jbHVkZXxcXCRcXCR8XFwkfCV1bm1hY3JvfCVpZnwlZWxpZnwlZWxzZXwlZW5kaWZ8JSg/OmVsKT9pZmRlZnwlKD86ZWwpP2lmbWFjcm98JSg/OmVsKT9pZmN0eHwlKD86ZWwpP2lmaWRufCUoPzplbCk/aWZpZG5pfCUoPzplbCk/aWZpZHwlKD86ZWwpP2lmbnVtfCUoPzplbCk/aWZzdHJ8JSg/OmVsKT9pZnRva2VufCUoPzplbCk/aWZlbXB0eXwlKD86ZWwpP2lmZW52fCVwYXRoc2VhcmNofCVkZXBlbmR8JXVzZXwlcHVzaHwlcG9wfCVyZXBsfCVhcmd8JXN0YWNrc2l6ZXwlbG9jYWx8JWVycm9yfCV3YXJuaW5nfCVmYXRhbHwlbGluZXwlIXwlY29tbWVudHwlZW5kY29tbWVudHxfX05BU01fVkVSU0lPTl9JRF9ffF9fTkFTTV9WRVJfX3xfX0ZJTEVfX3xfX0xJTkVfX3xfX0JJVFNfX3xfX09VVFBVVF9GT1JNQVRfX3xfX0RBVEVfX3xfX1RJTUVfX3xfX0RBVEVfTlVNX198X1RJTUVfX05VTV9ffF9fVVRDX0RBVEVfX3xfX1VUQ19USU1FX198X19VVENfREFURV9OVU1fX3xfX1VUQ19USU1FX05VTV9ffF9fUE9TSVhfVElNRV9ffF9fUEFTU19ffElTVFJVQ3xBVHxJRU5EfEJJVFMgMTZ8QklUUyAzMnxCSVRTIDY0fFVTRTE2fFVTRTMyfF9fU0VDVF9ffEFCU09MVVRFfEVYVEVSTnxHTE9CQUx8Q09NTU9OfENQVXxGTE9BVClcXGIoID8pKCg/OltfYS16QS1aXVtfYS16QS1aMC05XSopPyknLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uZGlyZWN0aXZlLmFzc2VtYmx5JywKICAgICAgICAgICByZWdleDogJ1xcYig/OmRbYndkcXRveV18cmVzW2J3ZHF0b118ZXF1fHRpbWVzfGFsaWdufGFsaWduYnxzZWN0YWxpZ258c2VjdGlvbnxwdHJ8Ynl0ZXx3b3JkfGR3b3JkfHF3b3JkfGluY2JpbilcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICB7IHRva2VuOiAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uYXNzZW1ibHknLCByZWdleDogJ15cXHMqJSVbXFx3Ll0rPzokJyB9LAogICAgICAgICB7IHRva2VuOiAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uYXNzZW1ibHknLCByZWdleDogJ15cXHMqJVxcJFtcXHcuXSs/OiQnIH0sCiAgICAgICAgIHsgdG9rZW46ICdlbnRpdHkubmFtZS5mdW5jdGlvbi5hc3NlbWJseScsIHJlZ2V4OiAnXltcXHcuXSs/OicgfSwKICAgICAgICAgeyB0b2tlbjogJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLmFzc2VtYmx5JywgcmVnZXg6ICdeW1xcdy5dKz9cXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb21tZW50LmFzc2VtYmx5JywgcmVnZXg6ICc7LiokJyB9IF0gCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpBc3NlbWJseVg4NkhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0geyBmaWxlVHlwZXM6IFsgJ2FzbScgXSwKICAgICAgbmFtZTogJ0Fzc2VtYmx5IHg4NicsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5hc3NlbWJseScgfTsKCgpvb3AuaW5oZXJpdHMoQXNzZW1ibHlYODZIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQXNzZW1ibHlYODZIaWdobGlnaHRSdWxlcyA9IEFzc2VtYmx5WDg2SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciByZSA9IC9cUy87CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSB8fCBsaW5lW3N0YXJ0TGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGluZS5zZWFyY2gocmUpOwoKICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBpZiAobGluZVtsZXZlbF0gIT0gIiMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBuZXh0W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocHJldkluZGVudCA9PSBpbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMikuc2VhcmNoKC9cUy8pID09IC0xKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgaW5kZW50KQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKCiAgICAgICAgaWYgKGluZGVudCA8IG5leHRJbmRlbnQpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9hc3NlbWJseV94ODYiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9hc3NlbWJseV94ODZfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBBc3NlbWJseVg4NkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9hc3NlbWJseV94ODZfaGlnaGxpZ2h0X3J1bGVzIikuQXNzZW1ibHlYODZIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBBc3NlbWJseVg4NkhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSBbIjsiXTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2Fzc2VtYmx5X3g4NiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2Fzc2VtYmx5X3g4NiJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-autohotkey.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9hdXRvaG90a2V5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEF1dG9Ib3RLZXlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGF1dG9JdEtleXdvcmRzID0gJ0FuZHxCeVJlZnxDYXNlfENvbnN0fENvbnRpbnVlQ2FzZXxDb250aW51ZUxvb3B8RGVmYXVsdHxEaW18RG98RWxzZXxFbHNlSWZ8RW5kRnVuY3xFbmRJZnxFbmRTZWxlY3R8RW5kU3dpdGNofEVuZFdpdGh8RW51bXxFeGl0fEV4aXRMb29wfEZhbHNlfEZvcnxGdW5jfEdsb2JhbHxJZnxJbnxMb2NhbHxOZXh0fE5vdHxPcnxSZURpbXxSZXR1cm58U2VsZWN0fFN0ZXB8U3dpdGNofFRoZW58VG98VHJ1ZXxVbnRpbHxXRW5kfFdoaWxlfFdpdGh8JyArICAgICAgIAogICAgICAgICdBYnN8QUNvc3xBZGxpYkRpc2FibGV8QWRsaWJFbmFibGV8QXNjfEFzY1d8QVNpbnxBc3NpZ258QVRhbnxBdXRvSXRTZXRPcHRpb258QXV0b0l0V2luR2V0VGl0bGV8QXV0b0l0V2luU2V0VGl0bGV8QmVlcHxCaW5hcnl8QmluYXJ5TGVufEJpbmFyeU1pZHxCaW5hcnlUb1N0cmluZ3xCaXRBTkR8Qml0Tk9UfEJpdE9SfEJpdFJvdGF0ZXxCaXRTaGlmdHxCaXRYT1J8QmxvY2tJbnB1dHxCcmVha3xDYWxsfENEVHJheXxDZWlsaW5nfENocnxDaHJXfENsaXBHZXR8Q2xpcFB1dHxDb25zb2xlUmVhZHxDb25zb2xlV3JpdGV8Q29uc29sZVdyaXRlRXJyb3J8Q29udHJvbENsaWNrfENvbnRyb2xDb21tYW5kfENvbnRyb2xEaXNhYmxlfENvbnRyb2xFbmFibGV8Q29udHJvbEZvY3VzfENvbnRyb2xHZXRGb2N1c3xDb250cm9sR2V0SGFuZGxlfENvbnRyb2xHZXRQb3N8Q29udHJvbEdldFRleHR8Q29udHJvbEhpZGV8Q29udHJvbExpc3RWaWV3fENvbnRyb2xNb3ZlfENvbnRyb2xTZW5kfENvbnRyb2xTZXRUZXh0fENvbnRyb2xTaG93fENvbnRyb2xUcmVlVmlld3xDb3N8RGVjfERpckNvcHl8RGlyQ3JlYXRlfERpckdldFNpemV8RGlyTW92ZXxEaXJSZW1vdmV8RGxsQ2FsbHxEbGxDYWxsYmFja0ZyZWV8RGxsQ2FsbGJhY2tHZXRQdHJ8RGxsQ2FsbGJhY2tSZWdpc3RlcnxEbGxDbG9zZXxEbGxPcGVufERsbFN0cnVjdENyZWF0ZXxEbGxTdHJ1Y3RHZXREYXRhfERsbFN0cnVjdEdldFB0cnxEbGxTdHJ1Y3RHZXRTaXplfERsbFN0cnVjdFNldERhdGF8RHJpdmVHZXREcml2ZXxEcml2ZUdldEZpbGVTeXN0ZW18RHJpdmVHZXRMYWJlbHxEcml2ZUdldFNlcmlhbHxEcml2ZUdldFR5cGV8RHJpdmVNYXBBZGR8RHJpdmVNYXBEZWx8RHJpdmVNYXBHZXR8RHJpdmVTZXRMYWJlbHxEcml2ZVNwYWNlRnJlZXxEcml2ZVNwYWNlVG90YWx8RHJpdmVTdGF0dXN8RW52R2V0fEVudlNldHxFbnZVcGRhdGV8RXZhbHxFeGVjdXRlfEV4cHxGaWxlQ2hhbmdlRGlyfEZpbGVDbG9zZXxGaWxlQ29weXxGaWxlQ3JlYXRlTlRGU0xpbmt8RmlsZUNyZWF0ZVNob3J0Y3V0fEZpbGVEZWxldGV8RmlsZUV4aXN0c3xGaWxlRmluZEZpcnN0RmlsZXxGaWxlRmluZE5leHRGaWxlfEZpbGVHZXRBdHRyaWJ8RmlsZUdldExvbmdOYW1lfEZpbGVHZXRTaG9ydGN1dHxGaWxlR2V0U2hvcnROYW1lfEZpbGVHZXRTaXplfEZpbGVHZXRUaW1lfEZpbGVHZXRWZXJzaW9ufEZpbGVJbnN0YWxsfEZpbGVNb3ZlfEZpbGVPcGVufEZpbGVPcGVuRGlhbG9nfEZpbGVSZWFkfEZpbGVSZWFkTGluZXxGaWxlUmVjeWNsZXxGaWxlUmVjeWNsZUVtcHR5fEZpbGVTYXZlRGlhbG9nfEZpbGVTZWxlY3RGb2xkZXJ8RmlsZVNldEF0dHJpYnxGaWxlU2V0VGltZXxGaWxlV3JpdGV8RmlsZVdyaXRlTGluZXxGbG9vcnxGdHBTZXRQcm94eXxHVUlDcmVhdGV8R1VJQ3RybENyZWF0ZUF2aXxHVUlDdHJsQ3JlYXRlQnV0dG9ufEdVSUN0cmxDcmVhdGVDaGVja2JveHxHVUlDdHJsQ3JlYXRlQ29tYm98R1VJQ3RybENyZWF0ZUNvbnRleHRNZW51fEdVSUN0cmxDcmVhdGVEYXRlfEdVSUN0cmxDcmVhdGVEdW1teXxHVUlDdHJsQ3JlYXRlRWRpdHxHVUlDdHJsQ3JlYXRlR3JhcGhpY3xHVUlDdHJsQ3JlYXRlR3JvdXB8R1VJQ3RybENyZWF0ZUljb258R1VJQ3RybENyZWF0ZUlucHV0fEdVSUN0cmxDcmVhdGVMYWJlbHxHVUlDdHJsQ3JlYXRlTGlzdHxHVUlDdHJsQ3JlYXRlTGlzdFZpZXd8R1VJQ3RybENyZWF0ZUxpc3RWaWV3SXRlbXxHVUlDdHJsQ3JlYXRlTWVudXxHVUlDdHJsQ3JlYXRlTWVudUl0ZW18R1VJQ3RybENyZWF0ZU1vbnRoQ2FsfEdVSUN0cmxDcmVhdGVPYmp8R1VJQ3RybENyZWF0ZVBpY3xHVUlDdHJsQ3JlYXRlUHJvZ3Jlc3N8R1VJQ3RybENyZWF0ZVJhZGlvfEdVSUN0cmxDcmVhdGVTbGlkZXJ8R1VJQ3RybENyZWF0ZVRhYnxHVUlDdHJsQ3JlYXRlVGFiSXRlbXxHVUlDdHJsQ3JlYXRlVHJlZVZpZXd8R1VJQ3RybENyZWF0ZVRyZWVWaWV3SXRlbXxHVUlDdHJsQ3JlYXRlVXBkb3dufEdVSUN0cmxEZWxldGV8R1VJQ3RybEdldEhhbmRsZXxHVUlDdHJsR2V0U3RhdGV8R1VJQ3RybFJlYWR8R1VJQ3RybFJlY3ZNc2d8R1VJQ3RybFJlZ2lzdGVyTGlzdFZpZXdTb3J0fEdVSUN0cmxTZW5kTXNnfEdVSUN0cmxTZW5kVG9EdW1teXxHVUlDdHJsU2V0QmtDb2xvcnxHVUlDdHJsU2V0Q29sb3J8R1VJQ3RybFNldEN1cnNvcnxHVUlDdHJsU2V0RGF0YXxHVUlDdHJsU2V0Rm9udHxHVUlDdHJsU2V0RGVmQ29sb3J8R1VJQ3RybFNldERlZkJrQ29sb3J8R1VJQ3RybFNldEdyYXBoaWN8R1VJQ3RybFNldEltYWdlfEdVSUN0cmxTZXRMaW1pdHxHVUlDdHJsU2V0T25FdmVudHxHVUlDdHJsU2V0UG9zfEdVSUN0cmxTZXRSZXNpemluZ3xHVUlDdHJsU2V0U3RhdGV8R1VJQ3RybFNldFN0eWxlfEdVSUN0cmxTZXRUaXB8R1VJRGVsZXRlfEdVSUdldEN1cnNvckluZm98R1VJR2V0TXNnfEdVSUdldFN0eWxlfEdVSVJlZ2lzdGVyTXNnfEdVSVNldEFjY2VsZXJhdG9ycygpfEdVSVNldEJrQ29sb3J8R1VJU2V0Q29vcmR8R1VJU2V0Q3Vyc29yfEdVSVNldEZvbnR8R1VJU2V0SGVscHxHVUlTZXRJY29ufEdVSVNldE9uRXZlbnR8R1VJU2V0U3RhdGV8R1VJU2V0U3R5bGV8R1VJU3RhcnRHcm91cHxHVUlTd2l0Y2h8SGV4fEhvdEtleVNldHxIdHRwU2V0UHJveHl8SFduZHxJbmV0R2V0fEluZXRHZXRTaXplfEluaURlbGV0ZXxJbmlSZWFkfEluaVJlYWRTZWN0aW9ufEluaVJlYWRTZWN0aW9uTmFtZXN8SW5pUmVuYW1lU2VjdGlvbnxJbmlXcml0ZXxJbmlXcml0ZVNlY3Rpb258SW5wdXRCb3h8SW50fElzQWRtaW58SXNBcnJheXxJc0JpbmFyeXxJc0Jvb2x8SXNEZWNsYXJlZHxJc0RsbFN0cnVjdHxJc0Zsb2F0fElzSFduZHxJc0ludHxJc0tleXdvcmR8SXNOdW1iZXJ8SXNPYmp8SXNQdHJ8SXNTdHJpbmd8TG9nfE1lbUdldFN0YXRzfE1vZHxNb3VzZUNsaWNrfE1vdXNlQ2xpY2tEcmFnfE1vdXNlRG93bnxNb3VzZUdldEN1cnNvcnxNb3VzZUdldFBvc3xNb3VzZU1vdmV8TW91c2VVcHxNb3VzZVdoZWVsfE1zZ0JveHxOdW1iZXJ8T2JqQ3JlYXRlfE9iakV2ZW50fE9iakdldHxPYmpOYW1lfE9wdHxQaW5nfFBpeGVsQ2hlY2tzdW18UGl4ZWxHZXRDb2xvcnxQaXhlbFNlYXJjaHxQbHVnaW5DbG9zZXxQbHVnaW5PcGVufFByb2Nlc3NDbG9zZXxQcm9jZXNzRXhpc3RzfFByb2Nlc3NHZXRTdGF0c3xQcm9jZXNzTGlzdHxQcm9jZXNzU2V0UHJpb3JpdHl8UHJvY2Vzc1dhaXR8UHJvY2Vzc1dhaXRDbG9zZXxQcm9ncmVzc09mZnxQcm9ncmVzc09ufFByb2dyZXNzU2V0fFB0cnxSYW5kb218UmVnRGVsZXRlfFJlZ0VudW1LZXl8UmVnRW51bVZhbHxSZWdSZWFkfFJlZ1dyaXRlfFJvdW5kfFJ1bnxSdW5Bc3xSdW5Bc1dhaXR8UnVuV2FpdHxTZW5kfFNlbmRLZWVwQWN0aXZlfFNldEVycm9yfFNldEV4dGVuZGVkfFNoZWxsRXhlY3V0ZXxTaGVsbEV4ZWN1dGVXYWl0fFNodXRkb3dufFNpbnxTbGVlcHxTb3VuZFBsYXl8U291bmRTZXRXYXZlVm9sdW1lfFNwbGFzaEltYWdlT258U3BsYXNoT2ZmfFNwbGFzaFRleHRPbnxTcXJ0fFNSYW5kb218U3RhdHVzYmFyR2V0VGV4dHxTdGRlcnJSZWFkfFN0ZGluV3JpdGV8U3RkaW9DbG9zZXxTdGRvdXRSZWFkfFN0cmluZ3xTdHJpbmdBZGRDUnxTdHJpbmdDb21wYXJlfFN0cmluZ0Zvcm1hdHxTdHJpbmdJblN0cnxTdHJpbmdJc0FsTnVtfFN0cmluZ0lzQWxwaGF8U3RyaW5nSXNBU0NJSXxTdHJpbmdJc0RpZ2l0fFN0cmluZ0lzRmxvYXR8U3RyaW5nSXNJbnR8U3RyaW5nSXNMb3dlcnxTdHJpbmdJc1NwYWNlfFN0cmluZ0lzVXBwZXJ8U3RyaW5nSXNYRGlnaXR8U3RyaW5nTGVmdHxTdHJpbmdMZW58U3RyaW5nTG93ZXJ8U3RyaW5nTWlkfFN0cmluZ1JlZ0V4cHxTdHJpbmdSZWdFeHBSZXBsYWNlfFN0cmluZ1JlcGxhY2V8U3RyaW5nUmlnaHR8U3RyaW5nU3BsaXR8U3RyaW5nU3RyaXBDUnxTdHJpbmdTdHJpcFdTfFN0cmluZ1RvQmluYXJ5fFN0cmluZ1RyaW1MZWZ0fFN0cmluZ1RyaW1SaWdodHxTdHJpbmdVcHBlcnxUYW58VENQQWNjZXB0fFRDUENsb3NlU29ja2V0fFRDUENvbm5lY3R8VENQTGlzdGVufFRDUE5hbWVUb0lQfFRDUFJlY3Z8VENQU2VuZHxUQ1BTaHV0ZG93bnxUQ1BTdGFydHVwfFRpbWVyRGlmZnxUaW1lckluaXR8VG9vbFRpcHxUcmF5Q3JlYXRlSXRlbXxUcmF5Q3JlYXRlTWVudXxUcmF5R2V0TXNnfFRyYXlJdGVtRGVsZXRlfFRyYXlJdGVtR2V0SGFuZGxlfFRyYXlJdGVtR2V0U3RhdGV8VHJheUl0ZW1HZXRUZXh0fFRyYXlJdGVtU2V0T25FdmVudHxUcmF5SXRlbVNldFN0YXRlfFRyYXlJdGVtU2V0VGV4dHxUcmF5U2V0Q2xpY2t8VHJheVNldEljb258VHJheVNldE9uRXZlbnR8VHJheVNldFBhdXNlSWNvbnxUcmF5U2V0U3RhdGV8VHJheVNldFRvb2xUaXB8VHJheVRpcHxVQm91bmR8VURQQmluZHxVRFBDbG9zZVNvY2tldHxVRFBPcGVufFVEUFJlY3Z8VURQU2VuZHxVRFBTaHV0ZG93bnxVRFBTdGFydHVwfFZhckdldFR5cGV8V2luQWN0aXZhdGV8V2luQWN0aXZlfFdpbkNsb3NlfFdpbkV4aXN0c3xXaW5GbGFzaHxXaW5HZXRDYXJldFBvc3xXaW5HZXRDbGFzc0xpc3R8V2luR2V0Q2xpZW50U2l6ZXxXaW5HZXRIYW5kbGV8V2luR2V0UG9zfFdpbkdldFByb2Nlc3N8V2luR2V0U3RhdGV8V2luR2V0VGV4dHxXaW5HZXRUaXRsZXxXaW5LaWxsfFdpbkxpc3R8V2luTWVudVNlbGVjdEl0ZW18V2luTWluaW1pemVBbGx8V2luTWluaW1pemVBbGxVbmRvfFdpbk1vdmV8V2luU2V0T25Ub3B8V2luU2V0U3RhdGV8V2luU2V0VGl0bGV8V2luU2V0VHJhbnN8V2luV2FpdHxXaW5XYWl0QWN0aXZlfFdpbldhaXRDbG9zZXxXaW5XYWl0Tm90QWN0aXZlfCcgKwogICAgICAgICdBcnJheUFkZHxBcnJheUJpbmFyeVNlYXJjaHxBcnJheUNvbmNhdGVuYXRlfEFycmF5RGVsZXRlfEFycmF5RGlzcGxheXxBcnJheUZpbmRBbGx8QXJyYXlJbnNlcnR8QXJyYXlNYXh8QXJyYXlNYXhJbmRleHxBcnJheU1pbnxBcnJheU1pbkluZGV4fEFycmF5UG9wfEFycmF5UHVzaHxBcnJheVJldmVyc2V8QXJyYXlTZWFyY2h8QXJyYXlTb3J0fEFycmF5U3dhcHxBcnJheVRvQ2xpcHxBcnJheVRvU3RyaW5nfEFycmF5VHJpbXxDaG9vc2VDb2xvcnxDaG9vc2VGb250fENsaXBCb2FyZF9DaGFuZ2VDaGFpbnxDbGlwQm9hcmRfQ2xvc2V8Q2xpcEJvYXJkX0NvdW50Rm9ybWF0c3xDbGlwQm9hcmRfRW1wdHl8Q2xpcEJvYXJkX0VudW1Gb3JtYXRzfENsaXBCb2FyZF9Gb3JtYXRTdHJ8Q2xpcEJvYXJkX0dldERhdGF8Q2xpcEJvYXJkX0dldERhdGFFeHxDbGlwQm9hcmRfR2V0Rm9ybWF0TmFtZXxDbGlwQm9hcmRfR2V0T3BlbldpbmRvd3xDbGlwQm9hcmRfR2V0T3duZXJ8Q2xpcEJvYXJkX0dldFByaW9yaXR5Rm9ybWF0fENsaXBCb2FyZF9HZXRTZXF1ZW5jZU51bWJlcnxDbGlwQm9hcmRfR2V0Vmlld2VyfENsaXBCb2FyZF9Jc0Zvcm1hdEF2YWlsYWJsZXxDbGlwQm9hcmRfT3BlbnxDbGlwQm9hcmRfUmVnaXN0ZXJGb3JtYXR8Q2xpcEJvYXJkX1NldERhdGF8Q2xpcEJvYXJkX1NldERhdGFFeHxDbGlwQm9hcmRfU2V0Vmlld2VyfENsaXBQdXRGaWxlfENvbG9yQ29udmVydEhTTHRvUkdCfENvbG9yQ29udmVydFJHQnRvSFNMfENvbG9yR2V0Qmx1ZXxDb2xvckdldEdyZWVufENvbG9yR2V0UmVkfERhdGVfVGltZV9Db21wYXJlRmlsZVRpbWV8RGF0ZV9UaW1lX0RPU0RhdGVUaW1lVG9BcnJheXxEYXRlX1RpbWVfRE9TRGF0ZVRpbWVUb0ZpbGVUaW1lfERhdGVfVGltZV9ET1NEYXRlVGltZVRvU3RyfERhdGVfVGltZV9ET1NEYXRlVG9BcnJheXxEYXRlX1RpbWVfRE9TRGF0ZVRvU3RyfERhdGVfVGltZV9ET1NUaW1lVG9BcnJheXxEYXRlX1RpbWVfRE9TVGltZVRvU3RyfERhdGVfVGltZV9FbmNvZGVGaWxlVGltZXxEYXRlX1RpbWVfRW5jb2RlU3lzdGVtVGltZXxEYXRlX1RpbWVfRmlsZVRpbWVUb0FycmF5fERhdGVfVGltZV9GaWxlVGltZVRvRE9TRGF0ZVRpbWV8RGF0ZV9UaW1lX0ZpbGVUaW1lVG9Mb2NhbEZpbGVUaW1lfERhdGVfVGltZV9GaWxlVGltZVRvU3RyfERhdGVfVGltZV9GaWxlVGltZVRvU3lzdGVtVGltZXxEYXRlX1RpbWVfR2V0RmlsZVRpbWV8RGF0ZV9UaW1lX0dldExvY2FsVGltZXxEYXRlX1RpbWVfR2V0U3lzdGVtVGltZXxEYXRlX1RpbWVfR2V0U3lzdGVtVGltZUFkanVzdG1lbnR8RGF0ZV9UaW1lX0dldFN5c3RlbVRpbWVBc0ZpbGVUaW1lfERhdGVfVGltZV9HZXRTeXN0ZW1UaW1lc3xEYXRlX1RpbWVfR2V0VGlja0NvdW50fERhdGVfVGltZV9HZXRUaW1lWm9uZUluZm9ybWF0aW9ufERhdGVfVGltZV9Mb2NhbEZpbGVUaW1lVG9GaWxlVGltZXxEYXRlX1RpbWVfU2V0RmlsZVRpbWV8RGF0ZV9UaW1lX1NldExvY2FsVGltZXxEYXRlX1RpbWVfU2V0U3lzdGVtVGltZXxEYXRlX1RpbWVfU2V0U3lzdGVtVGltZUFkanVzdG1lbnR8RGF0ZV9UaW1lX1NldFRpbWVab25lSW5mb3JtYXRpb258RGF0ZV9UaW1lX1N5c3RlbVRpbWVUb0FycmF5fERhdGVfVGltZV9TeXN0ZW1UaW1lVG9EYXRlU3RyfERhdGVfVGltZV9TeXN0ZW1UaW1lVG9EYXRlVGltZVN0cnxEYXRlX1RpbWVfU3lzdGVtVGltZVRvRmlsZVRpbWV8RGF0ZV9UaW1lX1N5c3RlbVRpbWVUb1RpbWVTdHJ8RGF0ZV9UaW1lX1N5c3RlbVRpbWVUb1R6U3BlY2lmaWNMb2NhbFRpbWV8RGF0ZV9UaW1lX1R6U3BlY2lmaWNMb2NhbFRpbWVUb1N5c3RlbVRpbWV8RGF0ZUFkZHxEYXRlRGF5T2ZXZWVrfERhdGVEYXlzSW5Nb250aHxEYXRlRGlmZnxEYXRlSXNMZWFwWWVhcnxEYXRlSXNWYWxpZHxEYXRlVGltZUZvcm1hdHxEYXRlVGltZVNwbGl0fERhdGVUb0RheU9mV2Vla3xEYXRlVG9EYXlPZldlZWtJU098RGF0ZVRvRGF5VmFsdWV8RGF0ZVRvTW9udGh8RGF5VmFsdWVUb0RhdGV8RGVidWdCdWdSZXBvcnRFbnZ8RGVidWdPdXR8RGVidWdTZXR1cHxEZWdyZWV8RXZlbnRMb2dfX0JhY2t1cHxFdmVudExvZ19fQ2xlYXJ8RXZlbnRMb2dfX0Nsb3NlfEV2ZW50TG9nX19Db3VudHxFdmVudExvZ19fRGVyZWdpc3RlclNvdXJjZXxFdmVudExvZ19fRnVsbHxFdmVudExvZ19fTm90aWZ5fEV2ZW50TG9nX19PbGRlc3R8RXZlbnRMb2dfX09wZW58RXZlbnRMb2dfX09wZW5CYWNrdXB8RXZlbnRMb2dfX1JlYWR8RXZlbnRMb2dfX1JlZ2lzdGVyU291cmNlfEV2ZW50TG9nX19SZXBvcnR8RmlsZUNvdW50TGluZXN8RmlsZUNyZWF0ZXxGaWxlTGlzdFRvQXJyYXl8RmlsZVByaW50fEZpbGVSZWFkVG9BcnJheXxGaWxlV3JpdGVGcm9tQXJyYXl8RmlsZVdyaXRlTG9nfEZpbGVXcml0ZVRvTGluZXxHRElQbHVzX0Fycm93Q2FwQ3JlYXRlfEdESVBsdXNfQXJyb3dDYXBEaXNwb3NlfEdESVBsdXNfQXJyb3dDYXBHZXRGaWxsU3RhdGV8R0RJUGx1c19BcnJvd0NhcEdldEhlaWdodHxHRElQbHVzX0Fycm93Q2FwR2V0TWlkZGxlSW5zZXR8R0RJUGx1c19BcnJvd0NhcEdldFdpZHRofEdESVBsdXNfQXJyb3dDYXBTZXRGaWxsU3RhdGV8R0RJUGx1c19BcnJvd0NhcFNldEhlaWdodHxHRElQbHVzX0Fycm93Q2FwU2V0TWlkZGxlSW5zZXR8R0RJUGx1c19BcnJvd0NhcFNldFdpZHRofEdESVBsdXNfQml0bWFwQ2xvbmVBcmVhfEdESVBsdXNfQml0bWFwQ3JlYXRlRnJvbUZpbGV8R0RJUGx1c19CaXRtYXBDcmVhdGVGcm9tR3JhcGhpY3N8R0RJUGx1c19CaXRtYXBDcmVhdGVGcm9tSEJJVE1BUHxHRElQbHVzX0JpdG1hcENyZWF0ZUhCSVRNQVBGcm9tQml0bWFwfEdESVBsdXNfQml0bWFwRGlzcG9zZXxHRElQbHVzX0JpdG1hcExvY2tCaXRzfEdESVBsdXNfQml0bWFwVW5sb2NrQml0c3xHRElQbHVzX0JydXNoQ2xvbmV8R0RJUGx1c19CcnVzaENyZWF0ZVNvbGlkfEdESVBsdXNfQnJ1c2hEaXNwb3NlfEdESVBsdXNfQnJ1c2hHZXRUeXBlfEdESVBsdXNfQ3VzdG9tTGluZUNhcERpc3Bvc2V8R0RJUGx1c19EZWNvZGVyc3xHRElQbHVzX0RlY29kZXJzR2V0Q291bnR8R0RJUGx1c19EZWNvZGVyc0dldFNpemV8R0RJUGx1c19FbmNvZGVyc3xHRElQbHVzX0VuY29kZXJzR2V0Q0xTSUR8R0RJUGx1c19FbmNvZGVyc0dldENvdW50fEdESVBsdXNfRW5jb2RlcnNHZXRQYXJhbUxpc3R8R0RJUGx1c19FbmNvZGVyc0dldFBhcmFtTGlzdFNpemV8R0RJUGx1c19FbmNvZGVyc0dldFNpemV8R0RJUGx1c19Gb250Q3JlYXRlfEdESVBsdXNfRm9udERpc3Bvc2V8R0RJUGx1c19Gb250RmFtaWx5Q3JlYXRlfEdESVBsdXNfRm9udEZhbWlseURpc3Bvc2V8R0RJUGx1c19HcmFwaGljc0NsZWFyfEdESVBsdXNfR3JhcGhpY3NDcmVhdGVGcm9tSERDfEdESVBsdXNfR3JhcGhpY3NDcmVhdGVGcm9tSFdORHxHRElQbHVzX0dyYXBoaWNzRGlzcG9zZXxHRElQbHVzX0dyYXBoaWNzRHJhd0FyY3xHRElQbHVzX0dyYXBoaWNzRHJhd0JlemllcnxHRElQbHVzX0dyYXBoaWNzRHJhd0Nsb3NlZEN1cnZlfEdESVBsdXNfR3JhcGhpY3NEcmF3Q3VydmV8R0RJUGx1c19HcmFwaGljc0RyYXdFbGxpcHNlfEdESVBsdXNfR3JhcGhpY3NEcmF3SW1hZ2V8R0RJUGx1c19HcmFwaGljc0RyYXdJbWFnZVJlY3R8R0RJUGx1c19HcmFwaGljc0RyYXdJbWFnZVJlY3RSZWN0fEdESVBsdXNfR3JhcGhpY3NEcmF3TGluZXxHRElQbHVzX0dyYXBoaWNzRHJhd1BpZXxHRElQbHVzX0dyYXBoaWNzRHJhd1BvbHlnb258R0RJUGx1c19HcmFwaGljc0RyYXdSZWN0fEdESVBsdXNfR3JhcGhpY3NEcmF3U3RyaW5nfEdESVBsdXNfR3JhcGhpY3NEcmF3U3RyaW5nRXh8R0RJUGx1c19HcmFwaGljc0ZpbGxDbG9zZWRDdXJ2ZXxHRElQbHVzX0dyYXBoaWNzRmlsbEVsbGlwc2V8R0RJUGx1c19HcmFwaGljc0ZpbGxQaWV8R0RJUGx1c19HcmFwaGljc0ZpbGxSZWN0fEdESVBsdXNfR3JhcGhpY3NHZXREQ3xHRElQbHVzX0dyYXBoaWNzR2V0U21vb3RoaW5nTW9kZXxHRElQbHVzX0dyYXBoaWNzTWVhc3VyZVN0cmluZ3xHRElQbHVzX0dyYXBoaWNzUmVsZWFzZURDfEdESVBsdXNfR3JhcGhpY3NTZXRTbW9vdGhpbmdNb2RlfEdESVBsdXNfR3JhcGhpY3NTZXRUcmFuc2Zvcm18R0RJUGx1c19JbWFnZURpc3Bvc2V8R0RJUGx1c19JbWFnZUdldEdyYXBoaWNzQ29udGV4dHxHRElQbHVzX0ltYWdlR2V0SGVpZ2h0fEdESVBsdXNfSW1hZ2VHZXRXaWR0aHxHRElQbHVzX0ltYWdlTG9hZEZyb21GaWxlfEdESVBsdXNfSW1hZ2VTYXZlVG9GaWxlfEdESVBsdXNfSW1hZ2VTYXZlVG9GaWxlRXh8R0RJUGx1c19NYXRyaXhDcmVhdGV8R0RJUGx1c19NYXRyaXhEaXNwb3NlfEdESVBsdXNfTWF0cml4Um90YXRlfEdESVBsdXNfUGFyYW1BZGR8R0RJUGx1c19QYXJhbUluaXR8R0RJUGx1c19QZW5DcmVhdGV8R0RJUGx1c19QZW5EaXNwb3NlfEdESVBsdXNfUGVuR2V0QWxpZ25tZW50fEdESVBsdXNfUGVuR2V0Q29sb3J8R0RJUGx1c19QZW5HZXRDdXN0b21FbmRDYXB8R0RJUGx1c19QZW5HZXREYXNoQ2FwfEdESVBsdXNfUGVuR2V0RGFzaFN0eWxlfEdESVBsdXNfUGVuR2V0RW5kQ2FwfEdESVBsdXNfUGVuR2V0V2lkdGh8R0RJUGx1c19QZW5TZXRBbGlnbm1lbnR8R0RJUGx1c19QZW5TZXRDb2xvcnxHRElQbHVzX1BlblNldEN1c3RvbUVuZENhcHxHRElQbHVzX1BlblNldERhc2hDYXB8R0RJUGx1c19QZW5TZXREYXNoU3R5bGV8R0RJUGx1c19QZW5TZXRFbmRDYXB8R0RJUGx1c19QZW5TZXRXaWR0aHxHRElQbHVzX1JlY3RGQ3JlYXRlfEdESVBsdXNfU2h1dGRvd258R0RJUGx1c19TdGFydHVwfEdESVBsdXNfU3RyaW5nRm9ybWF0Q3JlYXRlfEdESVBsdXNfU3RyaW5nRm9ybWF0RGlzcG9zZXxHZXRJUHxHVUlDdHJsQVZJX0Nsb3NlfEdVSUN0cmxBVklfQ3JlYXRlfEdVSUN0cmxBVklfRGVzdHJveXxHVUlDdHJsQVZJX09wZW58R1VJQ3RybEFWSV9PcGVuRXh8R1VJQ3RybEFWSV9QbGF5fEdVSUN0cmxBVklfU2Vla3xHVUlDdHJsQVZJX1Nob3d8R1VJQ3RybEFWSV9TdG9wfEdVSUN0cmxCdXR0b25fQ2xpY2t8R1VJQ3RybEJ1dHRvbl9DcmVhdGV8R1VJQ3RybEJ1dHRvbl9EZXN0cm95fEdVSUN0cmxCdXR0b25fRW5hYmxlfEdVSUN0cmxCdXR0b25fR2V0Q2hlY2t8R1VJQ3RybEJ1dHRvbl9HZXRGb2N1c3xHVUlDdHJsQnV0dG9uX0dldElkZWFsU2l6ZXxHVUlDdHJsQnV0dG9uX0dldEltYWdlfEdVSUN0cmxCdXR0b25fR2V0SW1hZ2VMaXN0fEdVSUN0cmxCdXR0b25fR2V0U3RhdGV8R1VJQ3RybEJ1dHRvbl9HZXRUZXh0fEdVSUN0cmxCdXR0b25fR2V0VGV4dE1hcmdpbnxHVUlDdHJsQnV0dG9uX1NldENoZWNrfEdVSUN0cmxCdXR0b25fU2V0Rm9jdXN8R1VJQ3RybEJ1dHRvbl9TZXRJbWFnZXxHVUlDdHJsQnV0dG9uX1NldEltYWdlTGlzdHxHVUlDdHJsQnV0dG9uX1NldFNpemV8R1VJQ3RybEJ1dHRvbl9TZXRTdGF0ZXxHVUlDdHJsQnV0dG9uX1NldFN0eWxlfEdVSUN0cmxCdXR0b25fU2V0VGV4dHxHVUlDdHJsQnV0dG9uX1NldFRleHRNYXJnaW58R1VJQ3RybEJ1dHRvbl9TaG93fEdVSUN0cmxDb21ib0JveF9BZGREaXJ8R1VJQ3RybENvbWJvQm94X0FkZFN0cmluZ3xHVUlDdHJsQ29tYm9Cb3hfQXV0b0NvbXBsZXRlfEdVSUN0cmxDb21ib0JveF9CZWdpblVwZGF0ZXxHVUlDdHJsQ29tYm9Cb3hfQ3JlYXRlfEdVSUN0cmxDb21ib0JveF9EZWxldGVTdHJpbmd8R1VJQ3RybENvbWJvQm94X0Rlc3Ryb3l8R1VJQ3RybENvbWJvQm94X0VuZFVwZGF0ZXxHVUlDdHJsQ29tYm9Cb3hfRmluZFN0cmluZ3xHVUlDdHJsQ29tYm9Cb3hfRmluZFN0cmluZ0V4YWN0fEdVSUN0cmxDb21ib0JveF9HZXRDb21ib0JveEluZm98R1VJQ3RybENvbWJvQm94X0dldENvdW50fEdVSUN0cmxDb21ib0JveF9HZXRDdXJTZWx8R1VJQ3RybENvbWJvQm94X0dldERyb3BwZWRDb250cm9sUmVjdHxHVUlDdHJsQ29tYm9Cb3hfR2V0RHJvcHBlZENvbnRyb2xSZWN0RXh8R1VJQ3RybENvbWJvQm94X0dldERyb3BwZWRTdGF0ZXxHVUlDdHJsQ29tYm9Cb3hfR2V0RHJvcHBlZFdpZHRofEdVSUN0cmxDb21ib0JveF9HZXRFZGl0U2VsfEdVSUN0cmxDb21ib0JveF9HZXRFZGl0VGV4dHxHVUlDdHJsQ29tYm9Cb3hfR2V0RXh0ZW5kZWRVSXxHVUlDdHJsQ29tYm9Cb3hfR2V0SG9yaXpvbnRhbEV4dGVudHxHVUlDdHJsQ29tYm9Cb3hfR2V0SXRlbUhlaWdodHxHVUlDdHJsQ29tYm9Cb3hfR2V0TEJUZXh0fEdVSUN0cmxDb21ib0JveF9HZXRMQlRleHRMZW58R1VJQ3RybENvbWJvQm94X0dldExpc3R8R1VJQ3RybENvbWJvQm94X0dldExpc3RBcnJheXxHVUlDdHJsQ29tYm9Cb3hfR2V0TG9jYWxlfEdVSUN0cmxDb21ib0JveF9HZXRMb2NhbGVDb3VudHJ5fEdVSUN0cmxDb21ib0JveF9HZXRMb2NhbGVMYW5nfEdVSUN0cmxDb21ib0JveF9HZXRMb2NhbGVQcmltTGFuZ3xHVUlDdHJsQ29tYm9Cb3hfR2V0TG9jYWxlU3ViTGFuZ3xHVUlDdHJsQ29tYm9Cb3hfR2V0TWluVmlzaWJsZXxHVUlDdHJsQ29tYm9Cb3hfR2V0VG9wSW5kZXh8R1VJQ3RybENvbWJvQm94X0luaXRTdG9yYWdlfEdVSUN0cmxDb21ib0JveF9JbnNlcnRTdHJpbmd8R1VJQ3RybENvbWJvQm94X0xpbWl0VGV4dHxHVUlDdHJsQ29tYm9Cb3hfUmVwbGFjZUVkaXRTZWx8R1VJQ3RybENvbWJvQm94X1Jlc2V0Q29udGVudHxHVUlDdHJsQ29tYm9Cb3hfU2VsZWN0U3RyaW5nfEdVSUN0cmxDb21ib0JveF9TZXRDdXJTZWx8R1VJQ3RybENvbWJvQm94X1NldERyb3BwZWRXaWR0aHxHVUlDdHJsQ29tYm9Cb3hfU2V0RWRpdFNlbHxHVUlDdHJsQ29tYm9Cb3hfU2V0RWRpdFRleHR8R1VJQ3RybENvbWJvQm94X1NldEV4dGVuZGVkVUl8R1VJQ3RybENvbWJvQm94X1NldEhvcml6b250YWxFeHRlbnR8R1VJQ3RybENvbWJvQm94X1NldEl0ZW1IZWlnaHR8R1VJQ3RybENvbWJvQm94X1NldE1pblZpc2libGV8R1VJQ3RybENvbWJvQm94X1NldFRvcEluZGV4fEdVSUN0cmxDb21ib0JveF9TaG93RHJvcERvd258R1VJQ3RybENvbWJvQm94RXhfQWRkRGlyfEdVSUN0cmxDb21ib0JveEV4X0FkZFN0cmluZ3xHVUlDdHJsQ29tYm9Cb3hFeF9CZWdpblVwZGF0ZXxHVUlDdHJsQ29tYm9Cb3hFeF9DcmVhdGV8R1VJQ3RybENvbWJvQm94RXhfQ3JlYXRlU29saWRCaXRNYXB8R1VJQ3RybENvbWJvQm94RXhfRGVsZXRlU3RyaW5nfEdVSUN0cmxDb21ib0JveEV4X0Rlc3Ryb3l8R1VJQ3RybENvbWJvQm94RXhfRW5kVXBkYXRlfEdVSUN0cmxDb21ib0JveEV4X0ZpbmRTdHJpbmdFeGFjdHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRDb21ib0JveEluZm98R1VJQ3RybENvbWJvQm94RXhfR2V0Q29tYm9Db250cm9sfEdVSUN0cmxDb21ib0JveEV4X0dldENvdW50fEdVSUN0cmxDb21ib0JveEV4X0dldEN1clNlbHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXREcm9wcGVkQ29udHJvbFJlY3R8R1VJQ3RybENvbWJvQm94RXhfR2V0RHJvcHBlZENvbnRyb2xSZWN0RXh8R1VJQ3RybENvbWJvQm94RXhfR2V0RHJvcHBlZFN0YXRlfEdVSUN0cmxDb21ib0JveEV4X0dldERyb3BwZWRXaWR0aHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRFZGl0Q29udHJvbHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRFZGl0U2VsfEdVSUN0cmxDb21ib0JveEV4X0dldEVkaXRUZXh0fEdVSUN0cmxDb21ib0JveEV4X0dldEV4dGVuZGVkU3R5bGV8R1VJQ3RybENvbWJvQm94RXhfR2V0RXh0ZW5kZWRVSXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJbWFnZUxpc3R8R1VJQ3RybENvbWJvQm94RXhfR2V0SXRlbXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJdGVtRXh8R1VJQ3RybENvbWJvQm94RXhfR2V0SXRlbUhlaWdodHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJdGVtSW1hZ2V8R1VJQ3RybENvbWJvQm94RXhfR2V0SXRlbUluZGVudHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJdGVtT3ZlcmxheUltYWdlfEdVSUN0cmxDb21ib0JveEV4X0dldEl0ZW1QYXJhbXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJdGVtU2VsZWN0ZWRJbWFnZXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJdGVtVGV4dHxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRJdGVtVGV4dExlbnxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRMaXN0fEdVSUN0cmxDb21ib0JveEV4X0dldExpc3RBcnJheXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRMb2NhbGV8R1VJQ3RybENvbWJvQm94RXhfR2V0TG9jYWxlQ291bnRyeXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRMb2NhbGVMYW5nfEdVSUN0cmxDb21ib0JveEV4X0dldExvY2FsZVByaW1MYW5nfEdVSUN0cmxDb21ib0JveEV4X0dldExvY2FsZVN1Ykxhbmd8R1VJQ3RybENvbWJvQm94RXhfR2V0TWluVmlzaWJsZXxHVUlDdHJsQ29tYm9Cb3hFeF9HZXRUb3BJbmRleHxHVUlDdHJsQ29tYm9Cb3hFeF9Jbml0U3RvcmFnZXxHVUlDdHJsQ29tYm9Cb3hFeF9JbnNlcnRTdHJpbmd8R1VJQ3RybENvbWJvQm94RXhfTGltaXRUZXh0fEdVSUN0cmxDb21ib0JveEV4X1JlcGxhY2VFZGl0U2VsfEdVSUN0cmxDb21ib0JveEV4X1Jlc2V0Q29udGVudHxHVUlDdHJsQ29tYm9Cb3hFeF9TZXRDdXJTZWx8R1VJQ3RybENvbWJvQm94RXhfU2V0RHJvcHBlZFdpZHRofEdVSUN0cmxDb21ib0JveEV4X1NldEVkaXRTZWx8R1VJQ3RybENvbWJvQm94RXhfU2V0RWRpdFRleHR8R1VJQ3RybENvbWJvQm94RXhfU2V0RXh0ZW5kZWRTdHlsZXxHVUlDdHJsQ29tYm9Cb3hFeF9TZXRFeHRlbmRlZFVJfEdVSUN0cmxDb21ib0JveEV4X1NldEltYWdlTGlzdHxHVUlDdHJsQ29tYm9Cb3hFeF9TZXRJdGVtfEdVSUN0cmxDb21ib0JveEV4X1NldEl0ZW1FeHxHVUlDdHJsQ29tYm9Cb3hFeF9TZXRJdGVtSGVpZ2h0fEdVSUN0cmxDb21ib0JveEV4X1NldEl0ZW1JbWFnZXxHVUlDdHJsQ29tYm9Cb3hFeF9TZXRJdGVtSW5kZW50fEdVSUN0cmxDb21ib0JveEV4X1NldEl0ZW1PdmVybGF5SW1hZ2V8R1VJQ3RybENvbWJvQm94RXhfU2V0SXRlbVBhcmFtfEdVSUN0cmxDb21ib0JveEV4X1NldEl0ZW1TZWxlY3RlZEltYWdlfEdVSUN0cmxDb21ib0JveEV4X1NldE1pblZpc2libGV8R1VJQ3RybENvbWJvQm94RXhfU2V0VG9wSW5kZXh8R1VJQ3RybENvbWJvQm94RXhfU2hvd0Ryb3BEb3dufEdVSUN0cmxEVFBfQ3JlYXRlfEdVSUN0cmxEVFBfRGVzdHJveXxHVUlDdHJsRFRQX0dldE1DQ29sb3J8R1VJQ3RybERUUF9HZXRNQ0ZvbnR8R1VJQ3RybERUUF9HZXRNb250aENhbHxHVUlDdHJsRFRQX0dldFJhbmdlfEdVSUN0cmxEVFBfR2V0UmFuZ2VFeHxHVUlDdHJsRFRQX0dldFN5c3RlbVRpbWV8R1VJQ3RybERUUF9HZXRTeXN0ZW1UaW1lRXh8R1VJQ3RybERUUF9TZXRGb3JtYXR8R1VJQ3RybERUUF9TZXRNQ0NvbG9yfEdVSUN0cmxEVFBfU2V0TUNGb250fEdVSUN0cmxEVFBfU2V0UmFuZ2V8R1VJQ3RybERUUF9TZXRSYW5nZUV4fEdVSUN0cmxEVFBfU2V0U3lzdGVtVGltZXxHVUlDdHJsRFRQX1NldFN5c3RlbVRpbWVFeHxHVUlDdHJsRWRpdF9BcHBlbmRUZXh0fEdVSUN0cmxFZGl0X0JlZ2luVXBkYXRlfEdVSUN0cmxFZGl0X0NhblVuZG98R1VJQ3RybEVkaXRfQ2hhckZyb21Qb3N8R1VJQ3RybEVkaXRfQ3JlYXRlfEdVSUN0cmxFZGl0X0Rlc3Ryb3l8R1VJQ3RybEVkaXRfRW1wdHlVbmRvQnVmZmVyfEdVSUN0cmxFZGl0X0VuZFVwZGF0ZXxHVUlDdHJsRWRpdF9GaW5kfEdVSUN0cmxFZGl0X0ZtdExpbmVzfEdVSUN0cmxFZGl0X0dldEZpcnN0VmlzaWJsZUxpbmV8R1VJQ3RybEVkaXRfR2V0TGltaXRUZXh0fEdVSUN0cmxFZGl0X0dldExpbmV8R1VJQ3RybEVkaXRfR2V0TGluZUNvdW50fEdVSUN0cmxFZGl0X0dldE1hcmdpbnN8R1VJQ3RybEVkaXRfR2V0TW9kaWZ5fEdVSUN0cmxFZGl0X0dldFBhc3N3b3JkQ2hhcnxHVUlDdHJsRWRpdF9HZXRSRUNUfEdVSUN0cmxFZGl0X0dldFJFQ1RFeHxHVUlDdHJsRWRpdF9HZXRTZWx8R1VJQ3RybEVkaXRfR2V0VGV4dHxHVUlDdHJsRWRpdF9HZXRUZXh0TGVufEdVSUN0cmxFZGl0X0hpZGVCYWxsb29uVGlwfEdVSUN0cmxFZGl0X0luc2VydFRleHR8R1VJQ3RybEVkaXRfTGluZUZyb21DaGFyfEdVSUN0cmxFZGl0X0xpbmVJbmRleHxHVUlDdHJsRWRpdF9MaW5lTGVuZ3RofEdVSUN0cmxFZGl0X0xpbmVTY3JvbGx8R1VJQ3RybEVkaXRfUG9zRnJvbUNoYXJ8R1VJQ3RybEVkaXRfUmVwbGFjZVNlbHxHVUlDdHJsRWRpdF9TY3JvbGx8R1VJQ3RybEVkaXRfU2V0TGltaXRUZXh0fEdVSUN0cmxFZGl0X1NldE1hcmdpbnN8R1VJQ3RybEVkaXRfU2V0TW9kaWZ5fEdVSUN0cmxFZGl0X1NldFBhc3N3b3JkQ2hhcnxHVUlDdHJsRWRpdF9TZXRSZWFkT25seXxHVUlDdHJsRWRpdF9TZXRSRUNUfEdVSUN0cmxFZGl0X1NldFJFQ1RFeHxHVUlDdHJsRWRpdF9TZXRSRUNUTlB8R1VJQ3RybEVkaXRfU2V0UmVjdE5QRXh8R1VJQ3RybEVkaXRfU2V0U2VsfEdVSUN0cmxFZGl0X1NldFRhYlN0b3BzfEdVSUN0cmxFZGl0X1NldFRleHR8R1VJQ3RybEVkaXRfU2hvd0JhbGxvb25UaXB8R1VJQ3RybEVkaXRfVW5kb3xHVUlDdHJsSGVhZGVyX0FkZEl0ZW18R1VJQ3RybEhlYWRlcl9DbGVhckZpbHRlcnxHVUlDdHJsSGVhZGVyX0NsZWFyRmlsdGVyQWxsfEdVSUN0cmxIZWFkZXJfQ3JlYXRlfEdVSUN0cmxIZWFkZXJfQ3JlYXRlRHJhZ0ltYWdlfEdVSUN0cmxIZWFkZXJfRGVsZXRlSXRlbXxHVUlDdHJsSGVhZGVyX0Rlc3Ryb3l8R1VJQ3RybEhlYWRlcl9FZGl0RmlsdGVyfEdVSUN0cmxIZWFkZXJfR2V0Qml0bWFwTWFyZ2lufEdVSUN0cmxIZWFkZXJfR2V0SW1hZ2VMaXN0fEdVSUN0cmxIZWFkZXJfR2V0SXRlbXxHVUlDdHJsSGVhZGVyX0dldEl0ZW1BbGlnbnxHVUlDdHJsSGVhZGVyX0dldEl0ZW1CaXRtYXB8R1VJQ3RybEhlYWRlcl9HZXRJdGVtQ291bnR8R1VJQ3RybEhlYWRlcl9HZXRJdGVtRGlzcGxheXxHVUlDdHJsSGVhZGVyX0dldEl0ZW1GbGFnc3xHVUlDdHJsSGVhZGVyX0dldEl0ZW1Gb3JtYXR8R1VJQ3RybEhlYWRlcl9HZXRJdGVtSW1hZ2V8R1VJQ3RybEhlYWRlcl9HZXRJdGVtT3JkZXJ8R1VJQ3RybEhlYWRlcl9HZXRJdGVtUGFyYW18R1VJQ3RybEhlYWRlcl9HZXRJdGVtUmVjdHxHVUlDdHJsSGVhZGVyX0dldEl0ZW1SZWN0RXh8R1VJQ3RybEhlYWRlcl9HZXRJdGVtVGV4dHxHVUlDdHJsSGVhZGVyX0dldEl0ZW1XaWR0aHxHVUlDdHJsSGVhZGVyX0dldE9yZGVyQXJyYXl8R1VJQ3RybEhlYWRlcl9HZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxIZWFkZXJfSGl0VGVzdHxHVUlDdHJsSGVhZGVyX0luc2VydEl0ZW18R1VJQ3RybEhlYWRlcl9MYXlvdXR8R1VJQ3RybEhlYWRlcl9PcmRlclRvSW5kZXh8R1VJQ3RybEhlYWRlcl9TZXRCaXRtYXBNYXJnaW58R1VJQ3RybEhlYWRlcl9TZXRGaWx0ZXJDaGFuZ2VUaW1lb3V0fEdVSUN0cmxIZWFkZXJfU2V0SG90RGl2aWRlcnxHVUlDdHJsSGVhZGVyX1NldEltYWdlTGlzdHxHVUlDdHJsSGVhZGVyX1NldEl0ZW18R1VJQ3RybEhlYWRlcl9TZXRJdGVtQWxpZ258R1VJQ3RybEhlYWRlcl9TZXRJdGVtQml0bWFwfEdVSUN0cmxIZWFkZXJfU2V0SXRlbURpc3BsYXl8R1VJQ3RybEhlYWRlcl9TZXRJdGVtRmxhZ3N8R1VJQ3RybEhlYWRlcl9TZXRJdGVtRm9ybWF0fEdVSUN0cmxIZWFkZXJfU2V0SXRlbUltYWdlfEdVSUN0cmxIZWFkZXJfU2V0SXRlbU9yZGVyfEdVSUN0cmxIZWFkZXJfU2V0SXRlbVBhcmFtfEdVSUN0cmxIZWFkZXJfU2V0SXRlbVRleHR8R1VJQ3RybEhlYWRlcl9TZXRJdGVtV2lkdGh8R1VJQ3RybEhlYWRlcl9TZXRPcmRlckFycmF5fEdVSUN0cmxIZWFkZXJfU2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsSXBBZGRyZXNzX0NsZWFyQWRkcmVzc3xHVUlDdHJsSXBBZGRyZXNzX0NyZWF0ZXxHVUlDdHJsSXBBZGRyZXNzX0Rlc3Ryb3l8R1VJQ3RybElwQWRkcmVzc19HZXR8R1VJQ3RybElwQWRkcmVzc19HZXRBcnJheXxHVUlDdHJsSXBBZGRyZXNzX0dldEV4fEdVSUN0cmxJcEFkZHJlc3NfSXNCbGFua3xHVUlDdHJsSXBBZGRyZXNzX1NldHxHVUlDdHJsSXBBZGRyZXNzX1NldEFycmF5fEdVSUN0cmxJcEFkZHJlc3NfU2V0RXh8R1VJQ3RybElwQWRkcmVzc19TZXRGb2N1c3xHVUlDdHJsSXBBZGRyZXNzX1NldEZvbnR8R1VJQ3RybElwQWRkcmVzc19TZXRSYW5nZXxHVUlDdHJsSXBBZGRyZXNzX1Nob3dIaWRlfEdVSUN0cmxMaXN0Qm94X0FkZEZpbGV8R1VJQ3RybExpc3RCb3hfQWRkU3RyaW5nfEdVSUN0cmxMaXN0Qm94X0JlZ2luVXBkYXRlfEdVSUN0cmxMaXN0Qm94X0NyZWF0ZXxHVUlDdHJsTGlzdEJveF9EZWxldGVTdHJpbmd8R1VJQ3RybExpc3RCb3hfRGVzdHJveXxHVUlDdHJsTGlzdEJveF9EaXJ8R1VJQ3RybExpc3RCb3hfRW5kVXBkYXRlfEdVSUN0cmxMaXN0Qm94X0ZpbmRJblRleHR8R1VJQ3RybExpc3RCb3hfRmluZFN0cmluZ3xHVUlDdHJsTGlzdEJveF9HZXRBbmNob3JJbmRleHxHVUlDdHJsTGlzdEJveF9HZXRDYXJldEluZGV4fEdVSUN0cmxMaXN0Qm94X0dldENvdW50fEdVSUN0cmxMaXN0Qm94X0dldEN1clNlbHxHVUlDdHJsTGlzdEJveF9HZXRIb3Jpem9udGFsRXh0ZW50fEdVSUN0cmxMaXN0Qm94X0dldEl0ZW1EYXRhfEdVSUN0cmxMaXN0Qm94X0dldEl0ZW1IZWlnaHR8R1VJQ3RybExpc3RCb3hfR2V0SXRlbVJlY3R8R1VJQ3RybExpc3RCb3hfR2V0SXRlbVJlY3RFeHxHVUlDdHJsTGlzdEJveF9HZXRMaXN0Qm94SW5mb3xHVUlDdHJsTGlzdEJveF9HZXRMb2NhbGV8R1VJQ3RybExpc3RCb3hfR2V0TG9jYWxlQ291bnRyeXxHVUlDdHJsTGlzdEJveF9HZXRMb2NhbGVMYW5nfEdVSUN0cmxMaXN0Qm94X0dldExvY2FsZVByaW1MYW5nfEdVSUN0cmxMaXN0Qm94X0dldExvY2FsZVN1Ykxhbmd8R1VJQ3RybExpc3RCb3hfR2V0U2VsfEdVSUN0cmxMaXN0Qm94X0dldFNlbENvdW50fEdVSUN0cmxMaXN0Qm94X0dldFNlbEl0ZW1zfEdVSUN0cmxMaXN0Qm94X0dldFNlbEl0ZW1zVGV4dHxHVUlDdHJsTGlzdEJveF9HZXRUZXh0fEdVSUN0cmxMaXN0Qm94X0dldFRleHRMZW58R1VJQ3RybExpc3RCb3hfR2V0VG9wSW5kZXh8R1VJQ3RybExpc3RCb3hfSW5pdFN0b3JhZ2V8R1VJQ3RybExpc3RCb3hfSW5zZXJ0U3RyaW5nfEdVSUN0cmxMaXN0Qm94X0l0ZW1Gcm9tUG9pbnR8R1VJQ3RybExpc3RCb3hfUmVwbGFjZVN0cmluZ3xHVUlDdHJsTGlzdEJveF9SZXNldENvbnRlbnR8R1VJQ3RybExpc3RCb3hfU2VsZWN0U3RyaW5nfEdVSUN0cmxMaXN0Qm94X1NlbEl0ZW1SYW5nZXxHVUlDdHJsTGlzdEJveF9TZWxJdGVtUmFuZ2VFeHxHVUlDdHJsTGlzdEJveF9TZXRBbmNob3JJbmRleHxHVUlDdHJsTGlzdEJveF9TZXRDYXJldEluZGV4fEdVSUN0cmxMaXN0Qm94X1NldENvbHVtbldpZHRofEdVSUN0cmxMaXN0Qm94X1NldEN1clNlbHxHVUlDdHJsTGlzdEJveF9TZXRIb3Jpem9udGFsRXh0ZW50fEdVSUN0cmxMaXN0Qm94X1NldEl0ZW1EYXRhfEdVSUN0cmxMaXN0Qm94X1NldEl0ZW1IZWlnaHR8R1VJQ3RybExpc3RCb3hfU2V0TG9jYWxlfEdVSUN0cmxMaXN0Qm94X1NldFNlbHxHVUlDdHJsTGlzdEJveF9TZXRUYWJTdG9wc3xHVUlDdHJsTGlzdEJveF9TZXRUb3BJbmRleHxHVUlDdHJsTGlzdEJveF9Tb3J0fEdVSUN0cmxMaXN0Qm94X1N3YXBTdHJpbmd8R1VJQ3RybExpc3RCb3hfVXBkYXRlSFNjcm9sbHxHVUlDdHJsTGlzdFZpZXdfQWRkQXJyYXl8R1VJQ3RybExpc3RWaWV3X0FkZENvbHVtbnxHVUlDdHJsTGlzdFZpZXdfQWRkSXRlbXxHVUlDdHJsTGlzdFZpZXdfQWRkU3ViSXRlbXxHVUlDdHJsTGlzdFZpZXdfQXBwcm94aW1hdGVWaWV3SGVpZ2h0fEdVSUN0cmxMaXN0Vmlld19BcHByb3hpbWF0ZVZpZXdSZWN0fEdVSUN0cmxMaXN0Vmlld19BcHByb3hpbWF0ZVZpZXdXaWR0aHxHVUlDdHJsTGlzdFZpZXdfQXJyYW5nZXxHVUlDdHJsTGlzdFZpZXdfQmVnaW5VcGRhdGV8R1VJQ3RybExpc3RWaWV3X0NhbmNlbEVkaXRMYWJlbHxHVUlDdHJsTGlzdFZpZXdfQ2xpY2tJdGVtfEdVSUN0cmxMaXN0Vmlld19Db3B5SXRlbXN8R1VJQ3RybExpc3RWaWV3X0NyZWF0ZXxHVUlDdHJsTGlzdFZpZXdfQ3JlYXRlRHJhZ0ltYWdlfEdVSUN0cmxMaXN0Vmlld19DcmVhdGVTb2xpZEJpdE1hcHxHVUlDdHJsTGlzdFZpZXdfRGVsZXRlQWxsSXRlbXN8R1VJQ3RybExpc3RWaWV3X0RlbGV0ZUNvbHVtbnxHVUlDdHJsTGlzdFZpZXdfRGVsZXRlSXRlbXxHVUlDdHJsTGlzdFZpZXdfRGVsZXRlSXRlbXNTZWxlY3RlZHxHVUlDdHJsTGlzdFZpZXdfRGVzdHJveXxHVUlDdHJsTGlzdFZpZXdfRHJhd0RyYWdJbWFnZXxHVUlDdHJsTGlzdFZpZXdfRWRpdExhYmVsfEdVSUN0cmxMaXN0Vmlld19FbmFibGVHcm91cFZpZXd8R1VJQ3RybExpc3RWaWV3X0VuZFVwZGF0ZXxHVUlDdHJsTGlzdFZpZXdfRW5zdXJlVmlzaWJsZXxHVUlDdHJsTGlzdFZpZXdfRmluZEluVGV4dHxHVUlDdHJsTGlzdFZpZXdfRmluZEl0ZW18R1VJQ3RybExpc3RWaWV3X0ZpbmROZWFyZXN0fEdVSUN0cmxMaXN0Vmlld19GaW5kUGFyYW18R1VJQ3RybExpc3RWaWV3X0ZpbmRUZXh0fEdVSUN0cmxMaXN0Vmlld19HZXRCa0NvbG9yfEdVSUN0cmxMaXN0Vmlld19HZXRCa0ltYWdlfEdVSUN0cmxMaXN0Vmlld19HZXRDYWxsYmFja01hc2t8R1VJQ3RybExpc3RWaWV3X0dldENvbHVtbnxHVUlDdHJsTGlzdFZpZXdfR2V0Q29sdW1uQ291bnR8R1VJQ3RybExpc3RWaWV3X0dldENvbHVtbk9yZGVyfEdVSUN0cmxMaXN0Vmlld19HZXRDb2x1bW5PcmRlckFycmF5fEdVSUN0cmxMaXN0Vmlld19HZXRDb2x1bW5XaWR0aHxHVUlDdHJsTGlzdFZpZXdfR2V0Q291bnRlclBhZ2V8R1VJQ3RybExpc3RWaWV3X0dldEVkaXRDb250cm9sfEdVSUN0cmxMaXN0Vmlld19HZXRFeHRlbmRlZExpc3RWaWV3U3R5bGV8R1VJQ3RybExpc3RWaWV3X0dldEdyb3VwSW5mb3xHVUlDdHJsTGlzdFZpZXdfR2V0R3JvdXBWaWV3RW5hYmxlZHxHVUlDdHJsTGlzdFZpZXdfR2V0SGVhZGVyfEdVSUN0cmxMaXN0Vmlld19HZXRIb3RDdXJzb3J8R1VJQ3RybExpc3RWaWV3X0dldEhvdEl0ZW18R1VJQ3RybExpc3RWaWV3X0dldEhvdmVyVGltZXxHVUlDdHJsTGlzdFZpZXdfR2V0SW1hZ2VMaXN0fEdVSUN0cmxMaXN0Vmlld19HZXRJU2VhcmNoU3RyaW5nfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtQ2hlY2tlZHxHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbUNvdW50fEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtQ3V0fEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtRHJvcEhpbGl0ZWR8R1VJQ3RybExpc3RWaWV3X0dldEl0ZW1FeHxHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbUZvY3VzZWR8R1VJQ3RybExpc3RWaWV3X0dldEl0ZW1Hcm91cElEfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtSW1hZ2V8R1VJQ3RybExpc3RWaWV3X0dldEl0ZW1JbmRlbnR8R1VJQ3RybExpc3RWaWV3X0dldEl0ZW1QYXJhbXxHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbVBvc2l0aW9ufEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtUG9zaXRpb25YfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtUG9zaXRpb25ZfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtUmVjdHxHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbVJlY3RFeHxHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbVNlbGVjdGVkfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtU3BhY2luZ3xHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbVNwYWNpbmdYfEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtU3BhY2luZ1l8R1VJQ3RybExpc3RWaWV3X0dldEl0ZW1TdGF0ZXxHVUlDdHJsTGlzdFZpZXdfR2V0SXRlbVN0YXRlSW1hZ2V8R1VJQ3RybExpc3RWaWV3X0dldEl0ZW1UZXh0fEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtVGV4dEFycmF5fEdVSUN0cmxMaXN0Vmlld19HZXRJdGVtVGV4dFN0cmluZ3xHVUlDdHJsTGlzdFZpZXdfR2V0TmV4dEl0ZW18R1VJQ3RybExpc3RWaWV3X0dldE51bWJlck9mV29ya0FyZWFzfEdVSUN0cmxMaXN0Vmlld19HZXRPcmlnaW58R1VJQ3RybExpc3RWaWV3X0dldE9yaWdpblh8R1VJQ3RybExpc3RWaWV3X0dldE9yaWdpbll8R1VJQ3RybExpc3RWaWV3X0dldE91dGxpbmVDb2xvcnxHVUlDdHJsTGlzdFZpZXdfR2V0U2VsZWN0ZWRDb2x1bW58R1VJQ3RybExpc3RWaWV3X0dldFNlbGVjdGVkQ291bnR8R1VJQ3RybExpc3RWaWV3X0dldFNlbGVjdGVkSW5kaWNlc3xHVUlDdHJsTGlzdFZpZXdfR2V0U2VsZWN0aW9uTWFya3xHVUlDdHJsTGlzdFZpZXdfR2V0U3RyaW5nV2lkdGh8R1VJQ3RybExpc3RWaWV3X0dldFN1Ykl0ZW1SZWN0fEdVSUN0cmxMaXN0Vmlld19HZXRUZXh0QmtDb2xvcnxHVUlDdHJsTGlzdFZpZXdfR2V0VGV4dENvbG9yfEdVSUN0cmxMaXN0Vmlld19HZXRUb29sVGlwc3xHVUlDdHJsTGlzdFZpZXdfR2V0VG9wSW5kZXh8R1VJQ3RybExpc3RWaWV3X0dldFVuaWNvZGVGb3JtYXR8R1VJQ3RybExpc3RWaWV3X0dldFZpZXd8R1VJQ3RybExpc3RWaWV3X0dldFZpZXdEZXRhaWxzfEdVSUN0cmxMaXN0Vmlld19HZXRWaWV3TGFyZ2V8R1VJQ3RybExpc3RWaWV3X0dldFZpZXdMaXN0fEdVSUN0cmxMaXN0Vmlld19HZXRWaWV3UmVjdHxHVUlDdHJsTGlzdFZpZXdfR2V0Vmlld1NtYWxsfEdVSUN0cmxMaXN0Vmlld19HZXRWaWV3VGlsZXxHVUlDdHJsTGlzdFZpZXdfSGlkZUNvbHVtbnxHVUlDdHJsTGlzdFZpZXdfSGl0VGVzdHxHVUlDdHJsTGlzdFZpZXdfSW5zZXJ0Q29sdW1ufEdVSUN0cmxMaXN0Vmlld19JbnNlcnRHcm91cHxHVUlDdHJsTGlzdFZpZXdfSW5zZXJ0SXRlbXxHVUlDdHJsTGlzdFZpZXdfSnVzdGlmeUNvbHVtbnxHVUlDdHJsTGlzdFZpZXdfTWFwSURUb0luZGV4fEdVSUN0cmxMaXN0Vmlld19NYXBJbmRleFRvSUR8R1VJQ3RybExpc3RWaWV3X1JlZHJhd0l0ZW1zfEdVSUN0cmxMaXN0Vmlld19SZWdpc3RlclNvcnRDYWxsQmFja3xHVUlDdHJsTGlzdFZpZXdfUmVtb3ZlQWxsR3JvdXBzfEdVSUN0cmxMaXN0Vmlld19SZW1vdmVHcm91cHxHVUlDdHJsTGlzdFZpZXdfU2Nyb2xsfEdVSUN0cmxMaXN0Vmlld19TZXRCa0NvbG9yfEdVSUN0cmxMaXN0Vmlld19TZXRCa0ltYWdlfEdVSUN0cmxMaXN0Vmlld19TZXRDYWxsQmFja01hc2t8R1VJQ3RybExpc3RWaWV3X1NldENvbHVtbnxHVUlDdHJsTGlzdFZpZXdfU2V0Q29sdW1uT3JkZXJ8R1VJQ3RybExpc3RWaWV3X1NldENvbHVtbk9yZGVyQXJyYXl8R1VJQ3RybExpc3RWaWV3X1NldENvbHVtbldpZHRofEdVSUN0cmxMaXN0Vmlld19TZXRFeHRlbmRlZExpc3RWaWV3U3R5bGV8R1VJQ3RybExpc3RWaWV3X1NldEdyb3VwSW5mb3xHVUlDdHJsTGlzdFZpZXdfU2V0SG90SXRlbXxHVUlDdHJsTGlzdFZpZXdfU2V0SG92ZXJUaW1lfEdVSUN0cmxMaXN0Vmlld19TZXRJY29uU3BhY2luZ3xHVUlDdHJsTGlzdFZpZXdfU2V0SW1hZ2VMaXN0fEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtfEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtQ2hlY2tlZHxHVUlDdHJsTGlzdFZpZXdfU2V0SXRlbUNvdW50fEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtQ3V0fEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtRHJvcEhpbGl0ZWR8R1VJQ3RybExpc3RWaWV3X1NldEl0ZW1FeHxHVUlDdHJsTGlzdFZpZXdfU2V0SXRlbUZvY3VzZWR8R1VJQ3RybExpc3RWaWV3X1NldEl0ZW1Hcm91cElEfEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtSW1hZ2V8R1VJQ3RybExpc3RWaWV3X1NldEl0ZW1JbmRlbnR8R1VJQ3RybExpc3RWaWV3X1NldEl0ZW1QYXJhbXxHVUlDdHJsTGlzdFZpZXdfU2V0SXRlbVBvc2l0aW9ufEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtUG9zaXRpb24zMnxHVUlDdHJsTGlzdFZpZXdfU2V0SXRlbVNlbGVjdGVkfEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtU3RhdGV8R1VJQ3RybExpc3RWaWV3X1NldEl0ZW1TdGF0ZUltYWdlfEdVSUN0cmxMaXN0Vmlld19TZXRJdGVtVGV4dHxHVUlDdHJsTGlzdFZpZXdfU2V0T3V0bGluZUNvbG9yfEdVSUN0cmxMaXN0Vmlld19TZXRTZWxlY3RlZENvbHVtbnxHVUlDdHJsTGlzdFZpZXdfU2V0U2VsZWN0aW9uTWFya3xHVUlDdHJsTGlzdFZpZXdfU2V0VGV4dEJrQ29sb3J8R1VJQ3RybExpc3RWaWV3X1NldFRleHRDb2xvcnxHVUlDdHJsTGlzdFZpZXdfU2V0VG9vbFRpcHN8R1VJQ3RybExpc3RWaWV3X1NldFVuaWNvZGVGb3JtYXR8R1VJQ3RybExpc3RWaWV3X1NldFZpZXd8R1VJQ3RybExpc3RWaWV3X1NldFdvcmtBcmVhc3xHVUlDdHJsTGlzdFZpZXdfU2ltcGxlU29ydHxHVUlDdHJsTGlzdFZpZXdfU29ydEl0ZW1zfEdVSUN0cmxMaXN0Vmlld19TdWJJdGVtSGl0VGVzdHxHVUlDdHJsTGlzdFZpZXdfVW5SZWdpc3RlclNvcnRDYWxsQmFja3xHVUlDdHJsTWVudV9BZGRNZW51SXRlbXxHVUlDdHJsTWVudV9BcHBlbmRNZW51fEdVSUN0cmxNZW51X0NoZWNrTWVudUl0ZW18R1VJQ3RybE1lbnVfQ2hlY2tSYWRpb0l0ZW18R1VJQ3RybE1lbnVfQ3JlYXRlTWVudXxHVUlDdHJsTWVudV9DcmVhdGVQb3B1cHxHVUlDdHJsTWVudV9EZWxldGVNZW51fEdVSUN0cmxNZW51X0Rlc3Ryb3lNZW51fEdVSUN0cmxNZW51X0RyYXdNZW51QmFyfEdVSUN0cmxNZW51X0VuYWJsZU1lbnVJdGVtfEdVSUN0cmxNZW51X0ZpbmRJdGVtfEdVSUN0cmxNZW51X0ZpbmRQYXJlbnR8R1VJQ3RybE1lbnVfR2V0SXRlbUJtcHxHVUlDdHJsTWVudV9HZXRJdGVtQm1wQ2hlY2tlZHxHVUlDdHJsTWVudV9HZXRJdGVtQm1wVW5jaGVja2VkfEdVSUN0cmxNZW51X0dldEl0ZW1DaGVja2VkfEdVSUN0cmxNZW51X0dldEl0ZW1Db3VudHxHVUlDdHJsTWVudV9HZXRJdGVtRGF0YXxHVUlDdHJsTWVudV9HZXRJdGVtRGVmYXVsdHxHVUlDdHJsTWVudV9HZXRJdGVtRGlzYWJsZWR8R1VJQ3RybE1lbnVfR2V0SXRlbUVuYWJsZWR8R1VJQ3RybE1lbnVfR2V0SXRlbUdyYXllZHxHVUlDdHJsTWVudV9HZXRJdGVtSGlnaGxpZ2h0ZWR8R1VJQ3RybE1lbnVfR2V0SXRlbUlEfEdVSUN0cmxNZW51X0dldEl0ZW1JbmZvfEdVSUN0cmxNZW51X0dldEl0ZW1SZWN0fEdVSUN0cmxNZW51X0dldEl0ZW1SZWN0RXh8R1VJQ3RybE1lbnVfR2V0SXRlbVN0YXRlfEdVSUN0cmxNZW51X0dldEl0ZW1TdGF0ZUV4fEdVSUN0cmxNZW51X0dldEl0ZW1TdWJNZW51fEdVSUN0cmxNZW51X0dldEl0ZW1UZXh0fEdVSUN0cmxNZW51X0dldEl0ZW1UeXBlfEdVSUN0cmxNZW51X0dldE1lbnV8R1VJQ3RybE1lbnVfR2V0TWVudUJhY2tncm91bmR8R1VJQ3RybE1lbnVfR2V0TWVudUJhckluZm98R1VJQ3RybE1lbnVfR2V0TWVudUNvbnRleHRIZWxwSUR8R1VJQ3RybE1lbnVfR2V0TWVudURhdGF8R1VJQ3RybE1lbnVfR2V0TWVudURlZmF1bHRJdGVtfEdVSUN0cmxNZW51X0dldE1lbnVIZWlnaHR8R1VJQ3RybE1lbnVfR2V0TWVudUluZm98R1VJQ3RybE1lbnVfR2V0TWVudVN0eWxlfEdVSUN0cmxNZW51X0dldFN5c3RlbU1lbnV8R1VJQ3RybE1lbnVfSW5zZXJ0TWVudUl0ZW18R1VJQ3RybE1lbnVfSW5zZXJ0TWVudUl0ZW1FeHxHVUlDdHJsTWVudV9Jc01lbnV8R1VJQ3RybE1lbnVfTG9hZE1lbnV8R1VJQ3RybE1lbnVfTWFwQWNjZWxlcmF0b3J8R1VJQ3RybE1lbnVfTWVudUl0ZW1Gcm9tUG9pbnR8R1VJQ3RybE1lbnVfUmVtb3ZlTWVudXxHVUlDdHJsTWVudV9TZXRJdGVtQml0bWFwc3xHVUlDdHJsTWVudV9TZXRJdGVtQm1wfEdVSUN0cmxNZW51X1NldEl0ZW1CbXBDaGVja2VkfEdVSUN0cmxNZW51X1NldEl0ZW1CbXBVbmNoZWNrZWR8R1VJQ3RybE1lbnVfU2V0SXRlbUNoZWNrZWR8R1VJQ3RybE1lbnVfU2V0SXRlbURhdGF8R1VJQ3RybE1lbnVfU2V0SXRlbURlZmF1bHR8R1VJQ3RybE1lbnVfU2V0SXRlbURpc2FibGVkfEdVSUN0cmxNZW51X1NldEl0ZW1FbmFibGVkfEdVSUN0cmxNZW51X1NldEl0ZW1HcmF5ZWR8R1VJQ3RybE1lbnVfU2V0SXRlbUhpZ2hsaWdodGVkfEdVSUN0cmxNZW51X1NldEl0ZW1JRHxHVUlDdHJsTWVudV9TZXRJdGVtSW5mb3xHVUlDdHJsTWVudV9TZXRJdGVtU3RhdGV8R1VJQ3RybE1lbnVfU2V0SXRlbVN1Yk1lbnV8R1VJQ3RybE1lbnVfU2V0SXRlbVRleHR8R1VJQ3RybE1lbnVfU2V0SXRlbVR5cGV8R1VJQ3RybE1lbnVfU2V0TWVudXxHVUlDdHJsTWVudV9TZXRNZW51QmFja2dyb3VuZHxHVUlDdHJsTWVudV9TZXRNZW51Q29udGV4dEhlbHBJRHxHVUlDdHJsTWVudV9TZXRNZW51RGF0YXxHVUlDdHJsTWVudV9TZXRNZW51RGVmYXVsdEl0ZW18R1VJQ3RybE1lbnVfU2V0TWVudUhlaWdodHxHVUlDdHJsTWVudV9TZXRNZW51SW5mb3xHVUlDdHJsTWVudV9TZXRNZW51U3R5bGV8R1VJQ3RybE1lbnVfVHJhY2tQb3B1cE1lbnV8R1VJQ3RybE1vbnRoQ2FsX0NyZWF0ZXxHVUlDdHJsTW9udGhDYWxfRGVzdHJveXxHVUlDdHJsTW9udGhDYWxfR2V0Q29sb3J8R1VJQ3RybE1vbnRoQ2FsX0dldENvbG9yQXJyYXl8R1VJQ3RybE1vbnRoQ2FsX0dldEN1clNlbHxHVUlDdHJsTW9udGhDYWxfR2V0Q3VyU2VsU3RyfEdVSUN0cmxNb250aENhbF9HZXRGaXJzdERPV3xHVUlDdHJsTW9udGhDYWxfR2V0Rmlyc3RET1dTdHJ8R1VJQ3RybE1vbnRoQ2FsX0dldE1heFNlbENvdW50fEdVSUN0cmxNb250aENhbF9HZXRNYXhUb2RheVdpZHRofEdVSUN0cmxNb250aENhbF9HZXRNaW5SZXFIZWlnaHR8R1VJQ3RybE1vbnRoQ2FsX0dldE1pblJlcVJlY3R8R1VJQ3RybE1vbnRoQ2FsX0dldE1pblJlcVJlY3RBcnJheXxHVUlDdHJsTW9udGhDYWxfR2V0TWluUmVxV2lkdGh8R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoRGVsdGF8R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoUmFuZ2V8R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoUmFuZ2VNYXh8R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoUmFuZ2VNYXhTdHJ8R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoUmFuZ2VNaW58R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoUmFuZ2VNaW5TdHJ8R1VJQ3RybE1vbnRoQ2FsX0dldE1vbnRoUmFuZ2VTcGFufEdVSUN0cmxNb250aENhbF9HZXRSYW5nZXxHVUlDdHJsTW9udGhDYWxfR2V0UmFuZ2VNYXh8R1VJQ3RybE1vbnRoQ2FsX0dldFJhbmdlTWF4U3RyfEdVSUN0cmxNb250aENhbF9HZXRSYW5nZU1pbnxHVUlDdHJsTW9udGhDYWxfR2V0UmFuZ2VNaW5TdHJ8R1VJQ3RybE1vbnRoQ2FsX0dldFNlbFJhbmdlfEdVSUN0cmxNb250aENhbF9HZXRTZWxSYW5nZU1heHxHVUlDdHJsTW9udGhDYWxfR2V0U2VsUmFuZ2VNYXhTdHJ8R1VJQ3RybE1vbnRoQ2FsX0dldFNlbFJhbmdlTWlufEdVSUN0cmxNb250aENhbF9HZXRTZWxSYW5nZU1pblN0cnxHVUlDdHJsTW9udGhDYWxfR2V0VG9kYXl8R1VJQ3RybE1vbnRoQ2FsX0dldFRvZGF5U3RyfEdVSUN0cmxNb250aENhbF9HZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxNb250aENhbF9IaXRUZXN0fEdVSUN0cmxNb250aENhbF9TZXRDb2xvcnxHVUlDdHJsTW9udGhDYWxfU2V0Q3VyU2VsfEdVSUN0cmxNb250aENhbF9TZXREYXlTdGF0ZXxHVUlDdHJsTW9udGhDYWxfU2V0Rmlyc3RET1d8R1VJQ3RybE1vbnRoQ2FsX1NldE1heFNlbENvdW50fEdVSUN0cmxNb250aENhbF9TZXRNb250aERlbHRhfEdVSUN0cmxNb250aENhbF9TZXRSYW5nZXxHVUlDdHJsTW9udGhDYWxfU2V0U2VsUmFuZ2V8R1VJQ3RybE1vbnRoQ2FsX1NldFRvZGF5fEdVSUN0cmxNb250aENhbF9TZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxSZWJhcl9BZGRCYW5kfEdVSUN0cmxSZWJhcl9BZGRUb29sQmFyQmFuZHxHVUlDdHJsUmViYXJfQmVnaW5EcmFnfEdVSUN0cmxSZWJhcl9DcmVhdGV8R1VJQ3RybFJlYmFyX0RlbGV0ZUJhbmR8R1VJQ3RybFJlYmFyX0Rlc3Ryb3l8R1VJQ3RybFJlYmFyX0RyYWdNb3ZlfEdVSUN0cmxSZWJhcl9FbmREcmFnfEdVSUN0cmxSZWJhcl9HZXRCYW5kQmFja0NvbG9yfEdVSUN0cmxSZWJhcl9HZXRCYW5kQm9yZGVyc3xHVUlDdHJsUmViYXJfR2V0QmFuZEJvcmRlcnNFeHxHVUlDdHJsUmViYXJfR2V0QmFuZENoaWxkSGFuZGxlfEdVSUN0cmxSZWJhcl9HZXRCYW5kQ2hpbGRTaXplfEdVSUN0cmxSZWJhcl9HZXRCYW5kQ291bnR8R1VJQ3RybFJlYmFyX0dldEJhbmRGb3JlQ29sb3J8R1VJQ3RybFJlYmFyX0dldEJhbmRIZWFkZXJTaXplfEdVSUN0cmxSZWJhcl9HZXRCYW5kSUR8R1VJQ3RybFJlYmFyX0dldEJhbmRJZGVhbFNpemV8R1VJQ3RybFJlYmFyX0dldEJhbmRMZW5ndGh8R1VJQ3RybFJlYmFyX0dldEJhbmRMUGFyYW18R1VJQ3RybFJlYmFyX0dldEJhbmRNYXJnaW5zfEdVSUN0cmxSZWJhcl9HZXRCYW5kTWFyZ2luc0V4fEdVSUN0cmxSZWJhcl9HZXRCYW5kUmVjdHxHVUlDdHJsUmViYXJfR2V0QmFuZFJlY3RFeHxHVUlDdHJsUmViYXJfR2V0QmFuZFN0eWxlfEdVSUN0cmxSZWJhcl9HZXRCYW5kU3R5bGVCcmVha3xHVUlDdHJsUmViYXJfR2V0QmFuZFN0eWxlQ2hpbGRFZGdlfEdVSUN0cmxSZWJhcl9HZXRCYW5kU3R5bGVGaXhlZEJNUHxHVUlDdHJsUmViYXJfR2V0QmFuZFN0eWxlRml4ZWRTaXplfEdVSUN0cmxSZWJhcl9HZXRCYW5kU3R5bGVHcmlwcGVyQWx3YXlzfEdVSUN0cmxSZWJhcl9HZXRCYW5kU3R5bGVIaWRkZW58R1VJQ3RybFJlYmFyX0dldEJhbmRTdHlsZUhpZGVUaXRsZXxHVUlDdHJsUmViYXJfR2V0QmFuZFN0eWxlTm9HcmlwcGVyfEdVSUN0cmxSZWJhcl9HZXRCYW5kU3R5bGVUb3BBbGlnbnxHVUlDdHJsUmViYXJfR2V0QmFuZFN0eWxlVXNlQ2hldnJvbnxHVUlDdHJsUmViYXJfR2V0QmFuZFN0eWxlVmFyaWFibGVIZWlnaHR8R1VJQ3RybFJlYmFyX0dldEJhbmRUZXh0fEdVSUN0cmxSZWJhcl9HZXRCYXJIZWlnaHR8R1VJQ3RybFJlYmFyX0dldEJLQ29sb3J8R1VJQ3RybFJlYmFyX0dldENvbG9yU2NoZW1lfEdVSUN0cmxSZWJhcl9HZXRSb3dDb3VudHxHVUlDdHJsUmViYXJfR2V0Um93SGVpZ2h0fEdVSUN0cmxSZWJhcl9HZXRUZXh0Q29sb3J8R1VJQ3RybFJlYmFyX0dldFRvb2xUaXBzfEdVSUN0cmxSZWJhcl9HZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxSZWJhcl9IaXRUZXN0fEdVSUN0cmxSZWJhcl9JRFRvSW5kZXh8R1VJQ3RybFJlYmFyX01heGltaXplQmFuZHxHVUlDdHJsUmViYXJfTWluaW1pemVCYW5kfEdVSUN0cmxSZWJhcl9Nb3ZlQmFuZHxHVUlDdHJsUmViYXJfU2V0QmFuZEJhY2tDb2xvcnxHVUlDdHJsUmViYXJfU2V0QmFuZEZvcmVDb2xvcnxHVUlDdHJsUmViYXJfU2V0QmFuZEhlYWRlclNpemV8R1VJQ3RybFJlYmFyX1NldEJhbmRJRHxHVUlDdHJsUmViYXJfU2V0QmFuZElkZWFsU2l6ZXxHVUlDdHJsUmViYXJfU2V0QmFuZExlbmd0aHxHVUlDdHJsUmViYXJfU2V0QmFuZExQYXJhbXxHVUlDdHJsUmViYXJfU2V0QmFuZFN0eWxlfEdVSUN0cmxSZWJhcl9TZXRCYW5kU3R5bGVCcmVha3xHVUlDdHJsUmViYXJfU2V0QmFuZFN0eWxlQ2hpbGRFZGdlfEdVSUN0cmxSZWJhcl9TZXRCYW5kU3R5bGVGaXhlZEJNUHxHVUlDdHJsUmViYXJfU2V0QmFuZFN0eWxlRml4ZWRTaXplfEdVSUN0cmxSZWJhcl9TZXRCYW5kU3R5bGVHcmlwcGVyQWx3YXlzfEdVSUN0cmxSZWJhcl9TZXRCYW5kU3R5bGVIaWRkZW58R1VJQ3RybFJlYmFyX1NldEJhbmRTdHlsZUhpZGVUaXRsZXxHVUlDdHJsUmViYXJfU2V0QmFuZFN0eWxlTm9HcmlwcGVyfEdVSUN0cmxSZWJhcl9TZXRCYW5kU3R5bGVUb3BBbGlnbnxHVUlDdHJsUmViYXJfU2V0QmFuZFN0eWxlVXNlQ2hldnJvbnxHVUlDdHJsUmViYXJfU2V0QmFuZFN0eWxlVmFyaWFibGVIZWlnaHR8R1VJQ3RybFJlYmFyX1NldEJhbmRUZXh0fEdVSUN0cmxSZWJhcl9TZXRCS0NvbG9yfEdVSUN0cmxSZWJhcl9TZXRDb2xvclNjaGVtZXxHVUlDdHJsUmViYXJfU2V0VGV4dENvbG9yfEdVSUN0cmxSZWJhcl9TZXRUb29sVGlwc3xHVUlDdHJsUmViYXJfU2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsUmViYXJfU2hvd0JhbmR8R1VJQ3RybFNsaWRlcl9DbGVhclNlbHxHVUlDdHJsU2xpZGVyX0NsZWFyVGljc3xHVUlDdHJsU2xpZGVyX0NyZWF0ZXxHVUlDdHJsU2xpZGVyX0Rlc3Ryb3l8R1VJQ3RybFNsaWRlcl9HZXRCdWRkeXxHVUlDdHJsU2xpZGVyX0dldENoYW5uZWxSZWN0fEdVSUN0cmxTbGlkZXJfR2V0TGluZVNpemV8R1VJQ3RybFNsaWRlcl9HZXROdW1UaWNzfEdVSUN0cmxTbGlkZXJfR2V0UGFnZVNpemV8R1VJQ3RybFNsaWRlcl9HZXRQb3N8R1VJQ3RybFNsaWRlcl9HZXRQVGljc3xHVUlDdHJsU2xpZGVyX0dldFJhbmdlfEdVSUN0cmxTbGlkZXJfR2V0UmFuZ2VNYXh8R1VJQ3RybFNsaWRlcl9HZXRSYW5nZU1pbnxHVUlDdHJsU2xpZGVyX0dldFNlbHxHVUlDdHJsU2xpZGVyX0dldFNlbEVuZHxHVUlDdHJsU2xpZGVyX0dldFNlbFN0YXJ0fEdVSUN0cmxTbGlkZXJfR2V0VGh1bWJMZW5ndGh8R1VJQ3RybFNsaWRlcl9HZXRUaHVtYlJlY3R8R1VJQ3RybFNsaWRlcl9HZXRUaHVtYlJlY3RFeHxHVUlDdHJsU2xpZGVyX0dldFRpY3xHVUlDdHJsU2xpZGVyX0dldFRpY1Bvc3xHVUlDdHJsU2xpZGVyX0dldFRvb2xUaXBzfEdVSUN0cmxTbGlkZXJfR2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsU2xpZGVyX1NldEJ1ZGR5fEdVSUN0cmxTbGlkZXJfU2V0TGluZVNpemV8R1VJQ3RybFNsaWRlcl9TZXRQYWdlU2l6ZXxHVUlDdHJsU2xpZGVyX1NldFBvc3xHVUlDdHJsU2xpZGVyX1NldFJhbmdlfEdVSUN0cmxTbGlkZXJfU2V0UmFuZ2VNYXh8R1VJQ3RybFNsaWRlcl9TZXRSYW5nZU1pbnxHVUlDdHJsU2xpZGVyX1NldFNlbHxHVUlDdHJsU2xpZGVyX1NldFNlbEVuZHxHVUlDdHJsU2xpZGVyX1NldFNlbFN0YXJ0fEdVSUN0cmxTbGlkZXJfU2V0VGh1bWJMZW5ndGh8R1VJQ3RybFNsaWRlcl9TZXRUaWN8R1VJQ3RybFNsaWRlcl9TZXRUaWNGcmVxfEdVSUN0cmxTbGlkZXJfU2V0VGlwU2lkZXxHVUlDdHJsU2xpZGVyX1NldFRvb2xUaXBzfEdVSUN0cmxTbGlkZXJfU2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsU3RhdHVzQmFyX0NyZWF0ZXxHVUlDdHJsU3RhdHVzQmFyX0Rlc3Ryb3l8R1VJQ3RybFN0YXR1c0Jhcl9FbWJlZENvbnRyb2x8R1VJQ3RybFN0YXR1c0Jhcl9HZXRCb3JkZXJzfEdVSUN0cmxTdGF0dXNCYXJfR2V0Qm9yZGVyc0hvcnp8R1VJQ3RybFN0YXR1c0Jhcl9HZXRCb3JkZXJzUmVjdHxHVUlDdHJsU3RhdHVzQmFyX0dldEJvcmRlcnNWZXJ0fEdVSUN0cmxTdGF0dXNCYXJfR2V0Q291bnR8R1VJQ3RybFN0YXR1c0Jhcl9HZXRIZWlnaHR8R1VJQ3RybFN0YXR1c0Jhcl9HZXRJY29ufEdVSUN0cmxTdGF0dXNCYXJfR2V0UGFydHN8R1VJQ3RybFN0YXR1c0Jhcl9HZXRSZWN0fEdVSUN0cmxTdGF0dXNCYXJfR2V0UmVjdEV4fEdVSUN0cmxTdGF0dXNCYXJfR2V0VGV4dHxHVUlDdHJsU3RhdHVzQmFyX0dldFRleHRGbGFnc3xHVUlDdHJsU3RhdHVzQmFyX0dldFRleHRMZW5ndGh8R1VJQ3RybFN0YXR1c0Jhcl9HZXRUZXh0TGVuZ3RoRXh8R1VJQ3RybFN0YXR1c0Jhcl9HZXRUaXBUZXh0fEdVSUN0cmxTdGF0dXNCYXJfR2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsU3RhdHVzQmFyX0dldFdpZHRofEdVSUN0cmxTdGF0dXNCYXJfSXNTaW1wbGV8R1VJQ3RybFN0YXR1c0Jhcl9SZXNpemV8R1VJQ3RybFN0YXR1c0Jhcl9TZXRCa0NvbG9yfEdVSUN0cmxTdGF0dXNCYXJfU2V0SWNvbnxHVUlDdHJsU3RhdHVzQmFyX1NldE1pbkhlaWdodHxHVUlDdHJsU3RhdHVzQmFyX1NldFBhcnRzfEdVSUN0cmxTdGF0dXNCYXJfU2V0U2ltcGxlfEdVSUN0cmxTdGF0dXNCYXJfU2V0VGV4dHxHVUlDdHJsU3RhdHVzQmFyX1NldFRpcFRleHR8R1VJQ3RybFN0YXR1c0Jhcl9TZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxTdGF0dXNCYXJfU2hvd0hpZGV8R1VJQ3RybFRhYl9DcmVhdGV8R1VJQ3RybFRhYl9EZWxldGVBbGxJdGVtc3xHVUlDdHJsVGFiX0RlbGV0ZUl0ZW18R1VJQ3RybFRhYl9EZXNlbGVjdEFsbHxHVUlDdHJsVGFiX0Rlc3Ryb3l8R1VJQ3RybFRhYl9GaW5kVGFifEdVSUN0cmxUYWJfR2V0Q3VyRm9jdXN8R1VJQ3RybFRhYl9HZXRDdXJTZWx8R1VJQ3RybFRhYl9HZXREaXNwbGF5UmVjdHxHVUlDdHJsVGFiX0dldERpc3BsYXlSZWN0RXh8R1VJQ3RybFRhYl9HZXRFeHRlbmRlZFN0eWxlfEdVSUN0cmxUYWJfR2V0SW1hZ2VMaXN0fEdVSUN0cmxUYWJfR2V0SXRlbXxHVUlDdHJsVGFiX0dldEl0ZW1Db3VudHxHVUlDdHJsVGFiX0dldEl0ZW1JbWFnZXxHVUlDdHJsVGFiX0dldEl0ZW1QYXJhbXxHVUlDdHJsVGFiX0dldEl0ZW1SZWN0fEdVSUN0cmxUYWJfR2V0SXRlbVJlY3RFeHxHVUlDdHJsVGFiX0dldEl0ZW1TdGF0ZXxHVUlDdHJsVGFiX0dldEl0ZW1UZXh0fEdVSUN0cmxUYWJfR2V0Um93Q291bnR8R1VJQ3RybFRhYl9HZXRUb29sVGlwc3xHVUlDdHJsVGFiX0dldFVuaWNvZGVGb3JtYXR8R1VJQ3RybFRhYl9IaWdobGlnaHRJdGVtfEdVSUN0cmxUYWJfSGl0VGVzdHxHVUlDdHJsVGFiX0luc2VydEl0ZW18R1VJQ3RybFRhYl9SZW1vdmVJbWFnZXxHVUlDdHJsVGFiX1NldEN1ckZvY3VzfEdVSUN0cmxUYWJfU2V0Q3VyU2VsfEdVSUN0cmxUYWJfU2V0RXh0ZW5kZWRTdHlsZXxHVUlDdHJsVGFiX1NldEltYWdlTGlzdHxHVUlDdHJsVGFiX1NldEl0ZW18R1VJQ3RybFRhYl9TZXRJdGVtSW1hZ2V8R1VJQ3RybFRhYl9TZXRJdGVtUGFyYW18R1VJQ3RybFRhYl9TZXRJdGVtU2l6ZXxHVUlDdHJsVGFiX1NldEl0ZW1TdGF0ZXxHVUlDdHJsVGFiX1NldEl0ZW1UZXh0fEdVSUN0cmxUYWJfU2V0TWluVGFiV2lkdGh8R1VJQ3RybFRhYl9TZXRQYWRkaW5nfEdVSUN0cmxUYWJfU2V0VG9vbFRpcHN8R1VJQ3RybFRhYl9TZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxUb29sYmFyX0FkZEJpdG1hcHxHVUlDdHJsVG9vbGJhcl9BZGRCdXR0b258R1VJQ3RybFRvb2xiYXJfQWRkQnV0dG9uU2VwfEdVSUN0cmxUb29sYmFyX0FkZFN0cmluZ3xHVUlDdHJsVG9vbGJhcl9CdXR0b25Db3VudHxHVUlDdHJsVG9vbGJhcl9DaGVja0J1dHRvbnxHVUlDdHJsVG9vbGJhcl9DbGlja0FjY2VsfEdVSUN0cmxUb29sYmFyX0NsaWNrQnV0dG9ufEdVSUN0cmxUb29sYmFyX0NsaWNrSW5kZXh8R1VJQ3RybFRvb2xiYXJfQ29tbWFuZFRvSW5kZXh8R1VJQ3RybFRvb2xiYXJfQ3JlYXRlfEdVSUN0cmxUb29sYmFyX0N1c3RvbWl6ZXxHVUlDdHJsVG9vbGJhcl9EZWxldGVCdXR0b258R1VJQ3RybFRvb2xiYXJfRGVzdHJveXxHVUlDdHJsVG9vbGJhcl9FbmFibGVCdXR0b258R1VJQ3RybFRvb2xiYXJfRmluZFRvb2xiYXJ8R1VJQ3RybFRvb2xiYXJfR2V0QW5jaG9ySGlnaGxpZ2h0fEdVSUN0cmxUb29sYmFyX0dldEJpdG1hcEZsYWdzfEdVSUN0cmxUb29sYmFyX0dldEJ1dHRvbkJpdG1hcHxHVUlDdHJsVG9vbGJhcl9HZXRCdXR0b25JbmZvfEdVSUN0cmxUb29sYmFyX0dldEJ1dHRvbkluZm9FeHxHVUlDdHJsVG9vbGJhcl9HZXRCdXR0b25QYXJhbXxHVUlDdHJsVG9vbGJhcl9HZXRCdXR0b25SZWN0fEdVSUN0cmxUb29sYmFyX0dldEJ1dHRvblJlY3RFeHxHVUlDdHJsVG9vbGJhcl9HZXRCdXR0b25TaXplfEdVSUN0cmxUb29sYmFyX0dldEJ1dHRvblN0YXRlfEdVSUN0cmxUb29sYmFyX0dldEJ1dHRvblN0eWxlfEdVSUN0cmxUb29sYmFyX0dldEJ1dHRvblRleHR8R1VJQ3RybFRvb2xiYXJfR2V0Q29sb3JTY2hlbWV8R1VJQ3RybFRvb2xiYXJfR2V0RGlzYWJsZWRJbWFnZUxpc3R8R1VJQ3RybFRvb2xiYXJfR2V0RXh0ZW5kZWRTdHlsZXxHVUlDdHJsVG9vbGJhcl9HZXRIb3RJbWFnZUxpc3R8R1VJQ3RybFRvb2xiYXJfR2V0SG90SXRlbXxHVUlDdHJsVG9vbGJhcl9HZXRJbWFnZUxpc3R8R1VJQ3RybFRvb2xiYXJfR2V0SW5zZXJ0TWFya3xHVUlDdHJsVG9vbGJhcl9HZXRJbnNlcnRNYXJrQ29sb3J8R1VJQ3RybFRvb2xiYXJfR2V0TWF4U2l6ZXxHVUlDdHJsVG9vbGJhcl9HZXRNZXRyaWNzfEdVSUN0cmxUb29sYmFyX0dldFBhZGRpbmd8R1VJQ3RybFRvb2xiYXJfR2V0Um93c3xHVUlDdHJsVG9vbGJhcl9HZXRTdHJpbmd8R1VJQ3RybFRvb2xiYXJfR2V0U3R5bGV8R1VJQ3RybFRvb2xiYXJfR2V0U3R5bGVBbHREcmFnfEdVSUN0cmxUb29sYmFyX0dldFN0eWxlQ3VzdG9tRXJhc2V8R1VJQ3RybFRvb2xiYXJfR2V0U3R5bGVGbGF0fEdVSUN0cmxUb29sYmFyX0dldFN0eWxlTGlzdHxHVUlDdHJsVG9vbGJhcl9HZXRTdHlsZVJlZ2lzdGVyRHJvcHxHVUlDdHJsVG9vbGJhcl9HZXRTdHlsZVRvb2xUaXBzfEdVSUN0cmxUb29sYmFyX0dldFN0eWxlVHJhbnNwYXJlbnR8R1VJQ3RybFRvb2xiYXJfR2V0U3R5bGVXcmFwYWJsZXxHVUlDdHJsVG9vbGJhcl9HZXRUZXh0Um93c3xHVUlDdHJsVG9vbGJhcl9HZXRUb29sVGlwc3xHVUlDdHJsVG9vbGJhcl9HZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxUb29sYmFyX0hpZGVCdXR0b258R1VJQ3RybFRvb2xiYXJfSGlnaGxpZ2h0QnV0dG9ufEdVSUN0cmxUb29sYmFyX0hpdFRlc3R8R1VJQ3RybFRvb2xiYXJfSW5kZXhUb0NvbW1hbmR8R1VJQ3RybFRvb2xiYXJfSW5zZXJ0QnV0dG9ufEdVSUN0cmxUb29sYmFyX0luc2VydE1hcmtIaXRUZXN0fEdVSUN0cmxUb29sYmFyX0lzQnV0dG9uQ2hlY2tlZHxHVUlDdHJsVG9vbGJhcl9Jc0J1dHRvbkVuYWJsZWR8R1VJQ3RybFRvb2xiYXJfSXNCdXR0b25IaWRkZW58R1VJQ3RybFRvb2xiYXJfSXNCdXR0b25IaWdobGlnaHRlZHxHVUlDdHJsVG9vbGJhcl9Jc0J1dHRvbkluZGV0ZXJtaW5hdGV8R1VJQ3RybFRvb2xiYXJfSXNCdXR0b25QcmVzc2VkfEdVSUN0cmxUb29sYmFyX0xvYWRCaXRtYXB8R1VJQ3RybFRvb2xiYXJfTG9hZEltYWdlc3xHVUlDdHJsVG9vbGJhcl9NYXBBY2NlbGVyYXRvcnxHVUlDdHJsVG9vbGJhcl9Nb3ZlQnV0dG9ufEdVSUN0cmxUb29sYmFyX1ByZXNzQnV0dG9ufEdVSUN0cmxUb29sYmFyX1NldEFuY2hvckhpZ2hsaWdodHxHVUlDdHJsVG9vbGJhcl9TZXRCaXRtYXBTaXplfEdVSUN0cmxUb29sYmFyX1NldEJ1dHRvbkJpdE1hcHxHVUlDdHJsVG9vbGJhcl9TZXRCdXR0b25JbmZvfEdVSUN0cmxUb29sYmFyX1NldEJ1dHRvbkluZm9FeHxHVUlDdHJsVG9vbGJhcl9TZXRCdXR0b25QYXJhbXxHVUlDdHJsVG9vbGJhcl9TZXRCdXR0b25TaXplfEdVSUN0cmxUb29sYmFyX1NldEJ1dHRvblN0YXRlfEdVSUN0cmxUb29sYmFyX1NldEJ1dHRvblN0eWxlfEdVSUN0cmxUb29sYmFyX1NldEJ1dHRvblRleHR8R1VJQ3RybFRvb2xiYXJfU2V0QnV0dG9uV2lkdGh8R1VJQ3RybFRvb2xiYXJfU2V0Q21kSUR8R1VJQ3RybFRvb2xiYXJfU2V0Q29sb3JTY2hlbWV8R1VJQ3RybFRvb2xiYXJfU2V0RGlzYWJsZWRJbWFnZUxpc3R8R1VJQ3RybFRvb2xiYXJfU2V0RHJhd1RleHRGbGFnc3xHVUlDdHJsVG9vbGJhcl9TZXRFeHRlbmRlZFN0eWxlfEdVSUN0cmxUb29sYmFyX1NldEhvdEltYWdlTGlzdHxHVUlDdHJsVG9vbGJhcl9TZXRIb3RJdGVtfEdVSUN0cmxUb29sYmFyX1NldEltYWdlTGlzdHxHVUlDdHJsVG9vbGJhcl9TZXRJbmRlbnR8R1VJQ3RybFRvb2xiYXJfU2V0SW5kZXRlcm1pbmF0ZXxHVUlDdHJsVG9vbGJhcl9TZXRJbnNlcnRNYXJrfEdVSUN0cmxUb29sYmFyX1NldEluc2VydE1hcmtDb2xvcnxHVUlDdHJsVG9vbGJhcl9TZXRNYXhUZXh0Um93c3xHVUlDdHJsVG9vbGJhcl9TZXRNZXRyaWNzfEdVSUN0cmxUb29sYmFyX1NldFBhZGRpbmd8R1VJQ3RybFRvb2xiYXJfU2V0UGFyZW50fEdVSUN0cmxUb29sYmFyX1NldFJvd3N8R1VJQ3RybFRvb2xiYXJfU2V0U3R5bGV8R1VJQ3RybFRvb2xiYXJfU2V0U3R5bGVBbHREcmFnfEdVSUN0cmxUb29sYmFyX1NldFN0eWxlQ3VzdG9tRXJhc2V8R1VJQ3RybFRvb2xiYXJfU2V0U3R5bGVGbGF0fEdVSUN0cmxUb29sYmFyX1NldFN0eWxlTGlzdHxHVUlDdHJsVG9vbGJhcl9TZXRTdHlsZVJlZ2lzdGVyRHJvcHxHVUlDdHJsVG9vbGJhcl9TZXRTdHlsZVRvb2xUaXBzfEdVSUN0cmxUb29sYmFyX1NldFN0eWxlVHJhbnNwYXJlbnR8R1VJQ3RybFRvb2xiYXJfU2V0U3R5bGVXcmFwYWJsZXxHVUlDdHJsVG9vbGJhcl9TZXRUb29sVGlwc3xHVUlDdHJsVG9vbGJhcl9TZXRVbmljb2RlRm9ybWF0fEdVSUN0cmxUb29sYmFyX1NldFdpbmRvd1RoZW1lfEdVSUN0cmxUcmVlVmlld19BZGR8R1VJQ3RybFRyZWVWaWV3X0FkZENoaWxkfEdVSUN0cmxUcmVlVmlld19BZGRDaGlsZEZpcnN0fEdVSUN0cmxUcmVlVmlld19BZGRGaXJzdHxHVUlDdHJsVHJlZVZpZXdfQmVnaW5VcGRhdGV8R1VJQ3RybFRyZWVWaWV3X0NsaWNrSXRlbXxHVUlDdHJsVHJlZVZpZXdfQ3JlYXRlfEdVSUN0cmxUcmVlVmlld19DcmVhdGVEcmFnSW1hZ2V8R1VJQ3RybFRyZWVWaWV3X0NyZWF0ZVNvbGlkQml0TWFwfEdVSUN0cmxUcmVlVmlld19EZWxldGV8R1VJQ3RybFRyZWVWaWV3X0RlbGV0ZUFsbHxHVUlDdHJsVHJlZVZpZXdfRGVsZXRlQ2hpbGRyZW58R1VJQ3RybFRyZWVWaWV3X0Rlc3Ryb3l8R1VJQ3RybFRyZWVWaWV3X0Rpc3BsYXlSZWN0fEdVSUN0cmxUcmVlVmlld19EaXNwbGF5UmVjdEV4fEdVSUN0cmxUcmVlVmlld19FZGl0VGV4dHxHVUlDdHJsVHJlZVZpZXdfRW5kRWRpdHxHVUlDdHJsVHJlZVZpZXdfRW5kVXBkYXRlfEdVSUN0cmxUcmVlVmlld19FbnN1cmVWaXNpYmxlfEdVSUN0cmxUcmVlVmlld19FeHBhbmR8R1VJQ3RybFRyZWVWaWV3X0V4cGFuZGVkT25jZXxHVUlDdHJsVHJlZVZpZXdfRmluZEl0ZW18R1VJQ3RybFRyZWVWaWV3X0ZpbmRJdGVtRXh8R1VJQ3RybFRyZWVWaWV3X0dldEJrQ29sb3J8R1VJQ3RybFRyZWVWaWV3X0dldEJvbGR8R1VJQ3RybFRyZWVWaWV3X0dldENoZWNrZWR8R1VJQ3RybFRyZWVWaWV3X0dldENoaWxkQ291bnR8R1VJQ3RybFRyZWVWaWV3X0dldENoaWxkcmVufEdVSUN0cmxUcmVlVmlld19HZXRDb3VudHxHVUlDdHJsVHJlZVZpZXdfR2V0Q3V0fEdVSUN0cmxUcmVlVmlld19HZXREcm9wVGFyZ2V0fEdVSUN0cmxUcmVlVmlld19HZXRFZGl0Q29udHJvbHxHVUlDdHJsVHJlZVZpZXdfR2V0RXhwYW5kZWR8R1VJQ3RybFRyZWVWaWV3X0dldEZpcnN0Q2hpbGR8R1VJQ3RybFRyZWVWaWV3X0dldEZpcnN0SXRlbXxHVUlDdHJsVHJlZVZpZXdfR2V0Rmlyc3RWaXNpYmxlfEdVSUN0cmxUcmVlVmlld19HZXRGb2N1c2VkfEdVSUN0cmxUcmVlVmlld19HZXRIZWlnaHR8R1VJQ3RybFRyZWVWaWV3X0dldEltYWdlSW5kZXh8R1VJQ3RybFRyZWVWaWV3X0dldEltYWdlTGlzdEljb25IYW5kbGV8R1VJQ3RybFRyZWVWaWV3X0dldEluZGVudHxHVUlDdHJsVHJlZVZpZXdfR2V0SW5zZXJ0TWFya0NvbG9yfEdVSUN0cmxUcmVlVmlld19HZXRJU2VhcmNoU3RyaW5nfEdVSUN0cmxUcmVlVmlld19HZXRJdGVtQnlJbmRleHxHVUlDdHJsVHJlZVZpZXdfR2V0SXRlbUhhbmRsZXxHVUlDdHJsVHJlZVZpZXdfR2V0SXRlbVBhcmFtfEdVSUN0cmxUcmVlVmlld19HZXRMYXN0Q2hpbGR8R1VJQ3RybFRyZWVWaWV3X0dldExpbmVDb2xvcnxHVUlDdHJsVHJlZVZpZXdfR2V0TmV4dHxHVUlDdHJsVHJlZVZpZXdfR2V0TmV4dENoaWxkfEdVSUN0cmxUcmVlVmlld19HZXROZXh0U2libGluZ3xHVUlDdHJsVHJlZVZpZXdfR2V0TmV4dFZpc2libGV8R1VJQ3RybFRyZWVWaWV3X0dldE5vcm1hbEltYWdlTGlzdHxHVUlDdHJsVHJlZVZpZXdfR2V0UGFyZW50SGFuZGxlfEdVSUN0cmxUcmVlVmlld19HZXRQYXJlbnRQYXJhbXxHVUlDdHJsVHJlZVZpZXdfR2V0UHJldnxHVUlDdHJsVHJlZVZpZXdfR2V0UHJldkNoaWxkfEdVSUN0cmxUcmVlVmlld19HZXRQcmV2U2libGluZ3xHVUlDdHJsVHJlZVZpZXdfR2V0UHJldlZpc2libGV8R1VJQ3RybFRyZWVWaWV3X0dldFNjcm9sbFRpbWV8R1VJQ3RybFRyZWVWaWV3X0dldFNlbGVjdGVkfEdVSUN0cmxUcmVlVmlld19HZXRTZWxlY3RlZEltYWdlSW5kZXh8R1VJQ3RybFRyZWVWaWV3X0dldFNlbGVjdGlvbnxHVUlDdHJsVHJlZVZpZXdfR2V0U2libGluZ0NvdW50fEdVSUN0cmxUcmVlVmlld19HZXRTdGF0ZXxHVUlDdHJsVHJlZVZpZXdfR2V0U3RhdGVJbWFnZUluZGV4fEdVSUN0cmxUcmVlVmlld19HZXRTdGF0ZUltYWdlTGlzdHxHVUlDdHJsVHJlZVZpZXdfR2V0VGV4dHxHVUlDdHJsVHJlZVZpZXdfR2V0VGV4dENvbG9yfEdVSUN0cmxUcmVlVmlld19HZXRUb29sVGlwc3xHVUlDdHJsVHJlZVZpZXdfR2V0VHJlZXxHVUlDdHJsVHJlZVZpZXdfR2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsVHJlZVZpZXdfR2V0VmlzaWJsZXxHVUlDdHJsVHJlZVZpZXdfR2V0VmlzaWJsZUNvdW50fEdVSUN0cmxUcmVlVmlld19IaXRUZXN0fEdVSUN0cmxUcmVlVmlld19IaXRUZXN0RXh8R1VJQ3RybFRyZWVWaWV3X0hpdFRlc3RJdGVtfEdVSUN0cmxUcmVlVmlld19JbmRleHxHVUlDdHJsVHJlZVZpZXdfSW5zZXJ0SXRlbXxHVUlDdHJsVHJlZVZpZXdfSXNGaXJzdEl0ZW18R1VJQ3RybFRyZWVWaWV3X0lzUGFyZW50fEdVSUN0cmxUcmVlVmlld19MZXZlbHxHVUlDdHJsVHJlZVZpZXdfU2VsZWN0SXRlbXxHVUlDdHJsVHJlZVZpZXdfU2VsZWN0SXRlbUJ5SW5kZXh8R1VJQ3RybFRyZWVWaWV3X1NldEJrQ29sb3J8R1VJQ3RybFRyZWVWaWV3X1NldEJvbGR8R1VJQ3RybFRyZWVWaWV3X1NldENoZWNrZWR8R1VJQ3RybFRyZWVWaWV3X1NldENoZWNrZWRCeUluZGV4fEdVSUN0cmxUcmVlVmlld19TZXRDaGlsZHJlbnxHVUlDdHJsVHJlZVZpZXdfU2V0Q3V0fEdVSUN0cmxUcmVlVmlld19TZXREcm9wVGFyZ2V0fEdVSUN0cmxUcmVlVmlld19TZXRGb2N1c2VkfEdVSUN0cmxUcmVlVmlld19TZXRIZWlnaHR8R1VJQ3RybFRyZWVWaWV3X1NldEljb258R1VJQ3RybFRyZWVWaWV3X1NldEltYWdlSW5kZXh8R1VJQ3RybFRyZWVWaWV3X1NldEluZGVudHxHVUlDdHJsVHJlZVZpZXdfU2V0SW5zZXJ0TWFya3xHVUlDdHJsVHJlZVZpZXdfU2V0SW5zZXJ0TWFya0NvbG9yfEdVSUN0cmxUcmVlVmlld19TZXRJdGVtSGVpZ2h0fEdVSUN0cmxUcmVlVmlld19TZXRJdGVtUGFyYW18R1VJQ3RybFRyZWVWaWV3X1NldExpbmVDb2xvcnxHVUlDdHJsVHJlZVZpZXdfU2V0Tm9ybWFsSW1hZ2VMaXN0fEdVSUN0cmxUcmVlVmlld19TZXRTY3JvbGxUaW1lfEdVSUN0cmxUcmVlVmlld19TZXRTZWxlY3RlZHxHVUlDdHJsVHJlZVZpZXdfU2V0U2VsZWN0ZWRJbWFnZUluZGV4fEdVSUN0cmxUcmVlVmlld19TZXRTdGF0ZXxHVUlDdHJsVHJlZVZpZXdfU2V0U3RhdGVJbWFnZUluZGV4fEdVSUN0cmxUcmVlVmlld19TZXRTdGF0ZUltYWdlTGlzdHxHVUlDdHJsVHJlZVZpZXdfU2V0VGV4dHxHVUlDdHJsVHJlZVZpZXdfU2V0VGV4dENvbG9yfEdVSUN0cmxUcmVlVmlld19TZXRUb29sVGlwc3xHVUlDdHJsVHJlZVZpZXdfU2V0VW5pY29kZUZvcm1hdHxHVUlDdHJsVHJlZVZpZXdfU29ydHxHVUlJbWFnZUxpc3RfQWRkfEdVSUltYWdlTGlzdF9BZGRCaXRtYXB8R1VJSW1hZ2VMaXN0X0FkZEljb258R1VJSW1hZ2VMaXN0X0FkZE1hc2tlZHxHVUlJbWFnZUxpc3RfQmVnaW5EcmFnfEdVSUltYWdlTGlzdF9Db3B5fEdVSUltYWdlTGlzdF9DcmVhdGV8R1VJSW1hZ2VMaXN0X0Rlc3Ryb3l8R1VJSW1hZ2VMaXN0X0Rlc3Ryb3lJY29ufEdVSUltYWdlTGlzdF9EcmFnRW50ZXJ8R1VJSW1hZ2VMaXN0X0RyYWdMZWF2ZXxHVUlJbWFnZUxpc3RfRHJhZ01vdmV8R1VJSW1hZ2VMaXN0X0RyYXd8R1VJSW1hZ2VMaXN0X0RyYXdFeHxHVUlJbWFnZUxpc3RfRHVwbGljYXRlfEdVSUltYWdlTGlzdF9FbmREcmFnfEdVSUltYWdlTGlzdF9HZXRCa0NvbG9yfEdVSUltYWdlTGlzdF9HZXRJY29ufEdVSUltYWdlTGlzdF9HZXRJY29uSGVpZ2h0fEdVSUltYWdlTGlzdF9HZXRJY29uU2l6ZXxHVUlJbWFnZUxpc3RfR2V0SWNvblNpemVFeHxHVUlJbWFnZUxpc3RfR2V0SWNvbldpZHRofEdVSUltYWdlTGlzdF9HZXRJbWFnZUNvdW50fEdVSUltYWdlTGlzdF9HZXRJbWFnZUluZm9FeHxHVUlJbWFnZUxpc3RfUmVtb3ZlfEdVSUltYWdlTGlzdF9SZXBsYWNlSWNvbnxHVUlJbWFnZUxpc3RfU2V0QmtDb2xvcnxHVUlJbWFnZUxpc3RfU2V0SWNvblNpemV8R1VJSW1hZ2VMaXN0X1NldEltYWdlQ291bnR8R1VJSW1hZ2VMaXN0X1N3YXB8R1VJU2Nyb2xsQmFyc19FbmFibGVTY3JvbGxCYXJ8R1VJU2Nyb2xsQmFyc19HZXRTY3JvbGxCYXJJbmZvRXh8R1VJU2Nyb2xsQmFyc19HZXRTY3JvbGxCYXJSZWN0fEdVSVNjcm9sbEJhcnNfR2V0U2Nyb2xsQmFyUkdTdGF0ZXxHVUlTY3JvbGxCYXJzX0dldFNjcm9sbEJhclhZTGluZUJ1dHRvbnxHVUlTY3JvbGxCYXJzX0dldFNjcm9sbEJhclhZVGh1bWJCb3R0b218R1VJU2Nyb2xsQmFyc19HZXRTY3JvbGxCYXJYWVRodW1iVG9wfEdVSVNjcm9sbEJhcnNfR2V0U2Nyb2xsSW5mb3xHVUlTY3JvbGxCYXJzX0dldFNjcm9sbEluZm9FeHxHVUlTY3JvbGxCYXJzX0dldFNjcm9sbEluZm9NYXh8R1VJU2Nyb2xsQmFyc19HZXRTY3JvbGxJbmZvTWlufEdVSVNjcm9sbEJhcnNfR2V0U2Nyb2xsSW5mb1BhZ2V8R1VJU2Nyb2xsQmFyc19HZXRTY3JvbGxJbmZvUG9zfEdVSVNjcm9sbEJhcnNfR2V0U2Nyb2xsSW5mb1RyYWNrUG9zfEdVSVNjcm9sbEJhcnNfR2V0U2Nyb2xsUG9zfEdVSVNjcm9sbEJhcnNfR2V0U2Nyb2xsUmFuZ2V8R1VJU2Nyb2xsQmFyc19Jbml0fEdVSVNjcm9sbEJhcnNfU2Nyb2xsV2luZG93fEdVSVNjcm9sbEJhcnNfU2V0U2Nyb2xsSW5mb3xHVUlTY3JvbGxCYXJzX1NldFNjcm9sbEluZm9NYXh8R1VJU2Nyb2xsQmFyc19TZXRTY3JvbGxJbmZvTWlufEdVSVNjcm9sbEJhcnNfU2V0U2Nyb2xsSW5mb1BhZ2V8R1VJU2Nyb2xsQmFyc19TZXRTY3JvbGxJbmZvUG9zfEdVSVNjcm9sbEJhcnNfU2V0U2Nyb2xsUmFuZ2V8R1VJU2Nyb2xsQmFyc19TaG93U2Nyb2xsQmFyfEdVSVRvb2xUaXBfQWN0aXZhdGV8R1VJVG9vbFRpcF9BZGRUb29sfEdVSVRvb2xUaXBfQWRqdXN0UmVjdHxHVUlUb29sVGlwX0JpdHNUb1RURnxHVUlUb29sVGlwX0NyZWF0ZXxHVUlUb29sVGlwX0RlbFRvb2x8R1VJVG9vbFRpcF9EZXN0cm95fEdVSVRvb2xUaXBfRW51bVRvb2xzfEdVSVRvb2xUaXBfR2V0QnViYmxlSGVpZ2h0fEdVSVRvb2xUaXBfR2V0QnViYmxlU2l6ZXxHVUlUb29sVGlwX0dldEJ1YmJsZVdpZHRofEdVSVRvb2xUaXBfR2V0Q3VycmVudFRvb2x8R1VJVG9vbFRpcF9HZXREZWxheVRpbWV8R1VJVG9vbFRpcF9HZXRNYXJnaW58R1VJVG9vbFRpcF9HZXRNYXJnaW5FeHxHVUlUb29sVGlwX0dldE1heFRpcFdpZHRofEdVSVRvb2xUaXBfR2V0VGV4dHxHVUlUb29sVGlwX0dldFRpcEJrQ29sb3J8R1VJVG9vbFRpcF9HZXRUaXBUZXh0Q29sb3J8R1VJVG9vbFRpcF9HZXRUaXRsZUJpdE1hcHxHVUlUb29sVGlwX0dldFRpdGxlVGV4dHxHVUlUb29sVGlwX0dldFRvb2xDb3VudHxHVUlUb29sVGlwX0dldFRvb2xJbmZvfEdVSVRvb2xUaXBfSGl0VGVzdHxHVUlUb29sVGlwX05ld1Rvb2xSZWN0fEdVSVRvb2xUaXBfUG9wfEdVSVRvb2xUaXBfUG9wVXB8R1VJVG9vbFRpcF9TZXREZWxheVRpbWV8R1VJVG9vbFRpcF9TZXRNYXJnaW58R1VJVG9vbFRpcF9TZXRNYXhUaXBXaWR0aHxHVUlUb29sVGlwX1NldFRpcEJrQ29sb3J8R1VJVG9vbFRpcF9TZXRUaXBUZXh0Q29sb3J8R1VJVG9vbFRpcF9TZXRUaXRsZXxHVUlUb29sVGlwX1NldFRvb2xJbmZvfEdVSVRvb2xUaXBfU2V0V2luZG93VGhlbWV8R1VJVG9vbFRpcF9Ub29sRXhpc3RzfEdVSVRvb2xUaXBfVG9vbFRvQXJyYXl8R1VJVG9vbFRpcF9UcmFja0FjdGl2YXRlfEdVSVRvb2xUaXBfVHJhY2tQb3NpdGlvbnxHVUlUb29sVGlwX1RURlRvQml0c3xHVUlUb29sVGlwX1VwZGF0ZXxHVUlUb29sVGlwX1VwZGF0ZVRpcFRleHR8SGV4VG9TdHJpbmd8SUVfRXhhbXBsZXxJRV9JbnRyb2R1Y3Rpb258SUVfVmVyc2lvbkluZm98SUVBY3Rpb258SUVBdHRhY2h8SUVCb2R5UmVhZEhUTUx8SUVCb2R5UmVhZFRleHR8SUVCb2R5V3JpdGVIVE1MfElFQ3JlYXRlfElFQ3JlYXRlRW1iZWRkZWR8SUVEb2NHZXRPYmp8SUVEb2NJbnNlcnRIVE1MfElFRG9jSW5zZXJ0VGV4dHxJRURvY1JlYWRIVE1MfElFRG9jV3JpdGVIVE1MfElFRXJyb3JIYW5kbGVyRGVSZWdpc3RlcnxJRUVycm9ySGFuZGxlclJlZ2lzdGVyfElFRXJyb3JOb3RpZnl8SUVGb3JtRWxlbWVudENoZWNrQm94U2VsZWN0fElFRm9ybUVsZW1lbnRHZXRDb2xsZWN0aW9ufElFRm9ybUVsZW1lbnRHZXRPYmpCeU5hbWV8SUVGb3JtRWxlbWVudEdldFZhbHVlfElFRm9ybUVsZW1lbnRPcHRpb25TZWxlY3R8SUVGb3JtRWxlbWVudFJhZGlvU2VsZWN0fElFRm9ybUVsZW1lbnRTZXRWYWx1ZXxJRUZvcm1HZXRDb2xsZWN0aW9ufElFRm9ybUdldE9iakJ5TmFtZXxJRUZvcm1JbWFnZUNsaWNrfElFRm9ybVJlc2V0fElFRm9ybVN1Ym1pdHxJRUZyYW1lR2V0Q29sbGVjdGlvbnxJRUZyYW1lR2V0T2JqQnlOYW1lfElFR2V0T2JqQnlJZHxJRUdldE9iakJ5TmFtZXxJRUhlYWRJbnNlcnRFdmVudFNjcmlwdHxJRUltZ0NsaWNrfElFSW1nR2V0Q29sbGVjdGlvbnxJRUlzRnJhbWVTZXR8SUVMaW5rQ2xpY2tCeUluZGV4fElFTGlua0NsaWNrQnlUZXh0fElFTGlua0dldENvbGxlY3Rpb258SUVMb2FkV2FpdHxJRUxvYWRXYWl0VGltZW91dHxJRU5hdmlnYXRlfElFUHJvcGVydHlHZXR8SUVQcm9wZXJ0eVNldHxJRVF1aXR8SUVUYWJsZUdldENvbGxlY3Rpb258SUVUYWJsZVdyaXRlVG9BcnJheXxJRVRhZ05hbWVBbGxHZXRDb2xsZWN0aW9ufElFVGFnTmFtZUdldENvbGxlY3Rpb258SWlmfElOZXRFeHBsb3JlckNhcGFibGV8SU5ldEdldFNvdXJjZXxJTmV0TWFpbHxJTmV0U210cE1haWx8SXNQcmVzc2VkfE1hdGhDaGVja0RpdnxNYXh8TWVtR2xvYmFsQWxsb2N8TWVtR2xvYmFsRnJlZXxNZW1HbG9iYWxMb2NrfE1lbUdsb2JhbFNpemV8TWVtR2xvYmFsVW5sb2NrfE1lbU1vdmVNZW1vcnl8TWVtTXNnQm94fE1lbVNob3dFcnJvcnxNZW1WaXJ0dWFsQWxsb2N8TWVtVmlydHVhbEFsbG9jRXh8TWVtVmlydHVhbEZyZWV8TWVtVmlydHVhbEZyZWVFeHxNaW58TW91c2VUcmFwfE5hbWVkUGlwZXNfQ2FsbE5hbWVkUGlwZXxOYW1lZFBpcGVzX0Nvbm5lY3ROYW1lZFBpcGV8TmFtZWRQaXBlc19DcmVhdGVOYW1lZFBpcGV8TmFtZWRQaXBlc19DcmVhdGVQaXBlfE5hbWVkUGlwZXNfRGlzY29ubmVjdE5hbWVkUGlwZXxOYW1lZFBpcGVzX0dldE5hbWVkUGlwZUhhbmRsZVN0YXRlfE5hbWVkUGlwZXNfR2V0TmFtZWRQaXBlSW5mb3xOYW1lZFBpcGVzX1BlZWtOYW1lZFBpcGV8TmFtZWRQaXBlc19TZXROYW1lZFBpcGVIYW5kbGVTdGF0ZXxOYW1lZFBpcGVzX1RyYW5zYWN0TmFtZWRQaXBlfE5hbWVkUGlwZXNfV2FpdE5hbWVkUGlwZXxOZXRfU2hhcmVfQ29ubmVjdGlvbkVudW18TmV0X1NoYXJlX0ZpbGVDbG9zZXxOZXRfU2hhcmVfRmlsZUVudW18TmV0X1NoYXJlX0ZpbGVHZXRJbmZvfE5ldF9TaGFyZV9QZXJtU3RyfE5ldF9TaGFyZV9SZXNvdXJjZVN0cnxOZXRfU2hhcmVfU2Vzc2lvbkRlbHxOZXRfU2hhcmVfU2Vzc2lvbkVudW18TmV0X1NoYXJlX1Nlc3Npb25HZXRJbmZvfE5ldF9TaGFyZV9TaGFyZUFkZHxOZXRfU2hhcmVfU2hhcmVDaGVja3xOZXRfU2hhcmVfU2hhcmVEZWx8TmV0X1NoYXJlX1NoYXJlRW51bXxOZXRfU2hhcmVfU2hhcmVHZXRJbmZvfE5ldF9TaGFyZV9TaGFyZVNldEluZm98TmV0X1NoYXJlX1N0YXRpc3RpY3NHZXRTdnJ8TmV0X1NoYXJlX1N0YXRpc3RpY3NHZXRXcmt8Tm93fE5vd0NhbGN8Tm93Q2FsY0RhdGV8Tm93RGF0ZXxOb3dUaW1lfFBhdGhGdWxsfFBhdGhNYWtlfFBhdGhTcGxpdHxQcm9jZXNzR2V0TmFtZXxQcm9jZXNzR2V0UHJpb3JpdHl8UmFkaWFufFJlcGxhY2VTdHJpbmdJbkZpbGV8UnVuRE9TfFNjcmVlbkNhcHR1cmVfQ2FwdHVyZXxTY3JlZW5DYXB0dXJlX0NhcHR1cmVXbmR8U2NyZWVuQ2FwdHVyZV9TYXZlSW1hZ2V8U2NyZWVuQ2FwdHVyZV9TZXRCTVBGb3JtYXR8U2NyZWVuQ2FwdHVyZV9TZXRKUEdRdWFsaXR5fFNjcmVlbkNhcHR1cmVfU2V0VElGQ29sb3JEZXB0aHxTY3JlZW5DYXB0dXJlX1NldFRJRkNvbXByZXNzaW9ufFNlY3VyaXR5X19BZGp1c3RUb2tlblByaXZpbGVnZXN8U2VjdXJpdHlfX0dldEFjY291bnRTaWR8U2VjdXJpdHlfX0dldExlbmd0aFNpZHxTZWN1cml0eV9fR2V0VG9rZW5JbmZvcm1hdGlvbnxTZWN1cml0eV9fSW1wZXJzb25hdGVTZWxmfFNlY3VyaXR5X19Jc1ZhbGlkU2lkfFNlY3VyaXR5X19Mb29rdXBBY2NvdW50TmFtZXxTZWN1cml0eV9fTG9va3VwQWNjb3VudFNpZHxTZWN1cml0eV9fTG9va3VwUHJpdmlsZWdlVmFsdWV8U2VjdXJpdHlfX09wZW5Qcm9jZXNzVG9rZW58U2VjdXJpdHlfX09wZW5UaHJlYWRUb2tlbnxTZWN1cml0eV9fT3BlblRocmVhZFRva2VuRXh8U2VjdXJpdHlfX1NldFByaXZpbGVnZXxTZWN1cml0eV9fU2lkVG9TdHJpbmdTaWR8U2VjdXJpdHlfX1NpZFR5cGVTdHJ8U2VjdXJpdHlfX1N0cmluZ1NpZFRvU2lkfFNlbmRNZXNzYWdlfFNlbmRNZXNzYWdlQXxTZXREYXRlfFNldFRpbWV8U2luZ2xldG9ufFNvdW5kQ2xvc2V8U291bmRMZW5ndGh8U291bmRPcGVufFNvdW5kUGF1c2V8U291bmRQbGF5fFNvdW5kUG9zfFNvdW5kUmVzdW1lfFNvdW5kU2Vla3xTb3VuZFN0YXR1c3xTb3VuZFN0b3B8U1FMaXRlX0NoYW5nZXN8U1FMaXRlX0Nsb3NlfFNRTGl0ZV9EaXNwbGF5MkRSZXN1bHR8U1FMaXRlX0VuY29kZXxTUUxpdGVfRXJyQ29kZXxTUUxpdGVfRXJyTXNnfFNRTGl0ZV9Fc2NhcGV8U1FMaXRlX0V4ZWN8U1FMaXRlX0ZldGNoRGF0YXxTUUxpdGVfRmV0Y2hOYW1lc3xTUUxpdGVfR2V0VGFibGV8U1FMaXRlX0dldFRhYmxlMmR8U1FMaXRlX0xhc3RJbnNlcnRSb3dJRHxTUUxpdGVfTGliVmVyc2lvbnxTUUxpdGVfT3BlbnxTUUxpdGVfUXVlcnl8U1FMaXRlX1F1ZXJ5RmluYWxpemV8U1FMaXRlX1F1ZXJ5UmVzZXR8U1FMaXRlX1F1ZXJ5U2luZ2xlUm93fFNRTGl0ZV9TYXZlTW9kZXxTUUxpdGVfU2V0VGltZW91dHxTUUxpdGVfU2h1dGRvd258U1FMaXRlX1NRTGl0ZUV4ZXxTUUxpdGVfU3RhcnR1cHxTUUxpdGVfVG90YWxDaGFuZ2VzfFN0cmluZ0FkZENvbW1hfFN0cmluZ0JldHdlZW58U3RyaW5nRW5jcnlwdHxTdHJpbmdJbnNlcnR8U3RyaW5nUHJvcGVyfFN0cmluZ1JlcGVhdHxTdHJpbmdSZXZlcnNlfFN0cmluZ1NwbGl0fFN0cmluZ1RvSGV4fFRDUElwVG9OYW1lfFRlbXBGaWxlfFRpY2tzVG9UaW1lfFRpbWVyX0RpZmZ8VGltZXJfR2V0VGltZXJJRHxUaW1lcl9Jbml0fFRpbWVyX0tpbGxBbGxUaW1lcnN8VGltZXJfS2lsbFRpbWVyfFRpbWVyX1NldFRpbWVyfFRpbWVUb1RpY2tzfFZlcnNpb25Db21wYXJlfHZpQ2xvc2V8dmlFeGVjQ29tbWFuZHx2aUZpbmRHcGlifHZpR3BpYkJ1c1Jlc2V0fHZpR1RMfHZpT3Blbnx2aVNldEF0dHJpYnV0ZXx2aVNldFRpbWVvdXR8V2Vla051bWJlcklTT3xXaW5BUElfQXR0YWNoQ29uc29sZXxXaW5BUElfQXR0YWNoVGhyZWFkSW5wdXR8V2luQVBJX0JlZXB8V2luQVBJX0JpdEJsdHxXaW5BUElfQ2FsbE5leHRIb29rRXh8V2luQVBJX0NoZWNrfFdpbkFQSV9DbGllbnRUb1NjcmVlbnxXaW5BUElfQ2xvc2VIYW5kbGV8V2luQVBJX0NvbW1EbGdFeHRlbmRlZEVycm9yfFdpbkFQSV9Db3B5SWNvbnxXaW5BUElfQ3JlYXRlQml0bWFwfFdpbkFQSV9DcmVhdGVDb21wYXRpYmxlQml0bWFwfFdpbkFQSV9DcmVhdGVDb21wYXRpYmxlREN8V2luQVBJX0NyZWF0ZUV2ZW50fFdpbkFQSV9DcmVhdGVGaWxlfFdpbkFQSV9DcmVhdGVGb250fFdpbkFQSV9DcmVhdGVGb250SW5kaXJlY3R8V2luQVBJX0NyZWF0ZVByb2Nlc3N8V2luQVBJX0NyZWF0ZVNvbGlkQml0bWFwfFdpbkFQSV9DcmVhdGVTb2xpZEJydXNofFdpbkFQSV9DcmVhdGVXaW5kb3dFeHxXaW5BUElfRGVmV2luZG93UHJvY3xXaW5BUElfRGVsZXRlREN8V2luQVBJX0RlbGV0ZU9iamVjdHxXaW5BUElfRGVzdHJveUljb258V2luQVBJX0Rlc3Ryb3lXaW5kb3d8V2luQVBJX0RyYXdFZGdlfFdpbkFQSV9EcmF3RnJhbWVDb250cm9sfFdpbkFQSV9EcmF3SWNvbnxXaW5BUElfRHJhd0ljb25FeHxXaW5BUElfRHJhd1RleHR8V2luQVBJX0VuYWJsZVdpbmRvd3xXaW5BUElfRW51bURpc3BsYXlEZXZpY2VzfFdpbkFQSV9FbnVtV2luZG93c3xXaW5BUElfRW51bVdpbmRvd3NQb3B1cHxXaW5BUElfRW51bVdpbmRvd3NUb3B8V2luQVBJX0V4cGFuZEVudmlyb25tZW50U3RyaW5nc3xXaW5BUElfRXh0cmFjdEljb25FeHxXaW5BUElfRmF0YWxBcHBFeGl0fFdpbkFQSV9GaWxsUmVjdHxXaW5BUElfRmluZEV4ZWN1dGFibGV8V2luQVBJX0ZpbmRXaW5kb3d8V2luQVBJX0ZsYXNoV2luZG93fFdpbkFQSV9GbGFzaFdpbmRvd0V4fFdpbkFQSV9GbG9hdFRvSW50fFdpbkFQSV9GbHVzaEZpbGVCdWZmZXJzfFdpbkFQSV9Gb3JtYXRNZXNzYWdlfFdpbkFQSV9GcmFtZVJlY3R8V2luQVBJX0ZyZWVMaWJyYXJ5fFdpbkFQSV9HZXRBbmNlc3RvcnxXaW5BUElfR2V0QXN5bmNLZXlTdGF0ZXxXaW5BUElfR2V0Q2xhc3NOYW1lfFdpbkFQSV9HZXRDbGllbnRIZWlnaHR8V2luQVBJX0dldENsaWVudFJlY3R8V2luQVBJX0dldENsaWVudFdpZHRofFdpbkFQSV9HZXRDdXJyZW50UHJvY2Vzc3xXaW5BUElfR2V0Q3VycmVudFByb2Nlc3NJRHxXaW5BUElfR2V0Q3VycmVudFRocmVhZHxXaW5BUElfR2V0Q3VycmVudFRocmVhZElkfFdpbkFQSV9HZXRDdXJzb3JJbmZvfFdpbkFQSV9HZXREQ3xXaW5BUElfR2V0RGVza3RvcFdpbmRvd3xXaW5BUElfR2V0RGV2aWNlQ2Fwc3xXaW5BUElfR2V0RElCaXRzfFdpbkFQSV9HZXREbGdDdHJsSUR8V2luQVBJX0dldERsZ0l0ZW18V2luQVBJX0dldEZpbGVTaXplRXh8V2luQVBJX0dldEZvY3VzfFdpbkFQSV9HZXRGb3JlZ3JvdW5kV2luZG93fFdpbkFQSV9HZXRJY29uSW5mb3xXaW5BUElfR2V0TGFzdEVycm9yfFdpbkFQSV9HZXRMYXN0RXJyb3JNZXNzYWdlfFdpbkFQSV9HZXRNb2R1bGVIYW5kbGV8V2luQVBJX0dldE1vdXNlUG9zfFdpbkFQSV9HZXRNb3VzZVBvc1h8V2luQVBJX0dldE1vdXNlUG9zWXxXaW5BUElfR2V0T2JqZWN0fFdpbkFQSV9HZXRPcGVuRmlsZU5hbWV8V2luQVBJX0dldE92ZXJsYXBwZWRSZXN1bHR8V2luQVBJX0dldFBhcmVudHxXaW5BUElfR2V0UHJvY2Vzc0FmZmluaXR5TWFza3xXaW5BUElfR2V0U2F2ZUZpbGVOYW1lfFdpbkFQSV9HZXRTdGRIYW5kbGV8V2luQVBJX0dldFN0b2NrT2JqZWN0fFdpbkFQSV9HZXRTeXNDb2xvcnxXaW5BUElfR2V0U3lzQ29sb3JCcnVzaHxXaW5BUElfR2V0U3lzdGVtTWV0cmljc3xXaW5BUElfR2V0VGV4dEV4dGVudFBvaW50MzJ8V2luQVBJX0dldFdpbmRvd3xXaW5BUElfR2V0V2luZG93REN8V2luQVBJX0dldFdpbmRvd0hlaWdodHxXaW5BUElfR2V0V2luZG93TG9uZ3xXaW5BUElfR2V0V2luZG93UmVjdHxXaW5BUElfR2V0V2luZG93VGV4dHxXaW5BUElfR2V0V2luZG93VGhyZWFkUHJvY2Vzc0lkfFdpbkFQSV9HZXRXaW5kb3dXaWR0aHxXaW5BUElfR2V0WFlGcm9tUG9pbnR8V2luQVBJX0dsb2JhbE1lbVN0YXR1c3xXaW5BUElfR1VJREZyb21TdHJpbmd8V2luQVBJX0dVSURGcm9tU3RyaW5nRXh8V2luQVBJX0hpV29yZHxXaW5BUElfSW5Qcm9jZXNzfFdpbkFQSV9JbnRUb0Zsb2F0fFdpbkFQSV9JbnZhbGlkYXRlUmVjdHxXaW5BUElfSXNDbGFzc05hbWV8V2luQVBJX0lzV2luZG93fFdpbkFQSV9Jc1dpbmRvd1Zpc2libGV8V2luQVBJX0xvYWRCaXRtYXB8V2luQVBJX0xvYWRJbWFnZXxXaW5BUElfTG9hZExpYnJhcnl8V2luQVBJX0xvYWRMaWJyYXJ5RXh8V2luQVBJX0xvYWRTaGVsbDMySWNvbnxXaW5BUElfTG9hZFN0cmluZ3xXaW5BUElfTG9jYWxGcmVlfFdpbkFQSV9Mb1dvcmR8V2luQVBJX01ha2VEV29yZHxXaW5BUElfTUFLRUxBTkdJRHxXaW5BUElfTUFLRUxDSUR8V2luQVBJX01ha2VMb25nfFdpbkFQSV9NZXNzYWdlQmVlcHxXaW5BUElfTW91c2VfRXZlbnR8V2luQVBJX01vdmVXaW5kb3d8V2luQVBJX01zZ0JveHxXaW5BUElfTXVsRGl2fFdpbkFQSV9NdWx0aUJ5dGVUb1dpZGVDaGFyfFdpbkFQSV9NdWx0aUJ5dGVUb1dpZGVDaGFyRXh8V2luQVBJX09wZW5Qcm9jZXNzfFdpbkFQSV9Qb2ludEZyb21SZWN0fFdpbkFQSV9Qb3N0TWVzc2FnZXxXaW5BUElfUHJpbWFyeUxhbmdJZHxXaW5BUElfUHRJblJlY3R8V2luQVBJX1JlYWRGaWxlfFdpbkFQSV9SZWFkUHJvY2Vzc01lbW9yeXxXaW5BUElfUmVjdElzRW1wdHl8V2luQVBJX1JlZHJhd1dpbmRvd3xXaW5BUElfUmVnaXN0ZXJXaW5kb3dNZXNzYWdlfFdpbkFQSV9SZWxlYXNlQ2FwdHVyZXxXaW5BUElfUmVsZWFzZURDfFdpbkFQSV9TY3JlZW5Ub0NsaWVudHxXaW5BUElfU2VsZWN0T2JqZWN0fFdpbkFQSV9TZXRCa0NvbG9yfFdpbkFQSV9TZXRDYXB0dXJlfFdpbkFQSV9TZXRDdXJzb3J8V2luQVBJX1NldERlZmF1bHRQcmludGVyfFdpbkFQSV9TZXRESUJpdHN8V2luQVBJX1NldEV2ZW50fFdpbkFQSV9TZXRGb2N1c3xXaW5BUElfU2V0Rm9udHxXaW5BUElfU2V0SGFuZGxlSW5mb3JtYXRpb258V2luQVBJX1NldExhc3RFcnJvcnxXaW5BUElfU2V0UGFyZW50fFdpbkFQSV9TZXRQcm9jZXNzQWZmaW5pdHlNYXNrfFdpbkFQSV9TZXRTeXNDb2xvcnN8V2luQVBJX1NldFRleHRDb2xvcnxXaW5BUElfU2V0V2luZG93TG9uZ3xXaW5BUElfU2V0V2luZG93UG9zfFdpbkFQSV9TZXRXaW5kb3dzSG9va0V4fFdpbkFQSV9TZXRXaW5kb3dUZXh0fFdpbkFQSV9TaG93Q3Vyc29yfFdpbkFQSV9TaG93RXJyb3J8V2luQVBJX1Nob3dNc2d8V2luQVBJX1Nob3dXaW5kb3d8V2luQVBJX1N0cmluZ0Zyb21HVUlEfFdpbkFQSV9TdWJMYW5nSWR8V2luQVBJX1N5c3RlbVBhcmFtZXRlcnNJbmZvfFdpbkFQSV9Ud2lwc1BlclBpeGVsWHxXaW5BUElfVHdpcHNQZXJQaXhlbFl8V2luQVBJX1VuaG9va1dpbmRvd3NIb29rRXh8V2luQVBJX1VwZGF0ZUxheWVyZWRXaW5kb3d8V2luQVBJX1VwZGF0ZVdpbmRvd3xXaW5BUElfVmFsaWRhdGVDbGFzc05hbWV8V2luQVBJX1dhaXRGb3JJbnB1dElkbGV8V2luQVBJX1dhaXRGb3JNdWx0aXBsZU9iamVjdHN8V2luQVBJX1dhaXRGb3JTaW5nbGVPYmplY3R8V2luQVBJX1dpZGVDaGFyVG9NdWx0aUJ5dGV8V2luQVBJX1dpbmRvd0Zyb21Qb2ludHxXaW5BUElfV3JpdGVDb25zb2xlfFdpbkFQSV9Xcml0ZUZpbGV8V2luQVBJX1dyaXRlUHJvY2Vzc01lbW9yeXxXaW5OZXRfQWRkQ29ubmVjdGlvbnxXaW5OZXRfQWRkQ29ubmVjdGlvbjJ8V2luTmV0X0FkZENvbm5lY3Rpb24zfFdpbk5ldF9DYW5jZWxDb25uZWN0aW9ufFdpbk5ldF9DYW5jZWxDb25uZWN0aW9uMnxXaW5OZXRfQ2xvc2VFbnVtfFdpbk5ldF9Db25uZWN0aW9uRGlhbG9nfFdpbk5ldF9Db25uZWN0aW9uRGlhbG9nMXxXaW5OZXRfRGlzY29ubmVjdERpYWxvZ3xXaW5OZXRfRGlzY29ubmVjdERpYWxvZzF8V2luTmV0X0VudW1SZXNvdXJjZXxXaW5OZXRfR2V0Q29ubmVjdGlvbnxXaW5OZXRfR2V0Q29ubmVjdGlvblBlcmZvcm1hbmNlfFdpbk5ldF9HZXRMYXN0RXJyb3J8V2luTmV0X0dldE5ldHdvcmtJbmZvcm1hdGlvbnxXaW5OZXRfR2V0UHJvdmlkZXJOYW1lfFdpbk5ldF9HZXRSZXNvdXJjZUluZm9ybWF0aW9ufFdpbk5ldF9HZXRSZXNvdXJjZVBhcmVudHxXaW5OZXRfR2V0VW5pdmVyc2FsTmFtZXxXaW5OZXRfR2V0VXNlcnxXaW5OZXRfT3BlbkVudW18V2luTmV0X1Jlc3RvcmVDb25uZWN0aW9ufFdpbk5ldF9Vc2VDb25uZWN0aW9ufFdvcmRfVmVyc2lvbkluZm98V29yZEF0dGFjaHxXb3JkQ3JlYXRlfFdvcmREb2NBZGR8V29yZERvY0FkZExpbmt8V29yZERvY0FkZFBpY3R1cmV8V29yZERvY0Nsb3NlfFdvcmREb2NGaW5kUmVwbGFjZXxXb3JkRG9jR2V0Q29sbGVjdGlvbnxXb3JkRG9jTGlua0dldENvbGxlY3Rpb258V29yZERvY09wZW58V29yZERvY1ByaW50fFdvcmREb2NQcm9wZXJ0eUdldHxXb3JkRG9jUHJvcGVydHlTZXR8V29yZERvY1NhdmV8V29yZERvY1NhdmVBc3xXb3JkRXJyb3JIYW5kbGVyRGVSZWdpc3RlcnxXb3JkRXJyb3JIYW5kbGVyUmVnaXN0ZXJ8V29yZEVycm9yTm90aWZ5fFdvcmRNYWNyb1J1bnxXb3JkUHJvcGVydHlHZXR8V29yZFByb3BlcnR5U2V0fFdvcmRRdWl0fCcgKwogICAgICAgICdjZXxjb21tZW50cy1lbmR8Y29tbWVudHMtc3RhcnR8Y3N8aW5jbHVkZXxpbmNsdWRlLW9uY2V8Tm9UcmF5SWNvbnxSZXF1aXJlQWRtaW58JyArCiAgICAgICAgJ0F1dG9JdDNXcmFwcGVyX0F1M0NoZWNrX1BhcmFtZXRlcnN8QXV0b0l0M1dyYXBwZXJfQXUzQ2hlY2tfU3RvcF9Pbldhcm5pbmd8QXV0b0l0M1dyYXBwZXJfQ2hhbmdlMkNVSXxBdXRvSXQzV3JhcHBlcl9Db21wcmVzc2lvbnxBdXRvSXQzV3JhcHBlcl9jdnNXcmFwcGVyX1BhcmFtZXRlcnN8QXV0b0l0M1dyYXBwZXJfSWNvbnxBdXRvSXQzV3JhcHBlcl9PdXRmaWxlfEF1dG9JdDNXcmFwcGVyX091dGZpbGVfVHlwZXxBdXRvSXQzV3JhcHBlcl9QbHVnaW5fRnVuY3N8QXV0b0l0M1dyYXBwZXJfUmVzX0NvbW1lbnR8QXV0b0l0M1dyYXBwZXJfUmVzX0Rlc2NyaXB0aW9ufEF1dG9JdDNXcmFwcGVyX1Jlc19GaWVsZHxBdXRvSXQzV3JhcHBlcl9SZXNfRmlsZV9BZGR8QXV0b0l0M1dyYXBwZXJfUmVzX0ZpbGV2ZXJzaW9ufEF1dG9JdDNXcmFwcGVyX1Jlc19GaWxlVmVyc2lvbl9BdXRvSW5jcmVtZW50fEF1dG9JdDNXcmFwcGVyX1Jlc19JY29uX0FkZHxBdXRvSXQzV3JhcHBlcl9SZXNfTGFuZ3VhZ2V8QXV0b0l0M1dyYXBwZXJfUmVzX0xlZ2FsQ29weXJpZ2h0fEF1dG9JdDNXcmFwcGVyX3Jlc19yZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbHxBdXRvSXQzV3JhcHBlcl9SZXNfU2F2ZVNvdXJjZXxBdXRvSXQzV3JhcHBlcl9SdW5fQWZ0ZXJ8QXV0b0l0M1dyYXBwZXJfUnVuX0F1M2NoZWNrfEF1dG9JdDNXcmFwcGVyX1J1bl9CZWZvcmV8QXV0b0l0M1dyYXBwZXJfUnVuX2N2c1dyYXBwZXJ8QXV0b0l0M1dyYXBwZXJfUnVuX0RlYnVnX01vZGV8QXV0b0l0M1dyYXBwZXJfUnVuX09iZnVzY2F0b3J8QXV0b0l0M1dyYXBwZXJfUnVuX1RpZHl8QXV0b0l0M1dyYXBwZXJfVGlkeV9TdG9wX09uRXJyb3J8QXV0b0l0M1dyYXBwZXJfVXNlQW5zaXxBdXRvSXQzV3JhcHBlcl9Vc2VVcHh8QXV0b0l0M1dyYXBwZXJfVXNlWDY0fEF1dG9JdDNXcmFwcGVyX1ZlcnNpb258RW5kUmVnaW9ufGZvcmNlcmVmfE9iZnVzY2F0b3JfSWdub3JlX0Z1bmNzfE9iZnVzY2F0b3JfSWdub3JlX1ZhcmlhYmxlc3xPYmZ1c2NhdG9yX1BhcmFtZXRlcnN8UmVnaW9ufFRpZHlfUGFyYW1ldGVycyc7CiAgICB2YXIgYXRLZXl3b3JkcyA9ICdBcHBEYXRhQ29tbW9uRGlyfEFwcERhdGFEaXJ8QXV0b0l0RXhlfEF1dG9JdFBJRHxBdXRvSXRVbmljb2RlfEF1dG9JdFZlcnNpb258QXV0b0l0WDY0fENPTV9FdmVudE9ianxDb21tb25GaWxlc0RpcnxDb21waWxlZHxDb21wdXRlck5hbWV8Q29tU3BlY3xDUnxDUkxGfERlc2t0b3BDb21tb25EaXJ8RGVza3RvcERlcHRofERlc2t0b3BEaXJ8RGVza3RvcEhlaWdodHxEZXNrdG9wUmVmcmVzaHxEZXNrdG9wV2lkdGh8RG9jdW1lbnRzQ29tbW9uRGlyfGVycm9yfGV4aXRDb2RlfGV4aXRNZXRob2R8ZXh0ZW5kZWR8RmF2b3JpdGVzQ29tbW9uRGlyfEZhdm9yaXRlc0RpcnxHVUlfQ3RybEhhbmRsZXxHVUlfQ3RybElkfEdVSV9EcmFnRmlsZXxHVUlfRHJhZ0lkfEdVSV9Ecm9wSWR8R1VJX1dpbkhhbmRsZXxIb21lRHJpdmV8SG9tZVBhdGh8SG9tZVNoYXJlfEhvdEtleVByZXNzZWR8SE9VUnxJbmV0R2V0QWN0aXZlfEluZXRHZXRCeXRlc1JlYWR8SVBBZGRyZXNzMXxJUEFkZHJlc3MyfElQQWRkcmVzczN8SVBBZGRyZXNzNHxLQkxheW91dHxMRnxMb2dvbkROU0RvbWFpbnxMb2dvbkRvbWFpbnxMb2dvblNlcnZlcnxNREFZfE1JTnxNT058TXlEb2N1bWVudHNEaXJ8TnVtUGFyYW1zfE9TQnVpbGR8T1NMYW5nfE9TU2VydmljZVBhY2t8T1NUWVBFfE9TVmVyc2lvbnxQcm9jZXNzb3JBcmNofFByb2dyYW1GaWxlc0RpcnxQcm9ncmFtc0NvbW1vbkRpcnxQcm9ncmFtc0RpcnxTY3JpcHREaXJ8U2NyaXB0RnVsbFBhdGh8U2NyaXB0TGluZU51bWJlcnxTY3JpcHROYW1lfFNFQ3xTdGFydE1lbnVDb21tb25EaXJ8U3RhcnRNZW51RGlyfFN0YXJ0dXBDb21tb25EaXJ8U3RhcnR1cERpcnxTV19ESVNBQkxFfFNXX0VOQUJMRXxTV19ISURFfFNXX0xPQ0t8U1dfTUFYSU1JWkV8U1dfTUlOSU1JWkV8U1dfUkVTVE9SRXxTV19TSE9XfFNXX1NIT1dERUZBVUxUfFNXX1NIT1dNQVhJTUlaRUR8U1dfU0hPV01JTklNSVpFRHxTV19TSE9XTUlOTk9BQ1RJVkV8U1dfU0hPV05BfFNXX1NIT1dOT0FDVElWQVRFfFNXX1NIT1dOT1JNQUx8U1dfVU5MT0NLfFN5c3RlbURpcnxUQUJ8VGVtcERpcnxUUkFZX0lEfFRyYXlJY29uRmxhc2hpbmd8VHJheUljb25WaXNpYmxlfFVzZXJOYW1lfFVzZXJQcm9maWxlRGlyfFdEQVl8V2luZG93c0RpcnxXb3JraW5nRGlyfFlEQVl8WUVBUic7CiAgICAKICAgIHRoaXMuJHJ1bGVzID0geyBzdGFydDogCiAgICAgICBbIHsgdG9rZW46ICdjb21tZW50LmxpbmUuYWhrJywgcmVnZXg6ICcoPzpefCApOy4qJCcgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuYmxvY2suYWhrJywKICAgICAgICAgICByZWdleDogJy9cXConLCBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5ibG9jay5haGsnLCByZWdleDogJ1xcKi8nLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay5haGsnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAnZG9jLmNvbW1lbnQuYWhrJywKICAgICAgICAgICByZWdleDogJyNjcycsIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdkb2MuY29tbWVudC5haGsnLCByZWdleDogJyNjZScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdkb2MuY29tbWVudC5haGsnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb21tYW5kLmFoaycsCiAgICAgICAgICAgcmVnZXg6ICcoPzpcXGJ8XikoPzphbGxvd3NhbWVsaW5lY29tbWVudHN8Y2xpcGJvYXJkdGltZW91dHxjb21tZW50ZmxhZ3xlcnJvcnN0ZG91dHxlc2NhcGVjaGFyfGhvdGtleWludGVydmFsfGhvdGtleW1vZGlmaWVydGltZW91dHxob3RzdHJpbmd8aW5jbHVkZXxpbmNsdWRlYWdhaW58aW5zdGFsbGtleWJkaG9va3xpbnN0YWxsbW91c2Vob29rfGtleWhpc3Rvcnl8bHRyaW18bWF4aG90a2V5c3BlcmludGVydmFsfG1heG1lbXxtYXh0aHJlYWRzfG1heHRocmVhZHNidWZmZXJ8bWF4dGhyZWFkc3BlcmhvdGtleXxub2Vudnxub3RyYXlpY29ufHBlcnNpc3RlbnR8c2luZ2xlaW5zdGFuY2V8dXNlaG9va3x3aW5hY3RpdmF0ZWZvcmNlfGF1dG90cmltfGJsb2NraW5wdXR8Y2xpY2t8Y2xpcHdhaXR8Y29udGludWV8Y29udHJvbHxjb250cm9sY2xpY2t8Y29udHJvbGZvY3VzfGNvbnRyb2xnZXR8Y29udHJvbGdldGZvY3VzfGNvbnRyb2xnZXRwb3N8Y29udHJvbGdldHRleHR8Y29udHJvbG1vdmV8Y29udHJvbHNlbmR8Y29udHJvbHNlbmRyYXd8Y29udHJvbHNldHRleHR8Y29vcmRtb2RlfGNyaXRpY2FsfGRldGVjdGhpZGRlbnRleHR8ZGV0ZWN0aGlkZGVud2luZG93c3xkcml2ZXxkcml2ZWdldHxkcml2ZXNwYWNlZnJlZXxlZGl0fGVuZHJlcGVhdHxlbnZhZGR8ZW52ZGl2fGVudmdldHxlbnZtdWx0fGVudnNldHxlbnZzdWJ8ZW52dXBkYXRlfGV4aXR8ZXhpdGFwcHxmaWxlYXBwZW5kfGZpbGVjb3B5fGZpbGVjb3B5ZGlyfGZpbGVjcmVhdGVkaXJ8ZmlsZWNyZWF0ZXNob3J0Y3V0fGZpbGVkZWxldGV8ZmlsZWdldGF0dHJpYnxmaWxlZ2V0c2hvcnRjdXR8ZmlsZWdldHNpemV8ZmlsZWdldHRpbWV8ZmlsZWdldHZlcnNpb258ZmlsZWluc3RhbGx8ZmlsZW1vdmV8ZmlsZW1vdmVkaXJ8ZmlsZXJlYWR8ZmlsZXJlYWRsaW5lfGZpbGVyZWN5Y2xlfGZpbGVyZWN5Y2xlZW1wdHl8ZmlsZXJlbW92ZWRpcnxmaWxlc2VsZWN0ZmlsZXxmaWxlc2VsZWN0Zm9sZGVyfGZpbGVzZXRhdHRyaWJ8ZmlsZXNldHRpbWV8Zm9ybWF0dGltZXxnZXRrZXlzdGF0ZXxnb3N1Ynxnb3RvfGdyb3VwYWN0aXZhdGV8Z3JvdXBhZGR8Z3JvdXBjbG9zZXxncm91cGRlYWN0aXZhdGV8Z3VpfGd1aWNvbnRyb2x8Z3VpY29udHJvbGdldHxoaWRlYXV0b2l0d2lufGhvdGtleXxpZmVxdWFsfGlmZXhpc3R8aWZncmVhdGVyfGlmZ3JlYXRlcm9yZXF1YWx8aWZpbnN0cmluZ3xpZmxlc3N8aWZsZXNzb3JlcXVhbHxpZm1zZ2JveHxpZm5vdGVxdWFsfGlmbm90ZXhpc3R8aWZub3RpbnN0cmluZ3xpZndpbmFjdGl2ZXxpZndpbmV4aXN0fGlmd2lubm90YWN0aXZlfGlmd2lubm90ZXhpc3R8aW1hZ2VzZWFyY2h8aW5pZGVsZXRlfGluaXJlYWR8aW5pd3JpdGV8aW5wdXR8aW5wdXRib3h8a2V5aGlzdG9yeXxrZXl3YWl0fGxpc3Rob3RrZXlzfGxpc3RsaW5lc3xsaXN0dmFyc3xtZW51fG1vdXNlY2xpY2t8bW91c2VjbGlja2RyYWd8bW91c2VnZXRwb3N8bW91c2Vtb3ZlfG1zZ2JveHxvbmV4aXR8b3V0cHV0ZGVidWd8cGF1c2V8cGl4ZWxnZXRjb2xvcnxwaXhlbHNlYXJjaHxwb3N0bWVzc2FnZXxwcm9jZXNzfHByb2dyZXNzfHJhbmRvbXxyZWdkZWxldGV8cmVncmVhZHxyZWd3cml0ZXxyZWxvYWR8cmVwZWF0fHJ1bnxydW5hc3xydW53YWl0fHNlbmR8c2VuZGV2ZW50fHNlbmRpbnB1dHxzZW5kbW9kZXxzZW5kcGxheXxzZW5kbWVzc2FnZXxzZW5kcmF3fHNldGJhdGNobGluZXN8c2V0Y2Fwc2xvY2tzdGF0ZXxzZXRjb250cm9sZGVsYXl8c2V0ZGVmYXVsdG1vdXNlc3BlZWR8c2V0ZW52fHNldGZvcm1hdHxzZXRrZXlkZWxheXxzZXRtb3VzZWRlbGF5fHNldG51bWxvY2tzdGF0ZXxzZXRzY3JvbGxsb2Nrc3RhdGV8c2V0c3RvcmVjYXBzbG9ja21vZGV8c2V0dGltZXJ8c2V0dGl0bGVtYXRjaG1vZGV8c2V0d2luZGVsYXl8c2V0d29ya2luZ2RpcnxzaHV0ZG93bnxzbGVlcHxzb3J0fHNvdW5kYmVlcHxzb3VuZGdldHxzb3VuZGdldHdhdmV2b2x1bWV8c291bmRwbGF5fHNvdW5kc2V0fHNvdW5kc2V0d2F2ZXZvbHVtZXxzcGxhc2hpbWFnZXxzcGxhc2h0ZXh0b2ZmfHNwbGFzaHRleHRvbnxzcGxpdHBhdGh8c3RhdHVzYmFyZ2V0dGV4dHxzdGF0dXNiYXJ3YWl0fHN0cmluZ2Nhc2VzZW5zZXxzdHJpbmdnZXRwb3N8c3RyaW5nbGVmdHxzdHJpbmdsZW58c3RyaW5nbG93ZXJ8c3RyaW5nbWlkfHN0cmluZ3JlcGxhY2V8c3RyaW5ncmlnaHR8c3RyaW5nc3BsaXR8c3RyaW5ndHJpbWxlZnR8c3RyaW5ndHJpbXJpZ2h0fHN0cmluZ3VwcGVyfHN1c3BlbmR8c3lzZ2V0fHRocmVhZHx0b29sdGlwfHRyYW5zZm9ybXx0cmF5dGlwfHVybGRvd25sb2FkdG9maWxlfHdoaWxlfHdpbmFjdGl2YXRlfHdpbmFjdGl2YXRlYm90dG9tfHdpbmNsb3NlfHdpbmdldHx3aW5nZXRhY3RpdmVzdGF0c3x3aW5nZXRhY3RpdmV0aXRsZXx3aW5nZXRjbGFzc3x3aW5nZXRwb3N8d2luZ2V0dGV4dHx3aW5nZXR0aXRsZXx3aW5oaWRlfHdpbmtpbGx8d2lubWF4aW1pemV8d2lubWVudXNlbGVjdGl0ZW18d2lubWluaW1pemV8d2lubWluaW1pemVhbGx8d2lubWluaW1pemVhbGx1bmRvfHdpbm1vdmV8d2lucmVzdG9yZXx3aW5zZXR8d2luc2V0dGl0bGV8d2luc2hvd3x3aW53YWl0fHdpbndhaXRhY3RpdmV8d2lud2FpdGNsb3NlfHdpbndhaXRub3RhY3RpdmUpXFxiJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5haGsnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XFxifF4pKD86aWZ8ZWxzZXxyZXR1cm58bG9vcHxicmVha3xmb3J8d2hpbGV8Z2xvYmFsfGxvY2FsfGJ5cmVmKVxcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmFoaycsCiAgICAgICAgICAgcmVnZXg6ICcoPzpcXGJ8XikoPzphYnN8YWNvc3xhc2N8YXNpbnxhdGFufGNlaWx8Y2hyfGNvc3xkbGxjYWxsfGV4cHxmaWxlZXhpc3R8Zmxvb3J8Z2V0a2V5c3RhdGV8aWxfYWRkfGlsX2NyZWF0ZXxpbF9kZXN0cm95fGluc3RyfHN1YnN0cnxpc2Z1bmN8aXNsYWJlbHxsbnxsb2d8bHZfYWRkfGx2X2RlbGV0ZXxsdl9kZWxldGVjb2x8bHZfZ2V0Y291bnR8bHZfZ2V0bmV4dHxsdl9nZXR0ZXh0fGx2X2luc2VydHxsdl9pbnNlcnRjb2x8bHZfbW9kaWZ5fGx2X21vZGlmeWNvbHxsdl9zZXRpbWFnZWxpc3R8bW9kfG9ubWVzc2FnZXxudW1nZXR8bnVtcHV0fHJlZ2lzdGVyY2FsbGJhY2t8cmVnZXhtYXRjaHxyZWdleHJlcGxhY2V8cm91bmR8c2lufHRhbnxzcXJ0fHN0cmxlbnxzYl9zZXRpY29ufHNiX3NldHBhcnRzfHNiX3NldHRleHR8dHZfYWRkfHR2X2RlbGV0ZXx0dl9nZXRjaGlsZHx0dl9nZXRjb3VudHx0dl9nZXRuZXh0fHR2X2dldHx0dl9nZXRwYXJlbnR8dHZfZ2V0cHJldnx0dl9nZXRzZWxlY3Rpb258dHZfZ2V0dGV4dHx0dl9tb2RpZnl8dmFyc2V0Y2FwYWNpdHl8d2luYWN0aXZlfHdpbmV4aXN0KVxcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICd2YXJpYWJsZS5wcmVkZWZpbmVkLmFoaycsCiAgICAgICAgICAgcmVnZXg6ICcoPzpcXGJ8XikoPzphX2Foa3BhdGh8YV9haGt2ZXJzaW9ufGFfYXBwZGF0YXxhX2FwcGRhdGFjb21tb258YV9hdXRvdHJpbXxhX2JhdGNobGluZXN8YV9jYXJldHh8YV9jYXJldHl8YV9jb21wdXRlcm5hbWV8YV9jb250cm9sZGVsYXl8YV9jdXJzb3J8YV9kZHxhX2RkZHxhX2RkZGR8YV9kZWZhdWx0bW91c2VzcGVlZHxhX2Rlc2t0b3B8YV9kZXNrdG9wY29tbW9ufGFfZGV0ZWN0aGlkZGVudGV4dHxhX2RldGVjdGhpZGRlbndpbmRvd3N8YV9lbmRjaGFyfGFfZXZlbnRpbmZvfGFfZXhpdHJlYXNvbnxhX2Zvcm1hdGZsb2F0fGFfZm9ybWF0aW50ZWdlcnxhX2d1aXxhX2d1aWV2ZW50fGFfZ3VpY29udHJvbHxhX2d1aWNvbnRyb2xldmVudHxhX2d1aWhlaWdodHxhX2d1aXdpZHRofGFfZ3VpeHxhX2d1aXl8YV9ob3VyfGFfaWNvbmZpbGV8YV9pY29uaGlkZGVufGFfaWNvbm51bWJlcnxhX2ljb250aXB8YV9pbmRleHxhX2lwYWRkcmVzczF8YV9pcGFkZHJlc3MyfGFfaXBhZGRyZXNzM3xhX2lwYWRkcmVzczR8YV9pc2FkbWlufGFfaXNjb21waWxlZHxhX2lzY3JpdGljYWx8YV9pc3BhdXNlZHxhX2lzc3VzcGVuZGVkfGFfa2V5ZGVsYXl8YV9sYW5ndWFnZXxhX2xhc3RlcnJvcnxhX2xpbmVmaWxlfGFfbGluZW51bWJlcnxhX2xvb3BmaWVsZHxhX2xvb3BmaWxlYXR0cmlifGFfbG9vcGZpbGVkaXJ8YV9sb29wZmlsZWV4dHxhX2xvb3BmaWxlZnVsbHBhdGh8YV9sb29wZmlsZWxvbmdwYXRofGFfbG9vcGZpbGVuYW1lfGFfbG9vcGZpbGVzaG9ydG5hbWV8YV9sb29wZmlsZXNob3J0cGF0aHxhX2xvb3BmaWxlc2l6ZXxhX2xvb3BmaWxlc2l6ZWtifGFfbG9vcGZpbGVzaXplbWJ8YV9sb29wZmlsZXRpbWVhY2Nlc3NlZHxhX2xvb3BmaWxldGltZWNyZWF0ZWR8YV9sb29wZmlsZXRpbWVtb2RpZmllZHxhX2xvb3ByZWFkbGluZXxhX2xvb3ByZWdrZXl8YV9sb29wcmVnbmFtZXxhX2xvb3ByZWdzdWJrZXl8YV9sb29wcmVndGltZW1vZGlmaWVkfGFfbG9vcHJlZ3R5cGV8YV9tZGF5fGFfbWlufGFfbW18YV9tbW18YV9tbW1tfGFfbW9ufGFfbW91c2VkZWxheXxhX21zZWN8YV9teWRvY3VtZW50c3xhX25vd3xhX25vd3V0Y3xhX251bWJhdGNobGluZXN8YV9vc3R5cGV8YV9vc3ZlcnNpb258YV9wcmlvcmhvdGtleXxwcm9ncmFtZmlsZXN8YV9wcm9ncmFtZmlsZXN8YV9wcm9ncmFtc3xhX3Byb2dyYW1zY29tbW9ufGFfc2NyZWVuaGVpZ2h0fGFfc2NyZWVud2lkdGh8YV9zY3JpcHRkaXJ8YV9zY3JpcHRmdWxscGF0aHxhX3NjcmlwdG5hbWV8YV9zZWN8YV9zcGFjZXxhX3N0YXJ0bWVudXxhX3N0YXJ0bWVudWNvbW1vbnxhX3N0YXJ0dXB8YV9zdGFydHVwY29tbW9ufGFfc3RyaW5nY2FzZXNlbnNlfGFfdGFifGFfdGVtcHxhX3RoaXNmdW5jfGFfdGhpc2hvdGtleXxhX3RoaXNsYWJlbHxhX3RoaXNtZW51fGFfdGhpc21lbnVpdGVtfGFfdGhpc21lbnVpdGVtcG9zfGFfdGlja2NvdW50fGFfdGltZWlkbGV8YV90aW1laWRsZXBoeXNpY2FsfGFfdGltZXNpbmNlcHJpb3Job3RrZXl8YV90aW1lc2luY2V0aGlzaG90a2V5fGFfdGl0bGVtYXRjaG1vZGV8YV90aXRsZW1hdGNobW9kZXNwZWVkfGFfdXNlcm5hbWV8YV93ZGF5fGFfd2luZGVsYXl8YV93aW5kaXJ8YV93b3JraW5nZGlyfGFfeWRheXxhX3llYXJ8YV95d2Vla3xhX3l5eXl8Y2xpcGJvYXJkfGNsaXBib2FyZGFsbHxjb21zcGVjfGVycm9ybGV2ZWwpXFxiJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuY29uc3RhbnQuYWhrJywKICAgICAgICAgICByZWdleDogJyg/OlxcYnxeKSg/OnNoaWZ0fGxzaGlmdHxyc2hpZnR8YWx0fGxhbHR8cmFsdHxjb250cm9sfGxjb250cm9sfHJjb250cm9sfGN0cmx8bGN0cmx8cmN0cmx8bHdpbnxyd2lufGFwcHNrZXl8YWx0ZG93bnxhbHR1cHxzaGlmdGRvd258c2hpZnR1cHxjdHJsZG93bnxjdHJsdXB8bHdpbmRvd258bHdpbnVwfHJ3aW5kb3dufHJ3aW51cHxsYnV0dG9ufHJidXR0b258bWJ1dHRvbnx3aGVlbHVwfHdoZWVsbGVmdHx3aGVlbHJpZ2h0fHdoZWVsZG93bnx4YnV0dG9uMXx4YnV0dG9uMnxqb3kxfGpveTJ8am95M3xqb3k0fGpveTV8am95Nnxqb3k3fGpveTh8am95OXxqb3kxMHxqb3kxMXxqb3kxMnxqb3kxM3xqb3kxNHxqb3kxNXxqb3kxNnxqb3kxN3xqb3kxOHxqb3kxOXxqb3kyMHxqb3kyMXxqb3kyMnxqb3kyM3xqb3kyNHxqb3kyNXxqb3kyNnxqb3kyN3xqb3kyOHxqb3kyOXxqb3kzMHxqb3kzMXxqb3kzMnxqb3l4fGpveXl8am95enxqb3lyfGpveXV8am95dnxqb3lwb3Z8am95bmFtZXxqb3lidXR0b25zfGpveWF4ZXN8am95aW5mb3xzcGFjZXx0YWJ8ZW50ZXJ8ZXNjYXBlfGVzY3xiYWNrc3BhY2V8YnN8ZGVsZXRlfGRlbHxpbnNlcnR8aW5zfHBndXB8cGdkbnxob21lfGVuZHx1cHxkb3dufGxlZnR8cmlnaHR8cHJpbnRzY3JlZW58Y3RybGJyZWFrfHBhdXNlfHNjcm9sbGxvY2t8Y2Fwc2xvY2t8bnVtbG9ja3xudW1wYWQwfG51bXBhZDF8bnVtcGFkMnxudW1wYWQzfG51bXBhZDR8bnVtcGFkNXxudW1wYWQ2fG51bXBhZDd8bnVtcGFkOHxudW1wYWQ5fG51bXBhZG11bHR8bnVtcGFkYWRkfG51bXBhZHN1YnxudW1wYWRkaXZ8bnVtcGFkZG90fG51bXBhZGRlbHxudW1wYWRpbnN8bnVtcGFkY2xlYXJ8bnVtcGFkdXB8bnVtcGFkZG93bnxudW1wYWRsZWZ0fG51bXBhZHJpZ2h0fG51bXBhZGhvbWV8bnVtcGFkZW5kfG51bXBhZHBndXB8bnVtcGFkcGdkbnxudW1wYWRlbnRlcnxmMXxmMnxmM3xmNHxmNXxmNnxmN3xmOHxmOXxmMTB8ZjExfGYxMnxmMTN8ZjE0fGYxNXxmMTZ8ZjE3fGYxOHxmMTl8ZjIwfGYyMXxmMjJ8ZjIzfGYyNHxicm93c2VyX2JhY2t8YnJvd3Nlcl9mb3J3YXJkfGJyb3dzZXJfcmVmcmVzaHxicm93c2VyX3N0b3B8YnJvd3Nlcl9zZWFyY2h8YnJvd3Nlcl9mYXZvcml0ZXN8YnJvd3Nlcl9ob21lfHZvbHVtZV9tdXRlfHZvbHVtZV9kb3dufHZvbHVtZV91cHxtZWRpYV9uZXh0fG1lZGlhX3ByZXZ8bWVkaWFfc3RvcHxtZWRpYV9wbGF5X3BhdXNlfGxhdW5jaF9tYWlsfGxhdW5jaF9tZWRpYXxsYXVuY2hfYXBwMXxsYXVuY2hfYXBwMilcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUucGFyYW1ldGVyJywKICAgICAgICAgICByZWdleDogJyg/OlxcYnxeKSg/OnBpeGVsfG1vdXNlfHNjcmVlbnxyZWxhdGl2ZXxyZ2J8bHRyaW18cnRyaW18am9pbnxsb3d8YmVsb3dub3JtYWx8bm9ybWFsfGFib3Zlbm9ybWFsfGhpZ2h8cmVhbHRpbWV8YWhrX2lkfGFoa19waWR8YWhrX2NsYXNzfGFoa19ncm91cHxiZXR3ZWVufGNvbnRhaW5zfGlufGlzfGludGVnZXJ8ZmxvYXR8aW50ZWdlcmZhc3R8ZmxvYXRmYXN0fG51bWJlcnxkaWdpdHx4ZGlnaXR8YWxwaGF8dXBwZXJ8bG93ZXJ8YWxudW18dGltZXxkYXRlfG5vdHxvcnxhbmR8YWx3YXlzb250b3B8dG9wbW9zdHx0b3B8Ym90dG9tfHRyYW5zcGFyZW50fHRyYW5zY29sb3J8cmVkcmF3fHJlZ2lvbnxpZHxpZGxhc3R8cHJvY2Vzc25hbWV8bWlubWF4fGNvbnRyb2xsaXN0fGNvdW50fGxpc3R8Y2FwYWNpdHl8c3RhdHVzY2R8ZWplY3R8bG9ja3x1bmxvY2t8bGFiZWx8ZmlsZXN5c3RlbXxsYWJlbHxzZXRsYWJlbHxzZXJpYWx8dHlwZXxzdGF0dXN8c3RhdGljfHNlY29uZHN8bWludXRlc3xob3Vyc3xkYXlzfHJlYWR8cGFyc2V8bG9nb2ZmfGNsb3NlfGVycm9yfHNpbmdsZXx0cmF5fGFkZHxyZW5hbWV8Y2hlY2t8dW5jaGVja3x0b2dnbGVjaGVja3xlbmFibGV8ZGlzYWJsZXx0b2dnbGVlbmFibGV8ZGVmYXVsdHxub2RlZmF1bHR8c3RhbmRhcmR8bm9zdGFuZGFyZHxjb2xvcnxkZWxldGV8ZGVsZXRlYWxsfGljb258bm9pY29ufHRpcHxjbGlja3xzaG93fG1haW53aW5kb3d8bm9tYWlud2luZG93fHVzZWVycm9ybGV2ZWx8dGV4dHxwaWN0dXJlfHBpY3xncm91cGJveHxidXR0b258Y2hlY2tib3h8cmFkaW98ZHJvcGRvd25saXN0fGRkbHxjb21ib2JveHxsaXN0Ym94fGxpc3R2aWV3fGRhdGV0aW1lfG1vbnRoY2FsfHVwZG93bnxzbGlkZXJ8dGFifHRhYjJ8c3RhdHVzYmFyfHRyZWV2aWV3fGljb25zbWFsbHx0aWxlfHJlcG9ydHxzb3J0ZGVzY3xub3NvcnR8bm9zb3J0aGRyfGdyaWR8aGRyfGF1dG9zaXplfHJhbmdlfHhtfHltfHlzfHhzfHhwfHlwfGZvbnR8cmVzaXplfG93bmVyfHN1Ym1pdHxub2hpZGV8bWluaW1pemV8bWF4aW1pemV8cmVzdG9yZXxub2FjdGl2YXRlfG5hfGNhbmNlbHxkZXN0cm95fGNlbnRlcnxtYXJnaW58bWF4c2l6ZXxtaW5zaXplfG93bmRpYWxvZ3N8Z3VpZXNjYXBlfGd1aWNsb3NlfGd1aXNpemV8Z3VpY29udGV4dG1lbnV8Z3VpZHJvcGZpbGVzfHRhYnN0b3B8c2VjdGlvbnxhbHRzdWJtaXR8d3JhcHxoc2Nyb2xsfHZzY3JvbGx8Ym9yZGVyfHRvcHxib3R0b218YnV0dG9uc3xleHBhbmR8Zmlyc3R8aW1hZ2VsaXN0fGxpbmVzfHdhbnRjdHJsYXx3YW50ZjJ8dmlzfHZpc2ZpcnN0fG51bWJlcnx1cHBlcmNhc2V8bG93ZXJjYXNlfGxpbWl0fHBhc3N3b3JkfG11bHRpfHdhbnRyZXR1cm58Z3JvdXB8YmFja2dyb3VuZHxib2xkfGl0YWxpY3xzdHJpa2V8dW5kZXJsaW5lfG5vcm18YmFja2dyb3VuZHRyYW5zfHRoZW1lfGNhcHRpb258ZGVsaW1pdGVyfG1pbmltaXplYm94fG1heGltaXplYm94fHN5c21lbnV8dG9vbHdpbmRvd3xmbGFzaHxzdHlsZXxleHN0eWxlfGNoZWNrM3xjaGVja2VkfGNoZWNrZWRncmF5fHJlYWRvbmx5fHBhc3N3b3JkfGhpZGRlbnxsZWZ0fHJpZ2h0fGNlbnRlcnxub3RhYnxzZWN0aW9ufG1vdmV8Zm9jdXN8aGlkZXxjaG9vc2V8Y2hvb3Nlc3RyaW5nfHRleHR8cG9zfGVuYWJsZWR8ZGlzYWJsZWR8dmlzaWJsZXxsYXN0Zm91bmR8bGFzdGZvdW5kZXhpc3R8YWx0dGFifHNoaWZ0YWx0dGFifGFsdHRhYm1lbnV8YWx0dGFiYW5kbWVudXxhbHR0YWJtZW51ZGlzbWlzc3xub3RpbWVyc3xpbnRlcnJ1cHR8cHJpb3JpdHl8d2FpdGNsb3NlfGJsaW5kfHJhd3x1bmljb2RlfGRlcmVmfHBvd3xiaXRub3R8Yml0YW5kfGJpdG9yfGJpdHhvcnxiaXRzaGlmdGxlZnR8Yml0c2hpZnRyaWdodHx5ZXN8bm98b2t8Y2FuY2VsfGFib3J0fHJldHJ5fGlnbm9yZXx0cnlhZ2FpbnxvbnxvZmZ8YWxsfGhrZXlfbG9jYWxfbWFjaGluZXxoa2V5X3VzZXJzfGhrZXlfY3VycmVudF91c2VyfGhrZXlfY2xhc3Nlc19yb290fGhrZXlfY3VycmVudF9jb25maWd8aGtsbXxoa3V8aGtjdXxoa2NyfGhrY2N8cmVnX3N6fHJlZ19leHBhbmRfc3p8cmVnX211bHRpX3N6fHJlZ19kd29yZHxyZWdfcXdvcmR8cmVnX2JpbmFyeXxyZWdfbGlua3xyZWdfcmVzb3VyY2VfbGlzdHxyZWdfZnVsbF9yZXNvdXJjZV9kZXNjcmlwdG9yfHJlZ19yZXNvdXJjZV9yZXF1aXJlbWVudHNfbGlzdHxyZWdfZHdvcmRfYmlnX2VuZGlhbilcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICB7IGtleXdvcmRNYXA6IHsiY29uc3RhbnQubGFuZ3VhZ2UiOiBhdXRvSXRLZXl3b3Jkc30sIHJlZ2V4OiAnXFx3K1xcYid9LAogICAgICAgICB7IGtleXdvcmRNYXA6IHsidmFyaWFibGUuZnVuY3Rpb24iOiBhdEtleXdvcmRzfSwgcmVnZXg6ICdAXFx3K1xcYid9LAogICAgICAgICB7IHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5haGsnLAogICAgICAgICAgIHJlZ2V4OiAnPXw9PXw8Pnw6PXw8fD58XFwqfFxcL3xcXCt8OnxcXD98XFwtJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uYWhrJywKICAgICAgICAgICByZWdleDogLyN8YHw6OnwsfCUvIH0sCiAgICAgICAgIHsgdG9rZW46ICdwYXJlbicsCiAgICAgICAgICAgcmVnZXg6IC9be30oKV0vIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5xdW90ZS5kb3VibGUnLAogICAgICAgICAgICAgICdzdHJpbmcucXVvdGVkLmFoaycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnF1b3RlLmRvdWJsZScgXSwKICAgICAgICAgICByZWdleDogJygiKSgoPzpbXiJdfCIiKSopKCIpJyB9LAogICAgICAgICB7IHRva2VuOiBbICdsYWJlbC5haGsnLCAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5sYWJlbC5haGsnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFteOiBdKykoOikoPyE6KScgfSBdIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCkF1dG9Ib3RLZXlIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsgbmFtZTogJ0F1dG9Ib3RLZXknLAogICAgICBzY29wZU5hbWU6ICdzb3VyY2UuYWhrJywKICAgICAgZmlsZVR5cGVzOiBbICdhaGsnIF0sCiAgICAgIGZvbGRpbmdTdGFydE1hcmtlcjogJ15cXHMqL1xcKnxeKD8hW157XSo/O3xbXntdKj8vXFwqKD8hLio/XFwqLy4qP1xceykpLio/XFx7XFxzKigkfDt8L1xcKig/IS4qP1xcKi8uKlxcUykpJywKICAgICAgZm9sZGluZ1N0b3BNYXJrZXI6ICdeXFxzKlxcKi98XlxccypcXH0nIH07CgoKb29wLmluaGVyaXRzKEF1dG9Ib3RLZXlIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQXV0b0hvdEtleUhpZ2hsaWdodFJ1bGVzID0gQXV0b0hvdEtleUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2F1dG9ob3RrZXkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9hdXRvaG90a2V5X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQXV0b0hvdEtleUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9hdXRvaG90a2V5X2hpZ2hsaWdodF9ydWxlcyIpLkF1dG9Ib3RLZXlIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBBdXRvSG90S2V5SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICI7IjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvYXV0b2hvdGtleSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2F1dG9ob3RrZXkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-batchfile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9iYXRjaGZpbGVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQmF0Y2hGaWxlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5jb21tYW5kLmRvc2JhdGNoJywKICAgICAgICAgICByZWdleDogJ1xcYig/OmFwcGVuZHxhc3NvY3xhdHxhdHRyaWJ8YnJlYWt8Y2FjbHN8Y2R8Y2hjcHxjaGRpcnxjaGtkc2t8Y2hrbnRmc3xjbHN8Y21kfGNvbG9yfGNvbXB8Y29tcGFjdHxjb252ZXJ0fGNvcHl8ZGF0ZXxkZWx8ZGlyfGRpc2tjb21wfGRpc2tjb3B5fGRvc2tleXxlY2hvfGVuZGxvY2FsfGVyYXNlfGZjfGZpbmR8ZmluZHN0cnxmb3JtYXR8ZnR5cGV8Z3JhZnRhYmx8aGVscHxrZXlifGxhYmVsfG1kfG1rZGlyfG1vZGV8bW9yZXxtb3ZlfHBhdGh8cGF1c2V8cG9wZHxwcmludHxwcm9tcHR8cHVzaGR8cmR8cmVjb3ZlcnxyZW58cmVuYW1lfHJlcGxhY2V8cmVzdG9yZXxybWRpcnxzZXR8c2V0bG9jYWx8c2hpZnR8c29ydHxzdGFydHxzdWJzdHx0aW1lfHRpdGxlfHRyZWV8dHlwZXx2ZXJ8dmVyaWZ5fHZvbHx4Y29weSlcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLnN0YXRlbWVudC5kb3NiYXRjaCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpnb3RvfGNhbGx8ZXhpdClcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmNvbmRpdGlvbmFsLmlmLmRvc2JhdGNoJywKICAgICAgICAgICByZWdleDogJ1xcYmlmXFxzK25vdFxccysoPzpleGlzdHxkZWZpbmVkfGVycm9ybGV2ZWx8Y21kZXh0dmVyc2lvbilcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmNvbmRpdGlvbmFsLmRvc2JhdGNoJywKICAgICAgICAgICByZWdleDogJ1xcYig/OmlmfGVsc2UpXFxiJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5yZXBlYXQuZG9zYmF0Y2gnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiZm9yXFxiJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuZG9zYmF0Y2gnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86RVFVfE5FUXxMU1N8TEVRfEdUUnxHRVEpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiBbJ2RvYy5jb21tZW50JywgJ2NvbW1lbnQnXSwKICAgICAgICAgICByZWdleDogJyg/Ol58XFxiKShyZW0pKCR8XFxzLiokKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb21tZW50LmxpbmUuY29sb25zLmRvc2JhdGNoJywKICAgICAgICAgICByZWdleDogJzo6LiokJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICd2YXJpYWJsZScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLnNoZWxsJywKICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgIHB1c2g6IFsgCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5zaGVsbCcsIHJlZ2V4OiAnIicsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAndmFyaWFibGUnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5kb3NiYXRjaCcgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnBpcGUuZG9zYmF0Y2gnLCByZWdleDogJ1t8XScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IucmVkaXJlY3Quc2hlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnJj58XFxkKj4mXFxkKnxcXGQqKD86Pj58Pnw8KXxcXGQqPCZ8XFxkKjw+JyB9IF0sCiAgICAgICAgdmFyaWFibGU6IFsKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMnLCByZWdleDogJyUlXFx3K3wlWypcXGRdfCVcXHcrJSd9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubnVtZXJpYycsIHJlZ2V4OiAnJX5cXGQrJ30sCiAgICAgICAgIHsgdG9rZW46IFsnbWFya3VwLmxpc3QnLCAnY29uc3RhbnQub3RoZXInLCAnbWFya3VwLmxpc3QnXSwKICAgICAgICAgICAgcmVnZXg6ICcoJSkoXFx3KykoJT8pJyB9XX07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCkJhdGNoRmlsZUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0geyBuYW1lOiAnQmF0Y2ggRmlsZScsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5kb3NiYXRjaCcsCiAgICAgIGZpbGVUeXBlczogWyAnYmF0JyBdIH07CgoKb29wLmluaGVyaXRzKEJhdGNoRmlsZUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5CYXRjaEZpbGVIaWdobGlnaHRSdWxlcyA9IEJhdGNoRmlsZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2JhdGNoZmlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2JhdGNoZmlsZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEJhdGNoRmlsZUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9iYXRjaGZpbGVfaGlnaGxpZ2h0X3J1bGVzIikuQmF0Y2hGaWxlSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQmF0Y2hGaWxlSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICI6OiI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9ICIiOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvYmF0Y2hmaWxlIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvYmF0Y2hmaWxlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-bro.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9icm9faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQnJvSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuYnJvIiwKICAgICAgICAgICAgcmVnZXg6IC8jLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lLm51bWJlci1zaWduLmJybyIsCiAgICAgICAgICAgICAgICByZWdleDogLyQvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5saW5lLm51bWJlci1zaWduLmJybyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLmJybyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpicmVha3xjYXNlfGNvbnRpbnVlfGVsc2V8Zm9yfGlmfHJldHVybnxzd2l0Y2h8bmV4dHx3aGVufHRpbWVvdXR8c2NoZWR1bGUpXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgIm1ldGEuZnVuY3Rpb24uYnJvIiwKICAgICAgICAgICAgICAgICJtZXRhLmZ1bmN0aW9uLmJybyIsCiAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlLmJybyIsCiAgICAgICAgICAgICAgICAibWV0YS5mdW5jdGlvbi5icm8iLAogICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uLmJybyIsCiAgICAgICAgICAgICAgICAibWV0YS5mdW5jdGlvbi5icm8iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvXihccyopKD86ZnVuY3Rpb258aG9va3xldmVudCkoXHMqKSguKikoXHMqXCgpKC4qKShcKS4qJCkvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0b3JhZ2UudHlwZS5icm8iLAogICAgICAgICAgICByZWdleDogL1xiKD86Ym9vbHxlbnVtfGRvdWJsZXxpbnR8Y291bnR8cG9ydHxhZGRyfHN1Ym5ldHxhbnl8ZmlsZXxpbnRlcnZhbHx0aW1lfHN0cmluZ3x0YWJsZXx2ZWN0b3J8c2V0fHJlY29yZHxwYXR0ZXJufGhvb2spXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0b3JhZ2UubW9kaWZpZXIuYnJvIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/Omdsb2JhbHxjb25zdHxyZWRlZnxsb2NhbHwmKD86b3B0aW9uYWx8cm90YXRlX2ludGVydmFsfHJvdGF0ZV9zaXplfGFkZF9mdW5jfGRlbF9mdW5jfGV4cGlyZV9mdW5jfGV4cGlyZV9jcmVhdGV8ZXhwaXJlX3JlYWR8ZXhwaXJlX3dyaXRlfHBlcnNpc3RlbnR8c3luY2hyb25pemVkfGVuY3J5cHR8bWVyZ2VhYmxlfHByaW9yaXR5fGdyb3VwfHR5cGVfY29sdW1ufGxvZ3xlcnJvcl9oYW5kbGVyKSlcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5icm8iLAogICAgICAgICAgICByZWdleDogL1xzKig/Olx8fCYmfCg/Oj58PHwhKT0/fD09KVxzKnxcYiE/aW5cYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuYnJvIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OlR8RilcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5icm8iLAogICAgICAgICAgICByZWdleDogL1xiKD86MCg/Onh8WClbMC05YS1mQS1GXSp8KD86WzAtOV0rXC4/WzAtOV0qfFwuWzAtOV0rKSg/Oig/OmV8RSkoPzpcK3wtKT9bMC05XSspPykoPzpcLyg/OnRjcHx1ZHB8aWNtcCl8XHMqKD86dT9zZWN8bWlufGhyfGRheSlzPyk/XGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmJybyIsCiAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5icm8iLAogICAgICAgICAgICAgICAgcmVnZXg6IC8iLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjc3RyaW5nX2VzY2FwZWRfY2hhciIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiNzdHJpbmdfcGxhY2Vob2xkZXIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLmJybyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uYnJvIiwKICAgICAgICAgICAgcmVnZXg6IC9cLy8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5icm8iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cLy8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3N0cmluZ19lc2NhcGVkX2NoYXIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjc3RyaW5nX3BsYWNlaG9sZGVyIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLnJlZ2V4LmJybyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAibWV0YS5wcmVwcm9jZXNzb3IuYnJvLmxvYWQiLAogICAgICAgICAgICAgICAgImtleXdvcmQub3RoZXIuc3BlY2lhbC1tZXRob2QuYnJvIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogL14oXHMqKShcQGxvYWQoPzotc2lncyk/KVxiLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiBbXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89XCMpfCQvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAibWV0YS5wcmVwcm9jZXNzb3IuYnJvLmxvYWQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgIm1ldGEucHJlcHJvY2Vzc29yLmJyby5pZiIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlci5zcGVjaWFsLW1ldGhvZC5icm8iLAogICAgICAgICAgICAgICAgIm1ldGEucHJlcHJvY2Vzc29yLmJyby5pZiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC9eKFxzKikoXEBlbmRpZnxcQGlmKD86bj9kZWYpPykoLiokKS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogW10sCiAgICAgICAgICAgICAgICByZWdleDogLyQvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAibWV0YS5wcmVwcm9jZXNzb3IuYnJvLmlmIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIjZGlzYWJsZWQiOiBbewogICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICByZWdleDogL15ccypcQGlmKD86bj9kZWYpP1xiLiokLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogL15ccypcQGVuZGlmXGIuKiQvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiNkaXNhYmxlZCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiNwcmFnbWEtbWFyayIKICAgICAgICAgICAgfV0sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJlYXQgbmVzdGVkIHByZXByb2Nlc3NvciBpZmRlZnMiCiAgICAgICAgfV0sCiAgICAgICAgIiNwcmVwcm9jZXNzb3ItcnVsZS1vdGhlciI6IFt7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAibWV0YS5wcmVwcm9jZXNzb3IuYnJvIiwKICAgICAgICAgICAgICAgICJtZXRhLnByZXByb2Nlc3Nvci5icm8iLAogICAgICAgICAgICAgICAgInRleHQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvXihccyopKEBpZikoKD86bj9kZWYpPylcYiguKj8pKD86KD89KXwkKS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJ0ZXh0IiwgIm1ldGEucHJlcHJvY2Vzc29yLmJybyIsICJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleDogL14oXHMqKShAZW5kaWYpXGIoLiokKS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiJGJhc2UiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiNzdHJpbmdfZXNjYXBlZF9jaGFyIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmJybyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFwoPzpcXHxbYWJlZm5wcnR2JyI/XXxbMC0zXVxkeywyfXxbNC03XVxkP3x4W2EtZkEtRjAtOV17LDJ9KS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiaW52YWxpZC5pbGxlZ2FsLnVua25vd24tZXNjYXBlLmJybyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFwuLwogICAgICAgIH1dLAogICAgICAgICIjc3RyaW5nX3BsYWNlaG9sZGVyIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5vdGhlci5wbGFjZWhvbGRlci5icm8iLAogICAgICAgICAgICByZWdleDogLyUoPzpcZCtcJCk/WyMwXC0gKyddKlssOzpfXT8oPzotP1xkK3xcKig/Oi0/XGQrXCQpPyk/KD86XC4oPzotP1xkK3xcKig/Oi0/XGQrXCQpPyk/KT8oPzpoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpP1tkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJpbnZhbGlkLmlsbGVnYWwucGxhY2Vob2xkZXIuYnJvIiwKICAgICAgICAgICAgcmVnZXg6IC8lLwogICAgICAgIH1dCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpCcm9IaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsKICAgIGZpbGVUeXBlczogWyJicm8iXSwKICAgIGZvbGRpbmdTdGFydE1hcmtlcjogIl4oXFxAaWYobj9kZWYpPykiLAogICAgZm9sZGluZ1N0b3BNYXJrZXI6ICJeXFxAZW5kaWYiLAogICAga2V5RXF1aXZhbGVudDogIkBCIiwKICAgIG5hbWU6ICJCcm8iLAogICAgc2NvcGVOYW1lOiAic291cmNlLmJybyIKfTsKCgpvb3AuaW5oZXJpdHMoQnJvSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkJyb0hpZ2hsaWdodFJ1bGVzID0gQnJvSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYnJvIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvYnJvX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQnJvSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Jyb19oaWdobGlnaHRfcnVsZXMiKS5Ccm9IaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBCcm9IaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9icm8iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9icm8iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-c9search.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jOXNlYXJjaF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKZnVuY3Rpb24gc2FmZUNyZWF0ZVJlZ2V4cChzb3VyY2UsIGZsYWcpIHsKICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoc291cmNlLCBmbGFnKTsKICAgIH0gY2F0Y2goZSkge30KfQoKdmFyIEM5U2VhcmNoSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuTmFtZXMgOiBbImM5c2VhcmNocmVzdWx0cy5jb25zdGFudC5udW1lcmljIiwgImM5c2VhcmNocmVzdWx0cy50ZXh0IiwgImM5c2VhcmNocmVzdWx0cy50ZXh0IiwgImM5c2VhcmNocmVzdWx0cy5rZXl3b3JkIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oXlxzK1swLTldKykoOikoXGQqXHM/KShbXlxyXG5dKykvLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuc3BsaXRSZWdleC5leGVjKHZhbCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGVzID0gdGhpcy50b2tlbk5hbWVzOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBbewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlc1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1sxXQogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZXNbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbMl0KICAgICAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzWzNdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbM10gPT0gIiAiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zWzFdID0geyB0eXBlOiB0eXBlc1sxXSwgdmFsdWU6IHZhbHVlc1syXSArICIgIiB9OwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6IHR5cGVzWzFdLCB2YWx1ZTogdmFsdWVzWzNdIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSBzdGFja1sxXTsKICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gdmFsdWVzWzRdOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHZhciBtOwogICAgICAgICAgICAgICAgICAgIHZhciBsYXN0ID0gMDsKICAgICAgICAgICAgICAgICAgICBpZiAocmVnZXggJiYgcmVnZXguZXhlYykgewogICAgICAgICAgICAgICAgICAgICAgICByZWdleC5sYXN0SW5kZXggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobSA9IHJlZ2V4LmV4ZWMoc3RyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNraXBwZWQgPSBzdHIuc3Vic3RyaW5nKGxhc3QsIG0uaW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHJlZ2V4Lmxhc3RJbmRleDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChza2lwcGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHt0eXBlOiB0eXBlc1syXSwgdmFsdWU6IHNraXBwZWR9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHt0eXBlOiB0eXBlc1szXSwgdmFsdWU6IG1bMF19KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFza2lwcGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0IDwgc3RyLmxlbmd0aCkKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goe3R5cGU6IHR5cGVzWzJdLCB2YWx1ZTogc3RyLnN1YnN0cihsYXN0KX0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl5TZWFyY2hpbmcgZm9yIFteXFxyXFxuXSokIiwKICAgICAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gdmFsLnNwbGl0KCJceDAxIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidGV4dCI7CgogICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zLCBzZWFyY2g7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSBbewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGFydHNbaSsrXSArICInIiwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2VhcmNoID0gcGFydHNbaSsrXSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiIC8vICJjOXNlYXJjaHJlc3VsdHMua2V5d29yZCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiJyIgKyBwYXJ0c1tpKytdLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIKICAgICAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNbMl0gIT09ICIgaW4iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiJyIgKyBwYXJ0c1tpKytdICsgIiciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJ0c1tpKytdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAiICIgKyBwYXJ0c1tpKytdICsgIiAiLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNbaSsxXSkgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gcGFydHNbaSsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICIoIiArIHBhcnRzW2krMV0gKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAidGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChpKysgPCBwYXJ0cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbaV0gJiYgdG9rZW5zLnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcnRzW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInRleHQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghL3JlZ2V4Ly50ZXN0KG9wdGlvbnMpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoID0gbGFuZy5lc2NhcGVSZWdFeHAoc2VhcmNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC93aG9sZS8udGVzdChvcHRpb25zKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaCA9ICJcXGIiICsgc2VhcmNoICsgIlxcYiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHZhciByZWdleCA9IHNlYXJjaCAmJiBzYWZlQ3JlYXRlUmVnZXhwKAogICAgICAgICAgICAgICAgICAgICAgICAiKCIgKyBzZWFyY2ggKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgIC8gc2Vuc2l0aXZlLy50ZXN0KG9wdGlvbnMpID8gImciIDogImlnIgogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2V4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdID0gc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdID0gcmVnZXg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbnM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl4oPz1Gb3VuZCBcXGQrIG1hdGNoZXMpIiwKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJudW1iZXJzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxcUzo/W146XSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJudW1iZXJzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBudW1iZXJzOlt7CiAgICAgICAgICAgIHJlZ2V4IDogIlxcZCsiLAogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIgogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXggOiAiJCIsCiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH1dCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEM5U2VhcmNoSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkM5U2VhcmNoSGlnaGxpZ2h0UnVsZXMgPSBDOVNlYXJjaEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jOXNlYXJjaCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC9eKFxTLio6fFNlYXJjaGluZyBmb3IuKikkLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXihccyt8Rm91bmQuKikkLzsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lcyA9IHNlc3Npb24uZG9jLmdldEFsbExpbmVzKHJvdyk7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tyb3ddOwogICAgICAgIHZhciBsZXZlbDEgPSAvXihGb3VuZC4qfFNlYXJjaGluZyBmb3IuKikkLzsKICAgICAgICB2YXIgbGV2ZWwyID0gL14oXFMuKjp8XHMqKSQvOwogICAgICAgIHZhciByZSA9IGxldmVsMS50ZXN0KGxpbmUpID8gbGV2ZWwxIDogbGV2ZWwyOwogICAgICAgIAogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICBpZiAodGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChsaW5lKSkgewogICAgICAgICAgICBmb3IgKHZhciBpID0gcm93ICsgMSwgbCA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChyZS50ZXN0KGxpbmVzW2ldKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSBpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IHJvdyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICBsaW5lID0gbGluZXNbaV07CiAgICAgICAgICAgICAgICBpZiAocmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGFydFJvdyA9IGk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydFJvdyAhPSBlbmRSb3cpIHsKICAgICAgICAgICAgdmFyIGNvbCA9IGxpbmUubGVuZ3RoOwogICAgICAgICAgICBpZiAocmUgPT09IGxldmVsMSkKICAgICAgICAgICAgICAgIGNvbCA9IGxpbmUuc2VhcmNoKC9cKEZvdW5kW14pXStcKSR8JC8pOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBjb2wsIGVuZFJvdywgMCk7CiAgICAgICAgfQogICAgfTsKICAgIAp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYzlzZWFyY2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9jOXNlYXJjaF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvZm9sZGluZy9jOXNlYXJjaCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEM5U2VhcmNoSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2M5c2VhcmNoX2hpZ2hsaWdodF9ydWxlcyIpLkM5U2VhcmNoSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgQzlTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2M5c2VhcmNoIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEM5U2VhcmNoSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDOVN0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jOXNlYXJjaCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9jOXNlYXJjaCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-cirru.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jaXJydV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIENpcnJ1SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbewogICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMnLAogICAgICAgICAgICByZWdleDogL1tcZFwuXSsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ2NvbW1lbnQubGluZS5kb3VibGUtZGFzaCcsCiAgICAgICAgICAgIHJlZ2V4OiAvLS0vLAogICAgICAgICAgICBuZXh0OiAnY29tbWVudCcKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnc3RvcmFnZS5tb2RpZmllcicsCiAgICAgICAgICAgIHJlZ2V4OiAvXCgvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ3N0b3JhZ2UubW9kaWZpZXInLAogICAgICAgICAgICByZWdleDogLywvLAogICAgICAgICAgICBuZXh0OiAnbGluZScKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbicsCiAgICAgICAgICAgIHJlZ2V4OiAvW15cKFwpIlxze31cW1xdXSsvLAogICAgICAgICAgICBuZXh0OiAnbGluZScKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUnLAogICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICBuZXh0OiAnc3RyaW5nJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICdzdG9yYWdlLm1vZGlmaWVyJywKICAgICAgICAgICAgcmVnZXg6IC9cKS8KICAgICAgICB9XSwKICAgICAgICBjb21tZW50OiBbewogICAgICAgICAgICB0b2tlbjogJ2NvbW1lbnQubGluZS5kb3VibGUtZGFzaCcsCiAgICAgICAgICAgIHJlZ2V4OiAvICtbXlxuXSsvLAogICAgICAgICAgICBuZXh0OiAnc3RhcnQnCiAgICAgICAgfV0sCiAgICAgICAgc3RyaW5nOiBbewogICAgICAgICAgICB0b2tlbjogJ3N0cmluZy5xdW90ZWQuZG91YmxlJywKICAgICAgICAgICAgcmVnZXg6IC8iLywKICAgICAgICAgICAgbmV4dDogJ2xpbmUnCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUnLAogICAgICAgICAgICByZWdleDogL1xcLywKICAgICAgICAgICAgbmV4dDogJ2VzY2FwZScKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUnLAogICAgICAgICAgICByZWdleDogL1teXFwiXSsvCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlOiBbewogICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUnLAogICAgICAgICAgICByZWdleDogLy4vLAogICAgICAgICAgICBuZXh0OiAnc3RyaW5nJwogICAgICAgIH1dLAogICAgICAgIGxpbmU6IFt7CiAgICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQubnVtZXJpYycsCiAgICAgICAgICAgIHJlZ2V4OiAvW1xkXC5dKy8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnbWFya3VwLnJhdycsCiAgICAgICAgICAgIHJlZ2V4OiAvXlxzKi8sCiAgICAgICAgICAgIG5leHQ6ICdzdGFydCcKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnc3RvcmFnZS5tb2RpZmllcicsCiAgICAgICAgICAgIHJlZ2V4OiAvXCQvLAogICAgICAgICAgICBuZXh0OiAnc3RhcnQnCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ3ZhcmlhYmxlLnBhcmFtZXRlcicsCiAgICAgICAgICAgIHJlZ2V4OiAvW15cKFwpIlxze31cW1xdXSsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ3N0b3JhZ2UubW9kaWZpZXInLAogICAgICAgICAgICByZWdleDogL1woLywKICAgICAgICAgICAgbmV4dDogJ3N0YXJ0JwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICdzdG9yYWdlLm1vZGlmaWVyJywKICAgICAgICAgICAgcmVnZXg6IC9cKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAnbWFya3VwLnJhdycsCiAgICAgICAgICAgIHJlZ2V4OiAvXiAqLywKICAgICAgICAgICAgbmV4dDogJ3N0YXJ0JwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZScsCiAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgIG5leHQ6ICdzdHJpbmcnCiAgICAgICAgfV0KICAgIH07Cgp9OwoKb29wLmluaGVyaXRzKENpcnJ1SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkNpcnJ1SGlnaGxpZ2h0UnVsZXMgPSBDaXJydUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvY2lycnUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9jaXJydV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENpcnJ1SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NpcnJ1X2hpZ2hsaWdodF9ydWxlcyIpLkNpcnJ1SGlnaGxpZ2h0UnVsZXM7CnZhciBDb2ZmZWVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ2lycnVIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENvZmZlZUZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi0tIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NpcnJ1IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvY2lycnUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jbG9qdXJlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKCgp2YXIgQ2xvanVyZUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGJ1aWx0aW5GdW5jdGlvbnMgPSAoCiAgICAgICAgJyogKjEgKjIgKjMgKmFnZW50KiAqYWxsb3ctdW5yZXNvbHZlZC12YXJzKiAqYXNzZXJ0KiAqY2xvanVyZS12ZXJzaW9uKiAnICsKICAgICAgICAnKmNvbW1hbmQtbGluZS1hcmdzKiAqY29tcGlsZS1maWxlcyogKmNvbXBpbGUtcGF0aCogKmUgKmVyciogKmZpbGUqICcgKwogICAgICAgICcqZmx1c2gtb24tbmV3bGluZSogKmluKiAqbWFjcm8tbWV0YSogKm1hdGgtY29udGV4dCogKm5zKiAqb3V0KiAnICsKICAgICAgICAnKnByaW50LWR1cCogKnByaW50LWxlbmd0aCogKnByaW50LWxldmVsKiAqcHJpbnQtbWV0YSogKnByaW50LXJlYWRhYmx5KiAnICsKICAgICAgICAnKnJlYWQtZXZhbCogKnNvdXJjZS1wYXRoKiAqdXNlLWNvbnRleHQtY2xhc3Nsb2FkZXIqICcgKwogICAgICAgICcqd2Fybi1vbi1yZWZsZWN0aW9uKiArIC0gLT4gLT4+IC4uIC8gPCA8PSA9ICcgKwogICAgICAgICc9PSA+ICZndDsgPj0gJmd0Oz0gYWNjZXNzb3IgYWNsb25lICcgKwogICAgICAgICdhZGQtY2xhc3NwYXRoIGFkZC13YXRjaCBhZ2VudCBhZ2VudC1lcnJvcnMgYWdldCBhbGVuZ3RoIGFsaWFzIGFsbC1ucyAnICsKICAgICAgICAnYWx0ZXIgYWx0ZXItbWV0YSEgYWx0ZXItdmFyLXJvb3QgYW1hcCBhbmNlc3RvcnMgYW5kIGFwcGx5IGFyZWR1Y2UgJyArCiAgICAgICAgJ2FycmF5LW1hcCBhc2V0IGFzZXQtYm9vbGVhbiBhc2V0LWJ5dGUgYXNldC1jaGFyIGFzZXQtZG91YmxlIGFzZXQtZmxvYXQgJyArCiAgICAgICAgJ2FzZXQtaW50IGFzZXQtbG9uZyBhc2V0LXNob3J0IGFzc2VydCBhc3NvYyBhc3NvYyEgYXNzb2MtaW4gYXNzb2NpYXRpdmU/ICcgKwogICAgICAgICdhdG9tIGF3YWl0IGF3YWl0LWZvciBhd2FpdDEgYmFzZXMgYmVhbiBiaWdkZWMgYmlnaW50IGJpbmRpbmcgYml0LWFuZCAnICsKICAgICAgICAnYml0LWFuZC1ub3QgYml0LWNsZWFyIGJpdC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgJyArCiAgICAgICAgJ2JpdC1zaGlmdC1yaWdodCBiaXQtdGVzdCBiaXQteG9yIGJvb2xlYW4gYm9vbGVhbi1hcnJheSBib29sZWFucyAnICsKICAgICAgICAnYm91bmQtZm4gYm91bmQtZm4qIGJ1dGxhc3QgYnl0ZSBieXRlLWFycmF5IGJ5dGVzIGNhc3QgY2hhciBjaGFyLWFycmF5ICcgKwogICAgICAgICdjaGFyLWVzY2FwZS1zdHJpbmcgY2hhci1uYW1lLXN0cmluZyBjaGFyPyBjaGFycyBjaHVuayBjaHVuay1hcHBlbmQgJyArCiAgICAgICAgJ2NodW5rLWJ1ZmZlciBjaHVuay1jb25zIGNodW5rLWZpcnN0IGNodW5rLW5leHQgY2h1bmstcmVzdCBjaHVua2VkLXNlcT8gJyArCiAgICAgICAgJ2NsYXNzIGNsYXNzPyBjbGVhci1hZ2VudC1lcnJvcnMgY2xvanVyZS12ZXJzaW9uIGNvbGw/IGNvbW1lbnQgY29tbXV0ZSAnICsKICAgICAgICAnY29tcCBjb21wYXJhdG9yIGNvbXBhcmUgY29tcGFyZS1hbmQtc2V0ISBjb21waWxlIGNvbXBsZW1lbnQgY29uY2F0IGNvbmQgJyArCiAgICAgICAgJ2NvbmRwIGNvbmogY29uaiEgY29ucyBjb25zdGFudGx5IGNvbnN0cnVjdC1wcm94eSBjb250YWlucz8gY291bnQgJyArCiAgICAgICAgJ2NvdW50ZWQ/IGNyZWF0ZS1ucyBjcmVhdGUtc3RydWN0IGN5Y2xlIGRlYyBkZWNpbWFsPyBkZWNsYXJlIGRlZmlubGluZSAnICsKICAgICAgICAnZGVmbWFjcm8gZGVmbWV0aG9kIGRlZm11bHRpIGRlZm4gZGVmbi0gZGVmb25jZSBkZWZzdHJ1Y3QgZGVsYXkgZGVsYXk/ICcgKwogICAgICAgICdkZWxpdmVyIGRlcmVmIGRlcml2ZSBkZXNjZW5kYW50cyBkZXN0cnVjdHVyZSBkaXNqIGRpc2ohIGRpc3NvYyBkaXNzb2MhICcgKwogICAgICAgICdkaXN0aW5jdCBkaXN0aW5jdD8gZG9hbGwgZG9jIGRvcnVuIGRvc2VxIGRvc3luYyBkb3RpbWVzIGRvdG8gZG91YmxlICcgKwogICAgICAgICdkb3VibGUtYXJyYXkgZG91YmxlcyBkcm9wIGRyb3AtbGFzdCBkcm9wLXdoaWxlIGVtcHR5IGVtcHR5PyBlbnN1cmUgJyArCiAgICAgICAgJ2VudW1lcmF0aW9uLXNlcSBldmFsIGV2ZW4/IGV2ZXJ5PyBmYWxzZT8gZmZpcnN0IGZpbGUtc2VxIGZpbHRlciBmaW5kICcgKwogICAgICAgICdmaW5kLWRvYyBmaW5kLW5zIGZpbmQtdmFyIGZpcnN0IGZsb2F0IGZsb2F0LWFycmF5IGZsb2F0PyBmbG9hdHMgZmx1c2ggJyArCiAgICAgICAgJ2ZuIGZuPyBmbmV4dCBmb3IgZm9yY2UgZm9ybWF0IGZ1dHVyZSBmdXR1cmUtY2FsbCBmdXR1cmUtY2FuY2VsICcgKwogICAgICAgICdmdXR1cmUtY2FuY2VsbGVkPyBmdXR1cmUtZG9uZT8gZnV0dXJlPyBnZW4tY2xhc3MgZ2VuLWludGVyZmFjZSBnZW5zeW0gJyArCiAgICAgICAgJ2dldCBnZXQtaW4gZ2V0LW1ldGhvZCBnZXQtcHJveHktY2xhc3MgZ2V0LXRocmVhZC1iaW5kaW5ncyBnZXQtdmFsaWRhdG9yICcgKwogICAgICAgICdoYXNoIGhhc2gtbWFwIGhhc2gtc2V0IGlkZW50aWNhbD8gaWRlbnRpdHkgaWYtbGV0IGlmLW5vdCBpZm4/IGltcG9ydCAnICsKICAgICAgICAnaW4tbnMgaW5jIGluaXQtcHJveHkgaW5zdGFuY2U/IGludCBpbnQtYXJyYXkgaW50ZWdlcj8gaW50ZXJsZWF2ZSBpbnRlcm4gJyArCiAgICAgICAgJ2ludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9yLXNlcSBqdXh0IGtleSAnICsKICAgICAgICAna2V5cyBrZXl3b3JkIGtleXdvcmQ/IGxhc3QgbGF6eS1jYXQgbGF6eS1zZXEgbGV0IGxldGZuIGxpbmUtc2VxIGxpc3QgJyArCiAgICAgICAgJ2xpc3QqIGxpc3Q/IGxvYWQgbG9hZC1maWxlIGxvYWQtcmVhZGVyIGxvYWQtc3RyaW5nIGxvYWRlZC1saWJzIGxvY2tpbmcgJyArCiAgICAgICAgJ2xvbmcgbG9uZy1hcnJheSBsb25ncyBsb29wIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFrZS1hcnJheSAnICsKICAgICAgICAnbWFrZS1oaWVyYXJjaHkgbWFwIG1hcD8gbWFwY2F0IG1heCBtYXgta2V5IG1lbWZuIG1lbW9pemUgbWVyZ2UgJyArCiAgICAgICAgJ21lcmdlLXdpdGggbWV0YSBtZXRob2Qtc2lnIG1ldGhvZHMgbWluIG1pbi1rZXkgbW9kIG5hbWUgbmFtZXNwYWNlIG5lZz8gJyArCiAgICAgICAgJ25ld2xpbmUgbmV4dCBuZmlyc3QgbmlsPyBubmV4dCBub3Qgbm90LWFueT8gbm90LWVtcHR5IG5vdC1ldmVyeT8gbm90PSAnICsKICAgICAgICAnbnMgbnMtYWxpYXNlcyBucy1pbXBvcnRzIG5zLWludGVybnMgbnMtbWFwIG5zLW5hbWUgbnMtcHVibGljcyAnICsKICAgICAgICAnbnMtcmVmZXJzIG5zLXJlc29sdmUgbnMtdW5hbGlhcyBucy11bm1hcCBudGggbnRobmV4dCBudW0gbnVtYmVyPyBvZGQ/ICcgKwogICAgICAgICdvciBwYXJlbnRzIHBhcnRpYWwgcGFydGl0aW9uIHBjYWxscyBwZWVrIHBlcnNpc3RlbnQhIHBtYXAgcG9wIHBvcCEgJyArCiAgICAgICAgJ3BvcC10aHJlYWQtYmluZGluZ3MgcG9zPyBwciBwci1zdHIgcHJlZmVyLW1ldGhvZCBwcmVmZXJzICcgKwogICAgICAgICdwcmltaXRpdmVzLWNsYXNzbmFtZXMgcHJpbnQgcHJpbnQtY3RvciBwcmludC1kb2MgcHJpbnQtZHVwIHByaW50LW1ldGhvZCAnICsKICAgICAgICAncHJpbnQtbmFtZXNwYWNlLWRvYyBwcmludC1zaW1wbGUgcHJpbnQtc3BlY2lhbC1kb2MgcHJpbnQtc3RyIHByaW50ZiAnICsKICAgICAgICAncHJpbnRsbiBwcmludGxuLXN0ciBwcm4gcHJuLXN0ciBwcm9taXNlIHByb3h5IHByb3h5LWNhbGwtd2l0aC1zdXBlciAnICsKICAgICAgICAncHJveHktbWFwcGluZ3MgcHJveHktbmFtZSBwcm94eS1zdXBlciBwdXNoLXRocmVhZC1iaW5kaW5ncyBwdmFsdWVzIHF1b3QgJyArCiAgICAgICAgJ3JhbmQgcmFuZC1pbnQgcmFuZ2UgcmF0aW8/IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZS1maW5kIHJlLWdyb3VwcyAnICsKICAgICAgICAncmUtbWF0Y2hlciByZS1tYXRjaGVzIHJlLXBhdHRlcm4gcmUtc2VxIHJlYWQgcmVhZC1saW5lIHJlYWQtc3RyaW5nICcgKwogICAgICAgICdyZWR1Y2UgcmVmIHJlZi1oaXN0b3J5LWNvdW50IHJlZi1tYXgtaGlzdG9yeSByZWYtbWluLWhpc3RvcnkgcmVmLXNldCAnICsKICAgICAgICAncmVmZXIgcmVmZXItY2xvanVyZSByZWxlYXNlLXBlbmRpbmctc2VuZHMgcmVtIHJlbW92ZSByZW1vdmUtbWV0aG9kICcgKwogICAgICAgICdyZW1vdmUtbnMgcmVtb3ZlLXdhdGNoIHJlcGVhdCByZXBlYXRlZGx5IHJlcGxhY2UgcmVwbGljYXRlIHJlcXVpcmUgJyArCiAgICAgICAgJ3Jlc2V0ISByZXNldC1tZXRhISByZXNvbHZlIHJlc3QgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgJyArCiAgICAgICAgJ3JzdWJzZXEgc2Vjb25kIHNlbGVjdC1rZXlzIHNlbmQgc2VuZC1vZmYgc2VxIHNlcT8gc2VxdWUgc2VxdWVuY2UgJyArCiAgICAgICAgJ3NlcXVlbnRpYWw/IHNldCBzZXQtdmFsaWRhdG9yISBzZXQ/IHNob3J0IHNob3J0LWFycmF5IHNob3J0cyAnICsKICAgICAgICAnc2h1dGRvd24tYWdlbnRzIHNsdXJwIHNvbWUgc29ydCBzb3J0LWJ5IHNvcnRlZC1tYXAgc29ydGVkLW1hcC1ieSAnICsKICAgICAgICAnc29ydGVkLXNldCBzb3J0ZWQtc2V0LWJ5IHNvcnRlZD8gc3BlY2lhbC1mb3JtLWFuY2hvciBzcGVjaWFsLXN5bWJvbD8gJyArCiAgICAgICAgJ3NwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmVhbT8gc3RyaW5nPyBzdHJ1Y3Qgc3RydWN0LW1hcCBzdWJzIHN1YnNlcSAnICsKICAgICAgICAnc3VidmVjIHN1cGVycyBzd2FwISBzeW1ib2wgc3ltYm9sPyBzeW5jIHN5bnRheC1zeW1ib2wtYW5jaG9yIHRha2UgJyArCiAgICAgICAgJ3Rha2UtbGFzdCB0YWtlLW50aCB0YWtlLXdoaWxlIHRlc3QgdGhlLW5zIHRpbWUgdG8tYXJyYXkgdG8tYXJyYXktMmQgJyArCiAgICAgICAgJ3RyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtZGVjICcgKwogICAgICAgICd1bmNoZWNrZWQtZGl2aWRlIHVuY2hlY2tlZC1pbmMgdW5jaGVja2VkLW11bHRpcGx5IHVuY2hlY2tlZC1uZWdhdGUgJyArCiAgICAgICAgJ3VuY2hlY2tlZC1yZW1haW5kZXIgdW5jaGVja2VkLXN1YnRyYWN0IHVuZGVyaXZlIHVucXVvdGUgJyArCiAgICAgICAgJ3VucXVvdGUtc3BsaWNpbmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0ICcgKwogICAgICAgICd2YXI/IHZhcnktbWV0YSB2ZWMgdmVjdG9yIHZlY3Rvcj8gd2hlbiB3aGVuLWZpcnN0IHdoZW4tbGV0IHdoZW4tbm90ICcgKwogICAgICAgICd3aGlsZSB3aXRoLWJpbmRpbmdzIHdpdGgtYmluZGluZ3MqIHdpdGgtaW4tc3RyIHdpdGgtbG9hZGluZy1jb250ZXh0ICcgKwogICAgICAgICd3aXRoLWxvY2FsLXZhcnMgd2l0aC1tZXRhIHdpdGgtb3BlbiB3aXRoLW91dC1zdHIgd2l0aC1wcmVjaXNpb24geG1sLXNlcSAnICsKICAgICAgICAnemVybz8gemlwbWFwJwogICAgKTsKCiAgICB2YXIga2V5d29yZHMgPSAoJ3Rocm93IHRyeSB2YXIgJyArCiAgICAgICAgJ2RlZiBkbyBmbiBpZiBsZXQgbG9vcCBtb25pdG9yLWVudGVyIG1vbml0b3ItZXhpdCBuZXcgcXVvdGUgcmVjdXIgc2V0IScKICAgICk7CgogICAgdmFyIGJ1aWxkaW5Db25zdGFudHMgPSAoInRydWUgZmFsc2UgbmlsIik7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMKICAgIH0sICJpZGVudGlmaWVyIiwgZmFsc2UsICIgIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI7LiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy9wYXJlbnMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXCh8XFwpXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vbGlzdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXCdcXChdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy92ZWN0b3JzCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxbfFxcXV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvL3NldHMgYW5kIG1hcHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXHt8XFx9fFxcI1xce3xcXCNcXH1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGFtcGVyc2FuZHMKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdbXFwmXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBtZXRhZGF0YQogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1tcXCNcXF5cXHtdJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGFub255bW91cyBmbiBzeW50YWN0aWMgc3VnYXIKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdbXFwlXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBkZXJlZiByZWFkZXIgbWFjcm8KICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdbQF0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdbIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fD18IT18PD18Pj18PD58PHw+fCF8JiZdJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXFwtXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICJzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50IiwgLy8gc3ltYm9sCiAgICAgICAgICAgICAgICByZWdleCA6IC86W14oKVxbXF17fSciXF4lYCw7XHNdKy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsIC8vUmVndWxhciBFeHByZXNzaW9ucwogICAgICAgICAgICAgICAgcmVnZXggOiAnLyMiKD86XFwufCg/OlxcIil8W14iIlxuXSkqIi9nJwogICAgICAgICAgICB9CgogICAgICAgIF0sCiAgICAgICAgInN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcLnxcXFxcJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1teIlxcXFxdKycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoQ2xvanVyZUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5DbG9qdXJlSGlnaGxpZ2h0UnVsZXMgPSBDbG9qdXJlSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19wYXJlbnNfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ1BhcmVuc091dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXCkvLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcKSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMrKS8pOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gbWF0Y2hbMV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ1BhcmVuc091dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdQYXJlbnNPdXRkZW50ID0gTWF0Y2hpbmdQYXJlbnNPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvY2xvanVyZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nsb2p1cmVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfcGFyZW5zX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBDbG9qdXJlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nsb2p1cmVfaGlnaGxpZ2h0X3J1bGVzIikuQ2xvanVyZUhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdQYXJlbnNPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19wYXJlbnNfb3V0ZGVudCIpLk1hdGNoaW5nUGFyZW5zT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ2xvanVyZUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ1BhcmVuc091dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIjsiOwogICAgdGhpcy5taW5vckluZGVudEZ1bmN0aW9ucyA9IFsiZGVmbiIsICJkZWZuLSIsICJkZWZtYWNybyIsICJkZWYiLCAiZGVmdGVzdCIsICJ0ZXN0aW5nIl07CgogICAgdGhpcy4kdG9JbmRlbnQgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICByZXR1cm4gc3RyLnNwbGl0KCcnKS5tYXAoZnVuY3Rpb24oY2gpIHsKICAgICAgICAgICAgaWYgKC9ccy8uZXhlYyhjaCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjaDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAnICc7CiAgICAgICAgICAgIH0KICAgICAgICB9KS5qb2luKCcnKTsKICAgIH07CgogICAgdGhpcy4kY2FsY3VsYXRlSW5kZW50ID0gZnVuY3Rpb24obGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGJhc2VJbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIGRlbHRhID0gMDsKICAgICAgICB2YXIgaXNQYXJlbiwgY2g7CiAgICAgICAgZm9yICh2YXIgaSA9IGxpbmUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgY2ggPSBsaW5lW2ldOwogICAgICAgICAgICBpZiAoY2ggPT09ICcoJykgewogICAgICAgICAgICAgICAgZGVsdGEtLTsKICAgICAgICAgICAgICAgIGlzUGFyZW4gPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnKCcgfHwgY2ggPT09ICdbJyB8fCBjaCA9PT0gJ3snKSB7CiAgICAgICAgICAgICAgICBkZWx0YS0tOwogICAgICAgICAgICAgICAgaXNQYXJlbiA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnKScgfHwgY2ggPT09ICddJyB8fCBjaCA9PT0gJ30nKSB7CiAgICAgICAgICAgICAgICBkZWx0YSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkZWx0YSA8IDApIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChkZWx0YSA8IDAgJiYgaXNQYXJlbikgewogICAgICAgICAgICBpICs9IDE7CiAgICAgICAgICAgIHZhciBpQmVmb3JlID0gaTsKICAgICAgICAgICAgdmFyIGZuID0gJyc7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICBjaCA9IGxpbmVbaV07CiAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICcgJyB8fCBjaCA9PT0gJ1x0JykgewogICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubWlub3JJbmRlbnRGdW5jdGlvbnMuaW5kZXhPZihmbikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0b0luZGVudChsaW5lLnN1YnN0cmluZygwLCBpQmVmb3JlIC0gMSkgKyB0YWIpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0b0luZGVudChsaW5lLnN1YnN0cmluZygwLCBpICsgMSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiR0b0luZGVudChsaW5lLnN1YnN0cmluZygwLCBpQmVmb3JlIC0gMSkgKyB0YWIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm4gKz0gbGluZVtpXTsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZihkZWx0YSA8IDAgJiYgIWlzUGFyZW4pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRvSW5kZW50KGxpbmUuc3Vic3RyaW5nKDAsIGkrMSkpOwogICAgICAgIH0gZWxzZSBpZihkZWx0YSA+IDApIHsKICAgICAgICAgICAgYmFzZUluZGVudCA9IGJhc2VJbmRlbnQuc3Vic3RyaW5nKDAsIGJhc2VJbmRlbnQubGVuZ3RoIC0gdGFiLmxlbmd0aCk7CiAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBiYXNlSW5kZW50OwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY2FsY3VsYXRlSW5kZW50KGxpbmUsIHRhYik7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jbG9qdXJlIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvY2xvanVyZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-cobol.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jb2JvbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBDb2JvbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CnZhciBrZXl3b3JkcyA9ICJBQ0NFUFR8TUVSR0V8U1VNfEFERHx8TUVTU0FHRXxUQUJMRXxBRFZBTkNJTkd8TU9ERXxUQVBFfCIgKwoiQUZURVJ8TVVMVElQTFl8VEVTVHxBTEx8TkVHQVRJVkV8VEVYVHxBTFBIQUJFVHxORVhUfFRIQU58IiArCiJBTFNPfE5PfFRIRU58QUxURVJOQVRFfE5PVHxUSFJPVUdIfEFORHxOVU1CRVJ8VEhSVXxBTll8T0NDVVJTfCIgKwoiVElNRXxBUkV8T0Z8VE98QVJFQXxPRkZ8VE9QfHxBU0NFTkRJTkd8T01JVFRFRHxUUlVFfEFTU0lHTnxPTnxUWVBFfEFUfE9QRU58IiArCiJVTklUfEFVVEhPUnxPUnxVTlRJTHxCRUZPUkV8T1RIRVJ8VVB8QkxBTkt8T1VUUFVUfFVTRXxCTE9DS3xQQUdFfFVTSU5HfEJPVFRPTXwiICsKIlBFUkZPUk18VkFMVUV8Qll8UElDfFZBTFVFU3xDQUxMfFBJQ1RVUkV8V0hFTnxDQU5DRUx8UExVU3xXSVRIfENEfFBPSU5URVJ8V1JJVEV8IiArCiJDSEFSQUNURVJ8UE9TSVRJT058fFpFUk98Q0xPU0V8UE9TSVRJVkV8WkVST1N8Q09MVU1OfFBST0NFRFVSRXxaRVJPRVN8Q09NTUF8UFJPR1JBTXwiICsKIkNPTU1PTnxQUk9HUkFNLUlEfENPTU1VTklDQVRJT058UVVPVEV8Q09NUHxSQU5ET018Q09NUFVURXxSRUFEfENPTlRBSU5TfFJFQ0VJVkV8Q09ORklHVVJBVElPTnwiICsKIlJFQ09SRHxDT05USU5VRXxSRURFRklORVN8Q09OVFJPTHxSRUZFUkVOQ0V8Q09QWXxSRU1BSU5ERVJ8Q09VTlR8UkVQTEFDRXxEQVRBfFJFUE9SVHxEQVRFfFJFU0VSVkV8IiArCiJEQVl8UkVTRVR8REVMRVRFfFJFVFVSTnxERVNUSU5BVElPTnxSRVdJTkR8RElTQUJMRXxSRVdSSVRFfERJU1BMQVl8UklHSFR8RElWSURFfFJVTnxET1dOfFNBTUV8IiArCiJFTFNFfFNFQVJDSHxFTkFCTEV8U0VDVElPTnxFTkR8U0VMRUNUfEVOVklST05NRU5UfFNFTlRFTkNFfEVRVUFMfFNFVHxFUlJPUnxTSUdOfEVYSVR8U0VRVUVOVElBTHwiICsKIkVYVEVSTkFMfFNJWkV8RkxBU0V8U09SVHxGSUxFfFNPVVJDRXxMRU5HVEh8U1BBQ0V8TEVTU3xTVEFOREFSRHxMSU1JVHxTVEFSVHxMSU5FfFNUT1B8TE9DS3xTVFJJTkd8TE9XLVZBTFVFfFNVQlRSQUNUIjsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgKICAgICAgICAidHJ1ZXxmYWxzZXxudWxsIgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiY291bnR8bWlufG1heHxhdmd8c3VtfHJhbmt8bm93fGNvYWxlc2NlfG1haW4iCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcKi4qJCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICciLio/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICInLio/JyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwvfFxcL1xcL3wlfDxAPnxAPnw8QHwmfFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKF0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFwpXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0gXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhDb2JvbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Db2JvbEhpZ2hsaWdodFJ1bGVzID0gQ29ib2xIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NvYm9sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY29ib2xfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ29ib2xIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY29ib2xfaGlnaGxpZ2h0X3J1bGVzIikuQ29ib2xIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ29ib2xIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIioiOwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NvYm9sIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2NvYm9sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-coffee.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jb2ZmZWVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCiAgICBvb3AuaW5oZXJpdHMoQ29mZmVlSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgogICAgZnVuY3Rpb24gQ29mZmVlSGlnaGxpZ2h0UnVsZXMoKSB7CiAgICAgICAgdmFyIGlkZW50aWZpZXIgPSAiWyRBLVphLXpfXFx4N2YtXFx1ZmZmZl1bJFxcd1xceDdmLVxcdWZmZmZdKiI7CgogICAgICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAgICAgInRoaXN8dGhyb3d8dGhlbnx0cnl8dHlwZW9mfHN1cGVyfHN3aXRjaHxyZXR1cm58YnJlYWt8Ynl8Y29udGludWV8IiArCiAgICAgICAgICAgICJjYXRjaHxjbGFzc3xpbnxpbnN0YW5jZW9mfGlzfGlzbnR8aWZ8ZWxzZXxleHRlbmRzfGZvcnxvd258IiArCiAgICAgICAgICAgICJmaW5hbGx5fGZ1bmN0aW9ufHdoaWxlfHdoZW58bmV3fG5vfG5vdHxkZWxldGV8ZGVidWdnZXJ8ZG98bG9vcHxvZnxvZmZ8IiArCiAgICAgICAgICAgICJvcnxvbnx1bmxlc3N8dW50aWx8YW5kfHllc3x5aWVsZHxleHBvcnR8aW1wb3J0fGRlZmF1bHQiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGxhbmdDb25zdGFudCA9ICgKICAgICAgICAgICAgInRydWV8ZmFsc2V8bnVsbHx1bmRlZmluZWR8TmFOfEluZmluaXR5IgogICAgICAgICk7CgogICAgICAgIHZhciBpbGxlZ2FsID0gKAogICAgICAgICAgICAiY2FzZXxjb25zdHxmdW5jdGlvbnx2YXJ8dm9pZHx3aXRofGVudW18aW1wbGVtZW50c3wiICsKICAgICAgICAgICAgImludGVyZmFjZXxsZXR8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8c3RhdGljIgogICAgICAgICk7CgogICAgICAgIHZhciBzdXBwb3J0Q2xhc3MgPSAoCiAgICAgICAgICAgICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258TnVtYmVyfE9iamVjdHxSZWdFeHB8UmVmZXJlbmNlRXJyb3J8U3RyaW5nfCIgKwogICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgKwogICAgICAgICAgICAiU3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfCIgICsKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICsKICAgICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXkiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIHN1cHBvcnRGdW5jdGlvbiA9ICgKICAgICAgICAgICAgIk1hdGh8SlNPTnxpc05hTnxpc0Zpbml0ZXxwYXJzZUludHxwYXJzZUZsb2F0fGVuY29kZVVSSXwiICsKICAgICAgICAgICAgImVuY29kZVVSSUNvbXBvbmVudHxkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fFN0cmluZ3wiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIHZhcmlhYmxlTGFuZ3VhZ2UgPSAoCiAgICAgICAgICAgICJ3aW5kb3d8YXJndW1lbnRzfHByb3RvdHlwZXxkb2N1bWVudCIKICAgICAgICApOwoKICAgICAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGxhbmdDb25zdGFudCwKICAgICAgICAgICAgImludmFsaWQuaWxsZWdhbCI6IGlsbGVnYWwsCiAgICAgICAgICAgICJsYW5ndWFnZS5zdXBwb3J0LmNsYXNzIjogc3VwcG9ydENsYXNzLAogICAgICAgICAgICAibGFuZ3VhZ2Uuc3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKICAgICAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogdmFyaWFibGVMYW5ndWFnZQogICAgICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgICAgIHZhciBmdW5jdGlvblJ1bGUgPSB7CiAgICAgICAgICAgIHRva2VuOiBbInBhcmVuLmxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicGFyZW4ucnBhcmVuIiwgInRleHQiLCAic3RvcmFnZS50eXBlIl0sCiAgICAgICAgICAgIHJlZ2V4OiAvKD86KFwoKSgoPzoiW14iKV0qPyJ8J1teJyldKj8nfFwvW15cLyldKj9cL3xbXigpIidcL10pKj8pKFwpKShccyopKT8oW1wtPV0+KS8uc291cmNlCiAgICAgICAgfTsKCiAgICAgICAgdmFyIHN0cmluZ0VzY2FwZSA9IC9cXCg/OnhbMC05YS1mQS1GXXsyfXx1WzAtOWEtZkEtRl17NH18WzAtMl1bMC03XXswLDJ9fDNbMC02XVswLTddP3wzN1swLTddP3xbNC03XVswLTddP3wuKS87CgogICAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoweFtcXGRhLWZBLUZdK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/KSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxZG9jIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICInJyciLCBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiJycnIiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiBzdHJpbmdFc2NhcGV9LAogICAgICAgICAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFkb2MiLAogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAnIiIiJywKICAgICAgICAgICAgICAgICAgICBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAnIiIiJywgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4uc3RyaW5nIiwgcmVnZXggOiAnI3snLCBwdXNoIDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleCA6IHN0cmluZ0VzY2FwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICInIiwgbmV4dCA6IFsKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZyIsIHJlZ2V4IDogIiciLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleCA6IHN0cmluZ0VzY2FwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxcXN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwgcmVnZXggOiAnIicsIG5leHQgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuZW5kIiwgcmVnZXggOiAnIicsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogInBhcmVuLnN0cmluZyIsIHJlZ2V4IDogJyN7JywgcHVzaCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiBzdHJpbmdFc2NhcGV9LAogICAgICAgICAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAianMiLAogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIHJlZ2V4IDogImAiLCBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiYCIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4IDogc3RyaW5nRXNjYXBlfSwKICAgICAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKSB8fCAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5zdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAicGFyZW4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXgiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIi8vLyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCA6ICJoZXJlZ2V4IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5yZWdleCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XC8oPyFbXHM9XSlbXltcL1xuXFxdKig/Oig/OlxcW1xzXFNdfFxbW15cXVxuXFxdKig/OlxcW1xzXFNdW15cXVxuXFxdKikqXSlbXltcL1xuXFxdKikqXC8pKD86W2ltZ3ldezAsNH0pKD8hXHcpLwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIiMjIyg/ISMpIiwKICAgICAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiIy4qIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJ0ZXh0IiwgImlkZW50aWZpZXIiXSwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoXFwuKShcXHMqKSgiICsgaWxsZWdhbCArICIpIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXC57MSwzfSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgImxhbmd1YWdlLnN1cHBvcnQuY2xhc3MiLAogICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJrZXl3b3JkIiwgInRleHQiLCAibGFuZ3VhZ2Uuc3VwcG9ydC5jbGFzcyJdLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIihjbGFzcykoXFxzKykoIiArIGlkZW50aWZpZXIgKyAiKSg/OihcXHMrKShleHRlbmRzKShcXHMrKSgiICsgaWRlbnRpZmllciArICIpKT8iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiBbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0Il0uY29uY2F0KGZ1bmN0aW9uUnVsZS50b2tlbiksCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyICsgIikoXFxzKikoWz06XSkoXFxzKikiICsgZnVuY3Rpb25SdWxlLnJlZ2V4CiAgICAgICAgICAgICAgICB9LCAKICAgICAgICAgICAgICAgIGZ1bmN0aW9uUnVsZSwgCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIkAoPzoiICsgaWRlbnRpZmllciArICIpPyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwsfFxcLiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXC09XT4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiKD86Wy0rKi8lPD4mfF4hPz1dPXw+Pj49P3xcXC1cXC18XFwrXFwrfDo6fCYmPXxcXHxcXHw9fDw8PXw+Pj18XFw/XFwufFxcLnsyLDN9fFshKistPT48XSkiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJbKHtbXSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF19KV0iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH1dLAoKCiAgICAgICAgICAgIGhlcmVnZXggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4qPy8vL1tpbWd5XXswLDR9JywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQucmVnZXgiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyg/OiMuKik/IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXgiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxTKyIKICAgICAgICAgICAgfV0sCgogICAgICAgICAgICBjb21tZW50IDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIyMjJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH07CiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwogICAgfQoKICAgIGV4cG9ydHMuQ29mZmVlSGlnaGxpZ2h0UnVsZXMgPSBDb2ZmZWVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL21vZGUvY29mZmVlX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsImFjZS9yYW5nZSIsImFjZS9tb2RlL3RleHQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbGliL29vcCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJ1bGVzID0gcmVxdWlyZSgiLi9jb2ZmZWVfaGlnaGxpZ2h0X3J1bGVzIikuQ29mZmVlSGlnaGxpZ2h0UnVsZXM7CnZhciBPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKZnVuY3Rpb24gTW9kZSgpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgT3V0ZGVudCgpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKfQoKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHZhciBpbmRlbnRlciA9IC8oPzpbKHtbPTpdfFstPV0+fFxiKD86ZWxzZXx0cnl8KD86c3dpfGNhKXRjaCg/OlxzK1skQS1aYS16X1x4N2YtXHVmZmZmXVskXHdceDdmLVx1ZmZmZl0qKT98ZmluYWxseSkpXHMqJHxeXHMqKGVsc2VcYlxzKik/KD86aWZ8Zm9yfHdoaWxlfGxvb3ApXGIoPyEuKlxidGhlblxiKS87CiAgICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiIyMjIiwgZW5kOiAiIyMjIn07CiAgICAKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CiAgICAKICAgICAgICBpZiAoISh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9PT0gJ2NvbW1lbnQnKSAmJgogICAgICAgICAgICBzdGF0ZSA9PT0gJ3N0YXJ0JyAmJiBpbmRlbnRlci50ZXN0KGxpbmUpKQogICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwogICAgCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwogICAgCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwogICAgCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvY29mZmVlX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwogICAgICAgIAogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKICAgICAgICAKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jb2ZmZWUiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvY29mZmVlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-coldfusion.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jb2xkZnVzaW9uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIENvbGRmdXNpb25IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CiAgICB0aGlzLiRydWxlcy50YWdbMl0udG9rZW4gPSBmdW5jdGlvbiAoc3RhcnQsIHRhZykgewogICAgICAgIHZhciBncm91cCA9IHRhZy5zbGljZSgwLDIpID09ICJjZiIgPyAia2V5d29yZCIgOiAibWV0YS50YWciOwogICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgIGdyb3VwICsgIi50YWctbmFtZS54bWwiXTsKICAgIH07CgogICAgdmFyIGpzQW5kQ3NzID0gT2JqZWN0LmtleXModGhpcy4kcnVsZXMpLmZpbHRlcihmdW5jdGlvbih4KSB7CiAgICAgICAgcmV0dXJuIC9eKGpzfGNzcyktLy50ZXN0KHgpOwogICAgfSk7CiAgICB0aGlzLmVtYmVkUnVsZXMoewogICAgICAgIGNmbWxDb21tZW50OiBbCiAgICAgICAgICAgIHsgcmVnZXg6ICI8IS0tLSIsIHRva2VuOiAiY29tbWVudC5zdGFydCIsIHB1c2g6ICJjZm1sQ29tbWVudCJ9LCAKICAgICAgICAgICAgeyByZWdleDogIi0tLT4iLCB0b2tlbjogImNvbW1lbnQuZW5kIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogImNvbW1lbnQifQogICAgICAgIF0KICAgIH0sICIiLCBbCiAgICAgICAgeyByZWdleDogIjwhLS0tIiwgdG9rZW46ICJjb21tZW50LnN0YXJ0IiwgcHVzaDogImNmbWxDb21tZW50In0KICAgIF0sIFsKICAgICAgICAiY29tbWVudCIsICJzdGFydCIsICJ0YWdfd2hpdGVzcGFjZSIsICJjZGF0YSIKICAgIF0uY29uY2F0KGpzQW5kQ3NzKSk7CiAgICAKICAgIAogICAgdGhpcy4kcnVsZXMuY2ZUYWcgPSBbCiAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJwb3AifQogICAgXTsKICAgIHZhciBjZlRhZyA9IHsKICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHN0YXJ0LCB0YWcpIHsKICAgICAgICAgICAgcmV0dXJuIFsibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChzdGFydCA9PSAiPCIgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgICJrZXl3b3JkLnRhZy1uYW1lLnhtbCJdOwogICAgICAgIH0sCiAgICAgICAgcmVnZXggOiAiKDwvPykoY2ZbLV9hLXpBLVowLTk6Ll0rKSIsCiAgICAgICAgcHVzaDogImNmVGFnIgogICAgfTsKICAgIGpzQW5kQ3NzLmZvckVhY2goZnVuY3Rpb24ocykgewogICAgICAgIHRoaXMuJHJ1bGVzW3NdLnVuc2hpZnQoY2ZUYWcpOwogICAgfSwgdGhpcyk7CiAgICAKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImNmanMtIiwgImNmc2NyaXB0Iik7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENvbGRmdXNpb25IaWdobGlnaHRSdWxlcywgSHRtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQ29sZGZ1c2lvbkhpZ2hsaWdodFJ1bGVzID0gQ29sZGZ1c2lvbkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY29sZGZ1c2lvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvaHRtbCIsImFjZS9tb2RlL2NvbGRmdXNpb25faGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBIdG1sTW9kZSA9IHJlcXVpcmUoIi4vaHRtbCIpLk1vZGU7CnZhciBDb2xkZnVzaW9uSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NvbGRmdXNpb25faGlnaGxpZ2h0X3J1bGVzIikuQ29sZGZ1c2lvbkhpZ2hsaWdodFJ1bGVzOwoKdmFyIHZvaWRFbGVtZW50cyA9ICJjZmFib3J0fGNmYXBwbGljYXRpb258Y2Zhcmd1bWVudHxjZmFzc29jaWF0ZXxjZmJyZWFrfGNmY2FjaGV8Y2Zjb2xsZWN0aW9ufGNmY29va2llfGNmZGJpbmZvfGNmZGlyZWN0b3J5fGNmZHVtcHxjZmVsc2V8Y2ZlbHNlaWZ8Y2ZlcnJvcnxjZmV4Y2hhbmdlY2FsZW5kYXJ8Y2ZleGNoYW5nZWNvbm5lY3Rpb258Y2ZleGNoYW5nZWNvbnRhY3R8Y2ZleGNoYW5nZWZpbHRlcnxjZmV4Y2hhbmdldGFza3xjZmV4aXR8Y2ZmZWVkfGNmZmlsZXxjZmZsdXNofGNmZnRwfGNmaGVhZGVyfGNmaHRtbGhlYWR8Y2ZodHRwcGFyYW18Y2ZpbWFnZXxjZmltcG9ydHxjZmluY2x1ZGV8Y2ZpbmRleHxjZmluc2VydHxjZmludm9rZWFyZ3VtZW50fGNmbG9jYXRpb258Y2Zsb2d8Y2ZtYWlscGFyYW18Y2ZOVGF1dGhlbnRpY2F0ZXxjZm9iamVjdHxjZm9iamVjdGNhY2hlfGNmcGFyYW18Y2ZwZGZmb3JtcGFyYW18Y2ZwcmludHxjZnByb2NwYXJhbXxjZnByb2NyZXN1bHR8Y2Zwcm9wZXJ0eXxjZnF1ZXJ5cGFyYW18Y2ZyZWdpc3RyeXxjZnJlcG9ydHBhcmFtfGNmcmV0aHJvd3xjZnJldHVybnxjZnNjaGVkdWxlfGNmc2VhcmNofGNmc2V0fGNmc2V0dGluZ3xjZnRocm93fGNmemlwcGFyYW0pIi5zcGxpdCgifCIpOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxNb2RlLmNhbGwodGhpcyk7CiAgICAKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDb2xkZnVzaW9uSGlnaGxpZ2h0UnVsZXM7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBIdG1sTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IG9vcC5taXhpbihsYW5nLmFycmF5VG9NYXAodm9pZEVsZW1lbnRzKSwgdGhpcy52b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY29sZGZ1c2lvbiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2NvbGRmdXNpb24iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-crystal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jcnlzdGFsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCiAgICB2YXIgQ3J5c3RhbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24gKCkgewoKICAgICAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAgICAgInB1dHN8aW5pdGlhbGl6ZXxwcmV2aW91c19kZWZ8dHlwZW9mfGFzfHBvaW50ZXJvZnxzaXplb2Z8aW5zdGFuY2Vfc2l6ZW9mIgogICAgICAgICk7CgogICAgICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAgICAgImlmfGVuZHxlbHNlfGVsc2lmfHVubGVzc3xjYXNlfHdoZW58YnJlYWt8d2hpbGV8bmV4dHx1bnRpbHxkZWZ8cmV0dXJufGNsYXNzfG5ld3xnZXR0ZXJ8c2V0dGVyfHByb3BlcnR5fGxpYiIKICAgICAgICAgICAgKyAifGZ1bnxkb3xzdHJ1Y3R8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfG1vZHVsZXxzdXBlcnxhYnN0cmFjdHxpbmNsdWRlfGV4dGVuZHxiZWdpbnxlbnVtfHJhaXNlfHlpZWxkfHdpdGgiCiAgICAgICAgICAgICsgInxhbGlhc3xyZXNjdWV8ZW5zdXJlfG1hY3JvfHVuaW5pdGlhbGl6ZWR8dW5pb258dHlwZXxyZXF1aXJlIgogICAgICAgICk7CgogICAgICAgIHZhciBidWlsZGluQ29uc3RhbnRzID0gKAogICAgICAgICAgICAidHJ1ZXxUUlVFfGZhbHNlfEZBTFNFfG5pbHxOSUx8X19MSU5FX198X19FTkRfTElORV9ffF9fRklMRV9ffF9fRElSX18iCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGJ1aWx0aW5WYXJpYWJsZXMgPSAoCiAgICAgICAgICAgICIkREVCVUd8JGRlZm91dHwkRklMRU5BTUV8JExPQURfUEFUSHwkU0FGRXwkc3RkaW58JHN0ZG91dHwkc3RkZXJyfCRWRVJCT1NFfCIgKwogICAgICAgICAgICAicm9vdF91cmx8Zmxhc2h8c2Vzc2lvbnxjb29raWVzfHBhcmFtc3xyZXF1ZXN0fHJlc3BvbnNlfGxvZ2dlcnxzZWxmIgogICAgICAgICk7CgogICAgICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy4ka2V5d29yZHMgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsZGluQ29uc3RhbnRzLAogICAgICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiBidWlsdGluVmFyaWFibGVzLAogICAgICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMKICAgICAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgICAgICB2YXIgaGV4TnVtYmVyID0gIig/OjBbeFhdW1xcZEEtRmEtZl0rKSI7CiAgICAgICAgdmFyIGRlY051bWJlciA9ICIoPzpbMC05XVtcXGRfXSopIjsKICAgICAgICB2YXIgb2N0TnVtYmVyID0gIig/OjBvWzAtN11bMC03XSopIjsKICAgICAgICB2YXIgYmluTnVtYmVyID0gIig/OjBbYkJdWzAxXSspIjsKICAgICAgICB2YXIgaW50TnVtYmVyID0gIig/OlsrLV0/KSg/OiIgKyBoZXhOdW1iZXIgKyAifCIgKyBkZWNOdW1iZXIgKyAifCIgKyBvY3ROdW1iZXIgKyAifCIgKyBiaW5OdW1iZXIgKyAiKSg/Ol8/W2lJdVVdKD86OHwxNnwzMnw2NCkpP1xcYiI7CiAgICAgICAgdmFyIGVzY2FwZUV4cHJlc3Npb24gPSAvXFwoPzpbbnNydHZmYmFlJyJcXF18WzAtN117M318eFtcZGEtZkEtRl17Mn18dVtcZGEtZkEtRl17NH18dXtbXGRhLWZBLUZdezEsNn19KS87CiAgICAgICAgdmFyIGV4dEVzY2FwZUV4c3ByZXNzc2lvbiA9IC9cXCg/Oltuc3J0dmZiYWUnIlxcXXxbMC03XXszfXx4W1xkYS1mQS1GXXsyfXx1W1xkYS1mQS1GXXs0fXx1e1tcZGEtZkEtRl17MSw2fX18dXsoOj9bXGRhLWZBLUZdezJ9XHMpKltcZGEtZkEtRl17Mn19KS87CgogICAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIiMuKiQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIlsvXSIsCiAgICAgICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogZXh0RXNjYXBlRXhzcHJlc3NzaW9uCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIlsvXVtpbXhdKig/PVspLiw7XFxzXXwkKSIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbiAodmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInsiICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLmxwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5lbmQiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT0gInsiID8gInBhcmVuLmxwYXJlbiIgOiAicGFyZW4ucnBhcmVuIjsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IGV4dEVzY2FwZUV4c3ByZXNzc2lvbgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL1xcI3svCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8jey8sCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2g6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9gLywKICAgICAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiBleHRFc2NhcGVFeHNwcmVzc3Npb24KICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cXCN7LwogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvI3svLAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiAic3RhcnQiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL2AvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicnBzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyVbUXhdP1woLywKICAgICAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiBleHRFc2NhcGVFeHNwcmVzc3Npb24KICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cKC8sCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2g6ICJycHN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCkvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvI3svLAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiAic3RhcnQiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJzcHN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvJVtReF0/XFsvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IGV4dEVzY2FwZUV4c3ByZXNzc2lvbgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL1xbLywKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogInNwc3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9dLywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4uc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogLyN7LywKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAiZnBzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyVbUXhdP3svLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IGV4dEVzY2FwZUV4c3ByZXNzc2lvbgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL3svLAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiAiZnBzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL30vLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvI3svLAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiAic3RhcnQiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJ0cHN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvJVtReF0/PC8sCiAgICAgICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogZXh0RXNjYXBlRXhzcHJlc3NzaW9uCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvPC8sCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2g6ICJ0cHN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvPi8sCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8jey8sCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2g6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInBwc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8lW1F4XT9cfC8sCiAgICAgICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogZXh0RXNjYXBlRXhzcHJlc3NzaW9uCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL1x8LywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4uc3RhcnQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogLyN7LywKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicnBxc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8lW3F3aXJdXCgvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cKC8sCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2g6ICJycHFzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogL1wpLywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInNwcXN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvJVtxd2lyXVxbLywKICAgICAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFsvLAogICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiAic3Bxc3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9dLywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogImZwcXN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvJVtxd2lyXXsvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC97LywKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogImZwcXN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvfS8sCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJ0cHFzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyVbcXdpcl08LywKICAgICAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvPC8sCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2g6ICJ0cHFzdHJpbmciCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogLz4vLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicHBxc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8lW3F3aXJdXHwvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvJy8sCiAgICAgICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogZXNjYXBlRXhwcmVzc2lvbgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8nfCQvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9XSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsIC8vIG5hbWVzcGFjZXMgYXJlbid0IHN5bWJvbHMKICAgICAgICAgICAgICAgICAgICByZWdleDogIjo6IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUuaW5zdGFuY2UiLCAvLyBpbnN0YW5jZSB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiQHsxLDJ9W2EtekEtWl9cXGRdKyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmZyZXNoIiwgLy8gZnJlc2ggdmFyaWFibGUKICAgICAgICAgICAgICAgICAgICByZWdleDogIiVbYS16QS1aX1xcZF0rIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5jbGFzcyIsIC8vIGNsYXNzIG5hbWUKICAgICAgICAgICAgICAgICAgICByZWdleDogIltBLVpdW2EtekEtWl9cXGRdKyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm90aGVyLnN5bWJvbCIsIC8vIHN5bWJvbAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiWzpdKD86KD86PT09fDw9PnxcXFtdXFw/fFxcW109fFxcW118Pj58XFwqXFwqfDw8fD09fCE9fD49fDw9fCF+fD1+fDx8XFwrfC18XFwqfFxcL3wlfCZ8XFx8fFxcXnw+fCF8fil8KD86KD86W0EtWmEtel9dfFtAJF0oPz1bYS16QS1aMC05X10pKVthLXpBLVowLTlfXSpbIT0/XT8pKSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiWystXT9cXGQoPzpcXGR8Xyg/PVxcZCkpKig/Oig/OlxcLlxcZCg/OlxcZHxfKD89XFxkKSkqKT8oPzpbZUVdWystXT9cXGQrKT8pPyg/Ol8/W2ZGXSg/OjMyfDY0KSk/XFxiIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IGludE51bWJlcgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQub3RoZXIuc3ltYm9sIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogJzoiJywKICAgICAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiBleHRFc2NhcGVFeHNwcmVzc3Npb24KICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQub3RoZXIuc3ltYm9sIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbnN0YW50Lm90aGVyLnN5bWJvbCIKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiKD86aXNfYVxcP3xuaWxcXD98cmVzcG9uZHNfdG9cXD98YXNcXD8pIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl8kXVthLXpBLVowLTlfJCE/XSpcXGIiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5zeXN0ZW0iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwkXFwhfFxcJFxcPyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnNlcGFyYXRvci5rZXktdmFsdWUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiPT4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAiaGVyZWRvYyIsCiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24gKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gImhlcmVkb2MiOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gdmFsdWUuc3BsaXQodGhpcy5zcGxpdFJlZ2V4KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0LCB0b2tlbnNbM10pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJjb25zdGFudCIsIHZhbHVlOiB0b2tlbnNbMV19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJzdHJpbmciLCB2YWx1ZTogdG9rZW5zWzJdfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAic3VwcG9ydC5jbGFzcyIsIHZhbHVlOiB0b2tlbnNbM119LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJzdHJpbmciLCB2YWx1ZTogdG9rZW5zWzRdfQogICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIoPDwtKShbJ10/KShbXFx3XSspKFsnXT8pIiwKICAgICAgICAgICAgICAgICAgICBydWxlczogewogICAgICAgICAgICAgICAgICAgICAgICBoZXJlZG9jOiBbewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJeICsiCiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uICh2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9bLl1ccyooPyFbLl0pLywKICAgICAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXVxzKig/IVsuXSkvCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8XFw/fFxcOnwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxefFxcfCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1s/Oiw7Ll0vCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1soe10iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1xcXSl9XSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH07CgogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKICAgIH07CgogICAgb29wLmluaGVyaXRzKENyeXN0YWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCiAgICBleHBvcnRzLkNyeXN0YWxIaWdobGlnaHRSdWxlcyA9IENyeXN0YWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3J5c3RhbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2NyeXN0YWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENyeXN0YWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3J5c3RhbF9oaWdobGlnaHRfcnVsZXMiKS5DcnlzdGFsSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IENyeXN0YWxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgdmFyIHN0YXJ0aW5nQ2xhc3NPck1ldGhvZCA9IGxpbmUubWF0Y2goL15ccyooY2xhc3N8ZGVmfG1vZHVsZSlccy4qJC8pOwogICAgICAgICAgICB2YXIgc3RhcnRpbmdEb0Jsb2NrID0gbGluZS5tYXRjaCgvLipkbyhccyp8XHMrXHwuKlx8XHMqKSQvKTsKICAgICAgICAgICAgdmFyIHN0YXJ0aW5nQ29uZGl0aW9uYWwgPSBsaW5lLm1hdGNoKC9eXHMqKGlmfGVsc2V8d2hlbilccyovKTsKICAgICAgICAgICAgaWYgKG1hdGNoIHx8IHN0YXJ0aW5nQ2xhc3NPck1ldGhvZCB8fCBzdGFydGluZ0RvQmxvY2sgfHwgc3RhcnRpbmdDb25kaXRpb25hbCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gL15ccysoZW5kfGVsc2UpJC8udGVzdChsaW5lICsgaW5wdXQpIHx8IHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIGlmICgvfS8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoc2Vzc2lvbiwgcm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciBwcmV2TGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHRoaXMuJGdldEluZGVudChwcmV2TGluZSk7CiAgICAgICAgdmFyIHRhYiA9IHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CiAgICAgICAgaWYgKHByZXZJbmRlbnQubGVuZ3RoIDw9IGluZGVudC5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGluZGVudC5zbGljZSgtdGFiLmxlbmd0aCkgPT0gdGFiKQogICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmUobmV3IFJhbmdlKHJvdywgaW5kZW50Lmxlbmd0aC10YWIubGVuZ3RoLCByb3csIGluZGVudC5sZW5ndGgpKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NyeXN0YWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9jcnlzdGFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-csharp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBDU2hhcnBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJ0aGlzIiwKICAgICAgICAia2V5d29yZCI6ICJhYnN0cmFjdHxhc3luY3xhd2FpdHxldmVudHxuZXd8c3RydWN0fGFzfGV4cGxpY2l0fG51bGx8c3dpdGNofGJhc2V8ZXh0ZXJufG9iamVjdHx0aGlzfGJvb2x8ZmFsc2V8b3BlcmF0b3J8dGhyb3d8YnJlYWt8ZmluYWxseXxvdXR8dHJ1ZXxieXRlfGZpeGVkfG92ZXJyaWRlfHRyeXxjYXNlfGZsb2F0fHBhcmFtc3x0eXBlb2Z8Y2F0Y2h8Zm9yfHByaXZhdGV8dWludHxjaGFyfGZvcmVhY2h8cHJvdGVjdGVkfHVsb25nfGNoZWNrZWR8Z290b3xwdWJsaWN8dW5jaGVja2VkfGNsYXNzfGlmfHJlYWRvbmx5fHVuc2FmZXxjb25zdHxpbXBsaWNpdHxyZWZ8dXNob3J0fGNvbnRpbnVlfGlufHJldHVybnx1c2luZ3xkZWNpbWFsfGludHxzYnl0ZXx2aXJ0dWFsfGRlZmF1bHR8aW50ZXJmYWNlfHNlYWxlZHx2b2xhdGlsZXxkZWxlZ2F0ZXxpbnRlcm5hbHxwYXJ0aWFsfHNob3J0fHZvaWR8ZG98aXN8c2l6ZW9mfHdoaWxlfGRvdWJsZXxsb2NrfHN0YWNrYWxsb2N8ZWxzZXxsb25nfHN0YXRpY3xlbnVtfG5hbWVzcGFjZXxzdHJpbmd8dmFyfGR5bmFtaWMiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6ICJudWxsfHRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6IC8nKD86LnxcXCg6P3VbXGRhLWZBLUZdK3x4W1xkYS1mQS1GXSt8W3RicmYnIm5dKSk/Jy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgc3RhcnQgOiAnIicsIGVuZCA6ICcifCQnLCBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAge3Rva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IC9cXCg6P3VbXGRhLWZBLUZdK3x4W1xkYS1mQS1GXSt8W3RicmYnIm5dKS99LAogICAgICAgICAgICAgICAgICAgIHt0b2tlbjogImludmFsaWQiLCByZWdleDogL1xcLi99CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIHN0YXJ0IDogJ0AiJywgZW5kIDogJyInLCBuZXh0OlsKICAgICAgICAgICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogJyIiJ30KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgc3RhcnQgOiAvXCQiLywgZW5kIDogJyJ8JCcsIG5leHQ6IFsKICAgICAgICAgICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogL1xcKDo/JCl8e3svfSwKICAgICAgICAgICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogL1xcKDo/dVtcZGEtZkEtRl0rfHhbXGRhLWZBLUZdK3xbdGJyZicibl0pL30sCiAgICAgICAgICAgICAgICAgICAge3Rva2VuOiAiaW52YWxpZCIsIHJlZ2V4OiAvXFwuL30KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAiMFt4WF1bMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxccyojKGlmfGVsc2V8ZWxpZnxlbmRpZnxkZWZpbmV8dW5kZWZ8d2FybmluZ3xlcnJvcnxsaW5lfHJlZ2lvbnxlbmRyZWdpb258cHJhZ21hKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFw/fFxcOnxcXCx8XFw7fFxcLiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ1NoYXJwSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkNTaGFycEhpZ2hsaWdodFJ1bGVzID0gQ1NoYXJwSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzaGFycCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBDRm9sZE1vZGUgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQ0ZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMudXNpbmdSZSA9IC9eXHMqdXNpbmcgXFMvOwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlQmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlOwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgZncgPSB0aGlzLmdldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgICAgICBpZiAoIWZ3KSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIGlmICgvXlxzKiNyZWdpb25cYi8udGVzdChsaW5lKSkgCiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgdmFyIHVzaW5nUmUgPSB0aGlzLnVzaW5nUmU7CiAgICAgICAgICAgIGlmICh1c2luZ1JlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgICAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgICAgICAgICBpZiAoIXVzaW5nUmUudGVzdChwcmV2KSAmJiB1c2luZ1JlLnRlc3QobmV4dCkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlQmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgaWYgKHRoaXMudXNpbmdSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2luZ1N0YXRlbWVudEJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgIGlmICgvXlxzKiNyZWdpb25cYi8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VXNpbmdTdGF0ZW1lbnRCbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubWF0Y2godGhpcy51c2luZ1JlKVswXS5sZW5ndGggLSAxOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICBpZiAoL15ccyokLy50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICghdGhpcy51c2luZ1JlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKiMoZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkKICAgICAgICAgICAgICAgIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc2hhcnAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9jc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzaGFycCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENTaGFycEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIikuQ1NoYXJwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3NoYXJwIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IENTaGFycEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KICAgIAogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKltce1woXFtdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKICAKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jc2hhcnAiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9jc2hhcnAiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-csound_document.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cgp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKGVtYmVkZGVkUnVsZVByZWZpeCkgewoKICAgIHRoaXMuZW1iZWRkZWRSdWxlUHJlZml4ID0gZW1iZWRkZWRSdWxlUHJlZml4ID09PSB1bmRlZmluZWQgPyAiIiA6IGVtYmVkZGVkUnVsZVByZWZpeDsKCiAgICB0aGlzLnNlbWljb2xvbkNvbW1lbnRzID0gewogICAgICAgIHRva2VuIDogImNvbW1lbnQubGluZS5zZW1pY29sb24uY3NvdW5kIiwKICAgICAgICByZWdleCA6ICI7LiokIgogICAgfTsKCiAgICB0aGlzLmNvbW1lbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi9cXCoiLAogICAgICAgICAgICBwdXNoICA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqLyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQuYmxvY2suY3NvdW5kIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmxpbmUuZG91YmxlLXNsYXNoLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi8vLiokIgogICAgICAgIH0sCiAgICAgICAgdGhpcy5zZW1pY29sb25Db21tZW50cwogICAgXTsKCiAgICB0aGlzLm1hY3JvVXNlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogWyJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwgInB1bmN0dWF0aW9uLmRlZmluaXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLWxpc3QuYmVnaW4uY3NvdW5kIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJFtBLVpfYS16XVx3KlwuPykoXCgpLywKICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIGxpc3QiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXCRbQS1aX2Etel1cdyooPzpcLnxcYikvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLm51bWJlcnMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmZsb2F0LmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkK1tFZV1bKy1dP1xkKyl8KD86XGQrXC5cZCp8XGQqXC5cZCspKD86W0VlXVsrLV0/XGQrKT8vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlLm51bWJlci5jc291bmQiLCAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmhleGFkZWNpbWFsLmNzb3VuZCJdLAogICAgICAgICAgICByZWdleCA6IC8oMFtYeF0pKFswLTlBLUZhLWZdKykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cZCsvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLmJyYWNlZFN0cmluZ0NvbnRlbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cXCg/OltcXGFibnJ0Il18WzAtN117MSwzfSkvCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5wbGFjZWhvbGRlci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8lWyMwXC0gK10qXGQqKD86XC5cZCspP1tkaXVveFhmRmVFZ0dhQWNzXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvJSUvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzID0gWwogICAgICAgIHRoaXMubWFjcm9Vc2VzLAogICAgICAgIHRoaXMuYnJhY2VkU3RyaW5nQ29udGVudHMKICAgIF07CgogICAgdmFyIHN0YXJ0ID0gWwogICAgICAgIHRoaXMuY29tbWVudHMsCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvIyg/OmUoPzpuZCg/OmlmKT98bHNlKVxifCMjKXxAQD9bIFx0XSpcZCsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jaW5jbHVkZS8sCiAgICAgICAgICAgIHB1c2ggIDogWwogICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuY3NvdW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oW14gXHRdKSg/Oi4qP1wxKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jaW5jbHVkZXN0ci8sCiAgICAgICAgICAgIHB1c2ggIDogWwogICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuY3NvdW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oW14gXHRdKSg/Oi4qP1wxKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jWyBcdF0qZGVmaW5lLywKICAgICAgICAgICAgbmV4dCAgOiAiZGVmaW5lIGRpcmVjdGl2ZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyMoPzppZm4/ZGVmfHVuZGVmKVxiLywKICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gZGlyZWN0aXZlIgogICAgICAgIH0sCgogICAgICAgIHRoaXMubWFjcm9Vc2VzCiAgICBdOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IHN0YXJ0LAoKICAgICAgICAiZGVmaW5lIGRpcmVjdGl2ZSI6IFsKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUuZnVuY3Rpb24ucHJlcHJvY2Vzc29yLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24ubWFjcm8tcGFyYW1ldGVyLW5hbWUtbGlzdC5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCgvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIG5hbWUgbGlzdCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5tYWNyby5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJtYWNybyBib2R5IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gcGFyYW1ldGVyIG5hbWUgbGlzdCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUucGFyYW1ldGVyLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW0EtWl9hLXpdXHcqLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLm1hY3JvLXBhcmFtZXRlci1uYW1lLWxpc3QuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkZWZpbmUgZGlyZWN0aXZlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gYm9keSI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwjLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLm1hY3JvLmVuZC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdLAoKICAgICAgICAibWFjcm8gZGlyZWN0aXZlIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tBLVpfYS16XVx3Ki8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgbGlzdCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtbGlzdC5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wpLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgcXVvdGVkIHN0cmluZyIKICAgICAgICAgICAgfSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtcGFyZW50aGV0aWNhbC5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCgvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIHBhcmVudGhldGljYWwiCiAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtc2VwYXJhdG9yLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbIyddIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIHF1b3RlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcWyMnKCldLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1sjJygpXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBsaXN0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBwYXJlbnRoZXRpY2FsIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXFwpLwogICAgICAgICAgICB9LCB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLXBhcmVudGhldGljYWwuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cKS8KICAgICAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLXBhcmVudGhldGljYWwuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1woLywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBwYXJlbnRoZXRpY2FsIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMucHVzaFJ1bGUgPSBmdW5jdGlvbihwYXJhbXMpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMubmV4dCkpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubmV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGFyYW1zLm5leHRbaV0gPSB0aGlzLmVtYmVkZGVkUnVsZVByZWZpeCArIHBhcmFtcy5uZXh0W2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZWdleCA6IHBhcmFtcy5yZWdleCwgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zLm5leHQpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubmV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHBhcmFtcy5uZXh0W2ldKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocGFyYW1zLm5leHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnRva2VuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0IG5leHQoKSB7IHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcy5uZXh0KSA/IHBhcmFtcy5uZXh0W3BhcmFtcy5uZXh0Lmxlbmd0aCAtIDFdIDogcGFyYW1zLm5leHQ7IH0sCiAgICAgICAgICAgIHNldCBuZXh0KG5leHQpIHsKICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMubmV4dCkpIHsKICAgICAgICAgICAgICAgICAgICBwYXJhbXMubmV4dCA9IG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXQgdG9rZW4oKSB7IHJldHVybiBwYXJhbXMudG9rZW47IH0KICAgICAgICB9OwogICAgfTsKCiAgICB0aGlzLnBvcFJ1bGUgPSBmdW5jdGlvbihwYXJhbXMpIHsKICAgICAgICBpZiAocGFyYW1zLm5leHQpIHsKICAgICAgICAgICAgcGFyYW1zLm5leHQgPSB0aGlzLmVtYmVkZGVkUnVsZVByZWZpeCArIHBhcmFtcy5uZXh0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcmVnZXggOiBwYXJhbXMucmVnZXgsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrLCBsaW5lKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubmV4dCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocGFyYW1zLm5leHQpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5sZW5ndGggPiAxID8gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gOiBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfTsKCn0pLmNhbGwoQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCmV4cG9ydHMuQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMgPSBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2Nzb3VuZF9wcmVwcm9jZXNzb3JfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKdmFyIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzOwoKdmFyIENzb3VuZFNjb3JlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihlbWJlZGRlZFJ1bGVQcmVmaXgpIHsKCiAgICBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMsIGVtYmVkZGVkUnVsZVByZWZpeCk7CgogICAgdGhpcy5xdW90ZWRTdHJpbmdDb250ZW50cy5wdXNoKHsKICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICByZWdleCA6IC9bXiJdKiQvCiAgICB9KTsKCiAgICB2YXIgc3RhcnQgPSB0aGlzLiRydWxlcy5zdGFydDsKICAgIHN0YXJ0LnB1c2goCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgcmVnZXggOiAvW2FiQ2RlZmlxc3R2eHldLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3cvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmxhbmd1YWdlLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3ovCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZC5jb250cm9sLmNzb3VuZC1zY29yZSIsICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbC5jc291bmQtc2NvcmUiXSwKICAgICAgICAgICAgcmVnZXggOiAvKFtuTnBQXVtwUF0pKFxkKykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm90aGVyLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1ttbl0vLAogICAgICAgICAgICBwdXNoICA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3JcYi8sCiAgICAgICAgICAgIG5leHQgIDogInJlcGVhdCBzZWN0aW9uIgogICAgICAgIH0sCgogICAgICAgIHRoaXMubnVtYmVycywKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIlshK1xcLSovXiUmfDw+I34uXSIKICAgICAgICB9LAoKICAgICAgICB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgIG5leHQgIDogInF1b3RlZCBzdHJpbmciCiAgICAgICAgfSksCgogICAgICAgIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5icmFjZWQtbG9vcC5iZWdpbi5jc291bmQtc2NvcmUiLAogICAgICAgICAgICByZWdleCA6IC97LywKICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciBsZWZ0IGJyYWNlIgogICAgICAgIH0pCiAgICApOwoKICAgIHRoaXMuYWRkUnVsZXMoewogICAgICAgICJyZXBlYXQgc2VjdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmRlY2ltYWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xkKy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJyZXBlYXQgc2VjdGlvbiBiZWZvcmUgbGFiZWwiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXBlYXQgc2VjdGlvbiBiZWZvcmUgbGFiZWwiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLmxhYmVsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAicXVvdGVkIHN0cmluZyI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8KICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHRoaXMucXVvdGVkU3RyaW5nQ29udGVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuY3NvdW5kLXNjb3JlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgImxvb3AgYWZ0ZXIgbGVmdCBicmFjZSI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5kZWNpbWFsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cZCsvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciByZXBlYXQgY291bnQiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xTLiovCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJsb29wIGFmdGVyIHJlcGVhdCBjb3VudCI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLmZ1bmN0aW9uLnByZXByb2Nlc3Nvci5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW0EtWl9hLXpdXHcqXGIvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciBtYWNybyBuYW1lIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cUy4qLwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibG9vcCBhZnRlciBtYWNybyBuYW1lIjogWwogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmJyYWNlZC1sb29wLmVuZC5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvfS8KICAgICAgICAgICAgfSkKICAgICAgICBdCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlcywgQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzID0gQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2x1YV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBMdWFIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYnJlYWt8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGZvcnxmdW5jdGlvbnxpZnxpbnxsb2NhbHxyZXBlYXR8IisKICAgICAgICAgInJldHVybnx0aGVufHVudGlsfHdoaWxlfG9yfGFuZHxub3QiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKCJ0cnVlfGZhbHNlfG5pbHxfR3xfVkVSU0lPTiIpOwoKICAgIHZhciBmdW5jdGlvbnMgPSAoCiAgICAgICAgInN0cmluZ3x4cGNhbGx8cGFja2FnZXx0b3N0cmluZ3xwcmludHxvc3x1bnBhY2t8cmVxdWlyZXwiKwogICAgICAgICJnZXRmZW52fHNldG1ldGF0YWJsZXxuZXh0fGFzc2VydHx0b251bWJlcnxpb3xyYXdlcXVhbHwiKwogICAgICAgICJjb2xsZWN0Z2FyYmFnZXxnZXRtZXRhdGFibGV8bW9kdWxlfHJhd3NldHxtYXRofGRlYnVnfCIrCiAgICAgICAgInBjYWxsfHRhYmxlfG5ld3Byb3h5fHR5cGV8Y29yb3V0aW5lfF9HfHNlbGVjdHxnY2luZm98IisKICAgICAgICAicGFpcnN8cmF3Z2V0fGxvYWRzdHJpbmd8aXBhaXJzfF9WRVJTSU9OfGRvZmlsZXxzZXRmZW52fCIrCiAgICAgICAgImxvYWR8ZXJyb3J8bG9hZGZpbGV8IisKCiAgICAgICAgInN1Ynx1cHBlcnxsZW58Z2ZpbmR8cmVwfGZpbmR8bWF0Y2h8Y2hhcnxkdW1wfGdtYXRjaHwiKwogICAgICAgICJyZXZlcnNlfGJ5dGV8Zm9ybWF0fGdzdWJ8bG93ZXJ8cHJlbG9hZHxsb2FkbGlifGxvYWRlZHwiKwogICAgICAgICJsb2FkZXJzfGNwYXRofGNvbmZpZ3xwYXRofHNlZWFsbHxleGl0fHNldGxvY2FsZXxkYXRlfCIrCiAgICAgICAgImdldGVudnxkaWZmdGltZXxyZW1vdmV8dGltZXxjbG9ja3x0bXBuYW1lfHJlbmFtZXxleGVjdXRlfCIrCiAgICAgICAgImxpbmVzfHdyaXRlfGNsb3NlfGZsdXNofG9wZW58b3V0cHV0fHR5cGV8cmVhZHxzdGRlcnJ8IisKICAgICAgICAic3RkaW58aW5wdXR8c3Rkb3V0fHBvcGVufHRtcGZpbGV8bG9nfG1heHxhY29zfGh1Z2V8IisKICAgICAgICAibGRleHB8cGl8Y29zfHRhbmh8cG93fGRlZ3x0YW58Y29zaHxzaW5ofHJhbmRvbXxyYW5kb21zZWVkfCIrCiAgICAgICAgImZyZXhwfGNlaWx8Zmxvb3J8cmFkfGFic3xzcXJ0fG1vZGZ8YXNpbnxtaW58bW9kfGZtb2R8bG9nMTB8IisKICAgICAgICAiYXRhbjJ8ZXhwfHNpbnxhdGFufGdldHVwdmFsdWV8ZGVidWd8c2V0aG9va3xnZXRtZXRhdGFibGV8IisKICAgICAgICAiZ2V0aG9va3xzZXRtZXRhdGFibGV8c2V0bG9jYWx8dHJhY2ViYWNrfHNldGZlbnZ8Z2V0aW5mb3wiKwogICAgICAgICJzZXR1cHZhbHVlfGdldGxvY2FsfGdldHJlZ2lzdHJ5fGdldGZlbnZ8c2V0bnxpbnNlcnR8Z2V0bnwiKwogICAgICAgICJmb3JlYWNoaXxtYXhufGZvcmVhY2h8Y29uY2F0fHNvcnR8cmVtb3ZlfHJlc3VtZXx5aWVsZHwiKwogICAgICAgICJzdGF0dXN8d3JhcHxjcmVhdGV8cnVubmluZ3wiKwogICAgICAgICJfX2FkZHxfX3N1YnxfX21vZHxfX3VubXxfX2NvbmNhdHxfX2x0fF9faW5kZXh8X19jYWxsfF9fZ2N8X19tZXRhdGFibGV8IisKICAgICAgICAgIl9fbXVsfF9fZGl2fF9fcG93fF9fbGVufF9fZXF8X19sZXxfX25ld2luZGV4fF9fdG9zdHJpbmd8X19tb2RlfF9fdG9udW1iZXIiCiAgICApOwoKICAgIHZhciBzdGRMaWJhcmllcyA9ICgic3RyaW5nfHBhY2thZ2V8b3N8aW98bWF0aHxkZWJ1Z3x0YWJsZXxjb3JvdXRpbmUiKTsKCiAgICB2YXIgZGVwcmVjYXRlZEluNTE1MiA9ICgic2V0bnxmb3JlYWNofGZvcmVhY2hpfGdjaW5mb3xsb2cxMHxtYXhuIik7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBmdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQuZGVwcmVjYXRlZCI6IGRlcHJlY2F0ZWRJbjUxNTIsCiAgICAgICAgImNvbnN0YW50LmxpYnJhcnkiOiBzdGRMaWJhcmllcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJzZWxmIgogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgZGVjaW1hbEludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwogICAgdmFyIGhleEludGVnZXIgPSAiKD86MFt4WF1bXFxkQS1GYS1mXSspIjsKICAgIHZhciBpbnRlZ2VyID0gIig/OiIgKyBkZWNpbWFsSW50ZWdlciArICJ8IiArIGhleEludGVnZXIgKyAiKSI7CgogICAgdmFyIGZyYWN0aW9uID0gIig/OlxcLlxcZCspIjsKICAgIHZhciBpbnRQYXJ0ID0gIig/OlxcZCspIjsKICAgIHZhciBwb2ludEZsb2F0ID0gIig/Oig/OiIgKyBpbnRQYXJ0ICsgIj8iICsgZnJhY3Rpb24gKyAiKXwoPzoiICsgaW50UGFydCArICJcXC4pKSI7CiAgICB2YXIgZmxvYXROdW1iZXIgPSAiKD86IiArIHBvaW50RmxvYXQgKyAiKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHN0YXRlTmFtZTogImJyYWNrZXRlZENvbW1lbnQiLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spewogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHZhbHVlLmxlbmd0aCAtIDIsIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleCA6IC9cLVwtXFs9KlxbLywKICAgICAgICAgICAgbmV4dCAgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXT0qXF0vLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwtXFwtLiokIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJicmFja2V0ZWRTdHJpbmciLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spewogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHZhbHVlLmxlbmd0aCwgY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nLnN0YXJ0IjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAvXFs9KlxbLywKICAgICAgICAgICAgbmV4dCAgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nLmVuZCI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXT0qXF0vLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vICIgc3RyaW5nCiAgICAgICAgICAgIHJlZ2V4IDogJyIoPzpbXlxcXFxdfFxcXFwuKSo/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICInKD86W15cXFxcXXxcXFxcLikqPyciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgcmVnZXggOiBpbnRlZ2VyICsgIlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwqfFxcL3wlfFxcI3xcXF58fnw8fD58PD18PT58PT18fj18PXxcXDp8XFwuXFwuXFwufFxcLlxcLiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXFtcXChcXHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcXVxcKVxcfV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzK3xcXHcrIgogICAgICAgIH0gXQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEx1YUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5MdWFIaWdobGlnaHRSdWxlcyA9IEx1YUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFB5dGhvbkhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJhbmR8YXN8YXNzZXJ0fGJyZWFrfGNsYXNzfGNvbnRpbnVlfGRlZnxkZWx8ZWxpZnxlbHNlfGV4Y2VwdHxleGVjfCIgKwogICAgICAgICJmaW5hbGx5fGZvcnxmcm9tfGdsb2JhbHxpZnxpbXBvcnR8aW58aXN8bGFtYmRhfG5vdHxvcnxwYXNzfHByaW50fCIgKwogICAgICAgICJyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGR8YXN5bmN8YXdhaXR8bm9ubG9jYWwiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJUcnVlfEZhbHNlfE5vbmV8Tm90SW1wbGVtZW50ZWR8RWxsaXBzaXN8X19kZWJ1Z19fIgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiYWJzfGRpdm1vZHxpbnB1dHxvcGVufHN0YXRpY21ldGhvZHxhbGx8ZW51bWVyYXRlfGludHxvcmR8c3RyfGFueXwiICsKICAgICAgICAiZXZhbHxpc2luc3RhbmNlfHBvd3xzdW18YmFzZXN0cmluZ3xleGVjZmlsZXxpc3N1YmNsYXNzfHByaW50fHN1cGVyfCIgKwogICAgICAgICJiaW5maWxlfGJpbnxpdGVyfHByb3BlcnR5fHR1cGxlfGJvb2x8ZmlsdGVyfGxlbnxyYW5nZXx0eXBlfGJ5dGVhcnJheXwiICsKICAgICAgICAiZmxvYXR8bGlzdHxyYXdfaW5wdXR8dW5pY2hyfGNhbGxhYmxlfGZvcm1hdHxsb2NhbHN8cmVkdWNlfHVuaWNvZGV8IiArCiAgICAgICAgImNocnxmcm96ZW5zZXR8bG9uZ3xyZWxvYWR8dmFyc3xjbGFzc21ldGhvZHxnZXRhdHRyfG1hcHxyZXByfHhyYW5nZXwiICsKICAgICAgICAiY21wfGdsb2JhbHN8bWF4fHJldmVyc2VkfHppcHxjb21waWxlfGhhc2F0dHJ8bWVtb3J5dmlld3xyb3VuZHwiICsKICAgICAgICAiX19pbXBvcnRfX3xjb21wbGV4fGhhc2h8bWlufGFwcGx5fGRlbGF0dHJ8aGVscHxuZXh0fHNldGF0dHJ8c2V0fCIgKwogICAgICAgICJidWZmZXJ8ZGljdHxoZXh8b2JqZWN0fHNsaWNlfGNvZXJjZXxkaXJ8aWR8b2N0fHNvcnRlZHxpbnRlcm58IiArCiAgICAgICAgImFzY2lpfGJyZWFrcG9pbnR8Ynl0ZXMiCiAgICApOwogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJpbnZhbGlkLmRlcHJlY2F0ZWQiOiAiZGVidWdnZXIiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAic2VsZnxjbHMiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWx0aW5Db25zdGFudHMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgc3RyUHJlID0gIlt1VV0/IjsKICAgIHZhciBzdHJSYXdQcmUgPSAiW3JSXSI7CiAgICB2YXIgc3RyRm9ybWF0UHJlID0gIltmRl0iOwogICAgdmFyIHN0clJhd0Zvcm1hdFByZSA9ICIoPzpbclJdW2ZGXXxbZkZdW3JSXSkiOwogICAgdmFyIGRlY2ltYWxJbnRlZ2VyID0gIig/Oig/OlsxLTldXFxkKil8KD86MCkpIjsKICAgIHZhciBvY3RJbnRlZ2VyID0gIig/OjBbb09dP1swLTddKykiOwogICAgdmFyIGhleEludGVnZXIgPSAiKD86MFt4WF1bXFxkQS1GYS1mXSspIjsKICAgIHZhciBiaW5JbnRlZ2VyID0gIig/OjBbYkJdWzAxXSspIjsKICAgIHZhciBpbnRlZ2VyID0gIig/OiIgKyBkZWNpbWFsSW50ZWdlciArICJ8IiArIG9jdEludGVnZXIgKyAifCIgKyBoZXhJbnRlZ2VyICsgInwiICsgYmluSW50ZWdlciArICIpIjsKCiAgICB2YXIgZXhwb25lbnQgPSAiKD86W2VFXVsrLV0/XFxkKykiOwogICAgdmFyIGZyYWN0aW9uID0gIig/OlxcLlxcZCspIjsKICAgIHZhciBpbnRQYXJ0ID0gIig/OlxcZCspIjsKICAgIHZhciBwb2ludEZsb2F0ID0gIig/Oig/OiIgKyBpbnRQYXJ0ICsgIj8iICsgZnJhY3Rpb24gKyAiKXwoPzoiICsgaW50UGFydCArICJcXC4pKSI7CiAgICB2YXIgZXhwb25lbnRGbG9hdCA9ICIoPzooPzoiICsgcG9pbnRGbG9hdCArICJ8IiArIGludFBhcnQgKyAiKSIgKyBleHBvbmVudCArICIpIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzoiICsgZXhwb25lbnRGbG9hdCArICJ8IiArIHBvaW50RmxvYXQgKyAiKSI7CgogICAgdmFyIHN0cmluZ0VzY2FwZSA9ICJcXFxcKHhbMC05QS1GYS1mXXsyfXxbMC03XXszfXxbXFxcXGFiZm5ydHYnXCJdfFVbMC05QS1GYS1mXXs4fXx1WzAtOUEtRmEtZl17NH0pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWyB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBzdGFydAogICAgICAgICAgICByZWdleCA6IHN0clByZSArICciezN9JywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gIiBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyBtdWx0aSBsaW5lICcnJyBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQgOiAicXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAiJyg/PS4pIiwKICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3UHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAicmF3cXFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAKICAgICAgICAgICAgcmVnZXg6IHN0clJhd1ByZSArICciKD89LiknLAogICAgICAgICAgICBuZXh0OiAicmF3cXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd1ByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0OiAicmF3cXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICciezN9JywKICAgICAgICAgICAgbmV4dDogImZxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJGb3JtYXRQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dDogImZxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICInezN9IiwKICAgICAgICAgICAgbmV4dDogImZxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0OiAiZnFzdHJpbmciCiAgICAgICAgfSx7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd0Zvcm1hdFByZSArICciezN9JywKICAgICAgICAgICAgbmV4dDogInJmcXFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgJyIoPz0uKScsCiAgICAgICAgICAgIG5leHQ6ICJyZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgIid7M30iLAogICAgICAgICAgICBuZXh0OiAicmZxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd0Zvcm1hdFByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0OiAicmZxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6ICJcXCt8XFwtfFxcKnxcXCpcXCp8XFwvfFxcL1xcL3wlfEB8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uIiwKICAgICAgICAgICAgcmVnZXg6ICIsfDp8O3xcXC0+fFxcKz18XFwtPXxcXCo9fFxcLz18XFwvXFwvPXwlPXxAPXwmPXxcXHw9fF49fD4+PXw8PD18XFwqXFwqPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxbXFwoXFx7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxdXFwpXFx9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJjb25zdGFudHMiCiAgICAgICAgfV0sCiAgICAgICAgInFxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lICIiIiBzdHJpbmcgZW5kCiAgICAgICAgICAgIHJlZ2V4OiAnInszfScsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiJ3wkIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyYXdxcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICciezN9JywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyYXdxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyYXdxcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICcifCQnLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3FzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAicmF3cXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJmcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAiZnFxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAiZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiJ3wkIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICciezN9JywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJyZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJmcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJmcXN0cmluZ1BhclJ1bGVzIjogW3svL1RPRE86IG5lc3RlZCB7fQogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiW1xcW1xcKF0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiW1xcXVxcKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInKC4pKiciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnIiguKSoiJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJmdW5jdGlvbi5zdXBwb3J0IiwKICAgICAgICAgICAgcmVnZXg6ICIoIXN8IXJ8IWEpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImNvbnN0YW50cyIKICAgICAgICB9LHsKICAgICAgICAgICAgdG9rZW46ICdwYXJlbi5ycGFyZW4nLAogICAgICAgICAgICByZWdleDogIn0iLAogICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgIH0sewogICAgICAgICAgICB0b2tlbjogJ3BhcmVuLmxwYXJlbicsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH1dLAogICAgICAgICJjb25zdGFudHMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbWFnaW5hcnkKICAgICAgICAgICAgcmVnZXg6ICIoPzoiICsgZmxvYXROdW1iZXIgKyAifFxcZCspW2pKXVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4OiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gbG9uZyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4OiBpbnRlZ2VyICsgIltsTF1cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4OiBpbnRlZ2VyICsgIlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbInB1bmN0dWF0aW9uIiwgImZ1bmN0aW9uLnN1cHBvcnQiXSwvLyBtZXRob2QKICAgICAgICAgICAgcmVnZXg6ICIoXFwuKShbYS16QS1aX10rKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9XQogICAgfTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhQeXRob25IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSBQeXRob25IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzb3VuZF9vcmNoZXN0cmFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKdmFyIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NvdW5kX3Njb3JlX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFNjb3JlSGlnaGxpZ2h0UnVsZXM7CnZhciBMdWFIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbHVhX2hpZ2hsaWdodF9ydWxlcyIpLkx1YUhpZ2hsaWdodFJ1bGVzOwp2YXIgUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiKS5QeXRob25IaWdobGlnaHRSdWxlczsKCnZhciBDc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKGVtYmVkZGVkUnVsZVByZWZpeCkgewoKICAgIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcywgZW1iZWRkZWRSdWxlUHJlZml4KTsKICAgIHZhciBvcGNvZGVzID0gWwogICAgICAgICJBVFNhZGQiLAogICAgICAgICJBVFNhZGRueiIsCiAgICAgICAgIkFUU2J1ZnJlYWQiLAogICAgICAgICJBVFNjcm9zcyIsCiAgICAgICAgIkFUU2luZm8iLAogICAgICAgICJBVFNpbnRlcnByZWFkIiwKICAgICAgICAiQVRTcGFydGlhbHRhcCIsCiAgICAgICAgIkFUU3JlYWQiLAogICAgICAgICJBVFNyZWFkbnoiLAogICAgICAgICJBVFNzaW5ub2kiLAogICAgICAgICJGTGJveCIsCiAgICAgICAgIkZMYnV0QmFuayIsCiAgICAgICAgIkZMYnV0dG9uIiwKICAgICAgICAiRkxjbG9zZUJ1dHRvbiIsCiAgICAgICAgIkZMY29sb3IiLAogICAgICAgICJGTGNvbG9yMiIsCiAgICAgICAgIkZMY291bnQiLAogICAgICAgICJGTGV4ZWNCdXR0b24iLAogICAgICAgICJGTGdldHNuYXAiLAogICAgICAgICJGTGdyb3VwIiwKICAgICAgICAiRkxncm91cEVuZCIsCiAgICAgICAgIkZMZ3JvdXBfZW5kIiwKICAgICAgICAiRkxoaWRlIiwKICAgICAgICAiRkxodnNCb3giLAogICAgICAgICJGTGh2c0JveFNldFZhbHVlIiwKICAgICAgICAiRkxqb3kiLAogICAgICAgICJGTGtleUluIiwKICAgICAgICAiRkxrbm9iIiwKICAgICAgICAiRkxsYWJlbCIsCiAgICAgICAgIkZMbG9hZHNuYXAiLAogICAgICAgICJGTG1vdXNlIiwKICAgICAgICAiRkxwYWNrIiwKICAgICAgICAiRkxwYWNrRW5kIiwKICAgICAgICAiRkxwYWNrX2VuZCIsCiAgICAgICAgIkZMcGFuZWwiLAogICAgICAgICJGTHBhbmVsRW5kIiwKICAgICAgICAiRkxwYW5lbF9lbmQiLAogICAgICAgICJGTHByaW50ayIsCiAgICAgICAgIkZMcHJpbnRrMiIsCiAgICAgICAgIkZMcm9sbGVyIiwKICAgICAgICAiRkxydW4iLAogICAgICAgICJGTHNhdmVzbmFwIiwKICAgICAgICAiRkxzY3JvbGwiLAogICAgICAgICJGTHNjcm9sbEVuZCIsCiAgICAgICAgIkZMc2Nyb2xsX2VuZCIsCiAgICAgICAgIkZMc2V0QWxpZ24iLAogICAgICAgICJGTHNldEJveCIsCiAgICAgICAgIkZMc2V0Q29sb3IiLAogICAgICAgICJGTHNldENvbG9yMiIsCiAgICAgICAgIkZMc2V0Rm9udCIsCiAgICAgICAgIkZMc2V0UG9zaXRpb24iLAogICAgICAgICJGTHNldFNpemUiLAogICAgICAgICJGTHNldFNuYXBHcm91cCIsCiAgICAgICAgIkZMc2V0VGV4dCIsCiAgICAgICAgIkZMc2V0VGV4dENvbG9yIiwKICAgICAgICAiRkxzZXRUZXh0U2l6ZSIsCiAgICAgICAgIkZMc2V0VGV4dFR5cGUiLAogICAgICAgICJGTHNldFZhbCIsCiAgICAgICAgIkZMc2V0VmFsX2kiLAogICAgICAgICJGTHNldFZhbGkiLAogICAgICAgICJGTHNldHNuYXAiLAogICAgICAgICJGTHNob3ciLAogICAgICAgICJGTHNsaWRCbmsiLAogICAgICAgICJGTHNsaWRCbmsyIiwKICAgICAgICAiRkxzbGlkQm5rMlNldCIsCiAgICAgICAgIkZMc2xpZEJuazJTZXRrIiwKICAgICAgICAiRkxzbGlkQm5rR2V0SGFuZGxlIiwKICAgICAgICAiRkxzbGlkQm5rU2V0IiwKICAgICAgICAiRkxzbGlkQm5rU2V0ayIsCiAgICAgICAgIkZMc2xpZGVyIiwKICAgICAgICAiRkx0YWJzIiwKICAgICAgICAiRkx0YWJzRW5kIiwKICAgICAgICAiRkx0YWJzX2VuZCIsCiAgICAgICAgIkZMdGV4dCIsCiAgICAgICAgIkZMdXBkYXRlIiwKICAgICAgICAiRkx2YWx1ZSIsCiAgICAgICAgIkZMdmtleWJkIiwKICAgICAgICAiRkx2c2xpZEJuayIsCiAgICAgICAgIkZMdnNsaWRCbmsyIiwKICAgICAgICAiRkx4eWluIiwKICAgICAgICAiSmFja29BdWRpb0luIiwKICAgICAgICAiSmFja29BdWRpb0luQ29ubmVjdCIsCiAgICAgICAgIkphY2tvQXVkaW9PdXQiLAogICAgICAgICJKYWNrb0F1ZGlvT3V0Q29ubmVjdCIsCiAgICAgICAgIkphY2tvRnJlZXdoZWVsIiwKICAgICAgICAiSmFja29JbmZvIiwKICAgICAgICAiSmFja29Jbml0IiwKICAgICAgICAiSmFja29NaWRpSW5Db25uZWN0IiwKICAgICAgICAiSmFja29NaWRpT3V0IiwKICAgICAgICAiSmFja29NaWRpT3V0Q29ubmVjdCIsCiAgICAgICAgIkphY2tvTm90ZU91dCIsCiAgICAgICAgIkphY2tvT24iLAogICAgICAgICJKYWNrb1RyYW5zcG9ydCIsCiAgICAgICAgIkszNV9ocGYiLAogICAgICAgICJLMzVfbHBmIiwKICAgICAgICAiTWl4ZXJDbGVhciIsCiAgICAgICAgIk1peGVyR2V0TGV2ZWwiLAogICAgICAgICJNaXhlclJlY2VpdmUiLAogICAgICAgICJNaXhlclNlbmQiLAogICAgICAgICJNaXhlclNldExldmVsIiwKICAgICAgICAiTWl4ZXJTZXRMZXZlbF9pIiwKICAgICAgICAiT1NDYnVuZGxlIiwKICAgICAgICAiT1NDY291bnQiLAogICAgICAgICJPU0Npbml0IiwKICAgICAgICAiT1NDaW5pdE0iLAogICAgICAgICJPU0NsaXN0ZW4iLAogICAgICAgICJPU0NyYXciLAogICAgICAgICJPU0NzZW5kIiwKICAgICAgICAiT1NDc2VuZF9sbyIsCiAgICAgICAgIlMiLAogICAgICAgICJTVEtCYW5kZWRXRyIsCiAgICAgICAgIlNUS0JlZVRocmVlIiwKICAgICAgICAiU1RLQmxvd0JvdGwiLAogICAgICAgICJTVEtCbG93SG9sZSIsCiAgICAgICAgIlNUS0Jvd2VkIiwKICAgICAgICAiU1RLQnJhc3MiLAogICAgICAgICJTVEtDbGFyaW5ldCIsCiAgICAgICAgIlNUS0RydW1tZXIiLAogICAgICAgICJTVEtGTVZvaWNlcyIsCiAgICAgICAgIlNUS0ZsdXRlIiwKICAgICAgICAiU1RLSGV2eU1ldGwiLAogICAgICAgICJTVEtNYW5kb2xpbiIsCiAgICAgICAgIlNUS01vZGFsQmFyIiwKICAgICAgICAiU1RLTW9vZyIsCiAgICAgICAgIlNUS1BlcmNGbHV0IiwKICAgICAgICAiU1RLUGx1Y2tlZCIsCiAgICAgICAgIlNUS1Jlc29uYXRlIiwKICAgICAgICAiU1RLUmhvZGV5IiwKICAgICAgICAiU1RLU2F4b2ZvbnkiLAogICAgICAgICJTVEtTaGFrZXJzIiwKICAgICAgICAiU1RLU2ltcGxlIiwKICAgICAgICAiU1RLU2l0YXIiLAogICAgICAgICJTVEtTdGlmS2FycCIsCiAgICAgICAgIlNUS1R1YmVCZWxsIiwKICAgICAgICAiU1RLVm9pY0Zvcm0iLAogICAgICAgICJTVEtXaGlzdGxlIiwKICAgICAgICAiU1RLV3VybGV5IiwKICAgICAgICAiYSIsCiAgICAgICAgImFicyIsCiAgICAgICAgImFjdGl2ZSIsCiAgICAgICAgImFkc3IiLAogICAgICAgICJhZHN5biIsCiAgICAgICAgImFkc3ludCIsCiAgICAgICAgImFkc3ludDIiLAogICAgICAgICJhZnRvdWNoIiwKICAgICAgICAiYWxwYXNzIiwKICAgICAgICAiYWx3YXlzb24iLAogICAgICAgICJhbXBkYiIsCiAgICAgICAgImFtcGRiZnMiLAogICAgICAgICJhbXBtaWRpIiwKICAgICAgICAiYW1wbWlkaWQiLAogICAgICAgICJhcmVzb24iLAogICAgICAgICJhcmVzb25rIiwKICAgICAgICAiYXRvbmUiLAogICAgICAgICJhdG9uZWsiLAogICAgICAgICJhdG9uZXgiLAogICAgICAgICJiYWJvIiwKICAgICAgICAiYmFsYW5jZSIsCiAgICAgICAgImJhbGFuY2UyIiwKICAgICAgICAiYmFtYm9vIiwKICAgICAgICAiYmFybW9kZWwiLAogICAgICAgICJiYmN1dG0iLAogICAgICAgICJiYmN1dHMiLAogICAgICAgICJiZWFkc3ludCIsCiAgICAgICAgImJlb3NjIiwKICAgICAgICAiYmV0YXJhbmQiLAogICAgICAgICJiZXhwcm5kIiwKICAgICAgICAiYmZvcm1kZWMxIiwKICAgICAgICAiYmZvcm1lbmMxIiwKICAgICAgICAiYmluaXQiLAogICAgICAgICJiaXF1YWQiLAogICAgICAgICJiaXF1YWRhIiwKICAgICAgICAiYmlybmQiLAogICAgICAgICJicGYiLAogICAgICAgICJicGZjb3MiLAogICAgICAgICJicXJleiIsCiAgICAgICAgImJ1dGJwIiwKICAgICAgICAiYnV0YnIiLAogICAgICAgICJidXRocCIsCiAgICAgICAgImJ1dGxwIiwKICAgICAgICAiYnV0dGVyYnAiLAogICAgICAgICJidXR0ZXJiciIsCiAgICAgICAgImJ1dHRlcmhwIiwKICAgICAgICAiYnV0dGVybHAiLAogICAgICAgICJidXR0b24iLAogICAgICAgICJidXp6IiwKICAgICAgICAiYzJyIiwKICAgICAgICAiY2FiYXNhIiwKICAgICAgICAiY2F1Y2h5IiwKICAgICAgICAiY2F1Y2h5aSIsCiAgICAgICAgImNicnQiLAogICAgICAgICJjZWlsIiwKICAgICAgICAiY2VsbCIsCiAgICAgICAgImNlbnQiLAogICAgICAgICJjZW50cm9pZCIsCiAgICAgICAgImNlcHMiLAogICAgICAgICJjZXBzaW52IiwKICAgICAgICAiY2hhbmN0cmwiLAogICAgICAgICJjaGFuZ2VkIiwKICAgICAgICAiY2hhbmdlZDIiLAogICAgICAgICJjaGFuaSIsCiAgICAgICAgImNoYW5vIiwKICAgICAgICAiY2hlYnlzaGV2cG9seSIsCiAgICAgICAgImNoZWNrYm94IiwKICAgICAgICAiY2huX1MiLAogICAgICAgICJjaG5fYSIsCiAgICAgICAgImNobl9rIiwKICAgICAgICAiY2huY2xlYXIiLAogICAgICAgICJjaG5leHBvcnQiLAogICAgICAgICJjaG5nZXQiLAogICAgICAgICJjaG5nZXRrcyIsCiAgICAgICAgImNobm1peCIsCiAgICAgICAgImNobnBhcmFtcyIsCiAgICAgICAgImNobnNldCIsCiAgICAgICAgImNobnNldGtzIiwKICAgICAgICAiY2h1YXAiLAogICAgICAgICJjbGVhciIsCiAgICAgICAgImNsZmlsdCIsCiAgICAgICAgImNsaXAiLAogICAgICAgICJjbG9ja29mZiIsCiAgICAgICAgImNsb2Nrb24iLAogICAgICAgICJjbXAiLAogICAgICAgICJjbXBseHByb2QiLAogICAgICAgICJjb21iIiwKICAgICAgICAiY29tYmludiIsCiAgICAgICAgImNvbXBpbGVjc2QiLAogICAgICAgICJjb21waWxlb3JjIiwKICAgICAgICAiY29tcGlsZXN0ciIsCiAgICAgICAgImNvbXByZXNzIiwKICAgICAgICAiY29tcHJlc3MyIiwKICAgICAgICAiY29ubmVjdCIsCiAgICAgICAgImNvbnRyb2wiLAogICAgICAgICJjb252bGUiLAogICAgICAgICJjb252b2x2ZSIsCiAgICAgICAgImNvcHlhMmZ0YWIiLAogICAgICAgICJjb3B5ZjJhcnJheSIsCiAgICAgICAgImNvcyIsCiAgICAgICAgImNvc2giLAogICAgICAgICJjb3NpbnYiLAogICAgICAgICJjb3NzZWciLAogICAgICAgICJjb3NzZWdiIiwKICAgICAgICAiY29zc2VnciIsCiAgICAgICAgImNwczJwY2giLAogICAgICAgICJjcHNtaWRpIiwKICAgICAgICAiY3BzbWlkaWIiLAogICAgICAgICJjcHNtaWRpbm4iLAogICAgICAgICJjcHNvY3QiLAogICAgICAgICJjcHNwY2giLAogICAgICAgICJjcHN0bWlkIiwKICAgICAgICAiY3BzdHVuIiwKICAgICAgICAiY3BzdHVuaSIsCiAgICAgICAgImNwc3hwY2giLAogICAgICAgICJjcHVtZXRlciIsCiAgICAgICAgImNwdXByYyIsCiAgICAgICAgImNyb3NzMiIsCiAgICAgICAgImNyb3NzZm0iLAogICAgICAgICJjcm9zc2ZtaSIsCiAgICAgICAgImNyb3NzZm1wbSIsCiAgICAgICAgImNyb3NzZm1wbWkiLAogICAgICAgICJjcm9zc3BtIiwKICAgICAgICAiY3Jvc3NwbWkiLAogICAgICAgICJjcnVuY2giLAogICAgICAgICJjdGxjaG4iLAogICAgICAgICJjdHJsMTQiLAogICAgICAgICJjdHJsMjEiLAogICAgICAgICJjdHJsNyIsCiAgICAgICAgImN0cmxpbml0IiwKICAgICAgICAiY3VzZXJybmQiLAogICAgICAgICJkYW0iLAogICAgICAgICJkYXRlIiwKICAgICAgICAiZGF0ZXMiLAogICAgICAgICJkYiIsCiAgICAgICAgImRiYW1wIiwKICAgICAgICAiZGJmc2FtcCIsCiAgICAgICAgImRjYmxvY2siLAogICAgICAgICJkY2Jsb2NrMiIsCiAgICAgICAgImRjb252IiwKICAgICAgICAiZGN0IiwKICAgICAgICAiZGN0aW52IiwKICAgICAgICAiZGVpbnRlcmxlYXZlIiwKICAgICAgICAiZGVsYXkiLAogICAgICAgICJkZWxheTEiLAogICAgICAgICJkZWxheWsiLAogICAgICAgICJkZWxheXIiLAogICAgICAgICJkZWxheXciLAogICAgICAgICJkZWx0YXAiLAogICAgICAgICJkZWx0YXAzIiwKICAgICAgICAiZGVsdGFwaSIsCiAgICAgICAgImRlbHRhcG4iLAogICAgICAgICJkZWx0YXB4IiwKICAgICAgICAiZGVsdGFweHciLAogICAgICAgICJkZW5vcm0iLAogICAgICAgICJkaWZmIiwKICAgICAgICAiZGlvZGVfbGFkZGVyIiwKICAgICAgICAiZGlyZWN0b3J5IiwKICAgICAgICAiZGlza2dyYWluIiwKICAgICAgICAiZGlza2luIiwKICAgICAgICAiZGlza2luMiIsCiAgICAgICAgImRpc3BmZnQiLAogICAgICAgICJkaXNwbGF5IiwKICAgICAgICAiZGlzdG9ydCIsCiAgICAgICAgImRpc3RvcnQxIiwKICAgICAgICAiZGl2eiIsCiAgICAgICAgImRvcHBsZXIiLAogICAgICAgICJkb3QiLAogICAgICAgICJkb3duc2FtcCIsCiAgICAgICAgImRyaXB3YXRlciIsCiAgICAgICAgImRzc2lhY3RpdmF0ZSIsCiAgICAgICAgImRzc2lhdWRpbyIsCiAgICAgICAgImRzc2ljdGxzIiwKICAgICAgICAiZHNzaWluaXQiLAogICAgICAgICJkc3NpbGlzdCIsCiAgICAgICAgImR1bXBrIiwKICAgICAgICAiZHVtcGsyIiwKICAgICAgICAiZHVtcGszIiwKICAgICAgICAiZHVtcGs0IiwKICAgICAgICAiZHVzZXJybmQiLAogICAgICAgICJkdXN0IiwKICAgICAgICAiZHVzdDIiLAogICAgICAgICJlbnZscHgiLAogICAgICAgICJlbnZscHhyIiwKICAgICAgICAiZXBoYXNvciIsCiAgICAgICAgImVxZmlsIiwKICAgICAgICAiZXZhbHN0ciIsCiAgICAgICAgImV2ZW50IiwKICAgICAgICAiZXZlbnRfaSIsCiAgICAgICAgImV4Y2l0ZXIiLAogICAgICAgICJleGl0bm93IiwKICAgICAgICAiZXhwIiwKICAgICAgICAiZXhwY3VydmUiLAogICAgICAgICJleHBvbiIsCiAgICAgICAgImV4cHJhbmQiLAogICAgICAgICJleHByYW5kaSIsCiAgICAgICAgImV4cHNlZyIsCiAgICAgICAgImV4cHNlZ2EiLAogICAgICAgICJleHBzZWdiIiwKICAgICAgICAiZXhwc2VnYmEiLAogICAgICAgICJleHBzZWdyIiwKICAgICAgICAiZmFyZXlsZW4iLAogICAgICAgICJmYXJleWxlbmkiLAogICAgICAgICJmYXVzdGF1ZGlvIiwKICAgICAgICAiZmF1c3Rjb21waWxlIiwKICAgICAgICAiZmF1c3RjdGwiLAogICAgICAgICJmYXVzdGRzcCIsCiAgICAgICAgImZhdXN0Z2VuIiwKICAgICAgICAiZmF1c3RwbGF5IiwKICAgICAgICAiZmZ0IiwKICAgICAgICAiZmZ0aW52IiwKICAgICAgICAiZmljbG9zZSIsCiAgICAgICAgImZpbGViaXQiLAogICAgICAgICJmaWxlbGVuIiwKICAgICAgICAiZmlsZW5jaG5scyIsCiAgICAgICAgImZpbGVwZWFrIiwKICAgICAgICAiZmlsZXNjYWwiLAogICAgICAgICJmaWxlc3IiLAogICAgICAgICJmaWxldmFsaWQiLAogICAgICAgICJmaWxsYXJyYXkiLAogICAgICAgICJmaWx0ZXIyIiwKICAgICAgICAiZmluIiwKICAgICAgICAiZmluaSIsCiAgICAgICAgImZpbmsiLAogICAgICAgICJmaW9wZW4iLAogICAgICAgICJmbGFuZ2VyIiwKICAgICAgICAiZmxhc2h0eHQiLAogICAgICAgICJmbG9vcGVyIiwKICAgICAgICAiZmxvb3BlcjIiLAogICAgICAgICJmbG9vciIsCiAgICAgICAgImZtYW5hbCIsCiAgICAgICAgImZtYXgiLAogICAgICAgICJmbWIzIiwKICAgICAgICAiZm1iZWxsIiwKICAgICAgICAiZm1pbiIsCiAgICAgICAgImZtbWV0YWwiLAogICAgICAgICJmbW9kIiwKICAgICAgICAiZm1wZXJjZmwiLAogICAgICAgICJmbXJob2RlIiwKICAgICAgICAiZm12b2ljZSIsCiAgICAgICAgImZtd3VybGllIiwKICAgICAgICAiZm9mIiwKICAgICAgICAiZm9mMiIsCiAgICAgICAgImZvZmlsdGVyIiwKICAgICAgICAiZm9nIiwKICAgICAgICAiZm9sZCIsCiAgICAgICAgImZvbGxvdyIsCiAgICAgICAgImZvbGxvdzIiLAogICAgICAgICJmb3NjaWwiLAogICAgICAgICJmb3NjaWxpIiwKICAgICAgICAiZm91dCIsCiAgICAgICAgImZvdXRpIiwKICAgICAgICAiZm91dGlyIiwKICAgICAgICAiZm91dGsiLAogICAgICAgICJmcHJpbnRrcyIsCiAgICAgICAgImZwcmludHMiLAogICAgICAgICJmcmFjIiwKICAgICAgICAiZnJhY3RhbG5vaXNlIiwKICAgICAgICAiZnJhbWVidWZmZXIiLAogICAgICAgICJmcmVldmVyYiIsCiAgICAgICAgImZ0YXVkaW8iLAogICAgICAgICJmdGNobmxzIiwKICAgICAgICAiZnRjb252IiwKICAgICAgICAiZnRjcHMiLAogICAgICAgICJmdGZyZWUiLAogICAgICAgICJmdGdlbiIsCiAgICAgICAgImZ0Z2Vub25jZSIsCiAgICAgICAgImZ0Z2VudG1wIiwKICAgICAgICAiZnRsZW4iLAogICAgICAgICJmdGxvYWQiLAogICAgICAgICJmdGxvYWRrIiwKICAgICAgICAiZnRscHRpbSIsCiAgICAgICAgImZ0bW9yZiIsCiAgICAgICAgImZ0b20iLAogICAgICAgICJmdHByaW50IiwKICAgICAgICAiZnRyZXNpemUiLAogICAgICAgICJmdHJlc2l6ZWkiLAogICAgICAgICJmdHNhbXBsZWJhbmsiLAogICAgICAgICJmdHNhdmUiLAogICAgICAgICJmdHNhdmVrIiwKICAgICAgICAiZnRzbGljZSIsCiAgICAgICAgImZ0c3IiLAogICAgICAgICJnYWluIiwKICAgICAgICAiZ2FpbnNsaWRlciIsCiAgICAgICAgImdhdXNzIiwKICAgICAgICAiZ2F1c3NpIiwKICAgICAgICAiZ2F1c3N0cmlnIiwKICAgICAgICAiZ2J1enoiLAogICAgICAgICJnZW5hcnJheSIsCiAgICAgICAgImdlbmFycmF5X2kiLAogICAgICAgICJnZW5keSIsCiAgICAgICAgImdlbmR5YyIsCiAgICAgICAgImdlbmR5eCIsCiAgICAgICAgImdldGNmZyIsCiAgICAgICAgImdldGNvbCIsCiAgICAgICAgImdldGZ0YXJncyIsCiAgICAgICAgImdldHJvdyIsCiAgICAgICAgImdldHJvd2xpbiIsCiAgICAgICAgImdldHNlZWQiLAogICAgICAgICJnb2dvYmVsIiwKICAgICAgICAiZ3JhaW4iLAogICAgICAgICJncmFpbjIiLAogICAgICAgICJncmFpbjMiLAogICAgICAgICJncmFudWxlIiwKICAgICAgICAiZ3Vpcm8iLAogICAgICAgICJoYXJtb24iLAogICAgICAgICJoYXJtb24yIiwKICAgICAgICAiaGFybW9uMyIsCiAgICAgICAgImhhcm1vbjQiLAogICAgICAgICJoZGY1cmVhZCIsCiAgICAgICAgImhkZjV3cml0ZSIsCiAgICAgICAgImhpbGJlcnQiLAogICAgICAgICJoaWxiZXJ0MiIsCiAgICAgICAgImhydGZlYXJseSIsCiAgICAgICAgImhydGZtb3ZlIiwKICAgICAgICAiaHJ0Zm1vdmUyIiwKICAgICAgICAiaHJ0ZnJldmVyYiIsCiAgICAgICAgImhydGZzdGF0IiwKICAgICAgICAiaHNib3NjaWwiLAogICAgICAgICJodnMxIiwKICAgICAgICAiaHZzMiIsCiAgICAgICAgImh2czMiLAogICAgICAgICJoeXBvdCIsCiAgICAgICAgImkiLAogICAgICAgICJpaG9sZCIsCiAgICAgICAgImltYWdlY3JlYXRlIiwKICAgICAgICAiaW1hZ2VmcmVlIiwKICAgICAgICAiaW1hZ2VnZXRwaXhlbCIsCiAgICAgICAgImltYWdlbG9hZCIsCiAgICAgICAgImltYWdlc2F2ZSIsCiAgICAgICAgImltYWdlc2V0cGl4ZWwiLAogICAgICAgICJpbWFnZXNpemUiLAogICAgICAgICJpbiIsCiAgICAgICAgImluMzIiLAogICAgICAgICJpbmNoIiwKICAgICAgICAiaW5oIiwKICAgICAgICAiaW5pdCIsCiAgICAgICAgImluaXRjMTQiLAogICAgICAgICJpbml0YzIxIiwKICAgICAgICAiaW5pdGM3IiwKICAgICAgICAiaW5sZXRhIiwKICAgICAgICAiaW5sZXRmIiwKICAgICAgICAiaW5sZXRrIiwKICAgICAgICAiaW5sZXRraWQiLAogICAgICAgICJpbmxldHYiLAogICAgICAgICJpbm8iLAogICAgICAgICJpbnEiLAogICAgICAgICJpbnJnIiwKICAgICAgICAiaW5zIiwKICAgICAgICAiaW5zZ2xvYmFsIiwKICAgICAgICAiaW5zcmVtb3QiLAogICAgICAgICJpbnQiLAogICAgICAgICJpbnRlZyIsCiAgICAgICAgImludGVybGVhdmUiLAogICAgICAgICJpbnRlcnAiLAogICAgICAgICJpbnZhbHVlIiwKICAgICAgICAiaW54IiwKICAgICAgICAiaW56IiwKICAgICAgICAiamFja3RyYW5zcG9ydCIsCiAgICAgICAgImppdHRlciIsCiAgICAgICAgImppdHRlcjIiLAogICAgICAgICJqb3lzdGljayIsCiAgICAgICAgImpzcGxpbmUiLAogICAgICAgICJrIiwKICAgICAgICAibGFfaV9hZGRfbWMiLAogICAgICAgICJsYV9pX2FkZF9tciIsCiAgICAgICAgImxhX2lfYWRkX3ZjIiwKICAgICAgICAibGFfaV9hZGRfdnIiLAogICAgICAgICJsYV9pX2Fzc2lnbl9tYyIsCiAgICAgICAgImxhX2lfYXNzaWduX21yIiwKICAgICAgICAibGFfaV9hc3NpZ25fdCIsCiAgICAgICAgImxhX2lfYXNzaWduX3ZjIiwKICAgICAgICAibGFfaV9hc3NpZ25fdnIiLAogICAgICAgICJsYV9pX2Nvbmp1Z2F0ZV9tYyIsCiAgICAgICAgImxhX2lfY29uanVnYXRlX21yIiwKICAgICAgICAibGFfaV9jb25qdWdhdGVfdmMiLAogICAgICAgICJsYV9pX2Nvbmp1Z2F0ZV92ciIsCiAgICAgICAgImxhX2lfZGlzdGFuY2VfdmMiLAogICAgICAgICJsYV9pX2Rpc3RhbmNlX3ZyIiwKICAgICAgICAibGFfaV9kaXZpZGVfbWMiLAogICAgICAgICJsYV9pX2RpdmlkZV9tciIsCiAgICAgICAgImxhX2lfZGl2aWRlX3ZjIiwKICAgICAgICAibGFfaV9kaXZpZGVfdnIiLAogICAgICAgICJsYV9pX2RvdF9tYyIsCiAgICAgICAgImxhX2lfZG90X21jX3ZjIiwKICAgICAgICAibGFfaV9kb3RfbXIiLAogICAgICAgICJsYV9pX2RvdF9tcl92ciIsCiAgICAgICAgImxhX2lfZG90X3ZjIiwKICAgICAgICAibGFfaV9kb3RfdnIiLAogICAgICAgICJsYV9pX2dldF9tYyIsCiAgICAgICAgImxhX2lfZ2V0X21yIiwKICAgICAgICAibGFfaV9nZXRfdmMiLAogICAgICAgICJsYV9pX2dldF92ciIsCiAgICAgICAgImxhX2lfaW52ZXJ0X21jIiwKICAgICAgICAibGFfaV9pbnZlcnRfbXIiLAogICAgICAgICJsYV9pX2xvd2VyX3NvbHZlX21jIiwKICAgICAgICAibGFfaV9sb3dlcl9zb2x2ZV9tciIsCiAgICAgICAgImxhX2lfbHVfZGV0X21jIiwKICAgICAgICAibGFfaV9sdV9kZXRfbXIiLAogICAgICAgICJsYV9pX2x1X2ZhY3Rvcl9tYyIsCiAgICAgICAgImxhX2lfbHVfZmFjdG9yX21yIiwKICAgICAgICAibGFfaV9sdV9zb2x2ZV9tYyIsCiAgICAgICAgImxhX2lfbHVfc29sdmVfbXIiLAogICAgICAgICJsYV9pX21jX2NyZWF0ZSIsCiAgICAgICAgImxhX2lfbWNfc2V0IiwKICAgICAgICAibGFfaV9tcl9jcmVhdGUiLAogICAgICAgICJsYV9pX21yX3NldCIsCiAgICAgICAgImxhX2lfbXVsdGlwbHlfbWMiLAogICAgICAgICJsYV9pX211bHRpcGx5X21yIiwKICAgICAgICAibGFfaV9tdWx0aXBseV92YyIsCiAgICAgICAgImxhX2lfbXVsdGlwbHlfdnIiLAogICAgICAgICJsYV9pX25vcm0xX21jIiwKICAgICAgICAibGFfaV9ub3JtMV9tciIsCiAgICAgICAgImxhX2lfbm9ybTFfdmMiLAogICAgICAgICJsYV9pX25vcm0xX3ZyIiwKICAgICAgICAibGFfaV9ub3JtX2V1Y2xpZF9tYyIsCiAgICAgICAgImxhX2lfbm9ybV9ldWNsaWRfbXIiLAogICAgICAgICJsYV9pX25vcm1fZXVjbGlkX3ZjIiwKICAgICAgICAibGFfaV9ub3JtX2V1Y2xpZF92ciIsCiAgICAgICAgImxhX2lfbm9ybV9pbmZfbWMiLAogICAgICAgICJsYV9pX25vcm1faW5mX21yIiwKICAgICAgICAibGFfaV9ub3JtX2luZl92YyIsCiAgICAgICAgImxhX2lfbm9ybV9pbmZfdnIiLAogICAgICAgICJsYV9pX25vcm1fbWF4X21jIiwKICAgICAgICAibGFfaV9ub3JtX21heF9tciIsCiAgICAgICAgImxhX2lfcHJpbnRfbWMiLAogICAgICAgICJsYV9pX3ByaW50X21yIiwKICAgICAgICAibGFfaV9wcmludF92YyIsCiAgICAgICAgImxhX2lfcHJpbnRfdnIiLAogICAgICAgICJsYV9pX3FyX2VpZ2VuX21jIiwKICAgICAgICAibGFfaV9xcl9laWdlbl9tciIsCiAgICAgICAgImxhX2lfcXJfZmFjdG9yX21jIiwKICAgICAgICAibGFfaV9xcl9mYWN0b3JfbXIiLAogICAgICAgICJsYV9pX3FyX3N5bV9laWdlbl9tYyIsCiAgICAgICAgImxhX2lfcXJfc3ltX2VpZ2VuX21yIiwKICAgICAgICAibGFfaV9yYW5kb21fbWMiLAogICAgICAgICJsYV9pX3JhbmRvbV9tciIsCiAgICAgICAgImxhX2lfcmFuZG9tX3ZjIiwKICAgICAgICAibGFfaV9yYW5kb21fdnIiLAogICAgICAgICJsYV9pX3NpemVfbWMiLAogICAgICAgICJsYV9pX3NpemVfbXIiLAogICAgICAgICJsYV9pX3NpemVfdmMiLAogICAgICAgICJsYV9pX3NpemVfdnIiLAogICAgICAgICJsYV9pX3N1YnRyYWN0X21jIiwKICAgICAgICAibGFfaV9zdWJ0cmFjdF9tciIsCiAgICAgICAgImxhX2lfc3VidHJhY3RfdmMiLAogICAgICAgICJsYV9pX3N1YnRyYWN0X3ZyIiwKICAgICAgICAibGFfaV90X2Fzc2lnbiIsCiAgICAgICAgImxhX2lfdHJhY2VfbWMiLAogICAgICAgICJsYV9pX3RyYWNlX21yIiwKICAgICAgICAibGFfaV90cmFuc3Bvc2VfbWMiLAogICAgICAgICJsYV9pX3RyYW5zcG9zZV9tciIsCiAgICAgICAgImxhX2lfdXBwZXJfc29sdmVfbWMiLAogICAgICAgICJsYV9pX3VwcGVyX3NvbHZlX21yIiwKICAgICAgICAibGFfaV92Y19jcmVhdGUiLAogICAgICAgICJsYV9pX3ZjX3NldCIsCiAgICAgICAgImxhX2lfdnJfY3JlYXRlIiwKICAgICAgICAibGFfaV92cl9zZXQiLAogICAgICAgICJsYV9rX2FfYXNzaWduIiwKICAgICAgICAibGFfa19hZGRfbWMiLAogICAgICAgICJsYV9rX2FkZF9tciIsCiAgICAgICAgImxhX2tfYWRkX3ZjIiwKICAgICAgICAibGFfa19hZGRfdnIiLAogICAgICAgICJsYV9rX2Fzc2lnbl9hIiwKICAgICAgICAibGFfa19hc3NpZ25fZiIsCiAgICAgICAgImxhX2tfYXNzaWduX21jIiwKICAgICAgICAibGFfa19hc3NpZ25fbXIiLAogICAgICAgICJsYV9rX2Fzc2lnbl90IiwKICAgICAgICAibGFfa19hc3NpZ25fdmMiLAogICAgICAgICJsYV9rX2Fzc2lnbl92ciIsCiAgICAgICAgImxhX2tfY29uanVnYXRlX21jIiwKICAgICAgICAibGFfa19jb25qdWdhdGVfbXIiLAogICAgICAgICJsYV9rX2Nvbmp1Z2F0ZV92YyIsCiAgICAgICAgImxhX2tfY29uanVnYXRlX3ZyIiwKICAgICAgICAibGFfa19jdXJyZW50X2YiLAogICAgICAgICJsYV9rX2N1cnJlbnRfdnIiLAogICAgICAgICJsYV9rX2Rpc3RhbmNlX3ZjIiwKICAgICAgICAibGFfa19kaXN0YW5jZV92ciIsCiAgICAgICAgImxhX2tfZGl2aWRlX21jIiwKICAgICAgICAibGFfa19kaXZpZGVfbXIiLAogICAgICAgICJsYV9rX2RpdmlkZV92YyIsCiAgICAgICAgImxhX2tfZGl2aWRlX3ZyIiwKICAgICAgICAibGFfa19kb3RfbWMiLAogICAgICAgICJsYV9rX2RvdF9tY192YyIsCiAgICAgICAgImxhX2tfZG90X21yIiwKICAgICAgICAibGFfa19kb3RfbXJfdnIiLAogICAgICAgICJsYV9rX2RvdF92YyIsCiAgICAgICAgImxhX2tfZG90X3ZyIiwKICAgICAgICAibGFfa19mX2Fzc2lnbiIsCiAgICAgICAgImxhX2tfZ2V0X21jIiwKICAgICAgICAibGFfa19nZXRfbXIiLAogICAgICAgICJsYV9rX2dldF92YyIsCiAgICAgICAgImxhX2tfZ2V0X3ZyIiwKICAgICAgICAibGFfa19pbnZlcnRfbWMiLAogICAgICAgICJsYV9rX2ludmVydF9tciIsCiAgICAgICAgImxhX2tfbG93ZXJfc29sdmVfbWMiLAogICAgICAgICJsYV9rX2xvd2VyX3NvbHZlX21yIiwKICAgICAgICAibGFfa19sdV9kZXRfbWMiLAogICAgICAgICJsYV9rX2x1X2RldF9tciIsCiAgICAgICAgImxhX2tfbHVfZmFjdG9yX21jIiwKICAgICAgICAibGFfa19sdV9mYWN0b3JfbXIiLAogICAgICAgICJsYV9rX2x1X3NvbHZlX21jIiwKICAgICAgICAibGFfa19sdV9zb2x2ZV9tciIsCiAgICAgICAgImxhX2tfbWNfc2V0IiwKICAgICAgICAibGFfa19tcl9zZXQiLAogICAgICAgICJsYV9rX211bHRpcGx5X21jIiwKICAgICAgICAibGFfa19tdWx0aXBseV9tciIsCiAgICAgICAgImxhX2tfbXVsdGlwbHlfdmMiLAogICAgICAgICJsYV9rX211bHRpcGx5X3ZyIiwKICAgICAgICAibGFfa19ub3JtMV9tYyIsCiAgICAgICAgImxhX2tfbm9ybTFfbXIiLAogICAgICAgICJsYV9rX25vcm0xX3ZjIiwKICAgICAgICAibGFfa19ub3JtMV92ciIsCiAgICAgICAgImxhX2tfbm9ybV9ldWNsaWRfbWMiLAogICAgICAgICJsYV9rX25vcm1fZXVjbGlkX21yIiwKICAgICAgICAibGFfa19ub3JtX2V1Y2xpZF92YyIsCiAgICAgICAgImxhX2tfbm9ybV9ldWNsaWRfdnIiLAogICAgICAgICJsYV9rX25vcm1faW5mX21jIiwKICAgICAgICAibGFfa19ub3JtX2luZl9tciIsCiAgICAgICAgImxhX2tfbm9ybV9pbmZfdmMiLAogICAgICAgICJsYV9rX25vcm1faW5mX3ZyIiwKICAgICAgICAibGFfa19ub3JtX21heF9tYyIsCiAgICAgICAgImxhX2tfbm9ybV9tYXhfbXIiLAogICAgICAgICJsYV9rX3FyX2VpZ2VuX21jIiwKICAgICAgICAibGFfa19xcl9laWdlbl9tciIsCiAgICAgICAgImxhX2tfcXJfZmFjdG9yX21jIiwKICAgICAgICAibGFfa19xcl9mYWN0b3JfbXIiLAogICAgICAgICJsYV9rX3FyX3N5bV9laWdlbl9tYyIsCiAgICAgICAgImxhX2tfcXJfc3ltX2VpZ2VuX21yIiwKICAgICAgICAibGFfa19yYW5kb21fbWMiLAogICAgICAgICJsYV9rX3JhbmRvbV9tciIsCiAgICAgICAgImxhX2tfcmFuZG9tX3ZjIiwKICAgICAgICAibGFfa19yYW5kb21fdnIiLAogICAgICAgICJsYV9rX3N1YnRyYWN0X21jIiwKICAgICAgICAibGFfa19zdWJ0cmFjdF9tciIsCiAgICAgICAgImxhX2tfc3VidHJhY3RfdmMiLAogICAgICAgICJsYV9rX3N1YnRyYWN0X3ZyIiwKICAgICAgICAibGFfa190X2Fzc2lnbiIsCiAgICAgICAgImxhX2tfdHJhY2VfbWMiLAogICAgICAgICJsYV9rX3RyYWNlX21yIiwKICAgICAgICAibGFfa191cHBlcl9zb2x2ZV9tYyIsCiAgICAgICAgImxhX2tfdXBwZXJfc29sdmVfbXIiLAogICAgICAgICJsYV9rX3ZjX3NldCIsCiAgICAgICAgImxhX2tfdnJfc2V0IiwKICAgICAgICAibGVuYXJyYXkiLAogICAgICAgICJsZm8iLAogICAgICAgICJsaW1pdCIsCiAgICAgICAgImxpbWl0MSIsCiAgICAgICAgImxpbmNvcyIsCiAgICAgICAgImxpbmUiLAogICAgICAgICJsaW5lbiIsCiAgICAgICAgImxpbmVuciIsCiAgICAgICAgImxpbmV0byIsCiAgICAgICAgImxpbmtfYmVhdF9mb3JjZSIsCiAgICAgICAgImxpbmtfYmVhdF9nZXQiLAogICAgICAgICJsaW5rX2JlYXRfcmVxdWVzdCIsCiAgICAgICAgImxpbmtfY3JlYXRlIiwKICAgICAgICAibGlua19lbmFibGUiLAogICAgICAgICJsaW5rX2lzX2VuYWJsZWQiLAogICAgICAgICJsaW5rX21ldHJvIiwKICAgICAgICAibGlua19wZWVycyIsCiAgICAgICAgImxpbmtfdGVtcG9fZ2V0IiwKICAgICAgICAibGlua190ZW1wb19zZXQiLAogICAgICAgICJsaW5saW4iLAogICAgICAgICJsaW5yYW5kIiwKICAgICAgICAibGluc2VnIiwKICAgICAgICAibGluc2VnYiIsCiAgICAgICAgImxpbnNlZ3IiLAogICAgICAgICJsaXZlY29udiIsCiAgICAgICAgImxvY3NlbmQiLAogICAgICAgICJsb2NzaWciLAogICAgICAgICJsb2ciLAogICAgICAgICJsb2cxMCIsCiAgICAgICAgImxvZzIiLAogICAgICAgICJsb2didHdvIiwKICAgICAgICAibG9nY3VydmUiLAogICAgICAgICJsb29wc2VnIiwKICAgICAgICAibG9vcHNlZ3AiLAogICAgICAgICJsb29wdHNlZyIsCiAgICAgICAgImxvb3B4c2VnIiwKICAgICAgICAibG9yZW56IiwKICAgICAgICAibG9zY2lsIiwKICAgICAgICAibG9zY2lsMyIsCiAgICAgICAgImxvc2NpbDNwaHMiLAogICAgICAgICJsb3NjaWxwaHMiLAogICAgICAgICJsb3NjaWx4IiwKICAgICAgICAibG93cGFzczIiLAogICAgICAgICJsb3dyZXMiLAogICAgICAgICJsb3dyZXN4IiwKICAgICAgICAibHBmMTgiLAogICAgICAgICJscGZvcm0iLAogICAgICAgICJscGZyZXNvbiIsCiAgICAgICAgImxwaGFzb3IiLAogICAgICAgICJscGludGVycCIsCiAgICAgICAgImxwb3NjaWwiLAogICAgICAgICJscG9zY2lsMyIsCiAgICAgICAgImxwb3NjaWxhIiwKICAgICAgICAibHBvc2NpbHNhIiwKICAgICAgICAibHBvc2NpbHNhMiIsCiAgICAgICAgImxwcmVhZCIsCiAgICAgICAgImxwcmVzb24iLAogICAgICAgICJscHNob2xkIiwKICAgICAgICAibHBzaG9sZHAiLAogICAgICAgICJscHNsb3QiLAogICAgICAgICJsdWFfZXhlYyIsCiAgICAgICAgImx1YV9pYW9wY2FsbCIsCiAgICAgICAgImx1YV9pYW9wY2FsbF9vZmYiLAogICAgICAgICJsdWFfaWtvcGNhbGwiLAogICAgICAgICJsdWFfaWtvcGNhbGxfb2ZmIiwKICAgICAgICAibHVhX2lvcGNhbGwiLAogICAgICAgICJsdWFfaW9wY2FsbF9vZmYiLAogICAgICAgICJsdWFfb3BkZWYiLAogICAgICAgICJtYWMiLAogICAgICAgICJtYWNhIiwKICAgICAgICAibWFkc3IiLAogICAgICAgICJtYWdzIiwKICAgICAgICAibWFuZGVsIiwKICAgICAgICAibWFuZG9sIiwKICAgICAgICAibWFwYXJyYXkiLAogICAgICAgICJtYXBhcnJheV9pIiwKICAgICAgICAibWFyaW1iYSIsCiAgICAgICAgIm1hc3NpZ24iLAogICAgICAgICJtYXgiLAogICAgICAgICJtYXhfayIsCiAgICAgICAgIm1heGFicyIsCiAgICAgICAgIm1heGFic2FjY3VtIiwKICAgICAgICAibWF4YWNjdW0iLAogICAgICAgICJtYXhhbGxvYyIsCiAgICAgICAgIm1heGFycmF5IiwKICAgICAgICAibWNsb2NrIiwKICAgICAgICAibWRlbGF5IiwKICAgICAgICAibWVkaWFuIiwKICAgICAgICAibWVkaWFuayIsCiAgICAgICAgIm1ldHJvIiwKICAgICAgICAibWZiIiwKICAgICAgICAibWlkZ2xvYmFsIiwKICAgICAgICAibWlkaWFycCIsCiAgICAgICAgIm1pZGljMTQiLAogICAgICAgICJtaWRpYzIxIiwKICAgICAgICAibWlkaWM3IiwKICAgICAgICAibWlkaWNoYW5uZWxhZnRlcnRvdWNoIiwKICAgICAgICAibWlkaWNobiIsCiAgICAgICAgIm1pZGljb250cm9sY2hhbmdlIiwKICAgICAgICAibWlkaWN0cmwiLAogICAgICAgICJtaWRpZGVmYXVsdCIsCiAgICAgICAgIm1pZGlmaWxlc3RhdHVzIiwKICAgICAgICAibWlkaWluIiwKICAgICAgICAibWlkaW5vdGVvZmYiLAogICAgICAgICJtaWRpbm90ZW9uY3BzIiwKICAgICAgICAibWlkaW5vdGVvbmtleSIsCiAgICAgICAgIm1pZGlub3Rlb25vY3QiLAogICAgICAgICJtaWRpbm90ZW9ucGNoIiwKICAgICAgICAibWlkaW9uIiwKICAgICAgICAibWlkaW9uMiIsCiAgICAgICAgIm1pZGlvdXQiLAogICAgICAgICJtaWRpb3V0X2kiLAogICAgICAgICJtaWRpcGdtIiwKICAgICAgICAibWlkaXBpdGNoYmVuZCIsCiAgICAgICAgIm1pZGlwb2x5YWZ0ZXJ0b3VjaCIsCiAgICAgICAgIm1pZGlwcm9ncmFtY2hhbmdlIiwKICAgICAgICAibWlkaXRlbXBvIiwKICAgICAgICAibWlkcmVtb3QiLAogICAgICAgICJtaW4iLAogICAgICAgICJtaW5hYnMiLAogICAgICAgICJtaW5hYnNhY2N1bSIsCiAgICAgICAgIm1pbmFjY3VtIiwKICAgICAgICAibWluYXJyYXkiLAogICAgICAgICJtaW5jZXIiLAogICAgICAgICJtaXJyb3IiLAogICAgICAgICJtb2RlIiwKICAgICAgICAibW9kbWF0cml4IiwKICAgICAgICAibW9uaXRvciIsCiAgICAgICAgIm1vb2ciLAogICAgICAgICJtb29nbGFkZGVyIiwKICAgICAgICAibW9vZ2xhZGRlcjIiLAogICAgICAgICJtb29ndmNmIiwKICAgICAgICAibW9vZ3ZjZjIiLAogICAgICAgICJtb3NjaWwiLAogICAgICAgICJtcDNiaXRyYXRlIiwKICAgICAgICAibXAzaW4iLAogICAgICAgICJtcDNsZW4iLAogICAgICAgICJtcDNuY2hubHMiLAogICAgICAgICJtcDNzY2FsIiwKICAgICAgICAibXAzc3IiLAogICAgICAgICJtcHVsc2UiLAogICAgICAgICJtcnRtc2ciLAogICAgICAgICJtdG9mIiwKICAgICAgICAibXRvbiIsCiAgICAgICAgIm11bHRpdGFwIiwKICAgICAgICAibXV0ZSIsCiAgICAgICAgIm12Y2hwZiIsCiAgICAgICAgIm12Y2xwZjEiLAogICAgICAgICJtdmNscGYyIiwKICAgICAgICAibXZjbHBmMyIsCiAgICAgICAgIm12Y2xwZjQiLAogICAgICAgICJteGFkc3IiLAogICAgICAgICJuY2hubHNfaHciLAogICAgICAgICJuZXN0ZWRhcCIsCiAgICAgICAgIm5sYWxwIiwKICAgICAgICAibmxmaWx0IiwKICAgICAgICAibmxmaWx0MiIsCiAgICAgICAgIm5vaXNlIiwKICAgICAgICAibm90ZW9mZiIsCiAgICAgICAgIm5vdGVvbiIsCiAgICAgICAgIm5vdGVvbmR1ciIsCiAgICAgICAgIm5vdGVvbmR1cjIiLAogICAgICAgICJub3RudW0iLAogICAgICAgICJucmV2ZXJiIiwKICAgICAgICAibnJwbiIsCiAgICAgICAgIm5zYW1wIiwKICAgICAgICAibnN0YW5jZSIsCiAgICAgICAgIm5zdHJudW0iLAogICAgICAgICJudG9tIiwKICAgICAgICAibnRycG9sIiwKICAgICAgICAibnh0cG93MiIsCiAgICAgICAgIm9jdGF2ZSIsCiAgICAgICAgIm9jdGNwcyIsCiAgICAgICAgIm9jdG1pZGkiLAogICAgICAgICJvY3RtaWRpYiIsCiAgICAgICAgIm9jdG1pZGlubiIsCiAgICAgICAgIm9jdHBjaCIsCiAgICAgICAgIm9sYWJ1ZmZlciIsCiAgICAgICAgIm9zY2JuayIsCiAgICAgICAgIm9zY2lsIiwKICAgICAgICAib3NjaWwxIiwKICAgICAgICAib3NjaWwxaSIsCiAgICAgICAgIm9zY2lsMyIsCiAgICAgICAgIm9zY2lsaSIsCiAgICAgICAgIm9zY2lsaWt0IiwKICAgICAgICAib3NjaWxpa3RwIiwKICAgICAgICAib3NjaWxpa3RzIiwKICAgICAgICAib3NjaWxuIiwKICAgICAgICAib3NjaWxzIiwKICAgICAgICAib3NjaWx4IiwKICAgICAgICAib3V0IiwKICAgICAgICAib3V0MzIiLAogICAgICAgICJvdXRjIiwKICAgICAgICAib3V0Y2giLAogICAgICAgICJvdXRoIiwKICAgICAgICAib3V0aWF0IiwKICAgICAgICAib3V0aWMiLAogICAgICAgICJvdXRpYzE0IiwKICAgICAgICAib3V0aXBhdCIsCiAgICAgICAgIm91dGlwYiIsCiAgICAgICAgIm91dGlwYyIsCiAgICAgICAgIm91dGthdCIsCiAgICAgICAgIm91dGtjIiwKICAgICAgICAib3V0a2MxNCIsCiAgICAgICAgIm91dGtwYXQiLAogICAgICAgICJvdXRrcGIiLAogICAgICAgICJvdXRrcGMiLAogICAgICAgICJvdXRsZXRhIiwKICAgICAgICAib3V0bGV0ZiIsCiAgICAgICAgIm91dGxldGsiLAogICAgICAgICJvdXRsZXRraWQiLAogICAgICAgICJvdXRsZXR2IiwKICAgICAgICAib3V0byIsCiAgICAgICAgIm91dHEiLAogICAgICAgICJvdXRxMSIsCiAgICAgICAgIm91dHEyIiwKICAgICAgICAib3V0cTMiLAogICAgICAgICJvdXRxNCIsCiAgICAgICAgIm91dHJnIiwKICAgICAgICAib3V0cyIsCiAgICAgICAgIm91dHMxIiwKICAgICAgICAib3V0czIiLAogICAgICAgICJvdXR2YWx1ZSIsCiAgICAgICAgIm91dHgiLAogICAgICAgICJvdXR6IiwKICAgICAgICAicCIsCiAgICAgICAgInA1Z2Nvbm5lY3QiLAogICAgICAgICJwNWdkYXRhIiwKICAgICAgICAicGFuIiwKICAgICAgICAicGFuMiIsCiAgICAgICAgInBhcmVxIiwKICAgICAgICAicGFydDJ0eHQiLAogICAgICAgICJwYXJ0aWFscyIsCiAgICAgICAgInBhcnRpa2tlbCIsCiAgICAgICAgInBhcnRpa2tlbGdldCIsCiAgICAgICAgInBhcnRpa2tlbHNldCIsCiAgICAgICAgInBhcnRpa2tlbHN5bmMiLAogICAgICAgICJwYXNzaWduIiwKICAgICAgICAicGF1bHN0cmV0Y2giLAogICAgICAgICJwY2F1Y2h5IiwKICAgICAgICAicGNoYmVuZCIsCiAgICAgICAgInBjaG1pZGkiLAogICAgICAgICJwY2htaWRpYiIsCiAgICAgICAgInBjaG1pZGlubiIsCiAgICAgICAgInBjaG9jdCIsCiAgICAgICAgInBjaHRvbSIsCiAgICAgICAgInBjb252b2x2ZSIsCiAgICAgICAgInBjb3VudCIsCiAgICAgICAgInBkY2xpcCIsCiAgICAgICAgInBkaGFsZiIsCiAgICAgICAgInBkaGFsZnkiLAogICAgICAgICJwZWFrIiwKICAgICAgICAicGdtYXNzaWduIiwKICAgICAgICAicGdtY2huIiwKICAgICAgICAicGhhc2VyMSIsCiAgICAgICAgInBoYXNlcjIiLAogICAgICAgICJwaGFzb3IiLAogICAgICAgICJwaGFzb3JibmsiLAogICAgICAgICJwaHMiLAogICAgICAgICJwaW5kZXgiLAogICAgICAgICJwaW5rZXIiLAogICAgICAgICJwaW5raXNoIiwKICAgICAgICAicGl0Y2giLAogICAgICAgICJwaXRjaGFjIiwKICAgICAgICAicGl0Y2hhbWRmIiwKICAgICAgICAicGxhbmV0IiwKICAgICAgICAicGxhdGVyZXYiLAogICAgICAgICJwbGx0cmFjayIsCiAgICAgICAgInBsdWNrIiwKICAgICAgICAicG9pc3NvbiIsCiAgICAgICAgInBvbDJyZWN0IiwKICAgICAgICAicG9seWFmdCIsCiAgICAgICAgInBvbHlub21pYWwiLAogICAgICAgICJwb3J0IiwKICAgICAgICAicG9ydGsiLAogICAgICAgICJwb3NjaWwiLAogICAgICAgICJwb3NjaWwzIiwKICAgICAgICAicG93IiwKICAgICAgICAicG93ZXJzaGFwZSIsCiAgICAgICAgInBvd29mdHdvIiwKICAgICAgICAicG93cyIsCiAgICAgICAgInByZWFsbG9jIiwKICAgICAgICAicHJlcGlhbm8iLAogICAgICAgICJwcmludCIsCiAgICAgICAgInByaW50X3R5cGUiLAogICAgICAgICJwcmludGFycmF5IiwKICAgICAgICAicHJpbnRmIiwKICAgICAgICAicHJpbnRmX2kiLAogICAgICAgICJwcmludGsiLAogICAgICAgICJwcmludGsyIiwKICAgICAgICAicHJpbnRrcyIsCiAgICAgICAgInByaW50a3MyIiwKICAgICAgICAicHJpbnRzIiwKICAgICAgICAicHJvZHVjdCIsCiAgICAgICAgInBzZXQiLAogICAgICAgICJwdGFibGUiLAogICAgICAgICJwdGFibGUzIiwKICAgICAgICAicHRhYmxlaSIsCiAgICAgICAgInB0YWJsZWl3IiwKICAgICAgICAicHRhYmxldyIsCiAgICAgICAgInB0cmFjayIsCiAgICAgICAgInB1dHMiLAogICAgICAgICJwdmFkZCIsCiAgICAgICAgInB2YnVmcmVhZCIsCiAgICAgICAgInB2Y3Jvc3MiLAogICAgICAgICJwdmludGVycCIsCiAgICAgICAgInB2b2MiLAogICAgICAgICJwdnJlYWQiLAogICAgICAgICJwdnMyYXJyYXkiLAogICAgICAgICJwdnMydGFiIiwKICAgICAgICAicHZzYWRzeW4iLAogICAgICAgICJwdnNhbmFsIiwKICAgICAgICAicHZzYXJwIiwKICAgICAgICAicHZzYmFuZHAiLAogICAgICAgICJwdnNiYW5kciIsCiAgICAgICAgInB2c2JpbiIsCiAgICAgICAgInB2c2JsdXIiLAogICAgICAgICJwdnNidWZmZXIiLAogICAgICAgICJwdnNidWZyZWFkIiwKICAgICAgICAicHZzYnVmcmVhZDIiLAogICAgICAgICJwdnNjYWxlIiwKICAgICAgICAicHZzY2VudCIsCiAgICAgICAgInB2c2NlcHMiLAogICAgICAgICJwdnNjcm9zcyIsCiAgICAgICAgInB2c2RlbWl4IiwKICAgICAgICAicHZzZGlza2luIiwKICAgICAgICAicHZzZGlzcCIsCiAgICAgICAgInB2c2VudmZ0dyIsCiAgICAgICAgInB2c2ZpbHRlciIsCiAgICAgICAgInB2c2ZyZWFkIiwKICAgICAgICAicHZzZnJlZXplIiwKICAgICAgICAicHZzZnJvbWFycmF5IiwKICAgICAgICAicHZzZnRyIiwKICAgICAgICAicHZzZnR3IiwKICAgICAgICAicHZzZndyaXRlIiwKICAgICAgICAicHZzZ2FpbiIsCiAgICAgICAgInB2c2hpZnQiLAogICAgICAgICJwdnNpZmQiLAogICAgICAgICJwdnNpbiIsCiAgICAgICAgInB2c2luZm8iLAogICAgICAgICJwdnNpbml0IiwKICAgICAgICAicHZzbG9jayIsCiAgICAgICAgInB2c21hc2thIiwKICAgICAgICAicHZzbWl4IiwKICAgICAgICAicHZzbW9vdGgiLAogICAgICAgICJwdnNtb3JwaCIsCiAgICAgICAgInB2c29zYyIsCiAgICAgICAgInB2c291dCIsCiAgICAgICAgInB2c3BpdGNoIiwKICAgICAgICAicHZzdGFuYWwiLAogICAgICAgICJwdnN0ZW5jaWwiLAogICAgICAgICJwdnN0cmFjZSIsCiAgICAgICAgInB2c3ZvYyIsCiAgICAgICAgInB2c3dhcnAiLAogICAgICAgICJwdnN5bnRoIiwKICAgICAgICAicHdkIiwKICAgICAgICAicHlhc3NpZ24iLAogICAgICAgICJweWFzc2lnbmkiLAogICAgICAgICJweWFzc2lnbnQiLAogICAgICAgICJweWNhbGwiLAogICAgICAgICJweWNhbGwxIiwKICAgICAgICAicHljYWxsMWkiLAogICAgICAgICJweWNhbGwxdCIsCiAgICAgICAgInB5Y2FsbDIiLAogICAgICAgICJweWNhbGwyaSIsCiAgICAgICAgInB5Y2FsbDJ0IiwKICAgICAgICAicHljYWxsMyIsCiAgICAgICAgInB5Y2FsbDNpIiwKICAgICAgICAicHljYWxsM3QiLAogICAgICAgICJweWNhbGw0IiwKICAgICAgICAicHljYWxsNGkiLAogICAgICAgICJweWNhbGw0dCIsCiAgICAgICAgInB5Y2FsbDUiLAogICAgICAgICJweWNhbGw1aSIsCiAgICAgICAgInB5Y2FsbDV0IiwKICAgICAgICAicHljYWxsNiIsCiAgICAgICAgInB5Y2FsbDZpIiwKICAgICAgICAicHljYWxsNnQiLAogICAgICAgICJweWNhbGw3IiwKICAgICAgICAicHljYWxsN2kiLAogICAgICAgICJweWNhbGw3dCIsCiAgICAgICAgInB5Y2FsbDgiLAogICAgICAgICJweWNhbGw4aSIsCiAgICAgICAgInB5Y2FsbDh0IiwKICAgICAgICAicHljYWxsaSIsCiAgICAgICAgInB5Y2FsbG4iLAogICAgICAgICJweWNhbGxuaSIsCiAgICAgICAgInB5Y2FsbHQiLAogICAgICAgICJweWV2YWwiLAogICAgICAgICJweWV2YWxpIiwKICAgICAgICAicHlldmFsdCIsCiAgICAgICAgInB5ZXhlYyIsCiAgICAgICAgInB5ZXhlY2kiLAogICAgICAgICJweWV4ZWN0IiwKICAgICAgICAicHlpbml0IiwKICAgICAgICAicHlsYXNzaWduIiwKICAgICAgICAicHlsYXNzaWduaSIsCiAgICAgICAgInB5bGFzc2lnbnQiLAogICAgICAgICJweWxjYWxsIiwKICAgICAgICAicHlsY2FsbDEiLAogICAgICAgICJweWxjYWxsMWkiLAogICAgICAgICJweWxjYWxsMXQiLAogICAgICAgICJweWxjYWxsMiIsCiAgICAgICAgInB5bGNhbGwyaSIsCiAgICAgICAgInB5bGNhbGwydCIsCiAgICAgICAgInB5bGNhbGwzIiwKICAgICAgICAicHlsY2FsbDNpIiwKICAgICAgICAicHlsY2FsbDN0IiwKICAgICAgICAicHlsY2FsbDQiLAogICAgICAgICJweWxjYWxsNGkiLAogICAgICAgICJweWxjYWxsNHQiLAogICAgICAgICJweWxjYWxsNSIsCiAgICAgICAgInB5bGNhbGw1aSIsCiAgICAgICAgInB5bGNhbGw1dCIsCiAgICAgICAgInB5bGNhbGw2IiwKICAgICAgICAicHlsY2FsbDZpIiwKICAgICAgICAicHlsY2FsbDZ0IiwKICAgICAgICAicHlsY2FsbDciLAogICAgICAgICJweWxjYWxsN2kiLAogICAgICAgICJweWxjYWxsN3QiLAogICAgICAgICJweWxjYWxsOCIsCiAgICAgICAgInB5bGNhbGw4aSIsCiAgICAgICAgInB5bGNhbGw4dCIsCiAgICAgICAgInB5bGNhbGxpIiwKICAgICAgICAicHlsY2FsbG4iLAogICAgICAgICJweWxjYWxsbmkiLAogICAgICAgICJweWxjYWxsdCIsCiAgICAgICAgInB5bGV2YWwiLAogICAgICAgICJweWxldmFsaSIsCiAgICAgICAgInB5bGV2YWx0IiwKICAgICAgICAicHlsZXhlYyIsCiAgICAgICAgInB5bGV4ZWNpIiwKICAgICAgICAicHlsZXhlY3QiLAogICAgICAgICJweWxydW4iLAogICAgICAgICJweWxydW5pIiwKICAgICAgICAicHlscnVudCIsCiAgICAgICAgInB5cnVuIiwKICAgICAgICAicHlydW5pIiwKICAgICAgICAicHlydW50IiwKICAgICAgICAicWluZiIsCiAgICAgICAgInFuYW4iLAogICAgICAgICJyMmMiLAogICAgICAgICJyYW5kIiwKICAgICAgICAicmFuZGgiLAogICAgICAgICJyYW5kaSIsCiAgICAgICAgInJhbmRvbSIsCiAgICAgICAgInJhbmRvbWgiLAogICAgICAgICJyYW5kb21pIiwKICAgICAgICAicmJqZXEiLAogICAgICAgICJyZWFkY2xvY2siLAogICAgICAgICJyZWFkZiIsCiAgICAgICAgInJlYWRmaSIsCiAgICAgICAgInJlYWRrIiwKICAgICAgICAicmVhZGsyIiwKICAgICAgICAicmVhZGszIiwKICAgICAgICAicmVhZGs0IiwKICAgICAgICAicmVhZGtzIiwKICAgICAgICAicmVhZHNjb3JlIiwKICAgICAgICAicmVhZHNjcmF0Y2giLAogICAgICAgICJyZWN0MnBvbCIsCiAgICAgICAgInJlbGVhc2UiLAogICAgICAgICJyZW1vdGVwb3J0IiwKICAgICAgICAicmVtb3ZlIiwKICAgICAgICAicmVwbHVjayIsCiAgICAgICAgInJlc2hhcGVhcnJheSIsCiAgICAgICAgInJlc29uIiwKICAgICAgICAicmVzb25rIiwKICAgICAgICAicmVzb25yIiwKICAgICAgICAicmVzb254IiwKICAgICAgICAicmVzb254ayIsCiAgICAgICAgInJlc29ueSIsCiAgICAgICAgInJlc29ueiIsCiAgICAgICAgInJlc3luIiwKICAgICAgICAicmV2ZXJiIiwKICAgICAgICAicmV2ZXJiMiIsCiAgICAgICAgInJldmVyYnNjIiwKICAgICAgICAicmV3aW5kc2NvcmUiLAogICAgICAgICJyZXp6eSIsCiAgICAgICAgInJmZnQiLAogICAgICAgICJyaWZmdCIsCiAgICAgICAgInJtcyIsCiAgICAgICAgInJuZCIsCiAgICAgICAgInJuZDMxIiwKICAgICAgICAicm91bmQiLAogICAgICAgICJyc3BsaW5lIiwKICAgICAgICAicnRjbG9jayIsCiAgICAgICAgInMxNmIxNCIsCiAgICAgICAgInMzMmIxNCIsCiAgICAgICAgInNhbXBob2xkIiwKICAgICAgICAic2FuZHBhcGVyIiwKICAgICAgICAic2NfbGFnIiwKICAgICAgICAic2NfbGFndWQiLAogICAgICAgICJzY19waGFzb3IiLAogICAgICAgICJzY190cmlnIiwKICAgICAgICAic2NhbGUiLAogICAgICAgICJzY2FsZWFycmF5IiwKICAgICAgICAic2NhbmhhbW1lciIsCiAgICAgICAgInNjYW5zIiwKICAgICAgICAic2NhbnRhYmxlIiwKICAgICAgICAic2NhbnUiLAogICAgICAgICJzY2hlZGt3aGVuIiwKICAgICAgICAic2NoZWRrd2hlbm5hbWVkIiwKICAgICAgICAic2NoZWR1bGUiLAogICAgICAgICJzY2hlZHdoZW4iLAogICAgICAgICJzY29yZWxpbmUiLAogICAgICAgICJzY29yZWxpbmVfaSIsCiAgICAgICAgInNlZWQiLAogICAgICAgICJzZWtlcmUiLAogICAgICAgICJzZWxlY3QiLAogICAgICAgICJzZW1pdG9uZSIsCiAgICAgICAgInNlbnNlIiwKICAgICAgICAic2Vuc2VrZXkiLAogICAgICAgICJzZXF0aW1lIiwKICAgICAgICAic2VxdGltZTIiLAogICAgICAgICJzZXJpYWxCZWdpbiIsCiAgICAgICAgInNlcmlhbEVuZCIsCiAgICAgICAgInNlcmlhbEZsdXNoIiwKICAgICAgICAic2VyaWFsUHJpbnQiLAogICAgICAgICJzZXJpYWxSZWFkIiwKICAgICAgICAic2VyaWFsV3JpdGUiLAogICAgICAgICJzZXJpYWxXcml0ZV9pIiwKICAgICAgICAic2V0Y29sIiwKICAgICAgICAic2V0Y3RybCIsCiAgICAgICAgInNldGtzbXBzIiwKICAgICAgICAic2V0cm93IiwKICAgICAgICAic2V0c2NvcmVwb3MiLAogICAgICAgICJzZmlsaXN0IiwKICAgICAgICAic2ZpbnN0ciIsCiAgICAgICAgInNmaW5zdHIzIiwKICAgICAgICAic2ZpbnN0cjNtIiwKICAgICAgICAic2ZpbnN0cm0iLAogICAgICAgICJzZmxvYWQiLAogICAgICAgICJzZmxvb3BlciIsCiAgICAgICAgInNmcGFzc2lnbiIsCiAgICAgICAgInNmcGxheSIsCiAgICAgICAgInNmcGxheTMiLAogICAgICAgICJzZnBsYXkzbSIsCiAgICAgICAgInNmcGxheW0iLAogICAgICAgICJzZnBsaXN0IiwKICAgICAgICAic2ZwcmVzZXQiLAogICAgICAgICJzaGFrZXIiLAogICAgICAgICJzaGlmdGluIiwKICAgICAgICAic2hpZnRvdXQiLAogICAgICAgICJzaWdudW0iLAogICAgICAgICJzaW4iLAogICAgICAgICJzaW5oIiwKICAgICAgICAic2luaW52IiwKICAgICAgICAic2luc3luIiwKICAgICAgICAic2xlaWdoYmVsbHMiLAogICAgICAgICJzbGljZWFycmF5IiwKICAgICAgICAic2xpY2VhcnJheV9pIiwKICAgICAgICAic2xpZGVyMTYiLAogICAgICAgICJzbGlkZXIxNmYiLAogICAgICAgICJzbGlkZXIxNnRhYmxlIiwKICAgICAgICAic2xpZGVyMTZ0YWJsZWYiLAogICAgICAgICJzbGlkZXIzMiIsCiAgICAgICAgInNsaWRlcjMyZiIsCiAgICAgICAgInNsaWRlcjMydGFibGUiLAogICAgICAgICJzbGlkZXIzMnRhYmxlZiIsCiAgICAgICAgInNsaWRlcjY0IiwKICAgICAgICAic2xpZGVyNjRmIiwKICAgICAgICAic2xpZGVyNjR0YWJsZSIsCiAgICAgICAgInNsaWRlcjY0dGFibGVmIiwKICAgICAgICAic2xpZGVyOCIsCiAgICAgICAgInNsaWRlcjhmIiwKICAgICAgICAic2xpZGVyOHRhYmxlIiwKICAgICAgICAic2xpZGVyOHRhYmxlZiIsCiAgICAgICAgInNsaWRlckthd2FpIiwKICAgICAgICAic25kbG9vcCIsCiAgICAgICAgInNuZHdhcnAiLAogICAgICAgICJzbmR3YXJwc3QiLAogICAgICAgICJzb2NrcmVjdiIsCiAgICAgICAgInNvY2tyZWN2cyIsCiAgICAgICAgInNvY2tzZW5kIiwKICAgICAgICAic29ja3NlbmRzIiwKICAgICAgICAic29ydGEiLAogICAgICAgICJzb3J0ZCIsCiAgICAgICAgInNvdW5kaW4iLAogICAgICAgICJzcGFjZSIsCiAgICAgICAgInNwYXQzZCIsCiAgICAgICAgInNwYXQzZGkiLAogICAgICAgICJzcGF0M2R0IiwKICAgICAgICAic3BkaXN0IiwKICAgICAgICAic3BsaXRyaWciLAogICAgICAgICJzcHJpbnRmIiwKICAgICAgICAic3ByaW50ZmsiLAogICAgICAgICJzcHNlbmQiLAogICAgICAgICJzcXJ0IiwKICAgICAgICAic3F1aW5ld2F2ZSIsCiAgICAgICAgInN0YXRldmFyIiwKICAgICAgICAic3RpeCIsCiAgICAgICAgInN0cmNhdCIsCiAgICAgICAgInN0cmNhdGsiLAogICAgICAgICJzdHJjaGFyIiwKICAgICAgICAic3RyY2hhcmsiLAogICAgICAgICJzdHJjbXAiLAogICAgICAgICJzdHJjbXBrIiwKICAgICAgICAic3RyY3B5IiwKICAgICAgICAic3RyY3B5ayIsCiAgICAgICAgInN0cmVjdiIsCiAgICAgICAgInN0cmVzb24iLAogICAgICAgICJzdHJmcm9tdXJsIiwKICAgICAgICAic3RyZ2V0IiwKICAgICAgICAic3RyaW5kZXgiLAogICAgICAgICJzdHJpbmRleGsiLAogICAgICAgICJzdHJsZW4iLAogICAgICAgICJzdHJsZW5rIiwKICAgICAgICAic3RybG93ZXIiLAogICAgICAgICJzdHJsb3dlcmsiLAogICAgICAgICJzdHJyaW5kZXgiLAogICAgICAgICJzdHJyaW5kZXhrIiwKICAgICAgICAic3Ryc2V0IiwKICAgICAgICAic3Ryc3ViIiwKICAgICAgICAic3Ryc3ViayIsCiAgICAgICAgInN0cnRvZCIsCiAgICAgICAgInN0cnRvZGsiLAogICAgICAgICJzdHJ0b2wiLAogICAgICAgICJzdHJ0b2xrIiwKICAgICAgICAic3RydXBwZXIiLAogICAgICAgICJzdHJ1cHBlcmsiLAogICAgICAgICJzdHNlbmQiLAogICAgICAgICJzdWJpbnN0ciIsCiAgICAgICAgInN1Ymluc3RyaW5pdCIsCiAgICAgICAgInN1bSIsCiAgICAgICAgInN1bWFycmF5IiwKICAgICAgICAic3ZmaWx0ZXIiLAogICAgICAgICJzeW5jZ3JhaW4iLAogICAgICAgICJzeW5jbG9vcCIsCiAgICAgICAgInN5bmNwaGFzb3IiLAogICAgICAgICJzeXN0ZW0iLAogICAgICAgICJzeXN0ZW1faSIsCiAgICAgICAgInRhYiIsCiAgICAgICAgInRhYjJhcnJheSIsCiAgICAgICAgInRhYjJwdnMiLAogICAgICAgICJ0YWJfaSIsCiAgICAgICAgInRhYmlmZCIsCiAgICAgICAgInRhYmxlIiwKICAgICAgICAidGFibGUzIiwKICAgICAgICAidGFibGUza3QiLAogICAgICAgICJ0YWJsZWNvcHkiLAogICAgICAgICJ0YWJsZWZpbHRlciIsCiAgICAgICAgInRhYmxlZmlsdGVyaSIsCiAgICAgICAgInRhYmxlZ3B3IiwKICAgICAgICAidGFibGVpIiwKICAgICAgICAidGFibGVpY29weSIsCiAgICAgICAgInRhYmxlaWdwdyIsCiAgICAgICAgInRhYmxlaWt0IiwKICAgICAgICAidGFibGVpbWl4IiwKICAgICAgICAidGFibGVpdyIsCiAgICAgICAgInRhYmxla3QiLAogICAgICAgICJ0YWJsZW1peCIsCiAgICAgICAgInRhYmxlbmciLAogICAgICAgICJ0YWJsZXJhIiwKICAgICAgICAidGFibGVzZWciLAogICAgICAgICJ0YWJsZXNodWZmbGUiLAogICAgICAgICJ0YWJsZXNodWZmbGVpIiwKICAgICAgICAidGFibGV3IiwKICAgICAgICAidGFibGV3YSIsCiAgICAgICAgInRhYmxld2t0IiwKICAgICAgICAidGFibGV4a3QiLAogICAgICAgICJ0YWJsZXhzZWciLAogICAgICAgICJ0YWJtb3JwaCIsCiAgICAgICAgInRhYm1vcnBoYSIsCiAgICAgICAgInRhYm1vcnBoYWsiLAogICAgICAgICJ0YWJtb3JwaGkiLAogICAgICAgICJ0YWJwbGF5IiwKICAgICAgICAidGFicmVjIiwKICAgICAgICAidGFicm93bGluIiwKICAgICAgICAidGFic3VtIiwKICAgICAgICAidGFidyIsCiAgICAgICAgInRhYndfaSIsCiAgICAgICAgInRhbWJvdXJpbmUiLAogICAgICAgICJ0YW4iLAogICAgICAgICJ0YW5oIiwKICAgICAgICAidGFuaW52IiwKICAgICAgICAidGFuaW52MiIsCiAgICAgICAgInRidmNmIiwKICAgICAgICAidGVtcGVzdCIsCiAgICAgICAgInRlbXBvIiwKICAgICAgICAidGVtcG9zY2FsIiwKICAgICAgICAidGVtcG92YWwiLAogICAgICAgICJ0aW1lZHNlcSIsCiAgICAgICAgInRpbWVpbnN0ayIsCiAgICAgICAgInRpbWVpbnN0cyIsCiAgICAgICAgInRpbWVrIiwKICAgICAgICAidGltZXMiLAogICAgICAgICJ0aXZhbCIsCiAgICAgICAgInRsaW5ldG8iLAogICAgICAgICJ0b25lIiwKICAgICAgICAidG9uZWsiLAogICAgICAgICJ0b25leCIsCiAgICAgICAgInRyYWRzeW4iLAogICAgICAgICJ0cmFuZG9tIiwKICAgICAgICAidHJhbnNlZyIsCiAgICAgICAgInRyYW5zZWdiIiwKICAgICAgICAidHJhbnNlZ3IiLAogICAgICAgICJ0cmNyb3NzIiwKICAgICAgICAidHJmaWx0ZXIiLAogICAgICAgICJ0cmhpZ2hlc3QiLAogICAgICAgICJ0cmlnZ2VyIiwKICAgICAgICAidHJpZ3NlcSIsCiAgICAgICAgInRyaW0iLAogICAgICAgICJ0cmltX2kiLAogICAgICAgICJ0cmlyYW5kIiwKICAgICAgICAidHJsb3dlc3QiLAogICAgICAgICJ0cm1peCIsCiAgICAgICAgInRyc2NhbGUiLAogICAgICAgICJ0cnNoaWZ0IiwKICAgICAgICAidHJzcGxpdCIsCiAgICAgICAgInR1cm5vZmYiLAogICAgICAgICJ0dXJub2ZmMiIsCiAgICAgICAgInR1cm5vbiIsCiAgICAgICAgInR2Y29udiIsCiAgICAgICAgInVuaXJhbmQiLAogICAgICAgICJ1bndyYXAiLAogICAgICAgICJ1cHNhbXAiLAogICAgICAgICJ1cmFuZG9tIiwKICAgICAgICAidXJkIiwKICAgICAgICAidmFjdHJvbCIsCiAgICAgICAgInZhZGQiLAogICAgICAgICJ2YWRkX2kiLAogICAgICAgICJ2YWRkdiIsCiAgICAgICAgInZhZGR2X2kiLAogICAgICAgICJ2YWdldCIsCiAgICAgICAgInZhbHBhc3MiLAogICAgICAgICJ2YXNldCIsCiAgICAgICAgInZiYXAiLAogICAgICAgICJ2YmFwZyIsCiAgICAgICAgInZiYXBnbW92ZSIsCiAgICAgICAgInZiYXBsc2luaXQiLAogICAgICAgICJ2YmFwbW92ZSIsCiAgICAgICAgInZiYXB6IiwKICAgICAgICAidmJhcHptb3ZlIiwKICAgICAgICAidmNlbGxhIiwKICAgICAgICAidmNvIiwKICAgICAgICAidmNvMiIsCiAgICAgICAgInZjbzJmdCIsCiAgICAgICAgInZjbzJpZnQiLAogICAgICAgICJ2Y28yaW5pdCIsCiAgICAgICAgInZjb21iIiwKICAgICAgICAidmNvcHkiLAogICAgICAgICJ2Y29weV9pIiwKICAgICAgICAidmRlbF9rIiwKICAgICAgICAidmRlbGF5IiwKICAgICAgICAidmRlbGF5MyIsCiAgICAgICAgInZkZWxheWsiLAogICAgICAgICJ2ZGVsYXl4IiwKICAgICAgICAidmRlbGF5eHEiLAogICAgICAgICJ2ZGVsYXl4cyIsCiAgICAgICAgInZkZWxheXh3IiwKICAgICAgICAidmRlbGF5eHdxIiwKICAgICAgICAidmRlbGF5eHdzIiwKICAgICAgICAidmRpdnYiLAogICAgICAgICJ2ZGl2dl9pIiwKICAgICAgICAidmVjZGVsYXkiLAogICAgICAgICJ2ZWxvYyIsCiAgICAgICAgInZleHAiLAogICAgICAgICJ2ZXhwX2kiLAogICAgICAgICJ2ZXhwc2VnIiwKICAgICAgICAidmV4cHYiLAogICAgICAgICJ2ZXhwdl9pIiwKICAgICAgICAidmliZXMiLAogICAgICAgICJ2aWJyIiwKICAgICAgICAidmlicmF0byIsCiAgICAgICAgInZpbmNyIiwKICAgICAgICAidmxpbWl0IiwKICAgICAgICAidmxpbnNlZyIsCiAgICAgICAgInZsb3dyZXMiLAogICAgICAgICJ2bWFwIiwKICAgICAgICAidm1pcnJvciIsCiAgICAgICAgInZtdWx0IiwKICAgICAgICAidm11bHRfaSIsCiAgICAgICAgInZtdWx0diIsCiAgICAgICAgInZtdWx0dl9pIiwKICAgICAgICAidm9pY2UiLAogICAgICAgICJ2b3NpbSIsCiAgICAgICAgInZwaGFzZXNlZyIsCiAgICAgICAgInZwb3J0IiwKICAgICAgICAidnBvdyIsCiAgICAgICAgInZwb3dfaSIsCiAgICAgICAgInZwb3d2IiwKICAgICAgICAidnBvd3ZfaSIsCiAgICAgICAgInZwdm9jIiwKICAgICAgICAidnJhbmRoIiwKICAgICAgICAidnJhbmRpIiwKICAgICAgICAidnN1YnYiLAogICAgICAgICJ2c3Vidl9pIiwKICAgICAgICAidnRhYmEiLAogICAgICAgICJ2dGFiaSIsCiAgICAgICAgInZ0YWJrIiwKICAgICAgICAidnRhYmxlMWsiLAogICAgICAgICJ2dGFibGVhIiwKICAgICAgICAidnRhYmxlaSIsCiAgICAgICAgInZ0YWJsZWsiLAogICAgICAgICJ2dGFibGV3YSIsCiAgICAgICAgInZ0YWJsZXdpIiwKICAgICAgICAidnRhYmxld2siLAogICAgICAgICJ2dGFid2EiLAogICAgICAgICJ2dGFid2kiLAogICAgICAgICJ2dGFid2siLAogICAgICAgICJ2d3JhcCIsCiAgICAgICAgIndhdmVzZXQiLAogICAgICAgICJ3ZWJzb2NrZXQiLAogICAgICAgICJ3ZWlidWxsIiwKICAgICAgICAid2dib3ciLAogICAgICAgICJ3Z2Jvd2VkYmFyIiwKICAgICAgICAid2dicmFzcyIsCiAgICAgICAgIndnY2xhciIsCiAgICAgICAgIndnZmx1dGUiLAogICAgICAgICJ3Z3BsdWNrIiwKICAgICAgICAid2dwbHVjazIiLAogICAgICAgICJ3Z3VpZGUxIiwKICAgICAgICAid2d1aWRlMiIsCiAgICAgICAgIndpaWNvbm5lY3QiLAogICAgICAgICJ3aWlkYXRhIiwKICAgICAgICAid2lpcmFuZ2UiLAogICAgICAgICJ3aWlzZW5kIiwKICAgICAgICAid2luZG93IiwKICAgICAgICAid3JhcCIsCiAgICAgICAgIndyaXRlc2NyYXRjaCIsCiAgICAgICAgInd0ZXJyYWluIiwKICAgICAgICAieGFkc3IiLAogICAgICAgICJ4aW4iLAogICAgICAgICJ4b3V0IiwKICAgICAgICAieHNjYW5tYXAiLAogICAgICAgICJ4c2NhbnMiLAogICAgICAgICJ4c2NhbnNtYXAiLAogICAgICAgICJ4c2NhbnUiLAogICAgICAgICJ4dHJhdGltIiwKICAgICAgICAieHlzY2FsZSIsCiAgICAgICAgInphY2wiLAogICAgICAgICJ6YWtpbml0IiwKICAgICAgICAiemFtb2QiLAogICAgICAgICJ6YXIiLAogICAgICAgICJ6YXJnIiwKICAgICAgICAiemF3IiwKICAgICAgICAiemF3bSIsCiAgICAgICAgInpkZl8xcG9sZSIsCiAgICAgICAgInpkZl8xcG9sZV9tb2RlIiwKICAgICAgICAiemRmXzJwb2xlIiwKICAgICAgICAiemRmXzJwb2xlX21vZGUiLAogICAgICAgICJ6ZGZfbGFkZGVyIiwKICAgICAgICAiemZpbHRlcjIiLAogICAgICAgICJ6aXIiLAogICAgICAgICJ6aXciLAogICAgICAgICJ6aXdtIiwKICAgICAgICAiemtjbCIsCiAgICAgICAgInprbW9kIiwKICAgICAgICAiemtyIiwKICAgICAgICAiemt3IiwKICAgICAgICAiemt3bSIKICAgIF07CiAgICB2YXIgZGVwcmVjYXRlZE9wY29kZXMgPSBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAiYmZvcm1kZWMiLAogICAgICAgICJiZm9ybWVuYyIsCiAgICAgICAgImNvcHkyZnRhYiIsCiAgICAgICAgImNvcHkydHRhYiIsCiAgICAgICAgImhydGZlciIsCiAgICAgICAgImt0YWJsZXNlZyIsCiAgICAgICAgImxlbnRhYiIsCiAgICAgICAgIm1heHRhYiIsCiAgICAgICAgIm1pbnRhYiIsCiAgICAgICAgInBvcCIsCiAgICAgICAgInBvcF9mIiwKICAgICAgICAicHVzaCIsCiAgICAgICAgInB1c2hfZiIsCiAgICAgICAgInNjYWxldCIsCiAgICAgICAgInNuZGxvYWQiLAogICAgICAgICJzb3VuZG91dCIsCiAgICAgICAgInNvdW5kb3V0cyIsCiAgICAgICAgInNwZWNhZGRtIiwKICAgICAgICAic3BlY2RpZmYiLAogICAgICAgICJzcGVjZGlzcCIsCiAgICAgICAgInNwZWNmaWx0IiwKICAgICAgICAic3BlY2hpc3QiLAogICAgICAgICJzcGVjcHRyayIsCiAgICAgICAgInNwZWNzY2FsIiwKICAgICAgICAic3BlY3N1bSIsCiAgICAgICAgInNwZWN0cnVtIiwKICAgICAgICAic3RhY2siLAogICAgICAgICJzdW10YWIiLAogICAgICAgICJ0YWJnZW4iLAogICAgICAgICJ0YWJtYXAiLAogICAgICAgICJ0YWJtYXBfaSIsCiAgICAgICAgInRhYnNsaWNlIiwKICAgICAgICAidGIwIiwKICAgICAgICAidGIwX2luaXQiLAogICAgICAgICJ0YjEiLAogICAgICAgICJ0YjEwIiwKICAgICAgICAidGIxMF9pbml0IiwKICAgICAgICAidGIxMSIsCiAgICAgICAgInRiMTFfaW5pdCIsCiAgICAgICAgInRiMTIiLAogICAgICAgICJ0YjEyX2luaXQiLAogICAgICAgICJ0YjEzIiwKICAgICAgICAidGIxM19pbml0IiwKICAgICAgICAidGIxNCIsCiAgICAgICAgInRiMTRfaW5pdCIsCiAgICAgICAgInRiMTUiLAogICAgICAgICJ0YjE1X2luaXQiLAogICAgICAgICJ0YjFfaW5pdCIsCiAgICAgICAgInRiMiIsCiAgICAgICAgInRiMl9pbml0IiwKICAgICAgICAidGIzIiwKICAgICAgICAidGIzX2luaXQiLAogICAgICAgICJ0YjQiLAogICAgICAgICJ0YjRfaW5pdCIsCiAgICAgICAgInRiNSIsCiAgICAgICAgInRiNV9pbml0IiwKICAgICAgICAidGI2IiwKICAgICAgICAidGI2X2luaXQiLAogICAgICAgICJ0YjciLAogICAgICAgICJ0YjdfaW5pdCIsCiAgICAgICAgInRiOCIsCiAgICAgICAgInRiOF9pbml0IiwKICAgICAgICAidGI5IiwKICAgICAgICAidGI5X2luaXQiLAogICAgICAgICJ2YmFwMTYiLAogICAgICAgICJ2YmFwNCIsCiAgICAgICAgInZiYXA0bW92ZSIsCiAgICAgICAgInZiYXA4IiwKICAgICAgICAidmJhcDhtb3ZlIiwKICAgICAgICAieHlpbiIKICAgIF07CgogICAgb3Bjb2RlcyA9IGxhbmcuYXJyYXlUb01hcChvcGNvZGVzKTsKICAgIGRlcHJlY2F0ZWRPcGNvZGVzID0gbGFuZy5hcnJheVRvTWFwKGRlcHJlY2F0ZWRPcGNvZGVzKTsKCiAgICB0aGlzLmxpbmVDb250aW51YXRpb25zID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5saW5lLWNvbnRpbnVhdGlvbi5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cXCQvCiAgICAgICAgfSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUubGluZS1jb250aW51YXRpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwvLAogICAgICAgICAgICBuZXh0ICA6ICJsaW5lIGNvbnRpbnVhdGlvbiIKICAgICAgICB9KQogICAgXTsKCiAgICB0aGlzLmNvbW1lbnRzLnB1c2godGhpcy5saW5lQ29udGludWF0aW9ucyk7CgogICAgdGhpcy5xdW90ZWRTdHJpbmdDb250ZW50cy5wdXNoKAogICAgICAgIHRoaXMubGluZUNvbnRpbnVhdGlvbnMsCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwiLAogICAgICAgICAgICByZWdleCA6IC9bXiJcXF0qJC8KICAgICAgICB9CiAgICApOwoKICAgIHZhciBzdGFydCA9IHRoaXMuJHJ1bGVzLnN0YXJ0OwogICAgc3RhcnQuc3BsaWNlKDEsIDAsIHsKICAgICAgICB0b2tlbiA6IFsidGV4dC5jc291bmQiLCAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kIiwgImVudGl0eS5wdW5jdHVhdGlvbi5sYWJlbC5jc291bmQiLCAidGV4dC5jc291bmQiXSwKICAgICAgICByZWdleCA6IC9eKFsgXHRdKikoXHcrKSg6KShbIFx0XSt8JCkvCiAgICB9KTsKICAgIHN0YXJ0LnB1c2goCiAgICAgICAgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJpbnN0clxiLywKICAgICAgICAgICAgbmV4dCAgOiAiaW5zdHJ1bWVudCBudW1iZXJzIGFuZCBpZGVudGlmaWVycyIKICAgICAgICB9KSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJvcGNvZGVcYi8sCiAgICAgICAgICAgIG5leHQgIDogImFmdGVyIG9wY29kZSBrZXl3b3JkIgogICAgICAgIH0pLCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3RoZXIuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJlbmQoPzppbnxvcClcYi8KICAgICAgICB9LAoKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xiKD86MGRiZnN8QTR8ayg/OnJ8c21wcyl8bmNobmxzKD86X2kpP3xzcilcYi8KICAgICAgICB9LAoKICAgICAgICB0aGlzLm51bWJlcnMsCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6ICJcXCs9fC09fFxcKj18Lz18PDx8Pj58PD18Pj18PT18IT18JiZ8XFx8XFx8fFt+wqxdfFs9IStcXC0qL14lJnw8PiM/Ol0iCiAgICAgICAgfSwKCiAgICAgICAgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICBuZXh0ICA6ICJxdW90ZWQgc3RyaW5nIgogICAgICAgIH0pLCB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAve3svLAogICAgICAgICAgICBuZXh0ICA6ICJicmFjZWQgc3RyaW5nIgogICAgICAgIH0pLAoKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuY29udHJvbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cYig/OmRvfGVsc2UoPzppZik/fGVuZCg/OmlmfHVudGlsKXxmaXxpKD86Znx0aGVuKXxrdGhlbnxvZHxyKD86aXIpP2V0dXJufHRoZW58dW50aWx8d2hpbGUpXGIvCiAgICAgICAgfSwKCiAgICAgICAgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuY29udHJvbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cYltpa10/Z290b1xiLywKICAgICAgICAgICAgbmV4dCAgOiAiZ290byBiZWZvcmUgbGFiZWwiCiAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGIoPzpyKD86ZWluaXR8aWdvdG8pfHRpZ290bylcYi8sCiAgICAgICAgICAgIG5leHQgIDogImdvdG8gYmVmb3JlIGxhYmVsIgogICAgICAgIH0pLCB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5jb250cm9sLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xiYyg/Omd8aW4/fGt8bms/KWdvdG9cYi8sCiAgICAgICAgICAgIG5leHQgIDogWyJnb3RvIGJlZm9yZSBsYWJlbCIsICJnb3RvIGJlZm9yZSBhcmd1bWVudCJdCiAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJ0aW1vdXRcYi8sCiAgICAgICAgICAgIG5leHQgIDogWyJnb3RvIGJlZm9yZSBsYWJlbCIsICJnb3RvIGJlZm9yZSBhcmd1bWVudCIsICJnb3RvIGJlZm9yZSBhcmd1bWVudCJdCiAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJsb29wX1tnbF1bZXRdXGIvLAogICAgICAgICAgICBuZXh0ICA6IFsiZ290byBiZWZvcmUgbGFiZWwiLCAiZ290byBiZWZvcmUgYXJndW1lbnQiLCAiZ290byBiZWZvcmUgYXJndW1lbnQiLCAiZ290byBiZWZvcmUgYXJndW1lbnQiXQogICAgICAgIH0pLAoKICAgICAgICB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cYig/OnJlYWRzY29yZXxzY29yZWxpbmUoPzpfaSk/KVxiLywKICAgICAgICAgICAgbmV4dCAgOiAiQ3NvdW5kIHNjb3JlIG9wY29kZSIKICAgICAgICB9KSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJweWw/cnVuW2l0XT9cYig/ISQpLywKICAgICAgICAgICAgbmV4dCAgOiAiUHl0aG9uIG9wY29kZSIKICAgICAgICB9KSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJsdWFfKD86ZXhlY3xvcGRlZilcYig/ISQpLywKICAgICAgICAgICAgbmV4dCAgOiAiTHVhIG9wY29kZSIKICAgICAgICB9KSwKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnZhcmlhYmxlLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xicFxkK1xiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXggOiAvXGIoW0EtWl9hLXpdXHcqKSg/Oig6KShbQS1aYS16XSkpP1xiLywgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0b2tlbnNbMV07CiAgICAgICAgICAgICAgICB2YXIgdHlwZTsKICAgICAgICAgICAgICAgIGlmIChvcGNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgICAgICAgIHR5cGUgPSAic3VwcG9ydC5mdW5jdGlvbi5jc291bmQiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVwcmVjYXRlZE9wY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJpbnZhbGlkLmRlcHJlY2F0ZWQuY3NvdW5kIjsKICAgICAgICAgICAgICAgIGlmICh0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1syXSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IHR5cGUsIHZhbHVlOiBuYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAicHVuY3R1YXRpb24udHlwZS1hbm5vdGF0aW9uLmNzb3VuZCIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJ0eXBlLWFubm90YXRpb24uc3RvcmFnZS50eXBlLmNzb3VuZCIsIHZhbHVlOiB0b2tlbnNbM119CiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0LmNzb3VuZCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICApOwoKICAgIHRoaXMuJHJ1bGVzWyJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgbGlzdCJdLnNwbGljZSgyLCAwLCB7CiAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kIiwKICAgICAgICByZWdleCA6IC97ey8sCiAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIGJyYWNlZCBzdHJpbmciCiAgICB9KTsKCiAgICB2YXIgc2NvcmVIaWdobGlnaHRSdWxlcyA9IG5ldyBDc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzKCJjc291bmQtc2NvcmUtIik7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBicmFjZWQgc3RyaW5nIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXFsjJygpXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWyMnKCldLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL319LywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBsaXN0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcuYnJhY2VkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJpbnN0cnVtZW50IG51bWJlcnMgYW5kIGlkZW50aWZpZXJzIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXGQrfFtBLVpfYS16XVx3Ki8KICAgICAgICAgICAgfSwgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvCiAgICAgICAgICAgIH0pCiAgICAgICAgXSwKCiAgICAgICAgImFmdGVyIG9wY29kZSBrZXl3b3JkIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8KICAgICAgICAgICAgfSksIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5vcGNvZGUuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tBLVpfYS16XVx3Ki8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJvcGNvZGUgdHlwZSBzaWduYXR1cmVzIgogICAgICAgICAgICB9KQogICAgICAgIF0sCiAgICAgICAgIm9wY29kZSB0eXBlIHNpZ25hdHVyZXMiOiBbCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8kLwogICAgICAgICAgICB9KSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cYig/OjB8W2FmaWprS29PcFBTdFZcW1xdXSspLwogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgInF1b3RlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImJyYWNlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL319LwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy5icmFjZWRTdHJpbmdDb250ZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLmJyYWNlZC5jc291bmQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAiZ290byBiZWZvcmUgYXJndW1lbnQiOiBbCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0LmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8sLwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdLAogICAgICAgICJnb3RvIGJlZm9yZSBsYWJlbCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXHMrLwogICAgICAgICAgICB9LAogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1x3Ky8KICAgICAgICAgICAgfSksIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8oPyFcdykvCiAgICAgICAgICAgIH0pCiAgICAgICAgXSwKCiAgICAgICAgIkNzb3VuZCBzY29yZSBvcGNvZGUiOiBbCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC97ey8sCiAgICAgICAgICAgICAgICBuZXh0ICA6IHNjb3JlSGlnaGxpZ2h0UnVsZXMuZW1iZWRkZWRSdWxlUHJlZml4ICsgInN0YXJ0IgogICAgICAgICAgICB9LCB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8KICAgICAgICAgICAgfSkKICAgICAgICBdLAoKICAgICAgICAiUHl0aG9uIG9wY29kZSI6IFsKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL3t7LywKICAgICAgICAgICAgICAgIG5leHQgIDogInB5dGhvbi1zdGFydCIKICAgICAgICAgICAgfSwgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvCiAgICAgICAgICAgIH0pCiAgICAgICAgXSwKCiAgICAgICAgIkx1YSBvcGNvZGUiOiBbCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC97ey8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJsdWEtc3RhcnQiCiAgICAgICAgICAgIH0sIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8kLwogICAgICAgICAgICB9KQogICAgICAgIF0sCgogICAgICAgICJsaW5lIGNvbnRpbnVhdGlvbiI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLnNlbWljb2xvbkNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xTLiovCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9KTsKCiAgICB2YXIgcnVsZXMgPSBbCiAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL319LwogICAgICAgIH0pCiAgICBdOwogICAgdGhpcy5lbWJlZFJ1bGVzKHNjb3JlSGlnaGxpZ2h0UnVsZXMuZ2V0UnVsZXMoKSwgc2NvcmVIaWdobGlnaHRSdWxlcy5lbWJlZGRlZFJ1bGVQcmVmaXgsIHJ1bGVzKTsKICAgIHRoaXMuZW1iZWRSdWxlcyhQeXRob25IaWdobGlnaHRSdWxlcywgInB5dGhvbi0iLCBydWxlcyk7CiAgICB0aGlzLmVtYmVkUnVsZXMoTHVhSGlnaGxpZ2h0UnVsZXMsICJsdWEtIiwgcnVsZXMpOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhDc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcywgQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcyA9IENzb3VuZE9yY2hlc3RyYUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBzdXBwb3J0VHlwZSA9IGV4cG9ydHMuc3VwcG9ydFR5cGUgPSAiYWxpZ24tY29udGVudHxhbGlnbi1pdGVtc3xhbGlnbi1zZWxmfGFsbHxhbmltYXRpb258YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1maWxsLW1vZGV8YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudHxhbmltYXRpb24tbmFtZXxhbmltYXRpb24tcGxheS1zdGF0ZXxhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9ufGJhY2tmYWNlLXZpc2liaWxpdHl8YmFja2dyb3VuZHxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1ibGVuZC1tb2RlfGJhY2tncm91bmQtY2xpcHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNpemV8Ym9yZGVyfGJvcmRlci1ib3R0b218Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJvcmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvdHRvbXxib3gtc2hhZG93fGJveC1zaXppbmd8Y2FwdGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3J8Y29sdW1uLWNvdW50fGNvbHVtbi1maWxsfGNvbHVtbi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXdpZHRofGNvbHVtbnN8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxlbXB0eS1jZWxsc3xmaWx0ZXJ8ZmxleHxmbGV4LWJhc2lzfGZsZXgtZGlyZWN0aW9ufGZsZXgtZmxvd3xmbGV4LWdyb3d8ZmxleC1zaHJpbmt8ZmxleC13cmFwfGZsb2F0fGZvbnR8Zm9udC1mYW1pbHl8Zm9udC1zaXplfGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGhhbmdpbmctcHVuY3R1YXRpb258aGVpZ2h0fGp1c3RpZnktY29udGVudHxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpc3Qtc3R5bGV8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxtYXJnaW58bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXgtaGVpZ2h0fG1heC13aWR0aHxtYXgtem9vbXxtaW4taGVpZ2h0fG1pbi13aWR0aHxtaW4tem9vbXxuYXYtZG93bnxuYXYtaW5kZXh8bmF2LWxlZnR8bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9yZGVyfG91dGxpbmV8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3ZlcmZsb3d8b3ZlcmZsb3cteHxvdmVyZmxvdy15fHBhZGRpbmd8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFnZS1icmVhay1hZnRlcnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwZXJzcGVjdGl2ZXxwZXJzcGVjdGl2ZS1vcmlnaW58cG9zaXRpb258cXVvdGVzfHJlc2l6ZXxyaWdodHx0YWItc2l6ZXx0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWFsaWduLWxhc3R8dGV4dC1kZWNvcmF0aW9ufHRleHQtZGVjb3JhdGlvbi1jb2xvcnx0ZXh0LWRlY29yYXRpb24tbGluZXx0ZXh0LWRlY29yYXRpb24tc3R5bGV8dGV4dC1pbmRlbnR8dGV4dC1qdXN0aWZ5fHRleHQtb3ZlcmZsb3d8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHRyYW5zZm9ybXx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2l0aW9ufHRyYW5zaXRpb24tZGVsYXl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHVuaWNvZGUtYmlkaXx1c2VyLXNlbGVjdHx1c2VyLXpvb218dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx3aGl0ZS1zcGFjZXx3aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCI7CnZhciBzdXBwb3J0RnVuY3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdiYXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIjsKdmFyIHN1cHBvcnRDb25zdGFudCA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50ID0gImFic29sdXRlfGFmdGVyLWVkZ2V8YWZ0ZXJ8YWxsLXNjcm9sbHxhbGx8YWxwaGFiZXRpY3xhbHdheXN8YW50aWFsaWFzZWR8YXJtZW5pYW58YXV0b3xhdm9pZC1jb2x1bW58YXZvaWQtcGFnZXxhdm9pZHxiYWxhbmNlfGJhc2VsaW5lfGJlZm9yZS1lZGdlfGJlZm9yZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrLWxpbmUtaGVpZ2h0fGJsb2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218Ym94fGJyZWFrLWFsbHxicmVhay13b3JkfGNhcGl0YWxpemV8Y2Fwcy1oZWlnaHR8Y2FwdGlvbnxjZW50ZXJ8Y2VudHJhbHxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y2xvbmV8Y2xvc2UtcXVvdGV8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb2x1bW58Y29uc2lkZXItc2hpZnRzfGNvbnRhaW58Y29udGVudC1ib3h8Y292ZXJ8Y3Jvc3NoYWlyfGN1YmljLWJlemllcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxkZWZhdWx0fGRpc2FibGVkfGRpc2N8ZGlzcmVnYXJkLXNoaWZ0c3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxlYXNlLWlufGVhc2UtaW4tb3V0fGVhc2Utb3V0fGVhc2V8ZWxsaXBzaXN8ZW5kfGV4Y2x1ZGUtcnVieXxmaWxsfGZpeGVkfGdlb3JnaWFufGdseXBoc3xncmlkLWhlaWdodHxncm9vdmV8aGFuZHxoYW5naW5nfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGljb258aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aWRlb2dyYXBoaWN8aW5hY3RpdmV8aW5jbHVkZS1ydWJ5fGluaGVyaXR8aW5pdGlhbHxpbmxpbmUtYmxvY2t8aW5saW5lLWJveHxpbmxpbmUtbGluZS1oZWlnaHR8aW5saW5lLXRhYmxlfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aW52ZXJ0fGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxsfGxhc3R8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaW5lYXJ8bGlzdC1pdGVtfGxvY2FsfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWF0aGVtYXRpY2FsfG1heC1oZWlnaHR8bWF4LXNpemV8bWVkaXVtfG1lbnV8bWVzc2FnZS1ib3h8bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1jaGFuZ2V8bm8tY2xvc2UtcXVvdGV8bm8tZHJvcHxuby1vcGVuLXF1b3RlfG5vLXJlcGVhdHxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dyYXB8bnctcmVzaXplfG9ibGlxdWV8b3Blbi1xdW90ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxwYWRkaW5nLWJveHxwYWdlfHBvaW50ZXJ8cHJlLWxpbmV8cHJlLXdyYXB8cHJlfHByZXNlcnZlLTNkfHByb2dyZXNzfHJlbGF0aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyZXBsYWNlZHxyZXNldC1zaXplfHJpZGdlfHJpZ2h0fHJvdW5kfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJhdGV8c2xpY2V8c21hbGwtY2Fwc3xzbWFsbC1jYXB0aW9ufHNvbGlkfHNwYWNlfHNxdWFyZXxzdGFydHxzdGF0aWN8c3RhdHVzLWJhcnxzdGVwLWVuZHxzdGVwLXN0YXJ0fHN0ZXBzfHN0cmV0Y2h8c3RyaWN0fHN1YnxzdXBlcnxzdy1yZXNpemV8dGFibGUtY2FwdGlvbnx0YWJsZS1jZWxsfHRhYmxlLWNvbHVtbi1ncm91cHx0YWJsZS1jb2x1bW58dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1yb3ctZ3JvdXB8dGFibGUtcm93fHRhYmxlfHRiLXJsfHRleHQtYWZ0ZXItZWRnZXx0ZXh0LWJlZm9yZS1lZGdlfHRleHQtYm90dG9tfHRleHQtc2l6ZXx0ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx1c2Utc2NyaXB0fHZlcnRpY2FsLWlkZW9ncmFwaGljfHZlcnRpY2FsLXRleHR8dmlzaWJsZXx3LXJlc2l6ZXx3YWl0fHdoaXRlc3BhY2V8ei1pbmRleHx6ZXJvfHpvb20iOwp2YXIgc3VwcG9ydENvbnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9yID0gImFsaWNlYmx1ZXxhbnRpcXVld2hpdGV8YXF1YXxhcXVhbWFyaW5lfGF6dXJlfGJlaWdlfGJpc3F1ZXxibGFja3xibGFuY2hlZGFsbW9uZHxibHVlfGJsdWV2aW9sZXR8YnJvd258YnVybHl3b29kfGNhZGV0Ymx1ZXxjaGFydHJldXNlfGNob2NvbGF0ZXxjb3JhbHxjb3JuZmxvd2VyYmx1ZXxjb3Juc2lsa3xjcmltc29ufGN5YW58ZGFya2JsdWV8ZGFya2N5YW58ZGFya2dvbGRlbnJvZHxkYXJrZ3JheXxkYXJrZ3JlZW58ZGFya2dyZXl8ZGFya2toYWtpfGRhcmttYWdlbnRhfGRhcmtvbGl2ZWdyZWVufGRhcmtvcmFuZ2V8ZGFya29yY2hpZHxkYXJrcmVkfGRhcmtzYWxtb258ZGFya3NlYWdyZWVufGRhcmtzbGF0ZWJsdWV8ZGFya3NsYXRlZ3JheXxkYXJrc2xhdGVncmV5fGRhcmt0dXJxdW9pc2V8ZGFya3Zpb2xldHxkZWVwcGlua3xkZWVwc2t5Ymx1ZXxkaW1ncmF5fGRpbWdyZXl8ZG9kZ2VyYmx1ZXxmaXJlYnJpY2t8ZmxvcmFsd2hpdGV8Zm9yZXN0Z3JlZW58ZnVjaHNpYXxnYWluc2Jvcm98Z2hvc3R3aGl0ZXxnb2xkfGdvbGRlbnJvZHxncmF5fGdyZWVufGdyZWVueWVsbG93fGdyZXl8aG9uZXlkZXd8aG90cGlua3xpbmRpYW5yZWR8aW5kaWdvfGl2b3J5fGtoYWtpfGxhdmVuZGVyfGxhdmVuZGVyYmx1c2h8bGF3bmdyZWVufGxlbW9uY2hpZmZvbnxsaWdodGJsdWV8bGlnaHRjb3JhbHxsaWdodGN5YW58bGlnaHRnb2xkZW5yb2R5ZWxsb3d8bGlnaHRncmF5fGxpZ2h0Z3JlZW58bGlnaHRncmV5fGxpZ2h0cGlua3xsaWdodHNhbG1vbnxsaWdodHNlYWdyZWVufGxpZ2h0c2t5Ymx1ZXxsaWdodHNsYXRlZ3JheXxsaWdodHNsYXRlZ3JleXxsaWdodHN0ZWVsYmx1ZXxsaWdodHllbGxvd3xsaW1lfGxpbWVncmVlbnxsaW5lbnxtYWdlbnRhfG1hcm9vbnxtZWRpdW1hcXVhbWFyaW5lfG1lZGl1bWJsdWV8bWVkaXVtb3JjaGlkfG1lZGl1bXB1cnBsZXxtZWRpdW1zZWFncmVlbnxtZWRpdW1zbGF0ZWJsdWV8bWVkaXVtc3ByaW5nZ3JlZW58bWVkaXVtdHVycXVvaXNlfG1lZGl1bXZpb2xldHJlZHxtaWRuaWdodGJsdWV8bWludGNyZWFtfG1pc3R5cm9zZXxtb2NjYXNpbnxuYXZham93aGl0ZXxuYXZ5fG9sZGxhY2V8b2xpdmV8b2xpdmVkcmFifG9yYW5nZXxvcmFuZ2VyZWR8b3JjaGlkfHBhbGVnb2xkZW5yb2R8cGFsZWdyZWVufHBhbGV0dXJxdW9pc2V8cGFsZXZpb2xldHJlZHxwYXBheWF3aGlwfHBlYWNocHVmZnxwZXJ1fHBpbmt8cGx1bXxwb3dkZXJibHVlfHB1cnBsZXxyZWJlY2NhcHVycGxlfHJlZHxyb3N5YnJvd258cm95YWxibHVlfHNhZGRsZWJyb3dufHNhbG1vbnxzYW5keWJyb3dufHNlYWdyZWVufHNlYXNoZWxsfHNpZW5uYXxzaWx2ZXJ8c2t5Ymx1ZXxzbGF0ZWJsdWV8c2xhdGVncmF5fHNsYXRlZ3JleXxzbm93fHNwcmluZ2dyZWVufHN0ZWVsYmx1ZXx0YW58dGVhbHx0aGlzdGxlfHRvbWF0b3x0dXJxdW9pc2V8dmlvbGV0fHdoZWF0fHdoaXRlfHdoaXRlc21va2V8eWVsbG93fHllbGxvd2dyZWVuIjsKdmFyIHN1cHBvcnRDb25zdGFudEZvbnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlhbHxjZW50dXJ5fGNvbWljfGNvdXJpZXJ8Y3Vyc2l2ZXxmYW50YXN5fGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0aWNhfGltcGFjdHxsdWNpZGF8c3ltYm9sfHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0b3BpYXx2ZXJkYW5hfHdlYmRpbmdzfHNhbnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKCnZhciBudW1SZSA9IGV4cG9ydHMubnVtUmUgPSAiXFwtPyg/Oig/OlswLTldKyg/OlxcLlswLTldKyk/KXwoPzpcXC5bMC05XSspKSI7CnZhciBwc2V1ZG9FbGVtZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxiKGFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVjdGlvbilcXGIiOwp2YXIgcHNldWRvQ2xhc3NlcyAgPSBleHBvcnRzLnBzZXVkb0NsYXNzZXMgPSAgIig6KVxcYihhY3RpdmV8Y2hlY2tlZHxkaXNhYmxlZHxlbXB0eXxlbmFibGVkfGZpcnN0LWNoaWxkfGZpcnN0LW9mLXR5cGV8Zm9jdXN8aG92ZXJ8aW5kZXRlcm1pbmF0ZXxpbnZhbGlkfGxhc3QtY2hpbGR8bGFzdC1vZi10eXBlfGxpbmt8bm90fG50aC1jaGlsZHxudGgtbGFzdC1jaGlsZHxudGgtbGFzdC1vZi10eXBlfG50aC1vZi10eXBlfG9ubHktY2hpbGR8b25seS1vZi10eXBlfHJlcXVpcmVkfHJvb3R8dGFyZ2V0fHZhbGlkfHZpc2l0ZWQpXFxiIjsKCnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKICAgICAgICAic3VwcG9ydC5jb25zdGFudCI6IHN1cHBvcnRDb25zdGFudCwKICAgICAgICAic3VwcG9ydC50eXBlIjogc3VwcG9ydFR5cGUsCiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiBzdXBwb3J0Q29uc3RhbnRDb2xvciwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5mb250cyI6IHN1cHBvcnRDb25zdGFudEZvbnRzCiAgICB9LCAidGV4dCIsIHRydWUpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKICAgICAgICAgICAgbmV4dDogICJydWxlc2V0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxcfSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJAKD8hdmlld3BvcnQpIiwKICAgICAgICAgICAgbmV4dDogICJtZWRpYSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAogICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0sCgogICAgICAgICJtZWRpYSI6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxcfSIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiOyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIig/Om1lZGlhfHN1cHBvcnRzfGRvY3VtZW50fGNoYXJzZXR8aW1wb3J0fG5hbWVzcGFjZXxtZWRpYXxzdXBwb3J0c3xkb2N1bWVudCIKICAgICAgICAgICAgICAgICsgInxwYWdlfGZvbnR8a2V5ZnJhbWVzfHZpZXdwb3J0fGNvdW50ZXItc3R5bGV8Zm9udC1mZWF0dXJlLXZhbHVlcyIKICAgICAgICAgICAgICAgICsgInxzd2FzaHxvcm5hbWVudHN8YW5ub3RhdGlvbnxzdHlsaXN0aWN8c3R5bGVzZXR8Y2hhcmFjdGVyLXZhcmlhbnQpIgogICAgICAgIH1dLAoKICAgICAgICAiY29tbWVudHMiIDogW3sKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4OiAiXFwvXFwqIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgInJ1bGVzZXQiIDogW3sKICAgICAgICAgICAgcmVnZXggOiAiLSh3ZWJraXR8bXN8bW96fG8pLSIsCiAgICAgICAgICAgIHRva2VuIDogInRleHQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIls6O10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJcXH0iLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJdLAogICAgICAgICAgICByZWdleCA6ICIoIiArIG51bVJlICsgIikoY2h8Y218ZGVnfGVtfGV4fGZyfGdkfGdyYWR8SHp8aW58a0h6fG1tfG1zfHBjfHB0fHB4fHJhZHxyZW18c3x0dXJufHZofHZtYXh8dm1pbnx2bXx2d3wlKSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICByZWdleCA6IG51bVJlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxlbWVudC5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9FbGVtZW50cwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tY2xhc3MuY3NzIl0sCiAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3NlcwogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInVybCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgdXJsOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86dXJsKDo/LXByZWZpeCk/fGRvbWFpbnxyZWdleHApXFwoIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCgogICAgICAgIHN0cmluZ3M6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlIDogImVzY2FwZXMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCQvLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQ6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgIGVzY2FwZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcKFthLWZBLUZcZF17MSw2fXxbXmEtZkEtRlxkXSkvCiAgICAgICAgfV0KCiAgICB9OwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhDc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQ3NzSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NvdW5kX2RvY3VtZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvY3NvdW5kX29yY2hlc3RyYV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9jc291bmRfc2NvcmVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKCnZhciBDc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NvdW5kX29yY2hlc3RyYV9oaWdobGlnaHRfcnVsZXMiKS5Dc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlczsKdmFyIENzb3VuZFNjb3JlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiKS5Dc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgQ3NvdW5kRG9jdW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBvcmNoZXN0cmFIaWdobGlnaHRSdWxlcyA9IG5ldyBDc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcygiY3NvdW5kLSIpOwogICAgdmFyIHNjb3JlSGlnaGxpZ2h0UnVsZXMgPSBuZXcgQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlcygiY3NvdW5kLXNjb3JlLSIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLmNzb3VuZC1kb2N1bWVudCIsICJlbnRpdHkubmFtZS50YWcuYmVnaW4uY3NvdW5kLWRvY3VtZW50IiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS5jc291bmQtZG9jdW1lbnQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg8KShDc291bmRTeW50aGVzaVtzel1lcikoPikvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3ludGhlc2l6ZXIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC5jc291bmQtZG9jdW1lbnQifQogICAgICAgIF0sCgogICAgICAgICJzeW50aGVzaXplciI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi5jc291bmQtZG9jdW1lbnQiLCAiZW50aXR5Lm5hbWUudGFnLmJlZ2luLmNzb3VuZC1kb2N1bWVudCIsICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UuY3NvdW5kLWRvY3VtZW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPC8pKENzb3VuZFN5bnRoZXNpW3N6XWVyKSg+KSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLmNzb3VuZC1kb2N1bWVudCIsICJlbnRpdHkubmFtZS50YWcuYmVnaW4uY3NvdW5kLWRvY3VtZW50IiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS5jc291bmQtZG9jdW1lbnQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8KShDc0luc3RydW1lbnRzKSg+KSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6IG9yY2hlc3RyYUhpZ2hsaWdodFJ1bGVzLmVtYmVkZGVkUnVsZVByZWZpeCArICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLmNzb3VuZC1kb2N1bWVudCIsICJlbnRpdHkubmFtZS50YWcuYmVnaW4uY3NvdW5kLWRvY3VtZW50IiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS5jc291bmQtZG9jdW1lbnQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8KShDc1Njb3JlKSg+KSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6IHNjb3JlSGlnaGxpZ2h0UnVsZXMuZW1iZWRkZWRSdWxlUHJlZml4ICsgInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4uY3NvdW5kLWRvY3VtZW50IiwgImVudGl0eS5uYW1lLnRhZy5iZWdpbi5jc291bmQtZG9jdW1lbnQiLCAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLmNzb3VuZC1kb2N1bWVudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDwpKFtIaF1bVHRdW01tXVtMbF0pKD4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogImh0bWwtc3RhcnQiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKICAgIHRoaXMuZW1iZWRSdWxlcyhvcmNoZXN0cmFIaWdobGlnaHRSdWxlcy5nZXRSdWxlcygpLCBvcmNoZXN0cmFIaWdobGlnaHRSdWxlcy5lbWJlZGRlZFJ1bGVQcmVmaXgsIFt7CiAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi5jc291bmQtZG9jdW1lbnQiLCAiZW50aXR5Lm5hbWUudGFnLmJlZ2luLmNzb3VuZC1kb2N1bWVudCIsICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UuY3NvdW5kLWRvY3VtZW50Il0sCiAgICAgICAgcmVnZXggOiAiKDwvKShDc0luc3RydW1lbnRzKSg+KSIsCiAgICAgICAgbmV4dCAgOiAic3ludGhlc2l6ZXIiCiAgICB9XSk7CiAgICB0aGlzLmVtYmVkUnVsZXMoc2NvcmVIaWdobGlnaHRSdWxlcy5nZXRSdWxlcygpLCBzY29yZUhpZ2hsaWdodFJ1bGVzLmVtYmVkZGVkUnVsZVByZWZpeCwgW3sKICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLmNzb3VuZC1kb2N1bWVudCIsICJlbnRpdHkubmFtZS50YWcuYmVnaW4uY3NvdW5kLWRvY3VtZW50IiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS5jc291bmQtZG9jdW1lbnQiXSwKICAgICAgICByZWdleCA6ICIoPC8pKENzU2NvcmUpKD4pIiwKICAgICAgICBuZXh0ICA6ICJzeW50aGVzaXplciIKICAgIH1dKTsKICAgIHRoaXMuZW1iZWRSdWxlcyhIdG1sSGlnaGxpZ2h0UnVsZXMsICJodG1sLSIsIFt7CiAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi5jc291bmQtZG9jdW1lbnQiLCAiZW50aXR5Lm5hbWUudGFnLmJlZ2luLmNzb3VuZC1kb2N1bWVudCIsICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UuY3NvdW5kLWRvY3VtZW50Il0sCiAgICAgICAgcmVnZXggOiAiKDwvKShbSGhdW1R0XVtNbV1bTGxdKSg+KSIsCiAgICAgICAgbmV4dCAgOiAic3ludGhlc2l6ZXIiCiAgICB9XSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzb3VuZERvY3VtZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkNzb3VuZERvY3VtZW50SGlnaGxpZ2h0UnVsZXMgPSBDc291bmREb2N1bWVudEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NvdW5kX2RvY3VtZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY3NvdW5kX2RvY3VtZW50X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENzb3VuZERvY3VtZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzb3VuZF9kb2N1bWVudF9oaWdobGlnaHRfcnVsZXMiKS5Dc291bmREb2N1bWVudEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc291bmREb2N1bWVudEhpZ2hsaWdodFJ1bGVzOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2Nzb3VuZF9kb2N1bWVudCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-csound_orchestra.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cgp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKGVtYmVkZGVkUnVsZVByZWZpeCkgewoKICAgIHRoaXMuZW1iZWRkZWRSdWxlUHJlZml4ID0gZW1iZWRkZWRSdWxlUHJlZml4ID09PSB1bmRlZmluZWQgPyAiIiA6IGVtYmVkZGVkUnVsZVByZWZpeDsKCiAgICB0aGlzLnNlbWljb2xvbkNvbW1lbnRzID0gewogICAgICAgIHRva2VuIDogImNvbW1lbnQubGluZS5zZW1pY29sb24uY3NvdW5kIiwKICAgICAgICByZWdleCA6ICI7LiokIgogICAgfTsKCiAgICB0aGlzLmNvbW1lbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi9cXCoiLAogICAgICAgICAgICBwdXNoICA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqLyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQuYmxvY2suY3NvdW5kIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmxpbmUuZG91YmxlLXNsYXNoLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi8vLiokIgogICAgICAgIH0sCiAgICAgICAgdGhpcy5zZW1pY29sb25Db21tZW50cwogICAgXTsKCiAgICB0aGlzLm1hY3JvVXNlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogWyJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwgInB1bmN0dWF0aW9uLmRlZmluaXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLWxpc3QuYmVnaW4uY3NvdW5kIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJFtBLVpfYS16XVx3KlwuPykoXCgpLywKICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIGxpc3QiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXCRbQS1aX2Etel1cdyooPzpcLnxcYikvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLm51bWJlcnMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmZsb2F0LmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkK1tFZV1bKy1dP1xkKyl8KD86XGQrXC5cZCp8XGQqXC5cZCspKD86W0VlXVsrLV0/XGQrKT8vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlLm51bWJlci5jc291bmQiLCAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmhleGFkZWNpbWFsLmNzb3VuZCJdLAogICAgICAgICAgICByZWdleCA6IC8oMFtYeF0pKFswLTlBLUZhLWZdKykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cZCsvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLmJyYWNlZFN0cmluZ0NvbnRlbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cXCg/OltcXGFibnJ0Il18WzAtN117MSwzfSkvCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5wbGFjZWhvbGRlci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8lWyMwXC0gK10qXGQqKD86XC5cZCspP1tkaXVveFhmRmVFZ0dhQWNzXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvJSUvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzID0gWwogICAgICAgIHRoaXMubWFjcm9Vc2VzLAogICAgICAgIHRoaXMuYnJhY2VkU3RyaW5nQ29udGVudHMKICAgIF07CgogICAgdmFyIHN0YXJ0ID0gWwogICAgICAgIHRoaXMuY29tbWVudHMsCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvIyg/OmUoPzpuZCg/OmlmKT98bHNlKVxifCMjKXxAQD9bIFx0XSpcZCsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jaW5jbHVkZS8sCiAgICAgICAgICAgIHB1c2ggIDogWwogICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuY3NvdW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oW14gXHRdKSg/Oi4qP1wxKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jaW5jbHVkZXN0ci8sCiAgICAgICAgICAgIHB1c2ggIDogWwogICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuY3NvdW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oW14gXHRdKSg/Oi4qP1wxKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jWyBcdF0qZGVmaW5lLywKICAgICAgICAgICAgbmV4dCAgOiAiZGVmaW5lIGRpcmVjdGl2ZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyMoPzppZm4/ZGVmfHVuZGVmKVxiLywKICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gZGlyZWN0aXZlIgogICAgICAgIH0sCgogICAgICAgIHRoaXMubWFjcm9Vc2VzCiAgICBdOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IHN0YXJ0LAoKICAgICAgICAiZGVmaW5lIGRpcmVjdGl2ZSI6IFsKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUuZnVuY3Rpb24ucHJlcHJvY2Vzc29yLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24ubWFjcm8tcGFyYW1ldGVyLW5hbWUtbGlzdC5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCgvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIG5hbWUgbGlzdCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5tYWNyby5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJtYWNybyBib2R5IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gcGFyYW1ldGVyIG5hbWUgbGlzdCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUucGFyYW1ldGVyLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW0EtWl9hLXpdXHcqLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLm1hY3JvLXBhcmFtZXRlci1uYW1lLWxpc3QuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkZWZpbmUgZGlyZWN0aXZlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gYm9keSI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwjLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLm1hY3JvLmVuZC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdLAoKICAgICAgICAibWFjcm8gZGlyZWN0aXZlIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tBLVpfYS16XVx3Ki8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgbGlzdCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtbGlzdC5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wpLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgcXVvdGVkIHN0cmluZyIKICAgICAgICAgICAgfSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtcGFyZW50aGV0aWNhbC5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCgvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIHBhcmVudGhldGljYWwiCiAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtc2VwYXJhdG9yLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbIyddIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIHF1b3RlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcWyMnKCldLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1sjJygpXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBsaXN0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBwYXJlbnRoZXRpY2FsIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXFwpLwogICAgICAgICAgICB9LCB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLXBhcmVudGhldGljYWwuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cKS8KICAgICAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLXBhcmVudGhldGljYWwuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1woLywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBwYXJlbnRoZXRpY2FsIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMucHVzaFJ1bGUgPSBmdW5jdGlvbihwYXJhbXMpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMubmV4dCkpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubmV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGFyYW1zLm5leHRbaV0gPSB0aGlzLmVtYmVkZGVkUnVsZVByZWZpeCArIHBhcmFtcy5uZXh0W2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZWdleCA6IHBhcmFtcy5yZWdleCwgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zLm5leHQpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubmV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHBhcmFtcy5uZXh0W2ldKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocGFyYW1zLm5leHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnRva2VuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0IG5leHQoKSB7IHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcy5uZXh0KSA/IHBhcmFtcy5uZXh0W3BhcmFtcy5uZXh0Lmxlbmd0aCAtIDFdIDogcGFyYW1zLm5leHQ7IH0sCiAgICAgICAgICAgIHNldCBuZXh0KG5leHQpIHsKICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMubmV4dCkpIHsKICAgICAgICAgICAgICAgICAgICBwYXJhbXMubmV4dCA9IG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXQgdG9rZW4oKSB7IHJldHVybiBwYXJhbXMudG9rZW47IH0KICAgICAgICB9OwogICAgfTsKCiAgICB0aGlzLnBvcFJ1bGUgPSBmdW5jdGlvbihwYXJhbXMpIHsKICAgICAgICBpZiAocGFyYW1zLm5leHQpIHsKICAgICAgICAgICAgcGFyYW1zLm5leHQgPSB0aGlzLmVtYmVkZGVkUnVsZVByZWZpeCArIHBhcmFtcy5uZXh0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcmVnZXggOiBwYXJhbXMucmVnZXgsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrLCBsaW5lKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubmV4dCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocGFyYW1zLm5leHQpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5sZW5ndGggPiAxID8gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gOiBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfTsKCn0pLmNhbGwoQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCmV4cG9ydHMuQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMgPSBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2Nzb3VuZF9wcmVwcm9jZXNzb3JfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKdmFyIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzOwoKdmFyIENzb3VuZFNjb3JlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihlbWJlZGRlZFJ1bGVQcmVmaXgpIHsKCiAgICBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMsIGVtYmVkZGVkUnVsZVByZWZpeCk7CgogICAgdGhpcy5xdW90ZWRTdHJpbmdDb250ZW50cy5wdXNoKHsKICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICByZWdleCA6IC9bXiJdKiQvCiAgICB9KTsKCiAgICB2YXIgc3RhcnQgPSB0aGlzLiRydWxlcy5zdGFydDsKICAgIHN0YXJ0LnB1c2goCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgcmVnZXggOiAvW2FiQ2RlZmlxc3R2eHldLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3cvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmxhbmd1YWdlLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3ovCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZC5jb250cm9sLmNzb3VuZC1zY29yZSIsICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbC5jc291bmQtc2NvcmUiXSwKICAgICAgICAgICAgcmVnZXggOiAvKFtuTnBQXVtwUF0pKFxkKykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm90aGVyLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1ttbl0vLAogICAgICAgICAgICBwdXNoICA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3JcYi8sCiAgICAgICAgICAgIG5leHQgIDogInJlcGVhdCBzZWN0aW9uIgogICAgICAgIH0sCgogICAgICAgIHRoaXMubnVtYmVycywKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIlshK1xcLSovXiUmfDw+I34uXSIKICAgICAgICB9LAoKICAgICAgICB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgIG5leHQgIDogInF1b3RlZCBzdHJpbmciCiAgICAgICAgfSksCgogICAgICAgIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5icmFjZWQtbG9vcC5iZWdpbi5jc291bmQtc2NvcmUiLAogICAgICAgICAgICByZWdleCA6IC97LywKICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciBsZWZ0IGJyYWNlIgogICAgICAgIH0pCiAgICApOwoKICAgIHRoaXMuYWRkUnVsZXMoewogICAgICAgICJyZXBlYXQgc2VjdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmRlY2ltYWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xkKy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJyZXBlYXQgc2VjdGlvbiBiZWZvcmUgbGFiZWwiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXBlYXQgc2VjdGlvbiBiZWZvcmUgbGFiZWwiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLmxhYmVsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAicXVvdGVkIHN0cmluZyI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8KICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHRoaXMucXVvdGVkU3RyaW5nQ29udGVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuY3NvdW5kLXNjb3JlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgImxvb3AgYWZ0ZXIgbGVmdCBicmFjZSI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5kZWNpbWFsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cZCsvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciByZXBlYXQgY291bnQiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xTLiovCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJsb29wIGFmdGVyIHJlcGVhdCBjb3VudCI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLmZ1bmN0aW9uLnByZXByb2Nlc3Nvci5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW0EtWl9hLXpdXHcqXGIvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciBtYWNybyBuYW1lIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cUy4qLwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibG9vcCBhZnRlciBtYWNybyBuYW1lIjogWwogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmJyYWNlZC1sb29wLmVuZC5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvfS8KICAgICAgICAgICAgfSkKICAgICAgICBdCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlcywgQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzID0gQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2x1YV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBMdWFIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYnJlYWt8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGZvcnxmdW5jdGlvbnxpZnxpbnxsb2NhbHxyZXBlYXR8IisKICAgICAgICAgInJldHVybnx0aGVufHVudGlsfHdoaWxlfG9yfGFuZHxub3QiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKCJ0cnVlfGZhbHNlfG5pbHxfR3xfVkVSU0lPTiIpOwoKICAgIHZhciBmdW5jdGlvbnMgPSAoCiAgICAgICAgInN0cmluZ3x4cGNhbGx8cGFja2FnZXx0b3N0cmluZ3xwcmludHxvc3x1bnBhY2t8cmVxdWlyZXwiKwogICAgICAgICJnZXRmZW52fHNldG1ldGF0YWJsZXxuZXh0fGFzc2VydHx0b251bWJlcnxpb3xyYXdlcXVhbHwiKwogICAgICAgICJjb2xsZWN0Z2FyYmFnZXxnZXRtZXRhdGFibGV8bW9kdWxlfHJhd3NldHxtYXRofGRlYnVnfCIrCiAgICAgICAgInBjYWxsfHRhYmxlfG5ld3Byb3h5fHR5cGV8Y29yb3V0aW5lfF9HfHNlbGVjdHxnY2luZm98IisKICAgICAgICAicGFpcnN8cmF3Z2V0fGxvYWRzdHJpbmd8aXBhaXJzfF9WRVJTSU9OfGRvZmlsZXxzZXRmZW52fCIrCiAgICAgICAgImxvYWR8ZXJyb3J8bG9hZGZpbGV8IisKCiAgICAgICAgInN1Ynx1cHBlcnxsZW58Z2ZpbmR8cmVwfGZpbmR8bWF0Y2h8Y2hhcnxkdW1wfGdtYXRjaHwiKwogICAgICAgICJyZXZlcnNlfGJ5dGV8Zm9ybWF0fGdzdWJ8bG93ZXJ8cHJlbG9hZHxsb2FkbGlifGxvYWRlZHwiKwogICAgICAgICJsb2FkZXJzfGNwYXRofGNvbmZpZ3xwYXRofHNlZWFsbHxleGl0fHNldGxvY2FsZXxkYXRlfCIrCiAgICAgICAgImdldGVudnxkaWZmdGltZXxyZW1vdmV8dGltZXxjbG9ja3x0bXBuYW1lfHJlbmFtZXxleGVjdXRlfCIrCiAgICAgICAgImxpbmVzfHdyaXRlfGNsb3NlfGZsdXNofG9wZW58b3V0cHV0fHR5cGV8cmVhZHxzdGRlcnJ8IisKICAgICAgICAic3RkaW58aW5wdXR8c3Rkb3V0fHBvcGVufHRtcGZpbGV8bG9nfG1heHxhY29zfGh1Z2V8IisKICAgICAgICAibGRleHB8cGl8Y29zfHRhbmh8cG93fGRlZ3x0YW58Y29zaHxzaW5ofHJhbmRvbXxyYW5kb21zZWVkfCIrCiAgICAgICAgImZyZXhwfGNlaWx8Zmxvb3J8cmFkfGFic3xzcXJ0fG1vZGZ8YXNpbnxtaW58bW9kfGZtb2R8bG9nMTB8IisKICAgICAgICAiYXRhbjJ8ZXhwfHNpbnxhdGFufGdldHVwdmFsdWV8ZGVidWd8c2V0aG9va3xnZXRtZXRhdGFibGV8IisKICAgICAgICAiZ2V0aG9va3xzZXRtZXRhdGFibGV8c2V0bG9jYWx8dHJhY2ViYWNrfHNldGZlbnZ8Z2V0aW5mb3wiKwogICAgICAgICJzZXR1cHZhbHVlfGdldGxvY2FsfGdldHJlZ2lzdHJ5fGdldGZlbnZ8c2V0bnxpbnNlcnR8Z2V0bnwiKwogICAgICAgICJmb3JlYWNoaXxtYXhufGZvcmVhY2h8Y29uY2F0fHNvcnR8cmVtb3ZlfHJlc3VtZXx5aWVsZHwiKwogICAgICAgICJzdGF0dXN8d3JhcHxjcmVhdGV8cnVubmluZ3wiKwogICAgICAgICJfX2FkZHxfX3N1YnxfX21vZHxfX3VubXxfX2NvbmNhdHxfX2x0fF9faW5kZXh8X19jYWxsfF9fZ2N8X19tZXRhdGFibGV8IisKICAgICAgICAgIl9fbXVsfF9fZGl2fF9fcG93fF9fbGVufF9fZXF8X19sZXxfX25ld2luZGV4fF9fdG9zdHJpbmd8X19tb2RlfF9fdG9udW1iZXIiCiAgICApOwoKICAgIHZhciBzdGRMaWJhcmllcyA9ICgic3RyaW5nfHBhY2thZ2V8b3N8aW98bWF0aHxkZWJ1Z3x0YWJsZXxjb3JvdXRpbmUiKTsKCiAgICB2YXIgZGVwcmVjYXRlZEluNTE1MiA9ICgic2V0bnxmb3JlYWNofGZvcmVhY2hpfGdjaW5mb3xsb2cxMHxtYXhuIik7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBmdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQuZGVwcmVjYXRlZCI6IGRlcHJlY2F0ZWRJbjUxNTIsCiAgICAgICAgImNvbnN0YW50LmxpYnJhcnkiOiBzdGRMaWJhcmllcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJzZWxmIgogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgZGVjaW1hbEludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwogICAgdmFyIGhleEludGVnZXIgPSAiKD86MFt4WF1bXFxkQS1GYS1mXSspIjsKICAgIHZhciBpbnRlZ2VyID0gIig/OiIgKyBkZWNpbWFsSW50ZWdlciArICJ8IiArIGhleEludGVnZXIgKyAiKSI7CgogICAgdmFyIGZyYWN0aW9uID0gIig/OlxcLlxcZCspIjsKICAgIHZhciBpbnRQYXJ0ID0gIig/OlxcZCspIjsKICAgIHZhciBwb2ludEZsb2F0ID0gIig/Oig/OiIgKyBpbnRQYXJ0ICsgIj8iICsgZnJhY3Rpb24gKyAiKXwoPzoiICsgaW50UGFydCArICJcXC4pKSI7CiAgICB2YXIgZmxvYXROdW1iZXIgPSAiKD86IiArIHBvaW50RmxvYXQgKyAiKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHN0YXRlTmFtZTogImJyYWNrZXRlZENvbW1lbnQiLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spewogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHZhbHVlLmxlbmd0aCAtIDIsIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleCA6IC9cLVwtXFs9KlxbLywKICAgICAgICAgICAgbmV4dCAgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXT0qXF0vLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwtXFwtLiokIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJicmFja2V0ZWRTdHJpbmciLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spewogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHZhbHVlLmxlbmd0aCwgY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nLnN0YXJ0IjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAvXFs9KlxbLywKICAgICAgICAgICAgbmV4dCAgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nLmVuZCI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXT0qXF0vLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vICIgc3RyaW5nCiAgICAgICAgICAgIHJlZ2V4IDogJyIoPzpbXlxcXFxdfFxcXFwuKSo/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICInKD86W15cXFxcXXxcXFxcLikqPyciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgcmVnZXggOiBpbnRlZ2VyICsgIlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwqfFxcL3wlfFxcI3xcXF58fnw8fD58PD18PT58PT18fj18PXxcXDp8XFwuXFwuXFwufFxcLlxcLiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXFtcXChcXHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcXVxcKVxcfV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzK3xcXHcrIgogICAgICAgIH0gXQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEx1YUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5MdWFIaWdobGlnaHRSdWxlcyA9IEx1YUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFB5dGhvbkhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJhbmR8YXN8YXNzZXJ0fGJyZWFrfGNsYXNzfGNvbnRpbnVlfGRlZnxkZWx8ZWxpZnxlbHNlfGV4Y2VwdHxleGVjfCIgKwogICAgICAgICJmaW5hbGx5fGZvcnxmcm9tfGdsb2JhbHxpZnxpbXBvcnR8aW58aXN8bGFtYmRhfG5vdHxvcnxwYXNzfHByaW50fCIgKwogICAgICAgICJyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGR8YXN5bmN8YXdhaXR8bm9ubG9jYWwiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJUcnVlfEZhbHNlfE5vbmV8Tm90SW1wbGVtZW50ZWR8RWxsaXBzaXN8X19kZWJ1Z19fIgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiYWJzfGRpdm1vZHxpbnB1dHxvcGVufHN0YXRpY21ldGhvZHxhbGx8ZW51bWVyYXRlfGludHxvcmR8c3RyfGFueXwiICsKICAgICAgICAiZXZhbHxpc2luc3RhbmNlfHBvd3xzdW18YmFzZXN0cmluZ3xleGVjZmlsZXxpc3N1YmNsYXNzfHByaW50fHN1cGVyfCIgKwogICAgICAgICJiaW5maWxlfGJpbnxpdGVyfHByb3BlcnR5fHR1cGxlfGJvb2x8ZmlsdGVyfGxlbnxyYW5nZXx0eXBlfGJ5dGVhcnJheXwiICsKICAgICAgICAiZmxvYXR8bGlzdHxyYXdfaW5wdXR8dW5pY2hyfGNhbGxhYmxlfGZvcm1hdHxsb2NhbHN8cmVkdWNlfHVuaWNvZGV8IiArCiAgICAgICAgImNocnxmcm96ZW5zZXR8bG9uZ3xyZWxvYWR8dmFyc3xjbGFzc21ldGhvZHxnZXRhdHRyfG1hcHxyZXByfHhyYW5nZXwiICsKICAgICAgICAiY21wfGdsb2JhbHN8bWF4fHJldmVyc2VkfHppcHxjb21waWxlfGhhc2F0dHJ8bWVtb3J5dmlld3xyb3VuZHwiICsKICAgICAgICAiX19pbXBvcnRfX3xjb21wbGV4fGhhc2h8bWlufGFwcGx5fGRlbGF0dHJ8aGVscHxuZXh0fHNldGF0dHJ8c2V0fCIgKwogICAgICAgICJidWZmZXJ8ZGljdHxoZXh8b2JqZWN0fHNsaWNlfGNvZXJjZXxkaXJ8aWR8b2N0fHNvcnRlZHxpbnRlcm58IiArCiAgICAgICAgImFzY2lpfGJyZWFrcG9pbnR8Ynl0ZXMiCiAgICApOwogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJpbnZhbGlkLmRlcHJlY2F0ZWQiOiAiZGVidWdnZXIiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAic2VsZnxjbHMiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWx0aW5Db25zdGFudHMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgc3RyUHJlID0gIlt1VV0/IjsKICAgIHZhciBzdHJSYXdQcmUgPSAiW3JSXSI7CiAgICB2YXIgc3RyRm9ybWF0UHJlID0gIltmRl0iOwogICAgdmFyIHN0clJhd0Zvcm1hdFByZSA9ICIoPzpbclJdW2ZGXXxbZkZdW3JSXSkiOwogICAgdmFyIGRlY2ltYWxJbnRlZ2VyID0gIig/Oig/OlsxLTldXFxkKil8KD86MCkpIjsKICAgIHZhciBvY3RJbnRlZ2VyID0gIig/OjBbb09dP1swLTddKykiOwogICAgdmFyIGhleEludGVnZXIgPSAiKD86MFt4WF1bXFxkQS1GYS1mXSspIjsKICAgIHZhciBiaW5JbnRlZ2VyID0gIig/OjBbYkJdWzAxXSspIjsKICAgIHZhciBpbnRlZ2VyID0gIig/OiIgKyBkZWNpbWFsSW50ZWdlciArICJ8IiArIG9jdEludGVnZXIgKyAifCIgKyBoZXhJbnRlZ2VyICsgInwiICsgYmluSW50ZWdlciArICIpIjsKCiAgICB2YXIgZXhwb25lbnQgPSAiKD86W2VFXVsrLV0/XFxkKykiOwogICAgdmFyIGZyYWN0aW9uID0gIig/OlxcLlxcZCspIjsKICAgIHZhciBpbnRQYXJ0ID0gIig/OlxcZCspIjsKICAgIHZhciBwb2ludEZsb2F0ID0gIig/Oig/OiIgKyBpbnRQYXJ0ICsgIj8iICsgZnJhY3Rpb24gKyAiKXwoPzoiICsgaW50UGFydCArICJcXC4pKSI7CiAgICB2YXIgZXhwb25lbnRGbG9hdCA9ICIoPzooPzoiICsgcG9pbnRGbG9hdCArICJ8IiArIGludFBhcnQgKyAiKSIgKyBleHBvbmVudCArICIpIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzoiICsgZXhwb25lbnRGbG9hdCArICJ8IiArIHBvaW50RmxvYXQgKyAiKSI7CgogICAgdmFyIHN0cmluZ0VzY2FwZSA9ICJcXFxcKHhbMC05QS1GYS1mXXsyfXxbMC03XXszfXxbXFxcXGFiZm5ydHYnXCJdfFVbMC05QS1GYS1mXXs4fXx1WzAtOUEtRmEtZl17NH0pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWyB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBzdGFydAogICAgICAgICAgICByZWdleCA6IHN0clByZSArICciezN9JywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gIiBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyBtdWx0aSBsaW5lICcnJyBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQgOiAicXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAiJyg/PS4pIiwKICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3UHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAicmF3cXFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAKICAgICAgICAgICAgcmVnZXg6IHN0clJhd1ByZSArICciKD89LiknLAogICAgICAgICAgICBuZXh0OiAicmF3cXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd1ByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0OiAicmF3cXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICciezN9JywKICAgICAgICAgICAgbmV4dDogImZxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJGb3JtYXRQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dDogImZxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICInezN9IiwKICAgICAgICAgICAgbmV4dDogImZxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0OiAiZnFzdHJpbmciCiAgICAgICAgfSx7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd0Zvcm1hdFByZSArICciezN9JywKICAgICAgICAgICAgbmV4dDogInJmcXFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgJyIoPz0uKScsCiAgICAgICAgICAgIG5leHQ6ICJyZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgIid7M30iLAogICAgICAgICAgICBuZXh0OiAicmZxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd0Zvcm1hdFByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0OiAicmZxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6ICJcXCt8XFwtfFxcKnxcXCpcXCp8XFwvfFxcL1xcL3wlfEB8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uIiwKICAgICAgICAgICAgcmVnZXg6ICIsfDp8O3xcXC0+fFxcKz18XFwtPXxcXCo9fFxcLz18XFwvXFwvPXwlPXxAPXwmPXxcXHw9fF49fD4+PXw8PD18XFwqXFwqPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxbXFwoXFx7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxdXFwpXFx9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJjb25zdGFudHMiCiAgICAgICAgfV0sCiAgICAgICAgInFxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lICIiIiBzdHJpbmcgZW5kCiAgICAgICAgICAgIHJlZ2V4OiAnInszfScsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiJ3wkIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyYXdxcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICciezN9JywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyYXdxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyYXdxcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICcifCQnLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3FzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAicmF3cXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJmcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAiZnFxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAiZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiJ3wkIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxcXN0cmluZzMiOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICciezN9JywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICInezN9IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJyZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJmcXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJmcXN0cmluZ1BhclJ1bGVzIjogW3svL1RPRE86IG5lc3RlZCB7fQogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiW1xcW1xcKF0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiW1xcXVxcKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInKC4pKiciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnIiguKSoiJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJmdW5jdGlvbi5zdXBwb3J0IiwKICAgICAgICAgICAgcmVnZXg6ICIoIXN8IXJ8IWEpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImNvbnN0YW50cyIKICAgICAgICB9LHsKICAgICAgICAgICAgdG9rZW46ICdwYXJlbi5ycGFyZW4nLAogICAgICAgICAgICByZWdleDogIn0iLAogICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgIH0sewogICAgICAgICAgICB0b2tlbjogJ3BhcmVuLmxwYXJlbicsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH1dLAogICAgICAgICJjb25zdGFudHMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbWFnaW5hcnkKICAgICAgICAgICAgcmVnZXg6ICIoPzoiICsgZmxvYXROdW1iZXIgKyAifFxcZCspW2pKXVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4OiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gbG9uZyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4OiBpbnRlZ2VyICsgIltsTF1cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4OiBpbnRlZ2VyICsgIlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbInB1bmN0dWF0aW9uIiwgImZ1bmN0aW9uLnN1cHBvcnQiXSwvLyBtZXRob2QKICAgICAgICAgICAgcmVnZXg6ICIoXFwuKShbYS16QS1aX10rKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9XQogICAgfTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhQeXRob25IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSBQeXRob25IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzb3VuZF9vcmNoZXN0cmFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKdmFyIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NvdW5kX3Njb3JlX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFNjb3JlSGlnaGxpZ2h0UnVsZXM7CnZhciBMdWFIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbHVhX2hpZ2hsaWdodF9ydWxlcyIpLkx1YUhpZ2hsaWdodFJ1bGVzOwp2YXIgUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiKS5QeXRob25IaWdobGlnaHRSdWxlczsKCnZhciBDc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKGVtYmVkZGVkUnVsZVByZWZpeCkgewoKICAgIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcywgZW1iZWRkZWRSdWxlUHJlZml4KTsKICAgIHZhciBvcGNvZGVzID0gWwogICAgICAgICJBVFNhZGQiLAogICAgICAgICJBVFNhZGRueiIsCiAgICAgICAgIkFUU2J1ZnJlYWQiLAogICAgICAgICJBVFNjcm9zcyIsCiAgICAgICAgIkFUU2luZm8iLAogICAgICAgICJBVFNpbnRlcnByZWFkIiwKICAgICAgICAiQVRTcGFydGlhbHRhcCIsCiAgICAgICAgIkFUU3JlYWQiLAogICAgICAgICJBVFNyZWFkbnoiLAogICAgICAgICJBVFNzaW5ub2kiLAogICAgICAgICJGTGJveCIsCiAgICAgICAgIkZMYnV0QmFuayIsCiAgICAgICAgIkZMYnV0dG9uIiwKICAgICAgICAiRkxjbG9zZUJ1dHRvbiIsCiAgICAgICAgIkZMY29sb3IiLAogICAgICAgICJGTGNvbG9yMiIsCiAgICAgICAgIkZMY291bnQiLAogICAgICAgICJGTGV4ZWNCdXR0b24iLAogICAgICAgICJGTGdldHNuYXAiLAogICAgICAgICJGTGdyb3VwIiwKICAgICAgICAiRkxncm91cEVuZCIsCiAgICAgICAgIkZMZ3JvdXBfZW5kIiwKICAgICAgICAiRkxoaWRlIiwKICAgICAgICAiRkxodnNCb3giLAogICAgICAgICJGTGh2c0JveFNldFZhbHVlIiwKICAgICAgICAiRkxqb3kiLAogICAgICAgICJGTGtleUluIiwKICAgICAgICAiRkxrbm9iIiwKICAgICAgICAiRkxsYWJlbCIsCiAgICAgICAgIkZMbG9hZHNuYXAiLAogICAgICAgICJGTG1vdXNlIiwKICAgICAgICAiRkxwYWNrIiwKICAgICAgICAiRkxwYWNrRW5kIiwKICAgICAgICAiRkxwYWNrX2VuZCIsCiAgICAgICAgIkZMcGFuZWwiLAogICAgICAgICJGTHBhbmVsRW5kIiwKICAgICAgICAiRkxwYW5lbF9lbmQiLAogICAgICAgICJGTHByaW50ayIsCiAgICAgICAgIkZMcHJpbnRrMiIsCiAgICAgICAgIkZMcm9sbGVyIiwKICAgICAgICAiRkxydW4iLAogICAgICAgICJGTHNhdmVzbmFwIiwKICAgICAgICAiRkxzY3JvbGwiLAogICAgICAgICJGTHNjcm9sbEVuZCIsCiAgICAgICAgIkZMc2Nyb2xsX2VuZCIsCiAgICAgICAgIkZMc2V0QWxpZ24iLAogICAgICAgICJGTHNldEJveCIsCiAgICAgICAgIkZMc2V0Q29sb3IiLAogICAgICAgICJGTHNldENvbG9yMiIsCiAgICAgICAgIkZMc2V0Rm9udCIsCiAgICAgICAgIkZMc2V0UG9zaXRpb24iLAogICAgICAgICJGTHNldFNpemUiLAogICAgICAgICJGTHNldFNuYXBHcm91cCIsCiAgICAgICAgIkZMc2V0VGV4dCIsCiAgICAgICAgIkZMc2V0VGV4dENvbG9yIiwKICAgICAgICAiRkxzZXRUZXh0U2l6ZSIsCiAgICAgICAgIkZMc2V0VGV4dFR5cGUiLAogICAgICAgICJGTHNldFZhbCIsCiAgICAgICAgIkZMc2V0VmFsX2kiLAogICAgICAgICJGTHNldFZhbGkiLAogICAgICAgICJGTHNldHNuYXAiLAogICAgICAgICJGTHNob3ciLAogICAgICAgICJGTHNsaWRCbmsiLAogICAgICAgICJGTHNsaWRCbmsyIiwKICAgICAgICAiRkxzbGlkQm5rMlNldCIsCiAgICAgICAgIkZMc2xpZEJuazJTZXRrIiwKICAgICAgICAiRkxzbGlkQm5rR2V0SGFuZGxlIiwKICAgICAgICAiRkxzbGlkQm5rU2V0IiwKICAgICAgICAiRkxzbGlkQm5rU2V0ayIsCiAgICAgICAgIkZMc2xpZGVyIiwKICAgICAgICAiRkx0YWJzIiwKICAgICAgICAiRkx0YWJzRW5kIiwKICAgICAgICAiRkx0YWJzX2VuZCIsCiAgICAgICAgIkZMdGV4dCIsCiAgICAgICAgIkZMdXBkYXRlIiwKICAgICAgICAiRkx2YWx1ZSIsCiAgICAgICAgIkZMdmtleWJkIiwKICAgICAgICAiRkx2c2xpZEJuayIsCiAgICAgICAgIkZMdnNsaWRCbmsyIiwKICAgICAgICAiRkx4eWluIiwKICAgICAgICAiSmFja29BdWRpb0luIiwKICAgICAgICAiSmFja29BdWRpb0luQ29ubmVjdCIsCiAgICAgICAgIkphY2tvQXVkaW9PdXQiLAogICAgICAgICJKYWNrb0F1ZGlvT3V0Q29ubmVjdCIsCiAgICAgICAgIkphY2tvRnJlZXdoZWVsIiwKICAgICAgICAiSmFja29JbmZvIiwKICAgICAgICAiSmFja29Jbml0IiwKICAgICAgICAiSmFja29NaWRpSW5Db25uZWN0IiwKICAgICAgICAiSmFja29NaWRpT3V0IiwKICAgICAgICAiSmFja29NaWRpT3V0Q29ubmVjdCIsCiAgICAgICAgIkphY2tvTm90ZU91dCIsCiAgICAgICAgIkphY2tvT24iLAogICAgICAgICJKYWNrb1RyYW5zcG9ydCIsCiAgICAgICAgIkszNV9ocGYiLAogICAgICAgICJLMzVfbHBmIiwKICAgICAgICAiTWl4ZXJDbGVhciIsCiAgICAgICAgIk1peGVyR2V0TGV2ZWwiLAogICAgICAgICJNaXhlclJlY2VpdmUiLAogICAgICAgICJNaXhlclNlbmQiLAogICAgICAgICJNaXhlclNldExldmVsIiwKICAgICAgICAiTWl4ZXJTZXRMZXZlbF9pIiwKICAgICAgICAiT1NDYnVuZGxlIiwKICAgICAgICAiT1NDY291bnQiLAogICAgICAgICJPU0Npbml0IiwKICAgICAgICAiT1NDaW5pdE0iLAogICAgICAgICJPU0NsaXN0ZW4iLAogICAgICAgICJPU0NyYXciLAogICAgICAgICJPU0NzZW5kIiwKICAgICAgICAiT1NDc2VuZF9sbyIsCiAgICAgICAgIlMiLAogICAgICAgICJTVEtCYW5kZWRXRyIsCiAgICAgICAgIlNUS0JlZVRocmVlIiwKICAgICAgICAiU1RLQmxvd0JvdGwiLAogICAgICAgICJTVEtCbG93SG9sZSIsCiAgICAgICAgIlNUS0Jvd2VkIiwKICAgICAgICAiU1RLQnJhc3MiLAogICAgICAgICJTVEtDbGFyaW5ldCIsCiAgICAgICAgIlNUS0RydW1tZXIiLAogICAgICAgICJTVEtGTVZvaWNlcyIsCiAgICAgICAgIlNUS0ZsdXRlIiwKICAgICAgICAiU1RLSGV2eU1ldGwiLAogICAgICAgICJTVEtNYW5kb2xpbiIsCiAgICAgICAgIlNUS01vZGFsQmFyIiwKICAgICAgICAiU1RLTW9vZyIsCiAgICAgICAgIlNUS1BlcmNGbHV0IiwKICAgICAgICAiU1RLUGx1Y2tlZCIsCiAgICAgICAgIlNUS1Jlc29uYXRlIiwKICAgICAgICAiU1RLUmhvZGV5IiwKICAgICAgICAiU1RLU2F4b2ZvbnkiLAogICAgICAgICJTVEtTaGFrZXJzIiwKICAgICAgICAiU1RLU2ltcGxlIiwKICAgICAgICAiU1RLU2l0YXIiLAogICAgICAgICJTVEtTdGlmS2FycCIsCiAgICAgICAgIlNUS1R1YmVCZWxsIiwKICAgICAgICAiU1RLVm9pY0Zvcm0iLAogICAgICAgICJTVEtXaGlzdGxlIiwKICAgICAgICAiU1RLV3VybGV5IiwKICAgICAgICAiYSIsCiAgICAgICAgImFicyIsCiAgICAgICAgImFjdGl2ZSIsCiAgICAgICAgImFkc3IiLAogICAgICAgICJhZHN5biIsCiAgICAgICAgImFkc3ludCIsCiAgICAgICAgImFkc3ludDIiLAogICAgICAgICJhZnRvdWNoIiwKICAgICAgICAiYWxwYXNzIiwKICAgICAgICAiYWx3YXlzb24iLAogICAgICAgICJhbXBkYiIsCiAgICAgICAgImFtcGRiZnMiLAogICAgICAgICJhbXBtaWRpIiwKICAgICAgICAiYW1wbWlkaWQiLAogICAgICAgICJhcmVzb24iLAogICAgICAgICJhcmVzb25rIiwKICAgICAgICAiYXRvbmUiLAogICAgICAgICJhdG9uZWsiLAogICAgICAgICJhdG9uZXgiLAogICAgICAgICJiYWJvIiwKICAgICAgICAiYmFsYW5jZSIsCiAgICAgICAgImJhbGFuY2UyIiwKICAgICAgICAiYmFtYm9vIiwKICAgICAgICAiYmFybW9kZWwiLAogICAgICAgICJiYmN1dG0iLAogICAgICAgICJiYmN1dHMiLAogICAgICAgICJiZWFkc3ludCIsCiAgICAgICAgImJlb3NjIiwKICAgICAgICAiYmV0YXJhbmQiLAogICAgICAgICJiZXhwcm5kIiwKICAgICAgICAiYmZvcm1kZWMxIiwKICAgICAgICAiYmZvcm1lbmMxIiwKICAgICAgICAiYmluaXQiLAogICAgICAgICJiaXF1YWQiLAogICAgICAgICJiaXF1YWRhIiwKICAgICAgICAiYmlybmQiLAogICAgICAgICJicGYiLAogICAgICAgICJicGZjb3MiLAogICAgICAgICJicXJleiIsCiAgICAgICAgImJ1dGJwIiwKICAgICAgICAiYnV0YnIiLAogICAgICAgICJidXRocCIsCiAgICAgICAgImJ1dGxwIiwKICAgICAgICAiYnV0dGVyYnAiLAogICAgICAgICJidXR0ZXJiciIsCiAgICAgICAgImJ1dHRlcmhwIiwKICAgICAgICAiYnV0dGVybHAiLAogICAgICAgICJidXR0b24iLAogICAgICAgICJidXp6IiwKICAgICAgICAiYzJyIiwKICAgICAgICAiY2FiYXNhIiwKICAgICAgICAiY2F1Y2h5IiwKICAgICAgICAiY2F1Y2h5aSIsCiAgICAgICAgImNicnQiLAogICAgICAgICJjZWlsIiwKICAgICAgICAiY2VsbCIsCiAgICAgICAgImNlbnQiLAogICAgICAgICJjZW50cm9pZCIsCiAgICAgICAgImNlcHMiLAogICAgICAgICJjZXBzaW52IiwKICAgICAgICAiY2hhbmN0cmwiLAogICAgICAgICJjaGFuZ2VkIiwKICAgICAgICAiY2hhbmdlZDIiLAogICAgICAgICJjaGFuaSIsCiAgICAgICAgImNoYW5vIiwKICAgICAgICAiY2hlYnlzaGV2cG9seSIsCiAgICAgICAgImNoZWNrYm94IiwKICAgICAgICAiY2huX1MiLAogICAgICAgICJjaG5fYSIsCiAgICAgICAgImNobl9rIiwKICAgICAgICAiY2huY2xlYXIiLAogICAgICAgICJjaG5leHBvcnQiLAogICAgICAgICJjaG5nZXQiLAogICAgICAgICJjaG5nZXRrcyIsCiAgICAgICAgImNobm1peCIsCiAgICAgICAgImNobnBhcmFtcyIsCiAgICAgICAgImNobnNldCIsCiAgICAgICAgImNobnNldGtzIiwKICAgICAgICAiY2h1YXAiLAogICAgICAgICJjbGVhciIsCiAgICAgICAgImNsZmlsdCIsCiAgICAgICAgImNsaXAiLAogICAgICAgICJjbG9ja29mZiIsCiAgICAgICAgImNsb2Nrb24iLAogICAgICAgICJjbXAiLAogICAgICAgICJjbXBseHByb2QiLAogICAgICAgICJjb21iIiwKICAgICAgICAiY29tYmludiIsCiAgICAgICAgImNvbXBpbGVjc2QiLAogICAgICAgICJjb21waWxlb3JjIiwKICAgICAgICAiY29tcGlsZXN0ciIsCiAgICAgICAgImNvbXByZXNzIiwKICAgICAgICAiY29tcHJlc3MyIiwKICAgICAgICAiY29ubmVjdCIsCiAgICAgICAgImNvbnRyb2wiLAogICAgICAgICJjb252bGUiLAogICAgICAgICJjb252b2x2ZSIsCiAgICAgICAgImNvcHlhMmZ0YWIiLAogICAgICAgICJjb3B5ZjJhcnJheSIsCiAgICAgICAgImNvcyIsCiAgICAgICAgImNvc2giLAogICAgICAgICJjb3NpbnYiLAogICAgICAgICJjb3NzZWciLAogICAgICAgICJjb3NzZWdiIiwKICAgICAgICAiY29zc2VnciIsCiAgICAgICAgImNwczJwY2giLAogICAgICAgICJjcHNtaWRpIiwKICAgICAgICAiY3BzbWlkaWIiLAogICAgICAgICJjcHNtaWRpbm4iLAogICAgICAgICJjcHNvY3QiLAogICAgICAgICJjcHNwY2giLAogICAgICAgICJjcHN0bWlkIiwKICAgICAgICAiY3BzdHVuIiwKICAgICAgICAiY3BzdHVuaSIsCiAgICAgICAgImNwc3hwY2giLAogICAgICAgICJjcHVtZXRlciIsCiAgICAgICAgImNwdXByYyIsCiAgICAgICAgImNyb3NzMiIsCiAgICAgICAgImNyb3NzZm0iLAogICAgICAgICJjcm9zc2ZtaSIsCiAgICAgICAgImNyb3NzZm1wbSIsCiAgICAgICAgImNyb3NzZm1wbWkiLAogICAgICAgICJjcm9zc3BtIiwKICAgICAgICAiY3Jvc3NwbWkiLAogICAgICAgICJjcnVuY2giLAogICAgICAgICJjdGxjaG4iLAogICAgICAgICJjdHJsMTQiLAogICAgICAgICJjdHJsMjEiLAogICAgICAgICJjdHJsNyIsCiAgICAgICAgImN0cmxpbml0IiwKICAgICAgICAiY3VzZXJybmQiLAogICAgICAgICJkYW0iLAogICAgICAgICJkYXRlIiwKICAgICAgICAiZGF0ZXMiLAogICAgICAgICJkYiIsCiAgICAgICAgImRiYW1wIiwKICAgICAgICAiZGJmc2FtcCIsCiAgICAgICAgImRjYmxvY2siLAogICAgICAgICJkY2Jsb2NrMiIsCiAgICAgICAgImRjb252IiwKICAgICAgICAiZGN0IiwKICAgICAgICAiZGN0aW52IiwKICAgICAgICAiZGVpbnRlcmxlYXZlIiwKICAgICAgICAiZGVsYXkiLAogICAgICAgICJkZWxheTEiLAogICAgICAgICJkZWxheWsiLAogICAgICAgICJkZWxheXIiLAogICAgICAgICJkZWxheXciLAogICAgICAgICJkZWx0YXAiLAogICAgICAgICJkZWx0YXAzIiwKICAgICAgICAiZGVsdGFwaSIsCiAgICAgICAgImRlbHRhcG4iLAogICAgICAgICJkZWx0YXB4IiwKICAgICAgICAiZGVsdGFweHciLAogICAgICAgICJkZW5vcm0iLAogICAgICAgICJkaWZmIiwKICAgICAgICAiZGlvZGVfbGFkZGVyIiwKICAgICAgICAiZGlyZWN0b3J5IiwKICAgICAgICAiZGlza2dyYWluIiwKICAgICAgICAiZGlza2luIiwKICAgICAgICAiZGlza2luMiIsCiAgICAgICAgImRpc3BmZnQiLAogICAgICAgICJkaXNwbGF5IiwKICAgICAgICAiZGlzdG9ydCIsCiAgICAgICAgImRpc3RvcnQxIiwKICAgICAgICAiZGl2eiIsCiAgICAgICAgImRvcHBsZXIiLAogICAgICAgICJkb3QiLAogICAgICAgICJkb3duc2FtcCIsCiAgICAgICAgImRyaXB3YXRlciIsCiAgICAgICAgImRzc2lhY3RpdmF0ZSIsCiAgICAgICAgImRzc2lhdWRpbyIsCiAgICAgICAgImRzc2ljdGxzIiwKICAgICAgICAiZHNzaWluaXQiLAogICAgICAgICJkc3NpbGlzdCIsCiAgICAgICAgImR1bXBrIiwKICAgICAgICAiZHVtcGsyIiwKICAgICAgICAiZHVtcGszIiwKICAgICAgICAiZHVtcGs0IiwKICAgICAgICAiZHVzZXJybmQiLAogICAgICAgICJkdXN0IiwKICAgICAgICAiZHVzdDIiLAogICAgICAgICJlbnZscHgiLAogICAgICAgICJlbnZscHhyIiwKICAgICAgICAiZXBoYXNvciIsCiAgICAgICAgImVxZmlsIiwKICAgICAgICAiZXZhbHN0ciIsCiAgICAgICAgImV2ZW50IiwKICAgICAgICAiZXZlbnRfaSIsCiAgICAgICAgImV4Y2l0ZXIiLAogICAgICAgICJleGl0bm93IiwKICAgICAgICAiZXhwIiwKICAgICAgICAiZXhwY3VydmUiLAogICAgICAgICJleHBvbiIsCiAgICAgICAgImV4cHJhbmQiLAogICAgICAgICJleHByYW5kaSIsCiAgICAgICAgImV4cHNlZyIsCiAgICAgICAgImV4cHNlZ2EiLAogICAgICAgICJleHBzZWdiIiwKICAgICAgICAiZXhwc2VnYmEiLAogICAgICAgICJleHBzZWdyIiwKICAgICAgICAiZmFyZXlsZW4iLAogICAgICAgICJmYXJleWxlbmkiLAogICAgICAgICJmYXVzdGF1ZGlvIiwKICAgICAgICAiZmF1c3Rjb21waWxlIiwKICAgICAgICAiZmF1c3RjdGwiLAogICAgICAgICJmYXVzdGRzcCIsCiAgICAgICAgImZhdXN0Z2VuIiwKICAgICAgICAiZmF1c3RwbGF5IiwKICAgICAgICAiZmZ0IiwKICAgICAgICAiZmZ0aW52IiwKICAgICAgICAiZmljbG9zZSIsCiAgICAgICAgImZpbGViaXQiLAogICAgICAgICJmaWxlbGVuIiwKICAgICAgICAiZmlsZW5jaG5scyIsCiAgICAgICAgImZpbGVwZWFrIiwKICAgICAgICAiZmlsZXNjYWwiLAogICAgICAgICJmaWxlc3IiLAogICAgICAgICJmaWxldmFsaWQiLAogICAgICAgICJmaWxsYXJyYXkiLAogICAgICAgICJmaWx0ZXIyIiwKICAgICAgICAiZmluIiwKICAgICAgICAiZmluaSIsCiAgICAgICAgImZpbmsiLAogICAgICAgICJmaW9wZW4iLAogICAgICAgICJmbGFuZ2VyIiwKICAgICAgICAiZmxhc2h0eHQiLAogICAgICAgICJmbG9vcGVyIiwKICAgICAgICAiZmxvb3BlcjIiLAogICAgICAgICJmbG9vciIsCiAgICAgICAgImZtYW5hbCIsCiAgICAgICAgImZtYXgiLAogICAgICAgICJmbWIzIiwKICAgICAgICAiZm1iZWxsIiwKICAgICAgICAiZm1pbiIsCiAgICAgICAgImZtbWV0YWwiLAogICAgICAgICJmbW9kIiwKICAgICAgICAiZm1wZXJjZmwiLAogICAgICAgICJmbXJob2RlIiwKICAgICAgICAiZm12b2ljZSIsCiAgICAgICAgImZtd3VybGllIiwKICAgICAgICAiZm9mIiwKICAgICAgICAiZm9mMiIsCiAgICAgICAgImZvZmlsdGVyIiwKICAgICAgICAiZm9nIiwKICAgICAgICAiZm9sZCIsCiAgICAgICAgImZvbGxvdyIsCiAgICAgICAgImZvbGxvdzIiLAogICAgICAgICJmb3NjaWwiLAogICAgICAgICJmb3NjaWxpIiwKICAgICAgICAiZm91dCIsCiAgICAgICAgImZvdXRpIiwKICAgICAgICAiZm91dGlyIiwKICAgICAgICAiZm91dGsiLAogICAgICAgICJmcHJpbnRrcyIsCiAgICAgICAgImZwcmludHMiLAogICAgICAgICJmcmFjIiwKICAgICAgICAiZnJhY3RhbG5vaXNlIiwKICAgICAgICAiZnJhbWVidWZmZXIiLAogICAgICAgICJmcmVldmVyYiIsCiAgICAgICAgImZ0YXVkaW8iLAogICAgICAgICJmdGNobmxzIiwKICAgICAgICAiZnRjb252IiwKICAgICAgICAiZnRjcHMiLAogICAgICAgICJmdGZyZWUiLAogICAgICAgICJmdGdlbiIsCiAgICAgICAgImZ0Z2Vub25jZSIsCiAgICAgICAgImZ0Z2VudG1wIiwKICAgICAgICAiZnRsZW4iLAogICAgICAgICJmdGxvYWQiLAogICAgICAgICJmdGxvYWRrIiwKICAgICAgICAiZnRscHRpbSIsCiAgICAgICAgImZ0bW9yZiIsCiAgICAgICAgImZ0b20iLAogICAgICAgICJmdHByaW50IiwKICAgICAgICAiZnRyZXNpemUiLAogICAgICAgICJmdHJlc2l6ZWkiLAogICAgICAgICJmdHNhbXBsZWJhbmsiLAogICAgICAgICJmdHNhdmUiLAogICAgICAgICJmdHNhdmVrIiwKICAgICAgICAiZnRzbGljZSIsCiAgICAgICAgImZ0c3IiLAogICAgICAgICJnYWluIiwKICAgICAgICAiZ2FpbnNsaWRlciIsCiAgICAgICAgImdhdXNzIiwKICAgICAgICAiZ2F1c3NpIiwKICAgICAgICAiZ2F1c3N0cmlnIiwKICAgICAgICAiZ2J1enoiLAogICAgICAgICJnZW5hcnJheSIsCiAgICAgICAgImdlbmFycmF5X2kiLAogICAgICAgICJnZW5keSIsCiAgICAgICAgImdlbmR5YyIsCiAgICAgICAgImdlbmR5eCIsCiAgICAgICAgImdldGNmZyIsCiAgICAgICAgImdldGNvbCIsCiAgICAgICAgImdldGZ0YXJncyIsCiAgICAgICAgImdldHJvdyIsCiAgICAgICAgImdldHJvd2xpbiIsCiAgICAgICAgImdldHNlZWQiLAogICAgICAgICJnb2dvYmVsIiwKICAgICAgICAiZ3JhaW4iLAogICAgICAgICJncmFpbjIiLAogICAgICAgICJncmFpbjMiLAogICAgICAgICJncmFudWxlIiwKICAgICAgICAiZ3Vpcm8iLAogICAgICAgICJoYXJtb24iLAogICAgICAgICJoYXJtb24yIiwKICAgICAgICAiaGFybW9uMyIsCiAgICAgICAgImhhcm1vbjQiLAogICAgICAgICJoZGY1cmVhZCIsCiAgICAgICAgImhkZjV3cml0ZSIsCiAgICAgICAgImhpbGJlcnQiLAogICAgICAgICJoaWxiZXJ0MiIsCiAgICAgICAgImhydGZlYXJseSIsCiAgICAgICAgImhydGZtb3ZlIiwKICAgICAgICAiaHJ0Zm1vdmUyIiwKICAgICAgICAiaHJ0ZnJldmVyYiIsCiAgICAgICAgImhydGZzdGF0IiwKICAgICAgICAiaHNib3NjaWwiLAogICAgICAgICJodnMxIiwKICAgICAgICAiaHZzMiIsCiAgICAgICAgImh2czMiLAogICAgICAgICJoeXBvdCIsCiAgICAgICAgImkiLAogICAgICAgICJpaG9sZCIsCiAgICAgICAgImltYWdlY3JlYXRlIiwKICAgICAgICAiaW1hZ2VmcmVlIiwKICAgICAgICAiaW1hZ2VnZXRwaXhlbCIsCiAgICAgICAgImltYWdlbG9hZCIsCiAgICAgICAgImltYWdlc2F2ZSIsCiAgICAgICAgImltYWdlc2V0cGl4ZWwiLAogICAgICAgICJpbWFnZXNpemUiLAogICAgICAgICJpbiIsCiAgICAgICAgImluMzIiLAogICAgICAgICJpbmNoIiwKICAgICAgICAiaW5oIiwKICAgICAgICAiaW5pdCIsCiAgICAgICAgImluaXRjMTQiLAogICAgICAgICJpbml0YzIxIiwKICAgICAgICAiaW5pdGM3IiwKICAgICAgICAiaW5sZXRhIiwKICAgICAgICAiaW5sZXRmIiwKICAgICAgICAiaW5sZXRrIiwKICAgICAgICAiaW5sZXRraWQiLAogICAgICAgICJpbmxldHYiLAogICAgICAgICJpbm8iLAogICAgICAgICJpbnEiLAogICAgICAgICJpbnJnIiwKICAgICAgICAiaW5zIiwKICAgICAgICAiaW5zZ2xvYmFsIiwKICAgICAgICAiaW5zcmVtb3QiLAogICAgICAgICJpbnQiLAogICAgICAgICJpbnRlZyIsCiAgICAgICAgImludGVybGVhdmUiLAogICAgICAgICJpbnRlcnAiLAogICAgICAgICJpbnZhbHVlIiwKICAgICAgICAiaW54IiwKICAgICAgICAiaW56IiwKICAgICAgICAiamFja3RyYW5zcG9ydCIsCiAgICAgICAgImppdHRlciIsCiAgICAgICAgImppdHRlcjIiLAogICAgICAgICJqb3lzdGljayIsCiAgICAgICAgImpzcGxpbmUiLAogICAgICAgICJrIiwKICAgICAgICAibGFfaV9hZGRfbWMiLAogICAgICAgICJsYV9pX2FkZF9tciIsCiAgICAgICAgImxhX2lfYWRkX3ZjIiwKICAgICAgICAibGFfaV9hZGRfdnIiLAogICAgICAgICJsYV9pX2Fzc2lnbl9tYyIsCiAgICAgICAgImxhX2lfYXNzaWduX21yIiwKICAgICAgICAibGFfaV9hc3NpZ25fdCIsCiAgICAgICAgImxhX2lfYXNzaWduX3ZjIiwKICAgICAgICAibGFfaV9hc3NpZ25fdnIiLAogICAgICAgICJsYV9pX2Nvbmp1Z2F0ZV9tYyIsCiAgICAgICAgImxhX2lfY29uanVnYXRlX21yIiwKICAgICAgICAibGFfaV9jb25qdWdhdGVfdmMiLAogICAgICAgICJsYV9pX2Nvbmp1Z2F0ZV92ciIsCiAgICAgICAgImxhX2lfZGlzdGFuY2VfdmMiLAogICAgICAgICJsYV9pX2Rpc3RhbmNlX3ZyIiwKICAgICAgICAibGFfaV9kaXZpZGVfbWMiLAogICAgICAgICJsYV9pX2RpdmlkZV9tciIsCiAgICAgICAgImxhX2lfZGl2aWRlX3ZjIiwKICAgICAgICAibGFfaV9kaXZpZGVfdnIiLAogICAgICAgICJsYV9pX2RvdF9tYyIsCiAgICAgICAgImxhX2lfZG90X21jX3ZjIiwKICAgICAgICAibGFfaV9kb3RfbXIiLAogICAgICAgICJsYV9pX2RvdF9tcl92ciIsCiAgICAgICAgImxhX2lfZG90X3ZjIiwKICAgICAgICAibGFfaV9kb3RfdnIiLAogICAgICAgICJsYV9pX2dldF9tYyIsCiAgICAgICAgImxhX2lfZ2V0X21yIiwKICAgICAgICAibGFfaV9nZXRfdmMiLAogICAgICAgICJsYV9pX2dldF92ciIsCiAgICAgICAgImxhX2lfaW52ZXJ0X21jIiwKICAgICAgICAibGFfaV9pbnZlcnRfbXIiLAogICAgICAgICJsYV9pX2xvd2VyX3NvbHZlX21jIiwKICAgICAgICAibGFfaV9sb3dlcl9zb2x2ZV9tciIsCiAgICAgICAgImxhX2lfbHVfZGV0X21jIiwKICAgICAgICAibGFfaV9sdV9kZXRfbXIiLAogICAgICAgICJsYV9pX2x1X2ZhY3Rvcl9tYyIsCiAgICAgICAgImxhX2lfbHVfZmFjdG9yX21yIiwKICAgICAgICAibGFfaV9sdV9zb2x2ZV9tYyIsCiAgICAgICAgImxhX2lfbHVfc29sdmVfbXIiLAogICAgICAgICJsYV9pX21jX2NyZWF0ZSIsCiAgICAgICAgImxhX2lfbWNfc2V0IiwKICAgICAgICAibGFfaV9tcl9jcmVhdGUiLAogICAgICAgICJsYV9pX21yX3NldCIsCiAgICAgICAgImxhX2lfbXVsdGlwbHlfbWMiLAogICAgICAgICJsYV9pX211bHRpcGx5X21yIiwKICAgICAgICAibGFfaV9tdWx0aXBseV92YyIsCiAgICAgICAgImxhX2lfbXVsdGlwbHlfdnIiLAogICAgICAgICJsYV9pX25vcm0xX21jIiwKICAgICAgICAibGFfaV9ub3JtMV9tciIsCiAgICAgICAgImxhX2lfbm9ybTFfdmMiLAogICAgICAgICJsYV9pX25vcm0xX3ZyIiwKICAgICAgICAibGFfaV9ub3JtX2V1Y2xpZF9tYyIsCiAgICAgICAgImxhX2lfbm9ybV9ldWNsaWRfbXIiLAogICAgICAgICJsYV9pX25vcm1fZXVjbGlkX3ZjIiwKICAgICAgICAibGFfaV9ub3JtX2V1Y2xpZF92ciIsCiAgICAgICAgImxhX2lfbm9ybV9pbmZfbWMiLAogICAgICAgICJsYV9pX25vcm1faW5mX21yIiwKICAgICAgICAibGFfaV9ub3JtX2luZl92YyIsCiAgICAgICAgImxhX2lfbm9ybV9pbmZfdnIiLAogICAgICAgICJsYV9pX25vcm1fbWF4X21jIiwKICAgICAgICAibGFfaV9ub3JtX21heF9tciIsCiAgICAgICAgImxhX2lfcHJpbnRfbWMiLAogICAgICAgICJsYV9pX3ByaW50X21yIiwKICAgICAgICAibGFfaV9wcmludF92YyIsCiAgICAgICAgImxhX2lfcHJpbnRfdnIiLAogICAgICAgICJsYV9pX3FyX2VpZ2VuX21jIiwKICAgICAgICAibGFfaV9xcl9laWdlbl9tciIsCiAgICAgICAgImxhX2lfcXJfZmFjdG9yX21jIiwKICAgICAgICAibGFfaV9xcl9mYWN0b3JfbXIiLAogICAgICAgICJsYV9pX3FyX3N5bV9laWdlbl9tYyIsCiAgICAgICAgImxhX2lfcXJfc3ltX2VpZ2VuX21yIiwKICAgICAgICAibGFfaV9yYW5kb21fbWMiLAogICAgICAgICJsYV9pX3JhbmRvbV9tciIsCiAgICAgICAgImxhX2lfcmFuZG9tX3ZjIiwKICAgICAgICAibGFfaV9yYW5kb21fdnIiLAogICAgICAgICJsYV9pX3NpemVfbWMiLAogICAgICAgICJsYV9pX3NpemVfbXIiLAogICAgICAgICJsYV9pX3NpemVfdmMiLAogICAgICAgICJsYV9pX3NpemVfdnIiLAogICAgICAgICJsYV9pX3N1YnRyYWN0X21jIiwKICAgICAgICAibGFfaV9zdWJ0cmFjdF9tciIsCiAgICAgICAgImxhX2lfc3VidHJhY3RfdmMiLAogICAgICAgICJsYV9pX3N1YnRyYWN0X3ZyIiwKICAgICAgICAibGFfaV90X2Fzc2lnbiIsCiAgICAgICAgImxhX2lfdHJhY2VfbWMiLAogICAgICAgICJsYV9pX3RyYWNlX21yIiwKICAgICAgICAibGFfaV90cmFuc3Bvc2VfbWMiLAogICAgICAgICJsYV9pX3RyYW5zcG9zZV9tciIsCiAgICAgICAgImxhX2lfdXBwZXJfc29sdmVfbWMiLAogICAgICAgICJsYV9pX3VwcGVyX3NvbHZlX21yIiwKICAgICAgICAibGFfaV92Y19jcmVhdGUiLAogICAgICAgICJsYV9pX3ZjX3NldCIsCiAgICAgICAgImxhX2lfdnJfY3JlYXRlIiwKICAgICAgICAibGFfaV92cl9zZXQiLAogICAgICAgICJsYV9rX2FfYXNzaWduIiwKICAgICAgICAibGFfa19hZGRfbWMiLAogICAgICAgICJsYV9rX2FkZF9tciIsCiAgICAgICAgImxhX2tfYWRkX3ZjIiwKICAgICAgICAibGFfa19hZGRfdnIiLAogICAgICAgICJsYV9rX2Fzc2lnbl9hIiwKICAgICAgICAibGFfa19hc3NpZ25fZiIsCiAgICAgICAgImxhX2tfYXNzaWduX21jIiwKICAgICAgICAibGFfa19hc3NpZ25fbXIiLAogICAgICAgICJsYV9rX2Fzc2lnbl90IiwKICAgICAgICAibGFfa19hc3NpZ25fdmMiLAogICAgICAgICJsYV9rX2Fzc2lnbl92ciIsCiAgICAgICAgImxhX2tfY29uanVnYXRlX21jIiwKICAgICAgICAibGFfa19jb25qdWdhdGVfbXIiLAogICAgICAgICJsYV9rX2Nvbmp1Z2F0ZV92YyIsCiAgICAgICAgImxhX2tfY29uanVnYXRlX3ZyIiwKICAgICAgICAibGFfa19jdXJyZW50X2YiLAogICAgICAgICJsYV9rX2N1cnJlbnRfdnIiLAogICAgICAgICJsYV9rX2Rpc3RhbmNlX3ZjIiwKICAgICAgICAibGFfa19kaXN0YW5jZV92ciIsCiAgICAgICAgImxhX2tfZGl2aWRlX21jIiwKICAgICAgICAibGFfa19kaXZpZGVfbXIiLAogICAgICAgICJsYV9rX2RpdmlkZV92YyIsCiAgICAgICAgImxhX2tfZGl2aWRlX3ZyIiwKICAgICAgICAibGFfa19kb3RfbWMiLAogICAgICAgICJsYV9rX2RvdF9tY192YyIsCiAgICAgICAgImxhX2tfZG90X21yIiwKICAgICAgICAibGFfa19kb3RfbXJfdnIiLAogICAgICAgICJsYV9rX2RvdF92YyIsCiAgICAgICAgImxhX2tfZG90X3ZyIiwKICAgICAgICAibGFfa19mX2Fzc2lnbiIsCiAgICAgICAgImxhX2tfZ2V0X21jIiwKICAgICAgICAibGFfa19nZXRfbXIiLAogICAgICAgICJsYV9rX2dldF92YyIsCiAgICAgICAgImxhX2tfZ2V0X3ZyIiwKICAgICAgICAibGFfa19pbnZlcnRfbWMiLAogICAgICAgICJsYV9rX2ludmVydF9tciIsCiAgICAgICAgImxhX2tfbG93ZXJfc29sdmVfbWMiLAogICAgICAgICJsYV9rX2xvd2VyX3NvbHZlX21yIiwKICAgICAgICAibGFfa19sdV9kZXRfbWMiLAogICAgICAgICJsYV9rX2x1X2RldF9tciIsCiAgICAgICAgImxhX2tfbHVfZmFjdG9yX21jIiwKICAgICAgICAibGFfa19sdV9mYWN0b3JfbXIiLAogICAgICAgICJsYV9rX2x1X3NvbHZlX21jIiwKICAgICAgICAibGFfa19sdV9zb2x2ZV9tciIsCiAgICAgICAgImxhX2tfbWNfc2V0IiwKICAgICAgICAibGFfa19tcl9zZXQiLAogICAgICAgICJsYV9rX211bHRpcGx5X21jIiwKICAgICAgICAibGFfa19tdWx0aXBseV9tciIsCiAgICAgICAgImxhX2tfbXVsdGlwbHlfdmMiLAogICAgICAgICJsYV9rX211bHRpcGx5X3ZyIiwKICAgICAgICAibGFfa19ub3JtMV9tYyIsCiAgICAgICAgImxhX2tfbm9ybTFfbXIiLAogICAgICAgICJsYV9rX25vcm0xX3ZjIiwKICAgICAgICAibGFfa19ub3JtMV92ciIsCiAgICAgICAgImxhX2tfbm9ybV9ldWNsaWRfbWMiLAogICAgICAgICJsYV9rX25vcm1fZXVjbGlkX21yIiwKICAgICAgICAibGFfa19ub3JtX2V1Y2xpZF92YyIsCiAgICAgICAgImxhX2tfbm9ybV9ldWNsaWRfdnIiLAogICAgICAgICJsYV9rX25vcm1faW5mX21jIiwKICAgICAgICAibGFfa19ub3JtX2luZl9tciIsCiAgICAgICAgImxhX2tfbm9ybV9pbmZfdmMiLAogICAgICAgICJsYV9rX25vcm1faW5mX3ZyIiwKICAgICAgICAibGFfa19ub3JtX21heF9tYyIsCiAgICAgICAgImxhX2tfbm9ybV9tYXhfbXIiLAogICAgICAgICJsYV9rX3FyX2VpZ2VuX21jIiwKICAgICAgICAibGFfa19xcl9laWdlbl9tciIsCiAgICAgICAgImxhX2tfcXJfZmFjdG9yX21jIiwKICAgICAgICAibGFfa19xcl9mYWN0b3JfbXIiLAogICAgICAgICJsYV9rX3FyX3N5bV9laWdlbl9tYyIsCiAgICAgICAgImxhX2tfcXJfc3ltX2VpZ2VuX21yIiwKICAgICAgICAibGFfa19yYW5kb21fbWMiLAogICAgICAgICJsYV9rX3JhbmRvbV9tciIsCiAgICAgICAgImxhX2tfcmFuZG9tX3ZjIiwKICAgICAgICAibGFfa19yYW5kb21fdnIiLAogICAgICAgICJsYV9rX3N1YnRyYWN0X21jIiwKICAgICAgICAibGFfa19zdWJ0cmFjdF9tciIsCiAgICAgICAgImxhX2tfc3VidHJhY3RfdmMiLAogICAgICAgICJsYV9rX3N1YnRyYWN0X3ZyIiwKICAgICAgICAibGFfa190X2Fzc2lnbiIsCiAgICAgICAgImxhX2tfdHJhY2VfbWMiLAogICAgICAgICJsYV9rX3RyYWNlX21yIiwKICAgICAgICAibGFfa191cHBlcl9zb2x2ZV9tYyIsCiAgICAgICAgImxhX2tfdXBwZXJfc29sdmVfbXIiLAogICAgICAgICJsYV9rX3ZjX3NldCIsCiAgICAgICAgImxhX2tfdnJfc2V0IiwKICAgICAgICAibGVuYXJyYXkiLAogICAgICAgICJsZm8iLAogICAgICAgICJsaW1pdCIsCiAgICAgICAgImxpbWl0MSIsCiAgICAgICAgImxpbmNvcyIsCiAgICAgICAgImxpbmUiLAogICAgICAgICJsaW5lbiIsCiAgICAgICAgImxpbmVuciIsCiAgICAgICAgImxpbmV0byIsCiAgICAgICAgImxpbmtfYmVhdF9mb3JjZSIsCiAgICAgICAgImxpbmtfYmVhdF9nZXQiLAogICAgICAgICJsaW5rX2JlYXRfcmVxdWVzdCIsCiAgICAgICAgImxpbmtfY3JlYXRlIiwKICAgICAgICAibGlua19lbmFibGUiLAogICAgICAgICJsaW5rX2lzX2VuYWJsZWQiLAogICAgICAgICJsaW5rX21ldHJvIiwKICAgICAgICAibGlua19wZWVycyIsCiAgICAgICAgImxpbmtfdGVtcG9fZ2V0IiwKICAgICAgICAibGlua190ZW1wb19zZXQiLAogICAgICAgICJsaW5saW4iLAogICAgICAgICJsaW5yYW5kIiwKICAgICAgICAibGluc2VnIiwKICAgICAgICAibGluc2VnYiIsCiAgICAgICAgImxpbnNlZ3IiLAogICAgICAgICJsaXZlY29udiIsCiAgICAgICAgImxvY3NlbmQiLAogICAgICAgICJsb2NzaWciLAogICAgICAgICJsb2ciLAogICAgICAgICJsb2cxMCIsCiAgICAgICAgImxvZzIiLAogICAgICAgICJsb2didHdvIiwKICAgICAgICAibG9nY3VydmUiLAogICAgICAgICJsb29wc2VnIiwKICAgICAgICAibG9vcHNlZ3AiLAogICAgICAgICJsb29wdHNlZyIsCiAgICAgICAgImxvb3B4c2VnIiwKICAgICAgICAibG9yZW56IiwKICAgICAgICAibG9zY2lsIiwKICAgICAgICAibG9zY2lsMyIsCiAgICAgICAgImxvc2NpbDNwaHMiLAogICAgICAgICJsb3NjaWxwaHMiLAogICAgICAgICJsb3NjaWx4IiwKICAgICAgICAibG93cGFzczIiLAogICAgICAgICJsb3dyZXMiLAogICAgICAgICJsb3dyZXN4IiwKICAgICAgICAibHBmMTgiLAogICAgICAgICJscGZvcm0iLAogICAgICAgICJscGZyZXNvbiIsCiAgICAgICAgImxwaGFzb3IiLAogICAgICAgICJscGludGVycCIsCiAgICAgICAgImxwb3NjaWwiLAogICAgICAgICJscG9zY2lsMyIsCiAgICAgICAgImxwb3NjaWxhIiwKICAgICAgICAibHBvc2NpbHNhIiwKICAgICAgICAibHBvc2NpbHNhMiIsCiAgICAgICAgImxwcmVhZCIsCiAgICAgICAgImxwcmVzb24iLAogICAgICAgICJscHNob2xkIiwKICAgICAgICAibHBzaG9sZHAiLAogICAgICAgICJscHNsb3QiLAogICAgICAgICJsdWFfZXhlYyIsCiAgICAgICAgImx1YV9pYW9wY2FsbCIsCiAgICAgICAgImx1YV9pYW9wY2FsbF9vZmYiLAogICAgICAgICJsdWFfaWtvcGNhbGwiLAogICAgICAgICJsdWFfaWtvcGNhbGxfb2ZmIiwKICAgICAgICAibHVhX2lvcGNhbGwiLAogICAgICAgICJsdWFfaW9wY2FsbF9vZmYiLAogICAgICAgICJsdWFfb3BkZWYiLAogICAgICAgICJtYWMiLAogICAgICAgICJtYWNhIiwKICAgICAgICAibWFkc3IiLAogICAgICAgICJtYWdzIiwKICAgICAgICAibWFuZGVsIiwKICAgICAgICAibWFuZG9sIiwKICAgICAgICAibWFwYXJyYXkiLAogICAgICAgICJtYXBhcnJheV9pIiwKICAgICAgICAibWFyaW1iYSIsCiAgICAgICAgIm1hc3NpZ24iLAogICAgICAgICJtYXgiLAogICAgICAgICJtYXhfayIsCiAgICAgICAgIm1heGFicyIsCiAgICAgICAgIm1heGFic2FjY3VtIiwKICAgICAgICAibWF4YWNjdW0iLAogICAgICAgICJtYXhhbGxvYyIsCiAgICAgICAgIm1heGFycmF5IiwKICAgICAgICAibWNsb2NrIiwKICAgICAgICAibWRlbGF5IiwKICAgICAgICAibWVkaWFuIiwKICAgICAgICAibWVkaWFuayIsCiAgICAgICAgIm1ldHJvIiwKICAgICAgICAibWZiIiwKICAgICAgICAibWlkZ2xvYmFsIiwKICAgICAgICAibWlkaWFycCIsCiAgICAgICAgIm1pZGljMTQiLAogICAgICAgICJtaWRpYzIxIiwKICAgICAgICAibWlkaWM3IiwKICAgICAgICAibWlkaWNoYW5uZWxhZnRlcnRvdWNoIiwKICAgICAgICAibWlkaWNobiIsCiAgICAgICAgIm1pZGljb250cm9sY2hhbmdlIiwKICAgICAgICAibWlkaWN0cmwiLAogICAgICAgICJtaWRpZGVmYXVsdCIsCiAgICAgICAgIm1pZGlmaWxlc3RhdHVzIiwKICAgICAgICAibWlkaWluIiwKICAgICAgICAibWlkaW5vdGVvZmYiLAogICAgICAgICJtaWRpbm90ZW9uY3BzIiwKICAgICAgICAibWlkaW5vdGVvbmtleSIsCiAgICAgICAgIm1pZGlub3Rlb25vY3QiLAogICAgICAgICJtaWRpbm90ZW9ucGNoIiwKICAgICAgICAibWlkaW9uIiwKICAgICAgICAibWlkaW9uMiIsCiAgICAgICAgIm1pZGlvdXQiLAogICAgICAgICJtaWRpb3V0X2kiLAogICAgICAgICJtaWRpcGdtIiwKICAgICAgICAibWlkaXBpdGNoYmVuZCIsCiAgICAgICAgIm1pZGlwb2x5YWZ0ZXJ0b3VjaCIsCiAgICAgICAgIm1pZGlwcm9ncmFtY2hhbmdlIiwKICAgICAgICAibWlkaXRlbXBvIiwKICAgICAgICAibWlkcmVtb3QiLAogICAgICAgICJtaW4iLAogICAgICAgICJtaW5hYnMiLAogICAgICAgICJtaW5hYnNhY2N1bSIsCiAgICAgICAgIm1pbmFjY3VtIiwKICAgICAgICAibWluYXJyYXkiLAogICAgICAgICJtaW5jZXIiLAogICAgICAgICJtaXJyb3IiLAogICAgICAgICJtb2RlIiwKICAgICAgICAibW9kbWF0cml4IiwKICAgICAgICAibW9uaXRvciIsCiAgICAgICAgIm1vb2ciLAogICAgICAgICJtb29nbGFkZGVyIiwKICAgICAgICAibW9vZ2xhZGRlcjIiLAogICAgICAgICJtb29ndmNmIiwKICAgICAgICAibW9vZ3ZjZjIiLAogICAgICAgICJtb3NjaWwiLAogICAgICAgICJtcDNiaXRyYXRlIiwKICAgICAgICAibXAzaW4iLAogICAgICAgICJtcDNsZW4iLAogICAgICAgICJtcDNuY2hubHMiLAogICAgICAgICJtcDNzY2FsIiwKICAgICAgICAibXAzc3IiLAogICAgICAgICJtcHVsc2UiLAogICAgICAgICJtcnRtc2ciLAogICAgICAgICJtdG9mIiwKICAgICAgICAibXRvbiIsCiAgICAgICAgIm11bHRpdGFwIiwKICAgICAgICAibXV0ZSIsCiAgICAgICAgIm12Y2hwZiIsCiAgICAgICAgIm12Y2xwZjEiLAogICAgICAgICJtdmNscGYyIiwKICAgICAgICAibXZjbHBmMyIsCiAgICAgICAgIm12Y2xwZjQiLAogICAgICAgICJteGFkc3IiLAogICAgICAgICJuY2hubHNfaHciLAogICAgICAgICJuZXN0ZWRhcCIsCiAgICAgICAgIm5sYWxwIiwKICAgICAgICAibmxmaWx0IiwKICAgICAgICAibmxmaWx0MiIsCiAgICAgICAgIm5vaXNlIiwKICAgICAgICAibm90ZW9mZiIsCiAgICAgICAgIm5vdGVvbiIsCiAgICAgICAgIm5vdGVvbmR1ciIsCiAgICAgICAgIm5vdGVvbmR1cjIiLAogICAgICAgICJub3RudW0iLAogICAgICAgICJucmV2ZXJiIiwKICAgICAgICAibnJwbiIsCiAgICAgICAgIm5zYW1wIiwKICAgICAgICAibnN0YW5jZSIsCiAgICAgICAgIm5zdHJudW0iLAogICAgICAgICJudG9tIiwKICAgICAgICAibnRycG9sIiwKICAgICAgICAibnh0cG93MiIsCiAgICAgICAgIm9jdGF2ZSIsCiAgICAgICAgIm9jdGNwcyIsCiAgICAgICAgIm9jdG1pZGkiLAogICAgICAgICJvY3RtaWRpYiIsCiAgICAgICAgIm9jdG1pZGlubiIsCiAgICAgICAgIm9jdHBjaCIsCiAgICAgICAgIm9sYWJ1ZmZlciIsCiAgICAgICAgIm9zY2JuayIsCiAgICAgICAgIm9zY2lsIiwKICAgICAgICAib3NjaWwxIiwKICAgICAgICAib3NjaWwxaSIsCiAgICAgICAgIm9zY2lsMyIsCiAgICAgICAgIm9zY2lsaSIsCiAgICAgICAgIm9zY2lsaWt0IiwKICAgICAgICAib3NjaWxpa3RwIiwKICAgICAgICAib3NjaWxpa3RzIiwKICAgICAgICAib3NjaWxuIiwKICAgICAgICAib3NjaWxzIiwKICAgICAgICAib3NjaWx4IiwKICAgICAgICAib3V0IiwKICAgICAgICAib3V0MzIiLAogICAgICAgICJvdXRjIiwKICAgICAgICAib3V0Y2giLAogICAgICAgICJvdXRoIiwKICAgICAgICAib3V0aWF0IiwKICAgICAgICAib3V0aWMiLAogICAgICAgICJvdXRpYzE0IiwKICAgICAgICAib3V0aXBhdCIsCiAgICAgICAgIm91dGlwYiIsCiAgICAgICAgIm91dGlwYyIsCiAgICAgICAgIm91dGthdCIsCiAgICAgICAgIm91dGtjIiwKICAgICAgICAib3V0a2MxNCIsCiAgICAgICAgIm91dGtwYXQiLAogICAgICAgICJvdXRrcGIiLAogICAgICAgICJvdXRrcGMiLAogICAgICAgICJvdXRsZXRhIiwKICAgICAgICAib3V0bGV0ZiIsCiAgICAgICAgIm91dGxldGsiLAogICAgICAgICJvdXRsZXRraWQiLAogICAgICAgICJvdXRsZXR2IiwKICAgICAgICAib3V0byIsCiAgICAgICAgIm91dHEiLAogICAgICAgICJvdXRxMSIsCiAgICAgICAgIm91dHEyIiwKICAgICAgICAib3V0cTMiLAogICAgICAgICJvdXRxNCIsCiAgICAgICAgIm91dHJnIiwKICAgICAgICAib3V0cyIsCiAgICAgICAgIm91dHMxIiwKICAgICAgICAib3V0czIiLAogICAgICAgICJvdXR2YWx1ZSIsCiAgICAgICAgIm91dHgiLAogICAgICAgICJvdXR6IiwKICAgICAgICAicCIsCiAgICAgICAgInA1Z2Nvbm5lY3QiLAogICAgICAgICJwNWdkYXRhIiwKICAgICAgICAicGFuIiwKICAgICAgICAicGFuMiIsCiAgICAgICAgInBhcmVxIiwKICAgICAgICAicGFydDJ0eHQiLAogICAgICAgICJwYXJ0aWFscyIsCiAgICAgICAgInBhcnRpa2tlbCIsCiAgICAgICAgInBhcnRpa2tlbGdldCIsCiAgICAgICAgInBhcnRpa2tlbHNldCIsCiAgICAgICAgInBhcnRpa2tlbHN5bmMiLAogICAgICAgICJwYXNzaWduIiwKICAgICAgICAicGF1bHN0cmV0Y2giLAogICAgICAgICJwY2F1Y2h5IiwKICAgICAgICAicGNoYmVuZCIsCiAgICAgICAgInBjaG1pZGkiLAogICAgICAgICJwY2htaWRpYiIsCiAgICAgICAgInBjaG1pZGlubiIsCiAgICAgICAgInBjaG9jdCIsCiAgICAgICAgInBjaHRvbSIsCiAgICAgICAgInBjb252b2x2ZSIsCiAgICAgICAgInBjb3VudCIsCiAgICAgICAgInBkY2xpcCIsCiAgICAgICAgInBkaGFsZiIsCiAgICAgICAgInBkaGFsZnkiLAogICAgICAgICJwZWFrIiwKICAgICAgICAicGdtYXNzaWduIiwKICAgICAgICAicGdtY2huIiwKICAgICAgICAicGhhc2VyMSIsCiAgICAgICAgInBoYXNlcjIiLAogICAgICAgICJwaGFzb3IiLAogICAgICAgICJwaGFzb3JibmsiLAogICAgICAgICJwaHMiLAogICAgICAgICJwaW5kZXgiLAogICAgICAgICJwaW5rZXIiLAogICAgICAgICJwaW5raXNoIiwKICAgICAgICAicGl0Y2giLAogICAgICAgICJwaXRjaGFjIiwKICAgICAgICAicGl0Y2hhbWRmIiwKICAgICAgICAicGxhbmV0IiwKICAgICAgICAicGxhdGVyZXYiLAogICAgICAgICJwbGx0cmFjayIsCiAgICAgICAgInBsdWNrIiwKICAgICAgICAicG9pc3NvbiIsCiAgICAgICAgInBvbDJyZWN0IiwKICAgICAgICAicG9seWFmdCIsCiAgICAgICAgInBvbHlub21pYWwiLAogICAgICAgICJwb3J0IiwKICAgICAgICAicG9ydGsiLAogICAgICAgICJwb3NjaWwiLAogICAgICAgICJwb3NjaWwzIiwKICAgICAgICAicG93IiwKICAgICAgICAicG93ZXJzaGFwZSIsCiAgICAgICAgInBvd29mdHdvIiwKICAgICAgICAicG93cyIsCiAgICAgICAgInByZWFsbG9jIiwKICAgICAgICAicHJlcGlhbm8iLAogICAgICAgICJwcmludCIsCiAgICAgICAgInByaW50X3R5cGUiLAogICAgICAgICJwcmludGFycmF5IiwKICAgICAgICAicHJpbnRmIiwKICAgICAgICAicHJpbnRmX2kiLAogICAgICAgICJwcmludGsiLAogICAgICAgICJwcmludGsyIiwKICAgICAgICAicHJpbnRrcyIsCiAgICAgICAgInByaW50a3MyIiwKICAgICAgICAicHJpbnRzIiwKICAgICAgICAicHJvZHVjdCIsCiAgICAgICAgInBzZXQiLAogICAgICAgICJwdGFibGUiLAogICAgICAgICJwdGFibGUzIiwKICAgICAgICAicHRhYmxlaSIsCiAgICAgICAgInB0YWJsZWl3IiwKICAgICAgICAicHRhYmxldyIsCiAgICAgICAgInB0cmFjayIsCiAgICAgICAgInB1dHMiLAogICAgICAgICJwdmFkZCIsCiAgICAgICAgInB2YnVmcmVhZCIsCiAgICAgICAgInB2Y3Jvc3MiLAogICAgICAgICJwdmludGVycCIsCiAgICAgICAgInB2b2MiLAogICAgICAgICJwdnJlYWQiLAogICAgICAgICJwdnMyYXJyYXkiLAogICAgICAgICJwdnMydGFiIiwKICAgICAgICAicHZzYWRzeW4iLAogICAgICAgICJwdnNhbmFsIiwKICAgICAgICAicHZzYXJwIiwKICAgICAgICAicHZzYmFuZHAiLAogICAgICAgICJwdnNiYW5kciIsCiAgICAgICAgInB2c2JpbiIsCiAgICAgICAgInB2c2JsdXIiLAogICAgICAgICJwdnNidWZmZXIiLAogICAgICAgICJwdnNidWZyZWFkIiwKICAgICAgICAicHZzYnVmcmVhZDIiLAogICAgICAgICJwdnNjYWxlIiwKICAgICAgICAicHZzY2VudCIsCiAgICAgICAgInB2c2NlcHMiLAogICAgICAgICJwdnNjcm9zcyIsCiAgICAgICAgInB2c2RlbWl4IiwKICAgICAgICAicHZzZGlza2luIiwKICAgICAgICAicHZzZGlzcCIsCiAgICAgICAgInB2c2VudmZ0dyIsCiAgICAgICAgInB2c2ZpbHRlciIsCiAgICAgICAgInB2c2ZyZWFkIiwKICAgICAgICAicHZzZnJlZXplIiwKICAgICAgICAicHZzZnJvbWFycmF5IiwKICAgICAgICAicHZzZnRyIiwKICAgICAgICAicHZzZnR3IiwKICAgICAgICAicHZzZndyaXRlIiwKICAgICAgICAicHZzZ2FpbiIsCiAgICAgICAgInB2c2hpZnQiLAogICAgICAgICJwdnNpZmQiLAogICAgICAgICJwdnNpbiIsCiAgICAgICAgInB2c2luZm8iLAogICAgICAgICJwdnNpbml0IiwKICAgICAgICAicHZzbG9jayIsCiAgICAgICAgInB2c21hc2thIiwKICAgICAgICAicHZzbWl4IiwKICAgICAgICAicHZzbW9vdGgiLAogICAgICAgICJwdnNtb3JwaCIsCiAgICAgICAgInB2c29zYyIsCiAgICAgICAgInB2c291dCIsCiAgICAgICAgInB2c3BpdGNoIiwKICAgICAgICAicHZzdGFuYWwiLAogICAgICAgICJwdnN0ZW5jaWwiLAogICAgICAgICJwdnN0cmFjZSIsCiAgICAgICAgInB2c3ZvYyIsCiAgICAgICAgInB2c3dhcnAiLAogICAgICAgICJwdnN5bnRoIiwKICAgICAgICAicHdkIiwKICAgICAgICAicHlhc3NpZ24iLAogICAgICAgICJweWFzc2lnbmkiLAogICAgICAgICJweWFzc2lnbnQiLAogICAgICAgICJweWNhbGwiLAogICAgICAgICJweWNhbGwxIiwKICAgICAgICAicHljYWxsMWkiLAogICAgICAgICJweWNhbGwxdCIsCiAgICAgICAgInB5Y2FsbDIiLAogICAgICAgICJweWNhbGwyaSIsCiAgICAgICAgInB5Y2FsbDJ0IiwKICAgICAgICAicHljYWxsMyIsCiAgICAgICAgInB5Y2FsbDNpIiwKICAgICAgICAicHljYWxsM3QiLAogICAgICAgICJweWNhbGw0IiwKICAgICAgICAicHljYWxsNGkiLAogICAgICAgICJweWNhbGw0dCIsCiAgICAgICAgInB5Y2FsbDUiLAogICAgICAgICJweWNhbGw1aSIsCiAgICAgICAgInB5Y2FsbDV0IiwKICAgICAgICAicHljYWxsNiIsCiAgICAgICAgInB5Y2FsbDZpIiwKICAgICAgICAicHljYWxsNnQiLAogICAgICAgICJweWNhbGw3IiwKICAgICAgICAicHljYWxsN2kiLAogICAgICAgICJweWNhbGw3dCIsCiAgICAgICAgInB5Y2FsbDgiLAogICAgICAgICJweWNhbGw4aSIsCiAgICAgICAgInB5Y2FsbDh0IiwKICAgICAgICAicHljYWxsaSIsCiAgICAgICAgInB5Y2FsbG4iLAogICAgICAgICJweWNhbGxuaSIsCiAgICAgICAgInB5Y2FsbHQiLAogICAgICAgICJweWV2YWwiLAogICAgICAgICJweWV2YWxpIiwKICAgICAgICAicHlldmFsdCIsCiAgICAgICAgInB5ZXhlYyIsCiAgICAgICAgInB5ZXhlY2kiLAogICAgICAgICJweWV4ZWN0IiwKICAgICAgICAicHlpbml0IiwKICAgICAgICAicHlsYXNzaWduIiwKICAgICAgICAicHlsYXNzaWduaSIsCiAgICAgICAgInB5bGFzc2lnbnQiLAogICAgICAgICJweWxjYWxsIiwKICAgICAgICAicHlsY2FsbDEiLAogICAgICAgICJweWxjYWxsMWkiLAogICAgICAgICJweWxjYWxsMXQiLAogICAgICAgICJweWxjYWxsMiIsCiAgICAgICAgInB5bGNhbGwyaSIsCiAgICAgICAgInB5bGNhbGwydCIsCiAgICAgICAgInB5bGNhbGwzIiwKICAgICAgICAicHlsY2FsbDNpIiwKICAgICAgICAicHlsY2FsbDN0IiwKICAgICAgICAicHlsY2FsbDQiLAogICAgICAgICJweWxjYWxsNGkiLAogICAgICAgICJweWxjYWxsNHQiLAogICAgICAgICJweWxjYWxsNSIsCiAgICAgICAgInB5bGNhbGw1aSIsCiAgICAgICAgInB5bGNhbGw1dCIsCiAgICAgICAgInB5bGNhbGw2IiwKICAgICAgICAicHlsY2FsbDZpIiwKICAgICAgICAicHlsY2FsbDZ0IiwKICAgICAgICAicHlsY2FsbDciLAogICAgICAgICJweWxjYWxsN2kiLAogICAgICAgICJweWxjYWxsN3QiLAogICAgICAgICJweWxjYWxsOCIsCiAgICAgICAgInB5bGNhbGw4aSIsCiAgICAgICAgInB5bGNhbGw4dCIsCiAgICAgICAgInB5bGNhbGxpIiwKICAgICAgICAicHlsY2FsbG4iLAogICAgICAgICJweWxjYWxsbmkiLAogICAgICAgICJweWxjYWxsdCIsCiAgICAgICAgInB5bGV2YWwiLAogICAgICAgICJweWxldmFsaSIsCiAgICAgICAgInB5bGV2YWx0IiwKICAgICAgICAicHlsZXhlYyIsCiAgICAgICAgInB5bGV4ZWNpIiwKICAgICAgICAicHlsZXhlY3QiLAogICAgICAgICJweWxydW4iLAogICAgICAgICJweWxydW5pIiwKICAgICAgICAicHlscnVudCIsCiAgICAgICAgInB5cnVuIiwKICAgICAgICAicHlydW5pIiwKICAgICAgICAicHlydW50IiwKICAgICAgICAicWluZiIsCiAgICAgICAgInFuYW4iLAogICAgICAgICJyMmMiLAogICAgICAgICJyYW5kIiwKICAgICAgICAicmFuZGgiLAogICAgICAgICJyYW5kaSIsCiAgICAgICAgInJhbmRvbSIsCiAgICAgICAgInJhbmRvbWgiLAogICAgICAgICJyYW5kb21pIiwKICAgICAgICAicmJqZXEiLAogICAgICAgICJyZWFkY2xvY2siLAogICAgICAgICJyZWFkZiIsCiAgICAgICAgInJlYWRmaSIsCiAgICAgICAgInJlYWRrIiwKICAgICAgICAicmVhZGsyIiwKICAgICAgICAicmVhZGszIiwKICAgICAgICAicmVhZGs0IiwKICAgICAgICAicmVhZGtzIiwKICAgICAgICAicmVhZHNjb3JlIiwKICAgICAgICAicmVhZHNjcmF0Y2giLAogICAgICAgICJyZWN0MnBvbCIsCiAgICAgICAgInJlbGVhc2UiLAogICAgICAgICJyZW1vdGVwb3J0IiwKICAgICAgICAicmVtb3ZlIiwKICAgICAgICAicmVwbHVjayIsCiAgICAgICAgInJlc2hhcGVhcnJheSIsCiAgICAgICAgInJlc29uIiwKICAgICAgICAicmVzb25rIiwKICAgICAgICAicmVzb25yIiwKICAgICAgICAicmVzb254IiwKICAgICAgICAicmVzb254ayIsCiAgICAgICAgInJlc29ueSIsCiAgICAgICAgInJlc29ueiIsCiAgICAgICAgInJlc3luIiwKICAgICAgICAicmV2ZXJiIiwKICAgICAgICAicmV2ZXJiMiIsCiAgICAgICAgInJldmVyYnNjIiwKICAgICAgICAicmV3aW5kc2NvcmUiLAogICAgICAgICJyZXp6eSIsCiAgICAgICAgInJmZnQiLAogICAgICAgICJyaWZmdCIsCiAgICAgICAgInJtcyIsCiAgICAgICAgInJuZCIsCiAgICAgICAgInJuZDMxIiwKICAgICAgICAicm91bmQiLAogICAgICAgICJyc3BsaW5lIiwKICAgICAgICAicnRjbG9jayIsCiAgICAgICAgInMxNmIxNCIsCiAgICAgICAgInMzMmIxNCIsCiAgICAgICAgInNhbXBob2xkIiwKICAgICAgICAic2FuZHBhcGVyIiwKICAgICAgICAic2NfbGFnIiwKICAgICAgICAic2NfbGFndWQiLAogICAgICAgICJzY19waGFzb3IiLAogICAgICAgICJzY190cmlnIiwKICAgICAgICAic2NhbGUiLAogICAgICAgICJzY2FsZWFycmF5IiwKICAgICAgICAic2NhbmhhbW1lciIsCiAgICAgICAgInNjYW5zIiwKICAgICAgICAic2NhbnRhYmxlIiwKICAgICAgICAic2NhbnUiLAogICAgICAgICJzY2hlZGt3aGVuIiwKICAgICAgICAic2NoZWRrd2hlbm5hbWVkIiwKICAgICAgICAic2NoZWR1bGUiLAogICAgICAgICJzY2hlZHdoZW4iLAogICAgICAgICJzY29yZWxpbmUiLAogICAgICAgICJzY29yZWxpbmVfaSIsCiAgICAgICAgInNlZWQiLAogICAgICAgICJzZWtlcmUiLAogICAgICAgICJzZWxlY3QiLAogICAgICAgICJzZW1pdG9uZSIsCiAgICAgICAgInNlbnNlIiwKICAgICAgICAic2Vuc2VrZXkiLAogICAgICAgICJzZXF0aW1lIiwKICAgICAgICAic2VxdGltZTIiLAogICAgICAgICJzZXJpYWxCZWdpbiIsCiAgICAgICAgInNlcmlhbEVuZCIsCiAgICAgICAgInNlcmlhbEZsdXNoIiwKICAgICAgICAic2VyaWFsUHJpbnQiLAogICAgICAgICJzZXJpYWxSZWFkIiwKICAgICAgICAic2VyaWFsV3JpdGUiLAogICAgICAgICJzZXJpYWxXcml0ZV9pIiwKICAgICAgICAic2V0Y29sIiwKICAgICAgICAic2V0Y3RybCIsCiAgICAgICAgInNldGtzbXBzIiwKICAgICAgICAic2V0cm93IiwKICAgICAgICAic2V0c2NvcmVwb3MiLAogICAgICAgICJzZmlsaXN0IiwKICAgICAgICAic2ZpbnN0ciIsCiAgICAgICAgInNmaW5zdHIzIiwKICAgICAgICAic2ZpbnN0cjNtIiwKICAgICAgICAic2ZpbnN0cm0iLAogICAgICAgICJzZmxvYWQiLAogICAgICAgICJzZmxvb3BlciIsCiAgICAgICAgInNmcGFzc2lnbiIsCiAgICAgICAgInNmcGxheSIsCiAgICAgICAgInNmcGxheTMiLAogICAgICAgICJzZnBsYXkzbSIsCiAgICAgICAgInNmcGxheW0iLAogICAgICAgICJzZnBsaXN0IiwKICAgICAgICAic2ZwcmVzZXQiLAogICAgICAgICJzaGFrZXIiLAogICAgICAgICJzaGlmdGluIiwKICAgICAgICAic2hpZnRvdXQiLAogICAgICAgICJzaWdudW0iLAogICAgICAgICJzaW4iLAogICAgICAgICJzaW5oIiwKICAgICAgICAic2luaW52IiwKICAgICAgICAic2luc3luIiwKICAgICAgICAic2xlaWdoYmVsbHMiLAogICAgICAgICJzbGljZWFycmF5IiwKICAgICAgICAic2xpY2VhcnJheV9pIiwKICAgICAgICAic2xpZGVyMTYiLAogICAgICAgICJzbGlkZXIxNmYiLAogICAgICAgICJzbGlkZXIxNnRhYmxlIiwKICAgICAgICAic2xpZGVyMTZ0YWJsZWYiLAogICAgICAgICJzbGlkZXIzMiIsCiAgICAgICAgInNsaWRlcjMyZiIsCiAgICAgICAgInNsaWRlcjMydGFibGUiLAogICAgICAgICJzbGlkZXIzMnRhYmxlZiIsCiAgICAgICAgInNsaWRlcjY0IiwKICAgICAgICAic2xpZGVyNjRmIiwKICAgICAgICAic2xpZGVyNjR0YWJsZSIsCiAgICAgICAgInNsaWRlcjY0dGFibGVmIiwKICAgICAgICAic2xpZGVyOCIsCiAgICAgICAgInNsaWRlcjhmIiwKICAgICAgICAic2xpZGVyOHRhYmxlIiwKICAgICAgICAic2xpZGVyOHRhYmxlZiIsCiAgICAgICAgInNsaWRlckthd2FpIiwKICAgICAgICAic25kbG9vcCIsCiAgICAgICAgInNuZHdhcnAiLAogICAgICAgICJzbmR3YXJwc3QiLAogICAgICAgICJzb2NrcmVjdiIsCiAgICAgICAgInNvY2tyZWN2cyIsCiAgICAgICAgInNvY2tzZW5kIiwKICAgICAgICAic29ja3NlbmRzIiwKICAgICAgICAic29ydGEiLAogICAgICAgICJzb3J0ZCIsCiAgICAgICAgInNvdW5kaW4iLAogICAgICAgICJzcGFjZSIsCiAgICAgICAgInNwYXQzZCIsCiAgICAgICAgInNwYXQzZGkiLAogICAgICAgICJzcGF0M2R0IiwKICAgICAgICAic3BkaXN0IiwKICAgICAgICAic3BsaXRyaWciLAogICAgICAgICJzcHJpbnRmIiwKICAgICAgICAic3ByaW50ZmsiLAogICAgICAgICJzcHNlbmQiLAogICAgICAgICJzcXJ0IiwKICAgICAgICAic3F1aW5ld2F2ZSIsCiAgICAgICAgInN0YXRldmFyIiwKICAgICAgICAic3RpeCIsCiAgICAgICAgInN0cmNhdCIsCiAgICAgICAgInN0cmNhdGsiLAogICAgICAgICJzdHJjaGFyIiwKICAgICAgICAic3RyY2hhcmsiLAogICAgICAgICJzdHJjbXAiLAogICAgICAgICJzdHJjbXBrIiwKICAgICAgICAic3RyY3B5IiwKICAgICAgICAic3RyY3B5ayIsCiAgICAgICAgInN0cmVjdiIsCiAgICAgICAgInN0cmVzb24iLAogICAgICAgICJzdHJmcm9tdXJsIiwKICAgICAgICAic3RyZ2V0IiwKICAgICAgICAic3RyaW5kZXgiLAogICAgICAgICJzdHJpbmRleGsiLAogICAgICAgICJzdHJsZW4iLAogICAgICAgICJzdHJsZW5rIiwKICAgICAgICAic3RybG93ZXIiLAogICAgICAgICJzdHJsb3dlcmsiLAogICAgICAgICJzdHJyaW5kZXgiLAogICAgICAgICJzdHJyaW5kZXhrIiwKICAgICAgICAic3Ryc2V0IiwKICAgICAgICAic3Ryc3ViIiwKICAgICAgICAic3Ryc3ViayIsCiAgICAgICAgInN0cnRvZCIsCiAgICAgICAgInN0cnRvZGsiLAogICAgICAgICJzdHJ0b2wiLAogICAgICAgICJzdHJ0b2xrIiwKICAgICAgICAic3RydXBwZXIiLAogICAgICAgICJzdHJ1cHBlcmsiLAogICAgICAgICJzdHNlbmQiLAogICAgICAgICJzdWJpbnN0ciIsCiAgICAgICAgInN1Ymluc3RyaW5pdCIsCiAgICAgICAgInN1bSIsCiAgICAgICAgInN1bWFycmF5IiwKICAgICAgICAic3ZmaWx0ZXIiLAogICAgICAgICJzeW5jZ3JhaW4iLAogICAgICAgICJzeW5jbG9vcCIsCiAgICAgICAgInN5bmNwaGFzb3IiLAogICAgICAgICJzeXN0ZW0iLAogICAgICAgICJzeXN0ZW1faSIsCiAgICAgICAgInRhYiIsCiAgICAgICAgInRhYjJhcnJheSIsCiAgICAgICAgInRhYjJwdnMiLAogICAgICAgICJ0YWJfaSIsCiAgICAgICAgInRhYmlmZCIsCiAgICAgICAgInRhYmxlIiwKICAgICAgICAidGFibGUzIiwKICAgICAgICAidGFibGUza3QiLAogICAgICAgICJ0YWJsZWNvcHkiLAogICAgICAgICJ0YWJsZWZpbHRlciIsCiAgICAgICAgInRhYmxlZmlsdGVyaSIsCiAgICAgICAgInRhYmxlZ3B3IiwKICAgICAgICAidGFibGVpIiwKICAgICAgICAidGFibGVpY29weSIsCiAgICAgICAgInRhYmxlaWdwdyIsCiAgICAgICAgInRhYmxlaWt0IiwKICAgICAgICAidGFibGVpbWl4IiwKICAgICAgICAidGFibGVpdyIsCiAgICAgICAgInRhYmxla3QiLAogICAgICAgICJ0YWJsZW1peCIsCiAgICAgICAgInRhYmxlbmciLAogICAgICAgICJ0YWJsZXJhIiwKICAgICAgICAidGFibGVzZWciLAogICAgICAgICJ0YWJsZXNodWZmbGUiLAogICAgICAgICJ0YWJsZXNodWZmbGVpIiwKICAgICAgICAidGFibGV3IiwKICAgICAgICAidGFibGV3YSIsCiAgICAgICAgInRhYmxld2t0IiwKICAgICAgICAidGFibGV4a3QiLAogICAgICAgICJ0YWJsZXhzZWciLAogICAgICAgICJ0YWJtb3JwaCIsCiAgICAgICAgInRhYm1vcnBoYSIsCiAgICAgICAgInRhYm1vcnBoYWsiLAogICAgICAgICJ0YWJtb3JwaGkiLAogICAgICAgICJ0YWJwbGF5IiwKICAgICAgICAidGFicmVjIiwKICAgICAgICAidGFicm93bGluIiwKICAgICAgICAidGFic3VtIiwKICAgICAgICAidGFidyIsCiAgICAgICAgInRhYndfaSIsCiAgICAgICAgInRhbWJvdXJpbmUiLAogICAgICAgICJ0YW4iLAogICAgICAgICJ0YW5oIiwKICAgICAgICAidGFuaW52IiwKICAgICAgICAidGFuaW52MiIsCiAgICAgICAgInRidmNmIiwKICAgICAgICAidGVtcGVzdCIsCiAgICAgICAgInRlbXBvIiwKICAgICAgICAidGVtcG9zY2FsIiwKICAgICAgICAidGVtcG92YWwiLAogICAgICAgICJ0aW1lZHNlcSIsCiAgICAgICAgInRpbWVpbnN0ayIsCiAgICAgICAgInRpbWVpbnN0cyIsCiAgICAgICAgInRpbWVrIiwKICAgICAgICAidGltZXMiLAogICAgICAgICJ0aXZhbCIsCiAgICAgICAgInRsaW5ldG8iLAogICAgICAgICJ0b25lIiwKICAgICAgICAidG9uZWsiLAogICAgICAgICJ0b25leCIsCiAgICAgICAgInRyYWRzeW4iLAogICAgICAgICJ0cmFuZG9tIiwKICAgICAgICAidHJhbnNlZyIsCiAgICAgICAgInRyYW5zZWdiIiwKICAgICAgICAidHJhbnNlZ3IiLAogICAgICAgICJ0cmNyb3NzIiwKICAgICAgICAidHJmaWx0ZXIiLAogICAgICAgICJ0cmhpZ2hlc3QiLAogICAgICAgICJ0cmlnZ2VyIiwKICAgICAgICAidHJpZ3NlcSIsCiAgICAgICAgInRyaW0iLAogICAgICAgICJ0cmltX2kiLAogICAgICAgICJ0cmlyYW5kIiwKICAgICAgICAidHJsb3dlc3QiLAogICAgICAgICJ0cm1peCIsCiAgICAgICAgInRyc2NhbGUiLAogICAgICAgICJ0cnNoaWZ0IiwKICAgICAgICAidHJzcGxpdCIsCiAgICAgICAgInR1cm5vZmYiLAogICAgICAgICJ0dXJub2ZmMiIsCiAgICAgICAgInR1cm5vbiIsCiAgICAgICAgInR2Y29udiIsCiAgICAgICAgInVuaXJhbmQiLAogICAgICAgICJ1bndyYXAiLAogICAgICAgICJ1cHNhbXAiLAogICAgICAgICJ1cmFuZG9tIiwKICAgICAgICAidXJkIiwKICAgICAgICAidmFjdHJvbCIsCiAgICAgICAgInZhZGQiLAogICAgICAgICJ2YWRkX2kiLAogICAgICAgICJ2YWRkdiIsCiAgICAgICAgInZhZGR2X2kiLAogICAgICAgICJ2YWdldCIsCiAgICAgICAgInZhbHBhc3MiLAogICAgICAgICJ2YXNldCIsCiAgICAgICAgInZiYXAiLAogICAgICAgICJ2YmFwZyIsCiAgICAgICAgInZiYXBnbW92ZSIsCiAgICAgICAgInZiYXBsc2luaXQiLAogICAgICAgICJ2YmFwbW92ZSIsCiAgICAgICAgInZiYXB6IiwKICAgICAgICAidmJhcHptb3ZlIiwKICAgICAgICAidmNlbGxhIiwKICAgICAgICAidmNvIiwKICAgICAgICAidmNvMiIsCiAgICAgICAgInZjbzJmdCIsCiAgICAgICAgInZjbzJpZnQiLAogICAgICAgICJ2Y28yaW5pdCIsCiAgICAgICAgInZjb21iIiwKICAgICAgICAidmNvcHkiLAogICAgICAgICJ2Y29weV9pIiwKICAgICAgICAidmRlbF9rIiwKICAgICAgICAidmRlbGF5IiwKICAgICAgICAidmRlbGF5MyIsCiAgICAgICAgInZkZWxheWsiLAogICAgICAgICJ2ZGVsYXl4IiwKICAgICAgICAidmRlbGF5eHEiLAogICAgICAgICJ2ZGVsYXl4cyIsCiAgICAgICAgInZkZWxheXh3IiwKICAgICAgICAidmRlbGF5eHdxIiwKICAgICAgICAidmRlbGF5eHdzIiwKICAgICAgICAidmRpdnYiLAogICAgICAgICJ2ZGl2dl9pIiwKICAgICAgICAidmVjZGVsYXkiLAogICAgICAgICJ2ZWxvYyIsCiAgICAgICAgInZleHAiLAogICAgICAgICJ2ZXhwX2kiLAogICAgICAgICJ2ZXhwc2VnIiwKICAgICAgICAidmV4cHYiLAogICAgICAgICJ2ZXhwdl9pIiwKICAgICAgICAidmliZXMiLAogICAgICAgICJ2aWJyIiwKICAgICAgICAidmlicmF0byIsCiAgICAgICAgInZpbmNyIiwKICAgICAgICAidmxpbWl0IiwKICAgICAgICAidmxpbnNlZyIsCiAgICAgICAgInZsb3dyZXMiLAogICAgICAgICJ2bWFwIiwKICAgICAgICAidm1pcnJvciIsCiAgICAgICAgInZtdWx0IiwKICAgICAgICAidm11bHRfaSIsCiAgICAgICAgInZtdWx0diIsCiAgICAgICAgInZtdWx0dl9pIiwKICAgICAgICAidm9pY2UiLAogICAgICAgICJ2b3NpbSIsCiAgICAgICAgInZwaGFzZXNlZyIsCiAgICAgICAgInZwb3J0IiwKICAgICAgICAidnBvdyIsCiAgICAgICAgInZwb3dfaSIsCiAgICAgICAgInZwb3d2IiwKICAgICAgICAidnBvd3ZfaSIsCiAgICAgICAgInZwdm9jIiwKICAgICAgICAidnJhbmRoIiwKICAgICAgICAidnJhbmRpIiwKICAgICAgICAidnN1YnYiLAogICAgICAgICJ2c3Vidl9pIiwKICAgICAgICAidnRhYmEiLAogICAgICAgICJ2dGFiaSIsCiAgICAgICAgInZ0YWJrIiwKICAgICAgICAidnRhYmxlMWsiLAogICAgICAgICJ2dGFibGVhIiwKICAgICAgICAidnRhYmxlaSIsCiAgICAgICAgInZ0YWJsZWsiLAogICAgICAgICJ2dGFibGV3YSIsCiAgICAgICAgInZ0YWJsZXdpIiwKICAgICAgICAidnRhYmxld2siLAogICAgICAgICJ2dGFid2EiLAogICAgICAgICJ2dGFid2kiLAogICAgICAgICJ2dGFid2siLAogICAgICAgICJ2d3JhcCIsCiAgICAgICAgIndhdmVzZXQiLAogICAgICAgICJ3ZWJzb2NrZXQiLAogICAgICAgICJ3ZWlidWxsIiwKICAgICAgICAid2dib3ciLAogICAgICAgICJ3Z2Jvd2VkYmFyIiwKICAgICAgICAid2dicmFzcyIsCiAgICAgICAgIndnY2xhciIsCiAgICAgICAgIndnZmx1dGUiLAogICAgICAgICJ3Z3BsdWNrIiwKICAgICAgICAid2dwbHVjazIiLAogICAgICAgICJ3Z3VpZGUxIiwKICAgICAgICAid2d1aWRlMiIsCiAgICAgICAgIndpaWNvbm5lY3QiLAogICAgICAgICJ3aWlkYXRhIiwKICAgICAgICAid2lpcmFuZ2UiLAogICAgICAgICJ3aWlzZW5kIiwKICAgICAgICAid2luZG93IiwKICAgICAgICAid3JhcCIsCiAgICAgICAgIndyaXRlc2NyYXRjaCIsCiAgICAgICAgInd0ZXJyYWluIiwKICAgICAgICAieGFkc3IiLAogICAgICAgICJ4aW4iLAogICAgICAgICJ4b3V0IiwKICAgICAgICAieHNjYW5tYXAiLAogICAgICAgICJ4c2NhbnMiLAogICAgICAgICJ4c2NhbnNtYXAiLAogICAgICAgICJ4c2NhbnUiLAogICAgICAgICJ4dHJhdGltIiwKICAgICAgICAieHlzY2FsZSIsCiAgICAgICAgInphY2wiLAogICAgICAgICJ6YWtpbml0IiwKICAgICAgICAiemFtb2QiLAogICAgICAgICJ6YXIiLAogICAgICAgICJ6YXJnIiwKICAgICAgICAiemF3IiwKICAgICAgICAiemF3bSIsCiAgICAgICAgInpkZl8xcG9sZSIsCiAgICAgICAgInpkZl8xcG9sZV9tb2RlIiwKICAgICAgICAiemRmXzJwb2xlIiwKICAgICAgICAiemRmXzJwb2xlX21vZGUiLAogICAgICAgICJ6ZGZfbGFkZGVyIiwKICAgICAgICAiemZpbHRlcjIiLAogICAgICAgICJ6aXIiLAogICAgICAgICJ6aXciLAogICAgICAgICJ6aXdtIiwKICAgICAgICAiemtjbCIsCiAgICAgICAgInprbW9kIiwKICAgICAgICAiemtyIiwKICAgICAgICAiemt3IiwKICAgICAgICAiemt3bSIKICAgIF07CiAgICB2YXIgZGVwcmVjYXRlZE9wY29kZXMgPSBbCiAgICAgICAgImFycmF5IiwKICAgICAgICAiYmZvcm1kZWMiLAogICAgICAgICJiZm9ybWVuYyIsCiAgICAgICAgImNvcHkyZnRhYiIsCiAgICAgICAgImNvcHkydHRhYiIsCiAgICAgICAgImhydGZlciIsCiAgICAgICAgImt0YWJsZXNlZyIsCiAgICAgICAgImxlbnRhYiIsCiAgICAgICAgIm1heHRhYiIsCiAgICAgICAgIm1pbnRhYiIsCiAgICAgICAgInBvcCIsCiAgICAgICAgInBvcF9mIiwKICAgICAgICAicHVzaCIsCiAgICAgICAgInB1c2hfZiIsCiAgICAgICAgInNjYWxldCIsCiAgICAgICAgInNuZGxvYWQiLAogICAgICAgICJzb3VuZG91dCIsCiAgICAgICAgInNvdW5kb3V0cyIsCiAgICAgICAgInNwZWNhZGRtIiwKICAgICAgICAic3BlY2RpZmYiLAogICAgICAgICJzcGVjZGlzcCIsCiAgICAgICAgInNwZWNmaWx0IiwKICAgICAgICAic3BlY2hpc3QiLAogICAgICAgICJzcGVjcHRyayIsCiAgICAgICAgInNwZWNzY2FsIiwKICAgICAgICAic3BlY3N1bSIsCiAgICAgICAgInNwZWN0cnVtIiwKICAgICAgICAic3RhY2siLAogICAgICAgICJzdW10YWIiLAogICAgICAgICJ0YWJnZW4iLAogICAgICAgICJ0YWJtYXAiLAogICAgICAgICJ0YWJtYXBfaSIsCiAgICAgICAgInRhYnNsaWNlIiwKICAgICAgICAidGIwIiwKICAgICAgICAidGIwX2luaXQiLAogICAgICAgICJ0YjEiLAogICAgICAgICJ0YjEwIiwKICAgICAgICAidGIxMF9pbml0IiwKICAgICAgICAidGIxMSIsCiAgICAgICAgInRiMTFfaW5pdCIsCiAgICAgICAgInRiMTIiLAogICAgICAgICJ0YjEyX2luaXQiLAogICAgICAgICJ0YjEzIiwKICAgICAgICAidGIxM19pbml0IiwKICAgICAgICAidGIxNCIsCiAgICAgICAgInRiMTRfaW5pdCIsCiAgICAgICAgInRiMTUiLAogICAgICAgICJ0YjE1X2luaXQiLAogICAgICAgICJ0YjFfaW5pdCIsCiAgICAgICAgInRiMiIsCiAgICAgICAgInRiMl9pbml0IiwKICAgICAgICAidGIzIiwKICAgICAgICAidGIzX2luaXQiLAogICAgICAgICJ0YjQiLAogICAgICAgICJ0YjRfaW5pdCIsCiAgICAgICAgInRiNSIsCiAgICAgICAgInRiNV9pbml0IiwKICAgICAgICAidGI2IiwKICAgICAgICAidGI2X2luaXQiLAogICAgICAgICJ0YjciLAogICAgICAgICJ0YjdfaW5pdCIsCiAgICAgICAgInRiOCIsCiAgICAgICAgInRiOF9pbml0IiwKICAgICAgICAidGI5IiwKICAgICAgICAidGI5X2luaXQiLAogICAgICAgICJ2YmFwMTYiLAogICAgICAgICJ2YmFwNCIsCiAgICAgICAgInZiYXA0bW92ZSIsCiAgICAgICAgInZiYXA4IiwKICAgICAgICAidmJhcDhtb3ZlIiwKICAgICAgICAieHlpbiIKICAgIF07CgogICAgb3Bjb2RlcyA9IGxhbmcuYXJyYXlUb01hcChvcGNvZGVzKTsKICAgIGRlcHJlY2F0ZWRPcGNvZGVzID0gbGFuZy5hcnJheVRvTWFwKGRlcHJlY2F0ZWRPcGNvZGVzKTsKCiAgICB0aGlzLmxpbmVDb250aW51YXRpb25zID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5saW5lLWNvbnRpbnVhdGlvbi5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cXCQvCiAgICAgICAgfSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUubGluZS1jb250aW51YXRpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwvLAogICAgICAgICAgICBuZXh0ICA6ICJsaW5lIGNvbnRpbnVhdGlvbiIKICAgICAgICB9KQogICAgXTsKCiAgICB0aGlzLmNvbW1lbnRzLnB1c2godGhpcy5saW5lQ29udGludWF0aW9ucyk7CgogICAgdGhpcy5xdW90ZWRTdHJpbmdDb250ZW50cy5wdXNoKAogICAgICAgIHRoaXMubGluZUNvbnRpbnVhdGlvbnMsCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwiLAogICAgICAgICAgICByZWdleCA6IC9bXiJcXF0qJC8KICAgICAgICB9CiAgICApOwoKICAgIHZhciBzdGFydCA9IHRoaXMuJHJ1bGVzLnN0YXJ0OwogICAgc3RhcnQuc3BsaWNlKDEsIDAsIHsKICAgICAgICB0b2tlbiA6IFsidGV4dC5jc291bmQiLCAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kIiwgImVudGl0eS5wdW5jdHVhdGlvbi5sYWJlbC5jc291bmQiLCAidGV4dC5jc291bmQiXSwKICAgICAgICByZWdleCA6IC9eKFsgXHRdKikoXHcrKSg6KShbIFx0XSt8JCkvCiAgICB9KTsKICAgIHN0YXJ0LnB1c2goCiAgICAgICAgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJpbnN0clxiLywKICAgICAgICAgICAgbmV4dCAgOiAiaW5zdHJ1bWVudCBudW1iZXJzIGFuZCBpZGVudGlmaWVycyIKICAgICAgICB9KSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJvcGNvZGVcYi8sCiAgICAgICAgICAgIG5leHQgIDogImFmdGVyIG9wY29kZSBrZXl3b3JkIgogICAgICAgIH0pLCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3RoZXIuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJlbmQoPzppbnxvcClcYi8KICAgICAgICB9LAoKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xiKD86MGRiZnN8QTR8ayg/OnJ8c21wcyl8bmNobmxzKD86X2kpP3xzcilcYi8KICAgICAgICB9LAoKICAgICAgICB0aGlzLm51bWJlcnMsCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6ICJcXCs9fC09fFxcKj18Lz18PDx8Pj58PD18Pj18PT18IT18JiZ8XFx8XFx8fFt+wqxdfFs9IStcXC0qL14lJnw8PiM/Ol0iCiAgICAgICAgfSwKCiAgICAgICAgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICBuZXh0ICA6ICJxdW90ZWQgc3RyaW5nIgogICAgICAgIH0pLCB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAve3svLAogICAgICAgICAgICBuZXh0ICA6ICJicmFjZWQgc3RyaW5nIgogICAgICAgIH0pLAoKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuY29udHJvbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cYig/OmRvfGVsc2UoPzppZik/fGVuZCg/OmlmfHVudGlsKXxmaXxpKD86Znx0aGVuKXxrdGhlbnxvZHxyKD86aXIpP2V0dXJufHRoZW58dW50aWx8d2hpbGUpXGIvCiAgICAgICAgfSwKCiAgICAgICAgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuY29udHJvbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cYltpa10/Z290b1xiLywKICAgICAgICAgICAgbmV4dCAgOiAiZ290byBiZWZvcmUgbGFiZWwiCiAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGIoPzpyKD86ZWluaXR8aWdvdG8pfHRpZ290bylcYi8sCiAgICAgICAgICAgIG5leHQgIDogImdvdG8gYmVmb3JlIGxhYmVsIgogICAgICAgIH0pLCB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5jb250cm9sLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xiYyg/Omd8aW4/fGt8bms/KWdvdG9cYi8sCiAgICAgICAgICAgIG5leHQgIDogWyJnb3RvIGJlZm9yZSBsYWJlbCIsICJnb3RvIGJlZm9yZSBhcmd1bWVudCJdCiAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJ0aW1vdXRcYi8sCiAgICAgICAgICAgIG5leHQgIDogWyJnb3RvIGJlZm9yZSBsYWJlbCIsICJnb3RvIGJlZm9yZSBhcmd1bWVudCIsICJnb3RvIGJlZm9yZSBhcmd1bWVudCJdCiAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJsb29wX1tnbF1bZXRdXGIvLAogICAgICAgICAgICBuZXh0ICA6IFsiZ290byBiZWZvcmUgbGFiZWwiLCAiZ290byBiZWZvcmUgYXJndW1lbnQiLCAiZ290byBiZWZvcmUgYXJndW1lbnQiLCAiZ290byBiZWZvcmUgYXJndW1lbnQiXQogICAgICAgIH0pLAoKICAgICAgICB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cYig/OnJlYWRzY29yZXxzY29yZWxpbmUoPzpfaSk/KVxiLywKICAgICAgICAgICAgbmV4dCAgOiAiQ3NvdW5kIHNjb3JlIG9wY29kZSIKICAgICAgICB9KSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJweWw/cnVuW2l0XT9cYig/ISQpLywKICAgICAgICAgICAgbmV4dCAgOiAiUHl0aG9uIG9wY29kZSIKICAgICAgICB9KSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXGJsdWFfKD86ZXhlY3xvcGRlZilcYig/ISQpLywKICAgICAgICAgICAgbmV4dCAgOiAiTHVhIG9wY29kZSIKICAgICAgICB9KSwKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnZhcmlhYmxlLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xicFxkK1xiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXggOiAvXGIoW0EtWl9hLXpdXHcqKSg/Oig6KShbQS1aYS16XSkpP1xiLywgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB0b2tlbnNbMV07CiAgICAgICAgICAgICAgICB2YXIgdHlwZTsKICAgICAgICAgICAgICAgIGlmIChvcGNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgICAgICAgIHR5cGUgPSAic3VwcG9ydC5mdW5jdGlvbi5jc291bmQiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVwcmVjYXRlZE9wY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJpbnZhbGlkLmRlcHJlY2F0ZWQuY3NvdW5kIjsKICAgICAgICAgICAgICAgIGlmICh0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vuc1syXSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6IHR5cGUsIHZhbHVlOiBuYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAicHVuY3R1YXRpb24udHlwZS1hbm5vdGF0aW9uLmNzb3VuZCIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICJ0eXBlLWFubm90YXRpb24uc3RvcmFnZS50eXBlLmNzb3VuZCIsIHZhbHVlOiB0b2tlbnNbM119CiAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0LmNzb3VuZCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICApOwoKICAgIHRoaXMuJHJ1bGVzWyJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgbGlzdCJdLnNwbGljZSgyLCAwLCB7CiAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kIiwKICAgICAgICByZWdleCA6IC97ey8sCiAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIGJyYWNlZCBzdHJpbmciCiAgICB9KTsKCiAgICB2YXIgc2NvcmVIaWdobGlnaHRSdWxlcyA9IG5ldyBDc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzKCJjc291bmQtc2NvcmUtIik7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBicmFjZWQgc3RyaW5nIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXFsjJygpXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWyMnKCldLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL319LywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBsaXN0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcuYnJhY2VkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJpbnN0cnVtZW50IG51bWJlcnMgYW5kIGlkZW50aWZpZXJzIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXGQrfFtBLVpfYS16XVx3Ki8KICAgICAgICAgICAgfSwgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvCiAgICAgICAgICAgIH0pCiAgICAgICAgXSwKCiAgICAgICAgImFmdGVyIG9wY29kZSBrZXl3b3JkIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8KICAgICAgICAgICAgfSksIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5vcGNvZGUuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tBLVpfYS16XVx3Ki8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJvcGNvZGUgdHlwZSBzaWduYXR1cmVzIgogICAgICAgICAgICB9KQogICAgICAgIF0sCiAgICAgICAgIm9wY29kZSB0eXBlIHNpZ25hdHVyZXMiOiBbCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8kLwogICAgICAgICAgICB9KSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cYig/OjB8W2FmaWprS29PcFBTdFZcW1xdXSspLwogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgInF1b3RlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImJyYWNlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL319LwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy5icmFjZWRTdHJpbmdDb250ZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLmJyYWNlZC5jc291bmQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAiZ290byBiZWZvcmUgYXJndW1lbnQiOiBbCiAgICAgICAgICAgIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0LmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8sLwogICAgICAgICAgICB9KSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdLAogICAgICAgICJnb3RvIGJlZm9yZSBsYWJlbCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXHMrLwogICAgICAgICAgICB9LAogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1x3Ky8KICAgICAgICAgICAgfSksIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8oPyFcdykvCiAgICAgICAgICAgIH0pCiAgICAgICAgXSwKCiAgICAgICAgIkNzb3VuZCBzY29yZSBvcGNvZGUiOiBbCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC97ey8sCiAgICAgICAgICAgICAgICBuZXh0ICA6IHNjb3JlSGlnaGxpZ2h0UnVsZXMuZW1iZWRkZWRSdWxlUHJlZml4ICsgInN0YXJ0IgogICAgICAgICAgICB9LCB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8KICAgICAgICAgICAgfSkKICAgICAgICBdLAoKICAgICAgICAiUHl0aG9uIG9wY29kZSI6IFsKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL3t7LywKICAgICAgICAgICAgICAgIG5leHQgIDogInB5dGhvbi1zdGFydCIKICAgICAgICAgICAgfSwgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvCiAgICAgICAgICAgIH0pCiAgICAgICAgXSwKCiAgICAgICAgIkx1YSBvcGNvZGUiOiBbCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC97ey8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJsdWEtc3RhcnQiCiAgICAgICAgICAgIH0sIHRoaXMucG9wUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8kLwogICAgICAgICAgICB9KQogICAgICAgIF0sCgogICAgICAgICJsaW5lIGNvbnRpbnVhdGlvbiI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLnNlbWljb2xvbkNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xTLiovCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9KTsKCiAgICB2YXIgcnVsZXMgPSBbCiAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogL319LwogICAgICAgIH0pCiAgICBdOwogICAgdGhpcy5lbWJlZFJ1bGVzKHNjb3JlSGlnaGxpZ2h0UnVsZXMuZ2V0UnVsZXMoKSwgc2NvcmVIaWdobGlnaHRSdWxlcy5lbWJlZGRlZFJ1bGVQcmVmaXgsIHJ1bGVzKTsKICAgIHRoaXMuZW1iZWRSdWxlcyhQeXRob25IaWdobGlnaHRSdWxlcywgInB5dGhvbi0iLCBydWxlcyk7CiAgICB0aGlzLmVtYmVkUnVsZXMoTHVhSGlnaGxpZ2h0UnVsZXMsICJsdWEtIiwgcnVsZXMpOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhDc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcywgQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc291bmRPcmNoZXN0cmFIaWdobGlnaHRSdWxlcyA9IENzb3VuZE9yY2hlc3RyYUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NvdW5kX29yY2hlc3RyYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzb3VuZF9vcmNoZXN0cmFfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NvdW5kT3JjaGVzdHJhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzb3VuZF9vcmNoZXN0cmFfaGlnaGxpZ2h0X3J1bGVzIikuQ3NvdW5kT3JjaGVzdHJhSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IENzb3VuZE9yY2hlc3RyYUhpZ2hsaWdodFJ1bGVzOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICI7IjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvY3NvdW5kX29yY2hlc3RyYSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-csound_score.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cgp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKGVtYmVkZGVkUnVsZVByZWZpeCkgewoKICAgIHRoaXMuZW1iZWRkZWRSdWxlUHJlZml4ID0gZW1iZWRkZWRSdWxlUHJlZml4ID09PSB1bmRlZmluZWQgPyAiIiA6IGVtYmVkZGVkUnVsZVByZWZpeDsKCiAgICB0aGlzLnNlbWljb2xvbkNvbW1lbnRzID0gewogICAgICAgIHRva2VuIDogImNvbW1lbnQubGluZS5zZW1pY29sb24uY3NvdW5kIiwKICAgICAgICByZWdleCA6ICI7LiokIgogICAgfTsKCiAgICB0aGlzLmNvbW1lbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmJlZ2luLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi9cXCoiLAogICAgICAgICAgICBwdXNoICA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqLyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQuYmxvY2suY3NvdW5kIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmxpbmUuZG91YmxlLXNsYXNoLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogIi8vLiokIgogICAgICAgIH0sCiAgICAgICAgdGhpcy5zZW1pY29sb25Db21tZW50cwogICAgXTsKCiAgICB0aGlzLm1hY3JvVXNlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogWyJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwgInB1bmN0dWF0aW9uLmRlZmluaXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLWxpc3QuYmVnaW4uY3NvdW5kIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJFtBLVpfYS16XVx3KlwuPykoXCgpLywKICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIGxpc3QiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvXCRbQS1aX2Etel1cdyooPzpcLnxcYikvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLm51bWJlcnMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmZsb2F0LmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkK1tFZV1bKy1dP1xkKyl8KD86XGQrXC5cZCp8XGQqXC5cZCspKD86W0VlXVsrLV0/XGQrKT8vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlLm51bWJlci5jc291bmQiLCAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmhleGFkZWNpbWFsLmNzb3VuZCJdLAogICAgICAgICAgICByZWdleCA6IC8oMFtYeF0pKFswLTlBLUZhLWZdKykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbC5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cZCsvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLmJyYWNlZFN0cmluZ0NvbnRlbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC9cXCg/OltcXGFibnJ0Il18WzAtN117MSwzfSkvCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5wbGFjZWhvbGRlci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8lWyMwXC0gK10qXGQqKD86XC5cZCspP1tkaXVveFhmRmVFZ0dhQWNzXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvJSUvCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzID0gWwogICAgICAgIHRoaXMubWFjcm9Vc2VzLAogICAgICAgIHRoaXMuYnJhY2VkU3RyaW5nQ29udGVudHMKICAgIF07CgogICAgdmFyIHN0YXJ0ID0gWwogICAgICAgIHRoaXMuY29tbWVudHMsCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgcmVnZXggOiAvIyg/OmUoPzpuZCg/OmlmKT98bHNlKVxifCMjKXxAQD9bIFx0XSpcZCsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jaW5jbHVkZS8sCiAgICAgICAgICAgIHB1c2ggIDogWwogICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuY3NvdW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oW14gXHRdKSg/Oi4qP1wxKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jaW5jbHVkZXN0ci8sCiAgICAgICAgICAgIHB1c2ggIDogWwogICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuY3NvdW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oW14gXHRdKSg/Oi4qP1wxKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICByZWdleCA6IC8jWyBcdF0qZGVmaW5lLywKICAgICAgICAgICAgbmV4dCAgOiAiZGVmaW5lIGRpcmVjdGl2ZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yLmNzb3VuZCIsCiAgICAgICAgICAgIHJlZ2V4IDogLyMoPzppZm4/ZGVmfHVuZGVmKVxiLywKICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gZGlyZWN0aXZlIgogICAgICAgIH0sCgogICAgICAgIHRoaXMubWFjcm9Vc2VzCiAgICBdOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IHN0YXJ0LAoKICAgICAgICAiZGVmaW5lIGRpcmVjdGl2ZSI6IFsKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUuZnVuY3Rpb24ucHJlcHJvY2Vzc29yLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24ubWFjcm8tcGFyYW1ldGVyLW5hbWUtbGlzdC5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCgvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIG5hbWUgbGlzdCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5tYWNyby5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJtYWNybyBib2R5IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gcGFyYW1ldGVyIG5hbWUgbGlzdCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUucGFyYW1ldGVyLnByZXByb2Nlc3Nvci5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW0EtWl9hLXpdXHcqLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLm1hY3JvLXBhcmFtZXRlci1uYW1lLWxpc3QuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkZWZpbmUgZGlyZWN0aXZlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gYm9keSI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwjLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLm1hY3JvLmVuZC5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdLAoKICAgICAgICAibWFjcm8gZGlyZWN0aXZlIjogWwogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5wcmVwcm9jZXNzb3IuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tBLVpfYS16XVx3Ki8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgbGlzdCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtbGlzdC5lbmQuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wpLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJtYWNybyBwYXJhbWV0ZXIgdmFsdWUgcXVvdGVkIHN0cmluZyIKICAgICAgICAgICAgfSwgdGhpcy5wdXNoUnVsZSh7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtcGFyZW50aGV0aWNhbC5iZWdpbi5jc291bmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCgvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIHBhcmVudGhldGljYWwiCiAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYWNyby1wYXJhbWV0ZXItdmFsdWUtc2VwYXJhdG9yLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbIyddIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibWFjcm8gcGFyYW1ldGVyIHZhbHVlIHF1b3RlZCBzdHJpbmciOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcWyMnKCldLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1sjJygpXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBsaXN0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB0aGlzLnF1b3RlZFN0cmluZ0NvbnRlbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmNzb3VuZCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBwYXJlbnRoZXRpY2FsIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXFwpLwogICAgICAgICAgICB9LCB0aGlzLnBvcFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLXBhcmVudGhldGljYWwuZW5kLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cKS8KICAgICAgICAgICAgfSksIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFjcm8tcGFyYW1ldGVyLXZhbHVlLXBhcmVudGhldGljYWwuYmVnaW4uY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1woLywKICAgICAgICAgICAgICAgIG5leHQgIDogIm1hY3JvIHBhcmFtZXRlciB2YWx1ZSBwYXJlbnRoZXRpY2FsIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgc3RhcnQKICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMucHVzaFJ1bGUgPSBmdW5jdGlvbihwYXJhbXMpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMubmV4dCkpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubmV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgcGFyYW1zLm5leHRbaV0gPSB0aGlzLmVtYmVkZGVkUnVsZVByZWZpeCArIHBhcmFtcy5uZXh0W2ldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICByZWdleCA6IHBhcmFtcy5yZWdleCwgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApCiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zLm5leHQpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubmV4dC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHBhcmFtcy5uZXh0W2ldKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocGFyYW1zLm5leHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1zLnRva2VuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0IG5leHQoKSB7IHJldHVybiBBcnJheS5pc0FycmF5KHBhcmFtcy5uZXh0KSA/IHBhcmFtcy5uZXh0W3BhcmFtcy5uZXh0Lmxlbmd0aCAtIDFdIDogcGFyYW1zLm5leHQ7IH0sCiAgICAgICAgICAgIHNldCBuZXh0KG5leHQpIHsKICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMubmV4dCkpIHsKICAgICAgICAgICAgICAgICAgICBwYXJhbXMubmV4dCA9IG5leHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBnZXQgdG9rZW4oKSB7IHJldHVybiBwYXJhbXMudG9rZW47IH0KICAgICAgICB9OwogICAgfTsKCiAgICB0aGlzLnBvcFJ1bGUgPSBmdW5jdGlvbihwYXJhbXMpIHsKICAgICAgICBpZiAocGFyYW1zLm5leHQpIHsKICAgICAgICAgICAgcGFyYW1zLm5leHQgPSB0aGlzLmVtYmVkZGVkUnVsZVByZWZpeCArIHBhcmFtcy5uZXh0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcmVnZXggOiBwYXJhbXMucmVnZXgsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrLCBsaW5lKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubmV4dCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gocGFyYW1zLm5leHQpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5sZW5ndGggPiAxID8gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gOiBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbXMudG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfTsKCn0pLmNhbGwoQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCmV4cG9ydHMuQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMgPSBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2Nzb3VuZF9wcmVwcm9jZXNzb3JfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKdmFyIENzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc291bmRfcHJlcHJvY2Vzc29yX2hpZ2hsaWdodF9ydWxlcyIpLkNzb3VuZFByZXByb2Nlc3NvckhpZ2hsaWdodFJ1bGVzOwoKdmFyIENzb3VuZFNjb3JlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihlbWJlZGRlZFJ1bGVQcmVmaXgpIHsKCiAgICBDc291bmRQcmVwcm9jZXNzb3JIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMsIGVtYmVkZGVkUnVsZVByZWZpeCk7CgogICAgdGhpcy5xdW90ZWRTdHJpbmdDb250ZW50cy5wdXNoKHsKICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICByZWdleCA6IC9bXiJdKiQvCiAgICB9KTsKCiAgICB2YXIgc3RhcnQgPSB0aGlzLiRydWxlcy5zdGFydDsKICAgIHN0YXJ0LnB1c2goCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLmNvbnRyb2wuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgcmVnZXggOiAvW2FiQ2RlZmlxc3R2eHldLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3cvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljLmxhbmd1YWdlLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3ovCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZC5jb250cm9sLmNzb3VuZC1zY29yZSIsICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbC5jc291bmQtc2NvcmUiXSwKICAgICAgICAgICAgcmVnZXggOiAvKFtuTnBQXVtwUF0pKFxkKykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm90aGVyLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1ttbl0vLAogICAgICAgICAgICBwdXNoICA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUubGFiZWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL3JcYi8sCiAgICAgICAgICAgIG5leHQgIDogInJlcGVhdCBzZWN0aW9uIgogICAgICAgIH0sCgogICAgICAgIHRoaXMubnVtYmVycywKCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIlshK1xcLSovXiUmfDw+I34uXSIKICAgICAgICB9LAoKICAgICAgICB0aGlzLnB1c2hSdWxlKHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgIG5leHQgIDogInF1b3RlZCBzdHJpbmciCiAgICAgICAgfSksCgogICAgICAgIHRoaXMucHVzaFJ1bGUoewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5icmFjZWQtbG9vcC5iZWdpbi5jc291bmQtc2NvcmUiLAogICAgICAgICAgICByZWdleCA6IC97LywKICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciBsZWZ0IGJyYWNlIgogICAgICAgIH0pCiAgICApOwoKICAgIHRoaXMuYWRkUnVsZXMoewogICAgICAgICJyZXBlYXQgc2VjdGlvbiI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmRlY2ltYWwuY3NvdW5kLXNjb3JlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xkKy8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJyZXBlYXQgc2VjdGlvbiBiZWZvcmUgbGFiZWwiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXBlYXQgc2VjdGlvbiBiZWZvcmUgbGFiZWwiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHRoaXMuY29tbWVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLmxhYmVsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bQS1aX2Etel1cdyovLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAicXVvdGVkIHN0cmluZyI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8KICAgICAgICAgICAgfSksCiAgICAgICAgICAgIHRoaXMucXVvdGVkU3RyaW5nQ29udGVudHMsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuY3NvdW5kLXNjb3JlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgImxvb3AgYWZ0ZXIgbGVmdCBicmFjZSI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5kZWNpbWFsLmNzb3VuZC1zY29yZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cZCsvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciByZXBlYXQgY291bnQiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB0aGlzLmNvbW1lbnRzLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwuY3NvdW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xTLiovCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJsb29wIGFmdGVyIHJlcGVhdCBjb3VudCI6IFsKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLmZ1bmN0aW9uLnByZXByb2Nlc3Nvci5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW0EtWl9hLXpdXHcqXGIvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibG9vcCBhZnRlciBtYWNybyBuYW1lIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgdGhpcy5jb21tZW50cywKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsLmNzb3VuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cUy4qLwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibG9vcCBhZnRlciBtYWNybyBuYW1lIjogWwogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgdGhpcy5wb3BSdWxlKHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLmJyYWNlZC1sb29wLmVuZC5jc291bmQtc2NvcmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvfS8KICAgICAgICAgICAgfSkKICAgICAgICBdCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlcywgQ3NvdW5kUHJlcHJvY2Vzc29ySGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzID0gQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzb3VuZF9zY29yZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzb3VuZF9zY29yZV9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBDc291bmRTY29yZUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc291bmRfc2NvcmVfaGlnaGxpZ2h0X3J1bGVzIikuQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ3NvdW5kU2NvcmVIaWdobGlnaHRSdWxlczsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiOyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2Nzb3VuZF9zY29yZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-csp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3BfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICAgdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CgogICAgdmFyIENzcEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiAiY2hpbGQtc3JjfGNvbm5lY3Qtc3JjfGRlZmF1bHQtc3JjfGZvbnQtc3JjfGZyYW1lLXNyY3xpbWctc3JjfG1hbmlmZXN0LXNyY3xtZWRpYS1zcmN8b2JqZWN0LXNyYyIKICAgICAgICAgICAgICAgICAgKyAifHNjcmlwdC1zcmN8c3R5bGUtc3JjfHdvcmtlci1zcmN8YmFzZS11cml8cGx1Z2luLXR5cGVzfHNhbmRib3h8ZGlzb3duLW9wZW5lcnxmb3JtLWFjdGlvbnxmcmFtZS1hbmNlc3RvcnN8cmVwb3J0LXVyaSIKICAgICAgICAgICAgICAgICAgKyAifHJlcG9ydC10b3x1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzfGJsb2NrLWFsbC1taXhlZC1jb250ZW50fHJlcXVpcmUtc3JpLWZvcnxyZWZsZWN0ZWQteHNzfHJlZmVycmVyfHBvbGljeS11cmkiLAogICAgICAgICAgICAidmFyaWFibGUiOiAiJ25vbmUnfCdzZWxmJ3wndW5zYWZlLWlubGluZSd8J3Vuc2FmZS1ldmFsJ3wnc3RyaWN0LWR5bmFtaWMnfCd1bnNhZmUtaGFzaGVkLWF0dHJpYnV0ZXMnIgogICAgICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7CgogICAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmxpbmsiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9odHRwcz86W147XHNdKi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJvcGVyYXRvci5wdW5jdHVhdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleDogLzsvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXg6IC9bXlxzO10rLwogICAgICAgICAgICB9XQogICAgICAgIH07CiAgICB9OwoKICAgIG9vcC5pbmhlcml0cyhDc3BIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCiAgICBleHBvcnRzLkNzcEhpZ2hsaWdodFJ1bGVzID0gQ3NwSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY3NwX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9saWIvb29wIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CiAgICB2YXIgQ3NwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NzcF9oaWdobGlnaHRfcnVsZXMiKS5Dc3BIaWdobGlnaHRSdWxlczsKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CgogICAgdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ3NwSGlnaGxpZ2h0UnVsZXM7CiAgICB9OwoKICAgIG9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NzcCI7CiAgICB9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCiAgICBleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvY3NwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgcHJvcGVydHlNYXAgPSB7CiAgICAiYmFja2dyb3VuZCI6IHsiIyQwIjogMX0sCiAgICAiYmFja2dyb3VuZC1jb2xvciI6IHsiIyQwIjogMSwgInRyYW5zcGFyZW50IjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1pbWFnZSI6IHsidXJsKCcvJDAnKSI6IDF9LAogICAgImJhY2tncm91bmQtcmVwZWF0IjogeyJyZXBlYXQiOiAxLCAicmVwZWF0LXgiOiAxLCAicmVwZWF0LXkiOiAxLCAibm8tcmVwZWF0IjogMSwgImluaGVyaXQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXBvc2l0aW9uIjogeyJib3R0b20iOjIsICJjZW50ZXIiOjIsICJsZWZ0IjoyLCAicmlnaHQiOjIsICJ0b3AiOjIsICJpbmhlcml0IjoyfSwKICAgICJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOiB7InNjcm9sbCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtc2l6ZSI6IHsiY292ZXIiOiAxLCAiY29udGFpbiI6IDF9LAogICAgImJhY2tncm91bmQtY2xpcCI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJhY2tncm91bmQtb3JpZ2luIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYm9yZGVyIjogeyJzb2xpZCAkMCI6IDEsICJkYXNoZWQgJDAiOiAxLCAiZG90dGVkICQwIjogMSwgIiMkMCI6IDF9LAogICAgImJvcmRlci1jb2xvciI6IHsiIyQwIjogMX0sCiAgICAiYm9yZGVyLXN0eWxlIjogeyJzb2xpZCI6MiwgImRhc2hlZCI6MiwgImRvdHRlZCI6MiwgImRvdWJsZSI6MiwgImdyb292ZSI6MiwgImhpZGRlbiI6MiwgImluaGVyaXQiOjIsICJpbnNldCI6MiwgIm5vbmUiOjIsICJvdXRzZXQiOjIsICJyaWRnZWQiOjJ9LAogICAgImJvcmRlci1jb2xsYXBzZSI6IHsiY29sbGFwc2UiOiAxLCAic2VwYXJhdGUiOiAxfSwKICAgICJib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJjbGVhciI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJib3RoIjogMSwgIm5vbmUiOiAxfSwKICAgICJjb2xvciI6IHsiIyQwIjogMSwgInJnYigjJDAwLDAsMCkiOiAxfSwKICAgICJjdXJzb3IiOiB7ImRlZmF1bHQiOiAxLCAicG9pbnRlciI6IDEsICJtb3ZlIjogMSwgInRleHQiOiAxLCAid2FpdCI6IDEsICJoZWxwIjogMSwgInByb2dyZXNzIjogMSwgIm4tcmVzaXplIjogMSwgIm5lLXJlc2l6ZSI6IDEsICJlLXJlc2l6ZSI6IDEsICJzZS1yZXNpemUiOiAxLCAicy1yZXNpemUiOiAxLCAic3ctcmVzaXplIjogMSwgInctcmVzaXplIjogMSwgIm53LXJlc2l6ZSI6IDF9LAogICAgImRpc3BsYXkiOiB7Im5vbmUiOiAxLCAiYmxvY2siOiAxLCAiaW5saW5lIjogMSwgImlubGluZS1ibG9jayI6IDEsICJ0YWJsZS1jZWxsIjogMX0sCiAgICAiZW1wdHktY2VsbHMiOiB7InNob3ciOiAxLCAiaGlkZSI6IDF9LAogICAgImZsb2F0IjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgIm5vbmUiOiAxfSwKICAgICJmb250LWZhbWlseSI6IHsiQXJpYWwiOjIsIkNvbWljIFNhbnMgTVMiOjIsIkNvbnNvbGFzIjoyLCJDb3VyaWVyIE5ldyI6MiwiQ291cmllciI6MiwiR2VvcmdpYSI6MiwiTW9ub3NwYWNlIjoyLCJTYW5zLVNlcmlmIjoyLCAiU2Vnb2UgVUkiOjIsIlRhaG9tYSI6MiwiVGltZXMgTmV3IFJvbWFuIjoyLCJUcmVidWNoZXQgTVMiOjIsIlZlcmRhbmEiOiAxfSwKICAgICJmb250LXNpemUiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJmb250LXdlaWdodCI6IHsiYm9sZCI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXN0eWxlIjogeyJpdGFsaWMiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC12YXJpYW50IjogeyJub3JtYWwiOiAxLCAic21hbGwtY2FwcyI6IDF9LAogICAgImhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZXR0ZXItc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAibGluZS1oZWlnaHQiOiB7Im5vcm1hbCI6IDF9LAogICAgImxpc3Qtc3R5bGUtdHlwZSI6IHsibm9uZSI6IDEsICJkaXNjIjogMSwgImNpcmNsZSI6IDEsICJzcXVhcmUiOiAxLCAiZGVjaW1hbCI6IDEsICJkZWNpbWFsLWxlYWRpbmctemVybyI6IDEsICJsb3dlci1yb21hbiI6IDEsICJ1cHBlci1yb21hbiI6IDEsICJsb3dlci1ncmVlayI6IDEsICJsb3dlci1sYXRpbiI6IDEsICJ1cHBlci1sYXRpbiI6IDEsICJnZW9yZ2lhbiI6IDEsICJsb3dlci1hbHBoYSI6IDEsICJ1cHBlci1hbHBoYSI6IDF9LAogICAgIm1hcmdpbiI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm92ZXJmbG93IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXgiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJwYWRkaW5nIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWdlLWJyZWFrLWFmdGVyIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicGFnZS1icmVhay1iZWZvcmUiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwb3NpdGlvbiI6IHsiYWJzb2x1dGUiOiAxLCAicmVsYXRpdmUiOiAxLCAiZml4ZWQiOiAxLCAic3RhdGljIjogMX0sCiAgICAicmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ0YWJsZS1sYXlvdXQiOiB7ImZpeGVkIjogMSwgImF1dG8iOiAxfSwKICAgICJ0ZXh0LWRlY29yYXRpb24iOiB7Im5vbmUiOiAxLCAidW5kZXJsaW5lIjogMSwgImxpbmUtdGhyb3VnaCI6IDEsICJibGluayI6IDF9LAogICAgInRleHQtYWxpZ24iOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiY2VudGVyIjogMSwgImp1c3RpZnkiOiAxfSwKICAgICJ0ZXh0LXRyYW5zZm9ybSI6IHsiY2FwaXRhbGl6ZSI6IDEsICJ1cHBlcmNhc2UiOiAxLCAibG93ZXJjYXNlIjogMSwgIm5vbmUiOiAxfSwKICAgICJ0b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ2ZXJ0aWNhbC1hbGlnbiI6IHsidG9wIjogMSwgImJvdHRvbSI6IDF9LAogICAgInZpc2liaWxpdHkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMX0sCiAgICAid2hpdGUtc3BhY2UiOiB7Im5vd3JhcCI6IDEsICJub3JtYWwiOiAxLCAicHJlIjogMSwgInByZS1saW5lIjogMSwgInByZS13cmFwIjogMX0sCiAgICAid2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ3b3JkLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImZpbHRlciI6IHsiYWxwaGEob3BhY2l0eT0kMDEwMCkiOiAxfSwKCiAgICAidGV4dC1zaGFkb3ciOiB7IiQwMnB4IDJweCAycHggIzc3NyI6IDF9LAogICAgInRleHQtb3ZlcmZsb3ciOiB7ImVsbGlwc2lzLXdvcmQiOiAxLCAiY2xpcCI6IDEsICJlbGxpcHNpcyI6IDF9LAogICAgIi1tb3otYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdCI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3gtc2hhZG93IjogMSwKICAgICItd2Via2l0LWJveC1zaGFkb3ciOiAxLAogICAgInRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLW1vei10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi13ZWJraXQtdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxIH0KfTsKCnZhciBDc3NDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IGZhbHNlOwoKICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoZG9jdW1lbnQpIHsKICAgICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYycpLnN0eWxlOwoKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzdHlsZSkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVtpXSAhPT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0nICsgeC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eU1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcFtuYW1lXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uc0RlZmluZWQpIHsKICAgICAgICAgICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlPT09J3J1bGVzZXQnIHx8IHNlc3Npb24uJG1vZGUuJGlkID09ICJhY2UvbW9kZS9zY3NzIikgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgICAgIGlmICgvOlteO10rJC8udGVzdChsaW5lKSkgewogICAgICAgICAgICAgICAgLyhbXHdcLV0rKTpbXjpdKiQvLnRlc3QobGluZSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbXTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcCk7CiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKHByb3BlcnR5KXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHByb3BlcnR5LAogICAgICAgICAgICAgICAgc25pcHBldDogcHJvcGVydHkgKyAnOiAkMDsnLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIHZhciBwcm9wZXJ0eSA9ICgvKFtcd1wtXSspOlteOl0qJC8uZXhlYyhsaW5lKSB8fCB7fSlbMV07CgogICAgICAgIGlmICghcHJvcGVydHkpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHByb3BlcnR5IGluIHByb3BlcnR5TWFwICYmIHR5cGVvZiBwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkgdmFsdWUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKENzc0NvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkNzc0NvbXBsZXRpb25zID0gQ3NzQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKCiAgICB0aGlzLmFkZCgiY29sb24iLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnOicgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoL14oXHMrW147XXxccyokKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2UuZW5kLmNvbHVtbiwgcmFuZ2UuZW5kLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArKzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzsnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoIiFpbXBvcnRhbnQiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnIScgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CgogICAgICAgICAgICBpZiAoL15ccyooO3x9fCQpLy50ZXN0KGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnIWltcG9ydGFudCcsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMTAsIDEwXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKb29wLmluaGVyaXRzKENzc0JlaGF2aW91ciwgQ3N0eWxlQmVoYXZpb3VyKTsKCmV4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2NzcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-curly.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jdXJseV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKCgp2YXIgQ3VybHlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy4kcnVsZXNbInN0YXJ0Il0udW5zaGlmdCh7CiAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCiAgICAgICAgcmVnZXg6ICJ7eyIsCiAgICAgICAgcHVzaDogImN1cmx5LXN0YXJ0IgogICAgfSk7CgogICAgdGhpcy4kcnVsZXNbImN1cmx5LXN0YXJ0Il0gPSBbewogICAgICAgIHRva2VuOiAidmFyaWFibGUiLAogICAgICAgIHJlZ2V4OiAifX0iLAogICAgICAgIG5leHQ6ICJwb3AiCiAgICB9XTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ3VybHlIaWdobGlnaHRSdWxlcywgSHRtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQ3VybHlIaWdobGlnaHRSdWxlcyA9IEN1cmx5SGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3VybHkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvY3VybHlfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGU7CnZhciBDdXJseUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jdXJseV9oaWdobGlnaHRfcnVsZXMiKS5DdXJseUhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ3VybHlIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgSHRtbE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3VybHkiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9jdXJseSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-c_cpp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY0Z1bmN0aW9ucyA9IGV4cG9ydHMuY0Z1bmN0aW9ucyA9ICJcXGIoPzpoeXBvdCg/OmZ8bCk/fHMoPzpzY2FuZnx5c3RlbXxucHJpbnRmfGNhKD86bmZ8bGIoPzpuKD86ZnxsKT98bG4oPzpmfGwpPykpfGkoPzpuKD86aCg/OmZ8bCk/fGZ8bCk/fGduKD86YWx8Yml0KSl8dHIoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT8pfGVycm9yfHBicmt8ZnRpbWV8bGVufHJjaHJ8eGZybSl8cHJpbnRmfGV0KD86am1wfHZidWZ8bG9jYWxlfGJ1Zil8cXJ0KD86ZnxsKT98dyg/OnNjYW5mfHByaW50Zil8cmFuZCl8big/OmUoPzphcmJ5aW50KD86ZnxsKT98eHQoPzp0b3dhcmQoPzpmfGwpP3xhZnRlcig/OmZ8bCk/KSl8YW4oPzpmfGwpPyl8Yyg/OnMoPzppbig/OmgoPzpmfGwpP3xmfGwpP3xxcnQoPzpmfGwpPyl8Y29zKD86aCg/OmYpP3xmfGwpP3xpbWFnKD86ZnxsKT98dCg/OmltZXxhbig/OmgoPzpmfGwpP3xmfGwpPyl8byg/OnMoPzpoKD86ZnxsKT98ZnxsKT98bmooPzpmfGwpP3xweXNpZ24oPzpmfGwpPyl8cCg/Om93KD86ZnxsKT98cm9qKD86ZnxsKT8pfGUoPzppbCg/OmZ8bCk/fHhwKD86ZnxsKT8pfGwoPzpvKD86Y2t8Zyg/OmZ8bCk/KXxlYXJlcnIpfGEoPzpzaW4oPzpoKD86ZnxsKT98ZnxsKT98Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHRhbig/OmgoPzpmfGwpP3xmfGwpP3xsbG9jfHJnKD86ZnxsKT98YnMoPzpmfGwpPyl8cmVhbCg/OmZ8bCk/fGJydCg/OmZ8bCk/KXx0KD86aW1lfG8oPzp1cHBlcnxsb3dlcil8YW4oPzpoKD86ZnxsKT98ZnxsKT98cnVuYyg/OmZ8bCk/fGdhbW1hKD86ZnxsKT98bXAoPzpuYW18ZmlsZSkpfGkoPzpzKD86c3BhY2V8big/Om9ybWFsfGFuKXxjbnRybHxpbmZ8ZGlnaXR8dSg/Om5vcmRlcmVkfHBwZXIpfHAoPzp1bmN0fHJpbnQpfGZpbml0ZXx3KD86c3BhY2V8Yyg/Om50cmx8dHlwZSl8ZGlnaXR8dXBwZXJ8cCg/OnVuY3R8cmludCl8bG93ZXJ8YWwoPzpudW18cGhhKXxncmFwaHx4ZGlnaXR8YmxhbmspfGwoPzpvd2VyfGVzcyg/OmVxdWFsfGdyZWF0ZXIpPyl8YWwoPzpudW18cGhhKXxncig/OmVhdGVyKD86ZXF1YWwpP3xhcGgpfHhkaWdpdHxibGFuayl8bG9nYig/OmZ8bCk/fG1heCg/OmRpdnxhYnMpKXxkaSg/OnZ8ZmZ0aW1lKXxfRXhpdHx1bmdldCg/OmN8d2MpfHAoPzpvdyg/OmZ8bCk/fHV0KD86c3xjKD86aGFyKT98d2MoPzpoYXIpPyl8ZXJyb3J8cmludGYpfGUoPzpyZig/OmMoPzpmfGwpP3xmfGwpP3x4KD86aXR8cCg/OjIoPzpmfGwpP3xmfGx8bTEoPzpmfGwpPyk/KSl8dig/OnMoPzpzY2FuZnxucHJpbnRmfGNhbmZ8cHJpbnRmfHcoPzpzY2FuZnxwcmludGYpKXxwcmludGZ8Zig/OnNjYW5mfHByaW50Znx3KD86c2NhbmZ8cHJpbnRmKSl8dyg/OnNjYW5mfHByaW50Zil8YV8oPzpzdGFydHxjb3B5fGVuZHxhcmcpKXxxc29ydHxmKD86cyg/OmNhbmZ8ZSg/OnRwb3N8ZWspKXxjbG9zZXx0ZWxsfG9wZW58ZGltKD86ZnxsKT98cCg/OmNsYXNzaWZ5fHV0KD86c3xjfHcoPzpzfGMpKXxyaW50Zil8ZSg/OmhvbGRleGNlcHR8c2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpfGNsZWFyZXhjZXB0fHRlc3RleGNlcHR8b2Z8dXBkYXRlZW52fHIoPzphaXNlZXhjZXB0fHJvcil8Z2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpKXxmbHVzaHx3KD86c2NhbmZ8aWRlfHByaW50ZnxyaXRlKXxsb29yKD86ZnxsKT98YWJzKD86ZnxsKT98Z2V0KD86c3xjfHBvc3x3KD86c3xjKSl8cmUoPzpvcGVufGV8YWR8eHAoPzpmfGwpPyl8bSg/OmluKD86ZnxsKT98b2QoPzpmfGwpP3xhKD86ZnxsfHgoPzpmfGwpPyk/KSl8bCg/OmQoPzppdnxleHAoPzpmfGwpPyl8byg/Om5nam1wfGNhbCg/OnRpbWV8ZWNvbnYpfGcoPzoxKD86cCg/OmZ8bCk/fDAoPzpmfGwpPyl8Mig/OmZ8bCk/fGZ8bHxiKD86ZnxsKT8pPyl8YWJzfGwoPzpkaXZ8YWJzfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT8pKXxyKD86aW50KD86ZnxsKT98b3VuZCg/OmZ8bCk/KXxnYW1tYSg/OmZ8bCk/KXx3KD86c2NhbmZ8Yyg/OnMoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT98bWJzKXxwYnJrfGZ0aW1lfGxlbnxyKD86Y2hyfHRvbWJzKXx4ZnJtKXx0byg/OmJ8bWIpfHJ0b21iKXxwcmludGZ8bWVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSkpfGEoPzpzKD86c2VydHxjdGltZXxpbig/OmgoPzpmfGwpP3xmfGwpPyl8Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHQoPzpvKD86aXxmfGwoPzpsKT8pfGV4aXR8YW4oPzpoKD86ZnxsKT98Mig/OmZ8bCk/fGZ8bCk/KXxiKD86c3xvcnQpKXxnKD86ZXQoPzpzfGMoPzpoYXIpP3xlbnZ8d2MoPzpoYXIpPyl8bXRpbWUpfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT98ZSg/Om5hbWV8YWxsb2N8d2luZHxtKD86b3ZlfHF1byg/OmZ8bCk/fGFpbmRlcig/OmZ8bCk/KSl8YSg/Om5kfGlzZSkpfGIoPzpzZWFyY2h8dG93Yyl8bSg/Om9kZig/OmZ8bCk/fGVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSl8a3RpbWV8YWxsb2N8Yig/OnMoPzppbml0fHRvd2NzfHJ0b3djcyl8dG93Y3xsZW58cig/OnRvd2N8bGVuKSkpKVxcYiI7Cgp2YXIgY19jcHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkQ29udHJvbHMgPSAoCiAgICAgICAgImJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGZvcnxnb3RvfGlmfF9QcmFnbWF8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8b3BlcmF0b3J8dHJ5fHRocm93fHVzaW5nIgogICAgKTsKICAgIAogICAgdmFyIHN0b3JhZ2VUeXBlID0gKAogICAgICAgICJhc218X19hc21fX3xhdXRvfGJvb2x8X0Jvb2x8Y2hhcnxfQ29tcGxleHxkb3VibGV8ZW51bXxmbG9hdHwiICsKICAgICAgICAiX0ltYWdpbmFyeXxpbnR8bG9uZ3xzaG9ydHxzaWduZWR8c3RydWN0fHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHwiICsKICAgICAgICAiY2xhc3N8d2NoYXJfdHx0ZW1wbGF0ZXxjaGFyMTZfdHxjaGFyMzJfdCIKICAgICk7CgogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAoCiAgICAgICAgImNvbnN0fGV4dGVybnxyZWdpc3RlcnxyZXN0cmljdHxzdGF0aWN8dm9sYXRpbGV8aW5saW5lfHByaXZhdGV8IiArCiAgICAgICAgInByb3RlY3RlZHxwdWJsaWN8ZnJpZW5kfGV4cGxpY2l0fHZpcnR1YWx8ZXhwb3J0fG11dGFibGV8dHlwZW5hbWV8IiArCiAgICAgICAgImNvbnN0ZXhwcnxuZXd8ZGVsZXRlfGFsaWduYXN8YWxpZ25vZnxkZWNsdHlwZXxub2V4Y2VwdHx0aHJlYWRfbG9jYWwiCiAgICApOwoKICAgIHZhciBrZXl3b3JkT3BlcmF0b3JzID0gKAogICAgICAgICJhbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxjb21wbHxub3R8bm90X2VxfG9yfG9yX2VxfHR5cGVpZHx4b3J8eG9yX2VxfCIgKwogICAgICAgICJjb25zdF9jYXN0fGR5bmFtaWNfY2FzdHxyZWludGVycHJldF9jYXN0fHN0YXRpY19jYXN0fHNpemVvZnxuYW1lc3BhY2UiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJOVUxMfHRydWV8ZmFsc2V8VFJVRXxGQUxTRXxudWxscHRyIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuJGtleXdvcmRzID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6IGtleXdvcmRDb250cm9scywKICAgICAgICAic3RvcmFnZS50eXBlIiA6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiIDoga2V5d29yZE9wZXJhdG9ycywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CiAgICB2YXIgZXNjYXBlUmUgPSAvXFwoPzpbJyI/XFxhYmZucnR2XXxbMC03XXsxLDN9fHhbYS1mQS1GXGRdezJ9fHVbYS1mQS1GXGRdezR9VVthLWZBLUZcZF17OH18LikvLnNvdXJjZTsKICAgIHZhciBmb3JtYXRSZSA9ICIlIgogICAgICAgICAgKyAvKFxkK1wkKT8vLnNvdXJjZSAvLyBmaWVsZCAoYXJndW1lbnQgIykKICAgICAgICAgICsgL1sjMFwtICsnXSovLnNvdXJjZSAvLyBmbGFncwogICAgICAgICAgKyAvWyw7Ol9dPy8uc291cmNlIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXIgKEFsdGlWZWMpCiAgICAgICAgICArIC8oKC0/XGQrKXxcKigtP1xkK1wkKT8pPy8uc291cmNlIC8vIG1pbmltdW0gZmllbGQgd2lkdGgKICAgICAgICAgICsgLyhcLigoLT9cZCspfFwqKC0/XGQrXCQpPyk/KT8vLnNvdXJjZSAvLyBwcmVjaXNpb24KICAgICAgICAgICsgLyhoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpPy8uc291cmNlIC8vIGxlbmd0aCBtb2RpZmllcgogICAgICAgICAgKyAvKFxbW14iXF1dK1xdfFtkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdKS8uc291cmNlOyAvLyBjb252ZXJzaW9uIHR5cGUKCiAgICB0aGlzLiRydWxlcyA9IHsgCiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInNpbmdsZUxpbmVDb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD86IiArIGVzY2FwZVJlICsgInwuKT8nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsIAogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFzdHJpbmciLAogICAgICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmciLCByZWdleDogL1xcXHMqJC8sIG5leHQ6ICJxcXN0cmluZyIgfSwKICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVJlIH0sCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiBmb3JtYXRSZSB9LAogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmcuZW5kIiwgcmVnZXg6ICcifCQnLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnUiJcXCgnLCAKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInJhd1N0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogInN0cmluZy5lbmQiLCByZWdleDogJ1xcKSInLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdKyhMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8oTHxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86aW5jbHVkZXxpbXBvcnR8cHJhZ21hfGxpbmV8ZGVmaW5lfHVuZGVmKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBzcGVjaWFsIGNhc2UgcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiI1xccyooPzplbmRpZnxpZnxpZmRlZnxlbHNlfGVsaWZ8aWZuZGVmKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IGNGdW5jdGlvbnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PDw9fD4+PXw+Pj49fDw+fCYmfFx8XHx8XD86fFsqJVwvK1wtJlxefH4hPD49XT0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzaW5nbGVMaW5lQ29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIG5leHQgOiAic2luZ2xlTGluZUNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIubXVsdGlsaW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLipcXC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKjwuKz8+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXlxcXC9dKy8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhjX2NwcEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5jX2NwcEhpZ2hsaWdodFJ1bGVzID0gY19jcHBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NfY3BwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY19jcHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIGNfY3BwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpLmNfY3BwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IGNfY3BwSGlnaGxpZ2h0UnVsZXM7CgogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NfY3BwIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvY19jcHAiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-d.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9kX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgREhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJ0aGlzfHN1cGVyfGltcG9ydHxtb2R1bGV8Ym9keXxtaXhpbnxfX3RyYWl0c3xpbnZhcmlhbnR8YWxpYXN8YXNtfGRlbGV0ZXwiKwogICAgICAgICJ0eXBlb2Z8dHlwZWlkfHNpemVvZnxjYXN0fG5ld3xpbnxpc3x0eXBlZGVmfF9fdmVjdG9yfF9fcGFyYW1ldGVycyIKICAgICk7CgogICAgdmFyIGtleXdvcmRDb250cm9scyA9ICgKICAgICAgICAiYnJlYWt8Y2FzZXxjb250aW51ZXxkZWZhdWx0fGRvfGVsc2V8Zm9yfGZvcmVhY2h8Zm9yZWFjaF9yZXZlcnNlfGdvdG98aWZ8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8dHJ5fHRocm93fGZpbmFsbHl8dmVyc2lvbnxhc3NlcnR8dW5pdHRlc3R8d2l0aCIKICAgICk7CiAgICAKICAgIHZhciB0eXBlcyA9ICgKICAgICAgICAiYXV0b3xib29sfGNoYXJ8ZGNoYXJ8d2NoYXJ8Ynl0ZXx1Ynl0ZXxmbG9hdHxkb3VibGV8cmVhbHwiICsKICAgICAgICAiY2Zsb2F0fGNyZWFsfGNkb3VibGV8Y2VudHxpZmxvYXR8aXJlYWx8aWRvdWJsZXwiICsKICAgICAgICAiaW50fGxvbmd8c2hvcnR8dm9pZHx1aW50fHVsb25nfHVzaG9ydHx1Y2VudHwiICsKICAgICAgICAiZnVuY3Rpb258ZGVsZWdhdGV8c3RyaW5nfHdzdHJpbmd8ZHN0cmluZ3xzaXplX3R8cHRyZGlmZl90fGhhc2hfdHxPYmplY3QiCiAgICApOwoKICAgIHZhciBtb2RpZmllcnMgPSAoCiAgICAgICAgImFic3RyYWN0fGFsaWdufGRlYnVnfGRlcHJlY2F0ZWR8ZXhwb3J0fGV4dGVybnxjb25zdHxmaW5hbHxpbnxpbm91dHxvdXR8IiArCiAgICAgICAgInJlZnxpbW11dGFibGV8bGF6eXxub3Rocm93fG92ZXJyaWRlfHBhY2thZ2V8cHJhZ21hfHByaXZhdGV8cHJvdGVjdGVkfCIgKwogICAgICAgICJwdWJsaWN8cHVyZXxzY29wZXxzaGFyZWR8X19nc2hhcmVkfHN5bmNocm9uaXplZHxzdGF0aWN8dm9sYXRpbGUiCiAgICApOwogICAgCiAgICB2YXIgc3RvcmFnZXMgPSAoCiAgICAgICAgImNsYXNzfHN0cnVjdHx1bmlvbnx0ZW1wbGF0ZXxpbnRlcmZhY2V8ZW51bXxtYWNybyIKICAgICk7CiAgICAKICAgIHZhciBzdHJpbmdFc2NhcGVzU2VxID0gIHsKICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgcmVnZXg6ICJcXFxcKD86KD86eFswLTlBLUZdezJ9KXwoPzpbMC03XXsxLDN9KXwoPzpbJ1wiXFw/MGFiZm5ydHZcXFxcXSl8IiArCiAgICAgICAgICAgICIoPzp1WzAtOWEtZkEtRl17NH0pfCg/OlVbMC05YS1mQS1GXXs4fSkpIgogICAgfTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgKICAgICAgICAibnVsbHx0cnVlfGZhbHNlfCIrCiAgICAgICAgIl9fREFURV9ffF9fRU9GX198X19USU1FX198X19USU1FU1RBTVBfX3xfX1ZFTkRPUl9ffF9fVkVSU0lPTl9ffCIrCiAgICAgICAgIl9fRklMRV9ffF9fTU9EVUxFX198X19MSU5FX198X19GVU5DVElPTl9ffF9fUFJFVFRZX0ZVTkNUSU9OX18iCiAgICApOwogICAgCiAgICB2YXIgb3BlcmF0b3JzID0gKAogICAgICAgICIvfC9cXD18JnwmXFw9fCYmfFxcfFxcfFxcPXxcXHxcXHx8XFwtfFxcLVxcPXxcXC1cXC18XFwrfCIgKwogICAgICAgICJcXCtcXD18XFwrXFwrfFxcPHxcXDxcXD18XFw8XFw8fFxcPFxcPFxcPXxcXDxcXD58XFw8XFw+XFw9fFxcPnxcXD5cXD18XFw+XFw+XFw9fCIgKwogICAgICAgICJcXD5cXD5cXD5cXD18XFw+XFw+fFxcPlxcPlxcPnxcXCF8XFwhXFw9fFxcIVxcPFxcPnxcXCFcXDxcXD5cXD18XFwhXFw8fFxcIVxcPFxcPXwiICsKICAgICAgICAiXFwhXFw+fFxcIVxcPlxcPXxcXD98XFwkfFxcPXxcXD1cXD18XFwqfFxcKlxcPXwlfCVcXD18IiArCiAgICAgICAgIlxcXnxcXF5cXD18XFxeXFxefFxcXlxcXlxcPXx+fH5cXD18XFw9XFw+fCMiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy4ka2V5d29yZHMgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkLm1vZGlmaWVyIiA6IG1vZGlmaWVycywKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6ICBrZXl3b3JkQ29udHJvbHMsCiAgICAgICAgImtleXdvcmQudHlwZSIgOiAgICAgdHlwZXMsCiAgICAgICAgImtleXdvcmQiOiAgICAgICAgICAga2V5d29yZHMsCiAgICAgICAgImtleXdvcmQuc3RvcmFnZSI6ICAgc3RvcmFnZXMsCiAgICAgICAgInB1bmN0YXRpb24iOiAiXFwufFxcLHw7fFxcLlxcLnxcXC5cXC5cXC4iLAogICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiA6IG9wZXJhdG9ycywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgeyAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDT01NRU5UUwogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFyLWNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5zaGViYW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXlxccyojIS4qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKyIsCiAgICAgICAgICAgICAgICBuZXh0OiAicGx1cy1jb21tZW50IgogICAgICAgICAgICB9LCB7ICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNUUklOR1MKICAgICAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudW5zaGlmdCh0aGlzLm5leHQsIHZhbHVlLnN1YnN0cigyKSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAncSIoPzpbXFxbXFwoXFx7XFw8XSspJywKICAgICAgICAgICAgICAgIG5leHQ6ICdvcGVyYXRvci1oZXJlZG9jLXN0cmluZycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS51bnNoaWZ0KHRoaXMubmV4dCwgdmFsdWUuc3Vic3RyKDIpKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXg6ICdxIig/OlthLXpBLVpfXSspJCcsCiAgICAgICAgICAgICAgICBuZXh0OiAnaWRlbnRpZmllci1oZXJlZG9jLXN0cmluZycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1t4cl0/IicsCiAgICAgICAgICAgICAgICBuZXh0IDogInF1b3RlLXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1t4cl0/YCcsCiAgICAgICAgICAgICAgICBuZXh0IDogImJhY2t0aWNrLXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlt4cl0/WyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXVtjZHddPyIKICAgICAgICAgICAgfSwgeyAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSVUxFUwogICAgICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZCIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICAgICAgcmVnZXg6IC8oYXNtKShccyopKHspLywKICAgICAgICAgICAgICAgIG5leHQ6ICJkLWFzbSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZCIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIsICJjb25zdGFudC5sYW5ndWFnZSJdLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoX190cmFpdHMpKFxccyopKFxcKCkoIitpZGVudGlmaWVyUmUrIikiCiAgICAgICAgICAgIH0sIHsgLy8gaW1wb3J0fG1vZHVsZSBhYmMKICAgICAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQiLCAidGV4dCIsICJ2YXJpYWJsZS5tb2R1bGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiKGltcG9ydHxtb2R1bGUpKFxccyspKCg/OiIraWRlbnRpZmllclJlKyJcXC4/KSopIgogICAgICAgICAgICB9LCB7IC8vIHN0b3JhZ2UgTmFtZQogICAgICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZC5zdG9yYWdlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUudHlwZSJdLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoIitzdG9yYWdlcysiKShcXHMqKSgiK2lkZW50aWZpZXJSZSsiKSIKICAgICAgICAgICAgfSwgeyAvLyBhbGlhc3x0eXBlZGVmIGZvbyBiYXI7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkIiwgInRleHQiLCAidmFyaWFibGUuc3RvcmFnZSIsICJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleDogIihhbGlhc3x0eXBlZGVmKShcXHMqKSgiK2lkZW50aWZpZXJSZSsiKShcXHMqKSIKICAgICAgICAgICAgfSwgeyAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPVEhFUlMKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl9dKyhsfHVsfHV8ZnxGfEx8VXxVTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkW1xcZF9dKig/Oig/OlxcLltcXGRfXSopPyg/OltlRV1bKy1dP1tcXGRfXSspPyk/KGx8dWx8dXxmfEZ8THxVfFVMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiQCIraWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfXVthLXpBLVowLTlfXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiBvcGVyYXRvcnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFw/fFxcOnxcXCx8XFw7fFxcLnxcXDoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInN0YXItY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICdjb21tZW50JwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicGx1cy1jb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwrXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQnCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIAogICAgICAgICJxdW90ZS1zdHJpbmciIDogWwogICAgICAgICAgIHN0cmluZ0VzY2FwZXNTZXEsCiAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJbY2R3XT8nLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAnc3RyaW5nJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAKICAgICAgICAiYmFja3RpY2stc3RyaW5nIiA6IFsKICAgICAgICAgICBzdHJpbmdFc2NhcGVzU2VxLAogICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdgW2Nkd10/JywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogJ3N0cmluZycKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgCiAgICAgICAgIm9wZXJhdG9yLWhlcmVkb2Mtc3RyaW5nIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHZhbHVlLmxlbmd0aC0yLCB2YWx1ZS5sZW5ndGgtMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IHsnPic6JzwnLCddJzonWycsJyknOicoJywnfSc6J3snfTsKICAgICAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhtYXApLmluZGV4T2YodmFsdWUpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1hcFt2YWx1ZV07CiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gc3RhdGVbMV0pIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKD86W1xcXVxcKX0+XSspIicsCiAgICAgICAgICAgICAgICBuZXh0OiAnc3RhcnQnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAnc3RyaW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnW15cXF1cXCl9Pl0rJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAKICAgICAgICAiaWRlbnRpZmllci1oZXJlZG9jLXN0cmluZyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5sZW5ndGgtMSk7CiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUgIT0gc3RhdGVbMV0pIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHN0YXRlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXig/OltBLVphLXpfXVthLXpBLVowLTldKykiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdzdGFydCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdbXlxcXVxcKX0+XSsnCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIAogICAgICAgICJkLWFzbSI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXH0iLAogICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2tleXdvcmQuaW5zdHJ1Y3Rpb24nLAogICAgICAgICAgICAgICAgcmVnZXg6ICdbYS16QS1aXSsnLAogICAgICAgICAgICAgICAgbmV4dDogJ2QtYXNtLWluc3RydWN0aW9uJyAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgJ2QtYXNtLWluc3RydWN0aW9uJzogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAvQUx8QUh8QVh8RUFYfEJMfEJIfEJYfEVCWHxDTHxDSHxDWHxFQ1h8REx8REh8RFh8RURYfEJQfEVCUHxTUHxFU1B8REl8RURJfFNJfEVTSS9pCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAnaWRlbnRpZmllcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1thLXpBLVpdKycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICciLioiJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2NvbW1lbnQnLAogICAgICAgICAgICAgICAgcmVnZXg6ICcvLy4qJCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdjb25zdGFudC5udW1lcmljJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnWzAtOS54QS1GXSsnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24ub3BlcmF0b3InLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCwnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24ub3BlcmF0b3InLAogICAgICAgICAgICAgICAgcmVnZXg6ICc7JywKICAgICAgICAgICAgICAgIG5leHQ6ICdkLWFzbScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxzKycKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Cn07CgpESGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7CiAgICAgIGNvbW1lbnQ6ICdEIGxhbmd1YWdlJywKICAgICAgZmlsZVR5cGVzOiBbICdkJywgJ2RpJyBdLAogICAgICBmaXJzdExpbmVNYXRjaDogJ14jIS4qXFxiW2dscl0/ZG1kXFxiLicsCiAgICAgIGZvbGRpbmdTdGFydE1hcmtlcjogJyg/eCkvXFwqXFwqKD8hXFwqKXxeKD8hW157XSo/Ly98W157XSo/L1xcKig/IS4qP1xcKi8uKj9cXHspKS4qP1xce1xccyooJHwvL3wvXFwqKD8hLio/XFwqLy4qXFxTKSknLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJyg/PCFcXCopXFwqXFwqL3xeXFxzKlxcfScsCiAgICAgIGtleUVxdWl2YWxlbnQ6ICdefkQnLAogICAgICBuYW1lOiAnRCcsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5kJwp9Owpvb3AuaW5oZXJpdHMoREhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5ESGlnaGxpZ2h0UnVsZXMgPSBESGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2RfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBESGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RfaGlnaGxpZ2h0X3J1bGVzIikuREhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IERIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2QiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-dart.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY0Z1bmN0aW9ucyA9IGV4cG9ydHMuY0Z1bmN0aW9ucyA9ICJcXGIoPzpoeXBvdCg/OmZ8bCk/fHMoPzpzY2FuZnx5c3RlbXxucHJpbnRmfGNhKD86bmZ8bGIoPzpuKD86ZnxsKT98bG4oPzpmfGwpPykpfGkoPzpuKD86aCg/OmZ8bCk/fGZ8bCk/fGduKD86YWx8Yml0KSl8dHIoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT8pfGVycm9yfHBicmt8ZnRpbWV8bGVufHJjaHJ8eGZybSl8cHJpbnRmfGV0KD86am1wfHZidWZ8bG9jYWxlfGJ1Zil8cXJ0KD86ZnxsKT98dyg/OnNjYW5mfHByaW50Zil8cmFuZCl8big/OmUoPzphcmJ5aW50KD86ZnxsKT98eHQoPzp0b3dhcmQoPzpmfGwpP3xhZnRlcig/OmZ8bCk/KSl8YW4oPzpmfGwpPyl8Yyg/OnMoPzppbig/OmgoPzpmfGwpP3xmfGwpP3xxcnQoPzpmfGwpPyl8Y29zKD86aCg/OmYpP3xmfGwpP3xpbWFnKD86ZnxsKT98dCg/OmltZXxhbig/OmgoPzpmfGwpP3xmfGwpPyl8byg/OnMoPzpoKD86ZnxsKT98ZnxsKT98bmooPzpmfGwpP3xweXNpZ24oPzpmfGwpPyl8cCg/Om93KD86ZnxsKT98cm9qKD86ZnxsKT8pfGUoPzppbCg/OmZ8bCk/fHhwKD86ZnxsKT8pfGwoPzpvKD86Y2t8Zyg/OmZ8bCk/KXxlYXJlcnIpfGEoPzpzaW4oPzpoKD86ZnxsKT98ZnxsKT98Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHRhbig/OmgoPzpmfGwpP3xmfGwpP3xsbG9jfHJnKD86ZnxsKT98YnMoPzpmfGwpPyl8cmVhbCg/OmZ8bCk/fGJydCg/OmZ8bCk/KXx0KD86aW1lfG8oPzp1cHBlcnxsb3dlcil8YW4oPzpoKD86ZnxsKT98ZnxsKT98cnVuYyg/OmZ8bCk/fGdhbW1hKD86ZnxsKT98bXAoPzpuYW18ZmlsZSkpfGkoPzpzKD86c3BhY2V8big/Om9ybWFsfGFuKXxjbnRybHxpbmZ8ZGlnaXR8dSg/Om5vcmRlcmVkfHBwZXIpfHAoPzp1bmN0fHJpbnQpfGZpbml0ZXx3KD86c3BhY2V8Yyg/Om50cmx8dHlwZSl8ZGlnaXR8dXBwZXJ8cCg/OnVuY3R8cmludCl8bG93ZXJ8YWwoPzpudW18cGhhKXxncmFwaHx4ZGlnaXR8YmxhbmspfGwoPzpvd2VyfGVzcyg/OmVxdWFsfGdyZWF0ZXIpPyl8YWwoPzpudW18cGhhKXxncig/OmVhdGVyKD86ZXF1YWwpP3xhcGgpfHhkaWdpdHxibGFuayl8bG9nYig/OmZ8bCk/fG1heCg/OmRpdnxhYnMpKXxkaSg/OnZ8ZmZ0aW1lKXxfRXhpdHx1bmdldCg/OmN8d2MpfHAoPzpvdyg/OmZ8bCk/fHV0KD86c3xjKD86aGFyKT98d2MoPzpoYXIpPyl8ZXJyb3J8cmludGYpfGUoPzpyZig/OmMoPzpmfGwpP3xmfGwpP3x4KD86aXR8cCg/OjIoPzpmfGwpP3xmfGx8bTEoPzpmfGwpPyk/KSl8dig/OnMoPzpzY2FuZnxucHJpbnRmfGNhbmZ8cHJpbnRmfHcoPzpzY2FuZnxwcmludGYpKXxwcmludGZ8Zig/OnNjYW5mfHByaW50Znx3KD86c2NhbmZ8cHJpbnRmKSl8dyg/OnNjYW5mfHByaW50Zil8YV8oPzpzdGFydHxjb3B5fGVuZHxhcmcpKXxxc29ydHxmKD86cyg/OmNhbmZ8ZSg/OnRwb3N8ZWspKXxjbG9zZXx0ZWxsfG9wZW58ZGltKD86ZnxsKT98cCg/OmNsYXNzaWZ5fHV0KD86c3xjfHcoPzpzfGMpKXxyaW50Zil8ZSg/OmhvbGRleGNlcHR8c2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpfGNsZWFyZXhjZXB0fHRlc3RleGNlcHR8b2Z8dXBkYXRlZW52fHIoPzphaXNlZXhjZXB0fHJvcil8Z2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpKXxmbHVzaHx3KD86c2NhbmZ8aWRlfHByaW50ZnxyaXRlKXxsb29yKD86ZnxsKT98YWJzKD86ZnxsKT98Z2V0KD86c3xjfHBvc3x3KD86c3xjKSl8cmUoPzpvcGVufGV8YWR8eHAoPzpmfGwpPyl8bSg/OmluKD86ZnxsKT98b2QoPzpmfGwpP3xhKD86ZnxsfHgoPzpmfGwpPyk/KSl8bCg/OmQoPzppdnxleHAoPzpmfGwpPyl8byg/Om5nam1wfGNhbCg/OnRpbWV8ZWNvbnYpfGcoPzoxKD86cCg/OmZ8bCk/fDAoPzpmfGwpPyl8Mig/OmZ8bCk/fGZ8bHxiKD86ZnxsKT8pPyl8YWJzfGwoPzpkaXZ8YWJzfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT8pKXxyKD86aW50KD86ZnxsKT98b3VuZCg/OmZ8bCk/KXxnYW1tYSg/OmZ8bCk/KXx3KD86c2NhbmZ8Yyg/OnMoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT98bWJzKXxwYnJrfGZ0aW1lfGxlbnxyKD86Y2hyfHRvbWJzKXx4ZnJtKXx0byg/OmJ8bWIpfHJ0b21iKXxwcmludGZ8bWVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSkpfGEoPzpzKD86c2VydHxjdGltZXxpbig/OmgoPzpmfGwpP3xmfGwpPyl8Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHQoPzpvKD86aXxmfGwoPzpsKT8pfGV4aXR8YW4oPzpoKD86ZnxsKT98Mig/OmZ8bCk/fGZ8bCk/KXxiKD86c3xvcnQpKXxnKD86ZXQoPzpzfGMoPzpoYXIpP3xlbnZ8d2MoPzpoYXIpPyl8bXRpbWUpfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT98ZSg/Om5hbWV8YWxsb2N8d2luZHxtKD86b3ZlfHF1byg/OmZ8bCk/fGFpbmRlcig/OmZ8bCk/KSl8YSg/Om5kfGlzZSkpfGIoPzpzZWFyY2h8dG93Yyl8bSg/Om9kZig/OmZ8bCk/fGVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSl8a3RpbWV8YWxsb2N8Yig/OnMoPzppbml0fHRvd2NzfHJ0b3djcyl8dG93Y3xsZW58cig/OnRvd2N8bGVuKSkpKVxcYiI7Cgp2YXIgY19jcHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkQ29udHJvbHMgPSAoCiAgICAgICAgImJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGZvcnxnb3RvfGlmfF9QcmFnbWF8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8b3BlcmF0b3J8dHJ5fHRocm93fHVzaW5nIgogICAgKTsKICAgIAogICAgdmFyIHN0b3JhZ2VUeXBlID0gKAogICAgICAgICJhc218X19hc21fX3xhdXRvfGJvb2x8X0Jvb2x8Y2hhcnxfQ29tcGxleHxkb3VibGV8ZW51bXxmbG9hdHwiICsKICAgICAgICAiX0ltYWdpbmFyeXxpbnR8bG9uZ3xzaG9ydHxzaWduZWR8c3RydWN0fHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHwiICsKICAgICAgICAiY2xhc3N8d2NoYXJfdHx0ZW1wbGF0ZXxjaGFyMTZfdHxjaGFyMzJfdCIKICAgICk7CgogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAoCiAgICAgICAgImNvbnN0fGV4dGVybnxyZWdpc3RlcnxyZXN0cmljdHxzdGF0aWN8dm9sYXRpbGV8aW5saW5lfHByaXZhdGV8IiArCiAgICAgICAgInByb3RlY3RlZHxwdWJsaWN8ZnJpZW5kfGV4cGxpY2l0fHZpcnR1YWx8ZXhwb3J0fG11dGFibGV8dHlwZW5hbWV8IiArCiAgICAgICAgImNvbnN0ZXhwcnxuZXd8ZGVsZXRlfGFsaWduYXN8YWxpZ25vZnxkZWNsdHlwZXxub2V4Y2VwdHx0aHJlYWRfbG9jYWwiCiAgICApOwoKICAgIHZhciBrZXl3b3JkT3BlcmF0b3JzID0gKAogICAgICAgICJhbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxjb21wbHxub3R8bm90X2VxfG9yfG9yX2VxfHR5cGVpZHx4b3J8eG9yX2VxfCIgKwogICAgICAgICJjb25zdF9jYXN0fGR5bmFtaWNfY2FzdHxyZWludGVycHJldF9jYXN0fHN0YXRpY19jYXN0fHNpemVvZnxuYW1lc3BhY2UiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJOVUxMfHRydWV8ZmFsc2V8VFJVRXxGQUxTRXxudWxscHRyIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuJGtleXdvcmRzID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6IGtleXdvcmRDb250cm9scywKICAgICAgICAic3RvcmFnZS50eXBlIiA6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiIDoga2V5d29yZE9wZXJhdG9ycywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CiAgICB2YXIgZXNjYXBlUmUgPSAvXFwoPzpbJyI/XFxhYmZucnR2XXxbMC03XXsxLDN9fHhbYS1mQS1GXGRdezJ9fHVbYS1mQS1GXGRdezR9VVthLWZBLUZcZF17OH18LikvLnNvdXJjZTsKICAgIHZhciBmb3JtYXRSZSA9ICIlIgogICAgICAgICAgKyAvKFxkK1wkKT8vLnNvdXJjZSAvLyBmaWVsZCAoYXJndW1lbnQgIykKICAgICAgICAgICsgL1sjMFwtICsnXSovLnNvdXJjZSAvLyBmbGFncwogICAgICAgICAgKyAvWyw7Ol9dPy8uc291cmNlIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXIgKEFsdGlWZWMpCiAgICAgICAgICArIC8oKC0/XGQrKXxcKigtP1xkK1wkKT8pPy8uc291cmNlIC8vIG1pbmltdW0gZmllbGQgd2lkdGgKICAgICAgICAgICsgLyhcLigoLT9cZCspfFwqKC0/XGQrXCQpPyk/KT8vLnNvdXJjZSAvLyBwcmVjaXNpb24KICAgICAgICAgICsgLyhoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpPy8uc291cmNlIC8vIGxlbmd0aCBtb2RpZmllcgogICAgICAgICAgKyAvKFxbW14iXF1dK1xdfFtkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdKS8uc291cmNlOyAvLyBjb252ZXJzaW9uIHR5cGUKCiAgICB0aGlzLiRydWxlcyA9IHsgCiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInNpbmdsZUxpbmVDb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD86IiArIGVzY2FwZVJlICsgInwuKT8nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsIAogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFzdHJpbmciLAogICAgICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmciLCByZWdleDogL1xcXHMqJC8sIG5leHQ6ICJxcXN0cmluZyIgfSwKICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVJlIH0sCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiBmb3JtYXRSZSB9LAogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmcuZW5kIiwgcmVnZXg6ICcifCQnLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnUiJcXCgnLCAKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInJhd1N0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogInN0cmluZy5lbmQiLCByZWdleDogJ1xcKSInLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdKyhMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8oTHxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86aW5jbHVkZXxpbXBvcnR8cHJhZ21hfGxpbmV8ZGVmaW5lfHVuZGVmKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBzcGVjaWFsIGNhc2UgcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiI1xccyooPzplbmRpZnxpZnxpZmRlZnxlbHNlfGVsaWZ8aWZuZGVmKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IGNGdW5jdGlvbnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PDw9fD4+PXw+Pj49fDw+fCYmfFx8XHx8XD86fFsqJVwvK1wtJlxefH4hPD49XT0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzaW5nbGVMaW5lQ29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIG5leHQgOiAic2luZ2xlTGluZUNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIubXVsdGlsaW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLipcXC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKjwuKz8+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXlxcXC9dKy8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhjX2NwcEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5jX2NwcEhpZ2hsaWdodFJ1bGVzID0gY19jcHBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NfY3BwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY19jcHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIGNfY3BwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpLmNfY3BwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IGNfY3BwSGlnaGxpZ2h0UnVsZXM7CgogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NfY3BwIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZGFydF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERhcnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBjb25zdGFudExhbmd1YWdlID0gInRydWV8ZmFsc2V8bnVsbCI7CiAgICB2YXIgdmFyaWFibGVMYW5ndWFnZSA9ICJ0aGlzfHN1cGVyIjsKICAgIHZhciBrZXl3b3JkQ29udHJvbCA9ICJ0cnl8Y2F0Y2h8ZmluYWxseXx0aHJvd3xyZXRocm93fGFzc2VydHxicmVha3xjYXNlfGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxmb3J8aWZ8aW58cmV0dXJufHN3aXRjaHx3aGlsZXxuZXd8ZGVmZXJyZWR8YXN5bmN8YXdhaXQiOwogICAgdmFyIGtleXdvcmREZWNsYXJhdGlvbiA9ICJhYnN0cmFjdHxjbGFzc3xleHRlbmRzfGV4dGVybmFsfGZhY3Rvcnl8aW1wbGVtZW50c3xnZXR8bmF0aXZlfG9wZXJhdG9yfHNldHx0eXBlZGVmfHdpdGh8ZW51bSI7CiAgICB2YXIgc3RvcmFnZU1vZGlmaWVyID0gInN0YXRpY3xmaW5hbHxjb25zdCI7CiAgICB2YXIgc3RvcmFnZVR5cGUgPSAidm9pZHxib29sfG51bXxpbnR8ZG91YmxlfGR5bmFtaWN8dmFyfFN0cmluZyI7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5kYXJ0IjogY29uc3RhbnRMYW5ndWFnZSwKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UuZGFydCI6IHZhcmlhYmxlTGFuZ3VhZ2UsCiAgICAgICAgImtleXdvcmQuY29udHJvbC5kYXJ0Ijoga2V5d29yZENvbnRyb2wsCiAgICAgICAgImtleXdvcmQuZGVjbGFyYXRpb24uZGFydCI6IGtleXdvcmREZWNsYXJhdGlvbiwKICAgICAgICAic3RvcmFnZS5tb2RpZmllci5kYXJ0Ijogc3RvcmFnZU1vZGlmaWVyLAogICAgICAgICJzdG9yYWdlLnR5cGUucHJpbWl0aXZlLmRhcnQiOiBzdG9yYWdlVHlwZQogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgc3RyaW5nZmlsbCA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICByZWdleCA6IC9cXC4vCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgcmVnZXggOiAvXCQoPzpcdyt8e1teIid9XSt9KT8vCiAgICB9LCB7CiAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgIH1dOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgInN0YXJ0IjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCiAgICAgICAgfSwKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAvXC9cKi8sCiAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsibWV0YS5wcmVwcm9jZXNzb3Iuc2NyaXB0LmRhcnQiXSwKICAgICAgICAgICAgcmVnZXg6ICJeKCMhLiopJCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyLmltcG9ydC5kYXJ0IiwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKD86bGlicmFyeXxpbXBvcnR8ZXhwb3J0fHBhcnR8b2Z8c2hvd3xoaWRlKSg/OlxcYikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkLm90aGVyLmltcG9ydC5kYXJ0IiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86XFxiKShwcmVmaXgpKFxccyo6KSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgcmVnZXg6ICJcXGJhc1xcYiIsCiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jYXN0LmRhcnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiXFw/fDoiLAogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbC50ZXJuYXJ5LmRhcnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKShpc1xcIT8pKD86XFxiKSIsCiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3BlcmF0b3IuZGFydCJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiKDw8fD4+Pj98fnxcXF58XFx8fCYpIiwKICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZC5vcGVyYXRvci5iaXR3aXNlLmRhcnQiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICByZWdleDogIigoPzomfFxcXnxcXHx8PDx8Pj4+Pyk9KSIsCiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3BlcmF0b3IuYXNzaWdubWVudC5iaXR3aXNlLmRhcnQiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICByZWdleDogIig9PT0/fCE9PT98PD0/fD49PykiLAogICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkLm9wZXJhdG9yLmNvbXBhcmlzb24uZGFydCJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiKCg/OlsrKi8lLV18XFx+KT0pIiwKICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmFyaXRobWV0aWMuZGFydCJdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiPSIsCiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmRhcnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIicnJyIsCiAgICAgICAgICAgIG5leHQgOiAicWRvYyIKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJyIiIicsCiAgICAgICAgICAgIG5leHQgOiAicXFkb2MiCiAgICAgICAgfSwgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIG5leHQgOiAicXFzdHJpbmciCiAgICAgICAgfSwgCiAgICAgICAgewogICAgICAgICAgICByZWdleDogIihcXC1cXC18XFwrXFwrKSIsCiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3BlcmF0b3IuaW5jcmVtZW50LWRlY3JlbWVudC5kYXJ0Il0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgcmVnZXg6ICIoXFwtfFxcK3xcXCp8XFwvfFxcflxcL3wlKSIsCiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3BlcmF0b3IuYXJpdGhtZXRpYy5kYXJ0Il0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgcmVnZXg6ICIoIXwmJnxcXHxcXHwpIiwKICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZC5vcGVyYXRvci5sb2dpY2FsLmRhcnQiXQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgfQogICAgXSwKICAgICJjb21tZW50IiA6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgIH0KICAgIF0sCiAgICAicWRvYyIgOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICInJyciLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0KICAgIF0uY29uY2F0KHN0cmluZ2ZpbGwpLAoKICAgICJxcWRvYyIgOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICciIiInLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0KICAgIF0uY29uY2F0KHN0cmluZ2ZpbGwpLAoKICAgICJxc3RyaW5nIiA6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfQogICAgXS5jb25jYXQoc3RyaW5nZmlsbCksCgogICAgInFxc3RyaW5nIiA6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfQogICAgXS5jb25jYXQoc3RyaW5nZmlsbCkKfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKfTsKCm9vcC5pbmhlcml0cyhEYXJ0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkRhcnRIaWdobGlnaHRSdWxlcyA9IERhcnRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RhcnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2NfY3BwIiwiYWNlL21vZGUvZGFydF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIENNb2RlID0gcmVxdWlyZSgiLi9jX2NwcCIpLk1vZGU7CnZhciBEYXJ0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RhcnRfaGlnaGxpZ2h0X3J1bGVzIikuRGFydEhpZ2hsaWdodFJ1bGVzOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgQ01vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBEYXJ0SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgQ01vZGUpOwoKKGZ1bmN0aW9uKCkgeyAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2RhcnQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9kYXJ0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kaWZmX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERpZmZIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbewogICAgICAgICAgICAgICAgcmVnZXg6ICJeKD86XFwqezE1fXw9ezY3fXwtezN9fFxcK3szfSkkIiwKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zZXBhcmF0b3IuZGlmZiIsCiAgICAgICAgICAgICAgICAibmFtZSI6ICJrZXl3b3JkIgogICAgICAgICAgICB9LCB7IC8vZGlmZi5yYW5nZS51bmlmaWVkCiAgICAgICAgICAgICAgICByZWdleDogIl4oQEApKFxccyouKz9cXHMqKShAQCkoLiopJCIsCiAgICAgICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgICAgICJjb25zdGFudCIsCiAgICAgICAgICAgICAgICAgICAgImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgICAgICJjb25zdGFudCIsCiAgICAgICAgICAgICAgICAgICAgImNvbW1lbnQuZG9jLnRhZyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgeyAvL2RpZmYucmFuZ2Uubm9ybWFsCiAgICAgICAgICAgICAgICByZWdleDogIl4oXFxkKykoWyxcXGRdKykoYXxkfGMpKFxcZCspKFssXFxkXSspKC4qKSQiLAogICAgICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICAgICAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24ucmFuZ2UuZGlmZiIsCiAgICAgICAgICAgICAgICAgICAgImNvbnN0YW50LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgICAgICAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24ucmFuZ2UuZGlmZiIsCiAgICAgICAgICAgICAgICAgICAgImludmFsaWQiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm5hbWUiOiAibWV0YS4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXihcXC17M318XFwrezN9fFxcKnszfSkoIC4rKSQiLAogICAgICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICAgICAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7IC8vIGFkZGVkCiAgICAgICAgICAgICAgICByZWdleDogIl4oWyErPl0pKC4qPykoXFxzKikkIiwKICAgICAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgeyAvLyByZW1vdmVkCiAgICAgICAgICAgICAgICByZWdleDogIl4oWzxcXC1dKSguKj8pKFxccyopJCIsCiAgICAgICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICJeKGRpZmYpKFxccystLVxcdyspPyguKz8pKCAuKyk/JCIsCiAgICAgICAgICAgICAgICB0b2tlbjogWyJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIsICJrZXl3b3JkIiwgInZhcmlhYmxlIl0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICJeSW5kZXguKyQiLAogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICJeXFxzKyQiLAogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICByZWdleDogIlxccyokIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiaW52YWxpZCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiaW52aXNpYmxlIiwKICAgICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEaWZmSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkRpZmZIaWdobGlnaHRSdWxlcyA9IERpZmZIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZGlmZiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGxldmVscywgZmxhZykgewoJdGhpcy5yZWdFeHBMaXN0ID0gbGV2ZWxzOwoJdGhpcy5mbGFnID0gZmxhZzsKCXRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gUmVnRXhwKCJeKCIgKyBsZXZlbHMuam9pbigifCIpICsgIikiLCB0aGlzLmZsYWcpOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnQgPSB7cm93OiByb3csIGNvbHVtbjogbGluZS5sZW5ndGh9OwoKICAgICAgICB2YXIgcmVnTGlzdCA9IHRoaXMucmVnRXhwTGlzdDsKICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSByZWdMaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciByZSA9IFJlZ0V4cCgiXigiICsgcmVnTGlzdC5zbGljZSgwLCBpKS5qb2luKCJ8IikgKyAiKSIsIHRoaXMuZmxhZyk7CiAgICAgICAgICAgIGlmIChyZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBsID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsgKytyb3cgPCBsOyApIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICBpZiAocmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAocm93ID09IHN0YXJ0LnJvdyArIDEpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uLCByb3cgLSAxLCBsaW5lLmxlbmd0aCk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RpZmYiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9kaWZmX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvZGlmZiJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kaWZmX2hpZ2hsaWdodF9ydWxlcyIpLkRpZmZIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2RpZmYiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZShbImRpZmYiLCAiQEB8XFwqezV9Il0sICJpIik7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZGlmZiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9kaWZmIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-django.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9kamFuZ28iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERqYW5nb0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKXsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICdzdGFydCc6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICciLio/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInLio/JyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAogICAgICAgICAgICByZWdleDogJ1swLTldKycKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleDogIlstX2EtekEtWjAtOTpdKyIKICAgICAgICB9XSwKICAgICAgICAndGFnJzogW3sKICAgICAgICAgICAgdG9rZW46ICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl1bX2EtekEtWjAtOV0qIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH1dCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKERqYW5nb0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKdmFyIERqYW5nb0h0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSBuZXcgSHRtbEhpZ2hsaWdodFJ1bGVzKCkuZ2V0UnVsZXMoKTsKCiAgICBmb3IgKHZhciBpIGluIHRoaXMuJHJ1bGVzKSB7CiAgICAgICAgdGhpcy4kcnVsZXNbaV0udW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsjLio/I1xcfSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5ibG9jayIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx7XFwlXFxzKmNvbW1lbnRcXHMqXFwlXFx9IiwKICAgICAgICAgICAgbWVyZ2U6IHRydWUsCiAgICAgICAgICAgIG5leHQ6ICJkamFuZ28tY29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogIlxce1xceyIsCiAgICAgICAgICAgIG5leHQ6ICJkamFuZ28tc3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHtcXCUiLAogICAgICAgICAgICBuZXh0OiAiZGphbmdvLXRhZyIKICAgICAgICB9KTsKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoRGphbmdvSGlnaGxpZ2h0UnVsZXMsICJkamFuZ28tIiwgW3sKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5ibG9jayIsCiAgICAgICAgICAgICAgICByZWdleDogIlxce1xcJVxccyplbmRjb21tZW50XFxzKlxcJVxcfSIsCiAgICAgICAgICAgICAgICBtZXJnZTogdHJ1ZSwKICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcJVxcfSIsCiAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXH1cXH0iLAogICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH1dKTsKICAgIH0KfTsKCm9vcC5pbmhlcml0cyhEamFuZ29IdG1sSGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgSHRtbE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBEamFuZ29IdG1sSGlnaGxpZ2h0UnVsZXM7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBIdG1sTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9kamFuZ28iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9kamFuZ28iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-dockerfile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zaF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciByZXNlcnZlZEtleXdvcmRzID0gZXhwb3J0cy5yZXNlcnZlZEtleXdvcmRzID0gKAogICAgICAgICchfHt8fXxjYXNlfGRvfGRvbmV8ZWxpZnxlbHNlfCcrCiAgICAgICAgJ2VzYWN8Zml8Zm9yfGlmfGlufHRoZW58dW50aWx8d2hpbGV8JysKICAgICAgICAnJnw7fGV4cG9ydHxsb2NhbHxyZWFkfHR5cGVzZXR8dW5zZXR8JysKICAgICAgICAnZWxpZnxzZWxlY3R8c2V0fGZ1bmN0aW9ufGRlY2xhcmV8cmVhZG9ubHknCiAgICApOwoKdmFyIGxhbmd1YWdlQ29uc3RydWN0cyA9IGV4cG9ydHMubGFuZ3VhZ2VDb25zdHJ1Y3RzID0gKAogICAgJ1t8XXxhbGlhc3xiZ3xiaW5kfGJyZWFrfGJ1aWx0aW58JysKICAgICAnY2R8Y29tbWFuZHxjb21wZ2VufGNvbXBsZXRlfGNvbnRpbnVlfCcrCiAgICAgJ2RpcnN8ZGlzb3dufGVjaG98ZW5hYmxlfGV2YWx8ZXhlY3wnKwogICAgICdleGl0fGZjfGZnfGdldG9wdHN8aGFzaHxoZWxwfGhpc3Rvcnl8JysKICAgICAnam9ic3xraWxsfGxldHxsb2dvdXR8cG9wZHxwcmludGZ8cHVzaGR8JysKICAgICAncHdkfHJldHVybnxzZXR8c2hpZnR8c2hvcHR8c291cmNlfCcrCiAgICAgJ3N1c3BlbmR8dGVzdHx0aW1lc3x0cmFwfHR5cGV8dWxpbWl0fCcrCiAgICAgJ3VtYXNrfHVuYWxpYXN8d2FpdCcKKTsKCnZhciBTaEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiByZXNlcnZlZEtleXdvcmRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uLmJ1aWx0aW4iOiBsYW5ndWFnZUNvbnN0cnVjdHMsCiAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6ICJkZWJ1Z2dlciIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwoKICAgIHZhciBmcmFjdGlvbiA9ICIoPzpcXC5cXGQrKSI7CiAgICB2YXIgaW50UGFydCA9ICIoPzpcXGQrKSI7CiAgICB2YXIgcG9pbnRGbG9hdCA9ICIoPzooPzoiICsgaW50UGFydCArICI/IiArIGZyYWN0aW9uICsgIil8KD86IiArIGludFBhcnQgKyAiXFwuKSkiOwogICAgdmFyIGV4cG9uZW50RmxvYXQgPSAiKD86KD86IiArIHBvaW50RmxvYXQgKyAifCIgKyAgaW50UGFydCArICIpIiArICIpIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzoiICsgZXhwb25lbnRGbG9hdCArICJ8IiArIHBvaW50RmxvYXQgKyAiKSI7CiAgICB2YXIgZmlsZURlc2NyaXB0b3IgPSAiKD86JiIgKyBpbnRQYXJ0ICsgIikiOwoKICAgIHZhciB2YXJpYWJsZU5hbWUgPSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7CiAgICB2YXIgdmFyaWFibGUgPSAiKD86IiArIHZhcmlhYmxlTmFtZSArICIoPz09KSkiOwoKICAgIHZhciBidWlsdGluVmFyaWFibGUgPSAiKD86XFwkKD86U0hMVkx8XFwkfFxcIXxcXD8pKSI7CgogICAgdmFyIGZ1bmMgPSAiKD86IiArIHZhcmlhYmxlTmFtZSArICJcXHMqXFwoXFwpKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50IiwKICAgICAgICAgICAgcmVnZXggOiAvXFwuLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAiY29tbWVudCJdLAogICAgICAgICAgICByZWdleCA6IC8oXnxccykoIy4qKSQvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbJGAiXFxdfCQpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlIDogInZhcmlhYmxlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9gLyAvLyBUT0RPIGhpZ2hsaWdodCBgCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXCQnIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbYWJlRWZucnR2XFwnIl18eFthLWZBLUZcZF17MSwyfXx1W2EtZkEtRlxkXXs0fShbYS1mQS1GXGRdezR9KT98Yy58XGR7MSwzfSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIjw8PCIsCiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiCiAgICAgICAgfSwgewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJoZXJlZG9jIiwKICAgICAgICAgICAgcmVnZXggOiAiKDw8LT8pKFxccyopKFsnXCJgXT8pKFtcXHdcXC1dKykoWydcImBdPykiLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdmFsdWVbMl0gPT0gJy0nID8gImluZGVudGVkSGVyZWRvYyIgOiAiaGVyZWRvYyI7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gdmFsdWUuc3BsaXQodGhpcy5zcGxpdFJlZ2V4KTsKICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzRdKTsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAge3R5cGU6ImNvbnN0YW50IiwgdmFsdWU6IHRva2Vuc1sxXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InRleHQiLCB2YWx1ZTogdG9rZW5zWzJdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1szXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InN1cHBvcnQuY2xhc3MiLCB2YWx1ZTogdG9rZW5zWzRdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s1XX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICBoZXJlZG9jOiBbewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6ICBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXlx0KyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzdGFja1sxXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIuKiQiLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgIG5leHQgOiBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrWzBdOwogICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAidGV4dCIsICJ0ZXh0IiwgInRleHQiLCAidmFyaWFibGUiXSwKICAgICAgICAgICAgcmVnZXggOiAvKGRlY2xhcmV8bG9jYWx8cmVhZG9ubHkpKFxzKykoPzooLVtmaXhhcl0rKShccyspKT8oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxiKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXggOiBidWlsdGluVmFyaWFibGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiB2YXJpYWJsZQogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6ICJ2YXJpYWJsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiBmdW5jCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiBmaWxlRGVzY3JpcHRvcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vICcgc3RyaW5nCiAgICAgICAgICAgIHN0YXJ0IDogIiciLCBlbmQgOiAiJyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6IGZsb2F0TnVtYmVyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaW50ZWdlcgogICAgICAgICAgICByZWdleCA6IGludGVnZXIgKyAiXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aX11bYS16QS1aMC05X10qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfH58PHw+fDw9fD0+fD18IT18WyUmfGBdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICI7IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcW1xcKFxce10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXClcXH1dIiwKICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgfV0sCiAgICAgICAgdmFyaWFibGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJCkoXHcrKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShcKCkvLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInZhcmlhYmxlIiwgInBhcmVuLmxwYXJlbiIsICJrZXl3b3JkLm9wZXJhdG9yIiwgInZhcmlhYmxlIiwgImtleXdvcmQub3BlcmF0b3IiXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShceykoWyMhXT8pKFx3K3xbKkAjP1wtJCEwX10pKDpbPytcLT1dP3wjIz98JSU/fCwsP1wvfFxeXF4/KT8vLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6IC9cJFsqQCM/XC0kITBfXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShceykvLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH1dCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoU2hIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2hIaWdobGlnaHRSdWxlcyA9IFNoSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zaF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTaEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zaF9oaWdobGlnaHRfcnVsZXMiKS5TaEhpZ2hsaWdodFJ1bGVzOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFNoSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcWzpdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHZhciBvdXRkZW50cyA9IHsKICAgICAgICAicGFzcyI6IDEsCiAgICAgICAgInJldHVybiI6IDEsCiAgICAgICAgInJhaXNlIjogMSwKICAgICAgICAiYnJlYWsiOiAxLAogICAgICAgICJjb250aW51ZSI6IDEKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoaW5wdXQgIT09ICJcclxuIiAmJiBpbnB1dCAhPT0gIlxyIiAmJiBpbnB1dCAhPT0gIlxuIikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUudHJpbSgpLCBzdGF0ZSkudG9rZW5zOwoKICAgICAgICBpZiAoIXRva2VucykKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGRvIHsKICAgICAgICAgICAgdmFyIGxhc3QgPSB0b2tlbnMucG9wKCk7CiAgICAgICAgfSB3aGlsZSAobGFzdCAmJiAobGFzdC50eXBlID09ICJjb21tZW50IiB8fCAobGFzdC50eXBlID09ICJ0ZXh0IiAmJiBsYXN0LnZhbHVlLm1hdGNoKC9eXHMrJC8pKSkpOwoKICAgICAgICBpZiAoIWxhc3QpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIChsYXN0LnR5cGUgPT0gImtleXdvcmQiICYmIG91dGRlbnRzW2xhc3QudmFsdWVdKTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewoKICAgICAgICByb3cgKz0gMTsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKHJvdykpOwogICAgICAgIHZhciB0YWIgPSBkb2MuZ2V0VGFiU3RyaW5nKCk7CiAgICAgICAgaWYgKGluZGVudC5zbGljZSgtdGFiLmxlbmd0aCkgPT0gdGFiKQogICAgICAgICAgICBkb2MucmVtb3ZlKG5ldyBSYW5nZShyb3csIGluZGVudC5sZW5ndGgtdGFiLmxlbmd0aCwgcm93LCBpbmRlbnQubGVuZ3RoKSk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3NoIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZG9ja2VyZmlsZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3NoX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFNoSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3NoX2hpZ2hsaWdodF9ydWxlcyIpLlNoSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRG9ja2VyZmlsZUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBTaEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIHN0YXJ0UnVsZXMgPSB0aGlzLiRydWxlcy5zdGFydDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhcnRSdWxlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChzdGFydFJ1bGVzW2ldLnRva2VuID09ICJ2YXJpYWJsZS5sYW5ndWFnZSIpIHsKICAgICAgICAgICAgc3RhcnRSdWxlcy5zcGxpY2UoaSwgMCwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIig/Ol4oPzpGUk9NfE1BSU5UQUlORVJ8UlVOfENNRHxFWFBPU0V8RU5WfEFERHxFTlRSWVBPSU5UfFZPTFVNRXxVU0VSfFdPUktESVJ8T05CVUlMRHxDT1BZfExBQkVMKVxcYikiLAogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICAKfTsKCm9vcC5pbmhlcml0cyhEb2NrZXJmaWxlSGlnaGxpZ2h0UnVsZXMsIFNoSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Eb2NrZXJmaWxlSGlnaGxpZ2h0UnVsZXMgPSBEb2NrZXJmaWxlSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9kb2NrZXJmaWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9zaCIsImFjZS9tb2RlL2RvY2tlcmZpbGVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBTaE1vZGUgPSByZXF1aXJlKCIuL3NoIikuTW9kZTsKdmFyIERvY2tlcmZpbGVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9ja2VyZmlsZV9oaWdobGlnaHRfcnVsZXMiKS5Eb2NrZXJmaWxlSGlnaGxpZ2h0UnVsZXM7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBTaE1vZGUuY2FsbCh0aGlzKTsKICAgIAogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IERvY2tlcmZpbGVIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBTaE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZG9ja2VyZmlsZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2RvY2tlcmZpbGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-dot.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRG90SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgIHZhciBrZXl3b3JkcyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAoInN0cmljdHxub2RlfGVkZ2V8Z3JhcGh8ZGlncmFwaHxzdWJncmFwaCIpLnNwbGl0KCJ8IikKICAgKTsKCiAgIHZhciBhdHRyaWJ1dGVzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiZGFtcGluZ3xrfHVybHxhcmVhfGFycm93aGVhZHxhcnJvd3NpemV8YXJyb3d0YWlsfGFzcGVjdHxiYnxiZ2NvbG9yfGNlbnRlcnxjaGFyc2V0fGNsdXN0ZXJyYW5rfGNvbG9yfGNvbG9yc2NoZW1lfGNvbW1lbnR8Y29tcG91bmR8Y29uY2VudHJhdGV8Y29uc3RyYWludHxkZWNvcmF0ZXxkZWZhdWx0ZGlzdHxkaW18ZGltZW58ZGlyfGRpcmVkZ2Vjb25zdHJhaW50c3xkaXN0b3J0aW9ufGRwaXxlZGdldXJsfGVkZ2VocmVmfGVkZ2V0YXJnZXR8ZWRnZXRvb2x0aXB8ZXBzaWxvbnxlc2VwfGZpbGxjb2xvcnxmaXhlZHNpemV8Zm9udGNvbG9yfGZvbnRuYW1lfGZvbnRuYW1lc3xmb250cGF0aHxmb250c2l6ZXxmb3JjZWxhYmVsc3xncmFkaWVudGFuZ2xlfGdyb3VwfGhlYWR1cmx8aGVhZF9scHxoZWFkY2xpcHxoZWFkaHJlZnxoZWFkbGFiZWx8aGVhZHBvcnR8aGVhZHRhcmdldHxoZWFkdG9vbHRpcHxoZWlnaHR8aHJlZnxpZHxpbWFnZXxpbWFnZXBhdGh8aW1hZ2VzY2FsZXxsYWJlbHxsYWJlbHVybHxsYWJlbF9zY2hlbWV8bGFiZWxhbmdsZXxsYWJlbGRpc3RhbmNlfGxhYmVsZmxvYXR8bGFiZWxmb250Y29sb3J8bGFiZWxmb250bmFtZXxsYWJlbGZvbnRzaXplfGxhYmVsaHJlZnxsYWJlbGp1c3R8bGFiZWxsb2N8bGFiZWx0YXJnZXR8bGFiZWx0b29sdGlwfGxhbmRzY2FwZXxsYXllcnxsYXllcmxpc3RzZXB8bGF5ZXJzfGxheWVyc2VsZWN0fGxheWVyc2VwfGxheW91dHxsZW58bGV2ZWxzfGxldmVsc2dhcHxsaGVhZHxsaGVpZ2h0fGxwfGx0YWlsfGx3aWR0aHxtYXJnaW58bWF4aXRlcnxtY2xpbWl0fG1pbmRpc3R8bWlubGVufG1vZGV8bW9kZWx8bW9zZWt8bm9kZXNlcHxub2p1c3RpZnl8bm9ybWFsaXplfG5zbGltaXR8bnNsaW1pdDF8b3JkZXJpbmd8b3JpZW50YXRpb258b3V0cHV0b3JkZXJ8b3ZlcmxhcHxvdmVybGFwX3NjYWxpbmd8cGFja3xwYWNrbW9kZXxwYWR8cGFnZXxwYWdlZGlyfHBlbmNvbG9yfHBlbndpZHRofHBlcmlwaGVyaWVzfHBpbnxwb3N8cXVhZHRyZWV8cXVhbnR1bXxyYW5rfHJhbmtkaXJ8cmFua3NlcHxyYXRpb3xyZWN0c3xyZWd1bGFyfHJlbWluY3Jvc3N8cmVwdWxzaXZlZm9yY2V8cmVzb2x1dGlvbnxyb290fHJvdGF0ZXxyb3RhdGlvbnxzYW1laGVhZHxzYW1ldGFpbHxzYW1wbGVwb2ludHN8c2NhbGV8c2VhcmNoc2l6ZXxzZXB8c2hhcGV8c2hhcGVmaWxlfHNob3dib3hlc3xzaWRlc3xzaXplfHNrZXd8c21vb3RoaW5nfHNvcnR2fHNwbGluZXN8c3RhcnR8c3R5bGV8c3R5bGVzaGVldHx0YWlsdXJsfHRhaWxfbHB8dGFpbGNsaXB8dGFpbGhyZWZ8dGFpbGxhYmVsfHRhaWxwb3J0fHRhaWx0YXJnZXR8dGFpbHRvb2x0aXB8dGFyZ2V0fHRvb2x0aXB8dHJ1ZWNvbG9yfHZlcnRpY2VzfHZpZXdwb3J0fHZvcm9fbWFyZ2lufHdlaWdodHx3aWR0aHx4bGFiZWx8eGxwfHoiKS5zcGxpdCgifCIpCiAgICk7CgogICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIy4qJC8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgbWVyZ2UgOiB0cnVlLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXC9cKi8sCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bK1wtXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/KT9cYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cK3w9fFwtPi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLHw7LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbe10vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF19XS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXiMhLiokLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZS50b0xvd2VyQ2FzZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidGV4dCI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCiAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdbXiJcXFxcXSsnLAogICAgICAgICAgICAgICAgbWVyZ2UgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIsCiAgICAgICAgICAgICAgICBtZXJnZSA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICBtZXJnZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW14nXFxcXF0rIiwKICAgICAgICAgICAgICAgIG1lcmdlIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIsCiAgICAgICAgICAgICAgICBtZXJnZSA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIsCiAgICAgICAgICAgICAgICBtZXJnZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIF0KICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb3RIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuRG90SGlnaGxpZ2h0UnVsZXMgPSBEb3RIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZG90IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2RvdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBEb3RIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG90X2hpZ2hsaWdodF9ydWxlcyIpLkRvdEhpZ2hsaWdodFJ1bGVzOwp2YXIgRG90Rm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IERvdEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRG90Rm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gWyIvLyIsICIjIl07CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CiAgICAgICAgdmFyIGVuZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZG90IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZG90Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-drools.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgSmF2YUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAiYWJzdHJhY3R8Y29udGludWV8Zm9yfG5ld3xzd2l0Y2h8IiArCiAgICAiYXNzZXJ0fGRlZmF1bHR8Z290b3xwYWNrYWdlfHN5bmNocm9uaXplZHwiICsKICAgICJib29sZWFufGRvfGlmfHByaXZhdGV8dGhpc3wiICsKICAgICJicmVha3xkb3VibGV8aW1wbGVtZW50c3xwcm90ZWN0ZWR8dGhyb3d8IiArCiAgICAiYnl0ZXxlbHNlfGltcG9ydHxwdWJsaWN8dGhyb3dzfCIgKwogICAgImNhc2V8ZW51bXxpbnN0YW5jZW9mfHJldHVybnx0cmFuc2llbnR8IiArCiAgICAiY2F0Y2h8ZXh0ZW5kc3xpbnR8c2hvcnR8dHJ5fCIgKwogICAgImNoYXJ8ZmluYWx8aW50ZXJmYWNlfHN0YXRpY3x2b2lkfCIgKwogICAgImNsYXNzfGZpbmFsbHl8bG9uZ3xzdHJpY3RmcHx2b2xhdGlsZXwiICsKICAgICJjb25zdHxmbG9hdHxuYXRpdmV8c3VwZXJ8d2hpbGV8IiArCiAgICAidmFyIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIik7CgoKICAgIHZhciBsYW5nQ2xhc3NlcyA9ICgKICAgICAgICAiQWJzdHJhY3RNZXRob2RFcnJvcnxBc3NlcnRpb25FcnJvcnxDbGFzc0NpcmN1bGFyaXR5RXJyb3J8IisKICAgICAgICAiQ2xhc3NGb3JtYXRFcnJvcnxEZXByZWNhdGVkfEVudW1Db25zdGFudE5vdFByZXNlbnRFeGNlcHRpb258IisKICAgICAgICAiRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yfElsbGVnYWxBY2Nlc3NFcnJvcnwiKwogICAgICAgICJJbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb258SW5zdGFudGlhdGlvbkVycm9yfEludGVybmFsRXJyb3J8IisKICAgICAgICAiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb258Tm9TdWNoRmllbGRFcnJvcnxPdmVycmlkZXxQcm9jZXNzfCIrCiAgICAgICAgIlByb2Nlc3NCdWlsZGVyfFNlY3VyaXR5TWFuYWdlcnxTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgIlN1cHByZXNzV2FybmluZ3N8VHlwZU5vdFByZXNlbnRFeGNlcHRpb258VW5rbm93bkVycm9yfCIrCiAgICAgICAgIlVuc2F0aXNmaWVkTGlua0Vycm9yfFVuc3VwcG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3J8VmVyaWZ5RXJyb3J8IisKICAgICAgICAiSW5zdGFudGlhdGlvbkV4Y2VwdGlvbnxJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnwiKwogICAgICAgICJOb1N1Y2hGaWVsZEV4Y2VwdGlvbnxJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb258TnVtYmVyRm9ybWF0RXhjZXB0aW9ufCIrCiAgICAgICAgIlNlY3VyaXR5RXhjZXB0aW9ufFZvaWR8SW5oZXJpdGFibGVUaHJlYWRMb2NhbHxJbGxlZ2FsU3RhdGVFeGNlcHRpb258IisKICAgICAgICAiSW50ZXJydXB0ZWRFeGNlcHRpb258Tm9TdWNoTWV0aG9kRXhjZXB0aW9ufElsbGVnYWxBY2Nlc3NFeGNlcHRpb258IisKICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb258RW51bXxTdHJpY3RNYXRofFBhY2thZ2V8Q29tcGlsZXJ8IisKICAgICAgICAiUmVhZGFibGV8UnVudGltZXxTdHJpbmdCdWlsZGVyfE1hdGh8SW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcnwiKwogICAgICAgICJOb1N1Y2hNZXRob2RFcnJvcnxUaHJlYWRMb2NhbHxSdW50aW1lUGVybWlzc2lvbnxBcml0aG1ldGljRXhjZXB0aW9ufCIrCiAgICAgICAgIk51bGxQb2ludGVyRXhjZXB0aW9ufExvbmd8SW50ZWdlcnxTaG9ydHxCeXRlfERvdWJsZXxOdW1iZXJ8RmxvYXR8IisKICAgICAgICAiQ2hhcmFjdGVyfEJvb2xlYW58U3RhY2tUcmFjZUVsZW1lbnR8QXBwZW5kYWJsZXxTdHJpbmdCdWZmZXJ8IisKICAgICAgICAiSXRlcmFibGV8VGhyZWFkR3JvdXB8UnVubmFibGV8VGhyZWFkfElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb258IisKICAgICAgICAiU3RhY2tPdmVyZmxvd0Vycm9yfE91dE9mTWVtb3J5RXJyb3J8VmlydHVhbE1hY2hpbmVFcnJvcnwiKwogICAgICAgICJBcnJheVN0b3JlRXhjZXB0aW9ufENsYXNzQ2FzdEV4Y2VwdGlvbnxMaW5rYWdlRXJyb3J8IisKICAgICAgICAiTm9DbGFzc0RlZkZvdW5kRXJyb3J8Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbnxSdW50aW1lRXhjZXB0aW9ufCIrCiAgICAgICAgIkV4Y2VwdGlvbnxUaHJlYWREZWF0aHxFcnJvcnxUaHJvd2FibGV8U3lzdGVtfENsYXNzTG9hZGVyfCIrCiAgICAgICAgIkNsb25lYWJsZXxDbGFzc3xDaGFyU2VxdWVuY2V8Q29tcGFyYWJsZXxTdHJpbmd8T2JqZWN0IgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogInRoaXMiLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGxhbmdDbGFzc2VzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdWzAtOWEtZkEtRl9dKnxbYkJdWzAxXVswMV9dKilbTGxTc0RkRmZZeV0/XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZFtcZF9dKig/Oig/OlwuW1xkX10qKT8oPzpbZUVdWystXT9bXGRfXSspPyk/W0xsU3NEZEZmWXldP1xiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICByZWdleDogIihvcGVuKD86XFxzKykpP21vZHVsZSg/PVxccypcXHcpIiwKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICBuZXh0OiBbewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgICAgIG5leHQ6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJcXGIocmVxdWlyZXN8dHJhbnNpdGl2ZXxleHBvcnRzfG9wZW5zfHRvfHVzZXN8cHJvdmlkZXN8d2l0aClcXGIiLAogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQiIAogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXHcrIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIiLCAvLyBleGl0IGlmIHRoZXJlIGlzIGFueXRoaW5nIGVsc2UKICAgICAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICAKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSmF2YUhpZ2hsaWdodFJ1bGVzID0gSmF2YUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZHJvb2xzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YUhpZ2hsaWdodFJ1bGVzOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKiI7CnZhciBwYWNrYWdlSWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bXFwuYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKiI7Cgp2YXIgRHJvb2xzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoImRhdGV8ZWZmZWN0aXZlfGV4cGlyZXN8bG9ja3xvbnxhY3RpdmV8bm98bG9vcHxhdXRvfGZvY3VzIiArCiAgICAgICAgInxhY3RpdmF0aW9ufGdyb3VwfGFnZW5kYXxydWxlZmxvd3xkdXJhdGlvbnx0aW1lcnxjYWxlbmRhcnN8cmVmcmFjdHxkaXJlY3QiICsKICAgICAgICAifGRpYWxlY3R8c2FsaWVuY2V8ZW5hYmxlZHxhdHRyaWJ1dGVzfGV4dGVuZHN8dGVtcGxhdGUiICsKICAgICAgICAifGZ1bmN0aW9ufGNvbnRhaW5zfG1hdGNoZXN8ZXZhbHxleGNsdWRlc3xzb3VuZHNsaWtlIiArCiAgICAgICAgInxtZW1iZXJvZnxub3R8aW58b3J8YW5kfGV4aXN0c3xmb3JhbGx8b3Zlcnxmcm9tfGVudHJ5fHBvaW50fGFjY3VtdWxhdGV8YWNjfGNvbGxlY3QiICsKICAgICAgICAifGFjdGlvbnxyZXZlcnNlfHJlc3VsdHxlbmR8aW5pdHxpbnN0YW5jZW9mfGV4dGVuZHN8c3VwZXJ8Ym9vbGVhbnxjaGFyfGJ5dGV8c2hvcnQiICsKICAgICAgICAifGludHxsb25nfGZsb2F0fGRvdWJsZXx0aGlzfHZvaWR8Y2xhc3N8bmV3fGNhc2V8ZmluYWx8aWZ8ZWxzZXxmb3J8d2hpbGV8ZG8iICsKICAgICAgICAifGRlZmF1bHR8dHJ5fGNhdGNofGZpbmFsbHl8c3dpdGNofHN5bmNocm9uaXplZHxyZXR1cm58dGhyb3d8YnJlYWt8Y29udGludWV8YXNzZXJ0IiArCiAgICAgICAgInxtb2RpZnl8c3RhdGljfHB1YmxpY3xwcm90ZWN0ZWR8cHJpdmF0ZXxhYnN0cmFjdHxuYXRpdmV8dHJhbnNpZW50fHZvbGF0aWxlIiArCiAgICAgICAgInxzdHJpY3RmcHx0aHJvd3N8aW50ZXJmYWNlfGVudW18aW1wbGVtZW50c3x0eXBlfHdpbmRvd3x0cmFpdHxuby1sb29wfHN0ciIKICAgICAgKTsKCiAgICAgIHZhciBsYW5nQ2xhc3NlcyA9ICgKICAgICAgICAgICJBYnN0cmFjdE1ldGhvZEVycm9yfEFzc2VydGlvbkVycm9yfENsYXNzQ2lyY3VsYXJpdHlFcnJvcnwiKwogICAgICAgICAgIkNsYXNzRm9ybWF0RXJyb3J8RGVwcmVjYXRlZHxFbnVtQ29uc3RhbnROb3RQcmVzZW50RXhjZXB0aW9ufCIrCiAgICAgICAgICAiRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yfElsbGVnYWxBY2Nlc3NFcnJvcnwiKwogICAgICAgICAgIklsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlvbnxJbnN0YW50aWF0aW9uRXJyb3J8SW50ZXJuYWxFcnJvcnwiKwogICAgICAgICAgIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXJyb3J8T3ZlcnJpZGV8UHJvY2Vzc3wiKwogICAgICAgICAgIlByb2Nlc3NCdWlsZGVyfFNlY3VyaXR5TWFuYWdlcnxTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgICAiU3VwcHJlc3NXYXJuaW5nc3xUeXBlTm90UHJlc2VudEV4Y2VwdGlvbnxVbmtub3duRXJyb3J8IisKICAgICAgICAgICJVbnNhdGlzZmllZExpbmtFcnJvcnxVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yfFZlcmlmeUVycm9yfCIrCiAgICAgICAgICAiSW5zdGFudGlhdGlvbkV4Y2VwdGlvbnxJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgICAiQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9ufCIrCiAgICAgICAgICAiTm9TdWNoRmllbGRFeGNlcHRpb258SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufE51bWJlckZvcm1hdEV4Y2VwdGlvbnwiKwogICAgICAgICAgIlNlY3VyaXR5RXhjZXB0aW9ufFZvaWR8SW5oZXJpdGFibGVUaHJlYWRMb2NhbHxJbGxlZ2FsU3RhdGVFeGNlcHRpb258IisKICAgICAgICAgICJJbnRlcnJ1cHRlZEV4Y2VwdGlvbnxOb1N1Y2hNZXRob2RFeGNlcHRpb258SWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbnwiKwogICAgICAgICAgIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufEVudW18U3RyaWN0TWF0aHxQYWNrYWdlfENvbXBpbGVyfCIrCiAgICAgICAgICAiUmVhZGFibGV8UnVudGltZXxTdHJpbmdCdWlsZGVyfE1hdGh8SW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcnwiKwogICAgICAgICAgIk5vU3VjaE1ldGhvZEVycm9yfFRocmVhZExvY2FsfFJ1bnRpbWVQZXJtaXNzaW9ufEFyaXRobWV0aWNFeGNlcHRpb258IisKICAgICAgICAgICJOdWxsUG9pbnRlckV4Y2VwdGlvbnxMb25nfEludGVnZXJ8U2hvcnR8Qnl0ZXxEb3VibGV8TnVtYmVyfEZsb2F0fCIrCiAgICAgICAgICAiQ2hhcmFjdGVyfEJvb2xlYW58U3RhY2tUcmFjZUVsZW1lbnR8QXBwZW5kYWJsZXxTdHJpbmdCdWZmZXJ8IisKICAgICAgICAgICJJdGVyYWJsZXxUaHJlYWRHcm91cHxSdW5uYWJsZXxUaHJlYWR8SWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnwiKwogICAgICAgICAgIlN0YWNrT3ZlcmZsb3dFcnJvcnxPdXRPZk1lbW9yeUVycm9yfFZpcnR1YWxNYWNoaW5lRXJyb3J8IisKICAgICAgICAgICJBcnJheVN0b3JlRXhjZXB0aW9ufENsYXNzQ2FzdEV4Y2VwdGlvbnxMaW5rYWdlRXJyb3J8IisKICAgICAgICAgICJOb0NsYXNzRGVmRm91bmRFcnJvcnxDbGFzc05vdEZvdW5kRXhjZXB0aW9ufFJ1bnRpbWVFeGNlcHRpb258IisKICAgICAgICAgICJFeGNlcHRpb258VGhyZWFkRGVhdGh8RXJyb3J8VGhyb3dhYmxlfFN5c3RlbXxDbGFzc0xvYWRlcnwiKwogICAgICAgICAgIkNsb25lYWJsZXxDbGFzc3xDaGFyU2VxdWVuY2V8Q29tcGFyYWJsZXxTdHJpbmd8T2JqZWN0IgogICAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiAibnVsbCIsCiAgICAgICAgInN1cHBvcnQuY2xhc3MiIDogbGFuZ0NsYXNzZXMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iIDogInJldHJhY3R8dXBkYXRlfG1vZGlmeXxpbnNlcnQiCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBzdHJpbmdSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gW3sKICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgIH1dOwogICAgfTsKCgogICAgICB2YXIgYmFzaWNQcmVSdWxlcyA9IGZ1bmN0aW9uKGJsb2NrQ29tbWVudFJ1bGVzKSB7CiAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgfSwKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgbmV4dCA6IGJsb2NrQ29tbWVudFJ1bGVzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgICAgfV07CiAgICAgIH07CgogICAgICB2YXIgYmxvY2tDb21tZW50UnVsZXMgPSBmdW5jdGlvbihyZXR1cm5SdWxlKSB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5ibG9jayIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiByZXR1cm5SdWxlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50LmJsb2NrIgogICAgICAgICAgICB9CiAgICAgICAgXTsKICAgICAgfTsKCiAgICAgIHZhciBiYXNpY1Bvc3RSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBbewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9XTsKICAgICAgfTsKCgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFtdLmNvbmNhdChiYXNpY1ByZVJ1bGVzKCJibG9jay5jb21tZW50IiksIFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIkBbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUudHlwZSJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKHBhY2thZ2UpKFxccyspKCIgKyBwYWNrYWdlSWRlbnRpZmllclJlICsiKSIKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsInRleHQiLCJrZXl3b3JkIiwidGV4dCIsImVudGl0eS5uYW1lLnR5cGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihpbXBvcnQpKFxccyspKGZ1bmN0aW9uKShcXHMrKSgiICsgcGFja2FnZUlkZW50aWZpZXJSZSArIikiCiAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUudHlwZSJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKGltcG9ydCkoXFxzKykoIiArIHBhY2thZ2VJZGVudGlmaWVyUmUgKyIpIgogICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwidGV4dCIsImVudGl0eS5uYW1lLnR5cGUiLCJ0ZXh0IiwidmFyaWFibGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihnbG9iYWwpKFxccyspKCIgKyBwYWNrYWdlSWRlbnRpZmllclJlICsiKShcXHMrKSgiICsgaWRlbnRpZmllclJlICsiKSIKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsInRleHQiLCJrZXl3b3JkIiwidGV4dCIsImVudGl0eS5uYW1lLnR5cGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihkZWNsYXJlKShcXHMrKSh0cmFpdCkoXFxzKykoIiArIGlkZW50aWZpZXJSZSArIikiCiAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUudHlwZSJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKGRlY2xhcmUpKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyIpIgogICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwidGV4dCIsImVudGl0eS5uYW1lLnR5cGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihleHRlbmRzKShcXHMrKSgiICsgcGFja2FnZUlkZW50aWZpZXJSZSArIikiCiAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIocnVsZSkoXFxzKykiLAogICAgICAgICAgICAgICAgbmV4dCA6ICAiYXNzZXQubmFtZSIKICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICBzdHJpbmdSdWxlcygpLAogICAgICAgICAgICAgIFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidmFyaWFibGUub3RoZXIiLCJ0ZXh0IiwidGV4dCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KSIKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihxdWVyeSkoXFxzKykiLAogICAgICAgICAgICAgICAgbmV4dCA6ICAiYXNzZXQubmFtZSIKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih3aGVuKShcXHMqKSIKICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih0aGVuKShcXHMqKSIsCiAgICAgICAgICAgICAgICBuZXh0IDogICJqYXZhLXN0YXJ0IgogICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLwogICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICAgIH1dLCBiYXNpY1Bvc3RSdWxlcygpKSwKICAgICAgICAiYmxvY2suY29tbWVudCIgOiBibG9ja0NvbW1lbnRSdWxlcygic3RhcnQiKSwKICAgICAgICAiYXNzZXQubmFtZSIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICB9XQogICAgfTsKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwoKICAgIHRoaXMuZW1iZWRSdWxlcyhKYXZhSGlnaGxpZ2h0UnVsZXMsICJqYXZhLSIsIFsKICAgICAgewogICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICByZWdleDogIlxcYihpbnNlcnR8bW9kaWZ5fHJldHJhY3R8dXBkYXRlKVxcYiIKICAgICB9LCB7CiAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgIHJlZ2V4OiAiXFxiZW5kXFxiIiwKICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgfV0pOwoKfTsKCm9vcC5pbmhlcml0cyhEcm9vbHNIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuRHJvb2xzSGlnaGxpZ2h0UnVsZXMgPSBEcm9vbHNIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZHJvb2xzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gL1xiKHJ1bGV8ZGVjbGFyZXxxdWVyeXx3aGVufHRoZW4pXGIvOyAKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXGJlbmRcYi87CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHtyb3c6IHJvdywgY29sdW1uOiBsaW5lLmxlbmd0aH07CiAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgICAgICAgICB2YXIgc2VlayA9ICJlbmQiOwogICAgICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIndoZW4iKSB7CiAgICAgICAgICAgICAgICAgICAgc2VlayA9ICJ0aGVuIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbikgewogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSBzZWVrKSB7IAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhwb3NpdGlvbiAsewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Ryb29scyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Ryb29sc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2Ryb29scyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIERyb29sc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kcm9vbHNfaGlnaGxpZ2h0X3J1bGVzIikuRHJvb2xzSGlnaGxpZ2h0UnVsZXM7CnZhciBEcm9vbHNGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9kcm9vbHMiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gRHJvb2xzSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBEcm9vbHNGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKCn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZHJvb2xzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2Ryb29scyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-edifact.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9lZGlmYWN0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CiAgICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdmFyIEVkaWZhY3RIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgCiAgICAgICAgdmFyIGhlYWRlciA9ICgKICAgICAgICAgICAgIlVOSCIKICAgICAgICApOwogICAgICAgIHZhciBzZWdtZW50ID0gKAogICAgICAgICAgICAiQURSfEFHUnxBSlR8QUxDfEFMSXxBUFB8QVBSfEFSRHxBUlJ8QVNJfEFUVHxBVVR8IisKICAgICAgICAgICAgIkJBU3xCR018QklJfEJVU3wiKwogICAgICAgICAgICAiQ0FWfENDRHxDQ0l8Q0RJfENEU3xDRFZ8Q0VEfENJTnxDTEF8Q0xJfENNUHxDTkl8Q05UfENPRHxDT018Q09UfENQSXxDUFN8Q1BUfENTVHxDVEF8Q1VYfCIrCiAgICAgICAgICAgICJEQU18REZOfERHU3xESUl8RElNfERMSXxETE18RE1TfERPQ3xEUkR8RFNHfERTSXxEVE18IisKICAgICAgICAgICAgIkVEVHxFRkl8RUxNfEVMVXxFTFZ8RU1QfEVRQXxFUUR8RVFOfEVSQ3xFUlB8RVZFfEZDQXxGSUl8Rk5TfEZOVHxGT1J8RlNRfEZUWHwiKwogICAgICAgICAgICAiR0RTfEdFSXxHSUR8R0lOfEdJUnxHT1J8R1BPfEdSVXxIQU58SFlOfElDRHxJREV8SUZEfElIQ3xJTUR8SU5EfElOUHxJTlZ8SVJRfCIrCiAgICAgICAgICAgICJMQU58TElOfExPQ3xNRUF8TUVNfE1LU3xNT0F8TVNHfE1URHxOQUR8TkFUfCIrCiAgICAgICAgICAgICJQQUN8UEFJfFBBU3xQQ0N8UENEfFBDSXxQREl8UEVSfFBHSXxQSUF8UE5BfFBPQ3xQUkN8UFJJfFBSVnxQU0R8UFRZfFBZVHwiKwogICAgICAgICAgICAiUVJTfFFUWXxRVUF8UVZSfCIrCiAgICAgICAgICAgICJSQ1N8UkVMfFJGRnxSSkx8Uk5HfFJPRHxSU0x8UlRFfCIrCiAgICAgICAgICAgICJTQUx8U0NDfFNDRHxTRUd8U0VMfFNFUXxTRkl8U0dQfFNHVXxTUFJ8U1BTfFNUQXxTVEN8U1RHfFNUU3wiKwogICAgICAgICAgICAiVEFYfFRDQ3xURFR8VEVNfFRNRHxUTVB8VE9EfFRQTHxUUlV8VFNSfCIrCiAgICAgICAgICAgICJVTkJ8VU5afFVOVHxVR0h8VUdUfFVOU3wiKwogICAgICAgICAgICAiVkxJIgogICAgICAgICk7CiAgICAKICAgICAgICB2YXIgaGVhZGVyID0gKAogICAgICAgICAgICAiVU5IIgogICAgICAgICk7CiAgICAKICAgICAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIik7CiAgICAgICAgdmFyIGxhbmdDbGFzc2VzID0gKAogICAgICAgICAgICAiIgogICAgICAgICk7CiAgICAKICAgICAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgICAgICJCWXxTRXxPTnxJTlZ8SlB8VU5PQSIKICAgICAgICApOwogICAgCiAgICAgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgICAgICJlbnRpdHkubmFtZS5zZWdtZW50IjpzZWdtZW50LAogICAgICAgICAgICAiZW50aXR5Lm5hbWUuaGVhZGVyIjpoZWFkZXIsCiAgICAgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWxkaW5Db25zdGFudHMsCiAgICAgICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogbGFuZ0NsYXNzZXMKICAgICAgICB9LCAiaWRlbnRpZmllciIpOwogICAgCiAgICAgICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKy5cXCsiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXCsiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcOnwnIgogICAgICAgICAgICAgICAgfSx7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFw6RFxcOiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH07CiAgICAKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7CiAgICB9OwogICAgCiAgICBFZGlmYWN0SGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7IGZpbGVUeXBlczogWyAnZWRpJyBdLAogICAgICAgICAga2V5RXF1aXZhbGVudDogJ15+RScsCiAgICAgICAgICBuYW1lOiAnRWRpZmFjdCcsCiAgICAgICAgICBzY29wZU5hbWU6ICdzb3VyY2UuZWRpZmFjdCcgfTsKICAgIAogICAgb29wLmluaGVyaXRzKEVkaWZhY3RIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKICAgIAogICAgZXhwb3J0cy5FZGlmYWN0SGlnaGxpZ2h0UnVsZXMgPSBFZGlmYWN0SGlnaGxpZ2h0UnVsZXM7CiAgICB9KTsKCmRlZmluZSgiYWNlL21vZGUvZWRpZmFjdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2VkaWZhY3RfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgRWRpZmFjdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9lZGlmYWN0X2hpZ2hsaWdodF9ydWxlcyIpLkVkaWZhY3RIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgIAogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEVkaWZhY3RIaWdobGlnaHRSdWxlczsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2VkaWZhY3QiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9lZGlmYWN0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-eiffel.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9laWZmZWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRWlmZmVsSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkcyA9ICJhY3Jvc3N8YWdlbnR8YWxpYXN8YWxsfGF0dGFjaGVkfGFzfGFzc2lnbnxhdHRyaWJ1dGV8Y2hlY2t8IiArCiAgICAgICAgImNsYXNzfGNvbnZlcnR8Y3JlYXRlfGRlYnVnfGRlZmVycmVkfGRldGFjaGFibGV8ZG98ZWxzZXxlbHNlaWZ8ZW5kfCIgKwogICAgICAgICJlbnN1cmV8ZXhwYW5kZWR8ZXhwb3J0fGV4dGVybmFsfGZlYXR1cmV8ZnJvbXxmcm96ZW58aWZ8aW5oZXJpdHwiICsKICAgICAgICAiaW5zcGVjdHxpbnZhcmlhbnR8bGlrZXxsb2NhbHxsb29wfG5vdHxub3RlfG9ic29sZXRlfG9sZHxvbmNlfCIgKwogICAgICAgICJQcmVjdXJzb3J8cmVkZWZpbmV8cmVuYW1lfHJlcXVpcmV8cmVzY3VlfHJldHJ5fHNlbGVjdHxzZXBhcmF0ZXwiICsKICAgICAgICAic29tZXx0aGVufHVuZGVmaW5lfHVudGlsfHZhcmlhbnR8d2hlbiI7CgogICAgdmFyIG9wZXJhdG9yS2V5d29yZHMgPSAiYW5kfGltcGxpZXN8b3J8eG9yIjsKCiAgICB2YXIgbGFuZ3VhZ2VDb25zdGFudHMgPSAiVm9pZCI7CgogICAgdmFyIGJvb2xlYW5Db25zdGFudHMgPSAiVHJ1ZXxGYWxzZSI7CgogICAgdmFyIGxhbmd1YWdlVmFyaWFibGVzID0gIkN1cnJlbnR8UmVzdWx0IjsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogbGFuZ3VhZ2VDb25zdGFudHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iOiBib29sZWFuQ29uc3RhbnRzLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6IGxhbmd1YWdlVmFyaWFibGVzLAogICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIjogb3BlcmF0b3JLZXl3b3JkcywKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOwoKICAgIHZhciBzaW1wbGVTdHJpbmcgPSAvKD86W14iJVxiXGZcdl18JVtBLURGSExOUVItViUnIigpPD5dfCVcLyg/OjBbeFhdW1xkYS1mQS1GXSg/Ol8qW1xkYS1mQS1GXSkqfDBbY0NdWzAtN10oPzpfKlswLTddKSp8MFtiQl1bMDFdKD86XypbMDFdKSp8XGQoPzpfKlxkKSopXC8pKz8vOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVvdGVkLm90aGVyIiwgLy8gQWxpZ25lZC12ZXJiYXRpbS1zdHJpbmdzICh2ZXJiYXRpbSBvcHRpb24gbm90IHN1cHBvcnRlZCkKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyJcWy8sCiAgICAgICAgICAgICAgICBuZXh0OiAiYWxpZ25lZF92ZXJiYXRpbV9zdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdW90ZWQub3RoZXIiLCAvLyBOb24tYWxpZ25lZC12ZXJiYXRpbS1zdHJpbmdzICh2ZXJiYXRpbSBvcHRpb24gbm90IHN1cHBvcnRlZCkKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyJcey8sCiAgICAgICAgICAgICAgICBuZXh0OiAibm9uLWFsaWduZWRfdmVyYmF0aW1fc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVvdGVkLmRvdWJsZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iKD86W14lXGJcZlxuXHJcdl18JVtBLURGSExOUVItViUnIigpPD5dfCVcLyg/OjBbeFhdW1xkYS1mQS1GXSg/Ol8qW1xkYS1mQS1GXSkqfDBbY0NdWzAtN10oPzpfKlswLTddKSp8MFtiQl1bMDFdKD86XypbMDFdKSp8XGQoPzpfKlxkKSopXC8pKj8iLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmxpbmUuZG91YmxlLWRhc2giLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLS0uKi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLycoPzpbXiVcYlxmXG5cclx0XHZdfCVbQS1ERkhMTlFSLVYlJyIoKTw+XXwlXC8oPzowW3hYXVtcZGEtZkEtRl0oPzpfKltcZGEtZkEtRl0pKnwwW2NDXVswLTddKD86XypbMC03XSkqfDBbYkJdWzAxXSg/Ol8qWzAxXSkqfFxkKD86XypcZCkqKVwvKScvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhIHwgb2N0YWwgfCBiaW4KICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xiMCg/Olt4WF1bXGRhLWZBLUZdKD86XypbXGRhLWZBLUZdKSp8W2NDXVswLTddKD86XypbMC03XSkqfFtiQl1bMDFdKD86XypbMDFdKSopXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGQoPzpfKlxkKSopP1wuKD86KD86XGQoPzpfKlxkKSopP1tlRV1bKy1dPyk/XGQoPzpfKlxkKSp8XGQoPzpfKlxkKSpcLj8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe118PDx8XHxcKC8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcXSl9XXw+PnxcfFwpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwgLy8gcHVuY3R1YXRpb24KICAgICAgICAgICAgICAgIHJlZ2V4IDogLzo9fC0+fFwuKD89XHcpfFs7LDo/XS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXFxcfFx8XC5cLlx8fFwuXC58XC9bflwvXT98Wz48XC9dPT98Wy0rKl49fl0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0ga2V5d29yZE1hcHBlcih2KTsKICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSAiaWRlbnRpZmllciIgJiYgdiA9PT0gdi50b1VwcGVyQ2FzZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICAiZW50aXR5Lm5hbWUudHlwZSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAvW2EtekEtWl1bYS16QS1aXGRfXSpcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9ccysvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJhbGlnbmVkX3ZlcmJhdGltX3N0cmluZyIgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL10iLywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6IHNpbXBsZVN0cmluZwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibm9uLWFsaWduZWRfdmVyYmF0aW1fc3RyaW5nIiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVvdGVkLm90aGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL30iLywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdW90ZWQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBzaW1wbGVTdHJpbmcKICAgICAgICAgICAgfQogICAgICAgIF19Owp9OwoKb29wLmluaGVyaXRzKEVpZmZlbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5FaWZmZWxIaWdobGlnaHRSdWxlcyA9IEVpZmZlbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZWlmZmVsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvZWlmZmVsX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEVpZmZlbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9laWZmZWxfaGlnaGxpZ2h0X3J1bGVzIikuRWlmZmVsSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEVpZmZlbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9laWZmZWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZWlmZmVsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-ejs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kcXVvdGVzID0geyciJzogJyInLCAiJyI6ICInIiwgImAiOiAiYCJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qOnxbXHtcKFxbXSlccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgZW5kU3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24ocmVzdWx0cykgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKHJlc3VsdHMuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qYXZhc2NyaXB0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgcHJvcGVydHlNYXAgPSB7CiAgICAiYmFja2dyb3VuZCI6IHsiIyQwIjogMX0sCiAgICAiYmFja2dyb3VuZC1jb2xvciI6IHsiIyQwIjogMSwgInRyYW5zcGFyZW50IjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1pbWFnZSI6IHsidXJsKCcvJDAnKSI6IDF9LAogICAgImJhY2tncm91bmQtcmVwZWF0IjogeyJyZXBlYXQiOiAxLCAicmVwZWF0LXgiOiAxLCAicmVwZWF0LXkiOiAxLCAibm8tcmVwZWF0IjogMSwgImluaGVyaXQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXBvc2l0aW9uIjogeyJib3R0b20iOjIsICJjZW50ZXIiOjIsICJsZWZ0IjoyLCAicmlnaHQiOjIsICJ0b3AiOjIsICJpbmhlcml0IjoyfSwKICAgICJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOiB7InNjcm9sbCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtc2l6ZSI6IHsiY292ZXIiOiAxLCAiY29udGFpbiI6IDF9LAogICAgImJhY2tncm91bmQtY2xpcCI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJhY2tncm91bmQtb3JpZ2luIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYm9yZGVyIjogeyJzb2xpZCAkMCI6IDEsICJkYXNoZWQgJDAiOiAxLCAiZG90dGVkICQwIjogMSwgIiMkMCI6IDF9LAogICAgImJvcmRlci1jb2xvciI6IHsiIyQwIjogMX0sCiAgICAiYm9yZGVyLXN0eWxlIjogeyJzb2xpZCI6MiwgImRhc2hlZCI6MiwgImRvdHRlZCI6MiwgImRvdWJsZSI6MiwgImdyb292ZSI6MiwgImhpZGRlbiI6MiwgImluaGVyaXQiOjIsICJpbnNldCI6MiwgIm5vbmUiOjIsICJvdXRzZXQiOjIsICJyaWRnZWQiOjJ9LAogICAgImJvcmRlci1jb2xsYXBzZSI6IHsiY29sbGFwc2UiOiAxLCAic2VwYXJhdGUiOiAxfSwKICAgICJib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJjbGVhciI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJib3RoIjogMSwgIm5vbmUiOiAxfSwKICAgICJjb2xvciI6IHsiIyQwIjogMSwgInJnYigjJDAwLDAsMCkiOiAxfSwKICAgICJjdXJzb3IiOiB7ImRlZmF1bHQiOiAxLCAicG9pbnRlciI6IDEsICJtb3ZlIjogMSwgInRleHQiOiAxLCAid2FpdCI6IDEsICJoZWxwIjogMSwgInByb2dyZXNzIjogMSwgIm4tcmVzaXplIjogMSwgIm5lLXJlc2l6ZSI6IDEsICJlLXJlc2l6ZSI6IDEsICJzZS1yZXNpemUiOiAxLCAicy1yZXNpemUiOiAxLCAic3ctcmVzaXplIjogMSwgInctcmVzaXplIjogMSwgIm53LXJlc2l6ZSI6IDF9LAogICAgImRpc3BsYXkiOiB7Im5vbmUiOiAxLCAiYmxvY2siOiAxLCAiaW5saW5lIjogMSwgImlubGluZS1ibG9jayI6IDEsICJ0YWJsZS1jZWxsIjogMX0sCiAgICAiZW1wdHktY2VsbHMiOiB7InNob3ciOiAxLCAiaGlkZSI6IDF9LAogICAgImZsb2F0IjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgIm5vbmUiOiAxfSwKICAgICJmb250LWZhbWlseSI6IHsiQXJpYWwiOjIsIkNvbWljIFNhbnMgTVMiOjIsIkNvbnNvbGFzIjoyLCJDb3VyaWVyIE5ldyI6MiwiQ291cmllciI6MiwiR2VvcmdpYSI6MiwiTW9ub3NwYWNlIjoyLCJTYW5zLVNlcmlmIjoyLCAiU2Vnb2UgVUkiOjIsIlRhaG9tYSI6MiwiVGltZXMgTmV3IFJvbWFuIjoyLCJUcmVidWNoZXQgTVMiOjIsIlZlcmRhbmEiOiAxfSwKICAgICJmb250LXNpemUiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJmb250LXdlaWdodCI6IHsiYm9sZCI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXN0eWxlIjogeyJpdGFsaWMiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC12YXJpYW50IjogeyJub3JtYWwiOiAxLCAic21hbGwtY2FwcyI6IDF9LAogICAgImhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZXR0ZXItc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAibGluZS1oZWlnaHQiOiB7Im5vcm1hbCI6IDF9LAogICAgImxpc3Qtc3R5bGUtdHlwZSI6IHsibm9uZSI6IDEsICJkaXNjIjogMSwgImNpcmNsZSI6IDEsICJzcXVhcmUiOiAxLCAiZGVjaW1hbCI6IDEsICJkZWNpbWFsLWxlYWRpbmctemVybyI6IDEsICJsb3dlci1yb21hbiI6IDEsICJ1cHBlci1yb21hbiI6IDEsICJsb3dlci1ncmVlayI6IDEsICJsb3dlci1sYXRpbiI6IDEsICJ1cHBlci1sYXRpbiI6IDEsICJnZW9yZ2lhbiI6IDEsICJsb3dlci1hbHBoYSI6IDEsICJ1cHBlci1hbHBoYSI6IDF9LAogICAgIm1hcmdpbiI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm92ZXJmbG93IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXgiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJwYWRkaW5nIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWdlLWJyZWFrLWFmdGVyIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicGFnZS1icmVhay1iZWZvcmUiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwb3NpdGlvbiI6IHsiYWJzb2x1dGUiOiAxLCAicmVsYXRpdmUiOiAxLCAiZml4ZWQiOiAxLCAic3RhdGljIjogMX0sCiAgICAicmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ0YWJsZS1sYXlvdXQiOiB7ImZpeGVkIjogMSwgImF1dG8iOiAxfSwKICAgICJ0ZXh0LWRlY29yYXRpb24iOiB7Im5vbmUiOiAxLCAidW5kZXJsaW5lIjogMSwgImxpbmUtdGhyb3VnaCI6IDEsICJibGluayI6IDF9LAogICAgInRleHQtYWxpZ24iOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiY2VudGVyIjogMSwgImp1c3RpZnkiOiAxfSwKICAgICJ0ZXh0LXRyYW5zZm9ybSI6IHsiY2FwaXRhbGl6ZSI6IDEsICJ1cHBlcmNhc2UiOiAxLCAibG93ZXJjYXNlIjogMSwgIm5vbmUiOiAxfSwKICAgICJ0b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ2ZXJ0aWNhbC1hbGlnbiI6IHsidG9wIjogMSwgImJvdHRvbSI6IDF9LAogICAgInZpc2liaWxpdHkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMX0sCiAgICAid2hpdGUtc3BhY2UiOiB7Im5vd3JhcCI6IDEsICJub3JtYWwiOiAxLCAicHJlIjogMSwgInByZS1saW5lIjogMSwgInByZS13cmFwIjogMX0sCiAgICAid2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ3b3JkLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImZpbHRlciI6IHsiYWxwaGEob3BhY2l0eT0kMDEwMCkiOiAxfSwKCiAgICAidGV4dC1zaGFkb3ciOiB7IiQwMnB4IDJweCAycHggIzc3NyI6IDF9LAogICAgInRleHQtb3ZlcmZsb3ciOiB7ImVsbGlwc2lzLXdvcmQiOiAxLCAiY2xpcCI6IDEsICJlbGxpcHNpcyI6IDF9LAogICAgIi1tb3otYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdCI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3gtc2hhZG93IjogMSwKICAgICItd2Via2l0LWJveC1zaGFkb3ciOiAxLAogICAgInRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLW1vei10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi13ZWJraXQtdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxIH0KfTsKCnZhciBDc3NDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IGZhbHNlOwoKICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoZG9jdW1lbnQpIHsKICAgICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYycpLnN0eWxlOwoKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzdHlsZSkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVtpXSAhPT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0nICsgeC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eU1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcFtuYW1lXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uc0RlZmluZWQpIHsKICAgICAgICAgICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlPT09J3J1bGVzZXQnIHx8IHNlc3Npb24uJG1vZGUuJGlkID09ICJhY2UvbW9kZS9zY3NzIikgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgICAgIGlmICgvOlteO10rJC8udGVzdChsaW5lKSkgewogICAgICAgICAgICAgICAgLyhbXHdcLV0rKTpbXjpdKiQvLnRlc3QobGluZSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbXTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcCk7CiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKHByb3BlcnR5KXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHByb3BlcnR5LAogICAgICAgICAgICAgICAgc25pcHBldDogcHJvcGVydHkgKyAnOiAkMDsnLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIHZhciBwcm9wZXJ0eSA9ICgvKFtcd1wtXSspOlteOl0qJC8uZXhlYyhsaW5lKSB8fCB7fSlbMV07CgogICAgICAgIGlmICghcHJvcGVydHkpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHByb3BlcnR5IGluIHByb3BlcnR5TWFwICYmIHR5cGVvZiBwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkgdmFsdWUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKENzc0NvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkNzc0NvbXBsZXRpb25zID0gQ3NzQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKCiAgICB0aGlzLmFkZCgiY29sb24iLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnOicgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoL14oXHMrW147XXxccyokKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2UuZW5kLmNvbHVtbiwgcmFuZ2UuZW5kLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArKzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzsnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoIiFpbXBvcnRhbnQiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnIScgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CgogICAgICAgICAgICBpZiAoL15ccyooO3x9fCQpLy50ZXN0KGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnIWltcG9ydGFudCcsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMTAsIDEwXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKb29wLmluaGVyaXRzKENzc0JlaGF2aW91ciwgQ3N0eWxlQmVoYXZpb3VyKTsKCmV4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3NzQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2Nzc19jb21wbGV0aW9ucyIpLkNzc0NvbXBsZXRpb25zOwp2YXIgQ3NzQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IENzc0NvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gImNTdHlsZSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xzKiQvKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY29uc3RhbnRPdGhlclN5bWJvbCA9IGV4cG9ydHMuY29uc3RhbnRPdGhlclN5bWJvbCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyLnN5bWJvbC5ydWJ5IiwgLy8gc3ltYm9sCiAgICByZWdleCA6ICJbOl0oPzpbQS1aYS16X118W0AkXSg/PVthLXpBLVowLTlfXSkpW2EtekEtWjAtOV9dKlshPT9dPyIKfTsKCnZhciBxU3RyaW5nID0gZXhwb3J0cy5xU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCn07Cgp2YXIgcXFTdHJpbmcgPSBleHBvcnRzLnFxU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCn07Cgp2YXIgdFN0cmluZyA9IGV4cG9ydHMudFN0cmluZyA9IHsKICAgIHRva2VuIDogInN0cmluZyIsIC8vIGJhY2t0aWNrIHN0cmluZwogICAgcmVnZXggOiAiW2BdKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1tgXSIKfTsKCnZhciBjb25zdGFudE51bWVyaWNIZXggPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0hleCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0oPzpbMC05YS1mQS1GXXxfKD89WzAtOWEtZkEtRl0pKSpcXGIiCn07Cgp2YXIgY29uc3RhbnROdW1lcmljRmxvYXQgPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0Zsb2F0ID0gewogICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICByZWdleCA6ICJbKy1dP1xcZCg/OlxcZHxfKD89XFxkKSkqKD86KD86XFwuXFxkKD86XFxkfF8oPz1cXGQpKSopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgp9OwoKdmFyIGluc3RhbmNlVmFyaWFibGUgPSBleHBvcnRzLmluc3RhbmNlVmFyaWFibGUgPSB7CiAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgp9OwoKdmFyIFJ1YnlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYm9ydHxBcnJheXxhc3NlcnR8YXNzZXJ0X2VxdWFsfGFzc2VydF9ub3RfZXF1YWx8YXNzZXJ0X3NhbWV8YXNzZXJ0X25vdF9zYW1lfCIgKwogICAgICAgICJhc3NlcnRfbmlsfGFzc2VydF9ub3RfbmlsfGFzc2VydF9tYXRjaHxhc3NlcnRfbm9fbWF0Y2h8YXNzZXJ0X2luX2RlbHRhfGFzc2VydF90aHJvd3N8IiArCiAgICAgICAgImFzc2VydF9yYWlzZXxhc3NlcnRfbm90aGluZ19yYWlzZWR8YXNzZXJ0X2luc3RhbmNlX29mfGFzc2VydF9raW5kX29mfGFzc2VydF9yZXNwb25kX3RvfCIgKwogICAgICAgICJhc3NlcnRfb3BlcmF0b3J8YXNzZXJ0X3NlbmR8YXNzZXJ0X2RpZmZlcmVuY2V8YXNzZXJ0X25vX2RpZmZlcmVuY2V8YXNzZXJ0X3JlY29nbml6ZXN8IiArCiAgICAgICAgImFzc2VydF9nZW5lcmF0ZXN8YXNzZXJ0X3Jlc3BvbnNlfGFzc2VydF9yZWRpcmVjdGVkX3RvfGFzc2VydF90ZW1wbGF0ZXxhc3NlcnRfc2VsZWN0fCIgKwogICAgICAgICJhc3NlcnRfc2VsZWN0X2VtYWlsfGFzc2VydF9zZWxlY3RfcmpzfGFzc2VydF9zZWxlY3RfZW5jb2RlZHxjc3Nfc2VsZWN0fGF0X2V4aXR8IiArCiAgICAgICAgImF0dHJ8YXR0cl93cml0ZXJ8YXR0cl9yZWFkZXJ8YXR0cl9hY2Nlc3NvcnxhdHRyX2FjY2Vzc2libGV8YXV0b2xvYWR8YmluZGluZ3xibG9ja19naXZlbj98Y2FsbGNjfCIgKwogICAgICAgICJjYWxsZXJ8Y2F0Y2h8Y2hvbXB8Y2hvbXAhfGNob3B8Y2hvcCF8ZGVmaW5lZD98ZGVsZXRlX3ZpYV9yZWRpcmVjdHxldmFsfGV4ZWN8ZXhpdHwiICsKICAgICAgICAiZXhpdCF8ZmFpbHxGbG9hdHxmbHVua3xmb2xsb3dfcmVkaXJlY3QhfGZvcmt8Zm9ybV9mb3J8Zm9ybV90YWd8Zm9ybWF0fGdldHN8Z2xvYmFsX3ZhcmlhYmxlc3xnc3VifCIgKwogICAgICAgICJnc3ViIXxnZXRfdmlhX3JlZGlyZWN0fGhvc3QhfGh0dHBzP3xodHRwcyF8aW5jbHVkZXxJbnRlZ2VyfGxhbWJkYXxsaW5rX3RvfCIgKwogICAgICAgICJsaW5rX3RvX3VubGVzc19jdXJyZW50fGxpbmtfdG9fZnVuY3Rpb258bGlua190b19yZW1vdGV8bG9hZHxsb2NhbF92YXJpYWJsZXN8bG9vcHxvcGVufG9wZW5fc2Vzc2lvbnwiICsKICAgICAgICAicHxwcmludHxwcmludGZ8cHJvY3xwdXRjfHB1dHN8cG9zdF92aWFfcmVkaXJlY3R8cHV0X3ZpYV9yZWRpcmVjdHxyYWlzZXxyYW5kfCIgKwogICAgICAgICJyYXd8cmVhZGxpbmV8cmVhZGxpbmVzfHJlZGlyZWN0P3xyZXF1ZXN0X3ZpYV9yZWRpcmVjdHxyZXF1aXJlfHNjYW58c2VsZWN0fCIgKwogICAgICAgICJzZXRfdHJhY2VfZnVuY3xzbGVlcHxzcGxpdHxzcHJpbnRmfHNyYW5kfFN0cmluZ3xzdHlsZXNoZWV0X2xpbmtfdGFnfHN5c2NhbGx8c3lzdGVtfHN1YnxzdWIhfHRlc3R8IiArCiAgICAgICAgInRocm93fHRyYWNlX3Zhcnx0cmFwfHVudHJhY2VfdmFyfGF0YW4yfGNvc3xleHB8ZnJleHB8bGRleHB8bG9nfGxvZzEwfHNpbnxzcXJ0fHRhbnwiICsKICAgICAgICAicmVuZGVyfGphdmFzY3JpcHRfaW5jbHVkZV90YWd8Y3NyZl9tZXRhX3RhZ3xsYWJlbF90YWd8dGV4dF9maWVsZF90YWd8c3VibWl0X3RhZ3xjaGVja19ib3hfdGFnfCIgKwogICAgICAgICJjb250ZW50X3RhZ3xyYWRpb19idXR0b25fdGFnfHRleHRfYXJlYV90YWd8cGFzc3dvcmRfZmllbGRfdGFnfGhpZGRlbl9maWVsZF90YWd8IiArCiAgICAgICAgImZpZWxkc19mb3J8c2VsZWN0X3RhZ3xvcHRpb25zX2Zvcl9zZWxlY3R8b3B0aW9uc19mcm9tX2NvbGxlY3Rpb25fZm9yX3NlbGVjdHxjb2xsZWN0aW9uX3NlbGVjdHwiICsKICAgICAgICAidGltZV96b25lX3NlbGVjdHxzZWxlY3RfZGF0ZXxzZWxlY3RfdGltZXxzZWxlY3RfZGF0ZXRpbWV8ZGF0ZV9zZWxlY3R8dGltZV9zZWxlY3R8ZGF0ZXRpbWVfc2VsZWN0fCIgKwogICAgICAgICJzZWxlY3RfeWVhcnxzZWxlY3RfbW9udGh8c2VsZWN0X2RheXxzZWxlY3RfaG91cnxzZWxlY3RfbWludXRlfHNlbGVjdF9zZWNvbmR8ZmlsZV9maWVsZF90YWd8IiArCiAgICAgICAgImZpbGVfZmllbGR8cmVzcG9uZF90b3xza2lwX2JlZm9yZV9maWx0ZXJ8YXJvdW5kX2ZpbHRlcnxhZnRlcl9maWx0ZXJ8dmVyaWZ5fCIgKwogICAgICAgICJwcm90ZWN0X2Zyb21fZm9yZ2VyeXxyZXNjdWVfZnJvbXxoZWxwZXJfbWV0aG9kfHJlZGlyZWN0X3RvfGJlZm9yZV9maWx0ZXJ8IiArCiAgICAgICAgInNlbmRfZGF0YXxzZW5kX2ZpbGV8dmFsaWRhdGVzX3ByZXNlbmNlX29mfHZhbGlkYXRlc191bmlxdWVuZXNzX29mfHZhbGlkYXRlc19sZW5ndGhfb2Z8IiArCiAgICAgICAgInZhbGlkYXRlc19mb3JtYXRfb2Z8dmFsaWRhdGVzX2FjY2VwdGFuY2Vfb2Z8dmFsaWRhdGVzX2Fzc29jaWF0ZWR8dmFsaWRhdGVzX2V4Y2x1c2lvbl9vZnwiICsKICAgICAgICAidmFsaWRhdGVzX2luY2x1c2lvbl9vZnx2YWxpZGF0ZXNfbnVtZXJpY2FsaXR5X29mfHZhbGlkYXRlc193aXRofHZhbGlkYXRlc19lYWNofCIgKwogICAgICAgICJhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfYmFzaWN8YXV0aGVudGljYXRlX29yX3JlcXVlc3Rfd2l0aF9odHRwX2RpZ2VzdHwiICsKICAgICAgICAiZmlsdGVyX3BhcmFtZXRlcl9sb2dnaW5nfG1hdGNofGdldHxwb3N0fHJlc291cmNlc3xyZWRpcmVjdHxzY29wZXxhc3NlcnRfcm91dGluZ3wiICsKICAgICAgICAidHJhbnNsYXRlfGxvY2FsaXplfGV4dHJhY3RfbG9jYWxlX2Zyb21fdGxkfGNhY2hlc19wYWdlfGV4cGlyZV9wYWdlfGNhY2hlc19hY3Rpb258ZXhwaXJlX2FjdGlvbnwiICsKICAgICAgICAiY2FjaGV8ZXhwaXJlX2ZyYWdtZW50fGV4cGlyZV9jYWNoZV9mb3J8b2JzZXJ2ZXxjYWNoZV9zd2VlcGVyfCIgKwogICAgICAgICJoYXNfbWFueXxoYXNfb25lfGJlbG9uZ3NfdG98aGFzX2FuZF9iZWxvbmdzX3RvX21hbnkiCiAgICApOwoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYWxpYXN8YW5kfEJFR0lOfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRlZmluZWR8ZG98ZWxzZXxlbHNpZnxFTkR8ZW5kfGVuc3VyZXwiICsKICAgICAgICAiX19GSUxFX198ZmluYWxseXxmb3J8Z2VtfGlmfGlufF9fTElORV9ffG1vZHVsZXxuZXh0fG5vdHxvcnxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8IiArCiAgICAgICAgInJlZG98cmVzY3VlfHJldHJ5fHJldHVybnxzdXBlcnx0aGVufHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgKICAgICAgICAidHJ1ZXxUUlVFfGZhbHNlfEZBTFNFfG5pbHxOSUx8QVJHRnxBUkdWfERBVEF8RU5WfFJVQllfUExBVEZPUk18UlVCWV9SRUxFQVNFX0RBVEV8IiArCiAgICAgICAgIlJVQllfVkVSU0lPTnxTVERFUlJ8U1RESU58U1RET1VUfFRPUExFVkVMX0JJTkRJTkciCiAgICApOwoKICAgIHZhciBidWlsdGluVmFyaWFibGVzID0gKAogICAgICAgICIkREVCVUd8JGRlZm91dHwkRklMRU5BTUV8JExPQURfUEFUSHwkU0FGRXwkc3RkaW58JHN0ZG91dHwkc3RkZXJyfCRWRVJCT1NFfCIgKwogICAgICAgICIkIXxyb290X3VybHxmbGFzaHxzZXNzaW9ufGNvb2tpZXN8cGFyYW1zfHJlcXVlc3R8cmVzcG9uc2V8bG9nZ2VyfHNlbGYiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy4ka2V5d29yZHMgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiBidWlsdGluVmFyaWFibGVzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIiAvLyBUT0RPIGlzIHRoaXMgYSByZW1uYW50IGZyb20ganMgbW9kZT8KICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJePWJlZ2luKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLmxwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5lbmQiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbmV4dFN0YXRlOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86W25zcnR2ZmJhZSciXFxdfGMufEMtLnxNLS4oPzpcXEMtLik/fFswLTddezN9fHhbXGRhLWZBLUZdezJ9fHVbXGRhLWZBLUZdezR9KS8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvI3svLAogICAgICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/Oltuc3J0dmZiYWUnIlxcXXxjLnxDLS58TS0uKD86XFxDLS4pP3xbMC03XXszfXx4W1xkYS1mQS1GXXsyfXx1W1xkYS1mQS1GXXs0fSkvCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4uc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyN7LywKICAgICAgICAgICAgICAgICAgICBwdXNoICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLycvLAogICAgICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXFxbJ1xcXS8KICAgICAgICAgICAgICAgIH0sICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJy8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH1dLAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIG5hbWVzcGFjZXMgYXJlbid0IHN5bWJvbHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjo6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICAgICAgICAgICAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmNsYXNzIiwgLy8gY2xhc3MgbmFtZQogICAgICAgICAgICAgICAgcmVnZXggOiAiW0EtWl1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY29uc3RhbnRPdGhlclN5bWJvbCwKICAgICAgICAgICAgY29uc3RhbnROdW1lcmljSGV4LAogICAgICAgICAgICBjb25zdGFudE51bWVyaWNGbG9hdCwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uc2VwYXJhdG9yLmtleS12YWx1ZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI9PiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAiaGVyZWRvYyIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHZhbHVlWzJdID09ICctJyA/ICJpbmRlbnRlZEhlcmVkb2MiIDogImhlcmVkb2MiOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzNdKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToiY29uc3RhbnQiLCB2YWx1ZTogdG9rZW5zWzFdfSwKICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6InN0cmluZyIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3VwcG9ydC5jbGFzcyIsIHZhbHVlOiB0b2tlbnNbM119LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s0XX0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8PC0/KShbJ1wiYF0/KShbXFx3XSspKFsnXCJgXT8pIiwKICAgICAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICAgICAgaGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogIGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJeICsiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dCA6IGZ1bmN0aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0YXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5jaGFyYWN0ZXIiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXEJcXD8uIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl49ZW5kKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoUnVieUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5SdWJ5SGlnaGxpZ2h0UnVsZXMgPSBSdWJ5SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciByZSA9IC9cUy87CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSB8fCBsaW5lW3N0YXJ0TGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGluZS5zZWFyY2gocmUpOwoKICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBpZiAobGluZVtsZXZlbF0gIT0gIiMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBuZXh0W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocHJldkluZGVudCA9PSBpbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMikuc2VhcmNoKC9cUy8pID09IC0xKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgaW5kZW50KQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKCiAgICAgICAgaWYgKGluZGVudCA8IG5leHRJbmRlbnQpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ydWJ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcnVieV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUnVieUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIpLlJ1YnlIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUnVieUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKltce1woXFtdXHMqJC8pOwogICAgICAgICAgICB2YXIgc3RhcnRpbmdDbGFzc09yTWV0aG9kID0gbGluZS5tYXRjaCgvXlxzKihjbGFzc3xkZWZ8bW9kdWxlKVxzLiokLyk7CiAgICAgICAgICAgIHZhciBzdGFydGluZ0RvQmxvY2sgPSBsaW5lLm1hdGNoKC8uKmRvKFxzKnxccytcfC4qXHxccyopJC8pOwogICAgICAgICAgICB2YXIgc3RhcnRpbmdDb25kaXRpb25hbCA9IGxpbmUubWF0Y2goL15ccyooaWZ8ZWxzZXx3aGVuKVxzKi8pOwogICAgICAgICAgICBpZiAobWF0Y2ggfHwgc3RhcnRpbmdDbGFzc09yTWV0aG9kIHx8IHN0YXJ0aW5nRG9CbG9jayB8fCBzdGFydGluZ0NvbmRpdGlvbmFsKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiAvXlxzKyhlbmR8ZWxzZSkkLy50ZXN0KGxpbmUgKyBpbnB1dCkgfHwgdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgaWYgKC99Ly50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChzZXNzaW9uLCByb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHByZXZMaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHByZXZMaW5lKTsKICAgICAgICB2YXIgdGFiID0gc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKICAgICAgICBpZiAocHJldkluZGVudC5sZW5ndGggPD0gaW5kZW50Lmxlbmd0aCkgewogICAgICAgICAgICBpZiAoaW5kZW50LnNsaWNlKC10YWIubGVuZ3RoKSA9PSB0YWIpCiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZShuZXcgUmFuZ2Uocm93LCBpbmRlbnQubGVuZ3RoLXRhYi5sZW5ndGgsIHJvdywgaW5kZW50Lmxlbmd0aCkpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcnVieSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2VqcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9jc3MiLCJhY2UvbW9kZS9ydWJ5Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRWpzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7CiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKICAgIAogICAgaWYgKCFzdGFydCkKICAgICAgICBzdGFydCA9ICIoPzo8JXw8XFw/fHt7KSI7CiAgICBpZiAoIWVuZCkKICAgICAgICBlbmQgPSAiKD86JT58XFw/Pnx9fSkiOwoKICAgIGZvciAodmFyIGkgaW4gdGhpcy4kcnVsZXMpIHsKICAgICAgICB0aGlzLiRydWxlc1tpXS51bnNoaWZ0KHsKICAgICAgICAgICAgdG9rZW4gOiAibWFya3VwLmxpc3QubWV0YS50YWciLAogICAgICAgICAgICByZWdleCA6IHN0YXJ0ICsgIig/IVs+fV0pWy09XT8iLAogICAgICAgICAgICBwdXNoICA6ICJlanMtc3RhcnQiCiAgICAgICAgfSk7CiAgICB9CiAgICAKICAgIHRoaXMuZW1iZWRSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImVqcy0iLCBbewogICAgICAgIHRva2VuIDogIm1hcmt1cC5saXN0Lm1ldGEudGFnIiwKICAgICAgICByZWdleCA6ICItPyIgKyBlbmQsCiAgICAgICAgbmV4dCAgOiAicG9wIgogICAgfSwgewogICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgcmVnZXg6ICIvLy4qPyIgKyBlbmQsCiAgICAgICAgbmV4dDogInBvcCIKICAgIH1dKTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCm9vcC5pbmhlcml0cyhFanNIaWdobGlnaHRSdWxlcywgSHRtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuRWpzSGlnaGxpZ2h0UnVsZXMgPSBFanNIaWdobGlnaHRSdWxlczsKCgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIFJ1YnlNb2RlID0gcmVxdWlyZSgiLi9ydWJ5IikuTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEVqc0hpZ2hsaWdodFJ1bGVzOyAgICAKICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CiAgICAgICAgImpzLSI6IEphdmFTY3JpcHRNb2RlLAogICAgICAgICJjc3MtIjogQ3NzTW9kZSwKICAgICAgICAiZWpzLSI6IEphdmFTY3JpcHRNb2RlCiAgICB9KTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9lanMiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9lanMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-elixir.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9lbGl4aXJfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRWxpeGlySGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAnbWV0YS5tb2R1bGUuZWxpeGlyJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLm1vZHVsZS5lbGl4aXInLAogICAgICAgICAgICAgICdtZXRhLm1vZHVsZS5lbGl4aXInLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50eXBlLm1vZHVsZS5lbGl4aXInIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKGRlZm1vZHVsZSkoXFxzKykoKD86W0EtWl1cXHcqXFxzKlxcLlxccyopKltBLVpdXFx3KiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycsCiAgICAgICAgICAgcmVnZXg6ICdAKD86bW9kdWxlfHR5cGUpP2RvYyAoPzp+W2Etel0pPyIiIicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5oZXJlZG9jJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxzKiIiIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdAZG9jIHdpdGggaGVyZWRvY3MgaXMgdHJlYXRlZCBhcyBkb2N1bWVudGF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnLAogICAgICAgICAgIHJlZ2V4OiAnQCg/Om1vZHVsZXx0eXBlKT9kb2MgfltBLVpdIiIiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXHMqIiIiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdAZG9jIHdpdGggaGVyZWRvY3MgaXMgdHJlYXRlZCBhcyBkb2N1bWVudGF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnLAogICAgICAgICAgIHJlZ2V4OiAnQCg/Om1vZHVsZXx0eXBlKT9kb2MgKD86flthLXpdKT9cJ1wnXCcnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xccypcJ1wnXCcnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnQGRvYyB3aXRoIGhlcmVkb2NzIGlzIHRyZWF0ZWQgYXMgZG9jdW1lbnRhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5oZXJlZG9jJywKICAgICAgICAgICByZWdleDogJ0AoPzptb2R1bGV8dHlwZSk/ZG9jIH5bQS1aXVwnXCdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5oZXJlZG9jJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxzKlwnXCdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnQGRvYyB3aXRoIGhlcmVkb2NzIGlzIHRyZWF0ZWQgYXMgZG9jdW1lbnRhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5mYWxzZScsCiAgICAgICAgICAgcmVnZXg6ICdAKD86bW9kdWxlfHR5cGUpP2RvYyBmYWxzZScsCiAgICAgICAgICAgY29tbWVudDogJ0Bkb2MgZmFsc2UgaXMgdHJlYXRlZCBhcyBkb2N1bWVudGF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLnN0cmluZycsCiAgICAgICAgICAgcmVnZXg6ICdAKD86bW9kdWxlfHR5cGUpP2RvYyAiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLnN0cmluZycsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLnN0cmluZycgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdAZG9jIHdpdGggc3RyaW5nIGlzIHRyZWF0ZWQgYXMgZG9jdW1lbnRhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86ZG98ZW5kfGNhc2V8YmN8bGN8Zm9yfGlmfGNvbmR8dW5sZXNzfHRyeXxyZWNlaXZlfGZufGRlZm1vZHVsZXxkZWZwP3xkZWZwcm90b2NvbHxkZWZpbXBsfGRlZnJlY29yZHxkZWZzdHJ1Y3R8ZGVmbWFjcm9wP3xkZWZkZWxlZ2F0ZXxkZWZjYWxsYmFja3xkZWZtYWNyb2NhbGxiYWNrfGRlZmV4Y2VwdGlvbnxkZWZvdmVycmlkYWJsZXxleGl0fGFmdGVyfHJlc2N1ZXxjYXRjaHxlbHNlfHJhaXNlfHRocm93fGltcG9ydHxyZXF1aXJlfGFsaWFzfHVzZXxxdW90ZXx1bnF1b3RlfHN1cGVyKVxcYig/IVs/IV0pJywKICAgICAgICAgICBUT0RPOiAnRklYTUU6IHJlZ2V4cCBkb2VzblwndCBoYXZlIGpzIGVxdWl2YWxlbnQnLAogICAgICAgICAgIG9yaWdpbmFsUmVnZXg6ICcoPzwhXFwuKVxcYihkb3xlbmR8Y2FzZXxiY3xsY3xmb3J8aWZ8Y29uZHx1bmxlc3N8dHJ5fHJlY2VpdmV8Zm58ZGVmbW9kdWxlfGRlZnA/fGRlZnByb3RvY29sfGRlZmltcGx8ZGVmcmVjb3JkfGRlZnN0cnVjdHxkZWZtYWNyb3A/fGRlZmRlbGVnYXRlfGRlZmNhbGxiYWNrfGRlZm1hY3JvY2FsbGJhY2t8ZGVmZXhjZXB0aW9ufGRlZm92ZXJyaWRhYmxlfGV4aXR8YWZ0ZXJ8cmVzY3VlfGNhdGNofGVsc2V8cmFpc2V8dGhyb3d8aW1wb3J0fHJlcXVpcmV8YWxpYXN8dXNlfHF1b3RlfHVucXVvdGV8c3VwZXIpXFxiKD8hWz8hXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphbmR8bm90fG9yfHdoZW58eG9yfGlufGlubGlzdHxpbmJpdHMpXFxiJywKICAgICAgICAgICBUT0RPOiAnRklYTUU6IHJlZ2V4cCBkb2VzblwndCBoYXZlIGpzIGVxdWl2YWxlbnQnLAogICAgICAgICAgIG9yaWdpbmFsUmVnZXg6ICcoPzwhXFwuKVxcYihhbmR8bm90fG9yfHdoZW58eG9yfGlufGlubGlzdHxpbmJpdHMpXFxiJywKICAgICAgICAgICBjb21tZW50OiAnIGFzIGFib3ZlLCBqdXN0IGRvZXNuXCd0IG5lZWQgYSBcJ2VuZFwnIGFuZCBkb2VzIGEgbG9naWMgb3BlcmF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYig/Om5pbHx0cnVlfGZhbHNlKVxcYig/IVs/IV0pJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUubGFuZ3VhZ2UuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYl9fKD86Q0FMTEVSfEVOVnxNT0RVTEV8RElSKV9fXFxiKD8hWz8hXSknIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnZhcmlhYmxlLmVsaXhpcicsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLm90aGVyLnJlYWR3cml0ZS5tb2R1bGUuZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKEApKFthLXpBLVpfXVxcdyopJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi52YXJpYWJsZS5lbGl4aXInLAogICAgICAgICAgICAgICd2YXJpYWJsZS5vdGhlci5hbm9ueW1vdXMuZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKCYpKFxcZCopJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUub3RoZXIuY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYltBLVpdXFx3KlxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYig/OjB4W1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLUZdKSp8XFxkKD86Xz9cXGQpKig/OlxcLig/IVteWzpzcGFjZTpdWzpkaWdpdDpdXSkoPzpfP1xcZCkqKT8oPzpbZUVdWy0rXT9cXGQoPzpfP1xcZCkqKT98MGJbMDFdK3wwb1swLTddKylcXGInLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJ1xcYigweFxcaCg/Pl8/XFxoKSp8XFxkKD8+Xz9cXGQpKihcXC4oPyFbXls6c3BhY2U6XVs6ZGlnaXQ6XV0pKD8+Xz9cXGQpKik/KFtlRV1bLStdP1xcZCg/Pl8/XFxkKSopP3wwYlswMV0rfDBvWzAtN10rKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJzpcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29uc3RhbnQub3RoZXIuc3ltYm9sLnNpbmdsZS1xdW90ZWQuZWxpeGlyJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJzoiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb25zdGFudC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVycG9sYXRlZF9lbGl4aXInIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5kb3VibGUtcXVvdGVkLmVsaXhpcicgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnKD86XCdcJ1wnKScsCiAgICAgICAgICAgVE9ETzogJ0ZJWE1FOiByZWdleHAgZG9lc25cJ3QgaGF2ZSBqcyBlcXVpdmFsZW50JywKICAgICAgICAgICBvcmlnaW5hbFJlZ2V4OiAnKD8+XCdcJ1wnKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeXFxzKlwnXCdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnZhcmlhYmxlLnF1b3RlZC5zaW5nbGUuaGVyZWRvYy5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnU2luZ2xlLXF1b3RlZCBoZXJlZG9jcycgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnZhcmlhYmxlLnF1b3RlZC5zaW5nbGUuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpbmdsZSBxdW90ZWQgc3RyaW5nIChhbGxvd3MgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJyg/OiIiIiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PiIiIiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccyoiIiInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuaGVyZWRvYy5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnRG91YmxlLXF1b3RlZCBoZXJlZG9jcycgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ2RvdWJsZSBxdW90ZWQgc3RyaW5nIChhbGxvd3MgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bYS16XSg/OiIiIiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJ35bYS16XSg/PiIiIiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccyoiIiInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuaGVyZWRvYy5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnRG91YmxlLXF1b3RlZCBoZXJlZG9jcyBzaWdpbHMnIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnflthLXpdXFx7JywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcuaW50ZXJwb2xhdGVkLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAoYWxsb3cgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bYS16XVxcWycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF1bYS16XSonLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLmludGVycG9sYXRlZC5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnc2lnaWwgKGFsbG93IGZvciBpbnRlcnBvbGF0aW9uKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICd+W2Etel1cXDwnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFw+W2Etel0qJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVycG9sYXRlZF9lbGl4aXInIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5pbnRlcnBvbGF0ZWQuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpZ2lsIChhbGxvdyBmb3IgaW50ZXJwb2xhdGlvbiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnflthLXpdXFwoJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcuaW50ZXJwb2xhdGVkLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAoYWxsb3cgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bYS16XVteXFx3XScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdbXlxcd11bYS16XSonLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcuaW50ZXJwb2xhdGVkLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAoYWxsb3cgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bQS1aXSg/OiIiIiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJ35bQS1aXSg/PiIiIiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccyoiIiInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQub3RoZXIubGl0ZXJhbC51cHBlci5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnRG91YmxlLXF1b3RlZCBoZXJlZG9jcyBzaWdpbHMnIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnfltBLVpdXFx7JywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5vdGhlci5saXRlcmFsLnVwcGVyLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAod2l0aG91dCBpbnRlcnBvbGF0aW9uKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICd+W0EtWl1cXFsnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxdW2Etel0qJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLm90aGVyLmxpdGVyYWwudXBwZXIuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpZ2lsICh3aXRob3V0IGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bQS1aXVxcPCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXD5bYS16XSonLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQub3RoZXIubGl0ZXJhbC51cHBlci5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnc2lnaWwgKHdpdGhvdXQgaW50ZXJwb2xhdGlvbiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnfltBLVpdXFwoJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5vdGhlci5saXRlcmFsLnVwcGVyLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAod2l0aG91dCBpbnRlcnBvbGF0aW9uKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICd+W0EtWl1bXlxcd10nLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnW15cXHddW2Etel0qJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLm90aGVyLmxpdGVyYWwudXBwZXIuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpZ2lsICh3aXRob3V0IGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiBbJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywgJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5lbGl4aXInXSwKICAgICAgICAgICByZWdleDogJyg6KShbYS16QS1aX11bXFx3QF0qKD86Wz8hXXw9KD8hWz49XSkpP3xcXDxcXD58PT09P3whPT0/fDw8Pj58PDw8fD4+Pnx+fn58Ojp8PFxcLXxcXHw+fD0+fH58fj18PXwvfFxcXFxcXFxcfFxcKlxcKj98XFwuXFwuP1xcLj98Pj0/fDw9P3wmJj8mP3xcXCtcXCs/fFxcLVxcLT98XFx8XFx8P1xcfD98XFwhfEB8XFwlP1xce1xcfXwlfFxcW1xcXXxcXF4oPzpcXF5cXF4pPyknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PCE6KSg6KSg/PlthLXpBLVpfXVtcXHdAXSooPz5bPyFdfD0oPyFbPj1dKSk/fFxcPFxcPnw9PT0/fCE9PT98PDw+Pnw8PDx8Pj4+fH5+fnw6Onw8XFwtfFxcfD58PT58fnx+PXw9fC98XFxcXFxcXFx8XFwqXFwqP3xcXC5cXC4/XFwuP3w+PT98PD0/fCYmPyY/fFxcK1xcKz98XFwtXFwtP3xcXHxcXHw/XFx8P3xcXCF8QHxcXCU/XFx7XFx9fCV8XFxbXFxdfFxcXihcXF5cXF4pPyknLAogICAgICAgICAgIGNvbW1lbnQ6ICdzeW1ib2xzJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb25zdGFudC5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnKD86W2EtekEtWl9dW1xcd0BdKig/Ols/IV0pPyk6KD8hOiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PlthLXpBLVpfXVtcXHdAXSooPz5bPyFdKT8pKDopKD8hOiknLAogICAgICAgICAgIGNvbW1lbnQ6ICdzeW1ib2xzJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmVsaXhpcicsCiAgICAgICAgICAgICAgJ2NvbW1lbnQubGluZS5udW1iZXItc2lnbi5lbGl4aXInIF0sCiAgICAgICAgICAgcmVnZXg6ICcoIykoLiopJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubnVtZXJpYy5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFw/KD86XFxcXCg/OnhbXFxkYS1mQS1GXXsxLDJ9KD8hW1xcZGEtZkEtRl0pXFxifFteeE1DXSl8W15cXHNcXFxcXSknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PCFcXHcpXFw/KFxcXFwoeFxcaHsxLDJ9KD8hXFxoKVxcYnxbXnhNQ10pfFteXFxzXFxcXF0pJywKICAgICAgICAgICBjb21tZW50OiAnXG5cdFx0XHRtYXRjaGVzIHF1ZXN0aW9ubWFyay1sZXR0ZXJzLlxuXG5cdFx0XHRleGFtcGxlcyAoMXN0IGFsdGVybmF0aW9uID0gaGV4KTpcblx0XHRcdD9cXHgxICAgICA/XFx4NjFcblxuXHRcdFx0ZXhhbXBsZXMgKDJyZCBhbHRlcm5hdGlvbiA9IGVzY2FwZWQpOlxuXHRcdFx0P1xcbiAgICAgID9cXGJcblxuXHRcdFx0ZXhhbXBsZXMgKDNyZCBhbHRlcm5hdGlvbiA9IG5vcm1hbCk6XG5cdFx0XHQ/YSAgICAgICA/QSAgICAgICA/MCBcblx0XHRcdD8qICAgICAgID8iICAgICAgID8oIFxuXHRcdFx0Py4gICAgICAgPyNcblx0XHRcdFxuXHRcdFx0dGhlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgcHJldmVudHMgYWdhaW5zdCBtYXRjaGluZ1xuXHRcdFx0cCg0Mi50YWludGVkPylcblx0XHRcdCcgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuYXNzaWdubWVudC5hdWdtZW50ZWQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcKz18XFwtPXxcXHxcXHw9fH49fCYmPScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuY29tcGFyaXNvbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnPT09P3whPT0/fDw9P3w+PT8nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmJpdHdpc2UuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcfHszfXwmezN9fFxcXnszfXw8ezN9fD57M318fnszfScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IubG9naWNhbC5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnISt8XFxibm90XFxifCYmfFxcYmFuZFxcYnxcXHxcXHx8XFxib3JcXGJ8XFxieG9yXFxiJywKICAgICAgICAgICBvcmlnaW5hbFJlZ2V4OiAnKD88PVsgXFx0XSkhK3xcXGJub3RcXGJ8JiZ8XFxiYW5kXFxifFxcfFxcfHxcXGJvclxcYnxcXGJ4b3JcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmFyaXRobWV0aWMuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcKnxcXCt8XFwtfC8nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLm90aGVyLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXHx8XFwrXFwrfFxcLVxcLXxcXCpcXCp8XFxcXFxcXFx8XFw8XFwtfFxcPFxcPnxcXDxcXDx8XFw+XFw+fFxcOlxcOnxcXC5cXC58XFx8Pnx+fD0+JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmVsaXhpcicsIHJlZ2V4OiAnPScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5vdGhlci5lbGl4aXInLCByZWdleDogJzonIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3Iuc3RhdGVtZW50LmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXDsnIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3Iub2JqZWN0LmVsaXhpcicsIHJlZ2V4OiAnLCcgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5tZXRob2QuZWxpeGlyJywgcmVnZXg6ICdcXC4nIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZWN0aW9uLnNjb3BlLmVsaXhpcicsIHJlZ2V4OiAnXFx7fFxcfScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uYXJyYXkuZWxpeGlyJywgcmVnZXg6ICdcXFt8XFxdJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VjdGlvbi5mdW5jdGlvbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFwofFxcKScgfSBdLAogICAgICAnI2VzY2FwZWRfY2hhcic6IAogICAgICAgWyB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFxcXCg/OnhbXFxkYS1mQS1GXXsxLDJ9fC4pJyB9IF0sCiAgICAgICcjaW50ZXJwb2xhdGVkX2VsaXhpcic6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAnc291cmNlLmVsaXhpci5lbWJlZGRlZC5zb3VyY2UnLAogICAgICAgICAgICAgICdzb3VyY2UuZWxpeGlyLmVtYmVkZGVkLnNvdXJjZS5lbXB0eScgXSwKICAgICAgICAgICByZWdleDogJygjXFx7KShcXH0pJyB9LAogICAgICAgICB7IHRvZG86IAogICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VjdGlvbi5lbWJlZGRlZC5lbGl4aXInLAogICAgICAgICAgICAgIHJlZ2V4OiAnI1xceycsCiAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZW1iZWRkZWQuZWxpeGlyJywKICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI25lc3RfY3VybHlfYW5kX3NlbGYnIH0sCiAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnJHNlbGYnIH0sCiAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzb3VyY2UuZWxpeGlyLmVtYmVkZGVkLnNvdXJjZScgfSBdIH0gfSBdLAogICAgICAnI25lc3RfY3VybHlfYW5kX3NlbGYnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uc2NvcGUuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xceycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uc2NvcGUuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI25lc3RfY3VybHlfYW5kX3NlbGYnIH0gXSB9LAogICAgICAgICB7IGluY2x1ZGU6ICckc2VsZicgfSBdLAogICAgICAnI3JlZ2V4X3N1Yic6IAogICAgICAgWyB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYXJiaXRyYXJ5LXJlcGl0aXRpb24uZWxpeGlyJywKICAgICAgICAgICAgICAnc3RyaW5nLnJlZ2V4cC5hcmJpdHJhcnktcmVwaXRpdGlvbi5lbGl4aXInLAogICAgICAgICAgICAgICdzdHJpbmcucmVnZXhwLmFyYml0cmFyeS1yZXBpdGl0aW9uLmVsaXhpcicsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYXJiaXRyYXJ5LXJlcGl0aXRpb24uZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxceykoXFxkKykoKD86LFxcZCspPykoXFx9KScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY2hhcmFjdGVyLWNsYXNzLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXFsoPzpcXF4/XFxdKT8nLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNoYXJhY3Rlci1jbGFzcy5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnJlZ2V4cC5jaGFyYWN0ZXItY2xhc3MuZWxpeGlyJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZ3JvdXAuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcKCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZ3JvdXAuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3JlZ2V4X3N1YicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5yZWdleHAuZ3JvdXAuZWxpeGlyJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5lbGl4aXInLAogICAgICAgICAgICAgICdjb21tZW50LmxpbmUubnVtYmVyLXNpZ24uZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpKCMpKFxcc1tbYS16QS1aMC05LC4gXFx0PyEtXVteXFx4MDAtXFx4N0ZdXSokKScsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PD1efFxccykoIylcXHNbW2EtekEtWjAtOSwuIFxcdD8hLV1bXlxceHswMH0tXFx4ezdGfV1dKiQnLAogICAgICAgICAgIGNvbW1lbnQ6ICdXZSBhcmUgcmVzdHJpY3RpdmUgaW4gd2hhdCB3ZSBhbGxvdyB0byBnbyBhZnRlciB0aGUgY29tbWVudCBjaGFyYWN0ZXIgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLCBzaW5jZSB0aGUgYXZhaWxhYmlsaXR5IG9mIGNvbW1lbnRzIGRlcGVuZCBvbiByZWdleHAgZmxhZ3MuJyB9IF0gfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKRWxpeGlySGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7IGNvbW1lbnQ6ICdUZXh0bWF0ZSBidW5kbGUgZm9yIEVsaXhpciBQcm9ncmFtbWluZyBMYW5ndWFnZS4nLAogICAgICBmaWxlVHlwZXM6IFsgJ2V4JywgJ2V4cycgXSwKICAgICAgZmlyc3RMaW5lTWF0Y2g6ICdeIyEvLipcXGJlbGl4aXInLAogICAgICBmb2xkaW5nU3RhcnRNYXJrZXI6ICcoYWZ0ZXJ8ZWxzZXxjYXRjaHxyZXNjdWV8XFwtXFw+fFxce3xcXFt8ZG8pXFxzKiQnLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJ15cXHMqKChcXH18XFxdfGFmdGVyfGVsc2V8Y2F0Y2h8cmVzY3VlKVxccyokfGVuZFxcYiknLAogICAgICBrZXlFcXVpdmFsZW50OiAnXn5FJywKICAgICAgbmFtZTogJ0VsaXhpcicsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5lbGl4aXInIH07CgoKb29wLmluaGVyaXRzKEVsaXhpckhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5FbGl4aXJIaWdobGlnaHRSdWxlcyA9IEVsaXhpckhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZWxpeGlyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvZWxpeGlyX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgRWxpeGlySGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2VsaXhpcl9oaWdobGlnaHRfcnVsZXMiKS5FbGl4aXJIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBFbGl4aXJIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZWxpeGlyIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZWxpeGlyIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-elm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9lbG1faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRWxtSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICJrZXl3b3JkIjogImFzfGNhc2V8Y2xhc3N8ZGF0YXxkZWZhdWx0fGRlcml2aW5nfGRvfGVsc2V8ZXhwb3J0fGZvcmVpZ258IiArCiAgICAgICAgICAgICJoaWRpbmd8anNldmVudHxpZnxpbXBvcnR8aW58aW5maXh8aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8IiArCiAgICAgICAgICAgICJtb2R1bGV8bmV3dHlwZXxvZnxvcGVufHRoZW58dHlwZXx3aGVyZXxffHBvcnR8XHUwM0JCIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIAogICAgdmFyIGVzY2FwZVJlID0gL1xcKFxkK3xbJyJcXCZ0cm5idmZdKS87CiAgICAKICAgIHZhciBzbWFsbFJlID0gL1thLXpfXS8uc291cmNlOwogICAgdmFyIGxhcmdlUmUgPSAvW0EtWl0vLnNvdXJjZTsKICAgIHZhciBpZFJlID0gL1thLXpfQS1aMC05J10vLnNvdXJjZTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICBuZXh0OiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2hhcmFjdGVyIiwKICAgICAgICAgICAgcmVnZXg6ICInKD86IiArIGVzY2FwZVJlLnNvdXJjZSArICJ8LiknPyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAvMCg/Olt4WF1bMC05QS1GYS1mXSt8W29PXVswLTddKyl8XGQrKFwuXGQrKT8oW2VFXVstK10/XGQqKT8vLAogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleDogIi0tLioiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXggOiAvXC5cLnxcfHw6fD18XFx8InwtPnw8LXxcdTIxOTIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAvWy0hIyQlJiorLlwvPD0+P0BcXF58fjpcdTAzQkJcdTIxOTJdKy8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogIm9wZXJhdG9yLnB1bmN0dWF0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiAvWyw7YF0vCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleCA6IGxhcmdlUmUgKyBpZFJlICsgIitcXC4/IiwKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdID09ICIuIikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImVudGl0eS5uYW1lLmZ1bmN0aW9uIjsgCiAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0YW50Lmxhbmd1YWdlIjsgCiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIl4iICsgc21hbGxSZSAgKyBpZFJlICsgIisiLAogICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0YW50Lmxhbmd1YWdlIjsgCiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW1xcd1xceGZmLVxcdTIxOGVcXHUyNDU1LVxcdWZmZmZdK1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAiey0jPyIsCiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSB2YWx1ZS5sZW5ndGggPT0gMiA/ICJibG9ja0NvbW1lbnQiIDogImRvY0NvbW1lbnQiOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogL1xbbWFya2Rvd25cfC8sCiAgICAgICAgICAgIG5leHQ6ICJtYXJrZG93biIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6IC9bXFsoe10vIAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogL1tcXSl9XS8KICAgICAgICB9IF0sCiAgICAgICAgbWFya2Rvd246IFt7CiAgICAgICAgICAgIHJlZ2V4OiAvXHxcXS8sCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgYmxvY2tDb21tZW50OiBbewogICAgICAgICAgICByZWdleDogInstIiwKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LnN0YXJ0IiwKICAgICAgICAgICAgcHVzaDogImJsb2NrQ29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAiLX0iLAogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuZW5kIiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQiCiAgICAgICAgfV0sCiAgICAgICAgZG9jQ29tbWVudDogW3sKICAgICAgICAgICAgcmVnZXg6ICJ7LSIsCiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgICAgIHB1c2g6ICJkb2NDb21tZW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXg6ICItfSIsCiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5lbmQiLAogICAgICAgICAgICBuZXh0OiAicG9wIiAKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImRvYy5jb21tZW50IgogICAgICAgIH1dLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogZXNjYXBlUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFwoXHN8JCkvLAogICAgICAgICAgICBuZXh0OiAic3RyaW5nR2FwIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgIHN0cmluZ0dhcDogW3sKICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXg6IC9cXC8sCiAgICAgICAgICAgIG5leHQ6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImVycm9yIiwKICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfV0KICAgIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhFbG1IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuRWxtSGlnaGxpZ2h0UnVsZXMgPSBFbG1IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9lbG0iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9lbG1faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZWxtX2hpZ2hsaWdodF9ydWxlcyIpLkVsbUhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLS0iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICJ7LSIsIGVuZDogIi19IiwgbmVzdGFibGU6IHRydWV9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZWxtIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZWxtIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-erlang.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9lcmxhbmdfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRXJsYW5nSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IGluY2x1ZGU6ICcjbW9kdWxlLWRpcmVjdGl2ZScgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2ltcG9ydC1leHBvcnQtZGlyZWN0aXZlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjYmVoYXZpb3VyLWRpcmVjdGl2ZScgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3JlY29yZC1kaXJlY3RpdmUnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNkZWZpbmUtZGlyZWN0aXZlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjbWFjcm8tZGlyZWN0aXZlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjZGlyZWN0aXZlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjZnVuY3Rpb24nIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNldmVyeXRoaW5nLWVsc2UnIH0gXSwKICAgICAgJyNhdG9tJzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN5bWJvbC5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN5bWJvbC5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmVzY2FwZS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5lc2NhcGUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmVzY2FwZS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5lc2NhcGUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5vdGhlci5zeW1ib2wuZXNjYXBlLmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFxcXFwpKD86KFtiZGVmbnJzdHZcXFxcXCciXSl8KFxcXikoW0AtX10pfChbMC03XXsxLDN9KSknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2ludmFsaWQuaWxsZWdhbC5hdG9tLmVybGFuZycsIHJlZ2V4OiAnXFxcXFxcXj8uPycgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5xdW90ZWQuc2luZ2xlLmVybGFuZycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5vdGhlci5zeW1ib2wudW5xdW90ZWQuZXJsYW5nJywKICAgICAgICAgICByZWdleDogJ1thLXpdW2EtekEtWlxcZEBfXSonIH0gXSwKICAgICAgJyNiZWhhdmlvdXItZGlyZWN0aXZlJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdtZXRhLmRpcmVjdGl2ZS5iZWhhdmlvdXIuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VjdGlvbi5kaXJlY3RpdmUuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuYmVoYXZpb3VyLmVybGFuZycsCiAgICAgICAgICAgICAgJ2tleXdvcmQuY29udHJvbC5kaXJlY3RpdmUuYmVoYXZpb3VyLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLmJlaGF2aW91ci5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuYmVoYXZpb3VyLmVybGFuZycsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLnR5cGUuY2xhc3MuYmVoYXZpb3VyLmRlZmluaXRpb24uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuYmVoYXZpb3VyLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuYmVoYXZpb3VyLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmVuZC5lcmxhbmcnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKC0pKFxccyopKGJlaGF2aW91cikoXFxzKikoXFwoKShcXHMqKShbYS16XVthLXpBLVpcXGRAX10qKShcXHMqKShcXCkpKFxccyopKFxcLiknIH0gXSwKICAgICAgJyNiaW5hcnknOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYmluYXJ5LmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICc8PCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYmluYXJ5LmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICc+PicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iaW5hcnkuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IudmFsdWUtc2l6ZS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygsKXwoOiknIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVybmFsLXR5cGUtc3BlY2lmaWVycycgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5zdHJ1Y3R1cmUuYmluYXJ5LmVybGFuZycgfSBdIH0gXSwKICAgICAgJyNjaGFyYWN0ZXInOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY2hhcmFjdGVyLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZXNjYXBlLmVybGFuZycsCiAgICAgICAgICAgICAgJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5lc2NhcGUuZXJsYW5nJywKICAgICAgICAgICAgICAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5lcmxhbmcnLAogICAgICAgICAgICAgICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJyhcXCQpKFxcXFwpKD86KFtiZGVmbnJzdHZcXFxcXCciXSl8KFxcXikoW0AtX10pfChbMC03XXsxLDN9KSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdpbnZhbGlkLmlsbGVnYWwuY2hhcmFjdGVyLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXCRcXFxcXFxePy4/JyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jaGFyYWN0ZXIuZXJsYW5nJywKICAgICAgICAgICAgICAnY29uc3RhbnQuY2hhcmFjdGVyLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJyhcXCQpKFxcUyknIH0sCiAgICAgICAgIHsgdG9rZW46ICdpbnZhbGlkLmlsbGVnYWwuY2hhcmFjdGVyLmVybGFuZycsIHJlZ2V4OiAnXFwkLj8nIH0gXSwKICAgICAgJyNjb21tZW50JzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuZXJsYW5nJywKICAgICAgICAgICByZWdleDogJyUuKiQnLAogICAgICAgICAgIHB1c2hfOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5saW5lLnBlcmNlbnRhZ2UuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnJCcsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5saW5lLnBlcmNlbnRhZ2UuZXJsYW5nJyB9IF0gfSBdLAogICAgICAnI2RlZmluZS1kaXJlY3RpdmUnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ21ldGEuZGlyZWN0aXZlLmRlZmluZS5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5kZWZpbmUuZXJsYW5nJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLmRpcmVjdGl2ZS5kZWZpbmUuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuZGVmaW5lLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5kZWZpbmUuZXJsYW5nJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24ubWFjcm8uZGVmaW5pdGlvbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5kZWZpbmUuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBhcmFtZXRlcnMuZXJsYW5nJyBdLAogICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgtKShcXHMqKShkZWZpbmUpKFxccyopKFxcKCkoXFxzKikoW2EtekEtWlxcZEBfXSspKFxccyopKCwpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuZGVmaW5lLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VjdGlvbi5kaXJlY3RpdmUuZW5kLmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFxcKSkoXFxzKikoXFwuKScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNldmVyeXRoaW5nLWVsc2UnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmRpcmVjdGl2ZS5kZWZpbmUuZXJsYW5nJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ21ldGEuZGlyZWN0aXZlLmRlZmluZS5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnKD89XlxccyotXFxzKmRlZmluZVxccypcXChcXHMqW2EtekEtWlxcZEBfXStcXHMqXFwoKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLmRlZmluZS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmVuZC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhcXCkpKFxccyopKFxcLiknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ2tleXdvcmQuY29udHJvbC5kaXJlY3RpdmUuZGVmaW5lLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24ubWFjcm8uZGVmaW5pdGlvbi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJ14oXFxzKikoLSkoXFxzKikoZGVmaW5lKShcXHMqKShcXCgpKFxccyopKFthLXpBLVpcXGRAX10rKShcXHMqKShcXCgpJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5wYXJhbWV0ZXJzLmVybGFuZycgXSwKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICcoXFwpKShcXHMqKSgsKScsCiAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBhcmFtZXRlcnMuZXJsYW5nJywgcmVnZXg6ICcsJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5kZWZpbmUuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx8XFx8fFxcfHw6fDt8LHxcXC58LT4nIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZGlyZWN0aXZlLmRlZmluZS5lcmxhbmcnIH0gXSB9IF0sCiAgICAgICcjZGlyZWN0aXZlJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdtZXRhLmRpcmVjdGl2ZS5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5lcmxhbmcnLAogICAgICAgICAgICAgICdrZXl3b3JkLmNvbnRyb2wuZGlyZWN0aXZlLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKC0pKFxccyopKFthLXpdW2EtekEtWlxcZEBfXSopKFxccyopKFxcKD8pJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5lbmQuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoXFwpPykoXFxzKikoXFwuKScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNldmVyeXRoaW5nLWVsc2UnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmRpcmVjdGl2ZS5lcmxhbmcnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAnbWV0YS5kaXJlY3RpdmUuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VjdGlvbi5kaXJlY3RpdmUuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuZXJsYW5nJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLmRpcmVjdGl2ZS5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5lbmQuZXJsYW5nJyBdLAogICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgtKShcXHMqKShbYS16XVthLXpBLVpcXGRAX10qKShcXHMqKShcXC4pJyB9IF0sCiAgICAgICcjZXZlcnl0aGluZy1lbHNlJzogCiAgICAgICBbIHsgaW5jbHVkZTogJyNjb21tZW50JyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcmVjb3JkLXVzYWdlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjbWFjcm8tdXNhZ2UnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNleHByZXNzaW9uJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcja2V5d29yZCcgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3RleHR1YWwtb3BlcmF0b3InIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNmdW5jdGlvbi1jYWxsJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjdHVwbGUnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNsaXN0JyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjYmluYXJ5JyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcGFyZW50aGVzaXplZC1leHByZXNzaW9uJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY2hhcmFjdGVyJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjbnVtYmVyJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjYXRvbScgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3N0cmluZycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3N5bWJvbGljLW9wZXJhdG9yJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0gXSwKICAgICAgJyNleHByZXNzaW9uJzogCiAgICAgICBbIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wuaWYuZXJsYW5nJywKICAgICAgICAgICByZWdleDogJ1xcYmlmXFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGJlbmRcXGInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJuYWwtZXhwcmVzc2lvbi1wdW5jdHVhdGlvbicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5leHByZXNzaW9uLmlmLmVybGFuZycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wuY2FzZS5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiY2FzZVxcYicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiZW5kXFxiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVybmFsLWV4cHJlc3Npb24tcHVuY3R1YXRpb24nIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZXhwcmVzc2lvbi5jYXNlLmVybGFuZycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wucmVjZWl2ZS5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFxicmVjZWl2ZVxcYicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiZW5kXFxiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVybmFsLWV4cHJlc3Npb24tcHVuY3R1YXRpb24nIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZXhwcmVzc2lvbi5yZWNlaXZlLmVybGFuZycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdrZXl3b3JkLmNvbnRyb2wuZnVuLmVybGFuZycsCiAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50eXBlLmNsYXNzLm1vZHVsZS5lcmxhbmcnLAogICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLm1vZHVsZS1mdW5jdGlvbi5lcmxhbmcnLAogICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uZXJsYW5nJywKICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5mdW5jdGlvbi1hcml0eS5lcmxhbmcnIF0sCiAgICAgICAgICAgcmVnZXg6ICdcXGIoZnVuKShcXHMqKSg/OihbYS16XVthLXpBLVpcXGRAX10qKShcXHMqKSg6KShcXHMqKSk/KFthLXpdW2EtekEtWlxcZEBfXSopKFxccyopKC8pJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmZ1bi5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiZnVuXFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGJlbmRcXGInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAndGV4dCcsCiAgICAgICAgICAgICAgICByZWdleDogJyg/PVxcKCknLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmNsYXVzZXMuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICc7fCg/PVxcYmVuZFxcYiknLAogICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVybmFsLWZ1bmN0aW9uLXBhcnRzJyB9IF0gfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5leHByZXNzaW9uLmZ1bi5lcmxhbmcnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLnRyeS5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFxidHJ5XFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGJlbmRcXGInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJuYWwtZXhwcmVzc2lvbi1wdW5jdHVhdGlvbicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5leHByZXNzaW9uLnRyeS5lcmxhbmcnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGJiZWdpblxcYicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiZW5kXFxiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVybmFsLWV4cHJlc3Npb24tcHVuY3R1YXRpb24nIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZXhwcmVzc2lvbi5iZWdpbi5lcmxhbmcnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLnF1ZXJ5LmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGJxdWVyeVxcYicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiZW5kXFxiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZXhwcmVzc2lvbi5xdWVyeS5lcmxhbmcnIH0gXSB9IF0sCiAgICAgICcjZnVuY3Rpb24nOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ21ldGEuZnVuY3Rpb24uZXJsYW5nJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uZGVmaW5pdGlvbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmZ1bmN0aW9uLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJ14oXFxzKikoW2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKShcXHMqKSg/PVxcKCknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi50ZXJtaW5hdG9yLmZ1bmN0aW9uLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcLicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IFsgJ3RleHQnLCAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uZXJsYW5nJywgJ3RleHQnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJ14oXFxzKikoW2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKShcXHMqKSg/PVxcKCknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPz1cXCgpJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5jbGF1c2VzLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnO3woPz1cXC4pJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNwYXJlbnRoZXNpemVkLWV4cHJlc3Npb24nIH0sCiAgICAgICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJuYWwtZnVuY3Rpb24tcGFydHMnIH0gXSB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNldmVyeXRoaW5nLWVsc2UnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmZ1bmN0aW9uLmVybGFuZycgfSBdIH0gXSwKICAgICAgJyNmdW5jdGlvbi1jYWxsJzogCiAgICAgICBbIHsgdG9rZW46ICdtZXRhLmZ1bmN0aW9uLWNhbGwuZXJsYW5nJywKICAgICAgICAgICByZWdleDogJyg/PSg/OlthLXpdW2EtekEtWlxcZEBfXSp8XCdbXlwnXSpcJylcXHMqKD86XFwofDpcXHMqKD86W2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKVxccypcXCgpKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnZW50aXR5Lm5hbWUudHlwZS5jbGFzcy5tb2R1bGUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IubW9kdWxlLWZ1bmN0aW9uLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uZ3VhcmQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuYmVnaW4uZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPzooZXJsYW5nKShcXHMqKSg6KShcXHMqKSk/KGlzX2F0b218aXNfYmluYXJ5fGlzX2NvbnN0YW50fGlzX2Zsb2F0fGlzX2Z1bmN0aW9ufGlzX2ludGVnZXJ8aXNfbGlzdHxpc19udW1iZXJ8aXNfcGlkfGlzX3BvcnR8aXNfcmVmZXJlbmNlfGlzX3R1cGxlfGlzX3JlY29yZHxhYnN8ZWxlbWVudHxoZHxsZW5ndGh8bm9kZXxyb3VuZHxzZWxmfHNpemV8dGx8dHJ1bmMpKFxccyopKFxcKCknLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAndGV4dCcsIHJlZ2V4OiAnKD89XFwpKScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBhcmFtZXRlcnMuZXJsYW5nJywgcmVnZXg6ICcsJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnZW50aXR5Lm5hbWUudHlwZS5jbGFzcy5tb2R1bGUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IubW9kdWxlLWZ1bmN0aW9uLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuYmVnaW4uZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPzooW2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKShcXHMqKSg6KShcXHMqKSk/KFthLXpdW2EtekEtWlxcZEBfXSp8XCdbXlwnXSpcJykoXFxzKikoXFwoKScsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICd0ZXh0JywgcmVnZXg6ICcoPz1cXCkpJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IucGFyYW1ldGVycy5lcmxhbmcnLCByZWdleDogJywnIH0sCiAgICAgICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9IF0gfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZnVuY3Rpb24tY2FsbC5lcmxhbmcnIH0gXSB9IF0sCiAgICAgICcjaW1wb3J0LWV4cG9ydC1kaXJlY3RpdmUnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ21ldGEuZGlyZWN0aXZlLmltcG9ydC5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pbXBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLmRpcmVjdGl2ZS5pbXBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuaW1wb3J0LmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pbXBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudHlwZS5jbGFzcy5tb2R1bGUuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuaW1wb3J0LmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5wYXJhbWV0ZXJzLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJ14oXFxzKikoLSkoXFxzKikoaW1wb3J0KShcXHMqKShcXCgpKFxccyopKFthLXpdW2EtekEtWlxcZEBfXSp8XCdbXlwnXSpcJykoXFxzKikoLCknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pbXBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5lbmQuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoXFwpKShcXHMqKShcXC4pJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVybmFsLWZ1bmN0aW9uLWxpc3QnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmRpcmVjdGl2ZS5pbXBvcnQuZXJsYW5nJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ21ldGEuZGlyZWN0aXZlLmV4cG9ydC5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5leHBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLmRpcmVjdGl2ZS5leHBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuZXhwb3J0LmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKC0pKFxccyopKGV4cG9ydCkoXFxzKikoXFwoKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLmV4cG9ydC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmVuZC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhcXCkpKFxccyopKFxcLiknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJuYWwtZnVuY3Rpb24tbGlzdCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZGlyZWN0aXZlLmV4cG9ydC5lcmxhbmcnIH0gXSB9IF0sCiAgICAgICcjaW50ZXJuYWwtZXhwcmVzc2lvbi1wdW5jdHVhdGlvbic6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmNsYXVzZS1oZWFkLWJvZHkuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmNsYXVzZXMuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmV4cHJlc3Npb25zLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJygtPil8KDspfCgsKScgfSBdLAogICAgICAnI2ludGVybmFsLWZ1bmN0aW9uLWxpc3QnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ubGlzdC5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFxbJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5saXN0LmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdlbnRpdHkubmFtZS5mdW5jdGlvbi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5mdW5jdGlvbi1hcml0eS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhbYS16XVthLXpBLVpcXGRAX10qfFwnW15cJ10qXCcpKFxccyopKC8pJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5saXN0LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnLHwoPz1cXF0pJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNldmVyeXRoaW5nLWVsc2UnIH0gXSB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNldmVyeXRoaW5nLWVsc2UnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLnN0cnVjdHVyZS5saXN0LmZ1bmN0aW9uLmVybGFuZycgfSBdIH0gXSwKICAgICAgJyNpbnRlcm5hbC1mdW5jdGlvbi1wYXJ0cyc6IAogICAgICAgWyB7IHRva2VuOiAndGV4dCcsCiAgICAgICAgICAgcmVnZXg6ICcoPz1cXCgpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmNsYXVzZS1oZWFkLWJvZHkuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnLT4nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKCcsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IucGFyYW1ldGVycy5lcmxhbmcnLCByZWdleDogJywnIH0sCiAgICAgICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9IF0gfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmd1YXJkcy5lcmxhbmcnLCByZWdleDogJyx8OycgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5leHByZXNzaW9ucy5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnLCcgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSBdLAogICAgICAnI2ludGVybmFsLXJlY29yZC1ib2R5JzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNsYXNzLnJlY29yZC5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFx7JywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5zdHJ1Y3R1cmUucmVjb3JkLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJyg/PVxcfSknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICd2YXJpYWJsZS5vdGhlci5maWVsZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3ZhcmlhYmxlLmxhbmd1YWdlLm9taXR0ZWQuZmllbGQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdrZXl3b3JkLm9wZXJhdG9yLmFzc2lnbm1lbnQuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPzooW2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKXwoXykpKFxccyopKD18OjopJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5jbGFzcy5yZWNvcmQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICcsfCg/PVxcfSknLAogICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAndmFyaWFibGUub3RoZXIuZmllbGQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuY2xhc3MucmVjb3JkLmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFthLXpdW2EtekEtWlxcZEBfXSp8XCdbXlwnXSpcJykoXFxzKikoKD86LCk/KScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5zdHJ1Y3R1cmUucmVjb3JkLmVybGFuZycgfSBdIH0gXSwKICAgICAgJyNpbnRlcm5hbC10eXBlLXNwZWNpZmllcnMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci52YWx1ZS10eXBlLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICcvJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAndGV4dCcsIHJlZ2V4OiAnKD89LHw6fD4+KScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnc3RvcmFnZS50eXBlLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnc3RvcmFnZS5tb2RpZmllci5zaWduZWRuZXNzLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnc3RvcmFnZS5tb2RpZmllci5lbmRpYW5uZXNzLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnc3RvcmFnZS5tb2RpZmllci51bml0LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnR5cGUtc3BlY2lmaWVycy5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhpbnRlZ2VyfGZsb2F0fGJpbmFyeXxieXRlc3xiaXRzdHJpbmd8Yml0cyl8KHNpZ25lZHx1bnNpZ25lZCl8KGJpZ3xsaXR0bGV8bmF0aXZlKXwodW5pdCl8KC0pJyB9IF0gfSBdLAogICAgICAnI2tleXdvcmQnOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lcmxhbmcnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86YWZ0ZXJ8YmVnaW58Y2FzZXxjYXRjaHxjb25kfGVuZHxmdW58aWZ8bGV0fG9mfHF1ZXJ5fHRyeXxyZWNlaXZlfHdoZW4pXFxiJyB9IF0sCiAgICAgICcjbGlzdCc6IAogICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5saXN0LmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXFsnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmxpc3QuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcXScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IubGlzdC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXHx8XFx8XFx8fCwnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuc3RydWN0dXJlLmxpc3QuZXJsYW5nJyB9IF0gfSBdLAogICAgICAnI21hY3JvLWRpcmVjdGl2ZSc6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAnbWV0YS5kaXJlY3RpdmUuaWZkZWYuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VjdGlvbi5kaXJlY3RpdmUuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuaWZkZWYuZXJsYW5nJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLmRpcmVjdGl2ZS5pZmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pZmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuaWZkZWYuZXJsYW5nJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24ubWFjcm8uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUuaWZkZWYuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pZmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5lbmQuZXJsYW5nJyBdLAogICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgtKShcXHMqKShpZmRlZikoXFxzKikoXFwoKShcXHMqKShbYS16QS1aXFxkQF9dKykoXFxzKikoXFwpKShcXHMqKShcXC4pJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAnbWV0YS5kaXJlY3RpdmUuaWZuZGVmLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLmlmbmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdrZXl3b3JkLmNvbnRyb2wuZGlyZWN0aXZlLmlmbmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pZm5kZWYuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLmlmbmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS5mdW5jdGlvbi5tYWNyby5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pZm5kZWYuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5pZm5kZWYuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VjdGlvbi5kaXJlY3RpdmUuZW5kLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJ14oXFxzKikoLSkoXFxzKikoaWZuZGVmKShcXHMqKShcXCgpKFxccyopKFthLXpBLVpcXGRAX10rKShcXHMqKShcXCkpKFxccyopKFxcLiknIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdtZXRhLmRpcmVjdGl2ZS51bmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS51bmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdrZXl3b3JkLmNvbnRyb2wuZGlyZWN0aXZlLnVuZGVmLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLnVuZGVmLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS51bmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS5mdW5jdGlvbi5tYWNyby5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS51bmRlZi5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLnVuZGVmLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmVuZC5lcmxhbmcnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKC0pKFxccyopKHVuZGVmKShcXHMqKShcXCgpKFxccyopKFthLXpBLVpcXGRAX10rKShcXHMqKShcXCkpKFxccyopKFxcLiknIH0gXSwKICAgICAgJyNtYWNyby11c2FnZSc6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAna2V5d29yZC5vcGVyYXRvci5tYWNyby5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLm1hY3JvLXVzYWdlLmVybGFuZycsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLm1hY3JvLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJyhcXD9cXD8/KShcXHMqKShbYS16QS1aXFxkQF9dKyknIH0gXSwKICAgICAgJyNtb2R1bGUtZGlyZWN0aXZlJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdtZXRhLmRpcmVjdGl2ZS5tb2R1bGUuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VjdGlvbi5kaXJlY3RpdmUuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUubW9kdWxlLmVybGFuZycsCiAgICAgICAgICAgICAgJ2tleXdvcmQuY29udHJvbC5kaXJlY3RpdmUubW9kdWxlLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLm1vZHVsZS5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnBhcmFtZXRlcnMuYmVnaW4uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUubW9kdWxlLmVybGFuZycsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLnR5cGUuY2xhc3MubW9kdWxlLmRlZmluaXRpb24uZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUubW9kdWxlLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUubW9kdWxlLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmVuZC5lcmxhbmcnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKC0pKFxccyopKG1vZHVsZSkoXFxzKikoXFwoKShcXHMqKShbYS16XVthLXpBLVpcXGRAX10qKShcXHMqKShcXCkpKFxccyopKFxcLiknIH0gXSwKICAgICAgJyNudW1iZXInOiAKICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgIHJlZ2V4OiAnKD89XFxkKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJyg/IVxcZCknLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ2NvbnN0YW50Lm51bWVyaWMuZmxvYXQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuaW50ZWdlci1mbG9hdC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuZmxvYXQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuZmxvYXQtZXhwb25lbnQuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoXFxkKykoXFwuKShcXGQrKSgoPzpbZUVdW1xcK1xcLV0/XFxkKyk/KScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmluYXJ5LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iaW5hcnkuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMikoIykoWzAtMV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTMuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMykoIykoWzAtMl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS00LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTQuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoNCkoIykoWzAtM10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS01LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTUuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoNSkoIykoWzAtNF0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS02LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTYuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoNikoIykoWzAtNV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS03LmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTcuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoNykoIykoWzAtNl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIub2N0YWwuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYmFzZS1pbnRlZ2VyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLm9jdGFsLmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKDgpKCMpKFswLTddKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtOS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS05LmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKDkpKCMpKFswLThdKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmRlY2ltYWwuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYmFzZS1pbnRlZ2VyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmRlY2ltYWwuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMTApKCMpKFxcZCspJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTExLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5iYXNlLTExLmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKDExKSgjKShbXFxkYUFdKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYmFzZS1pbnRlZ2VyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTIuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMTIpKCMpKFtcXGRhLWJBLUJdKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTMuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYmFzZS1pbnRlZ2VyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTMuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMTMpKCMpKFtcXGRhLWNBLUNdKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTQuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYmFzZS1pbnRlZ2VyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTQuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMTQpKCMpKFtcXGRhLWRBLURdKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYmFzZS1pbnRlZ2VyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmJhc2UtMTUuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoMTUpKCMpKFtcXGRhLWVBLUVdKyknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmhleGFkZWNpbWFsLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmJhc2UtaW50ZWdlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5oZXhhZGVjaW1hbC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygxNikoIykoW1xcZGEtZkEtRl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0xNy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0xNy5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygxNykoIykoW1xcZGEtZ0EtR10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0xOC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0xOC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygxOCkoIykoW1xcZGEtaEEtSF0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0xOS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0xOS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygxOSkoIykoW1xcZGEtaUEtSV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyMCkoIykoW1xcZGEtakEtSl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyMSkoIykoW1xcZGEta0EtS10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMi5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyMikoIykoW1xcZGEtbEEtTF0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yMy5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyMykoIykoW1xcZGEtbUEtTV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyNCkoIykoW1xcZGEtbkEtTl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyNSkoIykoW1xcZGEtb0EtT10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNi5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyNikoIykoW1xcZGEtcEEtUF0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yNy5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyNykoIykoW1xcZGEtcUEtUV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yOC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yOC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyOCkoIykoW1xcZGEtckEtUl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yOS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0yOS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygyOSkoIykoW1xcZGEtc0EtU10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzMCkoIykoW1xcZGEtdEEtVF0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzMSkoIykoW1xcZGEtdUEtVV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMi5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzMikoIykoW1xcZGEtdkEtVl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zMy5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzMykoIykoW1xcZGEtd0EtV10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zNC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zNC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzNCkoIykoW1xcZGEteEEtWF0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zNS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zNS5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzNSkoIykoW1xcZGEteUEtWV0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zNi5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5iYXNlLWludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5udW1lcmljLmludGVnZXIuYmFzZS0zNi5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygzNikoIykoW1xcZGEtekEtWl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnaW52YWxpZC5pbGxlZ2FsLmludGVnZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxkKyNbXFxkYS16QS1aXSsnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMuaW50ZWdlci5kZWNpbWFsLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcZCsnIH0gXSB9IF0sCiAgICAgICcjcGFyZW50aGVzaXplZC1leHByZXNzaW9uJzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZWN0aW9uLmV4cHJlc3Npb24uYmVnaW4uZXJsYW5nJywKICAgICAgICAgICByZWdleDogJ1xcKCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZXhwcmVzc2lvbi5lbmQuZXJsYW5nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V2ZXJ5dGhpbmctZWxzZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZXhwcmVzc2lvbi5wYXJlbnRoZXNpemVkJyB9IF0gfSBdLAogICAgICAnI3JlY29yZC1kaXJlY3RpdmUnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ21ldGEuZGlyZWN0aXZlLnJlY29yZC5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZWN0aW9uLmRpcmVjdGl2ZS5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5yZWNvcmQuZXJsYW5nJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLmRpcmVjdGl2ZS5pbXBvcnQuZXJsYW5nJywKICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUucmVjb3JkLmVybGFuZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5iZWdpbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5yZWNvcmQuZXJsYW5nJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudHlwZS5jbGFzcy5yZWNvcmQuZGVmaW5pdGlvbi5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLmRpcmVjdGl2ZS5yZWNvcmQuZXJsYW5nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBhcmFtZXRlcnMuZXJsYW5nJyBdLAogICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgtKShcXHMqKShyZWNvcmQpKFxccyopKFxcKCkoXFxzKikoW2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKShcXHMqKSgsKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jbGFzcy5yZWNvcmQuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnbWV0YS5kaXJlY3RpdmUucmVjb3JkLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ21ldGEuZGlyZWN0aXZlLnJlY29yZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZGlyZWN0aXZlLmVuZC5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhcXH0pKFxccyopKFxcKSkoXFxzKikoXFwuKScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcm5hbC1yZWNvcmQtYm9keScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZGlyZWN0aXZlLnJlY29yZC5lcmxhbmcnIH0gXSB9IF0sCiAgICAgICcjcmVjb3JkLXVzYWdlJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdrZXl3b3JkLm9wZXJhdG9yLnJlY29yZC5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLnJlY29yZC11c2FnZS5lcmxhbmcnLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50eXBlLmNsYXNzLnJlY29yZC5lcmxhbmcnLAogICAgICAgICAgICAgICdtZXRhLnJlY29yZC11c2FnZS5lcmxhbmcnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IucmVjb3JkLWZpZWxkLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEucmVjb3JkLXVzYWdlLmVybGFuZycsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLm90aGVyLmZpZWxkLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJygjKShcXHMqKShbYS16XVthLXpBLVpcXGRAX10qfFwnW15cJ10qXCcpKFxccyopKFxcLikoXFxzKikoW2Etel1bYS16QS1aXFxkQF9dKnxcJ1teXCddKlwnKScgfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2tleXdvcmQub3BlcmF0b3IucmVjb3JkLmVybGFuZycsCiAgICAgICAgICAgICAgJ21ldGEucmVjb3JkLXVzYWdlLmVybGFuZycsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLnR5cGUuY2xhc3MucmVjb3JkLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJygjKShcXHMqKShbYS16XVthLXpBLVpcXGRAX10qfFwnW15cJ10qXCcpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jbGFzcy5yZWNvcmQuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcm5hbC1yZWNvcmQtYm9keScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEucmVjb3JkLXVzYWdlLmVybGFuZycgfSBdIH0gXSwKICAgICAgJyNzdHJpbmcnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVybGFuZycsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmVzY2FwZS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmVzY2FwZS5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmVybGFuZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFxcXFwpKD86KFtiZGVmbnJzdHZcXFxcXCciXSl8KFxcXikoW0AtX10pfChbMC03XXsxLDN9KSknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2ludmFsaWQuaWxsZWdhbC5zdHJpbmcuZXJsYW5nJywgcmVnZXg6ICdcXFxcXFxePy4/JyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucGxhY2Vob2xkZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IucGxhY2Vob2xkZXItcGFydHMuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5vdGhlci5wbGFjZWhvbGRlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5wbGFjZWhvbGRlci1wYXJ0cy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5wbGFjZWhvbGRlci1wYXJ0cy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm90aGVyLnBsYWNlaG9sZGVyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBsYWNlaG9sZGVyLXBhcnRzLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBsYWNlaG9sZGVyLXBhcnRzLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBsYWNlaG9sZGVyLXBhcnRzLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQub3RoZXIucGxhY2Vob2xkZXIuZXJsYW5nJywKICAgICAgICAgICAgICAgICAgICdjb25zdGFudC5vdGhlci5wbGFjZWhvbGRlci5lcmxhbmcnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyh+KSg/OigoPzpcXC0pPykoXFxkKyl8KFxcKikpPyg/OihcXC4pKD86KFxcZCspfChcXCopKSk/KD86KFxcLikoPzooXFwqKXwoLikpKT8oW35jZmVnc3dwV1BCWCNieFxcK25pXSknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wbGFjZWhvbGRlci5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5wbGFjZWhvbGRlci1wYXJ0cy5lcmxhbmcnLAogICAgICAgICAgICAgICAgICAgJ2NvbnN0YW50Lm90aGVyLnBsYWNlaG9sZGVyLmVybGFuZycsCiAgICAgICAgICAgICAgICAgICAnY29uc3RhbnQub3RoZXIucGxhY2Vob2xkZXIuZXJsYW5nJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcofikoKD86XFwqKT8pKCg/OlxcZCspPykoW35kdVxcLSNmc2FjbF0pJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdpbnZhbGlkLmlsbGVnYWwuc3RyaW5nLmVybGFuZycsIHJlZ2V4OiAnfi4/JyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuZXJsYW5nJyB9IF0gfSBdLAogICAgICAnI3N5bWJvbGljLW9wZXJhdG9yJzogCiAgICAgICBbIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnN5bWJvbGljLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXCtcXCt8XFwrfC0tfC18XFwqfC89fC98PS89fD06PXw9PXw9PHw9fDwtfDx8Pj18PnwhfDo6JyB9IF0sCiAgICAgICcjdGV4dHVhbC1vcGVyYXRvcic6IAogICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci50ZXh0dWFsLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphbmRhbHNvfGJhbmR8YW5kfGJ4b3J8eG9yfGJvcnxvcmVsc2V8b3J8Ym5vdHxub3R8YnNsfGJzcnxkaXZ8cmVtKVxcYicgfSBdLAogICAgICAnI3R1cGxlJzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnR1cGxlLmJlZ2luLmVybGFuZycsCiAgICAgICAgICAgcmVnZXg6ICdcXHsnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnR1cGxlLmVuZC5lcmxhbmcnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXH0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnR1cGxlLmVybGFuZycsIHJlZ2V4OiAnLCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXZlcnl0aGluZy1lbHNlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5zdHJ1Y3R1cmUudHVwbGUuZXJsYW5nJyB9IF0gfSBdLAogICAgICAnI3ZhcmlhYmxlJzogCiAgICAgICBbIHsgdG9rZW46IFsgJ3ZhcmlhYmxlLm90aGVyLmVybGFuZycsICd2YXJpYWJsZS5sYW5ndWFnZS5vbWl0dGVkLmVybGFuZycgXSwKICAgICAgICAgICByZWdleDogJyhfW2EtekEtWlxcZEBfXSt8W0EtWl1bYS16QS1aXFxkQF9dKil8KF8pJyB9IF0gfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKRXJsYW5nSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7IGNvbW1lbnQ6ICdUaGUgcmVjb2duaXRpb24gb2YgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGNvbXBpbGVyIGRpcmVjdGl2ZXMgKHN1Y2ggYXMgbW9kdWxlLCByZWNvcmQgYW5kIG1hY3JvIGRlZmluaXRpb25zKSByZXF1aXJlcyB0aGF0IGVhY2ggb2YgdGhlIGFmb3JlbWVudGlvbmVkIGNvbnN0cnVjdHMgbXVzdCBiZSB0aGUgZmlyc3Qgc3RyaW5nIGluc2lkZSBhIGxpbmUgKGV4Y2VwdCBmb3Igd2hpdGVzcGFjZSkuICBBbHNvLCB0aGUgZnVuY3Rpb24vbW9kdWxlL3JlY29yZC9tYWNybyBuYW1lcyBtdXN0IGJlIGdpdmVuIHVucXVvdGVkLiAgLS0gZGVzcCcsCiAgICAgIGZpbGVUeXBlczogWyAnZXJsJywgJ2hybCcgXSwKICAgICAga2V5RXF1aXZhbGVudDogJ15+RScsCiAgICAgIG5hbWU6ICdFcmxhbmcnLAogICAgICBzY29wZU5hbWU6ICdzb3VyY2UuZXJsYW5nJyB9OwoKCm9vcC5pbmhlcml0cyhFcmxhbmdIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuRXJsYW5nSGlnaGxpZ2h0UnVsZXMgPSBFcmxhbmdIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9lcmxhbmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9lcmxhbmdfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBFcmxhbmdIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZXJsYW5nX2hpZ2hsaWdodF9ydWxlcyIpLkVybGFuZ0hpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEVybGFuZ0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiJSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IG51bGw7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9lcmxhbmciOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9lcmxhbmciXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-forth.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mb3J0aF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBGb3J0aEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7IHN0YXJ0OiBbIHsgaW5jbHVkZTogJyNmb3J0aCcgfSBdLAogICAgICAnI2NvbW1lbnQnOgogICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5saW5lLmRvdWJsZS1kYXNoLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKS0tXFxzLiokJywKICAgICAgICAgICBjb21tZW50OiAnbGluZSBjb21tZW50cyBmb3IgaUZvcnRoJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5saW5lLmJhY2tzbGFzaC5mb3J0aCcsCiAgICAgICAgICAgcmVnZXg6ICcoPzpefFxccylcXFxcW1xcc1xcU10qJCcsCiAgICAgICAgICAgY29tbWVudDogJ0FOU0kgbGluZSBjb21tZW50JyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5saW5lLmJhY2tzbGFzaC1nLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKVxcXFxbR2ddIC4qJCcsCiAgICAgICAgICAgY29tbWVudDogJ2dGb3J0aCBsaW5lIGNvbW1lbnQnIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb21tZW50LmJsb2NrLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKVxcKFxcKig/PVxcc3wkKScsCiAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5ibG9jay5mb3J0aCcsCiAgICAgICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKVxcKlxcKSg/PVxcc3wkKScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay5mb3J0aCcgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdtdWx0aWxpbmUgY29tbWVudHMgZm9yIGlGb3J0aCcgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuYmxvY2suZG9jdW1lbnRhdGlvbi5mb3J0aCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGJET0NcXGInLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICBwdXNoOgogICAgICAgICAgICBbIHsgdG9rZW46ICdjb21tZW50LmJsb2NrLmRvY3VtZW50YXRpb24uZm9ydGgnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGJFTkRET0NcXGInLAogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQuYmxvY2suZG9jdW1lbnRhdGlvbi5mb3J0aCcgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdkb2N1bWVudGF0aW9uIGNvbW1lbnRzIGZvciBpRm9ydGgnIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb21tZW50LmxpbmUucGFyZW50aGVzZXMuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpXFwuP1xcKCBbXildKlxcKScsCiAgICAgICAgICAgY29tbWVudDogJ0FOU0kgbGluZSBjb21tZW50JyB9IF0sCiAgICAgICcjY29uc3RhbnQnOgogICAgICAgWyB7IHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpKD86VFJVRXxGQUxTRXxCTHxQSXxDRUxMfEMvTHxSL098Vy9PfFIvVykoPz1cXHN8JCknLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKVskIyVdP1stK10/WzAtOV0rKD86XFwuWzAtOV0qZS0/WzAtOV0rfFxcLj9bMC05YS1mQS1GXSopKD89XFxzfCQpJ30sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpKD86WyZeXVxcU3woPzoifFwnKVxcUyg/OiJ8XCcpKSg/PVxcc3wkKSd9XSwKICAgICAgJyNmb3J0aCc6CiAgICAgICBbIHsgaW5jbHVkZTogJyNjb25zdGFudCcgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2NvbW1lbnQnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmcnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyN3b3JkJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNzdG9yYWdlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjd29yZC1kZWYnIH0gXSwKICAgICAgJyNzdG9yYWdlJzoKICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UudHlwZS5mb3J0aCcsCiAgICAgICAgICAgcmVnZXg6ICcoPzpefFxccykoPzoyQ09OU1RBTlR8MlZBUklBQkxFfEFMSUFTfENPTlNUQU5UfENSRUFURS1JTlRFUlBSRVQvQ09NUElMRVs6XT98Q1JFQVRFfERFRkVSfEZDT05TVEFOVHxGSUVMRHxGVkFSSUFCTEV8VVNFUnxWQUxVRXxWQVJJQUJMRXxWT0NBQlVMQVJZKSg/PVxcc3wkKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfV0sCiAgICAgICcjc3RyaW5nJzoKICAgICAgIFsgeyB0b2tlbjogJ3N0cmluZy5xdW90ZWQuZG91YmxlLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyhBQk9SVCIgfEJSRUFLIiB8XFwuIiB8QyIgfDAifFNcXFxcPyIgKShbXiJdKyIpJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWV9LAogICAgICAgICB7IHRva2VuOiAnc3RyaW5nLnVucXVvdGVkLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/OklOQ0xVREV8TkVFRFN8UkVRVUlSRXxVU0UpWyBdXFxTKyg/PVxcc3wkKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfV0sCiAgICAgICcjdmFyaWFibGUnOgogICAgICAgWyB7IHRva2VuOiAndmFyaWFibGUubGFuZ3VhZ2UuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86SXxKKVxcYicsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlIH0gXSwKICAgICAgJyN3b3JkJzoKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5pbW1lZGlhdGUuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpXFxbKD86XFw/RE98XFwrTE9PUHxBR0FJTnxCRUdJTnxERUZJTkVEfERPfEVMU0V8RU5ESUZ8Rk9SfElGfElGREVGfElGVU5ERUZ8TE9PUHxORVhUfFJFUEVBVHxUSEVOfFVOVElMfFdISUxFKVxcXSg/PVxcc3wkKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuaW1tZWRpYXRlLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKSg/OkNPTVBJTEUtT05MWXxJTU1FRElBVEV8SVN8UkVTVFJJQ1R8VE98V0hBVFwnU3xdKSg/PVxcc3wkKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5jb21waWxlLW9ubHkuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpKD86LURPfFxcLUxPT1B8XFw/RE98XFw/TEVBVkV8XFwrRE98XFwrTE9PUHxBQk9SVFxcInxBR0FJTnxBSEVBRHxCRUdJTnxDQVNFfERPfEVMU0V8RU5EQ0FTRXxFTkRJRnxFTkRPRnxFTkRUUllcXC1JRkVSUk9SfEVORFRSWXxGT1J8SUZ8SUZFUlJPUnxMRUFWRXxMT09QfE5FWFR8UkVDT1ZFUnxSRVBFQVR8UkVTVE9SRXxUSEVOfFRSWXxVXFwtRE98VVxcK0RPfFVOVElMfFdISUxFKSg/PVxcc3wkKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuY29tcGlsZS1vbmx5LmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKSg/OlxcP0RVUC0wPS1JRnxcXD9EVVAtSUZ8XFwpfFxcW3xcXFtcJ1xcXXxcXFtDSEFSXFxdfFxcW0NPTVBJTEVcXF18XFxbSVNcXF18XFxbVE9cXF18PENPTVBJTEFUSU9OfDxJTlRFUlBSRVRBVElPTnxBU1NFUlRcXCh8QVNTRVJUMFxcKHxBU1NFUlQxXFwofEFTU0VSVDJcXCh8QVNTRVJUM1xcKHxDT01QSUxBVElPTj58REVGRVJTfERPRVM+fElOVEVSUFJFVEFUSU9OPnxPRnxQT1NUUE9ORSkoPz1cXHN8JCknLAogICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm90aGVyLm5vbi1pbW1lZGlhdGUuZm9ydGgnLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpKD86XCd8PElTPnw8VE8+fENIQVJ8RU5ELVNUUlVDVHxJTkNMVURFW0RdP3xMT0FEfE5FRURTfFJFUVVJUkVbRF0/fFJFVklTSU9OfFNFRXxTVFJVQ1R8VEhSVXxVU0UpKD89XFxzfCQpJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWV9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vdGhlci53YXJuaW5nLmZvcnRoJywKICAgICAgICAgICByZWdleDogJyg/Ol58XFxzKSg/On5+fEJSRUFLOnxCUkVBSyJ8REJHKSg/PVxcc3wkKScsCiAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfV0sCiAgICAgICcjd29yZC1kZWYnOgogICAgICAgWyB7IHRva2VuOgogICAgICAgICAgICBbICdrZXl3b3JkLm90aGVyLmNvbXBpbGUtb25seS5mb3J0aCcsCiAgICAgICAgICAgICAgJ2tleXdvcmQub3RoZXIuY29tcGlsZS1vbmx5LmZvcnRoJywKICAgICAgICAgICAgICAnbWV0YS5ibG9jay5mb3J0aCcsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLmZvcnRoJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKDpOT05BTUUpfCheOnxcXHM6KShcXHMpKFxcUyspKD89XFxzfCQpJywKICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUsCiAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vdGhlci5jb21waWxlLW9ubHkuZm9ydGgnLAogICAgICAgICAgICAgICAgcmVnZXg6ICc7KD86Q09ERSk/JywKICAgICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2NvbnN0YW50JyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb21tZW50JyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmcnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3dvcmQnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3ZhcmlhYmxlJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdG9yYWdlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5ibG9jay5mb3J0aCcgfSBdIH0gXSB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpGb3J0aEhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0geyBmaWxlVHlwZXM6IFsgJ2ZydCcsICdmcycsICdsZHInLCAnZnRoJywgJzR0aCcgXSwKICAgICAgZm9sZGluZ1N0YXJ0TWFya2VyOiAnL1xcKlxcKnxcXHtcXHMqJCcsCiAgICAgIGZvbGRpbmdTdG9wTWFya2VyOiAnXFwqXFwqL3xeXFxzKlxcfScsCiAgICAgIGtleUVxdWl2YWxlbnQ6ICdefkYnLAogICAgICBuYW1lOiAnRm9ydGgnLAogICAgICBzY29wZU5hbWU6ICdzb3VyY2UuZm9ydGgnIH07CgoKb29wLmluaGVyaXRzKEZvcnRoSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkZvcnRoSGlnaGxpZ2h0UnVsZXMgPSBGb3J0aEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvcnRoIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvZm9ydGhfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBGb3J0aEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9mb3J0aF9oaWdobGlnaHRfcnVsZXMiKS5Gb3J0aEhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEZvcnRoSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IG51bGw7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9mb3J0aCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2ZvcnRoIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-fortran.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mb3J0cmFuX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEZvcnRyYW5IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiY2FsbHxjYXNlfGNvbnRhaW5zfGNvbnRpbnVlfGN5Y2xlfGRvfGVsc2V8ZWxzZWlmfGVuZHxlbmRkb3xlbmRpZnxmdW5jdGlvbnwiKyAKICAgICAgICAiaWZ8aW1wbGljaXR8aW58aW5jbHVkZXxpbm91dHxpbnRlbnR8bW9kdWxlfG5vbmV8b25seXxvdXR8cHJpbnR8cHJvZ3JhbXxyZXR1cm58IisgCiAgICAgICAgInNlbGVjdHxzdGF0dXN8c3RvcHxzdWJyb3V0aW5lfCIgKwogICAgICAgICJyZXR1cm58dGhlbnx1c2V8d2hpbGV8d3JpdGV8IisKICAgICAgICAiQ0FMTHxDQVNFfENPTlRBSU5TfENPTlRJTlVFfENZQ0xFfERPfEVMU0V8RUxTRUlGfEVORHxFTkRET3xFTkRJRnxGVU5DVElPTnwiKwogICAgICAgICJJRnxJTVBMSUNJVHxJTnxJTkNMVURFfElOT1VUfElOVEVOVHxNT0RVTEV8Tk9ORXxPTkxZfE9VVHxQUklOVHxQUk9HUkFNfFJFVFVSTnwiKwogICAgICAgICJTRUxFQ1R8U1RBVFVTfFNUT1B8U1VCUk9VVElORXwiICsKICAgICAgICAiUkVUVVJOfFRIRU58VVNFfFdISUxFfFdSSVRFIgogICAgKTsKCiAgICB2YXIga2V5d29yZE9wZXJhdG9ycyA9ICgKICAgICAgICAiYW5kfG9yfG5vdHxlcXxuZXxndHxnZXxsdHxsZXwiICsKICAgICAgICAiQU5EfE9SfE5PVHxFUXxORXxHVHxHRXxMVHxMRSIgCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJ0cnVlfGZhbHNlfFRSVUV8RkFMU0UiCiAgICApOwoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYnN8YWNoYXJ8YWNvc3xhY29zaHxhZGp1c3RsfGFkanVzdHJ8YWltYWd8YWludHxhbGx8YWxsb2NhdGV8IisKICAgICAgICAiYW5pbnR8YW55fGFzaW58YXNpbmh8YXNzb2NpYXRlZHxhdGFufGF0YW4yfGF0YW5ofCIrCiAgICAgICAgImJlc3NlbF9qMHxiZXNzZWxfajF8YmVzc2VsX2pufGJlc3NlbF95MHxiZXNzZWxfeTF8YmVzc2VsX3lufCIrCiAgICAgICAgImJnZXxiZ3R8Yml0X3NpemV8YmxlfGJsdHxidGVzdHxjZWlsaW5nfGNoYXJ8Y21wbHh8Y29uamd8Y29zfGNvc2h8IisKICAgICAgICAiY291bnR8Y3B1X3RpbWV8Y3NoaWZ0fGRhdGVfYW5kX3RpbWV8ZGJsZXxkZWFsbG9jYXRlfGRpZ2l0c3xkaW18ZG90X3Byb2R1Y3R8ZHByb2R8IisKICAgICAgICAiZHNoaWZ0bHxkc2hpZnRyfGRzcXJ0fGVvc2hpZnR8ZXBzaWxvbnxlcmZ8ZXJmY3xlcmZjX3NjYWxlZHxleHB8ZmxvYXR8Zmxvb3J8IisKICAgICAgICAiZm9ybWF0fGZyYWN0aW9ufGdhbW1hfGlucHV0fGxlbnxsZ2V8bGd0fGxsZXxsbHR8bG9nfGxvZzEwfG1hc2tsfG1hc2tyfG1hdG11bHxtYXh8bWF4bG9jfG1heHZhbHwiKwogICAgICAgICJtZXJnZXxtaW58bWlubG9jfG1pbnZhbHxtb2R8bW9kdWxvfG5pbnR8bm90fG5vcm0yfG51bGx8bnVsbGlmeXxwYWNrfHBhcml0eXxwb3BjbnR8cG9wcGFyfCIrCiAgICAgICAgInByZWNpc2lvbnxwcmVzZW50fHByb2R1Y3R8cmFkaXh8cmFuZG9tX251bWJlcnxyYW5kb21fc2VlZHxyYW5nZXxyZXBlYXR8cmVzaGFwZXxyb3VuZHwiKwogICAgICAgICJycnNwYWNpbmd8c2FtZV90eXBlX2FzfHNjYWxlfHNjYW58c2VsZWN0ZWRfY2hhcl9raW5kfHNlbGVjdGVkX2ludF9raW5kfHNlbGVjdGVkX3JlYWxfa2luZHwiKwogICAgICAgICJzZXRfZXhwb25lbnR8c2hhcGV8c2hpZnRhfHNoaWZ0bHxzaGlmdHJ8c2lnbnxzaW58c2luaHxzaXplfHNuZ2x8c3BhY2luZ3xzcHJlYWR8IisKICAgICAgICAic3FydHxzdW18c3lzdGVtX2Nsb2NrfHRhbnx0YW5ofHRpbnl8dHJhaWx6fHRyYW5zZmVyfHRyYW5zcG9zZXx0cmltfHVib3VuZHx1bnBhY2t8dmVyaWZ5fCIgKwogICAgICAgICJBQlN8QUNIQVJ8QUNPU3xBQ09TSHxBREpVU1RMfEFESlVTVFJ8QUlNQUd8QUlOVHxBTEx8QUxMT0NBVEV8IisKICAgICAgICAiQU5JTlR8QU5ZfEFTSU58QVNJTkh8QVNTT0NJQVRFRHxBVEFOfEFUQU4yfEFUQU5IfCIrCiAgICAgICAgIkJFU1NFTF9KMHxCRVNTRUxfSjF8QkVTU0VMX0pOfEJFU1NFTF9ZMHxCRVNTRUxfWTF8QkVTU0VMX1lOfCIrCiAgICAgICAgIkJHRXxCR1R8QklUX1NJWkV8QkxFfEJMVHxCVEVTVHxDRUlMSU5HfENIQVJ8Q01QTFh8Q09OSkd8Q09TfENPU0h8IisKICAgICAgICAiQ09VTlR8Q1BVX1RJTUV8Q1NISUZUfERBVEVfQU5EX1RJTUV8REJMRXxERUFMTE9DQVRFfERJR0lUU3xESU18RE9UX1BST0RVQ1R8RFBST0R8IisKICAgICAgICAiRFNISUZUTHxEU0hJRlRSfERTUVJUfEVPU0hJRlR8RVBTSUxPTnxFUkZ8RVJGQ3xFUkZDX1NDQUxFRHxFWFB8RkxPQVR8RkxPT1J8IisKICAgICAgICAiRk9STUFUfEZSQUNUSU9OfEdBTU1BfElOUFVUfExFTnxMR0V8TEdUfExMRXxMTFR8TE9HfExPRzEwfE1BU0tMfE1BU0tSfE1BVE1VTHxNQVh8TUFYTE9DfE1BWFZBTHwiKwogICAgICAgICJNRVJHRXxNSU58TUlOTE9DfE1JTlZBTHxNT0R8TU9EVUxPfE5JTlR8Tk9UfE5PUk0yfE5VTEx8TlVMTElGWXxQQUNLfFBBUklUWXxQT1BDTlR8UE9QUEFSfCIrCiAgICAgICAgIlBSRUNJU0lPTnxQUkVTRU5UfFBST0RVQ1R8UkFESVh8UkFORE9NX05VTUJFUnxSQU5ET01fU0VFRHxSQU5HRXxSRVBFQVR8UkVTSEFQRXxST1VORHwiKwogICAgICAgICJSUlNQQUNJTkd8U0FNRV9UWVBFX0FTfFNDQUxFfFNDQU58U0VMRUNURURfQ0hBUl9LSU5EfFNFTEVDVEVEX0lOVF9LSU5EfFNFTEVDVEVEX1JFQUxfS0lORHwiKwogICAgICAgICJTRVRfRVhQT05FTlR8U0hBUEV8U0hJRlRBfFNISUZUTHxTSElGVFJ8U0lHTnxTSU58U0lOSHxTSVpFfFNOR0x8U1BBQ0lOR3xTUFJFQUR8IisKICAgICAgICAiU1FSVHxTVU18U1lTVEVNX0NMT0NLfFRBTnxUQU5IfFRJTll8VFJBSUxafFRSQU5TRkVSfFRSQU5TUE9TRXxUUklNfFVCT1VORHxVTlBBQ0t8VkVSSUZZIgogICAgKTsKCiAgICB2YXIgc3RvcmFnZVR5cGUgPSAoCiAgICAgICAgImxvZ2ljYWx8Y2hhcmFjdGVyfGludGVnZXJ8cmVhbHx0eXBlfCIgKwogICAgICAgICJMT0dJQ0FMfENIQVJBQ1RFUnxJTlRFR0VSfFJFQUx8VFlQRSIgICAgCiAgICApOwoKICAgIHZhciBzdG9yYWdlTW9kaWZpZXJzID0gKCAKICAgICAgICAiYWxsb2NhdGFibGV8ZGltZW5zaW9ufGludGVudHxwYXJhbWV0ZXJ8cG9pbnRlcnx0YXJnZXR8cHJpdmF0ZXxwdWJsaWN8IiArCiAgICAgICAgIkFMTE9DQVRBQkxFfERJTUVOU0lPTnxJTlRFTlR8UEFSQU1FVEVSfFBPSU5URVJ8VEFSR0VUfFBSSVZBVEV8UFVCTElDIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6ICJkZWJ1Z2dlciIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWx0aW5Db25zdGFudHMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAia2V5d29yZC5vcGVyYXRvciI6IGtleXdvcmRPcGVyYXRvcnMsCiAgICAgICAgInN0b3JhZ2UudHlwZSI6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIHN0clByZSA9ICIoPzpyfHV8dXJ8UnxVfFVSfFVyfHVSKT8iOwoKICAgIHZhciBkZWNpbWFsSW50ZWdlciA9ICIoPzooPzpbMS05XVxcZCopfCg/OjApKSI7CiAgICB2YXIgb2N0SW50ZWdlciA9ICIoPzowW29PXT9bMC03XSspIjsKICAgIHZhciBoZXhJbnRlZ2VyID0gIig/OjBbeFhdW1xcZEEtRmEtZl0rKSI7CiAgICB2YXIgYmluSW50ZWdlciA9ICIoPzowW2JCXVswMV0rKSI7CiAgICB2YXIgaW50ZWdlciA9ICIoPzoiICsgZGVjaW1hbEludGVnZXIgKyAifCIgKyBvY3RJbnRlZ2VyICsgInwiICsgaGV4SW50ZWdlciArICJ8IiArIGJpbkludGVnZXIgKyAiKSI7CgogICAgdmFyIGV4cG9uZW50ID0gIig/OltlRV1bKy1dP1xcZCspIjsKICAgIHZhciBmcmFjdGlvbiA9ICIoPzpcXC5cXGQrKSI7CiAgICB2YXIgaW50UGFydCA9ICIoPzpcXGQrKSI7CiAgICB2YXIgcG9pbnRGbG9hdCA9ICIoPzooPzoiICsgaW50UGFydCArICI/IiArIGZyYWN0aW9uICsgIil8KD86IiArIGludFBhcnQgKyAiXFwuKSkiOwogICAgdmFyIGV4cG9uZW50RmxvYXQgPSAiKD86KD86IiArIHBvaW50RmxvYXQgKyAifCIgKyAgaW50UGFydCArICIpIiArIGV4cG9uZW50ICsgIikiOwogICAgdmFyIGZsb2F0TnVtYmVyID0gIig/OiIgKyBleHBvbmVudEZsb2F0ICsgInwiICsgcG9pbnRGbG9hdCArICIpIjsKCiAgICB2YXIgc3RyaW5nRXNjYXBlID0gICJcXFxcKHhbMC05QS1GYS1mXXsyfXxbMC03XXszfXxbXFxcXGFiZm5ydHYnXCJdfFVbMC05QS1GYS1mXXs4fXx1WzAtOUEtRmEtZl17NH0pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWyB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICIhLiokIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBzdGFydAogICAgICAgICAgICByZWdleCA6IHN0clByZSArICciezN9JywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gIiBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyBtdWx0aSBsaW5lICcnJyBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQgOiAicXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiBzdHJQcmUgKyAiJyg/PS4pIiwKICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGltYWdpbmFyeQogICAgICAgICAgICByZWdleCA6ICIoPzoiICsgZmxvYXROdW1iZXIgKyAifFxcZCspW2pKXVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6IGZsb2F0TnVtYmVyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gbG9uZyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4IDogaW50ZWdlciArICJbbExdXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgcmVnZXggOiBpbnRlZ2VyICsgIlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBwcmUtY29tcGlsZXIgZGlyZWN0aXZlcwogICAgICAgICAgICByZWdleCA6ICIjXFxzKig/OmluY2x1ZGV8aW1wb3J0fGRlZmluZXx1bmRlZnxJTkNMVURFfElNUE9SVHxERUZJTkV8VU5ERUYpXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIHNwZWNpYWwgY2FzZSBwcmUtY29tcGlsZXIgZGlyZWN0aXZlCiAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86ZW5kaWZ8aWZkZWZ8ZWxzZXxlbHNlaWZ8aWZuZGVmfEVORElGfElGREVGfEVMU0V8RUxTRUlGfElGTkRFRilcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcKnxcXCpcXCp8XFwvfFxcL1xcL3wlfDw8fD4+fCZ8XFx8fFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcW1xcKFxce10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdXFwpXFx9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0gXSwKICAgICAgICAicXFzdHJpbmczIiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleCA6ICciezN9JywKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgfSBdLAogICAgICAgICJxc3RyaW5nMyIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXggOiAnInszfScsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nIgogICAgICAgIH0gXSwKICAgICAgICAicXFzdHJpbmciIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICcifCQnLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicXN0cmluZyIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRm9ydHJhbkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Gb3J0cmFuSGlnaGxpZ2h0UnVsZXMgPSBGb3J0cmFuSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9ydHJhbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2ZvcnRyYW5faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBGb3J0cmFuSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2ZvcnRyYW5faGlnaGxpZ2h0X3J1bGVzIikuRm9ydHJhbkhpZ2hsaWdodFJ1bGVzOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEZvcnRyYW5IaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIhIjsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbOl1ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdmFyIG91dGRlbnRzID0gewogICAgICAgICJyZXR1cm4iOiAxLAogICAgICAgICJicmVhayI6IDEsCiAgICAgICAgImNvbnRpbnVlIjogMSwKICAgICAgICAiUkVUVVJOIjogMSwKICAgICAgICAiQlJFQUsiOiAxLAogICAgICAgICJDT05USU5VRSI6IDEKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoaW5wdXQgIT09ICJcclxuIiAmJiBpbnB1dCAhPT0gIlxyIiAmJiBpbnB1dCAhPT0gIlxuIikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUudHJpbSgpLCBzdGF0ZSkudG9rZW5zOwoKICAgICAgICBpZiAoIXRva2VucykKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGRvIHsKICAgICAgICAgICAgdmFyIGxhc3QgPSB0b2tlbnMucG9wKCk7CiAgICAgICAgfSB3aGlsZSAobGFzdCAmJiAobGFzdC50eXBlID09ICJjb21tZW50IiB8fCAobGFzdC50eXBlID09ICJ0ZXh0IiAmJiBsYXN0LnZhbHVlLm1hdGNoKC9eXHMrJC8pKSkpOwoKICAgICAgICBpZiAoIWxhc3QpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIChsYXN0LnR5cGUgPT0gImtleXdvcmQiICYmIG91dGRlbnRzW2xhc3QudmFsdWVdKTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewoKICAgICAgICByb3cgKz0gMTsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKHJvdykpOwogICAgICAgIHZhciB0YWIgPSBkb2MuZ2V0VGFiU3RyaW5nKCk7CiAgICAgICAgaWYgKGluZGVudC5zbGljZSgtdGFiLmxlbmd0aCkgPT0gdGFiKQogICAgICAgICAgICBkb2MucmVtb3ZlKG5ldyBSYW5nZShyb3csIGluZGVudC5sZW5ndGgtdGFiLmxlbmd0aCwgcm93LCBpbmRlbnQubGVuZ3RoKSk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2ZvcnRyYW4iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9mb3J0cmFuIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-fsharp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgRlNoYXJwSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbiAoKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZSI6ICJ0aGlzIiwKICAgICAgICAia2V5d29yZCI6ICdhYnN0cmFjdHxhc3NlcnR8YmFzZXxiZWdpbnxjbGFzc3xkZWZhdWx0fGRlbGVnYXRlfGRvbmV8ZG93bmNhc3R8ZG93bnRvfGVsaWZcCnxlbHNlfGV4Y2VwdGlvbnxleHRlcm58ZmFsc2V8ZmluYWxseXxmdW5jdGlvbnxnbG9iYWx8aW5oZXJpdHxpbmxpbmV8aW50ZXJmYWNlfGludGVybmFsfGxhenl8bWF0Y2hcCnxtZW1iZXJ8bW9kdWxlfG11dGFibGV8bmFtZXNwYWNlfG9wZW58b3J8b3ZlcnJpZGV8cHJpdmF0ZXxwdWJsaWN8cmVjfHJldHVybnxyZXR1cm4hfHNlbGVjdHxzdGF0aWNcCnxzdHJ1Y3R8dGhlbnx0b3x0cnVlfHRyeXx0eXBlb2Z8dXBjYXN0fHVzZXx1c2UhfHZhbHx2b2lkfHdoZW58d2hpbGV8d2l0aHx5aWVsZHx5aWVsZCF8X19TT1VSQ0VfRElSRUNUT1JZX19cCnxhc3xhc3J8bGFuZHxsb3J8bHNsfGxzcnxseG9yfG1vZHxzaWd8YXRvbWljfGJyZWFrfGNoZWNrZWR8Y29tcG9uZW50fGNvbnN0fGNvbnN0cmFpbnR8Y29uc3RydWN0b3J8Y29udGludWVcCnxlYWdlcnxldmVudHxleHRlcm5hbHxmaXhlZHxmdW5jdG9yfGluY2x1ZGV8bWV0aG9kfG1peGlufG9iamVjdHxwYXJhbGxlbHxwcm9jZXNzfHByb3RlY3RlZHxwdXJlfHNlYWxlZHx0YWlsY2FsbFwKfHRyYWl0fHZpcnR1YWx8dm9sYXRpbGV8YW5kfGRvfGVuZHxmb3J8ZnVufGlmfGlufGxldHxsZXQhfG5ld3xub3R8bnVsbHxvZnxlbmRpZicsCiAgICAgICAgImNvbnN0YW50IjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzooPzooPzooPzooPzooPzpcXGQrKT8oPzpcXC5cXGQrKSl8KD86KD86XFxkKylcXC4pKXwoPzpcXGQrKSkoPzpbZUVdWystXT9cXGQrKSl8KD86KD86KD86XFxkKyk/KD86XFwuXFxkKykpfCg/Oig/OlxcZCspXFwuKSkpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmNsYXNzZXMiLAogICAgICAgICAgICAgIHJlZ2V4OiAnXFxbXFw8Wy5dKlxcPlxcXScKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnLy8uKiQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXCooPyFcKSkvLAogICAgICAgICAgICAgICAgcHVzaDogImJsb2NrQ29tbWVudCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXg6ICInLiciCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIiIiJywKICAgICAgICAgICAgICAgIG5leHQgIDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLi8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICciIiInLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0ICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXC4vLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46IFsidmVyYmF0aW0uc3RyaW5nIiwgInN0cmluZyJdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoQD8pKCIpJywKICAgICAgICAgICAgICAgIHN0YXRlTmFtZSA6ICJxcXN0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0ICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICciIicKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuZmxvYXQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoPzoiICsgZmxvYXROdW1iZXIgKyAifFxcZCspW2pKXVxcYiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5mbG9hdCIsCiAgICAgICAgICAgICAgICByZWdleDogZmxvYXROdW1iZXIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5pbnRlZ2VyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiKD86KD86KD86WzEtOV1cXGQqKXwoPzowKSl8KD86MFtvT10/WzAtN10rKXwoPzowW3hYXVtcXGRBLUZhLWZdKyl8KD86MFtiQl1bMDFdKykpXFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkLnR5cGUiLCAidmFyaWFibGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiKHR5cGVcXHMpKFthLXpBLVowLTlfJFwtXSpcXGIpIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXCtcXC58XFwtXFwufFxcKlxcLnxcXC9cXC58I3w7O3xcXCt8XFwtfFxcKnxcXCpcXCpcXC98XFwvXFwvfCV8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fDwtfD18XFwoXFwqXFwpIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleDogIltbKHtdIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleDogIltcXF0pfV0iCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIGJsb2NrQ29tbWVudDogW3sKICAgICAgICAgICAgcmVnZXg6IC9cKFwqXCkvLAogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleDogL1woXCooPyFcKSkvLAogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuc3RhcnQiLAogICAgICAgICAgICBwdXNoOiAiYmxvY2tDb21tZW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXg6IC9cKlwpLywKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmVuZCIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgIH1dCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCm9vcC5pbmhlcml0cyhGU2hhcnBIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuRlNoYXJwSGlnaGxpZ2h0UnVsZXMgPSBGU2hhcnBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mc2hhcnAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9mc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwogICAgdmFyIEZTaGFycEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9mc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIikuRlNoYXJwSGlnaGxpZ2h0UnVsZXM7CiAgICB2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CgogICAgdmFyIE1vZGUgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgVGV4dE1vZGUuY2FsbCh0aGlzKTsKICAgICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gRlNoYXJwSGlnaGxpZ2h0UnVsZXM7CiAgICAgICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKICAgIH07CgogICAgb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCgogICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiKCoiLCBlbmQ6ICIqKSIsIG5lc3RhYmxlOiB0cnVlfTsKCgogICAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2ZzaGFycCI7CiAgICB9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCiAgICBleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZnNoYXJwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-fsl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mc2xfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRlNMSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubW4iLAogICAgICAgICAgICByZWdleDogL1wvXCovLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKlwvLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQuYmxvY2suZnNsIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmxpbmUuZnNsIiwKICAgICAgICAgICAgcmVnZXg6IC9cL1wvLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lLmZzbCIsCiAgICAgICAgICAgICAgICByZWdleDogLyQvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5saW5lLmZzbCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleDogL1wkey8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvfS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJrZXl3b3JkLm90aGVyIgogICAgICAgICAgICB9XSwKICAgICAgICAgICAgY29tbWVudDogImpzIG91dGNhbGxzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXg6IC9bMC05XSpcLlswLTldKlwuWzAtOV0qLywKICAgICAgICAgICAgY29tbWVudDogInNlbXZlciIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZnNsTGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogIig/OiIKICAgICAgICAgICAgICAgICsgImdyYXBoX2xheW91dHxtYWNoaW5lX25hbWV8bWFjaGluZV9hdXRob3J8bWFjaGluZV9saWNlbnNlfG1hY2hpbmVfY29tbWVudHxtYWNoaW5lX2xhbmd1YWdlIgogICAgICAgICAgICAgICAgKyAifG1hY2hpbmVfdmVyc2lvbnxtYWNoaW5lX3JlZmVyZW5jZXxucG1fbmFtZXxncmFwaF9sYXlvdXR8b25faW5pdHxvbl9oYWx0fG9uX2VuZHxvbl90ZXJtaW5hdGV8b25fZmluYWxpemV8b25fdHJhbnNpdGlvbiIKICAgICAgICAgICAgICAgICsgInxvbl9hY3Rpb258b25fc3RvY2hhc3RpY19hY3Rpb258b25fbGVnYWx8b25fbWFpbnxvbl9mb3JjZWR8b25fdmFsaWRhdGlvbnxvbl92YWxpZGF0aW9uX2ZhaWx1cmV8b25fdHJhbnNpdGlvbl9yZWZ1c2VkfG9uX2ZvcmNlZF90cmFuc2l0aW9uX3JlZnVzZWQiCiAgICAgICAgICAgICAgICArICJ8b25fYWN0aW9uX3JlZnVzZWR8b25fZW50ZXJ8b25fZXhpdHxzdGFydF9zdGF0ZXN8ZW5kX3N0YXRlc3x0ZXJtaW5hbF9zdGF0ZXN8ZmluYWxfc3RhdGVzfGZzbF92ZXJzaW9uIgogICAgICAgICAgICAgICAgKyAiKVxccyo6IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wudHJhbnNpdGlvbi5mc2xBcnJvdyIsCiAgICAgICAgICAgIHJlZ2V4OiAvPC0+fDwtfC0+fDw9Pnw9Pnw8PXw8fj58fj58PH58PC09Pnw8PS0+fDwtfj58PH4tPnw8PX4+fDx+PT4vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMuZnNsUHJvYmFiaWxpdHkiLAogICAgICAgICAgICByZWdleDogL1swLTldKyUvLAogICAgICAgICAgICBjb21tZW50OiAiZWRnZSBwcm9iYWJpbGl0eSBhbm5vdGF0aW9uIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuZnNsQWN0aW9uIiwKICAgICAgICAgICAgcmVnZXg6IC9cJ1teJ10qXCcvLAogICAgICAgICAgICBjb21tZW50OiAiYWN0aW9uIGFubm90YXRpb24iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLmZzbExhYmVsLmRvdWJsZXF1b3RlZCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCJbXiJdKlwiLywKICAgICAgICAgICAgY29tbWVudDogImZzbCBsYWJlbCBhbm5vdGF0aW9uIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJlbnRpdHkubmFtZS50YWcuZnNsTGFiZWwuYXRvbSIsCiAgICAgICAgICAgIHJlZ2V4OiAvW2EtekEtWjAtOV8uKyYoKSNAIT8sXS8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJmc2wgbGFiZWwgYW5ub3RhdGlvbiIKICAgICAgICB9XQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpGU0xIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsKICAgIGZpbGVUeXBlczogWyJmc2wiLCAiZnNsX3N0YXRlIl0sCiAgICBuYW1lOiAiRlNMIiwKICAgIHNjb3BlTmFtZTogInNvdXJjZS5mc2wiCn07CgoKb29wLmluaGVyaXRzKEZTTEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5GU0xIaWdobGlnaHRSdWxlcyA9IEZTTEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZzbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2ZzbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEZTTEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9mc2xfaGlnaGxpZ2h0X3J1bGVzIikuRlNMSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gRlNMSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvZnNsIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZnNsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-ftl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mdGxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRnRsTGFuZ0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24gKCkgewoKICAgIHZhciBzdHJpbmdCdWlsdElucyA9ICJcXD98c3Vic3RyaW5nfGNhcF9maXJzdHx1bmNhcF9maXJzdHxjYXBpdGFsaXplfGNob3BfbGluZWJyZWFrfGRhdGV8dGltZXxkYXRldGltZXwiCiAgICAgICAgKyAiZW5kc193aXRofGh0bWx8Z3JvdXBzfGluZGV4X29mfGpfc3RyaW5nfGpzX3N0cmluZ3xqc29uX3N0cmluZ3xsYXN0X2luZGV4X29mfGxlbmd0aHxsb3dlcl9jYXNlfCIKICAgICAgICArICJsZWZ0X3BhZHxyaWdodF9wYWR8Y29udGFpbnN8bWF0Y2hlc3xudW1iZXJ8cmVwbGFjZXxydGZ8dXJsfHNwbGl0fHN0YXJ0c193aXRofHN0cmluZ3x0cmltfCIKICAgICAgICArICJ1cHBlcl9jYXNlfHdvcmRfbGlzdHx4aHRtbHx4bWwiOwogICAgdmFyIG51bWJlckJ1aWx0SW5zID0gImN8cm91bmR8Zmxvb3J8Y2VpbGluZyI7CiAgICB2YXIgZGF0ZUJ1aWx0SW5zID0gImlzb19bYS16X10rIjsKICAgIHZhciBzZXFCdWlsdElucyA9ICJmaXJzdHxsYXN0fHNlcV9jb250YWluc3xzZXFfaW5kZXhfb2Z8c2VxX2xhc3RfaW5kZXhfb2Z8cmV2ZXJzZXxzaXplfHNvcnR8c29ydF9ieXxjaHVuayI7CiAgICB2YXIgaGFzaEJ1aWx0SW5zID0gImtleXN8dmFsdWVzIjsKICAgIHZhciB4bWxCdWlsdElucyA9ICJjaGlsZHJlbnxwYXJlbnR8cm9vdHxhbmNlc3RvcnN8bm9kZV9uYW1lfG5vZGVfdHlwZXxub2RlX25hbWVzcGFjZSI7CiAgICB2YXIgZXhwZXJ0QnVpbHRJbnMgPSAiYnl0ZXxkb3VibGV8ZmxvYXR8aW50fGxvbmd8c2hvcnR8bnVtYmVyX3RvX2RhdGV8bnVtYmVyX3RvX3RpbWV8bnVtYmVyX3RvX2RhdGV0aW1lfCIKICAgICAgICArICJldmFsfGhhc19jb250ZW50fGludGVycHJldHxpc19bYS16X10rfG5hbWVzcGFjZW5ldyI7CiAgICB2YXIgYWxsQnVpbHRJbnMgPSBzdHJpbmdCdWlsdElucyArIG51bWJlckJ1aWx0SW5zICsgZGF0ZUJ1aWx0SW5zICsgc2VxQnVpbHRJbnMgKyBoYXNoQnVpbHRJbnMKICAgICAgICArIHhtbEJ1aWx0SW5zICsgZXhwZXJ0QnVpbHRJbnM7CgogICAgdmFyIGRlcHJlY2F0ZWRCdWlsdElucyA9ICJkZWZhdWx0fGV4aXN0c3xpZl9leGlzdHN8d2ViX3NhZmUiOwoKICAgIHZhciB2YXJpYWJsZXMgPSAiZGF0YV9tb2RlbHxlcnJvcnxnbG9iYWxzfGxhbmd8bG9jYWxlfGxvY2Fsc3xtYWlufG5hbWVzcGFjZXxub2RlfGN1cnJlbnRfbm9kZXwiCiAgICAgICAgKyAibm93fG91dHB1dF9lbmNvZGluZ3x0ZW1wbGF0ZV9uYW1lfHVybF9lc2NhcGluZ19jaGFyc2V0fHZhcnN8dmVyc2lvbiI7CgogICAgdmFyIG9wZXJhdG9ycyA9ICJndHxndGV8bHR8bHRlfGFzfGlufHVzaW5nIjsKCiAgICB2YXIgcmVzZXJ2ZWQgPSAidHJ1ZXxmYWxzZSI7CgogICAgdmFyIGF0dHJpYnV0ZXMgPSAiZW5jb2Rpbmd8cGFyc2V8bG9jYWxlfG51bWJlcl9mb3JtYXR8ZGF0ZV9mb3JtYXR8dGltZV9mb3JtYXR8ZGF0ZXRpbWVfZm9ybWF0fHRpbWVfem9uZXwiCiAgICAgICAgKyAidXJsX2VzY2FwaW5nX2NoYXJzZXR8Y2xhc3NpY19jb21wYXRpYmxlfHN0cmlwX3doaXRlc3BhY2V8c3RyaXBfdGV4dHxzdHJpY3Rfc3ludGF4fG5zX3ByZWZpeGVzfCIKICAgICAgICArICJhdHRyaWJ1dGVzIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVudGl0eSIsCiAgICAgICAgICAgIHJlZ2V4IDogLyZbXjtdKzsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/KCIrYWxsQnVpbHRJbnMrIikiCiAgICAgICAgfSwgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kZXByZWNhdGVkIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/KCIrZGVwcmVjYXRlZEJ1aWx0SW5zKyIpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAibGFuZ3VhZ2UudmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6ICJcXC4oPzoiK3ZhcmlhYmxlcysiKSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxiKCIrcmVzZXJ2ZWQrIilcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxiKD86IitvcGVyYXRvcnMrIilcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUiLAogICAgICAgICAgICByZWdleCA6IGF0dHJpYnV0ZXMKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vCiAgICAgICAgICAgIHJlZ2V4IDogL1snIl0vLAogICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUubWF0Y2goIl5bKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pPyQiKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubnVtZXJpYyI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleCA6IC9bXHcuK1wtXSsvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiIXxcXC58XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgfV0sCgogICAgICAgICJxc3RyaW5nIiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6ICdcXFxcW25ydHZlZlxcXFwiJF0nCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6IC9bJyJdLywKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRnRsTGFuZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKdmFyIEZ0bEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB2YXIgZGlyZWN0aXZlcyA9ICJhc3NpZ258YXR0ZW1wdHxicmVha3xjYXNlfGNvbXByZXNzfGRlZmF1bHR8ZWxzZWlmfGVsc2V8ZXNjYXBlfGZhbGxiYWNrfGZ1bmN0aW9ufGZsdXNofCIKICAgICAgICArICJmdGx8Z2xvYmFsfGlmfGltcG9ydHxpbmNsdWRlfGxpc3R8bG9jYWx8bHR8bWFjcm98bmVzdGVkfG5vZXNjYXBlfG5vcGFyc2V8bnR8cmVjb3ZlcnxyZWN1cnNlfHJldHVybnxydHwiCiAgICAgICAgKyAic2V0dGluZ3xzdG9wfHN3aXRjaHx0fHZpc2l0IjsKCiAgICB2YXIgc3RhcnRSdWxlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICI8Iy0tIiwKICAgICAgICAgICAgbmV4dCA6ICJmdGwtZGNvbW1lbnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuaW50ZXJwb2xhdGVkIiwKICAgICAgICAgICAgcmVnZXggOiAiXFwkeyIsCiAgICAgICAgICAgIHB1c2ggIDogImZ0bC1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICAiPC8/IygiK2RpcmVjdGl2ZXMrIikiLAogICAgICAgICAgICBwdXNoIDogImZ0bC1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3RoZXIiLAogICAgICAgICAgICByZWdleCA6ICI8Lz9AW2EtekEtWlxcLl0rIiwKICAgICAgICAgICAgcHVzaCA6ICJmdGwtc3RhcnQiCiAgICAgICAgfQogICAgXTsKCiAgICB2YXIgZW5kUnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuaW50ZXJwb2xhdGVkIiwKICAgICAgICAgICAgcmVnZXggOiAifSIsCiAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICB9CiAgICBdOwoKICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRydWxlcykKICAgICAgICB0aGlzLiRydWxlc1trZXldLnVuc2hpZnQuYXBwbHkodGhpcy4kcnVsZXNba2V5XSwgc3RhcnRSdWxlcyk7CgogICAgdGhpcy5lbWJlZFJ1bGVzKEZ0bExhbmdIaWdobGlnaHRSdWxlcywgImZ0bC0iLCBlbmRSdWxlcywgWyJzdGFydCJdKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICAiZnRsLWRjb21tZW50IiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICItLT4iLAogICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgIH1dCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoRnRsSGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkZ0bEhpZ2hsaWdodFJ1bGVzID0gRnRsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mdGwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9mdGxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgRnRsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Z0bF9oaWdobGlnaHRfcnVsZXMiKS5GdGxIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gRnRsSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2Z0bCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2Z0bCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-gcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9nY29kZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCiAgICB2YXIgR2NvZGVIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgICAgICJJRnxET3xXSElMRXxFTkRXSElMRXxDQUxMfEVORElGfFNVQnxFTkRTVUJ8R09UT3xSRVBFQVR8RU5EUkVQRUFUfENBTEwiCiAgICAgICAgICAgICk7CgogICAgICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICAgICAiUEkiCiAgICAgICAgICAgICk7CgogICAgICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICAgICAiQVRBTnxBQlN8QUNPU3xBU0lOfFNJTnxDT1N8RVhQfEZJWHxGVVB8Uk9VTkR8TE58VEFOIgogICAgICAgICAgICApOwogICAgICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzCiAgICAgICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCiAgICAgICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwoLipcXCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyCiAgICAgICAgICAgICAgICByZWdleCA6ICIoW05dKShbMC05XSspIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gIiBzdHJpbmcKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihbR10pKFswLTldK1xcLj9bMC05XT8pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihbTV0pKFswLTldK1xcLj9bMC05XT8pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihbLStdPyhbMC05XSpcXC4/WzAtOV0rXFwuPykpfChcXGIwW3hYXVthLWZBLUYwLTldK3woXFxiXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoW2VFXVstK10/XFxkKyk/KSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW0EtWl0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiRVF8TFR8R1R8TkV8R0V8TEV8T1J8WE9SIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcW10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9IF0KICAgICAgICB9OwogICAgfTsKCiAgICBvb3AuaW5oZXJpdHMoR2NvZGVIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCiAgICBleHBvcnRzLkdjb2RlSGlnaGxpZ2h0UnVsZXMgPSBHY29kZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZ2NvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9nY29kZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICAgIHZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CiAgICB2YXIgR2NvZGVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZ2NvZGVfaGlnaGxpZ2h0X3J1bGVzIikuR2NvZGVIaWdobGlnaHRSdWxlczsKICAgIHZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CgogICAgdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gR2NvZGVIaWdobGlnaHRSdWxlczsKICAgICAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwogICAgfTsKICAgIG9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2djb2RlIjsKICAgIH0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKICAgIGV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZ2NvZGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-gherkin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9naGVya2luX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN0cmluZ0VzY2FwZSA9ICAiXFxcXCh4WzAtOUEtRmEtZl17Mn18WzAtN117M318W1xcXFxhYmZucnR2J1wiXXxVWzAtOUEtRmEtZl17OH18dVswLTlBLUZhLWZdezR9KSI7Cgp2YXIgR2hlcmtpbkhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbGFuZ3VhZ2VzID0gW3sKICAgICAgICBuYW1lOiAiZW4iLAogICAgICAgIGxhYmVsczogIkZlYXR1cmV8QmFja2dyb3VuZHxTY2VuYXJpbyg/OiBPdXRsaW5lKT98RXhhbXBsZXMiLAogICAgICAgIGtleXdvcmRzOiAiR2l2ZW58V2hlbnxUaGVufEFuZHxCdXQiCiAgICB9XTsKICAgIAogICAgdmFyIGxhYmVscyA9IGxhbmd1YWdlcy5tYXAoZnVuY3Rpb24obCkgewogICAgICAgIHJldHVybiBsLmxhYmVsczsKICAgIH0pLmpvaW4oInwiKTsKICAgIHZhciBrZXl3b3JkcyA9IGxhbmd1YWdlcy5tYXAoZnVuY3Rpb24obCkgewogICAgICAgIHJldHVybiBsLmtleXdvcmRzOwogICAgfSkuam9pbigifCIpOwogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICByZWdleDogIig/Oig/OlsxLTldXFxkKil8KD86MCkpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiMuKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGxhYmVscyArICIpOnwoPzoiICsga2V5d29yZHMgKyAiKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICByZWdleCA6ICJcXCoiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgIHJlZ2V4IDogJyJ7M30nLAogICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJeXFxzKig/PUBbXFx3XSkiLAogICAgICAgICAgICBuZXh0IDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIkBbXFx3XSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIjxbXj5dKz4iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFx8KD89LikiLAogICAgICAgICAgICBuZXh0IDogInRhYmxlLWl0ZW0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFx8JCIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCiAgICAgICAgInFxc3RyaW5nMyIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXggOiAnInszfScsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxcXN0cmluZyIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJ0YWJsZS1pdGVtIiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6IC8kLywKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6IC9cfC8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcLi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgfV0KICAgIH07CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoR2hlcmtpbkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5HaGVya2luSGlnaGxpZ2h0UnVsZXMgPSBHaGVya2luSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9naGVya2luIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvZ2hlcmtpbl9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgR2hlcmtpbkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9naGVya2luX2hpZ2hsaWdodF9ydWxlcyIpLkdoZXJraW5IaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gR2hlcmtpbkhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2doZXJraW4iOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgc3BhY2UyID0gIiAgIjsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICAKICAgICAgICBpZihsaW5lLm1hdGNoKCJbIF0qXFx8IikpIHsKICAgICAgICAgICAgaW5kZW50ICs9ICJ8ICI7CiAgICAgICAgfQoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KICAgICAgICAKCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgaWYgKGxpbmUubWF0Y2goIlNjZW5hcmlvOnxGZWF0dXJlOnxTY2VuYXJpbyBPdXRsaW5lOnxCYWNrZ3JvdW5kOiIpKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gc3BhY2UyOwogICAgICAgICAgICB9IGVsc2UgaWYobGluZS5tYXRjaCgiKEdpdmVufFRoZW4pLisoOikkfEV4YW1wbGVzOiIpKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gc3BhY2UyOwogICAgICAgICAgICB9IGVsc2UgaWYobGluZS5tYXRjaCgiXFwqLisiKSkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0gCiAgICAgICAgfQogICAgICAgIAoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZ2hlcmtpbiJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-gitignore.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9naXRpZ25vcmVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgR2l0aWdub3JlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXlxzKiMuKiQvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBuZWdhdGVkIHBhdHRlcm5zCiAgICAgICAgICAgICAgICByZWdleCA6IC9eXHMqIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCkdpdGlnbm9yZUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0gewogICAgZmlsZVR5cGVzOiBbJ2dpdGlnbm9yZSddLAogICAgbmFtZTogJ0dpdGlnbm9yZScKfTsKCm9vcC5pbmhlcml0cyhHaXRpZ25vcmVIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuR2l0aWdub3JlSGlnaGxpZ2h0UnVsZXMgPSBHaXRpZ25vcmVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2dpdGlnbm9yZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2dpdGlnbm9yZV9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBHaXRpZ25vcmVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZ2l0aWdub3JlX2hpZ2hsaWdodF9ydWxlcyIpLkdpdGlnbm9yZUhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBHaXRpZ25vcmVIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9naXRpZ25vcmUiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9naXRpZ25vcmUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-glsl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY0Z1bmN0aW9ucyA9IGV4cG9ydHMuY0Z1bmN0aW9ucyA9ICJcXGIoPzpoeXBvdCg/OmZ8bCk/fHMoPzpzY2FuZnx5c3RlbXxucHJpbnRmfGNhKD86bmZ8bGIoPzpuKD86ZnxsKT98bG4oPzpmfGwpPykpfGkoPzpuKD86aCg/OmZ8bCk/fGZ8bCk/fGduKD86YWx8Yml0KSl8dHIoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT8pfGVycm9yfHBicmt8ZnRpbWV8bGVufHJjaHJ8eGZybSl8cHJpbnRmfGV0KD86am1wfHZidWZ8bG9jYWxlfGJ1Zil8cXJ0KD86ZnxsKT98dyg/OnNjYW5mfHByaW50Zil8cmFuZCl8big/OmUoPzphcmJ5aW50KD86ZnxsKT98eHQoPzp0b3dhcmQoPzpmfGwpP3xhZnRlcig/OmZ8bCk/KSl8YW4oPzpmfGwpPyl8Yyg/OnMoPzppbig/OmgoPzpmfGwpP3xmfGwpP3xxcnQoPzpmfGwpPyl8Y29zKD86aCg/OmYpP3xmfGwpP3xpbWFnKD86ZnxsKT98dCg/OmltZXxhbig/OmgoPzpmfGwpP3xmfGwpPyl8byg/OnMoPzpoKD86ZnxsKT98ZnxsKT98bmooPzpmfGwpP3xweXNpZ24oPzpmfGwpPyl8cCg/Om93KD86ZnxsKT98cm9qKD86ZnxsKT8pfGUoPzppbCg/OmZ8bCk/fHhwKD86ZnxsKT8pfGwoPzpvKD86Y2t8Zyg/OmZ8bCk/KXxlYXJlcnIpfGEoPzpzaW4oPzpoKD86ZnxsKT98ZnxsKT98Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHRhbig/OmgoPzpmfGwpP3xmfGwpP3xsbG9jfHJnKD86ZnxsKT98YnMoPzpmfGwpPyl8cmVhbCg/OmZ8bCk/fGJydCg/OmZ8bCk/KXx0KD86aW1lfG8oPzp1cHBlcnxsb3dlcil8YW4oPzpoKD86ZnxsKT98ZnxsKT98cnVuYyg/OmZ8bCk/fGdhbW1hKD86ZnxsKT98bXAoPzpuYW18ZmlsZSkpfGkoPzpzKD86c3BhY2V8big/Om9ybWFsfGFuKXxjbnRybHxpbmZ8ZGlnaXR8dSg/Om5vcmRlcmVkfHBwZXIpfHAoPzp1bmN0fHJpbnQpfGZpbml0ZXx3KD86c3BhY2V8Yyg/Om50cmx8dHlwZSl8ZGlnaXR8dXBwZXJ8cCg/OnVuY3R8cmludCl8bG93ZXJ8YWwoPzpudW18cGhhKXxncmFwaHx4ZGlnaXR8YmxhbmspfGwoPzpvd2VyfGVzcyg/OmVxdWFsfGdyZWF0ZXIpPyl8YWwoPzpudW18cGhhKXxncig/OmVhdGVyKD86ZXF1YWwpP3xhcGgpfHhkaWdpdHxibGFuayl8bG9nYig/OmZ8bCk/fG1heCg/OmRpdnxhYnMpKXxkaSg/OnZ8ZmZ0aW1lKXxfRXhpdHx1bmdldCg/OmN8d2MpfHAoPzpvdyg/OmZ8bCk/fHV0KD86c3xjKD86aGFyKT98d2MoPzpoYXIpPyl8ZXJyb3J8cmludGYpfGUoPzpyZig/OmMoPzpmfGwpP3xmfGwpP3x4KD86aXR8cCg/OjIoPzpmfGwpP3xmfGx8bTEoPzpmfGwpPyk/KSl8dig/OnMoPzpzY2FuZnxucHJpbnRmfGNhbmZ8cHJpbnRmfHcoPzpzY2FuZnxwcmludGYpKXxwcmludGZ8Zig/OnNjYW5mfHByaW50Znx3KD86c2NhbmZ8cHJpbnRmKSl8dyg/OnNjYW5mfHByaW50Zil8YV8oPzpzdGFydHxjb3B5fGVuZHxhcmcpKXxxc29ydHxmKD86cyg/OmNhbmZ8ZSg/OnRwb3N8ZWspKXxjbG9zZXx0ZWxsfG9wZW58ZGltKD86ZnxsKT98cCg/OmNsYXNzaWZ5fHV0KD86c3xjfHcoPzpzfGMpKXxyaW50Zil8ZSg/OmhvbGRleGNlcHR8c2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpfGNsZWFyZXhjZXB0fHRlc3RleGNlcHR8b2Z8dXBkYXRlZW52fHIoPzphaXNlZXhjZXB0fHJvcil8Z2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpKXxmbHVzaHx3KD86c2NhbmZ8aWRlfHByaW50ZnxyaXRlKXxsb29yKD86ZnxsKT98YWJzKD86ZnxsKT98Z2V0KD86c3xjfHBvc3x3KD86c3xjKSl8cmUoPzpvcGVufGV8YWR8eHAoPzpmfGwpPyl8bSg/OmluKD86ZnxsKT98b2QoPzpmfGwpP3xhKD86ZnxsfHgoPzpmfGwpPyk/KSl8bCg/OmQoPzppdnxleHAoPzpmfGwpPyl8byg/Om5nam1wfGNhbCg/OnRpbWV8ZWNvbnYpfGcoPzoxKD86cCg/OmZ8bCk/fDAoPzpmfGwpPyl8Mig/OmZ8bCk/fGZ8bHxiKD86ZnxsKT8pPyl8YWJzfGwoPzpkaXZ8YWJzfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT8pKXxyKD86aW50KD86ZnxsKT98b3VuZCg/OmZ8bCk/KXxnYW1tYSg/OmZ8bCk/KXx3KD86c2NhbmZ8Yyg/OnMoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT98bWJzKXxwYnJrfGZ0aW1lfGxlbnxyKD86Y2hyfHRvbWJzKXx4ZnJtKXx0byg/OmJ8bWIpfHJ0b21iKXxwcmludGZ8bWVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSkpfGEoPzpzKD86c2VydHxjdGltZXxpbig/OmgoPzpmfGwpP3xmfGwpPyl8Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHQoPzpvKD86aXxmfGwoPzpsKT8pfGV4aXR8YW4oPzpoKD86ZnxsKT98Mig/OmZ8bCk/fGZ8bCk/KXxiKD86c3xvcnQpKXxnKD86ZXQoPzpzfGMoPzpoYXIpP3xlbnZ8d2MoPzpoYXIpPyl8bXRpbWUpfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT98ZSg/Om5hbWV8YWxsb2N8d2luZHxtKD86b3ZlfHF1byg/OmZ8bCk/fGFpbmRlcig/OmZ8bCk/KSl8YSg/Om5kfGlzZSkpfGIoPzpzZWFyY2h8dG93Yyl8bSg/Om9kZig/OmZ8bCk/fGVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSl8a3RpbWV8YWxsb2N8Yig/OnMoPzppbml0fHRvd2NzfHJ0b3djcyl8dG93Y3xsZW58cig/OnRvd2N8bGVuKSkpKVxcYiI7Cgp2YXIgY19jcHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkQ29udHJvbHMgPSAoCiAgICAgICAgImJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGZvcnxnb3RvfGlmfF9QcmFnbWF8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8b3BlcmF0b3J8dHJ5fHRocm93fHVzaW5nIgogICAgKTsKICAgIAogICAgdmFyIHN0b3JhZ2VUeXBlID0gKAogICAgICAgICJhc218X19hc21fX3xhdXRvfGJvb2x8X0Jvb2x8Y2hhcnxfQ29tcGxleHxkb3VibGV8ZW51bXxmbG9hdHwiICsKICAgICAgICAiX0ltYWdpbmFyeXxpbnR8bG9uZ3xzaG9ydHxzaWduZWR8c3RydWN0fHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHwiICsKICAgICAgICAiY2xhc3N8d2NoYXJfdHx0ZW1wbGF0ZXxjaGFyMTZfdHxjaGFyMzJfdCIKICAgICk7CgogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAoCiAgICAgICAgImNvbnN0fGV4dGVybnxyZWdpc3RlcnxyZXN0cmljdHxzdGF0aWN8dm9sYXRpbGV8aW5saW5lfHByaXZhdGV8IiArCiAgICAgICAgInByb3RlY3RlZHxwdWJsaWN8ZnJpZW5kfGV4cGxpY2l0fHZpcnR1YWx8ZXhwb3J0fG11dGFibGV8dHlwZW5hbWV8IiArCiAgICAgICAgImNvbnN0ZXhwcnxuZXd8ZGVsZXRlfGFsaWduYXN8YWxpZ25vZnxkZWNsdHlwZXxub2V4Y2VwdHx0aHJlYWRfbG9jYWwiCiAgICApOwoKICAgIHZhciBrZXl3b3JkT3BlcmF0b3JzID0gKAogICAgICAgICJhbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxjb21wbHxub3R8bm90X2VxfG9yfG9yX2VxfHR5cGVpZHx4b3J8eG9yX2VxfCIgKwogICAgICAgICJjb25zdF9jYXN0fGR5bmFtaWNfY2FzdHxyZWludGVycHJldF9jYXN0fHN0YXRpY19jYXN0fHNpemVvZnxuYW1lc3BhY2UiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJOVUxMfHRydWV8ZmFsc2V8VFJVRXxGQUxTRXxudWxscHRyIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuJGtleXdvcmRzID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6IGtleXdvcmRDb250cm9scywKICAgICAgICAic3RvcmFnZS50eXBlIiA6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiIDoga2V5d29yZE9wZXJhdG9ycywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CiAgICB2YXIgZXNjYXBlUmUgPSAvXFwoPzpbJyI/XFxhYmZucnR2XXxbMC03XXsxLDN9fHhbYS1mQS1GXGRdezJ9fHVbYS1mQS1GXGRdezR9VVthLWZBLUZcZF17OH18LikvLnNvdXJjZTsKICAgIHZhciBmb3JtYXRSZSA9ICIlIgogICAgICAgICAgKyAvKFxkK1wkKT8vLnNvdXJjZSAvLyBmaWVsZCAoYXJndW1lbnQgIykKICAgICAgICAgICsgL1sjMFwtICsnXSovLnNvdXJjZSAvLyBmbGFncwogICAgICAgICAgKyAvWyw7Ol9dPy8uc291cmNlIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXIgKEFsdGlWZWMpCiAgICAgICAgICArIC8oKC0/XGQrKXxcKigtP1xkK1wkKT8pPy8uc291cmNlIC8vIG1pbmltdW0gZmllbGQgd2lkdGgKICAgICAgICAgICsgLyhcLigoLT9cZCspfFwqKC0/XGQrXCQpPyk/KT8vLnNvdXJjZSAvLyBwcmVjaXNpb24KICAgICAgICAgICsgLyhoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpPy8uc291cmNlIC8vIGxlbmd0aCBtb2RpZmllcgogICAgICAgICAgKyAvKFxbW14iXF1dK1xdfFtkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdKS8uc291cmNlOyAvLyBjb252ZXJzaW9uIHR5cGUKCiAgICB0aGlzLiRydWxlcyA9IHsgCiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInNpbmdsZUxpbmVDb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD86IiArIGVzY2FwZVJlICsgInwuKT8nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsIAogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFzdHJpbmciLAogICAgICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmciLCByZWdleDogL1xcXHMqJC8sIG5leHQ6ICJxcXN0cmluZyIgfSwKICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVJlIH0sCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiBmb3JtYXRSZSB9LAogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmcuZW5kIiwgcmVnZXg6ICcifCQnLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnUiJcXCgnLCAKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInJhd1N0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogInN0cmluZy5lbmQiLCByZWdleDogJ1xcKSInLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdKyhMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8oTHxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86aW5jbHVkZXxpbXBvcnR8cHJhZ21hfGxpbmV8ZGVmaW5lfHVuZGVmKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBzcGVjaWFsIGNhc2UgcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiI1xccyooPzplbmRpZnxpZnxpZmRlZnxlbHNlfGVsaWZ8aWZuZGVmKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IGNGdW5jdGlvbnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PDw9fD4+PXw+Pj49fDw+fCYmfFx8XHx8XD86fFsqJVwvK1wtJlxefH4hPD49XT0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzaW5nbGVMaW5lQ29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIG5leHQgOiAic2luZ2xlTGluZUNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIubXVsdGlsaW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLipcXC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKjwuKz8+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXlxcXC9dKy8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhjX2NwcEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5jX2NwcEhpZ2hsaWdodFJ1bGVzID0gY19jcHBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NfY3BwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY19jcHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIGNfY3BwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpLmNfY3BwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IGNfY3BwSGlnaGxpZ2h0UnVsZXM7CgogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NfY3BwIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZ2xzbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGNfY3BwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpLmNfY3BwSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgZ2xzbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJhdHRyaWJ1dGV8Y29uc3R8dW5pZm9ybXx2YXJ5aW5nfGJyZWFrfGNvbnRpbnVlfGRvfGZvcnx3aGlsZXwiICsKICAgICAgICAiaWZ8ZWxzZXxpbnxvdXR8aW5vdXR8ZmxvYXR8aW50fHZvaWR8Ym9vbHx0cnVlfGZhbHNlfCIgKwogICAgICAgICJsb3dwfG1lZGl1bXB8aGlnaHB8cHJlY2lzaW9ufGludmFyaWFudHxkaXNjYXJkfHJldHVybnxtYXQyfG1hdDN8IiArCiAgICAgICAgIm1hdDR8dmVjMnx2ZWMzfHZlYzR8aXZlYzJ8aXZlYzN8aXZlYzR8YnZlYzJ8YnZlYzN8YnZlYzR8c2FtcGxlcjJEfCIgKwogICAgICAgICJzYW1wbGVyQ3ViZXxzdHJ1Y3QiCiAgICApOwoKICAgIHZhciBidWlsZGluQ29uc3RhbnRzID0gKAogICAgICAgICJyYWRpYW5zfGRlZ3JlZXN8c2lufGNvc3x0YW58YXNpbnxhY29zfGF0YW58cG93fCIgKwogICAgICAgICJleHB8bG9nfGV4cDJ8bG9nMnxzcXJ0fGludmVyc2VzcXJ0fGFic3xzaWdufGZsb29yfGNlaWx8ZnJhY3R8bW9kfCIgKwogICAgICAgICJtaW58bWF4fGNsYW1wfG1peHxzdGVwfHNtb290aHN0ZXB8bGVuZ3RofGRpc3RhbmNlfGRvdHxjcm9zc3wiICsKICAgICAgICAibm9ybWFsaXplfGZhY2Vmb3J3YXJkfHJlZmxlY3R8cmVmcmFjdHxtYXRyaXhDb21wTXVsdHxsZXNzVGhhbnwiICsKICAgICAgICAibGVzc1RoYW5FcXVhbHxncmVhdGVyVGhhbnxncmVhdGVyVGhhbkVxdWFsfGVxdWFsfG5vdEVxdWFsfGFueXxhbGx8IiArCiAgICAgICAgIm5vdHxkRmR4fGRGZHl8ZndpZHRofHRleHR1cmUyRHx0ZXh0dXJlMkRQcm9qfHRleHR1cmUyRExvZHwiICsKICAgICAgICAidGV4dHVyZTJEUHJvakxvZHx0ZXh0dXJlQ3ViZXx0ZXh0dXJlQ3ViZUxvZHwiICsKICAgICAgICAiZ2xfTWF4VmVydGV4QXR0cmlic3xnbF9NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9yc3xnbF9NYXhWYXJ5aW5nVmVjdG9yc3wiICsKICAgICAgICAiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHN8Z2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0c3wiICsKICAgICAgICAiZ2xfTWF4VGV4dHVyZUltYWdlVW5pdHN8Z2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9yc3xnbF9NYXhEcmF3QnVmZmVyc3wiICsKICAgICAgICAiZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnN8Z2xfRGVwdGhSYW5nZXwiICsKICAgICAgICAiZ2xfUG9zaXRpb258Z2xfUG9pbnRTaXplfCIgKwogICAgICAgICJnbF9GcmFnQ29vcmR8Z2xfRnJvbnRGYWNpbmd8Z2xfUG9pbnRDb29yZHxnbF9GcmFnQ29sb3J8Z2xfRnJhZ0RhdGEiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsZGluQ29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gbmV3IGNfY3BwSGlnaGxpZ2h0UnVsZXMoKS4kcnVsZXM7CiAgICB0aGlzLiRydWxlcy5zdGFydC5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHsKICAgICAgICBpZiAodHlwZW9mIHJ1bGUudG9rZW4gPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgcnVsZS50b2tlbiA9IGtleXdvcmRNYXBwZXI7CiAgICB9KTsKfTsKCm9vcC5pbmhlcml0cyhnbHNsSGlnaGxpZ2h0UnVsZXMsIGNfY3BwSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5nbHNsSGlnaGxpZ2h0UnVsZXMgPSBnbHNsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9nbHNsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9jX2NwcCIsImFjZS9tb2RlL2dsc2xfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIENNb2RlID0gcmVxdWlyZSgiLi9jX2NwcCIpLk1vZGU7CnZhciBnbHNsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2dsc2xfaGlnaGxpZ2h0X3J1bGVzIikuZ2xzbEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBnbHNsSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBDTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9nbHNsIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZ2xzbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-gobstones.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9nb2JzdG9uZXNfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEdvYnN0b25lc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogIHZhciBkZWZpbml0aW9ucyA9IHsKICAgIHN0YW5kYXJkOiAicHJvZ3JhbXxwcm9jZWR1cmV8ZnVuY3Rpb258aW50ZXJhY3RpdmV8cmV0dXJufGxldCIsCiAgICB0eXBlOiAidHlwZXxpc3x2YXJpYW50fHJlY29yZHxmaWVsZHxjYXNlIgogIH07CgogIHZhciBjb250cm9sID0gewogICAgY29tbWFuZHM6IHsKICAgICAgcmVwZXRpdGlvbnM6ICJyZXBlYXR8d2hpbGV8Zm9yZWFjaHxpbiIsCiAgICAgIGFsdGVybmF0aXZlczogImlmfGVsc2VpZnxlbHNlfHN3aXRjaCIKICAgIH0sCiAgICBleHByZXNzaW9uczogewogICAgICBhbHRlcm5hdGl2ZXM6ICJjaG9vc2V8d2hlbnxvdGhlcndpc2V8bWF0Y2hpbmd8c2VsZWN0fG9uIgogICAgfQogIH07CgogIHZhciB2YWx1ZXMgPSB7CiAgICBjb2xvcnM6ICJWZXJkZXxSb2pvfEF6dWx8TmVncm8iLAogICAgY2FyZGluYWxzOiAiTm9ydGV8U3VyfEVzdGV8T2VzdGUiLAogICAgYm9vbGVhbnM6ICJUcnVlfEZhbHNlIiwKICAgIG51bWJlcnM6IC8oWy1dPykoWzAtOV0rKVxiLywKICAgIHN0cmluZ3M6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJwogIH07CgogIHZhciBwcmltaXRpdmVzID0gewogICAgY29tbWFuZHM6ICJQb25lcnxTYWNhcnxNb3ZlcnxJckFsQm9yZGV8VmFjaWFyVGFibGVyb3xCT09NIiwKICAgIGV4cHJlc3Npb25zOiAibnJvQm9saXRhc3xoYXlCb2xpdGFzfHB1ZWRlTW92ZXJ8IisKICAgICAgICAgICAgICAgICAgInNpZ3VpZW50ZXxwcmV2aW98b3B1ZXN0b3wiKwogICAgICAgICAgICAgICAgICAibWluQm9vbHxtYXhCb29sfG1pbkRpcnxtYXhEaXJ8bWluQ29sb3J8bWF4Q29sb3J8IisKICAgICAgICAgICAgICAgICAgInByaW1lcm98c2luRWxQcmltZXJvfGVzVmFjw61hfCIrCiAgICAgICAgICAgICAgICAgICJib29tIiwKICAgIGtleXM6ICJLX0F8S19CfEtfQ3xLX0R8S19FfEtfRnxLX0d8S19HfEtfSHxLX0l8S19KfEtfS3xLX0x8S19NfEtfTnxLX8ORfCIrCiAgICAgICJLX098S19QfEtfUXxLX1J8S19TfEtfVHxLX1V8S19WfEtfV3xLX1h8S19ZfEtfWnwiKwogICAgICAiS18wfEtfMXxLXzJ8S18zfEtfNHxLXzV8S182fEtfN3xLXzh8S185fCIrCiAgICAgICJLX0YxfEtfRjJ8S19GM3xLX0Y0fEtfRjV8S19GNnxLX0Y3fEtfRjh8S19GOXxLX0YxMHxLX0YxMXxLXzEyfCIrCiAgICAgICJLX1VQfEtfRE9XTnxLX0xFRlR8S19SSUdIVHxLX1JFVFVSTnxLX0JBQ0tTUEFDRXxLX1RBQnxLX1NQQUNFfEtfRVNDQVBFIisKCiAgICAgICJLX0NUUkxfQXxLX0NUUkxfQnxLX0NUUkxfQ3xLX0NUUkxfRHxLX0NUUkxfRXxLX0NUUkxfRnxLX0NUUkxfR3xLX0NUUkxfR3wiKwogICAgICAiS19DVFJMX0h8S19DVFJMX0l8S19DVFJMX0p8S19DVFJMX0t8S19DVFJMX0x8S19DVFJMX018S19DVFJMX058S19DVFJMX8ORfCIrCiAgICAgICJLX0NUUkxfT3xLX0NUUkxfUHxLX0NUUkxfUXxLX0NUUkxfUnxLX0NUUkxfU3xLX0NUUkxfVHxLX0NUUkxfVXxLX0NUUkxfVnwiKwogICAgICAiS19DVFJMX1d8S19DVFJMX1h8S19DVFJMX1l8S19DVFJMX1p8IisKICAgICAgIktfQ1RSTF8wfEtfQ1RSTF8xfEtfQ1RSTF8yfEtfQ1RSTF8zfEtfQ1RSTF80fEtfQ1RSTF81fEtfQ1RSTF82fEtfQ1RSTF83fEtfQ1RSTF84fEtfQ1RSTF85fCIrCiAgICAgICJLX0NUUkxfRjF8S19DVFJMX0YyfEtfQ1RSTF9GM3xLX0NUUkxfRjR8S19DVFJMX0Y1fEtfQ1RSTF9GNnxLX0NUUkxfRjd8IisKICAgICAgIktfQ1RSTF9GOHxLX0NUUkxfRjl8S19DVFJMX0YxMHxLX0NUUkxfRjExfEtfQ1RSTF9GMTJ8IisKICAgICAgIktfQ1RSTF9VUHxLX0NUUkxfRE9XTnxLX0NUUkxfTEVGVHxLX0NUUkxfUklHSFR8S19DVFJMX1JFVFVSTnwiKwogICAgICAiS19DVFJMX0JBQ0tTUEFDRXxLX0NUUkxfVEFCfEtfQ1RSTF9TUEFDRXxLX0NUUkxfRVNDQVBFIisKCiAgICAgICJLX0FMVF9BfEtfQUxUX0J8S19BTFRfQ3xLX0FMVF9EfEtfQUxUX0V8S19BTFRfRnxLX0FMVF9HfEtfQUxUX0d8S19BTFRfSHwiKwogICAgICAiS19BTFRfSXxLX0FMVF9KfEtfQUxUX0t8S19BTFRfTHxLX0FMVF9NfEtfQUxUX058S19BTFRfw5F8S19BTFRfT3xLX0FMVF9QfCIrCiAgICAgICJLX0FMVF9RfEtfQUxUX1J8S19BTFRfU3xLX0FMVF9UfEtfQUxUX1V8S19BTFRfVnxLX0FMVF9XfEtfQUxUX1h8S19BTFRfWXxLX0FMVF9afCIrCiAgICAgICJLX0FMVF8wfEtfQUxUXzF8S19BTFRfMnxLX0FMVF8zfEtfQUxUXzR8S19BTFRfNXxLX0FMVF82fEtfQUxUXzd8S19BTFRfOHxLX0FMVF85fCIrCiAgICAgICJLX0FMVF9GMXxLX0FMVF9GMnxLX0FMVF9GM3xLX0FMVF9GNHxLX0FMVF9GNXxLX0FMVF9GNnxLX0FMVF9GN3xLX0FMVF9GOHwiKwogICAgICAiS19BTFRfRjl8S19BTFRfRjEwfEtfQUxUX0YxMXxLX0FMVF9GMTJ8IisKICAgICAgIktfQUxUX1VQfEtfQUxUX0RPV058S19BTFRfTEVGVHxLX0FMVF9SSUdIVHxLX0FMVF9SRVRVUk58S19BTFRfQkFDS1NQQUNFfCIrCiAgICAgICJLX0FMVF9UQUJ8S19BTFRfU1BBQ0V8S19BTFRfRVNDQVBFIisKCiAgICAgICJLX1NISUZUX0F8S19TSElGVF9CfEtfU0hJRlRfQ3xLX1NISUZUX0R8S19TSElGVF9FfEtfU0hJRlRfRnxLX1NISUZUX0d8IisKICAgICAgIktfU0hJRlRfR3xLX1NISUZUX0h8S19TSElGVF9JfEtfU0hJRlRfSnxLX1NISUZUX0t8S19TSElGVF9MfEtfU0hJRlRfTXwiKwogICAgICAiS19TSElGVF9OfEtfU0hJRlRfw5F8S19TSElGVF9PfEtfU0hJRlRfUHxLX1NISUZUX1F8S19TSElGVF9SfEtfU0hJRlRfU3wiKwogICAgICAiS19TSElGVF9UfEtfU0hJRlRfVXxLX1NISUZUX1Z8S19TSElGVF9XfEtfU0hJRlRfWHxLX1NISUZUX1l8S19TSElGVF9afCIrCiAgICAgICJLX1NISUZUXzB8S19TSElGVF8xfEtfU0hJRlRfMnxLX1NISUZUXzN8S19TSElGVF80fEtfU0hJRlRfNXxLX1NISUZUXzZ8IisKICAgICAgIktfU0hJRlRfN3xLX1NISUZUXzh8S19TSElGVF85fCIrCiAgICAgICJLX1NISUZUX0YxfEtfU0hJRlRfRjJ8S19TSElGVF9GM3xLX1NISUZUX0Y0fEtfU0hJRlRfRjV8S19TSElGVF9GNnwiKwogICAgICAiS19TSElGVF9GN3xLX1NISUZUX0Y4fEtfU0hJRlRfRjl8S19TSElGVF9GMTB8S19TSElGVF9GMTF8S19TSElGVF9GMTJ8IisKICAgICAgIktfU0hJRlRfVVB8S19TSElGVF9ET1dOfEtfU0hJRlRfTEVGVHxLX1NISUZUX1JJR0hUfEtfU0hJRlRfUkVUVVJOfCIrCiAgICAgICJLX1NISUZUX0JBQ0tTUEFDRXxLX1NISUZUX1RBQnxLX1NISUZUX1NQQUNFfEtfU0hJRlRfRVNDQVBFIisKCiAgICAgICJLX0NUUkxfQUxUX0F8S19DVFJMX0FMVF9CfEtfQ1RSTF9BTFRfQ3xLX0NUUkxfQUxUX0R8S19DVFJMX0FMVF9FfCIrCiAgICAgICJLX0NUUkxfQUxUX0Z8S19DVFJMX0FMVF9HfEtfQ1RSTF9BTFRfR3xLX0NUUkxfQUxUX0h8S19DVFJMX0FMVF9JfCIrCiAgICAgICJLX0NUUkxfQUxUX0p8S19DVFJMX0FMVF9LfEtfQ1RSTF9BTFRfTHxLX0NUUkxfQUxUX018S19DVFJMX0FMVF9OfCIrCiAgICAgICJLX0NUUkxfQUxUX8ORfEtfQ1RSTF9BTFRfT3xLX0NUUkxfQUxUX1B8S19DVFJMX0FMVF9RfEtfQ1RSTF9BTFRfUnwiKwogICAgICAiS19DVFJMX0FMVF9TfEtfQ1RSTF9BTFRfVHxLX0NUUkxfQUxUX1V8S19DVFJMX0FMVF9WfEtfQ1RSTF9BTFRfV3wiKwogICAgICAiS19DVFJMX0FMVF9YfEtfQ1RSTF9BTFRfWXxLX0NUUkxfQUxUX1p8IisKICAgICAgIktfQ1RSTF9BTFRfMHxLX0NUUkxfQUxUXzF8S19DVFJMX0FMVF8yfEtfQ1RSTF9BTFRfM3xLX0NUUkxfQUxUXzR8IisKICAgICAgIktfQ1RSTF9BTFRfNXxLX0NUUkxfQUxUXzZ8S19DVFJMX0FMVF83fEtfQ1RSTF9BTFRfOHxLX0NUUkxfQUxUXzl8IisKICAgICAgIktfQ1RSTF9BTFRfRjF8S19DVFJMX0FMVF9GMnxLX0NUUkxfQUxUX0YzfEtfQ1RSTF9BTFRfRjR8S19DVFJMX0FMVF9GNXwiKwogICAgICAiS19DVFJMX0FMVF9GNnxLX0NUUkxfQUxUX0Y3fEtfQ1RSTF9BTFRfRjh8S19DVFJMX0FMVF9GOXxLX0NUUkxfQUxUX0YxMHwiKwogICAgICAiS19DVFJMX0FMVF9GMTF8S19DVFJMX0FMVF9GMTJ8IisKICAgICAgIktfQ1RSTF9BTFRfVVB8S19DVFJMX0FMVF9ET1dOfEtfQ1RSTF9BTFRfTEVGVHxLX0NUUkxfQUxUX1JJR0hUfCIrCiAgICAgICJLX0NUUkxfQUxUX1JFVFVSTnxLX0NUUkxfQUxUX0JBQ0tTUEFDRXxLX0NUUkxfQUxUX1RBQnxLX0NUUkxfQUxUX1NQQUNFfEtfQ1RSTF9BTFRfRVNDQVBFIisKCiAgICAgICJLX0NUUkxfU0hJRlRfQXxLX0NUUkxfU0hJRlRfQnxLX0NUUkxfU0hJRlRfQ3xLX0NUUkxfU0hJRlRfRHxLX0NUUkxfU0hJRlRfRXwiKwogICAgICAiS19DVFJMX1NISUZUX0Z8S19DVFJMX1NISUZUX0d8S19DVFJMX1NISUZUX0d8S19DVFJMX1NISUZUX0h8S19DVFJMX1NISUZUX0l8IisKICAgICAgIktfQ1RSTF9TSElGVF9KfEtfQ1RSTF9TSElGVF9LfEtfQ1RSTF9TSElGVF9MfEtfQ1RSTF9TSElGVF9NfEtfQ1RSTF9TSElGVF9OfCIrCiAgICAgICJLX0NUUkxfU0hJRlRfw5F8S19DVFJMX1NISUZUX098S19DVFJMX1NISUZUX1B8S19DVFJMX1NISUZUX1F8S19DVFJMX1NISUZUX1J8IisKICAgICAgIktfQ1RSTF9TSElGVF9TfEtfQ1RSTF9TSElGVF9UfEtfQ1RSTF9TSElGVF9VfEtfQ1RSTF9TSElGVF9WfEtfQ1RSTF9TSElGVF9XfCIrCiAgICAgICJLX0NUUkxfU0hJRlRfWHxLX0NUUkxfU0hJRlRfWXxLX0NUUkxfU0hJRlRfWnwiKwogICAgICAiS19DVFJMX1NISUZUXzB8S19DVFJMX1NISUZUXzF8S19DVFJMX1NISUZUXzJ8S19DVFJMX1NISUZUXzN8S19DVFJMX1NISUZUXzR8IisKICAgICAgIktfQ1RSTF9TSElGVF81fEtfQ1RSTF9TSElGVF82fEtfQ1RSTF9TSElGVF83fEtfQ1RSTF9TSElGVF84fEtfQ1RSTF9TSElGVF85fCIrCiAgICAgICJLX0NUUkxfU0hJRlRfRjF8S19DVFJMX1NISUZUX0YyfEtfQ1RSTF9TSElGVF9GM3xLX0NUUkxfU0hJRlRfRjR8IisKICAgICAgIktfQ1RSTF9TSElGVF9GNXxLX0NUUkxfU0hJRlRfRjZ8S19DVFJMX1NISUZUX0Y3fEtfQ1RSTF9TSElGVF9GOHwiKwogICAgICAiS19DVFJMX1NISUZUXzl8S19DVFJMX1NISUZUXzEwfEtfQ1RSTF9TSElGVF8xMXxLX0NUUkxfU0hJRlRfMTJ8IisKICAgICAgIktfQ1RSTF9TSElGVF9VUHxLX0NUUkxfU0hJRlRfRE9XTnxLX0NUUkxfU0hJRlRfTEVGVHxLX0NUUkxfU0hJRlRfUklHSFR8IisKICAgICAgIktfQ1RSTF9TSElGVF9SRVRVUk58S19DVFJMX1NISUZUX0JBQ0tTUEFDRXxLX0NUUkxfU0hJRlRfVEFCfCIrCiAgICAgICJLX0NUUkxfU0hJRlRfU1BBQ0V8S19DVFJMX1NISUZUX0VTQ0FQRSIrCgogICAgICAiS19BTFRfU0hJRlRfQXxLX0FMVF9TSElGVF9CfEtfQUxUX1NISUZUX0N8S19BTFRfU0hJRlRfRHxLX0FMVF9TSElGVF9FfCIrCiAgICAgICJLX0FMVF9TSElGVF9GfEtfQUxUX1NISUZUX0d8S19BTFRfU0hJRlRfR3xLX0FMVF9TSElGVF9IfEtfQUxUX1NISUZUX0l8IisKICAgICAgIktfQUxUX1NISUZUX0p8S19BTFRfU0hJRlRfS3xLX0FMVF9TSElGVF9MfEtfQUxUX1NISUZUX018S19BTFRfU0hJRlRfTnwiKwogICAgICAiS19BTFRfU0hJRlRfw5F8S19BTFRfU0hJRlRfT3xLX0FMVF9TSElGVF9QfEtfQUxUX1NISUZUX1F8S19BTFRfU0hJRlRfUnwiKwogICAgICAiS19BTFRfU0hJRlRfU3xLX0FMVF9TSElGVF9UfEtfQUxUX1NISUZUX1V8S19BTFRfU0hJRlRfVnxLX0FMVF9TSElGVF9XfCIrCiAgICAgICJLX0FMVF9TSElGVF9YfEtfQUxUX1NISUZUX1l8S19BTFRfU0hJRlRfWnwiKwogICAgICAiS19BTFRfU0hJRlRfMHxLX0FMVF9TSElGVF8xfEtfQUxUX1NISUZUXzJ8S19BTFRfU0hJRlRfM3xLX0FMVF9TSElGVF80fCIrCiAgICAgICJLX0FMVF9TSElGVF81fEtfQUxUX1NISUZUXzZ8S19BTFRfU0hJRlRfN3xLX0FMVF9TSElGVF84fEtfQUxUX1NISUZUXzl8IisKICAgICAgIktfQUxUX1NISUZUX0YxfEtfQUxUX1NISUZUX0YyfEtfQUxUX1NISUZUX0YzfEtfQUxUX1NISUZUX0Y0fCIrCiAgICAgICJLX0FMVF9TSElGVF9GNXxLX0FMVF9TSElGVF9GNnxLX0FMVF9TSElGVF9GN3xLX0FMVF9TSElGVF9GOHwiKwogICAgICAiS19BTFRfU0hJRlRfOXxLX0FMVF9TSElGVF8xMHxLX0FMVF9TSElGVF8xMXxLX0FMVF9TSElGVF8xMnwiKwogICAgICAiS19BTFRfU0hJRlRfVVB8S19BTFRfU0hJRlRfRE9XTnxLX0FMVF9TSElGVF9MRUZUfEtfQUxUX1NISUZUX1JJR0hUfCIrCiAgICAgICJLX0FMVF9TSElGVF9SRVRVUk58S19BTFRfU0hJRlRfQkFDS1NQQUNFfEtfQUxUX1NISUZUX1RBQnxLX0FMVF9TSElGVF9TUEFDRXwiKwogICAgICAiS19BTFRfU0hJRlRfRVNDQVBFIisKCiAgICAgICJLX0NUUkxfQUxUX1NISUZUX0F8S19DVFJMX0FMVF9TSElGVF9CfEtfQ1RSTF9BTFRfU0hJRlRfQ3xLX0NUUkxfQUxUX1NISUZUX0R8IisKICAgICAgIktfQ1RSTF9BTFRfU0hJRlRfRXxLX0NUUkxfQUxUX1NISUZUX0Z8S19DVFJMX0FMVF9TSElGVF9HfEtfQ1RSTF9BTFRfU0hJRlRfR3wiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF9IfEtfQ1RSTF9BTFRfU0hJRlRfSXxLX0NUUkxfQUxUX1NISUZUX0p8S19DVFJMX0FMVF9TSElGVF9LfCIrCiAgICAgICJLX0NUUkxfQUxUX1NISUZUX0x8S19DVFJMX0FMVF9TSElGVF9NfEtfQ1RSTF9BTFRfU0hJRlRfTnxLX0NUUkxfQUxUX1NISUZUX8ORfCIrCiAgICAgICJLX0NUUkxfQUxUX1NISUZUX098S19DVFJMX0FMVF9TSElGVF9QfEtfQ1RSTF9BTFRfU0hJRlRfUXxLX0NUUkxfQUxUX1NISUZUX1J8IisKICAgICAgIktfQ1RSTF9BTFRfU0hJRlRfU3xLX0NUUkxfQUxUX1NISUZUX1R8S19DVFJMX0FMVF9TSElGVF9VfEtfQ1RSTF9BTFRfU0hJRlRfVnwiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF9XfEtfQ1RSTF9BTFRfU0hJRlRfWHxLX0NUUkxfQUxUX1NISUZUX1l8S19DVFJMX0FMVF9TSElGVF9afCIrCiAgICAgICJLX0NUUkxfQUxUX1NISUZUXzB8S19DVFJMX0FMVF9TSElGVF8xfEtfQ1RSTF9BTFRfU0hJRlRfMnxLX0NUUkxfQUxUX1NISUZUXzN8IisKICAgICAgIktfQ1RSTF9BTFRfU0hJRlRfNHxLX0NUUkxfQUxUX1NISUZUXzV8S19DVFJMX0FMVF9TSElGVF82fEtfQ1RSTF9BTFRfU0hJRlRfN3wiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF84fEtfQ1RSTF9BTFRfU0hJRlRfOXwiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF9GMXxLX0NUUkxfQUxUX1NISUZUX0YyfEtfQ1RSTF9BTFRfU0hJRlRfRjN8S19DVFJMX0FMVF9TSElGVF9GNHwiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF9GNXxLX0NUUkxfQUxUX1NISUZUX0Y2fEtfQ1RSTF9BTFRfU0hJRlRfRjd8S19DVFJMX0FMVF9TSElGVF9GOHwiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF9GOXxLX0NUUkxfQUxUX1NISUZUX0YxMHxLX0NUUkxfQUxUX1NISUZUX0YxMXxLX0NUUkxfQUxUX1NISUZUX0YxMnwiKwogICAgICAiS19DVFJMX0FMVF9TSElGVF9VUHxLX0NUUkxfQUxUX1NISUZUX0RPV058S19DVFJMX0FMVF9TSElGVF9MRUZUfEtfQ1RSTF9BTFRfU0hJRlRfUklHSFR8IisKICAgICAgIktfQ1RSTF9BTFRfU0hJRlRfUkVUVVJOfEtfQ1RSTF9BTFRfU0hJRlRfQkFDS1NQQUNFfEtfQ1RSTF9BTFRfU0hJRlRfVEFCfCIrCiAgICAgICJLX0NUUkxfQUxUX1NISUZUX1NQQUNFfEtfQ1RSTF9BTFRfU0hJRlRfRVNDQVBFIgogIH07CgogIHZhciBvcGVyYXRpb25zID0gewogICAgY29tbWFuZHM6ICI6PSIsCiAgICBleHByZXNzaW9uczogewogICAgICBudW1lcmljOiAiXFwrfFxcLXxcXCp8XFxefGRpdnxtb2QiLAogICAgICBjb21wYXJpc29uOiAiPj18PD18PT18XFwvPXw+fDwiLAogICAgICBib29sZWFuOiAiXFx8XFx8fCYmfG5vdCIsCiAgICAgIG90aGVyOiAiXFwrXFwrfDxcXC18XFxbfFxcXXxcXF98XFwtPiIKICAgIH0KICB9OwoKICB2YXIgY29tbWVudHMgPSB7CiAgICBsaW5lOiB7CiAgICAgIGRvdWJsZV9zbGFzaDogIlxcL1xcLy4qJCIsCiAgICAgIGRvdWJsZV9kYXNoOiAiXFwtXFwtLiokIiwKICAgICAgbnVtYmVyX3NpZ246ICIjLiokIgogICAgfSwKICAgIGJsb2NrOiB7IHN0YXJ0OiAiXFwvXFwqIiwgZW5kOiAiXFwqXFwvIiB9LAogICAgYmxvY2tfYWx0OiB7IHN0YXJ0OiAiXFx7XFwtIiwgZW5kOiAiXFwtXFx9IiB9CiAgfTsKCiAgdGhpcy4kcnVsZXMgPSB7CiAgICAic3RhcnQiIDogWwogICAgICB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5saW5lLmRvdWJsZS1zbGFzaC5nb2JzdG9uZXMiLAogICAgICAgIHJlZ2V4IDogY29tbWVudHMubGluZS5kb3VibGVfc2xhc2gKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogImNvbW1lbnQubGluZS5kb3VibGUtZGFzaC5nb2JzdG9uZXMiLAogICAgICAgIHJlZ2V4IDogY29tbWVudHMubGluZS5kb3VibGVfZGFzaAogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5saW5lLm51bWJlci1zaWduLmdvYnN0b25lcyIsCiAgICAgICAgcmVnZXggOiBjb21tZW50cy5saW5lLm51bWJlcl9zaWduCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmJsb2NrLmRhc2gtYXN0ZXJpc2MuZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IGNvbW1lbnRzLmJsb2NrLnN0YXJ0LAogICAgICAgIG5leHQgOiAiYmxvY2tfY29tbWVudF9lbmQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmJsb2NrLmJyYWNlLWRhc2guZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IGNvbW1lbnRzLmJsb2NrX2FsdC5zdGFydCwKICAgICAgICBuZXh0IDogImJsb2NrX2NvbW1lbnRfYWx0X2VuZCIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMuZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IHZhbHVlcy5udW1iZXJzCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVvdGVkLmRvdWJsZS5nb2JzdG9uZXMiLAogICAgICAgIHJlZ2V4IDogdmFsdWVzLnN0cmluZ3MKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3Iub3RoZXIuZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IG9wZXJhdGlvbnMuZXhwcmVzc2lvbnMub3RoZXIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IubnVtZXJpYy5nb2JzdG9uZXMiLAogICAgICAgIHJlZ2V4IDogb3BlcmF0aW9ucy5leHByZXNzaW9ucy5udW1lcmljCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmNvbXBhcmUuZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IG9wZXJhdGlvbnMuZXhwcmVzc2lvbnMuY29tcGFyaXNvbgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5ib29sZWFuLmdvYnN0b25lcyIsCiAgICAgICAgcmVnZXggOiBvcGVyYXRpb25zLmV4cHJlc3Npb25zLmJvb2xlYW4KICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAgICJzdG9yYWdlLnR5cGUuZGVmaW5pdGlvbnMuZ29ic3RvbmVzIjogZGVmaW5pdGlvbnMuc3RhbmRhcmQsCiAgICAgICAgICAic3RvcmFnZS50eXBlLnR5cGVzLmdvYnN0b25lcyI6IGRlZmluaXRpb25zLnR5cGUsCiAgICAgICAgICAia2V5d29yZC5jb250cm9sLmNvbW1hbmRzLnJlcGV0aXRpb25zLmdvYnN0b25lcyI6IGNvbnRyb2wuY29tbWFuZHMucmVwZXRpdGlvbnMsCiAgICAgICAgICAia2V5d29yZC5jb250cm9sLmNvbW1hbmRzLmFsdGVybmF0aXZlcy5nb2JzdG9uZXMiOiBjb250cm9sLmNvbW1hbmRzLmFsdGVybmF0aXZlcywKICAgICAgICAgICJrZXl3b3JkLmNvbnRyb2wuZXhwcmVzc2lvbnMuYWx0ZXJuYXRpdmVzLmdvYnN0b25lcyI6IGNvbnRyb2wuZXhwcmVzc2lvbnMuYWx0ZXJuYXRpdmVzLAogICAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmNvbG9ycy5nb2JzdG9uZXMiOnZhbHVlcy5jb2xvcnMsCiAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuY2FyZGluYWxzLmdvYnN0b25lcyI6IHZhbHVlcy5jYXJkaW5hbHMsCiAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbi5nb2JzdG9uZXMiOiB2YWx1ZXMuYm9vbGVhbnMsCiAgICAgICAgICAic3VwcG9ydC5mdW5jdGlvbi5nb2JzdG9uZXMiOiBwcmltaXRpdmVzLmNvbW1hbmRzLAogICAgICAgICAgInN1cHBvcnQudmFyaWFibGUuZ29ic3RvbmVzIjogcHJpbWl0aXZlcy5leHByZXNzaW9ucywKICAgICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZS5nb2JzdG9uZXMiOiBwcmltaXRpdmVzLmtleXMKICAgICAgfSwgImlkZW50aWZpZXIuZ29ic3RvbmVzIiksCiAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiAiY29tbWEuZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6ICIsIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiAic2VtaWNvbG9uLmdvYnN0b25lcyIsCiAgICAgICAgcmVnZXggOiAiOyIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogImxwYXJlbiIsCiAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6ICJycGFyZW4iLAogICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICB9CiAgICBdLAogICAgImJsb2NrX2NvbW1lbnRfZW5kIjogW3sKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmJsb2NrLmRhc2gtYXN0ZXJpc2MuZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IGNvbW1lbnRzLmJsb2NrLmVuZCwKICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICB9LCB7CiAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuYmxvY2suZGFzaC1hc3RlcmlzYy5nb2JzdG9uZXMiCiAgICAgIH0KICAgIF0sCiAgICAiYmxvY2tfY29tbWVudF9hbHRfZW5kIjogW3sKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmJsb2NrLmJyYWNlLWRhc2guZ29ic3RvbmVzIiwKICAgICAgICByZWdleCA6IGNvbW1lbnRzLmJsb2NrX2FsdC5lbmQsCiAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgfSwgewogICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50LmJsb2NrLmJyYWNlLWRhc2guZ29ic3RvbmVzIgogICAgICB9CiAgICBdCiAgfTsKfTsKCm9vcC5pbmhlcml0cyhHb2JzdG9uZXNIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuR29ic3RvbmVzSGlnaGxpZ2h0UnVsZXMgPSBHb2JzdG9uZXNIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2dvYnN0b25lcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2dvYnN0b25lc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cykgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgR29ic3RvbmVzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2dvYnN0b25lc19oaWdobGlnaHRfcnVsZXMiKS5Hb2JzdG9uZXNIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBKYXZhU2NyaXB0TW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEdvYnN0b25lc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEphdmFTY3JpcHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9nb2JzdG9uZXMiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9nb2JzdG9uZXMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-golang.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9nb2xhbmdfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CiAgICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCiAgICB2YXIgR29sYW5nSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgICAgICJlbHNlfGJyZWFrfGNhc2V8cmV0dXJufGdvdG98aWZ8Y29uc3R8c2VsZWN0fCIgKwogICAgICAgICAgICAiY29udGludWV8c3RydWN0fGRlZmF1bHR8c3dpdGNofGZvcnxyYW5nZXwiICsKICAgICAgICAgICAgImZ1bmN8aW1wb3J0fHBhY2thZ2V8Y2hhbnxkZWZlcnxmYWxsdGhyb3VnaHxnb3xpbnRlcmZhY2V8bWFwfHJhbmdlfCIgKwogICAgICAgICAgICAic2VsZWN0fHR5cGV8dmFyIgogICAgICAgICk7CiAgICAgICAgdmFyIGJ1aWx0aW5UeXBlcyA9ICgKICAgICAgICAgICAgInN0cmluZ3x1aW50OHx1aW50MTZ8dWludDMyfHVpbnQ2NHxpbnQ4fGludDE2fGludDMyfGludDY0fGZsb2F0MzJ8IiArCiAgICAgICAgICAgICJmbG9hdDY0fGNvbXBsZXg2NHxjb21wbGV4MTI4fGJ5dGV8cnVuZXx1aW50fGludHx1aW50cHRyfGJvb2x8ZXJyb3IiCiAgICAgICAgKTsKICAgICAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAgICAgIm5ld3xjbG9zZXxjYXB8Y29weXxwYW5pY3xwYW5pY2xufHByaW50fHByaW50bG58bGVufG1ha2V8ZGVsZXRlfHJlYWx8cmVjb3ZlcnxpbWFnfGFwcGVuZCIKICAgICAgICApOwogICAgICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKCJuaWx8dHJ1ZXxmYWxzZXxpb3RhIik7CgogICAgICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICAgICAic3VwcG9ydC50eXBlIjogYnVpbHRpblR5cGVzCiAgICAgICAgfSwgIiIpOwogICAgICAgIAogICAgICAgIHZhciBzdHJpbmdFc2NhcGVSZSA9ICJcXFxcKD86WzAtN117M318eFxcaHsyfXx1ezR9fFVcXGh7Nn18W2FiZm5ydHYnXCJcXFxcXSkiLnJlcGxhY2UoL1xcaC9nLCAiW2EtZkEtRlxcZF0iKTsKCiAgICAgICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuc3RhcnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIoPzpbXiJcXF18XFwuKSo/Ii8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyByYXcKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdgJywKICAgICAgICAgICAgICAgICAgICBuZXh0IDogImJxc3RyaW5nIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBydW5lCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/OlteXFwnXHVEODAwLVx1REJGRl18W1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdfCIgKyBzdHJpbmdFc2NhcGVSZS5yZXBsYWNlKCciJywgJycpICArICIpJyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiMFt4WF1bMC05YS1mQS1GXStcXGIiIAogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuYykoXFxzKykoW2EtekEtWl8kXVthLXpBLVowLTlfJF0qKVxcYiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsW3ZhbC5sZW5ndGggLSAxXSA9PSAiKCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGtleXdvcmRNYXBwZXIodmFsLnNsaWNlKDAsIC0xKSkgfHwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5d29yZE1hcHBlcih2YWwpIHx8ICJpZGVudGlmaWVyIjsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYlxcKD8iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PXw9fCE9fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj0iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJicXN0cmluZyIgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdgJywKICAgICAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICB9OwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7CiAgICB9OwogICAgb29wLmluaGVyaXRzKEdvbGFuZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKICAgIGV4cG9ydHMuR29sYW5nSGlnaGxpZ2h0UnVsZXMgPSBHb2xhbmdIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2dvbGFuZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2dvbGFuZ19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEdvbGFuZ0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9nb2xhbmdfaGlnaGxpZ2h0X3J1bGVzIikuR29sYW5nSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEdvbGFuZ0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsvL2VuZCBnZXROZXh0TGluZUluZGVudAoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9nb2xhbmciOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9nb2xhbmciXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-graphqlschema.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9ncmFwaHFsc2NoZW1hX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEdyYXBoUUxTY2hlbWFIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgInR5cGV8aW50ZXJmYWNlfHVuaW9ufGVudW18c2NoZW1hfGlucHV0fGltcGxlbWVudHN8ZXh0ZW5kc3xzY2FsYXIiCiAgICApOwoKICAgIHZhciBkYXRhVHlwZXMgPSAoCiAgICAgICJJbnR8RmxvYXR8U3RyaW5nfElEfEJvb2xlYW4iCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJzdG9yYWdlLnR5cGUiOiBkYXRhVHlwZXMKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICByZWdleCA6ICIjLiokIgogICAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgIH0sIHsKICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICB9IF0KICAgIH07CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoR3JhcGhRTFNjaGVtYUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5HcmFwaFFMU2NoZW1hSGlnaGxpZ2h0UnVsZXMgPSBHcmFwaFFMU2NoZW1hSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZ3JhcGhxbHNjaGVtYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2dyYXBocWxzY2hlbWFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBHcmFwaFFMU2NoZW1hSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2dyYXBocWxzY2hlbWFfaGlnaGxpZ2h0X3J1bGVzIikuR3JhcGhRTFNjaGVtYUhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEdyYXBoUUxTY2hlbWFIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9ncmFwaHFsc2NoZW1hIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvZ3JhcGhxbHNjaGVtYSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ncm9vdnlfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBHcm9vdnlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYXNzZXJ0fHdpdGh8YWJzdHJhY3R8Y29udGludWV8Zm9yfG5ld3xzd2l0Y2h8IiArCiAgICAgICAgImFzc2VydHxkZWZhdWx0fGdvdG98cGFja2FnZXxzeW5jaHJvbml6ZWR8IiArCiAgICAgICAgImJvb2xlYW58ZG98aWZ8cHJpdmF0ZXx0aGlzfCIgKwogICAgICAgICJicmVha3xkb3VibGV8aW1wbGVtZW50c3xwcm90ZWN0ZWR8dGhyb3d8IiArCiAgICAgICAgImJ5dGV8ZWxzZXxpbXBvcnR8cHVibGljfHRocm93c3wiICsKICAgICAgICAiY2FzZXxlbnVtfGluc3RhbmNlb2Z8cmV0dXJufHRyYW5zaWVudHwiICsKICAgICAgICAiY2F0Y2h8ZXh0ZW5kc3xpbnR8c2hvcnR8dHJ5fCIgKwogICAgICAgICJjaGFyfGZpbmFsfGludGVyZmFjZXxzdGF0aWN8dm9pZHwiICsKICAgICAgICAiY2xhc3N8ZmluYWxseXxsb25nfHN0cmljdGZwfHZvbGF0aWxlfCIgKwogICAgICAgICJkZWZ8ZmxvYXR8bmF0aXZlfHN1cGVyfHdoaWxlIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgKICAgICAgICAibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIgogICAgKTsKCiAgICB2YXIgbGFuZ0NsYXNzZXMgPSAoCiAgICAgICAgIkFic3RyYWN0TWV0aG9kRXJyb3J8QXNzZXJ0aW9uRXJyb3J8Q2xhc3NDaXJjdWxhcml0eUVycm9yfCIrCiAgICAgICAgIkNsYXNzRm9ybWF0RXJyb3J8RGVwcmVjYXRlZHxFbnVtQ29uc3RhbnROb3RQcmVzZW50RXhjZXB0aW9ufCIrCiAgICAgICAgIkV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvcnxJbGxlZ2FsQWNjZXNzRXJyb3J8IisKICAgICAgICAiSWxsZWdhbFRocmVhZFN0YXRlRXhjZXB0aW9ufEluc3RhbnRpYXRpb25FcnJvcnxJbnRlcm5hbEVycm9yfCIrCiAgICAgICAgIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXJyb3J8T3ZlcnJpZGV8UHJvY2Vzc3wiKwogICAgICAgICJQcm9jZXNzQnVpbGRlcnxTZWN1cml0eU1hbmFnZXJ8U3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnwiKwogICAgICAgICJTdXBwcmVzc1dhcm5pbmdzfFR5cGVOb3RQcmVzZW50RXhjZXB0aW9ufFVua25vd25FcnJvcnwiKwogICAgICAgICJVbnNhdGlzZmllZExpbmtFcnJvcnxVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yfFZlcmlmeUVycm9yfCIrCiAgICAgICAgIkluc3RhbnRpYXRpb25FeGNlcHRpb258SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnwiKwogICAgICAgICJBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb258IisKICAgICAgICAiTm9TdWNoRmllbGRFeGNlcHRpb258SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufE51bWJlckZvcm1hdEV4Y2VwdGlvbnwiKwogICAgICAgICJTZWN1cml0eUV4Y2VwdGlvbnxWb2lkfEluaGVyaXRhYmxlVGhyZWFkTG9jYWx8SWxsZWdhbFN0YXRlRXhjZXB0aW9ufCIrCiAgICAgICAgIkludGVycnVwdGVkRXhjZXB0aW9ufE5vU3VjaE1ldGhvZEV4Y2VwdGlvbnxJbGxlZ2FsQWNjZXNzRXhjZXB0aW9ufCIrCiAgICAgICAgIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufEVudW18U3RyaWN0TWF0aHxQYWNrYWdlfENvbXBpbGVyfCIrCiAgICAgICAgIlJlYWRhYmxlfFJ1bnRpbWV8U3RyaW5nQnVpbGRlcnxNYXRofEluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3J8IisKICAgICAgICAiTm9TdWNoTWV0aG9kRXJyb3J8VGhyZWFkTG9jYWx8UnVudGltZVBlcm1pc3Npb258QXJpdGhtZXRpY0V4Y2VwdGlvbnwiKwogICAgICAgICJOdWxsUG9pbnRlckV4Y2VwdGlvbnxMb25nfEludGVnZXJ8U2hvcnR8Qnl0ZXxEb3VibGV8TnVtYmVyfEZsb2F0fCIrCiAgICAgICAgIkNoYXJhY3RlcnxCb29sZWFufFN0YWNrVHJhY2VFbGVtZW50fEFwcGVuZGFibGV8U3RyaW5nQnVmZmVyfCIrCiAgICAgICAgIkl0ZXJhYmxlfFRocmVhZEdyb3VwfFJ1bm5hYmxlfFRocmVhZHxJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufCIrCiAgICAgICAgIlN0YWNrT3ZlcmZsb3dFcnJvcnxPdXRPZk1lbW9yeUVycm9yfFZpcnR1YWxNYWNoaW5lRXJyb3J8IisKICAgICAgICAiQXJyYXlTdG9yZUV4Y2VwdGlvbnxDbGFzc0Nhc3RFeGNlcHRpb258TGlua2FnZUVycm9yfCIrCiAgICAgICAgIk5vQ2xhc3NEZWZGb3VuZEVycm9yfENsYXNzTm90Rm91bmRFeGNlcHRpb258UnVudGltZUV4Y2VwdGlvbnwiKwogICAgICAgICJFeGNlcHRpb258VGhyZWFkRGVhdGh8RXJyb3J8VGhyb3dhYmxlfFN5c3RlbXxDbGFzc0xvYWRlcnwiKwogICAgICAgICJDbG9uZWFibGV8Q2xhc3N8Q2hhclNlcXVlbmNlfENvbXBhcmFibGV8U3RyaW5nfE9iamVjdCIKICAgICk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJ0aGlzIiwKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogbGFuZ0NsYXNzZXMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIiIicsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIicnJyIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFw/OnxcXD9cXC58XFwqXFwufDw9Pnw9fnw9PX58XFwuQHxcXCpcXC5AfFxcLiZ8YXN8aW58aXN8IXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzp1WzAtOUEtRmEtZl17NH18LnwkKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkW1x3XGRdKy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkXHtbXiJcfV0rXH0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInszLDV9JywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcuKz8nCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86dVswLTlBLUZhLWZdezR9fC58JCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInezMsNX0iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rPyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Cn07Cgpvb3AuaW5oZXJpdHMoR3Jvb3Z5SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkdyb292eUhpZ2hsaWdodFJ1bGVzID0gR3Jvb3Z5SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ncm9vdnkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9ncm9vdnlfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgR3Jvb3Z5SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2dyb292eV9oaWdobGlnaHRfcnVsZXMiKS5Hcm9vdnlIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBKYXZhU2NyaXB0TW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEdyb292eUhpZ2hsaWdodFJ1bGVzOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgSmF2YVNjcmlwdE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9ncm9vdnkiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9ncm9vdnkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-haml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY29uc3RhbnRPdGhlclN5bWJvbCA9IGV4cG9ydHMuY29uc3RhbnRPdGhlclN5bWJvbCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyLnN5bWJvbC5ydWJ5IiwgLy8gc3ltYm9sCiAgICByZWdleCA6ICJbOl0oPzpbQS1aYS16X118W0AkXSg/PVthLXpBLVowLTlfXSkpW2EtekEtWjAtOV9dKlshPT9dPyIKfTsKCnZhciBxU3RyaW5nID0gZXhwb3J0cy5xU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCn07Cgp2YXIgcXFTdHJpbmcgPSBleHBvcnRzLnFxU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCn07Cgp2YXIgdFN0cmluZyA9IGV4cG9ydHMudFN0cmluZyA9IHsKICAgIHRva2VuIDogInN0cmluZyIsIC8vIGJhY2t0aWNrIHN0cmluZwogICAgcmVnZXggOiAiW2BdKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1tgXSIKfTsKCnZhciBjb25zdGFudE51bWVyaWNIZXggPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0hleCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0oPzpbMC05YS1mQS1GXXxfKD89WzAtOWEtZkEtRl0pKSpcXGIiCn07Cgp2YXIgY29uc3RhbnROdW1lcmljRmxvYXQgPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0Zsb2F0ID0gewogICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICByZWdleCA6ICJbKy1dP1xcZCg/OlxcZHxfKD89XFxkKSkqKD86KD86XFwuXFxkKD86XFxkfF8oPz1cXGQpKSopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgp9OwoKdmFyIGluc3RhbmNlVmFyaWFibGUgPSBleHBvcnRzLmluc3RhbmNlVmFyaWFibGUgPSB7CiAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgp9OwoKdmFyIFJ1YnlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYm9ydHxBcnJheXxhc3NlcnR8YXNzZXJ0X2VxdWFsfGFzc2VydF9ub3RfZXF1YWx8YXNzZXJ0X3NhbWV8YXNzZXJ0X25vdF9zYW1lfCIgKwogICAgICAgICJhc3NlcnRfbmlsfGFzc2VydF9ub3RfbmlsfGFzc2VydF9tYXRjaHxhc3NlcnRfbm9fbWF0Y2h8YXNzZXJ0X2luX2RlbHRhfGFzc2VydF90aHJvd3N8IiArCiAgICAgICAgImFzc2VydF9yYWlzZXxhc3NlcnRfbm90aGluZ19yYWlzZWR8YXNzZXJ0X2luc3RhbmNlX29mfGFzc2VydF9raW5kX29mfGFzc2VydF9yZXNwb25kX3RvfCIgKwogICAgICAgICJhc3NlcnRfb3BlcmF0b3J8YXNzZXJ0X3NlbmR8YXNzZXJ0X2RpZmZlcmVuY2V8YXNzZXJ0X25vX2RpZmZlcmVuY2V8YXNzZXJ0X3JlY29nbml6ZXN8IiArCiAgICAgICAgImFzc2VydF9nZW5lcmF0ZXN8YXNzZXJ0X3Jlc3BvbnNlfGFzc2VydF9yZWRpcmVjdGVkX3RvfGFzc2VydF90ZW1wbGF0ZXxhc3NlcnRfc2VsZWN0fCIgKwogICAgICAgICJhc3NlcnRfc2VsZWN0X2VtYWlsfGFzc2VydF9zZWxlY3RfcmpzfGFzc2VydF9zZWxlY3RfZW5jb2RlZHxjc3Nfc2VsZWN0fGF0X2V4aXR8IiArCiAgICAgICAgImF0dHJ8YXR0cl93cml0ZXJ8YXR0cl9yZWFkZXJ8YXR0cl9hY2Nlc3NvcnxhdHRyX2FjY2Vzc2libGV8YXV0b2xvYWR8YmluZGluZ3xibG9ja19naXZlbj98Y2FsbGNjfCIgKwogICAgICAgICJjYWxsZXJ8Y2F0Y2h8Y2hvbXB8Y2hvbXAhfGNob3B8Y2hvcCF8ZGVmaW5lZD98ZGVsZXRlX3ZpYV9yZWRpcmVjdHxldmFsfGV4ZWN8ZXhpdHwiICsKICAgICAgICAiZXhpdCF8ZmFpbHxGbG9hdHxmbHVua3xmb2xsb3dfcmVkaXJlY3QhfGZvcmt8Zm9ybV9mb3J8Zm9ybV90YWd8Zm9ybWF0fGdldHN8Z2xvYmFsX3ZhcmlhYmxlc3xnc3VifCIgKwogICAgICAgICJnc3ViIXxnZXRfdmlhX3JlZGlyZWN0fGhvc3QhfGh0dHBzP3xodHRwcyF8aW5jbHVkZXxJbnRlZ2VyfGxhbWJkYXxsaW5rX3RvfCIgKwogICAgICAgICJsaW5rX3RvX3VubGVzc19jdXJyZW50fGxpbmtfdG9fZnVuY3Rpb258bGlua190b19yZW1vdGV8bG9hZHxsb2NhbF92YXJpYWJsZXN8bG9vcHxvcGVufG9wZW5fc2Vzc2lvbnwiICsKICAgICAgICAicHxwcmludHxwcmludGZ8cHJvY3xwdXRjfHB1dHN8cG9zdF92aWFfcmVkaXJlY3R8cHV0X3ZpYV9yZWRpcmVjdHxyYWlzZXxyYW5kfCIgKwogICAgICAgICJyYXd8cmVhZGxpbmV8cmVhZGxpbmVzfHJlZGlyZWN0P3xyZXF1ZXN0X3ZpYV9yZWRpcmVjdHxyZXF1aXJlfHNjYW58c2VsZWN0fCIgKwogICAgICAgICJzZXRfdHJhY2VfZnVuY3xzbGVlcHxzcGxpdHxzcHJpbnRmfHNyYW5kfFN0cmluZ3xzdHlsZXNoZWV0X2xpbmtfdGFnfHN5c2NhbGx8c3lzdGVtfHN1YnxzdWIhfHRlc3R8IiArCiAgICAgICAgInRocm93fHRyYWNlX3Zhcnx0cmFwfHVudHJhY2VfdmFyfGF0YW4yfGNvc3xleHB8ZnJleHB8bGRleHB8bG9nfGxvZzEwfHNpbnxzcXJ0fHRhbnwiICsKICAgICAgICAicmVuZGVyfGphdmFzY3JpcHRfaW5jbHVkZV90YWd8Y3NyZl9tZXRhX3RhZ3xsYWJlbF90YWd8dGV4dF9maWVsZF90YWd8c3VibWl0X3RhZ3xjaGVja19ib3hfdGFnfCIgKwogICAgICAgICJjb250ZW50X3RhZ3xyYWRpb19idXR0b25fdGFnfHRleHRfYXJlYV90YWd8cGFzc3dvcmRfZmllbGRfdGFnfGhpZGRlbl9maWVsZF90YWd8IiArCiAgICAgICAgImZpZWxkc19mb3J8c2VsZWN0X3RhZ3xvcHRpb25zX2Zvcl9zZWxlY3R8b3B0aW9uc19mcm9tX2NvbGxlY3Rpb25fZm9yX3NlbGVjdHxjb2xsZWN0aW9uX3NlbGVjdHwiICsKICAgICAgICAidGltZV96b25lX3NlbGVjdHxzZWxlY3RfZGF0ZXxzZWxlY3RfdGltZXxzZWxlY3RfZGF0ZXRpbWV8ZGF0ZV9zZWxlY3R8dGltZV9zZWxlY3R8ZGF0ZXRpbWVfc2VsZWN0fCIgKwogICAgICAgICJzZWxlY3RfeWVhcnxzZWxlY3RfbW9udGh8c2VsZWN0X2RheXxzZWxlY3RfaG91cnxzZWxlY3RfbWludXRlfHNlbGVjdF9zZWNvbmR8ZmlsZV9maWVsZF90YWd8IiArCiAgICAgICAgImZpbGVfZmllbGR8cmVzcG9uZF90b3xza2lwX2JlZm9yZV9maWx0ZXJ8YXJvdW5kX2ZpbHRlcnxhZnRlcl9maWx0ZXJ8dmVyaWZ5fCIgKwogICAgICAgICJwcm90ZWN0X2Zyb21fZm9yZ2VyeXxyZXNjdWVfZnJvbXxoZWxwZXJfbWV0aG9kfHJlZGlyZWN0X3RvfGJlZm9yZV9maWx0ZXJ8IiArCiAgICAgICAgInNlbmRfZGF0YXxzZW5kX2ZpbGV8dmFsaWRhdGVzX3ByZXNlbmNlX29mfHZhbGlkYXRlc191bmlxdWVuZXNzX29mfHZhbGlkYXRlc19sZW5ndGhfb2Z8IiArCiAgICAgICAgInZhbGlkYXRlc19mb3JtYXRfb2Z8dmFsaWRhdGVzX2FjY2VwdGFuY2Vfb2Z8dmFsaWRhdGVzX2Fzc29jaWF0ZWR8dmFsaWRhdGVzX2V4Y2x1c2lvbl9vZnwiICsKICAgICAgICAidmFsaWRhdGVzX2luY2x1c2lvbl9vZnx2YWxpZGF0ZXNfbnVtZXJpY2FsaXR5X29mfHZhbGlkYXRlc193aXRofHZhbGlkYXRlc19lYWNofCIgKwogICAgICAgICJhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfYmFzaWN8YXV0aGVudGljYXRlX29yX3JlcXVlc3Rfd2l0aF9odHRwX2RpZ2VzdHwiICsKICAgICAgICAiZmlsdGVyX3BhcmFtZXRlcl9sb2dnaW5nfG1hdGNofGdldHxwb3N0fHJlc291cmNlc3xyZWRpcmVjdHxzY29wZXxhc3NlcnRfcm91dGluZ3wiICsKICAgICAgICAidHJhbnNsYXRlfGxvY2FsaXplfGV4dHJhY3RfbG9jYWxlX2Zyb21fdGxkfGNhY2hlc19wYWdlfGV4cGlyZV9wYWdlfGNhY2hlc19hY3Rpb258ZXhwaXJlX2FjdGlvbnwiICsKICAgICAgICAiY2FjaGV8ZXhwaXJlX2ZyYWdtZW50fGV4cGlyZV9jYWNoZV9mb3J8b2JzZXJ2ZXxjYWNoZV9zd2VlcGVyfCIgKwogICAgICAgICJoYXNfbWFueXxoYXNfb25lfGJlbG9uZ3NfdG98aGFzX2FuZF9iZWxvbmdzX3RvX21hbnkiCiAgICApOwoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYWxpYXN8YW5kfEJFR0lOfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRlZmluZWR8ZG98ZWxzZXxlbHNpZnxFTkR8ZW5kfGVuc3VyZXwiICsKICAgICAgICAiX19GSUxFX198ZmluYWxseXxmb3J8Z2VtfGlmfGlufF9fTElORV9ffG1vZHVsZXxuZXh0fG5vdHxvcnxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8IiArCiAgICAgICAgInJlZG98cmVzY3VlfHJldHJ5fHJldHVybnxzdXBlcnx0aGVufHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgKICAgICAgICAidHJ1ZXxUUlVFfGZhbHNlfEZBTFNFfG5pbHxOSUx8QVJHRnxBUkdWfERBVEF8RU5WfFJVQllfUExBVEZPUk18UlVCWV9SRUxFQVNFX0RBVEV8IiArCiAgICAgICAgIlJVQllfVkVSU0lPTnxTVERFUlJ8U1RESU58U1RET1VUfFRPUExFVkVMX0JJTkRJTkciCiAgICApOwoKICAgIHZhciBidWlsdGluVmFyaWFibGVzID0gKAogICAgICAgICIkREVCVUd8JGRlZm91dHwkRklMRU5BTUV8JExPQURfUEFUSHwkU0FGRXwkc3RkaW58JHN0ZG91dHwkc3RkZXJyfCRWRVJCT1NFfCIgKwogICAgICAgICIkIXxyb290X3VybHxmbGFzaHxzZXNzaW9ufGNvb2tpZXN8cGFyYW1zfHJlcXVlc3R8cmVzcG9uc2V8bG9nZ2VyfHNlbGYiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy4ka2V5d29yZHMgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiBidWlsdGluVmFyaWFibGVzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIiAvLyBUT0RPIGlzIHRoaXMgYSByZW1uYW50IGZyb20ganMgbW9kZT8KICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJePWJlZ2luKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLmxwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5lbmQiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbmV4dFN0YXRlOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86W25zcnR2ZmJhZSciXFxdfGMufEMtLnxNLS4oPzpcXEMtLik/fFswLTddezN9fHhbXGRhLWZBLUZdezJ9fHVbXGRhLWZBLUZdezR9KS8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvI3svLAogICAgICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/Oltuc3J0dmZiYWUnIlxcXXxjLnxDLS58TS0uKD86XFxDLS4pP3xbMC03XXszfXx4W1xkYS1mQS1GXXsyfXx1W1xkYS1mQS1GXXs0fSkvCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4uc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyN7LywKICAgICAgICAgICAgICAgICAgICBwdXNoICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLycvLAogICAgICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXFxbJ1xcXS8KICAgICAgICAgICAgICAgIH0sICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJy8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH1dLAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIG5hbWVzcGFjZXMgYXJlbid0IHN5bWJvbHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjo6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICAgICAgICAgICAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmNsYXNzIiwgLy8gY2xhc3MgbmFtZQogICAgICAgICAgICAgICAgcmVnZXggOiAiW0EtWl1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY29uc3RhbnRPdGhlclN5bWJvbCwKICAgICAgICAgICAgY29uc3RhbnROdW1lcmljSGV4LAogICAgICAgICAgICBjb25zdGFudE51bWVyaWNGbG9hdCwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uc2VwYXJhdG9yLmtleS12YWx1ZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI9PiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAiaGVyZWRvYyIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHZhbHVlWzJdID09ICctJyA/ICJpbmRlbnRlZEhlcmVkb2MiIDogImhlcmVkb2MiOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzNdKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToiY29uc3RhbnQiLCB2YWx1ZTogdG9rZW5zWzFdfSwKICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6InN0cmluZyIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3VwcG9ydC5jbGFzcyIsIHZhbHVlOiB0b2tlbnNbM119LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s0XX0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8PC0/KShbJ1wiYF0/KShbXFx3XSspKFsnXCJgXT8pIiwKICAgICAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICAgICAgaGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogIGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJeICsiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dCA6IGZ1bmN0aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0YXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5jaGFyYWN0ZXIiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXEJcXD8uIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl49ZW5kKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoUnVieUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5SdWJ5SGlnaGxpZ2h0UnVsZXMgPSBSdWJ5SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9oYW1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBSdWJ5RXhwb3J0cyA9IHJlcXVpcmUoIi4vcnVieV9oaWdobGlnaHRfcnVsZXMiKTsKdmFyIFJ1YnlIaWdobGlnaHRSdWxlcyA9IFJ1YnlFeHBvcnRzLlJ1YnlIaWdobGlnaHRSdWxlczsKCnZhciBIYW1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmJsb2NrIiwgLy8gbXVsdGlsaW5lIEhUTUwgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXg6IC9eXC8kLywKICAgICAgICAgICAgICAgIG5leHQ6ICJjb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuYmxvY2siLCAvLyBtdWx0aWxpbmUgSEFNTCBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleDogL15cLSMkLywKICAgICAgICAgICAgICAgIG5leHQ6ICJjb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQubGluZSIsIC8vIEhUTUwgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXg6IC9cL1xzKi4qLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQubGluZSIsIC8vIEhBTUwgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXg6IC8tI1xzKi4qLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3RoZXIuZG9jdHlwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl4hISFcXHMqKD86W2EtekEtWjAtOS1fXSspPyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUnVieUV4cG9ydHMucVN0cmluZywKICAgICAgICAgICAgUnVieUV4cG9ydHMucXFTdHJpbmcsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLnRTdHJpbmcsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAibWV0YS50YWcuaGFtbCIsCiAgICAgICAgICAgICAgICByZWdleDogLyglW1x3OlwtXSspLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQuYXR0cmlidXRlLW5hbWUuY2xhc3MuaGFtbCIsCiAgICAgICAgICAgICAgICByZWdleDogL1wuW1x3LV0rLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQuYXR0cmlidXRlLW5hbWUuaWQuaGFtbCIsCiAgICAgICAgICAgICAgICByZWdleDogLyNbXHctXSsvLAogICAgICAgICAgICAgICAgbmV4dDogImVsZW1lbnRfY2xhc3MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLmNvbnN0YW50TnVtZXJpY0hleCwKICAgICAgICAgICAgUnVieUV4cG9ydHMuY29uc3RhbnROdW1lcmljRmxvYXQsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLmNvbnN0YW50T3RoZXJTeW1ib2wsCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogLz18LXx+LywKICAgICAgICAgICAgICAgIG5leHQ6ICJlbWJlZGRlZF9ydWJ5IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZWxlbWVudF9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmF0dHJpYnV0ZS1uYW1lLmNsYXNzLmhhbWwiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cLltcdy1dKy8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5zZWN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHsvLAogICAgICAgICAgICAgICAgbmV4dDogImVsZW1lbnRfYXR0cmlidXRlcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgUnVieUV4cG9ydHMuY29uc3RhbnRPdGhlclN5bWJvbCwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiR8KD8hXFwufCN8XFx7fFxcW3w9fC18fnxcXC9dKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJlbGVtZW50X2F0dHJpYnV0ZXMiOiBbCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLmNvbnN0YW50T3RoZXJTeW1ib2wsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLnFTdHJpbmcsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLnFxU3RyaW5nLAogICAgICAgICAgICBSdWJ5RXhwb3J0cy50U3RyaW5nLAogICAgICAgICAgICBSdWJ5RXhwb3J0cy5jb25zdGFudE51bWVyaWNIZXgsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLmNvbnN0YW50TnVtZXJpY0Zsb2F0LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnNlY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXg6IC8kfFx9LywKICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImVtYmVkZGVkX3J1YnkiOiBbCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLmNvbnN0YW50TnVtZXJpY0hleCwKICAgICAgICAgICAgUnVieUV4cG9ydHMuY29uc3RhbnROdW1lcmljRmxvYXQsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLmluc3RhbmNlVmFyaWFibGUsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLnFTdHJpbmcsCiAgICAgICAgICAgIFJ1YnlFeHBvcnRzLnFxU3RyaW5nLAogICAgICAgICAgICBSdWJ5RXhwb3J0cy50U3RyaW5nLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmNsYXNzIiwgLy8gY2xhc3MgbmFtZQogICAgICAgICAgICAgICAgcmVnZXggOiAiW0EtWl1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IG5ldyBSdWJ5SGlnaGxpZ2h0UnVsZXMoKS5nZXRLZXl3b3JkcygpLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OmRvfFxceykoPzogXFx8W158XStcXHwpPyQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJeJCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl4oPyEuKlxcfFxccyokKSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5ibG9jayIsCiAgICAgICAgICAgICAgICByZWdleDogL14kLywKICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmJsb2NrIiwgLy8gY29tbWVudCBzcGFubmluZyB0aGUgd2hvbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXg6IC9ccysuKi8KICAgICAgICAgICAgfQogICAgICAgIF0KCiAgICB9OwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIYW1sSGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkhhbWxIaWdobGlnaHRSdWxlcyA9IEhhbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2hhbWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9oYW1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSGFtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9oYW1sX2hpZ2hsaWdodF9ydWxlcyIpLkhhbWxIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBIYW1sSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICAKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2hhbWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9oYW1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-handlebars.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9oYW5kbGViYXJzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKZnVuY3Rpb24gcG9wMihjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICBzdGFjay5zcGxpY2UoMCwgMyk7CiAgICByZXR1cm4gc3RhY2suc2hpZnQoKSB8fCAic3RhcnQiOwp9CnZhciBIYW5kbGViYXJzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwogICAgdmFyIGhicyA9IHsKICAgICAgICByZWdleCA6ICIoPz17eykiLAogICAgICAgIHB1c2ggOiAiaGFuZGxlYmFycyIKICAgIH07CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy4kcnVsZXMpIHsKICAgICAgICB0aGlzLiRydWxlc1trZXldLnVuc2hpZnQoaGJzKTsKICAgIH0KICAgIHRoaXMuJHJ1bGVzLmhhbmRsZWJhcnMgPSBbewogICAgICAgIHRva2VuIDogImNvbW1lbnQuc3RhcnQiLAogICAgICAgIHJlZ2V4IDogInt7IS0tIiwKICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5lbmQiLAogICAgICAgICAgICByZWdleCA6ICItLX19IiwKICAgICAgICAgICAgbmV4dCA6IHBvcDIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgIH1dCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgcmVnZXggOiAie3shIiwKICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5lbmQiLAogICAgICAgICAgICByZWdleCA6ICJ9fSIsCiAgICAgICAgICAgIG5leHQgOiBwb3AyCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICB9XQogICAgfSwgewogICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLCAvLyB1bmVzY2FwZWQgdmFyaWFibGUKICAgICAgICByZWdleCA6ICJ7e3siLAogICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiAifX19IiwKICAgICAgICAgICAgbmV4dCA6IHBvcDIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKiIKICAgICAgICB9XQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZS5zdGFydCIsIC8vIGJlZ2luIHNlY3Rpb24KICAgICAgICByZWdleCA6ICJ7e1sjXFxeLyZdPyIsCiAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZS5lbmQiLAogICAgICAgICAgICByZWdleCA6ICJ9fSIsCiAgICAgICAgICAgIG5leHQgOiBwb3AyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSoiCiAgICAgICAgfV0KICAgIH1dOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIYW5kbGViYXJzSGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkhhbmRsZWJhcnNIaWdobGlnaHRSdWxlcyA9IEhhbmRsZWJhcnNIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgWG1sQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cjsKCnZhciBIdG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewoKICAgIFhtbEJlaGF2aW91ci5jYWxsKHRoaXMpOwoKfTsKCm9vcC5pbmhlcml0cyhIdG1sQmVoYXZpb3VyLCBYbWxCZWhhdmlvdXIpOwoKZXhwb3J0cy5IdG1sQmVoYXZpb3VyID0gSHRtbEJlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2hhbmRsZWJhcnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9oYW5kbGViYXJzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9odG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBIdG1sTW9kZSA9IHJlcXVpcmUoIi4vaHRtbCIpLk1vZGU7CnZhciBIYW5kbGViYXJzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2hhbmRsZWJhcnNfaGlnaGxpZ2h0X3J1bGVzIikuSGFuZGxlYmFyc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSHRtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2h0bWwiKS5IdG1sQmVoYXZpb3VyOwp2YXIgSHRtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2h0bWwiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEhhbmRsZWJhcnNIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBIdG1sQmVoYXZpb3VyKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgSHRtbE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICJ7eyEtLSIsIGVuZDogIi0tfX0ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2hhbmRsZWJhcnMiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9oYW5kbGViYXJzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9oYXNrZWxsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEhhc2tlbGxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0geyBzdGFydDoKICAgICAgIFsgeyB0b2tlbjoKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5lbnRpdHkuaGFza2VsbCcsCiAgICAgICAgICAgICAgJ2tleXdvcmQub3BlcmF0b3IuZnVuY3Rpb24uaW5maXguaGFza2VsbCcsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZW50aXR5Lmhhc2tlbGwnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoYCkoW2EtekEtWl9cJ10qPykoYCknLAogICAgICAgICAgIGNvbW1lbnQ6ICdJbiBjYXNlIHRoaXMgcmVnZXggc2VlbXMgdW51c3VhbCBmb3IgYW4gaW5maXggb3BlcmF0b3IsIG5vdGUgdGhhdCBIYXNrZWxsIGFsbG93cyBhbnkgb3JkaW5hcnkgZnVuY3Rpb24gYXBwbGljYXRpb24gKGVsZW0gNCBbMS4uMTBdKSB0byBiZSByZXdyaXR0ZW4gYXMgYW4gaW5maXggZXhwcmVzc2lvbiAoNCBgZWxlbWAgWzEuLjEwXSkuJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UudW5pdC5oYXNrZWxsJywgcmVnZXg6ICdcXChcXCknIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lbXB0eS1saXN0Lmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnXFxbXFxdJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vdGhlci5oYXNrZWxsJywKICAgICAgICAgICByZWdleDogJ1xcYihtb2R1bGV8c2lnbmF0dXJlKVxcYicsCiAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vdGhlci5oYXNrZWxsJywgcmVnZXg6ICdcXGJ3aGVyZVxcYicsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI21vZHVsZV9uYW1lJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNtb2R1bGVfZXhwb3J0cycgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnaW52YWxpZCcsIHJlZ2V4OiAnW2Etel0rJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5kZWNsYXJhdGlvbi5tb2R1bGUuaGFza2VsbCcgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm90aGVyLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiY2xhc3NcXGInLAogICAgICAgICAgIHB1c2g6CiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYndoZXJlXFxiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuY2xhc3MucHJlbHVkZS5oYXNrZWxsJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiKD86TW9uYWR8RnVuY3RvcnxFcXxPcmR8UmVhZHxTaG93fE51bXwoPzpGcmFjfFJhKXRpb25hbHxFbnVtfEJvdW5kZWR8UmVhbCg/OkZyYWN8RmxvYXQpP3xJbnRlZ3JhbHxGbG9hdGluZylcXGInIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2VudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3MuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1tBLVpdW0EtWmEtel9cJ10qJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICd2YXJpYWJsZS5vdGhlci5nZW5lcmljLXR5cGUuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYlthLXpdW2EtekEtWjAtOV9cJ10qXFxiJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5kZWNsYXJhdGlvbi5jbGFzcy5oYXNrZWxsJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGJpbnN0YW5jZVxcYicsCiAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vdGhlci5oYXNrZWxsJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxid2hlcmVcXGJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyN0eXBlX3NpZ25hdHVyZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZGVjbGFyYXRpb24uaW5zdGFuY2UuaGFza2VsbCcgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm90aGVyLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnaW1wb3J0JywKICAgICAgICAgICBwdXNoOgogICAgICAgICAgICBbIHsgdG9rZW46ICdtZXRhLmltcG9ydC5oYXNrZWxsJywgcmVnZXg6ICckfDt8XicsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuaGFza2VsbCcsIHJlZ2V4OiAncXVhbGlmaWVkfGFzfGhpZGluZycgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjbW9kdWxlX25hbWUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI21vZHVsZV9leHBvcnRzJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5pbXBvcnQuaGFza2VsbCcgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46IFsgJ2tleXdvcmQub3RoZXIuaGFza2VsbCcsICdtZXRhLmRlcml2aW5nLmhhc2tlbGwnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoZGVyaXZpbmcpKFxccypcXCgpJywKICAgICAgICAgICBwdXNoOgogICAgICAgICAgICBbIHsgdG9rZW46ICdtZXRhLmRlcml2aW5nLmhhc2tlbGwnLCByZWdleDogJ1xcKScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2VudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3MuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYltBLVpdW2EtekEtWl9cJ10qJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5kZXJpdmluZy5oYXNrZWxsJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpkZXJpdmluZ3x3aGVyZXxkYXRhfHR5cGV8Y2FzZXxvZnxsZXR8aW58bmV3dHlwZXxkZWZhdWx0KVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuaGFza2VsbCcsIHJlZ2V4OiAnXFxiaW5maXhbbHJdP1xcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5oYXNrZWxsJywKICAgICAgICAgICByZWdleDogJ1xcYig/OmRvfGlmfHRoZW58ZWxzZSlcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLmZsb2F0Lmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86WzAtOV0rXFwuWzAtOV0rKD86W2VFXVsrLV0/WzAtOV0rKT98WzAtOV0rW2VFXVsrLV0/WzAtOV0rKVxcYicsCiAgICAgICAgICAgY29tbWVudDogJ0Zsb2F0cyBhcmUgYWx3YXlzIGRlY2ltYWwnIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86WzAtOV0rfDAoPzpbeFhdWzAtOWEtZkEtRl0rfFtvT11bMC03XSspKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjoKICAgICAgICAgICAgWyAnbWV0YS5wcmVwcm9jZXNzb3IuYycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24ucHJlcHJvY2Vzc29yLmMnLAogICAgICAgICAgICAgICdtZXRhLnByZXByb2Nlc3Nvci5jJyBdLAogICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgjKShcXHMqXFx3KyknLAogICAgICAgICAgIGNvbW1lbnQ6ICdJbiBhZGRpdGlvbiB0byBIYXNrZWxsXCdzICJuYXRpdmUiIHN5bnRheCwgR0hDIHBlcm1pdHMgdGhlIEMgcHJlcHJvY2Vzc29yIHRvIGJlIHJ1biBvbiBhIHNvdXJjZSBmaWxlLicgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3ByYWdtYScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmhhc2tlbGwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcXFwoPzpOVUx8U09IfFNUWHxFVFh8RU9UfEVOUXxBQ0t8QkVMfEJTfEhUfExGfFZUfEZGfENSfFNPfFNJfERMRXxEQzF8REMyfERDM3xEQzR8TkFLfFNZTnxFVEJ8Q0FOfEVNfFNVQnxFU0N8RlN8R1N8UlN8VVN8U1B8REVMfFthYmZucnR2XFxcXFxcIlwnXFwmXSknIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUub2N0YWwuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcXFxvWzAtN10rfFxcXFx4WzAtOUEtRmEtZl0rfFxcXFxbMC05XSsnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuY29udHJvbC5oYXNrZWxsJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxeW0EtWkBcXFtcXF1cXFxcXFxeX10nIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5oYXNrZWxsJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjoKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uaGFza2VsbCcsCiAgICAgICAgICAgICAgJ3N0cmluZy5xdW90ZWQuc2luZ2xlLmhhc2tlbGwnLAogICAgICAgICAgICAgICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmhhc2tlbGwnLAogICAgICAgICAgICAgICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLm9jdGFsLmhhc2tlbGwnLAogICAgICAgICAgICAgICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmhleGFkZWNpbWFsLmhhc2tlbGwnLAogICAgICAgICAgICAgICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmNvbnRyb2wuaGFza2VsbCcsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5oYXNrZWxsJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFwnKSg/OihbXFwgLVxcW1xcXS1+XSl8KFxcXFwoPzpOVUx8U09IfFNUWHxFVFh8RU9UfEVOUXxBQ0t8QkVMfEJTfEhUfExGfFZUfEZGfENSfFNPfFNJfERMRXxEQzF8REMyfERDM3xEQzR8TkFLfFNZTnxFVEJ8Q0FOfEVNfFNVQnxFU0N8RlN8R1N8UlN8VVN8U1B8REVMfFthYmZucnR2XFxcXFxcIlwnXFwmXSkpfChcXFxcb1swLTddKyl8KFxcXFx4WzAtOUEtRmEtZl0rKXwoXFxeW0EtWkBcXFtcXF1cXFxcXFxeX10pKShcJyknIH0sCiAgICAgICAgIHsgdG9rZW46CiAgICAgICAgICAgIFsgJ21ldGEuZnVuY3Rpb24udHlwZS1kZWNsYXJhdGlvbi5oYXNrZWxsJywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uaGFza2VsbCcsCiAgICAgICAgICAgICAgJ21ldGEuZnVuY3Rpb24udHlwZS1kZWNsYXJhdGlvbi5oYXNrZWxsJywKICAgICAgICAgICAgICAna2V5d29yZC5vdGhlci5kb3VibGUtY29sb24uaGFza2VsbCcgXSwKICAgICAgICAgICByZWdleDogJ14oXFxzKikoW2Etel9dW2EtekEtWjAtOV9cJ10qfFxcKFt8ISUkK1xcLS4sPTwvPl0rXFwpKShcXHMqKSg6OiknLAogICAgICAgICAgIHB1c2g6CiAgICAgICAgICAgIFsgeyB0b2tlbjogJ21ldGEuZnVuY3Rpb24udHlwZS1kZWNsYXJhdGlvbi5oYXNrZWxsJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnJCcsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyN0eXBlX3NpZ25hdHVyZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZnVuY3Rpb24udHlwZS1kZWNsYXJhdGlvbi5oYXNrZWxsJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuY29uc3RhbnQuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpKdXN0fE5vdGhpbmd8TGVmdHxSaWdodHxUcnVlfEZhbHNlfExUfEVRfEdUfFxcKFxcKXxcXFtcXF0pXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQub3RoZXIuaGFza2VsbCcsIHJlZ2V4OiAnXFxiW0EtWl1cXHcqXFxiJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudHMnIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnByZWx1ZGUuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphYnN8YWNvc3xhY29zaHxhbGx8YW5kfGFueXxhcHBlbmRGaWxlfGFwcGx5TXxhc1R5cGVPZnxhc2lufGFzaW5ofGF0YW58YXRhbjJ8YXRhbmh8YnJlYWt8Y2F0Y2h8Y2VpbGluZ3xjb21wYXJlfGNvbmNhdHxjb25jYXRNYXB8Y29uc3R8Y29zfGNvc2h8Y3Vycnl8Y3ljbGV8ZGVjb2RlRmxvYXR8ZGl2fGRpdk1vZHxkcm9wfGRyb3BXaGlsZXxlbGVtfGVuY29kZUZsb2F0fGVudW1Gcm9tfGVudW1Gcm9tVGhlbnxlbnVtRnJvbVRoZW5Ub3xlbnVtRnJvbVRvfGVycm9yfGV2ZW58ZXhwfGV4cG9uZW50fGZhaWx8ZmlsdGVyfGZsaXB8ZmxvYXREaWdpdHN8ZmxvYXRSYWRpeHxmbG9hdFJhbmdlfGZsb29yfGZtYXB8Zm9sZGx8Zm9sZGwxfGZvbGRyfGZvbGRyMXxmcm9tRW51bXxmcm9tSW50ZWdlcnxmcm9tSW50ZWdyYWx8ZnJvbVJhdGlvbmFsfGZzdHxnY2R8Z2V0Q2hhcnxnZXRDb250ZW50c3xnZXRMaW5lfGhlYWR8aWR8aW5pdHxpbnRlcmFjdHxpb0Vycm9yfGlzRGVub3JtYWxpemVkfGlzSUVFRXxpc0luZmluaXRlfGlzTmFOfGlzTmVnYXRpdmVaZXJvfGl0ZXJhdGV8bGFzdHxsY218bGVuZ3RofGxleHxsaW5lc3xsb2d8bG9nQmFzZXxsb29rdXB8bWFwfG1hcE18bWFwTV98bWF4fG1heEJvdW5kfG1heGltdW18bWF5YmV8bWlufG1pbkJvdW5kfG1pbmltdW18bW9kfG5lZ2F0ZXxub3R8bm90RWxlbXxudWxsfG9kZHxvcnxvdGhlcndpc2V8cGl8cHJlZHxwcmludHxwcm9kdWN0fHByb3BlckZyYWN0aW9ufHB1dENoYXJ8cHV0U3RyfHB1dFN0ckxufHF1b3R8cXVvdFJlbXxyZWFkfHJlYWRGaWxlfHJlYWRJT3xyZWFkTGlzdHxyZWFkTG58cmVhZFBhcmVufHJlYWRzfHJlYWRzUHJlY3xyZWFsVG9GcmFjfHJlY2lwfHJlbXxyZXBlYXR8cmVwbGljYXRlfHJldHVybnxyZXZlcnNlfHJvdW5kfHNjYWxlRmxvYXR8c2Nhbmx8c2NhbmwxfHNjYW5yfHNjYW5yMXxzZXF8c2VxdWVuY2V8c2VxdWVuY2VffHNob3d8c2hvd0NoYXJ8c2hvd0xpc3R8c2hvd1BhcmVufHNob3dTdHJpbmd8c2hvd3N8c2hvd3NQcmVjfHNpZ25pZmljYW5kfHNpZ251bXxzaW58c2luaHxzbmR8c3BhbnxzcGxpdEF0fHNxcnR8c3VidHJhY3R8c3VjY3xzdW18dGFpbHx0YWtlfHRha2VXaGlsZXx0YW58dGFuaHx0b0VudW18dG9JbnRlZ2VyfHRvUmF0aW9uYWx8dHJ1bmNhdGV8dW5jdXJyeXx1bmRlZmluZWR8dW5saW5lc3x1bnRpbHx1bndvcmRzfHVuemlwfHVuemlwM3x1c2VyRXJyb3J8d29yZHN8d3JpdGVGaWxlfHppcHx6aXAzfHppcFdpdGh8emlwV2l0aDMpXFxiJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjaW5maXhfb3AnIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnW3whJSQ/fis6XFwtLj08Lz5cXFxcXSsnLAogICAgICAgICAgIGNvbW1lbnQ6ICdJbiBjYXNlIHRoaXMgcmVnZXggc2VlbXMgb3Zlcmx5IGdlbmVyYWwsIG5vdGUgdGhhdCBIYXNrZWxsIHBlcm1pdHMgdGhlIGRlZmluaXRpb24gb2YgbmV3IG9wZXJhdG9ycyB3aGljaCBjYW4gYmUgbmVhcmx5IGFueSBzdHJpbmcgb2YgcHVuY3R1YXRpb24gY2hhcmFjdGVycywgc3VjaCBhcyAkJV4mKi4nIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuY29tbWEuaGFza2VsbCcsIHJlZ2V4OiAnLCcgfSBdLAogICAgICAnI2Jsb2NrX2NvbW1lbnQnOgogICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50Lmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnXFx7LSg/ISMpJywKICAgICAgICAgICBwdXNoOgogICAgICAgICAgICBbIHsgaW5jbHVkZTogJyNibG9ja19jb21tZW50JyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuaGFza2VsbCcsCiAgICAgICAgICAgICAgICByZWdleDogJy1cXH0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQuYmxvY2suaGFza2VsbCcgfSBdIH0gXSwKICAgICAgJyNjb21tZW50cyc6CiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICctLS4qJywKICAgICAgICAgICBwdXNoXzoKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5saW5lLmRvdWJsZS1kYXNoLmhhc2tlbGwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICckJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmxpbmUuZG91YmxlLWRhc2guaGFza2VsbCcgfSBdIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNibG9ja19jb21tZW50JyB9IF0sCiAgICAgICcjaW5maXhfb3AnOgogICAgICAgWyB7IHRva2VuOiAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uaW5maXguaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXChbfCElJCs6XFwtLj08Lz5dK1xcKXxcXCgsK1xcKScgfSBdLAogICAgICAnI21vZHVsZV9leHBvcnRzJzoKICAgICAgIFsgeyB0b2tlbjogJ21ldGEuZGVjbGFyYXRpb24uZXhwb3J0cy5oYXNrZWxsJywKICAgICAgICAgICByZWdleDogJ1xcKCcsCiAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5kZWNsYXJhdGlvbi5leHBvcnRzLmhhc2tlbGwuZW5kJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLmhhc2tlbGwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGJbYS16XVthLXpBLVpfXCddKicgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnc3RvcmFnZS50eXBlLmhhc2tlbGwnLCByZWdleDogJ1xcYltBLVpdW0EtWmEtel9cJ10qJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3IuY29tbWEuaGFza2VsbCcsIHJlZ2V4OiAnLCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW5maXhfb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ21ldGEub3RoZXIudW5rbm93bi5oYXNrZWxsJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwoLio/XFwpJywKICAgICAgICAgICAgICAgIGNvbW1lbnQ6ICdTbyBuYW1lZCBiZWNhdXNlIEkgZG9uXCd0IGtub3cgd2hhdCB0byBjYWxsIHRoaXMuJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5kZWNsYXJhdGlvbi5leHBvcnRzLmhhc2tlbGwuZW5kJyB9IF0gfSBdLAogICAgICAnI21vZHVsZV9uYW1lJzoKICAgICAgIFsgeyB0b2tlbjogJ3N1cHBvcnQub3RoZXIubW9kdWxlLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnW0EtWl1bQS1aYS16Ll9cJ10qJyB9IF0sCiAgICAgICcjcHJhZ21hJzoKICAgICAgIFsgeyB0b2tlbjogJ21ldGEucHJlcHJvY2Vzc29yLmhhc2tlbGwnLAogICAgICAgICAgIHJlZ2V4OiAnXFx7LSMnLAogICAgICAgICAgIHB1c2g6CiAgICAgICAgICAgIFsgeyB0b2tlbjogJ21ldGEucHJlcHJvY2Vzc29yLmhhc2tlbGwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICcjLVxcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm90aGVyLnByZXByb2Nlc3Nvci5oYXNrZWxsJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiKD86TEFOR1VBR0V8VU5QQUNLfElOTElORSlcXGInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLnByZXByb2Nlc3Nvci5oYXNrZWxsJyB9IF0gfSBdLAogICAgICAnI3R5cGVfc2lnbmF0dXJlJzoKICAgICAgIFsgeyB0b2tlbjoKICAgICAgICAgICAgWyAnbWV0YS5jbGFzcy1jb25zdHJhaW50Lmhhc2tlbGwnLAogICAgICAgICAgICAgICdlbnRpdHkub3RoZXIuaW5oZXJpdGVkLWNsYXNzLmhhc2tlbGwnLAogICAgICAgICAgICAgICdtZXRhLmNsYXNzLWNvbnN0cmFpbnQuaGFza2VsbCcsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLm90aGVyLmdlbmVyaWMtdHlwZS5oYXNrZWxsJywKICAgICAgICAgICAgICAnbWV0YS5jbGFzcy1jb25zdHJhaW50Lmhhc2tlbGwnLAogICAgICAgICAgICAgICdrZXl3b3JkLm90aGVyLmJpZy1hcnJvdy5oYXNrZWxsJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcKFxccyopKFtBLVpdW0EtWmEtel0qKShcXHMrKShbYS16XVtBLVphLXpfXCddKikoXFwpXFxzKikoPT4pJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcHJhZ21hJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vdGhlci5hcnJvdy5oYXNrZWxsJywgcmVnZXg6ICctPicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXIuYmlnLWFycm93Lmhhc2tlbGwnLCByZWdleDogJz0+JyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC50eXBlLnByZWx1ZGUuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpJbnQoPzplZ2VyKT98TWF5YmV8RWl0aGVyfEJvb2x8RmxvYXR8RG91YmxlfENoYXJ8U3RyaW5nfE9yZGVyaW5nfFNob3dTfFJlYWRTfEZpbGVQYXRofElPKD86RXJyb3IpPylcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICd2YXJpYWJsZS5vdGhlci5nZW5lcmljLXR5cGUuaGFza2VsbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGJbYS16XVthLXpBLVowLTlfXCddKlxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3N0b3JhZ2UudHlwZS5oYXNrZWxsJywKICAgICAgICAgICByZWdleDogJ1xcYltBLVpdW2EtekEtWjAtOV9cJ10qXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5jb25zdGFudC51bml0Lmhhc2tlbGwnLCByZWdleDogJ1xcKFxcKScgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2NvbW1lbnRzJyB9IF0gfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpIYXNrZWxsSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7IGZpbGVUeXBlczogWyAnaHMnIF0sCiAgICAgIGtleUVxdWl2YWxlbnQ6ICdefkgnLAogICAgICBuYW1lOiAnSGFza2VsbCcsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5oYXNrZWxsJyB9OwoKCm9vcC5pbmhlcml0cyhIYXNrZWxsSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkhhc2tlbGxIaWdobGlnaHRSdWxlcyA9IEhhc2tlbGxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9oYXNrZWxsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvaGFza2VsbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEhhc2tlbGxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaGFza2VsbF9oaWdobGlnaHRfcnVsZXMiKS5IYXNrZWxsSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSGFza2VsbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLS0iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSBudWxsOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvaGFza2VsbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2hhc2tlbGwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-haskell_cabal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9oYXNrZWxsX2NhYmFsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIENhYmFsSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxccyotLS4qJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZCJdLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eKFxzKlx3Lio/KSg6KD86XHMrfCQpKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICAgICByZWdleCA6IC9bXGRfXSsoPzooPzpbXC5cZF9dKik/KS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlfFRSVUV8RkFMU0V8VHJ1ZXxGYWxzZXx5ZXN8bm8pXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJtYXJrdXAuaGVhZGluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9eKFx3LiopJC8KICAgICAgICAgICAgfQogICAgICAgIF19OwoKfTsKCm9vcC5pbmhlcml0cyhDYWJhbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5DYWJhbEhpZ2hsaWdodFJ1bGVzID0gQ2FiYWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaGFza2VsbF9jYWJhbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICB0aGlzLmlzSGVhZGluZyA9IGZ1bmN0aW9uIChzZXNzaW9uLHJvdykgewogICAgICB2YXIgaGVhZGluZyA9ICJtYXJrdXAuaGVhZGluZyI7CiAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdylbMF07CiAgICAgIHJldHVybiByb3c9PTAgfHwgKHRva2VuICYmIHRva2VuLnR5cGUubGFzdEluZGV4T2YoaGVhZGluZywgMCkgPT09IDApOwogIH07CgogIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgIGlmICh0aGlzLmlzSGVhZGluZyhzZXNzaW9uLHJvdykpewogICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbmVuZCIgJiYgISgvXlxzKiQvLnRlc3Qoc2Vzc2lvbi5nZXRMaW5lKHJvdykpKSl7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICBpZiAoISgvXlxzKiQvLnRlc3Qoc2Vzc2lvbi5nZXRMaW5lKHJvdykpKSl7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChyb3c9PW1heFJvdyB8fCB0aGlzLmlzSGVhZGluZyhzZXNzaW9uLHJvdykpewogICAgICAgICAgcmV0dXJuICJlbmQiOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIiI7CiAgfTsKCgogIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgIGlmICh0aGlzLmlzSGVhZGluZyhzZXNzaW9uLHJvdykpIHsKICAgICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICAgIGlmICh0aGlzLmlzSGVhZGluZyhzZXNzaW9uLHJvdykpewogICAgICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgd2hpbGUgKGVuZFJvdyA+IHN0YXJ0Um93ICYmIC9eXHMqJC8udGVzdChzZXNzaW9uLmdldExpbmUoZW5kUm93KSkpCiAgICAgICAgICAgICAgICAgIGVuZFJvdy0tOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpPT09ImVuZCIpewogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICB3aGlsZSAoLS1yb3c+PTApewogICAgICAgICAgaWYgKHRoaXMuaXNIZWFkaW5nKHNlc3Npb24scm93KSl7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2hhc2tlbGxfY2FiYWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9oYXNrZWxsX2NhYmFsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvaGFza2VsbF9jYWJhbCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENhYmFsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2hhc2tlbGxfY2FiYWxfaGlnaGxpZ2h0X3J1bGVzIikuQ2FiYWxIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2hhc2tlbGxfY2FiYWwiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ2FiYWxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi0tIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0gbnVsbDsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2hhc2tlbGxfY2FiYWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9oYXNrZWxsX2NhYmFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-haxe.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9oYXhlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7Cgp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEhheGVIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYnJlYWt8Y2FzZXxjYXN0fGNhdGNofGNsYXNzfGNvbnRpbnVlfGRlZmF1bHR8ZWxzZXxlbnVtfGV4dGVuZHN8Zm9yfGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGlubGluZXxpbnRlcmZhY2V8bmV3fG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwdWJsaWN8cmV0dXJufHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cmFjZXx0cnl8dHlwZWRlZnx1bnR5cGVkfHZhcnx3aGlsZXxBcnJheXxWb2lkfEJvb2x8SW50fFVJbnR8RmxvYXR8RHluYW1pY3xTdHJpbmd8TGlzdHxIYXNofEludEhhc2h8RXJyb3J8VW5rbm93bnxUeXBlfFN0ZCIKICAgICk7CgogICAgdmFyIGJ1aWxkaW5Db25zdGFudHMgPSAoCiAgICAgICAgIm51bGx8dHJ1ZXxmYWxzZSIKICAgICk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJ0aGlzIiwKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWxkaW5Db25zdGFudHMKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAiMFt4WF1bMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7PF0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX0+XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Cn07Cgpvb3AuaW5oZXJpdHMoSGF4ZUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IYXhlSGlnaGxpZ2h0UnVsZXMgPSBIYXhlSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9oYXhlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvaGF4ZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSGF4ZUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9oYXhlX2hpZ2hsaWdodF9ydWxlcyIpLkhheGVIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSGF4ZUhpZ2hsaWdodFJ1bGVzOwogICAgCiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvaGF4ZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2hheGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-hjson.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9oanNvbl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBIanNvbkhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQ6IFt7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjY29tbWVudHMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3Jvb3RPYmplY3QiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgICIjYXJyYXkiOiBbewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFsvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cXS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3ZhbHVlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI2NvbW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8sfCQvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiaW52YWxpZC5pbGxlZ2FsIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvW15cc1xdXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiYXJyYXkiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiNjb21tZW50cyI6IFt7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAiY29tbWVudC5wdW5jdHVhdGlvbiIsCiAgICAgICAgICAgICAgICAiY29tbWVudC5saW5lIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLygjKSguKiQpLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LnB1bmN0dWF0aW9uIiwKICAgICAgICAgICAgcmVnZXg6IC9cL1wqLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5wdW5jdHVhdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleDogL1wqXC8vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5ibG9jayIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAiY29tbWVudC5wdW5jdHVhdGlvbiIsCiAgICAgICAgICAgICAgICAiY29tbWVudC5saW5lIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLyhcL1wvKSguKiQpLwogICAgICAgIH1dLAogICAgICAgICIjY29uc3RhbnQiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50IiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OnRydWV8ZmFsc2V8bnVsbClcYi8KICAgICAgICB9XSwKICAgICAgICAiI2tleW5hbWUiOiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogLyg/OlteLFx7XFtcfVxdXHNdK3wiKD86W14iXFxdfFxcLikqIilccyooPz06KS8KICAgICAgICB9XSwKICAgICAgICAiI21zdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvJycnLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvJycnLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiI251bWJlciI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4OiAvLT8oPzowfFsxLTldXGQqKSg/Oig/OlwuXGQrKT8oPzpbZUVdWystXT9cZCspPyk/LywKICAgICAgICAgICAgY29tbWVudDogImhhbmRsZXMgaW50ZWdlciBhbmQgZGVjaW1hbCBudW1iZXJzIgogICAgICAgIH1dLAogICAgICAgICIjb2JqZWN0IjogW3sKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogL1x7LywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXH0vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiNrZXluYW1lIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3ZhbHVlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC86LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8sLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJwYXJlbiIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiI3Jvb3RPYmplY3QiOiBbewogICAgICAgICAgICB0b2tlbjogInBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6IC8oPz1ccyooPzpbXixce1xbXH1cXVxzXSt8Iig/OlteIlxcXXxcXC4pKiIpXHMqOikvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC8tLS1ub25lLS0tLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIja2V5bmFtZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiN2YWx1ZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvOi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvLC8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAicGFyZW4iCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiNzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImludmFsaWQuaWxsZWdhbCIsCiAgICAgICAgICAgICAgICByZWdleDogL1xcLi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIjdXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IC9cYlteOiwwLTlcLVx7XFtcfVxdXHNdLiokLwogICAgICAgIH1dLAogICAgICAgICIjdmFsdWUiOiBbewogICAgICAgICAgICBpbmNsdWRlOiAiI2NvbnN0YW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNudW1iZXIiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3N0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjYXJyYXkiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI29iamVjdCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjY29tbWVudHMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI21zdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3VzdHJpbmciCiAgICAgICAgfV0KICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKSGpzb25IaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsKICAgIGZpbGVUeXBlczogWyJoanNvbiJdLAogICAgZm9sZGluZ1N0YXJ0TWFya2VyOiAiKD94OiAgICAgIyB0dXJuIG9uIGV4dGVuZGVkIG1vZGVcbiAgICAgICAgICAgICAgXiAgICAjIGEgbGluZSBiZWdpbm5pbmcgd2l0aFxuICAgICAgICAgICAgICBcXHMqICAgICMgc29tZSBvcHRpb25hbCBzcGFjZVxuICAgICAgICAgICAgICBbe1xcW10gICMgdGhlIHN0YXJ0IG9mIGFuIG9iamVjdCBvciBhcnJheVxuICAgICAgICAgICAgICAoPyEgICAgIyBidXQgbm90IGZvbGxvd2VkIGJ5XG4gICAgICAgICAgICAgIC4qICAgIyB3aGF0ZXZlclxuICAgICAgICAgICAgICBbfVxcXV0gICMgYW5kIHRoZSBjbG9zZSBvZiBhbiBvYmplY3Qgb3IgYXJyYXlcbiAgICAgICAgICAgICAgLD8gICAjIGFuIG9wdGlvbmFsIGNvbW1hXG4gICAgICAgICAgICAgIFxccyogICMgc29tZSBvcHRpb25hbCBzcGFjZVxuICAgICAgICAgICAgICAkICAgICMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgICAgIyAuLi5vci4uLlxuICAgICAgICAgICAgICBbe1xcW10gICMgdGhlIHN0YXJ0IG9mIGFuIG9iamVjdCBvciBhcnJheVxuICAgICAgICAgICAgICBcXHMqICAgICMgc29tZSBvcHRpb25hbCBzcGFjZVxuICAgICAgICAgICAgICAkICAgICMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZVxuICAgICAgICAgICAgKSIsCiAgICBmb2xkaW5nU3RvcE1hcmtlcjogIig/eDogICAjIHR1cm4gb24gZXh0ZW5kZWQgbW9kZVxuICAgICAgICAgICAgIF4gICAgIyBhIGxpbmUgYmVnaW5uaW5nIHdpdGhcbiAgICAgICAgICAgICBcXHMqICAjIHNvbWUgb3B0aW9uYWwgc3BhY2VcbiAgICAgICAgICAgICBbfVxcXV0gICMgYW5kIHRoZSBjbG9zZSBvZiBhbiBvYmplY3Qgb3IgYXJyYXlcbiAgICAgICAgICAgICApIiwKICAgIGtleUVxdWl2YWxlbnQ6ICJefkoiLAogICAgbmFtZTogIkhqc29uIiwKICAgIHNjb3BlTmFtZTogInNvdXJjZS5oanNvbiIKfTsKCgpvb3AuaW5oZXJpdHMoSGpzb25IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSGpzb25IaWdobGlnaHRSdWxlcyA9IEhqc29uSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvaGpzb24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9oanNvbl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEhqc29uSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2hqc29uX2hpZ2hsaWdodF9ydWxlcyIpLkhqc29uSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSGpzb25IaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7IHN0YXJ0OiAiLyoiLCBlbmQ6ICIqLyIgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2hqc29uIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvaGpzb24iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-html.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9odG1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-html_completions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGYoZSx0KXt2YXIgbj1lLnR5cGUuc3BsaXQoIi4iKTtyZXR1cm4gdC5zcGxpdCgiLiIpLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBuLmluZGV4T2YoZSkhPT0tMX0pfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbj1uZXcgcihlLHQucm93LHQuY29sdW1uKSxpPW4uZ2V0Q3VycmVudFRva2VuKCk7aWYoIWl8fCFmKGksInRhZyIpJiYoIWYoaSwidGV4dCIpfHwhaS52YWx1ZS5tYXRjaCgiLyIpKSlkbyBpPW4uc3RlcEJhY2t3YXJkKCk7d2hpbGUoaSYmKGYoaSwic3RyaW5nIil8fGYoaSwib3BlcmF0b3IiKXx8ZihpLCJhdHRyaWJ1dGUtbmFtZSIpfHxmKGksInRleHQiKSkpO2lmKGkmJmYoaSwidGFnLW5hbWUiKSYmIW4uc3RlcEJhY2t3YXJkKCkudmFsdWUubWF0Y2goIi8iKSlyZXR1cm4gaS52YWx1ZX12YXIgcj1lKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3IsaT1bImFjY2Vzc2tleSIsImNsYXNzIiwiY29udGVudGVkaXRhYmxlIiwiY29udGV4dG1lbnUiLCJkaXIiLCJkcmFnZ2FibGUiLCJkcm9wem9uZSIsImhpZGRlbiIsImlkIiwibGFuZyIsInNwZWxsY2hlY2siLCJzdHlsZSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiXSxzPVsib25hYm9ydCIsIm9uYmx1ciIsIm9uY2FuY2VsIiwib25jYW5wbGF5Iiwib25jYW5wbGF5dGhyb3VnaCIsIm9uY2hhbmdlIiwib25jbGljayIsIm9uY2xvc2UiLCJvbmNvbnRleHRtZW51Iiwib25jdWVjaGFuZ2UiLCJvbmRibGNsaWNrIiwib25kcmFnIiwib25kcmFnZW5kIiwib25kcmFnZW50ZXIiLCJvbmRyYWdsZWF2ZSIsIm9uZHJhZ292ZXIiLCJvbmRyYWdzdGFydCIsIm9uZHJvcCIsIm9uZHVyYXRpb25jaGFuZ2UiLCJvbmVtcHRpZWQiLCJvbmVuZGVkIiwib25lcnJvciIsIm9uZm9jdXMiLCJvbmlucHV0Iiwib25pbnZhbGlkIiwib25rZXlkb3duIiwib25rZXlwcmVzcyIsIm9ua2V5dXAiLCJvbmxvYWQiLCJvbmxvYWRlZGRhdGEiLCJvbmxvYWRlZG1ldGFkYXRhIiwib25sb2Fkc3RhcnQiLCJvbm1vdXNlZG93biIsIm9ubW91c2Vtb3ZlIiwib25tb3VzZW91dCIsIm9ubW91c2VvdmVyIiwib25tb3VzZXVwIiwib25tb3VzZXdoZWVsIiwib25wYXVzZSIsIm9ucGxheSIsIm9ucGxheWluZyIsIm9ucHJvZ3Jlc3MiLCJvbnJhdGVjaGFuZ2UiLCJvbnJlc2V0Iiwib25zY3JvbGwiLCJvbnNlZWtlZCIsIm9uc2Vla2luZyIsIm9uc2VsZWN0Iiwib25zaG93Iiwib25zdGFsbGVkIiwib25zdWJtaXQiLCJvbnN1c3BlbmQiLCJvbnRpbWV1cGRhdGUiLCJvbnZvbHVtZWNoYW5nZSIsIm9ud2FpdGluZyJdLG89aS5jb25jYXQocyksdT17aHRtbDpbIm1hbmlmZXN0Il0saGVhZDpbXSx0aXRsZTpbXSxiYXNlOlsiaHJlZiIsInRhcmdldCJdLGxpbms6WyJocmVmIiwiaHJlZmxhbmciLCJyZWwiLCJtZWRpYSIsInR5cGUiLCJzaXplcyJdLG1ldGE6WyJodHRwLWVxdWl2IiwibmFtZSIsImNvbnRlbnQiLCJjaGFyc2V0Il0sc3R5bGU6WyJ0eXBlIiwibWVkaWEiLCJzY29wZWQiXSxzY3JpcHQ6WyJjaGFyc2V0IiwidHlwZSIsInNyYyIsImRlZmVyIiwiYXN5bmMiXSxub3NjcmlwdDpbImhyZWYiXSxib2R5Olsib25hZnRlcnByaW50Iiwib25iZWZvcmVwcmludCIsIm9uYmVmb3JldW5sb2FkIiwib25oYXNoY2hhbmdlIiwib25tZXNzYWdlIiwib25vZmZsaW5lIiwib25wb3BzdGF0ZSIsIm9ucmVkbyIsIm9ucmVzaXplIiwib25zdG9yYWdlIiwib251bmRvIiwib251bmxvYWQiXSxzZWN0aW9uOltdLG5hdjpbXSxhcnRpY2xlOlsicHViZGF0ZSJdLGFzaWRlOltdLGgxOltdLGgyOltdLGgzOltdLGg0OltdLGg1OltdLGg2OltdLGhlYWRlcjpbXSxmb290ZXI6W10sYWRkcmVzczpbXSxtYWluOltdLHA6W10saHI6W10scHJlOltdLGJsb2NrcXVvdGU6WyJjaXRlIl0sb2w6WyJzdGFydCIsInJldmVyc2VkIl0sdWw6W10sbGk6WyJ2YWx1ZSJdLGRsOltdLGR0OltdLGRkOltdLGZpZ3VyZTpbXSxmaWdjYXB0aW9uOltdLGRpdjpbXSxhOlsiaHJlZiIsInRhcmdldCIsInBpbmciLCJyZWwiLCJtZWRpYSIsImhyZWZsYW5nIiwidHlwZSJdLGVtOltdLHN0cm9uZzpbXSxzbWFsbDpbXSxzOltdLGNpdGU6W10scTpbImNpdGUiXSxkZm46W10sYWJicjpbXSxkYXRhOltdLHRpbWU6WyJkYXRldGltZSJdLGNvZGU6W10sInZhciI6W10sc2FtcDpbXSxrYmQ6W10sc3ViOltdLHN1cDpbXSxpOltdLGI6W10sdTpbXSxtYXJrOltdLHJ1Ynk6W10scnQ6W10scnA6W10sYmRpOltdLGJkbzpbXSxzcGFuOltdLGJyOltdLHdicjpbXSxpbnM6WyJjaXRlIiwiZGF0ZXRpbWUiXSxkZWw6WyJjaXRlIiwiZGF0ZXRpbWUiXSxpbWc6WyJhbHQiLCJzcmMiLCJoZWlnaHQiLCJ3aWR0aCIsInVzZW1hcCIsImlzbWFwIl0saWZyYW1lOlsibmFtZSIsInNyYyIsImhlaWdodCIsIndpZHRoIiwic2FuZGJveCIsInNlYW1sZXNzIl0sZW1iZWQ6WyJzcmMiLCJoZWlnaHQiLCJ3aWR0aCIsInR5cGUiXSxvYmplY3Q6WyJwYXJhbSIsImRhdGEiLCJ0eXBlIiwiaGVpZ2h0Iiwid2lkdGgiLCJ1c2VtYXAiLCJuYW1lIiwiZm9ybSIsImNsYXNzaWQiXSxwYXJhbTpbIm5hbWUiLCJ2YWx1ZSJdLHZpZGVvOlsic3JjIiwiYXV0b2J1ZmZlciIsImF1dG9wbGF5IiwibG9vcCIsImNvbnRyb2xzIiwid2lkdGgiLCJoZWlnaHQiLCJwb3N0ZXIiXSxhdWRpbzpbInNyYyIsImF1dG9idWZmZXIiLCJhdXRvcGxheSIsImxvb3AiLCJjb250cm9scyJdLHNvdXJjZTpbInNyYyIsInR5cGUiLCJtZWRpYSJdLHRyYWNrOlsia2luZCIsInNyYyIsInNyY2xhbmciLCJsYWJlbCIsImRlZmF1bHQiXSxjYW52YXM6WyJ3aWR0aCIsImhlaWdodCJdLG1hcDpbIm5hbWUiXSxhcmVhOlsic2hhcGUiLCJjb29yZHMiLCJocmVmIiwiaHJlZmxhbmciLCJhbHQiLCJ0YXJnZXQiLCJtZWRpYSIsInJlbCIsInBpbmciLCJ0eXBlIl0sc3ZnOltdLG1hdGg6W10sdGFibGU6WyJzdW1tYXJ5Il0sY2FwdGlvbjpbXSxjb2xncm91cDpbInNwYW4iXSxjb2w6WyJzcGFuIl0sdGJvZHk6W10sdGhlYWQ6W10sdGZvb3Q6W10sdHI6W10sdGQ6WyJoZWFkZXJzIiwicm93c3BhbiIsImNvbHNwYW4iXSx0aDpbImhlYWRlcnMiLCJyb3dzcGFuIiwiY29sc3BhbiIsInNjb3BlIl0sZm9ybTpbImFjY2VwdC1jaGFyc2V0IiwiYWN0aW9uIiwiYXV0b2NvbXBsZXRlIiwiZW5jdHlwZSIsIm1ldGhvZCIsIm5hbWUiLCJub3ZhbGlkYXRlIiwidGFyZ2V0Il0sZmllbGRzZXQ6WyJkaXNhYmxlZCIsImZvcm0iLCJuYW1lIl0sbGVnZW5kOltdLGxhYmVsOlsiZm9ybSIsImZvciJdLGlucHV0OlsidHlwZSIsImFjY2VwdCIsImFsdCIsImF1dG9jb21wbGV0ZSIsImNoZWNrZWQiLCJkaXNhYmxlZCIsImZvcm0iLCJmb3JtYWN0aW9uIiwiZm9ybWVuY3R5cGUiLCJmb3JtbWV0aG9kIiwiZm9ybW5vdmFsaWRhdGUiLCJmb3JtdGFyZ2V0IiwiaGVpZ2h0IiwibGlzdCIsIm1heCIsIm1heGxlbmd0aCIsIm1pbiIsIm11bHRpcGxlIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicmVhZG9ubHkiLCJyZXF1aXJlZCIsInNpemUiLCJzcmMiLCJzdGVwIiwid2lkdGgiLCJmaWxlcyIsInZhbHVlIl0sYnV0dG9uOlsiYXV0b2ZvY3VzIiwiZGlzYWJsZWQiLCJmb3JtIiwiZm9ybWFjdGlvbiIsImZvcm1lbmN0eXBlIiwiZm9ybW1ldGhvZCIsImZvcm1ub3ZhbGlkYXRlIiwiZm9ybXRhcmdldCIsIm5hbWUiLCJ2YWx1ZSIsInR5cGUiXSxzZWxlY3Q6WyJhdXRvZm9jdXMiLCJkaXNhYmxlZCIsImZvcm0iLCJtdWx0aXBsZSIsIm5hbWUiLCJzaXplIl0sZGF0YWxpc3Q6W10sb3B0Z3JvdXA6WyJkaXNhYmxlZCIsImxhYmVsIl0sb3B0aW9uOlsiZGlzYWJsZWQiLCJzZWxlY3RlZCIsImxhYmVsIiwidmFsdWUiXSx0ZXh0YXJlYTpbImF1dG9mb2N1cyIsImRpc2FibGVkIiwiZm9ybSIsIm1heGxlbmd0aCIsIm5hbWUiLCJwbGFjZWhvbGRlciIsInJlYWRvbmx5IiwicmVxdWlyZWQiLCJyb3dzIiwiY29scyIsIndyYXAiXSxrZXlnZW46WyJhdXRvZm9jdXMiLCJjaGFsbGVuZ2UiLCJkaXNhYmxlZCIsImZvcm0iLCJrZXl0eXBlIiwibmFtZSJdLG91dHB1dDpbImZvciIsImZvcm0iLCJuYW1lIl0scHJvZ3Jlc3M6WyJ2YWx1ZSIsIm1heCJdLG1ldGVyOlsidmFsdWUiLCJtaW4iLCJtYXgiLCJsb3ciLCJoaWdoIiwib3B0aW11bSJdLGRldGFpbHM6WyJvcGVuIl0sc3VtbWFyeTpbXSxjb21tYW5kOlsidHlwZSIsImxhYmVsIiwiaWNvbiIsImRpc2FibGVkIiwiY2hlY2tlZCIsInJhZGlvZ3JvdXAiLCJjb21tYW5kIl0sbWVudTpbInR5cGUiLCJsYWJlbCJdLGRpYWxvZzpbIm9wZW4iXX0sYT1PYmplY3Qua2V5cyh1KSxjPWZ1bmN0aW9uKCl7fTsoZnVuY3Rpb24oKXt0aGlzLmdldENvbXBsZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXQuZ2V0VG9rZW5BdChuLnJvdyxuLmNvbHVtbik7cmV0dXJuIGk/ZihpLCJ0YWctbmFtZSIpfHxpLnZhbHVlPT0iPCImJmYoaSwidGV4dCIpP3RoaXMuZ2V0VGFnQ29tcGxldGlvbnMoZSx0LG4scik6ZihpLCJ0ZXh0Iil8fGYoaSwiYXR0cmlidXRlLW5hbWUiKT90aGlzLmdldEF0dHJpYnV0ZUNvbXBldGlvbnMoZSx0LG4scik6W106W119LHRoaXMuZ2V0VGFnQ29tcGxldGlvbnM9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9YTtyZXR1cm4gciYmKGk9aS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5kZXhPZihyKT09PTB9KSksaS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3ZhbHVlOmUsbWV0YToidGFnIn19KX0sdGhpcy5nZXRBdHRyaWJ1dGVDb21wZXRpb25zPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPWwodCxuKTtpZighaSlyZXR1cm5bXTt2YXIgcz1vO3JldHVybiBpIGluIHUmJihzPXMuY29uY2F0KHVbaV0pKSxyJiYocz1zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5pbmRleE9mKHIpPT09MH0pKSxzLm1hcChmdW5jdGlvbihlKXtyZXR1cm57Y2FwdGlvbjplLHNuaXBwZXQ6ZSsnPSIkMCInLG1ldGE6ImF0dHJpYnV0ZSJ9fSl9fSkuY2FsbChjLnByb3RvdHlwZSksdC5IdG1sQ29tcGxldGlvbnM9Y30p]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-html_elixir.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9lbGl4aXJfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRWxpeGlySGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAnbWV0YS5tb2R1bGUuZWxpeGlyJywKICAgICAgICAgICAgICAna2V5d29yZC5jb250cm9sLm1vZHVsZS5lbGl4aXInLAogICAgICAgICAgICAgICdtZXRhLm1vZHVsZS5lbGl4aXInLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50eXBlLm1vZHVsZS5lbGl4aXInIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKGRlZm1vZHVsZSkoXFxzKykoKD86W0EtWl1cXHcqXFxzKlxcLlxccyopKltBLVpdXFx3KiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycsCiAgICAgICAgICAgcmVnZXg6ICdAKD86bW9kdWxlfHR5cGUpP2RvYyAoPzp+W2Etel0pPyIiIicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5oZXJlZG9jJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxzKiIiIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdAZG9jIHdpdGggaGVyZWRvY3MgaXMgdHJlYXRlZCBhcyBkb2N1bWVudGF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnLAogICAgICAgICAgIHJlZ2V4OiAnQCg/Om1vZHVsZXx0eXBlKT9kb2MgfltBLVpdIiIiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXHMqIiIiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdAZG9jIHdpdGggaGVyZWRvY3MgaXMgdHJlYXRlZCBhcyBkb2N1bWVudGF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnLAogICAgICAgICAgIHJlZ2V4OiAnQCg/Om1vZHVsZXx0eXBlKT9kb2MgKD86flthLXpdKT9cJ1wnXCcnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdjb21tZW50LmRvY3VtZW50YXRpb24uaGVyZWRvYycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xccypcJ1wnXCcnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnQGRvYyB3aXRoIGhlcmVkb2NzIGlzIHRyZWF0ZWQgYXMgZG9jdW1lbnRhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5oZXJlZG9jJywKICAgICAgICAgICByZWdleDogJ0AoPzptb2R1bGV8dHlwZSk/ZG9jIH5bQS1aXVwnXCdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5oZXJlZG9jJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxzKlwnXCdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLmhlcmVkb2MnIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnQGRvYyB3aXRoIGhlcmVkb2NzIGlzIHRyZWF0ZWQgYXMgZG9jdW1lbnRhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuZG9jdW1lbnRhdGlvbi5mYWxzZScsCiAgICAgICAgICAgcmVnZXg6ICdAKD86bW9kdWxlfHR5cGUpP2RvYyBmYWxzZScsCiAgICAgICAgICAgY29tbWVudDogJ0Bkb2MgZmFsc2UgaXMgdHJlYXRlZCBhcyBkb2N1bWVudGF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLnN0cmluZycsCiAgICAgICAgICAgcmVnZXg6ICdAKD86bW9kdWxlfHR5cGUpP2RvYyAiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLnN0cmluZycsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2N1bWVudGF0aW9uLnN0cmluZycgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdAZG9jIHdpdGggc3RyaW5nIGlzIHRyZWF0ZWQgYXMgZG9jdW1lbnRhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86ZG98ZW5kfGNhc2V8YmN8bGN8Zm9yfGlmfGNvbmR8dW5sZXNzfHRyeXxyZWNlaXZlfGZufGRlZm1vZHVsZXxkZWZwP3xkZWZwcm90b2NvbHxkZWZpbXBsfGRlZnJlY29yZHxkZWZzdHJ1Y3R8ZGVmbWFjcm9wP3xkZWZkZWxlZ2F0ZXxkZWZjYWxsYmFja3xkZWZtYWNyb2NhbGxiYWNrfGRlZmV4Y2VwdGlvbnxkZWZvdmVycmlkYWJsZXxleGl0fGFmdGVyfHJlc2N1ZXxjYXRjaHxlbHNlfHJhaXNlfHRocm93fGltcG9ydHxyZXF1aXJlfGFsaWFzfHVzZXxxdW90ZXx1bnF1b3RlfHN1cGVyKVxcYig/IVs/IV0pJywKICAgICAgICAgICBUT0RPOiAnRklYTUU6IHJlZ2V4cCBkb2VzblwndCBoYXZlIGpzIGVxdWl2YWxlbnQnLAogICAgICAgICAgIG9yaWdpbmFsUmVnZXg6ICcoPzwhXFwuKVxcYihkb3xlbmR8Y2FzZXxiY3xsY3xmb3J8aWZ8Y29uZHx1bmxlc3N8dHJ5fHJlY2VpdmV8Zm58ZGVmbW9kdWxlfGRlZnA/fGRlZnByb3RvY29sfGRlZmltcGx8ZGVmcmVjb3JkfGRlZnN0cnVjdHxkZWZtYWNyb3A/fGRlZmRlbGVnYXRlfGRlZmNhbGxiYWNrfGRlZm1hY3JvY2FsbGJhY2t8ZGVmZXhjZXB0aW9ufGRlZm92ZXJyaWRhYmxlfGV4aXR8YWZ0ZXJ8cmVzY3VlfGNhdGNofGVsc2V8cmFpc2V8dGhyb3d8aW1wb3J0fHJlcXVpcmV8YWxpYXN8dXNlfHF1b3RlfHVucXVvdGV8c3VwZXIpXFxiKD8hWz8hXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphbmR8bm90fG9yfHdoZW58eG9yfGlufGlubGlzdHxpbmJpdHMpXFxiJywKICAgICAgICAgICBUT0RPOiAnRklYTUU6IHJlZ2V4cCBkb2VzblwndCBoYXZlIGpzIGVxdWl2YWxlbnQnLAogICAgICAgICAgIG9yaWdpbmFsUmVnZXg6ICcoPzwhXFwuKVxcYihhbmR8bm90fG9yfHdoZW58eG9yfGlufGlubGlzdHxpbmJpdHMpXFxiJywKICAgICAgICAgICBjb21tZW50OiAnIGFzIGFib3ZlLCBqdXN0IGRvZXNuXCd0IG5lZWQgYSBcJ2VuZFwnIGFuZCBkb2VzIGEgbG9naWMgb3BlcmF0aW9uJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYig/Om5pbHx0cnVlfGZhbHNlKVxcYig/IVs/IV0pJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUubGFuZ3VhZ2UuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYl9fKD86Q0FMTEVSfEVOVnxNT0RVTEV8RElSKV9fXFxiKD8hWz8hXSknIH0sCiAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnZhcmlhYmxlLmVsaXhpcicsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLm90aGVyLnJlYWR3cml0ZS5tb2R1bGUuZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKEApKFthLXpBLVpfXVxcdyopJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi52YXJpYWJsZS5lbGl4aXInLAogICAgICAgICAgICAgICd2YXJpYWJsZS5vdGhlci5hbm9ueW1vdXMuZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKCYpKFxcZCopJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUub3RoZXIuY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYltBLVpdXFx3KlxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcYig/OjB4W1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLUZdKSp8XFxkKD86Xz9cXGQpKig/OlxcLig/IVteWzpzcGFjZTpdWzpkaWdpdDpdXSkoPzpfP1xcZCkqKT8oPzpbZUVdWy0rXT9cXGQoPzpfP1xcZCkqKT98MGJbMDFdK3wwb1swLTddKylcXGInLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJ1xcYigweFxcaCg/Pl8/XFxoKSp8XFxkKD8+Xz9cXGQpKihcXC4oPyFbXls6c3BhY2U6XVs6ZGlnaXQ6XV0pKD8+Xz9cXGQpKik/KFtlRV1bLStdP1xcZCg/Pl8/XFxkKSopP3wwYlswMV0rfDBvWzAtN10rKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJzpcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29uc3RhbnQub3RoZXIuc3ltYm9sLnNpbmdsZS1xdW90ZWQuZWxpeGlyJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJzoiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb25zdGFudC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVycG9sYXRlZF9lbGl4aXInIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5kb3VibGUtcXVvdGVkLmVsaXhpcicgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnKD86XCdcJ1wnKScsCiAgICAgICAgICAgVE9ETzogJ0ZJWE1FOiByZWdleHAgZG9lc25cJ3QgaGF2ZSBqcyBlcXVpdmFsZW50JywKICAgICAgICAgICBvcmlnaW5hbFJlZ2V4OiAnKD8+XCdcJ1wnKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeXFxzKlwnXCdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnZhcmlhYmxlLnF1b3RlZC5zaW5nbGUuaGVyZWRvYy5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnU2luZ2xlLXF1b3RlZCBoZXJlZG9jcycgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnZhcmlhYmxlLnF1b3RlZC5zaW5nbGUuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpbmdsZSBxdW90ZWQgc3RyaW5nIChhbGxvd3MgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJyg/OiIiIiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PiIiIiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccyoiIiInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuaGVyZWRvYy5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnRG91YmxlLXF1b3RlZCBoZXJlZG9jcycgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ2RvdWJsZSBxdW90ZWQgc3RyaW5nIChhbGxvd3MgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bYS16XSg/OiIiIiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJ35bYS16XSg/PiIiIiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccyoiIiInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuaGVyZWRvYy5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnRG91YmxlLXF1b3RlZCBoZXJlZG9jcyBzaWdpbHMnIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnflthLXpdXFx7JywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcuaW50ZXJwb2xhdGVkLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAoYWxsb3cgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bYS16XVxcWycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF1bYS16XSonLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLmludGVycG9sYXRlZC5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnc2lnaWwgKGFsbG93IGZvciBpbnRlcnBvbGF0aW9uKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICd+W2Etel1cXDwnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFw+W2Etel0qJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2ludGVycG9sYXRlZF9lbGl4aXInIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5pbnRlcnBvbGF0ZWQuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpZ2lsIChhbGxvdyBmb3IgaW50ZXJwb2xhdGlvbiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnflthLXpdXFwoJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNpbnRlcnBvbGF0ZWRfZWxpeGlyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcuaW50ZXJwb2xhdGVkLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAoYWxsb3cgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bYS16XVteXFx3XScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdbXlxcd11bYS16XSonLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNlc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcuaW50ZXJwb2xhdGVkLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAoYWxsb3cgZm9yIGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bQS1aXSg/OiIiIiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJ35bQS1aXSg/PiIiIiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccyoiIiInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQub3RoZXIubGl0ZXJhbC51cHBlci5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnRG91YmxlLXF1b3RlZCBoZXJlZG9jcyBzaWdpbHMnIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnfltBLVpdXFx7JywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5vdGhlci5saXRlcmFsLnVwcGVyLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAod2l0aG91dCBpbnRlcnBvbGF0aW9uKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICd+W0EtWl1cXFsnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxdW2Etel0qJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLm90aGVyLmxpdGVyYWwudXBwZXIuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpZ2lsICh3aXRob3V0IGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ35bQS1aXVxcPCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXD5bYS16XSonLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQub3RoZXIubGl0ZXJhbC51cHBlci5lbGl4aXInIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnc2lnaWwgKHdpdGhvdXQgaW50ZXJwb2xhdGlvbiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnfltBLVpdXFwoJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmVsaXhpcicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKVthLXpdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5vdGhlci5saXRlcmFsLnVwcGVyLmVsaXhpcicgfSBdLAogICAgICAgICAgIGNvbW1lbnQ6ICdzaWdpbCAod2l0aG91dCBpbnRlcnBvbGF0aW9uKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICd+W0EtWl1bXlxcd10nLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnW15cXHddW2Etel0qJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLm90aGVyLmxpdGVyYWwudXBwZXIuZWxpeGlyJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ3NpZ2lsICh3aXRob3V0IGludGVycG9sYXRpb24pJyB9LAogICAgICAgICB7IHRva2VuOiBbJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuZWxpeGlyJywgJ2NvbnN0YW50Lm90aGVyLnN5bWJvbC5lbGl4aXInXSwKICAgICAgICAgICByZWdleDogJyg6KShbYS16QS1aX11bXFx3QF0qKD86Wz8hXXw9KD8hWz49XSkpP3xcXDxcXD58PT09P3whPT0/fDw8Pj58PDw8fD4+Pnx+fn58Ojp8PFxcLXxcXHw+fD0+fH58fj18PXwvfFxcXFxcXFxcfFxcKlxcKj98XFwuXFwuP1xcLj98Pj0/fDw9P3wmJj8mP3xcXCtcXCs/fFxcLVxcLT98XFx8XFx8P1xcfD98XFwhfEB8XFwlP1xce1xcfXwlfFxcW1xcXXxcXF4oPzpcXF5cXF4pPyknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PCE6KSg6KSg/PlthLXpBLVpfXVtcXHdAXSooPz5bPyFdfD0oPyFbPj1dKSk/fFxcPFxcPnw9PT0/fCE9PT98PDw+Pnw8PDx8Pj4+fH5+fnw6Onw8XFwtfFxcfD58PT58fnx+PXw9fC98XFxcXFxcXFx8XFwqXFwqP3xcXC5cXC4/XFwuP3w+PT98PD0/fCYmPyY/fFxcK1xcKz98XFwtXFwtP3xcXHxcXHw/XFx8P3xcXCF8QHxcXCU/XFx7XFx9fCV8XFxbXFxdfFxcXihcXF5cXF4pPyknLAogICAgICAgICAgIGNvbW1lbnQ6ICdzeW1ib2xzJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb25zdGFudC5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnKD86W2EtekEtWl9dW1xcd0BdKig/Ols/IV0pPyk6KD8hOiknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PlthLXpBLVpfXVtcXHdAXSooPz5bPyFdKT8pKDopKD8hOiknLAogICAgICAgICAgIGNvbW1lbnQ6ICdzeW1ib2xzJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmVsaXhpcicsCiAgICAgICAgICAgICAgJ2NvbW1lbnQubGluZS5udW1iZXItc2lnbi5lbGl4aXInIF0sCiAgICAgICAgICAgcmVnZXg6ICcoIykoLiopJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubnVtZXJpYy5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFw/KD86XFxcXCg/OnhbXFxkYS1mQS1GXXsxLDJ9KD8hW1xcZGEtZkEtRl0pXFxifFteeE1DXSl8W15cXHNcXFxcXSknLAogICAgICAgICAgIFRPRE86ICdGSVhNRTogcmVnZXhwIGRvZXNuXCd0IGhhdmUganMgZXF1aXZhbGVudCcsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PCFcXHcpXFw/KFxcXFwoeFxcaHsxLDJ9KD8hXFxoKVxcYnxbXnhNQ10pfFteXFxzXFxcXF0pJywKICAgICAgICAgICBjb21tZW50OiAnXG5cdFx0XHRtYXRjaGVzIHF1ZXN0aW9ubWFyay1sZXR0ZXJzLlxuXG5cdFx0XHRleGFtcGxlcyAoMXN0IGFsdGVybmF0aW9uID0gaGV4KTpcblx0XHRcdD9cXHgxICAgICA/XFx4NjFcblxuXHRcdFx0ZXhhbXBsZXMgKDJyZCBhbHRlcm5hdGlvbiA9IGVzY2FwZWQpOlxuXHRcdFx0P1xcbiAgICAgID9cXGJcblxuXHRcdFx0ZXhhbXBsZXMgKDNyZCBhbHRlcm5hdGlvbiA9IG5vcm1hbCk6XG5cdFx0XHQ/YSAgICAgICA/QSAgICAgICA/MCBcblx0XHRcdD8qICAgICAgID8iICAgICAgID8oIFxuXHRcdFx0Py4gICAgICAgPyNcblx0XHRcdFxuXHRcdFx0dGhlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgcHJldmVudHMgYWdhaW5zdCBtYXRjaGluZ1xuXHRcdFx0cCg0Mi50YWludGVkPylcblx0XHRcdCcgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuYXNzaWdubWVudC5hdWdtZW50ZWQuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcKz18XFwtPXxcXHxcXHw9fH49fCYmPScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuY29tcGFyaXNvbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnPT09P3whPT0/fDw9P3w+PT8nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmJpdHdpc2UuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcfHszfXwmezN9fFxcXnszfXw8ezN9fD57M318fnszfScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IubG9naWNhbC5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnISt8XFxibm90XFxifCYmfFxcYmFuZFxcYnxcXHxcXHx8XFxib3JcXGJ8XFxieG9yXFxiJywKICAgICAgICAgICBvcmlnaW5hbFJlZ2V4OiAnKD88PVsgXFx0XSkhK3xcXGJub3RcXGJ8JiZ8XFxiYW5kXFxifFxcfFxcfHxcXGJvclxcYnxcXGJ4b3JcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmFyaXRobWV0aWMuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcKnxcXCt8XFwtfC8nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLm90aGVyLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXHx8XFwrXFwrfFxcLVxcLXxcXCpcXCp8XFxcXFxcXFx8XFw8XFwtfFxcPFxcPnxcXDxcXDx8XFw+XFw+fFxcOlxcOnxcXC5cXC58XFx8Pnx+fD0+JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmVsaXhpcicsIHJlZ2V4OiAnPScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5vdGhlci5lbGl4aXInLCByZWdleDogJzonIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3Iuc3RhdGVtZW50LmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXDsnIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZXBhcmF0b3Iub2JqZWN0LmVsaXhpcicsIHJlZ2V4OiAnLCcgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5tZXRob2QuZWxpeGlyJywgcmVnZXg6ICdcXC4nIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZWN0aW9uLnNjb3BlLmVsaXhpcicsIHJlZ2V4OiAnXFx7fFxcfScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uYXJyYXkuZWxpeGlyJywgcmVnZXg6ICdcXFt8XFxdJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VjdGlvbi5mdW5jdGlvbi5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFwofFxcKScgfSBdLAogICAgICAnI2VzY2FwZWRfY2hhcic6IAogICAgICAgWyB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5lbGl4aXInLAogICAgICAgICAgIHJlZ2V4OiAnXFxcXCg/OnhbXFxkYS1mQS1GXXsxLDJ9fC4pJyB9IF0sCiAgICAgICcjaW50ZXJwb2xhdGVkX2VsaXhpcic6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAnc291cmNlLmVsaXhpci5lbWJlZGRlZC5zb3VyY2UnLAogICAgICAgICAgICAgICdzb3VyY2UuZWxpeGlyLmVtYmVkZGVkLnNvdXJjZS5lbXB0eScgXSwKICAgICAgICAgICByZWdleDogJygjXFx7KShcXH0pJyB9LAogICAgICAgICB7IHRvZG86IAogICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VjdGlvbi5lbWJlZGRlZC5lbGl4aXInLAogICAgICAgICAgICAgIHJlZ2V4OiAnI1xceycsCiAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uZW1iZWRkZWQuZWxpeGlyJywKICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI25lc3RfY3VybHlfYW5kX3NlbGYnIH0sCiAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnJHNlbGYnIH0sCiAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzb3VyY2UuZWxpeGlyLmVtYmVkZGVkLnNvdXJjZScgfSBdIH0gfSBdLAogICAgICAnI25lc3RfY3VybHlfYW5kX3NlbGYnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uc2NvcGUuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xceycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlY3Rpb24uc2NvcGUuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI25lc3RfY3VybHlfYW5kX3NlbGYnIH0gXSB9LAogICAgICAgICB7IGluY2x1ZGU6ICckc2VsZicgfSBdLAogICAgICAnI3JlZ2V4X3N1Yic6IAogICAgICAgWyB7IGluY2x1ZGU6ICcjaW50ZXJwb2xhdGVkX2VsaXhpcicgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYXJiaXRyYXJ5LXJlcGl0aXRpb24uZWxpeGlyJywKICAgICAgICAgICAgICAnc3RyaW5nLnJlZ2V4cC5hcmJpdHJhcnktcmVwaXRpdGlvbi5lbGl4aXInLAogICAgICAgICAgICAgICdzdHJpbmcucmVnZXhwLmFyYml0cmFyeS1yZXBpdGl0aW9uLmVsaXhpcicsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYXJiaXRyYXJ5LXJlcGl0aXRpb24uZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxceykoXFxkKykoKD86LFxcZCspPykoXFx9KScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY2hhcmFjdGVyLWNsYXNzLmVsaXhpcicsCiAgICAgICAgICAgcmVnZXg6ICdcXFsoPzpcXF4/XFxdKT8nLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNoYXJhY3Rlci1jbGFzcy5lbGl4aXInLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnJlZ2V4cC5jaGFyYWN0ZXItY2xhc3MuZWxpeGlyJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZ3JvdXAuZWxpeGlyJywKICAgICAgICAgICByZWdleDogJ1xcKCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZ3JvdXAuZWxpeGlyJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3JlZ2V4X3N1YicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5yZWdleHAuZ3JvdXAuZWxpeGlyJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5lbGl4aXInLAogICAgICAgICAgICAgICdjb21tZW50LmxpbmUubnVtYmVyLXNpZ24uZWxpeGlyJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKD86XnxcXHMpKCMpKFxcc1tbYS16QS1aMC05LC4gXFx0PyEtXVteXFx4MDAtXFx4N0ZdXSokKScsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PD1efFxccykoIylcXHNbW2EtekEtWjAtOSwuIFxcdD8hLV1bXlxceHswMH0tXFx4ezdGfV1dKiQnLAogICAgICAgICAgIGNvbW1lbnQ6ICdXZSBhcmUgcmVzdHJpY3RpdmUgaW4gd2hhdCB3ZSBhbGxvdyB0byBnbyBhZnRlciB0aGUgY29tbWVudCBjaGFyYWN0ZXIgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzLCBzaW5jZSB0aGUgYXZhaWxhYmlsaXR5IG9mIGNvbW1lbnRzIGRlcGVuZCBvbiByZWdleHAgZmxhZ3MuJyB9IF0gfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKRWxpeGlySGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7IGNvbW1lbnQ6ICdUZXh0bWF0ZSBidW5kbGUgZm9yIEVsaXhpciBQcm9ncmFtbWluZyBMYW5ndWFnZS4nLAogICAgICBmaWxlVHlwZXM6IFsgJ2V4JywgJ2V4cycgXSwKICAgICAgZmlyc3RMaW5lTWF0Y2g6ICdeIyEvLipcXGJlbGl4aXInLAogICAgICBmb2xkaW5nU3RhcnRNYXJrZXI6ICcoYWZ0ZXJ8ZWxzZXxjYXRjaHxyZXNjdWV8XFwtXFw+fFxce3xcXFt8ZG8pXFxzKiQnLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJ15cXHMqKChcXH18XFxdfGFmdGVyfGVsc2V8Y2F0Y2h8cmVzY3VlKVxccyokfGVuZFxcYiknLAogICAgICBrZXlFcXVpdmFsZW50OiAnXn5FJywKICAgICAgbmFtZTogJ0VsaXhpcicsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5lbGl4aXInIH07CgoKb29wLmluaGVyaXRzKEVsaXhpckhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5FbGl4aXJIaWdobGlnaHRSdWxlcyA9IEVsaXhpckhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9lbGl4aXJfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2VsaXhpcl9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICAgIHZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdmFyIEVsaXhpckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9lbGl4aXJfaGlnaGxpZ2h0X3J1bGVzIikuRWxpeGlySGlnaGxpZ2h0UnVsZXM7CgogICAgdmFyIEh0bWxFbGl4aXJIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwoKICAgICAgICB2YXIgc3RhcnRSdWxlcyA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVnZXg6ICI8JSV8JSU+IiwKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LnN0YXJ0LmVleCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI8JSMiLAogICAgICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZW5kLmVleCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIlPiIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIsCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiJjb21tZW50IgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5lbGl4aXJfdGFnIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjwlKyg/IT4pWy09XT8iLAogICAgICAgICAgICAgICAgcHVzaCAgOiAiZWxpeGlyLXN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXTsKCiAgICAgICAgdmFyIGVuZFJ1bGVzID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmVsaXhpcl90YWciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJT4iLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIjKD86W14lXXwlW14+XSkqIgogICAgICAgICAgICB9CiAgICAgICAgXTsKCiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuJHJ1bGVzKQogICAgICAgICAgICB0aGlzLiRydWxlc1trZXldLnVuc2hpZnQuYXBwbHkodGhpcy4kcnVsZXNba2V5XSwgc3RhcnRSdWxlcyk7CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhFbGl4aXJIaWdobGlnaHRSdWxlcywgImVsaXhpci0iLCBlbmRSdWxlcywgWyJzdGFydCJdKTsKCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwogICAgfTsKCgogICAgb29wLmluaGVyaXRzKEh0bWxFbGl4aXJIaWdobGlnaHRSdWxlcywgSHRtbEhpZ2hsaWdodFJ1bGVzKTsKCiAgICBleHBvcnRzLkh0bWxFbGl4aXJIaWdobGlnaHRSdWxlcyA9IEh0bWxFbGl4aXJIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBwcm9wZXJ0eU1hcCA9IHsKICAgICJiYWNrZ3JvdW5kIjogeyIjJDAiOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogeyIjJDAiOiAxLCAidHJhbnNwYXJlbnQiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLWltYWdlIjogeyJ1cmwoJy8kMCcpIjogMX0sCiAgICAiYmFja2dyb3VuZC1yZXBlYXQiOiB7InJlcGVhdCI6IDEsICJyZXBlYXQteCI6IDEsICJyZXBlYXQteSI6IDEsICJuby1yZXBlYXQiOiAxLCAiaW5oZXJpdCI6IDF9LAogICAgImJhY2tncm91bmQtcG9zaXRpb24iOiB7ImJvdHRvbSI6MiwgImNlbnRlciI6MiwgImxlZnQiOjIsICJyaWdodCI6MiwgInRvcCI6MiwgImluaGVyaXQiOjJ9LAogICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IHsic2Nyb2xsIjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1zaXplIjogeyJjb3ZlciI6IDEsICJjb250YWluIjogMX0sCiAgICAiYmFja2dyb3VuZC1jbGlwIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYmFja2dyb3VuZC1vcmlnaW4iOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJib3JkZXIiOiB7InNvbGlkICQwIjogMSwgImRhc2hlZCAkMCI6IDEsICJkb3R0ZWQgJDAiOiAxLCAiIyQwIjogMX0sCiAgICAiYm9yZGVyLWNvbG9yIjogeyIjJDAiOiAxfSwKICAgICJib3JkZXItc3R5bGUiOiB7InNvbGlkIjoyLCAiZGFzaGVkIjoyLCAiZG90dGVkIjoyLCAiZG91YmxlIjoyLCAiZ3Jvb3ZlIjoyLCAiaGlkZGVuIjoyLCAiaW5oZXJpdCI6MiwgImluc2V0IjoyLCAibm9uZSI6MiwgIm91dHNldCI6MiwgInJpZGdlZCI6Mn0sCiAgICAiYm9yZGVyLWNvbGxhcHNlIjogeyJjb2xsYXBzZSI6IDEsICJzZXBhcmF0ZSI6IDF9LAogICAgImJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImNsZWFyIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImJvdGgiOiAxLCAibm9uZSI6IDF9LAogICAgImNvbG9yIjogeyIjJDAiOiAxLCAicmdiKCMkMDAsMCwwKSI6IDF9LAogICAgImN1cnNvciI6IHsiZGVmYXVsdCI6IDEsICJwb2ludGVyIjogMSwgIm1vdmUiOiAxLCAidGV4dCI6IDEsICJ3YWl0IjogMSwgImhlbHAiOiAxLCAicHJvZ3Jlc3MiOiAxLCAibi1yZXNpemUiOiAxLCAibmUtcmVzaXplIjogMSwgImUtcmVzaXplIjogMSwgInNlLXJlc2l6ZSI6IDEsICJzLXJlc2l6ZSI6IDEsICJzdy1yZXNpemUiOiAxLCAidy1yZXNpemUiOiAxLCAibnctcmVzaXplIjogMX0sCiAgICAiZGlzcGxheSI6IHsibm9uZSI6IDEsICJibG9jayI6IDEsICJpbmxpbmUiOiAxLCAiaW5saW5lLWJsb2NrIjogMSwgInRhYmxlLWNlbGwiOiAxfSwKICAgICJlbXB0eS1jZWxscyI6IHsic2hvdyI6IDEsICJoaWRlIjogMX0sCiAgICAiZmxvYXQiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAibm9uZSI6IDF9LAogICAgImZvbnQtZmFtaWx5IjogeyJBcmlhbCI6MiwiQ29taWMgU2FucyBNUyI6MiwiQ29uc29sYXMiOjIsIkNvdXJpZXIgTmV3IjoyLCJDb3VyaWVyIjoyLCJHZW9yZ2lhIjoyLCJNb25vc3BhY2UiOjIsIlNhbnMtU2VyaWYiOjIsICJTZWdvZSBVSSI6MiwiVGFob21hIjoyLCJUaW1lcyBOZXcgUm9tYW4iOjIsIlRyZWJ1Y2hldCBNUyI6MiwiVmVyZGFuYSI6IDF9LAogICAgImZvbnQtc2l6ZSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImZvbnQtd2VpZ2h0IjogeyJib2xkIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtc3R5bGUiOiB7Iml0YWxpYyI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXZhcmlhbnQiOiB7Im5vcm1hbCI6IDEsICJzbWFsbC1jYXBzIjogMX0sCiAgICAiaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxldHRlci1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJsaW5lLWhlaWdodCI6IHsibm9ybWFsIjogMX0sCiAgICAibGlzdC1zdHlsZS10eXBlIjogeyJub25lIjogMSwgImRpc2MiOiAxLCAiY2lyY2xlIjogMSwgInNxdWFyZSI6IDEsICJkZWNpbWFsIjogMSwgImRlY2ltYWwtbGVhZGluZy16ZXJvIjogMSwgImxvd2VyLXJvbWFuIjogMSwgInVwcGVyLXJvbWFuIjogMSwgImxvd2VyLWdyZWVrIjogMSwgImxvd2VyLWxhdGluIjogMSwgInVwcGVyLWxhdGluIjogMSwgImdlb3JnaWFuIjogMSwgImxvd2VyLWFscGhhIjogMSwgInVwcGVyLWFscGhhIjogMX0sCiAgICAibWFyZ2luIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLWJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtd2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4taGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAib3ZlcmZsb3ciOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteCI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy15IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgInBhZGRpbmciOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZ2UtYnJlYWstYWZ0ZXIiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwYWdlLWJyZWFrLWJlZm9yZSI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBvc2l0aW9uIjogeyJhYnNvbHV0ZSI6IDEsICJyZWxhdGl2ZSI6IDEsICJmaXhlZCI6IDEsICJzdGF0aWMiOiAxfSwKICAgICJyaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInRhYmxlLWxheW91dCI6IHsiZml4ZWQiOiAxLCAiYXV0byI6IDF9LAogICAgInRleHQtZGVjb3JhdGlvbiI6IHsibm9uZSI6IDEsICJ1bmRlcmxpbmUiOiAxLCAibGluZS10aHJvdWdoIjogMSwgImJsaW5rIjogMX0sCiAgICAidGV4dC1hbGlnbiI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJjZW50ZXIiOiAxLCAianVzdGlmeSI6IDF9LAogICAgInRleHQtdHJhbnNmb3JtIjogeyJjYXBpdGFsaXplIjogMSwgInVwcGVyY2FzZSI6IDEsICJsb3dlcmNhc2UiOiAxLCAibm9uZSI6IDF9LAogICAgInRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInZlcnRpY2FsLWFsaWduIjogeyJ0b3AiOiAxLCAiYm90dG9tIjogMX0sCiAgICAidmlzaWJpbGl0eSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxfSwKICAgICJ3aGl0ZS1zcGFjZSI6IHsibm93cmFwIjogMSwgIm5vcm1hbCI6IDEsICJwcmUiOiAxLCAicHJlLWxpbmUiOiAxLCAicHJlLXdyYXAiOiAxfSwKICAgICJ3aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIndvcmQtc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAiZmlsdGVyIjogeyJhbHBoYShvcGFjaXR5PSQwMTAwKSI6IDF9LAoKICAgICJ0ZXh0LXNoYWRvdyI6IHsiJDAycHggMnB4IDJweCAjNzc3IjogMX0sCiAgICAidGV4dC1vdmVyZmxvdyI6IHsiZWxsaXBzaXMtd29yZCI6IDEsICJjbGlwIjogMSwgImVsbGlwc2lzIjogMX0sCiAgICAiLW1vei1ib3JkZXItcmFkaXVzIjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IjogMSwKICAgICItd2Via2l0LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjogMSwKICAgICItbW96LWJveC1zaGFkb3ciOiAxLAogICAgIi13ZWJraXQtYm94LXNoYWRvdyI6IDEsCiAgICAidHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItbW96LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLXdlYmtpdC10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDEgfQp9OwoKdmFyIENzc0NvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7Cgp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gZmFsc2U7CgogICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChkb2N1bWVudCkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjJykuc3R5bGU7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIHN0eWxlKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlW2ldICE9PSAnc3RyaW5nJykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGkucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnLScgKyB4LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5TWFwLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwW25hbWVdID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSB0cnVlOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgaWYgKCF0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCkgewogICAgICAgICAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGU9PT0ncnVsZXNldCcgfHwgc2Vzc2lvbi4kbW9kZS4kaWQgPT0gImFjZS9tb2RlL3Njc3MiKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgaWYgKC86W147XSskLy50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgICAgICAvKFtcd1wtXSspOlteOl0qJC8udGVzdChsaW5lKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtdOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwKTsKICAgICAgICByZXR1cm4gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24ocHJvcGVydHkpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogcHJvcGVydHksCiAgICAgICAgICAgICAgICBzbmlwcGV0OiBwcm9wZXJ0eSArICc6ICQwOycsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgdmFyIHByb3BlcnR5ID0gKC8oW1x3XC1dKyk6W146XSokLy5leGVjKGxpbmUpIHx8IHt9KVsxXTsKCiAgICAgICAgaWYgKCFwcm9wZXJ0eSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKICAgICAgICBpZiAocHJvcGVydHkgaW4gcHJvcGVydHlNYXAgJiYgdHlwZW9mIHByb3BlcnR5TWFwW3Byb3BlcnR5XSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXBbcHJvcGVydHldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSB2YWx1ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoQ3NzQ29tcGxldGlvbnMucHJvdG90eXBlKTsKCmV4cG9ydHMuQ3NzQ29tcGxldGlvbnMgPSBDc3NDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgQ3NzQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewoKICAgIHRoaXMuaW5oZXJpdChDc3R5bGVCZWhhdmlvdXIpOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc6JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgvXihccytbXjtdfFxzKiQpLy50ZXN0KGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJzo7JywKICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiY29sb24iLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09PSAnOicpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzZW1pY29sb24iLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnOycgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAogICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiIWltcG9ydGFudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICchJyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKCiAgICAgICAgICAgIGlmICgvXlxzKig7fH18JCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICchaW1wb3J0YW50JywKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxMCwgMTBdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9Owpvb3AuaW5oZXJpdHMoQ3NzQmVoYXZpb3VyLCBDc3R5bGVCZWhhdmlvdXIpOwoKZXhwb3J0cy5Dc3NCZWhhdmlvdXIgPSBDc3NCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3MiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciBDc3NDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vY3NzX2NvbXBsZXRpb25zIikuQ3NzQ29tcGxldGlvbnM7CnZhciBDc3NCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3NzQmVoYXZpb3VyKCk7CiAgICB0aGlzLiRjb21wbGV0ZXIgPSBuZXcgQ3NzQ29tcGxldGlvbnMoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxlIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9jc3Nfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NzcyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvbGliL2xhbmciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuICYmIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKdmFyIFhtbEJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICciJyB8fCB0ZXh0ID09ICInIikgewogICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OwogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UoZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHNlbGVjdGVkICsgcXVvdGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gcXVvdGUgJiYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikgfHwgaXModG9rZW4sICJzdHJpbmciKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwoKICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHdoaWxlIChpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJ3aGl0ZXNwYWNlIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJpZ2h0U3BhY2UgPSAhcmlnaHRDaGFyIHx8IHJpZ2h0Q2hhci5tYXRjaCgvXHMvKTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPicpIHx8IChpcyh0b2tlbiwgImRlY2wtYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICc+JykgewogICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhKGlzKHRva2VuLCAidGFnLW5hbWUiKSB8fCBpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJyZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5FbmRDb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCB0b2tlbkVuZENvbHVtbikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IHRva2VuRW5kQ29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBpcyhuZXh0VG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoL15ccyo+Ly50ZXN0KHNlc3Npb24uZ2V0TGluZShwb3NpdGlvbi5yb3cpLnNsaWNlKHBvc2l0aW9uLmNvbHVtbikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB3aGlsZSAoIWlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciB0b2tlblJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICB2YXIgdG9rZW5Db2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICAgICAgaWYgKGlzKGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBpZiAodG9rZW5Sb3cgPT0gcG9zaXRpb24ucm93KQogICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuQ29sdW1uKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eShlbGVtZW50LnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgIHRleHQ6ICI+IiArICI8LyIgKyBlbGVtZW50ICsgIj4iLAogICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJhdXRvaW5kZW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAiXG4iKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1jbG9zZSIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09ICIvPiIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdmFyIHJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5pbmRleE9mKCJlbmQtdGFnIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cyAmJiAhdGhpcy52b2lkRWxlbWVudHNbdGFnXSkgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbisxKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSBuZXh0SW5kZW50ICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICI8LyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQgKyAiXG4iICsgbmV4dEluZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cgpvb3AuaW5oZXJpdHMoWG1sQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwoKZXhwb3J0cy5YbWxCZWhhdmlvdXIgPSBYbWxCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oZGVmYXVsdE1vZGUsIHN1Yk1vZGVzKSB7CiAgICB0aGlzLmRlZmF1bHRNb2RlID0gZGVmYXVsdE1vZGU7CiAgICB0aGlzLnN1Yk1vZGVzID0gc3ViTW9kZXM7Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCgogICAgdGhpcy4kZ2V0TW9kZSA9IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSAhPSAic3RyaW5nIikgCiAgICAgICAgICAgIHN0YXRlID0gc3RhdGVbMF07CiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuc3ViTW9kZXMpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGV4T2Yoa2V5KSA9PT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Yk1vZGVzW2tleV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy4kdHJ5TW9kZSA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShzdGF0ZSk7CiAgICAgICAgcmV0dXJuIChtb2RlID8gbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSA6ICIiKTsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICByZXR1cm4gKAogICAgICAgICAgICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdyksIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB8fAogICAgICAgICAgICB0aGlzLmRlZmF1bHRNb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpCiAgICAgICAgKTsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBtb2RlID0gdGhpcy4kZ2V0TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSk7CiAgICAgICAgCiAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQogICAgICAgICAgICBtb2RlID0gdGhpcy4kZ2V0TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdykpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuZGVmYXVsdE1vZGU7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG1vZGUuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbih2b2lkRWxlbWVudHMsIG9wdGlvbmFsRW5kVGFncykgewogICAgQmFzZUZvbGRNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IHZvaWRFbGVtZW50cyB8fCB7fTsKICAgIHRoaXMub3B0aW9uYWxFbmRUYWdzID0gb29wLm1peGluKHt9LCB0aGlzLnZvaWRFbGVtZW50cyk7CiAgICBpZiAob3B0aW9uYWxFbmRUYWdzKQogICAgICAgIG9vcC5taXhpbih0aGlzLm9wdGlvbmFsRW5kVGFncywgb3B0aW9uYWxFbmRUYWdzKTsKICAgIAp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7Cgp2YXIgVGFnID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLnRhZ05hbWUgPSAiIjsKICAgIHRoaXMuY2xvc2luZyA9IGZhbHNlOwogICAgdGhpcy5zZWxmQ2xvc2luZyA9IGZhbHNlOwogICAgdGhpcy5zdGFydCA9IHtyb3c6IDAsIGNvbHVtbjogMH07CiAgICB0aGlzLmVuZCA9IHtyb3c6IDAsIGNvbHVtbjogMH07Cn07CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJvdyk7CgogICAgICAgIGlmICghdGFnKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50Rm9sZFdpZGdldChzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAodGFnLmNsb3NpbmcgfHwgKCF0YWcudGFnTmFtZSAmJiB0YWcuc2VsZkNsb3NpbmcpKQogICAgICAgICAgICByZXR1cm4gZm9sZFN0eWxlID09ICJtYXJrYmVnaW5lbmQiID8gImVuZCIgOiAiIjsKCiAgICAgICAgaWYgKCF0YWcudGFnTmFtZSB8fCB0YWcuc2VsZkNsb3NpbmcgfHwgdGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkodGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgIHJldHVybiAiIjsKCiAgICAgICAgaWYgKHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUoc2Vzc2lvbiwgcm93LCB0YWcudGFnTmFtZSwgdGFnLmVuZC5jb2x1bW4pKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIHJldHVybiAic3RhcnQiOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRDb21tZW50Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIGlmICgvY29tbWVudC8udGVzdChzZXNzaW9uLmdldFN0YXRlKHJvdykpICYmIC88IS0vLnRlc3Qoc2Vzc2lvbi5nZXRMaW5lKHJvdykpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICByZXR1cm4gIiI7CiAgICB9OwogICAgdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gdGFnLnN0YXJ0LmNvbHVtbiArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIHRhZy5jbG9zaW5nID0gaXModG9rZW4sICJlbmQtdGFnLW9wZW4iKTsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zWysraV07CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGZvciAoaSsrOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07CiAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gJy8+JzsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CgogICAgdGhpcy5fZmluZEVuZFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdywgdGFnTmFtZSwgc3RhcnRDb2x1bW4pIHsKICAgICAgICB2YXIgdG9rZW5zID0gc2Vzc2lvbi5nZXRUb2tlbnMocm93KTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV07CiAgICAgICAgICAgIGNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIGlmIChjb2x1bW4gPCBzdGFydENvbHVtbikKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJlbmQtdGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaSArIDFdOwogICAgICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlID09IHRhZ05hbWUpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuX3JlYWRUYWdGb3J3YXJkID0gZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRhZy5jbG9zaW5nID0gaXModG9rZW4sICJlbmQtdGFnLW9wZW4iKTsKICAgICAgICAgICAgICAgIHRhZy5zdGFydC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gIi8+IjsKICAgICAgICAgICAgICAgIHRhZy5lbmQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcmVhZFRhZ0JhY2t3YXJkID0gZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRhZy5jbG9zaW5nID0gaXModG9rZW4sICJlbmQtdGFnLW9wZW4iKTsKICAgICAgICAgICAgICAgIHRhZy5zdGFydC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gIi8+IjsKICAgICAgICAgICAgICAgIHRhZy5lbmQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpKTsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLl9wb3AgPSBmdW5jdGlvbihzdGFjaywgdGFnKSB7CiAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHRvcCA9IHN0YWNrW3N0YWNrLmxlbmd0aC0xXTsKICAgICAgICAgICAgaWYgKCF0YWcgfHwgdG9wLnRhZ05hbWUgPT0gdGFnLnRhZ05hbWUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5wb3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbmFsRW5kVGFncy5oYXNPd25Qcm9wZXJ0eSh0b3AudGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgZmlyc3RUYWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwogICAgICAgIAogICAgICAgIGlmICghZmlyc3RUYWcpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KQogICAgICAgICAgICAgICAgJiYgc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgc2Vzc2lvbi5nZXRMaW5lKHJvdykubGVuZ3RoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmFyIGlzQmFja3dhcmQgPSBmaXJzdFRhZy5jbG9zaW5nIHx8IGZpcnN0VGFnLnNlbGZDbG9zaW5nOwogICAgICAgIHZhciBzdGFjayA9IFtdOwogICAgICAgIHZhciB0YWc7CiAgICAgICAgCiAgICAgICAgaWYgKCFpc0JhY2t3YXJkKSB7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHJvdywgZmlyc3RUYWcuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbiArIGZpcnN0VGFnLnRhZ05hbWUubGVuZ3RoICsgMgogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoZmlyc3RUYWcuc3RhcnQucm93ID09IGZpcnN0VGFnLmVuZC5yb3cpCiAgICAgICAgICAgICAgICBzdGFydC5jb2x1bW4gPSBmaXJzdFRhZy5lbmQuY29sdW1uOwogICAgICAgICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0ZvcndhcmQoaXRlcmF0b3IpKSB7CiAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIHRhZy5lbmQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKHRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHMoc3RhcnQsIHRhZy5zdGFydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRhZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHJvdywgZmlyc3RUYWcuZW5kLmNvbHVtbik7CiAgICAgICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogZmlyc3RUYWcuc3RhcnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIAogICAgICAgICAgICB3aGlsZSAodGFnID0gdGhpcy5fcmVhZFRhZ0JhY2t3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICghdGFnLmNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZy5zdGFydC5yb3cgPT0gdGFnLmVuZC5yb3cgJiYgdGFnLnN0YXJ0LmNvbHVtbiA8IHRhZy5lbmQuY29sdW1uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IHRhZy5lbmQuY29sdW1uOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIGVuZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgTWl4ZWRGb2xkTW9kZSA9IHJlcXVpcmUoIi4vbWl4ZWQiKS5Gb2xkTW9kZTsKdmFyIFhtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi94bWwiKS5Gb2xkTW9kZTsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbih2b2lkRWxlbWVudHMsIG9wdGlvbmFsVGFncykgewogICAgTWl4ZWRGb2xkTW9kZS5jYWxsKHRoaXMsIG5ldyBYbWxGb2xkTW9kZSh2b2lkRWxlbWVudHMsIG9wdGlvbmFsVGFncyksIHsKICAgICAgICAianMtIjogbmV3IENTdHlsZUZvbGRNb2RlKCksCiAgICAgICAgImNzcy0iOiBuZXcgQ1N0eWxlRm9sZE1vZGUoKQogICAgfSk7Cn07Cgpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIE1peGVkRm9sZE1vZGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfY29tcGxldGlvbnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIGNvbW1vbkF0dHJpYnV0ZXMgPSBbCiAgICAiYWNjZXNza2V5IiwKICAgICJjbGFzcyIsCiAgICAiY29udGVudGVkaXRhYmxlIiwKICAgICJjb250ZXh0bWVudSIsCiAgICAiZGlyIiwKICAgICJkcmFnZ2FibGUiLAogICAgImRyb3B6b25lIiwKICAgICJoaWRkZW4iLAogICAgImlkIiwKICAgICJpbmVydCIsCiAgICAiaXRlbWlkIiwKICAgICJpdGVtcHJvcCIsCiAgICAiaXRlbXJlZiIsCiAgICAiaXRlbXNjb3BlIiwKICAgICJpdGVtdHlwZSIsCiAgICAibGFuZyIsCiAgICAic3BlbGxjaGVjayIsCiAgICAic3R5bGUiLAogICAgInRhYmluZGV4IiwKICAgICJ0aXRsZSIsCiAgICAidHJhbnNsYXRlIgpdOwoKdmFyIGV2ZW50QXR0cmlidXRlcyA9IFsKICAgICJvbmFib3J0IiwKICAgICJvbmJsdXIiLAogICAgIm9uY2FuY2VsIiwKICAgICJvbmNhbnBsYXkiLAogICAgIm9uY2FucGxheXRocm91Z2giLAogICAgIm9uY2hhbmdlIiwKICAgICJvbmNsaWNrIiwKICAgICJvbmNsb3NlIiwKICAgICJvbmNvbnRleHRtZW51IiwKICAgICJvbmN1ZWNoYW5nZSIsCiAgICAib25kYmxjbGljayIsCiAgICAib25kcmFnIiwKICAgICJvbmRyYWdlbmQiLAogICAgIm9uZHJhZ2VudGVyIiwKICAgICJvbmRyYWdsZWF2ZSIsCiAgICAib25kcmFnb3ZlciIsCiAgICAib25kcmFnc3RhcnQiLAogICAgIm9uZHJvcCIsCiAgICAib25kdXJhdGlvbmNoYW5nZSIsCiAgICAib25lbXB0aWVkIiwKICAgICJvbmVuZGVkIiwKICAgICJvbmVycm9yIiwKICAgICJvbmZvY3VzIiwKICAgICJvbmlucHV0IiwKICAgICJvbmludmFsaWQiLAogICAgIm9ua2V5ZG93biIsCiAgICAib25rZXlwcmVzcyIsCiAgICAib25rZXl1cCIsCiAgICAib25sb2FkIiwKICAgICJvbmxvYWRlZGRhdGEiLAogICAgIm9ubG9hZGVkbWV0YWRhdGEiLAogICAgIm9ubG9hZHN0YXJ0IiwKICAgICJvbm1vdXNlZG93biIsCiAgICAib25tb3VzZW1vdmUiLAogICAgIm9ubW91c2VvdXQiLAogICAgIm9ubW91c2VvdmVyIiwKICAgICJvbm1vdXNldXAiLAogICAgIm9ubW91c2V3aGVlbCIsCiAgICAib25wYXVzZSIsCiAgICAib25wbGF5IiwKICAgICJvbnBsYXlpbmciLAogICAgIm9ucHJvZ3Jlc3MiLAogICAgIm9ucmF0ZWNoYW5nZSIsCiAgICAib25yZXNldCIsCiAgICAib25zY3JvbGwiLAogICAgIm9uc2Vla2VkIiwKICAgICJvbnNlZWtpbmciLAogICAgIm9uc2VsZWN0IiwKICAgICJvbnNob3ciLAogICAgIm9uc3RhbGxlZCIsCiAgICAib25zdWJtaXQiLAogICAgIm9uc3VzcGVuZCIsCiAgICAib250aW1ldXBkYXRlIiwKICAgICJvbnZvbHVtZWNoYW5nZSIsCiAgICAib253YWl0aW5nIgpdOwoKdmFyIGdsb2JhbEF0dHJpYnV0ZXMgPSBjb21tb25BdHRyaWJ1dGVzLmNvbmNhdChldmVudEF0dHJpYnV0ZXMpOwoKdmFyIGF0dHJpYnV0ZU1hcCA9IHsKICAgICJhIjogeyJocmVmIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9LCAicGluZyI6IDEsICJyZWwiOiB7Im5vZm9sbG93IjogMSwgImFsdGVybmF0ZSI6IDEsICJhdXRob3IiOiAxLCAiYm9va21hcmsiOiAxLCAiaGVscCI6IDEsICJsaWNlbnNlIjogMSwgIm5leHQiOiAxLCAibm9yZWZlcnJlciI6IDEsICJwcmVmZXRjaCI6IDEsICJwcmV2IjogMSwgInNlYXJjaCI6IDEsICJ0YWciOiAxfSwgIm1lZGlhIjogMSwgImhyZWZsYW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhYmJyIjoge30sCiAgICAiYWRkcmVzcyI6IHt9LAogICAgImFyZWEiOiB7InNoYXBlIjogMSwgImNvb3JkcyI6IDEsICJocmVmIjogMSwgImhyZWZsYW5nIjogMSwgImFsdCI6IDEsICJ0YXJnZXQiOiAxLCAibWVkaWEiOiAxLCAicmVsIjogMSwgInBpbmciOiAxLCAidHlwZSI6IDF9LAogICAgImFydGljbGUiOiB7InB1YmRhdGUiOiAxfSwKICAgICJhc2lkZSI6IHt9LAogICAgImF1ZGlvIjogeyJzcmMiOiAxLCAiYXV0b2J1ZmZlciI6IDEsICJhdXRvcGxheSI6IHsiYXV0b3BsYXkiOiAxfSwgImxvb3AiOiB7Imxvb3AiOiAxfSwgImNvbnRyb2xzIjogeyJjb250cm9scyI6IDF9LCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxIH19LAogICAgImIiOiB7fSwKICAgICJiYXNlIjogeyJocmVmIjogMSwgInRhcmdldCI6IDF9LAogICAgImJkaSI6IHt9LAogICAgImJkbyI6IHt9LAogICAgImJsb2NrcXVvdGUiOiB7ImNpdGUiOiAxfSwKICAgICJib2R5IjogeyJvbmFmdGVycHJpbnQiOiAxLCAib25iZWZvcmVwcmludCI6IDEsICJvbmJlZm9yZXVubG9hZCI6IDEsICJvbmhhc2hjaGFuZ2UiOiAxLCAib25tZXNzYWdlIjogMSwgIm9ub2ZmbGluZSI6IDEsICJvbnBvcHN0YXRlIjogMSwgIm9ucmVkbyI6IDEsICJvbnJlc2l6ZSI6IDEsICJvbnN0b3JhZ2UiOiAxLCAib251bmRvIjogMSwgIm9udW5sb2FkIjogMX0sCiAgICAiYnIiOiB7fSwKICAgICJidXR0b24iOiB7ImF1dG9mb2N1cyI6IDEsICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAiZm9ybWFjdGlvbiI6IDEsICJmb3JtZW5jdHlwZSI6IDEsICJmb3JtbWV0aG9kIjogMSwgImZvcm1ub3ZhbGlkYXRlIjogMSwgImZvcm10YXJnZXQiOiAxLCAibmFtZSI6IDEsICJ2YWx1ZSI6IDEsICJ0eXBlIjogeyJidXR0b24iOiAxLCAic3VibWl0IjogMX19LAogICAgImNhbnZhcyI6IHsid2lkdGgiOiAxLCAiaGVpZ2h0IjogMX0sCiAgICAiY2FwdGlvbiI6IHt9LAogICAgImNpdGUiOiB7fSwKICAgICJjb2RlIjoge30sCiAgICAiY29sIjogeyJzcGFuIjogMX0sCiAgICAiY29sZ3JvdXAiOiB7InNwYW4iOiAxfSwKICAgICJjb21tYW5kIjogeyJ0eXBlIjogMSwgImxhYmVsIjogMSwgImljb24iOiAxLCAiZGlzYWJsZWQiOiAxLCAiY2hlY2tlZCI6IDEsICJyYWRpb2dyb3VwIjogMSwgImNvbW1hbmQiOiAxfSwKICAgICJkYXRhIjoge30sCiAgICAiZGF0YWxpc3QiOiB7fSwKICAgICJkZCI6IHt9LAogICAgImRlbCI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImRldGFpbHMiOiB7Im9wZW4iOiAxfSwKICAgICJkZm4iOiB7fSwKICAgICJkaWFsb2ciOiB7Im9wZW4iOiAxfSwKICAgICJkaXYiOiB7fSwKICAgICJkbCI6IHt9LAogICAgImR0Ijoge30sCiAgICAiZW0iOiB7fSwKICAgICJlbWJlZCI6IHsic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ0eXBlIjogMX0sCiAgICAiZmllbGRzZXQiOiB7ImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgImZpZ2NhcHRpb24iOiB7fSwKICAgICJmaWd1cmUiOiB7fSwKICAgICJmb290ZXIiOiB7fSwKICAgICJmb3JtIjogeyJhY2NlcHQtY2hhcnNldCI6IDEsICJhY3Rpb24iOiAxLCAiYXV0b2NvbXBsZXRlIjogMSwgImVuY3R5cGUiOiB7Im11bHRpcGFydC9mb3JtLWRhdGEiOiAxLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjogMX0sICJtZXRob2QiOiB7ImdldCI6IDEsICJwb3N0IjogMX0sICJuYW1lIjogMSwgIm5vdmFsaWRhdGUiOiAxLCAidGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAidG9wIjogMX19LAogICAgImgxIjoge30sCiAgICAiaDIiOiB7fSwKICAgICJoMyI6IHt9LAogICAgImg0Ijoge30sCiAgICAiaDUiOiB7fSwKICAgICJoNiI6IHt9LAogICAgImhlYWQiOiB7fSwKICAgICJoZWFkZXIiOiB7fSwKICAgICJociI6IHt9LAogICAgImh0bWwiOiB7Im1hbmlmZXN0IjogMX0sCiAgICAiaSI6IHt9LAogICAgImlmcmFtZSI6IHsibmFtZSI6IDEsICJzcmMiOiAxLCAiaGVpZ2h0IjogMSwgIndpZHRoIjogMSwgInNhbmRib3giOiB7ImFsbG93LXNhbWUtb3JpZ2luIjogMSwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIjogMSwgImFsbG93LWZvcm1zIjogMSwgImFsbG93LXNjcmlwdHMiOiAxfSwgInNlYW1sZXNzIjogeyJzZWFtbGVzcyI6IDF9fSwKICAgICJpbWciOiB7ImFsdCI6IDEsICJzcmMiOiAxLCAiaGVpZ2h0IjogMSwgIndpZHRoIjogMSwgInVzZW1hcCI6IDEsICJpc21hcCI6IDF9LAogICAgImlucHV0IjogewogICAgICAgICJ0eXBlIjogeyJ0ZXh0IjogMSwgInBhc3N3b3JkIjogMSwgImhpZGRlbiI6IDEsICJjaGVja2JveCI6IDEsICJzdWJtaXQiOiAxLCAicmFkaW8iOiAxLCAiZmlsZSI6IDEsICJidXR0b24iOiAxLCAicmVzZXQiOiAxLCAiaW1hZ2UiOiAzMSwgImNvbG9yIjogMSwgImRhdGUiOiAxLCAiZGF0ZXRpbWUiOiAxLCAiZGF0ZXRpbWUtbG9jYWwiOiAxLCAiZW1haWwiOiAxLCAibW9udGgiOiAxLCAibnVtYmVyIjogMSwgInJhbmdlIjogMSwgInNlYXJjaCI6IDEsICJ0ZWwiOiAxLCAidGltZSI6IDEsICJ1cmwiOiAxLCAid2VlayI6IDF9LAogICAgICAgICJhY2NlcHQiOiAxLCAiYWx0IjogMSwgImF1dG9jb21wbGV0ZSI6IHsib24iOiAxLCAib2ZmIjogMX0sICJhdXRvZm9jdXMiOiB7ImF1dG9mb2N1cyI6IDF9LCAiY2hlY2tlZCI6IHsiY2hlY2tlZCI6IDF9LCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiB7ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDEsICJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgInRleHQvcGxhaW4iOiAxfSwgImZvcm1tZXRob2QiOiB7ImdldCI6IDEsICJwb3N0IjogMX0sICJmb3Jtbm92YWxpZGF0ZSI6IHsiZm9ybW5vdmFsaWRhdGUiOiAxfSwgImZvcm10YXJnZXQiOiB7Il9ibGFuayI6IDEsICJfc2VsZiI6IDEsICJfcGFyZW50IjogMSwgIl90b3AiOiAxfSwgImhlaWdodCI6IDEsICJsaXN0IjogMSwgIm1heCI6IDEsICJtYXhsZW5ndGgiOiAxLCAibWluIjogMSwgIm11bHRpcGxlIjogeyJtdWx0aXBsZSI6IDF9LCAibmFtZSI6IDEsICJwYXR0ZXJuIjogMSwgInBsYWNlaG9sZGVyIjogMSwgInJlYWRvbmx5IjogeyJyZWFkb25seSI6IDF9LCAicmVxdWlyZWQiOiB7InJlcXVpcmVkIjogMX0sICJzaXplIjogMSwgInNyYyI6IDEsICJzdGVwIjogMSwgIndpZHRoIjogMSwgImZpbGVzIjogMSwgInZhbHVlIjogMX0sCiAgICAiaW5zIjogeyJjaXRlIjogMSwgImRhdGV0aW1lIjogMX0sCiAgICAia2JkIjoge30sCiAgICAia2V5Z2VuIjogeyJhdXRvZm9jdXMiOiAxLCAiY2hhbGxlbmdlIjogeyJjaGFsbGVuZ2UiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJrZXl0eXBlIjogeyJyc2EiOiAxLCAiZHNhIjogMSwgImVjIjogMX0sICJuYW1lIjogMX0sCiAgICAibGFiZWwiOiB7ImZvcm0iOiAxLCAiZm9yIjogMX0sCiAgICAibGVnZW5kIjoge30sCiAgICAibGkiOiB7InZhbHVlIjogMX0sCiAgICAibGluayI6IHsiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJyZWwiOiB7InN0eWxlc2hlZXQiOiAxLCAiaWNvbiI6IDF9LCAibWVkaWEiOiB7ImFsbCI6IDEsICJzY3JlZW4iOiAxLCAicHJpbnQiOiAxfSwgInR5cGUiOiB7InRleHQvY3NzIjogMSwgImltYWdlL3BuZyI6IDEsICJpbWFnZS9qcGVnIjogMSwgImltYWdlL2dpZiI6IDF9LCAic2l6ZXMiOiAxfSwKICAgICJtYWluIjoge30sCiAgICAibWFwIjogeyJuYW1lIjogMX0sCiAgICAibWFyayI6IHt9LAogICAgIm1hdGgiOiB7fSwKICAgICJtZW51IjogeyJ0eXBlIjogMSwgImxhYmVsIjogMX0sCiAgICAibWV0YSI6IHsiaHR0cC1lcXVpdiI6IHsiY29udGVudC10eXBlIjogMX0sICJuYW1lIjogeyJkZXNjcmlwdGlvbiI6IDEsICJrZXl3b3JkcyI6IDF9LCAiY29udGVudCI6IHsidGV4dC9odG1sOyBjaGFyc2V0PVVURi04IjogMX0sICJjaGFyc2V0IjogMX0sCiAgICAibWV0ZXIiOiB7InZhbHVlIjogMSwgIm1pbiI6IDEsICJtYXgiOiAxLCAibG93IjogMSwgImhpZ2giOiAxLCAib3B0aW11bSI6IDF9LAogICAgIm5hdiI6IHt9LAogICAgIm5vc2NyaXB0IjogeyJocmVmIjogMX0sCiAgICAib2JqZWN0IjogeyJwYXJhbSI6IDEsICJkYXRhIjogMSwgInR5cGUiOiAxLCAiaGVpZ2h0IiA6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAibmFtZSI6IDEsICJmb3JtIjogMSwgImNsYXNzaWQiOiAxfSwKICAgICJvbCI6IHsic3RhcnQiOiAxLCAicmV2ZXJzZWQiOiAxfSwKICAgICJvcHRncm91cCI6IHsiZGlzYWJsZWQiOiAxLCAibGFiZWwiOiAxfSwKICAgICJvcHRpb24iOiB7ImRpc2FibGVkIjogMSwgInNlbGVjdGVkIjogMSwgImxhYmVsIjogMSwgInZhbHVlIjogMX0sCiAgICAib3V0cHV0IjogeyJmb3IiOiAxLCAiZm9ybSI6IDEsICJuYW1lIjogMX0sCiAgICAicCI6IHt9LAogICAgInBhcmFtIjogeyJuYW1lIjogMSwgInZhbHVlIjogMX0sCiAgICAicHJlIjoge30sCiAgICAicHJvZ3Jlc3MiOiB7InZhbHVlIjogMSwgIm1heCI6IDF9LAogICAgInEiOiB7ImNpdGUiOiAxfSwKICAgICJycCI6IHt9LAogICAgInJ0Ijoge30sCiAgICAicnVieSI6IHt9LAogICAgInMiOiB7fSwKICAgICJzYW1wIjoge30sCiAgICAic2NyaXB0IjogeyJjaGFyc2V0IjogMSwgInR5cGUiOiB7InRleHQvamF2YXNjcmlwdCI6IDF9LCAic3JjIjogMSwgImRlZmVyIjogMSwgImFzeW5jIjogMX0sCiAgICAic2VsZWN0IjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiAxLCAiZm9ybSI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAic2l6ZSI6IDEsICJyZWFkb25seSI6eyJyZWFkb25seSI6IDF9fSwKICAgICJzbWFsbCI6IHt9LAogICAgInNvdXJjZSI6IHsic3JjIjogMSwgInR5cGUiOiAxLCAibWVkaWEiOiAxfSwKICAgICJzcGFuIjoge30sCiAgICAic3Ryb25nIjoge30sCiAgICAic3R5bGUiOiB7InR5cGUiOiAxLCAibWVkaWEiOiB7ImFsbCI6IDEsICJzY3JlZW4iOiAxLCAicHJpbnQiOiAxfSwgInNjb3BlZCI6IDF9LAogICAgInN1YiI6IHt9LAogICAgInN1cCI6IHt9LAogICAgInN2ZyI6IHt9LAogICAgInRhYmxlIjogeyJzdW1tYXJ5IjogMX0sCiAgICAidGJvZHkiOiB7fSwKICAgICJ0ZCI6IHsiaGVhZGVycyI6IDEsICJyb3dzcGFuIjogMSwgImNvbHNwYW4iOiAxfSwKICAgICJ0ZXh0YXJlYSI6IHsiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJtYXhsZW5ndGgiOiAxLCAibmFtZSI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAicm93cyI6IDEsICJjb2xzIjogMSwgIndyYXAiOiB7Im9uIjogMSwgIm9mZiI6IDEsICJoYXJkIjogMSwgInNvZnQiOiAxfX0sCiAgICAidGZvb3QiOiB7fSwKICAgICJ0aCI6IHsiaGVhZGVycyI6IDEsICJyb3dzcGFuIjogMSwgImNvbHNwYW4iOiAxLCAic2NvcGUiOiAxfSwKICAgICJ0aGVhZCI6IHt9LAogICAgInRpbWUiOiB7ImRhdGV0aW1lIjogMX0sCiAgICAidGl0bGUiOiB7fSwKICAgICJ0ciI6IHt9LAogICAgInRyYWNrIjogeyJraW5kIjogMSwgInNyYyI6IDEsICJzcmNsYW5nIjogMSwgImxhYmVsIjogMSwgImRlZmF1bHQiOiAxfSwKICAgICJzZWN0aW9uIjoge30sCiAgICAic3VtbWFyeSI6IHt9LAogICAgInUiOiB7fSwKICAgICJ1bCI6IHt9LAogICAgInZhciI6IHt9LAogICAgInZpZGVvIjogeyJzcmMiOiAxLCAiYXV0b2J1ZmZlciI6IDEsICJhdXRvcGxheSI6IHsiYXV0b3BsYXkiOiAxfSwgImxvb3AiOiB7Imxvb3AiOiAxfSwgImNvbnRyb2xzIjogeyJjb250cm9scyI6IDF9LCAid2lkdGgiOiAxLCAiaGVpZ2h0IjogMSwgInBvc3RlciI6IDEsICJtdXRlZCI6IHsibXV0ZWQiOiAxfSwgInByZWxvYWQiOiB7ImF1dG8iOiAxLCAibWV0YWRhdGEiOiAxLCAibm9uZSI6IDF9fSwKICAgICJ3YnIiOiB7fQp9OwoKdmFyIGVsZW1lbnRzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwKTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9CgpmdW5jdGlvbiBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAidGFnLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCmZ1bmN0aW9uIGZpbmRBdHRyaWJ1dGVOYW1lKHNlc3Npb24sIHBvcykgewogICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zLnJvdywgcG9zLmNvbHVtbik7CiAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgIHdoaWxlICh0b2tlbiAmJiAhaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpKXsKICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgfQogICAgaWYgKHRva2VuKQogICAgICAgIHJldHVybiB0b2tlbi52YWx1ZTsKfQoKdmFyIEh0bWxDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHBvcy5yb3csIHBvcy5jb2x1bW4pOwoKICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSB8fCBpcyh0b2tlbiwgInRhZy1vcGVuIikgfHwgaXModG9rZW4sICJlbmQtdGFnLW9wZW4iKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICBpZiAoLyZbYS16XSokL2kudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CgogICAgICAgIHJldHVybiBbXTsKICAgIH07CgogICAgdGhpcy5nZXRUYWdDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudCwKICAgICAgICAgICAgICAgIG1ldGE6ICJ0YWciLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0YWdOYW1lID0gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdsb2JhbEF0dHJpYnV0ZXM7CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwKSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmNvbmNhdChPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXBbdGFnTmFtZV0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uKGF0dHJpYnV0ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBhdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiBhdHRyaWJ1dGUgKyAnPSIkMCInLAogICAgICAgICAgICAgICAgbWV0YTogImF0dHJpYnV0ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIAogICAgICAgIGlmICghdGFnTmFtZSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKICAgICAgICBpZiAodGFnTmFtZSBpbiBhdHRyaWJ1dGVNYXAgJiYgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV0gJiYgdHlwZW9mIGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdW2F0dHJpYnV0ZU5hbWVdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUgdmFsdWUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRIVE1MRW50aXR5Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdmFsdWVzID0gWydBYWN1dGU7JywgJ2FhY3V0ZTsnLCAnQWNpcmM7JywgJ2FjaXJjOycsICdhY3V0ZTsnLCAnQUVsaWc7JywgJ2FlbGlnOycsICdBZ3JhdmU7JywgJ2FncmF2ZTsnLCAnYWxlZnN5bTsnLCAnQWxwaGE7JywgJ2FscGhhOycsICdhbXA7JywgJ2FuZDsnLCAnYW5nOycsICdBcmluZzsnLCAnYXJpbmc7JywgJ2FzeW1wOycsICdBdGlsZGU7JywgJ2F0aWxkZTsnLCAnQXVtbDsnLCAnYXVtbDsnLCAnYmRxdW87JywgJ0JldGE7JywgJ2JldGE7JywgJ2JydmJhcjsnLCAnYnVsbDsnLCAnY2FwOycsICdDY2VkaWw7JywgJ2NjZWRpbDsnLCAnY2VkaWw7JywgJ2NlbnQ7JywgJ0NoaTsnLCAnY2hpOycsICdjaXJjOycsICdjbHViczsnLCAnY29uZzsnLCAnY29weTsnLCAnY3JhcnI7JywgJ2N1cDsnLCAnY3VycmVuOycsICdEYWdnZXI7JywgJ2RhZ2dlcjsnLCAnZEFycjsnLCAnZGFycjsnLCAnZGVnOycsICdEZWx0YTsnLCAnZGVsdGE7JywgJ2RpYW1zOycsICdkaXZpZGU7JywgJ0VhY3V0ZTsnLCAnZWFjdXRlOycsICdFY2lyYzsnLCAnZWNpcmM7JywgJ0VncmF2ZTsnLCAnZWdyYXZlOycsICdlbXB0eTsnLCAnZW1zcDsnLCAnZW5zcDsnLCAnRXBzaWxvbjsnLCAnZXBzaWxvbjsnLCAnZXF1aXY7JywgJ0V0YTsnLCAnZXRhOycsICdFVEg7JywgJ2V0aDsnLCAnRXVtbDsnLCAnZXVtbDsnLCAnZXVybzsnLCAnZXhpc3Q7JywgJ2Zub2Y7JywgJ2ZvcmFsbDsnLCAnZnJhYzEyOycsICdmcmFjMTQ7JywgJ2ZyYWMzNDsnLCAnZnJhc2w7JywgJ0dhbW1hOycsICdnYW1tYTsnLCAnZ2U7JywgJ2d0OycsICdoQXJyOycsICdoYXJyOycsICdoZWFydHM7JywgJ2hlbGxpcDsnLCAnSWFjdXRlOycsICdpYWN1dGU7JywgJ0ljaXJjOycsICdpY2lyYzsnLCAnaWV4Y2w7JywgJ0lncmF2ZTsnLCAnaWdyYXZlOycsICdpbWFnZTsnLCAnaW5maW47JywgJ2ludDsnLCAnSW90YTsnLCAnaW90YTsnLCAnaXF1ZXN0OycsICdpc2luOycsICdJdW1sOycsICdpdW1sOycsICdLYXBwYTsnLCAna2FwcGE7JywgJ0xhbWJkYTsnLCAnbGFtYmRhOycsICdsYW5nOycsICdsYXF1bzsnLCAnbEFycjsnLCAnbGFycjsnLCAnbGNlaWw7JywgJ2xkcXVvOycsICdsZTsnLCAnbGZsb29yOycsICdsb3dhc3Q7JywgJ2xvejsnLCAnbHJtOycsICdsc2FxdW87JywgJ2xzcXVvOycsICdsdDsnLCAnbWFjcjsnLCAnbWRhc2g7JywgJ21pY3JvOycsICdtaWRkb3Q7JywgJ21pbnVzOycsICdNdTsnLCAnbXU7JywgJ25hYmxhOycsICduYnNwOycsICduZGFzaDsnLCAnbmU7JywgJ25pOycsICdub3Q7JywgJ25vdGluOycsICduc3ViOycsICdOdGlsZGU7JywgJ250aWxkZTsnLCAnTnU7JywgJ251OycsICdPYWN1dGU7JywgJ29hY3V0ZTsnLCAnT2NpcmM7JywgJ29jaXJjOycsICdPRWxpZzsnLCAnb2VsaWc7JywgJ09ncmF2ZTsnLCAnb2dyYXZlOycsICdvbGluZTsnLCAnT21lZ2E7JywgJ29tZWdhOycsICdPbWljcm9uOycsICdvbWljcm9uOycsICdvcGx1czsnLCAnb3I7JywgJ29yZGY7JywgJ29yZG07JywgJ09zbGFzaDsnLCAnb3NsYXNoOycsICdPdGlsZGU7JywgJ290aWxkZTsnLCAnb3RpbWVzOycsICdPdW1sOycsICdvdW1sOycsICdwYXJhOycsICdwYXJ0OycsICdwZXJtaWw7JywgJ3BlcnA7JywgJ1BoaTsnLCAncGhpOycsICdQaTsnLCAncGk7JywgJ3BpdjsnLCAncGx1c21uOycsICdwb3VuZDsnLCAnUHJpbWU7JywgJ3ByaW1lOycsICdwcm9kOycsICdwcm9wOycsICdQc2k7JywgJ3BzaTsnLCAncXVvdDsnLCAncmFkaWM7JywgJ3Jhbmc7JywgJ3JhcXVvOycsICdyQXJyOycsICdyYXJyOycsICdyY2VpbDsnLCAncmRxdW87JywgJ3JlYWw7JywgJ3JlZzsnLCAncmZsb29yOycsICdSaG87JywgJ3JobzsnLCAncmxtOycsICdyc2FxdW87JywgJ3JzcXVvOycsICdzYnF1bzsnLCAnU2Nhcm9uOycsICdzY2Fyb247JywgJ3Nkb3Q7JywgJ3NlY3Q7JywgJ3NoeTsnLCAnU2lnbWE7JywgJ3NpZ21hOycsICdzaWdtYWY7JywgJ3NpbTsnLCAnc3BhZGVzOycsICdzdWI7JywgJ3N1YmU7JywgJ3N1bTsnLCAnc3VwOycsICdzdXAxOycsICdzdXAyOycsICdzdXAzOycsICdzdXBlOycsICdzemxpZzsnLCAnVGF1OycsICd0YXU7JywgJ3RoZXJlNDsnLCAnVGhldGE7JywgJ3RoZXRhOycsICd0aGV0YXN5bTsnLCAndGhpbnNwOycsICdUSE9STjsnLCAndGhvcm47JywgJ3RpbGRlOycsICd0aW1lczsnLCAndHJhZGU7JywgJ1VhY3V0ZTsnLCAndWFjdXRlOycsICd1QXJyOycsICd1YXJyOycsICdVY2lyYzsnLCAndWNpcmM7JywgJ1VncmF2ZTsnLCAndWdyYXZlOycsICd1bWw7JywgJ3Vwc2loOycsICdVcHNpbG9uOycsICd1cHNpbG9uOycsICdVdW1sOycsICd1dW1sOycsICd3ZWllcnA7JywgJ1hpOycsICd4aTsnLCAnWWFjdXRlOycsICd5YWN1dGU7JywgJ3llbjsnLCAnWXVtbDsnLCAneXVtbDsnLCAnWmV0YTsnLCAnemV0YTsnLCAnendqOycsICd6d25qOyddOwoKICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogImh0bWwgZW50aXR5IiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChIdG1sQ29tcGxldGlvbnMucHJvdG90eXBlKTsKCmV4cG9ydHMuSHRtbENvbXBsZXRpb25zID0gSHRtbENvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9jc3MiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiLCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGU7CnZhciBDc3NNb2RlID0gcmVxdWlyZSgiLi9jc3MiKS5Nb2RlOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKdmFyIFhtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cjsKdmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGU7CnZhciBIdG1sQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2h0bWxfY29tcGxldGlvbnMiKS5IdG1sQ29tcGxldGlvbnM7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIHZvaWRFbGVtZW50cyA9IFsiYXJlYSIsICJiYXNlIiwgImJyIiwgImNvbCIsICJlbWJlZCIsICJociIsICJpbWciLCAiaW5wdXQiLCAia2V5Z2VuIiwgImxpbmsiLCAibWV0YSIsICJtZW51aXRlbSIsICJwYXJhbSIsICJzb3VyY2UiLCAidHJhY2siLCAid2JyIl07CnZhciBvcHRpb25hbEVuZFRhZ3MgPSBbImxpIiwgImR0IiwgImRkIiwgInAiLCAicnQiLCAicnAiLCAib3B0Z3JvdXAiLCAib3B0aW9uIiwgImNvbGdyb3VwIiwgInRkIiwgInRoIl07Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmZyYWdtZW50Q29udGV4dDsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgWG1sQmVoYXZpb3VyKCk7CiAgICB0aGlzLiRjb21wbGV0ZXIgPSBuZXcgSHRtbENvbXBsZXRpb25zKCk7CiAgICAKICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CiAgICAgICAgImpzLSI6IEphdmFTY3JpcHRNb2RlLAogICAgICAgICJjc3MtIjogQ3NzTW9kZQogICAgfSk7CiAgICAKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSh0aGlzLnZvaWRFbGVtZW50cywgbGFuZy5hcnJheVRvTWFwKG9wdGlvbmFsRW5kVGFncykpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiPCEtLSIsIGVuZDogIi0tPiJ9OwoKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gbGFuZy5hcnJheVRvTWFwKHZvaWRFbGVtZW50cyk7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICByZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgIT0gTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9odG1sX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICBpZiAodGhpcy5mcmFnbWVudENvbnRleHQpCiAgICAgICAgICAgIHdvcmtlci5jYWxsKCJzZXRPcHRpb25zIiwgW3tjb250ZXh0OiB0aGlzLmZyYWdtZW50Q29udGV4dH1dKTsKCiAgICAgICAgd29ya2VyLm9uKCJlcnJvciIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvaHRtbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2VsaXhpciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2VsaXhpcl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEVsaXhpckhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9lbGl4aXJfaGlnaGxpZ2h0X3J1bGVzIikuRWxpeGlySGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gRWxpeGlySGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2VsaXhpciI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfZWxpeGlyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2VsaXhpcl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9odG1sIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS9tb2RlL2VsaXhpciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxFbGl4aXJIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9lbGl4aXJfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEVsaXhpckhpZ2hsaWdodFJ1bGVzOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEVsaXhpck1vZGUgPSByZXF1aXJlKCIuL2VsaXhpciIpLk1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgSHRtbE1vZGUuY2FsbCh0aGlzKTsgICAKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBIdG1sRWxpeGlySGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUsCiAgICAgICAgImVsaXhpci0iOiBFbGl4aXJNb2RlCiAgICB9KTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9odG1sX2VsaXhpciI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2h0bWxfZWxpeGlyIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-html_ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY29uc3RhbnRPdGhlclN5bWJvbCA9IGV4cG9ydHMuY29uc3RhbnRPdGhlclN5bWJvbCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyLnN5bWJvbC5ydWJ5IiwgLy8gc3ltYm9sCiAgICByZWdleCA6ICJbOl0oPzpbQS1aYS16X118W0AkXSg/PVthLXpBLVowLTlfXSkpW2EtekEtWjAtOV9dKlshPT9dPyIKfTsKCnZhciBxU3RyaW5nID0gZXhwb3J0cy5xU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCn07Cgp2YXIgcXFTdHJpbmcgPSBleHBvcnRzLnFxU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCn07Cgp2YXIgdFN0cmluZyA9IGV4cG9ydHMudFN0cmluZyA9IHsKICAgIHRva2VuIDogInN0cmluZyIsIC8vIGJhY2t0aWNrIHN0cmluZwogICAgcmVnZXggOiAiW2BdKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1tgXSIKfTsKCnZhciBjb25zdGFudE51bWVyaWNIZXggPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0hleCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0oPzpbMC05YS1mQS1GXXxfKD89WzAtOWEtZkEtRl0pKSpcXGIiCn07Cgp2YXIgY29uc3RhbnROdW1lcmljRmxvYXQgPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0Zsb2F0ID0gewogICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICByZWdleCA6ICJbKy1dP1xcZCg/OlxcZHxfKD89XFxkKSkqKD86KD86XFwuXFxkKD86XFxkfF8oPz1cXGQpKSopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgp9OwoKdmFyIGluc3RhbmNlVmFyaWFibGUgPSBleHBvcnRzLmluc3RhbmNlVmFyaWFibGUgPSB7CiAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgp9OwoKdmFyIFJ1YnlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYm9ydHxBcnJheXxhc3NlcnR8YXNzZXJ0X2VxdWFsfGFzc2VydF9ub3RfZXF1YWx8YXNzZXJ0X3NhbWV8YXNzZXJ0X25vdF9zYW1lfCIgKwogICAgICAgICJhc3NlcnRfbmlsfGFzc2VydF9ub3RfbmlsfGFzc2VydF9tYXRjaHxhc3NlcnRfbm9fbWF0Y2h8YXNzZXJ0X2luX2RlbHRhfGFzc2VydF90aHJvd3N8IiArCiAgICAgICAgImFzc2VydF9yYWlzZXxhc3NlcnRfbm90aGluZ19yYWlzZWR8YXNzZXJ0X2luc3RhbmNlX29mfGFzc2VydF9raW5kX29mfGFzc2VydF9yZXNwb25kX3RvfCIgKwogICAgICAgICJhc3NlcnRfb3BlcmF0b3J8YXNzZXJ0X3NlbmR8YXNzZXJ0X2RpZmZlcmVuY2V8YXNzZXJ0X25vX2RpZmZlcmVuY2V8YXNzZXJ0X3JlY29nbml6ZXN8IiArCiAgICAgICAgImFzc2VydF9nZW5lcmF0ZXN8YXNzZXJ0X3Jlc3BvbnNlfGFzc2VydF9yZWRpcmVjdGVkX3RvfGFzc2VydF90ZW1wbGF0ZXxhc3NlcnRfc2VsZWN0fCIgKwogICAgICAgICJhc3NlcnRfc2VsZWN0X2VtYWlsfGFzc2VydF9zZWxlY3RfcmpzfGFzc2VydF9zZWxlY3RfZW5jb2RlZHxjc3Nfc2VsZWN0fGF0X2V4aXR8IiArCiAgICAgICAgImF0dHJ8YXR0cl93cml0ZXJ8YXR0cl9yZWFkZXJ8YXR0cl9hY2Nlc3NvcnxhdHRyX2FjY2Vzc2libGV8YXV0b2xvYWR8YmluZGluZ3xibG9ja19naXZlbj98Y2FsbGNjfCIgKwogICAgICAgICJjYWxsZXJ8Y2F0Y2h8Y2hvbXB8Y2hvbXAhfGNob3B8Y2hvcCF8ZGVmaW5lZD98ZGVsZXRlX3ZpYV9yZWRpcmVjdHxldmFsfGV4ZWN8ZXhpdHwiICsKICAgICAgICAiZXhpdCF8ZmFpbHxGbG9hdHxmbHVua3xmb2xsb3dfcmVkaXJlY3QhfGZvcmt8Zm9ybV9mb3J8Zm9ybV90YWd8Zm9ybWF0fGdldHN8Z2xvYmFsX3ZhcmlhYmxlc3xnc3VifCIgKwogICAgICAgICJnc3ViIXxnZXRfdmlhX3JlZGlyZWN0fGhvc3QhfGh0dHBzP3xodHRwcyF8aW5jbHVkZXxJbnRlZ2VyfGxhbWJkYXxsaW5rX3RvfCIgKwogICAgICAgICJsaW5rX3RvX3VubGVzc19jdXJyZW50fGxpbmtfdG9fZnVuY3Rpb258bGlua190b19yZW1vdGV8bG9hZHxsb2NhbF92YXJpYWJsZXN8bG9vcHxvcGVufG9wZW5fc2Vzc2lvbnwiICsKICAgICAgICAicHxwcmludHxwcmludGZ8cHJvY3xwdXRjfHB1dHN8cG9zdF92aWFfcmVkaXJlY3R8cHV0X3ZpYV9yZWRpcmVjdHxyYWlzZXxyYW5kfCIgKwogICAgICAgICJyYXd8cmVhZGxpbmV8cmVhZGxpbmVzfHJlZGlyZWN0P3xyZXF1ZXN0X3ZpYV9yZWRpcmVjdHxyZXF1aXJlfHNjYW58c2VsZWN0fCIgKwogICAgICAgICJzZXRfdHJhY2VfZnVuY3xzbGVlcHxzcGxpdHxzcHJpbnRmfHNyYW5kfFN0cmluZ3xzdHlsZXNoZWV0X2xpbmtfdGFnfHN5c2NhbGx8c3lzdGVtfHN1YnxzdWIhfHRlc3R8IiArCiAgICAgICAgInRocm93fHRyYWNlX3Zhcnx0cmFwfHVudHJhY2VfdmFyfGF0YW4yfGNvc3xleHB8ZnJleHB8bGRleHB8bG9nfGxvZzEwfHNpbnxzcXJ0fHRhbnwiICsKICAgICAgICAicmVuZGVyfGphdmFzY3JpcHRfaW5jbHVkZV90YWd8Y3NyZl9tZXRhX3RhZ3xsYWJlbF90YWd8dGV4dF9maWVsZF90YWd8c3VibWl0X3RhZ3xjaGVja19ib3hfdGFnfCIgKwogICAgICAgICJjb250ZW50X3RhZ3xyYWRpb19idXR0b25fdGFnfHRleHRfYXJlYV90YWd8cGFzc3dvcmRfZmllbGRfdGFnfGhpZGRlbl9maWVsZF90YWd8IiArCiAgICAgICAgImZpZWxkc19mb3J8c2VsZWN0X3RhZ3xvcHRpb25zX2Zvcl9zZWxlY3R8b3B0aW9uc19mcm9tX2NvbGxlY3Rpb25fZm9yX3NlbGVjdHxjb2xsZWN0aW9uX3NlbGVjdHwiICsKICAgICAgICAidGltZV96b25lX3NlbGVjdHxzZWxlY3RfZGF0ZXxzZWxlY3RfdGltZXxzZWxlY3RfZGF0ZXRpbWV8ZGF0ZV9zZWxlY3R8dGltZV9zZWxlY3R8ZGF0ZXRpbWVfc2VsZWN0fCIgKwogICAgICAgICJzZWxlY3RfeWVhcnxzZWxlY3RfbW9udGh8c2VsZWN0X2RheXxzZWxlY3RfaG91cnxzZWxlY3RfbWludXRlfHNlbGVjdF9zZWNvbmR8ZmlsZV9maWVsZF90YWd8IiArCiAgICAgICAgImZpbGVfZmllbGR8cmVzcG9uZF90b3xza2lwX2JlZm9yZV9maWx0ZXJ8YXJvdW5kX2ZpbHRlcnxhZnRlcl9maWx0ZXJ8dmVyaWZ5fCIgKwogICAgICAgICJwcm90ZWN0X2Zyb21fZm9yZ2VyeXxyZXNjdWVfZnJvbXxoZWxwZXJfbWV0aG9kfHJlZGlyZWN0X3RvfGJlZm9yZV9maWx0ZXJ8IiArCiAgICAgICAgInNlbmRfZGF0YXxzZW5kX2ZpbGV8dmFsaWRhdGVzX3ByZXNlbmNlX29mfHZhbGlkYXRlc191bmlxdWVuZXNzX29mfHZhbGlkYXRlc19sZW5ndGhfb2Z8IiArCiAgICAgICAgInZhbGlkYXRlc19mb3JtYXRfb2Z8dmFsaWRhdGVzX2FjY2VwdGFuY2Vfb2Z8dmFsaWRhdGVzX2Fzc29jaWF0ZWR8dmFsaWRhdGVzX2V4Y2x1c2lvbl9vZnwiICsKICAgICAgICAidmFsaWRhdGVzX2luY2x1c2lvbl9vZnx2YWxpZGF0ZXNfbnVtZXJpY2FsaXR5X29mfHZhbGlkYXRlc193aXRofHZhbGlkYXRlc19lYWNofCIgKwogICAgICAgICJhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfYmFzaWN8YXV0aGVudGljYXRlX29yX3JlcXVlc3Rfd2l0aF9odHRwX2RpZ2VzdHwiICsKICAgICAgICAiZmlsdGVyX3BhcmFtZXRlcl9sb2dnaW5nfG1hdGNofGdldHxwb3N0fHJlc291cmNlc3xyZWRpcmVjdHxzY29wZXxhc3NlcnRfcm91dGluZ3wiICsKICAgICAgICAidHJhbnNsYXRlfGxvY2FsaXplfGV4dHJhY3RfbG9jYWxlX2Zyb21fdGxkfGNhY2hlc19wYWdlfGV4cGlyZV9wYWdlfGNhY2hlc19hY3Rpb258ZXhwaXJlX2FjdGlvbnwiICsKICAgICAgICAiY2FjaGV8ZXhwaXJlX2ZyYWdtZW50fGV4cGlyZV9jYWNoZV9mb3J8b2JzZXJ2ZXxjYWNoZV9zd2VlcGVyfCIgKwogICAgICAgICJoYXNfbWFueXxoYXNfb25lfGJlbG9uZ3NfdG98aGFzX2FuZF9iZWxvbmdzX3RvX21hbnkiCiAgICApOwoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYWxpYXN8YW5kfEJFR0lOfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRlZmluZWR8ZG98ZWxzZXxlbHNpZnxFTkR8ZW5kfGVuc3VyZXwiICsKICAgICAgICAiX19GSUxFX198ZmluYWxseXxmb3J8Z2VtfGlmfGlufF9fTElORV9ffG1vZHVsZXxuZXh0fG5vdHxvcnxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8IiArCiAgICAgICAgInJlZG98cmVzY3VlfHJldHJ5fHJldHVybnxzdXBlcnx0aGVufHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgKICAgICAgICAidHJ1ZXxUUlVFfGZhbHNlfEZBTFNFfG5pbHxOSUx8QVJHRnxBUkdWfERBVEF8RU5WfFJVQllfUExBVEZPUk18UlVCWV9SRUxFQVNFX0RBVEV8IiArCiAgICAgICAgIlJVQllfVkVSU0lPTnxTVERFUlJ8U1RESU58U1RET1VUfFRPUExFVkVMX0JJTkRJTkciCiAgICApOwoKICAgIHZhciBidWlsdGluVmFyaWFibGVzID0gKAogICAgICAgICIkREVCVUd8JGRlZm91dHwkRklMRU5BTUV8JExPQURfUEFUSHwkU0FGRXwkc3RkaW58JHN0ZG91dHwkc3RkZXJyfCRWRVJCT1NFfCIgKwogICAgICAgICIkIXxyb290X3VybHxmbGFzaHxzZXNzaW9ufGNvb2tpZXN8cGFyYW1zfHJlcXVlc3R8cmVzcG9uc2V8bG9nZ2VyfHNlbGYiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy4ka2V5d29yZHMgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiBidWlsdGluVmFyaWFibGVzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIiAvLyBUT0RPIGlzIHRoaXMgYSByZW1uYW50IGZyb20ganMgbW9kZT8KICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJePWJlZ2luKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLmxwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5lbmQiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbmV4dFN0YXRlOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86W25zcnR2ZmJhZSciXFxdfGMufEMtLnxNLS4oPzpcXEMtLik/fFswLTddezN9fHhbXGRhLWZBLUZdezJ9fHVbXGRhLWZBLUZdezR9KS8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvI3svLAogICAgICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/Oltuc3J0dmZiYWUnIlxcXXxjLnxDLS58TS0uKD86XFxDLS4pP3xbMC03XXszfXx4W1xkYS1mQS1GXXsyfXx1W1xkYS1mQS1GXXs0fSkvCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4uc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyN7LywKICAgICAgICAgICAgICAgICAgICBwdXNoICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLycvLAogICAgICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXFxbJ1xcXS8KICAgICAgICAgICAgICAgIH0sICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJy8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH1dLAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIG5hbWVzcGFjZXMgYXJlbid0IHN5bWJvbHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjo6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICAgICAgICAgICAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmNsYXNzIiwgLy8gY2xhc3MgbmFtZQogICAgICAgICAgICAgICAgcmVnZXggOiAiW0EtWl1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY29uc3RhbnRPdGhlclN5bWJvbCwKICAgICAgICAgICAgY29uc3RhbnROdW1lcmljSGV4LAogICAgICAgICAgICBjb25zdGFudE51bWVyaWNGbG9hdCwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uc2VwYXJhdG9yLmtleS12YWx1ZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI9PiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAiaGVyZWRvYyIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHZhbHVlWzJdID09ICctJyA/ICJpbmRlbnRlZEhlcmVkb2MiIDogImhlcmVkb2MiOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzNdKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToiY29uc3RhbnQiLCB2YWx1ZTogdG9rZW5zWzFdfSwKICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6InN0cmluZyIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3VwcG9ydC5jbGFzcyIsIHZhbHVlOiB0b2tlbnNbM119LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s0XX0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8PC0/KShbJ1wiYF0/KShbXFx3XSspKFsnXCJgXT8pIiwKICAgICAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICAgICAgaGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogIGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJeICsiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dCA6IGZ1bmN0aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0YXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5jaGFyYWN0ZXIiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXEJcXD8uIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl49ZW5kKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoUnVieUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5SdWJ5SGlnaGxpZ2h0UnVsZXMgPSBSdWJ5SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX3J1YnlfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKICAgIHZhciBSdWJ5SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIikuUnVieUhpZ2hsaWdodFJ1bGVzOwoKICAgIHZhciBIdG1sUnVieUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgICAgIHZhciBzdGFydFJ1bGVzID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZWdleDogIjwlJXwlJT4iLAogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuc3RhcnQuZXJiIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjwlIyIsCiAgICAgICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5lbmQuZXJiIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIiU+IiwKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIiwKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ImNvbW1lbnQiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnJ1YnlfdGFnIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjwlKyg/IT4pWy09XT8iLAogICAgICAgICAgICAgICAgcHVzaCAgOiAicnVieS1zdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF07CgogICAgICAgIHZhciBlbmRSdWxlcyA9IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5ydWJ5X3RhZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIlPiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogIiMoPzpbXiVdfCVbXj5dKSoiCiAgICAgICAgICAgIH0KICAgICAgICBdOwoKICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy4kcnVsZXMpCiAgICAgICAgICAgIHRoaXMuJHJ1bGVzW2tleV0udW5zaGlmdC5hcHBseSh0aGlzLiRydWxlc1trZXldLCBzdGFydFJ1bGVzKTsKCiAgICAgICAgdGhpcy5lbWJlZFJ1bGVzKFJ1YnlIaWdobGlnaHRSdWxlcywgInJ1YnktIiwgZW5kUnVsZXMsIFsic3RhcnQiXSk7CgogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKICAgIH07CgoKICAgIG9vcC5pbmhlcml0cyhIdG1sUnVieUhpZ2hsaWdodFJ1bGVzLCBIdG1sSGlnaGxpZ2h0UnVsZXMpOwoKICAgIGV4cG9ydHMuSHRtbFJ1YnlIaWdobGlnaHRSdWxlcyA9IEh0bWxSdWJ5SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kcXVvdGVzID0geyciJzogJyInLCAiJyI6ICInIiwgImAiOiAiYCJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qOnxbXHtcKFxbXSlccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgZW5kU3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24ocmVzdWx0cykgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKHJlc3VsdHMuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qYXZhc2NyaXB0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgcHJvcGVydHlNYXAgPSB7CiAgICAiYmFja2dyb3VuZCI6IHsiIyQwIjogMX0sCiAgICAiYmFja2dyb3VuZC1jb2xvciI6IHsiIyQwIjogMSwgInRyYW5zcGFyZW50IjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1pbWFnZSI6IHsidXJsKCcvJDAnKSI6IDF9LAogICAgImJhY2tncm91bmQtcmVwZWF0IjogeyJyZXBlYXQiOiAxLCAicmVwZWF0LXgiOiAxLCAicmVwZWF0LXkiOiAxLCAibm8tcmVwZWF0IjogMSwgImluaGVyaXQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXBvc2l0aW9uIjogeyJib3R0b20iOjIsICJjZW50ZXIiOjIsICJsZWZ0IjoyLCAicmlnaHQiOjIsICJ0b3AiOjIsICJpbmhlcml0IjoyfSwKICAgICJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOiB7InNjcm9sbCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtc2l6ZSI6IHsiY292ZXIiOiAxLCAiY29udGFpbiI6IDF9LAogICAgImJhY2tncm91bmQtY2xpcCI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJhY2tncm91bmQtb3JpZ2luIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYm9yZGVyIjogeyJzb2xpZCAkMCI6IDEsICJkYXNoZWQgJDAiOiAxLCAiZG90dGVkICQwIjogMSwgIiMkMCI6IDF9LAogICAgImJvcmRlci1jb2xvciI6IHsiIyQwIjogMX0sCiAgICAiYm9yZGVyLXN0eWxlIjogeyJzb2xpZCI6MiwgImRhc2hlZCI6MiwgImRvdHRlZCI6MiwgImRvdWJsZSI6MiwgImdyb292ZSI6MiwgImhpZGRlbiI6MiwgImluaGVyaXQiOjIsICJpbnNldCI6MiwgIm5vbmUiOjIsICJvdXRzZXQiOjIsICJyaWRnZWQiOjJ9LAogICAgImJvcmRlci1jb2xsYXBzZSI6IHsiY29sbGFwc2UiOiAxLCAic2VwYXJhdGUiOiAxfSwKICAgICJib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJjbGVhciI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJib3RoIjogMSwgIm5vbmUiOiAxfSwKICAgICJjb2xvciI6IHsiIyQwIjogMSwgInJnYigjJDAwLDAsMCkiOiAxfSwKICAgICJjdXJzb3IiOiB7ImRlZmF1bHQiOiAxLCAicG9pbnRlciI6IDEsICJtb3ZlIjogMSwgInRleHQiOiAxLCAid2FpdCI6IDEsICJoZWxwIjogMSwgInByb2dyZXNzIjogMSwgIm4tcmVzaXplIjogMSwgIm5lLXJlc2l6ZSI6IDEsICJlLXJlc2l6ZSI6IDEsICJzZS1yZXNpemUiOiAxLCAicy1yZXNpemUiOiAxLCAic3ctcmVzaXplIjogMSwgInctcmVzaXplIjogMSwgIm53LXJlc2l6ZSI6IDF9LAogICAgImRpc3BsYXkiOiB7Im5vbmUiOiAxLCAiYmxvY2siOiAxLCAiaW5saW5lIjogMSwgImlubGluZS1ibG9jayI6IDEsICJ0YWJsZS1jZWxsIjogMX0sCiAgICAiZW1wdHktY2VsbHMiOiB7InNob3ciOiAxLCAiaGlkZSI6IDF9LAogICAgImZsb2F0IjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgIm5vbmUiOiAxfSwKICAgICJmb250LWZhbWlseSI6IHsiQXJpYWwiOjIsIkNvbWljIFNhbnMgTVMiOjIsIkNvbnNvbGFzIjoyLCJDb3VyaWVyIE5ldyI6MiwiQ291cmllciI6MiwiR2VvcmdpYSI6MiwiTW9ub3NwYWNlIjoyLCJTYW5zLVNlcmlmIjoyLCAiU2Vnb2UgVUkiOjIsIlRhaG9tYSI6MiwiVGltZXMgTmV3IFJvbWFuIjoyLCJUcmVidWNoZXQgTVMiOjIsIlZlcmRhbmEiOiAxfSwKICAgICJmb250LXNpemUiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJmb250LXdlaWdodCI6IHsiYm9sZCI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXN0eWxlIjogeyJpdGFsaWMiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC12YXJpYW50IjogeyJub3JtYWwiOiAxLCAic21hbGwtY2FwcyI6IDF9LAogICAgImhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZXR0ZXItc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAibGluZS1oZWlnaHQiOiB7Im5vcm1hbCI6IDF9LAogICAgImxpc3Qtc3R5bGUtdHlwZSI6IHsibm9uZSI6IDEsICJkaXNjIjogMSwgImNpcmNsZSI6IDEsICJzcXVhcmUiOiAxLCAiZGVjaW1hbCI6IDEsICJkZWNpbWFsLWxlYWRpbmctemVybyI6IDEsICJsb3dlci1yb21hbiI6IDEsICJ1cHBlci1yb21hbiI6IDEsICJsb3dlci1ncmVlayI6IDEsICJsb3dlci1sYXRpbiI6IDEsICJ1cHBlci1sYXRpbiI6IDEsICJnZW9yZ2lhbiI6IDEsICJsb3dlci1hbHBoYSI6IDEsICJ1cHBlci1hbHBoYSI6IDF9LAogICAgIm1hcmdpbiI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm92ZXJmbG93IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXgiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJwYWRkaW5nIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWdlLWJyZWFrLWFmdGVyIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicGFnZS1icmVhay1iZWZvcmUiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwb3NpdGlvbiI6IHsiYWJzb2x1dGUiOiAxLCAicmVsYXRpdmUiOiAxLCAiZml4ZWQiOiAxLCAic3RhdGljIjogMX0sCiAgICAicmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ0YWJsZS1sYXlvdXQiOiB7ImZpeGVkIjogMSwgImF1dG8iOiAxfSwKICAgICJ0ZXh0LWRlY29yYXRpb24iOiB7Im5vbmUiOiAxLCAidW5kZXJsaW5lIjogMSwgImxpbmUtdGhyb3VnaCI6IDEsICJibGluayI6IDF9LAogICAgInRleHQtYWxpZ24iOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiY2VudGVyIjogMSwgImp1c3RpZnkiOiAxfSwKICAgICJ0ZXh0LXRyYW5zZm9ybSI6IHsiY2FwaXRhbGl6ZSI6IDEsICJ1cHBlcmNhc2UiOiAxLCAibG93ZXJjYXNlIjogMSwgIm5vbmUiOiAxfSwKICAgICJ0b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ2ZXJ0aWNhbC1hbGlnbiI6IHsidG9wIjogMSwgImJvdHRvbSI6IDF9LAogICAgInZpc2liaWxpdHkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMX0sCiAgICAid2hpdGUtc3BhY2UiOiB7Im5vd3JhcCI6IDEsICJub3JtYWwiOiAxLCAicHJlIjogMSwgInByZS1saW5lIjogMSwgInByZS13cmFwIjogMX0sCiAgICAid2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ3b3JkLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImZpbHRlciI6IHsiYWxwaGEob3BhY2l0eT0kMDEwMCkiOiAxfSwKCiAgICAidGV4dC1zaGFkb3ciOiB7IiQwMnB4IDJweCAycHggIzc3NyI6IDF9LAogICAgInRleHQtb3ZlcmZsb3ciOiB7ImVsbGlwc2lzLXdvcmQiOiAxLCAiY2xpcCI6IDEsICJlbGxpcHNpcyI6IDF9LAogICAgIi1tb3otYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdCI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3gtc2hhZG93IjogMSwKICAgICItd2Via2l0LWJveC1zaGFkb3ciOiAxLAogICAgInRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLW1vei10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi13ZWJraXQtdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxIH0KfTsKCnZhciBDc3NDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IGZhbHNlOwoKICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoZG9jdW1lbnQpIHsKICAgICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYycpLnN0eWxlOwoKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzdHlsZSkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVtpXSAhPT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0nICsgeC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eU1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcFtuYW1lXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uc0RlZmluZWQpIHsKICAgICAgICAgICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlPT09J3J1bGVzZXQnIHx8IHNlc3Npb24uJG1vZGUuJGlkID09ICJhY2UvbW9kZS9zY3NzIikgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgICAgIGlmICgvOlteO10rJC8udGVzdChsaW5lKSkgewogICAgICAgICAgICAgICAgLyhbXHdcLV0rKTpbXjpdKiQvLnRlc3QobGluZSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbXTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcCk7CiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKHByb3BlcnR5KXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHByb3BlcnR5LAogICAgICAgICAgICAgICAgc25pcHBldDogcHJvcGVydHkgKyAnOiAkMDsnLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIHZhciBwcm9wZXJ0eSA9ICgvKFtcd1wtXSspOlteOl0qJC8uZXhlYyhsaW5lKSB8fCB7fSlbMV07CgogICAgICAgIGlmICghcHJvcGVydHkpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHByb3BlcnR5IGluIHByb3BlcnR5TWFwICYmIHR5cGVvZiBwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkgdmFsdWUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKENzc0NvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkNzc0NvbXBsZXRpb25zID0gQ3NzQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKCiAgICB0aGlzLmFkZCgiY29sb24iLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnOicgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoL14oXHMrW147XXxccyokKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2UuZW5kLmNvbHVtbiwgcmFuZ2UuZW5kLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArKzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzsnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoIiFpbXBvcnRhbnQiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnIScgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CgogICAgICAgICAgICBpZiAoL15ccyooO3x9fCQpLy50ZXN0KGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnIWltcG9ydGFudCcsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMTAsIDEwXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKb29wLmluaGVyaXRzKENzc0JlaGF2aW91ciwgQ3N0eWxlQmVoYXZpb3VyKTsKCmV4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3NzQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2Nzc19jb21wbGV0aW9ucyIpLkNzc0NvbXBsZXRpb25zOwp2YXIgQ3NzQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IENzc0NvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gImNTdHlsZSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xzKiQvKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciByZSA9IC9cUy87CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSB8fCBsaW5lW3N0YXJ0TGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGluZS5zZWFyY2gocmUpOwoKICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBpZiAobGluZVtsZXZlbF0gIT0gIiMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBuZXh0W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocHJldkluZGVudCA9PSBpbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMikuc2VhcmNoKC9cUy8pID09IC0xKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgaW5kZW50KQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKCiAgICAgICAgaWYgKGluZGVudCA8IG5leHRJbmRlbnQpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9ydWJ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcnVieV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUnVieUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIpLlJ1YnlIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUnVieUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKltce1woXFtdXHMqJC8pOwogICAgICAgICAgICB2YXIgc3RhcnRpbmdDbGFzc09yTWV0aG9kID0gbGluZS5tYXRjaCgvXlxzKihjbGFzc3xkZWZ8bW9kdWxlKVxzLiokLyk7CiAgICAgICAgICAgIHZhciBzdGFydGluZ0RvQmxvY2sgPSBsaW5lLm1hdGNoKC8uKmRvKFxzKnxccytcfC4qXHxccyopJC8pOwogICAgICAgICAgICB2YXIgc3RhcnRpbmdDb25kaXRpb25hbCA9IGxpbmUubWF0Y2goL15ccyooaWZ8ZWxzZXx3aGVuKVxzKi8pOwogICAgICAgICAgICBpZiAobWF0Y2ggfHwgc3RhcnRpbmdDbGFzc09yTWV0aG9kIHx8IHN0YXJ0aW5nRG9CbG9jayB8fCBzdGFydGluZ0NvbmRpdGlvbmFsKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiAvXlxzKyhlbmR8ZWxzZSkkLy50ZXN0KGxpbmUgKyBpbnB1dCkgfHwgdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgaWYgKC99Ly50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChzZXNzaW9uLCByb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHByZXZMaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KHByZXZMaW5lKTsKICAgICAgICB2YXIgdGFiID0gc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKICAgICAgICBpZiAocHJldkluZGVudC5sZW5ndGggPD0gaW5kZW50Lmxlbmd0aCkgewogICAgICAgICAgICBpZiAoaW5kZW50LnNsaWNlKC10YWIubGVuZ3RoKSA9PSB0YWIpCiAgICAgICAgICAgICAgICBzZXNzaW9uLnJlbW92ZShuZXcgUmFuZ2Uocm93LCBpbmRlbnQubGVuZ3RoLXRhYi5sZW5ndGgsIHJvdywgaW5kZW50Lmxlbmd0aCkpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcnVieSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfcnVieSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbF9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvcnVieSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxSdWJ5SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfcnVieV9oaWdobGlnaHRfcnVsZXMiKS5IdG1sUnVieUhpZ2hsaWdodFJ1bGVzOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIFJ1YnlNb2RlID0gcmVxdWlyZSgiLi9ydWJ5IikuTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sTW9kZS5jYWxsKHRoaXMpOyAgIAogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEh0bWxSdWJ5SGlnaGxpZ2h0UnVsZXM7ICAgIAogICAgdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsKICAgICAgICAianMtIjogSmF2YVNjcmlwdE1vZGUsCiAgICAgICAgImNzcy0iOiBDc3NNb2RlLAogICAgICAgICJydWJ5LSI6IFJ1YnlNb2RlCiAgICB9KTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9odG1sX3J1YnkiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9odG1sX3J1YnkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-ini.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9pbmlfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgZXNjYXBlUmUgPSAiXFxcXCg/OltcXFxcMGFidHJuOyM9Ol18eFthLWZBLUZcXGRdezR9KSI7Cgp2YXIgSW5pSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbewogICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5pbmknLAogICAgICAgICAgICByZWdleDogJyMuKicsCiAgICAgICAgICAgIHB1c2hfOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICdjb21tZW50LmxpbmUubnVtYmVyLXNpZ24uaW5pJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnJHxeJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQubGluZS5udW1iZXItc2lnbi5pbmknCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5pbmknLAogICAgICAgICAgICByZWdleDogJzsuKicsCiAgICAgICAgICAgIHB1c2hfOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICdjb21tZW50LmxpbmUuc2VtaWNvbG9uLmluaScsCiAgICAgICAgICAgICAgICByZWdleDogJyR8XicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICdjb21tZW50LmxpbmUuc2VtaWNvbG9uLmluaScKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbJ2tleXdvcmQub3RoZXIuZGVmaW5pdGlvbi5pbmknLCAndGV4dCcsICdwdW5jdHVhdGlvbi5zZXBhcmF0b3Iua2V5LXZhbHVlLmluaSddLAogICAgICAgICAgICByZWdleDogJ1xcYihbYS16QS1aMC05Xy4tXSspXFxiKFxccyopKD0pJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5lbnRpdHkuaW5pJywgJ2NvbnN0YW50LnNlY3Rpb24uZ3JvdXAtdGl0bGUuaW5pJywgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uZW50aXR5LmluaSddLAogICAgICAgICAgICByZWdleDogJ14oXFxbKSguKj8pKFxcXSknCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmluaScsCiAgICAgICAgICAgIHJlZ2V4OiAiJyIsCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5pbmknLAogICAgICAgICAgICAgICAgcmVnZXg6ICInIiwKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBlc2NhcGVSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLnNpbmdsZS5pbmknCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmluaScsCiAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogZXNjYXBlUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuaW5pJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5pbmknCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKSW5pSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7CiAgICBmaWxlVHlwZXM6IFsnaW5pJywgJ2NvbmYnXSwKICAgIGtleUVxdWl2YWxlbnQ6ICdefkknLAogICAgbmFtZTogJ0luaScsCiAgICBzY29wZU5hbWU6ICdzb3VyY2UuaW5pJwp9OwoKCm9vcC5pbmhlcml0cyhJbmlIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSW5pSGlnaGxpZ2h0UnVsZXMgPSBJbmlIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaW5pIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC9eXHMqXFsoW15cXSldKildXHMqKD86JHxbOyNdKS87CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByZSA9IHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG0gPSBsaW5lLm1hdGNoKHJlKTsKICAgICAgICAKICAgICAgICBpZiAoIW0pIHJldHVybjsKICAgICAgICAKICAgICAgICB2YXIgc3RhcnROYW1lID0gbVsxXSArICIuIjsKICAgICAgICAKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgaWYgKC9eXHMqJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBtID0gbGluZS5tYXRjaChyZSk7CiAgICAgICAgICAgIGlmIChtICYmIG1bMV0ubGFzdEluZGV4T2Yoc3RhcnROYW1lLCAwKSAhPT0gMCkKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9pbmkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9pbmlfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9pbmkiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBJbmlIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaW5pX2hpZ2hsaWdodF9ydWxlcyIpLkluaUhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaW5pIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEluaUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiOyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IG51bGw7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9pbmkiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9pbmkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-io.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9pb19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBJb0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7IHN0YXJ0OiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5pbycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzppZnxpZlRydWV8aWZGYWxzZXxpZlRydWVJZkZhbHNlfGZvcnxsb29wfHJldmVyc2VGb3JlYWNofGZvcmVhY2h8bWFwfGNvbnRpbnVlfGJyZWFrfHdoaWxlfGRvfHJldHVybilcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuaW8nLAogICAgICAgICAgIHJlZ2V4OiAnL1xcKicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5pbycsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcKi8nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQuYmxvY2suaW8nIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmlvJywKICAgICAgICAgICByZWdleDogJy8vJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5saW5lLmRvdWJsZS1zbGFzaC5pbycsCiAgICAgICAgICAgICAgICByZWdleDogJyQnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQubGluZS5kb3VibGUtc2xhc2guaW8nIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmlvJywKICAgICAgICAgICByZWdleDogJyMnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdjb21tZW50LmxpbmUubnVtYmVyLXNpZ24uaW8nLCByZWdleDogJyQnLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5saW5lLm51bWJlci1zaWduLmlvJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3ZhcmlhYmxlLmxhbmd1YWdlLmlvJywKICAgICAgICAgICByZWdleDogJ1xcYig/OnNlbGZ8c2VuZGVyfHRhcmdldHxwcm90b3xwcm90b3N8cGFyZW50KVxcYicsCiAgICAgICAgICAgY29tbWVudDogJ0kgd29uZGVyIGlmIHNvbWUgb2YgdGhpcyBpc25cJ3QgdmFyaWFibGUub3RoZXIubGFuZ3VhZ2U/IC0tQWxsYW47IHNjb3BpbmcgdGhpcyBhcyB2YXJpYWJsZS5sYW5ndWFnZSB0byBtYXRjaCBPYmplY3RpdmUtQ1wncyBoYW5kbGluZyBvZiBcJ3NlbGZcJywgd2hpY2ggaXMgaW5jb25zaXN0ZW50IHdpdGggQysrXCdzIGhhbmRsaW5nIG9mIFwndGhpc1wnIGJ1dCBwZXJoYXBzIGludGVudGlvbmFsbHkgc28gLS0gUm9iJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5pbycsCiAgICAgICAgICAgcmVnZXg6ICc8PXw+PXw9fDo9fFxcKnxcXHx8XFx8XFx8fFxcK3wtfC98JnwmJnw+fDx8XFw/fEB8QEB8XFxiKD86YW5kfG9yKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm90aGVyLmlvJywgcmVnZXg6ICdcXGJHTFtcXHdfXStcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmNsYXNzLmlvJywgcmVnZXg6ICdcXGJbQS1aXSg/OlxcdyspP1xcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uaW8nLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Y2xvbmV8Y2FsbHxpbml0fG1ldGhvZHxsaXN0fHZlY3RvcnxibG9ja3xcXHcrKD89XFxzKlxcKCkpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5vcGVuLWdsLmlvJywKICAgICAgICAgICByZWdleDogJ1xcYmdsKD86dXx1dCk/W0EtWl1cXHcrXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uaW8nLAogICAgICAgICAgIHJlZ2V4OiAnIiIiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmlvJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIiIiJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuaW8nLCByZWdleDogJ1xcXFwuJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC50cmlwbGUuaW8nIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uaW8nLAogICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5pbycsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5pbycsIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5pbycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLmlvJywKICAgICAgICAgICByZWdleDogJ1xcYig/OjAoPzp4fFgpWzAtOWEtZkEtRl0qfCg/OlswLTldK1xcLj9bMC05XSp8XFwuWzAtOV0rKSg/Oig/OmV8RSkoPzpcXCt8LSk/WzAtOV0rKT8pKD86THxsfFVMfHVsfHV8VXxGfGYpP1xcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3ZhcmlhYmxlLm90aGVyLmdsb2JhbC5pbycsIHJlZ2V4OiAnTG9iYnlcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5pbycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpUUlVFfHRydWV8RkFMU0V8ZmFsc2V8TlVMTHxudWxsfE51bGx8TmlsfG5pbHxZRVN8Tk8pXFxiJyB9IF0gfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKSW9IaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsgZmlsZVR5cGVzOiBbICdpbycgXSwKICAgICAga2V5RXF1aXZhbGVudDogJ15+SScsCiAgICAgIG5hbWU6ICdJbycsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5pbycgfTsKCgpvb3AuaW5oZXJpdHMoSW9IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSW9IaWdobGlnaHRSdWxlcyA9IElvSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvaW8iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9pb19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIElvSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2lvX2hpZ2hsaWdodF9ydWxlcyIpLklvSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSW9IaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvaW8iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9pbyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-jack.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qYWNrX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEphY2tIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RyaW5nMiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RyaW5nMSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXg6ICItPzBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OjB8Wy0rXT9bMS05XVswLTldKilcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmJpbmFyeSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI8WzAtOUEtRmEtZl1bMC05QS1GYS1mXShcXHMrWzAtOUEtRmEtZl1bMC05QS1GYS1mXSkqPiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UubnVsbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJudWxsXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoPzpJbnRlZ2VyfEJvb2xlYW58TnVsbHxTdHJpbmd8QnVmZmVyfFR1cGxlfExpc3R8T2JqZWN0fEZ1bmN0aW9ufENvcm91dGluZXxGb3JtKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzpyZXR1cm58YWJvcnR8dmFyc3xmb3J8ZGVsZXRlfGlufGlzfGVzY2FwZXxleGVjfHNwbGl0fGFuZHxpZnxlbGlmfGVsc2V8d2hpbGUpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJsYW5ndWFnZS5idWlsdGluIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OmxpbmVzfHNvdXJjZXxwYXJzZXxyZWFkLXN0cmVhbXxpbnRlcnZhbHxzdWJzdHJ8cGFyc2VpbnR8d3JpdGV8cHJpbnR8cmFuZ2V8cmFuZHxpbnNwZWN0fGJpbmR8aS12YWx1ZXN8aS1wYWlyc3xpLW1hcHxpLWZpbHRlcnxpLWNodW5rfGktYWxsXFw/fGktYW55XFw/fGktY29sbGVjdHxpLXppcHxpLW1lcmdlfGktZWFjaClcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UuZm9ybSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJAW2Etel0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5zeW1ib2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnOitbYS16QS1aX10oWy1dP1thLXpBLVowLTlfXSkqWz8hXT8nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1thLXpBLVpfXShbLV0/W2EtekEtWjAtOV9dKSpbPyFdPycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHxcXHx8XFxeXFxefCYmfCE9fD09fDw9fDx8Pj18PnxcXCt8LXxcXCp8XFwvfFxcXnxcXCV8XFwjfFxcISIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RyaW5nMSIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/OnhbMC05YS1mQS1GXXsyfXx1WzAtOWEtZkEtRl17NH18WyciXFxcL2JmbnJ0XSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXidcXFxcXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RyaW5nMiIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/OnhbMC05YS1mQS1GXXsyfXx1WzAtOWEtZkEtRl17NH18WyciXFxcL2JmbnJ0XSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdbXiJcXFxcXSsnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKICAgIAp9OwoKb29wLmluaGVyaXRzKEphY2tIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSmFja0hpZ2hsaWdodFJ1bGVzID0gSmFja0hpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvamFjayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phY2tfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYWNrX2hpZ2hsaWdodF9ydWxlcyIpLkphY2tIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phY2siOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9qYWNrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-jade.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbW9kZXMgPSByZXF1aXJlKCIuLi9jb25maWciKS4kbW9kZXM7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKCnZhciBlc2NhcGVkID0gZnVuY3Rpb24oY2gpIHsKICAgIHJldHVybiAiKD86W14iICsgbGFuZy5lc2NhcGVSZWdFeHAoY2gpICsgIlxcXFxdfFxcXFwuKSoiOwp9OwoKdmFyIE1hcmtkb3duSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwogICAgdmFyIGNvZGVCbG9ja1N0YXJ0UnVsZSA9IHsKICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICByZWdleCA6IC9eXHMqKGBgYCtbXmBdKnx+fn4rW15+XSopJC8sCiAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIHN0YXRlLCBzdGFjaywgbGluZSkgewogICAgICAgICAgICB2YXIgbSA9IHZhbHVlLm1hdGNoKC9eKFxzKikoW2B+XSspKC4qKS8pOwogICAgICAgICAgICB2YXIgbGFuZ3VhZ2UgPSAvW1x3LV0rfCQvLmV4ZWMobVszXSlbMF07CiAgICAgICAgICAgIGlmICghbW9kZXNbbGFuZ3VhZ2VdKQogICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSAiIjsKICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgiZ2l0aHViYmxvY2siLCBbXSwgW21bMV0sIG1bMl0sIGxhbmd1YWdlXSwgc3RhdGUpOwogICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICB9LAogICAgICAgIG5leHQgIDogImdpdGh1YmJsb2NrIgogICAgfTsKICAgIHZhciBjb2RlQmxvY2tSdWxlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgcmVnZXggOiAiLioiLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgdmFyIGVtYmVkU3RhdGUgPSBzdGFja1sxXTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IHN0YWNrWzJdWzBdOwogICAgICAgICAgICB2YXIgZW5kTWFya2VyID0gc3RhY2tbMl1bMV07CiAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IHN0YWNrWzJdWzJdOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIG0gPSAvXihccyopKGArfH4rKVxzKiQvLmV4ZWModmFsdWUpOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBtICYmIG1bMV0ubGVuZ3RoIDwgaW5kZW50Lmxlbmd0aCArIDMKICAgICAgICAgICAgICAgICYmIG1bMl0ubGVuZ3RoID49IGVuZE1hcmtlci5sZW5ndGggJiYgbVsyXVswXSA9PSBlbmRNYXJrZXJbMF0KICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCwgMyk7CiAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgIGlmIChsYW5ndWFnZSAmJiBtb2Rlc1tsYW5ndWFnZV0pIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbW9kZXNbbGFuZ3VhZ2VdLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnModmFsdWUsIGVtYmVkU3RhdGUuc2xpY2UoMCkpOwogICAgICAgICAgICAgICAgc3RhY2tbMV0gPSBkYXRhLnN0YXRlOwogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudG9rZW5zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgIH0KICAgIH1dOwoKICAgIHRoaXMuJHJ1bGVzWyJzdGFydCJdLnVuc2hpZnQoewogICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgIHJlZ2V4IDogJ14kJywKICAgICAgICBuZXh0OiAiYWxsb3dCbG9jayIKICAgIH0sIHsgLy8gaDEKICAgICAgICB0b2tlbjogIm1hcmt1cC5oZWFkaW5nLjEiLAogICAgICAgIHJlZ2V4OiAiXj0rKD89XFxzKiQpIgogICAgfSwgeyAvLyBoMgogICAgICAgIHRva2VuOiAibWFya3VwLmhlYWRpbmcuMiIsCiAgICAgICAgcmVnZXg6ICJeXFwtKyg/PVxccyokKSIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAibWFya3VwLmhlYWRpbmcuIiArIHZhbHVlLmxlbmd0aDsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogL14jezEsNn0oPz1cc3wkKS8sCiAgICAgICAgbmV4dCA6ICJoZWFkZXIiCiAgICB9LAogICAgY29kZUJsb2NrU3RhcnRSdWxlLAogICAgeyAvLyBibG9jayBxdW90ZQogICAgICAgIHRva2VuIDogInN0cmluZy5ibG9ja3F1b3RlIiwKICAgICAgICByZWdleCA6ICJeXFxzKj5cXHMqKD86WyorLV18XFxkK1xcLik/XFxzKyIsCiAgICAgICAgbmV4dCAgOiAiYmxvY2txdW90ZSIKICAgIH0sIHsgLy8gSFIgKiAtIF8KICAgICAgICB0b2tlbiA6ICJjb25zdGFudCIsCiAgICAgICAgcmVnZXggOiAiXiB7MCwzfSg/Oig/OlxcKiA/KXszLH18KD86XFwtID8pezMsfXwoPzpcXF8gPyl7Myx9KVxccyokIiwKICAgICAgICBuZXh0OiAiYWxsb3dCbG9jayIKICAgIH0sIHsgLy8gbGlzdAogICAgICAgIHRva2VuIDogIm1hcmt1cC5saXN0IiwKICAgICAgICByZWdleCA6ICJeXFxzezAsM30oPzpbKistXXxcXGQrXFwuKVxccysiLAogICAgICAgIG5leHQgIDogImxpc3RibG9jay1zdGFydCIKICAgIH0sIHsKICAgICAgICBpbmNsdWRlIDogImJhc2ljIgogICAgfSk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgImJhc2ljIiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcW1xcYCpfe31cW1xdKCkjK1wtLiFdLwogICAgICAgIH0sIHsgLy8gY29kZSBzcGFuIGAKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIihgKykoLio/W15gXSkoXFwxKSIKICAgICAgICB9LCB7IC8vIHJlZmVyZW5jZQogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJjb25zdGFudCIsICJ0ZXh0IiwgInVybCIsICJzdHJpbmciLCAidGV4dCJdLAogICAgICAgICAgICByZWdleCA6ICJeKFsgXXswLDN9XFxbKShbXlxcXV0rKShcXF06XFxzKikoW14gXSspKFxccyooPzpbXCJdW15cIl0rW1wiXSk/KFxccyopKSQiCiAgICAgICAgfSwgeyAvLyBsaW5rIGJ5IHJlZmVyZW5jZQogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJzdHJpbmciLCAidGV4dCIsICJjb25zdGFudCIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFspKCIgKyBlc2NhcGVkKCJdIikgKyAiKShcXF1cXHMqXFxbKSgiKyBlc2NhcGVkKCJdIikgKyAiKShcXF0pIgogICAgICAgIH0sIHsgLy8gbGluayBieSB1cmwKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAic3RyaW5nIiwgInRleHQiLCAibWFya3VwLnVuZGVybGluZSIsICJzdHJpbmciLCAidGV4dCJdLAogICAgICAgICAgICByZWdleCA6ICIoXFwhP1xcWykoIiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFsKICAgICAgICAgICAgICAgICAgICBlc2NhcGVkKCJdIikgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgdGV4dCBvciBhbHQgdGV4dAogICAgICAgICAgICAgICAgICAgICIpKFxcXVxcKCkiKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXSgKICAgICAgICAgICAgICAgICAgICAnKCg/OlteXFwpXFxzXFxcXF18XFxcXC58XFxzKD89W14iXSkpKiknICsgICAgICAgIC8vIGhyZWYgb3IgaW1hZ2UKICAgICAgICAgICAgICAgICAgICAnKFxccyoiJyArICBlc2NhcGVkKCciJykgKyAnIlxccyopPycgKyAgICAgICAgICAgIC8vICJ0aXRsZSIKICAgICAgICAgICAgICAgICAgICAiKFxcKSkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICkKICAgICAgICB9LCB7IC8vIHN0cm9uZyAqKiBfXwogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3Ryb25nIiwKICAgICAgICAgICAgcmVnZXggOiAiKFsqXXsyfXxbX117Mn0oPz1cXFMpKSguKj9cXFNbKl9dKikoXFwxKSIKICAgICAgICB9LCB7IC8vIGVtcGhhc2lzICogXwogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW1waGFzaXMiLAogICAgICAgICAgICByZWdleCA6ICIoWypdfFtfXSg/PVxcUykpKC4qP1xcU1sqX10qKShcXDEpIgogICAgICAgIH0sIHsgLy8KICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAidXJsIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwpKCIrCiAgICAgICAgICAgICAgICAgICAgICAiKD86aHR0cHM/fGZ0cHxkaWN0KTpbXidcIj5cXHNdKyIrCiAgICAgICAgICAgICAgICAgICAgICAifCIrCiAgICAgICAgICAgICAgICAgICAgICAiKD86bWFpbHRvOik/Wy0uXFx3XStcXEBbLWEtejAtOV0rKD86XFwuWy1hLXowLTldKykqXFwuW2Etel0rIisKICAgICAgICAgICAgICAgICAgICAiKSg+KSIKICAgICAgICB9XSwKICAgICAgICAiYWxsb3dCbG9jayI6IFsKICAgICAgICAgICAge3Rva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLCByZWdleCA6ICJeIHs0fS4rIiwgbmV4dCA6ICJhbGxvd0Jsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJlbXB0eV9saW5lIiwgcmVnZXggOiAnXiQnLCBuZXh0OiAiYWxsb3dCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW4gOiAiZW1wdHkiLCByZWdleCA6ICIiLCBuZXh0IDogInN0YXJ0In0KICAgICAgICBdLAoKICAgICAgICAiaGVhZGVyIiA6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiYmFzaWMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiaGVhZGluZyIKICAgICAgICB9IF0sCgogICAgICAgICJsaXN0YmxvY2stc3RhcnQiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC52YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxbWyB4XVxdKT8vLAogICAgICAgICAgICBuZXh0ICA6ICJsaXN0YmxvY2siCiAgICAgICAgfV0sCgogICAgICAgICJsaXN0YmxvY2siIDogWyB7IC8vIExpc3RzIG9ubHkgZXNjYXBlIG9uIGNvbXBsZXRlbHkgYmxhbmsgbGluZXMuCiAgICAgICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgICAgICByZWdleCA6ICJeJCIsCiAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgIH0sIHsgLy8gbGlzdAogICAgICAgICAgICB0b2tlbiA6ICJtYXJrdXAubGlzdCIsCiAgICAgICAgICAgIHJlZ2V4IDogIl5cXHN7MCwzfSg/OlsqKy1dfFxcZCtcXC4pXFxzKyIsCiAgICAgICAgICAgIG5leHQgIDogImxpc3RibG9jay1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYmFzaWMiLCBub0VzY2FwZTogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgY29kZUJsb2NrU3RhcnRSdWxlLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImxpc3QiIC8vZG8gbm90IHVzZSBtYXJrdXAubGlzdCB0byBhbGxvdyBzdGxpbmcgbGVhZGluZyBgKmAgZGlmZmVybnRseQogICAgICAgIH0gXSwKCiAgICAgICAgImJsb2NrcXVvdGUiIDogWyB7IC8vIEJsb2NrcXVvdGVzIG9ubHkgZXNjYXBlIG9uIGJsYW5rIGxpbmVzLgogICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgcmVnZXggOiAiXlxccyokIiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfSwgeyAvLyBibG9jayBxdW90ZQogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYmxvY2txdW90ZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIl5cXHMqPlxccyooPzpbKistXXxcXGQrXFwuKT9cXHMrIiwKICAgICAgICAgICAgbmV4dCAgOiAiYmxvY2txdW90ZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYmFzaWMiLCBub0VzY2FwZTogdHJ1ZQogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZy5ibG9ja3F1b3RlIgogICAgICAgIH0gXSwKCiAgICAgICAgImdpdGh1YmJsb2NrIiA6IGNvZGVCbG9ja1J1bGVzCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cm9vcC5pbmhlcml0cyhNYXJrZG93bkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5NYXJrZG93bkhpZ2hsaWdodFJ1bGVzID0gTWFya2Rvd25IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpOwoKdmFyIFNjc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgcHJvcGVydGllcyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0VHlwZS5zcGxpdCgifCIpKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiaHNsfGhzbGF8cmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVyc3xhYnN8YWRqdXN0X2NvbG9yfGFkanVzdF9odWV8IiArCiAgICAgICAgICJhbHBoYXxqb2lufGJsdWV8Y2VpbHxjaGFuZ2VfY29sb3J8Y29tcGFyYWJsZXxjb21wbGVtZW50fGRhcmtlbnxkZXNhdHVyYXRlfCIgKyAKICAgICAgICAgImZsb29yfGdyYXlzY2FsZXxncmVlbnxodWV8aWZ8aW52ZXJ0fGpvaW58bGVuZ3RofGxpZ2h0ZW58bGlnaHRuZXNzfG1peHwiICsgCiAgICAgICAgICJudGh8b3BhY2lmeXxvcGFjaXR5fHBlcmNlbnRhZ2V8cXVvdGV8cmVkfHJvdW5kfHNhdHVyYXRlfHNhdHVyYXRpb258IiArCiAgICAgICAgICJzY2FsZV9jb2xvcnx0cmFuc3BhcmVudGl6ZXx0eXBlX29mfHVuaXR8dW5pdGxlc3N8dW5xdW90ZSIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIGNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnQuc3BsaXQoInwiKSk7CgogICAgdmFyIGNvbG9ycyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnRDb2xvci5zcGxpdCgifCIpKTsKICAgIAogICAgdmFyIGtleXdvcmRzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiQG1peGlufEBleHRlbmR8QGluY2x1ZGV8QGltcG9ydHxAbWVkaWF8QGRlYnVnfEB3YXJufEBpZnxAZm9yfEBlYWNofEB3aGlsZXxAZWxzZXxAZm9udC1mYWNlfEAtd2Via2l0LWtleWZyYW1lc3xpZnxhbmR8IWRlZmF1bHR8bW9kdWxlfGRlZnxlbmR8ZGVjbGFyZSIpLnNwbGl0KCJ8IikKICAgICk7CiAgICAKICAgIHZhciB0YWdzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiYXxhYmJyfGFjcm9ueW18YWRkcmVzc3xhcHBsZXR8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiYXNlZm9udHxiZG98IiArIAogICAgICAgICAiYmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2VudGVyfGNpdGV8Y29kZXxjb2x8Y29sZ3JvdXB8IiArIAogICAgICAgICAiY29tbWFuZHxkYXRhbGlzdHxkZHxkZWx8ZGV0YWlsc3xkZm58ZGlyfGRpdnxkbHxkdHxlbXxlbWJlZHxmaWVsZHNldHwiICsgCiAgICAgICAgICJmaWdjYXB0aW9ufGZpZ3VyZXxmb250fGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGhlYWR8IiArIAogICAgICAgICAiaGVhZGVyfGhncm91cHxocnxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2V5Z2VufGtiZHxsYWJlbHxsZWdlbmR8bGl8IiArIAogICAgICAgICAibGlua3xtYXB8bWFya3xtZW51fG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHwiICsgCiAgICAgICAgICJvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzfHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fCIgKyAKICAgICAgICAgInNtYWxsfHNvdXJjZXxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1bW1hcnl8c3VwfHRhYmxlfHRib2R5fHRkfCIgKyAKICAgICAgICAgInRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dGl0bGV8dHJ8dHR8dXx1bHx2YXJ8dmlkZW98d2JyfHhtcCIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIG51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0uKlxcXFwkJywKICAgICAgICAgICAgICAgIG5leHQgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddLipcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgcmVnZXggOiBudW1SZSArICIoPzpjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuZnVuY3Rpb24iLCAic3RyaW5nIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih1cmxcXCgpKC4qKShcXCkpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC50eXBlIjsKICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5mdW5jdGlvbiI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sb3JzLmhhc093blByb3BlcnR5KHZhbHVlLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhZ3MuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0IjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC0/W0BhLXpfXVtAYS16MC05X1xcLV0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16X1xcLSRdW2EtejAtOV9cXC0kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjx8Pnw8PXw+PXw9PXwhPXwtfCV8I3xcXCt8XFwkfFxcK3xcXCoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKFNjc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2Nzc0hpZ2hsaWdodFJ1bGVzID0gU2Nzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2xlc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCcuL2Nzc19oaWdobGlnaHRfcnVsZXMnKTsKCnZhciBMZXNzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCgogICAgdmFyIGtleXdvcmRMaXN0ID0gIkBpbXBvcnR8QG1lZGlhfEBmb250LWZhY2V8QGtleWZyYW1lc3xALXdlYmtpdC1rZXlmcmFtZXN8QHN1cHBvcnRzfCIgKyAKICAgICAgICAiQGNoYXJzZXR8QHBsdWdpbnxAbmFtZXNwYWNlfEBkb2N1bWVudHxAcGFnZXxAdmlld3BvcnR8QC1tcy12aWV3cG9ydHwiICsKICAgICAgICAib3J8YW5kfHdoZW58bm90IjsKCiAgICB2YXIga2V5d29yZHMgPSBrZXl3b3JkTGlzdC5zcGxpdCgnfCcpOwoKICAgIHZhciBwcm9wZXJ0aWVzID0gQ3NzSGlnaGxpZ2h0UnVsZXMuc3VwcG9ydFR5cGUuc3BsaXQoJ3wnKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQiOiBDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnQsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkTGlzdCwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogQ3NzSGlnaGxpZ2h0UnVsZXMuc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7ICAgCgogICAgdmFyIG51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIG51bVJlICsgIikoY2h8Y218ZGVnfGVtfGV4fGZyfGdkfGdyYWR8SHp8aW58a0h6fG1tfG1zfHBjfHB0fHB4fHJhZHxyZW18c3x0dXJufHZofHZtfHZ3fCUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuZnVuY3Rpb24iLCAicGFyZW4ubHBhcmVuIiwgInN0cmluZyIsICJwYXJlbi5ycGFyZW4iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih1cmwpKFxcKCkoLiopKFxcKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmZ1bmN0aW9uIiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDpleHRlbmR8W2EtejAtOV9cXC1dKykoXFwoKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChrZXl3b3Jkcy5pbmRleE9mKHZhbHVlLnRvTG93ZXJDYXNlKCkpID4gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJbQFxcJF1bYS16MC05X1xcLUBcXCRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW0BcXCRdXFx7W2EtejAtOV9cXC1AXFwkXSpcXH0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgICAgICAgICAgICAgICAgIGlmKHByb3BlcnRpZXMuaW5kZXhPZihmaXJzdC50b0xvd2VyQ2FzZSgpKSA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbInN1cHBvcnQudHlwZS5wcm9wZXJ0eSIsICJ0ZXh0Il07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJzdXBwb3J0LnR5cGUudW5rbm93blByb3BlcnR5IiwgInRleHQiXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAiKFthLXowLTktX10rKShcXHMqOikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJiIgICAvLyBzcGVjaWFsIGNhc2UgLSBhbHdheXMgdHJlYXQgYXMga2V5d29yZAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC0/W0BhLXpfXVtAYS16MC05X1xcLV0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICI6W2Etel9dW2EtejAtOS1fXSoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI8fD58PD18Pj18PXwhPXwtfCV8XFwrfFxcKiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKExlc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTGVzc0hpZ2hsaWdodFJ1bGVzID0gTGVzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NvZmZlZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgogICAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICAgIHZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKICAgIG9vcC5pbmhlcml0cyhDb2ZmZWVIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCiAgICBmdW5jdGlvbiBDb2ZmZWVIaWdobGlnaHRSdWxlcygpIHsKICAgICAgICB2YXIgaWRlbnRpZmllciA9ICJbJEEtWmEtel9cXHg3Zi1cXHVmZmZmXVskXFx3XFx4N2YtXFx1ZmZmZl0qIjsKCiAgICAgICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICAgICAidGhpc3x0aHJvd3x0aGVufHRyeXx0eXBlb2Z8c3VwZXJ8c3dpdGNofHJldHVybnxicmVha3xieXxjb250aW51ZXwiICsKICAgICAgICAgICAgImNhdGNofGNsYXNzfGlufGluc3RhbmNlb2Z8aXN8aXNudHxpZnxlbHNlfGV4dGVuZHN8Zm9yfG93bnwiICsKICAgICAgICAgICAgImZpbmFsbHl8ZnVuY3Rpb258d2hpbGV8d2hlbnxuZXd8bm98bm90fGRlbGV0ZXxkZWJ1Z2dlcnxkb3xsb29wfG9mfG9mZnwiICsKICAgICAgICAgICAgIm9yfG9ufHVubGVzc3x1bnRpbHxhbmR8eWVzfHlpZWxkfGV4cG9ydHxpbXBvcnR8ZGVmYXVsdCIKICAgICAgICApOwoKICAgICAgICB2YXIgbGFuZ0NvbnN0YW50ID0gKAogICAgICAgICAgICAidHJ1ZXxmYWxzZXxudWxsfHVuZGVmaW5lZHxOYU58SW5maW5pdHkiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGlsbGVnYWwgPSAoCiAgICAgICAgICAgICJjYXNlfGNvbnN0fGZ1bmN0aW9ufHZhcnx2b2lkfHdpdGh8ZW51bXxpbXBsZW1lbnRzfCIgKwogICAgICAgICAgICAiaW50ZXJmYWNlfGxldHxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xzdGF0aWMiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIHN1cHBvcnRDbGFzcyA9ICgKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxSZWZlcmVuY2VFcnJvcnxTdHJpbmd8IiArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiArCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgKwogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheSIKICAgICAgICApOwoKICAgICAgICB2YXIgc3VwcG9ydEZ1bmN0aW9uID0gKAogICAgICAgICAgICAiTWF0aHxKU09OfGlzTmFOfGlzRmluaXRlfHBhcnNlSW50fHBhcnNlRmxvYXR8ZW5jb2RlVVJJfCIgKwogICAgICAgICAgICAiZW5jb2RlVVJJQ29tcG9uZW50fGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8U3RyaW5nfCIKICAgICAgICApOwoKICAgICAgICB2YXIgdmFyaWFibGVMYW5ndWFnZSA9ICgKICAgICAgICAgICAgIndpbmRvd3xhcmd1bWVudHN8cHJvdG90eXBlfGRvY3VtZW50IgogICAgICAgICk7CgogICAgICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogbGFuZ0NvbnN0YW50LAogICAgICAgICAgICAiaW52YWxpZC5pbGxlZ2FsIjogaWxsZWdhbCwKICAgICAgICAgICAgImxhbmd1YWdlLnN1cHBvcnQuY2xhc3MiOiBzdXBwb3J0Q2xhc3MsCiAgICAgICAgICAgICJsYW5ndWFnZS5zdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiB2YXJpYWJsZUxhbmd1YWdlCiAgICAgICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICAgICAgdmFyIGZ1bmN0aW9uUnVsZSA9IHsKICAgICAgICAgICAgdG9rZW46IFsicGFyZW4ubHBhcmVuIiwgInZhcmlhYmxlLnBhcmFtZXRlciIsICJwYXJlbi5ycGFyZW4iLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiXSwKICAgICAgICAgICAgcmVnZXg6IC8oPzooXCgpKCg/OiJbXiIpXSo/InwnW14nKV0qPyd8XC9bXlwvKV0qP1wvfFteKCkiJ1wvXSkqPykoXCkpKFxzKikpPyhbXC09XT4pLy5zb3VyY2UKICAgICAgICB9OwoKICAgICAgICB2YXIgc3RyaW5nRXNjYXBlID0gL1xcKD86eFswLTlhLWZBLUZdezJ9fHVbMC05YS1mQS1GXXs0fXxbMC0yXVswLTddezAsMn18M1swLTZdWzAtN10/fDM3WzAtN10/fFs0LTddWzAtN10/fC4pLzsKCiAgICAgICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgICAgIHN0YXJ0IDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OjB4W1xcZGEtZkEtRl0rfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpbZUVdWystXT9cXGQrKT8pIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInFkb2MiLAogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIHJlZ2V4IDogIicnJyIsIG5leHQgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICInJyciLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleCA6IHN0cmluZ0VzY2FwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxcWRvYyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICciIiInLAogICAgICAgICAgICAgICAgICAgIG5leHQgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICciIiInLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJwYXJlbi5zdHJpbmciLCByZWdleCA6ICcjeycsIHB1c2ggOiAic3RhcnQifSwKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4IDogc3RyaW5nRXNjYXBlfSwKICAgICAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInFzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIHJlZ2V4IDogIiciLCBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiJyIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4IDogc3RyaW5nRXNjYXBlfSwKICAgICAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInFxc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLCByZWdleCA6ICciJywgbmV4dCA6IFsKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5lbmQiLCByZWdleCA6ICciJywgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4uc3RyaW5nIiwgcmVnZXggOiAnI3snLCBwdXNoIDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleCA6IHN0cmluZ0VzY2FwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJqcyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiYCIsIG5leHQgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICJgIiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiBzdHJpbmdFc2NhcGV9LAogICAgICAgICAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInsiICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ9IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpIHx8ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV4dC5pbmRleE9mKCJzdHJpbmciKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5yZWdleCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiLy8vIiwKICAgICAgICAgICAgICAgICAgICBuZXh0IDogImhlcmVnZXgiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4IiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8oPzpcLyg/IVtccz1dKVteW1wvXG5cXF0qKD86KD86XFxbXHNcU118XFtbXlxdXG5cXF0qKD86XFxbXHNcU11bXlxdXG5cXF0qKSpdKVteW1wvXG5cXF0qKSpcLykoPzpbaW1neV17MCw0fSkoPyFcdykvCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiIyMjKD8hIykiLAogICAgICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIjLioiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInRleHQiLCAiaWRlbnRpZmllciJdLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIihcXC4pKFxccyopKCIgKyBpbGxlZ2FsICsgIikiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcLnsxLDN9IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwgInRleHQiLCAibGFuZ3VhZ2Uuc3VwcG9ydC5jbGFzcyIsCiAgICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgImtleXdvcmQiLCAidGV4dCIsICJsYW5ndWFnZS5zdXBwb3J0LmNsYXNzIl0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiKGNsYXNzKShcXHMrKSgiICsgaWRlbnRpZmllciArICIpKD86KFxccyspKGV4dGVuZHMpKFxccyspKCIgKyBpZGVudGlmaWVyICsgIikpPyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6IFsiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiXS5jb25jYXQoZnVuY3Rpb25SdWxlLnRva2VuKSwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXIgKyAiKShcXHMqKShbPTpdKShcXHMqKSIgKyBmdW5jdGlvblJ1bGUucmVnZXgKICAgICAgICAgICAgICAgIH0sIAogICAgICAgICAgICAgICAgZnVuY3Rpb25SdWxlLCAKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiQCg/OiIgKyBpZGVudGlmaWVyICsgIik/IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllcgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXCx8XFwuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcLT1dPiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoPzpbLSsqLyU8PiZ8XiE/PV09fD4+Pj0/fFxcLVxcLXxcXCtcXCt8Ojp8JiY9fFxcfFxcfD18PDw9fD4+PXxcXD9cXC58XFwuezIsM318WyEqKy09PjxdKSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsoe1tdIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXX0pXSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICAgICAgfV0sCgoKICAgICAgICAgICAgaGVyZWdleCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXgiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLio/Ly8vW2ltZ3ldezAsNH0nLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5yZWdleCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrKD86Iy4qKT8iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5yZWdleCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFMrIgogICAgICAgICAgICB9XSwKCiAgICAgICAgICAgIGNvbW1lbnQgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcjIyMnLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfTsKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7CiAgICB9CgogICAgZXhwb3J0cy5Db2ZmZWVIaWdobGlnaHRSdWxlcyA9IENvZmZlZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvamFkZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWFya2Rvd25faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvc2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9sZXNzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2NvZmZlZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBNYXJrZG93bkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiKS5NYXJrZG93bkhpZ2hsaWdodFJ1bGVzOwp2YXIgU2Fzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zY3NzX2hpZ2hsaWdodF9ydWxlcyIpLlNjc3NIaWdobGlnaHRSdWxlczsKdmFyIExlc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbGVzc19oaWdobGlnaHRfcnVsZXMiKS5MZXNzSGlnaGxpZ2h0UnVsZXM7CnZhciBDb2ZmZWVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY29mZmVlX2hpZ2hsaWdodF9ydWxlcyIpLkNvZmZlZUhpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKCmZ1bmN0aW9uIG1peGluX2VtYmVkKHRhZywgcHJlZml4KSB7CiAgICByZXR1cm4geyAKICAgICAgICB0b2tlbiA6ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5qYWRlIiwKICAgICAgICByZWdleCA6ICJeXFxzKlxcOiIgKyB0YWcsCiAgICAgICAgbmV4dCAgOiBwcmVmaXggKyAic3RhcnQiCiAgICB9Owp9Cgp2YXIgSmFkZUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC02XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIjM3WzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IAogICAgICAgIHsKICAgICJzdGFydCI6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLmltcG9ydC5pbmNsdWRlLmphZGUiLAogICAgICAgICAgICByZWdleDogIlxccypcXGJpbmNsdWRlXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3RoZXIuZG9jdHlwZS5qYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICJeISEhXFxzKig/OlthLXpBLVowLTktX10rKT8iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdmFsdWUubGVuZ3RoIC0gMiwgY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4OiAvXlxzKlwvXC8vLAogICAgICAgICAgICBuZXh0OiAiY29tbWVudF9ibG9jayIKICAgICAgICB9LAogICAgICAgIG1peGluX2VtYmVkKCJtYXJrZG93biIsICJtYXJrZG93bi0iKSwKICAgICAgICBtaXhpbl9lbWJlZCgic2FzcyIsICJzYXNzLSIpLAogICAgICAgIG1peGluX2VtYmVkKCJsZXNzIiwgImxlc3MtIiksCiAgICAgICAgbWl4aW5fZW1iZWQoImNvZmZlZSIsICJjb2ZmZWUtIiksCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyAic3RvcmFnZS50eXBlLmZ1bmN0aW9uLmphZGUiLAogICAgICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbi5qYWRlIiwKICAgICAgICAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmJlZ2luLmphZGUiLAogICAgICAgICAgICAgICAgICAgICAgICJ2YXJpYWJsZS5wYXJhbWV0ZXIuZnVuY3Rpb24uamFkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24ucGFyYW1ldGVycy5lbmQuamFkZSIKICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogIl4oXFxzKm1peGluKSggW1xcd1xcLV0rKShcXHMqXFwoKSguKj8pKFxcKSkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbICJzdG9yYWdlLnR5cGUuZnVuY3Rpb24uamFkZSIsICJlbnRpdHkubmFtZS5mdW5jdGlvbi5qYWRlIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiXihcXHMqbWl4aW4pKCBbXFx3XFwtXSspIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInNvdXJjZS5qcy5lbWJlZGRlZC5qYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICJeXFxzKig/Oi18PXwhPSkiLAogICAgICAgICAgICBuZXh0OiAianMtc3RhcnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmludGVycG9sYXRlZC5qYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICJbIyFdXFx7W15cXH1dK1xcfSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJtZXRhLnRhZy5hbnkuamFkZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvXlxzKig/IVx3KzopKD86W1x3LV0rfCg/PVwufCMpXSkvLAogICAgICAgICAgICBuZXh0OiAidGFnX3NpbmdsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdXBvcnQudHlwZS5hdHRyaWJ1dGUuaWQuamFkZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiI1xcdysiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3Vwb3J0LnR5cGUuYXR0cmlidXRlLmNsYXNzLmphZGUiLAogICAgICAgICAgICByZWdleDogIlxcLlxcdysiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogIlxccyooPzpcXCgpIiwKICAgICAgICAgICAgbmV4dDogInRhZ19hdHRyaWJ1dGVzIgogICAgICAgIH0KICAgIF0sCiAgICAiY29tbWVudF9ibG9jayI6IFsKICAgICAgICB7cmVnZXg6IC9eXHMqKD86XC9cLyk/Lywgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8PSBzdGFja1sxXSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlLnNsaWNlKC0xKSA9PSAiLyIpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXSA9IHZhbHVlLmxlbmd0aCAtIDI7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiAidGV4dCI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgICAgIH0KICAgICAgICB9LCBuZXh0OiAic3RhcnQifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAiY29tbWVudCJ9CiAgICBdLAogICAgInRhZ19zaW5nbGUiOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5jbGFzcy5qYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bXFx3LV0rIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5pZC5qYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICIjW1xcdy1dKyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsidGV4dCIsICJwdW5jdHVhdGlvbiJdLAogICAgICAgICAgICByZWdleDogIigkKXwoKD8hXFwufCN8PXwtKSkiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfQogICAgXSwKICAgICJ0YWdfYXR0cmlidXRlcyI6IFsgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAnIig/PS4pJywKICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5qYWRlIiwgInB1bmN0dWF0aW9uIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKFthLXpBLVo6XFwuLV0rKSg9KT8iLAogICAgICAgICAgICBuZXh0OiAiYXR0cmlidXRlX3N0cmluZ3MiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogIlxcKSIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9CiAgICBdLAogICAgImF0dHJpYnV0ZV9zdHJpbmdzIjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICcoPz1cXFMpJywKICAgICAgICAgICAgbmV4dCAgOiAidGFnX2F0dHJpYnV0ZXMiCiAgICAgICAgfQogICAgXSwKICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAnW14iXFxcXF0rJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQgIDogInRhZ19hdHRyaWJ1dGVzIgogICAgICAgIH0KICAgIF0sCiAgICAicXN0cmluZyIgOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiW14nXFxcXF0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgbmV4dCAgOiAidGFnX2F0dHJpYnV0ZXMiCiAgICAgICAgfQogICAgXQp9OwoKICAgIHRoaXMuZW1iZWRSdWxlcyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsICJqcy0iLCBbewogICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgcmVnZXg6ICIuJCIsCiAgICAgICAgbmV4dDogInN0YXJ0IgogICAgfV0pOwp9OwoKb29wLmluaGVyaXRzKEphZGVIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSmFkZUhpZ2hsaWdodFJ1bGVzID0gSmFkZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvamFkZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phZGVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYWRlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phZGVfaGlnaGxpZ2h0X3J1bGVzIikuSmFkZUhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphZGVIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgeyAKCXRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qYWRlIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvamFkZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-java.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgSmF2YUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAiYWJzdHJhY3R8Y29udGludWV8Zm9yfG5ld3xzd2l0Y2h8IiArCiAgICAiYXNzZXJ0fGRlZmF1bHR8Z290b3xwYWNrYWdlfHN5bmNocm9uaXplZHwiICsKICAgICJib29sZWFufGRvfGlmfHByaXZhdGV8dGhpc3wiICsKICAgICJicmVha3xkb3VibGV8aW1wbGVtZW50c3xwcm90ZWN0ZWR8dGhyb3d8IiArCiAgICAiYnl0ZXxlbHNlfGltcG9ydHxwdWJsaWN8dGhyb3dzfCIgKwogICAgImNhc2V8ZW51bXxpbnN0YW5jZW9mfHJldHVybnx0cmFuc2llbnR8IiArCiAgICAiY2F0Y2h8ZXh0ZW5kc3xpbnR8c2hvcnR8dHJ5fCIgKwogICAgImNoYXJ8ZmluYWx8aW50ZXJmYWNlfHN0YXRpY3x2b2lkfCIgKwogICAgImNsYXNzfGZpbmFsbHl8bG9uZ3xzdHJpY3RmcHx2b2xhdGlsZXwiICsKICAgICJjb25zdHxmbG9hdHxuYXRpdmV8c3VwZXJ8d2hpbGV8IiArCiAgICAidmFyIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIik7CgoKICAgIHZhciBsYW5nQ2xhc3NlcyA9ICgKICAgICAgICAiQWJzdHJhY3RNZXRob2RFcnJvcnxBc3NlcnRpb25FcnJvcnxDbGFzc0NpcmN1bGFyaXR5RXJyb3J8IisKICAgICAgICAiQ2xhc3NGb3JtYXRFcnJvcnxEZXByZWNhdGVkfEVudW1Db25zdGFudE5vdFByZXNlbnRFeGNlcHRpb258IisKICAgICAgICAiRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yfElsbGVnYWxBY2Nlc3NFcnJvcnwiKwogICAgICAgICJJbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb258SW5zdGFudGlhdGlvbkVycm9yfEludGVybmFsRXJyb3J8IisKICAgICAgICAiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb258Tm9TdWNoRmllbGRFcnJvcnxPdmVycmlkZXxQcm9jZXNzfCIrCiAgICAgICAgIlByb2Nlc3NCdWlsZGVyfFNlY3VyaXR5TWFuYWdlcnxTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgIlN1cHByZXNzV2FybmluZ3N8VHlwZU5vdFByZXNlbnRFeGNlcHRpb258VW5rbm93bkVycm9yfCIrCiAgICAgICAgIlVuc2F0aXNmaWVkTGlua0Vycm9yfFVuc3VwcG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3J8VmVyaWZ5RXJyb3J8IisKICAgICAgICAiSW5zdGFudGlhdGlvbkV4Y2VwdGlvbnxJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnwiKwogICAgICAgICJOb1N1Y2hGaWVsZEV4Y2VwdGlvbnxJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb258TnVtYmVyRm9ybWF0RXhjZXB0aW9ufCIrCiAgICAgICAgIlNlY3VyaXR5RXhjZXB0aW9ufFZvaWR8SW5oZXJpdGFibGVUaHJlYWRMb2NhbHxJbGxlZ2FsU3RhdGVFeGNlcHRpb258IisKICAgICAgICAiSW50ZXJydXB0ZWRFeGNlcHRpb258Tm9TdWNoTWV0aG9kRXhjZXB0aW9ufElsbGVnYWxBY2Nlc3NFeGNlcHRpb258IisKICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb258RW51bXxTdHJpY3RNYXRofFBhY2thZ2V8Q29tcGlsZXJ8IisKICAgICAgICAiUmVhZGFibGV8UnVudGltZXxTdHJpbmdCdWlsZGVyfE1hdGh8SW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcnwiKwogICAgICAgICJOb1N1Y2hNZXRob2RFcnJvcnxUaHJlYWRMb2NhbHxSdW50aW1lUGVybWlzc2lvbnxBcml0aG1ldGljRXhjZXB0aW9ufCIrCiAgICAgICAgIk51bGxQb2ludGVyRXhjZXB0aW9ufExvbmd8SW50ZWdlcnxTaG9ydHxCeXRlfERvdWJsZXxOdW1iZXJ8RmxvYXR8IisKICAgICAgICAiQ2hhcmFjdGVyfEJvb2xlYW58U3RhY2tUcmFjZUVsZW1lbnR8QXBwZW5kYWJsZXxTdHJpbmdCdWZmZXJ8IisKICAgICAgICAiSXRlcmFibGV8VGhyZWFkR3JvdXB8UnVubmFibGV8VGhyZWFkfElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb258IisKICAgICAgICAiU3RhY2tPdmVyZmxvd0Vycm9yfE91dE9mTWVtb3J5RXJyb3J8VmlydHVhbE1hY2hpbmVFcnJvcnwiKwogICAgICAgICJBcnJheVN0b3JlRXhjZXB0aW9ufENsYXNzQ2FzdEV4Y2VwdGlvbnxMaW5rYWdlRXJyb3J8IisKICAgICAgICAiTm9DbGFzc0RlZkZvdW5kRXJyb3J8Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbnxSdW50aW1lRXhjZXB0aW9ufCIrCiAgICAgICAgIkV4Y2VwdGlvbnxUaHJlYWREZWF0aHxFcnJvcnxUaHJvd2FibGV8U3lzdGVtfENsYXNzTG9hZGVyfCIrCiAgICAgICAgIkNsb25lYWJsZXxDbGFzc3xDaGFyU2VxdWVuY2V8Q29tcGFyYWJsZXxTdHJpbmd8T2JqZWN0IgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogInRoaXMiLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGxhbmdDbGFzc2VzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdWzAtOWEtZkEtRl9dKnxbYkJdWzAxXVswMV9dKilbTGxTc0RkRmZZeV0/XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZFtcZF9dKig/Oig/OlwuW1xkX10qKT8oPzpbZUVdWystXT9bXGRfXSspPyk/W0xsU3NEZEZmWXldP1xiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICByZWdleDogIihvcGVuKD86XFxzKykpP21vZHVsZSg/PVxccypcXHcpIiwKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICBuZXh0OiBbewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgICAgIG5leHQ6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJcXGIocmVxdWlyZXN8dHJhbnNpdGl2ZXxleHBvcnRzfG9wZW5zfHRvfHVzZXN8cHJvdmlkZXN8d2l0aClcXGIiLAogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQiIAogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXHcrIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIiLCAvLyBleGl0IGlmIHRoZXJlIGlzIGFueXRoaW5nIGVsc2UKICAgICAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICAKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSmF2YUhpZ2hsaWdodFJ1bGVzID0gSmF2YUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9qYXZhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIENTdHlsZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuaW1wb3J0UmVnZXggPSAvXmltcG9ydCAvOwogICAgdGhpcy5nZXRDU3R5bGVGb2xkV2lkZ2V0ID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICBpZiAodGhpcy5pbXBvcnRSZWdleC50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgICAgICBpZiAocm93ID09IDAgfHwgIXRoaXMuaW1wb3J0UmVnZXgudGVzdChzZXNzaW9uLmdldExpbmUocm93IC0gMSkpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5nZXRDU3R5bGVGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q3N0eWxlRm9sZFdpZGdldFJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U7CiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmltcG9ydFJlZ2V4KTsKICAgICAgICBpZiAoIW1hdGNoIHx8IGZvbGRTdHlsZSAhPT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENzdHlsZUZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICBpZiAobGluZS5tYXRjaCgvXlxzKiQvKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKCFsaW5lLm1hdGNoKHRoaXMuaW1wb3J0UmVnZXgpKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvamF2YSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEphdmFTY3JpcHRNb2RlID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0IikuTW9kZTsKdmFyIEphdmFIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YV9oaWdobGlnaHRfcnVsZXMiKS5KYXZhSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvamF2YSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIEphdmFTY3JpcHRNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSmF2YUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgSmF2YUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBKYXZhU2NyaXB0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qYXZhIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvamF2YSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9qYXZhc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-json.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qc29uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEpzb25IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXVxccyooPz06KScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIHNpbmdsZSBxdW90ZWQgc3RyaW5ncyBhcmUgbm90IGFsbG93ZWQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50cyBhcmUgbm90IGFsbG93ZWQsIGJ1dCB3aG8gY2FyZXM/CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuc3RhcnQiLCAvLyBjb21tZW50cyBhcmUgbm90IGFsbG93ZWQsIGJ1dCB3aG8gY2FyZXM/CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86eFswLTlhLWZBLUZdezJ9fHVbMC05YS1mQS1GXXs0fXxbIlxcXC9iZm5ydF0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZW5kIiwgLy8gY29tbWVudHMgYXJlIG5vdCBhbGxvd2VkLCBidXQgd2hvIGNhcmVzPwogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKICAgIAp9OwoKb29wLmluaGVyaXRzKEpzb25IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSnNvbkhpZ2hsaWdodFJ1bGVzID0gSnNvbkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvanNvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2pzb25faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qc29uX2hpZ2hsaWdodF9ydWxlcyIpLkpzb25IaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2pzb25fd29ya2VyIiwgIkpzb25Xb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvanNvbiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2pzb24iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-jsoniq.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS94cXVlcnkvanNvbmlxX2xleGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewptb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiBvdXRlciAobW9kdWxlcywgY2FjaGUsIGVudHJ5KSB7CiAgICB2YXIgcHJldmlvdXNSZXF1aXJlID0gdHlwZW9mIHJlcXVpcmUgPT0gImZ1bmN0aW9uIiAmJiByZXF1aXJlOwogICAgZnVuY3Rpb24gbmV3UmVxdWlyZShuYW1lLCBqdW1wZWQpewogICAgICAgIGlmKCFjYWNoZVtuYW1lXSkgewogICAgICAgICAgICBpZighbW9kdWxlc1tuYW1lXSkgewogICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRSZXF1aXJlID0gdHlwZW9mIHJlcXVpcmUgPT0gImZ1bmN0aW9uIiAmJiByZXF1aXJlOwogICAgICAgICAgICAgICAgaWYgKCFqdW1wZWQgJiYgY3VycmVudFJlcXVpcmUpIHJldHVybiBjdXJyZW50UmVxdWlyZShuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JlcXVpcmUpIHJldHVybiBwcmV2aW91c1JlcXVpcmUobmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgXCcnICsgbmFtZSArICdcJycpOwogICAgICAgICAgICAgICAgZXJyLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7CiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG0gPSBjYWNoZVtuYW1lXSA9IHtleHBvcnRzOnt9fTsKICAgICAgICAgICAgbW9kdWxlc1tuYW1lXVswXS5jYWxsKG0uZXhwb3J0cywgZnVuY3Rpb24oeCl7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBtb2R1bGVzW25hbWVdWzFdW3hdOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JlcXVpcmUoaWQgPyBpZCA6IHgpOwogICAgICAgICAgICB9LG0sbS5leHBvcnRzLG91dGVyLG1vZHVsZXMsY2FjaGUsZW50cnkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FjaGVbbmFtZV0uZXhwb3J0czsKICAgIH0KICAgIGZvcih2YXIgaT0wO2k8ZW50cnkubGVuZ3RoO2krKykgbmV3UmVxdWlyZShlbnRyeVtpXSk7CiAgICByZXR1cm4gbmV3UmVxdWlyZShlbnRyeVswXSk7Cn0pCih7Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9sZXhlcnMvSlNPTmlxVG9rZW5pemVyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBKU09OaXFUb2tlbml6ZXIgPSBleHBvcnRzLkpTT05pcVRva2VuaXplciA9IGZ1bmN0aW9uIEpTT05pcVRva2VuaXplcihzdHJpbmcsIHBhcnNpbmdFdmVudEhhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0KHN0cmluZywgcGFyc2luZ0V2ZW50SGFuZGxlcik7CiAgdmFyIHNlbGYgPSB0aGlzOwoKICB0aGlzLlBhcnNlRXhjZXB0aW9uID0gZnVuY3Rpb24oYiwgZSwgcywgbywgeCkKICB7CiAgICB2YXIKICAgICAgYmVnaW4gPSBiLAogICAgICBlbmQgPSBlLAogICAgICBzdGF0ZSA9IHMsCiAgICAgIG9mZmVuZGluZyA9IG8sCiAgICAgIGV4cGVjdGVkID0geDsKCiAgICB0aGlzLmdldEJlZ2luID0gZnVuY3Rpb24oKSB7cmV0dXJuIGJlZ2luO307CiAgICB0aGlzLmdldEVuZCA9IGZ1bmN0aW9uKCkge3JldHVybiBlbmQ7fTsKICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbigpIHtyZXR1cm4gc3RhdGU7fTsKICAgIHRoaXMuZ2V0RXhwZWN0ZWQgPSBmdW5jdGlvbigpIHtyZXR1cm4gZXhwZWN0ZWQ7fTsKICAgIHRoaXMuZ2V0T2ZmZW5kaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9mZmVuZGluZzt9OwoKICAgIHRoaXMuZ2V0TWVzc2FnZSA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgcmV0dXJuIG9mZmVuZGluZyA8IDAgPyAibGV4aWNhbCBhbmFseXNpcyBmYWlsZWQiIDogInN5bnRheCBlcnJvciI7CiAgICB9OwogIH07CgogIGZ1bmN0aW9uIGluaXQoc3RyaW5nLCBwYXJzaW5nRXZlbnRIYW5kbGVyKQogIHsKICAgIGV2ZW50SGFuZGxlciA9IHBhcnNpbmdFdmVudEhhbmRsZXI7CiAgICBpbnB1dCA9IHN0cmluZzsKICAgIHNpemUgPSBzdHJpbmcubGVuZ3RoOwogICAgcmVzZXQoMCwgMCwgMCk7CiAgfQoKICB0aGlzLmdldElucHV0ID0gZnVuY3Rpb24oKQogIHsKICAgIHJldHVybiBpbnB1dDsKICB9OwoKICBmdW5jdGlvbiByZXNldChsLCBiLCBlKQogIHsKICAgICAgICAgICAgYjAgPSBiOyBlMCA9IGI7CiAgICBsMSA9IGw7IGIxID0gYjsgZTEgPSBlOwogICAgZW5kID0gZTsKICAgIGV2ZW50SGFuZGxlci5yZXNldChpbnB1dCk7CiAgfQoKICB0aGlzLmdldE9mZmVuZGluZ1Rva2VuID0gZnVuY3Rpb24oZSkKICB7CiAgICB2YXIgbyA9IGUuZ2V0T2ZmZW5kaW5nKCk7CiAgICByZXR1cm4gbyA+PSAwID8gSlNPTmlxVG9rZW5pemVyLlRPS0VOW29dIDogbnVsbDsKICB9OwoKICB0aGlzLmdldEV4cGVjdGVkVG9rZW5TZXQgPSBmdW5jdGlvbihlKQogIHsKICAgIHZhciBleHBlY3RlZDsKICAgIGlmIChlLmdldEV4cGVjdGVkKCkgPCAwKQogICAgewogICAgICBleHBlY3RlZCA9IEpTT05pcVRva2VuaXplci5nZXRUb2tlblNldCgtIGUuZ2V0U3RhdGUoKSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGV4cGVjdGVkID0gW0pTT05pcVRva2VuaXplci5UT0tFTltlLmdldEV4cGVjdGVkKCldXTsKICAgIH0KICAgIHJldHVybiBleHBlY3RlZDsKICB9OwoKICB0aGlzLmdldEVycm9yTWVzc2FnZSA9IGZ1bmN0aW9uKGUpCiAgewogICAgdmFyIHRva2VuU2V0ID0gdGhpcy5nZXRFeHBlY3RlZFRva2VuU2V0KGUpOwogICAgdmFyIGZvdW5kID0gdGhpcy5nZXRPZmZlbmRpbmdUb2tlbihlKTsKICAgIHZhciBwcmVmaXggPSBpbnB1dC5zdWJzdHJpbmcoMCwgZS5nZXRCZWdpbigpKTsKICAgIHZhciBsaW5lcyA9IHByZWZpeC5zcGxpdCgiXG4iKTsKICAgIHZhciBsaW5lID0gbGluZXMubGVuZ3RoOwogICAgdmFyIGNvbHVtbiA9IGxpbmVzW2xpbmUgLSAxXS5sZW5ndGggKyAxOwogICAgdmFyIHNpemUgPSBlLmdldEVuZCgpIC0gZS5nZXRCZWdpbigpOwogICAgcmV0dXJuIGUuZ2V0TWVzc2FnZSgpCiAgICAgICAgICsgKGZvdW5kID09IG51bGwgPyAiIiA6ICIsIGZvdW5kICIgKyBmb3VuZCkKICAgICAgICAgKyAiXG53aGlsZSBleHBlY3RpbmcgIgogICAgICAgICArICh0b2tlblNldC5sZW5ndGggPT0gMSA/IHRva2VuU2V0WzBdIDogKCJbIiArIHRva2VuU2V0LmpvaW4oIiwgIikgKyAiXSIpKQogICAgICAgICArICJcbiIKICAgICAgICAgKyAoc2l6ZSA9PSAwIHx8IGZvdW5kICE9IG51bGwgPyAiIiA6ICJhZnRlciBzdWNjZXNzZnVsbHkgc2Nhbm5pbmcgIiArIHNpemUgKyAiIGNoYXJhY3RlcnMgYmVnaW5uaW5nICIpCiAgICAgICAgICsgImF0IGxpbmUgIiArIGxpbmUgKyAiLCBjb2x1bW4gIiArIGNvbHVtbiArICI6XG4uLi4iCiAgICAgICAgICsgaW5wdXQuc3Vic3RyaW5nKGUuZ2V0QmVnaW4oKSwgTWF0aC5taW4oaW5wdXQubGVuZ3RoLCBlLmdldEJlZ2luKCkgKyA2NCkpCiAgICAgICAgICsgIi4uLiI7CiAgfTsKCiAgdGhpcy5wYXJzZV9zdGFydCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgic3RhcnQiLCBlMCk7CiAgICBsb29rYWhlYWQxVygxNCk7ICAgICAgICAgICAgICAgIC8vIE1vZHVsZURlY2wgfCBBbm5vdGF0aW9uIHwgT3B0aW9uRGVjbCB8IE9wZXJhdG9yIHwgVmFyaWFibGUgfCBUYWcgfCBBdHRyVGVzdCB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBzaGlmdCg1OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBicmVhazsKICAgIGNhc2UgNTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIHNoaWZ0KDU3KTsgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBicmVhazsKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICBzaGlmdCg1OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIHNoaWZ0KDQzKTsgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoOn4nCiAgICAgIHNoaWZ0KDQ1KTsgICAgICAgICAgICAgICAgICAgIC8vICcoOn4nCiAgICAgIGJyZWFrOwogICAgY2FzZSA0NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIHNoaWZ0KDQ0KTsgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDM3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBzaGlmdCgyNzcpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzQpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDQyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBzaGlmdCg0Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBjYXNlIDUyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgYnJlYWs7CiAgICBjYXNlIDY1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICBzaGlmdCg2NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgYnJlYWs7CiAgICBjYXNlIDY2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgICBzaGlmdCg2Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBzaGlmdCg0OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDUxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICBzaGlmdCg1MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgYnJlYWs7CiAgICBjYXNlIDU2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICBzaGlmdCg1Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgYnJlYWs7CiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICBzaGlmdCg1NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDM2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICchJwogICAgICBzaGlmdCgzNik7ICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgICAgc2hpZnQoNDApOyAgICAgICAgICAgICAgICAgICAgLy8gJyQkJwogICAgICBicmVhazsKICAgIGNhc2UgNTogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW5ub3RhdGlvbgogICAgICBzaGlmdCg1KTsgICAgICAgICAgICAgICAgICAgICAvLyBBbm5vdGF0aW9uCiAgICAgIGJyZWFrOwogICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNb2R1bGVEZWNsCiAgICAgIHNoaWZ0KDQpOyAgICAgICAgICAgICAgICAgICAgIC8vIE1vZHVsZURlY2wKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGlvbkRlY2wKICAgICAgc2hpZnQoNik7ICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uRGVjbAogICAgICBicmVhazsKICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXR0clRlc3QKICAgICAgc2hpZnQoMTUpOyAgICAgICAgICAgICAgICAgICAgLy8gQXR0clRlc3QKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkCiAgICAgIHNoaWZ0KDE2KTsgICAgICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODogICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICBicmVhazsKICAgIGNhc2UgMTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwKICAgICAgc2hpZnQoMTkpOyAgICAgICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgICAgc2hpZnQoMjApOyAgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbAogICAgICBicmVhazsKICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVmFyaWFibGUKICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gVmFyaWFibGUKICAgICAgYnJlYWs7CiAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhZwogICAgICBzaGlmdCg5KTsgICAgICAgICAgICAgICAgICAgICAvLyBUYWcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yCiAgICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRVFOYW1lKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoInN0YXJ0IiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfU3RhcnRUYWcgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN0YXJ0VGFnIiwgZTApOwogICAgbG9va2FoZWFkMVcoOCk7ICAgICAgICAgICAgICAgICAvLyBRTmFtZSB8IFNeV1MgfCBFT0YgfCAnIicgfCAiJyIgfCAnLz4nIHwgJz0nIHwgJz4nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA2MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgc2hpZnQoNjEpOyAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgIGJyZWFrOwogICAgY2FzZSA1MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLz4nCiAgICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFFOYW1lCiAgICAgIHNoaWZ0KDI5KTsgICAgICAgICAgICAgICAgICAgIC8vIFFOYW1lCiAgICAgIGJyZWFrOwogICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgc2hpZnQoNjApOyAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN0YXJ0VGFnIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfVGFnQ29udGVudCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVGFnQ29udGVudCIsIGUwKTsKICAgIGxvb2thaGVhZDEoMTEpOyAgICAgICAgICAgICAgICAgLy8gVGFnIHwgRW5kVGFnIHwgUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVsZW1lbnRDb250ZW50Q2hhciB8IENoYXJSZWYgfCBFT0YgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIHNoaWZ0KDI1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnRDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGNhc2UgOTogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFnCiAgICAgIHNoaWZ0KDkpOyAgICAgICAgICAgICAgICAgICAgIC8vIFRhZwogICAgICBicmVhazsKICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kVGFnCiAgICAgIHNoaWZ0KDEwKTsgICAgICAgICAgICAgICAgICAgIC8vIEVuZFRhZwogICAgICBicmVhazsKICAgIGNhc2UgNTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhW0NEQVRBWycKICAgICAgc2hpZnQoNTgpOyAgICAgICAgICAgICAgICAgICAgLy8gJzwhW0NEQVRBWycKICAgICAgYnJlYWs7CiAgICBjYXNlIDU3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBzaGlmdCg1Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIHNoaWZ0KDI3NSk7ICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgc2hpZnQoMjc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBicmVhazsKICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUYWdDb250ZW50IiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfQXBvc0F0dHIgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFwb3NBdHRyIiwgZTApOwogICAgbG9va2FoZWFkMSgxMCk7ICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlQXBvcyB8IEFwb3NBdHRyQ29udGVudENoYXIgfCBDaGFyUmVmIHwgRU9GIHwgIiciIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgc2hpZnQoMjMpOyAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICBicmVhazsKICAgIGNhc2UgMjc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0F0dHJDb250ZW50Q2hhcgogICAgICBzaGlmdCgyNyk7ICAgICAgICAgICAgICAgICAgICAvLyBBcG9zQXR0ckNvbnRlbnRDaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIHNoaWZ0KDIxKTsgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBzaGlmdCgyNzUpOyAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIHNoaWZ0KDI3OCk7ICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzQpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXBvc0F0dHIiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9RdW90QXR0ciA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUXVvdEF0dHIiLCBlMCk7CiAgICBsb29rYWhlYWQxKDkpOyAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYgfCBFc2NhcGVRdW90IHwgUXVvdEF0dHJDb250ZW50Q2hhciB8IENoYXJSZWYgfCBFT0YgfCAnIicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlUXVvdAogICAgICBzaGlmdCgyMik7ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjogICAgICAgICAgICAgICAgICAgICAgICAvLyBRdW90QXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0KDI2KTsgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIHNoaWZ0KDI3NSk7ICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgc2hpZnQoMjc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBicmVhazsKICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBicmVhazsKICAgIGNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJRdW90QXR0ciIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX0NEYXRhID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDRGF0YSIsIGUwKTsKICAgIGxvb2thaGVhZDEoMSk7ICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uQ29udGVudHMgfCBFT0YgfCAnXV0+JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uQ29udGVudHMKICAgICAgc2hpZnQoMTQpOyAgICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uQ29udGVudHMKICAgICAgYnJlYWs7CiAgICBjYXNlIDY3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICddXT4nCiAgICAgIHNoaWZ0KDY3KTsgICAgICAgICAgICAgICAgICAgIC8vICddXT4nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNEYXRhIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfWE1MQ29tbWVudCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiWE1MQ29tbWVudCIsIGUwKTsKICAgIGxvb2thaGVhZDEoMCk7ICAgICAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzIHwgRU9GIHwgJy0tPicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cwogICAgICBzaGlmdCgxMik7ICAgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgICAgYnJlYWs7CiAgICBjYXNlIDUwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICctLT4nCiAgICAgIHNoaWZ0KDUwKTsgICAgICAgICAgICAgICAgICAgIC8vICctLT4nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlhNTENvbW1lbnQiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9QSSA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUEkiLCBlMCk7CiAgICBsb29rYWhlYWQxKDMpOyAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMgfCBFT0YgfCAnPycgfCAnPz4nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzCiAgICAgIHNoaWZ0KDEzKTsgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgICAgYnJlYWs7CiAgICBjYXNlIDYyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBzaGlmdCg2Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgICAgYnJlYWs7CiAgICBjYXNlIDYzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc/PicKICAgICAgc2hpZnQoNjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQSSIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1ByYWdtYSA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJhZ21hIiwgZTApOwogICAgbG9va2FoZWFkMSgyKTsgICAgICAgICAgICAgICAgICAvLyBQcmFnbWFDb250ZW50cyB8IEVPRiB8ICcjJyB8ICcjKScKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIycKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIyknCiAgICAgIHNoaWZ0KDM5KTsgICAgICAgICAgICAgICAgICAgIC8vICcjKScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJhZ21hIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfQ29tbWVudCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tbWVudCIsIGUwKTsKICAgIGxvb2thaGVhZDEoNCk7ICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudENvbnRlbnRzIHwgRU9GIHwgJyg6JyB8ICc6KScKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICAgICAgc2hpZnQoNTUpOyAgICAgICAgICAgICAgICAgICAgLy8gJzopJwogICAgICBicmVhazsKICAgIGNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBzaGlmdCg0NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIGJyZWFrOwogICAgY2FzZSAzMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMKICAgICAgc2hpZnQoMzIpOyAgICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudENvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbW1lbnQiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9Db21tZW50RG9jID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21tZW50RG9jIiwgZTApOwogICAgbG9va2FoZWFkMSg2KTsgICAgICAgICAgICAgICAgICAvLyBEb2NUYWcgfCBEb2NDb21tZW50Q29udGVudHMgfCBFT0YgfCAnKDonIHwgJzopJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9jVGFnCiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIERvY1RhZwogICAgICBicmVhazsKICAgIGNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9jQ29tbWVudENvbnRlbnRzCiAgICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgIC8vIERvY0NvbW1lbnRDb250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzopJwogICAgICBzaGlmdCg1NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIGJyZWFrOwogICAgY2FzZSA0NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIHNoaWZ0KDQ0KTsgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tbWVudERvYyIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1F1b3RTdHJpbmcgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlF1b3RTdHJpbmciLCBlMCk7CiAgICBsb29rYWhlYWQxKDUpOyAgICAgICAgICAgICAgICAgIC8vIEpTT05DaGFyIHwgSlNPTkNoYXJSZWYgfCBKU09OUHJlZGVmaW5lZENoYXJSZWYgfCBFT0YgfCAnIicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpTT05QcmVkZWZpbmVkQ2hhclJlZgogICAgICBzaGlmdCgzKTsgICAgICAgICAgICAgICAgICAgICAvLyBKU09OUHJlZGVmaW5lZENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpTT05DaGFyUmVmCiAgICAgIHNoaWZ0KDIpOyAgICAgICAgICAgICAgICAgICAgIC8vIEpTT05DaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKU09OQ2hhcgogICAgICBzaGlmdCgxKTsgICAgICAgICAgICAgICAgICAgICAvLyBKU09OQ2hhcgogICAgICBicmVhazsKICAgIGNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJRdW90U3RyaW5nIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfQXBvc1N0cmluZyA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXBvc1N0cmluZyIsIGUwKTsKICAgIGxvb2thaGVhZDEoNyk7ICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZUFwb3MgfCBBcG9zQ2hhciB8IENoYXJSZWYgfCBFT0YgfCAiJyIKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgIHNoaWZ0KDIzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NDaGFyCiAgICAgIHNoaWZ0KDI0KTsgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NDaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFwb3NTdHJpbmciLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9QcmVmaXggPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByZWZpeCIsIGUwKTsKICAgIGxvb2thaGVhZDFXKDEzKTsgICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9OQ05hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJlZml4IiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfX0VRTmFtZSA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiX0VRTmFtZSIsIGUwKTsKICAgIGxvb2thaGVhZDFXKDEyKTsgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiX0VRTmFtZSIsIGUwKTsKICB9OwoKICBmdW5jdGlvbiBwYXJzZV9FUU5hbWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFUU5hbWUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBicmVhazsKICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIHNoaWZ0KDExOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIHNoaWZ0KDExOSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBzaGlmdCgxMjIpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIHNoaWZ0KDE0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgc2hpZnQoMTUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBicmVhazsKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIHNoaWZ0KDE2Myk7ICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBicmVhazsKICAgIGNhc2UgMTgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdCgxODMpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgc2hpZnQoMjE0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIHNoaWZ0KDIyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIHNoaWZ0KDI0MSk7ICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgc2hpZnQoMjQyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnQoMjUxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRnVuY3Rpb25OYW1lKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkVRTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Z1bmN0aW9uTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZ1bmN0aW9uTmFtZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBzaGlmdCgxNyk7ICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgICAgYnJlYWs7CiAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnQoNjgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgNzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBzaGlmdCg3MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgc2hpZnQoNzIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBzaGlmdCg3Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBicmVhazsKICAgIGNhc2UgNzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBzaGlmdCg3Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICBzaGlmdCg3OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgc2hpZnQoODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBzaGlmdCg4Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBzaGlmdCg4Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgc2hpZnQoODgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBzaGlmdCg5Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBzaGlmdCgxMDMpOyAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgc2hpZnQoMTA2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgc2hpZnQoMTA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBzaGlmdCgxMTEpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIHNoaWZ0KDExNik7ICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIHNoaWZ0KDExNyk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBzaGlmdCgxMjApOyAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgc2hpZnQoMTIxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgc2hpZnQoMTI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgc2hpZnQoMTI2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBicmVhazsKICAgIGNhc2UgMTI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICBzaGlmdCgxMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICBicmVhazsKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBzaGlmdCgxMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBzaGlmdCgxMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBzaGlmdCgxMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBzaGlmdCgxMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBzaGlmdCgxNDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHNoaWZ0KDE0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnQoMTQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIHNoaWZ0KDE0OSk7ICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgc2hpZnQoMTUxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIHNoaWZ0KDE1Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIHNoaWZ0KDE1OCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIHNoaWZ0KDE2MCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgc2hpZnQoMTYxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIHNoaWZ0KDE2Mik7ICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBzaGlmdCgxNjgpOyAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgc2hpZnQoMTcwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBicmVhazsKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgc2hpZnQoMTcyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgc2hpZnQoMTc2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgc2hpZnQoMTc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgIHNoaWZ0KDE3OSk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBzaGlmdCgxODApOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBicmVhazsKICAgIGNhc2UgMTgyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgc2hpZnQoMTgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgc2hpZnQoMTg0KTsgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBicmVhazsKICAgIGNhc2UgMTk2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIHNoaWZ0KDE5Nik7ICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBzaGlmdCgxOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIHNoaWZ0KDE5OSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBzaGlmdCgyMDApOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIHNoaWZ0KDIwNCk7ICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgICBzaGlmdCgyMTApOyAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBzaGlmdCgyMTEpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICBzaGlmdCgyMTYpOyAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICBicmVhazsKICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIHNoaWZ0KDIxNyk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgc2hpZnQoMjE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIHNoaWZ0KDIyMik7ICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgc2hpZnQoMjI3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgc2hpZnQoMjMzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBzaGlmdCgyMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBzaGlmdCgyMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIHNoaWZ0KDI0Nik7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgc2hpZnQoMjQ3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgc2hpZnQoMjQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgc2hpZnQoMjUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgc2hpZnQoMjU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgc2hpZnQoMjU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBzaGlmdCgyNjQpOyAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgc2hpZnQoMjY4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICBzaGlmdCgyNzIpOyAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICBicmVhazsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBzaGlmdCg3MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIHNoaWZ0KDg0KTsgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgYnJlYWs7CiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBzaGlmdCg5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgc2hpZnQoMTAwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgc2hpZnQoMTAyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAgc2hpZnQoMTA0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBzaGlmdCgxMjMpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgc2hpZnQoMTMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIHNoaWZ0KDEzOSk7ICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIHNoaWZ0KDE1Mik7ICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAgc2hpZnQoMTUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIHNoaWZ0KDE2OSk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgIHNoaWZ0KDE5MCk7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIHNoaWZ0KDE5Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIHNoaWZ0KDIwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICBzaGlmdCgyMjMpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICBicmVhazsKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBzaGlmdCgyMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgc2hpZnQoMjMyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBzaGlmdCgyMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgc2hpZnQoMjUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgIHNoaWZ0KDI1NSk7ICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgc2hpZnQoMjU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBzaGlmdCgyNjApOyAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgc2hpZnQoMjYxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIHNoaWZ0KDI2NSk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBzaGlmdCgxNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyMTkpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGdW5jdGlvbk5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OQ05hbWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOQ05hbWUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODogICAgICAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgc2hpZnQoMjgpOyAgICAgICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuCiAgICAgIGJyZWFrOwogICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIHNoaWZ0KDY4KTsgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0KDczKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0KDc3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDc4KTsgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0KDg2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0KDg3KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBzaGlmdCg5Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBzaGlmdCgxMDMpOyAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgc2hpZnQoMTA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgc2hpZnQoMTExKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBzaGlmdCgxMTYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0KDEyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdCgxMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdCgxMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICBzaGlmdCgxMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICBicmVhazsKICAgIGNhc2UgMTM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgc2hpZnQoMTM1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgc2hpZnQoMTQ0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBzaGlmdCgxNDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIHNoaWZ0KDE0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBzaGlmdCgxNDkpOyAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnQoMTU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnQoMTYwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnQoMTYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdCgxNzApOyAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdCgxNzIpOyAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdCgxNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTc5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnQoMTc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgc2hpZnQoMTg0KTsgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBicmVhazsKICAgIGNhc2UgMTk2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIHNoaWZ0KDE5Nik7ICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBzaGlmdCgxOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIHNoaWZ0KDE5OSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxODogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIHNoaWZ0KDIxOCk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBzaGlmdCgyMjIpOyAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBicmVhazsKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgc2hpZnQoMjM0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgc2hpZnQoMjM1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBzaGlmdCgyNDYpOyAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIHNoaWZ0KDI0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgc2hpZnQoMjUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBzaGlmdCgyNjQpOyAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgc2hpZnQoMjY4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDcxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDcyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdCg3Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDkxKTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBzaGlmdCg5NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBzaGlmdCgxMDEpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBzaGlmdCgxMTcpOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgc2hpZnQoMTE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHNoaWZ0KDEyMik7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgc2hpZnQoMTI3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBzaGlmdCgxMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBzaGlmdCgxMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBzaGlmdCgxMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIHNoaWZ0KDE0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgc2hpZnQoMTUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBicmVhazsKICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgc2hpZnQoMTUxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIHNoaWZ0KDE1Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgc2hpZnQoMTY4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBzaGlmdCgxODApOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBicmVhazsKICAgIGNhc2UgMTgyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgc2hpZnQoMTgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgc2hpZnQoMTgzKTsgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIHNoaWZ0KDE4OSk7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMjAwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0KDIwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnQoMjA0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIxMCk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIxMSk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBzaGlmdCgyMTQpOyAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnQoMjE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIHNoaWZ0KDIyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIHNoaWZ0KDI0MSk7ICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgc2hpZnQoMjQyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdCgyNDgpOyAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIHNoaWZ0KDI1MSk7ICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgc2hpZnQoMjU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgc2hpZnQoMjU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBzaGlmdCgyNjApOyAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICBzaGlmdCgyNzIpOyAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICBicmVhazsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBzaGlmdCg3MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIHNoaWZ0KDg0KTsgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgYnJlYWs7CiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBzaGlmdCg5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgc2hpZnQoMTAwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgc2hpZnQoMTAyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAgc2hpZnQoMTA0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBzaGlmdCgxMjMpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgc2hpZnQoMTMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIHNoaWZ0KDEzOSk7ICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIHNoaWZ0KDE1Mik7ICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAgc2hpZnQoMTUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIHNoaWZ0KDE2OSk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgIHNoaWZ0KDE5MCk7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIHNoaWZ0KDE5Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIHNoaWZ0KDIwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICBzaGlmdCgyMjMpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICBicmVhazsKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBzaGlmdCgyMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgc2hpZnQoMjMyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBzaGlmdCgyMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgc2hpZnQoMjUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgIHNoaWZ0KDI1NSk7ICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgc2hpZnQoMjU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBicmVhazsKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIHNoaWZ0KDI2MSk7ICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBzaGlmdCgyNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgc2hpZnQoOTUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgc2hpZnQoMTc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTkNOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gc2hpZnQodCkKICB7CiAgICBpZiAobDEgPT0gdCkKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBldmVudEhhbmRsZXIudGVybWluYWwoSlNPTmlxVG9rZW5pemVyLlRPS0VOW2wxXSwgYjEsIGUxID4gc2l6ZSA/IHNpemUgOiBlMSk7CiAgICAgIGIwID0gYjE7IGUwID0gZTE7IGwxID0gMDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgZXJyb3IoYjEsIGUxLCAwLCBsMSwgdCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB3aGl0ZXNwYWNlKCkKICB7CiAgICBpZiAoZTAgIT0gYjEpCiAgICB7CiAgICAgIGIwID0gZTA7CiAgICAgIGUwID0gYjE7CiAgICAgIGV2ZW50SGFuZGxlci53aGl0ZXNwYWNlKGIwLCBlMCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBtYXRjaFcoc2V0KQogIHsKICAgIHZhciBjb2RlOwogICAgZm9yICg7OykKICAgIHsKICAgICAgY29kZSA9IG1hdGNoKHNldCk7CiAgICAgIGlmIChjb2RlICE9IDMwKSAgICAgICAgICAgICAgIC8vIFNeV1MKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29kZTsKICB9CgogIGZ1bmN0aW9uIGxvb2thaGVhZDFXKHNldCkKICB7CiAgICBpZiAobDEgPT0gMCkKICAgIHsKICAgICAgbDEgPSBtYXRjaFcoc2V0KTsKICAgICAgYjEgPSBiZWdpbjsKICAgICAgZTEgPSBlbmQ7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBsb29rYWhlYWQxKHNldCkKICB7CiAgICBpZiAobDEgPT0gMCkKICAgIHsKICAgICAgbDEgPSBtYXRjaChzZXQpOwogICAgICBiMSA9IGJlZ2luOwogICAgICBlMSA9IGVuZDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGVycm9yKGIsIGUsIHMsIGwsIHQpCiAgewogICAgdGhyb3cgbmV3IHNlbGYuUGFyc2VFeGNlcHRpb24oYiwgZSwgcywgbCwgdCk7CiAgfQoKICB2YXIgbGssIGIwLCBlMDsKICB2YXIgbDEsIGIxLCBlMTsKICB2YXIgZXZlbnRIYW5kbGVyOwoKICB2YXIgaW5wdXQ7CiAgdmFyIHNpemU7CiAgdmFyIGJlZ2luOwogIHZhciBlbmQ7CgogIGZ1bmN0aW9uIG1hdGNoKHRva2VuU2V0SWQpCiAgewogICAgdmFyIG5vbmJtcCA9IGZhbHNlOwogICAgYmVnaW4gPSBlbmQ7CiAgICB2YXIgY3VycmVudCA9IGVuZDsKICAgIHZhciByZXN1bHQgPSBKU09OaXFUb2tlbml6ZXIuSU5JVElBTFt0b2tlblNldElkXTsKICAgIHZhciBzdGF0ZSA9IDA7CgogICAgZm9yICh2YXIgY29kZSA9IHJlc3VsdCAmIDQwOTU7IGNvZGUgIT0gMDsgKQogICAgewogICAgICB2YXIgY2hhcmNsYXNzOwogICAgICB2YXIgYzAgPSBjdXJyZW50IDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoY3VycmVudCkgOiAwOwogICAgICArK2N1cnJlbnQ7CiAgICAgIGlmIChjMCA8IDB4ODApCiAgICAgIHsKICAgICAgICBjaGFyY2xhc3MgPSBKU09OaXFUb2tlbml6ZXIuTUFQMFtjMF07CiAgICAgIH0KICAgICAgZWxzZSBpZiAoYzAgPCAweGQ4MDApCiAgICAgIHsKICAgICAgICB2YXIgYzEgPSBjMCA+PiA0OwogICAgICAgIGNoYXJjbGFzcyA9IEpTT05pcVRva2VuaXplci5NQVAxWyhjMCAmIDE1KSArIEpTT05pcVRva2VuaXplci5NQVAxWyhjMSAmIDMxKSArIEpTT05pcVRva2VuaXplci5NQVAxW2MxID4+IDVdXV07CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgaWYgKGMwIDwgMHhkYzAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBjMSA9IGN1cnJlbnQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChjdXJyZW50KSA6IDA7CiAgICAgICAgICBpZiAoYzEgPj0gMHhkYzAwICYmIGMxIDwgMHhlMDAwKQogICAgICAgICAgewogICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAgIGMwID0gKChjMCAmIDB4M2ZmKSA8PCAxMCkgKyAoYzEgJiAweDNmZikgKyAweDEwMDAwOwogICAgICAgICAgICBub25ibXAgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbG8gPSAwLCBoaSA9IDU7CiAgICAgICAgZm9yICh2YXIgbSA9IDM7IDsgbSA9IChoaSArIGxvKSA+PiAxKQogICAgICAgIHsKICAgICAgICAgIGlmIChKU09OaXFUb2tlbml6ZXIuTUFQMlttXSA+IGMwKSBoaSA9IG0gLSAxOwogICAgICAgICAgZWxzZSBpZiAoSlNPTmlxVG9rZW5pemVyLk1BUDJbNiArIG1dIDwgYzApIGxvID0gbSArIDE7CiAgICAgICAgICBlbHNlIHtjaGFyY2xhc3MgPSBKU09OaXFUb2tlbml6ZXIuTUFQMlsxMiArIG1dOyBicmVhazt9CiAgICAgICAgICBpZiAobG8gPiBoaSkge2NoYXJjbGFzcyA9IDA7IGJyZWFrO30KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHN0YXRlID0gY29kZTsKICAgICAgdmFyIGkwID0gKGNoYXJjbGFzcyA8PCAxMikgKyBjb2RlIC0gMTsKICAgICAgY29kZSA9IEpTT05pcVRva2VuaXplci5UUkFOU0lUSU9OWyhpMCAmIDE1KSArIEpTT05pcVRva2VuaXplci5UUkFOU0lUSU9OW2kwID4+IDRdXTsKCiAgICAgIGlmIChjb2RlID4gNDA5NSkKICAgICAgewogICAgICAgIHJlc3VsdCA9IGNvZGU7CiAgICAgICAgY29kZSAmPSA0MDk1OwogICAgICAgIGVuZCA9IGN1cnJlbnQ7CiAgICAgIH0KICAgIH0KCiAgICByZXN1bHQgPj49IDEyOwogICAgaWYgKHJlc3VsdCA9PSAwKQogICAgewogICAgICBlbmQgPSBjdXJyZW50IC0gMTsKICAgICAgdmFyIGMxID0gZW5kIDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoZW5kKSA6IDA7CiAgICAgIGlmIChjMSA+PSAweGRjMDAgJiYgYzEgPCAweGUwMDApIC0tZW5kOwogICAgICByZXR1cm4gZXJyb3IoYmVnaW4sIGVuZCwgc3RhdGUsIC0xLCAtMSk7CiAgICB9CgogICAgaWYgKG5vbmJtcCkKICAgIHsKICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdCA+PiA5OyBpID4gMDsgLS1pKQogICAgICB7CiAgICAgICAgLS1lbmQ7CiAgICAgICAgdmFyIGMxID0gZW5kIDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoZW5kKSA6IDA7CiAgICAgICAgaWYgKGMxID49IDB4ZGMwMCAmJiBjMSA8IDB4ZTAwMCkgLS1lbmQ7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgZW5kIC09IHJlc3VsdCA+PiA5OwogICAgfQoKICAgIHJldHVybiAocmVzdWx0ICYgNTExKSAtIDE7CiAgfQp9CgpKU09OaXFUb2tlbml6ZXIuZ2V0VG9rZW5TZXQgPSBmdW5jdGlvbih0b2tlblNldElkKQp7CiAgdmFyIHNldCA9IFtdOwogIHZhciBzID0gdG9rZW5TZXRJZCA8IDAgPyAtIHRva2VuU2V0SWQgOiBJTklUSUFMW3Rva2VuU2V0SWRdICYgNDA5NTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDI3OTsgaSArPSAzMikKICB7CiAgICB2YXIgaiA9IGk7CiAgICB2YXIgaTAgPSAoaSA+PiA1KSAqIDIwNjYgKyBzIC0gMTsKICAgIHZhciBpMSA9IGkwID4+IDI7CiAgICB2YXIgaTIgPSBpMSA+PiAyOwogICAgdmFyIGYgPSBKU09OaXFUb2tlbml6ZXIuRVhQRUNURURbKGkwICYgMykgKyBKU09OaXFUb2tlbml6ZXIuRVhQRUNURURbKGkxICYgMykgKyBKU09OaXFUb2tlbml6ZXIuRVhQRUNURURbKGkyICYgMykgKyBKU09OaXFUb2tlbml6ZXIuRVhQRUNURURbaTIgPj4gMl1dXV07CiAgICBmb3IgKCA7IGYgIT0gMDsgZiA+Pj49IDEsICsraikKICAgIHsKICAgICAgaWYgKChmICYgMSkgIT0gMCkKICAgICAgewogICAgICAgIHNldC5wdXNoKEpTT05pcVRva2VuaXplci5UT0tFTltqXSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHNldDsKfTsKCkpTT05pcVRva2VuaXplci5NQVAwID0KWyA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMjcsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzQsIDM1LCAzNiwgMzcsIDMxLCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgMzEsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDMxLCA2MiwgNjMsIDY0LCA2NSwgMzcKXTsKCkpTT05pcVRva2VuaXplci5NQVAxID0KWyAxMDgsIDEyNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDE1NiwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDIxNCwgMjE1LCAyMTMsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyNDcsIDI2MSwgMjc3LCAyOTMsIDMwOSwgMzQ3LCAzNjMsIDM3OSwgNDE2LCA0MTYsIDQxNiwgNDA4LCAzMzEsIDMyMywgMzMxLCAzMjMsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgNDMzLCA0MzMsIDQzMywgNDMzLCA0MzMsIDQzMywgNDMzLCAzMTYsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzOTQsIDQxNiwgNDE2LCA0MTcsIDQxNSwgNDE2LCA0MTYsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCAzMzAsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCA0MTYsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAyNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMiwgMzEsIDMxLCAzMywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzQsIDM1LCAzNiwgMzcsIDMxLCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgMzEsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDMxLCA2MiwgNjMsIDY0LCA2NSwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzEsIDMxLCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgNjYsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYKXTsKCkpTT05pcVRva2VuaXplci5NQVAyID0KWyA1NzM0NCwgNjM3NDQsIDY0OTc2LCA2NTAwOCwgNjU1MzYsIDk4MzA0MCwgNjM3NDMsIDY0OTc1LCA2NTAwNywgNjU1MzMsIDk4MzAzOSwgMTExNDExMSwgMzcsIDMxLCAzNywgMzEsIDMxLCAzNwpdOwoKSlNPTmlxVG9rZW5pemVyLklOSVRJQUwgPQpbIDEsIDIsIDQ5MTU1LCA1NzM0OCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNQpdOwoKSlNPTmlxVG9rZW5pemVyLlRSQU5TSVRJT04gPQpbIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxNzQwOCwgMTkyODgsIDE3NDM5LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMjIxMjYsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc2NzIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAxOTQ2OSwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAzNjkxOSwgMTgyMzQsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODQxOSwgMTg0MzIsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE4NTk5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTg4MjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE4OTQ0LCAxODk2MCwgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNzQsIDM2MTY5LCAxNzQzOSwgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIyMzE0LCAxOTEwNSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDIyMTI2LCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3NjcyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMTk0NjksIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMzY5MTksIDE4MjM0LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTg0MTksIDE4NDMyLCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxODU5OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE4ODI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxODk0NCwgMTg5NjAsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyMTgyLCAxOTI4OCwgMTkxMjEsIDM2ODY2LCAxNzQ2NiwgMTgzNDUsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTI3MywgMTk1NTIsIDE5MzA0LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkzMzIsIDE3NDIzLCAxOTM2MywgMzY4NjYsIDE3NDY2LCAxNzUzNywgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxODYxNCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDE5MzkxLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTk0MjcsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MTU0LCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMTc3NDAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjc4MCwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIzNzUsIDIyMTk3LCAxODQ2OSwgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyNDAxOCwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAyMTMzMSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTk0ODUsIDE5NTAxLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5NTM3LCAyMjM5MCwgMTk1NjgsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTU5NiwgMTk2MTEsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMTgyNDYsIDE5NjI3LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIyNDIsIDIwNTUzLCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDE4NjQ4LCAzMDQ3NywgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2NDcyLCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMTc4MDksIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMjE3NzAsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAxOTY0MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE5NjcyLCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMDUzOCwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE3OTc1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIzNDUsIDE5Mjg4LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5NzI2LCAxOTc0MiwgMjE1MjksIDI0MDM1LCAyMzExMiwgMjYyMjUsIDIzNTExLCAyNzc0OSwgMjczOTcsIDI0MDM1LCAzNDM2MCwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMzUxNjYsIDIzMTE0LCAyMzExNCwgMTk3NTgsIDIzNTExLCAzNTI0NywgMjM1MTEsIDIzNTExLCAyODQ0NywgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI0MjU0LCAxOTgyMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTEyLCAxOTQ0MSwgMzY1MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAxOTg0NiwgMTk4NjksIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAzMjE4NywgMTk4OTIsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMzY2NDcsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAzMzc1NywgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyNzA3MCwgMjM1MTEsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyOTI3NCwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMzExMTgsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAzMjQzMSwgMjM2MzQsIDMwODIxLCAyNDAzNSwgMjMxMTAsIDE5OTEzLCAyMzExNCwgMjM0NjcsIDMxMjYxLCAyMzI2MSwgMzQyOTksIDE5OTMyLCAyNDAzNSwgMzI2MDksIDE5OTY1LCAzNTM4OSwgMTk5ODQsIDI3Njg5LCAxOTgzMCwgMjkzOTEsIDI5MzM3LCAyMDA0MSwgMjI2NDMsIDM1NjE5LCAzMzcyOCwgMjAwNjIsIDIwMTIxLCAyMDE2NiwgMzUxMDAsIDI2MTQ1LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjAyMjcsIDI1NjcwLCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjAyNDMsIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA5NCwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDIxNzI0LCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjI3MzUsIDE5NTUyLCAyMDI4NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyNzUwLCAxOTI4OCwgMjE1MjksIDI0MDM1LCAyMzExMiwgMjgwNTYsIDIzNTExLCAyOTQ4MywgMjg3NTYsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjAzMjcsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMTE1NiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI0MjU0LCAyMDM3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI3NDQzLCAyMDM5NSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI5NDU3LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMzNDQ0LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODM1MCwgMjA0MjEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNTY0NSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIwNDQ3LCAyMDQ3NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjA0OTksIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMDUyMywgMjIyNTcsIDIwNTY5LCAyMDc4MywgMjE3MTUsIDE3NjAzLCAyMDY5OSwgMjA4MzcsIDIwNjE0LCAyMDYzMCwgMjExNDksIDIwNjcwLCAyMTQwNSwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE5MTc5LCAyMDY5NSwgMjA3MTYsIDIwNzMyLCAyMDc1NSwgMTkxOTQsIDE4MDQyLCAyMTY0MSwgMjA1OTIsIDIwNzc5LCAyMDU5OCwgMjE0MTIsIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjA3OTksIDIwNzAwLCAyMTAzMSwgMjA3NDQsIDIwNjk5LCAyMDgyOCwgMTgwNzUsIDIxMjU5LCAyMDU4MSwgMjA4NTMsIDE4MDQ4LCAyMDg2OCwgMjA4ODQsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMjExNzEsIDIxMjAwLCAyMDkzMSwgMjA5NDcsIDIxMzc4LCAyMDk1NSwgMjA5NzEsIDE4MDg2LCAyMDY0NSwgMjEwMDIsIDIwOTg2LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDI5MTc2LCAyMTA0NCwgMjE0MzgsIDIxMDE4LCAyMTEyMiwgMjEzOTMsIDIxMDYwLCAyMTg0NCwgMjEwOTQsIDIwNjU0LCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjU5NjcsIDIwNzYzLCAyMTc5OSwgMjExMTAsIDIxODMwLCAyMTEzOCwgMjEyNDYsIDIxMzAxLCAxODMzNiwgMTgzNjEsIDIxMTY1LCAyMTE4NywgMjA4MTIsIDIxMjE2LCAyMTIzMiwgMjEyODcsIDIxMzE3LCAxODU1MywgMjEzNDcsIDIxMzYzLCAyMTQyOCwgMjE0NTQsIDIxMjcxLCAyMTQ4MywgMjE0OTksIDIxNTE1LCAyMTU3NSwgMjE0NjcsIDE4NzEyLCAyMTU5MSwgMjE2MzMsIDIxMDc4LCAxODE4OSwgMTgxOTgsIDIwNjc5LCAyMTY1NywgMjE3MDEsIDIxMDc0LCAyMTY4NywgMjE3NDAsIDIxNzU2LCAyMTc4NiwgMjE4MTUsIDIxODYwLCAyMTg3NiwgMjE4OTIsIDIxOTQ2LCAyMTk2MiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzY0NTcsIDE5Mjg4LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDM2ODEzLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDIxOTgxLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMjIxNTEsIDIyMDA3LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAyNzg5OCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDIyMDQyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMjIwNzAsIDIyMTEyLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAyMjE0MiwgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MTA5LCAxOTI4OCwgMTg0NjksIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjE2NywgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDE3NzY4LCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIyMjcsIDM2NDg3LCAyMjI3MywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDE5MzE2LCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NzQ5LCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDIyMzA0LCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMTk1ODAsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyMzMwLCAxOTA4OSwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMTg3MjEsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjc2NSwgMTkzNDcsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMTgxMTQsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDI5NDgzLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI5MTE2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjc0NDMsIDIyNDkzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1NDEsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMjgzOSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI1NjQ1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzI2ODMsIDIyNTE2LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMjU0MCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDI0MDM1LCAyMzExMiwgMzI2MTgsIDIzNTExLCAyOTQ4MywgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyOTExNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI3NDQzLCAyMjQ5MywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTY0LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjI4MzksIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNTY0NSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMyNjgzLCAyMjUxNiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjA0OTksIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDIxNjA1LCAyNDAzNSwgMjMxMTIsIDMyNjE4LCAyMzUxMSwgMjk0ODMsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjk5MDgsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNzQ0MywgMjI0OTMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU2NCwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIyODM5LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjU2NDUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMjY4MywgMjI1MTYsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIwNDk5LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDI5NDgzLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI5MTE2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjc0NDMsIDIyNTYxLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1NjQsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMjgzOSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI1NjQ1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzI2ODMsIDIyNTE2LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDI0MDM1LCAyMzExMiwgMjM4MzcsIDIzNTExLCAyOTQ4MywgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI1ODQsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyOTExNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI3NDQzLCAyMjQ5MywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTY0LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjI4MzksIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNTY0NSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMyNjgzLCAyMjUxNiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjA0OTksIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDIxNjA1LCAyNDAzNSwgMjMxMTIsIDMyNjE4LCAyMzUxMSwgMzE1MDcsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgzMDYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzY0NDIsIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAyODEzNywgMjM1MTEsIDMxNTA3LCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MzA2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI0Njk0LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDI0MDM1LCAyMzExMiwgMzI2MTgsIDIzNTExLCAzMTUwNywgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyODMwNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTEyLCAyNDY5NCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMTU2OCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjY5MCwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDI3NTg0LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDIyNjU5LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIzNjAsIDE5NTUyLCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyNjc1LCAyMjgxMSwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAxOTEzMywgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAyMjgyNywgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjEzOSwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNjQsIDE5Mjg4LCAyMjg2NSwgMjI4ODEsIDMyMDMxLCAyMjg5NywgMjI5MTMsIDIyOTU2LCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMwMDMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjMwNTIsIDI5MTE2LCAyMzA3MywgMjkyNjgsIDI0MDM1LCAyNTU2MywgMjY5MTUsIDIzMTA2LCAyMzEzMSwgMjMxMTQsIDIzMTE0LCAyMzE1OSwgMjMxODEsIDIzMTk3LCAyMzI0OCwgMjM1MTEsIDIzNTExLCAyMzI4MiwgMjMzMDUsIDIyNDkzLCAzMjM2NCwgMjQwMzUsIDMzNDcyLCAzMDEzOCwgMjYzMjUsIDMxNzcwLCAzMzUwOCwgMjczNDUsIDMzNjY3LCAyMzExNCwgMjMzMjEsIDIzNDczLCAyMzM1MSwgMzU3OTMsIDM2NTc2LCAyMzUxMSwgMjMzNzUsIDIyNTAwLCAyNDE0NSwgMjQwMzUsIDI5MTk3LCAyMDE5MiwgMjQ1MzMsIDIzNDQwLCAyMzExNCwgMTkwMTcsIDIzNDU5LCAyMjgzOSwgMjM0ODksIDIzNTEwLCAyMzUxMSwgMzM1NjMsIDIzNTI4LCAzMjA3NiwgMjUzODksIDI0MDM1LCAyNjU3NiwgMjM1NjEsIDIzNTgzLCAyMzExNCwgMzI2ODMsIDIyNTE2LCAyMzYyMiwgMjM2NTUsIDIzNTExLCAyMzYzNCwgMzU0NTYsIDM3MTQ0LCAyMzExMCwgMjM2ODMsIDM0MTUzLCAyMDQ5OSwgMzI1MTMsIDI1ODI0LCAyMzcwNSwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMzMyNjMsIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDIwNTA3LCAzMjI0MSwgMjAxNTAsIDMxODYyLCAyNzQ2NCwgMzUxMDgsIDIzNzI3LCAyMzAwNywgMzU4OTUsIDM0OTUzLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAzMzk2NywgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2NDI3LCAxOTU1MiwgMjE2MDUsIDI0MDM1LCAyMzExMiwgMzI2MTgsIDIzNTExLCAyOTQ4MywgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyOTExNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI3MDI3LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzE0NzEsIDIzNzU2LCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ2ODcsIDIzNzcyLCAyMjQ5MywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTY0LCAyMzc4OCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjE1NTksIDIzODI4LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNTA4NiwgMjI4MzksIDIzODUzLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzg3NiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMyNjgzLCAyMjUxNiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjA0OTksIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMzE3NjEsIDIzOTA5LCAyMzk1MywgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA0OSwgMTkyODgsIDIxNjA1LCAzMDgyNSwgMjMxMTIsIDIzOTg3LCAyMzUxMSwgMjQwMDMsIDMxMDAxLCAyNzYxNywgMjQwMzQsIDI0MDM1LCAyNDAzNiwgMjQwNTIsIDI0MDg5LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyNDEwOSwgMjQxNjgsIDIzNTExLCAyMzUxMSwgMjkxMTYsIDI0MTg4LCAyNzYwOSwgMjAwMTcsIDI5NTE2LCAyNDAzNSwgMjY1NzYsIDI0MjIyLCAxOTk2OCwgMjMxMTQsIDI0MjUyLCAzMzgxMSwgMjI0NjgsIDI0MjcwLCAzMzU4NywgMjM1MTEsIDI0MzIwLCAyNzQ0MywgMjI0OTMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDMzOSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4MTI4LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4Mjc2LCAzNDU2NCwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMzI5MjksIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNDM1NywgMjMwMjksIDIyODM5LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNDM3NywgMjU2NDUsIDI0MDM1LCAzNDExMiwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjY2NDMsIDIzMTE0LCAzMjY4MywgMjI1MTYsIDIzNTExLCAyNTYzOCwgMjM1MTEsIDIzNzExLCAyNDAzNSwgMjQzOTUsIDI3ODA5LCAyMzExNCwgMjQ0MTQsIDIwNDk5LCAyNDQzMiwgMzA5MTcsIDIzNjI4LCAyNDAzNSwgMzA2ODAsIDIzMTExLCAyMzExNCwgMzAyMzMsIDI3MDc4LCAyNTc0OCwgMjQ0NTIsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAyNDQ3NSwgMTk4MjksIDI2NTc3LCAyNjU5NywgMjYxNTQsIDI0NTE5LCAyNDU1NiwgMjQ1OTYsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNDYzNCwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMjQ2NzksIDI0NzI3LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzY0MTIsIDE5Mjg4LCAyMTYwNSwgMTk5NDMsIDM0ODYxLCAzMjYxOCwgMjYwMjcsIDI5NDgzLCAzMjAxNiwgMzIwNTAsIDM2MjMzLCAyNDc3NiwgMzU1NzQsIDI0ODAxLCAyNDgxOSwgMzI2NzEsIDMxMjg5LCAyMjQyMCwgMjQ4NjgsIDI0ODg2LCAyMDA4NywgMjY4NDksIDI5MTE2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMzYyMjgsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNDk4MSwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyOTAyOCwgMjc0NDMsIDIyNDkzLCAyNDkyMywgMjc5NjUsIDI0MDM1LCAyNDAzNSwgMzI3OTcsIDI0OTQ2LCAyMzQ0MywgMjMxMTQsIDIzMTE0LCAyOTYzNiwgMjQ5OTcsIDIyODQ5LCAyODI1MiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjUwNDIsIDI1MTEwLCAyNDAzNSwgMjQwMzUsIDM0MDg1LCAyNDAzNiwgMjUxMzMsIDIzMTE0LCAyMzExNCwgMjUxNTIsIDIzMDI5LCAyMjgzOSwgMjUxNjksIDIzNTExLCAzNjc2NCwgMjM1MTEsIDI1NjQ1LCAzMDQwMywgMjQwMzUsIDI1MTg2LCAyNjU3NiwgMzE4MDYsIDI0MDkzLCAyNTIxMiwgMzI2ODMsIDIyNTE2LCAzMjcxMywgMjYyNDUsIDM0MjkzLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDMyNDA2LCAyMzExMSwgMjMxMTQsIDI4Njc2LCAzMDk0NCwgMjc2ODksIDI1MjM0LCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAzNzA2MywgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDIwMzc5LCAyNjEwMCwgMjkyMTgsIDIwMjExLCAzMDEwNSwgMjUyNTcsIDI1Mjg0LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMjQ4MzQsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDM0LCAxOTI4OCwgMjE2NzEsIDI1MzE0LCAyNTA3MiwgMjUzMzAsIDI1MzQ2LCAyNTM2MiwgMjk5MzksIDI5OTUxLCAzNTI4OCwgMjk5ODQsIDIzODEyLCAyNzIxNiwgMjU0MDUsIDI1NDI0LCAzMDQ1NiwgMjI1ODQsIDI2MjkyLCAyNTQ2MSwgMjU0ODAsIDMxNTkyLCAyOTExNiwgMjU1MTYsIDM0OTYzLCAyNTU0NSwgMjcwMDcsIDI1NTc5LCAzMzkzNywgMjU2MTQsIDI1NjYxLCAyNTY4NiwgMzQ4NzIsIDI1NzAyLCAyNTcxOCwgMjU3MzQsIDI1NzY5LCAyNTc5NSwgMjU4MTEsIDI1ODQwLCAyMjQ5MywgMjY1MzMsIDI1ODU2LCAyNDAzNSwgMjU4NzYsIDMwNzYzLCAyNzQ4MSwgMjU5MDksIDIzMTE0LCAyODk4NywgMjU5MzYsIDI1OTU0LCAyOTcwMCwgMjU5ODMsIDIzNTExLCAzMTQxMiwgMjYwNDMsIDI2MDYzLCAyMjU2OCwgMjkyNDEsIDI5NTkyLCAyNjExNiwgMzEyMTYsIDM1MzgzLCAyNjE3MCwgMzQ3ODMsIDI2MTk0LCAyNjIyMSwgMjI4MzksIDI2MjQxLCAyNjI2MSwgMjI0NzcsIDI2MjgzLCAyNjMwOCwgMjczMDYsIDMxMDM1LCAyNDY1NSwgMjY1NzYsIDI5ODU0LCAzMzM4NiwgMjYzNDEsIDMyNjgzLCAyMjUxNiwgMzIxNTMsIDMwOTI2LCAyNjM2MSwgMTk5OTYsIDI2MzgxLCAzNTQ2MywgMjYzOTcsIDI2NDI0LCAzNDY0NiwgMjY0NzgsIDM1NjA1LCAzMTM4NiwgMjY0OTQsIDM1NTY3LCAzMTk2NCwgMjI5NDAsIDIzNjg5LCAyNTIxOCwgMzAzMDksIDMyMjg5LCAxOTgzMCwgMzM2MDUsIDIzMTEyLCAzMjEwOSwgMjc3MzMsIDI3MDg0LCAyNDQ5NiwgMzU4ODYsIDM1MjIxLCAyNjUyNSwgMzY2MDIsIDI2NTQ5LCAyNjU1OCwgMjY1NzQsIDI2NTk0LCAyNjYxMywgMjY2MjksIDI2NjY2LCAyNjcwMCwgMjY1NzgsIDI3Njg1LCAyMzc0MCwgMjQyODUsIDMxNjkxLCAyNjczMywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjM5NywgMTk1NTIsIDE4OTkxLCAyNTg4NywgMjgxMTcsIDMyNjE4LCAyNjc3NiwgMjk0ODMsIDI5OTM5LCAyNjgwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjg2NjQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAzMDI5NywgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjkxMTYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNTU1OSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMwNTI1LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4NzI1LCAyNzQ0MywgMjI0OTMsIDI0MDM1LCAyNDAzNSwgMjcyNDksIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjY4MjcsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjY4NDUsIDIzNTExLCAzNDU2NCwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjY5NzksIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNDk3NCwgMjMwMjksIDIyODM5LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNjg2NSwgMjU2NDUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMjY4MywgMjI1MTYsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIwNDk5LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAzMzMwNSwgMjQwMzUsIDI1NTk4LCAyMzExNCwgMTk4NzQsIDM0MjUzLCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAyNjg4NiwgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjY5MzEsIDI0NTY5LCAyNjQzOSwgMjY5NDcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwMTksIDE5Mjg4LCAyNjk5NSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDMxNTA3LCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MzA2LCAyNzA0MywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDI3MDYxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI0Njk0LCAyNDAzNSwgMjQwMzUsIDI5OTc4LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMzMxMTQsIDIzMTE0LCAyMzExNCwgMzAwMTAsIDI5NzAwLCAyMzUxMSwgMzU5MTMsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI3MTU1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAzMDQ0NywgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDMwOTM1LCAyMDA5OSwgMjQxNTIsIDI1NTI5LCAyNzEwMCwgMzQ0NjEsIDI3MTIxLCAyMjYyNSwgMjkxNTYsIDI2MDA5LCAyNzEzNywgMzA0MjIsIDMxOTAzLCAzMTY1NSwgMjg4NzAsIDI3MTcxLCAzMjQzOSwgMzE3MzEsIDE5ODMwLCAyNzIzMiwgMjI2MTIsIDI3MjY1LCAyNjc4NiwgMjU0OTQsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyMDM0MiwgMjcyODgsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDI3MzIyLCAyNzMzOSwgMjgwMjAsIDI3MzYxLCAyNzM4MiwgMjk5MzksIDI0MDM1LCAyNDAzNSwgMzI1ODEsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNzQyNSwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI3NDQyLCAyODMwNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjcxMCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMyMjYxLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM1NzE5LCAyNDY5NCwgMjk1MTAsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjcxNywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAzMjIxNywgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjc0NTksIDIzMTE0LCAyMzExNCwgMjMxMTQsIDM2MjUyLCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4ODQwLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDI3NDgwLCAzNDQ4MywgMjg0MDEsIDI5NzYxLCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjM4MiwgMTkyODgsIDIxNjA1LCAyNzQ5NywgMjc1MTcsIDI4NTA0LCAyODg5OCwgMjc1NjksIDI5OTM5LCAyOTQwMSwgMjc2MDAsIDI3MzIzLCAyNzYzMywgMTkwMjUsIDI3NjYyLCAyMzExNCwgMjc3MDUsIDIyNDIwLCAyMDQ4MywgMjc3MjEsIDIzNTExLCAyNzc2NSwgMjgzMDYsIDE5ODAzLCAyMzU0MCwgMjQwMzUsIDI0NjEwLCAyNzc4MSwgMjc4MDUsIDI2NjUwLCAyMzExNCwgMjg1NzMsIDMyOTkwLCAyNTkyMCwgMjI0NjgsIDI2ODcwLCAyMzUxMSwgMjY2ODQsIDM0MjYyLCAzNDczNywgMjUwNTcsIDM0NjIyLCAyNDAzNSwgMjQwMzUsIDIzOTcxLCAyNDIwNiwgMjc4MjUsIDI3ODQ3LCAyMzExNCwgMjMxMTQsIDI3ODY1LCAyNzg4NSwgMzU3NjYsIDI3OTE0LCAyMzUxMSwgMjM1MTEsIDMyNzY2LCAzMjg0NCwgMjc5MzQsIDI4Nzk1LCAyNjkwOSwgMjc5NTUsIDI2MDkyLCAyNzk4OCwgMjU0NDUsIDI4MDA1LCAyODAzNiwgMjgwNTIsIDIxOTY1LCAyMzUxMSwgMzIxOTYsIDE5ODk3LCAyODA3MiwgMjgxMDIsIDM2NTM0LCAyMTU0MSwgMjM4MDEsIDI4MTUzLCAyODE4MCwgMjgxOTcsIDI4MjIxLCAyMzAzNiwgMzI2OTUsIDI4MjUxLCAyODI2OCwgMjgyOTIsIDIzNjY3LCAzNDgyNSwgMjM5MzAsIDI0NTgwLCAyODMyMiwgMjgzNDQsIDMxNjI3LCAyODM2NiwgMjU5OTYsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMzU2MjUsIDMzNDc3LCAzMzM1OSwgMjc2NzQsIDI4MzkzLCAzMzk5MiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI4NDE3LCAyODQzMywgMjg0NjMsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI4NDg5LCAyODUyMCwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI4NTUwLCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDMxNTA3LCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MzA2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI0Njk0LCAyODU4OSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI4NjA4LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDIwNDMxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDA0LCAxOTI4OCwgMjg2MzQsIDMxOTUxLCAyODU2NSwgMjg3MDIsIDI4NzE4LCAyODc0MSwgMzI1NDQsIDIwMTc1LCAyODc5MiwgMzIwODYsIDIwMTA1LCAyODgxMSwgMjkwNTksIDI5ODYyLCAyODg1NiwgMjI0MjAsIDI4ODg2LCAzMDM1NCwgMjMzNTksIDI4OTIyLCAyODMwNiwgMjg5NTIsIDIzODg4LCAyNjMyMCwgMzY1MDYsIDI0MDM1LCAyOTMzMSwgMjg5NjgsIDM2NjA5LCAyMzExNCwgMjkwMDMsIDMxNjYxLCAyNzA2MSwgMzA2NDksIDI3MzY2LCAyMzUxMSwgMjkwMjMsIDI3OTE4LCAyNDY5NCwgMjQwMzUsIDI0MDM1LCAyMzg5MywgMzMwOTQsIDMwODY3LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyOTA0NCwgMzQxODQsIDMwMDEwLCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyOTA4MSwgMjkxMDIsIDM0NTg1LCAyMDQwMiwgMjc3ODksIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyOTEzMiwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyOTE1MywgMjM1MTEsIDIzNTExLCAzMDU2MiwgMzAxNzQsIDI0MDM1LCAyNDAzNSwgMjc0MDksIDI1NDM4LCAyMzExNCwgMjMxMTQsIDI5MTcyLCAzNjY2OCwgMzEzMzIsIDIzNTExLCAyMzUxMSwgMjkxOTIsIDMwMTQ0LCAyNDAzNSwgMjMxMTAsIDMwMjAzLCAyMzExNCwgMjM0NjcsIDMxNTQ0LCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyMjU0NSwgMjMxMTEsIDIzMTE0LCAyOTIxMywgMjcwNzgsIDI3Njg5LCAyOTIzNCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyOTI1NywgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjg3NjgsIDI5MjkwLCAyOTMyMCwgMzQ3NzYsIDI5MzUzLCAyMDE0MSwgMjI0MzUsIDI5Mzc4LCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjM2NywgMTkyODgsIDIxNjA1LCAzNDYxNiwgMTkwMDYsIDMyNjE4LCAzMTQ5NywgMzE1MDcsIDM2MjE2LCAyMDE4NCwgMjQwMzUsIDM0MzkzLCAyOTQyNCwgMzQ2NjgsIDIzMTE0LCAzNDkwMCwgMjk0NDcsIDIyNDIwLCAzMDM2MCwgMjM1MTEsIDM3MDg5LCAyOTQ3MywgMjgzMDYsIDE5ODAzLCAyOTQ5OSwgMjQzOTgsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDMxNzk5LCAyOTUzMiwgMjk1NTAsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDMyMjk4LCAyOTU3MSwgMzExODQsIDIzNTExLCAyMzUxMiwgMzcxMjcsIDM2NjI4LCAyOTU4OSwgMjQwMzUsIDI0MTM1LCAyNDAzNSwgMjMxMTMsIDI5NjA4LCAyMzExNCwgMjc4MzEsIDI5NjM0LCAyODYxOCwgMjk2NTIsIDMwMDM3LCAyMzUxMSwgMjQxNzIsIDI5NjcxLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjk1NTUsIDI5NjkwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyOTcxOSwgMjQwMzUsIDIzMTEwLCAyOTczOCwgMjMxMTQsIDIzNDY3LCAzNDAzNSwgMjk3NTYsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyOTc3NywgMzQzNjQsIDI4MTgxLCAzMDI0MywgMjk3OTksIDMxOTIwLCAyNzI3MiwgMjcxODUsIDIzMDA4LCAzMTEyNiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5ODI4LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzU5ODksIDE5NTUyLCAxOTY4NywgMzUxMzksIDI4NjQ5LCAyOTg3OCwgMjk4OTQsIDI5OTI0LCAyOTkzOSwgMjMyMjQsIDIzMDg1LCAzMTk2OSwgMjQwMzYsIDM1MTczLCAyNDc1MiwgMjQ4MDMsIDIzMTE0LCAyMjQyMCwgMzExOTAsIDMwMzE4LCAyNDg3MCwgMjM1MTEsIDI4MzA2LCAyOTk2NywgMjM5NjcsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAzMDAwMCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAzMDAyNiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI2MDc4LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAzMDA1MywgMzcxMzcsIDMwMDcxLCAyMzExNCwgMjMxMTQsIDMzMzY4LCAyNTEzNiwgMjg2MTgsIDMwNzIzLCAyMzUxMSwgMjM1MTEsIDM3MDk2LCAzMTM1NiwgMzQ1ODUsIDIwNDAyLCAzMDA5MiwgMzAxMjcsIDMwMTYwLCAyNDAzNiwgMzU3NDAsIDMwMjE5LCAyNDk2MCwgMzAyNTksIDIzMDI5LCAyMDI3MSwgMzQwNDIsIDMwMjg1LCAzMDM0MiwgMzAzNzYsIDIzMjg5LCAzMDA1NSwgMzA0MDAsIDMwNDE5LCAzMDQzOCwgMzI2NDAsIDMzNTMyLCAzMzUxNCwgMzA0NzIsIDE4NzkyLCAyNjI2NywgMjQzMjMsIDIzMDU3LCAzMDQ5MywgMjM2MzksIDIwMDA4LCAzMDE5NiwgMzMxODgsIDMwNTE3LCAyMDA3NSwgMjM1MTEsIDMwNTQxLCAyMzYyOCwgMzA1NzgsIDMzOTI4LCAyODc3NiwgMzA1OTQsIDE5ODc0LCAzMDYxMCwgMzA2MzcsIDE5ODMwLCAzMDY3NywgMjc2NDYsIDE5ODcyLCAyNTc3OSwgMjMyNjYsIDIzMjMyLCAzNTAxNiwgMzAyNDMsIDMwNjk2LCAyOTgxMiwgMzA3MTIsIDMwNzQ2LCAyNzIwNiwgMzA3NzksIDMwODA3LCAyMzAwNywgMzMzOTUsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDMxNzAzLCAyMjkyOCwgMzE2OTEsIDE5Nzg3LCAzMTA3OSwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MzUyLCAxOTI4OCwgMjMzMzUsIDMwODQxLCAyNjEzMSwgMzA4ODgsIDMwOTA0LCAzMDk4NiwgMjk5MzksIDI0MDM1LCAyNDcwNCwgMzEwMTcsIDIwMDI1LCAyMzExNCwgMjYxNzgsIDMxMDUxLCAzMTA5NSwgMjI0MjAsIDIzNTExLCAyMjUyNCwgMzExNDIsIDMxMTcyLCAyODUzNCwgMzEyMDYsIDM1NDk3LCAyNTE5NiwgMjQwMzUsIDI4NTkyLCAyNDUwMywgMjMxMTQsIDMxMjM5LCAzMTI4NSwgMjMxMTQsIDMxMzA1LCAzMTMyMSwgMzEzNTUsIDMxMzcyLCAzMTQwNywgMjM1MTEsIDMwNTU2LCAyNDY5NCwgMjQwMzUsIDI3NTAxLCAxOTgwNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDMxNDI4LCAyNDA2NiwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDMxODM3LCAxODgwOSwgMjM1MTEsIDM0NTg1LCAzMTQ0OCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMwOTAsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMTYxOSwgMzUwMzgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMzcxNCwgMjQwMzUsIDMzMDg1LCAyNDAzNSwgMjk0MzEsIDIzMTE0LCAzMTQ2NywgMjMxMTQsIDIzMTQzLCAzMTQ4NywgMjM1MTEsIDMxNTIzLCAyMzUxMSwgMzUxOTUsIDM2NzgzLCAyNDAzNSwgMzAxMTEsIDIzNTY3LCAyMzExNCwgMjM0NjcsIDMxNTQzLCAzMTU2MCwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMzA5NTMsIDMxNTg0LCAzNDUwOCwgMjQwMzUsIDMxNjA4LCAyNjM0NSwgMzcwNTUsIDIzMjY2LCAzMTY0MywgMzE2NzcsIDMxNzE5LCAzMTc0NywgMzE3ODYsIDMxODIyLCAyNjg5OCwgMjMwMDgsIDE5ODc2LCAzMTg1OSwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAzMTg3OCwgMzE5MzYsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNTk3NCwgMTkyODgsIDIxNjA1LCAyNzk3MiwgMzU2NjMsIDMxOTg1LCAyOTY1NSwgMzIwMDEsIDM2NzE1LCAyNDc4NSwgMjU4OTMsIDIzNTQ1LCAzMTkxMiwgMTk4NTMsIDE5OTE2LCAyNTkzOCwgMjQ1NDAsIDIyNDIwLCAzMTg0MywgMjk2NzQsIDI5NTczLCAzMjczNSwgMjg5MzYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDMyMDQ3LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjc1NDQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMzIxNjEsIDIzNTExLCAyMzUxMiwgMzIwNjYsIDI0MDM1LCAzMzMxMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDI3NDI2LCAzMjEwMiwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMzIxMjUsIDIzNTExLCAzMjE0NCwgMjM1MTEsIDIzNTExLCAzMzU2OSwgMjA0MDIsIDI0MDM1LCAyNzA0NSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDI4MzI4LCAyMzExNCwgMzAwNzYsIDMyMTc3LCAyMzUxMSwgMjM1MTEsIDMwMzg0LCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzU5NSwgMzIyMTIsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDIyNjM1LCAyNTc1MywgMzIyMzMsIDMyMjU3LCAzMjI3NywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMzIzMjIsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAzMjM1MiwgMzUyODUsIDMyMzgwLCAzNDE5NiwgMzMwMTYsIDMwNjYxLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MzA2LCAzMjQwNCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDMyNDIyLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI0Njk0LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzAyNjksIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMTk5NDksIDI0MDM1LCAyMzExMSwgMzI0NTUsIDE5ODc0LCAzMTI2OSwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MzM3LCAxOTU1MiwgMTkyMDksIDIxNjE3LCAyNjUwOSwgMzI0NzUsIDMyNDkxLCAzMjUyOSwgMjk5MzksIDI0MDM1LCAzMjU3OCwgMjUyNDEsIDMyNTk3LCAyMzExNCwgMzI2MzQsIDI5MDA3LCAzMjY1NiwgMjI0MjAsIDIzNTExLCAzMjcyOSwgMjYzNjUsIDMyNzUxLCAyODMwNiwgMzI3ODgsIDMyODgyLCAyNDAzNSwgMjQwMzUsIDMyODEzLCAzNjcyNywgMjMxMTQsIDMzMTgyLCAyMzExNCwgMjc1NTMsIDMzMjM1LCAzMjgyOSwgMjM1MTEsIDMyNzA2LCAyMzUxMSwgMjg5MDYsIDI4Mzc3LCAyNjk2MiwgMzI4ODEsIDMyOTA0LCAzMjg5OCwgMzI5MjAsIDI0MDM1LCAzMjk1MywgMjMxMTQsIDMyOTc3LCAyNjQwOCwgMjMxMTQsIDI4MTY0LCAzMzAwNiwgMjM1MTEsIDMzMDM5LCAzNTc3NCwgMjM1MTEsIDMyMzA2LCAyMDQwMiwgMzMwNzYsIDMwODcyLCAyNDAzNSwgMjQwMzYsIDI1NDA4LCAzMzExMCwgMjg5NzksIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDM1ODM1LCAzMzEzMCwgMzMwNTQsIDIzNTExLCAzMDU2MiwgMzMxNDgsIDI0MDM1LCAyNDAzNSwgMzMxNjcsIDIzMTE0LCAyMzExNCwgMzM3NzUsIDIzMDM2LCAyMDQ1OSwgMjM1MTEsIDIzNTExLCAyNTQ2NCwgMjQ2NDYsIDI0MDM1LCAyNDAzNSwgMjI0NDYsIDIzMTE0LCAyMzExNCwgMjU2MjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDMxMzkxLCAzMzIwNCwgMzMyMjAsIDMzMjUxLCAzMzI4NywgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMzMzMjksIDE5ODc2LCAzMzM0NSwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyODQ3MywgMjI1OTksIDMxNjkxLCAzMzQxMSwgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNTk1OSwgMTkyODgsIDIxOTA3LCAyNzI0MywgMjk4NDMsIDMyNjE4LCAzMzQyNywgMzE1MDcsIDI5OTM5LCAzMzQ2MCwgMzQwOTAsIDI0MDM1LCAyNDAzNiwgMzM0OTMsIDI0NDE2LCAzMzUzMCwgMjMxMTQsIDIyNDIwLCAzMzU0OCwgMjQzNzksIDMzNTg1LCAyMzUxMSwgMjgzMDYsIDE5ODAzLCAzMzYwMywgMjQyMDIsIDI0MDM1LCAyNDAzNSwgMjU1OTMsIDMzNzQ5LCAyODIwNSwgMjMxMTQsIDIzMTE0LCAzMjM4OCwgMjI0NjgsIDMzODUzLCAzMzA2MCwgMjM1MTEsIDIzNTExLCAzMTMzOSwgMzM2MjEsIDI0MDM1LCAyNDAzNSwgMzQzOTcsIDI0NjE4LCAzMDc1NywgMzM2NjMsIDIzMTE0LCAyMzExNCwgMzM2ODMsIDM1Njg0LCAyODYxOCwgMjY2NzgsIDIzNTExLCAyMzUxMSwgMzI1MDYsIDMzNjk5LCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAzMjU2MiwgMjY5NzMsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDMzMzc3LCAzMzc3MywgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDMwNjIxLCAyMzUxMSwgMjM4NjAsIDI0MDM1LCAzMzc5MSwgMjE1NTMsIDI2NTc2LCAzNjU1OCwgMjMxMTQsIDMzODA5LCAyMzAzNiwgMzI4NTcsIDI2MDQ3LCAyMzUxMSwgMzM4MjcsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDMxMjUyLCAyMzUxMSwgMzM4NDUsIDIzNjI4LCAyNDAzNSwgMjQ0NTksIDIzMTExLCAyMzExNCwgMzM4NjksIDI3MDc4LCAzMDc5MSwgMjk3ODMsIDI0MDM1LCAyNDc0MiwgMTk4NzIsIDMzODk1LCAyMzI2NiwgMjY0NjIsIDE5NzEwLCAzMzg3OSwgMzM5MTksIDI2NTc3LCAyNjU5NywgMjQxMjMsIDI0OTMwLCAyMTkzMCwgMjAyMDgsIDMwNTAxLCAzMzk1MywgMjUyNjgsIDIwMjUyLCAzMzk4MywgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYzMjIsIDE5NTUyLCAyMzM5MCwgMzM2MzQsIDM1MTU0LCAzNDAwOCwgMzQwMjQsIDM0MDU4LCAzNTU0NCwgMzQxMDYsIDM0MTI4LCAyNjgxMSwgMzMxNTEsIDM0MTQ0LCAzNDE2OSwgMzQyMTIsIDIzMTE0LCAzNDIyOCwgMzQyNDQsIDM0Mjc4LCAzNDMxNSwgMjM1MTEsIDM0MzMxLCAzNDM0NywgMzQzODAsIDM0NDEzLCAyNDAzNSwgMjQ2NjMsIDI2NTc2LCAzNDQyOSwgMzQ0NTMsIDM0NDc3LCAyOTUzNCwgMzM4MTEsIDIyNDY4LCAzNDQ5OSwgMzQ1MjQsIDM0NTU3LCAyNTE3MCwgMzQ1ODAsIDM1NDM2LCAyMzkzNywgMzQ2MDEsIDI0MDM1LCAyNDM0MSwgMjY0NTMsIDIzMTEzLCAzNDYzOCwgMzQ2NjIsIDIzMTE0LCAyNDIzNiwgMjg2MTgsIDM0Njg0LCAzNDcwMywgMzQ3MjksIDIzNTExLCAzNTM1MiwgMzQ3NTMsIDM0Nzk5LCAyNDAzNSwgMzQ4MTUsIDMyNTU4LCAzNDg0OCwgMzQ4ODgsIDM1ODE0LCAzNDkyMywgMjMxNjUsIDI5MTM3LCAyMzYwNiwgMzAzMjYsIDMwNzMwLCAzNDkzOSwgMzMwMjMsIDMwNTYyLCAzNjg0OCwgMzQ5NzksIDI0MDM1LCAyNDg0NywgMzQ5OTYsIDIzMTE0LCAyMzExNCwgMzUwMzIsIDI5Njk1LCAzNTA1NCwgMjM1MTEsIDIzNTExLCAzNTA5MSwgMzMyOTYsIDM1MTI0LCAyNDI5NiwgMjgyMzUsIDI0MzYxLCAzNjI3NiwgMzI3NzIsIDM1MDY3LCAzNTE4OSwgMjczMDEsIDMwODU1LCAyNDg1MiwgMjI0NTIsIDM1MjExLCAzNTIzNywgMzUzMTYsIDI1NTAwLCAzNTI3MCwgMjM0MDUsIDI0MzA0LCAzNTMwNCwgMjkzNjIsIDI0MDM2LCAyMzExNCwgMzUzMzIsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAzNTM2OCwgMjg4MjMsIDIzOTIwLCAzMjMzNiwgMzU0MDUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDM1NDIxLCAzNTQ3OSwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM1OTQ0LCAyMjc5NSwgMjE2MDUsIDMzNjQ3LCAzNTg3NywgMzU1MTMsIDMwOTYyLCAzNTUyOSwgMzQwNzMsIDM1NTU3LCAyNDAzNSwgMjQwMzUsIDIwNDA1LCAzMTEwNywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzU1OTAsIDM0NzEzLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNTY0MSwgMTk4MDMsIDI5NDA4LCAzMjkzNywgMjUyOTgsIDI0MDM1LCAzNTY1NywgMjMxMTUsIDI3ODQ5LCAyNDc2MCwgMzU2NzksIDI2MjA1LCAyMjQ2OCwgMjM1MTEsIDM1NzAwLCAyNDkwNywgMjQ5MDEsIDM1MDc1LCAzMTg5MywgMzQ5ODAsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMzUwMDksIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAzNTcxNiwgMzA5NzAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMzIxNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDM1NzM1LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNzEwNSwgMzU3NTYsIDM1NzkwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNTI1NCwgMzU0NDYsIDI0MDM1LCAyNDAzNSwgMzEyMjMsIDM1ODA5LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAzNjgyNSwgMzU4MzAsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMzEwMzEsIDIwMzU1LCAxOTg3MiwgMzM5MDMsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDI4Njg2LCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDIzNDI0LCAyMDIwOCwgMjQ3MTEsIDMxMDY1LCAyNDQ4NiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMTk3NzMsIDM1ODUxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjMwNywgMTkyODgsIDIxNjA1LCAzNTQ5NCwgMTk3MDIsIDMyNjE4LCAzMzQzNywgMzE1MDcsIDI5OTM5LCAyNTExNywgMjQwMzUsIDI3OTM5LCAyNDAzNiwgMjc4NjksIDIzMTE0LCAyNjgyOSwgMjMxMTQsIDIyNDIwLCAyMzQ5NCwgMjM1MTEsIDMzMTMyLCAyMzUxMSwgMjgzMDYsIDE5ODAzLCAyNDAzNSwgMzQ4MzIsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyNTE1MywgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMzU5MTEsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzU5MjksIDE5Mjg4LCAyMTYwNSwgMjU4NjAsIDIzMTEyLCAzNjE4NSwgMjM1MTEsIDM2MjAxLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MzA2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI2NzQ4LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDM2MjQ5LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI4ODM1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjcxNTEsIDI0MDM1LCAyNjc2MCwgMjMxMTQsIDI3OTg5LCAyMzExNCwgMjMxMTQsIDM2MjY4LCAyMDI3MSwgMjM1MTEsIDI0NDM2LCAyMzUxMSwgMjk3MDMsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MjkyLCAxOTI4OCwgMjE2MDUsIDM2NTAzLCAyMTkyMiwgMzI2MTgsIDM0NTM0LCAzMTUwNywgMzY1MjIsIDI0MDM1LCAzMzc5MywgMjQwMzUsIDM1ODY0LCAyMzExNCwgMjMxMTQsIDM2NTU1LCAyMzQxNywgMjI0MjAsIDIzNTExLCAyMzUxMSwgMzY1NzQsIDI2MDIwLCAyODMwNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTEyLCAzNjU5MiwgMjQwMzUsIDI0MDM1LCAzNjYyNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDMyOTYxLCAyMzExNCwgMjMxMTQsIDI5NjE4LCAyOTcwMCwgMjM1MTEsIDI5MDg2LCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMzY2NDQsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDI5NzQwLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyOTA2NSwgMzY2NjMsIDMxNTI3LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDIxNjA1LCAzMTQ1MSwgMjMxMTIsIDM2Njg0LCAyMzUxMSwgMzY3MDAsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAzMDE4NSwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjc1MjYsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMjg2NSwgMjgzMDYsIDE5ODAzLCAzNjc0MywgMjQwMzUsIDI3MDE3LCAyNDAzNSwgMjY1NzYsIDI3NTM1LCAyMzExNCwgMzE0MzIsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDMzMjcxLCAyMzUxMSwgMzIxMjgsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI0MDM1LCAyNzE5NiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDMyNDU5LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDMzODI5LCAzNjc2MiwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAzNjc0NiwgMjQwMzUsIDI5NzIyLCAyMzExNCwgMjMxMTQsIDM0NDM3LCAyMzExNCwgMzQ5MDcsIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDE4ODAxLCAyMzUxMSwgMjMyMDYsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM2ODM3LCAyNDAzNSwgMjQwMzUsIDMzNzM5LCAyMzExNCwgMjMxMTQsIDI1MDk0LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMzY3ODAsIDIzMTExLCAyNDA3MywgMTk4NzQsIDI3MDc4LCAzNTM0NCwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjI3MjAsIDE5Mjg4LCAzNjc5OSwgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjQsIDIxOTkxLCAyMjIxMSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxNzYzMSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMzY4ODMsIDM2OTA2LCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyNzA1LCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAxOTM3NSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjEyNCwgMTkyODgsIDM2OTUxLCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyNDA0LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4NTY3LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAzNjk3OSwgMzY5OTUsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYxMzksIDE5Mjg4LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODAyNywgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MTM5LCAxOTI4OCwgMjE1MjksIDI0MDM1LCAyMzExMiwgMjMwMzMsIDIzNTExLCAzMTUwNywgMjUzNzcsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzcwNDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyODA4NiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI0MjU0LCAzNzA3OSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTEyLCAzNDc2NiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNzExMiwgMzcxNjAsIDE4NDY5LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMTc2NTYsIDM3MTc0LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4NTM3LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg3ODAsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAzNjg4MywgMzY5MDYsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAxMjcwMTEsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDEyNzAxMSwgMTI3MDExLCAxMjcwMTEsIDUzMjY0LCAxOCwgMTgsIDAsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAwLCAyOCwgMjgsIDI4LCAyOCwgMTAyNDMyLCAwLCAwLCAxMjcwMTEsIDAsIDIyMjAwMzIsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMDIzNjgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI1NzYzODQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI0MTY2NDAsIDI0MjQ4MzIsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI1NDM2MTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI2Mjk2MzIsIDIyMTU5MzYsIDI2MTczNDQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI2OTEwNzIsIDIyMTU5MzYsIDI3MDc0NTYsIDIyMTU5MzYsIDI3MTU2NDgsIDIyMTU5MzYsIDI3MjM4NDAsIDI3NjQ4MDAsIDIyMTU5MzYsIDIyMTU5MzYsIDI3OTc1NjgsIDIyMTU5MzYsIDI4MjIxNDQsIDIyMTU5MzYsIDIyMTU5MzYsIDI4NTQ5MTIsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI5MTIyNTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDE4MDIyNCwgMCwgMCwgMjE3NDk3NiwgMCwgMCwgMjE3MDg4MCwgMjYxNzM0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjY5MTA3MiwgMjE3MDg4MCwgMjcwNzQ1NiwgMjE3MDg4MCwgMjcxNTY0OCwgMjE3MDg4MCwgMjcyMzg0MCwgMjc2NDgwMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjc5NzU2OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjc5NzU2OCwgMjE3MDg4MCwgMjgyMjE0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjg1NDkxMiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjkxMjI1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjYwOTE1MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjY1NDIwOCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMTg0NTk5LCAyODAsIDAsIDIxNzQ5NzYsIDAsIDAsIDIyMTU5MzYsIDMxMTcwNTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDU0NCwgMCwgNTQ2LCAwLCAwLCAyMTc5MDcyLCAwLCAwLCAwLCA1NTIsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMTcwNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIyMzIzMjAsIDIyMzIzMjAsIDAsIDIyNDA1MTIsIDIyNDA1MTIsIDAsIDAsIDAsIDY0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzEyOTM0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQwMDI1NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjcxMTU1MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjc2MDcwNCwgMjc2ODg5NiwgMjc4OTM3NiwgMjgxMzk1MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjg3NTM5MiwgMjkwNDA2NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ1MzUwNCwgMjQ1NzYwMCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMTY3OTM2LCAwLCAwLCAwLCAwLCAyMTc0OTc2LCAwLCAwLCAyMjE1OTM2LCAyMjE1OTM2LCAyNTE0OTQ0LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNTkyNzY4LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMjc2OCwgMCwgMCwgMCwgMCwgMCwgMjE3NDk3NiwgMzI3NjgsIDAsIDI2MzM3MjgsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI3MTE1NTIsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI3NjA3MDQsIDI3Njg4OTYsIDI3ODkzNzYsIDI4MTM5NTIsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI4NzUzOTIsIDI5MDQwNjQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzQ5NzYsIDAsIDY1ODE5LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDMxMDQwLCAyMjE1OTM2LCAzMDU1NjE2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDkyNDgwLCAyMjE1OTM2LCAyMjE1OTM2LCAzMTI1MjQ4LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDAyMzY4LCAyMjE1OTM2LCAyMjE1OTM2LCAyMTcwODgwLCAyMTcwODgwLCAyNDk0NDY0LCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTk4OTc2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAwLCAyMzc5Nzc2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDQ1MzEyLCAyMTcwODgwLCAyNDY1NzkyLCAyNDczOTg0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTIzMTM2LCAyMTcwODgwLCAyMTcwODgwLCAyNjQxOTIwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNjk5MjY0LCAyMTcwODgwLCAyNzI3OTM2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyODc5NDg4LCAyMTcwODgwLCAyOTE2MzUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyODc5NDg4LCAyMTcwODgwLCAyOTE2MzUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDI2OTQ0LCAyMTcwODgwLCAyMTcwODgwLCAzMDYzODA4LCAyMTcwODgwLCAyMTcwODgwLCAzMTEyOTYwLCAyMTcwODgwLCAyMTcwODgwLCAzMTMzNDQwLCAyMTcwODgwLCAyMTcwODgwLCAzMTEyOTYwLCAyMTcwODgwLCAyMTcwODgwLCAzMTMzNDQwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTYyMTEyLCAyMTcwODgwLCAyMTcwODgwLCAzMTgyNTkyLCAzMTg2Njg4LCAyMTcwODgwLCAyMzc5Nzc2LCAyMjE1OTM2LCAyNTIzMTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNTk2ODY0LCAyMjE1OTM2LCAyNjIxNDQwLCAyMjE1OTM2LCAyMjE1OTM2LCAyNjQxOTIwLCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc5MDcyLCA1NDgsIDAsIDAsIDAsIDAsIDI4NywgMjE3MDg4MCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQwMDI1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzExNzA1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjY5OTI2NCwgMjIxNTkzNiwgMjcyNzkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjg3OTQ4OCwgMjIxNTkzNiwgMjkxNjM1MiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMTg4NDE2LCAwLCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAwLCAyODcsIDIxNzA4ODAsIDAsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI0MDAzOTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMwMzExNzksIDIxNzEwMTksIDMwNTU3NTUsIDIxNzEwMTksIDIxNzEwMTksIDIyMTU5MzYsIDMxMzM0NDAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxNjIxMTIsIDIyMTU5MzYsIDIyMTU5MzYsIDMxODI1OTIsIDMxODY2ODgsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1MjMyNzUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1OTcwMDMsIDIxNzEwMTksIDI2MjE1NzksIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxNjIxMTIsIDIxNzA4ODAsIDIxNzA4ODAsIDMxODI1OTIsIDMxODY2ODgsIDIxNzA4ODAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgNDMzNzY2NCwgMjgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2Mjk2MzIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI3MTk3NDQsIDI3NDQzMjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI4MzQ0MzIsIDI4Mzg1MjgsIDIxNzA4ODAsIDI5MDgxNjAsIDIxNzA4ODAsIDIxNzA4ODAsIDI5MzY4MzIsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI3MTk3NDQsIDI3NDQzMjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI4MzQ0MzIsIDI4Mzg1MjgsIDIyMTU5MzYsIDI5MDgxNjAsIDIyMTU5MzYsIDIyMTU5MzYsIDI5MzY4MzIsIDIyMTU5MzYsIDIyMTU5MzYsIDI5ODU5ODQsIDIyMTU5MzYsIDI5OTQxNzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMTQ2NTYsIDIyMTU5MzYsIDMwNTk3MTIsIDMwNzYwOTYsIDMwODgzODQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI0NDUzMTIsIDIyMTU5MzYsIDI0NjU3OTIsIDI0NzM5ODQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDAsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzEwMTksIDIxNzEwMTksIDI0OTQ2MDMsIDIxNzEwMTksIDIxNzEwMTksIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMyMTUzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzk3NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI5ODU5ODQsIDIxNzA4ODAsIDI5OTQxNzYsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMTYxNjgsIDIxNzA4ODAsIDMwNTk3MTIsIDMwNzYwOTYsIDMwODgzODQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDEyNCwgMTI0LCAwLCAxMjgsIDEyOCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzIxNTM2MCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQ4NjI3MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjUwNjc1MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjUzNTQyNCwgMjUzOTUyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU4ODY3MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjkyMDQ0OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjk5MDA4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzA1MTUyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE3MDMwNCwgMCwgMjM4Nzk2OCwgMjM5MjA2NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQzMzAyNCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE3MDMwNCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ4NjI3MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjUwNjc1MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjUzNTQyNCwgMjUzOTUyMCwgMjIxNTkzNiwgMjIxNTkzNiwgMjU4ODY3MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3NDk3NiwgMTM2LCAwLCAyMjE1OTM2LCAyMjE1OTM2LCAyOTIwNDQ4LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyOTkwMDgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDUxNTIwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTA4ODY0LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDI2OTQ0LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDYzODA4LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTEyOTYwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTcwMzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDUzNTA0LCAyNDU3NjAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDg2MjcyLCAyMTcwODgwLCAyMTcwODgwLCAyNTA2NzUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTM3MDQ5LCAyNTM5NTIwLCAyMTcwODgwLCAyMTcwODgwLCAyNTg4NjcyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAxNTA4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAxNTEyLCAyMTcwODgwLCAyOTIwNDQ4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyOTkwMDgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDYxNjk2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTEwODQ4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTgwNDgwLCAyMTcwODgwLCAyNjA1MDU2LCAyNjM3ODI0LCAyMTcwODgwLCAyMTcwODgwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjY4Njk3NiwgMjc0ODQxNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjkyNDU0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzEyMTE1MiwgMjE3MDg4MCwgMjE3MDg4MCwgMzE0NTcyOCwgMzE1ODAxNiwgMzE2NjIwOCwgMjE3MDg4MCwgMjQyMDczNiwgMjQyODkyOCwgMjE3MDg4MCwgMjQ3ODA4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjY0NjAxNiwgMjY3MDU5MiwgMCwgMCwgMzE0NTcyOCwgMzE1ODAxNiwgMzE2NjIwOCwgMjM4Nzk2OCwgMjM5MjA2NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjQzMzAyNCwgMjIxNTkzNiwgMjQ2MTY5NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjUxMDg0OCwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3OTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjU4MDQ4MCwgMjIxNTkzNiwgMjYwNTA1NiwgMjYzNzgyNCwgMjIxNTkzNiwgMjIxNTkzNiwgMjY4Njk3NiwgMjc0ODQxNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjkyNDU0NCwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3OTA3MiwgMCwgMCwgMCwgMCwgMCwgMjg2LCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTIxMTUyLCAyMjE1OTM2LCAyMjE1OTM2LCAzMTQ1NzI4LCAzMTU4MDE2LCAzMTY2MjA4LCAyMzg3OTY4LCAyMzkyMDY0LCAyMTcwODgwLCAyMTcwODgwLCAyNDMzMDI0LCAyMTcwODgwLCAyNDYxNjk2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTEwODQ4LCAyMTcwODgwLCAyMTcwODgwLCAxNjI1LCAyMTcwODgwLCAyMTcwODgwLCAyNTgwNDgwLCAyMTcwODgwLCAyNjA1MDU2LCAyNjM3ODI0LCAyMTcwODgwLCA2NDcsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MDAyNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1NzYzODQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2MDkxNTIsIDIxNzA4ODAsIDIxNzA4ODAsIDI2ODY5NzYsIDAsIDAsIDI3NDg0MTYsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDIxNzA4ODAsIDI5MjQ1NDQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAwLCAwLCAyOCwgMjgsIDIxNzA4ODAsIDMxNDE2MzIsIDIyMTU5MzYsIDI0MjA3MzYsIDI0Mjg5MjgsIDIyMTU5MzYsIDI0NzgwODAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI2NDYwMTYsIDI2NzA1OTIsIDI3NTI1MTIsIDI3NTY2MDgsIDI4NDY3MjAsIDI5NjE0MDgsIDIyMTU5MzYsIDI5OTgyNzIsIDIyMTU5MzYsIDMwMTA1NjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxNDE2MzIsIDIxNzA4ODAsIDI0MjA3MzYsIDI0Mjg5MjgsIDI3NTI1MTIsIDI3NTY2MDgsIDAsIDI4NDY3MjAsIDI5NjE0MDgsIDIxNzA4ODAsIDI5OTgyNzIsIDIxNzA4ODAsIDMwMTA1NjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxNDE2MzIsIDIxNzA4ODAsIDIxNzA4ODAsIDI0OTAzNjgsIDIyMTU5MzYsIDI0OTAzNjgsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI1NDc3MTIsIDI1NTU5MDQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzQ5NzYsIDI0NTc2MCwgMCwgMzEyOTM0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQ5MDM2OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMjU0NzcxMiwgMjU1NTkwNCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMCwgMCwgNDUwNTYsIDAsIDI1ODQ1NzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNTg1OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMjAwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAyNTg0NTc2LCAyMTcwODgwLCAyMTcwODgwLCAxNTEyLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDQxMjE2LCAyMTcwODgwLCAyNTI3MjMyLCAyMTcwODgwLCAyNjAwOTYwLCAyMTcwODgwLCAyODUwODE2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDIyODQ4LCAyMjE1OTM2LCAyNDQxMjE2LCAyMjE1OTM2LCAyNTI3MjMyLCAyMjE1OTM2LCAyNjAwOTYwLCAyMjE1OTM2LCAyODUwODE2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAwLCAyODcsIDIxNzA4ODAsIDIyMTU5MzYsIDMwMjI4NDgsIDIxNzA4ODAsIDI0NDEyMTYsIDIxNzA4ODAsIDI1MjcyMzIsIDAsIDAsIDIxNzA4ODAsIDI2MDA5NjAsIDIxNzA4ODAsIDAsIDI4NTA4MTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MjMxMzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1OTY4NjQsIDIxNzA4ODAsIDI2MjE0NDAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2NDE5MjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMjI4NDgsIDIxNzA4ODAsIDI1MTkwNDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDI1MTkwNDAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NTM1MDQsIDI0NTc2MDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MTQ5NDQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1OTI3NjgsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MTkwNDAsIDAsIDIwMjQsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIzOTYxNjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMTg3NTIsIDIzOTYxNjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMTg3NTIsIDIzOTYxNjAsIDAsIDIwMjQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMTg3NTIsIDIxNzA4ODAsIDI2NTAxMTIsIDI5NjU1MDQsIDIxNzA4ODAsIDIyMTU5MzYsIDI2NTAxMTIsIDI5NjU1MDQsIDIyMTU5MzYsIDAsIDAsIDIxNzA4ODAsIDI2NTAxMTIsIDI5NjU1MDQsIDIxNzA4ODAsIDI1NTE4MDgsIDIxNzA4ODAsIDI1NTE4MDgsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCAxNDEsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMjQsIDY3LCA2NywgMjM4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAyNTUxODA4LCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAwLCAyMTcwODgwLCAyOTc3NzkyLCAyOTc3NzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI5LCAxMDI0MzIsIDEyNzAxMSwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMTI3MDExLCAxMjcwMTEsIDEyNzAxMSwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDAsIDAsIDI0LCAyNCwgMjQsIDAsIDI4LCAyOCwgMjgsIDI4LCAxMDI0MzIsIDEyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDE2NjQwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCAxMzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAwLCA0MjU2MDk5LCA0MjU2MDk5LCAyNCwgMjQsIDAsIDI4LCAyOCwgMjE3MDg4MCwgMjQ2MTY5NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjUxMDg0OCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU4MDQ4MCwgMjE3MDg4MCwgMjYwNTA1NiwgMjYzNzgyNCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU0NzcxMiwgMjU1NTkwNCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzEyOTM0NCwgMjIxNTkzNiwgMjIxNTkzNiwgNTQzLCA1NDMsIDU0NSwgNTQ1LCAwLCAwLCAyMTc5MDcyLCAwLCA1NTAsIDU1MSwgNTUxLCAwLCAyODcsIDIxNzExNjYsIDIxNzExNjYsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCA2NDUsIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCA0NSwgMTQ5LCAyNTg0NTc2LCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDQxMjE2LCAyMTcwODgwLCAyNTI3MjMyLCAyMTcwODgwLCAyNjAwOTYwLCAyNTE5MDQwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMzk2MTYwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDE4NzUyLCAyMzk2MTYwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDE4NzUyLCAyMzk2MTYwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDE4NzUyLCAyMTcwODgwLCAyNjUwMTEyLCAyOTY1NTA0LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDE1NTY0OCwgMjgsIDEwMjQzMiwgMTU1NjQ4LCAxNTU2ODcsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAxNTU2NDgsIDUzMjY0LCAxOCwgMTgsIDQ5MTcyLCAwLCA1NzM2NiwgMCwgMjQsIDI0LCAyNCwgMCwgMjgsIDI4LCAyOCwgMjgsIDEwMjQzMiwgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMCwgOTQyMDgsIDAsIDAsIDExNDczMCwgMTA2NTM5LCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCA1MzI2NCwgMjA4ODk2LCAxOCwgMjc4NTI4LCAyNCwgMjQsIDAsIDI4LCAyOCwgNTMyNjQsIDE4LCAxNTk3NjUsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMCwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAwLCAyOCwgMTM5Mzk0LCAyOCwgMjgsIDEwMjQzMiwgMTMxLCAwLCAwLCAwLCAyMjIwMDMyLCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMjc2OCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDAsIDU0NiwgMCwgMCwgMjE4MzE2OCwgMCwgMCwgNTUyLCA4MzIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MDAyNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2MDkxNTIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2NTQyMDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxOTg5NzYsIDIyMTU5MzYsIDAsIDEwODQsIDAsIDEwODgsIDAsIDEwOTIsIDAsIDAsIDAsIDAsIDAsIDQxNjA2LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDkzNywgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE5ODk3NiwgMjE3MDg4MCwgMCwgMCwgNjQ0LCAwLCAwLCAwLCAyMjE1OTM2LCAzMTE3MDU2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCA4MjYsIDAsIDgyOCwgMCwgMCwgMjE4MzE2OCwgMCwgMCwgODMwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDAwMjU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTkyNzY4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNjMzNzI4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNzExNTUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNzYwNzA0LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxNzIwNjYsIDE3MjAzMiwgMTEwNjMwLCAxNzIwNjYsIDEwNjUzOSwgMCwgMCwgMTcyMDMyLCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDE2Mzg0LCAyOCwgMjgsIDI4LCAyOCwgMTAyNDMyLCAwLCA5ODMwNCwgMCwgMCwgMjIyMDAzMiwgMTEwNjMwLCAwLCAwLCAwLCAwLCAxMDY1MzksIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxOTg5NzYsIDIxNzA4ODAsIDAsIDAsIDQ1MDU2LCAwLCAwLCAwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjUsIDgxOTIsIDMwLCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDE3NjIxOSwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAxMjQsIDEyNCwgMTI0LCAwLCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEwMjQzMiwgMTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MTY2NDAsIDAsIDU0NiwgMCwgMCwgMjE4MzE2OCwgMCwgNjU1MzYsIDU1MiwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQwMDI1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjY0NjAxNiwgMjY3MDU5MiwgMjc1MjUxMiwgMjc1NjYwOCwgMjg0NjcyMCwgMjk2MTQwOCwgMjE3MDg4MCwgMjk5ODI3MiwgMjE3MDg4MCwgMzAxMDU2MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE5ODk3NiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCAxNDMsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjQsIDY3LCAxODI2LCA2NywgNjcsIDY3LCA2NywgMTcsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAzMjc2OCwgMTIwLCAxMjEsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAwLCAyOCwgMjgsIDI4LCAyOCwgMTAyNDMyLCA2NywgNjcsIDM3MTM5LCAzNzEzOSwgMjQ4NTMsIDI0ODUzLCAwLCAwLCAyMTc5MDcyLCA1NDgsIDAsIDY1ODIwLCA2NTgyMCwgMCwgMjg3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMjAzMywgNDUsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDM2OSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTc4LCAwLCA1NDYsIDcwMTc5LCAwLCAyMTgzMTY4LCAwLCAwLCA1NTIsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDEzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDczLCA2NywgNjcsIDY3LCA2NywgNDgzLCA2NywgNjcsIDEwMjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxMTE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU5LCA5NywgOTcsIDk3LCA2NywgNjcsIDE1ODQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTcsIDY3LCA2NywgMTY1OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY2NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY2OCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTY5NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3NCwgNjcsIDY3LCAxNzEzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxNzIzLCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTUzOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTU5LCA0NSwgNDUsIDE1NjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDQ4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTc3MSwgMTc3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyNywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCAxNjE0LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwMywgOTcsIDk3LCA2MDUsIDk3LCA5NywgNjA4LCA5NywgOTcsIDk3LCA5NywgMCwgMTUzMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1MCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMTgzOSwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMTg4MywgOTcsIDE4ODUsIDk3LCAwLCAxODg4LCAwLCA5NywgOTcsIDAsIDk3LCA5NywgMTg0OCwgOTcsIDk3LCA5NywgOTcsIDE4NTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODQsIDM5MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjM3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTUxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxOTYzLCA5NywgMjAyMywgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE5OTQsIDY3LCAxOTk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgMTM3LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNzkzNDcyLCAyODA1NzYwLCAyMTcwODgwLCAyODMwMzM2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDMxMDQwLCAyMTcwODgwLCAzMDU1NjE2LCAyMTcwODgwLCAyMTcwODgwLCA2NywgNjcsIDM3MTM5LCAzNzEzOSwgMjQ4NTMsIDI0ODUzLCAwLCAwLCAyODEsIDU0OSwgMCwgNjU4MjAsIDY1ODIwLCAwLCAyODcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgMjAzMSwgMjAzMiwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzY5LCA2NywgMCwgNTQ2LCA3MDE3OSwgNTQ5LCA1NDksIDAsIDAsIDU1MiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4NTgsIDQ1LCA2NDEsIDAsIDAsIDAsIDAsIDQxNjA2LCA5MjYsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDU2LCA2NywgMCwgMCwgMCwgMTMxMywgMCwgMCwgMCwgMTA5NiwgMTMxOSwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTEwLCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgNjcsIDEzMDEsIDE0NzYsIDAsIDAsIDAsIDAsIDEzMDcsIDE0NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxNDg2LCA5NywgMTQ4NywgOTcsIDEzMTMsIDE0ODAsIDAsIDAsIDAsIDAsIDEzMTksIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgMTQ3NiwgMCwgMTQ3OCwgMCwgMTQ4MCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCAxODUzLCA0NSwgMTg1NSwgNDUsIDQ1LCA0NSwgNDUsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNiwgODE5MiwgMzEsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMjI1MzY4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDMyNzY4LCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMTYzODQwLCA1NzM2NiwgMCwgMjQsIDI0LCAyMjkzNzYsIDAsIDI4LCAyOCwgMjgsIDIyOTM3NiwgMTAyNDMyLCAwLCAwLCAwLCAwLCAyMjIwMTY3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCAwLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNTkyOTA3LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNjMzODY3LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNjU0MzQ3LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMTE3MTk1LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMjQwNjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjgsIDAsIDE0MCwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjQxNjc3OSwgMjQyNDk3MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjYxNzQ4MywgMjE3MTAxOSwgMjE3MTAxOSwgMjY0MjA1OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjY5OTQwMywgMjE3MTAxOSwgMjcyODA3NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzIxNTQ5OSwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQzNzEyMCwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MTAxOSwgMjgyMjI4MywgMjE3MTAxOSwgMjE3MTAxOSwgMjg1NTA1MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjkxMjM5NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzAwMjUwNywgMjE3MTAxOSwgMjE3MTAxOSwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ5NDQ2NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjQxNjkyNiwgMjQyNTExOCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjU3NjY3MCwgMjE3MTE2NiwgMjYxNzYzMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjY5MTM1OCwgMjE3MTE2NiwgMjcwNzc0MiwgMjE3MTE2NiwgMjcxNTkzNCwgMjE3MTE2NiwgMjcyNDEyNiwgMjc2NTA4NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjc5Nzg1NCwgMjE3MTE2NiwgMjgyMjQzMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjg1NTE5OCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjkxMjU0MiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjc5Mzc1OCwgMjgwNjA0NiwgMjE3MTE2NiwgMjgzMDYyMiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzEwOTE1MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjU0MzkwMiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjYyOTkxOCwgMjc5MzYxMSwgMjgwNTg5OSwgMjE3MTAxOSwgMjgzMDQ3NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMCwgNTQ2LCAwLCAwLCAyMTgzMTY4LCAwLCAwLCA1NTIsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI0MDA1NDIsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDAsIDIxNzExNjYsIDI5MjA3MzQsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI5OTAzNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMxMTczNDIsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDQzMjk0NzIsIDIyMzI0NDUsIDAsIDIyNDA2NDEsIDQzMzc2NjQsIDI3MTE2OTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI3NjA4NDMsIDI3NjkwMzUsIDI3ODk1MTUsIDI4MTQwOTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI4NzU1MzEsIDI5MDQyMDMsIDIxNzEwMTksIDIxNzEwMTksIDMwOTI2MTksIDIxNzEwMTksIDIxNzEwMTksIDMxMjUzODcsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMxOTkxMTUsIDIxNzEwMTksIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI0NTM1MDQsIDI0NTc2MDAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI3OTM0NzIsIDI4MDU3NjAsIDIyMTU5MzYsIDI4MzAzMzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0OTQ0NjQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzExNjYsIDIxNzExNjYsIDI2MzQwMTQsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI3MTE4MzgsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI3NjA5OTAsIDI3NjkxODIsIDI3ODk2NjIsIDI4MTQyMzgsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI4NzU2NzgsIDI5MDQzNTAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMxOTkyNjIsIDIxNzExNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzk5MTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI0NDU0NTEsIDIxNzEwMTksIDI0NjU5MzEsIDI0NzQxMjMsIDIxNzEwMTksIDIxNzEwMTksIDMxMTMwOTksIDIxNzEwMTksIDIxNzEwMTksIDMxMzM1NzksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMxNjIyNTEsIDIxNzEwMTksIDIxNzEwMTksIDMxODI3MzEsIDMxODY4MjcsIDIxNzEwMTksIDIzNzk3NzYsIDI4Nzk2MjcsIDIxNzEwMTksIDI5MTY0OTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMwMjcwODMsIDIxNzEwMTksIDIxNzEwMTksIDMwNjM5NDcsIDI2OTk1NTAsIDIxNzExNjYsIDI3MjgyMjIsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI4Nzk3NzQsIDIxNzExNjYsIDI5MTY2MzgsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI2MDk0MzgsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI2NTQ0OTQsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI0NDU1OTgsIDIxNzExNjYsIDI0NjYwNzgsIDI0NzQyNzAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI1MjM0MjIsIDIxNzEwMTksIDI0MzcyNTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1NDM3NTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1ODQ3MTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI5MDgyOTksIDIxNzEwMTksIDIxNzEwMTksIDI5MzY5NzEsIDIxNzEwMTksIDIxNzEwMTksIDI5ODYxMjMsIDIxNzEwMTksIDI5OTQzMTUsIDIxNzEwMTksIDIxNzEwMTksIDMwMTQ3OTUsIDIxNzEwMTksIDMwNTk4NTEsIDMwNzYyMzUsIDMwODg1MjMsIDIxNzExNjYsIDIxNzExNjYsIDI5ODYyNzAsIDIxNzExNjYsIDI5OTQ0NjIsIDIxNzExNjYsIDIxNzExNjYsIDMwMTQ5NDIsIDIxNzExNjYsIDMwNTk5OTgsIDMwNzYzODIsIDMwODg2NzAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMwMjcyMzAsIDIxNzExNjYsIDIxNzExNjYsIDMwNjQwOTQsIDIxNzExNjYsIDIxNzExNjYsIDMxMTMyNDYsIDIxNzExNjYsIDIxNzExNjYsIDMxMzM3MjYsIDI1MDY4OTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1MzU1NjMsIDI1Mzk2NTksIDIxNzEwMTksIDIxNzEwMTksIDI1ODg4MTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI2OTEyMTEsIDIxNzEwMTksIDI3MDc1OTUsIDIxNzEwMTksIDI3MTU3ODcsIDIxNzEwMTksIDI3MjM5NzksIDI3NjQ5MzksIDIxNzEwMTksIDIxNzEwMTksIDI3OTc3MDcsIDIyMTU5MzYsIDIyMTU5MzYsIDMxNzAzMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI0NTM3OTAsIDI0NTc4ODYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI0ODY1NTgsIDIxNzExNjYsIDIxNzExNjYsIDI1MDcwMzgsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI1MzU3MTAsIDI1Mzk4MDYsIDIxNzExNjYsIDIxNzExNjYsIDI1ODg5NTgsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI1MTUyMzAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI1OTMwNTQsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMwNTE4MDYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMxNzA1OTAsIDAsIDIzODgxMDcsIDIzOTIyMDMsIDIxNzEwMTksIDIxNzEwMTksIDI0MzMxNjMsIDIxNzEwMTksIDI0NjE4MzUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1MTA5ODcsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1ODA2MTksIDIxNzEwMTksIDI2MDUxOTUsIDI2Mzc5NjMsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI5MjA1ODcsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI5OTAyMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMwNTE2NTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI0NTM2NDMsIDI0NTc3MzksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1MTUwODMsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI2NDYxNTUsIDI2NzA3MzEsIDI3NTI2NTEsIDI3NTY3NDcsIDI4NDY4NTksIDI5NjE1NDcsIDIxNzEwMTksIDI5OTg0MTEsIDIxNzEwMTksIDMwMTA2OTksIDIxNzEwMTksIDIxNzEwMTksIDI2ODcxMTUsIDI3NDg1NTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI5MjQ2ODMsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMxMjEyOTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMxNzA0NDMsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI0ODYyNzIsIDIyMTU5MzYsIDIyMTU5MzYsIDI1MDY3NTIsIDMxNDU4NjcsIDMxNTgxNTUsIDMxNjYzNDcsIDIzODc5NjgsIDIzOTIwNjQsIDIyMTU5MzYsIDIyMTU5MzYsIDI0MzMwMjQsIDIyMTU5MzYsIDI0NjE2OTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI1MTA4NDgsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDAsIDAsIDAsIDAsIDAsIDU1MywgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzEyMTE1MiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE0NTcyOCwgMzE1ODAxNiwgMzE2NjIwOCwgMjM4ODI1NCwgMjM5MjM1MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjQzMzMxMCwgMjE3MTE2NiwgMjQ2MTk4MiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjUxMTEzNCwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjU4MDc2NiwgMjE3MTE2NiwgMjYwNTM0MiwgMjYzODExMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzAzMTMyNiwgMjE3MTE2NiwgMzA1NTkwMiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzA5Mjc2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzEyNTUzNCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzE2MjM5OCwgMjE3MTE2NiwgMjE3MTE2NiwgMzE4Mjg3OCwgMzE4Njk3NCwgMjE3MTE2NiwgMCwgMCwgMCwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzEwOTAwMywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQwMDI1NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MTE2NiwgMjY4NzI2MiwgMCwgMCwgMjc0ODcwMiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMjE3MTE2NiwgMjkyNDgzMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjU5NzE1MCwgMjE3MTE2NiwgMjYyMTcyNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjY0MjIwNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzEyMTQzOCwgMjE3MTE2NiwgMjE3MTE2NiwgMzE0NjAxNCwgMzE1ODMwMiwgMzE2NjQ5NCwgMjE3MTAxOSwgMjQyMDg3NSwgMjQyOTA2NywgMjE3MTAxOSwgMjQ3ODIxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU0Nzg1MSwgMjU1NjA0MywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzEyOTQ4MywgMjIxNTkzNiwgMjE3MTAxOSwgMzE0MTc3MSwgMjIxNTkzNiwgMjQyMDczNiwgMjQyODkyOCwgMjIxNTkzNiwgMjQ3ODA4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjY0NjAxNiwgMjY3MDU5MiwgMjc1MjUxMiwgMjc1NjYwOCwgMjg0NjcyMCwgMjk2MTQwOCwgMjIxNTkzNiwgMjk5ODI3MiwgMjIxNTkzNiwgMzAxMDU2MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE0MTYzMiwgMjE3MTE2NiwgMjQyMTAyMiwgMjQyOTIxNCwgMjE3MTE2NiwgMjQ3ODM2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjY0NjMwMiwgMjY3MDg3OCwgMCwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwNSwgMTQwNiwgNDUsIDQ1LCA0NSwgNDUsIDE0MDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzgsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMjc1Mjc5OCwgMjc1Njg5NCwgMCwgMjg0NzAwNiwgMjk2MTY5NCwgMjE3MTE2NiwgMjk5ODU1OCwgMjE3MTE2NiwgMzAxMDg0NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzE0MTkxOCwgMjE3MTAxOSwgMjE3MTAxOSwgMjQ5MDUwNywgMzEyOTM0NCwgMjE3MTE2NiwgMjE3MTE2NiwgMjQ5MDY1NCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMCwgMjU0Nzk5OCwgMjU1NjE5MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDQxMDk4LCA0NSwgNDUsIDQ1LCA0NSwgMTY3LCA0NSwgNDUsIDQ1LCA0NSwgMTg1LCAxODcsIDQ1LCA0NSwgMTk4LCA0NSwgNDUsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMxMjk2MzAsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1NzY1MjMsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI2MDkyOTEsIDIxNzEwMTksIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMDIzNjgsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzExNjYsIDIxNzExNjYsIDI0OTQ3NTAsIDIxNzExNjYsIDIxNzExNjYsIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCA0NSwgMTQ3LCAyNTg0NTc2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMDAyNjU0LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMDE5LCAyMTcxMDE5LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc1MjU3LCAwLCAwLCAyNTg0ODYyLCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMDE5LCAyNDQxMzU1LCAyMTcxMDE5LCAyNTI3MzcxLCAyMTcxMDE5LCAyNjAxMDk5LCAyMTcxMDE5LCAyODUwOTU1LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMDIyOTg3LCAyMjE1OTM2LCAyNDQxMjE2LCAyMjE1OTM2LCAyNTI3MjMyLCAyMjE1OTM2LCAyNjAwOTYwLCAyMjE1OTM2LCAyODUwODE2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc5MDcyLCAwLCAwLCAwLCAwLCA2OTYzMiwgMjg3LCAyMTcwODgwLCAyMjE1OTM2LCAzMDIyODQ4LCAyMTcxMTY2LCAyNDQxNTAyLCAyMTcxMTY2LCAyNTI3NTE4LCAwLCAwLCAyMTcxMTY2LCAyNjAxMjQ2LCAyMTcxMTY2LCAwLCAyODUxMTAyLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNzIwMDMwLCAyNzQ0NjA2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyODM0NzE4LCAyODM4ODE0LCAyMTcxMTY2LCAyOTA4NDQ2LCAyMTcxMTY2LCAyMTcxMTY2LCAyOTM3MTE4LCAzMDIzMTM0LCAyMTcxMDE5LCAyNTE5MTc5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMjE1OTM2LCAyNTE5MDQwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMjE1NjQ2LCAwLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNDg2NDExLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNjI5NzcxLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNzE5ODgzLCAyNzQ0NDU5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyODM0NTcxLCAyODM4NjY3LCAyMTcxMDE5LCAyNTE5MzI2LCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMzk2Mjk5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMDE4ODkxLCAyMzk2MTYwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMDE4NzUyLCAyMzk2NDQ2LCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMDE5MDM4LCAyMTcxMDE5LCAyNjUwMjUxLCAyOTY1NjQzLCAyMTcxMDE5LCAyMjE1OTM2LCAyNjUwMTEyLCAyOTY1NTA0LCAyMjE1OTM2LCAwLCAwLCAyMTcxMTY2LCAyNjUwMzk4LCAyOTY1NzkwLCAyMTcxMTY2LCAyNTUxOTQ3LCAyMTcxMDE5LCAyNTUxODA4LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgMTQ0LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjI4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTI5LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMjU1MjA5NCwgMjE3MTE2NiwgMjE3MTAxOSwgMjIxNTkzNiwgMCwgMjE3MTE2NiwgMjE3MTAxOSwgMjIxNTkzNiwgMCwgMjE3MTE2NiwgMjE3MTAxOSwgMjIxNTkzNiwgMCwgMjE3MTE2NiwgMjk3NzkzMSwgMjk3Nzc5MiwgMjk3ODA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDEzMjEsIDk3LCAxMzEwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAwLCAxNDAsIDAsIDIzNzk3NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NDUzMTIsIDIxNzA4ODAsIDI0NjU3OTIsIDI0NzM5ODQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1ODQ1NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxNjIxMTIsIDIxNzA4ODAsIDIxNzA4ODAsIDMxODI1OTIsIDMxODY2ODgsIDIxNzA4ODAsIDAsIDE0MCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzAwMjM2OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ5NDQ2NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzIxNTM2MCwgNTQ0LCAwLCAwLCAwLCA1NDQsIDAsIDU0NiwgMCwgMCwgMCwgNTQ2LCAwLCAwLCAyMTgzMTY4LCAwLCAwLCA1NTIsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MDAyNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDIxNzA4ODAsIDI5MjA0NDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI5OTAwODAsIDIxNzA4ODAsIDIxNzA4ODAsIDU1MiwgMCwgMCwgMCwgNTUyLCAwLCAyODcsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MzcxMjAsIDIxNzA4ODAsIDIxNzA4ODAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCA2NDQsIDAsIDIyMTU5MzYsIDIyMTU5MzYsIDMxNzAzMDQsIDU0NCwgMCwgNTQ2LCAwLCA1NTIsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxOTg5NzYsIDIxNzA4ODAsIDAsIDAsIDAsIDE0MCwgMCwgMCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAyNDk4NTYsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDMyNzY4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDE1MTY0MCwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAwLCAyOCwgMjgsIDI4LCAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAyNTM5NTIsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDMyODU2LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDE5MjUxMiwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAyMjMyNDQ1LCAxODQzMjAsIDIyMzI0NDUsIDAsIDIyNDA2NDEsIDIyNDA2NDEsIDE4NDMyMCwgMjI0MDY0MSwgMTAyNDMyLCAwLCAwLCAwLCAyMjExODQsIDIyMjAwMzIsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMDg4NjQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDAsIDAsIDAsIDQ1MDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDEyNywgMTI3LCA1MzI2NCwgMTgsIDQ5MTcyLCAyNTgwNzEsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAzMjc2OCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAyMDQ4MDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgMjcsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDMzLCAwLCAzMywgMzMsIDMzLCAwLCAwLCAwLCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDE2Mzg0LCAyOCwgMjgsIDI4LCAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDE2NjQwLCA2NywgNjcsIDM3MTM5LCAzNzEzOSwgMjQ4NTMsIDI0ODUzLCAwLCA3MDE3OSwgMCwgMCwgMCwgNjU4MjAsIDY1ODIwLCAzNjksIDI4NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgNDUsIDIwMzAsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTU3MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk5LCA2NywgNjcsIDY3LCA2NywgMjU0MDMsIDU0NiwgNzAxNzksIDAsIDAsIDY2MzY1LCA2NjM2NSwgNTUyLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTUsIDk3LCA5NywgOTcsIDEzNTgsIDk3LCA5NywgOTcsIDY0MSwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMCwgMTQ4MCwgMCwgMCwgMCwgMCwgMTMxOSwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTkyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUzMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY4MCwgNDUsIDQ1LCA0NSwgNjQxLCAwLCA5MjQsIDAsIDkyNSwgNDE2MDYsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDcwMTc5LCAyODIsIDAsIDAsIDY1ODIwLCA2NTgyMCwgMzY5LCAyODcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCAyMDI4LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE3ODUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxNzkwLCA5NywgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMzA1MTUyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE3MDMwNCwgMjQxNjY0LCAyMzg3OTY4LCAyMzkyMDY0LCAyMTcwODgwLCAyMTcwODgwLCAyNDMzMDI0LCA1MzI2NCwgMTksIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDI3NDQzMiwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAyNzAzMzYsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMTEzNDcxMSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTI2NDQwLCAxMTI2NDQwLCAxMTI2NDQwLCAwLCAwLCAxMTI2NDAwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM2LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAyMTcwODgsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgOTQsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgOTYsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMjQ2NjYsIDUzMjY0LCAxOCwgMTgsIDQ5MTcyLCAwLCA1NzM2NiwgMCwgMjQsIDI0LCAyNCwgMTI2LCAyOCwgMjgsIDI4LCAyOCwgMTAyNDMyLCA1MzI2NCwgMTIyLCAxMjMsIDQ5MTcyLCAwLCA1NzM2NiwgMCwgMjQsIDI0LCAyNCwgMCwgMjgsIDI4LCAyOCwgMjgsIDEwMjQzMiwgMjE3MDg4MCwgMjE3MDg4MCwgNDI1NjA5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxOSwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDksIDk3LCA5NywgOTcsIDk3LCAxMTEzLCAxMzIsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCA0NSwgMTQ2LCAxNTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1LCA0NSwgMTgwLCA0NSwgMTg2LCA0NSwgMTg5LCA0NSwgNDUsIDIwMywgNjcsIDI1NiwgNjcsIDY3LCAyNzAsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDk3LCA5NywgOTcsIDI5MywgMjk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMyMiwgOTcsIDMyNywgOTcsIDMzMywgOTcsIDAsIDAsIDk3LCAyMDI2LCAwLCAyMDI3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE2ODUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjkwLCA2NywgMzM2LCA5NywgOTcsIDM1MCwgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDM1NiwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MTY2NDAsIDI0MjQ4MzIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2MTczNDQsIDIxNzA4ODAsIDQ1LCA0MzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA2MjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjQsIDk3LCA5NywgMTUyNywgMzY5LCA2NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY1OSwgNDUsIDQ1LCA0NSwgNDUsIDQwOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjM5LCA0NSwgNDUsIDQ1LCA2NywgNzI5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2MiwgNjcsIDc0NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU5LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMTQ3NywgMCwgMTA4NiwgMCwgMCwgMCwgMTQ3OSwgMCwgMTA5MCwgNjcsIDY3LCA3OTYsIDY3LCA2NywgNzk5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjkxLCA2NywgNjcsIDY3LCA4MTEsIDY3LCA2NywgNjcsIDY3LCA2NywgODE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgMjU0MDMsIDU0NiwgNzAxNzksIDAsIDAsIDY2MzY1LCA2NjM2NSwgNTUyLCA4MzMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM4MCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTg1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzg2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA5NywgOTcsIDg0NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgOTcsIDk3LCA5NywgODk0LCA5NywgOTcsIDg5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTM4MiwgNDUsIDQ1LCA0NSwgOTcsIDkwOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MjMsIDY3LCA2NywgMTA3OSwgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgMTA4NSwgMjU0MDMsIDEwODksIDY2MzY1LCAxMDkzLCAwLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgNDUsIDE0OCwgMTExNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE3MywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMjI4OCwgMCwgOTI1LCAwLCAxMTc5LCAwLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgMTQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc2MiwgNjcsIDY3LCA2NywgMTc2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE5MzQsIDY3LCA2NywgMTI1NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTExLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzI3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMzM0NCwgOTcsIDk3LCA5NywgMTMzNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgMTM3NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTE3OSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDY3MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzAsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE0MzgsIDY3LCA2NywgMTQ0MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5MiwgNjcsIDY3LCA2NywgMTQ1MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTgsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAxMzA1LCAwLCAwLCAwLCAwLCAwLCAxMzExLCAwLCAwLCAwLCAxMzE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDEzMjIsIDk3LCA5NywgMTQ5MSwgOTcsIDk3LCAxNDk1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU1MSwgNDUsIDE1NTMsIDQ1LCAxNTA0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUxMywgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM2LCA0NSwgNDUsIDQ1LCA0NSwgMTU0MCwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTcwMCwgNjcsIDY3LCA2NywgOTcsIDE2NDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDEsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAxOTQwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDIwMTEsIDQ1LCA0NSwgNDUsIDIwMTUsIDY3LCA2NywgMjAxNywgNjcsIDY3LCA2NywgMjAyMSwgOTcsIDY3LCA2NywgODEyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCA1NDQsIDk3LCA5NywgOTcsIDkxMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MjMsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCAxMTg0LCA0NSwgNDUsIDQ1LCA0NSwgMTE4OCwgNDUsIDQ1LCA0NSwgNDUsIDE0MTQsIDQ1LCA0NSwgNDUsIDE0MTcsIDQ1LCAxNDE5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUzLCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxMjQ0LCA2NywgNjcsIDY3LCA2NywgMTI0OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMjgyLCA0MTA5OCwgNjU4MjAsIDk3LCAxMzI0LCA5NywgOTcsIDk3LCA5NywgMTMyOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTMwLCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCA5NywgOTcsIDEzNzgsIDk3LCA5NywgOTcsIDk3LCAwLCAxMTc5LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNjcxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTkyMywgNjcsIDE5MjUsIDY3LCA2NywgMTkyNywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE5ODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0NiwgNDUsIDQ1LCA5NTAsIDQ1LCA0NSwgNDUsIDAsIDk3LCA5NywgOTcsIDE5MzksIDAsIDAsIDAsIDk3LCAxOTQzLCA5NywgOTcsIDE5NDUsIDk3LCA0NSwgNDUsIDQ1LCA2NjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk5MCwgNDUsIDQ1LCA0NSwgNjcsIDI1NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgMzM3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMzU2LCAyOCwgMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MCwgNDAxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA0NTksIDQ2MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzUsIDY3LCA0ODAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk4LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ4NCwgNjcsIDY3LCA0ODcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU5LCA2NywgNjcsIDk3LCA1NTYsIDU1OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NzIsIDk3LCA1NzcsIDk3LCA5NywgMCwgMCwgMTg5NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTkwMywgNDUsIDQ1LCA0NSwgNDUsIDk4MywgNDUsIDQ1LCA0NSwgNDUsIDk4OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNTgxLCA5NywgOTcsIDU4NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTMsIDk3LCA5NywgMzY5LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY2MiwgNDUsIDQ1LCA0NSwgNjg0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMDA0LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA3NDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA2OCwgNjcsIDY3LCA2NywgMTA3MSwgNjcsIDY3LCA2NywgNjcsIDEwNzYsIDc5NCwgNzk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDU0NCwgOTcsIDk3LCA5NywgOTcsIDg0NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU5LCA5NywgMCwgMCwgMjAyNSwgOTcsIDIwNDgwLCA5NywgOTcsIDIwMjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE1NzUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzUsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA4OTIsIDg5MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTE1LCA5NywgOTkzLCA5OTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk5MiwgNjcsIDY3LCA2NywgMTI4NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2MDcsIDY3LCA2NywgOTcsIDEzNjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTk2LCA5NywgNDUsIDE1NTYsIDE1NTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjk2LCA0NSwgMTU5NiwgMTU5NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTksIDY3LCA5NywgOTcsIDk3LCAxNjIxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM0NiwgOTcsIDk3LCA5NywgOTcsIDE3NDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTgzNiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAxOTg0LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgwOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNzM5LCA2NywgNjcsIDY3LCA2NywgNjcsIDc0NCwgNDUsIDQ1LCAxOTA5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDE5MTcsIDY3LCAxOTE4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjQ3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTMyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTIyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDE5MzAsIDk3LCAxOTMxLCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTU3NiwgNjcsIDY3LCA2NywgNjcsIDE1ODAsIDY3LCA2NywgMCwgOTcsIDk3LCAxOTM4LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNjk5LCA0NSwgNDUsIDQ1LCA3MDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTg3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMjAwNiwgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCAxNTMzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDE2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyMiwgNzIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAyMDQ1LCA2NywgNjcsIDY3LCAyMDQ3LCAwLCAwLCA5NywgOTcsIDk3LCAyMDUxLCA0NSwgNDUsIDY3LCA2NywgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDA5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTU3LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxODM2LCA5NywgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTc2MSwgNjcsIDY3LCA2NywgMTc2NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzg3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NSwgNDUsIDQyMCwgNDUsIDQ1LCA0MjIsIDQ1LCA0NSwgNDI1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzg3LCA0NSwgNDUsIDQ1LCA0NSwgMzk3LCA0NSwgNDUsIDQ1LCA2NywgNDYwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxNSwgNjcsIDQ4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMCwgMjAzOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTQyNiwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY4OSwgNjcsIDY3LCA2NywgOTcsIDU1NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTIsIDk3LCA1ODIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgODk2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODg1LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA5MzksIDQ1LCA0NSwgNDUsIDQ1LCA5NDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxNSwgNjcsIDY3LCA2NywgNjcsIDEwMTksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDQsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAwLCAyNTQwMywgMCwgNjYzNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MzcxMjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1NDM2MTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2Mjk2MzIsIDExNjksIDk3LCAxMTcxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTIyODgsIDAsIDkyNSwgMCwgMTE3OSwgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDkzNiwgNDUsIDQ1LCA2NywgNjcsIDIxNCwgNjcsIDIyMCwgNjcsIDY3LCAyMzMsIDY3LCAyNDMsIDY3LCAyNDgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTgsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MTcsIDk3LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCAxMTgzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzOTMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTI0MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzQsIDY3LCA2NywgMTI4MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzc2LCAxMzIzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDcsIDQ1LCAxNDEyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg2LCA0NSwgNDUsIDQ1LCA2OTAsIDQ1LCA0NSwgNjk1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCAxNzEyLCA5NywgOTcsIDk3LCA5NywgMTc0MSwgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCAxOTI0LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAxOTgzLCA5NywgOTcsIDQ1LCA0NSwgMTk4NywgNDUsIDE5ODgsIDQ1LCAwLCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTk0MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA3MDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTEsIDQ1LCA0NSwgMTUzLCA0NSwgNDUsIDE2NiwgNDUsIDE3NiwgNDUsIDE4MSwgNDUsIDQ1LCAxODgsIDE5MSwgMTk2LCA0NSwgMjA0LCAyNTUsIDI1OCwgMjYzLCA2NywgMjcxLCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMjgyLCA0MTA5OCwgNjU4MjAsIDk3LCA5NywgOTcsIDI5NCwgOTcsIDMwMCwgOTcsIDk3LCAzMTMsIDk3LCAzMjMsIDk3LCAzMjgsIDk3LCA5NywgMzM1LCAzMzgsIDM0MywgOTcsIDM1MSwgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDM1NiwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTA5OCwgMCwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgMTQwNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MTEsIDY3LCA2NywgNDg2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1MSwgNjcsIDY3LCA1MDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ0MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNjMsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA1ODMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUyNiwgOTcsIDU5OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjEwLCA5NywgOTcsIDAsIDk3LCA5NywgMTc5NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0NCwgNDUsIDQ1LCA0NSwgMzY5LCAwLCA2NTEsIDQ1LCA2NTMsIDQ1LCA2NTQsIDQ1LCA2NTYsIDQ1LCA0NSwgNDUsIDY2MCwgNDUsIDQ1LCA0NSwgNDUsIDE1NTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2NiwgNDUsIDQ1LCA2ODEsIDQ1LCA2ODMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjkxLCA2OTIsIDY5NCwgNDUsIDQ1LCA0NSwgNzE2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MDksIDQ1LCA0NSwgNzEyLCA0NSwgNzE0LCA0NSwgNDUsIDQ1LCA3MTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjYsIDQ1LCA0NSwgNDUsIDczMywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTEsIDY3LCA2NywgNzQ3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjAsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCAxNjEzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTA5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxMTc5LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDc2NCwgNjcsIDY3LCA2NywgNjcsIDc2OCwgNjcsIDc3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTk3NywgNjcsIDc3OCwgNzc5LCA3ODEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4OCwgNzg5LCA2NywgNjcsIDc5MiwgNzkzLCA2NywgNjcsIDY3LCA4MTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgyNCwgMzc2ODksIDU0NCwgMjU0MDMsIDU0NiwgNzAxNzksIDAsIDAsIDY2MzY1LCA2NjM2NSwgNTUyLCAwLCA4MzYsIDk3LCA4MzgsIDk3LCA4MzksIDk3LCA4NDEsIDk3LCA5NywgOTcsIDg0NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU4LCA5NywgOTcsIDAsIDE3MjgsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgMTgwMiwgNDUsIDk3LCA5NywgODYyLCA5NywgOTcsIDk3LCA5NywgODY2LCA5NywgODY4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDE3ODgsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgODc2LCA4NzcsIDg3OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODg2LCA4ODcsIDk3LCA5NywgODkwLCA4OTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4OTksIDk3LCA5NywgOTcsIDkwMywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2NDYsIDk3LCA5NywgOTcsIDk3LCA5MTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkyMiwgOTIzLCA0NSwgOTU1LCA0NSwgOTU3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTgxLCA5ODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDEwMjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzEsIDY3LCAxMDMzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODE3LCA4MTksIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgNjcsIDEwNjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTE2LCA2NywgNjcsIDEwNzgsIDY3LCA2NywgMTA4MSwgMTA4MiwgNjcsIDY3LCAzNzY4OSwgMCwgMjU0MDMsIDAsIDY2MzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNDM3NDA2LCAyMTcxMTY2LCAyMTcxMTY2LCA5NywgMTExNSwgOTcsIDExMTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjUsIDk3LCAxMTI3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgMTY0NCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxNjQyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MDIsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE3MiwgOTcsIDk3LCAxMTc1LCAxMTc2LCA5NywgOTcsIDEyMjg4LCAwLCA5MjUsIDAsIDExNzksIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDkzNSwgNDUsIDQ1LCA0NSwgMTIzMywgNDUsIDQ1LCA0NSwgMTIzNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4NzMsIDY3LCA2NywgNDUsIDQ1LCAxMjE4LCA0NSwgNDUsIDQ1LCAxMjIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzMCwgNDUsIDQ1LCA2NywgNjcsIDIxNSwgMjE5LCAyMjIsIDY3LCAyMzAsIDY3LCA2NywgMjQ0LCAyNDYsIDI0OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg4MiwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCAxOTA0LCA0NSwgMTkwNSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1OCwgNjcsIDEyNjAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjgzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgxOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgNjcsIDY3LCAxMjk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzQ5NzYsIDAsIDAsIDk3LCA5NywgOTcsIDEzMjYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTE0LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzgsIDk3LCAxMzQwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MDAsIDk3LCA5NywgMTUwMywgOTcsIDEzNjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzcwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTYzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NzgsIDk3LCAxMzc1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDExNzksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA2ODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTAwMywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE0NjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzc4LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwOSwgOTcsIDk3LCA5NywgNDUsIDE1NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NTQsIDQ1LCAxNTcwLCAxNTcxLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA2MSwgNjcsIDY3LCAxNTgyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4OCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTk0LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAyMDM4LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDIwNDQsIDQ1LCA0NSwgNDUsIDk5NSwgNDUsIDQ1LCA0NSwgNDUsIDEwMDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODA5LCA0NSwgMTgxMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTYxMCwgMTYxMSwgNjcsIDE0NzYsIDAsIDE0NzgsIDAsIDE0ODAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MTgsIDE2NDcsIDE2NDksIDk3LCA5NywgOTcsIDE2NTIsIDk3LCAxNjU0LCAxNjU1LCA5NywgMCwgNDUsIDQ1LCA0NSwgMTY1OCwgNDUsIDQ1LCA2NywgNjcsIDIxNiwgNjcsIDY3LCA2NywgNjcsIDIzNCwgNjcsIDY3LCA2NywgNjcsIDI1MiwgMjU0LCAxODQ1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDUsIDQ1LCA5NDcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxODgxLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTkwMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTkyMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDE5MzcsIDk3LCA5NywgMTk0MCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTk0NywgMTk0OCwgMTk0OSwgNDUsIDQ1LCA0NSwgMTk1MiwgNDUsIDE5NTQsIDQ1LCA0NSwgNDUsIDQ1LCAxOTU5LCAxOTYwLCAxOTYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTY0LCA2NywgMTk2NiwgNjcsIDY3LCA2NywgNjcsIDE5NzEsIDE5NzIsIDE5NzMsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDExMDQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODQsIDk3LCA5NywgOTcsIDg4OSwgOTcsIDk3LCAxOTc4LCA5NywgMCwgMCwgMTk4MSwgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDczNiwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxOCwgNjcsIDY3LCA2NywgNDUsIDY3LCA2NywgNjcsIDY3LCAwLCAyMDQ5LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDAsIDAsIDAsIDAsIDQ1LCA5MzMsIDQ1LCA0NSwgNDUsIDQ1LCAxMjM0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDk3LCA5NywgMjg4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCAxNzg3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgNDUsIDQ1LCAzNzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzkwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI0LCA0NSwgNDUsIDQ1LCA0MzEsIDQzMywgNDUsIDQ1LCA0NSwgNjcsIDEwNTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTE4LCA2NywgOTcsIDk3LCA5NywgMTE0NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTUsIDk3LCA5NywgOTcsIDk3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTgzNywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxODk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIwOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgMjAxMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMjAxNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjAyMiwgNDUsIDIwNDYsIDY3LCA2NywgNjcsIDAsIDAsIDIwNTAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNjcsIDY3LCAwLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCAwLCAwLCAwLCA5MzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTMzLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgNDUsIDQ1LCA3MDEsIDcwMiwgNDUsIDQ1LCA3MDUsIDcwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzAzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI1LCA0NSwgNDUsIDQ1LCAzNjksIDY0OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxNiwgMjU0MDMsIDU0NiwgNzAxNzksIDAsIDAsIDY2MzY1LCA2NjM2NSwgNTUyLCA4MzQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzQyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzk5LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDE1NjksIDQ1LCA0NSwgNDUsIDE1NzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMTMwNiwgMCwgNjcsIDY3LCA2NywgMTU5OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjA2LCA2NywgNjcsIDE2MDksIDk3LCA5NywgOTcsIDE2NTAsIDk3LCA5NywgMTY1MywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCAxNjU3LCA0NSwgNDUsIDQ1LCAxMjA2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDIxLCA0NSwgNDUsIDQ1LCAxNzAzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCAxNzExLCA5NywgOTcsIDAsIDE4OTUsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTU4LCA0NSwgOTYwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MTMsIDQ1LCA0NSwgMTkxNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDgxLCA2NywgNDUsIDE3NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzczLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDE4ODYsIDAsIDAsIDAsIDk3LCA5NywgNjcsIDIwMzUsIDIwMzYsIDY3LCA2NywgOTcsIDAsIDAsIDk3LCAyMDQxLCAyMDQyLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCAxNjYyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTcsIDQ1LCA0NSwgNDUsIDQ1LCAxNTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQzNywgMjA1LCA0NSwgNjcsIDY3LCA2NywgMjE4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMjk4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg3MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzNTIsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY1LCAwLCA0MTA5OCwgMCwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MjcsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0MzUsIDUyMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAzNywgNjE3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MjMsIDQ1LCAxMjMyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE5MTksIDY3LCAxNzU5LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDIxLCA0NSwgMTU0LCA0NSwgMTYyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NjQsIDQ1LCA0NSwgNDUsIDIwNiwgNDUsIDY3LCA2NywgNjcsIDY3LCAyMjEsIDY3LCAyMjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTMwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3ODUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODAyLCA2NywgNjcsIDY3LCA4MDcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAzNTMsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY2LCAwLCAwLCAwLCAxNDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MTY2NDAsIDQwMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODksIDQ1LCAzOTQsIDQ1LCA0NSwgMzk4LCA0NSwgNDUsIDQ1LCA0NSwgNDQxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NywgNDUsIDQ1LCA0NSwgNDU0LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc2OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA0ODgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzc0LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgNTIzLCA2NywgNjcsIDUyNywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzMsIDY3LCA2NywgNjcsIDU0MCwgOTcsIDk3LCA5NywgNTg1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTkzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzg0LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCA5NywgOTcsIDYyMCwgOTcsIDk3LCA2MjQsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMwLCA5NywgOTcsIDk3LCA2MzcsIDcxMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzIxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzMwLCA3MzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODEsIDY3LCA0NSwgNjcsIDY3LCA2NywgNjcsIDEwMTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1OSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDI0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3NSwgNjcsIDY3LCA2NywgNjcsIDEwNjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA4MCwgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAwLCAyNTQwMywgMCwgNjYzNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NywgMCwgMCwgMCwgMjg3LCAwLCAyMzc5Nzc2LCAyMTcwODgwLCAyMTcwODgwLCA5NywgOTcsIDk3LCAxMTE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MjAsIDk3LCA5NywgMCwgMCwgMCwgMCwgNDUsIDExODEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDMyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjE5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4NCwgNDUsIDQ1LCA0NSwgNDUsIDIwMiwgNDUsIDEyNDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNjYsIDY3LCAxMjY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjc5LCA2NywgNjcsIDY3LCA2NywgNjcsIDI3MiwgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTMsIDY3LCA2NywgNjcsIDEyOTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAyODEsIDk0LCAwLCAwLCA5NywgOTcsIDk3LCAxMzY2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzczLCA5NywgOTcsIDE4LCAwLCAxMzk2MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMzY3LCAwLCA5NywgMTM3NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgMTM4NCwgNDUsIDQ1LCA2NywgMjA4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMzcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDY5LCAxMDcwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxNDAsIDI0ODU0LCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjEsIDQ1LCAxNDIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE0MzEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDgzLCAzNzY4OSwgMCwgMjU0MDMsIDAsIDY2MzY1LCAwLCAwLCAwLCAxNDM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODMwLCA2NywgMTQ1MiwgMTQ1MywgNjcsIDY3LCA2NywgNjcsIDE0NTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2MSwgNjcsIDY3LCA2NywgMTQ2NCwgNjcsIDE0NjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5NSwgMTQ4OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyOSwgOTcsIDE1MDUsIDE1MDYsIDk3LCA5NywgOTcsIDk3LCAxNTEwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTYzLCAxMTY0LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTYsIDk3LCA5NywgOTcsIDE1MTksIDk3LCAxNTIxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTI1LCA5NywgOTcsIDE4LCAwLCAxMzk2MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMzY3LCA0MTYwNiwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2MDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTMwMSwgMCwgMCwgMCwgMTMwNywgOTcsIDk3LCAxNjIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTEzLCA5NywgOTcsIDk3LCA5NywgOTE5LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxNzgxLCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE3OTIsIDE4NjAsIDQ1LCAxODYyLCAxODYzLCA0NSwgMTg2NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg3NSwgNjcsIDE4NzcsIDE4NzgsIDY3LCAxODgwLCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxODg3LCAwLCAxODg5LCA5NywgOTcsIDE4LCAwLCAxMzk2MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMjM3NTY4LCAwLCAzNjcsIDAsIDk3LCAxODkzLCAwLCAwLCAwLCA5NywgMTg5OCwgMTg5OSwgOTcsIDE5MDEsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDIwMTQsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDIwMjAsIDY3LCA5NywgMTk4OSwgNDUsIDE5OTAsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5OTYsIDY3LCAxOTk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI3MywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDIwMDUsIDAsIDk3LCAyMDA3LCA5NywgOTcsIDE4LCAwLCAxMzk2MjEsIDAsIDAsIDAsIDY0MiwgMCwgMTMzLCAzNjQsIDAsIDAsIDM2NywgNDE2MDYsIDAsIDk3LCA5NywgMjA1NiwgMjA1NywgMCwgMjA1OSwgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDQ1LCA2NywgMjA5LCA2NywgNjcsIDY3LCAyMjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4NiwgNjcsIDY3LCA2NywgNzkxLCA2NywgNjcsIDQ1LCA0NSwgOTQwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyNywgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDAsIDI1NDAzLCAwLCA2NjM2NSwgMCwgMCwgMCwgMTMzLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgMTQyLCA0NSwgNDUsIDY3LCAyMTAsIDY3LCA2NywgNjcsIDIyNSwgNjcsIDY3LCAyMzksIDY3LCA2NywgNjcsIDI1MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNDc2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTcwOSwgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxODQzLCAwLCA2NywgMjU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgOTcsIDI4OSwgOTcsIDk3LCA5NywgMzAzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTAxLCA5NywgOTcsIDk3LCA5NywgOTcsIDMzOSwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMCwgMzU4LCAwLCAwLCAwLCAwLCAwLCAwLCA0MTA5OCwgMCwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NTMsIDQ1LCAxOTU1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY4NywgMTY4OCwgNjcsIDY3LCA2NywgNjcsIDQ1LCA0NSwgNDA1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDMsIDQ1LCA0NTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3MCwgNDc3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk3MCwgOTcsIDk3LCA5NywgMTk3NCwgMCwgMCwgMCwgOTcsIDExMDMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3MiwgOTcsIDk3LCA5NywgOTcsIDY3LCA1MjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTcwMSwgNjcsIDU1NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY3LCA1NzQsIDk3LCA5NywgOTcsIDk3LCA5NywgMzAxLCA5NywgMzA5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDAsIDk3LCA5NywgOTcsIDkwNSwgOTcsIDk3LCA5NywgNjE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzMywgOTcsIDk3LCAxOCwgMCwgMTM5NjIxLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMzY3LCA0MTYwNiwgMzY5LCA2NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY2MywgNjY0LCA2NywgNjcsIDY3LCA2NywgNzUwLCA3NTEsIDY3LCA2NywgNjcsIDY3LCA3NTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU3LCAxMDU4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc5NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTEyLCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgODk1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwMiwgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgMTA1MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMzAyLCAwLCAwLCAwLCAxMzA4LCA5NywgOTcsIDk3LCA5NywgMTE0NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTM5LCA5NywgOTcsIDk3LCA5NywgMTE1NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE2MSwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTY2LCA5NywgOTcsIDE4LCA2NDAsIDEzOTYyMSwgMCwgNjQxLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDM2NywgNDE2MDYsIDY3LCA2NywgNjcsIDY3LCAxMjU3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDEzMDUsIDAsIDAsIDk3LCA5NywgMTMzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjMwLCA5NywgNjcsIDE0NzQsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM4MDA2MiwgMjE3MTE2NiwgMjE3MTE2NiwgOTcsIDE1MjksIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI4LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE3MDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDE4OTEsIDE3MzksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExOTgsIDQ1LCAxMjAwLCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCAxODk0LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDIwLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxOTY1LCA2NywgMTk2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDE5NzYsIDAsIDk3LCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDk3LCA5NywgMTk3OSwgMCwgMCwgOTcsIDE5ODIsIDk3LCA5NywgOTcsIDE5ODYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzM1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzcwLCA2NywgNjcsIDIwMDAsIDk3LCA5NywgOTcsIDIwMDIsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3OTgsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDIwMzQsIDY3LCA2NywgNjcsIDY3LCA5NywgMCwgMCwgMjA0MCwgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCAxNzUyLCA0NSwgNDUsIDQ1LCAxNzUzLCAxNzU0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDM4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTQzMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI0LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgMCwgMjU0MDMsIDAsIDY2MzY1LCAwLCAwLCAxMDk2LCA5NywgOTcsIDk3LCA2MjEsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDM1NiwgMjgsIDI4LCA2NjUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MDcsIDcwOCwgNDUsIDQ1LCA0NSwgNDUsIDc2MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODA5LCA4MTAsIDY3LCA2NywgNjcsIDY3LCA3ODMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMTMwMywgMCwgMCwgMCwgOTcsIDg2MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTMsIDk3LCA0NSwgNDUsIDk1NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjE1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDEwMjcsIDY3LCA2NywgNjcsIDY3LCAxMDMyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAwLCAyNTQwMywgMCwgNjYzNjUsIDAsIDAsIDEwOTcsIDEwNjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzUsIDY3LCAxMDk4LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzMxLCA5NywgOTcsIDk3LCA5NywgMTE1OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5NCwgOTcsIDk3LCAxMzA5LCAwLCAwLCAwLCAxMzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzQsIDk3LCA0NSwgNDUsIDE1NDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTI0MCwgNjcsIDY3LCAxNTgzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNTIsIDY3LCA5NywgOTcsIDk3LCAxNjM1LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE4MDAsIDk3LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDE3OTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCAxNzQzLCA0NSwgNDUsIDQ1LCAxNzQ2LCA0NSwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxODUxLCA5NywgNDUsIDQ1LCA0NSwgNDUsIDE4NTYsIDQ1LCA0NSwgNDUsIDQ1LCAxODY0LCA0NSwgNDUsIDY3LCA2NywgMTg2OSwgNjcsIDY3LCA2NywgNjcsIDE4NzQsIDY3LCAwLCA5NywgOTcsIDQ1LCA2NywgMjA1OCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA0NSwgNjcsIDIxMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjQwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ0NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTA5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNjgsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgOTcsIDI5MCwgOTcsIDk3LCA5NywgMzA1LCA5NywgOTcsIDMxOSwgOTcsIDk3LCA5NywgMzMwLCA5NywgOTcsIDE4LCA2NDAsIDEzOTYyMSwgMCwgNjQxLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDY0MywgMzY3LCA0MTYwNiwgOTcsIDk3LCAzNDgsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAxMzk2MjEsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCAzODAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM5NSwgNDUsIDQ1LCA0NSwgNDAwLCAzNjksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQyNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3NDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAxMDg2LCAyNTQwMywgMTA5MCwgNjYzNjUsIDEwOTQsIDAsIDAsIDk3LCA4NDMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTIxLCA5NywgOTcsIDk3LCA5NywgMTEyNiwgOTcsIDk3LCA5NywgOTcsIDQ1LCA5ODAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MDAsIDQ1LCA2NywgNjcsIDY3LCAxMDExLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDEzMDQsIDAsIDAsIDAsIDExOTAsIDQ1LCA0NSwgMTE5MywgMTE5NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTk5LCA0NSwgMTIwMSwgNDUsIDQ1LCA0NSwgNDUsIDE5MTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1NzksIDY3LCA2NywgNjcsIDY3LCA0NSwgMTIwNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjExLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTUwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI5LCA0NSwgNDUsIDQ1LCAxMzg4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzk2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxNTc0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5MCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjU0LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNTksIDY3LCAxMjYxLCA2NywgNjcsIDY3LCA2NywgMTI2NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTcwOCwgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgNjcsIDY3LCA2NywgNjcsIDEyODUsIDY3LCA2NywgNjcsIDY3LCAxMjg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAxMDg3LCAyNTQwMywgMTA5MSwgNjYzNjUsIDEwOTUsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxMzM5LCA5NywgMTM0MSwgOTcsIDk3LCA5NywgOTcsIDEzNDUsIDk3LCA5NywgOTcsIDk3LCA5NywgNTYxLCA5NywgOTcsIDk3LCA5NywgOTcsIDU3MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcxNywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzUxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU4OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjUsIDk3LCA5NywgOTcsIDk3LCAxMzY5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDE0MDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5OSwgNDUsIDQ1LCA0NSwgMTQxMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjY5LCA0NSwgMTQyMiwgNDUsIDQ1LCAxNDI1LCA0NSwgNDUsIDE0MjgsIDQ1LCAxNDI5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzksIDY3LCA2NywgMTQ3NSwgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MCwgOTcsIDk3LCAxNTMwLCA5NywgMCwgNDUsIDQ1LCAxNTM0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NTYsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5OSwgNjcsIDY3LCAxNjAxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2MzIsIDk3LCAxNjM0LCAwLCA5NywgOTcsIDk3LCAxNjQwLCA5NywgOTcsIDk3LCAxNjQzLCA5NywgOTcsIDE2NDUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTEyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjYwLCAxNjYxLCA0NSwgNDUsIDQ1LCA0NSwgMTY2NSwgMTY2NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjcwLCAxNjkyLCAxNjkzLCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzAyLCA5NywgOTcsIDE3MTQsIDE3MTUsIDk3LCA5NywgOTcsIDk3LCAwLCAxNzIxLCAxNzIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzUzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjIsIDE3MjYsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxNzM0LCA5NywgOTcsIDk3LCA5NywgOTcsIDg0OCwgODQ5LCA5NywgOTcsIDk3LCA5NywgODU2LCA5NywgOTcsIDk3LCA5NywgOTcsIDM1NCwgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDQ1LCA0NSwgMTc1MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjgxLCA0NSwgMCwgMTg0NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCAxODU0LCA0NSwgNDUsIDQ1LCA0NSwgMTg1OSwgNjcsIDY3LCA2NywgMTg3OSwgNjcsIDY3LCA5NywgOTcsIDE4ODQsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTEwNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDQsIDk3LCA5NywgOTcsIDEzNDcsIDk3LCAxODkyLCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTkwMCwgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEwMDIsIDQ1LCA0NSwgMTAwNSwgMTAwNiwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTkyNiwgNjcsIDY3LCAxOTI4LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MzcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAxOTQ0LCA5NywgOTcsIDE5NDYsIDQ1LCA0NSwgNDUsIDE1NDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MCwgNDUsIDQ1LCA0NSwgMTUyLCAxNTUsIDQ1LCAxNjMsIDQ1LCA0NSwgMTc3LCAxNzksIDE4MiwgNDUsIDQ1LCA0NSwgMTkzLCAxOTcsIDQ1LCA0NSwgNDUsIDE2NzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3NywgNDUsIDE2NzksIDQ1LCA0NSwgNDUsIDQ1LCA5OTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxMiwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAyNjAsIDI2NCwgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgOTcsIDk3LCAyOTUsIDI5OSwgMzAyLCA5NywgMzEwLCA5NywgOTcsIDMyNCwgMzI2LCAzMjksIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgMTYzOSwgMCwgMTY0MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTExLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcxOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzEyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzNDAsIDM0NCwgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAxMzk2MjEsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCA0NSwgMzczLCAzNzUsIDQxOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI4LCA0NSwgNDUsIDQzNSwgNDUsIDQ1LCA0NSwgMTc1MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxMCwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNTA1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5NjksIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCAyMDY0LCAyMDY1LCAwLCAyMDY2LCA0NSwgNTIxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTM0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjUsIDY3LCA2NywgNjcsIDQ3NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTkzMywgMCwgOTcsIDk3LCA5NywgNjAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTEsIDk3LCA5NywgMTgsIDY0MCwgMTM5NjIxLCAzNTgsIDY0MSwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAzNjcsIDAsIDYxOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjksIDk3LCA5NywgOTcsIDk3LCA5NywgMzY5LCAwLCA0NSwgNjUyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY1NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCAxNDMyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3MywgNjcsIDY3LCA2NywgMCwgMTMwNSwgMCwgMTMxMSwgMCwgMTMxNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgMTcyNCwgOTcsIDk3LCA5NywgNzc3LCA2NywgNjcsIDc4MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTM1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODE0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgNTQ0LCAyNTQwMywgNTQ2LCA3MDE3OSwgMCwgMCwgNjYzNjUsIDY2MzY1LCA1NTIsIDAsIDk3LCA4MzcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0OTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTgsIDk3LCA5NywgOTcsIDk3LCAwLCA4NDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjgsIDk3LCA5NywgOTcsIDk3LCA4NjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODcxLCA5NywgOTcsIDk3LCAwLCAxNjM3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxODAxLCA0NSwgNDUsIDk3LCA4NzUsIDk3LCA5NywgODgwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTEsIDExNTIsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDEwNDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc5MCwgNjcsIDY3LCA2NywgMTE4MCwgMCwgNjQ5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMjAwLCA0NSwgNDUsIDY3LCA2NywgNjcsIDE0NTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwNiwgNjcsIDY3LCA2NywgMCwgMCwgMCwgMTQ4MSwgMCwgMTA5NCwgMCwgMCwgOTcsIDE0ODMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwNCwgOTcsIDk3LCAzMTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCA5NywgOTcsIDk3LCAxNTA3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzMyLCA5NywgOTcsIDk3LCAxNjE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjMxLCA5NywgMTYzMywgOTcsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzODEsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDE3MjcsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzYsIDQ1LCA0NSwgMTc2MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjk5LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTYxNiwgOTcsIDk3LCAxODAzLCA0NSwgNDUsIDQ1LCA0NSwgMTgwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODEzLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE2ODQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODIyLCA2NywgNjcsIDM3Njg5LCA1NDQsIDY3LCA2NywgMTgxOCwgNjcsIDY3LCA2NywgNjcsIDE4MjIsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCAyMDEyLCAyMDEzLCA0NSwgNDUsIDY3LCA2NywgNjcsIDIwMTgsIDIwMTksIDY3LCA2NywgOTcsIDY3LCA5NywgOTcsIDk3LCAxODMzLCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMTg0MCwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDE3MzMsIDk3LCAxNzM1LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxODQ5LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4NTcsIDQ1LCA0NSwgNDUsIDE5MTAsIDQ1LCAxOTEyLCA0NSwgNDUsIDE5MTQsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxNywgNjcsIDY3LCAxMDIwLCA2NywgNDUsIDE4NjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxODcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQ2LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4NzYsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxODkwLCA5NywgOTcsIDk3LCA5NywgOTcsIDExMzQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NzAsIDk3LCA5NywgOTcsIDk3LCA1ODAsIDE5MzUsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTkwNiwgNDUsIDY3LCA2NywgNjcsIDY3LCAyMDQ4LCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDAsIDAsIDAsIDkzMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3NCwgNDUsIDE2NzYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTg3MSwgNjcsIDY3LCA2NywgNjcsIDAsIDk3LCA5NywgNDUsIDY3LCAwLCA5NywgMjA2MCwgMjA2MSwgMCwgMjA2MywgNDUsIDY3LCAwLCA5NywgNDUsIDQ1LCAxNTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MiwgNDUsIDQ1LCA0NSwgNDUsIDE2NzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI5LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMjY5LCA2NywgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgOTcsIDk3LCAzNDksIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAxMzk2MjEsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCA0NSwgMzc0LCA0NSwgNDUsIDY3LCA2NywgMjEzLCAyMTcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjQyLCA2NywgMjQ3LCA2NywgMjUzLCA0NSwgNDUsIDY5OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM5OSwgNDUsIDQ1LCAwLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCA5MjksIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTEsIDQ1LCA0NSwgMTM5NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDM2LCA0NSwgNjcsIDY3LCA2NywgNjcsIDEwNDEsIDY3LCAxMDQzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3NiwgNjcsIDY3LCA5NywgOTcsIDk3LCAxMDk5LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODg4LCA5NywgOTcsIDk3LCAxMTMxLCA5NywgOTcsIDk3LCA5NywgMTEzNSwgOTcsIDExMzcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMTAsIDAsIDAsIDAsIDEzMTYsIDAsIDAsIDAsIDAsIDExMDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzQzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzQ4LCAwLCAwLCAxMzE3LCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMTIsIDk3LCA0NSwgMTgwNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxODY4LCA2NywgMTg3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxODE3LCA2NywgNjcsIDE4MTksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgyMywgNjcsIDM3Njg5LCA1NDQsIDY3LCA5NywgMTgzMiwgOTcsIDk3LCAxODM0LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAwLCAxNzMyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODUwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTc3LCAwLCAwLCA5MjUsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAxOTQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCAxOTkxLCAxOTkyLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk5OCwgMTM0LCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgNDUsIDQ1LCA5NDEsIDQ1LCA0NSwgOTQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTIsIDQ1LCA0NSwgMjA3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIyNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODIwLCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgMzY5LCA2NTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2ODIsIDI1NDAzLCA1NDYsIDcwMTc5LCAwLCAwLCA2NjM2NSwgNjYzNjUsIDU1MiwgODM1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUyMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzI1LCA2NywgNjcsIDY3LCAxNjk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDM0LCA2NywgMTAzNiwgNjcsIDY3LCA2NywgMjY1LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDk3LCA5NywgOTcsIDI5NiwgOTcsIDk3LCA5NywgOTcsIDMxNCwgOTcsIDk3LCA5NywgOTcsIDMzMiwgMzM0LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNDYsIDExNDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzNDUsIDk3LCA5NywgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMTM5NjIxLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDM2NywgNDEwOTgsIDM2OSwgMTQwLCA0NSwgMzcyLCA0NSwgNDUsIDQ1LCAxMjIwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjEzLCA0NSwgNDUsIDQ1LCA0NSwgNDA0LCA0MDYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzQsIDQ1LCA0NSwgNDUsIDQ0MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NTEsIDQ1MiwgNDUsIDQ1LCA0NSwgNjcsIDE2ODMsIDY3LCA2NywgNjcsIDE2ODYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgNjcsIDY3LCA2NywgNjcsIDQ5MCwgNDkyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDcsIDY3LCA2NywgMTQ1MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTM3LCA1MzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNTA2LCA2NywgNjcsIDUwOCwgNjcsIDY3LCA1MTEsIDY3LCA2NywgNjcsIDY3LCAwLCAxNDc2LCAwLCAwLCAwLCAwLCAwLCAxNDc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDE0ODQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0OTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU4NywgNTg5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjM0LCA2MzUsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE2MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI4LCA5NywgOTcsIDk3LCA5NywgMzY5LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY1NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5OTksIDQ1LCAxMDAxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcxNSwgNDUsIDQ1LCA0NSwgNzIwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyOCwgMjU0MDMsIDU0NiwgNzAxNzksIDAsIDAsIDY2MzY1LCA2NjM2NSwgNTUyLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDg0MCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTc0LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkzOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjgwLCA0NSwgOTY4LCA0NSwgOTcwLCA0NSwgOTczLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTYyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTAwNywgMTAwOCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDE0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAzOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0NCwgNjcsIDEwNDYsIDY3LCAxMDQ5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwOCwgNjcsIDY3LCAwLCAwLCAwLCAxMTAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzOCwgOTcsIDExNDAsIDk3LCAxMTQzLCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NjksIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDExOTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTkxLCA0NSwgNjcsIDY3LCA2NywgMTI1NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0OCwgNjcsIDY3LCA2NywgOTcsIDEzMzYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjE1LCA5NywgMTM4NiwgNDUsIDEzODcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NTUsIDQ1LCA0NTcsIDQ1LCA0NSwgMTQyNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTQzMywgNjcsIDE0MzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNzY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1OTEsIDY3LCAxNTkzLCA2NywgNjcsIDQ1LCA0NSwgMTgwNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgxNCwgNDUsIDQ1LCAxODE2LCA2NywgNjcsIDY3LCA2NywgMTgyMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA4MTUsIDY3LCA2NywgNjcsIDY3LCA4MjEsIDY3LCA2NywgNjcsIDM3Njg5LCA1NDQsIDY3LCAxODMxLCA5NywgOTcsIDk3LCA5NywgMTgzNSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAxNzMxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCAxODUwLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjY0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk2MSwgNDUsIDQ1LCA0NSwgNDUsIDk2NSwgNDUsIDk2NywgMTkwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTIwLCAwLCAxOTM2LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjczLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDI4NjcyLCA5NywgNDUsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDIwNTQsIDk3LCA5NywgMjkxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEyMjg4LCAwLCA5MjUsIDkyNiwgMTE3OSwgMCwgNDUsIDM3NywgNDUsIDQ1LCA0NSwgMzgxLCA0NSwgNDUsIDM5MiwgNDUsIDQ1LCAzOTYsIDQ1LCA0NSwgNDUsIDQ1LCA5NzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NTYsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA0NjMsIDY3LCA2NywgNjcsIDQ2NywgNjcsIDY3LCA0NzgsIDY3LCA2NywgNDgyLCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjksIDY3LCA2NywgMTQ3MiwgNjcsIDUwMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDYwLCA2NywgOTcsIDk3LCA5NywgOTcsIDU2MCwgOTcsIDk3LCA5NywgNTY0LCA5NywgOTcsIDU3NSwgOTcsIDk3LCA1NzksIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDkyNSwgMCwgMCwgOTMwLCA5NywgNTk5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg3MiwgOTcsIDQ1LCA2NjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NTgsIDAsIDM2MiwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA5MzQsIDQ1LCA0NSwgNDUsIDE2NCwgMTY4LCAxNzQsIDE3OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTQsIDQ1LCA0NSwgNDUsIDE2NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk5LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDEwMTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTIsIDEwNTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDYzLCA5NywgMTE1NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzc5LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgMTM4MywgNDUsIDQ1LCA0NSwgMTgwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgxMiwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI2MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ3MSwgNjcsIDQ1LCAxNDAyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxNywgNDUsIDY3LCAxNDYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCA1NDQsIDk3LCAxNTE3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjgsIDk3LCA5NywgOTcsIDk3LCAxNjM2LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgMTcwNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTg0MiwgMCwgMCwgMTc3OSwgOTcsIDk3LCA5NywgMTc4MiwgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDE3ODksIDk3LCA5NywgMCwgMCwgMCwgOTcsIDE4NDcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjc1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDczNywgNzM4LCA2NywgNzQwLCA2NywgNzQxLCA2NywgNzQzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTY4LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMjA2MiwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgNjcsIDk3LCA5NywgMjAwMSwgOTcsIDAsIDAsIDIwMDQsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDE3OTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNjcsIDI2MSwgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgOTcsIDk3LCAyOTIsIDk3LCA5NywgOTcsIDk3LCAzMTEsIDMxNSwgMzIxLCAzMjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzMwLCA5NywgOTcsIDEzMzMsIDEzMzQsIDk3LCAzNDEsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMCwgMCwgMzYzLCAzNjQsIDAsIDM2NywgNDEwOTgsIDM2OSwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgMTIyMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTMsIDQ1LCA0NSwgNDE2LCA0NSwgMzc2LCA0NSwgNDUsIDQ1LCA0NSwgMzgyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTQsIDQ1LCA0NSwgNDUsIDQxOCwgNjcsIDY3LCA2NywgNDYyLCA2NywgNjcsIDY3LCA2NywgNDY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2MDIsIDY3LCAxNjA0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ4OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUwMCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI3NCwgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDY3LCA2NywgNTA0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTEwLCA2NywgNjcsIDY3LCA1MTcsIDUxOSwgNTQxLCA2NywgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDcwMTc5LCAwLCAwLCAwLCA2NTgyMCwgNjU4MjAsIDM2OSwgMjg3LCA1NTQsIDk3LCA5NywgOTcsIDU1OSwgOTcsIDk3LCA5NywgOTcsIDU2NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MTgsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4OTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwNiwgOTcsIDk3LCA5NywgOTcsIDU4NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDE2NTYsIDQ1LCA0NSwgNDUsIDk3LCA5NywgNjAxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA3LCA5NywgOTcsIDk3LCA2MTQsIDYxNiwgNjM4LCA5NywgMTgsIDAsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAzNjcsIDQxNjA2LCAzNjksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NjEsIDQ1LCA0NSwgNDUsIDQwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MTUsIDQ1LCA2NywgNDUsIDY2NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3OCwgNDUsIDQ1LCA0NSwgNDIxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzYsIDk3NywgNDUsIDQ1LCA0NSwgNjgyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjkzLCA0NSwgNDUsIDY5NywgNjcsIDY3LCA3NDgsIDY3LCA2NywgNjcsIDY3LCA3NTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzY1LCA2NywgNjcsIDY3LCA2NywgNzY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4MCwgNjcsIDY3LCA3ODQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg0NiwgOTcsIDk3LCA5NywgOTcsIDg1MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzQ3LCA5NywgOTcsIDk3LCA4NjMsIDk3LCA5NywgOTcsIDk3LCA4NjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMjI4OCwgMTE3OCwgOTI1LCAwLCAxMTc5LCAwLCA5NywgOTcsIDk3LCA4NzgsIDk3LCA5NywgODgyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTIyODgsIDAsIDkyNSwgMCwgMTE3OSwgMCwgOTA4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDkyNSwgMCwgMCwgMCwgOTU0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTYzLCA0NSwgNDUsIDk2NiwgNDUsIDQ1LCAxNTcsIDQ1LCA0NSwgMTcxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTQ4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEwMjIsIDY3LCA2NywgMTAyNiwgNjcsIDY3LCA2NywgMTAzMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYwMywgMTYwNSwgNjcsIDY3LCA2NywgMTYwOCwgNjcsIDY3LCA2NywgMTAzOSwgNjcsIDY3LCAxMDQyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDcxLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDExMDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDQsIDk3LCA5NywgOTcsIDk3LCAxMTE2LCA5NywgOTcsIDExMjAsIDk3LCA5NywgOTcsIDExMjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2MiwgOTcsIDk3LCA5NywgNTcxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTMzLCA5NywgOTcsIDExMzYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTE1LCA5MTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDExNzAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTI1LCAwLCAwLCAwLCAwLCAwLCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk5MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzUsIDY3LCA2NywgNjcsIDEyNzgsIDY3LCAwLCAwLCAwLCA0NSwgNDUsIDExODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODksIDEyMDQsIDQ1LCA0NSwgNDUsIDEyMDcsIDQ1LCA0NSwgMTIwOSwgNDUsIDEyMTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY4OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIzNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwMSwgNjcsIDY3LCA2NywgODA1LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUwNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEzMDAsIDAsIDAsIDAsIDAsIDAsIDEyNjcsIDY3LCA2NywgMTI2OSwgNjcsIDEyNzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODAsIDk3LCAxMzQ5LCA5NywgMTM1MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2MCwgOTcsIDk3LCA5NywgMCwgMTk4MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzMsIDQ1LCA0NSwgNDUsIDQ1LCA2NzcsIDQ1LCA0NSwgNDUsIDQ1LCAxNDAxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTMsIDY3LCAxNDM3LCA2NywgMTQ0MCwgNjcsIDY3LCA2NywgNjcsIDE0NDUsIDY3LCA2NywgNjcsIDE0NDgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODI1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NzMsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMjAsIDAsIDgzNCwgOTcsIDk3LCA5NywgOTcsIDE0OTAsIDk3LCAxNDkzLCA5NywgOTcsIDk3LCA5NywgMTQ5OCwgOTcsIDk3LCA5NywgMTUwMSwgOTcsIDk3LCA5NywgMCwgOTcsIDE2MzgsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTUyOCwgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgMTUzNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAxOTMyLCAwLCAwLCAxNTU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2NywgNDUsIDQ1LCAxNTgsIDQ1LCA0NSwgMTcyLCA0NSwgNDUsIDQ1LCAxODMsIDQ1LCA0NSwgNDUsIDQ1LCAyMDEsIDQ1LCA0NSwgNjcsIDIxMiwgNjcsIDY3LCA2NywgNjcsIDIzMSwgMjM1LCAyNDEsIDI0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDkzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAxNjUxLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM5LCA0NSwgNDUsIDQ1LCA2NywgMTcwNCwgNjcsIDE3MDYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAxODQxLCA5NywgMCwgMTg0NCwgOTcsIDk3LCA5NywgOTcsIDE3MTYsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDEzODUsIDE3NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzU3LCA0NSwgNDUsIDE1OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxNSwgNDUsIDQ1LCA5NywgOTcsIDE3ODAsIDk3LCA5NywgOTcsIDAsIDAsIDE3ODYsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAxNzMwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MzYsIDk3LCAxNzM4LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTgzOCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgMTcyOSwgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE2MiwgOTcsIDk3LCA5NywgMTE2NSwgOTcsIDk3LCA5NywgNDUsIDE5NTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk1OCwgNjcsIDY3LCA2NywgMTk2MiwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjQ2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAxNzEwLCA5NywgOTcsIDk3LCAxOTk5LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDIwMDMsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgMjAwOCwgMjAwOSwgNDUsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDIwNTIsIDY3LCAyMDUzLCAwLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCAwLCA5MzAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTIsIDQ1LCAxMzk0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NjMsIDE1NjUsIDQ1LCA0NSwgNDUsIDE1NjgsIDAsIDk3LCAyMDU1LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDI4NjcyLCA5NywgNDUsIDQ1LCAxNjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzksIDQ1LCA0NSwgNjcsIDY3LCAyNjYsIDY3LCA2NywgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgOTcsIDM0NiwgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAxMzk2MjEsIDAsIDAsIDM2MiwgMCwgMzY0LCAwLCAzNjcsIDQxMDk4LCAzNjksIDE0MCwgMzcxLCA0NSwgNDUsIDQ1LCAzNzksIDQ1LCA0NSwgNDUsIDM4OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjYzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA1NDIsIDM3MTM5LCAzNzEzOSwgMjQ4NTMsIDI0ODUzLCAwLCA3MDE3OSwgMCwgMCwgMCwgNjU4MjAsIDY1ODIwLCAzNjksIDI4NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyOSwgOTcsIDk3LCAwLCAxNzk0LCAxNzk1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NDUsIDQ1LCA0NSwgOTcsIDYzOSwgMTgsIDAsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAzNjcsIDQxNjA2LCA0NSwgNzMxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNzk4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDczLCA2NywgNjcsIDY3LCA4NjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODczLCAwLCAwLCAxMTAxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTIxLCA5NywgMCwgNjcsIDY3LCA2NywgNjcsIDEyNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNTAsIDY3LCA2NywgMTI1MywgMCwgMCwgMTMxMiwgMCwgMCwgMCwgMTMxOCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDExMDYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNDksIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1NSwgOTcsIDk3LCAxMzI1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0MSwgOTcsIDk3LCA2NywgNjcsIDE0MzksIDY3LCAxNDQxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjY0LCA2NywgNjcsIDY3LCA5NywgOTcsIDE0OTIsIDk3LCAxNDk0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzEsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCAyMDM3LCA2NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDIwNDMsIDk3LCA0NSwgNDUsIDQ1LCA0NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjMyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDE5NzUsIDAsIDAsIDk3LCA4NzQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNDIsIDk3LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA2NSwgODYsIDExNywgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNjMsIDg0LCAxMTUsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDYxLCA4MiwgMTEzLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1OSwgODAsIDExMSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNTcsIDc4LCAxMDksIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDU1LCA3NiwgMTA3LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1MywgNzQsIDEwNSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNTEsIDcyLCAxMDMsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDQ5LCA3MCwgMTAxLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA0NywgNjgsIDk5LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA0NSwgNjcsIDk3LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDIxMzA4NSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAwLCAwLCA0NCwgMCwgMCwgMzI4NjMsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgNDEsIDQxLCA0MSwgMCwgMCwgMTEzODY4OCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDg5LCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDAsIDEyNywgMTI3LCAxMjcsIDEyNywgMTAyNDMyLCA2NywgMjYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCAzNDIsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMzYwLCAwLCAwLCAzNjQsIDAsIDM2NywgNDEwOTgsIDM2OSwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgNzE3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTAwOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTIsIDY3LCA2NywgMTI5NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDE2MTUsIDk3LCA5NywgOTcsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDY2LCA4NywgMTE4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA2NCwgODUsIDExNiwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNjIsIDgzLCAxMTQsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDYwLCA4MSwgMTEyLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1OCwgNzksIDExMCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNTYsIDc3LCAxMDgsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDU0LCA3NSwgMTA2LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1MiwgNzMsIDEwNCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNTAsIDcxLCAxMDIsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDQ4LCA2OSwgMTAwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA0NiwgNjcsIDk4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDIzMzQ3MiwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCA2OTcyNCwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAyNjIxNDQsIDI0LCAyNCwgMjQsIDAsIDI4LCAyOCwgMjgsIDI4LCAxMDI0MzIsIDQ1LCA0NSwgMTYxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzEwLCA0NSwgNDUsIDI4LCAxMzk2MjEsIDM1OSwgMCwgMCwgMCwgMzY0LCAwLCAzNjcsIDQxMDk4LCAzNjksIDE0MCwgNDUsIDQ1LCA0NSwgNDUsIDEzODksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTQ5LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDUwMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQ5LCA2NywgNjcsIDk3LCA2MDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1NCwgOTcsIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDkyNywgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA0NSwgNDUsIDk2OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk1MSwgNDUsIDQ1LCA0NSwgNDUsIDExOTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjAyLCA0NSwgNDUsIDAsIDAsIDAsIDEzMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDg4LCA2NywgNjcsIDI2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgMzQ3LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMzYxLCAwLCAwLCAzNjQsIDAsIDM2NywgNDEwOTgsIDM2OSwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgNzM0LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDc0MiwgNjcsIDY3LCA0NSwgNDUsIDY2OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTQsIDQ1LCA0NSwgMTEzMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2MSwgOTcsIDQ1LCA0NSwgMTY3MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NTIsIDQ1LCA0NSwgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMCwgMCwgMTEzMDQ5NiwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MTAyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMTgsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgOTAxMTIsIDAsIDIyMjAwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDE0ODUsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5MCwgNDUsIDEzOTMsIDQ1LCA0NSwgNDUsIDQ1LCAxMzk4LCA0NSwgNDUsIDQ1LCAyMTcwODgwLCAyMTcxMTY3LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTc2Mzg0LCAyMjE1OTM2LCAzMTE3MDU2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc0OTc2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTgzMTY4LCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDAwMjU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNzIxMjUyLCAyNzQ0MzIwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyODM0NDMyLCAyODQwMDQwLCAyMTcwODgwLCAyOTA4MTYwLCAyMTcwODgwLCAyMTcwODgwLCAyOTM2ODMyLCAyMTcwODgwLCAyMTcwODgwLCAyOTg1OTg0LCAyMTcwODgwLCAyOTk0MTc2LCAyMTcwODgwLCAyMTcwODgwLCAzMDE0NjU2LCAyMTcwODgwLCAzMDU5NzEyLCAzMDc2MDk2LCAzMDg4Mzg0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCAwLCAxMTQyNzg0LCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMjE1MzYwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDM3MTIwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTE3MDU2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCA1NDMsIDAsIDU0NSwgMCwgMCwgMjE4MzE2OCwgMCwgMCwgODMxLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDAwMjU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDMxMDQwLCAyMTcwODgwLCAzMDU1NjE2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDkyNDgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTI1MjQ4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTk4OTc2LCAyMTcwODgwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NywgNjcsIDM3MTM5LCAzNzEzOSwgMjQ4NTMsIDI0ODUzLCAwLCAwLCAwLCAwLCAwLCA2NTgyMCwgNjU4MjAsIDAsIDI4NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzgzLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzkxLCAwLCAwLCA1NDYsIDcwMTc5LCAwLCAwLCAwLCAwLCA1NTIsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MDQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTUwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDAsIDAsIDE0NzQ1NiwgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgOTI4LCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5OTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NjIsIDQ1LCAxNTY0LCA0NSwgNDUsIDQ1LCA0NSwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMCwgMCwgMCwgMjIzMjMyMCwgMjIzMjMyMCwgMjIzMjMyMCwgMCwgMjI0MDUxMiwgMjI0MDUxMiwgMjI0MDUxMiwgMjI0MDUxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MApdOwoKSlNPTmlxVG9rZW5pemVyLkVYUEVDVEVEID0KWyAyOTEsIDMwMCwgMzA0LCAzNDEsIDMxNSwgMzA5LCAzMDUsIDI5NSwgMzE5LCAzMjMsIDMyNywgMzI5LCAyOTYsIDMzMywgMzM3LCAzMzksIDM0MiwgMzQ2LCAzNTAsIDI5NCwgMzU2LCAzNjAsIDMxMiwgMzY3LCAzNTIsIDM3MSwgMzYzLCAzNzUsIDM3OSwgMzgzLCAzODcsIDM5MSwgMzk1LCA3MjYsIDM5OSwgNDA1LCA1MTgsIDY4NCwgNDA1LCA0MDUsIDQwNSwgNDA1LCA4MDgsIDQwNSwgNDA1LCA0MDUsIDUxMiwgNDA1LCA0MDUsIDQwNSwgNDMxLCA0MDUsIDQwNSwgNDA2LCA0MDUsIDQwNSwgNDA0LCA0MDUsIDQwNSwgNDA1LCA0MDUsIDQwNSwgNDA1LCA0MDUsIDkwOCwgNjMxLCA0MTAsIDQxNSwgNDA1LCA0MTQsIDQxOSwgNjA4LCA0MDUsIDQyOSwgNjAyLCA0MDUsIDQzNSwgNDQzLCA0MDUsIDQ0MSwgNjQxLCA0NzgsIDQwNSwgNDQ3LCA0NTEsIDQ1MCwgNDU2LCA2NDMsIDQ2MSwgNDYwLCA3NjIsIDY3OSwgNDY1LCA0NjksIDc0MSwgNDczLCA0NzcsIDQ4MiwgNDg2LCA0OTIsIDkzMiwgOTMxLCA1MjMsIDQ5OCwgNTA0LCA3MjAsIDQwNSwgNTEwLCA1OTYsIDQwNSwgNTE2LCA5NDEsIDU4MCwgNTIyLCA5MjksIDUyNywgNTkwLCA1ODksIDg5NywgOTM5LCA1MzQsIDUzOCwgNTQ3LCA1NTEsIDU1NSwgNTU5LCA1NjMsIDU2NywgNTcxLCA5NjksIDU3NSwgNzA4LCA2OTAsIDY4OSwgNTc5LCA1ODQsIDYzNCwgNDA1LCA1OTQsIDczMSwgNDA1LCA2MDAsIDg4MiwgNDA1LCA2MDYsIDg5NSwgNzg2LCA0NTIsIDYxMiwgNDA1LCA2MTUsIDYyMCwgODc2LCA2MjQsIDYyOCwgNjM4LCA2NDcsIDY1MSwgNjU1LCA2NTksIDY2MywgNjY3LCA2NzYsIDY4MywgNjg4LCA2OTUsIDY5NCwgNzkxLCA0MDUsIDY5OSwgNDM3LCA0MDUsIDcwNiwgNzE0LCA0MDUsIDcxMiwgODI1LCA4NzAsIDQwNSwgNzE4LCA3MjQsIDc2OSwgNzY4LCA4MjMsIDczMCwgNzM1LCA3NDUsIDc1MSwgNDIyLCA3NTUsIDc1OSwgNDI1LCA3NjYsIDkwMiwgODEwLCA1ODcsIDc3NSwgODg4LCA4ODcsIDQwNSwgNzczLCA5OTIsIDQwNSwgNzc5LCA5NjIsIDQwNSwgNzg1LCA3ODEsIDk4NiwgNzkwLCA3OTUsIDc5NywgNTA2LCA1MDAsIDQ5OSwgODAxLCA4MDUsIDgxNCwgODIwLCA4MjksIDgzMywgODM3LCA4NDEsIDg0NSwgODQ5LCA4NTMsIDg1NywgODYxLCA2MTYsIDg2NSwgODY5LCA4NjgsIDQ4OCwgNDA1LCA4NzQsIDgxNiwgNDA1LCA4ODAsIDczOCwgNDA1LCA4ODYsIDg5MiwgNTQzLCA0MDUsIDkwMSwgOTA2LCA5MTMsIDkxMiwgOTE4LCA0OTQsIDU0MSwgOTIyLCA5MjYsIDkzNiwgOTQ1LCA5NDksIDk1MywgOTU3LCA1MzAsIDk2NiwgOTczLCA5NjAsIDcwMiwgNzAxLCA0MDUsIDk3OSwgOTgxLCA0MDUsIDk4NSwgNzQ3LCA0MDUsIDk5MCwgOTk4LCA5MTQsIDQwNSwgOTk2LCAxMDA0LCA2NzIsIDk3NSwgOTc0LCAxMDE0LCAxMDAyLCAxMDA4LCA2NzAsIDEwMTIsIDQwNSwgNDA1LCA0MDUsIDQwNSwgNDA1LCA0MDEsIDEwMTgsIDEwMjIsIDEwMjYsIDExMDYsIDEwNzEsIDExMTEsIDExMTEsIDExMTEsIDEwODIsIDExNDUsIDEwMzAsIDExMDEsIDEwMzQsIDEwMzgsIDExMDYsIDExMDYsIDExMDYsIDExMDYsIDEwNDYsIDEyMDYsIDEwNTIsIDExMDYsIDEwNzIsIDExMTEsIDExMTEsIDEwNDIsIDExMzQsIDEwNjUsIDExMTEsIDExMTIsIDEwNTYsIDExNjAsIDEyMDcsIDEwNjIsIDEyMDQsIDEyMDgsIDEwNjksIDExMDYsIDExMDYsIDExMDYsIDEwNzYsIDExMTEsIDEyMDcsIDExNjEsIDExMjIsIDEyMDUsIDEwNjQsIDEwOTQsIDExMDYsIDExMDYsIDExMDcsIDExMTEsIDExMTEsIDExMTEsIDEwNzgsIDEwODYsIDEyMDcsIDEwOTIsIDEwOTgsIDEwNDYsIDEwNTgsIDExMDYsIDExMDYsIDExMTAsIDExMTEsIDExMTEsIDExMTYsIDExMjAsIDExNjEsIDExMjYsIDEyMDIsIDExMDQsIDExMDYsIDExNDUsIDExNDYsIDExMjksIDExMzgsIDEwODgsIDExNTEsIDEwNDgsIDExNTcsIDExNTMsIDExMzIsIDExNDEsIDExNjUsIDExMDcsIDExMTEsIDExNzIsIDExNzksIDExMDksIDExODMsIDExNzUsIDExNDMsIDExNDcsIDExODcsIDExMDgsIDExOTEsIDExOTUsIDExNDQsIDExOTksIDExNjgsIDEyMTIsIDEyMTYsIDEyMjAsIDEyMjQsIDEyMjgsIDEyMzIsIDEyMzYsIDE1NTcsIDEyNDcsIDEyNDEsIDEyNDEsIDEwMzgsIDE0MzQsIDEyNDEsIDEyNDEsIDEyNDEsIDEyNDEsIDEyNTQsIDEyNzUsIDE2MTcsIDEyNDEsIDEyODAsIDEyODcsIDEyNDEsIDEyNDEsIDEyNDEsIDEyODcsIDEyNDEsIDIxMTQsIDEyOTEsIDEyNDEsIDEyNDMsIDEyNDEsIDIwNDksIDE4MjQsIDIwOTQsIDIwOTUsIDE1MjAsIDEzMDksIDEyNDEsIDEyNDEsIDEzMDIsIDEyNDEsIDEzMjEsIDEzMTEsIDEyNDEsIDEyNDEsIDEzMTMsIDE3NzgsIDEzMjUsIDEzMzYsIDEyNDEsIDEyNDEsIDEzMjUsIDEzMzAsIDEzNTMsIDEyNDEsIDEyNDEsIDE2OTUsIDEzNTQsIDEyNDEsIDEyNDEsIDEyNDEsIDEyOTQsIDE2ODYsIDEzMzEsIDEyNDEsIDE2OTYsIDEzNjgsIDEyNDEsIDEzMzgsIDEzNzAsIDEyNDEsIDEzOTIsIDEzOTksIDEzNjQsIDIwMTcsIDE0MDYsIDIwMTYsIDE0MDUsIDE3MTYsIDE0MDYsIDE0MDcsIDE0MjIsIDE0MTcsIDE0MjEsIDEyNDEsIDEyNDEsIDEyNDEsIDEzNDksIDE0MjYsIDEyNDEsIDE3NzQsIDE3NTYsIDEyNDEsIDE3NzMsIDEyNDEsIDEyNDEsIDEzNDUsIDE5NjQsIDE4MTIsIDE0MzIsIDEyNDEsIDEyNDEsIDEzNDUsIDE5OTMsIDE0NTksIDEyNDEsIDEyNDEsIDEyNDEsIDEzOTUsIDE4NDgsIDE3NjcsIDE0NjUsIDEyNDEsIDEyNDEsIDEzOTQsIDE4NDcsIDEyNDIsIDE0NzcsIDEyNDEsIDEyNDEsIDE0MjgsIDEyNDEsIDE0NDUsIDE0OTIsIDEyNDEsIDEyNDEsIDE0MzgsIDEyNDEsIDE0OTksIDEyNDEsIDEyNDEsIDEyNDEsIDE0NTUsIDEyNDEsIDE4MTgsIDE0NDgsIDEyNDEsIDEyNTAsIDEyNDEsIDIwMjYsIDE2MjMsIDE0NDksIDEyNDEsIDE2MTIsIDE2MTYsIDEyNDEsIDE2MTQsIDEyNDEsIDEyNTcsIDEyNDEsIDEyNDEsIDE5ODUsIDEyOTIsIDE1ODYsIDE1MTIsIDEyNDEsIDE1MTcsIDIwNTAsIDE1MjYsIDE2NzQsIDE1MTksIDE1MjQsIDE2NDcsIDIwNTEsIDE1MzIsIDE1MzcsIDE1NTEsIDE1NDQsIDE1NTAsIDE1NTUsIDE1NjEsIDE1NzEsIDE1NzgsIDE1ODQsIDE1OTAsIDE1OTEsIDE2NTMsIDE1OTUsIDE2MDIsIDE2MDYsIDE2MTAsIDE2MzQsIDE2MjgsIDE2NDAsIDE2MzMsIDE2NDUsIDEyNDEsIDEyNDEsIDEyNDEsIDE0NjksIDEyNDEsIDE5NzAsIDE2NTEsIDEyNDEsIDEyNzAsIDEyNDEsIDEyNDEsIDE4MTksIDE0NDksIDEyNDEsIDEyOTMsIDE2NjQsIDEyNDEsIDEyNDEsIDE0ODEsIDE0ODUsIDE1NzQsIDE2NzIsIDEyNDEsIDEyNDEsIDE1MTMsIDEzMTcsIDE0ODcsIDE2ODQsIDEyNDEsIDEyNDEsIDE1MzMsIDEyOTksIDE2OTQsIDEyNDEsIDEyNDEsIDEyOTUsIDEyNDEsIDEyNDEsIDEyNDEsIDE1NDYsIDE3MDAsIDEyNDEsIDEyNDEsIDE3MDcsIDEyNDEsIDE3MTMsIDEyNDEsIDE4NDksIDE3MTUsIDEyNDEsIDE3MjAsIDEyNDEsIDEyNzYsIDEyNjcsIDEyNDEsIDEyNDEsIDIxMDcsIDE2NTcsIDE4NjQsIDEyNDEsIDE4ODEsIDEyNDEsIDEzMjYsIDEyOTIsIDEyNDEsIDE2ODUsIDEzNTgsIDE3MjQsIDEzMzgsIDEyNDEsIDEzNjMsIDEzNjIsIDEzNDIsIDEzNDAsIDEzNjEsIDEzMzksIDE4MzMsIDEzNzIsIDEzNjAsIDE4MzMsIDE4MzMsIDEzNDIsIDEzNDMsIDE4MzUsIDEzNDEsIDE3MzEsIDE3MzgsIDEzNDQsIDEyNDEsIDE3NDUsIDEyNDEsIDEzNzksIDEyNDEsIDEyNDEsIDIwOTIsIDEyNDEsIDEzODgsIDE3NjEsIDE3NTQsIDEyNDEsIDEzODYsIDEyNDEsIDE0MDAsIDE3NjAsIDEyNDEsIDEyNDEsIDEyNDEsIDE1OTgsIDE3MzQsIDEyNDEsIDEyNDEsIDEyNDEsIDE2MzUsIDE2NDUsIDEyNDEsIDE3ODAsIDE3NjYsIDEyNDEsIDEyNDEsIDEzMzIsIDE3NzEsIDEyNDEsIDEyNDEsIDE2MjksIDIwNzksIDEyNDEsIDEyNDIsIDE3ODQsIDEyNDEsIDEyNDEsIDE2ODAsIDE2MzksIDIwNjMsIDE3OTAsIDEyNDEsIDEyNDEsIDE3NDEsIDEyNDEsIDEyNDEsIDE4MDAsIDEyNDEsIDEyNDEsIDE3NjIsIDE0NzMsIDEyNDEsIDE4MDYsIDEyNDEsIDEyNDEsIDE3ODYsIDEyNDAsIDE3MDksIDEyNDEsIDEyNDEsIDEyNDEsIDE2NjgsIDE4MTEsIDEyNDEsIDE5NDAsIDEyNDEsIDE0MDEsIDE5NzQsIDEyNDEsIDE0MDgsIDE0MTMsIDEzODIsIDEyNDEsIDE4MTYsIDEyNDEsIDEyNDEsIDE4MDIsIDIwODYsIDE4MTEsIDEyNDEsIDE4MTcsIDE5NDUsIDE4MjMsIDIwOTUsIDIwOTUsIDIwNDcsIDIwOTQsIDIwNDYsIDIwODAsIDEyNDEsIDE0MDksIDEzMTIsIDEzNzYsIDIwOTYsIDIwNDgsIDEyNDEsIDEyNDEsIDE4MDcsIDEyNDEsIDEyNDEsIDEyNDEsIDIwMzUsIDEyNDEsIDEyNDEsIDE4MjgsIDEyNDEsIDIwNTcsIDIwNjEsIDEyNDEsIDEyNDEsIDE4NDMsIDEyNDEsIDIwNTksIDEyNDEsIDEyNDEsIDEyNDEsIDE2OTAsIDE4NDcsIDEyNDEsIDEyNDEsIDEyNDEsIDE3MDMsIDIxMDIsIDE4NDgsIDEyNDEsIDEyNDEsIDE4NTMsIDEyOTIsIDE4NDgsIDEyNDEsIDIwMTYsIDE4NTcsIDEyNDEsIDIwMDIsIDE4NjgsIDEyNDEsIDE0MzYsIDEyNDEsIDEyNDEsIDEyNzEsIDEzMDUsIDEyNDEsIDE4NzQsIDEyNDEsIDEyNDEsIDE4ODQsIDIwMzcsIDE4OTIsIDEyNDEsIDE4OTAsIDEyNDEsIDE0NjEsIDEyNDEsIDEyNDEsIDE3OTUsIDEyNDEsIDEyNDEsIDE4OTEsIDEyNDEsIDE4NzgsIDEyNDEsIDE4ODgsIDEyNDEsIDE4ODgsIDE5MDUsIDE4OTYsIDIwODcsIDE5MTIsIDE5MDMsIDEyNDEsIDE5MTEsIDE5MDYsIDE5MTYsIDE5MDUsIDIwMjcsIDE4NjMsIDE5MjUsIDIwODgsIDE4NTksIDE4NjEsIDE5MjIsIDE5MjcsIDE5MzEsIDE5MzUsIDE0OTQsIDEyNDEsIDEyNDEsIDE5MTgsIDE5MDcsIDE5MzksIDE5MTcsIDE5NDQsIDE5NDksIDEyNDEsIDEyNDEsIDE0NTEsIDE5NTUsIDEyNDEsIDEyNDEsIDEyNDEsIDE3OTYsIDE3MjcsIDIwNjEsIDEyNDEsIDEyNDEsIDE4OTksIDEyNDEsIDE2NjAsIDE5NjgsIDEyNDEsIDEyNDEsIDE5NTEsIDE2NzgsIDE5NzgsIDEyNDEsIDEyNDEsIDEyNDEsIDE4MzksIDEyNDEsIDEyNDEsIDE5ODQsIDE5ODIsIDEyNDEsIDE0ODgsIDEyNDEsIDEyNDEsIDE2MjQsIDE0NTAsIDE5ODksIDEyNDEsIDEyNDEsIDEyNDEsIDE4NzAsIDE5OTUsIDEyOTIsIDEyNDEsIDEyNDEsIDE5NTgsIDEyNjEsIDEyNDEsIDE5OTYsIDEyNDEsIDEyNDEsIDEyNDEsIDIwMzksIDIwMDgsIDEyNDEsIDEyNDEsIDE3NTAsIDIwMDAsIDEyNDEsIDEyNTYsIDIwMDEsIDE5NjAsIDEyNDEsIDE1NjQsIDEyNDEsIDE1MDQsIDEyNDEsIDEyNDEsIDE0NDIsIDEyNDEsIDEyNDEsIDE1NjQsIDE1MjgsIDEyNjMsIDEyNDEsIDE1MDgsIDEyNDEsIDEyNDEsIDE0NjgsIDE0OTgsIDIwMDYsIDE1NDAsIDIwMTUsIDE1MzksIDIwMTQsIDE3NDgsIDIwMTMsIDE1MzksIDE4MzEsIDIwMTQsIDIwMTIsIDE1MDAsIDE1NjcsIDIwMjIsIDIwMjEsIDEyNDEsIDE1ODAsIDEyNDEsIDEyNDEsIDIwMzMsIDIwMzcsIDE3OTEsIDIwNDUsIDIwMzEsIDEyNDEsIDE2MjEsIDEyNDEsIDE2NDEsIDIwNDQsIDEyNDEsIDEyNDEsIDEyNDEsIDIwOTMsIDEyNDEsIDEyNDEsIDIwNTUsIDEyNDEsIDEyNDEsIDIwNjcsIDEyNDEsIDEyODMsIDEyNDEsIDEyNDEsIDEyNDEsIDIxMDEsIDIwNzEsIDEyNDEsIDEyNDEsIDEyNDEsIDIwNzMsIDE4NDgsIDIwNDAsIDEyNDEsIDEyNDEsIDEyNDEsIDIwNzcsIDEyNDEsIDEyNDEsIDIxMDYsIDEyNDEsIDEyNDEsIDIwODQsIDEyNDEsIDIxMTEsIDEyNDEsIDEyNDEsIDEzODEsIDEzODAsIDEyNDEsIDEyNDEsIDEyNDEsIDIxMDAsIDEyNDEsIDIxMjksIDIxMTgsIDIxMjIsIDIxMjYsIDIxOTcsIDIxMzMsIDMwMTAsIDI4MjUsIDIxNDUsIDI2OTgsIDIxNTYsIDIyMjYsIDIxNjAsIDIxNjEsIDIxNjUsIDIxNzQsIDIyOTMsIDIxOTQsIDI2MzAsIDIyMDEsIDIyMDMsIDIxNTIsIDMwMTksIDIyMjYsIDIyNjMsIDIyMDksIDIyMTMsIDIyMTgsIDIyNjksIDIyOTIsIDIyNjksIDIyNjksIDIxODQsIDIyMjYsIDIyMzgsIDIxNDgsIDIxNTEsIDMwMTcsIDIyNDUsIDIyMTQsIDIyNjksIDIyNjksIDIxODUsIDIyMjYsIDIyOTIsIDIyNjksIDIyOTEsIDIyNjksIDIyNjksIDIyNjksIDIyOTIsIDIyMDUsIDMwMTksIDIyMjYsIDIyMjYsIDIxNjAsIDIxNjAsIDIxNjAsIDIyNjEsIDIxNjAsIDIxNjAsIDIxNjAsIDIyNjIsIDIyNzYsIDIxNjAsIDIxNjAsIDIyNzcsIDIyMTYsIDIyODMsIDIyMTYsIDIyNjksIDIyNjksIDIyNjgsIDIyNjksIDIyNjcsIDIyNjksIDIyNjksIDIyNjksIDIyNzEsIDI1NjgsIDIyOTIsIDIyNjksIDIyOTMsIDIyNjksIDIxODIsIDIxOTAsIDIyNjksIDIxODYsIDIyMjYsIDIyMjYsIDIyMjYsIDIyMjYsIDIyMjcsIDIxNjAsIDIxNjAsIDIxNjAsIDIxNjAsIDIyNjMsIDIxNjAsIDIyNzUsIDIyNzcsIDIyODIsIDIyMTUsIDIyMTcsIDIyNjksIDIyNjksIDIyOTEsIDIyNjksIDIyNjksIDIyOTMsIDIyOTEsIDIyNjksIDIyMjAsIDIyNjksIDIyOTUsIDIyOTQsIDIyNjksIDIyNjksIDIzMDUsIDIyMzMsIDIyNjIsIDIyNzgsIDIyMTgsIDIyNjksIDIyMzQsIDIyMjYsIDIyMjYsIDIyMjgsIDIxNjAsIDIxNjAsIDIxNjAsIDIyODksIDIyMjAsIDIyOTQsIDIyOTQsIDIyNjksIDIyNjksIDIzMDQsIDIyNjksIDIxNjAsIDIxNjAsIDIyODcsIDIyNjksIDIyNjksIDIzMDUsIDIyNjksIDIyNjksIDIzMTIsIDIyNjksIDIyNjksIDIyMjUsIDIyMjYsIDIxNjAsIDIyODcsIDIyODksIDIyMTksIDIzMDQsIDIyOTUsIDIzMTQsIDIyMzQsIDIyMjYsIDIzMTQsIDIyNjksIDIyMjYsIDIyMjYsIDIxNjAsIDIyODgsIDIyMTksIDIyMjIsIDIzMDQsIDIyOTYsIDIyNjksIDIyMjQsIDIxNjAsIDIxNjAsIDIyNjksIDIzMDIsIDIyOTQsIDIzMTQsIDIyMjQsIDIyMjYsIDIyODgsIDIyMjAsIDIyOTQsIDIyNjksIDIyOTAsIDIyNjksIDIyNjksIDIyOTMsIDIyNjksIDIyNjksIDIyNjksIDIyNjksIDIyNzAsIDIyMjEsIDIzMTMsIDIyMjUsIDIyMjcsIDIxNjAsIDIzMDAsIDIyNjksIDIyMjUsIDIyNjEsIDIzMDksIDIyMzQsIDIyMjksIDIyMjMsIDIzMTgsIDIzMTgsIDIzMTgsIDIzMjgsIDIzMzYsIDIzNDAsIDIzNDQsIDIzNTAsIDI2MzcsIDI3MTIsIDIzNTgsIDIzNjIsIDIzNzIsIDIxMzUsIDIzNzgsIDIzOTgsIDIxMzUsIDIxMzUsIDIxMzUsIDIxMzUsIDIxMzYsIDI0MTcsIDIyNDEsIDIxMzUsIDIzNzgsIDIxMzUsIDIxMzUsIDI5ODAsIDI5ODQsIDIxMzUsIDMwMDYsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NDUsIDI5MzEsIDI0MjUsIDI0MDAsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NTQsIDIxMzUsIDI0ODEsIDI0MzMsIDIxMzUsIDIxMzUsIDI5ODgsIDI4MjQsIDIxMzUsIDIxMzUsIDI0ODIsIDI0MzQsIDIxMzUsIDIxMzUsIDI0NDAsIDI0NDUsIDI0NTIsIDIxMzUsIDIxMzUsIDI5OTgsIDMwMDIsIDI5NjEsIDI0NDEsIDI0NDYsIDI0NTMsIDI0NjMsIDI5NzQsIDIxMzUsIDIxMzUsIDIxMzUsIDIxNDAsIDI2NDIsIDI3MDksIDI0NTksIDI0NzAsIDI0NjUsIDIxMzUsIDIxMzUsIDMwMDUsIDIxMzUsIDIxMzUsIDI5ODcsIDI4MjMsIDI0NTgsIDI0NjksIDI0NjQsIDI5NzUsIDIxMzUsIDIxMzUsIDIxMzUsIDIzNTMsIDI0ODgsIDI0NDcsIDIzMjQsIDI5NzQsIDIxMzUsIDI0MDksIDI0NTksIDI0NDgsIDIxMzUsIDI5NjEsIDI0ODcsIDI0NDYsIDI0NzYsIDIzMjMsIDI5NzMsIDIxMzUsIDIxMzUsIDIxMzUsIDIzNTQsIDI0NzYsIDI5NzQsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NTcsIDIxMzUsIDIxMzUsIDI5NjAsIDIxMzUsIDIxMzUsIDIxMzUsIDIzNjMsIDI0MDksIDI0NTksIDI0NzQsIDI0NjUsIDI0ODcsIDI1NzEsIDI5NzMsIDIxMzUsIDIxMzUsIDIxNjgsIDI5NzMsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NTksIDIxMzUsIDIxMzUsIDIxMzUsIDI1MDYsIDIxMzUsIDI5NTcsIDI0ODgsIDIxNzAsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NjAsIDIxMzUsIDI4MTgsIDI0OTMsIDIxMzUsIDIxMzUsIDMwMzMsIDIxMzUsIDIxMzUsIDIxMzUsIDI5MzQsIDI4MTksIDI0OTQsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NzYsIDI3ODAsIDI0OTksIDIxMzUsIDIxMzUsIDIxMzUsIDMwMDAsIDI5NjgsIDIxMzUsIDI5MzUsIDIxMzUsIDIxMzUsIDIxMzUsIDIzNjQsIDI1MDcsIDIxMzUsIDIxMzUsIDI5MzQsIDIxMzUsIDIxMzUsIDI3ODAsIDI0OTIsIDI1MDcsIDIxMzUsIDIxMzUsIDI1MDYsIDI3ODAsIDIxMzUsIDIxMzUsIDI3ODIsIDI3ODAsIDIxMzUsIDI3ODIsIDIxMzUsIDI3ODMsIDIzNzQsIDI1MTQsIDIxMzUsIDIxMzUsIDIxMzUsIDMwMDcsIDI1MzAsIDI5NzQsIDIxMzUsIDIxMzUsIDIxMzUsIDMwMDgsIDIxMzUsIDIxMzUsIDIxMzQsIDIxMzUsIDI1MjYsIDI1MzEsIDI5NzUsIDIxMzUsIDIxMzUsIDMwNDIsIDI1ODEsIDI1NzUsIDI5NTYsIDIxMzUsIDIxMzUsIDIxMzUsIDIzOTQsIDIxMzUsIDI1MDgsIDI1MzUsIDI4NDAsIDI4NDQsIDI0OTUsIDIxMzUsIDIxMzUsIDIxMzYsIDI2ODQsIDI1MzcsIDI4NDIsIDI4NDYsIDIxMzUsIDIxMzYsIDI1NjEsIDI1ODEsIDI1NTEsIDI1MzYsIDI4NDEsIDI4NDUsIDI5NzUsIDMwNDMsIDI1ODIsIDI4NDMsIDI1NTUsIDIxMzUsIDMwNDAsIDMwNDQsIDI1MzgsIDI4NDQsIDI5NzUsIDIxMzUsIDIxMzUsIDIyNTMsIDI2NDQsIDI2NzIsIDI1NDIsIDI1NTQsIDIxMzUsIDIxMzUsIDIzNDYsIDI4NzMsIDI1NTEsIDI1NTUsIDIxMzUsIDIxMzUsIDIxMzUsIDIzODEsIDI1NTksIDI1NjUsIDI1MzgsIDI1NTMsIDIxMzUsIDI1NjAsIDI5MTQsIDI1NzYsIDI1OTAsIDIxMzUsIDIxMzUsIDIxMzUsIDI0MDgsIDIxMzYsIDI1OTYsIDI2MjQsIDIxMzUsIDIxMzUsIDIxMzUsIDI0MDksIDIxMzUsIDI2MTgsIDI1OTcsIDMwMDgsIDIxMzUsIDIxMzUsIDIzODAsIDI5NTYsIDI2MDEsIDIxMzUsIDIxMzUsIDIxMzUsIDI0MTAsIDI2MjAsIDI2MjQsIDIxMzUsIDIxMzYsIDIzODMsIDIxMzUsIDIxMzUsIDI3ODMsIDI2MjMsIDIxMzUsIDIxMzUsIDIzOTMsIDI4ODgsIDIxMzYsIDI2MjEsIDMwMDgsIDIxMzUsIDI2MTgsIDI2MTgsIDI2MjIsIDIxMzUsIDIxMzUsIDI0MDUsIDI0MTQsIDI2MTksIDIzODQsIDI2MjQsIDIxMzUsIDIxMzYsIDI5NTAsIDIxMzUsIDIxMzgsIDIxMzUsIDIxMzksIDIxMzUsIDI2MDQsIDI2MjMsIDIxMzUsIDIxNDAsIDI4NzgsIDI2NjUsIDI5NTcsIDI2MjIsIDIxMzUsIDIxMzUsIDI0MjgsIDI3NjIsIDI2MDYsIDI2MTIsIDIxMzUsIDIxMzUsIDI1MDEsIDI1ODYsIDI2MDQsIDMwMzgsIDIxMzUsIDI2MDQsIDMwMzYsIDIzODcsIDI5NTgsIDIzODYsIDIxMzUsIDIxNDEsIDIxMzUsIDI0MjEsIDIzODcsIDIzODUsIDIxMzUsIDIzODUsIDIzODQsIDIzODQsIDIxMzUsIDIzODYsIDI2MjgsIDIzODQsIDIxMzUsIDIxMzUsIDI1MDEsIDI1OTYsIDI1OTEsIDIxMzUsIDIxMzUsIDIxMzUsIDI0MDAsIDIxMzUsIDI2MzQsIDIxMzUsIDIxMzUsIDI1NTksIDI1ODAsIDI1NzUsIDI2NDgsIDIxMzUsIDIxMzUsIDIxMzUsIDI0MjksIDI2NDksIDIxMzUsIDIxMzUsIDIxMzUsIDI0MzUsIDI2NTQsIDI2NTgsIDIxMzUsIDIxMzUsIDIxMzUsIDI0MzYsIDI2NDksIDIxNzgsIDI2NTksIDIxMzUsIDIxMzUsIDI1OTUsIDI2MDEsIDI2NjksIDI2NzcsIDIxMzUsIDIxMzUsIDI2MTYsIDI5NTcsIDI4NzksIDI2NjUsIDI2OTEsIDIxMzUsIDIzNjMsIDIzNjcsIDI5MDAsIDI4NzgsIDI2NjQsIDI2OTAsIDI5NzUsIDI4NzcsIDI2NDMsIDI2NzAsIDI5NzQsIDI2NzEsIDI5NzUsIDIxMzUsIDIxMzUsIDI2MTksIDI2MDgsIDI2NjksIDI2NzMsIDIxMzUsIDIxMzUsIDI2NTMsIDIxNzcsIDI2NzIsIDIxMzUsIDIxMzUsIDIxMzUsIDI0ODYsIDIxNjgsIDIyNTEsIDIyNTUsIDI2OTUsIDI5NzQsIDI3MDksIDIxMzUsIDIxMzUsIDIxMzUsIDI0ODcsIDIxNjksIDIzOTksIDI3MTYsIDI5NzUsIDIxMzUsIDIzNjMsIDI3NzAsIDI3NzYsIDI2NDAsIDI3MTcsIDIxMzUsIDIxMzUsIDI3MjksIDIxMzUsIDIxMzUsIDI2NDEsIDI3MTgsIDIxMzUsIDIxMzUsIDIxMzUsIDI1MDUsIDIxMzUsIDI2NDAsIDIyNTcsIDI5NzQsIDIxMzUsIDI3MjcsIDI5NzUsIDIxMzUsIDIzNjUsIDIzMzIsIDI4OTUsIDI5NTcsIDIxMzUsIDI5NTksIDIxMzUsIDIzNjUsIDI3NDksIDI3NTQsIDI5NTksIDI5NTgsIDI5NTgsIDIxMzUsIDIzODAsIDI3OTMsIDI3OTksIDIxMzUsIDI3MzUsIDI3MzgsIDIxMzUsIDIzODEsIDIxMzUsIDIxMzUsIDI5NDAsIDI5NzQsIDIxMzUsIDI3NDQsIDIxMzUsIDIxMzUsIDI3MzksIDI1MTksIDI5NzYsIDI3NDUsIDIxMzUsIDIxMzUsIDIxMzUsIDI1MDksIDI3NTUsIDIxMzUsIDIxMzUsIDIxMzUsIDI1MTAsIDI3NzIsIDI3NzgsIDIxMzUsIDIxMzUsIDI3NDAsIDI1MjAsIDIxMzUsIDI3NzEsIDI3NzcsIDIxMzUsIDIxMzUsIDI3NTksIDI3NTAsIDI3OTIsIDI3OTgsIDIxMzUsIDIxMzUsIDI3ODEsIDIzOTIsIDI3NzksIDIxMzUsIDIxMzUsIDIxMzUsIDI1MjEsIDIxMzUsIDI2NzksIDIyNDgsIDIxMzUsIDIxMzUsIDI2ODEsIDI0ODAsIDIxMzUsIDIxMzUsIDI3ODYsIDMwMDAsIDIxMzUsIDI2NzksIDI2ODMsIDIxMzUsIDIxMzUsIDI0MTYsIDIxMzUsIDIxMzUsIDIxMzUsIDI1MjUsIDIxMzUsIDI3MzAsIDIxMzUsIDIxMzUsIDIxMzUsIDI1NjAsIDI1ODEsIDIxMzUsIDI4MDUsIDIxMzUsIDIxMzUsIDI4MDQsIDI5NjIsIDI4MzIsIDI5NzQsIDIxMzUsIDIzODIsIDIxMzUsIDIxMzUsIDI5NTgsIDIxMzUsIDIxMzUsIDI5NjAsIDIxMzUsIDI4MjksIDI4MzMsIDI5NzUsIDI5NjEsIDI5NjUsIDI5NjksIDI5NzMsIDI5NjgsIDI5NzIsIDIxMzUsIDIxMzUsIDIxMzUsIDI2NDEsIDIxMzUsIDI1MTUsIDI5NjYsIDI5NzAsIDI4NTEsIDI0NzgsIDIxMzUsIDIxMzUsIDI4MDgsIDIxMzUsIDI4MDksIDIxMzUsIDIxMzUsIDIxMzUsIDI3MjIsIDI4NTIsIDI0NzksIDIxMzUsIDIxMzUsIDI4MTUsIDIxMzUsIDIxMzUsIDI3NjYsIDI4NTMsIDI0ODAsIDIxMzUsIDI4NTcsIDI0NzksIDIxMzUsIDIzODgsIDI3MjMsIDIxMzUsIDIzNjQsIDIzMzEsIDI4OTQsIDI4NTgsIDI0ODAsIDIxMzUsIDIxMzUsIDI4NTAsIDI0NzgsIDIxMzUsIDIxMzUsIDIxMzUsIDI4MDYsIDI4NjQsIDIxMzUsIDIzOTksIDIyNTYsIDI5NzQsIDI4NjUsIDIxMzUsIDIxMzUsIDI4NjIsIDIxMzUsIDIxMzUsIDIxMzUsIDI2ODUsIDI4MDcsIDI4NjUsIDIxMzUsIDIxMzUsIDI4MDcsIDI4NjMsIDIxMzUsIDIxMzUsIDIxMzUsIDI2ODYsIDI4ODQsIDI4MDcsIDIxMzUsIDI4MDksIDI4MDcsIDIxMzUsIDIxMzUsIDI4MDcsIDI4MDYsIDI3MDUsIDI4MTAsIDI4MDgsIDI3MDAsIDI4NjksIDI3MDIsIDI3MDIsIDI3MDIsIDI3MDQsIDI4ODMsIDIxMzUsIDIxMzUsIDIxMzUsIDI3MzAsIDI4ODQsIDIxMzUsIDIxMzUsIDIxMzUsIDI3MzEsIDIzMjEsIDI1NDYsIDIxMzUsIDIxMzUsIDI4NzYsIDIyNTUsIDI4ODksIDIzMjIsIDI1NDcsIDIxMzUsIDI0MDEsIDIxMzUsIDIxMzUsIDIxMzUsIDI5NDksIDIzNjcsIDI4OTMsIDI1NDQsIDI5NzMsIDI5MDYsIDI5NzMsIDIxMzUsIDIxMzUsIDI4NzcsIDI2NjMsIDIzNjgsIDI5MDEsIDI5MDcsIDI5NzQsIDIzNjYsIDI4OTksIDI5MDUsIDI5NzIsIDI5MjAsIDI5NzQsIDIxMzUsIDIxMzUsIDI5MTEsIDI5MDAsIDI5MjAsIDIzNjMsIDI5MTMsIDI5MTgsIDI0NjUsIDI5NDEsIDI5NzUsIDIxMzUsIDIxMzUsIDI5MjQsIDI5MjgsIDI5NzQsIDI5NDUsIDI5MzEsIDIxMzUsIDIxMzUsIDIxMzUsIDI3NjUsIDIxMzYsIDI5NTUsIDIxMzUsIDIxMzUsIDI5MzksIDI5MzEsIDIzODAsIDIxMzUsIDIxMzUsIDIzODAsIDIxMzUsIDIxMzUsIDIxMzUsIDI3ODAsIDI1MDcsIDIxMzcsIDIxMzUsIDIxMzcsIDIxMzUsIDIxMzksIDIxMzUsIDI4MDYsIDI4MTAsIDIxMzUsIDIxMzUsIDIxMzUsIDI5OTIsIDIxMzUsIDIxMzUsIDI5NjIsIDI5NjYsIDI5NzAsIDI5NzQsIDIxMzUsIDIxMzUsIDI3ODcsIDMwMTQsIDIxMzUsIDI1MjEsIDI5OTMsIDIxMzUsIDIxMzUsIDIxMzUsIDI4MDMsIDIxMzUsIDIxMzUsIDIxMzUsIDI2MTgsIDI2MDcsIDI5OTcsIDMwMDEsIDIxMzUsIDIxMzUsIDI5NjMsIDI5NjcsIDI5NzEsIDI5NzUsIDIxMzUsIDIxMzUsIDI3OTEsIDI3OTcsIDIxMzUsIDMwMDksIDI5OTksIDMwMDMsIDI3ODcsIDMwMDEsIDIxMzUsIDIxMzUsIDI5NjQsIDI5NjgsIDI3ODUsIDI5OTksIDMwMDMsIDIxMzUsIDIxMzUsIDIxMzUsIDI4MDQsIDI3ODUsIDI5OTksIDMwMDQsIDIxMzUsIDIxMzUsIDIxMzUsIDI4MDcsIDIxMzUsIDIxMzUsIDMwMjMsIDIxMzUsIDIxMzUsIDIxMzUsIDI4MTEsIDIxMzUsIDIxMzUsIDMwMjcsIDIxMzUsIDIxMzUsIDIxMzUsIDI4MzcsIDI5NjgsIDMwMjgsIDIxMzUsIDIxMzUsIDIxMzUsIDI4NzUsIDIxMzUsIDI3ODQsIDMwMjksIDIxMzUsIDI0MDgsIDI0NTcsIDI0NDYsIDAsIDE0LCAwLCAtMjEyMDIyMDY3MiwgMTYxMDYxMjczNiwgLTIwNzQwODMzMjgsIC0yMDAyNzgwMTYwLCAtMjExMTgzMDUyOCwgMTA3Mzg3Mjg5NiwgMTM0MjE3NzI4MCwgMTA3NTgwNzIxNiwgNDA5NiwgMTYzODQsIDIwNDgsIDgxOTIsIDAsIDgxOTIsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDIsIDAsIC0yMTQ1Mzg2NDk2LCA4Mzg4NjA4LCAxMDczNzQxODI0LCAwLCAweDgwMDAwMDAwLCAweDgwMDAwMDAwLCAyMDk3MTUyLCAyMDk3MTUyLCAyMDk3MTUyLCA1MzY4NzA5MTIsIDAsIDAsIDEzNDIxNzcyOCwgMzM1NTQ0MzIsIDE1MzYsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMTI4LCAyNTYsIDMyLCAwLCA2NTUzNiwgMTMxMDcyLCA1MjQyODgsIDE2Nzc3MjE2LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDE1NzI4NjQsIDE4MzUwMDgsIDY0MCwgMzI3NjgsIDY1NTM2LCAyNjIxNDQsIDEwNDg1NzYsIDIwOTcxNTIsIDE5NjYwOCwgMTk2ODAwLCAxOTY2MDgsIDE5NjYwOCwgMCwgMTMxMDcyLCAxMzEwNzIsIDEzMTA3MiwgMTk2NjA4LCAxOTY2MjQsIDE5NjYwOCwgMTk2NjI0LCAxOTY2MDgsIDE5NjYwOCwgMTI4LCA0MDk2LCAxNjM4NCwgMTYzODQsIDIwNDgsIDAsIDQsIDAsIDAsIDB4ODAwMDAwMDAsIDIwOTcxNTIsIDAsIDEwMjQsIDMyLCAzMiwgMCwgNjU1MzYsIDE1NzI4NjQsIDEwNDg1NzYsIDMyNzY4LCAzMjc2OCwgMzI3NjgsIDMyNzY4LCAxOTY2MDgsIDE5NjYwOCwgMTk2NjA4LCA2NCwgNjQsIDE5NjYwOCwgMTk2NjA4LCAxMzEwNzIsIDEzMTA3MiwgMTMxMDcyLCAxMzEwNzIsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCA2NCwgMTk2NzM2LCAxOTY2MDgsIDE5NjYwOCwgMTk2NjA4LCAxMzEwNzIsIDE5NjYwOCwgMTk2NjA4LCAxNjM4NCwgNCwgNCwgNCwgMiwgMzIsIDMyLCA2NTUzNiwgMTA0ODU3NiwgMTI1ODI5MTIsIDEwNzM3NDE4MjQsIDAsIDAsIDIsIDgsIDE2LCA5NiwgMjA0OCwgMzI3NjgsIDAsIDAsIDEzMTA3MiwgMjY4NDM1NDU2LCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMjU2LCAyNTYsIDE5NjYwOCwgMTk2NjcyLCAxOTY2MDgsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDQsIDAsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMzIsIDMyLCAzMjc2OCwgMzIsIDMyLCAzMiwgMzIsIDMyNzY4LCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAxOTY2MDgsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MjQsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDE2LCAxNiwgMTYsIDI2ODQzNTQ1NiwgMTk2NjA4LCA2NCwgNjQsIDY0LCAxOTY2MDgsIDE5NjYwOCwgMTk2NjA4LCAxOTY2NzIsIDI2ODQzNTQ1NiwgNjQsIDY0LCAxOTY2MDgsIDE5NjYwOCwgMTYsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDI2ODQzNTQ1NiwgNjQsIDE5NjYwOCwgMTMxMDcyLCAyNjIxNDQsIDQxOTQzMDQsIDI1MTY1ODI0LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMTk2NjA4LCAyNjIxNTIsIDgsIDI1NiwgNTEyLCAzMDcyLCAxNjM4NCwgMjAwLCAtMTA3Mzc0MTgxNiwgODM5MjcxMywgNDAsIDgzOTI3MTgsIDUyMCwgODA3NDA0MDcyLCA0MCwgNTIwLCAxMDA2NjMzMDQsIDAsIDAsIC01NDA2NTE3NjEsIC01NDA2NTE3NjEsIDI1NzU4OTA0OCwgMCwgMjYyMTQ0LCAwLCAwLCAzLCA4LCAyNTYsIDAsIDQsIDYsIDQxMDAsIDgzODg2MTIsIDAsIDAsIDAsIDMsIDQsIDgsIDI1NiwgNTEyLCAxMDI0LCAwLCAyMDk3MTUyLCAwLCAwLCAtNTM3ODU0NDcxLCAtNTM3ODU0NDcxLCAwLCAxMDA2NjMyOTYsIDAsIDAsIDEsIDIsIDAsIDAsIDAsIDE2Mzg0LCAwLCAwLCAwLCA5NiwgMTQzMzYsIDAsIDAsIDAsIDcsIDgsIDIzNDg4MTAyNCwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgMCwgMjYyMTQ0LCAwLCAwLCAxNiwgNjQsIDM4NCwgNTEyLCAwLCAxLCAxLCAwLCAxMjU4MjkxMiwgMCwgMCwgMCwgMCwgMzM1NTQ0MzIsIDY3MTA4ODY0LCAtNjA2MDg0MTQ0LCAtNjA2MDg0MTQ0LCAtNjA2MDg0MTM4LCAwLCAwLCAyOCwgMzIsIDc2OCwgMTk2NjA4MCwgLTYwODE3NDA4MCwgMCwgMCwgMCwgMTQsIDM1MDU2LCAxNiwgNjQsIDg5NiwgMjQ1NzYsIDk4MzA0LCA5ODMwNCwgMTMxMDcyLCAyNjIxNDQsIDUyNDI4OCwgMTA0ODU3NiwgNDE5NDMwNCwgMjUxNjU4MjQsIDEwNDg1NzYsIDYyOTE0NTYwLCAxMzQyMTc3MjgsIC04MDUzMDYzNjgsIDAsIDM4NCwgNTEyLCAxNjM4NCwgNjU1MzYsIDEzMTA3MiwgMjYyMTQ0LCAyOTM2MDEyOCwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAyNjIxNDQsIDUyNDI4OCwgMTA0ODU3NiwgMjkzNjAxMjgsIDMzNTU0NDMyLCA1MjQyODgsIDEwNDg1NzYsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDAsIDAsIDAsIDEyMzg1NiwgMTk2NjA4MCwgMCwgNjQsIDM4NCwgMTYzODQsIDY1NTM2LCAxMzEwNzIsIDE2Mzg0LCA2NTUzNiwgNTI0Mjg4LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDAsIDUyNDI4OCwgMHg4MDAwMDAwMCwgMCwgMCwgMSwgMTYsIDAsIDI1NiwgNTI0Mjg4LCAwLCAwLCAwLCAyNSwgOTYsIDEyOCwgLTUzNzg1NDQ3MSwgMCwgMCwgMCwgMzIsIDc0MDQ4MDAsIC01NDUyNTk1MjAsIDAsIDAsIDAsIDYwLCAwLCAyNDksIDY0NzY4LCAxMDQ4NTc2LCA2MjkxNDU2LCA2MjkxNDU2LCAyNTE2NTgyNCwgMTAwNjYzMjk2LCA0MDI2NTMxODQsIDEwNzM3NDE4MjQsIDk2LCAxMjgsIDEyODAsIDIwNDgsIDQwOTYsIDU3MzQ0LCA2MjkxNDU2LCA1NzM0NCwgNjI5MTQ1NiwgODM4ODYwOCwgMTY3NzcyMTYsIDMzNTU0NDMyLCAyMDEzMjY1OTIsIDEzNDIxNzcyODAsIDB4ODAwMDAwMDAsIDAsIDU3MzQ0LCA2MjkxNDU2LCA4Mzg4NjA4LCAxMDA2NjMyOTYsIDEzNDIxNzcyOCwgMHg4MDAwMDAwMCwgMCwgMCwgMCwgMSwgOCwgMTYsIDY0LCAxMjgsIDY0LCAxMjgsIDI1NiwgMTAyNCwgMTMxMDcyLCAxMzEwNzIsIDEzMTA3MiwgMjYyMTQ0LCA1MjQyODgsIDE2Nzc3MjE2LCA1NzM0NCwgNjI5MTQ1NiwgODM4ODYwOCwgNjcxMDg4NjQsIDEzNDIxNzcyOCwgNjQsIDI1NiwgMTAyNCwgMjA0OCwgNDA5NiwgNTczNDQsIDY0LCAyNTYsIDAsIDI0NTc2LCAzMjc2OCwgNjI5MTQ1NiwgNjcxMDg4NjQsIDEzNDIxNzcyOCwgMCwgMSwgNjQsIDI1NiwgMjQ1NzYsIDMyNzY4LCA0MTk0MzA0LCAzMjc2OCwgNDE5NDMwNCwgNjcxMDg4NjQsIDAsIDAsIDY0LCAyNTYsIDAsIDAsIDI0NTc2LCAzMjc2OCwgMCwgMTYzODQsIDQxOTQzMDQsIDY3MTA4ODY0LCA2NCwgMTYzODQsIDAsIDAsIDEsIDY0LCAyNTYsIDE2Mzg0LCA0MTk0MzA0LCA2NzEwODg2NCwgMCwgMCwgMCwgMTYzODQsIDAsIDE2Mzg0LCAxNjM4NCwgMCwgLTQ3MDQ0Nzg3NCwgLTQ3MDQ0Nzg3NCwgLTQ3MDQ0Nzg3NCwgMCwgMCwgMTI4LCAwLCAwLCA4LCA5NiwgMjA0OCwgMzI3NjgsIDI2MjE0NCwgODM4ODYwOCwgMzUwNTYsIDEzNzYyNTYsIC00NzE4NTkyMDAsIDAsIDAsIDE0LCAxNiwgMjI0LCAyMDQ4LCAzMjc2OCwgMjA5NzE1MiwgNDE5NDMwNCwgODM4ODYwOCwgLTQ4NjUzOTI2NCwgMCwgOTYsIDEyOCwgMjA0OCwgMzI3NjgsIDI2MjE0NCwgMjA5NzE1MiwgMjYyMTQ0LCAyMDk3MTUyLCA4Mzg4NjA4LCAzMzU1NDQzMiwgNTM2ODcwOTEyLCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAxNjEwNjEyNzM2LCAweDgwMDAwMDAwLCAwLCAwLCAxLCA1MjQyODgsIDEwNDg1NzYsIDEyNTgyOTEyLCAwLCAwLCAwLCAxNTEzMTEsIDI2NDUwMzI5NiwgMjA5NzE1MiwgODM4ODYwOCwgMzM1NTQ0MzIsIDE2MTA2MTI3MzYsIDB4ODAwMDAwMDAsIDI2MjE0NCwgODM4ODYwOCwgMzM1NTQ0MzIsIDUzNjg3MDkxMiwgNjcxMDg4NjQsIDQxOTQzMDQsIDAsIDQxOTQzMDQsIDAsIDQxOTQzMDQsIDQxOTQzMDQsIDAsIDAsIDUyNDI4OCwgODM4ODYwOCwgNTM2ODcwOTEyLCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAxLCA0MDk3LCA4Mzg4NjA5LCA5NiwgMjA0OCwgMzI3NjgsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDAsIDk2LCAyMDQ4LCAweDgwMDAwMDAwLCAwLCAwLCA5NiwgMjA0OCwgMCwgMCwgMSwgMTI1ODI5MTIsIDAsIDAsIDAsIDAsIDE2NDE4OTU2OTUsIDE2NDE4OTU2OTUsIDAsIDAsIDAsIDI0OSwgNzQwNDgwMCwgMTUsIDg3ODA4LCAxODM1MDA4LCAxNjM5OTcyODY0LCAwLCA3NjgsIDUxMjAsIDE2Mzg0LCA2NTUzNiwgMTgzNTAwOCwgMTgzNTAwOCwgMTI1ODI5MTIsIDE2Nzc3MjE2LCAxNjEwNjEyNzM2LCAwLCAzLCA0LCA4LCA3NjgsIDQwOTYsIDY1NTM2LCAwLCAwLCAyNTYsIDUxMiwgNzg2NDMyLCA4LCAyNTYsIDUxMiwgNDA5NiwgMTYzODQsIDE4MzUwMDgsIDE2Mzg0LCAxODM1MDA4LCAxMjU4MjkxMiwgMTYxMDYxMjczNiwgMCwgMCwgMCwgMjU2LCAwLCAwLCAwLCA0LCA4LCAxNiwgMzIsIDEsIDIsIDgsIDI1NiwgMTYzODQsIDUyNDI4OCwgMTYzODQsIDUyNDI4OCwgMTA0ODU3NiwgMTI1ODI5MTIsIDE2MTA2MTI3MzYsIDAsIDAsIDAsIDgzODg2MDgsIDAsIDAsIDAsIDUyNDI4OCwgNDE5NDMwNCwgMCwgMCwgMCwgODM4ODYwOCwgLTU0ODY2MjI4OCwgLTU0ODY2MjI4OCwgLTU0ODY2MjI4OCwgMCwgMCwgMjU2LCAxNjM4NCwgNjU1MzYsIDUyMDA5MzY5NiwgLTEwNzM3NDE4MjQsIDAsIDAsIDAsIDE2Nzc3MjE2LCAwLCAxNiwgMzIsIDk2MCwgNDA5NiwgNDk4MDczNiwgNTIwMDkzNjk2LCAxMDczNzQxODI0LCAwLCAzMiwgODk2LCA0MDk2LCA1NzM0NCwgMTA0ODU3NiwgNjI5MTQ1NiwgODM4ODYwOCwgMTY3NzcyMTYsIDEwMDY2MzI5NiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDUxMiwgNzg2NDMyLCA0MTk0MzA0LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDAsIDc4NjQzMiwgNDE5NDMwNCwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDAsIDUyNDI4OCwgNDE5NDMwNCwgMjY4NDM1NDU2LCAwLCAwLCAwLCAwLCAwLCA0MTk0MzA0LCA0MTk0MzA0LCAtNTQwNjUxNzYxLCAwLCAwLCAwLCAyLCA0LCA4LCAxNiwgOTYsIDEyOCwgMjY0NTAzMjk2LCAtODA1MzA2MzY4LCAwLCAwLCAwLCA4LCAyNTYsIDUxMiwgMTk0NTYsIDEzMTA3MiwgMzA3MiwgMTYzODQsIDEzMTA3MiwgMjYyMTQ0LCA4Mzg4NjA4LCAxNjc3NzIxNiwgNTEyLCAxMDI0LCAyMDQ4LCAxNjM4NCwgMTMxMDcyLCAyNjIxNDQsIDEzMTA3MiwgMjYyMTQ0LCA4Mzg4NjA4LCAzMzU1NDQzMiwgMjAxMzI2NTkyLCAyNjg0MzU0NTYsIDAsIDMsIDQsIDI1NiwgMTAyNCwgMjA0OCwgNTczNDQsIDE2Mzg0LCAxMzEwNzIsIDgzODg2MDgsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMCwgMywgMjU2LCAxMDI0LCAxNjM4NCwgMTMxMDcyLCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAwLCAyNTYsIDUyNDI4OCwgMHg4MDAwMDAwMCwgMCwgMywgMjU2LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAxMDczNzQxODI0LCAwLCAxLCAyLCAzMzU1NDQzMiwgMSwgMiwgMTM0MjE3NzI4LCAxMDczNzQxODI0LCAwLCAxLCAyLCAxMzQyMTc3MjgsIDAsIDAsIDAsIDY0LCAwLCAwLCAwLCAxNiwgMzIsIDg5NiwgNDA5NiwgNzg2NDMyLCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDIwMTMyNjU5MiwgMjY4NDM1NDU2LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAwLCAwLCAxNSwgMCwgNDk4MDczNiwgNDk4MDczNiwgNDk4MDczNiwgNzA0NjAsIDcwNDYwLCAzNDc4MzMyLCAwLCAwLCAxMDA4LCA0OTg0ODMyLCA1MjAwOTM2OTYsIDYwLCA0ODY0LCA2NTUzNiwgMCwgMCwgMCwgMTIsIDE2LCAzMiwgMjU2LCA1MTIsIDQwOTYsIDY1NTM2LCAwLCAwLCAwLCA2NzEwODg2NCwgMCwgMCwgMCwgMTIsIDAsIDI1NiwgNTEyLCA2NTUzNiwgMCwgMCwgMTAyNCwgNTEyLCAxMzEwNzIsIDEzMTA3MiwgNCwgMTYsIDMyLCA2NTUzNiwgMCwgNCwgMTYsIDMyLCAwLCAwLCAwLCA0LCAxNiwgMCwgMCwgMTYzODQsIDY3MTA4ODY0LCAwLCAwLCAxLCAyNCwgOTYsIDEyOCwgMjU2LCAxMDI0Cl07CgpKU09OaXFUb2tlbml6ZXIuVE9LRU4gPQpbCiAgIigwKSIsCiAgIkpTT05DaGFyIiwKICAiSlNPTkNoYXJSZWYiLAogICJKU09OUHJlZGVmaW5lZENoYXJSZWYiLAogICJNb2R1bGVEZWNsIiwKICAiQW5ub3RhdGlvbiIsCiAgIk9wdGlvbkRlY2wiLAogICJPcGVyYXRvciIsCiAgIlZhcmlhYmxlIiwKICAiVGFnIiwKICAiRW5kVGFnIiwKICAiUHJhZ21hQ29udGVudHMiLAogICJEaXJDb21tZW50Q29udGVudHMiLAogICJEaXJQSUNvbnRlbnRzIiwKICAiQ0RhdGFTZWN0aW9uQ29udGVudHMiLAogICJBdHRyVGVzdCIsCiAgIldpbGRjYXJkIiwKICAiRVFOYW1lIiwKICAiSW50ZWdlckxpdGVyYWwiLAogICJEZWNpbWFsTGl0ZXJhbCIsCiAgIkRvdWJsZUxpdGVyYWwiLAogICJQcmVkZWZpbmVkRW50aXR5UmVmIiwKICAiJ1wiXCInIiwKICAiRXNjYXBlQXBvcyIsCiAgIkFwb3NDaGFyIiwKICAiRWxlbWVudENvbnRlbnRDaGFyIiwKICAiUXVvdEF0dHJDb250ZW50Q2hhciIsCiAgIkFwb3NBdHRyQ29udGVudENoYXIiLAogICJOQ05hbWUiLAogICJRTmFtZSIsCiAgIlMiLAogICJDaGFyUmVmIiwKICAiQ29tbWVudENvbnRlbnRzIiwKICAiRG9jVGFnIiwKICAiRG9jQ29tbWVudENvbnRlbnRzIiwKICAiRU9GIiwKICAiJyEnIiwKICAiJ1wiJyIsCiAgIicjJyIsCiAgIicjKSciLAogICInJCQnIiwKICAiJycnJyIsCiAgIicoJyIsCiAgIicoIyciLAogICInKDonIiwKICAiJyg6ficiLAogICInKSciLAogICInKiciLAogICInKiciLAogICInLCciLAogICInLS0+JyIsCiAgIicuJyIsCiAgIicvJyIsCiAgIicvPiciLAogICInOiciLAogICInOiknIiwKICAiJzsnIiwKICAiJzwhLS0nIiwKICAiJzwhW0NEQVRBWyciLAogICInPD8nIiwKICAiJz0nIiwKICAiJz4nIiwKICAiJz8nIiwKICAiJz8+JyIsCiAgIidOYU4nIiwKICAiJ1snIiwKICAiJ10nIiwKICAiJ11dPiciLAogICInYWZ0ZXInIiwKICAiJ2FsbCciLAogICInYWxsb3dpbmcnIiwKICAiJ2FuY2VzdG9yJyIsCiAgIidhbmNlc3Rvci1vci1zZWxmJyIsCiAgIidhbmQnIiwKICAiJ2FueSciLAogICInYXBwZW5kJyIsCiAgIidhcnJheSciLAogICInYXMnIiwKICAiJ2FzY2VuZGluZyciLAogICInYXQnIiwKICAiJ2F0dHJpYnV0ZSciLAogICInYmFzZS11cmknIiwKICAiJ2JlZm9yZSciLAogICInYm91bmRhcnktc3BhY2UnIiwKICAiJ2JyZWFrJyIsCiAgIidieSciLAogICInY2FzZSciLAogICInY2FzdCciLAogICInY2FzdGFibGUnIiwKICAiJ2NhdGNoJyIsCiAgIidjaGVjayciLAogICInY2hpbGQnIiwKICAiJ2NvbGxhdGlvbiciLAogICInY29sbGVjdGlvbiciLAogICInY29tbWVudCciLAogICInY29uc3RyYWludCciLAogICInY29uc3RydWN0aW9uJyIsCiAgIidjb250YWlucyciLAogICInY29udGVudCciLAogICInY29udGV4dCciLAogICInY29udGludWUnIiwKICAiJ2NvcHknIiwKICAiJ2NvcHktbmFtZXNwYWNlcyciLAogICInY291bnQnIiwKICAiJ2RlY2ltYWwtZm9ybWF0JyIsCiAgIidkZWNpbWFsLXNlcGFyYXRvciciLAogICInZGVjbGFyZSciLAogICInZGVmYXVsdCciLAogICInZGVsZXRlJyIsCiAgIidkZXNjZW5kYW50JyIsCiAgIidkZXNjZW5kYW50LW9yLXNlbGYnIiwKICAiJ2Rlc2NlbmRpbmcnIiwKICAiJ2RpYWNyaXRpY3MnIiwKICAiJ2RpZmZlcmVudCciLAogICInZGlnaXQnIiwKICAiJ2Rpc3RhbmNlJyIsCiAgIidkaXYnIiwKICAiJ2RvY3VtZW50JyIsCiAgIidkb2N1bWVudC1ub2RlJyIsCiAgIidlbGVtZW50JyIsCiAgIidlbHNlJyIsCiAgIidlbXB0eSciLAogICInZW1wdHktc2VxdWVuY2UnIiwKICAiJ2VuY29kaW5nJyIsCiAgIidlbmQnIiwKICAiJ2VudGlyZSciLAogICInZXEnIiwKICAiJ2V2ZXJ5JyIsCiAgIidleGFjdGx5JyIsCiAgIidleGNlcHQnIiwKICAiJ2V4aXQnIiwKICAiJ2V4dGVybmFsJyIsCiAgIidmaXJzdCciLAogICInZm9sbG93aW5nJyIsCiAgIidmb2xsb3dpbmctc2libGluZyciLAogICInZm9yJyIsCiAgIidmb3JlYWNoJyIsCiAgIidmb3JlaWduJyIsCiAgIidmcm9tJyIsCiAgIidmdC1vcHRpb24nIiwKICAiJ2Z0YW5kJyIsCiAgIidmdG5vdCciLAogICInZnRvciciLAogICInZnVuY3Rpb24nIiwKICAiJ2dlJyIsCiAgIidncmVhdGVzdCciLAogICInZ3JvdXAnIiwKICAiJ2dyb3VwaW5nLXNlcGFyYXRvciciLAogICInZ3QnIiwKICAiJ2lkaXYnIiwKICAiJ2lmJyIsCiAgIidpbXBvcnQnIiwKICAiJ2luJyIsCiAgIidpbmRleCciLAogICInaW5maW5pdHknIiwKICAiJ2luaGVyaXQnIiwKICAiJ2luc2Vuc2l0aXZlJyIsCiAgIidpbnNlcnQnIiwKICAiJ2luc3RhbmNlJyIsCiAgIidpbnRlZ3JpdHknIiwKICAiJ2ludGVyc2VjdCciLAogICInaW50byciLAogICInaXMnIiwKICAiJ2l0ZW0nIiwKICAiJ2pzb24nIiwKICAiJ2pzb24taXRlbSciLAogICIna2V5JyIsCiAgIidsYW5ndWFnZSciLAogICInbGFzdCciLAogICInbGF4JyIsCiAgIidsZSciLAogICInbGVhc3QnIiwKICAiJ2xldCciLAogICInbGV2ZWxzJyIsCiAgIidsb29wJyIsCiAgIidsb3dlcmNhc2UnIiwKICAiJ2x0JyIsCiAgIidtaW51cy1zaWduJyIsCiAgIidtb2QnIiwKICAiJ21vZGlmeSciLAogICInbW9kdWxlJyIsCiAgIidtb3N0JyIsCiAgIiduYW1lc3BhY2UnIiwKICAiJ25hbWVzcGFjZS1ub2RlJyIsCiAgIiduZSciLAogICInbmV4dCciLAogICInbm8nIiwKICAiJ25vLWluaGVyaXQnIiwKICAiJ25vLXByZXNlcnZlJyIsCiAgIidub2RlJyIsCiAgIidub2RlcyciLAogICInbm90JyIsCiAgIidvYmplY3QnIiwKICAiJ29jY3VycyciLAogICInb2YnIiwKICAiJ29uJyIsCiAgIidvbmx5JyIsCiAgIidvcHRpb24nIiwKICAiJ29yJyIsCiAgIidvcmRlciciLAogICInb3JkZXJlZCciLAogICInb3JkZXJpbmcnIiwKICAiJ3BhcmFncmFwaCciLAogICIncGFyYWdyYXBocyciLAogICIncGFyZW50JyIsCiAgIidwYXR0ZXJuLXNlcGFyYXRvciciLAogICIncGVyLW1pbGxlJyIsCiAgIidwZXJjZW50JyIsCiAgIidwaHJhc2UnIiwKICAiJ3Bvc2l0aW9uJyIsCiAgIidwcmVjZWRpbmcnIiwKICAiJ3ByZWNlZGluZy1zaWJsaW5nJyIsCiAgIidwcmVzZXJ2ZSciLAogICIncHJldmlvdXMnIiwKICAiJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nIiwKICAiJ3JlbGF0aW9uc2hpcCciLAogICIncmVuYW1lJyIsCiAgIidyZXBsYWNlJyIsCiAgIidyZXR1cm4nIiwKICAiJ3JldHVybmluZyciLAogICIncmV2YWxpZGF0aW9uJyIsCiAgIidzYW1lJyIsCiAgIidzYXRpc2ZpZXMnIiwKICAiJ3NjaGVtYSciLAogICInc2NoZW1hLWF0dHJpYnV0ZSciLAogICInc2NoZW1hLWVsZW1lbnQnIiwKICAiJ3Njb3JlJyIsCiAgIidzZWxmJyIsCiAgIidzZW5zaXRpdmUnIiwKICAiJ3NlbnRlbmNlJyIsCiAgIidzZW50ZW5jZXMnIiwKICAiJ3NraXAnIiwKICAiJ3NsaWRpbmcnIiwKICAiJ3NvbWUnIiwKICAiJ3N0YWJsZSciLAogICInc3RhcnQnIiwKICAiJ3N0ZW1taW5nJyIsCiAgIidzdG9wJyIsCiAgIidzdHJpY3QnIiwKICAiJ3N0cmlwJyIsCiAgIidzdHJ1Y3R1cmVkLWl0ZW0nIiwKICAiJ3N3aXRjaCciLAogICIndGV4dCciLAogICIndGhlbiciLAogICIndGhlc2F1cnVzJyIsCiAgIid0aW1lcyciLAogICIndG8nIiwKICAiJ3RyZWF0JyIsCiAgIid0cnknIiwKICAiJ3R1bWJsaW5nJyIsCiAgIid0eXBlJyIsCiAgIid0eXBlc3dpdGNoJyIsCiAgIid1bmlvbiciLAogICIndW5pcXVlJyIsCiAgIid1bm9yZGVyZWQnIiwKICAiJ3VwZGF0aW5nJyIsCiAgIid1cHBlcmNhc2UnIiwKICAiJ3VzaW5nJyIsCiAgIid2YWxpZGF0ZSciLAogICIndmFsdWUnIiwKICAiJ3ZhcmlhYmxlJyIsCiAgIid2ZXJzaW9uJyIsCiAgIid3ZWlnaHQnIiwKICAiJ3doZW4nIiwKICAiJ3doZXJlJyIsCiAgIid3aGlsZSciLAogICInd2lsZGNhcmRzJyIsCiAgIid3aW5kb3cnIiwKICAiJ3dpdGgnIiwKICAiJ3dpdGhvdXQnIiwKICAiJ3dvcmQnIiwKICAiJ3dvcmRzJyIsCiAgIid4cXVlcnknIiwKICAiJ3plcm8tZGlnaXQnIiwKICAiJ3snIiwKICAiJ3t7JyIsCiAgIid8JyIsCiAgIid9JyIsCiAgIid9fSciCl07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9qc29uaXFfbGV4ZXIuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIEpTT05pcVRva2VuaXplciA9IF9kZXJlcV8oJy4vSlNPTmlxVG9rZW5pemVyJykuSlNPTmlxVG9rZW5pemVyOwp2YXIgTGV4ZXIgPSBfZGVyZXFfKCcuL2xleGVyJykuTGV4ZXI7Cgp2YXIga2V5cyA9ICdOYU58YWZ0ZXJ8YWxsb3dpbmd8YW5jZXN0b3J8YW5jZXN0b3Itb3Itc2VsZnxhbmR8YXBwZW5kfGFycmF5fGFzfGFzY2VuZGluZ3xhdHxhdHRyaWJ1dGV8YmFzZS11cml8YmVmb3JlfGJvdW5kYXJ5LXNwYWNlfGJyZWFrfGJ5fGNhc2V8Y2FzdHxjYXN0YWJsZXxjYXRjaHxjaGlsZHxjb2xsYXRpb258Y29tbWVudHxjb25zdHJhaW50fGNvbnN0cnVjdGlvbnxjb250YWluc3xjb250ZXh0fGNvbnRpbnVlfGNvcHl8Y29weS1uYW1lc3BhY2VzfGNvdW50fGRlY2ltYWwtZm9ybWF0fGRlY2ltYWwtc2VwYXJhdG9yfGRlY2xhcmV8ZGVmYXVsdHxkZWxldGV8ZGVzY2VuZGFudHxkZXNjZW5kYW50LW9yLXNlbGZ8ZGVzY2VuZGluZ3xkaWdpdHxkaXZ8ZG9jdW1lbnR8ZG9jdW1lbnQtbm9kZXxlbGVtZW50fGVsc2V8ZW1wdHl8ZW1wdHktc2VxdWVuY2V8ZW5jb2Rpbmd8ZW5kfGVxfGV2ZXJ5fGV4Y2VwdHxleGl0fGV4dGVybmFsfGZhbHNlfGZpcnN0fGZvbGxvd2luZ3xmb2xsb3dpbmctc2libGluZ3xmb3J8ZnJvbXxmdC1vcHRpb258ZnVuY3Rpb258Z2V8Z3JlYXRlc3R8Z3JvdXB8Z3JvdXBpbmctc2VwYXJhdG9yfGd0fGlkaXZ8aWZ8aW1wb3J0fGlufGluZGV4fGluZmluaXR5fGluc2VydHxpbnN0YW5jZXxpbnRlZ3JpdHl8aW50ZXJzZWN0fGludG98aXN8aXRlbXxqc29ufGpzb24taXRlbXxqc29uaXF8bGFzdHxsYXh8bGV8bGVhc3R8bGV0fGxvb3B8bHR8bWludXMtc2lnbnxtb2R8bW9kaWZ5fG1vZHVsZXxuYW1lc3BhY2V8bmFtZXNwYWNlLW5vZGV8bmV8bmV4dHxub2RlfG5vZGVzfG5vdHxudWxsfG9iamVjdHxvZnxvbmx5fG9wdGlvbnxvcnxvcmRlcnxvcmRlcmVkfG9yZGVyaW5nfHBhcmFncmFwaHN8cGFyZW50fHBhdHRlcm4tc2VwYXJhdG9yfHBlci1taWxsZXxwZXJjZW50fHByZWNlZGluZ3xwcmVjZWRpbmctc2libGluZ3xwcmV2aW91c3xwcm9jZXNzaW5nLWluc3RydWN0aW9ufHJlbmFtZXxyZXBsYWNlfHJldHVybnxyZXR1cm5pbmd8cmV2YWxpZGF0aW9ufHNhdGlzZmllc3xzY2hlbWF8c2NoZW1hLWF0dHJpYnV0ZXxzY2hlbWEtZWxlbWVudHxzY29yZXxzZWxlY3R8c2VsZnxzZW50ZW5jZXN8c2xpZGluZ3xzb21lfHN0YWJsZXxzdGFydHxzdHJpY3R8c3dpdGNofHRleHR8dGhlbnx0aW1lc3x0b3x0cmVhdHx0cnVlfHRyeXx0dW1ibGluZ3x0eXBlfHR5cGVzd2l0Y2h8dW5pb258dW5vcmRlcmVkfHVwZGF0aW5nfHZhbGlkYXRlfHZhbHVlfHZhcmlhYmxlfHZlcnNpb258d2hlbnx3aGVyZXx3aGlsZXx3aW5kb3d8d2l0aHx3b3Jkc3x4cXVlcnl8emVyby1kaWdpdCcuc3BsaXQoJ3wnKTsKdmFyIGtleXdvcmRzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7IHJldHVybiB7IG5hbWU6ICdcJycgKyB2YWwgKyAnXCcnLCB0b2tlbjogJ2tleXdvcmQnIH07IH0pOwp2YXIgbmNuYW1lcyA9IGtleXMubWFwKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4geyBuYW1lOiAnXCcnICsgdmFsICsgJ1wnJywgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9OyB9KTsKCnZhciBjZGF0YSA9ICdjb25zdGFudC5sYW5ndWFnZSc7CnZhciBudW1iZXIgPSAnY29uc3RhbnQnOwp2YXIgeG1sY29tbWVudCA9ICdjb21tZW50JzsKdmFyIHBpID0gJ3htbC1wZSc7CnZhciBwcmFnbWEgPSAnY29uc3RhbnQuYnVpbGRpbic7CnZhciBuID0gZnVuY3Rpb24obmFtZSl7CiAgICByZXR1cm4gJ1wnJyArIG5hbWUgKyAnXCcnOwp9Owp2YXIgUnVsZXMgPSB7CiAgICBzdGFydDogWwogICAgICAgIHsgbmFtZTogbignKCMnKSwgdG9rZW46IHByYWdtYSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdQcmFnbWEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJyg6ficpLCB0b2tlbjogJ2NvbW1lbnQuZG9jJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50RG9jJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzwhLS0nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnWE1MQ29tbWVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc8PycpLCB0b2tlbjogcGksIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKSB7IHN0YWNrLnB1c2goJ1BJJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ1wnXCcnKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ0Fwb3NTdHJpbmcnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUXVvdFN0cmluZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnQW5ub3RhdGlvbicsIHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbicgfSwKICAgICAgICB7IG5hbWU6ICdNb2R1bGVEZWNsJywgdG9rZW46ICdrZXl3b3JkJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdQcmVmaXgnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ09wdGlvbkRlY2wnLCB0b2tlbjogJ2tleXdvcmQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ19FUU5hbWUnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ0F0dHJUZXN0JywgdG9rZW46ICdzdXBwb3J0LnR5cGUnIH0sCiAgICAgICAgeyBuYW1lOiAnVmFyaWFibGUnLCB0b2tlbjogJ3ZhcmlhYmxlJyB9LAogICAgICAgIHsgbmFtZTogbignPCFbQ0RBVEFbJyksIHRva2VuOiBjZGF0YSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDRGF0YScpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnSW50ZWdlckxpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnRGVjaW1hbExpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnRG91YmxlTGl0ZXJhbCcsIHRva2VuOiBudW1iZXIgfSwKICAgICAgICB7IG5hbWU6ICdPcGVyYXRvcicsIHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicgfSwKICAgICAgICB7IG5hbWU6ICdFUU5hbWUnLCB0b2tlbjogZnVuY3Rpb24odmFsKSB7IHJldHVybiBrZXlzLmluZGV4T2YodmFsKSAhPT0gLTEgPyAna2V5d29yZCcgOiAnc3VwcG9ydC5mdW5jdGlvbic7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJygnKSwgdG9rZW46ICdscGFyZW4nIH0sCiAgICAgICAgeyBuYW1lOiBuKCcpJyksIHRva2VuOiAncnBhcmVuJyB9LAogICAgICAgIHsgbmFtZTogJ1RhZycsIHRva2VuOiAnbWV0YS50YWcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1N0YXJ0VGFnJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ30nKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBpZihzdGFjay5sZW5ndGggPiAxKSB7IHN0YWNrLnBvcCgpOyB9IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0gLy8sIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgaWYoc3RhY2subGVuZ3RoID4gMSkgeyBzdGFjay5wb3AoKTsgfSB9IH0KICAgIF0uY29uY2F0KGtleXdvcmRzKSwKICAgIF9FUU5hbWU6IFsKICAgICAgICB7IG5hbWU6ICdFUU5hbWUnLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjaykgeyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLmNvbmNhdChuY25hbWVzKSwKICAgIFByZWZpeDogWwogICAgICAgIHsgbmFtZTogJ05DTmFtZScsIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKSB7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0uY29uY2F0KG5jbmFtZXMpLAogICAgU3RhcnRUYWc6IFsKICAgICAgICB7IG5hbWU6IG4oJz4nKSwgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnVGFnQ29udGVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUU5hbWUnLCB0b2tlbjogJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZScgfSwKICAgICAgICB7IG5hbWU6IG4oJz0nKSwgdG9rZW46ICd0ZXh0JyB9LAogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQXBvc0F0dHInKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUXVvdEF0dHInKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignLz4nKSwgdG9rZW46ICdtZXRhLnRhZy5yJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgVGFnQ29udGVudDogWwogICAgICAgIHsgbmFtZTogJ0VsZW1lbnRDb250ZW50Q2hhcicsIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJzwhW0NEQVRBWycpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ0RhdGEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignPCEtLScpLCB0b2tlbjogeG1sY29tbWVudCwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdYTUxDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdUYWcnLCB0b2tlbjogJ21ldGEudGFnJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdTdGFydFRhZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUHJlZGVmaW5lZEVudGl0eVJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0NoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6IG4oJ3t7JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnRW5kVGFnJywgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBBcG9zQXR0cjogWwogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVBcG9zJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQXBvc0F0dHJDb250ZW50Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogbigneycpLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ3N0YXJ0Jyk7IH0gfQogICAgXSwKICAgIFF1b3RBdHRyOiBbCiAgICAgICAgeyBuYW1lOiBuKCdcIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVRdW90JywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnUXVvdEF0dHJDb250ZW50Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogbigneycpLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ3N0YXJ0Jyk7IH0gfQogICAgXSwKICAgIFByYWdtYTogWwogICAgICAgIHsgbmFtZTogJ1ByYWdtYUNvbnRlbnRzJywgdG9rZW46IHByYWdtYSB9LAogICAgICAgIHsgbmFtZTogbignIycpLCB0b2tlbjogcHJhZ21hIH0sCiAgICAgICAgeyBuYW1lOiBuKCcjKScpLCB0b2tlbjogcHJhZ21hLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBDb21tZW50OiBbCiAgICAgICAgeyBuYW1lOiAnQ29tbWVudENvbnRlbnRzJywgdG9rZW46ICdjb21tZW50JyB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzopJyksIHRva2VuOiAnY29tbWVudCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIENvbW1lbnREb2M6IFsKICAgICAgICB7IG5hbWU6ICdEb2NDb21tZW50Q29udGVudHMnLCB0b2tlbjogJ2NvbW1lbnQuZG9jJyB9LAogICAgICAgIHsgbmFtZTogJ0RvY1RhZycsIHRva2VuOiAnY29tbWVudC5kb2MudGFnJyB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50LmRvYycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ29tbWVudERvYycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc6KScpLCB0b2tlbjogJ2NvbW1lbnQuZG9jJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgWE1MQ29tbWVudDogWwogICAgICAgIHsgbmFtZTogJ0RpckNvbW1lbnRDb250ZW50cycsIHRva2VuOiB4bWxjb21tZW50IH0sCiAgICAgICAgeyBuYW1lOiBuKCctLT4nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIENEYXRhOiBbCiAgICAgICAgeyBuYW1lOiAnQ0RhdGFTZWN0aW9uQ29udGVudHMnLCB0b2tlbjogY2RhdGEgfSwKICAgICAgICB7IG5hbWU6IG4oJ11dPicpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIFBJOiBbCiAgICAgICAgeyBuYW1lOiAnRGlyUElDb250ZW50cycsIHRva2VuOiBwaSB9LAogICAgICAgIHsgbmFtZTogbignPycpLCB0b2tlbjogcGkgfSwKICAgICAgICB7IG5hbWU6IG4oJz8+JyksIHRva2VuOiBwaSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgQXBvc1N0cmluZzogWwogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdQcmVkZWZpbmVkRW50aXR5UmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0VzY2FwZUFwb3MnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdBcG9zQ2hhcicsIHRva2VuOiAnc3RyaW5nJyB9CiAgICBdLAogICAgUXVvdFN0cmluZzogWwogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdKU09OUHJlZGVmaW5lZENoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdKU09OQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0pTT05DaGFyJywgdG9rZW46ICdzdHJpbmcnIH0KICAgIF0KfTsKICAgIApleHBvcnRzLkpTT05pcUxleGVyID0gZnVuY3Rpb24oKXsgcmV0dXJuIG5ldyBMZXhlcihKU09OaXFUb2tlbml6ZXIsIFJ1bGVzKTsgfTsKfSx7Ii4vSlNPTmlxVG9rZW5pemVyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9KU09OaXFUb2tlbml6ZXIuanMiLCIuL2xleGVyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9sZXhlci5qcyJ9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9sZXhlci5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgVG9rZW5IYW5kbGVyID0gZnVuY3Rpb24oY29kZSkgewogICAgdmFyIGlucHV0ID0gY29kZTsKICAgIHRoaXMudG9rZW5zID0gW107CiAKICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpbnB1dCA9IGlucHV0OwogICAgICAgIHRoaXMudG9rZW5zID0gW107CiAgICB9OwogICAgCiAgICB0aGlzLnN0YXJ0Tm9udGVybWluYWwgPSBmdW5jdGlvbigpIHt9OwogICAgdGhpcy5lbmROb250ZXJtaW5hbCA9IGZ1bmN0aW9uKCkge307CgogICAgdGhpcy50ZXJtaW5hbCA9IGZ1bmN0aW9uKG5hbWUsIGJlZ2luLCBlbmQpIHsKICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgdmFsdWU6IGlucHV0LnN1YnN0cmluZyhiZWdpbiwgZW5kKQogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLndoaXRlc3BhY2UgPSBmdW5jdGlvbihiZWdpbiwgZW5kKSB7CiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgICAgIG5hbWU6ICdXUycsCiAgICAgICAgICAgIHZhbHVlOiBpbnB1dC5zdWJzdHJpbmcoYmVnaW4sIGVuZCkKICAgICAgICB9KTsKICAgIH07Cn07CgpleHBvcnRzLkxleGVyID0gZnVuY3Rpb24oVG9rZW5pemVyLCBSdWxlcykgewoKICAgIHRoaXMudG9rZW5zID0gW107CiAgCiAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlvbihsaW5lLCBzdGF0ZSkgewogICAgICAgIHN0YXRlID0gKHN0YXRlID09PSAnc3RhcnQnIHx8ICFzdGF0ZSkgPyAnWyJzdGFydCJdJyA6IHN0YXRlOwogICAgICAgIHZhciBzdGFjayA9IEpTT04ucGFyc2Uoc3RhdGUpOwogICAgICAgIHZhciBoID0gbmV3IFRva2VuSGFuZGxlcihsaW5lKTsKICAgICAgICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihsaW5lLCBoKTsKICAgICAgICB2YXIgdG9rZW5zID0gW107CiAgICAKICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGgudG9rZW5zID0gW107CiAgICAgICAgICAgICAgICB0b2tlbml6ZXJbJ3BhcnNlXycgKyBjdXJyZW50U3RhdGVdKCk7CiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IG51bGw7CiAgICAgICAgCiAgICAgICAgICAgICAgICBpZihoLnRva2Vucy5sZW5ndGggPiAxICYmIGgudG9rZW5zWzBdLm5hbWUgPT09ICdXUycpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGgudG9rZW5zWzBdLnZhbHVlCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgaC50b2tlbnMuc3BsaWNlKDAsIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHRva2VuID0gaC50b2tlbnNbMF07CiAgICAgICAgICAgICAgICB2YXIgcnVsZXMgID0gUnVsZXNbY3VycmVudFN0YXRlXTsKICAgICAgICAgICAgICAgIGZvcih2YXIgayA9IDA7IGsgPCBydWxlcy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gUnVsZXNbY3VycmVudFN0YXRlXVtrXTsKICAgICAgICAgICAgICAgICAgICBpZigodHlwZW9mKHJ1bGUubmFtZSkgPT09ICdmdW5jdGlvbicgJiYgcnVsZS5uYW1lKHRva2VuKSkgfHwgcnVsZS5uYW1lID09PSB0b2tlbi5uYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBydWxlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBpZih0b2tlbi5uYW1lID09PSAnRU9GJykgeyBicmVhazsgfQogICAgICAgICAgICAgICAgaWYodG9rZW4udmFsdWUgPT09ICcnKSB7IHRocm93ICdFbmNvdW50ZXJlZCBlbXB0eSBzdHJpbmcgbGV4aWNhbCBydWxlLic7IH0KICAgICAgICAKICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiBpbmZvID09PSBudWxsID8gJ3RleHQnIDogKHR5cGVvZihpbmZvLnRva2VuKSA9PT0gJ2Z1bmN0aW9uJyA/IGluZm8udG9rZW4odG9rZW4udmFsdWUpIDogaW5mby50b2tlbiksCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGluZm8gJiYgaW5mby5uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgaW5mby5uZXh0KHN0YWNrKTsKICAgICAgICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAgaWYoZSBpbnN0YW5jZW9mIHRva2VuaXplci5QYXJzZUV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBpPTA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gdG9rZW5zW2ldLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiBsaW5lLnN1YnN0cmluZyhpbmRleCkgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBKU09OLnN0cmluZ2lmeShbJ3N0YXJ0J10pCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW5zOiB0b2tlbnMsCiAgICAgICAgICAgIHN0YXRlOiBKU09OLnN0cmluZ2lmeShzdGFjaykKICAgICAgICB9OwogICAgfTsKfTsKfSx7fV19LHt9LFsiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9qc29uaXFfbGV4ZXIuanMiXSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3hxdWVyeSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCiAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKICB2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgnLi4vYmVoYXZpb3VyJykuQmVoYXZpb3VyOwogIHZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCcuL2NzdHlsZScpLkNzdHlsZUJlaGF2aW91cjsKICB2YXIgWG1sQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cjsKICB2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCmZ1bmN0aW9uIGhhc1R5cGUodG9rZW4sIHR5cGUpIHsKICAgIHZhciBoYXNUeXBlID0gdHJ1ZTsKICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQoJy4nKTsKICAgIHZhciBuZWVkbGVMaXN0ID0gdHlwZS5zcGxpdCgnLicpOwogICAgbmVlZGxlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG5lZWRsZSl7CiAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4T2YobmVlZGxlKSA9PSAtMSkgewogICAgICAgICAgICBoYXNUeXBlID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKICAgIHJldHVybiBoYXNUeXBlOwp9CiAKICB2YXIgWFF1ZXJ5QmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewogICAgICAKICAgICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91ciwgWyJicmFjZXMiLCAicGFyZW5zIiwgInN0cmluZ19kcXVvdGVzIl0pOyAvLyBHZXQgc3RyaW5nIGJlaGF2aW91cgogICAgICB0aGlzLmluaGVyaXQoWG1sQmVoYXZpb3VyKTsgLy8gR2V0IHhtbCBiZWhhdmlvdXIKICAgICAgCiAgICAgIHRoaXMuYWRkKCJhdXRvY2xvc2luZyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7CiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICB2YXIgYXRDdXJzb3IgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZSkucG9wKCk7CiAgICAgICAgICAgIGlmICgodG9rZW4gJiYgdG9rZW4udmFsdWUgPT09ICc+JykgfHwgc3RhdGUgIT09ICJTdGFydFRhZyIpIHJldHVybjsKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhaGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnJykgJiYgIShoYXNUeXBlKHRva2VuLCAndGV4dCcpICYmIHRva2VuLnZhbHVlLm1hdGNoKCcvJykpKXsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgKGhhc1R5cGUodG9rZW4sICdzdHJpbmcnKSB8fCBoYXNUeXBlKHRva2VuLCAna2V5d29yZC5vcGVyYXRvcicpIHx8IGhhc1R5cGUodG9rZW4sICdlbnRpdHkuYXR0cmlidXRlLW5hbWUnKSB8fCBoYXNUeXBlKHRva2VuLCAndGV4dCcpKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWhhc1R5cGUodG9rZW4sICdtZXRhLnRhZycpIHx8IChwcmV2aW91cyAhPT0gbnVsbCAmJiBwcmV2aW91cy52YWx1ZS5tYXRjaCgnLycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZS5zdWJzdHJpbmcoMSk7CiAgICAgICAgICAgIGlmIChhdEN1cnNvcil7CiAgICAgICAgICAgICAgICB2YXIgdGFnID0gdGFnLnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbi5zdGFydCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgIHRleHQ6ICc+JyArICc8LycgKyB0YWcgKyAnPicsCiAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSk7CgogIH07CiAgb29wLmluaGVyaXRzKFhRdWVyeUJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCiAgZXhwb3J0cy5YUXVlcnlCZWhhdmlvdXIgPSBYUXVlcnlCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvanNvbmlxIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94cXVlcnkvanNvbmlxX2xleGVyIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL3hxdWVyeSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIiwiYWNlL2FuY2hvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIEpTT05pcUxleGVyID0gcmVxdWlyZSgiLi94cXVlcnkvanNvbmlxX2xleGVyIikuSlNPTmlxTGV4ZXI7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBYUXVlcnlCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94cXVlcnkiKS5YUXVlcnlCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKdmFyIEFuY2hvciA9IHJlcXVpcmUoIi4uL2FuY2hvciIpLkFuY2hvcjsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLiR0b2tlbml6ZXIgICA9IG5ldyBKU09OaXFMZXhlcigpOwogICAgdGhpcy4kYmVoYXZpb3VyICAgPSBuZXcgWFF1ZXJ5QmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kaGlnaGxpZ2h0UnVsZXMgPSBuZXcgVGV4dEhpZ2hsaWdodFJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY29tcGxldGVyID0gewogICAgICAgIGdldENvbXBsZXRpb25zOiBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIHBvcywgcHJlZml4LCBjYWxsYmFjaykgewogICAgICAgICAgICBpZiAoIXNlc3Npb24uJHdvcmtlcikKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICBzZXNzaW9uLiR3b3JrZXIuZW1pdCgiY29tcGxldGUiLCB7IGRhdGE6IHsgcG9zOiBwb3MsIHByZWZpeDogcHJlZml4IH0gfSk7CiAgICAgICAgICAgIHNlc3Npb24uJHdvcmtlci5vbigiY29tcGxldGUiLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGUuZGF0YSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL1xzKig/OnRoZW58ZWxzZXxyZXR1cm58W3tcKF18PFx3Kz4pXHMqJC8pOwogICAgICAgIGlmIChtYXRjaCkKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKICAgIAogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqW1x9XCldLy50ZXN0KGlucHV0KTsKICAgIH07CiAgICAKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypbXH1cKV0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRSb3csIGVuZFJvdykgewogICAgICAgIHZhciBpLCBsaW5lOwogICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKICAgICAgICB2YXIgcmUgPSAvXlxzKlwoOiguKik6XCkvOwoKICAgICAgICBmb3IgKGk9c3RhcnRSb3c7IGk8PSBlbmRSb3c7IGkrKykgewogICAgICAgICAgICBpZiAoIXJlLnRlc3QoZG9jLmdldExpbmUoaSkpKSB7CiAgICAgICAgICAgICAgICBvdXRkZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKDAsIDAsIDAsIDApOwogICAgICAgIGZvciAoaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CiAgICAgICAgICAgIGxpbmUgPSBkb2MuZ2V0TGluZShpKTsKICAgICAgICAgICAgcmFuZ2Uuc3RhcnQucm93ICA9IGk7CiAgICAgICAgICAgIHJhbmdlLmVuZC5yb3cgICAgPSBpOwogICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uID0gbGluZS5sZW5ndGg7CgogICAgICAgICAgICBkb2MucmVwbGFjZShyYW5nZSwgb3V0ZGVudCA/IGxpbmUubWF0Y2gocmUpWzFdIDogIig6IiArIGxpbmUgKyAiOikiKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgCiAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS94cXVlcnlfd29ya2VyIiwgIlhRdWVyeVdvcmtlciIpOwogICAgICAgIHZhciB0aGF0ID0gdGhpczsKCiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKICAgICAgICAKICAgICAgICB3b3JrZXIub24oIm9rIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgd29ya2VyLm9uKCJtYXJrZXJzIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgICB0aGF0LmFkZE1hcmtlcnMoZS5kYXRhLCBzZXNzaW9uKTsKICAgICAgICB9KTsKIAogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwogCiAgICB0aGlzLnJlbW92ZU1hcmtlcnMgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIG1hcmtlcnMgPSBzZXNzaW9uLmdldE1hcmtlcnMoZmFsc2UpOwogICAgICAgIGZvciAodmFyIGlkIGluIG1hcmtlcnMpIHsKICAgICAgICAgICAgaWYgKG1hcmtlcnNbaWRdLmNsYXp6LmluZGV4T2YoJ2xhbmd1YWdlX2hpZ2hsaWdodF8nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2Vzc2lvbi5tYXJrZXJBbmNob3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHNlc3Npb24ubWFya2VyQW5jaG9yc1tpXS5kZXRhY2goKTsKICAgICAgICB9CiAgICAgICAgc2Vzc2lvbi5tYXJrZXJBbmNob3JzID0gW107CiAgICB9OwoKICAgIHRoaXMuYWRkTWFya2VycyA9IGZ1bmN0aW9uKGFubm9zLCBteVNlc3Npb24pIHsKICAgICAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgICAgIAogICAgICAgIGlmICghbXlTZXNzaW9uLm1hcmtlckFuY2hvcnMpIG15U2Vzc2lvbi5tYXJrZXJBbmNob3JzID0gW107CiAgICAgICAgdGhpcy5yZW1vdmVNYXJrZXJzKG15U2Vzc2lvbik7CiAgICAgICAgbXlTZXNzaW9uLmxhbmd1YWdlQW5ub3MgPSBbXTsKICAgICAgICBhbm5vcy5mb3JFYWNoKGZ1bmN0aW9uKGFubm8pIHsKICAgICAgICAgICAgdmFyIGFuY2hvciA9IG5ldyBBbmNob3IobXlTZXNzaW9uLmdldERvY3VtZW50KCksIGFubm8ucG9zLnNsLCBhbm5vLnBvcy5zYyB8fCAwKTsKICAgICAgICAgICAgbXlTZXNzaW9uLm1hcmtlckFuY2hvcnMucHVzaChhbmNob3IpOwogICAgICAgICAgICB2YXIgbWFya2VySWQ7CiAgICAgICAgICAgIHZhciBjb2xEaWZmID0gYW5uby5wb3MuZWMgLSBhbm5vLnBvcy5zYzsKICAgICAgICAgICAgdmFyIHJvd0RpZmYgPSBhbm5vLnBvcy5lbCAtIGFubm8ucG9zLnNsOwogICAgICAgICAgICB2YXIgZ3V0dGVyQW5ubyA9IHsKICAgICAgICAgICAgICAgIGd1dHRlcnRleHQ6IGFubm8ubWVzc2FnZSwKICAgICAgICAgICAgICAgIHR5cGU6IGFubm8ubGV2ZWwgfHwgIndhcm5pbmciLAogICAgICAgICAgICAgICAgdGV4dDogYW5uby5tZXNzYWdlCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVGbG9hdChzaW5nbGUpIHsKICAgICAgICAgICAgICAgIGlmIChtYXJrZXJJZCkKICAgICAgICAgICAgICAgICAgICBteVNlc3Npb24ucmVtb3ZlTWFya2VyKG1hcmtlcklkKTsKICAgICAgICAgICAgICAgIGd1dHRlckFubm8ucm93ID0gYW5jaG9yLnJvdzsKICAgICAgICAgICAgICAgIGlmIChhbm5vLnBvcy5zYyAhPT0gdW5kZWZpbmVkICYmIGFubm8ucG9zLmVjICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoYW5uby5wb3Muc2wsIGFubm8ucG9zLnNjLCBhbm5vLnBvcy5lbCwgYW5uby5wb3MuZWMpOwogICAgICAgICAgICAgICAgICAgIG1hcmtlcklkID0gbXlTZXNzaW9uLmFkZE1hcmtlcihyYW5nZSwgImxhbmd1YWdlX2hpZ2hsaWdodF8iICsgKGFubm8udHlwZSA/IGFubm8udHlwZSA6ICJkZWZhdWx0IikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHNpbmdsZSkgbXlTZXNzaW9uLnNldEFubm90YXRpb25zKG15U2Vzc2lvbi5sYW5ndWFnZUFubm9zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1cGRhdGVGbG9hdCgpOwogICAgICAgICAgICBhbmNob3Iub24oImNoYW5nZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdXBkYXRlRmxvYXQodHJ1ZSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoYW5uby5tZXNzYWdlKSBteVNlc3Npb24ubGFuZ3VhZ2VBbm5vcy5wdXNoKGd1dHRlckFubm8pOwogICAgICAgIH0pOwogICAgICAgIG15U2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhteVNlc3Npb24ubGFuZ3VhZ2VBbm5vcyk7CiAgICB9OyAKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qc29uaXEiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9qc29uaXEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-jsp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgSmF2YUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAiYWJzdHJhY3R8Y29udGludWV8Zm9yfG5ld3xzd2l0Y2h8IiArCiAgICAiYXNzZXJ0fGRlZmF1bHR8Z290b3xwYWNrYWdlfHN5bmNocm9uaXplZHwiICsKICAgICJib29sZWFufGRvfGlmfHByaXZhdGV8dGhpc3wiICsKICAgICJicmVha3xkb3VibGV8aW1wbGVtZW50c3xwcm90ZWN0ZWR8dGhyb3d8IiArCiAgICAiYnl0ZXxlbHNlfGltcG9ydHxwdWJsaWN8dGhyb3dzfCIgKwogICAgImNhc2V8ZW51bXxpbnN0YW5jZW9mfHJldHVybnx0cmFuc2llbnR8IiArCiAgICAiY2F0Y2h8ZXh0ZW5kc3xpbnR8c2hvcnR8dHJ5fCIgKwogICAgImNoYXJ8ZmluYWx8aW50ZXJmYWNlfHN0YXRpY3x2b2lkfCIgKwogICAgImNsYXNzfGZpbmFsbHl8bG9uZ3xzdHJpY3RmcHx2b2xhdGlsZXwiICsKICAgICJjb25zdHxmbG9hdHxuYXRpdmV8c3VwZXJ8d2hpbGV8IiArCiAgICAidmFyIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIik7CgoKICAgIHZhciBsYW5nQ2xhc3NlcyA9ICgKICAgICAgICAiQWJzdHJhY3RNZXRob2RFcnJvcnxBc3NlcnRpb25FcnJvcnxDbGFzc0NpcmN1bGFyaXR5RXJyb3J8IisKICAgICAgICAiQ2xhc3NGb3JtYXRFcnJvcnxEZXByZWNhdGVkfEVudW1Db25zdGFudE5vdFByZXNlbnRFeGNlcHRpb258IisKICAgICAgICAiRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yfElsbGVnYWxBY2Nlc3NFcnJvcnwiKwogICAgICAgICJJbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb258SW5zdGFudGlhdGlvbkVycm9yfEludGVybmFsRXJyb3J8IisKICAgICAgICAiTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb258Tm9TdWNoRmllbGRFcnJvcnxPdmVycmlkZXxQcm9jZXNzfCIrCiAgICAgICAgIlByb2Nlc3NCdWlsZGVyfFNlY3VyaXR5TWFuYWdlcnxTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgIlN1cHByZXNzV2FybmluZ3N8VHlwZU5vdFByZXNlbnRFeGNlcHRpb258VW5rbm93bkVycm9yfCIrCiAgICAgICAgIlVuc2F0aXNmaWVkTGlua0Vycm9yfFVuc3VwcG9ydGVkQ2xhc3NWZXJzaW9uRXJyb3J8VmVyaWZ5RXJyb3J8IisKICAgICAgICAiSW5zdGFudGlhdGlvbkV4Y2VwdGlvbnxJbmRleE91dE9mQm91bmRzRXhjZXB0aW9ufCIrCiAgICAgICAgIkFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnxDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbnwiKwogICAgICAgICJOb1N1Y2hGaWVsZEV4Y2VwdGlvbnxJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb258TnVtYmVyRm9ybWF0RXhjZXB0aW9ufCIrCiAgICAgICAgIlNlY3VyaXR5RXhjZXB0aW9ufFZvaWR8SW5oZXJpdGFibGVUaHJlYWRMb2NhbHxJbGxlZ2FsU3RhdGVFeGNlcHRpb258IisKICAgICAgICAiSW50ZXJydXB0ZWRFeGNlcHRpb258Tm9TdWNoTWV0aG9kRXhjZXB0aW9ufElsbGVnYWxBY2Nlc3NFeGNlcHRpb258IisKICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb258RW51bXxTdHJpY3RNYXRofFBhY2thZ2V8Q29tcGlsZXJ8IisKICAgICAgICAiUmVhZGFibGV8UnVudGltZXxTdHJpbmdCdWlsZGVyfE1hdGh8SW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvcnwiKwogICAgICAgICJOb1N1Y2hNZXRob2RFcnJvcnxUaHJlYWRMb2NhbHxSdW50aW1lUGVybWlzc2lvbnxBcml0aG1ldGljRXhjZXB0aW9ufCIrCiAgICAgICAgIk51bGxQb2ludGVyRXhjZXB0aW9ufExvbmd8SW50ZWdlcnxTaG9ydHxCeXRlfERvdWJsZXxOdW1iZXJ8RmxvYXR8IisKICAgICAgICAiQ2hhcmFjdGVyfEJvb2xlYW58U3RhY2tUcmFjZUVsZW1lbnR8QXBwZW5kYWJsZXxTdHJpbmdCdWZmZXJ8IisKICAgICAgICAiSXRlcmFibGV8VGhyZWFkR3JvdXB8UnVubmFibGV8VGhyZWFkfElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb258IisKICAgICAgICAiU3RhY2tPdmVyZmxvd0Vycm9yfE91dE9mTWVtb3J5RXJyb3J8VmlydHVhbE1hY2hpbmVFcnJvcnwiKwogICAgICAgICJBcnJheVN0b3JlRXhjZXB0aW9ufENsYXNzQ2FzdEV4Y2VwdGlvbnxMaW5rYWdlRXJyb3J8IisKICAgICAgICAiTm9DbGFzc0RlZkZvdW5kRXJyb3J8Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbnxSdW50aW1lRXhjZXB0aW9ufCIrCiAgICAgICAgIkV4Y2VwdGlvbnxUaHJlYWREZWF0aHxFcnJvcnxUaHJvd2FibGV8U3lzdGVtfENsYXNzTG9hZGVyfCIrCiAgICAgICAgIkNsb25lYWJsZXxDbGFzc3xDaGFyU2VxdWVuY2V8Q29tcGFyYWJsZXxTdHJpbmd8T2JqZWN0IgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogInRoaXMiLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGxhbmdDbGFzc2VzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdWzAtOWEtZkEtRl9dKnxbYkJdWzAxXVswMV9dKilbTGxTc0RkRmZZeV0/XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAvWystXT9cZFtcZF9dKig/Oig/OlwuW1xkX10qKT8oPzpbZUVdWystXT9bXGRfXSspPyk/W0xsU3NEZEZmWXldP1xiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICByZWdleDogIihvcGVuKD86XFxzKykpP21vZHVsZSg/PVxccypcXHcpIiwKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICBuZXh0OiBbewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgICAgIG5leHQ6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJcXGIocmVxdWlyZXN8dHJhbnNpdGl2ZXxleHBvcnRzfG9wZW5zfHRvfHVzZXN8cHJvdmlkZXN8d2l0aClcXGIiLAogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQiIAogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXHcrIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIuIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIiLCAvLyBleGl0IGlmIHRoZXJlIGlzIGFueXRoaW5nIGVsc2UKICAgICAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICAKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSmF2YUhpZ2hsaWdodFJ1bGVzID0gSmF2YUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvanNwX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YUhpZ2hsaWdodFJ1bGVzOwoKdmFyIEpzcEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB2YXIgYnVpbHRpblZhcmlhYmxlcyA9ICdyZXF1ZXN0fHJlc3BvbnNlfG91dHxzZXNzaW9ufCcgKwogICAgICAgICAgICAnYXBwbGljYXRpb258Y29uZmlnfHBhZ2VDb250ZXh0fHBhZ2V8RXhjZXB0aW9uJzsKCiAgICB2YXIga2V5d29yZHMgPSAncGFnZXxpbmNsdWRlfHRhZ2xpYic7CgogICAgdmFyIHN0YXJ0UnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiPCUtLSIsCiAgICAgICAgICAgIHB1c2ggOiAianNwLWRjb21tZW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAibWV0YS50YWciLCAvLyBqc3Agb3BlbiB0YWcKICAgICAgICAgICAgcmVnZXggOiAiPCVAP3w8JT0/fDwlIT98PGpzcDpbXj5dKz4iLAogICAgICAgICAgICBwdXNoICA6ICJqc3Atc3RhcnQiCiAgICAgICAgfQogICAgXTsKCiAgICB2YXIgZW5kUnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZyIsIC8vIGpzcCBjbG9zZSB0YWcKICAgICAgICAgICAgcmVnZXggOiAiJT58PFxcL2pzcDpbXj5dKz4iLAogICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXggOiBidWlsdGluVmFyaWFibGVzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleCA6IGtleXdvcmRzCiAgICAgICAgfQogICAgXTsKCiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy4kcnVsZXMpCiAgICAgICAgdGhpcy4kcnVsZXNba2V5XS51bnNoaWZ0LmFwcGx5KHRoaXMuJHJ1bGVzW2tleV0sIHN0YXJ0UnVsZXMpOwoKICAgIHRoaXMuZW1iZWRSdWxlcyhKYXZhSGlnaGxpZ2h0UnVsZXMsICJqc3AtIiwgZW5kUnVsZXMsIFsic3RhcnQiXSk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgImpzcC1kY29tbWVudCIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiLio/LS0lPiIsCiAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgIH1dCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSnNwSGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkpzcEhpZ2hsaWdodFJ1bGVzID0gSnNwSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qc3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qc3BfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEpzcEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qc3BfaGlnaGxpZ2h0X3J1bGVzIikuSnNwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEpzcEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qc3AiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9qc3AiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-jssm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qc3NtX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEpTU01IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5tbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXC9cKi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5tbiIsCiAgICAgICAgICAgICAgICByZWdleDogL1wqXC8vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5ibG9jay5qc3NtIgogICAgICAgICAgICB9XSwKICAgICAgICAgICAgY29tbWVudDogImJsb2NrIGNvbW1lbnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQubGluZS5qc3NtIiwKICAgICAgICAgICAgcmVnZXg6IC9cL1wvLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lLmpzc20iLAogICAgICAgICAgICAgICAgcmVnZXg6IC8kLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQubGluZS5qc3NtIgogICAgICAgICAgICB9XSwKICAgICAgICAgICAgY29tbWVudDogImJsb2NrIGNvbW1lbnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXg6IC9cJHsvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleDogL30vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAia2V5d29yZC5vdGhlciIKICAgICAgICAgICAgfV0sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJqcyBvdXRjYWxscyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4OiAvWzAtOV0qXC5bMC05XSpcLlswLTldKi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJzZW12ZXIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmpzc21MYW5ndWFnZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvZ3JhcGhfbGF5b3V0XHMqOi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJqc3NtIGxhbmd1YWdlIHRva2VucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuanNzbUxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXg6IC9tYWNoaW5lX25hbWVccyo6LywKICAgICAgICAgICAgY29tbWVudDogImpzc20gbGFuZ3VhZ2UgdG9rZW5zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5qc3NtTGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogL21hY2hpbmVfdmVyc2lvblxzKjovLAogICAgICAgICAgICBjb21tZW50OiAianNzbSBsYW5ndWFnZSB0b2tlbnMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmpzc21MYW5ndWFnZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvanNzbV92ZXJzaW9uXHMqOi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJqc3NtIGxhbmd1YWdlIHRva2VucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnRyYW5zaXRpb24uanNzbUFycm93LmxlZ2FsX2xlZ2FsIiwKICAgICAgICAgICAgcmVnZXg6IC88LT4vLAogICAgICAgICAgICBjb21tZW50OiAidHJhbnNpdGlvbnMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbC50cmFuc2l0aW9uLmpzc21BcnJvdy5sZWdhbF9ub25lIiwKICAgICAgICAgICAgcmVnZXg6IC88LS8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJ0cmFuc2l0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnRyYW5zaXRpb24uanNzbUFycm93Lm5vbmVfbGVnYWwiLAogICAgICAgICAgICByZWdleDogLy0+LywKICAgICAgICAgICAgY29tbWVudDogInRyYW5zaXRpb25zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wudHJhbnNpdGlvbi5qc3NtQXJyb3cubWFpbl9tYWluIiwKICAgICAgICAgICAgcmVnZXg6IC88PT4vLAogICAgICAgICAgICBjb21tZW50OiAidHJhbnNpdGlvbnMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbC50cmFuc2l0aW9uLmpzc21BcnJvdy5ub25lX21haW4iLAogICAgICAgICAgICByZWdleDogLz0+LywKICAgICAgICAgICAgY29tbWVudDogInRyYW5zaXRpb25zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wudHJhbnNpdGlvbi5qc3NtQXJyb3cubWFpbl9ub25lIiwKICAgICAgICAgICAgcmVnZXg6IC88PS8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJ0cmFuc2l0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnRyYW5zaXRpb24uanNzbUFycm93LmZvcmNlZF9mb3JjZWQiLAogICAgICAgICAgICByZWdleDogLzx+Pi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJ0cmFuc2l0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnRyYW5zaXRpb24uanNzbUFycm93Lm5vbmVfZm9yY2VkIiwKICAgICAgICAgICAgcmVnZXg6IC9+Pi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJ0cmFuc2l0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnRyYW5zaXRpb24uanNzbUFycm93LmZvcmNlZF9ub25lIiwKICAgICAgICAgICAgcmVnZXg6IC88fi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJ0cmFuc2l0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnRyYW5zaXRpb24uanNzbUFycm93LmxlZ2FsX21haW4iLAogICAgICAgICAgICByZWdleDogLzwtPT4vLAogICAgICAgICAgICBjb21tZW50OiAidHJhbnNpdGlvbnMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbC50cmFuc2l0aW9uLmpzc21BcnJvdy5tYWluX2xlZ2FsIiwKICAgICAgICAgICAgcmVnZXg6IC88PS0+LywKICAgICAgICAgICAgY29tbWVudDogInRyYW5zaXRpb25zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wudHJhbnNpdGlvbi5qc3NtQXJyb3cubGVnYWxfZm9yY2VkIiwKICAgICAgICAgICAgcmVnZXg6IC88LX4+LywKICAgICAgICAgICAgY29tbWVudDogInRyYW5zaXRpb25zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wudHJhbnNpdGlvbi5qc3NtQXJyb3cuZm9yY2VkX2xlZ2FsIiwKICAgICAgICAgICAgcmVnZXg6IC88fi0+LywKICAgICAgICAgICAgY29tbWVudDogInRyYW5zaXRpb25zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wudHJhbnNpdGlvbi5qc3NtQXJyb3cubWFpbl9mb3JjZWQiLAogICAgICAgICAgICByZWdleDogLzw9fj4vLAogICAgICAgICAgICBjb21tZW50OiAidHJhbnNpdGlvbnMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbC50cmFuc2l0aW9uLmpzc21BcnJvdy5mb3JjZWRfbWFpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvPH49Pi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJ0cmFuc2l0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5qc3NtUHJvYmFiaWxpdHkiLAogICAgICAgICAgICByZWdleDogL1swLTldKyUvLAogICAgICAgICAgICBjb21tZW50OiAiZWRnZSBwcm9iYWJpbGl0eSBhbm5vdGF0aW9uIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuanNzbUFjdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCdbXiddKlwnLywKICAgICAgICAgICAgY29tbWVudDogImFjdGlvbiBhbm5vdGF0aW9uIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJlbnRpdHkubmFtZS50YWcuanNzbUxhYmVsLmRvdWJsZXF1b3RlZCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCJbXiJdKlwiLywKICAgICAgICAgICAgY29tbWVudDogImpzc20gbGFiZWwgYW5ub3RhdGlvbiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiZW50aXR5Lm5hbWUudGFnLmpzc21MYWJlbC5hdG9tIiwKICAgICAgICAgICAgcmVnZXg6IC9bYS16QS1aMC05Xy4rJigpI0AhPyxdLywKICAgICAgICAgICAgY29tbWVudDogImpzc20gbGFiZWwgYW5ub3RhdGlvbiIKICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKSlNTTUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0gewogICAgZmlsZVR5cGVzOiBbImpzc20iLCAianNzbV9zdGF0ZSJdLAogICAgbmFtZTogIkpTU00iLAogICAgc2NvcGVOYW1lOiAic291cmNlLmpzc20iCn07CgoKb29wLmluaGVyaXRzKEpTU01IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSlNTTUhpZ2hsaWdodFJ1bGVzID0gSlNTTUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2pzc20iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qc3NtX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSlNTTUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qc3NtX2hpZ2hsaWdodF9ydWxlcyIpLkpTU01IaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBKU1NNSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvanNzbSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2pzc20iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-jsx.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qc3hfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEpzeEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSBsYW5nLmFycmF5VG9NYXAoCiAgICAgICAgKCJicmVha3xkb3xpbnN0YW5jZW9mfHR5cGVvZnxjYXNlfGVsc2V8bmV3fHZhcnxjYXRjaHxmaW5hbGx5fHJldHVybnx2b2lkfGNvbnRpbnVlfGZvcnxzd2l0Y2h8ZGVmYXVsdHx3aGlsZXxmdW5jdGlvbnx0aGlzfCIgKwogICAgICAgICAiaWZ8dGhyb3d8IiArCiAgICAgICAgICJkZWxldGV8aW58dHJ5fCIgKwogICAgICAgICAiY2xhc3N8ZXh0ZW5kc3xzdXBlcnxpbXBvcnR8ZnJvbXxpbnRvfGltcGxlbWVudHN8aW50ZXJmYWNlfHN0YXRpY3xtaXhpbnxvdmVycmlkZXxhYnN0cmFjdHxmaW5hbHwiICsKICAgICAgICAgIm51bWJlcnxpbnR8c3RyaW5nfGJvb2xlYW58dmFyaWFudHwiICsKICAgICAgICAgImxvZ3xhc3NlcnQiKS5zcGxpdCgifCIpCiAgICApOwogICAgCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAoIm51bGx8dHJ1ZXxmYWxzZXxOYU58SW5maW5pdHl8X19GSUxFX198X19MSU5FX198dW5kZWZpbmVkIikuc3BsaXQoInwiKQogICAgKTsKICAgIAogICAgdmFyIHJlc2VydmVkID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiZGVidWdnZXJ8d2l0aHwiICsKICAgICAgICAgImNvbnN0fGV4cG9ydHwiICsKICAgICAgICAgImxldHxwcml2YXRlfHB1YmxpY3x5aWVsZHxwcm90ZWN0ZWR8IiArCiAgICAgICAgICJleHRlcm58bmF0aXZlfGFzfG9wZXJhdG9yfF9fZmFrZV9ffF9fcmVhZG9ubHlfXyIpLnNwbGl0KCJ8IikKICAgICk7CiAgICAKICAgIHZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcYiI7CiAgICAKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09ICJ0aGlzIikKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdG9yYWdlLnR5cGUiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KHZhbHVlKSB8fCByZXNlcnZlZC5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYnVpbGRpbkNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eXz9bQS1aXVthLXpBLVowLTlfXSokLy50ZXN0KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJsYW5ndWFnZS5zdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaWRlbnRpZmllciI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIhfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT18PXwhPXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7PF0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX0+XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICAKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwp9OwoKb29wLmluaGVyaXRzKEpzeEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Kc3hIaWdobGlnaHRSdWxlcyA9IEpzeEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvanN4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvanN4X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKc3hIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vanN4X2hpZ2hsaWdodF9ydWxlcyIpLkpzeEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKZnVuY3Rpb24gTW9kZSgpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBKc3hIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn0Kb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2pzeCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2pzeCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-julia.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9qdWxpYV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBKdWxpYUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7IHN0YXJ0OiAKICAgICAgIFsgeyBpbmNsdWRlOiAnI2Z1bmN0aW9uX2RlY2wnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNmdW5jdGlvbl9jYWxsJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjdHlwZV9kZWNsJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcja2V5d29yZCcgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI29wZXJhdG9yJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjbnVtYmVyJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjc3RyaW5nJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudCcgfSBdLAogICAgICAnI2JyYWNrZXQnOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuYnJhY2tldC5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdcXCh8XFwpfFxcW3xcXF18XFx7fFxcfXwsJyB9IF0sCiAgICAgICcjY29tbWVudCc6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50Lmp1bGlhJywKICAgICAgICAgICAgICAnY29tbWVudC5saW5lLm51bWJlci1zaWduLmp1bGlhJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKCMpKD8hXFx7KSguKiQpJ30gXSwKICAgICAgJyNmdW5jdGlvbl9jYWxsJzogCiAgICAgICBbIHsgdG9rZW46IFsgJ3N1cHBvcnQuZnVuY3Rpb24uanVsaWEnLCAndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhbYS16QS1aMC05X10rIT8pKFtcXHdcXHhmZi1cXHUyMThlXFx1MjQ1NS1cXHVmZmZmXSpcXCgpJ30gXSwKICAgICAgJyNmdW5jdGlvbl9kZWNsJzogCiAgICAgICBbIHsgdG9rZW46IFsgJ2tleXdvcmQub3RoZXIuanVsaWEnLCAnbWV0YS5mdW5jdGlvbi5qdWxpYScsCiAgICAgICAgICAgICAgICdlbnRpdHkubmFtZS5mdW5jdGlvbi5qdWxpYScsICdtZXRhLmZ1bmN0aW9uLmp1bGlhJywndGV4dCcgXSwKICAgICAgICAgICByZWdleDogJyhmdW5jdGlvbnxtYWNybykoXFxzKikoW2EtekEtWjAtOV9cXHtdKyE/KShbXFx3XFx4ZmYtXFx1MjE4ZVxcdTI0NTUtXFx1ZmZmZl0qKShbKFxcXFx7XSknfSBdLAogICAgICAnI2tleXdvcmQnOgogICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vdGhlci5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpmdW5jdGlvbnx0eXBlfGltbXV0YWJsZXxtYWNyb3xxdW90ZXxhYnN0cmFjdHxiaXRzdHlwZXx0eXBlYWxpYXN8bW9kdWxlfGJhcmVtb2R1bGV8bmV3KVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzppZnxlbHNlfGVsc2VpZnx3aGlsZXxmb3J8aW58YmVnaW58bGV0fGVuZHxkb3x0cnl8Y2F0Y2h8ZmluYWxseXxyZXR1cm58YnJlYWt8Y29udGludWUpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3RvcmFnZS5tb2RpZmllci52YXJpYWJsZS5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpnbG9iYWx8bG9jYWx8Y29uc3R8ZXhwb3J0fGltcG9ydHxpbXBvcnRhbGx8dXNpbmcpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUubWFjcm8uanVsaWEnLCByZWdleDogJ0BbXFx3XFx4ZmYtXFx1MjE4ZVxcdTI0NTUtXFx1ZmZmZl0rXFxiJyB9IF0sCiAgICAgICcjbnVtYmVyJzogCiAgICAgICBbIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLmp1bGlhJywKICAgICAgICAgICByZWdleDogJ1xcYjAoPzp4fFgpWzAtOWEtZkEtRl0qfCg/OlxcYlswLTldK1xcLj9bMC05XSp8XFwuWzAtOV0rKSg/Oig/OmV8RSkoPzpcXCt8LSk/WzAtOV0qKT8oPzppbSk/fFxcYkluZig/OjMyKT9cXGJ8XFxiTmFOKD86MzIpP1xcYnxcXGJ0cnVlXFxifFxcYmZhbHNlXFxiJyB9IF0sCiAgICAgICcjb3BlcmF0b3InOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IudXBkYXRlLmp1bGlhJywKICAgICAgICAgICByZWdleDogJz18Oj18XFwrPXwtPXxcXCo9fC89fC8vPXxcXC4vLz18XFwuXFwqPXxcXFxcPXxcXC5cXFxcPXxePXxcXC5ePXwlPXxcXHw9fCY9fFxcJD18PDw9fD4+PScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IudGVybmFyeS5qdWxpYScsIHJlZ2V4OiAnXFw/fDonIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmJvb2xlYW4uanVsaWEnLAogICAgICAgICAgIHJlZ2V4OiAnXFx8XFx8fCYmfCEnIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmFycm93Lmp1bGlhJywgcmVnZXg6ICctPnw8LXwtLT4nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnJlbGF0aW9uLmp1bGlhJywKICAgICAgICAgICByZWdleDogJz58PHw+PXw8PXw9PXwhPXxcXC4+fFxcLjx8XFwuPj18XFwuPj18XFwuPT18XFwuIT18XFwuPXxcXC4hfDw6fDo+JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5yYW5nZS5qdWxpYScsIHJlZ2V4OiAnOicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3Iuc2hpZnQuanVsaWEnLCByZWdleDogJzw8fD4+JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5iaXR3aXNlLmp1bGlhJywgcmVnZXg6ICdcXHx8XFwmfH4nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmFyaXRobWV0aWMuanVsaWEnLAogICAgICAgICAgIHJlZ2V4OiAnXFwrfC18XFwqfFxcLlxcKnwvfFxcLi98Ly98XFwuLy98JXxcXC4lfFxcXFx8XFwuXFxcXHxcXF58XFwuXFxeJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5pc2EuanVsaWEnLCByZWdleDogJzo6JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5kb3RzLmp1bGlhJywKICAgICAgICAgICByZWdleDogJ1xcLig/PVthLXpBLVpdKXxcXC5cXC4rJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5pbnRlcnBvbGF0aW9uLmp1bGlhJywKICAgICAgICAgICByZWdleDogJ1xcJCM/KD89LiknIH0sCiAgICAgICAgIHsgdG9rZW46IFsgJ3ZhcmlhYmxlJywgJ2tleXdvcmQub3BlcmF0b3IudHJhbnNwb3NlZC12YXJpYWJsZS5qdWxpYScgXSwKICAgICAgICAgICByZWdleDogJyhbXFx3XFx4ZmYtXFx1MjE4ZVxcdTI0NTUtXFx1ZmZmZl0rKSgoPzpcJ3xcXC5cJykqXFwuP1wnKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgIHJlZ2V4OiAnXFxbfFxcKCd9LAogICAgICAgICB7IHRva2VuOiBbICd0ZXh0JywgJ2tleXdvcmQub3BlcmF0b3IudHJhbnNwb3NlZC1tYXRyaXguanVsaWEnIF0sCiAgICAgICAgICAgIHJlZ2V4OiAiKFtcXF1cXCldKSgoPzonfFxcLicpKlxcLj8nKSJ9IF0sCiAgICAgICcjc3RyaW5nJzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5qdWxpYScsCiAgICAgICAgICAgICAgICByZWdleDogJ1wnJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3N0cmluZ19lc2NhcGVkX2NoYXInIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLnNpbmdsZS5qdWxpYScgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmp1bGlhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmdfZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuanVsaWEnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uanVsaWEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiW1xcd1xceGZmLVxcdTIxOGVcXHUyNDU1LVxcdWZmZmZdKyInLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuanVsaWEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICciW1xcd1xceGZmLVxcdTIxOGVcXHUyNDU1LVxcdWZmZmZdKicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmdfY3VzdG9tX2VzY2FwZWRfY2hhcicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQuY3VzdG9tLWRvdWJsZS5qdWxpYScgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdgJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmp1bGlhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnYCcsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmdfZXNjYXBlZF9jaGFyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5iYWNrdGljay5qdWxpYScgfSBdIH0gXSwKICAgICAgJyNzdHJpbmdfY3VzdG9tX2VzY2FwZWRfY2hhcic6IFsgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuanVsaWEnLCByZWdleDogJ1xcXFwiJyB9IF0sCiAgICAgICcjc3RyaW5nX2VzY2FwZWRfY2hhcic6IAogICAgICAgWyB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5qdWxpYScsCiAgICAgICAgICAgcmVnZXg6ICdcXFxcKD86XFxcXHxbMC0zXVxcZHssMn18WzQtN11cXGQ/fHhbYS1mQS1GMC05XXssMn18dVthLWZBLUYwLTldeyw0fXxVW2EtZkEtRjAtOV17LDh9fC4pJyB9IF0sCiAgICAgICcjdHlwZV9kZWNsJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdrZXl3b3JkLmNvbnRyb2wudHlwZS5qdWxpYScsCiAgICAgICAgICAgICAgJ21ldGEudHlwZS5qdWxpYScsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLnR5cGUuanVsaWEnLAogICAgICAgICAgICAgICdlbnRpdHkub3RoZXIuaW5oZXJpdGVkLWNsYXNzLmp1bGlhJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmluaGVyaXRhbmNlLmp1bGlhJywKICAgICAgICAgICAgICAnZW50aXR5Lm90aGVyLmluaGVyaXRlZC1jbGFzcy5qdWxpYScgXSwKICAgICAgICAgICByZWdleDogJyh0eXBlfGltbXV0YWJsZSkoXFxzKykoW2EtekEtWjAtOV9dKykoPzooXFxzKikoPDopKFxccypbLmEtekEtWjAtOV86XSspKT8nIH0sCiAgICAgICAgIHsgdG9rZW46IFsgJ290aGVyLnR5cGVkLXZhcmlhYmxlLmp1bGlhJywgJ3N1cHBvcnQudHlwZS5qdWxpYScgXSwKICAgICAgICAgICByZWdleDogJyhbYS16QS1aMC05X10rKSg6OlthLXpBLVowLTlfe31dKyknIH0gXSB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpKdWxpYUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0geyBmaWxlVHlwZXM6IFsgJ2psJyBdLAogICAgICBmaXJzdExpbmVNYXRjaDogJ14jIS4qXFxianVsaWFcXHMqJCcsCiAgICAgIGZvbGRpbmdTdGFydE1hcmtlcjogJ15cXHMqKD86aWZ8d2hpbGV8Zm9yfGJlZ2lufGZ1bmN0aW9ufG1hY3JvfG1vZHVsZXxiYXJlbW9kdWxlfHR5cGV8aW1tdXRhYmxlfGxldClcXGIoPyEuKlxcYmVuZFxcYikuKiQnLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJ15cXHMqKD86ZW5kKVxcYi4qJCcsCiAgICAgIG5hbWU6ICdKdWxpYScsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5qdWxpYScgfTsKCgpvb3AuaW5oZXJpdHMoSnVsaWFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSnVsaWFIaWdobGlnaHRSdWxlcyA9IEp1bGlhSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvanVsaWEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qdWxpYV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEp1bGlhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2p1bGlhX2hpZ2hsaWdodF9ydWxlcyIpLkp1bGlhSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSnVsaWFIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSAiIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2p1bGlhIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvanVsaWEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-kotlin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9rb3RsaW5faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgS290bGluSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgaW5jbHVkZTogIiNjb21tZW50cyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlci5rb3RsaW4iLAogICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLnBhY2thZ2Uua290bGluIiwKICAgICAgICAgICAgICAgICJ0ZXh0IgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogL14oXHMqKShwYWNrYWdlKVxiKD86KFxzKikoW14gOyRdKykoXHMqKSk/LwogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNpbXBvcnRzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNzdGF0ZW1lbnRzIgogICAgICAgIH1dLAogICAgICAgICIjY2xhc3NlcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvKD89XHMqKD86Y29tcGFuaW9ufGNsYXNzfG9iamVjdHxpbnRlcmZhY2UpKS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC99fCg/PSQpLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3RoZXIua290bGluIiwgInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXGIoKD86Y29tcGFuaW9uXHMqKT8pKGNsYXNzfG9iamVjdHxpbnRlcmZhY2UpXGIvLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89PHx7fFwofDopLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vdGhlci5rb3RsaW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXGJvYmplY3RcYi8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImVudGl0eS5uYW1lLnR5cGUuY2xhc3Mua290bGluIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1x3Ky8KICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogLzwvLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvPi8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI2dlbmVyaWNzIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCgvLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCkvLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNwYXJhbWV0ZXJzIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2xhcmF0aW9uLmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogLzovLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89e3wkKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImVudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3Mua290bGluIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1x3Ky8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCgvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCkvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNleHByZXNzaW9ucyIKICAgICAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHsvLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXH0vLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNzdGF0ZW1lbnRzIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiI2NvbW1lbnRzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC9cL1wqLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogL1wqXC8vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5ibG9jay5rb3RsaW4iCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5rb3RsaW4iLAogICAgICAgICAgICAgICAgImNvbW1lbnQubGluZS5kb3VibGUtc2xhc2gua290bGluIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLyhccyopKFwvXC8pKC4qJCkvCiAgICAgICAgfV0sCiAgICAgICAgIiNjb25zdGFudHMiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzp0cnVlfGZhbHNlfG51bGx8dGhpc3xzdXBlcilcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogL1xiKD86MCg/Onh8WClbMC05YS1mQS1GXSp8KD86WzAtOV0rXC4/WzAtOV0qfFwuWzAtOV0rKSg/Oig/OmV8RSkoPzpcK3wtKT9bMC05XSspPykoPzpbTGxGZlV1RGRdfFVMfHVsKT9cYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQub3RoZXIua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC9cYltBLVpdW0EtWjAtOV9dK1xiLwogICAgICAgIH1dLAogICAgICAgICIjZXhwcmVzc2lvbnMiOiBbewogICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICByZWdleDogL1woLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogL1wpLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjZXhwcmVzc2lvbnMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3R5cGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNzdHJpbmdzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNjb25zdGFudHMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI2NvbW1lbnRzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNrZXl3b3JkcyIKICAgICAgICB9XSwKICAgICAgICAiI2Z1bmN0aW9ucyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvKD89XHMqZnVuKS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC99fCg/PSQpLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vdGhlci5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cYmZ1blxiLywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyg/PVwoKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvPC8sCiAgICAgICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8+LywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjZ2VuZXJpY3MiCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogWyJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uLmtvdGxpbiJdLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKCg/OltcLjxcPz5cd10rXC4pPykoXHcrKS8KICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogL1woLywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1wpLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjcGFyYW1ldGVycyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5kZWNsYXJhdGlvbi5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC86LywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyg/PXt8PXwkKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3R5cGVzIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHsvLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89XH0pLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjc3RhdGVtZW50cyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogLz0vLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89JCkvLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNleHByZXNzaW9ucyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiNnZW5lcmljcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5kZWNsYXJhdGlvbi5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogLzovLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89LHw+KS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3R5cGVzIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNrZXl3b3JkcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS50eXBlLmdlbmVyaWMua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC9cdysvCiAgICAgICAgfV0sCiAgICAgICAgIiNnZXR0ZXJzLWFuZC1zZXR0ZXJzIjogW3sKICAgICAgICAgICAgdG9rZW46IFsiZW50aXR5Lm5hbWUuZnVuY3Rpb24ua290bGluIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXg6IC9cYihnZXQpXGIoXHMqXChccypcKSkvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXH18KD89XGJzZXRcYil8JC8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuYXNzaWdubWVudC5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC89LywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyg/PSR8XGJzZXRcYikvLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNleHByZXNzaW9ucyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogL1x7LywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1x9LywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjZXhwcmVzc2lvbnMiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsiZW50aXR5Lm5hbWUuZnVuY3Rpb24ua290bGluIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXg6IC9cYihzZXQpXGIoXHMqKSg/PVwoKS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cfXwoPz1cYmdldFxiKXwkLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogL1woLywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1wpLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjcGFyYW1ldGVycyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogLz0vLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89JHxcYnNldFxiKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI2V4cHJlc3Npb25zIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHsvLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXH0vLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNleHByZXNzaW9ucyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiNpbXBvcnRzIjogW3sKICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJrZXl3b3JkLm90aGVyLmtvdGxpbiIsCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlci5rb3RsaW4iCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvXihccyopKGltcG9ydCkoXHMrW14gJF0rXHMrKSgoPzphcyk/KS8KICAgICAgICB9XSwKICAgICAgICAiI2tleXdvcmRzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLm1vZGlmaWVyLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzp2YXJ8dmFsfHB1YmxpY3xwcml2YXRlfHByb3RlY3RlZHxhYnN0cmFjdHxmaW5hbHxlbnVtfG9wZW58YXR0cmlidXRlfGFubm90YXRpb258b3ZlcnJpZGV8aW5saW5lfHZhcnx2YWx8dmFyYXJnfGxhenl8aW58b3V0fGludGVybmFsfGRhdGF8dGFpbHJlY3xvcGVyYXRvcnxpbmZpeHxjb25zdHx5aWVsZHx0eXBlYWxpYXN8dHlwZW9mKVxiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wuY2F0Y2gtZXhjZXB0aW9uLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzp0cnl8Y2F0Y2h8ZmluYWxseXx0aHJvdylcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzppZnxlbHNlfHdoaWxlfGZvcnxkb3xyZXR1cm58d2hlbnx3aGVyZXxicmVha3xjb250aW51ZSlcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogL1xiKD86aW58aXN8YXN8YXNzZXJ0KVxiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmNvbXBhcmlzb24ua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC89PXwhPXw9PT18IT09fDw9fD49fDx8Pi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvPS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5kZWNsYXJhdGlvbi5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogLzovCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuZG90LmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXC4vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuaW5jcmVtZW50LWRlY3JlbWVudC5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogL1wtXC18XCtcKy8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hcml0aG1ldGljLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXC18XCt8XCp8XC98JS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hcml0aG1ldGljLmFzc2lnbi5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogL1wrPXxcLT18XCo9fFwvPS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5sb2dpY2FsLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvIXwmJnxcfFx8LwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLnJhbmdlLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXC5cLi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24udGVybWluYXRvci5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogLzsvCiAgICAgICAgfV0sCiAgICAgICAgIiNuYW1lc3BhY2VzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGJuYW1lc3BhY2VcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXHsvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXH0vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiNzdGF0ZW1lbnRzIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIjcGFyYW1ldGVycyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5kZWNsYXJhdGlvbi5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogLzovLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89LHxcKXw9KS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3R5cGVzIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2xhcmF0aW9uLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvPS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8oPz0sfFwpKS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI2V4cHJlc3Npb25zIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNrZXl3b3JkcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyLmZ1bmN0aW9uLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXHcrLwogICAgICAgIH1dLAogICAgICAgICIjc3RhdGVtZW50cyI6IFt7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjbmFtZXNwYWNlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjdHlwZWRlZnMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI2NsYXNzZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI2Z1bmN0aW9ucyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjdmFyaWFibGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNnZXR0ZXJzLWFuZC1zZXR0ZXJzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNleHByZXNzaW9ucyIKICAgICAgICB9XSwKICAgICAgICAiI3N0cmluZ3MiOiBbewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmtvdGxpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvIiIiLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogLyIiIi8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlci50ZW1wbGF0ZS5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cJFx3K3xcJFx7W15cfV0rXH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cXC4vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQudGhpcmQua290bGluIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQua290bGluIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlci50ZW1wbGF0ZS5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cJFx3K3xcJFx7W15cfV0rXH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cXC4vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLmtvdGxpbiIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4ua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC8nLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogLycvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogL1xcLi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1b3RlZC5zaW5nbGUua290bGluIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5rb3RsaW4iLAogICAgICAgICAgICByZWdleDogL2AvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQua290bGluIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLnNpbmdsZS5rb3RsaW4iCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiN0eXBlZGVmcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvKD89XHMqdHlwZSkvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD89JCkvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyLmtvdGxpbiIsCiAgICAgICAgICAgICAgICByZWdleDogL1xidHlwZVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC88LywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLz4vLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNnZW5lcmljcyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjZXhwcmVzc2lvbnMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiN0eXBlcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS50eXBlLmJ1aWxkaW4ua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OkFueXxVbml0fFN0cmluZ3xJbnR8Qm9vbGVhbnxDaGFyfExvbmd8RG91YmxlfEZsb2F0fFNob3J0fEJ5dGV8ZHluYW1pYylcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS50eXBlLmJ1aWxkaW4uYXJyYXkua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OkludEFycmF5fEJvb2xlYW5BcnJheXxDaGFyQXJyYXl8TG9uZ0FycmF5fERvdWJsZUFycmF5fEZsb2F0QXJyYXl8U2hvcnRBcnJheXxCeXRlQXJyYXkpXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZS5idWlsZGluLmNvbGxlY3Rpb24ua290bGluIiwKICAgICAgICAgICAgICAgICJ0ZXh0IgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogL1xiKEFycmF5fExpc3R8TWFwKSg8XGIpLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogLz4vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiN0eXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIiNrZXl3b3JkcyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXHcrPC8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8+LywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjdHlwZXMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIja2V5d29yZHMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkLm9wZXJhdG9yLnR1cGxlLmtvdGxpbiIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4OiAvKCMpKFwoKS8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI2V4cHJlc3Npb25zIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXg6IC9cey8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cfS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI3N0YXRlbWVudHMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICByZWdleDogL1woLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogL1wpLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjdHlwZXMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuZGVjbGFyYXRpb24ua290bGluIiwKICAgICAgICAgICAgcmVnZXg6IC8tPi8KICAgICAgICB9XSwKICAgICAgICAiI3ZhcmlhYmxlcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAvKD89XHMqKD86dmFyfHZhbCkpLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleDogLyg/PTp8PXwkKS8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3RoZXIua290bGluIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzp2YXJ8dmFsKVxiLywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyg/PTp8PXwkKS8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvPC8sCiAgICAgICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8+LywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjZ2VuZXJpY3MiCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogWyJ0ZXh0IiwgImVudGl0eS5uYW1lLnZhcmlhYmxlLmtvdGxpbiJdLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvKCg/OltcLjxcPz5cd10rXC4pPykoXHcrKS8KICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5kZWNsYXJhdGlvbi5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC86LywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyg/PT18JCkvLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiN0eXBlcyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiAiI2dldHRlcnMtYW5kLXNldHRlcnMiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuYXNzaWdubWVudC5rb3RsaW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC89LywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogLyg/PSQpLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICIjZXhwcmVzc2lvbnMiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIiNnZXR0ZXJzLWFuZC1zZXR0ZXJzIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfV0KICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKS290bGluSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7CiAgICBmaWxlVHlwZXM6IFsia3QiLCAia3RzIl0sCiAgICBuYW1lOiAiS290bGluIiwKICAgIHNjb3BlTmFtZTogInNvdXJjZS5Lb3RsaW4iCn07CgoKb29wLmluaGVyaXRzKEtvdGxpbkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Lb3RsaW5IaWdobGlnaHRSdWxlcyA9IEtvdGxpbkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2tvdGxpbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2tvdGxpbl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBLb3RsaW5IaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4va290bGluX2hpZ2hsaWdodF9ydWxlcyIpLktvdGxpbkhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEtvdGxpbkhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2tvdGxpbiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2tvdGxpbiJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-latex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sYXRleF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBMYXRleEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7ICAKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiUuKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJscGFyZW4iLCAidmFyaWFibGUucGFyYW1ldGVyIiwgInJwYXJlbiIsICJscGFyZW4iLCAic3RvcmFnZS50eXBlIiwgInJwYXJlbiJdLAogICAgICAgICAgICByZWdleCA6ICIoXFxcXCg/OmRvY3VtZW50Y2xhc3N8dXNlcGFja2FnZXxpbnB1dCkpKD86KFxcWykoW15cXF1dKikoXFxdKSk/KHspKFtefV0qKSh9KSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwibHBhcmVuIiwgInZhcmlhYmxlLnBhcmFtZXRlciIsICJycGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAiKFxcXFwoPzpsYWJlbHx2P3JlZnxjaXRlKD86W157XSopKSkoPzooeykoW159XSopKH0pKT8iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcYmVnaW4pKHspKHZlcmJhdGltKSh9KSIsCiAgICAgICAgICAgIG5leHQgOiAidmVyYmF0aW0iCiAgICAgICAgfSwgIHsKICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJscGFyZW4iLCAidmFyaWFibGUucGFyYW1ldGVyIiwgInJwYXJlbiJdLAogICAgICAgICAgICByZWdleCA6ICIoXFxcXGJlZ2luKSh7KShsc3RsaXN0aW5nKSh9KSIsCiAgICAgICAgICAgIG5leHQgOiAibHN0bGlzdGluZyIKICAgICAgICB9LCAgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcKD86YmVnaW58ZW5kKSkoeykoW1xcdypdKikofSkiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICByZWdleCA6IC9cXHZlcmJcYlwqPy8sCiAgICAgICAgICAgIG5leHQgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQub3BlcmF0b3IiLCAic3RyaW5nIiwgImtleXdvcmQub3BlcmF0b3IiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiguKSguKj8pKFxcMXwkKXwiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXFxbYS16QS1aXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXFteYS16QS1aXT8iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXCR7MSwyfSIsCiAgICAgICAgICAgIG5leHQgIDogImVxdWF0aW9uIgogICAgICAgIH1dLAogICAgICAgICJlcXVhdGlvbiIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiJS4qJCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcJHsxLDJ9IiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCg/OlteYS16QS1aXXxbYS16QS1aXSspIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZXJyb3IiLCAKICAgICAgICAgICAgcmVnZXggOiAiXlxccyokIiwgCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiIAogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAidmVyYmF0aW0iOiBbewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcZW5kKSh7KSh2ZXJiYXRpbSkofSkiLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInRleHQiCiAgICAgICAgfV0sCiAgICAgICAgImxzdGxpc3RpbmciOiBbewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcZW5kKSh7KShsc3RsaXN0aW5nKSh9KSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAidGV4dCIKICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9Owpvb3AuaW5oZXJpdHMoTGF0ZXhIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTGF0ZXhIaWdobGlnaHRSdWxlcyA9IExhdGV4SGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9sYXRleCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGtleXdvcmRMZXZlbHMgPSB7CiAgICAiXFxzdWJwYXJhZ3JhcGgiOiAxLAogICAgIlxccGFyYWdyYXBoIjogMiwKICAgICJcXHN1YnN1YnN1YnNlY3Rpb24iOiAzLAogICAgIlxcc3Vic3Vic2VjdGlvbiI6IDQsCiAgICAiXFxzdWJzZWN0aW9uIjogNSwKICAgICJcXHNlY3Rpb24iOiA2LAogICAgIlxcY2hhcHRlciI6IDcsCiAgICAiXFxwYXJ0IjogOCwKICAgICJcXGJlZ2luIjogOSwKICAgICJcXGVuZCI6IDEwCn07Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKCm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC9eXHMqXFwoYmVnaW4pfFxzKlxcKHBhcnR8Y2hhcHRlcnwoPzpzdWIpKig/OnNlY3Rpb258cGFyYWdyYXBoKSlcYnx7XHMqJC87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15ccypcXChlbmQpXGJ8XlxzKn0vOwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5leGVjKGxpbmUpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRleEJsb2NrKHNlc3Npb24sIHJvdywgbWF0Y2hbMF0ubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgIGlmIChtYXRjaFsyXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxhdGV4U2VjdGlvbihzZXNzaW9uLCByb3csIG1hdGNoWzBdLmxlbmd0aCAtIDEpOwoKICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCAieyIsIHJvdywgbWF0Y2guaW5kZXgpOwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5leGVjKGxpbmUpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXRleEJsb2NrKHNlc3Npb24sIHJvdywgbWF0Y2hbMF0ubGVuZ3RoIC0gMSk7CgogICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sICJ9Iiwgcm93LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmxhdGV4QmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIGNvbHVtbiwgcmV0dXJuUmFuZ2UpIHsKICAgICAgICB2YXIga2V5d29yZHMgPSB7CiAgICAgICAgICAgICJcXGJlZ2luIjogMSwKICAgICAgICAgICAgIlxcZW5kIjogLTEKICAgICAgICB9OwoKICAgICAgICB2YXIgc3RyZWFtID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBjb2x1bW4pOwogICAgICAgIHZhciB0b2tlbiA9IHN0cmVhbS5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICBpZiAoIXRva2VuIHx8ICEodG9rZW4udHlwZSA9PSAic3RvcmFnZS50eXBlIiB8fCB0b2tlbi50eXBlID09ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlIikpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHZhbCA9IHRva2VuLnZhbHVlOwogICAgICAgIHZhciBkaXIgPSBrZXl3b3Jkc1t2YWxdOwoKICAgICAgICB2YXIgZ2V0VHlwZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgdG9rZW4gPSBzdHJlYW0uc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgdmFyIHR5cGUgPSB0b2tlbi50eXBlID09ICJscGFyZW4iID9zdHJlYW0uc3RlcEZvcndhcmQoKS52YWx1ZSA6ICIiOwogICAgICAgICAgICBpZiAoZGlyID09PSAtMSkgewogICAgICAgICAgICAgICAgc3RyZWFtLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgaWYgKHR5cGUpCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0eXBlOwogICAgICAgIH07CiAgICAgICAgdmFyIHN0YWNrID0gW2dldFR5cGUoKV07CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gZGlyID09PSAtMSA/IHN0cmVhbS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSA6IHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aDsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CgogICAgICAgIHN0cmVhbS5zdGVwID0gZGlyID09PSAtMSA/IHN0cmVhbS5zdGVwQmFja3dhcmQgOiBzdHJlYW0uc3RlcEZvcndhcmQ7CiAgICAgICAgd2hpbGUodG9rZW4gPSBzdHJlYW0uc3RlcCgpKSB7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgISh0b2tlbi50eXBlID09ICJzdG9yYWdlLnR5cGUiIHx8IHRva2VuLnR5cGUgPT0gImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUiKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBrZXl3b3Jkc1t0b2tlbi52YWx1ZV07CiAgICAgICAgICAgIGlmICghbGV2ZWwpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlKCk7CiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gZGlyKQogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0eXBlKTsKICAgICAgICAgICAgZWxzZSBpZiAoc3RhY2suc2hpZnQoKSAhPT0gdHlwZSB8fCAhc3RhY2subGVuZ3RoKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhY2subGVuZ3RoKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgCiAgICAgICAgaWYgKGRpciA9PSAxKSB7CiAgICAgICAgICAgIHN0cmVhbS5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgc3RyZWFtLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAocmV0dXJuUmFuZ2UpCiAgICAgICAgICAgIHJldHVybiBzdHJlYW0uZ2V0Q3VycmVudFRva2VuUmFuZ2UoKTsKCiAgICAgICAgdmFyIHJvdyA9IHN0cmVhbS5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICBpZiAoZGlyID09PSAtMSkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCwgc3RhcnRSb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCByb3csIHN0cmVhbS5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSk7CiAgICB9OwoKICAgIHRoaXMubGF0ZXhTZWN0aW9uID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgc3RyZWFtID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBjb2x1bW4pOwogICAgICAgIHZhciB0b2tlbiA9IHN0cmVhbS5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUgIT0gInN0b3JhZ2UudHlwZSIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBrZXl3b3JkTGV2ZWxzW3Rva2VuLnZhbHVlXSB8fCAwOwogICAgICAgIHZhciBzdGFja0RlcHRoID0gMDsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSh0b2tlbiA9IHN0cmVhbS5zdGVwRm9yd2FyZCgpKSB7CiAgICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAic3RvcmFnZS50eXBlIikKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBrZXl3b3JkTGV2ZWxzW3Rva2VuLnZhbHVlXSB8fCAwOwoKICAgICAgICAgICAgaWYgKGxldmVsID49IDkpIHsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tEZXB0aCkKICAgICAgICAgICAgICAgICAgICBlbmRSb3cgPSBzdHJlYW0uZ2V0Q3VycmVudFRva2VuUm93KCkgLSAxOwogICAgICAgICAgICAgICAgc3RhY2tEZXB0aCArPSBsZXZlbCA9PSA5ID8gMSA6IC0gMTsKICAgICAgICAgICAgICAgIGlmIChzdGFja0RlcHRoIDwgMCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA+PSBzdGFydExldmVsKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXN0YWNrRGVwdGgpCiAgICAgICAgICAgIGVuZFJvdyA9IHN0cmVhbS5nZXRDdXJyZW50VG9rZW5Sb3coKSAtIDE7CgogICAgICAgIHdoaWxlIChlbmRSb3cgPiByb3cgJiYgIS9cUy8udGVzdChzZXNzaW9uLmdldExpbmUoZW5kUm93KSkpCiAgICAgICAgICAgIGVuZFJvdy0tOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICByb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCwKICAgICAgICAgICAgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgKICAgICAgICApOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sYXRleCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2xhdGV4X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2xhdGV4Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgTGF0ZXhIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbGF0ZXhfaGlnaGxpZ2h0X3J1bGVzIikuTGF0ZXhIaWdobGlnaHRSdWxlczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIExhdGV4Rm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvbGF0ZXgiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTGF0ZXhIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IExhdGV4Rm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoeyBicmFjZXM6IHRydWUgfSk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnR5cGUgPSAidGV4dCI7CiAgICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIlIjsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9sYXRleCI7CiAgICAKICAgIHRoaXMuZ2V0TWF0Y2hpbmcgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIGNvbHVtbikgewogICAgICAgIGlmIChyb3cgPT0gdW5kZWZpbmVkKQogICAgICAgICAgICByb3cgPSBzZXNzaW9uLnNlbGVjdGlvbi5sZWFkOwogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIGNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHJvdyA9IHJvdy5yb3c7CiAgICAgICAgfQoKICAgICAgICB2YXIgc3RhcnRUb2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIGNvbHVtbik7CiAgICAgICAgaWYgKCFzdGFydFRva2VuKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKHN0YXJ0VG9rZW4udmFsdWUgPT0gIlxcYmVnaW4iIHx8IHN0YXJ0VG9rZW4udmFsdWUgPT0gIlxcZW5kIikgewogICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkaW5nUnVsZXMubGF0ZXhCbG9jayhzZXNzaW9uLCByb3csIGNvbHVtbiwgdHJ1ZSk7CiAgICAgICAgfQogICAgfTsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2xhdGV4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-less.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2xlc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCcuL2Nzc19oaWdobGlnaHRfcnVsZXMnKTsKCnZhciBMZXNzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCgogICAgdmFyIGtleXdvcmRMaXN0ID0gIkBpbXBvcnR8QG1lZGlhfEBmb250LWZhY2V8QGtleWZyYW1lc3xALXdlYmtpdC1rZXlmcmFtZXN8QHN1cHBvcnRzfCIgKyAKICAgICAgICAiQGNoYXJzZXR8QHBsdWdpbnxAbmFtZXNwYWNlfEBkb2N1bWVudHxAcGFnZXxAdmlld3BvcnR8QC1tcy12aWV3cG9ydHwiICsKICAgICAgICAib3J8YW5kfHdoZW58bm90IjsKCiAgICB2YXIga2V5d29yZHMgPSBrZXl3b3JkTGlzdC5zcGxpdCgnfCcpOwoKICAgIHZhciBwcm9wZXJ0aWVzID0gQ3NzSGlnaGxpZ2h0UnVsZXMuc3VwcG9ydFR5cGUuc3BsaXQoJ3wnKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQiOiBDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnQsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkTGlzdCwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogQ3NzSGlnaGxpZ2h0UnVsZXMuc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7ICAgCgogICAgdmFyIG51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIG51bVJlICsgIikoY2h8Y218ZGVnfGVtfGV4fGZyfGdkfGdyYWR8SHp8aW58a0h6fG1tfG1zfHBjfHB0fHB4fHJhZHxyZW18c3x0dXJufHZofHZtfHZ3fCUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuZnVuY3Rpb24iLCAicGFyZW4ubHBhcmVuIiwgInN0cmluZyIsICJwYXJlbi5ycGFyZW4iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih1cmwpKFxcKCkoLiopKFxcKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmZ1bmN0aW9uIiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDpleHRlbmR8W2EtejAtOV9cXC1dKykoXFwoKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChrZXl3b3Jkcy5pbmRleE9mKHZhbHVlLnRvTG93ZXJDYXNlKCkpID4gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJbQFxcJF1bYS16MC05X1xcLUBcXCRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW0BcXCRdXFx7W2EtejAtOV9cXC1AXFwkXSpcXH0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oZmlyc3QsIHNlY29uZCkgewogICAgICAgICAgICAgICAgICAgIGlmKHByb3BlcnRpZXMuaW5kZXhPZihmaXJzdC50b0xvd2VyQ2FzZSgpKSA+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbInN1cHBvcnQudHlwZS5wcm9wZXJ0eSIsICJ0ZXh0Il07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJzdXBwb3J0LnR5cGUudW5rbm93blByb3BlcnR5IiwgInRleHQiXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAiKFthLXowLTktX10rKShcXHMqOikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJiIgICAvLyBzcGVjaWFsIGNhc2UgLSBhbHdheXMgdHJlYXQgYXMga2V5d29yZAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC0/W0BhLXpfXVtAYS16MC05X1xcLV0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICI6W2Etel9dW2EtejAtOS1fXSoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI8fD58PD18Pj18PXwhPXwtfCV8XFwrfFxcKiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKExlc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTGVzc0hpZ2hsaWdodFJ1bGVzID0gTGVzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2xlc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9sZXNzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBMZXNzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2xlc3NfaGlnaGxpZ2h0X3J1bGVzIikuTGVzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKCnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTGVzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IENzc0NvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIAogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoInJ1bGVzZXQiLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2xlc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvbGVzcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-liquid.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvbGlxdWlkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgCiAgICB2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwogICAgdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKICAgIHZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL3htbCIpLlhtbEJlaGF2aW91cjsKICAgIHZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwogICAgdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwogICAgCiAgICBmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7CiAgICB9CiAgICAKICAgIHZhciBMaXF1aWRCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgWG1sQmVoYXZpb3VyLmNhbGwodGhpcyk7CiAgICAgICAgdGhpcy5hZGQoImF1dG9CcmFjZVRhZ0Nsb3NpbmciLCJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgICAgIGlmICh0ZXh0ID09ICd9JykgewogICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4gfHwgISggdG9rZW4udmFsdWUudHJpbSgpID09PSAnJScgfHwgaXModG9rZW4sICJ0YWctbmFtZSIpIHx8IGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtZXF1YWxzIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbkVuZENvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCB0b2tlbkVuZENvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPT0gdG9rZW5FbmRDb2x1bW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgveyVccyolLy50ZXN0KHNlc3Npb24uZ2V0TGluZShwb3NpdGlvbi5yb3cpKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKC9eXHMqfS8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB3aGlsZSAoIXRva2VuLnR5cGUgIT0gJ2tleXdvcmQuYmxvY2snKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gJ3slJykgewogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdrZXl3b3JkLmJsb2NrJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbi52YWx1ZS50cmltKCkgPT0gJyUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuICkgcmV0dXJuIDsKICAgICAgICAgICAgICAgIHZhciB0b2tlblJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpZiAoaXMoaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCksICJlbmQtdGFnLW9wZW4iKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIGlmICh0b2tlblJvdyA9PSBwb3NpdGlvbi5yb3cpCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuQ29sdW1uKTsKICAgIAogICAgICAgICAgICAgICAgaWYgKHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KGVsZW1lbnQudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICB0ZXh0OiAifSIgKyAieyUgZW5kIiArIGVsZW1lbnQgKyAiICV9IiwKICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAKICAgIH07CgogICAgb29wLmluaGVyaXRzKExpcXVpZEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKICAgIAogICAgZXhwb3J0cy5MaXF1aWRCZWhhdmlvdXIgPSBMaXF1aWRCZWhhdmlvdXI7CiAgICB9KTsKCmRlZmluZSgiYWNlL21vZGUvbGlxdWlkX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIExpcXVpZEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKICAgIHZhciBmdW5jdGlvbnMgPSAoCiAgICAgICAgImRhdGV8Y2FwaXRhbGl6ZXxkb3duY2FzZXx1cGNhc2V8Zmlyc3R8bGFzdHxqb2lufHNvcnR8bWFwfHNpemV8ZXNjYXBlfCIgKwogICAgICAgICAiZXNjYXBlX29uY2V8c3RyaXBfaHRtbHxzdHJpcF9uZXdsaW5lc3xuZXdsaW5lX3RvX2JyfHJlcGxhY2V8cmVwbGFjZV9maXJzdHwiICsKICAgICAgICAgInRydW5jYXRlfHRydW5jYXRld29yZHN8cHJlcGVuZHxhcHBlbmR8bWludXN8cGx1c3x0aW1lc3xkaXZpZGVkX2J5fHNwbGl0IgogICAgKTsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImNhcHR1cmV8ZW5kY2FwdHVyZXxjYXNlfGVuZGNhc2V8d2hlbnxjb21tZW50fGVuZGNvbW1lbnR8IiArCiAgICAgICAgImN5Y2xlfGZvcnxlbmRmb3J8aW58cmV2ZXJzZWR8aWZ8ZW5kaWZ8ZWxzZXxlbHNpZnxpbmNsdWRlfGVuZGluY2x1ZGV8dW5sZXNzfGVuZHVubGVzc3wiICsKICAgICAgICAic3R5bGV8dGV4dHxpbWFnZXx3aWRnZXR8cGx1Z2lufG1hcmtlcnxlbmRtYXJrZXJ8dGFibGVyb3d8ZW5kdGFibGVyb3ciCiAgICApOwogICAgdmFyIGJsb2NrcyA9ICdmb3J8aWZ8Y2FzZXxjYXB0dXJlfHVubGVzc3x0YWJsZXJvd3xtYXJrZXJ8Y29tbWVudCc7CgogICAgdmFyIGJ1aWx0aW5WYXJpYWJsZXMgPSAnZm9ybG9vcHx0YWJsZXJvd2xvb3AnOwoKICAgIHZhciBkZWZpbml0aW9ucyA9ICgiYXNzaWduIik7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6IGJ1aWx0aW5WYXJpYWJsZXMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAia2V5d29yZC5ibG9jayI6IGJsb2NrcywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGZ1bmN0aW9ucywKICAgICAgICAia2V5d29yZC5kZWZpbml0aW9uIjogZGVmaW5pdGlvbnMKICAgIH0sICJpZGVudGlmaWVyIik7CiAgICBmb3IgKHZhciBydWxlIGluIHRoaXMuJHJ1bGVzKSB7CiAgICAgICAgdGhpcy4kcnVsZXNbcnVsZV0udW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAieyUiLAogICAgICAgICAgICBwdXNoIDogImxpcXVpZC1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAie3siLAogICAgICAgICAgICBwdXNoIDogImxpcXVpZC1zdGFydCIKICAgICAgICB9KTsKICAgIH0KCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICAibGlxdWlkLXN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleDogIn19IiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleDogIiV9IiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIi98XFwqfFxcLXxcXCt8PXwhPXxcXD9cXDoiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6IC9bXFtcKHtdLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgfV0KICAgIH0pOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKb29wLmluaGVyaXRzKExpcXVpZEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5MaXF1aWRIaWdobGlnaHRSdWxlcyA9IExpcXVpZEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbGlxdWlkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvaHRtbCIsImFjZS9tb2RlL2h0bWxfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvbGlxdWlkIiwiYWNlL21vZGUvbGlxdWlkX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgTGlxdWlkQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvbGlxdWlkIikuTGlxdWlkQmVoYXZpb3VyOwp2YXIgTGlxdWlkSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2xpcXVpZF9oaWdobGlnaHRfcnVsZXMiKS5MaXF1aWRIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IExpcXVpZEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IExpcXVpZEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICI8IS0tIiwgZW5kOiAiLS0+In07CiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IG5ldyBIdG1sTW9kZSgpLnZvaWRFbGVtZW50czsKICAgIAogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbGlxdWlkIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvbGlxdWlkIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-lisp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9saXNwX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIExpc3BIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRDb250cm9sID0gImNhc2V8ZG98bGV0fGxvb3B8aWZ8ZWxzZXx3aGVuIjsKICAgIHZhciBrZXl3b3JkT3BlcmF0b3IgPSAiZXF8bmVxfGFuZHxvciI7CiAgICB2YXIgY29uc3RhbnRMYW5ndWFnZSA9ICJudWxsfG5pbCI7CiAgICB2YXIgc3VwcG9ydEZ1bmN0aW9ucyA9ICJjb25zfGNhcnxjZHJ8Y29uZHxsYW1iZGF8Zm9ybWF0fHNldHF8c2V0ZnxxdW90ZXxldmFsfGFwcGVuZHxsaXN0fGxpc3RwfG1lbWJlcnB8dHxsb2FkfHByb2duIjsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQuY29udHJvbCI6IGtleXdvcmRDb250cm9sLAogICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIjoga2V5d29yZE9wZXJhdG9yLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGNvbnN0YW50TGFuZ3VhZ2UsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0RnVuY3Rpb25zCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOwoKICAgIHRoaXMuJHJ1bGVzID0gCiAgICAgICAgewogICAgInN0YXJ0IjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIjsuKiQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInN0b3JhZ2UudHlwZS5mdW5jdGlvbi10eXBlLmxpc3AiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbi5saXNwIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKD86KGRlZnVufGRlZm1ldGhvZHxkZWZtYWNybykpXFxiKShcXHMrKSgoPzpcXHd8XFwtfFxcIXxcXD8pKikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29uc3RhbnQuY2hhcmFjdGVyLmxpc3AiLCAiY29uc3RhbnQuY2hhcmFjdGVyLmxpc3AiXSwKICAgICAgICAgICAgcmVnZXg6ICIoIykoKD86XFx3fFtcXFxcKy09PD4nXCImI10pKykiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInB1bmN0dWF0aW9uLmRlZmluaXRpb24udmFyaWFibGUubGlzcCIsICJ2YXJpYWJsZS5vdGhlci5nbG9iYWwubGlzcCIsICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnZhcmlhYmxlLmxpc3AiXSwKICAgICAgICAgICAgcmVnZXg6ICIoXFwqKShcXFMqKShcXCopIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rKD86THxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/KD86THxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICB9CiAgICBdLAogICAgInFxc3RyaW5nIjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmxpc3AiLAogICAgICAgICAgICByZWdleDogIlxcXFwuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICdbXiJcXFxcXSsnCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfQogICAgXQp9OwoKfTsKCm9vcC5pbmhlcml0cyhMaXNwSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkxpc3BIaWdobGlnaHRSdWxlcyA9IExpc3BIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2xpc3AiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9saXNwX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIExpc3BIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbGlzcF9oaWdobGlnaHRfcnVsZXMiKS5MaXNwSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IExpc3BIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAgICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICI7IjsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbGlzcCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2xpc3AiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-livescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2xpdmVzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS90ZXh0Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSl7CiAgdmFyIGlkZW50aWZpZXIsIExpdmVTY3JpcHRNb2RlLCBrZXl3b3JkZW5kLCBzdHJpbmdmaWxsOwogIGlkZW50aWZpZXIgPSAnKD8hW1xcZFxcc10pWyRcXHdcXHhBQS1cXHVGRkRDXSg/Oig/IVxccylbJFxcd1xceEFBLVxcdUZGRENdfC1bQS1aYS16XSkqJzsKICBleHBvcnRzLk1vZGUgPSBMaXZlU2NyaXB0TW9kZSA9IChmdW5jdGlvbihzdXBlcmNsYXNzKXsKICAgIHZhciBpbmRlbnRlciwgcHJvdG90eXBlID0gZXh0ZW5kJCgoaW1wb3J0JChMaXZlU2NyaXB0TW9kZSwgc3VwZXJjbGFzcykuZGlzcGxheU5hbWUgPSAnTGl2ZVNjcmlwdE1vZGUnLCBMaXZlU2NyaXB0TW9kZSksIHN1cGVyY2xhc3MpLnByb3RvdHlwZSwgY29uc3RydWN0b3IgPSBMaXZlU2NyaXB0TW9kZTsKICAgIGZ1bmN0aW9uIExpdmVTY3JpcHRNb2RlKCl7CiAgICAgIHZhciB0aGF0OwogICAgICB0aGlzLiR0b2tlbml6ZXIgPSBuZXcgKHJlcXVpcmUoJy4uL3Rva2VuaXplcicpKS5Ub2tlbml6ZXIoTGl2ZVNjcmlwdE1vZGUuUnVsZXMpOwogICAgICBpZiAodGhhdCA9IHJlcXVpcmUoJy4uL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCcpKSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudCA9IG5ldyB0aGF0Lk1hdGNoaW5nQnJhY2VPdXRkZW50OwogICAgICB9CiAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2xpdmVzY3JpcHQiOwogICAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgKHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cikoKTsKICAgIH0KICAgIGluZGVudGVyID0gUmVnRXhwKCcoPzpbKHtbPTpdfFstfl0+fFxcYig/OmUoPzpsc2V8eHBvcnQpfGQoPzpvfGVmYXVsdCl8dCg/OnJ5fGhlbil8ZmluYWxseXxpbXBvcnQoPzpcXHMqYWxsKT98Y29uc3R8dmFyfGxldHxuZXd8Y2F0Y2goPzpcXHMqJyArIGlkZW50aWZpZXIgKyAnKT8pKVxccyokJyk7CiAgICBwcm90b3R5cGUuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKXsKICAgICAgdmFyIGluZGVudCwgdG9rZW5zOwogICAgICBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgIHRva2VucyA9IHRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CiAgICAgIGlmICghKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50eXBlID09PSAnY29tbWVudCcpKSB7CiAgICAgICAgaWYgKHN0YXRlID09PSAnc3RhcnQnICYmIGluZGVudGVyLnRlc3QobGluZSkpIHsKICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwogICAgcHJvdG90eXBlLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CiAgICBwcm90b3R5cGUuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiIyMjIiwgZW5kOiAiIyMjIn07CiAgICBwcm90b3R5cGUuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KXsKICAgICAgdmFyIHJlZiQ7CiAgICAgIHJldHVybiAocmVmJCA9IHRoaXMuJG91dGRlbnQpICE9IG51bGwgPyByZWYkLmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCkgOiB2b2lkIDg7CiAgICB9OwogICAgcHJvdG90eXBlLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KXsKICAgICAgdmFyIHJlZiQ7CiAgICAgIHJldHVybiAocmVmJCA9IHRoaXMuJG91dGRlbnQpICE9IG51bGwgPyByZWYkLmF1dG9PdXRkZW50KGRvYywgcm93KSA6IHZvaWQgODsKICAgIH07CiAgICByZXR1cm4gTGl2ZVNjcmlwdE1vZGU7CiAgfShyZXF1aXJlKCcuLi9tb2RlL3RleHQnKS5Nb2RlKSk7CiAga2V5d29yZGVuZCA9ICcoPyFbJFxcd118LVtBLVphLXpdfFxccyo6KD8hWzo9XSkpJzsKICBzdHJpbmdmaWxsID0gewogICAgZGVmYXVsdFRva2VuOiAnc3RyaW5nJwogIH07CiAgTGl2ZVNjcmlwdE1vZGUuUnVsZXMgPSB7CiAgICBzdGFydDogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdrZXl3b3JkJywKICAgICAgICByZWdleDogJyg/OnQoPzpoKD86aXN8cm93fGVuKXxyeXx5cGVvZiE/KXxjKD86b24oPzp0aW51ZXxzdCl8YSg/OnNlfHRjaCl8bGFzcyl8aSg/Om4oPzpzdGFuY2VvZik/fG1wKD86b3J0KD86XFxzK2FsbCk/fGxlbWVudHMpfFtmc10pfGQoPzplKD86ZmF1bHR8bGV0ZXxidWdnZXIpfG8pfGYoPzpvcig/Olxccytvd24pP3xpbmFsbHl8dW5jdGlvbil8cyg/OnVwZXJ8d2l0Y2gpfGUoPzpsc2V8eCg/OnRlbmRzfHBvcnQpfHZhbCl8YSg/Om5kfHJndW1lbnRzKXxuKD86ZXd8b3QpfHVuKD86bGVzc3x0aWwpfHcoPzpoaWxlfGl0aCl8b1tmcl18cmV0dXJufGJyZWFrfGxldHx2YXJ8bG9vcCknICsga2V5d29yZGVuZAogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZScsCiAgICAgICAgcmVnZXg6ICcoPzp0cnVlfGZhbHNlfHllc3xub3xvbnxvZmZ8bnVsbHx2b2lkfHVuZGVmaW5lZCknICsga2V5d29yZGVuZAogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdpbnZhbGlkLmlsbGVnYWwnLAogICAgICAgIHJlZ2V4OiAnKD86cCg/OmFja2FnZXxyKD86aXZhdGV8b3RlY3RlZCl8dWJsaWMpfGkoPzptcGxlbWVudHN8bnRlcmZhY2UpfGVudW18c3RhdGljfHlpZWxkKScgKyBrZXl3b3JkZW5kCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2xhbmd1YWdlLnN1cHBvcnQuY2xhc3MnLAogICAgICAgIHJlZ2V4OiAnKD86Uig/OmUoPzpnRXhwfGZlcmVuY2VFcnJvcil8YW5nZUVycm9yKXxTKD86dHJpbmd8eW50YXhFcnJvcil8RSg/OnJyb3J8dmFsRXJyb3IpfEFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxOdW1iZXJ8T2JqZWN0fFR5cGVFcnJvcnxVUklFcnJvciknICsga2V5d29yZGVuZAogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdsYW5ndWFnZS5zdXBwb3J0LmZ1bmN0aW9uJywKICAgICAgICByZWdleDogJyg/OmlzKD86TmFOfEZpbml0ZSl8cGFyc2UoPzpJbnR8RmxvYXQpfE1hdGh8SlNPTnwoPzplbnxkZSljb2RlVVJJKD86Q29tcG9uZW50KT8pJyArIGtleXdvcmRlbmQKICAgICAgfSwgewogICAgICAgIHRva2VuOiAndmFyaWFibGUubGFuZ3VhZ2UnLAogICAgICAgIHJlZ2V4OiAnKD86dCg/OmhhdHxpbHxvKXxmKD86cm9tfGFsbHRocm91Z2gpfGl0fGJ5fGUpJyArIGtleXdvcmRlbmQKICAgICAgfSwgewogICAgICAgIHRva2VuOiAnaWRlbnRpZmllcicsCiAgICAgICAgcmVnZXg6IGlkZW50aWZpZXIgKyAnXFxzKjooPyFbOj1dKScKICAgICAgfSwgewogICAgICAgIHRva2VuOiAndmFyaWFibGUnLAogICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLAogICAgICAgIHJlZ2V4OiAnKD86XFwuezN9fFxccytcXD8pJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdrZXl3b3JkLnZhcmlhYmxlJywKICAgICAgICByZWdleDogJyg/OkArfDo6fFxcLlxcLiknLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLAogICAgICAgIHJlZ2V4OiAnXFwuXFxzKicsCiAgICAgICAgbmV4dDogJ2tleScKICAgICAgfSwgewogICAgICAgIHRva2VuOiAnc3RyaW5nJywKICAgICAgICByZWdleDogJ1xcXFxcXFNbXlxccyw7KX1cXF1dKicKICAgICAgfSwgewogICAgICAgIHRva2VuOiAnc3RyaW5nLmRvYycsCiAgICAgICAgcmVnZXg6ICdcJ1wnXCcnLAogICAgICAgIG5leHQ6ICdxZG9jJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcuZG9jJywKICAgICAgICByZWdleDogJyIiIicsCiAgICAgICAgbmV4dDogJ3FxZG9jJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgIG5leHQ6ICdxc3RyaW5nJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgbmV4dDogJ3Fxc3RyaW5nJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnYCcsCiAgICAgICAgbmV4dDogJ2pzJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnPFxcWycsCiAgICAgICAgbmV4dDogJ3dvcmRzJwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcucmVnZXgnLAogICAgICAgIHJlZ2V4OiAnLy8nLAogICAgICAgIG5leHQ6ICdoZXJlZ2V4JwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdjb21tZW50LmRvYycsCiAgICAgICAgcmVnZXg6ICcvXFwqJywKICAgICAgICBuZXh0OiAnY29tbWVudCcKICAgICAgfSwgewogICAgICAgIHRva2VuOiAnY29tbWVudCcsCiAgICAgICAgcmVnZXg6ICcjLionCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ3N0cmluZy5yZWdleCcsCiAgICAgICAgcmVnZXg6ICdcXC8oPzpbXltcXC9cXG5cXFxcXSooPzooPzpcXFxcLnxcXFtbXlxcXVxcblxcXFxdKig/OlxcXFwuW15cXF1cXG5cXFxcXSopKlxcXSlbXltcXC9cXG5cXFxcXSopKilcXC9bZ2lteSRdezAsNH0nLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMnLAogICAgICAgIHJlZ2V4OiAnKD86MHhbXFxkYS1mQS1GXVtcXGRhLWZBLUZfXSp8KD86WzItOV18WzEyXVxcZHwzWzAtNl0pcltcXGRhLXpBLVpdW1xcZGEtekEtWl9dKnwoPzpcXGRbXFxkX10qKD86XFwuXFxkW1xcZF9dKik/fFxcLlxcZFtcXGRfXSopKD86ZVsrLV0/XFxkW1xcZF9dKik/W1xcdyRdKiknCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2xwYXJlbicsCiAgICAgICAgcmVnZXg6ICdbKHtbXScKICAgICAgfSwgewogICAgICAgIHRva2VuOiAncnBhcmVuJywKICAgICAgICByZWdleDogJ1spfVxcXV0nLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLAogICAgICAgIHJlZ2V4OiAnW1xcXiF8JiUrXFwtXSsnCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ3RleHQnLAogICAgICAgIHJlZ2V4OiAnXFxzKycKICAgICAgfQogICAgXSwKICAgIGhlcmVnZXg6IFsKICAgICAgewogICAgICAgIHRva2VuOiAnc3RyaW5nLnJlZ2V4JywKICAgICAgICByZWdleDogJy4qPy8vW2dpbXkkP117MCw0fScsCiAgICAgICAgbmV4dDogJ3N0YXJ0JwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcucmVnZXgnLAogICAgICAgIHJlZ2V4OiAnXFxzKiN7JwogICAgICB9LCB7CiAgICAgICAgdG9rZW46ICdjb21tZW50LnJlZ2V4JywKICAgICAgICByZWdleDogJ1xccysoPzojLiopPycKICAgICAgfSwgewogICAgICAgIGRlZmF1bHRUb2tlbjogJ3N0cmluZy5yZWdleCcKICAgICAgfQogICAgXSwKICAgIGtleTogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yJywKICAgICAgICByZWdleDogJ1suP0AhXSsnCiAgICAgIH0sIHsKICAgICAgICB0b2tlbjogJ2lkZW50aWZpZXInLAogICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyLAogICAgICAgIG5leHQ6ICdzdGFydCcKICAgICAgfSwgewogICAgICAgIHRva2VuOiAndGV4dCcsCiAgICAgICAgcmVnZXg6ICcnLAogICAgICAgIG5leHQ6ICdzdGFydCcKICAgICAgfQogICAgXSwKICAgIGNvbW1lbnQ6IFsKICAgICAgewogICAgICAgIHRva2VuOiAnY29tbWVudC5kb2MnLAogICAgICAgIHJlZ2V4OiAnLio/XFwqLycsCiAgICAgICAgbmV4dDogJ3N0YXJ0JwogICAgICB9LCB7CiAgICAgICAgZGVmYXVsdFRva2VuOiAnY29tbWVudC5kb2MnCiAgICAgIH0KICAgIF0sCiAgICBxZG9jOiBbCiAgICAgIHsKICAgICAgICB0b2tlbjogJ3N0cmluZycsCiAgICAgICAgcmVnZXg6ICIuKj8nJyciLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHN0cmluZ2ZpbGwKICAgIF0sCiAgICBxcWRvYzogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnLio/IiIiJywKICAgICAgICBuZXh0OiAna2V5JwogICAgICB9LCBzdHJpbmdmaWxsCiAgICBdLAogICAgcXN0cmluZzogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnW15cXFxcXCddKig/OlxcXFwuW15cXFxcXCddKikqXCcnLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHN0cmluZ2ZpbGwKICAgIF0sCiAgICBxcXN0cmluZzogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnW15cXFxcIl0qKD86XFxcXC5bXlxcXFwiXSopKiInLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHN0cmluZ2ZpbGwKICAgIF0sCiAgICBqczogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnW15cXFxcYF0qKD86XFxcXC5bXlxcXFxgXSopKmAnLAogICAgICAgIG5leHQ6ICdrZXknCiAgICAgIH0sIHN0cmluZ2ZpbGwKICAgIF0sCiAgICB3b3JkczogWwogICAgICB7CiAgICAgICAgdG9rZW46ICdzdHJpbmcnLAogICAgICAgIHJlZ2V4OiAnLio/XFxdPicsCiAgICAgICAgbmV4dDogJ2tleScKICAgICAgfSwgc3RyaW5nZmlsbAogICAgXQogIH07CmZ1bmN0aW9uIGV4dGVuZCQoc3ViLCBzdXApewogIGZ1bmN0aW9uIGZ1bigpe30gZnVuLnByb3RvdHlwZSA9IChzdWIuc3VwZXJjbGFzcyA9IHN1cCkucHJvdG90eXBlOwogIChzdWIucHJvdG90eXBlID0gbmV3IGZ1bikuY29uc3RydWN0b3IgPSBzdWI7CiAgaWYgKHR5cGVvZiBzdXAuZXh0ZW5kZWQgPT0gJ2Z1bmN0aW9uJykgc3VwLmV4dGVuZGVkKHN1Yik7CiAgcmV0dXJuIHN1YjsKfQpmdW5jdGlvbiBpbXBvcnQkKG9iaiwgc3JjKXsKICB2YXIgb3duID0ge30uaGFzT3duUHJvcGVydHk7CiAgZm9yICh2YXIga2V5IGluIHNyYykgaWYgKG93bi5jYWxsKHNyYywga2V5KSkgb2JqW2tleV0gPSBzcmNba2V5XTsKICByZXR1cm4gb2JqOwp9Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9saXZlc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-logiql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sb2dpcWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTG9naVFMSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5ibG9jaycsCiAgICAgICAgICAgcmVnZXg6ICcvXFwqJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5ibG9jaycsIHJlZ2V4OiAnXFwqLycsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmJsb2NrJyB9IF0KICAgICAgICAgICAgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuc2luZ2xlJywKICAgICAgICAgICByZWdleDogJy8vLionCiAgICAgICAgICAgIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljJywKICAgICAgICAgICByZWdleDogJ1xcZCsoPzpcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT9bZmRdPycKICAgICAgICAgICAgfSwKICAgICAgICAgeyB0b2tlbjogJ3N0cmluZycsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnc3RyaW5nJywgcmVnZXg6ICciJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZycgfSBdCiAgICAgICAgICAgIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIodHJ1ZXxmYWxzZSlcXGInCiAgICAgICAgICAgIH0sCiAgICAgICAgIHsgdG9rZW46ICdlbnRpdHkubmFtZS50eXBlLmxvZ2ljYmxveCcsCiAgICAgICAgICAgcmVnZXg6ICdgW2EtekEtWl86XSsoXFxkfFxcYSkqXFxiJwogICAgICAgICAgICB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5zdGFydCcsIHJlZ2V4OiAnLT4nLCAgY29tbWVudDogJ0NvbnN0cmFpbnQnIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLnN0YXJ0JywgcmVnZXg6ICctLT4nLCBjb21tZW50OiAnTGV2ZWwgMSBDb25zdHJhaW50J30sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLnN0YXJ0JywgcmVnZXg6ICc8LScsICBjb21tZW50OiAnUnVsZScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuc3RhcnQnLCByZWdleDogJzwtLScsIGNvbW1lbnQ6ICdMZXZlbCAxIFJ1bGUnIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmVuZCcsICAgcmVnZXg6ICdcXC4nLCBjb21tZW50OiAnVGVybWluYXRvcicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXInLCByZWdleDogJyEnLCAgIGNvbW1lbnQ6ICdOZWdhdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXInLCByZWdleDogJywnLCAgIGNvbW1lbnQ6ICdDb25qdW5jdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3RoZXInLCByZWdleDogJzsnLCAgIGNvbW1lbnQ6ICdEaXNqdW5jdGlvbicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLCByZWdleDogJzw9fD49fCE9fDx8PicsIGNvbW1lbnQ6ICdFcXVhbGl0eSd9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vdGhlcicsIHJlZ2V4OiAnQCcsIGNvbW1lbnQ6ICdFcXVhbGl0eScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLCByZWdleDogJ1xcK3wtfFxcKnwvJywgY29tbWVudDogJ0FyaXRobWV0aWMgb3BlcmF0aW9ucyd9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZCcsIHJlZ2V4OiAnOjonLCBjb21tZW50OiAnQ29sb24gY29sb24nIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uJywKICAgICAgICAgICByZWdleDogJ1xcYihhZ2dcXHMqPDwpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IGluY2x1ZGU6ICckc2VsZicgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbicsCiAgICAgICAgICAgICAgICByZWdleDogJz4+JywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0gXQogICAgICAgICAgICB9LAogICAgICAgICB7IHRva2VuOiAnc3RvcmFnZS5tb2RpZmllcicsCiAgICAgICAgICAgcmVnZXg6ICdcXGIobGFuZzpbXFx3Ol0qKScKICAgICAgICAgICAgfSwKICAgICAgICAgeyB0b2tlbjogWyAnc3RvcmFnZS50eXBlJywgJ3RleHQnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoZXhwb3J0fHNlYWxlZHxjbGF1c2VzfGJsb2NrfGFsaWFzfGFsaWFzX2FsbCkoXFxzKlxcKCkoPz1gKScKICAgICAgICAgICAgfSwKICAgICAgICAgeyB0b2tlbjogJ2VudGl0eS5uYW1lJywKICAgICAgICAgICByZWdleDogJ1thLXpBLVpfXVthLXpBLVpfMC05Ol0qKEBwcmV2fEBpbml0fEBmaW5hbCk/KD89KFxcKHxcXFspKScKICAgICAgICAgICAgfSwKICAgICAgICAgeyB0b2tlbjogJ3ZhcmlhYmxlLnBhcmFtZXRlcicsCiAgICAgICAgICAgcmVnZXg6ICcoW2EtekEtWl1bYS16QS1aXzAtOV0qfF8pXFxzKig/PSgsfFxcLnw8LXwtPnxcXCl8XFxdfD0pKScKICAgICAgICAgICAgfSBdIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhMb2dpUUxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTG9naVFMSGlnaGxpZ2h0UnVsZXMgPSBMb2dpUUxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvbG9naXFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvbG9naXFsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBMb2dpUUxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbG9naXFsX2hpZ2hsaWdodF9ydWxlcyIpLkxvZ2lRTEhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTG9naVFMSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwogICAgICAgIGlmICgvY29tbWVudHxzdHJpbmcvLnRlc3QoZW5kU3RhdGUpKSAgCiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50eXBlID09ICJjb21tZW50LnNpbmdsZSIpCiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goKTsKICAgICAgICBpZiAoLygtLT58PC0tfDwtfC0+fHspXHMqJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICh0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCkpCiAgICAgICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgICBpZiAoaW5wdXQgIT09ICJcbiIgJiYgaW5wdXQgIT09ICJcclxuIikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAKICAgICAgICBpZiAoIS9eXHMrLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgaWYgKHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIHByZXZMaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBwcmV2TGluZS5tYXRjaCgvXlxzKy8pOwogICAgICAgIHZhciBjb2x1bW4gPSBwcmV2TGluZS5sYXN0SW5kZXhPZigiLiIpICsgMTsKICAgICAgICBpZiAoIW1hdGNoIHx8ICFyb3cgfHwgIWNvbHVtbikgcmV0dXJuIDA7CgogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHN0YXJ0UmFuZ2UgPSB0aGlzLmdldE1hdGNoaW5nKGRvYywge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwogICAgICAgIGlmICghc3RhcnRSYW5nZSB8fCBzdGFydFJhbmdlLnN0YXJ0LnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICBjb2x1bW4gPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShzdGFydFJhbmdlLnN0YXJ0LnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3cgKyAxLCAwLCByb3cgKyAxLCBjb2x1bW4pLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLmdldE1hdGNoaW5nID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAocm93ID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgcm93ID0gc2Vzc2lvbi5zZWxlY3Rpb24ubGVhZDsKICAgICAgICBpZiAodHlwZW9mIHJvdyA9PSAib2JqZWN0IikgewogICAgICAgICAgICBjb2x1bW4gPSByb3cuY29sdW1uOwogICAgICAgICAgICByb3cgPSByb3cucm93OwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXJ0VG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQocm93LCBjb2x1bW4pOwogICAgICAgIHZhciBLV19TVEFSVCA9ICJrZXl3b3JkLnN0YXJ0IiwgS1dfRU5EID0gImtleXdvcmQuZW5kIjsKICAgICAgICB2YXIgdG9rOwogICAgICAgIGlmICghc3RhcnRUb2tlbikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChzdGFydFRva2VuLnR5cGUgPT0gS1dfU1RBUlQpIHsKICAgICAgICAgICAgdmFyIGl0ID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBjb2x1bW4pOwogICAgICAgICAgICBpdC5zdGVwID0gaXQuc3RlcEZvcndhcmQ7CiAgICAgICAgfSBlbHNlIGlmIChzdGFydFRva2VuLnR5cGUgPT0gS1dfRU5EKSB7CiAgICAgICAgICAgIHZhciBpdCA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHJvdywgY29sdW1uKTsKICAgICAgICAgICAgaXQuc3RlcCA9IGl0LnN0ZXBCYWNrd2FyZDsKICAgICAgICB9IGVsc2UKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB3aGlsZSAodG9rID0gaXQuc3RlcCgpKSB7CiAgICAgICAgICAgIGlmICh0b2sudHlwZSA9PSBLV19TVEFSVCB8fCB0b2sudHlwZSA9PSBLV19FTkQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKCF0b2sgfHwgdG9rLnR5cGUgPT0gc3RhcnRUb2tlbi50eXBlKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBjb2wgPSBpdC5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICB2YXIgcm93ID0gaXQuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShyb3csIGNvbCwgcm93LCBjb2wgKyB0b2sudmFsdWUubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9sb2dpcWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9sb2dpcWwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-logtalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sb2d0YWxrX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIExvZ3RhbGtIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0geyBzdGFydDogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICcvXFwqJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmxvZ3RhbGsnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCovJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmJsb2NrLmxvZ3RhbGsnIH0gXSB9LAogICAgICAgICB7IHRvZG86ICdmaXggZ3JvdXBpbmcnLAogICAgICAgICAgIHRva2VuOiAKICAgICAgICAgICAgWyAnY29tbWVudC5saW5lLnBlcmNlbnRhZ2UubG9ndGFsaycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5sb2d0YWxrJyBdLAogICAgICAgICAgIHJlZ2V4OiAnJS4qJFxcbj8nIH0sCiAgICAgICAgIHsgdG9kbzogJ2ZpeCBncm91cGluZycsCiAgICAgICAgICAgdG9rZW46IAogICAgICAgICAgICBbICdzdG9yYWdlLnR5cGUub3BlbmluZy5sb2d0YWxrJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdG9yYWdlLnR5cGUubG9ndGFsaycgXSwKICAgICAgICAgICByZWdleDogJzotXFxzKD86b2JqZWN0fHByb3RvY29sfGNhdGVnb3J5fG1vZHVsZSkoPz1bKF0pJyB9LAogICAgICAgICB7IHRvZG86ICdmaXggZ3JvdXBpbmcnLAogICAgICAgICAgIHRva2VuOiAKICAgICAgICAgICAgWyAnc3RvcmFnZS50eXBlLmNsb3NpbmcubG9ndGFsaycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RvcmFnZS50eXBlLmxvZ3RhbGsnIF0sCiAgICAgICAgICAgcmVnZXg6ICc6LVxcc2VuZF8oPzpvYmplY3R8cHJvdG9jb2x8Y2F0ZWdvcnkpKD89Wy5dKScgfSwKICAgICAgICAgeyBjYXNlSW5zZW5zaXRpdmU6IGZhbHNlLAogICAgICAgICAgIHRva2VuOiAnc3RvcmFnZS50eXBlLnJlbGF0aW9ucy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYig/OmNvbXBsZW1lbnRzfGV4dGVuZHN8aSg/Om5zdGFudGlhdGVzfG1wKD86b3J0c3xsZW1lbnRzKSl8c3BlY2lhbGl6ZXMpKD89WyhdKScgfSwKICAgICAgICAgeyBjYXNlSW5zZW5zaXRpdmU6IGZhbHNlLAogICAgICAgICAgIHRvZG86ICdmaXggZ3JvdXBpbmcnLAogICAgICAgICAgIHRva2VuOiAKICAgICAgICAgICAgWyAnc3RvcmFnZS5tb2RpZmllci5vdGhlcnMubG9ndGFsaycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RvcmFnZS5tb2RpZmllci5sb2d0YWxrJyBdLAogICAgICAgICAgIHJlZ2V4OiAnOi1cXHMoPzplKD86bHNlfG5kaWYpfGJ1aWx0X2lufGR5bmFtaWN8c3luY2hyb25pemVkfHRocmVhZGVkKSg/PVsuXSknIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAgICB0b2RvOiAnZml4IGdyb3VwaW5nJywKICAgICAgICAgICB0b2tlbjogCiAgICAgICAgICAgIFsgJ3N0b3JhZ2UubW9kaWZpZXIub3RoZXJzLmxvZ3RhbGsnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0b3JhZ2UubW9kaWZpZXIubG9ndGFsaycgXSwKICAgICAgICAgICByZWdleDogJzotXFxzKD86Yyg/OmFsbHN8b2luZHVjdGl2ZSl8ZSg/OmxpZnxuKD86Y29kaW5nfHN1cmVfbG9hZGVkKXx4cG9ydCl8aSg/OmZ8big/OmNsdWRlfGl0aWFsaXphdGlvbnxmbykpfHJlZXhwb3J0fHNldF8oPzpsb2d0YWxrfHByb2xvZylfZmxhZ3x1c2VzKSg/PVsoXSknIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAgICB0b2RvOiAnZml4IGdyb3VwaW5nJywKICAgICAgICAgICB0b2tlbjogCiAgICAgICAgICAgIFsgJ3N0b3JhZ2UubW9kaWZpZXIub3RoZXJzLmxvZ3RhbGsnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0b3JhZ2UubW9kaWZpZXIubG9ndGFsaycgXSwKICAgICAgICAgICByZWdleDogJzotXFxzKD86YWxpYXN8aW5mb3xkKD86eW5hbWljfGlzY29udGlndW91cyl8bSg/OmV0YV8oPzpub25fdGVybWluYWx8cHJlZGljYXRlKXxvZGV8dWx0aWZpbGUpfHAoPzp1YmxpY3xyKD86b3RlY3RlZHxpdmF0ZSkpfG9wfHVzZSg/OnN8X21vZHVsZSl8c3luY2hyb25pemVkKSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLm1lc3NhZ2Utc2VuZGluZy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJyg6fDo6fFxcXlxcXiknIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmV4dGVybmFsLWNhbGwubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICcoW3t9XSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLm1vZGUubG9ndGFsaycsIHJlZ2V4OiAnKFxcP3xAKScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuY29tcGFyaXNvbi50ZXJtLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnKEA9PHxAPHxAPnxAPj18PT18XFxcXD09KScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuY29tcGFyaXNvbi5hcml0aG1ldGljLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnKD08fDx8Pnw+PXw9Oj18PVxcXFw9KScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuYml0d2lzZS5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJyg8PHw+PnwvXFxcXHxcXFxcL3xcXFxcKScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuZXZhbHVhYmxlLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86ZXxwaXxkaXZ8bW9kfHJlbSlcXGIoPyFbLSEoXn5dKScgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuZXZhbHVhYmxlLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnKFxcKlxcKnxcXCt8LXxcXCp8L3wvLyknIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLm1pc2MubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICcoOi18IXxcXFxcK3wsfDt8LS0+fC0+fD18XFw9fFxcLnw9XFwuXFwufFxcXnxcXGJhc1xcYnxcXGJpc1xcYiknIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAgICB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uZXZhbHVhYmxlLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKGEoYnN8Y29zfHNpbnx0YW58dGFuMil8YyhlaWxpbmd8b3MpfGRpdnxleHB8ZmxvKGF0KF8oaW50ZWdlcnxmcmFjdGlvbmFsKV9wYXJ0KT98b3IpfGxvZ3xtKGF4fGlufG9kKXxyKGVtfG91bmQpfHMoaShufGduKXxxcnQpfHQoYW58cnVuY2F0ZSl8eG9yKSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmNvbnRyb2wubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzp0cnVlfGZhKD86aWx8bHNlKXxyZXBlYXR8KD86aW5zdGFudGlhdGlvbnxzeXN0ZW0pX2Vycm9yKVxcYig/IVstIShefl0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5jb250cm9sLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKCg/OnR5cGV8ZG9tYWlufGV4aXN0ZW5jZXxwZXJtaXNzaW9ufHJlcHJlc2VudGF0aW9ufGV2YWx1YXRpb258cmVzb3VyY2V8c3ludGF4KV9lcnJvcikoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5jb250cm9sLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Y2EoPzpsbHx0Y2gpfGlnbm9yZXx0aHJvd3xvbmNlKSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmNoYXJzLWFuZC1ieXRlcy1pby5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYig/Oig/OmdldHxwKD86ZWVrfHV0KSlfKGMoPzpoYXJ8b2RlKXxieXRlKXxubCkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5jaGFycy1hbmQtYnl0ZXMtaW8ubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGJubFxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uYXRvbS10ZXJtLXByb2Nlc3NpbmcubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphdG9tXyg/Omxlbmd0aHxjKD86aGFyc3xvKD86bmNhdHxkZXMpKSl8c3ViX2F0b218Y2hhcl9jb2RlfG51bWJlcl9jKD86aGFyfG9kZSlzKSg/PVsoXSknIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAgICB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24udGVybS10ZXN0aW5nLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86dmFyfGF0b20oaWMpP3xpbnRlZ2VyfGZsb2F0fGMoPzphbGxhYmxlfG9tcG91bmQpfG4oPzpvbnZhcnx1bWJlcil8Z3JvdW5kfGFjeWNsaWNfdGVybSkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi50ZXJtLWNvbXBhcmlzb24ubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoY29tcGFyZSkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi50ZXJtLWlvLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86cmVhZChfdGVybSk/fHdyaXRlKD86cXxfKD86Y2Fub25pY2FsfHRlcm0pKT98KGN1cnJlbnRfKT8oPzpjaGFyX2NvbnZlcnNpb258b3ApKSg/PVsoXSknIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAgICB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24udGVybS1jcmVhdGlvbi1hbmQtZGVjb21wb3NpdGlvbi5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYihhcmd8Y29weV90ZXJtfGZ1bmN0b3J8bnVtYmVydmFyc3x0ZXJtX3ZhcmlhYmxlcykoPz1bKF0pJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnRlcm0tdW5pZmljYXRpb24ubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoc3Vic3VtZXNfdGVybXx1bmlmeV93aXRoX29jY3Vyc19jaGVjaykoPz1bKF0pJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnN0cmVhbS1zZWxlY3Rpb24tYW5kLWNvbnRyb2wubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzooPzpzZXxjdXJyZW4pdF8oPzppbnxvdXQpcHV0fG9wZW58Y2xvc2V8Zmx1c2hfb3V0cHV0fHN0cmVhbV9wcm9wZXJ0eXxhdF9lbmRfb2Zfc3RyZWFtfHNldF9zdHJlYW1fcG9zaXRpb24pKD89WyhdKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uc3RyZWFtLXNlbGVjdGlvbi1hbmQtY29udHJvbC5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYig/OmZsdXNoX291dHB1dHxhdF9lbmRfb2Zfc3RyZWFtKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24ucHJvbG9nLWZsYWdzLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKCg/OnNlfGN1cnJlbil0X3Byb2xvZ19mbGFnKSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmNvbXBpbGluZy1hbmQtbG9hZGluZy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYihsb2d0YWxrXyg/OmNvbXBpbGV8bCg/OmlicmFyeV9wYXRofG9hZHxvYWRfY29udGV4dCl8bWFrZShfdGFyZ2V0X2FjdGlvbik/KSkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5jb21waWxpbmctYW5kLWxvYWRpbmcubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIobG9ndGFsa19tYWtlKVxcYicgfSwKICAgICAgICAgeyBjYXNlSW5zZW5zaXRpdmU6IGZhbHNlLAogICAgICAgICAgIHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5ldmVudC1oYW5kbGluZy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYig/Oig/OmFib2xpc2h8ZGVmaW5lKV9ldmVudHN8Y3VycmVudF9ldmVudCkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkLWhvb2tzLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86KD86Y3JlYXRlfGN1cnJlbnR8c2V0KV9sb2d0YWxrX2ZsYWd8aGFsdCkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5pbXBsZW1lbnRhdGlvbi1kZWZpbmVkLWhvb2tzLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKGhhbHQpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5zb3J0aW5nLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKChrZXkpPyhzb3J0KSkoPz1bKF0pJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmVudGl0eS1jcmVhdGlvbi1hbmQtYWJvbGlzaGluZy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYigoYyg/OnJlYXRlfHVycmVudCl8YWJvbGlzaClfKD86b2JqZWN0fHByb3RvY29sfGNhdGVnb3J5KSkoPz1bKF0pJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLnJlZmxlY3Rpb24ubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoKG9iamVjdHxwcm90b2NvbHxjYXRlZ29yeSlfcHJvcGVydHl8Y28obXBsZW1lbnRzX29iamVjdHxuZm9ybXNfdG9fcHJvdG9jb2wpfGV4dGVuZHNfKG9iamVjdHxwcm90b2NvbHxjYXRlZ29yeSl8aW1wKG9ydHNfY2F0ZWdvcnl8bGVtZW50c19wcm90b2NvbCl8KGluc3RhbnRpYXR8c3BlY2lhbGl6KWVzX2NsYXNzKSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKCg/OmZvcnxyZXRyYWN0KWFsbCkoPz1bKF0pJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmV4ZWN1dGlvbi1jb250ZXh0LmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Y29udGV4dHxwYXJhbWV0ZXJ8c2UoPzpsZnxuZGVyKXx0aGlzKSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmRhdGFiYXNlLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86YSg/OmJvbGlzaHxzc2VydCg/OmF8eikpfGNsYXVzZXxyZXRyYWN0KGFsbCk/KSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmFsbC1zb2x1dGlvbnMubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoKD86YmFnfHNldClvZnxmKD86aW5kfG9yKWFsbCkoPz1bKF0pJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLm11bHRpLXRocmVhZGluZy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYih0aHJlYWRlZChfKGNhbGx8b25jZXxpZ25vcmV8ZXhpdHxwZWVrfHdhaXR8bm90aWZ5KSk/KSg/PVsoXSknIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiBmYWxzZSwKICAgICAgICAgICB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uZW5naW5lcy5sb2d0YWxrJywKICAgICAgICAgICByZWdleDogJ1xcYih0aHJlYWRlZF9lbmdpbmUoXyhjcmVhdGV8ZGVzdHJveXxzZWxmfG5leHQoPzpfcmVpZmllZCk/fHlpZWxkfHBvc3R8ZmV0Y2gpKT8pKD89WyhdKScgfSwKICAgICAgICAgeyBjYXNlSW5zZW5zaXRpdmU6IGZhbHNlLAogICAgICAgICAgIHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5yZWZsZWN0aW9uLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Y3VycmVudF9wcmVkaWNhdGV8cHJlZGljYXRlX3Byb3BlcnR5KSg/PVsoXSknIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLmV2ZW50LWhhbmRsZXIubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpiZWZvcmV8YWZ0ZXIpKD89WyhdKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24ubWVzc2FnZS1mb3J3YXJkaW5nLWhhbmRsZXIubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoZm9yd2FyZCkoPz1bKF0pJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5ncmFtbWFyLXJ1bGUubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpleHBhbmRfKD86Z29hbHx0ZXJtKXwoPzpnb2FsfHRlcm0pX2V4cGFuc2lvbnxwaHJhc2UpKD89WyhdKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLmxvZ3RhbGsnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXFxcKFtcXFxcYWJmbnJ0diJcJ118KHhbYS1mQS1GMC05XSt8WzAtN10rKVxcXFwpJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQubG9ndGFsaycsCiAgICAgICAgICAgICAgICByZWdleDogJ1wnJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLnNpbmdsZS5sb2d0YWxrJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUubG9ndGFsaycsIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5sb2d0YWxrJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUubG9ndGFsaycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLmxvZ3RhbGsnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKDBiWzAtMV0rfDBvWzAtN10rfDB4WzAtOWEtZkEtRl0rKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoMFwnXFxcXC58MFwnLnwwXCdcJ3wwXCciKScgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoXFxkK1xcLj9cXGQqKChlfEUpKFxcK3wtKT9cXGQrKT8pXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUub3RoZXIubG9ndGFsaycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoW0EtWl9dW0EtWmEtejAtOV9dKilcXGInIH0gXSB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTG9ndGFsa0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Mb2d0YWxrSGlnaGxpZ2h0UnVsZXMgPSBMb2d0YWxrSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvbG9ndGFsayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS90b2tlbml6ZXIiLCJhY2UvbW9kZS9sb2d0YWxrX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwp2YXIgTG9ndGFsa0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9sb2d0YWxrX2hpZ2hsaWdodF9ydWxlcyIpLkxvZ3RhbGtIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBMb2d0YWxrSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIlIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbG9ndGFsayI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2xvZ3RhbGsiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-lsl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sc2xfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgpvb3AuaW5oZXJpdHMoTFNMSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpmdW5jdGlvbiBMU0xIaWdobGlnaHRSdWxlcygpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuZmxvYXQubHNsIiA6ICJERUdfVE9fUkFEfFBJfFBJX0JZX1RXT3xSQURfVE9fREVHfFNRUlQyfFRXT19QSSIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmludGVnZXIubHNsIjogIkFDVElWRXxBR0VOVHxBR0VOVF9BTFdBWVNfUlVOfEFHRU5UX0FUVEFDSE1FTlRTfEFHRU5UX0FVVE9QSUxPVHxBR0VOVF9BV0FZfEFHRU5UX0JVU1l8QUdFTlRfQllfTEVHQUNZX05BTUV8QUdFTlRfQllfVVNFUk5BTUV8QUdFTlRfQ1JPVUNISU5HfEFHRU5UX0ZMWUlOR3xBR0VOVF9JTl9BSVJ8QUdFTlRfTElTVF9QQVJDRUx8QUdFTlRfTElTVF9QQVJDRUxfT1dORVJ8QUdFTlRfTElTVF9SRUdJT058QUdFTlRfTU9VU0VMT09LfEFHRU5UX09OX09CSkVDVHxBR0VOVF9TQ1JJUFRFRHxBR0VOVF9TSVRUSU5HfEFHRU5UX1RZUElOR3xBR0VOVF9XQUxLSU5HfEFMTF9TSURFU3xBTklNX09OfEFUVEFDSF9BVkFUQVJfQ0VOVEVSfEFUVEFDSF9CQUNLfEFUVEFDSF9CRUxMWXxBVFRBQ0hfQ0hFU1R8QVRUQUNIX0NISU58QVRUQUNIX0hFQUR8QVRUQUNIX0hVRF9CT1RUT018QVRUQUNIX0hVRF9CT1RUT01fTEVGVHxBVFRBQ0hfSFVEX0JPVFRPTV9SSUdIVHxBVFRBQ0hfSFVEX0NFTlRFUl8xfEFUVEFDSF9IVURfQ0VOVEVSXzJ8QVRUQUNIX0hVRF9UT1BfQ0VOVEVSfEFUVEFDSF9IVURfVE9QX0xFRlR8QVRUQUNIX0hVRF9UT1BfUklHSFR8QVRUQUNIX0xFQVJ8QVRUQUNIX0xFRlRfUEVDfEFUVEFDSF9MRVlFfEFUVEFDSF9MRk9PVHxBVFRBQ0hfTEhBTkR8QVRUQUNIX0xISVB8QVRUQUNIX0xMQVJNfEFUVEFDSF9MTExFR3xBVFRBQ0hfTFNIT1VMREVSfEFUVEFDSF9MVUFSTXxBVFRBQ0hfTFVMRUd8QVRUQUNIX01PVVRIfEFUVEFDSF9ORUNLfEFUVEFDSF9OT1NFfEFUVEFDSF9QRUxWSVN8QVRUQUNIX1JFQVJ8QVRUQUNIX1JFWUV8QVRUQUNIX1JGT09UfEFUVEFDSF9SSEFORHxBVFRBQ0hfUkhJUHxBVFRBQ0hfUklHSFRfUEVDfEFUVEFDSF9STEFSTXxBVFRBQ0hfUkxMRUd8QVRUQUNIX1JTSE9VTERFUnxBVFRBQ0hfUlVBUk18QVRUQUNIX1JVTEVHfEFWT0lEX0NIQVJBQ1RFUlN8QVZPSURfRFlOQU1JQ19PQlNUQUNMRVN8QVZPSURfTk9ORXxDQU1FUkFfQUNUSVZFfENBTUVSQV9CRUhJTkRORVNTX0FOR0xFfENBTUVSQV9CRUhJTkRORVNTX0xBR3xDQU1FUkFfRElTVEFOQ0V8Q0FNRVJBX0ZPQ1VTfENBTUVSQV9GT0NVU19MQUd8Q0FNRVJBX0ZPQ1VTX0xPQ0tFRHxDQU1FUkFfRk9DVVNfT0ZGU0VUfENBTUVSQV9GT0NVU19USFJFU0hPTER8Q0FNRVJBX1BJVENIfENBTUVSQV9QT1NJVElPTnxDQU1FUkFfUE9TSVRJT05fTEFHfENBTUVSQV9QT1NJVElPTl9MT0NLRUR8Q0FNRVJBX1BPU0lUSU9OX1RIUkVTSE9MRHxDSEFOR0VEX0FMTE9XRURfRFJPUHxDSEFOR0VEX0NPTE9SfENIQU5HRURfSU5WRU5UT1JZfENIQU5HRURfTElOS3xDSEFOR0VEX01FRElBfENIQU5HRURfT1dORVJ8Q0hBTkdFRF9SRUdJT058Q0hBTkdFRF9SRUdJT05fU1RBUlR8Q0hBTkdFRF9TQ0FMRXxDSEFOR0VEX1NIQVBFfENIQU5HRURfVEVMRVBPUlR8Q0hBTkdFRF9URVhUVVJFfENIQVJBQ1RFUl9BQ0NPVU5UX0ZPUl9TS0lQUEVEX0ZSQU1FU3xDSEFSQUNURVJfQVZPSURBTkNFX01PREV8Q0hBUkFDVEVSX0NNRF9KVU1QfENIQVJBQ1RFUl9DTURfU01PT1RIX1NUT1B8Q0hBUkFDVEVSX0NNRF9TVE9QfENIQVJBQ1RFUl9ERVNJUkVEX1NQRUVEfENIQVJBQ1RFUl9ERVNJUkVEX1RVUk5fU1BFRUR8Q0hBUkFDVEVSX0xFTkdUSHxDSEFSQUNURVJfTUFYX0FDQ0VMfENIQVJBQ1RFUl9NQVhfREVDRUx8Q0hBUkFDVEVSX01BWF9TUEVFRHxDSEFSQUNURVJfTUFYX1RVUk5fUkFESVVTfENIQVJBQ1RFUl9PUklFTlRBVElPTnxDSEFSQUNURVJfUkFESVVTfENIQVJBQ1RFUl9TVEFZX1dJVEhJTl9QQVJDRUx8Q0hBUkFDVEVSX1RZUEV8Q0hBUkFDVEVSX1RZUEVfQXxDSEFSQUNURVJfVFlQRV9CfENIQVJBQ1RFUl9UWVBFX0N8Q0hBUkFDVEVSX1RZUEVfRHxDSEFSQUNURVJfVFlQRV9OT05FfENMSUNLX0FDVElPTl9CVVl8Q0xJQ0tfQUNUSU9OX05PTkV8Q0xJQ0tfQUNUSU9OX09QRU58Q0xJQ0tfQUNUSU9OX09QRU5fTUVESUF8Q0xJQ0tfQUNUSU9OX1BBWXxDTElDS19BQ1RJT05fUExBWXxDTElDS19BQ1RJT05fU0lUfENMSUNLX0FDVElPTl9UT1VDSHxDT05URU5UX1RZUEVfQVRPTXxDT05URU5UX1RZUEVfRk9STXxDT05URU5UX1RZUEVfSFRNTHxDT05URU5UX1RZUEVfSlNPTnxDT05URU5UX1RZUEVfTExTRHxDT05URU5UX1RZUEVfUlNTfENPTlRFTlRfVFlQRV9URVhUfENPTlRFTlRfVFlQRV9YSFRNTHxDT05URU5UX1RZUEVfWE1MfENPTlRST0xfQkFDS3xDT05UUk9MX0RPV058Q09OVFJPTF9GV0R8Q09OVFJPTF9MQlVUVE9OfENPTlRST0xfTEVGVHxDT05UUk9MX01MX0xCVVRUT058Q09OVFJPTF9SSUdIVHxDT05UUk9MX1JPVF9MRUZUfENPTlRST0xfUk9UX1JJR0hUfENPTlRST0xfVVB8REFUQV9CT1JOfERBVEFfTkFNRXxEQVRBX09OTElORXxEQVRBX1BBWUlORk98REFUQV9TSU1fUE9TfERBVEFfU0lNX1JBVElOR3xEQVRBX1NJTV9TVEFUVVN8REVCVUdfQ0hBTk5FTHxERU5TSVRZfEVSUl9HRU5FUklDfEVSUl9NQUxGT1JNRURfUEFSQU1TfEVSUl9QQVJDRUxfUEVSTUlTU0lPTlN8RVJSX1JVTlRJTUVfUEVSTUlTU0lPTlN8RVJSX1RIUk9UVExFRHxFU1RBVEVfQUNDRVNTX0FMTE9XRURfQUdFTlRfQUREfEVTVEFURV9BQ0NFU1NfQUxMT1dFRF9BR0VOVF9SRU1PVkV8RVNUQVRFX0FDQ0VTU19BTExPV0VEX0dST1VQX0FERHxFU1RBVEVfQUNDRVNTX0FMTE9XRURfR1JPVVBfUkVNT1ZFfEVTVEFURV9BQ0NFU1NfQkFOTkVEX0FHRU5UX0FERHxFU1RBVEVfQUNDRVNTX0JBTk5FRF9BR0VOVF9SRU1PVkV8RkFMU0V8Rk9SQ0VfRElSRUNUX1BBVEh8RlJJQ1RJT058R0NOUF9SQURJVVN8R0NOUF9TVEFUSUN8R1JBVklUWV9NVUxUSVBMSUVSfEhPUklaT05UQUx8SFRUUF9CT0RZX01BWExFTkdUSHxIVFRQX0JPRFlfVFJVTkNBVEVEfEhUVFBfQ1VTVE9NX0hFQURFUnxIVFRQX01FVEhPRHxIVFRQX01JTUVUWVBFfEhUVFBfUFJBR01BX05PX0NBQ0hFfEhUVFBfVkVSQk9TRV9USFJPVFRMRXxIVFRQX1ZFUklGWV9DRVJUfElOVkVOVE9SWV9BTEx8SU5WRU5UT1JZX0FOSU1BVElPTnxJTlZFTlRPUllfQk9EWVBBUlR8SU5WRU5UT1JZX0NMT1RISU5HfElOVkVOVE9SWV9HRVNUVVJFfElOVkVOVE9SWV9MQU5ETUFSS3xJTlZFTlRPUllfTk9ORXxJTlZFTlRPUllfTk9URUNBUkR8SU5WRU5UT1JZX09CSkVDVHxJTlZFTlRPUllfU0NSSVBUfElOVkVOVE9SWV9TT1VORHxJTlZFTlRPUllfVEVYVFVSRXxKU09OX0FQUEVORHxLRk1fQ01EX1BBVVNFfEtGTV9DTURfUExBWXxLRk1fQ01EX1NFVF9NT0RFfEtGTV9DTURfU1RPUHxLRk1fQ09NTUFORHxLRk1fREFUQXxLRk1fRk9SV0FSRHxLRk1fTE9PUHxLRk1fTU9ERXxLRk1fUElOR19QT05HfEtGTV9SRVZFUlNFfEtGTV9ST1RBVElPTnxLRk1fVFJBTlNMQVRJT058TEFORF9MRVZFTHxMQU5EX0xPV0VSfExBTkRfTk9JU0V8TEFORF9SQUlTRXxMQU5EX1JFVkVSVHxMQU5EX1NNT09USHxMSU5LX0FMTF9DSElMRFJFTnxMSU5LX0FMTF9PVEhFUlN8TElOS19ST09UfExJTktfU0VUfExJTktfVEhJU3xMSVNUX1NUQVRfR0VPTUVUUklDX01FQU58TElTVF9TVEFUX01BWHxMSVNUX1NUQVRfTUVBTnxMSVNUX1NUQVRfTUVESUFOfExJU1RfU1RBVF9NSU58TElTVF9TVEFUX05VTV9DT1VOVHxMSVNUX1NUQVRfUkFOR0V8TElTVF9TVEFUX1NURF9ERVZ8TElTVF9TVEFUX1NVTXxMSVNUX1NUQVRfU1VNX1NRVUFSRVN8TE9PUHxNQVNLX0JBU0V8TUFTS19FVkVSWU9ORXxNQVNLX0dST1VQfE1BU0tfTkVYVHxNQVNLX09XTkVSfE9CSkVDVF9BVFRBQ0hFRF9QT0lOVHxPQkpFQ1RfQk9EWV9TSEFQRV9UWVBFfE9CSkVDVF9DSEFSQUNURVJfVElNRXxPQkpFQ1RfQ0xJQ0tfQUNUSU9OfE9CSkVDVF9DUkVBVE9SfE9CSkVDVF9ERVNDfE9CSkVDVF9HUk9VUHxPQkpFQ1RfSE9WRVJfSEVJR0hUfE9CSkVDVF9MQVNUX09XTkVSX0lEfE9CSkVDVF9OQU1FfE9CSkVDVF9PV05FUnxPQkpFQ1RfUEFUSEZJTkRJTkdfVFlQRXxPQkpFQ1RfUEhBTlRPTXxPQkpFQ1RfUEhZU0lDU3xPQkpFQ1RfUEhZU0lDU19DT1NUfE9CSkVDVF9QT1N8T0JKRUNUX1BSSU1fRVFVSVZBTEVOQ0V8T0JKRUNUX1JFTkRFUl9XRUlHSFR8T0JKRUNUX1JFVFVSTl9QQVJDRUx8T0JKRUNUX1JFVFVSTl9QQVJDRUxfT1dORVJ8T0JKRUNUX1JFVFVSTl9SRUdJT058T0JKRUNUX1JPT1R8T0JKRUNUX1JPVHxPQkpFQ1RfUlVOTklOR19TQ1JJUFRfQ09VTlR8T0JKRUNUX1NDUklQVF9NRU1PUll8T0JKRUNUX1NDUklQVF9USU1FfE9CSkVDVF9TRVJWRVJfQ09TVHxPQkpFQ1RfU1RSRUFNSU5HX0NPU1R8T0JKRUNUX1RFTVBfT05fUkVafE9CSkVDVF9UT1RBTF9TQ1JJUFRfQ09VTlR8T0JKRUNUX1VOS05PV05fREVUQUlMfE9CSkVDVF9WRUxPQ0lUWXxPUFRfQVZBVEFSfE9QVF9DSEFSQUNURVJ8T1BUX0VYQ0xVU0lPTl9WT0xVTUV8T1BUX0xFR0FDWV9MSU5LU0VUfE9QVF9NQVRFUklBTF9WT0xVTUV8T1BUX09USEVSfE9QVF9TVEFUSUNfT0JTVEFDTEV8T1BUX1dBTEtBQkxFfFBBUkNFTF9DT1VOVF9HUk9VUHxQQVJDRUxfQ09VTlRfT1RIRVJ8UEFSQ0VMX0NPVU5UX09XTkVSfFBBUkNFTF9DT1VOVF9TRUxFQ1RFRHxQQVJDRUxfQ09VTlRfVEVNUHxQQVJDRUxfQ09VTlRfVE9UQUx8UEFSQ0VMX0RFVEFJTFNfQVJFQXxQQVJDRUxfREVUQUlMU19ERVNDfFBBUkNFTF9ERVRBSUxTX0dST1VQfFBBUkNFTF9ERVRBSUxTX0lEfFBBUkNFTF9ERVRBSUxTX05BTUV8UEFSQ0VMX0RFVEFJTFNfT1dORVJ8UEFSQ0VMX0RFVEFJTFNfU0VFX0FWQVRBUlN8UEFSQ0VMX0ZMQUdfQUxMT1dfQUxMX09CSkVDVF9FTlRSWXxQQVJDRUxfRkxBR19BTExPV19DUkVBVEVfR1JPVVBfT0JKRUNUU3xQQVJDRUxfRkxBR19BTExPV19DUkVBVEVfT0JKRUNUU3xQQVJDRUxfRkxBR19BTExPV19EQU1BR0V8UEFSQ0VMX0ZMQUdfQUxMT1dfRkxZfFBBUkNFTF9GTEFHX0FMTE9XX0dST1VQX09CSkVDVF9FTlRSWXxQQVJDRUxfRkxBR19BTExPV19HUk9VUF9TQ1JJUFRTfFBBUkNFTF9GTEFHX0FMTE9XX0xBTkRNQVJLfFBBUkNFTF9GTEFHX0FMTE9XX1NDUklQVFN8UEFSQ0VMX0ZMQUdfQUxMT1dfVEVSUkFGT1JNfFBBUkNFTF9GTEFHX0xPQ0FMX1NPVU5EX09OTFl8UEFSQ0VMX0ZMQUdfUkVTVFJJQ1RfUFVTSE9CSkVDVHxQQVJDRUxfRkxBR19VU0VfQUNDRVNTX0dST1VQfFBBUkNFTF9GTEFHX1VTRV9BQ0NFU1NfTElTVHxQQVJDRUxfRkxBR19VU0VfQkFOX0xJU1R8UEFSQ0VMX0ZMQUdfVVNFX0xBTkRfUEFTU19MSVNUfFBBUkNFTF9NRURJQV9DT01NQU5EX0FHRU5UfFBBUkNFTF9NRURJQV9DT01NQU5EX0FVVE9fQUxJR058UEFSQ0VMX01FRElBX0NPTU1BTkRfREVTQ3xQQVJDRUxfTUVESUFfQ09NTUFORF9MT09QfFBBUkNFTF9NRURJQV9DT01NQU5EX0xPT1BfU0VUfFBBUkNFTF9NRURJQV9DT01NQU5EX1BBVVNFfFBBUkNFTF9NRURJQV9DT01NQU5EX1BMQVl8UEFSQ0VMX01FRElBX0NPTU1BTkRfU0laRXxQQVJDRUxfTUVESUFfQ09NTUFORF9TVE9QfFBBUkNFTF9NRURJQV9DT01NQU5EX1RFWFRVUkV8UEFSQ0VMX01FRElBX0NPTU1BTkRfVElNRXxQQVJDRUxfTUVESUFfQ09NTUFORF9UWVBFfFBBUkNFTF9NRURJQV9DT01NQU5EX1VOTE9BRHxQQVJDRUxfTUVESUFfQ09NTUFORF9VUkx8UEFTU19BTFdBWVN8UEFTU19JRl9OT1RfSEFORExFRHxQQVNTX05FVkVSfFBBU1NJVkV8UEFUUk9MX1BBVVNFX0FUX1dBWVBPSU5UU3xQQVlNRU5UX0lORk9fT05fRklMRXxQQVlNRU5UX0lORk9fVVNFRHxQQVlfREVGQVVMVHxQQVlfSElERXxQRVJNSVNTSU9OX0FUVEFDSHxQRVJNSVNTSU9OX0NIQU5HRV9MSU5LU3xQRVJNSVNTSU9OX0NPTlRST0xfQ0FNRVJBfFBFUk1JU1NJT05fREVCSVR8UEVSTUlTU0lPTl9PVkVSUklERV9BTklNQVRJT05TfFBFUk1JU1NJT05fUkVUVVJOX09CSkVDVFN8UEVSTUlTU0lPTl9TSUxFTlRfRVNUQVRFX01BTkFHRU1FTlR8UEVSTUlTU0lPTl9UQUtFX0NPTlRST0xTfFBFUk1JU1NJT05fVEVMRVBPUlR8UEVSTUlTU0lPTl9UUkFDS19DQU1FUkF8UEVSTUlTU0lPTl9UUklHR0VSX0FOSU1BVElPTnxQRVJNX0FMTHxQRVJNX0NPUFl8UEVSTV9NT0RJRll8UEVSTV9NT1ZFfFBFUk1fVFJBTlNGRVJ8UElOR19QT05HfFBSSU1fQUxQSEFfTU9ERXxQUklNX0FMUEhBX01PREVfQkxFTkR8UFJJTV9BTFBIQV9NT0RFX0VNSVNTSVZFfFBSSU1fQUxQSEFfTU9ERV9NQVNLfFBSSU1fQUxQSEFfTU9ERV9OT05FfFBSSU1fQlVNUF9CQVJLfFBSSU1fQlVNUF9CTE9CU3xQUklNX0JVTVBfQlJJQ0tTfFBSSU1fQlVNUF9CUklHSFR8UFJJTV9CVU1QX0NIRUNLRVJ8UFJJTV9CVU1QX0NPTkNSRVRFfFBSSU1fQlVNUF9EQVJLfFBSSU1fQlVNUF9ESVNLU3xQUklNX0JVTVBfR1JBVkVMfFBSSU1fQlVNUF9MQVJHRVRJTEV8UFJJTV9CVU1QX05PTkV8UFJJTV9CVU1QX1NISU5ZfFBSSU1fQlVNUF9TSURJTkd8UFJJTV9CVU1QX1NUT05FfFBSSU1fQlVNUF9TVFVDQ098UFJJTV9CVU1QX1NVQ1RJT058UFJJTV9CVU1QX1RJTEV8UFJJTV9CVU1QX1dFQVZFfFBSSU1fQlVNUF9XT09EfFBSSU1fQ09MT1J8UFJJTV9ERVNDfFBSSU1fRkxFWElCTEV8UFJJTV9GVUxMQlJJR0hUfFBSSU1fR0xPV3xQUklNX0hPTEVfQ0lSQ0xFfFBSSU1fSE9MRV9ERUZBVUxUfFBSSU1fSE9MRV9TUVVBUkV8UFJJTV9IT0xFX1RSSUFOR0xFfFBSSU1fTElOS19UQVJHRVR8UFJJTV9NQVRFUklBTHxQUklNX01BVEVSSUFMX0ZMRVNIfFBSSU1fTUFURVJJQUxfR0xBU1N8UFJJTV9NQVRFUklBTF9NRVRBTHxQUklNX01BVEVSSUFMX1BMQVNUSUN8UFJJTV9NQVRFUklBTF9SVUJCRVJ8UFJJTV9NQVRFUklBTF9TVE9ORXxQUklNX01BVEVSSUFMX1dPT0R8UFJJTV9NRURJQV9BTFRfSU1BR0VfRU5BQkxFfFBSSU1fTUVESUFfQVVUT19MT09QfFBSSU1fTUVESUFfQVVUT19QTEFZfFBSSU1fTUVESUFfQVVUT19TQ0FMRXxQUklNX01FRElBX0FVVE9fWk9PTXxQUklNX01FRElBX0NPTlRST0xTfFBSSU1fTUVESUFfQ09OVFJPTFNfTUlOSXxQUklNX01FRElBX0NPTlRST0xTX1NUQU5EQVJEfFBSSU1fTUVESUFfQ1VSUkVOVF9VUkx8UFJJTV9NRURJQV9GSVJTVF9DTElDS19JTlRFUkFDVHxQUklNX01FRElBX0hFSUdIVF9QSVhFTFN8UFJJTV9NRURJQV9IT01FX1VSTHxQUklNX01FRElBX01BWF9IRUlHSFRfUElYRUxTfFBSSU1fTUVESUFfTUFYX1VSTF9MRU5HVEh8UFJJTV9NRURJQV9NQVhfV0hJVEVMSVNUX0NPVU5UfFBSSU1fTUVESUFfTUFYX1dISVRFTElTVF9TSVpFfFBSSU1fTUVESUFfTUFYX1dJRFRIX1BJWEVMU3xQUklNX01FRElBX1BBUkFNX01BWHxQUklNX01FRElBX1BFUk1TX0NPTlRST0x8UFJJTV9NRURJQV9QRVJNU19JTlRFUkFDVHxQUklNX01FRElBX1BFUk1fQU5ZT05FfFBSSU1fTUVESUFfUEVSTV9HUk9VUHxQUklNX01FRElBX1BFUk1fTk9ORXxQUklNX01FRElBX1BFUk1fT1dORVJ8UFJJTV9NRURJQV9XSElURUxJU1R8UFJJTV9NRURJQV9XSElURUxJU1RfRU5BQkxFfFBSSU1fTUVESUFfV0lEVEhfUElYRUxTfFBSSU1fTkFNRXxQUklNX05PUk1BTHxQUklNX09NRUdBfFBSSU1fUEhBTlRPTXxQUklNX1BIWVNJQ1N8UFJJTV9QSFlTSUNTX1NIQVBFX0NPTlZFWHxQUklNX1BIWVNJQ1NfU0hBUEVfTk9ORXxQUklNX1BIWVNJQ1NfU0hBUEVfUFJJTXxQUklNX1BIWVNJQ1NfU0hBUEVfVFlQRXxQUklNX1BPSU5UX0xJR0hUfFBSSU1fUE9TSVRJT058UFJJTV9QT1NfTE9DQUx8UFJJTV9ST1RBVElPTnxQUklNX1JPVF9MT0NBTHxQUklNX1NDVUxQVF9GTEFHX0lOVkVSVHxQUklNX1NDVUxQVF9GTEFHX01JUlJPUnxQUklNX1NDVUxQVF9UWVBFX0NZTElOREVSfFBSSU1fU0NVTFBUX1RZUEVfTUFTS3xQUklNX1NDVUxQVF9UWVBFX1BMQU5FfFBSSU1fU0NVTFBUX1RZUEVfU1BIRVJFfFBSSU1fU0NVTFBUX1RZUEVfVE9SVVN8UFJJTV9TSElOWV9ISUdIfFBSSU1fU0hJTllfTE9XfFBSSU1fU0hJTllfTUVESVVNfFBSSU1fU0hJTllfTk9ORXxQUklNX1NJWkV8UFJJTV9TTElDRXxQUklNX1NQRUNVTEFSfFBSSU1fVEVNUF9PTl9SRVp8UFJJTV9URVhHRU58UFJJTV9URVhHRU5fREVGQVVMVHxQUklNX1RFWEdFTl9QTEFOQVJ8UFJJTV9URVhUfFBSSU1fVEVYVFVSRXxQUklNX1RZUEV8UFJJTV9UWVBFX0JPWHxQUklNX1RZUEVfQ1lMSU5ERVJ8UFJJTV9UWVBFX1BSSVNNfFBSSU1fVFlQRV9SSU5HfFBSSU1fVFlQRV9TQ1VMUFR8UFJJTV9UWVBFX1NQSEVSRXxQUklNX1RZUEVfVE9SVVN8UFJJTV9UWVBFX1RVQkV8UFJPRklMRV9OT05FfFBST0ZJTEVfU0NSSVBUX01FTU9SWXxQU1lTX1BBUlRfQkZfREVTVF9DT0xPUnxQU1lTX1BBUlRfQkZfT05FfFBTWVNfUEFSVF9CRl9PTkVfTUlOVVNfREVTVF9DT0xPUnxQU1lTX1BBUlRfQkZfT05FX01JTlVTX1NPVVJDRV9BTFBIQXxQU1lTX1BBUlRfQkZfT05FX01JTlVTX1NPVVJDRV9DT0xPUnxQU1lTX1BBUlRfQkZfU09VUkNFX0FMUEhBfFBTWVNfUEFSVF9CRl9TT1VSQ0VfQ09MT1J8UFNZU19QQVJUX0JGX1pFUk98UFNZU19QQVJUX0JMRU5EX0ZVTkNfREVTVHxQU1lTX1BBUlRfQkxFTkRfRlVOQ19TT1VSQ0V8UFNZU19QQVJUX0JPVU5DRV9NQVNLfFBTWVNfUEFSVF9FTUlTU0lWRV9NQVNLfFBTWVNfUEFSVF9FTkRfQUxQSEF8UFNZU19QQVJUX0VORF9DT0xPUnxQU1lTX1BBUlRfRU5EX0dMT1d8UFNZU19QQVJUX0VORF9TQ0FMRXxQU1lTX1BBUlRfRkxBR1N8UFNZU19QQVJUX0ZPTExPV19TUkNfTUFTS3xQU1lTX1BBUlRfRk9MTE9XX1ZFTE9DSVRZX01BU0t8UFNZU19QQVJUX0lOVEVSUF9DT0xPUl9NQVNLfFBTWVNfUEFSVF9JTlRFUlBfU0NBTEVfTUFTS3xQU1lTX1BBUlRfTUFYX0FHRXxQU1lTX1BBUlRfUklCQk9OX01BU0t8UFNZU19QQVJUX1NUQVJUX0FMUEhBfFBTWVNfUEFSVF9TVEFSVF9DT0xPUnxQU1lTX1BBUlRfU1RBUlRfR0xPV3xQU1lTX1BBUlRfU1RBUlRfU0NBTEV8UFNZU19QQVJUX1RBUkdFVF9MSU5FQVJfTUFTS3xQU1lTX1BBUlRfVEFSR0VUX1BPU19NQVNLfFBTWVNfUEFSVF9XSU5EX01BU0t8UFNZU19TUkNfQUNDRUx8UFNZU19TUkNfQU5HTEVfQkVHSU58UFNZU19TUkNfQU5HTEVfRU5EfFBTWVNfU1JDX0JVUlNUX1BBUlRfQ09VTlR8UFNZU19TUkNfQlVSU1RfUkFESVVTfFBTWVNfU1JDX0JVUlNUX1JBVEV8UFNZU19TUkNfQlVSU1RfU1BFRURfTUFYfFBTWVNfU1JDX0JVUlNUX1NQRUVEX01JTnxQU1lTX1NSQ19NQVhfQUdFfFBTWVNfU1JDX09NRUdBfFBTWVNfU1JDX1BBVFRFUk58UFNZU19TUkNfUEFUVEVSTl9BTkdMRXxQU1lTX1NSQ19QQVRURVJOX0FOR0xFX0NPTkV8UFNZU19TUkNfUEFUVEVSTl9BTkdMRV9DT05FX0VNUFRZfFBTWVNfU1JDX1BBVFRFUk5fRFJPUHxQU1lTX1NSQ19QQVRURVJOX0VYUExPREV8UFNZU19TUkNfVEFSR0VUX0tFWXxQU1lTX1NSQ19URVhUVVJFfFBVQkxJQ19DSEFOTkVMfFBVUlNVSVRfRlVaWl9GQUNUT1J8UFVSU1VJVF9HT0FMX1RPTEVSQU5DRXxQVVJTVUlUX0lOVEVSQ0VQVHxQVVJTVUlUX09GRlNFVHxQVV9FVkFERV9ISURERU58UFVfRVZBREVfU1BPVFRFRHxQVV9GQUlMVVJFX0RZTkFNSUNfUEFUSEZJTkRJTkdfRElTQUJMRUR8UFVfRkFJTFVSRV9JTlZBTElEX0dPQUx8UFVfRkFJTFVSRV9JTlZBTElEX1NUQVJUfFBVX0ZBSUxVUkVfTk9fTkFWTUVTSHxQVV9GQUlMVVJFX05PX1ZBTElEX0RFU1RJTkFUSU9OfFBVX0ZBSUxVUkVfT1RIRVJ8UFVfRkFJTFVSRV9QQVJDRUxfVU5SRUFDSEFCTEV8UFVfRkFJTFVSRV9UQVJHRVRfR09ORXxQVV9GQUlMVVJFX1VOUkVBQ0hBQkxFfFBVX0dPQUxfUkVBQ0hFRHxQVV9TTE9XRE9XTl9ESVNUQU5DRV9SRUFDSEVEfFJDRVJSX0NBU1RfVElNRV9FWENFRURFRHxSQ0VSUl9TSU1fUEVSRl9MT1d8UkNFUlJfVU5LTk9XTnxSQ19EQVRBX0ZMQUdTfFJDX0RFVEVDVF9QSEFOVE9NfFJDX0dFVF9MSU5LX05VTXxSQ19HRVRfTk9STUFMfFJDX0dFVF9ST09UX0tFWXxSQ19NQVhfSElUU3xSQ19SRUpFQ1RfQUdFTlRTfFJDX1JFSkVDVF9MQU5EfFJDX1JFSkVDVF9OT05QSFlTSUNBTHxSQ19SRUpFQ1RfUEhZU0lDQUx8UkNfUkVKRUNUX1RZUEVTfFJFR0lPTl9GTEFHX0FMTE9XX0RBTUFHRXxSRUdJT05fRkxBR19BTExPV19ESVJFQ1RfVEVMRVBPUlR8UkVHSU9OX0ZMQUdfQkxPQ0tfRkxZfFJFR0lPTl9GTEFHX0JMT0NLX1RFUlJBRk9STXxSRUdJT05fRkxBR19ESVNBQkxFX0NPTExJU0lPTlN8UkVHSU9OX0ZMQUdfRElTQUJMRV9QSFlTSUNTfFJFR0lPTl9GTEFHX0ZJWEVEX1NVTnxSRUdJT05fRkxBR19SRVNUUklDVF9QVVNIT0JKRUNUfFJFR0lPTl9GTEFHX1NBTkRCT1h8UkVNT1RFX0RBVEFfQ0hBTk5FTHxSRU1PVEVfREFUQV9SRVBMWXxSRU1PVEVfREFUQV9SRVFVRVNUfFJFUVVJUkVfTElORV9PRl9TSUdIVHxSRVNUSVRVVElPTnxSRVZFUlNFfFJPVEFURXxTQ0FMRXxTQ1JJUFRFRHxTSU1fU1RBVF9QQ1RfQ0hBUlNfU1RFUFBFRHxTTU9PVEh8U1RBVFVTX0JMT0NLX0dSQUJ8U1RBVFVTX0JMT0NLX0dSQUJfT0JKRUNUfFNUQVRVU19CT1VORFNfRVJST1J8U1RBVFVTX0NBU1RfU0hBRE9XU3xTVEFUVVNfRElFX0FUX0VER0V8U1RBVFVTX0lOVEVSTkFMX0VSUk9SfFNUQVRVU19NQUxGT1JNRURfUEFSQU1TfFNUQVRVU19OT1RfRk9VTkR8U1RBVFVTX05PVF9TVVBQT1JURUR8U1RBVFVTX09LfFNUQVRVU19QSEFOVE9NfFNUQVRVU19QSFlTSUNTfFNUQVRVU19SRVRVUk5fQVRfRURHRXxTVEFUVVNfUk9UQVRFX1h8U1RBVFVTX1JPVEFURV9ZfFNUQVRVU19ST1RBVEVfWnxTVEFUVVNfU0FOREJPWHxTVEFUVVNfVFlQRV9NSVNNQVRDSHxTVEFUVVNfV0hJVEVMSVNUX0ZBSUxFRHxTVFJJTkdfVFJJTXxTVFJJTkdfVFJJTV9IRUFEfFNUUklOR19UUklNX1RBSUx8VE9VQ0hfSU5WQUxJRF9GQUNFfFRSQVZFUlNBTF9UWVBFfFRSQVZFUlNBTF9UWVBFX0ZBU1R8VFJBVkVSU0FMX1RZUEVfTk9ORXxUUkFWRVJTQUxfVFlQRV9TTE9XfFRSVUV8VFlQRV9GTE9BVHxUWVBFX0lOVEVHRVJ8VFlQRV9JTlZBTElEfFRZUEVfS0VZfFRZUEVfUk9UQVRJT058VFlQRV9TVFJJTkd8VFlQRV9WRUNUT1J8VkVISUNMRV9BTkdVTEFSX0RFRkxFQ1RJT05fRUZGSUNJRU5DWXxWRUhJQ0xFX0FOR1VMQVJfREVGTEVDVElPTl9USU1FU0NBTEV8VkVISUNMRV9BTkdVTEFSX0ZSSUNUSU9OX1RJTUVTQ0FMRXxWRUhJQ0xFX0FOR1VMQVJfTU9UT1JfREVDQVlfVElNRVNDQUxFfFZFSElDTEVfQU5HVUxBUl9NT1RPUl9ESVJFQ1RJT058VkVISUNMRV9BTkdVTEFSX01PVE9SX1RJTUVTQ0FMRXxWRUhJQ0xFX0JBTktJTkdfRUZGSUNJRU5DWXxWRUhJQ0xFX0JBTktJTkdfTUlYfFZFSElDTEVfQkFOS0lOR19USU1FU0NBTEV8VkVISUNMRV9CVU9ZQU5DWXxWRUhJQ0xFX0ZMQUdfQ0FNRVJBX0RFQ09VUExFRHxWRUhJQ0xFX0ZMQUdfSE9WRVJfR0xPQkFMX0hFSUdIVHxWRUhJQ0xFX0ZMQUdfSE9WRVJfVEVSUkFJTl9PTkxZfFZFSElDTEVfRkxBR19IT1ZFUl9VUF9PTkxZfFZFSElDTEVfRkxBR19IT1ZFUl9XQVRFUl9PTkxZfFZFSElDTEVfRkxBR19MSU1JVF9NT1RPUl9VUHxWRUhJQ0xFX0ZMQUdfTElNSVRfUk9MTF9PTkxZfFZFSElDTEVfRkxBR19NT1VTRUxPT0tfQkFOS3xWRUhJQ0xFX0ZMQUdfTU9VU0VMT09LX1NURUVSfFZFSElDTEVfRkxBR19OT19ERUZMRUNUSU9OX1VQfFZFSElDTEVfSE9WRVJfRUZGSUNJRU5DWXxWRUhJQ0xFX0hPVkVSX0hFSUdIVHxWRUhJQ0xFX0hPVkVSX1RJTUVTQ0FMRXxWRUhJQ0xFX0xJTkVBUl9ERUZMRUNUSU9OX0VGRklDSUVOQ1l8VkVISUNMRV9MSU5FQVJfREVGTEVDVElPTl9USU1FU0NBTEV8VkVISUNMRV9MSU5FQVJfRlJJQ1RJT05fVElNRVNDQUxFfFZFSElDTEVfTElORUFSX01PVE9SX0RFQ0FZX1RJTUVTQ0FMRXxWRUhJQ0xFX0xJTkVBUl9NT1RPUl9ESVJFQ1RJT058VkVISUNMRV9MSU5FQVJfTU9UT1JfT0ZGU0VUfFZFSElDTEVfTElORUFSX01PVE9SX1RJTUVTQ0FMRXxWRUhJQ0xFX1JFRkVSRU5DRV9GUkFNRXxWRUhJQ0xFX1RZUEVfQUlSUExBTkV8VkVISUNMRV9UWVBFX0JBTExPT058VkVISUNMRV9UWVBFX0JPQVR8VkVISUNMRV9UWVBFX0NBUnxWRUhJQ0xFX1RZUEVfTk9ORXxWRUhJQ0xFX1RZUEVfU0xFRHxWRUhJQ0xFX1ZFUlRJQ0FMX0FUVFJBQ1RJT05fRUZGSUNJRU5DWXxWRUhJQ0xFX1ZFUlRJQ0FMX0FUVFJBQ1RJT05fVElNRVNDQUxFfFZFUlRJQ0FMfFdBTkRFUl9QQVVTRV9BVF9XQVlQT0lOVFN8WFBfRVJST1JfRVhQRVJJRU5DRVNfRElTQUJMRUR8WFBfRVJST1JfRVhQRVJJRU5DRV9ESVNBQkxFRHxYUF9FUlJPUl9FWFBFUklFTkNFX1NVU1BFTkRFRHxYUF9FUlJPUl9JTlZBTElEX0VYUEVSSUVOQ0V8WFBfRVJST1JfSU5WQUxJRF9QQVJBTUVURVJTfFhQX0VSUk9SX0tFWV9OT1RfRk9VTkR8WFBfRVJST1JfTUFUVVJJVFlfRVhDRUVERUR8WFBfRVJST1JfTk9ORXxYUF9FUlJPUl9OT1RfRk9VTkR8WFBfRVJST1JfTk9UX1BFUk1JVFRFRHxYUF9FUlJPUl9OT19FWFBFUklFTkNFfFhQX0VSUk9SX1FVT1RBX0VYQ0VFREVEfFhQX0VSUk9SX1JFVFJZX1VQREFURXxYUF9FUlJPUl9TVE9SQUdFX0VYQ0VQVElPTnxYUF9FUlJPUl9TVE9SRV9ESVNBQkxFRHxYUF9FUlJPUl9USFJPVFRMRUR8WFBfRVJST1JfVU5LTk9XTl9FUlJPUiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmludGVnZXIuYm9vbGVhbi5sc2wiIDogIkZBTFNFfFRSVUUiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5xdWF0ZXJuaW9uLmxzbCIgOiAiWkVST19ST1RBVElPTiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLnN0cmluZy5sc2wiIDogIkVPRnxKU09OX0FSUkFZfEpTT05fREVMRVRFfEpTT05fRkFMU0V8SlNPTl9JTlZBTElEfEpTT05fTlVMTHxKU09OX05VTUJFUnxKU09OX09CSkVDVHxKU09OX1NUUklOR3xKU09OX1RSVUV8TlVMTF9LRVl8VEVYVFVSRV9CTEFOS3xURVhUVVJFX0RFRkFVTFR8VEVYVFVSRV9NRURJQXxURVhUVVJFX1BMWVdPT0R8VEVYVFVSRV9UUkFOU1BBUkVOVHxVUkxfUkVRVUVTVF9ERU5JRUR8VVJMX1JFUVVFU1RfR1JBTlRFRCIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLnZlY3Rvci5sc2wiIDogIlRPVUNIX0lOVkFMSURfVEVYQ09PUkR8VE9VQ0hfSU5WQUxJRF9WRUNUT1J8WkVST19WRUNUT1IiLAogICAgICAgICJpbnZhbGlkLmJyb2tlbi5sc2wiOiAiTEFORF9MQVJHRV9CUlVTSHxMQU5EX01FRElVTV9CUlVTSHxMQU5EX1NNQUxMX0JSVVNIIiwKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkLmxzbCIgOiAiQVRUQUNIX0xQRUN8QVRUQUNIX1JQRUN8REFUQV9SQVRJTkd8T0JKRUNUX0FUVEFDSE1FTlRfR0VPTUVUUllfQllURVN8T0JKRUNUX0FUVEFDSE1FTlRfU1VSRkFDRV9BUkVBfFBSSU1fQ0FTVF9TSEFET1dTfFBSSU1fTUFURVJJQUxfTElHSFR8UFJJTV9UWVBFX0xFR0FDWXxQU1lTX1NSQ19JTk5FUkFOR0xFfFBTWVNfU1JDX09VVEVSQU5HTEV8VkVISUNMRV9GTEFHX05PX0ZMWV9VUHxsbENsZWFyRXhwZXJpZW5jZVBlcm1pc3Npb25zfGxsQ2xvdWR8bGxHZXRFeHBlcmllbmNlTGlzdHxsbE1ha2VFeHBsb3Npb258bGxNYWtlRmlyZXxsbE1ha2VGb3VudGFpbnxsbE1ha2VTbW9rZXxsbFJlbW90ZURhdGFTZXRSZWdpb258bGxTb3VuZHxsbFNvdW5kUHJlbG9hZHxsbFhvckJhc2U2NFN0cmluZ3N8bGxYb3JCYXNlNjRTdHJpbmdzQ29ycmVjdCIsCiAgICAgICAgImludmFsaWQuaWxsZWdhbC5sc2wiOiAiZXZlbnQiLAogICAgICAgICJpbnZhbGlkLnVuaW1wbGVtZW50ZWQubHNsIjogIkNIQVJBQ1RFUl9NQVhfQU5HVUxBUl9BQ0NFTHxDSEFSQUNURVJfTUFYX0FOR1VMQVJfU1BFRUR8Q0hBUkFDVEVSX1RVUk5fU1BFRURfTVVMVElQTElFUnxQRVJNSVNTSU9OX0NIQU5HRV9KT0lOVFN8UEVSTUlTU0lPTl9DSEFOR0VfUEVSTUlTU0lPTlN8UEVSTUlTU0lPTl9FWFBFUklFTkNFfFBFUk1JU1NJT05fUkVMRUFTRV9PV05FUlNISVB8UEVSTUlTU0lPTl9SRU1BUF9DT05UUk9MU3xQUklNX1BIWVNJQ1NfTUFURVJJQUx8UFNZU19TUkNfT0JKX1JFTF9NQVNLfGxsQ29sbGlzaW9uU3ByaXRlfGxsUG9pbnRBdHxsbFJlZnJlc2hQcmltVVJMfGxsUmVsZWFzZUNhbWVyYXxsbFJlbW90ZUxvYWRTY3JpcHR8bGxTZXRQcmltVVJMfGxsU3RvcFBvaW50QXR8bGxUYWtlQ2FtZXJhIiwKICAgICAgICAicmVzZXJ2ZWQuZ29kbW9kZS5sc2wiOiAibGxHb2RMaWtlUmV6T2JqZWN0fGxsU2V0SW52ZW50b3J5UGVybU1hc2t8bGxTZXRPYmplY3RQZXJtTWFzayIsCiAgICAgICAgInJlc2VydmVkLmxvZy5sc2wiIDogInByaW50IiwKICAgICAgICAia2V5d29yZC5jb250cm9sLmxzbCIgOiAiZG98ZWxzZXxmb3J8aWZ8anVtcHxyZXR1cm58d2hpbGUiLAogICAgICAgICJzdG9yYWdlLnR5cGUubHNsIiA6ICJmbG9hdHxpbnRlZ2VyfGtleXxsaXN0fHF1YXRlcm5pb258cm90YXRpb258c3RyaW5nfHZlY3RvciIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24ubHNsIjogImxsQWJzfGxsQWNvc3xsbEFkZFRvTGFuZEJhbkxpc3R8bGxBZGRUb0xhbmRQYXNzTGlzdHxsbEFkanVzdFNvdW5kVm9sdW1lfGxsQWdlbnRJbkV4cGVyaWVuY2V8bGxBbGxvd0ludmVudG9yeURyb3B8bGxBbmdsZUJldHdlZW58bGxBcHBseUltcHVsc2V8bGxBcHBseVJvdGF0aW9uYWxJbXB1bHNlfGxsQXNpbnxsbEF0YW4yfGxsQXR0YWNoVG9BdmF0YXJ8bGxBdHRhY2hUb0F2YXRhclRlbXB8bGxBdmF0YXJPbkxpbmtTaXRUYXJnZXR8bGxBdmF0YXJPblNpdFRhcmdldHxsbEF4ZXMyUm90fGxsQXhpc0FuZ2xlMlJvdHxsbEJhc2U2NFRvSW50ZWdlcnxsbEJhc2U2NFRvU3RyaW5nfGxsQnJlYWtBbGxMaW5rc3xsbEJyZWFrTGlua3xsbENTVjJMaXN0fGxsQ2FzdFJheXxsbENlaWx8bGxDbGVhckNhbWVyYVBhcmFtc3xsbENsZWFyTGlua01lZGlhfGxsQ2xlYXJQcmltTWVkaWF8bGxDbG9zZVJlbW90ZURhdGFDaGFubmVsfGxsQ29sbGlzaW9uRmlsdGVyfGxsQ29sbGlzaW9uU291bmR8bGxDb3N8bGxDcmVhdGVDaGFyYWN0ZXJ8bGxDcmVhdGVLZXlWYWx1ZXxsbENyZWF0ZUxpbmt8bGxEYXRhU2l6ZUtleVZhbHVlfGxsRGVsZXRlQ2hhcmFjdGVyfGxsRGVsZXRlS2V5VmFsdWV8bGxEZWxldGVTdWJMaXN0fGxsRGVsZXRlU3ViU3RyaW5nfGxsRGV0YWNoRnJvbUF2YXRhcnxsbERldGVjdGVkR3JhYnxsbERldGVjdGVkR3JvdXB8bGxEZXRlY3RlZEtleXxsbERldGVjdGVkTGlua051bWJlcnxsbERldGVjdGVkTmFtZXxsbERldGVjdGVkT3duZXJ8bGxEZXRlY3RlZFBvc3xsbERldGVjdGVkUm90fGxsRGV0ZWN0ZWRUb3VjaEJpbm9ybWFsfGxsRGV0ZWN0ZWRUb3VjaEZhY2V8bGxEZXRlY3RlZFRvdWNoTm9ybWFsfGxsRGV0ZWN0ZWRUb3VjaFBvc3xsbERldGVjdGVkVG91Y2hTVHxsbERldGVjdGVkVG91Y2hVVnxsbERldGVjdGVkVHlwZXxsbERldGVjdGVkVmVsfGxsRGlhbG9nfGxsRGllfGxsRHVtcExpc3QyU3RyaW5nfGxsRWRnZU9mV29ybGR8bGxFamVjdEZyb21MYW5kfGxsRW1haWx8bGxFc2NhcGVVUkx8bGxFdWxlcjJSb3R8bGxFdmFkZXxsbEV4ZWNDaGFyYWN0ZXJDbWR8bGxGYWJzfGxsRmxlZUZyb218bGxGbG9vcnxsbEZvcmNlTW91c2Vsb29rfGxsRnJhbmR8bGxHZW5lcmF0ZUtleXxsbEdldEFjY2VsfGxsR2V0QWdlbnRJbmZvfGxsR2V0QWdlbnRMYW5ndWFnZXxsbEdldEFnZW50TGlzdHxsbEdldEFnZW50U2l6ZXxsbEdldEFscGhhfGxsR2V0QW5kUmVzZXRUaW1lfGxsR2V0QW5pbWF0aW9ufGxsR2V0QW5pbWF0aW9uTGlzdHxsbEdldEFuaW1hdGlvbk92ZXJyaWRlfGxsR2V0QXR0YWNoZWR8bGxHZXRBdHRhY2hlZExpc3R8bGxHZXRCb3VuZGluZ0JveHxsbEdldENhbWVyYVBvc3xsbEdldENhbWVyYVJvdHxsbEdldENlbnRlck9mTWFzc3xsbEdldENsb3Nlc3ROYXZQb2ludHxsbEdldENvbG9yfGxsR2V0Q3JlYXRvcnxsbEdldERhdGV8bGxHZXREaXNwbGF5TmFtZXxsbEdldEVuZXJneXxsbEdldEVudnxsbEdldEV4cGVyaWVuY2VEZXRhaWxzfGxsR2V0RXhwZXJpZW5jZUVycm9yTWVzc2FnZXxsbEdldEZvcmNlfGxsR2V0RnJlZU1lbW9yeXxsbEdldEZyZWVVUkxzfGxsR2V0R01UY2xvY2t8bGxHZXRHZW9tZXRyaWNDZW50ZXJ8bGxHZXRIVFRQSGVhZGVyfGxsR2V0SW52ZW50b3J5Q3JlYXRvcnxsbEdldEludmVudG9yeUtleXxsbEdldEludmVudG9yeU5hbWV8bGxHZXRJbnZlbnRvcnlOdW1iZXJ8bGxHZXRJbnZlbnRvcnlQZXJtTWFza3xsbEdldEludmVudG9yeVR5cGV8bGxHZXRLZXl8bGxHZXRMYW5kT3duZXJBdHxsbEdldExpbmtLZXl8bGxHZXRMaW5rTWVkaWF8bGxHZXRMaW5rTmFtZXxsbEdldExpbmtOdW1iZXJ8bGxHZXRMaW5rTnVtYmVyT2ZTaWRlc3xsbEdldExpbmtQcmltaXRpdmVQYXJhbXN8bGxHZXRMaXN0RW50cnlUeXBlfGxsR2V0TGlzdExlbmd0aHxsbEdldExvY2FsUG9zfGxsR2V0TG9jYWxSb3R8bGxHZXRNYXNzfGxsR2V0TWFzc01LU3xsbEdldE1heFNjYWxlRmFjdG9yfGxsR2V0TWVtb3J5TGltaXR8bGxHZXRNaW5TY2FsZUZhY3RvcnxsbEdldE5leHRFbWFpbHxsbEdldE5vdGVjYXJkTGluZXxsbEdldE51bWJlck9mTm90ZWNhcmRMaW5lc3xsbEdldE51bWJlck9mUHJpbXN8bGxHZXROdW1iZXJPZlNpZGVzfGxsR2V0T2JqZWN0RGVzY3xsbEdldE9iamVjdERldGFpbHN8bGxHZXRPYmplY3RNYXNzfGxsR2V0T2JqZWN0TmFtZXxsbEdldE9iamVjdFBlcm1NYXNrfGxsR2V0T2JqZWN0UHJpbUNvdW50fGxsR2V0T21lZ2F8bGxHZXRPd25lcnxsbEdldE93bmVyS2V5fGxsR2V0UGFyY2VsRGV0YWlsc3xsbEdldFBhcmNlbEZsYWdzfGxsR2V0UGFyY2VsTWF4UHJpbXN8bGxHZXRQYXJjZWxNdXNpY1VSTHxsbEdldFBhcmNlbFByaW1Db3VudHxsbEdldFBhcmNlbFByaW1Pd25lcnN8bGxHZXRQZXJtaXNzaW9uc3xsbEdldFBlcm1pc3Npb25zS2V5fGxsR2V0UGh5c2ljc01hdGVyaWFsfGxsR2V0UG9zfGxsR2V0UHJpbU1lZGlhUGFyYW1zfGxsR2V0UHJpbWl0aXZlUGFyYW1zfGxsR2V0UmVnaW9uQWdlbnRDb3VudHxsbEdldFJlZ2lvbkNvcm5lcnxsbEdldFJlZ2lvbkZQU3xsbEdldFJlZ2lvbkZsYWdzfGxsR2V0UmVnaW9uTmFtZXxsbEdldFJlZ2lvblRpbWVEaWxhdGlvbnxsbEdldFJvb3RQb3NpdGlvbnxsbEdldFJvb3RSb3RhdGlvbnxsbEdldFJvdHxsbEdldFNQTWF4TWVtb3J5fGxsR2V0U2NhbGV8bGxHZXRTY3JpcHROYW1lfGxsR2V0U2NyaXB0U3RhdGV8bGxHZXRTaW1TdGF0c3xsbEdldFNpbXVsYXRvckhvc3RuYW1lfGxsR2V0U3RhcnRQYXJhbWV0ZXJ8bGxHZXRTdGF0aWNQYXRofGxsR2V0U3RhdHVzfGxsR2V0U3ViU3RyaW5nfGxsR2V0U3VuRGlyZWN0aW9ufGxsR2V0VGV4dHVyZXxsbEdldFRleHR1cmVPZmZzZXR8bGxHZXRUZXh0dXJlUm90fGxsR2V0VGV4dHVyZVNjYWxlfGxsR2V0VGltZXxsbEdldFRpbWVPZkRheXxsbEdldFRpbWVzdGFtcHxsbEdldFRvcnF1ZXxsbEdldFVuaXhUaW1lfGxsR2V0VXNlZE1lbW9yeXxsbEdldFVzZXJuYW1lfGxsR2V0VmVsfGxsR2V0V2FsbGNsb2NrfGxsR2l2ZUludmVudG9yeXxsbEdpdmVJbnZlbnRvcnlMaXN0fGxsR2l2ZU1vbmV5fGxsR3JvdW5kfGxsR3JvdW5kQ29udG91cnxsbEdyb3VuZE5vcm1hbHxsbEdyb3VuZFJlcGVsfGxsR3JvdW5kU2xvcGV8bGxIVFRQUmVxdWVzdHxsbEhUVFBSZXNwb25zZXxsbEluc2VydFN0cmluZ3xsbEluc3RhbnRNZXNzYWdlfGxsSW50ZWdlclRvQmFzZTY0fGxsSnNvbjJMaXN0fGxsSnNvbkdldFZhbHVlfGxsSnNvblNldFZhbHVlfGxsSnNvblZhbHVlVHlwZXxsbEtleTJOYW1lfGxsS2V5Q291bnRLZXlWYWx1ZXxsbEtleXNLZXlWYWx1ZXxsbExpbmtQYXJ0aWNsZVN5c3RlbXxsbExpbmtTaXRUYXJnZXR8bGxMaXN0MkNTVnxsbExpc3QyRmxvYXR8bGxMaXN0MkludGVnZXJ8bGxMaXN0Mkpzb258bGxMaXN0MktleXxsbExpc3QyTGlzdHxsbExpc3QyTGlzdFN0cmlkZWR8bGxMaXN0MlJvdHxsbExpc3QyU3RyaW5nfGxsTGlzdDJWZWN0b3J8bGxMaXN0RmluZExpc3R8bGxMaXN0SW5zZXJ0TGlzdHxsbExpc3RSYW5kb21pemV8bGxMaXN0UmVwbGFjZUxpc3R8bGxMaXN0U29ydHxsbExpc3RTdGF0aXN0aWNzfGxsTGlzdGVufGxsTGlzdGVuQ29udHJvbHxsbExpc3RlblJlbW92ZXxsbExvYWRVUkx8bGxMb2d8bGxMb2cxMHxsbExvb2tBdHxsbExvb3BTb3VuZHxsbExvb3BTb3VuZE1hc3RlcnxsbExvb3BTb3VuZFNsYXZlfGxsTUQ1U3RyaW5nfGxsTWFuYWdlRXN0YXRlQWNjZXNzfGxsTWFwRGVzdGluYXRpb258bGxNZXNzYWdlTGlua2VkfGxsTWluRXZlbnREZWxheXxsbE1vZFBvd3xsbE1vZGlmeUxhbmR8bGxNb3ZlVG9UYXJnZXR8bGxOYXZpZ2F0ZVRvfGxsT2Zmc2V0VGV4dHVyZXxsbE9wZW5SZW1vdGVEYXRhQ2hhbm5lbHxsbE92ZXJNeUxhbmR8bGxPd25lclNheXxsbFBhcmNlbE1lZGlhQ29tbWFuZExpc3R8bGxQYXJjZWxNZWRpYVF1ZXJ5fGxsUGFyc2VTdHJpbmcyTGlzdHxsbFBhcnNlU3RyaW5nS2VlcE51bGxzfGxsUGFydGljbGVTeXN0ZW18bGxQYXNzQ29sbGlzaW9uc3xsbFBhc3NUb3VjaGVzfGxsUGF0cm9sUG9pbnRzfGxsUGxheVNvdW5kfGxsUGxheVNvdW5kU2xhdmV8bGxQb3d8bGxQcmVsb2FkU291bmR8bGxQdXJzdWV8bGxQdXNoT2JqZWN0fGxsUmVhZEtleVZhbHVlfGxsUmVnaW9uU2F5fGxsUmVnaW9uU2F5VG98bGxSZWxlYXNlQ29udHJvbHN8bGxSZWxlYXNlVVJMfGxsUmVtb3RlRGF0YVJlcGx5fGxsUmVtb3RlTG9hZFNjcmlwdFBpbnxsbFJlbW92ZUZyb21MYW5kQmFuTGlzdHxsbFJlbW92ZUZyb21MYW5kUGFzc0xpc3R8bGxSZW1vdmVJbnZlbnRvcnl8bGxSZW1vdmVWZWhpY2xlRmxhZ3N8bGxSZXF1ZXN0QWdlbnREYXRhfGxsUmVxdWVzdERpc3BsYXlOYW1lfGxsUmVxdWVzdEV4cGVyaWVuY2VQZXJtaXNzaW9uc3xsbFJlcXVlc3RJbnZlbnRvcnlEYXRhfGxsUmVxdWVzdFBlcm1pc3Npb25zfGxsUmVxdWVzdFNlY3VyZVVSTHxsbFJlcXVlc3RTaW11bGF0b3JEYXRhfGxsUmVxdWVzdFVSTHxsbFJlcXVlc3RVc2VybmFtZXxsbFJlc2V0QW5pbWF0aW9uT3ZlcnJpZGV8bGxSZXNldExhbmRCYW5MaXN0fGxsUmVzZXRMYW5kUGFzc0xpc3R8bGxSZXNldE90aGVyU2NyaXB0fGxsUmVzZXRTY3JpcHR8bGxSZXNldFRpbWV8bGxSZXR1cm5PYmplY3RzQnlJRHxsbFJldHVybk9iamVjdHNCeU93bmVyfGxsUmV6QXRSb290fGxsUmV6T2JqZWN0fGxsUm90MkFuZ2xlfGxsUm90MkF4aXN8bGxSb3QyRXVsZXJ8bGxSb3QyRndkfGxsUm90MkxlZnR8bGxSb3QyVXB8bGxSb3RCZXR3ZWVufGxsUm90TG9va0F0fGxsUm90VGFyZ2V0fGxsUm90VGFyZ2V0UmVtb3ZlfGxsUm90YXRlVGV4dHVyZXxsbFJvdW5kfGxsU0hBMVN0cmluZ3xsbFNhbWVHcm91cHxsbFNheXxsbFNjYWxlQnlGYWN0b3J8bGxTY2FsZVRleHR1cmV8bGxTY3JpcHREYW5nZXJ8bGxTY3JpcHRQcm9maWxlcnxsbFNlbmRSZW1vdGVEYXRhfGxsU2Vuc29yfGxsU2Vuc29yUmVtb3ZlfGxsU2Vuc29yUmVwZWF0fGxsU2V0QWxwaGF8bGxTZXRBbmd1bGFyVmVsb2NpdHl8bGxTZXRBbmltYXRpb25PdmVycmlkZXxsbFNldEJ1b3lhbmN5fGxsU2V0Q2FtZXJhQXRPZmZzZXR8bGxTZXRDYW1lcmFFeWVPZmZzZXR8bGxTZXRDYW1lcmFQYXJhbXN8bGxTZXRDbGlja0FjdGlvbnxsbFNldENvbG9yfGxsU2V0Q29udGVudFR5cGV8bGxTZXREYW1hZ2V8bGxTZXRGb3JjZXxsbFNldEZvcmNlQW5kVG9ycXVlfGxsU2V0SG92ZXJIZWlnaHR8bGxTZXRLZXlmcmFtZWRNb3Rpb258bGxTZXRMaW5rQWxwaGF8bGxTZXRMaW5rQ2FtZXJhfGxsU2V0TGlua0NvbG9yfGxsU2V0TGlua01lZGlhfGxsU2V0TGlua1ByaW1pdGl2ZVBhcmFtc3xsbFNldExpbmtQcmltaXRpdmVQYXJhbXNGYXN0fGxsU2V0TGlua1RleHR1cmV8bGxTZXRMaW5rVGV4dHVyZUFuaW18bGxTZXRMb2NhbFJvdHxsbFNldE1lbW9yeUxpbWl0fGxsU2V0T2JqZWN0RGVzY3xsbFNldE9iamVjdE5hbWV8bGxTZXRQYXJjZWxNdXNpY1VSTHxsbFNldFBheVByaWNlfGxsU2V0UGh5c2ljc01hdGVyaWFsfGxsU2V0UG9zfGxsU2V0UHJpbU1lZGlhUGFyYW1zfGxsU2V0UHJpbWl0aXZlUGFyYW1zfGxsU2V0UmVnaW9uUG9zfGxsU2V0UmVtb3RlU2NyaXB0QWNjZXNzUGlufGxsU2V0Um90fGxsU2V0U2NhbGV8bGxTZXRTY3JpcHRTdGF0ZXxsbFNldFNpdFRleHR8bGxTZXRTb3VuZFF1ZXVlaW5nfGxsU2V0U291bmRSYWRpdXN8bGxTZXRTdGF0dXN8bGxTZXRUZXh0fGxsU2V0VGV4dHVyZXxsbFNldFRleHR1cmVBbmltfGxsU2V0VGltZXJFdmVudHxsbFNldFRvcnF1ZXxsbFNldFRvdWNoVGV4dHxsbFNldFZlaGljbGVGbGFnc3xsbFNldFZlaGljbGVGbG9hdFBhcmFtfGxsU2V0VmVoaWNsZVJvdGF0aW9uUGFyYW18bGxTZXRWZWhpY2xlVHlwZXxsbFNldFZlaGljbGVWZWN0b3JQYXJhbXxsbFNldFZlbG9jaXR5fGxsU2hvdXR8bGxTaW58bGxTaXRUYXJnZXR8bGxTbGVlcHxsbFNxcnR8bGxTdGFydEFuaW1hdGlvbnxsbFN0b3BBbmltYXRpb258bGxTdG9wSG92ZXJ8bGxTdG9wTG9va0F0fGxsU3RvcE1vdmVUb1RhcmdldHxsbFN0b3BTb3VuZHxsbFN0cmluZ0xlbmd0aHxsbFN0cmluZ1RvQmFzZTY0fGxsU3RyaW5nVHJpbXxsbFN1YlN0cmluZ0luZGV4fGxsVGFrZUNvbnRyb2xzfGxsVGFufGxsVGFyZ2V0fGxsVGFyZ2V0T21lZ2F8bGxUYXJnZXRSZW1vdmV8bGxUZWxlcG9ydEFnZW50fGxsVGVsZXBvcnRBZ2VudEdsb2JhbENvb3Jkc3xsbFRlbGVwb3J0QWdlbnRIb21lfGxsVGV4dEJveHxsbFRvTG93ZXJ8bGxUb1VwcGVyfGxsVHJhbnNmZXJMaW5kZW5Eb2xsYXJzfGxsVHJpZ2dlclNvdW5kfGxsVHJpZ2dlclNvdW5kTGltaXRlZHxsbFVuU2l0fGxsVW5lc2NhcGVVUkx8bGxVcGRhdGVDaGFyYWN0ZXJ8bGxVcGRhdGVLZXlWYWx1ZXxsbFZlY0Rpc3R8bGxWZWNNYWd8bGxWZWNOb3JtfGxsVm9sdW1lRGV0ZWN0fGxsV2FuZGVyV2l0aGlufGxsV2F0ZXJ8bGxXaGlzcGVyfGxsV2luZHxsbFhvckJhc2U2NCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24uZXZlbnQubHNsIiA6ICJhdF9yb3RfdGFyZ2V0fGF0X3RhcmdldHxhdHRhY2h8Y2hhbmdlZHxjb2xsaXNpb258Y29sbGlzaW9uX2VuZHxjb2xsaXNpb25fc3RhcnR8Y29udHJvbHxkYXRhc2VydmVyfGVtYWlsfGV4cGVyaWVuY2VfcGVybWlzc2lvbnN8ZXhwZXJpZW5jZV9wZXJtaXNzaW9uc19kZW5pZWR8aHR0cF9yZXF1ZXN0fGh0dHBfcmVzcG9uc2V8bGFuZF9jb2xsaXNpb258bGFuZF9jb2xsaXNpb25fZW5kfGxhbmRfY29sbGlzaW9uX3N0YXJ0fGxpbmtfbWVzc2FnZXxsaXN0ZW58bW9uZXl8bW92aW5nX2VuZHxtb3Zpbmdfc3RhcnR8bm9fc2Vuc29yfG5vdF9hdF9yb3RfdGFyZ2V0fG5vdF9hdF90YXJnZXR8b2JqZWN0X3Jlenxvbl9yZXp8cGF0aF91cGRhdGV8cmVtb3RlX2RhdGF8cnVuX3RpbWVfcGVybWlzc2lvbnN8c2Vuc29yfHN0YXRlX2VudHJ5fHN0YXRlX2V4aXR8dGltZXJ8dG91Y2h8dG91Y2hfZW5kfHRvdWNoX3N0YXJ0fHRyYW5zYWN0aW9uX3Jlc3VsdCIKICAgICAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQubGluZS5kb3VibGUtc2xhc2gubHNsIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5ibG9jay5iZWdpbi5sc2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1b3RlZC5kb3VibGUubHNsIiwKICAgICAgICAgICAgICAgIHN0YXJ0IDogJyInLAogICAgICAgICAgICAgICAgZW5kIDogJyInLAogICAgICAgICAgICAgICAgbmV4dCA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5sc2wiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcW3RuIlxcXS8KICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMubHNsIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigwW3hYXVswLTlhLWZBLUZdK3xbKy1dP1swLTldKyg/Oig/OlxcLlswLTldKik/KD86W2VFXVsrLV0/WzAtOV0rKT8pPylcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5uYW1lLnN0YXRlLmxzbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXGIoKHN0YXRlKVxccytbQS1aYS16X11cXHcqfGRlZmF1bHQpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXGJbYS16QS1aX11bYS16QS1aMC05X10qXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uLnVzZXItZGVmaW5lZC5sc2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXGIoW2EtekEtWl9dXHcqKSg/PVwoLio/XCkpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmxzbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCtcXCt8XFwtXFwtfDw8fD4+fCYmP3xcXHxcXHw/fFxcXnx+fFshJTw+PSorXFwtXFwvXT0/IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkLmlsbGVnYWwua2V5d29yZC5vcGVyYXRvci5sc2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiOj0/IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvci5sc2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwsfFxcOyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuLmxzbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxbXFwoXFx7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuLmxzbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdXFwpXFx9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dC5sc2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmJsb2NrLmVuZC5sc2wiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50LmJsb2NrLmxzbCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn0KCmV4cG9ydHMuTFNMSGlnaGxpZ2h0UnVsZXMgPSBMU0xIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2xzbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9tb2RlL2xzbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9saWIvb29wIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUnVsZXMgPSByZXF1aXJlKCIuL2xzbF9oaWdobGlnaHRfcnVsZXMiKS5MU0xIaWdobGlnaHRSdWxlczsKdmFyIE91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSBbIi8vIl07CgogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7CiAgICAgICAgc3RhcnQ6ICIvKiIsCiAgICAgICAgZW5kOiAiKi8iCiAgICB9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09PSAiY29tbWVudC5ibG9jay5sc2wiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2xzbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2xzbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTHVhSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmb3J8ZnVuY3Rpb258aWZ8aW58bG9jYWx8cmVwZWF0fCIrCiAgICAgICAgICJyZXR1cm58dGhlbnx1bnRpbHx3aGlsZXxvcnxhbmR8bm90IgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgidHJ1ZXxmYWxzZXxuaWx8X0d8X1ZFUlNJT04iKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gKAogICAgICAgICJzdHJpbmd8eHBjYWxsfHBhY2thZ2V8dG9zdHJpbmd8cHJpbnR8b3N8dW5wYWNrfHJlcXVpcmV8IisKICAgICAgICAiZ2V0ZmVudnxzZXRtZXRhdGFibGV8bmV4dHxhc3NlcnR8dG9udW1iZXJ8aW98cmF3ZXF1YWx8IisKICAgICAgICAiY29sbGVjdGdhcmJhZ2V8Z2V0bWV0YXRhYmxlfG1vZHVsZXxyYXdzZXR8bWF0aHxkZWJ1Z3wiKwogICAgICAgICJwY2FsbHx0YWJsZXxuZXdwcm94eXx0eXBlfGNvcm91dGluZXxfR3xzZWxlY3R8Z2NpbmZvfCIrCiAgICAgICAgInBhaXJzfHJhd2dldHxsb2Fkc3RyaW5nfGlwYWlyc3xfVkVSU0lPTnxkb2ZpbGV8c2V0ZmVudnwiKwogICAgICAgICJsb2FkfGVycm9yfGxvYWRmaWxlfCIrCgogICAgICAgICJzdWJ8dXBwZXJ8bGVufGdmaW5kfHJlcHxmaW5kfG1hdGNofGNoYXJ8ZHVtcHxnbWF0Y2h8IisKICAgICAgICAicmV2ZXJzZXxieXRlfGZvcm1hdHxnc3VifGxvd2VyfHByZWxvYWR8bG9hZGxpYnxsb2FkZWR8IisKICAgICAgICAibG9hZGVyc3xjcGF0aHxjb25maWd8cGF0aHxzZWVhbGx8ZXhpdHxzZXRsb2NhbGV8ZGF0ZXwiKwogICAgICAgICJnZXRlbnZ8ZGlmZnRpbWV8cmVtb3ZlfHRpbWV8Y2xvY2t8dG1wbmFtZXxyZW5hbWV8ZXhlY3V0ZXwiKwogICAgICAgICJsaW5lc3x3cml0ZXxjbG9zZXxmbHVzaHxvcGVufG91dHB1dHx0eXBlfHJlYWR8c3RkZXJyfCIrCiAgICAgICAgInN0ZGlufGlucHV0fHN0ZG91dHxwb3Blbnx0bXBmaWxlfGxvZ3xtYXh8YWNvc3xodWdlfCIrCiAgICAgICAgImxkZXhwfHBpfGNvc3x0YW5ofHBvd3xkZWd8dGFufGNvc2h8c2luaHxyYW5kb218cmFuZG9tc2VlZHwiKwogICAgICAgICJmcmV4cHxjZWlsfGZsb29yfHJhZHxhYnN8c3FydHxtb2RmfGFzaW58bWlufG1vZHxmbW9kfGxvZzEwfCIrCiAgICAgICAgImF0YW4yfGV4cHxzaW58YXRhbnxnZXR1cHZhbHVlfGRlYnVnfHNldGhvb2t8Z2V0bWV0YXRhYmxlfCIrCiAgICAgICAgImdldGhvb2t8c2V0bWV0YXRhYmxlfHNldGxvY2FsfHRyYWNlYmFja3xzZXRmZW52fGdldGluZm98IisKICAgICAgICAic2V0dXB2YWx1ZXxnZXRsb2NhbHxnZXRyZWdpc3RyeXxnZXRmZW52fHNldG58aW5zZXJ0fGdldG58IisKICAgICAgICAiZm9yZWFjaGl8bWF4bnxmb3JlYWNofGNvbmNhdHxzb3J0fHJlbW92ZXxyZXN1bWV8eWllbGR8IisKICAgICAgICAic3RhdHVzfHdyYXB8Y3JlYXRlfHJ1bm5pbmd8IisKICAgICAgICAiX19hZGR8X19zdWJ8X19tb2R8X191bm18X19jb25jYXR8X19sdHxfX2luZGV4fF9fY2FsbHxfX2djfF9fbWV0YXRhYmxlfCIrCiAgICAgICAgICJfX211bHxfX2RpdnxfX3Bvd3xfX2xlbnxfX2VxfF9fbGV8X19uZXdpbmRleHxfX3Rvc3RyaW5nfF9fbW9kZXxfX3RvbnVtYmVyIgogICAgKTsKCiAgICB2YXIgc3RkTGliYXJpZXMgPSAoInN0cmluZ3xwYWNrYWdlfG9zfGlvfG1hdGh8ZGVidWd8dGFibGV8Y29yb3V0aW5lIik7CgogICAgdmFyIGRlcHJlY2F0ZWRJbjUxNTIgPSAoInNldG58Zm9yZWFjaHxmb3JlYWNoaXxnY2luZm98bG9nMTB8bWF4biIpOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogZnVuY3Rpb25zLAogICAgICAgICJrZXl3b3JkLmRlcHJlY2F0ZWQiOiBkZXByZWNhdGVkSW41MTUyLAogICAgICAgICJjb25zdGFudC5saWJyYXJ5Ijogc3RkTGliYXJpZXMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAic2VsZiIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGRlY2ltYWxJbnRlZ2VyID0gIig/Oig/OlsxLTldXFxkKil8KD86MCkpIjsKICAgIHZhciBoZXhJbnRlZ2VyID0gIig/OjBbeFhdW1xcZEEtRmEtZl0rKSI7CiAgICB2YXIgaW50ZWdlciA9ICIoPzoiICsgZGVjaW1hbEludGVnZXIgKyAifCIgKyBoZXhJbnRlZ2VyICsgIikiOwoKICAgIHZhciBmcmFjdGlvbiA9ICIoPzpcXC5cXGQrKSI7CiAgICB2YXIgaW50UGFydCA9ICIoPzpcXGQrKSI7CiAgICB2YXIgcG9pbnRGbG9hdCA9ICIoPzooPzoiICsgaW50UGFydCArICI/IiArIGZyYWN0aW9uICsgIil8KD86IiArIGludFBhcnQgKyAiXFwuKSkiOwogICAgdmFyIGZsb2F0TnVtYmVyID0gIig/OiIgKyBwb2ludEZsb2F0ICsgIikiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJicmFja2V0ZWRDb21tZW50IiwKICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKXsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0LCB2YWx1ZS5sZW5ndGggLSAyLCBjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAvXC1cLVxbPSpcWy8sCiAgICAgICAgICAgIG5leHQgIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXF09KlxdLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcLVxcLS4qJCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgc3RhdGVOYW1lOiAiYnJhY2tldGVkU3RyaW5nIiwKICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKXsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0LCB2YWx1ZS5sZW5ndGgsIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZy5zdGFydCI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogL1xbPSpcWy8sCiAgICAgICAgICAgIG5leHQgIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZy5lbmQiOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXF09KlxdLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICciKD86W15cXFxcXXxcXFxcLikqPyInCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiAiJyg/OlteXFxcXF18XFxcXC4pKj8nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogZmxvYXROdW1iZXIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4IDogaW50ZWdlciArICJcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcKnxcXC98JXxcXCN8XFxefH58PHw+fDw9fD0+fD09fH49fD18XFw6fFxcLlxcLlxcLnxcXC5cXC4iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxbXFwoXFx7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXF1cXClcXH1dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XFx3KyIKICAgICAgICB9IF0KICAgIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhMdWFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTHVhSGlnaGxpZ2h0UnVsZXMgPSBMdWFIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbHVhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gL1xiKGZ1bmN0aW9ufHRoZW58ZG98cmVwZWF0KVxifHtccyokfChcWz0qXFspLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXGJlbmRcYnxeXHMqfXxcXT0qXF0vOwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaXNTdGFydCA9IHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QobGluZSk7CiAgICAgICAgdmFyIGlzRW5kID0gdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGxpbmUpOwoKICAgICAgICBpZiAoaXNTdGFydCAmJiAhaXNFbmQpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgICAgIGlmIChtYXRjaFsxXSA9PSAidGhlbiIgJiYgL1xiZWxzZWlmXGIvLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIG1hdGNoLmluZGV4ICsgMSkudHlwZSA9PT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHNlc3Npb24uYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KSB8fCAiIjsKICAgICAgICAgICAgICAgIGlmICh0eXBlWzBdID09ICJicmFja2V0ZWRDb21tZW50IiB8fCB0eXBlWzBdID09ICJicmFja2V0ZWRTdHJpbmciKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZvbGRTdHlsZSAhPSAibWFya2JlZ2luZW5kIiB8fCAhaXNFbmQgfHwgaXNTdGFydCAmJiBpc0VuZCkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaFswXSA9PT0gImVuZCIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIG1hdGNoLmluZGV4ICsgMSkudHlwZSA9PT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgcmV0dXJuICJlbmQiOwogICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMF1bMF0gPT09ICJdIikgewogICAgICAgICAgICB2YXIgdHlwZSA9IHNlc3Npb24uYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93IC0gMSkgfHwgIiI7CiAgICAgICAgICAgIGlmICh0eXBlWzBdID09ICJicmFja2V0ZWRDb21tZW50IiB8fCB0eXBlWzBdID09ICJicmFja2V0ZWRTdHJpbmciKQogICAgICAgICAgICAgICAgcmV0dXJuICJlbmQiOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gImVuZCI7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5leGVjKGxpbmUpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sdWFCbG9jayhzZXNzaW9uLCByb3csIG1hdGNoLmluZGV4ICsgMSk7CgogICAgICAgICAgICBpZiAobWF0Y2hbMl0pCiAgICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgbWF0Y2guaW5kZXggKyAxKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgInsiLCByb3csIG1hdGNoLmluZGV4KTsKICAgICAgICB9CgogICAgICAgIHZhciBtYXRjaCA9IHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuZXhlYyhsaW5lKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09PSAiZW5kIikgewogICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIG1hdGNoLmluZGV4ICsgMSkudHlwZSA9PT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmx1YUJsb2NrKHNlc3Npb24sIHJvdywgbWF0Y2guaW5kZXggKyAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG1hdGNoWzBdWzBdID09PSAiXSIpCiAgICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgbWF0Y2guaW5kZXggKyAxKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgIn0iLCByb3csIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMubHVhQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIGNvbHVtbiwgdG9rZW5SYW5nZSkgewogICAgICAgIHZhciBzdHJlYW0gPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGNvbHVtbik7CiAgICAgICAgdmFyIGluZGVudEtleXdvcmRzID0gewogICAgICAgICAgICAiZnVuY3Rpb24iOiAxLAogICAgICAgICAgICAiZG8iOiAxLAogICAgICAgICAgICAidGhlbiI6IDEsCiAgICAgICAgICAgICJlbHNlaWYiOiAtMSwKICAgICAgICAgICAgImVuZCI6IC0xLAogICAgICAgICAgICAicmVwZWF0IjogMSwKICAgICAgICAgICAgInVudGlsIjogLTEKICAgICAgICB9OwoKICAgICAgICB2YXIgdG9rZW4gPSBzdHJlYW0uZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlICE9ICJrZXl3b3JkIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgdmFsID0gdG9rZW4udmFsdWU7CiAgICAgICAgdmFyIHN0YWNrID0gW3ZhbF07CiAgICAgICAgdmFyIGRpciA9IGluZGVudEtleXdvcmRzW3ZhbF07CgogICAgICAgIGlmICghZGlyKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGRpciA9PT0gLTEgPyBzdHJlYW0uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgOiBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGg7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwoKICAgICAgICBzdHJlYW0uc3RlcCA9IGRpciA9PT0gLTEgPyBzdHJlYW0uc3RlcEJhY2t3YXJkIDogc3RyZWFtLnN0ZXBGb3J3YXJkOwogICAgICAgIHdoaWxlKHRva2VuID0gc3RyZWFtLnN0ZXAoKSkgewogICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGRpciAqIGluZGVudEtleXdvcmRzW3Rva2VuLnZhbHVlXTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA+IDApIHsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodG9rZW4udmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxldmVsIDw9IDApIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiB0b2tlbi52YWx1ZSAhPSAiZWxzZWlmIikKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMCkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRva2VuLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIGlmICh0b2tlblJhbmdlKQogICAgICAgICAgICByZXR1cm4gc3RyZWFtLmdldEN1cnJlbnRUb2tlblJhbmdlKCk7CgogICAgICAgIHZhciByb3cgPSBzdHJlYW0uZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgaWYgKGRpciA9PT0gLTEpCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgsIHN0YXJ0Um93LCBzdGFydENvbHVtbik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgcm93LCBzdHJlYW0uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkpOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sdWEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9sdWEiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBMdWFIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbHVhX2hpZ2hsaWdodF9ydWxlcyIpLkx1YUhpZ2hsaWdodFJ1bGVzOwp2YXIgTHVhRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvbHVhIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTHVhSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEx1YUZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi0tWyIsIGVuZDogIl0tLSJ9OwogICAgCiAgICB2YXIgaW5kZW50S2V5d29yZHMgPSB7CiAgICAgICAgImZ1bmN0aW9uIjogMSwKICAgICAgICAidGhlbiI6IDEsCiAgICAgICAgImRvIjogMSwKICAgICAgICAiZWxzZSI6IDEsCiAgICAgICAgImVsc2VpZiI6IDEsCiAgICAgICAgInJlcGVhdCI6IDEsCiAgICAgICAgImVuZCI6IC0xLAogICAgICAgICJ1bnRpbCI6IC0xCiAgICB9OwogICAgdmFyIG91dGRlbnRLZXl3b3JkcyA9IFsKICAgICAgICAiZWxzZSIsCiAgICAgICAgImVsc2VpZiIsCiAgICAgICAgImVuZCIsCiAgICAgICAgInVudGlsIgogICAgXTsKCiAgICBmdW5jdGlvbiBnZXROZXRJbmRlbnRMZXZlbCh0b2tlbnMpIHsKICAgICAgICB2YXIgbGV2ZWwgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gImtleXdvcmQiKSB7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgaW4gaW5kZW50S2V5d29yZHMpIHsKICAgICAgICAgICAgICAgICAgICBsZXZlbCArPSBpbmRlbnRLZXl3b3Jkc1t0b2tlbi52YWx1ZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PSAicGFyZW4ubHBhcmVuIikgewogICAgICAgICAgICAgICAgbGV2ZWwgKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT0gInBhcmVuLnJwYXJlbiIpIHsKICAgICAgICAgICAgICAgIGxldmVsIC09IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobGV2ZWwgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9IGVsc2UgaWYgKGxldmVsID4gMCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciBsZXZlbCA9IDA7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIGxldmVsID0gZ2V0TmV0SW5kZW50TGV2ZWwodG9rZW5zKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxldmVsID4gMCkgewogICAgICAgICAgICByZXR1cm4gaW5kZW50ICsgdGFiOwogICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPCAwICYmIGluZGVudC5zdWJzdHIoaW5kZW50Lmxlbmd0aCAtIHRhYi5sZW5ndGgpID09IHRhYikgewogICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tPdXRkZW50KHN0YXRlLCBsaW5lLCAiXG4iKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudC5zdWJzdHIoMCwgaW5kZW50Lmxlbmd0aCAtIHRhYi5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKGlucHV0ICE9ICJcbiIgJiYgaW5wdXQgIT0gIlxyIiAmJiBpbnB1dCAhPSAiXHJcbiIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKGxpbmUubWF0Y2goL15ccypbXClcfVxdXSQvKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZS50cmltKCksIHN0YXRlKS50b2tlbnM7CgogICAgICAgIGlmICghdG9rZW5zIHx8ICF0b2tlbnMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAodG9rZW5zWzBdLnR5cGUgPT0gImtleXdvcmQiICYmIG91dGRlbnRLZXl3b3Jkcy5pbmRleE9mKHRva2Vuc1swXS52YWx1ZSkgIT0gLTEpOwogICAgfTsKCiAgICB0aGlzLmdldE1hdGNoaW5nID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAocm93ID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YXIgcG9zID0gc2Vzc2lvbi5zZWxlY3Rpb24ubGVhZDsKICAgICAgICAgICAgY29sdW1uID0gcG9zLmNvbHVtbjsKICAgICAgICAgICAgcm93ID0gcG9zLnJvdzsKICAgICAgICB9CgogICAgICAgIHZhciBzdGFydFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHJvdywgY29sdW1uKTsKICAgICAgICBpZiAoc3RhcnRUb2tlbiAmJiBzdGFydFRva2VuLnZhbHVlIGluIGluZGVudEtleXdvcmRzKQogICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkaW5nUnVsZXMubHVhQmxvY2soc2Vzc2lvbiwgcm93LCBjb2x1bW4sIHRydWUpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IGxpbmUubWF0Y2goL15ccyovKVswXS5sZW5ndGg7CiAgICAgICAgaWYgKCFjb2x1bW4gfHwgIXJvdykgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRSYW5nZSA9IHRoaXMuZ2V0TWF0Y2hpbmcoc2Vzc2lvbiwgcm93LCBjb2x1bW4gKyAxKTsKICAgICAgICBpZiAoIXN0YXJ0UmFuZ2UgfHwgc3RhcnRSYW5nZS5zdGFydC5yb3cgPT0gcm93KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoc2Vzc2lvbi5nZXRMaW5lKHN0YXJ0UmFuZ2Uuc3RhcnQucm93KSk7CiAgICAgICAgaWYgKGluZGVudC5sZW5ndGggIT0gY29sdW1uKSB7CiAgICAgICAgICAgIHNlc3Npb24ucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbiksIGluZGVudCk7CiAgICAgICAgICAgIHNlc3Npb24ub3V0ZGVudFJvd3MobmV3IFJhbmdlKHJvdyArIDEsIDAsIHJvdyArIDEsIDApKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9sdWFfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CiAgICAgICAgCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2x1YSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL2x1YSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-luahtml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sdWFodG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sIiwiYWNlL21vZGUvbHVhIiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2x1YWh0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vaHRtbCIpLk1vZGUsZj1hKCIuL2x1YSIpLk1vZGUsZz1hKCIuLi90b2tlbml6ZXIiKS5Ub2tlbml6ZXIsaD1hKCIuL2x1YWh0bWxfaGlnaGxpZ2h0X3J1bGVzIikuTHVhSHRtbEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgaDt0aGlzLiR0b2tlbml6ZXI9bmV3IGcoKG5ldyBoKS5nZXRSdWxlcygpKSx0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJsdWEtIjpmfSl9O2QuaW5oZXJpdHMoaSxlKSxiLk1vZGU9aX0pLGRlZmluZSgiYWNlL21vZGUvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9jc3MiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dCIpLk1vZGUsZj1hKCIuL2phdmFzY3JpcHQiKS5Nb2RlLGc9YSgiLi9jc3MiKS5Nb2RlLGg9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGk9YSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlcyxqPWEoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cixrPWEoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGUsbD1mdW5jdGlvbigpe3ZhciBhPW5ldyBpO3RoaXMuJHRva2VuaXplcj1uZXcgaChhLmdldFJ1bGVzKCkpLHRoaXMuJGJlaGF2aW91cj1uZXcgaix0aGlzLiRlbWJlZHM9YS5nZXRFbWJlZHMoKSx0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoeyJqcy0iOmYsImNzcy0iOmd9KSx0aGlzLmZvbGRpbmdSdWxlcz1uZXcga307ZC5pbmhlcml0cyhsLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIDB9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLiRnZXRJbmRlbnQoYil9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hMX19LmNhbGwobC5wcm90b3R5cGUpLGIuTW9kZT1sfSksZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyxoPWEoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50LGk9YSgiLi4vcmFuZ2UiKS5SYW5nZSxqPWEoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50LGs9YSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyLGw9YSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlLG09ZnVuY3Rpb24oKXt0aGlzLiR0b2tlbml6ZXI9bmV3IGYoKG5ldyBnKS5nZXRSdWxlcygpKSx0aGlzLiRvdXRkZW50PW5ldyBoLHRoaXMuJGJlaGF2aW91cj1uZXcgayx0aGlzLmZvbGRpbmdSdWxlcz1uZXcgbH07ZC5pbmhlcml0cyhtLGUpLGZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDb21tZW50TGluZXM9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9ITAsZj0vXihccyopXC9cLy87Zm9yKHZhciBnPWM7Zzw9ZDtnKyspaWYoIWYudGVzdChiLmdldExpbmUoZykpKXtlPSExO2JyZWFrfWlmKGUpe3ZhciBoPW5ldyBpKDAsMCwwLDApO2Zvcih2YXIgZz1jO2c8PWQ7ZysrKXt2YXIgaj1iLmdldExpbmUoZyksaz1qLm1hdGNoKGYpO2guc3RhcnQucm93PWcsaC5lbmQucm93PWcsaC5lbmQuY29sdW1uPWtbMF0ubGVuZ3RoLGIucmVwbGFjZShoLGtbMV0pfX1lbHNlIGIuaW5kZW50Um93cyhjLGQsIi8vIil9LHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSksZj1lLnRva2VucyxnPWUuc3RhdGU7aWYoZi5sZW5ndGgmJmZbZi5sZW5ndGgtMV0udHlwZT09ImNvbW1lbnQiKXJldHVybiBkO2lmKGE9PSJzdGFydCJ8fGE9PSJyZWdleF9hbGxvd2VkIil7dmFyIGg9Yi5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKlw6fFtce1woXFtdKVxzKiQvKTtoJiYoZCs9Yyl9ZWxzZSBpZihhPT0iZG9jLXN0YXJ0Iil7aWYoZz09InN0YXJ0Inx8YT09InJlZ2V4X2FsbG93ZWQiKXJldHVybiIiO3ZhciBoPWIubWF0Y2goL15ccyooXC8/KVwqLyk7aCYmKGhbMV0mJihkKz0iICIpLGQrPSIqICIpfXJldHVybiBkfSx0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGIsYyl9LHRoaXMuYXV0b091dGRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3RoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoYixjKX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IGooWyJhY2UiXSwid29ya2VyLWphdmFzY3JpcHQuanMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsIkphdmFTY3JpcHRXb3JrZXIiKTtyZXR1cm4gYi5hdHRhY2hUb0RvY3VtZW50KGEuZ2V0RG9jdW1lbnQoKSksYi5vbigianNsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtmb3IodmFyIGQ9MDtkPGIuZGF0YS5sZW5ndGg7ZCsrKXt2YXIgZT1iLmRhdGFbZF07ZSYmYy5wdXNoKHtyb3c6ZS5saW5lLTEsY29sdW1uOmUuY2hhcmFjdGVyLTEsdGV4dDplLnJlYXNvbix0eXBlOiJ3YXJuaW5nIixsaW50OmV9KX1hLnNldEFubm90YXRpb25zKGMpfSksYi5vbigibmFyY2lzc3VzIixmdW5jdGlvbihiKXthLnNldEFubm90YXRpb25zKFtiLmRhdGFdKX0pLGIub24oInRlcm1pbmF0ZSIsZnVuY3Rpb24oKXthLmNsZWFyQW5ub3RhdGlvbnMoKX0pLGJ9fS5jYWxsKG0ucHJvdG90eXBlKSxiLk1vZGU9bX0pLGRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS91bmljb2RlIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4uL3VuaWNvZGUiKSxnPWEoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLGg9YSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyxpPWZ1bmN0aW9uKCl7dmFyIGE9ZS5hcnJheVRvTWFwKCJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fE5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHxBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8VWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXxFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258U3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfGRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfGlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8SlNPTnxNYXRofHRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiLnNwbGl0KCJ8IikpLGI9ZS5hcnJheVRvTWFwKCJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldCIuc3BsaXQoInwiKSksYz0iY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZCIsZD1lLmFycmF5VG9NYXAoIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fXyIuc3BsaXQoInwiKSksaD1lLmFycmF5VG9NYXAoImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLnNwbGl0KCJ8IikpLGk9ZS5hcnJheVRvTWFwKCJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLnNwbGl0KCJ8IikpLGo9ZS5hcnJheVRvTWFwKCJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIuc3BsaXQoInwiKSksaz0iWyIrZi5wYWNrYWdlcy5MKyJcXCRfXVsiK2YucGFja2FnZXMuTCtmLnBhY2thZ2VzLk1uK2YucGFja2FnZXMuTWMrZi5wYWNrYWdlcy5OZCtmLnBhY2thZ2VzLlBjKyJcXCRfXSpcXGIiLGw9IlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18dVswLTlhLWZBLUZdezR9fFswLTJdWzAtN117MCwyfXwzWzAtNl1bMC03XT98MzdbMC03XT98WzQtN11bMC03XT98LikiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDovXC9cLy4qJC99LGcuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4Oi9cL1wqLyxuZXh0OiJjb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiInKD89LikiLG5leHQ6InFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6JyIoPz0uKScsbmV4dDoicXFzdHJpbmcifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4Oi8wW3hYXVswLTlhLWZBLUZdK1xiL30se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDovWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrLV0/XGQrKT8pP1xiL30se3Rva2VuOlsic3RvcmFnZS50eXBlIiwicHVuY3R1YXRpb24ub3BlcmF0b3IiLCJzdXBwb3J0LmZ1bmN0aW9uIiwicHVuY3R1YXRpb24ub3BlcmF0b3IiLCJlbnRpdHkubmFtZS5mdW5jdGlvbiIsInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIiwidGV4dCIsInN0b3JhZ2UudHlwZSIsInRleHQiLCJwYXJlbi5scGFyZW4iXSxyZWdleDoiKCIraysiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiK2srIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwic3VwcG9ydC5mdW5jdGlvbiIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIsInRleHQiXSxyZWdleDoiKCIraysiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiK2srIikoXFxzKikoPSkoXFxzKikiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbInN0b3JhZ2UudHlwZSIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IigiK2srIikoXFwuKSgiK2srIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitrKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJwdW5jdHVhdGlvbi5vcGVyYXRvciIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsImtleXdvcmQub3BlcmF0b3IiLCJ0ZXh0Iiwic3RvcmFnZS50eXBlIiwidGV4dCIsImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInBhcmVuLmxwYXJlbiJdLHJlZ2V4OiIoIitrKyIpKFxcLikoIitrKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIixuZXh0OiJmdW5jdGlvbl9hcmd1bWVudHMifSx7dG9rZW46WyJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6IihmdW5jdGlvbikoXFxzKykoIitrKyIpKFxccyopKFxcKCkiLG5leHQ6ImZ1bmN0aW9uX2FyZ3VtZW50cyJ9LHt0b2tlbjpbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwidGV4dCIsInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwidGV4dCIsInN0b3JhZ2UudHlwZSIsInRleHQiLCJwYXJlbi5scGFyZW4iXSxyZWdleDoiKCIraysiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOlsidGV4dCIsInRleHQiLCJzdG9yYWdlLnR5cGUiLCJ0ZXh0IiwicGFyZW4ubHBhcmVuIl0scmVnZXg6Iig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsbmV4dDoiZnVuY3Rpb25fYXJndW1lbnRzIn0se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIixyZWdleDovKD86dHJ1ZXxmYWxzZSlcYi99LHt0b2tlbjoia2V5d29yZCIscmVnZXg6Iig/OiIrYysiKVxcYiIsbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjpbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwic3VwcG9ydC5mdW5jdGlvbiJdLHJlZ2V4Oi8oXC4pKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B6enp6fHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvfSx7dG9rZW46WyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsInN1cHBvcnQuZnVuY3Rpb24uZG9tIl0scmVnZXg6LyhcLikocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS99LHt0b2tlbjpbInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwic3VwcG9ydC5jb25zdGFudCJdLHJlZ2V4Oi8oXC4pKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiL30se3Rva2VuOlsic3RvcmFnZS50eXBlIiwicHVuY3R1YXRpb24ub3BlcmF0b3IiLCJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSxyZWdleDovKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dGltZUVuZHxhc3NlcnQpXGIvfSx7dG9rZW46ZnVuY3Rpb24oYyl7cmV0dXJuIGEuaGFzT3duUHJvcGVydHkoYyk/InZhcmlhYmxlLmxhbmd1YWdlIjpkLmhhc093blByb3BlcnR5KGMpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmguaGFzT3duUHJvcGVydHkoYyk/InN0b3JhZ2UudHlwZSI6Yi5oYXNPd25Qcm9wZXJ0eShjKT8ia2V5d29yZCI6aS5oYXNPd25Qcm9wZXJ0eShjKT8iY29uc3RhbnQubGFuZ3VhZ2UiOmouaGFzT3duUHJvcGVydHkoYyk/ImludmFsaWQuaWxsZWdhbCI6Yz09ImRlYnVnZ2VyIj8iaW52YWxpZC5kZXByZWNhdGVkIjoiaWRlbnRpZmllciJ9LHJlZ2V4Omt9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6LyF8XCR8JXwmfFwqfFwtXC18XC18XCtcK3xcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XHxcfHxcP1w6fFwqPXwlPXxcKz18XC09fCY9fFxePXxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkvLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InB1bmN0dWF0aW9uLm9wZXJhdG9yIixyZWdleDovXD98XDp8XCx8XDt8XC4vLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6L1tcWyh7XS8sbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoicGFyZW4ucnBhcmVuIixyZWdleDovW1xdKX1dL30se3Rva2VuOiJrZXl3b3JkLm9wZXJhdG9yIixyZWdleDovXC89Py8sbmV4dDoicmVnZXhfYWxsb3dlZCJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6L14jIS4qJC99LHt0b2tlbjoidGV4dCIscmVnZXg6L1xzKy99XSxyZWdleF9hbGxvd2VkOltnLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0Iikse3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJjb21tZW50X3JlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC9cXC8uKiQifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJcXC8iLG5leHQ6InJlZ2V4IixtZXJnZTohMH0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4Olt7dG9rZW46InJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIixyZWdleDoiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikifSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiIvXFx3KiIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAiLHJlZ2V4OiJbXlxcXFwvXFxbXSsiLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIixyZWdleDoiXFxbIixuZXh0OiJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiLG1lcmdlOiEwfSx7dG9rZW46ImVtcHR5IixyZWdleDoiIixuZXh0OiJzdGFydCJ9XSxyZWdleF9jaGFyYWN0ZXJfY2xhc3M6W3t0b2tlbjoicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSJ9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJdIixuZXh0OiJyZWdleCIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiLHJlZ2V4OiJbXlxcXFxcXF1dKyIsbWVyZ2U6ITB9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLGZ1bmN0aW9uX2FyZ3VtZW50czpbe3Rva2VuOiJ2YXJpYWJsZS5wYXJhbWV0ZXIiLHJlZ2V4Omt9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiJbLCBdKyIsbWVyZ2U6ITB9LHt0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLHJlZ2V4OiIkIixtZXJnZTohMH0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDoic3RhcnQifV0sY29tbWVudF9yZWdleF9hbGxvd2VkOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InJlZ2V4X2FsbG93ZWQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxjb21tZW50Olt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIuKj9cXCpcXC8iLG1lcmdlOiEwLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scXFzdHJpbmc6W3t0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIixyZWdleDpsfSx7dG9rZW46InN0cmluZyIscmVnZXg6J1teIlxcXFxdKycsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLG5leHQ6InFxc3RyaW5nIixtZXJnZTohMH0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OicifCQnLG5leHQ6InN0YXJ0IixtZXJnZTohMH1dLHFzdHJpbmc6W3t0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIixyZWdleDpsfSx7dG9rZW46InN0cmluZyIscmVnZXg6IlteJ1xcXFxdKyIsbWVyZ2U6ITB9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiXFxcXCQiLG5leHQ6InFzdHJpbmciLG1lcmdlOiEwfSx7dG9rZW46InN0cmluZyIscmVnZXg6Iid8JCIsbmV4dDoic3RhcnQiLG1lcmdlOiEwfV19LHRoaXMuZW1iZWRSdWxlcyhnLCJkb2MtIixbZy5nZXRFbmRSdWxlKCJzdGFydCIpXSl9O2QuaW5oZXJpdHMoaSxoKSxiLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcz1pfSksZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZj1mdW5jdGlvbigpe3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50LmRvYy50YWciLHJlZ2V4OiJAW1xcd1xcZF9dKyJ9LHt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXHMrIn0se3Rva2VuOiJjb21tZW50LmRvYyIsbWVyZ2U6ITAscmVnZXg6IlRPRE8ifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiW15AXFwqXSsifSx7dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiLiJ9XX19O2QuaW5oZXJpdHMoZixlKSxmLmdldFN0YXJ0UnVsZT1mdW5jdGlvbihhKXtyZXR1cm57dG9rZW46ImNvbW1lbnQuZG9jIixtZXJnZTohMCxyZWdleDoiXFwvXFwqKD89XFwqKSIsbmV4dDphfX0sZi5nZXRFbmRSdWxlPWZ1bmN0aW9uKGEpe3JldHVybnt0b2tlbjoiY29tbWVudC5kb2MiLG1lcmdlOiEwLHJlZ2V4OiJcXCpcXC8iLG5leHQ6YX19LGIuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzPWZ9KSxkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vcmFuZ2UiKS5SYW5nZSxlPWZ1bmN0aW9uKCl7fTsoZnVuY3Rpb24oKXt0aGlzLmNoZWNrT3V0ZGVudD1mdW5jdGlvbihhLGIpe3JldHVybi9eXHMrJC8udGVzdChhKT8vXlxzKlx9Ly50ZXN0KGIpOiExfSx0aGlzLmF1dG9PdXRkZW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRMaW5lKGIpLGU9Yy5tYXRjaCgvXihccypcfSkvKTtpZighZSlyZXR1cm4gMDt2YXIgZj1lWzFdLmxlbmd0aCxnPWEuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OmIsY29sdW1uOmZ9KTtpZighZ3x8Zy5yb3c9PWIpcmV0dXJuIDA7dmFyIGg9dGhpcy4kZ2V0SW5kZW50KGEuZ2V0TGluZShnLnJvdykpO2EucmVwbGFjZShuZXcgZChiLDAsYixmLTEpLGgpfSx0aGlzLiRnZXRJbmRlbnQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5tYXRjaCgvXihccyspLyk7cmV0dXJuIGI/YlsxXToiIn19KS5jYWxsKGUucHJvdG90eXBlKSxiLk1hdGNoaW5nQnJhY2VPdXRkZW50PWV9KSxkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1mdW5jdGlvbigpe3RoaXMuYWRkKCJicmFjZXMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09InsiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj97dGV4dDoieyIrZysifSIsc2VsZWN0aW9uOiExfTp7dGV4dDoie30iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09In0iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGs9ZC4kZmluZE9wZW5pbmdCcmFja2V0KCJ9Iix7Y29sdW1uOmguY29sdW1uKzEscm93Omgucm93fSk7aWYoayE9PW51bGwpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19ZWxzZSBpZihlPT0iXG4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSJ9Iil7dmFyIGw9ZC5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6aC5yb3csY29sdW1uOmguY29sdW1uKzF9KTtpZighbClyZXR1cm4gbnVsbDt2YXIgbT10aGlzLmdldE5leHRMaW5lSW5kZW50KGEsaS5zdWJzdHJpbmcoMCxpLmxlbmd0aC0xKSxkLmdldFRhYlN0cmluZygpKSxuPXRoaXMuJGdldEluZGVudChkLmRvYy5nZXRMaW5lKGwucm93KSk7cmV0dXJue3RleHQ6IlxuIittKyJcbiIrbixzZWxlY3Rpb246WzEsbS5sZW5ndGgsMSxtLmxlbmd0aF19fX19KSx0aGlzLmFkZCgiYnJhY2VzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJmY9PSJ7Iil7dmFyIGc9ZC5kb2MuZ2V0TGluZShlLnN0YXJ0LnJvdyksaD1nLnN1YnN0cmluZyhlLmVuZC5jb2x1bW4sZS5lbmQuY29sdW1uKzEpO2lmKGg9PSJ9IilyZXR1cm4gZS5lbmQuY29sdW1uKyssZX19KSx0aGlzLmFkZCgicGFyZW5zIiwiaW5zZXJ0aW9uIixmdW5jdGlvbihhLGIsYyxkLGUpe2lmKGU9PSIoIil7dmFyIGY9Yy5nZXRTZWxlY3Rpb25SYW5nZSgpLGc9ZC5kb2MuZ2V0VGV4dFJhbmdlKGYpO3JldHVybiBnIT09IiI/e3RleHQ6IigiK2crIikiLHNlbGVjdGlvbjohMX06e3RleHQ6IigpIixzZWxlY3Rpb246WzEsMV19fWlmKGU9PSIpIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaj1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisxKTtpZihqPT0iKSIpe3ZhciBrPWQuJGZpbmRPcGVuaW5nQnJhY2tldCgiKSIse2NvbHVtbjpoLmNvbHVtbisxLHJvdzpoLnJvd30pO2lmKGshPT1udWxsKXJldHVybnt0ZXh0OiIiLHNlbGVjdGlvbjpbMSwxXX19fX0pLHRoaXMuYWRkKCJwYXJlbnMiLCJkZWxldGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj1kLmRvYy5nZXRUZXh0UmFuZ2UoZSk7aWYoIWUuaXNNdWx0aUxpbmUoKSYmZj09IigiKXt2YXIgZz1kLmRvYy5nZXRMaW5lKGUuc3RhcnQucm93KSxoPWcuc3Vic3RyaW5nKGUuc3RhcnQuY29sdW1uKzEsZS5zdGFydC5jb2x1bW4rMik7aWYoaD09IikiKXJldHVybiBlLmVuZC5jb2x1bW4rKyxlfX0pLHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsImluc2VydGlvbiIsZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihlPT0nIid8fGU9PSInIil7dmFyIGY9ZSxnPWMuZ2V0U2VsZWN0aW9uUmFuZ2UoKSxoPWQuZG9jLmdldFRleHRSYW5nZShnKTtpZihoIT09IiIpcmV0dXJue3RleHQ6ZitoK2Ysc2VsZWN0aW9uOiExfTt2YXIgaT1jLmdldEN1cnNvclBvc2l0aW9uKCksaj1kLmRvYy5nZXRMaW5lKGkucm93KSxrPWouc3Vic3RyaW5nKGkuY29sdW1uLTEsaS5jb2x1bW4pO2lmKGs9PSJcXCIpcmV0dXJuIG51bGw7dmFyIGw9ZC5nZXRUb2tlbnMoZy5zdGFydC5yb3cpLG09MCxuLG89LTE7Zm9yKHZhciBwPTA7cDxsLmxlbmd0aDtwKyspe249bFtwXSxuLnR5cGU9PSJzdHJpbmciP289LTE6bzwwJiYobz1uLnZhbHVlLmluZGV4T2YoZikpO2lmKG4udmFsdWUubGVuZ3RoK20+Zy5zdGFydC5jb2x1bW4pYnJlYWs7bSs9bFtwXS52YWx1ZS5sZW5ndGh9aWYoIW58fG88MCYmbi50eXBlIT09ImNvbW1lbnQiJiYobi50eXBlIT09InN0cmluZyJ8fGcuc3RhcnQuY29sdW1uIT09bi52YWx1ZS5sZW5ndGgrbS0xJiZuLnZhbHVlLmxhc3RJbmRleE9mKGYpPT09bi52YWx1ZS5sZW5ndGgtMSkpcmV0dXJue3RleHQ6ZitmLHNlbGVjdGlvbjpbMSwxXX07aWYobiYmbi50eXBlPT09InN0cmluZyIpe3ZhciBxPWouc3Vic3RyaW5nKGkuY29sdW1uLGkuY29sdW1uKzEpO2lmKHE9PWYpcmV0dXJue3RleHQ6IiIsc2VsZWN0aW9uOlsxLDFdfX19fSksdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwiZGVsZXRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9ZC5kb2MuZ2V0VGV4dFJhbmdlKGUpO2lmKCFlLmlzTXVsdGlMaW5lKCkmJihmPT0nIid8fGY9PSInIikpe3ZhciBnPWQuZG9jLmdldExpbmUoZS5zdGFydC5yb3cpLGg9Zy5zdWJzdHJpbmcoZS5zdGFydC5jb2x1bW4rMSxlLnN0YXJ0LmNvbHVtbisyKTtpZihoPT0nIicpcmV0dXJuIGUuZW5kLmNvbHVtbisrLGV9fSl9O2QuaW5oZXJpdHMoZixlKSxiLkNzdHlsZUJlaGF2aW91cj1mfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vcmFuZ2UiKS5SYW5nZSxmPWEoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUsZz1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTtkLmluaGVyaXRzKGcsZiksZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj0vKFx7fFxbKVteXH1cXV0qJHxeXHMqKFwvXCopLyx0aGlzLmZvbGRpbmdTdG9wTWFya2VyPS9eW15cW1x7XSooXH18XF0pfF5bXHNcKl0qKFwqXC8pLyx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRMaW5lKGMpLGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7aWYoZil7dmFyIGc9Zi5pbmRleDtpZihmWzFdKXJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soYSxmWzFdLGMsZyk7dmFyIGg9YS5nZXRDb21tZW50Rm9sZFJhbmdlKGMsZytmWzBdLmxlbmd0aCk7cmV0dXJuIGguZW5kLmNvbHVtbi09MixofWlmKGIhPT0ibWFya2JlZ2luZW5kIilyZXR1cm47dmFyIGY9ZC5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTtpZihmKXt2YXIgZz1mLmluZGV4K2ZbMF0ubGVuZ3RoO2lmKGZbMl0pe3ZhciBoPWEuZ2V0Q29tbWVudEZvbGRSYW5nZShjLGcpO3JldHVybiBoLmVuZC5jb2x1bW4tPTIsaH12YXIgaT17cm93OmMsY29sdW1uOmd9LGo9YS4kZmluZE9wZW5pbmdCcmFja2V0KGZbMV0saSk7aWYoIWopcmV0dXJuO3JldHVybiBqLmNvbHVtbisrLGkuY29sdW1uLS0sZS5mcm9tUG9pbnRzKGosaSl9fX0uY2FsbChnLnByb3RvdHlwZSl9KSxkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZT1iLkZvbGRNb2RlPWZ1bmN0aW9uKCl7fTsoZnVuY3Rpb24oKXt0aGlzLmZvbGRpbmdTdGFydE1hcmtlcj1udWxsLHRoaXMuZm9sZGluZ1N0b3BNYXJrZXI9bnVsbCx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEuZ2V0TGluZShjKTtyZXR1cm4gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChkKT8ic3RhcnQiOmI9PSJtYXJrYmVnaW5lbmQiJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyJiZ0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnRlc3QoZCk/ImVuZCI6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbnVsbH0sdGhpcy5pbmRlbnRhdGlvbkJsb2NrPWZ1bmN0aW9uKGEsYixjKXt2YXIgZT0vXlxzKi8sZj1iLGc9YixoPWEuZ2V0TGluZShiKSxpPWN8fGgubGVuZ3RoLGo9aC5tYXRjaChlKVswXS5sZW5ndGgsaz1hLmdldExlbmd0aCgpO3doaWxlKCsrYjxrKXtoPWEuZ2V0TGluZShiKTt2YXIgbD1oLm1hdGNoKGUpWzBdLmxlbmd0aDtpZihsPT1oLmxlbmd0aCljb250aW51ZTtpZihsPD1qKWJyZWFrO2c9Yn1pZihnPmYpe3ZhciBtPWEuZ2V0TGluZShnKS5sZW5ndGg7cmV0dXJuIG5ldyBkKGYsaSxnLG0pfX0sdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrPWZ1bmN0aW9uKGEsYixjLGUsZixnKXt2YXIgaD17cm93OmMsY29sdW1uOmUrMX0saT1hLiRmaW5kQ2xvc2luZ0JyYWNrZXQoYixoLGYsZyk7aWYoIWkpcmV0dXJuO3ZhciBqPWEuZm9sZFdpZGdldHNbaS5yb3ddO3JldHVybiBqPT1udWxsJiYoaj10aGlzLmdldEZvbGRXaWRnZXQoYSxpLnJvdykpLGo9PSJzdGFydCImJihpLnJvdy0tLGkuY29sdW1uPWEuZ2V0TGluZShpLnJvdykubGVuZ3RoKSxkLmZyb21Qb2ludHMoaCxpKX19KS5jYWxsKGUucHJvdG90eXBlKX0pLGRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi90ZXh0IikuTW9kZSxmPWEoIi4uL3Rva2VuaXplciIpLlRva2VuaXplcixnPWEoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzLGg9YSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQsaT1hKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudCxqPWEoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZSxrPWZ1bmN0aW9uKCl7dGhpcy4kdG9rZW5pemVyPW5ldyBmKChuZXcgZykuZ2V0UnVsZXMoKSwiaSIpLHRoaXMuJG91dGRlbnQ9bmV3IGgsdGhpcy5mb2xkaW5nUnVsZXM9bmV3IGp9O2QuaW5oZXJpdHMoayxlKSxmdW5jdGlvbigpe3RoaXMuZm9sZGluZ1J1bGVzPSJjU3R5bGUiLHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldEluZGVudChiKSxlPXRoaXMuJHRva2VuaXplci5nZXRMaW5lVG9rZW5zKGIsYSkudG9rZW5zO2lmKGUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLnR5cGU9PSJjb21tZW50IilyZXR1cm4gZDt2YXIgZj1iLm1hdGNoKC9eLipce1xzKiQvKTtyZXR1cm4gZiYmKGQrPWMpLGR9LHRoaXMuY2hlY2tPdXRkZW50PWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQoYixjKX0sdGhpcy5hdXRvT3V0ZGVudD1mdW5jdGlvbihhLGIsYyl7dGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChiLGMpfSx0aGlzLmNyZWF0ZVdvcmtlcj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgaShbImFjZSJdLCJ3b3JrZXItY3NzLmpzIiwiYWNlL21vZGUvY3NzX3dvcmtlciIsIldvcmtlciIpO3JldHVybiBiLmF0dGFjaFRvRG9jdW1lbnQoYS5nZXREb2N1bWVudCgpKSxiLm9uKCJjc3NsaW50IixmdW5jdGlvbihiKXt2YXIgYz1bXTtiLmRhdGEuZm9yRWFjaChmdW5jdGlvbihhKXtjLnB1c2goe3JvdzphLmxpbmUtMSxjb2x1bW46YS5jb2wtMSx0ZXh0OmEubWVzc2FnZSx0eXBlOmEudHlwZSxsaW50OmF9KX0pLGEuc2V0QW5ub3RhdGlvbnMoYyl9KSxifX0uY2FsbChrLnByb3RvdHlwZSksYi5Nb2RlPWt9KSxkZWZpbmUoImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4uL2xpYi9sYW5nIiksZj1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGc9ZnVuY3Rpb24oKXt2YXIgYT1lLmFycmF5VG9NYXAoImFuaW1hdGlvbi1maWxsLW1vZGV8YWxpZ25tZW50LWFkanVzdHxhbGlnbm1lbnQtYmFzZWxpbmV8YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxhbmltYXRpb258YXBwZWFyYW5jZXxhemltdXRofGJhY2tmYWNlLXZpc2liaWxpdHl8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYnJlYWt8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxiYWNrZ3JvdW5kfGJhc2VsaW5lLXNoaWZ0fGJpbmRpbmd8YmxlZWR8Ym9va21hcmstbGFiZWx8Ym9va21hcmstbGV2ZWx8Ym9va21hcmstc3RhdGV8Ym9va21hcmstdGFyZ2V0fGJvcmRlci1ib3R0b218Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJvcmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvcmRlcnxib3R0b218Ym94LWFsaWdufGJveC1kZWNvcmF0aW9uLWJyZWFrfGJveC1kaXJlY3Rpb258Ym94LWZsZXgtZ3JvdXB8Ym94LWZsZXh8Ym94LWxpbmVzfGJveC1vcmRpbmFsLWdyb3VwfGJveC1vcmllbnR8Ym94LXBhY2t8Ym94LXNoYWRvd3xib3gtc2l6aW5nfGJyZWFrLWFmdGVyfGJyZWFrLWJlZm9yZXxicmVhay1pbnNpZGV8Y2FwdGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3ItcHJvZmlsZXxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3JvcHxjdWUtYWZ0ZXJ8Y3VlLWJlZm9yZXxjdWV8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGRvbWluYW50LWJhc2VsaW5lfGRyb3AtaW5pdGlhbC1hZnRlci1hZGp1c3R8ZHJvcC1pbml0aWFsLWFmdGVyLWFsaWdufGRyb3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0fGRyb3AtaW5pdGlhbC1iZWZvcmUtYWxpZ258ZHJvcC1pbml0aWFsLXNpemV8ZHJvcC1pbml0aWFsLXZhbHVlfGVsZXZhdGlvbnxlbXB0eS1jZWxsc3xmaXR8Zml0LXBvc2l0aW9ufGZsb2F0LW9mZnNldHxmbG9hdHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8Zm9udHxncmlkLWNvbHVtbnN8Z3JpZC1yb3dzfGhhbmdpbmctcHVuY3R1YXRpb258aGVpZ2h0fGh5cGhlbmF0ZS1hZnRlcnxoeXBoZW5hdGUtYmVmb3JlfGh5cGhlbmF0ZS1jaGFyYWN0ZXJ8aHlwaGVuYXRlLWxpbmVzfGh5cGhlbmF0ZS1yZXNvdXJjZXxoeXBoZW5zfGljb258aW1hZ2Utb3JpZW50YXRpb258aW1hZ2UtcmVuZGVyaW5nfGltYWdlLXJlc29sdXRpb258aW5saW5lLWJveC1hbGlnbnxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpbmUtc3RhY2tpbmctcnVieXxsaW5lLXN0YWNraW5nLXNoaWZ0fGxpbmUtc3RhY2tpbmctc3RyYXRlZ3l8bGluZS1zdGFja2luZ3xsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfGxpc3Qtc3R5bGV8bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXJnaW58bWFyay1hZnRlcnxtYXJrLWJlZm9yZXxtYXJrfG1hcmtzfG1hcnF1ZWUtZGlyZWN0aW9ufG1hcnF1ZWUtcGxheS1jb3VudHxtYXJxdWVlLXNwZWVkfG1hcnF1ZWUtc3R5bGV8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWluLWhlaWdodHxtaW4td2lkdGh8bW92ZS10b3xuYXYtZG93bnxuYXYtaW5kZXh8bmF2LWxlZnR8bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9ycGhhbnN8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3V0bGluZXxvdmVyZmxvdy1zdHlsZXxvdmVyZmxvdy14fG92ZXJmbG93LXl8b3ZlcmZsb3d8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFkZGluZ3xwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBhZ2UtcG9saWN5fHBhZ2V8cGF1c2UtYWZ0ZXJ8cGF1c2UtYmVmb3JlfHBhdXNlfHBlcnNwZWN0aXZlLW9yaWdpbnxwZXJzcGVjdGl2ZXxwaG9uZW1lc3xwaXRjaC1yYW5nZXxwaXRjaHxwbGF5LWR1cmluZ3xwb3NpdGlvbnxwcmVzZW50YXRpb24tbGV2ZWx8cHVuY3R1YXRpb24tdHJpbXxxdW90ZXN8cmVuZGVyaW5nLWludGVudHxyZXNpemV8cmVzdC1hZnRlcnxyZXN0LWJlZm9yZXxyZXN0fHJpY2huZXNzfHJpZ2h0fHJvdGF0aW9uLXBvaW50fHJvdGF0aW9ufHJ1YnktYWxpZ258cnVieS1vdmVyaGFuZ3xydWJ5LXBvc2l0aW9ufHJ1Ynktc3BhbnxzaXplfHNwZWFrLWhlYWRlcnxzcGVhay1udW1lcmFsfHNwZWFrLXB1bmN0dWF0aW9ufHNwZWFrfHNwZWVjaC1yYXRlfHN0cmVzc3xzdHJpbmctc2V0fHRhYmxlLWxheW91dHx0YXJnZXQtbmFtZXx0YXJnZXQtbmV3fHRhcmdldC1wb3NpdGlvbnx0YXJnZXR8dGV4dC1hbGlnbi1sYXN0fHRleHQtYWxpZ258dGV4dC1kZWNvcmF0aW9ufHRleHQtZW1waGFzaXN8dGV4dC1oZWlnaHR8dGV4dC1pbmRlbnR8dGV4dC1qdXN0aWZ5fHRleHQtb3V0bGluZXx0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0ZXh0LXdyYXB8dG9wfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zZm9ybXx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx0cmFuc2l0aW9ufHVuaWNvZGUtYmlkaXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHZvaWNlLWJhbGFuY2V8dm9pY2UtZHVyYXRpb258dm9pY2UtZmFtaWx5fHZvaWNlLXBpdGNoLXJhbmdlfHZvaWNlLXBpdGNofHZvaWNlLXJhdGV8dm9pY2Utc3RyZXNzfHZvaWNlLXZvbHVtZXx2b2x1bWV8d2hpdGUtc3BhY2UtY29sbGFwc2V8d2hpdGUtc3BhY2V8d2lkb3dzfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4Ii5zcGxpdCgifCIpKSxiPWUuYXJyYXlUb01hcCgicmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyIuc3BsaXQoInwiKSksYz1lLmFycmF5VG9NYXAoImFic29sdXRlfGFmdGVyLWVkZ2V8YWZ0ZXJ8YWxsLXNjcm9sbHxhbGx8YWxwaGFiZXRpY3xhbHdheXN8YW50aWFsaWFzZWR8YXJtZW5pYW58YXV0b3xhdm9pZC1jb2x1bW58YXZvaWQtcGFnZXxhdm9pZHxiYWxhbmNlfGJhc2VsaW5lfGJlZm9yZS1lZGdlfGJlZm9yZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrLWxpbmUtaGVpZ2h0fGJsb2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218Ym94fGJyZWFrLWFsbHxicmVhay13b3JkfGNhcGl0YWxpemV8Y2Fwcy1oZWlnaHR8Y2FwdGlvbnxjZW50ZXJ8Y2VudHJhbHxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y2xvbmV8Y2xvc2UtcXVvdGV8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb2x1bW58Y29uc2lkZXItc2hpZnRzfGNvbnRhaW58Y29udGVudC1ib3h8Y292ZXJ8Y3Jvc3NoYWlyfGN1YmljLWJlemllcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxkZWZhdWx0fGRpc2FibGVkfGRpc2N8ZGlzcmVnYXJkLXNoaWZ0c3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxlYXNlLWlufGVhc2UtaW4tb3V0fGVhc2Utb3V0fGVhc2V8ZWxsaXBzaXN8ZW5kfGV4Y2x1ZGUtcnVieXxmaWxsfGZpeGVkfGZvbnQtc2l6ZXxmb250fGdlb3JnaWFufGdseXBoc3xncmlkLWhlaWdodHxncm9vdmV8aGFuZHxoYW5naW5nfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGljb258aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aWRlb2dyYXBoaWN8aW5hY3RpdmV8aW5jbHVkZS1ydWJ5fGluaGVyaXR8aW5pdGlhbHxpbmxpbmUtYmxvY2t8aW5saW5lLWJveHxpbmxpbmUtbGluZS1oZWlnaHR8aW5saW5lLXRhYmxlfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aW52ZXJ0fGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxsfGxhc3R8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaW5lYXJ8bGlzdC1pdGVtfGxvY2FsfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWF0aGVtYXRpY2FsfG1heC1oZWlnaHR8bWF4LXNpemV8bWVkaXVtfG1lbnV8bWVzc2FnZS1ib3h8bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1jaGFuZ2V8bm8tY2xvc2UtcXVvdGV8bm8tZHJvcHxuby1vcGVuLXF1b3RlfG5vLXJlcGVhdHxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dyYXB8bnctcmVzaXplfG9ibGlxdWV8b3Blbi1xdW90ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxwYWRkaW5nLWJveHxwYWdlfHBvaW50ZXJ8cHJlLWxpbmV8cHJlLXdyYXB8cHJlfHByZXNlcnZlLTNkfHByb2dyZXNzfHJlbGF0aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyZXBsYWNlZHxyZXNldC1zaXplfHJpZGdlfHJpZ2h0fHJvdW5kfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJhdGV8c2xpY2V8c21hbGwtY2Fwc3xzbWFsbC1jYXB0aW9ufHNvbGlkfHNwYWNlfHNxdWFyZXxzdGFydHxzdGF0aWN8c3RhdHVzLWJhcnxzdGVwLWVuZHxzdGVwLXN0YXJ0fHN0ZXBzfHN0cmV0Y2h8c3RyaWN0fHN1YnxzdXBlcnxzdy1yZXNpemV8dGFibGUtY2FwdGlvbnx0YWJsZS1jZWxsfHRhYmxlLWNvbHVtbi1ncm91cHx0YWJsZS1jb2x1bW58dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1yb3ctZ3JvdXB8dGFibGUtcm93fHRhYmxlfHRiLXJsfHRleHQtYWZ0ZXItZWRnZXx0ZXh0LWJlZm9yZS1lZGdlfHRleHQtYm90dG9tfHRleHQtc2l6ZXx0ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dG9wfHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21hbnx1cHBlcmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVybyIuc3BsaXQoInwiKSksZD1lLmFycmF5VG9NYXAoImFxdWF8YmxhY2t8Ymx1ZXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxtYXJvb258bmF2eXxvbGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3ciLnNwbGl0KCJ8IikpLGY9ZS5hcnJheVRvTWFwKCJhcmlhbHxjZW50dXJ5fGNvbWljfGNvdXJpZXJ8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiLnNwbGl0KCJ8IikpLGc9IlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIixoPSIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiIsaT0iKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiLGo9W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoicnVsZXNldF9jb21tZW50In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OidbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJ30se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIn0se3Rva2VuOlsiY29uc3RhbnQubnVtZXJpYyIsImtleXdvcmQiXSxyZWdleDoiKCIrZysiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm18dnd8JSkifSx7dG9rZW46WyJjb25zdGFudC5udW1lcmljIl0scmVnZXg6IihbMC05XSspIn0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezZ9In0se3Rva2VuOiJjb25zdGFudC5udW1lcmljIixyZWdleDoiI1thLWYwLTldezN9In0se3Rva2VuOlsicHVuY3R1YXRpb24iLCJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWVsZW1lbnQuY3NzIl0scmVnZXg6aH0se3Rva2VuOlsicHVuY3R1YXRpb24iLCJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWNsYXNzLmNzcyJdLHJlZ2V4Oml9LHt0b2tlbjpmdW5jdGlvbihlKXtyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LnR5cGUiOmIuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5mdW5jdGlvbiI6Yy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpPyJzdXBwb3J0LmNvbnN0YW50IjpkLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/InN1cHBvcnQuY29uc3RhbnQuY29sb3IiOmYuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT8ic3VwcG9ydC5jb25zdGFudC5mb250cyI6InRleHQifSxyZWdleDoiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoifV0saz1lLmNvcHlBcnJheShqKTtrLnVuc2hpZnQoe3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJcXH0iLG5leHQ6InN0YXJ0In0pO3ZhciBsPWUuY29weUFycmF5KGopO2wudW5zaGlmdCh7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IlxcfSIsbmV4dDoibWVkaWEifSk7dmFyIG09W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLG49ZS5jb3B5QXJyYXkobSk7bi51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoic3RhcnQifSk7dmFyIG89ZS5jb3B5QXJyYXkobSk7by51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoibWVkaWEifSk7dmFyIHA9ZS5jb3B5QXJyYXkobSk7cC51bnNoaWZ0KHt0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qP1xcKlxcLyIsbmV4dDoicnVsZXNldCJ9KSx0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6IlxcL1xcKiIsbmV4dDoiY29tbWVudCJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiXFx7IixuZXh0OiJydWxlc2V0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiJALio/eyIsbmV4dDoibWVkaWEifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwuW2EtejAtOS1fXSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9XSxtZWRpYTpbe3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiXFwvXFwqIixuZXh0OiJtZWRpYV9jb21tZW50In0se3Rva2VuOiJwYXJlbi5scGFyZW4iLHJlZ2V4OiJcXHsiLG5leHQ6Im1lZGlhX3J1bGVzZXQifSx7dG9rZW46InN0cmluZyIscmVnZXg6IlxcfSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIjW2EtejAtOS1fXSsifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwuW2EtejAtOS1fXSsifSx7dG9rZW46InN0cmluZyIscmVnZXg6IjpbYS16MC05LV9dKyJ9LHt0b2tlbjoiY29uc3RhbnQiLHJlZ2V4OiJbYS16MC05LV9dKyJ9XSxjb21tZW50Om4scnVsZXNldDprLHJ1bGVzZXRfY29tbWVudDpwLG1lZGlhX3J1bGVzZXQ6bCxtZWRpYV9jb21tZW50Om99fTtkLmluaGVyaXRzKGcsZiksYi5Dc3NIaWdobGlnaHRSdWxlcz1nfSksZGVmaW5lKCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUveG1sX3V0aWwiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlcyxmPWEoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsZz1hKCIuL3htbF91dGlsIiksaD1hKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLGk9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6IjxcXCFcXFtDREFUQVxcWyIsbmV4dDoiY2RhdGEifSx7dG9rZW46InhtbF9wZSIscmVnZXg6IjxcXD8uKj9cXD8+In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiPFxcIS0tIixuZXh0OiJjb21tZW50In0se3Rva2VuOiJ4bWxfcGUiLHJlZ2V4OiI8XFwhLio/PiJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8KD89cypzY3JpcHRcXGIpIixuZXh0OiJzY3JpcHQifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPCg/PXMqc3R5bGVcXGIpIixuZXh0OiJzdHlsZSJ9LHt0b2tlbjoibWV0YS50YWciLHJlZ2V4OiI8XFwvPyIsbmV4dDoidGFnIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjoiY29uc3RhbnQuY2hhcmFjdGVyLmVudGl0eSIscmVnZXg6Iig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiW148XSsifV0sY2RhdGE6W3t0b2tlbjoidGV4dCIscmVnZXg6IlxcXVxcXT4iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJ0ZXh0IixtZXJnZTohMCxyZWdleDoiXFxzKyJ9LHt0b2tlbjoidGV4dCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLGNvbW1lbnQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Ii4qPy0tPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XX0sZy50YWcodGhpcy4kcnVsZXMsInRhZyIsInN0YXJ0IiksZy50YWcodGhpcy4kcnVsZXMsInN0eWxlIiwiY3NzLXN0YXJ0IiksZy50YWcodGhpcy4kcnVsZXMsInNjcmlwdCIsImpzLXN0YXJ0IiksdGhpcy5lbWJlZFJ1bGVzKGYsImpzLSIsW3t0b2tlbjoiY29tbWVudCIscmVnZXg6IlxcL1xcLy4qKD89PFxcL3NjcmlwdD4pIixuZXh0OiJ0YWcifSx7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPFxcLyg/PXNjcmlwdCkiLG5leHQ6InRhZyJ9XSksdGhpcy5lbWJlZFJ1bGVzKGUsImNzcy0iLFt7dG9rZW46Im1ldGEudGFnIixyZWdleDoiPFxcLyg/PXN0eWxlKSIsbmV4dDoidGFnIn1dKX07ZC5pbmhlcml0cyhpLGgpLGIuSHRtbEhpZ2hsaWdodFJ1bGVzPWl9KSxkZWZpbmUoImFjZS9tb2RlL3htbF91dGlsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9sYW5nIl0sZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGcoYSl7cmV0dXJuW3t0b2tlbjoic3RyaW5nIixyZWdleDonIi4qPyInfSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6J1siXS4qJyxuZXh0OmErIl9xcXN0cmluZyJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDoiJy4qPycifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6IlsnXS4qIixuZXh0OmErIl9xc3RyaW5nIn1dfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm5be3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKj8iK2EsbmV4dDpifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dfXZhciBkPWEoIi4uL2xpYi9sYW5nIiksZT1kLmFycmF5VG9NYXAoImJ1dHRvbnxmb3JtfGlucHV0fGxhYmVsfHNlbGVjdHx0ZXh0YXJlYSIuc3BsaXQoInwiKSksZj1kLmFycmF5VG9NYXAoInRhYmxlfHRib2R5fHRkfHRmb290fHRofHRyIi5zcGxpdCgifCIpKTtiLnRhZz1mdW5jdGlvbihhLGIsYyl7YVtiXT1be3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9LHt0b2tlbjpmdW5jdGlvbihhKXtyZXR1cm4gYT09PSJhIj8ibWV0YS50YWcuYW5jaG9yIjphPT09ImltZyI/Im1ldGEudGFnLmltYWdlIjphPT09InNjcmlwdCI/Im1ldGEudGFnLnNjcmlwdCI6YT09PSJzdHlsZSI/Im1ldGEudGFnLnN0eWxlIjplLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/Im1ldGEudGFnLmZvcm0iOmYuaGFzT3duUHJvcGVydHkoYS50b0xvd2VyQ2FzZSgpKT8ibWV0YS50YWcudGFibGUiOiJtZXRhLnRhZyJ9LG1lcmdlOiEwLHJlZ2V4OiJbLV9hLXpBLVowLTk6XSsiLG5leHQ6YisiX2VtYmVkX2F0dHJpYnV0ZV9saXN0In0se3Rva2VuOiJlbXB0eSIscmVnZXg6IiIsbmV4dDpiKyJfZW1iZWRfYXR0cmlidXRlX2xpc3QifV0sYVtiKyJfcXN0cmluZyJdPWgoIiciLGIrIl9lbWJlZF9hdHRyaWJ1dGVfbGlzdCIpLGFbYisiX3Fxc3RyaW5nIl09aCgnIicsYisiX2VtYmVkX2F0dHJpYnV0ZV9saXN0IiksYVtiKyJfZW1iZWRfYXR0cmlidXRlX2xpc3QiXT1be3Rva2VuOiJtZXRhLnRhZyIsbWVyZ2U6ITAscmVnZXg6Ii8/PiIsbmV4dDpjfSx7dG9rZW46ImtleXdvcmQub3BlcmF0b3IiLHJlZ2V4OiI9In0se3Rva2VuOiJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUiLHJlZ2V4OiJbLV9hLXpBLVowLTk6XSsifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV0uY29uY2F0KGcoYikpfX0pLGRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXIsZj1hKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cixnPWZ1bmN0aW9uKCl7dGhpcy5pbmhlcml0KGYsWyJzdHJpbmdfZHF1b3RlcyJdKSx0aGlzLmFkZCgiYnJhY2tldHMiLCJpbnNlcnRpb24iLGZ1bmN0aW9uKGEsYixjLGQsZSl7aWYoZT09IjwiKXt2YXIgZj1jLmdldFNlbGVjdGlvblJhbmdlKCksZz1kLmRvYy5nZXRUZXh0UmFuZ2UoZik7cmV0dXJuIGchPT0iIj8hMTp7dGV4dDoiPD4iLHNlbGVjdGlvbjpbMSwxXX19aWYoZT09Ij4iKXt2YXIgaD1jLmdldEN1cnNvclBvc2l0aW9uKCksaT1kLmRvYy5nZXRMaW5lKGgucm93KSxqPWkuc3Vic3RyaW5nKGguY29sdW1uLGguY29sdW1uKzEpO2lmKGo9PSI+IilyZXR1cm57dGV4dDoiIixzZWxlY3Rpb246WzEsMV19fWVsc2UgaWYoZT09IlxuIil7dmFyIGg9Yy5nZXRDdXJzb3JQb3NpdGlvbigpLGk9ZC5kb2MuZ2V0TGluZShoLnJvdyksaz1pLnN1YnN0cmluZyhoLmNvbHVtbixoLmNvbHVtbisyKTtpZihrPT0iPC8iKXt2YXIgbD10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpK2QuZ2V0VGFiU3RyaW5nKCksbT10aGlzLiRnZXRJbmRlbnQoZC5kb2MuZ2V0TGluZShoLnJvdykpO3JldHVybnt0ZXh0OiJcbiIrbCsiXG4iK20sc2VsZWN0aW9uOlsxLGwubGVuZ3RoLDEsbC5sZW5ndGhdfX19fSl9O2QuaW5oZXJpdHMoZyxlKSxiLlhtbEJlaGF2aW91cj1nfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uLy4uL2xpYi9vb3AiKSxlPWEoIi4vbWl4ZWQiKS5Gb2xkTW9kZSxmPWEoIi4veG1sIikuRm9sZE1vZGUsZz1hKCIuL2NzdHlsZSIpLkZvbGRNb2RlLGg9Yi5Gb2xkTW9kZT1mdW5jdGlvbigpe2UuY2FsbCh0aGlzLG5ldyBmKHthcmVhOjEsYmFzZToxLGJyOjEsY29sOjEsY29tbWFuZDoxLGVtYmVkOjEsaHI6MSxpbWc6MSxpbnB1dDoxLGtleWdlbjoxLGxpbms6MSxtZXRhOjEscGFyYW06MSxzb3VyY2U6MSx0cmFjazoxLHdicjoxLGxpOjEsZHQ6MSxkZDoxLHA6MSxydDoxLHJwOjEsb3B0Z3JvdXA6MSxvcHRpb246MSxjb2xncm91cDoxLHRkOjEsdGg6MX0pLHsianMtIjpuZXcgZywiY3NzLSI6bmV3IGd9KX07ZC5pbmhlcml0cyhoLGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi8uLi9saWIvb29wIiksZT1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGY9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhLGIpe3RoaXMuZGVmYXVsdE1vZGU9YSx0aGlzLnN1Yk1vZGVzPWJ9O2QuaW5oZXJpdHMoZixlKSxmdW5jdGlvbigpe3RoaXMuJGdldE1vZGU9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIHRoaXMuc3ViTW9kZXMpaWYoYS5pbmRleE9mKGIpPT09MClyZXR1cm4gdGhpcy5zdWJNb2Rlc1tiXTtyZXR1cm4gbnVsbH0sdGhpcy4kdHJ5TW9kZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT10aGlzLiRnZXRNb2RlKGEpO3JldHVybiBlP2UuZ2V0Rm9sZFdpZGdldChiLGMsZCk6IiJ9LHRoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMuJHRyeU1vZGUoYS5nZXRTdGF0ZShjLTEpLGEsYixjKXx8dGhpcy4kdHJ5TW9kZShhLmdldFN0YXRlKGMpLGEsYixjKXx8dGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KGEsYixjKX0sdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuJGdldE1vZGUoYS5nZXRTdGF0ZShjLTEpKTtpZighZHx8IWQuZ2V0Rm9sZFdpZGdldChhLGIsYykpZD10aGlzLiRnZXRNb2RlKGEuZ2V0U3RhdGUoYykpO2lmKCFkfHwhZC5nZXRGb2xkV2lkZ2V0KGEsYixjKSlkPXRoaXMuZGVmYXVsdE1vZGU7cmV0dXJuIGQuZ2V0Rm9sZFdpZGdldFJhbmdlKGEsYixjKX19LmNhbGwoZi5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vLi4vbGliL29vcCIpLGU9YSgiLi4vLi4vbGliL2xhbmciKSxmPWEoIi4uLy4uL3JhbmdlIikuUmFuZ2UsZz1hKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlLGg9YSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yLGk9Yi5Gb2xkTW9kZT1mdW5jdGlvbihhKXtnLmNhbGwodGhpcyksdGhpcy52b2lkRWxlbWVudHM9YXx8e319O2QuaW5oZXJpdHMoaSxnKSxmdW5jdGlvbigpe3RoaXMuZ2V0Rm9sZFdpZGdldD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtyZXR1cm4gZC5jbG9zaW5nP2I9PSJtYXJrYmVnaW5lbmQiPyJlbmQiOiIiOiFkLnRhZ05hbWV8fHRoaXMudm9pZEVsZW1lbnRzW2QudGFnTmFtZS50b0xvd2VyQ2FzZSgpXT8iIjpkLnNlbGZDbG9zaW5nPyIiOmQudmFsdWUuaW5kZXhPZigiLyIrZC50YWdOYW1lKSE9PS0xPyIiOiJzdGFydCJ9LHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lPWZ1bmN0aW9uKGEsYil7dmFyIGM9YS5nZXRUb2tlbnMoYiksZD0iIjtmb3IodmFyIGY9MDtmPGMubGVuZ3RoO2YrKyl7dmFyIGc9Y1tmXTtnLnR5cGUuaW5kZXhPZigibWV0YS50YWciKT09PTA/ZCs9Zy52YWx1ZTpkKz1lLnN0cmluZ1JlcGVhdCgiICIsZy52YWx1ZS5sZW5ndGgpfXJldHVybiB0aGlzLl9wYXJzZVRhZyhkKX0sdGhpcy50YWdSZT0vXihccyopKDw/KFwvPykoWy1fYS16QS1aMC05OiFdKilccyooXC8/KT4/KS8sdGhpcy5fcGFyc2VUYWc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy50YWdSZS5leGVjKGEpLGM9dGhpcy50YWdSZS5sYXN0SW5kZXh8fDA7cmV0dXJuIHRoaXMudGFnUmUubGFzdEluZGV4PTAse3ZhbHVlOmEsbWF0Y2g6Yj9iWzJdOiIiLGNsb3Npbmc6Yj8hIWJbM106ITEsc2VsZkNsb3Npbmc6Yj8hIWJbNV18fGJbMl09PSIvPiI6ITEsdGFnTmFtZTpiP2JbNF06IiIsY29sdW1uOmJbMV0/YytiWzFdLmxlbmd0aDpjfX0sdGhpcy5fcmVhZFRhZ0ZvcndhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7aWYoIWQpdmFyIGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpfTtjKz1iLnZhbHVlO2lmKGMuaW5kZXhPZigiPiIpIT09LTEpe3ZhciBlPXRoaXMuX3BhcnNlVGFnKGMpO3JldHVybiBlLnN0YXJ0PWQsZS5lbmQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSxhLnN0ZXBGb3J3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBGb3J3YXJkKCkpO3JldHVybiBudWxsfSx0aGlzLl9yZWFkVGFnQmFja3dhcmQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRDdXJyZW50VG9rZW4oKTtpZighYilyZXR1cm4gbnVsbDt2YXIgYz0iIixkO2RvIGlmKGIudHlwZS5pbmRleE9mKCJtZXRhLnRhZyIpPT09MCl7ZHx8KGQ9e3JvdzphLmdldEN1cnJlbnRUb2tlblJvdygpLGNvbHVtbjphLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpK2IudmFsdWUubGVuZ3RofSksYz1iLnZhbHVlK2M7aWYoYy5pbmRleE9mKCI8IikhPT0tMSl7dmFyIGU9dGhpcy5fcGFyc2VUYWcoYyk7cmV0dXJuIGUuZW5kPWQsZS5zdGFydD17cm93OmEuZ2V0Q3VycmVudFRva2VuUm93KCksY29sdW1uOmEuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCl9LGEuc3RlcEJhY2t3YXJkKCksZX19d2hpbGUoYj1hLnN0ZXBCYWNrd2FyZCgpKTtyZXR1cm4gbnVsbH0sdGhpcy5fcG9wPWZ1bmN0aW9uKGEsYil7d2hpbGUoYS5sZW5ndGgpe3ZhciBjPWFbYS5sZW5ndGgtMV07aWYoIWJ8fGMudGFnTmFtZT09Yi50YWdOYW1lKXJldHVybiBhLnBvcCgpO2lmKHRoaXMudm9pZEVsZW1lbnRzW2IudGFnTmFtZV0pcmV0dXJuO2lmKHRoaXMudm9pZEVsZW1lbnRzW2MudGFnTmFtZV0pe2EucG9wKCk7Y29udGludWV9cmV0dXJuIG51bGx9fSx0aGlzLmdldEZvbGRXaWRnZXRSYW5nZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoYSxjKTtpZighZC5tYXRjaClyZXR1cm4gbnVsbDt2YXIgZT1kLmNsb3Npbmd8fGQuc2VsZkNsb3NpbmcsZz1bXSxpO2lmKCFlKXt2YXIgaj1uZXcgaChhLGMsZC5jb2x1bW4pLGs9e3JvdzpjLGNvbHVtbjpkLmNvbHVtbitkLnRhZ05hbWUubGVuZ3RoKzJ9O3doaWxlKGk9dGhpcy5fcmVhZFRhZ0ZvcndhcmQoaikpe2lmKGkuc2VsZkNsb3Npbmcpe2lmKCFnLmxlbmd0aClyZXR1cm4gaS5zdGFydC5jb2x1bW4rPWkudGFnTmFtZS5sZW5ndGgrMixpLmVuZC5jb2x1bW4tPTIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsaS5lbmQpO2NvbnRpbnVlfWlmKGkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGYuZnJvbVBvaW50cyhrLGkuc3RhcnQpfWVsc2UgZy5wdXNoKGkpfX1lbHNle3ZhciBqPW5ldyBoKGEsYyxkLmNvbHVtbitkLm1hdGNoLmxlbmd0aCksbD17cm93OmMsY29sdW1uOmQuY29sdW1ufTt3aGlsZShpPXRoaXMuX3JlYWRUYWdCYWNrd2FyZChqKSl7aWYoaS5zZWxmQ2xvc2luZyl7aWYoIWcubGVuZ3RoKXJldHVybiBpLnN0YXJ0LmNvbHVtbis9aS50YWdOYW1lLmxlbmd0aCsyLGkuZW5kLmNvbHVtbi09MixmLmZyb21Qb2ludHMoaS5zdGFydCxpLmVuZCk7Y29udGludWV9aWYoIWkuY2xvc2luZyl7dGhpcy5fcG9wKGcsaSk7aWYoZy5sZW5ndGg9PTApcmV0dXJuIGkuc3RhcnQuY29sdW1uKz1pLnRhZ05hbWUubGVuZ3RoKzIsZi5mcm9tUG9pbnRzKGkuc3RhcnQsbCl9ZWxzZSBnLnB1c2goaSl9fX19LmNhbGwoaS5wcm90b3R5cGUpfSksZGVmaW5lKCJhY2UvbW9kZS9sdWEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvbHVhX2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hKCIuLi9saWIvb29wIiksZT1hKCIuL3RleHQiKS5Nb2RlLGY9YSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLGc9YSgiLi9sdWFfaGlnaGxpZ2h0X3J1bGVzIikuTHVhSGlnaGxpZ2h0UnVsZXMsaD1mdW5jdGlvbigpe3RoaXMuJHRva2VuaXplcj1uZXcgZigobmV3IGcpLmdldFJ1bGVzKCkpfTtkLmluaGVyaXRzKGgsZSksZnVuY3Rpb24oKXt0aGlzLmdldE5leHRMaW5lSW5kZW50PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLiRnZXRJbmRlbnQoYiksZT10aGlzLiR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyhiLGEpLGY9ZS50b2tlbnMsZz1bImZ1bmN0aW9uIiwidGhlbiIsImRvIiwicmVwZWF0Il07aWYoYT09InN0YXJ0Iil7dmFyIGg9Yi5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7aWYoaClkKz1jO2Vsc2UgZm9yKHZhciBpIGluIGYpe3ZhciBqPWZbaV07aWYoai50eXBlIT0ia2V5d29yZCIpY29udGludWU7dmFyIGs9Zy5pbmRleE9mKGoudmFsdWUpO2lmKGshPS0xKXtkKz1jO2JyZWFrfX19cmV0dXJuIGR9fS5jYWxsKGgucHJvdG90eXBlKSxiLk1vZGU9aH0pLGRlZmluZSgiYWNlL21vZGUvbHVhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSxmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSgiLi4vbGliL29vcCIpLGU9YSgiLi4vbGliL2xhbmciKSxmPWEoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXMsZz1mdW5jdGlvbigpe3ZhciBhPWUuYXJyYXlUb01hcCgiYnJlYWt8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGZvcnxmdW5jdGlvbnxpZnxpbnxsb2NhbHxyZXBlYXR8cmV0dXJufHRoZW58dW50aWx8d2hpbGV8b3J8YW5kfG5vdCIuc3BsaXQoInwiKSksYj1lLmFycmF5VG9NYXAoInRydWV8ZmFsc2V8bmlsfF9HfF9WRVJTSU9OIi5zcGxpdCgifCIpKSxjPWUuYXJyYXlUb01hcCgic3RyaW5nfHhwY2FsbHxwYWNrYWdlfHRvc3RyaW5nfHByaW50fG9zfHVucGFja3xyZXF1aXJlfGdldGZlbnZ8c2V0bWV0YXRhYmxlfG5leHR8YXNzZXJ0fHRvbnVtYmVyfGlvfHJhd2VxdWFsfGNvbGxlY3RnYXJiYWdlfGdldG1ldGF0YWJsZXxtb2R1bGV8cmF3c2V0fG1hdGh8ZGVidWd8cGNhbGx8dGFibGV8bmV3cHJveHl8dHlwZXxjb3JvdXRpbmV8X0d8c2VsZWN0fGdjaW5mb3xwYWlyc3xyYXdnZXR8bG9hZHN0cmluZ3xpcGFpcnN8X1ZFUlNJT058ZG9maWxlfHNldGZlbnZ8bG9hZHxlcnJvcnxsb2FkZmlsZXxzdWJ8dXBwZXJ8bGVufGdmaW5kfHJlcHxmaW5kfG1hdGNofGNoYXJ8ZHVtcHxnbWF0Y2h8cmV2ZXJzZXxieXRlfGZvcm1hdHxnc3VifGxvd2VyfHByZWxvYWR8bG9hZGxpYnxsb2FkZWR8bG9hZGVyc3xjcGF0aHxjb25maWd8cGF0aHxzZWVhbGx8ZXhpdHxzZXRsb2NhbGV8ZGF0ZXxnZXRlbnZ8ZGlmZnRpbWV8cmVtb3ZlfHRpbWV8Y2xvY2t8dG1wbmFtZXxyZW5hbWV8ZXhlY3V0ZXxsaW5lc3x3cml0ZXxjbG9zZXxmbHVzaHxvcGVufG91dHB1dHx0eXBlfHJlYWR8c3RkZXJyfHN0ZGlufGlucHV0fHN0ZG91dHxwb3Blbnx0bXBmaWxlfGxvZ3xtYXh8YWNvc3xodWdlfGxkZXhwfHBpfGNvc3x0YW5ofHBvd3xkZWd8dGFufGNvc2h8c2luaHxyYW5kb218cmFuZG9tc2VlZHxmcmV4cHxjZWlsfGZsb29yfHJhZHxhYnN8c3FydHxtb2RmfGFzaW58bWlufG1vZHxmbW9kfGxvZzEwfGF0YW4yfGV4cHxzaW58YXRhbnxnZXR1cHZhbHVlfGRlYnVnfHNldGhvb2t8Z2V0bWV0YXRhYmxlfGdldGhvb2t8c2V0bWV0YXRhYmxlfHNldGxvY2FsfHRyYWNlYmFja3xzZXRmZW52fGdldGluZm98c2V0dXB2YWx1ZXxnZXRsb2NhbHxnZXRyZWdpc3RyeXxnZXRmZW52fHNldG58aW5zZXJ0fGdldG58Zm9yZWFjaGl8bWF4bnxmb3JlYWNofGNvbmNhdHxzb3J0fHJlbW92ZXxyZXN1bWV8eWllbGR8c3RhdHVzfHdyYXB8Y3JlYXRlfHJ1bm5pbmciLnNwbGl0KCJ8IikpLGQ9ZS5hcnJheVRvTWFwKCJzdHJpbmd8cGFja2FnZXxvc3xpb3xtYXRofGRlYnVnfHRhYmxlfGNvcm91dGluZSIuc3BsaXQoInwiKSksZj1lLmFycmF5VG9NYXAoIl9fYWRkfF9fc3VifF9fbW9kfF9fdW5tfF9fY29uY2F0fF9fbHR8X19pbmRleHxfX2NhbGx8X19nY3xfX21ldGF0YWJsZXxfX211bHxfX2RpdnxfX3Bvd3xfX2xlbnxfX2VxfF9fbGV8X19uZXdpbmRleHxfX3Rvc3RyaW5nfF9fbW9kZXxfX3RvbnVtYmVyIi5zcGxpdCgifCIpKSxnPWUuYXJyYXlUb01hcCgiIi5zcGxpdCgifCIpKSxoPWUuYXJyYXlUb01hcCgic2V0bnxmb3JlYWNofGZvcmVhY2hpfGdjaW5mb3xsb2cxMHxtYXhuIi5zcGxpdCgifCIpKSxpPSIiLGo9Iig/Oig/OlsxLTldXFxkKil8KD86MCkpIixrPSIoPzowW3hYXVtcXGRBLUZhLWZdKykiLGw9Iig/OiIraisifCIraysiKSIsbT0iKD86XFwuXFxkKykiLG49Iig/OlxcZCspIixvPSIoPzooPzoiK24rIj8iK20rIil8KD86IituKyJcXC4pKSIscD0iKD86IitvKyIpIixxPVtdO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXFsuKlxcXVxcXSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9XFxbLipcXF1cXD1cXF0ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXsyfVxcWy4qXFxdXFw9ezJ9XFxdIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17M31cXFsuKlxcXVxcPXszfVxcXSJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezR9XFxbLipcXF1cXD17NH1cXF0ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXs1fVxcPSpcXFsuKlxcXVxcPXs1fVxcPSpcXF0ifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicWNvbW1lbnQifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicWNvbW1lbnQxIn0se3Rva2VuOiJjb21tZW50IixyZWdleDppKyJcXC1cXC1cXFtcXD17Mn1cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFjb21tZW50MiJ9LHt0b2tlbjoiY29tbWVudCIscmVnZXg6aSsiXFwtXFwtXFxbXFw9ezN9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxY29tbWVudDMifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OmkrIlxcLVxcLVxcW1xcPXs0fVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicWNvbW1lbnQ0In0se3Rva2VuOmZ1bmN0aW9uKGEpe3ZhciBiPS9cLVwtXFsoXD0rKVxbLyxjO3JldHVybihjPWIuZXhlYyhhKSkhPW51bGwmJihjPWNbMV0pIT11bmRlZmluZWQmJnEucHVzaChjLmxlbmd0aCksImNvbW1lbnQifSxyZWdleDppKyJcXC1cXC1cXFtcXD17NX1cXD0qXFxbLiokIixtZXJnZTohMCxuZXh0OiJxY29tbWVudDUifSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiJcXC1cXC0uKiQifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFxbLipcXF1cXF0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9XFxbLipcXF1cXD1cXF0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezJ9XFxbLipcXF1cXD17Mn1cXF0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezN9XFxbLipcXF1cXD17M31cXF0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezR9XFxbLipcXF1cXD17NH1cXF0ifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezV9XFw9KlxcWy4qXFxdXFw9ezV9XFw9KlxcXSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFzdHJpbmcifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxc3RyaW5nMSJ9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyJcXFtcXD17Mn1cXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFzdHJpbmcyIn0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrIlxcW1xcPXszfVxcWy4qJCIsbWVyZ2U6ITAsbmV4dDoicXN0cmluZzMifSx7dG9rZW46InN0cmluZyIscmVnZXg6aSsiXFxbXFw9ezR9XFxbLiokIixtZXJnZTohMCxuZXh0OiJxc3RyaW5nNCJ9LHt0b2tlbjpmdW5jdGlvbihhKXt2YXIgYj0vXFsoXD0rKVxbLyxjO3JldHVybihjPWIuZXhlYyhhKSkhPW51bGwmJihjPWNbMV0pIT11bmRlZmluZWQmJnEucHVzaChjLmxlbmd0aCksInN0cmluZyJ9LHJlZ2V4OmkrIlxcW1xcPXs1fVxcPSpcXFsuKiQiLG1lcmdlOiEwLG5leHQ6InFzdHJpbmc1In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OmkrJyIoPzpbXlxcXFxdfFxcXFwuKSo/Iid9LHt0b2tlbjoic3RyaW5nIixyZWdleDppKyInKD86W15cXFxcXXxcXFxcLikqPycifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OnB9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6bCsiXFxiIn0se3Rva2VuOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhc093blByb3BlcnR5KGUpPyJrZXl3b3JkIjpiLmhhc093blByb3BlcnR5KGUpPyJjb25zdGFudC5sYW5ndWFnZSI6Zy5oYXNPd25Qcm9wZXJ0eShlKT8iaW52YWxpZC5pbGxlZ2FsIjpkLmhhc093blByb3BlcnR5KGUpPyJjb25zdGFudC5saWJyYXJ5IjpoLmhhc093blByb3BlcnR5KGUpPyJpbnZhbGlkLmRlcHJlY2F0ZWQiOmMuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOmYuaGFzT3duUHJvcGVydHkoZSk/InN1cHBvcnQuZnVuY3Rpb24iOiJpZGVudGlmaWVyIn0scmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcK3xcXC18XFwqfFxcL3wlfFxcI3xcXF58fnw8fD58PD18PT58PT18fj18PXxcXDp8XFwuXFwuXFwufFxcLlxcLiJ9LHt0b2tlbjoicGFyZW4ubHBhcmVuIixyZWdleDoiW1xcW1xcKFxce10ifSx7dG9rZW46InBhcmVuLnJwYXJlbiIscmVnZXg6IltcXF1cXClcXH1dIn0se3Rva2VuOiJ0ZXh0IixyZWdleDoiXFxzKyJ9XSxxY29tbWVudDpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxY29tbWVudDE6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scWNvbW1lbnQyOlt7dG9rZW46ImNvbW1lbnQiLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezJ9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoiY29tbWVudCIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFjb21tZW50Mzpbe3Rva2VuOiJjb21tZW50IixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXszfVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxY29tbWVudDQ6W3t0b2tlbjoiY29tbWVudCIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17NH1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJjb21tZW50IixtZXJnZTohMCxyZWdleDoiLisifV0scWNvbW1lbnQ1Olt7dG9rZW46ZnVuY3Rpb24oYSl7dmFyIGI9L1xdKFw9KylcXS8sYz10aGlzLnJ1bGVzLnFjb21tZW50NVswXSxkO2MubmV4dD0ic3RhcnQiO2lmKChkPWIuZXhlYyhhKSkhPW51bGwmJihkPWRbMV0pIT11bmRlZmluZWQpe3ZhciBlPWQubGVuZ3RoLGY7KGY9cS5wb3AoKSkhPWUmJihxLnB1c2goZiksYy5uZXh0PSJxY29tbWVudDUiKX1yZXR1cm4iY29tbWVudCJ9LHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezV9XFw9KlxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46ImNvbW1lbnQiLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nMTpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzI6W3t0b2tlbjoic3RyaW5nIixyZWdleDoiKD86W15cXFxcXXxcXFxcLikqP1xcXVxcPXsyfVxcXSIsbmV4dDoic3RhcnQifSx7dG9rZW46InN0cmluZyIsbWVyZ2U6ITAscmVnZXg6Ii4rIn1dLHFzdHJpbmczOlt7dG9rZW46InN0cmluZyIscmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17M31cXF0iLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLG1lcmdlOiEwLHJlZ2V4OiIuKyJ9XSxxc3RyaW5nNDpbe3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIoPzpbXlxcXFxdfFxcXFwuKSo/XFxdXFw9ezR9XFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV0scXN0cmluZzU6W3t0b2tlbjpmdW5jdGlvbihhKXt2YXIgYj0vXF0oXD0rKVxdLyxjPXRoaXMucnVsZXMucXN0cmluZzVbMF0sZDtjLm5leHQ9InN0YXJ0IjtpZigoZD1iLmV4ZWMoYSkpIT1udWxsJiYoZD1kWzFdKSE9dW5kZWZpbmVkKXt2YXIgZT1kLmxlbmd0aCxmOyhmPXEucG9wKCkpIT1lJiYocS5wdXNoKGYpLGMubmV4dD0icXN0cmluZzUiKX1yZXR1cm4ic3RyaW5nIn0scmVnZXg6Iig/OlteXFxcXF18XFxcXC4pKj9cXF1cXD17NX1cXD0qXFxdIixuZXh0OiJzdGFydCJ9LHt0b2tlbjoic3RyaW5nIixtZXJnZTohMCxyZWdleDoiLisifV19fTtkLmluaGVyaXRzKGcsZiksYi5MdWFIaWdobGlnaHRSdWxlcz1nfSksZGVmaW5lKCJhY2UvbW9kZS9sdWFodG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIl0sZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEoIi4uL2xpYi9vb3AiKSxlPWEoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXMsZj1hKCIuL2x1YV9oaWdobGlnaHRfcnVsZXMiKS5MdWFIaWdobGlnaHRSdWxlcyxnPWZ1bmN0aW9uKCl7dGhpcy4kcnVsZXM9KG5ldyBlKS5nZXRSdWxlcygpO2Zvcih2YXIgYSBpbiB0aGlzLiRydWxlcyl0aGlzLiRydWxlc1thXS51bnNoaWZ0KHt0b2tlbjoibHVhdGFnLXBlcmNlbnQiLHJlZ2V4OiI8XFwlIixuZXh0OiJsdWEtc3RhcnQifSx7dG9rZW46Imx1YXRhZy1sdWEiLHJlZ2V4OiI8XFw/bHVhIixuZXh0OiJsdWEtc3RhcnQifSk7dGhpcy5lbWJlZFJ1bGVzKGYsImx1YS0iLFt7dG9rZW46ImtleXdvcmQxIixyZWdleDoiXFwlPiIsbmV4dDoic3RhcnQifSx7dG9rZW46ImtleXdvcmQyIixyZWdleDoiXFw/PiIsbmV4dDoic3RhcnQifV0pfTtkLmluaGVyaXRzKGcsZSksYi5MdWFIdG1sSGlnaGxpZ2h0UnVsZXM9Z30p]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-luapage.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTHVhSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmb3J8ZnVuY3Rpb258aWZ8aW58bG9jYWx8cmVwZWF0fCIrCiAgICAgICAgICJyZXR1cm58dGhlbnx1bnRpbHx3aGlsZXxvcnxhbmR8bm90IgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgidHJ1ZXxmYWxzZXxuaWx8X0d8X1ZFUlNJT04iKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gKAogICAgICAgICJzdHJpbmd8eHBjYWxsfHBhY2thZ2V8dG9zdHJpbmd8cHJpbnR8b3N8dW5wYWNrfHJlcXVpcmV8IisKICAgICAgICAiZ2V0ZmVudnxzZXRtZXRhdGFibGV8bmV4dHxhc3NlcnR8dG9udW1iZXJ8aW98cmF3ZXF1YWx8IisKICAgICAgICAiY29sbGVjdGdhcmJhZ2V8Z2V0bWV0YXRhYmxlfG1vZHVsZXxyYXdzZXR8bWF0aHxkZWJ1Z3wiKwogICAgICAgICJwY2FsbHx0YWJsZXxuZXdwcm94eXx0eXBlfGNvcm91dGluZXxfR3xzZWxlY3R8Z2NpbmZvfCIrCiAgICAgICAgInBhaXJzfHJhd2dldHxsb2Fkc3RyaW5nfGlwYWlyc3xfVkVSU0lPTnxkb2ZpbGV8c2V0ZmVudnwiKwogICAgICAgICJsb2FkfGVycm9yfGxvYWRmaWxlfCIrCgogICAgICAgICJzdWJ8dXBwZXJ8bGVufGdmaW5kfHJlcHxmaW5kfG1hdGNofGNoYXJ8ZHVtcHxnbWF0Y2h8IisKICAgICAgICAicmV2ZXJzZXxieXRlfGZvcm1hdHxnc3VifGxvd2VyfHByZWxvYWR8bG9hZGxpYnxsb2FkZWR8IisKICAgICAgICAibG9hZGVyc3xjcGF0aHxjb25maWd8cGF0aHxzZWVhbGx8ZXhpdHxzZXRsb2NhbGV8ZGF0ZXwiKwogICAgICAgICJnZXRlbnZ8ZGlmZnRpbWV8cmVtb3ZlfHRpbWV8Y2xvY2t8dG1wbmFtZXxyZW5hbWV8ZXhlY3V0ZXwiKwogICAgICAgICJsaW5lc3x3cml0ZXxjbG9zZXxmbHVzaHxvcGVufG91dHB1dHx0eXBlfHJlYWR8c3RkZXJyfCIrCiAgICAgICAgInN0ZGlufGlucHV0fHN0ZG91dHxwb3Blbnx0bXBmaWxlfGxvZ3xtYXh8YWNvc3xodWdlfCIrCiAgICAgICAgImxkZXhwfHBpfGNvc3x0YW5ofHBvd3xkZWd8dGFufGNvc2h8c2luaHxyYW5kb218cmFuZG9tc2VlZHwiKwogICAgICAgICJmcmV4cHxjZWlsfGZsb29yfHJhZHxhYnN8c3FydHxtb2RmfGFzaW58bWlufG1vZHxmbW9kfGxvZzEwfCIrCiAgICAgICAgImF0YW4yfGV4cHxzaW58YXRhbnxnZXR1cHZhbHVlfGRlYnVnfHNldGhvb2t8Z2V0bWV0YXRhYmxlfCIrCiAgICAgICAgImdldGhvb2t8c2V0bWV0YXRhYmxlfHNldGxvY2FsfHRyYWNlYmFja3xzZXRmZW52fGdldGluZm98IisKICAgICAgICAic2V0dXB2YWx1ZXxnZXRsb2NhbHxnZXRyZWdpc3RyeXxnZXRmZW52fHNldG58aW5zZXJ0fGdldG58IisKICAgICAgICAiZm9yZWFjaGl8bWF4bnxmb3JlYWNofGNvbmNhdHxzb3J0fHJlbW92ZXxyZXN1bWV8eWllbGR8IisKICAgICAgICAic3RhdHVzfHdyYXB8Y3JlYXRlfHJ1bm5pbmd8IisKICAgICAgICAiX19hZGR8X19zdWJ8X19tb2R8X191bm18X19jb25jYXR8X19sdHxfX2luZGV4fF9fY2FsbHxfX2djfF9fbWV0YXRhYmxlfCIrCiAgICAgICAgICJfX211bHxfX2RpdnxfX3Bvd3xfX2xlbnxfX2VxfF9fbGV8X19uZXdpbmRleHxfX3Rvc3RyaW5nfF9fbW9kZXxfX3RvbnVtYmVyIgogICAgKTsKCiAgICB2YXIgc3RkTGliYXJpZXMgPSAoInN0cmluZ3xwYWNrYWdlfG9zfGlvfG1hdGh8ZGVidWd8dGFibGV8Y29yb3V0aW5lIik7CgogICAgdmFyIGRlcHJlY2F0ZWRJbjUxNTIgPSAoInNldG58Zm9yZWFjaHxmb3JlYWNoaXxnY2luZm98bG9nMTB8bWF4biIpOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogZnVuY3Rpb25zLAogICAgICAgICJrZXl3b3JkLmRlcHJlY2F0ZWQiOiBkZXByZWNhdGVkSW41MTUyLAogICAgICAgICJjb25zdGFudC5saWJyYXJ5Ijogc3RkTGliYXJpZXMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAic2VsZiIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGRlY2ltYWxJbnRlZ2VyID0gIig/Oig/OlsxLTldXFxkKil8KD86MCkpIjsKICAgIHZhciBoZXhJbnRlZ2VyID0gIig/OjBbeFhdW1xcZEEtRmEtZl0rKSI7CiAgICB2YXIgaW50ZWdlciA9ICIoPzoiICsgZGVjaW1hbEludGVnZXIgKyAifCIgKyBoZXhJbnRlZ2VyICsgIikiOwoKICAgIHZhciBmcmFjdGlvbiA9ICIoPzpcXC5cXGQrKSI7CiAgICB2YXIgaW50UGFydCA9ICIoPzpcXGQrKSI7CiAgICB2YXIgcG9pbnRGbG9hdCA9ICIoPzooPzoiICsgaW50UGFydCArICI/IiArIGZyYWN0aW9uICsgIil8KD86IiArIGludFBhcnQgKyAiXFwuKSkiOwogICAgdmFyIGZsb2F0TnVtYmVyID0gIig/OiIgKyBwb2ludEZsb2F0ICsgIikiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJicmFja2V0ZWRDb21tZW50IiwKICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKXsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0LCB2YWx1ZS5sZW5ndGggLSAyLCBjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAvXC1cLVxbPSpcWy8sCiAgICAgICAgICAgIG5leHQgIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXF09KlxdLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgIH0sCgogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcLVxcLS4qJCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgc3RhdGVOYW1lOiAiYnJhY2tldGVkU3RyaW5nIiwKICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKXsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0LCB2YWx1ZS5sZW5ndGgsIGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZy5zdGFydCI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogL1xbPSpcWy8sCiAgICAgICAgICAgIG5leHQgIDogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZy5lbmQiOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXF09KlxdLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICciKD86W15cXFxcXXxcXFxcLikqPyInCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiAiJyg/OlteXFxcXF18XFxcXC4pKj8nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogZmxvYXROdW1iZXIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4IDogaW50ZWdlciArICJcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcKnxcXC98JXxcXCN8XFxefH58PHw+fDw9fD0+fD09fH49fD18XFw6fFxcLlxcLlxcLnxcXC5cXC4iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxbXFwoXFx7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXF1cXClcXH1dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XFx3KyIKICAgICAgICB9IF0KICAgIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhMdWFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTHVhSGlnaGxpZ2h0UnVsZXMgPSBMdWFIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbHVhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gL1xiKGZ1bmN0aW9ufHRoZW58ZG98cmVwZWF0KVxifHtccyokfChcWz0qXFspLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXGJlbmRcYnxeXHMqfXxcXT0qXF0vOwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaXNTdGFydCA9IHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnRlc3QobGluZSk7CiAgICAgICAgdmFyIGlzRW5kID0gdGhpcy5mb2xkaW5nU3RvcE1hcmtlci50ZXN0KGxpbmUpOwoKICAgICAgICBpZiAoaXNTdGFydCAmJiAhaXNFbmQpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgICAgIGlmIChtYXRjaFsxXSA9PSAidGhlbiIgJiYgL1xiZWxzZWlmXGIvLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIG1hdGNoLmluZGV4ICsgMSkudHlwZSA9PT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHNlc3Npb24uYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KSB8fCAiIjsKICAgICAgICAgICAgICAgIGlmICh0eXBlWzBdID09ICJicmFja2V0ZWRDb21tZW50IiB8fCB0eXBlWzBdID09ICJicmFja2V0ZWRTdHJpbmciKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGZvbGRTdHlsZSAhPSAibWFya2JlZ2luZW5kIiB8fCAhaXNFbmQgfHwgaXNTdGFydCAmJiBpc0VuZCkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaFswXSA9PT0gImVuZCIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIG1hdGNoLmluZGV4ICsgMSkudHlwZSA9PT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgcmV0dXJuICJlbmQiOwogICAgICAgIH0gZWxzZSBpZiAobWF0Y2hbMF1bMF0gPT09ICJdIikgewogICAgICAgICAgICB2YXIgdHlwZSA9IHNlc3Npb24uYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93IC0gMSkgfHwgIiI7CiAgICAgICAgICAgIGlmICh0eXBlWzBdID09ICJicmFja2V0ZWRDb21tZW50IiB8fCB0eXBlWzBdID09ICJicmFja2V0ZWRTdHJpbmciKQogICAgICAgICAgICAgICAgcmV0dXJuICJlbmQiOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXR1cm4gImVuZCI7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5leGVjKGxpbmUpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sdWFCbG9jayhzZXNzaW9uLCByb3csIG1hdGNoLmluZGV4ICsgMSk7CgogICAgICAgICAgICBpZiAobWF0Y2hbMl0pCiAgICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgbWF0Y2guaW5kZXggKyAxKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgInsiLCByb3csIG1hdGNoLmluZGV4KTsKICAgICAgICB9CgogICAgICAgIHZhciBtYXRjaCA9IHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuZXhlYyhsaW5lKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaWYgKG1hdGNoWzBdID09PSAiZW5kIikgewogICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0VG9rZW5BdChyb3csIG1hdGNoLmluZGV4ICsgMSkudHlwZSA9PT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmx1YUJsb2NrKHNlc3Npb24sIHJvdywgbWF0Y2guaW5kZXggKyAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG1hdGNoWzBdWzBdID09PSAiXSIpCiAgICAgICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgbWF0Y2guaW5kZXggKyAxKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgIn0iLCByb3csIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMubHVhQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIGNvbHVtbiwgdG9rZW5SYW5nZSkgewogICAgICAgIHZhciBzdHJlYW0gPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGNvbHVtbik7CiAgICAgICAgdmFyIGluZGVudEtleXdvcmRzID0gewogICAgICAgICAgICAiZnVuY3Rpb24iOiAxLAogICAgICAgICAgICAiZG8iOiAxLAogICAgICAgICAgICAidGhlbiI6IDEsCiAgICAgICAgICAgICJlbHNlaWYiOiAtMSwKICAgICAgICAgICAgImVuZCI6IC0xLAogICAgICAgICAgICAicmVwZWF0IjogMSwKICAgICAgICAgICAgInVudGlsIjogLTEKICAgICAgICB9OwoKICAgICAgICB2YXIgdG9rZW4gPSBzdHJlYW0uZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlICE9ICJrZXl3b3JkIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgdmFsID0gdG9rZW4udmFsdWU7CiAgICAgICAgdmFyIHN0YWNrID0gW3ZhbF07CiAgICAgICAgdmFyIGRpciA9IGluZGVudEtleXdvcmRzW3ZhbF07CgogICAgICAgIGlmICghZGlyKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGRpciA9PT0gLTEgPyBzdHJlYW0uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgOiBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGg7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwoKICAgICAgICBzdHJlYW0uc3RlcCA9IGRpciA9PT0gLTEgPyBzdHJlYW0uc3RlcEJhY2t3YXJkIDogc3RyZWFtLnN0ZXBGb3J3YXJkOwogICAgICAgIHdoaWxlKHRva2VuID0gc3RyZWFtLnN0ZXAoKSkgewogICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gImtleXdvcmQiKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGRpciAqIGluZGVudEtleXdvcmRzW3Rva2VuLnZhbHVlXTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA+IDApIHsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodG9rZW4udmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxldmVsIDw9IDApIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiB0b2tlbi52YWx1ZSAhPSAiZWxzZWlmIikKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMCkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRva2VuLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIGlmICh0b2tlblJhbmdlKQogICAgICAgICAgICByZXR1cm4gc3RyZWFtLmdldEN1cnJlbnRUb2tlblJhbmdlKCk7CgogICAgICAgIHZhciByb3cgPSBzdHJlYW0uZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgaWYgKGRpciA9PT0gLTEpCiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgsIHN0YXJ0Um93LCBzdGFydENvbHVtbik7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgcm93LCBzdHJlYW0uZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkpOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sdWEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9sdWFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9sdWEiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBMdWFIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbHVhX2hpZ2hsaWdodF9ydWxlcyIpLkx1YUhpZ2hsaWdodFJ1bGVzOwp2YXIgTHVhRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvbHVhIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTHVhSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEx1YUZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi0tWyIsIGVuZDogIl0tLSJ9OwogICAgCiAgICB2YXIgaW5kZW50S2V5d29yZHMgPSB7CiAgICAgICAgImZ1bmN0aW9uIjogMSwKICAgICAgICAidGhlbiI6IDEsCiAgICAgICAgImRvIjogMSwKICAgICAgICAiZWxzZSI6IDEsCiAgICAgICAgImVsc2VpZiI6IDEsCiAgICAgICAgInJlcGVhdCI6IDEsCiAgICAgICAgImVuZCI6IC0xLAogICAgICAgICJ1bnRpbCI6IC0xCiAgICB9OwogICAgdmFyIG91dGRlbnRLZXl3b3JkcyA9IFsKICAgICAgICAiZWxzZSIsCiAgICAgICAgImVsc2VpZiIsCiAgICAgICAgImVuZCIsCiAgICAgICAgInVudGlsIgogICAgXTsKCiAgICBmdW5jdGlvbiBnZXROZXRJbmRlbnRMZXZlbCh0b2tlbnMpIHsKICAgICAgICB2YXIgbGV2ZWwgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gImtleXdvcmQiKSB7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgaW4gaW5kZW50S2V5d29yZHMpIHsKICAgICAgICAgICAgICAgICAgICBsZXZlbCArPSBpbmRlbnRLZXl3b3Jkc1t0b2tlbi52YWx1ZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PSAicGFyZW4ubHBhcmVuIikgewogICAgICAgICAgICAgICAgbGV2ZWwgKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuLnR5cGUgPT0gInBhcmVuLnJwYXJlbiIpIHsKICAgICAgICAgICAgICAgIGxldmVsIC09IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobGV2ZWwgPCAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9IGVsc2UgaWYgKGxldmVsID4gMCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICB9CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciBsZXZlbCA9IDA7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIGxldmVsID0gZ2V0TmV0SW5kZW50TGV2ZWwodG9rZW5zKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxldmVsID4gMCkgewogICAgICAgICAgICByZXR1cm4gaW5kZW50ICsgdGFiOwogICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPCAwICYmIGluZGVudC5zdWJzdHIoaW5kZW50Lmxlbmd0aCAtIHRhYi5sZW5ndGgpID09IHRhYikgewogICAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tPdXRkZW50KHN0YXRlLCBsaW5lLCAiXG4iKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGluZGVudC5zdWJzdHIoMCwgaW5kZW50Lmxlbmd0aCAtIHRhYi5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKGlucHV0ICE9ICJcbiIgJiYgaW5wdXQgIT0gIlxyIiAmJiBpbnB1dCAhPSAiXHJcbiIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKGxpbmUubWF0Y2goL15ccypbXClcfVxdXSQvKSkKICAgICAgICAgICAgcmV0dXJuIHRydWU7CgogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZS50cmltKCksIHN0YXRlKS50b2tlbnM7CgogICAgICAgIGlmICghdG9rZW5zIHx8ICF0b2tlbnMubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAodG9rZW5zWzBdLnR5cGUgPT0gImtleXdvcmQiICYmIG91dGRlbnRLZXl3b3Jkcy5pbmRleE9mKHRva2Vuc1swXS52YWx1ZSkgIT0gLTEpOwogICAgfTsKCiAgICB0aGlzLmdldE1hdGNoaW5nID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAocm93ID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICB2YXIgcG9zID0gc2Vzc2lvbi5zZWxlY3Rpb24ubGVhZDsKICAgICAgICAgICAgY29sdW1uID0gcG9zLmNvbHVtbjsKICAgICAgICAgICAgcm93ID0gcG9zLnJvdzsKICAgICAgICB9CgogICAgICAgIHZhciBzdGFydFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHJvdywgY29sdW1uKTsKICAgICAgICBpZiAoc3RhcnRUb2tlbiAmJiBzdGFydFRva2VuLnZhbHVlIGluIGluZGVudEtleXdvcmRzKQogICAgICAgICAgICByZXR1cm4gdGhpcy5mb2xkaW5nUnVsZXMubHVhQmxvY2soc2Vzc2lvbiwgcm93LCBjb2x1bW4sIHRydWUpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IGxpbmUubWF0Y2goL15ccyovKVswXS5sZW5ndGg7CiAgICAgICAgaWYgKCFjb2x1bW4gfHwgIXJvdykgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRSYW5nZSA9IHRoaXMuZ2V0TWF0Y2hpbmcoc2Vzc2lvbiwgcm93LCBjb2x1bW4gKyAxKTsKICAgICAgICBpZiAoIXN0YXJ0UmFuZ2UgfHwgc3RhcnRSYW5nZS5zdGFydC5yb3cgPT0gcm93KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoc2Vzc2lvbi5nZXRMaW5lKHN0YXJ0UmFuZ2Uuc3RhcnQucm93KSk7CiAgICAgICAgaWYgKGluZGVudC5sZW5ndGggIT0gY29sdW1uKSB7CiAgICAgICAgICAgIHNlc3Npb24ucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbiksIGluZGVudCk7CiAgICAgICAgICAgIHNlc3Npb24ub3V0ZGVudFJvd3MobmV3IFJhbmdlKHJvdyArIDEsIDAsIHJvdyArIDEsIDApKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9sdWFfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CiAgICAgICAgCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2x1YSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2x1YXBhZ2VfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2x1YV9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwp2YXIgTHVhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2x1YV9oaWdobGlnaHRfcnVsZXMiKS5MdWFIaWdobGlnaHRSdWxlczsKCnZhciBMdWFQYWdlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwoKICAgIHZhciBzdGFydFJ1bGVzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICI8XFwlXFw9PyIsCiAgICAgICAgICAgIHB1c2g6ICJsdWEtc3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIjxcXD9sdWFcXD0/IiwKICAgICAgICAgICAgcHVzaDogImx1YS1zdGFydCIKICAgICAgICB9CiAgICBdOwoKICAgIHZhciBlbmRSdWxlcyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFwlPiIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIlxcPz4iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0KICAgIF07CgogICAgdGhpcy5lbWJlZFJ1bGVzKEx1YUhpZ2hsaWdodFJ1bGVzLCAibHVhLSIsIGVuZFJ1bGVzLCBbInN0YXJ0Il0pOwoKICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRydWxlcykKICAgICAgICB0aGlzLiRydWxlc1trZXldLnVuc2hpZnQuYXBwbHkodGhpcy4kcnVsZXNba2V5XSwgc3RhcnRSdWxlcyk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEx1YVBhZ2VIaWdobGlnaHRSdWxlcywgSHRtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTHVhUGFnZUhpZ2hsaWdodFJ1bGVzID0gTHVhUGFnZUhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2x1YXBhZ2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9sdWEiLCJhY2UvbW9kZS9sdWFwYWdlX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIEx1YU1vZGUgPSByZXF1aXJlKCIuL2x1YSIpLk1vZGU7CnZhciBMdWFQYWdlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2x1YXBhZ2VfaGlnaGxpZ2h0X3J1bGVzIikuTHVhUGFnZUhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxNb2RlLmNhbGwodGhpcyk7CiAgICAKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBMdWFQYWdlSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJsdWEtIjogTHVhTW9kZQogICAgfSk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBIdG1sTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9sdWFwYWdlIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvbHVhcGFnZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-lucene.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sdWNlbmVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTHVjZW5lSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFxbXC0rJnwhKCl7fVxbXF1eIn4qPzpcXF0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLm5lZ2F0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNoYXJhY3Rlci5pbnRlcnJvIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFw/IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNoYXJhY3Rlci5yZXF1aXJlZCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuYXN0ZXJpc2siLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXCoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLnByb3hpbWl0eScsCiAgICAgICAgICAgICAgICByZWdleDogJ34oPzowXFwuWzAtOV0rfFswLTldKyk/JwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoQU5EfE9SfE5PVHxUTylcXGInCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1xcKFxce1xcW10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1xcKVxcfVxcXV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogL1s+PD1eXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXGRbXGQuLV0qLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleDogLyIoPzpcXCJ8W14iXSkqIi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvKD86XFwufFteXHNcLSsmfCEoKXt9XFtcXV4ifio/OlxcXSkrOi8sCiAgICAgICAgICAgICAgICBuZXh0OiAibWF5YmVSZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ0ZXJtIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHcrLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ccysvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJtYXliZVJlZ2V4IjogW3sKICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXg6IC9ccysvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAuc3RhcnQiLAogICAgICAgICAgICByZWdleDogIi8iLAogICAgICAgICAgICBuZXh0OiAicmVnZXgiCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9XSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleDogIi9bc3huZ2lteV0qIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZCIsCiAgICAgICAgICAgICAgICByZWdleDogL1x7XGQrXGIsP1xkKlx9WysqXXxbKyokXj9dWysqXXxbJF5dWz9dfFw/ezMsfS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXChcP1s6PSFdfFwpfFx7XGQrXGIsP1xkKlx9fFsrKl1cP3xbKCkkXisqPy5dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIjxcZCstXGQrPnxbfiZAXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKEx1Y2VuZUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5MdWNlbmVIaWdobGlnaHRSdWxlcyA9IEx1Y2VuZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbHVjZW5lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvbHVjZW5lX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKJ3VzZSBzdHJpY3QnOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEx1Y2VuZUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9sdWNlbmVfaGlnaGxpZ2h0X3J1bGVzIikuTHVjZW5lSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEx1Y2VuZUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKCm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9sdWNlbmUiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9sdWNlbmUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-makefile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zaF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciByZXNlcnZlZEtleXdvcmRzID0gZXhwb3J0cy5yZXNlcnZlZEtleXdvcmRzID0gKAogICAgICAgICchfHt8fXxjYXNlfGRvfGRvbmV8ZWxpZnxlbHNlfCcrCiAgICAgICAgJ2VzYWN8Zml8Zm9yfGlmfGlufHRoZW58dW50aWx8d2hpbGV8JysKICAgICAgICAnJnw7fGV4cG9ydHxsb2NhbHxyZWFkfHR5cGVzZXR8dW5zZXR8JysKICAgICAgICAnZWxpZnxzZWxlY3R8c2V0fGZ1bmN0aW9ufGRlY2xhcmV8cmVhZG9ubHknCiAgICApOwoKdmFyIGxhbmd1YWdlQ29uc3RydWN0cyA9IGV4cG9ydHMubGFuZ3VhZ2VDb25zdHJ1Y3RzID0gKAogICAgJ1t8XXxhbGlhc3xiZ3xiaW5kfGJyZWFrfGJ1aWx0aW58JysKICAgICAnY2R8Y29tbWFuZHxjb21wZ2VufGNvbXBsZXRlfGNvbnRpbnVlfCcrCiAgICAgJ2RpcnN8ZGlzb3dufGVjaG98ZW5hYmxlfGV2YWx8ZXhlY3wnKwogICAgICdleGl0fGZjfGZnfGdldG9wdHN8aGFzaHxoZWxwfGhpc3Rvcnl8JysKICAgICAnam9ic3xraWxsfGxldHxsb2dvdXR8cG9wZHxwcmludGZ8cHVzaGR8JysKICAgICAncHdkfHJldHVybnxzZXR8c2hpZnR8c2hvcHR8c291cmNlfCcrCiAgICAgJ3N1c3BlbmR8dGVzdHx0aW1lc3x0cmFwfHR5cGV8dWxpbWl0fCcrCiAgICAgJ3VtYXNrfHVuYWxpYXN8d2FpdCcKKTsKCnZhciBTaEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiByZXNlcnZlZEtleXdvcmRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uLmJ1aWx0aW4iOiBsYW5ndWFnZUNvbnN0cnVjdHMsCiAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6ICJkZWJ1Z2dlciIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwoKICAgIHZhciBmcmFjdGlvbiA9ICIoPzpcXC5cXGQrKSI7CiAgICB2YXIgaW50UGFydCA9ICIoPzpcXGQrKSI7CiAgICB2YXIgcG9pbnRGbG9hdCA9ICIoPzooPzoiICsgaW50UGFydCArICI/IiArIGZyYWN0aW9uICsgIil8KD86IiArIGludFBhcnQgKyAiXFwuKSkiOwogICAgdmFyIGV4cG9uZW50RmxvYXQgPSAiKD86KD86IiArIHBvaW50RmxvYXQgKyAifCIgKyAgaW50UGFydCArICIpIiArICIpIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzoiICsgZXhwb25lbnRGbG9hdCArICJ8IiArIHBvaW50RmxvYXQgKyAiKSI7CiAgICB2YXIgZmlsZURlc2NyaXB0b3IgPSAiKD86JiIgKyBpbnRQYXJ0ICsgIikiOwoKICAgIHZhciB2YXJpYWJsZU5hbWUgPSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7CiAgICB2YXIgdmFyaWFibGUgPSAiKD86IiArIHZhcmlhYmxlTmFtZSArICIoPz09KSkiOwoKICAgIHZhciBidWlsdGluVmFyaWFibGUgPSAiKD86XFwkKD86U0hMVkx8XFwkfFxcIXxcXD8pKSI7CgogICAgdmFyIGZ1bmMgPSAiKD86IiArIHZhcmlhYmxlTmFtZSArICJcXHMqXFwoXFwpKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50IiwKICAgICAgICAgICAgcmVnZXggOiAvXFwuLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAiY29tbWVudCJdLAogICAgICAgICAgICByZWdleCA6IC8oXnxccykoIy4qKSQvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbJGAiXFxdfCQpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlIDogInZhcmlhYmxlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9gLyAvLyBUT0RPIGhpZ2hsaWdodCBgCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXCQnIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbYWJlRWZucnR2XFwnIl18eFthLWZBLUZcZF17MSwyfXx1W2EtZkEtRlxkXXs0fShbYS1mQS1GXGRdezR9KT98Yy58XGR7MSwzfSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIjw8PCIsCiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiCiAgICAgICAgfSwgewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJoZXJlZG9jIiwKICAgICAgICAgICAgcmVnZXggOiAiKDw8LT8pKFxccyopKFsnXCJgXT8pKFtcXHdcXC1dKykoWydcImBdPykiLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdmFsdWVbMl0gPT0gJy0nID8gImluZGVudGVkSGVyZWRvYyIgOiAiaGVyZWRvYyI7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gdmFsdWUuc3BsaXQodGhpcy5zcGxpdFJlZ2V4KTsKICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzRdKTsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAge3R5cGU6ImNvbnN0YW50IiwgdmFsdWU6IHRva2Vuc1sxXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InRleHQiLCB2YWx1ZTogdG9rZW5zWzJdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1szXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InN1cHBvcnQuY2xhc3MiLCB2YWx1ZTogdG9rZW5zWzRdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s1XX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICBoZXJlZG9jOiBbewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6ICBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXlx0KyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzdGFja1sxXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIuKiQiLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgIG5leHQgOiBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrWzBdOwogICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAidGV4dCIsICJ0ZXh0IiwgInRleHQiLCAidmFyaWFibGUiXSwKICAgICAgICAgICAgcmVnZXggOiAvKGRlY2xhcmV8bG9jYWx8cmVhZG9ubHkpKFxzKykoPzooLVtmaXhhcl0rKShccyspKT8oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxiKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXggOiBidWlsdGluVmFyaWFibGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiB2YXJpYWJsZQogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6ICJ2YXJpYWJsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiBmdW5jCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiBmaWxlRGVzY3JpcHRvcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vICcgc3RyaW5nCiAgICAgICAgICAgIHN0YXJ0IDogIiciLCBlbmQgOiAiJyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6IGZsb2F0TnVtYmVyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaW50ZWdlcgogICAgICAgICAgICByZWdleCA6IGludGVnZXIgKyAiXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aX11bYS16QS1aMC05X10qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfH58PHw+fDw9fD0+fD18IT18WyUmfGBdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICI7IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcW1xcKFxce10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXClcXH1dIiwKICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgfV0sCiAgICAgICAgdmFyaWFibGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJCkoXHcrKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShcKCkvLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInZhcmlhYmxlIiwgInBhcmVuLmxwYXJlbiIsICJrZXl3b3JkLm9wZXJhdG9yIiwgInZhcmlhYmxlIiwgImtleXdvcmQub3BlcmF0b3IiXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShceykoWyMhXT8pKFx3K3xbKkAjP1wtJCEwX10pKDpbPytcLT1dP3wjIz98JSU/fCwsP1wvfFxeXF4/KT8vLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6IC9cJFsqQCM/XC0kITBfXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShceykvLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH1dCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoU2hIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2hIaWdobGlnaHRSdWxlcyA9IFNoSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYWtlZmlsZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvc2hfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBTaEhpZ2hsaWdodEZpbGUgPSByZXF1aXJlKCIuL3NoX2hpZ2hsaWdodF9ydWxlcyIpOwoKdmFyIE1ha2VmaWxlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiBTaEhpZ2hsaWdodEZpbGUucmVzZXJ2ZWRLZXl3b3JkcywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbi5idWlsdGluIjogU2hIaWdobGlnaHRGaWxlLmxhbmd1YWdlQ29uc3RydWN0cywKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIgogICAgfSwgInN0cmluZyIpOwoKICAgIHRoaXMuJHJ1bGVzID0gCiAgICAgICAgewogICAgInN0YXJ0IjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuaW50ZXJwb2xhdGVkLmJhY2t0aWNrLm1ha2VmaWxlIiwKICAgICAgICAgICAgcmVnZXg6ICJgIiwKICAgICAgICAgICAgbmV4dDogInNoZWxsLXN0YXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5tYWtlZmlsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvIyg/PS4pLywKICAgICAgICAgICAgbmV4dDogImNvbW1lbnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbICJrZXl3b3JkLmNvbnRyb2wubWFrZWZpbGUiXSwKICAgICAgICAgICAgcmVnZXg6ICJeKD86XFxzKlxcYikoXFwtPz9pbmNsdWRlfGlmZXF8aWZuZXF8aWZkZWZ8aWZuZGVmfGVsc2V8ZW5kaWZ8dnBhdGh8ZXhwb3J0fHVuZXhwb3J0fGRlZmluZXxlbmRlZnxvdmVycmlkZSkoPzpcXGIpIgogICAgICAgIH0sCiAgICAgICAgey8vIF4oW15cdCBdKyhcc1teXHQgXSspKjooPyFcPSkpXHMqLioKICAgICAgICAgICAgdG9rZW46IFsiZW50aXR5Lm5hbWUuZnVuY3Rpb24ubWFrZWZpbGUiLCAidGV4dCJdLAogICAgICAgICAgICByZWdleDogIl4oW15cXHQgXSsoPzpcXHNbXlxcdCBdKykqOikoXFxzKi4qKSIKICAgICAgICB9CiAgICBdLAogICAgImNvbW1lbnQiOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubWFrZWZpbGUiLAogICAgICAgICAgICByZWdleCA6IC8uK1xcLwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubWFrZWZpbGUiLAogICAgICAgICAgICByZWdleCA6ICIuKyIsCiAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgIH0KICAgIF0sCiAgICAic2hlbGwtc3RhcnQiOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXHcrIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmludGVycG9sYXRlZC5iYWNrdGljay5tYWtlZmlsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogImAiLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9CiAgICBdCn07Cgp9OwoKb29wLmluaGVyaXRzKE1ha2VmaWxlSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLk1ha2VmaWxlSGlnaGxpZ2h0UnVsZXMgPSBNYWtlZmlsZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWFrZWZpbGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9tYWtlZmlsZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIE1ha2VmaWxlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL21ha2VmaWxlX2hpZ2hsaWdodF9ydWxlcyIpLk1ha2VmaWxlSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTWFrZWZpbGVIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7ICAgIAogICAgdGhpcy4kaW5kZW50V2l0aFRhYnMgPSB0cnVlOwogICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9tYWtlZmlsZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL21ha2VmaWxlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihub3JtYWxpemUpIHsKICAgIHZhciB0YWdSZWdleCA9ICJbXzphLXpBLVpceGMwLVx1ZmZmZl1bLV86LmEtekEtWjAtOVx4YzAtXHVmZmZmXSoiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0IDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIjxcXCFcXFtDREFUQVxcWyIsIG5leHQgOiAiY2RhdGEifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLmluc3RydWN0aW9uLnhtbCIsICJrZXl3b3JkLmluc3RydWN0aW9uLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXD8pKCIgKyB0YWdSZWdleCArICIpIiwgbmV4dCA6ICJwcm9jZXNzaW5nX2luc3RydWN0aW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5zdGFydC54bWwiLCByZWdleCA6ICI8XFwhLS0iLCBuZXh0IDogImNvbW1lbnQifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInhtbC1wZS5kb2N0eXBlLnhtbCIsICJ4bWwtcGUuZG9jdHlwZS54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKShET0NUWVBFKSg/PVtcXHNdKSIsIG5leHQgOiAiZG9jdHlwZSIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJ0YWcifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQuZW5kLXRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPC8ifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQudGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8In0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInRleHQueG1sIn0KICAgICAgICBdLAoKICAgICAgICBwcm9jZXNzaW5nX2luc3RydWN0aW9uIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLmRlY2wtYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5kZWNsLWF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ3aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLnhtbC1kZWNsLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcPz4iLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH1dLAoKICAgICAgICBkb2N0eXBlIDogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJ3aGl0ZXNwYWNlIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLmRvY3R5cGUueG1sIiwgcmVnZXggOiAiPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS54bWwiLCByZWdleCA6ICJbLV9hLXpBLVowLTk6XSsifSwKICAgICAgICAgICAge3Rva2VuIDogInB1bmN0dWF0aW9uLmludC1zdWJzZXQiLCByZWdleCA6ICJcXFsiLCBwdXNoIDogImludF9zdWJzZXQifQogICAgICAgIF0sCgogICAgICAgIGludF9zdWJzZXQgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmludC1zdWJzZXQueG1sIiwKICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLCAia2V5d29yZC5tYXJrdXAtZGVjbC54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKCIgKyB0YWdSZWdleCArICIpIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifV0KICAgICAgICB9XSwKCiAgICAgICAgY2RhdGEgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiXFxdXFxdPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiXFxzKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICIoPzpbXlxcXV18XFxdKD8hXFxdPikpKyJ9CiAgICAgICAgXSwKCiAgICAgICAgY29tbWVudCA6IFsKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuZW5kLnhtbCIsIHJlZ2V4IDogIi0tPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cl9yZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgICAgICB9XSwKCiAgICAgICAgdGFnIDogW3sKICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPzooPCl8KDwvKSkoKD86IiArIHRhZ1JlZ2V4ICsgIjopPyIgKyB0YWdSZWdleCArICIpIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogInN0YXJ0In0KICAgICAgICAgICAgXQogICAgICAgIH1dLAoKICAgICAgICB0YWdfd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICB3aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC53aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgc3RyaW5nOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dLAoKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidGFnX3doaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyaWJ1dGVfdmFsdWU6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyX3JlZmVyZW5jZSJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyX3JlZmVyZW5jZSJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XQogICAgfTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gWG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmVtYmVkVGFnUnVsZXMgPSBmdW5jdGlvbihIaWdobGlnaHRSdWxlcywgcHJlZml4LCB0YWcpewogICAgICAgIHRoaXMuJHJ1bGVzLnRhZy51bnNoaWZ0KHsKICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwpKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogcHJlZml4ICsgInN0YXJ0In0KICAgICAgICAgICAgXQogICAgICAgIH0pOwoKICAgICAgICB0aGlzLiRydWxlc1t0YWcgKyAiLWVuZCJdID0gWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgIG5leHQ6ICJzdGFydCIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgIH19CiAgICAgICAgXTsKCiAgICAgICAgdGhpcy5lbWJlZFJ1bGVzKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIFt7CiAgICAgICAgICAgIHRva2VuOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8LykoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiB0YWcgKyAiLWVuZCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNkYXRhLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIjxcXCFcXFtDREFUQVxcWyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNkYXRhLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXVxcXT4iCiAgICAgICAgfV0pOwogICAgfTsKCn0pLmNhbGwoVGV4dEhpZ2hsaWdodFJ1bGVzLnByb3RvdHlwZSk7Cgpvb3AuaW5oZXJpdHMoWG1sSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlhtbEhpZ2hsaWdodFJ1bGVzID0gWG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvbGliL2xhbmciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuICYmIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKdmFyIFhtbEJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICciJyB8fCB0ZXh0ID09ICInIikgewogICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OwogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UoZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHNlbGVjdGVkICsgcXVvdGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gcXVvdGUgJiYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikgfHwgaXModG9rZW4sICJzdHJpbmciKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwoKICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHdoaWxlIChpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJ3aGl0ZXNwYWNlIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJpZ2h0U3BhY2UgPSAhcmlnaHRDaGFyIHx8IHJpZ2h0Q2hhci5tYXRjaCgvXHMvKTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPicpIHx8IChpcyh0b2tlbiwgImRlY2wtYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICc+JykgewogICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhKGlzKHRva2VuLCAidGFnLW5hbWUiKSB8fCBpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJyZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5FbmRDb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCB0b2tlbkVuZENvbHVtbikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IHRva2VuRW5kQ29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBpcyhuZXh0VG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoL15ccyo+Ly50ZXN0KHNlc3Npb24uZ2V0TGluZShwb3NpdGlvbi5yb3cpLnNsaWNlKHBvc2l0aW9uLmNvbHVtbikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB3aGlsZSAoIWlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciB0b2tlblJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICB2YXIgdG9rZW5Db2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICAgICAgaWYgKGlzKGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBpZiAodG9rZW5Sb3cgPT0gcG9zaXRpb24ucm93KQogICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuQ29sdW1uKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eShlbGVtZW50LnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgIHRleHQ6ICI+IiArICI8LyIgKyBlbGVtZW50ICsgIj4iLAogICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJhdXRvaW5kZW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAiXG4iKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1jbG9zZSIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09ICIvPiIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdmFyIHJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5pbmRleE9mKCJlbmQtdGFnIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cyAmJiAhdGhpcy52b2lkRWxlbWVudHNbdGFnXSkgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbisxKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSBuZXh0SW5kZW50ICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICI8LyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQgKyAiXG4iICsgbmV4dEluZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cgpvb3AuaW5oZXJpdHMoWG1sQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwoKZXhwb3J0cy5YbWxCZWhhdmlvdXIgPSBYbWxCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKHZvaWRFbGVtZW50cywgb3B0aW9uYWxFbmRUYWdzKSB7CiAgICBCYXNlRm9sZE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gdm9pZEVsZW1lbnRzIHx8IHt9OwogICAgdGhpcy5vcHRpb25hbEVuZFRhZ3MgPSBvb3AubWl4aW4oe30sIHRoaXMudm9pZEVsZW1lbnRzKTsKICAgIGlmIChvcHRpb25hbEVuZFRhZ3MpCiAgICAgICAgb29wLm1peGluKHRoaXMub3B0aW9uYWxFbmRUYWdzLCBvcHRpb25hbEVuZFRhZ3MpOwogICAgCn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCnZhciBUYWcgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMudGFnTmFtZSA9ICIiOwogICAgdGhpcy5jbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnNlbGZDbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnN0YXJ0ID0ge3JvdzogMCwgY29sdW1uOiAwfTsKICAgIHRoaXMuZW5kID0ge3JvdzogMCwgY29sdW1uOiAwfTsKfTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdyk7CgogICAgICAgIGlmICh0YWcuY2xvc2luZyB8fCAoIXRhZy50YWdOYW1lICYmIHRhZy5zZWxmQ2xvc2luZykpCiAgICAgICAgICAgIHJldHVybiBmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIgPyAiZW5kIiA6ICIiOwoKICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRhZy5zZWxmQ2xvc2luZyB8fCB0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eSh0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICBpZiAodGhpcy5fZmluZEVuZFRhZ0luTGluZShzZXNzaW9uLCByb3csIHRhZy50YWdOYW1lLCB0YWcuZW5kLmNvbHVtbikpCiAgICAgICAgICAgIHJldHVybiAiIjsKCiAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICB9OwogICAgCiAgICB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgaWYgKC9jb21tZW50Ly50ZXN0KHNlc3Npb24uZ2V0U3RhdGUocm93KSkgJiYgLzwhLS8udGVzdChzZXNzaW9uLmdldExpbmUocm93KSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSB0YWcuc3RhcnQuY29sdW1uICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbKytpXTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChpKys7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gJy8+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLl9maW5kRW5kVGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCB0YWdOYW1lLCBzdGFydENvbHVtbikgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciBjb2x1bW4gPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0Q29sdW1uKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpICsgMV07CiAgICAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUgPT0gdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5fcmVhZFRhZ0ZvcndhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpKTsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3BvcCA9IGZ1bmN0aW9uKHN0YWNrLCB0YWcpIHsKICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdG9wID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdOwogICAgICAgICAgICBpZiAoIXRhZyB8fCB0b3AudGFnTmFtZSA9PSB0YWcudGFnTmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnBvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9uYWxFbmRUYWdzLmhhc093blByb3BlcnR5KHRvcC50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKCFmaXJzdFRhZykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50Rm9sZFdpZGdldChzZXNzaW9uLCByb3cpCiAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZpcnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CiAgICAgICAgdmFyIHN0YWNrID0gW107CiAgICAgICAgdmFyIHRhZzsKICAgICAgICAKICAgICAgICBpZiAoIWlzQmFja3dhcmQpIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgc3RhcnQgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogZmlyc3RUYWcuc3RhcnQuY29sdW1uICsgZmlyc3RUYWcudGFnTmFtZS5sZW5ndGggKyAyCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChmaXJzdFRhZy5zdGFydC5yb3cgPT0gZmlyc3RUYWcuZW5kLnJvdykKICAgICAgICAgICAgICAgIHN0YXJ0LmNvbHVtbiA9IGZpcnN0VGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnRm9yd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGFnLmNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgdGFnLnN0YXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5lbmQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4KICAgICAgICAgICAgfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnQmFja3dhcmQoaXRlcmF0b3IpKSB7CiAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIHRhZy5lbmQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnN0YXJ0LnJvdyA9PSB0YWcuZW5kLnJvdyAmJiB0YWcuc3RhcnQuY29sdW1uIDwgdGFnLmVuZC5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gdGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgZW5kKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRhZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZTsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwogICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgWG1sQmVoYXZpb3VyKCk7CiAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IFhtbEZvbGRNb2RlKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gbGFuZy5hcnJheVRvTWFwKFtdKTsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUveG1sX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImVycm9yIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUveG1sIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBzdXBwb3J0VHlwZSA9IGV4cG9ydHMuc3VwcG9ydFR5cGUgPSAiYWxpZ24tY29udGVudHxhbGlnbi1pdGVtc3xhbGlnbi1zZWxmfGFsbHxhbmltYXRpb258YW5pbWF0aW9uLWRlbGF5fGFuaW1hdGlvbi1kaXJlY3Rpb258YW5pbWF0aW9uLWR1cmF0aW9ufGFuaW1hdGlvbi1maWxsLW1vZGV8YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudHxhbmltYXRpb24tbmFtZXxhbmltYXRpb24tcGxheS1zdGF0ZXxhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9ufGJhY2tmYWNlLXZpc2liaWxpdHl8YmFja2dyb3VuZHxiYWNrZ3JvdW5kLWF0dGFjaG1lbnR8YmFja2dyb3VuZC1ibGVuZC1tb2RlfGJhY2tncm91bmQtY2xpcHxiYWNrZ3JvdW5kLWNvbG9yfGJhY2tncm91bmQtaW1hZ2V8YmFja2dyb3VuZC1vcmlnaW58YmFja2dyb3VuZC1wb3NpdGlvbnxiYWNrZ3JvdW5kLXJlcGVhdHxiYWNrZ3JvdW5kLXNpemV8Ym9yZGVyfGJvcmRlci1ib3R0b218Ym9yZGVyLWJvdHRvbS1jb2xvcnxib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzfGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzfGJvcmRlci1ib3R0b20tc3R5bGV8Ym9yZGVyLWJvdHRvbS13aWR0aHxib3JkZXItY29sbGFwc2V8Ym9yZGVyLWNvbG9yfGJvcmRlci1pbWFnZXxib3JkZXItaW1hZ2Utb3V0c2V0fGJvcmRlci1pbWFnZS1yZXBlYXR8Ym9yZGVyLWltYWdlLXNsaWNlfGJvcmRlci1pbWFnZS1zb3VyY2V8Ym9yZGVyLWltYWdlLXdpZHRofGJvcmRlci1sZWZ0fGJvcmRlci1sZWZ0LWNvbG9yfGJvcmRlci1sZWZ0LXN0eWxlfGJvcmRlci1sZWZ0LXdpZHRofGJvcmRlci1yYWRpdXN8Ym9yZGVyLXJpZ2h0fGJvcmRlci1yaWdodC1jb2xvcnxib3JkZXItcmlnaHQtc3R5bGV8Ym9yZGVyLXJpZ2h0LXdpZHRofGJvcmRlci1zcGFjaW5nfGJvcmRlci1zdHlsZXxib3JkZXItdG9wfGJvcmRlci10b3AtY29sb3J8Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1c3xib3JkZXItdG9wLXJpZ2h0LXJhZGl1c3xib3JkZXItdG9wLXN0eWxlfGJvcmRlci10b3Atd2lkdGh8Ym9yZGVyLXdpZHRofGJvdHRvbXxib3gtc2hhZG93fGJveC1zaXppbmd8Y2FwdGlvbi1zaWRlfGNsZWFyfGNsaXB8Y29sb3J8Y29sdW1uLWNvdW50fGNvbHVtbi1maWxsfGNvbHVtbi1nYXB8Y29sdW1uLXJ1bGV8Y29sdW1uLXJ1bGUtY29sb3J8Y29sdW1uLXJ1bGUtc3R5bGV8Y29sdW1uLXJ1bGUtd2lkdGh8Y29sdW1uLXNwYW58Y29sdW1uLXdpZHRofGNvbHVtbnN8Y29udGVudHxjb3VudGVyLWluY3JlbWVudHxjb3VudGVyLXJlc2V0fGN1cnNvcnxkaXJlY3Rpb258ZGlzcGxheXxlbXB0eS1jZWxsc3xmaWx0ZXJ8ZmxleHxmbGV4LWJhc2lzfGZsZXgtZGlyZWN0aW9ufGZsZXgtZmxvd3xmbGV4LWdyb3d8ZmxleC1zaHJpbmt8ZmxleC13cmFwfGZsb2F0fGZvbnR8Zm9udC1mYW1pbHl8Zm9udC1zaXplfGZvbnQtc2l6ZS1hZGp1c3R8Zm9udC1zdHJldGNofGZvbnQtc3R5bGV8Zm9udC12YXJpYW50fGZvbnQtd2VpZ2h0fGhhbmdpbmctcHVuY3R1YXRpb258aGVpZ2h0fGp1c3RpZnktY29udGVudHxsZWZ0fGxldHRlci1zcGFjaW5nfGxpbmUtaGVpZ2h0fGxpc3Qtc3R5bGV8bGlzdC1zdHlsZS1pbWFnZXxsaXN0LXN0eWxlLXBvc2l0aW9ufGxpc3Qtc3R5bGUtdHlwZXxtYXJnaW58bWFyZ2luLWJvdHRvbXxtYXJnaW4tbGVmdHxtYXJnaW4tcmlnaHR8bWFyZ2luLXRvcHxtYXgtaGVpZ2h0fG1heC13aWR0aHxtYXgtem9vbXxtaW4taGVpZ2h0fG1pbi13aWR0aHxtaW4tem9vbXxuYXYtZG93bnxuYXYtaW5kZXh8bmF2LWxlZnR8bmF2LXJpZ2h0fG5hdi11cHxvcGFjaXR5fG9yZGVyfG91dGxpbmV8b3V0bGluZS1jb2xvcnxvdXRsaW5lLW9mZnNldHxvdXRsaW5lLXN0eWxlfG91dGxpbmUtd2lkdGh8b3ZlcmZsb3d8b3ZlcmZsb3cteHxvdmVyZmxvdy15fHBhZGRpbmd8cGFkZGluZy1ib3R0b218cGFkZGluZy1sZWZ0fHBhZGRpbmctcmlnaHR8cGFkZGluZy10b3B8cGFnZS1icmVhay1hZnRlcnxwYWdlLWJyZWFrLWJlZm9yZXxwYWdlLWJyZWFrLWluc2lkZXxwZXJzcGVjdGl2ZXxwZXJzcGVjdGl2ZS1vcmlnaW58cG9zaXRpb258cXVvdGVzfHJlc2l6ZXxyaWdodHx0YWItc2l6ZXx0YWJsZS1sYXlvdXR8dGV4dC1hbGlnbnx0ZXh0LWFsaWduLWxhc3R8dGV4dC1kZWNvcmF0aW9ufHRleHQtZGVjb3JhdGlvbi1jb2xvcnx0ZXh0LWRlY29yYXRpb24tbGluZXx0ZXh0LWRlY29yYXRpb24tc3R5bGV8dGV4dC1pbmRlbnR8dGV4dC1qdXN0aWZ5fHRleHQtb3ZlcmZsb3d8dGV4dC1zaGFkb3d8dGV4dC10cmFuc2Zvcm18dG9wfHRyYW5zZm9ybXx0cmFuc2Zvcm0tb3JpZ2lufHRyYW5zZm9ybS1zdHlsZXx0cmFuc2l0aW9ufHRyYW5zaXRpb24tZGVsYXl8dHJhbnNpdGlvbi1kdXJhdGlvbnx0cmFuc2l0aW9uLXByb3BlcnR5fHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9ufHVuaWNvZGUtYmlkaXx1c2VyLXNlbGVjdHx1c2VyLXpvb218dmVydGljYWwtYWxpZ258dmlzaWJpbGl0eXx3aGl0ZS1zcGFjZXx3aWR0aHx3b3JkLWJyZWFrfHdvcmQtc3BhY2luZ3x3b3JkLXdyYXB8ei1pbmRleCI7CnZhciBzdXBwb3J0RnVuY3Rpb24gPSBleHBvcnRzLnN1cHBvcnRGdW5jdGlvbiA9ICJyZ2J8cmdiYXx1cmx8YXR0cnxjb3VudGVyfGNvdW50ZXJzIjsKdmFyIHN1cHBvcnRDb25zdGFudCA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50ID0gImFic29sdXRlfGFmdGVyLWVkZ2V8YWZ0ZXJ8YWxsLXNjcm9sbHxhbGx8YWxwaGFiZXRpY3xhbHdheXN8YW50aWFsaWFzZWR8YXJtZW5pYW58YXV0b3xhdm9pZC1jb2x1bW58YXZvaWQtcGFnZXxhdm9pZHxiYWxhbmNlfGJhc2VsaW5lfGJlZm9yZS1lZGdlfGJlZm9yZXxiZWxvd3xiaWRpLW92ZXJyaWRlfGJsb2NrLWxpbmUtaGVpZ2h0fGJsb2NrfGJvbGR8Ym9sZGVyfGJvcmRlci1ib3h8Ym90aHxib3R0b218Ym94fGJyZWFrLWFsbHxicmVhay13b3JkfGNhcGl0YWxpemV8Y2Fwcy1oZWlnaHR8Y2FwdGlvbnxjZW50ZXJ8Y2VudHJhbHxjaGFyfGNpcmNsZXxjamstaWRlb2dyYXBoaWN8Y2xvbmV8Y2xvc2UtcXVvdGV8Y29sLXJlc2l6ZXxjb2xsYXBzZXxjb2x1bW58Y29uc2lkZXItc2hpZnRzfGNvbnRhaW58Y29udGVudC1ib3h8Y292ZXJ8Y3Jvc3NoYWlyfGN1YmljLWJlemllcnxkYXNoZWR8ZGVjaW1hbC1sZWFkaW5nLXplcm98ZGVjaW1hbHxkZWZhdWx0fGRpc2FibGVkfGRpc2N8ZGlzcmVnYXJkLXNoaWZ0c3xkaXN0cmlidXRlLWFsbC1saW5lc3xkaXN0cmlidXRlLWxldHRlcnxkaXN0cmlidXRlLXNwYWNlfGRpc3RyaWJ1dGV8ZG90dGVkfGRvdWJsZXxlLXJlc2l6ZXxlYXNlLWlufGVhc2UtaW4tb3V0fGVhc2Utb3V0fGVhc2V8ZWxsaXBzaXN8ZW5kfGV4Y2x1ZGUtcnVieXxmaWxsfGZpeGVkfGdlb3JnaWFufGdseXBoc3xncmlkLWhlaWdodHxncm9vdmV8aGFuZHxoYW5naW5nfGhlYnJld3xoZWxwfGhpZGRlbnxoaXJhZ2FuYS1pcm9oYXxoaXJhZ2FuYXxob3Jpem9udGFsfGljb258aWRlb2dyYXBoLWFscGhhfGlkZW9ncmFwaC1udW1lcmljfGlkZW9ncmFwaC1wYXJlbnRoZXNpc3xpZGVvZ3JhcGgtc3BhY2V8aWRlb2dyYXBoaWN8aW5hY3RpdmV8aW5jbHVkZS1ydWJ5fGluaGVyaXR8aW5pdGlhbHxpbmxpbmUtYmxvY2t8aW5saW5lLWJveHxpbmxpbmUtbGluZS1oZWlnaHR8aW5saW5lLXRhYmxlfGlubGluZXxpbnNldHxpbnNpZGV8aW50ZXItaWRlb2dyYXBofGludGVyLXdvcmR8aW52ZXJ0fGl0YWxpY3xqdXN0aWZ5fGthdGFrYW5hLWlyb2hhfGthdGFrYW5hfGtlZXAtYWxsfGxhc3R8bGVmdHxsaWdodGVyfGxpbmUtZWRnZXxsaW5lLXRocm91Z2h8bGluZXxsaW5lYXJ8bGlzdC1pdGVtfGxvY2FsfGxvb3NlfGxvd2VyLWFscGhhfGxvd2VyLWdyZWVrfGxvd2VyLWxhdGlufGxvd2VyLXJvbWFufGxvd2VyY2FzZXxsci10YnxsdHJ8bWF0aGVtYXRpY2FsfG1heC1oZWlnaHR8bWF4LXNpemV8bWVkaXVtfG1lbnV8bWVzc2FnZS1ib3h8bWlkZGxlfG1vdmV8bi1yZXNpemV8bmUtcmVzaXplfG5ld3NwYXBlcnxuby1jaGFuZ2V8bm8tY2xvc2UtcXVvdGV8bm8tZHJvcHxuby1vcGVuLXF1b3RlfG5vLXJlcGVhdHxub25lfG5vcm1hbHxub3QtYWxsb3dlZHxub3dyYXB8bnctcmVzaXplfG9ibGlxdWV8b3Blbi1xdW90ZXxvdXRzZXR8b3V0c2lkZXxvdmVybGluZXxwYWRkaW5nLWJveHxwYWdlfHBvaW50ZXJ8cHJlLWxpbmV8cHJlLXdyYXB8cHJlfHByZXNlcnZlLTNkfHByb2dyZXNzfHJlbGF0aXZlfHJlcGVhdC14fHJlcGVhdC15fHJlcGVhdHxyZXBsYWNlZHxyZXNldC1zaXplfHJpZGdlfHJpZ2h0fHJvdW5kfHJvdy1yZXNpemV8cnRsfHMtcmVzaXplfHNjcm9sbHxzZS1yZXNpemV8c2VwYXJhdGV8c2xpY2V8c21hbGwtY2Fwc3xzbWFsbC1jYXB0aW9ufHNvbGlkfHNwYWNlfHNxdWFyZXxzdGFydHxzdGF0aWN8c3RhdHVzLWJhcnxzdGVwLWVuZHxzdGVwLXN0YXJ0fHN0ZXBzfHN0cmV0Y2h8c3RyaWN0fHN1YnxzdXBlcnxzdy1yZXNpemV8dGFibGUtY2FwdGlvbnx0YWJsZS1jZWxsfHRhYmxlLWNvbHVtbi1ncm91cHx0YWJsZS1jb2x1bW58dGFibGUtZm9vdGVyLWdyb3VwfHRhYmxlLWhlYWRlci1ncm91cHx0YWJsZS1yb3ctZ3JvdXB8dGFibGUtcm93fHRhYmxlfHRiLXJsfHRleHQtYWZ0ZXItZWRnZXx0ZXh0LWJlZm9yZS1lZGdlfHRleHQtYm90dG9tfHRleHQtc2l6ZXx0ZXh0LXRvcHx0ZXh0fHRoaWNrfHRoaW58dHJhbnNwYXJlbnR8dW5kZXJsaW5lfHVwcGVyLWFscGhhfHVwcGVyLWxhdGlufHVwcGVyLXJvbWFufHVwcGVyY2FzZXx1c2Utc2NyaXB0fHZlcnRpY2FsLWlkZW9ncmFwaGljfHZlcnRpY2FsLXRleHR8dmlzaWJsZXx3LXJlc2l6ZXx3YWl0fHdoaXRlc3BhY2V8ei1pbmRleHx6ZXJvfHpvb20iOwp2YXIgc3VwcG9ydENvbnN0YW50Q29sb3IgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudENvbG9yID0gImFsaWNlYmx1ZXxhbnRpcXVld2hpdGV8YXF1YXxhcXVhbWFyaW5lfGF6dXJlfGJlaWdlfGJpc3F1ZXxibGFja3xibGFuY2hlZGFsbW9uZHxibHVlfGJsdWV2aW9sZXR8YnJvd258YnVybHl3b29kfGNhZGV0Ymx1ZXxjaGFydHJldXNlfGNob2NvbGF0ZXxjb3JhbHxjb3JuZmxvd2VyYmx1ZXxjb3Juc2lsa3xjcmltc29ufGN5YW58ZGFya2JsdWV8ZGFya2N5YW58ZGFya2dvbGRlbnJvZHxkYXJrZ3JheXxkYXJrZ3JlZW58ZGFya2dyZXl8ZGFya2toYWtpfGRhcmttYWdlbnRhfGRhcmtvbGl2ZWdyZWVufGRhcmtvcmFuZ2V8ZGFya29yY2hpZHxkYXJrcmVkfGRhcmtzYWxtb258ZGFya3NlYWdyZWVufGRhcmtzbGF0ZWJsdWV8ZGFya3NsYXRlZ3JheXxkYXJrc2xhdGVncmV5fGRhcmt0dXJxdW9pc2V8ZGFya3Zpb2xldHxkZWVwcGlua3xkZWVwc2t5Ymx1ZXxkaW1ncmF5fGRpbWdyZXl8ZG9kZ2VyYmx1ZXxmaXJlYnJpY2t8ZmxvcmFsd2hpdGV8Zm9yZXN0Z3JlZW58ZnVjaHNpYXxnYWluc2Jvcm98Z2hvc3R3aGl0ZXxnb2xkfGdvbGRlbnJvZHxncmF5fGdyZWVufGdyZWVueWVsbG93fGdyZXl8aG9uZXlkZXd8aG90cGlua3xpbmRpYW5yZWR8aW5kaWdvfGl2b3J5fGtoYWtpfGxhdmVuZGVyfGxhdmVuZGVyYmx1c2h8bGF3bmdyZWVufGxlbW9uY2hpZmZvbnxsaWdodGJsdWV8bGlnaHRjb3JhbHxsaWdodGN5YW58bGlnaHRnb2xkZW5yb2R5ZWxsb3d8bGlnaHRncmF5fGxpZ2h0Z3JlZW58bGlnaHRncmV5fGxpZ2h0cGlua3xsaWdodHNhbG1vbnxsaWdodHNlYWdyZWVufGxpZ2h0c2t5Ymx1ZXxsaWdodHNsYXRlZ3JheXxsaWdodHNsYXRlZ3JleXxsaWdodHN0ZWVsYmx1ZXxsaWdodHllbGxvd3xsaW1lfGxpbWVncmVlbnxsaW5lbnxtYWdlbnRhfG1hcm9vbnxtZWRpdW1hcXVhbWFyaW5lfG1lZGl1bWJsdWV8bWVkaXVtb3JjaGlkfG1lZGl1bXB1cnBsZXxtZWRpdW1zZWFncmVlbnxtZWRpdW1zbGF0ZWJsdWV8bWVkaXVtc3ByaW5nZ3JlZW58bWVkaXVtdHVycXVvaXNlfG1lZGl1bXZpb2xldHJlZHxtaWRuaWdodGJsdWV8bWludGNyZWFtfG1pc3R5cm9zZXxtb2NjYXNpbnxuYXZham93aGl0ZXxuYXZ5fG9sZGxhY2V8b2xpdmV8b2xpdmVkcmFifG9yYW5nZXxvcmFuZ2VyZWR8b3JjaGlkfHBhbGVnb2xkZW5yb2R8cGFsZWdyZWVufHBhbGV0dXJxdW9pc2V8cGFsZXZpb2xldHJlZHxwYXBheWF3aGlwfHBlYWNocHVmZnxwZXJ1fHBpbmt8cGx1bXxwb3dkZXJibHVlfHB1cnBsZXxyZWJlY2NhcHVycGxlfHJlZHxyb3N5YnJvd258cm95YWxibHVlfHNhZGRsZWJyb3dufHNhbG1vbnxzYW5keWJyb3dufHNlYWdyZWVufHNlYXNoZWxsfHNpZW5uYXxzaWx2ZXJ8c2t5Ymx1ZXxzbGF0ZWJsdWV8c2xhdGVncmF5fHNsYXRlZ3JleXxzbm93fHNwcmluZ2dyZWVufHN0ZWVsYmx1ZXx0YW58dGVhbHx0aGlzdGxlfHRvbWF0b3x0dXJxdW9pc2V8dmlvbGV0fHdoZWF0fHdoaXRlfHdoaXRlc21va2V8eWVsbG93fHllbGxvd2dyZWVuIjsKdmFyIHN1cHBvcnRDb25zdGFudEZvbnRzID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRGb250cyA9ICJhcmlhbHxjZW50dXJ5fGNvbWljfGNvdXJpZXJ8Y3Vyc2l2ZXxmYW50YXN5fGdhcmFtb25kfGdlb3JnaWF8aGVsdmV0aWNhfGltcGFjdHxsdWNpZGF8c3ltYm9sfHN5c3RlbXx0YWhvbWF8dGltZXN8dHJlYnVjaGV0fHV0b3BpYXx2ZXJkYW5hfHdlYmRpbmdzfHNhbnMtc2VyaWZ8c2VyaWZ8bW9ub3NwYWNlIjsKCnZhciBudW1SZSA9IGV4cG9ydHMubnVtUmUgPSAiXFwtPyg/Oig/OlswLTldKyg/OlxcLlswLTldKyk/KXwoPzpcXC5bMC05XSspKSI7CnZhciBwc2V1ZG9FbGVtZW50cyA9IGV4cG9ydHMucHNldWRvRWxlbWVudHMgPSAiKFxcOispXFxiKGFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxtb3otc2VsZWN0aW9ufHNlbGVjdGlvbilcXGIiOwp2YXIgcHNldWRvQ2xhc3NlcyAgPSBleHBvcnRzLnBzZXVkb0NsYXNzZXMgPSAgIig6KVxcYihhY3RpdmV8Y2hlY2tlZHxkaXNhYmxlZHxlbXB0eXxlbmFibGVkfGZpcnN0LWNoaWxkfGZpcnN0LW9mLXR5cGV8Zm9jdXN8aG92ZXJ8aW5kZXRlcm1pbmF0ZXxpbnZhbGlkfGxhc3QtY2hpbGR8bGFzdC1vZi10eXBlfGxpbmt8bm90fG50aC1jaGlsZHxudGgtbGFzdC1jaGlsZHxudGgtbGFzdC1vZi10eXBlfG50aC1vZi10eXBlfG9ubHktY2hpbGR8b25seS1vZi10eXBlfHJlcXVpcmVkfHJvb3R8dGFyZ2V0fHZhbGlkfHZpc2l0ZWQpXFxiIjsKCnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKICAgICAgICAic3VwcG9ydC5jb25zdGFudCI6IHN1cHBvcnRDb25zdGFudCwKICAgICAgICAic3VwcG9ydC50eXBlIjogc3VwcG9ydFR5cGUsCiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiBzdXBwb3J0Q29uc3RhbnRDb2xvciwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5mb250cyI6IHN1cHBvcnRDb25zdGFudEZvbnRzCiAgICB9LCAidGV4dCIsIHRydWUpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKICAgICAgICAgICAgbmV4dDogICJydWxlc2V0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxcfSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJAKD8hdmlld3BvcnQpIiwKICAgICAgICAgICAgbmV4dDogICJtZWRpYSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiI1thLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFwuW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiOlthLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAogICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0sCgogICAgICAgICJtZWRpYSI6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxcfSIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiOyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIig/Om1lZGlhfHN1cHBvcnRzfGRvY3VtZW50fGNoYXJzZXR8aW1wb3J0fG5hbWVzcGFjZXxtZWRpYXxzdXBwb3J0c3xkb2N1bWVudCIKICAgICAgICAgICAgICAgICsgInxwYWdlfGZvbnR8a2V5ZnJhbWVzfHZpZXdwb3J0fGNvdW50ZXItc3R5bGV8Zm9udC1mZWF0dXJlLXZhbHVlcyIKICAgICAgICAgICAgICAgICsgInxzd2FzaHxvcm5hbWVudHN8YW5ub3RhdGlvbnxzdHlsaXN0aWN8c3R5bGVzZXR8Y2hhcmFjdGVyLXZhcmlhbnQpIgogICAgICAgIH1dLAoKICAgICAgICAiY29tbWVudHMiIDogW3sKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4OiAiXFwvXFwqIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgInJ1bGVzZXQiIDogW3sKICAgICAgICAgICAgcmVnZXggOiAiLSh3ZWJraXR8bXN8bW96fG8pLSIsCiAgICAgICAgICAgIHRva2VuIDogInRleHQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIls6O10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJcXH0iLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJdLAogICAgICAgICAgICByZWdleCA6ICIoIiArIG51bVJlICsgIikoY2h8Y218ZGVnfGVtfGV4fGZyfGdkfGdyYWR8SHp8aW58a0h6fG1tfG1zfHBjfHB0fHB4fHJhZHxyZW18c3x0dXJufHZofHZtYXh8dm1pbnx2bXx2d3wlKSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICByZWdleCA6IG51bVJlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgIC8vIGhleDYgY29sb3IKICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tZWxlbWVudC5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9FbGVtZW50cwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uIiwgImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5wc2V1ZG8tY2xhc3MuY3NzIl0sCiAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvQ2xhc3NlcwogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInVybCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiXFwtP1thLXpBLVpfXVthLXpBLVowLTlfXFwtXSoiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgdXJsOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86dXJsKDo/LXByZWZpeCk/fGRvbWFpbnxyZWdleHApXFwoIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCgogICAgICAgIHN0cmluZ3M6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlIDogImVzY2FwZXMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCQvLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQ6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgIGVzY2FwZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcKFthLWZBLUZcZF17MSw2fXxbXmEtZkEtRlxkXSkvCiAgICAgICAgfV0KCiAgICB9OwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhDc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuQ3NzSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBwcm9wZXJ0eU1hcCA9IHsKICAgICJiYWNrZ3JvdW5kIjogeyIjJDAiOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogeyIjJDAiOiAxLCAidHJhbnNwYXJlbnQiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLWltYWdlIjogeyJ1cmwoJy8kMCcpIjogMX0sCiAgICAiYmFja2dyb3VuZC1yZXBlYXQiOiB7InJlcGVhdCI6IDEsICJyZXBlYXQteCI6IDEsICJyZXBlYXQteSI6IDEsICJuby1yZXBlYXQiOiAxLCAiaW5oZXJpdCI6IDF9LAogICAgImJhY2tncm91bmQtcG9zaXRpb24iOiB7ImJvdHRvbSI6MiwgImNlbnRlciI6MiwgImxlZnQiOjIsICJyaWdodCI6MiwgInRvcCI6MiwgImluaGVyaXQiOjJ9LAogICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IHsic2Nyb2xsIjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1zaXplIjogeyJjb3ZlciI6IDEsICJjb250YWluIjogMX0sCiAgICAiYmFja2dyb3VuZC1jbGlwIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYmFja2dyb3VuZC1vcmlnaW4iOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJib3JkZXIiOiB7InNvbGlkICQwIjogMSwgImRhc2hlZCAkMCI6IDEsICJkb3R0ZWQgJDAiOiAxLCAiIyQwIjogMX0sCiAgICAiYm9yZGVyLWNvbG9yIjogeyIjJDAiOiAxfSwKICAgICJib3JkZXItc3R5bGUiOiB7InNvbGlkIjoyLCAiZGFzaGVkIjoyLCAiZG90dGVkIjoyLCAiZG91YmxlIjoyLCAiZ3Jvb3ZlIjoyLCAiaGlkZGVuIjoyLCAiaW5oZXJpdCI6MiwgImluc2V0IjoyLCAibm9uZSI6MiwgIm91dHNldCI6MiwgInJpZGdlZCI6Mn0sCiAgICAiYm9yZGVyLWNvbGxhcHNlIjogeyJjb2xsYXBzZSI6IDEsICJzZXBhcmF0ZSI6IDF9LAogICAgImJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImNsZWFyIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImJvdGgiOiAxLCAibm9uZSI6IDF9LAogICAgImNvbG9yIjogeyIjJDAiOiAxLCAicmdiKCMkMDAsMCwwKSI6IDF9LAogICAgImN1cnNvciI6IHsiZGVmYXVsdCI6IDEsICJwb2ludGVyIjogMSwgIm1vdmUiOiAxLCAidGV4dCI6IDEsICJ3YWl0IjogMSwgImhlbHAiOiAxLCAicHJvZ3Jlc3MiOiAxLCAibi1yZXNpemUiOiAxLCAibmUtcmVzaXplIjogMSwgImUtcmVzaXplIjogMSwgInNlLXJlc2l6ZSI6IDEsICJzLXJlc2l6ZSI6IDEsICJzdy1yZXNpemUiOiAxLCAidy1yZXNpemUiOiAxLCAibnctcmVzaXplIjogMX0sCiAgICAiZGlzcGxheSI6IHsibm9uZSI6IDEsICJibG9jayI6IDEsICJpbmxpbmUiOiAxLCAiaW5saW5lLWJsb2NrIjogMSwgInRhYmxlLWNlbGwiOiAxfSwKICAgICJlbXB0eS1jZWxscyI6IHsic2hvdyI6IDEsICJoaWRlIjogMX0sCiAgICAiZmxvYXQiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAibm9uZSI6IDF9LAogICAgImZvbnQtZmFtaWx5IjogeyJBcmlhbCI6MiwiQ29taWMgU2FucyBNUyI6MiwiQ29uc29sYXMiOjIsIkNvdXJpZXIgTmV3IjoyLCJDb3VyaWVyIjoyLCJHZW9yZ2lhIjoyLCJNb25vc3BhY2UiOjIsIlNhbnMtU2VyaWYiOjIsICJTZWdvZSBVSSI6MiwiVGFob21hIjoyLCJUaW1lcyBOZXcgUm9tYW4iOjIsIlRyZWJ1Y2hldCBNUyI6MiwiVmVyZGFuYSI6IDF9LAogICAgImZvbnQtc2l6ZSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImZvbnQtd2VpZ2h0IjogeyJib2xkIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtc3R5bGUiOiB7Iml0YWxpYyI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXZhcmlhbnQiOiB7Im5vcm1hbCI6IDEsICJzbWFsbC1jYXBzIjogMX0sCiAgICAiaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxldHRlci1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJsaW5lLWhlaWdodCI6IHsibm9ybWFsIjogMX0sCiAgICAibGlzdC1zdHlsZS10eXBlIjogeyJub25lIjogMSwgImRpc2MiOiAxLCAiY2lyY2xlIjogMSwgInNxdWFyZSI6IDEsICJkZWNpbWFsIjogMSwgImRlY2ltYWwtbGVhZGluZy16ZXJvIjogMSwgImxvd2VyLXJvbWFuIjogMSwgInVwcGVyLXJvbWFuIjogMSwgImxvd2VyLWdyZWVrIjogMSwgImxvd2VyLWxhdGluIjogMSwgInVwcGVyLWxhdGluIjogMSwgImdlb3JnaWFuIjogMSwgImxvd2VyLWFscGhhIjogMSwgInVwcGVyLWFscGhhIjogMX0sCiAgICAibWFyZ2luIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLWJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtd2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4taGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAib3ZlcmZsb3ciOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteCI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy15IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgInBhZGRpbmciOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZ2UtYnJlYWstYWZ0ZXIiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwYWdlLWJyZWFrLWJlZm9yZSI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBvc2l0aW9uIjogeyJhYnNvbHV0ZSI6IDEsICJyZWxhdGl2ZSI6IDEsICJmaXhlZCI6IDEsICJzdGF0aWMiOiAxfSwKICAgICJyaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInRhYmxlLWxheW91dCI6IHsiZml4ZWQiOiAxLCAiYXV0byI6IDF9LAogICAgInRleHQtZGVjb3JhdGlvbiI6IHsibm9uZSI6IDEsICJ1bmRlcmxpbmUiOiAxLCAibGluZS10aHJvdWdoIjogMSwgImJsaW5rIjogMX0sCiAgICAidGV4dC1hbGlnbiI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJjZW50ZXIiOiAxLCAianVzdGlmeSI6IDF9LAogICAgInRleHQtdHJhbnNmb3JtIjogeyJjYXBpdGFsaXplIjogMSwgInVwcGVyY2FzZSI6IDEsICJsb3dlcmNhc2UiOiAxLCAibm9uZSI6IDF9LAogICAgInRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInZlcnRpY2FsLWFsaWduIjogeyJ0b3AiOiAxLCAiYm90dG9tIjogMX0sCiAgICAidmlzaWJpbGl0eSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxfSwKICAgICJ3aGl0ZS1zcGFjZSI6IHsibm93cmFwIjogMSwgIm5vcm1hbCI6IDEsICJwcmUiOiAxLCAicHJlLWxpbmUiOiAxLCAicHJlLXdyYXAiOiAxfSwKICAgICJ3aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIndvcmQtc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAiZmlsdGVyIjogeyJhbHBoYShvcGFjaXR5PSQwMTAwKSI6IDF9LAoKICAgICJ0ZXh0LXNoYWRvdyI6IHsiJDAycHggMnB4IDJweCAjNzc3IjogMX0sCiAgICAidGV4dC1vdmVyZmxvdyI6IHsiZWxsaXBzaXMtd29yZCI6IDEsICJjbGlwIjogMSwgImVsbGlwc2lzIjogMX0sCiAgICAiLW1vei1ib3JkZXItcmFkaXVzIjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IjogMSwKICAgICItd2Via2l0LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjogMSwKICAgICItbW96LWJveC1zaGFkb3ciOiAxLAogICAgIi13ZWJraXQtYm94LXNoYWRvdyI6IDEsCiAgICAidHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItbW96LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLXdlYmtpdC10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDEgfQp9OwoKdmFyIENzc0NvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7Cgp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gZmFsc2U7CgogICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChkb2N1bWVudCkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjJykuc3R5bGU7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIHN0eWxlKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlW2ldICE9PSAnc3RyaW5nJykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGkucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnLScgKyB4LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5TWFwLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwW25hbWVdID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSB0cnVlOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgaWYgKCF0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCkgewogICAgICAgICAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGU9PT0ncnVsZXNldCcgfHwgc2Vzc2lvbi4kbW9kZS4kaWQgPT0gImFjZS9tb2RlL3Njc3MiKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgaWYgKC86W147XSskLy50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgICAgICAvKFtcd1wtXSspOlteOl0qJC8udGVzdChsaW5lKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtdOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwKTsKICAgICAgICByZXR1cm4gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24ocHJvcGVydHkpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogcHJvcGVydHksCiAgICAgICAgICAgICAgICBzbmlwcGV0OiBwcm9wZXJ0eSArICc6ICQwOycsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgdmFyIHByb3BlcnR5ID0gKC8oW1x3XC1dKyk6W146XSokLy5leGVjKGxpbmUpIHx8IHt9KVsxXTsKCiAgICAgICAgaWYgKCFwcm9wZXJ0eSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKICAgICAgICBpZiAocHJvcGVydHkgaW4gcHJvcGVydHlNYXAgJiYgdHlwZW9mIHByb3BlcnR5TWFwW3Byb3BlcnR5XSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXBbcHJvcGVydHldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSB2YWx1ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoQ3NzQ29tcGxldGlvbnMucHJvdG90eXBlKTsKCmV4cG9ydHMuQ3NzQ29tcGxldGlvbnMgPSBDc3NDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgQ3NzQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewoKICAgIHRoaXMuaW5oZXJpdChDc3R5bGVCZWhhdmlvdXIpOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc6JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgvXihccytbXjtdfFxzKiQpLy50ZXN0KGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJzo7JywKICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiY29sb24iLCAiZGVsZXRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIHNlbGVjdGVkID09PSAnOicpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5lbmQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uICsgMSk7CiAgICAgICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uICsrOwogICAgICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzZW1pY29sb24iLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnOycgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAogICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiIWltcG9ydGFudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICchJyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKCiAgICAgICAgICAgIGlmICgvXlxzKig7fH18JCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICchaW1wb3J0YW50JywKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxMCwgMTBdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9Owpvb3AuaW5oZXJpdHMoQ3NzQmVoYXZpb3VyLCBDc3R5bGVCZWhhdmlvdXIpOwoKZXhwb3J0cy5Dc3NCZWhhdmlvdXIgPSBDc3NCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3MiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciBDc3NDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vY3NzX2NvbXBsZXRpb25zIikuQ3NzQ29tcGxldGlvbnM7CnZhciBDc3NCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3NzQmVoYXZpb3VyKCk7CiAgICB0aGlzLiRjb21wbGV0ZXIgPSBuZXcgQ3NzQ29tcGxldGlvbnMoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSAiY1N0eWxlIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9jc3Nfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NzcyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4veG1sX2hpZ2hsaWdodF9ydWxlcyIpLlhtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIHRhZ01hcCA9IGxhbmcuY3JlYXRlTWFwKHsKICAgIGEgICAgICAgICAgIDogJ2FuY2hvcicsCiAgICBidXR0b24gCSAgICA6ICdmb3JtJywKICAgIGZvcm0gICAgICAgIDogJ2Zvcm0nLAogICAgaW1nICAgICAgICAgOiAnaW1hZ2UnLAogICAgaW5wdXQgICAgICAgOiAnZm9ybScsCiAgICBsYWJlbCAgICAgICA6ICdmb3JtJywKICAgIG9wdGlvbiAgICAgIDogJ2Zvcm0nLAogICAgc2NyaXB0ICAgICAgOiAnc2NyaXB0JywKICAgIHNlbGVjdCAgICAgIDogJ2Zvcm0nLAogICAgdGV4dGFyZWEgICAgOiAnZm9ybScsCiAgICBzdHlsZSAgICAgICA6ICdzdHlsZScsCiAgICB0YWJsZSAgICAgICA6ICd0YWJsZScsCiAgICB0Ym9keSAgICAgICA6ICd0YWJsZScsCiAgICB0ZCAgICAgICAgICA6ICd0YWJsZScsCiAgICB0Zm9vdCAgICAgICA6ICd0YWJsZScsCiAgICB0aCAgICAgICAgICA6ICd0YWJsZScsCiAgICB0ciAgICAgICAgICA6ICd0YWJsZScKfSk7Cgp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBYbWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwoKICAgIHRoaXMuYWRkUnVsZXMoewogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiAidGFnX3doaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiWy1fYS16QS1aMC05Oi5dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAidGFnX3doaXRlc3BhY2UiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy51bnF1b3RlZC5hdHRyaWJ1dGUtdmFsdWUuaHRtbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXjw+PSdcImBcXHNdKyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCiAgICAgICAgdGFnOiBbewogICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHN0YXJ0LCB0YWcpIHsKICAgICAgICAgICAgICAgIHZhciBncm91cCA9IHRhZ01hcFt0YWddOwogICAgICAgICAgICAgICAgcmV0dXJuIFsibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChzdGFydCA9PSAiPCIgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgICAgICAibWV0YS50YWciICsgKGdyb3VwID8gIi4iICsgZ3JvdXAgOiAiIikgKyAiLnRhZy1uYW1lLnhtbCJdOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleCA6ICIoPC8/KShbLV9hLXpBLVowLTk6Ll0rKSIsCiAgICAgICAgICAgIG5leHQ6ICJ0YWdfc3R1ZmYiCiAgICAgICAgfV0sCiAgICAgICAgdGFnX3N0dWZmOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogInN0YXJ0In0KICAgICAgICBdCiAgICB9KTsKCiAgICB0aGlzLmVtYmVkVGFnUnVsZXMoQ3NzSGlnaGxpZ2h0UnVsZXMsICJjc3MtIiwgInN0eWxlIik7CiAgICB0aGlzLmVtYmVkVGFnUnVsZXMobmV3IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyh7anN4OiBmYWxzZX0pLmdldFJ1bGVzKCksICJqcy0iLCAic2NyaXB0Iik7CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEh0bWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSHRtbEhpZ2hsaWdodFJ1bGVzLCBYbWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkh0bWxIaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihkZWZhdWx0TW9kZSwgc3ViTW9kZXMpIHsKICAgIHRoaXMuZGVmYXVsdE1vZGUgPSBkZWZhdWx0TW9kZTsKICAgIHRoaXMuc3ViTW9kZXMgPSBzdWJNb2RlczsKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKCiAgICB0aGlzLiRnZXRNb2RlID0gZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICBpZiAodHlwZW9mIHN0YXRlICE9ICJzdHJpbmciKSAKICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXTsKICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zdWJNb2RlcykgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZXhPZihrZXkpID09PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViTW9kZXNba2V5XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHN0YXRlKTsKICAgICAgICByZXR1cm4gKG1vZGUgPyBtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIDogIiIpOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSksIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB8fAogICAgICAgICAgICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93KSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKICAgICAgICApOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93KSk7CiAgICAgICAgCiAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQogICAgICAgICAgICBtb2RlID0gdGhpcy5kZWZhdWx0TW9kZTsKICAgICAgICAKICAgICAgICByZXR1cm4gbW9kZS5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgTWl4ZWRGb2xkTW9kZSA9IHJlcXVpcmUoIi4vbWl4ZWQiKS5Gb2xkTW9kZTsKdmFyIFhtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi94bWwiKS5Gb2xkTW9kZTsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbih2b2lkRWxlbWVudHMsIG9wdGlvbmFsVGFncykgewogICAgTWl4ZWRGb2xkTW9kZS5jYWxsKHRoaXMsIG5ldyBYbWxGb2xkTW9kZSh2b2lkRWxlbWVudHMsIG9wdGlvbmFsVGFncyksIHsKICAgICAgICAianMtIjogbmV3IENTdHlsZUZvbGRNb2RlKCksCiAgICAgICAgImNzcy0iOiBuZXcgQ1N0eWxlRm9sZE1vZGUoKQogICAgfSk7Cn07Cgpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIE1peGVkRm9sZE1vZGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfY29tcGxldGlvbnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIGNvbW1vbkF0dHJpYnV0ZXMgPSBbCiAgICAiYWNjZXNza2V5IiwKICAgICJjbGFzcyIsCiAgICAiY29udGVudGVkaXRhYmxlIiwKICAgICJjb250ZXh0bWVudSIsCiAgICAiZGlyIiwKICAgICJkcmFnZ2FibGUiLAogICAgImRyb3B6b25lIiwKICAgICJoaWRkZW4iLAogICAgImlkIiwKICAgICJpbmVydCIsCiAgICAiaXRlbWlkIiwKICAgICJpdGVtcHJvcCIsCiAgICAiaXRlbXJlZiIsCiAgICAiaXRlbXNjb3BlIiwKICAgICJpdGVtdHlwZSIsCiAgICAibGFuZyIsCiAgICAic3BlbGxjaGVjayIsCiAgICAic3R5bGUiLAogICAgInRhYmluZGV4IiwKICAgICJ0aXRsZSIsCiAgICAidHJhbnNsYXRlIgpdOwoKdmFyIGV2ZW50QXR0cmlidXRlcyA9IFsKICAgICJvbmFib3J0IiwKICAgICJvbmJsdXIiLAogICAgIm9uY2FuY2VsIiwKICAgICJvbmNhbnBsYXkiLAogICAgIm9uY2FucGxheXRocm91Z2giLAogICAgIm9uY2hhbmdlIiwKICAgICJvbmNsaWNrIiwKICAgICJvbmNsb3NlIiwKICAgICJvbmNvbnRleHRtZW51IiwKICAgICJvbmN1ZWNoYW5nZSIsCiAgICAib25kYmxjbGljayIsCiAgICAib25kcmFnIiwKICAgICJvbmRyYWdlbmQiLAogICAgIm9uZHJhZ2VudGVyIiwKICAgICJvbmRyYWdsZWF2ZSIsCiAgICAib25kcmFnb3ZlciIsCiAgICAib25kcmFnc3RhcnQiLAogICAgIm9uZHJvcCIsCiAgICAib25kdXJhdGlvbmNoYW5nZSIsCiAgICAib25lbXB0aWVkIiwKICAgICJvbmVuZGVkIiwKICAgICJvbmVycm9yIiwKICAgICJvbmZvY3VzIiwKICAgICJvbmlucHV0IiwKICAgICJvbmludmFsaWQiLAogICAgIm9ua2V5ZG93biIsCiAgICAib25rZXlwcmVzcyIsCiAgICAib25rZXl1cCIsCiAgICAib25sb2FkIiwKICAgICJvbmxvYWRlZGRhdGEiLAogICAgIm9ubG9hZGVkbWV0YWRhdGEiLAogICAgIm9ubG9hZHN0YXJ0IiwKICAgICJvbm1vdXNlZG93biIsCiAgICAib25tb3VzZW1vdmUiLAogICAgIm9ubW91c2VvdXQiLAogICAgIm9ubW91c2VvdmVyIiwKICAgICJvbm1vdXNldXAiLAogICAgIm9ubW91c2V3aGVlbCIsCiAgICAib25wYXVzZSIsCiAgICAib25wbGF5IiwKICAgICJvbnBsYXlpbmciLAogICAgIm9ucHJvZ3Jlc3MiLAogICAgIm9ucmF0ZWNoYW5nZSIsCiAgICAib25yZXNldCIsCiAgICAib25zY3JvbGwiLAogICAgIm9uc2Vla2VkIiwKICAgICJvbnNlZWtpbmciLAogICAgIm9uc2VsZWN0IiwKICAgICJvbnNob3ciLAogICAgIm9uc3RhbGxlZCIsCiAgICAib25zdWJtaXQiLAogICAgIm9uc3VzcGVuZCIsCiAgICAib250aW1ldXBkYXRlIiwKICAgICJvbnZvbHVtZWNoYW5nZSIsCiAgICAib253YWl0aW5nIgpdOwoKdmFyIGdsb2JhbEF0dHJpYnV0ZXMgPSBjb21tb25BdHRyaWJ1dGVzLmNvbmNhdChldmVudEF0dHJpYnV0ZXMpOwoKdmFyIGF0dHJpYnV0ZU1hcCA9IHsKICAgICJhIjogeyJocmVmIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9LCAicGluZyI6IDEsICJyZWwiOiB7Im5vZm9sbG93IjogMSwgImFsdGVybmF0ZSI6IDEsICJhdXRob3IiOiAxLCAiYm9va21hcmsiOiAxLCAiaGVscCI6IDEsICJsaWNlbnNlIjogMSwgIm5leHQiOiAxLCAibm9yZWZlcnJlciI6IDEsICJwcmVmZXRjaCI6IDEsICJwcmV2IjogMSwgInNlYXJjaCI6IDEsICJ0YWciOiAxfSwgIm1lZGlhIjogMSwgImhyZWZsYW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhYmJyIjoge30sCiAgICAiYWRkcmVzcyI6IHt9LAogICAgImFyZWEiOiB7InNoYXBlIjogMSwgImNvb3JkcyI6IDEsICJocmVmIjogMSwgImhyZWZsYW5nIjogMSwgImFsdCI6IDEsICJ0YXJnZXQiOiAxLCAibWVkaWEiOiAxLCAicmVsIjogMSwgInBpbmciOiAxLCAidHlwZSI6IDF9LAogICAgImFydGljbGUiOiB7InB1YmRhdGUiOiAxfSwKICAgICJhc2lkZSI6IHt9LAogICAgImF1ZGlvIjogeyJzcmMiOiAxLCAiYXV0b2J1ZmZlciI6IDEsICJhdXRvcGxheSI6IHsiYXV0b3BsYXkiOiAxfSwgImxvb3AiOiB7Imxvb3AiOiAxfSwgImNvbnRyb2xzIjogeyJjb250cm9scyI6IDF9LCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxIH19LAogICAgImIiOiB7fSwKICAgICJiYXNlIjogeyJocmVmIjogMSwgInRhcmdldCI6IDF9LAogICAgImJkaSI6IHt9LAogICAgImJkbyI6IHt9LAogICAgImJsb2NrcXVvdGUiOiB7ImNpdGUiOiAxfSwKICAgICJib2R5IjogeyJvbmFmdGVycHJpbnQiOiAxLCAib25iZWZvcmVwcmludCI6IDEsICJvbmJlZm9yZXVubG9hZCI6IDEsICJvbmhhc2hjaGFuZ2UiOiAxLCAib25tZXNzYWdlIjogMSwgIm9ub2ZmbGluZSI6IDEsICJvbnBvcHN0YXRlIjogMSwgIm9ucmVkbyI6IDEsICJvbnJlc2l6ZSI6IDEsICJvbnN0b3JhZ2UiOiAxLCAib251bmRvIjogMSwgIm9udW5sb2FkIjogMX0sCiAgICAiYnIiOiB7fSwKICAgICJidXR0b24iOiB7ImF1dG9mb2N1cyI6IDEsICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAiZm9ybWFjdGlvbiI6IDEsICJmb3JtZW5jdHlwZSI6IDEsICJmb3JtbWV0aG9kIjogMSwgImZvcm1ub3ZhbGlkYXRlIjogMSwgImZvcm10YXJnZXQiOiAxLCAibmFtZSI6IDEsICJ2YWx1ZSI6IDEsICJ0eXBlIjogeyJidXR0b24iOiAxLCAic3VibWl0IjogMX19LAogICAgImNhbnZhcyI6IHsid2lkdGgiOiAxLCAiaGVpZ2h0IjogMX0sCiAgICAiY2FwdGlvbiI6IHt9LAogICAgImNpdGUiOiB7fSwKICAgICJjb2RlIjoge30sCiAgICAiY29sIjogeyJzcGFuIjogMX0sCiAgICAiY29sZ3JvdXAiOiB7InNwYW4iOiAxfSwKICAgICJjb21tYW5kIjogeyJ0eXBlIjogMSwgImxhYmVsIjogMSwgImljb24iOiAxLCAiZGlzYWJsZWQiOiAxLCAiY2hlY2tlZCI6IDEsICJyYWRpb2dyb3VwIjogMSwgImNvbW1hbmQiOiAxfSwKICAgICJkYXRhIjoge30sCiAgICAiZGF0YWxpc3QiOiB7fSwKICAgICJkZCI6IHt9LAogICAgImRlbCI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImRldGFpbHMiOiB7Im9wZW4iOiAxfSwKICAgICJkZm4iOiB7fSwKICAgICJkaWFsb2ciOiB7Im9wZW4iOiAxfSwKICAgICJkaXYiOiB7fSwKICAgICJkbCI6IHt9LAogICAgImR0Ijoge30sCiAgICAiZW0iOiB7fSwKICAgICJlbWJlZCI6IHsic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ0eXBlIjogMX0sCiAgICAiZmllbGRzZXQiOiB7ImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgImZpZ2NhcHRpb24iOiB7fSwKICAgICJmaWd1cmUiOiB7fSwKICAgICJmb290ZXIiOiB7fSwKICAgICJmb3JtIjogeyJhY2NlcHQtY2hhcnNldCI6IDEsICJhY3Rpb24iOiAxLCAiYXV0b2NvbXBsZXRlIjogMSwgImVuY3R5cGUiOiB7Im11bHRpcGFydC9mb3JtLWRhdGEiOiAxLCAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjogMX0sICJtZXRob2QiOiB7ImdldCI6IDEsICJwb3N0IjogMX0sICJuYW1lIjogMSwgIm5vdmFsaWRhdGUiOiAxLCAidGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAidG9wIjogMX19LAogICAgImgxIjoge30sCiAgICAiaDIiOiB7fSwKICAgICJoMyI6IHt9LAogICAgImg0Ijoge30sCiAgICAiaDUiOiB7fSwKICAgICJoNiI6IHt9LAogICAgImhlYWQiOiB7fSwKICAgICJoZWFkZXIiOiB7fSwKICAgICJociI6IHt9LAogICAgImh0bWwiOiB7Im1hbmlmZXN0IjogMX0sCiAgICAiaSI6IHt9LAogICAgImlmcmFtZSI6IHsibmFtZSI6IDEsICJzcmMiOiAxLCAiaGVpZ2h0IjogMSwgIndpZHRoIjogMSwgInNhbmRib3giOiB7ImFsbG93LXNhbWUtb3JpZ2luIjogMSwgImFsbG93LXRvcC1uYXZpZ2F0aW9uIjogMSwgImFsbG93LWZvcm1zIjogMSwgImFsbG93LXNjcmlwdHMiOiAxfSwgInNlYW1sZXNzIjogeyJzZWFtbGVzcyI6IDF9fSwKICAgICJpbWciOiB7ImFsdCI6IDEsICJzcmMiOiAxLCAiaGVpZ2h0IjogMSwgIndpZHRoIjogMSwgInVzZW1hcCI6IDEsICJpc21hcCI6IDF9LAogICAgImlucHV0IjogewogICAgICAgICJ0eXBlIjogeyJ0ZXh0IjogMSwgInBhc3N3b3JkIjogMSwgImhpZGRlbiI6IDEsICJjaGVja2JveCI6IDEsICJzdWJtaXQiOiAxLCAicmFkaW8iOiAxLCAiZmlsZSI6IDEsICJidXR0b24iOiAxLCAicmVzZXQiOiAxLCAiaW1hZ2UiOiAzMSwgImNvbG9yIjogMSwgImRhdGUiOiAxLCAiZGF0ZXRpbWUiOiAxLCAiZGF0ZXRpbWUtbG9jYWwiOiAxLCAiZW1haWwiOiAxLCAibW9udGgiOiAxLCAibnVtYmVyIjogMSwgInJhbmdlIjogMSwgInNlYXJjaCI6IDEsICJ0ZWwiOiAxLCAidGltZSI6IDEsICJ1cmwiOiAxLCAid2VlayI6IDF9LAogICAgICAgICJhY2NlcHQiOiAxLCAiYWx0IjogMSwgImF1dG9jb21wbGV0ZSI6IHsib24iOiAxLCAib2ZmIjogMX0sICJhdXRvZm9jdXMiOiB7ImF1dG9mb2N1cyI6IDF9LCAiY2hlY2tlZCI6IHsiY2hlY2tlZCI6IDF9LCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiB7ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDEsICJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgInRleHQvcGxhaW4iOiAxfSwgImZvcm1tZXRob2QiOiB7ImdldCI6IDEsICJwb3N0IjogMX0sICJmb3Jtbm92YWxpZGF0ZSI6IHsiZm9ybW5vdmFsaWRhdGUiOiAxfSwgImZvcm10YXJnZXQiOiB7Il9ibGFuayI6IDEsICJfc2VsZiI6IDEsICJfcGFyZW50IjogMSwgIl90b3AiOiAxfSwgImhlaWdodCI6IDEsICJsaXN0IjogMSwgIm1heCI6IDEsICJtYXhsZW5ndGgiOiAxLCAibWluIjogMSwgIm11bHRpcGxlIjogeyJtdWx0aXBsZSI6IDF9LCAibmFtZSI6IDEsICJwYXR0ZXJuIjogMSwgInBsYWNlaG9sZGVyIjogMSwgInJlYWRvbmx5IjogeyJyZWFkb25seSI6IDF9LCAicmVxdWlyZWQiOiB7InJlcXVpcmVkIjogMX0sICJzaXplIjogMSwgInNyYyI6IDEsICJzdGVwIjogMSwgIndpZHRoIjogMSwgImZpbGVzIjogMSwgInZhbHVlIjogMX0sCiAgICAiaW5zIjogeyJjaXRlIjogMSwgImRhdGV0aW1lIjogMX0sCiAgICAia2JkIjoge30sCiAgICAia2V5Z2VuIjogeyJhdXRvZm9jdXMiOiAxLCAiY2hhbGxlbmdlIjogeyJjaGFsbGVuZ2UiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJrZXl0eXBlIjogeyJyc2EiOiAxLCAiZHNhIjogMSwgImVjIjogMX0sICJuYW1lIjogMX0sCiAgICAibGFiZWwiOiB7ImZvcm0iOiAxLCAiZm9yIjogMX0sCiAgICAibGVnZW5kIjoge30sCiAgICAibGkiOiB7InZhbHVlIjogMX0sCiAgICAibGluayI6IHsiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJyZWwiOiB7InN0eWxlc2hlZXQiOiAxLCAiaWNvbiI6IDF9LCAibWVkaWEiOiB7ImFsbCI6IDEsICJzY3JlZW4iOiAxLCAicHJpbnQiOiAxfSwgInR5cGUiOiB7InRleHQvY3NzIjogMSwgImltYWdlL3BuZyI6IDEsICJpbWFnZS9qcGVnIjogMSwgImltYWdlL2dpZiI6IDF9LCAic2l6ZXMiOiAxfSwKICAgICJtYWluIjoge30sCiAgICAibWFwIjogeyJuYW1lIjogMX0sCiAgICAibWFyayI6IHt9LAogICAgIm1hdGgiOiB7fSwKICAgICJtZW51IjogeyJ0eXBlIjogMSwgImxhYmVsIjogMX0sCiAgICAibWV0YSI6IHsiaHR0cC1lcXVpdiI6IHsiY29udGVudC10eXBlIjogMX0sICJuYW1lIjogeyJkZXNjcmlwdGlvbiI6IDEsICJrZXl3b3JkcyI6IDF9LCAiY29udGVudCI6IHsidGV4dC9odG1sOyBjaGFyc2V0PVVURi04IjogMX0sICJjaGFyc2V0IjogMX0sCiAgICAibWV0ZXIiOiB7InZhbHVlIjogMSwgIm1pbiI6IDEsICJtYXgiOiAxLCAibG93IjogMSwgImhpZ2giOiAxLCAib3B0aW11bSI6IDF9LAogICAgIm5hdiI6IHt9LAogICAgIm5vc2NyaXB0IjogeyJocmVmIjogMX0sCiAgICAib2JqZWN0IjogeyJwYXJhbSI6IDEsICJkYXRhIjogMSwgInR5cGUiOiAxLCAiaGVpZ2h0IiA6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAibmFtZSI6IDEsICJmb3JtIjogMSwgImNsYXNzaWQiOiAxfSwKICAgICJvbCI6IHsic3RhcnQiOiAxLCAicmV2ZXJzZWQiOiAxfSwKICAgICJvcHRncm91cCI6IHsiZGlzYWJsZWQiOiAxLCAibGFiZWwiOiAxfSwKICAgICJvcHRpb24iOiB7ImRpc2FibGVkIjogMSwgInNlbGVjdGVkIjogMSwgImxhYmVsIjogMSwgInZhbHVlIjogMX0sCiAgICAib3V0cHV0IjogeyJmb3IiOiAxLCAiZm9ybSI6IDEsICJuYW1lIjogMX0sCiAgICAicCI6IHt9LAogICAgInBhcmFtIjogeyJuYW1lIjogMSwgInZhbHVlIjogMX0sCiAgICAicHJlIjoge30sCiAgICAicHJvZ3Jlc3MiOiB7InZhbHVlIjogMSwgIm1heCI6IDF9LAogICAgInEiOiB7ImNpdGUiOiAxfSwKICAgICJycCI6IHt9LAogICAgInJ0Ijoge30sCiAgICAicnVieSI6IHt9LAogICAgInMiOiB7fSwKICAgICJzYW1wIjoge30sCiAgICAic2NyaXB0IjogeyJjaGFyc2V0IjogMSwgInR5cGUiOiB7InRleHQvamF2YXNjcmlwdCI6IDF9LCAic3JjIjogMSwgImRlZmVyIjogMSwgImFzeW5jIjogMX0sCiAgICAic2VsZWN0IjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiAxLCAiZm9ybSI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAic2l6ZSI6IDEsICJyZWFkb25seSI6eyJyZWFkb25seSI6IDF9fSwKICAgICJzbWFsbCI6IHt9LAogICAgInNvdXJjZSI6IHsic3JjIjogMSwgInR5cGUiOiAxLCAibWVkaWEiOiAxfSwKICAgICJzcGFuIjoge30sCiAgICAic3Ryb25nIjoge30sCiAgICAic3R5bGUiOiB7InR5cGUiOiAxLCAibWVkaWEiOiB7ImFsbCI6IDEsICJzY3JlZW4iOiAxLCAicHJpbnQiOiAxfSwgInNjb3BlZCI6IDF9LAogICAgInN1YiI6IHt9LAogICAgInN1cCI6IHt9LAogICAgInN2ZyI6IHt9LAogICAgInRhYmxlIjogeyJzdW1tYXJ5IjogMX0sCiAgICAidGJvZHkiOiB7fSwKICAgICJ0ZCI6IHsiaGVhZGVycyI6IDEsICJyb3dzcGFuIjogMSwgImNvbHNwYW4iOiAxfSwKICAgICJ0ZXh0YXJlYSI6IHsiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJtYXhsZW5ndGgiOiAxLCAibmFtZSI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAicm93cyI6IDEsICJjb2xzIjogMSwgIndyYXAiOiB7Im9uIjogMSwgIm9mZiI6IDEsICJoYXJkIjogMSwgInNvZnQiOiAxfX0sCiAgICAidGZvb3QiOiB7fSwKICAgICJ0aCI6IHsiaGVhZGVycyI6IDEsICJyb3dzcGFuIjogMSwgImNvbHNwYW4iOiAxLCAic2NvcGUiOiAxfSwKICAgICJ0aGVhZCI6IHt9LAogICAgInRpbWUiOiB7ImRhdGV0aW1lIjogMX0sCiAgICAidGl0bGUiOiB7fSwKICAgICJ0ciI6IHt9LAogICAgInRyYWNrIjogeyJraW5kIjogMSwgInNyYyI6IDEsICJzcmNsYW5nIjogMSwgImxhYmVsIjogMSwgImRlZmF1bHQiOiAxfSwKICAgICJzZWN0aW9uIjoge30sCiAgICAic3VtbWFyeSI6IHt9LAogICAgInUiOiB7fSwKICAgICJ1bCI6IHt9LAogICAgInZhciI6IHt9LAogICAgInZpZGVvIjogeyJzcmMiOiAxLCAiYXV0b2J1ZmZlciI6IDEsICJhdXRvcGxheSI6IHsiYXV0b3BsYXkiOiAxfSwgImxvb3AiOiB7Imxvb3AiOiAxfSwgImNvbnRyb2xzIjogeyJjb250cm9scyI6IDF9LCAid2lkdGgiOiAxLCAiaGVpZ2h0IjogMSwgInBvc3RlciI6IDEsICJtdXRlZCI6IHsibXV0ZWQiOiAxfSwgInByZWxvYWQiOiB7ImF1dG8iOiAxLCAibWV0YWRhdGEiOiAxLCAibm9uZSI6IDF9fSwKICAgICJ3YnIiOiB7fQp9OwoKdmFyIGVsZW1lbnRzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwKTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9CgpmdW5jdGlvbiBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAidGFnLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCmZ1bmN0aW9uIGZpbmRBdHRyaWJ1dGVOYW1lKHNlc3Npb24sIHBvcykgewogICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zLnJvdywgcG9zLmNvbHVtbik7CiAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgIHdoaWxlICh0b2tlbiAmJiAhaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpKXsKICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgfQogICAgaWYgKHRva2VuKQogICAgICAgIHJldHVybiB0b2tlbi52YWx1ZTsKfQoKdmFyIEh0bWxDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHBvcy5yb3csIHBvcy5jb2x1bW4pOwoKICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSB8fCBpcyh0b2tlbiwgInRhZy1vcGVuIikgfHwgaXModG9rZW4sICJlbmQtdGFnLW9wZW4iKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICBpZiAoLyZbYS16XSokL2kudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CgogICAgICAgIHJldHVybiBbXTsKICAgIH07CgogICAgdGhpcy5nZXRUYWdDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiBlbGVtZW50cy5tYXAoZnVuY3Rpb24oZWxlbWVudCl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudCwKICAgICAgICAgICAgICAgIG1ldGE6ICJ0YWciLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0YWdOYW1lID0gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGdsb2JhbEF0dHJpYnV0ZXM7CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwKSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzLmNvbmNhdChPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXBbdGFnTmFtZV0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMubWFwKGZ1bmN0aW9uKGF0dHJpYnV0ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBhdHRyaWJ1dGUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiBhdHRyaWJ1dGUgKyAnPSIkMCInLAogICAgICAgICAgICAgICAgbWV0YTogImF0dHJpYnV0ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIAogICAgICAgIGlmICghdGFnTmFtZSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKICAgICAgICBpZiAodGFnTmFtZSBpbiBhdHRyaWJ1dGVNYXAgJiYgYXR0cmlidXRlTmFtZSBpbiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV0gJiYgdHlwZW9mIGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdW2F0dHJpYnV0ZU5hbWVdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUgdmFsdWUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRIVE1MRW50aXR5Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdmFsdWVzID0gWydBYWN1dGU7JywgJ2FhY3V0ZTsnLCAnQWNpcmM7JywgJ2FjaXJjOycsICdhY3V0ZTsnLCAnQUVsaWc7JywgJ2FlbGlnOycsICdBZ3JhdmU7JywgJ2FncmF2ZTsnLCAnYWxlZnN5bTsnLCAnQWxwaGE7JywgJ2FscGhhOycsICdhbXA7JywgJ2FuZDsnLCAnYW5nOycsICdBcmluZzsnLCAnYXJpbmc7JywgJ2FzeW1wOycsICdBdGlsZGU7JywgJ2F0aWxkZTsnLCAnQXVtbDsnLCAnYXVtbDsnLCAnYmRxdW87JywgJ0JldGE7JywgJ2JldGE7JywgJ2JydmJhcjsnLCAnYnVsbDsnLCAnY2FwOycsICdDY2VkaWw7JywgJ2NjZWRpbDsnLCAnY2VkaWw7JywgJ2NlbnQ7JywgJ0NoaTsnLCAnY2hpOycsICdjaXJjOycsICdjbHViczsnLCAnY29uZzsnLCAnY29weTsnLCAnY3JhcnI7JywgJ2N1cDsnLCAnY3VycmVuOycsICdEYWdnZXI7JywgJ2RhZ2dlcjsnLCAnZEFycjsnLCAnZGFycjsnLCAnZGVnOycsICdEZWx0YTsnLCAnZGVsdGE7JywgJ2RpYW1zOycsICdkaXZpZGU7JywgJ0VhY3V0ZTsnLCAnZWFjdXRlOycsICdFY2lyYzsnLCAnZWNpcmM7JywgJ0VncmF2ZTsnLCAnZWdyYXZlOycsICdlbXB0eTsnLCAnZW1zcDsnLCAnZW5zcDsnLCAnRXBzaWxvbjsnLCAnZXBzaWxvbjsnLCAnZXF1aXY7JywgJ0V0YTsnLCAnZXRhOycsICdFVEg7JywgJ2V0aDsnLCAnRXVtbDsnLCAnZXVtbDsnLCAnZXVybzsnLCAnZXhpc3Q7JywgJ2Zub2Y7JywgJ2ZvcmFsbDsnLCAnZnJhYzEyOycsICdmcmFjMTQ7JywgJ2ZyYWMzNDsnLCAnZnJhc2w7JywgJ0dhbW1hOycsICdnYW1tYTsnLCAnZ2U7JywgJ2d0OycsICdoQXJyOycsICdoYXJyOycsICdoZWFydHM7JywgJ2hlbGxpcDsnLCAnSWFjdXRlOycsICdpYWN1dGU7JywgJ0ljaXJjOycsICdpY2lyYzsnLCAnaWV4Y2w7JywgJ0lncmF2ZTsnLCAnaWdyYXZlOycsICdpbWFnZTsnLCAnaW5maW47JywgJ2ludDsnLCAnSW90YTsnLCAnaW90YTsnLCAnaXF1ZXN0OycsICdpc2luOycsICdJdW1sOycsICdpdW1sOycsICdLYXBwYTsnLCAna2FwcGE7JywgJ0xhbWJkYTsnLCAnbGFtYmRhOycsICdsYW5nOycsICdsYXF1bzsnLCAnbEFycjsnLCAnbGFycjsnLCAnbGNlaWw7JywgJ2xkcXVvOycsICdsZTsnLCAnbGZsb29yOycsICdsb3dhc3Q7JywgJ2xvejsnLCAnbHJtOycsICdsc2FxdW87JywgJ2xzcXVvOycsICdsdDsnLCAnbWFjcjsnLCAnbWRhc2g7JywgJ21pY3JvOycsICdtaWRkb3Q7JywgJ21pbnVzOycsICdNdTsnLCAnbXU7JywgJ25hYmxhOycsICduYnNwOycsICduZGFzaDsnLCAnbmU7JywgJ25pOycsICdub3Q7JywgJ25vdGluOycsICduc3ViOycsICdOdGlsZGU7JywgJ250aWxkZTsnLCAnTnU7JywgJ251OycsICdPYWN1dGU7JywgJ29hY3V0ZTsnLCAnT2NpcmM7JywgJ29jaXJjOycsICdPRWxpZzsnLCAnb2VsaWc7JywgJ09ncmF2ZTsnLCAnb2dyYXZlOycsICdvbGluZTsnLCAnT21lZ2E7JywgJ29tZWdhOycsICdPbWljcm9uOycsICdvbWljcm9uOycsICdvcGx1czsnLCAnb3I7JywgJ29yZGY7JywgJ29yZG07JywgJ09zbGFzaDsnLCAnb3NsYXNoOycsICdPdGlsZGU7JywgJ290aWxkZTsnLCAnb3RpbWVzOycsICdPdW1sOycsICdvdW1sOycsICdwYXJhOycsICdwYXJ0OycsICdwZXJtaWw7JywgJ3BlcnA7JywgJ1BoaTsnLCAncGhpOycsICdQaTsnLCAncGk7JywgJ3BpdjsnLCAncGx1c21uOycsICdwb3VuZDsnLCAnUHJpbWU7JywgJ3ByaW1lOycsICdwcm9kOycsICdwcm9wOycsICdQc2k7JywgJ3BzaTsnLCAncXVvdDsnLCAncmFkaWM7JywgJ3Jhbmc7JywgJ3JhcXVvOycsICdyQXJyOycsICdyYXJyOycsICdyY2VpbDsnLCAncmRxdW87JywgJ3JlYWw7JywgJ3JlZzsnLCAncmZsb29yOycsICdSaG87JywgJ3JobzsnLCAncmxtOycsICdyc2FxdW87JywgJ3JzcXVvOycsICdzYnF1bzsnLCAnU2Nhcm9uOycsICdzY2Fyb247JywgJ3Nkb3Q7JywgJ3NlY3Q7JywgJ3NoeTsnLCAnU2lnbWE7JywgJ3NpZ21hOycsICdzaWdtYWY7JywgJ3NpbTsnLCAnc3BhZGVzOycsICdzdWI7JywgJ3N1YmU7JywgJ3N1bTsnLCAnc3VwOycsICdzdXAxOycsICdzdXAyOycsICdzdXAzOycsICdzdXBlOycsICdzemxpZzsnLCAnVGF1OycsICd0YXU7JywgJ3RoZXJlNDsnLCAnVGhldGE7JywgJ3RoZXRhOycsICd0aGV0YXN5bTsnLCAndGhpbnNwOycsICdUSE9STjsnLCAndGhvcm47JywgJ3RpbGRlOycsICd0aW1lczsnLCAndHJhZGU7JywgJ1VhY3V0ZTsnLCAndWFjdXRlOycsICd1QXJyOycsICd1YXJyOycsICdVY2lyYzsnLCAndWNpcmM7JywgJ1VncmF2ZTsnLCAndWdyYXZlOycsICd1bWw7JywgJ3Vwc2loOycsICdVcHNpbG9uOycsICd1cHNpbG9uOycsICdVdW1sOycsICd1dW1sOycsICd3ZWllcnA7JywgJ1hpOycsICd4aTsnLCAnWWFjdXRlOycsICd5YWN1dGU7JywgJ3llbjsnLCAnWXVtbDsnLCAneXVtbDsnLCAnWmV0YTsnLCAnemV0YTsnLCAnendqOycsICd6d25qOyddOwoKICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogImh0bWwgZW50aXR5IiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChIdG1sQ29tcGxldGlvbnMucHJvdG90eXBlKTsKCmV4cG9ydHMuSHRtbENvbXBsZXRpb25zID0gSHRtbENvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9jc3MiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2h0bWwiLCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGU7CnZhciBDc3NNb2RlID0gcmVxdWlyZSgiLi9jc3MiKS5Nb2RlOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKdmFyIFhtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cjsKdmFyIEh0bWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9odG1sIikuRm9sZE1vZGU7CnZhciBIdG1sQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2h0bWxfY29tcGxldGlvbnMiKS5IdG1sQ29tcGxldGlvbnM7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIHZvaWRFbGVtZW50cyA9IFsiYXJlYSIsICJiYXNlIiwgImJyIiwgImNvbCIsICJlbWJlZCIsICJociIsICJpbWciLCAiaW5wdXQiLCAia2V5Z2VuIiwgImxpbmsiLCAibWV0YSIsICJtZW51aXRlbSIsICJwYXJhbSIsICJzb3VyY2UiLCAidHJhY2siLCAid2JyIl07CnZhciBvcHRpb25hbEVuZFRhZ3MgPSBbImxpIiwgImR0IiwgImRkIiwgInAiLCAicnQiLCAicnAiLCAib3B0Z3JvdXAiLCAib3B0aW9uIiwgImNvbGdyb3VwIiwgInRkIiwgInRoIl07Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmZyYWdtZW50Q29udGV4dDsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgWG1sQmVoYXZpb3VyKCk7CiAgICB0aGlzLiRjb21wbGV0ZXIgPSBuZXcgSHRtbENvbXBsZXRpb25zKCk7CiAgICAKICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CiAgICAgICAgImpzLSI6IEphdmFTY3JpcHRNb2RlLAogICAgICAgICJjc3MtIjogQ3NzTW9kZQogICAgfSk7CiAgICAKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSh0aGlzLnZvaWRFbGVtZW50cywgbGFuZy5hcnJheVRvTWFwKG9wdGlvbmFsRW5kVGFncykpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiPCEtLSIsIGVuZDogIi0tPiJ9OwoKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gbGFuZy5hcnJheVRvTWFwKHZvaWRFbGVtZW50cyk7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICByZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgIT0gTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9odG1sX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICBpZiAodGhpcy5mcmFnbWVudENvbnRleHQpCiAgICAgICAgICAgIHdvcmtlci5jYWxsKCJzZXRPcHRpb25zIiwgW3tjb250ZXh0OiB0aGlzLmZyYWdtZW50Q29udGV4dH1dKTsKCiAgICAgICAgd29ya2VyLm9uKCJlcnJvciIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvaHRtbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hcmtkb3duX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9jb25maWciLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBtb2RlcyA9IHJlcXVpcmUoIi4uL2NvbmZpZyIpLiRtb2RlczsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIGVzY2FwZWQgPSBmdW5jdGlvbihjaCkgewogICAgcmV0dXJuICIoPzpbXiIgKyBsYW5nLmVzY2FwZVJlZ0V4cChjaCkgKyAiXFxcXF18XFxcXC4pKiI7Cn07Cgp2YXIgTWFya2Rvd25IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CiAgICB2YXIgY29kZUJsb2NrU3RhcnRSdWxlID0gewogICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgIHJlZ2V4IDogL15ccyooYGBgK1teYF0qfH5+fitbXn5dKikkLywKICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgc3RhdGUsIHN0YWNrLCBsaW5lKSB7CiAgICAgICAgICAgIHZhciBtID0gdmFsdWUubWF0Y2goL14oXHMqKShbYH5dKykoLiopLyk7CiAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IC9bXHctXSt8JC8uZXhlYyhtWzNdKVswXTsKICAgICAgICAgICAgaWYgKCFtb2Rlc1tsYW5ndWFnZV0pCiAgICAgICAgICAgICAgICBsYW5ndWFnZSA9ICIiOwogICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJnaXRodWJibG9jayIsIFtdLCBbbVsxXSwgbVsyXSwgbGFuZ3VhZ2VdLCBzdGF0ZSk7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgIH0sCiAgICAgICAgbmV4dCAgOiAiZ2l0aHViYmxvY2siCiAgICB9OwogICAgdmFyIGNvZGVCbG9ja1J1bGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICByZWdleCA6ICIuKiIsCiAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIHN0YXRlLCBzdGFjaywgbGluZSkgewogICAgICAgICAgICB2YXIgZW1iZWRTdGF0ZSA9IHN0YWNrWzFdOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gc3RhY2tbMl1bMF07CiAgICAgICAgICAgIHZhciBlbmRNYXJrZXIgPSBzdGFja1syXVsxXTsKICAgICAgICAgICAgdmFyIGxhbmd1YWdlID0gc3RhY2tbMl1bMl07CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbSA9IC9eKFxzKikoYCt8fispXHMqJC8uZXhlYyh2YWx1ZSk7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgIG0gJiYgbVsxXS5sZW5ndGggPCBpbmRlbnQubGVuZ3RoICsgMwogICAgICAgICAgICAgICAgJiYgbVsyXS5sZW5ndGggPj0gZW5kTWFya2VyLmxlbmd0aCAmJiBtWzJdWzBdID09IGVuZE1hcmtlclswXQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAzKTsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgaWYgKGxhbmd1YWdlICYmIG1vZGVzW2xhbmd1YWdlXSkgewogICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBtb2Rlc1tsYW5ndWFnZV0uZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2Vucyh2YWx1ZSwgZW1iZWRTdGF0ZS5zbGljZSgwKSk7CiAgICAgICAgICAgICAgICBzdGFja1sxXSA9IGRhdGEuc3RhdGU7CiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS50b2tlbnM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgfQogICAgfV07CgogICAgdGhpcy4kcnVsZXNbInN0YXJ0Il0udW5zaGlmdCh7CiAgICAgICAgdG9rZW4gOiAiZW1wdHlfbGluZSIsCiAgICAgICAgcmVnZXggOiAnXiQnLAogICAgICAgIG5leHQ6ICJhbGxvd0Jsb2NrIgogICAgfSwgeyAvLyBoMQogICAgICAgIHRva2VuOiAibWFya3VwLmhlYWRpbmcuMSIsCiAgICAgICAgcmVnZXg6ICJePSsoPz1cXHMqJCkiCiAgICB9LCB7IC8vIGgyCiAgICAgICAgdG9rZW46ICJtYXJrdXAuaGVhZGluZy4yIiwKICAgICAgICByZWdleDogIl5cXC0rKD89XFxzKiQpIgogICAgfSwgewogICAgICAgIHRva2VuIDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICJtYXJrdXAuaGVhZGluZy4iICsgdmFsdWUubGVuZ3RoOwogICAgICAgIH0sCiAgICAgICAgcmVnZXggOiAvXiN7MSw2fSg/PVxzfCQpLywKICAgICAgICBuZXh0IDogImhlYWRlciIKICAgIH0sCiAgICBjb2RlQmxvY2tTdGFydFJ1bGUsCiAgICB7IC8vIGJsb2NrIHF1b3RlCiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmJsb2NrcXVvdGUiLAogICAgICAgIHJlZ2V4IDogIl5cXHMqPlxccyooPzpbKistXXxcXGQrXFwuKT9cXHMrIiwKICAgICAgICBuZXh0ICA6ICJibG9ja3F1b3RlIgogICAgfSwgeyAvLyBIUiAqIC0gXwogICAgICAgIHRva2VuIDogImNvbnN0YW50IiwKICAgICAgICByZWdleCA6ICJeIHswLDN9KD86KD86XFwqID8pezMsfXwoPzpcXC0gPyl7Myx9fCg/OlxcXyA/KXszLH0pXFxzKiQiLAogICAgICAgIG5leHQ6ICJhbGxvd0Jsb2NrIgogICAgfSwgeyAvLyBsaXN0CiAgICAgICAgdG9rZW4gOiAibWFya3VwLmxpc3QiLAogICAgICAgIHJlZ2V4IDogIl5cXHN7MCwzfSg/OlsqKy1dfFxcZCtcXC4pXFxzKyIsCiAgICAgICAgbmV4dCAgOiAibGlzdGJsb2NrLXN0YXJ0IgogICAgfSwgewogICAgICAgIGluY2x1ZGUgOiAiYmFzaWMiCiAgICB9KTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICAiYmFzaWMiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFxbXFxgKl97fVxbXF0oKSMrXC0uIV0vCiAgICAgICAgfSwgeyAvLyBjb2RlIHNwYW4gYAogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiAiKGArKSguKj9bXmBdKShcXDEpIgogICAgICAgIH0sIHsgLy8gcmVmZXJlbmNlCiAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgImNvbnN0YW50IiwgInRleHQiLCAidXJsIiwgInN0cmluZyIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4IDogIl4oWyBdezAsM31cXFspKFteXFxdXSspKFxcXTpcXHMqKShbXiBdKykoXFxzKig/OltcIl1bXlwiXStbXCJdKT8oXFxzKikpJCIKICAgICAgICB9LCB7IC8vIGxpbmsgYnkgcmVmZXJlbmNlCiAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgInN0cmluZyIsICJ0ZXh0IiwgImNvbnN0YW50IiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXggOiAiKFxcWykoIiArIGVzY2FwZWQoIl0iKSArICIpKFxcXVxccypcXFspKCIrIGVzY2FwZWQoIl0iKSArICIpKFxcXSkiCiAgICAgICAgfSwgeyAvLyBsaW5rIGJ5IHVybAogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJzdHJpbmciLCAidGV4dCIsICJtYXJrdXAudW5kZXJsaW5lIiwgInN0cmluZyIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXCE/XFxbKSgiICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gWwogICAgICAgICAgICAgICAgICAgIGVzY2FwZWQoIl0iKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGluayB0ZXh0IG9yIGFsdCB0ZXh0CiAgICAgICAgICAgICAgICAgICAgIikoXFxdXFwoKSIrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBdKAogICAgICAgICAgICAgICAgICAgICcoKD86W15cXClcXHNcXFxcXXxcXFxcLnxcXHMoPz1bXiJdKSkqKScgKyAgICAgICAgLy8gaHJlZiBvciBpbWFnZQogICAgICAgICAgICAgICAgICAgICcoXFxzKiInICsgIGVzY2FwZWQoJyInKSArICciXFxzKik/JyArICAgICAgICAgICAgLy8gInRpdGxlIgogICAgICAgICAgICAgICAgICAgICIoXFwpKSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKQogICAgICAgIH0sIHsgLy8gc3Ryb25nICoqIF9fCiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdHJvbmciLAogICAgICAgICAgICByZWdleCA6ICIoWypdezJ9fFtfXXsyfSg/PVxcUykpKC4qP1xcU1sqX10qKShcXDEpIgogICAgICAgIH0sIHsgLy8gZW1waGFzaXMgKiBfCiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbXBoYXNpcyIsCiAgICAgICAgICAgIHJlZ2V4IDogIihbKl18W19dKD89XFxTKSkoLio/XFxTWypfXSopKFxcMSkiCiAgICAgICAgfSwgeyAvLwogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJ1cmwiLCAidGV4dCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIisKICAgICAgICAgICAgICAgICAgICAgICIoPzpodHRwcz98ZnRwfGRpY3QpOlteJ1wiPlxcc10rIisKICAgICAgICAgICAgICAgICAgICAgICJ8IisKICAgICAgICAgICAgICAgICAgICAgICIoPzptYWlsdG86KT9bLS5cXHddK1xcQFstYS16MC05XSsoPzpcXC5bLWEtejAtOV0rKSpcXC5bYS16XSsiKwogICAgICAgICAgICAgICAgICAgICIpKD4pIgogICAgICAgIH1dLAogICAgICAgICJhbGxvd0Jsb2NrIjogWwogICAgICAgICAgICB7dG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsIHJlZ2V4IDogIl4gezR9LisiLCBuZXh0IDogImFsbG93QmxvY2sifSwKICAgICAgICAgICAge3Rva2VuIDogImVtcHR5X2xpbmUiLCByZWdleCA6ICdeJCcsIG5leHQ6ICJhbGxvd0Jsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJlbXB0eSIsIHJlZ2V4IDogIiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0sCgogICAgICAgICJoZWFkZXIiIDogW3sKICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJiYXNpYyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJoZWFkaW5nIgogICAgICAgIH0gXSwKCiAgICAgICAgImxpc3RibG9jay1zdGFydCIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAvKD86XFtbIHhdXF0pPy8sCiAgICAgICAgICAgIG5leHQgIDogImxpc3RibG9jayIKICAgICAgICB9XSwKCiAgICAgICAgImxpc3RibG9jayIgOiBbIHsgLy8gTGlzdHMgb25seSBlc2NhcGUgb24gY29tcGxldGVseSBibGFuayBsaW5lcy4KICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHlfbGluZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIl4kIiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfSwgeyAvLyBsaXN0CiAgICAgICAgICAgIHRva2VuIDogIm1hcmt1cC5saXN0IiwKICAgICAgICAgICAgcmVnZXggOiAiXlxcc3swLDN9KD86WyorLV18XFxkK1xcLilcXHMrIiwKICAgICAgICAgICAgbmV4dCAgOiAibGlzdGJsb2NrLXN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6ICJiYXNpYyIsIG5vRXNjYXBlOiB0cnVlCiAgICAgICAgfSwKICAgICAgICBjb2RlQmxvY2tTdGFydFJ1bGUsCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAibGlzdCIgLy9kbyBub3QgdXNlIG1hcmt1cC5saXN0IHRvIGFsbG93IHN0bGluZyBsZWFkaW5nIGAqYCBkaWZmZXJudGx5CiAgICAgICAgfSBdLAoKICAgICAgICAiYmxvY2txdW90ZSIgOiBbIHsgLy8gQmxvY2txdW90ZXMgb25seSBlc2NhcGUgb24gYmxhbmsgbGluZXMuCiAgICAgICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgICAgICByZWdleCA6ICJeXFxzKiQiLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9LCB7IC8vIGJsb2NrIHF1b3RlCiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5ibG9ja3F1b3RlIiwKICAgICAgICAgICAgcmVnZXggOiAiXlxccyo+XFxzKig/OlsqKy1dfFxcZCtcXC4pP1xccysiLAogICAgICAgICAgICBuZXh0ICA6ICJibG9ja3F1b3RlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6ICJiYXNpYyIsIG5vRXNjYXBlOiB0cnVlCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmJsb2NrcXVvdGUiCiAgICAgICAgfSBdLAoKICAgICAgICAiZ2l0aHViYmxvY2siIDogY29kZUJsb2NrUnVsZXMKICAgIH0pOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKb29wLmluaGVyaXRzKE1hcmtkb3duSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLk1hcmtkb3duSGlnaGxpZ2h0UnVsZXMgPSBNYXJrZG93bkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9tYXJrZG93biIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gL14oPzpbPS1dK1xzKiR8I3sxLDZ9IHxgezN9KS87CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIGlmICghdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICBpZiAobGluZVswXSA9PSAiYCIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uYmdUb2tlbml6ZXIuZ2V0U3RhdGUocm93KSA9PSAic3RhcnQiKQogICAgICAgICAgICAgICAgcmV0dXJuICJlbmQiOwogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAic3RhcnQiOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoIWxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIGlmIChsaW5lWzBdID09ICJgIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpICE9PSAic3RhcnQiKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gImAiICYgbGluZS5zdWJzdHJpbmcoMCwgMykgPT0gImBgYCIpCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIHJvdywgMCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB3aGlsZSAocm93IC0tID4gMCkgewogICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICBpZiAobGluZVswXSA9PSAiYCIgJiBsaW5lLnN1YnN0cmluZygwLCAzKSA9PSAiYGBgIikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHJvdywgbGluZS5sZW5ndGgsIHN0YXJ0Um93LCAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHRva2VuOwogICAgICAgIGZ1bmN0aW9uIGlzSGVhZGluZyhyb3cpIHsKICAgICAgICAgICAgdG9rZW4gPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpWzBdOwogICAgICAgICAgICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHlwZS5sYXN0SW5kZXhPZihoZWFkaW5nLCAwKSA9PT0gMDsKICAgICAgICB9CgogICAgICAgIHZhciBoZWFkaW5nID0gIm1hcmt1cC5oZWFkaW5nIjsKICAgICAgICBmdW5jdGlvbiBnZXRMZXZlbCgpIHsKICAgICAgICAgICAgdmFyIGNoID0gdG9rZW4udmFsdWVbMF07CiAgICAgICAgICAgIGlmIChjaCA9PSAiPSIpIHJldHVybiA2OwogICAgICAgICAgICBpZiAoY2ggPT0gIi0iKSByZXR1cm4gNTsKICAgICAgICAgICAgcmV0dXJuIDcgLSB0b2tlbi52YWx1ZS5zZWFyY2goL1teI118JC8pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzSGVhZGluZyhyb3cpKSB7CiAgICAgICAgICAgIHZhciBzdGFydEhlYWRpbmdMZXZlbCA9IGdldExldmVsKCk7CiAgICAgICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICAgICAgaWYgKCFpc0hlYWRpbmcocm93KSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IGdldExldmVsKCk7CiAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPj0gc3RhcnRIZWFkaW5nTGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdyAtICghdG9rZW4gfHwgWyI9IiwgIi0iXS5pbmRleE9mKHRva2VuLnZhbHVlWzBdKSA9PSAtMSA/IDEgOiAyKTsKCiAgICAgICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICAgICAgd2hpbGUgKGVuZFJvdyA+IHN0YXJ0Um93ICYmIC9eXHMqJC8udGVzdChzZXNzaW9uLmdldExpbmUoZW5kUm93KSkpCiAgICAgICAgICAgICAgICAgICAgZW5kUm93LS07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3NoX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIHJlc2VydmVkS2V5d29yZHMgPSBleHBvcnRzLnJlc2VydmVkS2V5d29yZHMgPSAoCiAgICAgICAgJyF8e3x9fGNhc2V8ZG98ZG9uZXxlbGlmfGVsc2V8JysKICAgICAgICAnZXNhY3xmaXxmb3J8aWZ8aW58dGhlbnx1bnRpbHx3aGlsZXwnKwogICAgICAgICcmfDt8ZXhwb3J0fGxvY2FsfHJlYWR8dHlwZXNldHx1bnNldHwnKwogICAgICAgICdlbGlmfHNlbGVjdHxzZXR8ZnVuY3Rpb258ZGVjbGFyZXxyZWFkb25seScKICAgICk7Cgp2YXIgbGFuZ3VhZ2VDb25zdHJ1Y3RzID0gZXhwb3J0cy5sYW5ndWFnZUNvbnN0cnVjdHMgPSAoCiAgICAnW3xdfGFsaWFzfGJnfGJpbmR8YnJlYWt8YnVpbHRpbnwnKwogICAgICdjZHxjb21tYW5kfGNvbXBnZW58Y29tcGxldGV8Y29udGludWV8JysKICAgICAnZGlyc3xkaXNvd258ZWNob3xlbmFibGV8ZXZhbHxleGVjfCcrCiAgICAgJ2V4aXR8ZmN8Zmd8Z2V0b3B0c3xoYXNofGhlbHB8aGlzdG9yeXwnKwogICAgICdqb2JzfGtpbGx8bGV0fGxvZ291dHxwb3BkfHByaW50ZnxwdXNoZHwnKwogICAgICdwd2R8cmV0dXJufHNldHxzaGlmdHxzaG9wdHxzb3VyY2V8JysKICAgICAnc3VzcGVuZHx0ZXN0fHRpbWVzfHRyYXB8dHlwZXx1bGltaXR8JysKICAgICAndW1hc2t8dW5hbGlhc3x3YWl0JwopOwoKdmFyIFNoSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZCI6IHJlc2VydmVkS2V5d29yZHMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24uYnVpbHRpbiI6IGxhbmd1YWdlQ29uc3RydWN0cywKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIgogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaW50ZWdlciA9ICIoPzooPzpbMS05XVxcZCopfCg/OjApKSI7CgogICAgdmFyIGZyYWN0aW9uID0gIig/OlxcLlxcZCspIjsKICAgIHZhciBpbnRQYXJ0ID0gIig/OlxcZCspIjsKICAgIHZhciBwb2ludEZsb2F0ID0gIig/Oig/OiIgKyBpbnRQYXJ0ICsgIj8iICsgZnJhY3Rpb24gKyAiKXwoPzoiICsgaW50UGFydCArICJcXC4pKSI7CiAgICB2YXIgZXhwb25lbnRGbG9hdCA9ICIoPzooPzoiICsgcG9pbnRGbG9hdCArICJ8IiArICBpbnRQYXJ0ICsgIikiICsgIikiOwogICAgdmFyIGZsb2F0TnVtYmVyID0gIig/OiIgKyBleHBvbmVudEZsb2F0ICsgInwiICsgcG9pbnRGbG9hdCArICIpIjsKICAgIHZhciBmaWxlRGVzY3JpcHRvciA9ICIoPzomIiArIGludFBhcnQgKyAiKSI7CgogICAgdmFyIHZhcmlhYmxlTmFtZSA9ICJbYS16QS1aX11bYS16QS1aMC05X10qIjsKICAgIHZhciB2YXJpYWJsZSA9ICIoPzoiICsgdmFyaWFibGVOYW1lICsgIig/PT0pKSI7CgogICAgdmFyIGJ1aWx0aW5WYXJpYWJsZSA9ICIoPzpcXCQoPzpTSExWTHxcXCR8XFwhfFxcPykpIjsKCiAgICB2YXIgZnVuYyA9ICIoPzoiICsgdmFyaWFibGVOYW1lICsgIlxccypcXChcXCkpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQiLAogICAgICAgICAgICByZWdleCA6IC9cXC4vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJjb21tZW50Il0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhefFxzKSgjLiopJC8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/OlskYCJcXF18JCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAidmFyaWFibGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvIC8vIFRPRE8gaGlnaGxpZ2h0IGAKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcJCciLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/OlthYmVFZm5ydHZcXCciXXx4W2EtZkEtRlxkXXsxLDJ9fHVbYS1mQS1GXGRdezR9KFthLWZBLUZcZF17NH0pP3xjLnxcZHsxLDN9KS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXggOiAiPDw8IiwKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHN0YXRlTmFtZTogImhlcmVkb2MiLAogICAgICAgICAgICByZWdleCA6ICIoPDwtPykoXFxzKikoWydcImBdPykoW1xcd1xcLV0rKShbJ1wiYF0/KSIsCiAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdmFyIG5leHQgPSB2YWx1ZVsyXSA9PSAnLScgPyAiaW5kZW50ZWRIZXJlZG9jIiA6ICJoZXJlZG9jIjsKICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0LCB0b2tlbnNbNF0pOwogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICB7dHlwZToiY29uc3RhbnQiLCB2YWx1ZTogdG9rZW5zWzFdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToidGV4dCIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgIHt0eXBlOiJzdHJpbmciLCB2YWx1ZTogdG9rZW5zWzNdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3VwcG9ydC5jbGFzcyIsIHZhbHVlOiB0b2tlbnNbNF19LAogICAgICAgICAgICAgICAgICAgIHt0eXBlOiJzdHJpbmciLCB2YWx1ZTogdG9rZW5zWzVdfQogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcnVsZXM6IHsKICAgICAgICAgICAgICAgIGhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogIGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5jbGFzcyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgIGluZGVudGVkSGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJeXHQrIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6ICBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXggOiAiJCIsCiAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgbmV4dCA6IGZ1bmN0aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gImhlcmVkb2MiIHx8IHN0YWNrWzBdID09PSAiaW5kZW50ZWRIZXJlZG9jIikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2tbMF07CiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0YXRlOwogICAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgInRleHQiLCAidGV4dCIsICJ2YXJpYWJsZSJdLAogICAgICAgICAgICByZWdleCA6IC8oZGVjbGFyZXxsb2NhbHxyZWFkb25seSkoXHMrKSg/OigtW2ZpeGFyXSspKFxzKykpPyhbYS16QS1aX11bYS16QS1aMC05X10qXGIpLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleCA6IGJ1aWx0aW5WYXJpYWJsZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6IHZhcmlhYmxlCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogInZhcmlhYmxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6IGZ1bmMKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6IGZpbGVEZXNjcmlwdG9yCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgc3RhcnQgOiAiJyIsIGVuZCA6ICInIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogZmxvYXROdW1iZXIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4IDogaW50ZWdlciArICJcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfXVthLXpBLVowLTlfXSpcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiXFwrfFxcLXxcXCp8XFwqXFwqfFxcL3xcXC9cXC98fnw8fD58PD18PT58PXwhPXxbJSZ8YF0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIjsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxbXFwoXFx7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXF1dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKVxcfV0iLAogICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICB9XSwKICAgICAgICB2YXJpYWJsZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShcdyspLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInZhcmlhYmxlIiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICByZWdleCA6IC8oXCQpKFwoKS8sCiAgICAgICAgICAgIHB1c2ggOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsidmFyaWFibGUiLCAicGFyZW4ubHBhcmVuIiwgImtleXdvcmQub3BlcmF0b3IiLCAidmFyaWFibGUiLCAia2V5d29yZC5vcGVyYXRvciJdLAogICAgICAgICAgICByZWdleCA6IC8oXCQpKFx7KShbIyFdPykoXHcrfFsqQCM/XC0kITBfXSkoOls/K1wtPV0/fCMjP3wlJT98LCw/XC98XF5cXj8pPy8sCiAgICAgICAgICAgIHB1c2ggOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1wkWypAIz9cLSQhMF9dLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInZhcmlhYmxlIiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICByZWdleCA6IC8oXCQpKFx7KS8sCiAgICAgICAgICAgIHB1c2ggOiAic3RhcnQiCiAgICAgICAgfV0KICAgIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhTaEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5TaEhpZ2hsaWdodFJ1bGVzID0gU2hIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3NoIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvc2hfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgU2hIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc2hfaGlnaGxpZ2h0X3J1bGVzIikuU2hIaWdobGlnaHRSdWxlczsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTaEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgIAogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKltce1woXFs6XVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB2YXIgb3V0ZGVudHMgPSB7CiAgICAgICAgInBhc3MiOiAxLAogICAgICAgICJyZXR1cm4iOiAxLAogICAgICAgICJyYWlzZSI6IDEsCiAgICAgICAgImJyZWFrIjogMSwKICAgICAgICAiY29udGludWUiOiAxCiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKGlucHV0ICE9PSAiXHJcbiIgJiYgaW5wdXQgIT09ICJcciIgJiYgaW5wdXQgIT09ICJcbiIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLnRyaW0oKSwgc3RhdGUpLnRva2VuczsKCiAgICAgICAgaWYgKCF0b2tlbnMpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBkbyB7CiAgICAgICAgICAgIHZhciBsYXN0ID0gdG9rZW5zLnBvcCgpOwogICAgICAgIH0gd2hpbGUgKGxhc3QgJiYgKGxhc3QudHlwZSA9PSAiY29tbWVudCIgfHwgKGxhc3QudHlwZSA9PSAidGV4dCIgJiYgbGFzdC52YWx1ZS5tYXRjaCgvXlxzKyQvKSkpKTsKCiAgICAgICAgaWYgKCFsYXN0KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAobGFzdC50eXBlID09ICJrZXl3b3JkIiAmJiBvdXRkZW50c1tsYXN0LnZhbHVlXSk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKCiAgICAgICAgcm93ICs9IDE7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShyb3cpKTsKICAgICAgICB2YXIgdGFiID0gZG9jLmdldFRhYlN0cmluZygpOwogICAgICAgIGlmIChpbmRlbnQuc2xpY2UoLXRhYi5sZW5ndGgpID09IHRhYikKICAgICAgICAgICAgZG9jLnJlbW92ZShuZXcgUmFuZ2Uocm93LCBpbmRlbnQubGVuZ3RoLXRhYi5sZW5ndGgsIHJvdywgaW5kZW50Lmxlbmd0aCkpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zaCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hcmtkb3duIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL3htbCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL21hcmtkb3duIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9zaCIsImFjZS9tb2RlL3NoIiwiYWNlL21vZGUveG1sIiwiYWNlL21vZGUvY3NzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgWG1sTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuTW9kZTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIE1hcmtkb3duSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL21hcmtkb3duX2hpZ2hsaWdodF9ydWxlcyIpLk1hcmtkb3duSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXJrZG93bkZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL21hcmtkb3duIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IE1hcmtkb3duSGlnaGxpZ2h0UnVsZXM7CgogICAgdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsKICAgICAgICBqYXZhc2NyaXB0OiByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlLAogICAgICAgIGh0bWw6IHJlcXVpcmUoIi4vaHRtbCIpLk1vZGUsCiAgICAgICAgYmFzaDogcmVxdWlyZSgiLi9zaCIpLk1vZGUsCiAgICAgICAgc2g6IHJlcXVpcmUoIi4vc2giKS5Nb2RlLAogICAgICAgIHhtbDogcmVxdWlyZSgiLi94bWwiKS5Nb2RlLAogICAgICAgIGNzczogcmVxdWlyZSgiLi9jc3MiKS5Nb2RlCiAgICB9KTsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBNYXJrZG93bkZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy50eXBlID0gInRleHQiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICI8IS0tIiwgZW5kOiAiLS0+In07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICJgIjogImAifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIGlmIChzdGF0ZSA9PSAibGlzdGJsb2NrIikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXihccyopKD86KFstKypdKXwoXGQrKVwuKShccyspLy5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW1hdGNoKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB2YXIgbWFya2VyID0gbWF0Y2hbMl07CiAgICAgICAgICAgIGlmICghbWFya2VyKQogICAgICAgICAgICAgICAgbWFya2VyID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKSArIDEgKyAiLiI7CiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXSArIG1hcmtlciArIG1hdGNoWzRdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL21hcmtkb3duIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvbWFya2Rvd24iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-mask.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgc3VwcG9ydFR5cGUgPSBleHBvcnRzLnN1cHBvcnRUeXBlID0gImFsaWduLWNvbnRlbnR8YWxpZ24taXRlbXN8YWxpZ24tc2VsZnxhbGx8YW5pbWF0aW9ufGFuaW1hdGlvbi1kZWxheXxhbmltYXRpb24tZGlyZWN0aW9ufGFuaW1hdGlvbi1kdXJhdGlvbnxhbmltYXRpb24tZmlsbC1tb2RlfGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnR8YW5pbWF0aW9uLW5hbWV8YW5pbWF0aW9uLXBsYXktc3RhdGV8YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbnxiYWNrZmFjZS12aXNpYmlsaXR5fGJhY2tncm91bmR8YmFja2dyb3VuZC1hdHRhY2htZW50fGJhY2tncm91bmQtYmxlbmQtbW9kZXxiYWNrZ3JvdW5kLWNsaXB8YmFja2dyb3VuZC1jb2xvcnxiYWNrZ3JvdW5kLWltYWdlfGJhY2tncm91bmQtb3JpZ2lufGJhY2tncm91bmQtcG9zaXRpb258YmFja2dyb3VuZC1yZXBlYXR8YmFja2dyb3VuZC1zaXplfGJvcmRlcnxib3JkZXItYm90dG9tfGJvcmRlci1ib3R0b20tY29sb3J8Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1c3xib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1c3xib3JkZXItYm90dG9tLXN0eWxlfGJvcmRlci1ib3R0b20td2lkdGh8Ym9yZGVyLWNvbGxhcHNlfGJvcmRlci1jb2xvcnxib3JkZXItaW1hZ2V8Ym9yZGVyLWltYWdlLW91dHNldHxib3JkZXItaW1hZ2UtcmVwZWF0fGJvcmRlci1pbWFnZS1zbGljZXxib3JkZXItaW1hZ2Utc291cmNlfGJvcmRlci1pbWFnZS13aWR0aHxib3JkZXItbGVmdHxib3JkZXItbGVmdC1jb2xvcnxib3JkZXItbGVmdC1zdHlsZXxib3JkZXItbGVmdC13aWR0aHxib3JkZXItcmFkaXVzfGJvcmRlci1yaWdodHxib3JkZXItcmlnaHQtY29sb3J8Ym9yZGVyLXJpZ2h0LXN0eWxlfGJvcmRlci1yaWdodC13aWR0aHxib3JkZXItc3BhY2luZ3xib3JkZXItc3R5bGV8Ym9yZGVyLXRvcHxib3JkZXItdG9wLWNvbG9yfGJvcmRlci10b3AtbGVmdC1yYWRpdXN8Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXN8Ym9yZGVyLXRvcC1zdHlsZXxib3JkZXItdG9wLXdpZHRofGJvcmRlci13aWR0aHxib3R0b218Ym94LXNoYWRvd3xib3gtc2l6aW5nfGNhcHRpb24tc2lkZXxjbGVhcnxjbGlwfGNvbG9yfGNvbHVtbi1jb3VudHxjb2x1bW4tZmlsbHxjb2x1bW4tZ2FwfGNvbHVtbi1ydWxlfGNvbHVtbi1ydWxlLWNvbG9yfGNvbHVtbi1ydWxlLXN0eWxlfGNvbHVtbi1ydWxlLXdpZHRofGNvbHVtbi1zcGFufGNvbHVtbi13aWR0aHxjb2x1bW5zfGNvbnRlbnR8Y291bnRlci1pbmNyZW1lbnR8Y291bnRlci1yZXNldHxjdXJzb3J8ZGlyZWN0aW9ufGRpc3BsYXl8ZW1wdHktY2VsbHN8ZmlsdGVyfGZsZXh8ZmxleC1iYXNpc3xmbGV4LWRpcmVjdGlvbnxmbGV4LWZsb3d8ZmxleC1ncm93fGZsZXgtc2hyaW5rfGZsZXgtd3JhcHxmbG9hdHxmb250fGZvbnQtZmFtaWx5fGZvbnQtc2l6ZXxmb250LXNpemUtYWRqdXN0fGZvbnQtc3RyZXRjaHxmb250LXN0eWxlfGZvbnQtdmFyaWFudHxmb250LXdlaWdodHxoYW5naW5nLXB1bmN0dWF0aW9ufGhlaWdodHxqdXN0aWZ5LWNvbnRlbnR8bGVmdHxsZXR0ZXItc3BhY2luZ3xsaW5lLWhlaWdodHxsaXN0LXN0eWxlfGxpc3Qtc3R5bGUtaW1hZ2V8bGlzdC1zdHlsZS1wb3NpdGlvbnxsaXN0LXN0eWxlLXR5cGV8bWFyZ2lufG1hcmdpbi1ib3R0b218bWFyZ2luLWxlZnR8bWFyZ2luLXJpZ2h0fG1hcmdpbi10b3B8bWF4LWhlaWdodHxtYXgtd2lkdGh8bWF4LXpvb218bWluLWhlaWdodHxtaW4td2lkdGh8bWluLXpvb218bmF2LWRvd258bmF2LWluZGV4fG5hdi1sZWZ0fG5hdi1yaWdodHxuYXYtdXB8b3BhY2l0eXxvcmRlcnxvdXRsaW5lfG91dGxpbmUtY29sb3J8b3V0bGluZS1vZmZzZXR8b3V0bGluZS1zdHlsZXxvdXRsaW5lLXdpZHRofG92ZXJmbG93fG92ZXJmbG93LXh8b3ZlcmZsb3cteXxwYWRkaW5nfHBhZGRpbmctYm90dG9tfHBhZGRpbmctbGVmdHxwYWRkaW5nLXJpZ2h0fHBhZGRpbmctdG9wfHBhZ2UtYnJlYWstYWZ0ZXJ8cGFnZS1icmVhay1iZWZvcmV8cGFnZS1icmVhay1pbnNpZGV8cGVyc3BlY3RpdmV8cGVyc3BlY3RpdmUtb3JpZ2lufHBvc2l0aW9ufHF1b3Rlc3xyZXNpemV8cmlnaHR8dGFiLXNpemV8dGFibGUtbGF5b3V0fHRleHQtYWxpZ258dGV4dC1hbGlnbi1sYXN0fHRleHQtZGVjb3JhdGlvbnx0ZXh0LWRlY29yYXRpb24tY29sb3J8dGV4dC1kZWNvcmF0aW9uLWxpbmV8dGV4dC1kZWNvcmF0aW9uLXN0eWxlfHRleHQtaW5kZW50fHRleHQtanVzdGlmeXx0ZXh0LW92ZXJmbG93fHRleHQtc2hhZG93fHRleHQtdHJhbnNmb3JtfHRvcHx0cmFuc2Zvcm18dHJhbnNmb3JtLW9yaWdpbnx0cmFuc2Zvcm0tc3R5bGV8dHJhbnNpdGlvbnx0cmFuc2l0aW9uLWRlbGF5fHRyYW5zaXRpb24tZHVyYXRpb258dHJhbnNpdGlvbi1wcm9wZXJ0eXx0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbnx1bmljb2RlLWJpZGl8dXNlci1zZWxlY3R8dXNlci16b29tfHZlcnRpY2FsLWFsaWdufHZpc2liaWxpdHl8d2hpdGUtc3BhY2V8d2lkdGh8d29yZC1icmVha3x3b3JkLXNwYWNpbmd8d29yZC13cmFwfHotaW5kZXgiOwp2YXIgc3VwcG9ydEZ1bmN0aW9uID0gZXhwb3J0cy5zdXBwb3J0RnVuY3Rpb24gPSAicmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVycyI7CnZhciBzdXBwb3J0Q29uc3RhbnQgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudCA9ICJhYnNvbHV0ZXxhZnRlci1lZGdlfGFmdGVyfGFsbC1zY3JvbGx8YWxsfGFscGhhYmV0aWN8YWx3YXlzfGFudGlhbGlhc2VkfGFybWVuaWFufGF1dG98YXZvaWQtY29sdW1ufGF2b2lkLXBhZ2V8YXZvaWR8YmFsYW5jZXxiYXNlbGluZXxiZWZvcmUtZWRnZXxiZWZvcmV8YmVsb3d8YmlkaS1vdmVycmlkZXxibG9jay1saW5lLWhlaWdodHxibG9ja3xib2xkfGJvbGRlcnxib3JkZXItYm94fGJvdGh8Ym90dG9tfGJveHxicmVhay1hbGx8YnJlYWstd29yZHxjYXBpdGFsaXplfGNhcHMtaGVpZ2h0fGNhcHRpb258Y2VudGVyfGNlbnRyYWx8Y2hhcnxjaXJjbGV8Y2prLWlkZW9ncmFwaGljfGNsb25lfGNsb3NlLXF1b3RlfGNvbC1yZXNpemV8Y29sbGFwc2V8Y29sdW1ufGNvbnNpZGVyLXNoaWZ0c3xjb250YWlufGNvbnRlbnQtYm94fGNvdmVyfGNyb3NzaGFpcnxjdWJpYy1iZXppZXJ8ZGFzaGVkfGRlY2ltYWwtbGVhZGluZy16ZXJvfGRlY2ltYWx8ZGVmYXVsdHxkaXNhYmxlZHxkaXNjfGRpc3JlZ2FyZC1zaGlmdHN8ZGlzdHJpYnV0ZS1hbGwtbGluZXN8ZGlzdHJpYnV0ZS1sZXR0ZXJ8ZGlzdHJpYnV0ZS1zcGFjZXxkaXN0cmlidXRlfGRvdHRlZHxkb3VibGV8ZS1yZXNpemV8ZWFzZS1pbnxlYXNlLWluLW91dHxlYXNlLW91dHxlYXNlfGVsbGlwc2lzfGVuZHxleGNsdWRlLXJ1Ynl8ZmlsbHxmaXhlZHxnZW9yZ2lhbnxnbHlwaHN8Z3JpZC1oZWlnaHR8Z3Jvb3ZlfGhhbmR8aGFuZ2luZ3xoZWJyZXd8aGVscHxoaWRkZW58aGlyYWdhbmEtaXJvaGF8aGlyYWdhbmF8aG9yaXpvbnRhbHxpY29ufGlkZW9ncmFwaC1hbHBoYXxpZGVvZ3JhcGgtbnVtZXJpY3xpZGVvZ3JhcGgtcGFyZW50aGVzaXN8aWRlb2dyYXBoLXNwYWNlfGlkZW9ncmFwaGljfGluYWN0aXZlfGluY2x1ZGUtcnVieXxpbmhlcml0fGluaXRpYWx8aW5saW5lLWJsb2NrfGlubGluZS1ib3h8aW5saW5lLWxpbmUtaGVpZ2h0fGlubGluZS10YWJsZXxpbmxpbmV8aW5zZXR8aW5zaWRlfGludGVyLWlkZW9ncmFwaHxpbnRlci13b3JkfGludmVydHxpdGFsaWN8anVzdGlmeXxrYXRha2FuYS1pcm9oYXxrYXRha2FuYXxrZWVwLWFsbHxsYXN0fGxlZnR8bGlnaHRlcnxsaW5lLWVkZ2V8bGluZS10aHJvdWdofGxpbmV8bGluZWFyfGxpc3QtaXRlbXxsb2NhbHxsb29zZXxsb3dlci1hbHBoYXxsb3dlci1ncmVla3xsb3dlci1sYXRpbnxsb3dlci1yb21hbnxsb3dlcmNhc2V8bHItdGJ8bHRyfG1hdGhlbWF0aWNhbHxtYXgtaGVpZ2h0fG1heC1zaXplfG1lZGl1bXxtZW51fG1lc3NhZ2UtYm94fG1pZGRsZXxtb3ZlfG4tcmVzaXplfG5lLXJlc2l6ZXxuZXdzcGFwZXJ8bm8tY2hhbmdlfG5vLWNsb3NlLXF1b3RlfG5vLWRyb3B8bm8tb3Blbi1xdW90ZXxuby1yZXBlYXR8bm9uZXxub3JtYWx8bm90LWFsbG93ZWR8bm93cmFwfG53LXJlc2l6ZXxvYmxpcXVlfG9wZW4tcXVvdGV8b3V0c2V0fG91dHNpZGV8b3ZlcmxpbmV8cGFkZGluZy1ib3h8cGFnZXxwb2ludGVyfHByZS1saW5lfHByZS13cmFwfHByZXxwcmVzZXJ2ZS0zZHxwcm9ncmVzc3xyZWxhdGl2ZXxyZXBlYXQteHxyZXBlYXQteXxyZXBlYXR8cmVwbGFjZWR8cmVzZXQtc2l6ZXxyaWRnZXxyaWdodHxyb3VuZHxyb3ctcmVzaXplfHJ0bHxzLXJlc2l6ZXxzY3JvbGx8c2UtcmVzaXplfHNlcGFyYXRlfHNsaWNlfHNtYWxsLWNhcHN8c21hbGwtY2FwdGlvbnxzb2xpZHxzcGFjZXxzcXVhcmV8c3RhcnR8c3RhdGljfHN0YXR1cy1iYXJ8c3RlcC1lbmR8c3RlcC1zdGFydHxzdGVwc3xzdHJldGNofHN0cmljdHxzdWJ8c3VwZXJ8c3ctcmVzaXplfHRhYmxlLWNhcHRpb258dGFibGUtY2VsbHx0YWJsZS1jb2x1bW4tZ3JvdXB8dGFibGUtY29sdW1ufHRhYmxlLWZvb3Rlci1ncm91cHx0YWJsZS1oZWFkZXItZ3JvdXB8dGFibGUtcm93LWdyb3VwfHRhYmxlLXJvd3x0YWJsZXx0Yi1ybHx0ZXh0LWFmdGVyLWVkZ2V8dGV4dC1iZWZvcmUtZWRnZXx0ZXh0LWJvdHRvbXx0ZXh0LXNpemV8dGV4dC10b3B8dGV4dHx0aGlja3x0aGlufHRyYW5zcGFyZW50fHVuZGVybGluZXx1cHBlci1hbHBoYXx1cHBlci1sYXRpbnx1cHBlci1yb21hbnx1cHBlcmNhc2V8dXNlLXNjcmlwdHx2ZXJ0aWNhbC1pZGVvZ3JhcGhpY3x2ZXJ0aWNhbC10ZXh0fHZpc2libGV8dy1yZXNpemV8d2FpdHx3aGl0ZXNwYWNlfHotaW5kZXh8emVyb3x6b29tIjsKdmFyIHN1cHBvcnRDb25zdGFudENvbG9yID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnRDb2xvciA9ICJhbGljZWJsdWV8YW50aXF1ZXdoaXRlfGFxdWF8YXF1YW1hcmluZXxhenVyZXxiZWlnZXxiaXNxdWV8YmxhY2t8YmxhbmNoZWRhbG1vbmR8Ymx1ZXxibHVldmlvbGV0fGJyb3dufGJ1cmx5d29vZHxjYWRldGJsdWV8Y2hhcnRyZXVzZXxjaG9jb2xhdGV8Y29yYWx8Y29ybmZsb3dlcmJsdWV8Y29ybnNpbGt8Y3JpbXNvbnxjeWFufGRhcmtibHVlfGRhcmtjeWFufGRhcmtnb2xkZW5yb2R8ZGFya2dyYXl8ZGFya2dyZWVufGRhcmtncmV5fGRhcmtraGFraXxkYXJrbWFnZW50YXxkYXJrb2xpdmVncmVlbnxkYXJrb3JhbmdlfGRhcmtvcmNoaWR8ZGFya3JlZHxkYXJrc2FsbW9ufGRhcmtzZWFncmVlbnxkYXJrc2xhdGVibHVlfGRhcmtzbGF0ZWdyYXl8ZGFya3NsYXRlZ3JleXxkYXJrdHVycXVvaXNlfGRhcmt2aW9sZXR8ZGVlcHBpbmt8ZGVlcHNreWJsdWV8ZGltZ3JheXxkaW1ncmV5fGRvZGdlcmJsdWV8ZmlyZWJyaWNrfGZsb3JhbHdoaXRlfGZvcmVzdGdyZWVufGZ1Y2hzaWF8Z2FpbnNib3JvfGdob3N0d2hpdGV8Z29sZHxnb2xkZW5yb2R8Z3JheXxncmVlbnxncmVlbnllbGxvd3xncmV5fGhvbmV5ZGV3fGhvdHBpbmt8aW5kaWFucmVkfGluZGlnb3xpdm9yeXxraGFraXxsYXZlbmRlcnxsYXZlbmRlcmJsdXNofGxhd25ncmVlbnxsZW1vbmNoaWZmb258bGlnaHRibHVlfGxpZ2h0Y29yYWx8bGlnaHRjeWFufGxpZ2h0Z29sZGVucm9keWVsbG93fGxpZ2h0Z3JheXxsaWdodGdyZWVufGxpZ2h0Z3JleXxsaWdodHBpbmt8bGlnaHRzYWxtb258bGlnaHRzZWFncmVlbnxsaWdodHNreWJsdWV8bGlnaHRzbGF0ZWdyYXl8bGlnaHRzbGF0ZWdyZXl8bGlnaHRzdGVlbGJsdWV8bGlnaHR5ZWxsb3d8bGltZXxsaW1lZ3JlZW58bGluZW58bWFnZW50YXxtYXJvb258bWVkaXVtYXF1YW1hcmluZXxtZWRpdW1ibHVlfG1lZGl1bW9yY2hpZHxtZWRpdW1wdXJwbGV8bWVkaXVtc2VhZ3JlZW58bWVkaXVtc2xhdGVibHVlfG1lZGl1bXNwcmluZ2dyZWVufG1lZGl1bXR1cnF1b2lzZXxtZWRpdW12aW9sZXRyZWR8bWlkbmlnaHRibHVlfG1pbnRjcmVhbXxtaXN0eXJvc2V8bW9jY2FzaW58bmF2YWpvd2hpdGV8bmF2eXxvbGRsYWNlfG9saXZlfG9saXZlZHJhYnxvcmFuZ2V8b3JhbmdlcmVkfG9yY2hpZHxwYWxlZ29sZGVucm9kfHBhbGVncmVlbnxwYWxldHVycXVvaXNlfHBhbGV2aW9sZXRyZWR8cGFwYXlhd2hpcHxwZWFjaHB1ZmZ8cGVydXxwaW5rfHBsdW18cG93ZGVyYmx1ZXxwdXJwbGV8cmViZWNjYXB1cnBsZXxyZWR8cm9zeWJyb3dufHJveWFsYmx1ZXxzYWRkbGVicm93bnxzYWxtb258c2FuZHlicm93bnxzZWFncmVlbnxzZWFzaGVsbHxzaWVubmF8c2lsdmVyfHNreWJsdWV8c2xhdGVibHVlfHNsYXRlZ3JheXxzbGF0ZWdyZXl8c25vd3xzcHJpbmdncmVlbnxzdGVlbGJsdWV8dGFufHRlYWx8dGhpc3RsZXx0b21hdG98dHVycXVvaXNlfHZpb2xldHx3aGVhdHx3aGl0ZXx3aGl0ZXNtb2tlfHllbGxvd3x5ZWxsb3dncmVlbiI7CnZhciBzdXBwb3J0Q29uc3RhbnRGb250cyA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Rm9udHMgPSAiYXJpYWx8Y2VudHVyeXxjb21pY3xjb3VyaWVyfGN1cnNpdmV8ZmFudGFzeXxnYXJhbW9uZHxnZW9yZ2lhfGhlbHZldGljYXxpbXBhY3R8bHVjaWRhfHN5bWJvbHxzeXN0ZW18dGFob21hfHRpbWVzfHRyZWJ1Y2hldHx1dG9waWF8dmVyZGFuYXx3ZWJkaW5nc3xzYW5zLXNlcmlmfHNlcmlmfG1vbm9zcGFjZSI7Cgp2YXIgbnVtUmUgPSBleHBvcnRzLm51bVJlID0gIlxcLT8oPzooPzpbMC05XSsoPzpcXC5bMC05XSspPyl8KD86XFwuWzAtOV0rKSkiOwp2YXIgcHNldWRvRWxlbWVudHMgPSBleHBvcnRzLnBzZXVkb0VsZW1lbnRzID0gIihcXDorKVxcYihhZnRlcnxiZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8bW96LXNlbGVjdGlvbnxzZWxlY3Rpb24pXFxiIjsKdmFyIHBzZXVkb0NsYXNzZXMgID0gZXhwb3J0cy5wc2V1ZG9DbGFzc2VzID0gICIoOilcXGIoYWN0aXZlfGNoZWNrZWR8ZGlzYWJsZWR8ZW1wdHl8ZW5hYmxlZHxmaXJzdC1jaGlsZHxmaXJzdC1vZi10eXBlfGZvY3VzfGhvdmVyfGluZGV0ZXJtaW5hdGV8aW52YWxpZHxsYXN0LWNoaWxkfGxhc3Qtb2YtdHlwZXxsaW5rfG5vdHxudGgtY2hpbGR8bnRoLWxhc3QtY2hpbGR8bnRoLWxhc3Qtb2YtdHlwZXxudGgtb2YtdHlwZXxvbmx5LWNoaWxkfG9ubHktb2YtdHlwZXxyZXF1aXJlZHxyb290fHRhcmdldHx2YWxpZHx2aXNpdGVkKVxcYiI7Cgp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBzdXBwb3J0RnVuY3Rpb24sCiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQiOiBzdXBwb3J0Q29uc3RhbnQsCiAgICAgICAgInN1cHBvcnQudHlwZSI6IHN1cHBvcnRUeXBlLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmNvbG9yIjogc3VwcG9ydENvbnN0YW50Q29sb3IsCiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuZm9udHMiOiBzdXBwb3J0Q29uc3RhbnRGb250cwogICAgfSwgInRleHQiLCB0cnVlKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAicnVsZXNldCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXH0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiQCg/IXZpZXdwb3J0KSIsCiAgICAgICAgICAgIG5leHQ6ICAibWVkaWEiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiJSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleDogIlxcLlthLXowLTktX10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICByZWdleCA6IG51bVJlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50IiwKICAgICAgICAgICAgcmVnZXg6ICJbYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICAibWVkaWEiOiBbewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXH0iLAogICAgICAgICAgICBuZXh0OiAgInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIjsiLAogICAgICAgICAgICBuZXh0OiAgInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIoPzptZWRpYXxzdXBwb3J0c3xkb2N1bWVudHxjaGFyc2V0fGltcG9ydHxuYW1lc3BhY2V8bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnQiCiAgICAgICAgICAgICAgICArICJ8cGFnZXxmb250fGtleWZyYW1lc3x2aWV3cG9ydHxjb3VudGVyLXN0eWxlfGZvbnQtZmVhdHVyZS12YWx1ZXMiCiAgICAgICAgICAgICAgICArICJ8c3dhc2h8b3JuYW1lbnRzfGFubm90YXRpb258c3R5bGlzdGljfHN0eWxlc2V0fGNoYXJhY3Rlci12YXJpYW50KSIKICAgICAgICB9XSwKCiAgICAgICAgImNvbW1lbnRzIiA6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleDogIlxcL1xcKiIsCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCgogICAgICAgICJydWxlc2V0IiA6IFt7CiAgICAgICAgICAgIHJlZ2V4IDogIi0od2Via2l0fG1zfG1venxvKS0iLAogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJbOjtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiXFx9IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJjb25zdGFudC5udW1lcmljIiwgImtleXdvcmQiXSwKICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxmcnxnZHxncmFkfEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bWF4fHZtaW58dm18dnd8JSkiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsICAvLyBoZXg2IGNvbG9yCiAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXs2fSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgzIGNvbG9yCiAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXszfSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWVsZW1lbnQuY3NzIl0sCiAgICAgICAgICAgIHJlZ2V4IDogcHNldWRvRWxlbWVudHMKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWNsYXNzLmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0NsYXNzZXMKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ1cmwiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIgogICAgICAgIH0sIHsKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0sCgogICAgICAgIHVybDogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OnVybCg6Py1wcmVmaXgpP3xkb21haW58cmVnZXhwKVxcKCIsCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICBzdHJpbmdzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlIDogImVzY2FwZXMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCQvLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQ6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcifCQnLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICBlc2NhcGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IC9cXChbYS1mQS1GXGRdezEsNn18W15hLWZBLUZcZF0pLwogICAgICAgIH1dCgogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ3NzSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkNzc0hpZ2hsaWdodFJ1bGVzID0gQ3NzSGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXJrZG93bl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvY29uZmlnIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbW9kZXMgPSByZXF1aXJlKCIuLi9jb25maWciKS4kbW9kZXM7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKCnZhciBlc2NhcGVkID0gZnVuY3Rpb24oY2gpIHsKICAgIHJldHVybiAiKD86W14iICsgbGFuZy5lc2NhcGVSZWdFeHAoY2gpICsgIlxcXFxdfFxcXFwuKSoiOwp9OwoKdmFyIE1hcmtkb3duSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwogICAgdmFyIGNvZGVCbG9ja1N0YXJ0UnVsZSA9IHsKICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICByZWdleCA6IC9eXHMqKGBgYCtbXmBdKnx+fn4rW15+XSopJC8sCiAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIHN0YXRlLCBzdGFjaywgbGluZSkgewogICAgICAgICAgICB2YXIgbSA9IHZhbHVlLm1hdGNoKC9eKFxzKikoW2B+XSspKC4qKS8pOwogICAgICAgICAgICB2YXIgbGFuZ3VhZ2UgPSAvW1x3LV0rfCQvLmV4ZWMobVszXSlbMF07CiAgICAgICAgICAgIGlmICghbW9kZXNbbGFuZ3VhZ2VdKQogICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSAiIjsKICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgiZ2l0aHViYmxvY2siLCBbXSwgW21bMV0sIG1bMl0sIGxhbmd1YWdlXSwgc3RhdGUpOwogICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICB9LAogICAgICAgIG5leHQgIDogImdpdGh1YmJsb2NrIgogICAgfTsKICAgIHZhciBjb2RlQmxvY2tSdWxlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgcmVnZXggOiAiLioiLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgdmFyIGVtYmVkU3RhdGUgPSBzdGFja1sxXTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IHN0YWNrWzJdWzBdOwogICAgICAgICAgICB2YXIgZW5kTWFya2VyID0gc3RhY2tbMl1bMV07CiAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IHN0YWNrWzJdWzJdOwogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIG0gPSAvXihccyopKGArfH4rKVxzKiQvLmV4ZWModmFsdWUpOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICBtICYmIG1bMV0ubGVuZ3RoIDwgaW5kZW50Lmxlbmd0aCArIDMKICAgICAgICAgICAgICAgICYmIG1bMl0ubGVuZ3RoID49IGVuZE1hcmtlci5sZW5ndGggJiYgbVsyXVswXSA9PSBlbmRNYXJrZXJbMF0KICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCwgMyk7CiAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgIGlmIChsYW5ndWFnZSAmJiBtb2Rlc1tsYW5ndWFnZV0pIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbW9kZXNbbGFuZ3VhZ2VdLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnModmFsdWUsIGVtYmVkU3RhdGUuc2xpY2UoMCkpOwogICAgICAgICAgICAgICAgc3RhY2tbMV0gPSBkYXRhLnN0YXRlOwogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudG9rZW5zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgIH0KICAgIH1dOwoKICAgIHRoaXMuJHJ1bGVzWyJzdGFydCJdLnVuc2hpZnQoewogICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgIHJlZ2V4IDogJ14kJywKICAgICAgICBuZXh0OiAiYWxsb3dCbG9jayIKICAgIH0sIHsgLy8gaDEKICAgICAgICB0b2tlbjogIm1hcmt1cC5oZWFkaW5nLjEiLAogICAgICAgIHJlZ2V4OiAiXj0rKD89XFxzKiQpIgogICAgfSwgeyAvLyBoMgogICAgICAgIHRva2VuOiAibWFya3VwLmhlYWRpbmcuMiIsCiAgICAgICAgcmVnZXg6ICJeXFwtKyg/PVxccyokKSIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAibWFya3VwLmhlYWRpbmcuIiArIHZhbHVlLmxlbmd0aDsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogL14jezEsNn0oPz1cc3wkKS8sCiAgICAgICAgbmV4dCA6ICJoZWFkZXIiCiAgICB9LAogICAgY29kZUJsb2NrU3RhcnRSdWxlLAogICAgeyAvLyBibG9jayBxdW90ZQogICAgICAgIHRva2VuIDogInN0cmluZy5ibG9ja3F1b3RlIiwKICAgICAgICByZWdleCA6ICJeXFxzKj5cXHMqKD86WyorLV18XFxkK1xcLik/XFxzKyIsCiAgICAgICAgbmV4dCAgOiAiYmxvY2txdW90ZSIKICAgIH0sIHsgLy8gSFIgKiAtIF8KICAgICAgICB0b2tlbiA6ICJjb25zdGFudCIsCiAgICAgICAgcmVnZXggOiAiXiB7MCwzfSg/Oig/OlxcKiA/KXszLH18KD86XFwtID8pezMsfXwoPzpcXF8gPyl7Myx9KVxccyokIiwKICAgICAgICBuZXh0OiAiYWxsb3dCbG9jayIKICAgIH0sIHsgLy8gbGlzdAogICAgICAgIHRva2VuIDogIm1hcmt1cC5saXN0IiwKICAgICAgICByZWdleCA6ICJeXFxzezAsM30oPzpbKistXXxcXGQrXFwuKVxccysiLAogICAgICAgIG5leHQgIDogImxpc3RibG9jay1zdGFydCIKICAgIH0sIHsKICAgICAgICBpbmNsdWRlIDogImJhc2ljIgogICAgfSk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgImJhc2ljIiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcW1xcYCpfe31cW1xdKCkjK1wtLiFdLwogICAgICAgIH0sIHsgLy8gY29kZSBzcGFuIGAKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIihgKykoLio/W15gXSkoXFwxKSIKICAgICAgICB9LCB7IC8vIHJlZmVyZW5jZQogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJjb25zdGFudCIsICJ0ZXh0IiwgInVybCIsICJzdHJpbmciLCAidGV4dCJdLAogICAgICAgICAgICByZWdleCA6ICJeKFsgXXswLDN9XFxbKShbXlxcXV0rKShcXF06XFxzKikoW14gXSspKFxccyooPzpbXCJdW15cIl0rW1wiXSk/KFxccyopKSQiCiAgICAgICAgfSwgeyAvLyBsaW5rIGJ5IHJlZmVyZW5jZQogICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJzdHJpbmciLCAidGV4dCIsICJjb25zdGFudCIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFspKCIgKyBlc2NhcGVkKCJdIikgKyAiKShcXF1cXHMqXFxbKSgiKyBlc2NhcGVkKCJdIikgKyAiKShcXF0pIgogICAgICAgIH0sIHsgLy8gbGluayBieSB1cmwKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAic3RyaW5nIiwgInRleHQiLCAibWFya3VwLnVuZGVybGluZSIsICJzdHJpbmciLCAidGV4dCJdLAogICAgICAgICAgICByZWdleCA6ICIoXFwhP1xcWykoIiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFsKICAgICAgICAgICAgICAgICAgICBlc2NhcGVkKCJdIikgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmsgdGV4dCBvciBhbHQgdGV4dAogICAgICAgICAgICAgICAgICAgICIpKFxcXVxcKCkiKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXSgKICAgICAgICAgICAgICAgICAgICAnKCg/OlteXFwpXFxzXFxcXF18XFxcXC58XFxzKD89W14iXSkpKiknICsgICAgICAgIC8vIGhyZWYgb3IgaW1hZ2UKICAgICAgICAgICAgICAgICAgICAnKFxccyoiJyArICBlc2NhcGVkKCciJykgKyAnIlxccyopPycgKyAgICAgICAgICAgIC8vICJ0aXRsZSIKICAgICAgICAgICAgICAgICAgICAiKFxcKSkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICkKICAgICAgICB9LCB7IC8vIHN0cm9uZyAqKiBfXwogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3Ryb25nIiwKICAgICAgICAgICAgcmVnZXggOiAiKFsqXXsyfXxbX117Mn0oPz1cXFMpKSguKj9cXFNbKl9dKikoXFwxKSIKICAgICAgICB9LCB7IC8vIGVtcGhhc2lzICogXwogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW1waGFzaXMiLAogICAgICAgICAgICByZWdleCA6ICIoWypdfFtfXSg/PVxcUykpKC4qP1xcU1sqX10qKShcXDEpIgogICAgICAgIH0sIHsgLy8KICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAidXJsIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwpKCIrCiAgICAgICAgICAgICAgICAgICAgICAiKD86aHR0cHM/fGZ0cHxkaWN0KTpbXidcIj5cXHNdKyIrCiAgICAgICAgICAgICAgICAgICAgICAifCIrCiAgICAgICAgICAgICAgICAgICAgICAiKD86bWFpbHRvOik/Wy0uXFx3XStcXEBbLWEtejAtOV0rKD86XFwuWy1hLXowLTldKykqXFwuW2Etel0rIisKICAgICAgICAgICAgICAgICAgICAiKSg+KSIKICAgICAgICB9XSwKICAgICAgICAiYWxsb3dCbG9jayI6IFsKICAgICAgICAgICAge3Rva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLCByZWdleCA6ICJeIHs0fS4rIiwgbmV4dCA6ICJhbGxvd0Jsb2NrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJlbXB0eV9saW5lIiwgcmVnZXggOiAnXiQnLCBuZXh0OiAiYWxsb3dCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW4gOiAiZW1wdHkiLCByZWdleCA6ICIiLCBuZXh0IDogInN0YXJ0In0KICAgICAgICBdLAoKICAgICAgICAiaGVhZGVyIiA6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiYmFzaWMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiaGVhZGluZyIKICAgICAgICB9IF0sCgogICAgICAgICJsaXN0YmxvY2stc3RhcnQiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC52YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxbWyB4XVxdKT8vLAogICAgICAgICAgICBuZXh0ICA6ICJsaXN0YmxvY2siCiAgICAgICAgfV0sCgogICAgICAgICJsaXN0YmxvY2siIDogWyB7IC8vIExpc3RzIG9ubHkgZXNjYXBlIG9uIGNvbXBsZXRlbHkgYmxhbmsgbGluZXMuCiAgICAgICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgICAgICByZWdleCA6ICJeJCIsCiAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgIH0sIHsgLy8gbGlzdAogICAgICAgICAgICB0b2tlbiA6ICJtYXJrdXAubGlzdCIsCiAgICAgICAgICAgIHJlZ2V4IDogIl5cXHN7MCwzfSg/OlsqKy1dfFxcZCtcXC4pXFxzKyIsCiAgICAgICAgICAgIG5leHQgIDogImxpc3RibG9jay1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYmFzaWMiLCBub0VzY2FwZTogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgY29kZUJsb2NrU3RhcnRSdWxlLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImxpc3QiIC8vZG8gbm90IHVzZSBtYXJrdXAubGlzdCB0byBhbGxvdyBzdGxpbmcgbGVhZGluZyBgKmAgZGlmZmVybnRseQogICAgICAgIH0gXSwKCiAgICAgICAgImJsb2NrcXVvdGUiIDogWyB7IC8vIEJsb2NrcXVvdGVzIG9ubHkgZXNjYXBlIG9uIGJsYW5rIGxpbmVzLgogICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgcmVnZXggOiAiXlxccyokIiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfSwgeyAvLyBibG9jayBxdW90ZQogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYmxvY2txdW90ZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIl5cXHMqPlxccyooPzpbKistXXxcXGQrXFwuKT9cXHMrIiwKICAgICAgICAgICAgbmV4dCAgOiAiYmxvY2txdW90ZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYmFzaWMiLCBub0VzY2FwZTogdHJ1ZQogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZy5ibG9ja3F1b3RlIgogICAgICAgIH0gXSwKCiAgICAgICAgImdpdGh1YmJsb2NrIiA6IGNvZGVCbG9ja1J1bGVzCiAgICB9KTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cm9vcC5pbmhlcml0cyhNYXJrZG93bkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5NYXJrZG93bkhpZ2hsaWdodFJ1bGVzID0gTWFya2Rvd25IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hc2tfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hcmtkb3duX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLk1hc2tIaWdobGlnaHRSdWxlcyA9IE1hc2tIaWdobGlnaHRSdWxlczsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRSdWxlcyAgID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIEpTUnVsZXMgICAgID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIENzc1J1bGVzICAgID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBNRFJ1bGVzICAgICA9IHJlcXVpcmUoIi4vbWFya2Rvd25faGlnaGxpZ2h0X3J1bGVzIikuTWFya2Rvd25IaWdobGlnaHRSdWxlczsKdmFyIEhUTUxSdWxlcyAgID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKCnZhciB0b2tlbl9UQUcgICAgICAgPSAia2V5d29yZC5zdXBwb3J0LmNvbnN0YW50Lmxhbmd1YWdlIiwKICAgIHRva2VuX0NPTVBPICAgICA9ICJzdXBwb3J0LmZ1bmN0aW9uLm1hcmt1cC5ib2xkIiwKICAgIHRva2VuX0tFWVdPUkQgICA9ICJrZXl3b3JkIiwKICAgIHRva2VuX0xBTkcgICAgICA9ICJjb25zdGFudC5sYW5ndWFnZSIsCiAgICB0b2tlbl9VVElMICAgICAgPSAia2V5d29yZC5jb250cm9sLm1hcmt1cC5pdGFsaWMiLAogICAgdG9rZW5fQVRUUiAgICAgID0gInN1cHBvcnQudmFyaWFibGUuY2xhc3MiLAogICAgdG9rZW5fUFVOS1QgICAgID0gImtleXdvcmQub3BlcmF0b3IiLAogICAgdG9rZW5fSVRBTElDICAgID0gIm1hcmt1cC5pdGFsaWMiLAogICAgdG9rZW5fQk9MRCAgICAgID0gIm1hcmt1cC5ib2xkIiwKICAgIHRva2VuX0xQQVJFICAgICA9ICJwYXJlbi5scGFyZW4iLAogICAgdG9rZW5fUlBBUkUgICAgID0gInBhcmVuLnJwYXJlbiI7Cgp2YXIgY29uc3RfRlVOQ1RJT05TLAogICAgY29uc3RfS0VZV09SRFMsCiAgICBjb25zdF9DT05TVCwKICAgIGNvbnN0X1RBR1M7CihmdW5jdGlvbigpewogICAgY29uc3RfRlVOQ1RJT05TID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgibG9nIikuc3BsaXQoInwiKQogICAgKTsKICAgIGNvbnN0X0NPTlNUID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiOmR1YWxiaW5kfDpiaW5kfDppbXBvcnR8c2xvdHxldmVudHxzdHlsZXxodG1sfG1hcmtkb3dufG1kIikuc3BsaXQoInwiKQogICAgKTsKICAgIGNvbnN0X0tFWVdPUkRTID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiZGVidWdnZXJ8ZGVmaW5lfHZhcnxpZnxlYWNofGZvcnxvZnxlbHNlfHN3aXRjaHxjYXNlfHdpdGh8dmlzaWJsZXwraWZ8K2VhY2h8K2Zvcnwrc3dpdGNofCt3aXRofCt2aXNpYmxlfGluY2x1ZGV8aW1wb3J0Iikuc3BsaXQoInwiKQogICAgKTsKICAgIGNvbnN0X1RBR1MgPSBsYW5nLmFycmF5VG9NYXAoCiAgICAgICAgKCJhfGFiYnJ8YWNyb255bXxhZGRyZXNzfGFwcGxldHxhcmVhfGFydGljbGV8YXNpZGV8YXVkaW98YnxiYXNlfGJhc2Vmb250fGJkb3wiICsgCiAgICAgICAgICJiaWd8YmxvY2txdW90ZXxib2R5fGJyfGJ1dHRvbnxjYW52YXN8Y2FwdGlvbnxjZW50ZXJ8Y2l0ZXxjb2RlfGNvbHxjb2xncm91cHwiICsgCiAgICAgICAgICJjb21tYW5kfGRhdGFsaXN0fGRkfGRlbHxkZXRhaWxzfGRmbnxkaXJ8ZGl2fGRsfGR0fGVtfGVtYmVkfGZpZWxkc2V0fCIgKyAKICAgICAgICAgImZpZ2NhcHRpb258ZmlndXJlfGZvbnR8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHwiICsgCiAgICAgICAgICJoZWFkZXJ8aGdyb3VwfGhyfGh0bWx8aXxpZnJhbWV8aW1nfGlucHV0fGluc3xrZXlnZW58a2JkfGxhYmVsfGxlZ2VuZHxsaXwiICsgCiAgICAgICAgICJsaW5rfG1hcHxtYXJrfG1lbnV8bWV0YXxtZXRlcnxuYXZ8bm9mcmFtZXN8bm9zY3JpcHR8b2JqZWN0fG9sfG9wdGdyb3VwfCIgKyAKICAgICAgICAgIm9wdGlvbnxvdXRwdXR8cHxwYXJhbXxwcmV8cHJvZ3Jlc3N8cXxycHxydHxydWJ5fHN8c2FtcHxzY3JpcHR8c2VjdGlvbnxzZWxlY3R8IiArIAogICAgICAgICAic21hbGx8c291cmNlfHNwYW58c3RyaWtlfHN0cm9uZ3xzdHlsZXxzdWJ8c3VtbWFyeXxzdXB8dGFibGV8dGJvZHl8dGR8IiArIAogICAgICAgICAidGV4dGFyZWF8dGZvb3R8dGh8dGhlYWR8dGltZXx0aXRsZXx0cnx0dHx1fHVsfHZhcnx2aWRlb3x3YnJ8eG1wIikuc3BsaXQoInwiKQogICAgKTsKfSgpKTsKCmZ1bmN0aW9uIE1hc2tIaWdobGlnaHRSdWxlcyAoKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgVG9rZW4oImNvbW1lbnQiLCAiXFwvXFwvLiokIiksCiAgICAgICAgICAgIFRva2VuKCJjb21tZW50IiwgIlxcL1xcKiIsIFsKICAgICAgICAgICAgICAgIFRva2VuKCJjb21tZW50IiwgIi4qP1xcKlxcLyIsICJzdGFydCIpLAogICAgICAgICAgICAgICAgVG9rZW4oImNvbW1lbnQiLCAiLisiKQogICAgICAgICAgICBdKSwKICAgICAgICAgICAgCiAgICAgICAgICAgIEJsb2Nrcy5zdHJpbmcoIicnJyIpLAogICAgICAgICAgICBCbG9ja3Muc3RyaW5nKCciIiInKSwKICAgICAgICAgICAgQmxvY2tzLnN0cmluZygnIicpLAogICAgICAgICAgICBCbG9ja3Muc3RyaW5nKCInIiksCiAgICAgICAgICAgIAogICAgICAgICAgICBCbG9ja3Muc3ludGF4KC8obWFya2Rvd258bWQpXGIvLCAibWQtbXVsdGlsaW5lIiwgIm11bHRpbGluZSIpLAogICAgICAgICAgICBCbG9ja3Muc3ludGF4KC9odG1sXGIvLCAiaHRtbC1tdWx0aWxpbmUiLCAibXVsdGlsaW5lIiksCiAgICAgICAgICAgIEJsb2Nrcy5zeW50YXgoLyhzbG90fGV2ZW50KVxiLywgImpzLWJsb2NrIiwgImJsb2NrIiksCiAgICAgICAgICAgIEJsb2Nrcy5zeW50YXgoL3N0eWxlXGIvLCAiY3NzLWJsb2NrIiwgImJsb2NrIiksCiAgICAgICAgICAgIEJsb2Nrcy5zeW50YXgoL3ZhclxiLywgImpzLXN0YXRlbWVudCIsICJhdHRyIiksCiAgICAgICAgICAgIAogICAgICAgICAgICBCbG9ja3MudGFnKCksCiAgICAgICAgICAgIAogICAgICAgICAgICBUb2tlbih0b2tlbl9MUEFSRSwgIltbKHs+XSIpLAogICAgICAgICAgICBUb2tlbih0b2tlbl9SUEFSRSwgIltcXF0pfTtdIiwgInN0YXJ0IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKICAgIHZhciBydWxlcyA9IHRoaXM7CiAgICAKICAgIGFkZEphdmFTY3JpcHQoImludGVycG9sYXRpb24iLCAvXF0vLCB0b2tlbl9SUEFSRSArICIuIiArIHRva2VuX0lUQUxJQyk7CiAgICBhZGRKYXZhU2NyaXB0KCJzdGF0ZW1lbnQiLCAvXCl8fXw7Lyk7CiAgICBhZGRKYXZhU2NyaXB0KCJibG9jayIsIC9cfS8pOwogICAgYWRkQ3NzKCk7CiAgICBhZGRNYXJrZG93bigpOwogICAgYWRkSHRtbCgpOwogICAgCiAgICBmdW5jdGlvbiBhZGRKYXZhU2NyaXB0KG5hbWUsIGVzY2FwZSwgY2xvc2VUeXBlKSB7CiAgICAgICAgdmFyIHByZnggID0gICJqcy0iICsgbmFtZSArICItIiwKICAgICAgICAgICAgcm9vdFRva2VucyA9IG5hbWUgPT09ICJibG9jayIgPyBbInN0YXJ0Il0gOiBbInN0YXJ0IiwgIm5vX3JlZ2V4Il07CiAgICAgICAgYWRkKAogICAgICAgICAgICBKU1J1bGVzCiAgICAgICAgICAgICwgcHJmeAogICAgICAgICAgICAsIGVzY2FwZQogICAgICAgICAgICAsIHJvb3RUb2tlbnMKICAgICAgICAgICAgLCBjbG9zZVR5cGUKICAgICAgICApOwogICAgfQogICAgZnVuY3Rpb24gYWRkQ3NzKCkgewogICAgICAgIGFkZChDc3NSdWxlcywgImNzcy1ibG9jay0iLCAvXH0vKTsKICAgIH0KICAgIGZ1bmN0aW9uIGFkZE1hcmtkb3duKCkgewogICAgICAgIGFkZChNRFJ1bGVzLCAibWQtbXVsdGlsaW5lLSIsIC8oIiIifCcnJykvLCBbXSk7CiAgICB9CiAgICBmdW5jdGlvbiBhZGRIdG1sKCkgewogICAgICAgIGFkZChIVE1MUnVsZXMsICJodG1sLW11bHRpbGluZS0iLCAvKCIiInwnJycpLyk7CiAgICB9CiAgICBmdW5jdGlvbiBhZGQoUnVsZXMsIHN0clByZngsIHJneEVuZCwgcm9vdFRva2VucywgY2xvc2VUeXBlKSB7CiAgICAgICAgdmFyIG5leHQgPSAicG9wIjsKICAgICAgICB2YXIgdG9rZW5zID0gcm9vdFRva2VucyB8fCBbICJzdGFydCIgXTsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0b2tlbnMgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAoL2Jsb2NrfG11bHRpbGluZS8udGVzdChzdHJQcmZ4KSkgewogICAgICAgICAgICBuZXh0ID0gc3RyUHJmeCArICJlbmQiOwogICAgICAgICAgICBydWxlcy4kcnVsZXNbbmV4dF0gPSBbCiAgICAgICAgICAgICAgICBUb2tlbigiZW1wdHkiLCAiIiwgInN0YXJ0IikKICAgICAgICAgICAgXTsKICAgICAgICB9CiAgICAgICAgcnVsZXMuZW1iZWRSdWxlcygKICAgICAgICAgICAgUnVsZXMKICAgICAgICAgICAgLCBzdHJQcmZ4CiAgICAgICAgICAgICwgWyBUb2tlbihjbG9zZVR5cGUgfHwgdG9rZW5fUlBBUkUsIHJneEVuZCwgbmV4dCkgXQogICAgICAgICAgICAsIHRva2VucwogICAgICAgICAgICAsIHRva2VucyA9PSBudWxsID8gdHJ1ZSA6IGZhbHNlCiAgICAgICAgKTsKICAgIH0KCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn0Kb29wLmluaGVyaXRzKE1hc2tIaWdobGlnaHRSdWxlcywgVGV4dFJ1bGVzKTsKCnZhciBCbG9ja3MgPSB7CiAgICBzdHJpbmc6IGZ1bmN0aW9uKHN0ciwgbmV4dCl7CiAgICAgICAgdmFyIHRva2VuID0gVG9rZW4oCiAgICAgICAgICAgICJzdHJpbmcuc3RhcnQiCiAgICAgICAgICAgICwgc3RyCiAgICAgICAgICAgICwgWwogICAgICAgICAgICAgICAgVG9rZW4odG9rZW5fTFBBUkUgKyAiLiIgKyB0b2tlbl9JVEFMSUMsIC9+XFsvLCBCbG9ja3MuaW50ZXJwb2xhdGlvbigpKSwKICAgICAgICAgICAgICAgIFRva2VuKCJzdHJpbmcuZW5kIiwgc3RyLCAicG9wIiksCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgICAgICwgbmV4dAogICAgICAgICk7CiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDEpewogICAgICAgICAgICB2YXIgZXNjYXBlZCA9IFRva2VuKCJzdHJpbmcuZXNjYXBlIiwgIlxcXFwiICsgc3RyKTsKICAgICAgICAgICAgdG9rZW4ucHVzaC51bnNoaWZ0KGVzY2FwZWQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9LAogICAgaW50ZXJwb2xhdGlvbjogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgICBUb2tlbih0b2tlbl9VVElMLCAvXHMqXHcqXHMqOi8pLAogICAgICAgICAgICAianMtaW50ZXJwb2xhdGlvbi1zdGFydCIKICAgICAgICBdOwogICAgfSwKICAgIHRhZ0hlYWQ6IGZ1bmN0aW9uIChyZ3gpIHsKICAgICAgcmV0dXJuIFRva2VuKHRva2VuX0FUVFIsIHJneCwgWwogICAgICAgICAgICBUb2tlbih0b2tlbl9BVFRSLCAvW1x3XC1fXSsvKSwKICAgICAgICAgICAgVG9rZW4odG9rZW5fTFBBUkUgKyAiLiIgKyB0b2tlbl9JVEFMSUMsIC9+XFsvLCBCbG9ja3MuaW50ZXJwb2xhdGlvbigpKSwKICAgICAgICAgICAgQmxvY2tzLmdvVXAoKQogICAgICAgIF0pOwogICAgfSwKICAgIHRhZzogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRva2VuOiAndGFnJywKICAgICAgICAgICAgb25NYXRjaCA6ICBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29uc3RfS0VZV09SRFNbdmFsdWVdKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl9LRVlXT1JEOwogICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29uc3RfQ09OU1RbdmFsdWVdKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbl9MQU5HOwogICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29uc3RfRlVOQ1RJT05TW3ZhbHVlXSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuZnVuY3Rpb24iOwogICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gY29uc3RfVEFHU1t2YWx1ZS50b0xvd2VyQ2FzZSgpXSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fVEFHOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5fQ09NUE87CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhbQFx3XC1fOitdKyl8KChefFxzKSg/PVxzKihcLnwjKSkpLywKICAgICAgICAgICAgcHVzaDogWwogICAgICAgICAgICAgICAgQmxvY2tzLnRhZ0hlYWQoL1wuLykgLAogICAgICAgICAgICAgICAgQmxvY2tzLnRhZ0hlYWQoLyMvKSAsCiAgICAgICAgICAgICAgICBCbG9ja3MuZXhwcmVzc2lvbigpLAogICAgICAgICAgICAgICAgQmxvY2tzLmF0dHJpYnV0ZSgpLAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBUb2tlbih0b2tlbl9MUEFSRSwgL1s7PntdLywgInBvcCIpCiAgICAgICAgICAgIF0KICAgICAgICB9OwogICAgfSwKICAgIHN5bnRheDogZnVuY3Rpb24ocmd4LCBuZXh0LCB0eXBlKXsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b2tlbjogdG9rZW5fTEFORywKICAgICAgICAgICAgcmVnZXggOiByZ3gsCiAgICAgICAgICAgIHB1c2g6ICh7CiAgICAgICAgICAgICAgICAiYXR0ciI6IFsKICAgICAgICAgICAgICAgICAgICBuZXh0ICsgIi1zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgVG9rZW4odG9rZW5fUFVOS1QsIC87LywgInN0YXJ0IikKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibXVsdGlsaW5lIjogWwogICAgICAgICAgICAgICAgICAgIEJsb2Nrcy50YWdIZWFkKC9cLi8pICwKICAgICAgICAgICAgICAgICAgICBCbG9ja3MudGFnSGVhZCgvIy8pICwKICAgICAgICAgICAgICAgICAgICBCbG9ja3MuYXR0cmlidXRlKCksCiAgICAgICAgICAgICAgICAgICAgQmxvY2tzLmV4cHJlc3Npb24oKSwKICAgICAgICAgICAgICAgICAgICBUb2tlbih0b2tlbl9MUEFSRSwgL1s+XHtdLyksCiAgICAgICAgICAgICAgICAgICAgVG9rZW4odG9rZW5fUFVOS1QsIC87LywgInN0YXJ0IiksCiAgICAgICAgICAgICAgICAgICAgVG9rZW4odG9rZW5fTFBBUkUsIC8nJyd8IiIiLywgWyBuZXh0ICsgIi1zdGFydCIgXSkKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAiYmxvY2siOiBbCiAgICAgICAgICAgICAgICAgICAgQmxvY2tzLnRhZ0hlYWQoL1wuLykgLAogICAgICAgICAgICAgICAgICAgIEJsb2Nrcy50YWdIZWFkKC8jLykgLAogICAgICAgICAgICAgICAgICAgIEJsb2Nrcy5hdHRyaWJ1dGUoKSwKICAgICAgICAgICAgICAgICAgICBCbG9ja3MuZXhwcmVzc2lvbigpLAogICAgICAgICAgICAgICAgICAgIFRva2VuKHRva2VuX0xQQVJFLCAvXHsvLCBbIG5leHQgKyAiLXN0YXJ0IiBdKQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9KVt0eXBlXQogICAgICAgIH07CiAgICB9LAogICAgYXR0cmlidXRlOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiBUb2tlbihmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiAgL154XC0vLnRlc3QodmFsdWUpCiAgICAgICAgICAgICAgICA/IHRva2VuX0FUVFIgKyAiLiIgKyB0b2tlbl9CT0xECiAgICAgICAgICAgICAgICA6IHRva2VuX0FUVFI7CiAgICAgICAgfSwgL1tcd18tXSsvLCBbCiAgICAgICAgICAgIFRva2VuKHRva2VuX1BVTktULCAvXHMqPVxzKi8sIFsKICAgICAgICAgICAgICAgIEJsb2Nrcy5zdHJpbmcoJyInKSwKICAgICAgICAgICAgICAgIEJsb2Nrcy5zdHJpbmcoIiciKSwKICAgICAgICAgICAgICAgIEJsb2Nrcy53b3JkKCksCiAgICAgICAgICAgICAgICBCbG9ja3MuZ29VcCgpCiAgICAgICAgICAgIF0pLAogICAgICAgICAgICBCbG9ja3MuZ29VcCgpCiAgICAgICAgXSk7CiAgICB9LAogICAgZXhwcmVzc2lvbjogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gVG9rZW4odG9rZW5fTFBBUkUsIC9cKC8sIFsgImpzLXN0YXRlbWVudC1zdGFydCIgXSk7CiAgICB9LAogICAgd29yZDogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gVG9rZW4oInN0cmluZyIsIC9bXHctX10rLyk7CiAgICB9LAogICAgZ29VcDogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gVG9rZW4oInRleHQiLCAiIiwgInBvcCIpOwogICAgfSwKICAgIGdvU3RhcnQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuIFRva2VuKCJ0ZXh0IiwgIiIsICJzdGFydCIpOwogICAgfQp9OwoKCmZ1bmN0aW9uIFRva2VuKHRva2VuLCByZ3gsIG1peCkgewogICAgdmFyIHB1c2gsIG5leHQsIG9uTWF0Y2g7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCkgewogICAgICAgIHB1c2ggPSBtaXg7CiAgICAgICAgbmV4dCA9IGFyZ3VtZW50c1szXTsKICAgIH0KICAgIGVsc2UgaWYgKHR5cGVvZiBtaXggPT09ICJzdHJpbmciKSB7CiAgICAgICAgbmV4dCA9IG1peDsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHB1c2ggPSBtaXg7CiAgICB9CiAgICBpZiAodHlwZW9mIHRva2VuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgb25NYXRjaCA9IHRva2VuOwogICAgICAgIHRva2VuICAgPSAiZW1wdHkiOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbjogdG9rZW4sCiAgICAgICAgcmVnZXg6IHJneCwKICAgICAgICBwdXNoOiBwdXNoLAogICAgICAgIG5leHQ6IG5leHQsCiAgICAgICAgb25NYXRjaDogb25NYXRjaAogICAgfTsKfQoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXNrIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvbWFza19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgTWFza0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9tYXNrX2hpZ2hsaWdodF9ydWxlcyIpLk1hc2tIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDc3NCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTWFza0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbWFzayI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9tYXNrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-matlab.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tYXRsYWJfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTWF0bGFiSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCnZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjbGFzc2RlZnxjb250aW51ZXxlbHNlfGVsc2VpZnxlbmR8Zm9yfGZ1bmN0aW9ufGdsb2JhbHxpZnxvdGhlcndpc2V8cGFyZm9yfHBlcnNpc3RlbnR8cmV0dXJufHNwbWR8c3dpdGNofHRyeXx3aGlsZSIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoCiAgICAgICAgInRydWV8ZmFsc2V8aW5mfEluZnxuYW58TmFOfGVwc3xwaXxhbnN8bmFyZ2lufG5hcmdvdXR8dmFyYXJnaW58dmFyYXJnb3V0IgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiYWJzfGFjY3VtYXJyYXl8YWNvcyg/OmR8aCk/fGFjb3QoPzpkfGgpP3xhY3NjKD86ZHxoKT98YWN0eGNvbnRyb2woPzpsaXN0fHNlbGVjdCk/fGFjdHhHZXRSdW5uaW5nU2VydmVyfGFjdHhzZXJ2ZXJ8YWRkbGlzdGVuZXJ8YWRkcGF0aHxhZGRwcmVmfGFkZHRvZGF0ZXwiKwoJCSJhaXJ5fGFsaWdufGFsaW18YWxsfGFsbGNoaWxkfGFscGhhfGFscGhhbWFwfGFtZHxhbmNlc3RvcnxhbmR8YW5nbGV8YW5ub3RhdGlvbnxhbnl8YXJlYXxhcnJheWZ1bnxhc2VjKD86ZHxoKT98YXNpbig/OmR8aCk/fGFzc2VydHxhc3NpZ25pbnxhdGFuKD86MnxkfGgpP3wiICsKCQkiYXVkaW9kZXZpbmZvfGF1ZGlvcGxheWVyfGF1ZGlvcmVjb3JkZXJ8YXVmaW5mb3xhdXJlYWR8YXV0dW1ufGF1d3JpdGV8YXZpZmlsZXxhdmlpbmZvfGF2aXJlYWR8YXhlc3xheGlzfGJhbGFuY2V8YmFyKD86M3wzaHxoKT98YmFzZTJkZWN8YmVlcHxCZWdpbkludm9rZXxiZW5jaHwiKwoJCSJiZXNzZWwoPzpofGl8anxrfHkpfGJldGF8YmV0YWluY3xiZXRhaW5jaW52fGJldGFsbnxiaWNnfGJpY2dzdGFifGJpY2dzdGFibHxiaW4yZGVjfGJpdGFuZHxiaXRjbXB8Yml0Z2V0fGJpdG1heHxiaXRub3R8Yml0b3J8Yml0c2V0fGJpdHNoaWZ0fGJpdHhvcnxibGFua3N8YmxrZGlhZ3wiKwoJCSJib25lfGJveHxicmlnaHRlbnxicnVzaHxic3hmdW58YnVpbGRkb2NzZWFyY2hkYnxidWlsdGlufGJ2cDRjfGJ2cDVjfGJ2cGdldHxidnBpbml0fGJ2cHNldHxidnB4dGVuZHxjYWxlbmRhcnxjYWxsbGlifGNhbGxTb2FwU2VydmljZXxjYW1kb2xseXxjYW1lcmF0b29sYmFyfGNhbWxpZ2h0fCIrCgkJImNhbWxvb2thdHxjYW1vcmJpdHxjYW1wYW58Y2FtcG9zfGNhbXByb2p8Y2Ftcm9sbHxjYW10YXJnZXR8Y2FtdXB8Y2FtdmF8Y2Ftem9vbXxjYXJ0MnBvbHxjYXJ0MnNwaHxjYXN0fGNhdHxjYXhpc3xjZHxjZGYycmRmfGNkZmVwb2NofGNkZmluZm98Y2RmbGliKD86Lig/OmNsb3NlfGNsb3NlVmFyfCIrCgkJImNvbXB1dGVFcG9jaHxjb21wdXRlRXBvY2gxNnxjcmVhdGV8Y3JlYXRlQXR0cnxjcmVhdGVWYXJ8ZGVsZXRlfGRlbGV0ZUF0dHJ8ZGVsZXRlQXR0ckVudHJ5fGRlbGV0ZUF0dHJnRW50cnl8ZGVsZXRlVmFyfGRlbGV0ZVZhclJlY29yZHN8ZXBvY2gxNkJyZWFrZG93bnxlcG9jaEJyZWFrZG93bnxnZXRBdHRyRW50cnl8IisKCQkiZ2V0QXR0cmdFbnRyeXxnZXRBdHRyTWF4RW50cnl8Z2V0QXR0ck1heGdFbnRyeXxnZXRBdHRyTmFtZXxnZXRBdHRyTnVtfGdldEF0dHJTY29wZXxnZXRDYWNoZVNpemV8Z2V0Q2hlY2tzdW18Z2V0Q29tcHJlc3Npb258Z2V0Q29tcHJlc3Npb25DYWNoZVNpemV8Z2V0Q29uc3RhbnROYW1lc3wiKwoJCSJnZXRDb25zdGFudFZhbHVlfGdldENvcHlyaWdodHxnZXRGaWxlQmFja3dhcmR8Z2V0Rm9ybWF0fGdldExpYnJhcnlDb3B5cmlnaHR8Z2V0TGlicmFyeVZlcnNpb258Z2V0TWFqb3JpdHl8Z2V0TmFtZXxnZXROdW1BdHRyRW50cmllc3xnZXROdW1BdHRyZ0VudHJpZXN8Z2V0TnVtQXR0cmlidXRlc3wiKwoJCSJnZXROdW1nQXR0cmlidXRlc3xnZXRSZWFkT25seU1vZGV8Z2V0U3RhZ2VDYWNoZVNpemV8Z2V0VmFsaWRhdGV8Z2V0VmFyQWxsb2NSZWNvcmRzfGdldFZhckJsb2NraW5nRmFjdG9yfGdldFZhckNhY2hlU2l6ZXxnZXRWYXJDb21wcmVzc2lvbnxnZXRWYXJEYXRhfGdldFZhck1heEFsbG9jUmVjTnVtfCIrCgkJImdldFZhck1heFdyaXR0ZW5SZWNOdW18Z2V0VmFyTmFtZXxnZXRWYXJOdW18Z2V0VmFyTnVtUmVjc1dyaXR0ZW58Z2V0VmFyUGFkVmFsdWV8Z2V0VmFyUmVjb3JkRGF0YXxnZXRWYXJSZXNlcnZlUGVyY2VudHxnZXRWYXJzTWF4V3JpdHRlblJlY051bXxnZXRWYXJTcGFyc2VSZWNvcmRzfGdldFZlcnNpb258IisKCQkiaHlwZXJHZXRWYXJEYXRhfGh5cGVyUHV0VmFyRGF0YXxpbnF1aXJlfGlucXVpcmVBdHRyfGlucXVpcmVBdHRyRW50cnl8aW5xdWlyZUF0dHJnRW50cnl8aW5xdWlyZVZhcnxvcGVufHB1dEF0dHJFbnRyeXxwdXRBdHRyZ0VudHJ5fHB1dFZhckRhdGF8cHV0VmFyUmVjb3JkRGF0YXxyZW5hbWVBdHRyfCIrCgkJInJlbmFtZVZhcnxzZXRDYWNoZVNpemV8c2V0Q2hlY2tzdW18c2V0Q29tcHJlc3Npb258c2V0Q29tcHJlc3Npb25DYWNoZVNpemV8c2V0RmlsZUJhY2t3YXJkfHNldEZvcm1hdHxzZXRNYWpvcml0eXxzZXRSZWFkT25seU1vZGV8c2V0U3RhZ2VDYWNoZVNpemV8c2V0VmFsaWRhdGV8IisKCQkic2V0VmFyQWxsb2NCbG9ja1JlY29yZHN8c2V0VmFyQmxvY2tpbmdGYWN0b3J8c2V0VmFyQ2FjaGVTaXplfHNldFZhckNvbXByZXNzaW9ufHNldFZhckluaXRpYWxSZWNzfHNldFZhclBhZFZhbHVlfFNldFZhclJlc2VydmVQZXJjZW50fHNldFZhcnNDYWNoZVNpemV8c2V0VmFyU3BhcnNlUmVjb3JkcykpP3wiKwoJCSJjZGZyZWFkfGNkZndyaXRlfGNlaWx8Y2VsbDJtYXR8Y2VsbDJzdHJ1Y3R8Y2VsbGRpc3B8Y2VsbGZ1bnxjZWxscGxvdHxjZWxsc3RyfGNnc3xjaGVja2NvZGV8Y2hlY2tpbnxjaGVja291dHxjaG9sfGNob2xpbmN8Y2hvbHVwZGF0ZXxjaXJjc2hpZnR8Y2xhfGNsYWJlbHxjbGFzc3xjbGN8Y2xlYXJ8IisKCQkiY2xlYXJ2YXJzfGNsZnxjbGlwYm9hcmR8Y2xvY2t8Y2xvc2V8Y2xvc2VyZXF8Y21vcHRzfGNtcGVybXV0ZXxjbXVuaXF1ZXxjb2xhbWR8Y29sb258Y29sb3JiYXJ8Y29sb3JkZWZ8Y29sb3JtYXB8Y29sb3JtYXBlZGl0b3J8Y29scGVybXxDb21iaW5lfGNvbWV0fGNvbWV0M3xjb21tYW5kaGlzdG9yeXwiKwoJCSJjb21tYW5kd2luZG93fGNvbXBhbnxjb21wYXNzfGNvbXBsZXh8Y29tcHV0ZXJ8Y29uZHxjb25kZWlnfGNvbmRlc3R8Y29uZXBsb3R8Y29uanxjb250YWluZXJzLk1hcHxjb250b3VyKD86M3xjfGZ8c2xpY2UpP3xjb250cmFzdHxjb252fGNvbnYyfGNvbnZodWxsfGNvbnZodWxsbnxjb252bnxjb29sfCIrCgkJImNvcHBlcnxjb3B5ZmlsZXxjb3B5b2JqfGNvcnJjb2VmfGNvcyg/OmR8aCk/fGNvdCg/OmR8aCk/fGNvdnxjcGx4cGFpcnxjcHV0aW1lfGNyZWF0ZUNsYXNzRnJvbVdzZGx8Y3JlYXRlU29hcE1lc3NhZ2V8Y3Jvc3N8Y3NjKD86ZHxoKT98Y3N2cmVhZHxjc3Z3cml0ZXxjdHJhbnNwb3NlfGN1bXByb2R8IisKCQkiY3Vtc3VtfGN1bXRyYXB6fGN1cmx8Y3VzdG9tdmVyY3RybHxjeWxpbmRlcnxkYXFyZWFkfGRhc3BlY3R8ZGF0YWN1cnNvcm1vZGV8ZGF0YXRpcGluZm98ZGF0ZXxkYXRlbnVtfGRhdGVzdHJ8ZGF0ZXRpY2t8ZGF0ZXZlY3xkYmNsZWFyfGRiY29udHxkYmRvd258ZGJscXVhZHxkYm1leHxkYnF1aXR8IisKCQkiZGJzdGFja3xkYnN0YXR1c3xkYnN0ZXB8ZGJzdG9wfGRidHlwZXxkYnVwfGRkZTIzfGRkZWdldHxkZGVzZHxkZGVzZXR8ZGVhbHxkZWJsYW5rfGRlYzJiYXNlfGRlYzJiaW58ZGVjMmhleHxkZWNpY3xkZWNvbnZ8ZGVsMnxkZWxhdW5heXxkZWxhdW5heTN8ZGVsYXVuYXlufERlbGF1bmF5VHJpfGRlbGV0ZXwiKwoJCSJkZW1vfGRlcGRpcnxkZXBmdW58ZGV0fGRldHJlbmR8ZGV2YWx8ZGlhZ3xkaWFsb2d8ZGlhcnl8ZGlmZnxkaWZmdXNlfGRpcnxkaXNwfGRpc3BsYXl8ZGl0aGVyfGRpdmVyZ2VuY2V8ZGxtcmVhZHxkbG13cml0ZXxkbXBlcm18ZG9jfGRvY3NlYXJjaHxkb3N8ZG90fGRyYWdyZWN0fGRyYXdub3d8ZHNlYXJjaHwiKwoJCSJkc2VhcmNobnxkeW5hbWljcHJvcHN8ZWNob3xlY2hvZGVtb3xlZGl0fGVpZ3xlaWdzfGVsbGlwanxlbGxpcGtlfGVsbGlwc29pZHxlbXB0eXxlbmFibGVORVRmcm9tTmV0d29ya0RyaXZlfGVuYWJsZXNlcnZpY2V8RW5kSW52b2tlfGVudW1lcmF0aW9ufGVvbWRheXxlcXxlcmZ8ZXJmY3xlcmZjaW52fCIrCgkJImVyZmN4fGVyZmludnxlcnJvcnxlcnJvcmJhcnxlcnJvcmRsZ3xldGltZXxldHJlZXxldHJlZXBsb3R8ZXZhbHxldmFsY3xldmFsaW58ZXZlbnQuKD86RXZlbnREYXRhfGxpc3RlbmVyfFByb3BlcnR5RXZlbnR8cHJvcGxpc3RlbmVyKXxleGlmcmVhZHxleGlzdHxleGl0fGV4cHxleHBpbnR8ZXhwbXwiKwoJCSJleHBtMXxleHBvcnQyd3NkbGd8ZXllfGV6Y29udG91cnxlemNvbnRvdXJmfGV6bWVzaHxlem1lc2hjfGV6cGxvdHxlenBsb3QzfGV6cG9sYXJ8ZXpzdXJmfGV6c3VyZmN8ZmFjdG9yfGZhY3RvcmlhbHxmY2xvc2V8ZmVhdGhlcnxmZWF0dXJlfGZlb2Z8ZmVycm9yfGZldmFsfGZmdHxmZnQyfGZmdG58IisKCQkiZmZ0c2hpZnR8ZmZ0d3xmZ2V0bHxmZ2V0c3xmaWVsZG5hbWVzfGZpZ3VyZXxmaWd1cmVwYWxldHRlfGZpbGVhdHRyaWJ8ZmlsZWJyb3dzZXJ8ZmlsZW1hcmtlcnxmaWxlcGFydHN8ZmlsZXJlYWR8ZmlsZXNlcHxmaWxsfGZpbGwzfGZpbHRlcnxmaWx0ZXIyfGZpbmR8ZmluZGFsbHxmaW5kZmlnc3wiKwoJCSJmaW5kb2JqfGZpbmRzdHJ8ZmluaXNofGZpdHNkaXNwfGZpdHNpbmZvfGZpdHNyZWFkfGZpdHN3cml0ZXxmaXh8ZmxhZ3xmbGlwZGltfGZsaXBscnxmbGlwdWR8Zmxvb3J8Zmxvd3xmbWluYm5kfGZtaW5zZWFyY2h8Zm9wZW58Zm9ybWF0fGZwbG90fGZwcmludGZ8ZnJhbWUyaW18ZnJlYWR8ZnJlcXNwYWNlfCIrCgkJImZyZXdpbmR8ZnNjYW5mfGZzZWVrfGZ0ZWxsfEZUUHxmdWxsfGZ1bGxmaWxlfGZ1bmMyc3RyfGZ1bmN0aW9uc3xmdW5tfGZ3cml0ZXxmemVyb3xnYWxsZXJ5fGdhbW1hfGdhbW1haW5jfGdhbW1haW5jaW52fGdhbW1hbG58Z2NhfGdjYmZ8Z2Nib3xnY2R8Z2NmfGdjb3xnZXxnZW5wYXRofGdlbnZhcm5hbWV8IisKCQkiZ2V0fGdldGFwcGRhdGF8Z2V0ZW52fGdldGZpZWxkfGdldGZyYW1lfGdldHBpeGVscG9zaXRpb258Z2V0cHJlZnxnaW5wdXR8Z21yZXN8Z3Bsb3R8Z3JhYmNvZGV8Z3JhZGllbnR8Z3JheXxncmF5bW9ufGdyaWR8Z3JpZGRhdGEoPzozfG4pP3xncmlkZGVkSW50ZXJwb2xhbnR8Z3N2ZHxndHxndGV4dHwiKwoJCSJndWlkYXRhfGd1aWRlfGd1aWhhbmRsZXN8Z3VuemlwfGd6aXB8aDVjcmVhdGV8aDVkaXNwfGg1aW5mb3xoNXJlYWR8aDVyZWFkYXR0fGg1d3JpdGV8aDV3cml0ZWF0dHxoYWRhbWFyZHxoYW5kbGV8aGFua2VsfGhkZnxoZGY1fGhkZjVpbmZvfGhkZjVyZWFkfGhkZjV3cml0ZXxoZGZpbmZvfCIrCgkJImhkZnJlYWR8aGRmdG9vbHxoZWxwfGhlbHBicm93c2VyfGhlbHBkZXNrfGhlbHBkbGd8aGVscHdpbnxoZXNzfGhleDJkZWN8aGV4Mm51bXxoZ2V4cG9ydHxoZ2dyb3VwfGhnbG9hZHxoZ3NhdmV8aGdzZXRnZXR8aGd0cmFuc2Zvcm18aGlkZGVufGhpbGJ8aGlzdHxoaXN0Y3xob2xkfGhvbWV8aG9yemNhdHwiKwoJCSJob3N0aWR8aG90fGhzdnxoc3YycmdifGh5cG90fGljaG9sfGlkaXZpZGV8aWZmdHxpZmZ0MnxpZmZ0bnxpZmZ0c2hpZnR8aWx1fGltMmZyYW1lfGltMmphdmF8aW1hZ3xpbWFnZXxpbWFnZXNjfGltYXBwcm94fGltZmluZm98aW1mb3JtYXRzfGltcG9ydHxpbXBvcnRkYXRhfGltcmVhZHxpbXdyaXRlfCIrCgkJImluZDJyZ2J8aW5kMnN1YnxpbmZlcmlvcnRvfGluZm98aW5saW5lfGlubWVtfGlucG9seWdvbnxpbnB1dHxpbnB1dGRsZ3xpbnB1dG5hbWV8aW5wdXRQYXJzZXJ8aW5zcGVjdHxpbnN0cmNhbGxiYWNrfGluc3RyZmluZHxpbnN0cmZpbmRhbGx8aW50MnN0cnxpbnRlZ3JhbCg/OjJ8Myk/fGludGVycCg/OjF8IisKCQkiMXF8MnwzfGZ0fG4pfGludGVycHN0cmVhbXNwZWVkfGludGVyc2VjdHxpbnRtYXh8aW50bWlufGludnxpbnZoaWxifGlwZXJtdXRlfGlzYXxpc2FwcGRhdGF8aXNjZWxsfGlzY2VsbHN0cnxpc2NoYXJ8aXNjb2x1bW58aXNkaXJ8aXNlbXB0eXxpc2VxdWFsfGlzZXF1YWxufGlzZXF1YWx3aXRoZXF1YWxuYW5zfCIrCgkJImlzZmllbGR8aXNmaW5pdGV8aXNmbG9hdHxpc2dsb2JhbHxpc2hhbmRsZXxpc2hnaGFuZGxlfGlzaG9sZHxpc2luZnxpc2ludGVnZXJ8aXNqYXZhfGlza2V5d29yZHxpc2xldHRlcnxpc2xvZ2ljYWx8aXNtYWN8aXNtYXRyaXh8aXNtZW1iZXJ8aXNtZXRob2R8aXNuYW58aXNudW1lcmljfGlzb2JqZWN0fCIrCgkJImlzb2NhcHN8aXNvY29sb3JzfGlzb25vcm1hbHN8aXNvc3VyZmFjZXxpc3BjfGlzcHJlZnxpc3ByaW1lfGlzcHJvcHxpc3JlYWx8aXNyb3d8aXNzY2FsYXJ8aXNzb3J0ZWR8aXNzcGFjZXxpc3NwYXJzZXxpc3N0cnxpc3N0cnByb3B8aXNzdHJ1Y3R8aXNzdHVkZW50fGlzdW5peHxpc3Zhcm5hbWV8IisKCQkiaXN2ZWN0b3J8amF2YWFkZHBhdGh8amF2YUFycmF5fGphdmFjaGt8amF2YWNsYXNzcGF0aHxqYXZhY29tcG9uZW50fGphdmFNZXRob2R8amF2YU1ldGhvZEVEVHxqYXZhT2JqZWN0fGphdmFPYmplY3RFRFR8amF2YXJtcGF0aHxqZXR8a2V5Ym9hcmR8a3JvbnxsYXN0ZXJyfGxhc3RlcnJvcnwiKwoJCSJsYXN0d2FybnxsY218bGRpdmlkZXxsZGx8bGV8bGVnZW5kfGxlZ2VuZHJlfGxlbmd0aHxsaWJmdW5jdGlvbnN8bGliZnVuY3Rpb25zdmlld3xsaWJpc2xvYWRlZHxsaWJwb2ludGVyfGxpYnN0cnVjdHxsaWNlbnNlfGxpZ2h0fGxpZ2h0YW5nbGV8bGlnaHRpbmd8bGluMm11fGxpbmV8bGluZXN8IisKCQkibGlua2F4ZXN8bGlua2RhdGF8bGlua3Byb3B8bGluc29sdmV8bGluc3BhY2V8bGlzdGRsZ3xsaXN0Zm9udHN8bG9hZHxsb2FkbGlicmFyeXxsb2Fkb2JqfGxvZ3xsb2cxMHxsb2cxcHxsb2cyfGxvZ2xvZ3xsb2dtfGxvZ3NwYWNlfGxvb2tmb3J8bG93ZXJ8bHN8bHNjb3Z8bHNxbm9ubmVnfGxzcXJ8IisKCQkibHR8bHV8bHVpbmN8bWFnaWN8bWFrZWhndGZvcm18bWF0MmNlbGx8bWF0MnN0cnxtYXRlcmlhbHxtYXRmaWxlfG1hdGxhYi5pby5NYXRGaWxlfG1hdGxhYi5taXhpbi4oPzpDb3B5YWJsZXxIZXRlcm9nZW5lb3VzKD86LmdldERlZmF1bHRTY2FsYXJFbGVtZW50KT8pfG1hdGxhYnJjfCIrCgkJIm1hdGxhYnJvb3R8bWF4fG1heE51bUNvbXBUaHJlYWRzfG1lYW58bWVkaWFufG1lbWJyYW5lfG1lbW1hcGZpbGV8bWVtb3J5fG1lbnV8bWVzaHxtZXNoY3xtZXNoZ3JpZHxtZXNoenxtZXRhLig/OmNsYXNzKD86LmZyb21OYW1lKT98RHluYW1pY1Byb3BlcnR5fEVudW1lcmF0ZWRWYWx1ZXxldmVudHwiKwoJCSJNZXRhRGF0YXxtZXRob2R8cGFja2FnZSg/Oi4oPzpmcm9tTmFtZXxnZXRBbGxQYWNrYWdlcykpP3xwcm9wZXJ0eSl8bWV0YWNsYXNzfG1ldGhvZHN8bWV0aG9kc3ZpZXd8bWV4KD86LmdldENvbXBpbGVyQ29uZmlndXJhdGlvbnMpP3xNRXhjZXB0aW9ufG1leGV4dHxtZmlsZW5hbWV8bWlufG1pbnJlc3wiKwoJCSJtaW51c3xtaXNsb2NrZWR8bWtkaXJ8bWtwcHxtbGRpdmlkZXxtbGludHxtbGludHJwdHxtbG9ja3xtbWZpbGVpbmZvfG1tcmVhZGVyfG1vZHxtb2RlfG1vcmV8bW92ZXxtb3ZlZmlsZXxtb3ZlZ3VpfG1vdmllfG1vdmllMmF2aXxtcG93ZXJ8bXJkaXZpZGV8bXNnYm94fG10aW1lc3xtdTJsaW58IisKCQkibXVsdGliYW5kcmVhZHxtdWx0aWJhbmR3cml0ZXxtdW5sb2NrfG5hbWVsZW5ndGhtYXh8bmFyZ2Noa3xuYXJnaW5jaGt8bmFyZ291dGNoa3xuYXRpdmUydW5pY29kZXxuY2NyZWF0ZXxuY2Rpc3B8bmNob29zZWt8bmNpbmZvfG5jcmVhZHxuY3JlYWRhdHR8bmN3cml0ZXxuY3dyaXRlYXR0fCIrCgkJIm5jd3JpdGVzY2hlbWF8bmRncmlkfG5kaW1zfG5lfE5FVCg/Oi4oPzphZGRBc3NlbWJseXxBc3NlbWJseXxjb252ZXJ0QXJyYXl8Y3JlYXRlQXJyYXl8Y3JlYXRlR2VuZXJpY3xkaXNhYmxlQXV0b1JlbGVhc2V8ZW5hYmxlQXV0b1JlbGVhc2V8R2VuZXJpY0NsYXNzfGludm9rZUdlbmVyaWNNZXRob2R8IisKCQkiTmV0RXhjZXB0aW9ufHNldFN0YXRpY1Byb3BlcnR5KSk/fG5ldGNkZi4oPzphYm9ydHxjbG9zZXxjb3B5QXR0fGNyZWF0ZXxkZWZEaW18ZGVmR3JwfGRlZlZhcnxkZWZWYXJDaHVua2luZ3xkZWZWYXJEZWZsYXRlfGRlZlZhckZpbGx8ZGVmVmFyRmxldGNoZXIzMnxkZWxBdHR8ZW5kRGVmfGdldEF0dHwiKwoJCSJnZXRDaHVua0NhY2hlfGdldENvbnN0YW50fGdldENvbnN0YW50TmFtZXN8Z2V0VmFyfGlucXxpbnFBdHR8aW5xQXR0SUR8aW5xQXR0TmFtZXxpbnFEaW18aW5xRGltSUR8aW5xRGltSURzfGlucUZvcm1hdHxpbnFHcnBOYW1lfGlucUdycE5hbWVGdWxsfGlucUdycFBhcmVudHxpbnFHcnBzfCIrCgkJImlucUxpYlZlcnN8aW5xTmNpZHxpbnFVbmxpbURpbXN8aW5xVmFyfGlucVZhckNodW5raW5nfGlucVZhckRlZmxhdGV8aW5xVmFyRmlsbHxpbnFWYXJGbGV0Y2hlcjMyfGlucVZhcklEfGlucVZhcklEc3xvcGVufHB1dEF0dHxwdXRWYXJ8cmVEZWZ8cmVuYW1lQXR0fHJlbmFtZURpbXxyZW5hbWVWYXJ8IisKCQkic2V0Q2h1bmtDYWNoZXxzZXREZWZhdWx0Rm9ybWF0fHNldEZpbGx8c3luYyl8bmV3cGxvdHxuZXh0cG93Mnxubnp8bm9hbmltYXRlfG5vbnplcm9zfG5vcm18bm9ybWVzdHxub3R8bm90ZWJvb2t8bm93fG50aHJvb3R8bnVsbHxudW0yY2VsbHxudW0yaGV4fG51bTJzdHJ8bnVtZWx8bnptYXh8IisKCQkib2RlKD86MTEzfDE1aXwxNXN8MjN8MjNzfDIzdHwyM3RifDQ1KXxvZGVnZXR8b2Rlc2V0fG9kZXh0ZW5kfG9uQ2xlYW51cHxvbmVzfG9wZW58b3BlbmZpZ3xvcGVuZ2x8b3BlbnZhcnxvcHRpbWdldHxvcHRpbXNldHxvcnxvcmRlaWd8b3JkZXJmaWVsZHN8b3JkcXp8b3Jkc2NodXJ8b3JpZW50fCIrCgkJIm9ydGh8cGFja3xwYWRlY29lZnxwYWdlc2V0dXBkbGd8cGFufHBhcmV0b3xwYXJzZVNvYXBSZXNwb25zZXxwYXNjYWx8cGF0Y2h8cGF0aHxwYXRoMnJjfHBhdGhzZXB8cGF0aHRvb2x8cGF1c2V8cGJhc3BlY3R8cGNnfHBjaGlwfHBjb2RlfHBjb2xvcnxwZGVwZXxwZGV2YWx8cGVha3N8cGVybHxwZXJtc3wiKwoJCSJwZXJtdXRlfHBpZXxwaW5rfHBpbnZ8cGxhbmVyb3R8cGxheXNob3d8cGxvdHxwbG90M3xwbG90YnJvd3NlcnxwbG90ZWRpdHxwbG90bWF0cml4fHBsb3R0b29sc3xwbG90eXl8cGx1c3xwb2wyY2FydHxwb2xhcnxwb2x5fHBvbHlhcmVhfHBvbHlkZXJ8cG9seWVpZ3xwb2x5Zml0fHBvbHlpbnR8cG9seXZhbHwiKwoJCSJwb2x5dmFsbXxwb3cyfHBvd2VyfHBwdmFsfHByZWZkaXJ8cHJlZmVyZW5jZXN8cHJpbWVzfHByaW50fHByaW50ZGxnfHByaW50b3B0fHByaW50cHJldmlld3xwcm9kfHByb2ZpbGV8cHJvZnNhdmV8cHJvcGVkaXR8cHJvcGVydHllZGl0b3J8cHNpfHB1Ymxpc2h8UHV0Q2hhckFycmF5fFB1dEZ1bGxNYXRyaXh8IisKCQkiUHV0V29ya3NwYWNlRGF0YXxwd2R8cWh1bGx8cW1yfHFyfHFyZGVsZXRlfHFyaW5zZXJ0fHFydXBkYXRlfHF1YWR8cXVhZDJkfHF1YWRna3xxdWFkbHxxdWFkdnxxdWVzdGRsZ3xxdWl0fHF1aXZlcnxxdWl2ZXIzfHF6fHJhbmR8cmFuZGl8cmFuZG58cmFuZHBlcm18UmFuZFN0cmVhbSg/Oi4oPzpjcmVhdGV8IisKCQkiZ2V0RGVmYXVsdFN0cmVhbXxnZXRHbG9iYWxTdHJlYW18bGlzdHxzZXREZWZhdWx0U3RyZWFtfHNldEdsb2JhbFN0cmVhbSkpP3xyYW5rfHJhdHxyYXRzfHJiYm94fHJjb25kfHJkaXZpZGV8cmVhZGFzeW5jfHJlYWx8cmVhbGxvZ3xyZWFsbWF4fHJlYWxtaW58cmVhbHBvd3xyZWFsc3FydHxyZWNvcmR8IisKCQkicmVjdGFuZ2xlfHJlY3RpbnR8cmVjeWNsZXxyZWR1Y2VwYXRjaHxyZWR1Y2V2b2x1bWV8cmVmcmVzaHxyZWZyZXNoZGF0YXxyZWdleHB8cmVnZXhwaXxyZWdleHByZXB8cmVnZXhwdHJhbnNsYXRlfHJlaGFzaHxyZW18UmVtb3ZlfFJlbW92ZUFsbHxyZXBtYXR8cmVzZXR8cmVzaGFwZXxyZXNpZHVlfCIrCgkJInJlc3RvcmVkZWZhdWx0cGF0aHxyZXRocm93fHJnYjJoc3Z8cmdiMmluZHxyZ2JwbG90fHJpYmJvbnxybWFwcGRhdGF8cm1kaXJ8cm1maWVsZHxybXBhdGh8cm1wcmVmfHJuZ3xyb290c3xyb3NlfHJvc3Nlcnxyb3Q5MHxyb3RhdGV8cm90YXRlM2R8cm91bmR8cnJlZnxyc2YyY3NmfHJ1bnxzYXZlfHNhdmVhc3wiKwoJCSJzYXZlb2JqfHNhdmVwYXRofHNjYXR0ZXJ8c2NhdHRlcjN8c2NodXJ8c2VjfHNlY2R8c2VjaHxzZWxlY3Rtb3ZlcmVzaXplfHNlbWlsb2d4fHNlbWlsb2d5fHNlbmRtYWlsfHNlcmlhbHxzZXR8c2V0YXBwZGF0YXxzZXRkaWZmfHNldGVudnxzZXRmaWVsZHxzZXRwaXhlbHBvc2l0aW9ufHNldHByZWZ8c2V0c3RyfCIrCgkJInNldHhvcnxzaGFkaW5nfHNoZ3xzaGlmdGRpbXxzaG93cGxvdHRvb2x8c2hyaW5rZmFjZXN8c2lnbnxzaW4oPzpkfGgpP3xzaXplfHNsaWNlfHNtb290aDN8c25hcG5vd3xzb3J0fHNvcnRyb3dzfHNvdW5kfHNvdW5kc2N8c3BhbGxvY3xzcGF1Z21lbnR8c3Bjb252ZXJ0fHNwZGlhZ3N8c3BlY3VsYXJ8c3BleWV8IisKCQkic3BmdW58c3BoMmNhcnR8c3BoZXJlfHNwaW5tYXB8c3BsaW5lfHNwb25lc3xzcHBhcm1zfHNwcmFuZHxzcHJhbmRufHNwcmFuZHN5bXxzcHJhbmt8c3ByaW5nfHNwcmludGZ8c3B5fHNxcnR8c3FydG18c3F1ZWV6ZXxzczJ0Znxzc2NhbmZ8c3RhaXJzfHN0YXJ0dXB8c3RkfHN0ZW18c3RlbTN8c3RvcGFzeW5jfCIrCgkJInN0cjJkb3VibGV8c3RyMmZ1bmN8c3RyMm1hdHxzdHIybnVtfHN0cmNhdHxzdHJjbXB8c3RyY21waXxzdHJlYW0yfHN0cmVhbTN8c3RyZWFtbGluZXxzdHJlYW1wYXJ0aWNsZXN8c3RyZWFtcmliYm9ufHN0cmVhbXNsaWNlfHN0cmVhbXR1YmV8c3RyZmluZHxzdHJqdXN0fHN0cm1hdGNofHN0cm5jbXB8IisKCQkic3RybmNtcGl8c3RycmVhZHxzdHJyZXB8c3RydG9rfHN0cnRyaW18c3RydWN0MmNlbGx8c3RydWN0ZnVufHN0cnZjYXR8c3ViMmluZHxzdWJwbG90fHN1YnNhc2dufHN1YnNpbmRleHxzdWJzcGFjZXxzdWJzcmVmfHN1YnN0cnVjdHxzdWJ2b2x1bWV8c3VtfHN1bW1lcnxzdXBlcmNsYXNzZXN8c3VwZXJpb3J0b3wiKwoJCSJzdXBwb3J0fHN1cmZ8c3VyZjJwYXRjaHxzdXJmYWNlfHN1cmZjfHN1cmZsfHN1cmZub3JtfHN2ZHxzdmRzfHN3YXBieXRlc3xzeW1hbWR8c3ltYmZhY3R8c3ltbWxxfHN5bXJjbXxzeW12YXJ8c3lzdGVtfHRhbig/OmR8aCk/fHRhcnx0ZW1wZGlyfHRlbXBuYW1lfHRldHJhbWVzaHx0ZXhsYWJlbHx0ZXh0fCIrCgkJInRleHRyZWFkfHRleHRzY2FufHRleHR3cmFwfHRmcW1yfHRocm93fHRpY3xUaWZmKD86Lig/OmdldFRhZ05hbWVzfGdldFZlcnNpb24pKT98dGltZXJ8dGltZXJmaW5kfHRpbWVyZmluZGFsbHx0aW1lc3x0aW1lc2VyaWVzfHRpdGxlfHRvY3x0b2RhdGVudW18dG9lcGxpdHp8dG9vbGJveGRpcnx0cmFjZXwiKwoJCSJ0cmFuc3Bvc2V8dHJhcHp8dHJlZWxheW91dHx0cmVlcGxvdHx0cmlsfHRyaW1lc2h8dHJpcGxlcXVhZHx0cmlwbG90fFRyaVJlcHxUcmlTY2F0dGVyZWRJbnRlcnB8dHJpc3VyZnx0cml1fHRzY29sbGVjdGlvbnx0c2VhcmNofHRzZWFyY2hufHRzdG9vbHx0eXBlfHR5cGVjYXN0fHVpYnV0dG9uZ3JvdXB8IisKCQkidWljb250ZXh0bWVudXx1aWNvbnRyb2x8dWlnZXRkaXJ8dWlnZXRmaWxlfHVpZ2V0cHJlZnx1aWltcG9ydHx1aW1lbnV8dWlvcGVufHVpcGFuZWx8dWlwdXNodG9vbHx1aXB1dGZpbGV8dWlyZXN1bWV8dWlzYXZlfHVpc2V0Y29sb3J8dWlzZXRmb250fHVpc2V0cHJlZnx1aXN0YWNrfHVpdGFibGV8IisKCQkidWl0b2dnbGV0b29sfHVpdG9vbGJhcnx1aXdhaXR8dW1pbnVzfHVuZG9jaGVja291dHx1bmljb2RlMm5hdGl2ZXx1bmlvbnx1bmlxdWV8dW5peHx1bmxvYWRsaWJyYXJ5fHVubWVzaHx1bm1rcHB8dW50YXJ8dW53cmFwfHVuemlwfHVwbHVzfHVwcGVyfHVybHJlYWR8dXJsd3JpdGV8dXNlamF2YXwiKwoJCSJ1c2VycGF0aHx2YWxpZGF0ZWF0dHJpYnV0ZXN8dmFsaWRhdGVzdHJpbmd8dmFuZGVyfHZhcnx2ZWN0b3JpemV8dmVyfHZlcmN0cmx8dmVyTGVzc1RoYW58dmVyc2lvbnx2ZXJ0Y2F0fFZpZGVvUmVhZGVyKD86LmlzUGxhdGZvcm1TdXBwb3J0ZWQpP3xWaWRlb1dyaXRlcig/Oi5nZXRQcm9maWxlcyk/fCIrCgkJInZpZXd8dmlld210eHx2aXNkaWZmfHZvbHVtZWJvdW5kc3x2b3Jvbm9pfHZvcm9ub2lufHdhaXR8d2FpdGJhcnx3YWl0Zm9yfHdhaXRmb3JidXR0b25wcmVzc3x3YXJuZGxnfHdhcm5pbmd8d2F0ZXJmYWxsfHdhdmZpbmZvfHdhdnBsYXl8d2F2cmVhZHx3YXZyZWNvcmR8d2F2d3JpdGV8d2VifHdlZWtkYXl8IisKCQkid2hhdHx3aGF0c25ld3x3aGljaHx3aGl0ZWJnfHdob3x3aG9zfHdpbGtpbnNvbnx3aW5vcGVufHdpbnF1ZXJ5cmVnfHdpbnRlcnx3azFmaW5mb3x3azFyZWFkfHdrMXdyaXRlfHdvcmtzcGFjZXx4bGFiZWx8eGxpbXx4bHNmaW5mb3x4bHNyZWFkfHhsc3dyaXRlfHhtbHJlYWR8eG1sd3JpdGV8eG9yfHhzbHR8IisKCQkieWxhYmVsfHlsaW18emVyb3N8emlwfHpsYWJlbHx6bGltfHpvb218YWRkZWR2YXJwbG90fGFuZHJld3NwbG90fGFub3ZhKD86MXwyfG4pfGFuc2FyaWJyYWRsZXl8YW9jdG9vbHxiYXJ0dGVzdHxiYmRlc2lnbnxiZXRhKD86Y2RmfGZpdHxpbnZ8bGlrZXxwZGZ8cm5kfHN0YXQpfGJpbm8oPzpjZGZ8Zml0fGludnwiKwoJCSJwZGZ8cm5kfHN0YXQpfGJpcGxvdHxib290Y2l8Ym9vdHN0cnB8Ym94cGxvdHxjYW5kZXhjaHxjYW5kZ2VufGNhbm9uY29ycnxjYXBhYmlsaXR5fGNhcGFwbG90fGNhc2VyZWFkfGNhc2V3cml0ZXxjYXRlZ29yaWNhbHxjY2Rlc2lnbnxjZGZwbG90fGNoaTIoPzpjZGZ8Z29mfGludnxwZGZ8cm5kfHN0YXQpfCIrCgkJImNob2xjb3Z8Q2xhc3NpZmljYXRpb24oPzpCYWdnZWRFbnNlbWJsZXxEaXNjcmltaW5hbnQoPzouKD86Zml0fG1ha2V8dGVtcGxhdGUpKT98RW5zZW1ibGV8S05OKD86Lig/OmZpdHx0ZW1wbGF0ZSkpP3xQYXJ0aXRpb25lZEVuc2VtYmxlfFBhcnRpdGlvbmVkTW9kZWx8VHJlZSg/Oi4oPzpmaXR8IisKCQkidGVtcGxhdGUpKT8pfGNsYXNzaWZ5fGNsYXNzcmVndHJlZXxjbHVzdGVyfGNsdXN0ZXJkYXRhfGNtZHNjYWxlfGNvbWJua3xDb21wYWN0KD86Q2xhc3NpZmljYXRpb24oPzpEaXNjcmltaW5hbnR8RW5zZW1ibGV8VHJlZSl8UmVncmVzc2lvbig/OkVuc2VtYmxlfFRyZWUpfFRyZWVCYWdnZXIpfGNvbmZ1c2lvbm1hdHwiKwoJCSJjb250cm9sY2hhcnR8Y29udHJvbHJ1bGVzfGNvcGhlbmV0fGNvcHVsYSg/OmNkZnxmaXR8cGFyYW18cGRmfHJuZHxzdGF0KXxjb3JkZXhjaHxjb3JyfGNvcnJjb3Z8Y294cGhmaXR8Y3JlYXRlbnN8Y3Jvc3N0YWJ8Y3Jvc3N2YWx8Y3ZwYXJ0aXRpb258ZGF0YXNhbXBsZXxkYXRhc2V0fGRhdWdtZW50fGRjb3Zhcnl8IisKCQkiZGVuZHJvZ3JhbXxkZml0dG9vbHxkaXN0dG9vbHxkdW1teXZhcnxkd3Rlc3R8ZWNkZnxlY2RmaGlzdHxldig/OmNkZnxmaXR8aW52fGxpa2V8cGRmfHJuZHxzdGF0KXxFeGhhdXN0aXZlU2VhcmNoZXJ8ZXhwKD86Y2RmfGZpdHxpbnZ8bGlrZXxwZGZ8cm5kfHN0YXQpfGZhY3RvcmFufGZjZGZ8ZmYybnxmaW52fCIrCgkJImZpdGRpc3R8Zml0ZW5zZW1ibGV8ZnBkZnxmcmFjZmFjdHxmcmFjZmFjdGdlbnxmcmllZG1hbnxmcm5kfGZzdGF0fGZzdXJmaHR8ZnVsbGZhY3R8Z2FnZXJyfGdhbSg/OmNkZnxmaXR8aW52fGxpa2V8cGRmfHJuZHxzdGF0KXxHZW5lcmFsaXplZExpbmVhck1vZGVsKD86LmZpdCk/fGdlbyg/OmNkZnxpbnZ8bWVhbnwiKwoJCSJwZGZ8cm5kfHN0YXQpfGdldig/OmNkZnxmaXR8aW52fGxpa2V8cGRmfHJuZHxzdGF0KXxnbGluZXxnbG1maXR8Z2xtdmFsfGdseXBocGxvdHxnbWRpc3RyaWJ1dGlvbig/Oi5maXQpP3xnbmFtZXxncCg/OmNkZnxmaXR8aW52fGxpa2V8cGRmfHJuZHxzdGF0KXxncGxvdG1hdHJpeHxncnAyaWR4fGdycHN0YXRzfCIrCgkJImdzY2F0dGVyfGhhbHRvbnNldHxoYXJtbWVhbnxoaXN0M3xoaXN0Zml0fGhtbSg/OmRlY29kZXxlc3RpbWF0ZXxnZW5lcmF0ZXx0cmFpbnx2aXRlcmJpKXxob3VnZW58aHlnZSg/OmNkZnxpbnZ8cGRmfHJuZHxzdGF0KXxpY2RmfGluY29uc2lzdGVudHxpbnRlcmFjdGlvbnBsb3R8aW52cHJlZHxpcXJ8aXdpc2hybmR8IisKCQkiamFja2tuaWZlfGpidGVzdHxqb2huc3JuZHxLRFRyZWVTZWFyY2hlcnxrbWVhbnN8a25uc2VhcmNofGtydXNrYWx3YWxsaXN8a3NkZW5zaXR5fGtzdGVzdHxrc3Rlc3QyfGt1cnRvc2lzfGxhc3NvfGxhc3NvZ2xtfGxhc3NvUGxvdHxsZXZlcmFnZXxsaHNkZXNpZ258bGhzbm9ybXxsaWxsaWV0ZXN0fCIrCgkJIkxpbmVhck1vZGVsKD86LmZpdCk/fGxpbmh5cHRlc3R8bGlua2FnZXxsb2duKD86Y2RmfGZpdHxpbnZ8bGlrZXxwZGZ8cm5kfHN0YXQpfGxzbGluZXxtYWR8bWFoYWx8bWFpbmVmZmVjdHNwbG90fG1hbm92YTF8bWFub3ZhY2x1c3RlcnxtZHNjYWxlfG1oc2FtcGxlfG1sZXxtbGVjb3Z8bW5wZGZ8IisKCQkibW5yZml0fG1ucm5kfG1ucnZhbHxtb21lbnR8bXVsdGNvbXBhcmV8bXVsdGl2YXJpY2hhcnR8bXZuKD86Y2RmfHBkZnxybmQpfG12cmVncmVzc3xtdnJlZ3Jlc3NsaWtlfG12dCg/OmNkZnxwZGZ8cm5kKXxOYWl2ZUJheWVzKD86LmZpdCk/fG5hbig/OmNvdnxtYXh8bWVhbnxtZWRpYW58bWlufHN0ZHwiKwoJCSJzdW18dmFyKXxuYmluKD86Y2RmfGZpdHxpbnZ8cGRmfHJuZHxzdGF0KXxuY2YoPzpjZGZ8aW52fHBkZnxybmR8c3RhdCl8bmN0KD86Y2RmfGludnxwZGZ8cm5kfHN0YXQpfG5jeDIoPzpjZGZ8aW52fHBkZnxybmR8c3RhdCl8TmVpZ2hib3JTZWFyY2hlcnxubGluZml0fG5saW50b29sfG5sbWVmaXR8bmxtZWZpdHNhfCIrCgkJIm5scGFyY2l8bmxwcmVkY2l8bm5tZnxub21pbmFsfE5vbkxpbmVhck1vZGVsKD86LmZpdCk/fG5vcm0oPzpjZGZ8Zml0fGludnxsaWtlfHBkZnxybmR8c3RhdCl8bm9ybXBsb3R8bm9ybXNwZWN8b3JkaW5hbHxvdXRsaWVyTWVhc3VyZXxwYXJhbGxlbGNvb3Jkc3xwYXJldG90YWlsc3xwYXJ0aWFsY29ycnwiKwoJCSJwY2Fjb3Z8cGNhcmVzfHBkZnxwZGlzdHxwZGlzdDJ8cGVhcnNybmR8cGVyZmN1cnZlfHBlcm1zfHBpZWNld2lzZWRpc3RyaWJ1dGlvbnxwbHNyZWdyZXNzfHBvaXNzKD86Y2RmfGZpdHxpbnZ8cGRmfHJuZHx0YXQpfHBvbHljb25mfHBvbHl0b29sfHByY3RpbGV8cHJpbmNvbXB8UHJvYkRpc3QoPzpLZXJuZWx8IisKCQkiUGFyYW1ldHJpY3xVbml2S2VybmVsfFVuaXZQYXJhbSk/fHByb2JwbG90fHByb2NydXN0ZXN8cXFwbG90fHFyYW5kc2V0fHFyYW5kc3RyZWFtfHF1YW50aWxlfHJhbmRnfHJhbmRvbXxyYW5kc2FtcGxlfHJhbmR0b29sfHJhbmdlfHJhbmdlc2VhcmNofHJhbmtzdW18cmF5bCg/OmNkZnxmaXR8aW52fHBkZnwiKwoJCSJybmR8c3RhdCl8cmNvcGxvdHxyZWZjdXJ2ZXxyZWZsaW5lfHJlZ3Jlc3N8UmVncmVzc2lvbig/OkJhZ2dlZEVuc2VtYmxlfEVuc2VtYmxlfFBhcnRpdGlvbmVkRW5zZW1ibGV8UGFydGl0aW9uZWRNb2RlbHxUcmVlKD86Lig/OmZpdHx0ZW1wbGF0ZSkpPyl8cmVnc3RhdHN8cmVsaWVmZnxyaWRnZXwiKwoJCSJyb2J1c3RkZW1vfHJvYnVzdGZpdHxyb3RhdGVmYWN0b3JzfHJvd2V4Y2h8cnNtZGVtb3xyc3Rvb2x8cnVuc3Rlc3R8c2FtcHNpemVwd3J8c2NhdHRlcmhpc3R8c2VxdWVudGlhbGZzfHNpZ25yYW5rfHNpZ250ZXN0fHNpbGhvdWV0dGV8c2tld25lc3N8c2xpY2VzYW1wbGV8c29ib2xzZXR8c3F1YXJlZm9ybXwiKwoJCSJzdGF0Z2V0fHN0YXRzZXR8c3RlcHdpc2V8c3RlcHdpc2VmaXR8c3VyZmh0fHRhYnVsYXRlfHRibHJlYWR8dGJsd3JpdGV8dGNkZnx0ZGZyZWFkfHRpZWRyYW5rfHRpbnZ8dHBkZnxUcmVlQmFnZ2VyfHRyZWVkaXNwfHRyZWVmaXR8dHJlZXBydW5lfHRyZWV0ZXN0fHRyZWV2YWx8dHJpbW1lYW58dHJuZHx0c3RhdHwiKwoJCSJ0dGVzdHx0dGVzdDJ8dW5pZCg/OmNkZnxpbnZ8cGRmfHJuZHxzdGF0KXx1bmlmKD86Y2RmfGludnxpdHxwZGZ8cm5kfHN0YXQpfHZhcnRlc3QoPzoyfG4pP3x3YmwoPzpjZGZ8Zml0fGludnxsaWtlfHBkZnxybmR8c3RhdCl8d2JscGxvdHx3aXNocm5kfHgyZnh8eHB0cmVhZHx6c2NvcmV8enRlc3QiKwoJCSJhZGFwdGhpc3RlcXxhbmFseXplNzVpbmZvfGFuYWx5emU3NXJlYWR8YXBwbHljZm9ybXxhcHBseWx1dHxheGVzMnBpeHxiZXN0YmxrfGJsb2NrcHJvY3xid2FyZWF8YndhcmVhb3Blbnxid2JvdW5kYXJpZXN8Yndjb25uY29tcHxid2NvbnZodWxsfGJ3ZGlzdHxid2Rpc3RnZW9kZXNpY3xid2V1bGVyfCIrCgkJImJ3aGl0bWlzc3xid2xhYmVsfGJ3bGFiZWxufGJ3bW9ycGh8YndwYWNrfGJ3cGVyaW18YndzZWxlY3R8Ynd0cmFjZWJvdW5kYXJ5fGJ3dWx0ZXJvZGV8Ynd1bnBhY2t8Y2hlY2tlcmJvYXJkfGNvbDJpbXxjb2xmaWx0fGNvbm5kZWZ8Y29udm10eDJ8Y29ybmVyfGNvcm5lcm1ldHJpY3xjb3JyMnxjcDJ0Zm9ybXwiKwoJCSJjcGNvcnJ8Y3BzZWxlY3R8Y3BzdHJ1Y3QycGFpcnN8ZGN0MnxkY3RtdHh8ZGVjb252YmxpbmR8ZGVjb252bHVjeXxkZWNvbnZyZWd8ZGVjb252d25yfGRlY29ycnN0cmV0Y2h8ZGVtb3NhaWN8ZGljb20oPzphbm9ufGRpY3R8aW5mb3xsb29rdXB8cmVhZHx1aWR8d3JpdGUpfGVkZ2V8ZWRnZXRhcGVyfGVudHJvcHl8IisKCQkiZW50cm9weWZpbHR8ZmFuMnBhcmF8ZmFuYmVhbXxmaW5kYm91bmRzfGZsaXB0Zm9ybXxmcmVxejJ8ZnNhbXAyfGZzcGVjaWFsfGZ0cmFuczJ8ZndpbmQxfGZ3aW5kMnxnZXRoZWlnaHR8Z2V0aW1hZ2V8Z2V0aW1hZ2Vtb2RlbHxnZXRsaW5lfGdldG5laWdoYm9yc3xnZXRuaG9vZHxnZXRwdHN8IisKCQkiZ2V0cmFuZ2Vmcm9tY2xhc3N8Z2V0cmVjdHxnZXRzZXF1ZW5jZXxncmF5MmluZHxncmF5Y29tYXRyaXh8Z3JheWNvcHJvcHN8Z3JheWRpc3R8Z3JheXNsaWNlfGdyYXl0aHJlc2h8aGRycmVhZHxoZHJ3cml0ZXxoaXN0ZXF8aG91Z2h8aG91Z2hsaW5lc3xob3VnaHBlYWtzfGljY2ZpbmR8aWNjcmVhZHwiKwoJCSJpY2Nyb290fGljY3dyaXRlfGlkY3QyfGlmYW5iZWFtfGltMmJ3fGltMmNvbHxpbTJkb3VibGV8aW0yaW50MTZ8aW0yamF2YTJkfGltMnNpbmdsZXxpbTJ1aW50MTZ8aW0ydWludDh8aW1hYnNkaWZmfGltYWRkfGltYWRqdXN0fEltYWdlQWRhcHRlcnxpbWFnZWluZm98aW1hZ2Vtb2RlbHxpbWFwcGx5bWF0cml4fCIrCgkJImltYXR0cmlidXRlc3xpbWJvdGhhdHxpbWNsZWFyYm9yZGVyfGltY2xvc2V8aW1jb2xvcm1hcHRvb2x8aW1jb21wbGVtZW50fGltY29udG91cnxpbWNvbnRyYXN0fGltY3JvcHxpbWRpbGF0ZXxpbWRpc3BsYXlyYW5nZXxpbWRpc3RsaW5lfGltZGl2aWRlfGltZWxsaXBzZXxpbWVyb2RlfGltZXh0ZW5kZWRtYXh8IisKCQkiaW1leHRlbmRlZG1pbnxpbWZpbGx8aW1maWx0ZXJ8aW1maW5kY2lyY2xlc3xpbWZyZWVoYW5kfGltZnVzZXxpbWdjYXxpbWdjZnxpbWdldGZpbGV8aW1oYW5kbGVzfGltaGlzdHxpbWhtYXh8aW1obWlufGltaW1wb3NlbWlufGltbGluY29tYnxpbWxpbmV8aW1tYWdib3h8aW1tb3ZpZXxpbW11bHRpcGx5fGltbm9pc2V8IisKCQkiaW1vcGVufGltb3ZlcnZpZXd8aW1vdmVydmlld3BhbmVsfGltcGl4ZWx8aW1waXhlbGluZm98aW1waXhlbGluZm92YWx8aW1waXhlbHJlZ2lvbnxpbXBpeGVscmVnaW9ucGFuZWx8aW1wbGF5fGltcG9pbnR8aW1wb2x5fGltcG9zaXRpb25yZWN0fGltcHJvZmlsZXxpbXB1dGZpbGV8aW1weXJhbWlkfCIrCgkJImltcmVjb25zdHJ1Y3R8aW1yZWN0fGltcmVnY29uZmlnfGltcmVnaW9uYWxtYXh8aW1yZWdpb25hbG1pbnxpbXJlZ2lzdGVyfGltcmVzaXplfGltcm9pfGltcm90YXRlfGltc2F2ZXxpbXNjcm9sbHBhbmVsfGltc2hvd3xpbXNob3dwYWlyfGltc3VidHJhY3R8aW10b29sfGltdG9waGF0fGltdHJhbnNmb3JtfCIrCgkJImltdmlld3xpbmQyZ3JheXxpbmQycmdifGludGVyZmlsZWluZm98aW50ZXJmaWxlcmVhZHxpbnRsdXR8aXBwbHxpcHRhZGRjYWxsYmFja3xpcHRjaGVja2Nvbm58aXB0Y2hlY2toYW5kbGV8aXB0Y2hlY2tpbnB1dHxpcHRjaGVja21hcHxpcHRjaGVja25hcmdpbnxpcHRjaGVja3N0cnN8aXB0ZGVtb3N8aXB0Z2V0YXBpfCIrCgkJImlwdEdldFBvaW50ZXJCZWhhdmlvcnxpcHRnZXRwcmVmfGlwdGljb25kaXJ8aXB0bnVtMm9yZGluYWx8aXB0UG9pbnRlck1hbmFnZXJ8aXB0cHJlZnN8aXB0cmVtb3ZlY2FsbGJhY2t8aXB0U2V0UG9pbnRlckJlaGF2aW9yfGlwdHNldHByZWZ8aXB0d2luZG93YWxpZ258aXJhZG9ufGlzYnd8aXNmbGF0fGlzZ3JheXwiKwoJCSJpc2ljY3xpc2luZHxpc25pdGZ8aXNyZ2J8aXNyc2V0fGxhYjJkb3VibGV8bGFiMnVpbnQxNnxsYWIydWludDh8bGFiZWwycmdifGxhYmVsbWF0cml4fG1ha2VjZm9ybXxtYWtlQ29uc3RyYWluVG9SZWN0RmNufG1ha2VoZHJ8bWFrZWx1dHxtYWtlcmVzYW1wbGVyfG1ha2V0Zm9ybXxtYXQyZ3JheXxtZWFuMnwiKwoJCSJtZWRmaWx0Mnxtb250YWdlfG5pdGZpbmZvfG5pdGZyZWFkfG5sZmlsdGVyfG5vcm14Y29ycjJ8bnRzYzJyZ2J8b3BlbnJzZXR8b3JkZmlsdDJ8b3RmMnBzZnxwYWRhcnJheXxwYXJhMmZhbnxwaGFudG9tfHBvbHkybWFza3xwc2Yyb3RmfHF0ZGVjb21wfHF0Z2V0YmxrfHF0c2V0YmxrfHJhZG9ufHJhbmdlZmlsdHwiKwoJCSJyZWZsZWN0fHJlZ2lvbnByb3BzfHJlZ2lzdHJhdGlvbi5tZXRyaWMuKD86TWF0dGVzTXV0dWFsSW5mb3JtYXRpb258TWVhblNxdWFyZXMpfHJlZ2lzdHJhdGlvbi5vcHRpbWl6ZXIuKD86T25lUGx1c09uZUV2b2x1dGlvbmFyeXxSZWd1bGFyU3RlcEdyYWRpZW50RGVzY2VudCl8cmdiMmdyYXl8IisKCQkicmdiMm50c2N8cmdiMnljYmNyfHJvaWNvbG9yfHJvaWZpbGx8cm9pZmlsdDJ8cm9pcG9seXxyc2V0d3JpdGV8c3RkMnxzdGRmaWx0fHN0cmVsfHN0cmV0Y2hsaW18c3ViaW1hZ2V8dGZvcm1hcnJheXx0Zm9ybWZ3ZHx0Zm9ybWludnx0b25lbWFwfHRyYW5zbGF0ZXx0cnVlc2l6ZXx1aW50bHV0fHZpc2NpcmNsZXN8IisKCQkid2FycHx3YXRlcnNoZWR8d2hpdGVwb2ludHx3aWVuZXIyfHh5ejJkb3VibGV8eHl6MnVpbnQxNnx5Y2JjcjJyZ2J8YmludHByb2d8Y29sb3J8ZmdvYWxhdHRhaW58Zm1pbmJuZHxmbWluY29ufGZtaW5pbWF4fGZtaW5zZWFyY2h8Zm1pbnVuY3xmc2VtaW5mfGZzb2x2ZXxmemVyb3xmem11bHR8Z2FuZ3N0cnxrdHJsaW5rfCIrCgkJImxpbnByb2d8bHNxY3VydmVmaXR8bHNxbGlufGxzcW5vbmxpbnxsc3Fub25uZWd8b3B0aW1nZXR8b3B0aW1zZXR8b3B0aW10b29sfHF1YWRwcm9nIgogICAgKTsKICAgIHZhciBzdG9yYWdlVHlwZSA9ICgKICAgICAgICAiY2VsbHxzdHJ1Y3R8Y2hhcnxkb3VibGV8c2luZ2xlfGxvZ2ljYWx8dT9pbnQoPzo4fDE2fDMyfDY0KXxzcGFyc2UiCiAgICApOwogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdG9yYWdlLnR5cGUiOiBzdG9yYWdlVHlwZSwKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbeyAKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHN0YXRlTmFtZSA6ICJxc3RyaW5nIiwKICAgICAgICAgICAgbmV4dCAgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIicnIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgbmV4dDogIm5vUXN0cmluZyIKICAgICAgICB9XSwgICAgICAgIAogICAgICAgIG5vUXN0cmluZyA6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAiXlxccyole1xccyokIiwKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LnN0YXJ0IiwKICAgICAgICAgICAgcHVzaDogImJsb2NrQ29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICIlW15cclxuXSoiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgc3RhdGVOYW1lIDogInFxc3RyaW5nIiwKICAgICAgICAgICAgbmV4dCAgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcL3xcXC9cXC98PEA+fEA+fDxAfCZ8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbKHtcXFtdIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcXX0pXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9XSwKICAgICAgICBibG9ja0NvbW1lbnQ6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAiXlxccyole1xccyokIiwKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LnN0YXJ0IiwKICAgICAgICAgICAgcHVzaDogImJsb2NrQ29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAiXlxccyolfVxccyokIiwKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmVuZCIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgIH1dCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTWF0bGFiSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLk1hdGxhYkhpZ2hsaWdodFJ1bGVzID0gTWF0bGFiSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRsYWIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9tYXRsYWJfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgTWF0bGFiSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL21hdGxhYl9oaWdobGlnaHRfcnVsZXMiKS5NYXRsYWJIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTWF0bGFiSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIlIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiJXsiLCBlbmQ6ICIlfSJ9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL21hdGxhYiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9tYXRsYWIiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-maze.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tYXplX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1hemVIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvIyN8YGAvLAogICAgICAgICAgICBjb21tZW50OiAiV2FsbCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiZW50aXR5Lm5hbWUudGFnIiwKICAgICAgICAgICAgcmVnZXg6IC9cLlwuLywKICAgICAgICAgICAgY29tbWVudDogIlBhdGgiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvPD4vLAogICAgICAgICAgICBjb21tZW50OiAiU3BsaXR0ZXIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImVudGl0eS5uYW1lLnRhZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCpbXCpBLVphLXowLTldLywKICAgICAgICAgICAgY29tbWVudDogIlNpZ25hbCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4OiAvWzAtOV17Mn0vLAogICAgICAgICAgICBjb21tZW50OiAiUGF1c2UiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXF5cXi8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJTdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sIiwKICAgICAgICAgICAgcmVnZXg6IC9cKFwpLywKICAgICAgICAgICAgY29tbWVudDogIkhvbGUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleDogLz4+LywKICAgICAgICAgICAgY29tbWVudDogIk91dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvPlwvLywKICAgICAgICAgICAgY29tbWVudDogIkxuIE91dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvPDwvLAogICAgICAgICAgICBjb21tZW50OiAiSW4iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvLS0vLAogICAgICAgICAgICBjb21tZW50OiAiT25lIHVzZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogLyVbTFJVRE5scnVkbl0vLAogICAgICAgICAgICBjb21tZW50OiAiRGlyZWN0aW9uIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICAic3RyaW5nLnF1b3RlZC5kb3VibGUiLAogICAgICAgICAgICAgICAgInN0cmluZy5xdW90ZWQuc2luZ2xlIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLyhbQS1aYS16XVtBLVphLXowLTldKSggKi0+ICopKD86KFstKypcL109KSggKikoKD86LSk/KShbMC05XSspfCg9KSggKikoPzooKD86LSk/KShbMC05XSspfCgiW14iXSoiKXwoJ1teJ10qJykpKS8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJBc3NpZ25tZW50IGZ1bmN0aW9uIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5jb250cm9sIiwKICAgICAgICAgICAgICAgICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS50YWciLAogICAgICAgICAgICAgICAgImtleXdvcmQub3RoZXIiLAogICAgICAgICAgICAgICAgImtleXdvcmQuY29udHJvbCIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgImtleXdvcmQub3RoZXIiLAogICAgICAgICAgICAgICAgImtleXdvcmQuY29udHJvbCIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvKFtBLVphLXpdW0EtWmEtejAtOV0pKCAqLT4gKikoSUZ8aWYpKCAqKSg/OihbPD5dPT98PT0pKCAqKSgoPzotKT8pKFswLTldKyl8KFwqW1wqQS1aYS16MC05XSkpKCAqKShUSEVOfHRoZW4pKCAqKSglW0xSVURObHJ1ZG5dKSg/OiggKikoRUxTRXxlbHNlKSggKikoJVtMUlVETmxydWRuXSkpPy8sCiAgICAgICAgICAgIGNvbW1lbnQ6ICJFcXVhbGl0eSBGdW5jdGlvbiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleDogL1tBLVphLXpdW0EtWmEtejAtOV0vLAogICAgICAgICAgICBjb21tZW50OiAiRnVuY3Rpb24gY2VsbCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lLmRvdWJsZS1zbGFzaCIsCiAgICAgICAgICAgIHJlZ2V4OiAvICpcL1wvLiovLAogICAgICAgICAgICBjb21tZW50OiAiQ29tbWVudCIKICAgICAgICB9XQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpNYXplSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7CiAgICBmaWxlVHlwZXM6IFsibXoiXSwKICAgIG5hbWU6ICJNYXplIiwKICAgIHNjb3BlTmFtZTogInNvdXJjZS5tYXplIgp9OwoKCm9vcC5pbmhlcml0cyhNYXplSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLk1hemVIaWdobGlnaHRSdWxlcyA9IE1hemVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXplIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvbWF6ZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIE1hemVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbWF6ZV9oaWdobGlnaHRfcnVsZXMiKS5NYXplSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTWF6ZUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbWF6ZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL21hemUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-mel.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tZWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTUVMSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICB0b2tlbjogJ3N0b3JhZ2UudHlwZS5tZWwnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKG1hdHJpeHxzdHJpbmd8dmVjdG9yfGZsb2F0fGludHx2b2lkKVxcYicgfSwKICAgICAgICAgeyBjYXNlSW5zZW5zaXRpdmU6IHRydWUsCiAgICAgICAgICAgdG9rZW46ICdzdXBwb3J0LmZ1bmN0aW9uLm1lbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoKHMoaChvdyhNYW5pcEN0eHxTKGhhZGluZ0dyb3VwQXR0ckVkaXRvcnxlbGVjdGlvbkluVGl0bGUpfEgoaWRkZW58ZWxwKXxXaW5kb3cpfGVsKGYoQnV0dG9ufFRhYkxheW91dHxMYXlvdXQpfGxGaWVsZCl8YWRpbmcoR2VvbWV0cnlSZWxDdHh8Tm9kZXxDb25uZWN0aW9ufExpZ2h0UmVsQ3R4KSl8eShzKHRlbXxGaWxlKXxtYm9sKEJ1dHRvbnxDaGVja0JveCkpfG5hcChzaG90fE1vZGV8MnRvMiB8VG9nZXRoZXJDdHh8S2V5KXxjKHVscHR8ZW5lKFVJUmVwbGFjZW1lbnR8RWRpdG9yKXxhbGUoQnJ1c2hCcmlnaHRuZXNzIHxDb25zdHJhaW50fEtleShDdHgpPyk/fHIoaXB0KE5vZGV8Q3R4fFRhYmxlfGVkUGFuZWwoVHlwZSk/fEpvYnxFZGl0b3JJbmZvKXxvbGwoRmllbGR8TGF5b3V0KSl8bWgpfHQoaXRjaChTdXJmYWNlKFBvaW50cyk/fEFuZEV4cGxvZGVTaGVsbCApfGEoY2tUcmFjZXxydChzV2l0aCB8U3RyaW5nICkpfHIoY21wfGkobmcoVG9TdHJpbmdBcnJheSB8QXJyYXkoUmVtb3ZlKER1cGxpY2F0ZXMgfCApfEMob3VudCB8YXRlbmF0ZSApfFRvU3RyaW5nIHxJbnRlcnNlY3RvcikpfHAgKXxva2UpKXxpKG4oZ2xlUHJvZmlsZUJpcmFpbFN1cmZhY2UpP3x6ZXxnbnxtcGxpZnkpfG8odShuZChDb250cm9sKT98cmNlKXxmdChNb2QoQ3R4KT8pP3xydCl8dShwZXJDdHh8cmZhY2UoUyhoYWRlckxpc3R8YW1wbGVyKSk/fGIoc3QoaXR1dGUoR2VvbWV0cnl8QWxsU3RyaW5nICk/fHJpbmcpfGQoTShpcnJvcnxhKHRjaFRvcG9sb2d5fHAoU2V3TW92ZXxDdXQpKSl8aXYoQ3JlYXNlfERpc3BsYXlTbW9vdGhuZXNzKT98QyhvbGxhcHNlfGxlYW5Ub3BvbG9neSl8VChvKEJsaW5kfFBvbHkpfHJhbnNmZXJVVnNUb0NhY2hlKXxEdXBsaWNhdGVBbmRDb25uZWN0fEVkaXRVVnxMaXN0Q29tcG9uZW50Q29udmVyc2lvbnxBdXRvUHJvamVjdGlvbikpKXxwKGgoZXJlfHJhbmQpfG90TGlnaHQoUHJldmlld1BvcnQpP3xhY2VMb2NhdG9yfHIoaW5nfGVhZFNoZWV0RWRpdG9yKSl8ZSh0KHN8TWVudU1vZGV8U3RhKHRlIHxydHVwTWVzc2FnZXxtcERlbnNpdHkgKXxOb2RlVHlwZUZsYWd8Q29uc3RyYWludFJlc3RQb3NpdGlvbiB8VG9vbFRvfEluKHB1dERldmljZU1hcHBpbmd8ZmluaXR5KXxEKHluYW1pY3xlZmF1bHRTaGFkaW5nR3JvdXB8cml2ZW5LZXlmcmFtZSl8VUlUZW1wbGF0ZXxQKGFyKHRpY2xlQXR0cnxlbnQpfHJvamVjdCApfEUoc2NhcGVDdHh8ZGl0KG9yfEN0eCkpfEtleShDdHh8ZnJhbWV8UGF0aCl8RihvY3VzfGx1aWRBdHRyKXxBdHRyKE1hcHBpbmcpPyl8cGFyYXRvcnxlZHxsKGVjdChNb2RlfGlvbkNvbm5lY3Rpb258Q29udGV4dHxUeXBlfGVkTm9kZXN8UHIoaW9yaXR5fGVmKXxLZXkoQ3R4KT8pP3xMb2FkU2V0dGluZ3MpfGFyY2hQYXRoQXJyYXkgKXxraW4oQ2x1c3RlcnxQZXJjZW50KXxxKHVhcmVTdXJmYWNlfHJ0KXx3KGl0Y2hUYWJsZXxhdGNoRGlzcGxheVBvcnQpfGEodmUoTWVudXxTaGVsZnxUb29sU2V0dGluZ3N8SShuaXRpYWxTdGF0ZXxtYWdlKXxQcmVmKHN8T2JqZWN0cyl8Rmx1aWR8QSh0dHJQcmVzZXQgfGxsU2hlbHZlcykpfG1wbGVJbWFnZSl8cnRDb250ZXh0fG1vb3RoKHN0ZXB8Q3VydmV8VGFuZ2VudFN1cmZhY2UpKXxoKHN2X3RvX3JnYnx5cChvdHxlcihHcmFwaHxTaGFkZXxQYW5lbCkpfGkodFRlc3R8ZGV8bGl0ZSl8b3QoQm94fGtleShDaGVjayk/KXx1ZChCdXR0b258U2xpZGVyKEJ1dHRvbik/KXxlKGxwKExpbmUpP3xhZHNVcERpc3BsYXl8cm1pdGUpfHdSZShuZGVyKExvYWQpP3xmbGVjdGlvbk1hcCl8YXJkKGVuUG9pbnRDdXJ2ZXx3YXJlKFJlbmRlclBhbmVsKT8pKXxuKG8obkxpbmVhcnxpc2V8ZGUoVHlwZXxJY29uQnV0dG9ufE91dGxpbmVyfFByZXNldCl8cm1hbChpemUgfENvbnN0cmFpbnQpKXx1cmJzKEJvb2xlYW58UyhlbGVjdHxxdWFyZSl8QyhvcHlVVlNldHx1YmUpfFRvKFN1YmRpdnxQb2x5KGdvbnNQcmVmKT8pfFBsYW5lfFZpZXdEaXJlY3Rpb25WZWN0b3IgKXxldyh0b258UGFuZWxJdGVtcyl8YW1lKHNwYWNlKEluZm8pP3xDb21tYW5kfEZpZWxkKSl8YyhoKG9pY2V8ZGlyfGVjayhCb3goR3JwKT98RGVmYXVsdFJlbmRlckdsb2JhbHMpfGEobihuZWxCb3h8Z2VTdWJkaXYoUmVnaW9ufENvbXBvbmVudERpc3BsYXlMZXZlbCkpfHJhY3RlcihNYXB8T3V0bGluZUVkaXRvcik/KSl8eShjbGVDaGVja3xsaW5kZXIpfHR4KENvbXBsZXRpb258VHJhdmVyc2V8RWRpdE1vZGV8QWJvcnQpfGlyYyh1bGFyRmlsbGV0fGxlKXxvKHN8bihzdHIodWN0aW9uSGlzdG9yeXxhaW4oVmFsdWUpPyl8bmVjdChpb25JbmZvfENvbnRyb2x8RHluYW1pY3xKb2ludHxBdHRyKXx0KGV4dEluZm98cm9sKXxkaXRpb258ZXx2ZXJ0KFNvbGlkVHh8VGVzc2VsbGF0aW9ufFVuaXR8RnJvbU9sZExheWVycyB8TGlnaHRtYXApfGZpcm1EaWFsb2cpfHB5KFNraW5XZWlnaHRzfEtleXxGbGV4b3J8QXJyYXkgKXxsKG9yKFNsaWRlcihHcnB8QnV0dG9uR3JwKXxJbmRleChTbGlkZXJHcnApP3xFZGl0b3J8QXRQb2ludCk/fHVtbkxheW91dHxsaXNpb24pfGFyc2VuU3ViZGl2U2VsZWN0aW9uTGlzdHxtKHAob25lbnRFZGl0b3J8dXRlUG9seXNldFZvbHVtZSB8YWN0SGFpclN5c3RlbSApfG1hbmQoUG9ydHxFY2hvfExpbmUpKSl8dSh0S2V5fHIodmUoTW92ZUVQQ3R4fFNrZXRjaEN0eHxDVkN0eHxJbnRlcnNlY3R8T25TdXJmYWNlfEUoZGl0b3JDdHh8UEN0eCl8QWRkUHRDdHgpP3xyZW50KEN0eHxUaW1lKEN0eCk/fFVuaXQpKSl8cChHZXRTb2x2ZXJBdHRyfEJ1dHRvbnxTKG9sdmVyKFR5cGVzKT98ZSh0KFNvbHZlckF0dHJ8RWRpdCl8YW0pKXxDKG8obnN0cmFpbnR8bGxpc2lvbil8YWNoZSl8VG9vbHxQKGFuZWx8cm9wZXJ0eSkpfGVpbHxsKGlwKFNjaGVkdWxlKHJPdXRsaW5lcik/fFRyaW1CZWZvcmUgfEVkaXRvcihDdXJyZW50VGltZUN0eCk/KT98b3NlKFN1cmZhY2V8Q3VydmUpfHVzdGVyfGVhcihDYWNoZSk/fGFtcCl8YShuKENyZWF0ZU1hbmlwfHZhcyl8dGNoKFF1aWV0KT98cGl0YWxpemVTdHJpbmcgfG1lcmEoVmlldyk/KXxyKG9zcyhQcm9kdWN0ICk/fGVhdGUoUmVuZGVyTGF5ZXJ8TW90aW9uRmllbGQgfFN1YmRpdlJlZ2lvbnxOKG9kZXxld1NoZWxmICl8RChpc3BsYXlMYXllcnxyYXdDdHgpfEVkaXRvcikpfG1kKFNoZWxsfEZpbGVPdXRwdXQpKXxNKFIoZW5kZXIoU2hhZG93RGF0YXxDYWxsYmFja3xEYXRhfFV0aWx8Vmlld3xMaW5lKEFycmF5KT8pfGFtcEF0dHJpYnV0ZSl8Ryhlb21ldHJ5RGF0YXxsb2JhbCl8TShvZGVsTWVzc2FnZXxlc3NhZ2V8YShuaXBEYXRhfHQoZXJpYWx8cml4KSkpfEJvdW5kaW5nQm94fFMoeW50YXh8Y2VuZU1lc3NhZ2V8dChhdHVzfHJpbmcoQXJyYXkpPyl8aW1wbGV8cGFjZXxlbGVjdChpb24oTWFza3xMaXN0KXxJbmZvKXx3YXRjaFJlbmRlcihSZWdpc3RlcnxCYXNlKSl8SChhcmR3YXJlUmVuZGVyZXJ8V1NoYWRlclN3YXRjaEdlbmVyYXRvcil8Tm9kZU1lc3NhZ2V8QyhvKG5kaXRpb25NZXNzYWdlfGxvcihBcnJheSk/fG0ocHV0YXRpb258bWFuZChSZXN1bHR8TWVzc2FnZSkpKXx1cnNvcnxsb3RoKE1hdGVyaWFsfFMoeXN0ZW18b2x2ZXJSZWdpc3Rlcil8Q29uKHN0cmFpbnR8dHJvbCl8VHJpYW5nbGV8UGFydGljbGV8RWRnZXxGb3JjZSl8YWxsYmFja0lkQXJyYXkpfFQoeXBlSWR8aW1lKHIoTWVzc2FnZSk/fEFycmF5KT98b29sc0luZm98ZXNzZWxhdGlvblBhcmFtc3xyKGltQm91bmRhcnlBcnJheXxhbnNmb3JtYXRpb25NYXRyaXgpKXxJKG50QXJyYXl8dChHZW9tZXRyeXxNZXNoKFBvbHlnb258RWRnZXxWZXJ0ZXh8RmFjZVZlcnRleCl8Uyh1cmZhY2VDVnxlbGVjdGlvbkxpc3QpfEN1cnZlQ1Z8SW5zdGFuY2VyfGVyYXRvclR5cGV8RChlcGVuZGVuY3koR3JhcGh8Tm9kZXMpfGFnKXxLZXlmcmFtZSl8ayhTeXN0ZW18SGFuZGxlR3JvdXApfG1hZ2UpfDNkVmlld3xPYmplY3QoU2V0TWVzc2FnZXxIYW5kbGV8QXJyYXkpP3xEKEcoTShvZGlmaWVyfGVzc2FnZSl8Q29udGV4dCl8eW5Td2VwdChUcmlhbmdsZXxMaW5lKXxpc3RhbmNlfG91YmxlQXJyYXl8ZXZpY2UoU3RhdGV8Q2hhbm5lbCl8YSh0YShCbG9ja3xIYW5kbGUpfGcoTShvZGlmaWVyfGVzc2FnZSl8UGF0aChBcnJheSk/KSl8cmF3KFJlcXVlc3QoUXVldWUpP3xJbmZvfERhdGF8UHJvY2VkdXJlQmFzZSkpfFUoc2VyRXZlbnRNZXNzYWdlfGkobnQoQXJyYXl8NjRBcnJheSl8TWVzc2FnZSkpfFAobyhpbnQoQXJyYXkpP3xseU1lc3NhZ2UpfGx1ZyhBcnJheSk/fHJvZ3Jlc3NXaW5kb3d8eChHKGVvbWV0cnkoSXRlcmF0b3J8RGF0YSl8bEJ1ZmZlcil8TShpZGlJbnB1dERldmljZXxvZGVsRWRpdG9yQ29tbWFuZHxhbmlwQ29udGFpbmVyKXxTKHVyZmFjZVNoYXBlKFVJKT98cHJpbmdOb2RlfGVsZWN0aW9uQ29udGV4dCl8SHdTaGFkZXJOb2RlfE5vZGV8Q28obnRleHQoQ29tbWFuZCk/fG0ocG9uZW50U2hhcGV8bWFuZCkpfFQob29sQ29tbWFuZHxyYW5zZm9ybShhdGlvbk1hdHJpeCk/KXxJa1NvbHZlcihOb2RlKT98M2RNb2RlbFZpZXd8T2JqZWN0U2V0fEQoZWZvcm1lck5vZGV8YXRhfHJhZ0FuZERyb3BCZWhhdmlvcil8UG9seVQod2Vha1VWQ29tbWFuZHxyZyl8RW1pdHRlck5vZGV8RihpKGVsZE5vZGV8bGVUcmFuc2xhdG9yKXxsdWlkRW1pdHRlck5vZGUpfExvY2F0b3JOb2RlKSl8RSh1bGVyUm90YXRpb258dmVudChNZXNzYWdlKT8pfGF5YXRvbXJ8VmVjdG9yKEFycmF5KT98UXVhdGVybmlvbnxGKG4oUihvdGF0ZU1hbmlwfGVmbGVjdFNoYWRlcnxhZGlhbEZpZWxkKXxHKGUobmVyaWNBdHRyaWJ1dGV8b21ldHJ5KERhdGF8RmlsdGVyKSl8cmF2aXR5RmllbGQpfE0ob3Rpb25QYXRofGVzKHNhZ2VBdHRyaWJ1dGV8aChEYXRhKT8pfGEobmlwM0R8dHJpeChEYXRhfEF0dHJpYnV0ZSkpKXxCKGwoaW5uU2hhZGVyfGVuZFNoYXBlRGVmb3JtZXIpfGFzZSl8UyhjYWxlTWFuaXB8dChhdGVNYW5pcHxyaW5nKERhdGF8QXJyYXlEYXRhKSl8aW5nbGVJbmRleGVkQ29tcG9uZW50fHViZChOYW1lc3xEYXRhKT98cChoZXJlRGF0YXxvdExpZ2h0KXxldHxraW5DbHVzdGVyKXxIaWtFZmZlY3RvcnxOKG9uKEV4dGVuZGVkTGlnaHR8QW1iaWVudExpZ2h0KXx1KHJicyhTdXJmYWNlKERhdGEpP3xDdXJ2ZShEYXRhKT8pfG1lcmljKERhdGF8QXR0cmlidXRlKSl8ZXd0b25GaWVsZCl8QyhoYXJhY3RlcnxpcmNsZVN3ZWVwTWFuaXB8b21wbyhuZW50KExpc3REYXRhKT98dW5kQXR0cmlidXRlKXx1cnZlU2VnbWVudE1hbmlwfGxpcHxhbWVyYSl8VCh5cGVkQXR0cmlidXRlfG9nZ2xlTWFuaXB8dXJidWxlbmNlRmllbGR8cihpcGxlSW5kZXhlZENvbXBvbmVudHxhbnNmb3JtKSl8SShudEFycmF5RGF0YXxrKFNvbHZlcnxIYW5kbGV8Sm9pbnR8RWZmZWN0b3IpKXxEKHluU3dlcHRHZW9tZXRyeURhdGF8aShzKGNNYW5pcHx0YW5jZU1hbmlwKXxyZWN0aW9uKE1hbmlwfGFsTGlnaHQpKXxvdWJsZShJbmRleGVkQ29tcG9uZW50fEFycmF5RGF0YSl8ZXBlbmRlbmN5Tm9kZXxhKHRhfGdOb2RlKXxyYWdGaWVsZCl8VShuaSh0QXR0cmlidXRlfGZvcm1GaWVsZCl8SW50NjRBcnJheURhdGEpfFAoaG9uZyhTaGFkZXJ8RVNoYWRlcil8b2ludChPbihTdXJmYWNlTWFuaXB8Q3VydmVNYW5pcCl8TGlnaHR8QXJyYXlEYXRhKXxmeEdlb21ldHJ5fGx1Z2luKERhdGEpP3xhcnRpKGNsZVN5c3RlbXx0aW9uKSl8RShudW1BdHRyaWJ1dGV8eHByZXNzaW9uKXxWKG8obHVtZShMaWdodHxBeGlzRmllbGQpfHJ0ZXhGaWVsZCl8ZWN0b3JBcnJheURhdGEpfEtleWZyYW1lRGVsdGEoTW92ZXxCKGxvY2tBZGRSZW1vdmV8cmVha2Rvd24pfFNjYWxlfFRhbmdlbnR8SW5mVHlwZXxXZWlnaHRlZHxBZGRSZW1vdmUpP3xGKGllbGR8bHVpZHxyZWVQb2ludFRyaWFkTWFuaXApfFcoaXJlRGVmb3JtZXJ8ZWlnaHRHZW9tZXRyeUZpbHRlcil8TChpZ2h0KERhdGFBdHRyaWJ1dGUpP3xhKHllcmVkU2hhZGVyfHR0aWNlKEQoZWZvcm1lcnxhdGEpKT98bWJlcnRTaGFkZXIpKXxBKG5pKHNvdHJvcHlTaGFkZXJ8bUN1cnZlKXx0dHJpYnV0ZXxpckZpZWxkfHIoZWFMaWdodHxyYXlBdHRyc0RhdGEpfG1iaWVudExpZ2h0KSk/fGlsZShJT3xPYmplY3QpfGVlZGJhY2tMaW5lfGxvYXQoTWF0cml4fFBvaW50KEFycmF5KT98VmVjdG9yKEFycmF5KT98QXJyYXkpKXxMKGkoZ2h0TGlua3N8YnJhcnkpfG9ja01lc3NhZ2UpfEEobihpbShNZXNzYWdlfEMob250cm9sfHVydmVDKGhhbmdlfGxpcGJvYXJkKEl0ZW0oQXJyYXkpPyk/KSl8VXRpbCl8Z2xlKXx0dHJpYnV0ZShTcGVjKEFycmF5KT98SW5kZXgpfHIocmF5RGF0YShCdWlsZGVyfEhhbmRsZSl8ZyhEYXRhYmFzZXxQYXJzZXJ8TGlzdCkpKSl8dChocmVlUG9pbnRBcmNDdHh8aW1lKENvbnRyb2x8UG9ydHxyWCl8byhvbChCdXR0b258SGFzT3B0aW9uc3xDb2xsZWN0aW9ufERyb3BwZWR8UHJvcGVydHlXaW5kb3cpfE5hdGl2ZVBhdGggfHVwcGVyfGtlbml6ZShMaXN0ICk/fGwob3dlcnxlcmFuY2UpfHJ1c3xnZ2xlKFdpbmRvd1Zpc2liaWxpdHl8QXhpcyk/KXx1KHJidWxlbmNlfG1ibGUoQ3R4KT8pfGV4KFJvdGF0ZUNvbnRleHR8TShvdmVDb250ZXh0fGFuaXBDb250ZXh0KXx0KFNjcm9sbExpc3R8Q3VydmVzfHVyZShIYWlyQ29sb3IgfERpc3BsYWNlUGxhbmUgfFBsYWNlbWVudENvbnRleHR8V2luZG93KXxUb1NoZWxmIHxGaWVsZChHcnB8QnV0dG9uR3JwKT8pP3xTKGNhbGVDb250ZXh0fGVsZWN0Q29udGV4dHxtdWRnZVVWQ29udGV4dCl8V2luVG9vbEN0eCl8d29Qb2ludEFyY0N0eHxhKG4oZ2VudENvbnN0cmFpbnQpP3xiTGF5b3V0KXxyKGltfHVuYyhhdGUoSGFpckNhY2hlfEZsdWlkQ2FjaGUpKT98YShucyhmb3JtTGltaXRzfGxhdG9yKXxjKGV8ayhDdHgpPykpKSl8aShzKG9sYXRlU2VsZWN0fENvbm5lY3RlZHxUcnVlfERpcnR5fFBhcmVudE9mIHxWYWxpZChTdHJpbmcgfE9iamVjdE5hbWUgfFVpTmFtZSApfEFuaW1DdXJ2ZSApfG4ocyh0YW5jZShyKT98ZXJ0KEpvaW50KEN0eCk/fEsobm90KFN1cmZhY2V8Q3VydmUpfGV5Q3R4KSkpfGhlcml0VHJhbnNmb3JtfHQoUyhjcm9sbEJhcnxsaWRlcihHcnApPyl8ZXIoc2VjdHxuYWxWYXJ8VG9VSSApfEZpZWxkKEdycCk/KSl8Y29uVGV4dChSYWRpbyhCdXR0b258Q29sbGVjdGlvbil8QnV0dG9ufFN0YXRpY0xhYmVsfENoZWNrQm94KXx0ZW1GaWx0ZXIoUmVuZGVyfFR5cGV8QXR0cik/fHByRW5naW5lfGsoUyh5c3RlbShJbmZvKT98b2x2ZXJ8cGxpbmVIYW5kbGVDdHgpfEhhbmRsZShDdHh8RGlzcGxheVNjYWxlKT98ZmtEaXNwbGF5TWV0aG9kKXxtKHBvcnRDb21wb3NlckN1cnZlcyB8ZlBsdWdpbnN8YWdlKSl8byhjZWFuTnVyYnNQcmV2aWV3UGxhbmUgfHV0bGluZXIoUGFuZWx8RWRpdG9yKXxwKHRpb24oTWVudShHcnApP3xWYXIpfGVuKEdMRXh0ZW5zaW9ufE1heWFQcmVmKSl8dmVycmlkZU1vZGlmaWVyfGZmc2V0KFN1cmZhY2V8Q3VydmUoT25TdXJmYWNlKT8pfHIoaWVudENvbnN0cmFpbnR8Yml0KEN0eCk/KXxiKHNvbGV0ZVByb2MgfGooZWN0KENlbnRlcnxUeXBlKFVJKT98TGF5ZXIgKXxFeGlzdHMpKSl8ZCh5bihSZWxFZChpdG9yfFBhbmVsKXxHbG9iYWxzfEMob250cm9sfGFjaGUpfFAoYShpbnRFZGl0b3J8cnRpY2xlQ3R4KXxyZWYpfEV4cChvcnR8cmVzc2lvbil8YW1pY0xvYWQpfGkocyhjb25uZWN0KEpvaW50fEF0dHIpfHRhbmNlRGltKENvbnRleHR8ZW5zaW9uKXxwbGEoeShSR0JDb2xvcnxTKHRhdHN8dXJmYWNlfG1vb3RobmVzcyl8QyhvbG9yfHVsbCl8UHJlZnxMZXZlbE9mRGV0YWlsfEFmZmVjdGVkKXxjZW1lbnRUb1BvbHkpfGtDYWNoZXxhYmxlKXxyKG5hbWUgfGVjdChpb25hbExpZ2h0fEtleUN0eCl8bWFwKXxtV2hlbil8byhjU2VydmVyfEJsdXJ8dChQcm9kdWN0ICk/fHVibGVQcm9maWxlQmlyYWlsU3VyZmFjZXxwZVNoZWV0RWRpdG9yfGxseShDdHgpPyl8dXBsaWNhdGUoU3VyZmFjZXxDdXJ2ZSk/fGUodGFjaChTdXJmYWNlfEN1cnZlfERldmljZUF0dHIpfHZpY2UoUGFuZWx8RWRpdG9yKXxmKGluZShEYXRhU2VydmVyfFZpcnR1YWxEZXZpY2UpfG9ybWVyfGF1bHQoTmF2aWdhdGlvbnxMaWdodExpc3RDaGVja0JveCkpfGwoZXRlKFNoKGVsZlRhYiB8YWRpbmdHcm91cHNBbmRNYXRlcmlhbHMgKXxVKG51c2VkQnJ1c2hlcyB8SSl8QXR0cik/fHJhbmRzdHIpfGdfdG9fcmFkKXxhZ1Bvc2V8cihvcG9mZkxvY2F0b3J8YWcoZ2VyQ29udGV4dCk/KXxnKHRpbWVyfGRpcnR5fEluZm98ZXZhbCkpfENCRyB8dShzZXJDdHh8bih0KGFuZ2xlVVZ8cmltKXxpKHR8Zm9ybSl8ZG8oSW5mbyk/fGxvYWRQbHVnaW58YXNzaWduSW5wdXREZXZpY2V8Z3JvdXApfGlUZW1wbGF0ZXxwKGRhdGVBRSB8QXhpcyl8dihTbmFwc2hvdHxMaW5rKSl8am9pbnQoQyh0eHxsdXN0ZXIpfERpc3BsYXlTY2FsZXxMYXR0aWNlKT98cChzZChDaGFubmVsT3V0bGluZXJ8VGV4dHVyZUZpbGV8RShkaXRUZXh0dXJlRmlsZXx4cG9ydCkpfGNsb3NlfGkoYyh0dXJlfGtXYWxrKXx4ZWxNb3ZlKXxvKHNlfGludChNYXRyaXhNdWx0IHxDKG9uc3RyYWludHx1cnZlQ29uc3RyYWludCl8T24oU3VyZmFjZXxDdXJ2ZSl8UG9zaXRpb258TGlnaHQpfHAodXBNZW51fGVuKXx3fGwoeShSZWR1Y2V8R2VvU2FtcGxlcnxNKGlycm9yRmFjZXxvdmUoVVZ8RWRnZXxWZXJ0ZXh8RmFjZXQoVVYpPyl8ZXJnZShVVnxFZGdlKEN0eCk/fFZlcnRleHxGYWNldChDdHgpPyl8YXAoU2V3KE1vdmUpP3xDdXR8RGVsKSl8Qihvb2xPcHxldmVsfGwoaW5kRGF0YXxlbmRDb2xvcikpfFModHJhaWdodGVuVVZCb3JkZXJ8b2Z0RWRnZXx1KHBlckN0eHxiZGl2aWRlKEVkZ2V8RmFjZXQpKXxwKGhlcihpY2FsUHJvamVjdGlvbnxlKXxsaXQoUmluZ3xDdHh8RWRnZXxWZXJ0ZXgpPyl8ZSh0VG9GYWNlTm9ybWFsfHBhcmF0ZXx3RWRnZXxsZWN0KENvbnN0cmFpbnQoTW9uaXRvcik/fEVkaXRDdHgpKXxtb290aCl8Tm9ybWFsKGl6ZVVWfFBlclZlcnRleCk/fEMoaGlwT2ZmfHlsaW5kKGVyfHJpY2FsUHJvamVjdGlvbil8byhuZXxweVVWfGwob3IoQmxpbmREYXRhfFNldHxQZXJWZXJ0ZXgpfGxhcHNlKEVkZ2V8RmFjZXQpKSl8dSh0KEN0eCk/fGJlKXxsKGlwYm9hcmR8b3NlQm9yZGVyKXxhY2hlTW9uaXRvcnxyZWEoc2VFZGdlfHRlRmFjZXQoQ3R4KT8pKXxUKG8oU3ViZGl2fHJ1cyl8cihpYW5ndWxhdGV8YW5zZmVyKSl8SW4oc3RhbGxBY3Rpb258Zm8pfE9wdGlvbnN8RCh1cGxpY2F0ZShFZGdlfEFuZENvbm5lY3QpfGVsKEVkZ2V8VmVydGV4fEZhY2V0KSl8VShuaXRlfFZTZXQpfFAoeXJhbWlkfG9rZXxsYW4oZXxhclByb2plY3Rpb24pfHIoaXNtfG9qZWN0aW9uKSl8RShkaXRVVnx2YWx1YXRlfHh0cnVkZShFZGdlfEZhY2V0KSl8UXUoZXJ5QmxpbmREYXRhfGFkKXxGKG9yY2VVVnxsaXAoVVZ8RWRnZSkpfFdlZGdlRmFjZXxMKGlzdENvbXBvbmVudENvbnZlcnNpb258YXlvdXRVVil8QSh1dG9Qcm9qZWN0aW9ufHBwZW5kKFZlcnRleHxGYWNldEN0eCk/fHZlcmFnZShOb3JtYWx8VmVydGV4KSkpfGVWZWN0b3JDb25zdHJhaW50KSl8dXRlbnZ8ZXIoY2VudHxmb3JtYW5jZU9wdGlvbnMpfGZ4c3Ryb2tlc3x3ZHxsKHVnaW5JbmZvfGEoeShiKGxhc3R8YWNrT3B0aW9ucykpP3xuKGV8YXJTcmYpKSl8YShzdGVLZXl8bmUobChIaXN0b3J5fENvbmZpZ3VyYXRpb24pP3xMYXlvdXQpfHRoQW5pbWF0aW9ufGlyQmxlbmR8dXNlfGxldHRlUG9ydHxyKHRpKGNsZShSZW5kZXJJbmZvfEluc3RhbmNlcnxFeGlzdHMpP3x0aW9uKXxlbnQoQ29uc3RyYWludCk/fGFtKERpbShDb250ZXh0fGVuc2lvbil8TG9jYXRvcikpKXxyKGludHxvKGooZWN0KGlvbihNYW5pcHxDb250ZXh0KXxDdXJ2ZXxUYW5nZW50KXxGaWxlVmlld2VyKXxwTW8oZEN0eHx2ZSl8Z3Jlc3MoQmFyfFdpbmRvdyl8bXB0RGlhbG9nKXxlbG9hZFJlZkVkKSl8ZShuKGNvZGVTdHJpbmd8ZChzV2l0aCB8U3RyaW5nICl8dnxhYmxlRGV2aWNlKXxkaXQoUmVuZGVyTGF5ZXIoR2xvYmFsc3xNZW1iZXJzKXxvcihUZW1wbGF0ZSk/fERpc3BsYXlMYXllcihHbG9iYWxzfE1lbWJlcnMpfEF0dHJMaW1pdHMgKXx2KGVudHxhbChEZWZlcnJlZHxFY2hvKT8pfHF1aXZhbGVudChUb2wgfCApfGZmZWN0b3J8cihmfHJvcil8eChjbHVzaXZlTGlnaHRDaGVja0JveHx0KGVuZChTdXJmYWNlfEN1cnZlKXxydWRlKXxpc3RzfHAob3J0Q29tcG9zZXJDdXJ2ZXMgfHJlc3Npb24oRWRpdG9yTGlzdGVuKT8pP3xlYyh1dGVGb3JFYWNoT2JqZWN0ICk/fGFjdFdvcmxkQm91bmRpbmdCb3gpfG1pdCh0ZXIpPyl8dihpKHNvcnxldyhTZXR8SGVhZE9ufDJkVG9vbEN0eHxDKGxpcFBsYW5lfGFtZXJhKXxQbGFjZXxGaXR8TG9va0F0KSl8byhsdW1lQXhpc3xydGV4KXxlKGN0b3JpemV8cmlmeUNtZCApfGFsaWRhdGVTaGVsZk5hbWUgKXxrZXkoVGFuZ2VudHxmcmFtZShSZWdpb24oTW92ZUtleUN0eHxTKGNhbGVLZXlDdHh8ZSh0S2V5Q3R4fGxlY3RLZXlDdHgpKXxDdXJyZW50VGltZUN0eHxUcmFja0N0eHxJbnNlcnRLZXlDdHh8RChpcmVjdEtleUN0eHxvbGx5Q3R4KSl8U3RhdHN8T3V0bGluZXIpPyl8cXUoaXR8ZXJ5U3ViZGl2KXxmKGMoaGVja3xsb3NlKXxpKG5kKFJlbGF0ZWRTa2luQ2x1c3RlciB8TWVudUl0ZW0gfGVyfEtleWZyYW1lfEFsbEludGVyc2VjdGlvbnMgKXx0QnNwbGluZXxsKHRlcihTdHVkaW9JbXBvcnR8Q3VydmV8RXhwYW5kKT98ZShCcm93c2VyRGlhbG9nfHRlc3R8SW5mb3xEaWFsb2d8RXh0ZW5zaW9uICk/fGxldEN1cnZlKXxyc3RQYXJlbnRPZiApfG8obnREaWFsb2d8cGVufHJtTGF5b3V0KXxwcmludHxlb2Z8Zmx1c2h8d3JpdGV8bChvKG9yfHd8YXQoUyhjcm9sbEJhcnxsaWRlcihHcnB8QnV0dG9uR3JwfDIpPyl8RXEgfEZpZWxkKEdycCk/KSl8dShzaFVuZG98aWQoQ2FjaGVJbmZvfEVtaXR0ZXJ8Vm94ZWxJbmZvKSl8ZXhvcil8cihvbU5hdGl2ZVBhdGggfGUoZUZvcm1GaWxsZXR8d2luZHxhZCl8YW1lTGF5b3V0KXxnZXQod29yZHxsaW5lKXxtb2QpfHcoaGF0SXN8aShuZG93KFByZWYpP3xyZShDb250ZXh0KT8pfG9ya3NwYWNlfGViQnJvd3NlcihQcmVmcyk/fGEoaXRDdXJzb3J8cm5pbmcpfHJpKG5rbGUoQ29udGV4dCk/fHRlVGFrZSkpfGwocyhUKGhyb3VnaEZpbHRlcnx5cGUgKXxVSSk/fGkoc3QoUmVsYXRpdmVzfE1lbnVBbm5vdGF0aW9uIHxTZXRzfEhpc3Rvcnl8Tm9kZVR5cGVzfEMob25uZWN0aW9uc3xhbWVyYXMpfFRyYW5zZm9ybXMgfElucHV0RGV2aWNlKHN8QnV0dG9uc3xBeGVzKXxlckVkaXRvcnxEZXZpY2VBdHRhY2htZW50c3xVbnNlbGVjdGVkIHxBKG5pbWF0YWJsZXx0dHIpKXxuKHN0ZXB8ZUludGVyc2VjdGlvbiApfGdodChsaW5rfExpc3QoUGFuZWx8RWRpdG9yKT8pKXxvKGNrTm9kZXxva1RocnV8ZnR8YWQoTmV3U2hlbGYgfFAobHVnaW58cmVmT2JqZWN0cyl8Rmx1aWQpfGcpfGEoc3NvQ29udGV4dHx5KG91dHxlcihCdXR0b258ZWQoU2hhZGVyUG9ydHxUZXh0dXJlUG9ydCkpKXx0dGljZShEZWZvcm1LZXlDdHgpP3x1bmNoKEltYWdlRWRpdG9yKT8pKXxhKHNzaWduKENvbW1hbmR8SW5wdXREZXZpY2UpfG4obm90YXRlfGltKEMob25lfHVydmVFZGl0b3IpfERpc3BsYXl8Vmlldyl8Z2xlKEJldHdlZW4pPyl8dHQoYWNoKFN1cmZhY2V8Q3VydmV8RGV2aWNlQXR0cil8cihpYnV0ZShNZW51fEluZm98RXhpc3RzfFF1ZXJ5KXxOYXZpZ2F0aW9uQ29udHJvbEdycHxDbyhudHJvbEdycHxsb3JTbGlkZXJHcnB8bXBhdGliaWxpdHkpfFByZXNldEVkaXRXaW58RW51bU9wdGlvbk1lbnUoR3JwKT98RmllbGQoR3JwfFNsaWRlckdycCkpKXxpKHJ8bUNvbnN0cmFpbnQpfGQoZChOZXdTaGVsZlRhYnxEeW5hbWljfFBQfEF0dHIoaWJ1dGVFZGl0b3JOb2RlSGVscCk/KXx2YW5jZVRvTmV4dERyaXZlbktleSl8dXRvKFBsYWNlfEtleWZyYW1lKXxwcChlbmRTdHJpbmdBcnJheXxsKHkoVGFrZXxBdHRyUHJlc2V0KXxpY2F0aW9uTmFtZSkpfGZmZWN0KHN8ZWROZXQpfGwoaShhcyhBdHRyKT98Z24oU3VyZmFjZXxDKHR4fHVydmUpKT8pfGxWaWV3Rml0KXxyKGMobGVufExlbihEaW1Db250ZXh0fGd0aERpbWVuc2lvbikpfHQoQnVpbGRQYWludE1lbnV8U2UodFBhaW50Q3R4fGxlY3RDdHgpfDNkUGFpbnRDdHh8VXNlclBhaW50Q3R4fFB1dHR5Q3R4fEZsdWlkQXR0ckN0eHxBdHRyKFNraW5QYWludEN0eHxDdHh8UGFpbnRWZXJ0ZXhDdHgpKXxyYXlNYXBwZXIpfG1iaWVudExpZ2h0fGIoc3xvdXQpKXxyKGlnaWQoQm9keXxTb2x2ZXIpfG8odChhdChpb25JbnRlcnBvbGF0aW9ufGUpKT98b3RPZiB8dW5kQ29uc3RhbnRSYWRpdXN8dyhDb2x1bW5MYXlvdXR8TGF5b3V0KXxsbChDdHgpPyl8dW4odXB8VGltZUNvbW1hbmQpfGUocyhvbHV0aW9uTm9kZXxldChUb29sfEFFICl8YW1wbGVGbHVpZCl8aGFzaHxuKGRlcihHbG9iYWxzTm9kZXxNYW5pcHxUaHVtYm5haWxVcGRhdGV8SW5mb3xlcnxQYXJ0aXRpb258UXVhbGl0eU5vZGV8V2luZG93KFNlbGVjdENvbnRleHR8RWRpdG9yKXxMYXllckJ1dHRvbik/fGFtZShTZWxlY3Rpb25MaXN0IHxVSXxBdHRyKT8pfGNvcmQoRGV2aWNlfEF0dHIpfHRhcmdldHxvcmRlcihEZWZvcm1lcnMpP3xkb3x2KG9sdmV8ZXJzZShTdXJmYWNlfEN1cnZlKSl8cXVpcmVzfGYoaW5lU3ViZGl2U2VsZWN0aW9uTGlzdHxlcmVuY2UoRWRpdHxRdWVyeSk/fHJlc2goQUUgKT8pfGxvYWRJbWFnZXxhZFRha2V8cm9vdHxtb3ZlKE11bHRpSW5zdGFuY2V8Sm9pbnQpfGJ1aWxkKFN1cmZhY2V8Q3VydmUpKXxhKG4oZChzdGF0ZXxvbWl6ZUZvbGxpY2xlcyApP3xnZUNvbnRyb2wpfGQoaShvKE1lbnVJdGVtQ29sbGVjdGlvbnxCdXR0b24oR3JwKT98Q29sbGVjdGlvbil8YWwpfF90b19kZWcpfG1wQ29sb3JQb3J0KXxnYl90b19oc3YpfGcobyh0b0JpbmRQb3NlIHxhbCl8ZSh0KE0ob2RpZmllcnN8YXlhUGFuZWxUeXBlcyApfENsYXNzaWZpY2F0aW9ufElucHV0RGV2aWNlUmFuZ2V8cGlkfGVudnxEZWZhdWx0QnJ1c2h8UGEobmVsfHJ0aWNsZUF0dHIpfEYoaWxlTGlzdHxsdWlkQXR0cil8QSh0dHJ8cHBsaWNhdGlvblZlcnNpb25Bc0Zsb2F0ICkpfG9tZXRyeUNvbnN0cmFpbnQpfGwoUmVuZGVyKEVkaXRvcik/fG9iYWxTdGl0Y2gpfGEodXNzfG1tYSl8cihpZChMYXlvdXQpP3xvdXAoT2JqZWN0c0J5TmFtZSApP3xhKGRpZW50Q29udHJvbChOb0F0dHIpP3xwaChTZWxlY3RDb250ZXh0fFRyYWNrQ3R4fERvbGx5Q3R4KXx2aXR5fGJDb2xvcikpfG1hdGNoKXx4KHBtUGlja2VyfGZvcm18Ym1MYW5nUGF0aExpc3QgKXxtKGkobihpbWl6ZUFwcCk/fHJyb3JKb2ludCl8byhkZWwoQ3VycmVudFRpbWVDdHh8UGFuZWx8RWRpdG9yKXx1c2V8dihJbnxlKElLdG9GSyB8VmVydGV4QWxvbmdEaXJlY3Rpb258S2V5Q3R4KT98T3V0KSl8dSh0ZXxsdGlQcm9maWxlQmlyYWlsU3VyZmFjZSl8ZShzc2FnZUxpbmV8bnUoQmFyTGF5b3V0fEl0ZW0oVG9TaGVsZiApP3xFZGl0b3IpP3xtb3J5KXxhKG5pcChSb3RhdGUoQ29udGV4dHxMaW1pdHNDdHgpfE1vdmUoQ29udGV4dHxMaW1pdHNDdHgpfFNjYWxlKENvbnRleHR8TGltaXRzQ3R4KXxPcHRpb25zKXx0Y2h8a2UoUm9sbCB8U2luZ2xlU3VyZmFjZXxUdWJlT24gfElkZW50aXR5fFBhaW50YWJsZXxib3R8TGl2ZSl8cmtlcnxnfHgpKXxiKGluKE1lbWJlcnNoaXB8ZChTa2lufFBvc2UpKXxvKG5lTGF0dGljZXx1bmRhcnl8eChab29tQ3R4fERvbGx5Q3R4KSl8dSh0dG9uKE1hbmlwKT98aWxkKEJvb2ttYXJrTWVudXxLZXlmcmFtZU1lbnUpfGZmZXJDdXJ2ZSl8ZShzc2VsfHZlbChQbHVzKT8pfGwoaW5kRGF0YVR5cGV8ZW5kKFNoYXBlKFBhbmVsfEVkaXRvcik/fDJ8VHdvQXR0cikpfGEoc2VuYW1lKEV4IHwgKXx0Y2hSZW5kZXJ8a2UoUmVzdWx0c3xTaW11bGF0aW9ufENsaXB8UGFydGlhbEhpc3Rvcnl8Rmx1aWRTaGFkaW5nICkpKSkpXFxiJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICB0b2tlbjogJ3N1cHBvcnQuY29uc3RhbnQubWVsJywKICAgICAgICAgICByZWdleDogJ1xcYihzKGgoZWxsVGVzc2VsbGF0ZXxhKGQoaW5nKE1hcHxFbmdpbmUpfGVyR2xvdyl8cGUpKXxuKG93fGFwc2hvdChTaGFwZSk/KXxjKHVscHR8YWxlQ29uc3RyYWludHxyaXB0KXx0KHlsZUN1cnZlfGl0Y2goU3JmfEFzTnVyYnNTaGVsbCl8dShjY298ZGlvQ2xlYXJDb2F0KXxlbmNpbHxyb2tlKEdsb2JhbHMpPyl8aShuZ2xlU2hhZGluZ1N3aXRjaHxtcGxlVm9sdW1lU2hhZGVyKXxvKGZ0TW9kKE1hbmlwfEhhbmRsZSk/fGxpZEZyYWN0YWwpfHUocmZhY2UoU2hhKGRlcnxwZSl8SW5mb3xFZE1hbmlwfFZhckdyb3VwfEx1bWluYW5jZSl8YihTdXJmYWNlfGQoTShvZGlmaWVyKFVWfFdvcmxkKT98YXAoU2V3TW92ZXxDdXR8cGluZ01hbmlwKSl8QihsaW5kRGF0YXxhc2UpfGl2KFJldmVyc2VGYWNlc3xTdXJmYWNlVmFyR3JvdXB8Q28obGxhcHNlfG1wb25lbnRJZCl8VG8oTnVyYnN8UG9seSkpP3xIaWVyQmxpbmR8Q2xlYW5Ub3BvbG9neXxUd2VhayhVVik/fFAobGFuYXJQcm9qfHJvak1hbmlwKXxMYXlvdXRVVnxBKGRkVG9wb2xvZ3l8dXRvUHJvaikpfEN1cnZlKSl8cChCaXJhaWxTcmZ8b3RMaWdodHxyaW5nKXxlKHRSYW5nZXxsZWN0aW9uTGlzdE9wZXJhdG9yKXxrKGluQ2x1c3RlcnxldGNoUGxhbmUpfHF1YXJlU3JmfGFtcGxlcihJbmZvKT98bShvb3RoKEN1cnZlfFRhbmdlbnRTcmYpfGVhcikpfGgoc3ZUb1JnYnx5cGVyKEdyYXBoSW5mb3xWaWV3fExheW91dCl8aWsoU29sdmVyfEhhbmRsZXxFZmZlY3Rvcil8b2xkTWF0cml4fGVpZ2h0RmllbGR8dyhSZShuZGVyR2xvYmFsc3xmbGVjdGlvbk1hcCl8U2hhZGVyKXxhKGlyKFN5c3RlbXxDb25zdHJhaW50fFR1YmVTaGFkZXIpfHJkKGVuUG9pbnR8d2FyZVJlbmRlckdsb2JhbHMpKSl8bihvKG4oRXh0ZW5kZWRMaWdodFNoYXBlTm9kZXxMaW5lYXJ8QW1iaWVudExpZ2h0U2hhcGVOb2RlKXxpc2V8cm1hbENvbnN0cmFpbnQpfHVyYnMoU3VyZmFjZXxDdXJ2ZXxUKG9TdWJkaXYoUHJvYyk/fGVzc2VsbGF0ZSl8RGltU2hhcGUpfGUodHdvcmt8d3RvbkZpZWxkKSl8YyhoKG8oaWNlfG9zZXIpfGVja2VyfGFyYWN0ZXIoTWFwfE9mZnNldCk/KXxvKG4oc3RyYWludHx0cihvbFBvaW50fGFzdCl8ZGl0aW9uKXxweShDb2xvclNldHxVVlNldCkpfHVydmUoUmFuZ2V8U2hhcGV8Tm9ybWFsaXplcihMaW5lYXJ8QW5nbGUpP3xJbih0ZXJzZWN0fGZvKXxWYXJHcm91cHxGcm9tKE1lc2goQ29NfEVkZ2UpP3xTdShyZmFjZShCbmR8Q29TfElzbyk/fGJkaXYoRWRnZXxGYWNlKT8pKSl8bChpcChTY2hlZHVsZXJ8TGlicmFyeSl8byhzZShzdFBvaW50T25TdXJmYWNlfFN1cmZhY2V8Q3VydmUpfHRofHVkKXx1c3RlcihIYW5kbGUpP3xhbXApfGFtZXJhKFZpZXcpP3xyKGVhdGUoQlBNYW5pcHxDb2xvclNldHxVVlNldCl8YXRlcikpfHQoaW1lKFRvVW5pdENvbnZlcnNpb258RnVuY3Rpb24pP3xvbyhuTGluZUF0dHJpYnV0ZXN8bERyYXdNYW5pcCl8dXJidWxlbmNlRmllbGR8ZXgoQmFzZURlZm9ybU1hbmlwfHR1cmUoQmFrZVNldHwyZHxUb0dlb218M2R8RW52KXxTbXVkZ2VVVk1hbmlwfExhdHRpY2VEZWZvcm1NYW5pcCl8d2Vha3xhbmdlbnRDb25zdHJhaW50fHIoaShwbGVTaGFkaW5nU3dpdGNofG0oV2l0aEJvdW5kYXJpZXMpPyl8YW5zZm9ybShHZW9tZXRyeSk/KSl8aShuKHModGFuY2VyfGVydEtub3QoU3VyZmFjZXxDdXJ2ZSkpfHRlcnNlY3RTdXJmYWNlKXxrKFJQc29sdmVyfE1Dc29sdmVyfFMoeXN0ZW18b2x2ZXJ8Q3NvbHZlcnxwbGluZVNvbHZlcil8SGFuZGxlfFBBU29sdmVyfEVmZmVjdG9yKXxtKHBsaWNpdChCb3h8U3BoZXJlfENvbmUpfGFnZVBsYW5lKSl8byhjZWFuKFNoYWRlcik/fHB0aWNhbEZYfGZmc2V0KFN1cmZhY2V8Qyhvc3x1cnZlKSl8bGRCbGluZERhdGFCYXNlfHJpZW50KENvbnN0cmFpbnR8YXRpb25NYXJrZXIpfGJqZWN0KFJlbmRlckZpbHRlcnxNdWx0aUZpbHRlcnxCaW5GaWx0ZXJ8UyhjcmlwdEZpbHRlcnxldCl8TmFtZUZpbHRlcnxUeXBlRmlsdGVyfEZpbHRlcnxBdHRyRmlsdGVyKSl8ZCh5bihHbG9iYWxzfEJhc2UpfGkocyh0YW5jZShCZXR3ZWVufERpbVNoYXBlKXxwbGEoeUxheWVyKE1hbmFnZXIpP3xjZW1lbnRTaGFkZXIpfGtDYWNoZSl8cmVjdChpb25hbExpZ2h0fGVkRGlzYyl8bWVuc2lvblNoYXBlKXxvKHVibGVTaGFkaW5nU3dpdGNofGYpfHBCaXJhaWxTcmZ8ZSh0YWNoKFN1cmZhY2V8Q3VydmUpfHBlbmROb2RlfGYob3JtKEJlbmR8UyhpbmV8cXVhc2gpfFR3aXN0fGFibGVTaGFwZXxGKHVuY3xsYXJlKXxXYXZlKXxhdWx0KFJlbmRlclV0aWxpdHlMaXN0fFNoYWRlckxpc3R8VGV4dHVyZUxpc3R8TGlnaHRMaXN0KSl8bGV0ZShDbyhsb3JTZXR8bXBvbmVudCl8VVZTZXQpKXxhZyhOb2RlfFBvc2UpfHIob3BvZmZMb2NhdG9yfGFnRmllbGQpKXx1KHNlQmFja2dyb3VuZHxuKHRyaW18aSh0KENvbnZlcnNpb258VG9UaW1lQ29udmVyc2lvbil8Zm9ybUZpZWxkKXxrbm93bihUcmFuc2Zvcm18RGFnKT8pfHZDaG9vc2VyKXxqKGlnZ2xlfG9pbnQoQ2x1c3RlcnxGZmR8TGF0dGljZSk/KXxwKHNkRmlsZVRleHxob25nKEUpP3xvKHModFByb2Nlc3NMaXN0fGl0aW9uTWFya2VyKXxpbnQoTWF0cml4TXVsdHxDb25zdHJhaW50fE9uKFN1cmZhY2VJbmZvfEN1cnZlSW5mbyl8RW1pdHRlcnxMaWdodCl8bCh5KFJlZHVjZXxNKGlycm9yfG8oZGlmaWVyKFVWfFdvcmxkKT98dmUoVVZ8RWRnZXxWZXJ0ZXh8RmFjZSh0VVYpPykpfGVyZ2UoVVZ8RWRnZXxWZXJ0fEZhY2UpfGFwKFNldyhNb3ZlKT98Q3V0fERlbCkpfEIob29sT3B8ZXZlbHxsaW5kRGF0YXxhc2UpfFModHJhaWdodGVuVVZCb3JkZXJ8b2Z0RWRnZXx1YmQoRWRnZXxGYWNlKXxwKGgoZXJlfFByb2opfGxpdChSaW5nfEVkZ2V8VmVydCk/KXxlKHBhcmF0ZXx3RWRnZSl8bW9vdGgoUHJveHl8RmFjZSk/KXxOb3JtYWwoaXplVVZ8UGVyVmVydGV4KT98QyhoaXBPZmZ8eWwoaW5kZXJ8UHJvail8byhuZXxweVVWfGwob3JQZXJWZXJ0ZXh8bGFwc2UoRWRnZXxGKSkpfHUodChNYW5pcChDb250YWluZXIpPyk/fGJlKXxsb3NlQm9yZGVyfHJlYShzZUVkZ2V8dChvcnxlRmFjZSkpKXxUKG8oU3ViZGl2fHJ1cyl8d2VhayhVVik/fHIoaWFuZ3VsYXRlfGFuc2ZlcikpfE9wdFV2c3xEKHVwbGljYXRlRWRnZXxlbChFZGdlfFZlcnRleHxGYWNldCkpfFVuaXRlfFAoeXJhbWlkfG9rZShNYW5pcCk/fGxhbihlfGFyUHJvail8cihpKHNtfG1pdGl2ZSl8b2opKXxFeHRydWRlKEVkZ2V8VmVydGV4fEZhY2UpfFZlcnRleE5vcm1hbE1hbmlwfFF1YWR8RmxpcChVVnxFZGdlKXxXZWRnZUZhY2V8TGF5b3V0VVZ8QSh1dG9Qcm9qfHBwZW5kKFZlcnRleCk/fHZlcmFnZVZlcnRleCkpfGVWZWN0b3JDb25zdHJhaW50KSl8ZngoR2VvbWV0cnl8SGFpcnxUb29uKXxsKHVzTWludXNBdmVyYWdlfGEobihlfGFyVHJpbVN1cmZhY2UpfGNlKDJkVGV4dHVyZXwzZFRleHR1cmUpKSl8YShzc01hdHJpeHxpckJsZW5kfHIodGkoY2xlKFNhbXBsZXJJbmZvfEMob2xvck1hcHBlcnxsb3VkKXxUcmFuc3BNYXBwZXJ8SW5jYW5kTWFwcGVyfEFnZU1hcHBlcik/fHRpb24pfGVudChDb25zdHJhaW50fFRlc3NlbGxhdGUpfGFtRGltZW5zaW9uKSl8cihpbWl0aXZlfG8oamVjdChpb258Q3VydmV8VGFuZ2VudCl8eHlNYW5hZ2VyKSkpfGUobih0aXR5fHYoQmFsbHxpcm9ubWVudEZvZ3xTKHBoZXJlfGt5KXxDKGhyb21lfHViZSl8Rm9nKSl8eCh0KGVuZChTdXJmYWNlfEN1cnZlKXxydWRlKXxwKGxvZGVOdXJic1NoZWxsfHJlc3Npb24pKSl8dihpZXdNYW5pcHxvKGx1bWUoU2hhZGVyfE5vaXNlfEZvZ3xMaWdodHxBeGlzRmllbGQpfHJ0ZXhGaWVsZCl8ZShjdG9yKFJlbmRlckdsb2JhbHN8UHJvZHVjdCl8cnRleEJha2VTZXQpKXxxdWFkU2hhZGluZ1N3aXRjaHxmKGkodEJzcGxpbmV8ZWxkfGwodGVyKFJlc2FtcGxlfFNpbXBsaWZ5fENsb3Nlc3RTYW1wbGV8RXVsZXIpP3xlfGxldEN1cnZlKSl8byh1ckJ5Rm91ck1hdHJpeHxsbGljbGUpfHVyUG9pbnRPbihNZXNoSW5mb3xTdWJkKXxmKEJsZW5kU3JmKE9ic29sZXRlKT98ZHxGaWxsZXRTcmYpfGwob3d8dWlkKFMoaGFwZXxsaWNlTWFuaXApfFRleHR1cmUoMkR8M0QpfEVtaXR0ZXIpfGV4b3JTaGFwZSl8cmEoY3RhbHxtZUNhY2hlKSl8dyh0QWRkTWF0cml4fGlyZXxvb2R8ZWlnaHRHZW9tZXRyeUZpbHRlcnxhdGVyfHJhcCl8bChpZ2h0KEluZm98Rm9nfExpKHN0fG5rZXIpKT98byhjYXRvcnxva0F0fGQoR3JvdXB8VGhyZXNob2xkcyl8ZnQpfHVtaW5hbmNlfGVhKHN0U3F1YXJlc01vZGlmaWVyfHRoZXIpfGEoeWVyZWQoU2hhZGVyfFRleHR1cmUpfHR0aWNlfG1iZXJ0KSl8YShuKG5vdGF0aW9uU2hhcGV8aShzb3Ryb3BpY3xtKEJsZW5kKEluT3V0KT98Qyh1cnZlKFQoVHxVfEx8QSl8VShUfFV8THxBKSk/fGxpcCkpKXxnbGVCZXR3ZWVuKXx0dChhY2goU3VyZmFjZXxDdXJ2ZSl8ckhpZXJhcmNoeVRlc3QpfGkockZpZWxkfG1Db25zdHJhaW50KXxkZChNYXRyaXh8RG91YmxlTGluZWFyKXx1ZGlvfHZnKFN1cmZhY2VQb2ludHN8TnVyYnNTdXJmYWNlUG9pbnRzfEN1cnZlcyl8bGlnbihNYW5pcHxTdXJmYWNlfEN1cnZlKXxyKGNMZW5ndGhEaW1lbnNpb258dEF0dHJQYWludFRlc3R8ZWFMaWdodHxyYXlNYXBwZXIpfG1iaWVudExpZ2h0fGJzdHJhY3RCYXNlKE51cmJzQ29udmVyc2lvbnxDcmVhdGUpKXxyKGlnaWQoQm9keXxTb2x2ZXJ8Q29uc3RyYWludCl8byhja3x1bmRDb25zdGFudFJhZGl1cyl8ZShzKG9sdXRpb258dWx0Q3VydmUoVGltZVRvKFRpbWV8VW5pdGxlc3N8TGluZWFyfEFuZ3VsYXIpKT8pfG5kZXIoUmVjdHxHbG9iYWxzKExpc3QpP3xCb3h8U3BoZXJlfENvbmV8UXVhbGl0eXxMKGlnaHR8YXllcihNYW5hZ2VyKT8pKXxjb3JkfHYob2x2ZShkUHJpbWl0aXZlKT98ZXJzZShTdXJmYWNlfEN1cnZlKT8pfGYoZXJlbmNlfGxlY3QpfG1hcChIc3Z8Q29sb3J8VmFsdWUpfGJ1aWxkKFN1cmZhY2V8Q3VydmUpKXxhKGRpYWxGaWVsZHxtcChTaGFkZXIpPyl8Z2JUb0hzdnxiZlNyZil8Zyh1aWRlfGVvKENvbm5lY3Qob3J8YWJsZSl8bWV0cnkoU2hhcGV8Q29uc3RyYWludHxWYXJHcm91cHxGaWx0ZXIpKXxsb2JhbChTdGl0Y2h8Q2FjaGVDb250cm9sKXxhbW1hQ29ycmVjdHxyKGlkfG91cChJZHxQYXJ0cyl8YShuaXRlfHZpdHlGaWVsZCkpKXxGdXIoR2xvYmFsc3xEZXNjcmlwdGlvbnxGZWVkYmFja3xBdHRyYWN0b3JzKXx4Zm9ybU1hbmlwfG0obyh0aW9uUGF0aHx1bnRhaW58dmllKXx1KHRlfGx0KE1hdHJpeHxpKHBseURpdmlkZXxsaXN0ZXJMaWdodCl8RG91YmxlTGluZWFyKSl8cEJpcmFpbFNyZnxlKHNoKFZhckdyb3VwKT98bnRhbHJheShUZXh0dXJlfElibFNoYXBlKSl8YSh0ZXJpYWxJbmZvfGtlKEdyb3VwfE51cmIoc1NxdWFyZXxTcGhlcmV8Qyh5bGluZGVyfGlyY2xlfG9uZXx1YmUpfFRvcnVzfFBsYW5lKXxDaXJjdWxhckFyY3xUKGhyZWVQb2ludENpcmN1bGFyQXJjfGV4dEN1cnZlc3x3b1BvaW50Q2lyY3VsYXJBcmMpKXxyYmxlKSl8YihpcmFpbFNyZnxvKG5lTGF0dGljZXxvbGVhbnx1bmRhcnkoQmFzZSk/KXx1KGxnZXxtcCgyZHwzZCkpfGV2ZWwoUGx1cyk/fGwoaW4obnxkRGF0YVRlbXBsYXRlKXxlbmQoU2hhcGV8Q29sb3Ioc3xTZXRzKXxUd29BdHRyfERldmljZXxXZWlnaHRlZCk/KXxhKHNlKEdlb21ldHJ5VmFyR3JvdXB8U2hhZGluZ1N3aXRjaHxMYXR0aWNlKXxrZVNldCl8cihvd25pYW58dXNoKSkpXFxiJyB9LAogICAgICAgICB7IGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5tZWwnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKGlmfGlufGVsc2V8Zm9yfHdoaWxlfGJyZWFrfGNvbnRpbnVlfGNhc2V8ZGVmYXVsdHxkb3xzd2l0Y2h8cmV0dXJufHN3aXRjaHxjYXNlfHNvdXJjZXxjYXRjaHxhbGlhcylcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm90aGVyLm1lbCcsIHJlZ2V4OiAnXFxiKGdsb2JhbClcXGInIH0sCiAgICAgICAgIHsgY2FzZUluc2Vuc2l0aXZlOiB0cnVlLAogICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UubWVsJywKICAgICAgICAgICByZWdleDogJ1xcYihudWxsfHVuZGVmaW5lZClcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLm1lbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoKDAoeHxYKVswLTlhLWZBLUZdKil8KChbMC05XStcXC4/WzAtOV0qKXwoXFwuWzAtOV0rKSkoKGV8RSkoXFwrfC0pP1swLTldKyk/KShMfGx8VUx8dWx8dXxVfEZ8Zik/XFxiJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4ubWVsJywKICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLm1lbCcsIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5tZWwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5tZWwnIH0gXSB9LAogICAgICAgICAKICAgICAgICAgeyB0b2tlbjogWyAndmFyaWFibGUub3RoZXIubWVsJywgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udmFyaWFibGUubWVsJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcJCkoW2EtekEtWl9cXHg3Zi1cXHhmZl1bYS16QS1aMC05X1xceDdmLVxceGZmXSo/XFxiKScgfSwKICAgICAgICAgICAKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLm1lbCcsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUubWVsJywgcmVnZXg6ICdcXFxcLicgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLm1lbCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1wnJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLnNpbmdsZS5tZWwnIH0gXSB9LAogICAgICAgICAKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLm1lbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoZmFsc2V8dHJ1ZXx5ZXN8bm98b258b2ZmKVxcYicgfSwKICAgICAgICAgICAKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5tZWwnLAogICAgICAgICAgIHJlZ2V4OiAnL1xcKicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5tZWwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCovJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmJsb2NrLm1lbCcgfSBdIH0sCiAgICAgICAgIAogICAgICAgICB7IHRva2VuOiBbICdjb21tZW50LmxpbmUuZG91YmxlLXNsYXNoLm1lbCcsICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubWVsJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKC8vKSguKiRcXG4/KScgfSwKICAgICAgICAgICAKICAgICAgICAgeyBjYXNlSW5zZW5zaXRpdmU6IHRydWUsCiAgICAgICAgICAgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLm1lbCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoaW5zdGFuY2VvZilcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnN5bWJvbGljLm1lbCcsCiAgICAgICAgICAgcmVnZXg6ICdbLVxcIVxcJVxcJlxcKlxcK1xcPVxcL1xcP1xcOl0nIH0sCiAgICAgICAgIAogICAgICAgICB7IHRva2VuOiBbICdtZXRhLnByZXByb2Nlc3Nvci5tZWwnLCAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wcmVwcm9jZXNzb3IubWVsJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKF5bIFxcdF0qKSgoPzojKVthLXpBLVpdKyknIH0sCiAgICAgICAgIAogICAgICAgICB7IHRva2VuOiBbICdtZXRhLmZ1bmN0aW9uLm1lbCcsICdrZXl3b3JkLm90aGVyLm1lbCcsICdzdG9yYWdlLnR5cGUubWVsJywgJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLm1lbCcsICdwdW5jdHVhdGlvbi5zZWN0aW9uLmZ1bmN0aW9uLm1lbCcgXSwKICAgICAgICAgICByZWdleDogJyhnbG9iYWxcXHMqKT8ocHJvY1xccyopKFxcdytcXHMqXFxbP1xcXT9cXHMrfFxccyspKFtBLVphLXpfXVtBLVphLXowLTlfXFwuXSopKFxccypcXCgpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IGluY2x1ZGU6ICckc2VsZicgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VjdGlvbi5mdW5jdGlvbi5tZWwnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZnVuY3Rpb24ubWVsJyB9IF0gfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIF0gfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKE1FTEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5NRUxIaWdobGlnaHRSdWxlcyA9IE1FTEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21lbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL21lbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBNRUxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbWVsX2hpZ2hsaWdodF9ydWxlcyIpLk1FTEhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IE1FTEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9tZWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvbWVsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-mixal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9taXhhbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBNaXhhbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgaXNWYWxpZFN5bWJvbCA9IGZ1bmN0aW9uKHN0cmluZykgewogICAgICAgIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnNlYXJjaCgvXltBLVpcdTAzOTRcdTAzYTBcdTAzYTMwLTldezEsMTB9JC8pID4gLTEgJiYgc3RyaW5nLnNlYXJjaCgvW0EtWlx1MDM5NFx1MDNhMFx1MDNhM10vKSA+IC0xOwogICAgfTsKCiAgICB2YXIgaXNWYWxpZE9wID0gZnVuY3Rpb24ob3ApIHsKICAgICAgICByZXR1cm4gb3AgJiYgWwogICAgICAgICAgICAnTk9QJywgJ0FERCcsICdGQUREJywgJ1NVQicsICdGU1VCJywgJ01VTCcsICdGTVVMJywgJ0RJVicsICdGRElWJywgJ05VTScsICdDSEFSJywgJ0hMVCcsCiAgICAgICAgICAgICdTTEEnLCAnU1JBJywgJ1NMQVgnLCAnU1JBWCcsICdTTEMnLCAnU1JDJywgJ01PVkUnLCAnTERBJywgJ0xEMScsICdMRDInLCAnTEQzJywgJ0xENCcsCiAgICAgICAgICAgICdMRDUnLCAnTEQ2JywgJ0xEWCcsICdMREFOJywgJ0xEMU4nLCAnTEQyTicsICdMRDNOJywgJ0xENE4nLCAnTEQ1TicsICdMRDZOJywgJ0xEWE4nLAogICAgICAgICAgICAnU1RBJywgJ1NUMScsICdTVDInLCAnU1QzJywgJ1NUNCcsICdTVDUnLCAnU1Q2JywgJ1NUWCcsICdTVEonLCAnU1RaJywgJ0pCVVMnLCAnSU9DJywKICAgICAgICAgICAgJ0lOJywgJ09VVCcsICdKUkVEJywgJ0pNUCcsICdKU0onLCAnSk9WJywgJ0pOT1YnLCAnSkwnLCAnSkUnLCAnSkcnLCAnSkdFJywgJ0pORScsICdKTEUnLAogICAgICAgICAgICAnSkFOJywgJ0pBWicsICdKQVAnLCAnSkFOTicsICdKQU5aJywgJ0pBTlAnLCAnSjFOJywgJ0oxWicsICdKMVAnLCAnSjFOTicsICdKMU5aJywKICAgICAgICAgICAgJ0oxTlAnLCAnSjJOJywgJ0oyWicsICdKMlAnLCAnSjJOTicsICdKMk5aJywgJ0oyTlAnLCdKM04nLCAnSjNaJywgJ0ozUCcsICdKM05OJywgJ0ozTlonLAogICAgICAgICAgICAnSjNOUCcsICdKNE4nLCAnSjRaJywgJ0o0UCcsICdKNE5OJywgJ0o0TlonLCAnSjROUCcsICdKNU4nLCAnSjVaJywgJ0o1UCcsICdKNU5OJywKICAgICAgICAgICAgJ0o1TlonLCAnSjVOUCcsJ0o2TicsICdKNlonLCAnSjZQJywgJ0o2Tk4nLCAnSjZOWicsICdKNk5QJywgJ0pYQU4nLCAnSlhaJywgJ0pYUCcsCiAgICAgICAgICAgICdKWE5OJywgJ0pYTlonLCAnSlhOUCcsICdJTkNBJywgJ0RFQ0EnLCAnRU5UQScsICdFTk5BJywgJ0lOQzEnLCAnREVDMScsICdFTlQxJywgJ0VOTjEnLAogICAgICAgICAgICAnSU5DMicsICdERUMyJywgJ0VOVDInLCAnRU5OMicsICdJTkMzJywgJ0RFQzMnLCAnRU5UMycsICdFTk4zJywgJ0lOQzQnLCAnREVDNCcsICdFTlQ0JywKICAgICAgICAgICAgJ0VOTjQnLCAnSU5DNScsICdERUM1JywgJ0VOVDUnLCAnRU5ONScsICdJTkM2JywgJ0RFQzYnLCAnRU5UNicsICdFTk42JywgJ0lOQ1gnLCAnREVDWCcsCiAgICAgICAgICAgICdFTlRYJywgJ0VOTlgnLCAnQ01QQScsICdGQ01QJywgJ0NNUDEnLCAnQ01QMicsICdDTVAzJywgJ0NNUDQnLCAnQ01QNScsICdDTVA2JywgJ0NNUFgnLAogICAgICAgICAgICAnRVFVJywgJ09SSUcnLCAnQ09OJywgJ0FMRicsICdFTkQnCiAgICAgICAgXS5pbmRleE9mKG9wKSA+IC0xOwogICAgfTsKCiAgICB2YXIgY29udGFpbnNPbmx5U3VwcG9ydGVkQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHN0cmluZykgewogICAgICAgIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnNlYXJjaCgvW14gQS1aXHUwMzk0XHUwM2EwXHUwM2EzMC05LiwoKSsqLz0kPD5AOzonLV0vKSA9PSAtMTsKICAgIH07CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lLmNoYXJhY3RlciIsCiAgICAgICAgICAgIHJlZ2V4OiAvXiAqXCouKiQvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogZnVuY3Rpb24obGFiZWwsIHNwYWNlMCwga2V5d29yZCwgc3BhY2UxLCBsaXRlcmFsLCBjb21tZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIGlzVmFsaWRTeW1ib2wobGFiZWwpID8gInZhcmlhYmxlLm90aGVyIiA6ICJpbnZhbGlkLmlsbGVnYWwiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5jb250cm9sIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgY29udGFpbnNPbmx5U3VwcG9ydGVkQ2hhcmFjdGVycyhsaXRlcmFsKSA/ICJ0ZXh0IiA6ICJpbnZhbGlkLmlsbGVnYWwiLAogICAgICAgICAgICAgICAgICAgICJjb21tZW50LmxpbmUuY2hhcmFjdGVyIgogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXg6IC9eKFxTKyk/KCArKShBTEYpKCAgKSguezV9KShccysuKik/JC8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBmdW5jdGlvbihsYWJlbCwgc3BhY2UwLCBrZXl3b3JkLCBzcGFjZTEsIGxpdGVyYWwsIGNvbW1lbnQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZFN5bWJvbChsYWJlbCkgPyAidmFyaWFibGUub3RoZXIiIDogImludmFsaWQuaWxsZWdhbCIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLmNvbnRyb2wiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICBjb250YWluc09ubHlTdXBwb3J0ZWRDaGFyYWN0ZXJzKGxpdGVyYWwpID8gInRleHQiIDogImludmFsaWQuaWxsZWdhbCIsCiAgICAgICAgICAgICAgICAgICAgImNvbW1lbnQubGluZS5jaGFyYWN0ZXIiCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleDogL14oXFMrKT8oICspKEFMRikoICkoXFMuezR9KShccysuKik/JC8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBmdW5jdGlvbihsYWJlbCwgc3BhY2UwLCBvcCwgY29tbWVudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkU3ltYm9sKGxhYmVsKSA/ICJ2YXJpYWJsZS5vdGhlciIgOiAiaW52YWxpZC5pbGxlZ2FsIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZE9wKG9wKSA/ICJrZXl3b3JkLmNvbnRyb2wiIDogImludmFsaWQuaWxsZWdhbCIsCiAgICAgICAgICAgICAgICAgICAgImNvbW1lbnQubGluZS5jaGFyYWN0ZXIiCiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleDogL14oXFMrKT8oICspKFxTKykoPzpccyopJC8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBmdW5jdGlvbihsYWJlbCwgc3BhY2UwLCBvcCwgc3BhY2UxLCBhZGRyZXNzLCBjb21tZW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIGlzVmFsaWRTeW1ib2wobGFiZWwpID8gInZhcmlhYmxlLm90aGVyIiA6ICJpbnZhbGlkLmlsbGVnYWwiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkT3Aob3ApID8gImtleXdvcmQuY29udHJvbCIgOiAiaW52YWxpZC5pbGxlZ2FsIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgY29udGFpbnNPbmx5U3VwcG9ydGVkQ2hhcmFjdGVycyhhZGRyZXNzKSA/ICJ0ZXh0IiA6ICJpbnZhbGlkLmlsbGVnYWwiLAogICAgICAgICAgICAgICAgICAgICJjb21tZW50LmxpbmUuY2hhcmFjdGVyIgogICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXg6IC9eKFxTKyk/KCArKShcUyspKCArKShcUyspKFxzKy4qKT8kLwogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAidGV4dCIKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhNaXhhbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5NaXhhbEhpZ2hsaWdodFJ1bGVzID0gTWl4YWxIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9taXhhbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL21peGFsX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIE1peGFsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL21peGFsX2hpZ2hsaWdodF9ydWxlcyIpLk1peGFsSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IE1peGFsSGlnaGxpZ2h0UnVsZXM7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9taXhhbCI7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiKiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL21peGFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-mushcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tdXNoY29kZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBNdXNoQ29kZVJ1bGVzID0gZnVuY3Rpb24oKSB7CgoKICAgIHZhciBrZXl3b3JkcyA9ICgKICJAaWZ8IisKICJAaWZlbHNlfCIrCiAiQHN3aXRjaHwiKwogIkBoYWx0fCIrCiAiQGRvbGlzdHwiKwogIkBjcmVhdGV8IisKICJAc2NlbnR8IisKICJAc291bmR8IisKICJAdG91Y2h8IisKICJAYXRhc3RlfCIrCiAiQG9zb3VuZHwiKwogIkBhaGVhcnwiKwogIkBhYWhlYXJ8IisKICJAYW1oZWFyfCIrCiAiQG90b3VjaHwiKwogIkBvdGFzdGV8IisKICJAZHJvcHwiKwogIkBvZHJvcHwiKwogIkBhZHJvcHwiKwogIkBkcm9wZmFpbHwiKwogIkBvZHJvcGZhaWx8IisKICJAc21lbGx8IisKICJAb2VtaXR8IisKICJAZW1pdHwiKwogIkBwZW1pdHwiKwogIkBwYXJlbnR8IisKICJAY2xvbmV8IisKICJAdGFzdGV8IisKICJ3aGlzcGVyfCIrCiAicGFnZXwiKwogInNheXwiKwogInBvc2V8IisKICJzZW1pcG9zZXwiKwogInRlYWNofCIrCiAidG91Y2h8IisKICJ0YXN0ZXwiKwogInNtZWxsfCIrCiAibGlzdGVufCIrCiAibG9va3wiKwogIm1vdmV8IisKICJnb3wiKwogImhvbWV8IisKICJmb2xsb3d8IisKICJ1bmZvbGxvd3wiKwogImRlc2VydHwiKwogImRpc21pc3N8IisKICJAdGVsIgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9ICgKICAgICAgICAiPSMwIgogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICJkZWZhdWx0fCIrCiAiZWRlZmF1bHR8IisKICJldmFsfCIrCiAiZ2V0X2V2YWx8IisKICJnZXR8IisKICJncmVwfCIrCiAiZ3JlcGl8IisKICJoYXNhdHRyfCIrCiAiaGFzYXR0cnB8IisKICJoYXNhdHRydmFsfCIrCiAiaGFzYXR0cnB2YWx8IisKICJsYXR0cnwiKwogIm5hdHRyfCIrCiAicG9zc3wiKwogInVkZWZhdWx0fCIrCiAidWZ1bnwiKwogInV8IisKICJ2fCIrCiAidWxkZWZhdWx0fCIrCiAieGdldHwiKwogInpmdW58IisKICJiYW5kfCIrCiAiYm5hbmR8IisKICJibm90fCIrCiAiYm9yfCIrCiAiYnhvcnwiKwogInNobHwiKwogInNocnwiKwogImFuZHwiKwogImNhbmR8IisKICJjb3J8IisKICJlcXwiKwogImd0fCIrCiAiZ3RlfCIrCiAibHR8IisKICJsdGV8IisKICJuYW5kfCIrCiAibmVxfCIrCiAibm9yfCIrCiAibm90fCIrCiAib3J8IisKICJ0fCIrCiAieG9yfCIrCiAiY29ufCIrCiAiZW50cmFuY2VzfCIrCiAiZXhpdHwiKwogImZvbGxvd2Vyc3wiKwogImhvbWV8IisKICJsY29ufCIrCiAibGV4aXRzfCIrCiAibG9jfCIrCiAibG9jYXRlfCIrCiAibHBhcmVudHwiKwogImxzZWFyY2h8IisKICJuZXh0fCIrCiAibnVtfCIrCiAib3duZXJ8IisKICJwYXJlbnR8IisKICJwbWF0Y2h8IisKICJybG9jfCIrCiAicm51bXwiKwogInJvb218IisKICJ3aGVyZXwiKwogInpvbmV8IisKICJ3b3JufCIrCiAiaGVsZHwiKwogImNhcnJpZWR8IisKICJhY29zfCIrCiAiYXNpbnwiKwogImF0YW58IisKICJjZWlsfCIrCiAiY29zfCIrCiAiZXwiKwogImV4cHwiKwogImZkaXZ8IisKICJmbW9kfCIrCiAiZmxvb3J8IisKICJsb2d8IisKICJsbnwiKwogInBpfCIrCiAicG93ZXJ8IisKICJyb3VuZHwiKwogInNpbnwiKwogInNxcnR8IisKICJ0YW58IisKICJhcG9zc3wiKwogImFuZGZsYWdzfCIrCiAiY29ubnwiKwogImNvbW1hbmRzc2VudHwiKwogImNvbnRyb2xzfCIrCiAiZG9pbmd8IisKICJlbG9ja3wiKwogImZpbmRhYmxlfCIrCiAiZmxhZ3N8IisKICJmdWxsbmFtZXwiKwogImhhc2ZsYWd8IisKICJoYXNwb3dlcnwiKwogImhhc3R5cGV8IisKICJoaWRkZW58IisKICJpZGxlfCIrCiAiaXNiYWtlcnwiKwogImxvY2t8IisKICJsc3RhdHN8IisKICJtb25leXwiKwogIndob3wiKwogIm5hbWV8IisKICJuZWFyYnl8IisKICJvYmp8IisKICJvYmpmbGFnc3wiKwogInBob3RvfCIrCiAicG9sbHwiKwogInBvd2Vyc3wiKwogInBlbmRpbmd0ZXh0fCIrCiAicmVjZWl2ZWR0ZXh0fCIrCiAicmVzdGFydHN8IisKICJyZXN0YXJ0dGltZXwiKwogInN1Ymp8IisKICJzaG9ydGVzdHBhdGh8IisKICJ0bW9uZXl8IisKICJ0eXBlfCIrCiAidmlzaWJsZXwiKwogImNhdHwiKwogImVsZW1lbnR8IisKICJlbGVtZW50c3wiKwogImV4dHJhY3R8IisKICJmaWx0ZXJ8IisKICJmaWx0ZXJib29sfCIrCiAiZmlyc3R8IisKICJmb3JlYWNofCIrCiAiZm9sZHwiKwogImdyYWJ8IisKICJncmFiYWxsfCIrCiAiaW5kZXh8IisKICJpbnNlcnR8IisKICJpdGVtaXplfCIrCiAiaXRlbXN8IisKICJpdGVyfCIrCiAibGFzdHwiKwogImxkZWxldGV8IisKICJtYXB8IisKICJtYXRjaHwiKwogIm1hdGNoYWxsfCIrCiAibWVtYmVyfCIrCiAibWl4fCIrCiAibXVuZ2V8IisKICJwaWNrfCIrCiAicmVtb3ZlfCIrCiAicmVwbGFjZXwiKwogInJlc3R8IisKICJyZXZ3b3Jkc3wiKwogInNldGRpZmZ8IisKICJzZXRpbnRlcnwiKwogInNldHVuaW9ufCIrCiAic2h1ZmZsZXwiKwogInNvcnR8IisKICJzb3J0Ynl8IisKICJzcGxpY2V8IisKICJzdGVwfCIrCiAid29yZHBvc3wiKwogIndvcmRzfCIrCiAiYWRkfCIrCiAibG1hdGh8IisKICJtYXh8IisKICJtZWFufCIrCiAibWVkaWFufCIrCiAibWlufCIrCiAibXVsfCIrCiAicGVyY2VudHwiKwogInNpZ258IisKICJzdGRkZXZ8IisKICJzdWJ8IisKICJ2YWx8IisKICJib3VuZHwiKwogImFic3wiKwogImluY3wiKwogImRlY3wiKwogImRpc3QyZHwiKwogImRpc3QzZHwiKwogImRpdnwiKwogImZsb29yZGl2fCIrCiAibW9kfCIrCiAibW9kdWxvfCIrCiAicmVtYWluZGVyfCIrCiAidmFkZHwiKwogInZkaW18IisKICJ2ZG90fCIrCiAidm1hZ3wiKwogInZtYXh8IisKICJ2bWlufCIrCiAidm11bHwiKwogInZzdWJ8IisKICJ2dW5pdHwiKwogInJlZ2VkaXR8IisKICJyZWdlZGl0YWxsfCIrCiAicmVnZWRpdGFsbGl8IisKICJyZWdlZGl0aXwiKwogInJlZ21hdGNofCIrCiAicmVnbWF0Y2hpfCIrCiAicmVncmFifCIrCiAicmVncmFiYWxsfCIrCiAicmVncmFiYWxsaXwiKwogInJlZ3JhYml8IisKICJyZWdyZXB8IisKICJyZWdyZXBpfCIrCiAiYWZ0ZXJ8IisKICJhbHBoYW1pbnwiKwogImFscGhhbWF4fCIrCiAiYXJ0fCIrCiAiYmVmb3JlfCIrCiAiYnJhY2tldHN8IisKICJjYXBzdHJ8IisKICJjYXNlfCIrCiAiY2FzZWFsbHwiKwogImNlbnRlcnwiKwogImNvbnRhaW5zZmFuc2l8IisKICJjb21wfCIrCiAiZGVjb21wb3NlfCIrCiAiZGVjcnlwdHwiKwogImRlbGV0ZXwiKwogImVkaXR8IisKICJlbmNyeXB0fCIrCiAiZXNjYXBlfCIrCiAiaWZ8IisKICJpZmVsc2V8IisKICJsY3N0cnwiKwogImxlZnR8IisKICJsaXR8IisKICJsanVzdHwiKwogIm1lcmdlfCIrCiAibWlkfCIrCiAib3N0cmxlbnwiKwogInBvc3wiKwogInJlcGVhdHwiKwogInJldmVyc2V8IisKICJyaWdodHwiKwogInJqdXN0fCIrCiAic2NyYW1ibGV8IisKICJzZWN1cmV8IisKICJzcGFjZXwiKwogInNwZWxsbnVtfCIrCiAic3F1aXNofCIrCiAic3RyY2F0fCIrCiAic3RybWF0Y2h8IisKICJzdHJpbnNlcnR8IisKICJzdHJpcGFuc2l8IisKICJzdHJpcGZhbnNpfCIrCiAic3RybGVufCIrCiAic3dpdGNofCIrCiAic3dpdGNoYWxsfCIrCiAidGFibGV8IisKICJ0cnwiKwogInRyaW18IisKICJ1Y3N0cnwiKwogInVuc2FmZXwiKwogIndyYXB8IisKICJjdGl0bGV8IisKICJjd2hvfCIrCiAiY2hhbm5lbHN8IisKICJjbG9ja3wiKwogImNmbGFnc3wiKwogImlsZXZ8IisKICJpdGV4dHwiKwogImludW18IisKICJjb252c2Vjc3wiKwogImNvbnZ1dGNzZWNzfCIrCiAiY29udnRpbWV8IisKICJjdGltZXwiKwogImV0aW1lZm10fCIrCiAiaXNkYXlsaWdodHwiKwogIm10aW1lfCIrCiAic2Vjc3wiKwogIm1zZWNzfCIrCiAic3RhcnR0aW1lfCIrCiAidGltZXwiKwogInRpbWVmbXR8IisKICJ0aW1lc3RyaW5nfCIrCiAidXRjdGltZXwiKwogImF0cmxvY2t8IisKICJjbG9uZXwiKwogImNyZWF0ZXwiKwogImNvb2t8IisKICJkaWd8IisKICJlbWl0fCIrCiAibGVtaXR8IisKICJsaW5rfCIrCiAib2VtaXR8IisKICJvcGVufCIrCiAicGVtaXR8IisKICJyZW1pdHwiKwogInNldHwiKwogInRlbHwiKwogIndpcGV8IisKICJ6ZW1pdHwiKwogImZiY3JlYXRlfCIrCiAiZmJkZXN0cm95fCIrCiAiZmJ3cml0ZXwiKwogImZiY2xlYXJ8IisKICJmYmNvcHl8IisKICJmYmNvcHl0b3wiKwogImZiY2xpcHwiKwogImZiZHVtcHwiKwogImZiZmx1c2h8IisKICJmYmhzZXR8IisKICJmYmxpc3R8IisKICJmYnN0YXRzfCIrCiAicWVudHJpZXN8IisKICJxZW50cnl8IisKICJwbGF5fCIrCiAiYW5zaXwiKwogImJyZWFrfCIrCiAiY3wiKwogImFzY3wiKwogImRpZXwiKwogImlzZGJyZWZ8IisKICJpc2ludHwiKwogImlzbnVtfCIrCiAiaXNsZXR0ZXJzfCIrCiAibGluZWNvb3Jkc3wiKwogImxvY2FsaXplfCIrCiAibG51bXwiKwogIm5hbWVzaG9ydHwiKwogIm51bGx8IisKICJvYmpldmFsfCIrCiAicnwiKwogInJhbmR8IisKICJzfCIrCiAic2V0cXwiKwogInNldHJ8IisKICJzb3VuZGV4fCIrCiAic291bmRzbGlrZXwiKwogInZhbGlkfCIrCiAidmNoYXJ0fCIrCiAidmNoYXJ0MnwiKwogInZsYWJlbHwiKwogIkBAfCIrCiAiYmFrZXJkYXlzfCIrCiAiYm9keWJ1aWxkfCIrCiAiYm94fCIrCiAiY2FwYWxsfCIrCiAiY2F0YWxvZ3wiKwogImNoaWxkcmVufCIrCiAiY3RyYWlsZXJ8IisKICJkYXJ0dGltZXwiKwogImRlYnR8IisKICJkZXRhaWxiYXJ8IisKICJleHBsb3JlZHJvb218IisKICJmYW5zaXRvYW5zaXwiKwogImZhbnNpdG94YW5zaXwiKwogImZ1bGxiYXJ8IisKICJoYWxmYmFyfCIrCiAiaXNkYXJ0ZWR8IisKICJpc25ld2JpZXwiKwogImlzd29yZHwiKwogImxhbWJkYXwiKwogImxvYmplY3RzfCIrCiAibHBsYXllcnN8IisKICJsdGhpbmdzfCIrCiAibHZleGl0c3wiKwogImx2b2JqZWN0c3wiKwogImx2cGxheWVyc3wiKwogImx2dGhpbmdzfCIrCiAibmV3c3dyYXB8IisKICJudW1zdWZmaXh8IisKICJwbGF5ZXJzb258IisKICJwbGF5ZXJzdGhpc3dlZWt8IisKICJyYW5kb21hZHwiKwogInJhbmR3b3JkfCIrCiAicmVhbHJhbmR3b3JkfCIrCiAicmVwbGFjZWNocnwiKwogInNlY29uZHwiKwogInNwbGl0YW1vdW50fCIrCiAic3RybGVuYWxsfCIrCiAidGV4dHwiKwogInRoaXJkfCIrCiAidG9mYW5zaXwiKwogInRvdGFsYWN8IisKICJ1bmlxdWV8IisKICJnZXRhZGRyZXNzcm9vbXwiKwogImxpc3Rwcm9wZXJ0eWNvbW18IisKICJsaXN0cHJvcGVydHlyZXN8IisKICJsb3Rvd25lcnwiKwogImxvdHJhdGluZ3wiKwogImxvdHJhdGluZ2NvdW50fCIrCiAibG90dmFsdWV8IisKICJib3VnaHRwcm9kdWN0fCIrCiAiY29tcGFueWFiYnwiKwogImNvbXBhbnlpY29ufCIrCiAiY29tcGFueWxpc3R8IisKICJjb21wYW55bmFtZXwiKwogImNvbXBhbnlvd25lcnN8IisKICJjb21wYW55dmFsdWV8IisKICJlbXBsb3llZXN8IisKICJpbnZlc3RlZHwiKwogInByb2R1Y3RsaXN0fCIrCiAicHJvZHVjdG5hbWV8IisKICJwcm9kdWN0b3duZXJzfCIrCiAicHJvZHVjdHJhdGluZ3wiKwogInByb2R1Y3RyYXRpbmdjb3VudHwiKwogInByb2R1Y3Rzb2xkYXR8IisKICJwcm9kdWN0dHlwZXwiKwogInJhdGVkcHJvZHVjdHwiKwogInNvbGRwcm9kdWN0fCIrCiAidG9wcHJvZHVjdHN8IisKICJ0b3RhbHNwZW50b25wcm9kdWN0fCIrCiAidG90YWxzdG9ja3wiKwogInRyYW5zZmVybW9uZXl8IisKICJ1bmlxdWVidXllcmNvdW50fCIrCiAidW5pcXVlcHJvZHVjdHNib3VnaHR8IisKICJ2YWxpZGNvbXBhbnl8IisKICJkZWxldGVwaWN0dXJlfCIrCiAiZmJzYXZlfCIrCiAiZ2V0cGljdHVyZXNlY3VyaXR5fCIrCiAiaGFzcGljdHVyZXwiKwogImxpc3RwaWN0dXJlc3wiKwogInBpY3R1cmVzaXplfCIrCiAicmVwbGFjZWNvbG9yfCIrCiAicmdidG9jb2xvcnwiKwogInNhdmVwaWN0dXJlfCIrCiAic2V0cGljdHVyZXNlY3VyaXR5fCIrCiAic2hvd3BpY3R1cmV8IisKICJwaWVjaGFydHwiKwogInBpZWNoYXJ0bGFiZWx8IisKICJjcmVhdGVtYXplfCIrCiAiZHJhd21hemV8IisKICJkcmF3d2lyZWZyYW1lIgogICAgKTsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIiwKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBzdHJQcmUgPSAiKD86cnx1fHVyfFJ8VXxVUnxVcnx1Uik/IjsKCiAgICB2YXIgZGVjaW1hbEludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwogICAgdmFyIG9jdEludGVnZXIgPSAiKD86MFtvT10/WzAtN10rKSI7CiAgICB2YXIgaGV4SW50ZWdlciA9ICIoPzowW3hYXVtcXGRBLUZhLWZdKykiOwogICAgdmFyIGJpbkludGVnZXIgPSAiKD86MFtiQl1bMDFdKykiOwogICAgdmFyIGludGVnZXIgPSAiKD86IiArIGRlY2ltYWxJbnRlZ2VyICsgInwiICsgb2N0SW50ZWdlciArICJ8IiArIGhleEludGVnZXIgKyAifCIgKyBiaW5JbnRlZ2VyICsgIikiOwoKICAgIHZhciBleHBvbmVudCA9ICIoPzpbZUVdWystXT9cXGQrKSI7CiAgICB2YXIgZnJhY3Rpb24gPSAiKD86XFwuXFxkKykiOwogICAgdmFyIGludFBhcnQgPSAiKD86XFxkKykiOwogICAgdmFyIHBvaW50RmxvYXQgPSAiKD86KD86IiArIGludFBhcnQgKyAiPyIgKyBmcmFjdGlvbiArICIpfCg/OiIgKyBpbnRQYXJ0ICsgIlxcLikpIjsKICAgIHZhciBleHBvbmVudEZsb2F0ID0gIig/Oig/OiIgKyBwb2ludEZsb2F0ICsgInwiICsgIGludFBhcnQgKyAiKSIgKyBleHBvbmVudCArICIpIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzoiICsgZXhwb25lbnRGbG9hdCArICJ8IiArIHBvaW50RmxvYXQgKyAiKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLCAvLyBtdXNoIHN1YnN0aXR1dGlvbiByZWdpc3RlcgogICAgICAgICAgICAgICAgcmVnZXggOiAiJVswLTldezF9IgogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsIC8vIG11c2ggc3Vic3RpdHV0aW9uIHJlZ2lzdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICIlcVswLTlBLVphLXpdezF9IgogICAgICAgICB9LAogICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsIC8vIG11c2ggc3BlY2lhbCBjaGFyYWN0ZXIgcmVnaXN0ZXIKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiVbYS16QS1aXXsxfSIKICAgICAgICAgfSwKICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIiVbYS16MC05LV9dKyIKICAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbWFnaW5hcnkKICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGZsb2F0TnVtYmVyICsgInxcXGQrKVtqSl1cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGxvbmcgaW50ZWdlcgogICAgICAgICAgICByZWdleCA6IGludGVnZXIgKyAiW2xMXVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbnRlZ2VyCiAgICAgICAgICAgIHJlZ2V4IDogaW50ZWdlciArICJcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcKnxcXCpcXCp8XFwvfFxcL1xcL3wjfCV8PDx8Pj58XFx8fFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcW1xcKFxce10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdXFwpXFx9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0gXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhNdXNoQ29kZVJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5NdXNoQ29kZVJ1bGVzID0gTXVzaENvZGVSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvcHl0aG9uaWMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihtYXJrZXJzKSB7CiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoIihbXFxbe10pKD86XFxzKikkfCgiICsgbWFya2VycyArICIpKD86XFxzKikoPzojLiopPyQiKTsKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIG1hdGNoLmluZGV4KTsKICAgICAgICAgICAgaWYgKG1hdGNoWzJdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3csIG1hdGNoLmluZGV4ICsgbWF0Y2hbMl0ubGVuZ3RoKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvbXVzaGNvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9tdXNoY29kZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL3B5dGhvbmljIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgTXVzaENvZGVSdWxlcyA9IHJlcXVpcmUoIi4vbXVzaGNvZGVfaGlnaGxpZ2h0X3J1bGVzIikuTXVzaENvZGVSdWxlczsKdmFyIFB5dGhvbkZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL3B5dGhvbmljIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IE11c2hDb2RlUnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBQeXRob25Gb2xkTW9kZSgiXFw6Iik7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbOl1ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICB2YXIgb3V0ZGVudHMgPSB7CiAgICAgICAgInBhc3MiOiAxLAogICAgICAgICJyZXR1cm4iOiAxLAogICAgICAgICJyYWlzZSI6IDEsCiAgICAgICAgImJyZWFrIjogMSwKICAgICAgICAiY29udGludWUiOiAxCiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKGlucHV0ICE9PSAiXHJcbiIgJiYgaW5wdXQgIT09ICJcciIgJiYgaW5wdXQgIT09ICJcbiIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLnRyaW0oKSwgc3RhdGUpLnRva2VuczsKCiAgICAgICAgaWYgKCF0b2tlbnMpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBkbyB7CiAgICAgICAgICAgIHZhciBsYXN0ID0gdG9rZW5zLnBvcCgpOwogICAgICAgIH0gd2hpbGUgKGxhc3QgJiYgKGxhc3QudHlwZSA9PSAiY29tbWVudCIgfHwgKGxhc3QudHlwZSA9PSAidGV4dCIgJiYgbGFzdC52YWx1ZS5tYXRjaCgvXlxzKyQvKSkpKTsKCiAgICAgICAgaWYgKCFsYXN0KQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAobGFzdC50eXBlID09ICJrZXl3b3JkIiAmJiBvdXRkZW50c1tsYXN0LnZhbHVlXSk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKCiAgICAgICAgcm93ICs9IDE7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShyb3cpKTsKICAgICAgICB2YXIgdGFiID0gZG9jLmdldFRhYlN0cmluZygpOwogICAgICAgIGlmIChpbmRlbnQuc2xpY2UoLXRhYi5sZW5ndGgpID09IHRhYikKICAgICAgICAgICAgZG9jLnJlbW92ZShuZXcgUmFuZ2Uocm93LCBpbmRlbnQubGVuZ3RoLXRhYi5sZW5ndGgsIHJvdywgaW5kZW50Lmxlbmd0aCkpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9tdXNoY29kZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL211c2hjb2RlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-mushcode_high_rules.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9tdXNoY29kZV9oaWdoX3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzLHM9ZnVuY3Rpb24oKXt2YXIgZT0iQGlmfEBpZmVsc2V8QHN3aXRjaHxAaGFsdHxAZG9saXN0fEBjcmVhdGV8QHNjZW50fEBzb3VuZHxAdG91Y2h8QGF0YXN0ZXxAb3NvdW5kfEBhaGVhcnxAYWFoZWFyfEBhbWhlYXJ8QG90b3VjaHxAb3Rhc3RlfEBkcm9wfEBvZHJvcHxAYWRyb3B8QGRyb3BmYWlsfEBvZHJvcGZhaWx8QHNtZWxsfEBvZW1pdHxAZW1pdHxAcGVtaXR8QHBhcmVudHxAY2xvbmV8QHRhc3RlfHdoaXNwZXJ8cGFnZXxzYXl8cG9zZXxzZW1pcG9zZXx0ZWFjaHx0b3VjaHx0YXN0ZXxzbWVsbHxsaXN0ZW58bG9va3xtb3ZlfGdvfGhvbWV8Zm9sbG93fHVuZm9sbG93fGRlc2VydHxkaXNtaXNzfEB0ZWwiLHQ9Ij0jMCIsbj0iZGVmYXVsdHxlZGVmYXVsdHxldmFsfGdldF9ldmFsfGdldHxncmVwfGdyZXBpfGhhc2F0dHJ8aGFzYXR0cnB8aGFzYXR0cnZhbHxoYXNhdHRycHZhbHxsYXR0cnxuYXR0cnxwb3NzfHVkZWZhdWx0fHVmdW58dXx2fHVsZGVmYXVsdHx4Z2V0fHpmdW58YmFuZHxibmFuZHxibm90fGJvcnxieG9yfHNobHxzaHJ8YW5kfGNhbmR8Y29yfGVxfGd0fGd0ZXxsdHxsdGV8bmFuZHxuZXF8bm9yfG5vdHxvcnx0fHhvcnxjb258ZW50cmFuY2VzfGV4aXR8Zm9sbG93ZXJzfGhvbWV8bGNvbnxsZXhpdHN8bG9jfGxvY2F0ZXxscGFyZW50fGxzZWFyY2h8bmV4dHxudW18b3duZXJ8cGFyZW50fHBtYXRjaHxybG9jfHJudW18cm9vbXx3aGVyZXx6b25lfHdvcm58aGVsZHxjYXJyaWVkfGFjb3N8YXNpbnxhdGFufGNlaWx8Y29zfGV8ZXhwfGZkaXZ8Zm1vZHxmbG9vcnxsb2d8bG58cGl8cG93ZXJ8cm91bmR8c2lufHNxcnR8dGFufGFwb3NzfGFuZGZsYWdzfGNvbm58Y29tbWFuZHNzZW50fGNvbnRyb2xzfGRvaW5nfGVsb2NrfGZpbmRhYmxlfGZsYWdzfGZ1bGxuYW1lfGhhc2ZsYWd8aGFzcG93ZXJ8aGFzdHlwZXxoaWRkZW58aWRsZXxpc2Jha2VyfGxvY2t8bHN0YXRzfG1vbmV5fHdob3xuYW1lfG5lYXJieXxvYmp8b2JqZmxhZ3N8cGhvdG98cG9sbHxwb3dlcnN8cGVuZGluZ3RleHR8cmVjZWl2ZWR0ZXh0fHJlc3RhcnRzfHJlc3RhcnR0aW1lfHN1Ymp8c2hvcnRlc3RwYXRofHRtb25leXx0eXBlfHZpc2libGV8Y2F0fGVsZW1lbnR8ZWxlbWVudHN8ZXh0cmFjdHxmaWx0ZXJ8ZmlsdGVyYm9vbHxmaXJzdHxmb3JlYWNofGZvbGR8Z3JhYnxncmFiYWxsfGluZGV4fGluc2VydHxpdGVtaXplfGl0ZW1zfGl0ZXJ8bGFzdHxsZGVsZXRlfG1hcHxtYXRjaHxtYXRjaGFsbHxtZW1iZXJ8bWl4fG11bmdlfHBpY2t8cmVtb3ZlfHJlcGxhY2V8cmVzdHxyZXZ3b3Jkc3xzZXRkaWZmfHNldGludGVyfHNldHVuaW9ufHNodWZmbGV8c29ydHxzb3J0Ynl8c3BsaWNlfHN0ZXB8d29yZHBvc3x3b3Jkc3xhZGR8bG1hdGh8bWF4fG1lYW58bWVkaWFufG1pbnxtdWx8cGVyY2VudHxzaWdufHN0ZGRldnxzdWJ8dmFsfGJvdW5kfGFic3xpbmN8ZGVjfGRpc3QyZHxkaXN0M2R8ZGl2fGZsb29yZGl2fG1vZHxtb2R1bG98cmVtYWluZGVyfHZhZGR8dmRpbXx2ZG90fHZtYWd8dm1heHx2bWlufHZtdWx8dnN1Ynx2dW5pdHxyZWdlZGl0fHJlZ2VkaXRhbGx8cmVnZWRpdGFsbGl8cmVnZWRpdGl8cmVnbWF0Y2h8cmVnbWF0Y2hpfHJlZ3JhYnxyZWdyYWJhbGx8cmVncmFiYWxsaXxyZWdyYWJpfHJlZ3JlcHxyZWdyZXBpfGFmdGVyfGFscGhhbWlufGFscGhhbWF4fGFydHxiZWZvcmV8YnJhY2tldHN8Y2Fwc3RyfGNhc2V8Y2FzZWFsbHxjZW50ZXJ8Y29udGFpbnNmYW5zaXxjb21wfGRlY29tcG9zZXxkZWNyeXB0fGRlbGV0ZXxlZGl0fGVuY3J5cHR8ZXNjYXBlfGlmfGlmZWxzZXxsY3N0cnxsZWZ0fGxpdHxsanVzdHxtZXJnZXxtaWR8b3N0cmxlbnxwb3N8cmVwZWF0fHJldmVyc2V8cmlnaHR8cmp1c3R8c2NyYW1ibGV8c2VjdXJlfHNwYWNlfHNwZWxsbnVtfHNxdWlzaHxzdHJjYXR8c3RybWF0Y2h8c3RyaW5zZXJ0fHN0cmlwYW5zaXxzdHJpcGZhbnNpfHN0cmxlbnxzd2l0Y2h8c3dpdGNoYWxsfHRhYmxlfHRyfHRyaW18dWNzdHJ8dW5zYWZlfHdyYXB8Y3RpdGxlfGN3aG98Y2hhbm5lbHN8Y2xvY2t8Y2ZsYWdzfGlsZXZ8aXRleHR8aW51bXxjb252c2Vjc3xjb252dXRjc2Vjc3xjb252dGltZXxjdGltZXxldGltZWZtdHxpc2RheWxpZ2h0fG10aW1lfHNlY3N8bXNlY3N8c3RhcnR0aW1lfHRpbWV8dGltZWZtdHx0aW1lc3RyaW5nfHV0Y3RpbWV8YXRybG9ja3xjbG9uZXxjcmVhdGV8Y29va3xkaWd8ZW1pdHxsZW1pdHxsaW5rfG9lbWl0fG9wZW58cGVtaXR8cmVtaXR8c2V0fHRlbHx3aXBlfHplbWl0fGZiY3JlYXRlfGZiZGVzdHJveXxmYndyaXRlfGZiY2xlYXJ8ZmJjb3B5fGZiY29weXRvfGZiY2xpcHxmYmR1bXB8ZmJmbHVzaHxmYmhzZXR8ZmJsaXN0fGZic3RhdHN8cWVudHJpZXN8cWVudHJ5fHBsYXl8YW5zaXxicmVha3xjfGFzY3xkaWV8aXNkYnJlZnxpc2ludHxpc251bXxpc2xldHRlcnN8bGluZWNvb3Jkc3xsb2NhbGl6ZXxsbnVtfG5hbWVzaG9ydHxudWxsfG9iamV2YWx8cnxyYW5kfHN8c2V0cXxzZXRyfHNvdW5kZXh8c291bmRzbGlrZXx2YWxpZHx2Y2hhcnR8dmNoYXJ0Mnx2bGFiZWx8QEB8YmFrZXJkYXlzfGJvZHlidWlsZHxib3h8Y2FwYWxsfGNhdGFsb2d8Y2hpbGRyZW58Y3RyYWlsZXJ8ZGFydHRpbWV8ZGVidHxkZXRhaWxiYXJ8ZXhwbG9yZWRyb29tfGZhbnNpdG9hbnNpfGZhbnNpdG94YW5zaXxmdWxsYmFyfGhhbGZiYXJ8aXNkYXJ0ZWR8aXNuZXdiaWV8aXN3b3JkfGxhbWJkYXxsb2JqZWN0c3xscGxheWVyc3xsdGhpbmdzfGx2ZXhpdHN8bHZvYmplY3RzfGx2cGxheWVyc3xsdnRoaW5nc3xuZXdzd3JhcHxudW1zdWZmaXh8cGxheWVyc29ufHBsYXllcnN0aGlzd2Vla3xyYW5kb21hZHxyYW5kd29yZHxyZWFscmFuZHdvcmR8cmVwbGFjZWNocnxzZWNvbmR8c3BsaXRhbW91bnR8c3RybGVuYWxsfHRleHR8dGhpcmR8dG9mYW5zaXx0b3RhbGFjfHVuaXF1ZXxnZXRhZGRyZXNzcm9vbXxsaXN0cHJvcGVydHljb21tfGxpc3Rwcm9wZXJ0eXJlc3xsb3Rvd25lcnxsb3RyYXRpbmd8bG90cmF0aW5nY291bnR8bG90dmFsdWV8Ym91Z2h0cHJvZHVjdHxjb21wYW55YWJifGNvbXBhbnlpY29ufGNvbXBhbnlsaXN0fGNvbXBhbnluYW1lfGNvbXBhbnlvd25lcnN8Y29tcGFueXZhbHVlfGVtcGxveWVlc3xpbnZlc3RlZHxwcm9kdWN0bGlzdHxwcm9kdWN0bmFtZXxwcm9kdWN0b3duZXJzfHByb2R1Y3RyYXRpbmd8cHJvZHVjdHJhdGluZ2NvdW50fHByb2R1Y3Rzb2xkYXR8cHJvZHVjdHR5cGV8cmF0ZWRwcm9kdWN0fHNvbGRwcm9kdWN0fHRvcHByb2R1Y3RzfHRvdGFsc3BlbnRvbnByb2R1Y3R8dG90YWxzdG9ja3x0cmFuc2Zlcm1vbmV5fHVuaXF1ZWJ1eWVyY291bnR8dW5pcXVlcHJvZHVjdHNib3VnaHR8dmFsaWRjb21wYW55fGRlbGV0ZXBpY3R1cmV8ZmJzYXZlfGdldHBpY3R1cmVzZWN1cml0eXxoYXNwaWN0dXJlfGxpc3RwaWN0dXJlc3xwaWN0dXJlc2l6ZXxyZXBsYWNlY29sb3J8cmdidG9jb2xvcnxzYXZlcGljdHVyZXxzZXRwaWN0dXJlc2VjdXJpdHl8c2hvd3BpY3R1cmV8cGllY2hhcnR8cGllY2hhcnRsYWJlbHxjcmVhdGVtYXplfGRyYXdtYXplfGRyYXd3aXJlZnJhbWUiLHI9dGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsiaW52YWxpZC5kZXByZWNhdGVkIjoiZGVidWdnZXIiLCJzdXBwb3J0LmZ1bmN0aW9uIjpuLCJjb25zdGFudC5sYW5ndWFnZSI6dCxrZXl3b3JkOmV9LCJpZGVudGlmaWVyIiksaT0iKD86cnx1fHVyfFJ8VXxVUnxVcnx1Uik/IixzPSIoPzooPzpbMS05XVxcZCopfCg/OjApKSIsbz0iKD86MFtvT10/WzAtN10rKSIsdT0iKD86MFt4WF1bXFxkQS1GYS1mXSspIixhPSIoPzowW2JCXVswMV0rKSIsZj0iKD86IitzKyJ8IitvKyJ8Iit1KyJ8IithKyIpIixsPSIoPzpbZUVdWystXT9cXGQrKSIsYz0iKD86XFwuXFxkKykiLGg9Iig/OlxcZCspIixwPSIoPzooPzoiK2grIj8iK2MrIil8KD86IitoKyJcXC4pKSIsZD0iKD86KD86IitwKyJ8IitoKyIpIitsKyIpIix2PSIoPzoiK2QrInwiK3ArIikiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IiVbMC05XXsxfSJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiIlcVswLTlBLVphLXpdezF9In0se3Rva2VuOiJ2YXJpYWJsZSIscmVnZXg6IiVbYS16QS1aXXsxfSJ9LHt0b2tlbjoidmFyaWFibGUubGFuZ3VhZ2UiLHJlZ2V4OiIlW2EtejAtOS1fXSsifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OiIoPzoiK3YrInxcXGQrKVtqSl1cXGIifSx7dG9rZW46ImNvbnN0YW50Lm51bWVyaWMiLHJlZ2V4OnZ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6ZisiW2xMXVxcYiJ9LHt0b2tlbjoiY29uc3RhbnQubnVtZXJpYyIscmVnZXg6ZisiXFxiIn0se3Rva2VuOnIscmVnZXg6IlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiJ9LHt0b2tlbjoia2V5d29yZC5vcGVyYXRvciIscmVnZXg6IlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfCN8JXw8PHw+PnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0ifSx7dG9rZW46InBhcmVuLmxwYXJlbiIscmVnZXg6IltcXFtcXChcXHtdIn0se3Rva2VuOiJwYXJlbi5ycGFyZW4iLHJlZ2V4OiJbXFxdXFwpXFx9XSJ9LHt0b2tlbjoidGV4dCIscmVnZXg6IlxccysifV19fTtyLmluaGVyaXRzKHMsaSksdC5NdXNoQ29kZVJ1bGVzPXN9KQ==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-mysql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9teXNxbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE15c3FsSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIgbXlTcWxLZXl3b3JkcyA9IC8qc3FsKi8gImFsdGVyfGFuZHxhc3xhc2N8YmV0d2Vlbnxjb3VudHxjcmVhdGV8ZGVsZXRlfGRlc2N8ZGlzdGluY3R8ZHJvcHxmcm9tfGhhdmluZ3xpbnxpbnNlcnR8aW50b3xpc3xqb2lufGxpa2V8bm90fG9ufG9yfG9yZGVyfHNlbGVjdHxzZXR8dGFibGV8dW5pb258dXBkYXRlfHZhbHVlc3x3aGVyZSIgKyAifGFjY2Vzc2libGV8YWN0aW9ufGFkZHxhZnRlcnxhbGdvcml0aG18YWxsfGFuYWx5emV8YXNlbnNpdGl2ZXxhdHxhdXRob3JzfGF1dG9faW5jcmVtZW50fGF1dG9jb21taXR8YXZnfGF2Z19yb3dfbGVuZ3RofGJlZm9yZXxiaW5hcnl8YmlubG9nfGJvdGh8YnRyZWV8Y2FjaGV8Y2FsbHxjYXNjYWRlfGNhc2NhZGVkfGNhc2V8Y2F0YWxvZ19uYW1lfGNoYWlufGNoYW5nZXxjaGFuZ2VkfGNoYXJhY3RlcnxjaGVja3xjaGVja3BvaW50fGNoZWNrc3VtfGNsYXNzX29yaWdpbnxjbGllbnRfc3RhdGlzdGljc3xjbG9zZXxjb2FsZXNjZXxjb2RlfGNvbGxhdGV8Y29sbGF0aW9ufGNvbGxhdGlvbnN8Y29sdW1ufGNvbHVtbnN8Y29tbWVudHxjb21taXR8Y29tbWl0dGVkfGNvbXBsZXRpb258Y29uY3VycmVudHxjb25kaXRpb258Y29ubmVjdGlvbnxjb25zaXN0ZW50fGNvbnN0cmFpbnR8Y29udGFpbnN8Y29udGludWV8Y29udHJpYnV0b3JzfGNvbnZlcnR8Y3Jvc3N8Y3VycmVudF9kYXRlfGN1cnJlbnRfdGltZXxjdXJyZW50X3RpbWVzdGFtcHxjdXJyZW50X3VzZXJ8Y3Vyc29yfGRhdGF8ZGF0YWJhc2V8ZGF0YWJhc2VzfGRheV9ob3VyfGRheV9taWNyb3NlY29uZHxkYXlfbWludXRlfGRheV9zZWNvbmR8ZGVhbGxvY2F0ZXxkZWN8ZGVjbGFyZXxkZWZhdWx0fGRlbGF5X2tleV93cml0ZXxkZWxheWVkfGRlbGltaXRlcnxkZXNfa2V5X2ZpbGV8ZGVzY3JpYmV8ZGV0ZXJtaW5pc3RpY3xkZXZfcG9wfGRldl9zYW1wfGRldmlhbmNlfGRpcmVjdG9yeXxkaXNhYmxlfGRpc2NhcmR8ZGlzdGluY3Ryb3d8ZGl2fGR1YWx8ZHVtcGZpbGV8ZWFjaHxlbHNlaWZ8ZW5hYmxlfGVuY2xvc2VkfGVuZHxlbmRzfGVuZ2luZXxlbmdpbmVzfGVudW18ZXJyb3JzfGVzY2FwZXxlc2NhcGVkfGV2ZW58ZXZlbnR8ZXZlbnRzfGV2ZXJ5fGV4ZWN1dGV8ZXhpc3RzfGV4aXR8ZXhwbGFpbnxleHRlbmRlZHxmYXN0fGZldGNofGZpZWxkfGZpZWxkc3xmaXJzdHxmbHVzaHxmb3J8Zm9yY2V8Zm9yZWlnbnxmb3VuZF9yb3dzfGZ1bGx8ZnVsbHRleHR8ZnVuY3Rpb258Z2VuZXJhbHxnbG9iYWx8Z3JhbnR8Z3JhbnRzfGdyb3VwfGdyb3VwYnlfY29uY2F0fGhhbmRsZXJ8aGFzaHxoZWxwfGhpZ2hfcHJpb3JpdHl8aG9zdHN8aG91cl9taWNyb3NlY29uZHxob3VyX21pbnV0ZXxob3VyX3NlY29uZHxpZnxpZ25vcmV8aWdub3JlX3NlcnZlcl9pZHN8aW1wb3J0fGluZGV4fGluZGV4X3N0YXRpc3RpY3N8aW5maWxlfGlubmVyfGlubm9kYnxpbm91dHxpbnNlbnNpdGl2ZXxpbnNlcnRfbWV0aG9kfGluc3RhbGx8aW50ZXJ2YWx8aW52b2tlcnxpc29sYXRpb258aXRlcmF0ZXxrZXl8a2V5c3xraWxsfGxhbmd1YWdlfGxhc3R8bGVhZGluZ3xsZWF2ZXxsZWZ0fGxldmVsfGxpbWl0fGxpbmVhcnxsaW5lc3xsaXN0fGxvYWR8bG9jYWx8bG9jYWx0aW1lfGxvY2FsdGltZXN0YW1wfGxvY2t8bG9nc3xsb3dfcHJpb3JpdHl8bWFzdGVyfG1hc3Rlcl9oZWFydGJlYXRfcGVyaW9kfG1hc3Rlcl9zc2xfdmVyaWZ5X3NlcnZlcl9jZXJ0fG1hc3RlcnN8bWF0Y2h8bWF4fG1heF9yb3dzfG1heHZhbHVlfG1lc3NhZ2VfdGV4dHxtaWRkbGVpbnR8bWlncmF0ZXxtaW58bWluX3Jvd3N8bWludXRlX21pY3Jvc2Vjb25kfG1pbnV0ZV9zZWNvbmR8bW9kfG1vZGV8bW9kaWZpZXN8bW9kaWZ5fG11dGV4fG15c3FsX2Vycm5vfG5hdHVyYWx8bmV4dHxub3xub193cml0ZV90b19iaW5sb2d8b2ZmbGluZXxvZmZzZXR8b25lfG9ubGluZXxvcGVufG9wdGltaXplfG9wdGlvbnxvcHRpb25hbGx5fG91dHxvdXRlcnxvdXRmaWxlfHBhY2tfa2V5c3xwYXJzZXJ8cGFydGl0aW9ufHBhcnRpdGlvbnN8cGFzc3dvcmR8cGhhc2V8cGx1Z2lufHBsdWdpbnN8cHJlcGFyZXxwcmVzZXJ2ZXxwcmV2fHByaW1hcnl8cHJpdmlsZWdlc3xwcm9jZWR1cmV8cHJvY2Vzc2xpc3R8cHJvZmlsZXxwcm9maWxlc3xwdXJnZXxxdWVyeXxxdWlja3xyYW5nZXxyZWFkfHJlYWRfd3JpdGV8cmVhZHN8cmVhbHxyZWJ1aWxkfHJlY292ZXJ8cmVmZXJlbmNlc3xyZWdleHB8cmVsYXlsb2d8cmVsZWFzZXxyZW1vdmV8cmVuYW1lfHJlb3JnYW5pemV8cmVwYWlyfHJlcGVhdGFibGV8cmVwbGFjZXxyZXF1aXJlfHJlc2lnbmFsfHJlc3RyaWN0fHJlc3VtZXxyZXR1cm58cmV0dXJuc3xyZXZva2V8cmlnaHR8cmxpa2V8cm9sbGJhY2t8cm9sbHVwfHJvd3xyb3dfZm9ybWF0fHJ0cmVlfHNhdmVwb2ludHxzY2hlZHVsZXxzY2hlbWF8c2NoZW1hX25hbWV8c2NoZW1hc3xzZWNvbmRfbWljcm9zZWNvbmR8c2VjdXJpdHl8c2Vuc2l0aXZlfHNlcGFyYXRvcnxzZXJpYWxpemFibGV8c2VydmVyfHNlc3Npb258c2hhcmV8c2hvd3xzaWduYWx8c2xhdmV8c2xvd3xzbWFsbGludHxzbmFwc2hvdHxzb25hbWV8c3BhdGlhbHxzcGVjaWZpY3xzcWx8c3FsX2JpZ19yZXN1bHR8c3FsX2J1ZmZlcl9yZXN1bHR8c3FsX2NhY2hlfHNxbF9jYWxjX2ZvdW5kX3Jvd3N8c3FsX25vX2NhY2hlfHNxbF9zbWFsbF9yZXN1bHR8c3FsZXhjZXB0aW9ufHNxbHN0YXRlfHNxbHdhcm5pbmd8c3NsfHN0YXJ0fHN0YXJ0aW5nfHN0YXJ0c3xzdGF0dXN8c3RkfHN0ZGRldnxzdGRkZXZfcG9wfHN0ZGRldl9zYW1wfHN0b3JhZ2V8c3RyYWlnaHRfam9pbnxzdWJjbGFzc19vcmlnaW58c3VtfHN1c3BlbmR8dGFibGVfbmFtZXx0YWJsZV9zdGF0aXN0aWNzfHRhYmxlc3x0YWJsZXNwYWNlfHRlbXBvcmFyeXx0ZXJtaW5hdGVkfHRvfHRyYWlsaW5nfHRyYW5zYWN0aW9ufHRyaWdnZXJ8dHJpZ2dlcnN8dHJ1bmNhdGV8dW5jb21taXR0ZWR8dW5kb3x1bmluc3RhbGx8dW5pcXVlfHVubG9ja3x1cGdyYWRlfHVzYWdlfHVzZXx1c2VfZnJtfHVzZXJ8dXNlcl9yZXNvdXJjZXN8dXNlcl9zdGF0aXN0aWNzfHVzaW5nfHV0Y19kYXRlfHV0Y190aW1lfHV0Y190aW1lc3RhbXB8dmFsdWV8dmFyaWFibGVzfHZhcnlpbmd8dmlld3x2aWV3c3x3YXJuaW5nc3x3aGVufHdoaWxlfHdpdGh8d29ya3x3cml0ZXx4YXx4b3J8eWVhcl9tb250aHx6ZXJvZmlsbHxiZWdpbnxkb3x0aGVufGVsc2V8bG9vcHxyZXBlYXQiOwogICAgdmFyIGJ1aWx0aW5zID0gImJ5fGJvb2x8Ym9vbGVhbnxiaXR8YmxvYnxkZWNpbWFsfGRvdWJsZXxlbnVtfGZsb2F0fGxvbmd8bG9uZ2Jsb2J8bG9uZ3RleHR8bWVkaXVtfG1lZGl1bWJsb2J8bWVkaXVtaW50fG1lZGl1bXRleHR8dGltZXx0aW1lc3RhbXB8dGlueWJsb2J8dGlueWludHx0aW55dGV4dHx0ZXh0fGJpZ2ludHxpbnR8aW50MXxpbnQyfGludDN8aW50NHxpbnQ4fGludGVnZXJ8ZmxvYXR8ZmxvYXQ0fGZsb2F0OHxkb3VibGV8Y2hhcnx2YXJiaW5hcnl8dmFyY2hhcnx2YXJjaGFyYWN0ZXJ8cHJlY2lzaW9ufGRhdGV8ZGF0ZXRpbWV8eWVhcnx1bnNpZ25lZHxzaWduZWR8bnVtZXJpY3x1Y2FzZXxsY2FzZXxtaWR8bGVufHJvdW5kfHJhbmt8bm93fGZvcm1hdHxjb2FsZXNjZXxpZm51bGx8aXNudWxsfG52bCI7CiAgICB2YXIgdmFyaWFibGUgPSAiY2hhcnNldHxjbGVhcnxjb25uZWN0fGVkaXR8ZWdvfGV4aXR8Z298aGVscHxub3BhZ2VyfG5vdGVlfG5vd2FybmluZ3xwYWdlcnxwcmludHxwcm9tcHR8cXVpdHxyZWhhc2h8c291cmNlfHN0YXR1c3xzeXN0ZW18dGVlIjsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGlucywKICAgICAgICAia2V5d29yZCI6IG15U3FsS2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50IjogImZhbHNlfHRydWV8bnVsbHx1bmtub3dufGRhdGV8dGltZXx0aW1lc3RhbXB8T0RCQ2RvdFRhYmxlfHplcm9sZXNzRmxvYXQiLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6IHZhcmlhYmxlCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOwoKICAgIAogICAgZnVuY3Rpb24gc3RyaW5nKHJ1bGUpIHsKICAgICAgICB2YXIgc3RhcnQgPSBydWxlLnN0YXJ0OwogICAgICAgIHZhciBlc2NhcGVTZXEgPSBydWxlLmVzY2FwZTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4OiBzdGFydCwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge3Rva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVNlcX0sCiAgICAgICAgICAgICAgICB7dG9rZW46ICJzdHJpbmcuZW5kIiwgbmV4dDogInN0YXJ0IiwgcmVnZXg6IHN0YXJ0fSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICBdCiAgICAgICAgfTsKICAgIH0KCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWyB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIoPzotLSB8IykuKiQiCiAgICAgICAgfSwgIAogICAgICAgIHN0cmluZyh7c3RhcnQ6ICciJywgZXNjYXBlOiAvXFxbMCciYm5ydFpcXCVfXT8vfSksCiAgICAgICAgc3RyaW5nKHtzdGFydDogIiciLCBlc2NhcGU6IC9cXFswJyJibnJ0WlxcJV9dPy99KSwKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAvXC9cKi8sCiAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgcmVnZXggOiAvMFt4WF1bMC05YS1mQS1GXSt8W3hYXSdbMC05YS1mQS1GXSsnfDBbYkJdWzAxXSt8W2JCXSdbMDFdKycvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50LmNsYXNzIiwKICAgICAgICAgICAgcmVnZXggOiAiQEA/W2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQuYnVpbGRpbiIsCiAgICAgICAgICAgIHJlZ2V4IDogImBbXmBdKmAiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiXFwrfFxcLXxcXC98XFwvXFwvfCV8PEA+fEA+fDxAfCZ8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fD0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFwoXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXCldIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgfSBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCJ9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTXlzcWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTXlzcWxIaWdobGlnaHRSdWxlcyA9IE15c3FsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9teXNxbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL215c3FsX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4uL21vZGUvdGV4dCIpLk1vZGU7CnZhciBNeXNxbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9teXNxbF9oaWdobGlnaHRfcnVsZXMiKS5NeXNxbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBNeXNxbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsgICAgICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSBbIi0tIiwgIiMiXTsgLy8gdG9kbyBzcGFjZQogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbXlzcWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9teXNxbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-nginx.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9uZ2lueF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBOZ2lueEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24gKCkgewogICAgdmFyIGtleXdvcmRzID0gImluY2x1ZGV8aW5kZXh8YWJzb2x1dGVfcmVkaXJlY3R8YWlvfG91dHB1dF9idWZmZXJzfGRpcmVjdGlvfHNlbmRmaWxlfGFpb193cml0ZXxhbGlhc3xyb290fGNodW5rZWRfdHJhbnNmZXJfZW5jb2Rpbmd8Y2xpZW50X2JvZHlfYnVmZmVyX3NpemV8Y2xpZW50X2JvZHlfaW5fZmlsZV9vbmx5fGNsaWVudF9ib2R5X2luX3NpbmdsZV9idWZmZXJ8Y2xpZW50X2JvZHlfdGVtcF9wYXRofGNsaWVudF9ib2R5X3RpbWVvdXR8Y2xpZW50X2hlYWRlcl9idWZmZXJfc2l6ZXxjbGllbnRfaGVhZGVyX3RpbWVvdXR8Y2xpZW50X21heF9ib2R5X3NpemV8Y29ubmVjdGlvbl9wb29sX3NpemV8ZGVmYXVsdF90eXBlfGRpc2FibGVfc3ltbGlua3N8ZGlyZWN0aW9fYWxpZ25tZW50fGVycm9yX3BhZ2V8ZXRhZ3xpZl9tb2RpZmllZF9zaW5jZXxpZ25vcmVfaW52YWxpZF9oZWFkZXJzfGludGVybmFsfGtlZXBhbGl2ZV9yZXF1ZXN0c3xrZWVwYWxpdmVfZGlzYWJsZXxrZWVwYWxpdmVfdGltZW91dHxsaW1pdF9leGNlcHR8bGFyZ2VfY2xpZW50X2hlYWRlcl9idWZmZXJzfGxpbWl0X3JhdGV8bGltaXRfcmF0ZV9hZnRlcnxsaW5nZXJpbmdfY2xvc2V8bGluZ2VyaW5nX3RpbWV8bGluZ2VyaW5nX3RpbWVvdXR8bGlzdGVufGxvZ19ub3RfZm91bmR8bG9nX3N1YnJlcXVlc3R8bWF4X3Jhbmdlc3xtZXJnZV9zbGFzaGVzfG1zaWVfcGFkZGluZ3xtc2llX3JlZnJlc2h8b3Blbl9maWxlX2NhY2hlfG9wZW5fZmlsZV9jYWNoZV9lcnJvcnN8b3Blbl9maWxlX2NhY2hlX21pbl91c2VzfG9wZW5fZmlsZV9jYWNoZV92YWxpZHxvdXRwdXRfYnVmZmVyc3xwb3J0X2luX3JlZGlyZWN0fHBvc3Rwb25lX291dHB1dHxyZWFkX2FoZWFkfHJlY3Vyc2l2ZV9lcnJvcl9wYWdlc3xyZXF1ZXN0X3Bvb2xfc2l6ZXxyZXNldF90aW1lZG91dF9jb25uZWN0aW9ufHJlc29sdmVyfHJlc29sdmVyX3RpbWVvdXR8c2F0aXNmeXxzZW5kX2xvd2F0fHNlbmRfdGltZW91dHxzZW5kZmlsZXxzZW5kZmlsZV9tYXhfY2h1bmt8c2VydmVyX25hbWV8c2VydmVyX25hbWVfaW5fcmVkaXJlY3R8c2VydmVyX25hbWVzX2hhc2hfYnVja2V0X3NpemV8c2VydmVyX25hbWVzX2hhc2hfbWF4X3NpemV8c2VydmVyX3Rva2Vuc3xzdWJyZXF1ZXN0X291dHB1dF9idWZmZXJfc2l6ZXx0Y3Bfbm9kZWxheXx0Y3Bfbm9wdXNofHRyeV9maWxlc3x0eXBlc3x0eXBlc19oYXNoX2J1Y2tldF9zaXplfHR5cGVzX2hhc2hfbWF4X3NpemV8dW5kZXJzY29yZXNfaW5faGVhZGVyc3x2YXJpYWJsZXNfaGFzaF9idWNrZXRfc2l6ZXx2YXJpYWJsZXNfaGFzaF9tYXhfc2l6ZXxhY2NlcHRfbXV0ZXh8YWNjZXB0X211dGV4X2RlbGF5fGRlYnVnX2Nvbm5lY3Rpb258ZXJyb3JfbG9nfGRhZW1vbnxkZWJ1Z19wb2ludHN8ZW52fGxvYWRfbW9kdWxlfGxvY2tfZmlsZXxtYXN0ZXJfcHJvY2Vzc3xtdWx0aV9hY2NlcHR8cGNyZV9qaXR8cGlkfHNzbF9lbmdpbmV8dGhyZWFkX3Bvb2x8dGltZXJfcmVzb2x1dGlvbnx1c2V8dXNlcnx3b3JrZXJfYWlvX3JlcXVlc3RzfHdvcmtlcl9jb25uZWN0aW9uc3x3b3JrZXJfY3B1X2FmZmluaXR5fHdvcmtlcl9wcmlvcml0eXx3b3JrZXJfcHJvY2Vzc2VzfHdvcmtlcl9ybGltaXRfY29yZXx3b3JrZXJfcmxpbWl0X25vZmlsZXx3b3JrZXJfc2h1dGRvd25fdGltZW91dHx3b3JraW5nX2RpcmVjdG9yeXxhbGxvd3xkZW55fGFkZF9iZWZvcmVfYm9keXxhZGRfYWZ0ZXJfYm9keXxhZGRpdGlvbl90eXBlc3xhcGl8c3RhdHVzX3pvbmV8YXV0aF9iYXNpY3xhdXRoX2Jhc2ljX3VzZXJfZmlsZXxhdXRoX2p3dHxhdXRoX2p3dHxhdXRoX2p3dF9jbGFpbV9zZXR8YXV0aF9qd3RfaGVhZGVyX3NldHxhdXRoX2p3dF9rZXlfZmlsZXxhdXRoX2p3dF9rZXlfcmVxdWVzdHxhdXRoX2p3dF9sZWV3YXl8YXV0aF9yZXF1ZXN0fGF1dGhfcmVxdWVzdF9zZXR8YXV0b2luZGV4fGF1dG9pbmRleF9leGFjdF9zaXplfGF1dG9pbmRleF9mb3JtYXR8YXV0b2luZGV4X2xvY2FsdGltZXxhbmNpZW50X2Jyb3dzZXJ8YW5jaWVudF9icm93c2VyX3ZhbHVlfG1vZGVybl9icm93c2VyfG1vZGVybl9icm93c2VyX3ZhbHVlfGNoYXJzZXR8Y2hhcnNldF9tYXB8Y2hhcnNldF90eXBlc3xvdmVycmlkZV9jaGFyc2V0fHNvdXJjZV9jaGFyc2V0fGNyZWF0ZV9mdWxsX3B1dF9wYXRofGRhdl9hY2Nlc3N8ZGF2X21ldGhvZHN8bWluX2RlbGV0ZV9kZXB0aHxlbXB0eV9naWZ8ZjRmfGY0Zl9idWZmZXJfc2l6ZXxmYXN0Y2dpX2JpbmR8ZmFzdGNnaV9idWZmZXJfc2l6ZXxmYXN0Y2dpX2J1ZmZlcmluZ3xmYXN0Y2dpX2J1ZmZlcnN8ZmFzdGNnaV9idXN5X2J1ZmZlcnNfc2l6ZXxmYXN0Y2dpX2NhY2hlfGZhc3RjZ2lfY2FjaGVfYmFja2dyb3VuZF91cGRhdGV8ZmFzdGNnaV9jYWNoZV9ieXBhc3N8ZmFzdGNnaV9jYWNoZV9rZXl8ZmFzdGNnaV9jYWNoZV9sb2NrfGZhc3RjZ2lfY2FjaGVfbG9ja19hZ2V8ZmFzdGNnaV9jYWNoZV9sb2NrX3RpbWVvdXR8ZmFzdGNnaV9jYWNoZV9tYXhfcmFuZ2Vfb2Zmc2V0fGZhc3RjZ2lfY2FjaGVfbWV0aG9kc3xmYXN0Y2dpX2NhY2hlX21pbl91c2VzfGZhc3RjZ2lfY2FjaGVfbWluX3VzZXN8ZmFzdGNnaV9jYWNoZV9wYXRofGZhc3RjZ2lfY2FjaGVfcHVyZ2V8ZmFzdGNnaV9jYWNoZV9yZXZhbGlkYXRlfGZhc3RjZ2lfY2FjaGVfdXNlX3N0YWxlfGZhc3RjZ2lfY2FjaGVfdmFsaWR8ZmFzdGNnaV9jYXRjaF9zdGRlcnJ8ZmFzdGNnaV9jb25uZWN0X3RpbWVvdXR8ZmFzdGNnaV9mb3JjZV9yYW5nZXN8ZmFzdGNnaV9oaWRlX2hlYWRlcnxmYXN0Y2dpX2lnbm9yZV9jbGllbnRfYWJvcnR8ZmFzdGNnaV9pZ25vcmVfaGVhZGVyc3xmYXN0Y2dpX2luZGV4fGZhc3RjZ2lfaW50ZXJjZXB0X2Vycm9yc3xmYXN0Y2dpX2tlZXBfY29ubnxmYXN0Y2dpX2xpbWl0X3JhdGV8ZmFzdGNnaV9tYXhfdGVtcF9maWxlX3NpemV8ZmFzdGNnaV9uZXh0X3Vwc3RyZWFtfGZhc3RjZ2lfbmV4dF91cHN0cmVhbV90aW1lb3V0fGZhc3RjZ2lfbmV4dF91cHN0cmVhbV90cmllc3xmYXN0Y2dpX25vX2NhY2hlfGZhc3RjZ2lfcGFyYW18ZmFzdGNnaV9wYXNzfGZhc3RjZ2lfcGFzc19oZWFkZXJ8ZmFzdGNnaV9wYXNzX3JlcXVlc3RfYm9keXxmYXN0Y2dpX3Bhc3NfcmVxdWVzdF9oZWFkZXJzfGZhc3RjZ2lfcmVhZF90aW1lb3V0fGZhc3RjZ2lfcmVxdWVzdF9idWZmZXJpbmd8ZmFzdGNnaV9zZW5kX2xvd2F0fGZhc3RjZ2lfc2VuZF90aW1lb3V0fGZhc3RjZ2lfc29ja2V0X2tlZXBhbGl2ZXxmYXN0Y2dpX3NwbGl0X3BhdGhfaW5mb3xmYXN0Y2dpX3N0b3JlfGZhc3RjZ2lfc3RvcmVfYWNjZXNzfGZhc3RjZ2lfdGVtcF9maWxlX3dyaXRlX3NpemV8ZmFzdGNnaV90ZW1wX3BhdGh8Zmx2fGdlb2lwX2NvdW50cnl8Z2VvaXBfY2l0eXxnZW9pcF9vcmd8Z2VvaXBfcHJveHl8Z2VvaXBfcHJveHlfcmVjdXJzaXZlfGdycGNfYmluZHxncnBjX2J1ZmZlcl9zaXplfGdycGNfY29ubmVjdF90aW1lb3V0fGdycGNfaGlkZV9oZWFkZXJ8Z3JwY19pZ25vcmVfaGVhZGVyc3xncnBjX2ludGVyY2VwdF9lcnJvcnN8Z3JwY19uZXh0X3Vwc3RyZWFtfGdycGNfbmV4dF91cHN0cmVhbV90aW1lb3V0fGdycGNfbmV4dF91cHN0cmVhbV90cmllc3xncnBjX3Bhc3N8Z3JwY19wYXNzX2hlYWRlcnxncnBjX3JlYWRfdGltZW91dHxncnBjX3NlbmRfdGltZW91dHxncnBjX3NldF9oZWFkZXJ8Z3JwY19zb2NrZXRfa2VlcGFsaXZlfGdycGNfc3NsX2NlcnRpZmljYXRlfGdycGNfc3NsX2NlcnRpZmljYXRlX2tleXxncnBjX3NzbF9jaXBoZXJzfGdycGNfc3NsX2NybHxncnBjX3NzbF9uYW1lfGdycGNfc3NsX3Bhc3N3b3JkX2ZpbGV8Z3JwY19zc2xfcHJvdG9jb2xzfGdycGNfc3NsX3NlcnZlcl9uYW1lfGdycGNfc3NsX3Nlc3Npb25fcmV1c2V8Z3JwY19zc2xfdHJ1c3RlZF9jZXJ0aWZpY2F0ZXxncnBjX3NzbF92ZXJpZnl8Z3JwY19zc2xfdmVyaWZ5X2RlcHRofGd1bnppcHxndW56aXBfYnVmZmVyc3xnemlwfGd6aXBfYnVmZmVyc3xnemlwX2NvbXBfbGV2ZWx8Z3ppcF9kaXNhYmxlfGd6aXBfaHR0cF92ZXJzaW9ufGd6aXBfbWluX2xlbmd0aHxnemlwX3Byb3hpZWR8Z3ppcF90eXBlc3xnemlwX3Zhcnl8Z3ppcF9zdGF0aWN8YWRkX2hlYWRlcnxhZGRfdHJhaWxlcnxleHBpcmVzfGhsc2hsc19idWZmZXJzfGhsc19mb3J3YXJkX2FyZ3N8aGxzX2ZyYWdtZW50fGhsc19tcDRfYnVmZmVyX3NpemV8aGxzX21wNF9tYXhfYnVmZmVyX3NpemV8aW1hZ2VfZmlsdGVyfGltYWdlX2ZpbHRlcl9idWZmZXJ8aW1hZ2VfZmlsdGVyX2ludGVybGFjZXxpbWFnZV9maWx0ZXJfanBlZ19xdWFsaXR5fGltYWdlX2ZpbHRlcl9zaGFycGVufGltYWdlX2ZpbHRlcl90cmFuc3BhcmVuY3l8aW1hZ2VfZmlsdGVyX3dlYnBfcXVhbGl0eXxqc19jb250ZW50fGpzX2luY2x1ZGV8anNfc2V0fGtleXZhbHxrZXl2YWxfem9uZXxsaW1pdF9jb25ufGxpbWl0X2Nvbm5fbG9nX2xldmVsfGxpbWl0X2Nvbm5fc3RhdHVzfGxpbWl0X2Nvbm5fem9uZXxsaW1pdF96b25lfGxpbWl0X3JlcXxsaW1pdF9yZXFfbG9nX2xldmVsfGxpbWl0X3JlcV9zdGF0dXN8bGltaXRfcmVxX3pvbmV8YWNjZXNzX2xvZ3xsb2dfZm9ybWF0fG9wZW5fbG9nX2ZpbGVfY2FjaGV8bWFwX2hhc2hfYnVja2V0X3NpemV8bWFwX2hhc2hfbWF4X3NpemV8bWVtY2FjaGVkX2JpbmR8bWVtY2FjaGVkX2J1ZmZlcl9zaXplfG1lbWNhY2hlZF9jb25uZWN0X3RpbWVvdXR8bWVtY2FjaGVkX2ZvcmNlX3Jhbmdlc3xtZW1jYWNoZWRfZ3ppcF9mbGFnfG1lbWNhY2hlZF9uZXh0X3Vwc3RyZWFtfG1lbWNhY2hlZF9uZXh0X3Vwc3RyZWFtX3RpbWVvdXR8bWVtY2FjaGVkX25leHRfdXBzdHJlYW1fdHJpZXN8bWVtY2FjaGVkX3Bhc3N8bWVtY2FjaGVkX3JlYWRfdGltZW91dHxtZW1jYWNoZWRfc2VuZF90aW1lb3V0fG1lbWNhY2hlZF9zb2NrZXRfa2VlcGFsaXZlfG1pcnJvcnxtaXJyb3JfcmVxdWVzdF9ib2R5fG1wNHxtcDRfYnVmZmVyX3NpemV8bXA0X21heF9idWZmZXJfc2l6ZXxtcDRfbGltaXRfcmF0ZXxtcDRfbGltaXRfcmF0ZV9hZnRlcnxwZXJsX21vZHVsZXN8cGVybF9yZXF1aXJlfHBlcmxfc2V0fHByb3h5X2JpbmR8cHJveHlfYnVmZmVyX3NpemV8cHJveHlfYnVmZmVyaW5nfHByb3h5X2J1ZmZlcnN8cHJveHlfYnVzeV9idWZmZXJzX3NpemV8cHJveHlfY2FjaGV8cHJveHlfY2FjaGVfYmFja2dyb3VuZF91cGRhdGV8cHJveHlfY2FjaGVfYnlwYXNzfHByb3h5X2NhY2hlX2NvbnZlcnRfaGVhZHxwcm94eV9jYWNoZV9rZXl8cHJveHlfY2FjaGVfbG9ja3xwcm94eV9jYWNoZV9sb2NrX2FnZXxwcm94eV9jYWNoZV9sb2NrX3RpbWVvdXR8cHJveHlfY2FjaGVfbWF4X3JhbmdlX29mZnNldHxwcm94eV9jYWNoZV9tZXRob2RzfHByb3h5X2NhY2hlX21pbl91c2VzfHByb3h5X2NhY2hlX3BhdGh8cHJveHlfY2FjaGVfcHVyZ2V8cHJveHlfY2FjaGVfcmV2YWxpZGF0ZXxwcm94eV9jYWNoZV91c2Vfc3RhbGV8cHJveHlfY2FjaGVfdmFsaWR8cHJveHlfY29ubmVjdF90aW1lb3V0fHByb3h5X2Nvb2tpZV9kb21haW58cHJveHlfY29va2llX3BhdGh8cHJveHlfZm9yY2VfcmFuZ2VzfHByb3h5X2hlYWRlcnNfaGFzaF9idWNrZXRfc2l6ZXxwcm94eV9oZWFkZXJzX2hhc2hfbWF4X3NpemV8cHJveHlfaGlkZV9oZWFkZXJ8cHJveHlfaHR0cF92ZXJzaW9ufHByb3h5X2lnbm9yZV9jbGllbnRfYWJvcnR8cHJveHlfaWdub3JlX2hlYWRlcnN8cHJveHlfaW50ZXJjZXB0X2Vycm9yc3xwcm94eV9saW1pdF9yYXRlfHByb3h5X21heF90ZW1wX2ZpbGVfc2l6ZXxwcm94eV9tZXRob2R8cHJveHlfbmV4dF91cHN0cmVhbXxwcm94eV9uZXh0X3Vwc3RyZWFtX3RpbWVvdXR8cHJveHlfbmV4dF91cHN0cmVhbV90cmllc3xwcm94eV9ub19jYWNoZXxwcm94eV9wYXNzfHByb3h5X3Bhc3NfaGVhZGVyfHByb3h5X3Bhc3NfcmVxdWVzdF9ib2R5fHByb3h5X3Bhc3NfcmVxdWVzdF9oZWFkZXJzfHByb3h5X3JlYWRfdGltZW91dHxwcm94eV9yZWRpcmVjdHxwcm94eV9zZW5kX2xvd2F0fHByb3h5X3NlbmRfdGltZW91dHxwcm94eV9zZXRfYm9keXxwcm94eV9zZXRfaGVhZGVyfHByb3h5X3NvY2tldF9rZWVwYWxpdmV8cHJveHlfc3NsX2NlcnRpZmljYXRlfHByb3h5X3NzbF9jZXJ0aWZpY2F0ZV9rZXl8cHJveHlfc3NsX2NpcGhlcnN8cHJveHlfc3NsX2NybHxwcm94eV9zc2xfbmFtZXxwcm94eV9zc2xfcGFzc3dvcmRfZmlsZXxwcm94eV9zc2xfcHJvdG9jb2xzfHByb3h5X3NzbF9zZXJ2ZXJfbmFtZXxwcm94eV9zc2xfc2Vzc2lvbl9yZXVzZXxwcm94eV9zc2xfdHJ1c3RlZF9jZXJ0aWZpY2F0ZXxwcm94eV9zc2xfdmVyaWZ5fHByb3h5X3NzbF92ZXJpZnlfZGVwdGh8cHJveHlfc3RvcmV8cHJveHlfc3RvcmVfYWNjZXNzfHByb3h5X3RlbXBfZmlsZV93cml0ZV9zaXplfHByb3h5X3RlbXBfcGF0aHxyYW5kb21faW5kZXh8c2V0X3JlYWxfaXBfZnJvbXxyZWFsX2lwX2hlYWRlcnxyZWFsX2lwX3JlY3Vyc2l2ZXxyZWZlcmVyX2hhc2hfYnVja2V0X3NpemV8cmVmZXJlcl9oYXNoX21heF9zaXplfHZhbGlkX3JlZmVyZXJzfGJyZWFrfHJldHVybnxyZXdyaXRlX2xvZ3xzZXR8dW5pbml0aWFsaXplZF92YXJpYWJsZV93YXJufHNjZ2lfYmluZHxzY2dpX2J1ZmZlcl9zaXplfHNjZ2lfYnVmZmVyaW5nfHNjZ2lfYnVmZmVyc3xzY2dpX2J1c3lfYnVmZmVyc19zaXplfHNjZ2lfY2FjaGV8c2NnaV9jYWNoZV9iYWNrZ3JvdW5kX3VwZGF0ZXxzY2dpX2NhY2hlX2tleXxzY2dpX2NhY2hlX2xvY2t8c2NnaV9jYWNoZV9sb2NrX2FnZXxzY2dpX2NhY2hlX2xvY2tfdGltZW91dHxzY2dpX2NhY2hlX21heF9yYW5nZV9vZmZzZXR8c2NnaV9jYWNoZV9tZXRob2RzfHNjZ2lfY2FjaGVfbWluX3VzZXN8c2NnaV9jYWNoZV9wYXRofHNjZ2lfY2FjaGVfcHVyZ2V8c2NnaV9jYWNoZV9yZXZhbGlkYXRlfHNjZ2lfY2FjaGVfdXNlX3N0YWxlfHNjZ2lfY2FjaGVfdmFsaWR8c2NnaV9jb25uZWN0X3RpbWVvdXR8c2NnaV9mb3JjZV9yYW5nZXN8c2NnaV9oaWRlX2hlYWRlcnxzY2dpX2lnbm9yZV9jbGllbnRfYWJvcnR8c2NnaV9pZ25vcmVfaGVhZGVyc3xzY2dpX2ludGVyY2VwdF9lcnJvcnN8c2NnaV9saW1pdF9yYXRlfHNjZ2lfbWF4X3RlbXBfZmlsZV9zaXplfHNjZ2lfbmV4dF91cHN0cmVhbXxzY2dpX25leHRfdXBzdHJlYW1fdGltZW91dHxzY2dpX25leHRfdXBzdHJlYW1fdHJpZXN8c2NnaV9ub19jYWNoZXxzY2dpX3BhcmFtfHNjZ2lfcGFzc3xzY2dpX3Bhc3NfaGVhZGVyfHNjZ2lfcGFzc19yZXF1ZXN0X2JvZHl8c2NnaV9wYXNzX3JlcXVlc3RfaGVhZGVyc3xzY2dpX3JlYWRfdGltZW91dHxzY2dpX3JlcXVlc3RfYnVmZmVyaW5nfHNjZ2lfc2VuZF90aW1lb3V0fHNjZ2lfc29ja2V0X2tlZXBhbGl2ZXxzY2dpX3N0b3JlfHNjZ2lfc3RvcmVfYWNjZXNzfHNjZ2lfdGVtcF9maWxlX3dyaXRlX3NpemV8c2NnaV90ZW1wX3BhdGh8c2VjdXJlX2xpbmt8c2VjdXJlX2xpbmtfbWQ1fHNlY3VyZV9saW5rX3NlY3JldHxzZXNzaW9uX2xvZ3xzZXNzaW9uX2xvZ19mb3JtYXR8c2Vzc2lvbl9sb2dfem9uZXxzbGljZXxzcGR5X2NodW5rX3NpemV8c3BkeV9oZWFkZXJzX2NvbXB8c3NpfHNzaV9sYXN0X21vZGlmaWVkfHNzaV9taW5fZmlsZV9jaHVua3xzc2lfc2lsZW50X2Vycm9yc3xzc2lfdHlwZXN8c3NpX3ZhbHVlX2xlbmd0aHxzc2x8c3NsX2J1ZmZlcl9zaXplfHNzbF9jZXJ0aWZpY2F0ZXxzc2xfY2VydGlmaWNhdGVfa2V5fHNzbF9jaXBoZXJzfHNzbF9jbGllbnRfY2VydGlmaWNhdGV8c3NsX2NybHxzc2xfZGhwYXJhbXxzc2xfZWFybHlfZGF0YXxzc2xfZWNkaF9jdXJ2ZXxzc2xfcGFzc3dvcmRfZmlsZXxzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzfHNzbF9wcm90b2NvbHN8c3NsX3Nlc3Npb25fY2FjaGV8c3NsX3Nlc3Npb25fdGlja2V0X2tleXxzc2xfc2Vzc2lvbl90aWNrZXRzfHNzbF9zZXNzaW9uX3RpbWVvdXR8c3NsX3N0YXBsaW5nfHNzbF9zdGFwbGluZ19maWxlfHNzbF9zdGFwbGluZ19yZXNwb25kZXJ8c3NsX3N0YXBsaW5nX3ZlcmlmeXxzc2xfdHJ1c3RlZF9jZXJ0aWZpY2F0ZXxzc2xfdmVyaWZ5X2NsaWVudHxzc2xfdmVyaWZ5X2RlcHRofHN0YXR1c3xzdGF0dXNfZm9ybWF0fHN0YXR1c196b25lfHN0dWJfc3RhdHVzfHN1Yl9maWx0ZXJ8c3ViX2ZpbHRlcl9sYXN0X21vZGlmaWVkfHN1Yl9maWx0ZXJfb25jZXxzdWJfZmlsdGVyX3R5cGVzfHNlcnZlcnx6b25lfHN0YXRlfGhhc2h8aXBfaGFzaHxrZWVwYWxpdmV8a2VlcGFsaXZlX3JlcXVlc3RzfGtlZXBhbGl2ZV90aW1lb3V0fG50bG18bGVhc3RfY29ubnxsZWFzdF90aW1lfHF1ZXVlfHJhbmRvbXxzdGlja3l8c3RpY2t5X2Nvb2tpZV9pbnNlcnR8dXBzdHJlYW1fY29uZnxoZWFsdGhfY2hlY2t8dXNlcmlkfHVzZXJpZF9kb21haW58dXNlcmlkX2V4cGlyZXN8dXNlcmlkX21hcmt8dXNlcmlkX25hbWV8dXNlcmlkX3AzcHx1c2VyaWRfcGF0aHx1c2VyaWRfc2VydmljZXx1d3NnaV9iaW5kfHV3c2dpX2J1ZmZlcl9zaXplfHV3c2dpX2J1ZmZlcmluZ3x1d3NnaV9idWZmZXJzfHV3c2dpX2J1c3lfYnVmZmVyc19zaXplfHV3c2dpX2NhY2hlfHV3c2dpX2NhY2hlX2JhY2tncm91bmRfdXBkYXRlfHV3c2dpX2NhY2hlX2J5cGFzc3x1d3NnaV9jYWNoZV9rZXl8dXdzZ2lfY2FjaGVfbG9ja3x1d3NnaV9jYWNoZV9sb2NrX2FnZXx1d3NnaV9jYWNoZV9sb2NrX3RpbWVvdXR8dXdzZ2lfY2FjaGVfbWF4X3JhbmdlX29mZnNldHx1d3NnaV9jYWNoZV9tZXRob2RzfHV3c2dpX2NhY2hlX21pbl91c2VzfHV3c2dpX2NhY2hlX3BhdGh8dXdzZ2lfY2FjaGVfcHVyZ2V8dXdzZ2lfY2FjaGVfcmV2YWxpZGF0ZXx1d3NnaV9jYWNoZV91c2Vfc3RhbGV8dXdzZ2lfY2FjaGVfdmFsaWR8dXdzZ2lfY29ubmVjdF90aW1lb3V0fHV3c2dpX2ZvcmNlX3Jhbmdlc3x1d3NnaV9oaWRlX2hlYWRlcnx1d3NnaV9pZ25vcmVfY2xpZW50X2Fib3J0fHV3c2dpX2lnbm9yZV9oZWFkZXJzfHV3c2dpX2ludGVyY2VwdF9lcnJvcnN8dXdzZ2lfbGltaXRfcmF0ZXx1d3NnaV9tYXhfdGVtcF9maWxlX3NpemV8dXdzZ2lfbW9kaWZpZXIxfHV3c2dpX21vZGlmaWVyMnx1d3NnaV9uZXh0X3Vwc3RyZWFtfHV3c2dpX25leHRfdXBzdHJlYW1fdGltZW91dHx1d3NnaV9uZXh0X3Vwc3RyZWFtX3RyaWVzfHV3c2dpX25vX2NhY2hlfHV3c2dpX3BhcmFtfHV3c2dpX3Bhc3N8dXdzZ2lfcGFzc19oZWFkZXJ8dXdzZ2lfcGFzc19yZXF1ZXN0X2JvZHl8dXdzZ2lfcGFzc19yZXF1ZXN0X2hlYWRlcnN8dXdzZ2lfcmVhZF90aW1lb3V0fHV3c2dpX3JlcXVlc3RfYnVmZmVyaW5nfHV3c2dpX3NlbmRfdGltZW91dHx1d3NnaV9zb2NrZXRfa2VlcGFsaXZlfHV3c2dpX3NzbF9jZXJ0aWZpY2F0ZXx1d3NnaV9zc2xfY2VydGlmaWNhdGVfa2V5fHV3c2dpX3NzbF9jaXBoZXJzfHV3c2dpX3NzbF9jcmx8dXdzZ2lfc3NsX25hbWV8dXdzZ2lfc3NsX3Bhc3N3b3JkX2ZpbGV8dXdzZ2lfc3NsX3Byb3RvY29sc3x1d3NnaV9zc2xfc2VydmVyX25hbWV8dXdzZ2lfc3NsX3Nlc3Npb25fcmV1c2V8dXdzZ2lfc3NsX3RydXN0ZWRfY2VydGlmaWNhdGV8dXdzZ2lfc3NsX3ZlcmlmeXx1d3NnaV9zc2xfdmVyaWZ5X2RlcHRofHV3c2dpX3N0b3JlfHV3c2dpX3N0b3JlX2FjY2Vzc3x1d3NnaV90ZW1wX2ZpbGVfd3JpdGVfc2l6ZXx1d3NnaV90ZW1wX3BhdGh8aHR0cDJfYm9keV9wcmVyZWFkX3NpemV8aHR0cDJfY2h1bmtfc2l6ZXxodHRwMl9pZGxlX3RpbWVvdXR8aHR0cDJfbWF4X2NvbmN1cnJlbnRfcHVzaGVzfGh0dHAyX21heF9jb25jdXJyZW50X3N0cmVhbXN8aHR0cDJfbWF4X2ZpZWxkX3NpemV8aHR0cDJfbWF4X2hlYWRlcl9zaXplfGh0dHAyX21heF9yZXF1ZXN0c3xodHRwMl9wdXNofGh0dHAyX3B1c2hfcHJlbG9hZHxodHRwMl9yZWN2X2J1ZmZlcl9zaXplfGh0dHAyX3JlY3ZfdGltZW91dHx4bWxfZW50aXRpZXN8eHNsdF9sYXN0X21vZGlmaWVkfHhzbHRfcGFyYW18eHNsdF9zdHJpbmdfcGFyYW18eHNsdF9zdHlsZXNoZWV0fHhzbHRfdHlwZXN8bGlzdGVufHByb3RvY29sfHJlc29sdmVyfHJlc29sdmVyX3RpbWVvdXR8dGltZW91dHxhdXRoX2h0dHB8YXV0aF9odHRwX2hlYWRlcnxhdXRoX2h0dHBfcGFzc19jbGllbnRfY2VydHxhdXRoX2h0dHBfdGltZW91dHxwcm94eV9idWZmZXJ8cHJveHlfcGFzc19lcnJvcl9tZXNzYWdlfHByb3h5X3RpbWVvdXR8eGNsaWVudHxzdGFydHRsc3xpbWFwX2F1dGh8aW1hcF9jYXBhYmlsaXRpZXN8aW1hcF9jbGllbnRfYnVmZmVyfHBvcDNfYXV0aHxwb3AzX2NhcGFiaWxpdGllc3xzbXRwX2F1dGh8c210cF9jYXBhYmlsaXRpZXN8c210cF9jbGllbnRfYnVmZmVyfHNtdHBfZ3JlZXRpbmdfZGVsYXl8cHJlcmVhZF9idWZmZXJfc2l6ZXxwcmVyZWFkX3RpbWVvdXR8cHJveHlfcHJvdG9jb2xfdGltZW91dHxqc19hY2Nlc3N8anNfZmlsdGVyfGpzX3ByZXJlYWR8cHJveHlfZG93bmxvYWRfcmF0ZXxwcm94eV9yZXF1ZXN0c3xwcm94eV9yZXNwb25zZXN8cHJveHlfdXBsb2FkX3JhdGV8c3NsX2hhbmRzaGFrZV90aW1lb3V0fHNzbF9wcmVyZWFkfGhlYWx0aF9jaGVja190aW1lb3V0fHpvbmVfc3luY3x6b25lX3N5bmNfYnVmZmVyc3x6b25lX3N5bmNfY29ubmVjdF9yZXRyeV9pbnRlcnZhbHx6b25lX3N5bmNfY29ubmVjdF90aW1lb3V0fHpvbmVfc3luY19pbnRlcnZhbHx6b25lX3N5bmNfcmVjdl9idWZmZXJfc2l6ZXx6b25lX3N5bmNfc2VydmVyfHpvbmVfc3luY19zc2x8em9uZV9zeW5jX3NzbF9jZXJ0aWZpY2F0ZXx6b25lX3N5bmNfc3NsX2NlcnRpZmljYXRlX2tleXx6b25lX3N5bmNfc3NsX2NpcGhlcnN8em9uZV9zeW5jX3NzbF9jcmx8em9uZV9zeW5jX3NzbF9uYW1lfHpvbmVfc3luY19zc2xfcGFzc3dvcmRfZmlsZXx6b25lX3N5bmNfc3NsX3Byb3RvY29sc3x6b25lX3N5bmNfc3NsX3NlcnZlcl9uYW1lfHpvbmVfc3luY19zc2xfdHJ1c3RlZF9jZXJ0aWZpY2F0ZXx6b25lX3N5bmNfc3NsX3ZlcmlmeV9kZXB0aHx6b25lX3N5bmNfdGltZW91dHxnb29nbGVfcGVyZnRvb2xzX3Byb2ZpbGVzfHByb3h5fHBlcmwiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFt7CiAgICAgICAgICAgIHRva2VuOiBbInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInN0cmluZy5yZWdleHAiLCAicGFyZW4ubHBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKGxvY2F0aW9uKShcXHMrKShbXFxeXT9+W1xcKl0/XFxzKy4qPykoeykiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWyJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICByZWdleDogIlxcYihsb2NhdGlvbnxtYXRjaHx1cHN0cmVhbSkoXFxzKykoLio/KSh7KSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInN0cmluZyIsICJ0ZXh0IiwgInZhcmlhYmxlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4OiAnXFxiKHNwbGl0X2NsaWVudHN8bWFwKShcXHMrKShcXCIuKlxcIikoXFxzKykoXFwkW1xcd19dKykoXFxzKikoeyknCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWyJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXg6ICJcXGIoaHR0cHxldmVudHN8c2VydmVyfG1haWx8c3RyZWFtKShcXHMqKSh7KSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInZhcmlhYmxlIiwgInRleHQiLCAidmFyaWFibGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXg6ICdcXGIoZ2VvfG1hcCkoXFxzKykoXFwkW1xcd19dKyk/KFxccyopKFxcJFtcXHdfXSspKFxccyopKHspJwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIih9KSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICIoeykiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWyJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXg6ICJcXGIoaWYpKFxccyspKFxcKCkiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXCl8JCIsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAibGV4aWNhbCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKCIgKyBrZXl3b3JkcyArICIpXFxiIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJsZXhpY2FsIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZCIsICJ0ZXh0IiwgInN0cmluZy5yZWdleHAiLCAidGV4dCIsICJwdW5jdHVhdGlvbiJdLAogICAgICAgICAgICByZWdleDogIlxcYihyZXdyaXRlKShcXHMpKFxcUyopKFxccy4qKSg7KSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJsZXhpY2FsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImNvbW1lbnRzIgogICAgICAgIH1dLAogICAgICAgIGNvbW1lbnRzOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleDogJyMuKiQnCiAgICAgICAgfV0sCiAgICAgICAgbGV4aWNhbDogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIiciLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXg6ICInIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ2YXJpYWJsZXMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAidmFyaWFibGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICByZWdleDogL1shXT9bfl1bKl0/XHMrLiooPz1cKSkvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICByZWdleDogL1tcXl1cUyooPz07JCkvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICByZWdleDogL1tcXl1cUyooPz07fFxzfCQpLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6ICJcXEIoXFwrfFxcLXxcXCp8XFw9fCE9KVxcQiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogIlxcYih0cnVlfGZhbHNlfG9ufG9mZnxhbGx8YW55fG1haW58YWx3YXlzKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ2YXJpYWJsZXMiCiAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgdmFyaWFibGVzOiBbewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXCRbXFx3X10rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKEdFVHxQT1NUfEhFQUQpXFxiIgogICAgICAgIH1dCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCm9vcC5pbmhlcml0cyhOZ2lueEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5OZ2lueEhpZ2hsaWdodFJ1bGVzID0gTmdpbnhIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9uZ2lueCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL25naW54X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIE5naW54SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL25naW54X2hpZ2hsaWdodF9ydWxlcyIpLk5naW54SGlnaGxpZ2h0UnVsZXM7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24gKCkgewogICAgVGV4dE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBOZ2lueEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKCihmdW5jdGlvbiAoKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbmdpbngiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9uZ2lueCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-nim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9uaW1faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgTmltSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbiAoKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZSI6ICJ2YXJ8bGV0fGNvbnN0IiwKICAgICAgICAia2V5d29yZCI6ICJhc3NlcnR8cGFyYWxsZWx8c3Bhd258ZXhwb3J0fGluY2x1ZGV8ZnJvbXx0ZW1wbGF0ZXxtaXhpbnxiaW5kfGltcG9ydHxjb25jZXB0fHJhaXNlfGRlZmVyfHRyeXxmaW5hbGx5fGV4Y2VwdHxjb252ZXJ0ZXJ8cHJvY3xmdW5jfG1hY3JvfG1ldGhvZHxhbmR8b3J8bm90fHhvcnxzaGx8c2hyfGRpdnxtb2R8aW58bm90aW58aXN8aXNub3R8b2Z8c3RhdGljfGlmfGVsaWZ8ZWxzZXxjYXNlfG9mfGRpc2NhcmR8d2hlbnxyZXR1cm58eWllbGR8YmxvY2t8YnJlYWt8d2hpbGV8ZWNob3xjb250aW51ZXxhc218dXNpbmd8Y2FzdHxhZGRyfHVuc2FmZUFkZHJ8dHlwZXxyZWZ8cHRyfGRvfGRlY2xhcmVkfGRlZmluZWR8ZGVmaW5lZEluU2NvcGV8Y29tcGlsZXN8c2l6ZU9mfGlzfHNoYWxsb3dDb3B5fGdldEFzdHxhc3RUb1N0cnxzcGF3bnxwcm9jQ2FsbHxmb3J8aXRlcmF0b3J8YXMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOiAibmV3U2VxfGludHxpbnQ4fGludDE2fGludDMyfGludDY0fHVpbnR8dWludDh8dWludDE2fHVpbnQzMnx1aW50NjR8ZmxvYXR8Y2hhcnxib29sfHN0cmluZ3xzZXR8cG9pbnRlcnxmbG9hdDMyfGZsb2F0NjR8ZW51bXxvYmplY3R8Y3N0cmluZ3xhcnJheXxzZXF8b3BlbkFycmF5fHZhcmFyZ3N8VW5jaGVja2VkQXJyYXl8dHVwbGV8c2V0fGRpc3RpbmN0fHZvaWR8YXV0b3xvcGVuYXJyYXl8cmFuZ2UiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogImxvY2t8emV8dG9VOHx0b1UxNnx0b1UzMnxvcmR8bG93fGxlbnxoaWdofGFkZHxwb3B8Y29udGFpbnN8Y2FyZHxpbmNsfGV4Y2x8ZGVhbGxvY3xpbmMiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6ICJuaWx8dHJ1ZXxmYWxzZSIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGhleE51bWJlciA9ICIoPzowW3hYXVtcXGRBLUZhLWZdW1xcZEEtRmEtZl9dKikiOwogICAgdmFyIGRlY051bWJlciA9ICIoPzpbMC05XVtcXGRfXSopIjsKICAgIHZhciBvY3ROdW1iZXIgPSAiKD86MG9bMC03XVswLTdfXSopIjsKICAgIHZhciBiaW5OdW1iZXIgPSAiKD86MFtiQl1bMDFdWzAxX10qKSI7CiAgICB2YXIgaW50TnVtYmVyID0gIig/OiIgKyBoZXhOdW1iZXIgKyAifCIgKyBkZWNOdW1iZXIgKyAifCIgKyBvY3ROdW1iZXIgKyAifCIgKyBiaW5OdW1iZXIgKyAiKSg/Oic/W2lJdVVdKD86OHwxNnwzMnw2NCl8dSk/XFxiIjsKICAgIHZhciBleHBvbmVudCA9ICIoPzpbZUVdWystXT9bXFxkXVtcXGRfXSopIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzpbXFxkXVtcXGRfXSooPzpbLl1bXFxkXSg/OltcXGRfXSopIiArIGV4cG9uZW50ICsgIj8pfCIgKyBleHBvbmVudCArICIpIjsKICAgIHZhciBmbG9hdE51bWJlckV4dCA9ICIoPzoiICsgaGV4TnVtYmVyICsgIig/OicoPzooPzpbZkZdKD86MzJ8NjQpPyl8W2REXSkpKXwoPzoiICsgZmxvYXROdW1iZXIgKyAifCIgKyBkZWNOdW1iZXIgKyAifCIgKyBvY3ROdW1iZXIgKyAifCIgKyBiaW5OdW1iZXIgKyAiKSg/OicoPzooPzpbZkZdKD86MzJ8NjQpPyl8W2REXSkpIjsKICAgIHZhciBzdHJpbmdFc2NhcGUgPSAiXFxcXChbYWJlcHJjbmxmdHZcXFwiJ118eFswLTlBLUZhLWZdezJ9fFswLTJdWzAtOV17Mn18dVswLTlBLUZhLWZdezh9fHVbMC05QS1GYS1mXXs0fSkiOwogICAgdmFyIGlkZW50aWZpZXIgPSAnW2EtekEtWl1bYS16QS1aMC05X10qJzsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFt7CiAgICAgICAgICAgIHRva2VuOiBbImlkZW50aWZpZXIiLCAia2V5d29yZC5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKCIgKyBpZGVudGlmaWVyICsgIikoWy5dezF9KSgiICsgaWRlbnRpZmllciArICIpKD89XFwoKSIKICAgICAgICB9LCB7Ly9wcmFnbWFzCiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICIoXFx7XFwuKSIsCiAgICAgICAgICAgIG5leHQ6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleDogJyhcXC5cXH18XFx9KScsCiAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJtZXRob2RzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXg6IGlkZW50aWZpZXIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleDogL1ssXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvWz06Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvW1soXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXg6IC9bXF0pXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIm1hdGgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmdzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJ0ZXh0IgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmRvYy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4OiAvIyNcWyg/IV0pLywKICAgICAgICAgICAgcHVzaDogImRvY0Jsb2NrQ29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4OiAvI1xbKD8hXSkvLAogICAgICAgICAgICBwdXNoOiAiYmxvY2tDb21tZW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmRvYyIsCiAgICAgICAgICAgIHJlZ2V4OiAnIyMuKiQnCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleDogJyMuKiQnCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5ncyIKICAgICAgICB9LCB7Ly8gY2hhcmFjdGVyCiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInKD86XFxcXCg/OlthYmVyY25sZnR2XXx4WzAtOUEtRmEtZl17Mn18WzAtMl1bMC05XXsyfXx1WzAtOUEtRmEtZl17OH18dVswLTlBLUZhLWZdezR9KXwuezF9KT8nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIm1ldGhvZHMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXg6ICJbYS16QS1aXVthLXpBLVowLTlfXSpcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLCAic3RvcmFnZS50eXBlIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKFs6XSkoXFxzKykoIiArIGlkZW50aWZpZXIgKyAiKSg/PSR8XFwpfFxcW3wsfFxccys9fDt8XFxzK1xceykiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFtcLnx7XHx8XChcLnxcWzp8W1soe2BdLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogL1wuXCl8XHx9fFwuXXxbXF0pfV0vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogL1s9K1wtKlwvPD5AJH4mJXwhP14uOlxcXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogL1ssO10vCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAibWF0aCIKICAgICAgICB9XSwKICAgICAgICBibG9ja0NvbW1lbnQ6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAvI1xbXS8sCiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAvI1xbKD8hXSkvLAogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuc3RhcnQiLAogICAgICAgICAgICBwdXNoOiAiYmxvY2tDb21tZW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXg6IC9dIy8sCiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5lbmQiLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudCIKICAgICAgICB9XSwKICAgICAgICBkb2NCbG9ja0NvbW1lbnQ6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAvIyNcW10vLAogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuZG9jIgogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXg6IC8jI1xbKD8hXSkvLAogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuZG9jLnN0YXJ0IiwKICAgICAgICAgICAgcHVzaDogImRvY0Jsb2NrQ29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4OiAvXSMjLywKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmRvYy5lbmQiLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5kb2MiCiAgICAgICAgfV0sCiAgICAgICAgbWF0aDogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5mbG9hdCIsCiAgICAgICAgICAgIHJlZ2V4OiBmbG9hdE51bWJlckV4dAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5mbG9hdCIsCiAgICAgICAgICAgIHJlZ2V4OiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5pbnRlZ2VyIiwKICAgICAgICAgICAgcmVnZXg6IGludE51bWJlcgogICAgICAgIH1dLAogICAgICAgIG1ldGhvZHM6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiKFxcdyspKD89XFwoKSIKICAgICAgICB9XSwKICAgICAgICBzdHJpbmdzOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnKFxcYicgKyBpZGVudGlmaWVyICsgJyk/IiIiJywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIiIiJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXGIiICsgaWRlbnRpZmllciArICciKD89LiknLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXg6ICcifCQnLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXg6ICcifCQnLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0KICAgIH07CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKb29wLmluaGVyaXRzKE5pbUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5OaW1IaWdobGlnaHRSdWxlcyA9IE5pbUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL25pbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL25pbV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBOaW1IaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbmltX2hpZ2hsaWdodF9ydWxlcyIpLk5pbUhpZ2hsaWdodFJ1bGVzOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uICgpIHsKICAgIFRleHRNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTmltSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKCm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgoKKGZ1bmN0aW9uICgpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiI1siLCBlbmQ6ICJdIyIsIG5lc3RhYmxlOiB0cnVlfTsKCgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbmltIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvbmltIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-nix.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY0Z1bmN0aW9ucyA9IGV4cG9ydHMuY0Z1bmN0aW9ucyA9ICJcXGIoPzpoeXBvdCg/OmZ8bCk/fHMoPzpzY2FuZnx5c3RlbXxucHJpbnRmfGNhKD86bmZ8bGIoPzpuKD86ZnxsKT98bG4oPzpmfGwpPykpfGkoPzpuKD86aCg/OmZ8bCk/fGZ8bCk/fGduKD86YWx8Yml0KSl8dHIoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT8pfGVycm9yfHBicmt8ZnRpbWV8bGVufHJjaHJ8eGZybSl8cHJpbnRmfGV0KD86am1wfHZidWZ8bG9jYWxlfGJ1Zil8cXJ0KD86ZnxsKT98dyg/OnNjYW5mfHByaW50Zil8cmFuZCl8big/OmUoPzphcmJ5aW50KD86ZnxsKT98eHQoPzp0b3dhcmQoPzpmfGwpP3xhZnRlcig/OmZ8bCk/KSl8YW4oPzpmfGwpPyl8Yyg/OnMoPzppbig/OmgoPzpmfGwpP3xmfGwpP3xxcnQoPzpmfGwpPyl8Y29zKD86aCg/OmYpP3xmfGwpP3xpbWFnKD86ZnxsKT98dCg/OmltZXxhbig/OmgoPzpmfGwpP3xmfGwpPyl8byg/OnMoPzpoKD86ZnxsKT98ZnxsKT98bmooPzpmfGwpP3xweXNpZ24oPzpmfGwpPyl8cCg/Om93KD86ZnxsKT98cm9qKD86ZnxsKT8pfGUoPzppbCg/OmZ8bCk/fHhwKD86ZnxsKT8pfGwoPzpvKD86Y2t8Zyg/OmZ8bCk/KXxlYXJlcnIpfGEoPzpzaW4oPzpoKD86ZnxsKT98ZnxsKT98Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHRhbig/OmgoPzpmfGwpP3xmfGwpP3xsbG9jfHJnKD86ZnxsKT98YnMoPzpmfGwpPyl8cmVhbCg/OmZ8bCk/fGJydCg/OmZ8bCk/KXx0KD86aW1lfG8oPzp1cHBlcnxsb3dlcil8YW4oPzpoKD86ZnxsKT98ZnxsKT98cnVuYyg/OmZ8bCk/fGdhbW1hKD86ZnxsKT98bXAoPzpuYW18ZmlsZSkpfGkoPzpzKD86c3BhY2V8big/Om9ybWFsfGFuKXxjbnRybHxpbmZ8ZGlnaXR8dSg/Om5vcmRlcmVkfHBwZXIpfHAoPzp1bmN0fHJpbnQpfGZpbml0ZXx3KD86c3BhY2V8Yyg/Om50cmx8dHlwZSl8ZGlnaXR8dXBwZXJ8cCg/OnVuY3R8cmludCl8bG93ZXJ8YWwoPzpudW18cGhhKXxncmFwaHx4ZGlnaXR8YmxhbmspfGwoPzpvd2VyfGVzcyg/OmVxdWFsfGdyZWF0ZXIpPyl8YWwoPzpudW18cGhhKXxncig/OmVhdGVyKD86ZXF1YWwpP3xhcGgpfHhkaWdpdHxibGFuayl8bG9nYig/OmZ8bCk/fG1heCg/OmRpdnxhYnMpKXxkaSg/OnZ8ZmZ0aW1lKXxfRXhpdHx1bmdldCg/OmN8d2MpfHAoPzpvdyg/OmZ8bCk/fHV0KD86c3xjKD86aGFyKT98d2MoPzpoYXIpPyl8ZXJyb3J8cmludGYpfGUoPzpyZig/OmMoPzpmfGwpP3xmfGwpP3x4KD86aXR8cCg/OjIoPzpmfGwpP3xmfGx8bTEoPzpmfGwpPyk/KSl8dig/OnMoPzpzY2FuZnxucHJpbnRmfGNhbmZ8cHJpbnRmfHcoPzpzY2FuZnxwcmludGYpKXxwcmludGZ8Zig/OnNjYW5mfHByaW50Znx3KD86c2NhbmZ8cHJpbnRmKSl8dyg/OnNjYW5mfHByaW50Zil8YV8oPzpzdGFydHxjb3B5fGVuZHxhcmcpKXxxc29ydHxmKD86cyg/OmNhbmZ8ZSg/OnRwb3N8ZWspKXxjbG9zZXx0ZWxsfG9wZW58ZGltKD86ZnxsKT98cCg/OmNsYXNzaWZ5fHV0KD86c3xjfHcoPzpzfGMpKXxyaW50Zil8ZSg/OmhvbGRleGNlcHR8c2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpfGNsZWFyZXhjZXB0fHRlc3RleGNlcHR8b2Z8dXBkYXRlZW52fHIoPzphaXNlZXhjZXB0fHJvcil8Z2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpKXxmbHVzaHx3KD86c2NhbmZ8aWRlfHByaW50ZnxyaXRlKXxsb29yKD86ZnxsKT98YWJzKD86ZnxsKT98Z2V0KD86c3xjfHBvc3x3KD86c3xjKSl8cmUoPzpvcGVufGV8YWR8eHAoPzpmfGwpPyl8bSg/OmluKD86ZnxsKT98b2QoPzpmfGwpP3xhKD86ZnxsfHgoPzpmfGwpPyk/KSl8bCg/OmQoPzppdnxleHAoPzpmfGwpPyl8byg/Om5nam1wfGNhbCg/OnRpbWV8ZWNvbnYpfGcoPzoxKD86cCg/OmZ8bCk/fDAoPzpmfGwpPyl8Mig/OmZ8bCk/fGZ8bHxiKD86ZnxsKT8pPyl8YWJzfGwoPzpkaXZ8YWJzfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT8pKXxyKD86aW50KD86ZnxsKT98b3VuZCg/OmZ8bCk/KXxnYW1tYSg/OmZ8bCk/KXx3KD86c2NhbmZ8Yyg/OnMoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT98bWJzKXxwYnJrfGZ0aW1lfGxlbnxyKD86Y2hyfHRvbWJzKXx4ZnJtKXx0byg/OmJ8bWIpfHJ0b21iKXxwcmludGZ8bWVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSkpfGEoPzpzKD86c2VydHxjdGltZXxpbig/OmgoPzpmfGwpP3xmfGwpPyl8Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHQoPzpvKD86aXxmfGwoPzpsKT8pfGV4aXR8YW4oPzpoKD86ZnxsKT98Mig/OmZ8bCk/fGZ8bCk/KXxiKD86c3xvcnQpKXxnKD86ZXQoPzpzfGMoPzpoYXIpP3xlbnZ8d2MoPzpoYXIpPyl8bXRpbWUpfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT98ZSg/Om5hbWV8YWxsb2N8d2luZHxtKD86b3ZlfHF1byg/OmZ8bCk/fGFpbmRlcig/OmZ8bCk/KSl8YSg/Om5kfGlzZSkpfGIoPzpzZWFyY2h8dG93Yyl8bSg/Om9kZig/OmZ8bCk/fGVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSl8a3RpbWV8YWxsb2N8Yig/OnMoPzppbml0fHRvd2NzfHJ0b3djcyl8dG93Y3xsZW58cig/OnRvd2N8bGVuKSkpKVxcYiI7Cgp2YXIgY19jcHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkQ29udHJvbHMgPSAoCiAgICAgICAgImJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGZvcnxnb3RvfGlmfF9QcmFnbWF8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8b3BlcmF0b3J8dHJ5fHRocm93fHVzaW5nIgogICAgKTsKICAgIAogICAgdmFyIHN0b3JhZ2VUeXBlID0gKAogICAgICAgICJhc218X19hc21fX3xhdXRvfGJvb2x8X0Jvb2x8Y2hhcnxfQ29tcGxleHxkb3VibGV8ZW51bXxmbG9hdHwiICsKICAgICAgICAiX0ltYWdpbmFyeXxpbnR8bG9uZ3xzaG9ydHxzaWduZWR8c3RydWN0fHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHwiICsKICAgICAgICAiY2xhc3N8d2NoYXJfdHx0ZW1wbGF0ZXxjaGFyMTZfdHxjaGFyMzJfdCIKICAgICk7CgogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAoCiAgICAgICAgImNvbnN0fGV4dGVybnxyZWdpc3RlcnxyZXN0cmljdHxzdGF0aWN8dm9sYXRpbGV8aW5saW5lfHByaXZhdGV8IiArCiAgICAgICAgInByb3RlY3RlZHxwdWJsaWN8ZnJpZW5kfGV4cGxpY2l0fHZpcnR1YWx8ZXhwb3J0fG11dGFibGV8dHlwZW5hbWV8IiArCiAgICAgICAgImNvbnN0ZXhwcnxuZXd8ZGVsZXRlfGFsaWduYXN8YWxpZ25vZnxkZWNsdHlwZXxub2V4Y2VwdHx0aHJlYWRfbG9jYWwiCiAgICApOwoKICAgIHZhciBrZXl3b3JkT3BlcmF0b3JzID0gKAogICAgICAgICJhbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxjb21wbHxub3R8bm90X2VxfG9yfG9yX2VxfHR5cGVpZHx4b3J8eG9yX2VxfCIgKwogICAgICAgICJjb25zdF9jYXN0fGR5bmFtaWNfY2FzdHxyZWludGVycHJldF9jYXN0fHN0YXRpY19jYXN0fHNpemVvZnxuYW1lc3BhY2UiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJOVUxMfHRydWV8ZmFsc2V8VFJVRXxGQUxTRXxudWxscHRyIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuJGtleXdvcmRzID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6IGtleXdvcmRDb250cm9scywKICAgICAgICAic3RvcmFnZS50eXBlIiA6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiIDoga2V5d29yZE9wZXJhdG9ycywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CiAgICB2YXIgZXNjYXBlUmUgPSAvXFwoPzpbJyI/XFxhYmZucnR2XXxbMC03XXsxLDN9fHhbYS1mQS1GXGRdezJ9fHVbYS1mQS1GXGRdezR9VVthLWZBLUZcZF17OH18LikvLnNvdXJjZTsKICAgIHZhciBmb3JtYXRSZSA9ICIlIgogICAgICAgICAgKyAvKFxkK1wkKT8vLnNvdXJjZSAvLyBmaWVsZCAoYXJndW1lbnQgIykKICAgICAgICAgICsgL1sjMFwtICsnXSovLnNvdXJjZSAvLyBmbGFncwogICAgICAgICAgKyAvWyw7Ol9dPy8uc291cmNlIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXIgKEFsdGlWZWMpCiAgICAgICAgICArIC8oKC0/XGQrKXxcKigtP1xkK1wkKT8pPy8uc291cmNlIC8vIG1pbmltdW0gZmllbGQgd2lkdGgKICAgICAgICAgICsgLyhcLigoLT9cZCspfFwqKC0/XGQrXCQpPyk/KT8vLnNvdXJjZSAvLyBwcmVjaXNpb24KICAgICAgICAgICsgLyhoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpPy8uc291cmNlIC8vIGxlbmd0aCBtb2RpZmllcgogICAgICAgICAgKyAvKFxbW14iXF1dK1xdfFtkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdKS8uc291cmNlOyAvLyBjb252ZXJzaW9uIHR5cGUKCiAgICB0aGlzLiRydWxlcyA9IHsgCiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInNpbmdsZUxpbmVDb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD86IiArIGVzY2FwZVJlICsgInwuKT8nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsIAogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFzdHJpbmciLAogICAgICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmciLCByZWdleDogL1xcXHMqJC8sIG5leHQ6ICJxcXN0cmluZyIgfSwKICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVJlIH0sCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiBmb3JtYXRSZSB9LAogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmcuZW5kIiwgcmVnZXg6ICcifCQnLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnUiJcXCgnLCAKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInJhd1N0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogInN0cmluZy5lbmQiLCByZWdleDogJ1xcKSInLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdKyhMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8oTHxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86aW5jbHVkZXxpbXBvcnR8cHJhZ21hfGxpbmV8ZGVmaW5lfHVuZGVmKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBzcGVjaWFsIGNhc2UgcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiI1xccyooPzplbmRpZnxpZnxpZmRlZnxlbHNlfGVsaWZ8aWZuZGVmKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IGNGdW5jdGlvbnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PDw9fD4+PXw+Pj49fDw+fCYmfFx8XHx8XD86fFsqJVwvK1wtJlxefH4hPD49XT0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzaW5nbGVMaW5lQ29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIG5leHQgOiAic2luZ2xlTGluZUNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIubXVsdGlsaW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLipcXC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKjwuKz8+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXlxcXC9dKy8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhjX2NwcEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5jX2NwcEhpZ2hsaWdodFJ1bGVzID0gY19jcHBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NfY3BwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY19jcHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIGNfY3BwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpLmNfY3BwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IGNfY3BwSGlnaGxpZ2h0UnVsZXM7CgogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NfY3BwIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbml4X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKICAgIHZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKICAgIHZhciBOaXhIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgICAgICB2YXIgY29uc3RhbnRMYW5ndWFnZSA9ICJ0cnVlfGZhbHNlIjsKICAgICAgICB2YXIga2V5d29yZENvbnRyb2wgPSAid2l0aHxpbXBvcnR8aWZ8ZWxzZXx0aGVufGluaGVyaXQiOwogICAgICAgIHZhciBrZXl3b3JkRGVjbGFyYXRpb24gPSAibGV0fGlufHJlYyI7CgogICAgICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLm5peCI6IGNvbnN0YW50TGFuZ3VhZ2UsCiAgICAgICAgICAgICJrZXl3b3JkLmNvbnRyb2wubml4Ijoga2V5d29yZENvbnRyb2wsCiAgICAgICAgICAgICJrZXl3b3JkLmRlY2xhcmF0aW9uLm5peCI6IGtleXdvcmREZWNsYXJhdGlvbgogICAgICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgICAic3RhcnQiOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8jLiokLwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cL1wqLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAiY29tbWVudCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIjxbXj5dKz4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIoPT18IT18PD0/fD49PykiLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3BlcmF0b3IuY29tcGFyaXNvbi5uaXgiXQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiKCg/OlsrKi8lLV18XFx+KT0pIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkLm9wZXJhdG9yLmFzc2lnbm1lbnQuYXJpdGhtZXRpYy5uaXgiXQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiPSIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmFzc2lnbm1lbnQubml4IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIicnIiwKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicXFkb2MiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiJyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInFzdHJpbmciCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICAgICAgcHVzaDogInFxc3RyaW5nIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiMFt4WF1bMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgICAgICByZWdleDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW46IGZ1bmN0aW9uKHZhbCwgc3RhcnQsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1sxXSAmJiBzdGFja1sxXS5jaGFyQXQoMCkgPT0gInEiID8gImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIgOiAidGV4dCI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICJjb21tZW50IjogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9XSwKICAgICAgICAgICAgInFxZG9jIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1wkXHsvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICInJyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgInFxc3RyaW5nIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogL1wkXHsvLAogICAgICAgICAgICAgICAgICAgIHB1c2g6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAicXN0cmluZyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cJFx7LywKICAgICAgICAgICAgICAgICAgICBwdXNoOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiJyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XQogICAgICAgIH07CgogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKICAgIH07CgogICAgb29wLmluaGVyaXRzKE5peEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKICAgIGV4cG9ydHMuTml4SGlnaGxpZ2h0UnVsZXMgPSBOaXhIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL25peCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvY19jcHAiLCJhY2UvbW9kZS9uaXhfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBDTW9kZSA9IHJlcXVpcmUoIi4vY19jcHAiKS5Nb2RlOwp2YXIgTml4SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL25peF9oaWdobGlnaHRfcnVsZXMiKS5OaXhIaWdobGlnaHRSdWxlczsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIENNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTml4SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIENNb2RlKTsKCihmdW5jdGlvbigpIHsgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL25peCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL25peCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-nsis.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9uc2lzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE5TSVNIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0OiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29tcGlsZXIubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXlxzKiEoPzppbmNsdWRlfGFkZGluY2x1ZGVkaXJ8YWRkcGx1Z2luZGlyfGFwcGVuZGZpbGV8Y2R8ZGVsZmlsZXxlY2hvfGVycm9yfGV4ZWN1dGV8cGFja2hkcnxwcmFnbWF8ZmluYWxpemV8Z2V0ZGxsdmVyc2lvbnxnZXR0bGJ2ZXJzaW9ufHN5c3RlbXx0ZW1wZmlsZXx3YXJuaW5nfHZlcmJvc2V8ZGVmaW5lfHVuZGVmfGluc2VydG1hY3JvfG1hY3JvfG1hY3JvZW5kfG1ha2Vuc2lzfHNlYXJjaHBhcnNlfHNlYXJjaHJlcGxhY2UpXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb21tYW5kLm5zaXMiLAogICAgICAgICAgICByZWdleDogL15ccyooPzpBYm9ydHxBZGRCcmFuZGluZ0ltYWdlfEFkZFNpemV8QWxsb3dSb290RGlySW5zdGFsbHxBbGxvd1NraXBGaWxlc3xBdXRvQ2xvc2VXaW5kb3d8QkdGb250fEJHR3JhZGllbnR8QnJhbmRpbmdUZXh0fEJyaW5nVG9Gcm9udHxDYWxsfENhbGxJbnN0RExMfENhcHRpb258Q2hhbmdlVUl8Q2hlY2tCaXRtYXB8Q2xlYXJFcnJvcnN8Q29tcGxldGVkVGV4dHxDb21wb25lbnRUZXh0fENvcHlGaWxlc3xDUkNDaGVja3xDcmVhdGVEaXJlY3Rvcnl8Q3JlYXRlRm9udHxDcmVhdGVTaG9ydEN1dHxEZWxldGV8RGVsZXRlSU5JU2VjfERlbGV0ZUlOSVN0cnxEZWxldGVSZWdLZXl8RGVsZXRlUmVnVmFsdWV8RGV0YWlsUHJpbnR8RGV0YWlsc0J1dHRvblRleHR8RGlyVGV4dHxEaXJWYXJ8RGlyVmVyaWZ5fEVuYWJsZVdpbmRvd3xFbnVtUmVnS2V5fEVudW1SZWdWYWx1ZXxFeGNofEV4ZWN8RXhlY1NoZWxsfEV4ZWNTaGVsbFdhaXR8RXhlY1dhaXR8RXhwYW5kRW52U3RyaW5nc3xGaWxlfEZpbGVCdWZTaXplfEZpbGVDbG9zZXxGaWxlRXJyb3JUZXh0fEZpbGVPcGVufEZpbGVSZWFkfEZpbGVSZWFkQnl0ZXxGaWxlUmVhZFVURjE2TEV8RmlsZVJlYWRXb3JkfEZpbGVXcml0ZVVURjE2TEV8RmlsZVNlZWt8RmlsZVdyaXRlfEZpbGVXcml0ZUJ5dGV8RmlsZVdyaXRlV29yZHxGaW5kQ2xvc2V8RmluZEZpcnN0fEZpbmROZXh0fEZpbmRXaW5kb3d8Rmx1c2hJTkl8R2V0Q3VySW5zdFR5cGV8R2V0Q3VycmVudEFkZHJlc3N8R2V0RGxnSXRlbXxHZXRETExWZXJzaW9ufEdldERMTFZlcnNpb25Mb2NhbHxHZXRFcnJvckxldmVsfEdldEZpbGVUaW1lfEdldEZpbGVUaW1lTG9jYWx8R2V0RnVsbFBhdGhOYW1lfEdldEZ1bmN0aW9uQWRkcmVzc3xHZXRJbnN0RGlyRXJyb3J8R2V0TGFiZWxBZGRyZXNzfEdldFRlbXBGaWxlTmFtZXxHb3RvfEhpZGVXaW5kb3d8SWNvbnxJZkFib3J0fElmRXJyb3JzfElmRmlsZUV4aXN0c3xJZlJlYm9vdEZsYWd8SWZTaWxlbnR8SW5pdFBsdWdpbnNEaXJ8SW5zdGFsbEJ1dHRvblRleHR8SW5zdGFsbENvbG9yc3xJbnN0YWxsRGlyfEluc3RhbGxEaXJSZWdLZXl8SW5zdFByb2dyZXNzRmxhZ3N8SW5zdFR5cGV8SW5zdFR5cGVHZXRUZXh0fEluc3RUeXBlU2V0VGV4dHxJbnQ2NENtcHxJbnQ2NENtcFV8SW50NjRGbXR8SW50Q21wfEludENtcFV8SW50Rm10fEludE9wfEludFB0ckNtcHxJbnRQdHJDbXBVfEludFB0ck9wfElzV2luZG93fExhbmdTdHJpbmd8TGljZW5zZUJrQ29sb3J8TGljZW5zZURhdGF8TGljZW5zZUZvcmNlU2VsZWN0aW9ufExpY2Vuc2VMYW5nU3RyaW5nfExpY2Vuc2VUZXh0fExvYWRMYW5ndWFnZUZpbGV8TG9ja1dpbmRvd3xMb2dTZXR8TG9nVGV4dHxNYW5pZmVzdERQSUF3YXJlfE1hbmlmZXN0U3VwcG9ydGVkT1N8TWVzc2FnZUJveHxNaXNjQnV0dG9uVGV4dHxOYW1lfE5vcHxPdXRGaWxlfFBhZ2V8UGFnZUNhbGxiYWNrc3xQRURsbENoYXJhY3RlcmlzdGljc3xQRVN1YnN5c1ZlcnxQb3B8UHVzaHxRdWl0fFJlYWRFbnZTdHJ8UmVhZElOSVN0cnxSZWFkUmVnRFdPUkR8UmVhZFJlZ1N0cnxSZWJvb3R8UmVnRExMfFJlbmFtZXxSZXF1ZXN0RXhlY3V0aW9uTGV2ZWx8UmVzZXJ2ZUZpbGV8UmV0dXJufFJNRGlyfFNlYXJjaFBhdGh8U2VjdGlvbkdldEZsYWdzfFNlY3Rpb25HZXRJbnN0VHlwZXN8U2VjdGlvbkdldFNpemV8U2VjdGlvbkdldFRleHR8U2VjdGlvbklufFNlY3Rpb25TZXRGbGFnc3xTZWN0aW9uU2V0SW5zdFR5cGVzfFNlY3Rpb25TZXRTaXplfFNlY3Rpb25TZXRUZXh0fFNlbmRNZXNzYWdlfFNldEF1dG9DbG9zZXxTZXRCcmFuZGluZ0ltYWdlfFNldENvbXByZXNzfFNldENvbXByZXNzb3J8U2V0Q29tcHJlc3NvckRpY3RTaXplfFNldEN0bENvbG9yc3xTZXRDdXJJbnN0VHlwZXxTZXREYXRhYmxvY2tPcHRpbWl6ZXxTZXREYXRlU2F2ZXxTZXREZXRhaWxzUHJpbnR8U2V0RGV0YWlsc1ZpZXd8U2V0RXJyb3JMZXZlbHxTZXRFcnJvcnN8U2V0RmlsZUF0dHJpYnV0ZXN8U2V0Rm9udHxTZXRPdXRQYXRofFNldE92ZXJ3cml0ZXxTZXRSZWJvb3RGbGFnfFNldFJlZ1ZpZXd8U2V0U2hlbGxWYXJDb250ZXh0fFNldFNpbGVudHxTaG93SW5zdERldGFpbHN8U2hvd1VuaW5zdERldGFpbHN8U2hvd1dpbmRvd3xTaWxlbnRJbnN0YWxsfFNpbGVudFVuSW5zdGFsbHxTbGVlcHxTcGFjZVRleHRzfFN0ckNtcHxTdHJDbXBTfFN0ckNweXxTdHJMZW58U3ViQ2FwdGlvbnxVbmljb2RlfFVuaW5zdGFsbEJ1dHRvblRleHR8VW5pbnN0YWxsQ2FwdGlvbnxVbmluc3RhbGxJY29ufFVuaW5zdGFsbFN1YkNhcHRpb258VW5pbnN0YWxsVGV4dHxVbmluc3RQYWdlfFVuUmVnRExMfFZhcnxWSUFkZFZlcnNpb25LZXl8VklGaWxlVmVyc2lvbnxWSVByb2R1Y3RWZXJzaW9ufFdpbmRvd0ljb258V3JpdGVJTklTdHJ8V3JpdGVSZWdCaW58V3JpdGVSZWdEV09SRHxXcml0ZVJlZ0V4cGFuZFN0cnxXcml0ZVJlZ011bHRpU3RyfFdyaXRlUmVnTm9uZXxXcml0ZVJlZ1N0cnxXcml0ZVVuaW5zdGFsbGVyfFhQU3R5bGUpXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLm5zaXMiLAogICAgICAgICAgICByZWdleDogL15ccyohKD86aWZkZWZ8aWZuZGVmfGlmfGlmbWFjcm9kZWZ8aWZtYWNyb25kZWZ8ZWxzZXxlbmRpZilcYi8sCiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLnBsdWdpbi5uc2lzIiwKICAgICAgICAgICAgcmVnZXg6IC9eXHMqXHcrOjpcdysvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5jb21wYXJpc29uLm5zaXMiLAogICAgICAgICAgICByZWdleDogL1shPD5dPz18PD58PHw+LwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LmZ1bmN0aW9uLm5zaXMiLAogICAgICAgICAgICByZWdleDogLyg/OlxifF5ccyopKD86RnVuY3Rpb258RnVuY3Rpb25FbmR8U2VjdGlvbnxTZWN0aW9uRW5kfFNlY3Rpb25Hcm91cHxTZWN0aW9uR3JvdXBFbmR8UGFnZUV4fFBhZ2VFeEVuZClcYi8sCiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LmxpYnJhcnkubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCR7W1x3XC46LV0rfS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpBUkNISVZFfEZJTEVfQVRUUklCVVRFX0FSQ0hJVkV8RklMRV9BVFRSSUJVVEVfSElEREVOfEZJTEVfQVRUUklCVVRFX05PUk1BTHxGSUxFX0FUVFJJQlVURV9PRkZMSU5FfEZJTEVfQVRUUklCVVRFX1JFQURPTkxZfEZJTEVfQVRUUklCVVRFX1NZU1RFTXxGSUxFX0FUVFJJQlVURV9URU1QT1JBUll8SElEREVOfEhLQ0N8SEtDUigzMnw2NCk/fEhLQ1UoMzJ8NjQpP3xIS0REfEhLRVlfQ0xBU1NFU19ST09UfEhLRVlfQ1VSUkVOVF9DT05GSUd8SEtFWV9DVVJSRU5UX1VTRVJ8SEtFWV9EWU5fREFUQXxIS0VZX0xPQ0FMX01BQ0hJTkV8SEtFWV9QRVJGT1JNQU5DRV9EQVRBfEhLRVlfVVNFUlN8SEtMTSgzMnw2NCk/fEhLUER8SEtVfElEQUJPUlR8SURDQU5DRUx8SUREX0RJUnxJRERfSU5TVHxJRERfSU5TVEZJTEVTfElERF9MSUNFTlNFfElERF9TRUxDT018SUREX1VOSU5TVHxJRERfVkVSSUZZfElESUdOT1JFfElETk98SURPS3xJRFJFVFJZfElEWUVTfE1CX0FCT1JUUkVUUllJR05PUkV8TUJfREVGQlVUVE9OMXxNQl9ERUZCVVRUT04yfE1CX0RFRkJVVFRPTjN8TUJfREVGQlVUVE9ONHxNQl9JQ09ORVhDTEFNQVRJT058TUJfSUNPTklORk9STUFUSU9OfE1CX0lDT05RVUVTVElPTnxNQl9JQ09OU1RPUHxNQl9PS3xNQl9PS0NBTkNFTHxNQl9SRVRSWUNBTkNFTHxNQl9SSUdIVHxNQl9SVExSRUFESU5HfE1CX1NFVEZPUkVHUk9VTkR8TUJfVE9QTU9TVHxNQl9VU0VSSUNPTnxNQl9ZRVNOT3xNQl9ZRVNOT0NBTkNFTHxOT1JNQUx8T0ZGTElORXxSRUFET05MWXxTSENUWHxTSEVMTF9DT05URVhUfFNXX0hJREV8U1dfU0hPV0RFRkFVTFR8U1dfU0hPV01BWElNSVpFRHxTV19TSE9XTUlOSU1JWkVEfFNXX1NIT1dOT1JNQUx8U1lTVEVNfFRFTVBPUkFSWSlcYi8sCiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5saWJyYXJ5Lm5zaXMiLAogICAgICAgICAgICByZWdleDogL1wkeyg/OkF0TGVhc3RTZXJ2aWNlUGFja3xBdExlYXN0V2luN3xBdExlYXN0V2luOHxBdExlYXN0V2luMTB8QXRMZWFzdFdpbjk1fEF0TGVhc3RXaW45OHxBdExlYXN0V2luMjAwMHxBdExlYXN0V2luMjAwM3xBdExlYXN0V2luMjAwOHxBdExlYXN0V2luMjAwOFIyfEF0TGVhc3RXaW5NRXxBdExlYXN0V2luTlQ0fEF0TGVhc3RXaW5WaXN0YXxBdExlYXN0V2luWFB8QXRNb3N0U2VydmljZVBhY2t8QXRNb3N0V2luN3xBdE1vc3RXaW44fEF0TW9zdFdpbjEwfEF0TW9zdFdpbjk1fEF0TW9zdFdpbjk4fEF0TW9zdFdpbjIwMDB8QXRNb3N0V2luMjAwM3xBdE1vc3RXaW4yMDA4fEF0TW9zdFdpbjIwMDhSMnxBdE1vc3RXaW5NRXxBdE1vc3RXaW5OVDR8QXRNb3N0V2luVmlzdGF8QXRNb3N0V2luWFB8SXNEb21haW5Db250cm9sbGVyfElzTlR8SXNTZXJ2ZXJ8SXNTZXJ2aWNlUGFja3xJc1dpbjd8SXNXaW44fElzV2luMTB8SXNXaW45NXxJc1dpbjk4fElzV2luMjAwMHxJc1dpbjIwMDN8SXNXaW4yMDA4fElzV2luMjAwOFIyfElzV2luTUV8SXNXaW5OVDR8SXNXaW5WaXN0YXxJc1dpblhQKX0vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4udHJ1ZS5uc2lzIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OnRydWV8b24pXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4uZmFsc2UubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpmYWxzZXxvZmYpXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLm9wdGlvbi5uc2lzIiwKICAgICAgICAgICAgcmVnZXg6IC8oPzpcYnxeXHMqKSg/Oig/OnVuXC4pP2NvbXBvbmVudHN8KD86dW5cLik/Y3VzdG9tfCg/OnVuXC4pP2RpcmVjdG9yeXwoPzp1blwuKT9pbnN0ZmlsZXN8KD86dW5cLik/bGljZW5zZXx1bmluc3RDb25maXJtfGFkbWlufGFsbHxhdXRvfGJvdGh8Ym90dG9tfGJ6aXAyfGN1cnJlbnR8Zm9yY2V8aGlkZXxoaWdoZXN0fGlmZGlmZnxpZm5ld2VyfGxhc3R1c2VkfGxlYXZlfGxlZnR8bGlzdG9ubHl8bHptYXxuZXZlcnNob3d8bm9uZXxub3JtYWx8bm90c2V0fHJpZ2h0fHNob3d8c2lsZW50fHNpbGVudGxvZ3x0ZXh0b25seXx0b3B8dHJ5fHVzZXJ8V2luMTB8V2luN3xXaW44fFdpblZpc3RhfHpsaWIpXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2Uuc2xhc2gtb3B0aW9uLm5zaXMiLAogICAgICAgICAgICByZWdleDogL1xiXC8oPzphfEJSQU5ESU5HfENFTlRFUnxDT01QT05FTlRTT05MWU9OQ1VTVE9NfENVU1RPTVNUUklORz18ZGF0ZXxlfEVOQUJMRUNBTkNFTHxGSUxFU09OTFl8ZmlsZXxGSU5BTHxHTE9CQUx8Z3JheXxpZmVtcHR5fGlmbmRlZnxpZ25vcmVjYXNlfElNR0lEPXxJVEFMSUN8TEFORz18Tk9DVVNUT018bm9lcnJvcnN8Tk9ORkFUQUx8bm9uZmF0YWx8b25hbWU9fG98UkVCT09UT0t8cmVkZWZ8UkVTSVpFVE9GSVR8cnxTSE9SVHxTSUxFTlR8U09MSUR8U1RSSUtFfFRSSU18VU5ERVJMSU5FfHV0Y2RhdGV8d2luZG93c3x4KVxiLywKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzowKD86eHxYKVswLTlhLWZBLUZdK3xbMC05XSsoPzpcLlswLTldKyk/KVxiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5uc2lzIiwKICAgICAgICAgICAgcmVnZXg6IC9cJFwoW1x3XC46LV0rXCkvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0b3JhZ2UudHlwZS5mdW5jdGlvbi5uc2lzIiwKICAgICAgICAgICAgcmVnZXg6IC9cJFx3Ky8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4ubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvYC8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5uc2lzIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUubnNpcyIsCiAgICAgICAgICAgICAgICByZWdleDogL1wkXFwuLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmJhY2subnNpcyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4ubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5uc2lzIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUubnNpcyIsCiAgICAgICAgICAgICAgICByZWdleDogL1wkXFwuLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmRvdWJsZS5uc2lzIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi5uc2lzIiwKICAgICAgICAgICAgcmVnZXg6IC8nLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLm5zaXMiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8nLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5uc2lzIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCRcXC4vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuc2luZ2xlLm5zaXMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5uc2lzIiwKICAgICAgICAgICAgICAgICJjb21tZW50LmxpbmUubnNpcyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC8oO3wjKSguKiQpLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQubnNpcyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXC9cKi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5uc2lzIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCpcLy8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50LmJsb2NrLm5zaXMiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICByZWdleDogLyg/OiFpbmNsdWRlfCFpbnNlcnRtYWNybylcYi8KICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKTlNJU0hpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0gewogICAgY29tbWVudDogIlxuXHR0b2RvOiAtIGhpZ2hsaWdodCBmdW5jdGlvbnNcblx0IiwKICAgIGZpbGVUeXBlczogWyJuc2kiLCAibnNoIl0sCiAgICBuYW1lOiAiTlNJUyIsCiAgICBzY29wZU5hbWU6ICJzb3VyY2UubnNpcyIKfTsKCgpvb3AuaW5oZXJpdHMoTlNJU0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5OU0lTSGlnaGxpZ2h0UnVsZXMgPSBOU0lTSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvbnNpcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL25zaXNfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBOU0lTSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL25zaXNfaGlnaGxpZ2h0X3J1bGVzIikuTlNJU0hpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IE5TSVNIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gWyI7IiwgIiMiXTsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbnNpcyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL25zaXMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-objectivec.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY0Z1bmN0aW9ucyA9IGV4cG9ydHMuY0Z1bmN0aW9ucyA9ICJcXGIoPzpoeXBvdCg/OmZ8bCk/fHMoPzpzY2FuZnx5c3RlbXxucHJpbnRmfGNhKD86bmZ8bGIoPzpuKD86ZnxsKT98bG4oPzpmfGwpPykpfGkoPzpuKD86aCg/OmZ8bCk/fGZ8bCk/fGduKD86YWx8Yml0KSl8dHIoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT8pfGVycm9yfHBicmt8ZnRpbWV8bGVufHJjaHJ8eGZybSl8cHJpbnRmfGV0KD86am1wfHZidWZ8bG9jYWxlfGJ1Zil8cXJ0KD86ZnxsKT98dyg/OnNjYW5mfHByaW50Zil8cmFuZCl8big/OmUoPzphcmJ5aW50KD86ZnxsKT98eHQoPzp0b3dhcmQoPzpmfGwpP3xhZnRlcig/OmZ8bCk/KSl8YW4oPzpmfGwpPyl8Yyg/OnMoPzppbig/OmgoPzpmfGwpP3xmfGwpP3xxcnQoPzpmfGwpPyl8Y29zKD86aCg/OmYpP3xmfGwpP3xpbWFnKD86ZnxsKT98dCg/OmltZXxhbig/OmgoPzpmfGwpP3xmfGwpPyl8byg/OnMoPzpoKD86ZnxsKT98ZnxsKT98bmooPzpmfGwpP3xweXNpZ24oPzpmfGwpPyl8cCg/Om93KD86ZnxsKT98cm9qKD86ZnxsKT8pfGUoPzppbCg/OmZ8bCk/fHhwKD86ZnxsKT8pfGwoPzpvKD86Y2t8Zyg/OmZ8bCk/KXxlYXJlcnIpfGEoPzpzaW4oPzpoKD86ZnxsKT98ZnxsKT98Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHRhbig/OmgoPzpmfGwpP3xmfGwpP3xsbG9jfHJnKD86ZnxsKT98YnMoPzpmfGwpPyl8cmVhbCg/OmZ8bCk/fGJydCg/OmZ8bCk/KXx0KD86aW1lfG8oPzp1cHBlcnxsb3dlcil8YW4oPzpoKD86ZnxsKT98ZnxsKT98cnVuYyg/OmZ8bCk/fGdhbW1hKD86ZnxsKT98bXAoPzpuYW18ZmlsZSkpfGkoPzpzKD86c3BhY2V8big/Om9ybWFsfGFuKXxjbnRybHxpbmZ8ZGlnaXR8dSg/Om5vcmRlcmVkfHBwZXIpfHAoPzp1bmN0fHJpbnQpfGZpbml0ZXx3KD86c3BhY2V8Yyg/Om50cmx8dHlwZSl8ZGlnaXR8dXBwZXJ8cCg/OnVuY3R8cmludCl8bG93ZXJ8YWwoPzpudW18cGhhKXxncmFwaHx4ZGlnaXR8YmxhbmspfGwoPzpvd2VyfGVzcyg/OmVxdWFsfGdyZWF0ZXIpPyl8YWwoPzpudW18cGhhKXxncig/OmVhdGVyKD86ZXF1YWwpP3xhcGgpfHhkaWdpdHxibGFuayl8bG9nYig/OmZ8bCk/fG1heCg/OmRpdnxhYnMpKXxkaSg/OnZ8ZmZ0aW1lKXxfRXhpdHx1bmdldCg/OmN8d2MpfHAoPzpvdyg/OmZ8bCk/fHV0KD86c3xjKD86aGFyKT98d2MoPzpoYXIpPyl8ZXJyb3J8cmludGYpfGUoPzpyZig/OmMoPzpmfGwpP3xmfGwpP3x4KD86aXR8cCg/OjIoPzpmfGwpP3xmfGx8bTEoPzpmfGwpPyk/KSl8dig/OnMoPzpzY2FuZnxucHJpbnRmfGNhbmZ8cHJpbnRmfHcoPzpzY2FuZnxwcmludGYpKXxwcmludGZ8Zig/OnNjYW5mfHByaW50Znx3KD86c2NhbmZ8cHJpbnRmKSl8dyg/OnNjYW5mfHByaW50Zil8YV8oPzpzdGFydHxjb3B5fGVuZHxhcmcpKXxxc29ydHxmKD86cyg/OmNhbmZ8ZSg/OnRwb3N8ZWspKXxjbG9zZXx0ZWxsfG9wZW58ZGltKD86ZnxsKT98cCg/OmNsYXNzaWZ5fHV0KD86c3xjfHcoPzpzfGMpKXxyaW50Zil8ZSg/OmhvbGRleGNlcHR8c2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpfGNsZWFyZXhjZXB0fHRlc3RleGNlcHR8b2Z8dXBkYXRlZW52fHIoPzphaXNlZXhjZXB0fHJvcil8Z2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpKXxmbHVzaHx3KD86c2NhbmZ8aWRlfHByaW50ZnxyaXRlKXxsb29yKD86ZnxsKT98YWJzKD86ZnxsKT98Z2V0KD86c3xjfHBvc3x3KD86c3xjKSl8cmUoPzpvcGVufGV8YWR8eHAoPzpmfGwpPyl8bSg/OmluKD86ZnxsKT98b2QoPzpmfGwpP3xhKD86ZnxsfHgoPzpmfGwpPyk/KSl8bCg/OmQoPzppdnxleHAoPzpmfGwpPyl8byg/Om5nam1wfGNhbCg/OnRpbWV8ZWNvbnYpfGcoPzoxKD86cCg/OmZ8bCk/fDAoPzpmfGwpPyl8Mig/OmZ8bCk/fGZ8bHxiKD86ZnxsKT8pPyl8YWJzfGwoPzpkaXZ8YWJzfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT8pKXxyKD86aW50KD86ZnxsKT98b3VuZCg/OmZ8bCk/KXxnYW1tYSg/OmZ8bCk/KXx3KD86c2NhbmZ8Yyg/OnMoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT98bWJzKXxwYnJrfGZ0aW1lfGxlbnxyKD86Y2hyfHRvbWJzKXx4ZnJtKXx0byg/OmJ8bWIpfHJ0b21iKXxwcmludGZ8bWVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSkpfGEoPzpzKD86c2VydHxjdGltZXxpbig/OmgoPzpmfGwpP3xmfGwpPyl8Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHQoPzpvKD86aXxmfGwoPzpsKT8pfGV4aXR8YW4oPzpoKD86ZnxsKT98Mig/OmZ8bCk/fGZ8bCk/KXxiKD86c3xvcnQpKXxnKD86ZXQoPzpzfGMoPzpoYXIpP3xlbnZ8d2MoPzpoYXIpPyl8bXRpbWUpfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT98ZSg/Om5hbWV8YWxsb2N8d2luZHxtKD86b3ZlfHF1byg/OmZ8bCk/fGFpbmRlcig/OmZ8bCk/KSl8YSg/Om5kfGlzZSkpfGIoPzpzZWFyY2h8dG93Yyl8bSg/Om9kZig/OmZ8bCk/fGVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSl8a3RpbWV8YWxsb2N8Yig/OnMoPzppbml0fHRvd2NzfHJ0b3djcyl8dG93Y3xsZW58cig/OnRvd2N8bGVuKSkpKVxcYiI7Cgp2YXIgY19jcHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkQ29udHJvbHMgPSAoCiAgICAgICAgImJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGZvcnxnb3RvfGlmfF9QcmFnbWF8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8b3BlcmF0b3J8dHJ5fHRocm93fHVzaW5nIgogICAgKTsKICAgIAogICAgdmFyIHN0b3JhZ2VUeXBlID0gKAogICAgICAgICJhc218X19hc21fX3xhdXRvfGJvb2x8X0Jvb2x8Y2hhcnxfQ29tcGxleHxkb3VibGV8ZW51bXxmbG9hdHwiICsKICAgICAgICAiX0ltYWdpbmFyeXxpbnR8bG9uZ3xzaG9ydHxzaWduZWR8c3RydWN0fHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHwiICsKICAgICAgICAiY2xhc3N8d2NoYXJfdHx0ZW1wbGF0ZXxjaGFyMTZfdHxjaGFyMzJfdCIKICAgICk7CgogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAoCiAgICAgICAgImNvbnN0fGV4dGVybnxyZWdpc3RlcnxyZXN0cmljdHxzdGF0aWN8dm9sYXRpbGV8aW5saW5lfHByaXZhdGV8IiArCiAgICAgICAgInByb3RlY3RlZHxwdWJsaWN8ZnJpZW5kfGV4cGxpY2l0fHZpcnR1YWx8ZXhwb3J0fG11dGFibGV8dHlwZW5hbWV8IiArCiAgICAgICAgImNvbnN0ZXhwcnxuZXd8ZGVsZXRlfGFsaWduYXN8YWxpZ25vZnxkZWNsdHlwZXxub2V4Y2VwdHx0aHJlYWRfbG9jYWwiCiAgICApOwoKICAgIHZhciBrZXl3b3JkT3BlcmF0b3JzID0gKAogICAgICAgICJhbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxjb21wbHxub3R8bm90X2VxfG9yfG9yX2VxfHR5cGVpZHx4b3J8eG9yX2VxfCIgKwogICAgICAgICJjb25zdF9jYXN0fGR5bmFtaWNfY2FzdHxyZWludGVycHJldF9jYXN0fHN0YXRpY19jYXN0fHNpemVvZnxuYW1lc3BhY2UiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJOVUxMfHRydWV8ZmFsc2V8VFJVRXxGQUxTRXxudWxscHRyIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuJGtleXdvcmRzID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6IGtleXdvcmRDb250cm9scywKICAgICAgICAic3RvcmFnZS50eXBlIiA6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiIDoga2V5d29yZE9wZXJhdG9ycywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CiAgICB2YXIgZXNjYXBlUmUgPSAvXFwoPzpbJyI/XFxhYmZucnR2XXxbMC03XXsxLDN9fHhbYS1mQS1GXGRdezJ9fHVbYS1mQS1GXGRdezR9VVthLWZBLUZcZF17OH18LikvLnNvdXJjZTsKICAgIHZhciBmb3JtYXRSZSA9ICIlIgogICAgICAgICAgKyAvKFxkK1wkKT8vLnNvdXJjZSAvLyBmaWVsZCAoYXJndW1lbnQgIykKICAgICAgICAgICsgL1sjMFwtICsnXSovLnNvdXJjZSAvLyBmbGFncwogICAgICAgICAgKyAvWyw7Ol9dPy8uc291cmNlIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXIgKEFsdGlWZWMpCiAgICAgICAgICArIC8oKC0/XGQrKXxcKigtP1xkK1wkKT8pPy8uc291cmNlIC8vIG1pbmltdW0gZmllbGQgd2lkdGgKICAgICAgICAgICsgLyhcLigoLT9cZCspfFwqKC0/XGQrXCQpPyk/KT8vLnNvdXJjZSAvLyBwcmVjaXNpb24KICAgICAgICAgICsgLyhoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpPy8uc291cmNlIC8vIGxlbmd0aCBtb2RpZmllcgogICAgICAgICAgKyAvKFxbW14iXF1dK1xdfFtkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdKS8uc291cmNlOyAvLyBjb252ZXJzaW9uIHR5cGUKCiAgICB0aGlzLiRydWxlcyA9IHsgCiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInNpbmdsZUxpbmVDb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD86IiArIGVzY2FwZVJlICsgInwuKT8nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsIAogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFzdHJpbmciLAogICAgICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmciLCByZWdleDogL1xcXHMqJC8sIG5leHQ6ICJxcXN0cmluZyIgfSwKICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVJlIH0sCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiBmb3JtYXRSZSB9LAogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmcuZW5kIiwgcmVnZXg6ICcifCQnLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnUiJcXCgnLCAKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInJhd1N0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogInN0cmluZy5lbmQiLCByZWdleDogJ1xcKSInLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdKyhMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8oTHxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86aW5jbHVkZXxpbXBvcnR8cHJhZ21hfGxpbmV8ZGVmaW5lfHVuZGVmKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBzcGVjaWFsIGNhc2UgcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiI1xccyooPzplbmRpZnxpZnxpZmRlZnxlbHNlfGVsaWZ8aWZuZGVmKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IGNGdW5jdGlvbnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PDw9fD4+PXw+Pj49fDw+fCYmfFx8XHx8XD86fFsqJVwvK1wtJlxefH4hPD49XT0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzaW5nbGVMaW5lQ29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIG5leHQgOiAic2luZ2xlTGluZUNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIubXVsdGlsaW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLipcXC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKjwuKz8+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXlxcXC9dKy8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhjX2NwcEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5jX2NwcEhpZ2hsaWdodFJ1bGVzID0gY19jcHBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL29iamVjdGl2ZWNfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIENfSGlnaGxpZ2h0X0ZpbGUgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpOwp2YXIgQ0hpZ2hsaWdodFJ1bGVzID0gQ19IaWdobGlnaHRfRmlsZS5jX2NwcEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE9iamVjdGl2ZUNIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBlc2NhcGVkQ29uc3RSZSA9ICJcXFxcKD86W2FiZWZucnR2J1wiP1xcXFxdfCIgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICJbMC0zXVxcZHsxLDJ9fCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIls0LTddXFxkP3wiICsKICAgICAgICAgICAgICAgICAgICAgICAgICIyMjJ8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAieFthLXpBLVowLTldKykiOwoKICAgIHZhciBzcGVjaWFsVmFyaWFibGVzID0gW3sKICAgICAgICAgICAgcmVnZXg6ICJcXGJfY21kXFxiIiwKICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5vdGhlci5zZWxlY3Rvci5vYmpjIgogICAgICAgIH0sIHsKICAgICAgICAgICAgcmVnZXg6ICJcXGIoPzpzZWxmfHN1cGVyKVxcYiIsCiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2Uub2JqYyIKICAgICAgICB9CiAgICBdOwoKICAgIHZhciBjT2JqID0gbmV3IENIaWdobGlnaHRSdWxlcygpOwogICAgdmFyIGNSdWxlcyA9IGNPYmouZ2V0UnVsZXMoKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICJzdGFydCI6IFsgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgIH0sCiAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbICJzdG9yYWdlLnR5cGUub2JqYyIsICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0b3JhZ2UudHlwZS5vYmpjIiwgCiAgICAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLnR5cGUub2JqYyIsICJ0ZXh0IiwgImVudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3Mub2JqYyIKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6ICIoQCkoaW50ZXJmYWNlfHByb3RvY29sKSg/IS4rOykoXFxzK1tBLVphLXpfXVtBLVphLXowLTlfXSopKFxccyo6XFxzKikoW0EtWmEtel0rKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsgInN0b3JhZ2UudHlwZS5vYmpjIiBdLAogICAgICAgICAgICByZWdleDogIihAZW5kKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsgInN0b3JhZ2UudHlwZS5vYmpjIiwgImVudGl0eS5uYW1lLnR5cGUub2JqYyIsIAogICAgICAgICAgICAgICAgICAgICAgICAiZW50aXR5Lm90aGVyLmluaGVyaXRlZC1jbGFzcy5vYmpjIgogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogIihAaW1wbGVtZW50YXRpb24pKFxccytbQS1aYS16X11bQS1aYS16MC05X10qKShcXHMqPzo6XFxzKig/OltBLVphLXpdW0EtWmEtejAtOV0qKSk/IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5iZWdpbi5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICdAIicsCiAgICAgICAgICAgIG5leHQ6ICJjb25zdGFudF9OU1N0cmluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLnR5cGUub2JqYyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiaWRcXHMqPCIsCiAgICAgICAgICAgIG5leHQ6ICJwcm90b2NvbF9saXN0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQuY29udHJvbC5tYWNyby5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICJcXGJOU19EVVJJTkd8TlNfSEFORExFUnxOU19FTkRIQU5ETEVSXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmtleXdvcmQub2JqYyIsICJrZXl3b3JkLmNvbnRyb2wuZXhjZXB0aW9uLm9iamMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoQCkodHJ5fGNhdGNofGZpbmFsbHl8dGhyb3cpXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmtleXdvcmQub2JqYyIsICJrZXl3b3JkLm90aGVyLm9iamMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoQCkoZGVmc3xlbmNvZGUpXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdG9yYWdlLnR5cGUuaWQub2JqYyIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4OiAiKFxcYmlkXFxiKShcXHN8XFxuKT8iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS50eXBlLm9iamMiLAogICAgICAgICAgICByZWdleDogIlxcYklCT3V0bGV0fElCQWN0aW9ufEJPT0x8U0VMfGlkfHVuaWNoYXJ8SU1QfENsYXNzXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdG9yYWdlLnR5cGUub2JqYyIsICJzdG9yYWdlLnR5cGUub2JqYyJdLAogICAgICAgICAgICByZWdleDogIihAKShjbGFzc3xwcm90b2NvbClcXGIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0b3JhZ2UudHlwZS5vYmpjIiwgInB1bmN0dWF0aW9uIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKEBzZWxlY3RvcikoXFxzKlxcKCkiLAogICAgICAgICAgICBuZXh0OiAic2VsZWN0b3JzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdG9yYWdlLm1vZGlmaWVyLm9iamMiLCAic3RvcmFnZS5tb2RpZmllci5vYmpjIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKEApKHN5bmNocm9uaXplZHxwdWJsaWN8cHJpdmF0ZXxwcm90ZWN0ZWR8cGFja2FnZSlcXGIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2Uub2JqYyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiWUVTfE5PfE5pbHxuaWxcXGIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAgInN1cHBvcnQudmFyaWFibGUuZm91bmRhdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiTlNBcHBcXGIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbICJzdXBwb3J0LmZ1bmN0aW9uLmNvY29hLmxlb3BhcmQiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKE5TKD86UmVjdCg/OlRvQ0dSZWN0fEZyb21DR1JlY3QpfE1ha2VDb2xsZWN0YWJsZXxTKD86dHJpbmdGcm9tUHJvdG9jb2x8aXplKD86VG9DR1NpemV8RnJvbUNHU2l6ZSkpfERyYXcoPzpOaW5lUGFydEltYWdlfFRocmVlUGFydEltYWdlKXxQKD86b2ludCg/OlRvQ0dQb2ludHxGcm9tQ0dQb2ludCl8cm90b2NvbEZyb21TdHJpbmcpfEV2ZW50TWFza0Zyb21UeXBlfFZhbHVlKSkoPzpcXGIpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdXBwb3J0LmZ1bmN0aW9uLmNvY29hIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKShOUyg/OlIoPzpvdW5kKD86RG93blRvTXVsdGlwbGVPZlBhZ2VTaXplfFVwVG9NdWx0aXBsZU9mUGFnZVNpemUpfHVuKD86Q3JpdGljYWxBbGVydFBhbmVsKD86UmVsYXRpdmVUb1dpbmRvdyk/fEluZm9ybWF0aW9uYWxBbGVydFBhbmVsKD86UmVsYXRpdmVUb1dpbmRvdyk/fEFsZXJ0UGFuZWwoPzpSZWxhdGl2ZVRvV2luZG93KT8pfGUoPzpzZXQoPzpNYXBUYWJsZXxIYXNoVGFibGUpfGMoPzp5Y2xlWm9uZXx0KD86Q2xpcCg/Okxpc3QpP3xGKD86aWxsKD86VXNpbmdPcGVyYXRpb258TGlzdCg/OlVzaW5nT3BlcmF0aW9ufFdpdGgoPzpHcmF5c3xDb2xvcnMoPzpVc2luZ09wZXJhdGlvbik/KSk/KT98cm9tU3RyaW5nKSl8b3JkQWxsb2NhdGlvbkV2ZW50KXx0dXJuQWRkcmVzc3xsZWFzZUFsZXJ0UGFuZWx8YSg/OmRQaXhlbHxsKD86TWVtb3J5QXZhaWxhYmxlfGxvY2F0ZUNvbGxlY3RhYmxlKSl8Z2lzdGVyU2VydmljZXNQcm92aWRlcil8YW5nZUZyb21TdHJpbmcpfEdldCg/OlNpemVBbmRBbGlnbm1lbnR8Q3JpdGljYWxBbGVydFBhbmVsfEluZm9ybWF0aW9uYWxBbGVydFBhbmVsfFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcnxGaWxlVHlwZSg/OnMpP3xXaW5kb3dTZXJ2ZXJNZW1vcnl8QWxlcnRQYW5lbCl8TSg/OmkoPzpuKD86WHxZKXxkKD86WHxZKSl8b3VzZUluUmVjdHxhKD86cCg/OlJlbW92ZXxHZXR8TWVtYmVyfEluc2VydCg/OklmQWJzZW50fEtub3duQWJzZW50KT8pfGtlKD86Uig/OmVjdHxhbmdlKXxTaXplfFBvaW50KXx4KD86UmFuZ2V8WHxZKSkpfEIoPzppdHNQZXIoPzpTYW1wbGVGcm9tRGVwdGh8UGl4ZWxGcm9tRGVwdGgpfGUoPzpzdERlcHRofGVwfGdpbig/OkNyaXRpY2FsQWxlcnRTaGVldHxJbmZvcm1hdGlvbmFsQWxlcnRTaGVldHxBbGVydFNoZWV0KSkpfFMoPzpobyg/OnVsZFJldGFpbldpdGhab25lfHcoPzpzU2VydmljZXNNZW51SXRlbXxBbmltYXRpb25FZmZlY3QpKXx0cmluZ0Zyb20oPzpSKD86ZWN0fGFuZ2UpfE1hcFRhYmxlfFMoPzppemV8ZWxlY3Rvcil8SGFzaFRhYmxlfENsYXNzfFBvaW50KXxpemVGcm9tU3RyaW5nfGUoPzp0KD86U2hvd3NTZXJ2aWNlc01lbnVJdGVtfFpvbmVOYW1lfFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcnxGb2N1c1JpbmdTdHlsZSl8bGVjdG9yRnJvbVN0cmluZ3xhcmNoUGF0aEZvckRpcmVjdG9yaWVzSW5Eb21haW5zKXx3YXAoPzpCaWcoPzpTaG9ydFRvSG9zdHxJbnRUb0hvc3R8RG91YmxlVG9Ib3N0fEZsb2F0VG9Ib3N0fExvbmcoPzpUb0hvc3R8TG9uZ1RvSG9zdCkpfFNob3J0fEhvc3QoPzpTaG9ydFRvKD86QmlnfExpdHRsZSl8SW50VG8oPzpCaWd8TGl0dGxlKXxEb3VibGVUbyg/OkJpZ3xMaXR0bGUpfEZsb2F0VG8oPzpCaWd8TGl0dGxlKXxMb25nKD86VG8oPzpCaWd8TGl0dGxlKXxMb25nVG8oPzpCaWd8TGl0dGxlKSkpfEludHxEb3VibGV8RmxvYXR8TCg/Oml0dGxlKD86U2hvcnRUb0hvc3R8SW50VG9Ib3N0fERvdWJsZVRvSG9zdHxGbG9hdFRvSG9zdHxMb25nKD86VG9Ib3N0fExvbmdUb0hvc3QpKXxvbmcoPzpMb25nKT8pKSl8SCg/OmlnaGxpZ2h0UmVjdHxvKD86c3RCeXRlT3JkZXJ8bWVEaXJlY3RvcnkoPzpGb3JVc2VyKT8pfGVpZ2h0fGFzaCg/OlJlbW92ZXxHZXR8SW5zZXJ0KD86SWZBYnNlbnR8S25vd25BYnNlbnQpPyl8RlNUeXBlKD86Q29kZUZyb21GaWxlVHlwZXxPZkZpbGUpKXxOKD86dW1iZXJPZkNvbG9yQ29tcG9uZW50c3xleHQoPzpNYXBFbnVtZXJhdG9yUGFpcnxIYXNoRW51bWVyYXRvckl0ZW0pKXxDKD86byg/Om4oPzp0YWluc1JlY3R8dmVydCg/OkdseXBoc1RvUGFja2VkR2x5cGhzfFN3YXBwZWQoPzpEb3VibGVUb0hvc3R8RmxvYXRUb0hvc3QpfEhvc3QoPzpEb3VibGVUb1N3YXBwZWR8RmxvYXRUb1N3YXBwZWQpKSl8dW50KD86TWFwVGFibGV8SGFzaFRhYmxlfEZyYW1lc3xXaW5kb3dzKD86Rm9yQ29udGV4dCk/KXxweSg/Ok0oPzplbW9yeVBhZ2VzfGFwVGFibGVXaXRoWm9uZSl8Qml0c3xIYXNoVGFibGVXaXRoWm9uZXxPYmplY3QpfGxvclNwYWNlRnJvbURlcHRofG1wYXJlKD86TWFwVGFibGVzfEhhc2hUYWJsZXMpKXxsYXNzRnJvbVN0cmluZ3xyZWF0ZSg/Ok1hcFRhYmxlKD86V2l0aFpvbmUpP3xIYXNoVGFibGUoPzpXaXRoWm9uZSk/fFpvbmV8RmlsZSg/Om5hbWVQYm9hcmRUeXBlfENvbnRlbnRzUGJvYXJkVHlwZSkpKXxUZW1wb3JhcnlEaXJlY3Rvcnl8SSg/OnMoPzpDb250cm9sbGVyTWFya2VyfEVtcHR5UmVjdHxGcmVlZE9iamVjdCl8big/OnNldFJlY3R8Y3JlbWVudEV4dHJhUmVmQ291bnR8dGUoPzpyKD86c2VjdCg/OnNSZWN0fGlvblIoPzplY3R8YW5nZSkpfGZhY2VTdHlsZUZvcktleSl8Z3JhbFJlY3QpKSl8Wm9uZSg/OlJlYWxsb2N8TWFsbG9jfE5hbWV8Q2FsbG9jfEZyKD86b21Qb2ludGVyfGVlKSl8Tyg/OnBlblN0ZXBSb290RGlyZWN0b3J5fGZmc2V0UmVjdCl8RCg/OmkoPzpzYWJsZVNjcmVlblVwZGF0ZXN8dmlkZVJlY3QpfG90dGVkRnJhbWVSZWN0fGUoPzpjKD86aW1hbCg/OlJvdW5kfE11bHRpcGx5fFMoPzp0cmluZ3x1YnRyYWN0KXxOb3JtYWxpemV8Q28oPzpweXxtcGEoPzpjdHxyZSkpfElzTm90QU51bWJlcnxEaXZpZGV8UG93ZXJ8QWRkKXxyZW1lbnRFeHRyYVJlZkNvdW50V2FzWmVybyl8ZmF1bHRNYWxsb2Nab25lfGFsbG9jYXRlKD86TWVtb3J5UGFnZXN8T2JqZWN0KSl8cmF3KD86R3IoPzpvb3ZlfGF5QmV6ZWwpfEIoPzppdG1hcHx1dHRvbil8Q29sb3JUaWxlZFJlY3RzfFRpbGVkUmVjdHN8RGFya0JlemVsfFcoPzpoaXRlQmV6ZWx8aW5kb3dCYWNrZ3JvdW5kKXxMaWdodEJlemVsKSl8VSg/OnNlck5hbWV8big/OmlvblIoPzplY3R8YW5nZSl8cmVnaXN0ZXJTZXJ2aWNlc1Byb3ZpZGVyKXxwZGF0ZUR5bmFtaWNTZXJ2aWNlcyl8SmF2YSg/OkJ1bmRsZSg/OlNldHVwfENsZWFudXApfFNldHVwKD86VmlydHVhbE1hY2hpbmUpP3xOZWVkcyg/OlRvTG9hZENsYXNzZXN8VmlydHVhbE1hY2hpbmUpfENsYXNzZXNGKD86b3JCdW5kbGV8cm9tUGF0aCl8T2JqZWN0TmFtZWRJblBhdGh8UHJvdmlkZXNDbGFzc2VzKXxQKD86b2ludCg/OkluUmVjdHxGcm9tU3RyaW5nKXxlcmZvcm1TZXJ2aWNlfGxhbmFyRnJvbURlcHRofGFnZVNpemUpfEUoPzpuKD86ZCg/Ok1hcFRhYmxlRW51bWVyYXRpb258SGFzaFRhYmxlRW51bWVyYXRpb24pfHVtZXJhdGUoPzpNYXBUYWJsZXxIYXNoVGFibGUpfGFibGVTY3JlZW5VcGRhdGVzKXxxdWFsKD86Uig/OmVjdHN8YW5nZXMpfFNpemVzfFBvaW50cyl8cmFzZVJlY3R8eHRyYVJlZkNvdW50KXxGKD86aWxlVHlwZUZvckhGU1R5cGVDb2RlfHVsbFVzZXJOYW1lfHIoPzplZSg/Ok1hcFRhYmxlfEhhc2hUYWJsZSl8YW1lKD86UmVjdCg/OldpdGhXaWR0aCg/OlVzaW5nT3BlcmF0aW9uKT8pP3xBZGRyZXNzKSkpfFdpKD86bmRvd0xpc3QoPzpGb3JDb250ZXh0KT98ZHRoKXxMbyg/OmNhdGlvbkluUmFuZ2V8Zyg/OnZ8UGFnZVNpemUpPyl8QSg/OmNjZXNzaWJpbGl0eSg/OlIoPzpvbGVEZXNjcmlwdGlvbig/OkZvclVJRWxlbWVudCk/fGFpc2VCYWRBcmd1bWVudEV4Y2VwdGlvbil8VW5pZ25vcmVkKD86Q2hpbGRyZW4oPzpGb3JPbmx5Q2hpbGQpP3xEZXNjZW5kYW50fEFuY2VzdG9yKXxQb3N0Tm90aWZpY2F0aW9ufEFjdGlvbkRlc2NyaXB0aW9uKXxwcGxpY2F0aW9uKD86TWFpbnxMb2FkKXx2YWlsYWJsZVdpbmRvd0RlcHRoc3xsbCg/Ok1hcFRhYmxlKD86VmFsdWVzfEtleXMpfEhhc2hUYWJsZU9iamVjdHN8b2NhdGUoPzpNZW1vcnlQYWdlc3xDb2xsZWN0YWJsZXxPYmplY3QpKSkpKSg/OlxcYikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInN1cHBvcnQuY2xhc3MuY29jb2EubGVvcGFyZCJdLAogICAgICAgICAgICByZWdleDogIig/OlxcYikoTlMoPzpSdWxlRWRpdG9yfEcoPzphcmJhZ2VDb2xsZWN0b3J8cmFkaWVudCl8TWFwVGFibGV8SGFzaFRhYmxlfENvKD86bmRpdGlvbnxsbGVjdGlvblZpZXcoPzpJdGVtKT8pfFQoPzpvb2xiYXJJdGVtR3JvdXB8ZXh0SW5wdXRDbGllbnR8cig/OmVlTm9kZXxhY2tpbmdBcmVhKSl8SW52b2NhdGlvbk9wZXJhdGlvbnxPcGVyYXRpb24oPzpRdWV1ZSk/fEQoPzppY3Rpb25hcnlDb250cm9sbGVyfG9ja1RpbGUpfFAoPzpvaW50ZXIoPzpGdW5jdGlvbnN8QXJyYXkpfGF0aEMoPzpvKD86bnRyb2woPzpEZWxlZ2F0ZSk/fG1wb25lbnRDZWxsKXxlbGwoPzpEZWxlZ2F0ZSk/KXxyKD86aW50UGFuZWxBY2Nlc3Nvcml6aW5nfGVkaWNhdGVFZGl0b3IoPzpSb3dUZW1wbGF0ZSk/KSl8Vmlld0NvbnRyb2xsZXJ8RmFzdEVudW1lcmF0aW9ufEFuaW1hdCg/OmlvbkNvbnRleHR8YWJsZVByb3BlcnR5Q29udGFpbmVyKSkpKD86XFxiKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsic3VwcG9ydC5jbGFzcy5jb2NvYSJdLAogICAgICAgICAgICByZWdleDogIig/OlxcYikoTlMoPzpSKD86dSg/Om5Mb29wfGxlcig/Ok1hcmtlcnxWaWV3KSl8ZSg/OnNwb25kZXJ8Y3Vyc2l2ZUxvY2t8bGF0aXZlU3BlY2lmaWVyKXxhbig/OmRvbVNwZWNpZmllcnxnZVNwZWNpZmllcikpfEcoPzpldENvbW1hbmR8bHlwaCg/OkdlbmVyYXRvcnxTdG9yYWdlfEluZm8pfHJhcGhpY3NDb250ZXh0KXxYTUwoPzpOb2RlfEQoPzpvY3VtZW50fFREKD86Tm9kZSk/KXxQYXJzZXJ8RWxlbWVudCl8TSg/OmlkZGxlU3BlY2lmaWVyfG92KD86aWUoPzpWaWV3KT98ZUNvbW1hbmQpfHV0YWJsZSg/OlMoPzp0cmluZ3xldCl8Qyg/OmhhcmFjdGVyU2V0fG9weWluZyl8SW5kZXhTZXR8RCg/OmljdGlvbmFyeXxhdGEpfFVSTFJlcXVlc3R8UGFyYWdyYXBoU3R5bGV8QSg/OnR0cmlidXRlZFN0cmluZ3xycmF5KSl8ZSg/OnNzYWdlUG9ydCg/Ok5hbWVTZXJ2ZXIpP3xudSg/Okl0ZW0oPzpDZWxsKT98Vmlldyk/fHQoPzpob2RTaWduYXR1cmV8YWRhdGEoPzpJdGVtfFF1ZXJ5KD86UmVzdWx0R3JvdXB8QXR0cmlidXRlVmFsdWVUdXBsZSk/KSkpfGEoPzpjaCg/OkJvb3RzdHJhcFNlcnZlcnxQb3J0KXx0cml4KSl8Qig/Oml0bWFwSW1hZ2VSZXB8b3h8dSg/Om5kbGV8dHRvbig/OkNlbGwpPyl8ZXppZXJQYXRofHJvd3Nlcig/OkNlbGwpPyl8Uyg/OmhhZG93fGMoPzphbm5lcnxyKD86aXB0KD86U3VpdGVSZWdpc3RyeXxDKD86byg/OmVyY2lvbkhhbmRsZXJ8bW1hbmQoPzpEZXNjcmlwdGlvbik/KXxsYXNzRGVzY3JpcHRpb24pfE9iamVjdFNwZWNpZmllcnxFeGVjdXRpb25Db250ZXh0fFdob3NlVGVzdCl8b2xsKD86ZXJ8Vmlldyl8ZWVuKSl8dCg/OmVwcGVyKD86Q2VsbCk/fGF0dXMoPzpCYXJ8SXRlbSl8cig/OmluZ3xlYW0pKXxpbXBsZSg/Okhvcml6b250YWxUeXBlc2V0dGVyfENTdHJpbmcpfG8oPzpja2V0UG9ydCg/Ok5hbWVTZXJ2ZXIpP3x1bmR8cnREZXNjcmlwdG9yKXxwKD86ZSg/OmNpZmllclRlc3R8ZWNoKD86UmVjb2duaXplcnxTeW50aGVzaXplcil8bGwoPzpTZXJ2ZXJ8Q2hlY2tlcikpfGxpdFZpZXcpfGUoPzpjdXJlVGV4dEZpZWxkKD86Q2VsbCk/fHQoPzpDb21tYW5kKT98YXJjaEZpZWxkKD86Q2VsbCk/fHJpYWxpemVyfGdtZW50ZWRDKD86b250cm9sfGVsbCkpfGxpZGVyKD86Q2VsbCk/fGF2ZVBhbmVsKXxIKD86b3N0fFRUUCg/OkNvb2tpZSg/OlN0b3JhZ2UpP3xVUkxSZXNwb25zZSl8ZWxwTWFuYWdlcil8Tig/OmliKD86Q29uKD86bmVjdG9yfHRyb2xDb25uZWN0b3IpfE91dGxldENvbm5lY3Rvcik/fG90aWZpY2F0aW9uKD86Q2VudGVyfFF1ZXVlKT98dSg/OmxsfG1iZXIoPzpGb3JtYXR0ZXIpPyl8ZXRTZXJ2aWNlKD86QnJvd3Nlcik/fGFtZVNwZWNpZmllcil8Qyg/OmhhKD86bmdlU3BlbGxpbmd8cmFjdGVyU2V0KXxvKD86big/OnN0YW50U3RyaW5nfG5lY3Rpb258dHJvbCg/Omxlcik/fGRpdGlvbkxvY2spfGQoPzppbmd8ZXIpfHVudCg/OkNvbW1hbmR8ZWRTZXQpfHB5aW5nfGxvcig/OlNwYWNlfFAoPzppY2soPzppbmcoPzpDdXN0b218RGVmYXVsdCl8ZXIpfGFuZWwpfFdlbGx8TGlzdCk/fG0oPzpwKD86b3VuZFByZWRpY2F0ZXxhcmlzb25QcmVkaWNhdGUpfGJvQm94KD86Q2VsbCk/KSl8dSg/OnN0b21JbWFnZVJlcHxyc29yKXxJSW1hZ2VSZXB8ZWxsfGwoPzppcFZpZXd8byg/OnNlQ29tbWFuZHxuZUNvbW1hbmQpfGFzc0Rlc2NyaXB0aW9uKXxhKD86Y2hlZCg/OkltYWdlUmVwfFVSTFJlc3BvbnNlKXxsZW5kYXIoPzpEYXRlKT8pfHJlYXRlQ29tbWFuZCl8VCg/OmhyZWFkfHlwZXNldHRlcnxpbWUoPzpab25lfHIpfG8oPzpvbGJhcig/Okl0ZW0oPzpWYWxpZGF0aW9ucyk/KT98a2VuRmllbGQoPzpDZWxsKT8pfGV4dCg/OkJsb2NrfFN0b3JhZ2V8Q29udGFpbmVyfFRhYig/OmxlKD86QmxvY2spPyk/fElucHV0fFZpZXd8RmllbGQoPzpDZWxsKT98TGlzdHxBdHRhY2htZW50KD86Q2VsbCk/KT98YSg/OnNrfGIoPzpsZSg/OkhlYWRlcig/OkNlbGx8Vmlldyl8Q29sdW1ufFZpZXcpfFZpZXcoPzpJdGVtKT8pKXxyZWVDb250cm9sbGVyKXxJKD86big/OmRleCg/OlMoPzpwZWNpZmllcnxldCl8UGF0aCl8cHV0KD86TWFuYWdlcnxTKD86dHJlYW18ZXJ2KD86aWNlUHJvdmlkZXJ8ZXIoPzpNb3VzZVRyYWNrZXIpPykpKXx2b2NhdGlvbil8Z25vcmVNaXNzcGVsbGVkV29yZHN8bWFnZSg/OlJlcHxDZWxsfFZpZXcpPyl8Tyg/OnV0KD86cHV0U3RyZWFtfGxpbmVWaWV3KXxwZW4oPzpHTCg/OkNvbnRleHR8UGl4ZWwoPzpCdWZmZXJ8Rm9ybWF0KXxWaWV3KXxQYW5lbCl8YmooPzpDVHlwZVNlcmlhbGl6YXRpb25DYWxsQmFja3xlY3QoPzpDb250cm9sbGVyKT8pKXxEKD86aSg/OnN0KD86YW50T2JqZWN0KD86UmVxdWVzdCk/fHJpYnV0ZWQoPzpOb3RpZmljYXRpb25DZW50ZXJ8TG9jaykpfGN0aW9uYXJ5fHJlY3RvcnlFbnVtZXJhdG9yKXxvY3VtZW50KD86Q29udHJvbGxlcik/fGUoPzpzZXJpYWxpemVyfGNpbWFsTnVtYmVyKD86QmVoYXZpb3JzfEhhbmRsZXIpP3xsZXRlQ29tbWFuZCl8YXQoPzplKD86Q29tcG9uZW50c3xQaWNrZXIoPzpDZWxsKT98Rm9ybWF0dGVyKT98YSl8cmEoPzp3ZXJ8Z2dpbmdJbmZvKSl8VSg/OnNlcig/OkludGVyZmFjZVZhbGlkYXRpb25zfERlZmF1bHRzKD86Q29udHJvbGxlcik/KXxSTCg/OlJlKD86c3BvbnNlfHF1ZXN0KXxIYW5kbGUoPzpDbGllbnQpP3xDKD86b25uZWN0aW9ufGFjaGV8cmVkZW50aWFsKD86U3RvcmFnZSk/KXxEb3dubG9hZCg/OkRlbGVnYXRlKT98UHJvdCg/Om9jb2woPzpDbGllbnQpP3xlY3Rpb25TcGFjZSl8QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoPzpTZW5kZXIpPyk/fG4oPzppcXVlSURTcGVjaWZpZXJ8ZG9NYW5hZ2VyfGFyY2hpdmVyKSl8UCg/OmlwZXxvKD86c2l0aW9uYWxTcGVjaWZpZXJ8cFVwQnV0dG9uKD86Q2VsbCk/fHJ0KD86TWVzc2FnZXxOYW1lU2VydmVyfENvZGVyKT8pfElDVEltYWdlUmVwfGVyc2lzdGVudERvY3VtZW50fERGSW1hZ2VSZXB8YSg/OnN0ZWJvYXJkfG5lbHxyYWdyYXBoU3R5bGV8Z2VMYXlvdXQpfHIoPzppbnQoPzpJbmZvfGVyfE9wZXJhdGlvbnxQYW5lbCl8byg/OmNlc3NJbmZvfHRvY29sQ2hlY2tlcnxwZXJ0eSg/OlNwZWNpZmllcnxMaXN0U2VyaWFsaXphdGlvbil8Z3Jlc3NJbmRpY2F0b3J8eHkpfGVkaWNhdGUpKXxFKD86bnVtZXJhdG9yfHZlbnR8UFNJbWFnZVJlcHxycm9yfHgoPzpjZXB0aW9ufGlzdHNDb21tYW5kfHByZXNzaW9uKSl8Vig/Omlldyg/OkFuaW1hdGlvbik/fGFsKD86aWRhdGVkKD86VG9vYmFySXRlbXxVc2VySW50ZXJmYWNlSXRlbSl8dWUoPzpUcmFuc2Zvcm1lcik/KSl8S2V5ZWQoPzpVbmFyY2hpdmVyfEFyY2hpdmVyKXxRdWkoPzpja0RyYXdWaWV3fHRDb21tYW5kKXxGKD86aWxlKD86TWFuYWdlcnxIYW5kbGV8V3JhcHBlcil8byg/Om50KD86TWFuYWdlcnxEZXNjcmlwdG9yfFBhbmVsKT98cm0oPzpDZWxsfGF0dGVyKSkpfFcoPzpob3NlU3BlY2lmaWVyfGluZG93KD86Q29udHJvbGxlcik/fG9ya3NwYWNlKXxMKD86byg/OmMoPzprKD86aW5nKT98YWxlKXxnaWNhbFRlc3QpfGV2ZWxJbmRpY2F0b3IoPzpDZWxsKT98YXlvdXRNYW5hZ2VyKXxBKD86c3NlcnRpb25IYW5kbGVyfG5pbWF0aW9ufGN0aW9uQ2VsbHx0dHJpYnV0ZWRTdHJpbmd8dXRvcmVsZWFzZVBvb2x8VFNUeXBlc2V0dGVyfHBwbCg/OmljYXRpb258ZSg/OlNjcmlwdHxFdmVudCg/Ok1hbmFnZXJ8RGVzY3JpcHRvcikpKXxmZmluZVRyYW5zZm9ybXxsZXJ0fHIoPzpjaGl2ZXJ8cmF5KD86Q29udHJvbGxlcik/KSkpKSg/OlxcYikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInN1cHBvcnQudHlwZS5jb2NvYS5sZW9wYXJkIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKShOUyg/OlIoPzp1KD86bkxvb3B8bGVyKD86TWFya2VyfFZpZXcpKXxlKD86c3BvbmRlcnxjdXJzaXZlTG9ja3xsYXRpdmVTcGVjaWZpZXIpfGFuKD86ZG9tU3BlY2lmaWVyfGdlU3BlY2lmaWVyKSl8Ryg/OmV0Q29tbWFuZHxseXBoKD86R2VuZXJhdG9yfFN0b3JhZ2V8SW5mbyl8cmFwaGljc0NvbnRleHQpfFhNTCg/Ok5vZGV8RCg/Om9jdW1lbnR8VEQoPzpOb2RlKT8pfFBhcnNlcnxFbGVtZW50KXxNKD86aWRkbGVTcGVjaWZpZXJ8b3YoPzppZSg/OlZpZXcpP3xlQ29tbWFuZCl8dXRhYmxlKD86Uyg/OnRyaW5nfGV0KXxDKD86aGFyYWN0ZXJTZXR8b3B5aW5nKXxJbmRleFNldHxEKD86aWN0aW9uYXJ5fGF0YSl8VVJMUmVxdWVzdHxQYXJhZ3JhcGhTdHlsZXxBKD86dHRyaWJ1dGVkU3RyaW5nfHJyYXkpKXxlKD86c3NhZ2VQb3J0KD86TmFtZVNlcnZlcik/fG51KD86SXRlbSg/OkNlbGwpP3xWaWV3KT98dCg/OmhvZFNpZ25hdHVyZXxhZGF0YSg/Okl0ZW18UXVlcnkoPzpSZXN1bHRHcm91cHxBdHRyaWJ1dGVWYWx1ZVR1cGxlKT8pKSl8YSg/OmNoKD86Qm9vdHN0cmFwU2VydmVyfFBvcnQpfHRyaXgpKXxCKD86aXRtYXBJbWFnZVJlcHxveHx1KD86bmRsZXx0dG9uKD86Q2VsbCk/KXxlemllclBhdGh8cm93c2VyKD86Q2VsbCk/KXxTKD86aGFkb3d8Yyg/OmFubmVyfHIoPzppcHQoPzpTdWl0ZVJlZ2lzdHJ5fEMoPzpvKD86ZXJjaW9uSGFuZGxlcnxtbWFuZCg/OkRlc2NyaXB0aW9uKT8pfGxhc3NEZXNjcmlwdGlvbil8T2JqZWN0U3BlY2lmaWVyfEV4ZWN1dGlvbkNvbnRleHR8V2hvc2VUZXN0KXxvbGwoPzplcnxWaWV3KXxlZW4pKXx0KD86ZXBwZXIoPzpDZWxsKT98YXR1cyg/OkJhcnxJdGVtKXxyKD86aW5nfGVhbSkpfGltcGxlKD86SG9yaXpvbnRhbFR5cGVzZXR0ZXJ8Q1N0cmluZyl8byg/OmNrZXRQb3J0KD86TmFtZVNlcnZlcik/fHVuZHxydERlc2NyaXB0b3IpfHAoPzplKD86Y2lmaWVyVGVzdHxlY2goPzpSZWNvZ25pemVyfFN5bnRoZXNpemVyKXxsbCg/OlNlcnZlcnxDaGVja2VyKSl8bGl0Vmlldyl8ZSg/OmN1cmVUZXh0RmllbGQoPzpDZWxsKT98dCg/OkNvbW1hbmQpP3xhcmNoRmllbGQoPzpDZWxsKT98cmlhbGl6ZXJ8Z21lbnRlZEMoPzpvbnRyb2x8ZWxsKSl8bGlkZXIoPzpDZWxsKT98YXZlUGFuZWwpfEgoPzpvc3R8VFRQKD86Q29va2llKD86U3RvcmFnZSk/fFVSTFJlc3BvbnNlKXxlbHBNYW5hZ2VyKXxOKD86aWIoPzpDb24oPzpuZWN0b3J8dHJvbENvbm5lY3Rvcil8T3V0bGV0Q29ubmVjdG9yKT98b3RpZmljYXRpb24oPzpDZW50ZXJ8UXVldWUpP3x1KD86bGx8bWJlcig/OkZvcm1hdHRlcik/KXxldFNlcnZpY2UoPzpCcm93c2VyKT98YW1lU3BlY2lmaWVyKXxDKD86aGEoPzpuZ2VTcGVsbGluZ3xyYWN0ZXJTZXQpfG8oPzpuKD86c3RhbnRTdHJpbmd8bmVjdGlvbnx0cm9sKD86bGVyKT98ZGl0aW9uTG9jayl8ZCg/OmluZ3xlcil8dW50KD86Q29tbWFuZHxlZFNldCl8cHlpbmd8bG9yKD86U3BhY2V8UCg/Omljayg/OmluZyg/OkN1c3RvbXxEZWZhdWx0KXxlcil8YW5lbCl8V2VsbHxMaXN0KT98bSg/OnAoPzpvdW5kUHJlZGljYXRlfGFyaXNvblByZWRpY2F0ZSl8Ym9Cb3goPzpDZWxsKT8pKXx1KD86c3RvbUltYWdlUmVwfHJzb3IpfElJbWFnZVJlcHxlbGx8bCg/OmlwVmlld3xvKD86c2VDb21tYW5kfG5lQ29tbWFuZCl8YXNzRGVzY3JpcHRpb24pfGEoPzpjaGVkKD86SW1hZ2VSZXB8VVJMUmVzcG9uc2UpfGxlbmRhcig/OkRhdGUpPyl8cmVhdGVDb21tYW5kKXxUKD86aHJlYWR8eXBlc2V0dGVyfGltZSg/OlpvbmV8cil8byg/Om9sYmFyKD86SXRlbSg/OlZhbGlkYXRpb25zKT8pP3xrZW5GaWVsZCg/OkNlbGwpPyl8ZXh0KD86QmxvY2t8U3RvcmFnZXxDb250YWluZXJ8VGFiKD86bGUoPzpCbG9jayk/KT98SW5wdXR8Vmlld3xGaWVsZCg/OkNlbGwpP3xMaXN0fEF0dGFjaG1lbnQoPzpDZWxsKT8pP3xhKD86c2t8Yig/OmxlKD86SGVhZGVyKD86Q2VsbHxWaWV3KXxDb2x1bW58Vmlldyl8Vmlldyg/Okl0ZW0pPykpfHJlZUNvbnRyb2xsZXIpfEkoPzpuKD86ZGV4KD86Uyg/OnBlY2lmaWVyfGV0KXxQYXRoKXxwdXQoPzpNYW5hZ2VyfFMoPzp0cmVhbXxlcnYoPzppY2VQcm92aWRlcnxlcig/Ok1vdXNlVHJhY2tlcik/KSkpfHZvY2F0aW9uKXxnbm9yZU1pc3NwZWxsZWRXb3Jkc3xtYWdlKD86UmVwfENlbGx8Vmlldyk/KXxPKD86dXQoPzpwdXRTdHJlYW18bGluZVZpZXcpfHBlbig/OkdMKD86Q29udGV4dHxQaXhlbCg/OkJ1ZmZlcnxGb3JtYXQpfFZpZXcpfFBhbmVsKXxiaig/OkNUeXBlU2VyaWFsaXphdGlvbkNhbGxCYWNrfGVjdCg/OkNvbnRyb2xsZXIpPykpfEQoPzppKD86c3QoPzphbnRPYmplY3QoPzpSZXF1ZXN0KT98cmlidXRlZCg/Ok5vdGlmaWNhdGlvbkNlbnRlcnxMb2NrKSl8Y3Rpb25hcnl8cmVjdG9yeUVudW1lcmF0b3IpfG9jdW1lbnQoPzpDb250cm9sbGVyKT98ZSg/OnNlcmlhbGl6ZXJ8Y2ltYWxOdW1iZXIoPzpCZWhhdmlvcnN8SGFuZGxlcik/fGxldGVDb21tYW5kKXxhdCg/OmUoPzpDb21wb25lbnRzfFBpY2tlcig/OkNlbGwpP3xGb3JtYXR0ZXIpP3xhKXxyYSg/OndlcnxnZ2luZ0luZm8pKXxVKD86c2VyKD86SW50ZXJmYWNlVmFsaWRhdGlvbnN8RGVmYXVsdHMoPzpDb250cm9sbGVyKT8pfFJMKD86UmUoPzpzcG9uc2V8cXVlc3QpfEhhbmRsZSg/OkNsaWVudCk/fEMoPzpvbm5lY3Rpb258YWNoZXxyZWRlbnRpYWwoPzpTdG9yYWdlKT8pfERvd25sb2FkKD86RGVsZWdhdGUpP3xQcm90KD86b2NvbCg/OkNsaWVudCk/fGVjdGlvblNwYWNlKXxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSg/OlNlbmRlcik/KT98big/OmlxdWVJRFNwZWNpZmllcnxkb01hbmFnZXJ8YXJjaGl2ZXIpKXxQKD86aXBlfG8oPzpzaXRpb25hbFNwZWNpZmllcnxwVXBCdXR0b24oPzpDZWxsKT98cnQoPzpNZXNzYWdlfE5hbWVTZXJ2ZXJ8Q29kZXIpPyl8SUNUSW1hZ2VSZXB8ZXJzaXN0ZW50RG9jdW1lbnR8REZJbWFnZVJlcHxhKD86c3RlYm9hcmR8bmVsfHJhZ3JhcGhTdHlsZXxnZUxheW91dCl8cig/OmludCg/OkluZm98ZXJ8T3BlcmF0aW9ufFBhbmVsKXxvKD86Y2Vzc0luZm98dG9jb2xDaGVja2VyfHBlcnR5KD86U3BlY2lmaWVyfExpc3RTZXJpYWxpemF0aW9uKXxncmVzc0luZGljYXRvcnx4eSl8ZWRpY2F0ZSkpfEUoPzpudW1lcmF0b3J8dmVudHxQU0ltYWdlUmVwfHJyb3J8eCg/OmNlcHRpb258aXN0c0NvbW1hbmR8cHJlc3Npb24pKXxWKD86aWV3KD86QW5pbWF0aW9uKT98YWwoPzppZGF0ZWQoPzpUb29iYXJJdGVtfFVzZXJJbnRlcmZhY2VJdGVtKXx1ZSg/OlRyYW5zZm9ybWVyKT8pKXxLZXllZCg/OlVuYXJjaGl2ZXJ8QXJjaGl2ZXIpfFF1aSg/OmNrRHJhd1ZpZXd8dENvbW1hbmQpfEYoPzppbGUoPzpNYW5hZ2VyfEhhbmRsZXxXcmFwcGVyKXxvKD86bnQoPzpNYW5hZ2VyfERlc2NyaXB0b3J8UGFuZWwpP3xybSg/OkNlbGx8YXR0ZXIpKSl8Vyg/Omhvc2VTcGVjaWZpZXJ8aW5kb3coPzpDb250cm9sbGVyKT98b3Jrc3BhY2UpfEwoPzpvKD86Yyg/OmsoPzppbmcpP3xhbGUpfGdpY2FsVGVzdCl8ZXZlbEluZGljYXRvcig/OkNlbGwpP3xheW91dE1hbmFnZXIpfEEoPzpzc2VydGlvbkhhbmRsZXJ8bmltYXRpb258Y3Rpb25DZWxsfHR0cmlidXRlZFN0cmluZ3x1dG9yZWxlYXNlUG9vbHxUU1R5cGVzZXR0ZXJ8cHBsKD86aWNhdGlvbnxlKD86U2NyaXB0fEV2ZW50KD86TWFuYWdlcnxEZXNjcmlwdG9yKSkpfGZmaW5lVHJhbnNmb3JtfGxlcnR8cig/OmNoaXZlcnxyYXkoPzpDb250cm9sbGVyKT8pKSkpKD86XFxiKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsic3VwcG9ydC5jbGFzcy5xdWFydHoiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKEMoPzpJKD86U2FtcGxlcnxDbyg/Om50ZXh0fGxvcil8SW1hZ2UoPzpBY2N1bXVsYXRvcik/fFBsdWdJbig/OlJlZ2lzdHJhdGlvbik/fFZlY3RvcnxLZXJuZWx8RmlsdGVyKD86R2VuZXJhdG9yfFNoYXBlKT8pfEEoPzpSZW5kZXJlcnxNZWRpYVRpbWluZyg/OkZ1bmN0aW9uKT98QmFzaWNBbmltYXRpb258U2Nyb2xsTGF5ZXJ8Q29uc3RyYWludCg/OkxheW91dE1hbmFnZXIpP3xUKD86aWxlZExheWVyfGV4dExheWVyfHJhbnMoPzppdGlvbnxhY3Rpb24pKXxPcGVuR0xMYXllcnxQcm9wZXJ0eUFuaW1hdGlvbnxLZXlmcmFtZUFuaW1hdGlvbnxMYXllcnxBKD86bmltYXRpb24oPzpHcm91cCk/fGN0aW9uKSkpKSg/OlxcYikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInN1cHBvcnQudHlwZS5xdWFydHoiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKEMoPzpHKD86RmxvYXR8UG9pbnR8U2l6ZXxSZWN0KXxJRm9ybWF0fEFDb25zdHJhaW50QXR0cmlidXRlKSkoPzpcXGIpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdXBwb3J0LnR5cGUuY29jb2EiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKE5TKD86Uig/OmVjdCg/OkVkZ2UpP3xhbmdlKXxHKD86bHlwaCg/OlJlbGF0aW9ufExheW91dE1vZGUpP3xyYWRpZW50VHlwZSl8TSg/Om9kYWxTZXNzaW9ufGEoPzp0cml4TW9kZXxwKD86VGFibGV8RW51bWVyYXRvcikpKXxCKD86aXRtYXBJbWFnZUZpbGVUeXBlfG9yZGVyVHlwZXx1dHRvblR5cGV8ZXplbFN0eWxlfGFja2luZ1N0b3JlVHlwZXxyb3dzZXJDb2x1bW5SZXNpemluZ1R5cGUpfFMoPzpjcig/Om9sbCg/OmVyKD86UGFydHxBcnJvdyl8QXJyb3dQb3NpdGlvbil8ZWVuQXV4aWxpYXJ5T3BhcXVlKXx0cmluZ0VuY29kaW5nfGl6ZXxvY2tldE5hdGl2ZUhhbmRsZXxlbGVjdGlvbig/OkdyYW51bGFyaXR5fERpcmVjdGlvbnxBZmZpbml0eSl8d2FwcGVkKD86RG91YmxlfEZsb2F0KXxhdmVPcGVyYXRpb25UeXBlKXxIYSg/OnNoKD86VGFibGV8RW51bWVyYXRvcil8bmRsZXIoPzoyKT8pfEMoPzpvKD86bnRyb2woPzpTaXplfFRpbnQpfG1wKD86b3NpdGluZ09wZXJhdGlvbnxhcmlzb25SZXN1bHQpKXxlbGwoPzpTdGF0ZXxUeXBlfEltYWdlUG9zaXRpb258QXR0cmlidXRlKSl8VCg/OmhyZWFkUHJpdmF0ZXx5cGVzZXR0ZXJHbHlwaEluZm98aSg/OmNrTWFya1Bvc2l0aW9ufHRsZVBvc2l0aW9ufG1lSW50ZXJ2YWwpfG8oPzpvbCg/OlRpcFRhZ3xiYXIoPzpTaXplTW9kZXxEaXNwbGF5TW9kZSkpfGtlblN0eWxlKXxJRkZDb21wcmVzc2lvbnxleHQoPzpUYWJUeXBlfEFsaWdubWVudCl8YWIoPzpTdGF0ZXxsZVZpZXdEcm9wT3BlcmF0aW9ufFZpZXdUeXBlKXxyYWNraW5nUmVjdFRhZyl8SW1hZ2VJbnRlcnBvbGF0aW9ufFpvbmV8T3BlbkdMKD86Q29udGV4dEF1eGlsaWFyeXxQaXhlbEZvcm1hdEF1eGlsaWFyeSl8RCg/Om9jdW1lbnRDaGFuZ2VUeXBlfGF0ZVBpY2tlckVsZW1lbnRGbGFnc3xyYSg/OndlclN0YXRlfGdPcGVyYXRpb24pKXxVc2FibGVTY3JvbGxlclBhcnRzfFAoPzpvaW50fHIoPzppbnRpbmdQYWdlT3JkZXJ8b2dyZXNzSW5kaWNhdG9yKD86U3R5bGV8VGgoPzppY2tuZXNzfHJlYWRJbmZvKSkpKXxFdmVudFR5cGV8S2V5VmFsdWVPYnNlcnZpbmdPcHRpb25zfEZvKD86bnQoPzpTeW1ib2xpY1RyYWl0c3xUcmFpdE1hc2t8QWN0aW9uKXxjdXNSaW5nVHlwZSl8Vyg/OmluZG93KD86T3JkZXJpbmdNb2RlfERlcHRoKXxvcmtzcGFjZSg/Okljb25DcmVhdGlvbk9wdGlvbnN8TGF1bmNoT3B0aW9ucyl8cml0aW5nRGlyZWN0aW9uKXxMKD86aW5lQnJlYWtNb2RlfGF5b3V0KD86U3RhdHVzfERpcmVjdGlvbikpfEEoPzpuaW1hdGlvbig/OlByb2dyZXNzfEVmZmVjdCl8cHBsKD86aWNhdGlvbig/OlRlcm1pbmF0ZVJlcGx5fERlbGVnYXRlUmVwbHl8UHJpbnRSZXBseSl8ZUV2ZW50TWFuYWdlclN1c3BlbnNpb25JRCl8ZmZpbmVUcmFuc2Zvcm1TdHJ1Y3R8bGVydFN0eWxlKSkpKD86XFxiKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsic3VwcG9ydC5jb25zdGFudC5jb2NvYSJdLAogICAgICAgICAgICByZWdleDogIig/OlxcYikoTlMoPzpOb3RGb3VuZHxPcmRlcmVkKD86QXNjZW5kaW5nfERlc2NlbmRpbmd8U2FtZSkpKSg/OlxcYikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInN1cHBvcnQuY29uc3RhbnQubm90aWZpY2F0aW9uLmNvY29hLmxlb3BhcmQiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKE5TKD86TWVudURpZEJlZ2luVHJhY2tpbmd8Vmlld0RpZFVwZGF0ZVRyYWNraW5nQXJlYXMpP05vdGlmaWNhdGlvbikoPzpcXGIpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdXBwb3J0LmNvbnN0YW50Lm5vdGlmaWNhdGlvbi5jb2NvYSJdLAogICAgICAgICAgICByZWdleDogIig/OlxcYikoTlMoPzpNZW51KD86RGlkKD86UmVtb3ZlSXRlbXxTZW5kQWN0aW9ufENoYW5nZUl0ZW18RW5kVHJhY2tpbmd8QWRkSXRlbSl8V2lsbFNlbmRBY3Rpb24pfFMoPzp5c3RlbUNvbG9yc0RpZENoYW5nZXxwbGl0Vmlldyg/OkRpZFJlc2l6ZVN1YnZpZXdzfFdpbGxSZXNpemVTdWJ2aWV3cykpfEMoPzpvKD86bnQoPzpleHRIZWxwTW9kZURpZCg/OkRlYWN0aXZhdGV8QWN0aXZhdGUpfHJvbFQoPzppbnREaWRDaGFuZ2V8ZXh0RGlkKD86QmVnaW5FZGl0aW5nfENoYW5nZXxFbmRFZGl0aW5nKSkpfGxvcig/OlBhbmVsQ29sb3JEaWRDaGFuZ2V8TGlzdERpZENoYW5nZSl8bWJvQm94KD86U2VsZWN0aW9uKD86SXNDaGFuZ2luZ3xEaWRDaGFuZ2UpfFdpbGwoPzpEaXNtaXNzfFBvcFVwKSkpfGxhc3NEZXNjcmlwdGlvbk5lZWRlZEZvckNsYXNzKXxUKD86b29sYmFyKD86RGlkUmVtb3ZlSXRlbXxXaWxsQWRkSXRlbSl8ZXh0KD86U3RvcmFnZSg/OkRpZFByb2Nlc3NFZGl0aW5nfFdpbGxQcm9jZXNzRWRpdGluZyl8RGlkKD86QmVnaW5FZGl0aW5nfENoYW5nZXxFbmRFZGl0aW5nKXxWaWV3KD86RGlkQ2hhbmdlKD86U2VsZWN0aW9ufFR5cGluZ0F0dHJpYnV0ZXMpfFdpbGxDaGFuZ2VOb3RpZnlpbmdUZXh0VmlldykpfGFibGVWaWV3KD86U2VsZWN0aW9uKD86SXNDaGFuZ2luZ3xEaWRDaGFuZ2UpfENvbHVtbkRpZCg/OlJlc2l6ZXxNb3ZlKSkpfEltYWdlUmVwUmVnaXN0cnlEaWRDaGFuZ2V8T3V0bGluZVZpZXcoPzpTZWxlY3Rpb24oPzpJc0NoYW5naW5nfERpZENoYW5nZSl8Q29sdW1uRGlkKD86UmVzaXplfE1vdmUpfEl0ZW0oPzpEaWQoPzpDb2xsYXBzZXxFeHBhbmQpfFdpbGwoPzpDb2xsYXBzZXxFeHBhbmQpKSl8RHJhd2VyKD86RGlkKD86Q2xvc2V8T3Blbil8V2lsbCg/OkNsb3NlfE9wZW4pKXxQb3BVcEJ1dHRvbig/OkNlbGxXaWxsUG9wVXB8V2lsbFBvcFVwKXxWaWV3KD86R2xvYmFsRnJhbWVEaWRDaGFuZ2V8Qm91bmRzRGlkQ2hhbmdlfEYoPzpvY3VzRGlkQ2hhbmdlfHJhbWVEaWRDaGFuZ2UpKXxGb250U2V0Q2hhbmdlZHxXKD86aW5kb3coPzpEaWQoPzpSZXNpKD86emV8Z24oPzpNYWlufEtleSkpfE0oPzppbmlhdHVyaXplfG92ZSl8QmVjb21lKD86TWFpbnxLZXkpfENoYW5nZVNjcmVlbig/OnxQcm9maWxlKXxEZW1pbmlhdHVyaXplfFVwZGF0ZXxFKD86bmRTaGVldHx4cG9zZSkpfFdpbGwoPzpNKD86aW5pYXR1cml6ZXxvdmUpfEJlZ2luU2hlZXR8Q2xvc2UpKXxvcmtzcGFjZSg/OlNlc3Npb25EaWQoPzpSZXNpZ25BY3RpdmV8QmVjb21lQWN0aXZlKXxEaWQoPzpNb3VudHxUZXJtaW5hdGVBcHBsaWNhdGlvbnxVbm1vdW50fFBlcmZvcm1GaWxlT3BlcmF0aW9ufFdha2V8TGF1bmNoQXBwbGljYXRpb24pfFdpbGwoPzpTbGVlcHxVbm1vdW50fFBvd2VyT2ZmfExhdW5jaEFwcGxpY2F0aW9uKSkpfEEoPzpudGlhbGlhc1RocmVzaG9sZENoYW5nZWR8cHBsKD86aWNhdGlvbig/OkRpZCg/OlJlc2lnbkFjdGl2ZXxCZWNvbWVBY3RpdmV8SGlkZXxDaGFuZ2VTY3JlZW5QYXJhbWV0ZXJzfFUoPzpuaGlkZXxwZGF0ZSl8RmluaXNoTGF1bmNoaW5nKXxXaWxsKD86UmVzaWduQWN0aXZlfEJlY29tZUFjdGl2ZXxIaWRlfFRlcm1pbmF0ZXxVKD86bmhpZGV8cGRhdGUpfEZpbmlzaExhdW5jaGluZykpfGVFdmVudE1hbmFnZXJXaWxsUHJvY2Vzc0ZpcnN0RXZlbnQpKSlOb3RpZmljYXRpb24pKD86XFxiKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsic3VwcG9ydC5jb25zdGFudC5jb2NvYS5sZW9wYXJkIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKShOUyg/OlJ1bGVFZGl0b3IoPzpSb3dUeXBlKD86U2ltcGxlfENvbXBvdW5kKXxOZXN0aW5nTW9kZSg/OlNpKD86bmdsZXxtcGxlKXxDb21wb3VuZHxMaXN0KSl8R3JhZGllbnREcmF3cyg/OkJlZm9yZVN0YXJ0aW5nTG9jYXRpb258QWZ0ZXJFbmRpbmdMb2NhdGlvbil8TSg/OmludXNTZXRFeHByZXNzaW9uVHlwZXxhKD86Y2hQb3J0RGVhbGxvY2F0ZSg/OlJlY2VpdmVSaWdodHxTZW5kUmlnaHR8Tm9uZSl8cFRhYmxlKD86U3Ryb25nTWVtb3J5fENvcHlJbnxaZXJvaW5nV2Vha01lbW9yeXxPYmplY3RQb2ludGVyUGVyc29uYWxpdHkpKSl8Qig/Om94Q3VzdG9tfHVuZGxlRXhlY3V0YWJsZUFyY2hpdGVjdHVyZSg/Olg4NnxJMzg2fFBQQyg/OjY0KT8pfGV0d2VlblByZWRpY2F0ZU9wZXJhdG9yVHlwZXxhY2tncm91bmRTdHlsZSg/OlJhaXNlZHxEYXJrfEwoPzppZ2h0fG93ZXJlZCkpKXxTKD86dHJpbmcoPzpEcmF3aW5nVHJ1bmNhdGVzTGFzdFZpc2libGVMaW5lfEVuY29kaW5nQ29udmVyc2lvbig/OkV4dGVybmFsUmVwcmVzZW50YXRpb258QWxsb3dMb3NzeSkpfHVicXVlcnlFeHByZXNzaW9uVHlwZXxwKD86ZSg/OmVjaCg/OlNlbnRlbmNlQm91bmRhcnl8SW1tZWRpYXRlQm91bmRhcnl8V29yZEJvdW5kYXJ5KXxsbGluZ1N0YXRlKD86R3JhbW1hckZsYWd8U3BlbGxpbmdGbGFnKSl8bGl0Vmlld0RpdmlkZXJTdHlsZVRoaSg/Om58Y2spKXxlKD86cnZpY2UoPzpSZXF1ZXN0VGltZWRPdXRFcnJvcnxNKD86aXNjZWxsYW5lb3VzRXJyb3J8YWxmb3JtZWRTZXJ2aWNlRGljdGlvbmFyeUVycm9yKXxJbnZhbGlkUGFzdGVib2FyZERhdGFFcnJvcnxFcnJvck0oPzppbmltdW18YXhpbXVtKXxBcHBsaWNhdGlvbig/Ok5vdEZvdW5kRXJyb3J8TGF1bmNoRmFpbGVkRXJyb3IpKXxnbWVudFN0eWxlKD86Um91bmQoPzpSZWN0fGVkKXxTbWFsbFNxdWFyZXxDYXBzdWxlfFRleHR1cmVkKD86Um91bmRlZHxTcXVhcmUpfEF1dG9tYXRpYykpKXxIKD86VURXaW5kb3dNYXNrfGFzaFRhYmxlKD86U3Ryb25nTWVtb3J5fENvcHlJbnxaZXJvaW5nV2Vha01lbW9yeXxPYmplY3RQb2ludGVyUGVyc29uYWxpdHkpKXxOKD86b01vZGVDb2xvclBhbmVsfGV0U2VydmljZU5vQXV0b1JlbmFtZSl8Qyg/OmhhbmdlUmVkb25lfG8oPzpudGFpbnNQcmVkaWNhdGVPcGVyYXRvclR5cGV8bCg/Om9yUmVuZGVyaW5nSW50ZW50KD86UmVsYXRpdmVDb2xvcmltZXRyaWN8U2F0dXJhdGlvbnxEZWZhdWx0fFBlcmNlcHR1YWx8QWJzb2x1dGVDb2xvcmltZXRyaWMpfGxlY3RvckRpc2FibGVkT3B0aW9uKSl8ZWxsSGl0KD86Tm9uZXxDb250ZW50QXJlYXxUcmFja2FibGVBcmVhfEVkaXRhYmxlVGV4dEFyZWEpKXxUKD86aW1lWm9uZU5hbWVTdHlsZSg/OlMoPzpob3J0KD86U3RhbmRhcmR8RGF5bGlnaHRTYXZpbmcpfHRhbmRhcmQpfERheWxpZ2h0U2F2aW5nKXxleHRGaWVsZERhdGVQaWNrZXJTdHlsZXxhYmxlVmlld1NlbGVjdGlvbkhpZ2hsaWdodFN0eWxlKD86UmVndWxhcnxTb3VyY2VMaXN0KXxyYWNraW5nKD86TW91c2UoPzpNb3ZlZHxFbnRlcmVkQW5kRXhpdGVkKXxDdXJzb3JVcGRhdGV8SW5WaXNpYmxlUmVjdHxFbmFibGVkRHVyaW5nTW91c2VEcmFnfEEoPzpzc3VtZUluc2lkZXxjdGl2ZSg/OkluKD86S2V5V2luZG93fEFjdGl2ZUFwcCl8V2hlbkZpcnN0UmVzcG9uZGVyfEFsd2F5cykpKSl8SSg/Om4oPzp0ZXJzZWN0U2V0RXhwcmVzc2lvblR5cGV8ZGV4ZWRDb2xvclNwYWNlTW9kZWwpfG1hZ2VTY2FsZSg/Ok5vbmV8UHJvcG9ydGlvbmFsbHkoPzpEb3dufFVwT3JEb3duKXxBeGVzSW5kZXBlbmRlbnRseSkpfE9wZSg/Om5HTFBGQUFsbG93T2ZmbGluZVJlbmRlcmVyc3xyYXRpb25RdWV1ZSg/OkRlZmF1bHRNYXhDb25jdXJyZW50T3BlcmF0aW9uQ291bnR8UHJpb3JpdHkoPzpIaWdofE5vcm1hbHxWZXJ5KD86SGlnaHxMb3cpfExvdykpKXxEKD86aWFjcml0aWNJbnNlbnNpdGl2ZVNlYXJjaHxvd25sb2Fkc0RpcmVjdG9yeSl8VSg/Om5pb25TZXRFeHByZXNzaW9uVHlwZXxURig/OjE2KD86QmlnRW5kaWFuU3RyaW5nRW5jb2Rpbmd8U3RyaW5nRW5jb2Rpbmd8TGl0dGxlRW5kaWFuU3RyaW5nRW5jb2RpbmcpfDMyKD86QmlnRW5kaWFuU3RyaW5nRW5jb2Rpbmd8U3RyaW5nRW5jb2Rpbmd8TGl0dGxlRW5kaWFuU3RyaW5nRW5jb2RpbmcpKSl8UCg/Om9pbnRlckZ1bmN0aW9ucyg/Ok1hKD86Y2hWaXJ0dWFsTWVtb3J5fGxsb2NNZW1vcnkpfFN0cig/Om9uZ01lbW9yeXx1Y3RQZXJzb25hbGl0eSl8Qyg/OlN0cmluZ1BlcnNvbmFsaXR5fG9weUluKXxJbnRlZ2VyUGVyc29uYWxpdHl8WmVyb2luZ1dlYWtNZW1vcnl8Tyg/OnBhcXVlKD86TWVtb3J5fFBlcnNvbmFsaXR5KXxiamVjdFAoPzpvaW50ZXJQZXJzb25hbGl0eXxlcnNvbmFsaXR5KSkpfGF0KD86aFN0eWxlKD86U3RhbmRhcmR8TmF2aWdhdGlvbkJhcnxQb3BVcCl8dGVybkNvbG9yU3BhY2VNb2RlbCl8cmludFBhbmVsU2hvd3MoPzpTY2FsaW5nfENvcGllc3xPcmllbnRhdGlvbnxQKD86YSg/OnBlclNpemV8Z2UoPzpSYW5nZXxTZXR1cEFjY2Vzc29yeSkpfHJldmlldykpKXxFeGVjdXRhYmxlKD86UnVudGltZU1pc21hdGNoRXJyb3J8Tm90TG9hZGFibGVFcnJvcnxFcnJvck0oPzppbmltdW18YXhpbXVtKXxMKD86aW5rRXJyb3J8b2FkRXJyb3IpfEFyY2hpdGVjdHVyZU1pc21hdGNoRXJyb3IpfEtleVZhbHVlT2JzZXJ2aW5nT3B0aW9uKD86SW5pdGlhbHxQcmlvcil8Rig/OmkoPzpuZFBhbmVsU3Vic3RyaW5nTWF0Y2hUeXBlKD86U3RhcnRzV2l0aHxDb250YWluc3xFbmRzV2l0aHxGdWxsV29yZCl8bGVSZWFkKD86VG9vTGFyZ2VFcnJvcnxVbmtub3duU3RyaW5nRW5jb2RpbmdFcnJvcikpfG9yY2VkT3JkZXJpbmdTZWFyY2gpfFdpKD86bmRvdyg/OkJhY2tpbmdMb2NhdGlvbig/Ok1haW5NZW1vcnl8RGVmYXVsdHxWaWRlb01lbW9yeSl8U2hhcmluZyg/OlJlYWQoPzpPbmx5fFdyaXRlKXxOb25lKXxDb2xsZWN0aW9uQmVoYXZpb3IoPzpNb3ZlVG9BY3RpdmVTcGFjZXxDYW5Kb2luQWxsU3BhY2VzfERlZmF1bHQpKXxkdGhJbnNlbnNpdGl2ZVNlYXJjaCl8QWdncmVnYXRlRXhwcmVzc2lvblR5cGUpKSg/OlxcYikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInN1cHBvcnQuY29uc3RhbnQuY29jb2EiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKE5TKD86Uig/OkdCKD86TW9kZUNvbG9yUGFuZWx8Q29sb3JTcGFjZU1vZGVsKXxpZ2h0KD86TW91c2UoPzpEKD86b3duKD86TWFzayk/fHJhZ2dlZCg/Ok1hc2spPyl8VXAoPzpNYXNrKT8pfFQoPzpleHQoPzpNb3ZlbWVudHxBbGlnbm1lbnQpfGFiKD86c0JlemVsQm9yZGVyfFN0b3BUeXBlKSl8QXJyb3dGdW5jdGlvbktleSl8b3VuZCg/OlJlY3RCZXplbFN0eWxlfEJhbmtlcnN8ZWQoPzpCZXplbFN0eWxlfFRva2VuU3R5bGV8RGlzY2xvc3VyZUJlemVsU3R5bGUpfERvd258VXB8UGxhaW58TGluZSg/OkNhcFN0eWxlfEpvaW5TdHlsZSkpfHVuKD86U3RvcHBlZFJlc3BvbnNlfENvbnRpbnVlc1Jlc3BvbnNlfEFib3J0ZWRSZXNwb25zZSl8ZSg/OnMoPzppemFibGVXaW5kb3dNYXNrfGV0KD86Q3Vyc29yUmVjdHNSdW5Mb29wT3JkZXJpbmd8RnVuY3Rpb25LZXkpKXxjZSg/OnNzZWRCZXplbFN0eWxlfGl2ZXIoPzpzQ2FudEhhbmRsZUNvbW1hbmRTY3JpcHRFcnJvcnxFdmFsdWF0aW9uU2NyaXB0RXJyb3IpKXx0dXJuVGV4dE1vdmVtZW50fGRvRnVuY3Rpb25LZXl8cXVpcmVkQXJndW1lbnRzTWlzc2luZ1NjcmlwdEVycm9yfGwoPzpldmFuY3lMZXZlbEluZGljYXRvclN0eWxlfGF0aXZlKD86QmVmb3JlfEFmdGVyKSl8Z3VsYXIoPzpTcXVhcmVCZXplbFN0eWxlfENvbnRyb2xTaXplKXxtb3ZlVHJhaXRGb250QWN0aW9uKXxhKD86big/OmRvbVN1YmVsZW1lbnR8Z2VEYXRlTW9kZSl8dGluZ0xldmVsSW5kaWNhdG9yU3R5bGV8ZGlvKD86TW9kZU1hdHJpeHxCdXR0b24pKSl8Ryg/OklGRmlsZVR5cGV8bHlwaCg/OkJlbG93fEluc2NyaWJlKD86Qig/OmVsb3d8YXNlKXxPdmVyKD86c3RyaWtlfEJlbG93KXxBYm92ZSl8TGF5b3V0KD86V2l0aFByZXZpb3VzfEEoPzp0QVBvaW50fGdhaW5zdEFQb2ludCkpfEEoPzp0dHJpYnV0ZSg/OkJpZGlMZXZlbHxTb2Z0fEluc2NyaWJlfEVsYXN0aWMpfGJvdmUpKXxyKD86b292ZUJvcmRlcnxlYXRlclRoYW4oPzpDb21wYXJpc29ufE9yRXF1YWxUbyg/OkNvbXBhcmlzb258UHJlZGljYXRlT3BlcmF0b3JUeXBlKXxQcmVkaWNhdGVPcGVyYXRvclR5cGUpfGEoPzp5KD86TW9kZUNvbG9yUGFuZWx8Q29sb3JTcGFjZU1vZGVsKXxkaWVudCg/Ok5vbmV8Q29uKD86Y2F2ZSg/OlN0cm9uZ3xXZWFrKXx2ZXgoPzpTdHJvbmd8V2VhaykpKXxwaGl0ZUNvbnRyb2xUaW50KSkpfFhNTCg/Ok4oPzpvKD86dGF0aW9uRGVjbGFyYXRpb25LaW5kfGRlKD86Q29tcGFjdEVtcHR5RWxlbWVudHxJc0NEQVRBfE9wdGlvbnNOb25lfFVzZSg/OlNpbmdsZVF1b3Rlc3xEb3VibGVRdW90ZXMpfFByZSg/OnNlcnZlKD86TmFtZXNwYWNlT3JkZXJ8Qyg/OmhhcmFjdGVyUmVmZXJlbmNlc3xEQVRBKXxEVER8UHJlZml4ZXN8RSg/Om50aXRpZXN8bXB0eUVsZW1lbnRzKXxRdW90ZXN8V2hpdGVzcGFjZXxBKD86dHRyaWJ1dGVPcmRlcnxsbCkpfHR0eVByaW50KXxFeHBhbmRFbXB0eUVsZW1lbnQpKXxhbWVzcGFjZUtpbmQpfENvbW1lbnRLaW5kfFRleHRLaW5kfEludmFsaWRLaW5kfEQoPzpvY3VtZW50KD86WCg/Ok1MS2luZHxIVE1MS2luZHxJbmNsdWRlKXxIVE1MS2luZHxUKD86aWR5KD86WE1MfEhUTUwpfGV4dEtpbmQpfEluY2x1ZGVDb250ZW50VHlwZURlY2xhcmF0aW9ufFZhbGlkYXRlfEtpbmQpfFRES2luZCl8UCg/OmFyc2VyKD86R1RSZXF1aXJlZEVycm9yfFhNTERlY2xOb3QoPzpTdGFydGVkRXJyb3J8RmluaXNoZWRFcnJvcil8TWkoPzpzcGxhY2VkKD86WE1MRGVjbGFyYXRpb25FcnJvcnxDREFUQUVuZFN0cmluZ0Vycm9yKXx4ZWRDb250ZW50RGVjbE5vdCg/OlN0YXJ0ZWRFcnJvcnxGaW5pc2hlZEVycm9yKSl8Uyg/OnQoPzphbmRhbG9uZVZhbHVlRXJyb3J8cmluZ05vdCg/OlN0YXJ0ZWRFcnJvcnxDbG9zZWRFcnJvcikpfHBhY2VSZXF1aXJlZEVycm9yfGVwYXJhdG9yUmVxdWlyZWRFcnJvcil8Tig/Ok1UT0tFTlJlcXVpcmVkRXJyb3J8byg/OnQoPzphdGlvbk5vdCg/OlN0YXJ0ZWRFcnJvcnxGaW5pc2hlZEVycm9yKXxXZWxsQmFsYW5jZWRFcnJvcil8RFRERXJyb3IpfGFtZXNwYWNlRGVjbGFyYXRpb25FcnJvcnxBTUVSZXF1aXJlZEVycm9yKXxDKD86aGFyYWN0ZXJSZWYoPzpJbig/OkRUREVycm9yfFByb2xvZ0Vycm9yfEVwaWxvZ0Vycm9yKXxBdEVPRkVycm9yKXxvKD86bmRpdGlvbmFsU2VjdGlvbk5vdCg/OlN0YXJ0ZWRFcnJvcnxGaW5pc2hlZEVycm9yKXxtbWVudCg/Ok5vdEZpbmlzaGVkRXJyb3J8Q29udGFpbnNEb3VibGVIeXBoZW5FcnJvcikpfERBVEFOb3RGaW5pc2hlZEVycm9yKXxUYWdOYW1lTWlzbWF0Y2hFcnJvcnxJbig/OnRlcm5hbEVycm9yfHZhbGlkKD86SGV4Q2hhcmFjdGVyUmVmRXJyb3J8Qyg/OmhhcmFjdGVyKD86UmVmRXJyb3J8SW5FbnRpdHlFcnJvcnxFcnJvcil8b25kaXRpb25hbFNlY3Rpb25FcnJvcil8RGVjaW1hbENoYXJhY3RlclJlZkVycm9yfFVSSUVycm9yfEVuY29kaW5nKD86TmFtZUVycm9yfEVycm9yKSkpfE91dE9mTWVtb3J5RXJyb3J8RCg/Om9jdW1lbnRTdGFydEVycm9yfGVsZWdhdGVBYm9ydGVkUGFyc2VFcnJvcnxPQ1RZUEVEZWNsTm90RmluaXNoZWRFcnJvcil8VSg/OlJJKD86UmVxdWlyZWRFcnJvcnxGcmFnbWVudEVycm9yKXxuKD86ZGVjbGFyZWRFbnRpdHlFcnJvcnxwYXJzZWRFbnRpdHlFcnJvcnxrbm93bkVuY29kaW5nRXJyb3J8ZmluaXNoZWRUYWdFcnJvcikpfFAoPzpDREFUQVJlcXVpcmVkRXJyb3J8dWJsaWNJZGVudGlmaWVyUmVxdWlyZWRFcnJvcnxhcnNlZEVudGl0eVJlZig/Ok1pc3NpbmdTZW1pRXJyb3J8Tm9OYW1lRXJyb3J8SW4oPzpJbnRlcm5hbCg/OlN1YnNldEVycm9yfEVycm9yKXxQcm9sb2dFcnJvcnxFcGlsb2dFcnJvcil8QXRFT0ZFcnJvcil8cig/Om9jZXNzaW5nSW5zdHJ1Y3Rpb25Ob3QoPzpTdGFydGVkRXJyb3J8RmluaXNoZWRFcnJvcil8ZW1hdHVyZURvY3VtZW50RW5kRXJyb3IpKXxFKD86big/OmNvZGluZ05vdFN1cHBvcnRlZEVycm9yfHRpdHkoPzpSZWYoPzpJbig/OkRUREVycm9yfFByb2xvZ0Vycm9yfEVwaWxvZ0Vycm9yKXxlcmVuY2UoPzpNaXNzaW5nU2VtaUVycm9yfFdpdGhvdXROYW1lRXJyb3IpfExvb3BFcnJvcnxBdEVPRkVycm9yKXxCb3VuZGFyeUVycm9yfE5vdCg/OlN0YXJ0ZWRFcnJvcnxGaW5pc2hlZEVycm9yKXxJcyg/OlBhcmFtZXRlckVycm9yfEV4dGVybmFsRXJyb3IpfFZhbHVlUmVxdWlyZWRFcnJvcikpfHF1YWxFeHBlY3RlZEVycm9yfGxlbWVudENvbnRlbnREZWNsTm90KD86U3RhcnRlZEVycm9yfEZpbmlzaGVkRXJyb3IpfHh0KD86ZXJuYWxTKD86dGFuZGFsb25lRW50aXR5RXJyb3J8dWJzZXROb3RGaW5pc2hlZEVycm9yKXxyYUNvbnRlbnRFcnJvcil8bXB0eURvY3VtZW50RXJyb3IpfEwoPzppdGVyYWxOb3QoPzpTdGFydGVkRXJyb3J8RmluaXNoZWRFcnJvcil8VCg/OlJlcXVpcmVkRXJyb3J8U2xhc2hSZXF1aXJlZEVycm9yKXxlc3NUaGFuU3ltYm9sSW5BdHRyaWJ1dGVFcnJvcil8QXR0cmlidXRlKD86UmVkZWZpbmVkRXJyb3J8SGFzTm9WYWx1ZUVycm9yfE5vdCg/OlN0YXJ0ZWRFcnJvcnxGaW5pc2hlZEVycm9yKXxMaXN0Tm90KD86U3RhcnRlZEVycm9yfEZpbmlzaGVkRXJyb3IpKSl8cm9jZXNzaW5nSW5zdHJ1Y3Rpb25LaW5kKXxFKD86bnRpdHkoPzpHZW5lcmFsS2luZHxEZWNsYXJhdGlvbktpbmR8VW5wYXJzZWRLaW5kfFAoPzphcig/OnNlZEtpbmR8YW1ldGVyS2luZCl8cmVkZWZpbmVkKSl8bGVtZW50KD86RGVjbGFyYXRpb24oPzpNaXhlZEtpbmR8VW5kZWZpbmVkS2luZHxFKD86bGVtZW50S2luZHxtcHR5S2luZCl8S2luZHxBbnlLaW5kKXxLaW5kKSl8QXR0cmlidXRlKD86Tig/Ok1Ub2tlbig/OnNLaW5kfEtpbmQpfG90YXRpb25LaW5kKXxDREFUQUtpbmR8SUQoPzpSZWYoPzpzS2luZHxLaW5kKXxLaW5kKXxEZWNsYXJhdGlvbktpbmR8RW4oPzp0aXQoPzp5S2luZHxpZXNLaW5kKXx1bWVyYXRpb25LaW5kKXxLaW5kKSl8TSg/OmkoPzpuKD86WEVkZ2V8aWF0dXJpemFibGVXaW5kb3dNYXNrfFlFZGdlfHV0ZUNhbGVuZGFyVW5pdCl8dGVyTGluZUpvaW5TdHlsZXxkZGxlU3ViZWxlbWVudHx4ZWRTdGF0ZSl8byg/Om50aENhbGVuZGFyVW5pdHxkZVN3aXRjaEZ1bmN0aW9uS2V5fHVzZSg/Ok1vdmVkKD86TWFzayk/fEUoPzpudGVyZWQoPzpNYXNrKT98dmVudFN1YnR5cGV8eGl0ZWQoPzpNYXNrKT8pKXx2ZVRvQmV6aWVyUGF0aEVsZW1lbnR8bWVudGFyeSg/OkNoYW5nZUJ1dHRvbnxQdXNoKD86QnV0dG9ufEluQnV0dG9uKXxMaWdodCg/OkJ1dHRvbik/KSl8ZW51RnVuY3Rpb25LZXl8YSg/OmMoPzppbnRvc2hJbnRlcmZhY2VTdHlsZXxPU1JvbWFuU3RyaW5nRW5jb2RpbmcpfHRjaGVzUHJlZGljYXRlT3BlcmF0b3JUeXBlfHBwZWRSZWFkfHgoPzpYRWRnZXxZRWRnZSkpfEFDSE9wZXJhdGluZ1N5c3RlbSl8Qig/Ok1QRmlsZVR5cGV8byg/OnR0b21UYWJzQmV6ZWxCb3JkZXJ8bGRGb250TWFza3xyZGVybGVzc1dpbmRvd01hc2t8eCg/OlNlKD86Y29uZGFyeXxwYXJhdG9yKXxPbGRTdHlsZXxQcmltYXJ5KSl8dXR0TGluZUNhcFN0eWxlfGUoPzp6ZWxCb3JkZXJ8dmVsTGluZUpvaW5TdHlsZXxsb3coPzpCb3R0b218VG9wKXxnaW4oPzpzV2l0aCg/OkNvbXBhcmlzb258UHJlZGljYXRlT3BlcmF0b3JUeXBlKXxGdW5jdGlvbktleSkpfGx1ZUNvbnRyb2xUaW50fGFjayg/OnNwYWNlQ2hhcmFjdGVyfHRhYlRleHRNb3ZlbWVudHxpbmdTdG9yZSg/OlJldGFpbmVkfEJ1ZmZlcmVkfE5vbnJldGFpbmVkKXxUYWJDaGFyYWN0ZXJ8d2FyZHNTZWFyY2h8Z3JvdW5kVGFiKXxyKD86b3dzZXIoPzpOb0NvbHVtblJlc2l6aW5nfFVzZXJDb2x1bW5SZXNpemluZ3xBdXRvQ29sdW1uUmVzaXppbmcpfGVha0Z1bmN0aW9uS2V5KSl8Uyg/OmgoPzppZnQoPzpKSVNTdHJpbmdFbmNvZGluZ3xLZXlNYXNrKXxvdyg/OkNvbnRyb2xHbHlwaHN8SW52aXNpYmxlR2x5cGhzKXxhZG93bGVzc1NxdWFyZUJlemVsU3R5bGUpfHkoPzpzKD86UmVxRnVuY3Rpb25LZXl8dGVtKD86RCg/Om9tYWluTWFza3xlZmluZWQoPzpNYXNrKT8pfEZ1bmN0aW9uS2V5KSl8bWJvbFN0cmluZ0VuY29kaW5nKXxjKD86YSg/Om5uZWRPcHRpb258bGUoPzpOb25lfFRvRml0fFByb3BvcnRpb25hbGx5KSl8cig/Om9sbCg/OmVyKD86Tm9QYXJ0fEluY3JlbWVudCg/OlBhZ2V8TGluZXxBcnJvdyl8RGVjcmVtZW50KD86UGFnZXxMaW5lfEFycm93KXxLbm9iKD86U2xvdCk/fEFycm93cyg/Ok0oPzppbkVuZHxheEVuZCl8Tm9uZXxEZWZhdWx0U2V0dGluZykpfFdoZWVsKD86TWFzayk/fExvY2tGdW5jdGlvbktleSl8ZWVuQ2hhbmdlZEV2ZW50VHlwZSkpfHQoPzpvcEZ1bmN0aW9uS2V5fHIoPzppbmdEcmF3aW5nKD86T25lU2hvdHxEaXNhYmxlU2NyZWVuRm9udFN1YnN0aXR1dGlvbnxVc2VzKD86RGV2aWNlTWV0cmljc3xGb250TGVhZGluZ3xMaW5lRnJhZ21lbnRPcmlnaW4pKXxlYW0oPzpTdGF0dXMoPzpSZWFkaW5nfE5vdE9wZW58Q2xvc2VkfE9wZW4oPzppbmcpP3xFcnJvcnxXcml0aW5nfEF0RW5kKXxFdmVudCg/Okhhcyg/OkJ5dGVzQXZhaWxhYmxlfFNwYWNlQXZhaWxhYmxlKXxOb25lfE9wZW5Db21wbGV0ZWR8RSg/Om5kRW5jb3VudGVyZWR8cnJvck9jY3VycmVkKSkpKSl8aSg/Om5nbGUoPzpEYXRlTW9kZXxVbmRlcmxpbmVTdHlsZSl8emUoPzpEb3duRm9udEFjdGlvbnxVcEZvbnRBY3Rpb24pKXxvbGFyaXNPcGVyYXRpbmdTeXN0ZW18dW5PU09wZXJhdGluZ1N5c3RlbXxwZWNpYWxQYWdlT3JkZXJ8ZSg/OmNvbmRDYWxlbmRhclVuaXR8bGVjdCg/OkJ5KD86Q2hhcmFjdGVyfFBhcmFncmFwaHxXb3JkKXxpKD86bmcoPzpOZXh0fFByZXZpb3VzKXxvbkFmZmluaXR5KD86RG93bnN0cmVhbXxVcHN0cmVhbSkpfGVkVGFifEZ1bmN0aW9uS2V5KXxnbWVudFN3aXRjaFRyYWNraW5nKD86TW9tZW50YXJ5fFNlbGVjdCg/Ok9uZXxBbnkpKSl8cXVhcmVMaW5lQ2FwU3R5bGV8d2l0Y2hCdXR0b258YXZlKD86VG9PcGVyYXRpb258T3AoPzp0aW9ucyg/Olllc3xOb3xBc2spfGVyYXRpb24pfEFzT3BlcmF0aW9uKXxtYWxsKD86U3F1YXJlQmV6ZWxTdHlsZXxDKD86b250cm9sU2l6ZXxhcHNGb250TWFzayl8SWNvbkJ1dHRvbkJlemVsU3R5bGUpKXxIKD86aWdobGlnaHRNb2RlTWF0cml4fFNCTW9kZUNvbG9yUGFuZWx8byg/OnVyKD86TWludXRlKD86U2Vjb25kRGF0ZVBpY2tlckVsZW1lbnRGbGFnfERhdGVQaWNrZXJFbGVtZW50RmxhZyl8Q2FsZW5kYXJVbml0KXxyaXpvbnRhbFJ1bGVyfG1lRnVuY3Rpb25LZXkpfFRUUENvb2tpZUFjY2VwdFBvbGljeSg/Ok5ldmVyfE9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWlufEFsd2F5cyl8ZSg/OmxwKD86QnV0dG9uQmV6ZWxTdHlsZXxLZXlNYXNrfEZ1bmN0aW9uS2V5KXxhdmllckZvbnRBY3Rpb24pfFBVWE9wZXJhdGluZ1N5c3RlbSl8WWVhcig/Ok1vbnRoRGEoPzp5RGF0ZVBpY2tlckVsZW1lbnRGbGFnfHRlUGlja2VyRWxlbWVudEZsYWcpfENhbGVuZGFyVW5pdCl8Tig/Om8oPzpuKD86U3RhbmRhcmRDaGFyYWN0ZXJTZXRGb250TWFza3xaZXJvV2luZGluZ1J1bGV8YWN0aXZhdGluZ1BhbmVsTWFza3xMb3NzeUFTQ0lJU3RyaW5nRW5jb2RpbmcpfEJvcmRlcnx0KD86aWZpY2F0aW9uKD86U3VzcGVuc2lvbkJlaGF2aW9yKD86SG9sZHxDb2FsZXNjZXxEKD86ZWxpdmVySW1tZWRpYXRlbHl8cm9wKSl8Tm9Db2FsZXNjaW5nfENvYWxlc2NpbmdPbig/OlNlbmRlcnxOYW1lKXxEZWxpdmVySW1tZWRpYXRlbHl8UG9zdFRvQWxsU2Vzc2lvbnMpfFByZWRpY2F0ZVR5cGV8RXF1YWxUb1ByZWRpY2F0ZU9wZXJhdG9yVHlwZSl8Uyg/OmNyKD86aXB0RXJyb3J8b2xsZXJQYXJ0cyl8dWJlbGVtZW50fHBlY2lmaWVyRXJyb3IpfENlbGxNYXNrfFQoPzppdGxlfG9wTGV2ZWxDb250YWluZXJzU3BlY2lmaWVyRXJyb3J8YWJzKD86QmV6ZWxCb3JkZXJ8Tm9Cb3JkZXJ8TGluZUJvcmRlcikpfEkoPzpudGVyZmFjZVN0eWxlfG1hZ2UpfFVuZGVybGluZVN0eWxlfEZvbnRDaGFuZ2VBY3Rpb24pfHUoPzpsbCg/OkdseXBofENlbGxUeXBlKXxtKD86ZXJpYyg/OlNlYXJjaHxQYWRLZXlNYXNrKXxiZXJGb3JtYXR0ZXIoPzpSb3VuZCg/OkhhbGYoPzpEb3dufFVwfEV2ZW4pfENlaWxpbmd8RG93bnxVcHxGbG9vcil8QmVoYXZpb3IoPzoxMHxEZWZhdWx0KXxTKD86Y2llbnRpZmljU3R5bGV8cGVsbE91dFN0eWxlKXxOb1N0eWxlfEN1cnJlbmN5U3R5bGV8RGVjaW1hbFN0eWxlfFAoPzplcmNlbnRTdHlsZXxhZCg/OkJlZm9yZSg/OlN1ZmZpeHxQcmVmaXgpfEFmdGVyKD86U3VmZml4fFByZWZpeCkpKSkpKXxlKD86dCg/OlNlcnZpY2VzKD86QmFkQXJndW1lbnRFcnJvcnxOb3RGb3VuZEVycm9yfEMoPzpvbGxpc2lvbkVycm9yfGFuY2VsbGVkRXJyb3IpfFRpbWVvdXRFcnJvcnxJbnZhbGlkRXJyb3J8VW5rbm93bkVycm9yfEFjdGl2aXR5SW5Qcm9ncmVzcyl8d29ya0RvbWFpbk1hc2spfHdsaW5lQ2hhcmFjdGVyfHh0KD86U3RlcEludGVyZmFjZVN0eWxlfEZ1bmN0aW9uS2V5KSl8RVhUU1RFUFN0cmluZ0VuY29kaW5nfGEoPzp0KD86aXZlU2hvcnRHbHlwaFBhY2tpbmd8dXJhbFRleHRBbGlnbm1lbnQpfHJyb3dGb250TWFzaykpfEMoPzpoYW5nZSg/OlJlYWRPdGhlckNvbnRlbnRzfEdyYXlDZWxsKD86TWFzayk/fEJhY2tncm91bmRDZWxsKD86TWFzayk/fENsZWFyZWR8RG9uZXxVbmRvbmV8QXV0b3NhdmVkKXxNWUsoPzpNb2RlQ29sb3JQYW5lbHxDb2xvclNwYWNlTW9kZWwpfGlyY3VsYXIoPzpCZXplbFN0eWxlfFNsaWRlcil8byg/Om4oPzpzdGFudFZhbHVlRXhwcmVzc2lvblR5cGV8dCg/OmludW91c0NhcGFjaXR5TGV2ZWxJbmRpY2F0b3JTdHlsZXxlbnRzQ2VsbE1hc2t8YWluKD86c0NvbXBhcmlzb258ZXJTcGVjaWZpZXJFcnJvcil8cm9sKD86R2x5cGh8S2V5TWFzaykpfGRlbnNlZEZvbnRNYXNrKXxsb3IoPzpQYW5lbCg/OlJHQk1vZGVNYXNrfEdyYXlNb2RlTWFza3xIU0JNb2RlTWFza3xDKD86TVlLTW9kZU1hc2t8b2xvckxpc3RNb2RlTWFza3x1c3RvbVBhbGV0dGVNb2RlTWFza3xyYXlvbk1vZGVNYXNrKXxXaGVlbE1vZGVNYXNrfEFsbE1vZGVzTWFzayl8TGlzdE1vZGVDb2xvclBhbmVsKXxyZVNlcnZpY2VEaXJlY3Rvcnl8bSg/OnAoPzpvc2l0ZSg/OlhPUnxTb3VyY2UoPzpJbnxPKD86dXR8dmVyKXxBdG9wKXxIaWdobGlnaHR8Qyg/Om9weXxsZWFyKXxEZXN0aW5hdGlvbig/OklufE8oPzp1dHx2ZXIpfEF0b3ApfFBsdXMoPzpEYXJrZXJ8TGlnaHRlcikpfHJlc3NlZEZvbnRNYXNrKXxtYW5kS2V5TWFzaykpfHUoPzpzdG9tKD86U2VsZWN0b3JQcmVkaWNhdGVPcGVyYXRvclR5cGV8UGFsZXR0ZU1vZGVDb2xvclBhbmVsKXxyKD86c29yKD86VXBkYXRlKD86TWFzayk/fFBvaW50aW5nRGV2aWNlKXx2ZVRvQmV6aWVyUGF0aEVsZW1lbnQpKXxlKD86bnRlclQoPzpleHRBbGlnbm1lbnR8YWJTdG9wVHlwZSl8bGwoPzpTdGF0ZXxIKD86aWdobGlnaHRlZHxhcyg/OkltYWdlKD86SG9yaXpvbnRhbHxPbkxlZnRPckJvdHRvbSl8T3ZlcmxhcHBpbmdJbWFnZSkpfENoYW5nZXNDb250ZW50c3xJcyg/OkJvcmRlcmVkfEluc2V0QnV0dG9uKXxEaXNhYmxlZHxFZGl0YWJsZXxMaWdodHNCeSg/OkdyYXl8QmFja2dyb3VuZHxDb250ZW50cyl8QWxsb3dzTWl4ZWRTdGF0ZSkpfGwoPzppcFBhZ2luYXRpb258byg/OnMoPzplUGF0aEJlemllclBhdGhFbGVtZW50fGFibGVXaW5kb3dNYXNrKXxja0FuZENhbGVuZGFyRGF0ZVBpY2tlclN0eWxlKXxlYXIoPzpDb250cm9sVGludHxEaXNwbGF5RnVuY3Rpb25LZXl8TGluZUZ1bmN0aW9uS2V5KSl8YSg/OnNlSW5zZW5zaXRpdmUoPzpTZWFyY2h8UHJlZGljYXRlT3B0aW9uKXxuKD86bm90Q3JlYXRlU2NyaXB0Q29tbWFuZEVycm9yfGNlbCg/OkJ1dHRvbnxUZXh0TW92ZW1lbnQpKXxjaGVzRGlyZWN0b3J5fGxjdWxhdGlvbig/Ok5vRXJyb3J8T3ZlcmZsb3d8RGl2aWRlQnlaZXJvfFVuZGVyZmxvd3xMb3NzT2ZQcmVjaXNpb24pfHJyaWFnZVJldHVybkNoYXJhY3Rlcil8cig/Oml0aWNhbCg/OlJlcXVlc3R8QWxlcnRTdHlsZSl8YXlvbk1vZGVDb2xvclBhbmVsKSl8VCg/OmhpY2soPzpTcXVhcmVCZXplbFN0eWxlfGVyU3F1YXJlQmV6ZWxTdHlsZSl8eXBlc2V0dGVyKD86QmVoYXZpb3J8SG9yaXpvbnRhbFRhYkFjdGlvbnxDb250YWluZXJCcmVha0FjdGlvbnxaZXJvQWR2YW5jZW1lbnRBY3Rpb258T3JpZ2luYWxCZWhhdmlvcnxQYXJhZ3JhcGhCcmVha0FjdGlvbnxXaGl0ZXNwYWNlQWN0aW9ufEwoPzppbmVCcmVha0FjdGlvbnxhdGVzdEJlaGF2aW9yKSl8aSg/OmNrTWFyayg/OlJpZ2h0fEJlbG93fExlZnR8QWJvdmUpfHRsZWRXaW5kb3dNYXNrfG1lWm9uZURhdGVQaWNrZXJFbGVtZW50RmxhZyl8byg/Om9sYmFySXRlbVZpc2liaWxpdHlQcmlvcml0eSg/OlN0YW5kYXJkfEhpZ2h8VXNlcnxMb3cpfHBUYWJzQmV6ZWxCb3JkZXJ8Z2dsZUJ1dHRvbil8SUZGKD86Q29tcHJlc3Npb24oPzpOKD86b25lfEVYVCl8Q0NJVFRGQVgoPzozfDQpfE9sZEpQRUd8SlBFR3xQYWNrQml0c3xMWlcpfEZpbGVUeXBlKXxlKD86cm1pbmF0ZSg/Ok5vd3xDYW5jZWx8TGF0ZXIpfHh0KD86UmVhZCg/OkluYXBwbGljYWJsZURvY3VtZW50VHlwZUVycm9yfFdyaXRlRXJyb3JNKD86aW5pbXVtfGF4aW11bSkpfEJsb2NrKD86TSg/OmkoPzpuaW11bSg/OkhlaWdodHxXaWR0aCl8ZGRsZUFsaWdubWVudCl8YSg/OnJnaW58eGltdW0oPzpIZWlnaHR8V2lkdGgpKSl8Qig/Om8oPzp0dG9tQWxpZ25tZW50fHJkZXIpfGFzZWxpbmVBbGlnbm1lbnQpfEhlaWdodHxUb3BBbGlnbm1lbnR8UCg/OmVyY2VudGFnZVZhbHVlVHlwZXxhZGRpbmcpfFdpZHRofEFic29sdXRlVmFsdWVUeXBlKXxTdG9yYWdlRWRpdGVkKD86Q2hhcmFjdGVyc3xBdHRyaWJ1dGVzKXxDZWxsVHlwZXx1cmVkKD86Um91bmRlZEJlemVsU3R5bGV8QmFja2dyb3VuZFdpbmRvd01hc2t8U3F1YXJlQmV6ZWxTdHlsZSl8VGFibGUoPzpGaXhlZExheW91dEFsZ29yaXRobXxBdXRvbWF0aWNMYXlvdXRBbGdvcml0aG0pfEZpZWxkKD86Um91bmRlZEJlemVsfFNxdWFyZUJlemVsfEFuZFN0ZXBwZXJEYXRlUGlja2VyU3R5bGUpfFdyaXRlSW5hcHBsaWNhYmxlRG9jdW1lbnRUeXBlRXJyb3J8TGlzdFByZXBlbmRFbmNsb3NpbmdNYXJrZXIpKXx3b0J5dGVHbHlwaFBhY2tpbmd8YWIoPzpDaGFyYWN0ZXJ8VGV4dE1vdmVtZW50fGxlKD86dFAoPzpvaW50KD86TWFza3xFdmVudFN1YnR5cGUpP3xyb3hpbWl0eSg/Ok1hc2t8RXZlbnRTdWJ0eXBlKT8pfENvbHVtbig/Ok5vUmVzaXppbmd8VXNlclJlc2l6aW5nTWFza3xBdXRvcmVzaXppbmdNYXNrKXxWaWV3KD86UmV2ZXJzZVNlcXVlbnRpYWxDb2x1bW5BdXRvcmVzaXppbmdTdHlsZXxHcmlkTm9uZXxTKD86b2xpZCg/Okhvcml6b250YWxHcmlkTGluZU1hc2t8VmVydGljYWxHcmlkTGluZU1hc2spfGVxdWVudGlhbENvbHVtbkF1dG9yZXNpemluZ1N0eWxlKXxOb0NvbHVtbkF1dG9yZXNpemluZ3xVbmlmb3JtQ29sdW1uQXV0b3Jlc2l6aW5nU3R5bGV8Rmlyc3RDb2x1bW5Pbmx5QXV0b3Jlc2l6aW5nU3R5bGV8TGFzdENvbHVtbk9ubHlBdXRvcmVzaXppbmdTdHlsZSkpKXxyYWNrTW9kZU1hdHJpeCl8SSg/Om4oPzpzZXJ0KD86Q2hhckZ1bmN0aW9uS2V5fEZ1bmN0aW9uS2V5fExpbmVGdW5jdGlvbktleSl8dCg/OlR5cGV8ZXJuYWxTKD86Y3JpcHRFcnJvcnxwZWNpZmllckVycm9yKSl8ZGV4U3ViZWxlbWVudHx2YWxpZEluZGV4U3BlY2lmaWVyRXJyb3J8Zm9ybWF0aW9uYWwoPzpSZXF1ZXN0fEFsZXJ0U3R5bGUpfFByZWRpY2F0ZU9wZXJhdG9yVHlwZSl8dGFsaWNGb250TWFza3xTTyg/OjIwMjJKUFN0cmluZ0VuY29kaW5nfExhdGluKD86MVN0cmluZ0VuY29kaW5nfDJTdHJpbmdFbmNvZGluZykpfGRlbnRpdHlNYXBwaW5nQ2hhcmFjdGVyQ29sbGVjdGlvbnxsbGVnYWxUZXh0TW92ZW1lbnR8bWFnZSg/OlIoPzppZ2h0fGVwKD86TWF0Y2hlc0RldmljZXxMb2FkU3RhdHVzKD86UmVhZGluZ0hlYWRlcnxDb21wbGV0ZWR8SW52YWxpZERhdGF8VW4oPzpleHBlY3RlZEVPRnxrbm93blR5cGUpfFdpbGxOZWVkQWxsRGF0YSkpKXxCZWxvd3xDKD86ZWxsVHlwZXxhY2hlKD86QnlTaXplfE5ldmVyfERlZmF1bHR8QWx3YXlzKSl8SW50ZXJwb2xhdGlvbig/OkhpZ2h8Tm9uZXxEZWZhdWx0fExvdyl8Tyg/Om5seXx2ZXJsYXBzKXxGcmFtZSg/OkdyKD86b292ZXxheUJlemVsKXxCdXR0b258Tm9uZXxQaG90byl8TCg/Om9hZFN0YXR1cyg/OlJlYWRFcnJvcnxDKD86b21wbGV0ZWR8YW5jZWxsZWQpfEludmFsaWREYXRhfFVuZXhwZWN0ZWRFT0YpfGVmdCl8QSg/OmxpZ24oPzpSaWdodHxCb3R0b20oPzpSaWdodHxMZWZ0KT98Q2VudGVyfFRvcCg/OlJpZ2h0fExlZnQpP3xMZWZ0KXxib3ZlKSkpfE8oPzpuKD86U3RhdGV8ZUJ5dGVHbHlwaFBhY2tpbmd8T2ZmQnV0dG9ufGx5U2Nyb2xsZXJBcnJvd3MpfHRoZXIoPzpNb3VzZSg/OkQoPzpvd24oPzpNYXNrKT98cmFnZ2VkKD86TWFzayk/KXxVcCg/Ok1hc2spPyl8VGV4dE1vdmVtZW50KXxTRjFPcGVyYXRpbmdTeXN0ZW18cGUoPzpuKD86R0woPzpHTyg/OlJlKD86c2V0TGlicmFyeXx0YWluUmVuZGVyZXJzKXxDbGVhckZvcm1hdENhY2hlfEZvcm1hdENhY2hlU2l6ZSl8UEZBKD86Uig/Om9idXN0fGVuZGVyZXJJRCl8TSg/OmluaW11bVBvbGljeXx1bHRpKD86c2FtcGxlfFNjcmVlbil8UFNhZmV8YXhpbXVtUG9saWN5KXxCYWNraW5nU3RvcmV8Uyg/OmNyZWVuTWFza3x0ZSg/Om5jaWxTaXplfHJlbyl8aW5nbGVSZW5kZXJlcnx1cGVyc2FtcGxlfGFtcGxlKD86c3xCdWZmZXJzfEFscGhhKSl8Tm9SZWNvdmVyeXxDKD86byg/Omxvcig/OlNpemV8RmxvYXQpfG1wbGlhbnQpfGxvc2VzdFBvbGljeSl8T2ZmU2NyZWVufEQoPzpvdWJsZUJ1ZmZlcnxlcHRoU2l6ZSl8UGl4ZWxCdWZmZXJ8VmlydHVhbFNjcmVlbkNvdW50fEZ1bGxTY3JlZW58V2luZG93fEEoPzpjYyg/OnVtU2l6ZXxlbGVyYXRlZCl8dXgoPzpCdWZmZXJzfERlcHRoU3RlbmNpbCl8bCg/OnBoYVNpemV8bFJlbmRlcmVycykpKSl8U3RlcFVuaWNvZGVSZXNlcnZlZEJhc2UpfHJhdGlvbk5vdFN1cHBvcnRlZEZvcktleVMoPzpjcmlwdEVycm9yfHBlY2lmaWVyRXJyb3IpKXxmZlN0YXRlfEtCdXR0b258clByZWRpY2F0ZVR5cGV8YmpDKD86Qig/Oml0ZmllbGR8b29sVHlwZSl8Uyg/OmhvcnRUeXBlfHRyKD86aW5nVHlwZXx1Y3RUeXBlKXxlbGVjdG9yVHlwZSl8Tm9UeXBlfENoYXJUeXBlfE9iamVjdFR5cGV8RG91YmxlVHlwZXxVbmlvblR5cGV8UG9pbnRlclR5cGV8Vm9pZFR5cGV8RmxvYXRUeXBlfExvbmcoPzpUeXBlfGxvbmdUeXBlKXxBcnJheVR5cGUpKXxEKD86aSg/OnMoPzpjKD86bG9zdXJlQmV6ZWxTdHlsZXxyZXRlQ2FwYWNpdHlMZXZlbEluZGljYXRvclN0eWxlKXxwbGF5V2luZG93UnVuTG9vcE9yZGVyaW5nKXxhY3JpdGljSW5zZW5zaXRpdmVQcmVkaWNhdGVPcHRpb258cmVjdCg/OlNlbGVjdGlvbnxQcmVkaWNhdGVNb2RpZmllcikpfG8oPzpjKD86TW9kYWxXaW5kb3dNYXNrfHVtZW50KD86RGlyZWN0b3J5fGF0aW9uRGlyZWN0b3J5KSl8dWJsZVR5cGV8d24oPzpUZXh0TW92ZW1lbnR8QXJyb3dGdW5jdGlvbktleSkpfGUoPzpzKD86Y2VuZGluZ1BhZ2VPcmRlcnxrdG9wRGlyZWN0b3J5KXxjaW1hbFRhYlN0b3BUeXBlfHYoPzppY2UoPzpOQ29sb3JTcGFjZU1vZGVsfEluZGVwZW5kZW50TW9kaWZpZXJGbGFnc01hc2spfGVsb3Blcig/OkRpcmVjdG9yeXxBcHBsaWNhdGlvbkRpcmVjdG9yeSkpfGZhdWx0KD86Q29udHJvbFRpbnR8VG9rZW5TdHlsZSl8bGV0ZSg/OkNoYXIoPzphY3RlcnxGdW5jdGlvbktleSl8RnVuY3Rpb25LZXl8TGluZUZ1bmN0aW9uS2V5KXxtb0FwcGxpY2F0aW9uRGlyZWN0b3J5KXxhKD86eUNhbGVuZGFyVW5pdHx0ZUZvcm1hdHRlcig/Ok1lZGl1bVN0eWxlfEJlaGF2aW9yKD86MTB8RGVmYXVsdCl8U2hvcnRTdHlsZXxOb1N0eWxlfEZ1bGxTdHlsZXxMb25nU3R5bGUpKXxyYSg/Ondlcig/OkNsb3MoPzppbmdTdGF0ZXxlZFN0YXRlKXxPcGVuKD86aW5nU3RhdGV8U3RhdGUpKXxnT3BlcmF0aW9uKD86R2VuZXJpY3xNb3ZlfE5vbmV8Q29weXxEZWxldGV8UHJpdmF0ZXxFdmVyeXxMaW5rfEFsbCkpKXxVKD86c2VyKD86Q2FuY2VsbGVkRXJyb3J8RCg/OmlyZWN0b3J5fG9tYWluTWFzayl8RnVuY3Rpb25LZXkpfFJMKD86SGFuZGxlKD86Tm90TG9hZGVkfExvYWQoPzpTdWNjZWVkZWR8SW5Qcm9ncmVzc3xGYWlsZWQpKXxDcmVkZW50aWFsUGVyc2lzdGVuY2UoPzpOb25lfFBlcm1hbmVudHxGb3JTZXNzaW9uKSl8big/OnNjYWxlZFdpbmRvd01hc2t8Y2FjaGVkUmVhZHxpKD86Y29kZVN0cmluZ0VuY29kaW5nfHRhbGljRm9udE1hc2t8ZmllZFRpdGxlQW5kVG9vbGJhcldpbmRvd01hc2spfGQoPzpvKD86Q2xvc2VHcm91cGluZ1J1bkxvb3BPcmRlcmluZ3xGdW5jdGlvbktleSl8ZSg/OmZpbmVkRGF0ZUNvbXBvbmVudHxybGluZSg/OlN0eWxlKD86U2luZ2xlfE5vbmV8VGhpY2t8RG91YmxlKXxQYXR0ZXJuKD86U29saWR8RCg/Om90fGFzaCg/OkRvdCg/OkRvdCk/KT8pKSkpKXxrbm93big/OkNvbG9yU3BhY2VNb2RlbHxQKD86b2ludGluZ0RldmljZXxhZ2VPcmRlcil8S2V5Uyg/OmNyaXB0RXJyb3J8cGVjaWZpZXJFcnJvcikpfGJvbGRGb250TWFzayl8dGlsaXR5V2luZG93TWFza3xURjhTdHJpbmdFbmNvZGluZ3xwKD86ZGF0ZVdpbmRvd3NSdW5Mb29wT3JkZXJpbmd8VGV4dE1vdmVtZW50fEFycm93RnVuY3Rpb25LZXkpKXxKKD86dXN0aWZpZWRUZXh0QWxpZ25tZW50fFBFRyg/OjIwMDBGaWxlVHlwZXxGaWxlVHlwZSl8YXBhbmVzZUVVQyg/OkdseXBoUGFja2luZ3xTdHJpbmdFbmNvZGluZykpfFAoPzpvKD86cyg/OnQoPzpOb3d8ZXJGb250TWFza3xXaGVuSWRsZXxBU0FQKXxpdGkoPzpvbig/OlJlcGxhY2V8QmUoPzpmb3JlfGdpbm5pbmcpfEVuZHxBZnRlcil8dmUoPzpJbnRUeXBlfERvdWJsZVR5cGV8RmxvYXRUeXBlKSkpfHBVcCg/Ok5vQXJyb3d8QXJyb3dBdCg/OkJvdHRvbXxDZW50ZXIpKXx3ZXJPZmZFdmVudFR5cGV8cnRyYWl0T3JpZW50YXRpb24pfE5HRmlsZVR5cGV8dXNoKD86SW5DZWxsKD86TWFzayk/fE9uUHVzaE9mZkJ1dHRvbil8ZSg/Om4oPzpUaXBNYXNrfFVwcGVyU2lkZU1hc2t8UG9pbnRpbmdEZXZpY2V8TG93ZXJTaWRlTWFzayl8cmlvZGljKD86TWFzayk/KXxQKD86Uyg/OmNhbGVGaWVsZHx0YXR1cyg/OlRpdGxlfEZpZWxkKXxhdmVCdXR0b24pfE4oPzpvdGUoPzpUaXRsZXxGaWVsZCl8YW1lKD86VGl0bGV8RmllbGQpKXxDb3BpZXNGaWVsZHxUaXRsZUZpZWxkfEltYWdlQnV0dG9ufE9wdGlvbnNCdXR0b258UCg/OmEoPzpwZXJGZWVkQnV0dG9ufGdlKD86UmFuZ2UoPzpUb3xGcm9tKXxDaG9pY2VNYXRyaXgpKXxyZXZpZXdCdXR0b24pfExheW91dEJ1dHRvbil8bGFpblRleHRUb2tlblN0eWxlfGEoPzp1c2VGdW5jdGlvbktleXxyYWdyYXBoU2VwYXJhdG9yQ2hhcmFjdGVyfGdlKD86RG93bkZ1bmN0aW9uS2V5fFVwRnVuY3Rpb25LZXkpKXxyKD86aW50KD86aW5nKD86UmVwbHlMYXRlcnxTdWNjZXNzfENhbmNlbGxlZHxGYWlsdXJlKXxTY3JlZW5GdW5jdGlvbktleXxlclRhYmxlKD86Tm90Rm91bmR8T0t8RXJyb3IpfEZ1bmN0aW9uS2V5KXxvKD86cCg/OmVydHlMaXN0KD86WE1MRm9ybWF0fE11dGFibGVDb250YWluZXJzKD86QW5kTGVhdmVzKT98QmluYXJ5Rm9ybWF0fEltbXV0YWJsZXxPcGVuU3RlcEZvcm1hdCl8cmlldGFyeVN0cmluZ0VuY29kaW5nKXxncmVzc0luZGljYXRvcig/OkJhclN0eWxlfFNwaW5uaW5nU3R5bGV8UHJlZmVycmVkKD86U21hbGxUaGlja25lc3N8VGhpY2tuZXNzfExhcmdlVGhpY2tuZXNzfEFxdWFUaGlja25lc3MpKSl8ZSg/OnNzZWRUYWJ8dkZ1bmN0aW9uS2V5KSl8TCg/OkhlaWdodEZvcm18Q2FuY2VsQnV0dG9ufFRpdGxlRmllbGR8SW1hZ2VCdXR0b258Tyg/OktCdXR0b258cmllbnRhdGlvbk1hdHJpeCl8VW5pdHNCdXR0b258UGFwZXJOYW1lQnV0dG9ufFdpZHRoRm9ybSkpfEUoPzpuKD86dGVyQ2hhcmFjdGVyfGQoPzpzV2l0aCg/OkNvbXBhcmlzb258UHJlZGljYXRlT3BlcmF0b3JUeXBlKXxGdW5jdGlvbktleSkpfHYoPzplKD86bk9kZFdpbmRpbmdSdWxlfHJ5U3ViZWxlbWVudCl8YWx1YXRlZE9iamVjdEV4cHJlc3Npb25UeXBlKXxxdWFsVG8oPzpDb21wYXJpc29ufFByZWRpY2F0ZU9wZXJhdG9yVHlwZSl8cmEoPzpzZXJQb2ludGluZ0RldmljZXxDYWxlbmRhclVuaXR8RGF0ZVBpY2tlckVsZW1lbnRGbGFnKXx4KD86Y2x1ZGUoPzoxMHxRdWlja0RyYXdFbGVtZW50c0ljb25DcmVhdGlvbk9wdGlvbil8cGFuZGVkRm9udE1hc2t8ZWN1dGVGdW5jdGlvbktleSkpfFYoPzppKD86ZXcoPzpNKD86aW4oPzpYTWFyZ2lufFlNYXJnaW4pfGF4KD86WE1hcmdpbnxZTWFyZ2luKSl8SGVpZ2h0U2l6YWJsZXxOb3RTaXphYmxlfFdpZHRoU2l6YWJsZSl8YVBhbmVsRm9udEFjdGlvbil8ZXJ0aWNhbFJ1bGVyfGEoPzpsaWRhdGlvbkVycm9yTSg/OmluaW11bXxheGltdW0pfHJpYWJsZUV4cHJlc3Npb25UeXBlKSl8S2V5KD86U3BlY2lmaWVyRXZhbHVhdGlvblNjcmlwdEVycm9yfERvd24oPzpNYXNrKT98VXAoPzpNYXNrKT98UGF0aEV4cHJlc3Npb25UeXBlfFZhbHVlKD86TWludXNTZXRNdXRhdGlvbnxTZXRTZXRNdXRhdGlvbnxDaGFuZ2UoPzpSZSg/OnBsYWNlbWVudHxtb3ZhbCl8U2V0dGluZ3xJbnNlcnRpb24pfEludGVyc2VjdFNldE11dGF0aW9ufE9ic2VydmluZ09wdGlvbig/Ok5ld3xPbGQpfFVuaW9uU2V0TXV0YXRpb258VmFsaWRhdGlvbkVycm9yKSl8UVRNb3ZpZSg/Ok5vcm1hbFBsYXliYWNrfExvb3BpbmcoPzpCYWNrQW5kRm9ydGhQbGF5YmFja3xQbGF5YmFjaykpfEYoPzoxKD86MUZ1bmN0aW9uS2V5fDdGdW5jdGlvbktleXwyRnVuY3Rpb25LZXl8OEZ1bmN0aW9uS2V5fDNGdW5jdGlvbktleXw5RnVuY3Rpb25LZXl8NEZ1bmN0aW9uS2V5fDVGdW5jdGlvbktleXxGdW5jdGlvbktleXwwRnVuY3Rpb25LZXl8NkZ1bmN0aW9uS2V5KXw3RnVuY3Rpb25LZXl8aSg/Om5kKD86UGFuZWxBY3Rpb24oPzpSZXBsYWNlKD86QSg/Om5kRmluZHxsbCg/OkluU2VsZWN0aW9uKT8pKT98Uyg/Omhvd0ZpbmRQYW5lbHxlKD86dEZpbmRTdHJpbmd8bGVjdEFsbCg/OkluU2VsZWN0aW9uKT8pKXxOZXh0fFByZXZpb3VzKXxGdW5jdGlvbktleSl8dFBhZ2luYXRpb258bGUoPzpSZWFkKD86Tm8oPzpTdWNoRmlsZUVycm9yfFBlcm1pc3Npb25FcnJvcil8Q29ycnVwdEZpbGVFcnJvcnxJbig/OnZhbGlkRmlsZU5hbWVFcnJvcnxhcHBsaWNhYmxlU3RyaW5nRW5jb2RpbmdFcnJvcil8VW4oPzpzdXBwb3J0ZWRTY2hlbWVFcnJvcnxrbm93bkVycm9yKSl8SGFuZGxpbmdQYW5lbCg/OkNhbmNlbEJ1dHRvbnxPS0J1dHRvbil8Tm9TdWNoRmlsZUVycm9yfEVycm9yTSg/OmluaW11bXxheGltdW0pfFdyaXRlKD86Tm9QZXJtaXNzaW9uRXJyb3J8SW4oPzp2YWxpZEZpbGVOYW1lRXJyb3J8YXBwbGljYWJsZVN0cmluZ0VuY29kaW5nRXJyb3IpfE91dE9mU3BhY2VFcnJvcnxVbig/OnN1cHBvcnRlZFNjaGVtZUVycm9yfGtub3duRXJyb3IpKXxMb2NraW5nRXJyb3IpfHhlZFBpdGNoRm9udE1hc2spfDIoPzoxRnVuY3Rpb25LZXl8N0Z1bmN0aW9uS2V5fDJGdW5jdGlvbktleXw4RnVuY3Rpb25LZXl8M0Z1bmN0aW9uS2V5fDlGdW5jdGlvbktleXw0RnVuY3Rpb25LZXl8NUZ1bmN0aW9uS2V5fEZ1bmN0aW9uS2V5fDBGdW5jdGlvbktleXw2RnVuY3Rpb25LZXkpfG8oPzpudCg/Ok1vKD86bm9TcGFjZVRyYWl0fGRlcm5TZXJpZnNDbGFzcyl8Qm9sZFRyYWl0fFMoPzp5bWJvbGljQ2xhc3N8Y3JpcHRzQ2xhc3N8bGFiU2VyaWZzQ2xhc3N8YW5zU2VyaWZDbGFzcyl8Qyg/Om8oPzpuZGVuc2VkVHJhaXR8bGxlY3Rpb25BcHBsaWNhdGlvbk9ubHlNYXNrKXxsYXJlbmRvblNlcmlmc0NsYXNzKXxUcmFuc2l0aW9uYWxTZXJpZnNDbGFzc3xJKD86bnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZXx0YWxpY1RyYWl0KXxPKD86bGRTdHlsZVNlcmlmc0NsYXNzfHJuYW1lbnRhbHNDbGFzcyl8RGVmYXVsdFJlbmRlcmluZ01vZGV8VSg/Om5rbm93bkNsYXNzfElPcHRpbWl6ZWRUcmFpdCl8UGFuZWwoPzpTKD86aGFkb3dFZmZlY3RNb2RlTWFza3x0KD86YW5kYXJkTW9kZXNNYXNrfHJpa2V0aHJvdWdoRWZmZWN0TW9kZU1hc2spfGl6ZU1vZGVNYXNrKXxDb2xsZWN0aW9uTW9kZU1hc2t8VGV4dENvbG9yRWZmZWN0TW9kZU1hc2t8RG9jdW1lbnRDb2xvckVmZmVjdE1vZGVNYXNrfFVuZGVybGluZUVmZmVjdE1vZGVNYXNrfEZhY2VNb2RlTWFza3xBbGwoPzpNb2Rlc01hc2t8RWZmZWN0c01vZGVNYXNrKSl8RXhwYW5kZWRUcmFpdHxWZXJ0aWNhbFRyYWl0fEYoPzphbWlseUNsYXNzTWFza3xyZWVmb3JtU2VyaWZzQ2xhc3MpfEFudGlhbGlhc2VkKD86UmVuZGVyaW5nTW9kZXxJbnRlZ2VyQWR2YW5jZW1lbnRzUmVuZGVyaW5nTW9kZSkpfGN1c1JpbmcoPzpCZWxvd3xUeXBlKD86Tm9uZXxEZWZhdWx0fEV4dGVyaW9yKXxPbmx5fEFib3ZlKXx1ckJ5dGVHbHlwaFBhY2tpbmd8cm0oPzphdHRpbmdFcnJvcig/Ok0oPzppbmltdW18YXhpbXVtKSk/fEZlZWRDaGFyYWN0ZXIpKXw4RnVuY3Rpb25LZXl8dW5jdGlvbig/OkV4cHJlc3Npb25UeXBlfEtleU1hc2spfDMoPzoxRnVuY3Rpb25LZXl8MkZ1bmN0aW9uS2V5fDNGdW5jdGlvbktleXw0RnVuY3Rpb25LZXl8NUZ1bmN0aW9uS2V5fEZ1bmN0aW9uS2V5fDBGdW5jdGlvbktleSl8OUZ1bmN0aW9uS2V5fDRGdW5jdGlvbktleXxQKD86UmV2ZXJ0QnV0dG9ufFMoPzppemUoPzpUaXRsZXxGaWVsZCl8ZXRCdXR0b24pfEN1cnJlbnRGaWVsZHxQcmV2aWV3KD86QnV0dG9ufEZpZWxkKSl8bCg/Om9hdCg/OmluZ1BvaW50U2FtcGxlc0JpdG1hcEZvcm1hdHxUeXBlKXxhZ3NDaGFuZ2VkKD86TWFzayk/KXxheEJ1dHRvbnw1RnVuY3Rpb25LZXl8NkZ1bmN0aW9uS2V5KXxXKD86aGVlbE1vZGVDb2xvclBhbmVsfGluZG93KD86cyg/Ok5UT3BlcmF0aW5nU3lzdGVtfENQMTI1KD86MVN0cmluZ0VuY29kaW5nfDJTdHJpbmdFbmNvZGluZ3wzU3RyaW5nRW5jb2Rpbmd8NFN0cmluZ0VuY29kaW5nfDBTdHJpbmdFbmNvZGluZyl8OTUoPzpJbnRlcmZhY2VTdHlsZXxPcGVyYXRpbmdTeXN0ZW0pKXxNKD86aW5pYXR1cml6ZUJ1dHRvbnxvdmVkRXZlbnRUeXBlKXxCZWxvd3xDbG9zZUJ1dHRvbnxUb29sYmFyQnV0dG9ufFpvb21CdXR0b258T3V0fERvY3VtZW50SWNvbkJ1dHRvbnxFeHBvc2VkRXZlbnRUeXBlfEFib3ZlKXxvcmtzcGFjZUxhdW5jaCg/Ok5ld0luc3RhbmNlfEluaGliaXRpbmdCYWNrZ3JvdW5kT25seXxEZWZhdWx0fFByZWZlcnJpbmdDbGFzc2ljfFdpdGhvdXRBKD86Y3RpdmF0aW9ufGRkaW5nVG9SZWNlbnRzKXxBKD86c3luY3xuZCg/OkhpZGUoPzpPdGhlcnMpP3xQcmludCl8bGxvd2luZ0NsYXNzaWNTdGFydHVwKSl8ZWVrKD86ZGF5KD86Q2FsZW5kYXJVbml0fE9yZGluYWxDYWxlbmRhclVuaXQpfENhbGVuZGFyVW5pdCl8YSg/Om50c0JpZGlMZXZlbHN8cm5pbmdBbGVydFN0eWxlKXxyKD86aXRpbmdEaXJlY3Rpb24oPzpSaWdodFRvTGVmdHxOYXR1cmFsfExlZnRUb1JpZ2h0KXxhcENhbGVuZGFyQ29tcG9uZW50cykpfEwoPzppKD86c3RNb2RlTWF0cml4fG5lKD86TW92ZXMoPzpSaWdodHxEb3dufFVwfExlZnQpfEIoPzpvcmRlcnxyZWFrQnkoPzpDKD86aGFyV3JhcHBpbmd8bGlwcGluZyl8VHJ1bmNhdGluZyg/Ok1pZGRsZXxIZWFkfFRhaWwpfFdvcmRXcmFwcGluZykpfFMoPzplcGFyYXRvckNoYXJhY3Rlcnx3ZWVwKD86UmlnaHR8RG93bnxVcHxMZWZ0KSl8VG9CZXppZXJQYXRoRWxlbWVudHxEb2VzbnRNb3ZlfGFyU2xpZGVyKXx0ZXJhbFNlYXJjaHxrZVByZWRpY2F0ZU9wZXJhdG9yVHlwZXxnaHRlckZvbnRBY3Rpb258YnJhcnlEaXJlY3RvcnkpfG9jYWxEb21haW5NYXNrfGUoPzpzc1RoYW4oPzpDb21wYXJpc29ufE9yRXF1YWxUbyg/OkNvbXBhcmlzb258UHJlZGljYXRlT3BlcmF0b3JUeXBlKXxQcmVkaWNhdGVPcGVyYXRvclR5cGUpfGZ0KD86TW91c2UoPzpEKD86b3duKD86TWFzayk/fHJhZ2dlZCg/Ok1hc2spPyl8VXAoPzpNYXNrKT8pfFQoPzpleHQoPzpNb3ZlbWVudHxBbGlnbm1lbnQpfGFiKD86c0JlemVsQm9yZGVyfFN0b3BUeXBlKSl8QXJyb3dGdW5jdGlvbktleSkpfGEoPzp5b3V0KD86UmlnaHRUb0xlZnR8Tm90RG9uZXxDYW50Rml0fE91dE9mR2x5cGhzfERvbmV8TGVmdFRvUmlnaHQpfG5kc2NhcGVPcmllbnRhdGlvbil8QUJDb2xvclNwYWNlTW9kZWwpfEEoPzpzYyg/OmlpV2l0aERvdWJsZUJ5dGVFVUNHbHlwaFBhY2tpbmd8ZW5kaW5nUGFnZU9yZGVyKXxuKD86eSg/OlR5cGV8UHJlZGljYXRlTW9kaWZpZXJ8RXZlbnRNYXNrKXxjaG9yZWRTZWFyY2h8aW1hdGlvbig/OkJsb2NraW5nfE5vbmJsb2NraW5nKD86VGhyZWFkZWQpP3xFKD86ZmZlY3QoPzpEaXNhcHBlYXJpbmdJdGVtRGVmYXVsdHxQb29mKXxhc2UoPzpJbig/Ok91dCk/fE91dCkpfExpbmVhcil8ZFByZWRpY2F0ZVR5cGUpfHQoPzpCb3R0b218dGFjaG1lbnRDaGFyYWN0ZXJ8b21pY1dyaXRlfFRvcCl8U0NJSVN0cmluZ0VuY29kaW5nfGQoPzpvYmUoPzpHQjFDaGFyYWN0ZXJDb2xsZWN0aW9ufENOUzFDaGFyYWN0ZXJDb2xsZWN0aW9ufEphcGFuKD86MUNoYXJhY3RlckNvbGxlY3Rpb258MkNoYXJhY3RlckNvbGxlY3Rpb24pfEtvcmVhMUNoYXJhY3RlckNvbGxlY3Rpb24pfGRUcmFpdEZvbnRBY3Rpb258bWluQXBwbGljYXRpb25EaXJlY3RvcnkpfHV0byg/OnNhdmVPcGVyYXRpb258UGFnaW5hdGlvbil8cHAoPzpsaWNhdGlvbig/OlN1cHBvcnREaXJlY3Rvcnl8RCg/OmlyZWN0b3J5fGUoPzpmaW5lZCg/Ok1hc2spP3xsZWdhdGVSZXBseSg/OlN1Y2Nlc3N8Q2FuY2VsfEZhaWx1cmUpfGFjdGl2YXRlZEV2ZW50VHlwZSkpfEFjdGl2YXRlZEV2ZW50VHlwZSl8S2l0RGVmaW5lZCg/Ok1hc2spPyl8bCg/OnRlcm5hdGVLZXlNYXNrfHBoYSg/OlNoaWZ0S2V5TWFza3xOb25wcmVtdWx0aXBsaWVkQml0bWFwRm9ybWF0fEZpcnN0Qml0bWFwRm9ybWF0KXxlcnQoPzpTZWNvbmRCdXR0b25SZXR1cm58VGhpcmRCdXR0b25SZXR1cm58T3RoZXJSZXR1cm58RGVmYXVsdFJldHVybnxFcnJvclJldHVybnxGaXJzdEJ1dHRvblJldHVybnxBbHRlcm5hdGVSZXR1cm4pfGwoPzpTY3JvbGxlclBhcnRzfERvbWFpbnNNYXNrfFByZWRpY2F0ZU1vZGlmaWVyfExpYnJhcmllc0RpcmVjdG9yeXxBcHBsaWNhdGlvbnNEaXJlY3RvcnkpKXxyZ3VtZW50KD86c1dyb25nU2NyaXB0RXJyb3J8RXZhbHVhdGlvblNjcmlwdEVycm9yKXxib3ZlKD86Qm90dG9tfFRvcCl8V1RFdmVudFR5cGUpKSkoPzpcXGIpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgcmVnZXg6IENfSGlnaGxpZ2h0X0ZpbGUuY0Z1bmN0aW9ucwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6IGNPYmouZ2V0S2V5d29yZHMoKSwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnNlY3Rpb24uc2NvcGUuYmVnaW4ub2JqYyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxbIiwKICAgICAgICAgICAgbmV4dDogImJyYWNrZXRlZF9jb250ZW50IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogIm1ldGEuZnVuY3Rpb24ub2JqYyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXig/Oi18XFwrKVxccyoiCiAgICAgICAgfQogICAgXSwKICAgICJjb25zdGFudF9OU1N0cmluZyI6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6IGVzY2FwZWRDb25zdFJlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiaW52YWxpZC5pbGxlZ2FsLnVua25vd24tZXNjYXBlLm9iamMiLAogICAgICAgICAgICByZWdleDogIlxcXFwuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnW14iXFxcXF0rJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXCIiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfQogICAgXSwKICAgICJwcm90b2NvbF9saXN0IjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5zZWN0aW9uLnNjb3BlLmVuZC5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICI+IiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN1cHBvcnQub3RoZXIucHJvdG9jb2wub2JqYyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXGJOUyg/OkdseXBoU3RvcmFnZXxNKD86dXRhYmxlQ29weWluZ3xlbnVJdGVtKXxDKD86aGFuZ2VTcGVsbGluZ3xvKD86ZGluZ3xweWluZ3xsb3JQaWNraW5nKD86Q3VzdG9tfERlZmF1bHQpKSl8VCg/Om9vbGJhckl0ZW1WYWxpZGF0aW9uc3xleHQoPzpJbnB1dHxBdHRhY2htZW50Q2VsbCkpfEkoPzpucHV0U2Vydig/OmljZVByb3ZpZGVyfGVyTW91c2VUcmFja2VyKXxnbm9yZU1pc3NwZWxsZWRXb3Jkcyl8T2JqKD86Q1R5cGVTZXJpYWxpemF0aW9uQ2FsbEJhY2t8ZWN0KXxEKD86ZWNpbWFsTnVtYmVyQmVoYXZpb3JzfHJhZ2dpbmdJbmZvKXxVKD86c2VySW50ZXJmYWNlVmFsaWRhdGlvbnN8UkwoPzpIYW5kbGVDbGllbnR8RG93bmxvYWREZWxlZ2F0ZXxQcm90b2NvbENsaWVudHxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNlbmRlcikpfFZhbGlkYXRlZCg/OlRvb2Jhckl0ZW18VXNlckludGVyZmFjZUl0ZW0pfExvY2tpbmcpXGIiCiAgICAgICAgfQogICAgXSwKICAgICJzZWxlY3RvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN1cHBvcnQuZnVuY3Rpb24uYW55LW1ldGhvZC5uYW1lLW9mLXBhcmFtZXRlci5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICJcXGIoPzpbYS16QS1aXzpdW1xcd10qKSsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogIlxcKSIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9CiAgICBdLAogICAgImJyYWNrZXRlZF9jb250ZW50IjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5zZWN0aW9uLnNjb3BlLmVuZC5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdXBwb3J0LmZ1bmN0aW9uLmFueS1tZXRob2Qub2JqYyJdLAogICAgICAgICAgICByZWdleDogIig/OnByZWRpY2F0ZVdpdGhGb3JtYXQ6fCBOU1ByZWRpY2F0ZSBwcmVkaWNhdGVXaXRoRm9ybWF0OikiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi5hbnktbWV0aG9kLm9iamMiLAogICAgICAgICAgICByZWdleDogIlxcdysoPzo6fCg/PV0pKSIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9CiAgICBdLAogICAgImJyYWNrZXRlZF9zdHJpbmdzIjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5zZWN0aW9uLnNjb3BlLmVuZC5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IubG9naWNhbC5wcmVkaWNhdGUuY29jb2EiLAogICAgICAgICAgICByZWdleDogIlxcYig/OkFORHxPUnxOT1R8SU4pXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJpbnZhbGlkLmlsbGVnYWwudW5rbm93bi1tZXRob2Qub2JqYyIsICJwdW5jdHVhdGlvbi5zZXBhcmF0b3IuYXJndW1lbnRzLm9iamMiXSwKICAgICAgICAgICAgcmVnZXg6ICJcXGIoXFx3KykoOikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKD86QUxMfEFOWXxTT01FfE5PTkUpXFxiIiwKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5wcmVkaWNhdGUuY29jb2EiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKD86TlVMTHxOSUx8U0VMRnxUUlVFfFlFU3xGQUxTRXxOT3xGSVJTVHxMQVNUfFNJWkUpXFxiIiwKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5wcmVkaWNhdGUuY29jb2EiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKD86TUFUQ0hFU3xDT05UQUlOU3xCRUdJTlNXSVRIfEVORFNXSVRIfEJFVFdFRU4pXFxiIiwKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmNvbXBhcmlzb24ucHJlZGljYXRlLmNvY29hIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICByZWdleDogIlxcYkMoPzpBU0VJTlNFTlNJVElWRXxJKVxcYiIsCiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vdGhlci5tb2RpZmllci5wcmVkaWNhdGUuY29jb2EiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKD86QU5ZS0VZfFNVQlFVRVJZfENBU1R8VFJVRVBSRURJQ0FURXxGQUxTRVBSRURJQ0FURSlcXGIiLAogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3RoZXIucHJlZGljYXRlLmNvY29hIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICByZWdleDogZXNjYXBlZENvbnN0UmUsCiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5vYmpjIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICByZWdleDogIlxcXFwuIiwKICAgICAgICAgICAgdG9rZW46ICJpbnZhbGlkLmlsbGVnYWwudW5rbm93bi1lc2NhcGUub2JqYyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJ1teIlxcXFxdJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5vYmpjIiwKICAgICAgICAgICAgcmVnZXg6ICJcIiIsCiAgICAgICAgICAgIG5leHQ6ICJwcmVkaWNhdGVzIgogICAgICAgIH0KICAgIF0sCiAgICAiY29tbWVudCIgOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogIi4qP1xcKlxcLyIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICB9CiAgICBdLAogICAgIm1ldGhvZHMiIDogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAibWV0YS5mdW5jdGlvbi5vYmpjIiwKICAgICAgICAgICAgcmVnZXggOiAiKD89XFx7fCMpfDsiLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0KICAgIF0KfTsKICAgIGZvciAodmFyIHIgaW4gY1J1bGVzKSB7CiAgICAgICAgaWYgKHRoaXMuJHJ1bGVzW3JdKSB7CiAgICAgICAgICAgIGlmICh0aGlzLiRydWxlc1tyXS5wdXNoKQogICAgICAgICAgICAgICAgdGhpcy4kcnVsZXNbcl0ucHVzaC5hcHBseSh0aGlzLiRydWxlc1tyXSwgY1J1bGVzW3JdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLiRydWxlc1tyXSA9IGNSdWxlc1tyXTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHRoaXMuJHJ1bGVzLmJyYWNrZXRlZF9jb250ZW50ID0gdGhpcy4kcnVsZXMuYnJhY2tldGVkX2NvbnRlbnQuY29uY2F0KAogICAgICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LCBzcGVjaWFsVmFyaWFibGVzCiAgICApOwoKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwp9OwoKb29wLmluaGVyaXRzKE9iamVjdGl2ZUNIaWdobGlnaHRSdWxlcywgQ0hpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuT2JqZWN0aXZlQ0hpZ2hsaWdodFJ1bGVzID0gT2JqZWN0aXZlQ0hpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL29iamVjdGl2ZWMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9vYmplY3RpdmVjX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgT2JqZWN0aXZlQ0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9vYmplY3RpdmVjX2hpZ2hsaWdodF9ydWxlcyIpLk9iamVjdGl2ZUNIaWdobGlnaHRSdWxlczsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBPYmplY3RpdmVDSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL29iamVjdGl2ZWMiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9vYmplY3RpdmVjIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-ocaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9vY2FtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBPY2FtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJhbmR8YXN8YXNzZXJ0fGJlZ2lufGNsYXNzfGNvbnN0cmFpbnR8ZG98ZG9uZXxkb3dudG98ZWxzZXxlbmR8IiAgKwogICAgICAgICJleGNlcHRpb258ZXh0ZXJuYWx8Zm9yfGZ1bnxmdW5jdGlvbnxmdW5jdG9yfGlmfGlufGluY2x1ZGV8IiAgICAgKwogICAgICAgICJpbmhlcml0fGluaXRpYWxpemVyfGxhenl8bGV0fG1hdGNofG1ldGhvZHxtb2R1bGV8bXV0YWJsZXxuZXd8IiAgKwogICAgICAgICJvYmplY3R8b2Z8b3Blbnxvcnxwcml2YXRlfHJlY3xzaWd8c3RydWN0fHRoZW58dG98dHJ5fHR5cGV8dmFsfCIgKwogICAgICAgICJ2aXJ0dWFsfHdoZW58d2hpbGV8d2l0aCIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoInRydWV8ZmFsc2UiKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiYWJzfGFic19iaWdfaW50fGFic19mbG9hdHxhYnNfbnVtfGFic3RyYWN0X3RhZ3xhY2NlcHR8YWNjZXNzfGFjb3N8YWRkfCIgKwogICAgICAgICJhZGRfYXZhaWxhYmxlX3VuaXRzfGFkZF9iaWdfaW50fGFkZF9idWZmZXJ8YWRkX2NoYW5uZWx8YWRkX2NoYXJ8IiArCiAgICAgICAgImFkZF9pbml0aWFsaXplcnxhZGRfaW50X2JpZ19pbnR8YWRkX2ludGVyZmFjZXN8YWRkX251bXxhZGRfc3RyaW5nfCIgKwogICAgICAgICJhZGRfc3Vic3RpdHV0ZXxhZGRfc3Vic3RyaW5nfGFsYXJtfGFsbG9jYXRlZF9ieXRlc3xhbGxvd19vbmx5fCIgKwogICAgICAgICJhbGxvd191bnNhZmVfbW9kdWxlc3xhbHdheXN8YXBwZW5kfGFwcG5hbWVfZ2V0fGFwcG5hbWVfc2V0fCIgKwogICAgICAgICJhcHByb3hfbnVtX2V4cHxhcHByb3hfbnVtX2ZpeHxhcmd8YXJndnxhcml0aF9zdGF0dXN8YXJyYXl8IiArCiAgICAgICAgImFycmF5MV9vZl9nZW5hcnJheXxhcnJheTJfb2ZfZ2VuYXJyYXl8YXJyYXkzX29mX2dlbmFycmF5fGFzaW58YXNyfCIgKwogICAgICAgICJhc3NvY3xhc3NxfGF0X2V4aXR8YXRhbnxhdGFuMnxhdXRvX3N5bmNocm9uaXplfGJhY2tncm91bmR8YmFzZW5hbWV8IiArCiAgICAgICAgImJlZ2lubmluZ19vZl9pbnB1dHxiaWdfaW50X29mX2ludHxiaWdfaW50X29mX251bXxiaWdfaW50X29mX3N0cmluZ3xiaW5kfCIgKwogICAgICAgICJiaW5kX2NsYXNzfGJpbmRfdGFnfGJpdHN8Yml0c19vZl9mbG9hdHxibGFja3xibGl0fGJsaXRfaW1hZ2V8Ymx1ZXxib29sfCIgKwogICAgICAgICJib29sX29mX3N0cmluZ3xib3VuZGVkX2Z1bGxfc3BsaXR8Ym91bmRlZF9zcGxpdHxib3VuZGVkX3NwbGl0X2RlbGltfCIgKwogICAgICAgICJicHJpbnRmfGJyZWFrfGJyb2FkY2FzdHxic2NhbmZ8YnV0dG9uX2Rvd258Y19sYXlvdXR8Y2FwaXRhbGl6ZXxjYXJkaW5hbHwiICsKICAgICAgICAiY2FyZGluYWx8Y2F0Y2h8Y2F0Y2hfYnJlYWt8Y2VpbHxjZWlsaW5nX251bXxjaGFubmVsfGNoYXJ8Y2hhcl9vZl9pbnR8IiArCiAgICAgICAgImNoZGlyfGNoZWNrfGNoZWNrX3N1ZmZpeHxjaG1vZHxjaG9vc2V8Y2hvcF9leHRlbnNpb258Y2hvcF9zdWZmaXh8Y2hvd258IiArCiAgICAgICAgImNob3dufGNocnxjaHJvb3R8Y2xhc3NpZnlfZmxvYXR8Y2xlYXJ8Y2xlYXJfYXZhaWxhYmxlX3VuaXRzfCIgKwogICAgICAgICJjbGVhcl9jbG9zZV9vbl9leGVjfGNsZWFyX2dyYXBofGNsZWFyX25vbmJsb2NrfGNsZWFyX3BhcnNlcnwiICsKICAgICAgICAiY2xvc2V8Y2xvc2V8Y2xvc2VUa3xjbG9zZV9ib3h8Y2xvc2VfZ3JhcGh8Y2xvc2VfaW58Y2xvc2VfaW5fbm9lcnJ8IiArCiAgICAgICAgImNsb3NlX291dHxjbG9zZV9vdXRfbm9lcnJ8Y2xvc2VfcHJvY2Vzc3xjbG9zZV9wcm9jZXNzfCIgKwogICAgICAgICJjbG9zZV9wcm9jZXNzX2Z1bGx8Y2xvc2VfcHJvY2Vzc19pbnxjbG9zZV9wcm9jZXNzX291dHxjbG9zZV9zdWJ3aW5kb3d8IiArCiAgICAgICAgImNsb3NlX3RhZ3xjbG9zZV90Ym94fGNsb3NlZGlyfGNsb3NlZGlyfGNsb3N1cmVfdGFnfGNvZGV8Y29tYmluZXwiICsKICAgICAgICAiY29tYmluZXxjb21iaW5lfGNvbW1hbmR8Y29tcGFjdHxjb21wYXJlfGNvbXBhcmVfYmlnX2ludHxjb21wYXJlX251bXwiICsKICAgICAgICAiY29tcGxleDMyfGNvbXBsZXg2NHxjb25jYXR8Y29uanxjb25uZWN0fGNvbnRhaW5zfGNvbnRhaW5zX2Zyb218Y29udGVudHN8IiArCiAgICAgICAgImNvcHl8Y29zfGNvc2h8Y291bnR8Y291bnR8Y291bnRlcnN8Y3JlYXRlfGNyZWF0ZV9hbGFybXxjcmVhdGVfaW1hZ2V8IiArCiAgICAgICAgImNyZWF0ZV9tYXRyaXh8Y3JlYXRlX21hdHJpeHxjcmVhdGVfbWF0cml4fGNyZWF0ZV9vYmplY3R8IiArCiAgICAgICAgImNyZWF0ZV9vYmplY3RfYW5kX3J1bl9pbml0aWFsaXplcnN8Y3JlYXRlX29iamVjdF9vcHR8Y3JlYXRlX3Byb2Nlc3N8IiArCiAgICAgICAgImNyZWF0ZV9wcm9jZXNzfGNyZWF0ZV9wcm9jZXNzX2VudnxjcmVhdGVfcHJvY2Vzc19lbnZ8Y3JlYXRlX3RhYmxlfCIgKwogICAgICAgICJjdXJyZW50fGN1cnJlbnRfZGlyX25hbWV8Y3VycmVudF9wb2ludHxjdXJyZW50X3h8Y3VycmVudF95fGN1cnZldG98IiArCiAgICAgICAgImN1c3RvbV90YWd8Y3lhbnxkYXRhX3NpemV8ZGVjcnxkZWNyX251bXxkZWZhdWx0X2F2YWlsYWJsZV91bml0c3xkZWxheXwiICsKICAgICAgICAiZGVsZXRlX2FsYXJtfGRlc2NyX29mX2luX2NoYW5uZWx8ZGVzY3Jfb2Zfb3V0X2NoYW5uZWx8ZGVzdHJveXxkaWZmfGRpbXwiICsKICAgICAgICAiZGltMXxkaW0yfGRpbTN8ZGltc3xkaXJuYW1lfGRpc3BsYXlfbW9kZXxkaXZ8ZGl2X2JpZ19pbnR8ZGl2X251bXwiICsKICAgICAgICAiZG91YmxlX2FycmF5X3RhZ3xkb3VibGVfdGFnfGRyYXdfYXJjfGRyYXdfY2hhcnxkcmF3X2NpcmNsZXxkcmF3X2VsbGlwc2V8IiArCiAgICAgICAgImRyYXdfaW1hZ2V8ZHJhd19wb2x5fGRyYXdfcG9seV9saW5lfGRyYXdfcmVjdHxkcmF3X3NlZ21lbnRzfGRyYXdfc3RyaW5nfCIgKwogICAgICAgICJkdW1teV9wb3N8ZHVtbXlfdGFibGV8ZHVtcF9pbWFnZXxkdXB8ZHVwMnxlbGVtZW50c3xlbXB0eXxlbmRfb2ZfaW5wdXR8IiArCiAgICAgICAgImVudmlyb25tZW50fGVwcmludGZ8ZXBzaWxvbl9mbG9hdHxlcV9iaWdfaW50fGVxX251bXxlcXVhbHxlcnJfZm9ybWF0dGVyfCIgKwogICAgICAgICJlcnJvcl9tZXNzYWdlfGVzY2FwZWR8ZXN0YWJsaXNoX3NlcnZlcnxleGVjdXRhYmxlX25hbWV8ZXhlY3Z8ZXhlY3ZlfGV4ZWN2cHwiICsKICAgICAgICAiZXhlY3ZwZXxleGlzdHN8ZXhpc3RzMnxleGl0fGV4cHxmYWlsd2l0aHxmYXN0X3NvcnR8ZmNobW9kfGZjaG93bnxmaWVsZHwiICsKICAgICAgICAiZmlsZXxmaWxlX2V4aXN0c3xmaWxsfGZpbGxfYXJjfGZpbGxfY2lyY2xlfGZpbGxfZWxsaXBzZXxmaWxsX3BvbHl8ZmlsbF9yZWN0fCIgKwogICAgICAgICJmaWx0ZXJ8ZmluYWxfdGFnfGZpbmFsaXNlfGZpbmR8ZmluZF9hbGx8Zmlyc3RfY2hhcnN8Zmlyc3RrZXl8ZmxhdHRlbnwiICsKICAgICAgICAiZmxvYXR8ZmxvYXQzMnxmbG9hdDY0fGZsb2F0X29mX2JpZ19pbnR8ZmxvYXRfb2ZfYml0c3xmbG9hdF9vZl9pbnR8IiArCiAgICAgICAgImZsb2F0X29mX251bXxmbG9hdF9vZl9zdHJpbmd8Zmxvb3J8Zmxvb3JfbnVtfGZsdXNofGZsdXNoX2FsbHxmbHVzaF9pbnB1dHwiICsKICAgICAgICAiZmx1c2hfc3RyX2Zvcm1hdHRlcnxmb2xkfGZvbGRfbGVmdHxmb2xkX2xlZnQyfGZvbGRfcmlnaHR8Zm9sZF9yaWdodDJ8IiArCiAgICAgICAgImZvcl9hbGx8Zm9yX2FsbDJ8Zm9yY2V8Zm9yY2VfbmV3bGluZXxmb3JjZV92YWx8Zm9yZWdyb3VuZHxmb3JrfCIgKwogICAgICAgICJmb3JtYXRfb2Zfc3RyaW5nfGZvcm1hdHRlcl9vZl9idWZmZXJ8Zm9ybWF0dGVyX29mX291dF9jaGFubmVsfCIgKwogICAgICAgICJmb3J0cmFuX2xheW91dHxmb3J3YXJkX3RhZ3xmcHJpbnRmfGZyZXhwfGZyb218ZnJvbV9jaGFubmVsfGZyb21fZmlsZXwiICsKICAgICAgICAiZnJvbV9maWxlX2Jpbnxmcm9tX2Z1bmN0aW9ufGZyb21fc3RyaW5nfGZzY2FuZnxmc3R8ZnN0YXR8ZnRydW5jYXRlfCIgKwogICAgICAgICJmdWxsX2luaXR8ZnVsbF9tYWpvcnxmdWxsX3NwbGl0fGdjZF9iaWdfaW50fGdlX2JpZ19pbnR8Z2VfbnVtfCIgKwogICAgICAgICJnZW5hcnJheV9vZl9hcnJheTF8Z2VuYXJyYXlfb2ZfYXJyYXkyfGdlbmFycmF5X29mX2FycmF5M3xnZXR8IiArCiAgICAgICAgImdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8Z2V0X2FwcHJveF9wcmludGluZ3xnZXRfY29weXwiICsKICAgICAgICAiZ2V0X2VsbGlwc2lzX3RleHR8Z2V0X2Vycm9yX3doZW5fbnVsbF9kZW5vbWluYXRvcnxnZXRfZmxvYXRpbmdfcHJlY2lzaW9ufCIgKwogICAgICAgICJnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8Z2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zfGdldF9pbWFnZXwiICsKICAgICAgICAiZ2V0X21hcmdpbnxnZXRfbWFya190YWdzfGdldF9tYXhfYm94ZXN8Z2V0X21heF9pbmRlbnR8Z2V0X21ldGhvZHwiICsKICAgICAgICAiZ2V0X21ldGhvZF9sYWJlbHxnZXRfbm9ybWFsaXplX3JhdGlvfGdldF9ub3JtYWxpemVfcmF0aW9fd2hlbl9wcmludGluZ3wiICsKICAgICAgICAiZ2V0X3ByaW50X3RhZ3N8Z2V0X3N0YXRlfGdldF92YXJpYWJsZXxnZXRjd2R8Z2V0ZWdpZHxnZXRlZ2lkfGdldGVudnwiICsKICAgICAgICAiZ2V0ZW52fGdldGVudnxnZXRldWlkfGdldGV1aWR8Z2V0Z2lkfGdldGdpZHxnZXRncmdpZHxnZXRncmdpZHxnZXRncm5hbXwiICsKICAgICAgICAiZ2V0Z3JuYW18Z2V0Z3JvdXBzfGdldGhvc3RieWFkZHJ8Z2V0aG9zdGJ5bmFtZXxnZXRob3N0bmFtZXxnZXRpdGltZXJ8IiArCiAgICAgICAgImdldGxvZ2lufGdldHBlZXJuYW1lfGdldHBpZHxnZXRwcGlkfGdldHByb3RvYnluYW1lfGdldHByb3RvYnludW1iZXJ8IiArCiAgICAgICAgImdldHB3bmFtfGdldHB3dWlkfGdldHNlcnZieW5hbWV8Z2V0c2VydmJ5cG9ydHxnZXRzb2NrbmFtZXxnZXRzb2Nrb3B0fCIgKwogICAgICAgICJnZXRzb2Nrb3B0X2Zsb2F0fGdldHNvY2tvcHRfaW50fGdldHNvY2tvcHRfb3B0aW50fGdldHRpbWVvZmRheXxnZXR1aWR8IiArCiAgICAgICAgImdsb2JhbF9yZXBsYWNlfGdsb2JhbF9zdWJzdGl0dXRlfGdtdGltZXxncmVlbnxncmlkfGdyb3VwX2JlZ2lubmluZ3wiICsKICAgICAgICAiZ3JvdXBfZW5kfGd0X2JpZ19pbnR8Z3RfbnVtfGd1YXJkfGhhbmRsZV91bml4X2Vycm9yfGhhc2h8aGFzaF9wYXJhbXwiICsKICAgICAgICAiaGR8aGVhZGVyX3NpemV8aXxpZHxpZ25vcmV8aW5fY2hhbm5lbF9sZW5ndGh8aW5fY2hhbm5lbF9vZl9kZXNjcnxpbmNyfCIgKwogICAgICAgICJpbmNyX251bXxpbmRleHxpbmRleF9mcm9tfGluZXRfYWRkcl9hbnl8aW5ldF9hZGRyX29mX3N0cmluZ3xpbmZpbml0eXwiICsKICAgICAgICAiaW5maXhfdGFnfGluaXR8aW5pdF9jbGFzc3xpbnB1dHxpbnB1dF9iaW5hcnlfaW50fGlucHV0X2J5dGV8aW5wdXRfY2hhcnwiICsKICAgICAgICAiaW5wdXRfbGluZXxpbnB1dF92YWx1ZXxpbnR8aW50MTZfc2lnbmVkfGludDE2X3Vuc2lnbmVkfGludDMyfGludDY0fCIgKwogICAgICAgICJpbnQ4X3NpZ25lZHxpbnQ4X3Vuc2lnbmVkfGludF9vZl9iaWdfaW50fGludF9vZl9jaGFyfGludF9vZl9mbG9hdHwiICsKICAgICAgICAiaW50X29mX251bXxpbnRfb2Zfc3RyaW5nfGludGVnZXJfbnVtfGludGVyfGludGVyYWN0aXZlfGludnxpbnZhbGlkX2FyZ3wiICsKICAgICAgICAiaXNfYmxvY2t8aXNfZW1wdHl8aXNfaW1wbGljaXR8aXNfaW50fGlzX2ludF9iaWdfaW50fGlzX2ludGVnZXJfbnVtfCIgKwogICAgICAgICJpc19yZWxhdGl2ZXxpdGVyfGl0ZXIyfGl0ZXJpfGpvaW58anVua3xrZXlfcHJlc3NlZHxraWxsfGtpbmR8a3ByaW50ZnwiICsKICAgICAgICAia3NjYW5mfGxhbmR8bGFzdF9jaGFyc3xsYXlvdXR8bGF6eV9mcm9tX2Z1bnxsYXp5X2Zyb21fdmFsfGxhenlfaXNfdmFsfCIgKwogICAgICAgICJsYXp5X3RhZ3xsZGV4cHxsZV9iaWdfaW50fGxlX251bXxsZW5ndGh8bGV4ZW1lfGxleGVtZV9jaGFyfGxleGVtZV9lbmR8IiArCiAgICAgICAgImxleGVtZV9lbmRfcHxsZXhlbWVfc3RhcnR8bGV4ZW1lX3N0YXJ0X3B8bGluZXRvfGxpbmt8bGlzdHxsaXN0ZW58bG5vdHwiICsKICAgICAgICAibG9hZGZpbGV8bG9hZGZpbGVfcHJpdmF0ZXxsb2NhbHRpbWV8bG9ja3xsb2NrZnxsb2d8bG9nMTB8bG9nYW5kfGxvZ25vdHwiICsKICAgICAgICAibG9nb3J8bG9neG9yfGxvcnxsb3dlcl93aW5kb3d8bG93ZXJjYXNlfGxzZWVrfGxzbHxsc3J8bHN0YXR8bHRfYmlnX2ludHwiICsKICAgICAgICAibHRfbnVtfGx4b3J8bWFnZW50YXxtYWdpY3xtYWluTG9vcHxtYWpvcnxtYWpvcl9zbGljZXxtYWtlfG1ha2VfZm9ybWF0dGVyfCIgKwogICAgICAgICJtYWtlX2ltYWdlfG1ha2VfbGV4ZXJ8bWFrZV9tYXRyaXh8bWFrZV9zZWxmX2luaXR8bWFwfG1hcDJ8bWFwX2ZpbGV8bWFwaXwiICsKICAgICAgICAibWFyc2hhbHxtYXRjaF9iZWdpbm5pbmd8bWF0Y2hfZW5kfG1hdGNoZWRfZ3JvdXB8bWF0Y2hlZF9zdHJpbmd8bWF4fCIgKwogICAgICAgICJtYXhfYXJyYXlfbGVuZ3RofG1heF9iaWdfaW50fG1heF9lbHR8bWF4X2Zsb2F0fG1heF9pbnR8bWF4X251bXwiICsKICAgICAgICAibWF4X3N0cmluZ19sZW5ndGh8bWVtfG1lbV9hc3NvY3xtZW1fYXNzcXxtZW1xfG1lcmdlfG1pbnxtaW5fYmlnX2ludHwiICsKICAgICAgICAibWluX2VsdHxtaW5fZmxvYXR8bWluX2ludHxtaW5fbnVtfG1pbm9yfG1pbnVzX2JpZ19pbnR8bWludXNfbnVtfCIgKwogICAgICAgICJtaW51c19vbmV8bWtkaXJ8bWtmaWZvfG1rdGltZXxtb2R8bW9kX2JpZ19pbnR8bW9kX2Zsb2F0fG1vZF9udW18bW9kZnwiICsKICAgICAgICAibW91c2VfcG9zfG1vdmV0b3xtdWx8bXVsdF9iaWdfaW50fG11bHRfaW50X2JpZ19pbnR8bXVsdF9udW18bmFufG5hcnJvd3wiICsKICAgICAgICAibmF0X29mX251bXxuYXRpdmVpbnR8bmVnfG5lZ19pbmZpbml0eXxuZXdfYmxvY2t8bmV3X2NoYW5uZWx8bmV3X21ldGhvZHwiICsKICAgICAgICAibmV3X3ZhcmlhYmxlfG5leHR8bmV4dGtleXxuaWNlfG5pY2V8bm9fc2Nhbl90YWd8bm9ybXxub3JtMnxub3R8bnBlZWt8IiArCiAgICAgICAgIm50aHxudGhfZGltfG51bV9kaWdpdHNfYmlnX2ludHxudW1fZGltc3xudW1fb2ZfYmlnX2ludHxudW1fb2ZfaW50fCIgKwogICAgICAgICJudW1fb2ZfbmF0fG51bV9vZl9yYXRpb3xudW1fb2Zfc3RyaW5nfE98b2JqfG9iamVjdF90YWd8b2NhbWxfdmVyc2lvbnwiICsKICAgICAgICAib2ZfYXJyYXl8b2ZfY2hhbm5lbHxvZl9mbG9hdHxvZl9pbnR8b2ZfaW50MzJ8b2ZfbGlzdHxvZl9uYXRpdmVpbnR8IiArCiAgICAgICAgIm9mX3N0cmluZ3xvbmV8b3BlblRrfG9wZW5fYm94fG9wZW5fY29ubmVjdGlvbnxvcGVuX2dyYXBofG9wZW5faGJveHwiICsKICAgICAgICAib3Blbl9ob3Zib3h8b3Blbl9odmJveHxvcGVuX2lufG9wZW5faW5fYmlufG9wZW5faW5fZ2VufG9wZW5fb3V0fCIgKwogICAgICAgICJvcGVuX291dF9iaW58b3Blbl9vdXRfZ2VufG9wZW5fcHJvY2Vzc3xvcGVuX3Byb2Nlc3NfZnVsbHxvcGVuX3Byb2Nlc3NfaW58IiArCiAgICAgICAgIm9wZW5fcHJvY2Vzc19vdXR8b3Blbl9zdWJ3aW5kb3d8b3Blbl90YWd8b3Blbl90Ym94fG9wZW5fdGVtcF9maWxlfCIgKwogICAgICAgICJvcGVuX3Zib3h8b3BlbmRibXxvcGVuZGlyfG9wZW5maWxlfG9yfG9zX3R5cGV8b3V0X2NoYW5uZWxfbGVuZ3RofCIgKwogICAgICAgICJvdXRfY2hhbm5lbF9vZl9kZXNjcnxvdXRwdXR8b3V0cHV0X2JpbmFyeV9pbnR8b3V0cHV0X2J1ZmZlcnxvdXRwdXRfYnl0ZXwiICsKICAgICAgICAib3V0cHV0X2NoYXJ8b3V0cHV0X3N0cmluZ3xvdXRwdXRfdmFsdWV8b3Zlcl9tYXhfYm94ZXN8cGFja3xwYXJhbXN8IiArCiAgICAgICAgInBhcmVudF9kaXJfbmFtZXxwYXJzZXxwYXJzZV9hcmd2fHBhcnRpdGlvbnxwYXVzZXxwZWVrfHBpcGV8cGl4ZWxzfCIgKwogICAgICAgICJwbGFjZXxwbG90fHBsb3RzfHBvaW50X2NvbG9yfHBvbGFyfHBvbGx8cG9wfHBvc19pbnxwb3Nfb3V0fHBvd3wiICsKICAgICAgICAicG93ZXJfYmlnX2ludF9wb3NpdGl2ZV9iaWdfaW50fHBvd2VyX2JpZ19pbnRfcG9zaXRpdmVfaW50fCIgKwogICAgICAgICJwb3dlcl9pbnRfcG9zaXRpdmVfYmlnX2ludHxwb3dlcl9pbnRfcG9zaXRpdmVfaW50fHBvd2VyX251bXwiICsKICAgICAgICAicHBfY2xvc2VfYm94fHBwX2Nsb3NlX3RhZ3xwcF9jbG9zZV90Ym94fHBwX2ZvcmNlX25ld2xpbmV8IiArCiAgICAgICAgInBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8cHBfZ2V0X2VsbGlwc2lzX3RleHR8IiArCiAgICAgICAgInBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9uc3xwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnN8IiArCiAgICAgICAgInBwX2dldF9tYXJnaW58cHBfZ2V0X21hcmtfdGFnc3xwcF9nZXRfbWF4X2JveGVzfHBwX2dldF9tYXhfaW5kZW50fCIgKwogICAgICAgICJwcF9nZXRfcHJpbnRfdGFnc3xwcF9vcGVuX2JveHxwcF9vcGVuX2hib3h8cHBfb3Blbl9ob3Zib3h8cHBfb3Blbl9odmJveHwiICsKICAgICAgICAicHBfb3Blbl90YWd8cHBfb3Blbl90Ym94fHBwX29wZW5fdmJveHxwcF9vdmVyX21heF9ib3hlc3xwcF9wcmludF9hc3wiICsKICAgICAgICAicHBfcHJpbnRfYm9vbHxwcF9wcmludF9icmVha3xwcF9wcmludF9jaGFyfHBwX3ByaW50X2N1dHxwcF9wcmludF9mbG9hdHwiICsKICAgICAgICAicHBfcHJpbnRfZmx1c2h8cHBfcHJpbnRfaWZfbmV3bGluZXxwcF9wcmludF9pbnR8cHBfcHJpbnRfbmV3bGluZXwiICsKICAgICAgICAicHBfcHJpbnRfc3BhY2V8cHBfcHJpbnRfc3RyaW5nfHBwX3ByaW50X3RhYnxwcF9wcmludF90YnJlYWt8IiArCiAgICAgICAgInBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnN8cHBfc2V0X2VsbGlwc2lzX3RleHR8IiArCiAgICAgICAgInBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWx8cHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zfCIgKwogICAgICAgICJwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnN8cHBfc2V0X21hcmdpbnxwcF9zZXRfbWFya190YWdzfCIgKwogICAgICAgICJwcF9zZXRfbWF4X2JveGVzfHBwX3NldF9tYXhfaW5kZW50fHBwX3NldF9wcmludF90YWdzfHBwX3NldF90YWJ8IiArCiAgICAgICAgInBwX3NldF90YWdzfHByZWR8cHJlZF9iaWdfaW50fHByZWRfbnVtfHByZXJyX2NoYXJ8cHJlcnJfZW5kbGluZXwiICsKICAgICAgICAicHJlcnJfZmxvYXR8cHJlcnJfaW50fHByZXJyX25ld2xpbmV8cHJlcnJfc3RyaW5nfHByaW50fHByaW50X2FzfCIgKwogICAgICAgICJwcmludF9ib29sfHByaW50X2JyZWFrfHByaW50X2NoYXJ8cHJpbnRfY3V0fHByaW50X2VuZGxpbmV8cHJpbnRfZmxvYXR8IiArCiAgICAgICAgInByaW50X2ZsdXNofHByaW50X2lmX25ld2xpbmV8cHJpbnRfaW50fHByaW50X25ld2xpbmV8cHJpbnRfc3BhY2V8IiArCiAgICAgICAgInByaW50X3N0YXR8cHJpbnRfc3RyaW5nfHByaW50X3RhYnxwcmludF90YnJlYWt8cHJpbnRmfHByb2hpYml0fCIgKwogICAgICAgICJwdWJsaWNfbWV0aG9kX2xhYmVsfHB1c2h8cHV0ZW52fHF1b19udW18cXVvbW9kX2JpZ19pbnR8cXVvdGV8cmFpc2V8IiArCiAgICAgICAgInJhaXNlX3dpbmRvd3xyYXRpb19vZl9udW18cmNvbnRhaW5zX2Zyb218cmVhZHxyZWFkX2Zsb2F0fHJlYWRfaW50fCIgKwogICAgICAgICJyZWFkX2tleXxyZWFkX2xpbmV8cmVhZGRpcnxyZWFkZGlyfHJlYWRsaW5rfHJlYWxseV9pbnB1dHxyZWNlaXZlfHJlY3Z8IiArCiAgICAgICAgInJlY3Zmcm9tfHJlZHxyZWZ8cmVnZXhwfHJlZ2V4cF9jYXNlX2ZvbGR8cmVnZXhwX3N0cmluZ3wiICsKICAgICAgICAicmVnZXhwX3N0cmluZ19jYXNlX2ZvbGR8cmVnaXN0ZXJ8cmVnaXN0ZXJfZXhjZXB0aW9ufHJlbXxyZW1lbWJlcl9tb2RlfCIgKwogICAgICAgICJyZW1vdmV8cmVtb3ZlX2Fzc29jfHJlbW92ZV9hc3NxfHJlbmFtZXxyZXBsYWNlfHJlcGxhY2VfZmlyc3R8IiArCiAgICAgICAgInJlcGxhY2VfbWF0Y2hlZHxyZXByfHJlc2V0fHJlc2hhcGV8cmVzaGFwZV8xfHJlc2hhcGVfMnxyZXNoYXBlXzN8cmV2fCIgKwogICAgICAgICJyZXZfYXBwZW5kfHJldl9tYXB8cmV2X21hcDJ8cmV3aW5kZGlyfHJnYnxyaHNfZW5kfHJoc19lbmRfcG9zfHJoc19zdGFydHwiICsKICAgICAgICAicmhzX3N0YXJ0X3Bvc3xyaW5kZXh8cmluZGV4X2Zyb218cmxpbmV0b3xybWRpcnxybW92ZXRvfHJvdW5kX251bXwiICsKICAgICAgICAicnVuX2luaXRpYWxpemVyc3xydW5faW5pdGlhbGl6ZXJzX29wdHxzY2FuZnxzZWFyY2hfYmFja3dhcmR8IiArCiAgICAgICAgInNlYXJjaF9mb3J3YXJkfHNlZWtfaW58c2Vla19vdXR8c2VsZWN0fHNlbGZ8c2VsZl9pbml0fHNlbmR8c2VuZHRvfHNldHwiICsKICAgICAgICAic2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9uc3xzZXRfYXBwcm94X3ByaW50aW5nfCIgKwogICAgICAgICJzZXRfYmluYXJ5X21vZGVfaW58c2V0X2JpbmFyeV9tb2RlX291dHxzZXRfY2xvc2Vfb25fZXhlY3wiICsKICAgICAgICAic2V0X2Nsb3NlX29uX2V4ZWN8c2V0X2NvbG9yfHNldF9lbGxpcHNpc190ZXh0fCIgKwogICAgICAgICJzZXRfZXJyb3Jfd2hlbl9udWxsX2Rlbm9taW5hdG9yfHNldF9maWVsZHxzZXRfZmxvYXRpbmdfcHJlY2lzaW9ufCIgKwogICAgICAgICJzZXRfZm9udHxzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsfHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9uc3wiICsKICAgICAgICAic2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zfHNldF9saW5lX3dpZHRofHNldF9tYXJnaW58c2V0X21hcmtfdGFnc3wiICsKICAgICAgICAic2V0X21heF9ib3hlc3xzZXRfbWF4X2luZGVudHxzZXRfbWV0aG9kfHNldF9ub25ibG9ja3xzZXRfbm9uYmxvY2t8IiArCiAgICAgICAgInNldF9ub3JtYWxpemVfcmF0aW98c2V0X25vcm1hbGl6ZV9yYXRpb193aGVuX3ByaW50aW5nfHNldF9wcmludF90YWdzfCIgKwogICAgICAgICJzZXRfc2lnbmFsfHNldF9zdGF0ZXxzZXRfdGFifHNldF90YWd8c2V0X3RhZ3N8c2V0X3RleHRfc2l6ZXwiICsKICAgICAgICAic2V0X3dpbmRvd190aXRsZXxzZXRnaWR8c2V0Z2lkfHNldGl0aW1lcnxzZXRpdGltZXJ8c2V0c2lkfHNldHNpZHwiICsKICAgICAgICAic2V0c29ja29wdHxzZXRzb2Nrb3B0fHNldHNvY2tvcHRfZmxvYXR8c2V0c29ja29wdF9mbG9hdHxzZXRzb2Nrb3B0X2ludHwiICsKICAgICAgICAic2V0c29ja29wdF9pbnR8c2V0c29ja29wdF9vcHRpbnR8c2V0c29ja29wdF9vcHRpbnR8c2V0dWlkfHNldHVpZHwiICsKICAgICAgICAic2hpZnRfbGVmdHxzaGlmdF9sZWZ0fHNoaWZ0X2xlZnR8c2hpZnRfcmlnaHR8c2hpZnRfcmlnaHR8c2hpZnRfcmlnaHR8IiArCiAgICAgICAgInNoaWZ0X3JpZ2h0X2xvZ2ljYWx8c2hpZnRfcmlnaHRfbG9naWNhbHxzaGlmdF9yaWdodF9sb2dpY2FsfHNob3dfYnVja2V0c3wiICsKICAgICAgICAic2h1dGRvd258c2h1dGRvd258c2h1dGRvd25fY29ubmVjdGlvbnxzaHV0ZG93bl9jb25uZWN0aW9ufHNpZ2FicnR8IiArCiAgICAgICAgInNpZ2Fscm18c2lnY2hsZHxzaWdjb250fHNpZ2ZwZXxzaWdodXB8c2lnaWxsfHNpZ2ludHxzaWdraWxsfHNpZ25fYmlnX2ludHwiICsKICAgICAgICAic2lnbl9udW18c2lnbmFsfHNpZ25hbHxzaWdwZW5kaW5nfHNpZ3BlbmRpbmd8c2lncGlwZXxzaWdwcm9jbWFza3wiICsKICAgICAgICAic2lncHJvY21hc2t8c2lncHJvZnxzaWdxdWl0fHNpZ3NlZ3Z8c2lnc3RvcHxzaWdzdXNwZW5kfHNpZ3N1c3BlbmR8IiArCiAgICAgICAgInNpZ3Rlcm18c2lndHN0cHxzaWd0dGlufHNpZ3R0b3V8c2lndXNyMXxzaWd1c3IyfHNpZ3Z0YWxybXxzaW58c2luZ2xldG9ufCIgKwogICAgICAgICJzaW5ofHNpemV8c2l6ZXxzaXplX3h8c2l6ZV95fHNsZWVwfHNsZWVwfHNsZWVwfHNsaWNlX2xlZnR8c2xpY2VfbGVmdHwiICsKICAgICAgICAic2xpY2VfbGVmdF8xfHNsaWNlX2xlZnRfMnxzbGljZV9yaWdodHxzbGljZV9yaWdodHxzbGljZV9yaWdodF8xfCIgKwogICAgICAgICJzbGljZV9yaWdodF8yfHNuZHxzb2NrZXR8c29ja2V0fHNvY2tldHxzb2NrZXRwYWlyfHNvY2tldHBhaXJ8c29ydHxzb3VuZHwiICsKICAgICAgICAic3BsaXR8c3BsaXRfZGVsaW18c3ByaW50ZnxzcHJpbnRmfHNxcnR8c3FydHxzcXJ0X2JpZ19pbnR8c3F1YXJlX2JpZ19pbnR8IiArCiAgICAgICAgInNxdWFyZV9udW18c3NjYW5mfHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fHN0YWJsZV9zb3J0fCIgKwogICAgICAgICJzdGFibGVfc29ydHxzdGF0fHN0YXR8c3RhdHxzdGF0fHN0YXR8c3RhdHN8c3RhdHN8c3RkX2Zvcm1hdHRlcnxzdGRidWZ8IiArCiAgICAgICAgInN0ZGVycnxzdGRlcnJ8c3RkZXJyfHN0ZGlifHN0ZGlufHN0ZGlufHN0ZGlufHN0ZG91dHxzdGRvdXR8c3Rkb3V0fCIgKwogICAgICAgICJzdHJfZm9ybWF0dGVyfHN0cmluZ3xzdHJpbmdfYWZ0ZXJ8c3RyaW5nX2JlZm9yZXxzdHJpbmdfbWF0Y2h8IiArCiAgICAgICAgInN0cmluZ19vZl9iaWdfaW50fHN0cmluZ19vZl9ib29sfHN0cmluZ19vZl9mbG9hdHxzdHJpbmdfb2ZfZm9ybWF0fCIgKwogICAgICAgICJzdHJpbmdfb2ZfaW5ldF9hZGRyfHN0cmluZ19vZl9pbmV0X2FkZHJ8c3RyaW5nX29mX2ludHxzdHJpbmdfb2ZfbnVtfCIgKwogICAgICAgICJzdHJpbmdfcGFydGlhbF9tYXRjaHxzdHJpbmdfdGFnfHN1YnxzdWJ8c3ViX2JpZ19pbnR8c3ViX2xlZnR8c3ViX251bXwiICsKICAgICAgICAic3ViX3JpZ2h0fHN1YnNldHxzdWJzZXR8c3Vic3RpdHV0ZV9maXJzdHxzdWJzdHJpbmd8c3VjY3xzdWNjfCIgKwogICAgICAgICJzdWNjfHN1Y2N8c3VjY19iaWdfaW50fHN1Y2NfbnVtfHN5bWJvbF9lbmR8c3ltYm9sX2VuZF9wb3N8c3ltYm9sX3N0YXJ0fCIgKwogICAgICAgICJzeW1ib2xfc3RhcnRfcG9zfHN5bWxpbmt8c3ltbGlua3xzeW5jfHN5bmNocm9uaXplfHN5c3RlbXxzeXN0ZW18c3lzdGVtfCIgKwogICAgICAgICJ0YWd8dGFrZXx0YW58dGFuaHx0Y2RyYWlufHRjZHJhaW58dGNmbG93fHRjZmxvd3x0Y2ZsdXNofHRjZmx1c2h8IiArCiAgICAgICAgInRjZ2V0YXR0cnx0Y2dldGF0dHJ8dGNzZW5kYnJlYWt8dGNzZW5kYnJlYWt8dGNzZXRhdHRyfHRjc2V0YXR0cnwiICsKICAgICAgICAidGVtcF9maWxlfHRleHRfc2l6ZXx0aW1lfHRpbWV8dGltZXx0aW1lZF9yZWFkfHRpbWVkX3dyaXRlfHRpbWVzfHRpbWVzfCIgKwogICAgICAgICJ0bHx0bHx0bHx0b19idWZmZXJ8dG9fY2hhbm5lbHx0b19mbG9hdHx0b19oZXh8dG9faW50fHRvX2ludDMyfHRvX2xpc3R8IiArCiAgICAgICAgInRvX2xpc3R8dG9fbGlzdHx0b19uYXRpdmVpbnR8dG9fc3RyaW5nfHRvX3N0cmluZ3x0b19zdHJpbmd8dG9fc3RyaW5nfCIgKwogICAgICAgICJ0b19zdHJpbmd8dG9wfHRvcHx0b3RhbF9zaXplfHRyYW5zZmVyfHRyYW5zcHx0cnVuY2F0ZXx0cnVuY2F0ZXx0cnVuY2F0ZXwiICsKICAgICAgICAidHJ1bmNhdGV8dHJ1bmNhdGV8dHJ1bmNhdGV8dHJ5X2xvY2t8dW1hc2t8dW1hc2t8dW5jYXBpdGFsaXplfHVuY2FwaXRhbGl6ZXwiICsKICAgICAgICAidW5jYXBpdGFsaXplfHVuaW9ufHVuaW9ufHVuaXRfYmlnX2ludHx1bmxpbmt8dW5saW5rfHVubG9ja3x1bm1hcnNoYWx8IiArCiAgICAgICAgInVuc2FmZV9ibGl0fHVuc2FmZV9maWxsfHVuc2FmZV9nZXR8dW5zYWZlX2dldHx1bnNhZmVfc2V0fHVuc2FmZV9zZXR8IiArCiAgICAgICAgInVwZGF0ZXx1cHBlcmNhc2V8dXBwZXJjYXNlfHVwcGVyY2FzZXx1cHBlcmNhc2V8dXNhZ2V8dXRpbWVzfHV0aW1lc3x3YWl0fCIgKwogICAgICAgICJ3YWl0fHdhaXR8d2FpdHx3YWl0X25leHRfZXZlbnR8d2FpdF9waWR8d2FpdF9yZWFkfHdhaXRfc2lnbmFsfCIgKwogICAgICAgICJ3YWl0X3RpbWVkX3JlYWR8d2FpdF90aW1lZF93cml0ZXx3YWl0X3dyaXRlfHdhaXRwaWR8d2hpdGV8IiArCiAgICAgICAgIndpZGVufHdpbmRvd19pZHx3b3JkX3NpemV8d3JhcHx3cmFwX2Fib3J0fHdyaXRlfHllbGxvd3x5aWVsZHx6ZXJvfHplcm9fYmlnX2ludHwiICsKCiAgICAgICAgIkFyZ3xBcml0aF9zdGF0dXN8QXJyYXl8QXJyYXkxfEFycmF5MnxBcnJheTN8QXJyYXlMYWJlbHN8QmlnX2ludHxCaWdhcnJheXwiICsKICAgICAgICAiQnVmZmVyfENhbGxiYWNrfENhbWxpbnRlcm5hbE9PfENoYXJ8Q29tcGxleHxDb25kaXRpb258RGJtfERpZ2VzdHxEeW5saW5rfCIgKwogICAgICAgICJFdmVudHxGaWxlbmFtZXxGb3JtYXR8R2N8R2VuYXJyYXl8R2VubGV4fEdyYXBoaWNzfEdyYXBoaWNzWDExfEhhc2h0Ymx8IiArCiAgICAgICAgIkludDMyfEludDY0fExhcmdlRmlsZXxMYXp5fExleGluZ3xMaXN0fExpc3RMYWJlbHN8TWFrZXxNYXB8TWFyc2hhbHwiICsKICAgICAgICAiTW9yZUxhYmVsc3xNdXRleHxOYXRpdmVpbnR8TnVtfE9ianxPb3xQYXJzaW5nfFBlcnZhc2l2ZXN8UHJpbnRleGN8IiArCiAgICAgICAgIlByaW50ZnxRdWV1ZXxSYW5kb218U2NhbmZ8U2Nhbm5pbmd8U2V0fFNvcnR8U3RhY2t8U3RhdGV8U3RkTGFiZWxzfFN0cnwiICsKICAgICAgICAiU3RyZWFtfFN0cmluZ3xTdHJpbmdMYWJlbHN8U3lzfFRocmVhZHxUaHJlYWRVbml4fFRrfFVuaXh8VW5peExhYmVsc3xXZWFrIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogInRoaXMiLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGRlY2ltYWxJbnRlZ2VyID0gIig/Oig/OlsxLTldXFxkKil8KD86MCkpIjsKICAgIHZhciBvY3RJbnRlZ2VyID0gIig/OjBbb09dP1swLTddKykiOwogICAgdmFyIGhleEludGVnZXIgPSAiKD86MFt4WF1bXFxkQS1GYS1mXSspIjsKICAgIHZhciBiaW5JbnRlZ2VyID0gIig/OjBbYkJdWzAxXSspIjsKICAgIHZhciBpbnRlZ2VyID0gIig/OiIgKyBkZWNpbWFsSW50ZWdlciArICJ8IiArIG9jdEludGVnZXIgKyAifCIgKyBoZXhJbnRlZ2VyICsgInwiICsgYmluSW50ZWdlciArICIpIjsKCiAgICB2YXIgZXhwb25lbnQgPSAiKD86W2VFXVsrLV0/XFxkKykiOwogICAgdmFyIGZyYWN0aW9uID0gIig/OlxcLlxcZCspIjsKICAgIHZhciBpbnRQYXJ0ID0gIig/OlxcZCspIjsKICAgIHZhciBwb2ludEZsb2F0ID0gIig/Oig/OiIgKyBpbnRQYXJ0ICsgIj8iICsgZnJhY3Rpb24gKyAiKXwoPzoiICsgaW50UGFydCArICJcXC4pKSI7CiAgICB2YXIgZXhwb25lbnRGbG9hdCA9ICIoPzooPzoiICsgcG9pbnRGbG9hdCArICJ8IiArICBpbnRQYXJ0ICsgIikiICsgZXhwb25lbnQgKyAiKSI7CiAgICB2YXIgZmxvYXROdW1iZXIgPSAiKD86IiArIGV4cG9uZW50RmxvYXQgKyAifCIgKyBwb2ludEZsb2F0ICsgIikiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnXFwoXFwqLio/XFwqXFwpXFxzKj8kJwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xcKFxcKi4qJywKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBjaGFyCiAgICAgICAgICAgICAgICByZWdleCA6ICInLiciCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vICIgc3RyaW5nCiAgICAgICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBpbWFnaW5hcnkKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OiIgKyBmbG9hdE51bWJlciArICJ8XFxkKylbakpdXFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogZmxvYXROdW1iZXIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgICAgIHJlZ2V4IDogaW50ZWdlciArICJcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCtcXC58XFwtXFwufFxcKlxcLnxcXC9cXC58I3w7O3xcXCt8XFwtfFxcKnxcXCpcXCpcXC98XFwvXFwvfCV8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fDwtfD0iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcuKycKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoT2NhbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuT2NhbWxIaWdobGlnaHRSdWxlcyA9IE9jYW1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL29jYW1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvb2NhbWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIE9jYW1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL29jYW1sX2hpZ2hsaWdodF9ydWxlcyIpLk9jYW1sSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBPY2FtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKICAgIAogICAgdGhpcy4kb3V0ZGVudCAgID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7Cgp2YXIgaW5kZW50ZXIgPSAvKD86Wyh7Wz06XXxbLT1dPnxcYig/OmVsc2V8dHJ5fHdpdGgpKVxzKiQvOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMudG9nZ2xlQ29tbWVudExpbmVzID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgc3RhcnRSb3csIGVuZFJvdykgewogICAgICAgIHZhciBpLCBsaW5lOwogICAgICAgIHZhciBvdXRkZW50ID0gdHJ1ZTsKICAgICAgICB2YXIgcmUgPSAvXlxzKlwoXCooLiopXCpcKS87CgogICAgICAgIGZvciAoaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CiAgICAgICAgICAgIGlmICghcmUudGVzdChkb2MuZ2V0TGluZShpKSkpIHsKICAgICAgICAgICAgICAgIG91dGRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CiAgICAgICAgZm9yIChpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspIHsKICAgICAgICAgICAgbGluZSA9IGRvYy5nZXRMaW5lKGkpOwogICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgID0gaTsKICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyAgICA9IGk7CiAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBsaW5lLmxlbmd0aDsKCiAgICAgICAgICAgIGRvYy5yZXBsYWNlKHJhbmdlLCBvdXRkZW50ID8gbGluZS5tYXRjaChyZSlbMV0gOiAiKCoiICsgbGluZSArICIqKSIpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKCiAgICAgICAgaWYgKCEodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPT09ICdjb21tZW50JykgJiYKICAgICAgICAgICAgc3RhdGUgPT09ICdzdGFydCcgJiYgaW5kZW50ZXIudGVzdChsaW5lKSkKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvb2NhbWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9vY2FtbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-pascal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wYXNjYWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUGFzY2FsSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIjogImFic29sdXRlfGFic3RyYWN0fGFsbHxhbmR8YW5kX3RoZW58YXJyYXl8YXN8YXNtfGF0dHJpYnV0ZXxiZWdpbnxiaW5kYWJsZXxjYXNlfGNsYXNzIiArCiAgICAgICAgICAgICJ8Y29uc3R8Y29uc3RydWN0b3J8ZGVzdHJ1Y3RvcnxkaXZ8ZG98ZG98ZWxzZXxlbmR8ZXhjZXB0fGV4cG9ydHxleHBvcnRzfGV4dGVybmFsfGZhcnxmaWxlfGZpbmFsaXphdGlvbiIgKwogICAgICAgICAgICAifGZpbmFsbHl8Zm9yfGZvcndhcmR8Z290b3xpZnxpbXBsZW1lbnRhdGlvbnxpbXBvcnR8aW58aW5oZXJpdGVkfGluaXRpYWxpemF0aW9ufGludGVyZmFjZXxpbnRlcnJ1cHR8aXMiICsKICAgICAgICAgICAgInxsYWJlbHxsaWJyYXJ5fG1vZHxtb2R1bGV8bmFtZXxuZWFyfG5pbHxub3R8b2JqZWN0fG9mfG9ubHl8b3BlcmF0b3J8b3J8b3JfZWxzZXxvdGhlcndpc2V8cGFja2VkfHBvd3xwcml2YXRlIiArCiAgICAgICAgICAgICJ8cHJvZ3JhbXxwcm9wZXJ0eXxwcm90ZWN0ZWR8cHVibGljfHB1Ymxpc2hlZHxxdWFsaWZpZWR8cmVjb3JkfHJlcGVhdHxyZXNpZGVudHxyZXN0cmljdGVkfHNlZ21lbnR8c2V0fHNobHxzaHIiICsKICAgICAgICAgICAgInx0aGVufHRvfHRyeXx0eXBlfHVuaXR8dW50aWx8dXNlc3x2YWx1ZXx2YXJ8dmlld3x2aXJ0dWFsfHdoaWxlfHdpdGh8eG9yIgogICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICAgICAgIHRva2VuOiBbJ3ZhcmlhYmxlJywgInRleHQiLAogICAgICAgICAgICAgICAgICAgICdzdG9yYWdlLnR5cGUucHJvdG90eXBlJywKICAgICAgICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUuZnVuY3Rpb24ucHJvdG90eXBlJwogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiKGZ1bmN0aW9ufHByb2NlZHVyZSkoXFxzKykoXFx3KykoXFwuXFx3Kyk/KD89KD86XFwoLio/XFwpKT87XFxzKig/OmF0dHJpYnV0ZXxmb3J3YXJkfGV4dGVybmFsKSknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwKICAgICAgICAgICAgICAgIHRva2VuOiBbJ3ZhcmlhYmxlJywgInRleHQiLCAnc3RvcmFnZS50eXBlLmZ1bmN0aW9uJywgJ2VudGl0eS5uYW1lLmZ1bmN0aW9uJ10sCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihmdW5jdGlvbnxwcm9jZWR1cmUpKFxccyspKFxcdyspKFxcLlxcdyspPycKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlLAogICAgICAgICAgICAgICAgdG9rZW46IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleDogL1xiW2Etel9dK1xiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGIoKDAoeHxYKVswLTlhLWZBLUZdKil8KChbMC05XStcXC4/WzAtOV0qKXwoXFwuWzAtOV0rKSkoKGV8RSkoXFwrfC0pP1swLTldKyk/KShMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGInCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnLS0uKiQnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnLy8uKiQnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwoXFwqJywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50JywKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcXCpcXCknLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmJsb2NrLm9uZScgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xceycsCiAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay50d28nIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbicsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgcHVzaDogW3sgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlJywgcmVnZXg6ICdcXFxcLicgfSwKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUnIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbicsCiAgICAgICAgICAgICAgICByZWdleDogJ1wnJywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5hcG9zdHJvcGhlJywKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcJ1wnJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLnNpbmdsZScgfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InLAogICAgICAgICAgICAgICAgcmVnZXg6ICdbK1xcLTssLyolXXw6PXw9JwogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoUGFzY2FsSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlBhc2NhbEhpZ2hsaWdodFJ1bGVzID0gUGFzY2FsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciByZSA9IC9cUy87CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSB8fCBsaW5lW3N0YXJ0TGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGluZS5zZWFyY2gocmUpOwoKICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBpZiAobGluZVtsZXZlbF0gIT0gIiMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBuZXh0W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocHJldkluZGVudCA9PSBpbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMikuc2VhcmNoKC9cUy8pID09IC0xKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgaW5kZW50KQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKCiAgICAgICAgaWYgKGluZGVudCA8IG5leHRJbmRlbnQpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9wYXNjYWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9wYXNjYWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBQYXNjYWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcGFzY2FsX2hpZ2hsaWdodF9ydWxlcyIpLlBhc2NhbEhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFBhc2NhbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAgICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9IFsiLS0iLCAiLy8iXTsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0gWwogICAgICAgIHtzdGFydDogIigqIiwgZW5kOiAiKikifSwKICAgICAgICB7c3RhcnQ6ICJ7IiwgZW5kOiAifSJ9CiAgICBdOwogICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9wYXNjYWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9wYXNjYWwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wZXJsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFBlcmxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYmFzZXxjb25zdGFudHxjb250aW51ZXxlbHNlfGVsc2lmfGZvcnxmb3JlYWNofGZvcm1hdHxnb3RvfGlmfGxhc3R8bG9jYWx8bXl8bmV4dHwiICsKICAgICAgICAgIm5vfHBhY2thZ2V8cGFyZW50fHJlZG98cmVxdWlyZXxzY2FsYXJ8c3VifHVubGVzc3x1bnRpbHx3aGlsZXx1c2V8dmFycyIKICAgICk7CgogICAgdmFyIGJ1aWxkaW5Db25zdGFudHMgPSAoIkFSR1Z8RU5WfElOQ3xTSUciKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiZ2V0cHJvdG9ieW51bWJlcnxnZXRwcm90b2J5bmFtZXxnZXRzZXJ2YnluYW1lfGdldGhvc3RieWFkZHJ8IiArCiAgICAgICAgICJnZXRob3N0YnluYW1lfGdldHNlcnZieXBvcnR8Z2V0bmV0YnlhZGRyfGdldG5ldGJ5bmFtZXxnZXRzb2NrbmFtZXwiICsKICAgICAgICAgImdldHBlZXJuYW1lfHNldHByaW9yaXR5fGdldHByb3RvZW50fHNldHByb3RvZW50fGdldHByaW9yaXR5fCIgKwogICAgICAgICAiZW5kcHJvdG9lbnR8Z2V0c2VydmVudHxzZXRzZXJ2ZW50fGVuZHNlcnZlbnR8c2V0aG9zdGVudHxzb2NrZXRwYWlyfCIgKwogICAgICAgICAiZ2V0c29ja29wdHxnZXRob3N0ZW50fGVuZGhvc3RlbnR8c2V0c29ja29wdHxzZXRuZXRlbnR8cXVvdGVtZXRhfCIgKwogICAgICAgICAibG9jYWx0aW1lfHByb3RvdHlwZXxnZXRuZXRlbnR8ZW5kbmV0ZW50fHJld2luZGRpcnx3YW50YXJyYXl8Z2V0cHd1aWR8IiArCiAgICAgICAgICJjbG9zZWRpcnxnZXRsb2dpbnxyZWFkbGlua3xlbmRncmVudHxnZXRncmdpZHxnZXRncm5hbXxzaG13cml0ZXwiICsKICAgICAgICAgInNodXRkb3dufHJlYWRsaW5lfGVuZHB3ZW50fHNldGdyZW50fHJlYWRwaXBlfGZvcm1saW5lfHRydW5jYXRlfCIgKwogICAgICAgICAiZGJtY2xvc2V8c3lzd3JpdGV8c2V0cHdlbnR8Z2V0cHduYW18Z2V0Z3JlbnR8Z2V0cHdlbnR8dWNmaXJzdHxzeXNyZWFkfCIgKwogICAgICAgICAic2V0cGdycHxzaG1yZWFkfHN5c3NlZWt8c3lzb3Blbnx0ZWxsZGlyfGRlZmluZWR8b3BlbmRpcnxjb25uZWN0fCIgKwogICAgICAgICAibGNmaXJzdHxnZXRwcGlkfGJpbm1vZGV8c3lzY2FsbHxzcHJpbnRmfGdldHBncnB8cmVhZGRpcnxzZWVrZGlyfCIgKwogICAgICAgICAid2FpdHBpZHxyZXZlcnNlfHVuc2hpZnR8c3ltbGlua3xkYm1vcGVufHNlbWdldHxtc2dyY3Z8cmVuYW1lfGxpc3RlbnwiICsKICAgICAgICAgImNocm9vdHxtc2dzbmR8c2htY3RsfGFjY2VwdHx1bnBhY2t8ZXhpc3RzfGZpbGVub3xzaG1nZXR8c3lzdGVtfCIgKwogICAgICAgICAidW5saW5rfHByaW50ZnxnbXRpbWV8bXNnY3RsfHNlbWN0bHx2YWx1ZXN8cmluZGV4fHN1YnN0cnxzcGxpY2V8IiArCiAgICAgICAgICJsZW5ndGh8bXNnZ2V0fHNlbGVjdHxzb2NrZXR8cmV0dXJufGNhbGxlcnxkZWxldGV8YWxhcm18aW9jdGx8aW5kZXh8IiArCiAgICAgICAgICJ1bmRlZnxsc3RhdHx0aW1lc3xzcmFuZHxjaG93bnxmY250bHxjbG9zZXx3cml0ZXx1bWFza3xybWRpcnxzdHVkeXwiICsKICAgICAgICAgInNsZWVwfGNob21wfHVudGllfHByaW50fHV0aW1lfG1rZGlyfGF0YW4yfHNwbGl0fGNyeXB0fGZsb2NrfGNobW9kfCIgKwogICAgICAgICAiQkVHSU58Ymxlc3N8Y2hkaXJ8c2Vtb3B8c2hpZnR8cmVzZXR8bGlua3xzdGF0fGNob3B8Z3JlcHxmb3JrfGR1bXB8IiArCiAgICAgICAgICJqb2lufG9wZW58dGVsbHxwaXBlfGV4aXR8Z2xvYnx3YXJufGVhY2h8YmluZHxzb3J0fHBhY2t8ZXZhbHxwdXNofCIgKwogICAgICAgICAia2V5c3xnZXRjfGtpbGx8c2Vla3xzcXJ0fHNlbmR8d2FpdHxyYW5kfHRpZWR8cmVhZHx0aW1lfGV4ZWN8cmVjdnwiICsKICAgICAgICAgImVvZnxjaHJ8aW50fG9yZHxleHB8cG9zfHBvcHxzaW58bG9nfGFic3xvY3R8aGV4fHRpZXxjb3N8dmVjfEVORHxyZWZ8IiArCiAgICAgICAgICJtYXB8ZGllfHVjfGxjfGRvIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsZGluQ29uc3RhbnRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJePSg/OmJlZ2lufGl0ZW0pXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiYmxvY2tfY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXS4qXFxcXCQnLAogICAgICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10uKlxcXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAiMHhbMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIlI3xcXCQjfFxcLlxcLlxcLnxcXHxcXHw9fD4+PXw8PD18PD0+fCYmPXw9PnwhfnxcXF49fCY9fFxcfD18XFwuPXx4PXwlPXxcXC89fFxcKj18XFwtPXxcXCs9fD1+fFxcKlxcKnxcXC1cXC18XFwuXFwufFxcfFxcfHwmJnxcXCtcXCt8XFwtPnwhPXw9PXw+PXw8PXw+Pnw8PHwsfD18XFw/XFw6fFxcXnxcXHx8eHwlfFxcL3xcXCp8PHwmfFxcXFx8fnwhfD58XFwufFxcLXxcXCt8XFwtQ3xcXC1ifFxcLVN8XFwtdXxcXC10fFxcLXB8XFwtbHxcXC1kfFxcLWZ8XFwtZ3xcXC1zfFxcLXp8XFwta3xcXC1lfFxcLU98XFwtVHxcXC1CfFxcLU18XFwtQXxcXC1YfFxcLVd8XFwtY3xcXC1SfFxcLW98XFwteHxcXC13fFxcLXJ8XFxiKD86YW5kfGNtcHxlcXxnZXxndHxsZXxsdHxuZXxub3R8b3J8eG9yKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcuKycKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImJsb2NrX2NvbW1lbnQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5kb2MiLCAKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXj1jdXRcXGIiLAogICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50LmRvYyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoUGVybEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QZXJsSGlnaGxpZ2h0UnVsZXMgPSBQZXJsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9wZXJsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcGVybF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBQZXJsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIikuUGVybEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQZXJsSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKHtzdGFydDogIl49KGJlZ2lufGl0ZW0pXFxiIiwgZW5kOiAiXj0oY3V0KVxcYiJ9KTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSBbCiAgICAgICAge3N0YXJ0OiAiPWJlZ2luIiwgZW5kOiAiPWN1dCIsIGxpbmVTdGFydE9ubHk6IHRydWV9LAogICAgICAgIHtzdGFydDogIj1pdGVtIiwgZW5kOiAiPWN1dCIsIGxpbmVTdGFydE9ubHk6IHRydWV9CiAgICBdOwoKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbOl1ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3BlcmwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9wZXJsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-perl6.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wZXJsNl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBQZXJsNkhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJteXxvdXJ8Y2xhc3N8cm9sZXxncmFtbWFyfGlzfGRvZXN8c3VifG1ldGhvZHxzdWJtZXRob2R8dHJ5fCIgKwogICAgICAgICJkZWZhdWx0fHdoZW58aWZ8ZWxzaWZ8ZWxzZXx1bmxlc3N8d2l0aHxvcndpdGh8d2l0aG91dHxmb3J8Z2l2ZW58cHJvY2VlZHwiICsKICAgICAgICAic3VjY2VlZHxsb29wfHdoaWxlfHVudGlsfHJlcGVhdHxtb2R1bGV8dXNlfG5lZWR8aW1wb3J0fHJlcXVpcmV8dW5pdHwiICsKICAgICAgICAiY29uc3RhbnR8ZW51bXxtdWx0aXxyZXR1cm58aGFzfHRva2VufHJ1bGV8bWFrZXxtYWRlfHByb3RvfHN0YXRlfGF1Z21lbnR8IiArCiAgICAgICAgImJ1dHxhbm9ufHN1cGVyc2VkZXxsZXR8c3Vic2V0fGdhdGhlcnxyZXR1cm5zfHJldHVybi1yd3x0ZW1wfCIgKwogICAgICAgICJCRUdJTnxDSEVDS3xJTklUfEVORHxDTE9TRXxFTlRFUnxMRUFWRXxLRUVQfFVORE98UFJFfFBPU1R8RklSU1R8TkVYVHxMQVNUfENBVENIfENPTlRST0x8UVVJVHxET0MiCiAgICApOwoKICAgIHZhciB0eXBlcyA9ICgKICAgICAgICAiQW55fEFycmF5fEFzc29jaWF0aXZlfEFTVHxhdG9taWNpbnR8QXR0cmlidXRlfEJhY2t0cmFjZXxCYWNrdHJhY2U6OkZyYW1lfCIgKwogICAgICAgICJCYWd8QmFnZ3l8QmFnSGFzaHxCbG9ifEJsb2NrfEJvb2x8QnVmfENhbGxhYmxlfENhbGxGcmFtZXxDYW5jZWxsYXRpb258IiArCiAgICAgICAgIkNhcHR1cmV8Q2hhbm5lbHxDb2RlfGNvbXBpbGVyfENvbXBsZXh8Q29tcGxleFN0cnxDb29sfEN1cnJlbnRUaHJlYWRTY2hlZHVsZXJ8IiArCiAgICAgICAgIkN1cnNvcnxEYXRlfERhdGVpc2h8RGF0ZVRpbWV8RGlzdHJvfER1cmF0aW9ufEVuY29kaW5nfEV4Y2VwdGlvbnxGYWlsdXJlfCIrCiAgICAgICAgIkZhdFJhdHxHcmFtbWFyfEhhc2h8SHlwZXJXaGF0ZXZlcnxJbnN0YW50fEludHxJbnRTdHJ8SU98SU86OkFyZ0ZpbGVzfCIrCiAgICAgICAgIklPOjpDYXRIYW5kbGV8SU86OkhhbmRsZXxJTzo6Tm90aWZpY2F0aW9ufElPOjpQYXRofElPOjpQYXRoOjpDeWd3aW58IisKICAgICAgICAiSU86OlBhdGg6OlFOWHxJTzo6UGF0aDo6VW5peHxJTzo6UGF0aDo6V2luMzJ8SU86OlBpcGV8SU86OlNvY2tldHwiKwogICAgICAgICJJTzo6U29ja2V0OjpBc3luY3xJTzo6U29ja2V0OjpJTkVUfElPOjpTcGVjfElPOjpTcGVjOjpDeWd3aW58SU86OlNwZWM6OlFOWHwiKwogICAgICAgICJJTzo6U3BlYzo6VW5peHxJTzo6U3BlYzo6V2luMzJ8SU86OlNwZWNpYWx8SXRlcmFibGV8SXRlcmF0b3J8SnVuY3Rpb258S2VybmVsfCIrCiAgICAgICAgIkxhYmVsfExpc3R8TG9ja3xMb2NrOjpBc3luY3xNYWNyb3xNYXB8TWF0Y2h8TWV0YW1vZGVsOjpBdHRyaWJ1dGVDb250YWluZXJ8IisKICAgICAgICAiTWV0YW1vZGVsOjpDM01ST3xNZXRhbW9kZWw6OkNsYXNzSE9XfE1ldGFtb2RlbDo6RW51bUhPV3xNZXRhbW9kZWw6OkZpbmFsaXphdGlvbnwiKwogICAgICAgICJNZXRhbW9kZWw6Ok1ldGhvZENvbnRhaW5lcnxNZXRhbW9kZWw6Ok1ST0Jhc2VkTWV0aG9kRGlzcGF0Y2h8TWV0YW1vZGVsOjpNdWx0aXBsZUluaGVyaXRhbmNlfCIrCiAgICAgICAgIk1ldGFtb2RlbDo6TmFtaW5nfE1ldGFtb2RlbDo6UHJpbWl0aXZlc3xNZXRhbW9kZWw6OlByaXZhdGVNZXRob2RDb250YWluZXJ8IisKICAgICAgICAiTWV0YW1vZGVsOjpSb2xlQ29udGFpbmVyfE1ldGFtb2RlbDo6VHJ1c3Rpbmd8TWV0aG9kfE1peHxNaXhIYXNofE1peHl8TXV8IisKICAgICAgICAiTkZDfE5GRHxORktDfE5GS0R8TmlsfE51bXxOdW1lcmljfE51bVN0cnxPYmpBdHxPcmRlcnxQYWlyfFBhcmFtZXRlcnxQZXJsfCIrCiAgICAgICAgIlBvZDo6QmxvY2t8UG9kOjpCbG9jazo6Q29kZXxQb2Q6OkJsb2NrOjpDb21tZW50fFBvZDo6QmxvY2s6OkRlY2xhcmF0b3J8IisKICAgICAgICAiUG9kOjpCbG9jazo6TmFtZWR8UG9kOjpCbG9jazo6UGFyYXxQb2Q6OkJsb2NrOjpUYWJsZXxQb2Q6OkhlYWRpbmd8UG9kOjpJdGVtfCIrCiAgICAgICAgIlBvc2l0aW9uYWx8UG9zaXRpb25hbEJpbmRGYWlsb3ZlcnxQcm9jfFByb2M6OkFzeW5jfFByb21pc2V8UHJveHl8UHNldWRvU3Rhc2h8IisKICAgICAgICAiUXVhbnRIYXNofFJhbmdlfFJhdHxSYXRpb25hbHxSYXRTdHJ8UmVhbHxSZWdleHxSb3V0aW5lfFNjYWxhcnxTY2hlZHVsZXJ8IisKICAgICAgICAiU2VtYXBob3JlfFNlcXxTZXR8U2V0SGFzaHxTZXR0eXxTaWduYXR1cmV8U2xpcHxTdGFzaHxTdHJ8U3RyRGlzdGFuY2V8U3RyaW5neXwiKwogICAgICAgICJTdWJ8U3VibWV0aG9kfFN1cHBsaWVyfFN1cHBsaWVyOjpQcmVzZXJ2aW5nfFN1cHBseXxTeXN0ZW1pY3xUYXB8VGVsZW1ldHJ5fCIrCiAgICAgICAgIlRlbGVtZXRyeTo6SW5zdHJ1bWVudDo6VGhyZWFkfFRlbGVtZXRyeTo6SW5zdHJ1bWVudDo6VXNhZ2V8VGVsZW1ldHJ5OjpQZXJpb2R8IisKICAgICAgICAiVGVsZW1ldHJ5OjpTYW1wbGVyfFRocmVhZHxUaHJlYWRQb29sU2NoZWR1bGVyfFVJbnR8VW5pfHV0Zjh8VmFyaWFibGV8VmVyc2lvbnwiKwogICAgICAgICJWTXxXaGF0ZXZlcnxXaGF0ZXZlckNvZGV8V3JhcEhhbmRsZXxpbnR8dWludHxudW18c3RyfCIrCiAgICAgICAgImludDh8aW50MTZ8aW50MzJ8aW50NjR8dWludDh8dWludDE2fHVpbnQzMnx1aW50NjR8bG9uZ3xsb25nbG9uZ3xudW0zMnxudW02NHxzaXplX3R8Ym9vbHxDQXJyYXl8UG9pbnRlcnwiKwoJCSJCYWNrdHJhY2V8QmFja3RyYWNlOjpGcmFtZXxFeGNlcHRpb258RmFpbHVyZXxYOjpBZEhvY3xYOjpBbm9uOjpBdWdtZW50fFg6OkFub246Ok11bHRpfCIrCgkJIlg6OkFzc2lnbm1lbnQ6OlJPfFg6OkF0dHJpYnV0ZTo6Tm9QYWNrYWdlfFg6OkF0dHJpYnV0ZTo6UGFja2FnZXxYOjpBdHRyaWJ1dGU6OlVuZGVjbGFyZWR8IisKCQkiWDo6QXVnbWVudDo6Tm9TdWNoVHlwZXxYOjpCaW5kfFg6OkJpbmQ6Ok5hdGl2ZVR5cGV8WDo6QmluZDo6U2xpY2V8WDo6Q2FsbGVyOjpOb3REeW5hbWljfCIrCgkJIlg6OkNoYW5uZWw6OlJlY2VpdmVPbkNsb3NlZHxYOjpDaGFubmVsOjpTZW5kT25DbG9zZWR8WDo6Q29tcHxYOjpDb21wb3NpdGlvbjo6Tm90Q29tcG9zYWJsZXwiKwoJCSJYOjpDb25zdHJ1Y3Rvcjo6UG9zaXRpb25hbHxYOjpDb250cm9sRmxvd3xYOjpDb250cm9sRmxvdzo6UmV0dXJufFg6OkRhdGVUaW1lOjpUaW1lem9uZUNsYXNofCIrCgkJIlg6OkRlY2xhcmF0aW9uOjpTY29wZXxYOjpEZWNsYXJhdGlvbjo6U2NvcGU6Ok11bHRpfFg6OkRvZXM6OlR5cGVPYmplY3R8WDo6RXZhbDo6Tm9TdWNoTGFuZ3wiKwoJCSJYOjpFeHBvcnQ6Ok5hbWVDbGFzaHxYOjpJT3xYOjpJTzo6Q2hkaXJ8WDo6SU86OkNobW9kfFg6OklPOjpDb3B5fFg6OklPOjpDd2R8WDo6SU86OkRpcnwiKwoJCSJYOjpJTzo6RG9lc05vdEV4aXN0fFg6OklPOjpMaW5rfFg6OklPOjpNa2RpcnxYOjpJTzo6TW92ZXxYOjpJTzo6UmVuYW1lfFg6OklPOjpSbWRpcnxYOjpJTzo6U3ltbGlua3wiKwoJCSJYOjpJTzo6VW5saW5rfFg6OkluaGVyaXRhbmNlOjpOb3RDb21wb3NlZHxYOjpJbmhlcml0YW5jZTo6VW5zdXBwb3J0ZWR8WDo6TWV0aG9kOjpJbnZhbGlkUXVhbGlmaWVyfCIrCgkJIlg6Ok1ldGhvZDo6Tm90Rm91bmR8WDo6TWV0aG9kOjpQcml2YXRlOjpQZXJtaXNzaW9ufFg6Ok1ldGhvZDo6UHJpdmF0ZTo6VW5xdWFsaWZpZWR8IisKCQkiWDo6TWl4aW46Ok5vdENvbXBvc2FibGV8WDo6TllJfFg6Ok5vRGlzcGF0Y2hlcnxYOjpOdW1lcmljOjpSZWFsfFg6Ok9TfFg6Ok9ic29sZXRlfFg6Ok91dE9mUmFuZ2V8IisKCQkiWDo6UGFja2FnZTo6U3R1YmJlZHxYOjpQYXJhbWV0ZXI6OkRlZmF1bHR8WDo6UGFyYW1ldGVyOjpNdWx0aXBsZVR5cGVDb25zdHJhaW50c3wiKwoJCSJYOjpQYXJhbWV0ZXI6OlBsYWNlaG9sZGVyfFg6OlBhcmFtZXRlcjo6VHdpZ2lsfFg6OlBhcmFtZXRlcjo6V3JvbmdPcmRlcnxYOjpQaGFzZXI6Ok11bHRpcGxlfCIrCgkJIlg6OlBoYXNlcjo6UHJlUG9zdHxYOjpQbGFjZWhvbGRlcjo6QmxvY2t8WDo6UGxhY2Vob2xkZXI6Ok1haW5saW5lfFg6OlBvZHxYOjpQcm9jOjpBc3luY3wiKwoJCSJYOjpQcm9jOjpBc3luYzo6QWxyZWFkeVN0YXJ0ZWR8WDo6UHJvYzo6QXN5bmM6OkNoYXJzT3JCeXRlc3xYOjpQcm9jOjpBc3luYzo6TXVzdEJlU3RhcnRlZHwiKwoJCSJYOjpQcm9jOjpBc3luYzo6T3BlbkZvcldyaXRpbmd8WDo6UHJvYzo6QXN5bmM6OlRhcEJlZm9yZVNwYXdufFg6OlByb2M6OlVuc3VjY2Vzc2Z1bHwiKwoJCSJYOjpQcm9taXNlOjpDYXVzZU9ubHlWYWxpZE9uQnJva2VufFg6OlByb21pc2U6OlZvd2VkfFg6OlJlZGVjbGFyYXRpb258WDo6Um9sZTo6SW5pdGlhbGl6YXRpb258IisKCQkiWDo6U2VxOjpDb25zdW1lZHxYOjpTZXF1ZW5jZTo6RGVkdWN0aW9ufFg6OlNpZ25hdHVyZTo6TmFtZUNsYXNofFg6OlNpZ25hdHVyZTo6UGxhY2Vob2xkZXJ8IisKCQkiWDo6U3RyOjpOdW1lcmljfFg6OlN0dWJDb2RlfFg6OlN5bnRheHxYOjpTeW50YXg6OkF1Z21lbnQ6OldpdGhvdXRNb25rZXlUeXBpbmd8IisKCQkiWDo6U3ludGF4OjpDb21tZW50OjpFbWJlZGRlZHxYOjpTeW50YXg6OkNvbmZ1c2VkfFg6OlN5bnRheDo6SW5maXhJblRlcm1Qb3NpdGlvbnwiKwoJCSJYOjpTeW50YXg6Ok1hbGZvcm1lZHxYOjpTeW50YXg6Ok1pc3Npbmd8WDo6U3ludGF4OjpOZWdhdGVkUGFpcnxYOjpTeW50YXg6Ok5vU2VsZnwiKwoJCSJYOjpTeW50YXg6Ok51bWJlcjo6UmFkaXhPdXRPZlJhbmdlfFg6OlN5bnRheDo6UDV8WDo6U3ludGF4OjpSZWdleDo6QWR2ZXJifCIrCgkJIlg6OlN5bnRheDo6UmVnZXg6OlNvbGl0YXJ5UXVhbnRpZmllcnxYOjpTeW50YXg6OlJlc2VydmVkfFg6OlN5bnRheDo6U2VsZjo6V2l0aG91dE9iamVjdHwiKwoJCSJYOjpTeW50YXg6OlNpZ25hdHVyZTo6SW52b2NhbnRNYXJrZXJ8WDo6U3ludGF4OjpUZXJtOjpNaXNzaW5nSW5pdGlhbGl6ZXJ8WDo6U3ludGF4OjpVbmxlc3NFbHNlfCIrCgkJIlg6OlN5bnRheDo6VmFyaWFibGU6Ok1hdGNofFg6OlN5bnRheDo6VmFyaWFibGU6Ok51bWVyaWN8WDo6U3ludGF4OjpWYXJpYWJsZTo6VHdpZ2lsfFg6OlRlbXBvcmFsfCIrCgkJIlg6OlRlbXBvcmFsOjpJbnZhbGlkRm9ybWF0fFg6OlR5cGVDaGVja3xYOjpUeXBlQ2hlY2s6OkFzc2lnbm1lbnR8WDo6VHlwZUNoZWNrOjpCaW5kaW5nfCIrCgkJIlg6OlR5cGVDaGVjazo6UmV0dXJufFg6OlR5cGVDaGVjazo6U3BsaWNlfFg6OlVuZGVjbGFyZWQiCgkJKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiYWJzfGFiczJyZWx8YWJzb2x1dGV8YWNjZXB0fEFDQ0VQVFN8YWNjZXNzZWR8YWNvc3xhY29zZWN8YWNvc2VjaHxhY29zaHwiKwogICAgICAgICJhY290YW58YWNvdGFuaHxhY3F1aXJlfGFjdHxhY3Rpb258YWN0aW9uc3xhZGR8YWRkX2F0dHJpYnV0ZXxhZGRfZW51bV92YWx1ZXwiKwogICAgICAgICJhZGRfZmFsbGJhY2t8YWRkX21ldGhvZHxhZGRfcGFyZW50fGFkZF9wcml2YXRlX21ldGhvZHxhZGRfcm9sZXxhZGRfdHJ1c3RlZXwiKwogICAgICAgICJhZHZlcmJ8YWZ0ZXJ8YWxsfGFsbG9jYXRlfGFsbG9mfGFsbG93ZWR8YWx0ZXJuYXRpdmUtbmFtZXN8YW5ub3RhdGlvbnN8YW50aXBhaXJ8IisKICAgICAgICAiYW50aXBhaXJzfGFueXxhbnlvZnxhcHBfbGlmZXRpbWV8YXBwZW5kfGFyY2h8YXJjaG5hbWV8YXJnc3xhcml0eXxhc2VjfGFzZWNofCIrCiAgICAgICAgImFzaW58YXNpbmh8QVNTSUdOLUtFWXxBU1NJR04tUE9TfGFzc3VtaW5nfGFzdHxhdHxhdGFufGF0YW4yfGF0YW5ofEFULUtFWXwiKwogICAgICAgICJhdG9taWMtYXNzaWdufGF0b21pYy1kZWMtZmV0Y2h8YXRvbWljLWZldGNofGF0b21pYy1mZXRjaC1hZGR8YXRvbWljLWZldGNoLWRlY3wiKwogICAgICAgICJhdG9taWMtZmV0Y2gtaW5jfGF0b21pYy1mZXRjaC1zdWJ8YXRvbWljLWluYy1mZXRjaHxBVC1QT1N8YXR0cmlidXRlc3xhdXRofGF3YWl0fCIrCiAgICAgICAgImJhY2t0cmFjZXxCYWd8QmFnSGFzaHxiYXNlfGJhc2VuYW1lfGJhc2UtcmVwZWF0aW5nfGJhdGNofEJJTkQtS0VZfEJJTkQtUE9TfCIrCiAgICAgICAgImJpbmQtc3RkZXJyfGJpbmQtc3RkaW58YmluZC1zdGRvdXR8YmluZC11ZHB8Yml0c3xibGVzc3xibG9ja3xib29sLW9ubHl8IisKICAgICAgICAiYm91bmRzfGJyZWFrfEJyaWRnZXxicm9rZW58QlVJTER8YnVpbGQtZGF0ZXxieXRlc3xjYWNoZXxjYWxsZnJhbWV8Y2FsbGluZy1wYWNrYWdlfCIrCiAgICAgICAgIkNBTEwtTUV8Y2FsbHNhbWV8Y2FsbHdpdGh8Y2FufGNhbmNlbHxjYW5kaWRhdGVzfGNhbmRvfGNhbm9ucGF0aHxjYXBzfGNhcHRpb258IisKICAgICAgICAiQ2FwdHVyZXxjYXN8Y2F0ZGlyfGNhdGVnb3JpemV8Y2F0ZWdvcml6ZS1saXN0fGNhdGZpbGV8Y2F0cGF0aHxjYXVzZXxjZWlsaW5nfCIrCiAgICAgICAgImNnbG9iYWx8Y2hhbmdlZHxDaGFubmVsfGNoYXJzfGNoZGlyfGNoaWxkfGNoaWxkLW5hbWV8Y2hpbGQtdHlwZW5hbWV8Y2htb2R8Y2hvbXB8IisKICAgICAgICAiY2hvcHxjaHJ8Y2hyc3xjaHVua3N8Y2lzfGNsYXNzaWZ5fGNsYXNzaWZ5LWxpc3R8Y2xlYW51cHxjbG9uZXxjbG9zZXxjbG9zZWR8IisKICAgICAgICAiY2xvc2Utc3RkaW58Y29kZXxjb2Rlc3xjb2xsYXRlfGNvbHVtbnxjb21ifGNvbWJpbmF0aW9uc3xjb21tYW5kfGNvbW1lbnR8IisKICAgICAgICAiY29tcGlsZXJ8Q29tcGxleHxjb21wb3NlfGNvbXBvc2VfdHlwZXxjb21wb3Nlcnxjb25kaXRpb258Y29uZmlnfGNvbmZpZ3VyZV9kZXN0cm95fCIrCiAgICAgICAgImNvbmZpZ3VyZV90eXBlX2NoZWNraW5nfGNvbmp8Y29ubmVjdHxjb25zdHJhaW50c3xjb25zdHJ1Y3R8Y29udGFpbnN8Y29udGVudHN8Y29weXwiKwogICAgICAgICJjb3N8Y29zZWN8Y29zZWNofGNvc2h8Y290YW58Y290YW5ofGNvdW50fGNvdW50LW9ubHl8Y3B1LWNvcmVzfGNwdS11c2FnZXxDUkVBVEV8IisKICAgICAgICAiY3JlYXRlX3R5cGV8Y3Jvc3N8Y3VlfGN1cmRpcnxjdXJ1cGRpcnxkfERhdGV8RGF0ZVRpbWV8ZGF5fGRheWNvdW50fGRheS1vZi1tb250aHwiKwogICAgICAgICJkYXktb2Ytd2Vla3xkYXktb2YteWVhcnxkYXlzLWluLW1vbnRofGRlY2xhcmF0aW9ufGRlY29kZXxkZWNvZGVyfGRlZXBtYXB8IisKICAgICAgICAiZGVmaW5lZHxERUZJTklURXxkZWxheWVkfERFTEVURS1LRVl8REVMRVRFLVBPU3xkZW5vbWluYXRvcnxkZXNjfERFU1RST1l8ZGVzdHJveWVyc3wiKwogICAgICAgICJkZXZudWxsfGRpZC15b3UtbWVhbnxkaWV8ZGlyfGRpcm5hbWV8ZGlyLXNlcHxESVNUUk9uYW1lc3xkb3xkb25lfGR1Y2ttYXB8ZHluYW1pY3wiKwogICAgICAgICJlfGVhZ2VyfGVhcmxpZXJ8ZWxlbXN8ZW1pdHxlbmNsb3Npbmd8ZW5jb2RlfGVuY29kZXJ8ZW5jb2Rpbmd8ZW5kfGVuZHMtd2l0aHxlbnVtX2Zyb21fdmFsdWV8IisKICAgICAgICAiZW51bV92YWx1ZV9saXN0fGVudW1fdmFsdWVzfGVudW1zfGVvZnxFVkFMfEVWQUxGSUxFfGV4Y2VwdGlvbnxleGNsdWRlcy1tYXh8ZXhjbHVkZXMtbWlufCIrCiAgICAgICAgIkVYSVNUUy1LRVl8RVhJU1RTLVBPU3xleGl0fGV4aXRjb2RlfGV4cHxleHBlY3RlZHxleHBsaWNpdGx5LW1hbmFnZXxleHBtb2R8ZXh0ZW5zaW9ufGZ8IisKICAgICAgICAiZmFpbHxmY3xmZWF0dXJlfGZpbGV8ZmlsZW5hbWV8ZmluZF9tZXRob2R8ZmluZF9tZXRob2RfcXVhbGlmaWVkfGZpbmlzaHxmaXJzdHxmbGF0fGZsYXRtYXB8IisKICAgICAgICAiZmxpcHxmbG9vcnxmbHVzaHxmbXR8Zm9ybWF0fGZvcm1hdHRlcnxmcmVlemV8ZnJvbXxmcm9tLWxpc3R8ZnJvbS1sb29wfGZyb20tcG9zaXh8ZnVsbHwiKwogICAgICAgICJmdWxsLWJhcnJpZXJ8Z2V0fGdldF92YWx1ZXxnZXRjfGdpc3R8Z290fGdyYWJ8Z3JhYnBhaXJzfGdyZXB8aGFuZGxlfGhhbmRsZWR8aGFuZGxlc3wiKwogICAgICAgICJoYXJkd2FyZXxoYXNfYWNjZXNzb3J8aGVhZHxoZWFkZXJzfGhoLW1tLXNzfGhpZGRlbnxoaWRlc3xob3VyfGhvd3xoeXBlcnxpZHxpbGxlZ2FsfCIrCiAgICAgICAgImltfGlufGluZGVudHxpbmRleHxpbmRpY2VzfGluZGlyfGluZmluaXRlfGluZml4fGluc3RhbGxfbWV0aG9kX2NhY2hlfCIrCiAgICAgICAgIkluc3RhbnR8aW5zdGVhZHxpbnQtYm91bmRzfGludGVydmFsfGluLXRpbWV6b25lfGludmFsaWQtc3RyfGludmVydHxpbnZvY2FudHxJT3wiKwogICAgICAgICJJTzo6Tm90aWZpY2F0aW9uLndhdGNoLXBhdGh8aXNfdHJ1c3RlZHxpc190eXBlfGlzYXxpcy1hYnNvbHV0ZXxpcy1oaWRkZW58aXMtaW5pdGlhbC10aHJlYWR8IisKICAgICAgICAiaXMtaW50fGlzLWxhenl8aXMtbGVhcC15ZWFyfGlzTmFOfGlzLXByaW1lfGlzLXJlbGF0aXZlfGlzLXJvdXRpbmV8aXMtc2V0dGluZ3xpcy13aW58aXRlbXwiKwogICAgICAgICJpdGVyYXRvcnxqb2lufGtlZXB8a2VwdHxLRVJORUxuYW1lc3xrZXl8a2V5b2Z8a2V5c3xraWxsfGt2fGt4eHZ8bHxsYW5nfGxhc3R8bGFzdGNhbGx8bGF0ZXJ8IisKICAgICAgICAibGF6eXxsY3xsZWFkaW5nfGxldmVsfGxpbmV8bGluZXN8bGlua3xsaXN0ZW58bGl2ZXxsb2NhbHxsb2NrfGxvZ3xsb2cxMHxsb29rdXB8bHNifCIrCiAgICAgICAgIk1BSU58bWF0Y2h8bWF4fG1heHBhaXJzfG1lcmdlfG1lc3NhZ2V8bWV0aG9kX3RhYmxlfG1ldGhvZHN8bWlncmF0ZXxtaW58bWlubWF4fCIrCiAgICAgICAgIm1pbnBhaXJzfG1pbnV0ZXxtaXNwbGFjZWR8TWl4fE1peEhhc2h8bWtkaXJ8bW9kZXxtb2RpZmllZHxtb250aHxtb3ZlfG1yb3xtc2J8bXVsdGluZXNzfCIrCiAgICAgICAgIm5hbWV8bmFtZWR8bmFtZWRfbmFtZXN8bmFycm93fG5hdGl2ZWNhc3R8bmF0aXZlLWRlc2NyaXB0b3J8bmF0aXZlc2l6ZW9mfG5ld3xuZXdfdHlwZXwiKwogICAgICAgICJuZXctZnJvbS1kYXljb3VudHxuZXctZnJvbS1wYWlyc3xuZXh0fG5leHRjYWxsZWV8bmV4dC1oYW5kbGV8bmV4dHNhbWV8bmV4dHdpdGh8TkZDfE5GRHwiKwogICAgICAgICJORktDfE5GS0R8bmwtaW58bmwtb3V0fG5vZGVtYXB8bm9uZXxub3JtfG5vdHxub3RlfG5vd3xudWRlfG51bWVyYXRvcnxOdW1lcmljfG9mfCIrCiAgICAgICAgIm9mZnNldHxvZmZzZXQtaW4taG91cnN8b2Zmc2V0LWluLW1pbnV0ZXN8b2xkfG9uLWNsb3NlfG9uZXxvbi1zd2l0Y2h8b3BlbnxvcGVuZWR8IisKICAgICAgICAib3BlcmF0aW9ufG9wdGlvbmFsfG9yZHxvcmRzfG9yaWd8b3MtZXJyb3J8b3NuYW1lfG91dC1idWZmZXJ8cGFja3xwYWNrYWdlfHBhY2thZ2Uta2luZHwiKwogICAgICAgICJwYWNrYWdlLW5hbWV8cGFja2FnZXN8cGFpcnxwYWlyc3xwYWlydXB8cGFyYW1ldGVyfHBhcmFtc3xwYXJlbnR8cGFyZW50LW5hbWV8cGFyZW50c3xwYXJzZXwiKwogICAgICAgICJwYXJzZS1iYXNlfHBhcnNlZmlsZXxwYXJzZS1uYW1lc3xwYXJ0c3xwYXRofHBhdGgtc2VwfHBheWxvYWR8cGVlci1ob3N0fHBlZXItcG9ydHxwZXJpb2RzfCIrCiAgICAgICAgInBlcmx8cGVybXV0YXRpb25zfHBoYXNlcnxwaWNrfHBpY2twYWlyc3xwaWR8cGxhY2Vob2xkZXJ8cGx1c3xwb2xhcnxwb2xsfHBvbHltb2R8cG9wfHBvc3wiKwogICAgICAgICJwb3NpdGlvbmFsfHBvc2l4fHBvc3RmaXh8cG9zdG1hdGNofHByZWNvbXAtZXh0fHByZWNvbXAtdGFyZ2V0fHByZWR8cHJlZml4fHByZW1hdGNofHByZXBlbmR8IisKICAgICAgICAicHJpbnR8cHJpbnRmfHByaW50LW5sfHByaW50LXRvfHByaXZhdGV8cHJpdmF0ZV9tZXRob2RfdGFibGV8cHJvY3xwcm9kdWNlfFByb21pc2V8cHJvbXB0fCIrCiAgICAgICAgInByb3RlY3R8cHVsbC1vbmV8cHVzaHxwdXNoLWFsbHxwdXNoLWF0LWxlYXN0fHB1c2gtZXhhY3RseXxwdXNoLXVudGlsLWxhenl8cHV0fCIrCiAgICAgICAgInF1YWxpZmllci10eXBlfHF1aXR8cnxyYWNlfHJhZGl4fHJhbmR8cmFuZ2V8cmF3fHJlfHJlYWR8cmVhZGNoYXJzfHJlYWRvbmx5fCIrCiAgICAgICAgInJlYWR5fFJlYWx8cmVhbGxvY2F0ZXxyZWFsc3xyZWFzb258cmVibGVzc3xyZWNlaXZlfHJlY3Z8cmVkaXNwYXRjaGVyfHJlZG98cmVkdWNlfCIrCiAgICAgICAgInJlbDJhYnN8cmVsYXRpdmV8cmVsZWFzZXxyZW5hbWV8cmVwZWF0ZWR8cmVwbGFjZW1lbnR8cmVwb3J0fHJlc2VydmVkfHJlc29sdmV8IisKICAgICAgICAicmVzdG9yZXxyZXN1bHR8cmVzdW1lfHJldGhyb3d8cmV2ZXJzZXxyaWdodHxyaW5kZXh8cm1kaXJ8cm9sZXNfdG9fY29tcG9zZXwiKwogICAgICAgICJyb2xpc2h8cm9sbHxyb290ZGlyfHJvb3RzfHJvdGF0ZXxyb3Rvcnxyb3VuZHxyb3VuZHJvYmlufHJvdXRpbmUtdHlwZXxydW58cnd4fHN8IisKICAgICAgICAic2FtZWNhc2V8c2FtZW1hcmt8c2FtZXdpdGh8c2F5fHNjaGVkdWxlLW9ufHNjaGVkdWxlcnxzY29wZXxzZWN8c2VjaHxzZWNvbmR8c2Vla3wiKwogICAgICAgICJzZWxmfHNlbmR8U2V0fHNldF9oaWRkZW58c2V0X25hbWV8c2V0X3BhY2thZ2V8c2V0X3J3fHNldF92YWx1ZXxTZXRIYXNofCIrCiAgICAgICAgInNldC1pbnN0cnVtZW50c3xzZXR1cF9maW5hbGl6YXRpb258c2hhcGV8c2hhcmV8c2hlbGx8c2hpZnR8c2libGluZ3xzaWdpbHwiKwogICAgICAgICJzaWdufHNpZ25hbHxzaWduYWxzfHNpZ25hdHVyZXxzaW58c2luaHxzaW5rfHNpbmstYWxsfHNraXB8c2tpcC1hdC1sZWFzdHwiKwogICAgICAgICJza2lwLWF0LWxlYXN0LXB1bGwtb25lfHNraXAtb25lfHNsZWVwfHNsZWVwLXRpbWVyfHNsZWVwLXVudGlsfFNsaXB8c2x1cnB8IisKICAgICAgICAic2x1cnAtcmVzdHxzbHVycHl8c25hcHxzbmFwcGVyfHNvfHNvY2tldC1ob3N0fHNvY2tldC1wb3J0fHNvcnR8c291cmNlfCIrCiAgICAgICAgInNvdXJjZS1wYWNrYWdlfHNwYXdufFNQRUN8c3BsaWNlfHNwbGl0fHNwbGl0ZGlyfHNwbGl0cGF0aHxzcHJpbnRmfHNwdXJ0fCIrCiAgICAgICAgInNxcnR8c3F1aXNofHNyYW5kfHN0YWJsZXxzdGFydHxzdGFydGVkfHN0YXJ0cy13aXRofHN0YXR1c3xzdGRlcnJ8c3Rkb3V0fCIrCiAgICAgICAgInN1Yl9zaWduYXR1cmV8c3ViYnVmfHN1YmJ1Zi1yd3xzdWJuYW1lfHN1YnBhcnNlfHN1YnN0fHN1YnN0LW11dGF0ZXwiKwogICAgICAgICJzdWJzdHJ8c3Vic3RyLWVxfHN1YnN0ci1yd3xzdWNjfHN1bXxTdXBwbHl8c3ltbGlua3x0fHRhaWx8dGFrZXx0YWtlLXJ3fCIrCiAgICAgICAgInRhbnx0YW5ofHRhcHx0YXJnZXR8dGFyZ2V0LW5hbWV8dGN8dGNsY3x0ZWxsfHRoZW58dGhyb3R0bGV8dGhyb3d8dGltZXpvbmV8IisKICAgICAgICAidG1wZGlyfHRvfHRvZGF5fHRvZ2dsZXx0by1wb3NpeHx0b3RhbHx0cmFpbGluZ3x0cmFuc3x0cmVlfHRyaW18dHJpbS1sZWFkaW5nfCIrCiAgICAgICAgInRyaW0tdHJhaWxpbmd8dHJ1bmNhdGV8dHJ1bmNhdGVkLXRvfHRydXN0c3x0cnlfYWNxdWlyZXx0cnlpbmd8dHdpZ2lsfHR5cGV8IisKICAgICAgICAidHlwZV9jYXB0dXJlc3x0eXBlbmFtZXx1Y3x1ZHB8dW5jYXVnaHRfaGFuZGxlcnx1bmltYXRjaHx1bmluYW1lfHVuaW5hbWVzfCIrCiAgICAgICAgInVuaXBhcnNlfHVuaXByb3B8dW5pcHJvcHN8dW5pcXVlfHVuaXZhbHx1bml2YWxzfHVubGlua3x1bmxvY2t8dW5wYWNrfHVucG9sYXJ8IisKICAgICAgICAidW5zaGlmdHx1bndyYXB8dXBkaXJ8VVNBR0V8dXRjfHZhbHx2YWx1ZXx2YWx1ZXN8VkFSfHZhcmlhYmxlfHZlcmJvc2UtY29uZmlnfCIrCiAgICAgICAgInZlcnNpb258Vk1uYW1lc3x2b2x1bWV8dm93fHd8d2FpdHx3YXJufHdhdGNofHdhdGNoLXBhdGh8d2Vla3x3ZWVrZGF5LW9mLW1vbnRofCIrCiAgICAgICAgIndlZWstbnVtYmVyfHdlZWsteWVhcnxXSEFUfFdIRVJFfFdIRVJFRk9SRXxXSElDSHxXSE98d2hvbGUtc2Vjb25kfFdIWXwiKwogICAgICAgICJ3b3JkY2FzZXx3b3Jkc3x3b3JrYXJvdW5kfHdyYXB8d3JpdGV8d3JpdGUtdG98eWFkYXx5ZWFyfHlpZWxkfHl5eXktbW0tZGR8IisKICAgICAgICAienx6aXB8emlwLWxhdGVzdHwiKwogICAgICAgICJwbGFufGRvbmUtdGVzdGluZ3xiYWlsLW91dHx0b2RvfHNraXB8c2tpcC1yZXN0fGRpYWd8c3VidGVzdHxwYXNzfGZsdW5rfG9rfCIrCiAgICAgICAgIm5va3xjbXAtb2t8aXMtZGVlcGx5fGlzbnR8aXMtYXBwcm94fGxpa2V8dW5saWtlfHVzZS1va3xpc2Etb2t8ZG9lcy1va3wiKwogICAgICAgICJjYW4tb2t8ZGllcy1va3xsaXZlcy1va3xldmFsLWRpZXMtb2t8ZXZhbC1saXZlcy1va3x0aHJvd3MtbGlrZXxmYWlscy1saWtlfCIrCgkJInJ3fHJlcXVpcmVkfG5hdGl2ZXxyZXByfGV4cG9ydHxzeW1ib2wiCgkpOwoJdmFyIGNvbnN0YW50c19hc2NpaSA9ICgicGl8SW5mfHRhdXx0aW1lIik7CgkKCXZhciBvcHNfdHh0ID0gKCJlcXxuZXxndHxsdHxsZXxnZXxkaXZ8Z2NkfGxjbXxsZWd8Y21wfGZmfGZmZnwiKwoJCSJ4fGJlZm9yZXxhZnRlcnxafFh8YW5kfG9yfGFuZHRoZW58bm90YW5kdGhlbnxvcmVsc2V8eG9yIgoJKTsKCgl2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CgkJImtleXdvcmQiOiBrZXl3b3JkcywKCQkic3RvcmFnZS50eXBlIiA6IHR5cGVzLAoJCSJjb25zdGFudC5sYW5ndWFnZSI6IGNvbnN0YW50c19hc2NpaSwKCQkic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCgkJImtleXdvcmQub3BlcmF0b3IiOiBvcHNfdHh0Cgl9LCAiaWRlbnRpZmllciIpOwoJCgl2YXIgbW9kdWxlTmFtZSA9ICJbYS16QS1aX11bYS16QS1aXzAtOTotXSpcXGIiOwoJdmFyIGhleCA9IHsJdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIHJlZ2V4IDogIjB4WzAtOWEtZkEtRl0rXFxiIiB9OwoJdmFyIG51bV9yYXQgPSB7IHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCByZWdleCA6ICJbKy0uXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiIH07Cgl2YXIgbnVtX3dpdGhfID0geyB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgcmVnZXggOiAiKD86XFxkK18/XFxkKykrXFxiIiB9OwoJdmFyIGNvbXBsZXhfbnVtYmVycyA9IHsgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIHJlZ2V4IDogIlxcKz9cXGQraVxcYiIgfTsKCXZhciBib29sZWFucyA9IHsgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsIHJlZ2V4IDogIig/OlRydWV8RmFsc2UpXFxiIiB9OwoJdmFyIHZlcnNpb25zID0geyB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIHJlZ2V4IDogInZbMC05XSg/OlxcLlthLXpBLVowLTkqXSkqXFxiIiB9OwoJdmFyIGxhbmdfa2V5d29yZHMgPSB7IHRva2VuIDoga2V5d29yZE1hcHBlciwgcmVnZXggOiAiW2EtekEtWl1bXFw6YS16QS1aMC05Xy1dKlxcYiIgfTsKCXZhciB2YXJpYWJsZXMgPSB7IHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwgcmVnZXggOiAiWyRAJSZdWz8qIS5dP1thLXpBLVowLTlfLV0rXFxiIiB9OwoJdmFyIHZhcnNfc3BlY2lhbCA9IHsgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsIHJlZ2V4IDogIlxcJFsvfCFdP3xAXFwkLyIgfTsKCXZhciBvcHNfY2hhciA9IHsgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsIHJlZ2V4IDogIj18PHw+fFxcK3xcXCp8LXwvfH58JXxcXD98IXxcXF58XFwufFxcOnxcXCx8IisKCSLCu3zCq3xcXHx8XFwmfOKam3ziiJgiIH07Cgl2YXIgY29uc3RhbnRzX3VuaWNvZGUgPSB7IHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlIiwgcmVnZXggOiAi8J2RknzPgHzPhHziiJ4iIH07Cgl2YXIgcXN0cmluZ3MgPSB7IHRva2VuIDogInN0cmluZy5xdW90ZWQuc2luZ2xlIiwgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIgfTsKCXZhciB3b3JkX3F1b3RpbmcgPSB7IHRva2VuIDogInN0cmluZy5xdW90ZWQuc2luZ2xlIiwgcmVnZXggOiAiWzxdKD86W2EtekEtWjAtOSBdKSpbPl0ifTsKCXZhciByZWdleHAgPSB7CgkJCQl0b2tlbiA6ICJzdHJpbmcucmVnZXhwIiwKCQkJCXJlZ2V4IDogIlttfHJ4XT9bL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIiB9OwoJCgkKCXRoaXMuJHJ1bGVzID0gewoJCSJzdGFydCIgOiBbCgkJCXsKCQkJCXRva2VuIDogImNvbW1lbnQuYmxvY2siLCAvLyBFbWJlZGRlZCBDb21tZW50cyAtIFBhcmVudGhlc2VzCgkJCQlyZWdleCA6ICIjW2B8PV1cXCguKlxcKSIKCQkJfSwgewoJCQkJdG9rZW4gOiAiY29tbWVudC5ibG9jayIsIC8vIEVtYmVkZGVkIENvbW1lbnRzIC0gQnJhY2tldHMKCQkJCXJlZ2V4IDogIiNbYHw9XVxcWy4qXFxdIgoJCQl9LCB7CgkJCQl0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIE11bHRpbGluZSBDb21tZW50cwoJCQkJcmVnZXggOiAiXj0oPzpiZWdpbilcXGIiLAoJCQkJbmV4dCA6ICJibG9ja19jb21tZW50IgoJCQl9LCB7CgkJCQl0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQiLCAvLyBxIEhlcmVkb2NzCgkJCQlyZWdleCA6ICJxW3h8d10/XFw6dG8vRU5ELzsiLAoJCQkJbmV4dCA6ICJxaGVyZWRvYyIKCQkJfSwgewoJCQkJdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkIiwgLy8gcXEgSGVyZWRvY3MKCQkJCXJlZ2V4IDogInFxW3h8d10/XFw6dG8vRU5ELzsiLAoJCQkJbmV4dCA6ICJxcWhlcmVkb2MiCgkJCX0sCgkJCXJlZ2V4cCwKCQkJcXN0cmluZ3MKCQkJLCB7CgkJCQl0b2tlbiA6ICJzdHJpbmcucXVvdGVkLmRvdWJsZSIsIC8vIERvdWJsZSBRdW90ZWQgU3RyaW5nCgkJCQlyZWdleCA6ICciJywKCQkJCW5leHQgOiAicXFzdHJpbmciCgkJCX0sCgkJCXdvcmRfcXVvdGluZwoJCQksIHsKCQkJCXRva2VuOiBbImtleXdvcmQiLCAidGV4dCIsICJ2YXJpYWJsZS5tb2R1bGUiXSwgLy8gdXNlIC0gTW9kdWxlIE5hbWVzLCBQcmFnbWFzLCBldGMuCgkJCQlyZWdleDogIih1c2UpKFxccyspKCg/OiIrbW9kdWxlTmFtZSsiXFwuPykqKSIKCQkJfSwKCQkJaGV4LAoJCQludW1fcmF0LAoJCQludW1fd2l0aF8sCgkJCWNvbXBsZXhfbnVtYmVycywKCQkJYm9vbGVhbnMsCgkJCXZlcnNpb25zLAoJCQlsYW5nX2tleXdvcmRzLAoJCQl2YXJpYWJsZXMsCgkJCXZhcnNfc3BlY2lhbCwKCQkJb3BzX2NoYXIsCgkJCWNvbnN0YW50c191bmljb2RlCgkJCSwgewoJCQkJdG9rZW4gOiAiY29tbWVudCIsIC8vIFNpZ2xlIExpbmUgQ29tbWVudHMKCQkJCXJlZ2V4IDogIiMuKiQiCgkJCX0sIHsKCQkJCXRva2VuIDogImxwYXJlbiIsCgkJCQlyZWdleCA6ICJbWyh7XSIKCQkJfSwgewoJCQkJdG9rZW4gOiAicnBhcmVuIiwKCQkJCXJlZ2V4IDogIltcXF0pfV0iCgkJCX0sIHsKCQkJCXRva2VuIDogInRleHQiLAoJCQkJcmVnZXggOiAiXFxzKyIKCQkJfQoJCV0sCgkJInFxc3RyaW5nIiA6IFsKCQkJewoJCQkJdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKCQkJCXJlZ2V4IDogJ1xcXFwoPzpbbnJ0ZWZcXFxcIiRdfFswLTddezEsM318eFswLTlBLUZhLWZdezEsMn0pJwoJCQl9LCAKCQkJdmFyaWFibGVzLAoJCQl2YXJzX3NwZWNpYWwKCQkJLCB7CgkJCQl0b2tlbiA6ICJscGFyZW4iLAoJCQkJcmVnZXggOiAieyIsCgkJCQluZXh0IDogInFxaW50ZXJwb2xhdGlvbiIKCQkJfSwgewoJCQkJdG9rZW4gOiAic3RyaW5nLnF1b3RlZC5kb3VibGUiLCAKCQkJCXJlZ2V4IDogJyInLCAKCQkJCW5leHQgOiAic3RhcnQiCgkJCX0sIHsKCQkJCWRlZmF1bHRUb2tlbiA6ICJzdHJpbmcucXVvdGVkLmRvdWJsZSIKCQkJfQoJCV0sCgkJInFxaW50ZXJwb2xhdGlvbiIgOiBbCgkJCWhleCwKCQkJbnVtX3JhdCwKCQkJbnVtX3dpdGhfLAoJCQljb21wbGV4X251bWJlcnMsCgkJCWJvb2xlYW5zLAoJCQl2ZXJzaW9ucywKCQkJbGFuZ19rZXl3b3JkcywKCQkJdmFyaWFibGVzLAoJCQl2YXJzX3NwZWNpYWwsCgkJCW9wc19jaGFyLAoJCQljb25zdGFudHNfdW5pY29kZSwKCQkJcXN0cmluZ3MsCgkJCXJlZ2V4cCwKCQkJCgkJCXsKCQkJCXRva2VuOiAicnBhcmVuIiwKCQkJCXJlZ2V4OiAifSIsCgkJCQluZXh0IDogInFxc3RyaW5nIgoJCQl9CgkJXSwKCQkiYmxvY2tfY29tbWVudCI6IFsKCQkJewoJCQkJdG9rZW46ICJjb21tZW50LmRvYyIsCgkJCQlyZWdleDogIl49ZW5kICtbYS16QS1aXzAtOV0qIiwKCQkJCW5leHQ6ICJzdGFydCIKCQkJfSwKCQkJewoJCQkJZGVmYXVsdFRva2VuOiAiY29tbWVudC5kb2MiCgkJCX0KCQldLAoJCSJxaGVyZWRvYyI6IFsKCQkJewoJCQkJdG9rZW46ICJzdHJpbmcudW5xdW90ZWQiLAoJCQkJcmVnZXg6ICJFTkQkIiwKCQkJCW5leHQ6ICJzdGFydCIKCQkJfSwgewoJCQkJZGVmYXVsdFRva2VuOiAic3RyaW5nLnVucXVvdGVkIgoJCQl9CgkJXSwKCQkicXFoZXJlZG9jIjogWwoJCQl2YXJpYWJsZXMsCgkJCXZhcnNfc3BlY2lhbCwKCQkJewoJCQkJdG9rZW4gOiAibHBhcmVuIiwKCQkJCXJlZ2V4IDogInsiLAoJCQkJbmV4dCA6ICJxcWhlcmVkb2NpbnRlcnBvbGF0aW9uIgoJCQl9LCB7CgkJCQl0b2tlbjogInN0cmluZy51bnF1b3RlZCIsCgkJCQlyZWdleDogIkVORCQiLAoJCQkJbmV4dDogInN0YXJ0IgoJCQl9LCB7CgkJCQlkZWZhdWx0VG9rZW46ICJzdHJpbmcudW5xdW90ZWQiCgkJCX0KCQldLAoJCSJxcWhlcmVkb2NpbnRlcnBvbGF0aW9uIiA6IFsKCQkJaGV4LAoJCQludW1fcmF0LAoJCQludW1fd2l0aF8sCgkJCWNvbXBsZXhfbnVtYmVycywKCQkJYm9vbGVhbnMsCgkJCXZlcnNpb25zLAoJCQlsYW5nX2tleXdvcmRzLAoJCQl2YXJpYWJsZXMsCgkJCXZhcnNfc3BlY2lhbCwKCQkJb3BzX2NoYXIsCgkJCWNvbnN0YW50c191bmljb2RlLAoJCQlxc3RyaW5ncywKCQkJcmVnZXhwLAoJCQl7CgkJCQl0b2tlbjogInJwYXJlbiIsCgkJCQlyZWdleDogIn0iLAoJCQkJbmV4dCA6ICJxcWhlcmVkb2MiCgkJCX0KCQldCgl9Owp9OwoKb29wLmluaGVyaXRzKFBlcmw2SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlBlcmw2SGlnaGxpZ2h0UnVsZXMgPSBQZXJsNkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvcGVybDYiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9wZXJsNl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBQZXJsNkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9wZXJsNl9oaWdobGlnaHRfcnVsZXMiKS5QZXJsNkhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQZXJsNkhpZ2hsaWdodFJ1bGVzOwoKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKHtzdGFydDogIl49KGJlZ2luKVxcYiIsIGVuZDogIl49KGVuZClcXGIifSk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0gWwogICAgICAgIHtzdGFydDogIj1iZWdpbiIsIGVuZDogIj1lbmQiLCBsaW5lU3RhcnRPbmx5OiB0cnVlfSwKICAgICAgICB7c3RhcnQ6ICI9aXRlbSIsIGVuZDogIj1lbmQiLCBsaW5lU3RhcnRPbmx5OiB0cnVlfQogICAgXTsKCgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcWzpdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9wZXJsNiI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3Blcmw2Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-pgsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9wZXJsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFBlcmxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYmFzZXxjb25zdGFudHxjb250aW51ZXxlbHNlfGVsc2lmfGZvcnxmb3JlYWNofGZvcm1hdHxnb3RvfGlmfGxhc3R8bG9jYWx8bXl8bmV4dHwiICsKICAgICAgICAgIm5vfHBhY2thZ2V8cGFyZW50fHJlZG98cmVxdWlyZXxzY2FsYXJ8c3VifHVubGVzc3x1bnRpbHx3aGlsZXx1c2V8dmFycyIKICAgICk7CgogICAgdmFyIGJ1aWxkaW5Db25zdGFudHMgPSAoIkFSR1Z8RU5WfElOQ3xTSUciKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiZ2V0cHJvdG9ieW51bWJlcnxnZXRwcm90b2J5bmFtZXxnZXRzZXJ2YnluYW1lfGdldGhvc3RieWFkZHJ8IiArCiAgICAgICAgICJnZXRob3N0YnluYW1lfGdldHNlcnZieXBvcnR8Z2V0bmV0YnlhZGRyfGdldG5ldGJ5bmFtZXxnZXRzb2NrbmFtZXwiICsKICAgICAgICAgImdldHBlZXJuYW1lfHNldHByaW9yaXR5fGdldHByb3RvZW50fHNldHByb3RvZW50fGdldHByaW9yaXR5fCIgKwogICAgICAgICAiZW5kcHJvdG9lbnR8Z2V0c2VydmVudHxzZXRzZXJ2ZW50fGVuZHNlcnZlbnR8c2V0aG9zdGVudHxzb2NrZXRwYWlyfCIgKwogICAgICAgICAiZ2V0c29ja29wdHxnZXRob3N0ZW50fGVuZGhvc3RlbnR8c2V0c29ja29wdHxzZXRuZXRlbnR8cXVvdGVtZXRhfCIgKwogICAgICAgICAibG9jYWx0aW1lfHByb3RvdHlwZXxnZXRuZXRlbnR8ZW5kbmV0ZW50fHJld2luZGRpcnx3YW50YXJyYXl8Z2V0cHd1aWR8IiArCiAgICAgICAgICJjbG9zZWRpcnxnZXRsb2dpbnxyZWFkbGlua3xlbmRncmVudHxnZXRncmdpZHxnZXRncm5hbXxzaG13cml0ZXwiICsKICAgICAgICAgInNodXRkb3dufHJlYWRsaW5lfGVuZHB3ZW50fHNldGdyZW50fHJlYWRwaXBlfGZvcm1saW5lfHRydW5jYXRlfCIgKwogICAgICAgICAiZGJtY2xvc2V8c3lzd3JpdGV8c2V0cHdlbnR8Z2V0cHduYW18Z2V0Z3JlbnR8Z2V0cHdlbnR8dWNmaXJzdHxzeXNyZWFkfCIgKwogICAgICAgICAic2V0cGdycHxzaG1yZWFkfHN5c3NlZWt8c3lzb3Blbnx0ZWxsZGlyfGRlZmluZWR8b3BlbmRpcnxjb25uZWN0fCIgKwogICAgICAgICAibGNmaXJzdHxnZXRwcGlkfGJpbm1vZGV8c3lzY2FsbHxzcHJpbnRmfGdldHBncnB8cmVhZGRpcnxzZWVrZGlyfCIgKwogICAgICAgICAid2FpdHBpZHxyZXZlcnNlfHVuc2hpZnR8c3ltbGlua3xkYm1vcGVufHNlbWdldHxtc2dyY3Z8cmVuYW1lfGxpc3RlbnwiICsKICAgICAgICAgImNocm9vdHxtc2dzbmR8c2htY3RsfGFjY2VwdHx1bnBhY2t8ZXhpc3RzfGZpbGVub3xzaG1nZXR8c3lzdGVtfCIgKwogICAgICAgICAidW5saW5rfHByaW50ZnxnbXRpbWV8bXNnY3RsfHNlbWN0bHx2YWx1ZXN8cmluZGV4fHN1YnN0cnxzcGxpY2V8IiArCiAgICAgICAgICJsZW5ndGh8bXNnZ2V0fHNlbGVjdHxzb2NrZXR8cmV0dXJufGNhbGxlcnxkZWxldGV8YWxhcm18aW9jdGx8aW5kZXh8IiArCiAgICAgICAgICJ1bmRlZnxsc3RhdHx0aW1lc3xzcmFuZHxjaG93bnxmY250bHxjbG9zZXx3cml0ZXx1bWFza3xybWRpcnxzdHVkeXwiICsKICAgICAgICAgInNsZWVwfGNob21wfHVudGllfHByaW50fHV0aW1lfG1rZGlyfGF0YW4yfHNwbGl0fGNyeXB0fGZsb2NrfGNobW9kfCIgKwogICAgICAgICAiQkVHSU58Ymxlc3N8Y2hkaXJ8c2Vtb3B8c2hpZnR8cmVzZXR8bGlua3xzdGF0fGNob3B8Z3JlcHxmb3JrfGR1bXB8IiArCiAgICAgICAgICJqb2lufG9wZW58dGVsbHxwaXBlfGV4aXR8Z2xvYnx3YXJufGVhY2h8YmluZHxzb3J0fHBhY2t8ZXZhbHxwdXNofCIgKwogICAgICAgICAia2V5c3xnZXRjfGtpbGx8c2Vla3xzcXJ0fHNlbmR8d2FpdHxyYW5kfHRpZWR8cmVhZHx0aW1lfGV4ZWN8cmVjdnwiICsKICAgICAgICAgImVvZnxjaHJ8aW50fG9yZHxleHB8cG9zfHBvcHxzaW58bG9nfGFic3xvY3R8aGV4fHRpZXxjb3N8dmVjfEVORHxyZWZ8IiArCiAgICAgICAgICJtYXB8ZGllfHVjfGxjfGRvIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsZGluQ29uc3RhbnRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJePSg/OmJlZ2lufGl0ZW0pXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiYmxvY2tfY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXS4qXFxcXCQnLAogICAgICAgICAgICAgICAgbmV4dCA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10uKlxcXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAiMHhbMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIlI3xcXCQjfFxcLlxcLlxcLnxcXHxcXHw9fD4+PXw8PD18PD0+fCYmPXw9PnwhfnxcXF49fCY9fFxcfD18XFwuPXx4PXwlPXxcXC89fFxcKj18XFwtPXxcXCs9fD1+fFxcKlxcKnxcXC1cXC18XFwuXFwufFxcfFxcfHwmJnxcXCtcXCt8XFwtPnwhPXw9PXw+PXw8PXw+Pnw8PHwsfD18XFw/XFw6fFxcXnxcXHx8eHwlfFxcL3xcXCp8PHwmfFxcXFx8fnwhfD58XFwufFxcLXxcXCt8XFwtQ3xcXC1ifFxcLVN8XFwtdXxcXC10fFxcLXB8XFwtbHxcXC1kfFxcLWZ8XFwtZ3xcXC1zfFxcLXp8XFwta3xcXC1lfFxcLU98XFwtVHxcXC1CfFxcLU18XFwtQXxcXC1YfFxcLVd8XFwtY3xcXC1SfFxcLW98XFwteHxcXC13fFxcLXJ8XFxiKD86YW5kfGNtcHxlcXxnZXxndHxsZXxsdHxuZXxub3R8b3J8eG9yKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcuKycKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImJsb2NrX2NvbW1lbnQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5kb2MiLCAKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXj1jdXRcXGIiLAogICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50LmRvYyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoUGVybEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QZXJsSGlnaGxpZ2h0UnVsZXMgPSBQZXJsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9weXRob25faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImFuZHxhc3xhc3NlcnR8YnJlYWt8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8IiArCiAgICAgICAgImZpbmFsbHl8Zm9yfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpc3xsYW1iZGF8bm90fG9yfHBhc3N8cHJpbnR8IiArCiAgICAgICAgInJhaXNlfHJldHVybnx0cnl8d2hpbGV8d2l0aHx5aWVsZHxhc3luY3xhd2FpdHxub25sb2NhbCIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoCiAgICAgICAgIlRydWV8RmFsc2V8Tm9uZXxOb3RJbXBsZW1lbnRlZHxFbGxpcHNpc3xfX2RlYnVnX18iCiAgICApOwoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYnN8ZGl2bW9kfGlucHV0fG9wZW58c3RhdGljbWV0aG9kfGFsbHxlbnVtZXJhdGV8aW50fG9yZHxzdHJ8YW55fCIgKwogICAgICAgICJldmFsfGlzaW5zdGFuY2V8cG93fHN1bXxiYXNlc3RyaW5nfGV4ZWNmaWxlfGlzc3ViY2xhc3N8cHJpbnR8c3VwZXJ8IiArCiAgICAgICAgImJpbmZpbGV8YmlufGl0ZXJ8cHJvcGVydHl8dHVwbGV8Ym9vbHxmaWx0ZXJ8bGVufHJhbmdlfHR5cGV8Ynl0ZWFycmF5fCIgKwogICAgICAgICJmbG9hdHxsaXN0fHJhd19pbnB1dHx1bmljaHJ8Y2FsbGFibGV8Zm9ybWF0fGxvY2Fsc3xyZWR1Y2V8dW5pY29kZXwiICsKICAgICAgICAiY2hyfGZyb3plbnNldHxsb25nfHJlbG9hZHx2YXJzfGNsYXNzbWV0aG9kfGdldGF0dHJ8bWFwfHJlcHJ8eHJhbmdlfCIgKwogICAgICAgICJjbXB8Z2xvYmFsc3xtYXh8cmV2ZXJzZWR8emlwfGNvbXBpbGV8aGFzYXR0cnxtZW1vcnl2aWV3fHJvdW5kfCIgKwogICAgICAgICJfX2ltcG9ydF9ffGNvbXBsZXh8aGFzaHxtaW58YXBwbHl8ZGVsYXR0cnxoZWxwfG5leHR8c2V0YXR0cnxzZXR8IiArCiAgICAgICAgImJ1ZmZlcnxkaWN0fGhleHxvYmplY3R8c2xpY2V8Y29lcmNlfGRpcnxpZHxvY3R8c29ydGVkfGludGVybnwiICsKICAgICAgICAiYXNjaWl8YnJlYWtwb2ludHxieXRlcyIKICAgICk7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6ICJkZWJ1Z2dlciIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJzZWxmfGNscyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBzdHJQcmUgPSAiW3VVXT8iOwogICAgdmFyIHN0clJhd1ByZSA9ICJbclJdIjsKICAgIHZhciBzdHJGb3JtYXRQcmUgPSAiW2ZGXSI7CiAgICB2YXIgc3RyUmF3Rm9ybWF0UHJlID0gIig/OltyUl1bZkZdfFtmRl1bclJdKSI7CiAgICB2YXIgZGVjaW1hbEludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwogICAgdmFyIG9jdEludGVnZXIgPSAiKD86MFtvT10/WzAtN10rKSI7CiAgICB2YXIgaGV4SW50ZWdlciA9ICIoPzowW3hYXVtcXGRBLUZhLWZdKykiOwogICAgdmFyIGJpbkludGVnZXIgPSAiKD86MFtiQl1bMDFdKykiOwogICAgdmFyIGludGVnZXIgPSAiKD86IiArIGRlY2ltYWxJbnRlZ2VyICsgInwiICsgb2N0SW50ZWdlciArICJ8IiArIGhleEludGVnZXIgKyAifCIgKyBiaW5JbnRlZ2VyICsgIikiOwoKICAgIHZhciBleHBvbmVudCA9ICIoPzpbZUVdWystXT9cXGQrKSI7CiAgICB2YXIgZnJhY3Rpb24gPSAiKD86XFwuXFxkKykiOwogICAgdmFyIGludFBhcnQgPSAiKD86XFxkKykiOwogICAgdmFyIHBvaW50RmxvYXQgPSAiKD86KD86IiArIGludFBhcnQgKyAiPyIgKyBmcmFjdGlvbiArICIpfCg/OiIgKyBpbnRQYXJ0ICsgIlxcLikpIjsKICAgIHZhciBleHBvbmVudEZsb2F0ID0gIig/Oig/OiIgKyBwb2ludEZsb2F0ICsgInwiICsgaW50UGFydCArICIpIiArIGV4cG9uZW50ICsgIikiOwogICAgdmFyIGZsb2F0TnVtYmVyID0gIig/OiIgKyBleHBvbmVudEZsb2F0ICsgInwiICsgcG9pbnRGbG9hdCArICIpIjsKCiAgICB2YXIgc3RyaW5nRXNjYXBlID0gIlxcXFwoeFswLTlBLUZhLWZdezJ9fFswLTddezN9fFtcXFxcYWJmbnJ0didcIl18VVswLTlBLUZhLWZdezh9fHVbMC05QS1GYS1mXXs0fSkiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiMuKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgIHJlZ2V4IDogc3RyUHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6IHN0clByZSArICciKD89LiknLAogICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBzdGFydAogICAgICAgICAgICByZWdleCA6IHN0clByZSArICInezN9IiwKICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICByZWdleCA6IHN0clByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdQcmUgKyAnInszfScsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIAogICAgICAgICAgICByZWdleDogc3RyUmF3UHJlICsgJyIoPz0uKScsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd1ByZSArICInezN9IiwKICAgICAgICAgICAgbmV4dDogInJhd3FzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3UHJlICsgIicoPz0uKSIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyRm9ybWF0UHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAiZnFxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICciKD89LiknLAogICAgICAgICAgICBuZXh0OiAiZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyRm9ybWF0UHJlICsgIid7M30iLAogICAgICAgICAgICBuZXh0OiAiZnFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyRm9ybWF0UHJlICsgIicoPz0uKSIsCiAgICAgICAgICAgIG5leHQ6ICJmcXN0cmluZyIKICAgICAgICB9LHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAicmZxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdGb3JtYXRQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dDogInJmcXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdGb3JtYXRQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQ6ICJyZnFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgIicoPz0uKSIsCiAgICAgICAgICAgIG5leHQ6ICJyZnFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogIlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfCV8QHw8PHw+PnwmfFxcfHxcXF58fnw8fD58PD18PT58PT18IT18PD58PSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogIix8Onw7fFxcLT58XFwrPXxcXC09fFxcKj18XFwvPXxcXC9cXC89fCU9fEA9fCY9fFxcfD18Xj18Pj49fDw8PXxcXCpcXCo9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIltcXFtcXChcXHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIltcXF1cXClcXH1dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXg6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImNvbnN0YW50cyIKICAgICAgICB9XSwKICAgICAgICAicXFzdHJpbmczIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICciezN9JywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInFxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAicXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnInwkJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAicXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3Fxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3FzdHJpbmczIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3Fxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInJhd3Fxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmF3cXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIid8JCIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAiZnFxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lICIiIiBzdHJpbmcgZW5kCiAgICAgICAgICAgIHJlZ2V4OiAnInszfScsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJmcXFzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJmcXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnInwkJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAiZnFzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyZnFxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyZnFzdHJpbmczIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyZnFxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInJmcXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnInwkJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIid8JCIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxc3RyaW5nUGFyUnVsZXMiOiBbey8vVE9ETzogbmVzdGVkIHt9CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxbXFwoXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxdXFwpXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIicoLikqJyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICciKC4pKiInCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImZ1bmN0aW9uLnN1cHBvcnQiLAogICAgICAgICAgICByZWdleDogIighc3whcnwhYSkiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiY29uc3RhbnRzIgogICAgICAgIH0sewogICAgICAgICAgICB0b2tlbjogJ3BhcmVuLnJwYXJlbicsCiAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgIG5leHQ6ICdwb3AnCiAgICAgICAgfSx7CiAgICAgICAgICAgIHRva2VuOiAncGFyZW4ubHBhcmVuJywKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfV0sCiAgICAgICAgImNvbnN0YW50cyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGltYWdpbmFyeQogICAgICAgICAgICByZWdleDogIig/OiIgKyBmbG9hdE51bWJlciArICJ8XFxkKylbakpdXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXg6IGZsb2F0TnVtYmVyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBsb25nIGludGVnZXIKICAgICAgICAgICAgcmVnZXg6IGludGVnZXIgKyAiW2xMXVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgcmVnZXg6IGludGVnZXIgKyAiXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsicHVuY3R1YXRpb24iLCAiZnVuY3Rpb24uc3VwcG9ydCJdLC8vIG1ldGhvZAogICAgICAgICAgICByZWdleDogIihcXC4pKFthLXpBLVpfXSspXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH1dCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFB5dGhvbkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QeXRob25IaWdobGlnaHRSdWxlcyA9IFB5dGhvbkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvanNvbl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBKc29uSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl1cXHMqKD89OiknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAiMFt4WF1bMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLCAvLyBzaW5nbGUgcXVvdGVkIHN0cmluZ3MgYXJlIG5vdCBhbGxvd2VkCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY29tbWVudHMgYXJlIG5vdCBhbGxvd2VkLCBidXQgd2hvIGNhcmVzPwogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LnN0YXJ0IiwgLy8gY29tbWVudHMgYXJlIG5vdCBhbGxvd2VkLCBidXQgd2hvIGNhcmVzPwogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/OnhbMC05YS1mQS1GXXsyfXx1WzAtOWEtZkEtRl17NH18WyJcXFwvYmZucnRdKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmVuZCIsIC8vIGNvbW1lbnRzIGFyZSBub3QgYWxsb3dlZCwgYnV0IHdobyBjYXJlcz8KICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICAKfTsKCm9vcC5pbmhlcml0cyhKc29uSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkpzb25IaWdobGlnaHRSdWxlcyA9IEpzb25IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcGdzcWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvcHl0aG9uX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2pzb25faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBQZXJsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3BlcmxfaGlnaGxpZ2h0X3J1bGVzIikuUGVybEhpZ2hsaWdodFJ1bGVzOwp2YXIgUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3B5dGhvbl9oaWdobGlnaHRfcnVsZXMiKS5QeXRob25IaWdobGlnaHRSdWxlczsKdmFyIEpzb25IaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vanNvbl9oaWdobGlnaHRfcnVsZXMiKS5Kc29uSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFBnc3FsSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYWJvcnR8YWJzb2x1dGV8YWJzdGltZXxhY2Nlc3N8YWNsaXRlbXxhY3Rpb258YWRkfGFkbWlufGFmdGVyfGFnZ3JlZ2F0ZXxhbGx8YWxzb3xhbHRlcnxhbHdheXN8IiArCiAgICAgICAgImFuYWx5c2V8YW5hbHl6ZXxhbmR8YW55fGFueWFycmF5fGFueWVsZW1lbnR8YW55ZW51bXxhbnlub25hcnJheXxhbnlyYW5nZXxhcnJheXxhc3xhc2N8IiArCiAgICAgICAgImFzc2VydGlvbnxhc3NpZ25tZW50fGFzeW1tZXRyaWN8YXR8YXR0cmlidXRlfGF1dGhvcml6YXRpb258YmFja3dhcmR8YmVmb3JlfGJlZ2lufGJldHdlZW58IiArCiAgICAgICAgImJpZ2ludHxiaW5hcnl8Yml0fGJvb2x8Ym9vbGVhbnxib3RofGJveHxicGNoYXJ8Ynl8Ynl0ZWF8Y2FjaGV8Y2FsbGVkfGNhc2NhZGV8Y2FzY2FkZWR8Y2FzZXxjYXN0fCIgKwogICAgICAgICJjYXRhbG9nfGNoYWlufGNoYXJ8Y2hhcmFjdGVyfGNoYXJhY3RlcmlzdGljc3xjaGVja3xjaGVja3BvaW50fGNpZHxjaWRyfGNpcmNsZXxjbGFzc3xjbG9zZXwiICsKICAgICAgICAiY2x1c3Rlcnxjb2FsZXNjZXxjb2xsYXRlfGNvbGxhdGlvbnxjb2x1bW58Y29tbWVudHxjb21tZW50c3xjb21taXR8Y29tbWl0dGVkfGNvbmN1cnJlbnRseXwiICsKICAgICAgICAiY29uZmlndXJhdGlvbnxjb25uZWN0aW9ufGNvbnN0cmFpbnR8Y29uc3RyYWludHN8Y29udGVudHxjb250aW51ZXxjb252ZXJzaW9ufGNvcHl8Y29zdHwiICsKICAgICAgICAiY3JlYXRlfGNyb3NzfGNzdHJpbmd8Y3N2fGN1cnJlbnR8Y3VycmVudF9jYXRhbG9nfGN1cnJlbnRfZGF0ZXxjdXJyZW50X3JvbGV8IiArCiAgICAgICAgImN1cnJlbnRfc2NoZW1hfGN1cnJlbnRfdGltZXxjdXJyZW50X3RpbWVzdGFtcHxjdXJyZW50X3VzZXJ8Y3Vyc29yfGN5Y2xlfGRhdGF8ZGF0YWJhc2V8IiArCiAgICAgICAgImRhdGV8ZGF0ZXJhbmdlfGRheXxkZWFsbG9jYXRlfGRlY3xkZWNpbWFsfGRlY2xhcmV8ZGVmYXVsdHxkZWZhdWx0c3xkZWZlcnJhYmxlfGRlZmVycmVkfCIgKwogICAgICAgICJkZWZpbmVyfGRlbGV0ZXxkZWxpbWl0ZXJ8ZGVsaW1pdGVyc3xkZXNjfGRpY3Rpb25hcnl8ZGlzYWJsZXxkaXNjYXJkfGRpc3RpbmN0fGRvfGRvY3VtZW50fCIgKwogICAgICAgICJkb21haW58ZG91YmxlfGRyb3B8ZWFjaHxlbHNlfGVuYWJsZXxlbmNvZGluZ3xlbmNyeXB0ZWR8ZW5kfGVudW18ZXNjYXBlfGV2ZW50fGV2ZW50X3RyaWdnZXJ8IiArCiAgICAgICAgImV4Y2VwdHxleGNsdWRlfGV4Y2x1ZGluZ3xleGNsdXNpdmV8ZXhlY3V0ZXxleGlzdHN8ZXhwbGFpbnxleHRlbnNpb258ZXh0ZXJuYWx8ZXh0cmFjdHxmYWxzZXwiICsKICAgICAgICAiZmFtaWx5fGZkd19oYW5kbGVyfGZldGNofGZpcnN0fGZsb2F0fGZsb2F0NHxmbG9hdDh8Zm9sbG93aW5nfGZvcnxmb3JjZXxmb3JlaWdufGZvcndhcmR8IiArCiAgICAgICAgImZyZWV6ZXxmcm9tfGZ1bGx8ZnVuY3Rpb258ZnVuY3Rpb25zfGdsb2JhbHxncmFudHxncmFudGVkfGdyZWF0ZXN0fGdyb3VwfGd0c3ZlY3RvcnxoYW5kbGVyfCIgKwogICAgICAgICJoYXZpbmd8aGVhZGVyfGhvbGR8aG91cnxpZGVudGl0eXxpZnxpbGlrZXxpbW1lZGlhdGV8aW1tdXRhYmxlfGltcGxpY2l0fGlufGluY2x1ZGluZ3wiICsKICAgICAgICAiaW5jcmVtZW50fGluZGV4fGluZGV4ZXN8aW5ldHxpbmhlcml0fGluaGVyaXRzfGluaXRpYWxseXxpbmxpbmV8aW5uZXJ8aW5vdXR8aW5wdXR8IiArCiAgICAgICAgImluc2Vuc2l0aXZlfGluc2VydHxpbnN0ZWFkfGludHxpbnQyfGludDJ2ZWN0b3J8aW50NHxpbnQ0cmFuZ2V8aW50OHxpbnQ4cmFuZ2V8aW50ZWdlcnwiICsKICAgICAgICAiaW50ZXJuYWx8aW50ZXJzZWN0fGludGVydmFsfGludG98aW52b2tlcnxpc3xpc251bGx8aXNvbGF0aW9ufGpvaW58anNvbnxrZXl8bGFiZWx8bGFuZ3VhZ2V8IiArCiAgICAgICAgImxhbmd1YWdlX2hhbmRsZXJ8bGFyZ2V8bGFzdHxsYXRlcmFsfGxjX2NvbGxhdGV8bGNfY3R5cGV8bGVhZGluZ3xsZWFrcHJvb2Z8bGVhc3R8bGVmdHxsZXZlbHwiICsKICAgICAgICAibGlrZXxsaW1pdHxsaW5lfGxpc3Rlbnxsb2FkfGxvY2FsfGxvY2FsdGltZXxsb2NhbHRpbWVzdGFtcHxsb2NhdGlvbnxsb2NrfGxzZWd8bWFjYWRkcnwiICsKICAgICAgICAibWFwcGluZ3xtYXRjaHxtYXRlcmlhbGl6ZWR8bWF4dmFsdWV8bWludXRlfG1pbnZhbHVlfG1vZGV8bW9uZXl8bW9udGh8bW92ZXxuYW1lfG5hbWVzfCIgKwogICAgICAgICJuYXRpb25hbHxuYXR1cmFsfG5jaGFyfG5leHR8bm98bm9uZXxub3R8bm90aGluZ3xub3RpZnl8bm90bnVsbHxub3dhaXR8bnVsbHxudWxsaWZ8bnVsbHN8IiArCiAgICAgICAgIm51bWVyaWN8bnVtcmFuZ2V8b2JqZWN0fG9mfG9mZnxvZmZzZXR8b2lkfG9pZHN8b2lkdmVjdG9yfG9ufG9ubHl8b3BhcXVlfG9wZXJhdG9yfG9wdGlvbnwiICsKICAgICAgICAib3B0aW9uc3xvcnxvcmRlcnxvdXR8b3V0ZXJ8b3ZlcnxvdmVybGFwc3xvdmVybGF5fG93bmVkfG93bmVyfHBhcnNlcnxwYXJ0aWFsfHBhcnRpdGlvbnxwYXNzaW5nfCIgKwogICAgICAgICJwYXNzd29yZHxwYXRofHBnX2F0dHJpYnV0ZXxwZ19hdXRoX21lbWJlcnN8cGdfYXV0aGlkfHBnX2NsYXNzfHBnX2RhdGFiYXNlfHBnX25vZGVfdHJlZXwiICsKICAgICAgICAicGdfcHJvY3xwZ190eXBlfHBsYWNpbmd8cGxhbnN8cG9pbnR8cG9seWdvbnxwb3NpdGlvbnxwcmVjZWRpbmd8cHJlY2lzaW9ufHByZXBhcmV8cHJlcGFyZWR8IiArCiAgICAgICAgInByZXNlcnZlfHByaW1hcnl8cHJpb3J8cHJpdmlsZWdlc3xwcm9jZWR1cmFsfHByb2NlZHVyZXxwcm9ncmFtfHF1b3RlfHJhbmdlfHJlYWR8cmVhbHwiICsKICAgICAgICAicmVhc3NpZ258cmVjaGVja3xyZWNvcmR8cmVjdXJzaXZlfHJlZnxyZWZjdXJzb3J8cmVmZXJlbmNlc3xyZWZyZXNofHJlZ2NsYXNzfHJlZ2NvbmZpZ3wiICsKICAgICAgICAicmVnZGljdGlvbmFyeXxyZWdvcGVyfHJlZ29wZXJhdG9yfHJlZ3Byb2N8cmVncHJvY2VkdXJlfHJlZ3R5cGV8cmVpbmRleHxyZWxhdGl2ZXxyZWxlYXNlfCIgKwogICAgICAgICJyZWx0aW1lfHJlbmFtZXxyZXBlYXRhYmxlfHJlcGxhY2V8cmVwbGljYXxyZXNldHxyZXN0YXJ0fHJlc3RyaWN0fHJldHVybmluZ3xyZXR1cm5zfHJldm9rZXwiICsKICAgICAgICAicmlnaHR8cm9sZXxyb2xsYmFja3xyb3d8cm93c3xydWxlfHNhdmVwb2ludHxzY2hlbWF8c2Nyb2xsfHNlYXJjaHxzZWNvbmR8c2VjdXJpdHl8c2VsZWN0fCIgKwogICAgICAgICJzZXF1ZW5jZXxzZXF1ZW5jZXN8c2VyaWFsaXphYmxlfHNlcnZlcnxzZXNzaW9ufHNlc3Npb25fdXNlcnxzZXR8c2V0b2Z8c2hhcmV8c2hvd3xzaW1pbGFyfCIgKwogICAgICAgICJzaW1wbGV8c21hbGxpbnR8c21ncnxzbmFwc2hvdHxzb21lfHN0YWJsZXxzdGFuZGFsb25lfHN0YXJ0fHN0YXRlbWVudHxzdGF0aXN0aWNzfHN0ZGlufCIgKwogICAgICAgICJzdGRvdXR8c3RvcmFnZXxzdHJpY3R8c3RyaXB8c3Vic3RyaW5nfHN5bW1ldHJpY3xzeXNpZHxzeXN0ZW18dGFibGV8dGFibGVzfHRhYmxlc3BhY2V8dGVtcHwiICsKICAgICAgICAidGVtcGxhdGV8dGVtcG9yYXJ5fHRleHR8dGhlbnx0aWR8dGltZXx0aW1lc3RhbXB8dGltZXN0YW1wdHp8dGltZXR6fHRpbnRlcnZhbHx0b3x0cmFpbGluZ3wiICsKICAgICAgICAidHJhbnNhY3Rpb258dHJlYXR8dHJpZ2dlcnx0cmltfHRydWV8dHJ1bmNhdGV8dHJ1c3RlZHx0c3F1ZXJ5fHRzcmFuZ2V8dHN0enJhbmdlfHRzdmVjdG9yfCIgKwogICAgICAgICJ0eGlkX3NuYXBzaG90fHR5cGV8dHlwZXN8dW5ib3VuZGVkfHVuY29tbWl0dGVkfHVuZW5jcnlwdGVkfHVuaW9ufHVuaXF1ZXx1bmtub3dufHVubGlzdGVufCIgKwogICAgICAgICJ1bmxvZ2dlZHx1bnRpbHx1cGRhdGV8dXNlcnx1c2luZ3x1dWlkfHZhY3V1bXx2YWxpZHx2YWxpZGF0ZXx2YWxpZGF0b3J8dmFsdWV8dmFsdWVzfHZhcmJpdHwiICsKICAgICAgICAidmFyY2hhcnx2YXJpYWRpY3x2YXJ5aW5nfHZlcmJvc2V8dmVyc2lvbnx2aWV3fHZvaWR8dm9sYXRpbGV8d2hlbnx3aGVyZXx3aGl0ZXNwYWNlfHdpbmRvd3wiICsKICAgICAgICAid2l0aHx3aXRob3V0fHdvcmt8d3JhcHBlcnx3cml0ZXx4aWR8eG1sfHhtbGF0dHJpYnV0ZXN8eG1sY29uY2F0fHhtbGVsZW1lbnR8eG1sZXhpc3RzfCIgKwogICAgICAgICJ4bWxmb3Jlc3R8eG1scGFyc2V8eG1scGl8eG1scm9vdHx4bWxzZXJpYWxpemV8eWVhcnx5ZXN8em9uZSIKICAgICk7CgoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJSSV9GS2V5X2Nhc2NhZGVfZGVsfFJJX0ZLZXlfY2FzY2FkZV91cGR8UklfRktleV9jaGVja19pbnN8UklfRktleV9jaGVja191cGR8IiArCiAgICAgICAgIlJJX0ZLZXlfbm9hY3Rpb25fZGVsfFJJX0ZLZXlfbm9hY3Rpb25fdXBkfFJJX0ZLZXlfcmVzdHJpY3RfZGVsfFJJX0ZLZXlfcmVzdHJpY3RfdXBkfCIgKwogICAgICAgICJSSV9GS2V5X3NldGRlZmF1bHRfZGVsfFJJX0ZLZXlfc2V0ZGVmYXVsdF91cGR8UklfRktleV9zZXRudWxsX2RlbHwiICsKICAgICAgICAiUklfRktleV9zZXRudWxsX3VwZHxhYmJyZXZ8YWJzfGFic3RpbWV8YWJzdGltZWVxfGFic3RpbWVnZXxhYnN0aW1lZ3R8YWJzdGltZWlufGFic3RpbWVsZXwiICsKICAgICAgICAiYWJzdGltZWx0fGFic3RpbWVuZXxhYnN0aW1lb3V0fGFic3RpbWVyZWN2fGFic3RpbWVzZW5kfGFjbGNvbnRhaW5zfGFjbGRlZmF1bHR8IiArCiAgICAgICAgImFjbGV4cGxvZGV8YWNsaW5zZXJ0fGFjbGl0ZW1lcXxhY2xpdGVtaW58YWNsaXRlbW91dHxhY2xyZW1vdmV8YWNvc3xhZ2V8YW55X2lufGFueV9vdXR8IiArCiAgICAgICAgImFueWFycmF5X2lufGFueWFycmF5X291dHxhbnlhcnJheV9yZWN2fGFueWFycmF5X3NlbmR8YW55ZWxlbWVudF9pbnxhbnllbGVtZW50X291dHwiICsKICAgICAgICAiYW55ZW51bV9pbnxhbnllbnVtX291dHxhbnlub25hcnJheV9pbnxhbnlub25hcnJheV9vdXR8YW55cmFuZ2VfaW58YW55cmFuZ2Vfb3V0fCIgKwogICAgICAgICJhbnl0ZXh0Y2F0fGFyZWF8YXJlYWpvaW5zZWx8YXJlYXNlbHxhcnJheV9hZ2d8YXJyYXlfYWdnX2ZpbmFsZm58YXJyYXlfYWdnX3RyYW5zZm58IiArCiAgICAgICAgImFycmF5X2FwcGVuZHxhcnJheV9jYXR8YXJyYXlfZGltc3xhcnJheV9lcXxhcnJheV9maWxsfGFycmF5X2dlfGFycmF5X2d0fGFycmF5X2lufCIgKwogICAgICAgICJhcnJheV9sYXJnZXJ8YXJyYXlfbGV8YXJyYXlfbGVuZ3RofGFycmF5X2xvd2VyfGFycmF5X2x0fGFycmF5X25kaW1zfGFycmF5X25lfGFycmF5X291dHwiICsKICAgICAgICAiYXJyYXlfcHJlcGVuZHxhcnJheV9yZWN2fGFycmF5X3JlbW92ZXxhcnJheV9yZXBsYWNlfGFycmF5X3NlbmR8YXJyYXlfc21hbGxlcnwiICsKICAgICAgICAiYXJyYXlfdG9fanNvbnxhcnJheV90b19zdHJpbmd8YXJyYXlfdHlwYW5hbHl6ZXxhcnJheV91cHBlcnxhcnJheWNvbnRhaW5lZHwiICsKICAgICAgICAiYXJyYXljb250YWluc3xhcnJheWNvbnRqb2luc2VsfGFycmF5Y29udHNlbHxhcnJheW92ZXJsYXB8YXNjaWl8YXNjaWlfdG9fbWljfCIgKwogICAgICAgICJhc2NpaV90b191dGY4fGFzaW58YXRhbnxhdGFuMnxhdmd8YmlnNV90b19ldWNfdHd8YmlnNV90b19taWN8YmlnNV90b191dGY4fGJpdF9hbmR8Yml0X2lufCIgKwogICAgICAgICJiaXRfbGVuZ3RofGJpdF9vcnxiaXRfb3V0fGJpdF9yZWN2fGJpdF9zZW5kfGJpdGFuZHxiaXRjYXR8Yml0Y21wfGJpdGVxfGJpdGdlfGJpdGd0fGJpdGxlfCIgKwogICAgICAgICJiaXRsdHxiaXRuZXxiaXRub3R8Yml0b3J8Yml0c2hpZnRsZWZ0fGJpdHNoaWZ0cmlnaHR8Yml0dHlwbW9kaW58Yml0dHlwbW9kb3V0fGJpdHhvcnxib29sfCIgKwogICAgICAgICJib29sX2FuZHxib29sX29yfGJvb2xhbmRfc3RhdGVmdW5jfGJvb2xlcXxib29sZ2V8Ym9vbGd0fGJvb2xpbnxib29sbGV8Ym9vbGx0fGJvb2xuZXwiICsKICAgICAgICAiYm9vbG9yX3N0YXRlZnVuY3xib29sb3V0fGJvb2xyZWN2fGJvb2xzZW5kfGJveHxib3hfYWJvdmV8Ym94X2Fib3ZlX2VxfGJveF9hZGR8Ym94X2JlbG93fCIgKwogICAgICAgICJib3hfYmVsb3dfZXF8Ym94X2NlbnRlcnxib3hfY29udGFpbnxib3hfY29udGFpbl9wdHxib3hfY29udGFpbmVkfGJveF9kaXN0YW5jZXxib3hfZGl2fCIgKwogICAgICAgICJib3hfZXF8Ym94X2dlfGJveF9ndHxib3hfaW58Ym94X2ludGVyc2VjdHxib3hfbGV8Ym94X2xlZnR8Ym94X2x0fGJveF9tdWx8Ym94X291dHwiICsKICAgICAgICAiYm94X292ZXJhYm92ZXxib3hfb3ZlcmJlbG93fGJveF9vdmVybGFwfGJveF9vdmVybGVmdHxib3hfb3ZlcnJpZ2h0fGJveF9yZWN2fGJveF9yaWdodHwiICsKICAgICAgICAiYm94X3NhbWV8Ym94X3NlbmR8Ym94X3N1YnxicGNoYXJfbGFyZ2VyfGJwY2hhcl9wYXR0ZXJuX2dlfGJwY2hhcl9wYXR0ZXJuX2d0fCIgKwogICAgICAgICJicGNoYXJfcGF0dGVybl9sZXxicGNoYXJfcGF0dGVybl9sdHxicGNoYXJfc21hbGxlcnxicGNoYXJjbXB8YnBjaGFyZXF8YnBjaGFyZ2V8IiArCiAgICAgICAgImJwY2hhcmd0fGJwY2hhcmljbGlrZXxicGNoYXJpY25saWtlfGJwY2hhcmljcmVnZXhlcXxicGNoYXJpY3JlZ2V4bmV8YnBjaGFyaW58YnBjaGFybGV8IiArCiAgICAgICAgImJwY2hhcmxpa2V8YnBjaGFybHR8YnBjaGFybmV8YnBjaGFybmxpa2V8YnBjaGFyb3V0fGJwY2hhcnJlY3Z8YnBjaGFycmVnZXhlcXwiICsKICAgICAgICAiYnBjaGFycmVnZXhuZXxicGNoYXJzZW5kfGJwY2hhcnR5cG1vZGlufGJwY2hhcnR5cG1vZG91dHxicm9hZGNhc3R8YnRhYnN0aW1lY21wfCIgKwogICAgICAgICJidGFycmF5Y21wfGJ0YmVnaW5zY2FufGJ0Ym9vbGNtcHxidGJwY2hhcl9wYXR0ZXJuX2NtcHxidGJ1aWxkfGJ0YnVpbGRlbXB0eXwiICsKICAgICAgICAiYnRidWxrZGVsZXRlfGJ0Y2FucmV0dXJufGJ0Y2hhcmNtcHxidGNvc3Rlc3RpbWF0ZXxidGVuZHNjYW58YnRmbG9hdDQ4Y21wfGJ0ZmxvYXQ0Y21wfCIgKwogICAgICAgICJidGZsb2F0NHNvcnRzdXBwb3J0fGJ0ZmxvYXQ4NGNtcHxidGZsb2F0OGNtcHxidGZsb2F0OHNvcnRzdXBwb3J0fGJ0Z2V0Yml0bWFwfCIgKwogICAgICAgICJidGdldHR1cGxlfGJ0aW5zZXJ0fGJ0aW50MjRjbXB8YnRpbnQyOGNtcHxidGludDJjbXB8YnRpbnQyc29ydHN1cHBvcnR8YnRpbnQ0MmNtcHwiICsKICAgICAgICAiYnRpbnQ0OGNtcHxidGludDRjbXB8YnRpbnQ0c29ydHN1cHBvcnR8YnRpbnQ4MmNtcHxidGludDg0Y21wfGJ0aW50OGNtcHwiICsKICAgICAgICAiYnRpbnQ4c29ydHN1cHBvcnR8YnRtYXJrcG9zfGJ0bmFtZWNtcHxidG5hbWVzb3J0c3VwcG9ydHxidG9pZGNtcHxidG9pZHNvcnRzdXBwb3J0fCIgKwogICAgICAgICJidG9pZHZlY3RvcmNtcHxidG9wdGlvbnN8YnRyZWNvcmRjbXB8YnRyZWx0aW1lY21wfGJ0cmVzY2FufGJ0cmVzdHJwb3N8YnRyaW18IiArCiAgICAgICAgImJ0dGV4dF9wYXR0ZXJuX2NtcHxidHRleHRjbXB8YnR0aWRjbXB8YnR0aW50ZXJ2YWxjbXB8YnR2YWN1dW1jbGVhbnVwfCIgKwogICAgICAgICJieXRlYV9zdHJpbmdfYWdnX2ZpbmFsZm58Ynl0ZWFfc3RyaW5nX2FnZ190cmFuc2ZufGJ5dGVhY2F0fGJ5dGVhY21wfGJ5dGVhZXF8Ynl0ZWFnZXwiICsKICAgICAgICAiYnl0ZWFndHxieXRlYWlufGJ5dGVhbGV8Ynl0ZWFsaWtlfGJ5dGVhbHR8Ynl0ZWFuZXxieXRlYW5saWtlfGJ5dGVhb3V0fGJ5dGVhcmVjdnxieXRlYXNlbmR8IiArCiAgICAgICAgImNhc2hfY21wfGNhc2hfZGl2X2Nhc2h8Y2FzaF9kaXZfZmx0NHxjYXNoX2Rpdl9mbHQ4fGNhc2hfZGl2X2ludDJ8Y2FzaF9kaXZfaW50NHxjYXNoX2VxfCIgKwogICAgICAgICJjYXNoX2dlfGNhc2hfZ3R8Y2FzaF9pbnxjYXNoX2xlfGNhc2hfbHR8Y2FzaF9taXxjYXNoX211bF9mbHQ0fGNhc2hfbXVsX2ZsdDh8IiArCiAgICAgICAgImNhc2hfbXVsX2ludDJ8Y2FzaF9tdWxfaW50NHxjYXNoX25lfGNhc2hfb3V0fGNhc2hfcGx8Y2FzaF9yZWN2fGNhc2hfc2VuZHxjYXNoX3dvcmRzfCIgKwogICAgICAgICJjYXNobGFyZ2VyfGNhc2hzbWFsbGVyfGNicnR8Y2VpbHxjZWlsaW5nfGNlbnRlcnxjaGFyfGNoYXJfbGVuZ3RofGNoYXJhY3Rlcl9sZW5ndGh8Y2hhcmVxfCIgKwogICAgICAgICJjaGFyZ2V8Y2hhcmd0fGNoYXJpbnxjaGFybGV8Y2hhcmx0fGNoYXJuZXxjaGFyb3V0fGNoYXJyZWN2fGNoYXJzZW5kfGNocnxjaWRlcXxjaWRpbnxjaWRvdXR8IiArCiAgICAgICAgImNpZHJ8Y2lkcl9pbnxjaWRyX291dHxjaWRyX3JlY3Z8Y2lkcl9zZW5kfGNpZHJlY3Z8Y2lkc2VuZHxjaXJjbGV8Y2lyY2xlX2Fib3ZlfCIgKwogICAgICAgICJjaXJjbGVfYWRkX3B0fGNpcmNsZV9iZWxvd3xjaXJjbGVfY2VudGVyfGNpcmNsZV9jb250YWlufGNpcmNsZV9jb250YWluX3B0fCIgKwogICAgICAgICJjaXJjbGVfY29udGFpbmVkfGNpcmNsZV9kaXN0YW5jZXxjaXJjbGVfZGl2X3B0fGNpcmNsZV9lcXxjaXJjbGVfZ2V8Y2lyY2xlX2d0fGNpcmNsZV9pbnwiICsKICAgICAgICAiY2lyY2xlX2xlfGNpcmNsZV9sZWZ0fGNpcmNsZV9sdHxjaXJjbGVfbXVsX3B0fGNpcmNsZV9uZXxjaXJjbGVfb3V0fGNpcmNsZV9vdmVyYWJvdmV8IiArCiAgICAgICAgImNpcmNsZV9vdmVyYmVsb3d8Y2lyY2xlX292ZXJsYXB8Y2lyY2xlX292ZXJsZWZ0fGNpcmNsZV9vdmVycmlnaHR8Y2lyY2xlX3JlY3Z8IiArCiAgICAgICAgImNpcmNsZV9yaWdodHxjaXJjbGVfc2FtZXxjaXJjbGVfc2VuZHxjaXJjbGVfc3ViX3B0fGNsb2NrX3RpbWVzdGFtcHxjbG9zZV9sYnxjbG9zZV9sc3wiICsKICAgICAgICAiY2xvc2VfbHNlZ3xjbG9zZV9wYnxjbG9zZV9wbHxjbG9zZV9wc3xjbG9zZV9zYnxjbG9zZV9zbHxjb2xfZGVzY3JpcHRpb258Y29uY2F0fGNvbmNhdF93c3wiICsKICAgICAgICAiY29udGpvaW5zZWx8Y29udHNlbHxjb252ZXJ0fGNvbnZlcnRfZnJvbXxjb252ZXJ0X3RvfGNvcnJ8Y29zfGNvdHxjb3VudHxjb3Zhcl9wb3B8IiArCiAgICAgICAgImNvdmFyX3NhbXB8Y3N0cmluZ19pbnxjc3RyaW5nX291dHxjc3RyaW5nX3JlY3Z8Y3N0cmluZ19zZW5kfGN1bWVfZGlzdHxjdXJyZW50X2RhdGFiYXNlfCIgKwogICAgICAgICJjdXJyZW50X3F1ZXJ5fGN1cnJlbnRfc2NoZW1hfGN1cnJlbnRfc2NoZW1hc3xjdXJyZW50X3NldHRpbmd8Y3VycmVudF91c2VyfGN1cnJ0aWR8IiArCiAgICAgICAgImN1cnJ0aWQyfGN1cnJ2YWx8Y3Vyc29yX3RvX3htbHxjdXJzb3JfdG9feG1sc2NoZW1hfGRhdGFiYXNlX3RvX3htbHwiICsKICAgICAgICAiZGF0YWJhc2VfdG9feG1sX2FuZF94bWxzY2hlbWF8ZGF0YWJhc2VfdG9feG1sc2NoZW1hfGRhdGV8ZGF0ZV9jbXB8ZGF0ZV9jbXBfdGltZXN0YW1wfCIgKwogICAgICAgICJkYXRlX2NtcF90aW1lc3RhbXB0enxkYXRlX2VxfGRhdGVfZXFfdGltZXN0YW1wfGRhdGVfZXFfdGltZXN0YW1wdHp8ZGF0ZV9nZXwiICsKICAgICAgICAiZGF0ZV9nZV90aW1lc3RhbXB8ZGF0ZV9nZV90aW1lc3RhbXB0enxkYXRlX2d0fGRhdGVfZ3RfdGltZXN0YW1wfGRhdGVfZ3RfdGltZXN0YW1wdHp8IiArCiAgICAgICAgImRhdGVfaW58ZGF0ZV9sYXJnZXJ8ZGF0ZV9sZXxkYXRlX2xlX3RpbWVzdGFtcHxkYXRlX2xlX3RpbWVzdGFtcHR6fGRhdGVfbHR8IiArCiAgICAgICAgImRhdGVfbHRfdGltZXN0YW1wfGRhdGVfbHRfdGltZXN0YW1wdHp8ZGF0ZV9taXxkYXRlX21pX2ludGVydmFsfGRhdGVfbWlpfGRhdGVfbmV8IiArCiAgICAgICAgImRhdGVfbmVfdGltZXN0YW1wfGRhdGVfbmVfdGltZXN0YW1wdHp8ZGF0ZV9vdXR8ZGF0ZV9wYXJ0fGRhdGVfcGxfaW50ZXJ2YWx8ZGF0ZV9wbGl8IiArCiAgICAgICAgImRhdGVfcmVjdnxkYXRlX3NlbmR8ZGF0ZV9zbWFsbGVyfGRhdGVfc29ydHN1cHBvcnR8ZGF0ZV90cnVuY3xkYXRlcmFuZ2V8IiArCiAgICAgICAgImRhdGVyYW5nZV9jYW5vbmljYWx8ZGF0ZXJhbmdlX3N1YmRpZmZ8ZGF0ZXRpbWVfcGx8ZGF0ZXRpbWV0el9wbHxkY2JydHxkZWNvZGV8ZGVncmVlc3wiICsKICAgICAgICAiZGVuc2VfcmFua3xkZXhwfGRpYWdvbmFsfGRpYW1ldGVyfGRpc3BlbGxfaW5pdHxkaXNwZWxsX2xleGl6ZXxkaXN0X2Nwb2x5fGRpc3RfbGJ8ZGlzdF9wYnwiICsKICAgICAgICAiZGlzdF9wY3xkaXN0X3BsfGRpc3RfcHBhdGh8ZGlzdF9wc3xkaXN0X3NifGRpc3Rfc2x8ZGl2fGRsb2cxfGRsb2cxMHxkb21haW5faW58ZG9tYWluX3JlY3Z8IiArCiAgICAgICAgImRwb3d8ZHJvdW5kfGRzaW1wbGVfaW5pdHxkc2ltcGxlX2xleGl6ZXxkc25vd2JhbGxfaW5pdHxkc25vd2JhbGxfbGV4aXplfGRzcXJ0fCIgKwogICAgICAgICJkc3lub255bV9pbml0fGRzeW5vbnltX2xleGl6ZXxkdHJ1bmN8ZWxlbV9jb250YWluZWRfYnlfcmFuZ2V8ZW5jb2RlfGVudW1fY21wfGVudW1fZXF8IiArCiAgICAgICAgImVudW1fZmlyc3R8ZW51bV9nZXxlbnVtX2d0fGVudW1faW58ZW51bV9sYXJnZXJ8ZW51bV9sYXN0fGVudW1fbGV8ZW51bV9sdHxlbnVtX25lfGVudW1fb3V0fCIgKwogICAgICAgICJlbnVtX3JhbmdlfGVudW1fcmVjdnxlbnVtX3NlbmR8ZW51bV9zbWFsbGVyfGVxam9pbnNlbHxlcXNlbHxldWNfY25fdG9fbWljfCIgKwogICAgICAgICJldWNfY25fdG9fdXRmOHxldWNfamlzXzIwMDRfdG9fc2hpZnRfamlzXzIwMDR8ZXVjX2ppc18yMDA0X3RvX3V0Zjh8ZXVjX2pwX3RvX21pY3wiICsKICAgICAgICAiZXVjX2pwX3RvX3NqaXN8ZXVjX2pwX3RvX3V0Zjh8ZXVjX2tyX3RvX21pY3xldWNfa3JfdG9fdXRmOHxldWNfdHdfdG9fYmlnNXwiICsKICAgICAgICAiZXVjX3R3X3RvX21pY3xldWNfdHdfdG9fdXRmOHxldmVudF90cmlnZ2VyX2lufGV2ZW50X3RyaWdnZXJfb3V0fGV2ZXJ5fGV4cHxmYWN0b3JpYWx8IiArCiAgICAgICAgImZhbWlseXxmZHdfaGFuZGxlcl9pbnxmZHdfaGFuZGxlcl9vdXR8Zmlyc3RfdmFsdWV8ZmxvYXQ0fGZsb2F0NDhkaXZ8ZmxvYXQ0OGVxfGZsb2F0NDhnZXwiICsKICAgICAgICAiZmxvYXQ0OGd0fGZsb2F0NDhsZXxmbG9hdDQ4bHR8ZmxvYXQ0OG1pfGZsb2F0NDhtdWx8ZmxvYXQ0OG5lfGZsb2F0NDhwbHxmbG9hdDRfYWNjdW18IiArCiAgICAgICAgImZsb2F0NGFic3xmbG9hdDRkaXZ8ZmxvYXQ0ZXF8ZmxvYXQ0Z2V8ZmxvYXQ0Z3R8ZmxvYXQ0aW58ZmxvYXQ0bGFyZ2VyfGZsb2F0NGxlfGZsb2F0NGx0fCIgKwogICAgICAgICJmbG9hdDRtaXxmbG9hdDRtdWx8ZmxvYXQ0bmV8ZmxvYXQ0b3V0fGZsb2F0NHBsfGZsb2F0NHJlY3Z8ZmxvYXQ0c2VuZHxmbG9hdDRzbWFsbGVyfCIgKwogICAgICAgICJmbG9hdDR1bXxmbG9hdDR1cHxmbG9hdDh8ZmxvYXQ4NGRpdnxmbG9hdDg0ZXF8ZmxvYXQ4NGdlfGZsb2F0ODRndHxmbG9hdDg0bGV8ZmxvYXQ4NGx0fCIgKwogICAgICAgICJmbG9hdDg0bWl8ZmxvYXQ4NG11bHxmbG9hdDg0bmV8ZmxvYXQ4NHBsfGZsb2F0OF9hY2N1bXxmbG9hdDhfYXZnfGZsb2F0OF9jb3JyfCIgKwogICAgICAgICJmbG9hdDhfY292YXJfcG9wfGZsb2F0OF9jb3Zhcl9zYW1wfGZsb2F0OF9yZWdyX2FjY3VtfGZsb2F0OF9yZWdyX2F2Z3h8IiArCiAgICAgICAgImZsb2F0OF9yZWdyX2F2Z3l8ZmxvYXQ4X3JlZ3JfaW50ZXJjZXB0fGZsb2F0OF9yZWdyX3IyfGZsb2F0OF9yZWdyX3Nsb3BlfCIgKwogICAgICAgICJmbG9hdDhfcmVncl9zeHh8ZmxvYXQ4X3JlZ3Jfc3h5fGZsb2F0OF9yZWdyX3N5eXxmbG9hdDhfc3RkZGV2X3BvcHxmbG9hdDhfc3RkZGV2X3NhbXB8IiArCiAgICAgICAgImZsb2F0OF92YXJfcG9wfGZsb2F0OF92YXJfc2FtcHxmbG9hdDhhYnN8ZmxvYXQ4ZGl2fGZsb2F0OGVxfGZsb2F0OGdlfGZsb2F0OGd0fGZsb2F0OGlufCIgKwogICAgICAgICJmbG9hdDhsYXJnZXJ8ZmxvYXQ4bGV8ZmxvYXQ4bHR8ZmxvYXQ4bWl8ZmxvYXQ4bXVsfGZsb2F0OG5lfGZsb2F0OG91dHxmbG9hdDhwbHxmbG9hdDhyZWN2fCIgKwogICAgICAgICJmbG9hdDhzZW5kfGZsb2F0OHNtYWxsZXJ8ZmxvYXQ4dW18ZmxvYXQ4dXB8Zmxvb3J8Zmx0NF9tdWxfY2FzaHxmbHQ4X211bF9jYXNofCIgKwogICAgICAgICJmbWdyX2NfdmFsaWRhdG9yfGZtZ3JfaW50ZXJuYWxfdmFsaWRhdG9yfGZtZ3Jfc3FsX3ZhbGlkYXRvcnxmb3JtYXR8Zm9ybWF0X3R5cGV8IiArCiAgICAgICAgImdiMTgwMzBfdG9fdXRmOHxnYmtfdG9fdXRmOHxnZW5lcmF0ZV9zZXJpZXN8Z2VuZXJhdGVfc3Vic2NyaXB0c3xnZXRfYml0fGdldF9ieXRlfCIgKwogICAgICAgICJnZXRfY3VycmVudF90c19jb25maWd8Z2V0ZGF0YWJhc2VlbmNvZGluZ3xnZXRwZ3VzZXJuYW1lfGdpbl9jbXBfcHJlZml4fCIgKwogICAgICAgICJnaW5fY21wX3RzbGV4ZW1lfGdpbl9leHRyYWN0X3RzcXVlcnl8Z2luX2V4dHJhY3RfdHN2ZWN0b3J8Z2luX3RzcXVlcnlfY29uc2lzdGVudHwiICsKICAgICAgICAiZ2luYXJyYXljb25zaXN0ZW50fGdpbmFycmF5ZXh0cmFjdHxnaW5iZWdpbnNjYW58Z2luYnVpbGR8Z2luYnVpbGRlbXB0eXxnaW5idWxrZGVsZXRlfCIgKwogICAgICAgICJnaW5jb3N0ZXN0aW1hdGV8Z2luZW5kc2NhbnxnaW5nZXRiaXRtYXB8Z2luaW5zZXJ0fGdpbm1hcmtwb3N8Z2lub3B0aW9uc3wiICsKICAgICAgICAiZ2lucXVlcnlhcnJheWV4dHJhY3R8Z2lucmVzY2FufGdpbnJlc3RycG9zfGdpbnZhY3V1bWNsZWFudXB8Z2lzdF9ib3hfY29tcHJlc3N8IiArCiAgICAgICAgImdpc3RfYm94X2NvbnNpc3RlbnR8Z2lzdF9ib3hfZGVjb21wcmVzc3xnaXN0X2JveF9wZW5hbHR5fGdpc3RfYm94X3BpY2tzcGxpdHwiICsKICAgICAgICAiZ2lzdF9ib3hfc2FtZXxnaXN0X2JveF91bmlvbnxnaXN0X2NpcmNsZV9jb21wcmVzc3xnaXN0X2NpcmNsZV9jb25zaXN0ZW50fCIgKwogICAgICAgICJnaXN0X3BvaW50X2NvbXByZXNzfGdpc3RfcG9pbnRfY29uc2lzdGVudHxnaXN0X3BvaW50X2Rpc3RhbmNlfGdpc3RfcG9seV9jb21wcmVzc3wiICsKICAgICAgICAiZ2lzdF9wb2x5X2NvbnNpc3RlbnR8Z2lzdGJlZ2luc2NhbnxnaXN0YnVpbGR8Z2lzdGJ1aWxkZW1wdHl8Z2lzdGJ1bGtkZWxldGV8IiArCiAgICAgICAgImdpc3Rjb3N0ZXN0aW1hdGV8Z2lzdGVuZHNjYW58Z2lzdGdldGJpdG1hcHxnaXN0Z2V0dHVwbGV8Z2lzdGluc2VydHxnaXN0bWFya3Bvc3wiICsKICAgICAgICAiZ2lzdG9wdGlvbnN8Z2lzdHJlc2NhbnxnaXN0cmVzdHJwb3N8Z2lzdHZhY3V1bWNsZWFudXB8Z3RzcXVlcnlfY29tcHJlc3N8IiArCiAgICAgICAgImd0c3F1ZXJ5X2NvbnNpc3RlbnR8Z3RzcXVlcnlfZGVjb21wcmVzc3xndHNxdWVyeV9wZW5hbHR5fGd0c3F1ZXJ5X3BpY2tzcGxpdHwiICsKICAgICAgICAiZ3RzcXVlcnlfc2FtZXxndHNxdWVyeV91bmlvbnxndHN2ZWN0b3JfY29tcHJlc3N8Z3RzdmVjdG9yX2NvbnNpc3RlbnR8IiArCiAgICAgICAgImd0c3ZlY3Rvcl9kZWNvbXByZXNzfGd0c3ZlY3Rvcl9wZW5hbHR5fGd0c3ZlY3Rvcl9waWNrc3BsaXR8Z3RzdmVjdG9yX3NhbWV8IiArCiAgICAgICAgImd0c3ZlY3Rvcl91bmlvbnxndHN2ZWN0b3JpbnxndHN2ZWN0b3JvdXR8aGFzX2FueV9jb2x1bW5fcHJpdmlsZWdlfCIgKwogICAgICAgICJoYXNfY29sdW1uX3ByaXZpbGVnZXxoYXNfZGF0YWJhc2VfcHJpdmlsZWdlfGhhc19mb3JlaWduX2RhdGFfd3JhcHBlcl9wcml2aWxlZ2V8IiArCiAgICAgICAgImhhc19mdW5jdGlvbl9wcml2aWxlZ2V8aGFzX2xhbmd1YWdlX3ByaXZpbGVnZXxoYXNfc2NoZW1hX3ByaXZpbGVnZXwiICsKICAgICAgICAiaGFzX3NlcXVlbmNlX3ByaXZpbGVnZXxoYXNfc2VydmVyX3ByaXZpbGVnZXxoYXNfdGFibGVfcHJpdmlsZWdlfCIgKwogICAgICAgICJoYXNfdGFibGVzcGFjZV9wcml2aWxlZ2V8aGFzX3R5cGVfcHJpdmlsZWdlfGhhc2hfYWNsaXRlbXxoYXNoX2FycmF5fGhhc2hfbnVtZXJpY3wiICsKICAgICAgICAiaGFzaF9yYW5nZXxoYXNoYmVnaW5zY2FufGhhc2hicGNoYXJ8aGFzaGJ1aWxkfGhhc2hidWlsZGVtcHR5fGhhc2hidWxrZGVsZXRlfGhhc2hjaGFyfCIgKwogICAgICAgICJoYXNoY29zdGVzdGltYXRlfGhhc2hlbmRzY2FufGhhc2hlbnVtfGhhc2hmbG9hdDR8aGFzaGZsb2F0OHxoYXNoZ2V0Yml0bWFwfGhhc2hnZXR0dXBsZXwiICsKICAgICAgICAiaGFzaGluZXR8aGFzaGluc2VydHxoYXNoaW50MnxoYXNoaW50MnZlY3RvcnxoYXNoaW50NHxoYXNoaW50OHxoYXNobWFjYWRkcnxoYXNobWFya3Bvc3wiICsKICAgICAgICAiaGFzaG5hbWV8aGFzaG9pZHxoYXNob2lkdmVjdG9yfGhhc2hvcHRpb25zfGhhc2hyZXNjYW58aGFzaHJlc3RycG9zfGhhc2h0ZXh0fCIgKwogICAgICAgICJoYXNodmFjdXVtY2xlYW51cHxoYXNodmFybGVuYXxoZWlnaHR8aG9zdHxob3N0bWFza3xpY2xpa2Vqb2luc2VsfGljbGlrZXNlbHwiICsKICAgICAgICAiaWNubGlrZWpvaW5zZWx8aWNubGlrZXNlbHxpY3JlZ2V4ZXFqb2luc2VsfGljcmVnZXhlcXNlbHxpY3JlZ2V4bmVqb2luc2VsfGljcmVnZXhuZXNlbHwiICsKICAgICAgICAiaW5ldF9jbGllbnRfYWRkcnxpbmV0X2NsaWVudF9wb3J0fGluZXRfaW58aW5ldF9vdXR8aW5ldF9yZWN2fGluZXRfc2VuZHwiICsKICAgICAgICAiaW5ldF9zZXJ2ZXJfYWRkcnxpbmV0X3NlcnZlcl9wb3J0fGluZXRhbmR8aW5ldG1pfGluZXRtaV9pbnQ4fGluZXRub3R8aW5ldG9yfGluZXRwbHwiICsKICAgICAgICAiaW5pdGNhcHxpbnQyfGludDI0ZGl2fGludDI0ZXF8aW50MjRnZXxpbnQyNGd0fGludDI0bGV8aW50MjRsdHxpbnQyNG1pfGludDI0bXVsfGludDI0bmV8IiArCiAgICAgICAgImludDI0cGx8aW50MjhkaXZ8aW50MjhlcXxpbnQyOGdlfGludDI4Z3R8aW50MjhsZXxpbnQyOGx0fGludDI4bWl8aW50MjhtdWx8aW50MjhuZXxpbnQyOHBsfCIgKwogICAgICAgICJpbnQyX2FjY3VtfGludDJfYXZnX2FjY3VtfGludDJfbXVsX2Nhc2h8aW50Ml9zdW18aW50MmFic3xpbnQyYW5kfGludDJkaXZ8aW50MmVxfGludDJnZXwiICsKICAgICAgICAiaW50Mmd0fGludDJpbnxpbnQybGFyZ2VyfGludDJsZXxpbnQybHR8aW50Mm1pfGludDJtb2R8aW50Mm11bHxpbnQybmV8aW50Mm5vdHxpbnQyb3J8aW50Mm91dHwiICsKICAgICAgICAiaW50MnBsfGludDJyZWN2fGludDJzZW5kfGludDJzaGx8aW50MnNocnxpbnQyc21hbGxlcnxpbnQydW18aW50MnVwfGludDJ2ZWN0b3JlcXwiICsKICAgICAgICAiaW50MnZlY3RvcmlufGludDJ2ZWN0b3JvdXR8aW50MnZlY3RvcnJlY3Z8aW50MnZlY3RvcnNlbmR8aW50MnhvcnxpbnQ0fGludDQyZGl2fGludDQyZXF8IiArCiAgICAgICAgImludDQyZ2V8aW50NDJndHxpbnQ0MmxlfGludDQybHR8aW50NDJtaXxpbnQ0Mm11bHxpbnQ0Mm5lfGludDQycGx8aW50NDhkaXZ8aW50NDhlcXxpbnQ0OGdlfCIgKwogICAgICAgICJpbnQ0OGd0fGludDQ4bGV8aW50NDhsdHxpbnQ0OG1pfGludDQ4bXVsfGludDQ4bmV8aW50NDhwbHxpbnQ0X2FjY3VtfGludDRfYXZnX2FjY3VtfCIgKwogICAgICAgICJpbnQ0X211bF9jYXNofGludDRfc3VtfGludDRhYnN8aW50NGFuZHxpbnQ0ZGl2fGludDRlcXxpbnQ0Z2V8aW50NGd0fGludDRpbnxpbnQ0aW5jfCIgKwogICAgICAgICJpbnQ0bGFyZ2VyfGludDRsZXxpbnQ0bHR8aW50NG1pfGludDRtb2R8aW50NG11bHxpbnQ0bmV8aW50NG5vdHxpbnQ0b3J8aW50NG91dHxpbnQ0cGx8IiArCiAgICAgICAgImludDRyYW5nZXxpbnQ0cmFuZ2VfY2Fub25pY2FsfGludDRyYW5nZV9zdWJkaWZmfGludDRyZWN2fGludDRzZW5kfGludDRzaGx8aW50NHNocnwiICsKICAgICAgICAiaW50NHNtYWxsZXJ8aW50NHVtfGludDR1cHxpbnQ0eG9yfGludDh8aW50ODJkaXZ8aW50ODJlcXxpbnQ4MmdlfGludDgyZ3R8aW50ODJsZXxpbnQ4Mmx0fCIgKwogICAgICAgICJpbnQ4Mm1pfGludDgybXVsfGludDgybmV8aW50ODJwbHxpbnQ4NGRpdnxpbnQ4NGVxfGludDg0Z2V8aW50ODRndHxpbnQ4NGxlfGludDg0bHR8aW50ODRtaXwiICsKICAgICAgICAiaW50ODRtdWx8aW50ODRuZXxpbnQ4NHBsfGludDhfYWNjdW18aW50OF9hdmd8aW50OF9hdmdfYWNjdW18aW50OF9zdW18aW50OGFic3xpbnQ4YW5kfCIgKwogICAgICAgICJpbnQ4ZGl2fGludDhlcXxpbnQ4Z2V8aW50OGd0fGludDhpbnxpbnQ4aW5jfGludDhpbmNfYW55fGludDhpbmNfZmxvYXQ4X2Zsb2F0OHxpbnQ4bGFyZ2VyfCIgKwogICAgICAgICJpbnQ4bGV8aW50OGx0fGludDhtaXxpbnQ4bW9kfGludDhtdWx8aW50OG5lfGludDhub3R8aW50OG9yfGludDhvdXR8aW50OHBsfGludDhwbF9pbmV0fCIgKwogICAgICAgICJpbnQ4cmFuZ2V8aW50OHJhbmdlX2Nhbm9uaWNhbHxpbnQ4cmFuZ2Vfc3ViZGlmZnxpbnQ4cmVjdnxpbnQ4c2VuZHxpbnQ4c2hsfGludDhzaHJ8IiArCiAgICAgICAgImludDhzbWFsbGVyfGludDh1bXxpbnQ4dXB8aW50OHhvcnxpbnRlZ2VyX3BsX2RhdGV8aW50ZXJfbGJ8aW50ZXJfc2J8aW50ZXJfc2x8aW50ZXJuYWxfaW58IiArCiAgICAgICAgImludGVybmFsX291dHxpbnRlcnZhbF9hY2N1bXxpbnRlcnZhbF9hdmd8aW50ZXJ2YWxfY21wfGludGVydmFsX2RpdnxpbnRlcnZhbF9lcXwiICsKICAgICAgICAiaW50ZXJ2YWxfZ2V8aW50ZXJ2YWxfZ3R8aW50ZXJ2YWxfaGFzaHxpbnRlcnZhbF9pbnxpbnRlcnZhbF9sYXJnZXJ8aW50ZXJ2YWxfbGV8IiArCiAgICAgICAgImludGVydmFsX2x0fGludGVydmFsX21pfGludGVydmFsX211bHxpbnRlcnZhbF9uZXxpbnRlcnZhbF9vdXR8aW50ZXJ2YWxfcGx8IiArCiAgICAgICAgImludGVydmFsX3BsX2RhdGV8aW50ZXJ2YWxfcGxfdGltZXxpbnRlcnZhbF9wbF90aW1lc3RhbXB8aW50ZXJ2YWxfcGxfdGltZXN0YW1wdHp8IiArCiAgICAgICAgImludGVydmFsX3BsX3RpbWV0enxpbnRlcnZhbF9yZWN2fGludGVydmFsX3NlbmR8aW50ZXJ2YWxfc21hbGxlcnxpbnRlcnZhbF90cmFuc2Zvcm18IiArCiAgICAgICAgImludGVydmFsX3VtfGludGVydmFsdHlwbW9kaW58aW50ZXJ2YWx0eXBtb2RvdXR8aW50aW50ZXJ2YWx8aXNjbG9zZWR8aXNlbXB0eXxpc2Zpbml0ZXwiICsKICAgICAgICAiaXNob3Jpem9udGFsfGlzbzg4NTlfMV90b191dGY4fGlzbzg4NTlfdG9fdXRmOHxpc29fdG9fa29pOHJ8aXNvX3RvX21pY3xpc29fdG9fd2luMTI1MXwiICsKICAgICAgICAiaXNvX3RvX3dpbjg2Nnxpc29wZW58aXNwYXJhbGxlbHxpc3BlcnB8aXN2ZXJ0aWNhbHxqb2hhYl90b191dGY4fGpzb25fYWdnfCIgKwogICAgICAgICJqc29uX2FnZ19maW5hbGZufGpzb25fYWdnX3RyYW5zZm58anNvbl9hcnJheV9lbGVtZW50fGpzb25fYXJyYXlfZWxlbWVudF90ZXh0fCIgKwogICAgICAgICJqc29uX2FycmF5X2VsZW1lbnRzfGpzb25fYXJyYXlfbGVuZ3RofGpzb25fZWFjaHxqc29uX2VhY2hfdGV4dHxqc29uX2V4dHJhY3RfcGF0aHwiICsKICAgICAgICAianNvbl9leHRyYWN0X3BhdGhfb3B8anNvbl9leHRyYWN0X3BhdGhfdGV4dHxqc29uX2V4dHJhY3RfcGF0aF90ZXh0X29wfGpzb25faW58IiArCiAgICAgICAgImpzb25fb2JqZWN0X2ZpZWxkfGpzb25fb2JqZWN0X2ZpZWxkX3RleHR8anNvbl9vYmplY3Rfa2V5c3xqc29uX291dHwiICsKICAgICAgICAianNvbl9wb3B1bGF0ZV9yZWNvcmR8anNvbl9wb3B1bGF0ZV9yZWNvcmRzZXR8anNvbl9yZWN2fGpzb25fc2VuZHxqdXN0aWZ5X2RheXN8IiArCiAgICAgICAgImp1c3RpZnlfaG91cnN8anVzdGlmeV9pbnRlcnZhbHxrb2k4cl90b19pc298a29pOHJfdG9fbWljfGtvaThyX3RvX3V0Zjh8IiArCiAgICAgICAgImtvaThyX3RvX3dpbjEyNTF8a29pOHJfdG9fd2luODY2fGtvaTh1X3RvX3V0Zjh8bGFnfGxhbmd1YWdlX2hhbmRsZXJfaW58IiArCiAgICAgICAgImxhbmd1YWdlX2hhbmRsZXJfb3V0fGxhc3RfdmFsdWV8bGFzdHZhbHxsYXRpbjFfdG9fbWljfGxhdGluMl90b19taWN8bGF0aW4yX3RvX3dpbjEyNTB8IiArCiAgICAgICAgImxhdGluM190b19taWN8bGF0aW40X3RvX21pY3xsZWFkfGxlZnR8bGVuZ3RofGxpa2V8bGlrZV9lc2NhcGV8bGlrZWpvaW5zZWx8bGlrZXNlbHxsaW5lfCIgKwogICAgICAgICJsaW5lX2Rpc3RhbmNlfGxpbmVfZXF8bGluZV9ob3Jpem9udGFsfGxpbmVfaW58bGluZV9pbnRlcnB0fGxpbmVfaW50ZXJzZWN0fGxpbmVfb3V0fCIgKwogICAgICAgICJsaW5lX3BhcmFsbGVsfGxpbmVfcGVycHxsaW5lX3JlY3Z8bGluZV9zZW5kfGxpbmVfdmVydGljYWx8bG58bG9fY2xvc2V8bG9fY3JlYXR8bG9fY3JlYXRlfCIgKwogICAgICAgICJsb19leHBvcnR8bG9faW1wb3J0fGxvX2xzZWVrfGxvX2xzZWVrNjR8bG9fb3Blbnxsb190ZWxsfGxvX3RlbGw2NHxsb190cnVuY2F0ZXwiICsKICAgICAgICAibG9fdHJ1bmNhdGU2NHxsb191bmxpbmt8bG9nfGxvcmVhZHxsb3dlcnxsb3dlcl9pbmN8bG93ZXJfaW5mfGxvd3JpdGV8bHBhZHxsc2VnfGxzZWdfY2VudGVyfCIgKwogICAgICAgICJsc2VnX2Rpc3RhbmNlfGxzZWdfZXF8bHNlZ19nZXxsc2VnX2d0fGxzZWdfaG9yaXpvbnRhbHxsc2VnX2lufGxzZWdfaW50ZXJwdHwiICsKICAgICAgICAibHNlZ19pbnRlcnNlY3R8bHNlZ19sZXxsc2VnX2xlbmd0aHxsc2VnX2x0fGxzZWdfbmV8bHNlZ19vdXR8bHNlZ19wYXJhbGxlbHxsc2VnX3BlcnB8IiArCiAgICAgICAgImxzZWdfcmVjdnxsc2VnX3NlbmR8bHNlZ192ZXJ0aWNhbHxsdHJpbXxtYWNhZGRyX2FuZHxtYWNhZGRyX2NtcHxtYWNhZGRyX2VxfG1hY2FkZHJfZ2V8IiArCiAgICAgICAgIm1hY2FkZHJfZ3R8bWFjYWRkcl9pbnxtYWNhZGRyX2xlfG1hY2FkZHJfbHR8bWFjYWRkcl9uZXxtYWNhZGRyX25vdHxtYWNhZGRyX29yfCIgKwogICAgICAgICJtYWNhZGRyX291dHxtYWNhZGRyX3JlY3Z8bWFjYWRkcl9zZW5kfG1ha2VhY2xpdGVtfG1hc2tsZW58bWF4fG1kNXxtaWNfdG9fYXNjaWl8IiArCiAgICAgICAgIm1pY190b19iaWc1fG1pY190b19ldWNfY258bWljX3RvX2V1Y19qcHxtaWNfdG9fZXVjX2tyfG1pY190b19ldWNfdHd8bWljX3RvX2lzb3wiICsKICAgICAgICAibWljX3RvX2tvaThyfG1pY190b19sYXRpbjF8bWljX3RvX2xhdGluMnxtaWNfdG9fbGF0aW4zfG1pY190b19sYXRpbjR8bWljX3RvX3NqaXN8IiArCiAgICAgICAgIm1pY190b193aW4xMjUwfG1pY190b193aW4xMjUxfG1pY190b193aW44NjZ8bWlufG1rdGludGVydmFsfG1vZHxtb25leXxtdWxfZF9pbnRlcnZhbHwiICsKICAgICAgICAibmFtZXxuYW1lZXF8bmFtZWdlfG5hbWVndHxuYW1laWNsaWtlfG5hbWVpY25saWtlfG5hbWVpY3JlZ2V4ZXF8bmFtZWljcmVnZXhuZXxuYW1laW58IiArCiAgICAgICAgIm5hbWVsZXxuYW1lbGlrZXxuYW1lbHR8bmFtZW5lfG5hbWVubGlrZXxuYW1lb3V0fG5hbWVyZWN2fG5hbWVyZWdleGVxfG5hbWVyZWdleG5lfG5hbWVzZW5kfCIgKwogICAgICAgICJuZXFqb2luc2VsfG5lcXNlbHxuZXRtYXNrfG5ldHdvcmt8bmV0d29ya19jbXB8bmV0d29ya19lcXxuZXR3b3JrX2dlfG5ldHdvcmtfZ3R8IiArCiAgICAgICAgIm5ldHdvcmtfbGV8bmV0d29ya19sdHxuZXR3b3JrX25lfG5ldHdvcmtfc3VifG5ldHdvcmtfc3ViZXF8bmV0d29ya19zdXB8bmV0d29ya19zdXBlcXwiICsKICAgICAgICAibmV4dHZhbHxubGlrZWpvaW5zZWx8bmxpa2VzZWx8bm90bGlrZXxub3d8bnBvaW50c3xudGhfdmFsdWV8bnRpbGV8bnVtZXJpY19hYnN8IiArCiAgICAgICAgIm51bWVyaWNfYWNjdW18bnVtZXJpY19hZGR8bnVtZXJpY19hdmd8bnVtZXJpY19hdmdfYWNjdW18bnVtZXJpY19jbXB8bnVtZXJpY19kaXZ8IiArCiAgICAgICAgIm51bWVyaWNfZGl2X3RydW5jfG51bWVyaWNfZXF8bnVtZXJpY19leHB8bnVtZXJpY19mYWN8bnVtZXJpY19nZXxudW1lcmljX2d0fG51bWVyaWNfaW58IiArCiAgICAgICAgIm51bWVyaWNfaW5jfG51bWVyaWNfbGFyZ2VyfG51bWVyaWNfbGV8bnVtZXJpY19sbnxudW1lcmljX2xvZ3xudW1lcmljX2x0fG51bWVyaWNfbW9kfCIgKwogICAgICAgICJudW1lcmljX211bHxudW1lcmljX25lfG51bWVyaWNfb3V0fG51bWVyaWNfcG93ZXJ8bnVtZXJpY19yZWN2fG51bWVyaWNfc2VuZHwiICsKICAgICAgICAibnVtZXJpY19zbWFsbGVyfG51bWVyaWNfc3FydHxudW1lcmljX3N0ZGRldl9wb3B8bnVtZXJpY19zdGRkZXZfc2FtcHxudW1lcmljX3N1YnwiICsKICAgICAgICAibnVtZXJpY190cmFuc2Zvcm18bnVtZXJpY191bWludXN8bnVtZXJpY191cGx1c3xudW1lcmljX3Zhcl9wb3B8bnVtZXJpY192YXJfc2FtcHwiICsKICAgICAgICAibnVtZXJpY3R5cG1vZGlufG51bWVyaWN0eXBtb2RvdXR8bnVtbm9kZXxudW1yYW5nZXxudW1yYW5nZV9zdWJkaWZmfG9ial9kZXNjcmlwdGlvbnwiICsKICAgICAgICAib2N0ZXRfbGVuZ3RofG9pZHxvaWRlcXxvaWRnZXxvaWRndHxvaWRpbnxvaWRsYXJnZXJ8b2lkbGV8b2lkbHR8b2lkbmV8b2lkb3V0fG9pZHJlY3Z8b2lkc2VuZHwiICsKICAgICAgICAib2lkc21hbGxlcnxvaWR2ZWN0b3JlcXxvaWR2ZWN0b3JnZXxvaWR2ZWN0b3JndHxvaWR2ZWN0b3JpbnxvaWR2ZWN0b3JsZXxvaWR2ZWN0b3JsdHwiICsKICAgICAgICAib2lkdmVjdG9ybmV8b2lkdmVjdG9yb3V0fG9pZHZlY3RvcnJlY3Z8b2lkdmVjdG9yc2VuZHxvaWR2ZWN0b3J0eXBlc3xvbl9wYnxvbl9wbHwiICsKICAgICAgICAib25fcHBhdGh8b25fcHN8b25fc2J8b25fc2x8b3BhcXVlX2lufG9wYXF1ZV9vdXR8b3ZlcmxhcHN8b3ZlcmxheXxwYXRofHBhdGhfYWRkfHBhdGhfYWRkX3B0fCIgKwogICAgICAgICJwYXRoX2NlbnRlcnxwYXRoX2NvbnRhaW5fcHR8cGF0aF9kaXN0YW5jZXxwYXRoX2Rpdl9wdHxwYXRoX2lufHBhdGhfaW50ZXJ8cGF0aF9sZW5ndGh8IiArCiAgICAgICAgInBhdGhfbXVsX3B0fHBhdGhfbl9lcXxwYXRoX25fZ2V8cGF0aF9uX2d0fHBhdGhfbl9sZXxwYXRoX25fbHR8cGF0aF9ucG9pbnRzfHBhdGhfb3V0fCIgKwogICAgICAgICJwYXRoX3JlY3Z8cGF0aF9zZW5kfHBhdGhfc3ViX3B0fHBjbG9zZXxwZXJjZW50X3Jhbmt8cGdfYWR2aXNvcnlfbG9ja3wiICsKICAgICAgICAicGdfYWR2aXNvcnlfbG9ja19zaGFyZWR8cGdfYWR2aXNvcnlfdW5sb2NrfHBnX2Fkdmlzb3J5X3VubG9ja19hbGx8IiArCiAgICAgICAgInBnX2Fkdmlzb3J5X3VubG9ja19zaGFyZWR8cGdfYWR2aXNvcnlfeGFjdF9sb2NrfHBnX2Fkdmlzb3J5X3hhY3RfbG9ja19zaGFyZWR8IiArCiAgICAgICAgInBnX2F2YWlsYWJsZV9leHRlbnNpb25fdmVyc2lvbnN8cGdfYXZhaWxhYmxlX2V4dGVuc2lvbnN8cGdfYmFja2VuZF9waWR8IiArCiAgICAgICAgInBnX2JhY2t1cF9zdGFydF90aW1lfHBnX2NhbmNlbF9iYWNrZW5kfHBnX2NoYXJfdG9fZW5jb2Rpbmd8cGdfY2xpZW50X2VuY29kaW5nfCIgKwogICAgICAgICJwZ19jb2xsYXRpb25fZm9yfHBnX2NvbGxhdGlvbl9pc192aXNpYmxlfHBnX2NvbHVtbl9pc191cGRhdGFibGV8cGdfY29sdW1uX3NpemV8IiArCiAgICAgICAgInBnX2NvbmZfbG9hZF90aW1lfHBnX2NvbnZlcnNpb25faXNfdmlzaWJsZXxwZ19jcmVhdGVfcmVzdG9yZV9wb2ludHwiICsKICAgICAgICAicGdfY3VycmVudF94bG9nX2luc2VydF9sb2NhdGlvbnxwZ19jdXJyZW50X3hsb2dfbG9jYXRpb258cGdfY3Vyc29yfHBnX2RhdGFiYXNlX3NpemV8IiArCiAgICAgICAgInBnX2Rlc2NyaWJlX29iamVjdHxwZ19lbmNvZGluZ19tYXhfbGVuZ3RofHBnX2VuY29kaW5nX3RvX2NoYXJ8IiArCiAgICAgICAgInBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzfHBnX2V4cG9ydF9zbmFwc2hvdHxwZ19leHRlbnNpb25fY29uZmlnX2R1bXB8IiArCiAgICAgICAgInBnX2V4dGVuc2lvbl91cGRhdGVfcGF0aHN8cGdfZnVuY3Rpb25faXNfdmlzaWJsZXxwZ19nZXRfY29uc3RyYWludGRlZnxwZ19nZXRfZXhwcnwiICsKICAgICAgICAicGdfZ2V0X2Z1bmN0aW9uX2FyZ3VtZW50c3xwZ19nZXRfZnVuY3Rpb25faWRlbnRpdHlfYXJndW1lbnRzfCIgKwogICAgICAgICJwZ19nZXRfZnVuY3Rpb25fcmVzdWx0fHBnX2dldF9mdW5jdGlvbmRlZnxwZ19nZXRfaW5kZXhkZWZ8cGdfZ2V0X2tleXdvcmRzfCIgKwogICAgICAgICJwZ19nZXRfbXVsdGl4YWN0X21lbWJlcnN8cGdfZ2V0X3J1bGVkZWZ8cGdfZ2V0X3NlcmlhbF9zZXF1ZW5jZXxwZ19nZXRfdHJpZ2dlcmRlZnwiICsKICAgICAgICAicGdfZ2V0X3VzZXJieWlkfHBnX2dldF92aWV3ZGVmfHBnX2hhc19yb2xlfHBnX2lkZW50aWZ5X29iamVjdHxwZ19pbmRleGVzX3NpemV8IiArCiAgICAgICAgInBnX2lzX2luX2JhY2t1cHxwZ19pc19pbl9yZWNvdmVyeXxwZ19pc19vdGhlcl90ZW1wX3NjaGVtYXxwZ19pc194bG9nX3JlcGxheV9wYXVzZWR8IiArCiAgICAgICAgInBnX2xhc3RfeGFjdF9yZXBsYXlfdGltZXN0YW1wfHBnX2xhc3RfeGxvZ19yZWNlaXZlX2xvY2F0aW9ufCIgKwogICAgICAgICJwZ19sYXN0X3hsb2dfcmVwbGF5X2xvY2F0aW9ufHBnX2xpc3RlbmluZ19jaGFubmVsc3xwZ19sb2NrX3N0YXR1c3xwZ19sc19kaXJ8IiArCiAgICAgICAgInBnX215X3RlbXBfc2NoZW1hfHBnX25vZGVfdHJlZV9pbnxwZ19ub2RlX3RyZWVfb3V0fHBnX25vZGVfdHJlZV9yZWN2fCIgKwogICAgICAgICJwZ19ub2RlX3RyZWVfc2VuZHxwZ19ub3RpZnl8cGdfb3BjbGFzc19pc192aXNpYmxlfHBnX29wZXJhdG9yX2lzX3Zpc2libGV8IiArCiAgICAgICAgInBnX29wZmFtaWx5X2lzX3Zpc2libGV8cGdfb3B0aW9uc190b190YWJsZXxwZ19wb3N0bWFzdGVyX3N0YXJ0X3RpbWV8IiArCiAgICAgICAgInBnX3ByZXBhcmVkX3N0YXRlbWVudHxwZ19wcmVwYXJlZF94YWN0fHBnX3JlYWRfYmluYXJ5X2ZpbGV8cGdfcmVhZF9maWxlfCIgKwogICAgICAgICJwZ19yZWxhdGlvbl9maWxlbm9kZXxwZ19yZWxhdGlvbl9maWxlcGF0aHxwZ19yZWxhdGlvbl9pc191cGRhdGFibGV8cGdfcmVsYXRpb25fc2l6ZXwiICsKICAgICAgICAicGdfcmVsb2FkX2NvbmZ8cGdfcm90YXRlX2xvZ2ZpbGV8cGdfc2VxdWVuY2VfcGFyYW1ldGVyc3xwZ19zaG93X2FsbF9zZXR0aW5nc3wiICsKICAgICAgICAicGdfc2l6ZV9wcmV0dHl8cGdfc2xlZXB8cGdfc3RhcnRfYmFja3VwfHBnX3N0YXRfY2xlYXJfc25hcHNob3R8cGdfc3RhdF9maWxlfCIgKwogICAgICAgICJwZ19zdGF0X2dldF9hY3Rpdml0eXxwZ19zdGF0X2dldF9hbmFseXplX2NvdW50fHBnX3N0YXRfZ2V0X2F1dG9hbmFseXplX2NvdW50fCIgKwogICAgICAgICJwZ19zdGF0X2dldF9hdXRvdmFjdXVtX2NvdW50fHBnX3N0YXRfZ2V0X2JhY2tlbmRfYWN0aXZpdHl8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2JhY2tlbmRfYWN0aXZpdHlfc3RhcnR8cGdfc3RhdF9nZXRfYmFja2VuZF9jbGllbnRfYWRkcnwiICsKICAgICAgICAicGdfc3RhdF9nZXRfYmFja2VuZF9jbGllbnRfcG9ydHxwZ19zdGF0X2dldF9iYWNrZW5kX2RiaWR8cGdfc3RhdF9nZXRfYmFja2VuZF9pZHNldHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfYmFja2VuZF9waWR8cGdfc3RhdF9nZXRfYmFja2VuZF9zdGFydHxwZ19zdGF0X2dldF9iYWNrZW5kX3VzZXJpZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfYmFja2VuZF93YWl0aW5nfHBnX3N0YXRfZ2V0X2JhY2tlbmRfeGFjdF9zdGFydHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfYmd3cml0ZXJfYnVmX3dyaXR0ZW5fY2hlY2twb2ludHN8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2Jnd3JpdGVyX2J1Zl93cml0dGVuX2NsZWFufHBnX3N0YXRfZ2V0X2Jnd3JpdGVyX21heHdyaXR0ZW5fY2xlYW58IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2Jnd3JpdGVyX3JlcXVlc3RlZF9jaGVja3BvaW50c3xwZ19zdGF0X2dldF9iZ3dyaXRlcl9zdGF0X3Jlc2V0X3RpbWV8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2Jnd3JpdGVyX3RpbWVkX2NoZWNrcG9pbnRzfHBnX3N0YXRfZ2V0X2Jsb2Nrc19mZXRjaGVkfCIgKwogICAgICAgICJwZ19zdGF0X2dldF9ibG9ja3NfaGl0fHBnX3N0YXRfZ2V0X2J1Zl9hbGxvY3xwZ19zdGF0X2dldF9idWZfZnN5bmNfYmFja2VuZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfYnVmX3dyaXR0ZW5fYmFja2VuZHxwZ19zdGF0X2dldF9jaGVja3BvaW50X3N5bmNfdGltZXwiICsKICAgICAgICAicGdfc3RhdF9nZXRfY2hlY2twb2ludF93cml0ZV90aW1lfHBnX3N0YXRfZ2V0X2RiX2Jsa19yZWFkX3RpbWV8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2RiX2Jsa193cml0ZV90aW1lfHBnX3N0YXRfZ2V0X2RiX2Jsb2Nrc19mZXRjaGVkfCIgKwogICAgICAgICJwZ19zdGF0X2dldF9kYl9ibG9ja3NfaGl0fHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X2FsbHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfZGJfY29uZmxpY3RfYnVmZmVycGlufHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X2xvY2t8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X3NuYXBzaG90fHBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X3N0YXJ0dXBfZGVhZGxvY2t8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2RiX2NvbmZsaWN0X3RhYmxlc3BhY2V8cGdfc3RhdF9nZXRfZGJfZGVhZGxvY2tzfCIgKwogICAgICAgICJwZ19zdGF0X2dldF9kYl9udW1iYWNrZW5kc3xwZ19zdGF0X2dldF9kYl9zdGF0X3Jlc2V0X3RpbWV8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2RiX3RlbXBfYnl0ZXN8cGdfc3RhdF9nZXRfZGJfdGVtcF9maWxlc3xwZ19zdGF0X2dldF9kYl90dXBsZXNfZGVsZXRlZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfZGJfdHVwbGVzX2ZldGNoZWR8cGdfc3RhdF9nZXRfZGJfdHVwbGVzX2luc2VydGVkfCIgKwogICAgICAgICJwZ19zdGF0X2dldF9kYl90dXBsZXNfcmV0dXJuZWR8cGdfc3RhdF9nZXRfZGJfdHVwbGVzX3VwZGF0ZWR8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2RiX3hhY3RfY29tbWl0fHBnX3N0YXRfZ2V0X2RiX3hhY3Rfcm9sbGJhY2t8cGdfc3RhdF9nZXRfZGVhZF90dXBsZXN8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X2Z1bmN0aW9uX2NhbGxzfHBnX3N0YXRfZ2V0X2Z1bmN0aW9uX3NlbGZfdGltZXwiICsKICAgICAgICAicGdfc3RhdF9nZXRfZnVuY3Rpb25fdG90YWxfdGltZXxwZ19zdGF0X2dldF9sYXN0X2FuYWx5emVfdGltZXwiICsKICAgICAgICAicGdfc3RhdF9nZXRfbGFzdF9hdXRvYW5hbHl6ZV90aW1lfHBnX3N0YXRfZ2V0X2xhc3RfYXV0b3ZhY3V1bV90aW1lfCIgKwogICAgICAgICJwZ19zdGF0X2dldF9sYXN0X3ZhY3V1bV90aW1lfHBnX3N0YXRfZ2V0X2xpdmVfdHVwbGVzfHBnX3N0YXRfZ2V0X251bXNjYW5zfCIgKwogICAgICAgICJwZ19zdGF0X2dldF90dXBsZXNfZGVsZXRlZHxwZ19zdGF0X2dldF90dXBsZXNfZmV0Y2hlZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfdHVwbGVzX2hvdF91cGRhdGVkfHBnX3N0YXRfZ2V0X3R1cGxlc19pbnNlcnRlZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfdHVwbGVzX3JldHVybmVkfHBnX3N0YXRfZ2V0X3R1cGxlc191cGRhdGVkfHBnX3N0YXRfZ2V0X3ZhY3V1bV9jb3VudHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfd2FsX3NlbmRlcnN8cGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfZmV0Y2hlZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfeGFjdF9ibG9ja3NfaGl0fHBnX3N0YXRfZ2V0X3hhY3RfZnVuY3Rpb25fY2FsbHN8IiArCiAgICAgICAgInBnX3N0YXRfZ2V0X3hhY3RfZnVuY3Rpb25fc2VsZl90aW1lfHBnX3N0YXRfZ2V0X3hhY3RfZnVuY3Rpb25fdG90YWxfdGltZXwiICsKICAgICAgICAicGdfc3RhdF9nZXRfeGFjdF9udW1zY2Fuc3xwZ19zdGF0X2dldF94YWN0X3R1cGxlc19kZWxldGVkfCIgKwogICAgICAgICJwZ19zdGF0X2dldF94YWN0X3R1cGxlc19mZXRjaGVkfHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkfCIgKwogICAgICAgICJwZ19zdGF0X2dldF94YWN0X3R1cGxlc19pbnNlcnRlZHxwZ19zdGF0X2dldF94YWN0X3R1cGxlc19yZXR1cm5lZHwiICsKICAgICAgICAicGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfdXBkYXRlZHxwZ19zdGF0X3Jlc2V0fHBnX3N0YXRfcmVzZXRfc2hhcmVkfCIgKwogICAgICAgICJwZ19zdGF0X3Jlc2V0X3NpbmdsZV9mdW5jdGlvbl9jb3VudGVyc3xwZ19zdGF0X3Jlc2V0X3NpbmdsZV90YWJsZV9jb3VudGVyc3wiICsKICAgICAgICAicGdfc3RvcF9iYWNrdXB8cGdfc3dpdGNoX3hsb2d8cGdfdGFibGVfaXNfdmlzaWJsZXxwZ190YWJsZV9zaXplfCIgKwogICAgICAgICJwZ190YWJsZXNwYWNlX2RhdGFiYXNlc3xwZ190YWJsZXNwYWNlX2xvY2F0aW9ufHBnX3RhYmxlc3BhY2Vfc2l6ZXwiICsKICAgICAgICAicGdfdGVybWluYXRlX2JhY2tlbmR8cGdfdGltZXpvbmVfYWJicmV2c3xwZ190aW1lem9uZV9uYW1lc3xwZ190b3RhbF9yZWxhdGlvbl9zaXplfCIgKwogICAgICAgICJwZ190cmlnZ2VyX2RlcHRofHBnX3RyeV9hZHZpc29yeV9sb2NrfHBnX3RyeV9hZHZpc29yeV9sb2NrX3NoYXJlZHwiICsKICAgICAgICAicGdfdHJ5X2Fkdmlzb3J5X3hhY3RfbG9ja3xwZ190cnlfYWR2aXNvcnlfeGFjdF9sb2NrX3NoYXJlZHxwZ190c19jb25maWdfaXNfdmlzaWJsZXwiICsKICAgICAgICAicGdfdHNfZGljdF9pc192aXNpYmxlfHBnX3RzX3BhcnNlcl9pc192aXNpYmxlfHBnX3RzX3RlbXBsYXRlX2lzX3Zpc2libGV8IiArCiAgICAgICAgInBnX3R5cGVfaXNfdmlzaWJsZXxwZ190eXBlb2Z8cGdfeGxvZ19sb2NhdGlvbl9kaWZmfHBnX3hsb2dfcmVwbGF5X3BhdXNlfCIgKwogICAgICAgICJwZ194bG9nX3JlcGxheV9yZXN1bWV8cGdfeGxvZ2ZpbGVfbmFtZXxwZ194bG9nZmlsZV9uYW1lX29mZnNldHxwaXxwbGFpbnRvX3RzcXVlcnl8IiArCiAgICAgICAgInBscGdzcWxfY2FsbF9oYW5kbGVyfHBscGdzcWxfaW5saW5lX2hhbmRsZXJ8cGxwZ3NxbF92YWxpZGF0b3J8cG9pbnR8cG9pbnRfYWJvdmV8IiArCiAgICAgICAgInBvaW50X2FkZHxwb2ludF9iZWxvd3xwb2ludF9kaXN0YW5jZXxwb2ludF9kaXZ8cG9pbnRfZXF8cG9pbnRfaG9yaXp8cG9pbnRfaW58cG9pbnRfbGVmdHwiICsKICAgICAgICAicG9pbnRfbXVsfHBvaW50X25lfHBvaW50X291dHxwb2ludF9yZWN2fHBvaW50X3JpZ2h0fHBvaW50X3NlbmR8cG9pbnRfc3VifHBvaW50X3ZlcnR8IiArCiAgICAgICAgInBvbHlfYWJvdmV8cG9seV9iZWxvd3xwb2x5X2NlbnRlcnxwb2x5X2NvbnRhaW58cG9seV9jb250YWluX3B0fHBvbHlfY29udGFpbmVkfCIgKwogICAgICAgICJwb2x5X2Rpc3RhbmNlfHBvbHlfaW58cG9seV9sZWZ0fHBvbHlfbnBvaW50c3xwb2x5X291dHxwb2x5X292ZXJhYm92ZXxwb2x5X292ZXJiZWxvd3wiICsKICAgICAgICAicG9seV9vdmVybGFwfHBvbHlfb3ZlcmxlZnR8cG9seV9vdmVycmlnaHR8cG9seV9yZWN2fHBvbHlfcmlnaHR8cG9seV9zYW1lfHBvbHlfc2VuZHwiICsKICAgICAgICAicG9seWdvbnxwb3Blbnxwb3NpdGlvbnxwb3NpdGlvbmpvaW5zZWx8cG9zaXRpb25zZWx8cG9zdGdyZXNxbF9mZHdfdmFsaWRhdG9yfHBvd3xwb3dlcnwiICsKICAgICAgICAicHJzZF9lbmR8cHJzZF9oZWFkbGluZXxwcnNkX2xleHR5cGV8cHJzZF9uZXh0dG9rZW58cHJzZF9zdGFydHxwdF9jb250YWluZWRfY2lyY2xlfCIgKwogICAgICAgICJwdF9jb250YWluZWRfcG9seXxxdWVyeV90b194bWx8cXVlcnlfdG9feG1sX2FuZF94bWxzY2hlbWF8cXVlcnlfdG9feG1sc2NoZW1hfCIgKwogICAgICAgICJxdWVyeXRyZWV8cXVvdGVfaWRlbnR8cXVvdGVfbGl0ZXJhbHxxdW90ZV9udWxsYWJsZXxyYWRpYW5zfHJhZGl1c3xyYW5kb218cmFuZ2VfYWRqYWNlbnR8IiArCiAgICAgICAgInJhbmdlX2FmdGVyfHJhbmdlX2JlZm9yZXxyYW5nZV9jbXB8cmFuZ2VfY29udGFpbmVkX2J5fHJhbmdlX2NvbnRhaW5zfCIgKwogICAgICAgICJyYW5nZV9jb250YWluc19lbGVtfHJhbmdlX2VxfHJhbmdlX2dlfHJhbmdlX2dpc3RfY29tcHJlc3N8cmFuZ2VfZ2lzdF9jb25zaXN0ZW50fCIgKwogICAgICAgICJyYW5nZV9naXN0X2RlY29tcHJlc3N8cmFuZ2VfZ2lzdF9wZW5hbHR5fHJhbmdlX2dpc3RfcGlja3NwbGl0fHJhbmdlX2dpc3Rfc2FtZXwiICsKICAgICAgICAicmFuZ2VfZ2lzdF91bmlvbnxyYW5nZV9ndHxyYW5nZV9pbnxyYW5nZV9pbnRlcnNlY3R8cmFuZ2VfbGV8cmFuZ2VfbHR8cmFuZ2VfbWludXN8IiArCiAgICAgICAgInJhbmdlX25lfHJhbmdlX291dHxyYW5nZV9vdmVybGFwc3xyYW5nZV9vdmVybGVmdHxyYW5nZV9vdmVycmlnaHR8cmFuZ2VfcmVjdnxyYW5nZV9zZW5kfCIgKwogICAgICAgICJyYW5nZV90eXBhbmFseXplfHJhbmdlX3VuaW9ufHJhbmdlc2VsfHJhbmt8cmVjb3JkX2VxfHJlY29yZF9nZXxyZWNvcmRfZ3R8cmVjb3JkX2lufCIgKwogICAgICAgICJyZWNvcmRfbGV8cmVjb3JkX2x0fHJlY29yZF9uZXxyZWNvcmRfb3V0fHJlY29yZF9yZWN2fHJlY29yZF9zZW5kfHJlZ2NsYXNzfHJlZ2NsYXNzaW58IiArCiAgICAgICAgInJlZ2NsYXNzb3V0fHJlZ2NsYXNzcmVjdnxyZWdjbGFzc3NlbmR8cmVnY29uZmlnaW58cmVnY29uZmlnb3V0fHJlZ2NvbmZpZ3JlY3Z8IiArCiAgICAgICAgInJlZ2NvbmZpZ3NlbmR8cmVnZGljdGlvbmFyeWlufHJlZ2RpY3Rpb25hcnlvdXR8cmVnZGljdGlvbmFyeXJlY3Z8cmVnZGljdGlvbmFyeXNlbmR8IiArCiAgICAgICAgInJlZ2V4ZXFqb2luc2VsfHJlZ2V4ZXFzZWx8cmVnZXhuZWpvaW5zZWx8cmVnZXhuZXNlbHxyZWdleHBfbWF0Y2hlc3xyZWdleHBfcmVwbGFjZXwiICsKICAgICAgICAicmVnZXhwX3NwbGl0X3RvX2FycmF5fHJlZ2V4cF9zcGxpdF90b190YWJsZXxyZWdvcGVyYXRvcmlufHJlZ29wZXJhdG9yb3V0fCIgKwogICAgICAgICJyZWdvcGVyYXRvcnJlY3Z8cmVnb3BlcmF0b3JzZW5kfHJlZ29wZXJpbnxyZWdvcGVyb3V0fHJlZ29wZXJyZWN2fHJlZ29wZXJzZW5kfCIgKwogICAgICAgICJyZWdwcm9jZWR1cmVpbnxyZWdwcm9jZWR1cmVvdXR8cmVncHJvY2VkdXJlcmVjdnxyZWdwcm9jZWR1cmVzZW5kfHJlZ3Byb2NpbnxyZWdwcm9jb3V0fCIgKwogICAgICAgICJyZWdwcm9jcmVjdnxyZWdwcm9jc2VuZHxyZWdyX2F2Z3h8cmVncl9hdmd5fHJlZ3JfY291bnR8cmVncl9pbnRlcmNlcHR8cmVncl9yMnwiICsKICAgICAgICAicmVncl9zbG9wZXxyZWdyX3N4eHxyZWdyX3N4eXxyZWdyX3N5eXxyZWd0eXBlaW58cmVndHlwZW91dHxyZWd0eXBlcmVjdnxyZWd0eXBlc2VuZHwiICsKICAgICAgICAicmVsdGltZXxyZWx0aW1lZXF8cmVsdGltZWdlfHJlbHRpbWVndHxyZWx0aW1laW58cmVsdGltZWxlfHJlbHRpbWVsdHxyZWx0aW1lbmV8cmVsdGltZW91dHwiICsKICAgICAgICAicmVsdGltZXJlY3Z8cmVsdGltZXNlbmR8cmVwZWF0fHJlcGxhY2V8cmV2ZXJzZXxyaWdodHxyb3VuZHxyb3dfbnVtYmVyfHJvd190b19qc29ufHJwYWR8IiArCiAgICAgICAgInJ0cmltfHNjYWxhcmd0am9pbnNlbHxzY2FsYXJndHNlbHxzY2FsYXJsdGpvaW5zZWx8c2NhbGFybHRzZWx8c2NoZW1hX3RvX3htbHwiICsKICAgICAgICAic2NoZW1hX3RvX3htbF9hbmRfeG1sc2NoZW1hfHNjaGVtYV90b194bWxzY2hlbWF8c2Vzc2lvbl91c2VyfHNldF9iaXR8c2V0X2J5dGV8IiArCiAgICAgICAgInNldF9jb25maWd8c2V0X21hc2tsZW58c2V0c2VlZHxzZXR2YWx8c2V0d2VpZ2h0fHNoZWxsX2lufHNoZWxsX291dHwiICsKICAgICAgICAic2hpZnRfamlzXzIwMDRfdG9fZXVjX2ppc18yMDA0fHNoaWZ0X2ppc18yMDA0X3RvX3V0Zjh8c2hvYmpfZGVzY3JpcHRpb258c2lnbnwiICsKICAgICAgICAic2ltaWxhcl9lc2NhcGV8c2lufHNqaXNfdG9fZXVjX2pwfHNqaXNfdG9fbWljfHNqaXNfdG9fdXRmOHxzbG9wZXxzbWdyZXF8c21ncmlufHNtZ3JuZXwiICsKICAgICAgICAic21ncm91dHxzcGdfa2RfY2hvb3NlfHNwZ19rZF9jb25maWd8c3BnX2tkX2lubmVyX2NvbnNpc3RlbnR8c3BnX2tkX3BpY2tzcGxpdHwiICsKICAgICAgICAic3BnX3F1YWRfY2hvb3NlfHNwZ19xdWFkX2NvbmZpZ3xzcGdfcXVhZF9pbm5lcl9jb25zaXN0ZW50fHNwZ19xdWFkX2xlYWZfY29uc2lzdGVudHwiICsKICAgICAgICAic3BnX3F1YWRfcGlja3NwbGl0fHNwZ19yYW5nZV9xdWFkX2Nob29zZXxzcGdfcmFuZ2VfcXVhZF9jb25maWd8IiArCiAgICAgICAgInNwZ19yYW5nZV9xdWFkX2lubmVyX2NvbnNpc3RlbnR8c3BnX3JhbmdlX3F1YWRfbGVhZl9jb25zaXN0ZW50fCIgKwogICAgICAgICJzcGdfcmFuZ2VfcXVhZF9waWNrc3BsaXR8c3BnX3RleHRfY2hvb3NlfHNwZ190ZXh0X2NvbmZpZ3xzcGdfdGV4dF9pbm5lcl9jb25zaXN0ZW50fCIgKwogICAgICAgICJzcGdfdGV4dF9sZWFmX2NvbnNpc3RlbnR8c3BnX3RleHRfcGlja3NwbGl0fHNwZ2JlZ2luc2NhbnxzcGdidWlsZHxzcGdidWlsZGVtcHR5fCIgKwogICAgICAgICJzcGdidWxrZGVsZXRlfHNwZ2NhbnJldHVybnxzcGdjb3N0ZXN0aW1hdGV8c3BnZW5kc2NhbnxzcGdnZXRiaXRtYXB8c3BnZ2V0dHVwbGV8IiArCiAgICAgICAgInNwZ2luc2VydHxzcGdtYXJrcG9zfHNwZ29wdGlvbnN8c3BncmVzY2FufHNwZ3Jlc3RycG9zfHNwZ3ZhY3V1bWNsZWFudXB8c3BsaXRfcGFydHxzcXJ0fCIgKwogICAgICAgICJzdGF0ZW1lbnRfdGltZXN0YW1wfHN0ZGRldnxzdGRkZXZfcG9wfHN0ZGRldl9zYW1wfHN0cmluZ19hZ2d8c3RyaW5nX2FnZ19maW5hbGZufCIgKwogICAgICAgICJzdHJpbmdfYWdnX3RyYW5zZm58c3RyaW5nX3RvX2FycmF5fHN0cmlwfHN0cnBvc3xzdWJzdHJ8c3Vic3RyaW5nfHN1bXwiICsKICAgICAgICAic3VwcHJlc3NfcmVkdW5kYW50X3VwZGF0ZXNfdHJpZ2dlcnx0YWJsZV90b194bWx8dGFibGVfdG9feG1sX2FuZF94bWxzY2hlbWF8IiArCiAgICAgICAgInRhYmxlX3RvX3htbHNjaGVtYXx0YW58dGV4dHx0ZXh0X2dlfHRleHRfZ3R8dGV4dF9sYXJnZXJ8dGV4dF9sZXx0ZXh0X2x0fHRleHRfcGF0dGVybl9nZXwiICsKICAgICAgICAidGV4dF9wYXR0ZXJuX2d0fHRleHRfcGF0dGVybl9sZXx0ZXh0X3BhdHRlcm5fbHR8dGV4dF9zbWFsbGVyfHRleHRhbnljYXR8dGV4dGNhdHx0ZXh0ZXF8IiArCiAgICAgICAgInRleHRpY2xpa2V8dGV4dGljbmxpa2V8dGV4dGljcmVnZXhlcXx0ZXh0aWNyZWdleG5lfHRleHRpbnx0ZXh0bGVufHRleHRsaWtlfHRleHRuZXwiICsKICAgICAgICAidGV4dG5saWtlfHRleHRvdXR8dGV4dHJlY3Z8dGV4dHJlZ2V4ZXF8dGV4dHJlZ2V4bmV8dGV4dHNlbmR8dGhlc2F1cnVzX2luaXR8IiArCiAgICAgICAgInRoZXNhdXJ1c19sZXhpemV8dGlkZXF8dGlkZ2V8dGlkZ3R8dGlkaW58dGlkbGFyZ2VyfHRpZGxlfHRpZGx0fHRpZG5lfHRpZG91dHx0aWRyZWN2fHRpZHNlbmR8IiArCiAgICAgICAgInRpZHNtYWxsZXJ8dGltZV9jbXB8dGltZV9lcXx0aW1lX2dlfHRpbWVfZ3R8dGltZV9oYXNofHRpbWVfaW58dGltZV9sYXJnZXJ8dGltZV9sZXx0aW1lX2x0fCIgKwogICAgICAgICJ0aW1lX21pX2ludGVydmFsfHRpbWVfbWlfdGltZXx0aW1lX25lfHRpbWVfb3V0fHRpbWVfcGxfaW50ZXJ2YWx8dGltZV9yZWN2fHRpbWVfc2VuZHwiICsKICAgICAgICAidGltZV9zbWFsbGVyfHRpbWVfdHJhbnNmb3JtfHRpbWVkYXRlX3BsfHRpbWVtaXx0aW1lbm93fHRpbWVvZmRheXx0aW1lcGx8dGltZXN0YW1wX2NtcHwiICsKICAgICAgICAidGltZXN0YW1wX2NtcF9kYXRlfHRpbWVzdGFtcF9jbXBfdGltZXN0YW1wdHp8dGltZXN0YW1wX2VxfHRpbWVzdGFtcF9lcV9kYXRlfCIgKwogICAgICAgICJ0aW1lc3RhbXBfZXFfdGltZXN0YW1wdHp8dGltZXN0YW1wX2dlfHRpbWVzdGFtcF9nZV9kYXRlfHRpbWVzdGFtcF9nZV90aW1lc3RhbXB0enwiICsKICAgICAgICAidGltZXN0YW1wX2d0fHRpbWVzdGFtcF9ndF9kYXRlfHRpbWVzdGFtcF9ndF90aW1lc3RhbXB0enx0aW1lc3RhbXBfaGFzaHx0aW1lc3RhbXBfaW58IiArCiAgICAgICAgInRpbWVzdGFtcF9sYXJnZXJ8dGltZXN0YW1wX2xlfHRpbWVzdGFtcF9sZV9kYXRlfHRpbWVzdGFtcF9sZV90aW1lc3RhbXB0enwiICsKICAgICAgICAidGltZXN0YW1wX2x0fHRpbWVzdGFtcF9sdF9kYXRlfHRpbWVzdGFtcF9sdF90aW1lc3RhbXB0enx0aW1lc3RhbXBfbWl8IiArCiAgICAgICAgInRpbWVzdGFtcF9taV9pbnRlcnZhbHx0aW1lc3RhbXBfbmV8dGltZXN0YW1wX25lX2RhdGV8dGltZXN0YW1wX25lX3RpbWVzdGFtcHR6fCIgKwogICAgICAgICJ0aW1lc3RhbXBfb3V0fHRpbWVzdGFtcF9wbF9pbnRlcnZhbHx0aW1lc3RhbXBfcmVjdnx0aW1lc3RhbXBfc2VuZHx0aW1lc3RhbXBfc21hbGxlcnwiICsKICAgICAgICAidGltZXN0YW1wX3NvcnRzdXBwb3J0fHRpbWVzdGFtcF90cmFuc2Zvcm18dGltZXN0YW1wdHlwbW9kaW58dGltZXN0YW1wdHlwbW9kb3V0fCIgKwogICAgICAgICJ0aW1lc3RhbXB0el9jbXB8dGltZXN0YW1wdHpfY21wX2RhdGV8dGltZXN0YW1wdHpfY21wX3RpbWVzdGFtcHx0aW1lc3RhbXB0el9lcXwiICsKICAgICAgICAidGltZXN0YW1wdHpfZXFfZGF0ZXx0aW1lc3RhbXB0el9lcV90aW1lc3RhbXB8dGltZXN0YW1wdHpfZ2V8dGltZXN0YW1wdHpfZ2VfZGF0ZXwiICsKICAgICAgICAidGltZXN0YW1wdHpfZ2VfdGltZXN0YW1wfHRpbWVzdGFtcHR6X2d0fHRpbWVzdGFtcHR6X2d0X2RhdGV8IiArCiAgICAgICAgInRpbWVzdGFtcHR6X2d0X3RpbWVzdGFtcHx0aW1lc3RhbXB0el9pbnx0aW1lc3RhbXB0el9sYXJnZXJ8dGltZXN0YW1wdHpfbGV8IiArCiAgICAgICAgInRpbWVzdGFtcHR6X2xlX2RhdGV8dGltZXN0YW1wdHpfbGVfdGltZXN0YW1wfHRpbWVzdGFtcHR6X2x0fHRpbWVzdGFtcHR6X2x0X2RhdGV8IiArCiAgICAgICAgInRpbWVzdGFtcHR6X2x0X3RpbWVzdGFtcHx0aW1lc3RhbXB0el9taXx0aW1lc3RhbXB0el9taV9pbnRlcnZhbHx0aW1lc3RhbXB0el9uZXwiICsKICAgICAgICAidGltZXN0YW1wdHpfbmVfZGF0ZXx0aW1lc3RhbXB0el9uZV90aW1lc3RhbXB8dGltZXN0YW1wdHpfb3V0fCIgKwogICAgICAgICJ0aW1lc3RhbXB0el9wbF9pbnRlcnZhbHx0aW1lc3RhbXB0el9yZWN2fHRpbWVzdGFtcHR6X3NlbmR8dGltZXN0YW1wdHpfc21hbGxlcnwiICsKICAgICAgICAidGltZXN0YW1wdHp0eXBtb2Rpbnx0aW1lc3RhbXB0enR5cG1vZG91dHx0aW1ldHlwbW9kaW58dGltZXR5cG1vZG91dHx0aW1ldHpfY21wfCIgKwogICAgICAgICJ0aW1ldHpfZXF8dGltZXR6X2dlfHRpbWV0el9ndHx0aW1ldHpfaGFzaHx0aW1ldHpfaW58dGltZXR6X2xhcmdlcnx0aW1ldHpfbGV8dGltZXR6X2x0fCIgKwogICAgICAgICJ0aW1ldHpfbWlfaW50ZXJ2YWx8dGltZXR6X25lfHRpbWV0el9vdXR8dGltZXR6X3BsX2ludGVydmFsfHRpbWV0el9yZWN2fHRpbWV0el9zZW5kfCIgKwogICAgICAgICJ0aW1ldHpfc21hbGxlcnx0aW1ldHpkYXRlX3BsfHRpbWV0enR5cG1vZGlufHRpbWV0enR5cG1vZG91dHx0aW1lem9uZXx0aW50ZXJ2YWx8IiArCiAgICAgICAgInRpbnRlcnZhbGN0fHRpbnRlcnZhbGVuZHx0aW50ZXJ2YWxlcXx0aW50ZXJ2YWxnZXx0aW50ZXJ2YWxndHx0aW50ZXJ2YWxpbnx0aW50ZXJ2YWxsZXwiICsKICAgICAgICAidGludGVydmFsbGVuZXF8dGludGVydmFsbGVuZ2V8dGludGVydmFsbGVuZ3R8dGludGVydmFsbGVubGV8dGludGVydmFsbGVubHR8IiArCiAgICAgICAgInRpbnRlcnZhbGxlbm5lfHRpbnRlcnZhbGx0fHRpbnRlcnZhbG5lfHRpbnRlcnZhbG91dHx0aW50ZXJ2YWxvdnx0aW50ZXJ2YWxyZWN2fCIgKwogICAgICAgICJ0aW50ZXJ2YWxyZWx8dGludGVydmFsc2FtZXx0aW50ZXJ2YWxzZW5kfHRpbnRlcnZhbHN0YXJ0fHRvX2FzY2lpfHRvX2NoYXJ8dG9fZGF0ZXx0b19oZXh8IiArCiAgICAgICAgInRvX2pzb258dG9fbnVtYmVyfHRvX3RpbWVzdGFtcHx0b190c3F1ZXJ5fHRvX3RzdmVjdG9yfHRyYW5zYWN0aW9uX3RpbWVzdGFtcHx0cmFuc2xhdGV8IiArCiAgICAgICAgInRyaWdnZXJfaW58dHJpZ2dlcl9vdXR8dHJ1bmN8dHNfZGVidWd8dHNfaGVhZGxpbmV8dHNfbGV4aXplfHRzX21hdGNoX3F2fHRzX21hdGNoX3RxfCIgKwogICAgICAgICJ0c19tYXRjaF90dHx0c19tYXRjaF92cXx0c19wYXJzZXx0c19yYW5rfHRzX3JhbmtfY2R8dHNfcmV3cml0ZXx0c19zdGF0fHRzX3Rva2VuX3R5cGV8IiArCiAgICAgICAgInRzX3R5cGFuYWx5emV8dHNtYXRjaGpvaW5zZWx8dHNtYXRjaHNlbHx0c3FfbWNvbnRhaW5lZHx0c3FfbWNvbnRhaW5zfHRzcXVlcnlfYW5kfCIgKwogICAgICAgICJ0c3F1ZXJ5X2NtcHx0c3F1ZXJ5X2VxfHRzcXVlcnlfZ2V8dHNxdWVyeV9ndHx0c3F1ZXJ5X2xlfHRzcXVlcnlfbHR8dHNxdWVyeV9uZXwiICsKICAgICAgICAidHNxdWVyeV9ub3R8dHNxdWVyeV9vcnx0c3F1ZXJ5aW58dHNxdWVyeW91dHx0c3F1ZXJ5cmVjdnx0c3F1ZXJ5c2VuZHx0c3JhbmdlfCIgKwogICAgICAgICJ0c3JhbmdlX3N1YmRpZmZ8dHN0enJhbmdlfHRzdHpyYW5nZV9zdWJkaWZmfHRzdmVjdG9yX2NtcHx0c3ZlY3Rvcl9jb25jYXR8dHN2ZWN0b3JfZXF8IiArCiAgICAgICAgInRzdmVjdG9yX2dlfHRzdmVjdG9yX2d0fHRzdmVjdG9yX2xlfHRzdmVjdG9yX2x0fHRzdmVjdG9yX25lfHRzdmVjdG9yX3VwZGF0ZV90cmlnZ2VyfCIgKwogICAgICAgICJ0c3ZlY3Rvcl91cGRhdGVfdHJpZ2dlcl9jb2x1bW58dHN2ZWN0b3Jpbnx0c3ZlY3Rvcm91dHx0c3ZlY3RvcnJlY3Z8dHN2ZWN0b3JzZW5kfCIgKwogICAgICAgICJ0eGlkX2N1cnJlbnR8dHhpZF9jdXJyZW50X3NuYXBzaG90fHR4aWRfc25hcHNob3RfaW58dHhpZF9zbmFwc2hvdF9vdXR8IiArCiAgICAgICAgInR4aWRfc25hcHNob3RfcmVjdnx0eGlkX3NuYXBzaG90X3NlbmR8dHhpZF9zbmFwc2hvdF94aXB8dHhpZF9zbmFwc2hvdF94bWF4fCIgKwogICAgICAgICJ0eGlkX3NuYXBzaG90X3htaW58dHhpZF92aXNpYmxlX2luX3NuYXBzaG90fHVoY190b191dGY4fHVuaXF1ZV9rZXlfcmVjaGVja3x1bmtub3duaW58IiArCiAgICAgICAgInVua25vd25vdXR8dW5rbm93bnJlY3Z8dW5rbm93bnNlbmR8dW5uZXN0fHVwcGVyfHVwcGVyX2luY3x1cHBlcl9pbmZ8dXRmOF90b19hc2NpaXwiICsKICAgICAgICAidXRmOF90b19iaWc1fHV0ZjhfdG9fZXVjX2NufHV0ZjhfdG9fZXVjX2ppc18yMDA0fHV0ZjhfdG9fZXVjX2pwfHV0ZjhfdG9fZXVjX2tyfCIgKwogICAgICAgICJ1dGY4X3RvX2V1Y190d3x1dGY4X3RvX2diMTgwMzB8dXRmOF90b19nYmt8dXRmOF90b19pc284ODU5fHV0ZjhfdG9faXNvODg1OV8xfCIgKwogICAgICAgICJ1dGY4X3RvX2pvaGFifHV0ZjhfdG9fa29pOHJ8dXRmOF90b19rb2k4dXx1dGY4X3RvX3NoaWZ0X2ppc18yMDA0fHV0ZjhfdG9fc2ppc3wiICsKICAgICAgICAidXRmOF90b191aGN8dXRmOF90b193aW58dXVpZF9jbXB8dXVpZF9lcXx1dWlkX2dlfHV1aWRfZ3R8dXVpZF9oYXNofHV1aWRfaW58dXVpZF9sZXwiICsKICAgICAgICAidXVpZF9sdHx1dWlkX25lfHV1aWRfb3V0fHV1aWRfcmVjdnx1dWlkX3NlbmR8dmFyX3BvcHx2YXJfc2FtcHx2YXJiaXRfaW58dmFyYml0X291dHwiICsKICAgICAgICAidmFyYml0X3JlY3Z8dmFyYml0X3NlbmR8dmFyYml0X3RyYW5zZm9ybXx2YXJiaXRjbXB8dmFyYml0ZXF8dmFyYml0Z2V8dmFyYml0Z3R8dmFyYml0bGV8IiArCiAgICAgICAgInZhcmJpdGx0fHZhcmJpdG5lfHZhcmJpdHR5cG1vZGlufHZhcmJpdHR5cG1vZG91dHx2YXJjaGFyX3RyYW5zZm9ybXx2YXJjaGFyaW58IiArCiAgICAgICAgInZhcmNoYXJvdXR8dmFyY2hhcnJlY3Z8dmFyY2hhcnNlbmR8dmFyY2hhcnR5cG1vZGlufHZhcmNoYXJ0eXBtb2RvdXR8dmFyaWFuY2V8dmVyc2lvbnwiICsKICAgICAgICAidm9pZF9pbnx2b2lkX291dHx2b2lkX3JlY3Z8dm9pZF9zZW5kfHdpZHRofHdpZHRoX2J1Y2tldHx3aW4xMjUwX3RvX2xhdGluMnwiICsKICAgICAgICAid2luMTI1MF90b19taWN8d2luMTI1MV90b19pc298d2luMTI1MV90b19rb2k4cnx3aW4xMjUxX3RvX21pY3x3aW4xMjUxX3RvX3dpbjg2NnwiICsKICAgICAgICAid2luODY2X3RvX2lzb3x3aW44NjZfdG9fa29pOHJ8d2luODY2X3RvX21pY3x3aW44NjZfdG9fd2luMTI1MXx3aW5fdG9fdXRmOHx4aWRlcXwiICsKICAgICAgICAieGlkZXFpbnQ0fHhpZGlufHhpZG91dHx4aWRyZWN2fHhpZHNlbmR8eG1sfHhtbF9pbnx4bWxfaXNfd2VsbF9mb3JtZWR8IiArCiAgICAgICAgInhtbF9pc193ZWxsX2Zvcm1lZF9jb250ZW50fHhtbF9pc193ZWxsX2Zvcm1lZF9kb2N1bWVudHx4bWxfb3V0fHhtbF9yZWN2fHhtbF9zZW5kfCIgKwogICAgICAgICJ4bWxhZ2d8eG1sY29tbWVudHx4bWxjb25jYXQyfHhtbGV4aXN0c3x4bWx2YWxpZGF0ZXx4cGF0aHx4cGF0aF9leGlzdHMiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcwogICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCgogICAgdmFyIHNxbFJ1bGVzID0gW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUgc3RyaW5nIC0tIGFzc3VtZSBkb2xsYXIgc3RyaW5ncyBpZiBtdWx0aS1saW5lIGZvciBub3cKICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwgLy8gcGcgaWRlbnRpZmllcgogICAgICAgICAgICByZWdleCA6ICciLio/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl9dW2EtekEtWjAtOV8kXSpcXGIiIC8vIFRPRE8gLSBVbmljb2RlIGluIGlkZW50aWZpZXJzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiIXwhIXwhfnwhflxcKnwhfn58IX5+XFwqfCN8IyN8Izx8Izw9fCM8PnwjPXwjPnwjPj18JXxcXCZ8XFwmXFwmfFxcJjx8XFwmPFxcfHxcXCY+fFxcKnxcXCt8IiArCiAgICAgICAgICAgICAgICAgICAgIlxcLXwvfDx8PCM+fDxcXC0+fDw8fDw8PXw8PFxcfHw8PXw8Pnw8XFw/Pnw8QHw8XFxefD18Pnw+PXw+Pnw+Pj18PlxcXnxcXD8jfFxcP1xcLXxcXD9cXC1cXHx8IiArCiAgICAgICAgICAgICAgICAgICAgIlxcP1xcfHxcXD9cXHxcXHx8QHxAXFwtQHxAPnxAQHxAQEB8XFxefFxcfHxcXHxcXCY+fFxcfC98XFx8Pj58XFx8XFx8fFxcfFxcfC98fnx+XFwqfH48PX58fjx+fCIgKwogICAgICAgICAgICAgICAgICAgICJ+PXx+Pj1+fH4+fnx+fnx+flxcKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXChdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9CiAgICBdOwoKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgogICAgICAgICAgICB9LHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuc3RhdGVtZW50QmVnaW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl0rIiwgLy8gQ291bGQgZW51bWVyYXRlIHN0YXJ0aW5nIGtleXdvcmRzIGJ1dCB0aGlzIGFsbG93cyB0aGluZ3MgdG8gd29yayB3aGVuIG5ldyBzdGF0ZW1lbnRzIGFyZSBhZGRlZC4KICAgICAgICAgICAgICAgIG5leHQgOiAic3RhdGVtZW50IgogICAgICAgICAgICB9LHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuYnVpbGRpbiIsIC8vIHBzcWwgZGlyZWN0aXZlCiAgICAgICAgICAgICAgICByZWdleCA6ICJeXFxcXFtcXFNdKy4qJCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJzdGF0ZW1lbnQiIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aS1saW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnRTdGF0ZW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0YXRlbWVudEVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI7IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCRwZXJsXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicGVybC1zdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcJHB5dGhvblxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInB5dGhvbi1zdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcJGpzb25cXCQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJqc29uLXN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwkKGpzfGphdmFzY3JpcHQpXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiamF2YXNjcmlwdC1zdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcJFtcXHdfMC05XSpcXCQkIiwgLy8gZG9sbGFyIHF1b3RlIGF0IHRoZSBlbmQgb2YgYSBsaW5lCiAgICAgICAgICAgICAgICBuZXh0IDogImRvbGxhclNxbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcJFtcXHdfMC05XSpcXCQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJkb2xsYXJTdGF0ZW1lbnRTdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLmNvbmNhdChzcWxSdWxlcyksCgogICAgICAgICJkb2xsYXJTcWwiIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aS1saW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnREb2xsYXJTcWwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIGVuZCBxdW90aW5nIHdpdGggZG9sbGFyIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl5cXCRbXFx3XzAtOV0qXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhdGVtZW50IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwkW1xcd18wLTldKlxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogImRvbGxhclNxbFN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0uY29uY2F0KHNxbFJ1bGVzKSwKCiAgICAgICAgImNvbW1lbnQiIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJjb21tZW50U3RhdGVtZW50IiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGF0ZW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgImNvbW1lbnREb2xsYXJTcWwiIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogImRvbGxhclNxbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAiZG9sbGFyU3RhdGVtZW50U3RyaW5nIiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBjbG9zaW5nIGRvbGxhcnN0cmluZwogICAgICAgICAgICAgICAgcmVnZXggOiAiLio/XFwkW1xcd18wLTldKlxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXRlbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gZG9sbGFyc3RyaW5nIHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgImRvbGxhclNxbFN0cmluZyIgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2xvc2luZyBkb2xsYXJzdHJpbmcKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4qP1xcJFtcXHdfMC05XSpcXCQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJkb2xsYXJTcWwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIGRvbGxhcnN0cmluZyBzcGFubmluZyB3aG9sZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICIuKyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLCBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwogICAgdGhpcy5lbWJlZFJ1bGVzKFBlcmxIaWdobGlnaHRSdWxlcywgInBlcmwtIiwgW3t0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICJcXCRwZXJsXFwkIiwgbmV4dCA6ICJzdGF0ZW1lbnQifV0pOwogICAgdGhpcy5lbWJlZFJ1bGVzKFB5dGhvbkhpZ2hsaWdodFJ1bGVzLCAicHl0aG9uLSIsIFt7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiXFwkcHl0aG9uXFwkIiwgbmV4dCA6ICJzdGF0ZW1lbnQifV0pOwogICAgdGhpcy5lbWJlZFJ1bGVzKEpzb25IaWdobGlnaHRSdWxlcywgImpzb24tIiwgW3t0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICJcXCRqc29uXFwkIiwgbmV4dCA6ICJzdGF0ZW1lbnQifV0pOwogICAgdGhpcy5lbWJlZFJ1bGVzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgImphdmFzY3JpcHQtIiwgW3t0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICJcXCQoanN8amF2YXNjcmlwdClcXCQiLCBuZXh0IDogInN0YXRlbWVudCJ9XSk7Cn07Cgpvb3AuaW5oZXJpdHMoUGdzcWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUGdzcWxIaWdobGlnaHRSdWxlcyA9IFBnc3FsSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9wZ3NxbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3Bnc3FsX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4uL21vZGUvdGV4dCIpLk1vZGU7CnZhciBQZ3NxbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9wZ3NxbF9oaWdobGlnaHRfcnVsZXMiKS5QZ3NxbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQZ3NxbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgeyAKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAia2V5d29yZC5zdGF0ZW1lbnRFbmQiKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOyAvLyBLZWVwIHdoYXRldmVyIGluZGVudCB0aGUgcHJldmlvdXMgbGluZSBoYXMKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Bnc3FsIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcGdzcWwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9waHBfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFBocExhbmdIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGRvY0NvbW1lbnQgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9IGxhbmcuYXJyYXlUb01hcCgKJ2Fic3xhY29zfGFjb3NofGFkZGNzbGFzaGVzfGFkZHNsYXNoZXN8YWdncmVnYXRlfGFnZ3JlZ2F0ZV9pbmZvfGFnZ3JlZ2F0ZV9tZXRob2RzfGFnZ3JlZ2F0ZV9tZXRob2RzX2J5X2xpc3R8YWdncmVnYXRlX21ldGhvZHNfYnlfcmVnZXhwfFwKYWdncmVnYXRlX3Byb3BlcnRpZXN8YWdncmVnYXRlX3Byb3BlcnRpZXNfYnlfbGlzdHxhZ2dyZWdhdGVfcHJvcGVydGllc19ieV9yZWdleHB8YWdncmVnYXRpb25faW5mb3xhbXFwY29ubmVjdGlvbnxhbXFwZXhjaGFuZ2V8YW1xcHF1ZXVlfFwKYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZXxhcGFjaGVfZ2V0X21vZHVsZXN8YXBhY2hlX2dldF92ZXJzaW9ufGFwYWNoZV9nZXRlbnZ8YXBhY2hlX2xvb2t1cF91cml8YXBhY2hlX25vdGV8YXBhY2hlX3JlcXVlc3RfaGVhZGVyc3xcCmFwYWNoZV9yZXNldF90aW1lb3V0fGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzfGFwYWNoZV9zZXRlbnZ8YXBjX2FkZHxhcGNfYmluX2R1bXB8YXBjX2Jpbl9kdW1wZmlsZXxhcGNfYmluX2xvYWR8YXBjX2Jpbl9sb2FkZmlsZXxcCmFwY19jYWNoZV9pbmZvfGFwY19jYXN8YXBjX2NsZWFyX2NhY2hlfGFwY19jb21waWxlX2ZpbGV8YXBjX2RlY3xhcGNfZGVmaW5lX2NvbnN0YW50c3xhcGNfZGVsZXRlfGFwY19kZWxldGVfZmlsZXxhcGNfZXhpc3RzfGFwY19mZXRjaHxcCmFwY19pbmN8YXBjX2xvYWRfY29uc3RhbnRzfGFwY19zbWFfaW5mb3xhcGNfc3RvcmV8YXBjaXRlcmF0b3J8YXBkX2JyZWFrcG9pbnR8YXBkX2NhbGxzdGFja3xhcGRfY2x1bmt8YXBkX2NvbnRpbnVlfGFwZF9jcm9ha3xcCmFwZF9kdW1wX2Z1bmN0aW9uX3RhYmxlfGFwZF9kdW1wX3BlcnNpc3RlbnRfcmVzb3VyY2VzfGFwZF9kdW1wX3JlZ3VsYXJfcmVzb3VyY2VzfGFwZF9lY2hvfGFwZF9nZXRfYWN0aXZlX3N5bWJvbHN8YXBkX3NldF9wcHJvZl90cmFjZXxcCmFwZF9zZXRfc2Vzc2lvbnxhcGRfc2V0X3Nlc3Npb25fdHJhY2V8YXBkX3NldF9zZXNzaW9uX3RyYWNlX3NvY2tldHxhcHBlbmRpdGVyYXRvcnxhcnJheXxhcnJheV9jaGFuZ2Vfa2V5X2Nhc2V8YXJyYXlfY2h1bmt8YXJyYXlfY29tYmluZXxcCmFycmF5X2NvdW50X3ZhbHVlc3xhcnJheV9kaWZmfGFycmF5X2RpZmZfYXNzb2N8YXJyYXlfZGlmZl9rZXl8YXJyYXlfZGlmZl91YXNzb2N8YXJyYXlfZGlmZl91a2V5fGFycmF5X2ZpbGx8YXJyYXlfZmlsbF9rZXlzfGFycmF5X2ZpbHRlcnxcCmFycmF5X2ZsaXB8YXJyYXlfaW50ZXJzZWN0fGFycmF5X2ludGVyc2VjdF9hc3NvY3xhcnJheV9pbnRlcnNlY3Rfa2V5fGFycmF5X2ludGVyc2VjdF91YXNzb2N8YXJyYXlfaW50ZXJzZWN0X3VrZXl8YXJyYXlfa2V5X2V4aXN0c3xcCmFycmF5X2tleXN8YXJyYXlfbWFwfGFycmF5X21lcmdlfGFycmF5X21lcmdlX3JlY3Vyc2l2ZXxhcnJheV9tdWx0aXNvcnR8YXJyYXlfcGFkfGFycmF5X3BvcHxhcnJheV9wcm9kdWN0fGFycmF5X3B1c2h8YXJyYXlfcmFuZHxcCmFycmF5X3JlZHVjZXxhcnJheV9yZXBsYWNlfGFycmF5X3JlcGxhY2VfcmVjdXJzaXZlfGFycmF5X3JldmVyc2V8YXJyYXlfc2VhcmNofGFycmF5X3NoaWZ0fGFycmF5X3NsaWNlfGFycmF5X3NwbGljZXxhcnJheV9zdW18YXJyYXlfdWRpZmZ8XAphcnJheV91ZGlmZl9hc3NvY3xhcnJheV91ZGlmZl91YXNzb2N8YXJyYXlfdWludGVyc2VjdHxhcnJheV91aW50ZXJzZWN0X2Fzc29jfGFycmF5X3VpbnRlcnNlY3RfdWFzc29jfGFycmF5X3VuaXF1ZXxhcnJheV91bnNoaWZ0fFwKYXJyYXlfdmFsdWVzfGFycmF5X3dhbGt8YXJyYXlfd2Fsa19yZWN1cnNpdmV8YXJyYXlhY2Nlc3N8YXJyYXlpdGVyYXRvcnxhcnJheW9iamVjdHxhcnNvcnR8YXNpbnxhc2luaHxhc29ydHxhc3NlcnR8YXNzZXJ0X29wdGlvbnN8YXRhbnxcCmF0YW4yfGF0YW5ofGF1ZGlvcHJvcGVydGllc3xiYWRmdW5jdGlvbmNhbGxleGNlcHRpb258YmFkbWV0aG9kY2FsbGV4Y2VwdGlvbnxiYXNlNjRfZGVjb2RlfGJhc2U2NF9lbmNvZGV8YmFzZV9jb252ZXJ0fGJhc2VuYW1lfFwKYmJjb2RlX2FkZF9lbGVtZW50fGJiY29kZV9hZGRfc21pbGV5fGJiY29kZV9jcmVhdGV8YmJjb2RlX2Rlc3Ryb3l8YmJjb2RlX3BhcnNlfGJiY29kZV9zZXRfYXJnX3BhcnNlcnxiYmNvZGVfc2V0X2ZsYWdzfGJjYWRkfGJjY29tcHxiY2RpdnxcCmJjbW9kfGJjbXVsfGJjb21waWxlcl9sb2FkfGJjb21waWxlcl9sb2FkX2V4ZXxiY29tcGlsZXJfcGFyc2VfY2xhc3N8YmNvbXBpbGVyX3JlYWR8YmNvbXBpbGVyX3dyaXRlX2NsYXNzfGJjb21waWxlcl93cml0ZV9jb25zdGFudHxcCmJjb21waWxlcl93cml0ZV9leGVfZm9vdGVyfGJjb21waWxlcl93cml0ZV9maWxlfGJjb21waWxlcl93cml0ZV9mb290ZXJ8YmNvbXBpbGVyX3dyaXRlX2Z1bmN0aW9ufGJjb21waWxlcl93cml0ZV9mdW5jdGlvbnNfZnJvbV9maWxlfFwKYmNvbXBpbGVyX3dyaXRlX2hlYWRlcnxiY29tcGlsZXJfd3JpdGVfaW5jbHVkZWRfZmlsZW5hbWV8YmNwb3d8YmNwb3dtb2R8YmNzY2FsZXxiY3NxcnR8YmNzdWJ8YmluMmhleHxiaW5kX3RleHRkb21haW5fY29kZXNldHxiaW5kZWN8XApiaW5kdGV4dGRvbWFpbnxic29uX2RlY29kZXxic29uX2VuY29kZXxidW1wVmFsdWV8YnpjbG9zZXxiemNvbXByZXNzfGJ6ZGVjb21wcmVzc3xiemVycm5vfGJ6ZXJyb3J8YnplcnJzdHJ8YnpmbHVzaHxiem9wZW58YnpyZWFkfGJ6d3JpdGV8XApjYWNoaW5naXRlcmF0b3J8Y2Fpcm98Y2Fpcm9fY3JlYXRlfGNhaXJvX2ZvbnRfZmFjZV9nZXRfdHlwZXxjYWlyb19mb250X2ZhY2Vfc3RhdHVzfGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGV8Y2Fpcm9fZm9udF9vcHRpb25zX2VxdWFsfFwKY2Fpcm9fZm9udF9vcHRpb25zX2dldF9hbnRpYWxpYXN8Y2Fpcm9fZm9udF9vcHRpb25zX2dldF9oaW50X21ldHJpY3N8Y2Fpcm9fZm9udF9vcHRpb25zX2dldF9oaW50X3N0eWxlfFwKY2Fpcm9fZm9udF9vcHRpb25zX2dldF9zdWJwaXhlbF9vcmRlcnxjYWlyb19mb250X29wdGlvbnNfaGFzaHxjYWlyb19mb250X29wdGlvbnNfbWVyZ2V8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXN8XApjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfbWV0cmljc3xjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGV8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9zdWJwaXhlbF9vcmRlcnxjYWlyb19mb250X29wdGlvbnNfc3RhdHVzfFwKY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGh8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGV8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGF8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJvbV9wbmd8XApjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhfGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdHxjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHR8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlfFwKY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGh8Y2Fpcm9fbWF0cml4X2NyZWF0ZV9zY2FsZXxjYWlyb19tYXRyaXhfY3JlYXRlX3RyYW5zbGF0ZXxjYWlyb19tYXRyaXhfaW52ZXJ0fGNhaXJvX21hdHJpeF9tdWx0aXBseXxcCmNhaXJvX21hdHJpeF9yb3RhdGV8Y2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZXxjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50fGNhaXJvX21hdHJpeF90cmFuc2xhdGV8Y2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2J8XApjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmF8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2V8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyfGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbHxcCmNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYnxjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2JhfGNhaXJvX3BhdHRlcm5fZ2V0X2NvbG9yX3N0b3BfY291bnR8Y2Fpcm9fcGF0dGVybl9nZXRfY29sb3Jfc3RvcF9yZ2JhfFwKY2Fpcm9fcGF0dGVybl9nZXRfZXh0ZW5kfGNhaXJvX3BhdHRlcm5fZ2V0X2ZpbHRlcnxjYWlyb19wYXR0ZXJuX2dldF9saW5lYXJfcG9pbnRzfGNhaXJvX3BhdHRlcm5fZ2V0X21hdHJpeHxcCmNhaXJvX3BhdHRlcm5fZ2V0X3JhZGlhbF9jaXJjbGVzfGNhaXJvX3BhdHRlcm5fZ2V0X3JnYmF8Y2Fpcm9fcGF0dGVybl9nZXRfc3VyZmFjZXxjYWlyb19wYXR0ZXJuX2dldF90eXBlfGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZHxcCmNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcnxjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXh8Y2Fpcm9fcGF0dGVybl9zdGF0dXN8Y2Fpcm9fcGRmX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3BkZl9zdXJmYWNlX3NldF9zaXplfFwKY2Fpcm9fcHNfZ2V0X2xldmVsc3xjYWlyb19wc19sZXZlbF90b19zdHJpbmd8Y2Fpcm9fcHNfc3VyZmFjZV9jcmVhdGV8Y2Fpcm9fcHNfc3VyZmFjZV9kc2NfYmVnaW5fcGFnZV9zZXR1cHxcCmNhaXJvX3BzX3N1cmZhY2VfZHNjX2JlZ2luX3NldHVwfGNhaXJvX3BzX3N1cmZhY2VfZHNjX2NvbW1lbnR8Y2Fpcm9fcHNfc3VyZmFjZV9nZXRfZXBzfGNhaXJvX3BzX3N1cmZhY2VfcmVzdHJpY3RfdG9fbGV2ZWx8XApjYWlyb19wc19zdXJmYWNlX3NldF9lcHN8Y2Fpcm9fcHNfc3VyZmFjZV9zZXRfc2l6ZXxjYWlyb19zY2FsZWRfZm9udF9jcmVhdGV8Y2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50c3xjYWlyb19zY2FsZWRfZm9udF9nZXRfY3RtfFwKY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZXxjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9tYXRyaXh8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfb3B0aW9uc3xjYWlyb19zY2FsZWRfZm9udF9nZXRfc2NhbGVfbWF0cml4fFwKY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X3R5cGV8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50c3xjYWlyb19zY2FsZWRfZm9udF9zdGF0dXN8Y2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzfFwKY2Fpcm9fc3VyZmFjZV9jb3B5X3BhZ2V8Y2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcnxjYWlyb19zdXJmYWNlX2ZpbmlzaHxjYWlyb19zdXJmYWNlX2ZsdXNofGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnR8XApjYWlyb19zdXJmYWNlX2dldF9kZXZpY2Vfb2Zmc2V0fGNhaXJvX3N1cmZhY2VfZ2V0X2ZvbnRfb3B0aW9uc3xjYWlyb19zdXJmYWNlX2dldF90eXBlfGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eXxcCmNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGV8Y2Fpcm9fc3VyZmFjZV9zZXRfZGV2aWNlX29mZnNldHxjYWlyb19zdXJmYWNlX3NldF9mYWxsYmFja19yZXNvbHV0aW9ufGNhaXJvX3N1cmZhY2Vfc2hvd19wYWdlfFwKY2Fpcm9fc3VyZmFjZV9zdGF0dXN8Y2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmd8Y2Fpcm9fc3ZnX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3N2Z19zdXJmYWNlX3Jlc3RyaWN0X3RvX3ZlcnNpb258XApjYWlyb19zdmdfdmVyc2lvbl90b19zdHJpbmd8Y2Fpcm9hbnRpYWxpYXN8Y2Fpcm9jb250ZW50fGNhaXJvY29udGV4dHxjYWlyb2V4Y2VwdGlvbnxjYWlyb2V4dGVuZHxjYWlyb2ZpbGxydWxlfGNhaXJvZmlsdGVyfGNhaXJvZm9udGZhY2V8XApjYWlyb2ZvbnRvcHRpb25zfGNhaXJvZm9udHNsYW50fGNhaXJvZm9udHR5cGV8Y2Fpcm9mb250d2VpZ2h0fGNhaXJvZm9ybWF0fGNhaXJvZ3JhZGllbnRwYXR0ZXJufGNhaXJvaGludG1ldHJpY3N8Y2Fpcm9oaW50c3R5bGV8XApjYWlyb2ltYWdlc3VyZmFjZXxjYWlyb2xpbmVhcmdyYWRpZW50fGNhaXJvbGluZWNhcHxjYWlyb2xpbmVqb2lufGNhaXJvbWF0cml4fGNhaXJvb3BlcmF0b3J8Y2Fpcm9wYXRofGNhaXJvcGF0dGVybnxjYWlyb3BhdHRlcm50eXBlfFwKY2Fpcm9wZGZzdXJmYWNlfGNhaXJvcHNsZXZlbHxjYWlyb3Bzc3VyZmFjZXxjYWlyb3JhZGlhbGdyYWRpZW50fGNhaXJvc2NhbGVkZm9udHxjYWlyb3NvbGlkcGF0dGVybnxjYWlyb3N0YXR1c3xjYWlyb3N1YnBpeGVsb3JkZXJ8XApjYWlyb3N1cmZhY2V8Y2Fpcm9zdXJmYWNlcGF0dGVybnxjYWlyb3N1cmZhY2V0eXBlfGNhaXJvc3Znc3VyZmFjZXxjYWlyb3N2Z3ZlcnNpb258Y2Fpcm90b3lmb250ZmFjZXxjYWxfZGF5c19pbl9tb250aHxjYWxfZnJvbV9qZHxjYWxfaW5mb3xcCmNhbF90b19qZHxjYWxjdWxfaG1hY3xjYWxjdWxobWFjfGNhbGxfdXNlcl9mdW5jfGNhbGxfdXNlcl9mdW5jX2FycmF5fGNhbGxfdXNlcl9tZXRob2R8Y2FsbF91c2VyX21ldGhvZF9hcnJheXxjYWxsYmFja2ZpbHRlcml0ZXJhdG9yfGNlaWx8XApjaGRifGNoZGJfY3JlYXRlfGNoZGlyfGNoZWNrZGF0ZXxjaGVja2Ruc3JyfGNoZ3JwfGNobW9kfGNob3B8Y2hvd258Y2hyfGNocm9vdHxjaHVua19zcGxpdHxjbGFzc19hbGlhc3xjbGFzc19leGlzdHN8Y2xhc3NfaW1wbGVtZW50c3xcCmNsYXNzX3BhcmVudHN8Y2xhc3NfdXNlc3xjbGFzc2tpdF9pbXBvcnR8Y2xhc3NraXRfbWV0aG9kX2FkZHxjbGFzc2tpdF9tZXRob2RfY29weXxjbGFzc2tpdF9tZXRob2RfcmVkZWZpbmV8Y2xhc3NraXRfbWV0aG9kX3JlbW92ZXxcCmNsYXNza2l0X21ldGhvZF9yZW5hbWV8Y2xlYXJzdGF0Y2FjaGV8Y2xvbmV8Y2xvc2VkaXJ8Y2xvc2Vsb2d8Y29sbGF0b3J8Y29tfGNvbV9hZGRyZWZ8Y29tX2NyZWF0ZV9ndWlkfGNvbV9ldmVudF9zaW5rfGNvbV9nZXR8XApjb21fZ2V0X2FjdGl2ZV9vYmplY3R8Y29tX2ludm9rZXxjb21faXNlbnVtfGNvbV9sb2FkfGNvbV9sb2FkX3R5cGVsaWJ8Y29tX21lc3NhZ2VfcHVtcHxjb21fcHJpbnRfdHlwZWluZm98Y29tX3Byb3BnZXR8Y29tX3Byb3BwdXR8XApjb21fcHJvcHNldHxjb21fcmVsZWFzZXxjb21fc2V0fGNvbXBhY3R8Y29ubmVjdGlvbl9hYm9ydGVkfGNvbm5lY3Rpb25fc3RhdHVzfGNvbm5lY3Rpb25fdGltZW91dHxjb25zdGFudHxjb25zdHJ1Y3R8Y29uc3RydWN0fGNvbnN0cnVjdHxcCmNvbnZlcnRfY3lyX3N0cmluZ3xjb252ZXJ0X3V1ZGVjb2RlfGNvbnZlcnRfdXVlbmNvZGV8Y29weXxjb3N8Y29zaHxjb3VudHxjb3VudF9jaGFyc3xjb3VudGFibGV8Y291bnRlcl9idW1wfGNvdW50ZXJfYnVtcF92YWx1ZXxcCmNvdW50ZXJfY3JlYXRlfGNvdW50ZXJfZ2V0fGNvdW50ZXJfZ2V0X21ldGF8Y291bnRlcl9nZXRfbmFtZWR8Y291bnRlcl9nZXRfdmFsdWV8Y291bnRlcl9yZXNldHxjb3VudGVyX3Jlc2V0X3ZhbHVlfGNyYWNrX2NoZWNrfFwKY3JhY2tfY2xvc2VkaWN0fGNyYWNrX2dldGxhc3RtZXNzYWdlfGNyYWNrX29wZW5kaWN0fGNyYzMyfGNyZWF0ZV9mdW5jdGlvbnxjcnlwdHxjdHlwZV9hbG51bXxjdHlwZV9hbHBoYXxjdHlwZV9jbnRybHxjdHlwZV9kaWdpdHxcCmN0eXBlX2dyYXBofGN0eXBlX2xvd2VyfGN0eXBlX3ByaW50fGN0eXBlX3B1bmN0fGN0eXBlX3NwYWNlfGN0eXBlX3VwcGVyfGN0eXBlX3hkaWdpdHxjdWJyaWRfYWZmZWN0ZWRfcm93c3xjdWJyaWRfYmluZHxcCmN1YnJpZF9jbGllbnRfZW5jb2Rpbmd8Y3VicmlkX2Nsb3NlfGN1YnJpZF9jbG9zZV9wcmVwYXJlfGN1YnJpZF9jbG9zZV9yZXF1ZXN0fGN1YnJpZF9jb2xfZ2V0fGN1YnJpZF9jb2xfc2l6ZXxjdWJyaWRfY29sdW1uX25hbWVzfFwKY3VicmlkX2NvbHVtbl90eXBlc3xjdWJyaWRfY29tbWl0fGN1YnJpZF9jb25uZWN0fGN1YnJpZF9jb25uZWN0X3dpdGhfdXJsfGN1YnJpZF9jdXJyZW50X29pZHxjdWJyaWRfZGF0YV9zZWVrfGN1YnJpZF9kYl9uYW1lfFwKY3VicmlkX2Rpc2Nvbm5lY3R8Y3VicmlkX2Ryb3B8Y3VicmlkX2Vycm5vfGN1YnJpZF9lcnJvcnxjdWJyaWRfZXJyb3JfY29kZXxjdWJyaWRfZXJyb3JfY29kZV9mYWNpbGl0eXxjdWJyaWRfZXJyb3JfbXNnfGN1YnJpZF9leGVjdXRlfFwKY3VicmlkX2ZldGNofGN1YnJpZF9mZXRjaF9hcnJheXxjdWJyaWRfZmV0Y2hfYXNzb2N8Y3VicmlkX2ZldGNoX2ZpZWxkfGN1YnJpZF9mZXRjaF9sZW5ndGhzfGN1YnJpZF9mZXRjaF9vYmplY3R8Y3VicmlkX2ZldGNoX3Jvd3xcCmN1YnJpZF9maWVsZF9mbGFnc3xjdWJyaWRfZmllbGRfbGVufGN1YnJpZF9maWVsZF9uYW1lfGN1YnJpZF9maWVsZF9zZWVrfGN1YnJpZF9maWVsZF90YWJsZXxjdWJyaWRfZmllbGRfdHlwZXxjdWJyaWRfZnJlZV9yZXN1bHR8XApjdWJyaWRfZ2V0fGN1YnJpZF9nZXRfYXV0b2NvbW1pdHxjdWJyaWRfZ2V0X2NoYXJzZXR8Y3VicmlkX2dldF9jbGFzc19uYW1lfGN1YnJpZF9nZXRfY2xpZW50X2luZm98Y3VicmlkX2dldF9kYl9wYXJhbWV0ZXJ8XApjdWJyaWRfZ2V0X3NlcnZlcl9pbmZvfGN1YnJpZF9pbnNlcnRfaWR8Y3VicmlkX2lzX2luc3RhbmNlfGN1YnJpZF9saXN0X2Ric3xjdWJyaWRfbG9hZF9mcm9tX2dsb3xjdWJyaWRfbG9iX2Nsb3NlfGN1YnJpZF9sb2JfZXhwb3J0fFwKY3VicmlkX2xvYl9nZXR8Y3VicmlkX2xvYl9zZW5kfGN1YnJpZF9sb2Jfc2l6ZXxjdWJyaWRfbG9ja19yZWFkfGN1YnJpZF9sb2NrX3dyaXRlfGN1YnJpZF9tb3ZlX2N1cnNvcnxjdWJyaWRfbmV3X2dsb3xjdWJyaWRfbmV4dF9yZXN1bHR8XApjdWJyaWRfbnVtX2NvbHN8Y3VicmlkX251bV9maWVsZHN8Y3VicmlkX251bV9yb3dzfGN1YnJpZF9waW5nfGN1YnJpZF9wcmVwYXJlfGN1YnJpZF9wdXR8Y3VicmlkX3F1ZXJ5fGN1YnJpZF9yZWFsX2VzY2FwZV9zdHJpbmd8XApjdWJyaWRfcmVzdWx0fGN1YnJpZF9yb2xsYmFja3xjdWJyaWRfc2F2ZV90b19nbG98Y3VicmlkX3NjaGVtYXxjdWJyaWRfc2VuZF9nbG98Y3VicmlkX3NlcV9kcm9wfGN1YnJpZF9zZXFfaW5zZXJ0fGN1YnJpZF9zZXFfcHV0fFwKY3VicmlkX3NldF9hZGR8Y3VicmlkX3NldF9hdXRvY29tbWl0fGN1YnJpZF9zZXRfZGJfcGFyYW1ldGVyfGN1YnJpZF9zZXRfZHJvcHxjdWJyaWRfdW5idWZmZXJlZF9xdWVyeXxjdWJyaWRfdmVyc2lvbnxjdXJsX2Nsb3NlfFwKY3VybF9jb3B5X2hhbmRsZXxjdXJsX2Vycm5vfGN1cmxfZXJyb3J8Y3VybF9leGVjfGN1cmxfZ2V0aW5mb3xjdXJsX2luaXR8Y3VybF9tdWx0aV9hZGRfaGFuZGxlfGN1cmxfbXVsdGlfY2xvc2V8Y3VybF9tdWx0aV9leGVjfFwKY3VybF9tdWx0aV9nZXRjb250ZW50fGN1cmxfbXVsdGlfaW5mb19yZWFkfGN1cmxfbXVsdGlfaW5pdHxjdXJsX211bHRpX3JlbW92ZV9oYW5kbGV8Y3VybF9tdWx0aV9zZWxlY3R8Y3VybF9zZXRvcHR8Y3VybF9zZXRvcHRfYXJyYXl8XApjdXJsX3ZlcnNpb258Y3VycmVudHxjeXJ1c19hdXRoZW50aWNhdGV8Y3lydXNfYmluZHxjeXJ1c19jbG9zZXxjeXJ1c19jb25uZWN0fGN5cnVzX3F1ZXJ5fGN5cnVzX3VuYmluZHxkYXRlfGRhdGVfYWRkfGRhdGVfY3JlYXRlfFwKZGF0ZV9jcmVhdGVfZnJvbV9mb3JtYXR8ZGF0ZV9kYXRlX3NldHxkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0fGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXR8ZGF0ZV9kaWZmfGRhdGVfZm9ybWF0fGRhdGVfZ2V0X2xhc3RfZXJyb3JzfFwKZGF0ZV9pbnRlcnZhbF9jcmVhdGVfZnJvbV9kYXRlX3N0cmluZ3xkYXRlX2ludGVydmFsX2Zvcm1hdHxkYXRlX2lzb2RhdGVfc2V0fGRhdGVfbW9kaWZ5fGRhdGVfb2Zmc2V0X2dldHxkYXRlX3BhcnNlfGRhdGVfcGFyc2VfZnJvbV9mb3JtYXR8XApkYXRlX3N1YnxkYXRlX3N1bl9pbmZvfGRhdGVfc3VucmlzZXxkYXRlX3N1bnNldHxkYXRlX3RpbWVfc2V0fGRhdGVfdGltZXN0YW1wX2dldHxkYXRlX3RpbWVzdGFtcF9zZXR8ZGF0ZV90aW1lem9uZV9nZXR8ZGF0ZV90aW1lem9uZV9zZXR8XApkYXRlaW50ZXJ2YWx8ZGF0ZXBlcmlvZHxkYXRldGltZXxkYXRldGltZXpvbmV8ZGIyX2F1dG9jb21taXR8ZGIyX2JpbmRfcGFyYW18ZGIyX2NsaWVudF9pbmZvfGRiMl9jbG9zZXxkYjJfY29sdW1uX3ByaXZpbGVnZXN8ZGIyX2NvbHVtbnN8XApkYjJfY29tbWl0fGRiMl9jb25uX2Vycm9yfGRiMl9jb25uX2Vycm9ybXNnfGRiMl9jb25uZWN0fGRiMl9jdXJzb3JfdHlwZXxkYjJfZXNjYXBlX3N0cmluZ3xkYjJfZXhlY3xkYjJfZXhlY3V0ZXxkYjJfZmV0Y2hfYXJyYXl8XApkYjJfZmV0Y2hfYXNzb2N8ZGIyX2ZldGNoX2JvdGh8ZGIyX2ZldGNoX29iamVjdHxkYjJfZmV0Y2hfcm93fGRiMl9maWVsZF9kaXNwbGF5X3NpemV8ZGIyX2ZpZWxkX25hbWV8ZGIyX2ZpZWxkX251bXxkYjJfZmllbGRfcHJlY2lzaW9ufFwKZGIyX2ZpZWxkX3NjYWxlfGRiMl9maWVsZF90eXBlfGRiMl9maWVsZF93aWR0aHxkYjJfZm9yZWlnbl9rZXlzfGRiMl9mcmVlX3Jlc3VsdHxkYjJfZnJlZV9zdG10fGRiMl9nZXRfb3B0aW9ufGRiMl9sYXN0X2luc2VydF9pZHxcCmRiMl9sb2JfcmVhZHxkYjJfbmV4dF9yZXN1bHR8ZGIyX251bV9maWVsZHN8ZGIyX251bV9yb3dzfGRiMl9wY2xvc2V8ZGIyX3Bjb25uZWN0fGRiMl9wcmVwYXJlfGRiMl9wcmltYXJ5X2tleXN8ZGIyX3Byb2NlZHVyZV9jb2x1bW5zfFwKZGIyX3Byb2NlZHVyZXN8ZGIyX3Jlc3VsdHxkYjJfcm9sbGJhY2t8ZGIyX3NlcnZlcl9pbmZvfGRiMl9zZXRfb3B0aW9ufGRiMl9zcGVjaWFsX2NvbHVtbnN8ZGIyX3N0YXRpc3RpY3N8ZGIyX3N0bXRfZXJyb3J8ZGIyX3N0bXRfZXJyb3Jtc2d8XApkYjJfdGFibGVfcHJpdmlsZWdlc3xkYjJfdGFibGVzfGRiYV9jbG9zZXxkYmFfZGVsZXRlfGRiYV9leGlzdHN8ZGJhX2ZldGNofGRiYV9maXJzdGtleXxkYmFfaGFuZGxlcnN8ZGJhX2luc2VydHxkYmFfa2V5X3NwbGl0fGRiYV9saXN0fFwKZGJhX25leHRrZXl8ZGJhX29wZW58ZGJhX29wdGltaXplfGRiYV9wb3BlbnxkYmFfcmVwbGFjZXxkYmFfc3luY3xkYmFzZV9hZGRfcmVjb3JkfGRiYXNlX2Nsb3NlfGRiYXNlX2NyZWF0ZXxkYmFzZV9kZWxldGVfcmVjb3JkfFwKZGJhc2VfZ2V0X2hlYWRlcl9pbmZvfGRiYXNlX2dldF9yZWNvcmR8ZGJhc2VfZ2V0X3JlY29yZF93aXRoX25hbWVzfGRiYXNlX251bWZpZWxkc3xkYmFzZV9udW1yZWNvcmRzfGRiYXNlX29wZW58ZGJhc2VfcGFja3xcCmRiYXNlX3JlcGxhY2VfcmVjb3JkfGRicGx1c19hZGR8ZGJwbHVzX2FxbHxkYnBsdXNfY2hkaXJ8ZGJwbHVzX2Nsb3NlfGRicGx1c19jdXJyfGRicGx1c19lcnJjb2RlfGRicGx1c19lcnJub3xkYnBsdXNfZmluZHxkYnBsdXNfZmlyc3R8XApkYnBsdXNfZmx1c2h8ZGJwbHVzX2ZyZWVhbGxsb2Nrc3xkYnBsdXNfZnJlZWxvY2t8ZGJwbHVzX2ZyZWVybG9ja3N8ZGJwbHVzX2dldGxvY2t8ZGJwbHVzX2dldHVuaXF1ZXxkYnBsdXNfaW5mb3xkYnBsdXNfbGFzdHxkYnBsdXNfbG9ja3JlbHxcCmRicGx1c19uZXh0fGRicGx1c19vcGVufGRicGx1c19wcmV2fGRicGx1c19yY2hwZXJtfGRicGx1c19yY3JlYXRlfGRicGx1c19yY3J0ZXhhY3R8ZGJwbHVzX3JjcnRsaWtlfGRicGx1c19yZXNvbHZlfGRicGx1c19yZXN0b3JlcG9zfFwKZGJwbHVzX3JrZXlzfGRicGx1c19yb3BlbnxkYnBsdXNfcnF1ZXJ5fGRicGx1c19ycmVuYW1lfGRicGx1c19yc2VjaW5kZXh8ZGJwbHVzX3J1bmxpbmt8ZGJwbHVzX3J6YXB8ZGJwbHVzX3NhdmVwb3N8ZGJwbHVzX3NldGluZGV4fFwKZGJwbHVzX3NldGluZGV4YnludW1iZXJ8ZGJwbHVzX3NxbHxkYnBsdXNfdGNsfGRicGx1c190cmVtb3ZlfGRicGx1c191bmRvfGRicGx1c191bmRvcHJlcGFyZXxkYnBsdXNfdW5sb2NrcmVsfGRicGx1c191bnNlbGVjdHxcCmRicGx1c191cGRhdGV8ZGJwbHVzX3hsb2NrcmVsfGRicGx1c194dW5sb2NrcmVsfGRieF9jbG9zZXxkYnhfY29tcGFyZXxkYnhfY29ubmVjdHxkYnhfZXJyb3J8ZGJ4X2VzY2FwZV9zdHJpbmd8ZGJ4X2ZldGNoX3Jvd3xkYnhfcXVlcnl8XApkYnhfc29ydHxkY2dldHRleHR8ZGNuZ2V0dGV4dHxkZWFnZ3JlZ2F0ZXxkZWJ1Z19iYWNrdHJhY2V8ZGVidWdfcHJpbnRfYmFja3RyYWNlfGRlYnVnX3p2YWxfZHVtcHxkZWNiaW58ZGVjaGV4fGRlY29jdHxkZWZpbmV8XApkZWZpbmVfc3lzbG9nX3ZhcmlhYmxlc3xkZWZpbmVkfGRlZzJyYWR8ZGVsZXRlfGRnZXR0ZXh0fGRpZXxkaW9fY2xvc2V8ZGlvX2ZjbnRsfGRpb19vcGVufGRpb19yZWFkfGRpb19zZWVrfGRpb19zdGF0fGRpb190Y3NldGF0dHJ8XApkaW9fdHJ1bmNhdGV8ZGlvX3dyaXRlfGRpcnxkaXJlY3RvcnlpdGVyYXRvcnxkaXJuYW1lfGRpc2tfZnJlZV9zcGFjZXxkaXNrX3RvdGFsX3NwYWNlfGRpc2tmcmVlc3BhY2V8ZGx8ZG5nZXR0ZXh0fGRuc19jaGVja19yZWNvcmR8XApkbnNfZ2V0X214fGRuc19nZXRfcmVjb3JkfGRvbV9pbXBvcnRfc2ltcGxleG1sfGRvbWFpbmV4Y2VwdGlvbnxkb21hdHRyfGRvbWF0dHJpYnV0ZV9uYW1lfGRvbWF0dHJpYnV0ZV9zZXRfdmFsdWV8ZG9tYXR0cmlidXRlX3NwZWNpZmllZHxcCmRvbWF0dHJpYnV0ZV92YWx1ZXxkb21jaGFyYWN0ZXJkYXRhfGRvbWNvbW1lbnR8ZG9tZG9jdW1lbnR8ZG9tZG9jdW1lbnRfYWRkX3Jvb3R8ZG9tZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZXxcCmRvbWRvY3VtZW50X2NyZWF0ZV9jZGF0YV9zZWN0aW9ufGRvbWRvY3VtZW50X2NyZWF0ZV9jb21tZW50fGRvbWRvY3VtZW50X2NyZWF0ZV9lbGVtZW50fGRvbWRvY3VtZW50X2NyZWF0ZV9lbGVtZW50X25zfFwKZG9tZG9jdW1lbnRfY3JlYXRlX2VudGl0eV9yZWZlcmVuY2V8ZG9tZG9jdW1lbnRfY3JlYXRlX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb258ZG9tZG9jdW1lbnRfY3JlYXRlX3RleHRfbm9kZXxkb21kb2N1bWVudF9kb2N0eXBlfFwKZG9tZG9jdW1lbnRfZG9jdW1lbnRfZWxlbWVudHxkb21kb2N1bWVudF9kdW1wX2ZpbGV8ZG9tZG9jdW1lbnRfZHVtcF9tZW18ZG9tZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWR8ZG9tZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ25hbWV8XApkb21kb2N1bWVudF9odG1sX2R1bXBfbWVtfGRvbWRvY3VtZW50X3hpbmNsdWRlfGRvbWRvY3VtZW50ZnJhZ21lbnR8ZG9tZG9jdW1lbnR0eXBlfGRvbWRvY3VtZW50dHlwZV9lbnRpdGllc3xcCmRvbWRvY3VtZW50dHlwZV9pbnRlcm5hbF9zdWJzZXR8ZG9tZG9jdW1lbnR0eXBlX25hbWV8ZG9tZG9jdW1lbnR0eXBlX25vdGF0aW9uc3xkb21kb2N1bWVudHR5cGVfcHVibGljX2lkfGRvbWRvY3VtZW50dHlwZV9zeXN0ZW1faWR8XApkb21lbGVtZW50fGRvbWVsZW1lbnRfZ2V0X2F0dHJpYnV0ZXxkb21lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZXxkb21lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWduYW1lfGRvbWVsZW1lbnRfaGFzX2F0dHJpYnV0ZXxcCmRvbWVsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZXxkb21lbGVtZW50X3NldF9hdHRyaWJ1dGV8ZG9tZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGV8ZG9tZWxlbWVudF90YWduYW1lfGRvbWVudGl0eXxkb21lbnRpdHlyZWZlcmVuY2V8XApkb21leGNlcHRpb258ZG9taW1wbGVtZW50YXRpb258ZG9tbmFtZWRub2RlbWFwfGRvbW5vZGV8ZG9tbm9kZV9hZGRfbmFtZXNwYWNlfGRvbW5vZGVfYXBwZW5kX2NoaWxkfGRvbW5vZGVfYXBwZW5kX3NpYmxpbmd8XApkb21ub2RlX2F0dHJpYnV0ZXN8ZG9tbm9kZV9jaGlsZF9ub2Rlc3xkb21ub2RlX2Nsb25lX25vZGV8ZG9tbm9kZV9kdW1wX25vZGV8ZG9tbm9kZV9maXJzdF9jaGlsZHxkb21ub2RlX2dldF9jb250ZW50fFwKZG9tbm9kZV9oYXNfYXR0cmlidXRlc3xkb21ub2RlX2hhc19jaGlsZF9ub2Rlc3xkb21ub2RlX2luc2VydF9iZWZvcmV8ZG9tbm9kZV9pc19ibGFua19ub2RlfGRvbW5vZGVfbGFzdF9jaGlsZHxkb21ub2RlX25leHRfc2libGluZ3xcCmRvbW5vZGVfbm9kZV9uYW1lfGRvbW5vZGVfbm9kZV90eXBlfGRvbW5vZGVfbm9kZV92YWx1ZXxkb21ub2RlX293bmVyX2RvY3VtZW50fGRvbW5vZGVfcGFyZW50X25vZGV8ZG9tbm9kZV9wcmVmaXh8ZG9tbm9kZV9wcmV2aW91c19zaWJsaW5nfFwKZG9tbm9kZV9yZW1vdmVfY2hpbGR8ZG9tbm9kZV9yZXBsYWNlX2NoaWxkfGRvbW5vZGVfcmVwbGFjZV9ub2RlfGRvbW5vZGVfc2V0X2NvbnRlbnR8ZG9tbm9kZV9zZXRfbmFtZXxkb21ub2RlX3NldF9uYW1lc3BhY2V8XApkb21ub2RlX3VubGlua19ub2RlfGRvbW5vZGVsaXN0fGRvbW5vdGF0aW9ufGRvbXByb2Nlc3NpbmdpbnN0cnVjdGlvbnxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb25fZGF0YXxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb25fdGFyZ2V0fFwKZG9tdGV4dHxkb214bWxfbmV3X2RvY3xkb214bWxfb3Blbl9maWxlfGRvbXhtbF9vcGVuX21lbXxkb214bWxfdmVyc2lvbnxkb214bWxfeG1sdHJlZXxkb214bWxfeHNsdF9zdHlsZXNoZWV0fGRvbXhtbF94c2x0X3N0eWxlc2hlZXRfZG9jfFwKZG9teG1sX3hzbHRfc3R5bGVzaGVldF9maWxlfGRvbXhtbF94c2x0X3ZlcnNpb258ZG9teHBhdGh8ZG9teHNsdHN0eWxlc2hlZXRfcHJvY2Vzc3xkb214c2x0c3R5bGVzaGVldF9yZXN1bHRfZHVtcF9maWxlfFwKZG9teHNsdHN0eWxlc2hlZXRfcmVzdWx0X2R1bXBfbWVtfGRvdG5ldHxkb3RuZXRfbG9hZHxkb3VibGV2YWx8ZWFjaHxlYXN0ZXJfZGF0ZXxlYXN0ZXJfZGF5c3xlY2hvfGVtcHR5fGVtcHR5aXRlcmF0b3J8XAplbmNoYW50X2Jyb2tlcl9kZXNjcmliZXxlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0c3xlbmNoYW50X2Jyb2tlcl9mcmVlfGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdHxlbmNoYW50X2Jyb2tlcl9nZXRfZXJyb3J8XAplbmNoYW50X2Jyb2tlcl9pbml0fGVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHN8ZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0fGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfcHdsX2RpY3R8ZW5jaGFudF9icm9rZXJfc2V0X29yZGVyaW5nfFwKZW5jaGFudF9kaWN0X2FkZF90b19wZXJzb25hbHxlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb258ZW5jaGFudF9kaWN0X2NoZWNrfGVuY2hhbnRfZGljdF9kZXNjcmliZXxlbmNoYW50X2RpY3RfZ2V0X2Vycm9yfFwKZW5jaGFudF9kaWN0X2lzX2luX3Nlc3Npb258ZW5jaGFudF9kaWN0X3F1aWNrX2NoZWNrfGVuY2hhbnRfZGljdF9zdG9yZV9yZXBsYWNlbWVudHxlbmNoYW50X2RpY3Rfc3VnZ2VzdHxlbmR8ZXJlZ3xlcmVnX3JlcGxhY2V8ZXJlZ2l8XAplcmVnaV9yZXBsYWNlfGVycm9yX2dldF9sYXN0fGVycm9yX2xvZ3xlcnJvcl9yZXBvcnRpbmd8ZXJyb3JleGNlcHRpb258ZXNjYXBlc2hlbGxhcmd8ZXNjYXBlc2hlbGxjbWR8ZXZhbHxldmVudF9hZGR8ZXZlbnRfYmFzZV9mcmVlfFwKZXZlbnRfYmFzZV9sb29wfGV2ZW50X2Jhc2VfbG9vcGJyZWFrfGV2ZW50X2Jhc2VfbG9vcGV4aXR8ZXZlbnRfYmFzZV9uZXd8ZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0fGV2ZW50X2Jhc2Vfc2V0fGV2ZW50X2J1ZmZlcl9iYXNlX3NldHxcCmV2ZW50X2J1ZmZlcl9kaXNhYmxlfGV2ZW50X2J1ZmZlcl9lbmFibGV8ZXZlbnRfYnVmZmVyX2ZkX3NldHxldmVudF9idWZmZXJfZnJlZXxldmVudF9idWZmZXJfbmV3fGV2ZW50X2J1ZmZlcl9wcmlvcml0eV9zZXR8XApldmVudF9idWZmZXJfcmVhZHxldmVudF9idWZmZXJfc2V0X2NhbGxiYWNrfGV2ZW50X2J1ZmZlcl90aW1lb3V0X3NldHxldmVudF9idWZmZXJfd2F0ZXJtYXJrX3NldHxldmVudF9idWZmZXJfd3JpdGV8ZXZlbnRfZGVsfGV2ZW50X2ZyZWV8XApldmVudF9uZXd8ZXZlbnRfc2V0fGV4Y2VwdGlvbnxleGVjfGV4aWZfaW1hZ2V0eXBlfGV4aWZfcmVhZF9kYXRhfGV4aWZfdGFnbmFtZXxleGlmX3RodW1ibmFpbHxleGl0fGV4cHxleHBlY3RfZXhwZWN0bHxleHBlY3RfcG9wZW58ZXhwbG9kZXxcCmV4cG0xfGV4cG9ydHxleHBvcnR8ZXh0ZW5zaW9uX2xvYWRlZHxleHRyYWN0fGV6bWxtX2hhc2h8ZmFtX2NhbmNlbF9tb25pdG9yfGZhbV9jbG9zZXxmYW1fbW9uaXRvcl9jb2xsZWN0aW9ufGZhbV9tb25pdG9yX2RpcmVjdG9yeXxcCmZhbV9tb25pdG9yX2ZpbGV8ZmFtX25leHRfZXZlbnR8ZmFtX29wZW58ZmFtX3BlbmRpbmd8ZmFtX3Jlc3VtZV9tb25pdG9yfGZhbV9zdXNwZW5kX21vbml0b3J8ZmJzcWxfYWZmZWN0ZWRfcm93c3xmYnNxbF9hdXRvY29tbWl0fFwKZmJzcWxfYmxvYl9zaXplfGZic3FsX2NoYW5nZV91c2VyfGZic3FsX2Nsb2Jfc2l6ZXxmYnNxbF9jbG9zZXxmYnNxbF9jb21taXR8ZmJzcWxfY29ubmVjdHxmYnNxbF9jcmVhdGVfYmxvYnxmYnNxbF9jcmVhdGVfY2xvYnxcCmZic3FsX2NyZWF0ZV9kYnxmYnNxbF9kYXRhX3NlZWt8ZmJzcWxfZGF0YWJhc2V8ZmJzcWxfZGF0YWJhc2VfcGFzc3dvcmR8ZmJzcWxfZGJfcXVlcnl8ZmJzcWxfZGJfc3RhdHVzfGZic3FsX2Ryb3BfZGJ8ZmJzcWxfZXJybm98XApmYnNxbF9lcnJvcnxmYnNxbF9mZXRjaF9hcnJheXxmYnNxbF9mZXRjaF9hc3NvY3xmYnNxbF9mZXRjaF9maWVsZHxmYnNxbF9mZXRjaF9sZW5ndGhzfGZic3FsX2ZldGNoX29iamVjdHxmYnNxbF9mZXRjaF9yb3d8XApmYnNxbF9maWVsZF9mbGFnc3xmYnNxbF9maWVsZF9sZW58ZmJzcWxfZmllbGRfbmFtZXxmYnNxbF9maWVsZF9zZWVrfGZic3FsX2ZpZWxkX3RhYmxlfGZic3FsX2ZpZWxkX3R5cGV8ZmJzcWxfZnJlZV9yZXN1bHR8XApmYnNxbF9nZXRfYXV0b3N0YXJ0X2luZm98ZmJzcWxfaG9zdG5hbWV8ZmJzcWxfaW5zZXJ0X2lkfGZic3FsX2xpc3RfZGJzfGZic3FsX2xpc3RfZmllbGRzfGZic3FsX2xpc3RfdGFibGVzfGZic3FsX25leHRfcmVzdWx0fFwKZmJzcWxfbnVtX2ZpZWxkc3xmYnNxbF9udW1fcm93c3xmYnNxbF9wYXNzd29yZHxmYnNxbF9wY29ubmVjdHxmYnNxbF9xdWVyeXxmYnNxbF9yZWFkX2Jsb2J8ZmJzcWxfcmVhZF9jbG9ifGZic3FsX3Jlc3VsdHxmYnNxbF9yb2xsYmFja3xcCmZic3FsX3Jvd3NfZmV0Y2hlZHxmYnNxbF9zZWxlY3RfZGJ8ZmJzcWxfc2V0X2NoYXJhY3RlcnNldHxmYnNxbF9zZXRfbG9iX21vZGV8ZmJzcWxfc2V0X3Bhc3N3b3JkfGZic3FsX3NldF90cmFuc2FjdGlvbnxmYnNxbF9zdGFydF9kYnxcCmZic3FsX3N0b3BfZGJ8ZmJzcWxfdGFibGVfbmFtZXxmYnNxbF90YWJsZW5hbWV8ZmJzcWxfdXNlcm5hbWV8ZmJzcWxfd2FybmluZ3N8ZmNsb3NlfGZkZl9hZGRfZG9jX2phdmFzY3JpcHR8ZmRmX2FkZF90ZW1wbGF0ZXxmZGZfY2xvc2V8XApmZGZfY3JlYXRlfGZkZl9lbnVtX3ZhbHVlc3xmZGZfZXJybm98ZmRmX2Vycm9yfGZkZl9nZXRfYXB8ZmRmX2dldF9hdHRhY2htZW50fGZkZl9nZXRfZW5jb2Rpbmd8ZmRmX2dldF9maWxlfGZkZl9nZXRfZmxhZ3N8ZmRmX2dldF9vcHR8XApmZGZfZ2V0X3N0YXR1c3xmZGZfZ2V0X3ZhbHVlfGZkZl9nZXRfdmVyc2lvbnxmZGZfaGVhZGVyfGZkZl9uZXh0X2ZpZWxkX25hbWV8ZmRmX29wZW58ZmRmX29wZW5fc3RyaW5nfGZkZl9yZW1vdmVfaXRlbXxmZGZfc2F2ZXxcCmZkZl9zYXZlX3N0cmluZ3xmZGZfc2V0X2FwfGZkZl9zZXRfZW5jb2Rpbmd8ZmRmX3NldF9maWxlfGZkZl9zZXRfZmxhZ3N8ZmRmX3NldF9qYXZhc2NyaXB0X2FjdGlvbnxmZGZfc2V0X29uX2ltcG9ydF9qYXZhc2NyaXB0fGZkZl9zZXRfb3B0fFwKZmRmX3NldF9zdGF0dXN8ZmRmX3NldF9zdWJtaXRfZm9ybV9hY3Rpb258ZmRmX3NldF90YXJnZXRfZnJhbWV8ZmRmX3NldF92YWx1ZXxmZGZfc2V0X3ZlcnNpb258ZmVvZnxmZmx1c2h8ZmdldGN8ZmdldGNzdnxmZ2V0c3xmZ2V0c3N8ZmlsZXxcCmZpbGVfZXhpc3RzfGZpbGVfZ2V0X2NvbnRlbnRzfGZpbGVfcHV0X2NvbnRlbnRzfGZpbGVhdGltZXxmaWxlY3RpbWV8ZmlsZWdyb3VwfGZpbGVpbm9kZXxmaWxlbXRpbWV8ZmlsZW93bmVyfGZpbGVwZXJtc3xmaWxlcHJvfFwKZmlsZXByb19maWVsZGNvdW50fGZpbGVwcm9fZmllbGRuYW1lfGZpbGVwcm9fZmllbGR0eXBlfGZpbGVwcm9fZmllbGR3aWR0aHxmaWxlcHJvX3JldHJpZXZlfGZpbGVwcm9fcm93Y291bnR8ZmlsZXNpemV8ZmlsZXN5c3RlbWl0ZXJhdG9yfFwKZmlsZXR5cGV8ZmlsdGVyX2hhc192YXJ8ZmlsdGVyX2lkfGZpbHRlcl9pbnB1dHxmaWx0ZXJfaW5wdXRfYXJyYXl8ZmlsdGVyX2xpc3R8ZmlsdGVyX3ZhcnxmaWx0ZXJfdmFyX2FycmF5fGZpbHRlcml0ZXJhdG9yfGZpbmZvX2J1ZmZlcnxcCmZpbmZvX2Nsb3NlfGZpbmZvX2ZpbGV8ZmluZm9fb3BlbnxmaW5mb19zZXRfZmxhZ3N8ZmxvYXR2YWx8ZmxvY2t8Zmxvb3J8Zmx1c2h8Zm1vZHxmbm1hdGNofGZvcGVufGZvcndhcmRfc3RhdGljX2NhbGx8XApmb3J3YXJkX3N0YXRpY19jYWxsX2FycmF5fGZwYXNzdGhydXxmcHJpbnRmfGZwdXRjc3Z8ZnB1dHN8ZnJlYWR8ZnJlbmNodG9qZHxmcmliaWRpX2xvZzJ2aXN8ZnNjYW5mfGZzZWVrfGZzb2Nrb3Blbnxmc3RhdHxmdGVsbHxmdG9rfFwKZnRwX2FsbG9jfGZ0cF9jZHVwfGZ0cF9jaGRpcnxmdHBfY2htb2R8ZnRwX2Nsb3NlfGZ0cF9jb25uZWN0fGZ0cF9kZWxldGV8ZnRwX2V4ZWN8ZnRwX2ZnZXR8ZnRwX2ZwdXR8ZnRwX2dldHxmdHBfZ2V0X29wdGlvbnxmdHBfbG9naW58XApmdHBfbWR0bXxmdHBfbWtkaXJ8ZnRwX25iX2NvbnRpbnVlfGZ0cF9uYl9mZ2V0fGZ0cF9uYl9mcHV0fGZ0cF9uYl9nZXR8ZnRwX25iX3B1dHxmdHBfbmxpc3R8ZnRwX3Bhc3Z8ZnRwX3B1dHxmdHBfcHdkfGZ0cF9xdWl0fGZ0cF9yYXd8XApmdHBfcmF3bGlzdHxmdHBfcmVuYW1lfGZ0cF9ybWRpcnxmdHBfc2V0X29wdGlvbnxmdHBfc2l0ZXxmdHBfc2l6ZXxmdHBfc3NsX2Nvbm5lY3R8ZnRwX3N5c3R5cGV8ZnRydW5jYXRlfGZ1bmNfZ2V0X2FyZ3xmdW5jX2dldF9hcmdzfFwKZnVuY19udW1fYXJnc3xmdW5jdGlvbl9leGlzdHN8ZndyaXRlfGdjX2NvbGxlY3RfY3ljbGVzfGdjX2Rpc2FibGV8Z2NfZW5hYmxlfGdjX2VuYWJsZWR8Z2RfaW5mb3xnZWFybWFuY2xpZW50fGdlYXJtYW5qb2J8Z2Vhcm1hbnRhc2t8XApnZWFybWFud29ya2VyfGdlb2lwX2NvbnRpbmVudF9jb2RlX2J5X25hbWV8Z2VvaXBfY291bnRyeV9jb2RlM19ieV9uYW1lfGdlb2lwX2NvdW50cnlfY29kZV9ieV9uYW1lfGdlb2lwX2NvdW50cnlfbmFtZV9ieV9uYW1lfFwKZ2VvaXBfZGF0YWJhc2VfaW5mb3xnZW9pcF9kYl9hdmFpbHxnZW9pcF9kYl9maWxlbmFtZXxnZW9pcF9kYl9nZXRfYWxsX2luZm98Z2VvaXBfaWRfYnlfbmFtZXxnZW9pcF9pc3BfYnlfbmFtZXxnZW9pcF9vcmdfYnlfbmFtZXxcCmdlb2lwX3JlY29yZF9ieV9uYW1lfGdlb2lwX3JlZ2lvbl9ieV9uYW1lfGdlb2lwX3JlZ2lvbl9uYW1lX2J5X2NvZGV8Z2VvaXBfdGltZV96b25lX2J5X2NvdW50cnlfYW5kX3JlZ2lvbnxnZXRNZXRhfGdldE5hbWVkfGdldFZhbHVlfFwKZ2V0X2Jyb3dzZXJ8Z2V0X2NhbGxlZF9jbGFzc3xnZXRfY2ZnX3ZhcnxnZXRfY2xhc3N8Z2V0X2NsYXNzX21ldGhvZHN8Z2V0X2NsYXNzX3ZhcnN8Z2V0X2N1cnJlbnRfdXNlcnxnZXRfZGVjbGFyZWRfY2xhc3Nlc3xcCmdldF9kZWNsYXJlZF9pbnRlcmZhY2VzfGdldF9kZWNsYXJlZF90cmFpdHN8Z2V0X2RlZmluZWRfY29uc3RhbnRzfGdldF9kZWZpbmVkX2Z1bmN0aW9uc3xnZXRfZGVmaW5lZF92YXJzfGdldF9leHRlbnNpb25fZnVuY3N8Z2V0X2hlYWRlcnN8XApnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZXxnZXRfaW5jbHVkZV9wYXRofGdldF9pbmNsdWRlZF9maWxlc3xnZXRfbG9hZGVkX2V4dGVuc2lvbnN8Z2V0X21hZ2ljX3F1b3Rlc19ncGN8Z2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfFwKZ2V0X21ldGFfdGFnc3xnZXRfb2JqZWN0X3ZhcnN8Z2V0X3BhcmVudF9jbGFzc3xnZXRfcmVxdWlyZWRfZmlsZXN8Z2V0X3Jlc291cmNlX3R5cGV8Z2V0YWxsaGVhZGVyc3xnZXRjb25zdGFudHxnZXRjb25zdGFudHN8Z2V0Y29uc3RydWN0b3J8XApnZXRjd2R8Z2V0ZGF0ZXxnZXRkZWZhdWx0cHJvcGVydGllc3xnZXRkb2Njb21tZW50fGdldGVuZGxpbmV8Z2V0ZW52fGdldGV4dGVuc2lvbnxnZXRleHRlbnNpb25uYW1lfGdldGZpbGVuYW1lfGdldGhvc3RieWFkZHJ8Z2V0aG9zdGJ5bmFtZXxcCmdldGhvc3RieW5hbWVsfGdldGhvc3RuYW1lfGdldGltYWdlc2l6ZXxnZXRpbnRlcmZhY2VuYW1lc3xnZXRpbnRlcmZhY2VzfGdldGxhc3Rtb2R8Z2V0bWV0aG9kfGdldG1ldGhvZHN8Z2V0bW9kaWZpZXJzfGdldG14cnJ8Z2V0bXlnaWR8XApnZXRteWlub2RlfGdldG15cGlkfGdldG15dWlkfGdldG5hbWV8Z2V0bmFtZXNwYWNlbmFtZXxnZXRvcHR8Z2V0cGFyZW50Y2xhc3N8Z2V0cHJvcGVydGllc3xnZXRwcm9wZXJ0eXxnZXRwcm90b2J5bmFtZXxnZXRwcm90b2J5bnVtYmVyfFwKZ2V0cmFuZG1heHxnZXRydXNhZ2V8Z2V0c2VydmJ5bmFtZXxnZXRzZXJ2Ynlwb3J0fGdldHNob3J0bmFtZXxnZXRzdGFydGxpbmV8Z2V0c3RhdGljcHJvcGVydGllc3xnZXRzdGF0aWNwcm9wZXJ0eXZhbHVlfGdldHRleHR8XApnZXR0aW1lb2ZkYXl8Z2V0dHlwZXxnbG9ifGdsb2JpdGVyYXRvcnxnbWFnaWNrfGdtYWdpY2tkcmF3fGdtYWdpY2twaXhlbHxnbWRhdGV8Z21ta3RpbWV8Z21wX2Fic3xnbXBfYWRkfGdtcF9hbmR8Z21wX2NscmJpdHxnbXBfY21wfFwKZ21wX2NvbXxnbXBfZGl2fGdtcF9kaXZfcXxnbXBfZGl2X3FyfGdtcF9kaXZfcnxnbXBfZGl2ZXhhY3R8Z21wX2ZhY3R8Z21wX2djZHxnbXBfZ2NkZXh0fGdtcF9oYW1kaXN0fGdtcF9pbml0fGdtcF9pbnR2YWx8Z21wX2ludmVydHxcCmdtcF9qYWNvYml8Z21wX2xlZ2VuZHJlfGdtcF9tb2R8Z21wX211bHxnbXBfbmVnfGdtcF9uZXh0cHJpbWV8Z21wX29yfGdtcF9wZXJmZWN0X3NxdWFyZXxnbXBfcG9wY291bnR8Z21wX3Bvd3xnbXBfcG93bXxnbXBfcHJvYl9wcmltZXxcCmdtcF9yYW5kb218Z21wX3NjYW4wfGdtcF9zY2FuMXxnbXBfc2V0Yml0fGdtcF9zaWdufGdtcF9zcXJ0fGdtcF9zcXJ0cmVtfGdtcF9zdHJ2YWx8Z21wX3N1YnxnbXBfdGVzdGJpdHxnbXBfeG9yfGdtc3RyZnRpbWV8XApnbnVwZ19hZGRkZWNyeXB0a2V5fGdudXBnX2FkZGVuY3J5cHRrZXl8Z251cGdfYWRkc2lnbmtleXxnbnVwZ19jbGVhcmRlY3J5cHRrZXlzfGdudXBnX2NsZWFyZW5jcnlwdGtleXN8Z251cGdfY2xlYXJzaWdua2V5c3xnbnVwZ19kZWNyeXB0fFwKZ251cGdfZGVjcnlwdHZlcmlmeXxnbnVwZ19lbmNyeXB0fGdudXBnX2VuY3J5cHRzaWdufGdudXBnX2V4cG9ydHxnbnVwZ19nZXRlcnJvcnxnbnVwZ19nZXRwcm90b2NvbHxnbnVwZ19pbXBvcnR8Z251cGdfaW5pdHxnbnVwZ19rZXlpbmZvfFwKZ251cGdfc2V0YXJtb3J8Z251cGdfc2V0ZXJyb3Jtb2RlfGdudXBnX3NldHNpZ25tb2RlfGdudXBnX3NpZ258Z251cGdfdmVyaWZ5fGdvcGhlcl9wYXJzZWRpcnxncmFwaGVtZV9leHRyYWN0fGdyYXBoZW1lX3N0cmlwb3N8XApncmFwaGVtZV9zdHJpc3RyfGdyYXBoZW1lX3N0cmxlbnxncmFwaGVtZV9zdHJwb3N8Z3JhcGhlbWVfc3Rycmlwb3N8Z3JhcGhlbWVfc3RycnBvc3xncmFwaGVtZV9zdHJzdHJ8Z3JhcGhlbWVfc3Vic3RyfGdyZWdvcmlhbnRvamR8XApndXBucF9jb250ZXh0X2dldF9ob3N0X2lwfGd1cG5wX2NvbnRleHRfZ2V0X3BvcnR8Z3VwbnBfY29udGV4dF9nZXRfc3Vic2NyaXB0aW9uX3RpbWVvdXR8Z3VwbnBfY29udGV4dF9ob3N0X3BhdGh8Z3VwbnBfY29udGV4dF9uZXd8XApndXBucF9jb250ZXh0X3NldF9zdWJzY3JpcHRpb25fdGltZW91dHxndXBucF9jb250ZXh0X3RpbWVvdXRfYWRkfGd1cG5wX2NvbnRleHRfdW5ob3N0X3BhdGh8Z3VwbnBfY29udHJvbF9wb2ludF9icm93c2Vfc3RhcnR8XApndXBucF9jb250cm9sX3BvaW50X2Jyb3dzZV9zdG9wfGd1cG5wX2NvbnRyb2xfcG9pbnRfY2FsbGJhY2tfc2V0fGd1cG5wX2NvbnRyb2xfcG9pbnRfbmV3fGd1cG5wX2RldmljZV9hY3Rpb25fY2FsbGJhY2tfc2V0fFwKZ3VwbnBfZGV2aWNlX2luZm9fZ2V0fGd1cG5wX2RldmljZV9pbmZvX2dldF9zZXJ2aWNlfGd1cG5wX3Jvb3RfZGV2aWNlX2dldF9hdmFpbGFibGV8Z3VwbnBfcm9vdF9kZXZpY2VfZ2V0X3JlbGF0aXZlX2xvY2F0aW9ufFwKZ3VwbnBfcm9vdF9kZXZpY2VfbmV3fGd1cG5wX3Jvb3RfZGV2aWNlX3NldF9hdmFpbGFibGV8Z3VwbnBfcm9vdF9kZXZpY2Vfc3RhcnR8Z3VwbnBfcm9vdF9kZXZpY2Vfc3RvcHxndXBucF9zZXJ2aWNlX2FjdGlvbl9nZXR8XApndXBucF9zZXJ2aWNlX2FjdGlvbl9yZXR1cm58Z3VwbnBfc2VydmljZV9hY3Rpb25fcmV0dXJuX2Vycm9yfGd1cG5wX3NlcnZpY2VfYWN0aW9uX3NldHxndXBucF9zZXJ2aWNlX2ZyZWV6ZV9ub3RpZnl8Z3VwbnBfc2VydmljZV9pbmZvX2dldHxcCmd1cG5wX3NlcnZpY2VfaW5mb19nZXRfaW50cm9zcGVjdGlvbnxndXBucF9zZXJ2aWNlX2ludHJvc3BlY3Rpb25fZ2V0X3N0YXRlX3ZhcmlhYmxlfGd1cG5wX3NlcnZpY2Vfbm90aWZ5fGd1cG5wX3NlcnZpY2VfcHJveHlfYWN0aW9uX2dldHxcCmd1cG5wX3NlcnZpY2VfcHJveHlfYWN0aW9uX3NldHxndXBucF9zZXJ2aWNlX3Byb3h5X2FkZF9ub3RpZnl8Z3VwbnBfc2VydmljZV9wcm94eV9jYWxsYmFja19zZXR8Z3VwbnBfc2VydmljZV9wcm94eV9nZXRfc3Vic2NyaWJlZHxcCmd1cG5wX3NlcnZpY2VfcHJveHlfcmVtb3ZlX25vdGlmeXxndXBucF9zZXJ2aWNlX3Byb3h5X3NldF9zdWJzY3JpYmVkfGd1cG5wX3NlcnZpY2VfdGhhd19ub3RpZnl8Z3pjbG9zZXxnemNvbXByZXNzfGd6ZGVjb2RlfGd6ZGVmbGF0ZXxcCmd6ZW5jb2RlfGd6ZW9mfGd6ZmlsZXxnemdldGN8Z3pnZXRzfGd6Z2V0c3N8Z3ppbmZsYXRlfGd6b3BlbnxnenBhc3N0aHJ1fGd6cHV0c3xnenJlYWR8Z3pyZXdpbmR8Z3pzZWVrfGd6dGVsbHxnenVuY29tcHJlc3N8Z3p3cml0ZXxcCmhhbHRfY29tcGlsZXJ8aGFydWFubm90YXRpb258aGFydWFubm90YXRpb25fc2V0Ym9yZGVyc3R5bGV8aGFydWFubm90YXRpb25fc2V0aGlnaGxpZ2h0bW9kZXxoYXJ1YW5ub3RhdGlvbl9zZXRpY29ufFwKaGFydWFubm90YXRpb25fc2V0b3BlbmVkfGhhcnVkZXN0aW5hdGlvbnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0fGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRifGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRiaHxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0YnZ8XApoYXJ1ZGVzdGluYXRpb25fc2V0Zml0aHxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0cnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0dnxoYXJ1ZGVzdGluYXRpb25fc2V0eHl6fGhhcnVkb2N8aGFydWRvY19hZGRwYWdlfFwKaGFydWRvY19hZGRwYWdlbGFiZWx8aGFydWRvY19jb25zdHJ1Y3R8aGFydWRvY19jcmVhdGVvdXRsaW5lfGhhcnVkb2NfZ2V0Y3VycmVudGVuY29kZXJ8aGFydWRvY19nZXRjdXJyZW50cGFnZXxoYXJ1ZG9jX2dldGVuY29kZXJ8XApoYXJ1ZG9jX2dldGZvbnR8aGFydWRvY19nZXRpbmZvYXR0cnxoYXJ1ZG9jX2dldHBhZ2VsYXlvdXR8aGFydWRvY19nZXRwYWdlbW9kZXxoYXJ1ZG9jX2dldHN0cmVhbXNpemV8aGFydWRvY19pbnNlcnRwYWdlfGhhcnVkb2NfbG9hZGpwZWd8XApoYXJ1ZG9jX2xvYWRwbmd8aGFydWRvY19sb2FkcmF3fGhhcnVkb2NfbG9hZHR0Y3xoYXJ1ZG9jX2xvYWR0dGZ8aGFydWRvY19sb2FkdHlwZTF8aGFydWRvY19vdXRwdXR8aGFydWRvY19yZWFkZnJvbXN0cmVhbXxcCmhhcnVkb2NfcmVzZXRlcnJvcnxoYXJ1ZG9jX3Jlc2V0c3RyZWFtfGhhcnVkb2Nfc2F2ZXxoYXJ1ZG9jX3NhdmV0b3N0cmVhbXxoYXJ1ZG9jX3NldGNvbXByZXNzaW9ubW9kZXxoYXJ1ZG9jX3NldGN1cnJlbnRlbmNvZGVyfFwKaGFydWRvY19zZXRlbmNyeXB0aW9ubW9kZXxoYXJ1ZG9jX3NldGluZm9hdHRyfGhhcnVkb2Nfc2V0aW5mb2RhdGVhdHRyfGhhcnVkb2Nfc2V0b3BlbmFjdGlvbnxoYXJ1ZG9jX3NldHBhZ2VsYXlvdXR8aGFydWRvY19zZXRwYWdlbW9kZXxcCmhhcnVkb2Nfc2V0cGFnZXNjb25maWd1cmF0aW9ufGhhcnVkb2Nfc2V0cGFzc3dvcmR8aGFydWRvY19zZXRwZXJtaXNzaW9ufGhhcnVkb2NfdXNlY25zZW5jb2RpbmdzfGhhcnVkb2NfdXNlY25zZm9udHN8XApoYXJ1ZG9jX3VzZWNudGVuY29kaW5nc3xoYXJ1ZG9jX3VzZWNudGZvbnRzfGhhcnVkb2NfdXNlanBlbmNvZGluZ3N8aGFydWRvY191c2VqcGZvbnRzfGhhcnVkb2NfdXNla3JlbmNvZGluZ3N8aGFydWRvY191c2VrcmZvbnRzfFwKaGFydWVuY29kZXJ8aGFydWVuY29kZXJfZ2V0Ynl0ZXR5cGV8aGFydWVuY29kZXJfZ2V0dHlwZXxoYXJ1ZW5jb2Rlcl9nZXR1bmljb2RlfGhhcnVlbmNvZGVyX2dldHdyaXRpbmdtb2RlfGhhcnVleGNlcHRpb258aGFydWZvbnR8XApoYXJ1Zm9udF9nZXRhc2NlbnR8aGFydWZvbnRfZ2V0Y2FwaGVpZ2h0fGhhcnVmb250X2dldGRlc2NlbnR8aGFydWZvbnRfZ2V0ZW5jb2RpbmduYW1lfGhhcnVmb250X2dldGZvbnRuYW1lfGhhcnVmb250X2dldHRleHR3aWR0aHxcCmhhcnVmb250X2dldHVuaWNvZGV3aWR0aHxoYXJ1Zm9udF9nZXR4aGVpZ2h0fGhhcnVmb250X21lYXN1cmV0ZXh0fGhhcnVpbWFnZXxoYXJ1aW1hZ2VfZ2V0Yml0c3BlcmNvbXBvbmVudHxoYXJ1aW1hZ2VfZ2V0Y29sb3JzcGFjZXxcCmhhcnVpbWFnZV9nZXRoZWlnaHR8aGFydWltYWdlX2dldHNpemV8aGFydWltYWdlX2dldHdpZHRofGhhcnVpbWFnZV9zZXRjb2xvcm1hc2t8aGFydWltYWdlX3NldG1hc2tpbWFnZXxoYXJ1b3V0bGluZXxcCmhhcnVvdXRsaW5lX3NldGRlc3RpbmF0aW9ufGhhcnVvdXRsaW5lX3NldG9wZW5lZHxoYXJ1cGFnZXxoYXJ1cGFnZV9hcmN8aGFydXBhZ2VfYmVnaW50ZXh0fGhhcnVwYWdlX2NpcmNsZXxoYXJ1cGFnZV9jbG9zZXBhdGh8XApoYXJ1cGFnZV9jb25jYXR8aGFydXBhZ2VfY3JlYXRlZGVzdGluYXRpb258aGFydXBhZ2VfY3JlYXRlbGlua2Fubm90YXRpb258aGFydXBhZ2VfY3JlYXRldGV4dGFubm90YXRpb258aGFydXBhZ2VfY3JlYXRldXJsYW5ub3RhdGlvbnxcCmhhcnVwYWdlX2N1cnZldG98aGFydXBhZ2VfY3VydmV0bzJ8aGFydXBhZ2VfY3VydmV0bzN8aGFydXBhZ2VfZHJhd2ltYWdlfGhhcnVwYWdlX2VsbGlwc2V8aGFydXBhZ2VfZW5kcGF0aHxoYXJ1cGFnZV9lbmR0ZXh0fFwKaGFydXBhZ2VfZW9maWxsfGhhcnVwYWdlX2VvZmlsbHN0cm9rZXxoYXJ1cGFnZV9maWxsfGhhcnVwYWdlX2ZpbGxzdHJva2V8aGFydXBhZ2VfZ2V0Y2hhcnNwYWNlfGhhcnVwYWdlX2dldGNteWtmaWxsfGhhcnVwYWdlX2dldGNteWtzdHJva2V8XApoYXJ1cGFnZV9nZXRjdXJyZW50Zm9udHxoYXJ1cGFnZV9nZXRjdXJyZW50Zm9udHNpemV8aGFydXBhZ2VfZ2V0Y3VycmVudHBvc3xoYXJ1cGFnZV9nZXRjdXJyZW50dGV4dHBvc3xoYXJ1cGFnZV9nZXRkYXNofFwKaGFydXBhZ2VfZ2V0ZmlsbGluZ2NvbG9yc3BhY2V8aGFydXBhZ2VfZ2V0ZmxhdG5lc3N8aGFydXBhZ2VfZ2V0Z21vZGV8aGFydXBhZ2VfZ2V0Z3JheWZpbGx8aGFydXBhZ2VfZ2V0Z3JheXN0cm9rZXxoYXJ1cGFnZV9nZXRoZWlnaHR8XApoYXJ1cGFnZV9nZXRob3Jpem9udGFsc2NhbGluZ3xoYXJ1cGFnZV9nZXRsaW5lY2FwfGhhcnVwYWdlX2dldGxpbmVqb2lufGhhcnVwYWdlX2dldGxpbmV3aWR0aHxoYXJ1cGFnZV9nZXRtaXRlcmxpbWl0fGhhcnVwYWdlX2dldHJnYmZpbGx8XApoYXJ1cGFnZV9nZXRyZ2JzdHJva2V8aGFydXBhZ2VfZ2V0c3Ryb2tpbmdjb2xvcnNwYWNlfGhhcnVwYWdlX2dldHRleHRsZWFkaW5nfGhhcnVwYWdlX2dldHRleHRtYXRyaXh8aGFydXBhZ2VfZ2V0dGV4dHJlbmRlcmluZ21vZGV8XApoYXJ1cGFnZV9nZXR0ZXh0cmlzZXxoYXJ1cGFnZV9nZXR0ZXh0d2lkdGh8aGFydXBhZ2VfZ2V0dHJhbnNtYXRyaXh8aGFydXBhZ2VfZ2V0d2lkdGh8aGFydXBhZ2VfZ2V0d29yZHNwYWNlfGhhcnVwYWdlX2xpbmV0b3xcCmhhcnVwYWdlX21lYXN1cmV0ZXh0fGhhcnVwYWdlX21vdmV0ZXh0cG9zfGhhcnVwYWdlX21vdmV0b3xoYXJ1cGFnZV9tb3ZldG9uZXh0bGluZXxoYXJ1cGFnZV9yZWN0YW5nbGV8aGFydXBhZ2Vfc2V0Y2hhcnNwYWNlfFwKaGFydXBhZ2Vfc2V0Y215a2ZpbGx8aGFydXBhZ2Vfc2V0Y215a3N0cm9rZXxoYXJ1cGFnZV9zZXRkYXNofGhhcnVwYWdlX3NldGZsYXRuZXNzfGhhcnVwYWdlX3NldGZvbnRhbmRzaXplfGhhcnVwYWdlX3NldGdyYXlmaWxsfFwKaGFydXBhZ2Vfc2V0Z3JheXN0cm9rZXxoYXJ1cGFnZV9zZXRoZWlnaHR8aGFydXBhZ2Vfc2V0aG9yaXpvbnRhbHNjYWxpbmd8aGFydXBhZ2Vfc2V0bGluZWNhcHxoYXJ1cGFnZV9zZXRsaW5lam9pbnxoYXJ1cGFnZV9zZXRsaW5ld2lkdGh8XApoYXJ1cGFnZV9zZXRtaXRlcmxpbWl0fGhhcnVwYWdlX3NldHJnYmZpbGx8aGFydXBhZ2Vfc2V0cmdic3Ryb2tlfGhhcnVwYWdlX3NldHJvdGF0ZXxoYXJ1cGFnZV9zZXRzaXplfGhhcnVwYWdlX3NldHNsaWRlc2hvd3xcCmhhcnVwYWdlX3NldHRleHRsZWFkaW5nfGhhcnVwYWdlX3NldHRleHRtYXRyaXh8aGFydXBhZ2Vfc2V0dGV4dHJlbmRlcmluZ21vZGV8aGFydXBhZ2Vfc2V0dGV4dHJpc2V8aGFydXBhZ2Vfc2V0d2lkdGh8aGFydXBhZ2Vfc2V0d29yZHNwYWNlfFwKaGFydXBhZ2Vfc2hvd3RleHR8aGFydXBhZ2Vfc2hvd3RleHRuZXh0bGluZXxoYXJ1cGFnZV9zdHJva2V8aGFydXBhZ2VfdGV4dG91dHxoYXJ1cGFnZV90ZXh0cmVjdHxoYXNjb25zdGFudHxoYXNofGhhc2hfYWxnb3N8aGFzaF9jb3B5fFwKaGFzaF9maWxlfGhhc2hfZmluYWx8aGFzaF9obWFjfGhhc2hfaG1hY19maWxlfGhhc2hfaW5pdHxoYXNoX3VwZGF0ZXxoYXNoX3VwZGF0ZV9maWxlfGhhc2hfdXBkYXRlX3N0cmVhbXxoYXNtZXRob2R8aGFzcHJvcGVydHl8aGVhZGVyfFwKaGVhZGVyX3JlZ2lzdGVyX2NhbGxiYWNrfGhlYWRlcl9yZW1vdmV8aGVhZGVyc19saXN0fGhlYWRlcnNfc2VudHxoZWJyZXZ8aGVicmV2Y3xoZXgyYmlufGhleGRlY3xoaWdobGlnaHRfZmlsZXxoaWdobGlnaHRfc3RyaW5nfFwKaHRtbF9lbnRpdHlfZGVjb2RlfGh0bWxlbnRpdGllc3xodG1sc3BlY2lhbGNoYXJzfGh0bWxzcGVjaWFsY2hhcnNfZGVjb2RlfGh0dHBfYnVpbGRfY29va2llfGh0dHBfYnVpbGRfcXVlcnl8aHR0cF9idWlsZF9zdHJ8aHR0cF9idWlsZF91cmx8XApodHRwX2NhY2hlX2V0YWd8aHR0cF9jYWNoZV9sYXN0X21vZGlmaWVkfGh0dHBfY2h1bmtlZF9kZWNvZGV8aHR0cF9kYXRlfGh0dHBfZGVmbGF0ZXxodHRwX2dldHxodHRwX2dldF9yZXF1ZXN0X2JvZHl8XApodHRwX2dldF9yZXF1ZXN0X2JvZHlfc3RyZWFtfGh0dHBfZ2V0X3JlcXVlc3RfaGVhZGVyc3xodHRwX2hlYWR8aHR0cF9pbmZsYXRlfGh0dHBfbWF0Y2hfZXRhZ3xodHRwX21hdGNoX21vZGlmaWVkfFwKaHR0cF9tYXRjaF9yZXF1ZXN0X2hlYWRlcnxodHRwX25lZ290aWF0ZV9jaGFyc2V0fGh0dHBfbmVnb3RpYXRlX2NvbnRlbnRfdHlwZXxodHRwX25lZ290aWF0ZV9sYW5ndWFnZXxodHRwX3BhcnNlX2Nvb2tpZXxodHRwX3BhcnNlX2hlYWRlcnN8XApodHRwX3BhcnNlX21lc3NhZ2V8aHR0cF9wYXJzZV9wYXJhbXN8aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY2xlYW58aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY291bnR8aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfaWRlbnR8XApodHRwX3Bvc3RfZGF0YXxodHRwX3Bvc3RfZmllbGRzfGh0dHBfcHV0X2RhdGF8aHR0cF9wdXRfZmlsZXxodHRwX3B1dF9zdHJlYW18aHR0cF9yZWRpcmVjdHxodHRwX3JlcXVlc3R8aHR0cF9yZXF1ZXN0X2JvZHlfZW5jb2RlfFwKaHR0cF9yZXF1ZXN0X21ldGhvZF9leGlzdHN8aHR0cF9yZXF1ZXN0X21ldGhvZF9uYW1lfGh0dHBfcmVxdWVzdF9tZXRob2RfcmVnaXN0ZXJ8aHR0cF9yZXF1ZXN0X21ldGhvZF91bnJlZ2lzdGVyfGh0dHBfcmVzcG9uc2VfY29kZXxcCmh0dHBfc2VuZF9jb250ZW50X2Rpc3Bvc2l0aW9ufGh0dHBfc2VuZF9jb250ZW50X3R5cGV8aHR0cF9zZW5kX2RhdGF8aHR0cF9zZW5kX2ZpbGV8aHR0cF9zZW5kX2xhc3RfbW9kaWZpZWR8aHR0cF9zZW5kX3N0YXR1c3xcCmh0dHBfc2VuZF9zdHJlYW18aHR0cF9zdXBwb3J0fGh0dHBfdGhyb3R0bGV8aHR0cGRlZmxhdGVzdHJlYW18aHR0cGRlZmxhdGVzdHJlYW1fY29uc3RydWN0fGh0dHBkZWZsYXRlc3RyZWFtX2ZhY3Rvcnl8XApodHRwZGVmbGF0ZXN0cmVhbV9maW5pc2h8aHR0cGRlZmxhdGVzdHJlYW1fZmx1c2h8aHR0cGRlZmxhdGVzdHJlYW1fdXBkYXRlfGh0dHBpbmZsYXRlc3RyZWFtfGh0dHBpbmZsYXRlc3RyZWFtX2NvbnN0cnVjdHxcCmh0dHBpbmZsYXRlc3RyZWFtX2ZhY3Rvcnl8aHR0cGluZmxhdGVzdHJlYW1fZmluaXNofGh0dHBpbmZsYXRlc3RyZWFtX2ZsdXNofGh0dHBpbmZsYXRlc3RyZWFtX3VwZGF0ZXxodHRwbWVzc2FnZXxodHRwbWVzc2FnZV9hZGRoZWFkZXJzfFwKaHR0cG1lc3NhZ2VfY29uc3RydWN0fGh0dHBtZXNzYWdlX2RldGFjaHxodHRwbWVzc2FnZV9mYWN0b3J5fGh0dHBtZXNzYWdlX2Zyb21lbnZ8aHR0cG1lc3NhZ2VfZnJvbXN0cmluZ3xodHRwbWVzc2FnZV9nZXRib2R5fFwKaHR0cG1lc3NhZ2VfZ2V0aGVhZGVyfGh0dHBtZXNzYWdlX2dldGhlYWRlcnN8aHR0cG1lc3NhZ2VfZ2V0aHR0cHZlcnNpb258aHR0cG1lc3NhZ2VfZ2V0cGFyZW50bWVzc2FnZXxodHRwbWVzc2FnZV9nZXRyZXF1ZXN0bWV0aG9kfFwKaHR0cG1lc3NhZ2VfZ2V0cmVxdWVzdHVybHxodHRwbWVzc2FnZV9nZXRyZXNwb25zZWNvZGV8aHR0cG1lc3NhZ2VfZ2V0cmVzcG9uc2VzdGF0dXN8aHR0cG1lc3NhZ2VfZ2V0dHlwZXxodHRwbWVzc2FnZV9ndWVzc2NvbnRlbnR0eXBlfFwKaHR0cG1lc3NhZ2VfcHJlcGVuZHxodHRwbWVzc2FnZV9yZXZlcnNlfGh0dHBtZXNzYWdlX3NlbmR8aHR0cG1lc3NhZ2Vfc2V0Ym9keXxodHRwbWVzc2FnZV9zZXRoZWFkZXJzfGh0dHBtZXNzYWdlX3NldGh0dHB2ZXJzaW9ufFwKaHR0cG1lc3NhZ2Vfc2V0cmVxdWVzdG1ldGhvZHxodHRwbWVzc2FnZV9zZXRyZXF1ZXN0dXJsfGh0dHBtZXNzYWdlX3NldHJlc3BvbnNlY29kZXxodHRwbWVzc2FnZV9zZXRyZXNwb25zZXN0YXR1c3xodHRwbWVzc2FnZV9zZXR0eXBlfFwKaHR0cG1lc3NhZ2VfdG9tZXNzYWdldHlwZW9iamVjdHxodHRwbWVzc2FnZV90b3N0cmluZ3xodHRwcXVlcnlzdHJpbmd8aHR0cHF1ZXJ5c3RyaW5nX2NvbnN0cnVjdHxodHRwcXVlcnlzdHJpbmdfZ2V0fGh0dHBxdWVyeXN0cmluZ19tb2R8XApodHRwcXVlcnlzdHJpbmdfc2V0fGh0dHBxdWVyeXN0cmluZ19zaW5nbGV0b258aHR0cHF1ZXJ5c3RyaW5nX3RvYXJyYXl8aHR0cHF1ZXJ5c3RyaW5nX3Rvc3RyaW5nfGh0dHBxdWVyeXN0cmluZ194bGF0ZXxodHRwcmVxdWVzdHxcCmh0dHByZXF1ZXN0X2FkZGNvb2tpZXN8aHR0cHJlcXVlc3RfYWRkaGVhZGVyc3xodHRwcmVxdWVzdF9hZGRwb3N0ZmllbGRzfGh0dHByZXF1ZXN0X2FkZHBvc3RmaWxlfGh0dHByZXF1ZXN0X2FkZHB1dGRhdGF8XApodHRwcmVxdWVzdF9hZGRxdWVyeWRhdGF8aHR0cHJlcXVlc3RfYWRkcmF3cG9zdGRhdGF8aHR0cHJlcXVlc3RfYWRkc3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9jbGVhcmhpc3Rvcnl8aHR0cHJlcXVlc3RfY29uc3RydWN0fFwKaHR0cHJlcXVlc3RfZW5hYmxlY29va2llc3xodHRwcmVxdWVzdF9nZXRjb250ZW50dHlwZXxodHRwcmVxdWVzdF9nZXRjb29raWVzfGh0dHByZXF1ZXN0X2dldGhlYWRlcnN8aHR0cHJlcXVlc3RfZ2V0aGlzdG9yeXxcCmh0dHByZXF1ZXN0X2dldG1ldGhvZHxodHRwcmVxdWVzdF9nZXRvcHRpb25zfGh0dHByZXF1ZXN0X2dldHBvc3RmaWVsZHN8aHR0cHJlcXVlc3RfZ2V0cG9zdGZpbGVzfGh0dHByZXF1ZXN0X2dldHB1dGRhdGF8XApodHRwcmVxdWVzdF9nZXRwdXRmaWxlfGh0dHByZXF1ZXN0X2dldHF1ZXJ5ZGF0YXxodHRwcmVxdWVzdF9nZXRyYXdwb3N0ZGF0YXxodHRwcmVxdWVzdF9nZXRyYXdyZXF1ZXN0bWVzc2FnZXxcCmh0dHByZXF1ZXN0X2dldHJhd3Jlc3BvbnNlbWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXF1ZXN0bWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWJvZHl8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2Vjb2RlfFwKaHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2Vjb29raWVzfGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlZGF0YXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWhlYWRlcnxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWluZm98XApodHRwcmVxdWVzdF9nZXRyZXNwb25zZW1lc3NhZ2V8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2VzdGF0dXN8aHR0cHJlcXVlc3RfZ2V0c3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9nZXR1cmx8aHR0cHJlcXVlc3RfcmVzZXRjb29raWVzfFwKaHR0cHJlcXVlc3Rfc2VuZHxodHRwcmVxdWVzdF9zZXRjb250ZW50dHlwZXxodHRwcmVxdWVzdF9zZXRjb29raWVzfGh0dHByZXF1ZXN0X3NldGhlYWRlcnN8aHR0cHJlcXVlc3Rfc2V0bWV0aG9kfGh0dHByZXF1ZXN0X3NldG9wdGlvbnN8XApodHRwcmVxdWVzdF9zZXRwb3N0ZmllbGRzfGh0dHByZXF1ZXN0X3NldHBvc3RmaWxlc3xodHRwcmVxdWVzdF9zZXRwdXRkYXRhfGh0dHByZXF1ZXN0X3NldHB1dGZpbGV8aHR0cHJlcXVlc3Rfc2V0cXVlcnlkYXRhfFwKaHR0cHJlcXVlc3Rfc2V0cmF3cG9zdGRhdGF8aHR0cHJlcXVlc3Rfc2V0c3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9zZXR1cmx8aHR0cHJlcXVlc3Rwb29sfGh0dHByZXF1ZXN0cG9vbF9hdHRhY2h8aHR0cHJlcXVlc3Rwb29sX2NvbnN0cnVjdHxcCmh0dHByZXF1ZXN0cG9vbF9kZXN0cnVjdHxodHRwcmVxdWVzdHBvb2xfZGV0YWNofGh0dHByZXF1ZXN0cG9vbF9nZXRhdHRhY2hlZHJlcXVlc3RzfGh0dHByZXF1ZXN0cG9vbF9nZXRmaW5pc2hlZHJlcXVlc3RzfFwKaHR0cHJlcXVlc3Rwb29sX3Jlc2V0fGh0dHByZXF1ZXN0cG9vbF9zZW5kfGh0dHByZXF1ZXN0cG9vbF9zb2NrZXRwZXJmb3JtfGh0dHByZXF1ZXN0cG9vbF9zb2NrZXRzZWxlY3R8aHR0cHJlc3BvbnNlfGh0dHByZXNwb25zZV9jYXB0dXJlfFwKaHR0cHJlc3BvbnNlX2dldGJ1ZmZlcnNpemV8aHR0cHJlc3BvbnNlX2dldGNhY2hlfGh0dHByZXNwb25zZV9nZXRjYWNoZWNvbnRyb2x8aHR0cHJlc3BvbnNlX2dldGNvbnRlbnRkaXNwb3NpdGlvbnxcCmh0dHByZXNwb25zZV9nZXRjb250ZW50dHlwZXxodHRwcmVzcG9uc2VfZ2V0ZGF0YXxodHRwcmVzcG9uc2VfZ2V0ZXRhZ3xodHRwcmVzcG9uc2VfZ2V0ZmlsZXxodHRwcmVzcG9uc2VfZ2V0Z3ppcHxodHRwcmVzcG9uc2VfZ2V0aGVhZGVyfFwKaHR0cHJlc3BvbnNlX2dldGxhc3Rtb2RpZmllZHxodHRwcmVzcG9uc2VfZ2V0cmVxdWVzdGJvZHl8aHR0cHJlc3BvbnNlX2dldHJlcXVlc3Rib2R5c3RyZWFtfGh0dHByZXNwb25zZV9nZXRyZXF1ZXN0aGVhZGVyc3xcCmh0dHByZXNwb25zZV9nZXRzdHJlYW18aHR0cHJlc3BvbnNlX2dldHRocm90dGxlZGVsYXl8aHR0cHJlc3BvbnNlX2d1ZXNzY29udGVudHR5cGV8aHR0cHJlc3BvbnNlX3JlZGlyZWN0fGh0dHByZXNwb25zZV9zZW5kfFwKaHR0cHJlc3BvbnNlX3NldGJ1ZmZlcnNpemV8aHR0cHJlc3BvbnNlX3NldGNhY2hlfGh0dHByZXNwb25zZV9zZXRjYWNoZWNvbnRyb2x8aHR0cHJlc3BvbnNlX3NldGNvbnRlbnRkaXNwb3NpdGlvbnxcCmh0dHByZXNwb25zZV9zZXRjb250ZW50dHlwZXxodHRwcmVzcG9uc2Vfc2V0ZGF0YXxodHRwcmVzcG9uc2Vfc2V0ZXRhZ3xodHRwcmVzcG9uc2Vfc2V0ZmlsZXxodHRwcmVzcG9uc2Vfc2V0Z3ppcHxodHRwcmVzcG9uc2Vfc2V0aGVhZGVyfFwKaHR0cHJlc3BvbnNlX3NldGxhc3Rtb2RpZmllZHxodHRwcmVzcG9uc2Vfc2V0c3RyZWFtfGh0dHByZXNwb25zZV9zZXR0aHJvdHRsZWRlbGF5fGh0dHByZXNwb25zZV9zdGF0dXN8aHdfYXJyYXkyb2JqcmVjfGh3X2NoYW5nZW9iamVjdHxcCmh3X2NoaWxkcmVufGh3X2NoaWxkcmVub2JqfGh3X2Nsb3NlfGh3X2Nvbm5lY3R8aHdfY29ubmVjdGlvbl9pbmZvfGh3X2NwfGh3X2RlbGV0ZW9iamVjdHxod19kb2NieWFuY2hvcnxod19kb2NieWFuY2hvcm9ianxcCmh3X2RvY3VtZW50X2F0dHJpYnV0ZXN8aHdfZG9jdW1lbnRfYm9keXRhZ3xod19kb2N1bWVudF9jb250ZW50fGh3X2RvY3VtZW50X3NldGNvbnRlbnR8aHdfZG9jdW1lbnRfc2l6ZXxod19kdW1teXxod19lZGl0dGV4dHxod19lcnJvcnxcCmh3X2Vycm9ybXNnfGh3X2ZyZWVfZG9jdW1lbnR8aHdfZ2V0YW5jaG9yc3xod19nZXRhbmNob3Jzb2JqfGh3X2dldGFuZGxvY2t8aHdfZ2V0Y2hpbGRjb2xsfGh3X2dldGNoaWxkY29sbG9ianxod19nZXRjaGlsZGRvY2NvbGx8XApod19nZXRjaGlsZGRvY2NvbGxvYmp8aHdfZ2V0b2JqZWN0fGh3X2dldG9iamVjdGJ5cXVlcnl8aHdfZ2V0b2JqZWN0YnlxdWVyeWNvbGx8aHdfZ2V0b2JqZWN0YnlxdWVyeWNvbGxvYmp8aHdfZ2V0b2JqZWN0YnlxdWVyeW9ianxcCmh3X2dldHBhcmVudHN8aHdfZ2V0cGFyZW50c29ianxod19nZXRyZWxsaW5rfGh3X2dldHJlbW90ZXxod19nZXRyZW1vdGVjaGlsZHJlbnxod19nZXRzcmNieWRlc3RvYmp8aHdfZ2V0dGV4dHxod19nZXR1c2VybmFtZXxod19pZGVudGlmeXxcCmh3X2luY29sbGVjdGlvbnN8aHdfaW5mb3xod19pbnNjb2xsfGh3X2luc2RvY3xod19pbnNlcnRhbmNob3JzfGh3X2luc2VydGRvY3VtZW50fGh3X2luc2VydG9iamVjdHxod19tYXBpZHxod19tb2RpZnlvYmplY3R8aHdfbXZ8XApod19uZXdfZG9jdW1lbnR8aHdfb2JqcmVjMmFycmF5fGh3X291dHB1dF9kb2N1bWVudHxod19wY29ubmVjdHxod19waXBlZG9jdW1lbnR8aHdfcm9vdHxod19zZXRsaW5rcm9vdHxod19zdGF0fGh3X3VubG9ja3xod193aG98XApod2FwaV9hdHRyaWJ1dGV8aHdhcGlfYXR0cmlidXRlX2tleXxod2FwaV9hdHRyaWJ1dGVfbGFuZ2RlcHZhbHVlfGh3YXBpX2F0dHJpYnV0ZV92YWx1ZXxod2FwaV9hdHRyaWJ1dGVfdmFsdWVzfGh3YXBpX2NoZWNraW58XApod2FwaV9jaGVja291dHxod2FwaV9jaGlsZHJlbnxod2FwaV9jb250ZW50fGh3YXBpX2NvbnRlbnRfbWltZXR5cGV8aHdhcGlfY29udGVudF9yZWFkfGh3YXBpX2NvcHl8aHdhcGlfZGJzdGF0fGh3YXBpX2Rjc3RhdHxcCmh3YXBpX2RzdGFuY2hvcnN8aHdhcGlfZHN0b2ZzcmNhbmNob3J8aHdhcGlfZXJyb3JfY291bnR8aHdhcGlfZXJyb3JfcmVhc29ufGh3YXBpX2ZpbmR8aHdhcGlfZnRzdGF0fGh3YXBpX2hnY3NwfGh3YXBpX2h3c3RhdHxcCmh3YXBpX2lkZW50aWZ5fGh3YXBpX2luZm98aHdhcGlfaW5zZXJ0fGh3YXBpX2luc2VydGFuY2hvcnxod2FwaV9pbnNlcnRjb2xsZWN0aW9ufGh3YXBpX2luc2VydGRvY3VtZW50fGh3YXBpX2xpbmt8aHdhcGlfbG9ja3xod2FwaV9tb3ZlfFwKaHdhcGlfbmV3X2NvbnRlbnR8aHdhcGlfb2JqZWN0fGh3YXBpX29iamVjdF9hc3NpZ258aHdhcGlfb2JqZWN0X2F0dHJlZGl0YWJsZXxod2FwaV9vYmplY3RfY291bnR8aHdhcGlfb2JqZWN0X2luc2VydHxod2FwaV9vYmplY3RfbmV3fFwKaHdhcGlfb2JqZWN0X3JlbW92ZXxod2FwaV9vYmplY3RfdGl0bGV8aHdhcGlfb2JqZWN0X3ZhbHVlfGh3YXBpX29iamVjdGJ5YW5jaG9yfGh3YXBpX3BhcmVudHN8aHdhcGlfcmVhc29uX2Rlc2NyaXB0aW9ufGh3YXBpX3JlYXNvbl90eXBlfFwKaHdhcGlfcmVtb3ZlfGh3YXBpX3JlcGxhY2V8aHdhcGlfc2V0Y29tbWl0dGVkdmVyc2lvbnxod2FwaV9zcmNhbmNob3JzfGh3YXBpX3NyY3NvZmRzdHxod2FwaV91bmxvY2t8aHdhcGlfdXNlcnxod2FwaV91c2VybGlzdHxoeXBvdHxcCmliYXNlX2FkZF91c2VyfGliYXNlX2FmZmVjdGVkX3Jvd3N8aWJhc2VfYmFja3VwfGliYXNlX2Jsb2JfYWRkfGliYXNlX2Jsb2JfY2FuY2VsfGliYXNlX2Jsb2JfY2xvc2V8aWJhc2VfYmxvYl9jcmVhdGV8aWJhc2VfYmxvYl9lY2hvfFwKaWJhc2VfYmxvYl9nZXR8aWJhc2VfYmxvYl9pbXBvcnR8aWJhc2VfYmxvYl9pbmZvfGliYXNlX2Jsb2Jfb3BlbnxpYmFzZV9jbG9zZXxpYmFzZV9jb21taXR8aWJhc2VfY29tbWl0X3JldHxpYmFzZV9jb25uZWN0fGliYXNlX2RiX2luZm98XAppYmFzZV9kZWxldGVfdXNlcnxpYmFzZV9kcm9wX2RifGliYXNlX2VycmNvZGV8aWJhc2VfZXJybXNnfGliYXNlX2V4ZWN1dGV8aWJhc2VfZmV0Y2hfYXNzb2N8aWJhc2VfZmV0Y2hfb2JqZWN0fGliYXNlX2ZldGNoX3Jvd3xcCmliYXNlX2ZpZWxkX2luZm98aWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyfGliYXNlX2ZyZWVfcXVlcnl8aWJhc2VfZnJlZV9yZXN1bHR8aWJhc2VfZ2VuX2lkfGliYXNlX21haW50YWluX2RifGliYXNlX21vZGlmeV91c2VyfFwKaWJhc2VfbmFtZV9yZXN1bHR8aWJhc2VfbnVtX2ZpZWxkc3xpYmFzZV9udW1fcGFyYW1zfGliYXNlX3BhcmFtX2luZm98aWJhc2VfcGNvbm5lY3R8aWJhc2VfcHJlcGFyZXxpYmFzZV9xdWVyeXxpYmFzZV9yZXN0b3JlfFwKaWJhc2Vfcm9sbGJhY2t8aWJhc2Vfcm9sbGJhY2tfcmV0fGliYXNlX3NlcnZlcl9pbmZvfGliYXNlX3NlcnZpY2VfYXR0YWNofGliYXNlX3NlcnZpY2VfZGV0YWNofGliYXNlX3NldF9ldmVudF9oYW5kbGVyfGliYXNlX3RpbWVmbXR8XAppYmFzZV90cmFuc3xpYmFzZV93YWl0X2V2ZW50fGljb252fGljb252X2dldF9lbmNvZGluZ3xpY29udl9taW1lX2RlY29kZXxpY29udl9taW1lX2RlY29kZV9oZWFkZXJzfGljb252X21pbWVfZW5jb2RlfGljb252X3NldF9lbmNvZGluZ3xcCmljb252X3N0cmxlbnxpY29udl9zdHJwb3N8aWNvbnZfc3RycnBvc3xpY29udl9zdWJzdHJ8aWQzX2dldF9mcmFtZV9sb25nX25hbWV8aWQzX2dldF9mcmFtZV9zaG9ydF9uYW1lfGlkM19nZXRfZ2VucmVfaWR8aWQzX2dldF9nZW5yZV9saXN0fFwKaWQzX2dldF9nZW5yZV9uYW1lfGlkM19nZXRfdGFnfGlkM19nZXRfdmVyc2lvbnxpZDNfcmVtb3ZlX3RhZ3xpZDNfc2V0X3RhZ3xpZDN2MmF0dGFjaGVkcGljdHVyZWZyYW1lfGlkM3YyZnJhbWV8aWQzdjJ0YWd8aWRhdGV8XAppZG5fdG9fYXNjaWl8aWRuX3RvX3VuaWNvZGV8aWRuX3RvX3V0Zjh8aWZ4X2FmZmVjdGVkX3Jvd3N8aWZ4X2Jsb2JpbmZpbGVfbW9kZXxpZnhfYnl0ZWFzdmFyY2hhcnxpZnhfY2xvc2V8aWZ4X2Nvbm5lY3R8aWZ4X2NvcHlfYmxvYnxcCmlmeF9jcmVhdGVfYmxvYnxpZnhfY3JlYXRlX2NoYXJ8aWZ4X2RvfGlmeF9lcnJvcnxpZnhfZXJyb3Jtc2d8aWZ4X2ZldGNoX3Jvd3xpZnhfZmllbGRwcm9wZXJ0aWVzfGlmeF9maWVsZHR5cGVzfGlmeF9mcmVlX2Jsb2J8XAppZnhfZnJlZV9jaGFyfGlmeF9mcmVlX3Jlc3VsdHxpZnhfZ2V0X2Jsb2J8aWZ4X2dldF9jaGFyfGlmeF9nZXRzcWxjYXxpZnhfaHRtbHRibF9yZXN1bHR8aWZ4X251bGxmb3JtYXR8aWZ4X251bV9maWVsZHN8aWZ4X251bV9yb3dzfFwKaWZ4X3Bjb25uZWN0fGlmeF9wcmVwYXJlfGlmeF9xdWVyeXxpZnhfdGV4dGFzdmFyY2hhcnxpZnhfdXBkYXRlX2Jsb2J8aWZ4X3VwZGF0ZV9jaGFyfGlmeHVzX2Nsb3NlX3Nsb2J8aWZ4dXNfY3JlYXRlX3Nsb2J8aWZ4dXNfZnJlZV9zbG9ifFwKaWZ4dXNfb3Blbl9zbG9ifGlmeHVzX3JlYWRfc2xvYnxpZnh1c19zZWVrX3Nsb2J8aWZ4dXNfdGVsbF9zbG9ifGlmeHVzX3dyaXRlX3Nsb2J8aWdub3JlX3VzZXJfYWJvcnR8aWlzX2FkZF9zZXJ2ZXJ8aWlzX2dldF9kaXJfc2VjdXJpdHl8XAppaXNfZ2V0X3NjcmlwdF9tYXB8aWlzX2dldF9zZXJ2ZXJfYnlfY29tbWVudHxpaXNfZ2V0X3NlcnZlcl9ieV9wYXRofGlpc19nZXRfc2VydmVyX3JpZ2h0c3xpaXNfZ2V0X3NlcnZpY2Vfc3RhdGV8aWlzX3JlbW92ZV9zZXJ2ZXJ8XAppaXNfc2V0X2FwcF9zZXR0aW5nc3xpaXNfc2V0X2Rpcl9zZWN1cml0eXxpaXNfc2V0X3NjcmlwdF9tYXB8aWlzX3NldF9zZXJ2ZXJfcmlnaHRzfGlpc19zdGFydF9zZXJ2ZXJ8aWlzX3N0YXJ0X3NlcnZpY2V8aWlzX3N0b3Bfc2VydmVyfFwKaWlzX3N0b3Bfc2VydmljZXxpbWFnZTJ3Ym1wfGltYWdlX3R5cGVfdG9fZXh0ZW5zaW9ufGltYWdlX3R5cGVfdG9fbWltZV90eXBlfGltYWdlYWxwaGFibGVuZGluZ3xpbWFnZWFudGlhbGlhc3xpbWFnZWFyY3xpbWFnZWNoYXJ8XAppbWFnZWNoYXJ1cHxpbWFnZWNvbG9yYWxsb2NhdGV8aW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGF8aW1hZ2Vjb2xvcmF0fGltYWdlY29sb3JjbG9zZXN0fGltYWdlY29sb3JjbG9zZXN0YWxwaGF8aW1hZ2Vjb2xvcmNsb3Nlc3Rod2J8XAppbWFnZWNvbG9yZGVhbGxvY2F0ZXxpbWFnZWNvbG9yZXhhY3R8aW1hZ2Vjb2xvcmV4YWN0YWxwaGF8aW1hZ2Vjb2xvcm1hdGNofGltYWdlY29sb3JyZXNvbHZlfGltYWdlY29sb3JyZXNvbHZlYWxwaGF8aW1hZ2Vjb2xvcnNldHxcCmltYWdlY29sb3JzZm9yaW5kZXh8aW1hZ2Vjb2xvcnN0b3RhbHxpbWFnZWNvbG9ydHJhbnNwYXJlbnR8aW1hZ2Vjb252b2x1dGlvbnxpbWFnZWNvcHl8aW1hZ2Vjb3B5bWVyZ2V8aW1hZ2Vjb3B5bWVyZ2VncmF5fFwKaW1hZ2Vjb3B5cmVzYW1wbGVkfGltYWdlY29weXJlc2l6ZWR8aW1hZ2VjcmVhdGV8aW1hZ2VjcmVhdGVmcm9tZ2R8aW1hZ2VjcmVhdGVmcm9tZ2QyfGltYWdlY3JlYXRlZnJvbWdkMnBhcnR8aW1hZ2VjcmVhdGVmcm9tZ2lmfFwKaW1hZ2VjcmVhdGVmcm9tanBlZ3xpbWFnZWNyZWF0ZWZyb21wbmd8aW1hZ2VjcmVhdGVmcm9tc3RyaW5nfGltYWdlY3JlYXRlZnJvbXdibXB8aW1hZ2VjcmVhdGVmcm9teGJtfGltYWdlY3JlYXRlZnJvbXhwbXxcCmltYWdlY3JlYXRldHJ1ZWNvbG9yfGltYWdlZGFzaGVkbGluZXxpbWFnZWRlc3Ryb3l8aW1hZ2VlbGxpcHNlfGltYWdlZmlsbHxpbWFnZWZpbGxlZGFyY3xpbWFnZWZpbGxlZGVsbGlwc2V8aW1hZ2VmaWxsZWRwb2x5Z29ufFwKaW1hZ2VmaWxsZWRyZWN0YW5nbGV8aW1hZ2VmaWxsdG9ib3JkZXJ8aW1hZ2VmaWx0ZXJ8aW1hZ2Vmb250aGVpZ2h0fGltYWdlZm9udHdpZHRofGltYWdlZnRiYm94fGltYWdlZnR0ZXh0fGltYWdlZ2FtbWFjb3JyZWN0fGltYWdlZ2R8XAppbWFnZWdkMnxpbWFnZWdpZnxpbWFnZWdyYWJzY3JlZW58aW1hZ2VncmFid2luZG93fGltYWdlaW50ZXJsYWNlfGltYWdlaXN0cnVlY29sb3J8aW1hZ2VqcGVnfGltYWdlbGF5ZXJlZmZlY3R8aW1hZ2VsaW5lfGltYWdlbG9hZGZvbnR8XAppbWFnZXBhbGV0dGVjb3B5fGltYWdlcG5nfGltYWdlcG9seWdvbnxpbWFnZXBzYmJveHxpbWFnZXBzZW5jb2RlZm9udHxpbWFnZXBzZXh0ZW5kZm9udHxpbWFnZXBzZnJlZWZvbnR8aW1hZ2Vwc2xvYWRmb250fGltYWdlcHNzbGFudGZvbnR8XAppbWFnZXBzdGV4dHxpbWFnZXJlY3RhbmdsZXxpbWFnZXJvdGF0ZXxpbWFnZXNhdmVhbHBoYXxpbWFnZXNldGJydXNofGltYWdlc2V0cGl4ZWx8aW1hZ2VzZXRzdHlsZXxpbWFnZXNldHRoaWNrbmVzc3xpbWFnZXNldHRpbGV8XAppbWFnZXN0cmluZ3xpbWFnZXN0cmluZ3VwfGltYWdlc3h8aW1hZ2VzeXxpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZXxpbWFnZXR0ZmJib3h8aW1hZ2V0dGZ0ZXh0fGltYWdldHlwZXN8aW1hZ2V3Ym1wfGltYWdleGJtfGltYWdpY2t8XAppbWFnaWNrX2FkYXB0aXZlYmx1cmltYWdlfGltYWdpY2tfYWRhcHRpdmVyZXNpemVpbWFnZXxpbWFnaWNrX2FkYXB0aXZlc2hhcnBlbmltYWdlfGltYWdpY2tfYWRhcHRpdmV0aHJlc2hvbGRpbWFnZXxpbWFnaWNrX2FkZGltYWdlfFwKaW1hZ2lja19hZGRub2lzZWltYWdlfGltYWdpY2tfYWZmaW5ldHJhbnNmb3JtaW1hZ2V8aW1hZ2lja19hbmltYXRlaW1hZ2VzfGltYWdpY2tfYW5ub3RhdGVpbWFnZXxpbWFnaWNrX2FwcGVuZGltYWdlc3xpbWFnaWNrX2F2ZXJhZ2VpbWFnZXN8XAppbWFnaWNrX2JsYWNrdGhyZXNob2xkaW1hZ2V8aW1hZ2lja19ibHVyaW1hZ2V8aW1hZ2lja19ib3JkZXJpbWFnZXxpbWFnaWNrX2NoYXJjb2FsaW1hZ2V8aW1hZ2lja19jaG9waW1hZ2V8aW1hZ2lja19jbGVhcnxpbWFnaWNrX2NsaXBpbWFnZXxcCmltYWdpY2tfY2xpcHBhdGhpbWFnZXxpbWFnaWNrX2Nsb25lfGltYWdpY2tfY2x1dGltYWdlfGltYWdpY2tfY29hbGVzY2VpbWFnZXN8aW1hZ2lja19jb2xvcmZsb29kZmlsbGltYWdlfGltYWdpY2tfY29sb3JpemVpbWFnZXxcCmltYWdpY2tfY29tYmluZWltYWdlc3xpbWFnaWNrX2NvbW1lbnRpbWFnZXxpbWFnaWNrX2NvbXBhcmVpbWFnZWNoYW5uZWxzfGltYWdpY2tfY29tcGFyZWltYWdlbGF5ZXJzfGltYWdpY2tfY29tcGFyZWltYWdlc3xcCmltYWdpY2tfY29tcG9zaXRlaW1hZ2V8aW1hZ2lja19jb25zdHJ1Y3R8aW1hZ2lja19jb250cmFzdGltYWdlfGltYWdpY2tfY29udHJhc3RzdHJldGNoaW1hZ2V8aW1hZ2lja19jb252b2x2ZWltYWdlfGltYWdpY2tfY3JvcGltYWdlfFwKaW1hZ2lja19jcm9wdGh1bWJuYWlsaW1hZ2V8aW1hZ2lja19jdXJyZW50fGltYWdpY2tfY3ljbGVjb2xvcm1hcGltYWdlfGltYWdpY2tfZGVjaXBoZXJpbWFnZXxpbWFnaWNrX2RlY29uc3RydWN0aW1hZ2VzfFwKaW1hZ2lja19kZWxldGVpbWFnZWFydGlmYWN0fGltYWdpY2tfZGVzcGVja2xlaW1hZ2V8aW1hZ2lja19kZXN0cm95fGltYWdpY2tfZGlzcGxheWltYWdlfGltYWdpY2tfZGlzcGxheWltYWdlc3xpbWFnaWNrX2Rpc3RvcnRpbWFnZXxcCmltYWdpY2tfZHJhd2ltYWdlfGltYWdpY2tfZWRnZWltYWdlfGltYWdpY2tfZW1ib3NzaW1hZ2V8aW1hZ2lja19lbmNpcGhlcmltYWdlfGltYWdpY2tfZW5oYW5jZWltYWdlfGltYWdpY2tfZXF1YWxpemVpbWFnZXxcCmltYWdpY2tfZXZhbHVhdGVpbWFnZXxpbWFnaWNrX2V4dGVudGltYWdlfGltYWdpY2tfZmxhdHRlbmltYWdlc3xpbWFnaWNrX2ZsaXBpbWFnZXxpbWFnaWNrX2Zsb29kZmlsbHBhaW50aW1hZ2V8aW1hZ2lja19mbG9waW1hZ2V8XAppbWFnaWNrX2ZyYW1laW1hZ2V8aW1hZ2lja19meGltYWdlfGltYWdpY2tfZ2FtbWFpbWFnZXxpbWFnaWNrX2dhdXNzaWFuYmx1cmltYWdlfGltYWdpY2tfZ2V0Y29sb3JzcGFjZXxpbWFnaWNrX2dldGNvbXByZXNzaW9ufFwKaW1hZ2lja19nZXRjb21wcmVzc2lvbnF1YWxpdHl8aW1hZ2lja19nZXRjb3B5cmlnaHR8aW1hZ2lja19nZXRmaWxlbmFtZXxpbWFnaWNrX2dldGZvbnR8aW1hZ2lja19nZXRmb3JtYXR8aW1hZ2lja19nZXRncmF2aXR5fFwKaW1hZ2lja19nZXRob21ldXJsfGltYWdpY2tfZ2V0aW1hZ2V8aW1hZ2lja19nZXRpbWFnZWFscGhhY2hhbm5lbHxpbWFnaWNrX2dldGltYWdlYXJ0aWZhY3R8aW1hZ2lja19nZXRpbWFnZWJhY2tncm91bmRjb2xvcnxcCmltYWdpY2tfZ2V0aW1hZ2VibG9ifGltYWdpY2tfZ2V0aW1hZ2VibHVlcHJpbWFyeXxpbWFnaWNrX2dldGltYWdlYm9yZGVyY29sb3J8aW1hZ2lja19nZXRpbWFnZWNoYW5uZWxkZXB0aHxcCmltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZGlzdG9ydGlvbnxpbWFnaWNrX2dldGltYWdlY2hhbm5lbGRpc3RvcnRpb25zfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZXh0cmVtYXxpbWFnaWNrX2dldGltYWdlY2hhbm5lbG1lYW58XAppbWFnaWNrX2dldGltYWdlY2hhbm5lbHJhbmdlfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsc3RhdGlzdGljc3xpbWFnaWNrX2dldGltYWdlY2xpcG1hc2t8aW1hZ2lja19nZXRpbWFnZWNvbG9ybWFwY29sb3J8XAppbWFnaWNrX2dldGltYWdlY29sb3JzfGltYWdpY2tfZ2V0aW1hZ2Vjb2xvcnNwYWNlfGltYWdpY2tfZ2V0aW1hZ2Vjb21wb3NlfGltYWdpY2tfZ2V0aW1hZ2Vjb21wcmVzc2lvbnxpbWFnaWNrX2dldGltYWdlY29tcHJlc3Npb25xdWFsaXR5fFwKaW1hZ2lja19nZXRpbWFnZWRlbGF5fGltYWdpY2tfZ2V0aW1hZ2VkZXB0aHxpbWFnaWNrX2dldGltYWdlZGlzcG9zZXxpbWFnaWNrX2dldGltYWdlZGlzdG9ydGlvbnxpbWFnaWNrX2dldGltYWdlZXh0cmVtYXxcCmltYWdpY2tfZ2V0aW1hZ2VmaWxlbmFtZXxpbWFnaWNrX2dldGltYWdlZm9ybWF0fGltYWdpY2tfZ2V0aW1hZ2VnYW1tYXxpbWFnaWNrX2dldGltYWdlZ2VvbWV0cnl8aW1hZ2lja19nZXRpbWFnZWdyYXZpdHl8XAppbWFnaWNrX2dldGltYWdlZ3JlZW5wcmltYXJ5fGltYWdpY2tfZ2V0aW1hZ2VoZWlnaHR8aW1hZ2lja19nZXRpbWFnZWhpc3RvZ3JhbXxpbWFnaWNrX2dldGltYWdlaW5kZXh8aW1hZ2lja19nZXRpbWFnZWludGVybGFjZXNjaGVtZXxcCmltYWdpY2tfZ2V0aW1hZ2VpbnRlcnBvbGF0ZW1ldGhvZHxpbWFnaWNrX2dldGltYWdlaXRlcmF0aW9uc3xpbWFnaWNrX2dldGltYWdlbGVuZ3RofGltYWdpY2tfZ2V0aW1hZ2VtYWdpY2tsaWNlbnNlfGltYWdpY2tfZ2V0aW1hZ2VtYXR0ZXxcCmltYWdpY2tfZ2V0aW1hZ2VtYXR0ZWNvbG9yfGltYWdpY2tfZ2V0aW1hZ2VvcmllbnRhdGlvbnxpbWFnaWNrX2dldGltYWdlcGFnZXxpbWFnaWNrX2dldGltYWdlcGl4ZWxjb2xvcnxpbWFnaWNrX2dldGltYWdlcHJvZmlsZXxcCmltYWdpY2tfZ2V0aW1hZ2Vwcm9maWxlc3xpbWFnaWNrX2dldGltYWdlcHJvcGVydGllc3xpbWFnaWNrX2dldGltYWdlcHJvcGVydHl8aW1hZ2lja19nZXRpbWFnZXJlZHByaW1hcnl8aW1hZ2lja19nZXRpbWFnZXJlZ2lvbnxcCmltYWdpY2tfZ2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnR8aW1hZ2lja19nZXRpbWFnZXJlc29sdXRpb258aW1hZ2lja19nZXRpbWFnZXNibG9ifGltYWdpY2tfZ2V0aW1hZ2VzY2VuZXxpbWFnaWNrX2dldGltYWdlc2lnbmF0dXJlfFwKaW1hZ2lja19nZXRpbWFnZXNpemV8aW1hZ2lja19nZXRpbWFnZXRpY2tzcGVyc2Vjb25kfGltYWdpY2tfZ2V0aW1hZ2V0b3RhbGlua2RlbnNpdHl8aW1hZ2lja19nZXRpbWFnZXR5cGV8aW1hZ2lja19nZXRpbWFnZXVuaXRzfFwKaW1hZ2lja19nZXRpbWFnZXZpcnR1YWxwaXhlbG1ldGhvZHxpbWFnaWNrX2dldGltYWdld2hpdGVwb2ludHxpbWFnaWNrX2dldGltYWdld2lkdGh8aW1hZ2lja19nZXRpbnRlcmxhY2VzY2hlbWV8aW1hZ2lja19nZXRpdGVyYXRvcmluZGV4fFwKaW1hZ2lja19nZXRudW1iZXJpbWFnZXN8aW1hZ2lja19nZXRvcHRpb258aW1hZ2lja19nZXRwYWNrYWdlbmFtZXxpbWFnaWNrX2dldHBhZ2V8aW1hZ2lja19nZXRwaXhlbGl0ZXJhdG9yfGltYWdpY2tfZ2V0cGl4ZWxyZWdpb25pdGVyYXRvcnxcCmltYWdpY2tfZ2V0cG9pbnRzaXplfGltYWdpY2tfZ2V0cXVhbnR1bWRlcHRofGltYWdpY2tfZ2V0cXVhbnR1bXJhbmdlfGltYWdpY2tfZ2V0cmVsZWFzZWRhdGV8aW1hZ2lja19nZXRyZXNvdXJjZXxpbWFnaWNrX2dldHJlc291cmNlbGltaXR8XAppbWFnaWNrX2dldHNhbXBsaW5nZmFjdG9yc3xpbWFnaWNrX2dldHNpemV8aW1hZ2lja19nZXRzaXplb2Zmc2V0fGltYWdpY2tfZ2V0dmVyc2lvbnxpbWFnaWNrX2hhc25leHRpbWFnZXxpbWFnaWNrX2hhc3ByZXZpb3VzaW1hZ2V8XAppbWFnaWNrX2lkZW50aWZ5aW1hZ2V8aW1hZ2lja19pbXBsb2RlaW1hZ2V8aW1hZ2lja19sYWJlbGltYWdlfGltYWdpY2tfbGV2ZWxpbWFnZXxpbWFnaWNrX2xpbmVhcnN0cmV0Y2hpbWFnZXxpbWFnaWNrX2xpcXVpZHJlc2NhbGVpbWFnZXxcCmltYWdpY2tfbWFnbmlmeWltYWdlfGltYWdpY2tfbWFwaW1hZ2V8aW1hZ2lja19tYXR0ZWZsb29kZmlsbGltYWdlfGltYWdpY2tfbWVkaWFuZmlsdGVyaW1hZ2V8aW1hZ2lja19tZXJnZWltYWdlbGF5ZXJzfGltYWdpY2tfbWluaWZ5aW1hZ2V8XAppbWFnaWNrX21vZHVsYXRlaW1hZ2V8aW1hZ2lja19tb250YWdlaW1hZ2V8aW1hZ2lja19tb3JwaGltYWdlc3xpbWFnaWNrX21vc2FpY2ltYWdlc3xpbWFnaWNrX21vdGlvbmJsdXJpbWFnZXxpbWFnaWNrX25lZ2F0ZWltYWdlfFwKaW1hZ2lja19uZXdpbWFnZXxpbWFnaWNrX25ld3BzZXVkb2ltYWdlfGltYWdpY2tfbmV4dGltYWdlfGltYWdpY2tfbm9ybWFsaXplaW1hZ2V8aW1hZ2lja19vaWxwYWludGltYWdlfGltYWdpY2tfb3BhcXVlcGFpbnRpbWFnZXxcCmltYWdpY2tfb3B0aW1pemVpbWFnZWxheWVyc3xpbWFnaWNrX29yZGVyZWRwb3N0ZXJpemVpbWFnZXxpbWFnaWNrX3BhaW50Zmxvb2RmaWxsaW1hZ2V8aW1hZ2lja19wYWludG9wYXF1ZWltYWdlfFwKaW1hZ2lja19wYWludHRyYW5zcGFyZW50aW1hZ2V8aW1hZ2lja19waW5naW1hZ2V8aW1hZ2lja19waW5naW1hZ2VibG9ifGltYWdpY2tfcGluZ2ltYWdlZmlsZXxpbWFnaWNrX3BvbGFyb2lkaW1hZ2V8aW1hZ2lja19wb3N0ZXJpemVpbWFnZXxcCmltYWdpY2tfcHJldmlld2ltYWdlc3xpbWFnaWNrX3ByZXZpb3VzaW1hZ2V8aW1hZ2lja19wcm9maWxlaW1hZ2V8aW1hZ2lja19xdWFudGl6ZWltYWdlfGltYWdpY2tfcXVhbnRpemVpbWFnZXN8aW1hZ2lja19xdWVyeWZvbnRtZXRyaWNzfFwKaW1hZ2lja19xdWVyeWZvbnRzfGltYWdpY2tfcXVlcnlmb3JtYXRzfGltYWdpY2tfcmFkaWFsYmx1cmltYWdlfGltYWdpY2tfcmFpc2VpbWFnZXxpbWFnaWNrX3JhbmRvbXRocmVzaG9sZGltYWdlfGltYWdpY2tfcmVhZGltYWdlfFwKaW1hZ2lja19yZWFkaW1hZ2VibG9ifGltYWdpY2tfcmVhZGltYWdlZmlsZXxpbWFnaWNrX3JlY29sb3JpbWFnZXxpbWFnaWNrX3JlZHVjZW5vaXNlaW1hZ2V8aW1hZ2lja19yZW1vdmVpbWFnZXxpbWFnaWNrX3JlbW92ZWltYWdlcHJvZmlsZXxcCmltYWdpY2tfcmVuZGVyfGltYWdpY2tfcmVzYW1wbGVpbWFnZXxpbWFnaWNrX3Jlc2V0aW1hZ2VwYWdlfGltYWdpY2tfcmVzaXplaW1hZ2V8aW1hZ2lja19yb2xsaW1hZ2V8aW1hZ2lja19yb3RhdGVpbWFnZXxcCmltYWdpY2tfcm91bmRjb3JuZXJzfGltYWdpY2tfc2FtcGxlaW1hZ2V8aW1hZ2lja19zY2FsZWltYWdlfGltYWdpY2tfc2VwYXJhdGVpbWFnZWNoYW5uZWx8aW1hZ2lja19zZXBpYXRvbmVpbWFnZXxcCmltYWdpY2tfc2V0YmFja2dyb3VuZGNvbG9yfGltYWdpY2tfc2V0Y29sb3JzcGFjZXxpbWFnaWNrX3NldGNvbXByZXNzaW9ufGltYWdpY2tfc2V0Y29tcHJlc3Npb25xdWFsaXR5fGltYWdpY2tfc2V0ZmlsZW5hbWV8XAppbWFnaWNrX3NldGZpcnN0aXRlcmF0b3J8aW1hZ2lja19zZXRmb250fGltYWdpY2tfc2V0Zm9ybWF0fGltYWdpY2tfc2V0Z3Jhdml0eXxpbWFnaWNrX3NldGltYWdlfGltYWdpY2tfc2V0aW1hZ2VhbHBoYWNoYW5uZWx8XAppbWFnaWNrX3NldGltYWdlYXJ0aWZhY3R8aW1hZ2lja19zZXRpbWFnZWJhY2tncm91bmRjb2xvcnxpbWFnaWNrX3NldGltYWdlYmlhc3xpbWFnaWNrX3NldGltYWdlYmx1ZXByaW1hcnl8aW1hZ2lja19zZXRpbWFnZWJvcmRlcmNvbG9yfFwKaW1hZ2lja19zZXRpbWFnZWNoYW5uZWxkZXB0aHxpbWFnaWNrX3NldGltYWdlY2xpcG1hc2t8aW1hZ2lja19zZXRpbWFnZWNvbG9ybWFwY29sb3J8aW1hZ2lja19zZXRpbWFnZWNvbG9yc3BhY2V8aW1hZ2lja19zZXRpbWFnZWNvbXBvc2V8XAppbWFnaWNrX3NldGltYWdlY29tcHJlc3Npb258aW1hZ2lja19zZXRpbWFnZWNvbXByZXNzaW9ucXVhbGl0eXxpbWFnaWNrX3NldGltYWdlZGVsYXl8aW1hZ2lja19zZXRpbWFnZWRlcHRofGltYWdpY2tfc2V0aW1hZ2VkaXNwb3NlfFwKaW1hZ2lja19zZXRpbWFnZWV4dGVudHxpbWFnaWNrX3NldGltYWdlZmlsZW5hbWV8aW1hZ2lja19zZXRpbWFnZWZvcm1hdHxpbWFnaWNrX3NldGltYWdlZ2FtbWF8aW1hZ2lja19zZXRpbWFnZWdyYXZpdHl8XAppbWFnaWNrX3NldGltYWdlZ3JlZW5wcmltYXJ5fGltYWdpY2tfc2V0aW1hZ2VpbmRleHxpbWFnaWNrX3NldGltYWdlaW50ZXJsYWNlc2NoZW1lfGltYWdpY2tfc2V0aW1hZ2VpbnRlcnBvbGF0ZW1ldGhvZHxcCmltYWdpY2tfc2V0aW1hZ2VpdGVyYXRpb25zfGltYWdpY2tfc2V0aW1hZ2VtYXR0ZXxpbWFnaWNrX3NldGltYWdlbWF0dGVjb2xvcnxpbWFnaWNrX3NldGltYWdlb3BhY2l0eXxpbWFnaWNrX3NldGltYWdlb3JpZW50YXRpb258XAppbWFnaWNrX3NldGltYWdlcGFnZXxpbWFnaWNrX3NldGltYWdlcHJvZmlsZXxpbWFnaWNrX3NldGltYWdlcHJvcGVydHl8aW1hZ2lja19zZXRpbWFnZXJlZHByaW1hcnl8aW1hZ2lja19zZXRpbWFnZXJlbmRlcmluZ2ludGVudHxcCmltYWdpY2tfc2V0aW1hZ2VyZXNvbHV0aW9ufGltYWdpY2tfc2V0aW1hZ2VzY2VuZXxpbWFnaWNrX3NldGltYWdldGlja3NwZXJzZWNvbmR8aW1hZ2lja19zZXRpbWFnZXR5cGV8aW1hZ2lja19zZXRpbWFnZXVuaXRzfFwKaW1hZ2lja19zZXRpbWFnZXZpcnR1YWxwaXhlbG1ldGhvZHxpbWFnaWNrX3NldGltYWdld2hpdGVwb2ludHxpbWFnaWNrX3NldGludGVybGFjZXNjaGVtZXxpbWFnaWNrX3NldGl0ZXJhdG9yaW5kZXh8aW1hZ2lja19zZXRsYXN0aXRlcmF0b3J8XAppbWFnaWNrX3NldG9wdGlvbnxpbWFnaWNrX3NldHBhZ2V8aW1hZ2lja19zZXRwb2ludHNpemV8aW1hZ2lja19zZXRyZXNvbHV0aW9ufGltYWdpY2tfc2V0cmVzb3VyY2VsaW1pdHxpbWFnaWNrX3NldHNhbXBsaW5nZmFjdG9yc3xcCmltYWdpY2tfc2V0c2l6ZXxpbWFnaWNrX3NldHNpemVvZmZzZXR8aW1hZ2lja19zZXR0eXBlfGltYWdpY2tfc2hhZGVpbWFnZXxpbWFnaWNrX3NoYWRvd2ltYWdlfGltYWdpY2tfc2hhcnBlbmltYWdlfGltYWdpY2tfc2hhdmVpbWFnZXxcCmltYWdpY2tfc2hlYXJpbWFnZXxpbWFnaWNrX3NpZ21vaWRhbGNvbnRyYXN0aW1hZ2V8aW1hZ2lja19za2V0Y2hpbWFnZXxpbWFnaWNrX3NvbGFyaXplaW1hZ2V8aW1hZ2lja19zcGxpY2VpbWFnZXxpbWFnaWNrX3NwcmVhZGltYWdlfFwKaW1hZ2lja19zdGVnYW5vaW1hZ2V8aW1hZ2lja19zdGVyZW9pbWFnZXxpbWFnaWNrX3N0cmlwaW1hZ2V8aW1hZ2lja19zd2lybGltYWdlfGltYWdpY2tfdGV4dHVyZWltYWdlfGltYWdpY2tfdGhyZXNob2xkaW1hZ2V8XAppbWFnaWNrX3RodW1ibmFpbGltYWdlfGltYWdpY2tfdGludGltYWdlfGltYWdpY2tfdHJhbnNmb3JtaW1hZ2V8aW1hZ2lja190cmFuc3BhcmVudHBhaW50aW1hZ2V8aW1hZ2lja190cmFuc3Bvc2VpbWFnZXxcCmltYWdpY2tfdHJhbnN2ZXJzZWltYWdlfGltYWdpY2tfdHJpbWltYWdlfGltYWdpY2tfdW5pcXVlaW1hZ2Vjb2xvcnN8aW1hZ2lja191bnNoYXJwbWFza2ltYWdlfGltYWdpY2tfdmFsaWR8aW1hZ2lja192aWduZXR0ZWltYWdlfFwKaW1hZ2lja193YXZlaW1hZ2V8aW1hZ2lja193aGl0ZXRocmVzaG9sZGltYWdlfGltYWdpY2tfd3JpdGVpbWFnZXxpbWFnaWNrX3dyaXRlaW1hZ2VmaWxlfGltYWdpY2tfd3JpdGVpbWFnZXN8aW1hZ2lja193cml0ZWltYWdlc2ZpbGV8XAppbWFnaWNrZHJhd3xpbWFnaWNrZHJhd19hZmZpbmV8aW1hZ2lja2RyYXdfYW5ub3RhdGlvbnxpbWFnaWNrZHJhd19hcmN8aW1hZ2lja2RyYXdfYmV6aWVyfGltYWdpY2tkcmF3X2NpcmNsZXxpbWFnaWNrZHJhd19jbGVhcnxcCmltYWdpY2tkcmF3X2Nsb25lfGltYWdpY2tkcmF3X2NvbG9yfGltYWdpY2tkcmF3X2NvbW1lbnR8aW1hZ2lja2RyYXdfY29tcG9zaXRlfGltYWdpY2tkcmF3X2NvbnN0cnVjdHxpbWFnaWNrZHJhd19kZXN0cm95fFwKaW1hZ2lja2RyYXdfZWxsaXBzZXxpbWFnaWNrZHJhd19nZXRjbGlwcGF0aHxpbWFnaWNrZHJhd19nZXRjbGlwcnVsZXxpbWFnaWNrZHJhd19nZXRjbGlwdW5pdHN8aW1hZ2lja2RyYXdfZ2V0ZmlsbGNvbG9yfFwKaW1hZ2lja2RyYXdfZ2V0ZmlsbG9wYWNpdHl8aW1hZ2lja2RyYXdfZ2V0ZmlsbHJ1bGV8aW1hZ2lja2RyYXdfZ2V0Zm9udHxpbWFnaWNrZHJhd19nZXRmb250ZmFtaWx5fGltYWdpY2tkcmF3X2dldGZvbnRzaXplfFwKaW1hZ2lja2RyYXdfZ2V0Zm9udHN0eWxlfGltYWdpY2tkcmF3X2dldGZvbnR3ZWlnaHR8aW1hZ2lja2RyYXdfZ2V0Z3Jhdml0eXxpbWFnaWNrZHJhd19nZXRzdHJva2VhbnRpYWxpYXN8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlY29sb3J8XAppbWFnaWNrZHJhd19nZXRzdHJva2VkYXNoYXJyYXl8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlZGFzaG9mZnNldHxpbWFnaWNrZHJhd19nZXRzdHJva2VsaW5lY2FwfGltYWdpY2tkcmF3X2dldHN0cm9rZWxpbmVqb2lufFwKaW1hZ2lja2RyYXdfZ2V0c3Ryb2tlbWl0ZXJsaW1pdHxpbWFnaWNrZHJhd19nZXRzdHJva2VvcGFjaXR5fGltYWdpY2tkcmF3X2dldHN0cm9rZXdpZHRofGltYWdpY2tkcmF3X2dldHRleHRhbGlnbm1lbnR8XAppbWFnaWNrZHJhd19nZXR0ZXh0YW50aWFsaWFzfGltYWdpY2tkcmF3X2dldHRleHRkZWNvcmF0aW9ufGltYWdpY2tkcmF3X2dldHRleHRlbmNvZGluZ3xpbWFnaWNrZHJhd19nZXR0ZXh0dW5kZXJjb2xvcnxcCmltYWdpY2tkcmF3X2dldHZlY3RvcmdyYXBoaWNzfGltYWdpY2tkcmF3X2xpbmV8aW1hZ2lja2RyYXdfbWF0dGV8aW1hZ2lja2RyYXdfcGF0aGNsb3NlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvYWJzb2x1dGV8XAppbWFnaWNrZHJhd19wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcmFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVycmVsYXRpdmV8XAppbWFnaWNrZHJhd19wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcnNtb290aGFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyc21vb3RocmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9yZWxhdGl2ZXxcCmltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvc21vb3RoYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9zbW9vdGhyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoZWxsaXB0aWNhcmNhYnNvbHV0ZXxcCmltYWdpY2tkcmF3X3BhdGhlbGxpcHRpY2FyY3JlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhmaW5pc2h8aW1hZ2lja2RyYXdfcGF0aGxpbmV0b2Fic29sdXRlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG9ob3Jpem9udGFsYWJzb2x1dGV8XAppbWFnaWNrZHJhd19wYXRobGluZXRvaG9yaXpvbnRhbHJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG9yZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRobGluZXRvdmVydGljYWxhYnNvbHV0ZXxcCmltYWdpY2tkcmF3X3BhdGhsaW5ldG92ZXJ0aWNhbHJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhtb3ZldG9hYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRobW92ZXRvcmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aHN0YXJ0fFwKaW1hZ2lja2RyYXdfcG9pbnR8aW1hZ2lja2RyYXdfcG9seWdvbnxpbWFnaWNrZHJhd19wb2x5bGluZXxpbWFnaWNrZHJhd19wb3B8aW1hZ2lja2RyYXdfcG9wY2xpcHBhdGh8aW1hZ2lja2RyYXdfcG9wZGVmc3xcCmltYWdpY2tkcmF3X3BvcHBhdHRlcm58aW1hZ2lja2RyYXdfcHVzaHxpbWFnaWNrZHJhd19wdXNoY2xpcHBhdGh8aW1hZ2lja2RyYXdfcHVzaGRlZnN8aW1hZ2lja2RyYXdfcHVzaHBhdHRlcm58aW1hZ2lja2RyYXdfcmVjdGFuZ2xlfFwKaW1hZ2lja2RyYXdfcmVuZGVyfGltYWdpY2tkcmF3X3JvdGF0ZXxpbWFnaWNrZHJhd19yb3VuZHJlY3RhbmdsZXxpbWFnaWNrZHJhd19zY2FsZXxpbWFnaWNrZHJhd19zZXRjbGlwcGF0aHxpbWFnaWNrZHJhd19zZXRjbGlwcnVsZXxcCmltYWdpY2tkcmF3X3NldGNsaXB1bml0c3xpbWFnaWNrZHJhd19zZXRmaWxsYWxwaGF8aW1hZ2lja2RyYXdfc2V0ZmlsbGNvbG9yfGltYWdpY2tkcmF3X3NldGZpbGxvcGFjaXR5fGltYWdpY2tkcmF3X3NldGZpbGxwYXR0ZXJudXJsfFwKaW1hZ2lja2RyYXdfc2V0ZmlsbHJ1bGV8aW1hZ2lja2RyYXdfc2V0Zm9udHxpbWFnaWNrZHJhd19zZXRmb250ZmFtaWx5fGltYWdpY2tkcmF3X3NldGZvbnRzaXplfGltYWdpY2tkcmF3X3NldGZvbnRzdHJldGNofFwKaW1hZ2lja2RyYXdfc2V0Zm9udHN0eWxlfGltYWdpY2tkcmF3X3NldGZvbnR3ZWlnaHR8aW1hZ2lja2RyYXdfc2V0Z3Jhdml0eXxpbWFnaWNrZHJhd19zZXRzdHJva2VhbHBoYXxpbWFnaWNrZHJhd19zZXRzdHJva2VhbnRpYWxpYXN8XAppbWFnaWNrZHJhd19zZXRzdHJva2Vjb2xvcnxpbWFnaWNrZHJhd19zZXRzdHJva2VkYXNoYXJyYXl8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlZGFzaG9mZnNldHxpbWFnaWNrZHJhd19zZXRzdHJva2VsaW5lY2FwfFwKaW1hZ2lja2RyYXdfc2V0c3Ryb2tlbGluZWpvaW58aW1hZ2lja2RyYXdfc2V0c3Ryb2tlbWl0ZXJsaW1pdHxpbWFnaWNrZHJhd19zZXRzdHJva2VvcGFjaXR5fGltYWdpY2tkcmF3X3NldHN0cm9rZXBhdHRlcm51cmx8XAppbWFnaWNrZHJhd19zZXRzdHJva2V3aWR0aHxpbWFnaWNrZHJhd19zZXR0ZXh0YWxpZ25tZW50fGltYWdpY2tkcmF3X3NldHRleHRhbnRpYWxpYXN8aW1hZ2lja2RyYXdfc2V0dGV4dGRlY29yYXRpb258XAppbWFnaWNrZHJhd19zZXR0ZXh0ZW5jb2Rpbmd8aW1hZ2lja2RyYXdfc2V0dGV4dHVuZGVyY29sb3J8aW1hZ2lja2RyYXdfc2V0dmVjdG9yZ3JhcGhpY3N8aW1hZ2lja2RyYXdfc2V0dmlld2JveHxpbWFnaWNrZHJhd19za2V3eHxcCmltYWdpY2tkcmF3X3NrZXd5fGltYWdpY2tkcmF3X3RyYW5zbGF0ZXxpbWFnaWNrcGl4ZWx8aW1hZ2lja3BpeGVsX2NsZWFyfGltYWdpY2twaXhlbF9jb25zdHJ1Y3R8aW1hZ2lja3BpeGVsX2Rlc3Ryb3l8aW1hZ2lja3BpeGVsX2dldGNvbG9yfFwKaW1hZ2lja3BpeGVsX2dldGNvbG9yYXNzdHJpbmd8aW1hZ2lja3BpeGVsX2dldGNvbG9yY291bnR8aW1hZ2lja3BpeGVsX2dldGNvbG9ydmFsdWV8aW1hZ2lja3BpeGVsX2dldGhzbHxpbWFnaWNrcGl4ZWxfaXNzaW1pbGFyfFwKaW1hZ2lja3BpeGVsX3NldGNvbG9yfGltYWdpY2twaXhlbF9zZXRjb2xvcnZhbHVlfGltYWdpY2twaXhlbF9zZXRoc2x8aW1hZ2lja3BpeGVsaXRlcmF0b3J8aW1hZ2lja3BpeGVsaXRlcmF0b3JfY2xlYXJ8XAppbWFnaWNrcGl4ZWxpdGVyYXRvcl9jb25zdHJ1Y3R8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZGVzdHJveXxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRjdXJyZW50aXRlcmF0b3Jyb3d8XAppbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRpdGVyYXRvcnJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRuZXh0aXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZ2V0cHJldmlvdXNpdGVyYXRvcnJvd3xcCmltYWdpY2twaXhlbGl0ZXJhdG9yX25ld3BpeGVsaXRlcmF0b3J8aW1hZ2lja3BpeGVsaXRlcmF0b3JfbmV3cGl4ZWxyZWdpb25pdGVyYXRvcnxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9yZXNldGl0ZXJhdG9yfFwKaW1hZ2lja3BpeGVsaXRlcmF0b3Jfc2V0aXRlcmF0b3JmaXJzdHJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9zZXRpdGVyYXRvcmxhc3Ryb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3Jfc2V0aXRlcmF0b3Jyb3d8XAppbWFnaWNrcGl4ZWxpdGVyYXRvcl9zeW5jaXRlcmF0b3J8aW1hcF84Yml0fGltYXBfYWxlcnRzfGltYXBfYXBwZW5kfGltYXBfYmFzZTY0fGltYXBfYmluYXJ5fGltYXBfYm9keXxpbWFwX2JvZHlzdHJ1Y3R8aW1hcF9jaGVja3xcCmltYXBfY2xlYXJmbGFnX2Z1bGx8aW1hcF9jbG9zZXxpbWFwX2NyZWF0ZXxpbWFwX2NyZWF0ZW1haWxib3h8aW1hcF9kZWxldGV8aW1hcF9kZWxldGVtYWlsYm94fGltYXBfZXJyb3JzfGltYXBfZXhwdW5nZXxpbWFwX2ZldGNoX292ZXJ2aWV3fFwKaW1hcF9mZXRjaGJvZHl8aW1hcF9mZXRjaGhlYWRlcnxpbWFwX2ZldGNobWltZXxpbWFwX2ZldGNoc3RydWN0dXJlfGltYXBfZmV0Y2h0ZXh0fGltYXBfZ2N8aW1hcF9nZXRfcXVvdGF8aW1hcF9nZXRfcXVvdGFyb290fGltYXBfZ2V0YWNsfFwKaW1hcF9nZXRtYWlsYm94ZXN8aW1hcF9nZXRzdWJzY3JpYmVkfGltYXBfaGVhZGVyfGltYXBfaGVhZGVyaW5mb3xpbWFwX2hlYWRlcnN8aW1hcF9sYXN0X2Vycm9yfGltYXBfbGlzdHxpbWFwX2xpc3RtYWlsYm94fGltYXBfbGlzdHNjYW58XAppbWFwX2xpc3RzdWJzY3JpYmVkfGltYXBfbHN1YnxpbWFwX21haWx8aW1hcF9tYWlsX2NvbXBvc2V8aW1hcF9tYWlsX2NvcHl8aW1hcF9tYWlsX21vdmV8aW1hcF9tYWlsYm94bXNnaW5mb3xpbWFwX21pbWVfaGVhZGVyX2RlY29kZXxcCmltYXBfbXNnbm98aW1hcF9udW1fbXNnfGltYXBfbnVtX3JlY2VudHxpbWFwX29wZW58aW1hcF9waW5nfGltYXBfcXByaW50fGltYXBfcmVuYW1lfGltYXBfcmVuYW1lbWFpbGJveHxpbWFwX3Jlb3BlbnxcCmltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3R8aW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVyc3xpbWFwX3JmYzgyMl93cml0ZV9hZGRyZXNzfGltYXBfc2F2ZWJvZHl8aW1hcF9zY2FufGltYXBfc2Nhbm1haWxib3h8aW1hcF9zZWFyY2h8XAppbWFwX3NldF9xdW90YXxpbWFwX3NldGFjbHxpbWFwX3NldGZsYWdfZnVsbHxpbWFwX3NvcnR8aW1hcF9zdGF0dXN8aW1hcF9zdWJzY3JpYmV8aW1hcF90aHJlYWR8aW1hcF90aW1lb3V0fGltYXBfdWlkfGltYXBfdW5kZWxldGV8XAppbWFwX3Vuc3Vic2NyaWJlfGltYXBfdXRmN19kZWNvZGV8aW1hcF91dGY3X2VuY29kZXxpbWFwX3V0Zjh8aW1wbGVtZW50c2ludGVyZmFjZXxpbXBsb2RlfGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlc3xpbl9hcnJheXxpbmNsdWRlfFwKaW5jbHVkZV9vbmNlfGluY2x1ZWRfZ2V0X2RhdGF8aW5ldF9udG9wfGluZXRfcHRvbnxpbmZpbml0ZWl0ZXJhdG9yfGluZ3Jlc19hdXRvY29tbWl0fGluZ3Jlc19hdXRvY29tbWl0X3N0YXRlfGluZ3Jlc19jaGFyc2V0fGluZ3Jlc19jbG9zZXxcCmluZ3Jlc19jb21taXR8aW5ncmVzX2Nvbm5lY3R8aW5ncmVzX2N1cnNvcnxpbmdyZXNfZXJybm98aW5ncmVzX2Vycm9yfGluZ3Jlc19lcnJzcWxzdGF0ZXxpbmdyZXNfZXNjYXBlX3N0cmluZ3xpbmdyZXNfZXhlY3V0ZXxcCmluZ3Jlc19mZXRjaF9hcnJheXxpbmdyZXNfZmV0Y2hfYXNzb2N8aW5ncmVzX2ZldGNoX29iamVjdHxpbmdyZXNfZmV0Y2hfcHJvY19yZXR1cm58aW5ncmVzX2ZldGNoX3Jvd3xpbmdyZXNfZmllbGRfbGVuZ3RofGluZ3Jlc19maWVsZF9uYW1lfFwKaW5ncmVzX2ZpZWxkX251bGxhYmxlfGluZ3Jlc19maWVsZF9wcmVjaXNpb258aW5ncmVzX2ZpZWxkX3NjYWxlfGluZ3Jlc19maWVsZF90eXBlfGluZ3Jlc19mcmVlX3Jlc3VsdHxpbmdyZXNfbmV4dF9lcnJvcnxpbmdyZXNfbnVtX2ZpZWxkc3xcCmluZ3Jlc19udW1fcm93c3xpbmdyZXNfcGNvbm5lY3R8aW5ncmVzX3ByZXBhcmV8aW5ncmVzX3F1ZXJ5fGluZ3Jlc19yZXN1bHRfc2Vla3xpbmdyZXNfcm9sbGJhY2t8aW5ncmVzX3NldF9lbnZpcm9ubWVudHxcCmluZ3Jlc191bmJ1ZmZlcmVkX3F1ZXJ5fGluaV9hbHRlcnxpbmlfZ2V0fGluaV9nZXRfYWxsfGluaV9yZXN0b3JlfGluaV9zZXR8aW5uYW1lc3BhY2V8aW5vdGlmeV9hZGRfd2F0Y2h8aW5vdGlmeV9pbml0fGlub3RpZnlfcXVldWVfbGVufFwKaW5vdGlmeV9yZWFkfGlub3RpZnlfcm1fd2F0Y2h8aW50ZXJmYWNlX2V4aXN0c3xpbnRsX2Vycm9yX25hbWV8aW50bF9nZXRfZXJyb3JfY29kZXxpbnRsX2dldF9lcnJvcl9tZXNzYWdlfGludGxfaXNfZmFpbHVyZXxcCmludGxkYXRlZm9ybWF0dGVyfGludHZhbHxpbnZhbGlkYXJndW1lbnRleGNlcHRpb258aW52b2tlfGludm9rZWFyZ3N8aXAybG9uZ3xpcHRjZW1iZWR8aXB0Y3BhcnNlfGlzX2F8aXNfYXJyYXl8aXNfYm9vbHxpc19jYWxsYWJsZXxpc19kaXJ8XAppc19kb3VibGV8aXNfZXhlY3V0YWJsZXxpc19maWxlfGlzX2Zpbml0ZXxpc19mbG9hdHxpc19pbmZpbml0ZXxpc19pbnR8aXNfaW50ZWdlcnxpc19saW5rfGlzX2xvbmd8aXNfbmFufGlzX251bGx8aXNfbnVtZXJpY3xpc19vYmplY3R8XAppc19yZWFkYWJsZXxpc19yZWFsfGlzX3Jlc291cmNlfGlzX3NjYWxhcnxpc19zb2FwX2ZhdWx0fGlzX3N0cmluZ3xpc19zdWJjbGFzc19vZnxpc191cGxvYWRlZF9maWxlfGlzX3dyaXRhYmxlfGlzX3dyaXRlYWJsZXxpc2Fic3RyYWN0fFwKaXNjbG9uZWFibGV8aXNkaXNhYmxlZHxpc2ZpbmFsfGlzaW5zdGFuY2V8aXNpbnN0YW50aWFibGV8aXNpbnRlcmZhY2V8aXNpbnRlcm5hbHxpc2l0ZXJhdGVhYmxlfGlzc2V0fGlzc3ViY2xhc3NvZnxpc3VzZXJkZWZpbmVkfGl0ZXJhdG9yfFwKaXRlcmF0b3JfYXBwbHl8aXRlcmF0b3JfY291bnR8aXRlcmF0b3JfdG9fYXJyYXl8aXRlcmF0b3JhZ2dyZWdhdGV8aXRlcmF0b3JpdGVyYXRvcnxqYXZhX2xhc3RfZXhjZXB0aW9uX2NsZWFyfGphdmFfbGFzdF9leGNlcHRpb25fZ2V0fFwKamRkYXlvZndlZWt8amRtb250aG5hbWV8amR0b2ZyZW5jaHxqZHRvZ3JlZ29yaWFufGpkdG9qZXdpc2h8amR0b2p1bGlhbnxqZHRvdW5peHxqZXdpc2h0b2pkfGpvaW58anBlZzJ3Ym1wfGpzb25fZGVjb2RlfGpzb25fZW5jb2RlfFwKanNvbl9sYXN0X2Vycm9yfGpzb25zZXJpYWxpemFibGV8anVkeXxqdWR5X3R5cGV8anVkeV92ZXJzaW9ufGp1bGlhbnRvamR8a2FkbTVfY2hwYXNzX3ByaW5jaXBhbHxrYWRtNV9jcmVhdGVfcHJpbmNpcGFsfFwKa2FkbTVfZGVsZXRlX3ByaW5jaXBhbHxrYWRtNV9kZXN0cm95fGthZG01X2ZsdXNofGthZG01X2dldF9wb2xpY2llc3xrYWRtNV9nZXRfcHJpbmNpcGFsfGthZG01X2dldF9wcmluY2lwYWxzfGthZG01X2luaXRfd2l0aF9wYXNzd29yZHxcCmthZG01X21vZGlmeV9wcmluY2lwYWx8a2V5fGtyc29ydHxrc29ydHxsY2ZpcnN0fGxjZ192YWx1ZXxsY2hncnB8bGNob3dufGxkYXBfODg1OV90b190NjF8bGRhcF9hZGR8bGRhcF9iaW5kfGxkYXBfY2xvc2V8bGRhcF9jb21wYXJlfFwKbGRhcF9jb25uZWN0fGxkYXBfY291bnRfZW50cmllc3xsZGFwX2RlbGV0ZXxsZGFwX2RuMnVmbnxsZGFwX2VycjJzdHJ8bGRhcF9lcnJub3xsZGFwX2Vycm9yfGxkYXBfZXhwbG9kZV9kbnxsZGFwX2ZpcnN0X2F0dHJpYnV0ZXxcCmxkYXBfZmlyc3RfZW50cnl8bGRhcF9maXJzdF9yZWZlcmVuY2V8bGRhcF9mcmVlX3Jlc3VsdHxsZGFwX2dldF9hdHRyaWJ1dGVzfGxkYXBfZ2V0X2RufGxkYXBfZ2V0X2VudHJpZXN8bGRhcF9nZXRfb3B0aW9ufGxkYXBfZ2V0X3ZhbHVlc3xcCmxkYXBfZ2V0X3ZhbHVlc19sZW58bGRhcF9saXN0fGxkYXBfbW9kX2FkZHxsZGFwX21vZF9kZWx8bGRhcF9tb2RfcmVwbGFjZXxsZGFwX21vZGlmeXxsZGFwX25leHRfYXR0cmlidXRlfGxkYXBfbmV4dF9lbnRyeXxcCmxkYXBfbmV4dF9yZWZlcmVuY2V8bGRhcF9wYXJzZV9yZWZlcmVuY2V8bGRhcF9wYXJzZV9yZXN1bHR8bGRhcF9yZWFkfGxkYXBfcmVuYW1lfGxkYXBfc2FzbF9iaW5kfGxkYXBfc2VhcmNofGxkYXBfc2V0X29wdGlvbnxcCmxkYXBfc2V0X3JlYmluZF9wcm9jfGxkYXBfc29ydHxsZGFwX3N0YXJ0X3Rsc3xsZGFwX3Q2MV90b184ODU5fGxkYXBfdW5iaW5kfGxlbmd0aGV4Y2VwdGlvbnxsZXZlbnNodGVpbnxsaWJ4bWxfY2xlYXJfZXJyb3JzfFwKbGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcnxsaWJ4bWxfZ2V0X2Vycm9yc3xsaWJ4bWxfZ2V0X2xhc3RfZXJyb3J8bGlieG1sX3NldF9zdHJlYW1zX2NvbnRleHR8bGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnN8bGlieG1sZXJyb3J8XApsaW1pdGl0ZXJhdG9yfGxpbmt8bGlua2luZm98bGlzdHxsb2NhbGV8bG9jYWxlY29udnxsb2NhbHRpbWV8bG9nfGxvZzEwfGxvZzFwfGxvZ2ljZXhjZXB0aW9ufGxvbmcyaXB8bHN0YXR8bHRyaW18bHpmX2NvbXByZXNzfFwKbHpmX2RlY29tcHJlc3N8bHpmX29wdGltaXplZF9mb3J8bV9jaGVja3N0YXR1c3xtX2NvbXBsZXRlYXV0aG9yaXphdGlvbnN8bV9jb25uZWN0fG1fY29ubmVjdGlvbmVycm9yfG1fZGVsZXRldHJhbnN8bV9kZXN0cm95Y29ubnxcCm1fZGVzdHJveWVuZ2luZXxtX2dldGNlbGx8bV9nZXRjZWxsYnludW18bV9nZXRjb21tYWRlbGltaXRlZHxtX2dldGhlYWRlcnxtX2luaXRjb25ufG1faW5pdGVuZ2luZXxtX2lzY29tbWFkZWxpbWl0ZWR8bV9tYXhjb25udGltZW91dHxcCm1fbW9uaXRvcnxtX251bWNvbHVtbnN8bV9udW1yb3dzfG1fcGFyc2Vjb21tYWRlbGltaXRlZHxtX3Jlc3BvbnNla2V5c3xtX3Jlc3BvbnNlcGFyYW18bV9yZXR1cm5zdGF0dXN8bV9zZXRibG9ja2luZ3xtX3NldGRyb3BmaWxlfG1fc2V0aXB8XAptX3NldHNzbHxtX3NldHNzbF9jYWZpbGV8bV9zZXRzc2xfZmlsZXN8bV9zZXR0aW1lb3V0fG1fc3NsY2VydF9nZW5faGFzaHxtX3RyYW5zYWN0aW9uc3NlbnR8bV90cmFuc2lucXVldWV8bV90cmFuc2tleXZhbHxtX3RyYW5zbmV3fFwKbV90cmFuc3NlbmR8bV91d2FpdHxtX3ZhbGlkYXRlaWRlbnRpZmllcnxtX3ZlcmlmeWNvbm5lY3Rpb258bV92ZXJpZnlzc2xjZXJ0fG1hZ2ljX3F1b3Rlc19ydW50aW1lfG1haWx8XAptYWlscGFyc2VfZGV0ZXJtaW5lX2Jlc3RfeGZlcl9lbmNvZGluZ3xtYWlscGFyc2VfbXNnX2NyZWF0ZXxtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydHxtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydF9maWxlfFwKbWFpbHBhcnNlX21zZ19leHRyYWN0X3dob2xlX3BhcnRfZmlsZXxtYWlscGFyc2VfbXNnX2ZyZWV8bWFpbHBhcnNlX21zZ19nZXRfcGFydHxtYWlscGFyc2VfbXNnX2dldF9wYXJ0X2RhdGF8bWFpbHBhcnNlX21zZ19nZXRfc3RydWN0dXJlfFwKbWFpbHBhcnNlX21zZ19wYXJzZXxtYWlscGFyc2VfbXNnX3BhcnNlX2ZpbGV8bWFpbHBhcnNlX3JmYzgyMl9wYXJzZV9hZGRyZXNzZXN8bWFpbHBhcnNlX3N0cmVhbV9lbmNvZGV8bWFpbHBhcnNlX3V1ZGVjb2RlX2FsbHxtYWlufG1heHxcCm1heGRiX2FmZmVjdGVkX3Jvd3N8bWF4ZGJfYXV0b2NvbW1pdHxtYXhkYl9iaW5kX3BhcmFtfG1heGRiX2JpbmRfcmVzdWx0fG1heGRiX2NoYW5nZV91c2VyfG1heGRiX2NoYXJhY3Rlcl9zZXRfbmFtZXxtYXhkYl9jbGllbnRfZW5jb2Rpbmd8XAptYXhkYl9jbG9zZXxtYXhkYl9jbG9zZV9sb25nX2RhdGF8bWF4ZGJfY29tbWl0fG1heGRiX2Nvbm5lY3R8bWF4ZGJfY29ubmVjdF9lcnJub3xtYXhkYl9jb25uZWN0X2Vycm9yfG1heGRiX2RhdGFfc2Vla3xtYXhkYl9kZWJ1Z3xcCm1heGRiX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXJ8bWF4ZGJfZGlzYWJsZV9ycGxfcGFyc2V8bWF4ZGJfZHVtcF9kZWJ1Z19pbmZvfG1heGRiX2VtYmVkZGVkX2Nvbm5lY3R8bWF4ZGJfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfFwKbWF4ZGJfZW5hYmxlX3JwbF9wYXJzZXxtYXhkYl9lcnJub3xtYXhkYl9lcnJvcnxtYXhkYl9lc2NhcGVfc3RyaW5nfG1heGRiX2V4ZWN1dGV8bWF4ZGJfZmV0Y2h8bWF4ZGJfZmV0Y2hfYXJyYXl8bWF4ZGJfZmV0Y2hfYXNzb2N8XAptYXhkYl9mZXRjaF9maWVsZHxtYXhkYl9mZXRjaF9maWVsZF9kaXJlY3R8bWF4ZGJfZmV0Y2hfZmllbGRzfG1heGRiX2ZldGNoX2xlbmd0aHN8bWF4ZGJfZmV0Y2hfb2JqZWN0fG1heGRiX2ZldGNoX3Jvd3xtYXhkYl9maWVsZF9jb3VudHxcCm1heGRiX2ZpZWxkX3NlZWt8bWF4ZGJfZmllbGRfdGVsbHxtYXhkYl9mcmVlX3Jlc3VsdHxtYXhkYl9nZXRfY2xpZW50X2luZm98bWF4ZGJfZ2V0X2NsaWVudF92ZXJzaW9ufG1heGRiX2dldF9ob3N0X2luZm98bWF4ZGJfZ2V0X21ldGFkYXRhfFwKbWF4ZGJfZ2V0X3Byb3RvX2luZm98bWF4ZGJfZ2V0X3NlcnZlcl9pbmZvfG1heGRiX2dldF9zZXJ2ZXJfdmVyc2lvbnxtYXhkYl9pbmZvfG1heGRiX2luaXR8bWF4ZGJfaW5zZXJ0X2lkfG1heGRiX2tpbGx8bWF4ZGJfbWFzdGVyX3F1ZXJ5fFwKbWF4ZGJfbW9yZV9yZXN1bHRzfG1heGRiX211bHRpX3F1ZXJ5fG1heGRiX25leHRfcmVzdWx0fG1heGRiX251bV9maWVsZHN8bWF4ZGJfbnVtX3Jvd3N8bWF4ZGJfb3B0aW9uc3xtYXhkYl9wYXJhbV9jb3VudHxtYXhkYl9waW5nfFwKbWF4ZGJfcHJlcGFyZXxtYXhkYl9xdWVyeXxtYXhkYl9yZWFsX2Nvbm5lY3R8bWF4ZGJfcmVhbF9lc2NhcGVfc3RyaW5nfG1heGRiX3JlYWxfcXVlcnl8bWF4ZGJfcmVwb3J0fG1heGRiX3JvbGxiYWNrfFwKbWF4ZGJfcnBsX3BhcnNlX2VuYWJsZWR8bWF4ZGJfcnBsX3Byb2JlfG1heGRiX3JwbF9xdWVyeV90eXBlfG1heGRiX3NlbGVjdF9kYnxtYXhkYl9zZW5kX2xvbmdfZGF0YXxtYXhkYl9zZW5kX3F1ZXJ5fG1heGRiX3NlcnZlcl9lbmR8XAptYXhkYl9zZXJ2ZXJfaW5pdHxtYXhkYl9zZXRfb3B0fG1heGRiX3NxbHN0YXRlfG1heGRiX3NzbF9zZXR8bWF4ZGJfc3RhdHxtYXhkYl9zdG10X2FmZmVjdGVkX3Jvd3N8bWF4ZGJfc3RtdF9iaW5kX3BhcmFtfFwKbWF4ZGJfc3RtdF9iaW5kX3Jlc3VsdHxtYXhkYl9zdG10X2Nsb3NlfG1heGRiX3N0bXRfY2xvc2VfbG9uZ19kYXRhfG1heGRiX3N0bXRfZGF0YV9zZWVrfG1heGRiX3N0bXRfZXJybm98bWF4ZGJfc3RtdF9lcnJvcnxcCm1heGRiX3N0bXRfZXhlY3V0ZXxtYXhkYl9zdG10X2ZldGNofG1heGRiX3N0bXRfZnJlZV9yZXN1bHR8bWF4ZGJfc3RtdF9pbml0fG1heGRiX3N0bXRfbnVtX3Jvd3N8bWF4ZGJfc3RtdF9wYXJhbV9jb3VudHxtYXhkYl9zdG10X3ByZXBhcmV8XAptYXhkYl9zdG10X3Jlc2V0fG1heGRiX3N0bXRfcmVzdWx0X21ldGFkYXRhfG1heGRiX3N0bXRfc2VuZF9sb25nX2RhdGF8bWF4ZGJfc3RtdF9zcWxzdGF0ZXxtYXhkYl9zdG10X3N0b3JlX3Jlc3VsdHxtYXhkYl9zdG9yZV9yZXN1bHR8XAptYXhkYl90aHJlYWRfaWR8bWF4ZGJfdGhyZWFkX3NhZmV8bWF4ZGJfdXNlX3Jlc3VsdHxtYXhkYl93YXJuaW5nX2NvdW50fG1iX2NoZWNrX2VuY29kaW5nfG1iX2NvbnZlcnRfY2FzZXxtYl9jb252ZXJ0X2VuY29kaW5nfFwKbWJfY29udmVydF9rYW5hfG1iX2NvbnZlcnRfdmFyaWFibGVzfG1iX2RlY29kZV9taW1laGVhZGVyfG1iX2RlY29kZV9udW1lcmljZW50aXR5fG1iX2RldGVjdF9lbmNvZGluZ3xtYl9kZXRlY3Rfb3JkZXJ8bWJfZW5jb2RlX21pbWVoZWFkZXJ8XAptYl9lbmNvZGVfbnVtZXJpY2VudGl0eXxtYl9lbmNvZGluZ19hbGlhc2VzfG1iX2VyZWd8bWJfZXJlZ19tYXRjaHxtYl9lcmVnX3JlcGxhY2V8bWJfZXJlZ19zZWFyY2h8bWJfZXJlZ19zZWFyY2hfZ2V0cG9zfFwKbWJfZXJlZ19zZWFyY2hfZ2V0cmVnc3xtYl9lcmVnX3NlYXJjaF9pbml0fG1iX2VyZWdfc2VhcmNoX3Bvc3xtYl9lcmVnX3NlYXJjaF9yZWdzfG1iX2VyZWdfc2VhcmNoX3NldHBvc3xtYl9lcmVnaXxtYl9lcmVnaV9yZXBsYWNlfFwKbWJfZ2V0X2luZm98bWJfaHR0cF9pbnB1dHxtYl9odHRwX291dHB1dHxtYl9pbnRlcm5hbF9lbmNvZGluZ3xtYl9sYW5ndWFnZXxtYl9saXN0X2VuY29kaW5nc3xtYl9vdXRwdXRfaGFuZGxlcnxtYl9wYXJzZV9zdHJ8XAptYl9wcmVmZXJyZWRfbWltZV9uYW1lfG1iX3JlZ2V4X2VuY29kaW5nfG1iX3JlZ2V4X3NldF9vcHRpb25zfG1iX3NlbmRfbWFpbHxtYl9zcGxpdHxtYl9zdHJjdXR8bWJfc3RyaW13aWR0aHxtYl9zdHJpcG9zfG1iX3N0cmlzdHJ8XAptYl9zdHJsZW58bWJfc3RycG9zfG1iX3N0cnJjaHJ8bWJfc3RycmljaHJ8bWJfc3Rycmlwb3N8bWJfc3RycnBvc3xtYl9zdHJzdHJ8bWJfc3RydG9sb3dlcnxtYl9zdHJ0b3VwcGVyfG1iX3N0cndpZHRofFwKbWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXJ8bWJfc3Vic3RyfG1iX3N1YnN0cl9jb3VudHxtY3J5cHRfY2JjfG1jcnlwdF9jZmJ8bWNyeXB0X2NyZWF0ZV9pdnxtY3J5cHRfZGVjcnlwdHxtY3J5cHRfZWNifFwKbWNyeXB0X2VuY19nZXRfYWxnb3JpdGhtc19uYW1lfG1jcnlwdF9lbmNfZ2V0X2Jsb2NrX3NpemV8bWNyeXB0X2VuY19nZXRfaXZfc2l6ZXxtY3J5cHRfZW5jX2dldF9rZXlfc2l6ZXxtY3J5cHRfZW5jX2dldF9tb2Rlc19uYW1lfFwKbWNyeXB0X2VuY19nZXRfc3VwcG9ydGVkX2tleV9zaXplc3xtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobXxtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlfG1jcnlwdF9lbmNfaXNfYmxvY2tfbW9kZXxcCm1jcnlwdF9lbmNfc2VsZl90ZXN0fG1jcnlwdF9lbmNyeXB0fG1jcnlwdF9nZW5lcmljfG1jcnlwdF9nZW5lcmljX2RlaW5pdHxtY3J5cHRfZ2VuZXJpY19lbmR8bWNyeXB0X2dlbmVyaWNfaW5pdHxtY3J5cHRfZ2V0X2Jsb2NrX3NpemV8XAptY3J5cHRfZ2V0X2NpcGhlcl9uYW1lfG1jcnlwdF9nZXRfaXZfc2l6ZXxtY3J5cHRfZ2V0X2tleV9zaXplfG1jcnlwdF9saXN0X2FsZ29yaXRobXN8bWNyeXB0X2xpc3RfbW9kZXN8bWNyeXB0X21vZHVsZV9jbG9zZXxcCm1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fYmxvY2tfc2l6ZXxtY3J5cHRfbW9kdWxlX2dldF9hbGdvX2tleV9zaXplfG1jcnlwdF9tb2R1bGVfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXN8bWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG18XAptY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlfG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfbW9kZXxtY3J5cHRfbW9kdWxlX29wZW58bWNyeXB0X21vZHVsZV9zZWxmX3Rlc3R8bWNyeXB0X29mYnxtZDV8bWQ1X2ZpbGV8XAptZGVjcnlwdF9nZW5lcmljfG1lbWNhY2hlfG1lbWNhY2hlX2RlYnVnfG1lbWNhY2hlZHxtZW1vcnlfZ2V0X3BlYWtfdXNhZ2V8bWVtb3J5X2dldF91c2FnZXxtZXNzYWdlZm9ybWF0dGVyfG1ldGFwaG9uZXxtZXRob2RfZXhpc3RzfG1oYXNofFwKbWhhc2hfY291bnR8bWhhc2hfZ2V0X2Jsb2NrX3NpemV8bWhhc2hfZ2V0X2hhc2hfbmFtZXxtaGFzaF9rZXlnZW5fczJrfG1pY3JvdGltZXxtaW1lX2NvbnRlbnRfdHlwZXxtaW58bWluZ19rZXlwcmVzc3xcCm1pbmdfc2V0Y3ViaWN0aHJlc2hvbGR8bWluZ19zZXRzY2FsZXxtaW5nX3NldHN3ZmNvbXByZXNzaW9ufG1pbmdfdXNlY29uc3RhbnRzfG1pbmdfdXNlc3dmdmVyc2lvbnxta2Rpcnxta3RpbWV8bW9uZXlfZm9ybWF0fG1vbmdvfFwKbW9uZ29iaW5kYXRhfG1vbmdvY29kZXxtb25nb2NvbGxlY3Rpb258bW9uZ29jb25uZWN0aW9uZXhjZXB0aW9ufG1vbmdvY3Vyc29yfG1vbmdvY3Vyc29yZXhjZXB0aW9ufG1vbmdvY3Vyc29ydGltZW91dGV4Y2VwdGlvbnxtb25nb2RhdGV8XAptb25nb2RifG1vbmdvZGJyZWZ8bW9uZ29leGNlcHRpb258bW9uZ29ncmlkZnN8bW9uZ29ncmlkZnNjdXJzb3J8bW9uZ29ncmlkZnNleGNlcHRpb258bW9uZ29ncmlkZnNmaWxlfG1vbmdvaWR8bW9uZ29pbnQzMnxtb25nb2ludDY0fFwKbW9uZ29tYXhrZXl8bW9uZ29taW5rZXl8bW9uZ29yZWdleHxtb25nb3RpbWVzdGFtcHxtb3ZlX3VwbG9hZGVkX2ZpbGV8bXBlZ2ZpbGV8bXFzZXJpZXNfYmFja3xtcXNlcmllc19iZWdpbnxtcXNlcmllc19jbG9zZXxtcXNlcmllc19jbWl0fFwKbXFzZXJpZXNfY29ubnxtcXNlcmllc19jb25ueHxtcXNlcmllc19kaXNjfG1xc2VyaWVzX2dldHxtcXNlcmllc19pbnF8bXFzZXJpZXNfb3BlbnxtcXNlcmllc19wdXR8bXFzZXJpZXNfcHV0MXxtcXNlcmllc19zZXR8XAptcXNlcmllc19zdHJlcnJvcnxtc2Vzc2lvbl9jb25uZWN0fG1zZXNzaW9uX2NvdW50fG1zZXNzaW9uX2NyZWF0ZXxtc2Vzc2lvbl9kZXN0cm95fG1zZXNzaW9uX2Rpc2Nvbm5lY3R8bXNlc3Npb25fZmluZHxtc2Vzc2lvbl9nZXR8XAptc2Vzc2lvbl9nZXRfYXJyYXl8bXNlc3Npb25fZ2V0X2RhdGF8bXNlc3Npb25faW5jfG1zZXNzaW9uX2xpc3R8bXNlc3Npb25fbGlzdHZhcnxtc2Vzc2lvbl9sb2NrfG1zZXNzaW9uX3BsdWdpbnxtc2Vzc2lvbl9yYW5kc3RyfFwKbXNlc3Npb25fc2V0fG1zZXNzaW9uX3NldF9hcnJheXxtc2Vzc2lvbl9zZXRfZGF0YXxtc2Vzc2lvbl90aW1lb3V0fG1zZXNzaW9uX3VuaXF8bXNlc3Npb25fdW5sb2NrfG1zZ19nZXRfcXVldWV8bXNnX3F1ZXVlX2V4aXN0c3xcCm1zZ19yZWNlaXZlfG1zZ19yZW1vdmVfcXVldWV8bXNnX3NlbmR8bXNnX3NldF9xdWV1ZXxtc2dfc3RhdF9xdWV1ZXxtc3FsfG1zcWxfYWZmZWN0ZWRfcm93c3xtc3FsX2Nsb3NlfG1zcWxfY29ubmVjdHxtc3FsX2NyZWF0ZV9kYnxcCm1zcWxfY3JlYXRlZGJ8bXNxbF9kYXRhX3NlZWt8bXNxbF9kYl9xdWVyeXxtc3FsX2RibmFtZXxtc3FsX2Ryb3BfZGJ8bXNxbF9lcnJvcnxtc3FsX2ZldGNoX2FycmF5fG1zcWxfZmV0Y2hfZmllbGR8bXNxbF9mZXRjaF9vYmplY3R8XAptc3FsX2ZldGNoX3Jvd3xtc3FsX2ZpZWxkX2ZsYWdzfG1zcWxfZmllbGRfbGVufG1zcWxfZmllbGRfbmFtZXxtc3FsX2ZpZWxkX3NlZWt8bXNxbF9maWVsZF90YWJsZXxtc3FsX2ZpZWxkX3R5cGV8bXNxbF9maWVsZGZsYWdzfFwKbXNxbF9maWVsZGxlbnxtc3FsX2ZpZWxkbmFtZXxtc3FsX2ZpZWxkdGFibGV8bXNxbF9maWVsZHR5cGV8bXNxbF9mcmVlX3Jlc3VsdHxtc3FsX2xpc3RfZGJzfG1zcWxfbGlzdF9maWVsZHN8bXNxbF9saXN0X3RhYmxlc3xcCm1zcWxfbnVtX2ZpZWxkc3xtc3FsX251bV9yb3dzfG1zcWxfbnVtZmllbGRzfG1zcWxfbnVtcm93c3xtc3FsX3Bjb25uZWN0fG1zcWxfcXVlcnl8bXNxbF9yZWdjYXNlfG1zcWxfcmVzdWx0fG1zcWxfc2VsZWN0X2RifG1zcWxfdGFibGVuYW1lfFwKbXNzcWxfYmluZHxtc3NxbF9jbG9zZXxtc3NxbF9jb25uZWN0fG1zc3FsX2RhdGFfc2Vla3xtc3NxbF9leGVjdXRlfG1zc3FsX2ZldGNoX2FycmF5fG1zc3FsX2ZldGNoX2Fzc29jfG1zc3FsX2ZldGNoX2JhdGNofFwKbXNzcWxfZmV0Y2hfZmllbGR8bXNzcWxfZmV0Y2hfb2JqZWN0fG1zc3FsX2ZldGNoX3Jvd3xtc3NxbF9maWVsZF9sZW5ndGh8bXNzcWxfZmllbGRfbmFtZXxtc3NxbF9maWVsZF9zZWVrfG1zc3FsX2ZpZWxkX3R5cGV8XAptc3NxbF9mcmVlX3Jlc3VsdHxtc3NxbF9mcmVlX3N0YXRlbWVudHxtc3NxbF9nZXRfbGFzdF9tZXNzYWdlfG1zc3FsX2d1aWRfc3RyaW5nfG1zc3FsX2luaXR8bXNzcWxfbWluX2Vycm9yX3NldmVyaXR5fFwKbXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHl8bXNzcWxfbmV4dF9yZXN1bHR8bXNzcWxfbnVtX2ZpZWxkc3xtc3NxbF9udW1fcm93c3xtc3NxbF9wY29ubmVjdHxtc3NxbF9xdWVyeXxtc3NxbF9yZXN1bHR8bXNzcWxfcm93c19hZmZlY3RlZHxcCm1zc3FsX3NlbGVjdF9kYnxtdF9nZXRyYW5kbWF4fG10X3JhbmR8bXRfc3JhbmR8bXVsdGlwbGVpdGVyYXRvcnxteXNxbF9hZmZlY3RlZF9yb3dzfG15c3FsX2NsaWVudF9lbmNvZGluZ3xteXNxbF9jbG9zZXxteXNxbF9jb25uZWN0fFwKbXlzcWxfY3JlYXRlX2RifG15c3FsX2RhdGFfc2Vla3xteXNxbF9kYl9uYW1lfG15c3FsX2RiX3F1ZXJ5fG15c3FsX2Ryb3BfZGJ8bXlzcWxfZXJybm98bXlzcWxfZXJyb3J8bXlzcWxfZXNjYXBlX3N0cmluZ3xteXNxbF9mZXRjaF9hcnJheXxcCm15c3FsX2ZldGNoX2Fzc29jfG15c3FsX2ZldGNoX2ZpZWxkfG15c3FsX2ZldGNoX2xlbmd0aHN8bXlzcWxfZmV0Y2hfb2JqZWN0fG15c3FsX2ZldGNoX3Jvd3xteXNxbF9maWVsZF9mbGFnc3xteXNxbF9maWVsZF9sZW58XApteXNxbF9maWVsZF9uYW1lfG15c3FsX2ZpZWxkX3NlZWt8bXlzcWxfZmllbGRfdGFibGV8bXlzcWxfZmllbGRfdHlwZXxteXNxbF9mcmVlX3Jlc3VsdHxteXNxbF9nZXRfY2xpZW50X2luZm98bXlzcWxfZ2V0X2hvc3RfaW5mb3xcCm15c3FsX2dldF9wcm90b19pbmZvfG15c3FsX2dldF9zZXJ2ZXJfaW5mb3xteXNxbF9pbmZvfG15c3FsX2luc2VydF9pZHxteXNxbF9saXN0X2Ric3xteXNxbF9saXN0X2ZpZWxkc3xteXNxbF9saXN0X3Byb2Nlc3Nlc3xcCm15c3FsX2xpc3RfdGFibGVzfG15c3FsX251bV9maWVsZHN8bXlzcWxfbnVtX3Jvd3N8bXlzcWxfcGNvbm5lY3R8bXlzcWxfcGluZ3xteXNxbF9xdWVyeXxteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmd8bXlzcWxfcmVzdWx0fFwKbXlzcWxfc2VsZWN0X2RifG15c3FsX3NldF9jaGFyc2V0fG15c3FsX3N0YXR8bXlzcWxfdGFibGVuYW1lfG15c3FsX3RocmVhZF9pZHxteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5fG15c3FsaXxteXNxbGlfYWZmZWN0ZWRfcm93c3xcCm15c3FsaV9hdXRvY29tbWl0fG15c3FsaV9iaW5kX3BhcmFtfG15c3FsaV9iaW5kX3Jlc3VsdHxteXNxbGlfY2FjaGVfc3RhdHN8bXlzcWxpX2NoYW5nZV91c2VyfG15c3FsaV9jaGFyYWN0ZXJfc2V0X25hbWV8XApteXNxbGlfY2xpZW50X2VuY29kaW5nfG15c3FsaV9jbG9zZXxteXNxbGlfY29tbWl0fG15c3FsaV9jb25uZWN0fG15c3FsaV9jb25uZWN0X2Vycm5vfG15c3FsaV9jb25uZWN0X2Vycm9yfG15c3FsaV9kYXRhX3NlZWt8XApteXNxbGlfZGVidWd8bXlzcWxpX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXJ8bXlzcWxpX2Rpc2FibGVfcnBsX3BhcnNlfG15c3FsaV9kcml2ZXJ8bXlzcWxpX2R1bXBfZGVidWdfaW5mb3xteXNxbGlfZW1iZWRkZWRfc2VydmVyX2VuZHxcCm15c3FsaV9lbWJlZGRlZF9zZXJ2ZXJfc3RhcnR8bXlzcWxpX2VuYWJsZV9yZWFkc19mcm9tX21hc3RlcnxteXNxbGlfZW5hYmxlX3JwbF9wYXJzZXxteXNxbGlfZXJybm98bXlzcWxpX2Vycm9yfG15c3FsaV9lc2NhcGVfc3RyaW5nfFwKbXlzcWxpX2V4ZWN1dGV8bXlzcWxpX2ZldGNofG15c3FsaV9mZXRjaF9hbGx8bXlzcWxpX2ZldGNoX2FycmF5fG15c3FsaV9mZXRjaF9hc3NvY3xteXNxbGlfZmV0Y2hfZmllbGR8bXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdHxcCm15c3FsaV9mZXRjaF9maWVsZHN8bXlzcWxpX2ZldGNoX2xlbmd0aHN8bXlzcWxpX2ZldGNoX29iamVjdHxteXNxbGlfZmV0Y2hfcm93fG15c3FsaV9maWVsZF9jb3VudHxteXNxbGlfZmllbGRfc2Vla3xteXNxbGlfZmllbGRfdGVsbHxcCm15c3FsaV9mcmVlX3Jlc3VsdHxteXNxbGlfZ2V0X2NoYXJzZXR8bXlzcWxpX2dldF9jbGllbnRfaW5mb3xteXNxbGlfZ2V0X2NsaWVudF9zdGF0c3xteXNxbGlfZ2V0X2NsaWVudF92ZXJzaW9ufG15c3FsaV9nZXRfY29ubmVjdGlvbl9zdGF0c3xcCm15c3FsaV9nZXRfaG9zdF9pbmZvfG15c3FsaV9nZXRfbWV0YWRhdGF8bXlzcWxpX2dldF9wcm90b19pbmZvfG15c3FsaV9nZXRfc2VydmVyX2luZm98bXlzcWxpX2dldF9zZXJ2ZXJfdmVyc2lvbnxteXNxbGlfZ2V0X3dhcm5pbmdzfFwKbXlzcWxpX2luZm98bXlzcWxpX2luaXR8bXlzcWxpX2luc2VydF9pZHxteXNxbGlfa2lsbHxteXNxbGlfbGlua19jb25zdHJ1Y3R8bXlzcWxpX21hc3Rlcl9xdWVyeXxteXNxbGlfbW9yZV9yZXN1bHRzfG15c3FsaV9tdWx0aV9xdWVyeXxcCm15c3FsaV9uZXh0X3Jlc3VsdHxteXNxbGlfbnVtX2ZpZWxkc3xteXNxbGlfbnVtX3Jvd3N8bXlzcWxpX29wdGlvbnN8bXlzcWxpX3BhcmFtX2NvdW50fG15c3FsaV9waW5nfG15c3FsaV9wb2xsfG15c3FsaV9wcmVwYXJlfFwKbXlzcWxpX3F1ZXJ5fG15c3FsaV9yZWFsX2Nvbm5lY3R8bXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZ3xteXNxbGlfcmVhbF9xdWVyeXxteXNxbGlfcmVhcF9hc3luY19xdWVyeXxteXNxbGlfcmVmcmVzaHxteXNxbGlfcmVwb3J0fFwKbXlzcWxpX3Jlc3VsdHxteXNxbGlfcm9sbGJhY2t8bXlzcWxpX3JwbF9wYXJzZV9lbmFibGVkfG15c3FsaV9ycGxfcHJvYmV8bXlzcWxpX3JwbF9xdWVyeV90eXBlfG15c3FsaV9zZWxlY3RfZGJ8bXlzcWxpX3NlbmRfbG9uZ19kYXRhfFwKbXlzcWxpX3NlbmRfcXVlcnl8bXlzcWxpX3NldF9jaGFyc2V0fG15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2RlZmF1bHR8bXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfaGFuZGxlcnxteXNxbGlfc2V0X29wdHxteXNxbGlfc2xhdmVfcXVlcnl8XApteXNxbGlfc3Fsc3RhdGV8bXlzcWxpX3NzbF9zZXR8bXlzcWxpX3N0YXR8bXlzcWxpX3N0bXR8bXlzcWxpX3N0bXRfYWZmZWN0ZWRfcm93c3xteXNxbGlfc3RtdF9hdHRyX2dldHxteXNxbGlfc3RtdF9hdHRyX3NldHxcCm15c3FsaV9zdG10X2JpbmRfcGFyYW18bXlzcWxpX3N0bXRfYmluZF9yZXN1bHR8bXlzcWxpX3N0bXRfY2xvc2V8bXlzcWxpX3N0bXRfZGF0YV9zZWVrfG15c3FsaV9zdG10X2Vycm5vfG15c3FsaV9zdG10X2Vycm9yfFwKbXlzcWxpX3N0bXRfZXhlY3V0ZXxteXNxbGlfc3RtdF9mZXRjaHxteXNxbGlfc3RtdF9maWVsZF9jb3VudHxteXNxbGlfc3RtdF9mcmVlX3Jlc3VsdHxteXNxbGlfc3RtdF9nZXRfcmVzdWx0fG15c3FsaV9zdG10X2dldF93YXJuaW5nc3xcCm15c3FsaV9zdG10X2luaXR8bXlzcWxpX3N0bXRfaW5zZXJ0X2lkfG15c3FsaV9zdG10X25leHRfcmVzdWx0fG15c3FsaV9zdG10X251bV9yb3dzfG15c3FsaV9zdG10X3BhcmFtX2NvdW50fG15c3FsaV9zdG10X3ByZXBhcmV8XApteXNxbGlfc3RtdF9yZXNldHxteXNxbGlfc3RtdF9yZXN1bHRfbWV0YWRhdGF8bXlzcWxpX3N0bXRfc2VuZF9sb25nX2RhdGF8bXlzcWxpX3N0bXRfc3Fsc3RhdGV8bXlzcWxpX3N0bXRfc3RvcmVfcmVzdWx0fG15c3FsaV9zdG9yZV9yZXN1bHR8XApteXNxbGlfdGhyZWFkX2lkfG15c3FsaV90aHJlYWRfc2FmZXxteXNxbGlfdXNlX3Jlc3VsdHxteXNxbGlfd2FybmluZ3xteXNxbGlfd2FybmluZ19jb3VudHxteXNxbG5kX21zX2dldF9zdGF0c3xcCm15c3FsbmRfbXNfcXVlcnlfaXNfc2VsZWN0fG15c3FsbmRfbXNfc2V0X3VzZXJfcGlja19zZXJ2ZXJ8bXlzcWxuZF9xY19jaGFuZ2VfaGFuZGxlcnxteXNxbG5kX3FjX2NsZWFyX2NhY2hlfG15c3FsbmRfcWNfZ2V0X2NhY2hlX2luZm98XApteXNxbG5kX3FjX2dldF9jb3JlX3N0YXRzfG15c3FsbmRfcWNfZ2V0X2hhbmRsZXJ8bXlzcWxuZF9xY19nZXRfcXVlcnlfdHJhY2VfbG9nfG15c3FsbmRfcWNfc2V0X3VzZXJfaGFuZGxlcnN8bmF0Y2FzZXNvcnR8bmF0c29ydHxcCm5jdXJzZXNfYWRkY2h8bmN1cnNlc19hZGRjaG5zdHJ8bmN1cnNlc19hZGRjaHN0cnxuY3Vyc2VzX2FkZG5zdHJ8bmN1cnNlc19hZGRzdHJ8bmN1cnNlc19hc3N1bWVfZGVmYXVsdF9jb2xvcnN8bmN1cnNlc19hdHRyb2ZmfFwKbmN1cnNlc19hdHRyb258bmN1cnNlc19hdHRyc2V0fG5jdXJzZXNfYmF1ZHJhdGV8bmN1cnNlc19iZWVwfG5jdXJzZXNfYmtnZHxuY3Vyc2VzX2JrZ2RzZXR8bmN1cnNlc19ib3JkZXJ8bmN1cnNlc19ib3R0b21fcGFuZWx8XApuY3Vyc2VzX2Nhbl9jaGFuZ2VfY29sb3J8bmN1cnNlc19jYnJlYWt8bmN1cnNlc19jbGVhcnxuY3Vyc2VzX2NscnRvYm90fG5jdXJzZXNfY2xydG9lb2x8bmN1cnNlc19jb2xvcl9jb250ZW50fG5jdXJzZXNfY29sb3Jfc2V0fFwKbmN1cnNlc19jdXJzX3NldHxuY3Vyc2VzX2RlZl9wcm9nX21vZGV8bmN1cnNlc19kZWZfc2hlbGxfbW9kZXxuY3Vyc2VzX2RlZmluZV9rZXl8bmN1cnNlc19kZWxfcGFuZWx8bmN1cnNlc19kZWxheV9vdXRwdXR8bmN1cnNlc19kZWxjaHxcCm5jdXJzZXNfZGVsZXRlbG58bmN1cnNlc19kZWx3aW58bmN1cnNlc19kb3VwZGF0ZXxuY3Vyc2VzX2VjaG98bmN1cnNlc19lY2hvY2hhcnxuY3Vyc2VzX2VuZHxuY3Vyc2VzX2VyYXNlfG5jdXJzZXNfZXJhc2VjaGFyfG5jdXJzZXNfZmlsdGVyfFwKbmN1cnNlc19mbGFzaHxuY3Vyc2VzX2ZsdXNoaW5wfG5jdXJzZXNfZ2V0Y2h8bmN1cnNlc19nZXRtYXh5eHxuY3Vyc2VzX2dldG1vdXNlfG5jdXJzZXNfZ2V0eXh8bmN1cnNlc19oYWxmZGVsYXl8bmN1cnNlc19oYXNfY29sb3JzfFwKbmN1cnNlc19oYXNfaWN8bmN1cnNlc19oYXNfaWx8bmN1cnNlc19oYXNfa2V5fG5jdXJzZXNfaGlkZV9wYW5lbHxuY3Vyc2VzX2hsaW5lfG5jdXJzZXNfaW5jaHxuY3Vyc2VzX2luaXR8bmN1cnNlc19pbml0X2NvbG9yfFwKbmN1cnNlc19pbml0X3BhaXJ8bmN1cnNlc19pbnNjaHxuY3Vyc2VzX2luc2RlbGxufG5jdXJzZXNfaW5zZXJ0bG58bmN1cnNlc19pbnNzdHJ8bmN1cnNlc19pbnN0cnxuY3Vyc2VzX2lzZW5kd2lufG5jdXJzZXNfa2V5b2t8XApuY3Vyc2VzX2tleXBhZHxuY3Vyc2VzX2tpbGxjaGFyfG5jdXJzZXNfbG9uZ25hbWV8bmN1cnNlc19tZXRhfG5jdXJzZXNfbW91c2VfdHJhZm98bmN1cnNlc19tb3VzZWludGVydmFsfG5jdXJzZXNfbW91c2VtYXNrfG5jdXJzZXNfbW92ZXxcCm5jdXJzZXNfbW92ZV9wYW5lbHxuY3Vyc2VzX212YWRkY2h8bmN1cnNlc19tdmFkZGNobnN0cnxuY3Vyc2VzX212YWRkY2hzdHJ8bmN1cnNlc19tdmFkZG5zdHJ8bmN1cnNlc19tdmFkZHN0cnxuY3Vyc2VzX212Y3VyfFwKbmN1cnNlc19tdmRlbGNofG5jdXJzZXNfbXZnZXRjaHxuY3Vyc2VzX212aGxpbmV8bmN1cnNlc19tdmluY2h8bmN1cnNlc19tdnZsaW5lfG5jdXJzZXNfbXZ3YWRkc3RyfG5jdXJzZXNfbmFwbXN8bmN1cnNlc19uZXdfcGFuZWx8XApuY3Vyc2VzX25ld3BhZHxuY3Vyc2VzX25ld3dpbnxuY3Vyc2VzX25sfG5jdXJzZXNfbm9jYnJlYWt8bmN1cnNlc19ub2VjaG98bmN1cnNlc19ub25sfG5jdXJzZXNfbm9xaWZsdXNofG5jdXJzZXNfbm9yYXd8XApuY3Vyc2VzX3BhaXJfY29udGVudHxuY3Vyc2VzX3BhbmVsX2Fib3ZlfG5jdXJzZXNfcGFuZWxfYmVsb3d8bmN1cnNlc19wYW5lbF93aW5kb3d8bmN1cnNlc19wbm91dHJlZnJlc2h8bmN1cnNlc19wcmVmcmVzaHxuY3Vyc2VzX3B1dHB8XApuY3Vyc2VzX3FpZmx1c2h8bmN1cnNlc19yYXd8bmN1cnNlc19yZWZyZXNofG5jdXJzZXNfcmVwbGFjZV9wYW5lbHxuY3Vyc2VzX3Jlc2V0X3Byb2dfbW9kZXxuY3Vyc2VzX3Jlc2V0X3NoZWxsX21vZGV8bmN1cnNlc19yZXNldHR5fFwKbmN1cnNlc19zYXZldHR5fG5jdXJzZXNfc2NyX2R1bXB8bmN1cnNlc19zY3JfaW5pdHxuY3Vyc2VzX3Njcl9yZXN0b3JlfG5jdXJzZXNfc2NyX3NldHxuY3Vyc2VzX3Njcmx8bmN1cnNlc19zaG93X3BhbmVsfG5jdXJzZXNfc2xrX2F0dHJ8XApuY3Vyc2VzX3Nsa19hdHRyb2ZmfG5jdXJzZXNfc2xrX2F0dHJvbnxuY3Vyc2VzX3Nsa19hdHRyc2V0fG5jdXJzZXNfc2xrX2NsZWFyfG5jdXJzZXNfc2xrX2NvbG9yfG5jdXJzZXNfc2xrX2luaXR8bmN1cnNlc19zbGtfbm91dHJlZnJlc2h8XApuY3Vyc2VzX3Nsa19yZWZyZXNofG5jdXJzZXNfc2xrX3Jlc3RvcmV8bmN1cnNlc19zbGtfc2V0fG5jdXJzZXNfc2xrX3RvdWNofG5jdXJzZXNfc3RhbmRlbmR8bmN1cnNlc19zdGFuZG91dHxuY3Vyc2VzX3N0YXJ0X2NvbG9yfFwKbmN1cnNlc190ZXJtYXR0cnN8bmN1cnNlc190ZXJtbmFtZXxuY3Vyc2VzX3RpbWVvdXR8bmN1cnNlc190b3BfcGFuZWx8bmN1cnNlc190eXBlYWhlYWR8bmN1cnNlc191bmdldGNofG5jdXJzZXNfdW5nZXRtb3VzZXxcCm5jdXJzZXNfdXBkYXRlX3BhbmVsc3xuY3Vyc2VzX3VzZV9kZWZhdWx0X2NvbG9yc3xuY3Vyc2VzX3VzZV9lbnZ8bmN1cnNlc191c2VfZXh0ZW5kZWRfbmFtZXN8bmN1cnNlc192aWRhdHRyfG5jdXJzZXNfdmxpbmV8bmN1cnNlc193YWRkY2h8XApuY3Vyc2VzX3dhZGRzdHJ8bmN1cnNlc193YXR0cm9mZnxuY3Vyc2VzX3dhdHRyb258bmN1cnNlc193YXR0cnNldHxuY3Vyc2VzX3dib3JkZXJ8bmN1cnNlc193Y2xlYXJ8bmN1cnNlc193Y29sb3Jfc2V0fG5jdXJzZXNfd2VyYXNlfFwKbmN1cnNlc193Z2V0Y2h8bmN1cnNlc193aGxpbmV8bmN1cnNlc193bW91c2VfdHJhZm98bmN1cnNlc193bW92ZXxuY3Vyc2VzX3dub3V0cmVmcmVzaHxuY3Vyc2VzX3dyZWZyZXNofG5jdXJzZXNfd3N0YW5kZW5kfFwKbmN1cnNlc193c3RhbmRvdXR8bmN1cnNlc193dmxpbmV8bmV3aW5zdGFuY2V8bmV3aW5zdGFuY2VhcmdzfG5ld3RfYmVsbHxuZXd0X2J1dHRvbnxuZXd0X2J1dHRvbl9iYXJ8bmV3dF9jZW50ZXJlZF93aW5kb3d8bmV3dF9jaGVja2JveHxcCm5ld3RfY2hlY2tib3hfZ2V0X3ZhbHVlfG5ld3RfY2hlY2tib3hfc2V0X2ZsYWdzfG5ld3RfY2hlY2tib3hfc2V0X3ZhbHVlfG5ld3RfY2hlY2tib3hfdHJlZXxuZXd0X2NoZWNrYm94X3RyZWVfYWRkX2l0ZW18XApuZXd0X2NoZWNrYm94X3RyZWVfZmluZF9pdGVtfG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfY3VycmVudHxuZXd0X2NoZWNrYm94X3RyZWVfZ2V0X2VudHJ5X3ZhbHVlfG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfbXVsdGlfc2VsZWN0aW9ufFwKbmV3dF9jaGVja2JveF90cmVlX2dldF9zZWxlY3Rpb258bmV3dF9jaGVja2JveF90cmVlX211bHRpfG5ld3RfY2hlY2tib3hfdHJlZV9zZXRfY3VycmVudHxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X2VudHJ5fFwKbmV3dF9jaGVja2JveF90cmVlX3NldF9lbnRyeV92YWx1ZXxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X3dpZHRofG5ld3RfY2xlYXJfa2V5X2J1ZmZlcnxuZXd0X2Nsc3xuZXd0X2NvbXBhY3RfYnV0dG9ufFwKbmV3dF9jb21wb25lbnRfYWRkX2NhbGxiYWNrfG5ld3RfY29tcG9uZW50X3Rha2VzX2ZvY3VzfG5ld3RfY3JlYXRlX2dyaWR8bmV3dF9jdXJzb3Jfb2ZmfG5ld3RfY3Vyc29yX29ufG5ld3RfZGVsYXl8bmV3dF9kcmF3X2Zvcm18XApuZXd0X2RyYXdfcm9vdF90ZXh0fG5ld3RfZW50cnl8bmV3dF9lbnRyeV9nZXRfdmFsdWV8bmV3dF9lbnRyeV9zZXR8bmV3dF9lbnRyeV9zZXRfZmlsdGVyfG5ld3RfZW50cnlfc2V0X2ZsYWdzfG5ld3RfZmluaXNoZWR8bmV3dF9mb3JtfFwKbmV3dF9mb3JtX2FkZF9jb21wb25lbnR8bmV3dF9mb3JtX2FkZF9jb21wb25lbnRzfG5ld3RfZm9ybV9hZGRfaG90X2tleXxuZXd0X2Zvcm1fZGVzdHJveXxuZXd0X2Zvcm1fZ2V0X2N1cnJlbnR8bmV3dF9mb3JtX3J1bnxcCm5ld3RfZm9ybV9zZXRfYmFja2dyb3VuZHxuZXd0X2Zvcm1fc2V0X2hlaWdodHxuZXd0X2Zvcm1fc2V0X3NpemV8bmV3dF9mb3JtX3NldF90aW1lcnxuZXd0X2Zvcm1fc2V0X3dpZHRofG5ld3RfZm9ybV93YXRjaF9mZHxcCm5ld3RfZ2V0X3NjcmVlbl9zaXplfG5ld3RfZ3JpZF9hZGRfY29tcG9uZW50c190b19mb3JtfG5ld3RfZ3JpZF9iYXNpY193aW5kb3d8bmV3dF9ncmlkX2ZyZWV8bmV3dF9ncmlkX2dldF9zaXplfG5ld3RfZ3JpZF9oX2Nsb3NlX3N0YWNrZWR8XApuZXd0X2dyaWRfaF9zdGFja2VkfG5ld3RfZ3JpZF9wbGFjZXxuZXd0X2dyaWRfc2V0X2ZpZWxkfG5ld3RfZ3JpZF9zaW1wbGVfd2luZG93fG5ld3RfZ3JpZF92X2Nsb3NlX3N0YWNrZWR8bmV3dF9ncmlkX3Zfc3RhY2tlZHxcCm5ld3RfZ3JpZF93cmFwcGVkX3dpbmRvd3xuZXd0X2dyaWRfd3JhcHBlZF93aW5kb3dfYXR8bmV3dF9pbml0fG5ld3RfbGFiZWx8bmV3dF9sYWJlbF9zZXRfdGV4dHxuZXd0X2xpc3Rib3h8bmV3dF9saXN0Ym94X2FwcGVuZF9lbnRyeXxcCm5ld3RfbGlzdGJveF9jbGVhcnxuZXd0X2xpc3Rib3hfY2xlYXJfc2VsZWN0aW9ufG5ld3RfbGlzdGJveF9kZWxldGVfZW50cnl8bmV3dF9saXN0Ym94X2dldF9jdXJyZW50fG5ld3RfbGlzdGJveF9nZXRfc2VsZWN0aW9ufFwKbmV3dF9saXN0Ym94X2luc2VydF9lbnRyeXxuZXd0X2xpc3Rib3hfaXRlbV9jb3VudHxuZXd0X2xpc3Rib3hfc2VsZWN0X2l0ZW18bmV3dF9saXN0Ym94X3NldF9jdXJyZW50fG5ld3RfbGlzdGJveF9zZXRfY3VycmVudF9ieV9rZXl8XApuZXd0X2xpc3Rib3hfc2V0X2RhdGF8bmV3dF9saXN0Ym94X3NldF9lbnRyeXxuZXd0X2xpc3Rib3hfc2V0X3dpZHRofG5ld3RfbGlzdGl0ZW18bmV3dF9saXN0aXRlbV9nZXRfZGF0YXxuZXd0X2xpc3RpdGVtX3NldHxcCm5ld3Rfb3Blbl93aW5kb3d8bmV3dF9wb3BfaGVscF9saW5lfG5ld3RfcG9wX3dpbmRvd3xuZXd0X3B1c2hfaGVscF9saW5lfG5ld3RfcmFkaW9fZ2V0X2N1cnJlbnR8bmV3dF9yYWRpb2J1dHRvbnxuZXd0X3JlZHJhd19oZWxwX2xpbmV8XApuZXd0X3JlZmxvd190ZXh0fG5ld3RfcmVmcmVzaHxuZXd0X3Jlc2l6ZV9zY3JlZW58bmV3dF9yZXN1bWV8bmV3dF9ydW5fZm9ybXxuZXd0X3NjYWxlfG5ld3Rfc2NhbGVfc2V0fG5ld3Rfc2Nyb2xsYmFyX3NldHxcCm5ld3Rfc2V0X2hlbHBfY2FsbGJhY2t8bmV3dF9zZXRfc3VzcGVuZF9jYWxsYmFja3xuZXd0X3N1c3BlbmR8bmV3dF90ZXh0Ym94fG5ld3RfdGV4dGJveF9nZXRfbnVtX2xpbmVzfG5ld3RfdGV4dGJveF9yZWZsb3dlZHxcCm5ld3RfdGV4dGJveF9zZXRfaGVpZ2h0fG5ld3RfdGV4dGJveF9zZXRfdGV4dHxuZXd0X3ZlcnRpY2FsX3Njcm9sbGJhcnxuZXd0X3dhaXRfZm9yX2tleXxuZXd0X3dpbl9jaG9pY2V8bmV3dF93aW5fZW50cmllc3xuZXd0X3dpbl9tZW51fFwKbmV3dF93aW5fbWVzc2FnZXxuZXd0X3dpbl9tZXNzYWdldnxuZXd0X3dpbl90ZXJuYXJ5fG5leHR8bmdldHRleHR8bmwyYnJ8bmxfbGFuZ2luZm98bm9yZXdpbmRpdGVyYXRvcnxub3JtYWxpemVyfG5vdGVzX2JvZHl8bm90ZXNfY29weV9kYnxcCm5vdGVzX2NyZWF0ZV9kYnxub3Rlc19jcmVhdGVfbm90ZXxub3Rlc19kcm9wX2RifG5vdGVzX2ZpbmRfbm90ZXxub3Rlc19oZWFkZXJfaW5mb3xub3Rlc19saXN0X21zZ3N8bm90ZXNfbWFya19yZWFkfG5vdGVzX21hcmtfdW5yZWFkfFwKbm90ZXNfbmF2X2NyZWF0ZXxub3Rlc19zZWFyY2h8bm90ZXNfdW5yZWFkfG5vdGVzX3ZlcnNpb258bnNhcGlfcmVxdWVzdF9oZWFkZXJzfG5zYXBpX3Jlc3BvbnNlX2hlYWRlcnN8bnNhcGlfdmlydHVhbHxudGhtYWN8bnVtYmVyX2Zvcm1hdHxcCm51bWJlcmZvcm1hdHRlcnxvYXV0aHxvYXV0aF9nZXRfc2JzfG9hdXRoX3VybGVuY29kZXxvYXV0aGV4Y2VwdGlvbnxvYXV0aHByb3ZpZGVyfG9iX2NsZWFufG9iX2RlZmxhdGVoYW5kbGVyfG9iX2VuZF9jbGVhbnxvYl9lbmRfZmx1c2h8XApvYl9ldGFnaGFuZGxlcnxvYl9mbHVzaHxvYl9nZXRfY2xlYW58b2JfZ2V0X2NvbnRlbnRzfG9iX2dldF9mbHVzaHxvYl9nZXRfbGVuZ3RofG9iX2dldF9sZXZlbHxvYl9nZXRfc3RhdHVzfG9iX2d6aGFuZGxlcnxvYl9pY29udl9oYW5kbGVyfFwKb2JfaW1wbGljaXRfZmx1c2h8b2JfaW5mbGF0ZWhhbmRsZXJ8b2JfbGlzdF9oYW5kbGVyc3xvYl9zdGFydHxvYl90aWR5aGFuZGxlcnxvY2lfYmluZF9hcnJheV9ieV9uYW1lfG9jaV9iaW5kX2J5X25hbWV8b2NpX2NhbmNlbHxcCm9jaV9jbGllbnRfdmVyc2lvbnxvY2lfY2xvc2V8b2NpX2NvbGxlY3Rpb25fYXBwZW5kfG9jaV9jb2xsZWN0aW9uX2Fzc2lnbnxvY2lfY29sbGVjdGlvbl9lbGVtZW50X2Fzc2lnbnxvY2lfY29sbGVjdGlvbl9lbGVtZW50X2dldHxcCm9jaV9jb2xsZWN0aW9uX2ZyZWV8b2NpX2NvbGxlY3Rpb25fbWF4fG9jaV9jb2xsZWN0aW9uX3NpemV8b2NpX2NvbGxlY3Rpb25fdHJpbXxvY2lfY29tbWl0fG9jaV9jb25uZWN0fG9jaV9kZWZpbmVfYnlfbmFtZXxvY2lfZXJyb3J8XApvY2lfZXhlY3V0ZXxvY2lfZmV0Y2h8b2NpX2ZldGNoX2FsbHxvY2lfZmV0Y2hfYXJyYXl8b2NpX2ZldGNoX2Fzc29jfG9jaV9mZXRjaF9vYmplY3R8b2NpX2ZldGNoX3Jvd3xvY2lfZmllbGRfaXNfbnVsbHxvY2lfZmllbGRfbmFtZXxcCm9jaV9maWVsZF9wcmVjaXNpb258b2NpX2ZpZWxkX3NjYWxlfG9jaV9maWVsZF9zaXplfG9jaV9maWVsZF90eXBlfG9jaV9maWVsZF90eXBlX3Jhd3xvY2lfZnJlZV9zdGF0ZW1lbnR8b2NpX2ludGVybmFsX2RlYnVnfG9jaV9sb2JfYXBwZW5kfFwKb2NpX2xvYl9jbG9zZXxvY2lfbG9iX2NvcHl8b2NpX2xvYl9lb2Z8b2NpX2xvYl9lcmFzZXxvY2lfbG9iX2V4cG9ydHxvY2lfbG9iX2ZsdXNofG9jaV9sb2JfZnJlZXxvY2lfbG9iX2dldGJ1ZmZlcmluZ3xvY2lfbG9iX2ltcG9ydHxcCm9jaV9sb2JfaXNfZXF1YWx8b2NpX2xvYl9sb2FkfG9jaV9sb2JfcmVhZHxvY2lfbG9iX3Jld2luZHxvY2lfbG9iX3NhdmV8b2NpX2xvYl9zYXZlZmlsZXxvY2lfbG9iX3NlZWt8b2NpX2xvYl9zZXRidWZmZXJpbmd8b2NpX2xvYl9zaXplfFwKb2NpX2xvYl90ZWxsfG9jaV9sb2JfdHJ1bmNhdGV8b2NpX2xvYl93cml0ZXxvY2lfbG9iX3dyaXRldGVtcG9yYXJ5fG9jaV9sb2Jfd3JpdGV0b2ZpbGV8b2NpX25ld19jb2xsZWN0aW9ufG9jaV9uZXdfY29ubmVjdHxvY2lfbmV3X2N1cnNvcnxcCm9jaV9uZXdfZGVzY3JpcHRvcnxvY2lfbnVtX2ZpZWxkc3xvY2lfbnVtX3Jvd3N8b2NpX3BhcnNlfG9jaV9wYXNzd29yZF9jaGFuZ2V8b2NpX3Bjb25uZWN0fG9jaV9yZXN1bHR8b2NpX3JvbGxiYWNrfG9jaV9zZXJ2ZXJfdmVyc2lvbnxcCm9jaV9zZXRfYWN0aW9ufG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXJ8b2NpX3NldF9jbGllbnRfaW5mb3xvY2lfc2V0X2VkaXRpb258b2NpX3NldF9tb2R1bGVfbmFtZXxvY2lfc2V0X3ByZWZldGNofG9jaV9zdGF0ZW1lbnRfdHlwZXxcCm9jaWJpbmRieW5hbWV8b2NpY2FuY2VsfG9jaWNsb3NlbG9ifG9jaWNvbGxhcHBlbmR8b2NpY29sbGFzc2lnbnxvY2ljb2xsYXNzaWduZWxlbXxvY2ljb2xsZ2V0ZWxlbXxvY2ljb2xsbWF4fG9jaWNvbGxzaXplfG9jaWNvbGx0cmltfFwKb2NpY29sdW1uaXNudWxsfG9jaWNvbHVtbm5hbWV8b2NpY29sdW1ucHJlY2lzaW9ufG9jaWNvbHVtbnNjYWxlfG9jaWNvbHVtbnNpemV8b2NpY29sdW1udHlwZXxvY2ljb2x1bW50eXBlcmF3fG9jaWNvbW1pdHxvY2lkZWZpbmVieW5hbWV8XApvY2llcnJvcnxvY2lleGVjdXRlfG9jaWZldGNofG9jaWZldGNoaW50b3xvY2lmZXRjaHN0YXRlbWVudHxvY2lmcmVlY29sbGVjdGlvbnxvY2lmcmVlY3Vyc29yfG9jaWZyZWVkZXNjfG9jaWZyZWVzdGF0ZW1lbnR8b2NpaW50ZXJuYWxkZWJ1Z3xcCm9jaWxvYWRsb2J8b2NpbG9nb2ZmfG9jaWxvZ29ufG9jaW5ld2NvbGxlY3Rpb258b2NpbmV3Y3Vyc29yfG9jaW5ld2Rlc2NyaXB0b3J8b2NpbmxvZ29ufG9jaW51bWNvbHN8b2NpcGFyc2V8b2NpcGxvZ29ufG9jaXJlc3VsdHxcCm9jaXJvbGxiYWNrfG9jaXJvd2NvdW50fG9jaXNhdmVsb2J8b2Npc2F2ZWxvYmZpbGV8b2Npc2VydmVydmVyc2lvbnxvY2lzZXRwcmVmZXRjaHxvY2lzdGF0ZW1lbnR0eXBlfG9jaXdyaXRlbG9idG9maWxlfG9jaXdyaXRldGVtcG9yYXJ5bG9ifFwKb2N0ZGVjfG9kYmNfYXV0b2NvbW1pdHxvZGJjX2Jpbm1vZGV8b2RiY19jbG9zZXxvZGJjX2Nsb3NlX2FsbHxvZGJjX2NvbHVtbnByaXZpbGVnZXN8b2RiY19jb2x1bW5zfG9kYmNfY29tbWl0fG9kYmNfY29ubmVjdHxvZGJjX2N1cnNvcnxcCm9kYmNfZGF0YV9zb3VyY2V8b2RiY19kb3xvZGJjX2Vycm9yfG9kYmNfZXJyb3Jtc2d8b2RiY19leGVjfG9kYmNfZXhlY3V0ZXxvZGJjX2ZldGNoX2FycmF5fG9kYmNfZmV0Y2hfaW50b3xvZGJjX2ZldGNoX29iamVjdHxcCm9kYmNfZmV0Y2hfcm93fG9kYmNfZmllbGRfbGVufG9kYmNfZmllbGRfbmFtZXxvZGJjX2ZpZWxkX251bXxvZGJjX2ZpZWxkX3ByZWNpc2lvbnxvZGJjX2ZpZWxkX3NjYWxlfG9kYmNfZmllbGRfdHlwZXxvZGJjX2ZvcmVpZ25rZXlzfFwKb2RiY19mcmVlX3Jlc3VsdHxvZGJjX2dldHR5cGVpbmZvfG9kYmNfbG9uZ3JlYWRsZW58b2RiY19uZXh0X3Jlc3VsdHxvZGJjX251bV9maWVsZHN8b2RiY19udW1fcm93c3xvZGJjX3Bjb25uZWN0fG9kYmNfcHJlcGFyZXxcCm9kYmNfcHJpbWFyeWtleXN8b2RiY19wcm9jZWR1cmVjb2x1bW5zfG9kYmNfcHJvY2VkdXJlc3xvZGJjX3Jlc3VsdHxvZGJjX3Jlc3VsdF9hbGx8b2RiY19yb2xsYmFja3xvZGJjX3NldG9wdGlvbnxvZGJjX3NwZWNpYWxjb2x1bW5zfFwKb2RiY19zdGF0aXN0aWNzfG9kYmNfdGFibGVwcml2aWxlZ2VzfG9kYmNfdGFibGVzfG9wZW5hbF9idWZmZXJfY3JlYXRlfG9wZW5hbF9idWZmZXJfZGF0YXxvcGVuYWxfYnVmZmVyX2Rlc3Ryb3l8b3BlbmFsX2J1ZmZlcl9nZXR8XApvcGVuYWxfYnVmZmVyX2xvYWR3YXZ8b3BlbmFsX2NvbnRleHRfY3JlYXRlfG9wZW5hbF9jb250ZXh0X2N1cnJlbnR8b3BlbmFsX2NvbnRleHRfZGVzdHJveXxvcGVuYWxfY29udGV4dF9wcm9jZXNzfG9wZW5hbF9jb250ZXh0X3N1c3BlbmR8XApvcGVuYWxfZGV2aWNlX2Nsb3NlfG9wZW5hbF9kZXZpY2Vfb3BlbnxvcGVuYWxfbGlzdGVuZXJfZ2V0fG9wZW5hbF9saXN0ZW5lcl9zZXR8b3BlbmFsX3NvdXJjZV9jcmVhdGV8b3BlbmFsX3NvdXJjZV9kZXN0cm95fFwKb3BlbmFsX3NvdXJjZV9nZXR8b3BlbmFsX3NvdXJjZV9wYXVzZXxvcGVuYWxfc291cmNlX3BsYXl8b3BlbmFsX3NvdXJjZV9yZXdpbmR8b3BlbmFsX3NvdXJjZV9zZXR8b3BlbmFsX3NvdXJjZV9zdG9wfG9wZW5hbF9zdHJlYW18b3BlbmRpcnxcCm9wZW5sb2d8b3BlbnNzbF9jaXBoZXJfaXZfbGVuZ3RofG9wZW5zc2xfY3NyX2V4cG9ydHxvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZXxvcGVuc3NsX2Nzcl9nZXRfcHVibGljX2tleXxvcGVuc3NsX2Nzcl9nZXRfc3ViamVjdHxcCm9wZW5zc2xfY3NyX25ld3xvcGVuc3NsX2Nzcl9zaWdufG9wZW5zc2xfZGVjcnlwdHxvcGVuc3NsX2RoX2NvbXB1dGVfa2V5fG9wZW5zc2xfZGlnZXN0fG9wZW5zc2xfZW5jcnlwdHxvcGVuc3NsX2Vycm9yX3N0cmluZ3xcCm9wZW5zc2xfZnJlZV9rZXl8b3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHN8b3BlbnNzbF9nZXRfbWRfbWV0aG9kc3xvcGVuc3NsX2dldF9wcml2YXRla2V5fG9wZW5zc2xfZ2V0X3B1YmxpY2tleXxvcGVuc3NsX29wZW58XApvcGVuc3NsX3BrY3MxMl9leHBvcnR8b3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF9wa2NzMTJfcmVhZHxvcGVuc3NsX3BrY3M3X2RlY3J5cHR8b3BlbnNzbF9wa2NzN19lbmNyeXB0fG9wZW5zc2xfcGtjczdfc2lnbnxcCm9wZW5zc2xfcGtjczdfdmVyaWZ5fG9wZW5zc2xfcGtleV9leHBvcnR8b3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlfG9wZW5zc2xfcGtleV9mcmVlfG9wZW5zc2xfcGtleV9nZXRfZGV0YWlsc3xvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGV8XApvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpY3xvcGVuc3NsX3BrZXlfbmV3fG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0fG9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0fG9wZW5zc2xfcHVibGljX2RlY3J5cHR8b3BlbnNzbF9wdWJsaWNfZW5jcnlwdHxcCm9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlc3xvcGVuc3NsX3NlYWx8b3BlbnNzbF9zaWdufG9wZW5zc2xfdmVyaWZ5fG9wZW5zc2xfeDUwOV9jaGVja19wcml2YXRlX2tleXxvcGVuc3NsX3g1MDlfY2hlY2twdXJwb3NlfFwKb3BlbnNzbF94NTA5X2V4cG9ydHxvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF94NTA5X2ZyZWV8b3BlbnNzbF94NTA5X3BhcnNlfG9wZW5zc2xfeDUwOV9yZWFkfG9yZHxvdXRlcml0ZXJhdG9yfFwKb3V0b2Zib3VuZHNleGNlcHRpb258b3V0b2ZyYW5nZWV4Y2VwdGlvbnxvdXRwdXRfYWRkX3Jld3JpdGVfdmFyfG91dHB1dF9yZXNldF9yZXdyaXRlX3ZhcnN8b3ZlcmZsb3dleGNlcHRpb258b3ZlcmxvYWR8b3ZlcnJpZGVfZnVuY3Rpb258XApvdnJpbW9zX2Nsb3NlfG92cmltb3NfY29tbWl0fG92cmltb3NfY29ubmVjdHxvdnJpbW9zX2N1cnNvcnxvdnJpbW9zX2V4ZWN8b3ZyaW1vc19leGVjdXRlfG92cmltb3NfZmV0Y2hfaW50b3xvdnJpbW9zX2ZldGNoX3Jvd3xcCm92cmltb3NfZmllbGRfbGVufG92cmltb3NfZmllbGRfbmFtZXxvdnJpbW9zX2ZpZWxkX251bXxvdnJpbW9zX2ZpZWxkX3R5cGV8b3ZyaW1vc19mcmVlX3Jlc3VsdHxvdnJpbW9zX2xvbmdyZWFkbGVufG92cmltb3NfbnVtX2ZpZWxkc3xcCm92cmltb3NfbnVtX3Jvd3N8b3ZyaW1vc19wcmVwYXJlfG92cmltb3NfcmVzdWx0fG92cmltb3NfcmVzdWx0X2FsbHxvdnJpbW9zX3JvbGxiYWNrfHBhY2t8cGFyZW50aXRlcmF0b3J8cGFyc2VfaW5pX2ZpbGV8cGFyc2VfaW5pX3N0cmluZ3xcCnBhcnNlX3N0cnxwYXJzZV91cmx8cGFyc2VraXRfY29tcGlsZV9maWxlfHBhcnNla2l0X2NvbXBpbGVfc3RyaW5nfHBhcnNla2l0X2Z1bmNfYXJnaW5mb3xwYXNzdGhydXxwYXRoaW5mb3xwY2xvc2V8cGNudGxfYWxhcm18cGNudGxfZXhlY3xcCnBjbnRsX2Zvcmt8cGNudGxfZ2V0cHJpb3JpdHl8cGNudGxfc2V0cHJpb3JpdHl8cGNudGxfc2lnbmFsfHBjbnRsX3NpZ25hbF9kaXNwYXRjaHxwY250bF9zaWdwcm9jbWFza3xwY250bF9zaWd0aW1lZHdhaXR8cGNudGxfc2lnd2FpdGluZm98XApwY250bF93YWl0fHBjbnRsX3dhaXRwaWR8cGNudGxfd2V4aXRzdGF0dXN8cGNudGxfd2lmZXhpdGVkfHBjbnRsX3dpZnNpZ25hbGVkfHBjbnRsX3dpZnN0b3BwZWR8cGNudGxfd3N0b3BzaWd8cGNudGxfd3Rlcm1zaWd8XApwZGZfYWN0aXZhdGVfaXRlbXxwZGZfYWRkX2Fubm90YXRpb258cGRmX2FkZF9ib29rbWFya3xwZGZfYWRkX2xhdW5jaGxpbmt8cGRmX2FkZF9sb2NhbGxpbmt8cGRmX2FkZF9uYW1lZGRlc3R8cGRmX2FkZF9ub3RlfHBkZl9hZGRfb3V0bGluZXxcCnBkZl9hZGRfcGRmbGlua3xwZGZfYWRkX3RhYmxlX2NlbGx8cGRmX2FkZF90ZXh0Zmxvd3xwZGZfYWRkX3RodW1ibmFpbHxwZGZfYWRkX3dlYmxpbmt8cGRmX2FyY3xwZGZfYXJjbnxwZGZfYXR0YWNoX2ZpbGV8cGRmX2JlZ2luX2RvY3VtZW50fFwKcGRmX2JlZ2luX2ZvbnR8cGRmX2JlZ2luX2dseXBofHBkZl9iZWdpbl9pdGVtfHBkZl9iZWdpbl9sYXllcnxwZGZfYmVnaW5fcGFnZXxwZGZfYmVnaW5fcGFnZV9leHR8cGRmX2JlZ2luX3BhdHRlcm58cGRmX2JlZ2luX3RlbXBsYXRlfFwKcGRmX2JlZ2luX3RlbXBsYXRlX2V4dHxwZGZfY2lyY2xlfHBkZl9jbGlwfHBkZl9jbG9zZXxwZGZfY2xvc2VfaW1hZ2V8cGRmX2Nsb3NlX3BkaXxwZGZfY2xvc2VfcGRpX3BhZ2V8cGRmX2Nsb3NlcGF0aHxcCnBkZl9jbG9zZXBhdGhfZmlsbF9zdHJva2V8cGRmX2Nsb3NlcGF0aF9zdHJva2V8cGRmX2NvbmNhdHxwZGZfY29udGludWVfdGV4dHxwZGZfY3JlYXRlXzNkdmlld3xwZGZfY3JlYXRlX2FjdGlvbnxwZGZfY3JlYXRlX2Fubm90YXRpb258XApwZGZfY3JlYXRlX2Jvb2ttYXJrfHBkZl9jcmVhdGVfZmllbGR8cGRmX2NyZWF0ZV9maWVsZGdyb3VwfHBkZl9jcmVhdGVfZ3N0YXRlfHBkZl9jcmVhdGVfcHZmfHBkZl9jcmVhdGVfdGV4dGZsb3d8cGRmX2N1cnZldG98XApwZGZfZGVmaW5lX2xheWVyfHBkZl9kZWxldGV8cGRmX2RlbGV0ZV9wdmZ8cGRmX2RlbGV0ZV90YWJsZXxwZGZfZGVsZXRlX3RleHRmbG93fHBkZl9lbmNvZGluZ19zZXRfY2hhcnxwZGZfZW5kX2RvY3VtZW50fHBkZl9lbmRfZm9udHxcCnBkZl9lbmRfZ2x5cGh8cGRmX2VuZF9pdGVtfHBkZl9lbmRfbGF5ZXJ8cGRmX2VuZF9wYWdlfHBkZl9lbmRfcGFnZV9leHR8cGRmX2VuZF9wYXR0ZXJufHBkZl9lbmRfdGVtcGxhdGV8cGRmX2VuZHBhdGh8cGRmX2ZpbGx8XApwZGZfZmlsbF9pbWFnZWJsb2NrfHBkZl9maWxsX3BkZmJsb2NrfHBkZl9maWxsX3N0cm9rZXxwZGZfZmlsbF90ZXh0YmxvY2t8cGRmX2ZpbmRmb250fHBkZl9maXRfaW1hZ2V8cGRmX2ZpdF9wZGlfcGFnZXxwZGZfZml0X3RhYmxlfFwKcGRmX2ZpdF90ZXh0Zmxvd3xwZGZfZml0X3RleHRsaW5lfHBkZl9nZXRfYXBpbmFtZXxwZGZfZ2V0X2J1ZmZlcnxwZGZfZ2V0X2Vycm1zZ3xwZGZfZ2V0X2Vycm51bXxwZGZfZ2V0X2ZvbnR8cGRmX2dldF9mb250bmFtZXxcCnBkZl9nZXRfZm9udHNpemV8cGRmX2dldF9pbWFnZV9oZWlnaHR8cGRmX2dldF9pbWFnZV93aWR0aHxwZGZfZ2V0X21ham9ydmVyc2lvbnxwZGZfZ2V0X21pbm9ydmVyc2lvbnxwZGZfZ2V0X3BhcmFtZXRlcnxcCnBkZl9nZXRfcGRpX3BhcmFtZXRlcnxwZGZfZ2V0X3BkaV92YWx1ZXxwZGZfZ2V0X3ZhbHVlfHBkZl9pbmZvX2ZvbnR8cGRmX2luZm9fbWF0Y2hib3h8cGRmX2luZm9fdGFibGV8cGRmX2luZm9fdGV4dGZsb3d8cGRmX2luZm9fdGV4dGxpbmV8XApwZGZfaW5pdGdyYXBoaWNzfHBkZl9saW5ldG98cGRmX2xvYWRfM2RkYXRhfHBkZl9sb2FkX2ZvbnR8cGRmX2xvYWRfaWNjcHJvZmlsZXxwZGZfbG9hZF9pbWFnZXxwZGZfbWFrZXNwb3Rjb2xvcnxwZGZfbW92ZXRvfHBkZl9uZXd8XApwZGZfb3Blbl9jY2l0dHxwZGZfb3Blbl9maWxlfHBkZl9vcGVuX2dpZnxwZGZfb3Blbl9pbWFnZXxwZGZfb3Blbl9pbWFnZV9maWxlfHBkZl9vcGVuX2pwZWd8cGRmX29wZW5fbWVtb3J5X2ltYWdlfHBkZl9vcGVuX3BkaXxcCnBkZl9vcGVuX3BkaV9kb2N1bWVudHxwZGZfb3Blbl9wZGlfcGFnZXxwZGZfb3Blbl90aWZmfHBkZl9wY29zX2dldF9udW1iZXJ8cGRmX3Bjb3NfZ2V0X3N0cmVhbXxwZGZfcGNvc19nZXRfc3RyaW5nfHBkZl9wbGFjZV9pbWFnZXxcCnBkZl9wbGFjZV9wZGlfcGFnZXxwZGZfcHJvY2Vzc19wZGl8cGRmX3JlY3R8cGRmX3Jlc3RvcmV8cGRmX3Jlc3VtZV9wYWdlfHBkZl9yb3RhdGV8cGRmX3NhdmV8cGRmX3NjYWxlfHBkZl9zZXRfYm9yZGVyX2NvbG9yfFwKcGRmX3NldF9ib3JkZXJfZGFzaHxwZGZfc2V0X2JvcmRlcl9zdHlsZXxwZGZfc2V0X2NoYXJfc3BhY2luZ3xwZGZfc2V0X2R1cmF0aW9ufHBkZl9zZXRfZ3N0YXRlfHBkZl9zZXRfaG9yaXpfc2NhbGluZ3xwZGZfc2V0X2luZm98XApwZGZfc2V0X2luZm9fYXV0aG9yfHBkZl9zZXRfaW5mb19jcmVhdG9yfHBkZl9zZXRfaW5mb19rZXl3b3Jkc3xwZGZfc2V0X2luZm9fc3ViamVjdHxwZGZfc2V0X2luZm9fdGl0bGV8cGRmX3NldF9sYXllcl9kZXBlbmRlbmN5fFwKcGRmX3NldF9sZWFkaW5nfHBkZl9zZXRfcGFyYW1ldGVyfHBkZl9zZXRfdGV4dF9tYXRyaXh8cGRmX3NldF90ZXh0X3Bvc3xwZGZfc2V0X3RleHRfcmVuZGVyaW5nfHBkZl9zZXRfdGV4dF9yaXNlfHBkZl9zZXRfdmFsdWV8XApwZGZfc2V0X3dvcmRfc3BhY2luZ3xwZGZfc2V0Y29sb3J8cGRmX3NldGRhc2h8cGRmX3NldGRhc2hwYXR0ZXJufHBkZl9zZXRmbGF0fHBkZl9zZXRmb250fHBkZl9zZXRncmF5fHBkZl9zZXRncmF5X2ZpbGx8cGRmX3NldGdyYXlfc3Ryb2tlfFwKcGRmX3NldGxpbmVjYXB8cGRmX3NldGxpbmVqb2lufHBkZl9zZXRsaW5ld2lkdGh8cGRmX3NldG1hdHJpeHxwZGZfc2V0bWl0ZXJsaW1pdHxwZGZfc2V0cG9seWRhc2h8cGRmX3NldHJnYmNvbG9yfHBkZl9zZXRyZ2Jjb2xvcl9maWxsfFwKcGRmX3NldHJnYmNvbG9yX3N0cm9rZXxwZGZfc2hhZGluZ3xwZGZfc2hhZGluZ19wYXR0ZXJufHBkZl9zaGZpbGx8cGRmX3Nob3d8cGRmX3Nob3dfYm94ZWR8cGRmX3Nob3dfeHl8cGRmX3NrZXd8cGRmX3N0cmluZ3dpZHRofHBkZl9zdHJva2V8XApwZGZfc3VzcGVuZF9wYWdlfHBkZl90cmFuc2xhdGV8cGRmX3V0ZjE2X3RvX3V0Zjh8cGRmX3V0ZjMyX3RvX3V0ZjE2fHBkZl91dGY4X3RvX3V0ZjE2fHBkb3xwZG9fY3VicmlkX3NjaGVtYXxwZG9fcGdzcWxsb2JjcmVhdGV8XApwZG9fcGdzcWxsb2JvcGVufHBkb19wZ3NxbGxvYnVubGlua3xwZG9fc3FsaXRlY3JlYXRlYWdncmVnYXRlfHBkb19zcWxpdGVjcmVhdGVmdW5jdGlvbnxwZG9leGNlcHRpb258cGRvc3RhdGVtZW50fHBmc29ja29wZW58XApwZ19hZmZlY3RlZF9yb3dzfHBnX2NhbmNlbF9xdWVyeXxwZ19jbGllbnRfZW5jb2Rpbmd8cGdfY2xvc2V8cGdfY29ubmVjdHxwZ19jb25uZWN0aW9uX2J1c3l8cGdfY29ubmVjdGlvbl9yZXNldHxwZ19jb25uZWN0aW9uX3N0YXR1c3xcCnBnX2NvbnZlcnR8cGdfY29weV9mcm9tfHBnX2NvcHlfdG98cGdfZGJuYW1lfHBnX2RlbGV0ZXxwZ19lbmRfY29weXxwZ19lc2NhcGVfYnl0ZWF8cGdfZXNjYXBlX3N0cmluZ3xwZ19leGVjdXRlfHBnX2ZldGNoX2FsbHxcCnBnX2ZldGNoX2FsbF9jb2x1bW5zfHBnX2ZldGNoX2FycmF5fHBnX2ZldGNoX2Fzc29jfHBnX2ZldGNoX29iamVjdHxwZ19mZXRjaF9yZXN1bHR8cGdfZmV0Y2hfcm93fHBnX2ZpZWxkX2lzX251bGx8cGdfZmllbGRfbmFtZXxcCnBnX2ZpZWxkX251bXxwZ19maWVsZF9wcnRsZW58cGdfZmllbGRfc2l6ZXxwZ19maWVsZF90YWJsZXxwZ19maWVsZF90eXBlfHBnX2ZpZWxkX3R5cGVfb2lkfHBnX2ZyZWVfcmVzdWx0fHBnX2dldF9ub3RpZnl8cGdfZ2V0X3BpZHxcCnBnX2dldF9yZXN1bHR8cGdfaG9zdHxwZ19pbnNlcnR8cGdfbGFzdF9lcnJvcnxwZ19sYXN0X25vdGljZXxwZ19sYXN0X29pZHxwZ19sb19jbG9zZXxwZ19sb19jcmVhdGV8cGdfbG9fZXhwb3J0fHBnX2xvX2ltcG9ydHxwZ19sb19vcGVufFwKcGdfbG9fcmVhZHxwZ19sb19yZWFkX2FsbHxwZ19sb19zZWVrfHBnX2xvX3RlbGx8cGdfbG9fdW5saW5rfHBnX2xvX3dyaXRlfHBnX21ldGFfZGF0YXxwZ19udW1fZmllbGRzfHBnX251bV9yb3dzfHBnX29wdGlvbnN8XApwZ19wYXJhbWV0ZXJfc3RhdHVzfHBnX3Bjb25uZWN0fHBnX3Bpbmd8cGdfcG9ydHxwZ19wcmVwYXJlfHBnX3B1dF9saW5lfHBnX3F1ZXJ5fHBnX3F1ZXJ5X3BhcmFtc3xwZ19yZXN1bHRfZXJyb3J8cGdfcmVzdWx0X2Vycm9yX2ZpZWxkfFwKcGdfcmVzdWx0X3NlZWt8cGdfcmVzdWx0X3N0YXR1c3xwZ19zZWxlY3R8cGdfc2VuZF9leGVjdXRlfHBnX3NlbmRfcHJlcGFyZXxwZ19zZW5kX3F1ZXJ5fHBnX3NlbmRfcXVlcnlfcGFyYW1zfHBnX3NldF9jbGllbnRfZW5jb2Rpbmd8XApwZ19zZXRfZXJyb3JfdmVyYm9zaXR5fHBnX3RyYWNlfHBnX3RyYW5zYWN0aW9uX3N0YXR1c3xwZ190dHl8cGdfdW5lc2NhcGVfYnl0ZWF8cGdfdW50cmFjZXxwZ191cGRhdGV8cGdfdmVyc2lvbnxwaHBfY2hlY2tfc3ludGF4fFwKcGhwX2luaV9sb2FkZWRfZmlsZXxwaHBfaW5pX3NjYW5uZWRfZmlsZXN8cGhwX2xvZ29fZ3VpZHxwaHBfc2FwaV9uYW1lfHBocF9zdHJpcF93aGl0ZXNwYWNlfHBocF91bmFtZXxwaHBjcmVkaXRzfHBocGluZm98cGhwdmVyc2lvbnxwaXxcCnBuZzJ3Ym1wfHBvcGVufHBvc3xwb3NpeF9hY2Nlc3N8cG9zaXhfY3Rlcm1pZHxwb3NpeF9lcnJub3xwb3NpeF9nZXRfbGFzdF9lcnJvcnxwb3NpeF9nZXRjd2R8cG9zaXhfZ2V0ZWdpZHxwb3NpeF9nZXRldWlkfHBvc2l4X2dldGdpZHxcCnBvc2l4X2dldGdyZ2lkfHBvc2l4X2dldGdybmFtfHBvc2l4X2dldGdyb3Vwc3xwb3NpeF9nZXRsb2dpbnxwb3NpeF9nZXRwZ2lkfHBvc2l4X2dldHBncnB8cG9zaXhfZ2V0cGlkfHBvc2l4X2dldHBwaWR8cG9zaXhfZ2V0cHduYW18XApwb3NpeF9nZXRwd3VpZHxwb3NpeF9nZXRybGltaXR8cG9zaXhfZ2V0c2lkfHBvc2l4X2dldHVpZHxwb3NpeF9pbml0Z3JvdXBzfHBvc2l4X2lzYXR0eXxwb3NpeF9raWxsfHBvc2l4X21rZmlmb3xwb3NpeF9ta25vZHxwb3NpeF9zZXRlZ2lkfFwKcG9zaXhfc2V0ZXVpZHxwb3NpeF9zZXRnaWR8cG9zaXhfc2V0cGdpZHxwb3NpeF9zZXRzaWR8cG9zaXhfc2V0dWlkfHBvc2l4X3N0cmVycm9yfHBvc2l4X3RpbWVzfHBvc2l4X3R0eW5hbWV8cG9zaXhfdW5hbWV8cG93fHByZWdfZmlsdGVyfFwKcHJlZ19ncmVwfHByZWdfbGFzdF9lcnJvcnxwcmVnX21hdGNofHByZWdfbWF0Y2hfYWxsfHByZWdfcXVvdGV8cHJlZ19yZXBsYWNlfHByZWdfcmVwbGFjZV9jYWxsYmFja3xwcmVnX3NwbGl0fHByZXZ8cHJpbnR8cHJpbnRfcnxcCnByaW50ZXJfYWJvcnR8cHJpbnRlcl9jbG9zZXxwcmludGVyX2NyZWF0ZV9icnVzaHxwcmludGVyX2NyZWF0ZV9kY3xwcmludGVyX2NyZWF0ZV9mb250fHByaW50ZXJfY3JlYXRlX3BlbnxwcmludGVyX2RlbGV0ZV9icnVzaHxcCnByaW50ZXJfZGVsZXRlX2RjfHByaW50ZXJfZGVsZXRlX2ZvbnR8cHJpbnRlcl9kZWxldGVfcGVufHByaW50ZXJfZHJhd19ibXB8cHJpbnRlcl9kcmF3X2Nob3JkfHByaW50ZXJfZHJhd19lbGlwc2V8cHJpbnRlcl9kcmF3X2xpbmV8XApwcmludGVyX2RyYXdfcGllfHByaW50ZXJfZHJhd19yZWN0YW5nbGV8cHJpbnRlcl9kcmF3X3JvdW5kcmVjdHxwcmludGVyX2RyYXdfdGV4dHxwcmludGVyX2VuZF9kb2N8cHJpbnRlcl9lbmRfcGFnZXxwcmludGVyX2dldF9vcHRpb258XApwcmludGVyX2xpc3R8cHJpbnRlcl9sb2dpY2FsX2ZvbnRoZWlnaHR8cHJpbnRlcl9vcGVufHByaW50ZXJfc2VsZWN0X2JydXNofHByaW50ZXJfc2VsZWN0X2ZvbnR8cHJpbnRlcl9zZWxlY3RfcGVufHByaW50ZXJfc2V0X29wdGlvbnxcCnByaW50ZXJfc3RhcnRfZG9jfHByaW50ZXJfc3RhcnRfcGFnZXxwcmludGVyX3dyaXRlfHByaW50Znxwcm9jX2Nsb3NlfHByb2NfZ2V0X3N0YXR1c3xwcm9jX25pY2V8cHJvY19vcGVufHByb2NfdGVybWluYXRlfHByb3BlcnR5X2V4aXN0c3xcCnBzX2FkZF9ib29rbWFya3xwc19hZGRfbGF1bmNobGlua3xwc19hZGRfbG9jYWxsaW5rfHBzX2FkZF9ub3RlfHBzX2FkZF9wZGZsaW5rfHBzX2FkZF93ZWJsaW5rfHBzX2FyY3xwc19hcmNufHBzX2JlZ2luX3BhZ2V8XApwc19iZWdpbl9wYXR0ZXJufHBzX2JlZ2luX3RlbXBsYXRlfHBzX2NpcmNsZXxwc19jbGlwfHBzX2Nsb3NlfHBzX2Nsb3NlX2ltYWdlfHBzX2Nsb3NlcGF0aHxwc19jbG9zZXBhdGhfc3Ryb2tlfHBzX2NvbnRpbnVlX3RleHR8cHNfY3VydmV0b3xcCnBzX2RlbGV0ZXxwc19lbmRfcGFnZXxwc19lbmRfcGF0dGVybnxwc19lbmRfdGVtcGxhdGV8cHNfZmlsbHxwc19maWxsX3N0cm9rZXxwc19maW5kZm9udHxwc19nZXRfYnVmZmVyfHBzX2dldF9wYXJhbWV0ZXJ8cHNfZ2V0X3ZhbHVlfFwKcHNfaHlwaGVuYXRlfHBzX2luY2x1ZGVfZmlsZXxwc19saW5ldG98cHNfbWFrZXNwb3Rjb2xvcnxwc19tb3ZldG98cHNfbmV3fHBzX29wZW5fZmlsZXxwc19vcGVuX2ltYWdlfHBzX29wZW5faW1hZ2VfZmlsZXxcCnBzX29wZW5fbWVtb3J5X2ltYWdlfHBzX3BsYWNlX2ltYWdlfHBzX3JlY3R8cHNfcmVzdG9yZXxwc19yb3RhdGV8cHNfc2F2ZXxwc19zY2FsZXxwc19zZXRfYm9yZGVyX2NvbG9yfHBzX3NldF9ib3JkZXJfZGFzaHxcCnBzX3NldF9ib3JkZXJfc3R5bGV8cHNfc2V0X2luZm98cHNfc2V0X3BhcmFtZXRlcnxwc19zZXRfdGV4dF9wb3N8cHNfc2V0X3ZhbHVlfHBzX3NldGNvbG9yfHBzX3NldGRhc2h8cHNfc2V0ZmxhdHxwc19zZXRmb250fHBzX3NldGdyYXl8XApwc19zZXRsaW5lY2FwfHBzX3NldGxpbmVqb2lufHBzX3NldGxpbmV3aWR0aHxwc19zZXRtaXRlcmxpbWl0fHBzX3NldG92ZXJwcmludG1vZGV8cHNfc2V0cG9seWRhc2h8cHNfc2hhZGluZ3xwc19zaGFkaW5nX3BhdHRlcm58cHNfc2hmaWxsfFwKcHNfc2hvd3xwc19zaG93Mnxwc19zaG93X2JveGVkfHBzX3Nob3dfeHl8cHNfc2hvd194eTJ8cHNfc3RyaW5nX2dlb21ldHJ5fHBzX3N0cmluZ3dpZHRofHBzX3N0cm9rZXxwc19zeW1ib2x8cHNfc3ltYm9sX25hbWV8XApwc19zeW1ib2xfd2lkdGh8cHNfdHJhbnNsYXRlfHBzcGVsbF9hZGRfdG9fcGVyc29uYWx8cHNwZWxsX2FkZF90b19zZXNzaW9ufHBzcGVsbF9jaGVja3xwc3BlbGxfY2xlYXJfc2Vzc2lvbnxwc3BlbGxfY29uZmlnX2NyZWF0ZXxcCnBzcGVsbF9jb25maWdfZGF0YV9kaXJ8cHNwZWxsX2NvbmZpZ19kaWN0X2Rpcnxwc3BlbGxfY29uZmlnX2lnbm9yZXxwc3BlbGxfY29uZmlnX21vZGV8cHNwZWxsX2NvbmZpZ19wZXJzb25hbHxwc3BlbGxfY29uZmlnX3JlcGx8XApwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyfHBzcGVsbF9jb25maWdfc2F2ZV9yZXBsfHBzcGVsbF9uZXd8cHNwZWxsX25ld19jb25maWd8cHNwZWxsX25ld19wZXJzb25hbHxwc3BlbGxfc2F2ZV93b3JkbGlzdHxcCnBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudHxwc3BlbGxfc3VnZ2VzdHxwdXRlbnZ8cHhfY2xvc2V8cHhfY3JlYXRlX2ZwfHB4X2RhdGUyc3RyaW5nfHB4X2RlbGV0ZXxweF9kZWxldGVfcmVjb3JkfHB4X2dldF9maWVsZHxweF9nZXRfaW5mb3xcCnB4X2dldF9wYXJhbWV0ZXJ8cHhfZ2V0X3JlY29yZHxweF9nZXRfc2NoZW1hfHB4X2dldF92YWx1ZXxweF9pbnNlcnRfcmVjb3JkfHB4X25ld3xweF9udW1maWVsZHN8cHhfbnVtcmVjb3Jkc3xweF9vcGVuX2ZwfHB4X3B1dF9yZWNvcmR8XApweF9yZXRyaWV2ZV9yZWNvcmR8cHhfc2V0X2Jsb2JfZmlsZXxweF9zZXRfcGFyYW1ldGVyfHB4X3NldF90YWJsZW5hbWV8cHhfc2V0X3RhcmdldGVuY29kaW5nfHB4X3NldF92YWx1ZXxweF90aW1lc3RhbXAyc3RyaW5nfFwKcHhfdXBkYXRlX3JlY29yZHxxZG9tX2Vycm9yfHFkb21fdHJlZXxxdW90ZWRfcHJpbnRhYmxlX2RlY29kZXxxdW90ZWRfcHJpbnRhYmxlX2VuY29kZXxxdW90ZW1ldGF8cmFkMmRlZ3xyYWRpdXNfYWNjdF9vcGVufFwKcmFkaXVzX2FkZF9zZXJ2ZXJ8cmFkaXVzX2F1dGhfb3BlbnxyYWRpdXNfY2xvc2V8cmFkaXVzX2NvbmZpZ3xyYWRpdXNfY3JlYXRlX3JlcXVlc3R8cmFkaXVzX2N2dF9hZGRyfHJhZGl1c19jdnRfaW50fHJhZGl1c19jdnRfc3RyaW5nfFwKcmFkaXVzX2RlbWFuZ2xlfHJhZGl1c19kZW1hbmdsZV9tcHBlX2tleXxyYWRpdXNfZ2V0X2F0dHJ8cmFkaXVzX2dldF92ZW5kb3JfYXR0cnxyYWRpdXNfcHV0X2FkZHJ8cmFkaXVzX3B1dF9hdHRyfHJhZGl1c19wdXRfaW50fFwKcmFkaXVzX3B1dF9zdHJpbmd8cmFkaXVzX3B1dF92ZW5kb3JfYWRkcnxyYWRpdXNfcHV0X3ZlbmRvcl9hdHRyfHJhZGl1c19wdXRfdmVuZG9yX2ludHxyYWRpdXNfcHV0X3ZlbmRvcl9zdHJpbmd8XApyYWRpdXNfcmVxdWVzdF9hdXRoZW50aWNhdG9yfHJhZGl1c19zZW5kX3JlcXVlc3R8cmFkaXVzX3NlcnZlcl9zZWNyZXR8cmFkaXVzX3N0cmVycm9yfHJhbmR8cmFuZ2V8cmFuZ2VleGNlcHRpb258cmFyX3dyYXBwZXJfY2FjaGVfc3RhdHN8XApyYXJhcmNoaXZlfHJhcmVudHJ5fHJhcmV4Y2VwdGlvbnxyYXd1cmxkZWNvZGV8cmF3dXJsZW5jb2RlfHJlYWRfZXhpZl9kYXRhfHJlYWRkaXJ8cmVhZGZpbGV8cmVhZGd6ZmlsZXxyZWFkbGluZXxyZWFkbGluZV9hZGRfaGlzdG9yeXxcCnJlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbHxyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX3JlbW92ZXxyZWFkbGluZV9jYWxsYmFja19yZWFkX2NoYXJ8cmVhZGxpbmVfY2xlYXJfaGlzdG9yeXxcCnJlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb258cmVhZGxpbmVfaW5mb3xyZWFkbGluZV9saXN0X2hpc3Rvcnl8cmVhZGxpbmVfb25fbmV3X2xpbmV8cmVhZGxpbmVfcmVhZF9oaXN0b3J5fHJlYWRsaW5lX3JlZGlzcGxheXxcCnJlYWRsaW5lX3dyaXRlX2hpc3Rvcnl8cmVhZGxpbmt8cmVhbHBhdGh8cmVhbHBhdGhfY2FjaGVfZ2V0fHJlYWxwYXRoX2NhY2hlX3NpemV8cmVjb2RlfHJlY29kZV9maWxlfHJlY29kZV9zdHJpbmd8cmVjdXJzaXZlYXJyYXlpdGVyYXRvcnxcCnJlY3Vyc2l2ZWNhY2hpbmdpdGVyYXRvcnxyZWN1cnNpdmVjYWxsYmFja2ZpbHRlcml0ZXJhdG9yfHJlY3Vyc2l2ZWRpcmVjdG9yeWl0ZXJhdG9yfHJlY3Vyc2l2ZWZpbHRlcml0ZXJhdG9yfHJlY3Vyc2l2ZWl0ZXJhdG9yfFwKcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvcnxyZWN1cnNpdmVyZWdleGl0ZXJhdG9yfHJlY3Vyc2l2ZXRyZWVpdGVyYXRvcnxyZWZsZWN0aW9ufHJlZmxlY3Rpb25jbGFzc3xyZWZsZWN0aW9uZXhjZXB0aW9ufHJlZmxlY3Rpb25leHRlbnNpb258XApyZWZsZWN0aW9uZnVuY3Rpb258cmVmbGVjdGlvbmZ1bmN0aW9uYWJzdHJhY3R8cmVmbGVjdGlvbm1ldGhvZHxyZWZsZWN0aW9ub2JqZWN0fHJlZmxlY3Rpb25wYXJhbWV0ZXJ8cmVmbGVjdGlvbnByb3BlcnR5fHJlZmxlY3RvcnxcCnJlZ2V4aXRlcmF0b3J8cmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb258cmVnaXN0ZXJfdGlja19mdW5jdGlvbnxyZW5hbWV8cmVuYW1lX2Z1bmN0aW9ufHJlcXVpcmV8cmVxdWlyZV9vbmNlfHJlc2V0fHJlc2V0VmFsdWV8XApyZXNvdXJjZWJ1bmRsZXxyZXN0b3JlX2Vycm9yX2hhbmRsZXJ8cmVzdG9yZV9leGNlcHRpb25faGFuZGxlcnxyZXN0b3JlX2luY2x1ZGVfcGF0aHxyZXR1cm58cmV3aW5kfHJld2luZGRpcnxybWRpcnxyb3VuZHxycG1fY2xvc2V8XApycG1fZ2V0X3RhZ3xycG1faXNfdmFsaWR8cnBtX29wZW58cnBtX3ZlcnNpb258cnJkX2NyZWF0ZXxycmRfZXJyb3J8cnJkX2ZldGNofHJyZF9maXJzdHxycmRfZ3JhcGh8cnJkX2luZm98cnJkX2xhc3R8cnJkX2xhc3R1cGRhdGV8XApycmRfcmVzdG9yZXxycmRfdHVuZXxycmRfdXBkYXRlfHJyZF94cG9ydHxycmRjcmVhdG9yfHJyZGdyYXBofHJyZHVwZGF0ZXJ8cnNvcnR8cnRyaW18cnVua2l0X2NsYXNzX2Fkb3B0fHJ1bmtpdF9jbGFzc19lbWFuY2lwYXRlfFwKcnVua2l0X2NvbnN0YW50X2FkZHxydW5raXRfY29uc3RhbnRfcmVkZWZpbmV8cnVua2l0X2NvbnN0YW50X3JlbW92ZXxydW5raXRfZnVuY3Rpb25fYWRkfHJ1bmtpdF9mdW5jdGlvbl9jb3B5fHJ1bmtpdF9mdW5jdGlvbl9yZWRlZmluZXxcCnJ1bmtpdF9mdW5jdGlvbl9yZW1vdmV8cnVua2l0X2Z1bmN0aW9uX3JlbmFtZXxydW5raXRfaW1wb3J0fHJ1bmtpdF9saW50fHJ1bmtpdF9saW50X2ZpbGV8cnVua2l0X21ldGhvZF9hZGR8cnVua2l0X21ldGhvZF9jb3B5fFwKcnVua2l0X21ldGhvZF9yZWRlZmluZXxydW5raXRfbWV0aG9kX3JlbW92ZXxydW5raXRfbWV0aG9kX3JlbmFtZXxydW5raXRfcmV0dXJuX3ZhbHVlX3VzZWR8cnVua2l0X3NhbmRib3hfb3V0cHV0X2hhbmRsZXJ8XApydW5raXRfc3VwZXJnbG9iYWxzfHJ1bnRpbWVleGNlcHRpb258c2FtY29ubmVjdGlvbl9jb21taXR8c2FtY29ubmVjdGlvbl9jb25uZWN0fHNhbWNvbm5lY3Rpb25fY29uc3RydWN0b3J8c2FtY29ubmVjdGlvbl9kaXNjb25uZWN0fFwKc2FtY29ubmVjdGlvbl9lcnJub3xzYW1jb25uZWN0aW9uX2Vycm9yfHNhbWNvbm5lY3Rpb25faXNjb25uZWN0ZWR8c2FtY29ubmVjdGlvbl9wZWVrfHNhbWNvbm5lY3Rpb25fcGVla2FsbHxzYW1jb25uZWN0aW9uX3JlY2VpdmV8XApzYW1jb25uZWN0aW9uX3JlbW92ZXxzYW1jb25uZWN0aW9uX3JvbGxiYWNrfHNhbWNvbm5lY3Rpb25fc2VuZHxzYW1jb25uZWN0aW9uX3NldERlYnVnfHNhbWNvbm5lY3Rpb25fc3Vic2NyaWJlfHNhbWNvbm5lY3Rpb25fdW5zdWJzY3JpYmV8XApzYW1tZXNzYWdlX2JvZHl8c2FtbWVzc2FnZV9jb25zdHJ1Y3RvcnxzYW1tZXNzYWdlX2hlYWRlcnxzY2FfY3JlYXRlZGF0YW9iamVjdHxzY2FfZ2V0c2VydmljZXxzY2FfbG9jYWxwcm94eV9jcmVhdGVkYXRhb2JqZWN0fFwKc2NhX3NvYXBwcm94eV9jcmVhdGVkYXRhb2JqZWN0fHNjYW5kaXJ8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2JlZ2lubG9nZ2luZ3xzZG9fZGFzX2NoYW5nZXN1bW1hcnlfZW5kbG9nZ2luZ3xcCnNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRjaGFuZ2VkZGF0YW9iamVjdHN8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2dldGNoYW5nZXR5cGV8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2dldG9sZGNvbnRhaW5lcnxcCnNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRvbGR2YWx1ZXN8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2lzbG9nZ2luZ3xzZG9fZGFzX2RhdGFmYWN0b3J5X2FkZHByb3BlcnR5dG90eXBlfHNkb19kYXNfZGF0YWZhY3RvcnlfYWRkdHlwZXxcCnNkb19kYXNfZGF0YWZhY3RvcnlfZ2V0ZGF0YWZhY3Rvcnl8c2RvX2Rhc19kYXRhb2JqZWN0X2dldGNoYW5nZXN1bW1hcnl8c2RvX2Rhc19yZWxhdGlvbmFsX2FwcGx5Y2hhbmdlc3xzZG9fZGFzX3JlbGF0aW9uYWxfY29uc3RydWN0fFwKc2RvX2Rhc19yZWxhdGlvbmFsX2NyZWF0ZXJvb3RkYXRhb2JqZWN0fHNkb19kYXNfcmVsYXRpb25hbF9leGVjdXRlcHJlcGFyZWRxdWVyeXxzZG9fZGFzX3JlbGF0aW9uYWxfZXhlY3V0ZXF1ZXJ5fFwKc2RvX2Rhc19zZXR0aW5nX2dldGxpc3RpbmRleHxzZG9fZGFzX3NldHRpbmdfZ2V0cHJvcGVydHlpbmRleHxzZG9fZGFzX3NldHRpbmdfZ2V0cHJvcGVydHluYW1lfHNkb19kYXNfc2V0dGluZ19nZXR2YWx1ZXxcCnNkb19kYXNfc2V0dGluZ19pc3NldHxzZG9fZGFzX3htbF9hZGR0eXBlc3xzZG9fZGFzX3htbF9jcmVhdGV8c2RvX2Rhc194bWxfY3JlYXRlZGF0YW9iamVjdHxzZG9fZGFzX3htbF9jcmVhdGVkb2N1bWVudHxcCnNkb19kYXNfeG1sX2RvY3VtZW50X2dldHJvb3RkYXRhb2JqZWN0fHNkb19kYXNfeG1sX2RvY3VtZW50X2dldHJvb3RlbGVtZW50bmFtZXxzZG9fZGFzX3htbF9kb2N1bWVudF9nZXRyb290ZWxlbWVudHVyaXxcCnNkb19kYXNfeG1sX2RvY3VtZW50X3NldGVuY29kaW5nfHNkb19kYXNfeG1sX2RvY3VtZW50X3NldHhtbGRlY2xhcmF0aW9ufHNkb19kYXNfeG1sX2RvY3VtZW50X3NldHhtbHZlcnNpb258c2RvX2Rhc194bWxfbG9hZGZpbGV8XApzZG9fZGFzX3htbF9sb2Fkc3RyaW5nfHNkb19kYXNfeG1sX3NhdmVmaWxlfHNkb19kYXNfeG1sX3NhdmVzdHJpbmd8c2RvX2RhdGFmYWN0b3J5X2NyZWF0ZXxzZG9fZGF0YW9iamVjdF9jbGVhcnxcCnNkb19kYXRhb2JqZWN0X2NyZWF0ZWRhdGFvYmplY3R8c2RvX2RhdGFvYmplY3RfZ2V0Y29udGFpbmVyfHNkb19kYXRhb2JqZWN0X2dldHNlcXVlbmNlfHNkb19kYXRhb2JqZWN0X2dldHR5cGVuYW1lfFwKc2RvX2RhdGFvYmplY3RfZ2V0dHlwZW5hbWVzcGFjZXVyaXxzZG9fZXhjZXB0aW9uX2dldGNhdXNlfHNkb19saXN0X2luc2VydHxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0Y29udGFpbmluZ3R5cGV8XApzZG9fbW9kZWxfcHJvcGVydHlfZ2V0ZGVmYXVsdHxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0bmFtZXxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0dHlwZXxzZG9fbW9kZWxfcHJvcGVydHlfaXNjb250YWlubWVudHxcCnNkb19tb2RlbF9wcm9wZXJ0eV9pc21hbnl8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2NvbnN0cnVjdHxzZG9fbW9kZWxfcmVmbGVjdGlvbmRhdGFvYmplY3RfZXhwb3J0fFwKc2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2dldGNvbnRhaW5tZW50cHJvcGVydHl8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2dldGluc3RhbmNlcHJvcGVydGllc3xcCnNkb19tb2RlbF9yZWZsZWN0aW9uZGF0YW9iamVjdF9nZXR0eXBlfHNkb19tb2RlbF90eXBlX2dldGJhc2V0eXBlfHNkb19tb2RlbF90eXBlX2dldG5hbWV8c2RvX21vZGVsX3R5cGVfZ2V0bmFtZXNwYWNldXJpfFwKc2RvX21vZGVsX3R5cGVfZ2V0cHJvcGVydGllc3xzZG9fbW9kZWxfdHlwZV9nZXRwcm9wZXJ0eXxzZG9fbW9kZWxfdHlwZV9pc2Fic3RyYWN0dHlwZXxzZG9fbW9kZWxfdHlwZV9pc2RhdGF0eXBlfHNkb19tb2RlbF90eXBlX2lzaW5zdGFuY2V8XApzZG9fbW9kZWxfdHlwZV9pc29wZW50eXBlfHNkb19tb2RlbF90eXBlX2lzc2VxdWVuY2VkdHlwZXxzZG9fc2VxdWVuY2VfZ2V0cHJvcGVydHl8c2RvX3NlcXVlbmNlX2luc2VydHxzZG9fc2VxdWVuY2VfbW92ZXxzZWVrYWJsZWl0ZXJhdG9yfFwKc2VtX2FjcXVpcmV8c2VtX2dldHxzZW1fcmVsZWFzZXxzZW1fcmVtb3ZlfHNlcmlhbGl6YWJsZXxzZXJpYWxpemV8c2Vzc2lvbl9jYWNoZV9leHBpcmV8c2Vzc2lvbl9jYWNoZV9saW1pdGVyfHNlc3Npb25fY29tbWl0fFwKc2Vzc2lvbl9kZWNvZGV8c2Vzc2lvbl9kZXN0cm95fHNlc3Npb25fZW5jb2RlfHNlc3Npb25fZ2V0X2Nvb2tpZV9wYXJhbXN8c2Vzc2lvbl9pZHxzZXNzaW9uX2lzX3JlZ2lzdGVyZWR8c2Vzc2lvbl9tb2R1bGVfbmFtZXxzZXNzaW9uX25hbWV8XApzZXNzaW9uX3Bnc3FsX2FkZF9lcnJvcnxzZXNzaW9uX3Bnc3FsX2dldF9lcnJvcnxzZXNzaW9uX3Bnc3FsX2dldF9maWVsZHxzZXNzaW9uX3Bnc3FsX3Jlc2V0fHNlc3Npb25fcGdzcWxfc2V0X2ZpZWxkfHNlc3Npb25fcGdzcWxfc3RhdHVzfFwKc2Vzc2lvbl9yZWdlbmVyYXRlX2lkfHNlc3Npb25fcmVnaXN0ZXJ8c2Vzc2lvbl9zYXZlX3BhdGh8c2Vzc2lvbl9zZXRfY29va2llX3BhcmFtc3xzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXJ8c2Vzc2lvbl9zdGFydHxcCnNlc3Npb25fdW5yZWdpc3RlcnxzZXNzaW9uX3Vuc2V0fHNlc3Npb25fd3JpdGVfY2xvc2V8c2V0Q291bnRlckNsYXNzfHNldF9lcnJvcl9oYW5kbGVyfHNldF9leGNlcHRpb25faGFuZGxlcnxzZXRfZmlsZV9idWZmZXJ8XApzZXRfaW5jbHVkZV9wYXRofHNldF9tYWdpY19xdW90ZXNfcnVudGltZXxzZXRfc29ja2V0X2Jsb2NraW5nfHNldF90aW1lX2xpbWl0fHNldGNvb2tpZXxzZXRsb2NhbGV8c2V0cHJvY3RpdGxlfHNldHJhd2Nvb2tpZXxcCnNldHN0YXRpY3Byb3BlcnR5dmFsdWV8c2V0dGhyZWFkdGl0bGV8c2V0dHlwZXxzaGExfHNoYTFfZmlsZXxzaGVsbF9leGVjfHNobV9hdHRhY2h8c2htX2RldGFjaHxzaG1fZ2V0X3ZhcnxzaG1faGFzX3ZhcnxzaG1fcHV0X3ZhcnxcCnNobV9yZW1vdmV8c2htX3JlbW92ZV92YXJ8c2htb3BfY2xvc2V8c2htb3BfZGVsZXRlfHNobW9wX29wZW58c2htb3BfcmVhZHxzaG1vcF9zaXplfHNobW9wX3dyaXRlfHNob3dfc291cmNlfHNodWZmbGV8c2lnbmV1cmxwYWllbWVudHxcCnNpbWlsYXJfdGV4dHxzaW1wbGV4bWxfaW1wb3J0X2RvbXxzaW1wbGV4bWxfbG9hZF9maWxlfHNpbXBsZXhtbF9sb2FkX3N0cmluZ3xzaW1wbGV4bWxlbGVtZW50fHNpbXBsZXhtbGl0ZXJhdG9yfHNpbnxzaW5ofHNpemVvZnxzbGVlcHxzbm1wfFwKc25tcDJfZ2V0fHNubXAyX2dldG5leHR8c25tcDJfcmVhbF93YWxrfHNubXAyX3NldHxzbm1wMl93YWxrfHNubXAzX2dldHxzbm1wM19nZXRuZXh0fHNubXAzX3JlYWxfd2Fsa3xzbm1wM19zZXR8c25tcDNfd2Fsa3xcCnNubXBfZ2V0X3F1aWNrX3ByaW50fHNubXBfZ2V0X3ZhbHVlcmV0cmlldmFsfHNubXBfcmVhZF9taWJ8c25tcF9zZXRfZW51bV9wcmludHxzbm1wX3NldF9vaWRfbnVtZXJpY19wcmludHxzbm1wX3NldF9vaWRfb3V0cHV0X2Zvcm1hdHxcCnNubXBfc2V0X3F1aWNrX3ByaW50fHNubXBfc2V0X3ZhbHVlcmV0cmlldmFsfHNubXBnZXR8c25tcGdldG5leHR8c25tcHJlYWx3YWxrfHNubXBzZXR8c25tcHdhbGt8c25tcHdhbGtvaWR8c29hcGNsaWVudHxzb2FwZmF1bHR8XApzb2FwaGVhZGVyfHNvYXBwYXJhbXxzb2Fwc2VydmVyfHNvYXB2YXJ8c29ja2V0X2FjY2VwdHxzb2NrZXRfYmluZHxzb2NrZXRfY2xlYXJfZXJyb3J8c29ja2V0X2Nsb3NlfHNvY2tldF9jb25uZWN0fHNvY2tldF9jcmVhdGV8XApzb2NrZXRfY3JlYXRlX2xpc3Rlbnxzb2NrZXRfY3JlYXRlX3BhaXJ8c29ja2V0X2dldF9vcHRpb258c29ja2V0X2dldF9zdGF0dXN8c29ja2V0X2dldHBlZXJuYW1lfHNvY2tldF9nZXRzb2NrbmFtZXxzb2NrZXRfbGFzdF9lcnJvcnxcCnNvY2tldF9saXN0ZW58c29ja2V0X3JlYWR8c29ja2V0X3JlY3Z8c29ja2V0X3JlY3Zmcm9tfHNvY2tldF9zZWxlY3R8c29ja2V0X3NlbmR8c29ja2V0X3NlbmR0b3xzb2NrZXRfc2V0X2Jsb2NrfHNvY2tldF9zZXRfYmxvY2tpbmd8XApzb2NrZXRfc2V0X25vbmJsb2NrfHNvY2tldF9zZXRfb3B0aW9ufHNvY2tldF9zZXRfdGltZW91dHxzb2NrZXRfc2h1dGRvd258c29ja2V0X3N0cmVycm9yfHNvY2tldF93cml0ZXxzb2xyX2dldF92ZXJzaW9ufHNvbHJjbGllbnR8XApzb2xyY2xpZW50ZXhjZXB0aW9ufHNvbHJkb2N1bWVudHxzb2xyZG9jdW1lbnRmaWVsZHxzb2xyZXhjZXB0aW9ufHNvbHJnZW5lcmljcmVzcG9uc2V8c29scmlsbGVnYWxhcmd1bWVudGV4Y2VwdGlvbnxcCnNvbHJpbGxlZ2Fsb3BlcmF0aW9uZXhjZXB0aW9ufHNvbHJpbnB1dGRvY3VtZW50fHNvbHJtb2RpZmlhYmxlcGFyYW1zfHNvbHJvYmplY3R8c29scnBhcmFtc3xzb2xycGluZ3Jlc3BvbnNlfHNvbHJxdWVyeXxzb2xycXVlcnlyZXNwb25zZXxcCnNvbHJyZXNwb25zZXxzb2xydXBkYXRlcmVzcG9uc2V8c29scnV0aWxzfHNvcnR8c291bmRleHxzcGhpbnhjbGllbnR8c3BsX2F1dG9sb2FkfHNwbF9hdXRvbG9hZF9jYWxsfHNwbF9hdXRvbG9hZF9leHRlbnNpb25zfFwKc3BsX2F1dG9sb2FkX2Z1bmN0aW9uc3xzcGxfYXV0b2xvYWRfcmVnaXN0ZXJ8c3BsX2F1dG9sb2FkX3VucmVnaXN0ZXJ8c3BsX2NsYXNzZXN8c3BsX29iamVjdF9oYXNofHNwbGJvb2x8c3BsZG91Ymx5bGlua2VkbGlzdHxzcGxlbnVtfFwKc3BsZmlsZWluZm98c3BsZmlsZW9iamVjdHxzcGxmaXhlZGFycmF5fHNwbGZsb2F0fHNwbGhlYXB8c3BsaW50fHNwbGl0fHNwbGl0aXxzcGxtYXhoZWFwfHNwbG1pbmhlYXB8c3Bsb2JqZWN0c3RvcmFnZXxzcGxvYnNlcnZlcnxcCnNwbHByaW9yaXR5cXVldWV8c3BscXVldWV8c3Bsc3RhY2t8c3Bsc3RyaW5nfHNwbHN1YmplY3R8c3BsdGVtcGZpbGVvYmplY3R8c3Bvb2ZjaGVja2VyfHNwcmludGZ8c3FsX3JlZ2Nhc2V8c3FsaXRlM3xzcWxpdGUzcmVzdWx0fFwKc3FsaXRlM3N0bXR8c3FsaXRlX2FycmF5X3F1ZXJ5fHNxbGl0ZV9idXN5X3RpbWVvdXR8c3FsaXRlX2NoYW5nZXN8c3FsaXRlX2Nsb3NlfHNxbGl0ZV9jb2x1bW58c3FsaXRlX2NyZWF0ZV9hZ2dyZWdhdGV8XApzcWxpdGVfY3JlYXRlX2Z1bmN0aW9ufHNxbGl0ZV9jdXJyZW50fHNxbGl0ZV9lcnJvcl9zdHJpbmd8c3FsaXRlX2VzY2FwZV9zdHJpbmd8c3FsaXRlX2V4ZWN8c3FsaXRlX2ZhY3Rvcnl8c3FsaXRlX2ZldGNoX2FsbHxcCnNxbGl0ZV9mZXRjaF9hcnJheXxzcWxpdGVfZmV0Y2hfY29sdW1uX3R5cGVzfHNxbGl0ZV9mZXRjaF9vYmplY3R8c3FsaXRlX2ZldGNoX3NpbmdsZXxzcWxpdGVfZmV0Y2hfc3RyaW5nfHNxbGl0ZV9maWVsZF9uYW1lfFwKc3FsaXRlX2hhc19tb3JlfHNxbGl0ZV9oYXNfcHJldnxzcWxpdGVfa2V5fHNxbGl0ZV9sYXN0X2Vycm9yfHNxbGl0ZV9sYXN0X2luc2VydF9yb3dpZHxzcWxpdGVfbGliZW5jb2Rpbmd8c3FsaXRlX2xpYnZlcnNpb258c3FsaXRlX25leHR8XApzcWxpdGVfbnVtX2ZpZWxkc3xzcWxpdGVfbnVtX3Jvd3N8c3FsaXRlX29wZW58c3FsaXRlX3BvcGVufHNxbGl0ZV9wcmV2fHNxbGl0ZV9xdWVyeXxzcWxpdGVfcmV3aW5kfHNxbGl0ZV9zZWVrfHNxbGl0ZV9zaW5nbGVfcXVlcnl8XApzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnl8c3FsaXRlX3VkZl9lbmNvZGVfYmluYXJ5fHNxbGl0ZV91bmJ1ZmZlcmVkX3F1ZXJ5fHNxbGl0ZV92YWxpZHxzcXJ0fHNyYW5kfHNzY2FuZnxzc2RlZXBfZnV6enlfY29tcGFyZXxcCnNzZGVlcF9mdXp6eV9oYXNofHNzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lfHNzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZXxzc2gyX2F1dGhfbm9uZXxzc2gyX2F1dGhfcGFzc3dvcmR8c3NoMl9hdXRoX3B1YmtleV9maWxlfFwKc3NoMl9jb25uZWN0fHNzaDJfZXhlY3xzc2gyX2ZldGNoX3N0cmVhbXxzc2gyX2ZpbmdlcnByaW50fHNzaDJfbWV0aG9kc19uZWdvdGlhdGVkfHNzaDJfcHVibGlja2V5X2FkZHxzc2gyX3B1YmxpY2tleV9pbml0fFwKc3NoMl9wdWJsaWNrZXlfbGlzdHxzc2gyX3B1YmxpY2tleV9yZW1vdmV8c3NoMl9zY3BfcmVjdnxzc2gyX3NjcF9zZW5kfHNzaDJfc2Z0cHxzc2gyX3NmdHBfbHN0YXR8c3NoMl9zZnRwX21rZGlyfHNzaDJfc2Z0cF9yZWFkbGlua3xcCnNzaDJfc2Z0cF9yZWFscGF0aHxzc2gyX3NmdHBfcmVuYW1lfHNzaDJfc2Z0cF9ybWRpcnxzc2gyX3NmdHBfc3RhdHxzc2gyX3NmdHBfc3ltbGlua3xzc2gyX3NmdHBfdW5saW5rfHNzaDJfc2hlbGx8c3NoMl90dW5uZWx8c3RhdHxcCnN0YXRzX2Fic29sdXRlX2RldmlhdGlvbnxzdGF0c19jZGZfYmV0YXxzdGF0c19jZGZfYmlub21pYWx8c3RhdHNfY2RmX2NhdWNoeXxzdGF0c19jZGZfY2hpc3F1YXJlfHN0YXRzX2NkZl9leHBvbmVudGlhbHxzdGF0c19jZGZfZnxcCnN0YXRzX2NkZl9nYW1tYXxzdGF0c19jZGZfbGFwbGFjZXxzdGF0c19jZGZfbG9naXN0aWN8c3RhdHNfY2RmX25lZ2F0aXZlX2Jpbm9taWFsfHN0YXRzX2NkZl9ub25jZW50cmFsX2NoaXNxdWFyZXxzdGF0c19jZGZfbm9uY2VudHJhbF9mfFwKc3RhdHNfY2RmX3BvaXNzb258c3RhdHNfY2RmX3R8c3RhdHNfY2RmX3VuaWZvcm18c3RhdHNfY2RmX3dlaWJ1bGx8c3RhdHNfY292YXJpYW5jZXxzdGF0c19kZW5fdW5pZm9ybXxzdGF0c19kZW5zX2JldGF8c3RhdHNfZGVuc19jYXVjaHl8XApzdGF0c19kZW5zX2NoaXNxdWFyZXxzdGF0c19kZW5zX2V4cG9uZW50aWFsfHN0YXRzX2RlbnNfZnxzdGF0c19kZW5zX2dhbW1hfHN0YXRzX2RlbnNfbGFwbGFjZXxzdGF0c19kZW5zX2xvZ2lzdGljfFwKc3RhdHNfZGVuc19uZWdhdGl2ZV9iaW5vbWlhbHxzdGF0c19kZW5zX25vcm1hbHxzdGF0c19kZW5zX3BtZl9iaW5vbWlhbHxzdGF0c19kZW5zX3BtZl9oeXBlcmdlb21ldHJpY3xzdGF0c19kZW5zX3BtZl9wb2lzc29ufHN0YXRzX2RlbnNfdHxcCnN0YXRzX2RlbnNfd2VpYnVsbHxzdGF0c19oYXJtb25pY19tZWFufHN0YXRzX2t1cnRvc2lzfHN0YXRzX3JhbmRfZ2VuX2JldGF8c3RhdHNfcmFuZF9nZW5fY2hpc3F1YXJlfHN0YXRzX3JhbmRfZ2VuX2V4cG9uZW50aWFsfFwKc3RhdHNfcmFuZF9nZW5fZnxzdGF0c19yYW5kX2dlbl9mdW5pZm9ybXxzdGF0c19yYW5kX2dlbl9nYW1tYXxzdGF0c19yYW5kX2dlbl9pYmlub21pYWx8c3RhdHNfcmFuZF9nZW5faWJpbm9taWFsX25lZ2F0aXZlfFwKc3RhdHNfcmFuZF9nZW5faW50fHN0YXRzX3JhbmRfZ2VuX2lwb2lzc29ufHN0YXRzX3JhbmRfZ2VuX2l1bmlmb3JtfHN0YXRzX3JhbmRfZ2VuX25vbmNlbnJhbF9jaGlzcXVhcmV8c3RhdHNfcmFuZF9nZW5fbm9uY2VudHJhbF9mfFwKc3RhdHNfcmFuZF9nZW5fbm9uY2VudHJhbF90fHN0YXRzX3JhbmRfZ2VuX25vcm1hbHxzdGF0c19yYW5kX2dlbl90fHN0YXRzX3JhbmRfZ2V0X3NlZWRzfHN0YXRzX3JhbmRfcGhyYXNlX3RvX3NlZWRzfHN0YXRzX3JhbmRfcmFuZnxcCnN0YXRzX3JhbmRfc2V0YWxsfHN0YXRzX3NrZXd8c3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9ufHN0YXRzX3N0YXRfYmlub21pYWxfY29lZnxzdGF0c19zdGF0X2NvcnJlbGF0aW9ufHN0YXRzX3N0YXRfZ2VubmNofFwKc3RhdHNfc3RhdF9pbmRlcGVuZGVudF90fHN0YXRzX3N0YXRfaW5uZXJwcm9kdWN0fHN0YXRzX3N0YXRfbm9uY2VudHJhbF90fHN0YXRzX3N0YXRfcGFpcmVkX3R8c3RhdHNfc3RhdF9wZXJjZW50aWxlfHN0YXRzX3N0YXRfcG93ZXJzdW18XApzdGF0c192YXJpYW5jZXxzdG9tcHxzdG9tcF9jb25uZWN0X2Vycm9yfHN0b21wX3ZlcnNpb258c3RvbXBleGNlcHRpb258c3RvbXBmcmFtZXxzdHJfZ2V0Y3N2fHN0cl9pcmVwbGFjZXxzdHJfcGFkfHN0cl9yZXBlYXR8c3RyX3JlcGxhY2V8XApzdHJfcm90MTN8c3RyX3NodWZmbGV8c3RyX3NwbGl0fHN0cl93b3JkX2NvdW50fHN0cmNhc2VjbXB8c3RyY2hyfHN0cmNtcHxzdHJjb2xsfHN0cmNzcG58c3RyZWFtX2J1Y2tldF9hcHBlbmR8c3RyZWFtX2J1Y2tldF9tYWtlX3dyaXRlYWJsZXxcCnN0cmVhbV9idWNrZXRfbmV3fHN0cmVhbV9idWNrZXRfcHJlcGVuZHxzdHJlYW1fY29udGV4dF9jcmVhdGV8c3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHR8c3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnN8XApzdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zfHN0cmVhbV9jb250ZXh0X3NldF9kZWZhdWx0fHN0cmVhbV9jb250ZXh0X3NldF9vcHRpb258c3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtc3xzdHJlYW1fY29weV90b19zdHJlYW18XApzdHJlYW1fZW5jb2Rpbmd8c3RyZWFtX2ZpbHRlcl9hcHBlbmR8c3RyZWFtX2ZpbHRlcl9wcmVwZW5kfHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXJ8c3RyZWFtX2ZpbHRlcl9yZW1vdmV8c3RyZWFtX2dldF9jb250ZW50c3xcCnN0cmVhbV9nZXRfZmlsdGVyc3xzdHJlYW1fZ2V0X2xpbmV8c3RyZWFtX2dldF9tZXRhX2RhdGF8c3RyZWFtX2dldF90cmFuc3BvcnRzfHN0cmVhbV9nZXRfd3JhcHBlcnN8c3RyZWFtX2lzX2xvY2FsfFwKc3RyZWFtX25vdGlmaWNhdGlvbl9jYWxsYmFja3xzdHJlYW1fcmVnaXN0ZXJfd3JhcHBlcnxzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGh8c3RyZWFtX3NlbGVjdHxzdHJlYW1fc2V0X2Jsb2NraW5nfHN0cmVhbV9zZXRfcmVhZF9idWZmZXJ8XApzdHJlYW1fc2V0X3RpbWVvdXR8c3RyZWFtX3NldF93cml0ZV9idWZmZXJ8c3RyZWFtX3NvY2tldF9hY2NlcHR8c3RyZWFtX3NvY2tldF9jbGllbnR8c3RyZWFtX3NvY2tldF9lbmFibGVfY3J5cHRvfHN0cmVhbV9zb2NrZXRfZ2V0X25hbWV8XApzdHJlYW1fc29ja2V0X3BhaXJ8c3RyZWFtX3NvY2tldF9yZWN2ZnJvbXxzdHJlYW1fc29ja2V0X3NlbmR0b3xzdHJlYW1fc29ja2V0X3NlcnZlcnxzdHJlYW1fc29ja2V0X3NodXRkb3dufHN0cmVhbV9zdXBwb3J0c19sb2NrfFwKc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXJ8c3RyZWFtX3dyYXBwZXJfcmVzdG9yZXxzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyfHN0cmVhbXdyYXBwZXJ8c3RyZnRpbWV8c3RyaXBfdGFnc3xzdHJpcGNzbGFzaGVzfHN0cmlwb3N8XApzdHJpcHNsYXNoZXN8c3RyaXN0cnxzdHJsZW58c3RybmF0Y2FzZWNtcHxzdHJuYXRjbXB8c3RybmNhc2VjbXB8c3RybmNtcHxzdHJwYnJrfHN0cnBvc3xzdHJwdGltZXxzdHJyY2hyfHN0cnJldnxzdHJyaXBvc3xzdHJycG9zfHN0cnNwbnxcCnN0cnN0cnxzdHJ0b2t8c3RydG9sb3dlcnxzdHJ0b3RpbWV8c3RydG91cHBlcnxzdHJ0cnxzdHJ2YWx8c3Vic3RyfHN1YnN0cl9jb21wYXJlfHN1YnN0cl9jb3VudHxzdWJzdHJfcmVwbGFjZXxzdm18c3ZtbW9kZWx8c3ZuX2FkZHxcCnN2bl9hdXRoX2dldF9wYXJhbWV0ZXJ8c3ZuX2F1dGhfc2V0X3BhcmFtZXRlcnxzdm5fYmxhbWV8c3ZuX2NhdHxzdm5fY2hlY2tvdXR8c3ZuX2NsZWFudXB8c3ZuX2NsaWVudF92ZXJzaW9ufHN2bl9jb21taXR8c3ZuX2RlbGV0ZXxcCnN2bl9kaWZmfHN2bl9leHBvcnR8c3ZuX2ZzX2Fib3J0X3R4bnxzdm5fZnNfYXBwbHlfdGV4dHxzdm5fZnNfYmVnaW5fdHhuMnxzdm5fZnNfY2hhbmdlX25vZGVfcHJvcHxzdm5fZnNfY2hlY2tfcGF0aHxcCnN2bl9mc19jb250ZW50c19jaGFuZ2VkfHN2bl9mc19jb3B5fHN2bl9mc19kZWxldGV8c3ZuX2ZzX2Rpcl9lbnRyaWVzfHN2bl9mc19maWxlX2NvbnRlbnRzfHN2bl9mc19maWxlX2xlbmd0aHxzdm5fZnNfaXNfZGlyfHN2bl9mc19pc19maWxlfFwKc3ZuX2ZzX21ha2VfZGlyfHN2bl9mc19tYWtlX2ZpbGV8c3ZuX2ZzX25vZGVfY3JlYXRlZF9yZXZ8c3ZuX2ZzX25vZGVfcHJvcHxzdm5fZnNfcHJvcHNfY2hhbmdlZHxzdm5fZnNfcmV2aXNpb25fcHJvcHxzdm5fZnNfcmV2aXNpb25fcm9vdHxcCnN2bl9mc190eG5fcm9vdHxzdm5fZnNfeW91bmdlc3RfcmV2fHN2bl9pbXBvcnR8c3ZuX2xvZ3xzdm5fbHN8c3ZuX21rZGlyfHN2bl9yZXBvc19jcmVhdGV8c3ZuX3JlcG9zX2ZzfHN2bl9yZXBvc19mc19iZWdpbl90eG5fZm9yX2NvbW1pdHxcCnN2bl9yZXBvc19mc19jb21taXRfdHhufHN2bl9yZXBvc19ob3Rjb3B5fHN2bl9yZXBvc19vcGVufHN2bl9yZXBvc19yZWNvdmVyfHN2bl9yZXZlcnR8c3ZuX3N0YXR1c3xzdm5fdXBkYXRlfHN3Zl9hY3Rpb25nZXR1cmx8XApzd2ZfYWN0aW9uZ290b2ZyYW1lfHN3Zl9hY3Rpb25nb3RvbGFiZWx8c3dmX2FjdGlvbm5leHRmcmFtZXxzd2ZfYWN0aW9ucGxheXxzd2ZfYWN0aW9ucHJldmZyYW1lfHN3Zl9hY3Rpb25zZXR0YXJnZXR8c3dmX2FjdGlvbnN0b3B8XApzd2ZfYWN0aW9udG9nZ2xlcXVhbGl0eXxzd2ZfYWN0aW9ud2FpdGZvcmZyYW1lfHN3Zl9hZGRidXR0b25yZWNvcmR8c3dmX2FkZGNvbG9yfHN3Zl9jbG9zZWZpbGV8c3dmX2RlZmluZWJpdG1hcHxzd2ZfZGVmaW5lZm9udHxcCnN3Zl9kZWZpbmVsaW5lfHN3Zl9kZWZpbmVwb2x5fHN3Zl9kZWZpbmVyZWN0fHN3Zl9kZWZpbmV0ZXh0fHN3Zl9lbmRidXR0b258c3dmX2VuZGRvYWN0aW9ufHN3Zl9lbmRzaGFwZXxzd2ZfZW5kc3ltYm9sfHN3Zl9mb250c2l6ZXxcCnN3Zl9mb250c2xhbnR8c3dmX2ZvbnR0cmFja2luZ3xzd2ZfZ2V0Yml0bWFwaW5mb3xzd2ZfZ2V0Zm9udGluZm98c3dmX2dldGZyYW1lfHN3Zl9sYWJlbGZyYW1lfHN3Zl9sb29rYXR8c3dmX21vZGlmeW9iamVjdHxzd2ZfbXVsY29sb3J8XApzd2ZfbmV4dGlkfHN3Zl9vbmNvbmRpdGlvbnxzd2Zfb3BlbmZpbGV8c3dmX29ydGhvfHN3Zl9vcnRobzJ8c3dmX3BlcnNwZWN0aXZlfHN3Zl9wbGFjZW9iamVjdHxzd2ZfcG9sYXJ2aWV3fHN3Zl9wb3BtYXRyaXh8c3dmX3Bvc3JvdW5kfFwKc3dmX3B1c2htYXRyaXh8c3dmX3JlbW92ZW9iamVjdHxzd2Zfcm90YXRlfHN3Zl9zY2FsZXxzd2Zfc2V0Zm9udHxzd2Zfc2V0ZnJhbWV8c3dmX3NoYXBlYXJjfHN3Zl9zaGFwZWN1cnZldG98c3dmX3NoYXBlY3VydmV0bzN8XApzd2Zfc2hhcGVmaWxsYml0bWFwY2xpcHxzd2Zfc2hhcGVmaWxsYml0bWFwdGlsZXxzd2Zfc2hhcGVmaWxsb2ZmfHN3Zl9zaGFwZWZpbGxzb2xpZHxzd2Zfc2hhcGVsaW5lc29saWR8c3dmX3NoYXBlbGluZXRvfHN3Zl9zaGFwZW1vdmV0b3xcCnN3Zl9zaG93ZnJhbWV8c3dmX3N0YXJ0YnV0dG9ufHN3Zl9zdGFydGRvYWN0aW9ufHN3Zl9zdGFydHNoYXBlfHN3Zl9zdGFydHN5bWJvbHxzd2ZfdGV4dHdpZHRofHN3Zl90cmFuc2xhdGV8c3dmX3ZpZXdwb3J0fHN3ZmFjdGlvbnxcCnN3ZmJpdG1hcHxzd2ZidXR0b258c3dmZGlzcGxheWl0ZW18c3dmZmlsbHxzd2Zmb250fHN3ZmZvbnRjaGFyfHN3ZmdyYWRpZW50fHN3Zm1vcnBofHN3Zm1vdmllfHN3ZnByZWJ1aWx0Y2xpcHxzd2ZzaGFwZXxzd2Zzb3VuZHxcCnN3ZnNvdW5kaW5zdGFuY2V8c3dmc3ByaXRlfHN3ZnRleHR8c3dmdGV4dGZpZWxkfHN3ZnZpZGVvc3RyZWFtfHN3aXNoX2NvbnN0cnVjdHxzd2lzaF9nZXRtZXRhbGlzdHxzd2lzaF9nZXRwcm9wZXJ0eWxpc3R8c3dpc2hfcHJlcGFyZXxcCnN3aXNoX3F1ZXJ5fHN3aXNocmVzdWx0X2dldG1ldGFsaXN0fHN3aXNocmVzdWx0X3N0ZW18c3dpc2hyZXN1bHRzX2dldHBhcnNlZHdvcmRzfHN3aXNocmVzdWx0c19nZXRyZW1vdmVkc3RvcHdvcmRzfHN3aXNocmVzdWx0c19uZXh0cmVzdWx0fFwKc3dpc2hyZXN1bHRzX3NlZWtyZXN1bHR8c3dpc2hzZWFyY2hfZXhlY3V0ZXxzd2lzaHNlYXJjaF9yZXNldGxpbWl0fHN3aXNoc2VhcmNoX3NldGxpbWl0fHN3aXNoc2VhcmNoX3NldHBocmFzZWRlbGltaXRlcnxcCnN3aXNoc2VhcmNoX3NldHNvcnR8c3dpc2hzZWFyY2hfc2V0c3RydWN0dXJlfHN5YmFzZV9hZmZlY3RlZF9yb3dzfHN5YmFzZV9jbG9zZXxzeWJhc2VfY29ubmVjdHxzeWJhc2VfZGF0YV9zZWVrfFwKc3liYXNlX2RlYWRsb2NrX3JldHJ5X2NvdW50fHN5YmFzZV9mZXRjaF9hcnJheXxzeWJhc2VfZmV0Y2hfYXNzb2N8c3liYXNlX2ZldGNoX2ZpZWxkfHN5YmFzZV9mZXRjaF9vYmplY3R8c3liYXNlX2ZldGNoX3Jvd3xcCnN5YmFzZV9maWVsZF9zZWVrfHN5YmFzZV9mcmVlX3Jlc3VsdHxzeWJhc2VfZ2V0X2xhc3RfbWVzc2FnZXxzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eXxzeWJhc2VfbWluX2Vycm9yX3NldmVyaXR5fFwKc3liYXNlX21pbl9tZXNzYWdlX3NldmVyaXR5fHN5YmFzZV9taW5fc2VydmVyX3NldmVyaXR5fHN5YmFzZV9udW1fZmllbGRzfHN5YmFzZV9udW1fcm93c3xzeWJhc2VfcGNvbm5lY3R8c3liYXNlX3F1ZXJ5fHN5YmFzZV9yZXN1bHR8XApzeWJhc2Vfc2VsZWN0X2RifHN5YmFzZV9zZXRfbWVzc2FnZV9oYW5kbGVyfHN5YmFzZV91bmJ1ZmZlcmVkX3F1ZXJ5fHN5bWxpbmt8c3lzX2dldF90ZW1wX2RpcnxzeXNfZ2V0bG9hZGF2Z3xzeXNsb2d8c3lzdGVtfHRhZ3x0YW58dGFuaHxcCnRjcHdyYXBfY2hlY2t8dGVtcG5hbXx0ZXh0ZG9tYWlufHRpZHl8dGlkeV9hY2Nlc3NfY291bnR8dGlkeV9jb25maWdfY291bnR8dGlkeV9kaWFnbm9zZXx0aWR5X2Vycm9yX2NvdW50fHRpZHlfZ2V0X2Vycm9yX2J1ZmZlcnxcCnRpZHlfZ2V0X291dHB1dHx0aWR5X2xvYWRfY29uZmlnfHRpZHlfcmVzZXRfY29uZmlnfHRpZHlfc2F2ZV9jb25maWd8dGlkeV9zZXRfZW5jb2Rpbmd8dGlkeV9zZXRvcHR8dGlkeV93YXJuaW5nX2NvdW50fHRpZHlub2RlfHRpbWV8XAp0aW1lX25hbm9zbGVlcHx0aW1lX3NsZWVwX3VudGlsfHRpbWV6b25lX2FiYnJldmlhdGlvbnNfbGlzdHx0aW1lem9uZV9pZGVudGlmaWVyc19saXN0fHRpbWV6b25lX2xvY2F0aW9uX2dldHx0aW1lem9uZV9uYW1lX2Zyb21fYWJicnxcCnRpbWV6b25lX25hbWVfZ2V0fHRpbWV6b25lX29mZnNldF9nZXR8dGltZXpvbmVfb3Blbnx0aW1lem9uZV90cmFuc2l0aW9uc19nZXR8dGltZXpvbmVfdmVyc2lvbl9nZXR8dG1wZmlsZXx0b2tlbl9nZXRfYWxsfHRva2VuX25hbWV8XAp0b2t5b3R5cmFudHx0b2t5b3R5cmFudHF1ZXJ5fHRva3lvdHlyYW50dGFibGV8dG9zdHJpbmd8dG9zdHJpbmd8dG91Y2h8dHJhaXRfZXhpc3RzfHRyYW5zbGl0ZXJhdG9yfHRyYXZlcnNhYmxlfHRyaWdnZXJfZXJyb3J8dHJpbXx1YXNvcnR8dWNmaXJzdHxcCnVjd29yZHN8dWRtX2FkZF9zZWFyY2hfbGltaXR8dWRtX2FsbG9jX2FnZW50fHVkbV9hbGxvY19hZ2VudF9hcnJheXx1ZG1fYXBpX3ZlcnNpb258dWRtX2NhdF9saXN0fHVkbV9jYXRfcGF0aHx1ZG1fY2hlY2tfY2hhcnNldHxcCnVkbV9jaGVja19zdG9yZWR8dWRtX2NsZWFyX3NlYXJjaF9saW1pdHN8dWRtX2Nsb3NlX3N0b3JlZHx1ZG1fY3JjMzJ8dWRtX2Vycm5vfHVkbV9lcnJvcnx1ZG1fZmluZHx1ZG1fZnJlZV9hZ2VudHx1ZG1fZnJlZV9pc3BlbGxfZGF0YXxcCnVkbV9mcmVlX3Jlc3x1ZG1fZ2V0X2RvY19jb3VudHx1ZG1fZ2V0X3Jlc19maWVsZHx1ZG1fZ2V0X3Jlc19wYXJhbXx1ZG1faGFzaDMyfHVkbV9sb2FkX2lzcGVsbF9kYXRhfHVkbV9vcGVuX3N0b3JlZHx1ZG1fc2V0X2FnZW50X3BhcmFtfFwKdWtzb3J0fHVtYXNrfHVuZGVyZmxvd2V4Y2VwdGlvbnx1bmV4cGVjdGVkdmFsdWVleGNlcHRpb258dW5pcWlkfHVuaXh0b2pkfHVubGlua3x1bnBhY2t8dW5yZWdpc3Rlcl90aWNrX2Z1bmN0aW9ufHVuc2VyaWFsaXplfHVuc2V0fFwKdXJsZGVjb2RlfHVybGVuY29kZXx1c2Vfc29hcF9lcnJvcl9oYW5kbGVyfHVzZXJfZXJyb3J8dXNsZWVwfHVzb3J0fHV0ZjhfZGVjb2RlfHV0ZjhfZW5jb2RlfHY4anN8djhqc2V4Y2VwdGlvbnx2YXJfZHVtcHx2YXJfZXhwb3J0fHZhcmlhbnR8XAp2YXJpYW50X2Fic3x2YXJpYW50X2FkZHx2YXJpYW50X2FuZHx2YXJpYW50X2Nhc3R8dmFyaWFudF9jYXR8dmFyaWFudF9jbXB8dmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wfHZhcmlhbnRfZGF0ZV90b190aW1lc3RhbXB8XAp2YXJpYW50X2Rpdnx2YXJpYW50X2Vxdnx2YXJpYW50X2ZpeHx2YXJpYW50X2dldF90eXBlfHZhcmlhbnRfaWRpdnx2YXJpYW50X2ltcHx2YXJpYW50X2ludHx2YXJpYW50X21vZHx2YXJpYW50X211bHx2YXJpYW50X25lZ3x2YXJpYW50X25vdHxcCnZhcmlhbnRfb3J8dmFyaWFudF9wb3d8dmFyaWFudF9yb3VuZHx2YXJpYW50X3NldHx2YXJpYW50X3NldF90eXBlfHZhcmlhbnRfc3VifHZhcmlhbnRfeG9yfHZlcnNpb25fY29tcGFyZXx2ZnByaW50Znx2aXJ0dWFsfFwKdnBvcG1haWxfYWRkX2FsaWFzX2RvbWFpbnx2cG9wbWFpbF9hZGRfYWxpYXNfZG9tYWluX2V4fHZwb3BtYWlsX2FkZF9kb21haW58dnBvcG1haWxfYWRkX2RvbWFpbl9leHx2cG9wbWFpbF9hZGRfdXNlcnx2cG9wbWFpbF9hbGlhc19hZGR8XAp2cG9wbWFpbF9hbGlhc19kZWx8dnBvcG1haWxfYWxpYXNfZGVsX2RvbWFpbnx2cG9wbWFpbF9hbGlhc19nZXR8dnBvcG1haWxfYWxpYXNfZ2V0X2FsbHx2cG9wbWFpbF9hdXRoX3VzZXJ8dnBvcG1haWxfZGVsX2RvbWFpbnxcCnZwb3BtYWlsX2RlbF9kb21haW5fZXh8dnBvcG1haWxfZGVsX3VzZXJ8dnBvcG1haWxfZXJyb3J8dnBvcG1haWxfcGFzc3dkfHZwb3BtYWlsX3NldF91c2VyX3F1b3RhfHZwcmludGZ8dnNwcmludGZ8dzMyYXBpX2RlZnR5cGV8XAp3MzJhcGlfaW5pdF9kdHlwZXx3MzJhcGlfaW52b2tlX2Z1bmN0aW9ufHczMmFwaV9yZWdpc3Rlcl9mdW5jdGlvbnx3MzJhcGlfc2V0X2NhbGxfbWV0aG9kfHdkZHhfYWRkX3ZhcnN8d2RkeF9kZXNlcmlhbGl6ZXx3ZGR4X3BhY2tldF9lbmR8XAp3ZGR4X3BhY2tldF9zdGFydHx3ZGR4X3NlcmlhbGl6ZV92YWx1ZXx3ZGR4X3NlcmlhbGl6ZV92YXJzfHdpbjMyX2NvbnRpbnVlX3NlcnZpY2V8d2luMzJfY3JlYXRlX3NlcnZpY2V8d2luMzJfZGVsZXRlX3NlcnZpY2V8XAp3aW4zMl9nZXRfbGFzdF9jb250cm9sX21lc3NhZ2V8d2luMzJfcGF1c2Vfc2VydmljZXx3aW4zMl9wc19saXN0X3Byb2NzfHdpbjMyX3BzX3N0YXRfbWVtfHdpbjMyX3BzX3N0YXRfcHJvY3x3aW4zMl9xdWVyeV9zZXJ2aWNlX3N0YXR1c3xcCndpbjMyX3NldF9zZXJ2aWNlX3N0YXR1c3x3aW4zMl9zdGFydF9zZXJ2aWNlfHdpbjMyX3N0YXJ0X3NlcnZpY2VfY3RybF9kaXNwYXRjaGVyfHdpbjMyX3N0b3Bfc2VydmljZXx3aW5jYWNoZV9mY2FjaGVfZmlsZWluZm98XAp3aW5jYWNoZV9mY2FjaGVfbWVtaW5mb3x3aW5jYWNoZV9sb2NrfHdpbmNhY2hlX29jYWNoZV9maWxlaW5mb3x3aW5jYWNoZV9vY2FjaGVfbWVtaW5mb3x3aW5jYWNoZV9yZWZyZXNoX2lmX2NoYW5nZWR8XAp3aW5jYWNoZV9ycGxpc3RfZmlsZWluZm98d2luY2FjaGVfcnBsaXN0X21lbWluZm98d2luY2FjaGVfc2NhY2hlX2luZm98d2luY2FjaGVfc2NhY2hlX21lbWluZm98d2luY2FjaGVfdWNhY2hlX2FkZHx3aW5jYWNoZV91Y2FjaGVfY2FzfFwKd2luY2FjaGVfdWNhY2hlX2NsZWFyfHdpbmNhY2hlX3VjYWNoZV9kZWN8d2luY2FjaGVfdWNhY2hlX2RlbGV0ZXx3aW5jYWNoZV91Y2FjaGVfZXhpc3RzfHdpbmNhY2hlX3VjYWNoZV9nZXR8d2luY2FjaGVfdWNhY2hlX2luY3xcCndpbmNhY2hlX3VjYWNoZV9pbmZvfHdpbmNhY2hlX3VjYWNoZV9tZW1pbmZvfHdpbmNhY2hlX3VjYWNoZV9zZXR8d2luY2FjaGVfdW5sb2NrfHdvcmR3cmFwfHhhdHRyX2dldHx4YXR0cl9saXN0fHhhdHRyX3JlbW92ZXx4YXR0cl9zZXR8XAp4YXR0cl9zdXBwb3J0ZWR8eGRpZmZfZmlsZV9iZGlmZnx4ZGlmZl9maWxlX2JkaWZmX3NpemV8eGRpZmZfZmlsZV9icGF0Y2h8eGRpZmZfZmlsZV9kaWZmfHhkaWZmX2ZpbGVfZGlmZl9iaW5hcnl8eGRpZmZfZmlsZV9tZXJnZTN8XAp4ZGlmZl9maWxlX3BhdGNofHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5fHhkaWZmX2ZpbGVfcmFiZGlmZnx4ZGlmZl9zdHJpbmdfYmRpZmZ8eGRpZmZfc3RyaW5nX2JkaWZmX3NpemV8eGRpZmZfc3RyaW5nX2JwYXRjaHxcCnhkaWZmX3N0cmluZ19kaWZmfHhkaWZmX3N0cmluZ19kaWZmX2JpbmFyeXx4ZGlmZl9zdHJpbmdfbWVyZ2UzfHhkaWZmX3N0cmluZ19wYXRjaHx4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5fHhkaWZmX3N0cmluZ19yYWJkaWZmfFwKeGhwcm9mX2Rpc2FibGV8eGhwcm9mX2VuYWJsZXx4aHByb2Zfc2FtcGxlX2Rpc2FibGV8eGhwcm9mX3NhbXBsZV9lbmFibGV8eG1sX2Vycm9yX3N0cmluZ3x4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleHxcCnhtbF9nZXRfY3VycmVudF9jb2x1bW5fbnVtYmVyfHhtbF9nZXRfY3VycmVudF9saW5lX251bWJlcnx4bWxfZ2V0X2Vycm9yX2NvZGV8eG1sX3BhcnNlfHhtbF9wYXJzZV9pbnRvX3N0cnVjdHx4bWxfcGFyc2VyX2NyZWF0ZXxcCnhtbF9wYXJzZXJfY3JlYXRlX25zfHhtbF9wYXJzZXJfZnJlZXx4bWxfcGFyc2VyX2dldF9vcHRpb258eG1sX3BhcnNlcl9zZXRfb3B0aW9ufHhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcnx4bWxfc2V0X2RlZmF1bHRfaGFuZGxlcnxcCnhtbF9zZXRfZWxlbWVudF9oYW5kbGVyfHhtbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXJ8eG1sX3NldF9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXJ8eG1sX3NldF9ub3RhdGlvbl9kZWNsX2hhbmRsZXJ8XAp4bWxfc2V0X29iamVjdHx4bWxfc2V0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25faGFuZGxlcnx4bWxfc2V0X3N0YXJ0X25hbWVzcGFjZV9kZWNsX2hhbmRsZXJ8eG1sX3NldF91bnBhcnNlZF9lbnRpdHlfZGVjbF9oYW5kbGVyfHhtbHJlYWRlcnxcCnhtbHJwY19kZWNvZGV8eG1scnBjX2RlY29kZV9yZXF1ZXN0fHhtbHJwY19lbmNvZGV8eG1scnBjX2VuY29kZV9yZXF1ZXN0fHhtbHJwY19nZXRfdHlwZXx4bWxycGNfaXNfZmF1bHR8eG1scnBjX3BhcnNlX21ldGhvZF9kZXNjcmlwdGlvbnN8XAp4bWxycGNfc2VydmVyX2FkZF9pbnRyb3NwZWN0aW9uX2RhdGF8eG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZHx4bWxycGNfc2VydmVyX2NyZWF0ZXx4bWxycGNfc2VydmVyX2Rlc3Ryb3l8XAp4bWxycGNfc2VydmVyX3JlZ2lzdGVyX2ludHJvc3BlY3Rpb25fY2FsbGJhY2t8eG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2R8eG1scnBjX3NldF90eXBlfHhtbHdyaXRlcl9lbmRfYXR0cmlidXRlfHhtbHdyaXRlcl9lbmRfY2RhdGF8XAp4bWx3cml0ZXJfZW5kX2NvbW1lbnR8eG1sd3JpdGVyX2VuZF9kb2N1bWVudHx4bWx3cml0ZXJfZW5kX2R0ZHx4bWx3cml0ZXJfZW5kX2R0ZF9hdHRsaXN0fHhtbHdyaXRlcl9lbmRfZHRkX2VsZW1lbnR8XAp4bWx3cml0ZXJfZW5kX2R0ZF9lbnRpdHl8eG1sd3JpdGVyX2VuZF9lbGVtZW50fHhtbHdyaXRlcl9lbmRfcGl8eG1sd3JpdGVyX2ZsdXNofHhtbHdyaXRlcl9mdWxsX2VuZF9lbGVtZW50fHhtbHdyaXRlcl9vcGVuX21lbW9yeXxcCnhtbHdyaXRlcl9vcGVuX3VyaXx4bWx3cml0ZXJfb3V0cHV0X21lbW9yeXx4bWx3cml0ZXJfc2V0X2luZGVudHx4bWx3cml0ZXJfc2V0X2luZGVudF9zdHJpbmd8eG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZXxcCnhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGVfbnN8eG1sd3JpdGVyX3N0YXJ0X2NkYXRhfHhtbHdyaXRlcl9zdGFydF9jb21tZW50fHhtbHdyaXRlcl9zdGFydF9kb2N1bWVudHx4bWx3cml0ZXJfc3RhcnRfZHRkfFwKeG1sd3JpdGVyX3N0YXJ0X2R0ZF9hdHRsaXN0fHhtbHdyaXRlcl9zdGFydF9kdGRfZWxlbWVudHx4bWx3cml0ZXJfc3RhcnRfZHRkX2VudGl0eXx4bWx3cml0ZXJfc3RhcnRfZWxlbWVudHx4bWx3cml0ZXJfc3RhcnRfZWxlbWVudF9uc3xcCnhtbHdyaXRlcl9zdGFydF9waXx4bWx3cml0ZXJfdGV4dHx4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlfHhtbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGVfbnN8eG1sd3JpdGVyX3dyaXRlX2NkYXRhfHhtbHdyaXRlcl93cml0ZV9jb21tZW50fFwKeG1sd3JpdGVyX3dyaXRlX2R0ZHx4bWx3cml0ZXJfd3JpdGVfZHRkX2F0dGxpc3R8eG1sd3JpdGVyX3dyaXRlX2R0ZF9lbGVtZW50fHhtbHdyaXRlcl93cml0ZV9kdGRfZW50aXR5fHhtbHdyaXRlcl93cml0ZV9lbGVtZW50fFwKeG1sd3JpdGVyX3dyaXRlX2VsZW1lbnRfbnN8eG1sd3JpdGVyX3dyaXRlX3BpfHhtbHdyaXRlcl93cml0ZV9yYXd8eHBhdGhfZXZhbHx4cGF0aF9ldmFsX2V4cHJlc3Npb258eHBhdGhfbmV3X2NvbnRleHR8eHBhdGhfcmVnaXN0ZXJfbnN8XAp4cGF0aF9yZWdpc3Rlcl9uc19hdXRvfHhwdHJfZXZhbHx4cHRyX25ld19jb250ZXh0fHhzbHRfYmFja2VuZF9pbmZvfHhzbHRfYmFja2VuZF9uYW1lfHhzbHRfYmFja2VuZF92ZXJzaW9ufHhzbHRfY3JlYXRlfHhzbHRfZXJybm98XAp4c2x0X2Vycm9yfHhzbHRfZnJlZXx4c2x0X2dldG9wdHx4c2x0X3Byb2Nlc3N8eHNsdF9zZXRfYmFzZXx4c2x0X3NldF9lbmNvZGluZ3x4c2x0X3NldF9lcnJvcl9oYW5kbGVyfHhzbHRfc2V0X2xvZ3x4c2x0X3NldF9vYmplY3R8XAp4c2x0X3NldF9zYXhfaGFuZGxlcnx4c2x0X3NldF9zYXhfaGFuZGxlcnN8eHNsdF9zZXRfc2NoZW1lX2hhbmRsZXJ8eHNsdF9zZXRfc2NoZW1lX2hhbmRsZXJzfHhzbHRfc2V0b3B0fHhzbHRwcm9jZXNzb3J8eWFtbF9lbWl0fFwKeWFtbF9lbWl0X2ZpbGV8eWFtbF9wYXJzZXx5YW1sX3BhcnNlX2ZpbGV8eWFtbF9wYXJzZV91cmx8eWF6X2FkZGluZm98eWF6X2NjbF9jb25mfHlhel9jY2xfcGFyc2V8eWF6X2Nsb3NlfHlhel9jb25uZWN0fHlhel9kYXRhYmFzZXxcCnlhel9lbGVtZW50fHlhel9lcnJub3x5YXpfZXJyb3J8eWF6X2VzfHlhel9lc19yZXN1bHR8eWF6X2dldF9vcHRpb258eWF6X2hpdHN8eWF6X2l0ZW1vcmRlcnx5YXpfcHJlc2VudHx5YXpfcmFuZ2V8eWF6X3JlY29yZHx5YXpfc2NhbnxcCnlhel9zY2FuX3Jlc3VsdHx5YXpfc2NoZW1hfHlhel9zZWFyY2h8eWF6X3NldF9vcHRpb258eWF6X3NvcnR8eWF6X3N5bnRheHx5YXpfd2FpdHx5cF9hbGx8eXBfY2F0fHlwX2Vycl9zdHJpbmd8eXBfZXJybm98eXBfZmlyc3R8XAp5cF9nZXRfZGVmYXVsdF9kb21haW58eXBfbWFzdGVyfHlwX21hdGNofHlwX25leHR8eXBfb3JkZXJ8emVuZF9sb2dvX2d1aWR8emVuZF90aHJlYWRfaWR8emVuZF92ZXJzaW9ufHppcF9jbG9zZXx6aXBfZW50cnlfY2xvc2V8XAp6aXBfZW50cnlfY29tcHJlc3NlZHNpemV8emlwX2VudHJ5X2NvbXByZXNzaW9ubWV0aG9kfHppcF9lbnRyeV9maWxlc2l6ZXx6aXBfZW50cnlfbmFtZXx6aXBfZW50cnlfb3Blbnx6aXBfZW50cnlfcmVhZHx6aXBfb3Blbnx6aXBfcmVhZHxcCnppcGFyY2hpdmV8emlwYXJjaGl2ZV9hZGRlbXB0eWRpcnx6aXBhcmNoaXZlX2FkZGZpbGV8emlwYXJjaGl2ZV9hZGRmcm9tc3RyaW5nfHppcGFyY2hpdmVfY2xvc2V8emlwYXJjaGl2ZV9kZWxldGVpbmRleHxcCnppcGFyY2hpdmVfZGVsZXRlbmFtZXx6aXBhcmNoaXZlX2V4dHJhY3R0b3x6aXBhcmNoaXZlX2dldGFyY2hpdmVjb21tZW50fHppcGFyY2hpdmVfZ2V0Y29tbWVudGluZGV4fHppcGFyY2hpdmVfZ2V0Y29tbWVudG5hbWV8XAp6aXBhcmNoaXZlX2dldGZyb21pbmRleHx6aXBhcmNoaXZlX2dldGZyb21uYW1lfHppcGFyY2hpdmVfZ2V0bmFtZWluZGV4fHppcGFyY2hpdmVfZ2V0c3RhdHVzc3RyaW5nfHppcGFyY2hpdmVfZ2V0c3RyZWFtfFwKemlwYXJjaGl2ZV9sb2NhdGVuYW1lfHppcGFyY2hpdmVfb3Blbnx6aXBhcmNoaXZlX3JlbmFtZWluZGV4fHppcGFyY2hpdmVfcmVuYW1lbmFtZXx6aXBhcmNoaXZlX3NldENvbW1lbnROYW1lfHppcGFyY2hpdmVfc2V0YXJjaGl2ZWNvbW1lbnR8XAp6aXBhcmNoaXZlX3NldGNvbW1lbnRpbmRleHx6aXBhcmNoaXZlX3N0YXRpbmRleHx6aXBhcmNoaXZlX3N0YXRuYW1lfHppcGFyY2hpdmVfdW5jaGFuZ2VhbGx8emlwYXJjaGl2ZV91bmNoYW5nZWFyY2hpdmV8XAp6aXBhcmNoaXZlX3VuY2hhbmdlaW5kZXh8emlwYXJjaGl2ZV91bmNoYW5nZW5hbWV8emxpYl9nZXRfY29kaW5nX3R5cGUnLnNwbGl0KCd8JykKICAgICk7CiAgICB2YXIga2V5d29yZHMgPSBsYW5nLmFycmF5VG9NYXAoCidhYnN0cmFjdHxhbmR8YXJyYXl8YXN8YnJlYWt8Y2FsbGFibGV8Y2FzZXxjYXRjaHxjbGFzc3xjbG9uZXxjb25zdHxjb250aW51ZXxkZWNsYXJlfGRlZmF1bHR8ZG98ZWxzZXxlbHNlaWZ8ZW5kZGVjbGFyZXxlbmRmb3J8ZW5kZm9yZWFjaHxcCmVuZGlmfGVuZHN3aXRjaHxlbmR3aGlsZXxleHRlbmRzfGZpbmFsfGZpbmFsbHl8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258Z2xvYmFsfGdvdG98aWZ8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGluc3RlYWRvZnxpbnRlcmZhY2V8bmFtZXNwYWNlfG5ld3xvcnxwcml2YXRlfHByb3RlY3RlZHxcCnB1YmxpY3xzdGF0aWN8c3dpdGNofHRocm93fHRyYWl0fHRyeXx1c2V8dmFyfHdoaWxlfHhvcnx5aWVsZCcuc3BsaXQoJ3wnKQogICAgKTsKICAgIHZhciBsYW5ndWFnZUNvbnN0cnVjdHMgPSBsYW5nLmFycmF5VG9NYXAoCiAgICAgICAgKCdfX2hhbHRfY29tcGlsZXJ8ZGllfGVjaG98ZW1wdHl8ZXhpdHxldmFsfGluY2x1ZGV8aW5jbHVkZV9vbmNlfGlzc2V0fGxpc3R8cmVxdWlyZXxyZXF1aXJlX29uY2V8cmV0dXJufHByaW50fHVuc2V0Jykuc3BsaXQoJ3wnKQogICAgKTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAoJ3RydWV8VFJVRXxmYWxzZXxGQUxTRXxudWxsfE5VTEx8X19DTEFTU19ffF9fRElSX198X19GSUxFX198X19MSU5FX198X19NRVRIT0RfX3xfX0ZVTkNUSU9OX198X19OQU1FU1BBQ0VfX3xfX1RSQUlUX18nKS5zcGxpdCgnfCcpCiAgICApOwoKICAgIHZhciBidWlsdGluVmFyaWFibGVzID0gbGFuZy5hcnJheVRvTWFwKAonJEdMT0JBTFN8JF9TRVJWRVJ8JF9HRVR8JF9QT1NUfCRfRklMRVN8JF9SRVFVRVNUfCRfU0VTU0lPTnwkX0VOVnwkX0NPT0tJRXwkcGhwX2Vycm9ybXNnfCRIVFRQX1JBV19QT1NUX0RBVEF8XAokaHR0cF9yZXNwb25zZV9oZWFkZXJ8JGFyZ2N8JGFyZ3YnLnNwbGl0KCd8JykKICAgICk7CiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9uc0RlcHJlY2F0ZWQgPSBsYW5nLmFycmF5VG9NYXAoCidrZXlfZXhpc3RzfGNhaXJvX21hdHJpeF9jcmVhdGVfc2NhbGV8Y2Fpcm9fbWF0cml4X2NyZWF0ZV90cmFuc2xhdGV8Y2FsbF91c2VyX21ldGhvZHxjYWxsX3VzZXJfbWV0aG9kX2FycmF5fGNvbV9hZGRyZWZ8Y29tX2dldHxcCmNvbV9pbnZva2V8Y29tX2lzZW51bXxjb21fbG9hZHxjb21fcmVsZWFzZXxjb21fc2V0fGNvbm5lY3Rpb25fdGltZW91dHxjdWJyaWRfbG9hZF9mcm9tX2dsb3xjdWJyaWRfbmV3X2dsb3xjdWJyaWRfc2F2ZV90b19nbG98XApjdWJyaWRfc2VuZF9nbG98ZGVmaW5lX3N5c2xvZ192YXJpYWJsZXN8ZGx8ZXJlZ3xlcmVnX3JlcGxhY2V8ZXJlZ2l8ZXJlZ2lfcmVwbGFjZXxod19kb2N1bWVudGF0dHJpYnV0ZXN8aHdfZG9jdW1lbnRib2R5dGFnfFwKaHdfZG9jdW1lbnRzaXplfGh3X291dHB1dGRvY3VtZW50fGltYWdlZGFzaGVkbGluZXxtYXhkYl9iaW5kX3BhcmFtfG1heGRiX2JpbmRfcmVzdWx0fG1heGRiX2NsaWVudF9lbmNvZGluZ3xtYXhkYl9jbG9zZV9sb25nX2RhdGF8XAptYXhkYl9leGVjdXRlfG1heGRiX2ZldGNofG1heGRiX2dldF9tZXRhZGF0YXxtYXhkYl9wYXJhbV9jb3VudHxtYXhkYl9zZW5kX2xvbmdfZGF0YXxtY3J5cHRfZWNifG1jcnlwdF9nZW5lcmljX2VuZHxtaW1lX2NvbnRlbnRfdHlwZXxcCm15c3FsX2NyZWF0ZWRifG15c3FsX2RibmFtZXxteXNxbF9kYl9xdWVyeXxteXNxbF9kcm9wX2RifG15c3FsX2Ryb3BkYnxteXNxbF9lc2NhcGVfc3RyaW5nfG15c3FsX2ZpZWxkZmxhZ3N8bXlzcWxfZmllbGRmbGFnc3xcCm15c3FsX2ZpZWxkbmFtZXxteXNxbF9maWVsZHRhYmxlfG15c3FsX2ZpZWxkdHlwZXxteXNxbF9mcmVlcmVzdWx0fG15c3FsX2xpc3RkYnN8bXlzcWxfbGlzdF9maWVsZHN8bXlzcWxfbGlzdGZpZWxkc3xteXNxbF9saXN0X3RhYmxlc3xcCm15c3FsX2xpc3R0YWJsZXN8bXlzcWxfbnVtZmllbGRzfG15c3FsX251bXJvd3N8bXlzcWxfc2VsZWN0ZGJ8bXlzcWxfdGFibGVuYW1lfG15c3FsaV9iaW5kX3BhcmFtfG15c3FsaV9iaW5kX3Jlc3VsdHxcCm15c3FsaV9kaXNhYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9kaXNhYmxlX3JwbF9wYXJzZXxteXNxbGlfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9lbmFibGVfcnBsX3BhcnNlfG15c3FsaV9leGVjdXRlfFwKbXlzcWxpX2ZldGNofG15c3FsaV9nZXRfbWV0YWRhdGF8bXlzcWxpX21hc3Rlcl9xdWVyeXxteXNxbGlfcGFyYW1fY291bnR8bXlzcWxpX3JwbF9wYXJzZV9lbmFibGVkfG15c3FsaV9ycGxfcHJvYmV8bXlzcWxpX3JwbF9xdWVyeV90eXBlfFwKbXlzcWxpX3NlbmRfbG9uZ19kYXRhfG15c3FsaV9zZW5kX3F1ZXJ5fG15c3FsaV9zbGF2ZV9xdWVyeXxvY2liaW5kYnluYW1lfG9jaWNhbmNlbHxvY2ljbG9zZWxvYnxvY2ljb2xsYXBwZW5kfG9jaWNvbGxhc3NpZ258XApvY2ljb2xsYXNzaWduZWxlbXxvY2ljb2xsZ2V0ZWxlbXxvY2ljb2xsbWF4fG9jaWNvbGxzaXplfG9jaWNvbGx0cmltfG9jaWNvbHVtbmlzbnVsbHxvY2ljb2x1bW5uYW1lfG9jaWNvbHVtbnByZWNpc2lvbnxvY2ljb2x1bW5zY2FsZXxcCm9jaWNvbHVtbnNpemV8b2NpY29sdW1udHlwZXxvY2ljb2x1bW50eXBlcmF3fG9jaWNvbW1pdHxvY2lkZWZpbmVieW5hbWV8b2NpZXJyb3J8b2NpZXhlY3V0ZXxvY2lmZXRjaHxvY2lmZXRjaGludG98b2NpZmV0Y2hzdGF0ZW1lbnR8XApvY2lmcmVlY29sbGVjdGlvbnxvY2lmcmVlY3Vyc29yfG9jaWZyZWVkZXNjfG9jaWZyZWVzdGF0ZW1lbnR8b2NpaW50ZXJuYWxkZWJ1Z3xvY2lsb2FkbG9ifG9jaWxvZ29mZnxvY2lsb2dvbnxvY2luZXdjb2xsZWN0aW9ufFwKb2NpbmV3Y3Vyc29yfG9jaW5ld2Rlc2NyaXB0b3J8b2NpbmxvZ29ufG9jaW51bWNvbHN8b2NpcGFyc2V8b2NpcGxvZ29ufG9jaXJlc3VsdHxvY2lyb2xsYmFja3xvY2lyb3djb3VudHxvY2lzYXZlbG9ifG9jaXNhdmVsb2JmaWxlfFwKb2Npc2VydmVydmVyc2lvbnxvY2lzZXRwcmVmZXRjaHxvY2lzdGF0ZW1lbnR0eXBlfG9jaXdyaXRlbG9idG9maWxlfG9jaXdyaXRldGVtcG9yYXJ5bG9ifFBERl9hZGRfYW5ub3RhdGlvbnxQREZfYWRkX2Jvb2ttYXJrfFwKUERGX2FkZF9sYXVuY2hsaW5rfFBERl9hZGRfbG9jYWxsaW5rfFBERl9hZGRfbm90ZXxQREZfYWRkX291dGxpbmV8UERGX2FkZF9wZGZsaW5rfFBERl9hZGRfd2VibGlua3xQREZfYXR0YWNoX2ZpbGV8UERGX2JlZ2luX3BhZ2V8XApQREZfYmVnaW5fdGVtcGxhdGV8UERGX2Nsb3NlX3BkaXxQREZfY2xvc2V8UERGX2ZpbmRmb250fFBERl9nZXRfZm9udHxQREZfZ2V0X2ZvbnRuYW1lfFBERl9nZXRfZm9udHNpemV8UERGX2dldF9pbWFnZV9oZWlnaHR8XApQREZfZ2V0X2ltYWdlX3dpZHRofFBERl9nZXRfbWFqb3J2ZXJzaW9ufFBERl9nZXRfbWlub3J2ZXJzaW9ufFBERl9nZXRfcGRpX3BhcmFtZXRlcnxQREZfZ2V0X3BkaV92YWx1ZXxQREZfb3Blbl9jY2l0dHxQREZfb3Blbl9maWxlfFwKUERGX29wZW5fZ2lmfFBERl9vcGVuX2ltYWdlX2ZpbGV8UERGX29wZW5faW1hZ2V8UERGX29wZW5fanBlZ3xQREZfb3Blbl9wZGl8UERGX29wZW5fdGlmZnxQREZfcGxhY2VfaW1hZ2V8UERGX3BsYWNlX3BkaV9wYWdlfFwKUERGX3NldF9ib3JkZXJfY29sb3J8UERGX3NldF9ib3JkZXJfZGFzaHxQREZfc2V0X2JvcmRlcl9zdHlsZXxQREZfc2V0X2NoYXJfc3BhY2luZ3xQREZfc2V0X2R1cmF0aW9ufFBERl9zZXRfaG9yaXpfc2NhbGluZ3xcClBERl9zZXRfaW5mb19hdXRob3J8UERGX3NldF9pbmZvX2NyZWF0b3J8UERGX3NldF9pbmZvX2tleXdvcmRzfFBERl9zZXRfaW5mb19zdWJqZWN0fFBERl9zZXRfaW5mb190aXRsZXxQREZfc2V0X2xlYWRpbmd8XApQREZfc2V0X3RleHRfbWF0cml4fFBERl9zZXRfdGV4dF9yZW5kZXJpbmd8UERGX3NldF90ZXh0X3Jpc2V8UERGX3NldF93b3JkX3NwYWNpbmd8UERGX3NldGdyYXlfZmlsbHxQREZfc2V0Z3JheV9zdHJva2V8UERGX3NldGdyYXl8XApQREZfc2V0cG9seWRhc2h8UERGX3NldHJnYmNvbG9yX2ZpbGx8UERGX3NldHJnYmNvbG9yX3N0cm9rZXxQREZfc2V0cmdiY29sb3J8UERGX3Nob3dfYm94ZWR8cGhwX2NoZWNrX3N5bnRheHxweF9zZXRfdGFibGVuYW1lfFwKcHhfc2V0X3RhcmdldGVuY29kaW5nfHJ1bmtpdF9zYW5kYm94X291dHB1dF9oYW5kbGVyfHNlc3Npb25faXNfcmVnaXN0ZXJlZHxzZXNzaW9uX3JlZ2lzdGVyfHNlc3Npb25fdW5yZWdpc3RlclwKc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfG1hZ2ljX3F1b3Rlc19ydW50aW1lfHNldF9zb2NrZXRfYmxvY2tpbmd8c29ja2V0X3NldF9ibG9ja2luZ3xzZXRfc29ja2V0X3RpbWVvdXR8c29ja2V0X3NldF90aW1lb3V0fHNwbGl0fHNwbGl0aXxcCnNxbF9yZWdjYXNlJy5zcGxpdCgnfCcpCiAgICApOwoKICAgIHZhciBrZXl3b3Jkc0RlcHJlY2F0ZWQgPSBsYW5nLmFycmF5VG9NYXAoCiAgICAgICAgKCdjZnVuY3Rpb258b2xkX2Z1bmN0aW9uJykuc3BsaXQoJ3wnKQogICAgKTsKCiAgICB2YXIgZnV0dXJlUmVzZXJ2ZWQgPSBsYW5nLmFycmF5VG9NYXAoW10pOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86I3xcL1wvKSg/OlteP118XD9bXj5dKSovCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRvY0NvbW1lbnQuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVtnaW15XSpcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyAiIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyAnIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZSIsIC8vIGNvbnN0YW50cwogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxiKD86REVGQVVMVF9JTkNMVURFX1BBVEh8RV8oPzpBTEx8Q08oPzpNUElMRV8oPzpFUlJPUnxXQVJOSU5HKXxSRV8oPzpFUlJPUnxXQVJOSU5HKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUnxOT1RJQ0V8UEFSU0V8U1RSSUNUfFVTRVJfKD86RVJST1J8Tk9USUNFfFdBUk5JTkcpfFdBUk5JTkcpfFAoPzpFQVJfKD86RVhURU5TSU9OX0RJUnxJTlNUQUxMX0RJUil8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJIUF8oPzpCSU5ESVJ8Q09ORklHX0ZJTEVfKD86UEFUSHxTQ0FOX0RJUil8REFUQURJUnxFKD86T0x8WFRFTlNJT05fRElSKXxJTlRfKD86TUFYfFNJWkUpfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiTCg/OklCRElSfE9DQUxTVEFURURJUil8Tyg/OlN8VVRQVVRfSEFORExFUl8oPzpDT05UfEVORHxTVEFSVCkpfFBSRUZJWHxTKD86QVBJfEhMSUJfU1VGRklYfFlTQ09ORkRJUil8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJWRVJTSU9OKSl8X19DT01QSUxFUl9IQUxUX09GRlNFVF9fKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAidGV4dCIsICJzdXBwb3J0LmNsYXNzIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXGIobmV3KShcXHMrKShcXHcrKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuY2xhc3MiLCAia2V5d29yZC5vcGVyYXRvciJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxiKFxcdyspKDo6KSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UiLCAvLyBjb25zdGFudHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcYig/OkEoPzpCKD86REFZXyg/OjF8MnwzfDR8NXw2fDcpfE1PTl8oPzoxKD86MHwxfDJ8KXwyfDN8NHw1fDZ8N3w4fDkpKXxMVF9ESUdJVFN8TV9TVFJ8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJTU0VSVF8oPzpBQ1RJVkV8QkFJTHxDQUxMQkFDS3xRVUlFVF9FVkFMfFdBUk5JTkcpKXxDKD86QVNFXyg/OkxPV0VSfFVQUEVSKXxIQVJfTUFYfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiTyg/OkRFU0VUfE5ORUNUSU9OXyg/OkFCT1JURUR8Tk9STUFMfFRJTUVPVVQpfFVOVF8oPzpOT1JNQUx8UkVDVVJTSVZFKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJSKD86RURJVFNfKD86QUxMfERPQ1N8RlVMTFBBR0V8Ryg/OkVORVJBTHxST1VQKXxNT0RVTEVTfFFBfFNBUEkpfE5DWVNUUnwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIllQVF8oPzpCTE9XRklTSHxFWFRfREVTfE1ENXxTKD86QUxUX0xFTkdUSHxURF9ERVMpKSl8VVJSRU5DWV9TWU1CT0wpfEQoPzpBWV8oPzoxfDJ8M3w0fDV8Nnw3KXwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIkVDSU1BTF9QT0lOVHxJUkVDVE9SWV9TRVBBUkFUT1J8Xyg/OkZNVHxUX0ZNVCkpfEUoPzpOVF8oPzpDT01QQVR8Tk9RVU9URVN8UVVPVEVTKXxSQSg/Ol8oPzpEXyg/OkZNVHxUX0ZNVCl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJUX0ZNVHxZRUFSKXwpfFhUUl8oPzpJRl9FWElTVFN8T1ZFUldSSVRFfFBSRUZJWF8oPzpBTEx8SSg/OkZfRVhJU1RTfE5WQUxJRCl8U0FNRSl8U0tJUCkpfEZSQUNfRElHSVRTfEdST1VQSU5HfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiSFRNTF8oPzpFTlRJVElFU3xTUEVDSUFMQ0hBUlMpfElOKD86Rk9fKD86QUxMfEMoPzpPTkZJR1VSQVRJT058UkVESVRTKXxFTlZJUk9OTUVOVHxHRU5FUkFMfExJQ0VOU0V8TU9EVUxFU3xWQVJJQUJMRVMpfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiSV8oPzpBTEx8UEVSRElSfFNZU1RFTXxVU0VSKXxUXyg/OkNVUlJfU1lNQk9MfEZSQUNfRElHSVRTKSl8TCg/OkNfKD86QUxMfEMoPzpPTExBVEV8VFlQRSl8TSg/OkVTU0FHRVN8T05FVEFSWSl8TlVNRVJJQ3xUSU1FKXwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIk8oPzpDS18oPzpFWHxOQnxTSHxVTil8R18oPzpBKD86TEVSVHxVVEgoPzpQUklWfCkpfEMoPzpPTlN8Uig/OklUfE9OKSl8RCg/OkFFTU9OfEVCVUcpfEUoPzpNRVJHfFJSKXxJTkZPfEtFUk58IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJMKD86T0NBTCg/OjB8MXwyfDN8NHw1fDZ8Nyl8UFIpfE1BSUx8Tig/OkRFTEFZfEVXU3xPKD86VElDRXxXQUlUKSl8T0RFTEFZfFAoPzpFUlJPUnxJRCl8U1lTTE9HfFUoPzpTRVJ8VUNQKXxXQVJOSU5HKSkpfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiTSg/Ok9OXyg/OjEoPzowfDF8MnwpfDJ8M3w0fDV8Nnw3fDh8OXxERUNJTUFMX1BPSU5UfEdST1VQSU5HfFRIT1VTQU5EU19TRVApfF8oPzoxX1BJfDJfKD86UEl8U1FSVFBJKXxFfEwoPzpOKD86MTB8Mil8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJPRyg/OjEwRXwyRSkpfFBJKD86Xyg/OjJ8NCl8KXxTUVJUKD86MV8yfDIpKSl8Tig/OkVHQVRJVkVfU0lHTnxPKD86RVhQUnxTVFIpfF8oPzpDU19QUkVDRURFU3xTKD86RVBfQllfU1BBQ0V8SUdOX1BPU04pKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJQKD86QVRIKD86SU5GT18oPzpCQVNFTkFNRXxESVJOQU1FfEVYVEVOU0lPTil8X1NFUEFSQVRPUil8TV9TVFJ8T1NJVElWRV9TSUdOfF8oPzpDU19QUkVDRURFU3xTKD86RVBfQllfU1BBQ0V8SUdOX1BPU04pKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJSQURJWENIQVJ8Uyg/OkVFS18oPzpDVVJ8RU5EfFNFVCl8T1JUXyg/OkFTQ3xERVNDfE5VTUVSSUN8UkVHVUxBUnxTVFJJTkcpfFRSX1BBRF8oPzpCT1RIfExFRlR8UklHSFQpKXwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIlQoPzpIT1VTKD86QU5EU19TRVB8RVApfF9GTVQoPzpfQU1QTXwpKXxZRVMoPzpFWFBSfFNUUil8U1REKD86SU58T1VUfEVSUikpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChidWlsdGluQ29uc3RhbnRzLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudC5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYnVpbHRpblZhcmlhYmxlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1dHVyZVJlc2VydmVkLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkLmlsbGVnYWwiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5GdW5jdGlvbnMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuZnVuY3Rpb24iOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJkZWJ1Z2dlciIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW52YWxpZC5kZXByZWNhdGVkIjsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlLm1hdGNoKC9eKFwkW2EtekEtWl9ceDdmLVx1ZmZmZl1bYS16QS1aMC05X1x4N2YtXHVmZmZmXSp8c2VsZnxwYXJlbnQpJC8pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaWRlbnRpZmllciI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAvW2EtekEtWl8kXHg3Zi1cdWZmZmZdW2EtekEtWjAtOV9ceDdmLVx1ZmZmZl0qLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTYXRlLCBzdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDMpOwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVswXSA9PSAiJyIgfHwgdmFsdWVbMF0gPT0gJyInKQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS51bnNoaWZ0KHRoaXMubmV4dCwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAibWFya3VwLmxpc3QiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLzw8PCg/Olx3K3wnXHcrJ3wiXHcrIikkLywKICAgICAgICAgICAgICAgIG5leHQ6ICJoZXJlZG9jIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjo6fCF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fCE9fCE9PXw8PXw+PXw9Pnw8PD18Pj49fD4+Pj18PD58PHw+fFxcLj18PXwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwvPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLDtdLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJoZXJlZG9jIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U2F0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMV0gIT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYXJrdXAubGlzdCI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxcdysoPz07PyQpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLioiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdcXFxcKD86W25ydHZlZlxcXFwiJF18WzAtN117MSwzfXx4WzAtOUEtRmEtZl17MSwyfSknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkW1x3XSsoPzpcW1tcd1xdK118Wz1cLV0+XHcrKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkXHtbXiJcfV0rXH0/LyAgICAgICAgICAgLy8gdGhpcyBpcyB3cm9uZyBidXQgb2sgZm9yIG5vdwogICAgICAgICAgICB9LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAnIicsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcifQogICAgICAgIF0sCiAgICAgICAgInFzdHJpbmciIDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiAvXFxbJ1xcXS99LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiJyIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcifQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Cn07Cgpvb3AuaW5oZXJpdHMoUGhwTGFuZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKCnZhciBQaHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIHN0YXJ0UnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnBocF90YWciLCAvLyBwaHAgb3BlbiB0YWcKICAgICAgICAgICAgcmVnZXggOiAiPFxcPyg/OnBocHw9KT8iLAogICAgICAgICAgICBwdXNoICA6ICJwaHAtc3RhcnQiCiAgICAgICAgfQogICAgXTsKCiAgICB2YXIgZW5kUnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnBocF90YWciLCAvLyBwaHAgY2xvc2UgdGFnCiAgICAgICAgICAgIHJlZ2V4IDogIlxcPz4iLAogICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgfQogICAgXTsKCiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy4kcnVsZXMpCiAgICAgICAgdGhpcy4kcnVsZXNba2V5XS51bnNoaWZ0LmFwcGx5KHRoaXMuJHJ1bGVzW2tleV0sIHN0YXJ0UnVsZXMpOwoKICAgIHRoaXMuZW1iZWRSdWxlcyhQaHBMYW5nSGlnaGxpZ2h0UnVsZXMsICJwaHAtIiwgZW5kUnVsZXMsIFsic3RhcnQiXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFBocEhpZ2hsaWdodFJ1bGVzLCBIdG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QaHBIaWdobGlnaHRSdWxlcyA9IFBocEhpZ2hsaWdodFJ1bGVzOwpleHBvcnRzLlBocExhbmdIaWdobGlnaHRSdWxlcyA9IFBocExhbmdIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvcGhwX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgZnVuY3Rpb25NYXAgPSB7CiAgICAiYWJzIjogWwogICAgICAgICJpbnQgYWJzKGludCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIgogICAgXSwKICAgICJhY29zIjogWwogICAgICAgICJmbG9hdCBhY29zKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm4gdGhlIGFyYyBjb3NpbmUgb2YgdGhlIG51bWJlciBpbiByYWRpYW5zIgogICAgXSwKICAgICJhY29zaCI6IFsKICAgICAgICAiZmxvYXQgYWNvc2goZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGludmVyc2UgaHlwZXJib2xpYyBjb3NpbmUgb2YgdGhlIG51bWJlciwgaS5lLiB0aGUgdmFsdWUgd2hvc2UgaHlwZXJib2xpYyBjb3NpbmUgaXMgbnVtYmVyIgogICAgXSwKICAgICJhZGRHbG9iIjogWwogICAgICAgICJib29sIGFkZEdsb2Ioc3RyaW5nIHBhdHRlcm5bLGludCBmbGFncyBbLCBhcnJheSBvcHRpb25zXV0pIiwKICAgICAgICAiQWRkIGZpbGVzIG1hdGNoaW5nIHRoZSBnbG9iIHBhdHRlcm4uIFNlZSBwaHAncyBnbG9iIGZvciB0aGUgcGF0dGVybiBzeW50YXguIgogICAgXSwKICAgICJhZGRQYXR0ZXJuIjogWwogICAgICAgICJib29sIGFkZFBhdHRlcm4oc3RyaW5nIHBhdHRlcm5bLCBzdHJpbmcgcGF0aCBbLCBhcnJheSBvcHRpb25zXV0pIiwKICAgICAgICAiQWRkIGZpbGVzIG1hdGNoaW5nIHRoZSBwY3JlIHBhdHRlcm4uIFNlZSBwaHAncyBwY3JlIGZvciB0aGUgcGF0dGVybiBzeW50YXguIgogICAgXSwKICAgICJhZGRjc2xhc2hlcyI6IFsKICAgICAgICAic3RyaW5nIGFkZGNzbGFzaGVzKHN0cmluZyBzdHIsIHN0cmluZyBjaGFybGlzdCkiLAogICAgICAgICJFc2NhcGVzIGFsbCBjaGFycyBtZW50aW9uZWQgaW4gY2hhcmxpc3Qgd2l0aCBiYWNrc2xhc2guIEl0IGNyZWF0ZXMgb2N0YWwgcmVwcmVzZW50YXRpb25zIGlmIGFza2VkIHRvIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIHdpdGggOHRoIGJpdCBzZXQgb3Igd2l0aCBBU0NJSTwzMiAoZXhjZXB0ICdcXG4nLCAnXFxyJywgJ1xcdCcgZXRjLi4uKSIKICAgIF0sCiAgICAiYWRkc2xhc2hlcyI6IFsKICAgICAgICAic3RyaW5nIGFkZHNsYXNoZXMoc3RyaW5nIHN0cikiLAogICAgICAgICJFc2NhcGVzIHNpbmdsZSBxdW90ZSwgZG91YmxlIHF1b3RlcyBhbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgd2l0aCBiYWNrc2xhc2hlcyIKICAgIF0sCiAgICAiYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZSI6IFsKICAgICAgICAiYm9vbCBhcGFjaGVfY2hpbGRfdGVybWluYXRlKHZvaWQpIiwKICAgICAgICAiVGVybWluYXRlIGFwYWNoZSBwcm9jZXNzIGFmdGVyIHRoaXMgcmVxdWVzdCIKICAgIF0sCiAgICAiYXBhY2hlX2dldF9tb2R1bGVzIjogWwogICAgICAgICJhcnJheSBhcGFjaGVfZ2V0X21vZHVsZXModm9pZCkiLAogICAgICAgICJHZXQgYSBsaXN0IG9mIGxvYWRlZCBBcGFjaGUgbW9kdWxlcyIKICAgIF0sCiAgICAiYXBhY2hlX2dldF92ZXJzaW9uIjogWwogICAgICAgICJzdHJpbmcgYXBhY2hlX2dldF92ZXJzaW9uKHZvaWQpIiwKICAgICAgICAiRmV0Y2ggQXBhY2hlIHZlcnNpb24iCiAgICBdLAogICAgImFwYWNoZV9nZXRlbnYiOiBbCiAgICAgICAgImJvb2wgYXBhY2hlX2dldGVudihzdHJpbmcgdmFyaWFibGUgWywgYm9vbCB3YWxrX3RvX3RvcF0pIiwKICAgICAgICAiR2V0IGFuIEFwYWNoZSBzdWJwcm9jZXNzX2VudiB2YXJpYWJsZSIKICAgIF0sCiAgICAiYXBhY2hlX2xvb2t1cF91cmkiOiBbCiAgICAgICAgIm9iamVjdCBhcGFjaGVfbG9va3VwX3VyaShzdHJpbmcgVVJJKSIsCiAgICAgICAgIlBlcmZvcm0gYSBwYXJ0aWFsIHJlcXVlc3Qgb2YgdGhlIGdpdmVuIFVSSSB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgaXQiCiAgICBdLAogICAgImFwYWNoZV9ub3RlIjogWwogICAgICAgICJzdHJpbmcgYXBhY2hlX25vdGUoc3RyaW5nIG5vdGVfbmFtZSBbLCBzdHJpbmcgbm90ZV92YWx1ZV0pIiwKICAgICAgICAiR2V0IGFuZCBzZXQgQXBhY2hlIHJlcXVlc3Qgbm90ZXMiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X2F1dGhfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIGFwYWNoZV9yZXF1ZXN0X2F1dGhfbmFtZSgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9hdXRoX3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBhcGFjaGVfcmVxdWVzdF9hdXRoX3R5cGUoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfZGlzY2FyZF9yZXF1ZXN0X2JvZHkiOiBbCiAgICAgICAgImxvbmcgYXBhY2hlX3JlcXVlc3RfZGlzY2FyZF9yZXF1ZXN0X2JvZHkoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfZXJyX2hlYWRlcnNfb3V0IjogWwogICAgICAgICJhcnJheSBhcGFjaGVfcmVxdWVzdF9lcnJfaGVhZGVyc19vdXQoW3tzdHJpbmcgbmFtZXxhcnJheSBsaXN0fSBbLCBzdHJpbmcgdmFsdWUgWywgYm9vbCByZXBsYWNlID0gZmFsc2VdXV0pIiwKICAgICAgICAiKiBmZXRjaCBhbGwgaGVhZGVycyB0aGF0IGdvIG91dCBpbiBjYXNlIG9mIGFuIGVycm9yIG9yIGEgc3VicmVxdWVzdCIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgYXBhY2hlX3JlcXVlc3RfaGVhZGVycyh2b2lkKSIsCiAgICAgICAgIkZldGNoIGFsbCBIVFRQIHJlcXVlc3QgaGVhZGVycyIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfaGVhZGVyc19pbiI6IFsKICAgICAgICAiYXJyYXkgYXBhY2hlX3JlcXVlc3RfaGVhZGVyc19pbigpIiwKICAgICAgICAiKiBmZXRjaCBhbGwgaW5jb21pbmcgcmVxdWVzdCBoZWFkZXJzIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9oZWFkZXJzX291dCI6IFsKICAgICAgICAiYXJyYXkgYXBhY2hlX3JlcXVlc3RfaGVhZGVyc19vdXQoW3tzdHJpbmcgbmFtZXxhcnJheSBsaXN0fSBbLCBzdHJpbmcgdmFsdWUgWywgYm9vbCByZXBsYWNlID0gZmFsc2VdXV0pIiwKICAgICAgICAiKiBmZXRjaCBhbGwgb3V0Z29pbmcgcmVxdWVzdCBoZWFkZXJzIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9pc19pbml0aWFsX3JlcSI6IFsKICAgICAgICAiYm9vbCBhcGFjaGVfcmVxdWVzdF9pc19pbml0aWFsX3JlcSgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9sb2dfZXJyb3IiOiBbCiAgICAgICAgImJvb2xlYW4gYXBhY2hlX3JlcXVlc3RfbG9nX2Vycm9yKHN0cmluZyBtZXNzYWdlLCBbbG9uZyBmYWNpbGl0eV0pIiwKICAgICAgICAiIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9tZWV0c19jb25kaXRpb25zIjogWwogICAgICAgICJsb25nIGFwYWNoZV9yZXF1ZXN0X21lZXRzX2NvbmRpdGlvbnMoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfcmVtb3RlX2hvc3QiOiBbCiAgICAgICAgImludCBhcGFjaGVfcmVxdWVzdF9yZW1vdGVfaG9zdChbaW50IHR5cGVdKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfcnVuIjogWwogICAgICAgICJsb25nIGFwYWNoZV9yZXF1ZXN0X3J1bigpIiwKICAgICAgICAiVGhpcyBpcyBhIHdyYXBwZXIgZm9yIGFwX3N1Yl9ydW5fcmVxIGFuZCBhcF9kZXN0b3J5X3N1Yl9yZXEuICBJdCB0YWtlcyAgICAgIHN1Yl9yZXF1ZXN0LCBydW5zIGl0LCBkZXN0cm95cyBpdCwgYW5kIHJldHVybnMgaXQncyBzdGF0dXMuIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9zYXRpc2ZpZXMiOiBbCiAgICAgICAgImxvbmcgYXBhY2hlX3JlcXVlc3Rfc2F0aXNmaWVzKCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3NlcnZlcl9wb3J0IjogWwogICAgICAgICJpbnQgYXBhY2hlX3JlcXVlc3Rfc2VydmVyX3BvcnQoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc2V0X2V0YWciOiBbCiAgICAgICAgInZvaWQgYXBhY2hlX3JlcXVlc3Rfc2V0X2V0YWcoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc2V0X2xhc3RfbW9kaWZpZWQiOiBbCiAgICAgICAgInZvaWQgYXBhY2hlX3JlcXVlc3Rfc2V0X2xhc3RfbW9kaWZpZWQoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc29tZV9hdXRoX3JlcXVpcmVkIjogWwogICAgICAgICJib29sIGFwYWNoZV9yZXF1ZXN0X3NvbWVfYXV0aF9yZXF1aXJlZCgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9zdWJfcmVxX2xvb2t1cF9maWxlIjogWwogICAgICAgICJvYmplY3QgYXBhY2hlX3JlcXVlc3Rfc3ViX3JlcV9sb29rdXBfZmlsZShzdHJpbmcgZmlsZSkiLAogICAgICAgICJSZXR1cm5zIHN1Yi1yZXF1ZXN0IGZvciB0aGUgc3BlY2lmaWVkIGZpbGUuICBZb3Ugd291bGQgICAgIG5lZWQgdG8gcnVuIGl0IHlvdXJzZWxmIHdpdGggcnVuKCkuIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9zdWJfcmVxX2xvb2t1cF91cmkiOiBbCiAgICAgICAgIm9iamVjdCBhcGFjaGVfcmVxdWVzdF9zdWJfcmVxX2xvb2t1cF91cmkoc3RyaW5nIHVyaSkiLAogICAgICAgICJSZXR1cm5zIHN1Yi1yZXF1ZXN0IGZvciB0aGUgc3BlY2lmaWVkIHVyaS4gIFlvdSB3b3VsZCAgICAgbmVlZCB0byBydW4gaXQgeW91cnNlbGYgd2l0aCBydW4oKSIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc3ViX3JlcV9tZXRob2RfdXJpIjogWwogICAgICAgICJvYmplY3QgYXBhY2hlX3JlcXVlc3Rfc3ViX3JlcV9tZXRob2RfdXJpKHN0cmluZyBtZXRob2QsIHN0cmluZyB1cmkpIiwKICAgICAgICAiUmV0dXJucyBzdWItcmVxdWVzdCBmb3IgdGhlIHNwZWNpZmllZCBmaWxlLiAgWW91IHdvdWxkICAgICBuZWVkIHRvIHJ1biBpdCB5b3Vyc2VsZiB3aXRoIHJ1bigpLiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfdXBkYXRlX210aW1lIjogWwogICAgICAgICJsb25nIGFwYWNoZV9yZXF1ZXN0X3VwZGF0ZV9tdGltZShbaW50IGRlcGVuZGVuY3lfbXRpbWVdKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3Jlc2V0X3RpbWVvdXQiOiBbCiAgICAgICAgImJvb2wgYXBhY2hlX3Jlc2V0X3RpbWVvdXQodm9pZCkiLAogICAgICAgICJSZXNldCB0aGUgQXBhY2hlIHdyaXRlIHRpbWVyIgogICAgXSwKICAgICJhcGFjaGVfcmVzcG9uc2VfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnModm9pZCkiLAogICAgICAgICJGZXRjaCBhbGwgSFRUUCByZXNwb25zZSBoZWFkZXJzIgogICAgXSwKICAgICJhcGFjaGVfc2V0ZW52IjogWwogICAgICAgICJib29sIGFwYWNoZV9zZXRlbnYoc3RyaW5nIHZhcmlhYmxlLCBzdHJpbmcgdmFsdWUgWywgYm9vbCB3YWxrX3RvX3RvcF0pIiwKICAgICAgICAiU2V0IGFuIEFwYWNoZSBzdWJwcm9jZXNzX2VudiB2YXJpYWJsZSIKICAgIF0sCiAgICAiYXJyYXlfY2hhbmdlX2tleV9jYXNlIjogWwogICAgICAgICJhcnJheSBhcnJheV9jaGFuZ2Vfa2V5X2Nhc2UoYXJyYXkgaW5wdXQgWywgaW50IGNhc2U9Q0FTRV9MT1dFUl0pIiwKICAgICAgICAiUmV0dW5zIGFuIGFycmF5IHdpdGggYWxsIHN0cmluZyBrZXlzIGxvd2VyY2FzZWQgW29yIHVwcGVyY2FzZWRdIgogICAgXSwKICAgICJhcnJheV9jaHVuayI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfY2h1bmsoYXJyYXkgaW5wdXQsIGludCBzaXplIFssIGJvb2wgcHJlc2VydmVfa2V5c10pIiwKICAgICAgICAiU3BsaXQgYXJyYXkgaW50byBjaHVua3MiCiAgICBdLAogICAgImFycmF5X2NvbWJpbmUiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2NvbWJpbmUoYXJyYXkga2V5cywgYXJyYXkgdmFsdWVzKSIsCiAgICAgICAgIkNyZWF0ZXMgYW4gYXJyYXkgYnkgdXNpbmcgdGhlIGVsZW1lbnRzIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYXMga2V5cyBhbmQgdGhlIGVsZW1lbnRzIG9mIHRoZSBzZWNvbmQgYXMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIgogICAgXSwKICAgICJhcnJheV9jb3VudF92YWx1ZXMiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2NvdW50X3ZhbHVlcyhhcnJheSBpbnB1dCkiLAogICAgICAgICJSZXR1cm4gdGhlIHZhbHVlIGFzIGtleSBhbmQgdGhlIGZyZXF1ZW5jeSBvZiB0aGF0IHZhbHVlIGluIGlucHV0IGFzIHZhbHVlIgogICAgXSwKICAgICJhcnJheV9kaWZmIjogWwogICAgICAgICJhcnJheSBhcnJheV9kaWZmKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gYW55IG9mIHRoZSBvdGhlcnMgYXJndW1lbnRzLiIKICAgIF0sCiAgICAiYXJyYXlfZGlmZl9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZGlmZl9hc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXJzIGFyZ3VtZW50cyBidXQgZG8gYWRkaXRpb25hbCBjaGVja3Mgd2hldGhlciB0aGUga2V5cyBhcmUgZXF1YWwiCiAgICBdLAogICAgImFycmF5X2RpZmZfa2V5IjogWwogICAgICAgICJhcnJheSBhcnJheV9kaWZmX2tleShhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSBrZXlzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiBhbnkgb2YgdGhlIG90aGVycyBhcmd1bWVudHMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBhcnJheV9kaWZmKCkgYnV0IHdvcmtzIG9uIHRoZSBrZXlzIGluc3RlYWQgb2YgdGhlIHZhbHVlcy4gVGhlIGFzc29jaWF0aXZpdHkgaXMgcHJlc2VydmVkLiIKICAgIF0sCiAgICAiYXJyYXlfZGlmZl91YXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2RpZmZfdWFzc29jKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSwgY2FsbGJhY2sgZGF0YV9jb21wX2Z1bmMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXJzIGFyZ3VtZW50cyBidXQgZG8gYWRkaXRpb25hbCBjaGVja3Mgd2hldGhlciB0aGUga2V5cyBhcmUgZXF1YWwuIEVsZW1lbnRzIGFyZSBjb21wYXJlZCBieSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9uLiIKICAgIF0sCiAgICAiYXJyYXlfZGlmZl91a2V5IjogWwogICAgICAgICJhcnJheSBhcnJheV9kaWZmX3VrZXkoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBrZXlfY29tcF9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUga2V5cyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gYW55IG9mIHRoZSBvdGhlcnMgYXJndW1lbnRzLiBVc2VyIHN1cHBsaWVkIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGNvbXBhcmluZyB0aGUga2V5cy4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGFycmF5X3VkaWZmKCkgYnV0IHdvcmtzIG9uIHRoZSBrZXlzIGluc3RlYWQgb2YgdGhlIHZhbHVlcy4gVGhlIGFzc29jaWF0aXZpdHkgaXMgcHJlc2VydmVkLiIKICAgIF0sCiAgICAiYXJyYXlfZmlsbCI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZmlsbChpbnQgc3RhcnRfa2V5LCBpbnQgbnVtLCBtaXhlZCB2YWwpIiwKICAgICAgICAiQ3JlYXRlIGFuIGFycmF5IGNvbnRhaW5pbmcgbnVtIGVsZW1lbnRzIHN0YXJ0aW5nIHdpdGggaW5kZXggc3RhcnRfa2V5IGVhY2ggaW5pdGlhbGl6ZWQgdG8gdmFsIgogICAgXSwKICAgICJhcnJheV9maWxsX2tleXMiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2ZpbGxfa2V5cyhhcnJheSBrZXlzLCBtaXhlZCB2YWwpIiwKICAgICAgICAiQ3JlYXRlIGFuIGFycmF5IHVzaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGFzIGtleXMgZWFjaCBpbml0aWFsaXplZCB0byB2YWwiCiAgICBdLAogICAgImFycmF5X2ZpbHRlciI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZmlsdGVyKGFycmF5IGlucHV0IFssIG1peGVkIGNhbGxiYWNrXSkiLAogICAgICAgICJGaWx0ZXJzIGVsZW1lbnRzIGZyb20gdGhlIGFycmF5IHZpYSB0aGUgY2FsbGJhY2suIgogICAgXSwKICAgICJhcnJheV9mbGlwIjogWwogICAgICAgICJhcnJheSBhcnJheV9mbGlwKGFycmF5IGlucHV0KSIsCiAgICAgICAgIlJldHVybiBhcnJheSB3aXRoIGtleSA8LT4gdmFsdWUgZmxpcHBlZCIKICAgIF0sCiAgICAiYXJyYXlfaW50ZXJzZWN0IjogWwogICAgICAgICJhcnJheSBhcnJheV9pbnRlcnNlY3QoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzIgogICAgXSwKICAgICJhcnJheV9pbnRlcnNlY3RfYXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2ludGVyc2VjdF9hc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIHByZXNlbnQgaW4gYWxsIHRoZSBvdGhlciBhcmd1bWVudHMuIEtleXMgYXJlIHVzZWQgdG8gZG8gbW9yZSByZXN0cmljdGl2ZSBjaGVjayIKICAgIF0sCiAgICAiYXJyYXlfaW50ZXJzZWN0X2tleSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfaW50ZXJzZWN0X2tleShhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSBrZXlzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzLiBLaW5kIG9mIGVxdWl2YWxlbnQgdG8gYXJyYXlfZGlmZihhcnJheV9rZXlzKCRhcnIxKSwgYXJyYXlfa2V5cygkYXJyMilbLGFycmF5X2tleXMoLi4uKV0pLiBFcXVpdmFsZW50IG9mIGFycmF5X2ludGVyc2VjdF9hc3NvYygpIGJ1dCBkb2VzIG5vdCBkbyBjb21wYXJlIG9mIHRoZSBkYXRhLiIKICAgIF0sCiAgICAiYXJyYXlfaW50ZXJzZWN0X3Vhc3NvYyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfaW50ZXJzZWN0X3Vhc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGtleV9jb21wYXJlX2Z1bmMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIHByZXNlbnQgaW4gYWxsIHRoZSBvdGhlciBhcmd1bWVudHMuIEtleXMgYXJlIHVzZWQgdG8gZG8gbW9yZSByZXN0cmljdGl2ZSBjaGVjayBhbmQgdGhleSBhcmUgY29tcGFyZWQgYnkgdXNpbmcgYW4gdXNlci1zdXBwbGllZCBjYWxsYmFjay4iCiAgICBdLAogICAgImFycmF5X2ludGVyc2VjdF91a2V5IjogWwogICAgICAgICJhcnJheSBhcnJheV9pbnRlcnNlY3RfdWtleShhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGtleV9jb21wYXJlX2Z1bmMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSBrZXlzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzLiBLaW5kIG9mIGVxdWl2YWxlbnQgdG8gYXJyYXlfZGlmZihhcnJheV9rZXlzKCRhcnIxKSwgYXJyYXlfa2V5cygkYXJyMilbLGFycmF5X2tleXMoLi4uKV0pLiBUaGUgY29tcGFyaXNvbiBvZiB0aGUga2V5cyBpcyBwZXJmb3JtZWQgYnkgYSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9uLiBFcXVpdmFsZW50IG9mIGFycmF5X2ludGVyc2VjdF91YXNzb2MoKSBidXQgZG9lcyBub3QgZG8gY29tcGFyZSBvZiB0aGUgZGF0YS4iCiAgICBdLAogICAgImFycmF5X2tleV9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgYXJyYXlfa2V5X2V4aXN0cyhtaXhlZCBrZXksIGFycmF5IHNlYXJjaCkiLAogICAgICAgICJDaGVja3MgaWYgdGhlIGdpdmVuIGtleSBvciBpbmRleCBleGlzdHMgaW4gdGhlIGFycmF5IgogICAgXSwKICAgICJhcnJheV9rZXlzIjogWwogICAgICAgICJhcnJheSBhcnJheV9rZXlzKGFycmF5IGlucHV0IFssIG1peGVkIHNlYXJjaF92YWx1ZVssIGJvb2wgc3RyaWN0XV0pIiwKICAgICAgICAiUmV0dXJuIGp1c3QgdGhlIGtleXMgZnJvbSB0aGUgaW5wdXQgYXJyYXksIG9wdGlvbmFsbHkgb25seSBmb3IgdGhlIHNwZWNpZmllZCBzZWFyY2hfdmFsdWUiCiAgICBdLAogICAgImFycmF5X21hcCI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfbWFwKG1peGVkIGNhbGxiYWNrLCBhcnJheSBpbnB1dDEgWywgYXJyYXkgaW5wdXQyICwuLi5dKSIsCiAgICAgICAgIkFwcGxpZXMgdGhlIGNhbGxiYWNrIHRvIHRoZSBlbGVtZW50cyBpbiBnaXZlbiBhcnJheXMuIgogICAgXSwKICAgICJhcnJheV9tZXJnZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfbWVyZ2UoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIk1lcmdlcyBlbGVtZW50cyBmcm9tIHBhc3NlZCBhcnJheXMgaW50byBvbmUgYXJyYXkiCiAgICBdLAogICAgImFycmF5X21lcmdlX3JlY3Vyc2l2ZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfbWVyZ2VfcmVjdXJzaXZlKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSkiLAogICAgICAgICJSZWN1cnNpdmVseSBtZXJnZXMgZWxlbWVudHMgZnJvbSBwYXNzZWQgYXJyYXlzIGludG8gb25lIGFycmF5IgogICAgXSwKICAgICJhcnJheV9tdWx0aXNvcnQiOiBbCiAgICAgICAgImJvb2wgYXJyYXlfbXVsdGlzb3J0KGFycmF5IGFyMSBbLCBTT1JUX0FTQ3xTT1JUX0RFU0MgWywgU09SVF9SRUdVTEFSfFNPUlRfTlVNRVJJQ3xTT1JUX1NUUklOR11dIFssIGFycmF5IGFyMiBbLCBTT1JUX0FTQ3xTT1JUX0RFU0MgWywgU09SVF9SRUdVTEFSfFNPUlRfTlVNRVJJQ3xTT1JUX1NUUklOR11dLCAuLi5dKSIsCiAgICAgICAgIlNvcnQgbXVsdGlwbGUgYXJyYXlzIGF0IG9uY2Ugc2ltaWxhciB0byBob3cgT1JERVIgQlkgY2xhdXNlIHdvcmtzIGluIFNRTCIKICAgIF0sCiAgICAiYXJyYXlfcGFkIjogWwogICAgICAgICJhcnJheSBhcnJheV9wYWQoYXJyYXkgaW5wdXQsIGludCBwYWRfc2l6ZSwgbWl4ZWQgcGFkX3ZhbHVlKSIsCiAgICAgICAgIlJldHVybnMgYSBjb3B5IG9mIGlucHV0IGFycmF5IHBhZGRlZCB3aXRoIHBhZF92YWx1ZSB0byBzaXplIHBhZF9zaXplIgogICAgXSwKICAgICJhcnJheV9wb3AiOiBbCiAgICAgICAgIm1peGVkIGFycmF5X3BvcChhcnJheSBzdGFjaykiLAogICAgICAgICJQb3BzIGFuIGVsZW1lbnQgb2ZmIHRoZSBlbmQgb2YgdGhlIGFycmF5IgogICAgXSwKICAgICJhcnJheV9wcm9kdWN0IjogWwogICAgICAgICJtaXhlZCBhcnJheV9wcm9kdWN0KGFycmF5IGlucHV0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhlIGFycmF5IGVudHJpZXMiCiAgICBdLAogICAgImFycmF5X3B1c2giOiBbCiAgICAgICAgImludCBhcnJheV9wdXNoKGFycmF5IHN0YWNrLCBtaXhlZCB2YXIgWywgbWl4ZWQgLi4uXSkiLAogICAgICAgICJQdXNoZXMgZWxlbWVudHMgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfcmFuZCI6IFsKICAgICAgICAibWl4ZWQgYXJyYXlfcmFuZChhcnJheSBpbnB1dCBbLCBpbnQgbnVtX3JlcV0pIiwKICAgICAgICAiUmV0dXJuIGtleS9rZXlzIGZvciByYW5kb20gZW50cnkvZW50cmllcyBpbiB0aGUgYXJyYXkiCiAgICBdLAogICAgImFycmF5X3JlZHVjZSI6IFsKICAgICAgICAibWl4ZWQgYXJyYXlfcmVkdWNlKGFycmF5IGlucHV0LCBtaXhlZCBjYWxsYmFjayBbLCBtaXhlZCBpbml0aWFsXSkiLAogICAgICAgICJJdGVyYXRpdmVseSByZWR1Y2UgdGhlIGFycmF5IHRvIGEgc2luZ2xlIHZhbHVlIHZpYSB0aGUgY2FsbGJhY2suIgogICAgXSwKICAgICJhcnJheV9yZXBsYWNlIjogWwogICAgICAgICJhcnJheSBhcnJheV9yZXBsYWNlKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSkiLAogICAgICAgICJSZXBsYWNlcyBlbGVtZW50cyBmcm9tIHBhc3NlZCBhcnJheXMgaW50byBvbmUgYXJyYXkiCiAgICBdLAogICAgImFycmF5X3JlcGxhY2VfcmVjdXJzaXZlIjogWwogICAgICAgICJhcnJheSBhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZShhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmVjdXJzaXZlbHkgcmVwbGFjZXMgZWxlbWVudHMgZnJvbSBwYXNzZWQgYXJyYXlzIGludG8gb25lIGFycmF5IgogICAgXSwKICAgICJhcnJheV9yZXZlcnNlIjogWwogICAgICAgICJhcnJheSBhcnJheV9yZXZlcnNlKGFycmF5IGlucHV0IFssIGJvb2wgcHJlc2VydmUga2V5c10pIiwKICAgICAgICAiUmV0dXJuIGlucHV0IGFzIGEgbmV3IGFycmF5IHdpdGggdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIHJldmVyc2VkIgogICAgXSwKICAgICJhcnJheV9zZWFyY2giOiBbCiAgICAgICAgIm1peGVkIGFycmF5X3NlYXJjaChtaXhlZCBuZWVkbGUsIGFycmF5IGhheXN0YWNrIFssIGJvb2wgc3RyaWN0XSkiLAogICAgICAgICJTZWFyY2hlcyB0aGUgYXJyYXkgZm9yIGEgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGlmIHN1Y2Nlc3NmdWwiCiAgICBdLAogICAgImFycmF5X3NoaWZ0IjogWwogICAgICAgICJtaXhlZCBhcnJheV9zaGlmdChhcnJheSBzdGFjaykiLAogICAgICAgICJQb3BzIGFuIGVsZW1lbnQgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5IgogICAgXSwKICAgICJhcnJheV9zbGljZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfc2xpY2UoYXJyYXkgaW5wdXQsIGludCBvZmZzZXQgWywgaW50IGxlbmd0aCBbLCBib29sIHByZXNlcnZlX2tleXNdXSkiLAogICAgICAgICJSZXR1cm5zIGVsZW1lbnRzIHNwZWNpZmllZCBieSBvZmZzZXQgYW5kIGxlbmd0aCIKICAgIF0sCiAgICAiYXJyYXlfc3BsaWNlIjogWwogICAgICAgICJhcnJheSBhcnJheV9zcGxpY2UoYXJyYXkgaW5wdXQsIGludCBvZmZzZXQgWywgaW50IGxlbmd0aCBbLCBhcnJheSByZXBsYWNlbWVudF1dKSIsCiAgICAgICAgIlJlbW92ZXMgdGhlIGVsZW1lbnRzIGRlc2lnbmF0ZWQgYnkgb2Zmc2V0IGFuZCBsZW5ndGggYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHN1cHBsaWVkIGFycmF5IgogICAgXSwKICAgICJhcnJheV9zdW0iOiBbCiAgICAgICAgIm1peGVkIGFycmF5X3N1bShhcnJheSBpbnB1dCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBzdW0gb2YgdGhlIGFycmF5IGVudHJpZXMiCiAgICBdLAogICAgImFycmF5X3VkaWZmIjogWwogICAgICAgICJhcnJheSBhcnJheV91ZGlmZihhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGRhdGFfY29tcF9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiBhbnkgb2YgdGhlIG90aGVycyBhcmd1bWVudHMuIEVsZW1lbnRzIGFyZSBjb21wYXJlZCBieSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9uLiIKICAgIF0sCiAgICAiYXJyYXlfdWRpZmZfYXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X3VkaWZmX2Fzc29jKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSwgY2FsbGJhY2sga2V5X2NvbXBfZnVuYykiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gYW55IG9mIHRoZSBvdGhlcnMgYXJndW1lbnRzIGJ1dCBkbyBhZGRpdGlvbmFsIGNoZWNrcyB3aGV0aGVyIHRoZSBrZXlzIGFyZSBlcXVhbC4gS2V5cyBhcmUgY29tcGFyZWQgYnkgdXNlciBzdXBwbGllZCBmdW5jdGlvbi4iCiAgICBdLAogICAgImFycmF5X3VkaWZmX3Vhc3NvYyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfdWRpZmZfdWFzc29jKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSwgY2FsbGJhY2sgZGF0YV9jb21wX2Z1bmMsIGNhbGxiYWNrIGtleV9jb21wX2Z1bmMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXJzIGFyZ3VtZW50cyBidXQgZG8gYWRkaXRpb25hbCBjaGVja3Mgd2hldGhlciB0aGUga2V5cyBhcmUgZXF1YWwuIEtleXMgYW5kIGVsZW1lbnRzIGFyZSBjb21wYXJlZCBieSB1c2VyIHN1cHBsaWVkIGZ1bmN0aW9ucy4iCiAgICBdLAogICAgImFycmF5X3VpbnRlcnNlY3QiOiBbCiAgICAgICAgImFycmF5IGFycmF5X3VpbnRlcnNlY3QoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBkYXRhX2NvbXBhcmVfZnVuYykiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwgdGhlIG90aGVyIGFyZ3VtZW50cy4gRGF0YSBpcyBjb21wYXJlZCBieSB1c2luZyBhbiB1c2VyLXN1cHBsaWVkIGNhbGxiYWNrLiIKICAgIF0sCiAgICAiYXJyYXlfdWludGVyc2VjdF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfdWludGVyc2VjdF9hc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGRhdGFfY29tcGFyZV9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzLiBLZXlzIGFyZSB1c2VkIHRvIGRvIG1vcmUgcmVzdHJpY3RpdmUgY2hlY2suIERhdGEgaXMgY29tcGFyZWQgYnkgdXNpbmcgYW4gdXNlci1zdXBwbGllZCBjYWxsYmFjay4iCiAgICBdLAogICAgImFycmF5X3VpbnRlcnNlY3RfdWFzc29jIjogWwogICAgICAgICJhcnJheSBhcnJheV91aW50ZXJzZWN0X3Vhc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGRhdGFfY29tcGFyZV9mdW5jLCBjYWxsYmFjayBrZXlfY29tcGFyZV9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzLiBLZXlzIGFyZSB1c2VkIHRvIGRvIG1vcmUgcmVzdHJpY3RpdmUgY2hlY2suIEJvdGggZGF0YSBhbmQga2V5cyBhcmUgY29tcGFyZWQgYnkgdXNpbmcgdXNlci1zdXBwbGllZCBjYWxsYmFja3MuIgogICAgXSwKICAgICJhcnJheV91bmlxdWUiOiBbCiAgICAgICAgImFycmF5IGFycmF5X3VuaXF1ZShhcnJheSBpbnB1dCBbLCBpbnQgc29ydF9mbGFnc10pIiwKICAgICAgICAiUmVtb3ZlcyBkdXBsaWNhdGUgdmFsdWVzIGZyb20gYXJyYXkiCiAgICBdLAogICAgImFycmF5X3Vuc2hpZnQiOiBbCiAgICAgICAgImludCBhcnJheV91bnNoaWZ0KGFycmF5IHN0YWNrLCBtaXhlZCB2YXIgWywgbWl4ZWQgLi4uXSkiLAogICAgICAgICJQdXNoZXMgZWxlbWVudHMgb250byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfdmFsdWVzIjogWwogICAgICAgICJhcnJheSBhcnJheV92YWx1ZXMoYXJyYXkgaW5wdXQpIiwKICAgICAgICAiUmV0dXJuIGp1c3QgdGhlIHZhbHVlcyBmcm9tIHRoZSBpbnB1dCBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfd2FsayI6IFsKICAgICAgICAiYm9vbCBhcnJheV93YWxrKGFycmF5IGlucHV0LCBzdHJpbmcgZnVuY25hbWUgWywgbWl4ZWQgdXNlcmRhdGFdKSIsCiAgICAgICAgIkFwcGx5IGEgdXNlciBmdW5jdGlvbiB0byBldmVyeSBtZW1iZXIgb2YgYW4gYXJyYXkiCiAgICBdLAogICAgImFycmF5X3dhbGtfcmVjdXJzaXZlIjogWwogICAgICAgICJib29sIGFycmF5X3dhbGtfcmVjdXJzaXZlKGFycmF5IGlucHV0LCBzdHJpbmcgZnVuY25hbWUgWywgbWl4ZWQgdXNlcmRhdGFdKSIsCiAgICAgICAgIkFwcGx5IGEgdXNlciBmdW5jdGlvbiByZWN1cnNpdmVseSB0byBldmVyeSBtZW1iZXIgb2YgYW4gYXJyYXkiCiAgICBdLAogICAgImFyc29ydCI6IFsKICAgICAgICAiYm9vbCBhcnNvcnQoYXJyYXkgJmFycmF5X2FyZyBbLCBpbnQgc29ydF9mbGFnc10pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSBpbiByZXZlcnNlIG9yZGVyIGFuZCBtYWludGFpbiBpbmRleCBhc3NvY2lhdGlvbiIKICAgIF0sCiAgICAiYXNpbiI6IFsKICAgICAgICAiZmxvYXQgYXNpbihmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgYXJjIHNpbmUgb2YgdGhlIG51bWJlciBpbiByYWRpYW5zIgogICAgXSwKICAgICJhc2luaCI6IFsKICAgICAgICAiZmxvYXQgYXNpbmgoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGludmVyc2UgaHlwZXJib2xpYyBzaW5lIG9mIHRoZSBudW1iZXIsIGkuZS4gdGhlIHZhbHVlIHdob3NlIGh5cGVyYm9saWMgc2luZSBpcyBudW1iZXIiCiAgICBdLAogICAgImFzb3J0IjogWwogICAgICAgICJib29sIGFzb3J0KGFycmF5ICZhcnJheV9hcmcgWywgaW50IHNvcnRfZmxhZ3NdKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgYW5kIG1haW50YWluIGluZGV4IGFzc29jaWF0aW9uIgogICAgXSwKICAgICJhc3NlcnQiOiBbCiAgICAgICAgImludCBhc3NlcnQoc3RyaW5nfGJvb2wgYXNzZXJ0aW9uKSIsCiAgICAgICAgIkNoZWNrcyBpZiBhc3NlcnRpb24gaXMgZmFsc2UiCiAgICBdLAogICAgImFzc2VydF9vcHRpb25zIjogWwogICAgICAgICJtaXhlZCBhc3NlcnRfb3B0aW9ucyhpbnQgd2hhdCBbLCBtaXhlZCB2YWx1ZV0pIiwKICAgICAgICAiU2V0L2dldCB0aGUgdmFyaW91cyBhc3NlcnQgZmxhZ3MiCiAgICBdLAogICAgImF0YW4iOiBbCiAgICAgICAgImZsb2F0IGF0YW4oZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGFyYyB0YW5nZW50IG9mIHRoZSBudW1iZXIgaW4gcmFkaWFucyIKICAgIF0sCiAgICAiYXRhbjIiOiBbCiAgICAgICAgImZsb2F0IGF0YW4yKGZsb2F0IHksIGZsb2F0IHgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgYXJjIHRhbmdlbnQgb2YgeS94LCB3aXRoIHRoZSByZXN1bHRpbmcgcXVhZHJhbnQgZGV0ZXJtaW5lZCBieSB0aGUgc2lnbnMgb2YgeSBhbmQgeCIKICAgIF0sCiAgICAiYXRhbmgiOiBbCiAgICAgICAgImZsb2F0IGF0YW5oKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiB0aGUgbnVtYmVyLCBpLmUuIHRoZSB2YWx1ZSB3aG9zZSBoeXBlcmJvbGljIHRhbmdlbnQgaXMgbnVtYmVyIgogICAgXSwKICAgICJhdHRhY2hJdGVyYXRvciI6IFsKICAgICAgICAidm9pZCBhdHRhY2hJdGVyYXRvcihJdGVyYXRvciBpdGVyYXRvclssIG1peGVkIGluZm9dKSIsCiAgICAgICAgIkF0dGFjaCBhIG5ldyBpdGVyYXRvciIKICAgIF0sCiAgICAiYmFzZTY0X2RlY29kZSI6IFsKICAgICAgICAic3RyaW5nIGJhc2U2NF9kZWNvZGUoc3RyaW5nIHN0clssIGJvb2wgc3RyaWN0XSkiLAogICAgICAgICJEZWNvZGVzIHN0cmluZyB1c2luZyBNSU1FIGJhc2U2NCBhbGdvcml0aG0iCiAgICBdLAogICAgImJhc2U2NF9lbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyBiYXNlNjRfZW5jb2RlKHN0cmluZyBzdHIpIiwKICAgICAgICAiRW5jb2RlcyBzdHJpbmcgdXNpbmcgTUlNRSBiYXNlNjQgYWxnb3JpdGhtIgogICAgXSwKICAgICJiYXNlX2NvbnZlcnQiOiBbCiAgICAgICAgInN0cmluZyBiYXNlX2NvbnZlcnQoc3RyaW5nIG51bWJlciwgaW50IGZyb21iYXNlLCBpbnQgdG9iYXNlKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgbnVtYmVyIGluIGEgc3RyaW5nIGZyb20gYW55IGJhc2UgPD0gMzYgdG8gYW55IGJhc2UgPD0gMzYiCiAgICBdLAogICAgImJhc2VuYW1lIjogWwogICAgICAgICJzdHJpbmcgYmFzZW5hbWUoc3RyaW5nIHBhdGggWywgc3RyaW5nIHN1ZmZpeF0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZmlsZW5hbWUgY29tcG9uZW50IG9mIHRoZSBwYXRoIgogICAgXSwKICAgICJiY2FkZCI6IFsKICAgICAgICAic3RyaW5nIGJjYWRkKHN0cmluZyBsZWZ0X29wZXJhbmQsIHN0cmluZyByaWdodF9vcGVyYW5kIFssIGludCBzY2FsZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3VtIG9mIHR3byBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlcnMiCiAgICBdLAogICAgImJjY29tcCI6IFsKICAgICAgICAiaW50IGJjY29tcChzdHJpbmcgbGVmdF9vcGVyYW5kLCBzdHJpbmcgcmlnaHRfb3BlcmFuZCBbLCBpbnQgc2NhbGVdKSIsCiAgICAgICAgIkNvbXBhcmVzIHR3byBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlcnMiCiAgICBdLAogICAgImJjZGl2IjogWwogICAgICAgICJzdHJpbmcgYmNkaXYoc3RyaW5nIGxlZnRfb3BlcmFuZCwgc3RyaW5nIHJpZ2h0X29wZXJhbmQgWywgaW50IHNjYWxlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBxdW90aWVudCBvZiB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzIChkaXZpc2lvbikiCiAgICBdLAogICAgImJjbW9kIjogWwogICAgICAgICJzdHJpbmcgYmNtb2Qoc3RyaW5nIGxlZnRfb3BlcmFuZCwgc3RyaW5nIHJpZ2h0X29wZXJhbmQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbW9kdWx1cyBvZiB0aGUgdHdvIGFyYml0cmFyeSBwcmVjaXNpb24gb3BlcmFuZHMiCiAgICBdLAogICAgImJjbXVsIjogWwogICAgICAgICJzdHJpbmcgYmNtdWwoc3RyaW5nIGxlZnRfb3BlcmFuZCwgc3RyaW5nIHJpZ2h0X29wZXJhbmQgWywgaW50IHNjYWxlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBtdWx0aXBsaWNhdGlvbiBvZiB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzIgogICAgXSwKICAgICJiY3BvdyI6IFsKICAgICAgICAic3RyaW5nIGJjcG93KHN0cmluZyB4LCBzdHJpbmcgeSBbLCBpbnQgc2NhbGVdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHZhbHVlIG9mIGFuIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVyIHJhaXNlZCB0byB0aGUgcG93ZXIgb2YgYW5vdGhlciIKICAgIF0sCiAgICAiYmNwb3dtb2QiOiBbCiAgICAgICAgInN0cmluZyBiY3Bvd21vZChzdHJpbmcgeCwgc3RyaW5nIHksIHN0cmluZyBtb2QgWywgaW50IHNjYWxlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlciByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGFub3RoZXIgcmVkdWNlZCBieSBhIG1vZHVsb3VzIgogICAgXSwKICAgICJiY3NjYWxlIjogWwogICAgICAgICJib29sIGJjc2NhbGUoaW50IHNjYWxlKSIsCiAgICAgICAgIlNldHMgZGVmYXVsdCBzY2FsZSBwYXJhbWV0ZXIgZm9yIGFsbCBiYyBtYXRoIGZ1bmN0aW9ucyIKICAgIF0sCiAgICAiYmNzcXJ0IjogWwogICAgICAgICJzdHJpbmcgYmNzcXJ0KHN0cmluZyBvcGVyYW5kIFssIGludCBzY2FsZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgYW4gYXJiaXRyYXkgcHJlY2lzaW9uIG51bWJlciIKICAgIF0sCiAgICAiYmNzdWIiOiBbCiAgICAgICAgInN0cmluZyBiY3N1YihzdHJpbmcgbGVmdF9vcGVyYW5kLCBzdHJpbmcgcmlnaHRfb3BlcmFuZCBbLCBpbnQgc2NhbGVdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzIgogICAgXSwKICAgICJiaW4yaGV4IjogWwogICAgICAgICJzdHJpbmcgYmluMmhleChzdHJpbmcgZGF0YSkiLAogICAgICAgICJDb252ZXJ0cyB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGRhdGEgdG8gaGV4IgogICAgXSwKICAgICJiaW5kX3RleHRkb21haW5fY29kZXNldCI6IFsKICAgICAgICAic3RyaW5nIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChzdHJpbmcgZG9tYWluLCBzdHJpbmcgY29kZXNldCkiLAogICAgICAgICJTcGVjaWZ5IHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIGZyb20gdGhlIERPTUFJTiBtZXNzYWdlIGNhdGFsb2cgd2lsbCBiZSByZXR1cm5lZC4iCiAgICBdLAogICAgImJpbmRlYyI6IFsKICAgICAgICAiaW50IGJpbmRlYyhzdHJpbmcgYmluYXJ5X251bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBkZWNpbWFsIGVxdWl2YWxlbnQgb2YgdGhlIGJpbmFyeSBudW1iZXIiCiAgICBdLAogICAgImJpbmR0ZXh0ZG9tYWluIjogWwogICAgICAgICJzdHJpbmcgYmluZHRleHRkb21haW4oc3RyaW5nIGRvbWFpbl9uYW1lLCBzdHJpbmcgZGlyKSIsCiAgICAgICAgIkJpbmQgdG8gdGhlIHRleHQgZG9tYWluIGRvbWFpbl9uYW1lLCBsb29raW5nIGZvciB0cmFuc2xhdGlvbnMgaW4gZGlyLiBSZXR1cm5zIHRoZSBjdXJyZW50IGRvbWFpbiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfYXV0b2NvbW1pdCI6IFsKICAgICAgICAiYm9vbCBiaXJkc3RlcF9hdXRvY29tbWl0KGludCBpbmRleCkiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX2Nsb3NlIjogWwogICAgICAgICJib29sIGJpcmRzdGVwX2Nsb3NlKGludCBpZCkiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX2NvbW1pdCI6IFsKICAgICAgICAiYm9vbCBiaXJkc3RlcF9jb21taXQoaW50IGluZGV4KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfY29ubmVjdCI6IFsKICAgICAgICAiaW50IGJpcmRzdGVwX2Nvbm5lY3Qoc3RyaW5nIHNlcnZlciwgc3RyaW5nIHVzZXIsIHN0cmluZyBwYXNzKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfZXhlYyI6IFsKICAgICAgICAiaW50IGJpcmRzdGVwX2V4ZWMoaW50IGluZGV4LCBzdHJpbmcgZXhlY19zdHIpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiaXJkc3RlcF9mZXRjaCI6IFsKICAgICAgICAiYm9vbCBiaXJkc3RlcF9mZXRjaChpbnQgaW5kZXgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiaXJkc3RlcF9maWVsZG5hbWUiOiBbCiAgICAgICAgInN0cmluZyBiaXJkc3RlcF9maWVsZG5hbWUoaW50IGluZGV4LCBpbnQgY29sKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfZmllbGRudW0iOiBbCiAgICAgICAgImludCBiaXJkc3RlcF9maWVsZG51bShpbnQgaW5kZXgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiaXJkc3RlcF9mcmVlcmVzdWx0IjogWwogICAgICAgICJib29sIGJpcmRzdGVwX2ZyZWVyZXN1bHQoaW50IGluZGV4KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfb2ZmX2F1dG9jb21taXQiOiBbCiAgICAgICAgImJvb2wgYmlyZHN0ZXBfb2ZmX2F1dG9jb21taXQoaW50IGluZGV4KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfcmVzdWx0IjogWwogICAgICAgICJtaXhlZCBiaXJkc3RlcF9yZXN1bHQoaW50IGluZGV4LCBtaXhlZCBjb2wpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiaXJkc3RlcF9yb2xsYmFjayI6IFsKICAgICAgICAiYm9vbCBiaXJkc3RlcF9yb2xsYmFjayhpbnQgaW5kZXgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiemNvbXByZXNzIjogWwogICAgICAgICJzdHJpbmcgYnpjb21wcmVzcyhzdHJpbmcgc291cmNlIFssIGludCBibG9ja3NpemUxMDBrIFssIGludCB3b3JrZmFjdG9yXV0pIiwKICAgICAgICAiQ29tcHJlc3NlcyBhIHN0cmluZyBpbnRvIEJaaXAyIGVuY29kZWQgZGF0YSIKICAgIF0sCiAgICAiYnpkZWNvbXByZXNzIjogWwogICAgICAgICJzdHJpbmcgYnpkZWNvbXByZXNzKHN0cmluZyBzb3VyY2UgWywgaW50IHNtYWxsXSkiLAogICAgICAgICJEZWNvbXByZXNzZXMgQlppcDIgY29tcHJlc3NlZCBkYXRhIgogICAgXSwKICAgICJiemVycm5vIjogWwogICAgICAgICJpbnQgYnplcnJubyhyZXNvdXJjZSBieikiLAogICAgICAgICJSZXR1cm5zIHRoZSBlcnJvciBudW1iZXIiCiAgICBdLAogICAgImJ6ZXJyb3IiOiBbCiAgICAgICAgImFycmF5IGJ6ZXJyb3IocmVzb3VyY2UgYnopIiwKICAgICAgICAiUmV0dXJucyB0aGUgZXJyb3IgbnVtYmVyIGFuZCBlcnJvciBzdHJpbmcgaW4gYW4gYXNzb2NpYXRpdmUgYXJyYXkiCiAgICBdLAogICAgImJ6ZXJyc3RyIjogWwogICAgICAgICJzdHJpbmcgYnplcnJzdHIocmVzb3VyY2UgYnopIiwKICAgICAgICAiUmV0dXJucyB0aGUgZXJyb3Igc3RyaW5nIgogICAgXSwKICAgICJiem9wZW4iOiBbCiAgICAgICAgInJlc291cmNlIGJ6b3BlbihzdHJpbmd8aW50IGZpbGV8ZnAsIHN0cmluZyBtb2RlKSIsCiAgICAgICAgIk9wZW5zIGEgbmV3IEJaaXAyIHN0cmVhbSIKICAgIF0sCiAgICAiYnpyZWFkIjogWwogICAgICAgICJzdHJpbmcgYnpyZWFkKHJlc291cmNlIGJ6WywgaW50IGxlbmd0aF0pIiwKICAgICAgICAiUmVhZHMgdXAgdG8gbGVuZ3RoIGJ5dGVzIGZyb20gYSBCWmlwMiBzdHJlYW0sIG9yIDEwMjQgYnl0ZXMgaWYgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQiCiAgICBdLAogICAgImNhbF9kYXlzX2luX21vbnRoIjogWwogICAgICAgICJpbnQgY2FsX2RheXNfaW5fbW9udGgoaW50IGNhbGVuZGFyLCBpbnQgbW9udGgsIGludCB5ZWFyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIGEgbW9udGggZm9yIGEgZ2l2ZW4geWVhciBhbmQgY2FsZW5kYXIiCiAgICBdLAogICAgImNhbF9mcm9tX2pkIjogWwogICAgICAgICJhcnJheSBjYWxfZnJvbV9qZChpbnQgamQsIGludCBjYWxlbmRhcikiLAogICAgICAgICJDb252ZXJ0cyBmcm9tIEp1bGlhbiBEYXkgQ291bnQgdG8gYSBzdXBwb3J0ZWQgY2FsZW5kYXIgYW5kIHJldHVybiBleHRlbmRlZCBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAiY2FsX2luZm8iOiBbCiAgICAgICAgImFycmF5IGNhbF9pbmZvKFtpbnQgY2FsZW5kYXJdKSIsCiAgICAgICAgIlJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJ0aWN1bGFyIGNhbGVuZGFyIgogICAgXSwKICAgICJjYWxfdG9famQiOiBbCiAgICAgICAgImludCBjYWxfdG9famQoaW50IGNhbGVuZGFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCB5ZWFyKSIsCiAgICAgICAgIkNvbnZlcnRzIGZyb20gYSBzdXBwb3J0ZWQgY2FsZW5kYXIgdG8gSnVsaWFuIERheSBDb3VudCIKICAgIF0sCiAgICAiY2FsbF91c2VyX2Z1bmMiOiBbCiAgICAgICAgIm1peGVkIGNhbGxfdXNlcl9mdW5jKG1peGVkIGZ1bmN0aW9uX25hbWUgWywgbWl4ZWQgcGFybWV0ZXJdIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiQ2FsbCBhIHVzZXIgZnVuY3Rpb24gd2hpY2ggaXMgdGhlIGZpcnN0IHBhcmFtZXRlciIKICAgIF0sCiAgICAiY2FsbF91c2VyX2Z1bmNfYXJyYXkiOiBbCiAgICAgICAgIm1peGVkIGNhbGxfdXNlcl9mdW5jX2FycmF5KHN0cmluZyBmdW5jdGlvbl9uYW1lLCBhcnJheSBwYXJhbWV0ZXJzKSIsCiAgICAgICAgIkNhbGwgYSB1c2VyIGZ1bmN0aW9uIHdoaWNoIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgd2l0aCB0aGUgYXJndW1lbnRzIGNvbnRhaW5lZCBpbiBhcnJheSIKICAgIF0sCiAgICAiY2FsbF91c2VyX21ldGhvZCI6IFsKICAgICAgICAibWl4ZWQgY2FsbF91c2VyX21ldGhvZChzdHJpbmcgbWV0aG9kX25hbWUsIG1peGVkIG9iamVjdCBbLCBtaXhlZCBwYXJhbWV0ZXJdIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiQ2FsbCBhIHVzZXIgbWV0aG9kIG9uIGEgc3BlY2lmaWMgb2JqZWN0IG9yIGNsYXNzIgogICAgXSwKICAgICJjYWxsX3VzZXJfbWV0aG9kX2FycmF5IjogWwogICAgICAgICJtaXhlZCBjYWxsX3VzZXJfbWV0aG9kX2FycmF5KHN0cmluZyBtZXRob2RfbmFtZSwgbWl4ZWQgb2JqZWN0LCBhcnJheSBwYXJhbXMpIiwKICAgICAgICAiQ2FsbCBhIHVzZXIgbWV0aG9kIG9uIGEgc3BlY2lmaWMgb2JqZWN0IG9yIGNsYXNzIHVzaW5nIGEgcGFyYW1ldGVyIGFycmF5IgogICAgXSwKICAgICJjZWlsIjogWwogICAgICAgICJmbG9hdCBjZWlsKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBuZXh0IGhpZ2hlc3QgaW50ZWdlciB2YWx1ZSBvZiB0aGUgbnVtYmVyIgogICAgXSwKICAgICJjaGRpciI6IFsKICAgICAgICAiYm9vbCBjaGRpcihzdHJpbmcgZGlyZWN0b3J5KSIsCiAgICAgICAgIkNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkiCiAgICBdLAogICAgImNoZWNrZGF0ZSI6IFsKICAgICAgICAiYm9vbCBjaGVja2RhdGUoaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgeWVhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUoMSkgaWYgaXQgaXMgYSB2YWxpZCBkYXRlIGluIGdyZWdvcmlhbiBjYWxlbmRhciIKICAgIF0sCiAgICAiY2hncnAiOiBbCiAgICAgICAgImJvb2wgY2hncnAoc3RyaW5nIGZpbGVuYW1lLCBtaXhlZCBncm91cCkiLAogICAgICAgICJDaGFuZ2UgZmlsZSBncm91cCIKICAgIF0sCiAgICAiY2htb2QiOiBbCiAgICAgICAgImJvb2wgY2htb2Qoc3RyaW5nIGZpbGVuYW1lLCBpbnQgbW9kZSkiLAogICAgICAgICJDaGFuZ2UgZmlsZSBtb2RlIgogICAgXSwKICAgICJjaG93biI6IFsKICAgICAgICAiYm9vbCBjaG93biAoc3RyaW5nIGZpbGVuYW1lLCBtaXhlZCB1c2VyKSIsCiAgICAgICAgIkNoYW5nZSBmaWxlIG93bmVyIgogICAgXSwKICAgICJjaHIiOiBbCiAgICAgICAgInN0cmluZyBjaHIoaW50IGFzY2lpKSIsCiAgICAgICAgIkNvbnZlcnRzIEFTQ0lJIGNvZGUgdG8gYSBjaGFyYWN0ZXIiCiAgICBdLAogICAgImNocm9vdCI6IFsKICAgICAgICAiYm9vbCBjaHJvb3Qoc3RyaW5nIGRpcmVjdG9yeSkiLAogICAgICAgICJDaGFuZ2Ugcm9vdCBkaXJlY3RvcnkiCiAgICBdLAogICAgImNodW5rX3NwbGl0IjogWwogICAgICAgICJzdHJpbmcgY2h1bmtfc3BsaXQoc3RyaW5nIHN0ciBbLCBpbnQgY2h1bmtsZW4gWywgc3RyaW5nIGVuZGluZ11dKSIsCiAgICAgICAgIlJldHVybnMgc3BsaXQgbGluZSIKICAgIF0sCiAgICAiY2xhc3NfYWxpYXMiOiBbCiAgICAgICAgImJvb2wgY2xhc3NfYWxpYXMoc3RyaW5nIHVzZXJfY2xhc3NfbmFtZSAsIHN0cmluZyBhbGlhc19uYW1lIFssIGJvb2wgYXV0b2xvYWRdKSIsCiAgICAgICAgIkNyZWF0ZXMgYW4gYWxpYXMgZm9yIHVzZXIgZGVmaW5lZCBjbGFzcyIKICAgIF0sCiAgICAiY2xhc3NfZXhpc3RzIjogWwogICAgICAgICJib29sIGNsYXNzX2V4aXN0cyhzdHJpbmcgY2xhc3NuYW1lIFssIGJvb2wgYXV0b2xvYWRdKSIsCiAgICAgICAgIkNoZWNrcyBpZiB0aGUgY2xhc3MgZXhpc3RzIgogICAgXSwKICAgICJjbGFzc19pbXBsZW1lbnRzIjogWwogICAgICAgICJhcnJheSBjbGFzc19pbXBsZW1lbnRzKG1peGVkIHdoYXQgWywgYm9vbCBhdXRvbG9hZCBdKSIsCiAgICAgICAgIlJldHVybiBhbGwgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcyBpbXBsZW1lbnRlZCBieSBTUEwiCiAgICBdLAogICAgImNsYXNzX3BhcmVudHMiOiBbCiAgICAgICAgImFycmF5IGNsYXNzX3BhcmVudHMob2JqZWN0IGluc3RhbmNlIFssIGJvb2xlYW4gYXV0b2xvYWQgPSB0cnVlXSkiLAogICAgICAgICJSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIHBhcmVudCBjbGFzc2VzIgogICAgXSwKICAgICJjbGVhcnN0YXRjYWNoZSI6IFsKICAgICAgICAidm9pZCBjbGVhcnN0YXRjYWNoZShbYm9vbCBjbGVhcl9yZWFscGF0aF9jYWNoZVssIHN0cmluZyBmaWxlbmFtZV1dKSIsCiAgICAgICAgIkNsZWFyIGZpbGUgc3RhdCBjYWNoZSIKICAgIF0sCiAgICAiY2xvc2VkaXIiOiBbCiAgICAgICAgInZvaWQgY2xvc2VkaXIoW3Jlc291cmNlIGRpcl9oYW5kbGVdKSIsCiAgICAgICAgIkNsb3NlIGRpcmVjdG9yeSBjb25uZWN0aW9uIGlkZW50aWZpZWQgYnkgdGhlIGRpcl9oYW5kbGUiCiAgICBdLAogICAgImNsb3NlbG9nIjogWwogICAgICAgICJib29sIGNsb3NlbG9nKHZvaWQpIiwKICAgICAgICAiQ2xvc2UgY29ubmVjdGlvbiB0byBzeXN0ZW0gbG9nZ2VyIgogICAgXSwKICAgICJjb2xsYXRvcl9hc29ydCI6IFsKICAgICAgICAiYm9vbCBjb2xsYXRvcl9hc29ydCggQ29sbGF0b3IgJGNvbGwsIGFycmF5KHN0cmluZykgJGFyciApIiwKICAgICAgICAiKiBTb3J0IGFycmF5IHVzaW5nIHNwZWNpZmllZCBjb2xsYXRvciwgbWFpbnRhaW5pbmcgaW5kZXggYXNzb2NpYXRpb24uIgogICAgXSwKICAgICJjb2xsYXRvcl9jb21wYXJlIjogWwogICAgICAgICJpbnQgY29sbGF0b3JfY29tcGFyZSggQ29sbGF0b3IgJGNvbGwsIHN0cmluZyAkc3RyMSwgc3RyaW5nICRzdHIyICkiLAogICAgICAgICIqIENvbXBhcmUgdHdvIHN0cmluZ3MuIgogICAgXSwKICAgICJjb2xsYXRvcl9jcmVhdGUiOiBbCiAgICAgICAgIkNvbGxhdG9yIGNvbGxhdG9yX2NyZWF0ZSggc3RyaW5nICRsb2NhbGUgKSIsCiAgICAgICAgIiogQ3JlYXRlIGNvbGxhdG9yLiIKICAgIF0sCiAgICAiY29sbGF0b3JfZ2V0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAiaW50IGNvbGxhdG9yX2dldF9hdHRyaWJ1dGUoIENvbGxhdG9yICRjb2xsLCBpbnQgJGF0dHIgKSIsCiAgICAgICAgIiogR2V0IGNvbGxhdGlvbiBhdHRyaWJ1dGUgdmFsdWUuIgogICAgXSwKICAgICJjb2xsYXRvcl9nZXRfZXJyb3JfY29kZSI6IFsKICAgICAgICAiaW50IGNvbGxhdG9yX2dldF9lcnJvcl9jb2RlKCBDb2xsYXRvciAkY29sbCApIiwKICAgICAgICAiKiBHZXQgY29sbGF0b3IncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJjb2xsYXRvcl9nZXRfZXJyb3JfbWVzc2FnZSI6IFsKICAgICAgICAic3RyaW5nIGNvbGxhdG9yX2dldF9lcnJvcl9tZXNzYWdlKCBDb2xsYXRvciAkY29sbCApIiwKICAgICAgICAiKiBHZXQgdGV4dCBkZXNjcmlwdGlvbiBmb3IgY29sbGF0b3IncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJjb2xsYXRvcl9nZXRfbG9jYWxlIjogWwogICAgICAgICJzdHJpbmcgY29sbGF0b3JfZ2V0X2xvY2FsZSggQ29sbGF0b3IgJGNvbGwsIGludCAkdHlwZSApIiwKICAgICAgICAiKiBHZXRzIHRoZSBsb2NhbGUgbmFtZSBvZiB0aGUgY29sbGF0b3IuIgogICAgXSwKICAgICJjb2xsYXRvcl9nZXRfc29ydF9rZXkiOiBbCiAgICAgICAgImJvb2wgY29sbGF0b3JfZ2V0X3NvcnRfa2V5KCBDb2xsYXRvciAkY29sbCwgc3RyaW5nICRzdHIgKSIsCiAgICAgICAgIiogR2V0IGEgc29ydCBrZXkgZm9yIGEgc3RyaW5nIGZyb20gYSBDb2xsYXRvci4gfX19IgogICAgXSwKICAgICJjb2xsYXRvcl9nZXRfc3RyZW5ndGgiOiBbCiAgICAgICAgImludCBjb2xsYXRvcl9nZXRfc3RyZW5ndGgoQ29sbGF0b3IgY29sbCkiLAogICAgICAgICIqIFJldHVybnMgdGhlIGN1cnJlbnQgY29sbGF0aW9uIHN0cmVuZ3RoLiIKICAgIF0sCiAgICAiY29sbGF0b3Jfc2V0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAiYm9vbCBjb2xsYXRvcl9zZXRfYXR0cmlidXRlKCBDb2xsYXRvciAkY29sbCwgaW50ICRhdHRyLCBpbnQgJHZhbCApIiwKICAgICAgICAiKiBTZXQgY29sbGF0aW9uIGF0dHJpYnV0ZS4iCiAgICBdLAogICAgImNvbGxhdG9yX3NldF9zdHJlbmd0aCI6IFsKICAgICAgICAiYm9vbCBjb2xsYXRvcl9zZXRfc3RyZW5ndGgoQ29sbGF0b3IgY29sbCwgaW50IHN0cmVuZ3RoKSIsCiAgICAgICAgIiogU2V0IHRoZSBjb2xsYXRpb24gc3RyZW5ndGguIgogICAgXSwKICAgICJjb2xsYXRvcl9zb3J0IjogWwogICAgICAgICJib29sIGNvbGxhdG9yX3NvcnQoICBDb2xsYXRvciAkY29sbCwgYXJyYXkoc3RyaW5nKSAkYXJyIFssIGludCAkc29ydF9mbGFnc10gKSIsCiAgICAgICAgIiogU29ydCBhcnJheSB1c2luZyBzcGVjaWZpZWQgY29sbGF0b3IuIgogICAgXSwKICAgICJjb2xsYXRvcl9zb3J0X3dpdGhfc29ydF9rZXlzIjogWwogICAgICAgICJib29sIGNvbGxhdG9yX3NvcnRfd2l0aF9zb3J0X2tleXMoIENvbGxhdG9yICRjb2xsLCBhcnJheShzdHJpbmcpICRhcnIgKSIsCiAgICAgICAgIiogRXF1aXZhbGVudCB0byBzdGFuZGFyZCBQSFAgc29ydCB1c2luZyBDb2xsYXRvci4gICogVXNlcyBJQ1UgdWNvbF9nZXRTb3J0S2V5IGZvciBwZXJmb3JtYW5jZS4iCiAgICBdLAogICAgImNvbV9jcmVhdGVfZ3VpZCI6IFsKICAgICAgICAic3RyaW5nIGNvbV9jcmVhdGVfZ3VpZCgpIiwKICAgICAgICAiR2VuZXJhdGUgYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciAoR1VJRCkiCiAgICBdLAogICAgImNvbV9ldmVudF9zaW5rIjogWwogICAgICAgICJib29sIGNvbV9ldmVudF9zaW5rKG9iamVjdCBjb21vYmplY3QsIG9iamVjdCBzaW5rb2JqZWN0IFssIG1peGVkIHNpbmtpbnRlcmZhY2VdKSIsCiAgICAgICAgIkNvbm5lY3QgZXZlbnRzIGZyb20gYSBDT00gb2JqZWN0IHRvIGEgUEhQIG9iamVjdCIKICAgIF0sCiAgICAiY29tX2dldF9hY3RpdmVfb2JqZWN0IjogWwogICAgICAgICJvYmplY3QgY29tX2dldF9hY3RpdmVfb2JqZWN0KHN0cmluZyBwcm9naWQgWywgaW50IGNvZGVfcGFnZSBdKSIsCiAgICAgICAgIlJldHVybnMgYSBoYW5kbGUgdG8gYW4gYWxyZWFkeSBydW5uaW5nIGluc3RhbmNlIG9mIGEgQ09NIG9iamVjdCIKICAgIF0sCiAgICAiY29tX2xvYWRfdHlwZWxpYiI6IFsKICAgICAgICAiYm9vbCBjb21fbG9hZF90eXBlbGliKHN0cmluZyB0eXBlbGliX25hbWUgWywgaW50IGNhc2VfaW5zZW5zaXRpdmVdKSIsCiAgICAgICAgIkxvYWRzIGEgVHlwZWxpYnJhcnkgYW5kIHJlZ2lzdGVycyBpdHMgY29uc3RhbnRzIgogICAgXSwKICAgICJjb21fbWVzc2FnZV9wdW1wIjogWwogICAgICAgICJib29sIGNvbV9tZXNzYWdlX3B1bXAoW2ludCB0aW1lb3V0bXNdKSIsCiAgICAgICAgIlByb2Nlc3MgQ09NIG1lc3NhZ2VzLCBzbGVlcGluZyBmb3IgdXAgdG8gdGltZW91dG1zIG1pbGxpc2Vjb25kcyIKICAgIF0sCiAgICAiY29tX3ByaW50X3R5cGVpbmZvIjogWwogICAgICAgICJib29sIGNvbV9wcmludF90eXBlaW5mbyhvYmplY3QgY29tb2JqZWN0IHwgc3RyaW5nIHR5cGVsaWIsIHN0cmluZyBkaXNwaW50ZXJmYWNlLCBib29sIHdhbnRzaW5rKSIsCiAgICAgICAgIlByaW50IG91dCBhIFBIUCBjbGFzcyBkZWZpbml0aW9uIGZvciBhIGRpc3BhdGNoYWJsZSBpbnRlcmZhY2UiCiAgICBdLAogICAgImNvbXBhY3QiOiBbCiAgICAgICAgImFycmF5IGNvbXBhY3QobWl4ZWQgdmFyX25hbWVzIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiQ3JlYXRlcyBhIGhhc2ggY29udGFpbmluZyB2YXJpYWJsZXMgYW5kIHRoZWlyIHZhbHVlcyIKICAgIF0sCiAgICAiY29tcG9zZV9sb2NhbGUiOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgY29tcG9zZV9sb2NhbGUoJGFycmF5KSIsCiAgICAgICAgIiogQ3JlYXRlcyBhIGxvY2FsZSBieSBjb21iaW5pbmcgdGhlIHBhcnRzIG9mIGxvY2FsZS1JRCBwYXNzZWQgICogfX19IgogICAgXSwKICAgICJjb25maXJtX2V4dG5hbWVfY29tcGlsZWQiOiBbCiAgICAgICAgInN0cmluZyBjb25maXJtX2V4dG5hbWVfY29tcGlsZWQoc3RyaW5nIGFyZykiLAogICAgICAgICJSZXR1cm4gYSBzdHJpbmcgdG8gY29uZmlybSB0aGF0IHRoZSBtb2R1bGUgaXMgY29tcGlsZWQgaW4iCiAgICBdLAogICAgImNvbm5lY3Rpb25fYWJvcnRlZCI6IFsKICAgICAgICAiaW50IGNvbm5lY3Rpb25fYWJvcnRlZCh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBjbGllbnQgZGlzY29ubmVjdGVkIgogICAgXSwKICAgICJjb25uZWN0aW9uX3N0YXR1cyI6IFsKICAgICAgICAiaW50IGNvbm5lY3Rpb25fc3RhdHVzKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgY29ubmVjdGlvbiBzdGF0dXMgYml0ZmllbGQiCiAgICBdLAogICAgImNvbnN0YW50IjogWwogICAgICAgICJtaXhlZCBjb25zdGFudChzdHJpbmcgY29uc3RfbmFtZSkiLAogICAgICAgICJHaXZlbiB0aGUgbmFtZSBvZiBhIGNvbnN0YW50IHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIGNvbnN0YW50J3MgYXNzb2NpYXRlZCB2YWx1ZSIKICAgIF0sCiAgICAiY29udmVydF9jeXJfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgY29udmVydF9jeXJfc3RyaW5nKHN0cmluZyBzdHIsIHN0cmluZyBmcm9tLCBzdHJpbmcgdG8pIiwKICAgICAgICAiQ29udmVydCBmcm9tIG9uZSBDeXJpbGxpYyBjaGFyYWN0ZXIgc2V0IHRvIGFub3RoZXIiCiAgICBdLAogICAgImNvbnZlcnRfdXVkZWNvZGUiOiBbCiAgICAgICAgInN0cmluZyBjb252ZXJ0X3V1ZGVjb2RlKHN0cmluZyBkYXRhKSIsCiAgICAgICAgImRlY29kZSBhIHV1ZW5jb2RlZCBzdHJpbmciCiAgICBdLAogICAgImNvbnZlcnRfdXVlbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyBjb252ZXJ0X3V1ZW5jb2RlKHN0cmluZyBkYXRhKSIsCiAgICAgICAgInV1ZW5jb2RlIGEgc3RyaW5nIgogICAgXSwKICAgICJjb3B5IjogWwogICAgICAgICJib29sIGNvcHkoc3RyaW5nIHNvdXJjZV9maWxlLCBzdHJpbmcgZGVzdGluYXRpb25fZmlsZSBbLCByZXNvdXJjZSBjb250ZXh0XSkiLAogICAgICAgICJDb3B5IGEgZmlsZSIKICAgIF0sCiAgICAiY29zIjogWwogICAgICAgICJmbG9hdCBjb3MoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGNvc2luZSBvZiB0aGUgbnVtYmVyIGluIHJhZGlhbnMiCiAgICBdLAogICAgImNvc2giOiBbCiAgICAgICAgImZsb2F0IGNvc2goZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHRoZSBudW1iZXIsIGRlZmluZWQgYXMgKGV4cChudW1iZXIpICsgZXhwKC1udW1iZXIpKS8yIgogICAgXSwKICAgICJjb3VudCI6IFsKICAgICAgICAiaW50IGNvdW50KG1peGVkIHZhciBbLCBpbnQgbW9kZV0pIiwKICAgICAgICAiQ291bnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHZhcmlhYmxlICh1c3VhbGx5IGFuIGFycmF5KSIKICAgIF0sCiAgICAiY291bnRfY2hhcnMiOiBbCiAgICAgICAgIm1peGVkIGNvdW50X2NoYXJzKHN0cmluZyBpbnB1dCBbLCBpbnQgbW9kZV0pIiwKICAgICAgICAiUmV0dXJucyBpbmZvIGFib3V0IHdoYXQgY2hhcmFjdGVycyBhcmUgdXNlZCBpbiBpbnB1dCIKICAgIF0sCiAgICAiY3JjMzIiOiBbCiAgICAgICAgInN0cmluZyBjcmMzMihzdHJpbmcgc3RyKSIsCiAgICAgICAgIkNhbGN1bGF0ZSB0aGUgY3JjMzIgcG9seW5vbWlhbCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAiY3JlYXRlX2Z1bmN0aW9uIjogWwogICAgICAgICJzdHJpbmcgY3JlYXRlX2Z1bmN0aW9uKHN0cmluZyBhcmdzLCBzdHJpbmcgY29kZSkiLAogICAgICAgICJDcmVhdGVzIGFuIGFub255bW91cyBmdW5jdGlvbiwgYW5kIHJldHVybnMgaXRzIG5hbWUgKGZ1bm55LCBlaD8pIgogICAgXSwKICAgICJjcnlwdCI6IFsKICAgICAgICAic3RyaW5nIGNyeXB0KHN0cmluZyBzdHIgWywgc3RyaW5nIHNhbHRdKSIsCiAgICAgICAgIkhhc2ggYSBzdHJpbmciCiAgICBdLAogICAgImN0eXBlX2FsbnVtIjogWwogICAgICAgICJib29sIGN0eXBlX2FsbnVtKG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciBhbHBoYW51bWVyaWMgY2hhcmFjdGVyKHMpIgogICAgXSwKICAgICJjdHlwZV9hbHBoYSI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9hbHBoYShtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgYWxwaGFiZXRpYyBjaGFyYWN0ZXIocykiCiAgICBdLAogICAgImN0eXBlX2NudHJsIjogWwogICAgICAgICJib29sIGN0eXBlX2NudHJsKG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciBjb250cm9sIGNoYXJhY3RlcihzKSIKICAgIF0sCiAgICAiY3R5cGVfZGlnaXQiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfZGlnaXQobWl4ZWQgYykiLAogICAgICAgICJDaGVja3MgZm9yIG51bWVyaWMgY2hhcmFjdGVyKHMpIgogICAgXSwKICAgICJjdHlwZV9ncmFwaCI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9ncmFwaChtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIocykgZXhjZXB0IHNwYWNlIgogICAgXSwKICAgICJjdHlwZV9sb3dlciI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9sb3dlcihtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgbG93ZXJjYXNlIGNoYXJhY3RlcihzKSIKICAgIF0sCiAgICAiY3R5cGVfcHJpbnQiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfcHJpbnQobWl4ZWQgYykiLAogICAgICAgICJDaGVja3MgZm9yIHByaW50YWJsZSBjaGFyYWN0ZXIocykiCiAgICBdLAogICAgImN0eXBlX3B1bmN0IjogWwogICAgICAgICJib29sIGN0eXBlX3B1bmN0KG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciBhbnkgcHJpbnRhYmxlIGNoYXJhY3RlciB3aGljaCBpcyBub3Qgd2hpdGVzcGFjZSBvciBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyIgogICAgXSwKICAgICJjdHlwZV9zcGFjZSI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9zcGFjZShtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3Igd2hpdGVzcGFjZSBjaGFyYWN0ZXIocykiCiAgICBdLAogICAgImN0eXBlX3VwcGVyIjogWwogICAgICAgICJib29sIGN0eXBlX3VwcGVyKG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciB1cHBlcmNhc2UgY2hhcmFjdGVyKHMpIgogICAgXSwKICAgICJjdHlwZV94ZGlnaXQiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfeGRpZ2l0KG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciBjaGFyYWN0ZXIocykgcmVwcmVzZW50aW5nIGEgaGV4YWRlY2ltYWwgZGlnaXQiCiAgICBdLAogICAgImN1cmxfY2xvc2UiOiBbCiAgICAgICAgInZvaWQgY3VybF9jbG9zZShyZXNvdXJjZSBjaCkiLAogICAgICAgICJDbG9zZSBhIGNVUkwgc2Vzc2lvbiIKICAgIF0sCiAgICAiY3VybF9jb3B5X2hhbmRsZSI6IFsKICAgICAgICAicmVzb3VyY2UgY3VybF9jb3B5X2hhbmRsZShyZXNvdXJjZSBjaCkiLAogICAgICAgICJDb3B5IGEgY1VSTCBoYW5kbGUgYWxvbmcgd2l0aCBhbGwgb2YgaXQncyBwcmVmZXJlbmNlcyIKICAgIF0sCiAgICAiY3VybF9lcnJubyI6IFsKICAgICAgICAiaW50IGN1cmxfZXJybm8ocmVzb3VyY2UgY2gpIiwKICAgICAgICAiUmV0dXJuIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgbGFzdCBlcnJvciBudW1iZXIiCiAgICBdLAogICAgImN1cmxfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBjdXJsX2Vycm9yKHJlc291cmNlIGNoKSIsCiAgICAgICAgIlJldHVybiBhIHN0cmluZyBjb250YWluIHRoZSBsYXN0IGVycm9yIGZvciB0aGUgY3VycmVudCBzZXNzaW9uIgogICAgXSwKICAgICJjdXJsX2V4ZWMiOiBbCiAgICAgICAgImJvb2wgY3VybF9leGVjKHJlc291cmNlIGNoKSIsCiAgICAgICAgIlBlcmZvcm0gYSBjVVJMIHNlc3Npb24iCiAgICBdLAogICAgImN1cmxfZ2V0aW5mbyI6IFsKICAgICAgICAibWl4ZWQgY3VybF9nZXRpbmZvKHJlc291cmNlIGNoIFssIGludCBvcHRpb25dKSIsCiAgICAgICAgIkdldCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYSBzcGVjaWZpYyB0cmFuc2ZlciIKICAgIF0sCiAgICAiY3VybF9pbml0IjogWwogICAgICAgICJyZXNvdXJjZSBjdXJsX2luaXQoW3N0cmluZyB1cmxdKSIsCiAgICAgICAgIkluaXRpYWxpemUgYSBjVVJMIHNlc3Npb24iCiAgICBdLAogICAgImN1cmxfbXVsdGlfYWRkX2hhbmRsZSI6IFsKICAgICAgICAiaW50IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShyZXNvdXJjZSBtaCwgcmVzb3VyY2UgY2gpIiwKICAgICAgICAiQWRkIGEgbm9ybWFsIGNVUkwgaGFuZGxlIHRvIGEgY1VSTCBtdWx0aSBoYW5kbGUiCiAgICBdLAogICAgImN1cmxfbXVsdGlfY2xvc2UiOiBbCiAgICAgICAgInZvaWQgY3VybF9tdWx0aV9jbG9zZShyZXNvdXJjZSBtaCkiLAogICAgICAgICJDbG9zZSBhIHNldCBvZiBjVVJMIGhhbmRsZXMiCiAgICBdLAogICAgImN1cmxfbXVsdGlfZXhlYyI6IFsKICAgICAgICAiaW50IGN1cmxfbXVsdGlfZXhlYyhyZXNvdXJjZSBtaCwgaW50ICZzdGlsbF9ydW5uaW5nKSIsCiAgICAgICAgIlJ1biB0aGUgc3ViLWNvbm5lY3Rpb25zIG9mIHRoZSBjdXJyZW50IGNVUkwgaGFuZGxlIgogICAgXSwKICAgICJjdXJsX211bHRpX2dldGNvbnRlbnQiOiBbCiAgICAgICAgInN0cmluZyBjdXJsX211bHRpX2dldGNvbnRlbnQocmVzb3VyY2UgY2gpIiwKICAgICAgICAiUmV0dXJuIHRoZSBjb250ZW50IG9mIGEgY1VSTCBoYW5kbGUgaWYgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiBpcyBzZXQiCiAgICBdLAogICAgImN1cmxfbXVsdGlfaW5mb19yZWFkIjogWwogICAgICAgICJhcnJheSBjdXJsX211bHRpX2luZm9fcmVhZChyZXNvdXJjZSBtaCBbLCBsb25nIG1zZ3NfaW5fcXVldWVdKSIsCiAgICAgICAgIkdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCB0cmFuc2ZlcnMiCiAgICBdLAogICAgImN1cmxfbXVsdGlfaW5pdCI6IFsKICAgICAgICAicmVzb3VyY2UgY3VybF9tdWx0aV9pbml0KHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBhIG5ldyBjVVJMIG11bHRpIGhhbmRsZSIKICAgIF0sCiAgICAiY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlIjogWwogICAgICAgICJpbnQgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKHJlc291cmNlIG1oLCByZXNvdXJjZSBjaCkiLAogICAgICAgICJSZW1vdmUgYSBtdWx0aSBoYW5kbGUgZnJvbSBhIHNldCBvZiBjVVJMIGhhbmRsZXMiCiAgICBdLAogICAgImN1cmxfbXVsdGlfc2VsZWN0IjogWwogICAgICAgICJpbnQgY3VybF9tdWx0aV9zZWxlY3QocmVzb3VyY2UgbWhbLCBkb3VibGUgdGltZW91dF0pIiwKICAgICAgICAiR2V0IGFsbCB0aGUgc29ja2V0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNVUkwgZXh0ZW5zaW9uLCB3aGljaCBjYW4gdGhlbiBiZSBcInNlbGVjdGVkXCIiCiAgICBdLAogICAgImN1cmxfc2V0b3B0IjogWwogICAgICAgICJib29sIGN1cmxfc2V0b3B0KHJlc291cmNlIGNoLCBpbnQgb3B0aW9uLCBtaXhlZCB2YWx1ZSkiLAogICAgICAgICJTZXQgYW4gb3B0aW9uIGZvciBhIGNVUkwgdHJhbnNmZXIiCiAgICBdLAogICAgImN1cmxfc2V0b3B0X2FycmF5IjogWwogICAgICAgICJib29sIGN1cmxfc2V0b3B0X2FycmF5KHJlc291cmNlIGNoLCBhcnJheSBvcHRpb25zKSIsCiAgICAgICAgIlNldCBhbiBhcnJheSBvZiBvcHRpb24gZm9yIGEgY1VSTCB0cmFuc2ZlciIKICAgIF0sCiAgICAiY3VybF92ZXJzaW9uIjogWwogICAgICAgICJhcnJheSBjdXJsX3ZlcnNpb24oW2ludCB2ZXJzaW9uXSkiLAogICAgICAgICJSZXR1cm4gY1VSTCB2ZXJzaW9uIGluZm9ybWF0aW9uLiIKICAgIF0sCiAgICAiY3VycmVudCI6IFsKICAgICAgICAibWl4ZWQgY3VycmVudChhcnJheSBhcnJheV9hcmcpIiwKICAgICAgICAiUmV0dXJuIHRoZSBlbGVtZW50IGN1cnJlbnRseSBwb2ludGVkIHRvIGJ5IHRoZSBpbnRlcm5hbCBhcnJheSBwb2ludGVyIgogICAgXSwKICAgICJkYXRlIjogWwogICAgICAgICJzdHJpbmcgZGF0ZShzdHJpbmcgZm9ybWF0IFssIGxvbmcgdGltZXN0YW1wXSkiLAogICAgICAgICJGb3JtYXQgYSBsb2NhbCBkYXRlL3RpbWUiCiAgICBdLAogICAgImRhdGVfYWRkIjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX2FkZChEYXRlVGltZSBvYmplY3QsIERhdGVJbnRlcnZhbCBpbnRlcnZhbCkiLAogICAgICAgICJBZGRzIGFuIGludGVydmFsIHRvIHRoZSBjdXJyZW50IGRhdGUgaW4gb2JqZWN0LiIKICAgIF0sCiAgICAiZGF0ZV9jcmVhdGUiOiBbCiAgICAgICAgIkRhdGVUaW1lIGRhdGVfY3JlYXRlKFtzdHJpbmcgdGltZVssIERhdGVUaW1lWm9uZSBvYmplY3RdXSkiLAogICAgICAgICJSZXR1cm5zIG5ldyBEYXRlVGltZSBvYmplY3QiCiAgICBdLAogICAgImRhdGVfY3JlYXRlX2Zyb21fZm9ybWF0IjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX2NyZWF0ZV9mcm9tX2Zvcm1hdChzdHJpbmcgZm9ybWF0LCBzdHJpbmcgdGltZVssIERhdGVUaW1lWm9uZSBvYmplY3RdKSIsCiAgICAgICAgIlJldHVybnMgbmV3IERhdGVUaW1lIG9iamVjdCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IgogICAgXSwKICAgICJkYXRlX2RhdGVfc2V0IjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX2RhdGVfc2V0KERhdGVUaW1lIG9iamVjdCwgbG9uZyB5ZWFyLCBsb25nIG1vbnRoLCBsb25nIGRheSkiLAogICAgICAgICJTZXRzIHRoZSBkYXRlLiIKICAgIF0sCiAgICAiZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQoKSIsCiAgICAgICAgIkdldHMgdGhlIGRlZmF1bHQgdGltZXpvbmUgdXNlZCBieSBhbGwgZGF0ZS90aW1lIGZ1bmN0aW9ucyBpbiBhIHNjcmlwdCIKICAgIF0sCiAgICAiZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCI6IFsKICAgICAgICAiYm9vbCBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KHN0cmluZyB0aW1lem9uZV9pZGVudGlmaWVyKSIsCiAgICAgICAgIlNldHMgdGhlIGRlZmF1bHQgdGltZXpvbmUgdXNlZCBieSBhbGwgZGF0ZS90aW1lIGZ1bmN0aW9ucyBpbiBhIHNjcmlwdCIKICAgIF0sCiAgICAiZGF0ZV9kaWZmIjogWwogICAgICAgICJEYXRlSW50ZXJ2YWwgZGF0ZV9kaWZmKERhdGVUaW1lIG9iamVjdCBbLCBib29sIGFic29sdXRlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIERhdGVUaW1lIG9iamVjdHMuIgogICAgXSwKICAgICJkYXRlX2Zvcm1hdCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVfZm9ybWF0KERhdGVUaW1lIG9iamVjdCwgc3RyaW5nIGZvcm1hdCkiLAogICAgICAgICJSZXR1cm5zIGRhdGUgZm9ybWF0dGVkIGFjY29yZGluZyB0byBnaXZlbiBmb3JtYXQiCiAgICBdLAogICAgImRhdGVfZ2V0X2xhc3RfZXJyb3JzIjogWwogICAgICAgICJhcnJheSBkYXRlX2dldF9sYXN0X2Vycm9ycygpIiwKICAgICAgICAiUmV0dXJucyB0aGUgd2FybmluZ3MgYW5kIGVycm9ycyBmb3VuZCB3aGlsZSBwYXJzaW5nIGEgZGF0ZS90aW1lIHN0cmluZy4iCiAgICBdLAogICAgImRhdGVfaW50ZXJ2YWxfY3JlYXRlX2Zyb21fZGF0ZV9zdHJpbmciOiBbCiAgICAgICAgIkRhdGVJbnRlcnZhbCBkYXRlX2ludGVydmFsX2NyZWF0ZV9mcm9tX2RhdGVfc3RyaW5nKHN0cmluZyB0aW1lKSIsCiAgICAgICAgIlVzZXMgdGhlIG5vcm1hbCBkYXRlIHBhcnNlcnMgYW5kIHNldHMgdXAgYSBEYXRlSW50ZXJ2YWwgZnJvbSB0aGUgcmVsYXRpdmUgcGFydHMgb2YgdGhlIHBhcnNlZCBzdHJpbmciCiAgICBdLAogICAgImRhdGVfaW50ZXJ2YWxfZm9ybWF0IjogWwogICAgICAgICJzdHJpbmcgZGF0ZV9pbnRlcnZhbF9mb3JtYXQoRGF0ZUludGVydmFsIG9iamVjdCwgc3RyaW5nIGZvcm1hdCkiLAogICAgICAgICJGb3JtYXRzIHRoZSBpbnRlcnZhbC4iCiAgICBdLAogICAgImRhdGVfaXNvZGF0ZV9zZXQiOiBbCiAgICAgICAgIkRhdGVUaW1lIGRhdGVfaXNvZGF0ZV9zZXQoRGF0ZVRpbWUgb2JqZWN0LCBsb25nIHllYXIsIGxvbmcgd2Vla1ssIGxvbmcgZGF5XSkiLAogICAgICAgICJTZXRzIHRoZSBJU08gZGF0ZS4iCiAgICBdLAogICAgImRhdGVfbW9kaWZ5IjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX21vZGlmeShEYXRlVGltZSBvYmplY3QsIHN0cmluZyBtb2RpZnkpIiwKICAgICAgICAiQWx0ZXJzIHRoZSB0aW1lc3RhbXAuIgogICAgXSwKICAgICJkYXRlX29mZnNldF9nZXQiOiBbCiAgICAgICAgImxvbmcgZGF0ZV9vZmZzZXRfZ2V0KERhdGVUaW1lIG9iamVjdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBEU1Qgb2Zmc2V0LiIKICAgIF0sCiAgICAiZGF0ZV9wYXJzZSI6IFsKICAgICAgICAiYXJyYXkgZGF0ZV9wYXJzZShzdHJpbmcgZGF0ZSkiLAogICAgICAgICJSZXR1cm5zIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZGV0YWlsZWQgaW5mbyBhYm91dCBnaXZlbiBkYXRlIgogICAgXSwKICAgICJkYXRlX3BhcnNlX2Zyb21fZm9ybWF0IjogWwogICAgICAgICJhcnJheSBkYXRlX3BhcnNlX2Zyb21fZm9ybWF0KHN0cmluZyBmb3JtYXQsIHN0cmluZyBkYXRlKSIsCiAgICAgICAgIlJldHVybnMgYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBkZXRhaWxlZCBpbmZvIGFib3V0IGdpdmVuIGRhdGUiCiAgICBdLAogICAgImRhdGVfc3ViIjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX3N1YihEYXRlVGltZSBvYmplY3QsIERhdGVJbnRlcnZhbCBpbnRlcnZhbCkiLAogICAgICAgICJTdWJ0cmFjdHMgYW4gaW50ZXJ2YWwgdG8gdGhlIGN1cnJlbnQgZGF0ZSBpbiBvYmplY3QuIgogICAgXSwKICAgICJkYXRlX3N1bl9pbmZvIjogWwogICAgICAgICJhcnJheSBkYXRlX3N1bl9pbmZvKGxvbmcgdGltZSwgZmxvYXQgbGF0aXR1ZGUsIGZsb2F0IGxvbmdpdHVkZSkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgc3VuIHNldC9yaXNlIGFuZCB0d2lsaWdodCBiZWdpbi9lbmQiCiAgICBdLAogICAgImRhdGVfc3VucmlzZSI6IFsKICAgICAgICAibWl4ZWQgZGF0ZV9zdW5yaXNlKG1peGVkIHRpbWUgWywgaW50IGZvcm1hdCBbLCBmbG9hdCBsYXRpdHVkZSBbLCBmbG9hdCBsb25naXR1ZGUgWywgZmxvYXQgemVuaXRoIFssIGZsb2F0IGdtdF9vZmZzZXRdXV1dXSkiLAogICAgICAgICJSZXR1cm5zIHRpbWUgb2Ygc3VucmlzZSBmb3IgYSBnaXZlbiBkYXkgYW5kIGxvY2F0aW9uIgogICAgXSwKICAgICJkYXRlX3N1bnNldCI6IFsKICAgICAgICAibWl4ZWQgZGF0ZV9zdW5zZXQobWl4ZWQgdGltZSBbLCBpbnQgZm9ybWF0IFssIGZsb2F0IGxhdGl0dWRlIFssIGZsb2F0IGxvbmdpdHVkZSBbLCBmbG9hdCB6ZW5pdGggWywgZmxvYXQgZ210X29mZnNldF1dXV1dKSIsCiAgICAgICAgIlJldHVybnMgdGltZSBvZiBzdW5zZXQgZm9yIGEgZ2l2ZW4gZGF5IGFuZCBsb2NhdGlvbiIKICAgIF0sCiAgICAiZGF0ZV90aW1lX3NldCI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV90aW1lX3NldChEYXRlVGltZSBvYmplY3QsIGxvbmcgaG91ciwgbG9uZyBtaW51dGVbLCBsb25nIHNlY29uZF0pIiwKICAgICAgICAiU2V0cyB0aGUgdGltZS4iCiAgICBdLAogICAgImRhdGVfdGltZXN0YW1wX2dldCI6IFsKICAgICAgICAibG9uZyBkYXRlX3RpbWVzdGFtcF9nZXQoRGF0ZVRpbWUgb2JqZWN0KSIsCiAgICAgICAgIkdldHMgdGhlIFVuaXggdGltZXN0YW1wLiIKICAgIF0sCiAgICAiZGF0ZV90aW1lc3RhbXBfc2V0IjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX3RpbWVzdGFtcF9zZXQoRGF0ZVRpbWUgb2JqZWN0LCBsb25nIHVuaXhUaW1lc3RhbXApIiwKICAgICAgICAiU2V0cyB0aGUgZGF0ZSBhbmQgdGltZSBiYXNlZCBvbiBhbiBVbml4IHRpbWVzdGFtcC4iCiAgICBdLAogICAgImRhdGVfdGltZXpvbmVfZ2V0IjogWwogICAgICAgICJEYXRlVGltZVpvbmUgZGF0ZV90aW1lem9uZV9nZXQoRGF0ZVRpbWUgb2JqZWN0KSIsCiAgICAgICAgIlJldHVybiBuZXcgRGF0ZVRpbWVab25lIG9iamVjdCByZWxhdGl2ZSB0byBnaXZlIERhdGVUaW1lIgogICAgXSwKICAgICJkYXRlX3RpbWV6b25lX3NldCI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV90aW1lem9uZV9zZXQoRGF0ZVRpbWUgb2JqZWN0LCBEYXRlVGltZVpvbmUgb2JqZWN0KSIsCiAgICAgICAgIlNldHMgdGhlIHRpbWV6b25lIGZvciB0aGUgRGF0ZVRpbWUgb2JqZWN0LiIKICAgIF0sCiAgICAiZGF0ZWZtdF9jcmVhdGUiOiBbCiAgICAgICAgIkludGxEYXRlRm9ybWF0dGVyIGRhdGVmbXRfY3JlYXRlKHN0cmluZyAkbG9jYWxlLCBsb25nIGRhdGVfdHlwZSwgbG9uZyB0aW1lX3R5cGVbLCBzdHJpbmcgJHRpbWV6b25lX3N0ciwgbG9uZyAkY2FsZW5kYXIsIHN0cmluZyAkcGF0dGVybl0gKSIsCiAgICAgICAgIiogQ3JlYXRlIGZvcm1hdHRlci4iCiAgICBdLAogICAgImRhdGVmbXRfZm9ybWF0IjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9mb3JtYXQoIFttaXhlZF1pbnQgJGFyZ3Mgb3IgYXJyYXkgJGFyZ3MgKSIsCiAgICAgICAgIiogRm9ybWF0IHRoZSB0aW1lIHZhbHVlIGFzIGEgc3RyaW5nLiB9fX0iCiAgICBdLAogICAgImRhdGVmbXRfZ2V0X2NhbGVuZGFyIjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9nZXRfY2FsZW5kYXIoIEludGxEYXRlRm9ybWF0dGVyICRtZiApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGNhbGVuZGFyLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9nZXRfZGF0ZXR5cGUiOiBbCiAgICAgICAgInN0cmluZyBkYXRlZm10X2dldF9kYXRldHlwZSggSW50bERhdGVGb3JtYXR0ZXIgJG1mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgZGF0ZXR5cGUuIgogICAgXSwKICAgICJkYXRlZm10X2dldF9lcnJvcl9jb2RlIjogWwogICAgICAgICJpbnQgZGF0ZWZtdF9nZXRfZXJyb3JfY29kZSggSW50bERhdGVGb3JtYXR0ZXIgJG5mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJkYXRlZm10X2dldF9lcnJvcl9tZXNzYWdlIjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9nZXRfZXJyb3JfbWVzc2FnZSggSW50bERhdGVGb3JtYXR0ZXIgJGNvbGwgKSIsCiAgICAgICAgIiogR2V0IHRleHQgZGVzY3JpcHRpb24gZm9yIGZvcm1hdHRlcidzIGxhc3QgZXJyb3IgY29kZS4iCiAgICBdLAogICAgImRhdGVmbXRfZ2V0X2xvY2FsZSI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfZ2V0X2xvY2FsZShJbnRsRGF0ZUZvcm1hdHRlciAkbWYpIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGxvY2FsZS4iCiAgICBdLAogICAgImRhdGVmbXRfZ2V0X3BhdHRlcm4iOiBbCiAgICAgICAgInN0cmluZyBkYXRlZm10X2dldF9wYXR0ZXJuKCBJbnRsRGF0ZUZvcm1hdHRlciAkbWYgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBwYXR0ZXJuLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9nZXRfdGltZXR5cGUiOiBbCiAgICAgICAgInN0cmluZyBkYXRlZm10X2dldF90aW1ldHlwZSggSW50bERhdGVGb3JtYXR0ZXIgJG1mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgdGltZXR5cGUuIgogICAgXSwKICAgICJkYXRlZm10X2dldF90aW1lem9uZV9pZCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfZ2V0X3RpbWV6b25lX2lkKCBJbnRsRGF0ZUZvcm1hdHRlciAkbWYgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciB0aW1lem9uZV9pZC4iCiAgICBdLAogICAgImRhdGVmbXRfaXNMZW5pZW50IjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9pc0xlbmllbnQoSW50bERhdGVGb3JtYXR0ZXIgJG1mKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBsb2NhbGUuIgogICAgXSwKICAgICJkYXRlZm10X2xvY2FsdGltZSI6IFsKICAgICAgICAiaW50ZWdlciBkYXRlZm10X2xvY2FsdGltZSggSW50bERhdGVGb3JtYXR0ZXIgJGZtdCwgc3RyaW5nICR0ZXh0X3RvX3BhcnNlWywgaW50ICRwYXJzZV9wb3MgXSkiLAogICAgICAgICIqIFBhcnNlIHRoZSBzdHJpbmcgJHZhbHVlIHRvIGEgbG9jYWx0aW1lIGFycmF5ICB9fX0iCiAgICBdLAogICAgImRhdGVmbXRfcGFyc2UiOiBbCiAgICAgICAgImludGVnZXIgZGF0ZWZtdF9wYXJzZSggSW50bERhdGVGb3JtYXR0ZXIgJGZtdCwgc3RyaW5nICR0ZXh0X3RvX3BhcnNlIFssIGludCAkcGFyc2VfcG9zXSApIiwKICAgICAgICAiKiBQYXJzZSB0aGUgc3RyaW5nICR2YWx1ZSBzdGFydGluZyBhdCBwYXJzZV9wb3MgdG8gYSBVbml4IHRpbWVzdGFtcCAtaW50IH19fSIKICAgIF0sCiAgICAiZGF0ZWZtdF9zZXRMZW5pZW50IjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9zZXRMZW5pZW50KEludGxEYXRlRm9ybWF0dGVyICRtZikiLAogICAgICAgICIqIFNldCBmb3JtYXR0ZXIgbGVuaWVudC4iCiAgICBdLAogICAgImRhdGVmbXRfc2V0X2NhbGVuZGFyIjogWwogICAgICAgICJib29sIGRhdGVmbXRfc2V0X2NhbGVuZGFyKCBJbnRsRGF0ZUZvcm1hdHRlciAkbWYsIGludCAkY2FsZW5kYXIgKSIsCiAgICAgICAgIiogU2V0IGZvcm1hdHRlciBjYWxlbmRhci4iCiAgICBdLAogICAgImRhdGVmbXRfc2V0X3BhdHRlcm4iOiBbCiAgICAgICAgImJvb2wgZGF0ZWZtdF9zZXRfcGF0dGVybiggSW50bERhdGVGb3JtYXR0ZXIgJG1mLCBzdHJpbmcgJHBhdHRlcm4gKSIsCiAgICAgICAgIiogU2V0IGZvcm1hdHRlciBwYXR0ZXJuLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9zZXRfdGltZXpvbmVfaWQiOiBbCiAgICAgICAgImJvb2xlYW4gZGF0ZWZtdF9zZXRfdGltZXpvbmVfaWQoIEludGxEYXRlRm9ybWF0dGVyICRtZiwkdGltZXpvbmVfaWQpIiwKICAgICAgICAiKiBTZXQgZm9ybWF0dGVyIHRpbWV6b25lX2lkLiIKICAgIF0sCiAgICAiZGJhX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIGRiYV9jbG9zZShyZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiQ2xvc2VzIGRhdGFiYXNlIgogICAgXSwKICAgICJkYmFfZGVsZXRlIjogWwogICAgICAgICJib29sIGRiYV9kZWxldGUoc3RyaW5nIGtleSwgcmVzb3VyY2UgaGFuZGxlKSIsCiAgICAgICAgIkRlbGV0ZXMgdGhlIGVudHJ5IGFzc29jaWF0ZWQgd2l0aCBrZXkgICAgSWYgaW5pZmlsZTogcmVtb3ZlIGFsbCBvdGhlciBrZXkgbGluZXMiCiAgICBdLAogICAgImRiYV9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgZGJhX2V4aXN0cyhzdHJpbmcga2V5LCByZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiQ2hlY2tzLCBpZiB0aGUgc3BlY2lmaWVkIGtleSBleGlzdHMiCiAgICBdLAogICAgImRiYV9mZXRjaCI6IFsKICAgICAgICAic3RyaW5nIGRiYV9mZXRjaChzdHJpbmcga2V5LCBbaW50IHNraXAgLF0gcmVzb3VyY2UgaGFuZGxlKSIsCiAgICAgICAgIkZldGNoZXMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGtleSIKICAgIF0sCiAgICAiZGJhX2ZpcnN0a2V5IjogWwogICAgICAgICJzdHJpbmcgZGJhX2ZpcnN0a2V5KHJlc291cmNlIGhhbmRsZSkiLAogICAgICAgICJSZXNldHMgdGhlIGludGVybmFsIGtleSBwb2ludGVyIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBrZXkiCiAgICBdLAogICAgImRiYV9oYW5kbGVycyI6IFsKICAgICAgICAiYXJyYXkgZGJhX2hhbmRsZXJzKFtib29sIGZ1bGxfaW5mb10pIiwKICAgICAgICAiTGlzdCBjb25maWd1cmVkIGRhdGFiYXNlIGhhbmRsZXJzIgogICAgXSwKICAgICJkYmFfaW5zZXJ0IjogWwogICAgICAgICJib29sIGRiYV9pbnNlcnQoc3RyaW5nIGtleSwgc3RyaW5nIHZhbHVlLCByZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiSWYgbm90IGluaWZpbGU6IEluc2VydCB2YWx1ZSBhcyBrZXksIHJldHVybiBmYWxzZSwgaWYga2V5IGV4aXN0cyBhbHJlYWR5ICAgICBJZiBpbmlmaWxlOiBBZGQgdmFrdWUgYXMga2V5IChuZXh0IGluc3RhbmNlIG9mIGtleSkiCiAgICBdLAogICAgImRiYV9rZXlfc3BsaXQiOiBbCiAgICAgICAgImFycmF5fGZhbHNlIGRiYV9rZXlfc3BsaXQoc3RyaW5nIGtleSkiLAogICAgICAgICJTcGxpdHMgYW4gaW5pZmlsZSBrZXkgaW50byBhbiBhcnJheSBvZiB0aGUgZm9ybSBhcnJheSgwPT5ncm91cCwxPT52YWx1ZV9uYW1lKSBidXQgcmV0dXJucyBmYWxzZSBpZiBpbnB1dCBpcyBmYWxzZSBvciBudWxsIgogICAgXSwKICAgICJkYmFfbGlzdCI6IFsKICAgICAgICAiYXJyYXkgZGJhX2xpc3QoKSIsCiAgICAgICAgIkxpc3Qgb3BlbmVkIGRhdGFiYXNlcyIKICAgIF0sCiAgICAiZGJhX25leHRrZXkiOiBbCiAgICAgICAgInN0cmluZyBkYmFfbmV4dGtleShyZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmV4dCBrZXkiCiAgICBdLAogICAgImRiYV9vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBkYmFfb3BlbihzdHJpbmcgcGF0aCwgc3RyaW5nIG1vZGUgWywgc3RyaW5nIGhhbmRsZXJuYW1lLCBzdHJpbmcgLi4uXSkiLAogICAgICAgICJPcGVucyBwYXRoIHVzaW5nIHRoZSBzcGVjaWZpZWQgaGFuZGxlciBpbiBtb2RlIgogICAgXSwKICAgICJkYmFfb3B0aW1pemUiOiBbCiAgICAgICAgImJvb2wgZGJhX29wdGltaXplKHJlc291cmNlIGhhbmRsZSkiLAogICAgICAgICJPcHRpbWl6ZXMgKGUuZy4gY2xlYW4gdXAsIHZhY3V1bSkgZGF0YWJhc2UiCiAgICBdLAogICAgImRiYV9wb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgZGJhX3BvcGVuKHN0cmluZyBwYXRoLCBzdHJpbmcgbW9kZSBbLCBzdHJpbmcgaGFuZGxlcm5hbWUsIHN0cmluZyAuLi5dKSIsCiAgICAgICAgIk9wZW5zIHBhdGggdXNpbmcgdGhlIHNwZWNpZmllZCBoYW5kbGVyIGluIG1vZGUgcGVyc2lzdGVudGx5IgogICAgXSwKICAgICJkYmFfcmVwbGFjZSI6IFsKICAgICAgICAiYm9vbCBkYmFfcmVwbGFjZShzdHJpbmcga2V5LCBzdHJpbmcgdmFsdWUsIHJlc291cmNlIGhhbmRsZSkiLAogICAgICAgICJJbnNlcnRzIHZhbHVlIGFzIGtleSwgcmVwbGFjZXMga2V5LCBpZiBrZXkgZXhpc3RzIGFscmVhZHkgICAgSWYgaW5pZmlsZTogcmVtb3ZlIGFsbCBvdGhlciBrZXkgbGluZXMiCiAgICBdLAogICAgImRiYV9zeW5jIjogWwogICAgICAgICJib29sIGRiYV9zeW5jKHJlc291cmNlIGhhbmRsZSkiLAogICAgICAgICJTeW5jaHJvbml6ZXMgZGF0YWJhc2UiCiAgICBdLAogICAgImRjZ2V0dGV4dCI6IFsKICAgICAgICAic3RyaW5nIGRjZ2V0dGV4dChzdHJpbmcgZG9tYWluX25hbWUsIHN0cmluZyBtc2dpZCwgbG9uZyBjYXRlZ29yeSkiLAogICAgICAgICJSZXR1cm4gdGhlIHRyYW5zbGF0aW9uIG9mIG1zZ2lkIGZvciBkb21haW5fbmFtZSBhbmQgY2F0ZWdvcnksIG9yIG1zZ2lkIHVuYWx0ZXJlZCBpZiBhIHRyYW5zbGF0aW9uIGRvZXMgbm90IGV4aXN0IgogICAgXSwKICAgICJkY25nZXR0ZXh0IjogWwogICAgICAgICJzdHJpbmcgZGNuZ2V0dGV4dCAoc3RyaW5nIGRvbWFpbiwgc3RyaW5nIG1zZ2lkMSwgc3RyaW5nIG1zZ2lkMiwgaW50IG4sIGludCBjYXRlZ29yeSkiLAogICAgICAgICJQbHVyYWwgdmVyc2lvbiBvZiBkY2dldHRleHQoKSIKICAgIF0sCiAgICAiZGVidWdfYmFja3RyYWNlIjogWwogICAgICAgICJhcnJheSBkZWJ1Z19iYWNrdHJhY2UoW2Jvb2wgcHJvdmlkZV9vYmplY3RdKSIsCiAgICAgICAgIlJldHVybiBiYWNrdHJhY2UgYXMgYXJyYXkiCiAgICBdLAogICAgImRlYnVnX3ByaW50X2JhY2t0cmFjZSI6IFsKICAgICAgICAidm9pZCBkZWJ1Z19wcmludF9iYWNrdHJhY2Uodm9pZCkgKi8iLAogICAgICAgICJaRU5EX0ZVTkNUSU9OKGRlYnVnX3ByaW50X2JhY2t0cmFjZSkgeyAgemVuZF9leGVjdXRlX2RhdGEgKnB0ciwgKnNraXA7ICBpbnQgbGluZW5vOyAgY2hhciAqZnVuY3Rpb25fbmFtZTsgIGNoYXIgKmZpbGVuYW1lOyAgY2hhciAqY2xhc3NfbmFtZSA9IE5VTEw7ICBjaGFyICpjYWxsX3R5cGU7ICBjaGFyICppbmNsdWRlX2ZpbGVuYW1lID0gTlVMTDsgIHp2YWwgKmFyZ19hcnJheSA9IE5VTEw7ICBpbnQgaW5kZW50ID0gMDsgICBpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzX25vbmUoKSA9PSBGQUlMVVJFKSB7ICAgcmV0dXJuOyAgfSAgIHB0ciA9IEVHKGN1cnJlbnRfZXhlY3V0ZV9kYXRhKTsiLAogICAgICAgICJQSFBfRlVOQ1RJT04oZG9tX2RvY3VtZW50X3JlbGF4TkdfdmFsaWRhdGVfZmlsZSkgeyAgX2RvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBET01fTE9BRF9GSUxFKTsgfSAvKiB9fX0gZW5kIGRvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlX2ZpbGUiCiAgICBdLAogICAgImRvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlX3htbCI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fZG9jdW1lbnRfcmVsYXhOR192YWxpZGF0ZV94bWwoc3RyaW5nIHNvdXJjZSk7ICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKGRvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlX3htbCkgeyAgX2RvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBET01fTE9BRF9TVFJJTkcpOyB9IC8qIH19fSBlbmQgZG9tX2RvY3VtZW50X3JlbGF4TkdfdmFsaWRhdGVfeG1sIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfcmVuYW1lX25vZGUiOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX2RvY3VtZW50X3JlbmFtZV9ub2RlKG5vZGUgbiwgc3RyaW5nIG5hbWVzcGFjZVVSSSwgc3RyaW5nIHF1YWxpZmllZE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtRG9jdW1lbnQzLXJlbmFtZU5vZGUgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfc2F2ZSI6IFsKICAgICAgICAiaW50IGRvbV9kb2N1bWVudF9zYXZlKHN0cmluZyBmaWxlKTsiLAogICAgICAgICJDb252ZW5pZW5jZSBtZXRob2QgdG8gc2F2ZSB0byBmaWxlIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfc2F2ZV9odG1sIjogWwogICAgICAgICJzdHJpbmcgZG9tX2RvY3VtZW50X3NhdmVfaHRtbCgpOyIsCiAgICAgICAgIkNvbnZlbmllbmNlIG1ldGhvZCB0byBvdXRwdXQgYXMgaHRtbCIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3NhdmVfaHRtbF9maWxlIjogWwogICAgICAgICJpbnQgZG9tX2RvY3VtZW50X3NhdmVfaHRtbF9maWxlKHN0cmluZyBmaWxlKTsiLAogICAgICAgICJDb252ZW5pZW5jZSBtZXRob2QgdG8gc2F2ZSB0byBmaWxlIGFzIGh0bWwiCiAgICBdLAogICAgImRvbV9kb2N1bWVudF9zYXZleG1sIjogWwogICAgICAgICJzdHJpbmcgZG9tX2RvY3VtZW50X3NhdmV4bWwoW25vZGUgbl0pOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtTFMvbG9hZC1zYXZlLmh0bWwjTFMtRG9jdW1lbnRMUy1zYXZlWE1MIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZSI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlKHN0cmluZyBzb3VyY2UpOyAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihkb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlX3htbCkgeyAgX2RvbV9kb2N1bWVudF9zY2hlbWFfdmFsaWRhdGUoSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsIERPTV9MT0FEX1NUUklORyk7IH0gLyogfX19IGVuZCBkb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlX2ZpbGUiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZV9maWxlKHN0cmluZyBmaWxlbmFtZSk7ICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKGRvbV9kb2N1bWVudF9zY2hlbWFfdmFsaWRhdGVfZmlsZSkgeyAgX2RvbV9kb2N1bWVudF9zY2hlbWFfdmFsaWRhdGUoSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsIERPTV9MT0FEX0ZJTEUpOyB9IC8qIH19fSBlbmQgZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZV9maWxlIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfdmFsaWRhdGUiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX2RvY3VtZW50X3ZhbGlkYXRlKCk7IiwKICAgICAgICAiU2luY2U6IERPTSBleHRlbmRlZCIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3hpbmNsdWRlIjogWwogICAgICAgICJpbnQgZG9tX2RvY3VtZW50X3hpbmNsdWRlKFtpbnQgb3B0aW9uc10pIiwKICAgICAgICAiU3Vic3RpdHV0dWVzIHhpbmNsdWRlcyBpbiBhIERvbURvY3VtZW50IgogICAgXSwKICAgICJkb21fZG9tY29uZmlndXJhdGlvbl9jYW5fc2V0X3BhcmFtZXRlciI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fZG9tY29uZmlndXJhdGlvbl9jYW5fc2V0X3BhcmFtZXRlcihzdHJpbmcgbmFtZSwgZG9tdXNlcmRhdGEgdmFsdWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0RPTUNvbmZpZ3VyYXRpb24tY2FuU2V0UGFyYW1ldGVyIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2RvbWNvbmZpZ3VyYXRpb25fZ2V0X3BhcmFtZXRlciI6IFsKICAgICAgICAiZG9tZG9tdXNlcmRhdGEgZG9tX2RvbWNvbmZpZ3VyYXRpb25fZ2V0X3BhcmFtZXRlcihzdHJpbmcgbmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjRE9NQ29uZmlndXJhdGlvbi1nZXRQYXJhbWV0ZXIgU2luY2U6IgogICAgXSwKICAgICJkb21fZG9tY29uZmlndXJhdGlvbl9zZXRfcGFyYW1ldGVyIjogWwogICAgICAgICJkb21fdm9pZCBkb21fZG9tY29uZmlndXJhdGlvbl9zZXRfcGFyYW1ldGVyKHN0cmluZyBuYW1lLCBkb211c2VyZGF0YSB2YWx1ZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjRE9NQ29uZmlndXJhdGlvbi1wcm9wZXJ0eSBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21lcnJvcmhhbmRsZXJfaGFuZGxlX2Vycm9yIjogWwogICAgICAgICJkb21fYm9vbGVhbiBkb21fZG9tZXJyb3JoYW5kbGVyX2hhbmRsZV9lcnJvcihkb21lcnJvciBlcnJvcik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjSUQtRVJST1JTLURPTUVycm9ySGFuZGxlci1oYW5kbGVFcnJvciBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnQiOiBbCiAgICAgICAgIkRPTURvY3VtZW50IGRvbV9kb21pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnQoc3RyaW5nIG5hbWVzcGFjZVVSSSwgc3RyaW5nIHF1YWxpZmllZE5hbWUsIERPTURvY3VtZW50VHlwZSBkb2N0eXBlKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNMZXZlbC0yLUNvcmUtRE9NLWNyZWF0ZURvY3VtZW50IFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2RvbWltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudF90eXBlIjogWwogICAgICAgICJET01Eb2N1bWVudFR5cGUgZG9tX2RvbWltcGxlbWVudGF0aW9uX2NyZWF0ZV9kb2N1bWVudF90eXBlKHN0cmluZyBxdWFsaWZpZWROYW1lLCBzdHJpbmcgcHVibGljSWQsIHN0cmluZyBzeXN0ZW1JZCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTGV2ZWwtMi1Db3JlLURPTS1jcmVhdGVEb2NUeXBlIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2RvbWltcGxlbWVudGF0aW9uX2dldF9mZWF0dXJlIjogWwogICAgICAgICJET01Ob2RlIGRvbV9kb21pbXBsZW1lbnRhdGlvbl9nZXRfZmVhdHVyZShzdHJpbmcgZmVhdHVyZSwgc3RyaW5nIHZlcnNpb24pOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0RPTUltcGxlbWVudGF0aW9uMy1nZXRGZWF0dXJlIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX2RvbWltcGxlbWVudGF0aW9uX2hhc19mZWF0dXJlIjogWwogICAgICAgICJib29sZWFuIGRvbV9kb21pbXBsZW1lbnRhdGlvbl9oYXNfZmVhdHVyZShzdHJpbmcgZmVhdHVyZSwgc3RyaW5nIHZlcnNpb24pOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0lELTVDRUQ5NEQ3IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2RvbWltcGxlbWVudGF0aW9ubGlzdF9pdGVtIjogWwogICAgICAgICJkb21kb21pbXBsZW1lbnRhdGlvbiBkb21fZG9taW1wbGVtZW50YXRpb25saXN0X2l0ZW0oaW50IGluZGV4KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNET01JbXBsZW1lbnRhdGlvbkxpc3QtaXRlbSBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbnNvdXJjZV9nZXRfZG9taW1wbGVtZW50YXRpb24iOiBbCiAgICAgICAgImRvbWRvbWltcGxlbWVudGF0aW9uIGRvbV9kb21pbXBsZW1lbnRhdGlvbnNvdXJjZV9nZXRfZG9taW1wbGVtZW50YXRpb24oc3RyaW5nIGZlYXR1cmVzKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNJRC1nZXRET01JbXBsIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2RvbWltcGxlbWVudGF0aW9uc291cmNlX2dldF9kb21pbXBsZW1lbnRhdGlvbnMiOiBbCiAgICAgICAgImRvbWltcGxlbWVudGF0aW9ubGlzdCBkb21fZG9taW1wbGVtZW50YXRpb25zb3VyY2VfZ2V0X2RvbWltcGxlbWVudGF0aW9ucyhzdHJpbmcgZmVhdHVyZXMpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0lELWdldERPTUltcGxzIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2RvbXN0cmluZ2xpc3RfaXRlbSI6IFsKICAgICAgICAiZG9tc3RyaW5nIGRvbV9kb21zdHJpbmdsaXN0X2l0ZW0oaW50IGluZGV4KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNET01TdHJpbmdMaXN0LWl0ZW0gU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9nZXRfYXR0cmlidXRlIjogWwogICAgICAgICJzdHJpbmcgZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZShzdHJpbmcgbmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC02NjZFRTBGOSBTaW5jZToiCiAgICBdLAogICAgImRvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZSI6IFsKICAgICAgICAiRE9NQXR0ciBkb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGUoc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtMjE3QTkxQjggU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGVfbnMiOiBbCiAgICAgICAgIkRPTUF0dHIgZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxHZXRBdE5vZGVOUyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbnMiOiBbCiAgICAgICAgInN0cmluZyBkb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxHZXRBdHRyTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUiOiBbCiAgICAgICAgIkRPTU5vZGVMaXN0IGRvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZShzdHJpbmcgbmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC0xOTM4OTE4RCBTaW5jZToiCiAgICBdLAogICAgImRvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9ucyI6IFsKICAgICAgICAiRE9NTm9kZUxpc3QgZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtQTZDOTA5NDIgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fZWxlbWVudF9oYXNfYXR0cmlidXRlIjogWwogICAgICAgICJib29sZWFuIGRvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGUoc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxIYXNBdHRyIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZV9ucyI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fZWxlbWVudF9oYXNfYXR0cmlidXRlX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxIYXNBdHRyTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlIjogWwogICAgICAgICJ2b2lkIGRvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGUoc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtNkQ2QUMwRjkgU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25vZGUiOiBbCiAgICAgICAgIkRPTUF0dHIgZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlKERPTUF0dHIgb2xkQXR0cik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1ENTg5MTk4IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ucyI6IFsKICAgICAgICAidm9pZCBkb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxSZW1BdE5TIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAidm9pZCBkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlKHN0cmluZyBuYW1lLCBzdHJpbmcgdmFsdWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRjY4RjA4MiBTaW5jZToiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZSI6IFsKICAgICAgICAiRE9NQXR0ciBkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGUoRE9NQXR0ciBuZXdBdHRyKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTg4NzIzNjE1NCBTaW5jZToiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbm9kZV9ucyI6IFsKICAgICAgICAiRE9NQXR0ciBkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMoRE9NQXR0ciBuZXdBdHRyKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsU2V0QXROb2RlTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zIjogWwogICAgICAgICJ2b2lkIGRvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGVfbnMoc3RyaW5nIG5hbWVzcGFjZVVSSSwgc3RyaW5nIHF1YWxpZmllZE5hbWUsIHN0cmluZyB2YWx1ZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1FbFNldEF0dHJOUyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3NldF9pZF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgInZvaWQgZG9tX2VsZW1lbnRfc2V0X2lkX2F0dHJpYnV0ZShzdHJpbmcgbmFtZSwgYm9vbGVhbiBpc0lkKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsU2V0SWRBdHRyIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfc2V0X2lkX2F0dHJpYnV0ZV9ub2RlIjogWwogICAgICAgICJ2b2lkIGRvbV9lbGVtZW50X3NldF9pZF9hdHRyaWJ1dGVfbm9kZShhdHRyIGlkQXR0ciwgYm9vbGVhbiBpc0lkKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsU2V0SWRBdHRyTm9kZSBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3NldF9pZF9hdHRyaWJ1dGVfbnMiOiBbCiAgICAgICAgInZvaWQgZG9tX2VsZW1lbnRfc2V0X2lkX2F0dHJpYnV0ZV9ucyhzdHJpbmcgbmFtZXNwYWNlVVJJLCBzdHJpbmcgbG9jYWxOYW1lLCBib29sZWFuIGlzSWQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxTZXRJZEF0dHJOUyBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9pbXBvcnRfc2ltcGxleG1sIjogWwogICAgICAgICJzb21Ob2RlIGRvbV9pbXBvcnRfc2ltcGxleG1sKHN4ZW9iamVjdCBub2RlKSIsCiAgICAgICAgIkdldCBhIHNpbXBsZXhtbF9lbGVtZW50IG9iamVjdCBmcm9tIGRvbSB0byBhbGxvdyBmb3IgcHJvY2Vzc2luZyIKICAgIF0sCiAgICAiZG9tX25hbWVkbm9kZW1hcF9nZXRfbmFtZWRfaXRlbSI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fbmFtZWRub2RlbWFwX2dldF9uYW1lZF9pdGVtKHN0cmluZyBuYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTEwNzQ1Nzc1NDkgU2luY2U6IgogICAgXSwKICAgICJkb21fbmFtZWRub2RlbWFwX2dldF9uYW1lZF9pdGVtX25zIjogWwogICAgICAgICJET01Ob2RlIGRvbV9uYW1lZG5vZGVtYXBfZ2V0X25hbWVkX2l0ZW1fbnMoc3RyaW5nIG5hbWVzcGFjZVVSSSwgc3RyaW5nIGxvY2FsTmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1nZXROYW1lZEl0ZW1OUyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9uYW1lZG5vZGVtYXBfaXRlbSI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fbmFtZWRub2RlbWFwX2l0ZW0oaW50IGluZGV4KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTM0OTQ2N0Y5IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25hbWVkbm9kZW1hcF9yZW1vdmVfbmFtZWRfaXRlbSI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fbmFtZWRub2RlbWFwX3JlbW92ZV9uYW1lZF9pdGVtKHN0cmluZyBuYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUQ1OEIxOTMgU2luY2U6IgogICAgXSwKICAgICJkb21fbmFtZWRub2RlbWFwX3JlbW92ZV9uYW1lZF9pdGVtX25zIjogWwogICAgICAgICJET01Ob2RlIGRvbV9uYW1lZG5vZGVtYXBfcmVtb3ZlX25hbWVkX2l0ZW1fbnMoc3RyaW5nIG5hbWVzcGFjZVVSSSwgc3RyaW5nIGxvY2FsTmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1yZW1vdmVOYW1lZEl0ZW1OUyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9uYW1lZG5vZGVtYXBfc2V0X25hbWVkX2l0ZW0iOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX25hbWVkbm9kZW1hcF9zZXRfbmFtZWRfaXRlbShET01Ob2RlIGFyZyk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC0xMDI1MTYzNzg4IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25hbWVkbm9kZW1hcF9zZXRfbmFtZWRfaXRlbV9ucyI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fbmFtZWRub2RlbWFwX3NldF9uYW1lZF9pdGVtX25zKERPTU5vZGUgYXJnKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELXNldE5hbWVkSXRlbU5TIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX25hbWVsaXN0X2dldF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgZG9tX25hbWVsaXN0X2dldF9uYW1lKGludCBpbmRleCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTmFtZUxpc3QtZ2V0TmFtZSBTaW5jZToiCiAgICBdLAogICAgImRvbV9uYW1lbGlzdF9nZXRfbmFtZXNwYWNlX3VyaSI6IFsKICAgICAgICAic3RyaW5nIGRvbV9uYW1lbGlzdF9nZXRfbmFtZXNwYWNlX3VyaShpbnQgaW5kZXgpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI05hbWVMaXN0LWdldE5hbWVzcGFjZVVSSSBTaW5jZToiCiAgICBdLAogICAgImRvbV9ub2RlX2FwcGVuZF9jaGlsZCI6IFsKICAgICAgICAiRG9tTm9kZSBkb21fbm9kZV9hcHBlbmRfY2hpbGQoRG9tTm9kZSBuZXdDaGlsZCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC0xODRFNzEwNyBTaW5jZToiCiAgICBdLAogICAgImRvbV9ub2RlX2Nsb25lX25vZGUiOiBbCiAgICAgICAgIkRvbU5vZGUgZG9tX25vZGVfY2xvbmVfbm9kZShib29sZWFuIGRlZXApOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtM0EwRUQwQTQgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9jb21wYXJlX2RvY3VtZW50X3Bvc2l0aW9uIjogWwogICAgICAgICJzaG9ydCBkb21fbm9kZV9jb21wYXJlX2RvY3VtZW50X3Bvc2l0aW9uKERvbU5vZGUgb3RoZXIpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI05vZGUzLWNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVfZ2V0X2ZlYXR1cmUiOiBbCiAgICAgICAgIkRvbU5vZGUgZG9tX25vZGVfZ2V0X2ZlYXR1cmUoc3RyaW5nIGZlYXR1cmUsIHN0cmluZyB2ZXJzaW9uKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOb2RlMy1nZXRGZWF0dXJlIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVfZ2V0X3VzZXJfZGF0YSI6IFsKICAgICAgICAibWl4ZWQgZG9tX25vZGVfZ2V0X3VzZXJfZGF0YShzdHJpbmcga2V5KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOb2RlMy1nZXRVc2VyRGF0YSBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9ub2RlX2hhc19hdHRyaWJ1dGVzIjogWwogICAgICAgICJib29sZWFuIGRvbV9ub2RlX2hhc19hdHRyaWJ1dGVzKCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1Ob2RlSGFzQXR0cnMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fbm9kZV9oYXNfY2hpbGRfbm9kZXMiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzKCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC04MTA1OTQxODcgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9pbnNlcnRfYmVmb3JlIjogWwogICAgICAgICJkb21ub2RlIGRvbV9ub2RlX2luc2VydF9iZWZvcmUoRG9tTm9kZSBuZXdDaGlsZCwgRG9tTm9kZSByZWZDaGlsZCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC05NTIyODA3MjcgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9pc19kZWZhdWx0X25hbWVzcGFjZSI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fbm9kZV9pc19kZWZhdWx0X25hbWVzcGFjZShzdHJpbmcgbmFtZXNwYWNlVVJJKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUNvcmUvY29yZS5odG1sI05vZGUzLWlzRGVmYXVsdE5hbWVzcGFjZSBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9ub2RlX2lzX2VxdWFsX25vZGUiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX25vZGVfaXNfZXF1YWxfbm9kZShEb21Ob2RlIGFyZyk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTm9kZTMtaXNFcXVhbE5vZGUgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fbm9kZV9pc19zYW1lX25vZGUiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX25vZGVfaXNfc2FtZV9ub2RlKERvbU5vZGUgb3RoZXIpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI05vZGUzLWlzU2FtZU5vZGUgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fbm9kZV9pc19zdXBwb3J0ZWQiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX25vZGVfaXNfc3VwcG9ydGVkKHN0cmluZyBmZWF0dXJlLCBzdHJpbmcgdmVyc2lvbik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1MZXZlbC0yLUNvcmUtTm9kZS1zdXBwb3J0cyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9ub2RlX2xvb2t1cF9uYW1lc3BhY2VfdXJpIjogWwogICAgICAgICJzdHJpbmcgZG9tX25vZGVfbG9va3VwX25hbWVzcGFjZV91cmkoc3RyaW5nIHByZWZpeCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1Db3JlL2NvcmUuaHRtbCNOb2RlMy1sb29rdXBOYW1lc3BhY2VVUkkgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fbm9kZV9sb29rdXBfcHJlZml4IjogWwogICAgICAgICJzdHJpbmcgZG9tX25vZGVfbG9va3VwX3ByZWZpeChzdHJpbmcgbmFtZXNwYWNlVVJJKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOb2RlMy1sb29rdXBOYW1lc3BhY2VQcmVmaXggU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fbm9kZV9ub3JtYWxpemUiOiBbCiAgICAgICAgInZvaWQgZG9tX25vZGVfbm9ybWFsaXplKCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1ub3JtYWxpemUgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9yZW1vdmVfY2hpbGQiOiBbCiAgICAgICAgIkRvbU5vZGUgZG9tX25vZGVfcmVtb3ZlX2NoaWxkKERvbU5vZGUgb2xkQ2hpbGQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtMTczNDgzNDA2NiBTaW5jZToiCiAgICBdLAogICAgImRvbV9ub2RlX3JlcGxhY2VfY2hpbGQiOiBbCiAgICAgICAgIkRvbU5vZGUgZG9tX25vZGVfcmVwbGFjZV9jaGlsZChEb21Ob2RlIG5ld0NoaWxkLCBEb21Ob2RlIG9sZENoaWxkKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTc4NTg4NzMwNyBTaW5jZToiCiAgICBdLAogICAgImRvbV9ub2RlX3NldF91c2VyX2RhdGEiOiBbCiAgICAgICAgIm1peGVkIGRvbV9ub2RlX3NldF91c2VyX2RhdGEoc3RyaW5nIGtleSwgbWl4ZWQgZGF0YSwgdXNlcmRhdGFoYW5kbGVyIGhhbmRsZXIpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI05vZGUzLXNldFVzZXJEYXRhIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVsaXN0X2l0ZW0iOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX25vZGVsaXN0X2l0ZW0oaW50IGluZGV4KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNJRC04NDQzNzcxMzYgU2luY2U6IgogICAgXSwKICAgICJkb21fc3RyaW5nX2V4dGVuZF9maW5kX29mZnNldDE2IjogWwogICAgICAgICJpbnQgZG9tX3N0cmluZ19leHRlbmRfZmluZF9vZmZzZXQxNihpbnQgb2Zmc2V0MzIpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2kxOG4tbWV0aG9kcy1TdHJpbmdFeHRlbmQtZmluZE9mZnNldDE2IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX3N0cmluZ19leHRlbmRfZmluZF9vZmZzZXQzMiI6IFsKICAgICAgICAiaW50IGRvbV9zdHJpbmdfZXh0ZW5kX2ZpbmRfb2Zmc2V0MzIoaW50IG9mZnNldDE2KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNpMThuLW1ldGhvZHMtU3RyaW5nRXh0ZW5kLWZpbmRPZmZzZXQzMiBTaW5jZToiCiAgICBdLAogICAgImRvbV90ZXh0X2lzX3doaXRlc3BhY2VfaW5fZWxlbWVudF9jb250ZW50IjogWwogICAgICAgICJib29sZWFuIGRvbV90ZXh0X2lzX3doaXRlc3BhY2VfaW5fZWxlbWVudF9jb250ZW50KCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1UZXh0My1pc1doaXRlc3BhY2VJbkVsZW1lbnRDb250ZW50IFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX3RleHRfcmVwbGFjZV93aG9sZV90ZXh0IjogWwogICAgICAgICJET01UZXh0IGRvbV90ZXh0X3JlcGxhY2Vfd2hvbGVfdGV4dChzdHJpbmcgY29udGVudCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1UZXh0My1yZXBsYWNlV2hvbGVUZXh0IFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX3RleHRfc3BsaXRfdGV4dCI6IFsKICAgICAgICAiRE9NVGV4dCBkb21fdGV4dF9zcGxpdF90ZXh0KGludCBvZmZzZXQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtMzg4NTNDMUQgU2luY2U6IgogICAgXSwKICAgICJkb21fdXNlcmRhdGFoYW5kbGVyX2hhbmRsZSI6IFsKICAgICAgICAiZG9tX3ZvaWQgZG9tX3VzZXJkYXRhaGFuZGxlcl9oYW5kbGUoc2hvcnQgb3BlcmF0aW9uLCBzdHJpbmcga2V5LCBkb21vYmplY3QgZGF0YSwgbm9kZSBzcmMsIG5vZGUgZHN0KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNJRC1oYW5kbGVVc2VyRGF0YUV2ZW50IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX3hwYXRoX2V2YWx1YXRlIjogWwogICAgICAgICJtaXhlZCBkb21feHBhdGhfZXZhbHVhdGUoc3RyaW5nIGV4cHIgWyxET01Ob2RlIGNvbnRleHRdKTsgKi8iLAogICAgICAgICJQSFBfRlVOQ1RJT04oZG9tX3hwYXRoX2V2YWx1YXRlKSB7ICBwaHBfeHBhdGhfZXZhbChJTlRFUk5BTF9GVU5DVElPTl9QQVJBTV9QQVNTVEhSVSwgUEhQX0RPTV9YUEFUSF9FVkFMVUFURSk7IH0gLyogfX19IGVuZCBkb21feHBhdGhfZXZhbHVhdGUiCiAgICBdLAogICAgImRvbV94cGF0aF9xdWVyeSI6IFsKICAgICAgICAiRE9NTm9kZUxpc3QgZG9tX3hwYXRoX3F1ZXJ5KHN0cmluZyBleHByIFssRE9NTm9kZSBjb250ZXh0XSk7ICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKGRvbV94cGF0aF9xdWVyeSkgeyAgcGhwX3hwYXRoX2V2YWwoSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsIFBIUF9ET01fWFBBVEhfUVVFUlkpOyB9IC8qIH19fSBlbmQgZG9tX3hwYXRoX3F1ZXJ5IgogICAgXSwKICAgICJkb21feHBhdGhfcmVnaXN0ZXJfbnMiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX3hwYXRoX3JlZ2lzdGVyX25zKHN0cmluZyBwcmVmaXgsIHN0cmluZyB1cmkpOyAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihkb21feHBhdGhfcmVnaXN0ZXJfbnMpIHsgIHp2YWwgKmlkOyAgeG1sWFBhdGhDb250ZXh0UHRyIGN0eHA7ICBpbnQgcHJlZml4X2xlbiwgbnNfdXJpX2xlbjsgIGRvbV94cGF0aF9vYmplY3QgKmludGVybjsgIHVuc2lnbmVkIGNoYXIgKnByZWZpeCwgKm5zX3VyaTsgICBpZiAoemVuZF9wYXJzZV9tZXRob2RfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCBnZXRUaGlzKCksIFwiT3NzXCIsICZpZCwgZG9tX3hwYXRoX2NsYXNzX2VudHJ5LCAmcHJlZml4LCAmcHJlZml4X2xlbiwgJm5zX3VyaSwgJm5zX3VyaV9sZW4pID09IEZBSUxVUkUpIHsgICByZXR1cm47ICB9ICAgaW50ZXJuID0gKGRvbV94cGF0aF9vYmplY3QgKil6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KGlkIFRTUk1MU19DQyk7ICAgY3R4cCA9ICh4bWxYUGF0aENvbnRleHRQdHIpIGludGVybi0+cHRyOyAgaWYgKGN0eHAgPT0gTlVMTCkgeyAgIHBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FSTklORywgXCJJbnZhbGlkIFhQYXRoIENvbnRleHRcIik7ICAgUkVUVVJOX0ZBTFNFOyAgfSAgIGlmICh4bWxYUGF0aFJlZ2lzdGVyTnMoY3R4cCwgcHJlZml4LCBuc191cmkpICE9IDApIHsgICBSRVRVUk5fRkFMU0UgIH0gIFJFVFVSTl9UUlVFOyB9IC8qIH19fSIKICAgIF0sCiAgICAiZG9tX3hwYXRoX3JlZ2lzdGVyX3BocF9mdW5jdGlvbnMiOiBbCiAgICAgICAgInZvaWQgZG9tX3hwYXRoX3JlZ2lzdGVyX3BocF9mdW5jdGlvbnMoKSAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihkb21feHBhdGhfcmVnaXN0ZXJfcGhwX2Z1bmN0aW9ucykgeyAgenZhbCAqaWQ7ICBkb21feHBhdGhfb2JqZWN0ICppbnRlcm47ICB6dmFsICphcnJheV92YWx1ZSwgKiplbnRyeSwgKm5ld19zdHJpbmc7ICBpbnQgIG5hbWVfbGVuID0gMDsgIGNoYXIgKm5hbWU7ICAgRE9NX0dFVF9USElTKGlkKTsgICAgaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVyc19leChaRU5EX1BBUlNFX1BBUkFNU19RVUlFVCwgWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgXCJhXCIsICAmYXJyYXlfdmFsdWUpID09IFNVQ0NFU1MpIHsgICBpbnRlcm4gPSAoZG9tX3hwYXRoX29iamVjdCAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3QoaWQgVFNSTUxTX0NDKTsgICB6ZW5kX2hhc2hfaW50ZXJuYWxfcG9pbnRlcl9yZXNldChaX0FSUlZBTF9QKGFycmF5X3ZhbHVlKSk7ICAgIHdoaWxlICh6ZW5kX2hhc2hfZ2V0X2N1cnJlbnRfZGF0YShaX0FSUlZBTF9QKGFycmF5X3ZhbHVlKSwgKHZvaWQgKiopJmVudHJ5KSA9PSBTVUNDRVNTKSB7ICAgIFNFUEFSQVRFX1pWQUwoZW50cnkpOyAgICBjb252ZXJ0X3RvX3N0cmluZ19leChlbnRyeSk7ICAgICBNQUtFX1NURF9aVkFMKG5ld19zdHJpbmcpOyAgICBaVkFMX0xPTkcobmV3X3N0cmluZywxKTsgICAgICAgemVuZF9oYXNoX3VwZGF0ZShpbnRlcm4tPnJlZ2lzdGVyZWRfcGhwZnVuY3Rpb25zLCBaX1NUUlZBTF9QUChlbnRyeSksIFpfU1RSTEVOX1BQKGVudHJ5KSArIDEsICZuZXdfc3RyaW5nLCBzaXplb2YoenZhbCopLCBOVUxMKTsgICAgemVuZF9oYXNoX21vdmVfZm9yd2FyZChaX0FSUlZBTF9QKGFycmF5X3ZhbHVlKSk7ICAgfSAgIGludGVybi0+cmVnaXN0ZXJQaHBGdW5jdGlvbnMgPSAyOyAgIFJFVFVSTl9UUlVFOyAgIH0gZWxzZSBpZiAoemVuZF9wYXJzZV9wYXJhbWV0ZXJzX2V4KFpFTkRfUEFSU0VfUEFSQU1TX1FVSUVULCBaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCBcInNcIiwgICZuYW1lLCAmbmFtZV9sZW4pID09IFNVQ0NFU1MpIHsgICBpbnRlcm4gPSAoZG9tX3hwYXRoX29iamVjdCAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3QoaWQgVFNSTUxTX0NDKTsgICAgICBNQUtFX1NURF9aVkFMKG5ld19zdHJpbmcpOyAgIFpWQUxfTE9ORyhuZXdfc3RyaW5nLDEpOyAgIHplbmRfaGFzaF91cGRhdGUoaW50ZXJuLT5yZWdpc3RlcmVkX3BocGZ1bmN0aW9ucywgbmFtZSwgbmFtZV9sZW4gKyAxLCAmbmV3X3N0cmluZywgc2l6ZW9mKHp2YWwqKSwgTlVMTCk7ICAgaW50ZXJuLT5yZWdpc3RlclBocEZ1bmN0aW9ucyA9IDI7ICAgICB9IGVsc2UgeyAgIGludGVybiA9IChkb21feHBhdGhfb2JqZWN0ICopemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChpZCBUU1JNTFNfQ0MpOyAgIGludGVybi0+cmVnaXN0ZXJQaHBGdW5jdGlvbnMgPSAxOyAgfSAgIH0gLyogfX19IGVuZCBkb21feHBhdGhfcmVnaXN0ZXJfcGhwX2Z1bmN0aW9ucyIKICAgIF0sCiAgICAiZWFjaCI6IFsKICAgICAgICAiYXJyYXkgZWFjaChhcnJheSBhcnIpIiwKICAgICAgICAiUmV0dXJuIHRoZSBjdXJyZW50bHkgcG9pbnRlZCBrZXkuLnZhbHVlIHBhaXIgaW4gdGhlIHBhc3NlZCBhcnJheSwgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIgdG8gdGhlIG5leHQgZWxlbWVudCIKICAgIF0sCiAgICAiZWFzdGVyX2RhdGUiOiBbCiAgICAgICAgImludCBlYXN0ZXJfZGF0ZShbaW50IHllYXJdKSIsCiAgICAgICAgIlJldHVybiB0aGUgdGltZXN0YW1wIG9mIG1pZG5pZ2h0IG9uIEVhc3RlciBvZiBhIGdpdmVuIHllYXIgKGRlZmF1bHRzIHRvIGN1cnJlbnQgeWVhcikiCiAgICBdLAogICAgImVhc3Rlcl9kYXlzIjogWwogICAgICAgICJpbnQgZWFzdGVyX2RheXMoW2ludCB5ZWFyLCBbaW50IG1ldGhvZF1dKSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIGRheXMgYWZ0ZXIgTWFyY2ggMjEgdGhhdCBFYXN0ZXIgZmFsbHMgb24gZm9yIGEgZ2l2ZW4geWVhciAoZGVmYXVsdHMgdG8gY3VycmVudCB5ZWFyKSIKICAgIF0sCiAgICAiZWNobyI6IFsKICAgICAgICAidm9pZCBlY2hvKHN0cmluZyBhcmcxIFssIHN0cmluZyAuLi5dKSIsCiAgICAgICAgIk91dHB1dCBvbmUgb3IgbW9yZSBzdHJpbmdzIgogICAgXSwKICAgICJlbXB0eSI6IFsKICAgICAgICAiYm9vbCBlbXB0eSggbWl4ZWQgdmFyICkiLAogICAgICAgICJEZXRlcm1pbmUgd2hldGhlciBhIHZhcmlhYmxlIGlzIGVtcHR5IgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9kZXNjcmliZSI6IFsKICAgICAgICAiYXJyYXkgZW5jaGFudF9icm9rZXJfZGVzY3JpYmUocmVzb3VyY2UgYnJva2VyKSIsCiAgICAgICAgIkVudW1lcmF0ZXMgdGhlIEVuY2hhbnQgcHJvdmlkZXJzIGFuZCB0ZWxscyB5b3Ugc29tZSBydWRpbWVudGFyeSBpbmZvcm1hdGlvbiBhYm91dCB0aGVtLiBUaGUgc2FtZSBpbmZvIGlzIHByb3ZpZGVkIHRocm91Z2ggcGhwaW5mbygpIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cyI6IFsKICAgICAgICAiYm9vbCBlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cyhyZXNvdXJjZSBicm9rZXIsIHN0cmluZyB0YWcpIiwKICAgICAgICAiV2hldGhlciBhIGRpY3Rpb25hcnkgZXhpc3RzIG9yIG5vdC4gVXNpbmcgbm9uLWVtcHR5IHRhZyIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfZnJlZSI6IFsKICAgICAgICAiYm9vbGVhbiBlbmNoYW50X2Jyb2tlcl9mcmVlKHJlc291cmNlIGJyb2tlcikiLAogICAgICAgICJEZXN0cm95cyB0aGUgYnJva2VyIG9iamVjdCBhbmQgaXRzIGRpY3Rpb25uYXJpZXMiCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdCI6IFsKICAgICAgICAicmVzb3VyY2UgZW5jaGFudF9icm9rZXJfZnJlZV9kaWN0KHJlc291cmNlIGRpY3QpIiwKICAgICAgICAiRnJlZSB0aGUgZGljdGlvbmFyeSByZXNvdXJjZSIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfZ2V0X2RpY3RfcGF0aCI6IFsKICAgICAgICAic3RyaW5nIGVuY2hhbnRfYnJva2VyX2dldF9kaWN0X3BhdGgocmVzb3VyY2UgYnJva2VyLCBpbnQgZGljdF90eXBlKSIsCiAgICAgICAgIkdldCB0aGUgZGlyZWN0b3J5IHBhdGggZm9yIGEgZ2l2ZW4gYmFja2VuZCwgd29ya3Mgd2l0aCBpc3BlbGwgYW5kIG15c3BlbGwiCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX2dldF9lcnJvciI6IFsKICAgICAgICAic3RyaW5nIGVuY2hhbnRfYnJva2VyX2dldF9lcnJvcihyZXNvdXJjZSBicm9rZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGFzdCBlcnJvciBvZiB0aGUgYnJva2VyIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9pbml0IjogWwogICAgICAgICJyZXNvdXJjZSBlbmNoYW50X2Jyb2tlcl9pbml0KCkiLAogICAgICAgICJjcmVhdGUgYSBuZXcgYnJva2VyIG9iamVjdCBjYXBhYmxlIG9mIHJlcXVlc3RpbmciCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHMiOiBbCiAgICAgICAgInN0cmluZyBlbmNoYW50X2Jyb2tlcl9saXN0X2RpY3RzKHJlc291cmNlIGJyb2tlcikiLAogICAgICAgICJMaXN0cyB0aGUgZGljdGlvbmFyaWVzIGF2YWlsYWJsZSBmb3IgdGhlIGdpdmVuIGJyb2tlciIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0IjogWwogICAgICAgICJyZXNvdXJjZSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X2RpY3QocmVzb3VyY2UgYnJva2VyLCBzdHJpbmcgdGFnKSIsCiAgICAgICAgImNyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHVzaW5nIHRhZywgdGhlIG5vbi1lbXB0eSBsYW5ndWFnZSB0YWcgeW91IHdpc2ggdG8gcmVxdWVzdCAgYSBkaWN0aW9uYXJ5IGZvciAoXCJlbl9VU1wiLCBcImRlX0RFXCIsIC4uLikiCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX3JlcXVlc3RfcHdsX2RpY3QiOiBbCiAgICAgICAgInJlc291cmNlIGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfcHdsX2RpY3QocmVzb3VyY2UgYnJva2VyLCBzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiY3JlYXRlcyBhIGRpY3Rpb25hcnkgdXNpbmcgYSBQV0wgZmlsZS4gQSBQV0wgZmlsZSBpcyBwZXJzb25hbCB3b3JkIGZpbGUgb25lIHdvcmQgcGVyIGxpbmUuIEl0IG11c3QgZXhpc3QgYmVmb3JlIHRoZSBjYWxsLiIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfc2V0X2RpY3RfcGF0aCI6IFsKICAgICAgICAiYm9vbCBlbmNoYW50X2Jyb2tlcl9zZXRfZGljdF9wYXRoKHJlc291cmNlIGJyb2tlciwgaW50IGRpY3RfdHlwZSwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlNldCB0aGUgZGlyZWN0b3J5IHBhdGggZm9yIGEgZ2l2ZW4gYmFja2VuZCwgd29ya3Mgd2l0aCBpc3BlbGwgYW5kIG15c3BlbGwiCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX3NldF9vcmRlcmluZyI6IFsKICAgICAgICAiYm9vbCBlbmNoYW50X2Jyb2tlcl9zZXRfb3JkZXJpbmcocmVzb3VyY2UgYnJva2VyLCBzdHJpbmcgdGFnLCBzdHJpbmcgb3JkZXJpbmcpIiwKICAgICAgICAiRGVjbGFyZXMgYSBwcmVmZXJlbmNlIG9mIGRpY3Rpb25hcmllcyB0byB1c2UgZm9yIHRoZSBsYW5ndWFnZSAgZGVzY3JpYmVkL3JlZmVycmVkIHRvIGJ5ICd0YWcnLiBUaGUgb3JkZXJpbmcgaXMgYSBjb21tYSBkZWxpbWl0ZWQgIGxpc3Qgb2YgcHJvdmlkZXIgbmFtZXMuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBcIipcIiB0YWcgY2FuICBiZSB1c2VkIGFzIGEgbGFuZ3VhZ2UgdGFnIHRvIGRlY2xhcmUgYSBkZWZhdWx0IG9yZGVyaW5nIGZvciBhbnkgIGxhbmd1YWdlIHRoYXQgZG9lcyBub3QgZXhwbGljdGx5IGRlY2xhcmUgYW4gb3JkZXJpbmcuIgogICAgXSwKICAgICJlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsIjogWwogICAgICAgICJ2b2lkIGVuY2hhbnRfZGljdF9hZGRfdG9fcGVyc29uYWwocmVzb3VyY2UgZGljdCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiYWRkICd3b3JkJyB0byBwZXJzb25hbCB3b3JkIGxpc3QiCiAgICBdLAogICAgImVuY2hhbnRfZGljdF9hZGRfdG9fc2Vzc2lvbiI6IFsKICAgICAgICAidm9pZCBlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb24ocmVzb3VyY2UgZGljdCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiYWRkICd3b3JkJyB0byB0aGlzIHNwZWxsLWNoZWNraW5nIHNlc3Npb24iCiAgICBdLAogICAgImVuY2hhbnRfZGljdF9jaGVjayI6IFsKICAgICAgICAiYm9vbCBlbmNoYW50X2RpY3RfY2hlY2socmVzb3VyY2UgZGljdCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiSWYgdGhlIHdvcmQgaXMgY29ycmVjdGx5IHNwZWxsZWQgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UiCiAgICBdLAogICAgImVuY2hhbnRfZGljdF9kZXNjcmliZSI6IFsKICAgICAgICAiYXJyYXkgZW5jaGFudF9kaWN0X2Rlc2NyaWJlKHJlc291cmNlIGRpY3QpIiwKICAgICAgICAiRGVzY3JpYmVzIGFuIGluZGl2aWR1YWwgZGljdGlvbmFyeSAnZGljdCciCiAgICBdLAogICAgImVuY2hhbnRfZGljdF9nZXRfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBlbmNoYW50X2RpY3RfZ2V0X2Vycm9yKHJlc291cmNlIGRpY3QpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGFzdCBlcnJvciBvZiB0aGUgY3VycmVudCBzcGVsbGluZy1zZXNzaW9uIgogICAgXSwKICAgICJlbmNoYW50X2RpY3RfaXNfaW5fc2Vzc2lvbiI6IFsKICAgICAgICAiYm9vbCBlbmNoYW50X2RpY3RfaXNfaW5fc2Vzc2lvbihyZXNvdXJjZSBkaWN0LCBzdHJpbmcgd29yZCkiLAogICAgICAgICJ3aGV0aGVyIG9yIG5vdCAnd29yZCcgZXhpc3RzIGluIHRoaXMgc3BlbGxpbmctc2Vzc2lvbiIKICAgIF0sCiAgICAiZW5jaGFudF9kaWN0X3F1aWNrX2NoZWNrIjogWwogICAgICAgICJib29sIGVuY2hhbnRfZGljdF9xdWlja19jaGVjayhyZXNvdXJjZSBkaWN0LCBzdHJpbmcgd29yZCBbLCBhcnJheSAmc3VnZ2VzdGlvbnNdKSIsCiAgICAgICAgIklmIHRoZSB3b3JkIGlzIGNvcnJlY3RseSBzcGVsbGVkIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLCBpZiBzdWdnZXN0aW9ucyB2YXJpYWJsZSAgICAgaXMgcHJvdmlkZWQsIGZpbGwgaXQgd2l0aCBzcGVsbGluZyBhbHRlcm5hdGl2ZXMuIgogICAgXSwKICAgICJlbmNoYW50X2RpY3Rfc3RvcmVfcmVwbGFjZW1lbnQiOiBbCiAgICAgICAgInZvaWQgZW5jaGFudF9kaWN0X3N0b3JlX3JlcGxhY2VtZW50KHJlc291cmNlIGRpY3QsIHN0cmluZyBtaXMsIHN0cmluZyBjb3IpIiwKICAgICAgICAiYWRkIGEgY29ycmVjdGlvbiBmb3IgJ21pcycgdXNpbmcgJ2NvcicuICBOb3RlcyB0aGF0IHlvdSByZXBsYWNlZCBAbWlzIHdpdGggQGNvciwgc28gaXQncyBwb3NzaWJseSBtb3JlIGxpa2VseSAgdGhhdCBmdXR1cmUgb2NjdXJyZW5jZXMgb2YgQG1pcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggQGNvci4gU28gaXQgbWlnaHQgIGJ1bXAgQGNvciB1cCBpbiB0aGUgc3VnZ2VzdGlvbiBsaXN0LiIKICAgIF0sCiAgICAiZW5jaGFudF9kaWN0X3N1Z2dlc3QiOiBbCiAgICAgICAgImFycmF5IGVuY2hhbnRfZGljdF9zdWdnZXN0KHJlc291cmNlIGRpY3QsIHN0cmluZyB3b3JkKSIsCiAgICAgICAgIldpbGwgcmV0dXJuIGEgbGlzdCBvZiB2YWx1ZXMgaWYgYW55IG9mIHRob3NlIHByZS1jb25kaXRpb25zIGFyZSBub3QgbWV0LiIKICAgIF0sCiAgICAiZW5kIjogWwogICAgICAgICJtaXhlZCBlbmQoYXJyYXkgYXJyYXlfYXJnKSIsCiAgICAgICAgIkFkdmFuY2VzIGFycmF5IGFyZ3VtZW50J3MgaW50ZXJuYWwgcG9pbnRlciB0byB0aGUgbGFzdCBlbGVtZW50IGFuZCByZXR1cm4gaXQiCiAgICBdLAogICAgImVyZWciOiBbCiAgICAgICAgImludCBlcmVnKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3RyaW5nIFssIGFycmF5IHJlZ2lzdGVyc10pIiwKICAgICAgICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoIgogICAgXSwKICAgICJlcmVnX3JlcGxhY2UiOiBbCiAgICAgICAgInN0cmluZyBlcmVnX3JlcGxhY2Uoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyByZXBsYWNlbWVudCwgc3RyaW5nIHN0cmluZykiLAogICAgICAgICJSZXBsYWNlIHJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgIF0sCiAgICAiZXJlZ2kiOiBbCiAgICAgICAgImludCBlcmVnaShzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHN0cmluZyBbLCBhcnJheSByZWdpc3RlcnNdKSIsCiAgICAgICAgIkNhc2UtaW5zZW5zaXRpdmUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIgogICAgXSwKICAgICJlcmVnaV9yZXBsYWNlIjogWwogICAgICAgICJzdHJpbmcgZXJlZ2lfcmVwbGFjZShzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHJlcGxhY2VtZW50LCBzdHJpbmcgc3RyaW5nKSIsCiAgICAgICAgIkNhc2UgaW5zZW5zaXRpdmUgcmVwbGFjZSByZWd1bGFyIGV4cHJlc3Npb24iCiAgICBdLAogICAgImVycm9yX2dldF9sYXN0IjogWwogICAgICAgICJhcnJheSBlcnJvcl9nZXRfbGFzdCgpIiwKICAgICAgICAiR2V0IHRoZSBsYXN0IG9jY3VycmVkIGVycm9yIGFzIGFzc29jaWF0aXZlIGFycmF5LiBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaGFzbid0IGJlZW4gYW4gZXJyb3IgeWV0LiIKICAgIF0sCiAgICAiZXJyb3JfbG9nIjogWwogICAgICAgICJib29sIGVycm9yX2xvZyhzdHJpbmcgbWVzc2FnZSBbLCBpbnQgbWVzc2FnZV90eXBlIFssIHN0cmluZyBkZXN0aW5hdGlvbiBbLCBzdHJpbmcgZXh0cmFfaGVhZGVyc11dXSkiLAogICAgICAgICJTZW5kIGFuIGVycm9yIG1lc3NhZ2Ugc29tZXdoZXJlIgogICAgXSwKICAgICJlcnJvcl9yZXBvcnRpbmciOiBbCiAgICAgICAgImludCBlcnJvcl9yZXBvcnRpbmcoW2ludCBuZXdfZXJyb3JfbGV2ZWxdKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCBlcnJvcl9yZXBvcnRpbmcgbGV2ZWwsIGFuZCBpZiBhbiBhcmd1bWVudCB3YXMgcGFzc2VkIC0gY2hhbmdlIHRvIHRoZSBuZXcgbGV2ZWwiCiAgICBdLAogICAgImVzY2FwZXNoZWxsYXJnIjogWwogICAgICAgICJzdHJpbmcgZXNjYXBlc2hlbGxhcmcoc3RyaW5nIGFyZykiLAogICAgICAgICJRdW90ZSBhbmQgZXNjYXBlIGFuIGFyZ3VtZW50IGZvciB1c2UgaW4gYSBzaGVsbCBjb21tYW5kIgogICAgXSwKICAgICJlc2NhcGVzaGVsbGNtZCI6IFsKICAgICAgICAic3RyaW5nIGVzY2FwZXNoZWxsY21kKHN0cmluZyBjb21tYW5kKSIsCiAgICAgICAgIkVzY2FwZSBzaGVsbCBtZXRhY2hhcmFjdGVycyIKICAgIF0sCiAgICAiZXhlYyI6IFsKICAgICAgICAic3RyaW5nIGV4ZWMoc3RyaW5nIGNvbW1hbmQgWywgYXJyYXkgJm91dHB1dCBbLCBpbnQgJnJldHVybl92YWx1ZV1dKSIsCiAgICAgICAgIkV4ZWN1dGUgYW4gZXh0ZXJuYWwgcHJvZ3JhbSIKICAgIF0sCiAgICAiZXhpZl9pbWFnZXR5cGUiOiBbCiAgICAgICAgImludCBleGlmX2ltYWdldHlwZShzdHJpbmcgaW1hZ2VmaWxlKSIsCiAgICAgICAgIkdldCB0aGUgdHlwZSBvZiBhbiBpbWFnZSIKICAgIF0sCiAgICAiZXhpZl9yZWFkX2RhdGEiOiBbCiAgICAgICAgImFycmF5IGV4aWZfcmVhZF9kYXRhKHN0cmluZyBmaWxlbmFtZSBbLCBzZWN0aW9uc19uZWVkZWQgWywgc3ViX2FycmF5c1ssIHJlYWRfdGh1bWJuYWlsXV1dKSIsCiAgICAgICAgIlJlYWRzIGhlYWRlciBkYXRhIGZyb20gdGhlIEpQRUcvVElGRiBpbWFnZSBmaWxlbmFtZSBhbmQgb3B0aW9uYWxseSByZWFkcyB0aGUgaW50ZXJuYWwgdGh1bWJuYWlscyIKICAgIF0sCiAgICAiZXhpZl90YWduYW1lIjogWwogICAgICAgICJzdHJpbmcgZXhpZl90YWduYW1lKGluZGV4KSIsCiAgICAgICAgIkdldCBoZWFkZXJuYW1lIGZvciBpbmRleCBvciBmYWxzZSBpZiBub3QgZGVmaW5lZCIKICAgIF0sCiAgICAiZXhpZl90aHVtYm5haWwiOiBbCiAgICAgICAgInN0cmluZyBleGlmX3RodW1ibmFpbChzdHJpbmcgZmlsZW5hbWUgWywgJndpZHRoLCAmaGVpZ2h0IFssICZpbWFnZXR5cGVdXSkiLAogICAgICAgICJSZWFkcyB0aGUgZW1iZWRkZWQgdGh1bWJuYWlsIgogICAgXSwKICAgICJleGl0IjogWwogICAgICAgICJ2b2lkIGV4aXQoW21peGVkIHN0YXR1c10pIiwKICAgICAgICAiT3V0cHV0IGEgbWVzc2FnZSBhbmQgdGVybWluYXRlIHRoZSBjdXJyZW50IHNjcmlwdCIKICAgIF0sCiAgICAiZXhwIjogWwogICAgICAgICJmbG9hdCBleHAoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIHRoZSBudW1iZXIiCiAgICBdLAogICAgImV4cGxvZGUiOiBbCiAgICAgICAgImFycmF5IGV4cGxvZGUoc3RyaW5nIHNlcGFyYXRvciwgc3RyaW5nIHN0ciBbLCBpbnQgbGltaXRdKSIsCiAgICAgICAgIlNwbGl0cyBhIHN0cmluZyBvbiBzdHJpbmcgc2VwYXJhdG9yIGFuZCByZXR1cm4gYXJyYXkgb2YgY29tcG9uZW50cy4gSWYgbGltaXQgaXMgcG9zaXRpdmUgb25seSBsaW1pdCBudW1iZXIgb2YgY29tcG9uZW50cyBpcyByZXR1cm5lZC4gSWYgbGltaXQgaXMgbmVnYXRpdmUgYWxsIGNvbXBvbmVudHMgZXhjZXB0IHRoZSBsYXN0IGFicyhsaW1pdCkgYXJlIHJldHVybmVkLiIKICAgIF0sCiAgICAiZXhwbTEiOiBbCiAgICAgICAgImZsb2F0IGV4cG0xKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIGV4cChudW1iZXIpIC0gMSwgY29tcHV0ZWQgaW4gYSB3YXkgdGhhdCBhY2N1cmF0ZSBldmVuIHdoZW4gdGhlIHZhbHVlIG9mIG51bWJlciBpcyBjbG9zZSB0byB6ZXJvIgogICAgXSwKICAgICJleHRlbnNpb25fbG9hZGVkIjogWwogICAgICAgICJib29sIGV4dGVuc2lvbl9sb2FkZWQoc3RyaW5nIGV4dGVuc2lvbl9uYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB0aGUgbmFtZWQgZXh0ZW5zaW9uIGlzIGxvYWRlZCIKICAgIF0sCiAgICAiZXh0cmFjdCI6IFsKICAgICAgICAiaW50IGV4dHJhY3QoYXJyYXkgdmFyX2FycmF5IFssIGludCBleHRyYWN0X3R5cGUgWywgc3RyaW5nIHByZWZpeF1dKSIsCiAgICAgICAgIkltcG9ydHMgdmFyaWFibGVzIGludG8gc3ltYm9sIHRhYmxlIGZyb20gYW4gYXJyYXkiCiAgICBdLAogICAgImV6bWxtX2hhc2giOiBbCiAgICAgICAgImludCBlem1sbV9oYXNoKHN0cmluZyBhZGRyKSIsCiAgICAgICAgIkNhbGN1bGF0ZSBFWk1MTSBsaXN0IGhhc2ggdmFsdWUuIgogICAgXSwKICAgICJmY2xvc2UiOiBbCiAgICAgICAgImJvb2wgZmNsb3NlKHJlc291cmNlIGZwKSIsCiAgICAgICAgIkNsb3NlIGFuIG9wZW4gZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmZW9mIjogWwogICAgICAgICJib29sIGZlb2YocmVzb3VyY2UgZnApIiwKICAgICAgICAiVGVzdCBmb3IgZW5kLW9mLWZpbGUgb24gYSBmaWxlIHBvaW50ZXIiCiAgICBdLAogICAgImZmbHVzaCI6IFsKICAgICAgICAiYm9vbCBmZmx1c2gocmVzb3VyY2UgZnApIiwKICAgICAgICAiRmx1c2hlcyBvdXRwdXQiCiAgICBdLAogICAgImZnZXRjIjogWwogICAgICAgICJzdHJpbmcgZmdldGMocmVzb3VyY2UgZnApIiwKICAgICAgICAiR2V0IGEgY2hhcmFjdGVyIGZyb20gZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmZ2V0Y3N2IjogWwogICAgICAgICJhcnJheSBmZ2V0Y3N2KHJlc291cmNlIGZwIFssaW50IGxlbmd0aCBbLCBzdHJpbmcgZGVsaW1pdGVyIFssIHN0cmluZyBlbmNsb3N1cmUgWywgc3RyaW5nIGVzY2FwZV1dXV0pIiwKICAgICAgICAiR2V0IGxpbmUgZnJvbSBmaWxlIHBvaW50ZXIgYW5kIHBhcnNlIGZvciBDU1YgZmllbGRzIgogICAgXSwKICAgICJmZ2V0cyI6IFsKICAgICAgICAic3RyaW5nIGZnZXRzKHJlc291cmNlIGZwWywgaW50IGxlbmd0aF0pIiwKICAgICAgICAiR2V0IGEgbGluZSBmcm9tIGZpbGUgcG9pbnRlciIKICAgIF0sCiAgICAiZmdldHNzIjogWwogICAgICAgICJzdHJpbmcgZmdldHNzKHJlc291cmNlIGZwIFssIGludCBsZW5ndGggWywgc3RyaW5nIGFsbG93YWJsZV90YWdzXV0pIiwKICAgICAgICAiR2V0IGEgbGluZSBmcm9tIGZpbGUgcG9pbnRlciBhbmQgc3RyaXAgSFRNTCB0YWdzIgogICAgXSwKICAgICJmaWxlIjogWwogICAgICAgICJhcnJheSBmaWxlKHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgZmxhZ3NbLCByZXNvdXJjZSBjb250ZXh0XV0pIiwKICAgICAgICAiUmVhZCBlbnRpcmUgZmlsZSBpbnRvIGFuIGFycmF5IgogICAgXSwKICAgICJmaWxlX2V4aXN0cyI6IFsKICAgICAgICAiYm9vbCBmaWxlX2V4aXN0cyhzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIGZpbGVuYW1lIGV4aXN0cyIKICAgIF0sCiAgICAiZmlsZV9nZXRfY29udGVudHMiOiBbCiAgICAgICAgInN0cmluZyBmaWxlX2dldF9jb250ZW50cyhzdHJpbmcgZmlsZW5hbWUgWywgYm9vbCB1c2VfaW5jbHVkZV9wYXRoIFssIHJlc291cmNlIGNvbnRleHQgWywgbG9uZyBvZmZzZXQgWywgbG9uZyBtYXhsZW5dXV1dKSIsCiAgICAgICAgIlJlYWQgdGhlIGVudGlyZSBmaWxlIGludG8gYSBzdHJpbmciCiAgICBdLAogICAgImZpbGVfcHV0X2NvbnRlbnRzIjogWwogICAgICAgICJpbnQgZmlsZV9wdXRfY29udGVudHMoc3RyaW5nIGZpbGUsIG1peGVkIGRhdGEgWywgaW50IGZsYWdzIFssIHJlc291cmNlIGNvbnRleHRdXSkiLAogICAgICAgICJXcml0ZS9DcmVhdGUgYSBmaWxlIHdpdGggY29udGVudHMgZGF0YSBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiIKICAgIF0sCiAgICAiZmlsZWF0aW1lIjogWwogICAgICAgICJpbnQgZmlsZWF0aW1lKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgbGFzdCBhY2Nlc3MgdGltZSBvZiBmaWxlIgogICAgXSwKICAgICJmaWxlY3RpbWUiOiBbCiAgICAgICAgImludCBmaWxlY3RpbWUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBpbm9kZSBtb2RpZmljYXRpb24gdGltZSBvZiBmaWxlIgogICAgXSwKICAgICJmaWxlZ3JvdXAiOiBbCiAgICAgICAgImludCBmaWxlZ3JvdXAoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBmaWxlIGdyb3VwIgogICAgXSwKICAgICJmaWxlaW5vZGUiOiBbCiAgICAgICAgImludCBmaWxlaW5vZGUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBmaWxlIGlub2RlIgogICAgXSwKICAgICJmaWxlbXRpbWUiOiBbCiAgICAgICAgImludCBmaWxlbXRpbWUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGZpbGUiCiAgICBdLAogICAgImZpbGVvd25lciI6IFsKICAgICAgICAiaW50IGZpbGVvd25lcihzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiR2V0IGZpbGUgb3duZXIiCiAgICBdLAogICAgImZpbGVwZXJtcyI6IFsKICAgICAgICAiaW50IGZpbGVwZXJtcyhzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiR2V0IGZpbGUgcGVybWlzc2lvbnMiCiAgICBdLAogICAgImZpbGVzaXplIjogWwogICAgICAgICJpbnQgZmlsZXNpemUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBmaWxlIHNpemUiCiAgICBdLAogICAgImZpbGV0eXBlIjogWwogICAgICAgICJzdHJpbmcgZmlsZXR5cGUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBmaWxlIHR5cGUiCiAgICBdLAogICAgImZpbHRlcl9oYXNfdmFyIjogWwogICAgICAgICJtaXhlZCBmaWx0ZXJfaGFzX3Zhcihjb25zdGFudCB0eXBlLCBzdHJpbmcgdmFyaWFibGVfbmFtZSkiLAogICAgICAgICIqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFyaWFibGUgd2l0aCB0aGUgbmFtZSAnbmFtZScgZXhpc3RzIGluIHNvdXJjZS4iCiAgICBdLAogICAgImZpbHRlcl9pbnB1dCI6IFsKICAgICAgICAibWl4ZWQgZmlsdGVyX2lucHV0KGNvbnN0YW50IHR5cGUsIHN0cmluZyB2YXJpYWJsZV9uYW1lIFssIGxvbmcgZmlsdGVyIFssIG1peGVkIG9wdGlvbnNdXSkiLAogICAgICAgICIqIFJldHVybnMgdGhlIGZpbHRlcmVkIHZhcmlhYmxlICduYW1lJyogZnJvbSBzb3VyY2UgYHR5cGVgLiIKICAgIF0sCiAgICAiZmlsdGVyX2lucHV0X2FycmF5IjogWwogICAgICAgICJtaXhlZCBmaWx0ZXJfaW5wdXRfYXJyYXkoY29uc3RhbnQgdHlwZSwgWywgbWl4ZWQgb3B0aW9uc11dKSIsCiAgICAgICAgIiogUmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCBhcmd1bWVudHMgZGVmaW5lZCBpbiAnZGVmaW5pdGlvbicuIgogICAgXSwKICAgICJmaWx0ZXJfdmFyIjogWwogICAgICAgICJtaXhlZCBmaWx0ZXJfdmFyKG1peGVkIHZhcmlhYmxlIFssIGxvbmcgZmlsdGVyIFssIG1peGVkIG9wdGlvbnNdXSkiLAogICAgICAgICIqIFJldHVybnMgdGhlIGZpbHRlcmVkIHZlcnNpb24gb2YgdGhlIHZyaWFibGUuIgogICAgXSwKICAgICJmaWx0ZXJfdmFyX2FycmF5IjogWwogICAgICAgICJtaXhlZCBmaWx0ZXJfdmFyX2FycmF5KGFycmF5IGRhdGEsIFssIG1peGVkIG9wdGlvbnNdXSkiLAogICAgICAgICIqIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgYXJndW1lbnRzIGRlZmluZWQgaW4gJ2RlZmluaXRpb24nLiIKICAgIF0sCiAgICAiZmluZm9fYnVmZmVyIjogWwogICAgICAgICJzdHJpbmcgZmluZm9fYnVmZmVyKHJlc291cmNlIGZpbmZvLCBjaGFyICpzdHJpbmcgWywgaW50IG9wdGlvbnMgWywgcmVzb3VyY2UgY29udGV4dF1dKSIsCiAgICAgICAgIlJldHVybiBpbmZyb21hdGlvbiBhYm91dCBhIHN0cmluZyBidWZmZXIuIgogICAgXSwKICAgICJmaW5mb19jbG9zZSI6IFsKICAgICAgICAicmVzb3VyY2UgZmluZm9fY2xvc2UocmVzb3VyY2UgZmluZm8pIiwKICAgICAgICAiQ2xvc2UgZmlsZWluZm8gcmVzb3VyY2UuIgogICAgXSwKICAgICJmaW5mb19maWxlIjogWwogICAgICAgICJzdHJpbmcgZmluZm9fZmlsZShyZXNvdXJjZSBmaW5mbywgY2hhciAqZmlsZV9uYW1lIFssIGludCBvcHRpb25zIFssIHJlc291cmNlIGNvbnRleHRdXSkiLAogICAgICAgICJSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlLiIKICAgIF0sCiAgICAiZmluZm9fb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgZmluZm9fb3BlbihbaW50IG9wdGlvbnMgWywgc3RyaW5nIGFyZ11dKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBmaWxlaW5mbyByZXNvdXJjZS4iCiAgICBdLAogICAgImZpbmZvX3NldF9mbGFncyI6IFsKICAgICAgICAiYm9vbCBmaW5mb19zZXRfZmxhZ3MocmVzb3VyY2UgZmluZm8sIGludCBvcHRpb25zKSIsCiAgICAgICAgIlNldCBsaWJtYWdpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIgogICAgXSwKICAgICJmbG9hdHZhbCI6IFsKICAgICAgICAiZmxvYXQgZmxvYXR2YWwobWl4ZWQgdmFyKSIsCiAgICAgICAgIkdldCB0aGUgZmxvYXQgdmFsdWUgb2YgYSB2YXJpYWJsZSIKICAgIF0sCiAgICAiZmxvY2siOiBbCiAgICAgICAgImJvb2wgZmxvY2socmVzb3VyY2UgZnAsIGludCBvcGVyYXRpb24gWywgaW50ICZ3b3VsZGJsb2NrXSkiLAogICAgICAgICJQb3J0YWJsZSBmaWxlIGxvY2tpbmciCiAgICBdLAogICAgImZsb29yIjogWwogICAgICAgICJmbG9hdCBmbG9vcihmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmV4dCBsb3dlc3QgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBudW1iZXIiCiAgICBdLAogICAgImZsdXNoIjogWwogICAgICAgICJ2b2lkIGZsdXNoKHZvaWQpIiwKICAgICAgICAiRmx1c2ggdGhlIG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgImZtb2QiOiBbCiAgICAgICAgImZsb2F0IGZtb2QoZmxvYXQgeCwgZmxvYXQgeSkiLAogICAgICAgICJSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgZGl2aWRpbmcgeCBieSB5IGFzIGEgZmxvYXQiCiAgICBdLAogICAgImZubWF0Y2giOiBbCiAgICAgICAgImJvb2wgZm5tYXRjaChzdHJpbmcgcGF0dGVybiwgc3RyaW5nIGZpbGVuYW1lIFssIGludCBmbGFnc10pIiwKICAgICAgICAiTWF0Y2ggZmlsZW5hbWUgYWdhaW5zdCBwYXR0ZXJuIgogICAgXSwKICAgICJmb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgZm9wZW4oc3RyaW5nIGZpbGVuYW1lLCBzdHJpbmcgbW9kZSBbLCBib29sIHVzZV9pbmNsdWRlX3BhdGggWywgcmVzb3VyY2UgY29udGV4dF1dKSIsCiAgICAgICAgIk9wZW4gYSBmaWxlIG9yIGEgVVJMIGFuZCByZXR1cm4gYSBmaWxlIHBvaW50ZXIiCiAgICBdLAogICAgImZvcndhcmRfc3RhdGljX2NhbGwiOiBbCiAgICAgICAgIm1peGVkIGZvcndhcmRfc3RhdGljX2NhbGwobWl4ZWQgZnVuY3Rpb25fbmFtZSBbLCBtaXhlZCBwYXJtZXRlcl0gWywgbWl4ZWQgLi4uXSkiLAogICAgICAgICJDYWxsIGEgdXNlciBmdW5jdGlvbiB3aGljaCBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIgogICAgXSwKICAgICJmcGFzc3RocnUiOiBbCiAgICAgICAgImludCBmcGFzc3RocnUocmVzb3VyY2UgZnApIiwKICAgICAgICAiT3V0cHV0IGFsbCByZW1haW5pbmcgZGF0YSBmcm9tIGEgZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmcHJpbnRmIjogWwogICAgICAgICJpbnQgZnByaW50ZihyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBmb3JtYXQgWywgbWl4ZWQgYXJnMSBbLCBtaXhlZCAuLi5dXSkiLAogICAgICAgICJPdXRwdXQgYSBmb3JtYXR0ZWQgc3RyaW5nIGludG8gYSBzdHJlYW0iCiAgICBdLAogICAgImZwdXRjc3YiOiBbCiAgICAgICAgImludCBmcHV0Y3N2KHJlc291cmNlIGZwLCBhcnJheSBmaWVsZHMgWywgc3RyaW5nIGRlbGltaXRlciBbLCBzdHJpbmcgZW5jbG9zdXJlXV0pIiwKICAgICAgICAiRm9ybWF0IGxpbmUgYXMgQ1NWIGFuZCB3cml0ZSB0byBmaWxlIHBvaW50ZXIiCiAgICBdLAogICAgImZyZWFkIjogWwogICAgICAgICJzdHJpbmcgZnJlYWQocmVzb3VyY2UgZnAsIGludCBsZW5ndGgpIiwKICAgICAgICAiQmluYXJ5LXNhZmUgZmlsZSByZWFkIgogICAgXSwKICAgICJmcmVuY2h0b2pkIjogWwogICAgICAgICJpbnQgZnJlbmNodG9qZChpbnQgbW9udGgsIGludCBkYXksIGludCB5ZWFyKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgZnJlbmNoIHJlcHVibGljIGNhbGVuZGFyIGRhdGUgdG8ganVsaWFuIGRheSBjb3VudCIKICAgIF0sCiAgICAiZnNjYW5mIjogWwogICAgICAgICJtaXhlZCBmc2NhbmYocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZm9ybWF0IFssIHN0cmluZyAuLi5dKSIsCiAgICAgICAgIkltcGxlbWVudHMgYSBtb3N0bHkgQU5TSSBjb21wYXRpYmxlIGZzY2FuZigpIgogICAgXSwKICAgICJmc2VlayI6IFsKICAgICAgICAiaW50IGZzZWVrKHJlc291cmNlIGZwLCBpbnQgb2Zmc2V0IFssIGludCB3aGVuY2VdKSIsCiAgICAgICAgIlNlZWsgb24gYSBmaWxlIHBvaW50ZXIiCiAgICBdLAogICAgImZzb2Nrb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgZnNvY2tvcGVuKHN0cmluZyBob3N0bmFtZSwgaW50IHBvcnQgWywgaW50IGVycm5vIFssIHN0cmluZyBlcnJzdHIgWywgZmxvYXQgdGltZW91dF1dXSkiLAogICAgICAgICJPcGVuIEludGVybmV0IG9yIFVuaXggZG9tYWluIHNvY2tldCBjb25uZWN0aW9uIgogICAgXSwKICAgICJmc3RhdCI6IFsKICAgICAgICAiYXJyYXkgZnN0YXQocmVzb3VyY2UgZnApIiwKICAgICAgICAiU3RhdCgpIG9uIGEgZmlsZWhhbmRsZSIKICAgIF0sCiAgICAiZnRlbGwiOiBbCiAgICAgICAgImludCBmdGVsbChyZXNvdXJjZSBmcCkiLAogICAgICAgICJHZXQgZmlsZSBwb2ludGVyJ3MgcmVhZC93cml0ZSBwb3NpdGlvbiIKICAgIF0sCiAgICAiZnRvayI6IFsKICAgICAgICAiaW50IGZ0b2soc3RyaW5nIHBhdGhuYW1lLCBzdHJpbmcgcHJvaikiLAogICAgICAgICJDb252ZXJ0IGEgcGF0aG5hbWUgYW5kIGEgcHJvamVjdCBpZGVudGlmaWVyIHRvIGEgU3lzdGVtIFYgSVBDIGtleSIKICAgIF0sCiAgICAiZnRwX2FsbG9jIjogWwogICAgICAgICJib29sIGZ0cF9hbGxvYyhyZXNvdXJjZSBzdHJlYW0sIGludCBzaXplWywgJnJlc3BvbnNlXSkiLAogICAgICAgICJBdHRlbXB0IHRvIGFsbG9jYXRlIHNwYWNlIG9uIHRoZSByZW1vdGUgRlRQIHNlcnZlciIKICAgIF0sCiAgICAiZnRwX2NkdXAiOiBbCiAgICAgICAgImJvb2wgZnRwX2NkdXAocmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIkNoYW5nZXMgdG8gdGhlIHBhcmVudCBkaXJlY3RvcnkiCiAgICBdLAogICAgImZ0cF9jaGRpciI6IFsKICAgICAgICAiYm9vbCBmdHBfY2hkaXIocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZGlyZWN0b3J5KSIsCiAgICAgICAgIkNoYW5nZXMgZGlyZWN0b3JpZXMiCiAgICBdLAogICAgImZ0cF9jaG1vZCI6IFsKICAgICAgICAiaW50IGZ0cF9jaG1vZChyZXNvdXJjZSBzdHJlYW0sIGludCBtb2RlLCBzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiU2V0cyBwZXJtaXNzaW9ucyBvbiBhIGZpbGUiCiAgICBdLAogICAgImZ0cF9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBmdHBfY2xvc2UocmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIkNsb3NlcyB0aGUgRlRQIHN0cmVhbSIKICAgIF0sCiAgICAiZnRwX2Nvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIGZ0cF9jb25uZWN0KHN0cmluZyBob3N0IFssIGludCBwb3J0IFssIGludCB0aW1lb3V0XV0pIiwKICAgICAgICAiT3BlbnMgYSBGVFAgc3RyZWFtIgogICAgXSwKICAgICJmdHBfZGVsZXRlIjogWwogICAgICAgICJib29sIGZ0cF9kZWxldGUocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZmlsZSkiLAogICAgICAgICJEZWxldGVzIGEgZmlsZSIKICAgIF0sCiAgICAiZnRwX2V4ZWMiOiBbCiAgICAgICAgImJvb2wgZnRwX2V4ZWMocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgY29tbWFuZCkiLAogICAgICAgICJSZXF1ZXN0cyBleGVjdXRpb24gb2YgYSBwcm9ncmFtIG9uIHRoZSBGVFAgc2VydmVyIgogICAgXSwKICAgICJmdHBfZmdldCI6IFsKICAgICAgICAiYm9vbCBmdHBfZmdldChyZXNvdXJjZSBzdHJlYW0sIHJlc291cmNlIGZwLCBzdHJpbmcgcmVtb3RlX2ZpbGUsIGludCBtb2RlWywgaW50IHJlc3VtZXBvc10pIiwKICAgICAgICAiUmV0cmlldmVzIGEgZmlsZSBmcm9tIHRoZSBGVFAgc2VydmVyIGFuZCB3cml0ZXMgaXQgdG8gYW4gb3BlbiBmaWxlIgogICAgXSwKICAgICJmdHBfZnB1dCI6IFsKICAgICAgICAiYm9vbCBmdHBfZnB1dChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyByZW1vdGVfZmlsZSwgcmVzb3VyY2UgZnAsIGludCBtb2RlWywgaW50IHN0YXJ0cG9zXSkiLAogICAgICAgICJTdG9yZXMgYSBmaWxlIGZyb20gYW4gb3BlbiBmaWxlIHRvIHRoZSBGVFAgc2VydmVyIgogICAgXSwKICAgICJmdHBfZ2V0IjogWwogICAgICAgICJib29sIGZ0cF9nZXQocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgbG9jYWxfZmlsZSwgc3RyaW5nIHJlbW90ZV9maWxlLCBpbnQgbW9kZVssIGludCByZXN1bWVfcG9zXSkiLAogICAgICAgICJSZXRyaWV2ZXMgYSBmaWxlIGZyb20gdGhlIEZUUCBzZXJ2ZXIgYW5kIHdyaXRlcyBpdCB0byBhIGxvY2FsIGZpbGUiCiAgICBdLAogICAgImZ0cF9nZXRfb3B0aW9uIjogWwogICAgICAgICJtaXhlZCBmdHBfZ2V0X29wdGlvbihyZXNvdXJjZSBzdHJlYW0sIGludCBvcHRpb24pIiwKICAgICAgICAiR2V0cyBhbiBGVFAgb3B0aW9uIgogICAgXSwKICAgICJmdHBfbG9naW4iOiBbCiAgICAgICAgImJvb2wgZnRwX2xvZ2luKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIHVzZXJuYW1lLCBzdHJpbmcgcGFzc3dvcmQpIiwKICAgICAgICAiTG9ncyBpbnRvIHRoZSBGVFAgc2VydmVyIgogICAgXSwKICAgICJmdHBfbWR0bSI6IFsKICAgICAgICAiaW50IGZ0cF9tZHRtKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGxhc3QgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGZpbGUsIG9yIC0xIG9uIGVycm9yIgogICAgXSwKICAgICJmdHBfbWtkaXIiOiBbCiAgICAgICAgInN0cmluZyBmdHBfbWtkaXIocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZGlyZWN0b3J5KSIsCiAgICAgICAgIkNyZWF0ZXMgYSBkaXJlY3RvcnkgYW5kIHJldHVybnMgdGhlIGFic29sdXRlIHBhdGggZm9yIHRoZSBuZXcgZGlyZWN0b3J5IG9yIGZhbHNlIG9uIGVycm9yIgogICAgXSwKICAgICJmdHBfbmJfY29udGludWUiOiBbCiAgICAgICAgImludCBmdHBfbmJfY29udGludWUocmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIkNvbnRpbnVlcyByZXRyaWV2aW5nL3NlbmRpbmcgYSBmaWxlIG5icm9ub3VzbHkiCiAgICBdLAogICAgImZ0cF9uYl9mZ2V0IjogWwogICAgICAgICJpbnQgZnRwX25iX2ZnZXQocmVzb3VyY2Ugc3RyZWFtLCByZXNvdXJjZSBmcCwgc3RyaW5nIHJlbW90ZV9maWxlLCBpbnQgbW9kZVssIGludCByZXN1bWVwb3NdKSIsCiAgICAgICAgIlJldHJpZXZlcyBhIGZpbGUgZnJvbSB0aGUgRlRQIHNlcnZlciBhc3luY2hyb25seSBhbmQgd3JpdGVzIGl0IHRvIGFuIG9wZW4gZmlsZSIKICAgIF0sCiAgICAiZnRwX25iX2ZwdXQiOiBbCiAgICAgICAgImludCBmdHBfbmJfZnB1dChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyByZW1vdGVfZmlsZSwgcmVzb3VyY2UgZnAsIGludCBtb2RlWywgaW50IHN0YXJ0cG9zXSkiLAogICAgICAgICJTdG9yZXMgYSBmaWxlIGZyb20gYW4gb3BlbiBmaWxlIHRvIHRoZSBGVFAgc2VydmVyIG5icm9ubHkiCiAgICBdLAogICAgImZ0cF9uYl9nZXQiOiBbCiAgICAgICAgImludCBmdHBfbmJfZ2V0KHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGxvY2FsX2ZpbGUsIHN0cmluZyByZW1vdGVfZmlsZSwgaW50IG1vZGVbLCBpbnQgcmVzdW1lX3Bvc10pIiwKICAgICAgICAiUmV0cmlldmVzIGEgZmlsZSBmcm9tIHRoZSBGVFAgc2VydmVyIG5iaHJvbmx5IGFuZCB3cml0ZXMgaXQgdG8gYSBsb2NhbCBmaWxlIgogICAgXSwKICAgICJmdHBfbmJfcHV0IjogWwogICAgICAgICJpbnQgZnRwX25iX3B1dChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyByZW1vdGVfZmlsZSwgc3RyaW5nIGxvY2FsX2ZpbGUsIGludCBtb2RlWywgaW50IHN0YXJ0cG9zXSkiLAogICAgICAgICJTdG9yZXMgYSBmaWxlIG9uIHRoZSBGVFAgc2VydmVyIgogICAgXSwKICAgICJmdHBfbmxpc3QiOiBbCiAgICAgICAgImFycmF5IGZ0cF9ubGlzdChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBkaXJlY3RvcnkpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBmaWxlbmFtZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSIKICAgIF0sCiAgICAiZnRwX3Bhc3YiOiBbCiAgICAgICAgImJvb2wgZnRwX3Bhc3YocmVzb3VyY2Ugc3RyZWFtLCBib29sIHBhc3YpIiwKICAgICAgICAiVHVybnMgcGFzc2l2ZSBtb2RlIG9uIG9yIG9mZiIKICAgIF0sCiAgICAiZnRwX3B1dCI6IFsKICAgICAgICAiYm9vbCBmdHBfcHV0KHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIHJlbW90ZV9maWxlLCBzdHJpbmcgbG9jYWxfZmlsZSwgaW50IG1vZGVbLCBpbnQgc3RhcnRwb3NdKSIsCiAgICAgICAgIlN0b3JlcyBhIGZpbGUgb24gdGhlIEZUUCBzZXJ2ZXIiCiAgICBdLAogICAgImZ0cF9wd2QiOiBbCiAgICAgICAgInN0cmluZyBmdHBfcHdkKHJlc291cmNlIHN0cmVhbSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBwcmVzZW50IHdvcmtpbmcgZGlyZWN0b3J5IgogICAgXSwKICAgICJmdHBfcmF3IjogWwogICAgICAgICJhcnJheSBmdHBfcmF3KHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGNvbW1hbmQpIiwKICAgICAgICAiU2VuZHMgYSBsaXRlcmFsIGNvbW1hbmQgdG8gdGhlIEZUUCBzZXJ2ZXIiCiAgICBdLAogICAgImZ0cF9yYXdsaXN0IjogWwogICAgICAgICJhcnJheSBmdHBfcmF3bGlzdChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBkaXJlY3RvcnkgWywgYm9vbCByZWN1cnNpdmVdKSIsCiAgICAgICAgIlJldHVybnMgYSBkZXRhaWxlZCBsaXN0aW5nIG9mIGEgZGlyZWN0b3J5IGFzIGFuIGFycmF5IG9mIG91dHB1dCBsaW5lcyIKICAgIF0sCiAgICAiZnRwX3JlbmFtZSI6IFsKICAgICAgICAiYm9vbCBmdHBfcmVuYW1lKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIHNyYywgc3RyaW5nIGRlc3QpIiwKICAgICAgICAiUmVuYW1lcyB0aGUgZ2l2ZW4gZmlsZSB0byBhIG5ldyBwYXRoIgogICAgXSwKICAgICJmdHBfcm1kaXIiOiBbCiAgICAgICAgImJvb2wgZnRwX3JtZGlyKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGRpcmVjdG9yeSkiLAogICAgICAgICJSZW1vdmVzIGEgZGlyZWN0b3J5IgogICAgXSwKICAgICJmdHBfc2V0X29wdGlvbiI6IFsKICAgICAgICAiYm9vbCBmdHBfc2V0X29wdGlvbihyZXNvdXJjZSBzdHJlYW0sIGludCBvcHRpb24sIG1peGVkIHZhbHVlKSIsCiAgICAgICAgIlNldHMgYW4gRlRQIG9wdGlvbiIKICAgIF0sCiAgICAiZnRwX3NpdGUiOiBbCiAgICAgICAgImJvb2wgZnRwX3NpdGUocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgY21kKSIsCiAgICAgICAgIlNlbmRzIGEgU0lURSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIiCiAgICBdLAogICAgImZ0cF9zaXplIjogWwogICAgICAgICJpbnQgZnRwX3NpemUocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgb3IgLTEgb24gZXJyb3IiCiAgICBdLAogICAgImZ0cF9zc2xfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgZnRwX3NzbF9jb25uZWN0KHN0cmluZyBob3N0IFssIGludCBwb3J0IFssIGludCB0aW1lb3V0XV0pIiwKICAgICAgICAiT3BlbnMgYSBGVFAtU1NMIHN0cmVhbSIKICAgIF0sCiAgICAiZnRwX3N5c3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBmdHBfc3lzdHlwZShyZXNvdXJjZSBzdHJlYW0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3lzdGVtIHR5cGUgaWRlbnRpZmllciIKICAgIF0sCiAgICAiZnRydW5jYXRlIjogWwogICAgICAgICJib29sIGZ0cnVuY2F0ZShyZXNvdXJjZSBmcCwgaW50IHNpemUpIiwKICAgICAgICAiVHJ1bmNhdGUgZmlsZSB0byAnc2l6ZScgbGVuZ3RoIgogICAgXSwKICAgICJmdW5jX2dldF9hcmciOiBbCiAgICAgICAgIm1peGVkIGZ1bmNfZ2V0X2FyZyhpbnQgYXJnX251bSkiLAogICAgICAgICJHZXQgdGhlICRhcmdfbnVtJ3RoIGFyZ3VtZW50IHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24iCiAgICBdLAogICAgImZ1bmNfZ2V0X2FyZ3MiOiBbCiAgICAgICAgImFycmF5IGZ1bmNfZ2V0X2FyZ3MoKSIsCiAgICAgICAgIkdldCBhbiBhcnJheSBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2VyZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIgogICAgXSwKICAgICJmdW5jX251bV9hcmdzIjogWwogICAgICAgICJpbnQgZnVuY19udW1fYXJncyh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiIKICAgIF0sCiAgICAiZnVuY3Rpb24gIjogWyIiLCAiIl0sCiAgICAiZm9yZWFjaCAiOiBbIiIsICIiXSwKICAgICJmdW5jdGlvbl9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgZnVuY3Rpb25fZXhpc3RzKHN0cmluZyBmdW5jdGlvbl9uYW1lKSIsCiAgICAgICAgIkNoZWNrcyBpZiB0aGUgZnVuY3Rpb24gZXhpc3RzIgogICAgXSwKICAgICJmd3JpdGUiOiBbCiAgICAgICAgImludCBmd3JpdGUocmVzb3VyY2UgZnAsIHN0cmluZyBzdHIgWywgaW50IGxlbmd0aF0pIiwKICAgICAgICAiQmluYXJ5LXNhZmUgZmlsZSB3cml0ZSIKICAgIF0sCiAgICAiZ2NfY29sbGVjdF9jeWNsZXMiOiBbCiAgICAgICAgImludCBnY19jb2xsZWN0X2N5Y2xlcyh2b2lkKSIsCiAgICAgICAgIkZvcmNlcyBjb2xsZWN0aW9uIG9mIGFueSBleGlzdGluZyBnYXJiYWdlIGN5Y2xlcy4gICAgUmV0dXJucyBudW1iZXIgb2YgZnJlZWQgenZhbHMiCiAgICBdLAogICAgImdjX2Rpc2FibGUiOiBbCiAgICAgICAgInZvaWQgZ2NfZGlzYWJsZSh2b2lkKSIsCiAgICAgICAgIkRlYWN0aXZhdGVzIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY29sbGVjdG9yIgogICAgXSwKICAgICJnY19lbmFibGUiOiBbCiAgICAgICAgInZvaWQgZ2NfZW5hYmxlKHZvaWQpIiwKICAgICAgICAiQWN0aXZhdGVzIHRoZSBjaXJjdWxhciByZWZlcmVuY2UgY29sbGVjdG9yIgogICAgXSwKICAgICJnY19lbmFibGVkIjogWwogICAgICAgICJ2b2lkIGdjX2VuYWJsZWQodm9pZCkiLAogICAgICAgICJSZXR1cm5zIHN0YXR1cyBvZiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNvbGxlY3RvciIKICAgIF0sCiAgICAiZ2RfaW5mbyI6IFsKICAgICAgICAiYXJyYXkgZ2RfaW5mbygpIiwKICAgICAgICAiIgogICAgXSwKICAgICJnZXRLZXl3b3JkcyI6IFsKICAgICAgICAic3RhdGljIGFycmF5IGdldEtleXdvcmRzKHN0cmluZyAkbG9jYWxlKSB7IiwKICAgICAgICAiKiByZXR1cm4gYW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBrZXl3b3JkLXZhbHVlICAqIHBhaXJzIGZvciB0aGlzIGxvY2FsZS4gVGhlIGtleXMgYXJlIGtleXMgdG8gdGhlIGFycmF5IChkb2ghKSAgKiB9fX0iCiAgICBdLAogICAgImdldF9icm93c2VyIjogWwogICAgICAgICJtaXhlZCBnZXRfYnJvd3Nlcihbc3RyaW5nIGJyb3dzZXJfbmFtZSBbLCBib29sIHJldHVybl9hcnJheV1dKSIsCiAgICAgICAgIkdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIGEgYnJvd3Nlci4gSWYgYnJvd3Nlcl9uYW1lIGlzIG9taXR0ZWQgb3IgbnVsbCwgSFRUUF9VU0VSX0FHRU5UIGlzIHVzZWQuIFJldHVybnMgYW4gb2JqZWN0IGJ5IGRlZmF1bHQ7IGlmIHJldHVybl9hcnJheSBpcyB0cnVlLCByZXR1cm5zIGFuIGFycmF5LiIKICAgIF0sCiAgICAiZ2V0X2NhbGxlZF9jbGFzcyI6IFsKICAgICAgICAic3RyaW5nIGdldF9jYWxsZWRfY2xhc3MoKSIsCiAgICAgICAgIlJldHJpZXZlcyB0aGUgXCJMYXRlIFN0YXRpYyBCaW5kaW5nXCIgY2xhc3MgbmFtZSIKICAgIF0sCiAgICAiZ2V0X2NmZ192YXIiOiBbCiAgICAgICAgIm1peGVkIGdldF9jZmdfdmFyKHN0cmluZyBvcHRpb25fbmFtZSkiLAogICAgICAgICJHZXQgdGhlIHZhbHVlIG9mIGEgUEhQIGNvbmZpZ3VyYXRpb24gb3B0aW9uIgogICAgXSwKICAgICJnZXRfY2xhc3MiOiBbCiAgICAgICAgInN0cmluZyBnZXRfY2xhc3MoW29iamVjdCBvYmplY3RdKSIsCiAgICAgICAgIlJldHJpZXZlcyB0aGUgY2xhc3MgbmFtZSIKICAgIF0sCiAgICAiZ2V0X2NsYXNzX21ldGhvZHMiOiBbCiAgICAgICAgImFycmF5IGdldF9jbGFzc19tZXRob2RzKG1peGVkIGNsYXNzKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgbWV0aG9kIG5hbWVzIGZvciBjbGFzcyBvciBjbGFzcyBpbnN0YW5jZS4iCiAgICBdLAogICAgImdldF9jbGFzc192YXJzIjogWwogICAgICAgICJhcnJheSBnZXRfY2xhc3NfdmFycyhzdHJpbmcgY2xhc3NfbmFtZSkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGRlZmF1bHQgcHJvcGVydGllcyBvZiB0aGUgY2xhc3MuIgogICAgXSwKICAgICJnZXRfY3VycmVudF91c2VyIjogWwogICAgICAgICJzdHJpbmcgZ2V0X2N1cnJlbnRfdXNlcih2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgbmFtZSBvZiB0aGUgb3duZXIgb2YgdGhlIGN1cnJlbnQgUEhQIHNjcmlwdCIKICAgIF0sCiAgICAiZ2V0X2RlY2xhcmVkX2NsYXNzZXMiOiBbCiAgICAgICAgImFycmF5IGdldF9kZWNsYXJlZF9jbGFzc2VzKCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBkZWNsYXJlZCBjbGFzc2VzLiIKICAgIF0sCiAgICAiZ2V0X2RlY2xhcmVkX2ludGVyZmFjZXMiOiBbCiAgICAgICAgImFycmF5IGdldF9kZWNsYXJlZF9pbnRlcmZhY2VzKCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBkZWNsYXJlZCBpbnRlcmZhY2VzLiIKICAgIF0sCiAgICAiZ2V0X2RlZmluZWRfY29uc3RhbnRzIjogWwogICAgICAgICJhcnJheSBnZXRfZGVmaW5lZF9jb25zdGFudHMoW2Jvb2wgY2F0ZWdvcml6ZV0pIiwKICAgICAgICAiUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgYWxsIGRlZmluZWQgY29uc3RhbnRzIgogICAgXSwKICAgICJnZXRfZGVmaW5lZF9mdW5jdGlvbnMiOiBbCiAgICAgICAgImFycmF5IGdldF9kZWZpbmVkX2Z1bmN0aW9ucyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgYWxsIGRlZmluZWQgZnVuY3Rpb25zIgogICAgXSwKICAgICJnZXRfZGVmaW5lZF92YXJzIjogWwogICAgICAgICJhcnJheSBnZXRfZGVmaW5lZF92YXJzKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBuYW1lcyBhbmQgdmFsdWVzIG9mIGFsbCBjdXJyZW50bHkgZGVmaW5lZCB2YXJpYWJsZSBuYW1lcyAodmFyaWFibGVzIGluIHRoZSBjdXJyZW50IHNjb3BlKSIKICAgIF0sCiAgICAiZ2V0X2Rpc3BsYXlfbGFuZ3VhZ2UiOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgZ2V0X2Rpc3BsYXlfbGFuZ3VhZ2UoJGxvY2FsZVssICRpbl9sb2NhbGUgPSBudWxsXSkiLAogICAgICAgICIqIGdldHMgdGhlIGxhbmd1YWdlIGZvciB0aGUgJGxvY2FsZSBpbiAkaW5fbG9jYWxlIG9yIGRlZmF1bHRfbG9jYWxlIgogICAgXSwKICAgICJnZXRfZGlzcGxheV9uYW1lIjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGdldF9kaXNwbGF5X25hbWUoJGxvY2FsZVssICRpbl9sb2NhbGUgPSBudWxsXSkiLAogICAgICAgICIqIGdldHMgdGhlIG5hbWUgZm9yIHRoZSAkbG9jYWxlIGluICRpbl9sb2NhbGUgb3IgZGVmYXVsdF9sb2NhbGUiCiAgICBdLAogICAgImdldF9kaXNwbGF5X3JlZ2lvbiI6IFsKICAgICAgICAic3RhdGljIHN0cmluZyBnZXRfZGlzcGxheV9yZWdpb24oJGxvY2FsZSwgJGluX2xvY2FsZSA9IG51bGwpIiwKICAgICAgICAiKiBnZXRzIHRoZSByZWdpb24gZm9yIHRoZSAkbG9jYWxlIGluICRpbl9sb2NhbGUgb3IgZGVmYXVsdF9sb2NhbGUiCiAgICBdLAogICAgImdldF9kaXNwbGF5X3NjcmlwdCI6IFsKICAgICAgICAic3RhdGljIHN0cmluZyBnZXRfZGlzcGxheV9zY3JpcHQoJGxvY2FsZSwgJGluX2xvY2FsZSA9IG51bGwpIiwKICAgICAgICAiKiBnZXRzIHRoZSBzY3JpcHQgZm9yIHRoZSAkbG9jYWxlIGluICRpbl9sb2NhbGUgb3IgZGVmYXVsdF9sb2NhbGUiCiAgICBdLAogICAgImdldF9leHRlbnNpb25fZnVuY3MiOiBbCiAgICAgICAgImFycmF5IGdldF9leHRlbnNpb25fZnVuY3Moc3RyaW5nIGV4dGVuc2lvbl9uYW1lKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgZnVuY3Rpb25zIGJlbG9uZ2luZyB0byB0aGUgbmFtZWQgZXh0ZW5zaW9uIgogICAgXSwKICAgICJnZXRfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X2hlYWRlcnMoc3RyaW5nIHVybFssIGludCBmb3JtYXRdKSIsCiAgICAgICAgImZldGNoZXMgYWxsIHRoZSBoZWFkZXJzIHNlbnQgYnkgdGhlIHNlcnZlciBpbiByZXNwb25zZSB0byBhIEhUVFAgcmVxdWVzdCIKICAgIF0sCiAgICAiZ2V0X2h0bWxfdHJhbnNsYXRpb25fdGFibGUiOiBbCiAgICAgICAgImFycmF5IGdldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlKFtpbnQgdGFibGUgWywgaW50IHF1b3RlX3N0eWxlXV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgaW50ZXJuYWwgdHJhbnNsYXRpb24gdGFibGUgdXNlZCBieSBodG1sc3BlY2lhbGNoYXJzIGFuZCBodG1sZW50aXRpZXMiCiAgICBdLAogICAgImdldF9pbmNsdWRlX3BhdGgiOiBbCiAgICAgICAgInN0cmluZyBnZXRfaW5jbHVkZV9wYXRoKCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgaW5jbHVkZV9wYXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIgogICAgXSwKICAgICJnZXRfaW5jbHVkZWRfZmlsZXMiOiBbCiAgICAgICAgImFycmF5IGdldF9pbmNsdWRlZF9maWxlcyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgZmlsZSBuYW1lcyB0aGF0IHdlcmUgaW5jbHVkZV9vbmNlKCknZCIKICAgIF0sCiAgICAiZ2V0X2xvYWRlZF9leHRlbnNpb25zIjogWwogICAgICAgICJhcnJheSBnZXRfbG9hZGVkX2V4dGVuc2lvbnMoW2Jvb2wgemVuZF9leHRlbnNpb25zXSkiLAogICAgICAgICJSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyBuYW1lcyBvZiBsb2FkZWQgZXh0ZW5zaW9ucyIKICAgIF0sCiAgICAiZ2V0X21hZ2ljX3F1b3Rlc19ncGMiOiBbCiAgICAgICAgImludCBnZXRfbWFnaWNfcXVvdGVzX2dwYyh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBhY3RpdmUgY29uZmlndXJhdGlvbiBzZXR0aW5nIG9mIG1hZ2ljX3F1b3Rlc19ncGMiCiAgICBdLAogICAgImdldF9tYWdpY19xdW90ZXNfcnVudGltZSI6IFsKICAgICAgICAiaW50IGdldF9tYWdpY19xdW90ZXNfcnVudGltZSh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBhY3RpdmUgY29uZmlndXJhdGlvbiBzZXR0aW5nIG9mIG1hZ2ljX3F1b3Rlc19ydW50aW1lIgogICAgXSwKICAgICJnZXRfbWV0YV90YWdzIjogWwogICAgICAgICJhcnJheSBnZXRfbWV0YV90YWdzKHN0cmluZyBmaWxlbmFtZSBbLCBib29sIHVzZV9pbmNsdWRlX3BhdGhdKSIsCiAgICAgICAgIkV4dHJhY3RzIGFsbCBtZXRhIHRhZyBjb250ZW50IGF0dHJpYnV0ZXMgZnJvbSBhIGZpbGUgYW5kIHJldHVybnMgYW4gYXJyYXkiCiAgICBdLAogICAgImdldF9vYmplY3RfdmFycyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X29iamVjdF92YXJzKG9iamVjdCBvYmopIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3QgcHJvcGVydGllcyIKICAgIF0sCiAgICAiZ2V0X3BhcmVudF9jbGFzcyI6IFsKICAgICAgICAic3RyaW5nIGdldF9wYXJlbnRfY2xhc3MoW21peGVkIG9iamVjdF0pIiwKICAgICAgICAiUmV0cmlldmVzIHRoZSBwYXJlbnQgY2xhc3MgbmFtZSBmb3Igb2JqZWN0IG9yIGNsYXNzIG9yIGN1cnJlbnQgc2NvcGUuIgogICAgXSwKICAgICJnZXRfcmVzb3VyY2VfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIGdldF9yZXNvdXJjZV90eXBlKHJlc291cmNlIHJlcykiLAogICAgICAgICJHZXQgdGhlIHJlc291cmNlIHR5cGUgbmFtZSBmb3IgYSBnaXZlbiByZXNvdXJjZSIKICAgIF0sCiAgICAiZ2V0YWxsaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgZ2V0YWxsaGVhZGVycyh2b2lkKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiZ2V0Y3dkIjogWwogICAgICAgICJtaXhlZCBnZXRjd2Qodm9pZCkiLAogICAgICAgICJHZXRzIHRoZSBjdXJyZW50IGRpcmVjdG9yeSIKICAgIF0sCiAgICAiZ2V0ZGF0ZSI6IFsKICAgICAgICAiYXJyYXkgZ2V0ZGF0ZShbaW50IHRpbWVzdGFtcF0pIiwKICAgICAgICAiR2V0IGRhdGUvdGltZSBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAiZ2V0ZW52IjogWwogICAgICAgICJzdHJpbmcgZ2V0ZW52KHN0cmluZyB2YXJuYW1lKSIsCiAgICAgICAgIkdldCB0aGUgdmFsdWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUiCiAgICBdLAogICAgImdldGhvc3RieWFkZHIiOiBbCiAgICAgICAgInN0cmluZyBnZXRob3N0YnlhZGRyKHN0cmluZyBpcF9hZGRyZXNzKSIsCiAgICAgICAgIkdldCB0aGUgSW50ZXJuZXQgaG9zdCBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBJUCBhZGRyZXNzIgogICAgXSwKICAgICJnZXRob3N0YnluYW1lIjogWwogICAgICAgICJzdHJpbmcgZ2V0aG9zdGJ5bmFtZShzdHJpbmcgaG9zdG5hbWUpIiwKICAgICAgICAiR2V0IHRoZSBJUCBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiBJbnRlcm5ldCBob3N0IG5hbWUiCiAgICBdLAogICAgImdldGhvc3RieW5hbWVsIjogWwogICAgICAgICJhcnJheSBnZXRob3N0YnluYW1lbChzdHJpbmcgaG9zdG5hbWUpIiwKICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiBJUCBhZGRyZXNzZXMgdGhhdCBhIGdpdmVuIGhvc3RuYW1lIHJlc29sdmVzIHRvLiIKICAgIF0sCiAgICAiZ2V0aG9zdG5hbWUiOiBbCiAgICAgICAgInN0cmluZyBnZXRob3N0bmFtZSgpIiwKICAgICAgICAiR2V0IHRoZSBob3N0IG5hbWUgb2YgdGhlIGN1cnJlbnQgbWFjaGluZSIKICAgIF0sCiAgICAiZ2V0aW1hZ2VzaXplIjogWwogICAgICAgICJhcnJheSBnZXRpbWFnZXNpemUoc3RyaW5nIGltYWdlZmlsZSBbLCBhcnJheSBpbmZvXSkiLAogICAgICAgICJHZXQgdGhlIHNpemUgb2YgYW4gaW1hZ2UgYXMgNC1lbGVtZW50IGFycmF5IgogICAgXSwKICAgICJnZXRsYXN0bW9kIjogWwogICAgICAgICJpbnQgZ2V0bGFzdG1vZCh2b2lkKSIsCiAgICAgICAgIkdldCB0aW1lIG9mIGxhc3QgcGFnZSBtb2RpZmljYXRpb24iCiAgICBdLAogICAgImdldG15Z2lkIjogWwogICAgICAgICJpbnQgZ2V0bXlnaWQodm9pZCkiLAogICAgICAgICJHZXQgUEhQIHNjcmlwdCBvd25lcidzIEdJRCIKICAgIF0sCiAgICAiZ2V0bXlpbm9kZSI6IFsKICAgICAgICAiaW50IGdldG15aW5vZGUodm9pZCkiLAogICAgICAgICJHZXQgdGhlIGlub2RlIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBiZWluZyBwYXJzZWQiCiAgICBdLAogICAgImdldG15cGlkIjogWwogICAgICAgICJpbnQgZ2V0bXlwaWQodm9pZCkiLAogICAgICAgICJHZXQgY3VycmVudCBwcm9jZXNzIElEIgogICAgXSwKICAgICJnZXRteXVpZCI6IFsKICAgICAgICAiaW50IGdldG15dWlkKHZvaWQpIiwKICAgICAgICAiR2V0IFBIUCBzY3JpcHQgb3duZXIncyBVSUQiCiAgICBdLAogICAgImdldG9wdCI6IFsKICAgICAgICAiYXJyYXkgZ2V0b3B0KHN0cmluZyBvcHRpb25zIFssIGFycmF5IGxvbmdvcHRzXSkiLAogICAgICAgICJHZXQgb3B0aW9ucyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgbGlzdCIKICAgIF0sCiAgICAiZ2V0cHJvdG9ieW5hbWUiOiBbCiAgICAgICAgImludCBnZXRwcm90b2J5bmFtZShzdHJpbmcgbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHByb3RvY29sIG51bWJlciBhc3NvY2lhdGVkIHdpdGggbmFtZSBhcyBwZXIgL2V0Yy9wcm90b2NvbHMiCiAgICBdLAogICAgImdldHByb3RvYnludW1iZXIiOiBbCiAgICAgICAgInN0cmluZyBnZXRwcm90b2J5bnVtYmVyKGludCBwcm90bykiLAogICAgICAgICJSZXR1cm5zIHByb3RvY29sIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHByb3RvY29sIG51bWJlciBwcm90byIKICAgIF0sCiAgICAiZ2V0cmFuZG1heCI6IFsKICAgICAgICAiaW50IGdldHJhbmRtYXgodm9pZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIGEgcmFuZG9tIG51bWJlciBjYW4gaGF2ZSIKICAgIF0sCiAgICAiZ2V0cnVzYWdlIjogWwogICAgICAgICJhcnJheSBnZXRydXNhZ2UoW2ludCB3aG9dKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgdXNhZ2Ugc3RhdGlzdGljcyIKICAgIF0sCiAgICAiZ2V0c2VydmJ5bmFtZSI6IFsKICAgICAgICAiaW50IGdldHNlcnZieW5hbWUoc3RyaW5nIHNlcnZpY2UsIHN0cmluZyBwcm90b2NvbCkiLAogICAgICAgICJSZXR1cm5zIHBvcnQgYXNzb2NpYXRlZCB3aXRoIHNlcnZpY2UuIFByb3RvY29sIG11c3QgYmUgXCJ0Y3BcIiBvciBcInVkcFwiIgogICAgXSwKICAgICJnZXRzZXJ2Ynlwb3J0IjogWwogICAgICAgICJzdHJpbmcgZ2V0c2VydmJ5cG9ydChpbnQgcG9ydCwgc3RyaW5nIHByb3RvY29sKSIsCiAgICAgICAgIlJldHVybnMgc2VydmljZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCBwb3J0LiBQcm90b2NvbCBtdXN0IGJlIFwidGNwXCIgb3IgXCJ1ZHBcIiIKICAgIF0sCiAgICAiZ2V0dGV4dCI6IFsKICAgICAgICAic3RyaW5nIGdldHRleHQoc3RyaW5nIG1zZ2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgdHJhbnNsYXRpb24gb2YgbXNnaWQgZm9yIHRoZSBjdXJyZW50IGRvbWFpbiwgb3IgbXNnaWQgdW5hbHRlcmVkIGlmIGEgdHJhbnNsYXRpb24gZG9lcyBub3QgZXhpc3QiCiAgICBdLAogICAgImdldHRpbWVvZmRheSI6IFsKICAgICAgICAiYXJyYXkgZ2V0dGltZW9mZGF5KFtib29sIGdldF9hc19mbG9hdF0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGFzIGFycmF5IgogICAgXSwKICAgICJnZXR0eXBlIjogWwogICAgICAgICJzdHJpbmcgZ2V0dHlwZShtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUiCiAgICBdLAogICAgImdsb2IiOiBbCiAgICAgICAgImFycmF5IGdsb2Ioc3RyaW5nIHBhdHRlcm4gWywgaW50IGZsYWdzXSkiLAogICAgICAgICJGaW5kIHBhdGhuYW1lcyBtYXRjaGluZyBhIHBhdHRlcm4iCiAgICBdLAogICAgImdtZGF0ZSI6IFsKICAgICAgICAic3RyaW5nIGdtZGF0ZShzdHJpbmcgZm9ybWF0IFssIGxvbmcgdGltZXN0YW1wXSkiLAogICAgICAgICJGb3JtYXQgYSBHTVQgZGF0ZS90aW1lIgogICAgXSwKICAgICJnbW1rdGltZSI6IFsKICAgICAgICAiaW50IGdtbWt0aW1lKFtpbnQgaG91ciBbLCBpbnQgbWluIFssIGludCBzZWMgWywgaW50IG1vbiBbLCBpbnQgZGF5IFssIGludCB5ZWFyXV1dXV1dKSIsCiAgICAgICAgIkdldCBVTklYIHRpbWVzdGFtcCBmb3IgYSBHTVQgZGF0ZSIKICAgIF0sCiAgICAiZ21wX2FicyI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2FicyhyZXNvdXJjZSBhKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgYWJzb2x1dGUgdmFsdWUiCiAgICBdLAogICAgImdtcF9hZGQiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9hZGQocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJBZGQgYSBhbmQgYiIKICAgIF0sCiAgICAiZ21wX2FuZCI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2FuZChyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgbG9naWNhbCBBTkQgb2YgYSBhbmQgYiIKICAgIF0sCiAgICAiZ21wX2NscmJpdCI6IFsKICAgICAgICAidm9pZCBnbXBfY2xyYml0KHJlc291cmNlICZhLCBpbnQgaW5kZXgpIiwKICAgICAgICAiQ2xlYXJzIGJpdCBpbiBhIgogICAgXSwKICAgICJnbXBfY21wIjogWwogICAgICAgICJpbnQgZ21wX2NtcChyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkNvbXBhcmVzIHR3byBudW1iZXJzIgogICAgXSwKICAgICJnbXBfY29tIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfY29tKHJlc291cmNlIGEpIiwKICAgICAgICAiQ2FsY3VsYXRlcyBvbmUncyBjb21wbGVtZW50IG9mIGEiCiAgICBdLAogICAgImdtcF9kaXZfcSI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2Rpdl9xKHJlc291cmNlIGEsIHJlc291cmNlIGIgWywgaW50IHJvdW5kXSkiLAogICAgICAgICJEaXZpZGUgYSBieSBiLCByZXR1cm5zIHF1b3RpZW50IG9ubHkiCiAgICBdLAogICAgImdtcF9kaXZfcXIiOiBbCiAgICAgICAgImFycmF5IGdtcF9kaXZfcXIocmVzb3VyY2UgYSwgcmVzb3VyY2UgYiBbLCBpbnQgcm91bmRdKSIsCiAgICAgICAgIkRpdmlkZSBhIGJ5IGIsIHJldHVybnMgcXVvdGllbnQgYW5kIHJlbWluZGVyIgogICAgXSwKICAgICJnbXBfZGl2X3IiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9kaXZfcihyZXNvdXJjZSBhLCByZXNvdXJjZSBiIFssIGludCByb3VuZF0pIiwKICAgICAgICAiRGl2aWRlIGEgYnkgYiwgcmV0dXJucyByZW1pbmRlciBvbmx5IgogICAgXSwKICAgICJnbXBfZGl2ZXhhY3QiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9kaXZleGFjdChyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkRpdmlkZSBhIGJ5IGIgdXNpbmcgZXhhY3QgZGl2aXNpb24gYWxnb3JpdGhtIgogICAgXSwKICAgICJnbXBfZmFjdCI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2ZhY3QoaW50IGEpIiwKICAgICAgICAiQ2FsY3VsYXRlcyBmYWN0b3JpYWwgZnVuY3Rpb24iCiAgICBdLAogICAgImdtcF9nY2QiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9nY2QocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDb21wdXRlcyBncmVhdGVzdCBjb21tb24gZGVub21pbmF0b3IgKGdjZCkgb2YgYSBhbmQgYiIKICAgIF0sCiAgICAiZ21wX2djZGV4dCI6IFsKICAgICAgICAiYXJyYXkgZ21wX2djZGV4dChyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkNvbXB1dGVzIEcsIFMsIGFuZCBULCBzdWNoIHRoYXQgQVMgKyBCVCA9IEcgPSBgZ2NkJyAoQSwgQikiCiAgICBdLAogICAgImdtcF9oYW1kaXN0IjogWwogICAgICAgICJpbnQgZ21wX2hhbWRpc3QocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDYWxjdWxhdGVzIGhhbW1pbmcgZGlzdGFuY2UgYmV0d2VlbiBhIGFuZCBiIgogICAgXSwKICAgICJnbXBfaW5pdCI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2luaXQobWl4ZWQgbnVtYmVyIFssIGludCBiYXNlXSkiLAogICAgICAgICJJbml0aWFsaXplcyBHTVAgbnVtYmVyIgogICAgXSwKICAgICJnbXBfaW50dmFsIjogWwogICAgICAgICJpbnQgZ21wX2ludHZhbChyZXNvdXJjZSBnbXBudW1iZXIpIiwKICAgICAgICAiR2V0cyBzaWduZWQgbG9uZyB2YWx1ZSBvZiBHTVAgbnVtYmVyIgogICAgXSwKICAgICJnbXBfaW52ZXJ0IjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfaW52ZXJ0KHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ29tcHV0ZXMgdGhlIGludmVyc2Ugb2YgYSBtb2R1bG8gYiIKICAgIF0sCiAgICAiZ21wX2phY29iaSI6IFsKICAgICAgICAiaW50IGdtcF9qYWNvYmkocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDb21wdXRlcyBKYWNvYmkgc3ltYm9sIgogICAgXSwKICAgICJnbXBfbGVnZW5kcmUiOiBbCiAgICAgICAgImludCBnbXBfbGVnZW5kcmUocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDb21wdXRlcyBMZWdlbmRyZSBzeW1ib2wiCiAgICBdLAogICAgImdtcF9tb2QiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9tb2QocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDb21wdXRlcyBhIG1vZHVsbyBiIgogICAgXSwKICAgICJnbXBfbXVsIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfbXVsKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiTXVsdGlwbHkgYSBhbmQgYiIKICAgIF0sCiAgICAiZ21wX25lZyI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX25lZyhyZXNvdXJjZSBhKSIsCiAgICAgICAgIk5lZ2F0ZXMgYSBudW1iZXIiCiAgICBdLAogICAgImdtcF9uZXh0cHJpbWUiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9uZXh0cHJpbWUocmVzb3VyY2UgYSkiLAogICAgICAgICJGaW5kcyBuZXh0IHByaW1lIG9mIGEiCiAgICBdLAogICAgImdtcF9vciI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX29yKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ2FsY3VsYXRlcyBsb2dpY2FsIE9SIG9mIGEgYW5kIGIiCiAgICBdLAogICAgImdtcF9wZXJmZWN0X3NxdWFyZSI6IFsKICAgICAgICAiYm9vbCBnbXBfcGVyZmVjdF9zcXVhcmUocmVzb3VyY2UgYSkiLAogICAgICAgICJDaGVja3MgaWYgYSBpcyBhbiBleGFjdCBzcXVhcmUiCiAgICBdLAogICAgImdtcF9wb3Bjb3VudCI6IFsKICAgICAgICAiaW50IGdtcF9wb3Bjb3VudChyZXNvdXJjZSBhKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgdGhlIHBvcHVsYXRpb24gY291bnQgb2YgYSIKICAgIF0sCiAgICAiZ21wX3BvdyI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX3BvdyhyZXNvdXJjZSBiYXNlLCBpbnQgZXhwKSIsCiAgICAgICAgIlJhaXNlIGJhc2UgdG8gcG93ZXIgZXhwIgogICAgXSwKICAgICJnbXBfcG93bSI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX3Bvd20ocmVzb3VyY2UgYmFzZSwgcmVzb3VyY2UgZXhwLCByZXNvdXJjZSBtb2QpIiwKICAgICAgICAiUmFpc2UgYmFzZSB0byBwb3dlciBleHAgYW5kIHRha2UgcmVzdWx0IG1vZHVsbyBtb2QiCiAgICBdLAogICAgImdtcF9wcm9iX3ByaW1lIjogWwogICAgICAgICJpbnQgZ21wX3Byb2JfcHJpbWUocmVzb3VyY2UgYVssIGludCByZXBzXSkiLAogICAgICAgICJDaGVja3MgaWYgYSBpcyBcInByb2JhYmx5IHByaW1lXCIiCiAgICBdLAogICAgImdtcF9yYW5kb20iOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9yYW5kb20oW2ludCBsaW1pdGVyXSkiLAogICAgICAgICJHZXRzIHJhbmRvbSBudW1iZXIiCiAgICBdLAogICAgImdtcF9zY2FuMCI6IFsKICAgICAgICAiaW50IGdtcF9zY2FuMChyZXNvdXJjZSBhLCBpbnQgc3RhcnQpIiwKICAgICAgICAiRmluZHMgZmlyc3QgemVybyBiaXQiCiAgICBdLAogICAgImdtcF9zY2FuMSI6IFsKICAgICAgICAiaW50IGdtcF9zY2FuMShyZXNvdXJjZSBhLCBpbnQgc3RhcnQpIiwKICAgICAgICAiRmluZHMgZmlyc3Qgbm9uLXplcm8gYml0IgogICAgXSwKICAgICJnbXBfc2V0Yml0IjogWwogICAgICAgICJ2b2lkIGdtcF9zZXRiaXQocmVzb3VyY2UgJmEsIGludCBpbmRleFssIGJvb2wgc2V0X2NsZWFyXSkiLAogICAgICAgICJTZXRzIG9yIGNsZWFyIGJpdCBpbiBhIgogICAgXSwKICAgICJnbXBfc2lnbiI6IFsKICAgICAgICAiaW50IGdtcF9zaWduKHJlc291cmNlIGEpIiwKICAgICAgICAiR2V0cyB0aGUgc2lnbiBvZiB0aGUgbnVtYmVyIgogICAgXSwKICAgICJnbXBfc3FydCI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX3NxcnQocmVzb3VyY2UgYSkiLAogICAgICAgICJUYWtlcyBpbnRlZ2VyIHBhcnQgb2Ygc3F1YXJlIHJvb3Qgb2YgYSIKICAgIF0sCiAgICAiZ21wX3NxcnRyZW0iOiBbCiAgICAgICAgImFycmF5IGdtcF9zcXJ0cmVtKHJlc291cmNlIGEpIiwKICAgICAgICAiU3F1YXJlIHJvb3Qgd2l0aCByZW1haW5kZXIiCiAgICBdLAogICAgImdtcF9zdHJ2YWwiOiBbCiAgICAgICAgInN0cmluZyBnbXBfc3RydmFsKHJlc291cmNlIGdtcG51bWJlciBbLCBpbnQgYmFzZV0pIiwKICAgICAgICAiR2V0cyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgR01QIG51bWJlciIKICAgIF0sCiAgICAiZ21wX3N1YiI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX3N1YihyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIlN1YnRyYWN0IGIgZnJvbSBhIgogICAgXSwKICAgICJnbXBfdGVzdGJpdCI6IFsKICAgICAgICAiYm9vbCBnbXBfdGVzdGJpdChyZXNvdXJjZSBhLCBpbnQgaW5kZXgpIiwKICAgICAgICAiVGVzdHMgaWYgYml0IGlzIHNldCBpbiBhIgogICAgXSwKICAgICJnbXBfeG9yIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfeG9yKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ2FsY3VsYXRlcyBsb2dpY2FsIGV4Y2x1c2l2ZSBPUiBvZiBhIGFuZCBiIgogICAgXSwKICAgICJnbXN0cmZ0aW1lIjogWwogICAgICAgICJzdHJpbmcgZ21zdHJmdGltZShzdHJpbmcgZm9ybWF0IFssIGludCB0aW1lc3RhbXBdKSIsCiAgICAgICAgIkZvcm1hdCBhIEdNVC9VQ1QgdGltZS9kYXRlIGFjY29yZGluZyB0byBsb2NhbGUgc2V0dGluZ3MiCiAgICBdLAogICAgImdyYXBoZW1lX2V4dHJhY3QiOiBbCiAgICAgICAgInN0cmluZyBncmFwaGVtZV9leHRyYWN0KHN0cmluZyBzdHIsIGludCBzaXplWywgaW50IGV4dHJhY3RfdHlwZVssIGludCBzdGFydFssIGludCBuZXh0XV1dKSIsCiAgICAgICAgIkZ1bmN0aW9uIHRvIGV4dHJhY3QgYSBzZXF1ZW5jZSBvZiBkZWZhdWx0IGdyYXBoZW1lIGNsdXN0ZXJzIgogICAgXSwKICAgICJncmFwaGVtZV9zdHJpcG9zIjogWwogICAgICAgICJpbnQgZ3JhcGhlbWVfc3RyaXBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldCBdKSIsCiAgICAgICAgIkZpbmQgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciwgaWdub3JpbmcgY2FzZSBkaWZmZXJlbmNlcyIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3RyaXN0ciI6IFsKICAgICAgICAic3RyaW5nIGdyYXBoZW1lX3N0cmlzdHIoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlWywgYm9vbCBwYXJ0XSkiLAogICAgICAgICJGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJncmFwaGVtZV9zdHJsZW4iOiBbCiAgICAgICAgImludCBncmFwaGVtZV9zdHJsZW4oc3RyaW5nIHN0cikiLAogICAgICAgICJHZXQgbnVtYmVyIG9mIGdyYXBoZW1lcyBpbiBhIHN0cmluZyIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3RycG9zIjogWwogICAgICAgICJpbnQgZ3JhcGhlbWVfc3RycG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0IF0pIiwKICAgICAgICAiRmluZCBwb3NpdGlvbiBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJncmFwaGVtZV9zdHJyaXBvcyI6IFsKICAgICAgICAiaW50IGdyYXBoZW1lX3N0cnJpcG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0XSkiLAogICAgICAgICJGaW5kIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciwgaWdub3JpbmcgY2FzZSIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3RycnBvcyI6IFsKICAgICAgICAiaW50IGdyYXBoZW1lX3N0cnJwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkZpbmQgcG9zaXRpb24gb2YgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJncmFwaGVtZV9zdHJzdHIiOiBbCiAgICAgICAgInN0cmluZyBncmFwaGVtZV9zdHJzdHIoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlWywgYm9vbCBwYXJ0XSkiLAogICAgICAgICJGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJncmFwaGVtZV9zdWJzdHIiOiBbCiAgICAgICAgInN0cmluZyBncmFwaGVtZV9zdWJzdHIoc3RyaW5nIHN0ciwgaW50IHN0YXJ0IFssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIlJldHVybnMgcGFydCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAiZ3JlZ29yaWFudG9qZCI6IFsKICAgICAgICAiaW50IGdyZWdvcmlhbnRvamQoaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgeWVhcikiLAogICAgICAgICJDb252ZXJ0cyBhIGdyZWdvcmlhbiBjYWxlbmRhciBkYXRlIHRvIGp1bGlhbiBkYXkgY291bnQiCiAgICBdLAogICAgImd6Y29tcHJlc3MiOiBbCiAgICAgICAgInN0cmluZyBnemNvbXByZXNzKHN0cmluZyBkYXRhIFssIGludCBsZXZlbF0pIiwKICAgICAgICAiR3ppcC1jb21wcmVzcyBhIHN0cmluZyIKICAgIF0sCiAgICAiZ3pkZWZsYXRlIjogWwogICAgICAgICJzdHJpbmcgZ3pkZWZsYXRlKHN0cmluZyBkYXRhIFssIGludCBsZXZlbF0pIiwKICAgICAgICAiR3ppcC1jb21wcmVzcyBhIHN0cmluZyIKICAgIF0sCiAgICAiZ3plbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyBnemVuY29kZShzdHJpbmcgZGF0YSBbLCBpbnQgbGV2ZWwgWywgaW50IGVuY29kaW5nX21vZGVdXSkiLAogICAgICAgICJHWiBlbmNvZGUgYSBzdHJpbmciCiAgICBdLAogICAgImd6ZmlsZSI6IFsKICAgICAgICAiYXJyYXkgZ3pmaWxlKHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgdXNlX2luY2x1ZGVfcGF0aF0pIiwKICAgICAgICAiUmVhZCB1bmQgdW5jb21wcmVzcyBlbnRpcmUgLmd6LWZpbGUgaW50byBhbiBhcnJheSIKICAgIF0sCiAgICAiZ3ppbmZsYXRlIjogWwogICAgICAgICJzdHJpbmcgZ3ppbmZsYXRlKHN0cmluZyBkYXRhIFssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIlVuemlwIGEgZ3ppcC1jb21wcmVzc2VkIHN0cmluZyIKICAgIF0sCiAgICAiZ3pvcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBnem9wZW4oc3RyaW5nIGZpbGVuYW1lLCBzdHJpbmcgbW9kZSBbLCBpbnQgdXNlX2luY2x1ZGVfcGF0aF0pIiwKICAgICAgICAiT3BlbiBhIC5nei1maWxlIGFuZCByZXR1cm4gYSAuZ3otZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJnenVuY29tcHJlc3MiOiBbCiAgICAgICAgInN0cmluZyBnenVuY29tcHJlc3Moc3RyaW5nIGRhdGEgWywgaW50IGxlbmd0aF0pIiwKICAgICAgICAiVW56aXAgYSBnemlwLWNvbXByZXNzZWQgc3RyaW5nIgogICAgXSwKICAgICJoYXNoIjogWwogICAgICAgICJzdHJpbmcgaGFzaChzdHJpbmcgYWxnbywgc3RyaW5nIGRhdGFbLCBib29sIHJhd19vdXRwdXQgPSBmYWxzZV0pIiwKICAgICAgICAiR2VuZXJhdGUgYSBoYXNoIG9mIGEgZ2l2ZW4gaW5wdXQgc3RyaW5nIFJldHVybnMgbG93ZXJjYXNlIGhleGl0cyBieSBkZWZhdWx0IgogICAgXSwKICAgICJoYXNoX2FsZ29zIjogWwogICAgICAgICJhcnJheSBoYXNoX2FsZ29zKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiByZWdpc3RlcmVkIGhhc2hpbmcgYWxnb3JpdGhtcyIKICAgIF0sCiAgICAiaGFzaF9jb3B5IjogWwogICAgICAgICJyZXNvdXJjZSBoYXNoX2NvcHkocmVzb3VyY2UgY29udGV4dCkiLAogICAgICAgICJDb3B5IGhhc2ggcmVzb3VyY2UiCiAgICBdLAogICAgImhhc2hfZmlsZSI6IFsKICAgICAgICAic3RyaW5nIGhhc2hfZmlsZShzdHJpbmcgYWxnbywgc3RyaW5nIGZpbGVuYW1lWywgYm9vbCByYXdfb3V0cHV0ID0gZmFsc2VdKSIsCiAgICAgICAgIkdlbmVyYXRlIGEgaGFzaCBvZiBhIGdpdmVuIGZpbGUgUmV0dXJucyBsb3dlcmNhc2UgaGV4aXRzIGJ5IGRlZmF1bHQiCiAgICBdLAogICAgImhhc2hfZmluYWwiOiBbCiAgICAgICAgInN0cmluZyBoYXNoX2ZpbmFsKHJlc291cmNlIGNvbnRleHRbLCBib29sIHJhd19vdXRwdXQ9ZmFsc2VdKSIsCiAgICAgICAgIk91dHB1dCByZXN1bHRpbmcgZGlnZXN0IgogICAgXSwKICAgICJoYXNoX2htYWMiOiBbCiAgICAgICAgInN0cmluZyBoYXNoX2htYWMoc3RyaW5nIGFsZ28sIHN0cmluZyBkYXRhLCBzdHJpbmcga2V5WywgYm9vbCByYXdfb3V0cHV0ID0gZmFsc2VdKSIsCiAgICAgICAgIkdlbmVyYXRlIGEgaGFzaCBvZiBhIGdpdmVuIGlucHV0IHN0cmluZyB3aXRoIGEga2V5IHVzaW5nIEhNQUMgUmV0dXJucyBsb3dlcmNhc2UgaGV4aXRzIGJ5IGRlZmF1bHQiCiAgICBdLAogICAgImhhc2hfaG1hY19maWxlIjogWwogICAgICAgICJzdHJpbmcgaGFzaF9obWFjX2ZpbGUoc3RyaW5nIGFsZ28sIHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nIGtleVssIGJvb2wgcmF3X291dHB1dCA9IGZhbHNlXSkiLAogICAgICAgICJHZW5lcmF0ZSBhIGhhc2ggb2YgYSBnaXZlbiBmaWxlIHdpdGggYSBrZXkgdXNpbmcgSE1BQyBSZXR1cm5zIGxvd2VyY2FzZSBoZXhpdHMgYnkgZGVmYXVsdCIKICAgIF0sCiAgICAiaGFzaF9pbml0IjogWwogICAgICAgICJyZXNvdXJjZSBoYXNoX2luaXQoc3RyaW5nIGFsZ29bLCBpbnQgb3B0aW9ucywgc3RyaW5nIGtleV0pIiwKICAgICAgICAiSW5pdGlhbGl6ZSBhIGhhc2hpbmcgY29udGV4dCIKICAgIF0sCiAgICAiaGFzaF91cGRhdGUiOiBbCiAgICAgICAgImJvb2wgaGFzaF91cGRhdGUocmVzb3VyY2UgY29udGV4dCwgc3RyaW5nIGRhdGEpIiwKICAgICAgICAiUHVtcCBkYXRhIGludG8gdGhlIGhhc2hpbmcgYWxnb3JpdGhtIgogICAgXSwKICAgICJoYXNoX3VwZGF0ZV9maWxlIjogWwogICAgICAgICJib29sIGhhc2hfdXBkYXRlX2ZpbGUocmVzb3VyY2UgY29udGV4dCwgc3RyaW5nIGZpbGVuYW1lWywgcmVzb3VyY2UgY29udGV4dF0pIiwKICAgICAgICAiUHVtcCBkYXRhIGludG8gdGhlIGhhc2hpbmcgYWxnb3JpdGhtIGZyb20gYSBmaWxlIgogICAgXSwKICAgICJoYXNoX3VwZGF0ZV9zdHJlYW0iOiBbCiAgICAgICAgImludCBoYXNoX3VwZGF0ZV9zdHJlYW0ocmVzb3VyY2UgY29udGV4dCwgcmVzb3VyY2UgaGFuZGxlWywgaW50ZWdlciBsZW5ndGhdKSIsCiAgICAgICAgIlB1bXAgZGF0YSBpbnRvIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBmcm9tIGFuIG9wZW4gc3RyZWFtIgogICAgXSwKICAgICJoZWFkZXIiOiBbCiAgICAgICAgInZvaWQgaGVhZGVyKHN0cmluZyBoZWFkZXIgWywgYm9vbCByZXBsYWNlLCBbaW50IGh0dHBfcmVzcG9uc2VfY29kZV1dKSIsCiAgICAgICAgIlNlbmRzIGEgcmF3IEhUVFAgaGVhZGVyIgogICAgXSwKICAgICJoZWFkZXJfcmVtb3ZlIjogWwogICAgICAgICJ2b2lkIGhlYWRlcl9yZW1vdmUoW3N0cmluZyBuYW1lXSkiLAogICAgICAgICJSZW1vdmVzIGFuIEhUVFAgaGVhZGVyIHByZXZpb3VzbHkgc2V0IHVzaW5nIGhlYWRlcigpIgogICAgXSwKICAgICJoZWFkZXJzX2xpc3QiOiBbCiAgICAgICAgImFycmF5IGhlYWRlcnNfbGlzdCh2b2lkKSIsCiAgICAgICAgIlJldHVybiBsaXN0IG9mIGhlYWRlcnMgdG8gYmUgc2VudCAvIGFscmVhZHkgc2VudCIKICAgIF0sCiAgICAiaGVhZGVyc19zZW50IjogWwogICAgICAgICJib29sIGhlYWRlcnNfc2VudChbc3RyaW5nICYkZmlsZSBbLCBpbnQgJiRsaW5lXV0pIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIGhlYWRlcnMgaGF2ZSBhbHJlYWR5IGJlZW4gc2VudCwgZmFsc2Ugb3RoZXJ3aXNlIgogICAgXSwKICAgICJoZWJyZXYiOiBbCiAgICAgICAgInN0cmluZyBoZWJyZXYoc3RyaW5nIHN0ciBbLCBpbnQgbWF4X2NoYXJzX3Blcl9saW5lXSkiLAogICAgICAgICJDb252ZXJ0cyBsb2dpY2FsIEhlYnJldyB0ZXh0IHRvIHZpc3VhbCB0ZXh0IgogICAgXSwKICAgICJoZWJyZXZjIjogWwogICAgICAgICJzdHJpbmcgaGVicmV2YyhzdHJpbmcgc3RyIFssIGludCBtYXhfY2hhcnNfcGVyX2xpbmVdKSIsCiAgICAgICAgIkNvbnZlcnRzIGxvZ2ljYWwgSGVicmV3IHRleHQgdG8gdmlzdWFsIHRleHQgd2l0aCBuZXdsaW5lIGNvbnZlcnNpb24iCiAgICBdLAogICAgImhleGRlYyI6IFsKICAgICAgICAiaW50IGhleGRlYyhzdHJpbmcgaGV4YWRlY2ltYWxfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGRlY2ltYWwgZXF1aXZhbGVudCBvZiB0aGUgaGV4YWRlY2ltYWwgbnVtYmVyIgogICAgXSwKICAgICJoaWdobGlnaHRfZmlsZSI6IFsKICAgICAgICAiYm9vbCBoaWdobGlnaHRfZmlsZShzdHJpbmcgZmlsZV9uYW1lIFssIGJvb2wgcmV0dXJuXSApIiwKICAgICAgICAiU3ludGF4IGhpZ2hsaWdodCBhIHNvdXJjZSBmaWxlIgogICAgXSwKICAgICJoaWdobGlnaHRfc3RyaW5nIjogWwogICAgICAgICJib29sIGhpZ2hsaWdodF9zdHJpbmcoc3RyaW5nIHN0cmluZyBbLCBib29sIHJldHVybl0gKSIsCiAgICAgICAgIlN5bnRheCBoaWdobGlnaHQgYSBzdHJpbmcgb3Igb3B0aW9uYWxseSByZXR1cm4gaXQiCiAgICBdLAogICAgImh0bWxfZW50aXR5X2RlY29kZSI6IFsKICAgICAgICAic3RyaW5nIGh0bWxfZW50aXR5X2RlY29kZShzdHJpbmcgc3RyaW5nIFssIGludCBxdW90ZV9zdHlsZV1bLCBzdHJpbmcgY2hhcnNldF0pIiwKICAgICAgICAiQ29udmVydCBhbGwgSFRNTCBlbnRpdGllcyB0byB0aGVpciBhcHBsaWNhYmxlIGNoYXJhY3RlcnMiCiAgICBdLAogICAgImh0bWxlbnRpdGllcyI6IFsKICAgICAgICAic3RyaW5nIGh0bWxlbnRpdGllcyhzdHJpbmcgc3RyaW5nIFssIGludCBxdW90ZV9zdHlsZVssIHN0cmluZyBjaGFyc2V0WywgYm9vbCBkb3VibGVfZW5jb2RlXV1dKSIsCiAgICAgICAgIkNvbnZlcnQgYWxsIGFwcGxpY2FibGUgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzIgogICAgXSwKICAgICJodG1sc3BlY2lhbGNoYXJzIjogWwogICAgICAgICJzdHJpbmcgaHRtbHNwZWNpYWxjaGFycyhzdHJpbmcgc3RyaW5nIFssIGludCBxdW90ZV9zdHlsZVssIHN0cmluZyBjaGFyc2V0WywgYm9vbCBkb3VibGVfZW5jb2RlXV1dKSIsCiAgICAgICAgIkNvbnZlcnQgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMiCiAgICBdLAogICAgImh0bWxzcGVjaWFsY2hhcnNfZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgaHRtbHNwZWNpYWxjaGFyc19kZWNvZGUoc3RyaW5nIHN0cmluZyBbLCBpbnQgcXVvdGVfc3R5bGVdKSIsCiAgICAgICAgIkNvbnZlcnQgc3BlY2lhbCBIVE1MIGVudGl0aWVzIGJhY2sgdG8gY2hhcmFjdGVycyIKICAgIF0sCiAgICAiaHR0cF9idWlsZF9xdWVyeSI6IFsKICAgICAgICAic3RyaW5nIGh0dHBfYnVpbGRfcXVlcnkobWl4ZWQgZm9ybWRhdGEgWywgc3RyaW5nIHByZWZpeCBbLCBzdHJpbmcgYXJnX3NlcGFyYXRvcl1dKSIsCiAgICAgICAgIkdlbmVyYXRlcyBhIGZvcm0tZW5jb2RlZCBxdWVyeSBzdHJpbmcgZnJvbSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvciBvYmplY3QuIgogICAgXSwKICAgICJoeXBvdCI6IFsKICAgICAgICAiZmxvYXQgaHlwb3QoZmxvYXQgbnVtMSwgZmxvYXQgbnVtMikiLAogICAgICAgICJSZXR1cm5zIHNxcnQobnVtMSpudW0xICsgbnVtMipudW0yKSIKICAgIF0sCiAgICAiaWJhc2VfYWRkX3VzZXIiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfYWRkX3VzZXIocmVzb3VyY2Ugc2VydmljZV9oYW5kbGUsIHN0cmluZyB1c2VyX25hbWUsIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgZmlyc3RfbmFtZSBbLCBzdHJpbmcgbWlkZGxlX25hbWUgWywgc3RyaW5nIGxhc3RfbmFtZV1dXSkiLAogICAgICAgICJBZGQgYSB1c2VyIHRvIHNlY3VyaXR5IGRhdGFiYXNlIgogICAgXSwKICAgICJpYmFzZV9hZmZlY3RlZF9yb3dzIjogWwogICAgICAgICJpbnQgaWJhc2VfYWZmZWN0ZWRfcm93cyggWyByZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIgXSApIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgYnkgdGhlIHByZXZpb3VzIElOU0VSVCwgVVBEQVRFIG9yIERFTEVURSBzdGF0ZW1lbnQiCiAgICBdLAogICAgImliYXNlX2JhY2t1cCI6IFsKICAgICAgICAibWl4ZWQgaWJhc2VfYmFja3VwKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBzdHJpbmcgc291cmNlX2RiLCBzdHJpbmcgZGVzdF9maWxlIFssIGludCBvcHRpb25zIFssIGJvb2wgdmVyYm9zZV1dKSIsCiAgICAgICAgIkluaXRpYXRlcyBhIGJhY2t1cCB0YXNrIGluIHRoZSBzZXJ2aWNlIG1hbmFnZXIgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkiCiAgICBdLAogICAgImliYXNlX2Jsb2JfYWRkIjogWwogICAgICAgICJib29sIGliYXNlX2Jsb2JfYWRkKHJlc291cmNlIGJsb2JfaGFuZGxlLCBzdHJpbmcgZGF0YSkiLAogICAgICAgICJBZGQgZGF0YSBpbnRvIGNyZWF0ZWQgYmxvYiIKICAgIF0sCiAgICAiaWJhc2VfYmxvYl9jYW5jZWwiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfYmxvYl9jYW5jZWwocmVzb3VyY2UgYmxvYl9oYW5kbGUpIiwKICAgICAgICAiQ2FuY2VsIGNyZWF0aW5nIGJsb2IiCiAgICBdLAogICAgImliYXNlX2Jsb2JfY2xvc2UiOiBbCiAgICAgICAgInN0cmluZyBpYmFzZV9ibG9iX2Nsb3NlKHJlc291cmNlIGJsb2JfaGFuZGxlKSIsCiAgICAgICAgIkNsb3NlIGJsb2IiCiAgICBdLAogICAgImliYXNlX2Jsb2JfY3JlYXRlIjogWwogICAgICAgICJyZXNvdXJjZSBpYmFzZV9ibG9iX2NyZWF0ZShbcmVzb3VyY2UgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJDcmVhdGUgYmxvYiBmb3IgYWRkaW5nIGRhdGEiCiAgICBdLAogICAgImliYXNlX2Jsb2JfZWNobyI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9ibG9iX2VjaG8oWyByZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIsIF0gc3RyaW5nIGJsb2JfaWQpIiwKICAgICAgICAiT3V0cHV0IGJsb2IgY29udGVudHMgdG8gYnJvd3NlciIKICAgIF0sCiAgICAiaWJhc2VfYmxvYl9nZXQiOiBbCiAgICAgICAgInN0cmluZyBpYmFzZV9ibG9iX2dldChyZXNvdXJjZSBibG9iX2hhbmRsZSwgaW50IGxlbikiLAogICAgICAgICJHZXQgbGVuIGJ5dGVzIGRhdGEgZnJvbSBvcGVuIGJsb2IiCiAgICBdLAogICAgImliYXNlX2Jsb2JfaW1wb3J0IjogWwogICAgICAgICJzdHJpbmcgaWJhc2VfYmxvYl9pbXBvcnQoWyByZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIsIF0gcmVzb3VyY2UgZmlsZSkiLAogICAgICAgICJDcmVhdGUgYmxvYiwgY29weSBmaWxlIGluIGl0LCBhbmQgY2xvc2UgaXQiCiAgICBdLAogICAgImliYXNlX2Jsb2JfaW5mbyI6IFsKICAgICAgICAiYXJyYXkgaWJhc2VfYmxvYl9pbmZvKFsgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyLCBdIHN0cmluZyBibG9iX2lkKSIsCiAgICAgICAgIlJldHVybiBibG9iIGxlbmd0aCBhbmQgb3RoZXIgdXNlZnVsIGluZm8iCiAgICBdLAogICAgImliYXNlX2Jsb2Jfb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2VfYmxvYl9vcGVuKFsgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyLCBdIHN0cmluZyBibG9iX2lkKSIsCiAgICAgICAgIk9wZW4gYmxvYiBmb3IgcmV0cmlldmluZyBkYXRhIHBhcnRzIgogICAgXSwKICAgICJpYmFzZV9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9jbG9zZShbcmVzb3VyY2UgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJDbG9zZSBhbiBJbnRlckJhc2UgY29ubmVjdGlvbiIKICAgIF0sCiAgICAiaWJhc2VfY29tbWl0IjogWwogICAgICAgICJib29sIGliYXNlX2NvbW1pdCggcmVzb3VyY2UgbGlua19pZGVudGlmaWVyICkiLAogICAgICAgICJDb21taXQgdHJhbnNhY3Rpb24iCiAgICBdLAogICAgImliYXNlX2NvbW1pdF9yZXQiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfY29tbWl0X3JldCggcmVzb3VyY2UgbGlua19pZGVudGlmaWVyICkiLAogICAgICAgICJDb21taXQgdHJhbnNhY3Rpb24gYW5kIHJldGFpbiB0aGUgdHJhbnNhY3Rpb24gY29udGV4dCIKICAgIF0sCiAgICAiaWJhc2VfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2VfY29ubmVjdChzdHJpbmcgZGF0YWJhc2UgWywgc3RyaW5nIHVzZXJuYW1lIFssIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgY2hhcnNldCBbLCBpbnQgYnVmZmVycyBbLCBpbnQgZGlhbGVjdCBbLCBzdHJpbmcgcm9sZV1dXV1dXSkiLAogICAgICAgICJPcGVuIGEgY29ubmVjdGlvbiB0byBhbiBJbnRlckJhc2UgZGF0YWJhc2UiCiAgICBdLAogICAgImliYXNlX2RiX2luZm8iOiBbCiAgICAgICAgInN0cmluZyBpYmFzZV9kYl9pbmZvKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBzdHJpbmcgZGIsIGludCBhY3Rpb24gWywgaW50IGFyZ3VtZW50XSkiLAogICAgICAgICJSZXF1ZXN0IHN0YXRpc3RpY3MgYWJvdXQgYSBkYXRhYmFzZSIKICAgIF0sCiAgICAiaWJhc2VfZGVsZXRlX3VzZXIiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfZGVsZXRlX3VzZXIocmVzb3VyY2Ugc2VydmljZV9oYW5kbGUsIHN0cmluZyB1c2VyX25hbWUsIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgZmlyc3RfbmFtZSBbLCBzdHJpbmcgbWlkZGxlX25hbWUgWywgc3RyaW5nIGxhc3RfbmFtZV1dXSkiLAogICAgICAgICJEZWxldGUgYSB1c2VyIGZyb20gc2VjdXJpdHkgZGF0YWJhc2UiCiAgICBdLAogICAgImliYXNlX2Ryb3BfZGIiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfZHJvcF9kYihbcmVzb3VyY2UgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJEcm9wIGFuIEludGVyQmFzZSBkYXRhYmFzZSIKICAgIF0sCiAgICAiaWJhc2VfZXJyY29kZSI6IFsKICAgICAgICAiaW50IGliYXNlX2VycmNvZGUodm9pZCkiLAogICAgICAgICJSZXR1cm4gZXJyb3IgY29kZSIKICAgIF0sCiAgICAiaWJhc2VfZXJybXNnIjogWwogICAgICAgICJzdHJpbmcgaWJhc2VfZXJybXNnKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIGVycm9yIG1lc3NhZ2UiCiAgICBdLAogICAgImliYXNlX2V4ZWN1dGUiOiBbCiAgICAgICAgIm1peGVkIGliYXNlX2V4ZWN1dGUocmVzb3VyY2UgcXVlcnkgWywgbWl4ZWQgYmluZF9hcmcgWywgbWl4ZWQgYmluZF9hcmcgWywgLi4uXV1dKSIsCiAgICAgICAgIkV4ZWN1dGUgYSBwcmV2aW91c2x5IHByZXBhcmVkIHF1ZXJ5IgogICAgXSwKICAgICJpYmFzZV9mZXRjaF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgaWJhc2VfZmV0Y2hfYXNzb2MocmVzb3VyY2UgcmVzdWx0IFssIGludCBmZXRjaF9mbGFnc10pIiwKICAgICAgICAiRmV0Y2ggYSByb3cgIGZyb20gdGhlIHJlc3VsdHMgb2YgYSBxdWVyeSIKICAgIF0sCiAgICAiaWJhc2VfZmV0Y2hfb2JqZWN0IjogWwogICAgICAgICJvYmplY3QgaWJhc2VfZmV0Y2hfb2JqZWN0KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgZmV0Y2hfZmxhZ3NdKSIsCiAgICAgICAgIkZldGNoIGEgb2JqZWN0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBxdWVyeSIKICAgIF0sCiAgICAiaWJhc2VfZmV0Y2hfcm93IjogWwogICAgICAgICJhcnJheSBpYmFzZV9mZXRjaF9yb3cocmVzb3VyY2UgcmVzdWx0IFssIGludCBmZXRjaF9mbGFnc10pIiwKICAgICAgICAiRmV0Y2ggYSByb3cgIGZyb20gdGhlIHJlc3VsdHMgb2YgYSBxdWVyeSIKICAgIF0sCiAgICAiaWJhc2VfZmllbGRfaW5mbyI6IFsKICAgICAgICAiYXJyYXkgaWJhc2VfZmllbGRfaW5mbyhyZXNvdXJjZSBxdWVyeV9yZXN1bHQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiR2V0IGluZm9ybWF0aW9uIGFib3V0IGEgZmllbGQiCiAgICBdLAogICAgImliYXNlX2ZyZWVfZXZlbnRfaGFuZGxlciI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXIocmVzb3VyY2UgZXZlbnQpIiwKICAgICAgICAiRnJlZXMgdGhlIGV2ZW50IGhhbmRsZXIgc2V0IGJ5IGliYXNlX3NldF9ldmVudF9oYW5kbGVyKCkiCiAgICBdLAogICAgImliYXNlX2ZyZWVfcXVlcnkiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfZnJlZV9xdWVyeShyZXNvdXJjZSBxdWVyeSkiLAogICAgICAgICJGcmVlIG1lbW9yeSB1c2VkIGJ5IGEgcXVlcnkiCiAgICBdLAogICAgImliYXNlX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJib29sIGliYXNlX2ZyZWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGcmVlIHRoZSBtZW1vcnkgdXNlZCBieSBhIHJlc3VsdCIKICAgIF0sCiAgICAiaWJhc2VfZ2VuX2lkIjogWwogICAgICAgICJpbnQgaWJhc2VfZ2VuX2lkKHN0cmluZyBnZW5lcmF0b3IgWywgaW50IGluY3JlbWVudCBbLCByZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIgXV0pIiwKICAgICAgICAiSW5jcmVtZW50cyB0aGUgbmFtZWQgZ2VuZXJhdG9yIGFuZCByZXR1cm5zIGl0cyBuZXcgdmFsdWUiCiAgICBdLAogICAgImliYXNlX21haW50YWluX2RiIjogWwogICAgICAgICJib29sIGliYXNlX21haW50YWluX2RiKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBzdHJpbmcgZGIsIGludCBhY3Rpb24gWywgaW50IGFyZ3VtZW50XSkiLAogICAgICAgICJFeGVjdXRlIGEgbWFpbnRlbmFuY2UgY29tbWFuZCBvbiB0aGUgZGF0YWJhc2Ugc2VydmVyIgogICAgXSwKICAgICJpYmFzZV9tb2RpZnlfdXNlciI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9tb2RpZnlfdXNlcihyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nIHVzZXJfbmFtZSwgc3RyaW5nIHBhc3N3b3JkIFssIHN0cmluZyBmaXJzdF9uYW1lIFssIHN0cmluZyBtaWRkbGVfbmFtZSBbLCBzdHJpbmcgbGFzdF9uYW1lXV1dKSIsCiAgICAgICAgIk1vZGlmeSBhIHVzZXIgaW4gc2VjdXJpdHkgZGF0YWJhc2UiCiAgICBdLAogICAgImliYXNlX25hbWVfcmVzdWx0IjogWwogICAgICAgICJib29sIGliYXNlX25hbWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdCwgc3RyaW5nIG5hbWUpIiwKICAgICAgICAiQXNzaWduIGEgbmFtZSB0byBhIHJlc3VsdCBmb3IgdXNlIHdpdGggLi4uIFdIRVJFIENVUlJFTlQgT0YgPG5hbWU+IHN0YXRlbWVudHMiCiAgICBdLAogICAgImliYXNlX251bV9maWVsZHMiOiBbCiAgICAgICAgImludCBpYmFzZV9udW1fZmllbGRzKHJlc291cmNlIHF1ZXJ5X3Jlc3VsdCkiLAogICAgICAgICJHZXQgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gcmVzdWx0IgogICAgXSwKICAgICJpYmFzZV9udW1fcGFyYW1zIjogWwogICAgICAgICJpbnQgaWJhc2VfbnVtX3BhcmFtcyhyZXNvdXJjZSBxdWVyeSkiLAogICAgICAgICJHZXQgdGhlIG51bWJlciBvZiBwYXJhbXMgaW4gYSBwcmVwYXJlZCBxdWVyeSIKICAgIF0sCiAgICAiaWJhc2VfbnVtX3Jvd3MiOiBbCiAgICAgICAgImludCBpYmFzZV9udW1fcm93cyggcmVzb3VyY2UgcmVzdWx0X2lkZW50aWZpZXIgKSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgdGhhdCBhcmUgYXZhaWxhYmxlIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJpYmFzZV9wYXJhbV9pbmZvIjogWwogICAgICAgICJhcnJheSBpYmFzZV9wYXJhbV9pbmZvKHJlc291cmNlIHF1ZXJ5LCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIkdldCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcmFtZXRlciIKICAgIF0sCiAgICAiaWJhc2VfcGNvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIGliYXNlX3Bjb25uZWN0KHN0cmluZyBkYXRhYmFzZSBbLCBzdHJpbmcgdXNlcm5hbWUgWywgc3RyaW5nIHBhc3N3b3JkIFssIHN0cmluZyBjaGFyc2V0IFssIGludCBidWZmZXJzIFssIGludCBkaWFsZWN0IFssIHN0cmluZyByb2xlXV1dXV1dKSIsCiAgICAgICAgIk9wZW4gYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gYW4gSW50ZXJCYXNlIGRhdGFiYXNlIgogICAgXSwKICAgICJpYmFzZV9wcmVwYXJlIjogWwogICAgICAgICJyZXNvdXJjZSBpYmFzZV9wcmVwYXJlKHJlc291cmNlIGxpbmtfaWRlbnRpZmllclssIHN0cmluZyBxdWVyeSBbLCByZXNvdXJjZSB0cmFuc19pZGVudGlmaWVyIF1dKSIsCiAgICAgICAgIlByZXBhcmUgYSBxdWVyeSBmb3IgbGF0ZXIgZXhlY3V0aW9uIgogICAgXSwKICAgICJpYmFzZV9xdWVyeSI6IFsKICAgICAgICAibWl4ZWQgaWJhc2VfcXVlcnkoW3Jlc291cmNlIGxpbmtfaWRlbnRpZmllciwgWyByZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIsIF1dIHN0cmluZyBxdWVyeSBbLCBtaXhlZCBiaW5kX2FyZyBbLCBtaXhlZCBiaW5kX2FyZyBbLCAuLi5dXV0pIiwKICAgICAgICAiRXhlY3V0ZSBhIHF1ZXJ5IgogICAgXSwKICAgICJpYmFzZV9yZXN0b3JlIjogWwogICAgICAgICJtaXhlZCBpYmFzZV9yZXN0b3JlKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBzdHJpbmcgc291cmNlX2ZpbGUsIHN0cmluZyBkZXN0X2RiIFssIGludCBvcHRpb25zIFssIGJvb2wgdmVyYm9zZV1dKSIsCiAgICAgICAgIkluaXRpYXRlcyBhIHJlc3RvcmUgdGFzayBpbiB0aGUgc2VydmljZSBtYW5hZ2VyIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IgogICAgXSwKICAgICJpYmFzZV9yb2xsYmFjayI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9yb2xsYmFjayggcmVzb3VyY2UgbGlua19pZGVudGlmaWVyICkiLAogICAgICAgICJSb2xsYmFjayB0cmFuc2FjdGlvbiIKICAgIF0sCiAgICAiaWJhc2Vfcm9sbGJhY2tfcmV0IjogWwogICAgICAgICJib29sIGliYXNlX3JvbGxiYWNrX3JldCggcmVzb3VyY2UgbGlua19pZGVudGlmaWVyICkiLAogICAgICAgICJSb2xsYmFjayB0cmFuc2FjdGlvbiBhbmQgcmV0YWluIHRoZSB0cmFuc2FjdGlvbiBjb250ZXh0IgogICAgXSwKICAgICJpYmFzZV9zZXJ2ZXJfaW5mbyI6IFsKICAgICAgICAic3RyaW5nIGliYXNlX3NlcnZlcl9pbmZvKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBpbnQgYWN0aW9uKSIsCiAgICAgICAgIlJlcXVlc3QgaW5mb3JtYXRpb24gYWJvdXQgYSBkYXRhYmFzZSBzZXJ2ZXIiCiAgICBdLAogICAgImliYXNlX3NlcnZpY2VfYXR0YWNoIjogWwogICAgICAgICJyZXNvdXJjZSBpYmFzZV9zZXJ2aWNlX2F0dGFjaChzdHJpbmcgaG9zdCwgc3RyaW5nIGRiYV91c2VybmFtZSwgc3RyaW5nIGRiYV9wYXNzd29yZCkiLAogICAgICAgICJDb25uZWN0IHRvIHRoZSBzZXJ2aWNlIG1hbmFnZXIiCiAgICBdLAogICAgImliYXNlX3NlcnZpY2VfZGV0YWNoIjogWwogICAgICAgICJib29sIGliYXNlX3NlcnZpY2VfZGV0YWNoKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlKSIsCiAgICAgICAgIkRpc2Nvbm5lY3QgZnJvbSB0aGUgc2VydmljZSBtYW5hZ2VyIgogICAgXSwKICAgICJpYmFzZV9zZXRfZXZlbnRfaGFuZGxlciI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2Vfc2V0X2V2ZW50X2hhbmRsZXIoW3Jlc291cmNlIGxpbmtfaWRlbnRpZmllcixdIGNhbGxiYWNrIGhhbmRsZXIsIHN0cmluZyBldmVudCBbLCBzdHJpbmcgZXZlbnQgWywgLi4uXV0pIiwKICAgICAgICAiUmVnaXN0ZXIgdGhlIGNhbGxiYWNrIGZvciBoYW5kbGluZyBlYWNoIG9mIHRoZSBuYW1lZCBldmVudHMiCiAgICBdLAogICAgImliYXNlX3RyYW5zIjogWwogICAgICAgICJyZXNvdXJjZSBpYmFzZV90cmFucyhbaW50IHRyYW5zX2FyZ3MgWywgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyIFssIC4uLiBdLCBpbnQgdHJhbnNfYXJncyBbLCByZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIgWywgLi4uIF1dIFssIC4uLl1dXSkiLAogICAgICAgICJTdGFydCBhIHRyYW5zYWN0aW9uIG92ZXIgb25lIG9yIHNldmVyYWwgZGF0YWJhc2VzIgogICAgXSwKICAgICJpYmFzZV93YWl0X2V2ZW50IjogWwogICAgICAgICJzdHJpbmcgaWJhc2Vfd2FpdF9ldmVudChbcmVzb3VyY2UgbGlua19pZGVudGlmaWVyLF0gc3RyaW5nIGV2ZW50IFssIHN0cmluZyBldmVudCBbLCAuLi5dXSkiLAogICAgICAgICJXYWl0cyBmb3IgYW55IG9uZSBvZiB0aGUgcGFzc2VkIEludGVyYmFzZSBldmVudHMgdG8gYmUgcG9zdGVkIGJ5IHRoZSBkYXRhYmFzZSwgYW5kIHJldHVybnMgaXRzIG5hbWUiCiAgICBdLAogICAgImljb252IjogWwogICAgICAgICJzdHJpbmcgaWNvbnYoc3RyaW5nIGluX2NoYXJzZXQsIHN0cmluZyBvdXRfY2hhcnNldCwgc3RyaW5nIHN0cikiLAogICAgICAgICJSZXR1cm5zIHN0ciBjb252ZXJ0ZWQgdG8gdGhlIG91dF9jaGFyc2V0IGNoYXJhY3RlciBzZXQiCiAgICBdLAogICAgImljb252X2dldF9lbmNvZGluZyI6IFsKICAgICAgICAibWl4ZWQgaWNvbnZfZ2V0X2VuY29kaW5nKFtzdHJpbmcgdHlwZV0pIiwKICAgICAgICAiR2V0IGludGVybmFsIGVuY29kaW5nIGFuZCBvdXRwdXQgZW5jb2RpbmcgZm9yIG9iX2ljb252X2hhbmRsZXIoKSIKICAgIF0sCiAgICAiaWNvbnZfbWltZV9kZWNvZGUiOiBbCiAgICAgICAgInN0cmluZyBpY29udl9taW1lX2RlY29kZShzdHJpbmcgZW5jb2RlZF9zdHJpbmcgWywgaW50IG1vZGUsIHN0cmluZyBjaGFyc2V0XSkiLAogICAgICAgICJEZWNvZGVzIGEgbWltZSBoZWFkZXIgZmllbGQiCiAgICBdLAogICAgImljb252X21pbWVfZGVjb2RlX2hlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IGljb252X21pbWVfZGVjb2RlX2hlYWRlcnMoc3RyaW5nIGhlYWRlcnMgWywgaW50IG1vZGUsIHN0cmluZyBjaGFyc2V0XSkiLAogICAgICAgICJEZWNvZGVzIG11bHRpcGxlIG1pbWUgaGVhZGVyIGZpZWxkcyIKICAgIF0sCiAgICAiaWNvbnZfbWltZV9lbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyBpY29udl9taW1lX2VuY29kZShzdHJpbmcgZmllbGRfbmFtZSwgc3RyaW5nIGZpZWxkX3ZhbHVlIFssIGFycmF5IHByZWZlcmVuY2VdKSIsCiAgICAgICAgIkNvbXBvc2VzIGEgbWltZSBoZWFkZXIgZmllbGQgd2l0aCBmaWVsZF9uYW1lIGFuZCBmaWVsZF92YWx1ZSBpbiBhIHNwZWNpZmllZCBzY2hlbWUiCiAgICBdLAogICAgImljb252X3NldF9lbmNvZGluZyI6IFsKICAgICAgICAiYm9vbCBpY29udl9zZXRfZW5jb2Rpbmcoc3RyaW5nIHR5cGUsIHN0cmluZyBjaGFyc2V0KSIsCiAgICAgICAgIlNldHMgaW50ZXJuYWwgZW5jb2RpbmcgYW5kIG91dHB1dCBlbmNvZGluZyBmb3Igb2JfaWNvbnZfaGFuZGxlcigpIgogICAgXSwKICAgICJpY29udl9zdHJsZW4iOiBbCiAgICAgICAgImludCBpY29udl9zdHJsZW4oc3RyaW5nIHN0ciBbLCBzdHJpbmcgY2hhcnNldF0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgY2hhcmFjdGVyIGNvdW50IG9mIHN0ciIKICAgIF0sCiAgICAiaWNvbnZfc3RycG9zIjogWwogICAgICAgICJpbnQgaWNvbnZfc3RycG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0IFssIHN0cmluZyBjaGFyc2V0XV0pIiwKICAgICAgICAiRmluZHMgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBuZWVkbGUgd2l0aGluIHBhcnQgb2YgaGF5c3RhY2sgYmVnaW5uaW5nIHdpdGggb2Zmc2V0IgogICAgXSwKICAgICJpY29udl9zdHJycG9zIjogWwogICAgICAgICJpbnQgaWNvbnZfc3RycnBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgc3RyaW5nIGNoYXJzZXRdKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBuZWVkbGUgd2l0aGluIHBhcnQgb2YgaGF5c3RhY2sgYmVnaW5uaW5nIHdpdGggb2Zmc2V0IgogICAgXSwKICAgICJpY29udl9zdWJzdHIiOiBbCiAgICAgICAgInN0cmluZyBpY29udl9zdWJzdHIoc3RyaW5nIHN0ciwgaW50IG9mZnNldCwgW2ludCBsZW5ndGgsIHN0cmluZyBjaGFyc2V0XSkiLAogICAgICAgICJSZXR1cm5zIHNwZWNpZmllZCBwYXJ0IG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJpZGF0ZSI6IFsKICAgICAgICAiaW50IGlkYXRlKHN0cmluZyBmb3JtYXQgWywgaW50IHRpbWVzdGFtcF0pIiwKICAgICAgICAiRm9ybWF0IGEgbG9jYWwgdGltZS9kYXRlIGFzIGludGVnZXIiCiAgICBdLAogICAgImlkbl90b19hc2NpaSI6IFsKICAgICAgICAiaW50IGlkbl90b19hc2NpaShzdHJpbmcgZG9tYWluWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkNvbnZlcnRzIGFuIFVuaWNvZGUgZG9tYWluIHRvIEFTQ0lJIHJlcHJlc2VudGF0aW9uLCBhcyBkZWZpbmVkIGluIHRoZSBJRE5BIFJGQyIKICAgIF0sCiAgICAiaWRuX3RvX3V0ZjgiOiBbCiAgICAgICAgImludCBpZG5fdG9fdXRmOChzdHJpbmcgZG9tYWluWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkNvbnZlcnRzIGFuIEFTQ0lJIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkb21haW4gdG8gVW5pY29kZSAoVVRGLTgpLCBhcyBkZWZpbmVkIGluIHRoZSBJRE5BIFJGQyIKICAgIF0sCiAgICAiaWdub3JlX3VzZXJfYWJvcnQiOiBbCiAgICAgICAgImludCBpZ25vcmVfdXNlcl9hYm9ydChbc3RyaW5nIHZhbHVlXSkiLAogICAgICAgICJTZXQgd2hldGhlciB3ZSB3YW50IHRvIGlnbm9yZSBhIHVzZXIgYWJvcnQgZXZlbnQgb3Igbm90IgogICAgXSwKICAgICJpbWFnZTJ3Ym1wIjogWwogICAgICAgICJib29sIGltYWdlMndibXAocmVzb3VyY2UgaW0gWywgc3RyaW5nIGZpbGVuYW1lIFssIGludCB0aHJlc2hvbGRdXSkiLAogICAgICAgICJPdXRwdXQgV0JNUCBpbWFnZSB0byBicm93c2VyIG9yIGZpbGUiCiAgICBdLAogICAgImltYWdlX3R5cGVfdG9fZXh0ZW5zaW9uIjogWwogICAgICAgICJzdHJpbmcgaW1hZ2VfdHlwZV90b19leHRlbnNpb24oaW50IGltYWdldHlwZSBbLCBib29sIGluY2x1ZGVfZG90XSkiLAogICAgICAgICJHZXQgZmlsZSBleHRlbnNpb24gZm9yIGltYWdlLXR5cGUgcmV0dXJuZWQgYnkgZ2V0aW1hZ2VzaXplLCBleGlmX3JlYWRfZGF0YSwgZXhpZl90aHVtYm5haWwsIGV4aWZfaW1hZ2V0eXBlIgogICAgXSwKICAgICJpbWFnZV90eXBlX3RvX21pbWVfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIGltYWdlX3R5cGVfdG9fbWltZV90eXBlKGludCBpbWFnZXR5cGUpIiwKICAgICAgICAiR2V0IE1pbWUtVHlwZSBmb3IgaW1hZ2UtdHlwZSByZXR1cm5lZCBieSBnZXRpbWFnZXNpemUsIGV4aWZfcmVhZF9kYXRhLCBleGlmX3RodW1ibmFpbCwgZXhpZl9pbWFnZXR5cGUiCiAgICBdLAogICAgImltYWdlYWxwaGFibGVuZGluZyI6IFsKICAgICAgICAiYm9vbCBpbWFnZWFscGhhYmxlbmRpbmcocmVzb3VyY2UgaW0sIGJvb2wgb24pIiwKICAgICAgICAiVHVybiBhbHBoYSBibGVuZGluZyBtb2RlIG9uIG9yIG9mZiBmb3IgdGhlIGdpdmVuIGltYWdlIgogICAgXSwKICAgICJpbWFnZWFudGlhbGlhcyI6IFsKICAgICAgICAiYm9vbCBpbWFnZWFudGlhbGlhcyhyZXNvdXJjZSBpbSwgYm9vbCBvbikiLAogICAgICAgICJTaG91bGQgYW50aWFsaWFzZWQgZnVuY3Rpb25zIHVzZWQgb3Igbm90IgogICAgXSwKICAgICJpbWFnZWFyYyI6IFsKICAgICAgICAiYm9vbCBpbWFnZWFyYyhyZXNvdXJjZSBpbSwgaW50IGN4LCBpbnQgY3ksIGludCB3LCBpbnQgaCwgaW50IHMsIGludCBlLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBwYXJ0aWFsIGVsbGlwc2UiCiAgICBdLAogICAgImltYWdlY2hhciI6IFsKICAgICAgICAiYm9vbCBpbWFnZWNoYXIocmVzb3VyY2UgaW0sIGludCBmb250LCBpbnQgeCwgaW50IHksIHN0cmluZyBjLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBjaGFyYWN0ZXIiCiAgICBdLAogICAgImltYWdlY2hhcnVwIjogWwogICAgICAgICJib29sIGltYWdlY2hhcnVwKHJlc291cmNlIGltLCBpbnQgZm9udCwgaW50IHgsIGludCB5LCBzdHJpbmcgYywgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgY2hhcmFjdGVyIHJvdGF0ZWQgOTAgZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmFsbG9jYXRlIjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcmFsbG9jYXRlKHJlc291cmNlIGltLCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlKSIsCiAgICAgICAgIkFsbG9jYXRlIGEgY29sb3IgZm9yIGFuIGltYWdlIgogICAgXSwKICAgICJpbWFnZWNvbG9yYWxsb2NhdGVhbHBoYSI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JhbGxvY2F0ZWFscGhhKHJlc291cmNlIGltLCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpIiwKICAgICAgICAiQWxsb2NhdGUgYSBjb2xvciB3aXRoIGFuIGFscGhhIGxldmVsLiAgV29ya3MgZm9yIHRydWUgY29sb3IgYW5kIHBhbGV0dGUgYmFzZWQgaW1hZ2VzIgogICAgXSwKICAgICJpbWFnZWNvbG9yYXQiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9yYXQocmVzb3VyY2UgaW0sIGludCB4LCBpbnQgeSkiLAogICAgICAgICJHZXQgdGhlIGluZGV4IG9mIHRoZSBjb2xvciBvZiBhIHBpeGVsIgogICAgXSwKICAgICJpbWFnZWNvbG9yY2xvc2VzdCI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JjbG9zZXN0KHJlc291cmNlIGltLCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlKSIsCiAgICAgICAgIkdldCB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgY29sb3IgdG8gdGhlIHNwZWNpZmllZCBjb2xvciIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmNsb3Nlc3RhbHBoYSI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JjbG9zZXN0YWxwaGEocmVzb3VyY2UgaW0sIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkiLAogICAgICAgICJGaW5kIHRoZSBjbG9zZXN0IG1hdGNoaW5nIGNvbG91ciB3aXRoIGFscGhhIHRyYW5zcGFyZW5jeSIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmNsb3Nlc3Rod2IiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9yY2xvc2VzdGh3YihyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSkiLAogICAgICAgICJHZXQgdGhlIGluZGV4IG9mIHRoZSBjb2xvciB3aGljaCBoYXMgdGhlIGh1ZSwgd2hpdGUgYW5kIGJsYWNrbmVzcyBuZWFyZXN0IHRvIHRoZSBnaXZlbiBjb2xvciIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmRlYWxsb2NhdGUiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vjb2xvcmRlYWxsb2NhdGUocmVzb3VyY2UgaW0sIGludCBpbmRleCkiLAogICAgICAgICJEZS1hbGxvY2F0ZSBhIGNvbG9yIGZvciBhbiBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmV4YWN0IjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcmV4YWN0KHJlc291cmNlIGltLCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlKSIsCiAgICAgICAgIkdldCB0aGUgaW5kZXggb2YgdGhlIHNwZWNpZmllZCBjb2xvciIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmV4YWN0YWxwaGEiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9yZXhhY3RhbHBoYShyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKSIsCiAgICAgICAgIkZpbmQgZXhhY3QgbWF0Y2ggZm9yIGNvbG91ciB3aXRoIHRyYW5zcGFyZW5jeSIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcm1hdGNoIjogWwogICAgICAgICJib29sIGltYWdlY29sb3JtYXRjaChyZXNvdXJjZSBpbTEsIHJlc291cmNlIGltMikiLAogICAgICAgICJNYWtlcyB0aGUgY29sb3JzIG9mIHRoZSBwYWxldHRlIHZlcnNpb24gb2YgYW4gaW1hZ2UgbW9yZSBjbG9zZWx5IG1hdGNoIHRoZSB0cnVlIGNvbG9yIHZlcnNpb24iCiAgICBdLAogICAgImltYWdlY29sb3JyZXNvbHZlIjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcnJlc29sdmUocmVzb3VyY2UgaW0sIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUpIiwKICAgICAgICAiR2V0IHRoZSBpbmRleCBvZiB0aGUgc3BlY2lmaWVkIGNvbG9yIG9yIGl0cyBjbG9zZXN0IHBvc3NpYmxlIGFsdGVybmF0aXZlIgogICAgXSwKICAgICJpbWFnZWNvbG9ycmVzb2x2ZWFscGhhIjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcnJlc29sdmVhbHBoYShyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKSIsCiAgICAgICAgIlJlc29sdmUvQWxsb2NhdGUgYSBjb2xvdXIgd2l0aCBhbiBhbHBoYSBsZXZlbC4gIFdvcmtzIGZvciB0cnVlIGNvbG91ciBhbmQgcGFsZXR0ZSBiYXNlZCBpbWFnZXMiCiAgICBdLAogICAgImltYWdlY29sb3JzZXQiOiBbCiAgICAgICAgInZvaWQgaW1hZ2Vjb2xvcnNldChyZXNvdXJjZSBpbSwgaW50IGNvbCwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSkiLAogICAgICAgICJTZXQgdGhlIGNvbG9yIGZvciB0aGUgc3BlY2lmaWVkIHBhbGV0dGUgaW5kZXgiCiAgICBdLAogICAgImltYWdlY29sb3JzZm9yaW5kZXgiOiBbCiAgICAgICAgImFycmF5IGltYWdlY29sb3JzZm9yaW5kZXgocmVzb3VyY2UgaW0sIGludCBjb2wpIiwKICAgICAgICAiR2V0IHRoZSBjb2xvcnMgZm9yIGFuIGluZGV4IgogICAgXSwKICAgICJpbWFnZWNvbG9yc3RvdGFsIjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcnN0b3RhbChyZXNvdXJjZSBpbSkiLAogICAgICAgICJGaW5kIG91dCB0aGUgbnVtYmVyIG9mIGNvbG9ycyBpbiBhbiBpbWFnZSdzIHBhbGV0dGUiCiAgICBdLAogICAgImltYWdlY29sb3J0cmFuc3BhcmVudCI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3J0cmFuc3BhcmVudChyZXNvdXJjZSBpbSBbLCBpbnQgY29sXSkiLAogICAgICAgICJEZWZpbmUgYSBjb2xvciBhcyB0cmFuc3BhcmVudCIKICAgIF0sCiAgICAiaW1hZ2Vjb252b2x1dGlvbiI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2Vjb252b2x1dGlvbihyZXNvdXJjZSBzcmNfaW0sIGFycmF5IG1hdHJpeDN4MywgZG91YmxlIGRpdiwgZG91YmxlIG9mZnNldCkiLAogICAgICAgICJBcHBseSBhIDN4MyBjb252b2x1dGlvbiBtYXRyaXgsIHVzaW5nIGNvZWZmaWNpZW50IGRpdiBhbmQgb2Zmc2V0IgogICAgXSwKICAgICJpbWFnZWNvcHkiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vjb3B5KHJlc291cmNlIGRzdF9pbSwgcmVzb3VyY2Ugc3JjX2ltLCBpbnQgZHN0X3gsIGludCBkc3RfeSwgaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBzcmNfdywgaW50IHNyY19oKSIsCiAgICAgICAgIkNvcHkgcGFydCBvZiBhbiBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2Vjb3B5bWVyZ2UiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vjb3B5bWVyZ2UocmVzb3VyY2Ugc3JjX2ltLCByZXNvdXJjZSBkc3RfaW0sIGludCBkc3RfeCwgaW50IGRzdF95LCBpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IHNyY193LCBpbnQgc3JjX2gsIGludCBwY3QpIiwKICAgICAgICAiTWVyZ2Ugb25lIHBhcnQgb2YgYW4gaW1hZ2Ugd2l0aCBhbm90aGVyIgogICAgXSwKICAgICJpbWFnZWNvcHltZXJnZWdyYXkiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vjb3B5bWVyZ2VncmF5KHJlc291cmNlIHNyY19pbSwgcmVzb3VyY2UgZHN0X2ltLCBpbnQgZHN0X3gsIGludCBkc3RfeSwgaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBzcmNfdywgaW50IHNyY19oLCBpbnQgcGN0KSIsCiAgICAgICAgIk1lcmdlIG9uZSBwYXJ0IG9mIGFuIGltYWdlIHdpdGggYW5vdGhlciIKICAgIF0sCiAgICAiaW1hZ2Vjb3B5cmVzYW1wbGVkIjogWwogICAgICAgICJib29sIGltYWdlY29weXJlc2FtcGxlZChyZXNvdXJjZSBkc3RfaW0sIHJlc291cmNlIHNyY19pbSwgaW50IGRzdF94LCBpbnQgZHN0X3ksIGludCBzcmNfeCwgaW50IHNyY195LCBpbnQgZHN0X3csIGludCBkc3RfaCwgaW50IHNyY193LCBpbnQgc3JjX2gpIiwKICAgICAgICAiQ29weSBhbmQgcmVzaXplIHBhcnQgb2YgYW4gaW1hZ2UgdXNpbmcgcmVzYW1wbGluZyB0byBoZWxwIGVuc3VyZSBjbGFyaXR5IgogICAgXSwKICAgICJpbWFnZWNvcHlyZXNpemVkIjogWwogICAgICAgICJib29sIGltYWdlY29weXJlc2l6ZWQocmVzb3VyY2UgZHN0X2ltLCByZXNvdXJjZSBzcmNfaW0sIGludCBkc3RfeCwgaW50IGRzdF95LCBpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IGRzdF93LCBpbnQgZHN0X2gsIGludCBzcmNfdywgaW50IHNyY19oKSIsCiAgICAgICAgIkNvcHkgYW5kIHJlc2l6ZSBwYXJ0IG9mIGFuIGltYWdlIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZSI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VjcmVhdGUoaW50IHhfc2l6ZSwgaW50IHlfc2l6ZSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgaW1hZ2UiCiAgICBdLAogICAgImltYWdlY3JlYXRlZnJvbWdkIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb21nZChzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0QgZmlsZSBvciBVUkwiCiAgICBdLAogICAgImltYWdlY3JlYXRlZnJvbWdkMiI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VjcmVhdGVmcm9tZ2QyKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBHRDIgZmlsZSBvciBVUkwiCiAgICBdLAogICAgImltYWdlY3JlYXRlZnJvbWdkMnBhcnQiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbWdkMnBhcnQoc3RyaW5nIGZpbGVuYW1lLCBpbnQgc3JjWCwgaW50IHNyY1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBhIGdpdmVuIHBhcnQgb2YgR0QyIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21naWYiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbWdpZihzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0lGIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21qcGVnIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb21qcGVnKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBKUEVHIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21wbmciOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbXBuZyhzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gUE5HIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21zdHJpbmciOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbXN0cmluZyhzdHJpbmcgaW1hZ2UpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gdGhlIGltYWdlIHN0cmVhbSBpbiB0aGUgc3RyaW5nIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb213Ym1wIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb213Ym1wKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgaW1hZ2UgZnJvbSBXQk1QIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb214Ym0iOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbXhibShzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gWEJNIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb214cG0iOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbXhwbShzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gWFBNIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZXRydWVjb2xvciI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VjcmVhdGV0cnVlY29sb3IoaW50IHhfc2l6ZSwgaW50IHlfc2l6ZSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgdHJ1ZSBjb2xvciBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2VkYXNoZWRsaW5lIjogWwogICAgICAgICJib29sIGltYWdlZGFzaGVkbGluZShyZXNvdXJjZSBpbSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBkYXNoZWQgbGluZSIKICAgIF0sCiAgICAiaW1hZ2VkZXN0cm95IjogWwogICAgICAgICJib29sIGltYWdlZGVzdHJveShyZXNvdXJjZSBpbSkiLAogICAgICAgICJEZXN0cm95IGFuIGltYWdlIgogICAgXSwKICAgICJpbWFnZWVsbGlwc2UiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VlbGxpcHNlKHJlc291cmNlIGltLCBpbnQgY3gsIGludCBjeSwgaW50IHcsIGludCBoLCBpbnQgY29sb3IpIiwKICAgICAgICAiRHJhdyBhbiBlbGxpcHNlIgogICAgXSwKICAgICJpbWFnZWZpbGwiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VmaWxsKHJlc291cmNlIGltLCBpbnQgeCwgaW50IHksIGludCBjb2wpIiwKICAgICAgICAiRmxvb2QgZmlsbCIKICAgIF0sCiAgICAiaW1hZ2VmaWxsZWRhcmMiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VmaWxsZWRhcmMocmVzb3VyY2UgaW0sIGludCBjeCwgaW50IGN5LCBpbnQgdywgaW50IGgsIGludCBzLCBpbnQgZSwgaW50IGNvbCwgaW50IHN0eWxlKSIsCiAgICAgICAgIkRyYXcgYSBmaWxsZWQgcGFydGlhbCBlbGxpcHNlIgogICAgXSwKICAgICJpbWFnZWZpbGxlZGVsbGlwc2UiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VmaWxsZWRlbGxpcHNlKHJlc291cmNlIGltLCBpbnQgY3gsIGludCBjeSwgaW50IHcsIGludCBoLCBpbnQgY29sb3IpIiwKICAgICAgICAiRHJhdyBhbiBlbGxpcHNlIgogICAgXSwKICAgICJpbWFnZWZpbGxlZHBvbHlnb24iOiBbCiAgICAgICAgImJvb2wgaW1hZ2VmaWxsZWRwb2x5Z29uKHJlc291cmNlIGltLCBhcnJheSBwb2ludCwgaW50IG51bV9wb2ludHMsIGludCBjb2wpIiwKICAgICAgICAiRHJhdyBhIGZpbGxlZCBwb2x5Z29uIgogICAgXSwKICAgICJpbWFnZWZpbGxlZHJlY3RhbmdsZSI6IFsKICAgICAgICAiYm9vbCBpbWFnZWZpbGxlZHJlY3RhbmdsZShyZXNvdXJjZSBpbSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBmaWxsZWQgcmVjdGFuZ2xlIgogICAgXSwKICAgICJpbWFnZWZpbGx0b2JvcmRlciI6IFsKICAgICAgICAiYm9vbCBpbWFnZWZpbGx0b2JvcmRlcihyZXNvdXJjZSBpbSwgaW50IHgsIGludCB5LCBpbnQgYm9yZGVyLCBpbnQgY29sKSIsCiAgICAgICAgIkZsb29kIGZpbGwgdG8gc3BlY2lmaWMgY29sb3IiCiAgICBdLAogICAgImltYWdlZmlsdGVyIjogWwogICAgICAgICJib29sIGltYWdlZmlsdGVyKHJlc291cmNlIHNyY19pbSwgaW50IGZpbHRlcnR5cGUsIFthcmdzXSApIiwKICAgICAgICAiQXBwbGllcyBGaWx0ZXIgYW4gaW1hZ2UgdXNpbmcgYSBjdXN0b20gYW5nbGUiCiAgICBdLAogICAgImltYWdlZm9udGhlaWdodCI6IFsKICAgICAgICAiaW50IGltYWdlZm9udGhlaWdodChpbnQgZm9udCkiLAogICAgICAgICJHZXQgZm9udCBoZWlnaHQiCiAgICBdLAogICAgImltYWdlZm9udHdpZHRoIjogWwogICAgICAgICJpbnQgaW1hZ2Vmb250d2lkdGgoaW50IGZvbnQpIiwKICAgICAgICAiR2V0IGZvbnQgd2lkdGgiCiAgICBdLAogICAgImltYWdlZnRiYm94IjogWwogICAgICAgICJhcnJheSBpbWFnZWZ0YmJveChmbG9hdCBzaXplLCBmbG9hdCBhbmdsZSwgc3RyaW5nIGZvbnRfZmlsZSwgc3RyaW5nIHRleHQgWywgYXJyYXkgZXh0cmFpbmZvXSkiLAogICAgICAgICJHaXZlIHRoZSBib3VuZGluZyBib3ggb2YgYSB0ZXh0IHVzaW5nIGZvbnRzIHZpYSBmcmVldHlwZTIiCiAgICBdLAogICAgImltYWdlZnR0ZXh0IjogWwogICAgICAgICJhcnJheSBpbWFnZWZ0dGV4dChyZXNvdXJjZSBpbSwgZmxvYXQgc2l6ZSwgZmxvYXQgYW5nbGUsIGludCB4LCBpbnQgeSwgaW50IGNvbCwgc3RyaW5nIGZvbnRfZmlsZSwgc3RyaW5nIHRleHQgWywgYXJyYXkgZXh0cmFpbmZvXSkiLAogICAgICAgICJXcml0ZSB0ZXh0IHRvIHRoZSBpbWFnZSB1c2luZyBmb250cyB2aWEgZnJlZXR5cGUyIgogICAgXSwKICAgICJpbWFnZWdhbW1hY29ycmVjdCI6IFsKICAgICAgICAiYm9vbCBpbWFnZWdhbW1hY29ycmVjdChyZXNvdXJjZSBpbSwgZmxvYXQgaW5wdXRnYW1tYSwgZmxvYXQgb3V0cHV0Z2FtbWEpIiwKICAgICAgICAiQXBwbHkgYSBnYW1tYSBjb3JyZWN0aW9uIHRvIGEgR0QgaW1hZ2UiCiAgICBdLAogICAgImltYWdlZ2QiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VnZChyZXNvdXJjZSBpbSBbLCBzdHJpbmcgZmlsZW5hbWVdKSIsCiAgICAgICAgIk91dHB1dCBHRCBpbWFnZSB0byBicm93c2VyIG9yIGZpbGUiCiAgICBdLAogICAgImltYWdlZ2QyIjogWwogICAgICAgICJib29sIGltYWdlZ2QyKHJlc291cmNlIGltIFssIHN0cmluZyBmaWxlbmFtZSwgWywgaW50IGNodW5rX3NpemUsIFssIGludCB0eXBlXV1dKSIsCiAgICAgICAgIk91dHB1dCBHRDIgaW1hZ2UgdG8gYnJvd3NlciBvciBmaWxlIgogICAgXSwKICAgICJpbWFnZWdpZiI6IFsKICAgICAgICAiYm9vbCBpbWFnZWdpZihyZXNvdXJjZSBpbSBbLCBzdHJpbmcgZmlsZW5hbWVdKSIsCiAgICAgICAgIk91dHB1dCBHSUYgaW1hZ2UgdG8gYnJvd3NlciBvciBmaWxlIgogICAgXSwKICAgICJpbWFnZWdyYWJzY3JlZW4iOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlZ3JhYnNjcmVlbigpIiwKICAgICAgICAiR3JhYiBhIHNjcmVlbnNob3QiCiAgICBdLAogICAgImltYWdlZ3JhYndpbmRvdyI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VncmFid2luZG93KGludCB3aW5kb3dfaGFuZGxlIFssIGludCBjbGllbnRfYXJlYV0pIiwKICAgICAgICAiR3JhYiBhIHdpbmRvdyBvciBpdHMgY2xpZW50IGFyZWEgdXNpbmcgYSB3aW5kb3dzIGhhbmRsZSAoSFdORCBwcm9wZXJ0eSBpbiBDT00gaW5zdGFuY2UpIgogICAgXSwKICAgICJpbWFnZWludGVybGFjZSI6IFsKICAgICAgICAiaW50IGltYWdlaW50ZXJsYWNlKHJlc291cmNlIGltIFssIGludCBpbnRlcmxhY2VdKSIsCiAgICAgICAgIkVuYWJsZSBvciBkaXNhYmxlIGludGVybGFjZSIKICAgIF0sCiAgICAiaW1hZ2Vpc3RydWVjb2xvciI6IFsKICAgICAgICAiYm9vbCBpbWFnZWlzdHJ1ZWNvbG9yKHJlc291cmNlIGltKSIsCiAgICAgICAgInJldHVybiB0cnVlIGlmIHRoZSBpbWFnZSB1c2VzIHRydWVjb2xvciIKICAgIF0sCiAgICAiaW1hZ2VqcGVnIjogWwogICAgICAgICJib29sIGltYWdlanBlZyhyZXNvdXJjZSBpbSBbLCBzdHJpbmcgZmlsZW5hbWUgWywgaW50IHF1YWxpdHldXSkiLAogICAgICAgICJPdXRwdXQgSlBFRyBpbWFnZSB0byBicm93c2VyIG9yIGZpbGUiCiAgICBdLAogICAgImltYWdlbGF5ZXJlZmZlY3QiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VsYXllcmVmZmVjdChyZXNvdXJjZSBpbSwgaW50IGVmZmVjdCkiLAogICAgICAgICJTZXQgdGhlIGFscGhhIGJsZW5kaW5nIGZsYWcgdG8gdXNlIHRoZSBidW5kbGVkIGxpYmdkIGxheWVyaW5nIGVmZmVjdHMiCiAgICBdLAogICAgImltYWdlbGluZSI6IFsKICAgICAgICAiYm9vbCBpbWFnZWxpbmUocmVzb3VyY2UgaW0sIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgbGluZSIKICAgIF0sCiAgICAiaW1hZ2Vsb2FkZm9udCI6IFsKICAgICAgICAiaW50IGltYWdlbG9hZGZvbnQoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkxvYWQgYSBuZXcgZm9udCIKICAgIF0sCiAgICAiaW1hZ2VwYWxldHRlY29weSI6IFsKICAgICAgICAidm9pZCBpbWFnZXBhbGV0dGVjb3B5KHJlc291cmNlIGRzdCwgcmVzb3VyY2Ugc3JjKSIsCiAgICAgICAgIkNvcHkgdGhlIHBhbGV0dGUgZnJvbSB0aGUgc3JjIGltYWdlIG9udG8gdGhlIGRzdCBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2VwbmciOiBbCiAgICAgICAgImJvb2wgaW1hZ2VwbmcocmVzb3VyY2UgaW0gWywgc3RyaW5nIGZpbGVuYW1lXSkiLAogICAgICAgICJPdXRwdXQgUE5HIGltYWdlIHRvIGJyb3dzZXIgb3IgZmlsZSIKICAgIF0sCiAgICAiaW1hZ2Vwb2x5Z29uIjogWwogICAgICAgICJib29sIGltYWdlcG9seWdvbihyZXNvdXJjZSBpbSwgYXJyYXkgcG9pbnQsIGludCBudW1fcG9pbnRzLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBwb2x5Z29uIgogICAgXSwKICAgICJpbWFnZXBzYmJveCI6IFsKICAgICAgICAiYXJyYXkgaW1hZ2Vwc2Jib3goc3RyaW5nIHRleHQsIHJlc291cmNlIGZvbnQsIGludCBzaXplIFssIGludCBzcGFjZSwgaW50IHRpZ2h0bmVzcywgZmxvYXQgYW5nbGVdKSIsCiAgICAgICAgIlJldHVybiB0aGUgYm91bmRpbmcgYm94IG5lZWRlZCBieSBhIHN0cmluZyBpZiByYXN0ZXJpemVkIgogICAgXSwKICAgICJpbWFnZXBzY29weWZvbnQiOiBbCiAgICAgICAgImludCBpbWFnZXBzY29weWZvbnQoaW50IGZvbnRfaW5kZXgpIiwKICAgICAgICAiTWFrZSBhIGNvcHkgb2YgYSBmb250IGZvciBwdXJwb3NlcyBsaWtlIGV4dGVuZGluZyBvciByZWVuY29uZGluZyIKICAgIF0sCiAgICAiaW1hZ2Vwc2VuY29kZWZvbnQiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vwc2VuY29kZWZvbnQocmVzb3VyY2UgZm9udF9pbmRleCwgc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlRvIGNoYW5nZSBhIGZvbnRzIGNoYXJhY3RlciBlbmNvZGluZyB2ZWN0b3IiCiAgICBdLAogICAgImltYWdlcHNleHRlbmRmb250IjogWwogICAgICAgICJib29sIGltYWdlcHNleHRlbmRmb250KHJlc291cmNlIGZvbnRfaW5kZXgsIGZsb2F0IGV4dGVuZCkiLAogICAgICAgICJFeHRlbmQgb3Igb3IgY29uZGVuc2UgKGlmIGV4dGVuZCA8IDEpIGEgZm9udCIKICAgIF0sCiAgICAiaW1hZ2Vwc2ZyZWVmb250IjogWwogICAgICAgICJib29sIGltYWdlcHNmcmVlZm9udChyZXNvdXJjZSBmb250X2luZGV4KSIsCiAgICAgICAgIkZyZWUgbWVtb3J5IHVzZWQgYnkgYSBmb250IgogICAgXSwKICAgICJpbWFnZXBzbG9hZGZvbnQiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlcHNsb2FkZm9udChzdHJpbmcgcGF0aG5hbWUpIiwKICAgICAgICAiTG9hZCBhIG5ldyBmb250IGZyb20gc3BlY2lmaWVkIGZpbGUiCiAgICBdLAogICAgImltYWdlcHNzbGFudGZvbnQiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vwc3NsYW50Zm9udChyZXNvdXJjZSBmb250X2luZGV4LCBmbG9hdCBzbGFudCkiLAogICAgICAgICJTbGFudCBhIGZvbnQiCiAgICBdLAogICAgImltYWdlcHN0ZXh0IjogWwogICAgICAgICJhcnJheSBpbWFnZXBzdGV4dChyZXNvdXJjZSBpbWFnZSwgc3RyaW5nIHRleHQsIHJlc291cmNlIGZvbnQsIGludCBzaXplLCBpbnQgZm9yZWdyb3VuZCwgaW50IGJhY2tncm91bmQsIGludCB4Y29vcmQsIGludCB5Y29vcmQgWywgaW50IHNwYWNlIFssIGludCB0aWdodG5lc3MgWywgZmxvYXQgYW5nbGUgWywgaW50IGFudGlhbGlhc10pIiwKICAgICAgICAiUmFzdGVyaXplIGEgc3RyaW5nIG92ZXIgYW4gaW1hZ2UiCiAgICBdLAogICAgImltYWdlcmVjdGFuZ2xlIjogWwogICAgICAgICJib29sIGltYWdlcmVjdGFuZ2xlKHJlc291cmNlIGltLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIGludCBjb2wpIiwKICAgICAgICAiRHJhdyBhIHJlY3RhbmdsZSIKICAgIF0sCiAgICAiaW1hZ2Vyb3RhdGUiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlcm90YXRlKHJlc291cmNlIHNyY19pbSwgZmxvYXQgYW5nbGUsIGludCBiZ2Rjb2xvciBbLCBpbnQgaWdub3JldHJhbnNwYXJlbnRdKSIsCiAgICAgICAgIlJvdGF0ZSBhbiBpbWFnZSB1c2luZyBhIGN1c3RvbSBhbmdsZSIKICAgIF0sCiAgICAiaW1hZ2VzYXZlYWxwaGEiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VzYXZlYWxwaGEocmVzb3VyY2UgaW0sIGJvb2wgb24pIiwKICAgICAgICAiSW5jbHVkZSBhbHBoYSBjaGFubmVsIHRvIGEgc2F2ZWQgaW1hZ2UiCiAgICBdLAogICAgImltYWdlc2V0YnJ1c2giOiBbCiAgICAgICAgImJvb2wgaW1hZ2VzZXRicnVzaChyZXNvdXJjZSBpbWFnZSwgcmVzb3VyY2UgYnJ1c2gpIiwKICAgICAgICAiU2V0IHRoZSBicnVzaCBpbWFnZSB0byAkYnJ1c2ggd2hlbiBmaWxsaW5nICRpbWFnZSB3aXRoIHRoZSBcIklNR19DT0xPUl9CUlVTSEVEXCIgY29sb3IiCiAgICBdLAogICAgImltYWdlc2V0cGl4ZWwiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VzZXRwaXhlbChyZXNvdXJjZSBpbSwgaW50IHgsIGludCB5LCBpbnQgY29sKSIsCiAgICAgICAgIlNldCBhIHNpbmdsZSBwaXhlbCIKICAgIF0sCiAgICAiaW1hZ2VzZXRzdHlsZSI6IFsKICAgICAgICAiYm9vbCBpbWFnZXNldHN0eWxlKHJlc291cmNlIGltLCBhcnJheSBzdHlsZXMpIiwKICAgICAgICAiU2V0IHRoZSBsaW5lIGRyYXdpbmcgc3R5bGVzIGZvciB1c2Ugd2l0aCBpbWFnZWxpbmUgYW5kIElNR19DT0xPUl9TVFlMRUQuIgogICAgXSwKICAgICJpbWFnZXNldHRoaWNrbmVzcyI6IFsKICAgICAgICAiYm9vbCBpbWFnZXNldHRoaWNrbmVzcyhyZXNvdXJjZSBpbSwgaW50IHRoaWNrbmVzcykiLAogICAgICAgICJTZXQgbGluZSB0aGlja25lc3MgZm9yIGRyYXdpbmcgbGluZXMsIGVsbGlwc2VzLCByZWN0YW5nbGVzLCBwb2x5Z29ucyBldGMuIgogICAgXSwKICAgICJpbWFnZXNldHRpbGUiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VzZXR0aWxlKHJlc291cmNlIGltYWdlLCByZXNvdXJjZSB0aWxlKSIsCiAgICAgICAgIlNldCB0aGUgdGlsZSBpbWFnZSB0byAkdGlsZSB3aGVuIGZpbGxpbmcgJGltYWdlIHdpdGggdGhlIFwiSU1HX0NPTE9SX1RJTEVEXCIgY29sb3IiCiAgICBdLAogICAgImltYWdlc3RyaW5nIjogWwogICAgICAgICJib29sIGltYWdlc3RyaW5nKHJlc291cmNlIGltLCBpbnQgZm9udCwgaW50IHgsIGludCB5LCBzdHJpbmcgc3RyLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBzdHJpbmcgaG9yaXpvbnRhbGx5IgogICAgXSwKICAgICJpbWFnZXN0cmluZ3VwIjogWwogICAgICAgICJib29sIGltYWdlc3RyaW5ndXAocmVzb3VyY2UgaW0sIGludCBmb250LCBpbnQgeCwgaW50IHksIHN0cmluZyBzdHIsIGludCBjb2wpIiwKICAgICAgICAiRHJhdyBhIHN0cmluZyB2ZXJ0aWNhbGx5IC0gcm90YXRlZCA5MCBkZWdyZWVzIGNvdW50ZXItY2xvY2t3aXNlIgogICAgXSwKICAgICJpbWFnZXN4IjogWwogICAgICAgICJpbnQgaW1hZ2VzeChyZXNvdXJjZSBpbSkiLAogICAgICAgICJHZXQgaW1hZ2Ugd2lkdGgiCiAgICBdLAogICAgImltYWdlc3kiOiBbCiAgICAgICAgImludCBpbWFnZXN5KHJlc291cmNlIGltKSIsCiAgICAgICAgIkdldCBpbWFnZSBoZWlnaHQiCiAgICBdLAogICAgImltYWdldHJ1ZWNvbG9ydG9wYWxldHRlIjogWwogICAgICAgICJ2b2lkIGltYWdldHJ1ZWNvbG9ydG9wYWxldHRlKHJlc291cmNlIGltLCBib29sIGRpdGhlckZsYWcsIGludCBjb2xvcnNXYW50ZWQpIiwKICAgICAgICAiQ29udmVydCBhIHRydWUgY29sb3VyIGltYWdlIHRvIGEgcGFsZXR0ZSBiYXNlZCBpbWFnZSB3aXRoIGEgbnVtYmVyIG9mIGNvbG91cnMsIG9wdGlvbmFsbHkgdXNpbmcgZGl0aGVyaW5nLiIKICAgIF0sCiAgICAiaW1hZ2V0dGZiYm94IjogWwogICAgICAgICJhcnJheSBpbWFnZXR0ZmJib3goZmxvYXQgc2l6ZSwgZmxvYXQgYW5nbGUsIHN0cmluZyBmb250X2ZpbGUsIHN0cmluZyB0ZXh0KSIsCiAgICAgICAgIkdpdmUgdGhlIGJvdW5kaW5nIGJveCBvZiBhIHRleHQgdXNpbmcgVHJ1ZVR5cGUgZm9udHMiCiAgICBdLAogICAgImltYWdldHRmdGV4dCI6IFsKICAgICAgICAiYXJyYXkgaW1hZ2V0dGZ0ZXh0KHJlc291cmNlIGltLCBmbG9hdCBzaXplLCBmbG9hdCBhbmdsZSwgaW50IHgsIGludCB5LCBpbnQgY29sLCBzdHJpbmcgZm9udF9maWxlLCBzdHJpbmcgdGV4dCkiLAogICAgICAgICJXcml0ZSB0ZXh0IHRvIHRoZSBpbWFnZSB1c2luZyBhIFRydWVUeXBlIGZvbnQiCiAgICBdLAogICAgImltYWdldHlwZXMiOiBbCiAgICAgICAgImludCBpbWFnZXR5cGVzKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSB0eXBlcyBvZiBpbWFnZXMgc3VwcG9ydGVkIGluIGEgYml0ZmllbGQgLSAxPUdJRiwgMj1KUEVHLCA0PVBORywgOD1XQk1QLCAxNj1YUE0iCiAgICBdLAogICAgImltYWdld2JtcCI6IFsKICAgICAgICAiYm9vbCBpbWFnZXdibXAocmVzb3VyY2UgaW0gWywgc3RyaW5nIGZpbGVuYW1lLCBbLCBpbnQgZm9yZWdyb3VuZF1dKSIsCiAgICAgICAgIk91dHB1dCBXQk1QIGltYWdlIHRvIGJyb3dzZXIgb3IgZmlsZSIKICAgIF0sCiAgICAiaW1hZ2V4Ym0iOiBbCiAgICAgICAgImludCBpbWFnZXhibShpbnQgaW0sIHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgZm9yZWdyb3VuZF0pIiwKICAgICAgICAiT3V0cHV0IFhCTSBpbWFnZSB0byBicm93c2VyIG9yIGZpbGUiCiAgICBdLAogICAgImltYXBfOGJpdCI6IFsKICAgICAgICAic3RyaW5nIGltYXBfOGJpdChzdHJpbmcgdGV4dCkiLAogICAgICAgICJDb252ZXJ0IGFuIDgtYml0IHN0cmluZyB0byBhIHF1b3RlZC1wcmludGFibGUgc3RyaW5nIgogICAgXSwKICAgICJpbWFwX2FsZXJ0cyI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9hbGVydHModm9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBJTUFQIGFsZXJ0cyB0aGF0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgc2luY2UgdGhlIGxhc3QgcGFnZSBsb2FkIG9yIHNpbmNlIHRoZSBsYXN0IGltYXBfYWxlcnRzKCkgY2FsbCwgd2hpY2hldmVyIGNhbWUgbGFzdC4gVGhlIGFsZXJ0IHN0YWNrIGlzIGNsZWFyZWQgYWZ0ZXIgaW1hcF9hbGVydHMoKSBpcyBjYWxsZWQuIgogICAgXSwKICAgICJpbWFwX2FwcGVuZCI6IFsKICAgICAgICAiYm9vbCBpbWFwX2FwcGVuZChyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBmb2xkZXIsIHN0cmluZyBtZXNzYWdlIFssIHN0cmluZyBvcHRpb25zIFssIHN0cmluZyBpbnRlcm5hbF9kYXRlXV0pIiwKICAgICAgICAiQXBwZW5kIGEgbmV3IG1lc3NhZ2UgdG8gYSBzcGVjaWZpZWQgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9iYXNlNjQiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX2Jhc2U2NChzdHJpbmcgdGV4dCkiLAogICAgICAgICJEZWNvZGUgQkFTRTY0IGVuY29kZWQgdGV4dCIKICAgIF0sCiAgICAiaW1hcF9iaW5hcnkiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX2JpbmFyeShzdHJpbmcgdGV4dCkiLAogICAgICAgICJDb252ZXJ0IGFuIDhiaXQgc3RyaW5nIHRvIGEgYmFzZTY0IHN0cmluZyIKICAgIF0sCiAgICAiaW1hcF9ib2R5IjogWwogICAgICAgICJzdHJpbmcgaW1hcF9ib2R5KHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubyBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiUmVhZCB0aGUgbWVzc2FnZSBib2R5IgogICAgXSwKICAgICJpbWFwX2JvZHlzdHJ1Y3QiOiBbCiAgICAgICAgIm9iamVjdCBpbWFwX2JvZHlzdHJ1Y3QocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgbXNnX25vLCBzdHJpbmcgc2VjdGlvbikiLAogICAgICAgICJSZWFkIHRoZSBzdHJ1Y3R1cmUgb2YgYSBzcGVjaWZpZWQgYm9keSBzZWN0aW9uIG9mIGEgc3BlY2lmaWMgbWVzc2FnZSIKICAgIF0sCiAgICAiaW1hcF9jaGVjayI6IFsKICAgICAgICAib2JqZWN0IGltYXBfY2hlY2socmVzb3VyY2Ugc3RyZWFtX2lkKSIsCiAgICAgICAgIkdldCBtYWlsYm94IHByb3BlcnRpZXMiCiAgICBdLAogICAgImltYXBfY2xlYXJmbGFnX2Z1bGwiOiBbCiAgICAgICAgImJvb2wgaW1hcF9jbGVhcmZsYWdfZnVsbChyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBzZXF1ZW5jZSwgc3RyaW5nIGZsYWcgWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkNsZWFycyBmbGFncyBvbiBtZXNzYWdlcyIKICAgIF0sCiAgICAiaW1hcF9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBpbWFwX2Nsb3NlKHJlc291cmNlIHN0cmVhbV9pZCBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiQ2xvc2UgYW4gSU1BUCBzdHJlYW0iCiAgICBdLAogICAgImltYXBfY3JlYXRlbWFpbGJveCI6IFsKICAgICAgICAiYm9vbCBpbWFwX2NyZWF0ZW1haWxib3gocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9kZWxldGUiOiBbCiAgICAgICAgImJvb2wgaW1hcF9kZWxldGUocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgbXNnX25vIFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJNYXJrIGEgbWVzc2FnZSBmb3IgZGVsZXRpb24iCiAgICBdLAogICAgImltYXBfZGVsZXRlbWFpbGJveCI6IFsKICAgICAgICAiYm9vbCBpbWFwX2RlbGV0ZW1haWxib3gocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCkiLAogICAgICAgICJEZWxldGUgYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX2Vycm9ycyI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9lcnJvcnModm9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBJTUFQIGVycm9ycyBnZW5lcmF0ZWQgc2luY2UgdGhlIGxhc3QgcGFnZSBsb2FkLCBvciBzaW5jZSB0aGUgbGFzdCBpbWFwX2Vycm9ycygpIGNhbGwsIHdoaWNoZXZlciBjYW1lIGxhc3QuIFRoZSBlcnJvciBzdGFjayBpcyBjbGVhcmVkIGFmdGVyIGltYXBfZXJyb3JzKCkgaXMgY2FsbGVkLiIKICAgIF0sCiAgICAiaW1hcF9leHB1bmdlIjogWwogICAgICAgICJib29sIGltYXBfZXhwdW5nZShyZXNvdXJjZSBzdHJlYW1faWQpIiwKICAgICAgICAiUGVybWFuZW50bHkgZGVsZXRlIGFsbCBtZXNzYWdlcyBtYXJrZWQgZm9yIGRlbGV0aW9uIgogICAgXSwKICAgICJpbWFwX2ZldGNoX292ZXJ2aWV3IjogWwogICAgICAgICJhcnJheSBpbWFwX2ZldGNoX292ZXJ2aWV3KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHNlcXVlbmNlIFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJSZWFkIGFuIG92ZXJ2aWV3IG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgaGVhZGVycyBvZiB0aGUgZ2l2ZW4gbWVzc2FnZSBzZXF1ZW5jZSIKICAgIF0sCiAgICAiaW1hcF9mZXRjaGJvZHkiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX2ZldGNoYm9keShyZXNvdXJjZSBzdHJlYW1faWQsIGludCBtc2dfbm8sIHN0cmluZyBzZWN0aW9uIFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJHZXQgYSBzcGVjaWZpYyBib2R5IHNlY3Rpb24iCiAgICBdLAogICAgImltYXBfZmV0Y2hoZWFkZXIiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX2ZldGNoaGVhZGVyKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubyBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiR2V0IHRoZSBmdWxsIHVuZmlsdGVyZWQgaGVhZGVyIGZvciBhIG1lc3NhZ2UiCiAgICBdLAogICAgImltYXBfZmV0Y2hzdHJ1Y3R1cmUiOiBbCiAgICAgICAgIm9iamVjdCBpbWFwX2ZldGNoc3RydWN0dXJlKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubyBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiUmVhZCB0aGUgZnVsbCBzdHJ1Y3R1cmUgb2YgYSBtZXNzYWdlIgogICAgXSwKICAgICJpbWFwX2djIjogWwogICAgICAgICJib29sIGltYXBfZ2MocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgZmxhZ3MpIiwKICAgICAgICAiVGhpcyBmdW5jdGlvbiBnYXJiYWdlIGNvbGxlY3RzIChwdXJnZXMpIHRoZSBjYWNoZSBvZiBlbnRyaWVzIG9mIGEgc3BlY2lmaWMgdHlwZS4iCiAgICBdLAogICAgImltYXBfZ2V0X3F1b3RhIjogWwogICAgICAgICJhcnJheSBpbWFwX2dldF9xdW90YShyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBxcm9vdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBxdW90YSBzZXQgdG8gdGhlIG1haWxib3ggYWNjb3VudCBxcm9vdCIKICAgIF0sCiAgICAiaW1hcF9nZXRfcXVvdGFyb290IjogWwogICAgICAgICJhcnJheSBpbWFwX2dldF9xdW90YXJvb3QocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWJveCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBxdW90YSBzZXQgdG8gdGhlIG1haWxib3ggYWNjb3VudCBtYm94IgogICAgXSwKICAgICJpbWFwX2dldGFjbCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9nZXRhY2wocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCkiLAogICAgICAgICJHZXRzIHRoZSBBQ0wgZm9yIGEgZ2l2ZW4gbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9nZXRtYWlsYm94ZXMiOiBbCiAgICAgICAgImFycmF5IGltYXBfZ2V0bWFpbGJveGVzKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHJlZiwgc3RyaW5nIHBhdHRlcm4pIiwKICAgICAgICAiUmVhZHMgdGhlIGxpc3Qgb2YgbWFpbGJveGVzIGFuZCByZXR1cm5zIGEgZnVsbCBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgbmFtZSwgYXR0cmlidXRlcywgYW5kIGRlbGltaXRlciIKICAgIF0sCiAgICAiaW1hcF9nZXRzdWJzY3JpYmVkIjogWwogICAgICAgICJhcnJheSBpbWFwX2dldHN1YnNjcmliZWQocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgcmVmLCBzdHJpbmcgcGF0dGVybikiLAogICAgICAgICJSZXR1cm4gYSBsaXN0IG9mIHN1YnNjcmliZWQgbWFpbGJveGVzLCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgaW1hcF9nZXRtYWlsYm94ZXMoKSIKICAgIF0sCiAgICAiaW1hcF9oZWFkZXJpbmZvIjogWwogICAgICAgICJvYmplY3QgaW1hcF9oZWFkZXJpbmZvKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubyBbLCBpbnQgZnJvbV9sZW5ndGggWywgaW50IHN1YmplY3RfbGVuZ3RoIFssIHN0cmluZyBkZWZhdWx0X2hvc3RdXV0pIiwKICAgICAgICAiUmVhZCB0aGUgaGVhZGVycyBvZiB0aGUgbWVzc2FnZSIKICAgIF0sCiAgICAiaW1hcF9oZWFkZXJzIjogWwogICAgICAgICJhcnJheSBpbWFwX2hlYWRlcnMocmVzb3VyY2Ugc3RyZWFtX2lkKSIsCiAgICAgICAgIlJldHVybnMgaGVhZGVycyBmb3IgYWxsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9sYXN0X2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgaW1hcF9sYXN0X2Vycm9yKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGFzdCBlcnJvciB0aGF0IHdhcyBnZW5lcmF0ZWQgYnkgYW4gSU1BUCBmdW5jdGlvbi4gVGhlIGVycm9yIHN0YWNrIGlzIE5PVCBjbGVhcmVkIGFmdGVyIHRoaXMgY2FsbC4iCiAgICBdLAogICAgImltYXBfbGlzdCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9saXN0KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHJlZiwgc3RyaW5nIHBhdHRlcm4pIiwKICAgICAgICAiUmVhZCB0aGUgbGlzdCBvZiBtYWlsYm94ZXMiCiAgICBdLAogICAgImltYXBfbGlzdHNjYW4iOiBbCiAgICAgICAgImFycmF5IGltYXBfbGlzdHNjYW4ocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgcmVmLCBzdHJpbmcgcGF0dGVybiwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiUmVhZCBsaXN0IG9mIG1haWxib3hlcyBjb250YWluaW5nIGEgY2VydGFpbiBzdHJpbmciCiAgICBdLAogICAgImltYXBfbHN1YiI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9sc3ViKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHJlZiwgc3RyaW5nIHBhdHRlcm4pIiwKICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiBzdWJzY3JpYmVkIG1haWxib3hlcyIKICAgIF0sCiAgICAiaW1hcF9tYWlsIjogWwogICAgICAgICJib29sIGltYXBfbWFpbChzdHJpbmcgdG8sIHN0cmluZyBzdWJqZWN0LCBzdHJpbmcgbWVzc2FnZSBbLCBzdHJpbmcgYWRkaXRpb25hbF9oZWFkZXJzIFssIHN0cmluZyBjYyBbLCBzdHJpbmcgYmNjIFssIHN0cmluZyBycGF0aF1dXV0pIiwKICAgICAgICAiU2VuZCBhbiBlbWFpbCBtZXNzYWdlIgogICAgXSwKICAgICJpbWFwX21haWxfY29tcG9zZSI6IFsKICAgICAgICAic3RyaW5nIGltYXBfbWFpbF9jb21wb3NlKGFycmF5IGVudmVsb3BlLCBhcnJheSBib2R5KSIsCiAgICAgICAgIkNyZWF0ZSBhIE1JTUUgbWVzc2FnZSBiYXNlZCBvbiBnaXZlbiBlbnZlbG9wZSBhbmQgYm9keSBzZWN0aW9ucyIKICAgIF0sCiAgICAiaW1hcF9tYWlsX2NvcHkiOiBbCiAgICAgICAgImJvb2wgaW1hcF9tYWlsX2NvcHkocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbXNnbGlzdCwgc3RyaW5nIG1haWxib3ggWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkNvcHkgc3BlY2lmaWVkIG1lc3NhZ2UgdG8gYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX21haWxfbW92ZSI6IFsKICAgICAgICAiYm9vbCBpbWFwX21haWxfbW92ZShyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBzZXF1ZW5jZSwgc3RyaW5nIG1haWxib3ggWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIk1vdmUgc3BlY2lmaWVkIG1lc3NhZ2UgdG8gYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX21haWxib3htc2dpbmZvIjogWwogICAgICAgICJvYmplY3QgaW1hcF9tYWlsYm94bXNnaW5mbyhyZXNvdXJjZSBzdHJlYW1faWQpIiwKICAgICAgICAiUmV0dXJucyBpbmZvIGFib3V0IHRoZSBjdXJyZW50IG1haWxib3giCiAgICBdLAogICAgImltYXBfbWltZV9oZWFkZXJfZGVjb2RlIjogWwogICAgICAgICJhcnJheSBpbWFwX21pbWVfaGVhZGVyX2RlY29kZShzdHJpbmcgc3RyKSIsCiAgICAgICAgIkRlY29kZSBtaW1lIGhlYWRlciBlbGVtZW50IGluIGFjY29yZGFuY2Ugd2l0aCBSRkMgMjA0NyBhbmQgcmV0dXJuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyAnY2hhcnNldCcgZW5jb2RpbmcgYW5kIGRlY29kZWQgJ3RleHQnIgogICAgXSwKICAgICJpbWFwX21zZ25vIjogWwogICAgICAgICJpbnQgaW1hcF9tc2dubyhyZXNvdXJjZSBzdHJlYW1faWQsIGludCB1bmlxdWVfbXNnX2lkKSIsCiAgICAgICAgIkdldCB0aGUgc2VxdWVuY2UgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCBhIFVJRCIKICAgIF0sCiAgICAiaW1hcF9tdXRmN190b191dGY4IjogWwogICAgICAgICJzdHJpbmcgaW1hcF9tdXRmN190b191dGY4KHN0cmluZyBpbikiLAogICAgICAgICJEZWNvZGUgYSBtb2RpZmllZCBVVEYtNyBzdHJpbmcgdG8gVVRGLTgiCiAgICBdLAogICAgImltYXBfbnVtX21zZyI6IFsKICAgICAgICAiaW50IGltYXBfbnVtX21zZyhyZXNvdXJjZSBzdHJlYW1faWQpIiwKICAgICAgICAiR2l2ZXMgdGhlIG51bWJlciBvZiBtZXNzYWdlcyBpbiB0aGUgY3VycmVudCBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX251bV9yZWNlbnQiOiBbCiAgICAgICAgImludCBpbWFwX251bV9yZWNlbnQocmVzb3VyY2Ugc3RyZWFtX2lkKSIsCiAgICAgICAgIkdpdmVzIHRoZSBudW1iZXIgb2YgcmVjZW50IG1lc3NhZ2VzIGluIGN1cnJlbnQgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFwX29wZW4oc3RyaW5nIG1haWxib3gsIHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzc3dvcmQgWywgaW50IG9wdGlvbnMgWywgaW50IG5fcmV0cmllc11dKSIsCiAgICAgICAgIk9wZW4gYW4gSU1BUCBzdHJlYW0gdG8gYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3BpbmciOiBbCiAgICAgICAgImJvb2wgaW1hcF9waW5nKHJlc291cmNlIHN0cmVhbV9pZCkiLAogICAgICAgICJDaGVjayBpZiB0aGUgSU1BUCBzdHJlYW0gaXMgc3RpbGwgYWN0aXZlIgogICAgXSwKICAgICJpbWFwX3FwcmludCI6IFsKICAgICAgICAic3RyaW5nIGltYXBfcXByaW50KHN0cmluZyB0ZXh0KSIsCiAgICAgICAgIkNvbnZlcnQgYSBxdW90ZWQtcHJpbnRhYmxlIHN0cmluZyB0byBhbiA4LWJpdCBzdHJpbmciCiAgICBdLAogICAgImltYXBfcmVuYW1lbWFpbGJveCI6IFsKICAgICAgICAiYm9vbCBpbWFwX3JlbmFtZW1haWxib3gocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgb2xkX25hbWUsIHN0cmluZyBuZXdfbmFtZSkiLAogICAgICAgICJSZW5hbWUgYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3Jlb3BlbiI6IFsKICAgICAgICAiYm9vbCBpbWFwX3Jlb3BlbihyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBtYWlsYm94IFssIGludCBvcHRpb25zIFssIGludCBuX3JldHJpZXNdXSkiLAogICAgICAgICJSZW9wZW4gYW4gSU1BUCBzdHJlYW0gdG8gYSBuZXcgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9yZmM4MjJfcGFyc2VfYWRybGlzdCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9yZmM4MjJfcGFyc2VfYWRybGlzdChzdHJpbmcgYWRkcmVzc19zdHJpbmcsIHN0cmluZyBkZWZhdWx0X2hvc3QpIiwKICAgICAgICAiUGFyc2VzIGFuIGFkZHJlc3Mgc3RyaW5nIgogICAgXSwKICAgICJpbWFwX3JmYzgyMl9wYXJzZV9oZWFkZXJzIjogWwogICAgICAgICJvYmplY3QgaW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVycyhzdHJpbmcgaGVhZGVycyBbLCBzdHJpbmcgZGVmYXVsdF9ob3N0XSkiLAogICAgICAgICJQYXJzZSBhIHNldCBvZiBtYWlsIGhlYWRlcnMgY29udGFpbmVkIGluIGEgc3RyaW5nLCBhbmQgcmV0dXJuIGFuIG9iamVjdCBzaW1pbGFyIHRvIGltYXBfaGVhZGVyaW5mbygpIgogICAgXSwKICAgICJpbWFwX3JmYzgyMl93cml0ZV9hZGRyZXNzIjogWwogICAgICAgICJzdHJpbmcgaW1hcF9yZmM4MjJfd3JpdGVfYWRkcmVzcyhzdHJpbmcgbWFpbGJveCwgc3RyaW5nIGhvc3QsIHN0cmluZyBwZXJzb25hbCkiLAogICAgICAgICJSZXR1cm5zIGEgcHJvcGVybHkgZm9ybWF0dGVkIGVtYWlsIGFkZHJlc3MgZ2l2ZW4gdGhlIG1haWxib3gsIGhvc3QsIGFuZCBwZXJzb25hbCBpbmZvIgogICAgXSwKICAgICJpbWFwX3NhdmVib2R5IjogWwogICAgICAgICJib29sIGltYXBfc2F2ZWJvZHkocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmd8cmVzb3VyY2UgZmlsZSwgaW50IG1zZ19ub1ssIHN0cmluZyBzZWN0aW9uID0gXCJcIlssIGludCBvcHRpb25zID0gMF1dKSIsCiAgICAgICAgIlNhdmUgYSBzcGVjaWZpYyBib2R5IHNlY3Rpb24gdG8gYSBmaWxlIgogICAgXSwKICAgICJpbWFwX3NlYXJjaCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9zZWFyY2gocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgY3JpdGVyaWEgWywgaW50IG9wdGlvbnMgWywgc3RyaW5nIGNoYXJzZXRdXSkiLAogICAgICAgICJSZXR1cm4gYSBsaXN0IG9mIG1lc3NhZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBjcml0ZXJpYSIKICAgIF0sCiAgICAiaW1hcF9zZXRfcXVvdGEiOiBbCiAgICAgICAgImJvb2wgaW1hcF9zZXRfcXVvdGEocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgcXJvb3QsIGludCBtYWlsYm94X3NpemUpIiwKICAgICAgICAiV2lsbCBzZXQgdGhlIHF1b3RhIGZvciBxcm9vdCBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3NldGFjbCI6IFsKICAgICAgICAiYm9vbCBpbWFwX3NldGFjbChyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBtYWlsYm94LCBzdHJpbmcgaWQsIHN0cmluZyByaWdodHMpIiwKICAgICAgICAiU2V0cyB0aGUgQUNMIGZvciBhIGdpdmVuIG1haWxib3giCiAgICBdLAogICAgImltYXBfc2V0ZmxhZ19mdWxsIjogWwogICAgICAgICJib29sIGltYXBfc2V0ZmxhZ19mdWxsKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHNlcXVlbmNlLCBzdHJpbmcgZmxhZyBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiU2V0cyBmbGFncyBvbiBtZXNzYWdlcyIKICAgIF0sCiAgICAiaW1hcF9zb3J0IjogWwogICAgICAgICJhcnJheSBpbWFwX3NvcnQocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgY3JpdGVyaWEsIGludCByZXZlcnNlIFssIGludCBvcHRpb25zIFssIHN0cmluZyBzZWFyY2hfY3JpdGVyaWEgWywgc3RyaW5nIGNoYXJzZXRdXV0pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSBvZiBtZXNzYWdlIGhlYWRlcnMsIG9wdGlvbmFsbHkgaW5jbHVkaW5nIG9ubHkgbWVzc2FnZXMgdGhhdCBtZWV0IHNwZWNpZmllZCBjcml0ZXJpYS4iCiAgICBdLAogICAgImltYXBfc3RhdHVzIjogWwogICAgICAgICJvYmplY3QgaW1hcF9zdGF0dXMocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCwgaW50IG9wdGlvbnMpIiwKICAgICAgICAiR2V0IHN0YXR1cyBpbmZvIGZyb20gYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3N1YnNjcmliZSI6IFsKICAgICAgICAiYm9vbCBpbWFwX3N1YnNjcmliZShyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBtYWlsYm94KSIsCiAgICAgICAgIlN1YnNjcmliZSB0byBhIG1haWxib3giCiAgICBdLAogICAgImltYXBfdGhyZWFkIjogWwogICAgICAgICJhcnJheSBpbWFwX3RocmVhZChyZXNvdXJjZSBzdHJlYW1faWQgWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlJldHVybiB0aHJlYWRlZCBieSBSRUZFUkVOQ0VTIHRyZWUiCiAgICBdLAogICAgImltYXBfdGltZW91dCI6IFsKICAgICAgICAibWl4ZWQgaW1hcF90aW1lb3V0KGludCB0aW1lb3V0X3R5cGUgWywgaW50IHRpbWVvdXRdKSIsCiAgICAgICAgIlNldCBvciBmZXRjaCBpbWFwIHRpbWVvdXQiCiAgICBdLAogICAgImltYXBfdWlkIjogWwogICAgICAgICJpbnQgaW1hcF91aWQocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgbXNnX25vKSIsCiAgICAgICAgIkdldCB0aGUgdW5pcXVlIG1lc3NhZ2UgaWQgYXNzb2NpYXRlZCB3aXRoIGEgc3RhbmRhcmQgc2VxdWVudGlhbCBtZXNzYWdlIG51bWJlciIKICAgIF0sCiAgICAiaW1hcF91bmRlbGV0ZSI6IFsKICAgICAgICAiYm9vbCBpbWFwX3VuZGVsZXRlKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubyBbLCBpbnQgZmxhZ3NdKSIsCiAgICAgICAgIlJlbW92ZSB0aGUgZGVsZXRlIGZsYWcgZnJvbSBhIG1lc3NhZ2UiCiAgICBdLAogICAgImltYXBfdW5zdWJzY3JpYmUiOiBbCiAgICAgICAgImJvb2wgaW1hcF91bnN1YnNjcmliZShyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBtYWlsYm94KSIsCiAgICAgICAgIlVuc3Vic2NyaWJlIGZyb20gYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3V0ZjdfZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgaW1hcF91dGY3X2RlY29kZShzdHJpbmcgYnVmKSIsCiAgICAgICAgIkRlY29kZSBhIG1vZGlmaWVkIFVURi03IHN0cmluZyIKICAgIF0sCiAgICAiaW1hcF91dGY3X2VuY29kZSI6IFsKICAgICAgICAic3RyaW5nIGltYXBfdXRmN19lbmNvZGUoc3RyaW5nIGJ1ZikiLAogICAgICAgICJFbmNvZGUgYSBzdHJpbmcgaW4gbW9kaWZpZWQgVVRGLTciCiAgICBdLAogICAgImltYXBfdXRmOCI6IFsKICAgICAgICAic3RyaW5nIGltYXBfdXRmOChzdHJpbmcgbWltZV9lbmNvZGVkX3RleHQpIiwKICAgICAgICAiQ29udmVydCBhIG1pbWUtZW5jb2RlZCB0ZXh0IHRvIFVURi04IgogICAgXSwKICAgICJpbWFwX3V0ZjhfdG9fbXV0ZjciOiBbCiAgICAgICAgInN0cmluZyBpbWFwX3V0ZjhfdG9fbXV0Zjcoc3RyaW5nIGluKSIsCiAgICAgICAgIkVuY29kZSBhIFVURi04IHN0cmluZyB0byBtb2RpZmllZCBVVEYtNyIKICAgIF0sCiAgICAiaW1wbG9kZSI6IFsKICAgICAgICAic3RyaW5nIGltcGxvZGUoW3N0cmluZyBnbHVlLF0gYXJyYXkgcGllY2VzKSIsCiAgICAgICAgIkpvaW5zIGFycmF5IGVsZW1lbnRzIHBsYWNpbmcgZ2x1ZSBzdHJpbmcgYmV0d2VlbiBpdGVtcyBhbmQgcmV0dXJuIG9uZSBzdHJpbmciCiAgICBdLAogICAgImltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlcyI6IFsKICAgICAgICAiYm9vbCBpbXBvcnRfcmVxdWVzdF92YXJpYWJsZXMoc3RyaW5nIHR5cGVzIFssIHN0cmluZyBwcmVmaXhdKSIsCiAgICAgICAgIkltcG9ydCBHRVQvUE9TVC9Db29raWUgdmFyaWFibGVzIGludG8gdGhlIGdsb2JhbCBzY29wZSIKICAgIF0sCiAgICAiaW5fYXJyYXkiOiBbCiAgICAgICAgImJvb2wgaW5fYXJyYXkobWl4ZWQgbmVlZGxlLCBhcnJheSBoYXlzdGFjayBbLCBib29sIHN0cmljdF0pIiwKICAgICAgICAiQ2hlY2tzIGlmIHRoZSBnaXZlbiB2YWx1ZSBleGlzdHMgaW4gdGhlIGFycmF5IgogICAgXSwKICAgICJpbmNsdWRlIjogWwogICAgICAgICJib29sIGluY2x1ZGUoc3RyaW5nIHBhdGgpIiwKICAgICAgICAiSW5jbHVkZXMgYW5kIGV2YWx1YXRlcyB0aGUgc3BlY2lmaWVkIGZpbGUiCiAgICBdLAogICAgImluY2x1ZGVfb25jZSI6IFsKICAgICAgICAiYm9vbCBpbmNsdWRlX29uY2Uoc3RyaW5nIHBhdGgpIiwKICAgICAgICAiSW5jbHVkZXMgYW5kIGV2YWx1YXRlcyB0aGUgc3BlY2lmaWVkIGZpbGUiCiAgICBdLAogICAgImluZXRfbnRvcCI6IFsKICAgICAgICAic3RyaW5nIGluZXRfbnRvcChzdHJpbmcgaW5fYWRkcikiLAogICAgICAgICJDb252ZXJ0cyBhIHBhY2tlZCBpbmV0IGFkZHJlc3MgdG8gYSBodW1hbiByZWFkYWJsZSBJUCBhZGRyZXNzIHN0cmluZyIKICAgIF0sCiAgICAiaW5ldF9wdG9uIjogWwogICAgICAgICJzdHJpbmcgaW5ldF9wdG9uKHN0cmluZyBpcF9hZGRyZXNzKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgaHVtYW4gcmVhZGFibGUgSVAgYWRkcmVzcyB0byBhIHBhY2tlZCBiaW5hcnkgc3RyaW5nIgogICAgXSwKICAgICJpbmlfZ2V0IjogWwogICAgICAgICJzdHJpbmcgaW5pX2dldChzdHJpbmcgdmFybmFtZSkiLAogICAgICAgICJHZXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiIKICAgIF0sCiAgICAiaW5pX2dldF9hbGwiOiBbCiAgICAgICAgImFycmF5IGluaV9nZXRfYWxsKFtzdHJpbmcgZXh0ZW5zaW9uWywgYm9vbCBkZXRhaWxzID0gdHJ1ZV1dKSIsCiAgICAgICAgIkdldCBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIgogICAgXSwKICAgICJpbmlfcmVzdG9yZSI6IFsKICAgICAgICAidm9pZCBpbmlfcmVzdG9yZShzdHJpbmcgdmFybmFtZSkiLAogICAgICAgICJSZXN0b3JlIHRoZSB2YWx1ZSBvZiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNwZWNpZmllZCBieSB2YXJuYW1lIgogICAgXSwKICAgICJpbmlfc2V0IjogWwogICAgICAgICJzdHJpbmcgaW5pX3NldChzdHJpbmcgdmFybmFtZSwgc3RyaW5nIG5ld3ZhbHVlKSIsCiAgICAgICAgIlNldCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCByZXR1cm5zIGZhbHNlIG9uIGVycm9yIGFuZCB0aGUgb2xkIHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBvbiBzdWNjZXNzIgogICAgXSwKICAgICJpbnRlcmZhY2VfZXhpc3RzIjogWwogICAgICAgICJib29sIGludGVyZmFjZV9leGlzdHMoc3RyaW5nIGNsYXNzbmFtZSBbLCBib29sIGF1dG9sb2FkXSkiLAogICAgICAgICJDaGVja3MgaWYgdGhlIGNsYXNzIGV4aXN0cyIKICAgIF0sCiAgICAiaW50bF9lcnJvcl9uYW1lIjogWwogICAgICAgICJzdHJpbmcgaW50bF9lcnJvcl9uYW1lKCkiLAogICAgICAgICIqIFJldHVybiBhIHN0cmluZyBmb3IgYSBnaXZlbiBlcnJvciBjb2RlLiAgKiBUaGUgc3RyaW5nIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIG5hbWUgb2YgdGhlIGVycm9yIGNvZGUgY29uc3RhbnQuIgogICAgXSwKICAgICJpbnRsX2dldF9lcnJvcl9jb2RlIjogWwogICAgICAgICJpbnQgaW50bF9nZXRfZXJyb3JfY29kZSgpIiwKICAgICAgICAiKiBHZXQgY29kZSBvZiB0aGUgbGFzdCBvY2N1cmVkIGVycm9yLiIKICAgIF0sCiAgICAiaW50bF9nZXRfZXJyb3JfbWVzc2FnZSI6IFsKICAgICAgICAic3RyaW5nIGludGxfZ2V0X2Vycm9yX21lc3NhZ2UoKSIsCiAgICAgICAgIiogR2V0IHRleHQgZGVzY3JpcHRpb24gb2YgdGhlIGxhc3Qgb2NjdXJlZCBlcnJvci4iCiAgICBdLAogICAgImludGxfaXNfZmFpbHVyZSI6IFsKICAgICAgICAiYm9vbCBpbnRsX2lzX2ZhaWx1cmUoKSIsCiAgICAgICAgIiogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZXJyb3IgY29kZSBpbmRpY2F0ZXMgYSBmYWlsdXJlLiAgKiBSZXR1cm5zIHRydWUgaWYgaXQgZG9lcywgYW5kIGZhbHNlIGlmIHRoZSBjb2RlICAqIGluZGljYXRlcyBzdWNjZXNzIG9yIGEgd2FybmluZy4iCiAgICBdLAogICAgImludHZhbCI6IFsKICAgICAgICAiaW50IGludHZhbChtaXhlZCB2YXIgWywgaW50IGJhc2VdKSIsCiAgICAgICAgIkdldCB0aGUgaW50ZWdlciB2YWx1ZSBvZiBhIHZhcmlhYmxlIHVzaW5nIHRoZSBvcHRpb25hbCBiYXNlIGZvciB0aGUgY29udmVyc2lvbiIKICAgIF0sCiAgICAiaXAybG9uZyI6IFsKICAgICAgICAiaW50IGlwMmxvbmcoc3RyaW5nIGlwX2FkZHJlc3MpIiwKICAgICAgICAiQ29udmVydHMgYSBzdHJpbmcgY29udGFpbmluZyBhbiAoSVB2NCkgSW50ZXJuZXQgUHJvdG9jb2wgZG90dGVkIGFkZHJlc3MgaW50byBhIHByb3BlciBhZGRyZXNzIgogICAgXSwKICAgICJpcHRjZW1iZWQiOiBbCiAgICAgICAgImFycmF5IGlwdGNlbWJlZChzdHJpbmcgaXB0Y2RhdGEsIHN0cmluZyBqcGVnX2ZpbGVfbmFtZSBbLCBpbnQgc3Bvb2xdKSIsCiAgICAgICAgIkVtYmVkIGJpbmFyeSBJUFRDIGRhdGEgaW50byBhIEpQRUcgaW1hZ2UuIgogICAgXSwKICAgICJpcHRjcGFyc2UiOiBbCiAgICAgICAgImFycmF5IGlwdGNwYXJzZShzdHJpbmcgaXB0Y2RhdGEpIiwKICAgICAgICAiUGFyc2UgYmluYXJ5IElQVEMtZGF0YSBpbnRvIGFzc29jaWF0aXZlIGFycmF5IgogICAgXSwKICAgICJpc19hIjogWwogICAgICAgICJib29sIGlzX2Eob2JqZWN0IG9iamVjdCwgc3RyaW5nIGNsYXNzX25hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaXMgb2YgdGhpcyBjbGFzcyBvciBoYXMgdGhpcyBjbGFzcyBhcyBvbmUgb2YgaXRzIHBhcmVudHMiCiAgICBdLAogICAgImlzX2FycmF5IjogWwogICAgICAgICJib29sIGlzX2FycmF5KG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgYW4gYXJyYXkiCiAgICBdLAogICAgImlzX2Jvb2wiOiBbCiAgICAgICAgImJvb2wgaXNfYm9vbChtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIGEgYm9vbGVhbiIKICAgIF0sCiAgICAiaXNfY2FsbGFibGUiOiBbCiAgICAgICAgImJvb2wgaXNfY2FsbGFibGUobWl4ZWQgdmFyIFssIGJvb2wgc3ludGF4X29ubHkgWywgc3RyaW5nIGNhbGxhYmxlX25hbWVdXSkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyIGlzIGNhbGxhYmxlLiIKICAgIF0sCiAgICAiaXNfZGlyIjogWwogICAgICAgICJib29sIGlzX2RpcihzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIGZpbGUgaXMgZGlyZWN0b3J5IgogICAgXSwKICAgICJpc19leGVjdXRhYmxlIjogWwogICAgICAgICJib29sIGlzX2V4ZWN1dGFibGUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlIGlzIGV4ZWN1dGFibGUiCiAgICBdLAogICAgImlzX2ZpbGUiOiBbCiAgICAgICAgImJvb2wgaXNfZmlsZShzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIGZpbGUgaXMgYSByZWd1bGFyIGZpbGUiCiAgICBdLAogICAgImlzX2Zpbml0ZSI6IFsKICAgICAgICAiYm9vbCBpc19maW5pdGUoZmxvYXQgdmFsKSIsCiAgICAgICAgIlJldHVybnMgd2hldGhlciBhcmd1bWVudCBpcyBmaW5pdGUiCiAgICBdLAogICAgImlzX2Zsb2F0IjogWwogICAgICAgICJib29sIGlzX2Zsb2F0KG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgZmxvYXQgcG9pbnQiCiAgICBdLAogICAgImlzX2luZmluaXRlIjogWwogICAgICAgICJib29sIGlzX2luZmluaXRlKGZsb2F0IHZhbCkiLAogICAgICAgICJSZXR1cm5zIHdoZXRoZXIgYXJndW1lbnQgaXMgaW5maW5pdGUiCiAgICBdLAogICAgImlzX2xpbmsiOiBbCiAgICAgICAgImJvb2wgaXNfbGluayhzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIGZpbGUgaXMgc3ltYm9saWMgbGluayIKICAgIF0sCiAgICAiaXNfbG9uZyI6IFsKICAgICAgICAiYm9vbCBpc19sb25nKG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgYSBsb25nIChpbnRlZ2VyKSIKICAgIF0sCiAgICAiaXNfbmFuIjogWwogICAgICAgICJib29sIGlzX25hbihmbG9hdCB2YWwpIiwKICAgICAgICAiUmV0dXJucyB3aGV0aGVyIGFyZ3VtZW50IGlzIG5vdCBhIG51bWJlciIKICAgIF0sCiAgICAiaXNfbnVsbCI6IFsKICAgICAgICAiYm9vbCBpc19udWxsKG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgbnVsbCIKICAgIF0sCiAgICAiaXNfbnVtZXJpYyI6IFsKICAgICAgICAiYm9vbCBpc19udW1lcmljKG1peGVkIHZhbHVlKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhIG51bWJlciBvciBhIG51bWVyaWMgc3RyaW5nIgogICAgXSwKICAgICJpc19vYmplY3QiOiBbCiAgICAgICAgImJvb2wgaXNfb2JqZWN0KG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgYW4gb2JqZWN0IgogICAgXSwKICAgICJpc19yZWFkYWJsZSI6IFsKICAgICAgICAiYm9vbCBpc19yZWFkYWJsZShzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIGZpbGUgY2FuIGJlIHJlYWQiCiAgICBdLAogICAgImlzX3Jlc291cmNlIjogWwogICAgICAgICJib29sIGlzX3Jlc291cmNlKG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgYSByZXNvdXJjZSIKICAgIF0sCiAgICAiaXNfc2NhbGFyIjogWwogICAgICAgICJib29sIGlzX3NjYWxhcihtaXhlZCB2YWx1ZSkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYSBzY2FsYXIiCiAgICBdLAogICAgImlzX3N0cmluZyI6IFsKICAgICAgICAiYm9vbCBpc19zdHJpbmcobWl4ZWQgdmFyKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB2YXJpYWJsZSBpcyBhIHN0cmluZyIKICAgIF0sCiAgICAiaXNfc3ViY2xhc3Nfb2YiOiBbCiAgICAgICAgImJvb2wgaXNfc3ViY2xhc3Nfb2Yob2JqZWN0IG9iamVjdCwgc3RyaW5nIGNsYXNzX25hbWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgaGFzIHRoaXMgY2xhc3MgYXMgb25lIG9mIGl0cyBwYXJlbnRzIgogICAgXSwKICAgICJpc191cGxvYWRlZF9maWxlIjogWwogICAgICAgICJib29sIGlzX3VwbG9hZGVkX2ZpbGUoc3RyaW5nIHBhdGgpIiwKICAgICAgICAiQ2hlY2sgaWYgZmlsZSB3YXMgY3JlYXRlZCBieSByZmMxODY3IHVwbG9hZCIKICAgIF0sCiAgICAiaXNfd3JpdGFibGUiOiBbCiAgICAgICAgImJvb2wgaXNfd3JpdGFibGUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlIGNhbiBiZSB3cml0dGVuIgogICAgXSwKICAgICJpc3NldCI6IFsKICAgICAgICAiYm9vbCBpc3NldChtaXhlZCB2YXIgWywgbWl4ZWQgdmFyXSkiLAogICAgICAgICJEZXRlcm1pbmUgd2hldGhlciBhIHZhcmlhYmxlIGlzIHNldCIKICAgIF0sCiAgICAiaXRlcmF0b3JfYXBwbHkiOiBbCiAgICAgICAgImludCBpdGVyYXRvcl9hcHBseShUcmF2ZXJzYWJsZSBpdCwgbWl4ZWQgZnVuY3Rpb24gWywgbWl4ZWQgcGFyYW1zXSkiLAogICAgICAgICJDYWxscyBhIGZ1bmN0aW9uIGZvciBldmVyeSBlbGVtZW50IGluIGFuIGl0ZXJhdG9yIgogICAgXSwKICAgICJpdGVyYXRvcl9jb3VudCI6IFsKICAgICAgICAiaW50IGl0ZXJhdG9yX2NvdW50KFRyYXZlcnNhYmxlIGl0KSIsCiAgICAgICAgIkNvdW50IHRoZSBlbGVtZW50cyBpbiBhbiBpdGVyYXRvciIKICAgIF0sCiAgICAiaXRlcmF0b3JfdG9fYXJyYXkiOiBbCiAgICAgICAgImFycmF5IGl0ZXJhdG9yX3RvX2FycmF5KFRyYXZlcnNhYmxlIGl0IFssIGJvb2wgdXNlX2tleXMgPSB0cnVlXSkiLAogICAgICAgICJDb3B5IHRoZSBpdGVyYXRvciBpbnRvIGFuIGFycmF5IgogICAgXSwKICAgICJqZGRheW9md2VlayI6IFsKICAgICAgICAibWl4ZWQgamRkYXlvZndlZWsoaW50IGp1bGlhbmRheWNvdW50IFssIGludCBtb2RlXSkiLAogICAgICAgICJSZXR1cm5zIG5hbWUgb3IgbnVtYmVyIG9mIGRheSBvZiB3ZWVrIGZyb20ganVsaWFuIGRheSBjb3VudCIKICAgIF0sCiAgICAiamRtb250aG5hbWUiOiBbCiAgICAgICAgInN0cmluZyBqZG1vbnRobmFtZShpbnQganVsaWFuZGF5Y291bnQsIGludCBtb2RlKSIsCiAgICAgICAgIlJldHVybnMgbmFtZSBvZiBtb250aCBmb3IganVsaWFuIGRheSBjb3VudCIKICAgIF0sCiAgICAiamR0b2ZyZW5jaCI6IFsKICAgICAgICAic3RyaW5nIGpkdG9mcmVuY2goaW50IGp1bGlhbmRheWNvdW50KSIsCiAgICAgICAgIkNvbnZlcnRzIGEganVsaWFuIGRheSBjb3VudCB0byBhIGZyZW5jaCByZXB1YmxpYyBjYWxlbmRhciBkYXRlIgogICAgXSwKICAgICJqZHRvZ3JlZ29yaWFuIjogWwogICAgICAgICJzdHJpbmcgamR0b2dyZWdvcmlhbihpbnQganVsaWFuZGF5Y291bnQpIiwKICAgICAgICAiQ29udmVydHMgYSBqdWxpYW4gZGF5IGNvdW50IHRvIGEgZ3JlZ29yaWFuIGNhbGVuZGFyIGRhdGUiCiAgICBdLAogICAgImpkdG9qZXdpc2giOiBbCiAgICAgICAgInN0cmluZyBqZHRvamV3aXNoKGludCBqdWxpYW5kYXljb3VudCBbLCBib29sIGhlYnJldyBbLCBpbnQgZmxdXSkiLAogICAgICAgICJDb252ZXJ0cyBhIGp1bGlhbiBkYXkgY291bnQgdG8gYSBqZXdpc2ggY2FsZW5kYXIgZGF0ZSIKICAgIF0sCiAgICAiamR0b2p1bGlhbiI6IFsKICAgICAgICAic3RyaW5nIGpkdG9qdWxpYW4oaW50IGp1bGlhbmRheWNvdW50KSIsCiAgICAgICAgIkNvbnZlcnQgYSBqdWxpYW4gZGF5IGNvdW50IHRvIGEganVsaWFuIGNhbGVuZGFyIGRhdGUiCiAgICBdLAogICAgImpkdG91bml4IjogWwogICAgICAgICJpbnQgamR0b3VuaXgoaW50IGpkYXkpIiwKICAgICAgICAiQ29udmVydCBKdWxpYW4gRGF5IHRvIFVOSVggdGltZXN0YW1wIgogICAgXSwKICAgICJqZXdpc2h0b2pkIjogWwogICAgICAgICJpbnQgamV3aXNodG9qZChpbnQgbW9udGgsIGludCBkYXksIGludCB5ZWFyKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgamV3aXNoIGNhbGVuZGFyIGRhdGUgdG8gYSBqdWxpYW4gZGF5IGNvdW50IgogICAgXSwKICAgICJqb2luIjogWwogICAgICAgICJzdHJpbmcgam9pbihhcnJheSBzcmMsIHN0cmluZyBnbHVlKSIsCiAgICAgICAgIkFuIGFsaWFzIGZvciBpbXBsb2RlIgogICAgXSwKICAgICJqcGVnMndibXAiOiBbCiAgICAgICAgImJvb2wganBlZzJ3Ym1wIChzdHJpbmcgZl9vcmcsIHN0cmluZyBmX2Rlc3QsIGludCBkX2hlaWdodCwgaW50IGRfd2lkdGgsIGludCB0aHJlc2hvbGQpIiwKICAgICAgICAiQ29udmVydCBKUEVHIGltYWdlIHRvIFdCTVAgaW1hZ2UiCiAgICBdLAogICAgImpzb25fZGVjb2RlIjogWwogICAgICAgICJtaXhlZCBqc29uX2RlY29kZShzdHJpbmcganNvbiBbLCBib29sIGFzc29jIFssIGxvbmcgZGVwdGhdXSkiLAogICAgICAgICJEZWNvZGVzIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIGludG8gYSBQSFAgdmFsdWUiCiAgICBdLAogICAgImpzb25fZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcganNvbl9lbmNvZGUobWl4ZWQgZGF0YSBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiUmV0dXJucyB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIHZhbHVlIgogICAgXSwKICAgICJqc29uX2xhc3RfZXJyb3IiOiBbCiAgICAgICAgImludCBqc29uX2xhc3RfZXJyb3IoKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVycm9yIGNvZGUgb2YgdGhlIGxhc3QganNvbl9kZWNvZGUoKS4iCiAgICBdLAogICAgImp1bGlhbnRvamQiOiBbCiAgICAgICAgImludCBqdWxpYW50b2pkKGludCBtb250aCwgaW50IGRheSwgaW50IHllYXIpIiwKICAgICAgICAiQ29udmVydHMgYSBqdWxpYW4gY2FsZW5kYXIgZGF0ZSB0byBqdWxpYW4gZGF5IGNvdW50IgogICAgXSwKICAgICJrZXkiOiBbCiAgICAgICAgIm1peGVkIGtleShhcnJheSBhcnJheV9hcmcpIiwKICAgICAgICAiUmV0dXJuIHRoZSBrZXkgb2YgdGhlIGVsZW1lbnQgY3VycmVudGx5IHBvaW50ZWQgdG8gYnkgdGhlIGludGVybmFsIGFycmF5IHBvaW50ZXIiCiAgICBdLAogICAgImtyc29ydCI6IFsKICAgICAgICAiYm9vbCBrcnNvcnQoYXJyYXkgJmFycmF5X2FyZyBbLCBpbnQgc29ydF9mbGFnc10pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSBieSBrZXkgdmFsdWUgaW4gcmV2ZXJzZSBvcmRlciIKICAgIF0sCiAgICAia3NvcnQiOiBbCiAgICAgICAgImJvb2wga3NvcnQoYXJyYXkgJmFycmF5X2FyZyBbLCBpbnQgc29ydF9mbGFnc10pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSBieSBrZXkiCiAgICBdLAogICAgImxjZmlyc3QiOiBbCiAgICAgICAgInN0cmluZyBsY2ZpcnN0KHN0cmluZyBzdHIpIiwKICAgICAgICAiTWFrZSBhIHN0cmluZydzIGZpcnN0IGNoYXJhY3RlciBsb3dlcmNhc2UiCiAgICBdLAogICAgImxjZ192YWx1ZSI6IFsKICAgICAgICAiZmxvYXQgbGNnX3ZhbHVlKCkiLAogICAgICAgICJSZXR1cm5zIGEgdmFsdWUgZnJvbSB0aGUgY29tYmluZWQgbGluZWFyIGNvbmdydWVudGlhbCBnZW5lcmF0b3IiCiAgICBdLAogICAgImxjaGdycCI6IFsKICAgICAgICAiYm9vbCBsY2hncnAoc3RyaW5nIGZpbGVuYW1lLCBtaXhlZCBncm91cCkiLAogICAgICAgICJDaGFuZ2Ugc3ltbGluayBncm91cCIKICAgIF0sCiAgICAibGRhcF84ODU5X3RvX3Q2MSI6IFsKICAgICAgICAic3RyaW5nIGxkYXBfODg1OV90b190NjEoc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlRyYW5zbGF0ZSA4ODU5IGNoYXJhY3RlcnMgdG8gdDYxIGNoYXJhY3RlcnMiCiAgICBdLAogICAgImxkYXBfYWRkIjogWwogICAgICAgICJib29sIGxkYXBfYWRkKHJlc291cmNlIGxpbmssIHN0cmluZyBkbiwgYXJyYXkgZW50cnkpIiwKICAgICAgICAiQWRkIGVudHJpZXMgdG8gTERBUCBkaXJlY3RvcnkiCiAgICBdLAogICAgImxkYXBfYmluZCI6IFsKICAgICAgICAiYm9vbCBsZGFwX2JpbmQocmVzb3VyY2UgbGluayBbLCBzdHJpbmcgZG4gWywgc3RyaW5nIHBhc3N3b3JkXV0pIiwKICAgICAgICAiQmluZCB0byBMREFQIGRpcmVjdG9yeSIKICAgIF0sCiAgICAibGRhcF9jb21wYXJlIjogWwogICAgICAgICJib29sIGxkYXBfY29tcGFyZShyZXNvdXJjZSBsaW5rLCBzdHJpbmcgZG4sIHN0cmluZyBhdHRyLCBzdHJpbmcgdmFsdWUpIiwKICAgICAgICAiRGV0ZXJtaW5lIGlmIGFuIGVudHJ5IGhhcyBhIHNwZWNpZmljIHZhbHVlIGZvciBvbmUgb2YgaXRzIGF0dHJpYnV0ZXMiCiAgICBdLAogICAgImxkYXBfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9jb25uZWN0KFtzdHJpbmcgaG9zdCBbLCBpbnQgcG9ydCBbLCBzdHJpbmcgd2FsbGV0IFssIHN0cmluZyB3YWxsZXRfcGFzc3dkIFssIGludCBhdXRobW9kZV1dXV1dKSIsCiAgICAgICAgIkNvbm5lY3QgdG8gYW4gTERBUCBzZXJ2ZXIiCiAgICBdLAogICAgImxkYXBfY291bnRfZW50cmllcyI6IFsKICAgICAgICAiaW50IGxkYXBfY291bnRfZW50cmllcyhyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiQ291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGEgc2VhcmNoIHJlc3VsdCIKICAgIF0sCiAgICAibGRhcF9kZWxldGUiOiBbCiAgICAgICAgImJvb2wgbGRhcF9kZWxldGUocmVzb3VyY2UgbGluaywgc3RyaW5nIGRuKSIsCiAgICAgICAgIkRlbGV0ZSBhbiBlbnRyeSBmcm9tIGEgZGlyZWN0b3J5IgogICAgXSwKICAgICJsZGFwX2RuMnVmbiI6IFsKICAgICAgICAic3RyaW5nIGxkYXBfZG4ydWZuKHN0cmluZyBkbikiLAogICAgICAgICJDb252ZXJ0IEROIHRvIFVzZXIgRnJpZW5kbHkgTmFtaW5nIGZvcm1hdCIKICAgIF0sCiAgICAibGRhcF9lcnIyc3RyIjogWwogICAgICAgICJzdHJpbmcgbGRhcF9lcnIyc3RyKGludCBlcnJubykiLAogICAgICAgICJDb252ZXJ0IGVycm9yIG51bWJlciB0byBlcnJvciBzdHJpbmciCiAgICBdLAogICAgImxkYXBfZXJybm8iOiBbCiAgICAgICAgImludCBsZGFwX2Vycm5vKHJlc291cmNlIGxpbmspIiwKICAgICAgICAiR2V0IHRoZSBjdXJyZW50IGxkYXAgZXJyb3IgbnVtYmVyIgogICAgXSwKICAgICJsZGFwX2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgbGRhcF9lcnJvcihyZXNvdXJjZSBsaW5rKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBsZGFwIGVycm9yIHN0cmluZyIKICAgIF0sCiAgICAibGRhcF9leHBsb2RlX2RuIjogWwogICAgICAgICJhcnJheSBsZGFwX2V4cGxvZGVfZG4oc3RyaW5nIGRuLCBpbnQgd2l0aF9hdHRyaWIpIiwKICAgICAgICAiU3BsaXRzIEROIGludG8gaXRzIGNvbXBvbmVudCBwYXJ0cyIKICAgIF0sCiAgICAibGRhcF9maXJzdF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgInN0cmluZyBsZGFwX2ZpcnN0X2F0dHJpYnV0ZShyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHRfZW50cnkpIiwKICAgICAgICAiUmV0dXJuIGZpcnN0IGF0dHJpYnV0ZSIKICAgIF0sCiAgICAibGRhcF9maXJzdF9lbnRyeSI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9maXJzdF9lbnRyeShyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJuIGZpcnN0IHJlc3VsdCBpZCIKICAgIF0sCiAgICAibGRhcF9maXJzdF9yZWZlcmVuY2UiOiBbCiAgICAgICAgInJlc291cmNlIGxkYXBfZmlyc3RfcmVmZXJlbmNlKHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJSZXR1cm4gZmlyc3QgcmVmZXJlbmNlIgogICAgXSwKICAgICJsZGFwX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJib29sIGxkYXBfZnJlZV9yZXN1bHQocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkZyZWUgcmVzdWx0IG1lbW9yeSIKICAgIF0sCiAgICAibGRhcF9nZXRfYXR0cmlidXRlcyI6IFsKICAgICAgICAiYXJyYXkgbGRhcF9nZXRfYXR0cmlidXRlcyhyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHRfZW50cnkpIiwKICAgICAgICAiR2V0IGF0dHJpYnV0ZXMgZnJvbSBhIHNlYXJjaCByZXN1bHQgZW50cnkiCiAgICBdLAogICAgImxkYXBfZ2V0X2RuIjogWwogICAgICAgICJzdHJpbmcgbGRhcF9nZXRfZG4ocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0X2VudHJ5KSIsCiAgICAgICAgIkdldCB0aGUgRE4gb2YgYSByZXN1bHQgZW50cnkiCiAgICBdLAogICAgImxkYXBfZ2V0X2VudHJpZXMiOiBbCiAgICAgICAgImFycmF5IGxkYXBfZ2V0X2VudHJpZXMocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkdldCBhbGwgcmVzdWx0IGVudHJpZXMiCiAgICBdLAogICAgImxkYXBfZ2V0X29wdGlvbiI6IFsKICAgICAgICAiYm9vbCBsZGFwX2dldF9vcHRpb24ocmVzb3VyY2UgbGluaywgaW50IG9wdGlvbiwgbWl4ZWQgcmV0dmFsKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB2YXJpb3VzIHNlc3Npb24td2lkZSBwYXJhbWV0ZXJzIgogICAgXSwKICAgICJsZGFwX2dldF92YWx1ZXNfbGVuIjogWwogICAgICAgICJhcnJheSBsZGFwX2dldF92YWx1ZXNfbGVuKHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdF9lbnRyeSwgc3RyaW5nIGF0dHJpYnV0ZSkiLAogICAgICAgICJHZXQgYWxsIHZhbHVlcyB3aXRoIGxlbmd0aHMgZnJvbSBhIHJlc3VsdCBlbnRyeSIKICAgIF0sCiAgICAibGRhcF9saXN0IjogWwogICAgICAgICJyZXNvdXJjZSBsZGFwX2xpc3QocmVzb3VyY2V8YXJyYXkgbGluaywgc3RyaW5nIGJhc2VfZG4sIHN0cmluZyBmaWx0ZXIgWywgYXJyYXkgYXR0cnMgWywgaW50IGF0dHJzb25seSBbLCBpbnQgc2l6ZWxpbWl0IFssIGludCB0aW1lbGltaXQgWywgaW50IGRlcmVmXV1dXV0pIiwKICAgICAgICAiU2luZ2xlLWxldmVsIHNlYXJjaCIKICAgIF0sCiAgICAibGRhcF9tb2RfYWRkIjogWwogICAgICAgICJib29sIGxkYXBfbW9kX2FkZChyZXNvdXJjZSBsaW5rLCBzdHJpbmcgZG4sIGFycmF5IGVudHJ5KSIsCiAgICAgICAgIkFkZCBhdHRyaWJ1dGUgdmFsdWVzIHRvIGN1cnJlbnQiCiAgICBdLAogICAgImxkYXBfbW9kX2RlbCI6IFsKICAgICAgICAiYm9vbCBsZGFwX21vZF9kZWwocmVzb3VyY2UgbGluaywgc3RyaW5nIGRuLCBhcnJheSBlbnRyeSkiLAogICAgICAgICJEZWxldGUgYXR0cmlidXRlIHZhbHVlcyIKICAgIF0sCiAgICAibGRhcF9tb2RfcmVwbGFjZSI6IFsKICAgICAgICAiYm9vbCBsZGFwX21vZF9yZXBsYWNlKHJlc291cmNlIGxpbmssIHN0cmluZyBkbiwgYXJyYXkgZW50cnkpIiwKICAgICAgICAiUmVwbGFjZSBhdHRyaWJ1dGUgdmFsdWVzIHdpdGggbmV3IG9uZXMiCiAgICBdLAogICAgImxkYXBfbmV4dF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgInN0cmluZyBsZGFwX25leHRfYXR0cmlidXRlKHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdF9lbnRyeSkiLAogICAgICAgICJHZXQgdGhlIG5leHQgYXR0cmlidXRlIGluIHJlc3VsdCIKICAgIF0sCiAgICAibGRhcF9uZXh0X2VudHJ5IjogWwogICAgICAgICJyZXNvdXJjZSBsZGFwX25leHRfZW50cnkocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0X2VudHJ5KSIsCiAgICAgICAgIkdldCBuZXh0IHJlc3VsdCBlbnRyeSIKICAgIF0sCiAgICAibGRhcF9uZXh0X3JlZmVyZW5jZSI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9uZXh0X3JlZmVyZW5jZShyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZWZlcmVuY2VfZW50cnkpIiwKICAgICAgICAiR2V0IG5leHQgcmVmZXJlbmNlIgogICAgXSwKICAgICJsZGFwX3BhcnNlX3JlZmVyZW5jZSI6IFsKICAgICAgICAiYm9vbCBsZGFwX3BhcnNlX3JlZmVyZW5jZShyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZWZlcmVuY2VfZW50cnksIGFycmF5IHJlZmVycmFscykiLAogICAgICAgICJFeHRyYWN0IGluZm9ybWF0aW9uIGZyb20gcmVmZXJlbmNlIGVudHJ5IgogICAgXSwKICAgICJsZGFwX3BhcnNlX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBsZGFwX3BhcnNlX3Jlc3VsdChyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHQsIGludCBlcnJjb2RlLCBzdHJpbmcgbWF0Y2hlZGRuLCBzdHJpbmcgZXJybXNnLCBhcnJheSByZWZlcnJhbHMpIiwKICAgICAgICAiRXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHJlc3VsdCIKICAgIF0sCiAgICAibGRhcF9yZWFkIjogWwogICAgICAgICJyZXNvdXJjZSBsZGFwX3JlYWQocmVzb3VyY2V8YXJyYXkgbGluaywgc3RyaW5nIGJhc2VfZG4sIHN0cmluZyBmaWx0ZXIgWywgYXJyYXkgYXR0cnMgWywgaW50IGF0dHJzb25seSBbLCBpbnQgc2l6ZWxpbWl0IFssIGludCB0aW1lbGltaXQgWywgaW50IGRlcmVmXV1dXV0pIiwKICAgICAgICAiUmVhZCBhbiBlbnRyeSIKICAgIF0sCiAgICAibGRhcF9yZW5hbWUiOiBbCiAgICAgICAgImJvb2wgbGRhcF9yZW5hbWUocmVzb3VyY2UgbGluaywgc3RyaW5nIGRuLCBzdHJpbmcgbmV3cmRuLCBzdHJpbmcgbmV3cGFyZW50LCBib29sIGRlbGV0ZW9sZHJkbik7IiwKICAgICAgICAiTW9kaWZ5IHRoZSBuYW1lIG9mIGFuIGVudHJ5IgogICAgXSwKICAgICJsZGFwX3Nhc2xfYmluZCI6IFsKICAgICAgICAiYm9vbCBsZGFwX3Nhc2xfYmluZChyZXNvdXJjZSBsaW5rIFssIHN0cmluZyBiaW5kZG4gWywgc3RyaW5nIHBhc3N3b3JkIFssIHN0cmluZyBzYXNsX21lY2ggWywgc3RyaW5nIHNhc2xfcmVhbG0gWywgc3RyaW5nIHNhc2xfYXV0aGNfaWQgWywgc3RyaW5nIHNhc2xfYXV0aHpfaWQgWywgc3RyaW5nIHByb3BzXV1dXV1dXSkiLAogICAgICAgICJCaW5kIHRvIExEQVAgZGlyZWN0b3J5IHVzaW5nIFNBU0wiCiAgICBdLAogICAgImxkYXBfc2VhcmNoIjogWwogICAgICAgICJyZXNvdXJjZSBsZGFwX3NlYXJjaChyZXNvdXJjZXxhcnJheSBsaW5rLCBzdHJpbmcgYmFzZV9kbiwgc3RyaW5nIGZpbHRlciBbLCBhcnJheSBhdHRycyBbLCBpbnQgYXR0cnNvbmx5IFssIGludCBzaXplbGltaXQgWywgaW50IHRpbWVsaW1pdCBbLCBpbnQgZGVyZWZdXV1dXSkiLAogICAgICAgICJTZWFyY2ggTERBUCB0cmVlIHVuZGVyIGJhc2VfZG4iCiAgICBdLAogICAgImxkYXBfc2V0X29wdGlvbiI6IFsKICAgICAgICAiYm9vbCBsZGFwX3NldF9vcHRpb24ocmVzb3VyY2UgbGluaywgaW50IG9wdGlvbiwgbWl4ZWQgbmV3dmFsKSIsCiAgICAgICAgIlNldCB0aGUgdmFsdWUgb2YgdmFyaW91cyBzZXNzaW9uLXdpZGUgcGFyYW1ldGVycyIKICAgIF0sCiAgICAibGRhcF9zZXRfcmViaW5kX3Byb2MiOiBbCiAgICAgICAgImJvb2wgbGRhcF9zZXRfcmViaW5kX3Byb2MocmVzb3VyY2UgbGluaywgc3RyaW5nIGNhbGxiYWNrKSIsCiAgICAgICAgIlNldCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGRvIHJlLWJpbmRzIG9uIHJlZmVycmFsIGNoYXNpbmcuIgogICAgXSwKICAgICJsZGFwX3NvcnQiOiBbCiAgICAgICAgImJvb2wgbGRhcF9zb3J0KHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdCwgc3RyaW5nIHNvcnRmaWx0ZXIpIiwKICAgICAgICAiU29ydCBMREFQIHJlc3VsdCBlbnRyaWVzIgogICAgXSwKICAgICJsZGFwX3N0YXJ0X3RscyI6IFsKICAgICAgICAiYm9vbCBsZGFwX3N0YXJ0X3RscyhyZXNvdXJjZSBsaW5rKSIsCiAgICAgICAgIlN0YXJ0IFRMUyIKICAgIF0sCiAgICAibGRhcF90NjFfdG9fODg1OSI6IFsKICAgICAgICAic3RyaW5nIGxkYXBfdDYxX3RvXzg4NTkoc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlRyYW5zbGF0ZSB0NjEgY2hhcmFjdGVycyB0byA4ODU5IGNoYXJhY3RlcnMiCiAgICBdLAogICAgImxkYXBfdW5iaW5kIjogWwogICAgICAgICJib29sIGxkYXBfdW5iaW5kKHJlc291cmNlIGxpbmspIiwKICAgICAgICAiVW5iaW5kIGZyb20gTERBUCBkaXJlY3RvcnkiCiAgICBdLAogICAgImxlYWsiOiBbCiAgICAgICAgInZvaWQgbGVhayhpbnQgbnVtX2J5dGVzPTMpIiwKICAgICAgICAiQ2F1c2UgYW4gaW50ZW50aW9uYWwgbWVtb3J5IGxlYWssIGZvciB0ZXN0aW5nL2RlYnVnZ2luZyBwdXJwb3NlcyIKICAgIF0sCiAgICAibGV2ZW5zaHRlaW4iOiBbCiAgICAgICAgImludCBsZXZlbnNodGVpbihzdHJpbmcgc3RyMSwgc3RyaW5nIHN0cjJbLCBpbnQgY29zdF9pbnMsIGludCBjb3N0X3JlcCwgaW50IGNvc3RfZGVsXSkiLAogICAgICAgICJDYWxjdWxhdGUgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc3RyaW5ncyIKICAgIF0sCiAgICAibGlieG1sX2NsZWFyX2Vycm9ycyI6IFsKICAgICAgICAidm9pZCBsaWJ4bWxfY2xlYXJfZXJyb3JzKCkiLAogICAgICAgICJDbGVhciBsYXN0IGVycm9yIGZyb20gbGlieG1sIgogICAgXSwKICAgICJsaWJ4bWxfZGlzYWJsZV9lbnRpdHlfbG9hZGVyIjogWwogICAgICAgICJib29sIGxpYnhtbF9kaXNhYmxlX2VudGl0eV9sb2FkZXIoW2Jvb2xlYW4gZGlzYWJsZV0pIiwKICAgICAgICAiRGlzYWJsZS9FbmFibGUgYWJpbGl0eSB0byBsb2FkIGV4dGVybmFsIGVudGl0aWVzIgogICAgXSwKICAgICJsaWJ4bWxfZ2V0X2Vycm9ycyI6IFsKICAgICAgICAib2JqZWN0IGxpYnhtbF9nZXRfZXJyb3JzKCkiLAogICAgICAgICJSZXRyaWV2ZSBhcnJheSBvZiBlcnJvcnMiCiAgICBdLAogICAgImxpYnhtbF9nZXRfbGFzdF9lcnJvciI6IFsKICAgICAgICAib2JqZWN0IGxpYnhtbF9nZXRfbGFzdF9lcnJvcigpIiwKICAgICAgICAiUmV0cmlldmUgbGFzdCBlcnJvciBmcm9tIGxpYnhtbCIKICAgIF0sCiAgICAibGlieG1sX3NldF9zdHJlYW1zX2NvbnRleHQiOiBbCiAgICAgICAgInZvaWQgbGlieG1sX3NldF9zdHJlYW1zX2NvbnRleHQocmVzb3VyY2Ugc3RyZWFtc19jb250ZXh0KSIsCiAgICAgICAgIlNldCB0aGUgc3RyZWFtcyBjb250ZXh0IGZvciB0aGUgbmV4dCBsaWJ4bWwgZG9jdW1lbnQgbG9hZCBvciB3cml0ZSIKICAgIF0sCiAgICAibGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnMiOiBbCiAgICAgICAgImJvb2wgbGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnMoW2Jvb2xlYW4gdXNlX2Vycm9yc10pIiwKICAgICAgICAiRGlzYWJsZSBsaWJ4bWwgZXJyb3JzIGFuZCBhbGxvdyB1c2VyIHRvIGZldGNoIGVycm9yIGluZm9ybWF0aW9uIGFzIG5lZWRlZCIKICAgIF0sCiAgICAibGluayI6IFsKICAgICAgICAiaW50IGxpbmsoc3RyaW5nIHRhcmdldCwgc3RyaW5nIGxpbmspIiwKICAgICAgICAiQ3JlYXRlIGEgaGFyZCBsaW5rIgogICAgXSwKICAgICJsaW5raW5mbyI6IFsKICAgICAgICAiaW50IGxpbmtpbmZvKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBzdF9kZXYgZmllbGQgb2YgdGhlIFVOSVggQyBzdGF0IHN0cnVjdHVyZSBkZXNjcmliaW5nIHRoZSBsaW5rIgogICAgXSwKICAgICJsaXRlc3BlZWRfcmVxdWVzdF9oZWFkZXJzIjogWwogICAgICAgICJhcnJheSBsaXRlc3BlZWRfcmVxdWVzdF9oZWFkZXJzKHZvaWQpIiwKICAgICAgICAiRmV0Y2ggYWxsIEhUVFAgcmVxdWVzdCBoZWFkZXJzIgogICAgXSwKICAgICJsaXRlc3BlZWRfcmVzcG9uc2VfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgbGl0ZXNwZWVkX3Jlc3BvbnNlX2hlYWRlcnModm9pZCkiLAogICAgICAgICJGZXRjaCBhbGwgSFRUUCByZXNwb25zZSBoZWFkZXJzIgogICAgXSwKICAgICJsb2NhbGVfYWNjZXB0X2Zyb21faHR0cCI6IFsKICAgICAgICAic3RyaW5nIGxvY2FsZV9hY2NlcHRfZnJvbV9odHRwKHN0cmluZyAkaHR0cF9hY2NlcHQpIiwKICAgICAgICBudWxsCiAgICBdLAogICAgImxvY2FsZV9jYW5vbmljYWxpemUiOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgbG9jYWxlX2Nhbm9uaWNhbGl6ZShMb2NhbGUgJGxvYywgc3RyaW5nICRsb2NhbGUpIiwKICAgICAgICAiKiBAcGFyYW0gc3RyaW5nICRsb2NhbGUgVGhlIGxvY2FsZSBzdHJpbmcgdG8gY2Fub25pY2FsaXplIgogICAgXSwKICAgICJsb2NhbGVfZmlsdGVyX21hdGNoZXMiOiBbCiAgICAgICAgImJvb2xlYW4gbG9jYWxlX2ZpbHRlcl9tYXRjaGVzKHN0cmluZyAkbGFuZ3RhZywgc3RyaW5nICRsb2NhbGVbLCBib29sICRjYW5vbmljYWxpemVdKSIsCiAgICAgICAgIiogQ2hlY2tzIGlmIGEgJGxhbmd0YWcgZmlsdGVyIG1hdGNoZXMgd2l0aCAkbG9jYWxlIGFjY29yZGluZyB0byBSRkMgNDY0NydzIGJhc2ljIGZpbHRlcmluZyBhbGdvcml0aG0iCiAgICBdLAogICAgImxvY2FsZV9nZXRfYWxsX3ZhcmlhbnRzIjogWwogICAgICAgICJzdGF0aWMgYXJyYXkgbG9jYWxlX2dldF9hbGxfdmFyaWFudHMoJGxvY2FsZSkiLAogICAgICAgICIqIGdldHMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbGlzdCBvZiB2YXJpYW50cywgb3IgbnVsbCIKICAgIF0sCiAgICAibG9jYWxlX2dldF9kZWZhdWx0IjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGxvY2FsZV9nZXRfZGVmYXVsdCggKSIsCiAgICAgICAgIkdldCBkZWZhdWx0IGxvY2FsZSIKICAgIF0sCiAgICAibG9jYWxlX2dldF9rZXl3b3JkcyI6IFsKICAgICAgICAic3RhdGljIGFycmF5IGxvY2FsZV9nZXRfa2V5d29yZHMoc3RyaW5nICRsb2NhbGUpIHsiLAogICAgICAgICIqIHJldHVybiBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGtleXdvcmQtdmFsdWUgICogcGFpcnMgZm9yIHRoaXMgbG9jYWxlLiBUaGUga2V5cyBhcmUga2V5cyB0byB0aGUgYXJyYXkgKGRvaCEpIgogICAgXSwKICAgICJsb2NhbGVfZ2V0X3ByaW1hcnlfbGFuZ3VhZ2UiOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgbG9jYWxlX2dldF9wcmltYXJ5X2xhbmd1YWdlKCRsb2NhbGUpIiwKICAgICAgICAiKiBnZXRzIHRoZSBwcmltYXJ5IGxhbmd1YWdlIGZvciB0aGUgJGxvY2FsZSIKICAgIF0sCiAgICAibG9jYWxlX2dldF9yZWdpb24iOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgbG9jYWxlX2dldF9yZWdpb24oJGxvY2FsZSkiLAogICAgICAgICIqIGdldHMgdGhlIHJlZ2lvbiBmb3IgdGhlICRsb2NhbGUiCiAgICBdLAogICAgImxvY2FsZV9nZXRfc2NyaXB0IjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGxvY2FsZV9nZXRfc2NyaXB0KCRsb2NhbGUpIiwKICAgICAgICAiKiBnZXRzIHRoZSBzY3JpcHQgZm9yIHRoZSAkbG9jYWxlIgogICAgXSwKICAgICJsb2NhbGVfbG9va3VwIjogWwogICAgICAgICJzdHJpbmcgbG9jYWxlX2xvb2t1cChhcnJheSAkbGFuZ3RhZywgc3RyaW5nICRsb2NhbGVbLCBib29sICRjYW5vbmljYWxpemVbLCBzdHJpbmcgJGRlZmF1bHQgPSBudWxsXV0pIiwKICAgICAgICAiKiBTZWFyY2hzIHRoZSBpdGVtcyBpbiAkbGFuZ3RhZyBmb3IgdGhlIGJlc3QgbWF0Y2ggdG8gdGhlIGxhbmd1YWdlICogcmFuZ2UiCiAgICBdLAogICAgImxvY2FsZV9zZXRfZGVmYXVsdCI6IFsKICAgICAgICAic3RhdGljIHN0cmluZyBsb2NhbGVfc2V0X2RlZmF1bHQoIHN0cmluZyAkbG9jYWxlICkiLAogICAgICAgICJTZXQgZGVmYXVsdCBsb2NhbGUiCiAgICBdLAogICAgImxvY2FsZWNvbnYiOiBbCiAgICAgICAgImFycmF5IGxvY2FsZWNvbnYodm9pZCkiLAogICAgICAgICJSZXR1cm5zIG51bWVyaWMgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2NhbGUiCiAgICBdLAogICAgImxvY2FsdGltZSI6IFsKICAgICAgICAiYXJyYXkgbG9jYWx0aW1lKFtpbnQgdGltZXN0YW1wIFssIGJvb2wgYXNzb2NpYXRpdmVfYXJyYXldXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSByZXN1bHRzIG9mIHRoZSBDIHN5c3RlbSBjYWxsIGxvY2FsdGltZSBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBpZiB0aGUgYXNzb2NpYXRpdmVfYXJyYXkgYXJndW1lbnQgaXMgc2V0IHRvIDEgb3RoZXIgd2lzZSBpdCBpcyBhIHJlZ3VsYXIgYXJyYXkiCiAgICBdLAogICAgImxvZyI6IFsKICAgICAgICAiZmxvYXQgbG9nKGZsb2F0IG51bWJlciwgW2Zsb2F0IGJhc2VdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHRoZSBudW1iZXIsIG9yIHRoZSBiYXNlIGxvZyBpZiBiYXNlIGlzIHNwZWNpZmllZCIKICAgIF0sCiAgICAibG9nMTAiOiBbCiAgICAgICAgImZsb2F0IGxvZzEwKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiB0aGUgbnVtYmVyIgogICAgXSwKICAgICJsb2cxcCI6IFsKICAgICAgICAiZmxvYXQgbG9nMXAoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgbG9nKDEgKyBudW1iZXIpLCBjb21wdXRlZCBpbiBhIHdheSB0aGF0IGFjY3VyYXRlIGV2ZW4gd2hlbiB0aGUgdmFsdWUgb2YgbnVtYmVyIGlzIGNsb3NlIHRvIHplcm8iCiAgICBdLAogICAgImxvbmcyaXAiOiBbCiAgICAgICAgInN0cmluZyBsb25nMmlwKGludCBwcm9wZXJfYWRkcmVzcykiLAogICAgICAgICJDb252ZXJ0cyBhbiAoSVB2NCkgSW50ZXJuZXQgbmV0d29yayBhZGRyZXNzIGludG8gYSBzdHJpbmcgaW4gSW50ZXJuZXQgc3RhbmRhcmQgZG90dGVkIGZvcm1hdCIKICAgIF0sCiAgICAibHN0YXQiOiBbCiAgICAgICAgImFycmF5IGxzdGF0KHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHaXZlIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBvciBzeW1ib2xpYyBsaW5rIgogICAgXSwKICAgICJsdHJpbSI6IFsKICAgICAgICAic3RyaW5nIGx0cmltKHN0cmluZyBzdHIgWywgc3RyaW5nIGNoYXJhY3Rlcl9tYXNrXSkiLAogICAgICAgICJTdHJpcHMgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmciCiAgICBdLAogICAgIm1haWwiOiBbCiAgICAgICAgImludCBtYWlsKHN0cmluZyB0bywgc3RyaW5nIHN1YmplY3QsIHN0cmluZyBtZXNzYWdlIFssIHN0cmluZyBhZGRpdGlvbmFsX2hlYWRlcnMgWywgc3RyaW5nIGFkZGl0aW9uYWxfcGFyYW1ldGVyc11dKSIsCiAgICAgICAgIlNlbmQgYW4gZW1haWwgbWVzc2FnZSIKICAgIF0sCiAgICAibWF4IjogWwogICAgICAgICJtaXhlZCBtYXgobWl4ZWQgYXJnMSBbLCBtaXhlZCBhcmcyIFssIG1peGVkIC4uLl1dKSIsCiAgICAgICAgIlJldHVybiB0aGUgaGlnaGVzdCB2YWx1ZSBpbiBhbiBhcnJheSBvciBhIHNlcmllcyBvZiBhcmd1bWVudHMiCiAgICBdLAogICAgIm1iX2NoZWNrX2VuY29kaW5nIjogWwogICAgICAgICJib29sIG1iX2NoZWNrX2VuY29kaW5nKFtzdHJpbmcgdmFyWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiQ2hlY2sgaWYgdGhlIHN0cmluZyBpcyB2YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBlbmNvZGluZyIKICAgIF0sCiAgICAibWJfY29udmVydF9jYXNlIjogWwogICAgICAgICJzdHJpbmcgbWJfY29udmVydF9jYXNlKHN0cmluZyBzb3VyY2VzdHJpbmcsIGludCBtb2RlIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiUmV0dXJucyBhIGNhc2UtZm9sZGVkIHZlcnNpb24gb2Ygc291cmNlc3RyaW5nIgogICAgXSwKICAgICJtYl9jb252ZXJ0X2VuY29kaW5nIjogWwogICAgICAgICJzdHJpbmcgbWJfY29udmVydF9lbmNvZGluZyhzdHJpbmcgc3RyLCBzdHJpbmcgdG8tZW5jb2RpbmcgWywgbWl4ZWQgZnJvbS1lbmNvZGluZ10pIiwKICAgICAgICAiUmV0dXJucyBjb252ZXJ0ZWQgc3RyaW5nIGluIGRlc2lyZWQgZW5jb2RpbmciCiAgICBdLAogICAgIm1iX2NvbnZlcnRfa2FuYSI6IFsKICAgICAgICAic3RyaW5nIG1iX2NvbnZlcnRfa2FuYShzdHJpbmcgc3RyIFssIHN0cmluZyBvcHRpb25dIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiQ29udmVyc2lvbiBiZXR3ZWVuIGZ1bGwtd2lkdGggY2hhcmFjdGVyIGFuZCBoYWxmLXdpZHRoIGNoYXJhY3RlciAoSmFwYW5lc2UpIgogICAgXSwKICAgICJtYl9jb252ZXJ0X3ZhcmlhYmxlcyI6IFsKICAgICAgICAic3RyaW5nIG1iX2NvbnZlcnRfdmFyaWFibGVzKHN0cmluZyB0by1lbmNvZGluZywgbWl4ZWQgZnJvbS1lbmNvZGluZywgbWl4ZWQgdmFycyBbLCAuLi5dKSIsCiAgICAgICAgIkNvbnZlcnRzIHRoZSBzdHJpbmcgcmVzb3VyY2UgaW4gdmFyaWFibGVzIHRvIGRlc2lyZWQgZW5jb2RpbmciCiAgICBdLAogICAgIm1iX2RlY29kZV9taW1laGVhZGVyIjogWwogICAgICAgICJzdHJpbmcgbWJfZGVjb2RlX21pbWVoZWFkZXIoc3RyaW5nIHN0cmluZykiLAogICAgICAgICJEZWNvZGVzIHRoZSBNSU1FIFwiZW5jb2RlZC13b3JkXCIgaW4gdGhlIHN0cmluZyIKICAgIF0sCiAgICAibWJfZGVjb2RlX251bWVyaWNlbnRpdHkiOiBbCiAgICAgICAgInN0cmluZyBtYl9kZWNvZGVfbnVtZXJpY2VudGl0eShzdHJpbmcgc3RyaW5nLCBhcnJheSBjb252bWFwIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiQ29udmVydHMgSFRNTCBudW1lcmljIGVudGl0aWVzIHRvIGNoYXJhY3RlciBjb2RlIgogICAgXSwKICAgICJtYl9kZXRlY3RfZW5jb2RpbmciOiBbCiAgICAgICAgInN0cmluZyBtYl9kZXRlY3RfZW5jb2Rpbmcoc3RyaW5nIHN0ciBbLCBtaXhlZCBlbmNvZGluZ19saXN0IFssIGJvb2wgc3RyaWN0XV0pIiwKICAgICAgICAiRW5jb2RpbmdzIG9mIHRoZSBnaXZlbiBzdHJpbmcgaXMgcmV0dXJuZWQgKGFzIGEgc3RyaW5nKSIKICAgIF0sCiAgICAibWJfZGV0ZWN0X29yZGVyIjogWwogICAgICAgICJib29sfGFycmF5IG1iX2RldGVjdF9vcmRlcihbbWl4ZWQgZW5jb2RpbmctbGlzdF0pIiwKICAgICAgICAiU2V0cyB0aGUgY3VycmVudCBkZXRlY3Rfb3JkZXIgb3IgUmV0dXJuIHRoZSBjdXJyZW50IGRldGVjdF9vcmRlciBhcyBhIGFycmF5IgogICAgXSwKICAgICJtYl9lbmNvZGVfbWltZWhlYWRlciI6IFsKICAgICAgICAic3RyaW5nIG1iX2VuY29kZV9taW1laGVhZGVyKHN0cmluZyBzdHIgWywgc3RyaW5nIGNoYXJzZXQgWywgc3RyaW5nIHRyYW5zZmVyLWVuY29kaW5nIFssIHN0cmluZyBsaW5lZmVlZCBbLCBpbnQgaW5kZW50XV1dXSkiLAogICAgICAgICJDb252ZXJ0cyB0aGUgc3RyaW5nIHRvIE1JTUUgXCJlbmNvZGVkLXdvcmRcIiBpbiB0aGUgZm9ybWF0IG9mID0/Y2hhcnNldD8oQnxRKT9lbmNvZGVkX3N0cmluZz89IgogICAgXSwKICAgICJtYl9lbmNvZGVfbnVtZXJpY2VudGl0eSI6IFsKICAgICAgICAic3RyaW5nIG1iX2VuY29kZV9udW1lcmljZW50aXR5KHN0cmluZyBzdHJpbmcsIGFycmF5IGNvbnZtYXAgWywgc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICJDb252ZXJ0cyBzcGVjaWZpZWQgY2hhcmFjdGVycyB0byBIVE1MIG51bWVyaWMgZW50aXRpZXMiCiAgICBdLAogICAgIm1iX2VuY29kaW5nX2FsaWFzZXMiOiBbCiAgICAgICAgImFycmF5IG1iX2VuY29kaW5nX2FsaWFzZXMoc3RyaW5nIGVuY29kaW5nKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGFsaWFzZXMgb2YgYSBnaXZlbiBlbmNvZGluZyBuYW1lIgogICAgXSwKICAgICJtYl9lcmVnIjogWwogICAgICAgICJpbnQgbWJfZXJlZyhzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHN0cmluZyBbLCBhcnJheSByZWdpc3RlcnNdKSIsCiAgICAgICAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBmb3IgbXVsdGlieXRlIHN0cmluZyIKICAgIF0sCiAgICAibWJfZXJlZ19tYXRjaCI6IFsKICAgICAgICAiYm9vbCBtYl9lcmVnX21hdGNoKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3RyaW5nIFssc3RyaW5nIG9wdGlvbl0pIiwKICAgICAgICAiUmVndWxhciBleHByZXNzaW9uIG1hdGNoIGZvciBtdWx0aWJ5dGUgc3RyaW5nIgogICAgXSwKICAgICJtYl9lcmVnX3JlcGxhY2UiOiBbCiAgICAgICAgInN0cmluZyBtYl9lcmVnX3JlcGxhY2Uoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyByZXBsYWNlbWVudCwgc3RyaW5nIHN0cmluZyBbLCBzdHJpbmcgb3B0aW9uXSkiLAogICAgICAgICJSZXBsYWNlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgbXVsdGlieXRlIHN0cmluZyIKICAgIF0sCiAgICAibWJfZXJlZ19zZWFyY2giOiBbCiAgICAgICAgImJvb2wgbWJfZXJlZ19zZWFyY2goW3N0cmluZyBwYXR0ZXJuWywgc3RyaW5nIG9wdGlvbl1dKSIsCiAgICAgICAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggZm9yIG11bHRpYnl0ZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoX2dldHBvcyI6IFsKICAgICAgICAiaW50IG1iX2VyZWdfc2VhcmNoX2dldHBvcyh2b2lkKSIsCiAgICAgICAgIkdldCBzZWFyY2ggc3RhcnQgcG9zaXRpb24iCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoX2dldHJlZ3MiOiBbCiAgICAgICAgImFycmF5IG1iX2VyZWdfc2VhcmNoX2dldHJlZ3Modm9pZCkiLAogICAgICAgICJHZXQgbWF0Y2hlZCBzdWJzdHJpbmcgb2YgdGhlIGxhc3QgdGltZSIKICAgIF0sCiAgICAibWJfZXJlZ19zZWFyY2hfaW5pdCI6IFsKICAgICAgICAiYm9vbCBtYl9lcmVnX3NlYXJjaF9pbml0KHN0cmluZyBzdHJpbmcgWywgc3RyaW5nIHBhdHRlcm5bLCBzdHJpbmcgb3B0aW9uXV0pIiwKICAgICAgICAiSW5pdGlhbGl6ZSBzdHJpbmcgYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc2VhcmNoLiIKICAgIF0sCiAgICAibWJfZXJlZ19zZWFyY2hfcG9zIjogWwogICAgICAgICJhcnJheSBtYl9lcmVnX3NlYXJjaF9wb3MoW3N0cmluZyBwYXR0ZXJuWywgc3RyaW5nIG9wdGlvbl1dKSIsCiAgICAgICAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggZm9yIG11bHRpYnl0ZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoX3JlZ3MiOiBbCiAgICAgICAgImFycmF5IG1iX2VyZWdfc2VhcmNoX3JlZ3MoW3N0cmluZyBwYXR0ZXJuWywgc3RyaW5nIG9wdGlvbl1dKSIsCiAgICAgICAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2ggZm9yIG11bHRpYnl0ZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoX3NldHBvcyI6IFsKICAgICAgICAiYm9vbCBtYl9lcmVnX3NlYXJjaF9zZXRwb3MoaW50IHBvc2l0aW9uKSIsCiAgICAgICAgIlNldCBzZWFyY2ggc3RhcnQgcG9zaXRpb24iCiAgICBdLAogICAgIm1iX2VyZWdpIjogWwogICAgICAgICJpbnQgbWJfZXJlZ2koc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHJpbmcgWywgYXJyYXkgcmVnaXN0ZXJzXSkiLAogICAgICAgICJDYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBmb3IgbXVsdGlieXRlIHN0cmluZyIKICAgIF0sCiAgICAibWJfZXJlZ2lfcmVwbGFjZSI6IFsKICAgICAgICAic3RyaW5nIG1iX2VyZWdpX3JlcGxhY2Uoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyByZXBsYWNlbWVudCwgc3RyaW5nIHN0cmluZykiLAogICAgICAgICJDYXNlIGluc2Vuc2l0aXZlIHJlcGxhY2UgcmVndWxhciBleHByZXNzaW9uIGZvciBtdWx0aWJ5dGUgc3RyaW5nIgogICAgXSwKICAgICJtYl9nZXRfaW5mbyI6IFsKICAgICAgICAibWl4ZWQgbWJfZ2V0X2luZm8oW3N0cmluZyB0eXBlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBjdXJyZW50IHNldHRpbmdzIG9mIG1ic3RyaW5nIgogICAgXSwKICAgICJtYl9odHRwX2lucHV0IjogWwogICAgICAgICJtaXhlZCBtYl9odHRwX2lucHV0KFtzdHJpbmcgdHlwZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgaW5wdXQgZW5jb2RpbmciCiAgICBdLAogICAgIm1iX2h0dHBfb3V0cHV0IjogWwogICAgICAgICJzdHJpbmcgbWJfaHR0cF9vdXRwdXQoW3N0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiU2V0cyB0aGUgY3VycmVudCBvdXRwdXRfZW5jb2Rpbmcgb3IgcmV0dXJucyB0aGUgY3VycmVudCBvdXRwdXRfZW5jb2RpbmcgYXMgYSBzdHJpbmciCiAgICBdLAogICAgIm1iX2ludGVybmFsX2VuY29kaW5nIjogWwogICAgICAgICJzdHJpbmcgbWJfaW50ZXJuYWxfZW5jb2RpbmcoW3N0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiU2V0cyB0aGUgY3VycmVudCBpbnRlcm5hbCBlbmNvZGluZyBvciBSZXR1cm5zIHRoZSBjdXJyZW50IGludGVybmFsIGVuY29kaW5nIGFzIGEgc3RyaW5nIgogICAgXSwKICAgICJtYl9sYW5ndWFnZSI6IFsKICAgICAgICAic3RyaW5nIG1iX2xhbmd1YWdlKFtzdHJpbmcgbGFuZ3VhZ2VdKSIsCiAgICAgICAgIlNldHMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugb3IgUmV0dXJucyB0aGUgY3VycmVudCBsYW5ndWFnZSBhcyBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfbGlzdF9lbmNvZGluZ3MiOiBbCiAgICAgICAgIm1peGVkIG1iX2xpc3RfZW5jb2RpbmdzKCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBzdXBwb3J0ZWQgZW50aXR5IGVuY29kaW5ncyIKICAgIF0sCiAgICAibWJfb3V0cHV0X2hhbmRsZXIiOiBbCiAgICAgICAgInN0cmluZyBtYl9vdXRwdXRfaGFuZGxlcihzdHJpbmcgY29udGVudHMsIGludCBzdGF0dXMpIiwKICAgICAgICAiUmV0dXJucyBzdHJpbmcgaW4gb3V0cHV0IGJ1ZmZlciBjb252ZXJ0ZWQgdG8gdGhlIGh0dHBfb3V0cHV0IGVuY29kaW5nIgogICAgXSwKICAgICJtYl9wYXJzZV9zdHIiOiBbCiAgICAgICAgImJvb2wgbWJfcGFyc2Vfc3RyKHN0cmluZyBlbmNvZGVkX3N0cmluZyBbLCBhcnJheSByZXN1bHRdKSIsCiAgICAgICAgIlBhcnNlcyBHRVQvUE9TVC9DT09LSUUgZGF0YSBhbmQgc2V0cyBnbG9iYWwgdmFyaWFibGVzIgogICAgXSwKICAgICJtYl9wcmVmZXJyZWRfbWltZV9uYW1lIjogWwogICAgICAgICJzdHJpbmcgbWJfcHJlZmVycmVkX21pbWVfbmFtZShzdHJpbmcgZW5jb2RpbmcpIiwKICAgICAgICAiUmV0dXJuIHRoZSBwcmVmZXJyZWQgTUlNRSBuYW1lIChjaGFyc2V0KSBhcyBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfcmVnZXhfZW5jb2RpbmciOiBbCiAgICAgICAgInN0cmluZyBtYl9yZWdleF9lbmNvZGluZyhbc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBjdXJyZW50IGVuY29kaW5nIGZvciByZWdleCBhcyBhIHN0cmluZy4iCiAgICBdLAogICAgIm1iX3JlZ2V4X3NldF9vcHRpb25zIjogWwogICAgICAgICJzdHJpbmcgbWJfcmVnZXhfc2V0X29wdGlvbnMoW3N0cmluZyBvcHRpb25zXSkiLAogICAgICAgICJTZXQgb3IgZ2V0IHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIG1icmVnZXggZnVuY3Rpb25zIgogICAgXSwKICAgICJtYl9zZW5kX21haWwiOiBbCiAgICAgICAgImludCBtYl9zZW5kX21haWwoc3RyaW5nIHRvLCBzdHJpbmcgc3ViamVjdCwgc3RyaW5nIG1lc3NhZ2UgWywgc3RyaW5nIGFkZGl0aW9uYWxfaGVhZGVycyBbLCBzdHJpbmcgYWRkaXRpb25hbF9wYXJhbWV0ZXJzXV0pIiwKICAgICAgICAiKiAgU2VuZHMgYW4gZW1haWwgbWVzc2FnZSB3aXRoIE1JTUUgc2NoZW1lIgogICAgXSwKICAgICJtYl9zcGxpdCI6IFsKICAgICAgICAiYXJyYXkgbWJfc3BsaXQoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHJpbmcgWywgaW50IGxpbWl0XSkiLAogICAgICAgICJzcGxpdCBtdWx0aWJ5dGUgc3RyaW5nIGludG8gYXJyYXkgYnkgcmVndWxhciBleHByZXNzaW9uIgogICAgXSwKICAgICJtYl9zdHJjdXQiOiBbCiAgICAgICAgInN0cmluZyBtYl9zdHJjdXQoc3RyaW5nIHN0ciwgaW50IHN0YXJ0IFssIGludCBsZW5ndGggWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiUmV0dXJucyBwYXJ0IG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJtYl9zdHJpbXdpZHRoIjogWwogICAgICAgICJzdHJpbmcgbWJfc3RyaW13aWR0aChzdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCB3aWR0aCBbLCBzdHJpbmcgdHJpbW1hcmtlciBbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJUcmltIHRoZSBzdHJpbmcgaW4gdGVybWluYWwgd2lkdGgiCiAgICBdLAogICAgIm1iX3N0cmlwb3MiOiBbCiAgICAgICAgImludCBtYl9zdHJpcG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0IFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGNhc2UgaW5zZW5zaXRpdmUiCiAgICBdLAogICAgIm1iX3N0cmlzdHIiOiBbCiAgICAgICAgInN0cmluZyBtYl9zdHJpc3RyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZVssIGJvb2wgcGFydFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkZpbmRzIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGNhc2UgaW5zZW5zaXRpdmUiCiAgICBdLAogICAgIm1iX3N0cmxlbiI6IFsKICAgICAgICAiaW50IG1iX3N0cmxlbihzdHJpbmcgc3RyIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiR2V0IGNoYXJhY3RlciBudW1iZXJzIG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJtYl9zdHJwb3MiOiBbCiAgICAgICAgImludCBtYl9zdHJwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXQgWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiRmluZCBwb3NpdGlvbiBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJtYl9zdHJyY2hyIjogWwogICAgICAgICJzdHJpbmcgbWJfc3RycmNocihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGVbLCBib29sIHBhcnRbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJGaW5kcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgY2hhcmFjdGVyIGluIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJtYl9zdHJyaWNociI6IFsKICAgICAgICAic3RyaW5nIG1iX3N0cnJpY2hyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZVssIGJvb2wgcGFydFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkZpbmRzIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGNhc2UgaW5zZW5zaXRpdmUiCiAgICBdLAogICAgIm1iX3N0cnJpcG9zIjogWwogICAgICAgICJpbnQgbWJfc3Rycmlwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXQgWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiRmluZHMgcG9zaXRpb24gb2YgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlIgogICAgXSwKICAgICJtYl9zdHJycG9zIjogWwogICAgICAgICJpbnQgbWJfc3RycnBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldCBbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJGaW5kIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAibWJfc3Ryc3RyIjogWwogICAgICAgICJzdHJpbmcgbWJfc3Ryc3RyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZVssIGJvb2wgcGFydFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkZpbmRzIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIiCiAgICBdLAogICAgIm1iX3N0cnRvbG93ZXIiOiBbCiAgICAgICAgInN0cmluZyBtYl9zdHJ0b2xvd2VyKHN0cmluZyBzb3VyY2VzdHJpbmcgWywgc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICIqICBSZXR1cm5zIGEgbG93ZXJjYXNlZCB2ZXJzaW9uIG9mIHNvdXJjZXN0cmluZyIKICAgIF0sCiAgICAibWJfc3RydG91cHBlciI6IFsKICAgICAgICAic3RyaW5nIG1iX3N0cnRvdXBwZXIoc3RyaW5nIHNvdXJjZXN0cmluZyBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIiogIFJldHVybnMgYSB1cHBlcmNhc2VkIHZlcnNpb24gb2Ygc291cmNlc3RyaW5nIgogICAgXSwKICAgICJtYl9zdHJ3aWR0aCI6IFsKICAgICAgICAiaW50IG1iX3N0cndpZHRoKHN0cmluZyBzdHIgWywgc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICJHZXRzIHRlcm1pbmFsIHdpZHRoIG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJtYl9zdWJzdGl0dXRlX2NoYXJhY3RlciI6IFsKICAgICAgICAibWl4ZWQgbWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXIoW21peGVkIHN1YnN0Y2hhcl0pIiwKICAgICAgICAiU2V0cyB0aGUgY3VycmVudCBzdWJzdGl0dXRlX2NoYXJhY3RlciBvciByZXR1cm5zIHRoZSBjdXJyZW50IHN1YnN0aXR1dGVfY2hhcmFjdGVyIgogICAgXSwKICAgICJtYl9zdWJzdHIiOiBbCiAgICAgICAgInN0cmluZyBtYl9zdWJzdHIoc3RyaW5nIHN0ciwgaW50IHN0YXJ0IFssIGludCBsZW5ndGggWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiUmV0dXJucyBwYXJ0IG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJtYl9zdWJzdHJfY291bnQiOiBbCiAgICAgICAgImludCBtYl9zdWJzdHJfY291bnQoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiQ291bnQgdGhlIG51bWJlciBvZiBzdWJzdHJpbmcgb2NjdXJyZW5jZXMiCiAgICBdLAogICAgIm1jcnlwdF9jYmMiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfY2JjKGludCBjaXBoZXIsIHN0cmluZyBrZXksIHN0cmluZyBkYXRhLCBpbnQgbW9kZSwgc3RyaW5nIGl2KSIsCiAgICAgICAgIkNCQyBjcnlwdC9kZWNyeXB0IGRhdGEgdXNpbmcga2V5IGtleSB3aXRoIGNpcGhlciBjaXBoZXIgc3RhcnRpbmcgd2l0aCBpdiIKICAgIF0sCiAgICAibWNyeXB0X2NmYiI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9jZmIoaW50IGNpcGhlciwgc3RyaW5nIGtleSwgc3RyaW5nIGRhdGEsIGludCBtb2RlLCBzdHJpbmcgaXYpIiwKICAgICAgICAiQ0ZCIGNyeXB0L2RlY3J5cHQgZGF0YSB1c2luZyBrZXkga2V5IHdpdGggY2lwaGVyIGNpcGhlciBzdGFydGluZyB3aXRoIGl2IgogICAgXSwKICAgICJtY3J5cHRfY3JlYXRlX2l2IjogWwogICAgICAgICJzdHJpbmcgbWNyeXB0X2NyZWF0ZV9pdihpbnQgc2l6ZSwgaW50IHNvdXJjZSkiLAogICAgICAgICJDcmVhdGUgYW4gaW5pdGlhbGl6YXRpb24gdmVjdG9yIChJVikiCiAgICBdLAogICAgIm1jcnlwdF9kZWNyeXB0IjogWwogICAgICAgICJzdHJpbmcgbWNyeXB0X2RlY3J5cHQoc3RyaW5nIGNpcGhlciwgc3RyaW5nIGtleSwgc3RyaW5nIGRhdGEsIHN0cmluZyBtb2RlLCBzdHJpbmcgaXYpIiwKICAgICAgICAiT0ZCIGNyeXB0L2RlY3J5cHQgZGF0YSB1c2luZyBrZXkga2V5IHdpdGggY2lwaGVyIGNpcGhlciBzdGFydGluZyB3aXRoIGl2IgogICAgXSwKICAgICJtY3J5cHRfZWNiIjogWwogICAgICAgICJzdHJpbmcgbWNyeXB0X2VjYihpbnQgY2lwaGVyLCBzdHJpbmcga2V5LCBzdHJpbmcgZGF0YSwgaW50IG1vZGUsIHN0cmluZyBpdikiLAogICAgICAgICJFQ0IgY3J5cHQvZGVjcnlwdCBkYXRhIHVzaW5nIGtleSBrZXkgd2l0aCBjaXBoZXIgY2lwaGVyIHN0YXJ0aW5nIHdpdGggaXYiCiAgICBdLAogICAgIm1jcnlwdF9lbmNfZ2V0X2FsZ29yaXRobXNfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9lbmNfZ2V0X2FsZ29yaXRobXNfbmFtZShyZXNvdXJjZSB0ZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBhbGdvcml0aG0gc3BlY2lmaWVkIGJ5IHRoZSBkZXNjcmlwdG9yIHRkIgogICAgXSwKICAgICJtY3J5cHRfZW5jX2dldF9ibG9ja19zaXplIjogWwogICAgICAgICJpbnQgbWNyeXB0X2VuY19nZXRfYmxvY2tfc2l6ZShyZXNvdXJjZSB0ZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBibG9jayBzaXplIG9mIHRoZSBjaXBoZXIgc3BlY2lmaWVkIGJ5IHRoZSBkZXNjcmlwdG9yIHRkIgogICAgXSwKICAgICJtY3J5cHRfZW5jX2dldF9pdl9zaXplIjogWwogICAgICAgICJpbnQgbWNyeXB0X2VuY19nZXRfaXZfc2l6ZShyZXNvdXJjZSB0ZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBJViBpbiBieXRlcyBvZiB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZCBieSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X2VuY19nZXRfa2V5X3NpemUiOiBbCiAgICAgICAgImludCBtY3J5cHRfZW5jX2dldF9rZXlfc2l6ZShyZXNvdXJjZSB0ZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBrZXkgc2l6ZSBpbiBieXRlcyBvZiB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZCBieSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X2VuY19nZXRfbW9kZXNfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9lbmNfZ2V0X21vZGVzX25hbWUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgbW9kZSBzcGVjaWZpZWQgYnkgdGhlIGRlc2NyaXB0b3IgdGQiCiAgICBdLAogICAgIm1jcnlwdF9lbmNfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXMiOiBbCiAgICAgICAgImFycmF5IG1jcnlwdF9lbmNfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXMocmVzb3VyY2UgdGQpIiwKICAgICAgICAiVGhpcyBmdW5jdGlvbiBkZWNyeXB0cyB0aGUgY3J5cHR0ZXh0IgogICAgXSwKICAgICJtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobSI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobShyZXNvdXJjZSB0ZCkiLAogICAgICAgICJSZXR1cm5zIFRSVUUgaWYgdGhlIGFscm9naXRobSBpcyBhIGJsb2NrIGFsZ29yaXRobXMiCiAgICBdLAogICAgIm1jcnlwdF9lbmNfaXNfYmxvY2tfYWxnb3JpdGhtX21vZGUiOiBbCiAgICAgICAgImJvb2wgbWNyeXB0X2VuY19pc19ibG9ja19hbGdvcml0aG1fbW9kZShyZXNvdXJjZSB0ZCkiLAogICAgICAgICJSZXR1cm5zIFRSVUUgaWYgdGhlIG1vZGUgaXMgZm9yIHVzZSB3aXRoIGJsb2NrIGFsZ29yaXRobXMiCiAgICBdLAogICAgIm1jcnlwdF9lbmNfaXNfYmxvY2tfbW9kZSI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfZW5jX2lzX2Jsb2NrX21vZGUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyBUUlVFIGlmIHRoZSBtb2RlIG91dHB1dHMgYmxvY2tzIgogICAgXSwKICAgICJtY3J5cHRfZW5jX3NlbGZfdGVzdCI6IFsKICAgICAgICAiaW50IG1jcnlwdF9lbmNfc2VsZl90ZXN0KHJlc291cmNlIHRkKSIsCiAgICAgICAgIlRoaXMgZnVuY3Rpb24gcnVucyB0aGUgc2VsZiB0ZXN0IG9uIHRoZSBhbGdvcml0aG0gc3BlY2lmaWVkIGJ5IHRoZSBkZXNjcmlwdG9yIHRkIgogICAgXSwKICAgICJtY3J5cHRfZW5jcnlwdCI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9lbmNyeXB0KHN0cmluZyBjaXBoZXIsIHN0cmluZyBrZXksIHN0cmluZyBkYXRhLCBzdHJpbmcgbW9kZSwgc3RyaW5nIGl2KSIsCiAgICAgICAgIk9GQiBjcnlwdC9kZWNyeXB0IGRhdGEgdXNpbmcga2V5IGtleSB3aXRoIGNpcGhlciBjaXBoZXIgc3RhcnRpbmcgd2l0aCBpdiIKICAgIF0sCiAgICAibWNyeXB0X2dlbmVyaWMiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfZ2VuZXJpYyhyZXNvdXJjZSB0ZCwgc3RyaW5nIGRhdGEpIiwKICAgICAgICAiVGhpcyBmdW5jdGlvbiBlbmNyeXB0cyB0aGUgcGxhaW50ZXh0IgogICAgXSwKICAgICJtY3J5cHRfZ2VuZXJpY19kZWluaXQiOiBbCiAgICAgICAgImJvb2wgbWNyeXB0X2dlbmVyaWNfZGVpbml0KHJlc291cmNlIHRkKSIsCiAgICAgICAgIlRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyBlbmNyeXB0IHNwZWNpZmllZCBieSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X2dlbmVyaWNfaW5pdCI6IFsKICAgICAgICAiaW50IG1jcnlwdF9nZW5lcmljX2luaXQocmVzb3VyY2UgdGQsIHN0cmluZyBrZXksIHN0cmluZyBpdikiLAogICAgICAgICJUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIGFsbCBidWZmZXJzIGZvciB0aGUgc3BlY2lmaWMgbW9kdWxlIgogICAgXSwKICAgICJtY3J5cHRfZ2V0X2Jsb2NrX3NpemUiOiBbCiAgICAgICAgImludCBtY3J5cHRfZ2V0X2Jsb2NrX3NpemUoc3RyaW5nIGNpcGhlciwgc3RyaW5nIG1vZHVsZSkiLAogICAgICAgICJHZXQgdGhlIGtleSBzaXplIG9mIGNpcGhlciIKICAgIF0sCiAgICAibWNyeXB0X2dldF9jaXBoZXJfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9nZXRfY2lwaGVyX25hbWUoc3RyaW5nIGNpcGhlcikiLAogICAgICAgICJHZXQgdGhlIGtleSBzaXplIG9mIGNpcGhlciIKICAgIF0sCiAgICAibWNyeXB0X2dldF9pdl9zaXplIjogWwogICAgICAgICJpbnQgbWNyeXB0X2dldF9pdl9zaXplKHN0cmluZyBjaXBoZXIsIHN0cmluZyBtb2R1bGUpIiwKICAgICAgICAiR2V0IHRoZSBJViBzaXplIG9mIGNpcGhlciAoVXN1YWxseSB0aGUgc2FtZSBhcyB0aGUgYmxvY2tzaXplKSIKICAgIF0sCiAgICAibWNyeXB0X2dldF9rZXlfc2l6ZSI6IFsKICAgICAgICAiaW50IG1jcnlwdF9nZXRfa2V5X3NpemUoc3RyaW5nIGNpcGhlciwgc3RyaW5nIG1vZHVsZSkiLAogICAgICAgICJHZXQgdGhlIGtleSBzaXplIG9mIGNpcGhlciIKICAgIF0sCiAgICAibWNyeXB0X2xpc3RfYWxnb3JpdGhtcyI6IFsKICAgICAgICAiYXJyYXkgbWNyeXB0X2xpc3RfYWxnb3JpdGhtcyhbc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIkxpc3QgYWxsIGFsZ29yaXRobXMgaW4gXCJtb2R1bGVfZGlyXCIiCiAgICBdLAogICAgIm1jcnlwdF9saXN0X21vZGVzIjogWwogICAgICAgICJhcnJheSBtY3J5cHRfbGlzdF9tb2Rlcyhbc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIkxpc3QgYWxsIG1vZGVzIFwibW9kdWxlX2RpclwiIgogICAgXSwKICAgICJtY3J5cHRfbW9kdWxlX2Nsb3NlIjogWwogICAgICAgICJib29sIG1jcnlwdF9tb2R1bGVfY2xvc2UocmVzb3VyY2UgdGQpIiwKICAgICAgICAiRnJlZSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9nZXRfYWxnb19ibG9ja19zaXplIjogWwogICAgICAgICJpbnQgbWNyeXB0X21vZHVsZV9nZXRfYWxnb19ibG9ja19zaXplKHN0cmluZyBhbGdvcml0aG0gWywgc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGFsZ29yaXRobSIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9nZXRfYWxnb19rZXlfc2l6ZSI6IFsKICAgICAgICAiaW50IG1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fa2V5X3NpemUoc3RyaW5nIGFsZ29yaXRobSBbLCBzdHJpbmcgbGliX2Rpcl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQga2V5IHNpemUgb2YgdGhlIGFsZ29yaXRobSIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9nZXRfc3VwcG9ydGVkX2tleV9zaXplcyI6IFsKICAgICAgICAiYXJyYXkgbWNyeXB0X21vZHVsZV9nZXRfc3VwcG9ydGVkX2tleV9zaXplcyhzdHJpbmcgYWxnb3JpdGhtIFssIHN0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJUaGlzIGZ1bmN0aW9uIGRlY3J5cHRzIHRoZSBjcnlwdHRleHQiCiAgICBdLAogICAgIm1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtIjogWwogICAgICAgICJib29sIG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtKHN0cmluZyBhbGdvcml0aG0gWywgc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIlJldHVybnMgVFJVRSBpZiB0aGUgYWxnb3JpdGhtIGlzIGEgYmxvY2sgYWxnb3JpdGhtIgogICAgXSwKICAgICJtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlIjogWwogICAgICAgICJib29sIG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfYWxnb3JpdGhtX21vZGUoc3RyaW5nIG1vZGUgWywgc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIlJldHVybnMgVFJVRSBpZiB0aGUgbW9kZSBpcyBmb3IgdXNlIHdpdGggYmxvY2sgYWxnb3JpdGhtcyIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9pc19ibG9ja19tb2RlIjogWwogICAgICAgICJib29sIG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfbW9kZShzdHJpbmcgbW9kZSBbLCBzdHJpbmcgbGliX2Rpcl0pIiwKICAgICAgICAiUmV0dXJucyBUUlVFIGlmIHRoZSBtb2RlIG91dHB1dHMgYmxvY2tzIG9mIGJ5dGVzIgogICAgXSwKICAgICJtY3J5cHRfbW9kdWxlX29wZW4iOiBbCiAgICAgICAgInJlc291cmNlIG1jcnlwdF9tb2R1bGVfb3BlbihzdHJpbmcgY2lwaGVyLCBzdHJpbmcgY2lwaGVyX2RpcmVjdG9yeSwgc3RyaW5nIG1vZGUsIHN0cmluZyBtb2RlX2RpcmVjdG9yeSkiLAogICAgICAgICJPcGVucyB0aGUgbW9kdWxlIG9mIHRoZSBhbGdvcml0aG0gYW5kIHRoZSBtb2RlIHRvIGJlIHVzZWQiCiAgICBdLAogICAgIm1jcnlwdF9tb2R1bGVfc2VsZl90ZXN0IjogWwogICAgICAgICJib29sIG1jcnlwdF9tb2R1bGVfc2VsZl90ZXN0KHN0cmluZyBhbGdvcml0aG0gWywgc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIkRvZXMgYSBzZWxmIHRlc3Qgb2YgdGhlIG1vZHVsZSBcIm1vZHVsZVwiIgogICAgXSwKICAgICJtY3J5cHRfb2ZiIjogWwogICAgICAgICJzdHJpbmcgbWNyeXB0X29mYihpbnQgY2lwaGVyLCBzdHJpbmcga2V5LCBzdHJpbmcgZGF0YSwgaW50IG1vZGUsIHN0cmluZyBpdikiLAogICAgICAgICJPRkIgY3J5cHQvZGVjcnlwdCBkYXRhIHVzaW5nIGtleSBrZXkgd2l0aCBjaXBoZXIgY2lwaGVyIHN0YXJ0aW5nIHdpdGggaXYiCiAgICBdLAogICAgIm1kNSI6IFsKICAgICAgICAic3RyaW5nIG1kNShzdHJpbmcgc3RyLCBbIGJvb2wgcmF3X291dHB1dF0pIiwKICAgICAgICAiQ2FsY3VsYXRlIHRoZSBtZDUgaGFzaCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAibWQ1X2ZpbGUiOiBbCiAgICAgICAgInN0cmluZyBtZDVfZmlsZShzdHJpbmcgZmlsZW5hbWUgWywgYm9vbCByYXdfb3V0cHV0XSkiLAogICAgICAgICJDYWxjdWxhdGUgdGhlIG1kNSBoYXNoIG9mIGdpdmVuIGZpbGVuYW1lIgogICAgXSwKICAgICJtZGVjcnlwdF9nZW5lcmljIjogWwogICAgICAgICJzdHJpbmcgbWRlY3J5cHRfZ2VuZXJpYyhyZXNvdXJjZSB0ZCwgc3RyaW5nIGRhdGEpIiwKICAgICAgICAiVGhpcyBmdW5jdGlvbiBkZWNyeXB0cyB0aGUgcGxhaW50ZXh0IgogICAgXSwKICAgICJtZW1vcnlfZ2V0X3BlYWtfdXNhZ2UiOiBbCiAgICAgICAgImludCBtZW1vcnlfZ2V0X3BlYWtfdXNhZ2UoW3JlYWxfdXNhZ2VdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHBlYWsgYWxsb2NhdGVkIGJ5IFBIUCBtZW1vcnkiCiAgICBdLAogICAgIm1lbW9yeV9nZXRfdXNhZ2UiOiBbCiAgICAgICAgImludCBtZW1vcnlfZ2V0X3VzYWdlKFtyZWFsX3VzYWdlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBhbGxvY2F0ZWQgYnkgUEhQIG1lbW9yeSIKICAgIF0sCiAgICAibWV0YXBob25lIjogWwogICAgICAgICJzdHJpbmcgbWV0YXBob25lKHN0cmluZyB0ZXh0WywgaW50IHBob25lc10pIiwKICAgICAgICAiQnJlYWsgZW5nbGlzaCBwaHJhc2VzIGRvd24gaW50byB0aGVpciBwaG9uZW1lcyIKICAgIF0sCiAgICAibWV0aG9kX2V4aXN0cyI6IFsKICAgICAgICAiYm9vbCBtZXRob2RfZXhpc3RzKG9iamVjdCBvYmplY3QsIHN0cmluZyBtZXRob2QpIiwKICAgICAgICAiQ2hlY2tzIGlmIHRoZSBjbGFzcyBtZXRob2QgZXhpc3RzIgogICAgXSwKICAgICJtaGFzaCI6IFsKICAgICAgICAic3RyaW5nIG1oYXNoKGludCBoYXNoLCBzdHJpbmcgZGF0YSBbLCBzdHJpbmcga2V5XSkiLAogICAgICAgICJIYXNoIGRhdGEgd2l0aCBoYXNoIgogICAgXSwKICAgICJtaGFzaF9jb3VudCI6IFsKICAgICAgICAiaW50IG1oYXNoX2NvdW50KHZvaWQpIiwKICAgICAgICAiR2V0cyB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBoYXNoZXMiCiAgICBdLAogICAgIm1oYXNoX2dldF9ibG9ja19zaXplIjogWwogICAgICAgICJpbnQgbWhhc2hfZ2V0X2Jsb2NrX3NpemUoaW50IGhhc2gpIiwKICAgICAgICAiR2V0cyB0aGUgYmxvY2sgc2l6ZSBvZiBoYXNoIgogICAgXSwKICAgICJtaGFzaF9nZXRfaGFzaF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgbWhhc2hfZ2V0X2hhc2hfbmFtZShpbnQgaGFzaCkiLAogICAgICAgICJHZXRzIHRoZSBuYW1lIG9mIGhhc2giCiAgICBdLAogICAgIm1oYXNoX2tleWdlbl9zMmsiOiBbCiAgICAgICAgInN0cmluZyBtaGFzaF9rZXlnZW5fczJrKGludCBoYXNoLCBzdHJpbmcgaW5wdXRfcGFzc3dvcmQsIHN0cmluZyBzYWx0LCBpbnQgYnl0ZXMpIiwKICAgICAgICAiR2VuZXJhdGVzIGEga2V5IHVzaW5nIGhhc2ggZnVuY3Rpb25zIgogICAgXSwKICAgICJtaWNyb3RpbWUiOiBbCiAgICAgICAgIm1peGVkIG1pY3JvdGltZShbYm9vbCBnZXRfYXNfZmxvYXRdKSIsCiAgICAgICAgIlJldHVybnMgZWl0aGVyIGEgc3RyaW5nIG9yIGEgZmxvYXQgY29udGFpbmluZyB0aGUgY3VycmVudCB0aW1lIGluIHNlY29uZHMgYW5kIG1pY3Jvc2Vjb25kcyIKICAgIF0sCiAgICAibWltZV9jb250ZW50X3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBtaW1lX2NvbnRlbnRfdHlwZShzdHJpbmcgZmlsZW5hbWV8cmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIlJldHVybiBjb250ZW50LXR5cGUgZm9yIGZpbGUiCiAgICBdLAogICAgIm1pbiI6IFsKICAgICAgICAibWl4ZWQgbWluKG1peGVkIGFyZzEgWywgbWl4ZWQgYXJnMiBbLCBtaXhlZCAuLi5dXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGxvd2VzdCB2YWx1ZSBpbiBhbiBhcnJheSBvciBhIHNlcmllcyBvZiBhcmd1bWVudHMiCiAgICBdLAogICAgIm1rZGlyIjogWwogICAgICAgICJib29sIG1rZGlyKHN0cmluZyBwYXRobmFtZSBbLCBpbnQgbW9kZSBbLCBib29sIHJlY3Vyc2l2ZSBbLCByZXNvdXJjZSBjb250ZXh0XV1dKSIsCiAgICAgICAgIkNyZWF0ZSBhIGRpcmVjdG9yeSIKICAgIF0sCiAgICAibWt0aW1lIjogWwogICAgICAgICJpbnQgbWt0aW1lKFtpbnQgaG91ciBbLCBpbnQgbWluIFssIGludCBzZWMgWywgaW50IG1vbiBbLCBpbnQgZGF5IFssIGludCB5ZWFyXV1dXV1dKSIsCiAgICAgICAgIkdldCBVTklYIHRpbWVzdGFtcCBmb3IgYSBkYXRlIgogICAgXSwKICAgICJtb25leV9mb3JtYXQiOiBbCiAgICAgICAgInN0cmluZyBtb25leV9mb3JtYXQoc3RyaW5nIGZvcm1hdCAsIGZsb2F0IHZhbHVlKSIsCiAgICAgICAgIkNvbnZlcnQgbW9uZXRhcnkgdmFsdWUocykgdG8gc3RyaW5nIgogICAgXSwKICAgICJtb3ZlX3VwbG9hZGVkX2ZpbGUiOiBbCiAgICAgICAgImJvb2wgbW92ZV91cGxvYWRlZF9maWxlKHN0cmluZyBwYXRoLCBzdHJpbmcgbmV3X3BhdGgpIiwKICAgICAgICAiTW92ZSBhIGZpbGUgaWYgYW5kIG9ubHkgaWYgaXQgd2FzIGNyZWF0ZWQgYnkgYW4gdXBsb2FkIgogICAgXSwKICAgICJtc2dfZ2V0X3F1ZXVlIjogWwogICAgICAgICJyZXNvdXJjZSBtc2dfZ2V0X3F1ZXVlKGludCBrZXkgWywgaW50IHBlcm1zXSkiLAogICAgICAgICJBdHRhY2ggdG8gYSBtZXNzYWdlIHF1ZXVlIgogICAgXSwKICAgICJtc2dfcXVldWVfZXhpc3RzIjogWwogICAgICAgICJib29sIG1zZ19xdWV1ZV9leGlzdHMoaW50IGtleSkiLAogICAgICAgICJDaGVjayB3aGV0aGVyIGEgbWVzc2FnZSBxdWV1ZSBleGlzdHMiCiAgICBdLAogICAgIm1zZ19yZWNlaXZlIjogWwogICAgICAgICJtaXhlZCBtc2dfcmVjZWl2ZShyZXNvdXJjZSBxdWV1ZSwgaW50IGRlc2lyZWRtc2d0eXBlLCBpbnQgJm1zZ3R5cGUsIGludCBtYXhzaXplLCBtaXhlZCBtZXNzYWdlIFssIGJvb2wgdW5zZXJpYWxpemU9dHJ1ZSBbLCBpbnQgZmxhZ3M9MCBbLCBpbnQgZXJyb3Jjb2RlXV1dKSIsCiAgICAgICAgIlNlbmQgYSBtZXNzYWdlIG9mIHR5cGUgbXNndHlwZSAobXVzdCBiZSA+IDApIHRvIGEgbWVzc2FnZSBxdWV1ZSIKICAgIF0sCiAgICAibXNnX3JlbW92ZV9xdWV1ZSI6IFsKICAgICAgICAiYm9vbCBtc2dfcmVtb3ZlX3F1ZXVlKHJlc291cmNlIHF1ZXVlKSIsCiAgICAgICAgIkRlc3Ryb3kgdGhlIHF1ZXVlIgogICAgXSwKICAgICJtc2dfc2VuZCI6IFsKICAgICAgICAiYm9vbCBtc2dfc2VuZChyZXNvdXJjZSBxdWV1ZSwgaW50IG1zZ3R5cGUsIG1peGVkIG1lc3NhZ2UgWywgYm9vbCBzZXJpYWxpemU9dHJ1ZSBbLCBib29sIGJsb2NraW5nPXRydWUgWywgaW50IGVycm9yY29kZV1dXSkiLAogICAgICAgICJTZW5kIGEgbWVzc2FnZSBvZiB0eXBlIG1zZ3R5cGUgKG11c3QgYmUgPiAwKSB0byBhIG1lc3NhZ2UgcXVldWUiCiAgICBdLAogICAgIm1zZ19zZXRfcXVldWUiOiBbCiAgICAgICAgImJvb2wgbXNnX3NldF9xdWV1ZShyZXNvdXJjZSBxdWV1ZSwgYXJyYXkgZGF0YSkiLAogICAgICAgICJTZXQgaW5mb3JtYXRpb24gZm9yIGEgbWVzc2FnZSBxdWV1ZSIKICAgIF0sCiAgICAibXNnX3N0YXRfcXVldWUiOiBbCiAgICAgICAgImFycmF5IG1zZ19zdGF0X3F1ZXVlKHJlc291cmNlIHF1ZXVlKSIsCiAgICAgICAgIlJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBtZXNzYWdlIHF1ZXVlIgogICAgXSwKICAgICJtc2dmbXRfY3JlYXRlIjogWwogICAgICAgICJNZXNzYWdlRm9ybWF0dGVyIG1zZ2ZtdF9jcmVhdGUoIHN0cmluZyAkbG9jYWxlLCBzdHJpbmcgJHBhdHRlcm4gKSIsCiAgICAgICAgIiogQ3JlYXRlIGZvcm1hdHRlci4iCiAgICBdLAogICAgIm1zZ2ZtdF9mb3JtYXQiOiBbCiAgICAgICAgIm1peGVkIG1zZ2ZtdF9mb3JtYXQoIE1lc3NhZ2VGb3JtYXR0ZXIgJG5mLCBhcnJheSAkYXJncyApIiwKICAgICAgICAiKiBGb3JtYXQgYSBtZXNzYWdlLiIKICAgIF0sCiAgICAibXNnZm10X2Zvcm1hdF9tZXNzYWdlIjogWwogICAgICAgICJtaXhlZCBtc2dmbXRfZm9ybWF0X21lc3NhZ2UoIHN0cmluZyAkbG9jYWxlLCBzdHJpbmcgJHBhdHRlcm4sIGFycmF5ICRhcmdzICkiLAogICAgICAgICIqIEZvcm1hdCBhIG1lc3NhZ2UuIgogICAgXSwKICAgICJtc2dmbXRfZ2V0X2Vycm9yX2NvZGUiOiBbCiAgICAgICAgImludCBtc2dmbXRfZ2V0X2Vycm9yX2NvZGUoIE1lc3NhZ2VGb3JtYXR0ZXIgJG5mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJtc2dmbXRfZ2V0X2Vycm9yX21lc3NhZ2UiOiBbCiAgICAgICAgInN0cmluZyBtc2dmbXRfZ2V0X2Vycm9yX21lc3NhZ2UoIE1lc3NhZ2VGb3JtYXR0ZXIgJGNvbGwgKSIsCiAgICAgICAgIiogR2V0IHRleHQgZGVzY3JpcHRpb24gZm9yIGZvcm1hdHRlcidzIGxhc3QgZXJyb3IgY29kZS4iCiAgICBdLAogICAgIm1zZ2ZtdF9nZXRfbG9jYWxlIjogWwogICAgICAgICJzdHJpbmcgbXNnZm10X2dldF9sb2NhbGUoTWVzc2FnZUZvcm1hdHRlciAkbWYpIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGxvY2FsZS4iCiAgICBdLAogICAgIm1zZ2ZtdF9nZXRfcGF0dGVybiI6IFsKICAgICAgICAic3RyaW5nIG1zZ2ZtdF9nZXRfcGF0dGVybiggTWVzc2FnZUZvcm1hdHRlciAkbWYgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBwYXR0ZXJuLiIKICAgIF0sCiAgICAibXNnZm10X3BhcnNlIjogWwogICAgICAgICJhcnJheSBtc2dmbXRfcGFyc2UoIE1lc3NhZ2VGb3JtYXR0ZXIgJG5mLCBzdHJpbmcgJHNvdXJjZSApIiwKICAgICAgICAiKiBQYXJzZSBhIG1lc3NhZ2UuIgogICAgXSwKICAgICJtc2dmbXRfc2V0X3BhdHRlcm4iOiBbCiAgICAgICAgImJvb2wgbXNnZm10X3NldF9wYXR0ZXJuKCBNZXNzYWdlRm9ybWF0dGVyICRtZiwgc3RyaW5nICRwYXR0ZXJuICkiLAogICAgICAgICIqIFNldCBmb3JtYXR0ZXIgcGF0dGVybi4iCiAgICBdLAogICAgIm1zc3FsX2JpbmQiOiBbCiAgICAgICAgImJvb2wgbXNzcWxfYmluZChyZXNvdXJjZSBzdG10LCBzdHJpbmcgcGFyYW1fbmFtZSwgbWl4ZWQgdmFyLCBpbnQgdHlwZSBbLCBib29sIGlzX291dHB1dCBbLCBib29sIGlzX251bGwgWywgaW50IG1heGxlbl1dXSkiLAogICAgICAgICJBZGRzIGEgcGFyYW1ldGVyIHRvIGEgc3RvcmVkIHByb2NlZHVyZSBvciBhIHJlbW90ZSBzdG9yZWQgcHJvY2VkdXJlIgogICAgXSwKICAgICJtc3NxbF9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBtc3NxbF9jbG9zZShbcmVzb3VyY2UgY29ubl9pZF0pIiwKICAgICAgICAiQ2xvc2VzIGEgY29ubmVjdGlvbiB0byBhIE1TLVNRTCBzZXJ2ZXIiCiAgICBdLAogICAgIm1zc3FsX2Nvbm5lY3QiOiBbCiAgICAgICAgImludCBtc3NxbF9jb25uZWN0KFtzdHJpbmcgc2VydmVybmFtZSBbLCBzdHJpbmcgdXNlcm5hbWUgWywgc3RyaW5nIHBhc3N3b3JkIFssIGJvb2wgbmV3X2xpbmtdXV1dKSIsCiAgICAgICAgIkVzdGFibGlzaGVzIGEgY29ubmVjdGlvbiB0byBhIE1TLVNRTCBzZXJ2ZXIiCiAgICBdLAogICAgIm1zc3FsX2RhdGFfc2VlayI6IFsKICAgICAgICAiYm9vbCBtc3NxbF9kYXRhX3NlZWsocmVzb3VyY2UgcmVzdWx0X2lkLCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIk1vdmVzIHRoZSBpbnRlcm5hbCByb3cgcG9pbnRlciBvZiB0aGUgTVMtU1FMIHJlc3VsdCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCByZXN1bHQgaWRlbnRpZmllciB0byBwb2ludGVyIHRvIHRoZSBzcGVjaWZpZWQgcm93IG51bWJlciIKICAgIF0sCiAgICAibXNzcWxfZXhlY3V0ZSI6IFsKICAgICAgICAibWl4ZWQgbXNzcWxfZXhlY3V0ZShyZXNvdXJjZSBzdG10IFssIGJvb2wgc2tpcF9yZXN1bHRzID0gZmFsc2VdKSIsCiAgICAgICAgIkV4ZWN1dGVzIGEgc3RvcmVkIHByb2NlZHVyZSBvbiBhIE1TLVNRTCBzZXJ2ZXIgZGF0YWJhc2UiCiAgICBdLAogICAgIm1zc3FsX2ZldGNoX2FycmF5IjogWwogICAgICAgICJhcnJheSBtc3NxbF9mZXRjaF9hcnJheShyZXNvdXJjZSByZXN1bHRfaWQgWywgaW50IHJlc3VsdF90eXBlXSkiLAogICAgICAgICJSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHRoZSBjdXJyZW50IHJvdyBpbiB0aGUgcmVzdWx0IHNldCBzcGVjaWZpZWQgYnkgcmVzdWx0X2lkIgogICAgXSwKICAgICJtc3NxbF9mZXRjaF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgbXNzcWxfZmV0Y2hfYXNzb2MocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgdGhlIGN1cnJlbnQgcm93IGluIHRoZSByZXN1bHQgc2V0IHNwZWNpZmllZCBieSByZXN1bHRfaWQiCiAgICBdLAogICAgIm1zc3FsX2ZldGNoX2JhdGNoIjogWwogICAgICAgICJpbnQgbXNzcWxfZmV0Y2hfYmF0Y2gocmVzb3VyY2UgcmVzdWx0X2luZGV4KSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5leHQgYmF0Y2ggb2YgcmVjb3JkcyIKICAgIF0sCiAgICAibXNzcWxfZmV0Y2hfZmllbGQiOiBbCiAgICAgICAgIm9iamVjdCBtc3NxbF9mZXRjaF9maWVsZChyZXNvdXJjZSByZXN1bHRfaWQgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBjZXJ0YWluIGZpZWxkcyBpbiBhIHF1ZXJ5IHJlc3VsdCIKICAgIF0sCiAgICAibXNzcWxfZmV0Y2hfb2JqZWN0IjogWwogICAgICAgICJvYmplY3QgbXNzcWxfZmV0Y2hfb2JqZWN0KHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJSZXR1cm5zIGEgcHNldWRvLW9iamVjdCBvZiB0aGUgY3VycmVudCByb3cgaW4gdGhlIHJlc3VsdCBzZXQgc3BlY2lmaWVkIGJ5IHJlc3VsdF9pZCIKICAgIF0sCiAgICAibXNzcWxfZmV0Y2hfcm93IjogWwogICAgICAgICJhcnJheSBtc3NxbF9mZXRjaF9yb3cocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGN1cnJlbnQgcm93IGluIHRoZSByZXN1bHQgc2V0IHNwZWNpZmllZCBieSByZXN1bHRfaWQiCiAgICBdLAogICAgIm1zc3FsX2ZpZWxkX2xlbmd0aCI6IFsKICAgICAgICAiaW50IG1zc3FsX2ZpZWxkX2xlbmd0aChyZXNvdXJjZSByZXN1bHRfaWQgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiR2V0IHRoZSBsZW5ndGggb2YgYSBNUy1TUUwgZmllbGQiCiAgICBdLAogICAgIm1zc3FsX2ZpZWxkX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBtc3NxbF9maWVsZF9uYW1lKHJlc291cmNlIHJlc3VsdF9pZCBbLCBpbnQgb2Zmc2V0XSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCBnaXZlbiBieSBvZmZzZXQgaW4gdGhlIHJlc3VsdCBzZXQgZ2l2ZW4gYnkgcmVzdWx0X2lkIgogICAgXSwKICAgICJtc3NxbF9maWVsZF9zZWVrIjogWwogICAgICAgICJib29sIG1zc3FsX2ZpZWxkX3NlZWsocmVzb3VyY2UgcmVzdWx0X2lkLCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIlNlZWtzIHRvIHRoZSBzcGVjaWZpZWQgZmllbGQgb2Zmc2V0IgogICAgXSwKICAgICJtc3NxbF9maWVsZF90eXBlIjogWwogICAgICAgICJzdHJpbmcgbXNzcWxfZmllbGRfdHlwZShyZXNvdXJjZSByZXN1bHRfaWQgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgdHlwZSBvZiBhIGZpZWxkIgogICAgXSwKICAgICJtc3NxbF9mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBtc3NxbF9mcmVlX3Jlc3VsdChyZXNvdXJjZSByZXN1bHRfaW5kZXgpIiwKICAgICAgICAiRnJlZSBhIE1TLVNRTCByZXN1bHQgaW5kZXgiCiAgICBdLAogICAgIm1zc3FsX2ZyZWVfc3RhdGVtZW50IjogWwogICAgICAgICJib29sIG1zc3FsX2ZyZWVfc3RhdGVtZW50KHJlc291cmNlIHJlc3VsdF9pbmRleCkiLAogICAgICAgICJGcmVlIGEgTVMtU1FMIHN0YXRlbWVudCBpbmRleCIKICAgIF0sCiAgICAibXNzcWxfZ2V0X2xhc3RfbWVzc2FnZSI6IFsKICAgICAgICAic3RyaW5nIG1zc3FsX2dldF9sYXN0X21lc3NhZ2Uodm9pZCkiLAogICAgICAgICJHZXRzIHRoZSBsYXN0IG1lc3NhZ2UgZnJvbSB0aGUgTVMtU1FMIHNlcnZlciIKICAgIF0sCiAgICAibXNzcWxfZ3VpZF9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyBtc3NxbF9ndWlkX3N0cmluZyhzdHJpbmcgYmluYXJ5IFssYm9vbCBzaG9ydF9mb3JtYXRdKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgMTYgYnl0ZSBiaW5hcnkgR1VJRCB0byBhIHN0cmluZyIKICAgIF0sCiAgICAibXNzcWxfaW5pdCI6IFsKICAgICAgICAiaW50IG1zc3FsX2luaXQoc3RyaW5nIHNwX25hbWUgWywgcmVzb3VyY2UgY29ubl9pZF0pIiwKICAgICAgICAiSW5pdGlhbGl6ZXMgYSBzdG9yZWQgcHJvY2VkdXJlIG9yIGEgcmVtb3RlIHN0b3JlZCBwcm9jZWR1cmUiCiAgICBdLAogICAgIm1zc3FsX21pbl9lcnJvcl9zZXZlcml0eSI6IFsKICAgICAgICAidm9pZCBtc3NxbF9taW5fZXJyb3Jfc2V2ZXJpdHkoaW50IHNldmVyaXR5KSIsCiAgICAgICAgIlNldHMgdGhlIGxvd2VyIGVycm9yIHNldmVyaXR5IgogICAgXSwKICAgICJtc3NxbF9taW5fbWVzc2FnZV9zZXZlcml0eSI6IFsKICAgICAgICAidm9pZCBtc3NxbF9taW5fbWVzc2FnZV9zZXZlcml0eShpbnQgc2V2ZXJpdHkpIiwKICAgICAgICAiU2V0cyB0aGUgbG93ZXIgbWVzc2FnZSBzZXZlcml0eSIKICAgIF0sCiAgICAibXNzcWxfbmV4dF9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbXNzcWxfbmV4dF9yZXN1bHQocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIk1vdmUgdGhlIGludGVybmFsIHJlc3VsdCBwb2ludGVyIHRvIHRoZSBuZXh0IHJlc3VsdCIKICAgIF0sCiAgICAibXNzcWxfbnVtX2ZpZWxkcyI6IFsKICAgICAgICAiaW50IG1zc3FsX251bV9maWVsZHMocmVzb3VyY2UgbXNzcWxfcmVzdWx0X2luZGV4KSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMgZmV0Y2hlZCBpbiBmcm9tIHRoZSByZXN1bHQgaWQgc3BlY2lmaWVkIgogICAgXSwKICAgICJtc3NxbF9udW1fcm93cyI6IFsKICAgICAgICAiaW50IG1zc3FsX251bV9yb3dzKHJlc291cmNlIG1zc3FsX3Jlc3VsdF9pbmRleCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBmZXRjaGVkIGluIGZyb20gdGhlIHJlc3VsdCBpZCBzcGVjaWZpZWQiCiAgICBdLAogICAgIm1zc3FsX3Bjb25uZWN0IjogWwogICAgICAgICJpbnQgbXNzcWxfcGNvbm5lY3QoW3N0cmluZyBzZXJ2ZXJuYW1lIFssIHN0cmluZyB1c2VybmFtZSBbLCBzdHJpbmcgcGFzc3dvcmQgWywgYm9vbCBuZXdfbGlua11dXV0pIiwKICAgICAgICAiRXN0YWJsaXNoZXMgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gYSBNUy1TUUwgc2VydmVyIgogICAgXSwKICAgICJtc3NxbF9xdWVyeSI6IFsKICAgICAgICAicmVzb3VyY2UgbXNzcWxfcXVlcnkoc3RyaW5nIHF1ZXJ5IFssIHJlc291cmNlIGNvbm5faWQgWywgaW50IGJhdGNoX3NpemVdXSkiLAogICAgICAgICJQZXJmb3JtIGFuIFNRTCBxdWVyeSBvbiBhIE1TLVNRTCBzZXJ2ZXIgZGF0YWJhc2UiCiAgICBdLAogICAgIm1zc3FsX3Jlc3VsdCI6IFsKICAgICAgICAic3RyaW5nIG1zc3FsX3Jlc3VsdChyZXNvdXJjZSByZXN1bHRfaWQsIGludCByb3csIG1peGVkIGZpZWxkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGNvbnRlbnRzIG9mIG9uZSBjZWxsIGZyb20gYSBNUy1TUUwgcmVzdWx0IHNldCIKICAgIF0sCiAgICAibXNzcWxfcm93c19hZmZlY3RlZCI6IFsKICAgICAgICAiaW50IG1zc3FsX3Jvd3NfYWZmZWN0ZWQocmVzb3VyY2UgY29ubl9pZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBhZmZlY3RlZCBieSB0aGUgcXVlcnkiCiAgICBdLAogICAgIm1zc3FsX3NlbGVjdF9kYiI6IFsKICAgICAgICAiYm9vbCBtc3NxbF9zZWxlY3RfZGIoc3RyaW5nIGRhdGFiYXNlX25hbWUgWywgcmVzb3VyY2UgY29ubl9pZF0pIiwKICAgICAgICAiU2VsZWN0IGEgTVMtU1FMIGRhdGFiYXNlIgogICAgXSwKICAgICJtdF9nZXRyYW5kbWF4IjogWwogICAgICAgICJpbnQgbXRfZ2V0cmFuZG1heCh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG1heGltdW0gdmFsdWUgYSByYW5kb20gbnVtYmVyIGZyb20gTWVyc2VubmUgVHdpc3RlciBjYW4gaGF2ZSIKICAgIF0sCiAgICAibXRfcmFuZCI6IFsKICAgICAgICAiaW50IG10X3JhbmQoW2ludCBtaW4sIGludCBtYXhdKSIsCiAgICAgICAgIlJldHVybnMgYSByYW5kb20gbnVtYmVyIGZyb20gTWVyc2VubmUgVHdpc3RlciIKICAgIF0sCiAgICAibXRfc3JhbmQiOiBbCiAgICAgICAgInZvaWQgbXRfc3JhbmQoW2ludCBzZWVkXSkiLAogICAgICAgICJTZWVkcyBNZXJzZW5uZSBUd2lzdGVyIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIgogICAgXSwKICAgICJteXNxbF9hZmZlY3RlZF9yb3dzIjogWwogICAgICAgICJpbnQgbXlzcWxfYWZmZWN0ZWRfcm93cyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiR2V0cyBudW1iZXIgb2YgYWZmZWN0ZWQgcm93cyBpbiBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsX2NsaWVudF9lbmNvZGluZyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2NsaWVudF9lbmNvZGluZyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZGVmYXVsdCBjaGFyYWN0ZXIgc2V0IGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uIgogICAgXSwKICAgICJteXNxbF9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBteXNxbF9jbG9zZShbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiQ2xvc2UgYSBNeVNRTCBjb25uZWN0aW9uIgogICAgXSwKICAgICJteXNxbF9jb25uZWN0IjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF9jb25uZWN0KFtzdHJpbmcgaG9zdG5hbWVbOnBvcnRdWzovcGF0aC90by9zb2NrZXRdIFssIHN0cmluZyB1c2VybmFtZSBbLCBzdHJpbmcgcGFzc3dvcmQgWywgYm9vbCBuZXcgWywgaW50IGZsYWdzXV1dXV0pIiwKICAgICAgICAiT3BlbnMgYSBjb25uZWN0aW9uIHRvIGEgTXlTUUwgU2VydmVyIgogICAgXSwKICAgICJteXNxbF9jcmVhdGVfZGIiOiBbCiAgICAgICAgImJvb2wgbXlzcWxfY3JlYXRlX2RiKHN0cmluZyBkYXRhYmFzZV9uYW1lIFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIkNyZWF0ZSBhIE15U1FMIGRhdGFiYXNlIgogICAgXSwKICAgICJteXNxbF9kYXRhX3NlZWsiOiBbCiAgICAgICAgImJvb2wgbXlzcWxfZGF0YV9zZWVrKHJlc291cmNlIHJlc3VsdCwgaW50IHJvd19udW1iZXIpIiwKICAgICAgICAiTW92ZSBpbnRlcm5hbCByZXN1bHQgcG9pbnRlciIKICAgIF0sCiAgICAibXlzcWxfZGJfcXVlcnkiOiBbCiAgICAgICAgInJlc291cmNlIG15c3FsX2RiX3F1ZXJ5KHN0cmluZyBkYXRhYmFzZV9uYW1lLCBzdHJpbmcgcXVlcnkgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiU2VuZHMgYW4gU1FMIHF1ZXJ5IHRvIE15U1FMIgogICAgXSwKICAgICJteXNxbF9kcm9wX2RiIjogWwogICAgICAgICJib29sIG15c3FsX2Ryb3BfZGIoc3RyaW5nIGRhdGFiYXNlX25hbWUgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiRHJvcHMgKGRlbGV0ZSkgYSBNeVNRTCBkYXRhYmFzZSIKICAgIF0sCiAgICAibXlzcWxfZXJybm8iOiBbCiAgICAgICAgImludCBteXNxbF9lcnJubyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gcHJldmlvdXMgTXlTUUwgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbF9lcnJvciI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2Vycm9yKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSB0ZXh0IG9mIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gcHJldmlvdXMgTXlTUUwgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbF9lc2NhcGVfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfZXNjYXBlX3N0cmluZyhzdHJpbmcgdG9fYmVfZXNjYXBlZCkiLAogICAgICAgICJFc2NhcGUgc3RyaW5nIGZvciBteXNxbCBxdWVyeSIKICAgIF0sCiAgICAibXlzcWxfZmV0Y2hfYXJyYXkiOiBbCiAgICAgICAgImFycmF5IG15c3FsX2ZldGNoX2FycmF5KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgcmVzdWx0X3R5cGVdKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhcnJheSAoYXNzb2NpYXRpdmUsIG51bWVyaWMgb3IgYm90aCkiCiAgICBdLAogICAgIm15c3FsX2ZldGNoX2Fzc29jIjogWwogICAgICAgICJhcnJheSBteXNxbF9mZXRjaF9hc3NvYyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IgogICAgXSwKICAgICJteXNxbF9mZXRjaF9maWVsZCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsX2ZldGNoX2ZpZWxkKHJlc291cmNlIHJlc3VsdCBbLCBpbnQgZmllbGRfb2Zmc2V0XSkiLAogICAgICAgICJHZXRzIGNvbHVtbiBpbmZvcm1hdGlvbiBmcm9tIGEgcmVzdWx0IGFuZCByZXR1cm4gYXMgYW4gb2JqZWN0IgogICAgXSwKICAgICJteXNxbF9mZXRjaF9sZW5ndGhzIjogWwogICAgICAgICJhcnJheSBteXNxbF9mZXRjaF9sZW5ndGhzKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXRzIG1heCBkYXRhIHNpemUgb2YgZWFjaCBjb2x1bW4gaW4gYSByZXN1bHQiCiAgICBdLAogICAgIm15c3FsX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsX2ZldGNoX29iamVjdChyZXNvdXJjZSByZXN1bHQgWywgc3RyaW5nIGNsYXNzX25hbWUgWywgTlVMTHxhcnJheSBjdG9yX3BhcmFtc11dKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBvYmplY3QiCiAgICBdLAogICAgIm15c3FsX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYXJyYXkgbXlzcWxfZmV0Y2hfcm93KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXRzIGEgcmVzdWx0IHJvdyBhcyBhbiBlbnVtZXJhdGVkIGFycmF5IgogICAgXSwKICAgICJteXNxbF9maWVsZF9mbGFncyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2ZpZWxkX2ZsYWdzKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX29mZnNldCkiLAogICAgICAgICJHZXRzIHRoZSBmbGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBmaWVsZCBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxfZmllbGRfbGVuIjogWwogICAgICAgICJpbnQgbXlzcWxfZmllbGRfbGVuKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX29mZnNldCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZCBmaWVsZCIKICAgIF0sCiAgICAibXlzcWxfZmllbGRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2ZpZWxkX25hbWUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfaW5kZXgpIiwKICAgICAgICAiR2V0cyB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZpZWxkIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJteXNxbF9maWVsZF9zZWVrIjogWwogICAgICAgICJib29sIG15c3FsX2ZpZWxkX3NlZWsocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfb2Zmc2V0KSIsCiAgICAgICAgIlNldHMgcmVzdWx0IHBvaW50ZXIgdG8gYSBzcGVjaWZpYyBmaWVsZCBvZmZzZXQiCiAgICBdLAogICAgIm15c3FsX2ZpZWxkX3RhYmxlIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfZmllbGRfdGFibGUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfb2Zmc2V0KSIsCiAgICAgICAgIkdldHMgbmFtZSBvZiB0aGUgdGFibGUgdGhlIHNwZWNpZmllZCBmaWVsZCBpcyBpbiIKICAgIF0sCiAgICAibXlzcWxfZmllbGRfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2ZpZWxkX3R5cGUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfb2Zmc2V0KSIsCiAgICAgICAgIkdldHMgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxfZnJlZV9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxfZnJlZV9yZXN1bHQocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkZyZWUgcmVzdWx0IG1lbW9yeSIKICAgIF0sCiAgICAibXlzcWxfZ2V0X2NsaWVudF9pbmZvIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfZ2V0X2NsaWVudF9pbmZvKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNsaWVudCBsaWJyYXJ5IHZlcnNpb24iCiAgICBdLAogICAgIm15c3FsX2dldF9ob3N0X2luZm8iOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9nZXRfaG9zdF9pbmZvKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJSZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgY29ubmVjdGlvbiBpbiB1c2UsIGluY2x1ZGluZyB0aGUgc2VydmVyIGhvc3QgbmFtZSIKICAgIF0sCiAgICAibXlzcWxfZ2V0X3Byb3RvX2luZm8iOiBbCiAgICAgICAgImludCBteXNxbF9nZXRfcHJvdG9faW5mbyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgcHJvdG9jb2wgdmVyc2lvbiB1c2VkIGJ5IGN1cnJlbnQgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxfZ2V0X3NlcnZlcl9pbmZvIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfZ2V0X3NlcnZlcl9pbmZvKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJSZXR1cm5zIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyB0aGUgc2VydmVyIHZlcnNpb24gbnVtYmVyIgogICAgXSwKICAgICJteXNxbF9pbmZvIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfaW5mbyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtb3N0IHJlY2VudCBxdWVyeSIKICAgIF0sCiAgICAibXlzcWxfaW5zZXJ0X2lkIjogWwogICAgICAgICJpbnQgbXlzcWxfaW5zZXJ0X2lkKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJHZXRzIHRoZSBJRCBnZW5lcmF0ZWQgZnJvbSB0aGUgcHJldmlvdXMgSU5TRVJUIG9wZXJhdGlvbiIKICAgIF0sCiAgICAibXlzcWxfbGlzdF9kYnMiOiBbCiAgICAgICAgInJlc291cmNlIG15c3FsX2xpc3RfZGJzKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJMaXN0IGRhdGFiYXNlcyBhdmFpbGFibGUgb24gYSBNeVNRTCBzZXJ2ZXIiCiAgICBdLAogICAgIm15c3FsX2xpc3RfZmllbGRzIjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF9saXN0X2ZpZWxkcyhzdHJpbmcgZGF0YWJhc2VfbmFtZSwgc3RyaW5nIHRhYmxlX25hbWUgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiTGlzdCBNeVNRTCByZXN1bHQgZmllbGRzIgogICAgXSwKICAgICJteXNxbF9saXN0X3Byb2Nlc3NlcyI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxfbGlzdF9wcm9jZXNzZXMoW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgc2V0IGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc2VydmVyIHRocmVhZHMiCiAgICBdLAogICAgIm15c3FsX2xpc3RfdGFibGVzIjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF9saXN0X3RhYmxlcyhzdHJpbmcgZGF0YWJhc2VfbmFtZSBbLCBpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJMaXN0IHRhYmxlcyBpbiBhIE15U1FMIGRhdGFiYXNlIgogICAgXSwKICAgICJteXNxbF9udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgbXlzcWxfbnVtX2ZpZWxkcyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiR2V0cyBudW1iZXIgb2YgZmllbGRzIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJteXNxbF9udW1fcm93cyI6IFsKICAgICAgICAiaW50IG15c3FsX251bV9yb3dzKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXRzIG51bWJlciBvZiByb3dzIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJteXNxbF9wY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxfcGNvbm5lY3QoW3N0cmluZyBob3N0bmFtZVs6cG9ydF1bOi9wYXRoL3RvL3NvY2tldF0gWywgc3RyaW5nIHVzZXJuYW1lIFssIHN0cmluZyBwYXNzd29yZCBbLCBpbnQgZmxhZ3NdXV1dKSIsCiAgICAgICAgIk9wZW5zIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGEgTXlTUUwgU2VydmVyIgogICAgXSwKICAgICJteXNxbF9waW5nIjogWwogICAgICAgICJib29sIG15c3FsX3BpbmcoW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlBpbmcgYSBzZXJ2ZXIgY29ubmVjdGlvbi4gSWYgbm8gY29ubmVjdGlvbiB0aGVuIHJlY29ubmVjdC4iCiAgICBdLAogICAgIm15c3FsX3F1ZXJ5IjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF9xdWVyeShzdHJpbmcgcXVlcnkgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiU2VuZHMgYW4gU1FMIHF1ZXJ5IHRvIE15U1FMIgogICAgXSwKICAgICJteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoc3RyaW5nIHRvX2JlX2VzY2FwZWQgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBmb3IgdXNlIGluIGEgU1FMIHN0YXRlbWVudCwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgY3VycmVudCBjaGFyc2V0IG9mIHRoZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJteXNxbF9yZXN1bHQiOiBbCiAgICAgICAgIm1peGVkIG15c3FsX3Jlc3VsdChyZXNvdXJjZSByZXN1bHQsIGludCByb3cgWywgbWl4ZWQgZmllbGRdKSIsCiAgICAgICAgIkdldHMgcmVzdWx0IGRhdGEiCiAgICBdLAogICAgIm15c3FsX3NlbGVjdF9kYiI6IFsKICAgICAgICAiYm9vbCBteXNxbF9zZWxlY3RfZGIoc3RyaW5nIGRhdGFiYXNlX25hbWUgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiU2VsZWN0cyBhIE15U1FMIGRhdGFiYXNlIgogICAgXSwKICAgICJteXNxbF9zZXRfY2hhcnNldCI6IFsKICAgICAgICAiYm9vbCBteXNxbF9zZXRfY2hhcnNldChzdHJpbmcgY3NuYW1lIFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgInNldHMgY2xpZW50IGNoYXJhY3RlciBzZXQiCiAgICBdLAogICAgIm15c3FsX3N0YXQiOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9zdGF0KFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgc3RhdHVzIGluZm9ybWF0aW9uIgogICAgXSwKICAgICJteXNxbF90aHJlYWRfaWQiOiBbCiAgICAgICAgImludCBteXNxbF90aHJlYWRfaWQoW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHRocmVhZCBpZCBvZiBjdXJyZW50IGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm15c3FsX3VuYnVmZmVyZWRfcXVlcnkiOiBbCiAgICAgICAgInJlc291cmNlIG15c3FsX3VuYnVmZmVyZWRfcXVlcnkoc3RyaW5nIHF1ZXJ5IFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlNlbmRzIGFuIFNRTCBxdWVyeSB0byBNeVNRTCwgd2l0aG91dCBmZXRjaGluZyBhbmQgYnVmZmVyaW5nIHRoZSByZXN1bHQgcm93cyIKICAgIF0sCiAgICAibXlzcWxpX2FmZmVjdGVkX3Jvd3MiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9hZmZlY3RlZF9yb3dzKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCBudW1iZXIgb2YgYWZmZWN0ZWQgcm93cyBpbiBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9hdXRvY29tbWl0IjogWwogICAgICAgICJib29sIG15c3FsaV9hdXRvY29tbWl0KG9iamVjdCBsaW5rLCBib29sIG1vZGUpIiwKICAgICAgICAiVHVybiBhdXRvIGNvbW1pdCBvbiBvciBvZiIKICAgIF0sCiAgICAibXlzcWxpX2NhY2hlX3N0YXRzIjogWwogICAgICAgICJhcnJheSBteXNxbGlfY2FjaGVfc3RhdHModm9pZCkiLAogICAgICAgICJSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHp2YWwgY2FjaGUiCiAgICBdLAogICAgIm15c3FsaV9jaGFuZ2VfdXNlciI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfY2hhbmdlX3VzZXIob2JqZWN0IGxpbmssIHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzc3dvcmQsIHN0cmluZyBkYXRhYmFzZSkiLAogICAgICAgICJDaGFuZ2UgbG9nZ2VkLWluIHVzZXIgb2YgdGhlIGFjdGl2ZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJteXNxbGlfY2hhcmFjdGVyX3NldF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxpX2NoYXJhY3Rlcl9zZXRfbmFtZShvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjaGFyYWN0ZXIgc2V0IHVzZWQgZm9yIHRoaXMgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2Nsb3NlIjogWwogICAgICAgICJib29sIG15c3FsaV9jbG9zZShvYmplY3QgbGluaykiLAogICAgICAgICJDbG9zZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJteXNxbGlfY29tbWl0IjogWwogICAgICAgICJib29sIG15c3FsaV9jb21taXQob2JqZWN0IGxpbmspIiwKICAgICAgICAiQ29tbWl0IG91dHN0YW5kaW5nIGFjdGlvbnMgYW5kIGNsb3NlIHRyYW5zYWN0aW9uIgogICAgXSwKICAgICJteXNxbGlfY29ubmVjdCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsaV9jb25uZWN0KFtzdHJpbmcgaG9zdG5hbWUgWyxzdHJpbmcgdXNlcm5hbWUgWyxzdHJpbmcgcGFzc3dkIFssc3RyaW5nIGRibmFtZSBbLGludCBwb3J0IFssc3RyaW5nIHNvY2tldF1dXV1dXSkiLAogICAgICAgICJPcGVuIGEgY29ubmVjdGlvbiB0byBhIG15c3FsIHNlcnZlciIKICAgIF0sCiAgICAibXlzcWxpX2Nvbm5lY3RfZXJybm8iOiBbCiAgICAgICAgImludCBteXNxbGlfY29ubmVjdF9lcnJubyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWVyaWNhbCB2YWx1ZSBvZiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIGxhc3QgY29ubmVjdCBjb21tYW5kIgogICAgXSwKICAgICJteXNxbGlfY29ubmVjdF9lcnJvciI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9jb25uZWN0X2Vycm9yKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgdGV4dCBvZiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHByZXZpb3VzIE15U1FMIG9wZXJhdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2RhdGFfc2VlayI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfZGF0YV9zZWVrKG9iamVjdCByZXN1bHQsIGludCBvZmZzZXQpIiwKICAgICAgICAiTW92ZSBpbnRlcm5hbCByZXN1bHQgcG9pbnRlciIKICAgIF0sCiAgICAibXlzcWxpX2RlYnVnIjogWwogICAgICAgICJ2b2lkIG15c3FsaV9kZWJ1ZyhzdHJpbmcgZGVidWcpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfZHVtcF9kZWJ1Z19pbmZvIjogWwogICAgICAgICJib29sIG15c3FsaV9kdW1wX2RlYnVnX2luZm8ob2JqZWN0IGxpbmspIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfZW1iZWRkZWRfc2VydmVyX2VuZCI6IFsKICAgICAgICAidm9pZCBteXNxbGlfZW1iZWRkZWRfc2VydmVyX2VuZCh2b2lkKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX2VtYmVkZGVkX3NlcnZlcl9zdGFydCI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfZW1iZWRkZWRfc2VydmVyX3N0YXJ0KGJvb2wgc3RhcnQsIGFycmF5IGFyZ3VtZW50cywgYXJyYXkgZ3JvdXBzKSIsCiAgICAgICAgImluaXRpYWxpemUgYW5kIHN0YXJ0IGVtYmVkZGVkIHNlcnZlciIKICAgIF0sCiAgICAibXlzcWxpX2Vycm5vIjogWwogICAgICAgICJpbnQgbXlzcWxpX2Vycm5vKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWVyaWNhbCB2YWx1ZSBvZiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHByZXZpb3VzIE15U1FMIG9wZXJhdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxpX2Vycm9yKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHRleHQgb2YgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9hbGwiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9mZXRjaF9hbGwgKG9iamVjdCByZXN1bHQgWyxpbnQgcmVzdWx0dHlwZV0pIiwKICAgICAgICAiRmV0Y2hlcyBhbGwgcmVzdWx0IHJvd3MgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXksIGEgbnVtZXJpYyBhcnJheSwgb3IgYm90aCIKICAgIF0sCiAgICAibXlzcWxpX2ZldGNoX2FycmF5IjogWwogICAgICAgICJtaXhlZCBteXNxbGlfZmV0Y2hfYXJyYXkgKG9iamVjdCByZXN1bHQgWyxpbnQgcmVzdWx0dHlwZV0pIiwKICAgICAgICAiRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LCBhIG51bWVyaWMgYXJyYXksIG9yIGJvdGgiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9hc3NvYyI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2ZldGNoX2Fzc29jIChvYmplY3QgcmVzdWx0KSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSIKICAgIF0sCiAgICAibXlzcWxpX2ZldGNoX2ZpZWxkIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfZmV0Y2hfZmllbGQgKG9iamVjdCByZXN1bHQpIiwKICAgICAgICAiR2V0IGNvbHVtbiBpbmZvcm1hdGlvbiBmcm9tIGEgcmVzdWx0IGFuZCByZXR1cm4gYXMgYW4gb2JqZWN0IgogICAgXSwKICAgICJteXNxbGlfZmV0Y2hfZmllbGRfZGlyZWN0IjogWwogICAgICAgICJtaXhlZCBteXNxbGlfZmV0Y2hfZmllbGRfZGlyZWN0IChvYmplY3QgcmVzdWx0LCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIkZldGNoIG1ldGEtZGF0YSBmb3IgYSBzaW5nbGUgZmllbGQiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9maWVsZHMiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9mZXRjaF9maWVsZHMgKG9iamVjdCByZXN1bHQpIiwKICAgICAgICAiUmV0dXJuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBmaWVsZCBtZXRhLWRhdGEiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9sZW5ndGhzIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfZmV0Y2hfbGVuZ3RocyAob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJHZXQgdGhlIGxlbmd0aCBvZiBlYWNoIG91dHB1dCBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxpX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2ZldGNoX29iamVjdCAob2JqZWN0IHJlc3VsdCBbLCBzdHJpbmcgY2xhc3NfbmFtZSBbLCBOVUxMfGFycmF5IGN0b3JfcGFyYW1zXV0pIiwKICAgICAgICAiRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIG9iamVjdCIKICAgIF0sCiAgICAibXlzcWxpX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYXJyYXkgbXlzcWxpX2ZldGNoX3JvdyAob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJHZXQgYSByZXN1bHQgcm93IGFzIGFuIGVudW1lcmF0ZWQgYXJyYXkiCiAgICBdLAogICAgIm15c3FsaV9maWVsZF9jb3VudCI6IFsKICAgICAgICAiaW50IG15c3FsaV9maWVsZF9jb3VudChvYmplY3QgbGluaykiLAogICAgICAgICJGZXRjaCB0aGUgbnVtYmVyIG9mIGZpZWxkcyByZXR1cm5lZCBieSB0aGUgbGFzdCBxdWVyeSBmb3IgdGhlIGdpdmVuIGxpbmsiCiAgICBdLAogICAgIm15c3FsaV9maWVsZF9zZWVrIjogWwogICAgICAgICJpbnQgbXlzcWxpX2ZpZWxkX3NlZWsob2JqZWN0IHJlc3VsdCwgaW50IGZpZWxkbnIpIiwKICAgICAgICAiU2V0IHJlc3VsdCBwb2ludGVyIHRvIGEgc3BlY2lmaWVkIGZpZWxkIG9mZnNldCIKICAgIF0sCiAgICAibXlzcWxpX2ZpZWxkX3RlbGwiOiBbCiAgICAgICAgImludCBteXNxbGlfZmllbGRfdGVsbChvYmplY3QgcmVzdWx0KSIsCiAgICAgICAgIkdldCBjdXJyZW50IGZpZWxkIG9mZnNldCBvZiByZXN1bHQgcG9pbnRlciIKICAgIF0sCiAgICAibXlzcWxpX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJ2b2lkIG15c3FsaV9mcmVlX3Jlc3VsdChvYmplY3QgcmVzdWx0KSIsCiAgICAgICAgIkZyZWUgcXVlcnkgcmVzdWx0IG1lbW9yeSBmb3IgdGhlIGdpdmVuIHJlc3VsdCBoYW5kbGUiCiAgICBdLAogICAgIm15c3FsaV9nZXRfY2hhcnNldCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsaV9nZXRfY2hhcnNldChvYmplY3QgbGluaykiLAogICAgICAgICJyZXR1cm5zIGEgY2hhcmFjdGVyIHNldCBvYmplY3QiCiAgICBdLAogICAgIm15c3FsaV9nZXRfY2xpZW50X2luZm8iOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfZ2V0X2NsaWVudF9pbmZvKHZvaWQpIiwKICAgICAgICAiR2V0IE15U1FMIGNsaWVudCBpbmZvIgogICAgXSwKICAgICJteXNxbGlfZ2V0X2NsaWVudF9zdGF0cyI6IFsKICAgICAgICAiYXJyYXkgbXlzcWxpX2dldF9jbGllbnRfc3RhdHModm9pZCkiLAogICAgICAgICJSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHp2YWwgY2FjaGUiCiAgICBdLAogICAgIm15c3FsaV9nZXRfY2xpZW50X3ZlcnNpb24iOiBbCiAgICAgICAgImludCBteXNxbGlfZ2V0X2NsaWVudF92ZXJzaW9uKHZvaWQpIiwKICAgICAgICAiR2V0IE15U1FMIGNsaWVudCBpbmZvIgogICAgXSwKICAgICJteXNxbGlfZ2V0X2Nvbm5lY3Rpb25fc3RhdHMiOiBbCiAgICAgICAgImFycmF5IG15c3FsaV9nZXRfY29ubmVjdGlvbl9zdGF0cyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgc3RhdGlzdGljcyBhYm91dCB0aGUgenZhbCBjYWNoZSIKICAgIF0sCiAgICAibXlzcWxpX2dldF9ob3N0X2luZm8iOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfZ2V0X2hvc3RfaW5mbyAob2JqZWN0IGxpbmspIiwKICAgICAgICAiR2V0IE15U1FMIGhvc3QgaW5mbyIKICAgIF0sCiAgICAibXlzcWxpX2dldF9wcm90b19pbmZvIjogWwogICAgICAgICJpbnQgbXlzcWxpX2dldF9wcm90b19pbmZvKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCBNeVNRTCBwcm90b2NvbCBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2dldF9zZXJ2ZXJfaW5mbyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9nZXRfc2VydmVyX2luZm8ob2JqZWN0IGxpbmspIiwKICAgICAgICAiR2V0IE15U1FMIHNlcnZlciBpbmZvIgogICAgXSwKICAgICJteXNxbGlfZ2V0X3NlcnZlcl92ZXJzaW9uIjogWwogICAgICAgICJpbnQgbXlzcWxpX2dldF9zZXJ2ZXJfdmVyc2lvbihvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm4gdGhlIE15U1FMIHZlcnNpb24gZm9yIHRoZSBzZXJ2ZXIgcmVmZXJlbmNlZCBieSB0aGUgZ2l2ZW4gbGluayIKICAgIF0sCiAgICAibXlzcWxpX2dldF93YXJuaW5ncyI6IFsKICAgICAgICAib2JqZWN0IG15c3FsaV9nZXRfd2FybmluZ3Mob2JqZWN0IGxpbmspICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKG15c3FsaV9nZXRfd2FybmluZ3MpIHsgIE1ZX01ZU1FMICAgKm15c3FsOyAgenZhbCAgICAqbXlzcWxfbGluazsgIE1ZU1FMSV9SRVNPVVJDRSAgKm15c3FsaV9yZXNvdXJjZTsgIE1ZU1FMSV9XQVJOSU5HICAqdzsgICBpZiAoemVuZF9wYXJzZV9tZXRob2RfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCBnZXRUaGlzKCksIFwiT1wiLCAmbXlzcWxfbGluaywgbXlzcWxpX2xpbmtfY2xhc3NfZW50cnkpID09IEZBSUxVUkUpIHsgICByZXR1cm47ICB9ICBNWVNRTElfRkVUQ0hfUkVTT1VSQ0UobXlzcWwsIE1ZX01ZU1FMKiwgJm15c3FsX2xpbmssIFwibXlzcWxpX2xpbmtcIiwgTVlTUUxJX1NUQVRVU19WQUxJRCk7ICAgaWYgKG15c3FsX3dhcm5pbmdfY291bnQobXlzcWwtPm15c3FsKSkgeyAgIHcgPSBwaHBfZ2V0X3dhcm5pbmdzKG15c3FsLT5teXNxbCBUU1JNTFNfQ0MpOyAgIH0gZWxzZSB7ICAgUkVUVVJOX0ZBTFNFOyAgfSAgbXlzcWxpX3Jlc291cmNlID0gKE1ZU1FMSV9SRVNPVVJDRSAqKWVjYWxsb2MgKDEsIHNpemVvZihNWVNRTElfUkVTT1VSQ0UpKTsgIG15c3FsaV9yZXNvdXJjZS0+cHRyID0gbXlzcWxpX3Jlc291cmNlLT5pbmZvID0gKHZvaWQgKil3OyAgbXlzcWxpX3Jlc291cmNlLT5zdGF0dXMgPSBNWVNRTElfU1RBVFVTX1ZBTElEOyAgTVlTUUxJX1JFVFVSTl9SRVNPVVJDRShteXNxbGlfcmVzb3VyY2UsIG15c3FsaV93YXJuaW5nX2NsYXNzX2VudHJ5KTsgIH0gLyogfX19IgogICAgXSwKICAgICJteXNxbGlfaW5mbyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9pbmZvKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9zdCByZWNlbnQgcXVlcnkiCiAgICBdLAogICAgIm15c3FsaV9pbml0IjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbGlfaW5pdCh2b2lkKSIsCiAgICAgICAgIkluaXRpYWxpemUgbXlzcWxpIGFuZCByZXR1cm4gYSByZXNvdXJjZSBmb3IgdXNlIHdpdGggbXlzcWxfcmVhbF9jb25uZWN0IgogICAgXSwKICAgICJteXNxbGlfaW5zZXJ0X2lkIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfaW5zZXJ0X2lkKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCB0aGUgSUQgZ2VuZXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIElOU0VSVCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9raWxsIjogWwogICAgICAgICJib29sIG15c3FsaV9raWxsKG9iamVjdCBsaW5rLCBpbnQgcHJvY2Vzc2lkKSIsCiAgICAgICAgIktpbGwgYSBteXNxbCBwcm9jZXNzIG9uIHRoZSBzZXJ2ZXIiCiAgICBdLAogICAgIm15c3FsaV9saW5rX2NvbnN0cnVjdCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsaV9saW5rX2NvbnN0cnVjdCgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfbW9yZV9yZXN1bHRzIjogWwogICAgICAgICJib29sIG15c3FsaV9tb3JlX3Jlc3VsdHMob2JqZWN0IGxpbmspIiwKICAgICAgICAiY2hlY2sgaWYgdGhlcmUgYW55IG1vcmUgcXVlcnkgcmVzdWx0cyBmcm9tIGEgbXVsdGkgcXVlcnkiCiAgICBdLAogICAgIm15c3FsaV9tdWx0aV9xdWVyeSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfbXVsdGlfcXVlcnkob2JqZWN0IGxpbmssIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJhbGxvd3MgdG8gZXhlY3V0ZSBtdWx0aXBsZSBxdWVyaWVzIgogICAgXSwKICAgICJteXNxbGlfbmV4dF9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX25leHRfcmVzdWx0KG9iamVjdCBsaW5rKSIsCiAgICAgICAgInJlYWQgbmV4dCByZXN1bHQgZnJvbSBtdWx0aV9xdWVyeSIKICAgIF0sCiAgICAibXlzcWxpX251bV9maWVsZHMiOiBbCiAgICAgICAgImludCBteXNxbGlfbnVtX2ZpZWxkcyhvYmplY3QgcmVzdWx0KSIsCiAgICAgICAgIkdldCBudW1iZXIgb2YgZmllbGRzIGluIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxpX251bV9yb3dzIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfbnVtX3Jvd3Mob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJHZXQgbnVtYmVyIG9mIHJvd3MgaW4gcmVzdWx0IgogICAgXSwKICAgICJteXNxbGlfb3B0aW9ucyI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfb3B0aW9ucyhvYmplY3QgbGluaywgaW50IGZsYWdzLCBtaXhlZCB2YWx1ZXMpIiwKICAgICAgICAiU2V0IG9wdGlvbnMiCiAgICBdLAogICAgIm15c3FsaV9waW5nIjogWwogICAgICAgICJib29sIG15c3FsaV9waW5nKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlBpbmcgYSBzZXJ2ZXIgY29ubmVjdGlvbiBvciByZWNvbm5lY3QgaWYgdGhlcmUgaXMgbm8gY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX3BvbGwiOiBbCiAgICAgICAgImludCBteXNxbGlfcG9sbChhcnJheSByZWFkLCBhcnJheSB3cml0ZSwgYXJyYXkgZXJyb3IsIGxvbmcgc2VjIFssIGxvbmcgdXNlY10pIiwKICAgICAgICAiUG9sbCBjb25uZWN0aW9ucyIKICAgIF0sCiAgICAibXlzcWxpX3ByZXBhcmUiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9wcmVwYXJlKG9iamVjdCBsaW5rLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiUHJlcGFyZSBhIFNRTCBzdGF0ZW1lbnQgZm9yIGV4ZWN1dGlvbiIKICAgIF0sCiAgICAibXlzcWxpX3F1ZXJ5IjogWwogICAgICAgICJtaXhlZCBteXNxbGlfcXVlcnkob2JqZWN0IGxpbmssIHN0cmluZyBxdWVyeSBbLGludCByZXN1bHRtb2RlXSkgKi8iLAogICAgICAgICJQSFBfRlVOQ1RJT04obXlzcWxpX3F1ZXJ5KSB7ICBNWV9NWVNRTCAgICpteXNxbDsgIHp2YWwgICAgKm15c3FsX2xpbms7ICBNWVNRTElfUkVTT1VSQ0UgICpteXNxbGlfcmVzb3VyY2U7ICBNWVNRTF9SRVMgICAgKnJlc3VsdDsgIGNoYXIgICAgKnF1ZXJ5ID0gTlVMTDsgIHVuc2lnbmVkIGludCAgIHF1ZXJ5X2xlbjsgIHVuc2lnbmVkIGxvbmcgICByZXN1bHRtb2RlID0gTVlTUUxJX1NUT1JFX1JFU1VMVDsgICBpZiAoemVuZF9wYXJzZV9tZXRob2RfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCBnZXRUaGlzKCksIFwiT3N8bFwiLCAmbXlzcWxfbGluaywgbXlzcWxpX2xpbmtfY2xhc3NfZW50cnksICZxdWVyeSwgJnF1ZXJ5X2xlbiwgJnJlc3VsdG1vZGUpID09IEZBSUxVUkUpIHsgICByZXR1cm47ICB9ICAgaWYgKCFxdWVyeV9sZW4pIHsgICBwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsIFwiRW1wdHkgcXVlcnlcIik7ICAgUkVUVVJOX0ZBTFNFOyAgfSAgaWYgKChyZXN1bHRtb2RlICYgfk1ZU1FMSV9BU1lOQykgIT0gTVlTUUxJX1VTRV9SRVNVTFQgJiYgKHJlc3VsdG1vZGUgJiB+TVlTUUxJX0FTWU5DKSAhPSBNWVNRTElfU1RPUkVfUkVTVUxUKSB7ICAgcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJOSU5HLCBcIkludmFsaWQgdmFsdWUgZm9yIHJlc3VsdG1vZGVcIik7ICAgUkVUVVJOX0ZBTFNFOyAgfSAgIE1ZU1FMSV9GRVRDSF9SRVNPVVJDRShteXNxbCwgTVlfTVlTUUwqLCAmbXlzcWxfbGluaywgXCJteXNxbGlfbGlua1wiLCBNWVNRTElfU1RBVFVTX1ZBTElEKTsgICBNWVNRTElfRElTQUJMRV9NUTsgICAjaWZkZWYgTVlTUUxJX1VTRV9NWVNRTE5EICBpZiAocmVzdWx0bW9kZSAmIE1ZU1FMSV9BU1lOQykgeyAgIGlmIChteXNxbGlfYXN5bmNfcXVlcnkobXlzcWwtPm15c3FsLCBxdWVyeSwgcXVlcnlfbGVuKSkgeyAgICBNWVNRTElfUkVQT1JUX01ZU1FMX0VSUk9SKG15c3FsLT5teXNxbCk7ICAgIFJFVFVSTl9GQUxTRTsgICB9ICAgbXlzcWwtPmFzeW5jX3Jlc3VsdF9mZXRjaF90eXBlID0gcmVzdWx0bW9kZSAmIH5NWVNRTElfQVNZTkM7ICAgUkVUVVJOX1RSVUU7ICB9ICNlbmRpZiAgIGlmIChteXNxbF9yZWFsX3F1ZXJ5KG15c3FsLT5teXNxbCwgcXVlcnksIHF1ZXJ5X2xlbikpIHsgICBNWVNRTElfUkVQT1JUX01ZU1FMX0VSUk9SKG15c3FsLT5teXNxbCk7ICAgUkVUVVJOX0ZBTFNFOyAgfSAgIGlmICghbXlzcWxfZmllbGRfY291bnQobXlzcWwtPm15c3FsKSkgeyAgIC8qIG5vIHJlc3VsdCBzZXQgLSBub3QgYSBTRUxFQ1QiCiAgICBdLAogICAgIm15c3FsaV9yZWFsX2Nvbm5lY3QiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3JlYWxfY29ubmVjdChvYmplY3QgbGluayBbLHN0cmluZyBob3N0bmFtZSBbLHN0cmluZyB1c2VybmFtZSBbLHN0cmluZyBwYXNzd2QgWyxzdHJpbmcgZGJuYW1lIFssaW50IHBvcnQgWyxzdHJpbmcgc29ja2V0IFssaW50IGZsYWdzXV1dXV1dXSkiLAogICAgICAgICJPcGVuIGEgY29ubmVjdGlvbiB0byBhIG15c3FsIHNlcnZlciIKICAgIF0sCiAgICAibXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcob2JqZWN0IGxpbmssIHN0cmluZyBlc2NhcGVzdHIpIiwKICAgICAgICAiRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgZm9yIHVzZSBpbiBhIFNRTCBzdGF0ZW1lbnQsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN1cnJlbnQgY2hhcnNldCBvZiB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX3JlYWxfcXVlcnkiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3JlYWxfcXVlcnkob2JqZWN0IGxpbmssIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJCaW5hcnktc2FmZSB2ZXJzaW9uIG9mIG15c3FsX3F1ZXJ5KCkiCiAgICBdLAogICAgIm15c3FsaV9yZWFwX2FzeW5jX3F1ZXJ5IjogWwogICAgICAgICJpbnQgbXlzcWxpX3JlYXBfYXN5bmNfcXVlcnkob2JqZWN0IGxpbmspIiwKICAgICAgICAiUG9sbCBjb25uZWN0aW9ucyIKICAgIF0sCiAgICAibXlzcWxpX3JlZnJlc2giOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3JlZnJlc2gob2JqZWN0IGxpbmssIGxvbmcgb3B0aW9ucykiLAogICAgICAgICJGbHVzaCB0YWJsZXMgb3IgY2FjaGVzLCBvciByZXNldCByZXBsaWNhdGlvbiBzZXJ2ZXIgaW5mb3JtYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9yZXBvcnQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3JlcG9ydChpbnQgZmxhZ3MpIiwKICAgICAgICAic2V0cyByZXBvcnQgbGV2ZWwiCiAgICBdLAogICAgIm15c3FsaV9yb2xsYmFjayI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfcm9sbGJhY2sob2JqZWN0IGxpbmspIiwKICAgICAgICAiVW5kbyBhY3Rpb25zIGZyb20gY3VycmVudCB0cmFuc2FjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX3NlbGVjdF9kYiI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfc2VsZWN0X2RiKG9iamVjdCBsaW5rLCBzdHJpbmcgZGJuYW1lKSIsCiAgICAgICAgIlNlbGVjdCBhIE15U1FMIGRhdGFiYXNlIgogICAgXSwKICAgICJteXNxbGlfc2V0X2NoYXJzZXQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3NldF9jaGFyc2V0KG9iamVjdCBsaW5rLCBzdHJpbmcgY3NuYW1lKSIsCiAgICAgICAgInNldHMgY2xpZW50IGNoYXJhY3RlciBzZXQiCiAgICBdLAogICAgIm15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2RlZmF1bHQiOiBbCiAgICAgICAgInZvaWQgbXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfZGVmYXVsdChvYmplY3QgbGluaykiLAogICAgICAgICJ1bnNldHMgdXNlciBkZWZpbmVkIGhhbmRsZXIgZm9yIGxvYWQgbG9jYWwgaW5maWxlIGNvbW1hbmQiCiAgICBdLAogICAgIm15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2hhbmRsZXIiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfaGFuZGxlcihvYmplY3QgbGluaywgY2FsbGJhY2sgcmVhZF9mdW5jKSIsCiAgICAgICAgIlNldCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIExPQUQgREFUQSBMT0NBTCBJTkZJTEUiCiAgICBdLAogICAgIm15c3FsaV9zcWxzdGF0ZSI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9zcWxzdGF0ZShvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm5zIHRoZSBTUUxTVEFURSBlcnJvciBmcm9tIHByZXZpb3VzIE15U1FMIG9wZXJhdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX3NzbF9zZXQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3NzbF9zZXQob2JqZWN0IGxpbmsgLHN0cmluZyBrZXkgLHN0cmluZyBjZXJ0ICxzdHJpbmcgY2EgLHN0cmluZyBjYXBhdGggLHN0cmluZyBjaXBoZXJdKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX3N0YXQiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdGF0KG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCBjdXJyZW50IHN5c3RlbSBzdGF0dXMiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2FmZmVjdGVkX3Jvd3MiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdG10X2FmZmVjdGVkX3Jvd3Mob2JqZWN0IHN0bXQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2Ygcm93cyBhZmZlY3RlZCBpbiB0aGUgbGFzdCBxdWVyeSBmb3IgdGhlIGdpdmVuIGxpbmsiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2F0dHJfZ2V0IjogWwogICAgICAgICJpbnQgbXlzcWxpX3N0bXRfYXR0cl9nZXQob2JqZWN0IHN0bXQsIGxvbmcgYXR0cikiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2F0dHJfc2V0IjogWwogICAgICAgICJpbnQgbXlzcWxpX3N0bXRfYXR0cl9zZXQob2JqZWN0IHN0bXQsIGxvbmcgYXR0ciwgbG9uZyBtb2RlKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfYmluZF9wYXJhbSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfc3RtdF9iaW5kX3BhcmFtKG9iamVjdCBzdG10LCBzdHJpbmcgdHlwZXMsIG1peGVkIHZhcmlhYmxlIFssbWl4ZWQsLi4uLl0pIiwKICAgICAgICAiQmluZCB2YXJpYWJsZXMgdG8gYSBwcmVwYXJlZCBzdGF0ZW1lbnQgYXMgcGFyYW1ldGVycyIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfYmluZF9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfYmluZF9yZXN1bHQob2JqZWN0IHN0bXQsIG1peGVkIHZhciwgWyxtaXhlZCwgLi4uXSkiLAogICAgICAgICJCaW5kIHZhcmlhYmxlcyB0byBhIHByZXBhcmVkIHN0YXRlbWVudCBmb3IgcmVzdWx0IHN0b3JhZ2UiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2Nsb3NlIjogWwogICAgICAgICJib29sIG15c3FsaV9zdG10X2Nsb3NlKG9iamVjdCBzdG10KSIsCiAgICAgICAgIkNsb3NlIHN0YXRlbWVudCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZGF0YV9zZWVrIjogWwogICAgICAgICJ2b2lkIG15c3FsaV9zdG10X2RhdGFfc2VlayhvYmplY3Qgc3RtdCwgaW50IG9mZnNldCkiLAogICAgICAgICJNb3ZlIGludGVybmFsIHJlc3VsdCBwb2ludGVyIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9lcnJubyI6IFsKICAgICAgICAiaW50IG15c3FsaV9zdG10X2Vycm5vKG9iamVjdCBzdG10KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfc3RtdF9lcnJvcihvYmplY3Qgc3RtdCkiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2V4ZWN1dGUiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfZXhlY3V0ZShvYmplY3Qgc3RtdCkiLAogICAgICAgICJFeGVjdXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9mZXRjaCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX3N0bXRfZmV0Y2gob2JqZWN0IHN0bXQpIiwKICAgICAgICAiRmV0Y2ggcmVzdWx0cyBmcm9tIGEgcHJlcGFyZWQgc3RhdGVtZW50IGludG8gdGhlIGJvdW5kIHZhcmlhYmxlcyIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZmllbGRfY291bnQiOiBbCiAgICAgICAgImludCBteXNxbGlfc3RtdF9maWVsZF9jb3VudChvYmplY3Qgc3RtdCkgeyIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHJlc3VsdCBjb2x1bW5zIGZvciB0aGUgZ2l2ZW4gc3RhdGVtZW50IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAidm9pZCBteXNxbGlfc3RtdF9mcmVlX3Jlc3VsdChvYmplY3Qgc3RtdCkiLAogICAgICAgICJGcmVlIHN0b3JlZCByZXN1bHQgbWVtb3J5IGZvciB0aGUgZ2l2ZW4gc3RhdGVtZW50IGhhbmRsZSIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZ2V0X3Jlc3VsdCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsaV9zdG10X2dldF9yZXN1bHQob2JqZWN0IGxpbmspIiwKICAgICAgICAiQnVmZmVyIHJlc3VsdCBzZXQgb24gY2xpZW50IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9nZXRfd2FybmluZ3MiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbGlfc3RtdF9nZXRfd2FybmluZ3Mob2JqZWN0IGxpbmspICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKG15c3FsaV9zdG10X2dldF93YXJuaW5ncykgeyAgTVlfU1RNVCAgICAqc3RtdDsgIHp2YWwgICAgKnN0bXRfbGluazsgIE1ZU1FMSV9SRVNPVVJDRSAgKm15c3FsaV9yZXNvdXJjZTsgIE1ZU1FMSV9XQVJOSU5HICAqdzsgICBpZiAoemVuZF9wYXJzZV9tZXRob2RfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCBnZXRUaGlzKCksIFwiT1wiLCAmc3RtdF9saW5rLCBteXNxbGlfc3RtdF9jbGFzc19lbnRyeSkgPT0gRkFJTFVSRSkgeyAgIHJldHVybjsgIH0gIE1ZU1FMSV9GRVRDSF9SRVNPVVJDRShzdG10LCBNWV9TVE1UKiwgJnN0bXRfbGluaywgXCJteXNxbGlfc3RtdFwiLCBNWVNRTElfU1RBVFVTX1ZBTElEKTsgICBpZiAobXlzcWxpX3N0bXRfd2FybmluZ19jb3VudChzdG10LT5zdG10KSkgeyAgIHcgPSBwaHBfZ2V0X3dhcm5pbmdzKG15c3FsaV9zdG10X2dldF9jb25uZWN0aW9uKHN0bXQtPnN0bXQpIFRTUk1MU19DQyk7ICAgfSBlbHNlIHsgICBSRVRVUk5fRkFMU0U7ICB9ICBteXNxbGlfcmVzb3VyY2UgPSAoTVlTUUxJX1JFU09VUkNFICopZWNhbGxvYyAoMSwgc2l6ZW9mKE1ZU1FMSV9SRVNPVVJDRSkpOyAgbXlzcWxpX3Jlc291cmNlLT5wdHIgPSBteXNxbGlfcmVzb3VyY2UtPmluZm8gPSAodm9pZCAqKXc7ICBteXNxbGlfcmVzb3VyY2UtPnN0YXR1cyA9IE1ZU1FMSV9TVEFUVVNfVkFMSUQ7ICBNWVNRTElfUkVUVVJOX1JFU09VUkNFKG15c3FsaV9yZXNvdXJjZSwgbXlzcWxpX3dhcm5pbmdfY2xhc3NfZW50cnkpOyB9IC8qIH19fSIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfaW5pdCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX3N0bXRfaW5pdChvYmplY3QgbGluaykiLAogICAgICAgICJJbml0aWFsaXplIHN0YXRlbWVudCBvYmplY3QiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2luc2VydF9pZCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX3N0bXRfaW5zZXJ0X2lkKG9iamVjdCBzdG10KSIsCiAgICAgICAgIkdldCB0aGUgSUQgZ2VuZXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIElOU0VSVCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9zdG10X25leHRfcmVzdWx0IjogWwogICAgICAgICJib29sIG15c3FsaV9zdG10X25leHRfcmVzdWx0KG9iamVjdCBsaW5rKSIsCiAgICAgICAgInJlYWQgbmV4dCByZXN1bHQgZnJvbSBtdWx0aV9xdWVyeSIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfbnVtX3Jvd3MiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdG10X251bV9yb3dzKG9iamVjdCBzdG10KSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gc3RhdGVtZW50cyByZXN1bHQgc2V0IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9wYXJhbV9jb3VudCI6IFsKICAgICAgICAiaW50IG15c3FsaV9zdG10X3BhcmFtX2NvdW50KG9iamVjdCBzdG10KSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlciBmb3IgdGhlIGdpdmVuIHN0YXRlbWVudCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfcHJlcGFyZSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfc3RtdF9wcmVwYXJlKG9iamVjdCBzdG10LCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAicHJlcGFyZSBzZXJ2ZXIgc2lkZSBzdGF0ZW1lbnQgd2l0aCBxdWVyeSIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfcmVzZXQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfcmVzZXQob2JqZWN0IHN0bXQpIiwKICAgICAgICAicmVzZXQgYSBwcmVwYXJlZCBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm15c3FsaV9zdG10X3Jlc3VsdF9tZXRhZGF0YSI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX3N0bXRfcmVzdWx0X21ldGFkYXRhKG9iamVjdCBzdG10KSIsCiAgICAgICAgInJldHVybiByZXN1bHQgc2V0IGZyb20gc3RhdGVtZW50IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9zZW5kX2xvbmdfZGF0YSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfc3RtdF9zZW5kX2xvbmdfZGF0YShvYmplY3Qgc3RtdCwgaW50IHBhcmFtX25yLCBzdHJpbmcgZGF0YSkiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9zdG10X3NxbHN0YXRlIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxpX3N0bXRfc3Fsc3RhdGUob2JqZWN0IHN0bXQpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9zdG9yZV9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfc3RvcmVfcmVzdWx0KHN0bXQpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfc3RvcmVfcmVzdWx0IjogWwogICAgICAgICJvYmplY3QgbXlzcWxpX3N0b3JlX3Jlc3VsdChvYmplY3QgbGluaykiLAogICAgICAgICJCdWZmZXIgcmVzdWx0IHNldCBvbiBjbGllbnQiCiAgICBdLAogICAgIm15c3FsaV90aHJlYWRfaWQiOiBbCiAgICAgICAgImludCBteXNxbGlfdGhyZWFkX2lkKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCB0aHJlYWQgSUQiCiAgICBdLAogICAgIm15c3FsaV90aHJlYWRfc2FmZSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfdGhyZWFkX3NhZmUodm9pZCkiLAogICAgICAgICJSZXR1cm4gd2hldGhlciB0aHJlYWQgc2FmZXR5IGlzIGdpdmVuIG9yIG5vdCIKICAgIF0sCiAgICAibXlzcWxpX3VzZV9yZXN1bHQiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV91c2VfcmVzdWx0KG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkRpcmVjdGx5IHJldHJpZXZlIHF1ZXJ5IHJlc3VsdHMgLSBkbyBub3QgYnVmZmVyIHJlc3VsdHMgb24gY2xpZW50IHNpZGUiCiAgICBdLAogICAgIm15c3FsaV93YXJuaW5nX2NvdW50IjogWwogICAgICAgICJpbnQgbXlzcWxpX3dhcm5pbmdfY291bnQgKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlJldHVybiBudW1iZXIgb2Ygd2FybmluZ3MgZnJvbSB0aGUgbGFzdCBxdWVyeSBmb3IgdGhlIGdpdmVuIGxpbmsiCiAgICBdLAogICAgIm5hdGNhc2Vzb3J0IjogWwogICAgICAgICJ2b2lkIG5hdGNhc2Vzb3J0KGFycmF5ICZhcnJheV9hcmcpIiwKICAgICAgICAiU29ydCBhbiBhcnJheSB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIG5hdHVyYWwgc29ydCIKICAgIF0sCiAgICAibmF0c29ydCI6IFsKICAgICAgICAidm9pZCBuYXRzb3J0KGFycmF5ICZhcnJheV9hcmcpIiwKICAgICAgICAiU29ydCBhbiBhcnJheSB1c2luZyBuYXR1cmFsIHNvcnQiCiAgICBdLAogICAgIm5leHQiOiBbCiAgICAgICAgIm1peGVkIG5leHQoYXJyYXkgYXJyYXlfYXJnKSIsCiAgICAgICAgIk1vdmUgYXJyYXkgYXJndW1lbnQncyBpbnRlcm5hbCBwb2ludGVyIHRvIHRoZSBuZXh0IGVsZW1lbnQgYW5kIHJldHVybiBpdCIKICAgIF0sCiAgICAibmdldHRleHQiOiBbCiAgICAgICAgInN0cmluZyBuZ2V0dGV4dChzdHJpbmcgTVNHSUQxLCBzdHJpbmcgTVNHSUQyLCBpbnQgTikiLAogICAgICAgICJQbHVyYWwgdmVyc2lvbiBvZiBnZXR0ZXh0KCkiCiAgICBdLAogICAgIm5sMmJyIjogWwogICAgICAgICJzdHJpbmcgbmwyYnIoc3RyaW5nIHN0ciBbLCBib29sIGlzX3hodG1sXSkiLAogICAgICAgICJDb252ZXJ0cyBuZXdsaW5lcyB0byBIVE1MIGxpbmUgYnJlYWtzIgogICAgXSwKICAgICJubF9sYW5naW5mbyI6IFsKICAgICAgICAic3RyaW5nIG5sX2xhbmdpbmZvKGludCBpdGVtKSIsCiAgICAgICAgIlF1ZXJ5IGxhbmd1YWdlIGFuZCBsb2NhbGUgaW5mb3JtYXRpb24iCiAgICBdLAogICAgIm5vcm1hbGl6ZXJfaXNfbm9ybWFsaXplIjogWwogICAgICAgICJib29sIG5vcm1hbGl6ZXJfaXNfbm9ybWFsaXplKCBzdHJpbmcgJGlucHV0IFssIHN0cmluZyAkZm9ybSA9IEZPUk1fQ10gKSIsCiAgICAgICAgIiogVGVzdCBpZiBhIHN0cmluZyBpcyBpbiBhIGdpdmVuIG5vcm1hbGl6YXRpb24gZm9ybS4iCiAgICBdLAogICAgIm5vcm1hbGl6ZXJfbm9ybWFsaXplIjogWwogICAgICAgICJzdHJpbmcgbm9ybWFsaXplcl9ub3JtYWxpemUoIHN0cmluZyAkaW5wdXQgWywgc3RyaW5nICRmb3JtID0gRk9STV9DXSApIiwKICAgICAgICAiKiBOb3JtYWxpemUgYSBzdHJpbmcuIgogICAgXSwKICAgICJuc2FwaV9yZXF1ZXN0X2hlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IG5zYXBpX3JlcXVlc3RfaGVhZGVycyh2b2lkKSIsCiAgICAgICAgIkdldCBhbGwgaGVhZGVycyBmcm9tIHRoZSByZXF1ZXN0IgogICAgXSwKICAgICJuc2FwaV9yZXNwb25zZV9oZWFkZXJzIjogWwogICAgICAgICJhcnJheSBuc2FwaV9yZXNwb25zZV9oZWFkZXJzKHZvaWQpIiwKICAgICAgICAiR2V0IGFsbCBoZWFkZXJzIGZyb20gdGhlIHJlc3BvbnNlIgogICAgXSwKICAgICJuc2FwaV92aXJ0dWFsIjogWwogICAgICAgICJib29sIG5zYXBpX3ZpcnR1YWwoc3RyaW5nIHVyaSkiLAogICAgICAgICJQZXJmb3JtIGFuIE5TQVBJIHN1Yi1yZXF1ZXN0IgogICAgXSwKICAgICJudW1iZXJfZm9ybWF0IjogWwogICAgICAgICJzdHJpbmcgbnVtYmVyX2Zvcm1hdChmbG9hdCBudW1iZXIgWywgaW50IG51bV9kZWNpbWFsX3BsYWNlcyBbLCBzdHJpbmcgZGVjX3NlcGVyYXRvciwgc3RyaW5nIHRob3VzYW5kc19zZXBlcmF0b3JdXSkiLAogICAgICAgICJGb3JtYXRzIGEgbnVtYmVyIHdpdGggZ3JvdXBlZCB0aG91c2FuZHMiCiAgICBdLAogICAgIm51bWZtdF9jcmVhdGUiOiBbCiAgICAgICAgIk51bWJlckZvcm1hdHRlciBudW1mbXRfY3JlYXRlKCBzdHJpbmcgJGxvY2FsZSwgaW50IHN0eWxlWywgc3RyaW5nICRwYXR0ZXJuIF0gKSIsCiAgICAgICAgIiogQ3JlYXRlIG51bWJlciBmb3JtYXR0ZXIuIgogICAgXSwKICAgICJudW1mbXRfZm9ybWF0IjogWwogICAgICAgICJtaXhlZCBudW1mbXRfZm9ybWF0KCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBtaXhlZCAkbnVtWywgaW50IHR5cGVdICkiLAogICAgICAgICIqIEZvcm1hdCBhIG51bWJlci4iCiAgICBdLAogICAgIm51bWZtdF9mb3JtYXRfY3VycmVuY3kiOiBbCiAgICAgICAgIm1peGVkIG51bWZtdF9mb3JtYXRfY3VycmVuY3koIE51bWJlckZvcm1hdHRlciAkbmYsIGRvdWJsZSAkbnVtLCBzdHJpbmcgJGN1cnJlbmN5ICkiLAogICAgICAgICIqIEZvcm1hdCBhIG51bWJlciBhcyBjdXJyZW5jeS4iCiAgICBdLAogICAgIm51bWZtdF9nZXRfYXR0cmlidXRlIjogWwogICAgICAgICJtaXhlZCBudW1mbXRfZ2V0X2F0dHJpYnV0ZSggTnVtYmVyRm9ybWF0dGVyICRuZiwgaW50ICRhdHRyICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgYXR0cmlidXRlIHZhbHVlLiIKICAgIF0sCiAgICAibnVtZm10X2dldF9lcnJvcl9jb2RlIjogWwogICAgICAgICJpbnQgbnVtZm10X2dldF9lcnJvcl9jb2RlKCBOdW1iZXJGb3JtYXR0ZXIgJG5mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJudW1mbXRfZ2V0X2Vycm9yX21lc3NhZ2UiOiBbCiAgICAgICAgInN0cmluZyBudW1mbXRfZ2V0X2Vycm9yX21lc3NhZ2UoIE51bWJlckZvcm1hdHRlciAkbmYgKSIsCiAgICAgICAgIiogR2V0IHRleHQgZGVzY3JpcHRpb24gZm9yIGZvcm1hdHRlcidzIGxhc3QgZXJyb3IgY29kZS4iCiAgICBdLAogICAgIm51bWZtdF9nZXRfbG9jYWxlIjogWwogICAgICAgICJzdHJpbmcgbnVtZm10X2dldF9sb2NhbGUoIE51bWJlckZvcm1hdHRlciAkbmZbLCBpbnQgdHlwZV0gKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBsb2NhbGUuIgogICAgXSwKICAgICJudW1mbXRfZ2V0X3BhdHRlcm4iOiBbCiAgICAgICAgInN0cmluZyBudW1mbXRfZ2V0X3BhdHRlcm4oIE51bWJlckZvcm1hdHRlciAkbmYgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBwYXR0ZXJuLiIKICAgIF0sCiAgICAibnVtZm10X2dldF9zeW1ib2wiOiBbCiAgICAgICAgInN0cmluZyBudW1mbXRfZ2V0X3N5bWJvbCggTnVtYmVyRm9ybWF0dGVyICRuZiwgaW50ICRhdHRyICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgc3ltYm9sIHZhbHVlLiIKICAgIF0sCiAgICAibnVtZm10X2dldF90ZXh0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAic3RyaW5nIG51bWZtdF9nZXRfdGV4dF9hdHRyaWJ1dGUoIE51bWJlckZvcm1hdHRlciAkbmYsIGludCAkYXR0ciApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGF0dHJpYnV0ZSB2YWx1ZS4iCiAgICBdLAogICAgIm51bWZtdF9wYXJzZSI6IFsKICAgICAgICAibWl4ZWQgbnVtZm10X3BhcnNlKCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBzdHJpbmcgJHN0clssIGludCAkdHlwZSwgaW50ICYkcG9zaXRpb24gXSkiLAogICAgICAgICIqIFBhcnNlIGEgbnVtYmVyLiIKICAgIF0sCiAgICAibnVtZm10X3BhcnNlX2N1cnJlbmN5IjogWwogICAgICAgICJkb3VibGUgbnVtZm10X3BhcnNlX2N1cnJlbmN5KCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBzdHJpbmcgJHN0ciwgc3RyaW5nICQmY3VycmVuY3lbLCBpbnQgJCZwb3NpdGlvbl0gKSIsCiAgICAgICAgIiogUGFyc2UgYSBudW1iZXIgYXMgY3VycmVuY3kuIgogICAgXSwKICAgICJudW1mbXRfcGFyc2VfbWVzc2FnZSI6IFsKICAgICAgICAiYXJyYXkgbnVtZm10X3BhcnNlX21lc3NhZ2UoIHN0cmluZyAkbG9jYWxlLCBzdHJpbmcgJHBhdHRlcm4sIHN0cmluZyAkc291cmNlICkiLAogICAgICAgICIqIFBhcnNlIGEgbWVzc2FnZS4iCiAgICBdLAogICAgIm51bWZtdF9zZXRfYXR0cmlidXRlIjogWwogICAgICAgICJib29sIG51bWZtdF9zZXRfYXR0cmlidXRlKCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBpbnQgJGF0dHIsIG1peGVkICR2YWx1ZSApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGF0dHJpYnV0ZSB2YWx1ZS4iCiAgICBdLAogICAgIm51bWZtdF9zZXRfcGF0dGVybiI6IFsKICAgICAgICAiYm9vbCBudW1mbXRfc2V0X3BhdHRlcm4oIE51bWJlckZvcm1hdHRlciAkbmYsIHN0cmluZyAkcGF0dGVybiApIiwKICAgICAgICAiKiBTZXQgZm9ybWF0dGVyIHBhdHRlcm4uIgogICAgXSwKICAgICJudW1mbXRfc2V0X3N5bWJvbCI6IFsKICAgICAgICAiYm9vbCBudW1mbXRfc2V0X3N5bWJvbCggTnVtYmVyRm9ybWF0dGVyICRuZiwgaW50ICRhdHRyLCBzdHJpbmcgJHN5bWJvbCApIiwKICAgICAgICAiKiBTZXQgZm9ybWF0dGVyIHN5bWJvbCB2YWx1ZS4iCiAgICBdLAogICAgIm51bWZtdF9zZXRfdGV4dF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgImJvb2wgbnVtZm10X3NldF90ZXh0X2F0dHJpYnV0ZSggTnVtYmVyRm9ybWF0dGVyICRuZiwgaW50ICRhdHRyLCBzdHJpbmcgJHZhbHVlICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgYXR0cmlidXRlIHZhbHVlLiIKICAgIF0sCiAgICAib2JfY2xlYW4iOiBbCiAgICAgICAgImJvb2wgb2JfY2xlYW4odm9pZCkiLAogICAgICAgICJDbGVhbiAoZGVsZXRlKSB0aGUgY3VycmVudCBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJvYl9lbmRfY2xlYW4iOiBbCiAgICAgICAgImJvb2wgb2JfZW5kX2NsZWFuKHZvaWQpIiwKICAgICAgICAiQ2xlYW4gdGhlIG91dHB1dCBidWZmZXIsIGFuZCBkZWxldGUgY3VycmVudCBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJvYl9lbmRfZmx1c2giOiBbCiAgICAgICAgImJvb2wgb2JfZW5kX2ZsdXNoKHZvaWQpIiwKICAgICAgICAiRmx1c2ggKHNlbmQpIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgZGVsZXRlIGN1cnJlbnQgb3V0cHV0IGJ1ZmZlciIKICAgIF0sCiAgICAib2JfZmx1c2giOiBbCiAgICAgICAgImJvb2wgb2JfZmx1c2godm9pZCkiLAogICAgICAgICJGbHVzaCAoc2VuZCkgY29udGVudHMgb2YgdGhlIG91dHB1dCBidWZmZXIuIFRoZSBsYXN0IGJ1ZmZlciBjb250ZW50IGlzIHNlbnQgdG8gbmV4dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2dldF9jbGVhbiI6IFsKICAgICAgICAiYm9vbCBvYl9nZXRfY2xlYW4odm9pZCkiLAogICAgICAgICJHZXQgY3VycmVudCBidWZmZXIgY29udGVudHMgYW5kIGRlbGV0ZSBjdXJyZW50IG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2dldF9jb250ZW50cyI6IFsKICAgICAgICAic3RyaW5nIG9iX2dldF9jb250ZW50cyh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2dldF9mbHVzaCI6IFsKICAgICAgICAiYm9vbCBvYl9nZXRfZmx1c2godm9pZCkiLAogICAgICAgICJHZXQgY3VycmVudCBidWZmZXIgY29udGVudHMsIGZsdXNoIChzZW5kKSB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGRlbGV0ZSBjdXJyZW50IG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2dldF9sZW5ndGgiOiBbCiAgICAgICAgImludCBvYl9nZXRfbGVuZ3RoKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2dldF9sZXZlbCI6IFsKICAgICAgICAiaW50IG9iX2dldF9sZXZlbCh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgbmVzdGluZyBsZXZlbCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciIKICAgIF0sCiAgICAib2JfZ2V0X3N0YXR1cyI6IFsKICAgICAgICAiZmFsc2V8YXJyYXkgb2JfZ2V0X3N0YXR1cyhbYm9vbCBmdWxsX3N0YXR1c10pIiwKICAgICAgICAiUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGFjdGl2ZSBvciBhbGwgb3V0cHV0IGJ1ZmZlcnMiCiAgICBdLAogICAgIm9iX2d6aGFuZGxlciI6IFsKICAgICAgICAic3RyaW5nIG9iX2d6aGFuZGxlcihzdHJpbmcgc3RyLCBpbnQgbW9kZSkiLAogICAgICAgICJFbmNvZGUgc3RyIGJhc2VkIG9uIGFjY2VwdC1lbmNvZGluZyBzZXR0aW5nIC0gZGVzaWduZWQgdG8gYmUgY2FsbGVkIGZyb20gb2Jfc3RhcnQoKSIKICAgIF0sCiAgICAib2JfaWNvbnZfaGFuZGxlciI6IFsKICAgICAgICAic3RyaW5nIG9iX2ljb252X2hhbmRsZXIoc3RyaW5nIGNvbnRlbnRzLCBpbnQgc3RhdHVzKSIsCiAgICAgICAgIlJldHVybnMgc3RyIGluIG91dHB1dCBidWZmZXIgY29udmVydGVkIHRvIHRoZSBpY29udi5vdXRwdXRfZW5jb2RpbmcgY2hhcmFjdGVyIHNldCIKICAgIF0sCiAgICAib2JfaW1wbGljaXRfZmx1c2giOiBbCiAgICAgICAgInZvaWQgb2JfaW1wbGljaXRfZmx1c2goW2ludCBmbGFnXSkiLAogICAgICAgICJUdXJuIGltcGxpY2l0IGZsdXNoIG9uL29mZiBhbmQgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGZsdXNoKCkgYWZ0ZXIgZXZlcnkgb3V0cHV0IGNhbGwiCiAgICBdLAogICAgIm9iX2xpc3RfaGFuZGxlcnMiOiBbCiAgICAgICAgImZhbHNlfGFycmF5IG9iX2xpc3RfaGFuZGxlcnMoKSIsCiAgICAgICAgIiogIExpc3QgYWxsIG91dHB1dF9idWZmZXJzIGluIGFuIGFycmF5IgogICAgXSwKICAgICJvYl9zdGFydCI6IFsKICAgICAgICAiYm9vbCBvYl9zdGFydChbIHN0cmluZ3xhcnJheSB1c2VyX2Z1bmN0aW9uIFssIGludCBjaHVua19zaXplIFssIGJvb2wgZXJhc2VdXV0pIiwKICAgICAgICAiVHVybiBvbiBPdXRwdXQgQnVmZmVyaW5nIChzcGVjaWZ5aW5nIGFuIG9wdGlvbmFsIG91dHB1dCBoYW5kbGVyKS4iCiAgICBdLAogICAgIm9jaV9iaW5kX2FycmF5X2J5X25hbWUiOiBbCiAgICAgICAgImJvb2wgb2NpX2JpbmRfYXJyYXlfYnlfbmFtZShyZXNvdXJjZSBzdG10LCBzdHJpbmcgbmFtZSwgYXJyYXkgJnZhciwgaW50IG1heF90YWJsZV9sZW5ndGggWywgaW50IG1heF9pdGVtX2xlbmd0aCBbLCBpbnQgdHlwZSBdXSkiLAogICAgICAgICJCaW5kIGEgUEhQIGFycmF5IHRvIGFuIE9yYWNsZSBQTC9TUUwgdHlwZSBieSBuYW1lIgogICAgXSwKICAgICJvY2lfYmluZF9ieV9uYW1lIjogWwogICAgICAgICJib29sIG9jaV9iaW5kX2J5X25hbWUocmVzb3VyY2Ugc3RtdCwgc3RyaW5nIG5hbWUsIG1peGVkICZ2YXIsIFssIGludCBtYXhsZW5ndGggWywgaW50IHR5cGVdXSkiLAogICAgICAgICJCaW5kIGEgUEhQIHZhcmlhYmxlIHRvIGFuIE9yYWNsZSBwbGFjZWhvbGRlciBieSBuYW1lIgogICAgXSwKICAgICJvY2lfY2FuY2VsIjogWwogICAgICAgICJib29sIG9jaV9jYW5jZWwocmVzb3VyY2Ugc3RtdCkiLAogICAgICAgICJDYW5jZWwgcmVhZGluZyBmcm9tIGEgY3Vyc29yIgogICAgXSwKICAgICJvY2lfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgb2NpX2Nsb3NlKHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiRGlzY29ubmVjdCBmcm9tIGRhdGFiYXNlIgogICAgXSwKICAgICJvY2lfY29sbGVjdGlvbl9hcHBlbmQiOiBbCiAgICAgICAgImJvb2wgb2NpX2NvbGxlY3Rpb25fYXBwZW5kKHN0cmluZyB2YWx1ZSkiLAogICAgICAgICJBcHBlbmQgYW4gb2JqZWN0IHRvIHRoZSBjb2xsZWN0aW9uIgogICAgXSwKICAgICJvY2lfY29sbGVjdGlvbl9hc3NpZ24iOiBbCiAgICAgICAgImJvb2wgb2NpX2NvbGxlY3Rpb25fYXNzaWduKG9iamVjdCBmcm9tKSIsCiAgICAgICAgIkFzc2lnbiBhIGNvbGxlY3Rpb24gZnJvbSBhbm90aGVyIGV4aXN0aW5nIGNvbGxlY3Rpb24iCiAgICBdLAogICAgIm9jaV9jb2xsZWN0aW9uX2VsZW1lbnRfYXNzaWduIjogWwogICAgICAgICJib29sIG9jaV9jb2xsZWN0aW9uX2VsZW1lbnRfYXNzaWduKGludCBpbmRleCwgc3RyaW5nIHZhbCkiLAogICAgICAgICJBc3NpZ24gZWxlbWVudCB2YWwgdG8gY29sbGVjdGlvbiBhdCBpbmRleCBuZHgiCiAgICBdLAogICAgIm9jaV9jb2xsZWN0aW9uX2VsZW1lbnRfZ2V0IjogWwogICAgICAgICJzdHJpbmcgb2NpX2NvbGxlY3Rpb25fZWxlbWVudF9nZXQoaW50IG5keCkiLAogICAgICAgICJSZXRyaWV2ZSB0aGUgdmFsdWUgYXQgY29sbGVjdGlvbiBpbmRleCBuZHgiCiAgICBdLAogICAgIm9jaV9jb2xsZWN0aW9uX21heCI6IFsKICAgICAgICAiaW50IG9jaV9jb2xsZWN0aW9uX21heCgpIiwKICAgICAgICAiUmV0dXJuIHRoZSBtYXggdmFsdWUgb2YgYSBjb2xsZWN0aW9uLiBGb3IgYSB2YXJyYXkgdGhpcyBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGFycmF5IgogICAgXSwKICAgICJvY2lfY29sbGVjdGlvbl9zaXplIjogWwogICAgICAgICJpbnQgb2NpX2NvbGxlY3Rpb25fc2l6ZSgpIiwKICAgICAgICAiUmV0dXJuIHRoZSBzaXplIG9mIGEgY29sbGVjdGlvbiIKICAgIF0sCiAgICAib2NpX2NvbGxlY3Rpb25fdHJpbSI6IFsKICAgICAgICAiYm9vbCBvY2lfY29sbGVjdGlvbl90cmltKGludCBudW0pIiwKICAgICAgICAiVHJpbSBudW0gZWxlbWVudHMgZnJvbSB0aGUgZW5kIG9mIGEgY29sbGVjdGlvbiIKICAgIF0sCiAgICAib2NpX2NvbW1pdCI6IFsKICAgICAgICAiYm9vbCBvY2lfY29tbWl0KHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiQ29tbWl0IHRoZSBjdXJyZW50IGNvbnRleHQiCiAgICBdLAogICAgIm9jaV9jb25uZWN0IjogWwogICAgICAgICJyZXNvdXJjZSBvY2lfY29ubmVjdChzdHJpbmcgdXNlciwgc3RyaW5nIHBhc3MgWywgc3RyaW5nIGRiIFssIHN0cmluZyBjaGFyc2V0IFssIGludCBzZXNzaW9uX21vZGUgXV0pIiwKICAgICAgICAiQ29ubmVjdCB0byBhbiBPcmFjbGUgZGF0YWJhc2UgYW5kIGxvZyBvbi4gUmV0dXJucyBhIG5ldyBzZXNzaW9uLiIKICAgIF0sCiAgICAib2NpX2RlZmluZV9ieV9uYW1lIjogWwogICAgICAgICJib29sIG9jaV9kZWZpbmVfYnlfbmFtZShyZXNvdXJjZSBzdG10LCBzdHJpbmcgbmFtZSwgbWl4ZWQgJnZhciBbLCBpbnQgdHlwZV0pIiwKICAgICAgICAiRGVmaW5lIGEgUEhQIHZhcmlhYmxlIHRvIGFuIE9yYWNsZSBjb2x1bW4gYnkgbmFtZSIKICAgIF0sCiAgICAib2NpX2Vycm9yIjogWwogICAgICAgICJhcnJheSBvY2lfZXJyb3IoW3Jlc291cmNlIHN0bXR8Y29ubmVjdGlvbnxnbG9iYWxdKSIsCiAgICAgICAgIlJldHVybiB0aGUgbGFzdCBlcnJvciBvZiBzdG10fGNvbm5lY3Rpb258Z2xvYmFsLiBJZiBubyBlcnJvciBoYXBwZW5lZCByZXR1cm5zIGZhbHNlLiIKICAgIF0sCiAgICAib2NpX2V4ZWN1dGUiOiBbCiAgICAgICAgImJvb2wgb2NpX2V4ZWN1dGUocmVzb3VyY2Ugc3RtdCBbLCBpbnQgbW9kZV0pIiwKICAgICAgICAiRXhlY3V0ZSBhIHBhcnNlZCBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm9jaV9mZXRjaCI6IFsKICAgICAgICAiYm9vbCBvY2lfZmV0Y2gocmVzb3VyY2Ugc3RtdCkiLAogICAgICAgICJQcmVwYXJlIGEgbmV3IHJvdyBvZiBkYXRhIGZvciByZWFkaW5nIgogICAgXSwKICAgICJvY2lfZmV0Y2hfYWxsIjogWwogICAgICAgICJpbnQgb2NpX2ZldGNoX2FsbChyZXNvdXJjZSBzdG10LCBhcnJheSAmb3V0cHV0WywgaW50IHNraXBbLCBpbnQgbWF4cm93c1ssIGludCBmbGFnc11dXSkiLAogICAgICAgICJGZXRjaCBhbGwgcm93cyBvZiByZXN1bHQgZGF0YSBpbnRvIGFuIGFycmF5IgogICAgXSwKICAgICJvY2lfZmV0Y2hfYXJyYXkiOiBbCiAgICAgICAgImFycmF5IG9jaV9mZXRjaF9hcnJheSggcmVzb3VyY2Ugc3RtdCBbLCBpbnQgbW9kZSBdKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhcnJheSIKICAgIF0sCiAgICAib2NpX2ZldGNoX2Fzc29jIjogWwogICAgICAgICJhcnJheSBvY2lfZmV0Y2hfYXNzb2MoIHJlc291cmNlIHN0bXQgKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSIKICAgIF0sCiAgICAib2NpX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IG9jaV9mZXRjaF9vYmplY3QoIHJlc291cmNlIHN0bXQgKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBvYmplY3QiCiAgICBdLAogICAgIm9jaV9mZXRjaF9yb3ciOiBbCiAgICAgICAgImFycmF5IG9jaV9mZXRjaF9yb3coIHJlc291cmNlIHN0bXQgKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBlbnVtZXJhdGVkIGFycmF5IgogICAgXSwKICAgICJvY2lfZmllbGRfaXNfbnVsbCI6IFsKICAgICAgICAiYm9vbCBvY2lfZmllbGRfaXNfbnVsbChyZXNvdXJjZSBzdG10LCBpbnQgY29sKSIsCiAgICAgICAgIlRlbGwgd2hldGhlciBhIGNvbHVtbiBpcyBOVUxMIgogICAgXSwKICAgICJvY2lfZmllbGRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG9jaV9maWVsZF9uYW1lKHJlc291cmNlIHN0bXQsIGludCBjb2wpIiwKICAgICAgICAiVGVsbCB0aGUgbmFtZSBvZiBhIGNvbHVtbiIKICAgIF0sCiAgICAib2NpX2ZpZWxkX3ByZWNpc2lvbiI6IFsKICAgICAgICAiaW50IG9jaV9maWVsZF9wcmVjaXNpb24ocmVzb3VyY2Ugc3RtdCwgaW50IGNvbCkiLAogICAgICAgICJUZWxsIHRoZSBwcmVjaXNpb24gb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9jaV9maWVsZF9zY2FsZSI6IFsKICAgICAgICAiaW50IG9jaV9maWVsZF9zY2FsZShyZXNvdXJjZSBzdG10LCBpbnQgY29sKSIsCiAgICAgICAgIlRlbGwgdGhlIHNjYWxlIG9mIGEgY29sdW1uIgogICAgXSwKICAgICJvY2lfZmllbGRfc2l6ZSI6IFsKICAgICAgICAiaW50IG9jaV9maWVsZF9zaXplKHJlc291cmNlIHN0bXQsIGludCBjb2wpIiwKICAgICAgICAiVGVsbCB0aGUgbWF4aW11bSBkYXRhIHNpemUgb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9jaV9maWVsZF90eXBlIjogWwogICAgICAgICJtaXhlZCBvY2lfZmllbGRfdHlwZShyZXNvdXJjZSBzdG10LCBpbnQgY29sKSIsCiAgICAgICAgIlRlbGwgdGhlIGRhdGEgdHlwZSBvZiBhIGNvbHVtbiIKICAgIF0sCiAgICAib2NpX2ZpZWxkX3R5cGVfcmF3IjogWwogICAgICAgICJpbnQgb2NpX2ZpZWxkX3R5cGVfcmF3KHJlc291cmNlIHN0bXQsIGludCBjb2wpIiwKICAgICAgICAiVGVsbCB0aGUgcmF3IG9yYWNsZSBkYXRhIHR5cGUgb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9jaV9mcmVlX2NvbGxlY3Rpb24iOiBbCiAgICAgICAgImJvb2wgb2NpX2ZyZWVfY29sbGVjdGlvbigpIiwKICAgICAgICAiRGVsZXRlcyBjb2xsZWN0aW9uIG9iamVjdCIKICAgIF0sCiAgICAib2NpX2ZyZWVfZGVzY3JpcHRvciI6IFsKICAgICAgICAiYm9vbCBvY2lfZnJlZV9kZXNjcmlwdG9yKCkiLAogICAgICAgICJEZWxldGVzIGxhcmdlIG9iamVjdCBkZXNjcmlwdGlvbiIKICAgIF0sCiAgICAib2NpX2ZyZWVfc3RhdGVtZW50IjogWwogICAgICAgICJib29sIG9jaV9mcmVlX3N0YXRlbWVudChyZXNvdXJjZSBzdG10KSIsCiAgICAgICAgIkZyZWUgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm9jaV9pbnRlcm5hbF9kZWJ1ZyI6IFsKICAgICAgICAidm9pZCBvY2lfaW50ZXJuYWxfZGVidWcoaW50IG9ub2ZmKSIsCiAgICAgICAgIlRvZ2dsZSBpbnRlcm5hbCBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgT0NJIGV4dGVuc2lvbiIKICAgIF0sCiAgICAib2NpX2xvYl9hcHBlbmQiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9hcHBlbmQoIG9iamVjdCBsb2IgKSIsCiAgICAgICAgIkFwcGVuZHMgZGF0YSBmcm9tIGEgTE9CIHRvIGFub3RoZXIgTE9CIgogICAgXSwKICAgICJvY2lfbG9iX2Nsb3NlIjogWwogICAgICAgICJib29sIG9jaV9sb2JfY2xvc2UoKSIsCiAgICAgICAgIkNsb3NlcyBsb2IgZGVzY3JpcHRvciIKICAgIF0sCiAgICAib2NpX2xvYl9jb3B5IjogWwogICAgICAgICJib29sIG9jaV9sb2JfY29weSggb2JqZWN0IGxvYl90bywgb2JqZWN0IGxvYl9mcm9tIFssIGludCBsZW5ndGggXSApIiwKICAgICAgICAiQ29waWVzIGRhdGEgZnJvbSBhIExPQiB0byBhbm90aGVyIExPQiIKICAgIF0sCiAgICAib2NpX2xvYl9lb2YiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9lb2YoKSIsCiAgICAgICAgIkNoZWNrcyBpZiBFT0YgaXMgcmVhY2hlZCIKICAgIF0sCiAgICAib2NpX2xvYl9lcmFzZSI6IFsKICAgICAgICAiaW50IG9jaV9sb2JfZXJhc2UoIFsgaW50IG9mZnNldCBbLCBpbnQgbGVuZ3RoIF0gXSApIiwKICAgICAgICAiRXJhc2VzIGEgc3BlY2lmaWVkIHBvcnRpb24gb2YgdGhlIGludGVybmFsIExPQiwgc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgb2Zmc2V0IgogICAgXSwKICAgICJvY2lfbG9iX2V4cG9ydCI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX2V4cG9ydChbc3RyaW5nIGZpbGVuYW1lIFssIGludCBzdGFydCBbLCBpbnQgbGVuZ3RoXV1dKSIsCiAgICAgICAgIldyaXRlcyBhIGxhcmdlIG9iamVjdCBpbnRvIGEgZmlsZSIKICAgIF0sCiAgICAib2NpX2xvYl9mbHVzaCI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX2ZsdXNoKCBbIGludCBmbGFnIF0gKSIsCiAgICAgICAgIkZsdXNoZXMgdGhlIExPQiBidWZmZXIiCiAgICBdLAogICAgIm9jaV9sb2JfaW1wb3J0IjogWwogICAgICAgICJib29sIG9jaV9sb2JfaW1wb3J0KCBzdHJpbmcgZmlsZW5hbWUgKSIsCiAgICAgICAgIkxvYWRzIGZpbGUgaW50byBhIExPQiIKICAgIF0sCiAgICAib2NpX2xvYl9pc19lcXVhbCI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX2lzX2VxdWFsKCBvYmplY3QgbG9iMSwgb2JqZWN0IGxvYjIgKSIsCiAgICAgICAgIlRlc3RzIHRvIHNlZSBpZiB0d28gTE9CL0ZJTEUgbG9jYXRvcnMgYXJlIGVxdWFsIgogICAgXSwKICAgICJvY2lfbG9iX2xvYWQiOiBbCiAgICAgICAgInN0cmluZyBvY2lfbG9iX2xvYWQoKSIsCiAgICAgICAgIkxvYWRzIGEgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJvY2lfbG9iX3JlYWQiOiBbCiAgICAgICAgInN0cmluZyBvY2lfbG9iX3JlYWQoIGludCBsZW5ndGggKSIsCiAgICAgICAgIlJlYWRzIHBhcnRpY3VsYXIgcGFydCBvZiBhIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAib2NpX2xvYl9yZXdpbmQiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9yZXdpbmQoKSIsCiAgICAgICAgIlJld2luZCBwb2ludGVyIG9mIGEgTE9CIgogICAgXSwKICAgICJvY2lfbG9iX3NhdmUiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9zYXZlKCBzdHJpbmcgZGF0YSBbLCBpbnQgb2Zmc2V0IF0pIiwKICAgICAgICAiU2F2ZXMgYSBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgIm9jaV9sb2Jfc2VlayI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX3NlZWsoIGludCBvZmZzZXQgWywgaW50IHdoZW5jZSBdKSIsCiAgICAgICAgIk1vdmVzIHRoZSBwb2ludGVyIG9mIGEgTE9CIgogICAgXSwKICAgICJvY2lfbG9iX3NpemUiOiBbCiAgICAgICAgImludCBvY2lfbG9iX3NpemUoKSIsCiAgICAgICAgIlJldHVybnMgc2l6ZSBvZiBhIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAib2NpX2xvYl90ZWxsIjogWwogICAgICAgICJpbnQgb2NpX2xvYl90ZWxsKCkiLAogICAgICAgICJUZWxscyBMT0IgcG9pbnRlciBwb3NpdGlvbiIKICAgIF0sCiAgICAib2NpX2xvYl90cnVuY2F0ZSI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX3RydW5jYXRlKCBbIGludCBsZW5ndGggXSkiLAogICAgICAgICJUcnVuY2F0ZXMgYSBMT0IiCiAgICBdLAogICAgIm9jaV9sb2Jfd3JpdGUiOiBbCiAgICAgICAgImludCBvY2lfbG9iX3dyaXRlKCBzdHJpbmcgc3RyaW5nIFssIGludCBsZW5ndGggXSkiLAogICAgICAgICJXcml0ZXMgZGF0YSB0byBjdXJyZW50IHBvc2l0aW9uIG9mIGEgTE9CIgogICAgXSwKICAgICJvY2lfbG9iX3dyaXRlX3RlbXBvcmFyeSI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX3dyaXRlX3RlbXBvcmFyeShzdHJpbmcgdmFyIFssIGludCBsb2JfdHlwZV0pIiwKICAgICAgICAiV3JpdGVzIHRlbXBvcmFyeSBibG9iIgogICAgXSwKICAgICJvY2lfbmV3X2NvbGxlY3Rpb24iOiBbCiAgICAgICAgIm9iamVjdCBvY2lfbmV3X2NvbGxlY3Rpb24ocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHRkbyBbLCBzdHJpbmcgc2NoZW1hXSkiLAogICAgICAgICJJbml0aWFsaXplIGEgbmV3IGNvbGxlY3Rpb24iCiAgICBdLAogICAgIm9jaV9uZXdfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2Ugb2NpX25ld19jb25uZWN0KHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzcyBbLCBzdHJpbmcgZGJdKSIsCiAgICAgICAgIkNvbm5lY3QgdG8gYW4gT3JhY2xlIGRhdGFiYXNlIGFuZCBsb2cgb24uIFJldHVybnMgYSBuZXcgc2Vzc2lvbi4iCiAgICBdLAogICAgIm9jaV9uZXdfY3Vyc29yIjogWwogICAgICAgICJyZXNvdXJjZSBvY2lfbmV3X2N1cnNvcihyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIlJldHVybiBhIG5ldyBjdXJzb3IgKFN0YXRlbWVudC1IYW5kbGUpIC0gdXNlIHRoaXMgdG8gYmluZCByZWYtY3Vyc29ycyEiCiAgICBdLAogICAgIm9jaV9uZXdfZGVzY3JpcHRvciI6IFsKICAgICAgICAib2JqZWN0IG9jaV9uZXdfZGVzY3JpcHRvcihyZXNvdXJjZSBjb25uZWN0aW9uIFssIGludCB0eXBlXSkiLAogICAgICAgICJJbml0aWFsaXplIGEgbmV3IGVtcHR5IGRlc2NyaXB0b3IgTE9CL0ZJTEUgKExPQiBpcyBkZWZhdWx0KSIKICAgIF0sCiAgICAib2NpX251bV9maWVsZHMiOiBbCiAgICAgICAgImludCBvY2lfbnVtX2ZpZWxkcyhyZXNvdXJjZSBzdG10KSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHJlc3VsdCBjb2x1bW5zIGluIGEgc3RhdGVtZW50IgogICAgXSwKICAgICJvY2lfbnVtX3Jvd3MiOiBbCiAgICAgICAgImludCBvY2lfbnVtX3Jvd3MocmVzb3VyY2Ugc3RtdCkiLAogICAgICAgICJSZXR1cm4gdGhlIHJvdyBjb3VudCBvZiBhbiBPQ0kgc3RhdGVtZW50IgogICAgXSwKICAgICJvY2lfcGFyc2UiOiBbCiAgICAgICAgInJlc291cmNlIG9jaV9wYXJzZShyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiUGFyc2UgYSBxdWVyeSBhbmQgcmV0dXJuIGEgc3RhdGVtZW50IgogICAgXSwKICAgICJvY2lfcGFzc3dvcmRfY2hhbmdlIjogWwogICAgICAgICJib29sIG9jaV9wYXNzd29yZF9jaGFuZ2UocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHVzZXJuYW1lLCBzdHJpbmcgb2xkX3Bhc3N3b3JkLCBzdHJpbmcgbmV3X3Bhc3N3b3JkKSIsCiAgICAgICAgIkNoYW5nZXMgdGhlIHBhc3N3b3JkIG9mIGFuIGFjY291bnQiCiAgICBdLAogICAgIm9jaV9wY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2Ugb2NpX3Bjb25uZWN0KHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzcyBbLCBzdHJpbmcgZGIgWywgc3RyaW5nIGNoYXJzZXQgXV0pIiwKICAgICAgICAiQ29ubmVjdCB0byBhbiBPcmFjbGUgZGF0YWJhc2UgdXNpbmcgYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gYW5kIGxvZyBvbi4gUmV0dXJucyBhIG5ldyBzZXNzaW9uLiIKICAgIF0sCiAgICAib2NpX3Jlc3VsdCI6IFsKICAgICAgICAic3RyaW5nIG9jaV9yZXN1bHQocmVzb3VyY2Ugc3RtdCwgbWl4ZWQgY29sdW1uKSIsCiAgICAgICAgIlJldHVybiBhIHNpbmdsZSBjb2x1bW4gb2YgcmVzdWx0IGRhdGEiCiAgICBdLAogICAgIm9jaV9yb2xsYmFjayI6IFsKICAgICAgICAiYm9vbCBvY2lfcm9sbGJhY2socmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJSb2xsYmFjayB0aGUgY3VycmVudCBjb250ZXh0IgogICAgXSwKICAgICJvY2lfc2VydmVyX3ZlcnNpb24iOiBbCiAgICAgICAgInN0cmluZyBvY2lfc2VydmVyX3ZlcnNpb24ocmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyBzZXJ2ZXIgdmVyc2lvbiBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAib2NpX3NldF9hY3Rpb24iOiBbCiAgICAgICAgImJvb2wgb2NpX3NldF9hY3Rpb24ocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlNldHMgdGhlIGFjdGlvbiBhdHRyaWJ1dGUgb24gdGhlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXIiOiBbCiAgICAgICAgImJvb2wgb2NpX3NldF9jbGllbnRfaWRlbnRpZmllcihyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgdmFsdWUpIiwKICAgICAgICAiU2V0cyB0aGUgY2xpZW50IGlkZW50aWZpZXIgYXR0cmlidXRlIG9uIHRoZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJvY2lfc2V0X2NsaWVudF9pbmZvIjogWwogICAgICAgICJib29sIG9jaV9zZXRfY2xpZW50X2luZm8ocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlNldHMgdGhlIGNsaWVudCBpbmZvIGF0dHJpYnV0ZSBvbiB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAib2NpX3NldF9lZGl0aW9uIjogWwogICAgICAgICJib29sIG9jaV9zZXRfZWRpdGlvbihzdHJpbmcgdmFsdWUpIiwKICAgICAgICAiU2V0cyB0aGUgZWRpdGlvbiBhdHRyaWJ1dGUgZm9yIGFsbCBzdWJzZXF1ZW50IGNvbm5lY3Rpb25zIGNyZWF0ZWQiCiAgICBdLAogICAgIm9jaV9zZXRfbW9kdWxlX25hbWUiOiBbCiAgICAgICAgImJvb2wgb2NpX3NldF9tb2R1bGVfbmFtZShyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgdmFsdWUpIiwKICAgICAgICAiU2V0cyB0aGUgbW9kdWxlIGF0dHJpYnV0ZSBvbiB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAib2NpX3NldF9wcmVmZXRjaCI6IFsKICAgICAgICAiYm9vbCBvY2lfc2V0X3ByZWZldGNoKHJlc291cmNlIHN0bXQsIGludCBwcmVmZXRjaF9yb3dzKSIsCiAgICAgICAgIlNldHMgdGhlIG51bWJlciBvZiByb3dzIHRvIGJlIHByZWZldGNoZWQgb24gZXhlY3V0ZSB0byBwcmVmZXRjaF9yb3dzIGZvciBzdG10IgogICAgXSwKICAgICJvY2lfc3RhdGVtZW50X3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBvY2lfc3RhdGVtZW50X3R5cGUocmVzb3VyY2Ugc3RtdCkiLAogICAgICAgICJSZXR1cm4gdGhlIHF1ZXJ5IHR5cGUgb2YgYW4gT0NJIHN0YXRlbWVudCIKICAgIF0sCiAgICAib2NpZmV0Y2hpbnRvIjogWwogICAgICAgICJpbnQgb2NpZmV0Y2hpbnRvKHJlc291cmNlIHN0bXQsIGFycmF5ICZvdXRwdXQgWywgaW50IG1vZGVdKSIsCiAgICAgICAgIkZldGNoIGEgcm93IG9mIHJlc3VsdCBkYXRhIGludG8gYW4gYXJyYXkiCiAgICBdLAogICAgIm9jaWdldGJ1ZmZlcmluZ2xvYiI6IFsKICAgICAgICAiYm9vbCBvY2lnZXRidWZmZXJpbmdsb2IoKSIsCiAgICAgICAgIlJldHVybnMgY3VycmVudCBzdGF0ZSBvZiBidWZmZXJpbmcgZm9yIGEgTE9CIgogICAgXSwKICAgICJvY2lzZXRidWZmZXJpbmdsb2IiOiBbCiAgICAgICAgImJvb2wgb2Npc2V0YnVmZmVyaW5nbG9iKCBib29sZWFuIGZsYWcgKSIsCiAgICAgICAgIkVuYWJsZXMvZGlzYWJsZXMgYnVmZmVyaW5nIGZvciBhIExPQiIKICAgIF0sCiAgICAib2N0ZGVjIjogWwogICAgICAgICJpbnQgb2N0ZGVjKHN0cmluZyBvY3RhbF9udW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZGVjaW1hbCBlcXVpdmFsZW50IG9mIGFuIG9jdGFsIHN0cmluZyIKICAgIF0sCiAgICAib2RiY19hdXRvY29tbWl0IjogWwogICAgICAgICJtaXhlZCBvZGJjX2F1dG9jb21taXQocmVzb3VyY2UgY29ubmVjdGlvbl9pZCBbLCBpbnQgT25PZmZdKSIsCiAgICAgICAgIlRvZ2dsZSBhdXRvY29tbWl0IG1vZGUgb3IgZ2V0IHN0YXR1cyIKICAgIF0sCiAgICAib2RiY19iaW5tb2RlIjogWwogICAgICAgICJib29sIG9kYmNfYmlubW9kZShpbnQgcmVzdWx0X2lkLCBpbnQgbW9kZSkiLAogICAgICAgICJIYW5kbGUgYmluYXJ5IGNvbHVtbiBkYXRhIgogICAgXSwKICAgICJvZGJjX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIG9kYmNfY2xvc2UocmVzb3VyY2UgY29ubmVjdGlvbl9pZCkiLAogICAgICAgICJDbG9zZSBhbiBPREJDIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm9kYmNfY2xvc2VfYWxsIjogWwogICAgICAgICJ2b2lkIG9kYmNfY2xvc2VfYWxsKHZvaWQpIiwKICAgICAgICAiQ2xvc2UgYWxsIE9EQkMgY29ubmVjdGlvbnMiCiAgICBdLAogICAgIm9kYmNfY29sdW1ucHJpdmlsZWdlcyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19jb2x1bW5wcml2aWxlZ2VzKHJlc291cmNlIGNvbm5lY3Rpb25faWQsIHN0cmluZyBjYXRhbG9nLCBzdHJpbmcgc2NoZW1hLCBzdHJpbmcgdGFibGUsIHN0cmluZyBjb2x1bW4pIiwKICAgICAgICAiUmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmV0Y2ggYSBsaXN0IG9mIGNvbHVtbnMgYW5kIGFzc29jaWF0ZWQgcHJpdmlsZWdlcyBmb3IgdGhlIHNwZWNpZmllZCB0YWJsZSIKICAgIF0sCiAgICAib2RiY19jb2x1bW5zIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX2NvbHVtbnMocmVzb3VyY2UgY29ubmVjdGlvbl9pZCBbLCBzdHJpbmcgcXVhbGlmaWVyIFssIHN0cmluZyBvd25lciBbLCBzdHJpbmcgdGFibGVfbmFtZSBbLCBzdHJpbmcgY29sdW1uX25hbWVdXV1dKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGZldGNoIGEgbGlzdCBvZiBjb2x1bW4gbmFtZXMgaW4gc3BlY2lmaWVkIHRhYmxlcyIKICAgIF0sCiAgICAib2RiY19jb21taXQiOiBbCiAgICAgICAgImJvb2wgb2RiY19jb21taXQocmVzb3VyY2UgY29ubmVjdGlvbl9pZCkiLAogICAgICAgICJDb21taXQgYW4gT0RCQyB0cmFuc2FjdGlvbiIKICAgIF0sCiAgICAib2RiY19jb25uZWN0IjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX2Nvbm5lY3Qoc3RyaW5nIERTTiwgc3RyaW5nIHVzZXIsIHN0cmluZyBwYXNzd29yZCBbLCBpbnQgY3Vyc29yX29wdGlvbl0pIiwKICAgICAgICAiQ29ubmVjdCB0byBhIGRhdGFzb3VyY2UiCiAgICBdLAogICAgIm9kYmNfY3Vyc29yIjogWwogICAgICAgICJzdHJpbmcgb2RiY19jdXJzb3IocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIkdldCBjdXJzb3IgbmFtZSIKICAgIF0sCiAgICAib2RiY19kYXRhX3NvdXJjZSI6IFsKICAgICAgICAiYXJyYXkgb2RiY19kYXRhX3NvdXJjZShyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBpbnQgZmV0Y2hfdHlwZSkiLAogICAgICAgICJSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnRseSBjb25uZWN0ZWQgZGF0YSBzb3VyY2UiCiAgICBdLAogICAgIm9kYmNfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBvZGJjX2Vycm9yKFtyZXNvdXJjZSBjb25uZWN0aW9uX2lkXSkiLAogICAgICAgICJHZXQgdGhlIGxhc3QgZXJyb3IgY29kZSIKICAgIF0sCiAgICAib2RiY19lcnJvcm1zZyI6IFsKICAgICAgICAic3RyaW5nIG9kYmNfZXJyb3Jtc2coW3Jlc291cmNlIGNvbm5lY3Rpb25faWRdKSIsCiAgICAgICAgIkdldCB0aGUgbGFzdCBlcnJvciBtZXNzYWdlIgogICAgXSwKICAgICJvZGJjX2V4ZWMiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfZXhlYyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBzdHJpbmcgcXVlcnkgWywgaW50IGZsYWdzXSkiLAogICAgICAgICJQcmVwYXJlIGFuZCBleGVjdXRlIGFuIFNRTCBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm9kYmNfZXhlY3V0ZSI6IFsKICAgICAgICAiYm9vbCBvZGJjX2V4ZWN1dGUocmVzb3VyY2UgcmVzdWx0X2lkIFssIGFycmF5IHBhcmFtZXRlcnNfYXJyYXldKSIsCiAgICAgICAgIkV4ZWN1dGUgYSBwcmVwYXJlZCBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm9kYmNfZmV0Y2hfYXJyYXkiOiBbCiAgICAgICAgImFycmF5IG9kYmNfZmV0Y2hfYXJyYXkoaW50IHJlc3VsdCBbLCBpbnQgcm93bnVtYmVyXSkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkiCiAgICBdLAogICAgIm9kYmNfZmV0Y2hfaW50byI6IFsKICAgICAgICAiaW50IG9kYmNfZmV0Y2hfaW50byhyZXNvdXJjZSByZXN1bHRfaWQsIGFycmF5ICZyZXN1bHRfYXJyYXksIFssIGludCByb3dudW1iZXJdKSIsCiAgICAgICAgIkZldGNoIG9uZSByZXN1bHQgcm93IGludG8gYW4gYXJyYXkiCiAgICBdLAogICAgIm9kYmNfZmV0Y2hfb2JqZWN0IjogWwogICAgICAgICJvYmplY3Qgb2RiY19mZXRjaF9vYmplY3QoaW50IHJlc3VsdCBbLCBpbnQgcm93bnVtYmVyXSkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gb2JqZWN0IgogICAgXSwKICAgICJvZGJjX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYm9vbCBvZGJjX2ZldGNoX3JvdyhyZXNvdXJjZSByZXN1bHRfaWQgWywgaW50IHJvd19udW1iZXJdKSIsCiAgICAgICAgIkZldGNoIGEgcm93IgogICAgXSwKICAgICJvZGJjX2ZpZWxkX2xlbiI6IFsKICAgICAgICAiaW50IG9kYmNfZmllbGRfbGVuKHJlc291cmNlIHJlc3VsdF9pZCwgaW50IGZpZWxkX251bWJlcikiLAogICAgICAgICJHZXQgdGhlIGxlbmd0aCAocHJlY2lzaW9uKSBvZiBhIGNvbHVtbiIKICAgIF0sCiAgICAib2RiY19maWVsZF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgb2RiY19maWVsZF9uYW1lKHJlc291cmNlIHJlc3VsdF9pZCwgaW50IGZpZWxkX251bWJlcikiLAogICAgICAgICJHZXQgYSBjb2x1bW4gbmFtZSIKICAgIF0sCiAgICAib2RiY19maWVsZF9udW0iOiBbCiAgICAgICAgImludCBvZGJjX2ZpZWxkX251bShyZXNvdXJjZSByZXN1bHRfaWQsIHN0cmluZyBmaWVsZF9uYW1lKSIsCiAgICAgICAgIlJldHVybiBjb2x1bW4gbnVtYmVyIgogICAgXSwKICAgICJvZGJjX2ZpZWxkX3NjYWxlIjogWwogICAgICAgICJpbnQgb2RiY19maWVsZF9zY2FsZShyZXNvdXJjZSByZXN1bHRfaWQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiR2V0IHRoZSBzY2FsZSBvZiBhIGNvbHVtbiIKICAgIF0sCiAgICAib2RiY19maWVsZF90eXBlIjogWwogICAgICAgICJzdHJpbmcgb2RiY19maWVsZF90eXBlKHJlc291cmNlIHJlc3VsdF9pZCwgaW50IGZpZWxkX251bWJlcikiLAogICAgICAgICJHZXQgdGhlIGRhdGF0eXBlIG9mIGEgY29sdW1uIgogICAgXSwKICAgICJvZGJjX2ZvcmVpZ25rZXlzIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX2ZvcmVpZ25rZXlzKHJlc291cmNlIGNvbm5lY3Rpb25faWQsIHN0cmluZyBwa19xdWFsaWZpZXIsIHN0cmluZyBwa19vd25lciwgc3RyaW5nIHBrX3RhYmxlLCBzdHJpbmcgZmtfcXVhbGlmaWVyLCBzdHJpbmcgZmtfb3duZXIsIHN0cmluZyBma190YWJsZSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgdG8gZWl0aGVyIGEgbGlzdCBvZiBmb3JlaWduIGtleXMgaW4gdGhlIHNwZWNpZmllZCB0YWJsZSBvciBhIGxpc3Qgb2YgZm9yZWlnbiBrZXlzIGluIG90aGVyIHRhYmxlcyB0aGF0IHJlZmVyIHRvIHRoZSBwcmltYXJ5IGtleSBpbiB0aGUgc3BlY2lmaWVkIHRhYmxlIgogICAgXSwKICAgICJvZGJjX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJib29sIG9kYmNfZnJlZV9yZXN1bHQocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIkZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHJlc3VsdCIKICAgIF0sCiAgICAib2RiY19nZXR0eXBlaW5mbyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19nZXR0eXBlaW5mbyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkIFssIGludCBkYXRhX3R5cGVdKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGRhdGEgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhIHNvdXJjZSIKICAgIF0sCiAgICAib2RiY19sb25ncmVhZGxlbiI6IFsKICAgICAgICAiYm9vbCBvZGJjX2xvbmdyZWFkbGVuKGludCByZXN1bHRfaWQsIGludCBsZW5ndGgpIiwKICAgICAgICAiSGFuZGxlIExPTkcgY29sdW1ucyIKICAgIF0sCiAgICAib2RiY19uZXh0X3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBvZGJjX25leHRfcmVzdWx0KHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJDaGVja3MgaWYgbXVsdGlwbGUgcmVzdWx0cyBhcmUgYXZhaWFibGUiCiAgICBdLAogICAgIm9kYmNfbnVtX2ZpZWxkcyI6IFsKICAgICAgICAiaW50IG9kYmNfbnVtX2ZpZWxkcyhyZXNvdXJjZSByZXN1bHRfaWQpIiwKICAgICAgICAiR2V0IG51bWJlciBvZiBjb2x1bW5zIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJvZGJjX251bV9yb3dzIjogWwogICAgICAgICJpbnQgb2RiY19udW1fcm93cyhyZXNvdXJjZSByZXN1bHRfaWQpIiwKICAgICAgICAiR2V0IG51bWJlciBvZiByb3dzIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJvZGJjX3Bjb25uZWN0IjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX3Bjb25uZWN0KHN0cmluZyBEU04sIHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzc3dvcmQgWywgaW50IGN1cnNvcl9vcHRpb25dKSIsCiAgICAgICAgIkVzdGFibGlzaCBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiB0byBhIGRhdGFzb3VyY2UiCiAgICBdLAogICAgIm9kYmNfcHJlcGFyZSI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19wcmVwYXJlKHJlc291cmNlIGNvbm5lY3Rpb25faWQsIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJQcmVwYXJlcyBhIHN0YXRlbWVudCBmb3IgZXhlY3V0aW9uIgogICAgXSwKICAgICJvZGJjX3ByaW1hcnlrZXlzIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX3ByaW1hcnlrZXlzKHJlc291cmNlIGNvbm5lY3Rpb25faWQsIHN0cmluZyBxdWFsaWZpZXIsIHN0cmluZyBvd25lciwgc3RyaW5nIHRhYmxlKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciBsaXN0aW5nIHRoZSBjb2x1bW4gbmFtZXMgdGhhdCBjb21wcmlzZSB0aGUgcHJpbWFyeSBrZXkgZm9yIGEgdGFibGUiCiAgICBdLAogICAgIm9kYmNfcHJvY2VkdXJlY29sdW1ucyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19wcm9jZWR1cmVjb2x1bW5zKHJlc291cmNlIGNvbm5lY3Rpb25faWQgWywgc3RyaW5nIHF1YWxpZmllciwgc3RyaW5nIG93bmVyLCBzdHJpbmcgcHJvYywgc3RyaW5nIGNvbHVtbl0pIiwKICAgICAgICAiUmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgaW5wdXQgYW5kIG91dHB1dCBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIHRoZSBjb2x1bW5zIHRoYXQgbWFrZSB1cCB0aGUgcmVzdWx0IHNldCBmb3IgdGhlIHNwZWNpZmllZCBwcm9jZWR1cmVzIgogICAgXSwKICAgICJvZGJjX3Byb2NlZHVyZXMiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfcHJvY2VkdXJlcyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkIFssIHN0cmluZyBxdWFsaWZpZXIsIHN0cmluZyBvd25lciwgc3RyaW5nIG5hbWVdKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciBjb250YWluZyB0aGUgbGlzdCBvZiBwcm9jZWR1cmUgbmFtZXMgaW4gYSBkYXRhc291cmNlIgogICAgXSwKICAgICJvZGJjX3Jlc3VsdCI6IFsKICAgICAgICAibWl4ZWQgb2RiY19yZXN1bHQocmVzb3VyY2UgcmVzdWx0X2lkLCBtaXhlZCBmaWVsZCkiLAogICAgICAgICJHZXQgcmVzdWx0IGRhdGEiCiAgICBdLAogICAgIm9kYmNfcmVzdWx0X2FsbCI6IFsKICAgICAgICAiaW50IG9kYmNfcmVzdWx0X2FsbChyZXNvdXJjZSByZXN1bHRfaWQgWywgc3RyaW5nIGZvcm1hdF0pIiwKICAgICAgICAiUHJpbnQgcmVzdWx0IGFzIEhUTUwgdGFibGUiCiAgICBdLAogICAgIm9kYmNfcm9sbGJhY2siOiBbCiAgICAgICAgImJvb2wgb2RiY19yb2xsYmFjayhyZXNvdXJjZSBjb25uZWN0aW9uX2lkKSIsCiAgICAgICAgIlJvbGxiYWNrIGEgdHJhbnNhY3Rpb24iCiAgICBdLAogICAgIm9kYmNfc2V0b3B0aW9uIjogWwogICAgICAgICJib29sIG9kYmNfc2V0b3B0aW9uKHJlc291cmNlIGNvbm5faWR8cmVzdWx0X2lkLCBpbnQgd2hpY2gsIGludCBvcHRpb24sIGludCB2YWx1ZSkiLAogICAgICAgICJTZXRzIGNvbm5lY3Rpb24gb3Igc3RhdGVtZW50IG9wdGlvbnMiCiAgICBdLAogICAgIm9kYmNfc3BlY2lhbGNvbHVtbnMiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfc3BlY2lhbGNvbHVtbnMocmVzb3VyY2UgY29ubmVjdGlvbl9pZCwgaW50IHR5cGUsIHN0cmluZyBxdWFsaWZpZXIsIHN0cmluZyBvd25lciwgc3RyaW5nIHRhYmxlLCBpbnQgc2NvcGUsIGludCBudWxsYWJsZSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgY29udGFpbmluZyBlaXRoZXIgdGhlIG9wdGltYWwgc2V0IG9mIGNvbHVtbnMgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIGEgcm93IGluIHRoZSB0YWJsZSBvciBjb2x1bW5zIHRoYXQgYXJlIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCB3aGVuIGFueSB2YWx1ZSBpbiB0aGUgcm93IGlzIHVwZGF0ZWQgYnkgYSB0cmFuc2FjdGlvbiIKICAgIF0sCiAgICAib2RiY19zdGF0aXN0aWNzIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX3N0YXRpc3RpY3MocmVzb3VyY2UgY29ubmVjdGlvbl9pZCwgc3RyaW5nIHF1YWxpZmllciwgc3RyaW5nIG93bmVyLCBzdHJpbmcgbmFtZSwgaW50IHVuaXF1ZSwgaW50IGFjY3VyYWN5KSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciB0aGF0IGNvbnRhaW5zIHN0YXRpc3RpY3MgYWJvdXQgYSBzaW5nbGUgdGFibGUgYW5kIHRoZSBpbmRleGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUiCiAgICBdLAogICAgIm9kYmNfdGFibGVwcml2aWxlZ2VzIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX3RhYmxlcHJpdmlsZWdlcyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBzdHJpbmcgcXVhbGlmaWVyLCBzdHJpbmcgb3duZXIsIHN0cmluZyBuYW1lKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciBjb250YWluaW5nIGEgbGlzdCBvZiB0YWJsZXMgYW5kIHRoZSBwcml2aWxlZ2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHRhYmxlIgogICAgXSwKICAgICJvZGJjX3RhYmxlcyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY190YWJsZXMocmVzb3VyY2UgY29ubmVjdGlvbl9pZCBbLCBzdHJpbmcgcXVhbGlmaWVyIFssIHN0cmluZyBvd25lciBbLCBzdHJpbmcgbmFtZSBbLCBzdHJpbmcgdGFibGVfdHlwZXNdXV1dKSIsCiAgICAgICAgIkNhbGwgdGhlIFNRTFRhYmxlcyBmdW5jdGlvbiIKICAgIF0sCiAgICAib3BlbmRpciI6IFsKICAgICAgICAibWl4ZWQgb3BlbmRpcihzdHJpbmcgcGF0aFssIHJlc291cmNlIGNvbnRleHRdKSIsCiAgICAgICAgIk9wZW4gYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGRpcl9oYW5kbGUiCiAgICBdLAogICAgIm9wZW5sb2ciOiBbCiAgICAgICAgImJvb2wgb3BlbmxvZyhzdHJpbmcgaWRlbnQsIGludCBvcHRpb24sIGludCBmYWNpbGl0eSkiLAogICAgICAgICJPcGVuIGNvbm5lY3Rpb24gdG8gc3lzdGVtIGxvZ2dlciIKICAgIF0sCiAgICAib3BlbnNzbF9jc3JfZXhwb3J0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfY3NyX2V4cG9ydChyZXNvdXJjZSBjc3IsIHN0cmluZyAmb3V0IFssIGJvb2wgbm90ZXh0PXRydWVdKSIsCiAgICAgICAgIkV4cG9ydHMgYSBDU1IgdG8gZmlsZSBvciBhIHZhciIKICAgIF0sCiAgICAib3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9jc3JfZXhwb3J0X3RvX2ZpbGUocmVzb3VyY2UgY3NyLCBzdHJpbmcgb3V0ZmlsZW5hbWUgWywgYm9vbCBub3RleHQ9dHJ1ZV0pIiwKICAgICAgICAiRXhwb3J0cyBhIENTUiB0byBmaWxlIgogICAgXSwKICAgICJvcGVuc3NsX2Nzcl9nZXRfcHVibGljX2tleSI6IFsKICAgICAgICAibWl4ZWQgb3BlbnNzbF9jc3JfZ2V0X3B1YmxpY19rZXkobWl4ZWQgY3NyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHN1YmplY3Qgb2YgYSBDRVJUIG9yIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJvcGVuc3NsX2Nzcl9nZXRfc3ViamVjdCI6IFsKICAgICAgICAibWl4ZWQgb3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QobWl4ZWQgY3NyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHN1YmplY3Qgb2YgYSBDRVJUIG9yIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJvcGVuc3NsX2Nzcl9uZXciOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9jc3JfbmV3KGFycmF5IGRuLCByZXNvdXJjZSAmcHJpdmtleSBbLCBhcnJheSBjb25maWdhcmdzIFssIGFycmF5IGV4dHJhYXR0cmlic11dKSIsCiAgICAgICAgIkdlbmVyYXRlcyBhIHByaXZrZXkgYW5kIENTUiIKICAgIF0sCiAgICAib3BlbnNzbF9jc3Jfc2lnbiI6IFsKICAgICAgICAicmVzb3VyY2Ugb3BlbnNzbF9jc3Jfc2lnbihtaXhlZCBjc3IsIG1peGVkIHg1MDksIG1peGVkIHByaXZfa2V5LCBsb25nIGRheXMgWywgYXJyYXkgY29uZmlnX2FyZ3MgWywgbG9uZyBzZXJpYWxdXSkiLAogICAgICAgICJTaWducyBhIGNlcnQgd2l0aCBhbm90aGVyIENFUlQiCiAgICBdLAogICAgIm9wZW5zc2xfZGVjcnlwdCI6IFsKICAgICAgICAic3RyaW5nIG9wZW5zc2xfZGVjcnlwdChzdHJpbmcgZGF0YSwgc3RyaW5nIG1ldGhvZCwgc3RyaW5nIHBhc3N3b3JkIFssIGJvb2wgcmF3X2lucHV0PWZhbHNlXSkiLAogICAgICAgICJUYWtlcyByYXcgb3IgYmFzZTY0IGVuY29kZWQgc3RyaW5nIGFuZCBkZWN0dXB0IGl0IHVzaW5nIGdpdmVuIG1ldGhvZCBhbmQga2V5IgogICAgXSwKICAgICJvcGVuc3NsX2RoX2NvbXB1dGVfa2V5IjogWwogICAgICAgICJzdHJpbmcgb3BlbnNzbF9kaF9jb21wdXRlX2tleShzdHJpbmcgcHViX2tleSwgcmVzb3VyY2UgZGhfa2V5KSIsCiAgICAgICAgIkNvbXB1dGVzIHNoYXJlZCBzaWNyZXQgZm9yIHB1YmxpYyB2YWx1ZSBvZiByZW1vdGUgREgga2V5IGFuZCBsb2NhbCBESCBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfZGlnZXN0IjogWwogICAgICAgICJzdHJpbmcgb3BlbnNzbF9kaWdlc3Qoc3RyaW5nIGRhdGEsIHN0cmluZyBtZXRob2QgWywgYm9vbCByYXdfb3V0cHV0PWZhbHNlXSkiLAogICAgICAgICJDb21wdXRlcyBkaWdlc3QgaGFzaCB2YWx1ZSBmb3IgZ2l2ZW4gZGF0YSB1c2luZyBnaXZlbiBtZXRob2QsIHJldHVybnMgcmF3IG9yIGJpbmhleCBlbmNvZGVkIHN0cmluZyIKICAgIF0sCiAgICAib3BlbnNzbF9lbmNyeXB0IjogWwogICAgICAgICJzdHJpbmcgb3BlbnNzbF9lbmNyeXB0KHN0cmluZyBkYXRhLCBzdHJpbmcgbWV0aG9kLCBzdHJpbmcgcGFzc3dvcmQgWywgYm9vbCByYXdfb3V0cHV0PWZhbHNlXSkiLAogICAgICAgICJFbmNyeXB0cyBnaXZlbiBkYXRhIHdpdGggZ2l2ZW4gbWV0aG9kIGFuZCBrZXksIHJldHVybnMgcmF3IG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyIKICAgIF0sCiAgICAib3BlbnNzbF9lcnJvcl9zdHJpbmciOiBbCiAgICAgICAgIm1peGVkIG9wZW5zc2xfZXJyb3Jfc3RyaW5nKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsYXN0IGVycm9yLCBhbmQgYWx0ZXJzIHRoZSBpbmRleCBvZiB0aGUgZXJyb3IgbWVzc2FnZXMuIFJldHVybnMgZmFsc2Ugd2hlbiB0aGUgYXJlIG5vIG1vcmUgbWVzc2FnZXMiCiAgICBdLAogICAgIm9wZW5zc2xfZ2V0X2NpcGhlcl9tZXRob2RzIjogWwogICAgICAgICJhcnJheSBvcGVuc3NsX2dldF9jaXBoZXJfbWV0aG9kcyhbYm9vbCBhbGlhc2VzID0gZmFsc2VdKSIsCiAgICAgICAgIlJldHVybiBhcnJheSBvZiBhdmFpbGFibGUgY2lwaGVyIG1ldGhvZHMiCiAgICBdLAogICAgIm9wZW5zc2xfZ2V0X21kX21ldGhvZHMiOiBbCiAgICAgICAgImFycmF5IG9wZW5zc2xfZ2V0X21kX21ldGhvZHMoW2Jvb2wgYWxpYXNlcyA9IGZhbHNlXSkiLAogICAgICAgICJSZXR1cm4gYXJyYXkgb2YgYXZhaWxhYmxlIGRpZ2VzdCBtZXRob2RzIgogICAgXSwKICAgICJvcGVuc3NsX29wZW4iOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9vcGVuKHN0cmluZyBkYXRhLCAmc3RyaW5nIG9wZW5kYXRhLCBzdHJpbmcgZWtleSwgbWl4ZWQgcHJpdmtleSkiLAogICAgICAgICJPcGVucyBkYXRhIgogICAgXSwKICAgICJvcGVuc3NsX3BrY3MxMl9leHBvcnQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2NzMTJfZXhwb3J0KG1peGVkIHg1MDksIHN0cmluZyAmb3V0LCBtaXhlZCBwcml2X2tleSwgc3RyaW5nIHBhc3NbLCBhcnJheSBhcmdzXSkiLAogICAgICAgICJDcmVhdGVzIGFuZCBleHBvcnRzIGEgUEtDUzEyIHRvIGEgdmFyIgogICAgXSwKICAgICJvcGVuc3NsX3BrY3MxMl9leHBvcnRfdG9fZmlsZSI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3BrY3MxMl9leHBvcnRfdG9fZmlsZShtaXhlZCB4NTA5LCBzdHJpbmcgZmlsZW5hbWUsIG1peGVkIHByaXZfa2V5LCBzdHJpbmcgcGFzc1ssIGFycmF5IGFyZ3NdKSIsCiAgICAgICAgIkNyZWF0ZXMgYW5kIGV4cG9ydHMgYSBQS0NTIHRvIGZpbGUiCiAgICBdLAogICAgIm9wZW5zc2xfcGtjczEyX3JlYWQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2NzMTJfcmVhZChzdHJpbmcgUEtDUzEyLCBhcnJheSAmY2VydHMsIHN0cmluZyBwYXNzKSIsCiAgICAgICAgIlBhcnNlcyBhIFBLQ1MxMiB0byBhbiBhcnJheSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2NzN19kZWNyeXB0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtjczdfZGVjcnlwdChzdHJpbmcgaW5maWxlbmFtZSwgc3RyaW5nIG91dGZpbGVuYW1lLCBtaXhlZCByZWNpcGNlcnQgWywgbWl4ZWQgcmVjaXBrZXldKSIsCiAgICAgICAgIkRlY3J5cHRzIHRoZSBTL01JTUUgbWVzc2FnZSBpbiB0aGUgZmlsZSBuYW1lIGluZmlsZW5hbWUgYW5kIG91dHB1dCB0aGUgcmVzdWx0cyB0byB0aGUgZmlsZSBuYW1lIG91dGZpbGVuYW1lLiAgcmVjaXBjZXJ0IGlzIGEgQ0VSVCBmb3Igb25lIG9mIHRoZSByZWNpcGllbnRzLiByZWNpcGtleSBzcGVjaWZpZXMgdGhlIHByaXZhdGUga2V5IG1hdGNoaW5nIHJlY2lwY2VydCwgaWYgcmVjaXBjZXJ0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGtleSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2NzN19lbmNyeXB0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtjczdfZW5jcnlwdChzdHJpbmcgaW5maWxlLCBzdHJpbmcgb3V0ZmlsZSwgbWl4ZWQgcmVjaXBjZXJ0cywgYXJyYXkgaGVhZGVycyBbLCBsb25nIGZsYWdzIFssIGxvbmcgY2lwaGVyXV0pIiwKICAgICAgICAiRW5jcnlwdHMgdGhlIG1lc3NhZ2UgaW4gdGhlIGZpbGUgbmFtZWQgaW5maWxlIHdpdGggdGhlIGNlcnRpZmljYXRlcyBpbiByZWNpcGNlcnRzIGFuZCBvdXRwdXQgdGhlIHJlc3VsdCB0byB0aGUgZmlsZSBuYW1lZCBvdXRmaWxlIgogICAgXSwKICAgICJvcGVuc3NsX3BrY3M3X3NpZ24iOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2NzN19zaWduKHN0cmluZyBpbmZpbGUsIHN0cmluZyBvdXRmaWxlLCBtaXhlZCBzaWduY2VydCwgbWl4ZWQgc2lnbmtleSwgYXJyYXkgaGVhZGVycyBbLCBsb25nIGZsYWdzIFssIHN0cmluZyBleHRyYWNlcnRzZmlsZW5hbWVdXSkiLAogICAgICAgICJTaWducyB0aGUgTUlNRSBtZXNzYWdlIGluIHRoZSBmaWxlIG5hbWVkIGluZmlsZSB3aXRoIHNpZ25jZXJ0L3NpZ25rZXkgYW5kIG91dHB1dCB0aGUgcmVzdWx0IHRvIGZpbGUgbmFtZSBvdXRmaWxlLiBoZWFkZXJzIGxpc3RzIHBsYWluIHRleHQgaGVhZGVycyB0byBleGNsdWRlIGZyb20gdGhlIHNpZ25lZCBwb3J0aW9uIG9mIHRoZSBtZXNzYWdlLCBhbmQgc2hvdWxkIGluY2x1ZGUgdG8sIGZyb20gYW5kIHN1YmplY3QgYXMgYSBtaW5pbXVtIgogICAgXSwKICAgICJvcGVuc3NsX3BrY3M3X3ZlcmlmeSI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3BrY3M3X3ZlcmlmeShzdHJpbmcgZmlsZW5hbWUsIGxvbmcgZmxhZ3MgWywgc3RyaW5nIHNpZ25lcnNjZXJ0cyBbLCBhcnJheSBjYWluZm8gWywgc3RyaW5nIGV4dHJhY2VydHMgWywgc3RyaW5nIGNvbnRlbnRdXV1dKSIsCiAgICAgICAgIlZlcmlmeXMgdGhhdCB0aGUgZGF0YSBibG9jayBpcyBpbnRhY3QsIHRoZSBzaWduZXIgaXMgd2hvIHRoZXkgc2F5IHRoZXkgYXJlLCBhbmQgcmV0dXJucyB0aGUgQ0VSVHMgb2YgdGhlIHNpZ25lcnMiCiAgICBdLAogICAgIm9wZW5zc2xfcGtleV9leHBvcnQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2V5X2V4cG9ydChtaXhlZCBrZXksICZtaXhlZCBvdXQgWywgc3RyaW5nIHBhc3NwaHJhc2UgWywgYXJyYXkgY29uZmlnX2FyZ3NdXSkiLAogICAgICAgICJHZXRzIGFuIGV4cG9ydGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBrZXkgaW50byBhIHN0cmluZyBvciBmaWxlIgogICAgXSwKICAgICJvcGVuc3NsX3BrZXlfZXhwb3J0X3RvX2ZpbGUiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlKG1peGVkIGtleSwgc3RyaW5nIG91dGZpbGVuYW1lIFssIHN0cmluZyBwYXNzcGhyYXNlLCBhcnJheSBjb25maWdfYXJncykiLAogICAgICAgICJHZXRzIGFuIGV4cG9ydGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBrZXkgaW50byBhIGZpbGUiCiAgICBdLAogICAgIm9wZW5zc2xfcGtleV9mcmVlIjogWwogICAgICAgICJ2b2lkIG9wZW5zc2xfcGtleV9mcmVlKGludCBrZXkpIiwKICAgICAgICAiRnJlZXMgYSBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfcGtleV9nZXRfZGV0YWlscyI6IFsKICAgICAgICAicmVzb3VyY2Ugb3BlbnNzbF9wa2V5X2dldF9kZXRhaWxzKHJlc291cmNlIGtleSkiLAogICAgICAgICJyZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGtleSBkZXRhaWxzIChiaXRzLCBwa2V5LCB0eXBlKSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2V5X2dldF9wcml2YXRlIjogWwogICAgICAgICJpbnQgb3BlbnNzbF9wa2V5X2dldF9wcml2YXRlKHN0cmluZyBrZXkgWywgc3RyaW5nIHBhc3NwaHJhc2VdKSIsCiAgICAgICAgIkdldHMgcHJpdmF0ZSBrZXlzIgogICAgXSwKICAgICJvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYyI6IFsKICAgICAgICAiaW50IG9wZW5zc2xfcGtleV9nZXRfcHVibGljKG1peGVkIGNlcnQpIiwKICAgICAgICAiR2V0cyBwdWJsaWMga2V5IGZyb20gWC41MDkgY2VydGlmaWNhdGUiCiAgICBdLAogICAgIm9wZW5zc2xfcGtleV9uZXciOiBbCiAgICAgICAgInJlc291cmNlIG9wZW5zc2xfcGtleV9uZXcoW2FycmF5IGNvbmZpZ2FyZ3NdKSIsCiAgICAgICAgIkdlbmVyYXRlcyBhIG5ldyBwcml2YXRlIGtleSIKICAgIF0sCiAgICAib3BlbnNzbF9wcml2YXRlX2RlY3J5cHQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wcml2YXRlX2RlY3J5cHQoc3RyaW5nIGRhdGEsIHN0cmluZyAmZGVjcnlwdGVkLCBtaXhlZCBrZXkgWywgaW50IHBhZGRpbmddKSIsCiAgICAgICAgIkRlY3J5cHRzIGRhdGEgd2l0aCBwcml2YXRlIGtleSIKICAgIF0sCiAgICAib3BlbnNzbF9wcml2YXRlX2VuY3J5cHQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wcml2YXRlX2VuY3J5cHQoc3RyaW5nIGRhdGEsIHN0cmluZyAmY3J5cHRlZCwgbWl4ZWQga2V5IFssIGludCBwYWRkaW5nXSkiLAogICAgICAgICJFbmNyeXB0cyBkYXRhIHdpdGggcHJpdmF0ZSBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfcHVibGljX2RlY3J5cHQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wdWJsaWNfZGVjcnlwdChzdHJpbmcgZGF0YSwgc3RyaW5nICZjcnlwdGVkLCByZXNvdXJjZSBrZXkgWywgaW50IHBhZGRpbmddKSIsCiAgICAgICAgIkRlY3J5cHRzIGRhdGEgd2l0aCBwdWJsaWMga2V5IgogICAgXSwKICAgICJvcGVuc3NsX3B1YmxpY19lbmNyeXB0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcHVibGljX2VuY3J5cHQoc3RyaW5nIGRhdGEsIHN0cmluZyAmY3J5cHRlZCwgbWl4ZWQga2V5IFssIGludCBwYWRkaW5nXSkiLAogICAgICAgICJFbmNyeXB0cyBkYXRhIHdpdGggcHVibGljIGtleSIKICAgIF0sCiAgICAib3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzIjogWwogICAgICAgICJzdHJpbmcgb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzKGludGVnZXIgbGVuZ3RoIFssICZib29sIHJldHVybmVkX3N0cm9uZ19yZXN1bHRdKSIsCiAgICAgICAgIlJldHVybnMgYSBzdHJpbmcgb2YgdGhlIGxlbmd0aCBzcGVjaWZpZWQgZmlsbGVkIHdpdGggcmFuZG9tIHBzZXVkbyBieXRlcyIKICAgIF0sCiAgICAib3BlbnNzbF9zZWFsIjogWwogICAgICAgICJpbnQgb3BlbnNzbF9zZWFsKHN0cmluZyBkYXRhLCAmc3RyaW5nIHNlYWxkYXRhLCAmYXJyYXkgZWtleXMsIGFycmF5IHB1YmtleXMpIiwKICAgICAgICAiU2VhbHMgZGF0YSIKICAgIF0sCiAgICAib3BlbnNzbF9zaWduIjogWwogICAgICAgICJib29sIG9wZW5zc2xfc2lnbihzdHJpbmcgZGF0YSwgJnN0cmluZyBzaWduYXR1cmUsIG1peGVkIGtleVssIG1peGVkIG1ldGhvZF0pIiwKICAgICAgICAiU2lnbnMgZGF0YSIKICAgIF0sCiAgICAib3BlbnNzbF92ZXJpZnkiOiBbCiAgICAgICAgImludCBvcGVuc3NsX3ZlcmlmeShzdHJpbmcgZGF0YSwgc3RyaW5nIHNpZ25hdHVyZSwgbWl4ZWQga2V5WywgbWl4ZWQgbWV0aG9kXSkiLAogICAgICAgICJWZXJpZnlzIGRhdGEiCiAgICBdLAogICAgIm9wZW5zc2xfeDUwOV9jaGVja19wcml2YXRlX2tleSI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3g1MDlfY2hlY2tfcHJpdmF0ZV9rZXkobWl4ZWQgY2VydCwgbWl4ZWQga2V5KSIsCiAgICAgICAgIkNoZWNrcyBpZiBhIHByaXZhdGUga2V5IGNvcnJlc3BvbmRzIHRvIGEgQ0VSVCIKICAgIF0sCiAgICAib3BlbnNzbF94NTA5X2NoZWNrcHVycG9zZSI6IFsKICAgICAgICAiaW50IG9wZW5zc2xfeDUwOV9jaGVja3B1cnBvc2UobWl4ZWQgeDUwOWNlcnQsIGludCBwdXJwb3NlLCBhcnJheSBjYWluZm8gWywgc3RyaW5nIHVudHJ1c3RlZGZpbGVdKSIsCiAgICAgICAgIkNoZWNrcyB0aGUgQ0VSVCB0byBzZWUgaWYgaXQgY2FuIGJlIHVzZWQgZm9yIHRoZSBwdXJwb3NlIGluIHB1cnBvc2UuIGNhaW5mbyBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0cnVzdGVkIENBcyIKICAgIF0sCiAgICAib3BlbnNzbF94NTA5X2V4cG9ydCI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3g1MDlfZXhwb3J0KG1peGVkIHg1MDksIHN0cmluZyAmb3V0IFssIGJvb2wgbm90ZXh0ID0gdHJ1ZV0pIiwKICAgICAgICAiRXhwb3J0cyBhIENFUlQgdG8gZmlsZSBvciBhIHZhciIKICAgIF0sCiAgICAib3BlbnNzbF94NTA5X2V4cG9ydF90b19maWxlIjogWwogICAgICAgICJib29sIG9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZShtaXhlZCB4NTA5LCBzdHJpbmcgb3V0ZmlsZW5hbWUgWywgYm9vbCBub3RleHQgPSB0cnVlXSkiLAogICAgICAgICJFeHBvcnRzIGEgQ0VSVCB0byBmaWxlIG9yIGEgdmFyIgogICAgXSwKICAgICJvcGVuc3NsX3g1MDlfZnJlZSI6IFsKICAgICAgICAidm9pZCBvcGVuc3NsX3g1MDlfZnJlZShyZXNvdXJjZSB4NTA5KSIsCiAgICAgICAgIkZyZWVzIFguNTA5IGNlcnRpZmljYXRlcyIKICAgIF0sCiAgICAib3BlbnNzbF94NTA5X3BhcnNlIjogWwogICAgICAgICJhcnJheSBvcGVuc3NsX3g1MDlfcGFyc2UobWl4ZWQgeDUwOSBbLCBib29sIHNob3J0bmFtZXM9dHJ1ZV0pIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgZmllbGRzL3ZhbHVlcyBvZiB0aGUgQ0VSVCIKICAgIF0sCiAgICAib3BlbnNzbF94NTA5X3JlYWQiOiBbCiAgICAgICAgInJlc291cmNlIG9wZW5zc2xfeDUwOV9yZWFkKG1peGVkIGNlcnQpIiwKICAgICAgICAiUmVhZHMgWC41MDkgY2VydGlmaWNhdGVzIgogICAgXSwKICAgICJvcmQiOiBbCiAgICAgICAgImludCBvcmQoc3RyaW5nIGNoYXJhY3RlcikiLAogICAgICAgICJSZXR1cm5zIEFTQ0lJIHZhbHVlIG9mIGNoYXJhY3RlciIKICAgIF0sCiAgICAib3V0cHV0X2FkZF9yZXdyaXRlX3ZhciI6IFsKICAgICAgICAiYm9vbCBvdXRwdXRfYWRkX3Jld3JpdGVfdmFyKHN0cmluZyBuYW1lLCBzdHJpbmcgdmFsdWUpIiwKICAgICAgICAiQWRkIFVSTCByZXdyaXRlciB2YWx1ZXMiCiAgICBdLAogICAgIm91dHB1dF9yZXNldF9yZXdyaXRlX3ZhcnMiOiBbCiAgICAgICAgImJvb2wgb3V0cHV0X3Jlc2V0X3Jld3JpdGVfdmFycyh2b2lkKSIsCiAgICAgICAgIlJlc2V0KGNsZWFyKSBVUkwgcmV3cml0ZXIgdmFsdWVzIgogICAgXSwKICAgICJwYWNrIjogWwogICAgICAgICJzdHJpbmcgcGFjayhzdHJpbmcgZm9ybWF0LCBtaXhlZCBhcmcxIFssIG1peGVkIGFyZzIgWywgbWl4ZWQgLi4uXV0pIiwKICAgICAgICAiVGFrZXMgb25lIG9yIG1vcmUgYXJndW1lbnRzIGFuZCBwYWNrcyB0aGVtIGludG8gYSBiaW5hcnkgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IGFyZ3VtZW50IgogICAgXSwKICAgICJwYXJzZV9pbmlfZmlsZSI6IFsKICAgICAgICAiYXJyYXkgcGFyc2VfaW5pX2ZpbGUoc3RyaW5nIGZpbGVuYW1lIFssIGJvb2wgcHJvY2Vzc19zZWN0aW9ucyBbLCBpbnQgc2Nhbm5lcl9tb2RlXV0pIiwKICAgICAgICAiUGFyc2UgY29uZmlndXJhdGlvbiBmaWxlIgogICAgXSwKICAgICJwYXJzZV9pbmlfc3RyaW5nIjogWwogICAgICAgICJhcnJheSBwYXJzZV9pbmlfc3RyaW5nKHN0cmluZyBpbmlfc3RyaW5nIFssIGJvb2wgcHJvY2Vzc19zZWN0aW9ucyBbLCBpbnQgc2Nhbm5lcl9tb2RlXV0pIiwKICAgICAgICAiUGFyc2UgY29uZmlndXJhdGlvbiBzdHJpbmciCiAgICBdLAogICAgInBhcnNlX2xvY2FsZSI6IFsKICAgICAgICAic3RhdGljIGFycmF5IHBhcnNlX2xvY2FsZSgkbG9jYWxlKSIsCiAgICAgICAgIiogcGFyc2VzIGEgbG9jYWxlLWlkIGludG8gYW4gYXJyYXkgdGhlIGRpZmZlcmVudCBwYXJ0cyBvZiBpdCIKICAgIF0sCiAgICAicGFyc2Vfc3RyIjogWwogICAgICAgICJ2b2lkIHBhcnNlX3N0cihzdHJpbmcgZW5jb2RlZF9zdHJpbmcgWywgYXJyYXkgcmVzdWx0XSkiLAogICAgICAgICJQYXJzZXMgR0VUL1BPU1QvQ09PS0lFIGRhdGEgYW5kIHNldHMgZ2xvYmFsIHZhcmlhYmxlcyIKICAgIF0sCiAgICAicGFyc2VfdXJsIjogWwogICAgICAgICJtaXhlZCBwYXJzZV91cmwoc3RyaW5nIHVybCwgW2ludCB1cmxfY29tcG9uZW50XSkiLAogICAgICAgICJQYXJzZSBhIFVSTCBhbmQgcmV0dXJuIGl0cyBjb21wb25lbnRzIgogICAgXSwKICAgICJwYXNzdGhydSI6IFsKICAgICAgICAidm9pZCBwYXNzdGhydShzdHJpbmcgY29tbWFuZCBbLCBpbnQgJnJldHVybl92YWx1ZV0pIiwKICAgICAgICAiRXhlY3V0ZSBhbiBleHRlcm5hbCBwcm9ncmFtIGFuZCBkaXNwbGF5IHJhdyBvdXRwdXQiCiAgICBdLAogICAgInBhdGhpbmZvIjogWwogICAgICAgICJhcnJheSBwYXRoaW5mbyhzdHJpbmcgcGF0aFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgY2VydGFpbiBzdHJpbmciCiAgICBdLAogICAgInBjbG9zZSI6IFsKICAgICAgICAiaW50IHBjbG9zZShyZXNvdXJjZSBmcCkiLAogICAgICAgICJDbG9zZSBhIGZpbGUgcG9pbnRlciBvcGVuZWQgYnkgcG9wZW4oKSIKICAgIF0sCiAgICAicGNubHRfc2lnd2FpdGluZm8iOiBbCiAgICAgICAgImludCBwY25sdF9zaWd3YWl0aW5mbyhhcnJheSBzZXRbLCBhcnJheSAmc2lnaW5mb10pIiwKICAgICAgICAiU3luY2hyb25vdXNseSB3YWl0IGZvciBxdWV1ZWQgc2lnbmFscyIKICAgIF0sCiAgICAicGNudGxfYWxhcm0iOiBbCiAgICAgICAgImludCBwY250bF9hbGFybShpbnQgc2Vjb25kcykiLAogICAgICAgICJTZXQgYW4gYWxhcm0gY2xvY2sgZm9yIGRlbGl2ZXJ5IG9mIGEgc2lnbmFsIgogICAgXSwKICAgICJwY250bF9leGVjIjogWwogICAgICAgICJib29sIHBjbnRsX2V4ZWMoc3RyaW5nIHBhdGggWywgYXJyYXkgYXJncyBbLCBhcnJheSBlbnZzXV0pIiwKICAgICAgICAiRXhlY3V0ZXMgc3BlY2lmaWVkIHByb2dyYW0gaW4gY3VycmVudCBwcm9jZXNzIHNwYWNlIGFzIGRlZmluZWQgYnkgZXhlYygyKSIKICAgIF0sCiAgICAicGNudGxfZm9yayI6IFsKICAgICAgICAiaW50IHBjbnRsX2Zvcmsodm9pZCkiLAogICAgICAgICJGb3JrcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcyBmb2xsb3dpbmcgdGhlIHNhbWUgYmVoYXZpb3IgYXMgdGhlIFVOSVggZm9yaygpIHN5c3RlbSBjYWxsIgogICAgXSwKICAgICJwY250bF9nZXRwcmlvcml0eSI6IFsKICAgICAgICAiaW50IHBjbnRsX2dldHByaW9yaXR5KFtpbnQgcGlkIFssIGludCBwcm9jZXNzX2lkZW50aWZpZXJdXSkiLAogICAgICAgICJHZXQgdGhlIHByaW9yaXR5IG9mIGFueSBwcm9jZXNzIgogICAgXSwKICAgICJwY250bF9zZXRwcmlvcml0eSI6IFsKICAgICAgICAiYm9vbCBwY250bF9zZXRwcmlvcml0eShpbnQgcHJpb3JpdHkgWywgaW50IHBpZCBbLCBpbnQgcHJvY2Vzc19pZGVudGlmaWVyXV0pIiwKICAgICAgICAiQ2hhbmdlIHRoZSBwcmlvcml0eSBvZiBhbnkgcHJvY2VzcyIKICAgIF0sCiAgICAicGNudGxfc2lnbmFsIjogWwogICAgICAgICJib29sIHBjbnRsX3NpZ25hbChpbnQgc2lnbm8sIGNhbGxiYWNrIGhhbmRsZSBbLCBib29sIHJlc3RhcnRfc3lzY2FsbHNdKSIsCiAgICAgICAgIkFzc2lnbnMgYSBzeXN0ZW0gc2lnbmFsIGhhbmRsZXIgdG8gYSBQSFAgZnVuY3Rpb24iCiAgICBdLAogICAgInBjbnRsX3NpZ25hbF9kaXNwYXRjaCI6IFsKICAgICAgICAiYm9vbCBwY250bF9zaWduYWxfZGlzcGF0Y2goKSIsCiAgICAgICAgIkRpc3BhdGNoIHNpZ25hbHMgdG8gc2lnbmFsIGhhbmRsZXJzIgogICAgXSwKICAgICJwY250bF9zaWdwcm9jbWFzayI6IFsKICAgICAgICAiYm9vbCBwY250bF9zaWdwcm9jbWFzayhpbnQgaG93LCBhcnJheSBzZXRbLCBhcnJheSAmb2xkc2V0XSkiLAogICAgICAgICJFeGFtaW5lIGFuZCBjaGFuZ2UgYmxvY2tlZCBzaWduYWxzIgogICAgXSwKICAgICJwY250bF9zaWd0aW1lZHdhaXQiOiBbCiAgICAgICAgImludCBwY250bF9zaWd0aW1lZHdhaXQoYXJyYXkgc2V0WywgYXJyYXkgJnNpZ2luZm9bLCBpbnQgc2Vjb25kc1ssIGludCBuYW5vc2Vjb25kc11dXSkiLAogICAgICAgICJXYWl0IGZvciBxdWV1ZWQgc2lnbmFscyIKICAgIF0sCiAgICAicGNudGxfd2FpdCI6IFsKICAgICAgICAiaW50IHBjbnRsX3dhaXQoaW50ICZzdGF0dXMpIiwKICAgICAgICAiV2FpdHMgb24gb3IgcmV0dXJucyB0aGUgc3RhdHVzIG9mIGEgZm9ya2VkIGNoaWxkIGFzIGRlZmluZWQgYnkgdGhlIHdhaXRwaWQoKSBzeXN0ZW0gY2FsbCIKICAgIF0sCiAgICAicGNudGxfd2FpdHBpZCI6IFsKICAgICAgICAiaW50IHBjbnRsX3dhaXRwaWQoaW50IHBpZCwgaW50ICZzdGF0dXMsIGludCBvcHRpb25zKSIsCiAgICAgICAgIldhaXRzIG9uIG9yIHJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGZvcmtlZCBjaGlsZCBhcyBkZWZpbmVkIGJ5IHRoZSB3YWl0cGlkKCkgc3lzdGVtIGNhbGwiCiAgICBdLAogICAgInBjbnRsX3dleGl0c3RhdHVzIjogWwogICAgICAgICJpbnQgcGNudGxfd2V4aXRzdGF0dXMoaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHRoZSBzdGF0dXMgY29kZSBvZiBhIGNoaWxkJ3MgZXhpdCIKICAgIF0sCiAgICAicGNudGxfd2lmZXhpdGVkIjogWwogICAgICAgICJib29sIHBjbnRsX3dpZmV4aXRlZChpbnQgc3RhdHVzKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB0aGUgY2hpbGQgc3RhdHVzIGNvZGUgcmVwcmVzZW50cyBhIHN1Y2Nlc3NmdWwgZXhpdCIKICAgIF0sCiAgICAicGNudGxfd2lmc2lnbmFsZWQiOiBbCiAgICAgICAgImJvb2wgcGNudGxfd2lmc2lnbmFsZWQoaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHN0YXR1cyBjb2RlIHJlcHJlc2VudHMgYSBwcm9jZXNzIHRoYXQgd2FzIHRlcm1pbmF0ZWQgZHVlIHRvIGEgc2lnbmFsIgogICAgXSwKICAgICJwY250bF93aWZzdG9wcGVkIjogWwogICAgICAgICJib29sIHBjbnRsX3dpZnN0b3BwZWQoaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHN0YXR1cyBjb2RlIHJlcHJlc2VudHMgYSBzdG9wcGVkIHByb2Nlc3MgKFdVTlRSQUNFRCBtdXN0IGhhdmUgYmVlbiB1c2VkIHdpdGggd2FpdHBpZCkiCiAgICBdLAogICAgInBjbnRsX3dzdG9wc2lnIjogWwogICAgICAgICJpbnQgcGNudGxfd3N0b3BzaWcoaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHNpZ25hbCB0aGF0IGNhdXNlZCB0aGUgcHJvY2VzcyB0byBzdG9wIHdobydzIHN0YXR1cyBjb2RlIGlzIHBhc3NlZCIKICAgIF0sCiAgICAicGNudGxfd3Rlcm1zaWciOiBbCiAgICAgICAgImludCBwY250bF93dGVybXNpZyhpbnQgc3RhdHVzKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgc2lnbmFsIHRoYXQgdGVybWluYXRlZCB0aGUgcHJvY2VzcyB3aG8ncyBzdGF0dXMgY29kZSBpcyBwYXNzZWQiCiAgICBdLAogICAgInBkb19kcml2ZXJzIjogWwogICAgICAgICJhcnJheSBwZG9fZHJpdmVycygpIiwKICAgICAgICAiUmV0dXJuIGFycmF5IG9mIGF2YWlsYWJsZSBQRE8gZHJpdmVycyIKICAgIF0sCiAgICAicGZzb2Nrb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgcGZzb2Nrb3BlbihzdHJpbmcgaG9zdG5hbWUsIGludCBwb3J0IFssIGludCBlcnJubyBbLCBzdHJpbmcgZXJyc3RyIFssIGZsb2F0IHRpbWVvdXRdXV0pIiwKICAgICAgICAiT3BlbiBwZXJzaXN0ZW50IEludGVybmV0IG9yIFVuaXggZG9tYWluIHNvY2tldCBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ19hZmZlY3RlZF9yb3dzIjogWwogICAgICAgICJpbnQgcGdfYWZmZWN0ZWRfcm93cyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFmZmVjdGVkIHR1cGxlcyIKICAgIF0sCiAgICAicGdfY2FuY2VsX3F1ZXJ5IjogWwogICAgICAgICJib29sIHBnX2NhbmNlbF9xdWVyeShyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIkNhbmNlbCByZXF1ZXN0IgogICAgXSwKICAgICJwZ19jbGllbnRfZW5jb2RpbmciOiBbCiAgICAgICAgInN0cmluZyBwZ19jbGllbnRfZW5jb2RpbmcoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBjbGllbnQgZW5jb2RpbmciCiAgICBdLAogICAgInBnX2Nsb3NlIjogWwogICAgICAgICJib29sIHBnX2Nsb3NlKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJDbG9zZSBhIFBvc3RncmVTUUwgY29ubmVjdGlvbiIKICAgIF0sCiAgICAicGdfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfY29ubmVjdChzdHJpbmcgY29ubmVjdGlvbl9zdHJpbmdbLCBpbnQgY29ubmVjdF90eXBlXSB8IFtzdHJpbmcgaG9zdCwgc3RyaW5nIHBvcnQgWywgc3RyaW5nIG9wdGlvbnMgWywgc3RyaW5nIHR0eSxdXV0gc3RyaW5nIGRhdGFiYXNlKSIsCiAgICAgICAgIk9wZW4gYSBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInBnX2Nvbm5lY3Rpb25fYnVzeSI6IFsKICAgICAgICAiYm9vbCBwZ19jb25uZWN0aW9uX2J1c3kocmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJHZXQgY29ubmVjdGlvbiBpcyBidXN5IG9yIG5vdCIKICAgIF0sCiAgICAicGdfY29ubmVjdGlvbl9yZXNldCI6IFsKICAgICAgICAiYm9vbCBwZ19jb25uZWN0aW9uX3Jlc2V0KHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiUmVzZXQgY29ubmVjdGlvbiAocmVjb25uZWN0KSIKICAgIF0sCiAgICAicGdfY29ubmVjdGlvbl9zdGF0dXMiOiBbCiAgICAgICAgImludCBwZ19jb25uZWN0aW9uX3N0YXR1cyhyZXNvdXJjZSBjb25ubmVjdGlvbikiLAogICAgICAgICJHZXQgY29ubmVjdGlvbiBzdGF0dXMiCiAgICBdLAogICAgInBnX2NvbnZlcnQiOiBbCiAgICAgICAgImFycmF5IHBnX2NvbnZlcnQocmVzb3VyY2UgZGIsIHN0cmluZyB0YWJsZSwgYXJyYXkgdmFsdWVzWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkNoZWNrIGFuZCBjb252ZXJ0IHZhbHVlcyBmb3IgUG9zdGdyZVNRTCBTUUwgc3RhdGVtZW50IgogICAgXSwKICAgICJwZ19jb3B5X2Zyb20iOiBbCiAgICAgICAgImJvb2wgcGdfY29weV9mcm9tKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyB0YWJsZV9uYW1lICwgYXJyYXkgcm93cyBbLCBzdHJpbmcgZGVsaW1pdGVyIFssIHN0cmluZyBudWxsX2FzXV0pIiwKICAgICAgICAiQ29weSB0YWJsZSBmcm9tIGFycmF5IgogICAgXSwKICAgICJwZ19jb3B5X3RvIjogWwogICAgICAgICJhcnJheSBwZ19jb3B5X3RvKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyB0YWJsZV9uYW1lIFssIHN0cmluZyBkZWxpbWl0ZXIgWywgc3RyaW5nIG51bGxfYXNdXSkiLAogICAgICAgICJDb3B5IHRhYmxlIHRvIGFycmF5IgogICAgXSwKICAgICJwZ19kYm5hbWUiOiBbCiAgICAgICAgInN0cmluZyBwZ19kYm5hbWUoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIkdldCB0aGUgZGF0YWJhc2UgbmFtZSIKICAgIF0sCiAgICAicGdfZGVsZXRlIjogWwogICAgICAgICJtaXhlZCBwZ19kZWxldGUocmVzb3VyY2UgZGIsIHN0cmluZyB0YWJsZSwgYXJyYXkgaWRzWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkRlbGV0ZSByZWNvcmRzIGhhcyBpZHMgKGlkPT52YWx1ZSkiCiAgICBdLAogICAgInBnX2VuZF9jb3B5IjogWwogICAgICAgICJib29sIHBnX2VuZF9jb3B5KFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJTeW5jIHdpdGggYmFja2VuZC4gQ29tcGxldGVzIHRoZSBDb3B5IGNvbW1hbmQiCiAgICBdLAogICAgInBnX2VzY2FwZV9ieXRlYSI6IFsKICAgICAgICAic3RyaW5nIHBnX2VzY2FwZV9ieXRlYShbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBkYXRhKSIsCiAgICAgICAgIkVzY2FwZSBiaW5hcnkgZm9yIGJ5dGVhIHR5cGUiCiAgICBdLAogICAgInBnX2VzY2FwZV9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyBwZ19lc2NhcGVfc3RyaW5nKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIGRhdGEpIiwKICAgICAgICAiRXNjYXBlIHN0cmluZyBmb3IgdGV4dC9jaGFyIHR5cGUiCiAgICBdLAogICAgInBnX2V4ZWN1dGUiOiBbCiAgICAgICAgInJlc291cmNlIHBnX2V4ZWN1dGUoW3Jlc291cmNlIGNvbm5lY3Rpb24sXSBzdHJpbmcgc3RtdG5hbWUsIGFycmF5IHBhcmFtcykiLAogICAgICAgICJFeGVjdXRlIGEgcHJlcGFyZWQgcXVlcnkiCiAgICBdLAogICAgInBnX2ZldGNoX2FsbCI6IFsKICAgICAgICAiYXJyYXkgcGdfZmV0Y2hfYWxsKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGZXRjaCBhbGwgcm93cyBpbnRvIGFycmF5IgogICAgXSwKICAgICJwZ19mZXRjaF9hbGxfY29sdW1ucyI6IFsKICAgICAgICAiYXJyYXkgcGdfZmV0Y2hfYWxsX2NvbHVtbnMocmVzb3VyY2UgcmVzdWx0IFssIGludCBjb2x1bW5fbnVtYmVyXSkiLAogICAgICAgICJGZXRjaCBhbGwgcm93cyBpbnRvIGFycmF5IgogICAgXSwKICAgICJwZ19mZXRjaF9hcnJheSI6IFsKICAgICAgICAiYXJyYXkgcGdfZmV0Y2hfYXJyYXkocmVzb3VyY2UgcmVzdWx0IFssIGludCByb3cgWywgaW50IHJlc3VsdF90eXBlXV0pIiwKICAgICAgICAiRmV0Y2ggYSByb3cgYXMgYW4gYXJyYXkiCiAgICBdLAogICAgInBnX2ZldGNoX2Fzc29jIjogWwogICAgICAgICJhcnJheSBwZ19mZXRjaF9hc3NvYyhyZXNvdXJjZSByZXN1bHQgWywgaW50IHJvd10pIiwKICAgICAgICAiRmV0Y2ggYSByb3cgYXMgYW4gYXNzb2MgYXJyYXkiCiAgICBdLAogICAgInBnX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IHBnX2ZldGNoX29iamVjdChyZXNvdXJjZSByZXN1bHQgWywgaW50IHJvdyBbLCBzdHJpbmcgY2xhc3NfbmFtZSBbLCBOVUxMfGFycmF5IGN0b3JfcGFyYW1zXV1dKSIsCiAgICAgICAgIkZldGNoIGEgcm93IGFzIGFuIG9iamVjdCIKICAgIF0sCiAgICAicGdfZmV0Y2hfcmVzdWx0IjogWwogICAgICAgICJtaXhlZCBwZ19mZXRjaF9yZXN1bHQocmVzb3VyY2UgcmVzdWx0LCBbaW50IHJvd19udW1iZXIsXSBtaXhlZCBmaWVsZF9uYW1lKSIsCiAgICAgICAgIlJldHVybnMgdmFsdWVzIGZyb20gYSByZXN1bHQgaWRlbnRpZmllciIKICAgIF0sCiAgICAicGdfZmV0Y2hfcm93IjogWwogICAgICAgICJhcnJheSBwZ19mZXRjaF9yb3cocmVzb3VyY2UgcmVzdWx0IFssIGludCByb3cgWywgaW50IHJlc3VsdF90eXBlXV0pIiwKICAgICAgICAiR2V0IGEgcm93IGFzIGFuIGVudW1lcmF0ZWQgYXJyYXkiCiAgICBdLAogICAgInBnX2ZpZWxkX2lzX251bGwiOiBbCiAgICAgICAgImludCBwZ19maWVsZF9pc19udWxsKHJlc291cmNlIHJlc3VsdCwgW2ludCByb3csXSBtaXhlZCBmaWVsZF9uYW1lX29yX251bWJlcikiLAogICAgICAgICJUZXN0IGlmIGEgZmllbGQgaXMgTlVMTCIKICAgIF0sCiAgICAicGdfZmllbGRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIHBnX2ZpZWxkX25hbWUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIgogICAgXSwKICAgICJwZ19maWVsZF9udW0iOiBbCiAgICAgICAgImludCBwZ19maWVsZF9udW0ocmVzb3VyY2UgcmVzdWx0LCBzdHJpbmcgZmllbGRfbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBmaWVsZCBudW1iZXIgb2YgdGhlIG5hbWVkIGZpZWxkIgogICAgXSwKICAgICJwZ19maWVsZF9wcnRsZW4iOiBbCiAgICAgICAgImludCBwZ19maWVsZF9wcnRsZW4ocmVzb3VyY2UgcmVzdWx0LCBbaW50IHJvdyxdIG1peGVkIGZpZWxkX25hbWVfb3JfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHByaW50ZWQgbGVuZ3RoIgogICAgXSwKICAgICJwZ19maWVsZF9zaXplIjogWwogICAgICAgICJpbnQgcGdfZmllbGRfc2l6ZShyZXNvdXJjZSByZXN1bHQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgaW50ZXJuYWwgc2l6ZSBvZiB0aGUgZmllbGQiCiAgICBdLAogICAgInBnX2ZpZWxkX3RhYmxlIjogWwogICAgICAgICJtaXhlZCBwZ19maWVsZF90YWJsZShyZXNvdXJjZSByZXN1bHQsIGludCBmaWVsZF9udW1iZXJbLCBib29sIG9pZF9vbmx5XSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSBmaWVsZCBiZWxvbmdzIHRvLCBvciB0YWJsZSdzIG9pZCBpZiBvaWRfb25seSBpcyB0cnVlIgogICAgXSwKICAgICJwZ19maWVsZF90eXBlIjogWwogICAgICAgICJzdHJpbmcgcGdfZmllbGRfdHlwZShyZXNvdXJjZSByZXN1bHQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgdHlwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gZmllbGQiCiAgICBdLAogICAgInBnX2ZpZWxkX3R5cGVfb2lkIjogWwogICAgICAgICJzdHJpbmcgcGdfZmllbGRfdHlwZV9vaWQocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHR5cGUgb2lkIGZvciB0aGUgZ2l2ZW4gZmllbGQiCiAgICBdLAogICAgInBnX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJib29sIHBnX2ZyZWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGcmVlIHJlc3VsdCBtZW1vcnkiCiAgICBdLAogICAgInBnX2dldF9ub3RpZnkiOiBbCiAgICAgICAgImFycmF5IHBnX2dldF9ub3RpZnkoW3Jlc291cmNlIGNvbm5lY3Rpb25bLCByZXN1bHRfdHlwZV1dKSIsCiAgICAgICAgIkdldCBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uIgogICAgXSwKICAgICJwZ19nZXRfcGlkIjogWwogICAgICAgICJpbnQgcGdfZ2V0X3BpZChbcmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJHZXQgYmFja2VuZChzZXJ2ZXIpIHBpZCIKICAgIF0sCiAgICAicGdfZ2V0X3Jlc3VsdCI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfZ2V0X3Jlc3VsdChyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIkdldCBhc3luY2hyb25vdXMgcXVlcnkgcmVzdWx0IgogICAgXSwKICAgICJwZ19ob3N0IjogWwogICAgICAgICJzdHJpbmcgcGdfaG9zdChbcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgaG9zdCBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAicGdfaW5zZXJ0IjogWwogICAgICAgICJtaXhlZCBwZ19pbnNlcnQocmVzb3VyY2UgZGIsIHN0cmluZyB0YWJsZSwgYXJyYXkgdmFsdWVzWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkluc2VydCB2YWx1ZXMgKGZpbGVkPT52YWx1ZSkgdG8gdGFibGUiCiAgICBdLAogICAgInBnX2xhc3RfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBwZ19sYXN0X2Vycm9yKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJHZXQgdGhlIGVycm9yIG1lc3NhZ2Ugc3RyaW5nIgogICAgXSwKICAgICJwZ19sYXN0X25vdGljZSI6IFsKICAgICAgICAic3RyaW5nIHBnX2xhc3Rfbm90aWNlKHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGFzdCBub3RpY2Ugc2V0IGJ5IHRoZSBiYWNrZW5kIgogICAgXSwKICAgICJwZ19sYXN0X29pZCI6IFsKICAgICAgICAic3RyaW5nIHBnX2xhc3Rfb2lkKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBsYXN0IG9iamVjdCBpZGVudGlmaWVyIgogICAgXSwKICAgICJwZ19sb19jbG9zZSI6IFsKICAgICAgICAiYm9vbCBwZ19sb19jbG9zZShyZXNvdXJjZSBsYXJnZV9vYmplY3QpIiwKICAgICAgICAiQ2xvc2UgYSBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgInBnX2xvX2NyZWF0ZSI6IFsKICAgICAgICAibWl4ZWQgcGdfbG9fY3JlYXRlKFtyZXNvdXJjZSBjb25uZWN0aW9uXSxbbWl4ZWQgbGFyZ2Vfb2JqZWN0X29pZF0pIiwKICAgICAgICAiQ3JlYXRlIGEgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJwZ19sb19leHBvcnQiOiBbCiAgICAgICAgImJvb2wgcGdfbG9fZXhwb3J0KFtyZXNvdXJjZSBjb25uZWN0aW9uLCBdIGludCBvYmpvaWQsIHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJFeHBvcnQgbGFyZ2Ugb2JqZWN0IGRpcmVjdCB0byBmaWxlc3lzdGVtIgogICAgXSwKICAgICJwZ19sb19pbXBvcnQiOiBbCiAgICAgICAgImludCBwZ19sb19pbXBvcnQoW3Jlc291cmNlIGNvbm5lY3Rpb24sIF0gc3RyaW5nIGZpbGVuYW1lIFssIG1peGVkIG9pZF0pIiwKICAgICAgICAiSW1wb3J0IGxhcmdlIG9iamVjdCBkaXJlY3QgZnJvbSBmaWxlc3lzdGVtIgogICAgXSwKICAgICJwZ19sb19vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBwZ19sb19vcGVuKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gaW50IGxhcmdlX29iamVjdF9vaWQsIHN0cmluZyBtb2RlKSIsCiAgICAgICAgIk9wZW4gYSBsYXJnZSBvYmplY3QgYW5kIHJldHVybiBmZCIKICAgIF0sCiAgICAicGdfbG9fcmVhZCI6IFsKICAgICAgICAic3RyaW5nIHBnX2xvX3JlYWQocmVzb3VyY2UgbGFyZ2Vfb2JqZWN0IFssIGludCBsZW5dKSIsCiAgICAgICAgIlJlYWQgYSBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgInBnX2xvX3JlYWRfYWxsIjogWwogICAgICAgICJpbnQgcGdfbG9fcmVhZF9hbGwocmVzb3VyY2UgbGFyZ2Vfb2JqZWN0KSIsCiAgICAgICAgIlJlYWQgYSBsYXJnZSBvYmplY3QgYW5kIHNlbmQgc3RyYWlnaHQgdG8gYnJvd3NlciIKICAgIF0sCiAgICAicGdfbG9fc2VlayI6IFsKICAgICAgICAiYm9vbCBwZ19sb19zZWVrKHJlc291cmNlIGxhcmdlX29iamVjdCwgaW50IG9mZnNldCBbLCBpbnQgd2hlbmNlXSkiLAogICAgICAgICJTZWVrcyBwb3NpdGlvbiBvZiBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgInBnX2xvX3RlbGwiOiBbCiAgICAgICAgImludCBwZ19sb190ZWxsKHJlc291cmNlIGxhcmdlX29iamVjdCkiLAogICAgICAgICJSZXR1cm5zIGN1cnJlbnQgcG9zaXRpb24gb2YgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJwZ19sb191bmxpbmsiOiBbCiAgICAgICAgImJvb2wgcGdfbG9fdW5saW5rKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIGxhcmdlX29iamVjdF9vaWQpIiwKICAgICAgICAiRGVsZXRlIGEgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJwZ19sb193cml0ZSI6IFsKICAgICAgICAiaW50IHBnX2xvX3dyaXRlKHJlc291cmNlIGxhcmdlX29iamVjdCwgc3RyaW5nIGJ1ZiBbLCBpbnQgbGVuXSkiLAogICAgICAgICJXcml0ZSBhIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAicGdfbWV0YV9kYXRhIjogWwogICAgICAgICJhcnJheSBwZ19tZXRhX2RhdGEocmVzb3VyY2UgZGIsIHN0cmluZyB0YWJsZSkiLAogICAgICAgICJHZXQgbWV0YV9kYXRhIgogICAgXSwKICAgICJwZ19udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgcGdfbnVtX2ZpZWxkcyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgZmllbGRzIGluIHRoZSByZXN1bHQiCiAgICBdLAogICAgInBnX251bV9yb3dzIjogWwogICAgICAgICJpbnQgcGdfbnVtX3Jvd3MocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHJlc3VsdCIKICAgIF0sCiAgICAicGdfb3B0aW9ucyI6IFsKICAgICAgICAic3RyaW5nIHBnX29wdGlvbnMoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIkdldCB0aGUgb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInBnX3BhcmFtZXRlcl9zdGF0dXMiOiBbCiAgICAgICAgInN0cmluZ3xmYWxzZSBwZ19wYXJhbWV0ZXJfc3RhdHVzKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIHBhcmFtX25hbWUpIiwKICAgICAgICAiUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBzZXJ2ZXIgcGFyYW1ldGVyIgogICAgXSwKICAgICJwZ19wY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfcGNvbm5lY3Qoc3RyaW5nIGNvbm5lY3Rpb25fc3RyaW5nIHwgW3N0cmluZyBob3N0LCBzdHJpbmcgcG9ydCBbLCBzdHJpbmcgb3B0aW9ucyBbLCBzdHJpbmcgdHR5LF1dXSBzdHJpbmcgZGF0YWJhc2UpIiwKICAgICAgICAiT3BlbiBhIHBlcnNpc3RlbnQgUG9zdGdyZVNRTCBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ19waW5nIjogWwogICAgICAgICJib29sIHBnX3BpbmcoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIlBpbmcgZGF0YWJhc2UuIElmIGNvbm5lY3Rpb24gaXMgYmFkLCB0cnkgdG8gcmVjb25uZWN0LiIKICAgIF0sCiAgICAicGdfcG9ydCI6IFsKICAgICAgICAiaW50IHBnX3BvcnQoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIlJldHVybiB0aGUgcG9ydCBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ19wcmVwYXJlIjogWwogICAgICAgICJyZXNvdXJjZSBwZ19wcmVwYXJlKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIHN0bXRuYW1lLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiUHJlcGFyZSBhIHF1ZXJ5IGZvciBmdXR1cmUgZXhlY3V0aW9uIgogICAgXSwKICAgICJwZ19wdXRfbGluZSI6IFsKICAgICAgICAiYm9vbCBwZ19wdXRfbGluZShbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJTZW5kIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gYmFja2VuZCBzZXJ2ZXIiCiAgICBdLAogICAgInBnX3F1ZXJ5IjogWwogICAgICAgICJyZXNvdXJjZSBwZ19xdWVyeShbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJFeGVjdXRlIGEgcXVlcnkiCiAgICBdLAogICAgInBnX3F1ZXJ5X3BhcmFtcyI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfcXVlcnlfcGFyYW1zKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIHF1ZXJ5LCBhcnJheSBwYXJhbXMpIiwKICAgICAgICAiRXhlY3V0ZSBhIHF1ZXJ5IgogICAgXSwKICAgICJwZ19yZXN1bHRfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBwZ19yZXN1bHRfZXJyb3IocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkdldCBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQiCiAgICBdLAogICAgInBnX3Jlc3VsdF9lcnJvcl9maWVsZCI6IFsKICAgICAgICAic3RyaW5nIHBnX3Jlc3VsdF9lcnJvcl9maWVsZChyZXNvdXJjZSByZXN1bHQsIGludCBmaWVsZGNvZGUpIiwKICAgICAgICAiR2V0IGVycm9yIG1lc3NhZ2UgZmllbGQgYXNzb2NpYXRlZCB3aXRoIHJlc3VsdCIKICAgIF0sCiAgICAicGdfcmVzdWx0X3NlZWsiOiBbCiAgICAgICAgImJvb2wgcGdfcmVzdWx0X3NlZWsocmVzb3VyY2UgcmVzdWx0LCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIlNldCBpbnRlcm5hbCByb3cgb2Zmc2V0IgogICAgXSwKICAgICJwZ19yZXN1bHRfc3RhdHVzIjogWwogICAgICAgICJtaXhlZCBwZ19yZXN1bHRfc3RhdHVzKHJlc291cmNlIHJlc3VsdFssIGxvbmcgcmVzdWx0X3R5cGVdKSIsCiAgICAgICAgIkdldCBzdGF0dXMgb2YgcXVlcnkgcmVzdWx0IgogICAgXSwKICAgICJwZ19zZWxlY3QiOiBbCiAgICAgICAgIm1peGVkIHBnX3NlbGVjdChyZXNvdXJjZSBkYiwgc3RyaW5nIHRhYmxlLCBhcnJheSBpZHNbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiU2VsZWN0IHJlY29yZHMgdGhhdCBoYXMgaWRzIChpZD0+dmFsdWUpIgogICAgXSwKICAgICJwZ19zZW5kX2V4ZWN1dGUiOiBbCiAgICAgICAgImJvb2wgcGdfc2VuZF9leGVjdXRlKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyBzdG10bmFtZSwgYXJyYXkgcGFyYW1zKSIsCiAgICAgICAgIkV4ZWN1dGVzIHByZXZyaW91c2x5IHByZXBhcmVkIHN0bXRuYW1lIGFzeW5jaHJvbm91c2x5IgogICAgXSwKICAgICJwZ19zZW5kX3ByZXBhcmUiOiBbCiAgICAgICAgImJvb2wgcGdfc2VuZF9wcmVwYXJlKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyBzdG10bmFtZSwgc3RyaW5nIHF1ZXJ5KSIsCiAgICAgICAgIkFzeW5jaHJvbm91c2x5IHByZXBhcmUgYSBxdWVyeSBmb3IgZnV0dXJlIGV4ZWN1dGlvbiIKICAgIF0sCiAgICAicGdfc2VuZF9xdWVyeSI6IFsKICAgICAgICAiYm9vbCBwZ19zZW5kX3F1ZXJ5KHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJTZW5kIGFzeW5jaHJvbm91cyBxdWVyeSIKICAgIF0sCiAgICAicGdfc2VuZF9xdWVyeV9wYXJhbXMiOiBbCiAgICAgICAgImJvb2wgcGdfc2VuZF9xdWVyeV9wYXJhbXMocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHF1ZXJ5LCBhcnJheSBwYXJhbXMpIiwKICAgICAgICAiU2VuZCBhc3luY2hyb25vdXMgcGFyYW1ldGVyaXplZCBxdWVyeSIKICAgIF0sCiAgICAicGdfc2V0X2NsaWVudF9lbmNvZGluZyI6IFsKICAgICAgICAiaW50IHBnX3NldF9jbGllbnRfZW5jb2RpbmcoW3Jlc291cmNlIGNvbm5lY3Rpb24sXSBzdHJpbmcgZW5jb2RpbmcpIiwKICAgICAgICAiU2V0IGNsaWVudCBlbmNvZGluZyIKICAgIF0sCiAgICAicGdfc2V0X2Vycm9yX3ZlcmJvc2l0eSI6IFsKICAgICAgICAiaW50IHBnX3NldF9lcnJvcl92ZXJib3NpdHkoW3Jlc291cmNlIGNvbm5lY3Rpb24sXSBpbnQgdmVyYm9zaXR5KSIsCiAgICAgICAgIlNldCBlcnJvciB2ZXJib3NpdHkiCiAgICBdLAogICAgInBnX3RyYWNlIjogWwogICAgICAgICJib29sIHBnX3RyYWNlKHN0cmluZyBmaWxlbmFtZSBbLCBzdHJpbmcgbW9kZSBbLCByZXNvdXJjZSBjb25uZWN0aW9uXV0pIiwKICAgICAgICAiRW5hYmxlIHRyYWNpbmcgYSBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInBnX3RyYW5zYWN0aW9uX3N0YXR1cyI6IFsKICAgICAgICAiaW50IHBnX3RyYW5zYWN0aW9uX3N0YXR1cyhyZXNvdXJjZSBjb25ubmVjdGlvbikiLAogICAgICAgICJHZXQgdHJhbnNhY3Rpb24gc3RhdHVzIgogICAgXSwKICAgICJwZ190dHkiOiBbCiAgICAgICAgInN0cmluZyBwZ190dHkoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIlJldHVybiB0aGUgdHR5IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ191bmVzY2FwZV9ieXRlYSI6IFsKICAgICAgICAic3RyaW5nIHBnX3VuZXNjYXBlX2J5dGVhKHN0cmluZyBkYXRhKSIsCiAgICAgICAgIlVuZXNjYXBlIGJpbmFyeSBmb3IgYnl0ZWEgdHlwZSIKICAgIF0sCiAgICAicGdfdW50cmFjZSI6IFsKICAgICAgICAiYm9vbCBwZ191bnRyYWNlKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJEaXNhYmxlIHRyYWNpbmcgb2YgYSBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInBnX3VwZGF0ZSI6IFsKICAgICAgICAibWl4ZWQgcGdfdXBkYXRlKHJlc291cmNlIGRiLCBzdHJpbmcgdGFibGUsIGFycmF5IGZpZWxkcywgYXJyYXkgaWRzWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlVwZGF0ZSB0YWJsZSB1c2luZyB2YWx1ZXMgKGZpZWxkPT52YWx1ZSkgYW5kIGlkcyAoaWQ9PnZhbHVlKSIKICAgIF0sCiAgICAicGdfdmVyc2lvbiI6IFsKICAgICAgICAiYXJyYXkgcGdfdmVyc2lvbihbcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSB3aXRoIGNsaWVudCwgcHJvdG9jb2wgYW5kIHNlcnZlciB2ZXJzaW9uICh3aGVuIGF2YWlsYWJsZSkiCiAgICBdLAogICAgInBocF9lZ2dfbG9nb19ndWlkIjogWwogICAgICAgICJzdHJpbmcgcGhwX2VnZ19sb2dvX2d1aWQodm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIHNwZWNpYWwgSUQgdXNlZCB0byByZXF1ZXN0IHRoZSBQSFAgbG9nbyBpbiBwaHBpbmZvIHNjcmVlbnMiCiAgICBdLAogICAgInBocF9pbmlfbG9hZGVkX2ZpbGUiOiBbCiAgICAgICAgInN0cmluZyBwaHBfaW5pX2xvYWRlZF9maWxlKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBhY3R1YWwgbG9hZGVkIGluaSBmaWxlbmFtZSIKICAgIF0sCiAgICAicGhwX2luaV9zY2FubmVkX2ZpbGVzIjogWwogICAgICAgICJzdHJpbmcgcGhwX2luaV9zY2FubmVkX2ZpbGVzKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2YgLmluaSBmaWxlcyBwYXJzZWQgZnJvbSB0aGUgYWRkaXRpb25hbCBpbmkgZGlyIgogICAgXSwKICAgICJwaHBfbG9nb19ndWlkIjogWwogICAgICAgICJzdHJpbmcgcGhwX2xvZ29fZ3VpZCh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgc3BlY2lhbCBJRCB1c2VkIHRvIHJlcXVlc3QgdGhlIFBIUCBsb2dvIGluIHBocGluZm8gc2NyZWVucyIKICAgIF0sCiAgICAicGhwX3JlYWxfbG9nb19ndWlkIjogWwogICAgICAgICJzdHJpbmcgcGhwX3JlYWxfbG9nb19ndWlkKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBzcGVjaWFsIElEIHVzZWQgdG8gcmVxdWVzdCB0aGUgUEhQIGxvZ28gaW4gcGhwaW5mbyBzY3JlZW5zIgogICAgXSwKICAgICJwaHBfc2FwaV9uYW1lIjogWwogICAgICAgICJzdHJpbmcgcGhwX3NhcGlfbmFtZSh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCBTQVBJIG1vZHVsZSBuYW1lIgogICAgXSwKICAgICJwaHBfc25tcHYzIjogWwogICAgICAgICJ2b2lkIHBocF9zbm1wdjMoSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1FVEVSUywgaW50IHN0KSIsCiAgICAgICAgIiogKiBHZW5lcmljIFNOTVB2MyBvYmplY3QgZmV0Y2hlciAqIEZyb20gaGVyZSBpcyBwYXNzZWQgb24gdGhlIHRoZSBjb21tb24gaW50ZXJuYWwgb2JqZWN0IGZldGNoZXIuICogKiBzdD1TTk1QX0NNRF9HRVQgICBzbm1wM19nZXQoKSAtIHF1ZXJ5IGFuIGFnZW50IGFuZCByZXR1cm4gYSBzaW5nbGUgdmFsdWUuICogc3Q9U05NUF9DTURfR0VUTkVYVCAgIHNubXAzX2dldG5leHQoKSAtIHF1ZXJ5IGFuIGFnZW50IGFuZCByZXR1cm4gdGhlIG5leHQgc2luZ2xlIHZhbHVlLiAqIHN0PVNOTVBfQ01EX1dBTEsgICBzbm1wM193YWxrKCkgLSB3YWxrIHRoZSBtaWIgYW5kIHJldHVybiBhIHNpbmdsZSBkaW1lbnNpb25hbCBhcnJheSAgKiAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgdmFsdWVzLiAqIHN0PVNOTVBfQ01EX1JFQUxXQUxLICAgc25tcDNfcmVhbF93YWxrKCkgLSB3YWxrIHRoZSBtaWIgYW5kIHJldHVybiBhbiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSBvZiBvaWQsdmFsdWUgcGFpcnMuICogc3Q9U05NUF9DTURfU0VUICBzbm1wM19zZXQoKSAtIHF1ZXJ5IGFuIGFnZW50IGFuZCBzZXQgYSBzaW5nbGUgdmFsdWUgKiIKICAgIF0sCiAgICAicGhwX3N0cmlwX3doaXRlc3BhY2UiOiBbCiAgICAgICAgInN0cmluZyBwaHBfc3RyaXBfd2hpdGVzcGFjZShzdHJpbmcgZmlsZV9uYW1lKSIsCiAgICAgICAgIlJldHVybiBzb3VyY2Ugd2l0aCBzdHJpcHBlZCBjb21tZW50cyBhbmQgd2hpdGVzcGFjZSIKICAgIF0sCiAgICAicGhwX3VuYW1lIjogWwogICAgICAgICJzdHJpbmcgcGhwX3VuYW1lKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeXN0ZW0gUEhQIHdhcyBidWlsdCBvbiIKICAgIF0sCiAgICAicGhwY3JlZGl0cyI6IFsKICAgICAgICAidm9pZCBwaHBjcmVkaXRzKFtpbnQgZmxhZ10pIiwKICAgICAgICAiUHJpbnRzIHRoZSBsaXN0IG9mIHBlb3BsZSB3aG8ndmUgY29udHJpYnV0ZWQgdG8gdGhlIFBIUCBwcm9qZWN0IgogICAgXSwKICAgICJwaHBpbmZvIjogWwogICAgICAgICJ2b2lkIHBocGluZm8oW2ludCB3aGF0XSkiLAogICAgICAgICJPdXRwdXQgYSBwYWdlIG9mIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCBQSFAgYW5kIHRoZSBjdXJyZW50IHJlcXVlc3QiCiAgICBdLAogICAgInBocHZlcnNpb24iOiBbCiAgICAgICAgInN0cmluZyBwaHB2ZXJzaW9uKFtzdHJpbmcgZXh0ZW5zaW9uXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgUEhQIHZlcnNpb24iCiAgICBdLAogICAgInBpIjogWwogICAgICAgICJmbG9hdCBwaSh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXBwcm94aW1hdGlvbiBvZiBwaSIKICAgIF0sCiAgICAicG5nMndibXAiOiBbCiAgICAgICAgImJvb2wgcG5nMndibXAgKHN0cmluZyBmX29yZywgc3RyaW5nIGZfZGVzdCwgaW50IGRfaGVpZ2h0LCBpbnQgZF93aWR0aCwgaW50IHRocmVzaG9sZCkiLAogICAgICAgICJDb252ZXJ0IFBORyBpbWFnZSB0byBXQk1QIGltYWdlIgogICAgXSwKICAgICJwb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgcG9wZW4oc3RyaW5nIGNvbW1hbmQsIHN0cmluZyBtb2RlKSIsCiAgICAgICAgIkV4ZWN1dGUgYSBjb21tYW5kIGFuZCBvcGVuIGVpdGhlciBhIHJlYWQgb3IgYSB3cml0ZSBwaXBlIHRvIGl0IgogICAgXSwKICAgICJwb3NpeF9hY2Nlc3MiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfYWNjZXNzKHN0cmluZyBmaWxlIFssIGludCBtb2RlXSkiLAogICAgICAgICJEZXRlcm1pbmUgYWNjZXNzaWJpbGl0eSBvZiBhIGZpbGUgKFBPU0lYLjEgNS42LjMpIgogICAgXSwKICAgICJwb3NpeF9jdGVybWlkIjogWwogICAgICAgICJzdHJpbmcgcG9zaXhfY3Rlcm1pZCh2b2lkKSIsCiAgICAgICAgIkdlbmVyYXRlIHRlcm1pbmFsIHBhdGggbmFtZSAoUE9TSVguMSwgNC43LjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRfbGFzdF9lcnJvciI6IFsKICAgICAgICAiaW50IHBvc2l4X2dldF9sYXN0X2Vycm9yKHZvaWQpIiwKICAgICAgICAiUmV0cmlldmUgdGhlIGVycm9yIG51bWJlciBzZXQgYnkgdGhlIGxhc3QgcG9zaXggZnVuY3Rpb24gd2hpY2ggZmFpbGVkLiIKICAgIF0sCiAgICAicG9zaXhfZ2V0Y3dkIjogWwogICAgICAgICJzdHJpbmcgcG9zaXhfZ2V0Y3dkKHZvaWQpIiwKICAgICAgICAiR2V0IHdvcmtpbmcgZGlyZWN0b3J5IHBhdGhuYW1lIChQT1NJWC4xLCA1LjIuMikiCiAgICBdLAogICAgInBvc2l4X2dldGVnaWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRlZ2lkKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSBjdXJyZW50IGVmZmVjdGl2ZSBncm91cCBpZCAoUE9TSVguMSwgNC4yLjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRldWlkIjogWwogICAgICAgICJpbnQgcG9zaXhfZ2V0ZXVpZCh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBlZmZlY3RpdmUgdXNlciBpZCAoUE9TSVguMSwgNC4yLjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRnaWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRnaWQodm9pZCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgZ3JvdXAgaWQgKFBPU0lYLjEsIDQuMi4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0Z3JnaWQiOiBbCiAgICAgICAgImFycmF5IHBvc2l4X2dldGdyZ2lkKGxvbmcgZ2lkKSIsCiAgICAgICAgIkdyb3VwIGRhdGFiYXNlIGFjY2VzcyAoUE9TSVguMSwgOS4yLjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRncm5hbSI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfZ2V0Z3JuYW0oc3RyaW5nIGdyb3VwbmFtZSkiLAogICAgICAgICJHcm91cCBkYXRhYmFzZSBhY2Nlc3MgKFBPU0lYLjEsIDkuMi4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0Z3JvdXBzIjogWwogICAgICAgICJhcnJheSBwb3NpeF9nZXRncm91cHModm9pZCkiLAogICAgICAgICJHZXQgc3VwcGxlbWVudGFyeSBncm91cCBpZCdzIChQT1NJWC4xLCA0LjIuMykiCiAgICBdLAogICAgInBvc2l4X2dldGxvZ2luIjogWwogICAgICAgICJzdHJpbmcgcG9zaXhfZ2V0bG9naW4odm9pZCkiLAogICAgICAgICJHZXQgdXNlciBuYW1lIChQT1NJWC4xLCA0LjIuNCkiCiAgICBdLAogICAgInBvc2l4X2dldHBnaWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRwZ2lkKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSBwcm9jZXNzIGdyb3VwIGlkIG9mIHRoZSBzcGVjaWZpZWQgcHJvY2VzcyAoVGhpcyBpcyBub3QgYSBQT1NJWCBmdW5jdGlvbiwgYnV0IGEgU1ZSNGlzbSwgc28gd2UgY29tcGlsZSBjb25kaXRpb25hbGx5KSIKICAgIF0sCiAgICAicG9zaXhfZ2V0cGdycCI6IFsKICAgICAgICAiaW50IHBvc2l4X2dldHBncnAodm9pZCkiLAogICAgICAgICJHZXQgY3VycmVudCBwcm9jZXNzIGdyb3VwIGlkIChQT1NJWC4xLCA0LjMuMSkiCiAgICBdLAogICAgInBvc2l4X2dldHBpZCI6IFsKICAgICAgICAiaW50IHBvc2l4X2dldHBpZCh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBwcm9jZXNzIGlkIChQT1NJWC4xLCA0LjEuMSkiCiAgICBdLAogICAgInBvc2l4X2dldHBwaWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRwcGlkKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSBwYXJlbnQgcHJvY2VzcyBpZCAoUE9TSVguMSwgNC4xLjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRwd25hbSI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfZ2V0cHduYW0oc3RyaW5nIGdyb3VwbmFtZSkiLAogICAgICAgICJVc2VyIGRhdGFiYXNlIGFjY2VzcyAoUE9TSVguMSwgOS4yLjIpIgogICAgXSwKICAgICJwb3NpeF9nZXRwd3VpZCI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfZ2V0cHd1aWQobG9uZyB1aWQpIiwKICAgICAgICAiVXNlciBkYXRhYmFzZSBhY2Nlc3MgKFBPU0lYLjEsIDkuMi4yKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0cmxpbWl0IjogWwogICAgICAgICJhcnJheSBwb3NpeF9nZXRybGltaXQodm9pZCkiLAogICAgICAgICJHZXQgc3lzdGVtIHJlc291cmNlIGNvbnN1bXB0aW9uIGxpbWl0cyAoVGhpcyBpcyBub3QgYSBQT1NJWCBmdW5jdGlvbiwgYnV0IGEgQlNEaXNtIGFuZCBhIFNWUjRpc20uIFdlIGNvbXBpbGUgY29uZGl0aW9uYWxseSkiCiAgICBdLAogICAgInBvc2l4X2dldHNpZCI6IFsKICAgICAgICAiaW50IHBvc2l4X2dldHNpZCh2b2lkKSIsCiAgICAgICAgIkdldCBwcm9jZXNzIGdyb3VwIGlkIG9mIHNlc3Npb24gbGVhZGVyIChUaGlzIGlzIG5vdCBhIFBPU0lYIGZ1bmN0aW9uLCBidXQgYSBTVlI0aXNtLCBzbyBiZSBjb21waWxlIGNvbmRpdGlvbmFsbHkpIgogICAgXSwKICAgICJwb3NpeF9nZXR1aWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXR1aWQodm9pZCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgdXNlciBpZCAoUE9TSVguMSwgNC4yLjEpIgogICAgXSwKICAgICJwb3NpeF9pbml0Z3JvdXBzIjogWwogICAgICAgICJib29sIHBvc2l4X2luaXRncm91cHMoc3RyaW5nIG5hbWUsIGludCBiYXNlX2dyb3VwX2lkKSIsCiAgICAgICAgIkNhbGN1bGF0ZSB0aGUgZ3JvdXAgYWNjZXNzIGxpc3QgZm9yIHRoZSB1c2VyIHNwZWNpZmllZCBpbiBuYW1lLiIKICAgIF0sCiAgICAicG9zaXhfaXNhdHR5IjogWwogICAgICAgICJib29sIHBvc2l4X2lzYXR0eShpbnQgZmQpIiwKICAgICAgICAiRGV0ZXJtaW5lIGlmIGZpbGVkZXNjIGlzIGEgdHR5IChQT1NJWC4xLCA0LjcuMSkiCiAgICBdLAogICAgInBvc2l4X2tpbGwiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfa2lsbChpbnQgcGlkLCBpbnQgc2lnKSIsCiAgICAgICAgIlNlbmQgYSBzaWduYWwgdG8gYSBwcm9jZXNzIChQT1NJWC4xLCAzLjMuMikiCiAgICBdLAogICAgInBvc2l4X21rZmlmbyI6IFsKICAgICAgICAiYm9vbCBwb3NpeF9ta2ZpZm8oc3RyaW5nIHBhdGhuYW1lLCBpbnQgbW9kZSkiLAogICAgICAgICJNYWtlIGEgRklGTyBzcGVjaWFsIGZpbGUgKFBPU0lYLjEsIDUuNC4yKSIKICAgIF0sCiAgICAicG9zaXhfbWtub2QiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfbWtub2Qoc3RyaW5nIHBhdGhuYW1lLCBpbnQgbW9kZSBbLCBpbnQgbWFqb3IgWywgaW50IG1pbm9yXV0pIiwKICAgICAgICAiTWFrZSBhIHNwZWNpYWwgb3Igb3JkaW5hcnkgZmlsZSAoUE9TSVguMSkiCiAgICBdLAogICAgInBvc2l4X3NldGVnaWQiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfc2V0ZWdpZChsb25nIHVpZCkiLAogICAgICAgICJTZXQgZWZmZWN0aXZlIGdyb3VwIGlkIgogICAgXSwKICAgICJwb3NpeF9zZXRldWlkIjogWwogICAgICAgICJib29sIHBvc2l4X3NldGV1aWQobG9uZyB1aWQpIiwKICAgICAgICAiU2V0IGVmZmVjdGl2ZSB1c2VyIGlkIgogICAgXSwKICAgICJwb3NpeF9zZXRnaWQiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfc2V0Z2lkKGludCB1aWQpIiwKICAgICAgICAiU2V0IGdyb3VwIGlkIChQT1NJWC4xLCA0LjIuMikiCiAgICBdLAogICAgInBvc2l4X3NldHBnaWQiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfc2V0cGdpZChpbnQgcGlkLCBpbnQgcGdpZCkiLAogICAgICAgICJTZXQgcHJvY2VzcyBncm91cCBpZCBmb3Igam9iIGNvbnRyb2wgKFBPU0lYLjEsIDQuMy4zKSIKICAgIF0sCiAgICAicG9zaXhfc2V0c2lkIjogWwogICAgICAgICJpbnQgcG9zaXhfc2V0c2lkKHZvaWQpIiwKICAgICAgICAiQ3JlYXRlIHNlc3Npb24gYW5kIHNldCBwcm9jZXNzIGdyb3VwIGlkIChQT1NJWC4xLCA0LjMuMikiCiAgICBdLAogICAgInBvc2l4X3NldHVpZCI6IFsKICAgICAgICAiYm9vbCBwb3NpeF9zZXR1aWQobG9uZyB1aWQpIiwKICAgICAgICAiU2V0IHVzZXIgaWQgKFBPU0lYLjEsIDQuMi4yKSIKICAgIF0sCiAgICAicG9zaXhfc3RyZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBwb3NpeF9zdHJlcnJvcihpbnQgZXJybm8pIiwKICAgICAgICAiUmV0cmlldmUgdGhlIHN5c3RlbSBlcnJvciBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gZXJybm8uIgogICAgXSwKICAgICJwb3NpeF90aW1lcyI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfdGltZXModm9pZCkiLAogICAgICAgICJHZXQgcHJvY2VzcyB0aW1lcyAoUE9TSVguMSwgNC41LjIpIgogICAgXSwKICAgICJwb3NpeF90dHluYW1lIjogWwogICAgICAgICJzdHJpbmcgcG9zaXhfdHR5bmFtZShpbnQgZmQpIiwKICAgICAgICAiRGV0ZXJtaW5lIHRlcm1pbmFsIGRldmljZSBuYW1lIChQT1NJWC4xLCA0LjcuMikiCiAgICBdLAogICAgInBvc2l4X3VuYW1lIjogWwogICAgICAgICJhcnJheSBwb3NpeF91bmFtZSh2b2lkKSIsCiAgICAgICAgIkdldCBzeXN0ZW0gbmFtZSAoUE9TSVguMSwgNC40LjEpIgogICAgXSwKICAgICJwb3ciOiBbCiAgICAgICAgIm51bWJlciBwb3cobnVtYmVyIGJhc2UsIG51bWJlciBleHBvbmVudCkiLAogICAgICAgICJSZXR1cm5zIGJhc2UgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiBleHBvbmVudC4gUmV0dXJucyBpbnRlZ2VyIHJlc3VsdCB3aGVuIHBvc3NpYmxlIgogICAgXSwKICAgICJwcmVnX2ZpbHRlciI6IFsKICAgICAgICAibWl4ZWQgcHJlZ19maWx0ZXIobWl4ZWQgcmVnZXgsIG1peGVkIHJlcGxhY2UsIG1peGVkIHN1YmplY3QgWywgaW50IGxpbWl0IFssIGludCAmY291bnRdXSkiLAogICAgICAgICJQZXJmb3JtIFBlcmwtc3R5bGUgcmVndWxhciBleHByZXNzaW9uIHJlcGxhY2VtZW50IGFuZCBvbmx5IHJldHVybiBtYXRjaGVzLiIKICAgIF0sCiAgICAicHJlZ19ncmVwIjogWwogICAgICAgICJhcnJheSBwcmVnX2dyZXAoc3RyaW5nIHJlZ2V4LCBhcnJheSBpbnB1dCBbLCBpbnQgZmxhZ3NdKSIsCiAgICAgICAgIlNlYXJjaGVzIGFycmF5IGFuZCByZXR1cm5zIGVudHJpZXMgd2hpY2ggbWF0Y2ggcmVnZXgiCiAgICBdLAogICAgInByZWdfbGFzdF9lcnJvciI6IFsKICAgICAgICAiaW50IHByZWdfbGFzdF9lcnJvcigpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZXJyb3IgY29kZSBvZiB0aGUgbGFzdCByZWdleHAgZXhlY3V0aW9uLiIKICAgIF0sCiAgICAicHJlZ19tYXRjaCI6IFsKICAgICAgICAiaW50IHByZWdfbWF0Y2goc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdWJqZWN0IFssIGFycmF5ICZzdWJwYXR0ZXJucyBbLCBpbnQgZmxhZ3MgWywgaW50IG9mZnNldF1dXSkiLAogICAgICAgICJQZXJmb3JtIGEgUGVybC1zdHlsZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2giCiAgICBdLAogICAgInByZWdfbWF0Y2hfYWxsIjogWwogICAgICAgICJpbnQgcHJlZ19tYXRjaF9hbGwoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdWJqZWN0LCBhcnJheSAmc3VicGF0dGVybnMgWywgaW50IGZsYWdzIFssIGludCBvZmZzZXRdXSkiLAogICAgICAgICJQZXJmb3JtIGEgUGVybC1zdHlsZSBnbG9iYWwgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIgogICAgXSwKICAgICJwcmVnX3F1b3RlIjogWwogICAgICAgICJzdHJpbmcgcHJlZ19xdW90ZShzdHJpbmcgc3RyIFssIHN0cmluZyBkZWxpbV9jaGFyXSkiLAogICAgICAgICJRdW90ZSByZWd1bGFyIGV4cHJlc3Npb24gY2hhcmFjdGVycyBwbHVzIGFuIG9wdGlvbmFsIGNoYXJhY3RlciIKICAgIF0sCiAgICAicHJlZ19yZXBsYWNlIjogWwogICAgICAgICJtaXhlZCBwcmVnX3JlcGxhY2UobWl4ZWQgcmVnZXgsIG1peGVkIHJlcGxhY2UsIG1peGVkIHN1YmplY3QgWywgaW50IGxpbWl0IFssIGludCAmY291bnRdXSkiLAogICAgICAgICJQZXJmb3JtIFBlcmwtc3R5bGUgcmVndWxhciBleHByZXNzaW9uIHJlcGxhY2VtZW50LiIKICAgIF0sCiAgICAicHJlZ19yZXBsYWNlX2NhbGxiYWNrIjogWwogICAgICAgICJtaXhlZCBwcmVnX3JlcGxhY2VfY2FsbGJhY2sobWl4ZWQgcmVnZXgsIG1peGVkIGNhbGxiYWNrLCBtaXhlZCBzdWJqZWN0IFssIGludCBsaW1pdCBbLCBpbnQgJmNvdW50XV0pIiwKICAgICAgICAiUGVyZm9ybSBQZXJsLXN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiByZXBsYWNlbWVudCB1c2luZyByZXBsYWNlbWVudCBjYWxsYmFjay4iCiAgICBdLAogICAgInByZWdfc3BsaXQiOiBbCiAgICAgICAgImFycmF5IHByZWdfc3BsaXQoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdWJqZWN0IFssIGludCBsaW1pdCBbLCBpbnQgZmxhZ3NdXSkiLAogICAgICAgICJTcGxpdCBzdHJpbmcgaW50byBhbiBhcnJheSB1c2luZyBhIHBlcmwtc3R5bGUgcmVndWxhciBleHByZXNzaW9uIGFzIGEgZGVsaW1pdGVyIgogICAgXSwKICAgICJwcmV2IjogWwogICAgICAgICJtaXhlZCBwcmV2KGFycmF5IGFycmF5X2FyZykiLAogICAgICAgICJNb3ZlIGFycmF5IGFyZ3VtZW50J3MgaW50ZXJuYWwgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgZWxlbWVudCBhbmQgcmV0dXJuIGl0IgogICAgXSwKICAgICJwcmludCI6IFsKICAgICAgICAiaW50IHByaW50KHN0cmluZyBhcmcpIiwKICAgICAgICAiT3V0cHV0IGEgc3RyaW5nIgogICAgXSwKICAgICJwcmludF9yIjogWwogICAgICAgICJtaXhlZCBwcmludF9yKG1peGVkIHZhciBbLCBib29sIHJldHVybl0pIiwKICAgICAgICAiUHJpbnRzIG91dCBvciByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgdmFyaWFibGUiCiAgICBdLAogICAgInByaW50ZiI6IFsKICAgICAgICAiaW50IHByaW50ZihzdHJpbmcgZm9ybWF0IFssIG1peGVkIGFyZzEgWywgbWl4ZWQgLi4uXV0pIiwKICAgICAgICAiT3V0cHV0IGEgZm9ybWF0dGVkIHN0cmluZyIKICAgIF0sCiAgICAicHJvY19jbG9zZSI6IFsKICAgICAgICAiaW50IHByb2NfY2xvc2UocmVzb3VyY2UgcHJvY2VzcykiLAogICAgICAgICJjbG9zZSBhIHByb2Nlc3Mgb3BlbmVkIGJ5IHByb2Nfb3BlbiIKICAgIF0sCiAgICAicHJvY19nZXRfc3RhdHVzIjogWwogICAgICAgICJhcnJheSBwcm9jX2dldF9zdGF0dXMocmVzb3VyY2UgcHJvY2VzcykiLAogICAgICAgICJnZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9jZXNzIG9wZW5lZCBieSBwcm9jX29wZW4iCiAgICBdLAogICAgInByb2NfbmljZSI6IFsKICAgICAgICAiYm9vbCBwcm9jX25pY2UoaW50IHByaW9yaXR5KSIsCiAgICAgICAgIkNoYW5nZSB0aGUgcHJpb3JpdHkgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcyIKICAgIF0sCiAgICAicHJvY19vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBwcm9jX29wZW4oc3RyaW5nIGNvbW1hbmQsIGFycmF5IGRlc2NyaXB0b3JzcGVjLCBhcnJheSAmcGlwZXMgWywgc3RyaW5nIGN3ZCBbLCBhcnJheSBlbnYgWywgYXJyYXkgb3RoZXJfb3B0aW9uc11dXSkiLAogICAgICAgICJSdW4gYSBwcm9jZXNzIHdpdGggbW9yZSBjb250cm9sIG92ZXIgaXQncyBmaWxlIGRlc2NyaXB0b3JzIgogICAgXSwKICAgICJwcm9jX3Rlcm1pbmF0ZSI6IFsKICAgICAgICAiYm9vbCBwcm9jX3Rlcm1pbmF0ZShyZXNvdXJjZSBwcm9jZXNzIFssIGxvbmcgc2lnbmFsXSkiLAogICAgICAgICJraWxsIGEgcHJvY2VzcyBvcGVuZWQgYnkgcHJvY19vcGVuIgogICAgXSwKICAgICJwcm9wZXJ0eV9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgcHJvcGVydHlfZXhpc3RzKG1peGVkIG9iamVjdF9vcl9jbGFzcywgc3RyaW5nIHByb3BlcnR5X25hbWUpIiwKICAgICAgICAiQ2hlY2tzIGlmIHRoZSBvYmplY3Qgb3IgY2xhc3MgaGFzIGEgcHJvcGVydHkiCiAgICBdLAogICAgInBzcGVsbF9hZGRfdG9fcGVyc29uYWwiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2FkZF90b19wZXJzb25hbChpbnQgcHNwZWxsLCBzdHJpbmcgd29yZCkiLAogICAgICAgICJBZGRzIGEgd29yZCB0byBhIHBlcnNvbmFsIGxpc3QiCiAgICBdLAogICAgInBzcGVsbF9hZGRfdG9fc2Vzc2lvbiI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfYWRkX3RvX3Nlc3Npb24oaW50IHBzcGVsbCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiQWRkcyBhIHdvcmQgdG8gdGhlIGN1cnJlbnQgc2Vzc2lvbiIKICAgIF0sCiAgICAicHNwZWxsX2NoZWNrIjogWwogICAgICAgICJib29sIHBzcGVsbF9jaGVjayhpbnQgcHNwZWxsLCBzdHJpbmcgd29yZCkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgd29yZCBpcyB2YWxpZCIKICAgIF0sCiAgICAicHNwZWxsX2NsZWFyX3Nlc3Npb24iOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NsZWFyX3Nlc3Npb24oaW50IHBzcGVsbCkiLAogICAgICAgICJDbGVhcnMgdGhlIGN1cnJlbnQgc2Vzc2lvbiIKICAgIF0sCiAgICAicHNwZWxsX2NvbmZpZ19jcmVhdGUiOiBbCiAgICAgICAgImludCBwc3BlbGxfY29uZmlnX2NyZWF0ZShzdHJpbmcgbGFuZ3VhZ2UgWywgc3RyaW5nIHNwZWxsaW5nIFssIHN0cmluZyBqYXJnb24gWywgc3RyaW5nIGVuY29kaW5nXV1dKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBjb25maWcgdG8gYmUgdXNlZCBsYXRlciB0byBjcmVhdGUgYSBtYW5hZ2VyIgogICAgXSwKICAgICJwc3BlbGxfY29uZmlnX2RhdGFfZGlyIjogWwogICAgICAgICJib29sIHBzcGVsbF9jb25maWdfZGF0YV9kaXIoaW50IGNvbmYsIHN0cmluZyBkaXJlY3RvcnkpIiwKICAgICAgICAibG9jYXRpb24gb2YgbGFuZ3VhZ2UgZGF0YSBmaWxlcyIKICAgIF0sCiAgICAicHNwZWxsX2NvbmZpZ19kaWN0X2RpciI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfY29uZmlnX2RpY3RfZGlyKGludCBjb25mLCBzdHJpbmcgZGlyZWN0b3J5KSIsCiAgICAgICAgImxvY2F0aW9uIG9mIHRoZSBtYWluIHdvcmQgbGlzdCIKICAgIF0sCiAgICAicHNwZWxsX2NvbmZpZ19pZ25vcmUiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19pZ25vcmUoaW50IGNvbmYsIGludCBpZ25vcmUpIiwKICAgICAgICAiSWdub3JlIHdvcmRzIDw9IG4gY2hhcnMiCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfbW9kZSI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfY29uZmlnX21vZGUoaW50IGNvbmYsIGxvbmcgbW9kZSkiLAogICAgICAgICJTZWxlY3QgbW9kZSBmb3IgY29uZmlnIChQU1BFTExfRkFTVCwgUFNQRUxMX05PUk1BTCBvciBQU1BFTExfQkFEX1NQRUxMRVJTKSIKICAgIF0sCiAgICAicHNwZWxsX2NvbmZpZ19wZXJzb25hbCI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfY29uZmlnX3BlcnNvbmFsKGludCBjb25mLCBzdHJpbmcgcGVyc29uYWwpIiwKICAgICAgICAiVXNlIGEgcGVyc29uYWwgZGljdGlvbmFyeSBmb3IgdGhpcyBjb25maWciCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfcmVwbCI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfY29uZmlnX3JlcGwoaW50IGNvbmYsIHN0cmluZyByZXBsKSIsCiAgICAgICAgIlVzZSBhIHBlcnNvbmFsIGRpY3Rpb25hcnkgd2l0aCByZXBsYWNlbWVudCBwYWlycyBmb3IgdGhpcyBjb25maWciCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfcnVudG9nZXRoZXIiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19ydW50b2dldGhlcihpbnQgY29uZiwgYm9vbCBydW50b2dldGhlcikiLAogICAgICAgICJDb25zaWRlciBydW4tdG9nZXRoZXIgd29yZHMgYXMgdmFsaWQgY29tcG9uZW50cyIKICAgIF0sCiAgICAicHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19zYXZlX3JlcGwoaW50IGNvbmYsIGJvb2wgc2F2ZSkiLAogICAgICAgICJTYXZlIHJlcGxhY2VtZW50IHBhaXJzIHdoZW4gcGVyc29uYWwgbGlzdCBpcyBzYXZlZCBmb3IgdGhpcyBjb25maWciCiAgICBdLAogICAgInBzcGVsbF9uZXciOiBbCiAgICAgICAgImludCBwc3BlbGxfbmV3KHN0cmluZyBsYW5ndWFnZSBbLCBzdHJpbmcgc3BlbGxpbmcgWywgc3RyaW5nIGphcmdvbiBbLCBzdHJpbmcgZW5jb2RpbmcgWywgaW50IG1vZGVdXV1dKSIsCiAgICAgICAgIkxvYWQgYSBkaWN0aW9uYXJ5IgogICAgXSwKICAgICJwc3BlbGxfbmV3X2NvbmZpZyI6IFsKICAgICAgICAiaW50IHBzcGVsbF9uZXdfY29uZmlnKGludCBjb25maWcpIiwKICAgICAgICAiTG9hZCBhIGRpY3Rpb25hcnkgYmFzZWQgb24gdGhlIGdpdmVuIGNvbmZpZyIKICAgIF0sCiAgICAicHNwZWxsX25ld19wZXJzb25hbCI6IFsKICAgICAgICAiaW50IHBzcGVsbF9uZXdfcGVyc29uYWwoc3RyaW5nIHBlcnNvbmFsLCBzdHJpbmcgbGFuZ3VhZ2UgWywgc3RyaW5nIHNwZWxsaW5nIFssIHN0cmluZyBqYXJnb24gWywgc3RyaW5nIGVuY29kaW5nIFssIGludCBtb2RlXV1dXSkiLAogICAgICAgICJMb2FkIGEgZGljdGlvbmFyeSB3aXRoIGEgcGVyc29uYWwgd29yZGxpc3QiCiAgICBdLAogICAgInBzcGVsbF9zYXZlX3dvcmRsaXN0IjogWwogICAgICAgICJib29sIHBzcGVsbF9zYXZlX3dvcmRsaXN0KGludCBwc3BlbGwpIiwKICAgICAgICAiU2F2ZXMgdGhlIGN1cnJlbnQgKHBlcnNvbmFsKSB3b3JkbGlzdCIKICAgIF0sCiAgICAicHNwZWxsX3N0b3JlX3JlcGxhY2VtZW50IjogWwogICAgICAgICJib29sIHBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudChpbnQgcHNwZWxsLCBzdHJpbmcgbWlzc3BlbGwsIHN0cmluZyBjb3JyZWN0KSIsCiAgICAgICAgIk5vdGlmeSB0aGUgZGljdGlvbmFyeSBvZiBhIHVzZXItc2VsZWN0ZWQgcmVwbGFjZW1lbnQiCiAgICBdLAogICAgInBzcGVsbF9zdWdnZXN0IjogWwogICAgICAgICJhcnJheSBwc3BlbGxfc3VnZ2VzdChpbnQgcHNwZWxsLCBzdHJpbmcgd29yZCkiLAogICAgICAgICJSZXR1cm5zIGFycmF5IG9mIHN1Z2dlc3Rpb25zIgogICAgXSwKICAgICJwdXRlbnYiOiBbCiAgICAgICAgImJvb2wgcHV0ZW52KHN0cmluZyBzZXR0aW5nKSIsCiAgICAgICAgIlNldCB0aGUgdmFsdWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUiCiAgICBdLAogICAgInF1b3RlZF9wcmludGFibGVfZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgcXVvdGVkX3ByaW50YWJsZV9kZWNvZGUoc3RyaW5nIHN0cikiLAogICAgICAgICJDb252ZXJ0IGEgcXVvdGVkLXByaW50YWJsZSBzdHJpbmcgdG8gYW4gOCBiaXQgc3RyaW5nIgogICAgXSwKICAgICJxdW90ZWRfcHJpbnRhYmxlX2VuY29kZSI6IFsKICAgICAgICAic3RyaW5nIHF1b3RlZF9wcmludGFibGVfZW5jb2RlKHN0cmluZyBzdHIpICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKHF1b3RlZF9wcmludGFibGVfZW5jb2RlKSB7ICBjaGFyICpzdHIsICpuZXdfc3RyOyAgaW50IHN0cl9sZW47ICBzaXplX3QgbmV3X3N0cl9sZW47ICAgaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVycyhaRU5EX05VTV9BUkdTKCkgVFNSTUxTX0NDLCBcInNcIiwgJnN0ciwgJnN0cl9sZW4pICE9IFNVQ0NFU1MpIHsgICByZXR1cm47ICB9ICAgaWYgKCFzdHJfbGVuKSB7ICAgUkVUVVJOX0VNUFRZX1NUUklORygpOyAgfSAgIG5ld19zdHIgPSAoY2hhciAqKXBocF9xdW90X3ByaW50X2VuY29kZSgodW5zaWduZWQgY2hhciAqKXN0ciwgKHNpemVfdClzdHJfbGVuLCAmbmV3X3N0cl9sZW4pOyAgUkVUVVJOX1NUUklOR0wobmV3X3N0ciwgbmV3X3N0cl9sZW4sIDApOyB9IC8qIH19fSIKICAgIF0sCiAgICAicXVvdGVtZXRhIjogWwogICAgICAgICJzdHJpbmcgcXVvdGVtZXRhKHN0cmluZyBzdHIpIiwKICAgICAgICAiUXVvdGVzIG1ldGEgY2hhcmFjdGVycyIKICAgIF0sCiAgICAicmFkMmRlZyI6IFsKICAgICAgICAiZmxvYXQgcmFkMmRlZyhmbG9hdCBudW1iZXIpIiwKICAgICAgICAiQ29udmVydHMgdGhlIHJhZGlhbiBudW1iZXIgdG8gdGhlIGVxdWl2YWxlbnQgbnVtYmVyIGluIGRlZ3JlZXMiCiAgICBdLAogICAgInJhbmQiOiBbCiAgICAgICAgImludCByYW5kKFtpbnQgbWluLCBpbnQgbWF4XSkiLAogICAgICAgICJSZXR1cm5zIGEgcmFuZG9tIG51bWJlciIKICAgIF0sCiAgICAicmFuZ2UiOiBbCiAgICAgICAgImFycmF5IHJhbmdlKG1peGVkIGxvdywgbWl4ZWQgaGlnaFssIGludCBzdGVwXSkiLAogICAgICAgICJDcmVhdGUgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcmFuZ2Ugb2YgaW50ZWdlcnMgb3IgY2hhcmFjdGVycyBmcm9tIGxvdyB0byBoaWdoIChpbmNsdXNpdmUpIgogICAgXSwKICAgICJyYXd1cmxkZWNvZGUiOiBbCiAgICAgICAgInN0cmluZyByYXd1cmxkZWNvZGUoc3RyaW5nIHN0cikiLAogICAgICAgICJEZWNvZGVzIFVSTC1lbmNvZGVzIHN0cmluZyIKICAgIF0sCiAgICAicmF3dXJsZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcgcmF3dXJsZW5jb2RlKHN0cmluZyBzdHIpIiwKICAgICAgICAiVVJMLWVuY29kZXMgc3RyaW5nIgogICAgXSwKICAgICJyZWFkZGlyIjogWwogICAgICAgICJzdHJpbmcgcmVhZGRpcihbcmVzb3VyY2UgZGlyX2hhbmRsZV0pIiwKICAgICAgICAiUmVhZCBkaXJlY3RvcnkgZW50cnkgZnJvbSBkaXJfaGFuZGxlIgogICAgXSwKICAgICJyZWFkZmlsZSI6IFsKICAgICAgICAiaW50IHJlYWRmaWxlKHN0cmluZyBmaWxlbmFtZSBbLCBib29sIHVzZV9pbmNsdWRlX3BhdGhbLCByZXNvdXJjZSBjb250ZXh0XV0pIiwKICAgICAgICAiT3V0cHV0IGEgZmlsZSBvciBhIFVSTCIKICAgIF0sCiAgICAicmVhZGd6ZmlsZSI6IFsKICAgICAgICAiaW50IHJlYWRnemZpbGUoc3RyaW5nIGZpbGVuYW1lIFssIGludCB1c2VfaW5jbHVkZV9wYXRoXSkiLAogICAgICAgICJPdXRwdXQgYSAuZ3otZmlsZSIKICAgIF0sCiAgICAicmVhZGxpbmUiOiBbCiAgICAgICAgInN0cmluZyByZWFkbGluZShbc3RyaW5nIHByb21wdF0pIiwKICAgICAgICAiUmVhZHMgYSBsaW5lIgogICAgXSwKICAgICJyZWFkbGluZV9hZGRfaGlzdG9yeSI6IFsKICAgICAgICAiYm9vbCByZWFkbGluZV9hZGRfaGlzdG9yeShzdHJpbmcgcHJvbXB0KSIsCiAgICAgICAgIkFkZHMgYSBsaW5lIHRvIHRoZSBoaXN0b3J5IgogICAgXSwKICAgICJyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX2luc3RhbGwiOiBbCiAgICAgICAgInZvaWQgcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsKHN0cmluZyBwcm9tcHQsIG1peGVkIGNhbGxiYWNrKSIsCiAgICAgICAgIkluaXRpYWxpemVzIHRoZSByZWFkbGluZSBjYWxsYmFjayBpbnRlcmZhY2UgYW5kIHRlcm1pbmFsLCBwcmludHMgdGhlIHByb21wdCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseSIKICAgIF0sCiAgICAicmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUiOiBbCiAgICAgICAgImJvb2wgcmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUoKSIsCiAgICAgICAgIlJlbW92ZXMgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBjYWxsYmFjayBoYW5kbGVyIGFuZCByZXN0b3JlcyB0ZXJtaW5hbCBzZXR0aW5ncyIKICAgIF0sCiAgICAicmVhZGxpbmVfY2FsbGJhY2tfcmVhZF9jaGFyIjogWwogICAgICAgICJ2b2lkIHJlYWRsaW5lX2NhbGxiYWNrX3JlYWRfY2hhcigpIiwKICAgICAgICAiSW5mb3JtcyB0aGUgcmVhZGxpbmUgY2FsbGJhY2sgaW50ZXJmYWNlIHRoYXQgYSBjaGFyYWN0ZXIgaXMgcmVhZHkgZm9yIGlucHV0IgogICAgXSwKICAgICJyZWFkbGluZV9jbGVhcl9oaXN0b3J5IjogWwogICAgICAgICJib29sIHJlYWRsaW5lX2NsZWFyX2hpc3Rvcnkodm9pZCkiLAogICAgICAgICJDbGVhcnMgdGhlIGhpc3RvcnkiCiAgICBdLAogICAgInJlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb24iOiBbCiAgICAgICAgImJvb2wgcmVhZGxpbmVfY29tcGxldGlvbl9mdW5jdGlvbihzdHJpbmcgZnVuY25hbWUpIiwKICAgICAgICAiUmVhZGxpbmUgY29tcGxldGlvbiBmdW5jdGlvbj8iCiAgICBdLAogICAgInJlYWRsaW5lX2luZm8iOiBbCiAgICAgICAgIm1peGVkIHJlYWRsaW5lX2luZm8oW3N0cmluZyB2YXJuYW1lIFssIHN0cmluZyBuZXd2YWx1ZV1dKSIsCiAgICAgICAgIkdldHMvc2V0cyB2YXJpb3VzIGludGVybmFsIHJlYWRsaW5lIHZhcmlhYmxlcy4iCiAgICBdLAogICAgInJlYWRsaW5lX2xpc3RfaGlzdG9yeSI6IFsKICAgICAgICAiYXJyYXkgcmVhZGxpbmVfbGlzdF9oaXN0b3J5KHZvaWQpIiwKICAgICAgICAiTGlzdHMgdGhlIGhpc3RvcnkiCiAgICBdLAogICAgInJlYWRsaW5lX29uX25ld19saW5lIjogWwogICAgICAgICJ2b2lkIHJlYWRsaW5lX29uX25ld19saW5lKHZvaWQpIiwKICAgICAgICAiSW5mb3JtIHJlYWRsaW5lIHRoYXQgdGhlIGN1cnNvciBoYXMgbW92ZWQgdG8gYSBuZXcgbGluZSIKICAgIF0sCiAgICAicmVhZGxpbmVfcmVhZF9oaXN0b3J5IjogWwogICAgICAgICJib29sIHJlYWRsaW5lX3JlYWRfaGlzdG9yeShbc3RyaW5nIGZpbGVuYW1lXSkiLAogICAgICAgICJSZWFkcyB0aGUgaGlzdG9yeSIKICAgIF0sCiAgICAicmVhZGxpbmVfcmVkaXNwbGF5IjogWwogICAgICAgICJ2b2lkIHJlYWRsaW5lX3JlZGlzcGxheSh2b2lkKSIsCiAgICAgICAgIkFzayByZWFkbGluZSB0byByZWRyYXcgdGhlIGRpc3BsYXkiCiAgICBdLAogICAgInJlYWRsaW5lX3dyaXRlX2hpc3RvcnkiOiBbCiAgICAgICAgImJvb2wgcmVhZGxpbmVfd3JpdGVfaGlzdG9yeShbc3RyaW5nIGZpbGVuYW1lXSkiLAogICAgICAgICJXcml0ZXMgdGhlIGhpc3RvcnkiCiAgICBdLAogICAgInJlYWRsaW5rIjogWwogICAgICAgICJzdHJpbmcgcmVhZGxpbmsoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybiB0aGUgdGFyZ2V0IG9mIGEgc3ltYm9saWMgbGluayIKICAgIF0sCiAgICAicmVhbHBhdGgiOiBbCiAgICAgICAgInN0cmluZyByZWFscGF0aChzdHJpbmcgcGF0aCkiLAogICAgICAgICJSZXR1cm4gdGhlIHJlc29sdmVkIHBhdGgiCiAgICBdLAogICAgInJlYWxwYXRoX2NhY2hlX2dldCI6IFsKICAgICAgICAiYm9vbCByZWFscGF0aF9jYWNoZV9nZXQoKSIsCiAgICAgICAgIkdldCBjdXJyZW50IHNpemUgb2YgcmVhbHBhdGggY2FjaGUiCiAgICBdLAogICAgInJlYWxwYXRoX2NhY2hlX3NpemUiOiBbCiAgICAgICAgImJvb2wgcmVhbHBhdGhfY2FjaGVfc2l6ZSgpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgc2l6ZSBvZiByZWFscGF0aCBjYWNoZSIKICAgIF0sCiAgICAicmVjb2RlX2ZpbGUiOiBbCiAgICAgICAgImJvb2wgcmVjb2RlX2ZpbGUoc3RyaW5nIHJlcXVlc3QsIHJlc291cmNlIGlucHV0LCByZXNvdXJjZSBvdXRwdXQpIiwKICAgICAgICAiUmVjb2RlIGZpbGUgaW5wdXQgaW50byBmaWxlIG91dHB1dCBhY2NvcmRpbmcgdG8gcmVxdWVzdCIKICAgIF0sCiAgICAicmVjb2RlX3N0cmluZyI6IFsKICAgICAgICAic3RyaW5nIHJlY29kZV9zdHJpbmcoc3RyaW5nIHJlcXVlc3QsIHN0cmluZyBzdHIpIiwKICAgICAgICAiUmVjb2RlIHN0cmluZyBzdHIgYWNjb3JkaW5nIHRvIHJlcXVlc3Qgc3RyaW5nIgogICAgXSwKICAgICJyZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbiI6IFsKICAgICAgICAidm9pZCByZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbihzdHJpbmcgZnVuY3Rpb25fbmFtZSkiLAogICAgICAgICJSZWdpc3RlciBhIHVzZXItbGV2ZWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHJlcXVlc3QgdGVybWluYXRpb24iCiAgICBdLAogICAgInJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24iOiBbCiAgICAgICAgImJvb2wgcmVnaXN0ZXJfdGlja19mdW5jdGlvbihzdHJpbmcgZnVuY3Rpb25fbmFtZSBbLCBtaXhlZCBhcmcgWywgbWl4ZWQgLi4uIF1dKSIsCiAgICAgICAgIlJlZ2lzdGVycyBhIHRpY2sgY2FsbGJhY2sgZnVuY3Rpb24iCiAgICBdLAogICAgInJlbmFtZSI6IFsKICAgICAgICAiYm9vbCByZW5hbWUoc3RyaW5nIG9sZF9uYW1lLCBzdHJpbmcgbmV3X25hbWVbLCByZXNvdXJjZSBjb250ZXh0XSkiLAogICAgICAgICJSZW5hbWUgYSBmaWxlIgogICAgXSwKICAgICJyZXF1aXJlIjogWwogICAgICAgICJib29sIHJlcXVpcmUoc3RyaW5nIHBhdGgpIiwKICAgICAgICAiSW5jbHVkZXMgYW5kIGV2YWx1YXRlcyB0aGUgc3BlY2lmaWVkIGZpbGUsIGVycm9yaW5nIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBpbmNsdWRlZCIKICAgIF0sCiAgICAicmVxdWlyZV9vbmNlIjogWwogICAgICAgICJib29sIHJlcXVpcmVfb25jZShzdHJpbmcgcGF0aCkiLAogICAgICAgICJJbmNsdWRlcyBhbmQgZXZhbHVhdGVzIHRoZSBzcGVjaWZpZWQgZmlsZSwgZXJyb3JpbmcgaWYgdGhlIGZpbGUgY2Fubm90IGJlIGluY2x1ZGVkIgogICAgXSwKICAgICJyZXNldCI6IFsKICAgICAgICAibWl4ZWQgcmVzZXQoYXJyYXkgYXJyYXlfYXJnKSIsCiAgICAgICAgIlNldCBhcnJheSBhcmd1bWVudCdzIGludGVybmFsIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHJldHVybiBpdCIKICAgIF0sCiAgICAicmVzdG9yZV9lcnJvcl9oYW5kbGVyIjogWwogICAgICAgICJ2b2lkIHJlc3RvcmVfZXJyb3JfaGFuZGxlcih2b2lkKSIsCiAgICAgICAgIlJlc3RvcmVzIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZXJyb3IgaGFuZGxlciBmdW5jdGlvbiIKICAgIF0sCiAgICAicmVzdG9yZV9leGNlcHRpb25faGFuZGxlciI6IFsKICAgICAgICAidm9pZCByZXN0b3JlX2V4Y2VwdGlvbl9oYW5kbGVyKHZvaWQpIiwKICAgICAgICAiUmVzdG9yZXMgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBleGNlcHRpb24gaGFuZGxlciBmdW5jdGlvbiIKICAgIF0sCiAgICAicmVzdG9yZV9pbmNsdWRlX3BhdGgiOiBbCiAgICAgICAgInZvaWQgcmVzdG9yZV9pbmNsdWRlX3BhdGgoKSIsCiAgICAgICAgIlJlc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBpbmNsdWRlX3BhdGggY29uZmlndXJhdGlvbiBvcHRpb24iCiAgICBdLAogICAgInJld2luZCI6IFsKICAgICAgICAiYm9vbCByZXdpbmQocmVzb3VyY2UgZnApIiwKICAgICAgICAiUmV3aW5kIHRoZSBwb3NpdGlvbiBvZiBhIGZpbGUgcG9pbnRlciIKICAgIF0sCiAgICAicmV3aW5kZGlyIjogWwogICAgICAgICJ2b2lkIHJld2luZGRpcihbcmVzb3VyY2UgZGlyX2hhbmRsZV0pIiwKICAgICAgICAiUmV3aW5kIGRpcl9oYW5kbGUgYmFjayB0byB0aGUgc3RhcnQiCiAgICBdLAogICAgInJtZGlyIjogWwogICAgICAgICJib29sIHJtZGlyKHN0cmluZyBkaXJuYW1lWywgcmVzb3VyY2UgY29udGV4dF0pIiwKICAgICAgICAiUmVtb3ZlIGEgZGlyZWN0b3J5IgogICAgXSwKICAgICJyb3VuZCI6IFsKICAgICAgICAiZmxvYXQgcm91bmQoZmxvYXQgbnVtYmVyIFssIGludCBwcmVjaXNpb24gWywgaW50IG1vZGVdXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgcm91bmRlZCB0byBzcGVjaWZpZWQgcHJlY2lzaW9uIgogICAgXSwKICAgICJyc29ydCI6IFsKICAgICAgICAiYm9vbCByc29ydChhcnJheSAmYXJyYXlfYXJnIFssIGludCBzb3J0X2ZsYWdzXSkiLAogICAgICAgICJTb3J0IGFuIGFycmF5IGluIHJldmVyc2Ugb3JkZXIiCiAgICBdLAogICAgInJ0cmltIjogWwogICAgICAgICJzdHJpbmcgcnRyaW0oc3RyaW5nIHN0ciBbLCBzdHJpbmcgY2hhcmFjdGVyX21hc2tdKSIsCiAgICAgICAgIlJlbW92ZXMgdHJhaWxpbmcgd2hpdGVzcGFjZSIKICAgIF0sCiAgICAic2NhbmRpciI6IFsKICAgICAgICAiYXJyYXkgc2NhbmRpcihzdHJpbmcgZGlyIFssIGludCBzb3J0aW5nX29yZGVyIFssIHJlc291cmNlIGNvbnRleHRdXSkiLAogICAgICAgICJMaXN0IGZpbGVzICYgZGlyZWN0b3JpZXMgaW5zaWRlIHRoZSBzcGVjaWZpZWQgcGF0aCIKICAgIF0sCiAgICAic2VtX2FjcXVpcmUiOiBbCiAgICAgICAgImJvb2wgc2VtX2FjcXVpcmUocmVzb3VyY2UgaWQpIiwKICAgICAgICAiQWNxdWlyZXMgdGhlIHNlbWFwaG9yZSB3aXRoIHRoZSBnaXZlbiBpZCwgYmxvY2tpbmcgaWYgbmVjZXNzYXJ5IgogICAgXSwKICAgICJzZW1fZ2V0IjogWwogICAgICAgICJyZXNvdXJjZSBzZW1fZ2V0KGludCBrZXkgWywgaW50IG1heF9hY3F1aXJlIFssIGludCBwZXJtIFssIGludCBhdXRvX3JlbGVhc2VdXSkiLAogICAgICAgICJSZXR1cm4gYW4gaWQgZm9yIHRoZSBzZW1hcGhvcmUgd2l0aCB0aGUgZ2l2ZW4ga2V5LCBhbmQgYWxsb3cgbWF4X2FjcXVpcmUgKGRlZmF1bHQgMSkgcHJvY2Vzc2VzIHRvIGFjcXVpcmUgaXQgc2ltdWx0YW5lb3VzbHkiCiAgICBdLAogICAgInNlbV9yZWxlYXNlIjogWwogICAgICAgICJib29sIHNlbV9yZWxlYXNlKHJlc291cmNlIGlkKSIsCiAgICAgICAgIlJlbGVhc2VzIHRoZSBzZW1hcGhvcmUgd2l0aCB0aGUgZ2l2ZW4gaWQiCiAgICBdLAogICAgInNlbV9yZW1vdmUiOiBbCiAgICAgICAgImJvb2wgc2VtX3JlbW92ZShyZXNvdXJjZSBpZCkiLAogICAgICAgICJSZW1vdmVzIHNlbWFwaG9yZSBmcm9tIFVuaXggc3lzdGVtcyIKICAgIF0sCiAgICAic2VyaWFsaXplIjogWwogICAgICAgICJzdHJpbmcgc2VyaWFsaXplKG1peGVkIHZhcmlhYmxlKSIsCiAgICAgICAgIlJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdmFyaWFibGUgKHdoaWNoIGNhbiBsYXRlciBiZSB1bnNlcmlhbGl6ZWQpIgogICAgXSwKICAgICJzZXNzaW9uX2NhY2hlX2V4cGlyZSI6IFsKICAgICAgICAiaW50IHNlc3Npb25fY2FjaGVfZXhwaXJlKFtpbnQgbmV3X2NhY2hlX2V4cGlyZV0pIiwKICAgICAgICAiUmV0dXJuIHRoZSBjdXJyZW50IGNhY2hlIGV4cGlyZS4gSWYgbmV3X2NhY2hlX2V4cGlyZSBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgY2FjaGVfZXhwaXJlIGlzIHJlcGxhY2VkIHdpdGggbmV3X2NhY2hlX2V4cGlyZSIKICAgIF0sCiAgICAic2Vzc2lvbl9jYWNoZV9saW1pdGVyIjogWwogICAgICAgICJzdHJpbmcgc2Vzc2lvbl9jYWNoZV9saW1pdGVyKFtzdHJpbmcgbmV3X2NhY2hlX2xpbWl0ZXJdKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCBjYWNoZSBsaW1pdGVyLiBJZiBuZXdfY2FjaGVfbGltaXRlZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgY2FjaGVfbGltaXRlciBpcyByZXBsYWNlZCB3aXRoIG5ld19jYWNoZV9saW1pdGVyIgogICAgXSwKICAgICJzZXNzaW9uX2RlY29kZSI6IFsKICAgICAgICAiYm9vbCBzZXNzaW9uX2RlY29kZShzdHJpbmcgZGF0YSkiLAogICAgICAgICJEZXNlcmlhbGl6ZXMgZGF0YSBhbmQgcmVpbml0aWFsaXplcyB0aGUgdmFyaWFibGVzIgogICAgXSwKICAgICJzZXNzaW9uX2Rlc3Ryb3kiOiBbCiAgICAgICAgImJvb2wgc2Vzc2lvbl9kZXN0cm95KHZvaWQpIiwKICAgICAgICAiRGVzdHJveSB0aGUgY3VycmVudCBzZXNzaW9uIGFuZCBhbGwgZGF0YSBhc3NvY2lhdGVkIHdpdGggaXQiCiAgICBdLAogICAgInNlc3Npb25fZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcgc2Vzc2lvbl9lbmNvZGUodm9pZCkiLAogICAgICAgICJTZXJpYWxpemVzIHRoZSBjdXJyZW50IHNldHVwIGFuZCByZXR1cm5zIHRoZSBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIgogICAgXSwKICAgICJzZXNzaW9uX2dldF9jb29raWVfcGFyYW1zIjogWwogICAgICAgICJhcnJheSBzZXNzaW9uX2dldF9jb29raWVfcGFyYW1zKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBzZXNzaW9uIGNvb2tpZSBwYXJhbWV0ZXJzIgogICAgXSwKICAgICJzZXNzaW9uX2lkIjogWwogICAgICAgICJzdHJpbmcgc2Vzc2lvbl9pZChbc3RyaW5nIG5ld2lkXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZC4gSWYgbmV3aWQgaXMgZ2l2ZW4sIHRoZSBzZXNzaW9uIGlkIGlzIHJlcGxhY2VkIHdpdGggbmV3aWQiCiAgICBdLAogICAgInNlc3Npb25faXNfcmVnaXN0ZXJlZCI6IFsKICAgICAgICAiYm9vbCBzZXNzaW9uX2lzX3JlZ2lzdGVyZWQoc3RyaW5nIHZhcm5hbWUpIiwKICAgICAgICAiQ2hlY2tzIGlmIGEgdmFyaWFibGUgaXMgcmVnaXN0ZXJlZCBpbiBzZXNzaW9uIgogICAgXSwKICAgICJzZXNzaW9uX21vZHVsZV9uYW1lIjogWwogICAgICAgICJzdHJpbmcgc2Vzc2lvbl9tb2R1bGVfbmFtZShbc3RyaW5nIG5ld25hbWVdKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCBtb2R1bGUgbmFtZSB1c2VkIGZvciBhY2Nlc3Npbmcgc2Vzc2lvbiBkYXRhLiBJZiBuZXduYW1lIGlzIGdpdmVuLCB0aGUgbW9kdWxlIG5hbWUgaXMgcmVwbGFjZWQgd2l0aCBuZXduYW1lIgogICAgXSwKICAgICJzZXNzaW9uX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBzZXNzaW9uX25hbWUoW3N0cmluZyBuZXduYW1lXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgc2Vzc2lvbiBuYW1lLiBJZiBuZXduYW1lIGlzIGdpdmVuLCB0aGUgc2Vzc2lvbiBuYW1lIGlzIHJlcGxhY2VkIHdpdGggbmV3bmFtZSIKICAgIF0sCiAgICAic2Vzc2lvbl9yZWdlbmVyYXRlX2lkIjogWwogICAgICAgICJib29sIHNlc3Npb25fcmVnZW5lcmF0ZV9pZChbYm9vbCBkZWxldGVfb2xkX3Nlc3Npb25dKSIsCiAgICAgICAgIlVwZGF0ZSB0aGUgY3VycmVudCBzZXNzaW9uIGlkIHdpdGggYSBuZXdseSBnZW5lcmF0ZWQgb25lLiBJZiBkZWxldGVfb2xkX3Nlc3Npb24gaXMgc2V0IHRvIHRydWUsIHJlbW92ZSB0aGUgb2xkIHNlc3Npb24uIgogICAgXSwKICAgICJzZXNzaW9uX3JlZ2lzdGVyIjogWwogICAgICAgICJib29sIHNlc3Npb25fcmVnaXN0ZXIobWl4ZWQgdmFyX25hbWVzIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiQWRkcyB2YXJuYW1lKHMpIHRvIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyB3aGljaCBhcmUgZnJlZXplZCBhdCB0aGUgc2Vzc2lvbiBlbmQiCiAgICBdLAogICAgInNlc3Npb25fc2F2ZV9wYXRoIjogWwogICAgICAgICJzdHJpbmcgc2Vzc2lvbl9zYXZlX3BhdGgoW3N0cmluZyBuZXduYW1lXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgc2F2ZSBwYXRoIHBhc3NlZCB0byBtb2R1bGVfbmFtZS4gSWYgbmV3bmFtZSBpcyBnaXZlbiwgdGhlIHNhdmUgcGF0aCBpcyByZXBsYWNlZCB3aXRoIG5ld25hbWUiCiAgICBdLAogICAgInNlc3Npb25fc2V0X2Nvb2tpZV9wYXJhbXMiOiBbCiAgICAgICAgInZvaWQgc2Vzc2lvbl9zZXRfY29va2llX3BhcmFtcyhpbnQgbGlmZXRpbWUgWywgc3RyaW5nIHBhdGggWywgc3RyaW5nIGRvbWFpbiBbLCBib29sIHNlY3VyZVssIGJvb2wgaHR0cG9ubHldXV1dKSIsCiAgICAgICAgIlNldCBzZXNzaW9uIGNvb2tpZSBwYXJhbWV0ZXJzIgogICAgXSwKICAgICJzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXIiOiBbCiAgICAgICAgInZvaWQgc2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyKHN0cmluZyBvcGVuLCBzdHJpbmcgY2xvc2UsIHN0cmluZyByZWFkLCBzdHJpbmcgd3JpdGUsIHN0cmluZyBkZXN0cm95LCBzdHJpbmcgZ2MpIiwKICAgICAgICAiU2V0cyB1c2VyLWxldmVsIGZ1bmN0aW9ucyIKICAgIF0sCiAgICAic2Vzc2lvbl9zdGFydCI6IFsKICAgICAgICAiYm9vbCBzZXNzaW9uX3N0YXJ0KHZvaWQpIiwKICAgICAgICAiQmVnaW4gc2Vzc2lvbiAtIHJlaW5pdGlhbGl6ZXMgZnJlZXplZCB2YXJpYWJsZXMsIHJlZ2lzdGVycyBicm93c2VycyBldGMiCiAgICBdLAogICAgInNlc3Npb25fdW5yZWdpc3RlciI6IFsKICAgICAgICAiYm9vbCBzZXNzaW9uX3VucmVnaXN0ZXIoc3RyaW5nIHZhcm5hbWUpIiwKICAgICAgICAiUmVtb3ZlcyB2YXJuYW1lIGZyb20gdGhlIGxpc3Qgb2YgdmFyaWFibGVzIHdoaWNoIGFyZSBmcmVlemVkIGF0IHRoZSBzZXNzaW9uIGVuZCIKICAgIF0sCiAgICAic2Vzc2lvbl91bnNldCI6IFsKICAgICAgICAidm9pZCBzZXNzaW9uX3Vuc2V0KHZvaWQpIiwKICAgICAgICAiVW5zZXQgYWxsIHJlZ2lzdGVyZWQgdmFyaWFibGVzIgogICAgXSwKICAgICJzZXNzaW9uX3dyaXRlX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIHNlc3Npb25fd3JpdGVfY2xvc2Uodm9pZCkiLAogICAgICAgICJXcml0ZSBzZXNzaW9uIGRhdGEgYW5kIGVuZCBzZXNzaW9uIgogICAgXSwKICAgICJzZXRfZXJyb3JfaGFuZGxlciI6IFsKICAgICAgICAic3RyaW5nIHNldF9lcnJvcl9oYW5kbGVyKHN0cmluZyBlcnJvcl9oYW5kbGVyIFssIGludCBlcnJvcl90eXBlc10pIiwKICAgICAgICAiU2V0cyBhIHVzZXItZGVmaW5lZCBlcnJvciBoYW5kbGVyIGZ1bmN0aW9uLiAgUmV0dXJucyB0aGUgcHJldmlvdXNseSBkZWZpbmVkIGVycm9yIGhhbmRsZXIsIG9yIGZhbHNlIG9uIGVycm9yIgogICAgXSwKICAgICJzZXRfZXhjZXB0aW9uX2hhbmRsZXIiOiBbCiAgICAgICAgInN0cmluZyBzZXRfZXhjZXB0aW9uX2hhbmRsZXIoY2FsbGFibGUgZXhjZXB0aW9uX2hhbmRsZXIpIiwKICAgICAgICAiU2V0cyBhIHVzZXItZGVmaW5lZCBleGNlcHRpb24gaGFuZGxlciBmdW5jdGlvbi4gIFJldHVybnMgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBleGNlcHRpb24gaGFuZGxlciwgb3IgZmFsc2Ugb24gZXJyb3IiCiAgICBdLAogICAgInNldF9pbmNsdWRlX3BhdGgiOiBbCiAgICAgICAgInN0cmluZyBzZXRfaW5jbHVkZV9wYXRoKHN0cmluZyBuZXdfaW5jbHVkZV9wYXRoKSIsCiAgICAgICAgIlNldHMgdGhlIGluY2x1ZGVfcGF0aCBjb25maWd1cmF0aW9uIG9wdGlvbiIKICAgIF0sCiAgICAic2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIjogWwogICAgICAgICJib29sIHNldF9tYWdpY19xdW90ZXNfcnVudGltZShpbnQgbmV3X3NldHRpbmcpIiwKICAgICAgICAiU2V0IHRoZSBjdXJyZW50IGFjdGl2ZSBjb25maWd1cmF0aW9uIHNldHRpbmcgb2YgbWFnaWNfcXVvdGVzX3J1bnRpbWUgYW5kIHJldHVybiBwcmV2aW91cyIKICAgIF0sCiAgICAic2V0X3RpbWVfbGltaXQiOiBbCiAgICAgICAgImJvb2wgc2V0X3RpbWVfbGltaXQoaW50IHNlY29uZHMpIiwKICAgICAgICAiU2V0cyB0aGUgbWF4aW11bSB0aW1lIGEgc2NyaXB0IGNhbiBydW4iCiAgICBdLAogICAgInNldGNvb2tpZSI6IFsKICAgICAgICAiYm9vbCBzZXRjb29raWUoc3RyaW5nIG5hbWUgWywgc3RyaW5nIHZhbHVlIFssIGludCBleHBpcmVzIFssIHN0cmluZyBwYXRoIFssIHN0cmluZyBkb21haW4gWywgYm9vbCBzZWN1cmVbLCBib29sIGh0dHBvbmx5XV1dXV1dKSIsCiAgICAgICAgIlNlbmQgYSBjb29raWUiCiAgICBdLAogICAgInNldGxvY2FsZSI6IFsKICAgICAgICAic3RyaW5nIHNldGxvY2FsZShtaXhlZCBjYXRlZ29yeSwgc3RyaW5nIGxvY2FsZSBbLCBzdHJpbmcgLi4uXSkiLAogICAgICAgICJTZXQgbG9jYWxlIGluZm9ybWF0aW9uIgogICAgXSwKICAgICJzZXRyYXdjb29raWUiOiBbCiAgICAgICAgImJvb2wgc2V0cmF3Y29va2llKHN0cmluZyBuYW1lIFssIHN0cmluZyB2YWx1ZSBbLCBpbnQgZXhwaXJlcyBbLCBzdHJpbmcgcGF0aCBbLCBzdHJpbmcgZG9tYWluIFssIGJvb2wgc2VjdXJlWywgYm9vbCBodHRwb25seV1dXV1dXSkiLAogICAgICAgICJTZW5kIGEgY29va2llIHdpdGggbm8gdXJsIGVuY29kaW5nIG9mIHRoZSB2YWx1ZSIKICAgIF0sCiAgICAic2V0dHlwZSI6IFsKICAgICAgICAiYm9vbCBzZXR0eXBlKG1peGVkIHZhciwgc3RyaW5nIHR5cGUpIiwKICAgICAgICAiU2V0IHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZSIKICAgIF0sCiAgICAic2hhMSI6IFsKICAgICAgICAic3RyaW5nIHNoYTEoc3RyaW5nIHN0ciBbLCBib29sIHJhd19vdXRwdXRdKSIsCiAgICAgICAgIkNhbGN1bGF0ZSB0aGUgc2hhMSBoYXNoIG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJzaGExX2ZpbGUiOiBbCiAgICAgICAgInN0cmluZyBzaGExX2ZpbGUoc3RyaW5nIGZpbGVuYW1lIFssIGJvb2wgcmF3X291dHB1dF0pIiwKICAgICAgICAiQ2FsY3VsYXRlIHRoZSBzaGExIGhhc2ggb2YgZ2l2ZW4gZmlsZW5hbWUiCiAgICBdLAogICAgInNoZWxsX2V4ZWMiOiBbCiAgICAgICAgInN0cmluZyBzaGVsbF9leGVjKHN0cmluZyBjbWQpIiwKICAgICAgICAiRXhlY3V0ZSBjb21tYW5kIHZpYSBzaGVsbCBhbmQgcmV0dXJuIGNvbXBsZXRlIG91dHB1dCBhcyBzdHJpbmciCiAgICBdLAogICAgInNobV9hdHRhY2giOiBbCiAgICAgICAgImludCBzaG1fYXR0YWNoKGludCBrZXkgWywgaW50IG1lbXNpemUgWywgaW50IHBlcm1dXSkiLAogICAgICAgICJDcmVhdGVzIG9yIG9wZW4gYSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiCiAgICBdLAogICAgInNobV9kZXRhY2giOiBbCiAgICAgICAgImJvb2wgc2htX2RldGFjaChyZXNvdXJjZSBzaG1faWRlbnRpZmllcikiLAogICAgICAgICJEaXNjb25uZWN0cyBmcm9tIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIKICAgIF0sCiAgICAic2htX2dldF92YXIiOiBbCiAgICAgICAgIm1peGVkIHNobV9nZXRfdmFyKHJlc291cmNlIGlkLCBpbnQgdmFyaWFibGVfa2V5KSIsCiAgICAgICAgIlJldHVybnMgYSB2YXJpYWJsZSBmcm9tIHNoYXJlZCBtZW1vcnkiCiAgICBdLAogICAgInNobV9oYXNfdmFyIjogWwogICAgICAgICJib29sIHNobV9oYXNfdmFyKHJlc291cmNlIGlkLCBpbnQgdmFyaWFibGVfa2V5KSIsCiAgICAgICAgIkNoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWMgZW50cnkgZXhpc3RzIgogICAgXSwKICAgICJzaG1fcHV0X3ZhciI6IFsKICAgICAgICAiYm9vbCBzaG1fcHV0X3ZhcihyZXNvdXJjZSBzaG1faWRlbnRpZmllciwgaW50IHZhcmlhYmxlX2tleSwgbWl4ZWQgdmFyaWFibGUpIiwKICAgICAgICAiSW5zZXJ0cyBvciB1cGRhdGVzIGEgdmFyaWFibGUgaW4gc2hhcmVkIG1lbW9yeSIKICAgIF0sCiAgICAic2htX3JlbW92ZSI6IFsKICAgICAgICAiYm9vbCBzaG1fcmVtb3ZlKHJlc291cmNlIHNobV9pZGVudGlmaWVyKSIsCiAgICAgICAgIlJlbW92ZXMgc2hhcmVkIG1lbW9yeSBmcm9tIFVuaXggc3lzdGVtcyIKICAgIF0sCiAgICAic2htX3JlbW92ZV92YXIiOiBbCiAgICAgICAgImJvb2wgc2htX3JlbW92ZV92YXIocmVzb3VyY2UgaWQsIGludCB2YXJpYWJsZV9rZXkpIiwKICAgICAgICAiUmVtb3ZlcyB2YXJpYWJsZSBmcm9tIHNoYXJlZCBtZW1vcnkiCiAgICBdLAogICAgInNobW9wX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIHNobW9wX2Nsb3NlIChpbnQgc2htaWQpIiwKICAgICAgICAiY2xvc2VzIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IgogICAgXSwKICAgICJzaG1vcF9kZWxldGUiOiBbCiAgICAgICAgImJvb2wgc2htb3BfZGVsZXRlIChpbnQgc2htaWQpIiwKICAgICAgICAibWFyayBzZWdtZW50IGZvciBkZWxldGlvbiIKICAgIF0sCiAgICAic2htb3Bfb3BlbiI6IFsKICAgICAgICAiaW50IHNobW9wX29wZW4gKGludCBrZXksIHN0cmluZyBmbGFncywgaW50IG1vZGUsIGludCBzaXplKSIsCiAgICAgICAgImdldHMgYW5kIGF0dGFjaGVzIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IgogICAgXSwKICAgICJzaG1vcF9yZWFkIjogWwogICAgICAgICJzdHJpbmcgc2htb3BfcmVhZCAoaW50IHNobWlkLCBpbnQgc3RhcnQsIGludCBjb3VudCkiLAogICAgICAgICJyZWFkcyBmcm9tIGEgc2htIHNlZ21lbnQiCiAgICBdLAogICAgInNobW9wX3NpemUiOiBbCiAgICAgICAgImludCBzaG1vcF9zaXplIChpbnQgc2htaWQpIiwKICAgICAgICAicmV0dXJucyB0aGUgc2htIHNpemUiCiAgICBdLAogICAgInNobW9wX3dyaXRlIjogWwogICAgICAgICJpbnQgc2htb3Bfd3JpdGUgKGludCBzaG1pZCwgc3RyaW5nIGRhdGEsIGludCBvZmZzZXQpIiwKICAgICAgICAid3JpdGVzIHRvIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IgogICAgXSwKICAgICJzaHVmZmxlIjogWwogICAgICAgICJib29sIHNodWZmbGUoYXJyYXkgYXJyYXlfYXJnKSIsCiAgICAgICAgIlJhbmRvbWx5IHNodWZmbGUgdGhlIGNvbnRlbnRzIG9mIGFuIGFycmF5IgogICAgXSwKICAgICJzaW1pbGFyX3RleHQiOiBbCiAgICAgICAgImludCBzaW1pbGFyX3RleHQoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyIFssIGZsb2F0IHBlcmNlbnRdKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgdGhlIHNpbWlsYXJpdHkgYmV0d2VlbiB0d28gc3RyaW5ncyIKICAgIF0sCiAgICAic2ltcGxleG1sX2ltcG9ydF9kb20iOiBbCiAgICAgICAgInNpbXBsZW14bWxfZWxlbWVudCBzaW1wbGV4bWxfaW1wb3J0X2RvbShkb21Ob2RlIG5vZGUgWywgc3RyaW5nIGNsYXNzX25hbWVdKSIsCiAgICAgICAgIkdldCBhIHNpbXBsZXhtbF9lbGVtZW50IG9iamVjdCBmcm9tIGRvbSB0byBhbGxvdyBmb3IgcHJvY2Vzc2luZyIKICAgIF0sCiAgICAic2ltcGxleG1sX2xvYWRfZmlsZSI6IFsKICAgICAgICAic2ltcGxlbXhtbF9lbGVtZW50IHNpbXBsZXhtbF9sb2FkX2ZpbGUoc3RyaW5nIGZpbGVuYW1lIFssIHN0cmluZyBjbGFzc19uYW1lIFssIGludCBvcHRpb25zIFssIHN0cmluZyBucyBbLCBib29sIGlzX3ByZWZpeF1dXV0pIiwKICAgICAgICAiTG9hZCBhIGZpbGVuYW1lIGFuZCByZXR1cm4gYSBzaW1wbGV4bWxfZWxlbWVudCBvYmplY3QgdG8gYWxsb3cgZm9yIHByb2Nlc3NpbmciCiAgICBdLAogICAgInNpbXBsZXhtbF9sb2FkX3N0cmluZyI6IFsKICAgICAgICAic2ltcGxlbXhtbF9lbGVtZW50IHNpbXBsZXhtbF9sb2FkX3N0cmluZyhzdHJpbmcgZGF0YSBbLCBzdHJpbmcgY2xhc3NfbmFtZSBbLCBpbnQgb3B0aW9ucyBbLCBzdHJpbmcgbnMgWywgYm9vbCBpc19wcmVmaXhdXV1dKSIsCiAgICAgICAgIkxvYWQgYSBzdHJpbmcgYW5kIHJldHVybiBhIHNpbXBsZXhtbF9lbGVtZW50IG9iamVjdCB0byBhbGxvdyBmb3IgcHJvY2Vzc2luZyIKICAgIF0sCiAgICAic2luIjogWwogICAgICAgICJmbG9hdCBzaW4oZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHNpbmUgb2YgdGhlIG51bWJlciBpbiByYWRpYW5zIgogICAgXSwKICAgICJzaW5oIjogWwogICAgICAgICJmbG9hdCBzaW5oKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIG51bWJlciwgZGVmaW5lZCBhcyAoZXhwKG51bWJlcikgLSBleHAoLW51bWJlcikpLzIiCiAgICBdLAogICAgInNsZWVwIjogWwogICAgICAgICJ2b2lkIHNsZWVwKGludCBzZWNvbmRzKSIsCiAgICAgICAgIkRlbGF5IGZvciBhIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzIgogICAgXSwKICAgICJzbWZpX2FkZGhlYWRlciI6IFsKICAgICAgICAiYm9vbCBzbWZpX2FkZGhlYWRlcihzdHJpbmcgaGVhZGVyZiwgc3RyaW5nIGhlYWRlcnYpIiwKICAgICAgICAiQWRkcyBhIGhlYWRlciB0byB0aGUgY3VycmVudCBtZXNzYWdlLiIKICAgIF0sCiAgICAic21maV9hZGRyY3B0IjogWwogICAgICAgICJib29sIHNtZmlfYWRkcmNwdChzdHJpbmcgcmNwdCkiLAogICAgICAgICJBZGQgYSByZWNpcGllbnQgdG8gdGhlIG1lc3NhZ2UgZW52ZWxvcGUuIgogICAgXSwKICAgICJzbWZpX2NoZ2hlYWRlciI6IFsKICAgICAgICAiYm9vbCBzbWZpX2NoZ2hlYWRlcihzdHJpbmcgaGVhZGVyZiwgc3RyaW5nIGhlYWRlcnYpIiwKICAgICAgICAiQ2hhbmdlcyBhIGhlYWRlcidzIHZhbHVlIGZvciB0aGUgY3VycmVudCBtZXNzYWdlLiIKICAgIF0sCiAgICAic21maV9kZWxyY3B0IjogWwogICAgICAgICJib29sIHNtZmlfZGVscmNwdChzdHJpbmcgcmNwdCkiLAogICAgICAgICJSZW1vdmVzIHRoZSBuYW1lZCByZWNpcGllbnQgZnJvbSB0aGUgY3VycmVudCBtZXNzYWdlJ3MgZW52ZWxvcGUuIgogICAgXSwKICAgICJzbWZpX2dldHN5bXZhbCI6IFsKICAgICAgICAic3RyaW5nIHNtZmlfZ2V0c3ltdmFsKHN0cmluZyBtYWNybykiLAogICAgICAgICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbWFjcm8gb3IgTlVMTCBpZiB0aGUgbWFjcm8gaXMgbm90IGRlZmluZWQuIgogICAgXSwKICAgICJzbWZpX3JlcGxhY2Vib2R5IjogWwogICAgICAgICJib29sIHNtZmlfcmVwbGFjZWJvZHkoc3RyaW5nIGJvZHkpIiwKICAgICAgICAiUmVwbGFjZXMgdGhlIGJvZHkgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZS4gSWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCAgICBzdWJzZXF1ZW50IGNhbGxzIHJlc3VsdCBpbiBkYXRhIGJlaW5nIGFwcGVuZGVkIHRvIHRoZSBuZXcgYm9keS4iCiAgICBdLAogICAgInNtZmlfc2V0ZmxhZ3MiOiBbCiAgICAgICAgInZvaWQgc21maV9zZXRmbGFncyhsb25nIGZsYWdzKSIsCiAgICAgICAgIlNldHMgdGhlIGZsYWdzIGRlc2NyaWJpbmcgdGhlIGFjdGlvbnMgdGhlIGZpbHRlciBtYXkgdGFrZS4iCiAgICBdLAogICAgInNtZmlfc2V0cmVwbHkiOiBbCiAgICAgICAgImJvb2wgc21maV9zZXRyZXBseShzdHJpbmcgcmNvZGUsIHN0cmluZyB4Y29kZSwgc3RyaW5nIG1lc3NhZ2UpIiwKICAgICAgICAiRGlyZWN0bHkgc2V0IHRoZSBTTVRQIGVycm9yIHJlcGx5IGNvZGUgZm9yIHRoaXMgY29ubmVjdGlvbi4gICAgVGhpcyBjb2RlIHdpbGwgYmUgdXNlZCBvbiBzdWJzZXF1ZW50IGVycm9yIHJlcGxpZXMgcmVzdWx0aW5nIGZyb20gYWN0aW9ucyB0YWtlbiBieSB0aGlzIGZpbHRlci4iCiAgICBdLAogICAgInNtZmlfc2V0dGltZW91dCI6IFsKICAgICAgICAidm9pZCBzbWZpX3NldHRpbWVvdXQobG9uZyB0aW1lb3V0KSIsCiAgICAgICAgIlNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxpYm1pbHRlciB3aWxsIHdhaXQgZm9yIGFuIE1UQSBjb25uZWN0aW9uIGJlZm9yZSB0aW1pbmcgb3V0IGEgc29ja2V0LiIKICAgIF0sCiAgICAic25tcDJfZ2V0IjogWwogICAgICAgICJzdHJpbmcgc25tcDJfZ2V0KHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcDJfZ2V0bmV4dCI6IFsKICAgICAgICAic3RyaW5nIHNubXAyX2dldG5leHQoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJGZXRjaCBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wMl9yZWFsX3dhbGsiOiBbCiAgICAgICAgImFycmF5IHNubXAyX3JlYWxfd2FsayhzdHJpbmcgaG9zdCwgc3RyaW5nIGNvbW11bml0eSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIlJldHVybiBhbGwgb2JqZWN0cyBpbmNsdWRpbmcgdGhlaXIgcmVzcGVjdGl2ZSBvYmplY3QgaWQgd2l0aGluZyB0aGUgc3BlY2lmaWVkIG9uZSIKICAgIF0sCiAgICAic25tcDJfc2V0IjogWwogICAgICAgICJpbnQgc25tcDJfc2V0KHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkLCBzdHJpbmcgdHlwZSwgbWl4ZWQgdmFsdWUgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJTZXQgdGhlIHZhbHVlIG9mIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXAyX3dhbGsiOiBbCiAgICAgICAgImFycmF5IHNubXAyX3dhbGsoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJSZXR1cm4gYWxsIG9iamVjdHMgdW5kZXIgdGhlIHNwZWNpZmllZCBvYmplY3QgaWQiCiAgICBdLAogICAgInNubXAzX2dldCI6IFsKICAgICAgICAiaW50IHNubXAzX2dldChzdHJpbmcgaG9zdCwgc3RyaW5nIHNlY19uYW1lLCBzdHJpbmcgc2VjX2xldmVsLCBzdHJpbmcgYXV0aF9wcm90b2NvbCwgc3RyaW5nIGF1dGhfcGFzc3BocmFzZSwgc3RyaW5nIHByaXZfcHJvdG9jb2wsIHN0cmluZyBwcml2X3Bhc3NwaHJhc2UsIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJGZXRjaCB0aGUgdmFsdWUgb2YgYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcDNfZ2V0bmV4dCI6IFsKICAgICAgICAiaW50IHNubXAzX2dldG5leHQoc3RyaW5nIGhvc3QsIHN0cmluZyBzZWNfbmFtZSwgc3RyaW5nIHNlY19sZXZlbCwgc3RyaW5nIGF1dGhfcHJvdG9jb2wsIHN0cmluZyBhdXRoX3Bhc3NwaHJhc2UsIHN0cmluZyBwcml2X3Byb3RvY29sLCBzdHJpbmcgcHJpdl9wYXNzcGhyYXNlLCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggdGhlIHZhbHVlIG9mIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXAzX3JlYWxfd2FsayI6IFsKICAgICAgICAiaW50IHNubXAzX3JlYWxfd2FsayhzdHJpbmcgaG9zdCwgc3RyaW5nIHNlY19uYW1lLCBzdHJpbmcgc2VjX2xldmVsLCBzdHJpbmcgYXV0aF9wcm90b2NvbCwgc3RyaW5nIGF1dGhfcGFzc3BocmFzZSwgc3RyaW5nIHByaXZfcHJvdG9jb2wsIHN0cmluZyBwcml2X3Bhc3NwaHJhc2UsIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJGZXRjaCB0aGUgdmFsdWUgb2YgYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcDNfc2V0IjogWwogICAgICAgICJpbnQgc25tcDNfc2V0KHN0cmluZyBob3N0LCBzdHJpbmcgc2VjX25hbWUsIHN0cmluZyBzZWNfbGV2ZWwsIHN0cmluZyBhdXRoX3Byb3RvY29sLCBzdHJpbmcgYXV0aF9wYXNzcGhyYXNlLCBzdHJpbmcgcHJpdl9wcm90b2NvbCwgc3RyaW5nIHByaXZfcGFzc3BocmFzZSwgc3RyaW5nIG9iamVjdF9pZCwgc3RyaW5nIHR5cGUsIG1peGVkIHZhbHVlIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggdGhlIHZhbHVlIG9mIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXAzX3dhbGsiOiBbCiAgICAgICAgImludCBzbm1wM193YWxrKHN0cmluZyBob3N0LCBzdHJpbmcgc2VjX25hbWUsIHN0cmluZyBzZWNfbGV2ZWwsIHN0cmluZyBhdXRoX3Byb3RvY29sLCBzdHJpbmcgYXV0aF9wYXNzcGhyYXNlLCBzdHJpbmcgcHJpdl9wcm90b2NvbCwgc3RyaW5nIHByaXZfcGFzc3BocmFzZSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIkZldGNoIHRoZSB2YWx1ZSBvZiBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wX2dldF9xdWlja19wcmludCI6IFsKICAgICAgICAiYm9vbCBzbm1wX2dldF9xdWlja19wcmludCh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCBzdGF0dXMgb2YgcXVpY2tfcHJpbnQiCiAgICBdLAogICAgInNubXBfZ2V0X3ZhbHVlcmV0cmlldmFsIjogWwogICAgICAgICJpbnQgc25tcF9nZXRfdmFsdWVyZXRyaWV2YWwoKSIsCiAgICAgICAgIlJldHVybiB0aGUgbWV0aG9kIGhvdyB0aGUgU05NUCB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCIKICAgIF0sCiAgICAic25tcF9yZWFkX21pYiI6IFsKICAgICAgICAiaW50IHNubXBfcmVhZF9taWIoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJlYWRzIGFuZCBwYXJzZXMgYSBNSUIgZmlsZSBpbnRvIHRoZSBhY3RpdmUgTUlCIHRyZWUuIgogICAgXSwKICAgICJzbm1wX3NldF9lbnVtX3ByaW50IjogWwogICAgICAgICJ2b2lkIHNubXBfc2V0X2VudW1fcHJpbnQoaW50IGVudW1fcHJpbnQpIiwKICAgICAgICAiUmV0dXJuIGFsbCB2YWx1ZXMgdGhhdCBhcmUgZW51bXMgd2l0aCB0aGVpciBlbnVtIHZhbHVlIGluc3RlYWQgb2YgdGhlIHJhdyBpbnRlZ2VyIgogICAgXSwKICAgICJzbm1wX3NldF9vaWRfb3V0cHV0X2Zvcm1hdCI6IFsKICAgICAgICAidm9pZCBzbm1wX3NldF9vaWRfb3V0cHV0X2Zvcm1hdChpbnQgb2lkX2Zvcm1hdCkiLAogICAgICAgICJTZXQgdGhlIE9JRCBvdXRwdXQgZm9ybWF0LiIKICAgIF0sCiAgICAic25tcF9zZXRfcXVpY2tfcHJpbnQiOiBbCiAgICAgICAgInZvaWQgc25tcF9zZXRfcXVpY2tfcHJpbnQoaW50IHF1aWNrX3ByaW50KSIsCiAgICAgICAgIlJldHVybiBhbGwgb2JqZWN0cyBpbmNsdWRpbmcgdGhlaXIgcmVzcGVjdGl2ZSBvYmplY3QgaWQgd2l0aGluZyB0aGUgc3BlY2lmaWVkIG9uZSIKICAgIF0sCiAgICAic25tcF9zZXRfdmFsdWVyZXRyaWV2YWwiOiBbCiAgICAgICAgInZvaWQgc25tcF9zZXRfdmFsdWVyZXRyaWV2YWwoaW50IG1ldGhvZCkiLAogICAgICAgICJTcGVjaWZ5IHRoZSBtZXRob2QgaG93IHRoZSBTTk1QIHZhbHVlcyB3aWxsIGJlIHJldHVybmVkIgogICAgXSwKICAgICJzbm1wZ2V0IjogWwogICAgICAgICJzdHJpbmcgc25tcGdldChzdHJpbmcgaG9zdCwgc3RyaW5nIGNvbW11bml0eSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIkZldGNoIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXBnZXRuZXh0IjogWwogICAgICAgICJzdHJpbmcgc25tcGdldG5leHQoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJGZXRjaCBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wcmVhbHdhbGsiOiBbCiAgICAgICAgImFycmF5IHNubXByZWFsd2FsayhzdHJpbmcgaG9zdCwgc3RyaW5nIGNvbW11bml0eSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIlJldHVybiBhbGwgb2JqZWN0cyBpbmNsdWRpbmcgdGhlaXIgcmVzcGVjdGl2ZSBvYmplY3QgaWQgd2l0aGluZyB0aGUgc3BlY2lmaWVkIG9uZSIKICAgIF0sCiAgICAic25tcHNldCI6IFsKICAgICAgICAiaW50IHNubXBzZXQoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQsIHN0cmluZyB0eXBlLCBtaXhlZCB2YWx1ZSBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIlNldCB0aGUgdmFsdWUgb2YgYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcHdhbGsiOiBbCiAgICAgICAgImFycmF5IHNubXB3YWxrKHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiUmV0dXJuIGFsbCBvYmplY3RzIHVuZGVyIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlkIgogICAgXSwKICAgICJzb2NrZXRfYWNjZXB0IjogWwogICAgICAgICJyZXNvdXJjZSBzb2NrZXRfYWNjZXB0KHJlc291cmNlIHNvY2tldCkiLAogICAgICAgICJBY2NlcHRzIGEgY29ubmVjdGlvbiBvbiB0aGUgbGlzdGVuaW5nIHNvY2tldCBmZCIKICAgIF0sCiAgICAic29ja2V0X2JpbmQiOiBbCiAgICAgICAgImJvb2wgc29ja2V0X2JpbmQocmVzb3VyY2Ugc29ja2V0LCBzdHJpbmcgYWRkciBbLCBpbnQgcG9ydF0pIiwKICAgICAgICAiQmluZHMgYW4gb3BlbiBzb2NrZXQgdG8gYSBsaXN0ZW5pbmcgcG9ydCwgcG9ydCBpcyBvbmx5IHNwZWNpZmllZCBpbiBBRl9JTkVUIGZhbWlseS4iCiAgICBdLAogICAgInNvY2tldF9jbGVhcl9lcnJvciI6IFsKICAgICAgICAidm9pZCBzb2NrZXRfY2xlYXJfZXJyb3IoW3Jlc291cmNlIHNvY2tldF0pIiwKICAgICAgICAiQ2xlYXJzIHRoZSBlcnJvciBvbiB0aGUgc29ja2V0IG9yIHRoZSBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJzb2NrZXRfY2xvc2UiOiBbCiAgICAgICAgInZvaWQgc29ja2V0X2Nsb3NlKHJlc291cmNlIHNvY2tldCkiLAogICAgICAgICJDbG9zZXMgYSBmaWxlIGRlc2NyaXB0b3IiCiAgICBdLAogICAgInNvY2tldF9jb25uZWN0IjogWwogICAgICAgICJib29sIHNvY2tldF9jb25uZWN0KHJlc291cmNlIHNvY2tldCwgc3RyaW5nIGFkZHIgWywgaW50IHBvcnRdKSIsCiAgICAgICAgIk9wZW5zIGEgY29ubmVjdGlvbiB0byBhZGRyOnBvcnQgb24gdGhlIHNvY2tldCBzcGVjaWZpZWQgYnkgc29ja2V0IgogICAgXSwKICAgICJzb2NrZXRfY3JlYXRlIjogWwogICAgICAgICJyZXNvdXJjZSBzb2NrZXRfY3JlYXRlKGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpIiwKICAgICAgICAiQ3JlYXRlcyBhbiBlbmRwb2ludCBmb3IgY29tbXVuaWNhdGlvbiBpbiB0aGUgZG9tYWluIHNwZWNpZmllZCBieSBkb21haW4sIG9mIHR5cGUgc3BlY2lmaWVkIGJ5IHR5cGUiCiAgICBdLAogICAgInNvY2tldF9jcmVhdGVfbGlzdGVuIjogWwogICAgICAgICJyZXNvdXJjZSBzb2NrZXRfY3JlYXRlX2xpc3RlbihpbnQgcG9ydFssIGludCBiYWNrbG9nXSkiLAogICAgICAgICJPcGVucyBhIHNvY2tldCBvbiBwb3J0IHRvIGFjY2VwdCBjb25uZWN0aW9ucyIKICAgIF0sCiAgICAic29ja2V0X2NyZWF0ZV9wYWlyIjogWwogICAgICAgICJib29sIHNvY2tldF9jcmVhdGVfcGFpcihpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBhcnJheSAmZmQpIiwKICAgICAgICAiQ3JlYXRlcyBhIHBhaXIgb2YgaW5kaXN0aW5ndWlzaGFibGUgc29ja2V0cyBhbmQgc3RvcmVzIHRoZW0gaW4gZmRzLiIKICAgIF0sCiAgICAic29ja2V0X2dldF9vcHRpb24iOiBbCiAgICAgICAgIm1peGVkIHNvY2tldF9nZXRfb3B0aW9uKHJlc291cmNlIHNvY2tldCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSkiLAogICAgICAgICJHZXRzIHNvY2tldCBvcHRpb25zIGZvciB0aGUgc29ja2V0IgogICAgXSwKICAgICJzb2NrZXRfZ2V0cGVlcm5hbWUiOiBbCiAgICAgICAgImJvb2wgc29ja2V0X2dldHBlZXJuYW1lKHJlc291cmNlIHNvY2tldCwgc3RyaW5nICZhZGRyWywgaW50ICZwb3J0XSkiLAogICAgICAgICJRdWVyaWVzIHRoZSByZW1vdGUgc2lkZSBvZiB0aGUgZ2l2ZW4gc29ja2V0IHdoaWNoIG1heSBlaXRoZXIgcmVzdWx0IGluIGhvc3QvcG9ydCBvciBpbiBhIFVOSVggZmlsZXN5c3RlbSBwYXRoLCBkZXBlbmRlbnQgb24gaXRzIHR5cGUuIgogICAgXSwKICAgICJzb2NrZXRfZ2V0c29ja25hbWUiOiBbCiAgICAgICAgImJvb2wgc29ja2V0X2dldHNvY2tuYW1lKHJlc291cmNlIHNvY2tldCwgc3RyaW5nICZhZGRyWywgaW50ICZwb3J0XSkiLAogICAgICAgICJRdWVyaWVzIHRoZSByZW1vdGUgc2lkZSBvZiB0aGUgZ2l2ZW4gc29ja2V0IHdoaWNoIG1heSBlaXRoZXIgcmVzdWx0IGluIGhvc3QvcG9ydCBvciBpbiBhIFVOSVggZmlsZXN5c3RlbSBwYXRoLCBkZXBlbmRlbnQgb24gaXRzIHR5cGUuIgogICAgXSwKICAgICJzb2NrZXRfbGFzdF9lcnJvciI6IFsKICAgICAgICAiaW50IHNvY2tldF9sYXN0X2Vycm9yKFtyZXNvdXJjZSBzb2NrZXRdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGxhc3Qgc29ja2V0IGVycm9yIChlaXRoZXIgdGhlIGxhc3QgdXNlZCBvciB0aGUgcHJvdmlkZWQgc29ja2V0IHJlc291cmNlKSIKICAgIF0sCiAgICAic29ja2V0X2xpc3RlbiI6IFsKICAgICAgICAiYm9vbCBzb2NrZXRfbGlzdGVuKHJlc291cmNlIHNvY2tldFssIGludCBiYWNrbG9nXSkiLAogICAgICAgICJTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBhbGxvd2VkIHRvIGJlIHdhaXRlZCBmb3Igb24gdGhlIHNvY2tldCBzcGVjaWZpZWQgYnkgZmQiCiAgICBdLAogICAgInNvY2tldF9yZWFkIjogWwogICAgICAgICJzdHJpbmcgc29ja2V0X3JlYWQocmVzb3VyY2Ugc29ja2V0LCBpbnQgbGVuZ3RoIFssIGludCB0eXBlXSkiLAogICAgICAgICJSZWFkcyBhIG1heGltdW0gb2YgbGVuZ3RoIGJ5dGVzIGZyb20gc29ja2V0IgogICAgXSwKICAgICJzb2NrZXRfcmVjdiI6IFsKICAgICAgICAiaW50IHNvY2tldF9yZWN2KHJlc291cmNlIHNvY2tldCwgc3RyaW5nICZidWYsIGludCBsZW4sIGludCBmbGFncykiLAogICAgICAgICJSZWNlaXZlcyBkYXRhIGZyb20gYSBjb25uZWN0ZWQgc29ja2V0IgogICAgXSwKICAgICJzb2NrZXRfcmVjdmZyb20iOiBbCiAgICAgICAgImludCBzb2NrZXRfcmVjdmZyb20ocmVzb3VyY2Ugc29ja2V0LCBzdHJpbmcgJmJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzLCBzdHJpbmcgJm5hbWUgWywgaW50ICZwb3J0XSkiLAogICAgICAgICJSZWNlaXZlcyBkYXRhIGZyb20gYSBzb2NrZXQsIGNvbm5lY3RlZCBvciBub3QiCiAgICBdLAogICAgInNvY2tldF9zZWxlY3QiOiBbCiAgICAgICAgImludCBzb2NrZXRfc2VsZWN0KGFycmF5ICZyZWFkX2ZkcywgYXJyYXkgJndyaXRlX2ZkcywgYXJyYXkgJmV4Y2VwdF9mZHMsIGludCB0dl9zZWNbLCBpbnQgdHZfdXNlY10pIiwKICAgICAgICAiUnVucyB0aGUgc2VsZWN0KCkgc3lzdGVtIGNhbGwgb24gdGhlIHNldHMgbWVudGlvbmVkIHdpdGggYSB0aW1lb3V0IHNwZWNpZmllZCBieSB0dl9zZWMgYW5kIHR2X3VzZWMiCiAgICBdLAogICAgInNvY2tldF9zZW5kIjogWwogICAgICAgICJpbnQgc29ja2V0X3NlbmQocmVzb3VyY2Ugc29ja2V0LCBzdHJpbmcgYnVmLCBpbnQgbGVuLCBpbnQgZmxhZ3MpIiwKICAgICAgICAiU2VuZHMgZGF0YSB0byBhIGNvbm5lY3RlZCBzb2NrZXQiCiAgICBdLAogICAgInNvY2tldF9zZW5kdG8iOiBbCiAgICAgICAgImludCBzb2NrZXRfc2VuZHRvKHJlc291cmNlIHNvY2tldCwgc3RyaW5nIGJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzLCBzdHJpbmcgYWRkciBbLCBpbnQgcG9ydF0pIiwKICAgICAgICAiU2VuZHMgYSBtZXNzYWdlIHRvIGEgc29ja2V0LCB3aGV0aGVyIGl0IGlzIGNvbm5lY3RlZCBvciBub3QiCiAgICBdLAogICAgInNvY2tldF9zZXRfYmxvY2siOiBbCiAgICAgICAgImJvb2wgc29ja2V0X3NldF9ibG9jayhyZXNvdXJjZSBzb2NrZXQpIiwKICAgICAgICAiU2V0cyBibG9ja2luZyBtb2RlIG9uIGEgc29ja2V0IHJlc291cmNlIgogICAgXSwKICAgICJzb2NrZXRfc2V0X25vbmJsb2NrIjogWwogICAgICAgICJib29sIHNvY2tldF9zZXRfbm9uYmxvY2socmVzb3VyY2Ugc29ja2V0KSIsCiAgICAgICAgIlNldHMgbm9uYmxvY2tpbmcgbW9kZSBvbiBhIHNvY2tldCByZXNvdXJjZSIKICAgIF0sCiAgICAic29ja2V0X3NldF9vcHRpb24iOiBbCiAgICAgICAgImJvb2wgc29ja2V0X3NldF9vcHRpb24ocmVzb3VyY2Ugc29ja2V0LCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBpbnR8YXJyYXkgb3B0dmFsKSIsCiAgICAgICAgIlNldHMgc29ja2V0IG9wdGlvbnMgZm9yIHRoZSBzb2NrZXQiCiAgICBdLAogICAgInNvY2tldF9zaHV0ZG93biI6IFsKICAgICAgICAiYm9vbCBzb2NrZXRfc2h1dGRvd24ocmVzb3VyY2Ugc29ja2V0WywgaW50IGhvd10pIiwKICAgICAgICAiU2h1dHMgZG93biBhIHNvY2tldCBmb3IgcmVjZWl2aW5nLCBzZW5kaW5nLCBvciBib3RoLiIKICAgIF0sCiAgICAic29ja2V0X3N0cmVycm9yIjogWwogICAgICAgICJzdHJpbmcgc29ja2V0X3N0cmVycm9yKGludCBlcnJubykiLAogICAgICAgICJSZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgYW4gZXJyb3IiCiAgICBdLAogICAgInNvY2tldF93cml0ZSI6IFsKICAgICAgICAiaW50IHNvY2tldF93cml0ZShyZXNvdXJjZSBzb2NrZXQsIHN0cmluZyBidWZbLCBpbnQgbGVuZ3RoXSkiLAogICAgICAgICJXcml0ZXMgdGhlIGJ1ZmZlciB0byB0aGUgc29ja2V0IHJlc291cmNlLCBsZW5ndGggaXMgb3B0aW9uYWwiCiAgICBdLAogICAgInNvbGlkX2ZldGNoX3ByZXYiOiBbCiAgICAgICAgImJvb2wgc29saWRfZmV0Y2hfcHJldihyZXNvdXJjZSByZXN1bHRfaWQpIiwKICAgICAgICAiIgogICAgXSwKICAgICJzb3J0IjogWwogICAgICAgICJib29sIHNvcnQoYXJyYXkgJmFycmF5X2FyZyBbLCBpbnQgc29ydF9mbGFnc10pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSIKICAgIF0sCiAgICAic291bmRleCI6IFsKICAgICAgICAic3RyaW5nIHNvdW5kZXgoc3RyaW5nIHN0cikiLAogICAgICAgICJDYWxjdWxhdGUgdGhlIHNvdW5kZXgga2V5IG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJzcGxfYXV0b2xvYWQiOiBbCiAgICAgICAgInZvaWQgc3BsX2F1dG9sb2FkKHN0cmluZyBjbGFzc19uYW1lIFssIHN0cmluZyBmaWxlX2V4dGVuc2lvbnNdKSIsCiAgICAgICAgIkRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIF9fYXV0b2xvYWQoKSIKICAgIF0sCiAgICAic3BsX2F1dG9sb2FkX2NhbGwiOiBbCiAgICAgICAgInZvaWQgc3BsX2F1dG9sb2FkX2NhbGwoc3RyaW5nIGNsYXNzX25hbWUpIiwKICAgICAgICAiVHJ5IGFsbCByZWdpc3RlcmQgYXV0b2xvYWQgZnVuY3Rpb24gdG8gbG9hZCB0aGUgcmVxdWVzdGVkIGNsYXNzIgogICAgXSwKICAgICJzcGxfYXV0b2xvYWRfZXh0ZW5zaW9ucyI6IFsKICAgICAgICAic3RyaW5nIHNwbF9hdXRvbG9hZF9leHRlbnNpb25zKFtzdHJpbmcgZmlsZV9leHRlbnNpb25zXSkiLAogICAgICAgICJSZWdpc3RlciBhbmQgcmV0dXJuIGRlZmF1bHQgZmlsZSBleHRlbnNpb25zIGZvciBzcGxfYXV0b2xvYWQiCiAgICBdLAogICAgInNwbF9hdXRvbG9hZF9mdW5jdGlvbnMiOiBbCiAgICAgICAgImZhbHNlfGFycmF5IHNwbF9hdXRvbG9hZF9mdW5jdGlvbnMoKSIsCiAgICAgICAgIlJldHVybiBhbGwgcmVnaXN0ZXJlZCBfX2F1dG9sb2FkKCkgZnVuY3Rpb25ucyIKICAgIF0sCiAgICAic3BsX2F1dG9sb2FkX3JlZ2lzdGVyIjogWwogICAgICAgICJib29sIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihbbWl4ZWQgYXV0b2xvYWRfZnVuY3Rpb24gPSBcInNwbF9hdXRvbG9hZFwiIFssIHRocm93ID0gdHJ1ZSBbLCBwcmVwZW5kXV1dKSIsCiAgICAgICAgIlJlZ2lzdGVyIGdpdmVuIGZ1bmN0aW9uIGFzIF9fYXV0b2xvYWQoKSBpbXBsZW1lbnRhdGlvbiIKICAgIF0sCiAgICAic3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIiOiBbCiAgICAgICAgImJvb2wgc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIobWl4ZWQgYXV0b2xvYWRfZnVuY3Rpb24pIiwKICAgICAgICAiVW5yZWdpc3RlciBnaXZlbiBmdW5jdGlvbiBhcyBfX2F1dG9sb2FkKCkgaW1wbGVtZW50YXRpb24iCiAgICBdLAogICAgInNwbF9jbGFzc2VzIjogWwogICAgICAgICJhcnJheSBzcGxfY2xhc3NlcygpIiwKICAgICAgICAiUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGFsbCBjbHNzZXMgYW5kIGludGVyZmFjZXMgZGVmaW5lZCBpbiBTUEwiCiAgICBdLAogICAgInNwbF9vYmplY3RfaGFzaCI6IFsKICAgICAgICAic3RyaW5nIHNwbF9vYmplY3RfaGFzaChvYmplY3Qgb2JqKSIsCiAgICAgICAgIlJldHVybiBoYXNoIGlkIGZvciBnaXZlbiBvYmplY3QiCiAgICBdLAogICAgInNwbGl0IjogWwogICAgICAgICJhcnJheSBzcGxpdChzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHN0cmluZyBbLCBpbnQgbGltaXRdKSIsCiAgICAgICAgIlNwbGl0IHN0cmluZyBpbnRvIGFycmF5IGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgIF0sCiAgICAic3BsaXRpIjogWwogICAgICAgICJhcnJheSBzcGxpdGkoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHJpbmcgWywgaW50IGxpbWl0XSkiLAogICAgICAgICJTcGxpdCBzdHJpbmcgaW50byBhcnJheSBieSByZWd1bGFyIGV4cHJlc3Npb24gY2FzZS1pbnNlbnNpdGl2ZSIKICAgIF0sCiAgICAic3ByaW50ZiI6IFsKICAgICAgICAic3RyaW5nIHNwcmludGYoc3RyaW5nIGZvcm1hdCBbLCBtaXhlZCBhcmcxIFssIG1peGVkIC4uLl1dKSIsCiAgICAgICAgIlJldHVybiBhIGZvcm1hdHRlZCBzdHJpbmciCiAgICBdLAogICAgInNxbF9yZWdjYXNlIjogWwogICAgICAgICJzdHJpbmcgc3FsX3JlZ2Nhc2Uoc3RyaW5nIHN0cmluZykiLAogICAgICAgICJNYWtlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaCIKICAgIF0sCiAgICAic3FsaXRlX2FycmF5X3F1ZXJ5IjogWwogICAgICAgICJhcnJheSBzcWxpdGVfYXJyYXlfcXVlcnkocmVzb3VyY2UgZGIsIHN0cmluZyBxdWVyeSBbICwgaW50IHJlc3VsdF90eXBlIFssIGJvb2wgZGVjb2RlX2JpbmFyeV1dKSIsCiAgICAgICAgIkV4ZWN1dGVzIGEgcXVlcnkgYWdhaW5zdCBhIGdpdmVuIGRhdGFiYXNlIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFycmF5cy4iCiAgICBdLAogICAgInNxbGl0ZV9idXN5X3RpbWVvdXQiOiBbCiAgICAgICAgInZvaWQgc3FsaXRlX2J1c3lfdGltZW91dChyZXNvdXJjZSBkYiwgaW50IG1zKSIsCiAgICAgICAgIlNldCBidXN5IHRpbWVvdXQgZHVyYXRpb24uIElmIG1zIDw9IDAsIGFsbCBidXN5IGhhbmRsZXJzIGFyZSBkaXNhYmxlZC4iCiAgICBdLAogICAgInNxbGl0ZV9jaGFuZ2VzIjogWwogICAgICAgICJpbnQgc3FsaXRlX2NoYW5nZXMocmVzb3VyY2UgZGIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgdGhhdCB3ZXJlIGNoYW5nZWQgYnkgdGhlIG1vc3QgcmVjZW50IFNRTCBzdGF0ZW1lbnQuIgogICAgXSwKICAgICJzcWxpdGVfY2xvc2UiOiBbCiAgICAgICAgInZvaWQgc3FsaXRlX2Nsb3NlKHJlc291cmNlIGRiKSIsCiAgICAgICAgIkNsb3NlcyBhbiBvcGVuIHNxbGl0ZSBkYXRhYmFzZS4iCiAgICBdLAogICAgInNxbGl0ZV9jb2x1bW4iOiBbCiAgICAgICAgIm1peGVkIHNxbGl0ZV9jb2x1bW4ocmVzb3VyY2UgcmVzdWx0LCBtaXhlZCBpbmRleF9vcl9uYW1lIFssIGJvb2wgZGVjb2RlX2JpbmFyeV0pIiwKICAgICAgICAiRmV0Y2hlcyBhIGNvbHVtbiBmcm9tIHRoZSBjdXJyZW50IHJvdyBvZiBhIHJlc3VsdCBzZXQuIgogICAgXSwKICAgICJzcWxpdGVfY3JlYXRlX2FnZ3JlZ2F0ZSI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfY3JlYXRlX2FnZ3JlZ2F0ZShyZXNvdXJjZSBkYiwgc3RyaW5nIGZ1bmNuYW1lLCBtaXhlZCBzdGVwX2Z1bmMsIG1peGVkIGZpbmFsaXplX2Z1bmNbLCBsb25nIG51bV9hcmdzXSkiLAogICAgICAgICJSZWdpc3RlcnMgYW4gYWdncmVnYXRlIGZ1bmN0aW9uIGZvciBxdWVyaWVzLiIKICAgIF0sCiAgICAic3FsaXRlX2NyZWF0ZV9mdW5jdGlvbiI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfY3JlYXRlX2Z1bmN0aW9uKHJlc291cmNlIGRiLCBzdHJpbmcgZnVuY25hbWUsIG1peGVkIGNhbGxiYWNrWywgbG9uZyBudW1fYXJnc10pIiwKICAgICAgICAiUmVnaXN0ZXJzIGEgXCJyZWd1bGFyXCIgZnVuY3Rpb24gZm9yIHF1ZXJpZXMuIgogICAgXSwKICAgICJzcWxpdGVfY3VycmVudCI6IFsKICAgICAgICAiYXJyYXkgc3FsaXRlX2N1cnJlbnQocmVzb3VyY2UgcmVzdWx0IFssIGludCByZXN1bHRfdHlwZSBbLCBib29sIGRlY29kZV9iaW5hcnldXSkiLAogICAgICAgICJGZXRjaGVzIHRoZSBjdXJyZW50IHJvdyBmcm9tIGEgcmVzdWx0IHNldCBhcyBhbiBhcnJheS4iCiAgICBdLAogICAgInNxbGl0ZV9lcnJvcl9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyBzcWxpdGVfZXJyb3Jfc3RyaW5nKGludCBlcnJvcl9jb2RlKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgYW4gZXJyb3IgY29kZS4iCiAgICBdLAogICAgInNxbGl0ZV9lc2NhcGVfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgc3FsaXRlX2VzY2FwZV9zdHJpbmcoc3RyaW5nIGl0ZW0pIiwKICAgICAgICAiRXNjYXBlcyBhIHN0cmluZyBmb3IgdXNlIGFzIGEgcXVlcnkgcGFyYW1ldGVyLiIKICAgIF0sCiAgICAic3FsaXRlX2V4ZWMiOiBbCiAgICAgICAgImJvb2xlYW4gc3FsaXRlX2V4ZWMoc3RyaW5nIHF1ZXJ5LCByZXNvdXJjZSBkYlssIHN0cmluZyAmZXJyb3JfbWVzc2FnZV0pIiwKICAgICAgICAiRXhlY3V0ZXMgYSByZXN1bHQtbGVzcyBxdWVyeSBhZ2FpbnN0IGEgZ2l2ZW4gZGF0YWJhc2UiCiAgICBdLAogICAgInNxbGl0ZV9mYWN0b3J5IjogWwogICAgICAgICJvYmplY3Qgc3FsaXRlX2ZhY3Rvcnkoc3RyaW5nIGZpbGVuYW1lIFssIGludCBtb2RlIFssIHN0cmluZyAmZXJyb3JfbWVzc2FnZV1dKSIsCiAgICAgICAgIk9wZW5zIGEgU1FMaXRlIGRhdGFiYXNlIGFuZCBjcmVhdGVzIGFuIG9iamVjdCBmb3IgaXQuIFdpbGwgY3JlYXRlIHRoZSBkYXRhYmFzZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4iCiAgICBdLAogICAgInNxbGl0ZV9mZXRjaF9hbGwiOiBbCiAgICAgICAgImFycmF5IHNxbGl0ZV9mZXRjaF9hbGwocmVzb3VyY2UgcmVzdWx0IFssIGludCByZXN1bHRfdHlwZSBbLCBib29sIGRlY29kZV9iaW5hcnldXSkiLAogICAgICAgICJGZXRjaGVzIGFsbCByb3dzIGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIGFycmF5IG9mIGFycmF5cy4iCiAgICBdLAogICAgInNxbGl0ZV9mZXRjaF9hcnJheSI6IFsKICAgICAgICAiYXJyYXkgc3FsaXRlX2ZldGNoX2FycmF5KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgcmVzdWx0X3R5cGUgWywgYm9vbCBkZWNvZGVfYmluYXJ5XV0pIiwKICAgICAgICAiRmV0Y2hlcyB0aGUgbmV4dCByb3cgZnJvbSBhIHJlc3VsdCBzZXQgYXMgYW4gYXJyYXkuIgogICAgXSwKICAgICJzcWxpdGVfZmV0Y2hfY29sdW1uX3R5cGVzIjogWwogICAgICAgICJyZXNvdXJjZSBzcWxpdGVfZmV0Y2hfY29sdW1uX3R5cGVzKHN0cmluZyB0YWJsZV9uYW1lLCByZXNvdXJjZSBkYiBbLCBpbnQgcmVzdWx0X3R5cGVdKSIsCiAgICAgICAgIlJldHVybiBhbiBhcnJheSBvZiBjb2x1bW4gdHlwZXMgZnJvbSBhIHBhcnRpY3VsYXIgdGFibGUuIgogICAgXSwKICAgICJzcWxpdGVfZmV0Y2hfb2JqZWN0IjogWwogICAgICAgICJvYmplY3Qgc3FsaXRlX2ZldGNoX29iamVjdChyZXNvdXJjZSByZXN1bHQgWywgc3RyaW5nIGNsYXNzX25hbWUgWywgTlVMTHxhcnJheSBjdG9yX3BhcmFtcyBbLCBib29sIGRlY29kZV9iaW5hcnldXV0pIiwKICAgICAgICAiRmV0Y2hlcyB0aGUgbmV4dCByb3cgZnJvbSBhIHJlc3VsdCBzZXQgYXMgYW4gb2JqZWN0LiIKICAgIF0sCiAgICAic3FsaXRlX2ZldGNoX3NpbmdsZSI6IFsKICAgICAgICAic3RyaW5nIHNxbGl0ZV9mZXRjaF9zaW5nbGUocmVzb3VyY2UgcmVzdWx0IFssIGJvb2wgZGVjb2RlX2JpbmFyeV0pIiwKICAgICAgICAiRmV0Y2hlcyB0aGUgZmlyc3QgY29sdW1uIG9mIGEgcmVzdWx0IHNldCBhcyBhIHN0cmluZy4iCiAgICBdLAogICAgInNxbGl0ZV9maWVsZF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgc3FsaXRlX2ZpZWxkX25hbWUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfaW5kZXgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQgb2YgYSByZXN1bHQgc2V0LiIKICAgIF0sCiAgICAic3FsaXRlX2hhc19wcmV2IjogWwogICAgICAgICJib29sIHNxbGl0ZV9oYXNfcHJldihyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiKiBSZXR1cm5zIHdoZXRoZXIgYSBwcmV2aW91cyByb3cgaXMgYXZhaWxhYmxlLiIKICAgIF0sCiAgICAic3FsaXRlX2tleSI6IFsKICAgICAgICAiaW50IHNxbGl0ZV9rZXkocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCByb3cgaW5kZXggb2YgYSBidWZmZXJlZCByZXN1bHQuIgogICAgXSwKICAgICJzcWxpdGVfbGFzdF9lcnJvciI6IFsKICAgICAgICAiaW50IHNxbGl0ZV9sYXN0X2Vycm9yKHJlc291cmNlIGRiKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVycm9yIGNvZGUgb2YgdGhlIGxhc3QgZXJyb3IgZm9yIGEgZGF0YWJhc2UuIgogICAgXSwKICAgICJzcWxpdGVfbGFzdF9pbnNlcnRfcm93aWQiOiBbCiAgICAgICAgImludCBzcWxpdGVfbGFzdF9pbnNlcnRfcm93aWQocmVzb3VyY2UgZGIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcm93aWQgb2YgdGhlIG1vc3QgcmVjZW50bHkgaW5zZXJ0ZWQgcm93LiIKICAgIF0sCiAgICAic3FsaXRlX2xpYmVuY29kaW5nIjogWwogICAgICAgICJzdHJpbmcgc3FsaXRlX2xpYmVuY29kaW5nKCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbmNvZGluZyAoaXNvODg1OSBvciBVVEYtOCkgb2YgdGhlIGxpbmtlZCBTUUxpdGUgbGlicmFyeS4iCiAgICBdLAogICAgInNxbGl0ZV9saWJ2ZXJzaW9uIjogWwogICAgICAgICJzdHJpbmcgc3FsaXRlX2xpYnZlcnNpb24oKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIGxpbmtlZCBTUUxpdGUgbGlicmFyeS4iCiAgICBdLAogICAgInNxbGl0ZV9uZXh0IjogWwogICAgICAgICJib29sIHNxbGl0ZV9uZXh0KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJTZWVrIHRvIHRoZSBuZXh0IHJvdyBudW1iZXIgb2YgYSByZXN1bHQgc2V0LiIKICAgIF0sCiAgICAic3FsaXRlX251bV9maWVsZHMiOiBbCiAgICAgICAgImludCBzcWxpdGVfbnVtX2ZpZWxkcyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiBhIHJlc3VsdCBzZXQuIgogICAgXSwKICAgICJzcWxpdGVfbnVtX3Jvd3MiOiBbCiAgICAgICAgImludCBzcWxpdGVfbnVtX3Jvd3MocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGluIGEgYnVmZmVyZWQgcmVzdWx0IHNldC4iCiAgICBdLAogICAgInNxbGl0ZV9vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBzcWxpdGVfb3BlbihzdHJpbmcgZmlsZW5hbWUgWywgaW50IG1vZGUgWywgc3RyaW5nICZlcnJvcl9tZXNzYWdlXV0pIiwKICAgICAgICAiT3BlbnMgYSBTUUxpdGUgZGF0YWJhc2UuIFdpbGwgY3JlYXRlIHRoZSBkYXRhYmFzZSBpZiBpdCBkb2VzIG5vdCBleGlzdC4iCiAgICBdLAogICAgInNxbGl0ZV9wb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2Ugc3FsaXRlX3BvcGVuKHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgbW9kZSBbLCBzdHJpbmcgJmVycm9yX21lc3NhZ2VdXSkiLAogICAgICAgICJPcGVucyBhIHBlcnNpc3RlbnQgaGFuZGxlIHRvIGEgU1FMaXRlIGRhdGFiYXNlLiBXaWxsIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaWYgaXQgZG9lcyBub3QgZXhpc3QuIgogICAgXSwKICAgICJzcWxpdGVfcHJldiI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfcHJldihyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiKiBTZWVrIHRvIHRoZSBwcmV2aW91cyByb3cgbnVtYmVyIG9mIGEgcmVzdWx0IHNldC4iCiAgICBdLAogICAgInNxbGl0ZV9xdWVyeSI6IFsKICAgICAgICAicmVzb3VyY2Ugc3FsaXRlX3F1ZXJ5KHN0cmluZyBxdWVyeSwgcmVzb3VyY2UgZGIgWywgaW50IHJlc3VsdF90eXBlIFssIHN0cmluZyAmZXJyb3JfbWVzc2FnZV1dKSIsCiAgICAgICAgIkV4ZWN1dGVzIGEgcXVlcnkgYWdhaW5zdCBhIGdpdmVuIGRhdGFiYXNlIGFuZCByZXR1cm5zIGEgcmVzdWx0IGhhbmRsZS4iCiAgICBdLAogICAgInNxbGl0ZV9yZXdpbmQiOiBbCiAgICAgICAgImJvb2wgc3FsaXRlX3Jld2luZChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiU2VlayB0byB0aGUgZmlyc3Qgcm93IG51bWJlciBvZiBhIGJ1ZmZlcmVkIHJlc3VsdCBzZXQuIgogICAgXSwKICAgICJzcWxpdGVfc2VlayI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfc2VlayhyZXNvdXJjZSByZXN1bHQsIGludCByb3cpIiwKICAgICAgICAiU2VlayB0byBhIHBhcnRpY3VsYXIgcm93IG51bWJlciBvZiBhIGJ1ZmZlcmVkIHJlc3VsdCBzZXQuIgogICAgXSwKICAgICJzcWxpdGVfc2luZ2xlX3F1ZXJ5IjogWwogICAgICAgICJhcnJheSBzcWxpdGVfc2luZ2xlX3F1ZXJ5KHJlc291cmNlIGRiLCBzdHJpbmcgcXVlcnkgWywgYm9vbCBmaXJzdF9yb3dfb25seSBbLCBib29sIGRlY29kZV9iaW5hcnldXSkiLAogICAgICAgICJFeGVjdXRlcyBhIHF1ZXJ5IGFuZCByZXR1cm5zIGVpdGhlciBhbiBhcnJheSBmb3Igb25lIHNpbmdsZSBjb2x1bW4gb3IgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCByb3cuIgogICAgXSwKICAgICJzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnkiOiBbCiAgICAgICAgInN0cmluZyBzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnkoc3RyaW5nIGRhdGEpIiwKICAgICAgICAiRGVjb2RlIGJpbmFyeSBlbmNvZGluZyBvbiBhIHN0cmluZyBwYXJhbWV0ZXIgcGFzc2VkIHRvIGFuIFVERi4iCiAgICBdLAogICAgInNxbGl0ZV91ZGZfZW5jb2RlX2JpbmFyeSI6IFsKICAgICAgICAic3RyaW5nIHNxbGl0ZV91ZGZfZW5jb2RlX2JpbmFyeShzdHJpbmcgZGF0YSkiLAogICAgICAgICJBcHBseSBiaW5hcnkgZW5jb2RpbmcgKGlmIHJlcXVpcmVkKSB0byBhIHN0cmluZyB0byByZXR1cm4gZnJvbSBhbiBVREYuIgogICAgXSwKICAgICJzcWxpdGVfdW5idWZmZXJlZF9xdWVyeSI6IFsKICAgICAgICAicmVzb3VyY2Ugc3FsaXRlX3VuYnVmZmVyZWRfcXVlcnkoc3RyaW5nIHF1ZXJ5LCByZXNvdXJjZSBkYiBbICwgaW50IHJlc3VsdF90eXBlIFssIHN0cmluZyAmZXJyb3JfbWVzc2FnZV1dKSIsCiAgICAgICAgIkV4ZWN1dGVzIGEgcXVlcnkgdGhhdCBkb2VzIG5vdCBwcmVmZXRjaCBhbmQgYnVmZmVyIGFsbCBkYXRhLiIKICAgIF0sCiAgICAic3FsaXRlX3ZhbGlkIjogWwogICAgICAgICJib29sIHNxbGl0ZV92YWxpZChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJucyB3aGV0aGVyIG1vcmUgcm93cyBhcmUgYXZhaWxhYmxlLiIKICAgIF0sCiAgICAic3FydCI6IFsKICAgICAgICAiZmxvYXQgc3FydChmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIG51bWJlciIKICAgIF0sCiAgICAic3JhbmQiOiBbCiAgICAgICAgInZvaWQgc3JhbmQoW2ludCBzZWVkXSkiLAogICAgICAgICJTZWVkcyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciIKICAgIF0sCiAgICAic3NjYW5mIjogWwogICAgICAgICJtaXhlZCBzc2NhbmYoc3RyaW5nIHN0ciwgc3RyaW5nIGZvcm1hdCBbLCBzdHJpbmcgLi4uXSkiLAogICAgICAgICJJbXBsZW1lbnRzIGFuIEFOU0kgQyBjb21wYXRpYmxlIHNzY2FuZiIKICAgIF0sCiAgICAic3RhdCI6IFsKICAgICAgICAiYXJyYXkgc3RhdChzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiR2l2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGZpbGUiCiAgICBdLAogICAgInN0cl9nZXRjc3YiOiBbCiAgICAgICAgImFycmF5IHN0cl9nZXRjc3Yoc3RyaW5nIGlucHV0Wywgc3RyaW5nIGRlbGltaXRlclssIHN0cmluZyBlbmNsb3N1cmVbLCBzdHJpbmcgZXNjYXBlXV1dKSIsCiAgICAgICAgIlBhcnNlIGEgQ1NWIHN0cmluZyBpbnRvIGFuIGFycmF5IgogICAgXSwKICAgICJzdHJfaXJlcGxhY2UiOiBbCiAgICAgICAgIm1peGVkIHN0cl9pcmVwbGFjZShtaXhlZCBzZWFyY2gsIG1peGVkIHJlcGxhY2UsIG1peGVkIHN1YmplY3QgWywgaW50ICZyZXBsYWNlX2NvdW50XSkiLAogICAgICAgICJSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2Ygc2VhcmNoIGluIGhheXN0YWNrIHdpdGggcmVwbGFjZSAvIGNhc2UtaW5zZW5zaXRpdmUiCiAgICBdLAogICAgInN0cl9wYWQiOiBbCiAgICAgICAgInN0cmluZyBzdHJfcGFkKHN0cmluZyBpbnB1dCwgaW50IHBhZF9sZW5ndGggWywgc3RyaW5nIHBhZF9zdHJpbmcgWywgaW50IHBhZF90eXBlXV0pIiwKICAgICAgICAiUmV0dXJucyBpbnB1dCBzdHJpbmcgcGFkZGVkIG9uIHRoZSBsZWZ0IG9yIHJpZ2h0IHRvIHNwZWNpZmllZCBsZW5ndGggd2l0aCBwYWRfc3RyaW5nIgogICAgXSwKICAgICJzdHJfcmVwZWF0IjogWwogICAgICAgICJzdHJpbmcgc3RyX3JlcGVhdChzdHJpbmcgaW5wdXQsIGludCBtdWx0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGlucHV0IHN0cmluZyByZXBlYXQgbXVsdCB0aW1lcyIKICAgIF0sCiAgICAic3RyX3JlcGxhY2UiOiBbCiAgICAgICAgIm1peGVkIHN0cl9yZXBsYWNlKG1peGVkIHNlYXJjaCwgbWl4ZWQgcmVwbGFjZSwgbWl4ZWQgc3ViamVjdCBbLCBpbnQgJnJlcGxhY2VfY291bnRdKSIsCiAgICAgICAgIlJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBzZWFyY2ggaW4gaGF5c3RhY2sgd2l0aCByZXBsYWNlIgogICAgXSwKICAgICJzdHJfcm90MTMiOiBbCiAgICAgICAgInN0cmluZyBzdHJfcm90MTMoc3RyaW5nIHN0cikiLAogICAgICAgICJQZXJmb3JtIHRoZSByb3QxMyB0cmFuc2Zvcm0gb24gYSBzdHJpbmciCiAgICBdLAogICAgInN0cl9zaHVmZmxlIjogWwogICAgICAgICJ2b2lkIHN0cl9zaHVmZmxlKHN0cmluZyBzdHIpIiwKICAgICAgICAiU2h1ZmZsZXMgc3RyaW5nLiBPbmUgcGVybXV0YXRpb24gb2YgYWxsIHBvc3NpYmxlIGlzIGNyZWF0ZWQiCiAgICBdLAogICAgInN0cl9zcGxpdCI6IFsKICAgICAgICAiYXJyYXkgc3RyX3NwbGl0KHN0cmluZyBzdHIgWywgaW50IHNwbGl0X2xlbmd0aF0pIiwKICAgICAgICAiQ29udmVydCBhIHN0cmluZyB0byBhbiBhcnJheS4gSWYgc3BsaXRfbGVuZ3RoIGlzIHNwZWNpZmllZCwgYnJlYWsgdGhlIHN0cmluZyBkb3duIGludG8gY2h1bmtzIGVhY2ggc3BsaXRfbGVuZ3RoIGNoYXJhY3RlcnMgbG9uZy4iCiAgICBdLAogICAgInN0cl93b3JkX2NvdW50IjogWwogICAgICAgICJtaXhlZCBzdHJfd29yZF9jb3VudChzdHJpbmcgc3RyLCBbaW50IGZvcm1hdCBbLCBzdHJpbmcgY2hhcmxpc3RdXSkiLAogICAgICAgICJDb3VudHMgdGhlIG51bWJlciBvZiB3b3JkcyBpbnNpZGUgYSBzdHJpbmcuIElmIGZvcm1hdCBvZiAxIGlzIHNwZWNpZmllZCwgICAgIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSB3b3JkcyAgICAgZm91bmQgaW5zaWRlIHRoZSBzdHJpbmcuIElmIGZvcm1hdCBvZiAyIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZnVuY3Rpb24gICAgIHdpbGwgcmV0dXJuIGFuIGFzc29jaWF0ZWQgYXJyYXkgd2hlcmUgdGhlIHBvc2l0aW9uIG9mIHRoZSB3b3JkIGlzIHRoZSBrZXkgICAgIGFuZCB0aGUgd29yZCBpdHNlbGYgaXMgdGhlIHZhbHVlLiAgICAgICAgICBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiwgJ3dvcmQnIGlzIGRlZmluZWQgYXMgYSBsb2NhbGUgZGVwZW5kZW50ICAgICBzdHJpbmcgY29udGFpbmluZyBhbHBoYWJldGljIGNoYXJhY3RlcnMsIHdoaWNoIGFsc28gbWF5IGNvbnRhaW4sIGJ1dCBub3Qgc3RhcnQgICAgIHdpdGggXCInXCIgYW5kIFwiLVwiIGNoYXJhY3RlcnMuIgogICAgXSwKICAgICJzdHJjYXNlY21wIjogWwogICAgICAgICJpbnQgc3RyY2FzZWNtcChzdHJpbmcgc3RyMSwgc3RyaW5nIHN0cjIpIiwKICAgICAgICAiQmluYXJ5IHNhZmUgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyaXNvbiIKICAgIF0sCiAgICAic3RyY2hyIjogWwogICAgICAgICJzdHJpbmcgc3RyY2hyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSkiLAogICAgICAgICJBbiBhbGlhcyBmb3Igc3Ryc3RyIgogICAgXSwKICAgICJzdHJjbXAiOiBbCiAgICAgICAgImludCBzdHJjbXAoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyKSIsCiAgICAgICAgIkJpbmFyeSBzYWZlIHN0cmluZyBjb21wYXJpc29uIgogICAgXSwKICAgICJzdHJjb2xsIjogWwogICAgICAgICJpbnQgc3RyY29sbChzdHJpbmcgc3RyMSwgc3RyaW5nIHN0cjIpIiwKICAgICAgICAiQ29tcGFyZXMgdHdvIHN0cmluZ3MgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlIgogICAgXSwKICAgICJzdHJjc3BuIjogWwogICAgICAgICJpbnQgc3RyY3NwbihzdHJpbmcgc3RyLCBzdHJpbmcgbWFzayBbLCBzdGFydCBbLCBsZW5dXSkiLAogICAgICAgICJGaW5kcyBsZW5ndGggb2YgaW5pdGlhbCBzZWdtZW50IGNvbnNpc3RpbmcgZW50aXJlbHkgb2YgY2hhcmFjdGVycyBub3QgZm91bmQgaW4gbWFzay4gSWYgc3RhcnQgb3IvYW5kIGxlbmd0aCBpcyBwcm92aWRlIHdvcmtzIGxpa2Ugc3RyY3NwbihzdWJzdHIoJHMsJHN0YXJ0LCRsZW4pLCRiYWRfY2hhcnMpIgogICAgXSwKICAgICJzdHJlYW1fYnVja2V0X2FwcGVuZCI6IFsKICAgICAgICAidm9pZCBzdHJlYW1fYnVja2V0X2FwcGVuZChyZXNvdXJjZSBicmlnYWRlLCByZXNvdXJjZSBidWNrZXQpIiwKICAgICAgICAiQXBwZW5kIGJ1Y2tldCB0byBicmlnYWRlIgogICAgXSwKICAgICJzdHJlYW1fYnVja2V0X21ha2Vfd3JpdGVhYmxlIjogWwogICAgICAgICJvYmplY3Qgc3RyZWFtX2J1Y2tldF9tYWtlX3dyaXRlYWJsZShyZXNvdXJjZSBicmlnYWRlKSIsCiAgICAgICAgIlJldHVybiBhIGJ1Y2tldCBvYmplY3QgZnJvbSB0aGUgYnJpZ2FkZSBmb3Igb3BlcmF0aW5nIG9uIgogICAgXSwKICAgICJzdHJlYW1fYnVja2V0X25ldyI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX2J1Y2tldF9uZXcocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgYnVmZmVyKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBidWNrZXQgZm9yIHVzZSBvbiB0aGUgY3VycmVudCBzdHJlYW0iCiAgICBdLAogICAgInN0cmVhbV9idWNrZXRfcHJlcGVuZCI6IFsKICAgICAgICAidm9pZCBzdHJlYW1fYnVja2V0X3ByZXBlbmQocmVzb3VyY2UgYnJpZ2FkZSwgcmVzb3VyY2UgYnVja2V0KSIsCiAgICAgICAgIlByZXBlbmQgYnVja2V0IHRvIGJyaWdhZGUiCiAgICBdLAogICAgInN0cmVhbV9jb250ZXh0X2NyZWF0ZSI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX2NvbnRleHRfY3JlYXRlKFthcnJheSBvcHRpb25zWywgYXJyYXkgcGFyYW1zXV0pIiwKICAgICAgICAiQ3JlYXRlIGEgZmlsZSBjb250ZXh0IGFuZCBvcHRpb25hbGx5IHNldCBwYXJhbWV0ZXJzIgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9nZXRfZGVmYXVsdCI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHQoW2FycmF5IG9wdGlvbnNdKSIsCiAgICAgICAgIkdldCBhIGhhbmRsZSBvbiB0aGUgZGVmYXVsdCBmaWxlL3N0cmVhbSBjb250ZXh0IGFuZCBvcHRpb25hbGx5IHNldCBwYXJhbWV0ZXJzIgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9nZXRfb3B0aW9ucyI6IFsKICAgICAgICAiYXJyYXkgc3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMocmVzb3VyY2UgY29udGV4dHxyZXNvdXJjZSBzdHJlYW0pIiwKICAgICAgICAiUmV0cmlldmUgb3B0aW9ucyBmb3IgYSBzdHJlYW0vd3JhcHBlci9jb250ZXh0IgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zIjogWwogICAgICAgICJhcnJheSBzdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zKHJlc291cmNlIGNvbnRleHR8cmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIkdldCBwYXJhbWV0ZXJzIG9mIGEgZmlsZSBjb250ZXh0IgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9zZXRfZGVmYXVsdCI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX2NvbnRleHRfc2V0X2RlZmF1bHQoYXJyYXkgb3B0aW9ucykiLAogICAgICAgICJTZXQgZGVmYXVsdCBmaWxlL3N0cmVhbSBjb250ZXh0LCByZXR1cm5zIHRoZSBjb250ZXh0IGFzIGEgcmVzb3VyY2UiCiAgICBdLAogICAgInN0cmVhbV9jb250ZXh0X3NldF9vcHRpb24iOiBbCiAgICAgICAgImJvb2wgc3RyZWFtX2NvbnRleHRfc2V0X29wdGlvbihyZXNvdXJjZSBjb250ZXh0fHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIHdyYXBwZXJuYW1lLCBzdHJpbmcgb3B0aW9ubmFtZSwgbWl4ZWQgdmFsdWUpIiwKICAgICAgICAiU2V0IGFuIG9wdGlvbiBmb3IgYSB3cmFwcGVyIgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zIjogWwogICAgICAgICJib29sIHN0cmVhbV9jb250ZXh0X3NldF9wYXJhbXMocmVzb3VyY2UgY29udGV4dHxyZXNvdXJjZSBzdHJlYW0sIGFycmF5IG9wdGlvbnMpIiwKICAgICAgICAiU2V0IHBhcmFtZXRlcnMgZm9yIGEgZmlsZSBjb250ZXh0IgogICAgXSwKICAgICJzdHJlYW1fY29weV90b19zdHJlYW0iOiBbCiAgICAgICAgImxvbmcgc3RyZWFtX2NvcHlfdG9fc3RyZWFtKHJlc291cmNlIHNvdXJjZSwgcmVzb3VyY2UgZGVzdCBbLCBsb25nIG1heGxlbiBbLCBsb25nIHBvc11dKSIsCiAgICAgICAgIlJlYWRzIHVwIHRvIG1heGxlbiBieXRlcyBmcm9tIHNvdXJjZSBzdHJlYW0gYW5kIHdyaXRlcyB0aGVtIHRvIGRlc3Qgc3RyZWFtLiIKICAgIF0sCiAgICAic3RyZWFtX2ZpbHRlcl9hcHBlbmQiOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9maWx0ZXJfYXBwZW5kKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGZpbHRlcm5hbWVbLCBpbnQgcmVhZF93cml0ZVssIHN0cmluZyBmaWx0ZXJwYXJhbXNdXSkiLAogICAgICAgICJBcHBlbmQgYSBmaWx0ZXIgdG8gYSBzdHJlYW0iCiAgICBdLAogICAgInN0cmVhbV9maWx0ZXJfcHJlcGVuZCI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX2ZpbHRlcl9wcmVwZW5kKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGZpbHRlcm5hbWVbLCBpbnQgcmVhZF93cml0ZVssIHN0cmluZyBmaWx0ZXJwYXJhbXNdXSkiLAogICAgICAgICJQcmVwZW5kIGEgZmlsdGVyIHRvIGEgc3RyZWFtIgogICAgXSwKICAgICJzdHJlYW1fZmlsdGVyX3JlZ2lzdGVyIjogWwogICAgICAgICJib29sIHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXIoc3RyaW5nIGZpbHRlcm5hbWUsIHN0cmluZyBjbGFzc25hbWUpIiwKICAgICAgICAiUmVnaXN0ZXJzIGEgY3VzdG9tIGZpbHRlciBoYW5kbGVyIGNsYXNzIgogICAgXSwKICAgICJzdHJlYW1fZmlsdGVyX3JlbW92ZSI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fZmlsdGVyX3JlbW92ZShyZXNvdXJjZSBzdHJlYW1fZmlsdGVyKSIsCiAgICAgICAgIkZsdXNoZXMgYW55IGRhdGEgaW4gdGhlIGZpbHRlcidzIGludGVybmFsIGJ1ZmZlciwgcmVtb3ZlcyBpdCBmcm9tIHRoZSBjaGFpbiwgYW5kIGZyZWVzIHRoZSByZXNvdXJjZSIKICAgIF0sCiAgICAic3RyZWFtX2dldF9jb250ZW50cyI6IFsKICAgICAgICAic3RyaW5nIHN0cmVhbV9nZXRfY29udGVudHMocmVzb3VyY2Ugc291cmNlIFssIGxvbmcgbWF4bGVuIFssIGxvbmcgb2Zmc2V0XV0pIiwKICAgICAgICAiUmVhZHMgYWxsIHJlbWFpbmluZyBieXRlcyAob3IgdXAgdG8gbWF4bGVuIGJ5dGVzKSBmcm9tIGEgc3RyZWFtIGFuZCByZXR1cm5zIHRoZW0gYXMgYSBzdHJpbmcuIgogICAgXSwKICAgICJzdHJlYW1fZ2V0X2ZpbHRlcnMiOiBbCiAgICAgICAgImFycmF5IHN0cmVhbV9nZXRfZmlsdGVycyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYSBsaXN0IG9mIHJlZ2lzdGVyZWQgZmlsdGVycyIKICAgIF0sCiAgICAic3RyZWFtX2dldF9saW5lIjogWwogICAgICAgICJzdHJpbmcgc3RyZWFtX2dldF9saW5lKHJlc291cmNlIHN0cmVhbSwgaW50IG1heGxlbiBbLCBzdHJpbmcgZW5kaW5nXSkiLAogICAgICAgICJSZWFkIHVwIHRvIG1heGxlbiBieXRlcyBmcm9tIGEgc3RyZWFtIG9yIHVudGlsIHRoZSBlbmRpbmcgc3RyaW5nIGlzIGZvdW5kIgogICAgXSwKICAgICJzdHJlYW1fZ2V0X21ldGFfZGF0YSI6IFsKICAgICAgICAiYXJyYXkgc3RyZWFtX2dldF9tZXRhX2RhdGEocmVzb3VyY2UgZnApIiwKICAgICAgICAiUmV0cmlldmVzIGhlYWRlci9tZXRhIGRhdGEgZnJvbSBzdHJlYW1zL2ZpbGUgcG9pbnRlcnMiCiAgICBdLAogICAgInN0cmVhbV9nZXRfdHJhbnNwb3J0cyI6IFsKICAgICAgICAiYXJyYXkgc3RyZWFtX2dldF90cmFuc3BvcnRzKCkiLAogICAgICAgICJSZXRyaWV2ZXMgbGlzdCBvZiByZWdpc3RlcmVkIHNvY2tldCB0cmFuc3BvcnRzIgogICAgXSwKICAgICJzdHJlYW1fZ2V0X3dyYXBwZXJzIjogWwogICAgICAgICJhcnJheSBzdHJlYW1fZ2V0X3dyYXBwZXJzKCkiLAogICAgICAgICJSZXRyaWV2ZXMgbGlzdCBvZiByZWdpc3RlcmVkIHN0cmVhbSB3cmFwcGVycyIKICAgIF0sCiAgICAic3RyZWFtX2lzX2xvY2FsIjogWwogICAgICAgICJib29sIHN0cmVhbV9pc19sb2NhbChyZXNvdXJjZSBzdHJlYW18c3RyaW5nIHVybCkiLAogICAgICAgICIiCiAgICBdLAogICAgInN0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aCI6IFsKICAgICAgICAic3RyaW5nIHN0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aChzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiRGV0ZXJtaW5lIHdoYXQgZmlsZSB3aWxsIGJlIG9wZW5lZCBieSBjYWxscyB0byBmb3BlbigpIHdpdGggYSByZWxhdGl2ZSBwYXRoIgogICAgXSwKICAgICJzdHJlYW1fc2VsZWN0IjogWwogICAgICAgICJpbnQgc3RyZWFtX3NlbGVjdChhcnJheSAmcmVhZF9zdHJlYW1zLCBhcnJheSAmd3JpdGVfc3RyZWFtcywgYXJyYXkgJmV4Y2VwdF9zdHJlYW1zLCBpbnQgdHZfc2VjWywgaW50IHR2X3VzZWNdKSIsCiAgICAgICAgIlJ1bnMgdGhlIHNlbGVjdCgpIHN5c3RlbSBjYWxsIG9uIHRoZSBzZXRzIG9mIHN0cmVhbXMgd2l0aCBhIHRpbWVvdXQgc3BlY2lmaWVkIGJ5IHR2X3NlYyBhbmQgdHZfdXNlYyIKICAgIF0sCiAgICAic3RyZWFtX3NldF9ibG9ja2luZyI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fc2V0X2Jsb2NraW5nKHJlc291cmNlIHNvY2tldCwgaW50IG1vZGUpIiwKICAgICAgICAiU2V0IGJsb2NraW5nL25vbi1ibG9ja2luZyBtb2RlIG9uIGEgc29ja2V0IG9yIHN0cmVhbSIKICAgIF0sCiAgICAic3RyZWFtX3NldF90aW1lb3V0IjogWwogICAgICAgICJib29sIHN0cmVhbV9zZXRfdGltZW91dChyZXNvdXJjZSBzdHJlYW0sIGludCBzZWNvbmRzIFssIGludCBtaWNyb3NlY29uZHNdKSIsCiAgICAgICAgIlNldCB0aW1lb3V0IG9uIHN0cmVhbSByZWFkIHRvIHNlY29uZHMgKyBtaWNyb3Nlb25kcyIKICAgIF0sCiAgICAic3RyZWFtX3NldF93cml0ZV9idWZmZXIiOiBbCiAgICAgICAgImludCBzdHJlYW1fc2V0X3dyaXRlX2J1ZmZlcihyZXNvdXJjZSBmcCwgaW50IGJ1ZmZlcikiLAogICAgICAgICJTZXQgZmlsZSB3cml0ZSBidWZmZXIiCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfYWNjZXB0IjogWwogICAgICAgICJyZXNvdXJjZSBzdHJlYW1fc29ja2V0X2FjY2VwdChyZXNvdXJjZSBzZXJ2ZXJzdHJlYW0sIFsgZG91YmxlIHRpbWVvdXQgWywgc3RyaW5nICZwZWVybmFtZSBdXSkiLAogICAgICAgICJBY2NlcHQgYSBjbGllbnQgY29ubmVjdGlvbiBmcm9tIGEgc2VydmVyIHNvY2tldCIKICAgIF0sCiAgICAic3RyZWFtX3NvY2tldF9jbGllbnQiOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9zb2NrZXRfY2xpZW50KHN0cmluZyByZW1vdGVhZGRyZXNzIFssIGxvbmcgJmVycmNvZGUgWywgc3RyaW5nICZlcnJzdHJpbmcgWywgZG91YmxlIHRpbWVvdXQgWywgbG9uZyBmbGFncyBbLCByZXNvdXJjZSBjb250ZXh0XV1dXV0pIiwKICAgICAgICAiT3BlbiBhIGNsaWVudCBjb25uZWN0aW9uIHRvIGEgcmVtb3RlIGFkZHJlc3MiCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfZW5hYmxlX2NyeXB0byI6IFsKICAgICAgICAiaW50IHN0cmVhbV9zb2NrZXRfZW5hYmxlX2NyeXB0byhyZXNvdXJjZSBzdHJlYW0sIGJvb2wgZW5hYmxlIFssIGludCBjcnlwdG9raW5kIFssIHJlc291cmNlIHNlc3Npb25zdHJlYW1dXSkiLAogICAgICAgICJFbmFibGUgb3IgZGlzYWJsZSBhIHNwZWNpZmljIGtpbmQgb2YgY3J5cHRvIG9uIHRoZSBzdHJlYW0iCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfZ2V0X25hbWUiOiBbCiAgICAgICAgInN0cmluZyBzdHJlYW1fc29ja2V0X2dldF9uYW1lKHJlc291cmNlIHN0cmVhbSwgYm9vbCB3YW50X3BlZXIpIiwKICAgICAgICAiUmV0dXJucyBlaXRoZXIgdGhlIGxvY2FsbHkgYm91bmQgb3IgcmVtb3RlIG5hbWUgZm9yIGEgc29ja2V0IHN0cmVhbSIKICAgIF0sCiAgICAic3RyZWFtX3NvY2tldF9wYWlyIjogWwogICAgICAgICJhcnJheSBzdHJlYW1fc29ja2V0X3BhaXIoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkiLAogICAgICAgICJDcmVhdGVzIGEgcGFpciBvZiBjb25uZWN0ZWQsIGluZGlzdGluZ3Vpc2hhYmxlIHNvY2tldCBzdHJlYW1zIgogICAgXSwKICAgICJzdHJlYW1fc29ja2V0X3JlY3Zmcm9tIjogWwogICAgICAgICJzdHJpbmcgc3RyZWFtX3NvY2tldF9yZWN2ZnJvbShyZXNvdXJjZSBzdHJlYW0sIGxvbmcgYW1vdW50IFssIGxvbmcgZmxhZ3MgWywgc3RyaW5nICZyZW1vdGVfYWRkcl1dKSIsCiAgICAgICAgIlJlY2VpdmVzIGRhdGEgZnJvbSBhIHNvY2tldCBzdHJlYW0iCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfc2VuZHRvIjogWwogICAgICAgICJsb25nIHN0cmVhbV9zb2NrZXRfc2VuZHRvKHJlc291Y2Ugc3RyZWFtLCBzdHJpbmcgZGF0YSBbLCBsb25nIGZsYWdzIFssIHN0cmluZyB0YXJnZXRfYWRkcl1dKSIsCiAgICAgICAgIlNlbmQgZGF0YSB0byBhIHNvY2tldCBzdHJlYW0uICBJZiB0YXJnZXRfYWRkciBpcyBzcGVjaWZpZWQgaXQgbXVzdCBiZSBpbiBkb3R0ZWQgcXVhZCAob3IgW2lwdjZdKSBmb3JtYXQiCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfc2VydmVyIjogWwogICAgICAgICJyZXNvdXJjZSBzdHJlYW1fc29ja2V0X3NlcnZlcihzdHJpbmcgbG9jYWxhZGRyZXNzIFssIGxvbmcgJmVycmNvZGUgWywgc3RyaW5nICZlcnJzdHJpbmcgWywgbG9uZyBmbGFncyBbLCByZXNvdXJjZSBjb250ZXh0XV1dXSkiLAogICAgICAgICJDcmVhdGUgYSBzZXJ2ZXIgc29ja2V0IGJvdW5kIHRvIGxvY2FsYWRkcmVzcyIKICAgIF0sCiAgICAic3RyZWFtX3NvY2tldF9zaHV0ZG93biI6IFsKICAgICAgICAiaW50IHN0cmVhbV9zb2NrZXRfc2h1dGRvd24ocmVzb3VyY2Ugc3RyZWFtLCBpbnQgaG93KSIsCiAgICAgICAgImNhdXNlcyBhbGwgb3IgcGFydCBvZiBhIGZ1bGwtZHVwbGV4IGNvbm5lY3Rpb24gb24gdGhlIHNvY2tldCBhc3NvY2lhdGVkICB3aXRoIHN0cmVhbSB0byBiZSBzaHV0IGRvd24uICBJZiBob3cgaXMgU0hVVF9SRCwgIGZ1cnRoZXIgcmVjZXB0aW9ucyB3aWxsICBiZSBkaXNhbGxvd2VkLiBJZiBob3cgaXMgU0hVVF9XUiwgZnVydGhlciB0cmFuc21pc3Npb25zIHdpbGwgYmUgZGlzYWxsb3dlZC4gIElmIGhvdyBpcyBTSFVUX1JEV1IsICBmdXJ0aGVyICByZWNlcHRpb25zIGFuZCB0cmFuc21pc3Npb25zIHdpbGwgYmUgIGRpc2FsbG93ZWQuIgogICAgXSwKICAgICJzdHJlYW1fc3VwcG9ydHNfbG9jayI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fc3VwcG9ydHNfbG9jayhyZXNvdXJjZSBzdHJlYW0pIiwKICAgICAgICAiVGVsbHMgd2hldGhlciB0aGUgc3RyZWFtIHN1cHBvcnRzIGxvY2tpbmcgdGhyb3VnaCBmbG9jaygpLiIKICAgIF0sCiAgICAic3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIiOiBbCiAgICAgICAgImJvb2wgc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXIoc3RyaW5nIHByb3RvY29sLCBzdHJpbmcgY2xhc3NuYW1lWywgaW50ZWdlciBmbGFnc10pIiwKICAgICAgICAiUmVnaXN0ZXJzIGEgY3VzdG9tIFVSTCBwcm90b2NvbCBoYW5kbGVyIGNsYXNzIgogICAgXSwKICAgICJzdHJlYW1fd3JhcHBlcl9yZXN0b3JlIjogWwogICAgICAgICJib29sIHN0cmVhbV93cmFwcGVyX3Jlc3RvcmUoc3RyaW5nIHByb3RvY29sKSIsCiAgICAgICAgIlJlc3RvcmUgdGhlIG9yaWdpbmFsIHByb3RvY29sIGhhbmRsZXIsIG92ZXJyaWRpbmcgaWYgbmVjZXNzYXJ5IgogICAgXSwKICAgICJzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyIjogWwogICAgICAgICJib29sIHN0cmVhbV93cmFwcGVyX3VucmVnaXN0ZXIoc3RyaW5nIHByb3RvY29sKSIsCiAgICAgICAgIlVucmVnaXN0ZXIgYSB3cmFwcGVyIGZvciB0aGUgbGlmZSBvZiB0aGUgY3VycmVudCByZXF1ZXN0LiIKICAgIF0sCiAgICAic3RyZnRpbWUiOiBbCiAgICAgICAgInN0cmluZyBzdHJmdGltZShzdHJpbmcgZm9ybWF0IFssIGludCB0aW1lc3RhbXBdKSIsCiAgICAgICAgIkZvcm1hdCBhIGxvY2FsIHRpbWUvZGF0ZSBhY2NvcmRpbmcgdG8gbG9jYWxlIHNldHRpbmdzIgogICAgXSwKICAgICJzdHJpcF90YWdzIjogWwogICAgICAgICJzdHJpbmcgc3RyaXBfdGFncyhzdHJpbmcgc3RyIFssIHN0cmluZyBhbGxvd2FibGVfdGFnc10pIiwKICAgICAgICAiU3RyaXBzIEhUTUwgYW5kIFBIUCB0YWdzIGZyb20gYSBzdHJpbmciCiAgICBdLAogICAgInN0cmlwY3NsYXNoZXMiOiBbCiAgICAgICAgInN0cmluZyBzdHJpcGNzbGFzaGVzKHN0cmluZyBzdHIpIiwKICAgICAgICAiU3RyaXBzIGJhY2tzbGFzaGVzIGZyb20gYSBzdHJpbmcuIFVzZXMgQy1zdHlsZSBjb252ZW50aW9ucyIKICAgIF0sCiAgICAic3RyaXBvcyI6IFsKICAgICAgICAiaW50IHN0cmlwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGNhc2UgaW5zZW5zaXRpdmUiCiAgICBdLAogICAgInN0cmlwc2xhc2hlcyI6IFsKICAgICAgICAic3RyaW5nIHN0cmlwc2xhc2hlcyhzdHJpbmcgc3RyKSIsCiAgICAgICAgIlN0cmlwcyBiYWNrc2xhc2hlcyBmcm9tIGEgc3RyaW5nIgogICAgXSwKICAgICJzdHJpc3RyIjogWwogICAgICAgICJzdHJpbmcgc3RyaXN0cihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGVbLCBib29sIHBhcnRdKSIsCiAgICAgICAgIkZpbmRzIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGNhc2UgaW5zZW5zaXRpdmUiCiAgICBdLAogICAgInN0cmxlbiI6IFsKICAgICAgICAiaW50IHN0cmxlbihzdHJpbmcgc3RyKSIsCiAgICAgICAgIkdldCBzdHJpbmcgbGVuZ3RoIgogICAgXSwKICAgICJzdHJuYXRjYXNlY21wIjogWwogICAgICAgICJpbnQgc3RybmF0Y2FzZWNtcChzdHJpbmcgczEsIHN0cmluZyBzMikiLAogICAgICAgICJSZXR1cm5zIHRoZSByZXN1bHQgb2YgY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgY29tcGFyaXNvbiB1c2luZyAnbmF0dXJhbCcgYWxnb3JpdGhtIgogICAgXSwKICAgICJzdHJuYXRjbXAiOiBbCiAgICAgICAgImludCBzdHJuYXRjbXAoc3RyaW5nIHMxLCBzdHJpbmcgczIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcmVzdWx0IG9mIHN0cmluZyBjb21wYXJpc29uIHVzaW5nICduYXR1cmFsJyBhbGdvcml0aG0iCiAgICBdLAogICAgInN0cm5jYXNlY21wIjogWwogICAgICAgICJpbnQgc3RybmNhc2VjbXAoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyLCBpbnQgbGVuKSIsCiAgICAgICAgIkJpbmFyeSBzYWZlIHN0cmluZyBjb21wYXJpc29uIgogICAgXSwKICAgICJzdHJuY21wIjogWwogICAgICAgICJpbnQgc3RybmNtcChzdHJpbmcgc3RyMSwgc3RyaW5nIHN0cjIsIGludCBsZW4pIiwKICAgICAgICAiQmluYXJ5IHNhZmUgc3RyaW5nIGNvbXBhcmlzb24iCiAgICBdLAogICAgInN0cnBicmsiOiBbCiAgICAgICAgImFycmF5IHN0cnBicmsoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgY2hhcl9saXN0KSIsCiAgICAgICAgIlNlYXJjaCBhIHN0cmluZyBmb3IgYW55IG9mIGEgc2V0IG9mIGNoYXJhY3RlcnMiCiAgICBdLAogICAgInN0cnBvcyI6IFsKICAgICAgICAiaW50IHN0cnBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiRmluZHMgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAic3RycHRpbWUiOiBbCiAgICAgICAgInN0cmluZyBzdHJwdGltZShzdHJpbmcgdGltZXN0YW1wLCBzdHJpbmcgZm9ybWF0KSIsCiAgICAgICAgIlBhcnNlIGEgdGltZS9kYXRlIGdlbmVyYXRlZCB3aXRoIHN0cmZ0aW1lKCkiCiAgICBdLAogICAgInN0cnJjaHIiOiBbCiAgICAgICAgInN0cmluZyBzdHJyY2hyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSkiLAogICAgICAgICJGaW5kcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgY2hhcmFjdGVyIGluIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJzdHJyZXYiOiBbCiAgICAgICAgInN0cmluZyBzdHJyZXYoc3RyaW5nIHN0cikiLAogICAgICAgICJSZXZlcnNlIGEgc3RyaW5nIgogICAgXSwKICAgICJzdHJyaXBvcyI6IFsKICAgICAgICAiaW50IHN0cnJpcG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0XSkiLAogICAgICAgICJGaW5kcyBwb3NpdGlvbiBvZiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIgc3RyaW5nIgogICAgXSwKICAgICJzdHJycG9zIjogWwogICAgICAgICJpbnQgc3RycnBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiRmluZHMgcG9zaXRpb24gb2YgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIHN0cmluZyIKICAgIF0sCiAgICAic3Ryc3BuIjogWwogICAgICAgICJpbnQgc3Ryc3BuKHN0cmluZyBzdHIsIHN0cmluZyBtYXNrIFssIHN0YXJ0IFssIGxlbl1dKSIsCiAgICAgICAgIkZpbmRzIGxlbmd0aCBvZiBpbml0aWFsIHNlZ21lbnQgY29uc2lzdGluZyBlbnRpcmVseSBvZiBjaGFyYWN0ZXJzIGZvdW5kIGluIG1hc2suIElmIHN0YXJ0IG9yL2FuZCBsZW5ndGggaXMgcHJvdmlkZWQgd29ya3MgbGlrZSBzdHJzcG4oc3Vic3RyKCRzLCRzdGFydCwkbGVuKSwkZ29vZF9jaGFycykiCiAgICBdLAogICAgInN0cnN0ciI6IFsKICAgICAgICAic3RyaW5nIHN0cnN0cihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGVbLCBib29sIHBhcnRdKSIsCiAgICAgICAgIkZpbmRzIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIiCiAgICBdLAogICAgInN0cnRvayI6IFsKICAgICAgICAic3RyaW5nIHN0cnRvayhbc3RyaW5nIHN0cixdIHN0cmluZyB0b2tlbikiLAogICAgICAgICJUb2tlbml6ZSBhIHN0cmluZyIKICAgIF0sCiAgICAic3RydG9sb3dlciI6IFsKICAgICAgICAic3RyaW5nIHN0cnRvbG93ZXIoc3RyaW5nIHN0cikiLAogICAgICAgICJNYWtlcyBhIHN0cmluZyBsb3dlcmNhc2UiCiAgICBdLAogICAgInN0cnRvdGltZSI6IFsKICAgICAgICAiaW50IHN0cnRvdGltZShzdHJpbmcgdGltZSBbLCBpbnQgbm93IF0pIiwKICAgICAgICAiQ29udmVydCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgZGF0ZSBhbmQgdGltZSB0byBhIHRpbWVzdGFtcCIKICAgIF0sCiAgICAic3RydG91cHBlciI6IFsKICAgICAgICAic3RyaW5nIHN0cnRvdXBwZXIoc3RyaW5nIHN0cikiLAogICAgICAgICJNYWtlcyBhIHN0cmluZyB1cHBlcmNhc2UiCiAgICBdLAogICAgInN0cnRyIjogWwogICAgICAgICJzdHJpbmcgc3RydHIoc3RyaW5nIHN0ciwgc3RyaW5nIGZyb21bLCBzdHJpbmcgdG9dKSIsCiAgICAgICAgIlRyYW5zbGF0ZXMgY2hhcmFjdGVycyBpbiBzdHIgdXNpbmcgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGVzIgogICAgXSwKICAgICJzdHJ2YWwiOiBbCiAgICAgICAgInN0cmluZyBzdHJ2YWwobWl4ZWQgdmFyKSIsCiAgICAgICAgIkdldCB0aGUgc3RyaW5nIHZhbHVlIG9mIGEgdmFyaWFibGUiCiAgICBdLAogICAgInN1YnN0ciI6IFsKICAgICAgICAic3RyaW5nIHN1YnN0cihzdHJpbmcgc3RyLCBpbnQgc3RhcnQgWywgaW50IGxlbmd0aF0pIiwKICAgICAgICAiUmV0dXJucyBwYXJ0IG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJzdWJzdHJfY29tcGFyZSI6IFsKICAgICAgICAiaW50IHN1YnN0cl9jb21wYXJlKHN0cmluZyBtYWluX3N0ciwgc3RyaW5nIHN0ciwgaW50IG9mZnNldCBbLCBpbnQgbGVuZ3RoIFssIGJvb2wgY2FzZV9zZW5zaXRpdml0eV1dKSIsCiAgICAgICAgIkJpbmFyeSBzYWZlIG9wdGlvbmFsbHkgY2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIDIgc3RyaW5ncyBmcm9tIGFuIG9mZnNldCwgdXAgdG8gbGVuZ3RoIGNoYXJhY3RlcnMiCiAgICBdLAogICAgInN1YnN0cl9jb3VudCI6IFsKICAgICAgICAiaW50IHN1YnN0cl9jb3VudChzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldCBbLCBpbnQgbGVuZ3RoXV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgc3Vic3RyaW5nIG9jY3VycyBpbiB0aGUgc3RyaW5nIgogICAgXSwKICAgICJzdWJzdHJfcmVwbGFjZSI6IFsKICAgICAgICAibWl4ZWQgc3Vic3RyX3JlcGxhY2UobWl4ZWQgc3RyLCBtaXhlZCByZXBsLCBtaXhlZCBzdGFydCBbLCBtaXhlZCBsZW5ndGhdKSIsCiAgICAgICAgIlJlcGxhY2VzIHBhcnQgb2YgYSBzdHJpbmcgd2l0aCBhbm90aGVyIHN0cmluZyIKICAgIF0sCiAgICAic3liYXNlX2FmZmVjdGVkX3Jvd3MiOiBbCiAgICAgICAgImludCBzeWJhc2VfYWZmZWN0ZWRfcm93cyhbcmVzb3VyY2UgbGlua19pZF0pIiwKICAgICAgICAiR2V0IG51bWJlciBvZiBhZmZlY3RlZCByb3dzIGluIGxhc3QgcXVlcnkiCiAgICBdLAogICAgInN5YmFzZV9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBzeWJhc2VfY2xvc2UoW3Jlc291cmNlIGxpbmtfaWRdKSIsCiAgICAgICAgIkNsb3NlIFN5YmFzZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJzeWJhc2VfY29ubmVjdCI6IFsKICAgICAgICAiaW50IHN5YmFzZV9jb25uZWN0KFtzdHJpbmcgaG9zdCBbLCBzdHJpbmcgdXNlciBbLCBzdHJpbmcgcGFzc3dvcmQgWywgc3RyaW5nIGNoYXJzZXQgWywgc3RyaW5nIGFwcG5hbWUgWywgYm9vbCBuZXddXV1dXV0pIiwKICAgICAgICAiT3BlbiBTeWJhc2Ugc2VydmVyIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInN5YmFzZV9kYXRhX3NlZWsiOiBbCiAgICAgICAgImJvb2wgc3liYXNlX2RhdGFfc2VlayhyZXNvdXJjZSByZXN1bHQsIGludCBvZmZzZXQpIiwKICAgICAgICAiTW92ZSBpbnRlcm5hbCByb3cgcG9pbnRlciIKICAgIF0sCiAgICAic3liYXNlX2RlYWRsb2NrX3JldHJ5X2NvdW50IjogWwogICAgICAgICJ2b2lkIHN5YmFzZV9kZWFkbG9ja19yZXRyeV9jb3VudChpbnQgcmV0cnlfY291bnQpIiwKICAgICAgICAiU2V0cyBkZWFkbG9jayByZXRyeSBjb3VudCIKICAgIF0sCiAgICAic3liYXNlX2ZldGNoX2FycmF5IjogWwogICAgICAgICJhcnJheSBzeWJhc2VfZmV0Y2hfYXJyYXkocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkZldGNoIHJvdyBhcyBhcnJheSIKICAgIF0sCiAgICAic3liYXNlX2ZldGNoX2Fzc29jIjogWwogICAgICAgICJhcnJheSBzeWJhc2VfZmV0Y2hfYXNzb2MocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkZldGNoIHJvdyBhcyBhcnJheSB3aXRob3V0IG51bWJlcmljIGluZGljZXMiCiAgICBdLAogICAgInN5YmFzZV9mZXRjaF9maWVsZCI6IFsKICAgICAgICAib2JqZWN0IHN5YmFzZV9mZXRjaF9maWVsZChyZXNvdXJjZSByZXN1bHQgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiR2V0IGZpZWxkIGluZm9ybWF0aW9uIgogICAgXSwKICAgICJzeWJhc2VfZmV0Y2hfb2JqZWN0IjogWwogICAgICAgICJvYmplY3Qgc3liYXNlX2ZldGNoX29iamVjdChyZXNvdXJjZSByZXN1bHQgWywgbWl4ZWQgb2JqZWN0XSkiLAogICAgICAgICJGZXRjaCByb3cgYXMgb2JqZWN0IgogICAgXSwKICAgICJzeWJhc2VfZmV0Y2hfcm93IjogWwogICAgICAgICJhcnJheSBzeWJhc2VfZmV0Y2hfcm93KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXQgcm93IGFzIGVudW1lcmF0ZWQgYXJyYXkiCiAgICBdLAogICAgInN5YmFzZV9maWVsZF9zZWVrIjogWwogICAgICAgICJib29sIHN5YmFzZV9maWVsZF9zZWVrKHJlc291cmNlIHJlc3VsdCwgaW50IG9mZnNldCkiLAogICAgICAgICJTZXQgZmllbGQgb2Zmc2V0IgogICAgXSwKICAgICJzeWJhc2VfZnJlZV9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgc3liYXNlX2ZyZWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGcmVlIHJlc3VsdCBtZW1vcnkiCiAgICBdLAogICAgInN5YmFzZV9nZXRfbGFzdF9tZXNzYWdlIjogWwogICAgICAgICJzdHJpbmcgc3liYXNlX2dldF9sYXN0X21lc3NhZ2Uodm9pZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBsYXN0IG1lc3NhZ2UgZnJvbSBzZXJ2ZXIgKG92ZXIgbWluX21lc3NhZ2Vfc2V2ZXJpdHkpIgogICAgXSwKICAgICJzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eSI6IFsKICAgICAgICAidm9pZCBzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eShpbnQgc2V2ZXJpdHkpIiwKICAgICAgICAiU2V0cyBtaW5pbXVtIGNsaWVudCBzZXZlcml0eSIKICAgIF0sCiAgICAic3liYXNlX21pbl9zZXJ2ZXJfc2V2ZXJpdHkiOiBbCiAgICAgICAgInZvaWQgc3liYXNlX21pbl9zZXJ2ZXJfc2V2ZXJpdHkoaW50IHNldmVyaXR5KSIsCiAgICAgICAgIlNldHMgbWluaW11bSBzZXJ2ZXIgc2V2ZXJpdHkiCiAgICBdLAogICAgInN5YmFzZV9udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgc3liYXNlX251bV9maWVsZHMocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkdldCBudW1iZXIgb2YgZmllbGRzIGluIHJlc3VsdCIKICAgIF0sCiAgICAic3liYXNlX251bV9yb3dzIjogWwogICAgICAgICJpbnQgc3liYXNlX251bV9yb3dzKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXQgbnVtYmVyIG9mIHJvd3MgaW4gcmVzdWx0IgogICAgXSwKICAgICJzeWJhc2VfcGNvbm5lY3QiOiBbCiAgICAgICAgImludCBzeWJhc2VfcGNvbm5lY3QoW3N0cmluZyBob3N0IFssIHN0cmluZyB1c2VyIFssIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgY2hhcnNldCBbLCBzdHJpbmcgYXBwbmFtZV1dXV1dKSIsCiAgICAgICAgIk9wZW4gcGVyc2lzdGVudCBTeWJhc2UgY29ubmVjdGlvbiIKICAgIF0sCiAgICAic3liYXNlX3F1ZXJ5IjogWwogICAgICAgICJpbnQgc3liYXNlX3F1ZXJ5KHN0cmluZyBxdWVyeSBbLCByZXNvdXJjZSBsaW5rX2lkXSkiLAogICAgICAgICJTZW5kIFN5YmFzZSBxdWVyeSIKICAgIF0sCiAgICAic3liYXNlX3Jlc3VsdCI6IFsKICAgICAgICAic3RyaW5nIHN5YmFzZV9yZXN1bHQocmVzb3VyY2UgcmVzdWx0LCBpbnQgcm93LCBtaXhlZCBmaWVsZCkiLAogICAgICAgICJHZXQgcmVzdWx0IGRhdGEiCiAgICBdLAogICAgInN5YmFzZV9zZWxlY3RfZGIiOiBbCiAgICAgICAgImJvb2wgc3liYXNlX3NlbGVjdF9kYihzdHJpbmcgZGF0YWJhc2UgWywgcmVzb3VyY2UgbGlua19pZF0pIiwKICAgICAgICAiU2VsZWN0IFN5YmFzZSBkYXRhYmFzZSIKICAgIF0sCiAgICAic3liYXNlX3NldF9tZXNzYWdlX2hhbmRsZXIiOiBbCiAgICAgICAgImJvb2wgc3liYXNlX3NldF9tZXNzYWdlX2hhbmRsZXIobWl4ZWQgZXJyb3JfZnVuYyBbLCByZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJTZXQgdGhlIGVycm9yIGhhbmRsZXIsIHRvIGJlIGNhbGxlZCB3aGVuIGEgc2VydmVyIG1lc3NhZ2UgaXMgcmFpc2VkLiAgICAgSWYgZXJyb3JfZnVuYyBpcyBOVUxMIHRoZSBoYW5kbGVyIHdpbGwgYmUgZGVsZXRlZCIKICAgIF0sCiAgICAic3liYXNlX3VuYnVmZmVyZWRfcXVlcnkiOiBbCiAgICAgICAgImludCBzeWJhc2VfdW5idWZmZXJlZF9xdWVyeShzdHJpbmcgcXVlcnkgWywgcmVzb3VyY2UgbGlua19pZF0pIiwKICAgICAgICAiU2VuZCBTeWJhc2UgcXVlcnkiCiAgICBdLAogICAgInN5bWxpbmsiOiBbCiAgICAgICAgImludCBzeW1saW5rKHN0cmluZyB0YXJnZXQsIHN0cmluZyBsaW5rKSIsCiAgICAgICAgIkNyZWF0ZSBhIHN5bWJvbGljIGxpbmsiCiAgICBdLAogICAgInN5c19nZXRfdGVtcF9kaXIiOiBbCiAgICAgICAgInN0cmluZyBzeXNfZ2V0X3RlbXBfZGlyKCkiLAogICAgICAgICJSZXR1cm5zIGRpcmVjdG9yeSBwYXRoIHVzZWQgZm9yIHRlbXBvcmFyeSBmaWxlcyIKICAgIF0sCiAgICAic3lzX2dldGxvYWRhdmciOiBbCiAgICAgICAgImFycmF5IHN5c19nZXRsb2FkYXZnKCkiLAogICAgICAgICIiCiAgICBdLAogICAgInN5c2xvZyI6IFsKICAgICAgICAiYm9vbCBzeXNsb2coaW50IHByaW9yaXR5LCBzdHJpbmcgbWVzc2FnZSkiLAogICAgICAgICJHZW5lcmF0ZSBhIHN5c3RlbSBsb2cgbWVzc2FnZSIKICAgIF0sCiAgICAic3lzdGVtIjogWwogICAgICAgICJpbnQgc3lzdGVtKHN0cmluZyBjb21tYW5kIFssIGludCAmcmV0dXJuX3ZhbHVlXSkiLAogICAgICAgICJFeGVjdXRlIGFuIGV4dGVybmFsIHByb2dyYW0gYW5kIGRpc3BsYXkgb3V0cHV0IgogICAgXSwKICAgICJ0YW4iOiBbCiAgICAgICAgImZsb2F0IHRhbihmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgdGFuZ2VudCBvZiB0aGUgbnVtYmVyIGluIHJhZGlhbnMiCiAgICBdLAogICAgInRhbmgiOiBbCiAgICAgICAgImZsb2F0IHRhbmgoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiB0aGUgbnVtYmVyLCBkZWZpbmVkIGFzIHNpbmgobnVtYmVyKS9jb3NoKG51bWJlcikiCiAgICBdLAogICAgInRlbXBuYW0iOiBbCiAgICAgICAgInN0cmluZyB0ZW1wbmFtKHN0cmluZyBkaXIsIHN0cmluZyBwcmVmaXgpIiwKICAgICAgICAiQ3JlYXRlIGEgdW5pcXVlIGZpbGVuYW1lIGluIGEgZGlyZWN0b3J5IgogICAgXSwKICAgICJ0ZXh0ZG9tYWluIjogWwogICAgICAgICJzdHJpbmcgdGV4dGRvbWFpbihzdHJpbmcgZG9tYWluKSIsCiAgICAgICAgIlNldCB0aGUgdGV4dGRvbWFpbiB0byBcImRvbWFpblwiLiBSZXR1cm5zIHRoZSBjdXJyZW50IGRvbWFpbiIKICAgIF0sCiAgICAidGlkeV9hY2Nlc3NfY291bnQiOiBbCiAgICAgICAgImludCB0aWR5X2FjY2Vzc19jb3VudCgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgTnVtYmVyIG9mIFRpZHkgYWNjZXNzaWJpbGl0eSB3YXJuaW5ncyBlbmNvdW50ZXJlZCBmb3Igc3BlY2lmaWVkIGRvY3VtZW50LiIKICAgIF0sCiAgICAidGlkeV9jbGVhbl9yZXBhaXIiOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9jbGVhbl9yZXBhaXIoKSIsCiAgICAgICAgIkV4ZWN1dGUgY29uZmlndXJlZCBjbGVhbnVwIGFuZCByZXBhaXIgb3BlcmF0aW9ucyBvbiBwYXJzZWQgbWFya3VwIgogICAgXSwKICAgICJ0aWR5X2NvbmZpZ19jb3VudCI6IFsKICAgICAgICAiaW50IHRpZHlfY29uZmlnX2NvdW50KCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBOdW1iZXIgb2YgVGlkeSBjb25maWd1cmF0aW9uIGVycm9ycyBlbmNvdW50ZXJlZCBmb3Igc3BlY2lmaWVkIGRvY3VtZW50LiIKICAgIF0sCiAgICAidGlkeV9kaWFnbm9zZSI6IFsKICAgICAgICAiYm9vbGVhbiB0aWR5X2RpYWdub3NlKCkiLAogICAgICAgICJSdW4gY29uZmlndXJlZCBkaWFnbm9zdGljcyBvbiBwYXJzZWQgYW5kIHJlcGFpcmVkIG1hcmt1cC4iCiAgICBdLAogICAgInRpZHlfZXJyb3JfY291bnQiOiBbCiAgICAgICAgImludCB0aWR5X2Vycm9yX2NvdW50KCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBOdW1iZXIgb2YgVGlkeSBlcnJvcnMgZW5jb3VudGVyZWQgZm9yIHNwZWNpZmllZCBkb2N1bWVudC4iCiAgICBdLAogICAgInRpZHlfZ2V0X2JvZHkiOiBbCiAgICAgICAgIlRpZHlOb2RlIHRpZHlfZ2V0X2JvZHkocmVzb3VyY2UgdGlkeSkiLAogICAgICAgICJSZXR1cm5zIGEgVGlkeU5vZGUgT2JqZWN0IHN0YXJ0aW5nIGZyb20gdGhlIDxCT0RZPiB0YWcgb2YgdGhlIHRpZHkgcGFyc2UgdHJlZSIKICAgIF0sCiAgICAidGlkeV9nZXRfY29uZmlnIjogWwogICAgICAgICJhcnJheSB0aWR5X2dldF9jb25maWcoKSIsCiAgICAgICAgIkdldCBjdXJyZW50IFRpZHkgY29uZmlndWFyaW9uIgogICAgXSwKICAgICJ0aWR5X2dldF9lcnJvcl9idWZmZXIiOiBbCiAgICAgICAgInN0cmluZyB0aWR5X2dldF9lcnJvcl9idWZmZXIoW2Jvb2xlYW4gZGV0YWlsZWRdKSIsCiAgICAgICAgIlJldHVybiB3YXJuaW5ncyBhbmQgZXJyb3JzIHdoaWNoIG9jY3VyZWQgcGFyc2luZyB0aGUgc3BlY2lmaWVkIGRvY3VtZW50IgogICAgXSwKICAgICJ0aWR5X2dldF9oZWFkIjogWwogICAgICAgICJUaWR5Tm9kZSB0aWR5X2dldF9oZWFkKCkiLAogICAgICAgICJSZXR1cm5zIGEgVGlkeU5vZGUgT2JqZWN0IHN0YXJ0aW5nIGZyb20gdGhlIDxIRUFEPiB0YWcgb2YgdGhlIHRpZHkgcGFyc2UgdHJlZSIKICAgIF0sCiAgICAidGlkeV9nZXRfaHRtbCI6IFsKICAgICAgICAiVGlkeU5vZGUgdGlkeV9nZXRfaHRtbCgpIiwKICAgICAgICAiUmV0dXJucyBhIFRpZHlOb2RlIE9iamVjdCBzdGFydGluZyBmcm9tIHRoZSA8SFRNTD4gdGFnIG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUiCiAgICBdLAogICAgInRpZHlfZ2V0X2h0bWxfdmVyIjogWwogICAgICAgICJpbnQgdGlkeV9nZXRfaHRtbF92ZXIoKSIsCiAgICAgICAgIkdldCB0aGUgRGV0ZWN0ZWQgSFRNTCB2ZXJzaW9uIGZvciB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LiIKICAgIF0sCiAgICAidGlkeV9nZXRfb3B0X2RvYyI6IFsKICAgICAgICAic3RyaW5nIHRpZHlfZ2V0X29wdF9kb2ModGlkeSByZXNvdXJjZSwgc3RyaW5nIG9wdG5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGdpdmVuIG9wdGlvbiBuYW1lIgogICAgXSwKICAgICJ0aWR5X2dldF9vdXRwdXQiOiBbCiAgICAgICAgInN0cmluZyB0aWR5X2dldF9vdXRwdXQoKSIsCiAgICAgICAgIlJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBhcnNlZCB0aWR5IG1hcmt1cCIKICAgIF0sCiAgICAidGlkeV9nZXRfcmVsZWFzZSI6IFsKICAgICAgICAic3RyaW5nIHRpZHlfZ2V0X3JlbGVhc2UoKSIsCiAgICAgICAgIkdldCByZWxlYXNlIGRhdGUgKHZlcnNpb24pIGZvciBUaWR5IGxpYnJhcnkiCiAgICBdLAogICAgInRpZHlfZ2V0X3Jvb3QiOiBbCiAgICAgICAgIlRpZHlOb2RlIHRpZHlfZ2V0X3Jvb3QoKSIsCiAgICAgICAgIlJldHVybnMgYSBUaWR5Tm9kZSBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSByb290IG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUiCiAgICBdLAogICAgInRpZHlfZ2V0X3N0YXR1cyI6IFsKICAgICAgICAiaW50IHRpZHlfZ2V0X3N0YXR1cygpIiwKICAgICAgICAiR2V0IHN0YXR1cyBvZiBzcGVjZmllZCBkb2N1bWVudC4iCiAgICBdLAogICAgInRpZHlfZ2V0b3B0IjogWwogICAgICAgICJtaXhlZCB0aWR5X2dldG9wdChzdHJpbmcgb3B0aW9uKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSB0aWR5IGRvY3VtZW50LiIKICAgIF0sCiAgICAidGlkeV9pc194aHRtbCI6IFsKICAgICAgICAiYm9vbGVhbiB0aWR5X2lzX3hodG1sKCkiLAogICAgICAgICJJbmRpY2F0ZXMgaWYgdGhlIGRvY3VtZW50IGlzIGEgWEhUTUwgZG9jdW1lbnQuIgogICAgXSwKICAgICJ0aWR5X2lzX3htbCI6IFsKICAgICAgICAiYm9vbGVhbiB0aWR5X2lzX3htbCgpIiwKICAgICAgICAiSW5kaWNhdGVzIGlmIHRoZSBkb2N1bWVudCBpcyBhIGdlbmVyaWMgKG5vbiBIVE1ML1hIVE1MKSBYTUwgZG9jdW1lbnQuIgogICAgXSwKICAgICJ0aWR5X3BhcnNlX2ZpbGUiOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9wYXJzZV9maWxlKHN0cmluZyBmaWxlIFssIG1peGVkIGNvbmZpZ19vcHRpb25zIFssIHN0cmluZyBlbmNvZGluZyBbLCBib29sIHVzZV9pbmNsdWRlX3BhdGhdXV0pIiwKICAgICAgICAiUGFyc2UgbWFya3VwIGluIGZpbGUgb3IgVVJJIgogICAgXSwKICAgICJ0aWR5X3BhcnNlX3N0cmluZyI6IFsKICAgICAgICAiYm9vbCB0aWR5X3BhcnNlX3N0cmluZyhzdHJpbmcgaW5wdXQgWywgbWl4ZWQgY29uZmlnX29wdGlvbnMgWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiUGFyc2UgYSBkb2N1bWVudCBzdG9yZWQgaW4gYSBzdHJpbmciCiAgICBdLAogICAgInRpZHlfcmVwYWlyX2ZpbGUiOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9yZXBhaXJfZmlsZShzdHJpbmcgZmlsZW5hbWUgWywgbWl4ZWQgY29uZmlnX2ZpbGUgWywgc3RyaW5nIGVuY29kaW5nIFssIGJvb2wgdXNlX2luY2x1ZGVfcGF0aF1dXSkiLAogICAgICAgICJSZXBhaXIgYSBmaWxlIHVzaW5nIGFuIG9wdGlvbmFsbHkgcHJvdmlkZWQgY29uZmlndXJhdGlvbiBmaWxlIgogICAgXSwKICAgICJ0aWR5X3JlcGFpcl9zdHJpbmciOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9yZXBhaXJfc3RyaW5nKHN0cmluZyBkYXRhIFssIG1peGVkIGNvbmZpZ19maWxlIFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIlJlcGFpciBhIHN0cmluZyB1c2luZyBhbiBvcHRpb25hbGx5IHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gZmlsZSIKICAgIF0sCiAgICAidGlkeV93YXJuaW5nX2NvdW50IjogWwogICAgICAgICJpbnQgdGlkeV93YXJuaW5nX2NvdW50KCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBOdW1iZXIgb2YgVGlkeSB3YXJuaW5ncyBlbmNvdW50ZXJlZCBmb3Igc3BlY2lmaWVkIGRvY3VtZW50LiIKICAgIF0sCiAgICAidGltZSI6IFsKICAgICAgICAiaW50IHRpbWUodm9pZCkiLAogICAgICAgICJSZXR1cm4gY3VycmVudCBVTklYIHRpbWVzdGFtcCIKICAgIF0sCiAgICAidGltZV9uYW5vc2xlZXAiOiBbCiAgICAgICAgIm1peGVkIHRpbWVfbmFub3NsZWVwKGxvbmcgc2Vjb25kcywgbG9uZyBuYW5vc2Vjb25kcykiLAogICAgICAgICJEZWxheSBmb3IgYSBudW1iZXIgb2Ygc2Vjb25kcyBhbmQgbmFubyBzZWNvbmRzIgogICAgXSwKICAgICJ0aW1lX3NsZWVwX3VudGlsIjogWwogICAgICAgICJtaXhlZCB0aW1lX3NsZWVwX3VudGlsKGZsb2F0IHRpbWVzdGFtcCkiLAogICAgICAgICJNYWtlIHRoZSBzY3JpcHQgc2xlZXAgdW50aWwgdGhlIHNwZWNpZmllZCB0aW1lIgogICAgXSwKICAgICJ0aW1lem9uZV9hYmJyZXZpYXRpb25zX2xpc3QiOiBbCiAgICAgICAgImFycmF5IHRpbWV6b25lX2FiYnJldmlhdGlvbnNfbGlzdCgpIiwKICAgICAgICAiUmV0dXJucyBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGRzdCwgb2Zmc2V0IGFuZCB0aGUgdGltZXpvbmUgbmFtZSIKICAgIF0sCiAgICAidGltZXpvbmVfaWRlbnRpZmllcnNfbGlzdCI6IFsKICAgICAgICAiYXJyYXkgdGltZXpvbmVfaWRlbnRpZmllcnNfbGlzdChbbG9uZyB3aGF0Wywgc3RyaW5nIGNvdW50cnldXSkiLAogICAgICAgICJSZXR1cm5zIG51bWVyaWNhbGx5IGluZGV4IGFycmF5IHdpdGggYWxsIHRpbWV6b25lIGlkZW50aWZpZXJzLiIKICAgIF0sCiAgICAidGltZXpvbmVfbG9jYXRpb25fZ2V0IjogWwogICAgICAgICJhcnJheSB0aW1lem9uZV9sb2NhdGlvbl9nZXQoKSIsCiAgICAgICAgIlJldHVybnMgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIGEgdGltZXpvbmUsIGluY2x1ZGluZyBjb3VudHJ5IGNvZGUsIGxhdGl0dWRlL2xvbmdpdHVkZSBhbmQgY29tbWVudHMiCiAgICBdLAogICAgInRpbWV6b25lX25hbWVfZnJvbV9hYmJyIjogWwogICAgICAgICJzdHJpbmcgdGltZXpvbmVfbmFtZV9mcm9tX2FiYnIoc3RyaW5nIGFiYnJbLCBsb25nIGdtdE9mZnNldFssIGxvbmcgaXNkc3RdXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSB0aW1lem9uZSBuYW1lIGZyb20gYWJicmV2YXRpb24iCiAgICBdLAogICAgInRpbWV6b25lX25hbWVfZ2V0IjogWwogICAgICAgICJzdHJpbmcgdGltZXpvbmVfbmFtZV9nZXQoRGF0ZVRpbWVab25lIG9iamVjdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0aW1lem9uZS4iCiAgICBdLAogICAgInRpbWV6b25lX29mZnNldF9nZXQiOiBbCiAgICAgICAgImxvbmcgdGltZXpvbmVfb2Zmc2V0X2dldChEYXRlVGltZVpvbmUgb2JqZWN0LCBEYXRlVGltZSBvYmplY3QpIiwKICAgICAgICAiUmV0dXJucyB0aGUgdGltZXpvbmUgb2Zmc2V0LiIKICAgIF0sCiAgICAidGltZXpvbmVfb3BlbiI6IFsKICAgICAgICAiRGF0ZVRpbWVab25lIHRpbWV6b25lX29wZW4oc3RyaW5nIHRpbWV6b25lKSIsCiAgICAgICAgIlJldHVybnMgbmV3IERhdGVUaW1lWm9uZSBvYmplY3QiCiAgICBdLAogICAgInRpbWV6b25lX3RyYW5zaXRpb25zX2dldCI6IFsKICAgICAgICAiYXJyYXkgdGltZXpvbmVfdHJhbnNpdGlvbnNfZ2V0KERhdGVUaW1lWm9uZSBvYmplY3QgWywgbG9uZyB0aW1lc3RhbXBfYmVnaW4gWywgbG9uZyB0aW1lc3RhbXBfZW5kIF1dKSIsCiAgICAgICAgIlJldHVybnMgbnVtZXJpY2FsbHkgaW5kZXhlZCBhcnJheSBjb250YWluaW5nIGFzc29jaWF0aXZlIGFycmF5IGZvciBhbGwgdHJhbnNpdGlvbnMgaW4gdGhlIHNwZWNpZmllZCByYW5nZSBmb3IgdGhlIHRpbWV6b25lLiIKICAgIF0sCiAgICAidGltZXpvbmVfdmVyc2lvbl9nZXQiOiBbCiAgICAgICAgImFycmF5IHRpbWV6b25lX3ZlcnNpb25fZ2V0KCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBPbHNvbiBkYXRhYmFzZSB2ZXJzaW9uIG51bWJlci4iCiAgICBdLAogICAgInRtcGZpbGUiOiBbCiAgICAgICAgInJlc291cmNlIHRtcGZpbGUodm9pZCkiLAogICAgICAgICJDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSB0aGF0IHdpbGwgYmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHVzZSIKICAgIF0sCiAgICAidG9rZW5fZ2V0X2FsbCI6IFsKICAgICAgICAiYXJyYXkgdG9rZW5fZ2V0X2FsbChzdHJpbmcgc291cmNlKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAidG9rZW5fbmFtZSI6IFsKICAgICAgICAic3RyaW5nIHRva2VuX25hbWUoaW50IHR5cGUpIiwKICAgICAgICAiIgogICAgXSwKICAgICJ0b3VjaCI6IFsKICAgICAgICAiYm9vbCB0b3VjaChzdHJpbmcgZmlsZW5hbWUgWywgaW50IHRpbWUgWywgaW50IGF0aW1lXV0pIiwKICAgICAgICAiU2V0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGZpbGUiCiAgICBdLAogICAgInRyaWdnZXJfZXJyb3IiOiBbCiAgICAgICAgInZvaWQgdHJpZ2dlcl9lcnJvcihzdHJpbmcgbWVzc3NhZ2UgWywgaW50IGVycm9yX3R5cGVdKSIsCiAgICAgICAgIkdlbmVyYXRlcyBhIHVzZXItbGV2ZWwgZXJyb3Ivd2FybmluZy9ub3RpY2UgbWVzc2FnZSIKICAgIF0sCiAgICAidHJpbSI6IFsKICAgICAgICAic3RyaW5nIHRyaW0oc3RyaW5nIHN0ciBbLCBzdHJpbmcgY2hhcmFjdGVyX21hc2tdKSIsCiAgICAgICAgIlN0cmlwcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJ1YXNvcnQiOiBbCiAgICAgICAgImJvb2wgdWFzb3J0KGFycmF5IGFycmF5X2FyZywgc3RyaW5nIGNtcF9mdW5jdGlvbikiLAogICAgICAgICJTb3J0IGFuIGFycmF5IHdpdGggYSB1c2VyLWRlZmluZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBhbmQgbWFpbnRhaW4gaW5kZXggYXNzb2NpYXRpb24iCiAgICBdLAogICAgInVjZmlyc3QiOiBbCiAgICAgICAgInN0cmluZyB1Y2ZpcnN0KHN0cmluZyBzdHIpIiwKICAgICAgICAiTWFrZSBhIHN0cmluZydzIGZpcnN0IGNoYXJhY3RlciBsb3dlcmNhc2UiCiAgICBdLAogICAgInVjd29yZHMiOiBbCiAgICAgICAgInN0cmluZyB1Y3dvcmRzKHN0cmluZyBzdHIpIiwKICAgICAgICAiVXBwZXJjYXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgZXZlcnkgd29yZCBpbiBhIHN0cmluZyIKICAgIF0sCiAgICAidWtzb3J0IjogWwogICAgICAgICJib29sIHVrc29ydChhcnJheSBhcnJheV9hcmcsIHN0cmluZyBjbXBfZnVuY3Rpb24pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSBieSBrZXlzIHVzaW5nIGEgdXNlci1kZWZpbmVkIGNvbXBhcmlzb24gZnVuY3Rpb24iCiAgICBdLAogICAgInVtYXNrIjogWwogICAgICAgICJpbnQgdW1hc2soW2ludCBtYXNrXSkiLAogICAgICAgICJSZXR1cm4gb3IgY2hhbmdlIHRoZSB1bWFzayIKICAgIF0sCiAgICAidW5pcWlkIjogWwogICAgICAgICJzdHJpbmcgdW5pcWlkKFtzdHJpbmcgcHJlZml4IFssIGJvb2wgbW9yZV9lbnRyb3B5XV0pIiwKICAgICAgICAiR2VuZXJhdGVzIGEgdW5pcXVlIElEIgogICAgXSwKICAgICJ1bml4dG9qZCI6IFsKICAgICAgICAiaW50IHVuaXh0b2pkKFtpbnQgdGltZXN0YW1wXSkiLAogICAgICAgICJDb252ZXJ0IFVOSVggdGltZXN0YW1wIHRvIEp1bGlhbiBEYXkiCiAgICBdLAogICAgInVubGluayI6IFsKICAgICAgICAiYm9vbCB1bmxpbmsoc3RyaW5nIGZpbGVuYW1lWywgY29udGV4dCBjb250ZXh0XSkiLAogICAgICAgICJEZWxldGUgYSBmaWxlIgogICAgXSwKICAgICJ1bnBhY2siOiBbCiAgICAgICAgImFycmF5IHVucGFjayhzdHJpbmcgZm9ybWF0LCBzdHJpbmcgaW5wdXQpIiwKICAgICAgICAiVW5wYWNrIGJpbmFyeSBzdHJpbmcgaW50byBuYW1lZCBhcnJheSBlbGVtZW50cyBhY2NvcmRpbmcgdG8gZm9ybWF0IGFyZ3VtZW50IgogICAgXSwKICAgICJ1bnJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24iOiBbCiAgICAgICAgInZvaWQgdW5yZWdpc3Rlcl90aWNrX2Z1bmN0aW9uKHN0cmluZyBmdW5jdGlvbl9uYW1lKSIsCiAgICAgICAgIlVucmVnaXN0ZXJzIGEgdGljayBjYWxsYmFjayBmdW5jdGlvbiIKICAgIF0sCiAgICAidW5zZXJpYWxpemUiOiBbCiAgICAgICAgIm1peGVkIHVuc2VyaWFsaXplKHN0cmluZyB2YXJpYWJsZV9yZXByZXNlbnRhdGlvbikiLAogICAgICAgICJUYWtlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB2YXJpYWJsZSBhbmQgcmVjcmVhdGVzIGl0IgogICAgXSwKICAgICJ1bnNldCI6IFsKICAgICAgICAidm9pZCB1bnNldCAobWl4ZWQgdmFyIFssIG1peGVkIHZhcl0pIiwKICAgICAgICAiVW5zZXQgYSBnaXZlbiB2YXJpYWJsZSIKICAgIF0sCiAgICAidXJsZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgdXJsZGVjb2RlKHN0cmluZyBzdHIpIiwKICAgICAgICAiRGVjb2RlcyBVUkwtZW5jb2RlZCBzdHJpbmciCiAgICBdLAogICAgInVybGVuY29kZSI6IFsKICAgICAgICAic3RyaW5nIHVybGVuY29kZShzdHJpbmcgc3RyKSIsCiAgICAgICAgIlVSTC1lbmNvZGVzIHN0cmluZyIKICAgIF0sCiAgICAidXNsZWVwIjogWwogICAgICAgICJ2b2lkIHVzbGVlcChpbnQgbWljcm9fc2Vjb25kcykiLAogICAgICAgICJEZWxheSBmb3IgYSBnaXZlbiBudW1iZXIgb2YgbWljcm8gc2Vjb25kcyIKICAgIF0sCiAgICAidXNvcnQiOiBbCiAgICAgICAgImJvb2wgdXNvcnQoYXJyYXkgYXJyYXlfYXJnLCBzdHJpbmcgY21wX2Z1bmN0aW9uKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgYnkgdmFsdWVzIHVzaW5nIGEgdXNlci1kZWZpbmVkIGNvbXBhcmlzb24gZnVuY3Rpb24iCiAgICBdLAogICAgInV0ZjhfZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgdXRmOF9kZWNvZGUoc3RyaW5nIGRhdGEpIiwKICAgICAgICAiQ29udmVydHMgYSBVVEYtOCBlbmNvZGVkIHN0cmluZyB0byBJU08tODg1OS0xIgogICAgXSwKICAgICJ1dGY4X2VuY29kZSI6IFsKICAgICAgICAic3RyaW5nIHV0ZjhfZW5jb2RlKHN0cmluZyBkYXRhKSIsCiAgICAgICAgIkVuY29kZXMgYW4gSVNPLTg4NTktMSBzdHJpbmcgdG8gVVRGLTgiCiAgICBdLAogICAgInZhcl9kdW1wIjogWwogICAgICAgICJ2b2lkIHZhcl9kdW1wKG1peGVkIHZhcikiLAogICAgICAgICJEdW1wcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB2YXJpYWJsZSB0byBvdXRwdXQiCiAgICBdLAogICAgInZhcl9leHBvcnQiOiBbCiAgICAgICAgIm1peGVkIHZhcl9leHBvcnQobWl4ZWQgdmFyIFssIGJvb2wgcmV0dXJuXSkiLAogICAgICAgICJPdXRwdXRzIG9yIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB2YXJpYWJsZSIKICAgIF0sCiAgICAidmFyaWFudF9hYnMiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfYWJzKG1peGVkIGxlZnQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSB2YXJpYW50IgogICAgXSwKICAgICJ2YXJpYW50X2FkZCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9hZGQobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiXCJBZGRzXCIgdHdvIHZhcmlhbnQgdmFsdWVzIHRvZ2V0aGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHQiCiAgICBdLAogICAgInZhcmlhbnRfYW5kIjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X2FuZChtaXhlZCBsZWZ0LCBtaXhlZCByaWdodCkiLAogICAgICAgICJwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9wZXJhdGlvbiBiZXR3ZWVuIHR3byB2YXJpYW50cyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IgogICAgXSwKICAgICJ2YXJpYW50X2Nhc3QiOiBbCiAgICAgICAgIm9iamVjdCB2YXJpYW50X2Nhc3Qob2JqZWN0IHZhcmlhbnQsIGludCB0eXBlKSIsCiAgICAgICAgIkNvbnZlcnQgYSB2YXJpYW50IGludG8gYSBuZXcgdmFyaWFudCBvYmplY3Qgb2YgYW5vdGhlciB0eXBlIgogICAgXSwKICAgICJ2YXJpYW50X2NhdCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9jYXQobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiY29uY2F0ZW5hdGVzIHR3byB2YXJpYW50IHZhbHVlcyB0b2dldGhlciBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IgogICAgXSwKICAgICJ2YXJpYW50X2NtcCI6IFsKICAgICAgICAiaW50IHZhcmlhbnRfY21wKG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0IFssIGludCBsY2lkIFssIGludCBmbGFnc11dKSIsCiAgICAgICAgIkNvbXBhcmVzIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wIjogWwogICAgICAgICJvYmplY3QgdmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wKGludCB0aW1lc3RhbXApIiwKICAgICAgICAiUmV0dXJucyBhIHZhcmlhbnQgZGF0ZSByZXByZXNlbnRhdGlvbiBvZiBhIHVuaXggdGltZXN0YW1wIgogICAgXSwKICAgICJ2YXJpYW50X2RhdGVfdG9fdGltZXN0YW1wIjogWwogICAgICAgICJpbnQgdmFyaWFudF9kYXRlX3RvX3RpbWVzdGFtcChvYmplY3QgdmFyaWFudCkiLAogICAgICAgICJDb252ZXJ0cyBhIHZhcmlhbnQgZGF0ZS90aW1lIHZhbHVlIHRvIHVuaXggdGltZXN0YW1wIgogICAgXSwKICAgICJ2YXJpYW50X2RpdiI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9kaXYobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcmVzdWx0IGZyb20gZGl2aWRpbmcgdHdvIHZhcmlhbnRzIgogICAgXSwKICAgICJ2YXJpYW50X2VxdiI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9lcXYobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiUGVyZm9ybXMgYSBiaXR3aXNlIGVxdWl2YWxlbmNlIG9uIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmFyaWFudF9maXgiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfZml4KG1peGVkIGxlZnQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgaW50ZWdlciBwYXJ0ID8gb2YgYSB2YXJpYW50IgogICAgXSwKICAgICJ2YXJpYW50X2dldF90eXBlIjogWwogICAgICAgICJpbnQgdmFyaWFudF9nZXRfdHlwZShvYmplY3QgdmFyaWFudCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBWVF9YWFggdHlwZSBjb2RlIGZvciBhIHZhcmlhbnQiCiAgICBdLAogICAgInZhcmlhbnRfaWRpdiI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9pZGl2KG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIkNvbnZlcnRzIHZhcmlhbnRzIHRvIGludGVnZXJzIGFuZCB0aGVuIHJldHVybnMgdGhlIHJlc3VsdCBmcm9tIGRpdmlkaW5nIHRoZW0iCiAgICBdLAogICAgInZhcmlhbnRfaW1wIjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X2ltcChtaXhlZCBsZWZ0LCBtaXhlZCByaWdodCkiLAogICAgICAgICJQZXJmb3JtcyBhIGJpdHdpc2UgaW1wbGljYXRpb24gb24gdHdvIHZhcmlhbnRzIgogICAgXSwKICAgICJ2YXJpYW50X2ludCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9pbnQobWl4ZWQgbGVmdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYSB2YXJpYW50IgogICAgXSwKICAgICJ2YXJpYW50X21vZCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9tb2QobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiRGl2aWRlcyB0d28gdmFyaWFudHMgYW5kIHJldHVybnMgb25seSB0aGUgcmVtYWluZGVyIgogICAgXSwKICAgICJ2YXJpYW50X211bCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9tdWwobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAibXVsdGlwbGllcyB0aGUgdmFsdWVzIG9mIHRoZSB0d28gdmFyaWFudHMgYW5kIHJldHVybnMgdGhlIHJlc3VsdCIKICAgIF0sCiAgICAidmFyaWFudF9uZWciOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfbmVnKG1peGVkIGxlZnQpIiwKICAgICAgICAiUGVyZm9ybXMgbG9naWNhbCBuZWdhdGlvbiBvbiBhIHZhcmlhbnQiCiAgICBdLAogICAgInZhcmlhbnRfbm90IjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X25vdChtaXhlZCBsZWZ0KSIsCiAgICAgICAgIlBlcmZvcm1zIGJpdHdpc2Ugbm90IG5lZ2F0aW9uIG9uIGEgdmFyaWFudCIKICAgIF0sCiAgICAidmFyaWFudF9vciI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9vcihtaXhlZCBsZWZ0LCBtaXhlZCByaWdodCkiLAogICAgICAgICJQZXJmb3JtcyBhIGxvZ2ljYWwgZGlzanVuY3Rpb24gb24gdHdvIHZhcmlhbnRzIgogICAgXSwKICAgICJ2YXJpYW50X3BvdyI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9wb3cobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcmVzdWx0IG9mIHBlcmZvcm1pbmcgdGhlIHBvd2VyIGZ1bmN0aW9uIHdpdGggdHdvIHZhcmlhbnRzIgogICAgXSwKICAgICJ2YXJpYW50X3JvdW5kIjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X3JvdW5kKG1peGVkIGxlZnQsIGludCBkZWNpbWFscykiLAogICAgICAgICJSb3VuZHMgYSB2YXJpYW50IHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIgogICAgXSwKICAgICJ2YXJpYW50X3NldCI6IFsKICAgICAgICAidm9pZCB2YXJpYW50X3NldChvYmplY3QgdmFyaWFudCwgbWl4ZWQgdmFsdWUpIiwKICAgICAgICAiQXNzaWducyBhIG5ldyB2YWx1ZSBmb3IgYSB2YXJpYW50IG9iamVjdCIKICAgIF0sCiAgICAidmFyaWFudF9zZXRfdHlwZSI6IFsKICAgICAgICAidm9pZCB2YXJpYW50X3NldF90eXBlKG9iamVjdCB2YXJpYW50LCBpbnQgdHlwZSkiLAogICAgICAgICJDb252ZXJ0IGEgdmFyaWFudCBpbnRvIGFub3RoZXIgdHlwZS4gIFZhcmlhbnQgaXMgbW9kaWZpZWQgXCJpbi1wbGFjZVwiIgogICAgXSwKICAgICJ2YXJpYW50X3N1YiI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9zdWIobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAic3VidHJhY3RzIHRoZSB2YWx1ZSBvZiB0aGUgcmlnaHQgdmFyaWFudCBmcm9tIHRoZSBsZWZ0IHZhcmlhbnQgdmFsdWUgYW5kIHJldHVybnMgdGhlIHJlc3VsdCIKICAgIF0sCiAgICAidmFyaWFudF94b3IiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfeG9yKG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIlBlcmZvcm1zIGEgbG9naWNhbCBleGNsdXNpb24gb24gdHdvIHZhcmlhbnRzIgogICAgXSwKICAgICJ2ZXJzaW9uX2NvbXBhcmUiOiBbCiAgICAgICAgImludCB2ZXJzaW9uX2NvbXBhcmUoc3RyaW5nIHZlcjEsIHN0cmluZyB2ZXIyIFssIHN0cmluZyBvcGVyXSkiLAogICAgICAgICJDb21wYXJlcyB0d28gXCJQSFAtc3RhbmRhcmRpemVkXCIgdmVyc2lvbiBudW1iZXIgc3RyaW5ncyIKICAgIF0sCiAgICAidmZwcmludGYiOiBbCiAgICAgICAgImludCB2ZnByaW50ZihyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBmb3JtYXQsIGFycmF5IGFyZ3MpIiwKICAgICAgICAiT3V0cHV0IGEgZm9ybWF0dGVkIHN0cmluZyBpbnRvIGEgc3RyZWFtIgogICAgXSwKICAgICJ2aXJ0dWFsIjogWwogICAgICAgICJib29sIHZpcnR1YWwoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlBlcmZvcm0gYW4gQXBhY2hlIHN1Yi1yZXF1ZXN0IgogICAgXSwKICAgICJ2cHJpbnRmIjogWwogICAgICAgICJpbnQgdnByaW50ZihzdHJpbmcgZm9ybWF0LCBhcnJheSBhcmdzKSIsCiAgICAgICAgIk91dHB1dCBhIGZvcm1hdHRlZCBzdHJpbmciCiAgICBdLAogICAgInZzcHJpbnRmIjogWwogICAgICAgICJzdHJpbmcgdnNwcmludGYoc3RyaW5nIGZvcm1hdCwgYXJyYXkgYXJncykiLAogICAgICAgICJSZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIgogICAgXSwKICAgICJ3ZGR4X2FkZF92YXJzIjogWwogICAgICAgICJpbnQgd2RkeF9hZGRfdmFycyhyZXNvdXJjZSBwYWNrZXRfaWQsICBtaXhlZCB2YXJfbmFtZXMgWywgbWl4ZWQgLi4uXSkiLAogICAgICAgICJTZXJpYWxpemVzIGdpdmVuIHZhcmlhYmxlcyBhbmQgYWRkcyB0aGVtIHRvIHBhY2tldCBnaXZlbiBieSBwYWNrZXRfaWQiCiAgICBdLAogICAgIndkZHhfZGVzZXJpYWxpemUiOiBbCiAgICAgICAgIm1peGVkIHdkZHhfZGVzZXJpYWxpemUobWl4ZWQgcGFja2V0KSIsCiAgICAgICAgIkRlc2VyaWFsaXplcyBnaXZlbiBwYWNrZXQgYW5kIHJldHVybnMgYSBQSFAgdmFsdWUiCiAgICBdLAogICAgIndkZHhfcGFja2V0X2VuZCI6IFsKICAgICAgICAic3RyaW5nIHdkZHhfcGFja2V0X2VuZChyZXNvdXJjZSBwYWNrZXRfaWQpIiwKICAgICAgICAiRW5kcyBzcGVjaWZpZWQgV0REWCBwYWNrZXQgYW5kIHJldHVybnMgdGhlIHN0cmluZyBjb250YWluaW5nIHRoZSBwYWNrZXQiCiAgICBdLAogICAgIndkZHhfcGFja2V0X3N0YXJ0IjogWwogICAgICAgICJyZXNvdXJjZSB3ZGR4X3BhY2tldF9zdGFydChbc3RyaW5nIGNvbW1lbnRdKSIsCiAgICAgICAgIlN0YXJ0cyBhIFdERFggcGFja2V0IHdpdGggb3B0aW9uYWwgY29tbWVudCBhbmQgcmV0dXJucyB0aGUgcGFja2V0IGlkIgogICAgXSwKICAgICJ3ZGR4X3NlcmlhbGl6ZV92YWx1ZSI6IFsKICAgICAgICAic3RyaW5nIHdkZHhfc2VyaWFsaXplX3ZhbHVlKG1peGVkIHZhciBbLCBzdHJpbmcgY29tbWVudF0pIiwKICAgICAgICAiQ3JlYXRlcyBhIG5ldyBwYWNrZXQgYW5kIHNlcmlhbGl6ZXMgdGhlIGdpdmVuIHZhbHVlIgogICAgXSwKICAgICJ3ZGR4X3NlcmlhbGl6ZV92YXJzIjogWwogICAgICAgICJzdHJpbmcgd2RkeF9zZXJpYWxpemVfdmFycyhtaXhlZCB2YXJfbmFtZSBbLCBtaXhlZCAuLi5dKSIsCiAgICAgICAgIkNyZWF0ZXMgYSBuZXcgcGFja2V0IGFuZCBzZXJpYWxpemVzIGdpdmVuIHZhcmlhYmxlcyBpbnRvIGEgc3RydWN0IgogICAgXSwKICAgICJ3b3Jkd3JhcCI6IFsKICAgICAgICAic3RyaW5nIHdvcmR3cmFwKHN0cmluZyBzdHIgWywgaW50IHdpZHRoIFssIHN0cmluZyBicmVhayBbLCBib29sZWFuIGN1dF1dXSkiLAogICAgICAgICJXcmFwcyBidWZmZXIgdG8gc2VsZWN0ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNpbmcgc3RyaW5nIGJyZWFrIGNoYXIiCiAgICBdLAogICAgInhtbF9lcnJvcl9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyB4bWxfZXJyb3Jfc3RyaW5nKGludCBjb2RlKSIsCiAgICAgICAgIkdldCBYTUwgcGFyc2VyIGVycm9yIHN0cmluZyIKICAgIF0sCiAgICAieG1sX2dldF9jdXJyZW50X2J5dGVfaW5kZXgiOiBbCiAgICAgICAgImludCB4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleChyZXNvdXJjZSBwYXJzZXIpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgYnl0ZSBpbmRleCBmb3IgYW4gWE1MIHBhcnNlciIKICAgIF0sCiAgICAieG1sX2dldF9jdXJyZW50X2NvbHVtbl9udW1iZXIiOiBbCiAgICAgICAgImludCB4bWxfZ2V0X2N1cnJlbnRfY29sdW1uX251bWJlcihyZXNvdXJjZSBwYXJzZXIpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgY29sdW1uIG51bWJlciBmb3IgYW4gWE1MIHBhcnNlciIKICAgIF0sCiAgICAieG1sX2dldF9jdXJyZW50X2xpbmVfbnVtYmVyIjogWwogICAgICAgICJpbnQgeG1sX2dldF9jdXJyZW50X2xpbmVfbnVtYmVyKHJlc291cmNlIHBhcnNlcikiLAogICAgICAgICJHZXQgY3VycmVudCBsaW5lIG51bWJlciBmb3IgYW4gWE1MIHBhcnNlciIKICAgIF0sCiAgICAieG1sX2dldF9lcnJvcl9jb2RlIjogWwogICAgICAgICJpbnQgeG1sX2dldF9lcnJvcl9jb2RlKHJlc291cmNlIHBhcnNlcikiLAogICAgICAgICJHZXQgWE1MIHBhcnNlciBlcnJvciBjb2RlIgogICAgXSwKICAgICJ4bWxfcGFyc2UiOiBbCiAgICAgICAgImludCB4bWxfcGFyc2UocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgZGF0YSBbLCBpbnQgaXNGaW5hbF0pIiwKICAgICAgICAiU3RhcnQgcGFyc2luZyBhbiBYTUwgZG9jdW1lbnQiCiAgICBdLAogICAgInhtbF9wYXJzZV9pbnRvX3N0cnVjdCI6IFsKICAgICAgICAiaW50IHhtbF9wYXJzZV9pbnRvX3N0cnVjdChyZXNvdXJjZSBwYXJzZXIsIHN0cmluZyBkYXRhLCBhcnJheSAmdmFsdWVzIFssIGFycmF5ICZpbmRleCBdKSIsCiAgICAgICAgIlBhcnNpbmcgYSBYTUwgZG9jdW1lbnQiCiAgICBdLAogICAgInhtbF9wYXJzZXJfY3JlYXRlIjogWwogICAgICAgICJyZXNvdXJjZSB4bWxfcGFyc2VyX2NyZWF0ZShbc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICJDcmVhdGUgYW4gWE1MIHBhcnNlciIKICAgIF0sCiAgICAieG1sX3BhcnNlcl9jcmVhdGVfbnMiOiBbCiAgICAgICAgInJlc291cmNlIHhtbF9wYXJzZXJfY3JlYXRlX25zKFtzdHJpbmcgZW5jb2RpbmcgWywgc3RyaW5nIHNlcF1dKSIsCiAgICAgICAgIkNyZWF0ZSBhbiBYTUwgcGFyc2VyIgogICAgXSwKICAgICJ4bWxfcGFyc2VyX2ZyZWUiOiBbCiAgICAgICAgImludCB4bWxfcGFyc2VyX2ZyZWUocmVzb3VyY2UgcGFyc2VyKSIsCiAgICAgICAgIkZyZWUgYW4gWE1MIHBhcnNlciIKICAgIF0sCiAgICAieG1sX3BhcnNlcl9nZXRfb3B0aW9uIjogWwogICAgICAgICJpbnQgeG1sX3BhcnNlcl9nZXRfb3B0aW9uKHJlc291cmNlIHBhcnNlciwgaW50IG9wdGlvbikiLAogICAgICAgICJHZXQgb3B0aW9ucyBmcm9tIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9wYXJzZXJfc2V0X29wdGlvbiI6IFsKICAgICAgICAiaW50IHhtbF9wYXJzZXJfc2V0X29wdGlvbihyZXNvdXJjZSBwYXJzZXIsIGludCBvcHRpb24sIG1peGVkIHZhbHVlKSIsCiAgICAgICAgIlNldCBvcHRpb25zIGluIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlciI6IFsKICAgICAgICAiaW50IHhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcihyZXNvdXJjZSBwYXJzZXIsIHN0cmluZyBoZGwpIiwKICAgICAgICAiU2V0IHVwIGNoYXJhY3RlciBkYXRhIGhhbmRsZXIiCiAgICBdLAogICAgInhtbF9zZXRfZGVmYXVsdF9oYW5kbGVyIjogWwogICAgICAgICJpbnQgeG1sX3NldF9kZWZhdWx0X2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgaGRsKSIsCiAgICAgICAgIlNldCB1cCBkZWZhdWx0IGhhbmRsZXIiCiAgICBdLAogICAgInhtbF9zZXRfZWxlbWVudF9oYW5kbGVyIjogWwogICAgICAgICJpbnQgeG1sX3NldF9lbGVtZW50X2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgc2hkbCwgc3RyaW5nIGVoZGwpIiwKICAgICAgICAiU2V0IHVwIHN0YXJ0IGFuZCBlbmQgZWxlbWVudCBoYW5kbGVycyIKICAgIF0sCiAgICAieG1sX3NldF9lbmRfbmFtZXNwYWNlX2RlY2xfaGFuZGxlciI6IFsKICAgICAgICAiaW50IHhtbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgaGRsKSIsCiAgICAgICAgIlNldCB1cCBjaGFyYWN0ZXIgZGF0YSBoYW5kbGVyIgogICAgXSwKICAgICJ4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9yZWZfaGFuZGxlciI6IFsKICAgICAgICAiaW50IHhtbF9zZXRfZXh0ZXJuYWxfZW50aXR5X3JlZl9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGhkbCkiLAogICAgICAgICJTZXQgdXAgZXh0ZXJuYWwgZW50aXR5IHJlZmVyZW5jZSBoYW5kbGVyIgogICAgXSwKICAgICJ4bWxfc2V0X25vdGF0aW9uX2RlY2xfaGFuZGxlciI6IFsKICAgICAgICAiaW50IHhtbF9zZXRfbm90YXRpb25fZGVjbF9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGhkbCkiLAogICAgICAgICJTZXQgdXAgbm90YXRpb24gZGVjbGFyYXRpb24gaGFuZGxlciIKICAgIF0sCiAgICAieG1sX3NldF9vYmplY3QiOiBbCiAgICAgICAgImludCB4bWxfc2V0X29iamVjdChyZXNvdXJjZSBwYXJzZXIsIG9iamVjdCAmb2JqKSIsCiAgICAgICAgIlNldCB1cCBvYmplY3Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgZm9yIGNhbGxiYWNrcyIKICAgIF0sCiAgICAieG1sX3NldF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25faGFuZGxlcihyZXNvdXJjZSBwYXJzZXIsIHN0cmluZyBoZGwpIiwKICAgICAgICAiU2V0IHVwIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gKFBJKSBoYW5kbGVyIgogICAgXSwKICAgICJ4bWxfc2V0X3N0YXJ0X25hbWVzcGFjZV9kZWNsX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X3N0YXJ0X25hbWVzcGFjZV9kZWNsX2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgaGRsKSIsCiAgICAgICAgIlNldCB1cCBjaGFyYWN0ZXIgZGF0YSBoYW5kbGVyIgogICAgXSwKICAgICJ4bWxfc2V0X3VucGFyc2VkX2VudGl0eV9kZWNsX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X3VucGFyc2VkX2VudGl0eV9kZWNsX2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgaGRsKSIsCiAgICAgICAgIlNldCB1cCB1bnBhcnNlZCBlbnRpdHkgZGVjbGFyYXRpb24gaGFuZGxlciIKICAgIF0sCiAgICAieG1scnBjX2RlY29kZSI6IFsKICAgICAgICAiYXJyYXkgeG1scnBjX2RlY29kZShzdHJpbmcgeG1sIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiRGVjb2RlcyBYTUwgaW50byBuYXRpdmUgUEhQIHR5cGVzIgogICAgXSwKICAgICJ4bWxycGNfZGVjb2RlX3JlcXVlc3QiOiBbCiAgICAgICAgImFycmF5IHhtbHJwY19kZWNvZGVfcmVxdWVzdChzdHJpbmcgeG1sLCBzdHJpbmcmIG1ldGhvZCBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIkRlY29kZXMgWE1MIGludG8gbmF0aXZlIFBIUCB0eXBlcyIKICAgIF0sCiAgICAieG1scnBjX2VuY29kZSI6IFsKICAgICAgICAic3RyaW5nIHhtbHJwY19lbmNvZGUobWl4ZWQgdmFsdWUpIiwKICAgICAgICAiR2VuZXJhdGVzIFhNTCBmb3IgYSBQSFAgdmFsdWUiCiAgICBdLAogICAgInhtbHJwY19lbmNvZGVfcmVxdWVzdCI6IFsKICAgICAgICAic3RyaW5nIHhtbHJwY19lbmNvZGVfcmVxdWVzdChzdHJpbmcgbWV0aG9kLCBtaXhlZCBwYXJhbXMgWywgYXJyYXkgb3V0cHV0X29wdGlvbnNdKSIsCiAgICAgICAgIkdlbmVyYXRlcyBYTUwgZm9yIGEgbWV0aG9kIHJlcXVlc3QiCiAgICBdLAogICAgInhtbHJwY19nZXRfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIHhtbHJwY19nZXRfdHlwZShtaXhlZCB2YWx1ZSkiLAogICAgICAgICJHZXRzIHhtbHJwYyB0eXBlIGZvciBhIFBIUCB2YWx1ZS4gRXNwZWNpYWxseSB1c2VmdWwgZm9yIGJhc2U2NCBhbmQgZGF0ZXRpbWUgc3RyaW5ncyIKICAgIF0sCiAgICAieG1scnBjX2lzX2ZhdWx0IjogWwogICAgICAgICJib29sIHhtbHJwY19pc19mYXVsdChhcnJheSkiLAogICAgICAgICJEZXRlcm1pbmVzIGlmIGFuIGFycmF5IHZhbHVlIHJlcHJlc2VudHMgYW4gWE1MUlBDIGZhdWx0LiIKICAgIF0sCiAgICAieG1scnBjX3BhcnNlX21ldGhvZF9kZXNjcmlwdGlvbnMiOiBbCiAgICAgICAgImFycmF5IHhtbHJwY19wYXJzZV9tZXRob2RfZGVzY3JpcHRpb25zKHN0cmluZyB4bWwpIiwKICAgICAgICAiRGVjb2RlcyBYTUwgaW50byBhIGxpc3Qgb2YgbWV0aG9kIGRlc2NyaXB0aW9ucyIKICAgIF0sCiAgICAieG1scnBjX3NlcnZlcl9hZGRfaW50cm9zcGVjdGlvbl9kYXRhIjogWwogICAgICAgICJpbnQgeG1scnBjX3NlcnZlcl9hZGRfaW50cm9zcGVjdGlvbl9kYXRhKHJlc291cmNlIHNlcnZlciwgYXJyYXkgZGVzYykiLAogICAgICAgICJBZGRzIGludHJvc3BlY3Rpb24gZG9jdW1lbnRhdGlvbiIKICAgIF0sCiAgICAieG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZCI6IFsKICAgICAgICAibWl4ZWQgeG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZChyZXNvdXJjZSBzZXJ2ZXIsIHN0cmluZyB4bWwsIG1peGVkIHVzZXJfZGF0YSBbLCBhcnJheSBvdXRwdXRfb3B0aW9uc10pIiwKICAgICAgICAiUGFyc2VzIFhNTCByZXF1ZXN0cyBhbmQgY2FsbCBtZXRob2RzIgogICAgXSwKICAgICJ4bWxycGNfc2VydmVyX2NyZWF0ZSI6IFsKICAgICAgICAicmVzb3VyY2UgeG1scnBjX3NlcnZlcl9jcmVhdGUodm9pZCkiLAogICAgICAgICJDcmVhdGVzIGFuIHhtbHJwYyBzZXJ2ZXIiCiAgICBdLAogICAgInhtbHJwY19zZXJ2ZXJfZGVzdHJveSI6IFsKICAgICAgICAiaW50IHhtbHJwY19zZXJ2ZXJfZGVzdHJveShyZXNvdXJjZSBzZXJ2ZXIpIiwKICAgICAgICAiRGVzdHJveXMgc2VydmVyIHJlc291cmNlcyIKICAgIF0sCiAgICAieG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9pbnRyb3NwZWN0aW9uX2NhbGxiYWNrIjogWwogICAgICAgICJib29sIHhtbHJwY19zZXJ2ZXJfcmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9jYWxsYmFjayhyZXNvdXJjZSBzZXJ2ZXIsIHN0cmluZyBmdW5jdGlvbikiLAogICAgICAgICJSZWdpc3RlciBhIFBIUCBmdW5jdGlvbiB0byBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uIgogICAgXSwKICAgICJ4bWxycGNfc2VydmVyX3JlZ2lzdGVyX21ldGhvZCI6IFsKICAgICAgICAiYm9vbCB4bWxycGNfc2VydmVyX3JlZ2lzdGVyX21ldGhvZChyZXNvdXJjZSBzZXJ2ZXIsIHN0cmluZyBtZXRob2RfbmFtZSwgc3RyaW5nIGZ1bmN0aW9uKSIsCiAgICAgICAgIlJlZ2lzdGVyIGEgUEhQIGZ1bmN0aW9uIHRvIGhhbmRsZSBtZXRob2QgbWF0Y2hpbmcgbWV0aG9kX25hbWUiCiAgICBdLAogICAgInhtbHJwY19zZXRfdHlwZSI6IFsKICAgICAgICAiYm9vbCB4bWxycGNfc2V0X3R5cGUoc3RyaW5nIHZhbHVlLCBzdHJpbmcgdHlwZSkiLAogICAgICAgICJTZXRzIHhtbHJwYyB0eXBlLCBiYXNlNjQgb3IgZGF0ZXRpbWUsIGZvciBhIFBIUCBzdHJpbmcgdmFsdWUiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfYXR0cmlidXRlIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9lbmRfYXR0cmlidXRlKHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJFbmQgYXR0cmlidXRlIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX2VuZF9jZGF0YSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZW5kX2NkYXRhKHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJFbmQgY3VycmVudCBDREFUQSAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfY29tbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZW5kX2NvbW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkNyZWF0ZSBlbmQgY29tbWVudCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfZG9jdW1lbnQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9kb2N1bWVudChyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgZG9jdW1lbnQgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX2R0ZCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZW5kX2R0ZChyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgRFREIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX2VuZF9kdGRfYXR0bGlzdCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZW5kX2R0ZF9hdHRsaXN0KHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJFbmQgY3VycmVudCBEVEQgQXR0TGlzdCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfZHRkX2VsZW1lbnQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9kdGRfZWxlbWVudChyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgRFREIGVsZW1lbnQgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX2R0ZF9lbnRpdHkiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9kdGRfZW50aXR5KHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJFbmQgY3VycmVudCBEVEQgRW50aXR5IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX2VuZF9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9lbmRfZWxlbWVudChyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgZWxlbWVudCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfcGkiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9waShyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgUEkgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZmx1c2giOiBbCiAgICAgICAgIm1peGVkIHhtbHdyaXRlcl9mbHVzaChyZXNvdXJjZSB4bWx3cml0ZXIgWyxib29sIGVtcHR5XSkiLAogICAgICAgICJPdXRwdXQgY3VycmVudCBidWZmZXIiCiAgICBdLAogICAgInhtbHdyaXRlcl9mdWxsX2VuZF9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9mdWxsX2VuZF9lbGVtZW50KHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJFbmQgY3VycmVudCBlbGVtZW50IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX29wZW5fbWVtb3J5IjogWwogICAgICAgICJyZXNvdXJjZSB4bWx3cml0ZXJfb3Blbl9tZW1vcnkoKSIsCiAgICAgICAgIkNyZWF0ZSBuZXcgeG1sd3JpdGVyIHVzaW5nIG1lbW9yeSBmb3Igc3RyaW5nIG91dHB1dCIKICAgIF0sCiAgICAieG1sd3JpdGVyX29wZW5fdXJpIjogWwogICAgICAgICJyZXNvdXJjZSB4bWx3cml0ZXJfb3Blbl91cmkocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgc291cmNlKSIsCiAgICAgICAgIkNyZWF0ZSBuZXcgeG1sd3JpdGVyIHVzaW5nIHNvdXJjZSB1cmkgZm9yIG91dHB1dCIKICAgIF0sCiAgICAieG1sd3JpdGVyX291dHB1dF9tZW1vcnkiOiBbCiAgICAgICAgInN0cmluZyB4bWx3cml0ZXJfb3V0cHV0X21lbW9yeShyZXNvdXJjZSB4bWx3cml0ZXIgWyxib29sIGZsdXNoXSkiLAogICAgICAgICJPdXRwdXQgY3VycmVudCBidWZmZXIgYXMgc3RyaW5nIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc2V0X2luZGVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc2V0X2luZGVudChyZXNvdXJjZSB4bWx3cml0ZXIsIGJvb2wgaW5kZW50KSIsCiAgICAgICAgIlRvZ2dsZSBpbmRlbnRhdGlvbiBvbi9vZmYgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc2V0X2luZGVudF9zdHJpbmciOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3NldF9pbmRlbnRfc3RyaW5nKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIGluZGVudFN0cmluZykiLAogICAgICAgICJTZXQgc3RyaW5nIHVzZWQgZm9yIGluZGVudGluZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZShyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBhdHRyaWJ1dGUgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfYXR0cmlidXRlX25zIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGVfbnMocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgcHJlZml4LCBzdHJpbmcgbmFtZSwgc3RyaW5nIHVyaSkiLAogICAgICAgICJDcmVhdGUgc3RhcnQgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfY2RhdGEiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3N0YXJ0X2NkYXRhKHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJDcmVhdGUgc3RhcnQgQ0RBVEEgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2NvbW1lbnQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3N0YXJ0X2NvbW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBjb21tZW50IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2RvY3VtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9kb2N1bWVudChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyB2ZXJzaW9uLCBzdHJpbmcgZW5jb2RpbmcsIHN0cmluZyBzdGFuZGFsb25lKSIsCiAgICAgICAgIkNyZWF0ZSBkb2N1bWVudCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfZHRkIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9kdGQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHB1YmlkLCBzdHJpbmcgc3lzaWQpIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IERURCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfZHRkX2F0dGxpc3QiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3N0YXJ0X2R0ZF9hdHRsaXN0KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUpIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IERURCBBdHRMaXN0IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2R0ZF9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9kdGRfZWxlbWVudChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBEVEQgZWxlbWVudCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9kdGRfZW50aXR5IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9kdGRfZW50aXR5KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUsIGJvb2wgaXNwYXJhbSkiLAogICAgICAgICJDcmVhdGUgc3RhcnQgRFREIEVudGl0eSAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9lbGVtZW50KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUpIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IGVsZW1lbnQgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2VsZW1lbnRfbnMiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3N0YXJ0X2VsZW1lbnRfbnMocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgcHJlZml4LCBzdHJpbmcgbmFtZSwgc3RyaW5nIHVyaSkiLAogICAgICAgICJDcmVhdGUgc3RhcnQgbmFtZXNwYWNlZCBlbGVtZW50IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9waSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfcGkocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgdGFyZ2V0KSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBQSSB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfdGV4dCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfdGV4dChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIldyaXRlIHRleHQgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGUocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZSwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBhdHRyaWJ1dGUgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlX25zIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGVfbnMocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgcHJlZml4LCBzdHJpbmcgbmFtZSwgc3RyaW5nIHVyaSwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBuYW1lc3BhY2VkIGF0dHJpYnV0ZSAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9jZGF0YSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfY2RhdGEocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgY29udGVudCkiLAogICAgICAgICJXcml0ZSBmdWxsIENEQVRBIHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9jb21tZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9jb21tZW50KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBjb21tZW50IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9kdGQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3dyaXRlX2R0ZChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lLCBzdHJpbmcgcHViaWQsIHN0cmluZyBzeXNpZCwgc3RyaW5nIHN1YnNldCkiLAogICAgICAgICJXcml0ZSBmdWxsIERURCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfZHRkX2F0dGxpc3QiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3dyaXRlX2R0ZF9hdHRsaXN0KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUsIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIldyaXRlIGZ1bGwgRFREIEF0dExpc3QgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX2R0ZF9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9kdGRfZWxlbWVudChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lLCBzdHJpbmcgY29udGVudCkiLAogICAgICAgICJXcml0ZSBmdWxsIERURCBlbGVtZW50IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9kdGRfZW50aXR5IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9kdGRfZW50aXR5KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUsIHN0cmluZyBjb250ZW50IFssIGludCBwZSBbLCBzdHJpbmcgcHViaWQgWywgc3RyaW5nIHN5c2lkIFssIHN0cmluZyBuZGF0YWlkXV1dXSkiLAogICAgICAgICJXcml0ZSBmdWxsIERURCBFbnRpdHkgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX2VsZW1lbnQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3dyaXRlX2VsZW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZVssIHN0cmluZyBjb250ZW50XSkiLAogICAgICAgICJXcml0ZSBmdWxsIGVsZW1lbnQgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX2VsZW1lbnRfbnMiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3dyaXRlX2VsZW1lbnRfbnMocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgcHJlZml4LCBzdHJpbmcgbmFtZSwgc3RyaW5nIHVyaVssIHN0cmluZyBjb250ZW50XSkiLAogICAgICAgICJXcml0ZSBmdWxsIG5hbWVzcGFjZWQgZWxlbWVudCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfcGkiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3dyaXRlX3BpKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHRhcmdldCwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBQSSB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfcmF3IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9yYXcocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgY29udGVudCkiLAogICAgICAgICJXcml0ZSB0ZXh0IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3JfZ2V0X3BhcmFtZXRlciI6IFsKICAgICAgICAic3RyaW5nIHhzbF94c2x0cHJvY2Vzc29yX2dldF9wYXJhbWV0ZXIoc3RyaW5nIG5hbWVzcGFjZSwgc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIiIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3JfaGFzX2V4c2x0X3N1cHBvcnQiOiBbCiAgICAgICAgImJvb2wgeHNsX3hzbHRwcm9jZXNzb3JfaGFzX2V4c2x0X3N1cHBvcnQoKTsiLAogICAgICAgICIiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX2ltcG9ydF9zdHlsZXNoZWV0IjogWwogICAgICAgICJ2b2lkIHhzbF94c2x0cHJvY2Vzc29yX2ltcG9ydF9zdHlsZXNoZWV0KGRvbWRvY3VtZW50IGRvYyk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjIFNpbmNlOiIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3JfcmVnaXN0ZXJfcGhwX2Z1bmN0aW9ucyI6IFsKICAgICAgICAidm9pZCB4c2xfeHNsdHByb2Nlc3Nvcl9yZWdpc3Rlcl9waHBfZnVuY3Rpb25zKFttaXhlZCAkcmVzdHJpY3RdKTsiLAogICAgICAgICIiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX3JlbW92ZV9wYXJhbWV0ZXIiOiBbCiAgICAgICAgImJvb2wgeHNsX3hzbHRwcm9jZXNzb3JfcmVtb3ZlX3BhcmFtZXRlcihzdHJpbmcgbmFtZXNwYWNlLCBzdHJpbmcgbmFtZSk7IiwKICAgICAgICAiIgogICAgXSwKICAgICJ4c2xfeHNsdHByb2Nlc3Nvcl9zZXRfcGFyYW1ldGVyIjogWwogICAgICAgICJib29sIHhzbF94c2x0cHJvY2Vzc29yX3NldF9wYXJhbWV0ZXIoc3RyaW5nIG5hbWVzcGFjZSwgbWl4ZWQgbmFtZSBbLCBzdHJpbmcgdmFsdWVdKTsiLAogICAgICAgICIiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX3NldF9wcm9maWxpbmciOiBbCiAgICAgICAgImJvb2wgeHNsX3hzbHRwcm9jZXNzb3Jfc2V0X3Byb2ZpbGluZyhzdHJpbmcgZmlsZW5hbWUpICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKHhzbF94c2x0cHJvY2Vzc29yX3NldF9wcm9maWxpbmcpIHsgIHp2YWwgKmlkOyAgeHNsX29iamVjdCAqaW50ZXJuOyAgY2hhciAqZmlsZW5hbWUgPSBOVUxMOyAgaW50IGZpbGVuYW1lX2xlbjsgIERPTV9HRVRfVEhJUyhpZCk7ICAgaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVyc19leChaRU5EX1BBUlNFX1BBUkFNU19RVUlFVCwgWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgXCJzIVwiLCAmZmlsZW5hbWUsICZmaWxlbmFtZV9sZW4pID09IFNVQ0NFU1MpIHsgICBpbnRlcm4gPSAoeHNsX29iamVjdCAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3QoaWQgVFNSTUxTX0NDKTsgICBpZiAoaW50ZXJuLT5wcm9maWxpbmcpIHsgICAgZWZyZWUoaW50ZXJuLT5wcm9maWxpbmcpOyAgIH0gICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgeyAgICBpbnRlcm4tPnByb2ZpbGluZyA9IGVzdHJuZHVwKGZpbGVuYW1lLGZpbGVuYW1lX2xlbik7ICAgfSBlbHNlIHsgICAgaW50ZXJuLT5wcm9maWxpbmcgPSBOVUxMOyAgIH0gICBSRVRVUk5fVFJVRTsgIH0gZWxzZSB7ICAgV1JPTkdfUEFSQU1fQ09VTlQ7ICB9IH0gLyogfX19IGVuZCB4c2xfeHNsdHByb2Nlc3Nvcl9zZXRfcHJvZmlsaW5nIgogICAgXSwKICAgICJ4c2xfeHNsdHByb2Nlc3Nvcl90cmFuc2Zvcm1fdG9fZG9jIjogWwogICAgICAgICJkb21kb2N1bWVudCB4c2xfeHNsdHByb2Nlc3Nvcl90cmFuc2Zvcm1fdG9fZG9jKGRvbW5vZGUgZG9jKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCMgU2luY2U6IgogICAgXSwKICAgICJ4c2xfeHNsdHByb2Nlc3Nvcl90cmFuc2Zvcm1fdG9fdXJpIjogWwogICAgICAgICJpbnQgeHNsX3hzbHRwcm9jZXNzb3JfdHJhbnNmb3JtX3RvX3VyaShkb21kb2N1bWVudCBkb2MsIHN0cmluZyB1cmkpOyIsCiAgICAgICAgIiIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3JfdHJhbnNmb3JtX3RvX3htbCI6IFsKICAgICAgICAic3RyaW5nIHhzbF94c2x0cHJvY2Vzc29yX3RyYW5zZm9ybV90b194bWwoZG9tZG9jdW1lbnQgZG9jKTsiLAogICAgICAgICIiCiAgICBdLAogICAgInplbmRfbG9nb19ndWlkIjogWwogICAgICAgICJzdHJpbmcgemVuZF9sb2dvX2d1aWQodm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIHNwZWNpYWwgSUQgdXNlZCB0byByZXF1ZXN0IHRoZSBaZW5kIGxvZ28gaW4gcGhwaW5mbyBzY3JlZW5zIgogICAgXSwKICAgICJ6ZW5kX3ZlcnNpb24iOiBbCiAgICAgICAgInN0cmluZyB6ZW5kX3ZlcnNpb24odm9pZCkiLAogICAgICAgICJHZXQgdGhlIHZlcnNpb24gb2YgdGhlIFplbmQgRW5naW5lIgogICAgXSwKICAgICJ6aXBfY2xvc2UiOiBbCiAgICAgICAgInZvaWQgemlwX2Nsb3NlKHJlc291cmNlIHppcCkiLAogICAgICAgICJDbG9zZSBhIFppcCBhcmNoaXZlIgogICAgXSwKICAgICJ6aXBfZW50cnlfY2xvc2UiOiBbCiAgICAgICAgInZvaWQgemlwX2VudHJ5X2Nsb3NlKHJlc291cmNlIHppcF9lbnQpIiwKICAgICAgICAiQ2xvc2UgYSB6aXAgZW50cnkiCiAgICBdLAogICAgInppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSI6IFsKICAgICAgICAiaW50IHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZShyZXNvdXJjZSB6aXBfZW50cnkpIiwKICAgICAgICAiUmV0dXJuIHRoZSBjb21wcmVzc2VkIHNpemUgb2YgYSBaWmlwIGVudHJ5IgogICAgXSwKICAgICJ6aXBfZW50cnlfY29tcHJlc3Npb25tZXRob2QiOiBbCiAgICAgICAgInN0cmluZyB6aXBfZW50cnlfY29tcHJlc3Npb25tZXRob2QocmVzb3VyY2UgemlwX2VudHJ5KSIsCiAgICAgICAgIlJldHVybiBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgdXNlZCBvbiBhIHBhcnRpY3VsYXIgZW50cnkiCiAgICBdLAogICAgInppcF9lbnRyeV9maWxlc2l6ZSI6IFsKICAgICAgICAiaW50IHppcF9lbnRyeV9maWxlc2l6ZShyZXNvdXJjZSB6aXBfZW50cnkpIiwKICAgICAgICAiUmV0dXJuIHRoZSBhY3R1YWwgZmlsZXNpemUgb2YgYSBaWmlwIGVudHJ5IgogICAgXSwKICAgICJ6aXBfZW50cnlfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIHppcF9lbnRyeV9uYW1lKHJlc291cmNlIHppcF9lbnRyeSkiLAogICAgICAgICJSZXR1cm4gdGhlIG5hbWUgZ2l2ZW4gYSBaWmlwIGVudHJ5IgogICAgXSwKICAgICJ6aXBfZW50cnlfb3BlbiI6IFsKICAgICAgICAiYm9vbCB6aXBfZW50cnlfb3BlbihyZXNvdXJjZSB6aXBfZHAsIHJlc291cmNlIHppcF9lbnRyeSBbLCBzdHJpbmcgbW9kZV0pIiwKICAgICAgICAiT3BlbiBhIFppcCBGaWxlLCBwb2ludGVkIGJ5IHRoZSByZXNvdXJjZSBlbnRyeSIKICAgIF0sCiAgICAiemlwX2VudHJ5X3JlYWQiOiBbCiAgICAgICAgIm1peGVkIHppcF9lbnRyeV9yZWFkKHJlc291cmNlIHppcF9lbnRyeSBbLCBpbnQgbGVuXSkiLAogICAgICAgICJSZWFkIGZyb20gYW4gb3BlbiBkaXJlY3RvcnkgZW50cnkiCiAgICBdLAogICAgInppcF9vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSB6aXBfb3BlbihzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIG5ldyB6aXAgdXNpbmcgc291cmNlIHVyaSBmb3Igb3V0cHV0IgogICAgXSwKICAgICJ6aXBfcmVhZCI6IFsKICAgICAgICAicmVzb3VyY2UgemlwX3JlYWQocmVzb3VyY2UgemlwKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5leHQgZmlsZSBpbiB0aGUgYXJjaGl2ZSIKICAgIF0sCiAgICAiemxpYl9nZXRfY29kaW5nX3R5cGUiOiBbCiAgICAgICAgInN0cmluZyB6bGliX2dldF9jb2RpbmdfdHlwZSh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGNvZGluZyB0eXBlIHVzZWQgZm9yIG91dHB1dCBjb21wcmVzc2lvbiIKICAgIF0KfTsKCnZhciB2YXJpYWJsZU1hcCA9IHsKICAgICIkX0NPT0tJRSI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9LAogICAgIiRfRU5WIjogewogICAgICAgIHR5cGU6ICJhcnJheSIKICAgIH0sCiAgICAiJF9GSUxFUyI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9LAogICAgIiRfR0VUIjogewogICAgICAgIHR5cGU6ICJhcnJheSIKICAgIH0sCiAgICAiJF9QT1NUIjogewogICAgICAgIHR5cGU6ICJhcnJheSIKICAgIH0sCiAgICAiJF9SRVFVRVNUIjogewogICAgICAgIHR5cGU6ICJhcnJheSIKICAgIH0sCiAgICAiJF9TRVJWRVIiOiB7CiAgICAgICAgdHlwZTogImFycmF5IiwKICAgICAgICB2YWx1ZTogewogICAgICAgICAgICAiRE9DVU1FTlRfUk9PVCI6ICAxLAogICAgICAgICAgICAiR0FURVdBWV9JTlRFUkZBQ0UiOiAgMSwKICAgICAgICAgICAgIkhUVFBfQUNDRVBUIjogIDEsCiAgICAgICAgICAgICJIVFRQX0FDQ0VQVF9DSEFSU0VUIjogIDEsCiAgICAgICAgICAgICJIVFRQX0FDQ0VQVF9FTkNPRElORyI6ICAxICwKICAgICAgICAgICAgIkhUVFBfQUNDRVBUX0xBTkdVQUdFIjogIDEsCiAgICAgICAgICAgICJIVFRQX0NPTk5FQ1RJT04iOiAgMSwKICAgICAgICAgICAgIkhUVFBfSE9TVCI6ICAxLAogICAgICAgICAgICAiSFRUUF9SRUZFUkVSIjogIDEsCiAgICAgICAgICAgICJIVFRQX1VTRVJfQUdFTlQiOiAgMSwKICAgICAgICAgICAgIlBBVEhfVFJBTlNMQVRFRCI6ICAxLAogICAgICAgICAgICAiUEhQX1NFTEYiOiAgMSwKICAgICAgICAgICAgIlFVRVJZX1NUUklORyI6ICAxLAogICAgICAgICAgICAiUkVNT1RFX0FERFIiOiAgMSwKICAgICAgICAgICAgIlJFTU9URV9QT1JUIjogIDEsCiAgICAgICAgICAgICJSRVFVRVNUX01FVEhPRCI6ICAxLAogICAgICAgICAgICAiUkVRVUVTVF9VUkkiOiAgMSwKICAgICAgICAgICAgIlNDUklQVF9GSUxFTkFNRSI6ICAxLAogICAgICAgICAgICAiU0NSSVBUX05BTUUiOiAgMSwKICAgICAgICAgICAgIlNFUlZFUl9BRE1JTiI6ICAxLAogICAgICAgICAgICAiU0VSVkVSX05BTUUiOiAgMSwKICAgICAgICAgICAgIlNFUlZFUl9QT1JUIjogIDEsCiAgICAgICAgICAgICJTRVJWRVJfUFJPVE9DT0wiOiAgMSwKICAgICAgICAgICAgIlNFUlZFUl9TSUdOQVRVUkUiOiAgMSwKICAgICAgICAgICAgIlNFUlZFUl9TT0ZUV0FSRSI6ICAxCiAgICAgICAgfQogICAgfSwKICAgICIkX1NFU1NJT04iOiB7CiAgICAgICAgdHlwZTogImFycmF5IgogICAgfSwKICAgICIkR0xPQkFMUyI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9Cn07CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSkgPiAtMTsKfQoKdmFyIFBocENvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7Cgp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQocG9zLnJvdywgcG9zLmNvbHVtbik7CgogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAKICAgICAgICBpZiAodG9rZW4udHlwZT09PSdzdXBwb3J0LnBocF90YWcnICYmIHRva2VuLnZhbHVlPT09Jzw/JykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICBpZiAodG9rZW4udHlwZT09PSdpZGVudGlmaWVyJykgewogICAgICAgICAgICBpZiAodG9rZW4uaW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgICB2YXIgcHJldlRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHBvcy5yb3csIHRva2VuLnN0YXJ0KTsKICAgICAgICAgICAgICAgIGlmIChwcmV2VG9rZW4udHlwZT09PSdzdXBwb3J0LnBocF90YWcnKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGdW5jdGlvbkNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgfQogICAgICAgIGlmIChpcyh0b2tlbiwgInZhcmlhYmxlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKHRva2VuLnR5cGU9PT0nc3RyaW5nJyAmJiAvKFwkW1x3XSopXFtbIiddKFteJyJdKikkL2kudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXJyYXlLZXlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwogICAgCiAgICB0aGlzLmdldFRhZ0NvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgIGNhcHRpb246ICdwaHAnLAogICAgICAgICAgICB2YWx1ZTogJ3BocCcsCiAgICAgICAgICAgIG1ldGE6ICJwaHAgdGFnIiwKICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhcHRpb246ICc9JywKICAgICAgICAgICAgdmFsdWU6ICc9JywKICAgICAgICAgICAgbWV0YTogInBocCB0YWciLAogICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgIH1dOwogICAgfTsKCiAgICB0aGlzLmdldEZ1bmN0aW9uQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgZnVuY3Rpb25zID0gT2JqZWN0LmtleXMoZnVuY3Rpb25NYXApOwogICAgICAgIHJldHVybiBmdW5jdGlvbnMubWFwKGZ1bmN0aW9uKGZ1bmMpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogZnVuYywKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IGZ1bmMgKyAnKCQwKScsCiAgICAgICAgICAgICAgICBtZXRhOiAicGhwIGZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwLAogICAgICAgICAgICAgICAgZG9jSFRNTDogZnVuY3Rpb25NYXBbZnVuY11bMV0KICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRWYXJpYWJsZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhcmlhYmxlcyA9IE9iamVjdC5rZXlzKHZhcmlhYmxlTWFwKTsKICAgICAgICByZXR1cm4gdmFyaWFibGVzLm1hcChmdW5jdGlvbih2YXJpYWJsZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YXJpYWJsZSwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YXJpYWJsZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJwaHAgdmFyaWFibGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBcnJheUtleUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIHZhciB2YXJpYWJsZSA9IGxpbmUubWF0Y2goLyhcJFtcd10qKVxbWyInXShbXiciXSopJC9pKVsxXTsKCiAgICAgICAgaWYgKCF2YXJpYWJsZU1hcFt2YXJpYWJsZV0pIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgdmFyIGtleXMgPSBbXTsKICAgICAgICBpZiAodmFyaWFibGVNYXBbdmFyaWFibGVdLnR5cGU9PT0nYXJyYXknICYmIHZhcmlhYmxlTWFwW3ZhcmlhYmxlXS52YWx1ZSkKICAgICAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhcmlhYmxlTWFwW3ZhcmlhYmxlXS52YWx1ZSk7CgogICAgICAgIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IGtleSwKICAgICAgICAgICAgICAgIHZhbHVlOiBrZXksCiAgICAgICAgICAgICAgICBtZXRhOiAicGhwIGFycmF5IGtleSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoUGhwQ29tcGxldGlvbnMucHJvdG90eXBlKTsKCmV4cG9ydHMuUGhwQ29tcGxldGlvbnMgPSBQaHBDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kcXVvdGVzID0geyciJzogJyInLCAiJyI6ICInIiwgImAiOiAiYCJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qOnxbXHtcKFxbXSlccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgZW5kU3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24ocmVzdWx0cykgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKHJlc3VsdHMuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qYXZhc2NyaXB0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgcHJvcGVydHlNYXAgPSB7CiAgICAiYmFja2dyb3VuZCI6IHsiIyQwIjogMX0sCiAgICAiYmFja2dyb3VuZC1jb2xvciI6IHsiIyQwIjogMSwgInRyYW5zcGFyZW50IjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1pbWFnZSI6IHsidXJsKCcvJDAnKSI6IDF9LAogICAgImJhY2tncm91bmQtcmVwZWF0IjogeyJyZXBlYXQiOiAxLCAicmVwZWF0LXgiOiAxLCAicmVwZWF0LXkiOiAxLCAibm8tcmVwZWF0IjogMSwgImluaGVyaXQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXBvc2l0aW9uIjogeyJib3R0b20iOjIsICJjZW50ZXIiOjIsICJsZWZ0IjoyLCAicmlnaHQiOjIsICJ0b3AiOjIsICJpbmhlcml0IjoyfSwKICAgICJiYWNrZ3JvdW5kLWF0dGFjaG1lbnQiOiB7InNjcm9sbCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtc2l6ZSI6IHsiY292ZXIiOiAxLCAiY29udGFpbiI6IDF9LAogICAgImJhY2tncm91bmQtY2xpcCI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJhY2tncm91bmQtb3JpZ2luIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYm9yZGVyIjogeyJzb2xpZCAkMCI6IDEsICJkYXNoZWQgJDAiOiAxLCAiZG90dGVkICQwIjogMSwgIiMkMCI6IDF9LAogICAgImJvcmRlci1jb2xvciI6IHsiIyQwIjogMX0sCiAgICAiYm9yZGVyLXN0eWxlIjogeyJzb2xpZCI6MiwgImRhc2hlZCI6MiwgImRvdHRlZCI6MiwgImRvdWJsZSI6MiwgImdyb292ZSI6MiwgImhpZGRlbiI6MiwgImluaGVyaXQiOjIsICJpbnNldCI6MiwgIm5vbmUiOjIsICJvdXRzZXQiOjIsICJyaWRnZWQiOjJ9LAogICAgImJvcmRlci1jb2xsYXBzZSI6IHsiY29sbGFwc2UiOiAxLCAic2VwYXJhdGUiOiAxfSwKICAgICJib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJjbGVhciI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJib3RoIjogMSwgIm5vbmUiOiAxfSwKICAgICJjb2xvciI6IHsiIyQwIjogMSwgInJnYigjJDAwLDAsMCkiOiAxfSwKICAgICJjdXJzb3IiOiB7ImRlZmF1bHQiOiAxLCAicG9pbnRlciI6IDEsICJtb3ZlIjogMSwgInRleHQiOiAxLCAid2FpdCI6IDEsICJoZWxwIjogMSwgInByb2dyZXNzIjogMSwgIm4tcmVzaXplIjogMSwgIm5lLXJlc2l6ZSI6IDEsICJlLXJlc2l6ZSI6IDEsICJzZS1yZXNpemUiOiAxLCAicy1yZXNpemUiOiAxLCAic3ctcmVzaXplIjogMSwgInctcmVzaXplIjogMSwgIm53LXJlc2l6ZSI6IDF9LAogICAgImRpc3BsYXkiOiB7Im5vbmUiOiAxLCAiYmxvY2siOiAxLCAiaW5saW5lIjogMSwgImlubGluZS1ibG9jayI6IDEsICJ0YWJsZS1jZWxsIjogMX0sCiAgICAiZW1wdHktY2VsbHMiOiB7InNob3ciOiAxLCAiaGlkZSI6IDF9LAogICAgImZsb2F0IjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgIm5vbmUiOiAxfSwKICAgICJmb250LWZhbWlseSI6IHsiQXJpYWwiOjIsIkNvbWljIFNhbnMgTVMiOjIsIkNvbnNvbGFzIjoyLCJDb3VyaWVyIE5ldyI6MiwiQ291cmllciI6MiwiR2VvcmdpYSI6MiwiTW9ub3NwYWNlIjoyLCJTYW5zLVNlcmlmIjoyLCAiU2Vnb2UgVUkiOjIsIlRhaG9tYSI6MiwiVGltZXMgTmV3IFJvbWFuIjoyLCJUcmVidWNoZXQgTVMiOjIsIlZlcmRhbmEiOiAxfSwKICAgICJmb250LXNpemUiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJmb250LXdlaWdodCI6IHsiYm9sZCI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXN0eWxlIjogeyJpdGFsaWMiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC12YXJpYW50IjogeyJub3JtYWwiOiAxLCAic21hbGwtY2FwcyI6IDF9LAogICAgImhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZXR0ZXItc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAibGluZS1oZWlnaHQiOiB7Im5vcm1hbCI6IDF9LAogICAgImxpc3Qtc3R5bGUtdHlwZSI6IHsibm9uZSI6IDEsICJkaXNjIjogMSwgImNpcmNsZSI6IDEsICJzcXVhcmUiOiAxLCAiZGVjaW1hbCI6IDEsICJkZWNpbWFsLWxlYWRpbmctemVybyI6IDEsICJsb3dlci1yb21hbiI6IDEsICJ1cHBlci1yb21hbiI6IDEsICJsb3dlci1ncmVlayI6IDEsICJsb3dlci1sYXRpbiI6IDEsICJ1cHBlci1sYXRpbiI6IDEsICJnZW9yZ2lhbiI6IDEsICJsb3dlci1hbHBoYSI6IDEsICJ1cHBlci1hbHBoYSI6IDF9LAogICAgIm1hcmdpbiI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm92ZXJmbG93IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXgiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJwYWRkaW5nIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1ib3R0b20iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWdlLWJyZWFrLWFmdGVyIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicGFnZS1icmVhay1iZWZvcmUiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwb3NpdGlvbiI6IHsiYWJzb2x1dGUiOiAxLCAicmVsYXRpdmUiOiAxLCAiZml4ZWQiOiAxLCAic3RhdGljIjogMX0sCiAgICAicmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ0YWJsZS1sYXlvdXQiOiB7ImZpeGVkIjogMSwgImF1dG8iOiAxfSwKICAgICJ0ZXh0LWRlY29yYXRpb24iOiB7Im5vbmUiOiAxLCAidW5kZXJsaW5lIjogMSwgImxpbmUtdGhyb3VnaCI6IDEsICJibGluayI6IDF9LAogICAgInRleHQtYWxpZ24iOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiY2VudGVyIjogMSwgImp1c3RpZnkiOiAxfSwKICAgICJ0ZXh0LXRyYW5zZm9ybSI6IHsiY2FwaXRhbGl6ZSI6IDEsICJ1cHBlcmNhc2UiOiAxLCAibG93ZXJjYXNlIjogMSwgIm5vbmUiOiAxfSwKICAgICJ0b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ2ZXJ0aWNhbC1hbGlnbiI6IHsidG9wIjogMSwgImJvdHRvbSI6IDF9LAogICAgInZpc2liaWxpdHkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMX0sCiAgICAid2hpdGUtc3BhY2UiOiB7Im5vd3JhcCI6IDEsICJub3JtYWwiOiAxLCAicHJlIjogMSwgInByZS1saW5lIjogMSwgInByZS13cmFwIjogMX0sCiAgICAid2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJ3b3JkLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImZpbHRlciI6IHsiYWxwaGEob3BhY2l0eT0kMDEwMCkiOiAxfSwKCiAgICAidGV4dC1zaGFkb3ciOiB7IiQwMnB4IDJweCAycHggIzc3NyI6IDF9LAogICAgInRleHQtb3ZlcmZsb3ciOiB7ImVsbGlwc2lzLXdvcmQiOiAxLCAiY2xpcCI6IDEsICJlbGxpcHNpcyI6IDF9LAogICAgIi1tb3otYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdCI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLW1vei1ib3gtc2hhZG93IjogMSwKICAgICItd2Via2l0LWJveC1zaGFkb3ciOiAxLAogICAgInRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLW1vei10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi13ZWJraXQtdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxIH0KfTsKCnZhciBDc3NDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IGZhbHNlOwoKICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoZG9jdW1lbnQpIHsKICAgICAgICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYycpLnN0eWxlOwoKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzdHlsZSkgewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHlsZVtpXSAhPT0gJ3N0cmluZycpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBpLnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJy0nICsgeC50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eU1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU1hcFtuYW1lXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIGlmICghdGhpcy5jb21wbGV0aW9uc0RlZmluZWQpIHsKICAgICAgICAgICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucygpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlPT09J3J1bGVzZXQnIHx8IHNlc3Npb24uJG1vZGUuJGlkID09ICJhY2UvbW9kZS9zY3NzIikgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgICAgIGlmICgvOlteO10rJC8udGVzdChsaW5lKSkgewogICAgICAgICAgICAgICAgLyhbXHdcLV0rKTpbXjpdKiQvLnRlc3QobGluZSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbXTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcCk7CiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uKHByb3BlcnR5KXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHByb3BlcnR5LAogICAgICAgICAgICAgICAgc25pcHBldDogcHJvcGVydHkgKyAnOiAkMDsnLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIHZhciBwcm9wZXJ0eSA9ICgvKFtcd1wtXSspOlteOl0qJC8uZXhlYyhsaW5lKSB8fCB7fSlbMV07CgogICAgICAgIGlmICghcHJvcGVydHkpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHByb3BlcnR5IGluIHByb3BlcnR5TWFwICYmIHR5cGVvZiBwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkgdmFsdWUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKENzc0NvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkNzc0NvbXBsZXRpb25zID0gQ3NzQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIENzc0JlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmluaGVyaXQoQ3N0eWxlQmVoYXZpb3VyKTsKCiAgICB0aGlzLmFkZCgiY29sb24iLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnOicgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZS5tYXRjaCgvXHMrLykpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUgPT09ICdzdXBwb3J0LnR5cGUnKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoL14oXHMrW147XXxccyokKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc6OycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiBzZWxlY3RlZCA9PT0gJzonKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2UuZW5kLmNvbHVtbiwgcmFuZ2UuZW5kLmNvbHVtbiArIDEpOwogICAgICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbiArKzsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic2VtaWNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzsnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09PSAnOycpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoIiFpbXBvcnRhbnQiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09PSAnIScgJiYgZWRpdG9yLnNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CgogICAgICAgICAgICBpZiAoL15ccyooO3x9fCQpLy50ZXN0KGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4pKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnIWltcG9ydGFudCcsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMTAsIDEwXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKb29wLmluaGVyaXRzKENzc0JlaGF2aW91ciwgQ3N0eWxlQmVoYXZpb3VyKTsKCmV4cG9ydHMuQ3NzQmVoYXZpb3VyID0gQ3NzQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3NzQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2Nzc19jb21wbGV0aW9ucyIpLkNzc0NvbXBsZXRpb25zOwp2YXIgQ3NzQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3NzIikuQ3NzQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IENzc0NvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gImNTdHlsZSI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xzKiQvKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvY3NzX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9jc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9waHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9waHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvcGhwX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9waHBfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvdW5pY29kZSIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUGhwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3BocF9oaWdobGlnaHRfcnVsZXMiKS5QaHBIaWdobGlnaHRSdWxlczsKdmFyIFBocExhbmdIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcGhwX2hpZ2hsaWdodF9ydWxlcyIpLlBocExhbmdIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIFBocENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9waHBfY29tcGxldGlvbnMiKS5QaHBDb21wbGV0aW9uczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgdW5pY29kZSA9IHJlcXVpcmUoIi4uL3VuaWNvZGUiKTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIEphdmFTY3JpcHRNb2RlID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0IikuTW9kZTsKdmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7Cgp2YXIgUGhwTW9kZSA9IGZ1bmN0aW9uKG9wdHMpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQaHBMYW5nSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLiRjb21wbGV0ZXIgPSBuZXcgUGhwQ29tcGxldGlvbnMoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhQaHBNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy50b2tlblJlID0gbmV3IFJlZ0V4cCgiXlsiICsgdW5pY29kZS53b3JkQ2hhcnMgKyAiX10rIiwgImciKTsKICAgIHRoaXMubm9uVG9rZW5SZSA9IG5ldyBSZWdFeHAoIl4oPzpbXiIgKyB1bmljb2RlLndvcmRDaGFycyArICJfXXxcXHNdKSsiLCAiZyIpOwoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9IFsiLy8iLCAiIyJdOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbOl1ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlICE9ICJkb2Mtc3RhcnQiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9waHAtaW5saW5lIjsKfSkuY2FsbChQaHBNb2RlLnByb3RvdHlwZSk7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKG9wdHMpIHsKICAgIGlmIChvcHRzICYmIG9wdHMuaW5saW5lKSB7CiAgICAgICAgdmFyIG1vZGUgPSBuZXcgUGhwTW9kZSgpOwogICAgICAgIG1vZGUuY3JlYXRlV29ya2VyID0gdGhpcy5jcmVhdGVXb3JrZXI7CiAgICAgICAgbW9kZS5pbmxpbmVQaHAgPSB0cnVlOwogICAgICAgIHJldHVybiBtb2RlOwogICAgfQogICAgSHRtbE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQaHBIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CiAgICAgICAgImpzLSI6IEphdmFTY3JpcHRNb2RlLAogICAgICAgICJjc3MtIjogQ3NzTW9kZSwKICAgICAgICAicGhwLSI6IFBocE1vZGUKICAgIH0pOwogICAgdGhpcy5mb2xkaW5nUnVsZXMuc3ViTW9kZXNbInBocC0iXSA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgSHRtbE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9waHBfd29ya2VyIiwgIlBocFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIGlmICh0aGlzLmlubGluZVBocCkKICAgICAgICAgICAgd29ya2VyLmNhbGwoInNldE9wdGlvbnMiLCBbe2lubGluZTogdHJ1ZX1dKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcGhwIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcGhwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-php_laravel_blade.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24obm9ybWFsaXplKSB7CiAgICB2YXIgdGFnUmVnZXggPSAiW186YS16QS1aXHhjMC1cdWZmZmZdWy1fOi5hLXpBLVowLTlceGMwLVx1ZmZmZl0qIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiLCBuZXh0IDogImNkYXRhIn0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5pbnN0cnVjdGlvbi54bWwiLCAia2V5d29yZC5pbnN0cnVjdGlvbi54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFw/KSgiICsgdGFnUmVnZXggKyAiKSIsIG5leHQgOiAicHJvY2Vzc2luZ19pbnN0cnVjdGlvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuc3RhcnQueG1sIiwgcmVnZXggOiAiPFxcIS0tIiwgbmV4dCA6ICJjb21tZW50In0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ4bWwtcGUuZG9jdHlwZS54bWwiLCAieG1sLXBlLmRvY3R5cGUueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcISkoRE9DVFlQRSkoPz1bXFxzXSkiLCBuZXh0IDogImRvY3R5cGUiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LmVuZC10YWctb3Blbi54bWwiLCByZWdleDogIjwvIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJ0ZXh0LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcHJvY2Vzc2luZ19pbnN0cnVjdGlvbiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5kZWNsLWF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuZGVjbC1hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAid2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi54bWwtZGVjbC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXD8+IiwKICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICB9XSwKCiAgICAgICAgZG9jdHlwZSA6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAid2hpdGVzcGFjZSJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS5kb2N0eXBlLnhtbCIsIHJlZ2V4IDogIj4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUueG1sIiwgcmVnZXggOiAiWy1fYS16QS1aMC05Ol0rIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0IiwgcmVnZXggOiAiXFxbIiwgcHVzaCA6ICJpbnRfc3Vic2V0In0KICAgICAgICBdLAoKICAgICAgICBpbnRfc3Vic2V0IDogW3sKICAgICAgICAgICAgdG9rZW4gOiAidGV4dC54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5pbnQtc3Vic2V0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwgImtleXdvcmQubWFya3VwLWRlY2wueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKSgiICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn1dCiAgICAgICAgfV0sCgogICAgICAgIGNkYXRhIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIlxcXVxcXT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIlxccysifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiKD86W15cXF1dfFxcXSg/IVxcXT4pKSsifQogICAgICAgIF0sCgogICAgICAgIGNvbW1lbnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZC54bWwiLCByZWdleCA6ICItLT4iLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudC54bWwifQogICAgICAgIF0sCgogICAgICAgIHJlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJfcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICAgICAgfV0sCgogICAgICAgIHRhZyA6IFt7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKD86KDwpfCg8LykpKCg/OiIgKyB0YWdSZWdleCArICI6KT8iICsgdGFnUmVnZXggKyAiKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgdGFnX3doaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQud2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHN0cmluZzogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cmlidXRlX3ZhbHVlOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cl9yZWZlcmVuY2UifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0KICAgIH07CgogICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IFhtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzID0gZnVuY3Rpb24oSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgdGFnKXsKICAgICAgICB0aGlzLiRydWxlcy50YWcudW5zaGlmdCh7CiAgICAgICAgICAgIHRva2VuIDogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6IHByZWZpeCArICJzdGFydCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy4kcnVsZXNbdGFnICsgIi1lbmQiXSA9IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsICBuZXh0OiAic3RhcnQiLAogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDApOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9fQogICAgICAgIF07CgogICAgICAgIHRoaXMuZW1iZWRSdWxlcyhIaWdobGlnaHRSdWxlcywgcHJlZml4LCBbewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPC8pKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogdGFnICsgIi1lbmQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICI8XFwhXFxbQ0RBVEFcXFsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5jZGF0YS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJcXF1cXF0+IgogICAgICAgIH1dKTsKICAgIH07Cgp9KS5jYWxsKFRleHRIaWdobGlnaHRSdWxlcy5wcm90b3R5cGUpOwoKb29wLmluaGVyaXRzKFhtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5YbWxIaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9jc3NfaGlnaGxpZ2h0X3J1bGVzIikuQ3NzSGlnaGxpZ2h0UnVsZXM7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKCnZhciB0YWdNYXAgPSBsYW5nLmNyZWF0ZU1hcCh7CiAgICBhICAgICAgICAgICA6ICdhbmNob3InLAogICAgYnV0dG9uIAkgICAgOiAnZm9ybScsCiAgICBmb3JtICAgICAgICA6ICdmb3JtJywKICAgIGltZyAgICAgICAgIDogJ2ltYWdlJywKICAgIGlucHV0ICAgICAgIDogJ2Zvcm0nLAogICAgbGFiZWwgICAgICAgOiAnZm9ybScsCiAgICBvcHRpb24gICAgICA6ICdmb3JtJywKICAgIHNjcmlwdCAgICAgIDogJ3NjcmlwdCcsCiAgICBzZWxlY3QgICAgICA6ICdmb3JtJywKICAgIHRleHRhcmVhICAgIDogJ2Zvcm0nLAogICAgc3R5bGUgICAgICAgOiAnc3R5bGUnLAogICAgdGFibGUgICAgICAgOiAndGFibGUnLAogICAgdGJvZHkgICAgICAgOiAndGFibGUnLAogICAgdGQgICAgICAgICAgOiAndGFibGUnLAogICAgdGZvb3QgICAgICAgOiAndGFibGUnLAogICAgdGggICAgICAgICAgOiAndGFibGUnLAogICAgdHIgICAgICAgICAgOiAndGFibGUnCn0pOwoKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgWG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB0aGlzLmFkZFJ1bGVzKHsKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICBpbmNsdWRlIDogInRhZ193aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlstX2EtekEtWjAtOTouXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgaW5jbHVkZTogInRhZ193aGl0ZXNwYWNlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcudW5xdW90ZWQuYXR0cmlidXRlLXZhbHVlLmh0bWwiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW148Pj0nXCJgXFxzXSsiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAogICAgICAgIHRhZzogW3sKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbihzdGFydCwgdGFnKSB7CiAgICAgICAgICAgICAgICB2YXIgZ3JvdXAgPSB0YWdNYXBbdGFnXTsKICAgICAgICAgICAgICAgIHJldHVybiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAoc3RhcnQgPT0gIjwiID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICAgICAgIm1ldGEudGFnIiArIChncm91cCA/ICIuIiArIGdyb3VwIDogIiIpICsgIi50YWctbmFtZS54bWwiXTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvPykoWy1fYS16QS1aMC05Oi5dKykiLAogICAgICAgICAgICBuZXh0OiAidGFnX3N0dWZmIgogICAgICAgIH1dLAogICAgICAgIHRhZ19zdHVmZjogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfSk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKENzc0hpZ2hsaWdodFJ1bGVzLCAiY3NzLSIsICJzdHlsZSIpOwogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKG5ldyBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMoe2pzeDogZmFsc2V9KS5nZXRSdWxlcygpLCAianMtIiwgInNjcmlwdCIpOwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBIdG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEh0bWxIaWdobGlnaHRSdWxlcywgWG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5IdG1sSGlnaGxpZ2h0UnVsZXMgPSBIdG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9waHBfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFBocExhbmdIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGRvY0NvbW1lbnQgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9IGxhbmcuYXJyYXlUb01hcCgKJ2Fic3xhY29zfGFjb3NofGFkZGNzbGFzaGVzfGFkZHNsYXNoZXN8YWdncmVnYXRlfGFnZ3JlZ2F0ZV9pbmZvfGFnZ3JlZ2F0ZV9tZXRob2RzfGFnZ3JlZ2F0ZV9tZXRob2RzX2J5X2xpc3R8YWdncmVnYXRlX21ldGhvZHNfYnlfcmVnZXhwfFwKYWdncmVnYXRlX3Byb3BlcnRpZXN8YWdncmVnYXRlX3Byb3BlcnRpZXNfYnlfbGlzdHxhZ2dyZWdhdGVfcHJvcGVydGllc19ieV9yZWdleHB8YWdncmVnYXRpb25faW5mb3xhbXFwY29ubmVjdGlvbnxhbXFwZXhjaGFuZ2V8YW1xcHF1ZXVlfFwKYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZXxhcGFjaGVfZ2V0X21vZHVsZXN8YXBhY2hlX2dldF92ZXJzaW9ufGFwYWNoZV9nZXRlbnZ8YXBhY2hlX2xvb2t1cF91cml8YXBhY2hlX25vdGV8YXBhY2hlX3JlcXVlc3RfaGVhZGVyc3xcCmFwYWNoZV9yZXNldF90aW1lb3V0fGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzfGFwYWNoZV9zZXRlbnZ8YXBjX2FkZHxhcGNfYmluX2R1bXB8YXBjX2Jpbl9kdW1wZmlsZXxhcGNfYmluX2xvYWR8YXBjX2Jpbl9sb2FkZmlsZXxcCmFwY19jYWNoZV9pbmZvfGFwY19jYXN8YXBjX2NsZWFyX2NhY2hlfGFwY19jb21waWxlX2ZpbGV8YXBjX2RlY3xhcGNfZGVmaW5lX2NvbnN0YW50c3xhcGNfZGVsZXRlfGFwY19kZWxldGVfZmlsZXxhcGNfZXhpc3RzfGFwY19mZXRjaHxcCmFwY19pbmN8YXBjX2xvYWRfY29uc3RhbnRzfGFwY19zbWFfaW5mb3xhcGNfc3RvcmV8YXBjaXRlcmF0b3J8YXBkX2JyZWFrcG9pbnR8YXBkX2NhbGxzdGFja3xhcGRfY2x1bmt8YXBkX2NvbnRpbnVlfGFwZF9jcm9ha3xcCmFwZF9kdW1wX2Z1bmN0aW9uX3RhYmxlfGFwZF9kdW1wX3BlcnNpc3RlbnRfcmVzb3VyY2VzfGFwZF9kdW1wX3JlZ3VsYXJfcmVzb3VyY2VzfGFwZF9lY2hvfGFwZF9nZXRfYWN0aXZlX3N5bWJvbHN8YXBkX3NldF9wcHJvZl90cmFjZXxcCmFwZF9zZXRfc2Vzc2lvbnxhcGRfc2V0X3Nlc3Npb25fdHJhY2V8YXBkX3NldF9zZXNzaW9uX3RyYWNlX3NvY2tldHxhcHBlbmRpdGVyYXRvcnxhcnJheXxhcnJheV9jaGFuZ2Vfa2V5X2Nhc2V8YXJyYXlfY2h1bmt8YXJyYXlfY29tYmluZXxcCmFycmF5X2NvdW50X3ZhbHVlc3xhcnJheV9kaWZmfGFycmF5X2RpZmZfYXNzb2N8YXJyYXlfZGlmZl9rZXl8YXJyYXlfZGlmZl91YXNzb2N8YXJyYXlfZGlmZl91a2V5fGFycmF5X2ZpbGx8YXJyYXlfZmlsbF9rZXlzfGFycmF5X2ZpbHRlcnxcCmFycmF5X2ZsaXB8YXJyYXlfaW50ZXJzZWN0fGFycmF5X2ludGVyc2VjdF9hc3NvY3xhcnJheV9pbnRlcnNlY3Rfa2V5fGFycmF5X2ludGVyc2VjdF91YXNzb2N8YXJyYXlfaW50ZXJzZWN0X3VrZXl8YXJyYXlfa2V5X2V4aXN0c3xcCmFycmF5X2tleXN8YXJyYXlfbWFwfGFycmF5X21lcmdlfGFycmF5X21lcmdlX3JlY3Vyc2l2ZXxhcnJheV9tdWx0aXNvcnR8YXJyYXlfcGFkfGFycmF5X3BvcHxhcnJheV9wcm9kdWN0fGFycmF5X3B1c2h8YXJyYXlfcmFuZHxcCmFycmF5X3JlZHVjZXxhcnJheV9yZXBsYWNlfGFycmF5X3JlcGxhY2VfcmVjdXJzaXZlfGFycmF5X3JldmVyc2V8YXJyYXlfc2VhcmNofGFycmF5X3NoaWZ0fGFycmF5X3NsaWNlfGFycmF5X3NwbGljZXxhcnJheV9zdW18YXJyYXlfdWRpZmZ8XAphcnJheV91ZGlmZl9hc3NvY3xhcnJheV91ZGlmZl91YXNzb2N8YXJyYXlfdWludGVyc2VjdHxhcnJheV91aW50ZXJzZWN0X2Fzc29jfGFycmF5X3VpbnRlcnNlY3RfdWFzc29jfGFycmF5X3VuaXF1ZXxhcnJheV91bnNoaWZ0fFwKYXJyYXlfdmFsdWVzfGFycmF5X3dhbGt8YXJyYXlfd2Fsa19yZWN1cnNpdmV8YXJyYXlhY2Nlc3N8YXJyYXlpdGVyYXRvcnxhcnJheW9iamVjdHxhcnNvcnR8YXNpbnxhc2luaHxhc29ydHxhc3NlcnR8YXNzZXJ0X29wdGlvbnN8YXRhbnxcCmF0YW4yfGF0YW5ofGF1ZGlvcHJvcGVydGllc3xiYWRmdW5jdGlvbmNhbGxleGNlcHRpb258YmFkbWV0aG9kY2FsbGV4Y2VwdGlvbnxiYXNlNjRfZGVjb2RlfGJhc2U2NF9lbmNvZGV8YmFzZV9jb252ZXJ0fGJhc2VuYW1lfFwKYmJjb2RlX2FkZF9lbGVtZW50fGJiY29kZV9hZGRfc21pbGV5fGJiY29kZV9jcmVhdGV8YmJjb2RlX2Rlc3Ryb3l8YmJjb2RlX3BhcnNlfGJiY29kZV9zZXRfYXJnX3BhcnNlcnxiYmNvZGVfc2V0X2ZsYWdzfGJjYWRkfGJjY29tcHxiY2RpdnxcCmJjbW9kfGJjbXVsfGJjb21waWxlcl9sb2FkfGJjb21waWxlcl9sb2FkX2V4ZXxiY29tcGlsZXJfcGFyc2VfY2xhc3N8YmNvbXBpbGVyX3JlYWR8YmNvbXBpbGVyX3dyaXRlX2NsYXNzfGJjb21waWxlcl93cml0ZV9jb25zdGFudHxcCmJjb21waWxlcl93cml0ZV9leGVfZm9vdGVyfGJjb21waWxlcl93cml0ZV9maWxlfGJjb21waWxlcl93cml0ZV9mb290ZXJ8YmNvbXBpbGVyX3dyaXRlX2Z1bmN0aW9ufGJjb21waWxlcl93cml0ZV9mdW5jdGlvbnNfZnJvbV9maWxlfFwKYmNvbXBpbGVyX3dyaXRlX2hlYWRlcnxiY29tcGlsZXJfd3JpdGVfaW5jbHVkZWRfZmlsZW5hbWV8YmNwb3d8YmNwb3dtb2R8YmNzY2FsZXxiY3NxcnR8YmNzdWJ8YmluMmhleHxiaW5kX3RleHRkb21haW5fY29kZXNldHxiaW5kZWN8XApiaW5kdGV4dGRvbWFpbnxic29uX2RlY29kZXxic29uX2VuY29kZXxidW1wVmFsdWV8YnpjbG9zZXxiemNvbXByZXNzfGJ6ZGVjb21wcmVzc3xiemVycm5vfGJ6ZXJyb3J8YnplcnJzdHJ8YnpmbHVzaHxiem9wZW58YnpyZWFkfGJ6d3JpdGV8XApjYWNoaW5naXRlcmF0b3J8Y2Fpcm98Y2Fpcm9fY3JlYXRlfGNhaXJvX2ZvbnRfZmFjZV9nZXRfdHlwZXxjYWlyb19mb250X2ZhY2Vfc3RhdHVzfGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGV8Y2Fpcm9fZm9udF9vcHRpb25zX2VxdWFsfFwKY2Fpcm9fZm9udF9vcHRpb25zX2dldF9hbnRpYWxpYXN8Y2Fpcm9fZm9udF9vcHRpb25zX2dldF9oaW50X21ldHJpY3N8Y2Fpcm9fZm9udF9vcHRpb25zX2dldF9oaW50X3N0eWxlfFwKY2Fpcm9fZm9udF9vcHRpb25zX2dldF9zdWJwaXhlbF9vcmRlcnxjYWlyb19mb250X29wdGlvbnNfaGFzaHxjYWlyb19mb250X29wdGlvbnNfbWVyZ2V8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXN8XApjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfbWV0cmljc3xjYWlyb19mb250X29wdGlvbnNfc2V0X2hpbnRfc3R5bGV8Y2Fpcm9fZm9udF9vcHRpb25zX3NldF9zdWJwaXhlbF9vcmRlcnxjYWlyb19mb250X29wdGlvbnNfc3RhdHVzfFwKY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGh8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGV8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGF8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJvbV9wbmd8XApjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhfGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdHxjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHR8Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlfFwKY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGh8Y2Fpcm9fbWF0cml4X2NyZWF0ZV9zY2FsZXxjYWlyb19tYXRyaXhfY3JlYXRlX3RyYW5zbGF0ZXxjYWlyb19tYXRyaXhfaW52ZXJ0fGNhaXJvX21hdHJpeF9tdWx0aXBseXxcCmNhaXJvX21hdHJpeF9yb3RhdGV8Y2Fpcm9fbWF0cml4X3RyYW5zZm9ybV9kaXN0YW5jZXxjYWlyb19tYXRyaXhfdHJhbnNmb3JtX3BvaW50fGNhaXJvX21hdHJpeF90cmFuc2xhdGV8Y2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2J8XApjYWlyb19wYXR0ZXJuX2FkZF9jb2xvcl9zdG9wX3JnYmF8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfZm9yX3N1cmZhY2V8Y2Fpcm9fcGF0dGVybl9jcmVhdGVfbGluZWFyfGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbHxcCmNhaXJvX3BhdHRlcm5fY3JlYXRlX3JnYnxjYWlyb19wYXR0ZXJuX2NyZWF0ZV9yZ2JhfGNhaXJvX3BhdHRlcm5fZ2V0X2NvbG9yX3N0b3BfY291bnR8Y2Fpcm9fcGF0dGVybl9nZXRfY29sb3Jfc3RvcF9yZ2JhfFwKY2Fpcm9fcGF0dGVybl9nZXRfZXh0ZW5kfGNhaXJvX3BhdHRlcm5fZ2V0X2ZpbHRlcnxjYWlyb19wYXR0ZXJuX2dldF9saW5lYXJfcG9pbnRzfGNhaXJvX3BhdHRlcm5fZ2V0X21hdHJpeHxcCmNhaXJvX3BhdHRlcm5fZ2V0X3JhZGlhbF9jaXJjbGVzfGNhaXJvX3BhdHRlcm5fZ2V0X3JnYmF8Y2Fpcm9fcGF0dGVybl9nZXRfc3VyZmFjZXxjYWlyb19wYXR0ZXJuX2dldF90eXBlfGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZHxcCmNhaXJvX3BhdHRlcm5fc2V0X2ZpbHRlcnxjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXh8Y2Fpcm9fcGF0dGVybl9zdGF0dXN8Y2Fpcm9fcGRmX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3BkZl9zdXJmYWNlX3NldF9zaXplfFwKY2Fpcm9fcHNfZ2V0X2xldmVsc3xjYWlyb19wc19sZXZlbF90b19zdHJpbmd8Y2Fpcm9fcHNfc3VyZmFjZV9jcmVhdGV8Y2Fpcm9fcHNfc3VyZmFjZV9kc2NfYmVnaW5fcGFnZV9zZXR1cHxcCmNhaXJvX3BzX3N1cmZhY2VfZHNjX2JlZ2luX3NldHVwfGNhaXJvX3BzX3N1cmZhY2VfZHNjX2NvbW1lbnR8Y2Fpcm9fcHNfc3VyZmFjZV9nZXRfZXBzfGNhaXJvX3BzX3N1cmZhY2VfcmVzdHJpY3RfdG9fbGV2ZWx8XApjYWlyb19wc19zdXJmYWNlX3NldF9lcHN8Y2Fpcm9fcHNfc3VyZmFjZV9zZXRfc2l6ZXxjYWlyb19zY2FsZWRfZm9udF9jcmVhdGV8Y2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50c3xjYWlyb19zY2FsZWRfZm9udF9nZXRfY3RtfFwKY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfZmFjZXxjYWlyb19zY2FsZWRfZm9udF9nZXRfZm9udF9tYXRyaXh8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X2ZvbnRfb3B0aW9uc3xjYWlyb19zY2FsZWRfZm9udF9nZXRfc2NhbGVfbWF0cml4fFwKY2Fpcm9fc2NhbGVkX2ZvbnRfZ2V0X3R5cGV8Y2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50c3xjYWlyb19zY2FsZWRfZm9udF9zdGF0dXN8Y2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzfFwKY2Fpcm9fc3VyZmFjZV9jb3B5X3BhZ2V8Y2Fpcm9fc3VyZmFjZV9jcmVhdGVfc2ltaWxhcnxjYWlyb19zdXJmYWNlX2ZpbmlzaHxjYWlyb19zdXJmYWNlX2ZsdXNofGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnR8XApjYWlyb19zdXJmYWNlX2dldF9kZXZpY2Vfb2Zmc2V0fGNhaXJvX3N1cmZhY2VfZ2V0X2ZvbnRfb3B0aW9uc3xjYWlyb19zdXJmYWNlX2dldF90eXBlfGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eXxcCmNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGV8Y2Fpcm9fc3VyZmFjZV9zZXRfZGV2aWNlX29mZnNldHxjYWlyb19zdXJmYWNlX3NldF9mYWxsYmFja19yZXNvbHV0aW9ufGNhaXJvX3N1cmZhY2Vfc2hvd19wYWdlfFwKY2Fpcm9fc3VyZmFjZV9zdGF0dXN8Y2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmd8Y2Fpcm9fc3ZnX3N1cmZhY2VfY3JlYXRlfGNhaXJvX3N2Z19zdXJmYWNlX3Jlc3RyaWN0X3RvX3ZlcnNpb258XApjYWlyb19zdmdfdmVyc2lvbl90b19zdHJpbmd8Y2Fpcm9hbnRpYWxpYXN8Y2Fpcm9jb250ZW50fGNhaXJvY29udGV4dHxjYWlyb2V4Y2VwdGlvbnxjYWlyb2V4dGVuZHxjYWlyb2ZpbGxydWxlfGNhaXJvZmlsdGVyfGNhaXJvZm9udGZhY2V8XApjYWlyb2ZvbnRvcHRpb25zfGNhaXJvZm9udHNsYW50fGNhaXJvZm9udHR5cGV8Y2Fpcm9mb250d2VpZ2h0fGNhaXJvZm9ybWF0fGNhaXJvZ3JhZGllbnRwYXR0ZXJufGNhaXJvaGludG1ldHJpY3N8Y2Fpcm9oaW50c3R5bGV8XApjYWlyb2ltYWdlc3VyZmFjZXxjYWlyb2xpbmVhcmdyYWRpZW50fGNhaXJvbGluZWNhcHxjYWlyb2xpbmVqb2lufGNhaXJvbWF0cml4fGNhaXJvb3BlcmF0b3J8Y2Fpcm9wYXRofGNhaXJvcGF0dGVybnxjYWlyb3BhdHRlcm50eXBlfFwKY2Fpcm9wZGZzdXJmYWNlfGNhaXJvcHNsZXZlbHxjYWlyb3Bzc3VyZmFjZXxjYWlyb3JhZGlhbGdyYWRpZW50fGNhaXJvc2NhbGVkZm9udHxjYWlyb3NvbGlkcGF0dGVybnxjYWlyb3N0YXR1c3xjYWlyb3N1YnBpeGVsb3JkZXJ8XApjYWlyb3N1cmZhY2V8Y2Fpcm9zdXJmYWNlcGF0dGVybnxjYWlyb3N1cmZhY2V0eXBlfGNhaXJvc3Znc3VyZmFjZXxjYWlyb3N2Z3ZlcnNpb258Y2Fpcm90b3lmb250ZmFjZXxjYWxfZGF5c19pbl9tb250aHxjYWxfZnJvbV9qZHxjYWxfaW5mb3xcCmNhbF90b19qZHxjYWxjdWxfaG1hY3xjYWxjdWxobWFjfGNhbGxfdXNlcl9mdW5jfGNhbGxfdXNlcl9mdW5jX2FycmF5fGNhbGxfdXNlcl9tZXRob2R8Y2FsbF91c2VyX21ldGhvZF9hcnJheXxjYWxsYmFja2ZpbHRlcml0ZXJhdG9yfGNlaWx8XApjaGRifGNoZGJfY3JlYXRlfGNoZGlyfGNoZWNrZGF0ZXxjaGVja2Ruc3JyfGNoZ3JwfGNobW9kfGNob3B8Y2hvd258Y2hyfGNocm9vdHxjaHVua19zcGxpdHxjbGFzc19hbGlhc3xjbGFzc19leGlzdHN8Y2xhc3NfaW1wbGVtZW50c3xcCmNsYXNzX3BhcmVudHN8Y2xhc3NfdXNlc3xjbGFzc2tpdF9pbXBvcnR8Y2xhc3NraXRfbWV0aG9kX2FkZHxjbGFzc2tpdF9tZXRob2RfY29weXxjbGFzc2tpdF9tZXRob2RfcmVkZWZpbmV8Y2xhc3NraXRfbWV0aG9kX3JlbW92ZXxcCmNsYXNza2l0X21ldGhvZF9yZW5hbWV8Y2xlYXJzdGF0Y2FjaGV8Y2xvbmV8Y2xvc2VkaXJ8Y2xvc2Vsb2d8Y29sbGF0b3J8Y29tfGNvbV9hZGRyZWZ8Y29tX2NyZWF0ZV9ndWlkfGNvbV9ldmVudF9zaW5rfGNvbV9nZXR8XApjb21fZ2V0X2FjdGl2ZV9vYmplY3R8Y29tX2ludm9rZXxjb21faXNlbnVtfGNvbV9sb2FkfGNvbV9sb2FkX3R5cGVsaWJ8Y29tX21lc3NhZ2VfcHVtcHxjb21fcHJpbnRfdHlwZWluZm98Y29tX3Byb3BnZXR8Y29tX3Byb3BwdXR8XApjb21fcHJvcHNldHxjb21fcmVsZWFzZXxjb21fc2V0fGNvbXBhY3R8Y29ubmVjdGlvbl9hYm9ydGVkfGNvbm5lY3Rpb25fc3RhdHVzfGNvbm5lY3Rpb25fdGltZW91dHxjb25zdGFudHxjb25zdHJ1Y3R8Y29uc3RydWN0fGNvbnN0cnVjdHxcCmNvbnZlcnRfY3lyX3N0cmluZ3xjb252ZXJ0X3V1ZGVjb2RlfGNvbnZlcnRfdXVlbmNvZGV8Y29weXxjb3N8Y29zaHxjb3VudHxjb3VudF9jaGFyc3xjb3VudGFibGV8Y291bnRlcl9idW1wfGNvdW50ZXJfYnVtcF92YWx1ZXxcCmNvdW50ZXJfY3JlYXRlfGNvdW50ZXJfZ2V0fGNvdW50ZXJfZ2V0X21ldGF8Y291bnRlcl9nZXRfbmFtZWR8Y291bnRlcl9nZXRfdmFsdWV8Y291bnRlcl9yZXNldHxjb3VudGVyX3Jlc2V0X3ZhbHVlfGNyYWNrX2NoZWNrfFwKY3JhY2tfY2xvc2VkaWN0fGNyYWNrX2dldGxhc3RtZXNzYWdlfGNyYWNrX29wZW5kaWN0fGNyYzMyfGNyZWF0ZV9mdW5jdGlvbnxjcnlwdHxjdHlwZV9hbG51bXxjdHlwZV9hbHBoYXxjdHlwZV9jbnRybHxjdHlwZV9kaWdpdHxcCmN0eXBlX2dyYXBofGN0eXBlX2xvd2VyfGN0eXBlX3ByaW50fGN0eXBlX3B1bmN0fGN0eXBlX3NwYWNlfGN0eXBlX3VwcGVyfGN0eXBlX3hkaWdpdHxjdWJyaWRfYWZmZWN0ZWRfcm93c3xjdWJyaWRfYmluZHxcCmN1YnJpZF9jbGllbnRfZW5jb2Rpbmd8Y3VicmlkX2Nsb3NlfGN1YnJpZF9jbG9zZV9wcmVwYXJlfGN1YnJpZF9jbG9zZV9yZXF1ZXN0fGN1YnJpZF9jb2xfZ2V0fGN1YnJpZF9jb2xfc2l6ZXxjdWJyaWRfY29sdW1uX25hbWVzfFwKY3VicmlkX2NvbHVtbl90eXBlc3xjdWJyaWRfY29tbWl0fGN1YnJpZF9jb25uZWN0fGN1YnJpZF9jb25uZWN0X3dpdGhfdXJsfGN1YnJpZF9jdXJyZW50X29pZHxjdWJyaWRfZGF0YV9zZWVrfGN1YnJpZF9kYl9uYW1lfFwKY3VicmlkX2Rpc2Nvbm5lY3R8Y3VicmlkX2Ryb3B8Y3VicmlkX2Vycm5vfGN1YnJpZF9lcnJvcnxjdWJyaWRfZXJyb3JfY29kZXxjdWJyaWRfZXJyb3JfY29kZV9mYWNpbGl0eXxjdWJyaWRfZXJyb3JfbXNnfGN1YnJpZF9leGVjdXRlfFwKY3VicmlkX2ZldGNofGN1YnJpZF9mZXRjaF9hcnJheXxjdWJyaWRfZmV0Y2hfYXNzb2N8Y3VicmlkX2ZldGNoX2ZpZWxkfGN1YnJpZF9mZXRjaF9sZW5ndGhzfGN1YnJpZF9mZXRjaF9vYmplY3R8Y3VicmlkX2ZldGNoX3Jvd3xcCmN1YnJpZF9maWVsZF9mbGFnc3xjdWJyaWRfZmllbGRfbGVufGN1YnJpZF9maWVsZF9uYW1lfGN1YnJpZF9maWVsZF9zZWVrfGN1YnJpZF9maWVsZF90YWJsZXxjdWJyaWRfZmllbGRfdHlwZXxjdWJyaWRfZnJlZV9yZXN1bHR8XApjdWJyaWRfZ2V0fGN1YnJpZF9nZXRfYXV0b2NvbW1pdHxjdWJyaWRfZ2V0X2NoYXJzZXR8Y3VicmlkX2dldF9jbGFzc19uYW1lfGN1YnJpZF9nZXRfY2xpZW50X2luZm98Y3VicmlkX2dldF9kYl9wYXJhbWV0ZXJ8XApjdWJyaWRfZ2V0X3NlcnZlcl9pbmZvfGN1YnJpZF9pbnNlcnRfaWR8Y3VicmlkX2lzX2luc3RhbmNlfGN1YnJpZF9saXN0X2Ric3xjdWJyaWRfbG9hZF9mcm9tX2dsb3xjdWJyaWRfbG9iX2Nsb3NlfGN1YnJpZF9sb2JfZXhwb3J0fFwKY3VicmlkX2xvYl9nZXR8Y3VicmlkX2xvYl9zZW5kfGN1YnJpZF9sb2Jfc2l6ZXxjdWJyaWRfbG9ja19yZWFkfGN1YnJpZF9sb2NrX3dyaXRlfGN1YnJpZF9tb3ZlX2N1cnNvcnxjdWJyaWRfbmV3X2dsb3xjdWJyaWRfbmV4dF9yZXN1bHR8XApjdWJyaWRfbnVtX2NvbHN8Y3VicmlkX251bV9maWVsZHN8Y3VicmlkX251bV9yb3dzfGN1YnJpZF9waW5nfGN1YnJpZF9wcmVwYXJlfGN1YnJpZF9wdXR8Y3VicmlkX3F1ZXJ5fGN1YnJpZF9yZWFsX2VzY2FwZV9zdHJpbmd8XApjdWJyaWRfcmVzdWx0fGN1YnJpZF9yb2xsYmFja3xjdWJyaWRfc2F2ZV90b19nbG98Y3VicmlkX3NjaGVtYXxjdWJyaWRfc2VuZF9nbG98Y3VicmlkX3NlcV9kcm9wfGN1YnJpZF9zZXFfaW5zZXJ0fGN1YnJpZF9zZXFfcHV0fFwKY3VicmlkX3NldF9hZGR8Y3VicmlkX3NldF9hdXRvY29tbWl0fGN1YnJpZF9zZXRfZGJfcGFyYW1ldGVyfGN1YnJpZF9zZXRfZHJvcHxjdWJyaWRfdW5idWZmZXJlZF9xdWVyeXxjdWJyaWRfdmVyc2lvbnxjdXJsX2Nsb3NlfFwKY3VybF9jb3B5X2hhbmRsZXxjdXJsX2Vycm5vfGN1cmxfZXJyb3J8Y3VybF9leGVjfGN1cmxfZ2V0aW5mb3xjdXJsX2luaXR8Y3VybF9tdWx0aV9hZGRfaGFuZGxlfGN1cmxfbXVsdGlfY2xvc2V8Y3VybF9tdWx0aV9leGVjfFwKY3VybF9tdWx0aV9nZXRjb250ZW50fGN1cmxfbXVsdGlfaW5mb19yZWFkfGN1cmxfbXVsdGlfaW5pdHxjdXJsX211bHRpX3JlbW92ZV9oYW5kbGV8Y3VybF9tdWx0aV9zZWxlY3R8Y3VybF9zZXRvcHR8Y3VybF9zZXRvcHRfYXJyYXl8XApjdXJsX3ZlcnNpb258Y3VycmVudHxjeXJ1c19hdXRoZW50aWNhdGV8Y3lydXNfYmluZHxjeXJ1c19jbG9zZXxjeXJ1c19jb25uZWN0fGN5cnVzX3F1ZXJ5fGN5cnVzX3VuYmluZHxkYXRlfGRhdGVfYWRkfGRhdGVfY3JlYXRlfFwKZGF0ZV9jcmVhdGVfZnJvbV9mb3JtYXR8ZGF0ZV9kYXRlX3NldHxkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0fGRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXR8ZGF0ZV9kaWZmfGRhdGVfZm9ybWF0fGRhdGVfZ2V0X2xhc3RfZXJyb3JzfFwKZGF0ZV9pbnRlcnZhbF9jcmVhdGVfZnJvbV9kYXRlX3N0cmluZ3xkYXRlX2ludGVydmFsX2Zvcm1hdHxkYXRlX2lzb2RhdGVfc2V0fGRhdGVfbW9kaWZ5fGRhdGVfb2Zmc2V0X2dldHxkYXRlX3BhcnNlfGRhdGVfcGFyc2VfZnJvbV9mb3JtYXR8XApkYXRlX3N1YnxkYXRlX3N1bl9pbmZvfGRhdGVfc3VucmlzZXxkYXRlX3N1bnNldHxkYXRlX3RpbWVfc2V0fGRhdGVfdGltZXN0YW1wX2dldHxkYXRlX3RpbWVzdGFtcF9zZXR8ZGF0ZV90aW1lem9uZV9nZXR8ZGF0ZV90aW1lem9uZV9zZXR8XApkYXRlaW50ZXJ2YWx8ZGF0ZXBlcmlvZHxkYXRldGltZXxkYXRldGltZXpvbmV8ZGIyX2F1dG9jb21taXR8ZGIyX2JpbmRfcGFyYW18ZGIyX2NsaWVudF9pbmZvfGRiMl9jbG9zZXxkYjJfY29sdW1uX3ByaXZpbGVnZXN8ZGIyX2NvbHVtbnN8XApkYjJfY29tbWl0fGRiMl9jb25uX2Vycm9yfGRiMl9jb25uX2Vycm9ybXNnfGRiMl9jb25uZWN0fGRiMl9jdXJzb3JfdHlwZXxkYjJfZXNjYXBlX3N0cmluZ3xkYjJfZXhlY3xkYjJfZXhlY3V0ZXxkYjJfZmV0Y2hfYXJyYXl8XApkYjJfZmV0Y2hfYXNzb2N8ZGIyX2ZldGNoX2JvdGh8ZGIyX2ZldGNoX29iamVjdHxkYjJfZmV0Y2hfcm93fGRiMl9maWVsZF9kaXNwbGF5X3NpemV8ZGIyX2ZpZWxkX25hbWV8ZGIyX2ZpZWxkX251bXxkYjJfZmllbGRfcHJlY2lzaW9ufFwKZGIyX2ZpZWxkX3NjYWxlfGRiMl9maWVsZF90eXBlfGRiMl9maWVsZF93aWR0aHxkYjJfZm9yZWlnbl9rZXlzfGRiMl9mcmVlX3Jlc3VsdHxkYjJfZnJlZV9zdG10fGRiMl9nZXRfb3B0aW9ufGRiMl9sYXN0X2luc2VydF9pZHxcCmRiMl9sb2JfcmVhZHxkYjJfbmV4dF9yZXN1bHR8ZGIyX251bV9maWVsZHN8ZGIyX251bV9yb3dzfGRiMl9wY2xvc2V8ZGIyX3Bjb25uZWN0fGRiMl9wcmVwYXJlfGRiMl9wcmltYXJ5X2tleXN8ZGIyX3Byb2NlZHVyZV9jb2x1bW5zfFwKZGIyX3Byb2NlZHVyZXN8ZGIyX3Jlc3VsdHxkYjJfcm9sbGJhY2t8ZGIyX3NlcnZlcl9pbmZvfGRiMl9zZXRfb3B0aW9ufGRiMl9zcGVjaWFsX2NvbHVtbnN8ZGIyX3N0YXRpc3RpY3N8ZGIyX3N0bXRfZXJyb3J8ZGIyX3N0bXRfZXJyb3Jtc2d8XApkYjJfdGFibGVfcHJpdmlsZWdlc3xkYjJfdGFibGVzfGRiYV9jbG9zZXxkYmFfZGVsZXRlfGRiYV9leGlzdHN8ZGJhX2ZldGNofGRiYV9maXJzdGtleXxkYmFfaGFuZGxlcnN8ZGJhX2luc2VydHxkYmFfa2V5X3NwbGl0fGRiYV9saXN0fFwKZGJhX25leHRrZXl8ZGJhX29wZW58ZGJhX29wdGltaXplfGRiYV9wb3BlbnxkYmFfcmVwbGFjZXxkYmFfc3luY3xkYmFzZV9hZGRfcmVjb3JkfGRiYXNlX2Nsb3NlfGRiYXNlX2NyZWF0ZXxkYmFzZV9kZWxldGVfcmVjb3JkfFwKZGJhc2VfZ2V0X2hlYWRlcl9pbmZvfGRiYXNlX2dldF9yZWNvcmR8ZGJhc2VfZ2V0X3JlY29yZF93aXRoX25hbWVzfGRiYXNlX251bWZpZWxkc3xkYmFzZV9udW1yZWNvcmRzfGRiYXNlX29wZW58ZGJhc2VfcGFja3xcCmRiYXNlX3JlcGxhY2VfcmVjb3JkfGRicGx1c19hZGR8ZGJwbHVzX2FxbHxkYnBsdXNfY2hkaXJ8ZGJwbHVzX2Nsb3NlfGRicGx1c19jdXJyfGRicGx1c19lcnJjb2RlfGRicGx1c19lcnJub3xkYnBsdXNfZmluZHxkYnBsdXNfZmlyc3R8XApkYnBsdXNfZmx1c2h8ZGJwbHVzX2ZyZWVhbGxsb2Nrc3xkYnBsdXNfZnJlZWxvY2t8ZGJwbHVzX2ZyZWVybG9ja3N8ZGJwbHVzX2dldGxvY2t8ZGJwbHVzX2dldHVuaXF1ZXxkYnBsdXNfaW5mb3xkYnBsdXNfbGFzdHxkYnBsdXNfbG9ja3JlbHxcCmRicGx1c19uZXh0fGRicGx1c19vcGVufGRicGx1c19wcmV2fGRicGx1c19yY2hwZXJtfGRicGx1c19yY3JlYXRlfGRicGx1c19yY3J0ZXhhY3R8ZGJwbHVzX3JjcnRsaWtlfGRicGx1c19yZXNvbHZlfGRicGx1c19yZXN0b3JlcG9zfFwKZGJwbHVzX3JrZXlzfGRicGx1c19yb3BlbnxkYnBsdXNfcnF1ZXJ5fGRicGx1c19ycmVuYW1lfGRicGx1c19yc2VjaW5kZXh8ZGJwbHVzX3J1bmxpbmt8ZGJwbHVzX3J6YXB8ZGJwbHVzX3NhdmVwb3N8ZGJwbHVzX3NldGluZGV4fFwKZGJwbHVzX3NldGluZGV4YnludW1iZXJ8ZGJwbHVzX3NxbHxkYnBsdXNfdGNsfGRicGx1c190cmVtb3ZlfGRicGx1c191bmRvfGRicGx1c191bmRvcHJlcGFyZXxkYnBsdXNfdW5sb2NrcmVsfGRicGx1c191bnNlbGVjdHxcCmRicGx1c191cGRhdGV8ZGJwbHVzX3hsb2NrcmVsfGRicGx1c194dW5sb2NrcmVsfGRieF9jbG9zZXxkYnhfY29tcGFyZXxkYnhfY29ubmVjdHxkYnhfZXJyb3J8ZGJ4X2VzY2FwZV9zdHJpbmd8ZGJ4X2ZldGNoX3Jvd3xkYnhfcXVlcnl8XApkYnhfc29ydHxkY2dldHRleHR8ZGNuZ2V0dGV4dHxkZWFnZ3JlZ2F0ZXxkZWJ1Z19iYWNrdHJhY2V8ZGVidWdfcHJpbnRfYmFja3RyYWNlfGRlYnVnX3p2YWxfZHVtcHxkZWNiaW58ZGVjaGV4fGRlY29jdHxkZWZpbmV8XApkZWZpbmVfc3lzbG9nX3ZhcmlhYmxlc3xkZWZpbmVkfGRlZzJyYWR8ZGVsZXRlfGRnZXR0ZXh0fGRpZXxkaW9fY2xvc2V8ZGlvX2ZjbnRsfGRpb19vcGVufGRpb19yZWFkfGRpb19zZWVrfGRpb19zdGF0fGRpb190Y3NldGF0dHJ8XApkaW9fdHJ1bmNhdGV8ZGlvX3dyaXRlfGRpcnxkaXJlY3RvcnlpdGVyYXRvcnxkaXJuYW1lfGRpc2tfZnJlZV9zcGFjZXxkaXNrX3RvdGFsX3NwYWNlfGRpc2tmcmVlc3BhY2V8ZGx8ZG5nZXR0ZXh0fGRuc19jaGVja19yZWNvcmR8XApkbnNfZ2V0X214fGRuc19nZXRfcmVjb3JkfGRvbV9pbXBvcnRfc2ltcGxleG1sfGRvbWFpbmV4Y2VwdGlvbnxkb21hdHRyfGRvbWF0dHJpYnV0ZV9uYW1lfGRvbWF0dHJpYnV0ZV9zZXRfdmFsdWV8ZG9tYXR0cmlidXRlX3NwZWNpZmllZHxcCmRvbWF0dHJpYnV0ZV92YWx1ZXxkb21jaGFyYWN0ZXJkYXRhfGRvbWNvbW1lbnR8ZG9tZG9jdW1lbnR8ZG9tZG9jdW1lbnRfYWRkX3Jvb3R8ZG9tZG9jdW1lbnRfY3JlYXRlX2F0dHJpYnV0ZXxcCmRvbWRvY3VtZW50X2NyZWF0ZV9jZGF0YV9zZWN0aW9ufGRvbWRvY3VtZW50X2NyZWF0ZV9jb21tZW50fGRvbWRvY3VtZW50X2NyZWF0ZV9lbGVtZW50fGRvbWRvY3VtZW50X2NyZWF0ZV9lbGVtZW50X25zfFwKZG9tZG9jdW1lbnRfY3JlYXRlX2VudGl0eV9yZWZlcmVuY2V8ZG9tZG9jdW1lbnRfY3JlYXRlX3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb258ZG9tZG9jdW1lbnRfY3JlYXRlX3RleHRfbm9kZXxkb21kb2N1bWVudF9kb2N0eXBlfFwKZG9tZG9jdW1lbnRfZG9jdW1lbnRfZWxlbWVudHxkb21kb2N1bWVudF9kdW1wX2ZpbGV8ZG9tZG9jdW1lbnRfZHVtcF9tZW18ZG9tZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWR8ZG9tZG9jdW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ25hbWV8XApkb21kb2N1bWVudF9odG1sX2R1bXBfbWVtfGRvbWRvY3VtZW50X3hpbmNsdWRlfGRvbWRvY3VtZW50ZnJhZ21lbnR8ZG9tZG9jdW1lbnR0eXBlfGRvbWRvY3VtZW50dHlwZV9lbnRpdGllc3xcCmRvbWRvY3VtZW50dHlwZV9pbnRlcm5hbF9zdWJzZXR8ZG9tZG9jdW1lbnR0eXBlX25hbWV8ZG9tZG9jdW1lbnR0eXBlX25vdGF0aW9uc3xkb21kb2N1bWVudHR5cGVfcHVibGljX2lkfGRvbWRvY3VtZW50dHlwZV9zeXN0ZW1faWR8XApkb21lbGVtZW50fGRvbWVsZW1lbnRfZ2V0X2F0dHJpYnV0ZXxkb21lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZXxkb21lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWduYW1lfGRvbWVsZW1lbnRfaGFzX2F0dHJpYnV0ZXxcCmRvbWVsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZXxkb21lbGVtZW50X3NldF9hdHRyaWJ1dGV8ZG9tZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGV8ZG9tZWxlbWVudF90YWduYW1lfGRvbWVudGl0eXxkb21lbnRpdHlyZWZlcmVuY2V8XApkb21leGNlcHRpb258ZG9taW1wbGVtZW50YXRpb258ZG9tbmFtZWRub2RlbWFwfGRvbW5vZGV8ZG9tbm9kZV9hZGRfbmFtZXNwYWNlfGRvbW5vZGVfYXBwZW5kX2NoaWxkfGRvbW5vZGVfYXBwZW5kX3NpYmxpbmd8XApkb21ub2RlX2F0dHJpYnV0ZXN8ZG9tbm9kZV9jaGlsZF9ub2Rlc3xkb21ub2RlX2Nsb25lX25vZGV8ZG9tbm9kZV9kdW1wX25vZGV8ZG9tbm9kZV9maXJzdF9jaGlsZHxkb21ub2RlX2dldF9jb250ZW50fFwKZG9tbm9kZV9oYXNfYXR0cmlidXRlc3xkb21ub2RlX2hhc19jaGlsZF9ub2Rlc3xkb21ub2RlX2luc2VydF9iZWZvcmV8ZG9tbm9kZV9pc19ibGFua19ub2RlfGRvbW5vZGVfbGFzdF9jaGlsZHxkb21ub2RlX25leHRfc2libGluZ3xcCmRvbW5vZGVfbm9kZV9uYW1lfGRvbW5vZGVfbm9kZV90eXBlfGRvbW5vZGVfbm9kZV92YWx1ZXxkb21ub2RlX293bmVyX2RvY3VtZW50fGRvbW5vZGVfcGFyZW50X25vZGV8ZG9tbm9kZV9wcmVmaXh8ZG9tbm9kZV9wcmV2aW91c19zaWJsaW5nfFwKZG9tbm9kZV9yZW1vdmVfY2hpbGR8ZG9tbm9kZV9yZXBsYWNlX2NoaWxkfGRvbW5vZGVfcmVwbGFjZV9ub2RlfGRvbW5vZGVfc2V0X2NvbnRlbnR8ZG9tbm9kZV9zZXRfbmFtZXxkb21ub2RlX3NldF9uYW1lc3BhY2V8XApkb21ub2RlX3VubGlua19ub2RlfGRvbW5vZGVsaXN0fGRvbW5vdGF0aW9ufGRvbXByb2Nlc3NpbmdpbnN0cnVjdGlvbnxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb25fZGF0YXxkb21wcm9jZXNzaW5naW5zdHJ1Y3Rpb25fdGFyZ2V0fFwKZG9tdGV4dHxkb214bWxfbmV3X2RvY3xkb214bWxfb3Blbl9maWxlfGRvbXhtbF9vcGVuX21lbXxkb214bWxfdmVyc2lvbnxkb214bWxfeG1sdHJlZXxkb214bWxfeHNsdF9zdHlsZXNoZWV0fGRvbXhtbF94c2x0X3N0eWxlc2hlZXRfZG9jfFwKZG9teG1sX3hzbHRfc3R5bGVzaGVldF9maWxlfGRvbXhtbF94c2x0X3ZlcnNpb258ZG9teHBhdGh8ZG9teHNsdHN0eWxlc2hlZXRfcHJvY2Vzc3xkb214c2x0c3R5bGVzaGVldF9yZXN1bHRfZHVtcF9maWxlfFwKZG9teHNsdHN0eWxlc2hlZXRfcmVzdWx0X2R1bXBfbWVtfGRvdG5ldHxkb3RuZXRfbG9hZHxkb3VibGV2YWx8ZWFjaHxlYXN0ZXJfZGF0ZXxlYXN0ZXJfZGF5c3xlY2hvfGVtcHR5fGVtcHR5aXRlcmF0b3J8XAplbmNoYW50X2Jyb2tlcl9kZXNjcmliZXxlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0c3xlbmNoYW50X2Jyb2tlcl9mcmVlfGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdHxlbmNoYW50X2Jyb2tlcl9nZXRfZXJyb3J8XAplbmNoYW50X2Jyb2tlcl9pbml0fGVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHN8ZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0fGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfcHdsX2RpY3R8ZW5jaGFudF9icm9rZXJfc2V0X29yZGVyaW5nfFwKZW5jaGFudF9kaWN0X2FkZF90b19wZXJzb25hbHxlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb258ZW5jaGFudF9kaWN0X2NoZWNrfGVuY2hhbnRfZGljdF9kZXNjcmliZXxlbmNoYW50X2RpY3RfZ2V0X2Vycm9yfFwKZW5jaGFudF9kaWN0X2lzX2luX3Nlc3Npb258ZW5jaGFudF9kaWN0X3F1aWNrX2NoZWNrfGVuY2hhbnRfZGljdF9zdG9yZV9yZXBsYWNlbWVudHxlbmNoYW50X2RpY3Rfc3VnZ2VzdHxlbmR8ZXJlZ3xlcmVnX3JlcGxhY2V8ZXJlZ2l8XAplcmVnaV9yZXBsYWNlfGVycm9yX2dldF9sYXN0fGVycm9yX2xvZ3xlcnJvcl9yZXBvcnRpbmd8ZXJyb3JleGNlcHRpb258ZXNjYXBlc2hlbGxhcmd8ZXNjYXBlc2hlbGxjbWR8ZXZhbHxldmVudF9hZGR8ZXZlbnRfYmFzZV9mcmVlfFwKZXZlbnRfYmFzZV9sb29wfGV2ZW50X2Jhc2VfbG9vcGJyZWFrfGV2ZW50X2Jhc2VfbG9vcGV4aXR8ZXZlbnRfYmFzZV9uZXd8ZXZlbnRfYmFzZV9wcmlvcml0eV9pbml0fGV2ZW50X2Jhc2Vfc2V0fGV2ZW50X2J1ZmZlcl9iYXNlX3NldHxcCmV2ZW50X2J1ZmZlcl9kaXNhYmxlfGV2ZW50X2J1ZmZlcl9lbmFibGV8ZXZlbnRfYnVmZmVyX2ZkX3NldHxldmVudF9idWZmZXJfZnJlZXxldmVudF9idWZmZXJfbmV3fGV2ZW50X2J1ZmZlcl9wcmlvcml0eV9zZXR8XApldmVudF9idWZmZXJfcmVhZHxldmVudF9idWZmZXJfc2V0X2NhbGxiYWNrfGV2ZW50X2J1ZmZlcl90aW1lb3V0X3NldHxldmVudF9idWZmZXJfd2F0ZXJtYXJrX3NldHxldmVudF9idWZmZXJfd3JpdGV8ZXZlbnRfZGVsfGV2ZW50X2ZyZWV8XApldmVudF9uZXd8ZXZlbnRfc2V0fGV4Y2VwdGlvbnxleGVjfGV4aWZfaW1hZ2V0eXBlfGV4aWZfcmVhZF9kYXRhfGV4aWZfdGFnbmFtZXxleGlmX3RodW1ibmFpbHxleGl0fGV4cHxleHBlY3RfZXhwZWN0bHxleHBlY3RfcG9wZW58ZXhwbG9kZXxcCmV4cG0xfGV4cG9ydHxleHBvcnR8ZXh0ZW5zaW9uX2xvYWRlZHxleHRyYWN0fGV6bWxtX2hhc2h8ZmFtX2NhbmNlbF9tb25pdG9yfGZhbV9jbG9zZXxmYW1fbW9uaXRvcl9jb2xsZWN0aW9ufGZhbV9tb25pdG9yX2RpcmVjdG9yeXxcCmZhbV9tb25pdG9yX2ZpbGV8ZmFtX25leHRfZXZlbnR8ZmFtX29wZW58ZmFtX3BlbmRpbmd8ZmFtX3Jlc3VtZV9tb25pdG9yfGZhbV9zdXNwZW5kX21vbml0b3J8ZmJzcWxfYWZmZWN0ZWRfcm93c3xmYnNxbF9hdXRvY29tbWl0fFwKZmJzcWxfYmxvYl9zaXplfGZic3FsX2NoYW5nZV91c2VyfGZic3FsX2Nsb2Jfc2l6ZXxmYnNxbF9jbG9zZXxmYnNxbF9jb21taXR8ZmJzcWxfY29ubmVjdHxmYnNxbF9jcmVhdGVfYmxvYnxmYnNxbF9jcmVhdGVfY2xvYnxcCmZic3FsX2NyZWF0ZV9kYnxmYnNxbF9kYXRhX3NlZWt8ZmJzcWxfZGF0YWJhc2V8ZmJzcWxfZGF0YWJhc2VfcGFzc3dvcmR8ZmJzcWxfZGJfcXVlcnl8ZmJzcWxfZGJfc3RhdHVzfGZic3FsX2Ryb3BfZGJ8ZmJzcWxfZXJybm98XApmYnNxbF9lcnJvcnxmYnNxbF9mZXRjaF9hcnJheXxmYnNxbF9mZXRjaF9hc3NvY3xmYnNxbF9mZXRjaF9maWVsZHxmYnNxbF9mZXRjaF9sZW5ndGhzfGZic3FsX2ZldGNoX29iamVjdHxmYnNxbF9mZXRjaF9yb3d8XApmYnNxbF9maWVsZF9mbGFnc3xmYnNxbF9maWVsZF9sZW58ZmJzcWxfZmllbGRfbmFtZXxmYnNxbF9maWVsZF9zZWVrfGZic3FsX2ZpZWxkX3RhYmxlfGZic3FsX2ZpZWxkX3R5cGV8ZmJzcWxfZnJlZV9yZXN1bHR8XApmYnNxbF9nZXRfYXV0b3N0YXJ0X2luZm98ZmJzcWxfaG9zdG5hbWV8ZmJzcWxfaW5zZXJ0X2lkfGZic3FsX2xpc3RfZGJzfGZic3FsX2xpc3RfZmllbGRzfGZic3FsX2xpc3RfdGFibGVzfGZic3FsX25leHRfcmVzdWx0fFwKZmJzcWxfbnVtX2ZpZWxkc3xmYnNxbF9udW1fcm93c3xmYnNxbF9wYXNzd29yZHxmYnNxbF9wY29ubmVjdHxmYnNxbF9xdWVyeXxmYnNxbF9yZWFkX2Jsb2J8ZmJzcWxfcmVhZF9jbG9ifGZic3FsX3Jlc3VsdHxmYnNxbF9yb2xsYmFja3xcCmZic3FsX3Jvd3NfZmV0Y2hlZHxmYnNxbF9zZWxlY3RfZGJ8ZmJzcWxfc2V0X2NoYXJhY3RlcnNldHxmYnNxbF9zZXRfbG9iX21vZGV8ZmJzcWxfc2V0X3Bhc3N3b3JkfGZic3FsX3NldF90cmFuc2FjdGlvbnxmYnNxbF9zdGFydF9kYnxcCmZic3FsX3N0b3BfZGJ8ZmJzcWxfdGFibGVfbmFtZXxmYnNxbF90YWJsZW5hbWV8ZmJzcWxfdXNlcm5hbWV8ZmJzcWxfd2FybmluZ3N8ZmNsb3NlfGZkZl9hZGRfZG9jX2phdmFzY3JpcHR8ZmRmX2FkZF90ZW1wbGF0ZXxmZGZfY2xvc2V8XApmZGZfY3JlYXRlfGZkZl9lbnVtX3ZhbHVlc3xmZGZfZXJybm98ZmRmX2Vycm9yfGZkZl9nZXRfYXB8ZmRmX2dldF9hdHRhY2htZW50fGZkZl9nZXRfZW5jb2Rpbmd8ZmRmX2dldF9maWxlfGZkZl9nZXRfZmxhZ3N8ZmRmX2dldF9vcHR8XApmZGZfZ2V0X3N0YXR1c3xmZGZfZ2V0X3ZhbHVlfGZkZl9nZXRfdmVyc2lvbnxmZGZfaGVhZGVyfGZkZl9uZXh0X2ZpZWxkX25hbWV8ZmRmX29wZW58ZmRmX29wZW5fc3RyaW5nfGZkZl9yZW1vdmVfaXRlbXxmZGZfc2F2ZXxcCmZkZl9zYXZlX3N0cmluZ3xmZGZfc2V0X2FwfGZkZl9zZXRfZW5jb2Rpbmd8ZmRmX3NldF9maWxlfGZkZl9zZXRfZmxhZ3N8ZmRmX3NldF9qYXZhc2NyaXB0X2FjdGlvbnxmZGZfc2V0X29uX2ltcG9ydF9qYXZhc2NyaXB0fGZkZl9zZXRfb3B0fFwKZmRmX3NldF9zdGF0dXN8ZmRmX3NldF9zdWJtaXRfZm9ybV9hY3Rpb258ZmRmX3NldF90YXJnZXRfZnJhbWV8ZmRmX3NldF92YWx1ZXxmZGZfc2V0X3ZlcnNpb258ZmVvZnxmZmx1c2h8ZmdldGN8ZmdldGNzdnxmZ2V0c3xmZ2V0c3N8ZmlsZXxcCmZpbGVfZXhpc3RzfGZpbGVfZ2V0X2NvbnRlbnRzfGZpbGVfcHV0X2NvbnRlbnRzfGZpbGVhdGltZXxmaWxlY3RpbWV8ZmlsZWdyb3VwfGZpbGVpbm9kZXxmaWxlbXRpbWV8ZmlsZW93bmVyfGZpbGVwZXJtc3xmaWxlcHJvfFwKZmlsZXByb19maWVsZGNvdW50fGZpbGVwcm9fZmllbGRuYW1lfGZpbGVwcm9fZmllbGR0eXBlfGZpbGVwcm9fZmllbGR3aWR0aHxmaWxlcHJvX3JldHJpZXZlfGZpbGVwcm9fcm93Y291bnR8ZmlsZXNpemV8ZmlsZXN5c3RlbWl0ZXJhdG9yfFwKZmlsZXR5cGV8ZmlsdGVyX2hhc192YXJ8ZmlsdGVyX2lkfGZpbHRlcl9pbnB1dHxmaWx0ZXJfaW5wdXRfYXJyYXl8ZmlsdGVyX2xpc3R8ZmlsdGVyX3ZhcnxmaWx0ZXJfdmFyX2FycmF5fGZpbHRlcml0ZXJhdG9yfGZpbmZvX2J1ZmZlcnxcCmZpbmZvX2Nsb3NlfGZpbmZvX2ZpbGV8ZmluZm9fb3BlbnxmaW5mb19zZXRfZmxhZ3N8ZmxvYXR2YWx8ZmxvY2t8Zmxvb3J8Zmx1c2h8Zm1vZHxmbm1hdGNofGZvcGVufGZvcndhcmRfc3RhdGljX2NhbGx8XApmb3J3YXJkX3N0YXRpY19jYWxsX2FycmF5fGZwYXNzdGhydXxmcHJpbnRmfGZwdXRjc3Z8ZnB1dHN8ZnJlYWR8ZnJlbmNodG9qZHxmcmliaWRpX2xvZzJ2aXN8ZnNjYW5mfGZzZWVrfGZzb2Nrb3Blbnxmc3RhdHxmdGVsbHxmdG9rfFwKZnRwX2FsbG9jfGZ0cF9jZHVwfGZ0cF9jaGRpcnxmdHBfY2htb2R8ZnRwX2Nsb3NlfGZ0cF9jb25uZWN0fGZ0cF9kZWxldGV8ZnRwX2V4ZWN8ZnRwX2ZnZXR8ZnRwX2ZwdXR8ZnRwX2dldHxmdHBfZ2V0X29wdGlvbnxmdHBfbG9naW58XApmdHBfbWR0bXxmdHBfbWtkaXJ8ZnRwX25iX2NvbnRpbnVlfGZ0cF9uYl9mZ2V0fGZ0cF9uYl9mcHV0fGZ0cF9uYl9nZXR8ZnRwX25iX3B1dHxmdHBfbmxpc3R8ZnRwX3Bhc3Z8ZnRwX3B1dHxmdHBfcHdkfGZ0cF9xdWl0fGZ0cF9yYXd8XApmdHBfcmF3bGlzdHxmdHBfcmVuYW1lfGZ0cF9ybWRpcnxmdHBfc2V0X29wdGlvbnxmdHBfc2l0ZXxmdHBfc2l6ZXxmdHBfc3NsX2Nvbm5lY3R8ZnRwX3N5c3R5cGV8ZnRydW5jYXRlfGZ1bmNfZ2V0X2FyZ3xmdW5jX2dldF9hcmdzfFwKZnVuY19udW1fYXJnc3xmdW5jdGlvbl9leGlzdHN8ZndyaXRlfGdjX2NvbGxlY3RfY3ljbGVzfGdjX2Rpc2FibGV8Z2NfZW5hYmxlfGdjX2VuYWJsZWR8Z2RfaW5mb3xnZWFybWFuY2xpZW50fGdlYXJtYW5qb2J8Z2Vhcm1hbnRhc2t8XApnZWFybWFud29ya2VyfGdlb2lwX2NvbnRpbmVudF9jb2RlX2J5X25hbWV8Z2VvaXBfY291bnRyeV9jb2RlM19ieV9uYW1lfGdlb2lwX2NvdW50cnlfY29kZV9ieV9uYW1lfGdlb2lwX2NvdW50cnlfbmFtZV9ieV9uYW1lfFwKZ2VvaXBfZGF0YWJhc2VfaW5mb3xnZW9pcF9kYl9hdmFpbHxnZW9pcF9kYl9maWxlbmFtZXxnZW9pcF9kYl9nZXRfYWxsX2luZm98Z2VvaXBfaWRfYnlfbmFtZXxnZW9pcF9pc3BfYnlfbmFtZXxnZW9pcF9vcmdfYnlfbmFtZXxcCmdlb2lwX3JlY29yZF9ieV9uYW1lfGdlb2lwX3JlZ2lvbl9ieV9uYW1lfGdlb2lwX3JlZ2lvbl9uYW1lX2J5X2NvZGV8Z2VvaXBfdGltZV96b25lX2J5X2NvdW50cnlfYW5kX3JlZ2lvbnxnZXRNZXRhfGdldE5hbWVkfGdldFZhbHVlfFwKZ2V0X2Jyb3dzZXJ8Z2V0X2NhbGxlZF9jbGFzc3xnZXRfY2ZnX3ZhcnxnZXRfY2xhc3N8Z2V0X2NsYXNzX21ldGhvZHN8Z2V0X2NsYXNzX3ZhcnN8Z2V0X2N1cnJlbnRfdXNlcnxnZXRfZGVjbGFyZWRfY2xhc3Nlc3xcCmdldF9kZWNsYXJlZF9pbnRlcmZhY2VzfGdldF9kZWNsYXJlZF90cmFpdHN8Z2V0X2RlZmluZWRfY29uc3RhbnRzfGdldF9kZWZpbmVkX2Z1bmN0aW9uc3xnZXRfZGVmaW5lZF92YXJzfGdldF9leHRlbnNpb25fZnVuY3N8Z2V0X2hlYWRlcnN8XApnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZXxnZXRfaW5jbHVkZV9wYXRofGdldF9pbmNsdWRlZF9maWxlc3xnZXRfbG9hZGVkX2V4dGVuc2lvbnN8Z2V0X21hZ2ljX3F1b3Rlc19ncGN8Z2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfFwKZ2V0X21ldGFfdGFnc3xnZXRfb2JqZWN0X3ZhcnN8Z2V0X3BhcmVudF9jbGFzc3xnZXRfcmVxdWlyZWRfZmlsZXN8Z2V0X3Jlc291cmNlX3R5cGV8Z2V0YWxsaGVhZGVyc3xnZXRjb25zdGFudHxnZXRjb25zdGFudHN8Z2V0Y29uc3RydWN0b3J8XApnZXRjd2R8Z2V0ZGF0ZXxnZXRkZWZhdWx0cHJvcGVydGllc3xnZXRkb2Njb21tZW50fGdldGVuZGxpbmV8Z2V0ZW52fGdldGV4dGVuc2lvbnxnZXRleHRlbnNpb25uYW1lfGdldGZpbGVuYW1lfGdldGhvc3RieWFkZHJ8Z2V0aG9zdGJ5bmFtZXxcCmdldGhvc3RieW5hbWVsfGdldGhvc3RuYW1lfGdldGltYWdlc2l6ZXxnZXRpbnRlcmZhY2VuYW1lc3xnZXRpbnRlcmZhY2VzfGdldGxhc3Rtb2R8Z2V0bWV0aG9kfGdldG1ldGhvZHN8Z2V0bW9kaWZpZXJzfGdldG14cnJ8Z2V0bXlnaWR8XApnZXRteWlub2RlfGdldG15cGlkfGdldG15dWlkfGdldG5hbWV8Z2V0bmFtZXNwYWNlbmFtZXxnZXRvcHR8Z2V0cGFyZW50Y2xhc3N8Z2V0cHJvcGVydGllc3xnZXRwcm9wZXJ0eXxnZXRwcm90b2J5bmFtZXxnZXRwcm90b2J5bnVtYmVyfFwKZ2V0cmFuZG1heHxnZXRydXNhZ2V8Z2V0c2VydmJ5bmFtZXxnZXRzZXJ2Ynlwb3J0fGdldHNob3J0bmFtZXxnZXRzdGFydGxpbmV8Z2V0c3RhdGljcHJvcGVydGllc3xnZXRzdGF0aWNwcm9wZXJ0eXZhbHVlfGdldHRleHR8XApnZXR0aW1lb2ZkYXl8Z2V0dHlwZXxnbG9ifGdsb2JpdGVyYXRvcnxnbWFnaWNrfGdtYWdpY2tkcmF3fGdtYWdpY2twaXhlbHxnbWRhdGV8Z21ta3RpbWV8Z21wX2Fic3xnbXBfYWRkfGdtcF9hbmR8Z21wX2NscmJpdHxnbXBfY21wfFwKZ21wX2NvbXxnbXBfZGl2fGdtcF9kaXZfcXxnbXBfZGl2X3FyfGdtcF9kaXZfcnxnbXBfZGl2ZXhhY3R8Z21wX2ZhY3R8Z21wX2djZHxnbXBfZ2NkZXh0fGdtcF9oYW1kaXN0fGdtcF9pbml0fGdtcF9pbnR2YWx8Z21wX2ludmVydHxcCmdtcF9qYWNvYml8Z21wX2xlZ2VuZHJlfGdtcF9tb2R8Z21wX211bHxnbXBfbmVnfGdtcF9uZXh0cHJpbWV8Z21wX29yfGdtcF9wZXJmZWN0X3NxdWFyZXxnbXBfcG9wY291bnR8Z21wX3Bvd3xnbXBfcG93bXxnbXBfcHJvYl9wcmltZXxcCmdtcF9yYW5kb218Z21wX3NjYW4wfGdtcF9zY2FuMXxnbXBfc2V0Yml0fGdtcF9zaWdufGdtcF9zcXJ0fGdtcF9zcXJ0cmVtfGdtcF9zdHJ2YWx8Z21wX3N1YnxnbXBfdGVzdGJpdHxnbXBfeG9yfGdtc3RyZnRpbWV8XApnbnVwZ19hZGRkZWNyeXB0a2V5fGdudXBnX2FkZGVuY3J5cHRrZXl8Z251cGdfYWRkc2lnbmtleXxnbnVwZ19jbGVhcmRlY3J5cHRrZXlzfGdudXBnX2NsZWFyZW5jcnlwdGtleXN8Z251cGdfY2xlYXJzaWdua2V5c3xnbnVwZ19kZWNyeXB0fFwKZ251cGdfZGVjcnlwdHZlcmlmeXxnbnVwZ19lbmNyeXB0fGdudXBnX2VuY3J5cHRzaWdufGdudXBnX2V4cG9ydHxnbnVwZ19nZXRlcnJvcnxnbnVwZ19nZXRwcm90b2NvbHxnbnVwZ19pbXBvcnR8Z251cGdfaW5pdHxnbnVwZ19rZXlpbmZvfFwKZ251cGdfc2V0YXJtb3J8Z251cGdfc2V0ZXJyb3Jtb2RlfGdudXBnX3NldHNpZ25tb2RlfGdudXBnX3NpZ258Z251cGdfdmVyaWZ5fGdvcGhlcl9wYXJzZWRpcnxncmFwaGVtZV9leHRyYWN0fGdyYXBoZW1lX3N0cmlwb3N8XApncmFwaGVtZV9zdHJpc3RyfGdyYXBoZW1lX3N0cmxlbnxncmFwaGVtZV9zdHJwb3N8Z3JhcGhlbWVfc3Rycmlwb3N8Z3JhcGhlbWVfc3RycnBvc3xncmFwaGVtZV9zdHJzdHJ8Z3JhcGhlbWVfc3Vic3RyfGdyZWdvcmlhbnRvamR8XApndXBucF9jb250ZXh0X2dldF9ob3N0X2lwfGd1cG5wX2NvbnRleHRfZ2V0X3BvcnR8Z3VwbnBfY29udGV4dF9nZXRfc3Vic2NyaXB0aW9uX3RpbWVvdXR8Z3VwbnBfY29udGV4dF9ob3N0X3BhdGh8Z3VwbnBfY29udGV4dF9uZXd8XApndXBucF9jb250ZXh0X3NldF9zdWJzY3JpcHRpb25fdGltZW91dHxndXBucF9jb250ZXh0X3RpbWVvdXRfYWRkfGd1cG5wX2NvbnRleHRfdW5ob3N0X3BhdGh8Z3VwbnBfY29udHJvbF9wb2ludF9icm93c2Vfc3RhcnR8XApndXBucF9jb250cm9sX3BvaW50X2Jyb3dzZV9zdG9wfGd1cG5wX2NvbnRyb2xfcG9pbnRfY2FsbGJhY2tfc2V0fGd1cG5wX2NvbnRyb2xfcG9pbnRfbmV3fGd1cG5wX2RldmljZV9hY3Rpb25fY2FsbGJhY2tfc2V0fFwKZ3VwbnBfZGV2aWNlX2luZm9fZ2V0fGd1cG5wX2RldmljZV9pbmZvX2dldF9zZXJ2aWNlfGd1cG5wX3Jvb3RfZGV2aWNlX2dldF9hdmFpbGFibGV8Z3VwbnBfcm9vdF9kZXZpY2VfZ2V0X3JlbGF0aXZlX2xvY2F0aW9ufFwKZ3VwbnBfcm9vdF9kZXZpY2VfbmV3fGd1cG5wX3Jvb3RfZGV2aWNlX3NldF9hdmFpbGFibGV8Z3VwbnBfcm9vdF9kZXZpY2Vfc3RhcnR8Z3VwbnBfcm9vdF9kZXZpY2Vfc3RvcHxndXBucF9zZXJ2aWNlX2FjdGlvbl9nZXR8XApndXBucF9zZXJ2aWNlX2FjdGlvbl9yZXR1cm58Z3VwbnBfc2VydmljZV9hY3Rpb25fcmV0dXJuX2Vycm9yfGd1cG5wX3NlcnZpY2VfYWN0aW9uX3NldHxndXBucF9zZXJ2aWNlX2ZyZWV6ZV9ub3RpZnl8Z3VwbnBfc2VydmljZV9pbmZvX2dldHxcCmd1cG5wX3NlcnZpY2VfaW5mb19nZXRfaW50cm9zcGVjdGlvbnxndXBucF9zZXJ2aWNlX2ludHJvc3BlY3Rpb25fZ2V0X3N0YXRlX3ZhcmlhYmxlfGd1cG5wX3NlcnZpY2Vfbm90aWZ5fGd1cG5wX3NlcnZpY2VfcHJveHlfYWN0aW9uX2dldHxcCmd1cG5wX3NlcnZpY2VfcHJveHlfYWN0aW9uX3NldHxndXBucF9zZXJ2aWNlX3Byb3h5X2FkZF9ub3RpZnl8Z3VwbnBfc2VydmljZV9wcm94eV9jYWxsYmFja19zZXR8Z3VwbnBfc2VydmljZV9wcm94eV9nZXRfc3Vic2NyaWJlZHxcCmd1cG5wX3NlcnZpY2VfcHJveHlfcmVtb3ZlX25vdGlmeXxndXBucF9zZXJ2aWNlX3Byb3h5X3NldF9zdWJzY3JpYmVkfGd1cG5wX3NlcnZpY2VfdGhhd19ub3RpZnl8Z3pjbG9zZXxnemNvbXByZXNzfGd6ZGVjb2RlfGd6ZGVmbGF0ZXxcCmd6ZW5jb2RlfGd6ZW9mfGd6ZmlsZXxnemdldGN8Z3pnZXRzfGd6Z2V0c3N8Z3ppbmZsYXRlfGd6b3BlbnxnenBhc3N0aHJ1fGd6cHV0c3xnenJlYWR8Z3pyZXdpbmR8Z3pzZWVrfGd6dGVsbHxnenVuY29tcHJlc3N8Z3p3cml0ZXxcCmhhbHRfY29tcGlsZXJ8aGFydWFubm90YXRpb258aGFydWFubm90YXRpb25fc2V0Ym9yZGVyc3R5bGV8aGFydWFubm90YXRpb25fc2V0aGlnaGxpZ2h0bW9kZXxoYXJ1YW5ub3RhdGlvbl9zZXRpY29ufFwKaGFydWFubm90YXRpb25fc2V0b3BlbmVkfGhhcnVkZXN0aW5hdGlvbnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0fGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRifGhhcnVkZXN0aW5hdGlvbl9zZXRmaXRiaHxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0YnZ8XApoYXJ1ZGVzdGluYXRpb25fc2V0Zml0aHxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0cnxoYXJ1ZGVzdGluYXRpb25fc2V0Zml0dnxoYXJ1ZGVzdGluYXRpb25fc2V0eHl6fGhhcnVkb2N8aGFydWRvY19hZGRwYWdlfFwKaGFydWRvY19hZGRwYWdlbGFiZWx8aGFydWRvY19jb25zdHJ1Y3R8aGFydWRvY19jcmVhdGVvdXRsaW5lfGhhcnVkb2NfZ2V0Y3VycmVudGVuY29kZXJ8aGFydWRvY19nZXRjdXJyZW50cGFnZXxoYXJ1ZG9jX2dldGVuY29kZXJ8XApoYXJ1ZG9jX2dldGZvbnR8aGFydWRvY19nZXRpbmZvYXR0cnxoYXJ1ZG9jX2dldHBhZ2VsYXlvdXR8aGFydWRvY19nZXRwYWdlbW9kZXxoYXJ1ZG9jX2dldHN0cmVhbXNpemV8aGFydWRvY19pbnNlcnRwYWdlfGhhcnVkb2NfbG9hZGpwZWd8XApoYXJ1ZG9jX2xvYWRwbmd8aGFydWRvY19sb2FkcmF3fGhhcnVkb2NfbG9hZHR0Y3xoYXJ1ZG9jX2xvYWR0dGZ8aGFydWRvY19sb2FkdHlwZTF8aGFydWRvY19vdXRwdXR8aGFydWRvY19yZWFkZnJvbXN0cmVhbXxcCmhhcnVkb2NfcmVzZXRlcnJvcnxoYXJ1ZG9jX3Jlc2V0c3RyZWFtfGhhcnVkb2Nfc2F2ZXxoYXJ1ZG9jX3NhdmV0b3N0cmVhbXxoYXJ1ZG9jX3NldGNvbXByZXNzaW9ubW9kZXxoYXJ1ZG9jX3NldGN1cnJlbnRlbmNvZGVyfFwKaGFydWRvY19zZXRlbmNyeXB0aW9ubW9kZXxoYXJ1ZG9jX3NldGluZm9hdHRyfGhhcnVkb2Nfc2V0aW5mb2RhdGVhdHRyfGhhcnVkb2Nfc2V0b3BlbmFjdGlvbnxoYXJ1ZG9jX3NldHBhZ2VsYXlvdXR8aGFydWRvY19zZXRwYWdlbW9kZXxcCmhhcnVkb2Nfc2V0cGFnZXNjb25maWd1cmF0aW9ufGhhcnVkb2Nfc2V0cGFzc3dvcmR8aGFydWRvY19zZXRwZXJtaXNzaW9ufGhhcnVkb2NfdXNlY25zZW5jb2RpbmdzfGhhcnVkb2NfdXNlY25zZm9udHN8XApoYXJ1ZG9jX3VzZWNudGVuY29kaW5nc3xoYXJ1ZG9jX3VzZWNudGZvbnRzfGhhcnVkb2NfdXNlanBlbmNvZGluZ3N8aGFydWRvY191c2VqcGZvbnRzfGhhcnVkb2NfdXNla3JlbmNvZGluZ3N8aGFydWRvY191c2VrcmZvbnRzfFwKaGFydWVuY29kZXJ8aGFydWVuY29kZXJfZ2V0Ynl0ZXR5cGV8aGFydWVuY29kZXJfZ2V0dHlwZXxoYXJ1ZW5jb2Rlcl9nZXR1bmljb2RlfGhhcnVlbmNvZGVyX2dldHdyaXRpbmdtb2RlfGhhcnVleGNlcHRpb258aGFydWZvbnR8XApoYXJ1Zm9udF9nZXRhc2NlbnR8aGFydWZvbnRfZ2V0Y2FwaGVpZ2h0fGhhcnVmb250X2dldGRlc2NlbnR8aGFydWZvbnRfZ2V0ZW5jb2RpbmduYW1lfGhhcnVmb250X2dldGZvbnRuYW1lfGhhcnVmb250X2dldHRleHR3aWR0aHxcCmhhcnVmb250X2dldHVuaWNvZGV3aWR0aHxoYXJ1Zm9udF9nZXR4aGVpZ2h0fGhhcnVmb250X21lYXN1cmV0ZXh0fGhhcnVpbWFnZXxoYXJ1aW1hZ2VfZ2V0Yml0c3BlcmNvbXBvbmVudHxoYXJ1aW1hZ2VfZ2V0Y29sb3JzcGFjZXxcCmhhcnVpbWFnZV9nZXRoZWlnaHR8aGFydWltYWdlX2dldHNpemV8aGFydWltYWdlX2dldHdpZHRofGhhcnVpbWFnZV9zZXRjb2xvcm1hc2t8aGFydWltYWdlX3NldG1hc2tpbWFnZXxoYXJ1b3V0bGluZXxcCmhhcnVvdXRsaW5lX3NldGRlc3RpbmF0aW9ufGhhcnVvdXRsaW5lX3NldG9wZW5lZHxoYXJ1cGFnZXxoYXJ1cGFnZV9hcmN8aGFydXBhZ2VfYmVnaW50ZXh0fGhhcnVwYWdlX2NpcmNsZXxoYXJ1cGFnZV9jbG9zZXBhdGh8XApoYXJ1cGFnZV9jb25jYXR8aGFydXBhZ2VfY3JlYXRlZGVzdGluYXRpb258aGFydXBhZ2VfY3JlYXRlbGlua2Fubm90YXRpb258aGFydXBhZ2VfY3JlYXRldGV4dGFubm90YXRpb258aGFydXBhZ2VfY3JlYXRldXJsYW5ub3RhdGlvbnxcCmhhcnVwYWdlX2N1cnZldG98aGFydXBhZ2VfY3VydmV0bzJ8aGFydXBhZ2VfY3VydmV0bzN8aGFydXBhZ2VfZHJhd2ltYWdlfGhhcnVwYWdlX2VsbGlwc2V8aGFydXBhZ2VfZW5kcGF0aHxoYXJ1cGFnZV9lbmR0ZXh0fFwKaGFydXBhZ2VfZW9maWxsfGhhcnVwYWdlX2VvZmlsbHN0cm9rZXxoYXJ1cGFnZV9maWxsfGhhcnVwYWdlX2ZpbGxzdHJva2V8aGFydXBhZ2VfZ2V0Y2hhcnNwYWNlfGhhcnVwYWdlX2dldGNteWtmaWxsfGhhcnVwYWdlX2dldGNteWtzdHJva2V8XApoYXJ1cGFnZV9nZXRjdXJyZW50Zm9udHxoYXJ1cGFnZV9nZXRjdXJyZW50Zm9udHNpemV8aGFydXBhZ2VfZ2V0Y3VycmVudHBvc3xoYXJ1cGFnZV9nZXRjdXJyZW50dGV4dHBvc3xoYXJ1cGFnZV9nZXRkYXNofFwKaGFydXBhZ2VfZ2V0ZmlsbGluZ2NvbG9yc3BhY2V8aGFydXBhZ2VfZ2V0ZmxhdG5lc3N8aGFydXBhZ2VfZ2V0Z21vZGV8aGFydXBhZ2VfZ2V0Z3JheWZpbGx8aGFydXBhZ2VfZ2V0Z3JheXN0cm9rZXxoYXJ1cGFnZV9nZXRoZWlnaHR8XApoYXJ1cGFnZV9nZXRob3Jpem9udGFsc2NhbGluZ3xoYXJ1cGFnZV9nZXRsaW5lY2FwfGhhcnVwYWdlX2dldGxpbmVqb2lufGhhcnVwYWdlX2dldGxpbmV3aWR0aHxoYXJ1cGFnZV9nZXRtaXRlcmxpbWl0fGhhcnVwYWdlX2dldHJnYmZpbGx8XApoYXJ1cGFnZV9nZXRyZ2JzdHJva2V8aGFydXBhZ2VfZ2V0c3Ryb2tpbmdjb2xvcnNwYWNlfGhhcnVwYWdlX2dldHRleHRsZWFkaW5nfGhhcnVwYWdlX2dldHRleHRtYXRyaXh8aGFydXBhZ2VfZ2V0dGV4dHJlbmRlcmluZ21vZGV8XApoYXJ1cGFnZV9nZXR0ZXh0cmlzZXxoYXJ1cGFnZV9nZXR0ZXh0d2lkdGh8aGFydXBhZ2VfZ2V0dHJhbnNtYXRyaXh8aGFydXBhZ2VfZ2V0d2lkdGh8aGFydXBhZ2VfZ2V0d29yZHNwYWNlfGhhcnVwYWdlX2xpbmV0b3xcCmhhcnVwYWdlX21lYXN1cmV0ZXh0fGhhcnVwYWdlX21vdmV0ZXh0cG9zfGhhcnVwYWdlX21vdmV0b3xoYXJ1cGFnZV9tb3ZldG9uZXh0bGluZXxoYXJ1cGFnZV9yZWN0YW5nbGV8aGFydXBhZ2Vfc2V0Y2hhcnNwYWNlfFwKaGFydXBhZ2Vfc2V0Y215a2ZpbGx8aGFydXBhZ2Vfc2V0Y215a3N0cm9rZXxoYXJ1cGFnZV9zZXRkYXNofGhhcnVwYWdlX3NldGZsYXRuZXNzfGhhcnVwYWdlX3NldGZvbnRhbmRzaXplfGhhcnVwYWdlX3NldGdyYXlmaWxsfFwKaGFydXBhZ2Vfc2V0Z3JheXN0cm9rZXxoYXJ1cGFnZV9zZXRoZWlnaHR8aGFydXBhZ2Vfc2V0aG9yaXpvbnRhbHNjYWxpbmd8aGFydXBhZ2Vfc2V0bGluZWNhcHxoYXJ1cGFnZV9zZXRsaW5lam9pbnxoYXJ1cGFnZV9zZXRsaW5ld2lkdGh8XApoYXJ1cGFnZV9zZXRtaXRlcmxpbWl0fGhhcnVwYWdlX3NldHJnYmZpbGx8aGFydXBhZ2Vfc2V0cmdic3Ryb2tlfGhhcnVwYWdlX3NldHJvdGF0ZXxoYXJ1cGFnZV9zZXRzaXplfGhhcnVwYWdlX3NldHNsaWRlc2hvd3xcCmhhcnVwYWdlX3NldHRleHRsZWFkaW5nfGhhcnVwYWdlX3NldHRleHRtYXRyaXh8aGFydXBhZ2Vfc2V0dGV4dHJlbmRlcmluZ21vZGV8aGFydXBhZ2Vfc2V0dGV4dHJpc2V8aGFydXBhZ2Vfc2V0d2lkdGh8aGFydXBhZ2Vfc2V0d29yZHNwYWNlfFwKaGFydXBhZ2Vfc2hvd3RleHR8aGFydXBhZ2Vfc2hvd3RleHRuZXh0bGluZXxoYXJ1cGFnZV9zdHJva2V8aGFydXBhZ2VfdGV4dG91dHxoYXJ1cGFnZV90ZXh0cmVjdHxoYXNjb25zdGFudHxoYXNofGhhc2hfYWxnb3N8aGFzaF9jb3B5fFwKaGFzaF9maWxlfGhhc2hfZmluYWx8aGFzaF9obWFjfGhhc2hfaG1hY19maWxlfGhhc2hfaW5pdHxoYXNoX3VwZGF0ZXxoYXNoX3VwZGF0ZV9maWxlfGhhc2hfdXBkYXRlX3N0cmVhbXxoYXNtZXRob2R8aGFzcHJvcGVydHl8aGVhZGVyfFwKaGVhZGVyX3JlZ2lzdGVyX2NhbGxiYWNrfGhlYWRlcl9yZW1vdmV8aGVhZGVyc19saXN0fGhlYWRlcnNfc2VudHxoZWJyZXZ8aGVicmV2Y3xoZXgyYmlufGhleGRlY3xoaWdobGlnaHRfZmlsZXxoaWdobGlnaHRfc3RyaW5nfFwKaHRtbF9lbnRpdHlfZGVjb2RlfGh0bWxlbnRpdGllc3xodG1sc3BlY2lhbGNoYXJzfGh0bWxzcGVjaWFsY2hhcnNfZGVjb2RlfGh0dHBfYnVpbGRfY29va2llfGh0dHBfYnVpbGRfcXVlcnl8aHR0cF9idWlsZF9zdHJ8aHR0cF9idWlsZF91cmx8XApodHRwX2NhY2hlX2V0YWd8aHR0cF9jYWNoZV9sYXN0X21vZGlmaWVkfGh0dHBfY2h1bmtlZF9kZWNvZGV8aHR0cF9kYXRlfGh0dHBfZGVmbGF0ZXxodHRwX2dldHxodHRwX2dldF9yZXF1ZXN0X2JvZHl8XApodHRwX2dldF9yZXF1ZXN0X2JvZHlfc3RyZWFtfGh0dHBfZ2V0X3JlcXVlc3RfaGVhZGVyc3xodHRwX2hlYWR8aHR0cF9pbmZsYXRlfGh0dHBfbWF0Y2hfZXRhZ3xodHRwX21hdGNoX21vZGlmaWVkfFwKaHR0cF9tYXRjaF9yZXF1ZXN0X2hlYWRlcnxodHRwX25lZ290aWF0ZV9jaGFyc2V0fGh0dHBfbmVnb3RpYXRlX2NvbnRlbnRfdHlwZXxodHRwX25lZ290aWF0ZV9sYW5ndWFnZXxodHRwX3BhcnNlX2Nvb2tpZXxodHRwX3BhcnNlX2hlYWRlcnN8XApodHRwX3BhcnNlX21lc3NhZ2V8aHR0cF9wYXJzZV9wYXJhbXN8aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY2xlYW58aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfY291bnR8aHR0cF9wZXJzaXN0ZW50X2hhbmRsZXNfaWRlbnR8XApodHRwX3Bvc3RfZGF0YXxodHRwX3Bvc3RfZmllbGRzfGh0dHBfcHV0X2RhdGF8aHR0cF9wdXRfZmlsZXxodHRwX3B1dF9zdHJlYW18aHR0cF9yZWRpcmVjdHxodHRwX3JlcXVlc3R8aHR0cF9yZXF1ZXN0X2JvZHlfZW5jb2RlfFwKaHR0cF9yZXF1ZXN0X21ldGhvZF9leGlzdHN8aHR0cF9yZXF1ZXN0X21ldGhvZF9uYW1lfGh0dHBfcmVxdWVzdF9tZXRob2RfcmVnaXN0ZXJ8aHR0cF9yZXF1ZXN0X21ldGhvZF91bnJlZ2lzdGVyfGh0dHBfcmVzcG9uc2VfY29kZXxcCmh0dHBfc2VuZF9jb250ZW50X2Rpc3Bvc2l0aW9ufGh0dHBfc2VuZF9jb250ZW50X3R5cGV8aHR0cF9zZW5kX2RhdGF8aHR0cF9zZW5kX2ZpbGV8aHR0cF9zZW5kX2xhc3RfbW9kaWZpZWR8aHR0cF9zZW5kX3N0YXR1c3xcCmh0dHBfc2VuZF9zdHJlYW18aHR0cF9zdXBwb3J0fGh0dHBfdGhyb3R0bGV8aHR0cGRlZmxhdGVzdHJlYW18aHR0cGRlZmxhdGVzdHJlYW1fY29uc3RydWN0fGh0dHBkZWZsYXRlc3RyZWFtX2ZhY3Rvcnl8XApodHRwZGVmbGF0ZXN0cmVhbV9maW5pc2h8aHR0cGRlZmxhdGVzdHJlYW1fZmx1c2h8aHR0cGRlZmxhdGVzdHJlYW1fdXBkYXRlfGh0dHBpbmZsYXRlc3RyZWFtfGh0dHBpbmZsYXRlc3RyZWFtX2NvbnN0cnVjdHxcCmh0dHBpbmZsYXRlc3RyZWFtX2ZhY3Rvcnl8aHR0cGluZmxhdGVzdHJlYW1fZmluaXNofGh0dHBpbmZsYXRlc3RyZWFtX2ZsdXNofGh0dHBpbmZsYXRlc3RyZWFtX3VwZGF0ZXxodHRwbWVzc2FnZXxodHRwbWVzc2FnZV9hZGRoZWFkZXJzfFwKaHR0cG1lc3NhZ2VfY29uc3RydWN0fGh0dHBtZXNzYWdlX2RldGFjaHxodHRwbWVzc2FnZV9mYWN0b3J5fGh0dHBtZXNzYWdlX2Zyb21lbnZ8aHR0cG1lc3NhZ2VfZnJvbXN0cmluZ3xodHRwbWVzc2FnZV9nZXRib2R5fFwKaHR0cG1lc3NhZ2VfZ2V0aGVhZGVyfGh0dHBtZXNzYWdlX2dldGhlYWRlcnN8aHR0cG1lc3NhZ2VfZ2V0aHR0cHZlcnNpb258aHR0cG1lc3NhZ2VfZ2V0cGFyZW50bWVzc2FnZXxodHRwbWVzc2FnZV9nZXRyZXF1ZXN0bWV0aG9kfFwKaHR0cG1lc3NhZ2VfZ2V0cmVxdWVzdHVybHxodHRwbWVzc2FnZV9nZXRyZXNwb25zZWNvZGV8aHR0cG1lc3NhZ2VfZ2V0cmVzcG9uc2VzdGF0dXN8aHR0cG1lc3NhZ2VfZ2V0dHlwZXxodHRwbWVzc2FnZV9ndWVzc2NvbnRlbnR0eXBlfFwKaHR0cG1lc3NhZ2VfcHJlcGVuZHxodHRwbWVzc2FnZV9yZXZlcnNlfGh0dHBtZXNzYWdlX3NlbmR8aHR0cG1lc3NhZ2Vfc2V0Ym9keXxodHRwbWVzc2FnZV9zZXRoZWFkZXJzfGh0dHBtZXNzYWdlX3NldGh0dHB2ZXJzaW9ufFwKaHR0cG1lc3NhZ2Vfc2V0cmVxdWVzdG1ldGhvZHxodHRwbWVzc2FnZV9zZXRyZXF1ZXN0dXJsfGh0dHBtZXNzYWdlX3NldHJlc3BvbnNlY29kZXxodHRwbWVzc2FnZV9zZXRyZXNwb25zZXN0YXR1c3xodHRwbWVzc2FnZV9zZXR0eXBlfFwKaHR0cG1lc3NhZ2VfdG9tZXNzYWdldHlwZW9iamVjdHxodHRwbWVzc2FnZV90b3N0cmluZ3xodHRwcXVlcnlzdHJpbmd8aHR0cHF1ZXJ5c3RyaW5nX2NvbnN0cnVjdHxodHRwcXVlcnlzdHJpbmdfZ2V0fGh0dHBxdWVyeXN0cmluZ19tb2R8XApodHRwcXVlcnlzdHJpbmdfc2V0fGh0dHBxdWVyeXN0cmluZ19zaW5nbGV0b258aHR0cHF1ZXJ5c3RyaW5nX3RvYXJyYXl8aHR0cHF1ZXJ5c3RyaW5nX3Rvc3RyaW5nfGh0dHBxdWVyeXN0cmluZ194bGF0ZXxodHRwcmVxdWVzdHxcCmh0dHByZXF1ZXN0X2FkZGNvb2tpZXN8aHR0cHJlcXVlc3RfYWRkaGVhZGVyc3xodHRwcmVxdWVzdF9hZGRwb3N0ZmllbGRzfGh0dHByZXF1ZXN0X2FkZHBvc3RmaWxlfGh0dHByZXF1ZXN0X2FkZHB1dGRhdGF8XApodHRwcmVxdWVzdF9hZGRxdWVyeWRhdGF8aHR0cHJlcXVlc3RfYWRkcmF3cG9zdGRhdGF8aHR0cHJlcXVlc3RfYWRkc3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9jbGVhcmhpc3Rvcnl8aHR0cHJlcXVlc3RfY29uc3RydWN0fFwKaHR0cHJlcXVlc3RfZW5hYmxlY29va2llc3xodHRwcmVxdWVzdF9nZXRjb250ZW50dHlwZXxodHRwcmVxdWVzdF9nZXRjb29raWVzfGh0dHByZXF1ZXN0X2dldGhlYWRlcnN8aHR0cHJlcXVlc3RfZ2V0aGlzdG9yeXxcCmh0dHByZXF1ZXN0X2dldG1ldGhvZHxodHRwcmVxdWVzdF9nZXRvcHRpb25zfGh0dHByZXF1ZXN0X2dldHBvc3RmaWVsZHN8aHR0cHJlcXVlc3RfZ2V0cG9zdGZpbGVzfGh0dHByZXF1ZXN0X2dldHB1dGRhdGF8XApodHRwcmVxdWVzdF9nZXRwdXRmaWxlfGh0dHByZXF1ZXN0X2dldHF1ZXJ5ZGF0YXxodHRwcmVxdWVzdF9nZXRyYXdwb3N0ZGF0YXxodHRwcmVxdWVzdF9nZXRyYXdyZXF1ZXN0bWVzc2FnZXxcCmh0dHByZXF1ZXN0X2dldHJhd3Jlc3BvbnNlbWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXF1ZXN0bWVzc2FnZXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWJvZHl8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2Vjb2RlfFwKaHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2Vjb29raWVzfGh0dHByZXF1ZXN0X2dldHJlc3BvbnNlZGF0YXxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWhlYWRlcnxodHRwcmVxdWVzdF9nZXRyZXNwb25zZWluZm98XApodHRwcmVxdWVzdF9nZXRyZXNwb25zZW1lc3NhZ2V8aHR0cHJlcXVlc3RfZ2V0cmVzcG9uc2VzdGF0dXN8aHR0cHJlcXVlc3RfZ2V0c3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9nZXR1cmx8aHR0cHJlcXVlc3RfcmVzZXRjb29raWVzfFwKaHR0cHJlcXVlc3Rfc2VuZHxodHRwcmVxdWVzdF9zZXRjb250ZW50dHlwZXxodHRwcmVxdWVzdF9zZXRjb29raWVzfGh0dHByZXF1ZXN0X3NldGhlYWRlcnN8aHR0cHJlcXVlc3Rfc2V0bWV0aG9kfGh0dHByZXF1ZXN0X3NldG9wdGlvbnN8XApodHRwcmVxdWVzdF9zZXRwb3N0ZmllbGRzfGh0dHByZXF1ZXN0X3NldHBvc3RmaWxlc3xodHRwcmVxdWVzdF9zZXRwdXRkYXRhfGh0dHByZXF1ZXN0X3NldHB1dGZpbGV8aHR0cHJlcXVlc3Rfc2V0cXVlcnlkYXRhfFwKaHR0cHJlcXVlc3Rfc2V0cmF3cG9zdGRhdGF8aHR0cHJlcXVlc3Rfc2V0c3Nsb3B0aW9uc3xodHRwcmVxdWVzdF9zZXR1cmx8aHR0cHJlcXVlc3Rwb29sfGh0dHByZXF1ZXN0cG9vbF9hdHRhY2h8aHR0cHJlcXVlc3Rwb29sX2NvbnN0cnVjdHxcCmh0dHByZXF1ZXN0cG9vbF9kZXN0cnVjdHxodHRwcmVxdWVzdHBvb2xfZGV0YWNofGh0dHByZXF1ZXN0cG9vbF9nZXRhdHRhY2hlZHJlcXVlc3RzfGh0dHByZXF1ZXN0cG9vbF9nZXRmaW5pc2hlZHJlcXVlc3RzfFwKaHR0cHJlcXVlc3Rwb29sX3Jlc2V0fGh0dHByZXF1ZXN0cG9vbF9zZW5kfGh0dHByZXF1ZXN0cG9vbF9zb2NrZXRwZXJmb3JtfGh0dHByZXF1ZXN0cG9vbF9zb2NrZXRzZWxlY3R8aHR0cHJlc3BvbnNlfGh0dHByZXNwb25zZV9jYXB0dXJlfFwKaHR0cHJlc3BvbnNlX2dldGJ1ZmZlcnNpemV8aHR0cHJlc3BvbnNlX2dldGNhY2hlfGh0dHByZXNwb25zZV9nZXRjYWNoZWNvbnRyb2x8aHR0cHJlc3BvbnNlX2dldGNvbnRlbnRkaXNwb3NpdGlvbnxcCmh0dHByZXNwb25zZV9nZXRjb250ZW50dHlwZXxodHRwcmVzcG9uc2VfZ2V0ZGF0YXxodHRwcmVzcG9uc2VfZ2V0ZXRhZ3xodHRwcmVzcG9uc2VfZ2V0ZmlsZXxodHRwcmVzcG9uc2VfZ2V0Z3ppcHxodHRwcmVzcG9uc2VfZ2V0aGVhZGVyfFwKaHR0cHJlc3BvbnNlX2dldGxhc3Rtb2RpZmllZHxodHRwcmVzcG9uc2VfZ2V0cmVxdWVzdGJvZHl8aHR0cHJlc3BvbnNlX2dldHJlcXVlc3Rib2R5c3RyZWFtfGh0dHByZXNwb25zZV9nZXRyZXF1ZXN0aGVhZGVyc3xcCmh0dHByZXNwb25zZV9nZXRzdHJlYW18aHR0cHJlc3BvbnNlX2dldHRocm90dGxlZGVsYXl8aHR0cHJlc3BvbnNlX2d1ZXNzY29udGVudHR5cGV8aHR0cHJlc3BvbnNlX3JlZGlyZWN0fGh0dHByZXNwb25zZV9zZW5kfFwKaHR0cHJlc3BvbnNlX3NldGJ1ZmZlcnNpemV8aHR0cHJlc3BvbnNlX3NldGNhY2hlfGh0dHByZXNwb25zZV9zZXRjYWNoZWNvbnRyb2x8aHR0cHJlc3BvbnNlX3NldGNvbnRlbnRkaXNwb3NpdGlvbnxcCmh0dHByZXNwb25zZV9zZXRjb250ZW50dHlwZXxodHRwcmVzcG9uc2Vfc2V0ZGF0YXxodHRwcmVzcG9uc2Vfc2V0ZXRhZ3xodHRwcmVzcG9uc2Vfc2V0ZmlsZXxodHRwcmVzcG9uc2Vfc2V0Z3ppcHxodHRwcmVzcG9uc2Vfc2V0aGVhZGVyfFwKaHR0cHJlc3BvbnNlX3NldGxhc3Rtb2RpZmllZHxodHRwcmVzcG9uc2Vfc2V0c3RyZWFtfGh0dHByZXNwb25zZV9zZXR0aHJvdHRsZWRlbGF5fGh0dHByZXNwb25zZV9zdGF0dXN8aHdfYXJyYXkyb2JqcmVjfGh3X2NoYW5nZW9iamVjdHxcCmh3X2NoaWxkcmVufGh3X2NoaWxkcmVub2JqfGh3X2Nsb3NlfGh3X2Nvbm5lY3R8aHdfY29ubmVjdGlvbl9pbmZvfGh3X2NwfGh3X2RlbGV0ZW9iamVjdHxod19kb2NieWFuY2hvcnxod19kb2NieWFuY2hvcm9ianxcCmh3X2RvY3VtZW50X2F0dHJpYnV0ZXN8aHdfZG9jdW1lbnRfYm9keXRhZ3xod19kb2N1bWVudF9jb250ZW50fGh3X2RvY3VtZW50X3NldGNvbnRlbnR8aHdfZG9jdW1lbnRfc2l6ZXxod19kdW1teXxod19lZGl0dGV4dHxod19lcnJvcnxcCmh3X2Vycm9ybXNnfGh3X2ZyZWVfZG9jdW1lbnR8aHdfZ2V0YW5jaG9yc3xod19nZXRhbmNob3Jzb2JqfGh3X2dldGFuZGxvY2t8aHdfZ2V0Y2hpbGRjb2xsfGh3X2dldGNoaWxkY29sbG9ianxod19nZXRjaGlsZGRvY2NvbGx8XApod19nZXRjaGlsZGRvY2NvbGxvYmp8aHdfZ2V0b2JqZWN0fGh3X2dldG9iamVjdGJ5cXVlcnl8aHdfZ2V0b2JqZWN0YnlxdWVyeWNvbGx8aHdfZ2V0b2JqZWN0YnlxdWVyeWNvbGxvYmp8aHdfZ2V0b2JqZWN0YnlxdWVyeW9ianxcCmh3X2dldHBhcmVudHN8aHdfZ2V0cGFyZW50c29ianxod19nZXRyZWxsaW5rfGh3X2dldHJlbW90ZXxod19nZXRyZW1vdGVjaGlsZHJlbnxod19nZXRzcmNieWRlc3RvYmp8aHdfZ2V0dGV4dHxod19nZXR1c2VybmFtZXxod19pZGVudGlmeXxcCmh3X2luY29sbGVjdGlvbnN8aHdfaW5mb3xod19pbnNjb2xsfGh3X2luc2RvY3xod19pbnNlcnRhbmNob3JzfGh3X2luc2VydGRvY3VtZW50fGh3X2luc2VydG9iamVjdHxod19tYXBpZHxod19tb2RpZnlvYmplY3R8aHdfbXZ8XApod19uZXdfZG9jdW1lbnR8aHdfb2JqcmVjMmFycmF5fGh3X291dHB1dF9kb2N1bWVudHxod19wY29ubmVjdHxod19waXBlZG9jdW1lbnR8aHdfcm9vdHxod19zZXRsaW5rcm9vdHxod19zdGF0fGh3X3VubG9ja3xod193aG98XApod2FwaV9hdHRyaWJ1dGV8aHdhcGlfYXR0cmlidXRlX2tleXxod2FwaV9hdHRyaWJ1dGVfbGFuZ2RlcHZhbHVlfGh3YXBpX2F0dHJpYnV0ZV92YWx1ZXxod2FwaV9hdHRyaWJ1dGVfdmFsdWVzfGh3YXBpX2NoZWNraW58XApod2FwaV9jaGVja291dHxod2FwaV9jaGlsZHJlbnxod2FwaV9jb250ZW50fGh3YXBpX2NvbnRlbnRfbWltZXR5cGV8aHdhcGlfY29udGVudF9yZWFkfGh3YXBpX2NvcHl8aHdhcGlfZGJzdGF0fGh3YXBpX2Rjc3RhdHxcCmh3YXBpX2RzdGFuY2hvcnN8aHdhcGlfZHN0b2ZzcmNhbmNob3J8aHdhcGlfZXJyb3JfY291bnR8aHdhcGlfZXJyb3JfcmVhc29ufGh3YXBpX2ZpbmR8aHdhcGlfZnRzdGF0fGh3YXBpX2hnY3NwfGh3YXBpX2h3c3RhdHxcCmh3YXBpX2lkZW50aWZ5fGh3YXBpX2luZm98aHdhcGlfaW5zZXJ0fGh3YXBpX2luc2VydGFuY2hvcnxod2FwaV9pbnNlcnRjb2xsZWN0aW9ufGh3YXBpX2luc2VydGRvY3VtZW50fGh3YXBpX2xpbmt8aHdhcGlfbG9ja3xod2FwaV9tb3ZlfFwKaHdhcGlfbmV3X2NvbnRlbnR8aHdhcGlfb2JqZWN0fGh3YXBpX29iamVjdF9hc3NpZ258aHdhcGlfb2JqZWN0X2F0dHJlZGl0YWJsZXxod2FwaV9vYmplY3RfY291bnR8aHdhcGlfb2JqZWN0X2luc2VydHxod2FwaV9vYmplY3RfbmV3fFwKaHdhcGlfb2JqZWN0X3JlbW92ZXxod2FwaV9vYmplY3RfdGl0bGV8aHdhcGlfb2JqZWN0X3ZhbHVlfGh3YXBpX29iamVjdGJ5YW5jaG9yfGh3YXBpX3BhcmVudHN8aHdhcGlfcmVhc29uX2Rlc2NyaXB0aW9ufGh3YXBpX3JlYXNvbl90eXBlfFwKaHdhcGlfcmVtb3ZlfGh3YXBpX3JlcGxhY2V8aHdhcGlfc2V0Y29tbWl0dGVkdmVyc2lvbnxod2FwaV9zcmNhbmNob3JzfGh3YXBpX3NyY3NvZmRzdHxod2FwaV91bmxvY2t8aHdhcGlfdXNlcnxod2FwaV91c2VybGlzdHxoeXBvdHxcCmliYXNlX2FkZF91c2VyfGliYXNlX2FmZmVjdGVkX3Jvd3N8aWJhc2VfYmFja3VwfGliYXNlX2Jsb2JfYWRkfGliYXNlX2Jsb2JfY2FuY2VsfGliYXNlX2Jsb2JfY2xvc2V8aWJhc2VfYmxvYl9jcmVhdGV8aWJhc2VfYmxvYl9lY2hvfFwKaWJhc2VfYmxvYl9nZXR8aWJhc2VfYmxvYl9pbXBvcnR8aWJhc2VfYmxvYl9pbmZvfGliYXNlX2Jsb2Jfb3BlbnxpYmFzZV9jbG9zZXxpYmFzZV9jb21taXR8aWJhc2VfY29tbWl0X3JldHxpYmFzZV9jb25uZWN0fGliYXNlX2RiX2luZm98XAppYmFzZV9kZWxldGVfdXNlcnxpYmFzZV9kcm9wX2RifGliYXNlX2VycmNvZGV8aWJhc2VfZXJybXNnfGliYXNlX2V4ZWN1dGV8aWJhc2VfZmV0Y2hfYXNzb2N8aWJhc2VfZmV0Y2hfb2JqZWN0fGliYXNlX2ZldGNoX3Jvd3xcCmliYXNlX2ZpZWxkX2luZm98aWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyfGliYXNlX2ZyZWVfcXVlcnl8aWJhc2VfZnJlZV9yZXN1bHR8aWJhc2VfZ2VuX2lkfGliYXNlX21haW50YWluX2RifGliYXNlX21vZGlmeV91c2VyfFwKaWJhc2VfbmFtZV9yZXN1bHR8aWJhc2VfbnVtX2ZpZWxkc3xpYmFzZV9udW1fcGFyYW1zfGliYXNlX3BhcmFtX2luZm98aWJhc2VfcGNvbm5lY3R8aWJhc2VfcHJlcGFyZXxpYmFzZV9xdWVyeXxpYmFzZV9yZXN0b3JlfFwKaWJhc2Vfcm9sbGJhY2t8aWJhc2Vfcm9sbGJhY2tfcmV0fGliYXNlX3NlcnZlcl9pbmZvfGliYXNlX3NlcnZpY2VfYXR0YWNofGliYXNlX3NlcnZpY2VfZGV0YWNofGliYXNlX3NldF9ldmVudF9oYW5kbGVyfGliYXNlX3RpbWVmbXR8XAppYmFzZV90cmFuc3xpYmFzZV93YWl0X2V2ZW50fGljb252fGljb252X2dldF9lbmNvZGluZ3xpY29udl9taW1lX2RlY29kZXxpY29udl9taW1lX2RlY29kZV9oZWFkZXJzfGljb252X21pbWVfZW5jb2RlfGljb252X3NldF9lbmNvZGluZ3xcCmljb252X3N0cmxlbnxpY29udl9zdHJwb3N8aWNvbnZfc3RycnBvc3xpY29udl9zdWJzdHJ8aWQzX2dldF9mcmFtZV9sb25nX25hbWV8aWQzX2dldF9mcmFtZV9zaG9ydF9uYW1lfGlkM19nZXRfZ2VucmVfaWR8aWQzX2dldF9nZW5yZV9saXN0fFwKaWQzX2dldF9nZW5yZV9uYW1lfGlkM19nZXRfdGFnfGlkM19nZXRfdmVyc2lvbnxpZDNfcmVtb3ZlX3RhZ3xpZDNfc2V0X3RhZ3xpZDN2MmF0dGFjaGVkcGljdHVyZWZyYW1lfGlkM3YyZnJhbWV8aWQzdjJ0YWd8aWRhdGV8XAppZG5fdG9fYXNjaWl8aWRuX3RvX3VuaWNvZGV8aWRuX3RvX3V0Zjh8aWZ4X2FmZmVjdGVkX3Jvd3N8aWZ4X2Jsb2JpbmZpbGVfbW9kZXxpZnhfYnl0ZWFzdmFyY2hhcnxpZnhfY2xvc2V8aWZ4X2Nvbm5lY3R8aWZ4X2NvcHlfYmxvYnxcCmlmeF9jcmVhdGVfYmxvYnxpZnhfY3JlYXRlX2NoYXJ8aWZ4X2RvfGlmeF9lcnJvcnxpZnhfZXJyb3Jtc2d8aWZ4X2ZldGNoX3Jvd3xpZnhfZmllbGRwcm9wZXJ0aWVzfGlmeF9maWVsZHR5cGVzfGlmeF9mcmVlX2Jsb2J8XAppZnhfZnJlZV9jaGFyfGlmeF9mcmVlX3Jlc3VsdHxpZnhfZ2V0X2Jsb2J8aWZ4X2dldF9jaGFyfGlmeF9nZXRzcWxjYXxpZnhfaHRtbHRibF9yZXN1bHR8aWZ4X251bGxmb3JtYXR8aWZ4X251bV9maWVsZHN8aWZ4X251bV9yb3dzfFwKaWZ4X3Bjb25uZWN0fGlmeF9wcmVwYXJlfGlmeF9xdWVyeXxpZnhfdGV4dGFzdmFyY2hhcnxpZnhfdXBkYXRlX2Jsb2J8aWZ4X3VwZGF0ZV9jaGFyfGlmeHVzX2Nsb3NlX3Nsb2J8aWZ4dXNfY3JlYXRlX3Nsb2J8aWZ4dXNfZnJlZV9zbG9ifFwKaWZ4dXNfb3Blbl9zbG9ifGlmeHVzX3JlYWRfc2xvYnxpZnh1c19zZWVrX3Nsb2J8aWZ4dXNfdGVsbF9zbG9ifGlmeHVzX3dyaXRlX3Nsb2J8aWdub3JlX3VzZXJfYWJvcnR8aWlzX2FkZF9zZXJ2ZXJ8aWlzX2dldF9kaXJfc2VjdXJpdHl8XAppaXNfZ2V0X3NjcmlwdF9tYXB8aWlzX2dldF9zZXJ2ZXJfYnlfY29tbWVudHxpaXNfZ2V0X3NlcnZlcl9ieV9wYXRofGlpc19nZXRfc2VydmVyX3JpZ2h0c3xpaXNfZ2V0X3NlcnZpY2Vfc3RhdGV8aWlzX3JlbW92ZV9zZXJ2ZXJ8XAppaXNfc2V0X2FwcF9zZXR0aW5nc3xpaXNfc2V0X2Rpcl9zZWN1cml0eXxpaXNfc2V0X3NjcmlwdF9tYXB8aWlzX3NldF9zZXJ2ZXJfcmlnaHRzfGlpc19zdGFydF9zZXJ2ZXJ8aWlzX3N0YXJ0X3NlcnZpY2V8aWlzX3N0b3Bfc2VydmVyfFwKaWlzX3N0b3Bfc2VydmljZXxpbWFnZTJ3Ym1wfGltYWdlX3R5cGVfdG9fZXh0ZW5zaW9ufGltYWdlX3R5cGVfdG9fbWltZV90eXBlfGltYWdlYWxwaGFibGVuZGluZ3xpbWFnZWFudGlhbGlhc3xpbWFnZWFyY3xpbWFnZWNoYXJ8XAppbWFnZWNoYXJ1cHxpbWFnZWNvbG9yYWxsb2NhdGV8aW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGF8aW1hZ2Vjb2xvcmF0fGltYWdlY29sb3JjbG9zZXN0fGltYWdlY29sb3JjbG9zZXN0YWxwaGF8aW1hZ2Vjb2xvcmNsb3Nlc3Rod2J8XAppbWFnZWNvbG9yZGVhbGxvY2F0ZXxpbWFnZWNvbG9yZXhhY3R8aW1hZ2Vjb2xvcmV4YWN0YWxwaGF8aW1hZ2Vjb2xvcm1hdGNofGltYWdlY29sb3JyZXNvbHZlfGltYWdlY29sb3JyZXNvbHZlYWxwaGF8aW1hZ2Vjb2xvcnNldHxcCmltYWdlY29sb3JzZm9yaW5kZXh8aW1hZ2Vjb2xvcnN0b3RhbHxpbWFnZWNvbG9ydHJhbnNwYXJlbnR8aW1hZ2Vjb252b2x1dGlvbnxpbWFnZWNvcHl8aW1hZ2Vjb3B5bWVyZ2V8aW1hZ2Vjb3B5bWVyZ2VncmF5fFwKaW1hZ2Vjb3B5cmVzYW1wbGVkfGltYWdlY29weXJlc2l6ZWR8aW1hZ2VjcmVhdGV8aW1hZ2VjcmVhdGVmcm9tZ2R8aW1hZ2VjcmVhdGVmcm9tZ2QyfGltYWdlY3JlYXRlZnJvbWdkMnBhcnR8aW1hZ2VjcmVhdGVmcm9tZ2lmfFwKaW1hZ2VjcmVhdGVmcm9tanBlZ3xpbWFnZWNyZWF0ZWZyb21wbmd8aW1hZ2VjcmVhdGVmcm9tc3RyaW5nfGltYWdlY3JlYXRlZnJvbXdibXB8aW1hZ2VjcmVhdGVmcm9teGJtfGltYWdlY3JlYXRlZnJvbXhwbXxcCmltYWdlY3JlYXRldHJ1ZWNvbG9yfGltYWdlZGFzaGVkbGluZXxpbWFnZWRlc3Ryb3l8aW1hZ2VlbGxpcHNlfGltYWdlZmlsbHxpbWFnZWZpbGxlZGFyY3xpbWFnZWZpbGxlZGVsbGlwc2V8aW1hZ2VmaWxsZWRwb2x5Z29ufFwKaW1hZ2VmaWxsZWRyZWN0YW5nbGV8aW1hZ2VmaWxsdG9ib3JkZXJ8aW1hZ2VmaWx0ZXJ8aW1hZ2Vmb250aGVpZ2h0fGltYWdlZm9udHdpZHRofGltYWdlZnRiYm94fGltYWdlZnR0ZXh0fGltYWdlZ2FtbWFjb3JyZWN0fGltYWdlZ2R8XAppbWFnZWdkMnxpbWFnZWdpZnxpbWFnZWdyYWJzY3JlZW58aW1hZ2VncmFid2luZG93fGltYWdlaW50ZXJsYWNlfGltYWdlaXN0cnVlY29sb3J8aW1hZ2VqcGVnfGltYWdlbGF5ZXJlZmZlY3R8aW1hZ2VsaW5lfGltYWdlbG9hZGZvbnR8XAppbWFnZXBhbGV0dGVjb3B5fGltYWdlcG5nfGltYWdlcG9seWdvbnxpbWFnZXBzYmJveHxpbWFnZXBzZW5jb2RlZm9udHxpbWFnZXBzZXh0ZW5kZm9udHxpbWFnZXBzZnJlZWZvbnR8aW1hZ2Vwc2xvYWRmb250fGltYWdlcHNzbGFudGZvbnR8XAppbWFnZXBzdGV4dHxpbWFnZXJlY3RhbmdsZXxpbWFnZXJvdGF0ZXxpbWFnZXNhdmVhbHBoYXxpbWFnZXNldGJydXNofGltYWdlc2V0cGl4ZWx8aW1hZ2VzZXRzdHlsZXxpbWFnZXNldHRoaWNrbmVzc3xpbWFnZXNldHRpbGV8XAppbWFnZXN0cmluZ3xpbWFnZXN0cmluZ3VwfGltYWdlc3h8aW1hZ2VzeXxpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZXxpbWFnZXR0ZmJib3h8aW1hZ2V0dGZ0ZXh0fGltYWdldHlwZXN8aW1hZ2V3Ym1wfGltYWdleGJtfGltYWdpY2t8XAppbWFnaWNrX2FkYXB0aXZlYmx1cmltYWdlfGltYWdpY2tfYWRhcHRpdmVyZXNpemVpbWFnZXxpbWFnaWNrX2FkYXB0aXZlc2hhcnBlbmltYWdlfGltYWdpY2tfYWRhcHRpdmV0aHJlc2hvbGRpbWFnZXxpbWFnaWNrX2FkZGltYWdlfFwKaW1hZ2lja19hZGRub2lzZWltYWdlfGltYWdpY2tfYWZmaW5ldHJhbnNmb3JtaW1hZ2V8aW1hZ2lja19hbmltYXRlaW1hZ2VzfGltYWdpY2tfYW5ub3RhdGVpbWFnZXxpbWFnaWNrX2FwcGVuZGltYWdlc3xpbWFnaWNrX2F2ZXJhZ2VpbWFnZXN8XAppbWFnaWNrX2JsYWNrdGhyZXNob2xkaW1hZ2V8aW1hZ2lja19ibHVyaW1hZ2V8aW1hZ2lja19ib3JkZXJpbWFnZXxpbWFnaWNrX2NoYXJjb2FsaW1hZ2V8aW1hZ2lja19jaG9waW1hZ2V8aW1hZ2lja19jbGVhcnxpbWFnaWNrX2NsaXBpbWFnZXxcCmltYWdpY2tfY2xpcHBhdGhpbWFnZXxpbWFnaWNrX2Nsb25lfGltYWdpY2tfY2x1dGltYWdlfGltYWdpY2tfY29hbGVzY2VpbWFnZXN8aW1hZ2lja19jb2xvcmZsb29kZmlsbGltYWdlfGltYWdpY2tfY29sb3JpemVpbWFnZXxcCmltYWdpY2tfY29tYmluZWltYWdlc3xpbWFnaWNrX2NvbW1lbnRpbWFnZXxpbWFnaWNrX2NvbXBhcmVpbWFnZWNoYW5uZWxzfGltYWdpY2tfY29tcGFyZWltYWdlbGF5ZXJzfGltYWdpY2tfY29tcGFyZWltYWdlc3xcCmltYWdpY2tfY29tcG9zaXRlaW1hZ2V8aW1hZ2lja19jb25zdHJ1Y3R8aW1hZ2lja19jb250cmFzdGltYWdlfGltYWdpY2tfY29udHJhc3RzdHJldGNoaW1hZ2V8aW1hZ2lja19jb252b2x2ZWltYWdlfGltYWdpY2tfY3JvcGltYWdlfFwKaW1hZ2lja19jcm9wdGh1bWJuYWlsaW1hZ2V8aW1hZ2lja19jdXJyZW50fGltYWdpY2tfY3ljbGVjb2xvcm1hcGltYWdlfGltYWdpY2tfZGVjaXBoZXJpbWFnZXxpbWFnaWNrX2RlY29uc3RydWN0aW1hZ2VzfFwKaW1hZ2lja19kZWxldGVpbWFnZWFydGlmYWN0fGltYWdpY2tfZGVzcGVja2xlaW1hZ2V8aW1hZ2lja19kZXN0cm95fGltYWdpY2tfZGlzcGxheWltYWdlfGltYWdpY2tfZGlzcGxheWltYWdlc3xpbWFnaWNrX2Rpc3RvcnRpbWFnZXxcCmltYWdpY2tfZHJhd2ltYWdlfGltYWdpY2tfZWRnZWltYWdlfGltYWdpY2tfZW1ib3NzaW1hZ2V8aW1hZ2lja19lbmNpcGhlcmltYWdlfGltYWdpY2tfZW5oYW5jZWltYWdlfGltYWdpY2tfZXF1YWxpemVpbWFnZXxcCmltYWdpY2tfZXZhbHVhdGVpbWFnZXxpbWFnaWNrX2V4dGVudGltYWdlfGltYWdpY2tfZmxhdHRlbmltYWdlc3xpbWFnaWNrX2ZsaXBpbWFnZXxpbWFnaWNrX2Zsb29kZmlsbHBhaW50aW1hZ2V8aW1hZ2lja19mbG9waW1hZ2V8XAppbWFnaWNrX2ZyYW1laW1hZ2V8aW1hZ2lja19meGltYWdlfGltYWdpY2tfZ2FtbWFpbWFnZXxpbWFnaWNrX2dhdXNzaWFuYmx1cmltYWdlfGltYWdpY2tfZ2V0Y29sb3JzcGFjZXxpbWFnaWNrX2dldGNvbXByZXNzaW9ufFwKaW1hZ2lja19nZXRjb21wcmVzc2lvbnF1YWxpdHl8aW1hZ2lja19nZXRjb3B5cmlnaHR8aW1hZ2lja19nZXRmaWxlbmFtZXxpbWFnaWNrX2dldGZvbnR8aW1hZ2lja19nZXRmb3JtYXR8aW1hZ2lja19nZXRncmF2aXR5fFwKaW1hZ2lja19nZXRob21ldXJsfGltYWdpY2tfZ2V0aW1hZ2V8aW1hZ2lja19nZXRpbWFnZWFscGhhY2hhbm5lbHxpbWFnaWNrX2dldGltYWdlYXJ0aWZhY3R8aW1hZ2lja19nZXRpbWFnZWJhY2tncm91bmRjb2xvcnxcCmltYWdpY2tfZ2V0aW1hZ2VibG9ifGltYWdpY2tfZ2V0aW1hZ2VibHVlcHJpbWFyeXxpbWFnaWNrX2dldGltYWdlYm9yZGVyY29sb3J8aW1hZ2lja19nZXRpbWFnZWNoYW5uZWxkZXB0aHxcCmltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZGlzdG9ydGlvbnxpbWFnaWNrX2dldGltYWdlY2hhbm5lbGRpc3RvcnRpb25zfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsZXh0cmVtYXxpbWFnaWNrX2dldGltYWdlY2hhbm5lbG1lYW58XAppbWFnaWNrX2dldGltYWdlY2hhbm5lbHJhbmdlfGltYWdpY2tfZ2V0aW1hZ2VjaGFubmVsc3RhdGlzdGljc3xpbWFnaWNrX2dldGltYWdlY2xpcG1hc2t8aW1hZ2lja19nZXRpbWFnZWNvbG9ybWFwY29sb3J8XAppbWFnaWNrX2dldGltYWdlY29sb3JzfGltYWdpY2tfZ2V0aW1hZ2Vjb2xvcnNwYWNlfGltYWdpY2tfZ2V0aW1hZ2Vjb21wb3NlfGltYWdpY2tfZ2V0aW1hZ2Vjb21wcmVzc2lvbnxpbWFnaWNrX2dldGltYWdlY29tcHJlc3Npb25xdWFsaXR5fFwKaW1hZ2lja19nZXRpbWFnZWRlbGF5fGltYWdpY2tfZ2V0aW1hZ2VkZXB0aHxpbWFnaWNrX2dldGltYWdlZGlzcG9zZXxpbWFnaWNrX2dldGltYWdlZGlzdG9ydGlvbnxpbWFnaWNrX2dldGltYWdlZXh0cmVtYXxcCmltYWdpY2tfZ2V0aW1hZ2VmaWxlbmFtZXxpbWFnaWNrX2dldGltYWdlZm9ybWF0fGltYWdpY2tfZ2V0aW1hZ2VnYW1tYXxpbWFnaWNrX2dldGltYWdlZ2VvbWV0cnl8aW1hZ2lja19nZXRpbWFnZWdyYXZpdHl8XAppbWFnaWNrX2dldGltYWdlZ3JlZW5wcmltYXJ5fGltYWdpY2tfZ2V0aW1hZ2VoZWlnaHR8aW1hZ2lja19nZXRpbWFnZWhpc3RvZ3JhbXxpbWFnaWNrX2dldGltYWdlaW5kZXh8aW1hZ2lja19nZXRpbWFnZWludGVybGFjZXNjaGVtZXxcCmltYWdpY2tfZ2V0aW1hZ2VpbnRlcnBvbGF0ZW1ldGhvZHxpbWFnaWNrX2dldGltYWdlaXRlcmF0aW9uc3xpbWFnaWNrX2dldGltYWdlbGVuZ3RofGltYWdpY2tfZ2V0aW1hZ2VtYWdpY2tsaWNlbnNlfGltYWdpY2tfZ2V0aW1hZ2VtYXR0ZXxcCmltYWdpY2tfZ2V0aW1hZ2VtYXR0ZWNvbG9yfGltYWdpY2tfZ2V0aW1hZ2VvcmllbnRhdGlvbnxpbWFnaWNrX2dldGltYWdlcGFnZXxpbWFnaWNrX2dldGltYWdlcGl4ZWxjb2xvcnxpbWFnaWNrX2dldGltYWdlcHJvZmlsZXxcCmltYWdpY2tfZ2V0aW1hZ2Vwcm9maWxlc3xpbWFnaWNrX2dldGltYWdlcHJvcGVydGllc3xpbWFnaWNrX2dldGltYWdlcHJvcGVydHl8aW1hZ2lja19nZXRpbWFnZXJlZHByaW1hcnl8aW1hZ2lja19nZXRpbWFnZXJlZ2lvbnxcCmltYWdpY2tfZ2V0aW1hZ2VyZW5kZXJpbmdpbnRlbnR8aW1hZ2lja19nZXRpbWFnZXJlc29sdXRpb258aW1hZ2lja19nZXRpbWFnZXNibG9ifGltYWdpY2tfZ2V0aW1hZ2VzY2VuZXxpbWFnaWNrX2dldGltYWdlc2lnbmF0dXJlfFwKaW1hZ2lja19nZXRpbWFnZXNpemV8aW1hZ2lja19nZXRpbWFnZXRpY2tzcGVyc2Vjb25kfGltYWdpY2tfZ2V0aW1hZ2V0b3RhbGlua2RlbnNpdHl8aW1hZ2lja19nZXRpbWFnZXR5cGV8aW1hZ2lja19nZXRpbWFnZXVuaXRzfFwKaW1hZ2lja19nZXRpbWFnZXZpcnR1YWxwaXhlbG1ldGhvZHxpbWFnaWNrX2dldGltYWdld2hpdGVwb2ludHxpbWFnaWNrX2dldGltYWdld2lkdGh8aW1hZ2lja19nZXRpbnRlcmxhY2VzY2hlbWV8aW1hZ2lja19nZXRpdGVyYXRvcmluZGV4fFwKaW1hZ2lja19nZXRudW1iZXJpbWFnZXN8aW1hZ2lja19nZXRvcHRpb258aW1hZ2lja19nZXRwYWNrYWdlbmFtZXxpbWFnaWNrX2dldHBhZ2V8aW1hZ2lja19nZXRwaXhlbGl0ZXJhdG9yfGltYWdpY2tfZ2V0cGl4ZWxyZWdpb25pdGVyYXRvcnxcCmltYWdpY2tfZ2V0cG9pbnRzaXplfGltYWdpY2tfZ2V0cXVhbnR1bWRlcHRofGltYWdpY2tfZ2V0cXVhbnR1bXJhbmdlfGltYWdpY2tfZ2V0cmVsZWFzZWRhdGV8aW1hZ2lja19nZXRyZXNvdXJjZXxpbWFnaWNrX2dldHJlc291cmNlbGltaXR8XAppbWFnaWNrX2dldHNhbXBsaW5nZmFjdG9yc3xpbWFnaWNrX2dldHNpemV8aW1hZ2lja19nZXRzaXplb2Zmc2V0fGltYWdpY2tfZ2V0dmVyc2lvbnxpbWFnaWNrX2hhc25leHRpbWFnZXxpbWFnaWNrX2hhc3ByZXZpb3VzaW1hZ2V8XAppbWFnaWNrX2lkZW50aWZ5aW1hZ2V8aW1hZ2lja19pbXBsb2RlaW1hZ2V8aW1hZ2lja19sYWJlbGltYWdlfGltYWdpY2tfbGV2ZWxpbWFnZXxpbWFnaWNrX2xpbmVhcnN0cmV0Y2hpbWFnZXxpbWFnaWNrX2xpcXVpZHJlc2NhbGVpbWFnZXxcCmltYWdpY2tfbWFnbmlmeWltYWdlfGltYWdpY2tfbWFwaW1hZ2V8aW1hZ2lja19tYXR0ZWZsb29kZmlsbGltYWdlfGltYWdpY2tfbWVkaWFuZmlsdGVyaW1hZ2V8aW1hZ2lja19tZXJnZWltYWdlbGF5ZXJzfGltYWdpY2tfbWluaWZ5aW1hZ2V8XAppbWFnaWNrX21vZHVsYXRlaW1hZ2V8aW1hZ2lja19tb250YWdlaW1hZ2V8aW1hZ2lja19tb3JwaGltYWdlc3xpbWFnaWNrX21vc2FpY2ltYWdlc3xpbWFnaWNrX21vdGlvbmJsdXJpbWFnZXxpbWFnaWNrX25lZ2F0ZWltYWdlfFwKaW1hZ2lja19uZXdpbWFnZXxpbWFnaWNrX25ld3BzZXVkb2ltYWdlfGltYWdpY2tfbmV4dGltYWdlfGltYWdpY2tfbm9ybWFsaXplaW1hZ2V8aW1hZ2lja19vaWxwYWludGltYWdlfGltYWdpY2tfb3BhcXVlcGFpbnRpbWFnZXxcCmltYWdpY2tfb3B0aW1pemVpbWFnZWxheWVyc3xpbWFnaWNrX29yZGVyZWRwb3N0ZXJpemVpbWFnZXxpbWFnaWNrX3BhaW50Zmxvb2RmaWxsaW1hZ2V8aW1hZ2lja19wYWludG9wYXF1ZWltYWdlfFwKaW1hZ2lja19wYWludHRyYW5zcGFyZW50aW1hZ2V8aW1hZ2lja19waW5naW1hZ2V8aW1hZ2lja19waW5naW1hZ2VibG9ifGltYWdpY2tfcGluZ2ltYWdlZmlsZXxpbWFnaWNrX3BvbGFyb2lkaW1hZ2V8aW1hZ2lja19wb3N0ZXJpemVpbWFnZXxcCmltYWdpY2tfcHJldmlld2ltYWdlc3xpbWFnaWNrX3ByZXZpb3VzaW1hZ2V8aW1hZ2lja19wcm9maWxlaW1hZ2V8aW1hZ2lja19xdWFudGl6ZWltYWdlfGltYWdpY2tfcXVhbnRpemVpbWFnZXN8aW1hZ2lja19xdWVyeWZvbnRtZXRyaWNzfFwKaW1hZ2lja19xdWVyeWZvbnRzfGltYWdpY2tfcXVlcnlmb3JtYXRzfGltYWdpY2tfcmFkaWFsYmx1cmltYWdlfGltYWdpY2tfcmFpc2VpbWFnZXxpbWFnaWNrX3JhbmRvbXRocmVzaG9sZGltYWdlfGltYWdpY2tfcmVhZGltYWdlfFwKaW1hZ2lja19yZWFkaW1hZ2VibG9ifGltYWdpY2tfcmVhZGltYWdlZmlsZXxpbWFnaWNrX3JlY29sb3JpbWFnZXxpbWFnaWNrX3JlZHVjZW5vaXNlaW1hZ2V8aW1hZ2lja19yZW1vdmVpbWFnZXxpbWFnaWNrX3JlbW92ZWltYWdlcHJvZmlsZXxcCmltYWdpY2tfcmVuZGVyfGltYWdpY2tfcmVzYW1wbGVpbWFnZXxpbWFnaWNrX3Jlc2V0aW1hZ2VwYWdlfGltYWdpY2tfcmVzaXplaW1hZ2V8aW1hZ2lja19yb2xsaW1hZ2V8aW1hZ2lja19yb3RhdGVpbWFnZXxcCmltYWdpY2tfcm91bmRjb3JuZXJzfGltYWdpY2tfc2FtcGxlaW1hZ2V8aW1hZ2lja19zY2FsZWltYWdlfGltYWdpY2tfc2VwYXJhdGVpbWFnZWNoYW5uZWx8aW1hZ2lja19zZXBpYXRvbmVpbWFnZXxcCmltYWdpY2tfc2V0YmFja2dyb3VuZGNvbG9yfGltYWdpY2tfc2V0Y29sb3JzcGFjZXxpbWFnaWNrX3NldGNvbXByZXNzaW9ufGltYWdpY2tfc2V0Y29tcHJlc3Npb25xdWFsaXR5fGltYWdpY2tfc2V0ZmlsZW5hbWV8XAppbWFnaWNrX3NldGZpcnN0aXRlcmF0b3J8aW1hZ2lja19zZXRmb250fGltYWdpY2tfc2V0Zm9ybWF0fGltYWdpY2tfc2V0Z3Jhdml0eXxpbWFnaWNrX3NldGltYWdlfGltYWdpY2tfc2V0aW1hZ2VhbHBoYWNoYW5uZWx8XAppbWFnaWNrX3NldGltYWdlYXJ0aWZhY3R8aW1hZ2lja19zZXRpbWFnZWJhY2tncm91bmRjb2xvcnxpbWFnaWNrX3NldGltYWdlYmlhc3xpbWFnaWNrX3NldGltYWdlYmx1ZXByaW1hcnl8aW1hZ2lja19zZXRpbWFnZWJvcmRlcmNvbG9yfFwKaW1hZ2lja19zZXRpbWFnZWNoYW5uZWxkZXB0aHxpbWFnaWNrX3NldGltYWdlY2xpcG1hc2t8aW1hZ2lja19zZXRpbWFnZWNvbG9ybWFwY29sb3J8aW1hZ2lja19zZXRpbWFnZWNvbG9yc3BhY2V8aW1hZ2lja19zZXRpbWFnZWNvbXBvc2V8XAppbWFnaWNrX3NldGltYWdlY29tcHJlc3Npb258aW1hZ2lja19zZXRpbWFnZWNvbXByZXNzaW9ucXVhbGl0eXxpbWFnaWNrX3NldGltYWdlZGVsYXl8aW1hZ2lja19zZXRpbWFnZWRlcHRofGltYWdpY2tfc2V0aW1hZ2VkaXNwb3NlfFwKaW1hZ2lja19zZXRpbWFnZWV4dGVudHxpbWFnaWNrX3NldGltYWdlZmlsZW5hbWV8aW1hZ2lja19zZXRpbWFnZWZvcm1hdHxpbWFnaWNrX3NldGltYWdlZ2FtbWF8aW1hZ2lja19zZXRpbWFnZWdyYXZpdHl8XAppbWFnaWNrX3NldGltYWdlZ3JlZW5wcmltYXJ5fGltYWdpY2tfc2V0aW1hZ2VpbmRleHxpbWFnaWNrX3NldGltYWdlaW50ZXJsYWNlc2NoZW1lfGltYWdpY2tfc2V0aW1hZ2VpbnRlcnBvbGF0ZW1ldGhvZHxcCmltYWdpY2tfc2V0aW1hZ2VpdGVyYXRpb25zfGltYWdpY2tfc2V0aW1hZ2VtYXR0ZXxpbWFnaWNrX3NldGltYWdlbWF0dGVjb2xvcnxpbWFnaWNrX3NldGltYWdlb3BhY2l0eXxpbWFnaWNrX3NldGltYWdlb3JpZW50YXRpb258XAppbWFnaWNrX3NldGltYWdlcGFnZXxpbWFnaWNrX3NldGltYWdlcHJvZmlsZXxpbWFnaWNrX3NldGltYWdlcHJvcGVydHl8aW1hZ2lja19zZXRpbWFnZXJlZHByaW1hcnl8aW1hZ2lja19zZXRpbWFnZXJlbmRlcmluZ2ludGVudHxcCmltYWdpY2tfc2V0aW1hZ2VyZXNvbHV0aW9ufGltYWdpY2tfc2V0aW1hZ2VzY2VuZXxpbWFnaWNrX3NldGltYWdldGlja3NwZXJzZWNvbmR8aW1hZ2lja19zZXRpbWFnZXR5cGV8aW1hZ2lja19zZXRpbWFnZXVuaXRzfFwKaW1hZ2lja19zZXRpbWFnZXZpcnR1YWxwaXhlbG1ldGhvZHxpbWFnaWNrX3NldGltYWdld2hpdGVwb2ludHxpbWFnaWNrX3NldGludGVybGFjZXNjaGVtZXxpbWFnaWNrX3NldGl0ZXJhdG9yaW5kZXh8aW1hZ2lja19zZXRsYXN0aXRlcmF0b3J8XAppbWFnaWNrX3NldG9wdGlvbnxpbWFnaWNrX3NldHBhZ2V8aW1hZ2lja19zZXRwb2ludHNpemV8aW1hZ2lja19zZXRyZXNvbHV0aW9ufGltYWdpY2tfc2V0cmVzb3VyY2VsaW1pdHxpbWFnaWNrX3NldHNhbXBsaW5nZmFjdG9yc3xcCmltYWdpY2tfc2V0c2l6ZXxpbWFnaWNrX3NldHNpemVvZmZzZXR8aW1hZ2lja19zZXR0eXBlfGltYWdpY2tfc2hhZGVpbWFnZXxpbWFnaWNrX3NoYWRvd2ltYWdlfGltYWdpY2tfc2hhcnBlbmltYWdlfGltYWdpY2tfc2hhdmVpbWFnZXxcCmltYWdpY2tfc2hlYXJpbWFnZXxpbWFnaWNrX3NpZ21vaWRhbGNvbnRyYXN0aW1hZ2V8aW1hZ2lja19za2V0Y2hpbWFnZXxpbWFnaWNrX3NvbGFyaXplaW1hZ2V8aW1hZ2lja19zcGxpY2VpbWFnZXxpbWFnaWNrX3NwcmVhZGltYWdlfFwKaW1hZ2lja19zdGVnYW5vaW1hZ2V8aW1hZ2lja19zdGVyZW9pbWFnZXxpbWFnaWNrX3N0cmlwaW1hZ2V8aW1hZ2lja19zd2lybGltYWdlfGltYWdpY2tfdGV4dHVyZWltYWdlfGltYWdpY2tfdGhyZXNob2xkaW1hZ2V8XAppbWFnaWNrX3RodW1ibmFpbGltYWdlfGltYWdpY2tfdGludGltYWdlfGltYWdpY2tfdHJhbnNmb3JtaW1hZ2V8aW1hZ2lja190cmFuc3BhcmVudHBhaW50aW1hZ2V8aW1hZ2lja190cmFuc3Bvc2VpbWFnZXxcCmltYWdpY2tfdHJhbnN2ZXJzZWltYWdlfGltYWdpY2tfdHJpbWltYWdlfGltYWdpY2tfdW5pcXVlaW1hZ2Vjb2xvcnN8aW1hZ2lja191bnNoYXJwbWFza2ltYWdlfGltYWdpY2tfdmFsaWR8aW1hZ2lja192aWduZXR0ZWltYWdlfFwKaW1hZ2lja193YXZlaW1hZ2V8aW1hZ2lja193aGl0ZXRocmVzaG9sZGltYWdlfGltYWdpY2tfd3JpdGVpbWFnZXxpbWFnaWNrX3dyaXRlaW1hZ2VmaWxlfGltYWdpY2tfd3JpdGVpbWFnZXN8aW1hZ2lja193cml0ZWltYWdlc2ZpbGV8XAppbWFnaWNrZHJhd3xpbWFnaWNrZHJhd19hZmZpbmV8aW1hZ2lja2RyYXdfYW5ub3RhdGlvbnxpbWFnaWNrZHJhd19hcmN8aW1hZ2lja2RyYXdfYmV6aWVyfGltYWdpY2tkcmF3X2NpcmNsZXxpbWFnaWNrZHJhd19jbGVhcnxcCmltYWdpY2tkcmF3X2Nsb25lfGltYWdpY2tkcmF3X2NvbG9yfGltYWdpY2tkcmF3X2NvbW1lbnR8aW1hZ2lja2RyYXdfY29tcG9zaXRlfGltYWdpY2tkcmF3X2NvbnN0cnVjdHxpbWFnaWNrZHJhd19kZXN0cm95fFwKaW1hZ2lja2RyYXdfZWxsaXBzZXxpbWFnaWNrZHJhd19nZXRjbGlwcGF0aHxpbWFnaWNrZHJhd19nZXRjbGlwcnVsZXxpbWFnaWNrZHJhd19nZXRjbGlwdW5pdHN8aW1hZ2lja2RyYXdfZ2V0ZmlsbGNvbG9yfFwKaW1hZ2lja2RyYXdfZ2V0ZmlsbG9wYWNpdHl8aW1hZ2lja2RyYXdfZ2V0ZmlsbHJ1bGV8aW1hZ2lja2RyYXdfZ2V0Zm9udHxpbWFnaWNrZHJhd19nZXRmb250ZmFtaWx5fGltYWdpY2tkcmF3X2dldGZvbnRzaXplfFwKaW1hZ2lja2RyYXdfZ2V0Zm9udHN0eWxlfGltYWdpY2tkcmF3X2dldGZvbnR3ZWlnaHR8aW1hZ2lja2RyYXdfZ2V0Z3Jhdml0eXxpbWFnaWNrZHJhd19nZXRzdHJva2VhbnRpYWxpYXN8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlY29sb3J8XAppbWFnaWNrZHJhd19nZXRzdHJva2VkYXNoYXJyYXl8aW1hZ2lja2RyYXdfZ2V0c3Ryb2tlZGFzaG9mZnNldHxpbWFnaWNrZHJhd19nZXRzdHJva2VsaW5lY2FwfGltYWdpY2tkcmF3X2dldHN0cm9rZWxpbmVqb2lufFwKaW1hZ2lja2RyYXdfZ2V0c3Ryb2tlbWl0ZXJsaW1pdHxpbWFnaWNrZHJhd19nZXRzdHJva2VvcGFjaXR5fGltYWdpY2tkcmF3X2dldHN0cm9rZXdpZHRofGltYWdpY2tkcmF3X2dldHRleHRhbGlnbm1lbnR8XAppbWFnaWNrZHJhd19nZXR0ZXh0YW50aWFsaWFzfGltYWdpY2tkcmF3X2dldHRleHRkZWNvcmF0aW9ufGltYWdpY2tkcmF3X2dldHRleHRlbmNvZGluZ3xpbWFnaWNrZHJhd19nZXR0ZXh0dW5kZXJjb2xvcnxcCmltYWdpY2tkcmF3X2dldHZlY3RvcmdyYXBoaWNzfGltYWdpY2tkcmF3X2xpbmV8aW1hZ2lja2RyYXdfbWF0dGV8aW1hZ2lja2RyYXdfcGF0aGNsb3NlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvYWJzb2x1dGV8XAppbWFnaWNrZHJhd19wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcmFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVycmVsYXRpdmV8XAppbWFnaWNrZHJhd19wYXRoY3VydmV0b3F1YWRyYXRpY2JlemllcnNtb290aGFic29sdXRlfGltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvcXVhZHJhdGljYmV6aWVyc21vb3RocmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9yZWxhdGl2ZXxcCmltYWdpY2tkcmF3X3BhdGhjdXJ2ZXRvc21vb3RoYWJzb2x1dGV8aW1hZ2lja2RyYXdfcGF0aGN1cnZldG9zbW9vdGhyZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRoZWxsaXB0aWNhcmNhYnNvbHV0ZXxcCmltYWdpY2tkcmF3X3BhdGhlbGxpcHRpY2FyY3JlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhmaW5pc2h8aW1hZ2lja2RyYXdfcGF0aGxpbmV0b2Fic29sdXRlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG9ob3Jpem9udGFsYWJzb2x1dGV8XAppbWFnaWNrZHJhd19wYXRobGluZXRvaG9yaXpvbnRhbHJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhsaW5ldG9yZWxhdGl2ZXxpbWFnaWNrZHJhd19wYXRobGluZXRvdmVydGljYWxhYnNvbHV0ZXxcCmltYWdpY2tkcmF3X3BhdGhsaW5ldG92ZXJ0aWNhbHJlbGF0aXZlfGltYWdpY2tkcmF3X3BhdGhtb3ZldG9hYnNvbHV0ZXxpbWFnaWNrZHJhd19wYXRobW92ZXRvcmVsYXRpdmV8aW1hZ2lja2RyYXdfcGF0aHN0YXJ0fFwKaW1hZ2lja2RyYXdfcG9pbnR8aW1hZ2lja2RyYXdfcG9seWdvbnxpbWFnaWNrZHJhd19wb2x5bGluZXxpbWFnaWNrZHJhd19wb3B8aW1hZ2lja2RyYXdfcG9wY2xpcHBhdGh8aW1hZ2lja2RyYXdfcG9wZGVmc3xcCmltYWdpY2tkcmF3X3BvcHBhdHRlcm58aW1hZ2lja2RyYXdfcHVzaHxpbWFnaWNrZHJhd19wdXNoY2xpcHBhdGh8aW1hZ2lja2RyYXdfcHVzaGRlZnN8aW1hZ2lja2RyYXdfcHVzaHBhdHRlcm58aW1hZ2lja2RyYXdfcmVjdGFuZ2xlfFwKaW1hZ2lja2RyYXdfcmVuZGVyfGltYWdpY2tkcmF3X3JvdGF0ZXxpbWFnaWNrZHJhd19yb3VuZHJlY3RhbmdsZXxpbWFnaWNrZHJhd19zY2FsZXxpbWFnaWNrZHJhd19zZXRjbGlwcGF0aHxpbWFnaWNrZHJhd19zZXRjbGlwcnVsZXxcCmltYWdpY2tkcmF3X3NldGNsaXB1bml0c3xpbWFnaWNrZHJhd19zZXRmaWxsYWxwaGF8aW1hZ2lja2RyYXdfc2V0ZmlsbGNvbG9yfGltYWdpY2tkcmF3X3NldGZpbGxvcGFjaXR5fGltYWdpY2tkcmF3X3NldGZpbGxwYXR0ZXJudXJsfFwKaW1hZ2lja2RyYXdfc2V0ZmlsbHJ1bGV8aW1hZ2lja2RyYXdfc2V0Zm9udHxpbWFnaWNrZHJhd19zZXRmb250ZmFtaWx5fGltYWdpY2tkcmF3X3NldGZvbnRzaXplfGltYWdpY2tkcmF3X3NldGZvbnRzdHJldGNofFwKaW1hZ2lja2RyYXdfc2V0Zm9udHN0eWxlfGltYWdpY2tkcmF3X3NldGZvbnR3ZWlnaHR8aW1hZ2lja2RyYXdfc2V0Z3Jhdml0eXxpbWFnaWNrZHJhd19zZXRzdHJva2VhbHBoYXxpbWFnaWNrZHJhd19zZXRzdHJva2VhbnRpYWxpYXN8XAppbWFnaWNrZHJhd19zZXRzdHJva2Vjb2xvcnxpbWFnaWNrZHJhd19zZXRzdHJva2VkYXNoYXJyYXl8aW1hZ2lja2RyYXdfc2V0c3Ryb2tlZGFzaG9mZnNldHxpbWFnaWNrZHJhd19zZXRzdHJva2VsaW5lY2FwfFwKaW1hZ2lja2RyYXdfc2V0c3Ryb2tlbGluZWpvaW58aW1hZ2lja2RyYXdfc2V0c3Ryb2tlbWl0ZXJsaW1pdHxpbWFnaWNrZHJhd19zZXRzdHJva2VvcGFjaXR5fGltYWdpY2tkcmF3X3NldHN0cm9rZXBhdHRlcm51cmx8XAppbWFnaWNrZHJhd19zZXRzdHJva2V3aWR0aHxpbWFnaWNrZHJhd19zZXR0ZXh0YWxpZ25tZW50fGltYWdpY2tkcmF3X3NldHRleHRhbnRpYWxpYXN8aW1hZ2lja2RyYXdfc2V0dGV4dGRlY29yYXRpb258XAppbWFnaWNrZHJhd19zZXR0ZXh0ZW5jb2Rpbmd8aW1hZ2lja2RyYXdfc2V0dGV4dHVuZGVyY29sb3J8aW1hZ2lja2RyYXdfc2V0dmVjdG9yZ3JhcGhpY3N8aW1hZ2lja2RyYXdfc2V0dmlld2JveHxpbWFnaWNrZHJhd19za2V3eHxcCmltYWdpY2tkcmF3X3NrZXd5fGltYWdpY2tkcmF3X3RyYW5zbGF0ZXxpbWFnaWNrcGl4ZWx8aW1hZ2lja3BpeGVsX2NsZWFyfGltYWdpY2twaXhlbF9jb25zdHJ1Y3R8aW1hZ2lja3BpeGVsX2Rlc3Ryb3l8aW1hZ2lja3BpeGVsX2dldGNvbG9yfFwKaW1hZ2lja3BpeGVsX2dldGNvbG9yYXNzdHJpbmd8aW1hZ2lja3BpeGVsX2dldGNvbG9yY291bnR8aW1hZ2lja3BpeGVsX2dldGNvbG9ydmFsdWV8aW1hZ2lja3BpeGVsX2dldGhzbHxpbWFnaWNrcGl4ZWxfaXNzaW1pbGFyfFwKaW1hZ2lja3BpeGVsX3NldGNvbG9yfGltYWdpY2twaXhlbF9zZXRjb2xvcnZhbHVlfGltYWdpY2twaXhlbF9zZXRoc2x8aW1hZ2lja3BpeGVsaXRlcmF0b3J8aW1hZ2lja3BpeGVsaXRlcmF0b3JfY2xlYXJ8XAppbWFnaWNrcGl4ZWxpdGVyYXRvcl9jb25zdHJ1Y3R8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZGVzdHJveXxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRjdXJyZW50aXRlcmF0b3Jyb3d8XAppbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRpdGVyYXRvcnJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9nZXRuZXh0aXRlcmF0b3Jyb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3JfZ2V0cHJldmlvdXNpdGVyYXRvcnJvd3xcCmltYWdpY2twaXhlbGl0ZXJhdG9yX25ld3BpeGVsaXRlcmF0b3J8aW1hZ2lja3BpeGVsaXRlcmF0b3JfbmV3cGl4ZWxyZWdpb25pdGVyYXRvcnxpbWFnaWNrcGl4ZWxpdGVyYXRvcl9yZXNldGl0ZXJhdG9yfFwKaW1hZ2lja3BpeGVsaXRlcmF0b3Jfc2V0aXRlcmF0b3JmaXJzdHJvd3xpbWFnaWNrcGl4ZWxpdGVyYXRvcl9zZXRpdGVyYXRvcmxhc3Ryb3d8aW1hZ2lja3BpeGVsaXRlcmF0b3Jfc2V0aXRlcmF0b3Jyb3d8XAppbWFnaWNrcGl4ZWxpdGVyYXRvcl9zeW5jaXRlcmF0b3J8aW1hcF84Yml0fGltYXBfYWxlcnRzfGltYXBfYXBwZW5kfGltYXBfYmFzZTY0fGltYXBfYmluYXJ5fGltYXBfYm9keXxpbWFwX2JvZHlzdHJ1Y3R8aW1hcF9jaGVja3xcCmltYXBfY2xlYXJmbGFnX2Z1bGx8aW1hcF9jbG9zZXxpbWFwX2NyZWF0ZXxpbWFwX2NyZWF0ZW1haWxib3h8aW1hcF9kZWxldGV8aW1hcF9kZWxldGVtYWlsYm94fGltYXBfZXJyb3JzfGltYXBfZXhwdW5nZXxpbWFwX2ZldGNoX292ZXJ2aWV3fFwKaW1hcF9mZXRjaGJvZHl8aW1hcF9mZXRjaGhlYWRlcnxpbWFwX2ZldGNobWltZXxpbWFwX2ZldGNoc3RydWN0dXJlfGltYXBfZmV0Y2h0ZXh0fGltYXBfZ2N8aW1hcF9nZXRfcXVvdGF8aW1hcF9nZXRfcXVvdGFyb290fGltYXBfZ2V0YWNsfFwKaW1hcF9nZXRtYWlsYm94ZXN8aW1hcF9nZXRzdWJzY3JpYmVkfGltYXBfaGVhZGVyfGltYXBfaGVhZGVyaW5mb3xpbWFwX2hlYWRlcnN8aW1hcF9sYXN0X2Vycm9yfGltYXBfbGlzdHxpbWFwX2xpc3RtYWlsYm94fGltYXBfbGlzdHNjYW58XAppbWFwX2xpc3RzdWJzY3JpYmVkfGltYXBfbHN1YnxpbWFwX21haWx8aW1hcF9tYWlsX2NvbXBvc2V8aW1hcF9tYWlsX2NvcHl8aW1hcF9tYWlsX21vdmV8aW1hcF9tYWlsYm94bXNnaW5mb3xpbWFwX21pbWVfaGVhZGVyX2RlY29kZXxcCmltYXBfbXNnbm98aW1hcF9udW1fbXNnfGltYXBfbnVtX3JlY2VudHxpbWFwX29wZW58aW1hcF9waW5nfGltYXBfcXByaW50fGltYXBfcmVuYW1lfGltYXBfcmVuYW1lbWFpbGJveHxpbWFwX3Jlb3BlbnxcCmltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3R8aW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVyc3xpbWFwX3JmYzgyMl93cml0ZV9hZGRyZXNzfGltYXBfc2F2ZWJvZHl8aW1hcF9zY2FufGltYXBfc2Nhbm1haWxib3h8aW1hcF9zZWFyY2h8XAppbWFwX3NldF9xdW90YXxpbWFwX3NldGFjbHxpbWFwX3NldGZsYWdfZnVsbHxpbWFwX3NvcnR8aW1hcF9zdGF0dXN8aW1hcF9zdWJzY3JpYmV8aW1hcF90aHJlYWR8aW1hcF90aW1lb3V0fGltYXBfdWlkfGltYXBfdW5kZWxldGV8XAppbWFwX3Vuc3Vic2NyaWJlfGltYXBfdXRmN19kZWNvZGV8aW1hcF91dGY3X2VuY29kZXxpbWFwX3V0Zjh8aW1wbGVtZW50c2ludGVyZmFjZXxpbXBsb2RlfGltcG9ydF9yZXF1ZXN0X3ZhcmlhYmxlc3xpbl9hcnJheXxpbmNsdWRlfFwKaW5jbHVkZV9vbmNlfGluY2x1ZWRfZ2V0X2RhdGF8aW5ldF9udG9wfGluZXRfcHRvbnxpbmZpbml0ZWl0ZXJhdG9yfGluZ3Jlc19hdXRvY29tbWl0fGluZ3Jlc19hdXRvY29tbWl0X3N0YXRlfGluZ3Jlc19jaGFyc2V0fGluZ3Jlc19jbG9zZXxcCmluZ3Jlc19jb21taXR8aW5ncmVzX2Nvbm5lY3R8aW5ncmVzX2N1cnNvcnxpbmdyZXNfZXJybm98aW5ncmVzX2Vycm9yfGluZ3Jlc19lcnJzcWxzdGF0ZXxpbmdyZXNfZXNjYXBlX3N0cmluZ3xpbmdyZXNfZXhlY3V0ZXxcCmluZ3Jlc19mZXRjaF9hcnJheXxpbmdyZXNfZmV0Y2hfYXNzb2N8aW5ncmVzX2ZldGNoX29iamVjdHxpbmdyZXNfZmV0Y2hfcHJvY19yZXR1cm58aW5ncmVzX2ZldGNoX3Jvd3xpbmdyZXNfZmllbGRfbGVuZ3RofGluZ3Jlc19maWVsZF9uYW1lfFwKaW5ncmVzX2ZpZWxkX251bGxhYmxlfGluZ3Jlc19maWVsZF9wcmVjaXNpb258aW5ncmVzX2ZpZWxkX3NjYWxlfGluZ3Jlc19maWVsZF90eXBlfGluZ3Jlc19mcmVlX3Jlc3VsdHxpbmdyZXNfbmV4dF9lcnJvcnxpbmdyZXNfbnVtX2ZpZWxkc3xcCmluZ3Jlc19udW1fcm93c3xpbmdyZXNfcGNvbm5lY3R8aW5ncmVzX3ByZXBhcmV8aW5ncmVzX3F1ZXJ5fGluZ3Jlc19yZXN1bHRfc2Vla3xpbmdyZXNfcm9sbGJhY2t8aW5ncmVzX3NldF9lbnZpcm9ubWVudHxcCmluZ3Jlc191bmJ1ZmZlcmVkX3F1ZXJ5fGluaV9hbHRlcnxpbmlfZ2V0fGluaV9nZXRfYWxsfGluaV9yZXN0b3JlfGluaV9zZXR8aW5uYW1lc3BhY2V8aW5vdGlmeV9hZGRfd2F0Y2h8aW5vdGlmeV9pbml0fGlub3RpZnlfcXVldWVfbGVufFwKaW5vdGlmeV9yZWFkfGlub3RpZnlfcm1fd2F0Y2h8aW50ZXJmYWNlX2V4aXN0c3xpbnRsX2Vycm9yX25hbWV8aW50bF9nZXRfZXJyb3JfY29kZXxpbnRsX2dldF9lcnJvcl9tZXNzYWdlfGludGxfaXNfZmFpbHVyZXxcCmludGxkYXRlZm9ybWF0dGVyfGludHZhbHxpbnZhbGlkYXJndW1lbnRleGNlcHRpb258aW52b2tlfGludm9rZWFyZ3N8aXAybG9uZ3xpcHRjZW1iZWR8aXB0Y3BhcnNlfGlzX2F8aXNfYXJyYXl8aXNfYm9vbHxpc19jYWxsYWJsZXxpc19kaXJ8XAppc19kb3VibGV8aXNfZXhlY3V0YWJsZXxpc19maWxlfGlzX2Zpbml0ZXxpc19mbG9hdHxpc19pbmZpbml0ZXxpc19pbnR8aXNfaW50ZWdlcnxpc19saW5rfGlzX2xvbmd8aXNfbmFufGlzX251bGx8aXNfbnVtZXJpY3xpc19vYmplY3R8XAppc19yZWFkYWJsZXxpc19yZWFsfGlzX3Jlc291cmNlfGlzX3NjYWxhcnxpc19zb2FwX2ZhdWx0fGlzX3N0cmluZ3xpc19zdWJjbGFzc19vZnxpc191cGxvYWRlZF9maWxlfGlzX3dyaXRhYmxlfGlzX3dyaXRlYWJsZXxpc2Fic3RyYWN0fFwKaXNjbG9uZWFibGV8aXNkaXNhYmxlZHxpc2ZpbmFsfGlzaW5zdGFuY2V8aXNpbnN0YW50aWFibGV8aXNpbnRlcmZhY2V8aXNpbnRlcm5hbHxpc2l0ZXJhdGVhYmxlfGlzc2V0fGlzc3ViY2xhc3NvZnxpc3VzZXJkZWZpbmVkfGl0ZXJhdG9yfFwKaXRlcmF0b3JfYXBwbHl8aXRlcmF0b3JfY291bnR8aXRlcmF0b3JfdG9fYXJyYXl8aXRlcmF0b3JhZ2dyZWdhdGV8aXRlcmF0b3JpdGVyYXRvcnxqYXZhX2xhc3RfZXhjZXB0aW9uX2NsZWFyfGphdmFfbGFzdF9leGNlcHRpb25fZ2V0fFwKamRkYXlvZndlZWt8amRtb250aG5hbWV8amR0b2ZyZW5jaHxqZHRvZ3JlZ29yaWFufGpkdG9qZXdpc2h8amR0b2p1bGlhbnxqZHRvdW5peHxqZXdpc2h0b2pkfGpvaW58anBlZzJ3Ym1wfGpzb25fZGVjb2RlfGpzb25fZW5jb2RlfFwKanNvbl9sYXN0X2Vycm9yfGpzb25zZXJpYWxpemFibGV8anVkeXxqdWR5X3R5cGV8anVkeV92ZXJzaW9ufGp1bGlhbnRvamR8a2FkbTVfY2hwYXNzX3ByaW5jaXBhbHxrYWRtNV9jcmVhdGVfcHJpbmNpcGFsfFwKa2FkbTVfZGVsZXRlX3ByaW5jaXBhbHxrYWRtNV9kZXN0cm95fGthZG01X2ZsdXNofGthZG01X2dldF9wb2xpY2llc3xrYWRtNV9nZXRfcHJpbmNpcGFsfGthZG01X2dldF9wcmluY2lwYWxzfGthZG01X2luaXRfd2l0aF9wYXNzd29yZHxcCmthZG01X21vZGlmeV9wcmluY2lwYWx8a2V5fGtyc29ydHxrc29ydHxsY2ZpcnN0fGxjZ192YWx1ZXxsY2hncnB8bGNob3dufGxkYXBfODg1OV90b190NjF8bGRhcF9hZGR8bGRhcF9iaW5kfGxkYXBfY2xvc2V8bGRhcF9jb21wYXJlfFwKbGRhcF9jb25uZWN0fGxkYXBfY291bnRfZW50cmllc3xsZGFwX2RlbGV0ZXxsZGFwX2RuMnVmbnxsZGFwX2VycjJzdHJ8bGRhcF9lcnJub3xsZGFwX2Vycm9yfGxkYXBfZXhwbG9kZV9kbnxsZGFwX2ZpcnN0X2F0dHJpYnV0ZXxcCmxkYXBfZmlyc3RfZW50cnl8bGRhcF9maXJzdF9yZWZlcmVuY2V8bGRhcF9mcmVlX3Jlc3VsdHxsZGFwX2dldF9hdHRyaWJ1dGVzfGxkYXBfZ2V0X2RufGxkYXBfZ2V0X2VudHJpZXN8bGRhcF9nZXRfb3B0aW9ufGxkYXBfZ2V0X3ZhbHVlc3xcCmxkYXBfZ2V0X3ZhbHVlc19sZW58bGRhcF9saXN0fGxkYXBfbW9kX2FkZHxsZGFwX21vZF9kZWx8bGRhcF9tb2RfcmVwbGFjZXxsZGFwX21vZGlmeXxsZGFwX25leHRfYXR0cmlidXRlfGxkYXBfbmV4dF9lbnRyeXxcCmxkYXBfbmV4dF9yZWZlcmVuY2V8bGRhcF9wYXJzZV9yZWZlcmVuY2V8bGRhcF9wYXJzZV9yZXN1bHR8bGRhcF9yZWFkfGxkYXBfcmVuYW1lfGxkYXBfc2FzbF9iaW5kfGxkYXBfc2VhcmNofGxkYXBfc2V0X29wdGlvbnxcCmxkYXBfc2V0X3JlYmluZF9wcm9jfGxkYXBfc29ydHxsZGFwX3N0YXJ0X3Rsc3xsZGFwX3Q2MV90b184ODU5fGxkYXBfdW5iaW5kfGxlbmd0aGV4Y2VwdGlvbnxsZXZlbnNodGVpbnxsaWJ4bWxfY2xlYXJfZXJyb3JzfFwKbGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlcnxsaWJ4bWxfZ2V0X2Vycm9yc3xsaWJ4bWxfZ2V0X2xhc3RfZXJyb3J8bGlieG1sX3NldF9zdHJlYW1zX2NvbnRleHR8bGlieG1sX3VzZV9pbnRlcm5hbF9lcnJvcnN8bGlieG1sZXJyb3J8XApsaW1pdGl0ZXJhdG9yfGxpbmt8bGlua2luZm98bGlzdHxsb2NhbGV8bG9jYWxlY29udnxsb2NhbHRpbWV8bG9nfGxvZzEwfGxvZzFwfGxvZ2ljZXhjZXB0aW9ufGxvbmcyaXB8bHN0YXR8bHRyaW18bHpmX2NvbXByZXNzfFwKbHpmX2RlY29tcHJlc3N8bHpmX29wdGltaXplZF9mb3J8bV9jaGVja3N0YXR1c3xtX2NvbXBsZXRlYXV0aG9yaXphdGlvbnN8bV9jb25uZWN0fG1fY29ubmVjdGlvbmVycm9yfG1fZGVsZXRldHJhbnN8bV9kZXN0cm95Y29ubnxcCm1fZGVzdHJveWVuZ2luZXxtX2dldGNlbGx8bV9nZXRjZWxsYnludW18bV9nZXRjb21tYWRlbGltaXRlZHxtX2dldGhlYWRlcnxtX2luaXRjb25ufG1faW5pdGVuZ2luZXxtX2lzY29tbWFkZWxpbWl0ZWR8bV9tYXhjb25udGltZW91dHxcCm1fbW9uaXRvcnxtX251bWNvbHVtbnN8bV9udW1yb3dzfG1fcGFyc2Vjb21tYWRlbGltaXRlZHxtX3Jlc3BvbnNla2V5c3xtX3Jlc3BvbnNlcGFyYW18bV9yZXR1cm5zdGF0dXN8bV9zZXRibG9ja2luZ3xtX3NldGRyb3BmaWxlfG1fc2V0aXB8XAptX3NldHNzbHxtX3NldHNzbF9jYWZpbGV8bV9zZXRzc2xfZmlsZXN8bV9zZXR0aW1lb3V0fG1fc3NsY2VydF9nZW5faGFzaHxtX3RyYW5zYWN0aW9uc3NlbnR8bV90cmFuc2lucXVldWV8bV90cmFuc2tleXZhbHxtX3RyYW5zbmV3fFwKbV90cmFuc3NlbmR8bV91d2FpdHxtX3ZhbGlkYXRlaWRlbnRpZmllcnxtX3ZlcmlmeWNvbm5lY3Rpb258bV92ZXJpZnlzc2xjZXJ0fG1hZ2ljX3F1b3Rlc19ydW50aW1lfG1haWx8XAptYWlscGFyc2VfZGV0ZXJtaW5lX2Jlc3RfeGZlcl9lbmNvZGluZ3xtYWlscGFyc2VfbXNnX2NyZWF0ZXxtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydHxtYWlscGFyc2VfbXNnX2V4dHJhY3RfcGFydF9maWxlfFwKbWFpbHBhcnNlX21zZ19leHRyYWN0X3dob2xlX3BhcnRfZmlsZXxtYWlscGFyc2VfbXNnX2ZyZWV8bWFpbHBhcnNlX21zZ19nZXRfcGFydHxtYWlscGFyc2VfbXNnX2dldF9wYXJ0X2RhdGF8bWFpbHBhcnNlX21zZ19nZXRfc3RydWN0dXJlfFwKbWFpbHBhcnNlX21zZ19wYXJzZXxtYWlscGFyc2VfbXNnX3BhcnNlX2ZpbGV8bWFpbHBhcnNlX3JmYzgyMl9wYXJzZV9hZGRyZXNzZXN8bWFpbHBhcnNlX3N0cmVhbV9lbmNvZGV8bWFpbHBhcnNlX3V1ZGVjb2RlX2FsbHxtYWlufG1heHxcCm1heGRiX2FmZmVjdGVkX3Jvd3N8bWF4ZGJfYXV0b2NvbW1pdHxtYXhkYl9iaW5kX3BhcmFtfG1heGRiX2JpbmRfcmVzdWx0fG1heGRiX2NoYW5nZV91c2VyfG1heGRiX2NoYXJhY3Rlcl9zZXRfbmFtZXxtYXhkYl9jbGllbnRfZW5jb2Rpbmd8XAptYXhkYl9jbG9zZXxtYXhkYl9jbG9zZV9sb25nX2RhdGF8bWF4ZGJfY29tbWl0fG1heGRiX2Nvbm5lY3R8bWF4ZGJfY29ubmVjdF9lcnJub3xtYXhkYl9jb25uZWN0X2Vycm9yfG1heGRiX2RhdGFfc2Vla3xtYXhkYl9kZWJ1Z3xcCm1heGRiX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXJ8bWF4ZGJfZGlzYWJsZV9ycGxfcGFyc2V8bWF4ZGJfZHVtcF9kZWJ1Z19pbmZvfG1heGRiX2VtYmVkZGVkX2Nvbm5lY3R8bWF4ZGJfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfFwKbWF4ZGJfZW5hYmxlX3JwbF9wYXJzZXxtYXhkYl9lcnJub3xtYXhkYl9lcnJvcnxtYXhkYl9lc2NhcGVfc3RyaW5nfG1heGRiX2V4ZWN1dGV8bWF4ZGJfZmV0Y2h8bWF4ZGJfZmV0Y2hfYXJyYXl8bWF4ZGJfZmV0Y2hfYXNzb2N8XAptYXhkYl9mZXRjaF9maWVsZHxtYXhkYl9mZXRjaF9maWVsZF9kaXJlY3R8bWF4ZGJfZmV0Y2hfZmllbGRzfG1heGRiX2ZldGNoX2xlbmd0aHN8bWF4ZGJfZmV0Y2hfb2JqZWN0fG1heGRiX2ZldGNoX3Jvd3xtYXhkYl9maWVsZF9jb3VudHxcCm1heGRiX2ZpZWxkX3NlZWt8bWF4ZGJfZmllbGRfdGVsbHxtYXhkYl9mcmVlX3Jlc3VsdHxtYXhkYl9nZXRfY2xpZW50X2luZm98bWF4ZGJfZ2V0X2NsaWVudF92ZXJzaW9ufG1heGRiX2dldF9ob3N0X2luZm98bWF4ZGJfZ2V0X21ldGFkYXRhfFwKbWF4ZGJfZ2V0X3Byb3RvX2luZm98bWF4ZGJfZ2V0X3NlcnZlcl9pbmZvfG1heGRiX2dldF9zZXJ2ZXJfdmVyc2lvbnxtYXhkYl9pbmZvfG1heGRiX2luaXR8bWF4ZGJfaW5zZXJ0X2lkfG1heGRiX2tpbGx8bWF4ZGJfbWFzdGVyX3F1ZXJ5fFwKbWF4ZGJfbW9yZV9yZXN1bHRzfG1heGRiX211bHRpX3F1ZXJ5fG1heGRiX25leHRfcmVzdWx0fG1heGRiX251bV9maWVsZHN8bWF4ZGJfbnVtX3Jvd3N8bWF4ZGJfb3B0aW9uc3xtYXhkYl9wYXJhbV9jb3VudHxtYXhkYl9waW5nfFwKbWF4ZGJfcHJlcGFyZXxtYXhkYl9xdWVyeXxtYXhkYl9yZWFsX2Nvbm5lY3R8bWF4ZGJfcmVhbF9lc2NhcGVfc3RyaW5nfG1heGRiX3JlYWxfcXVlcnl8bWF4ZGJfcmVwb3J0fG1heGRiX3JvbGxiYWNrfFwKbWF4ZGJfcnBsX3BhcnNlX2VuYWJsZWR8bWF4ZGJfcnBsX3Byb2JlfG1heGRiX3JwbF9xdWVyeV90eXBlfG1heGRiX3NlbGVjdF9kYnxtYXhkYl9zZW5kX2xvbmdfZGF0YXxtYXhkYl9zZW5kX3F1ZXJ5fG1heGRiX3NlcnZlcl9lbmR8XAptYXhkYl9zZXJ2ZXJfaW5pdHxtYXhkYl9zZXRfb3B0fG1heGRiX3NxbHN0YXRlfG1heGRiX3NzbF9zZXR8bWF4ZGJfc3RhdHxtYXhkYl9zdG10X2FmZmVjdGVkX3Jvd3N8bWF4ZGJfc3RtdF9iaW5kX3BhcmFtfFwKbWF4ZGJfc3RtdF9iaW5kX3Jlc3VsdHxtYXhkYl9zdG10X2Nsb3NlfG1heGRiX3N0bXRfY2xvc2VfbG9uZ19kYXRhfG1heGRiX3N0bXRfZGF0YV9zZWVrfG1heGRiX3N0bXRfZXJybm98bWF4ZGJfc3RtdF9lcnJvcnxcCm1heGRiX3N0bXRfZXhlY3V0ZXxtYXhkYl9zdG10X2ZldGNofG1heGRiX3N0bXRfZnJlZV9yZXN1bHR8bWF4ZGJfc3RtdF9pbml0fG1heGRiX3N0bXRfbnVtX3Jvd3N8bWF4ZGJfc3RtdF9wYXJhbV9jb3VudHxtYXhkYl9zdG10X3ByZXBhcmV8XAptYXhkYl9zdG10X3Jlc2V0fG1heGRiX3N0bXRfcmVzdWx0X21ldGFkYXRhfG1heGRiX3N0bXRfc2VuZF9sb25nX2RhdGF8bWF4ZGJfc3RtdF9zcWxzdGF0ZXxtYXhkYl9zdG10X3N0b3JlX3Jlc3VsdHxtYXhkYl9zdG9yZV9yZXN1bHR8XAptYXhkYl90aHJlYWRfaWR8bWF4ZGJfdGhyZWFkX3NhZmV8bWF4ZGJfdXNlX3Jlc3VsdHxtYXhkYl93YXJuaW5nX2NvdW50fG1iX2NoZWNrX2VuY29kaW5nfG1iX2NvbnZlcnRfY2FzZXxtYl9jb252ZXJ0X2VuY29kaW5nfFwKbWJfY29udmVydF9rYW5hfG1iX2NvbnZlcnRfdmFyaWFibGVzfG1iX2RlY29kZV9taW1laGVhZGVyfG1iX2RlY29kZV9udW1lcmljZW50aXR5fG1iX2RldGVjdF9lbmNvZGluZ3xtYl9kZXRlY3Rfb3JkZXJ8bWJfZW5jb2RlX21pbWVoZWFkZXJ8XAptYl9lbmNvZGVfbnVtZXJpY2VudGl0eXxtYl9lbmNvZGluZ19hbGlhc2VzfG1iX2VyZWd8bWJfZXJlZ19tYXRjaHxtYl9lcmVnX3JlcGxhY2V8bWJfZXJlZ19zZWFyY2h8bWJfZXJlZ19zZWFyY2hfZ2V0cG9zfFwKbWJfZXJlZ19zZWFyY2hfZ2V0cmVnc3xtYl9lcmVnX3NlYXJjaF9pbml0fG1iX2VyZWdfc2VhcmNoX3Bvc3xtYl9lcmVnX3NlYXJjaF9yZWdzfG1iX2VyZWdfc2VhcmNoX3NldHBvc3xtYl9lcmVnaXxtYl9lcmVnaV9yZXBsYWNlfFwKbWJfZ2V0X2luZm98bWJfaHR0cF9pbnB1dHxtYl9odHRwX291dHB1dHxtYl9pbnRlcm5hbF9lbmNvZGluZ3xtYl9sYW5ndWFnZXxtYl9saXN0X2VuY29kaW5nc3xtYl9vdXRwdXRfaGFuZGxlcnxtYl9wYXJzZV9zdHJ8XAptYl9wcmVmZXJyZWRfbWltZV9uYW1lfG1iX3JlZ2V4X2VuY29kaW5nfG1iX3JlZ2V4X3NldF9vcHRpb25zfG1iX3NlbmRfbWFpbHxtYl9zcGxpdHxtYl9zdHJjdXR8bWJfc3RyaW13aWR0aHxtYl9zdHJpcG9zfG1iX3N0cmlzdHJ8XAptYl9zdHJsZW58bWJfc3RycG9zfG1iX3N0cnJjaHJ8bWJfc3RycmljaHJ8bWJfc3Rycmlwb3N8bWJfc3RycnBvc3xtYl9zdHJzdHJ8bWJfc3RydG9sb3dlcnxtYl9zdHJ0b3VwcGVyfG1iX3N0cndpZHRofFwKbWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXJ8bWJfc3Vic3RyfG1iX3N1YnN0cl9jb3VudHxtY3J5cHRfY2JjfG1jcnlwdF9jZmJ8bWNyeXB0X2NyZWF0ZV9pdnxtY3J5cHRfZGVjcnlwdHxtY3J5cHRfZWNifFwKbWNyeXB0X2VuY19nZXRfYWxnb3JpdGhtc19uYW1lfG1jcnlwdF9lbmNfZ2V0X2Jsb2NrX3NpemV8bWNyeXB0X2VuY19nZXRfaXZfc2l6ZXxtY3J5cHRfZW5jX2dldF9rZXlfc2l6ZXxtY3J5cHRfZW5jX2dldF9tb2Rlc19uYW1lfFwKbWNyeXB0X2VuY19nZXRfc3VwcG9ydGVkX2tleV9zaXplc3xtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobXxtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlfG1jcnlwdF9lbmNfaXNfYmxvY2tfbW9kZXxcCm1jcnlwdF9lbmNfc2VsZl90ZXN0fG1jcnlwdF9lbmNyeXB0fG1jcnlwdF9nZW5lcmljfG1jcnlwdF9nZW5lcmljX2RlaW5pdHxtY3J5cHRfZ2VuZXJpY19lbmR8bWNyeXB0X2dlbmVyaWNfaW5pdHxtY3J5cHRfZ2V0X2Jsb2NrX3NpemV8XAptY3J5cHRfZ2V0X2NpcGhlcl9uYW1lfG1jcnlwdF9nZXRfaXZfc2l6ZXxtY3J5cHRfZ2V0X2tleV9zaXplfG1jcnlwdF9saXN0X2FsZ29yaXRobXN8bWNyeXB0X2xpc3RfbW9kZXN8bWNyeXB0X21vZHVsZV9jbG9zZXxcCm1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fYmxvY2tfc2l6ZXxtY3J5cHRfbW9kdWxlX2dldF9hbGdvX2tleV9zaXplfG1jcnlwdF9tb2R1bGVfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXN8bWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG18XAptY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlfG1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfbW9kZXxtY3J5cHRfbW9kdWxlX29wZW58bWNyeXB0X21vZHVsZV9zZWxmX3Rlc3R8bWNyeXB0X29mYnxtZDV8bWQ1X2ZpbGV8XAptZGVjcnlwdF9nZW5lcmljfG1lbWNhY2hlfG1lbWNhY2hlX2RlYnVnfG1lbWNhY2hlZHxtZW1vcnlfZ2V0X3BlYWtfdXNhZ2V8bWVtb3J5X2dldF91c2FnZXxtZXNzYWdlZm9ybWF0dGVyfG1ldGFwaG9uZXxtZXRob2RfZXhpc3RzfG1oYXNofFwKbWhhc2hfY291bnR8bWhhc2hfZ2V0X2Jsb2NrX3NpemV8bWhhc2hfZ2V0X2hhc2hfbmFtZXxtaGFzaF9rZXlnZW5fczJrfG1pY3JvdGltZXxtaW1lX2NvbnRlbnRfdHlwZXxtaW58bWluZ19rZXlwcmVzc3xcCm1pbmdfc2V0Y3ViaWN0aHJlc2hvbGR8bWluZ19zZXRzY2FsZXxtaW5nX3NldHN3ZmNvbXByZXNzaW9ufG1pbmdfdXNlY29uc3RhbnRzfG1pbmdfdXNlc3dmdmVyc2lvbnxta2Rpcnxta3RpbWV8bW9uZXlfZm9ybWF0fG1vbmdvfFwKbW9uZ29iaW5kYXRhfG1vbmdvY29kZXxtb25nb2NvbGxlY3Rpb258bW9uZ29jb25uZWN0aW9uZXhjZXB0aW9ufG1vbmdvY3Vyc29yfG1vbmdvY3Vyc29yZXhjZXB0aW9ufG1vbmdvY3Vyc29ydGltZW91dGV4Y2VwdGlvbnxtb25nb2RhdGV8XAptb25nb2RifG1vbmdvZGJyZWZ8bW9uZ29leGNlcHRpb258bW9uZ29ncmlkZnN8bW9uZ29ncmlkZnNjdXJzb3J8bW9uZ29ncmlkZnNleGNlcHRpb258bW9uZ29ncmlkZnNmaWxlfG1vbmdvaWR8bW9uZ29pbnQzMnxtb25nb2ludDY0fFwKbW9uZ29tYXhrZXl8bW9uZ29taW5rZXl8bW9uZ29yZWdleHxtb25nb3RpbWVzdGFtcHxtb3ZlX3VwbG9hZGVkX2ZpbGV8bXBlZ2ZpbGV8bXFzZXJpZXNfYmFja3xtcXNlcmllc19iZWdpbnxtcXNlcmllc19jbG9zZXxtcXNlcmllc19jbWl0fFwKbXFzZXJpZXNfY29ubnxtcXNlcmllc19jb25ueHxtcXNlcmllc19kaXNjfG1xc2VyaWVzX2dldHxtcXNlcmllc19pbnF8bXFzZXJpZXNfb3BlbnxtcXNlcmllc19wdXR8bXFzZXJpZXNfcHV0MXxtcXNlcmllc19zZXR8XAptcXNlcmllc19zdHJlcnJvcnxtc2Vzc2lvbl9jb25uZWN0fG1zZXNzaW9uX2NvdW50fG1zZXNzaW9uX2NyZWF0ZXxtc2Vzc2lvbl9kZXN0cm95fG1zZXNzaW9uX2Rpc2Nvbm5lY3R8bXNlc3Npb25fZmluZHxtc2Vzc2lvbl9nZXR8XAptc2Vzc2lvbl9nZXRfYXJyYXl8bXNlc3Npb25fZ2V0X2RhdGF8bXNlc3Npb25faW5jfG1zZXNzaW9uX2xpc3R8bXNlc3Npb25fbGlzdHZhcnxtc2Vzc2lvbl9sb2NrfG1zZXNzaW9uX3BsdWdpbnxtc2Vzc2lvbl9yYW5kc3RyfFwKbXNlc3Npb25fc2V0fG1zZXNzaW9uX3NldF9hcnJheXxtc2Vzc2lvbl9zZXRfZGF0YXxtc2Vzc2lvbl90aW1lb3V0fG1zZXNzaW9uX3VuaXF8bXNlc3Npb25fdW5sb2NrfG1zZ19nZXRfcXVldWV8bXNnX3F1ZXVlX2V4aXN0c3xcCm1zZ19yZWNlaXZlfG1zZ19yZW1vdmVfcXVldWV8bXNnX3NlbmR8bXNnX3NldF9xdWV1ZXxtc2dfc3RhdF9xdWV1ZXxtc3FsfG1zcWxfYWZmZWN0ZWRfcm93c3xtc3FsX2Nsb3NlfG1zcWxfY29ubmVjdHxtc3FsX2NyZWF0ZV9kYnxcCm1zcWxfY3JlYXRlZGJ8bXNxbF9kYXRhX3NlZWt8bXNxbF9kYl9xdWVyeXxtc3FsX2RibmFtZXxtc3FsX2Ryb3BfZGJ8bXNxbF9lcnJvcnxtc3FsX2ZldGNoX2FycmF5fG1zcWxfZmV0Y2hfZmllbGR8bXNxbF9mZXRjaF9vYmplY3R8XAptc3FsX2ZldGNoX3Jvd3xtc3FsX2ZpZWxkX2ZsYWdzfG1zcWxfZmllbGRfbGVufG1zcWxfZmllbGRfbmFtZXxtc3FsX2ZpZWxkX3NlZWt8bXNxbF9maWVsZF90YWJsZXxtc3FsX2ZpZWxkX3R5cGV8bXNxbF9maWVsZGZsYWdzfFwKbXNxbF9maWVsZGxlbnxtc3FsX2ZpZWxkbmFtZXxtc3FsX2ZpZWxkdGFibGV8bXNxbF9maWVsZHR5cGV8bXNxbF9mcmVlX3Jlc3VsdHxtc3FsX2xpc3RfZGJzfG1zcWxfbGlzdF9maWVsZHN8bXNxbF9saXN0X3RhYmxlc3xcCm1zcWxfbnVtX2ZpZWxkc3xtc3FsX251bV9yb3dzfG1zcWxfbnVtZmllbGRzfG1zcWxfbnVtcm93c3xtc3FsX3Bjb25uZWN0fG1zcWxfcXVlcnl8bXNxbF9yZWdjYXNlfG1zcWxfcmVzdWx0fG1zcWxfc2VsZWN0X2RifG1zcWxfdGFibGVuYW1lfFwKbXNzcWxfYmluZHxtc3NxbF9jbG9zZXxtc3NxbF9jb25uZWN0fG1zc3FsX2RhdGFfc2Vla3xtc3NxbF9leGVjdXRlfG1zc3FsX2ZldGNoX2FycmF5fG1zc3FsX2ZldGNoX2Fzc29jfG1zc3FsX2ZldGNoX2JhdGNofFwKbXNzcWxfZmV0Y2hfZmllbGR8bXNzcWxfZmV0Y2hfb2JqZWN0fG1zc3FsX2ZldGNoX3Jvd3xtc3NxbF9maWVsZF9sZW5ndGh8bXNzcWxfZmllbGRfbmFtZXxtc3NxbF9maWVsZF9zZWVrfG1zc3FsX2ZpZWxkX3R5cGV8XAptc3NxbF9mcmVlX3Jlc3VsdHxtc3NxbF9mcmVlX3N0YXRlbWVudHxtc3NxbF9nZXRfbGFzdF9tZXNzYWdlfG1zc3FsX2d1aWRfc3RyaW5nfG1zc3FsX2luaXR8bXNzcWxfbWluX2Vycm9yX3NldmVyaXR5fFwKbXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHl8bXNzcWxfbmV4dF9yZXN1bHR8bXNzcWxfbnVtX2ZpZWxkc3xtc3NxbF9udW1fcm93c3xtc3NxbF9wY29ubmVjdHxtc3NxbF9xdWVyeXxtc3NxbF9yZXN1bHR8bXNzcWxfcm93c19hZmZlY3RlZHxcCm1zc3FsX3NlbGVjdF9kYnxtdF9nZXRyYW5kbWF4fG10X3JhbmR8bXRfc3JhbmR8bXVsdGlwbGVpdGVyYXRvcnxteXNxbF9hZmZlY3RlZF9yb3dzfG15c3FsX2NsaWVudF9lbmNvZGluZ3xteXNxbF9jbG9zZXxteXNxbF9jb25uZWN0fFwKbXlzcWxfY3JlYXRlX2RifG15c3FsX2RhdGFfc2Vla3xteXNxbF9kYl9uYW1lfG15c3FsX2RiX3F1ZXJ5fG15c3FsX2Ryb3BfZGJ8bXlzcWxfZXJybm98bXlzcWxfZXJyb3J8bXlzcWxfZXNjYXBlX3N0cmluZ3xteXNxbF9mZXRjaF9hcnJheXxcCm15c3FsX2ZldGNoX2Fzc29jfG15c3FsX2ZldGNoX2ZpZWxkfG15c3FsX2ZldGNoX2xlbmd0aHN8bXlzcWxfZmV0Y2hfb2JqZWN0fG15c3FsX2ZldGNoX3Jvd3xteXNxbF9maWVsZF9mbGFnc3xteXNxbF9maWVsZF9sZW58XApteXNxbF9maWVsZF9uYW1lfG15c3FsX2ZpZWxkX3NlZWt8bXlzcWxfZmllbGRfdGFibGV8bXlzcWxfZmllbGRfdHlwZXxteXNxbF9mcmVlX3Jlc3VsdHxteXNxbF9nZXRfY2xpZW50X2luZm98bXlzcWxfZ2V0X2hvc3RfaW5mb3xcCm15c3FsX2dldF9wcm90b19pbmZvfG15c3FsX2dldF9zZXJ2ZXJfaW5mb3xteXNxbF9pbmZvfG15c3FsX2luc2VydF9pZHxteXNxbF9saXN0X2Ric3xteXNxbF9saXN0X2ZpZWxkc3xteXNxbF9saXN0X3Byb2Nlc3Nlc3xcCm15c3FsX2xpc3RfdGFibGVzfG15c3FsX251bV9maWVsZHN8bXlzcWxfbnVtX3Jvd3N8bXlzcWxfcGNvbm5lY3R8bXlzcWxfcGluZ3xteXNxbF9xdWVyeXxteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmd8bXlzcWxfcmVzdWx0fFwKbXlzcWxfc2VsZWN0X2RifG15c3FsX3NldF9jaGFyc2V0fG15c3FsX3N0YXR8bXlzcWxfdGFibGVuYW1lfG15c3FsX3RocmVhZF9pZHxteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5fG15c3FsaXxteXNxbGlfYWZmZWN0ZWRfcm93c3xcCm15c3FsaV9hdXRvY29tbWl0fG15c3FsaV9iaW5kX3BhcmFtfG15c3FsaV9iaW5kX3Jlc3VsdHxteXNxbGlfY2FjaGVfc3RhdHN8bXlzcWxpX2NoYW5nZV91c2VyfG15c3FsaV9jaGFyYWN0ZXJfc2V0X25hbWV8XApteXNxbGlfY2xpZW50X2VuY29kaW5nfG15c3FsaV9jbG9zZXxteXNxbGlfY29tbWl0fG15c3FsaV9jb25uZWN0fG15c3FsaV9jb25uZWN0X2Vycm5vfG15c3FsaV9jb25uZWN0X2Vycm9yfG15c3FsaV9kYXRhX3NlZWt8XApteXNxbGlfZGVidWd8bXlzcWxpX2Rpc2FibGVfcmVhZHNfZnJvbV9tYXN0ZXJ8bXlzcWxpX2Rpc2FibGVfcnBsX3BhcnNlfG15c3FsaV9kcml2ZXJ8bXlzcWxpX2R1bXBfZGVidWdfaW5mb3xteXNxbGlfZW1iZWRkZWRfc2VydmVyX2VuZHxcCm15c3FsaV9lbWJlZGRlZF9zZXJ2ZXJfc3RhcnR8bXlzcWxpX2VuYWJsZV9yZWFkc19mcm9tX21hc3RlcnxteXNxbGlfZW5hYmxlX3JwbF9wYXJzZXxteXNxbGlfZXJybm98bXlzcWxpX2Vycm9yfG15c3FsaV9lc2NhcGVfc3RyaW5nfFwKbXlzcWxpX2V4ZWN1dGV8bXlzcWxpX2ZldGNofG15c3FsaV9mZXRjaF9hbGx8bXlzcWxpX2ZldGNoX2FycmF5fG15c3FsaV9mZXRjaF9hc3NvY3xteXNxbGlfZmV0Y2hfZmllbGR8bXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdHxcCm15c3FsaV9mZXRjaF9maWVsZHN8bXlzcWxpX2ZldGNoX2xlbmd0aHN8bXlzcWxpX2ZldGNoX29iamVjdHxteXNxbGlfZmV0Y2hfcm93fG15c3FsaV9maWVsZF9jb3VudHxteXNxbGlfZmllbGRfc2Vla3xteXNxbGlfZmllbGRfdGVsbHxcCm15c3FsaV9mcmVlX3Jlc3VsdHxteXNxbGlfZ2V0X2NoYXJzZXR8bXlzcWxpX2dldF9jbGllbnRfaW5mb3xteXNxbGlfZ2V0X2NsaWVudF9zdGF0c3xteXNxbGlfZ2V0X2NsaWVudF92ZXJzaW9ufG15c3FsaV9nZXRfY29ubmVjdGlvbl9zdGF0c3xcCm15c3FsaV9nZXRfaG9zdF9pbmZvfG15c3FsaV9nZXRfbWV0YWRhdGF8bXlzcWxpX2dldF9wcm90b19pbmZvfG15c3FsaV9nZXRfc2VydmVyX2luZm98bXlzcWxpX2dldF9zZXJ2ZXJfdmVyc2lvbnxteXNxbGlfZ2V0X3dhcm5pbmdzfFwKbXlzcWxpX2luZm98bXlzcWxpX2luaXR8bXlzcWxpX2luc2VydF9pZHxteXNxbGlfa2lsbHxteXNxbGlfbGlua19jb25zdHJ1Y3R8bXlzcWxpX21hc3Rlcl9xdWVyeXxteXNxbGlfbW9yZV9yZXN1bHRzfG15c3FsaV9tdWx0aV9xdWVyeXxcCm15c3FsaV9uZXh0X3Jlc3VsdHxteXNxbGlfbnVtX2ZpZWxkc3xteXNxbGlfbnVtX3Jvd3N8bXlzcWxpX29wdGlvbnN8bXlzcWxpX3BhcmFtX2NvdW50fG15c3FsaV9waW5nfG15c3FsaV9wb2xsfG15c3FsaV9wcmVwYXJlfFwKbXlzcWxpX3F1ZXJ5fG15c3FsaV9yZWFsX2Nvbm5lY3R8bXlzcWxpX3JlYWxfZXNjYXBlX3N0cmluZ3xteXNxbGlfcmVhbF9xdWVyeXxteXNxbGlfcmVhcF9hc3luY19xdWVyeXxteXNxbGlfcmVmcmVzaHxteXNxbGlfcmVwb3J0fFwKbXlzcWxpX3Jlc3VsdHxteXNxbGlfcm9sbGJhY2t8bXlzcWxpX3JwbF9wYXJzZV9lbmFibGVkfG15c3FsaV9ycGxfcHJvYmV8bXlzcWxpX3JwbF9xdWVyeV90eXBlfG15c3FsaV9zZWxlY3RfZGJ8bXlzcWxpX3NlbmRfbG9uZ19kYXRhfFwKbXlzcWxpX3NlbmRfcXVlcnl8bXlzcWxpX3NldF9jaGFyc2V0fG15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2RlZmF1bHR8bXlzcWxpX3NldF9sb2NhbF9pbmZpbGVfaGFuZGxlcnxteXNxbGlfc2V0X29wdHxteXNxbGlfc2xhdmVfcXVlcnl8XApteXNxbGlfc3Fsc3RhdGV8bXlzcWxpX3NzbF9zZXR8bXlzcWxpX3N0YXR8bXlzcWxpX3N0bXR8bXlzcWxpX3N0bXRfYWZmZWN0ZWRfcm93c3xteXNxbGlfc3RtdF9hdHRyX2dldHxteXNxbGlfc3RtdF9hdHRyX3NldHxcCm15c3FsaV9zdG10X2JpbmRfcGFyYW18bXlzcWxpX3N0bXRfYmluZF9yZXN1bHR8bXlzcWxpX3N0bXRfY2xvc2V8bXlzcWxpX3N0bXRfZGF0YV9zZWVrfG15c3FsaV9zdG10X2Vycm5vfG15c3FsaV9zdG10X2Vycm9yfFwKbXlzcWxpX3N0bXRfZXhlY3V0ZXxteXNxbGlfc3RtdF9mZXRjaHxteXNxbGlfc3RtdF9maWVsZF9jb3VudHxteXNxbGlfc3RtdF9mcmVlX3Jlc3VsdHxteXNxbGlfc3RtdF9nZXRfcmVzdWx0fG15c3FsaV9zdG10X2dldF93YXJuaW5nc3xcCm15c3FsaV9zdG10X2luaXR8bXlzcWxpX3N0bXRfaW5zZXJ0X2lkfG15c3FsaV9zdG10X25leHRfcmVzdWx0fG15c3FsaV9zdG10X251bV9yb3dzfG15c3FsaV9zdG10X3BhcmFtX2NvdW50fG15c3FsaV9zdG10X3ByZXBhcmV8XApteXNxbGlfc3RtdF9yZXNldHxteXNxbGlfc3RtdF9yZXN1bHRfbWV0YWRhdGF8bXlzcWxpX3N0bXRfc2VuZF9sb25nX2RhdGF8bXlzcWxpX3N0bXRfc3Fsc3RhdGV8bXlzcWxpX3N0bXRfc3RvcmVfcmVzdWx0fG15c3FsaV9zdG9yZV9yZXN1bHR8XApteXNxbGlfdGhyZWFkX2lkfG15c3FsaV90aHJlYWRfc2FmZXxteXNxbGlfdXNlX3Jlc3VsdHxteXNxbGlfd2FybmluZ3xteXNxbGlfd2FybmluZ19jb3VudHxteXNxbG5kX21zX2dldF9zdGF0c3xcCm15c3FsbmRfbXNfcXVlcnlfaXNfc2VsZWN0fG15c3FsbmRfbXNfc2V0X3VzZXJfcGlja19zZXJ2ZXJ8bXlzcWxuZF9xY19jaGFuZ2VfaGFuZGxlcnxteXNxbG5kX3FjX2NsZWFyX2NhY2hlfG15c3FsbmRfcWNfZ2V0X2NhY2hlX2luZm98XApteXNxbG5kX3FjX2dldF9jb3JlX3N0YXRzfG15c3FsbmRfcWNfZ2V0X2hhbmRsZXJ8bXlzcWxuZF9xY19nZXRfcXVlcnlfdHJhY2VfbG9nfG15c3FsbmRfcWNfc2V0X3VzZXJfaGFuZGxlcnN8bmF0Y2FzZXNvcnR8bmF0c29ydHxcCm5jdXJzZXNfYWRkY2h8bmN1cnNlc19hZGRjaG5zdHJ8bmN1cnNlc19hZGRjaHN0cnxuY3Vyc2VzX2FkZG5zdHJ8bmN1cnNlc19hZGRzdHJ8bmN1cnNlc19hc3N1bWVfZGVmYXVsdF9jb2xvcnN8bmN1cnNlc19hdHRyb2ZmfFwKbmN1cnNlc19hdHRyb258bmN1cnNlc19hdHRyc2V0fG5jdXJzZXNfYmF1ZHJhdGV8bmN1cnNlc19iZWVwfG5jdXJzZXNfYmtnZHxuY3Vyc2VzX2JrZ2RzZXR8bmN1cnNlc19ib3JkZXJ8bmN1cnNlc19ib3R0b21fcGFuZWx8XApuY3Vyc2VzX2Nhbl9jaGFuZ2VfY29sb3J8bmN1cnNlc19jYnJlYWt8bmN1cnNlc19jbGVhcnxuY3Vyc2VzX2NscnRvYm90fG5jdXJzZXNfY2xydG9lb2x8bmN1cnNlc19jb2xvcl9jb250ZW50fG5jdXJzZXNfY29sb3Jfc2V0fFwKbmN1cnNlc19jdXJzX3NldHxuY3Vyc2VzX2RlZl9wcm9nX21vZGV8bmN1cnNlc19kZWZfc2hlbGxfbW9kZXxuY3Vyc2VzX2RlZmluZV9rZXl8bmN1cnNlc19kZWxfcGFuZWx8bmN1cnNlc19kZWxheV9vdXRwdXR8bmN1cnNlc19kZWxjaHxcCm5jdXJzZXNfZGVsZXRlbG58bmN1cnNlc19kZWx3aW58bmN1cnNlc19kb3VwZGF0ZXxuY3Vyc2VzX2VjaG98bmN1cnNlc19lY2hvY2hhcnxuY3Vyc2VzX2VuZHxuY3Vyc2VzX2VyYXNlfG5jdXJzZXNfZXJhc2VjaGFyfG5jdXJzZXNfZmlsdGVyfFwKbmN1cnNlc19mbGFzaHxuY3Vyc2VzX2ZsdXNoaW5wfG5jdXJzZXNfZ2V0Y2h8bmN1cnNlc19nZXRtYXh5eHxuY3Vyc2VzX2dldG1vdXNlfG5jdXJzZXNfZ2V0eXh8bmN1cnNlc19oYWxmZGVsYXl8bmN1cnNlc19oYXNfY29sb3JzfFwKbmN1cnNlc19oYXNfaWN8bmN1cnNlc19oYXNfaWx8bmN1cnNlc19oYXNfa2V5fG5jdXJzZXNfaGlkZV9wYW5lbHxuY3Vyc2VzX2hsaW5lfG5jdXJzZXNfaW5jaHxuY3Vyc2VzX2luaXR8bmN1cnNlc19pbml0X2NvbG9yfFwKbmN1cnNlc19pbml0X3BhaXJ8bmN1cnNlc19pbnNjaHxuY3Vyc2VzX2luc2RlbGxufG5jdXJzZXNfaW5zZXJ0bG58bmN1cnNlc19pbnNzdHJ8bmN1cnNlc19pbnN0cnxuY3Vyc2VzX2lzZW5kd2lufG5jdXJzZXNfa2V5b2t8XApuY3Vyc2VzX2tleXBhZHxuY3Vyc2VzX2tpbGxjaGFyfG5jdXJzZXNfbG9uZ25hbWV8bmN1cnNlc19tZXRhfG5jdXJzZXNfbW91c2VfdHJhZm98bmN1cnNlc19tb3VzZWludGVydmFsfG5jdXJzZXNfbW91c2VtYXNrfG5jdXJzZXNfbW92ZXxcCm5jdXJzZXNfbW92ZV9wYW5lbHxuY3Vyc2VzX212YWRkY2h8bmN1cnNlc19tdmFkZGNobnN0cnxuY3Vyc2VzX212YWRkY2hzdHJ8bmN1cnNlc19tdmFkZG5zdHJ8bmN1cnNlc19tdmFkZHN0cnxuY3Vyc2VzX212Y3VyfFwKbmN1cnNlc19tdmRlbGNofG5jdXJzZXNfbXZnZXRjaHxuY3Vyc2VzX212aGxpbmV8bmN1cnNlc19tdmluY2h8bmN1cnNlc19tdnZsaW5lfG5jdXJzZXNfbXZ3YWRkc3RyfG5jdXJzZXNfbmFwbXN8bmN1cnNlc19uZXdfcGFuZWx8XApuY3Vyc2VzX25ld3BhZHxuY3Vyc2VzX25ld3dpbnxuY3Vyc2VzX25sfG5jdXJzZXNfbm9jYnJlYWt8bmN1cnNlc19ub2VjaG98bmN1cnNlc19ub25sfG5jdXJzZXNfbm9xaWZsdXNofG5jdXJzZXNfbm9yYXd8XApuY3Vyc2VzX3BhaXJfY29udGVudHxuY3Vyc2VzX3BhbmVsX2Fib3ZlfG5jdXJzZXNfcGFuZWxfYmVsb3d8bmN1cnNlc19wYW5lbF93aW5kb3d8bmN1cnNlc19wbm91dHJlZnJlc2h8bmN1cnNlc19wcmVmcmVzaHxuY3Vyc2VzX3B1dHB8XApuY3Vyc2VzX3FpZmx1c2h8bmN1cnNlc19yYXd8bmN1cnNlc19yZWZyZXNofG5jdXJzZXNfcmVwbGFjZV9wYW5lbHxuY3Vyc2VzX3Jlc2V0X3Byb2dfbW9kZXxuY3Vyc2VzX3Jlc2V0X3NoZWxsX21vZGV8bmN1cnNlc19yZXNldHR5fFwKbmN1cnNlc19zYXZldHR5fG5jdXJzZXNfc2NyX2R1bXB8bmN1cnNlc19zY3JfaW5pdHxuY3Vyc2VzX3Njcl9yZXN0b3JlfG5jdXJzZXNfc2NyX3NldHxuY3Vyc2VzX3Njcmx8bmN1cnNlc19zaG93X3BhbmVsfG5jdXJzZXNfc2xrX2F0dHJ8XApuY3Vyc2VzX3Nsa19hdHRyb2ZmfG5jdXJzZXNfc2xrX2F0dHJvbnxuY3Vyc2VzX3Nsa19hdHRyc2V0fG5jdXJzZXNfc2xrX2NsZWFyfG5jdXJzZXNfc2xrX2NvbG9yfG5jdXJzZXNfc2xrX2luaXR8bmN1cnNlc19zbGtfbm91dHJlZnJlc2h8XApuY3Vyc2VzX3Nsa19yZWZyZXNofG5jdXJzZXNfc2xrX3Jlc3RvcmV8bmN1cnNlc19zbGtfc2V0fG5jdXJzZXNfc2xrX3RvdWNofG5jdXJzZXNfc3RhbmRlbmR8bmN1cnNlc19zdGFuZG91dHxuY3Vyc2VzX3N0YXJ0X2NvbG9yfFwKbmN1cnNlc190ZXJtYXR0cnN8bmN1cnNlc190ZXJtbmFtZXxuY3Vyc2VzX3RpbWVvdXR8bmN1cnNlc190b3BfcGFuZWx8bmN1cnNlc190eXBlYWhlYWR8bmN1cnNlc191bmdldGNofG5jdXJzZXNfdW5nZXRtb3VzZXxcCm5jdXJzZXNfdXBkYXRlX3BhbmVsc3xuY3Vyc2VzX3VzZV9kZWZhdWx0X2NvbG9yc3xuY3Vyc2VzX3VzZV9lbnZ8bmN1cnNlc191c2VfZXh0ZW5kZWRfbmFtZXN8bmN1cnNlc192aWRhdHRyfG5jdXJzZXNfdmxpbmV8bmN1cnNlc193YWRkY2h8XApuY3Vyc2VzX3dhZGRzdHJ8bmN1cnNlc193YXR0cm9mZnxuY3Vyc2VzX3dhdHRyb258bmN1cnNlc193YXR0cnNldHxuY3Vyc2VzX3dib3JkZXJ8bmN1cnNlc193Y2xlYXJ8bmN1cnNlc193Y29sb3Jfc2V0fG5jdXJzZXNfd2VyYXNlfFwKbmN1cnNlc193Z2V0Y2h8bmN1cnNlc193aGxpbmV8bmN1cnNlc193bW91c2VfdHJhZm98bmN1cnNlc193bW92ZXxuY3Vyc2VzX3dub3V0cmVmcmVzaHxuY3Vyc2VzX3dyZWZyZXNofG5jdXJzZXNfd3N0YW5kZW5kfFwKbmN1cnNlc193c3RhbmRvdXR8bmN1cnNlc193dmxpbmV8bmV3aW5zdGFuY2V8bmV3aW5zdGFuY2VhcmdzfG5ld3RfYmVsbHxuZXd0X2J1dHRvbnxuZXd0X2J1dHRvbl9iYXJ8bmV3dF9jZW50ZXJlZF93aW5kb3d8bmV3dF9jaGVja2JveHxcCm5ld3RfY2hlY2tib3hfZ2V0X3ZhbHVlfG5ld3RfY2hlY2tib3hfc2V0X2ZsYWdzfG5ld3RfY2hlY2tib3hfc2V0X3ZhbHVlfG5ld3RfY2hlY2tib3hfdHJlZXxuZXd0X2NoZWNrYm94X3RyZWVfYWRkX2l0ZW18XApuZXd0X2NoZWNrYm94X3RyZWVfZmluZF9pdGVtfG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfY3VycmVudHxuZXd0X2NoZWNrYm94X3RyZWVfZ2V0X2VudHJ5X3ZhbHVlfG5ld3RfY2hlY2tib3hfdHJlZV9nZXRfbXVsdGlfc2VsZWN0aW9ufFwKbmV3dF9jaGVja2JveF90cmVlX2dldF9zZWxlY3Rpb258bmV3dF9jaGVja2JveF90cmVlX211bHRpfG5ld3RfY2hlY2tib3hfdHJlZV9zZXRfY3VycmVudHxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X2VudHJ5fFwKbmV3dF9jaGVja2JveF90cmVlX3NldF9lbnRyeV92YWx1ZXxuZXd0X2NoZWNrYm94X3RyZWVfc2V0X3dpZHRofG5ld3RfY2xlYXJfa2V5X2J1ZmZlcnxuZXd0X2Nsc3xuZXd0X2NvbXBhY3RfYnV0dG9ufFwKbmV3dF9jb21wb25lbnRfYWRkX2NhbGxiYWNrfG5ld3RfY29tcG9uZW50X3Rha2VzX2ZvY3VzfG5ld3RfY3JlYXRlX2dyaWR8bmV3dF9jdXJzb3Jfb2ZmfG5ld3RfY3Vyc29yX29ufG5ld3RfZGVsYXl8bmV3dF9kcmF3X2Zvcm18XApuZXd0X2RyYXdfcm9vdF90ZXh0fG5ld3RfZW50cnl8bmV3dF9lbnRyeV9nZXRfdmFsdWV8bmV3dF9lbnRyeV9zZXR8bmV3dF9lbnRyeV9zZXRfZmlsdGVyfG5ld3RfZW50cnlfc2V0X2ZsYWdzfG5ld3RfZmluaXNoZWR8bmV3dF9mb3JtfFwKbmV3dF9mb3JtX2FkZF9jb21wb25lbnR8bmV3dF9mb3JtX2FkZF9jb21wb25lbnRzfG5ld3RfZm9ybV9hZGRfaG90X2tleXxuZXd0X2Zvcm1fZGVzdHJveXxuZXd0X2Zvcm1fZ2V0X2N1cnJlbnR8bmV3dF9mb3JtX3J1bnxcCm5ld3RfZm9ybV9zZXRfYmFja2dyb3VuZHxuZXd0X2Zvcm1fc2V0X2hlaWdodHxuZXd0X2Zvcm1fc2V0X3NpemV8bmV3dF9mb3JtX3NldF90aW1lcnxuZXd0X2Zvcm1fc2V0X3dpZHRofG5ld3RfZm9ybV93YXRjaF9mZHxcCm5ld3RfZ2V0X3NjcmVlbl9zaXplfG5ld3RfZ3JpZF9hZGRfY29tcG9uZW50c190b19mb3JtfG5ld3RfZ3JpZF9iYXNpY193aW5kb3d8bmV3dF9ncmlkX2ZyZWV8bmV3dF9ncmlkX2dldF9zaXplfG5ld3RfZ3JpZF9oX2Nsb3NlX3N0YWNrZWR8XApuZXd0X2dyaWRfaF9zdGFja2VkfG5ld3RfZ3JpZF9wbGFjZXxuZXd0X2dyaWRfc2V0X2ZpZWxkfG5ld3RfZ3JpZF9zaW1wbGVfd2luZG93fG5ld3RfZ3JpZF92X2Nsb3NlX3N0YWNrZWR8bmV3dF9ncmlkX3Zfc3RhY2tlZHxcCm5ld3RfZ3JpZF93cmFwcGVkX3dpbmRvd3xuZXd0X2dyaWRfd3JhcHBlZF93aW5kb3dfYXR8bmV3dF9pbml0fG5ld3RfbGFiZWx8bmV3dF9sYWJlbF9zZXRfdGV4dHxuZXd0X2xpc3Rib3h8bmV3dF9saXN0Ym94X2FwcGVuZF9lbnRyeXxcCm5ld3RfbGlzdGJveF9jbGVhcnxuZXd0X2xpc3Rib3hfY2xlYXJfc2VsZWN0aW9ufG5ld3RfbGlzdGJveF9kZWxldGVfZW50cnl8bmV3dF9saXN0Ym94X2dldF9jdXJyZW50fG5ld3RfbGlzdGJveF9nZXRfc2VsZWN0aW9ufFwKbmV3dF9saXN0Ym94X2luc2VydF9lbnRyeXxuZXd0X2xpc3Rib3hfaXRlbV9jb3VudHxuZXd0X2xpc3Rib3hfc2VsZWN0X2l0ZW18bmV3dF9saXN0Ym94X3NldF9jdXJyZW50fG5ld3RfbGlzdGJveF9zZXRfY3VycmVudF9ieV9rZXl8XApuZXd0X2xpc3Rib3hfc2V0X2RhdGF8bmV3dF9saXN0Ym94X3NldF9lbnRyeXxuZXd0X2xpc3Rib3hfc2V0X3dpZHRofG5ld3RfbGlzdGl0ZW18bmV3dF9saXN0aXRlbV9nZXRfZGF0YXxuZXd0X2xpc3RpdGVtX3NldHxcCm5ld3Rfb3Blbl93aW5kb3d8bmV3dF9wb3BfaGVscF9saW5lfG5ld3RfcG9wX3dpbmRvd3xuZXd0X3B1c2hfaGVscF9saW5lfG5ld3RfcmFkaW9fZ2V0X2N1cnJlbnR8bmV3dF9yYWRpb2J1dHRvbnxuZXd0X3JlZHJhd19oZWxwX2xpbmV8XApuZXd0X3JlZmxvd190ZXh0fG5ld3RfcmVmcmVzaHxuZXd0X3Jlc2l6ZV9zY3JlZW58bmV3dF9yZXN1bWV8bmV3dF9ydW5fZm9ybXxuZXd0X3NjYWxlfG5ld3Rfc2NhbGVfc2V0fG5ld3Rfc2Nyb2xsYmFyX3NldHxcCm5ld3Rfc2V0X2hlbHBfY2FsbGJhY2t8bmV3dF9zZXRfc3VzcGVuZF9jYWxsYmFja3xuZXd0X3N1c3BlbmR8bmV3dF90ZXh0Ym94fG5ld3RfdGV4dGJveF9nZXRfbnVtX2xpbmVzfG5ld3RfdGV4dGJveF9yZWZsb3dlZHxcCm5ld3RfdGV4dGJveF9zZXRfaGVpZ2h0fG5ld3RfdGV4dGJveF9zZXRfdGV4dHxuZXd0X3ZlcnRpY2FsX3Njcm9sbGJhcnxuZXd0X3dhaXRfZm9yX2tleXxuZXd0X3dpbl9jaG9pY2V8bmV3dF93aW5fZW50cmllc3xuZXd0X3dpbl9tZW51fFwKbmV3dF93aW5fbWVzc2FnZXxuZXd0X3dpbl9tZXNzYWdldnxuZXd0X3dpbl90ZXJuYXJ5fG5leHR8bmdldHRleHR8bmwyYnJ8bmxfbGFuZ2luZm98bm9yZXdpbmRpdGVyYXRvcnxub3JtYWxpemVyfG5vdGVzX2JvZHl8bm90ZXNfY29weV9kYnxcCm5vdGVzX2NyZWF0ZV9kYnxub3Rlc19jcmVhdGVfbm90ZXxub3Rlc19kcm9wX2RifG5vdGVzX2ZpbmRfbm90ZXxub3Rlc19oZWFkZXJfaW5mb3xub3Rlc19saXN0X21zZ3N8bm90ZXNfbWFya19yZWFkfG5vdGVzX21hcmtfdW5yZWFkfFwKbm90ZXNfbmF2X2NyZWF0ZXxub3Rlc19zZWFyY2h8bm90ZXNfdW5yZWFkfG5vdGVzX3ZlcnNpb258bnNhcGlfcmVxdWVzdF9oZWFkZXJzfG5zYXBpX3Jlc3BvbnNlX2hlYWRlcnN8bnNhcGlfdmlydHVhbHxudGhtYWN8bnVtYmVyX2Zvcm1hdHxcCm51bWJlcmZvcm1hdHRlcnxvYXV0aHxvYXV0aF9nZXRfc2JzfG9hdXRoX3VybGVuY29kZXxvYXV0aGV4Y2VwdGlvbnxvYXV0aHByb3ZpZGVyfG9iX2NsZWFufG9iX2RlZmxhdGVoYW5kbGVyfG9iX2VuZF9jbGVhbnxvYl9lbmRfZmx1c2h8XApvYl9ldGFnaGFuZGxlcnxvYl9mbHVzaHxvYl9nZXRfY2xlYW58b2JfZ2V0X2NvbnRlbnRzfG9iX2dldF9mbHVzaHxvYl9nZXRfbGVuZ3RofG9iX2dldF9sZXZlbHxvYl9nZXRfc3RhdHVzfG9iX2d6aGFuZGxlcnxvYl9pY29udl9oYW5kbGVyfFwKb2JfaW1wbGljaXRfZmx1c2h8b2JfaW5mbGF0ZWhhbmRsZXJ8b2JfbGlzdF9oYW5kbGVyc3xvYl9zdGFydHxvYl90aWR5aGFuZGxlcnxvY2lfYmluZF9hcnJheV9ieV9uYW1lfG9jaV9iaW5kX2J5X25hbWV8b2NpX2NhbmNlbHxcCm9jaV9jbGllbnRfdmVyc2lvbnxvY2lfY2xvc2V8b2NpX2NvbGxlY3Rpb25fYXBwZW5kfG9jaV9jb2xsZWN0aW9uX2Fzc2lnbnxvY2lfY29sbGVjdGlvbl9lbGVtZW50X2Fzc2lnbnxvY2lfY29sbGVjdGlvbl9lbGVtZW50X2dldHxcCm9jaV9jb2xsZWN0aW9uX2ZyZWV8b2NpX2NvbGxlY3Rpb25fbWF4fG9jaV9jb2xsZWN0aW9uX3NpemV8b2NpX2NvbGxlY3Rpb25fdHJpbXxvY2lfY29tbWl0fG9jaV9jb25uZWN0fG9jaV9kZWZpbmVfYnlfbmFtZXxvY2lfZXJyb3J8XApvY2lfZXhlY3V0ZXxvY2lfZmV0Y2h8b2NpX2ZldGNoX2FsbHxvY2lfZmV0Y2hfYXJyYXl8b2NpX2ZldGNoX2Fzc29jfG9jaV9mZXRjaF9vYmplY3R8b2NpX2ZldGNoX3Jvd3xvY2lfZmllbGRfaXNfbnVsbHxvY2lfZmllbGRfbmFtZXxcCm9jaV9maWVsZF9wcmVjaXNpb258b2NpX2ZpZWxkX3NjYWxlfG9jaV9maWVsZF9zaXplfG9jaV9maWVsZF90eXBlfG9jaV9maWVsZF90eXBlX3Jhd3xvY2lfZnJlZV9zdGF0ZW1lbnR8b2NpX2ludGVybmFsX2RlYnVnfG9jaV9sb2JfYXBwZW5kfFwKb2NpX2xvYl9jbG9zZXxvY2lfbG9iX2NvcHl8b2NpX2xvYl9lb2Z8b2NpX2xvYl9lcmFzZXxvY2lfbG9iX2V4cG9ydHxvY2lfbG9iX2ZsdXNofG9jaV9sb2JfZnJlZXxvY2lfbG9iX2dldGJ1ZmZlcmluZ3xvY2lfbG9iX2ltcG9ydHxcCm9jaV9sb2JfaXNfZXF1YWx8b2NpX2xvYl9sb2FkfG9jaV9sb2JfcmVhZHxvY2lfbG9iX3Jld2luZHxvY2lfbG9iX3NhdmV8b2NpX2xvYl9zYXZlZmlsZXxvY2lfbG9iX3NlZWt8b2NpX2xvYl9zZXRidWZmZXJpbmd8b2NpX2xvYl9zaXplfFwKb2NpX2xvYl90ZWxsfG9jaV9sb2JfdHJ1bmNhdGV8b2NpX2xvYl93cml0ZXxvY2lfbG9iX3dyaXRldGVtcG9yYXJ5fG9jaV9sb2Jfd3JpdGV0b2ZpbGV8b2NpX25ld19jb2xsZWN0aW9ufG9jaV9uZXdfY29ubmVjdHxvY2lfbmV3X2N1cnNvcnxcCm9jaV9uZXdfZGVzY3JpcHRvcnxvY2lfbnVtX2ZpZWxkc3xvY2lfbnVtX3Jvd3N8b2NpX3BhcnNlfG9jaV9wYXNzd29yZF9jaGFuZ2V8b2NpX3Bjb25uZWN0fG9jaV9yZXN1bHR8b2NpX3JvbGxiYWNrfG9jaV9zZXJ2ZXJfdmVyc2lvbnxcCm9jaV9zZXRfYWN0aW9ufG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXJ8b2NpX3NldF9jbGllbnRfaW5mb3xvY2lfc2V0X2VkaXRpb258b2NpX3NldF9tb2R1bGVfbmFtZXxvY2lfc2V0X3ByZWZldGNofG9jaV9zdGF0ZW1lbnRfdHlwZXxcCm9jaWJpbmRieW5hbWV8b2NpY2FuY2VsfG9jaWNsb3NlbG9ifG9jaWNvbGxhcHBlbmR8b2NpY29sbGFzc2lnbnxvY2ljb2xsYXNzaWduZWxlbXxvY2ljb2xsZ2V0ZWxlbXxvY2ljb2xsbWF4fG9jaWNvbGxzaXplfG9jaWNvbGx0cmltfFwKb2NpY29sdW1uaXNudWxsfG9jaWNvbHVtbm5hbWV8b2NpY29sdW1ucHJlY2lzaW9ufG9jaWNvbHVtbnNjYWxlfG9jaWNvbHVtbnNpemV8b2NpY29sdW1udHlwZXxvY2ljb2x1bW50eXBlcmF3fG9jaWNvbW1pdHxvY2lkZWZpbmVieW5hbWV8XApvY2llcnJvcnxvY2lleGVjdXRlfG9jaWZldGNofG9jaWZldGNoaW50b3xvY2lmZXRjaHN0YXRlbWVudHxvY2lmcmVlY29sbGVjdGlvbnxvY2lmcmVlY3Vyc29yfG9jaWZyZWVkZXNjfG9jaWZyZWVzdGF0ZW1lbnR8b2NpaW50ZXJuYWxkZWJ1Z3xcCm9jaWxvYWRsb2J8b2NpbG9nb2ZmfG9jaWxvZ29ufG9jaW5ld2NvbGxlY3Rpb258b2NpbmV3Y3Vyc29yfG9jaW5ld2Rlc2NyaXB0b3J8b2NpbmxvZ29ufG9jaW51bWNvbHN8b2NpcGFyc2V8b2NpcGxvZ29ufG9jaXJlc3VsdHxcCm9jaXJvbGxiYWNrfG9jaXJvd2NvdW50fG9jaXNhdmVsb2J8b2Npc2F2ZWxvYmZpbGV8b2Npc2VydmVydmVyc2lvbnxvY2lzZXRwcmVmZXRjaHxvY2lzdGF0ZW1lbnR0eXBlfG9jaXdyaXRlbG9idG9maWxlfG9jaXdyaXRldGVtcG9yYXJ5bG9ifFwKb2N0ZGVjfG9kYmNfYXV0b2NvbW1pdHxvZGJjX2Jpbm1vZGV8b2RiY19jbG9zZXxvZGJjX2Nsb3NlX2FsbHxvZGJjX2NvbHVtbnByaXZpbGVnZXN8b2RiY19jb2x1bW5zfG9kYmNfY29tbWl0fG9kYmNfY29ubmVjdHxvZGJjX2N1cnNvcnxcCm9kYmNfZGF0YV9zb3VyY2V8b2RiY19kb3xvZGJjX2Vycm9yfG9kYmNfZXJyb3Jtc2d8b2RiY19leGVjfG9kYmNfZXhlY3V0ZXxvZGJjX2ZldGNoX2FycmF5fG9kYmNfZmV0Y2hfaW50b3xvZGJjX2ZldGNoX29iamVjdHxcCm9kYmNfZmV0Y2hfcm93fG9kYmNfZmllbGRfbGVufG9kYmNfZmllbGRfbmFtZXxvZGJjX2ZpZWxkX251bXxvZGJjX2ZpZWxkX3ByZWNpc2lvbnxvZGJjX2ZpZWxkX3NjYWxlfG9kYmNfZmllbGRfdHlwZXxvZGJjX2ZvcmVpZ25rZXlzfFwKb2RiY19mcmVlX3Jlc3VsdHxvZGJjX2dldHR5cGVpbmZvfG9kYmNfbG9uZ3JlYWRsZW58b2RiY19uZXh0X3Jlc3VsdHxvZGJjX251bV9maWVsZHN8b2RiY19udW1fcm93c3xvZGJjX3Bjb25uZWN0fG9kYmNfcHJlcGFyZXxcCm9kYmNfcHJpbWFyeWtleXN8b2RiY19wcm9jZWR1cmVjb2x1bW5zfG9kYmNfcHJvY2VkdXJlc3xvZGJjX3Jlc3VsdHxvZGJjX3Jlc3VsdF9hbGx8b2RiY19yb2xsYmFja3xvZGJjX3NldG9wdGlvbnxvZGJjX3NwZWNpYWxjb2x1bW5zfFwKb2RiY19zdGF0aXN0aWNzfG9kYmNfdGFibGVwcml2aWxlZ2VzfG9kYmNfdGFibGVzfG9wZW5hbF9idWZmZXJfY3JlYXRlfG9wZW5hbF9idWZmZXJfZGF0YXxvcGVuYWxfYnVmZmVyX2Rlc3Ryb3l8b3BlbmFsX2J1ZmZlcl9nZXR8XApvcGVuYWxfYnVmZmVyX2xvYWR3YXZ8b3BlbmFsX2NvbnRleHRfY3JlYXRlfG9wZW5hbF9jb250ZXh0X2N1cnJlbnR8b3BlbmFsX2NvbnRleHRfZGVzdHJveXxvcGVuYWxfY29udGV4dF9wcm9jZXNzfG9wZW5hbF9jb250ZXh0X3N1c3BlbmR8XApvcGVuYWxfZGV2aWNlX2Nsb3NlfG9wZW5hbF9kZXZpY2Vfb3BlbnxvcGVuYWxfbGlzdGVuZXJfZ2V0fG9wZW5hbF9saXN0ZW5lcl9zZXR8b3BlbmFsX3NvdXJjZV9jcmVhdGV8b3BlbmFsX3NvdXJjZV9kZXN0cm95fFwKb3BlbmFsX3NvdXJjZV9nZXR8b3BlbmFsX3NvdXJjZV9wYXVzZXxvcGVuYWxfc291cmNlX3BsYXl8b3BlbmFsX3NvdXJjZV9yZXdpbmR8b3BlbmFsX3NvdXJjZV9zZXR8b3BlbmFsX3NvdXJjZV9zdG9wfG9wZW5hbF9zdHJlYW18b3BlbmRpcnxcCm9wZW5sb2d8b3BlbnNzbF9jaXBoZXJfaXZfbGVuZ3RofG9wZW5zc2xfY3NyX2V4cG9ydHxvcGVuc3NsX2Nzcl9leHBvcnRfdG9fZmlsZXxvcGVuc3NsX2Nzcl9nZXRfcHVibGljX2tleXxvcGVuc3NsX2Nzcl9nZXRfc3ViamVjdHxcCm9wZW5zc2xfY3NyX25ld3xvcGVuc3NsX2Nzcl9zaWdufG9wZW5zc2xfZGVjcnlwdHxvcGVuc3NsX2RoX2NvbXB1dGVfa2V5fG9wZW5zc2xfZGlnZXN0fG9wZW5zc2xfZW5jcnlwdHxvcGVuc3NsX2Vycm9yX3N0cmluZ3xcCm9wZW5zc2xfZnJlZV9rZXl8b3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHN8b3BlbnNzbF9nZXRfbWRfbWV0aG9kc3xvcGVuc3NsX2dldF9wcml2YXRla2V5fG9wZW5zc2xfZ2V0X3B1YmxpY2tleXxvcGVuc3NsX29wZW58XApvcGVuc3NsX3BrY3MxMl9leHBvcnR8b3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF9wa2NzMTJfcmVhZHxvcGVuc3NsX3BrY3M3X2RlY3J5cHR8b3BlbnNzbF9wa2NzN19lbmNyeXB0fG9wZW5zc2xfcGtjczdfc2lnbnxcCm9wZW5zc2xfcGtjczdfdmVyaWZ5fG9wZW5zc2xfcGtleV9leHBvcnR8b3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlfG9wZW5zc2xfcGtleV9mcmVlfG9wZW5zc2xfcGtleV9nZXRfZGV0YWlsc3xvcGVuc3NsX3BrZXlfZ2V0X3ByaXZhdGV8XApvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpY3xvcGVuc3NsX3BrZXlfbmV3fG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0fG9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0fG9wZW5zc2xfcHVibGljX2RlY3J5cHR8b3BlbnNzbF9wdWJsaWNfZW5jcnlwdHxcCm9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlc3xvcGVuc3NsX3NlYWx8b3BlbnNzbF9zaWdufG9wZW5zc2xfdmVyaWZ5fG9wZW5zc2xfeDUwOV9jaGVja19wcml2YXRlX2tleXxvcGVuc3NsX3g1MDlfY2hlY2twdXJwb3NlfFwKb3BlbnNzbF94NTA5X2V4cG9ydHxvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGV8b3BlbnNzbF94NTA5X2ZyZWV8b3BlbnNzbF94NTA5X3BhcnNlfG9wZW5zc2xfeDUwOV9yZWFkfG9yZHxvdXRlcml0ZXJhdG9yfFwKb3V0b2Zib3VuZHNleGNlcHRpb258b3V0b2ZyYW5nZWV4Y2VwdGlvbnxvdXRwdXRfYWRkX3Jld3JpdGVfdmFyfG91dHB1dF9yZXNldF9yZXdyaXRlX3ZhcnN8b3ZlcmZsb3dleGNlcHRpb258b3ZlcmxvYWR8b3ZlcnJpZGVfZnVuY3Rpb258XApvdnJpbW9zX2Nsb3NlfG92cmltb3NfY29tbWl0fG92cmltb3NfY29ubmVjdHxvdnJpbW9zX2N1cnNvcnxvdnJpbW9zX2V4ZWN8b3ZyaW1vc19leGVjdXRlfG92cmltb3NfZmV0Y2hfaW50b3xvdnJpbW9zX2ZldGNoX3Jvd3xcCm92cmltb3NfZmllbGRfbGVufG92cmltb3NfZmllbGRfbmFtZXxvdnJpbW9zX2ZpZWxkX251bXxvdnJpbW9zX2ZpZWxkX3R5cGV8b3ZyaW1vc19mcmVlX3Jlc3VsdHxvdnJpbW9zX2xvbmdyZWFkbGVufG92cmltb3NfbnVtX2ZpZWxkc3xcCm92cmltb3NfbnVtX3Jvd3N8b3ZyaW1vc19wcmVwYXJlfG92cmltb3NfcmVzdWx0fG92cmltb3NfcmVzdWx0X2FsbHxvdnJpbW9zX3JvbGxiYWNrfHBhY2t8cGFyZW50aXRlcmF0b3J8cGFyc2VfaW5pX2ZpbGV8cGFyc2VfaW5pX3N0cmluZ3xcCnBhcnNlX3N0cnxwYXJzZV91cmx8cGFyc2VraXRfY29tcGlsZV9maWxlfHBhcnNla2l0X2NvbXBpbGVfc3RyaW5nfHBhcnNla2l0X2Z1bmNfYXJnaW5mb3xwYXNzdGhydXxwYXRoaW5mb3xwY2xvc2V8cGNudGxfYWxhcm18cGNudGxfZXhlY3xcCnBjbnRsX2Zvcmt8cGNudGxfZ2V0cHJpb3JpdHl8cGNudGxfc2V0cHJpb3JpdHl8cGNudGxfc2lnbmFsfHBjbnRsX3NpZ25hbF9kaXNwYXRjaHxwY250bF9zaWdwcm9jbWFza3xwY250bF9zaWd0aW1lZHdhaXR8cGNudGxfc2lnd2FpdGluZm98XApwY250bF93YWl0fHBjbnRsX3dhaXRwaWR8cGNudGxfd2V4aXRzdGF0dXN8cGNudGxfd2lmZXhpdGVkfHBjbnRsX3dpZnNpZ25hbGVkfHBjbnRsX3dpZnN0b3BwZWR8cGNudGxfd3N0b3BzaWd8cGNudGxfd3Rlcm1zaWd8XApwZGZfYWN0aXZhdGVfaXRlbXxwZGZfYWRkX2Fubm90YXRpb258cGRmX2FkZF9ib29rbWFya3xwZGZfYWRkX2xhdW5jaGxpbmt8cGRmX2FkZF9sb2NhbGxpbmt8cGRmX2FkZF9uYW1lZGRlc3R8cGRmX2FkZF9ub3RlfHBkZl9hZGRfb3V0bGluZXxcCnBkZl9hZGRfcGRmbGlua3xwZGZfYWRkX3RhYmxlX2NlbGx8cGRmX2FkZF90ZXh0Zmxvd3xwZGZfYWRkX3RodW1ibmFpbHxwZGZfYWRkX3dlYmxpbmt8cGRmX2FyY3xwZGZfYXJjbnxwZGZfYXR0YWNoX2ZpbGV8cGRmX2JlZ2luX2RvY3VtZW50fFwKcGRmX2JlZ2luX2ZvbnR8cGRmX2JlZ2luX2dseXBofHBkZl9iZWdpbl9pdGVtfHBkZl9iZWdpbl9sYXllcnxwZGZfYmVnaW5fcGFnZXxwZGZfYmVnaW5fcGFnZV9leHR8cGRmX2JlZ2luX3BhdHRlcm58cGRmX2JlZ2luX3RlbXBsYXRlfFwKcGRmX2JlZ2luX3RlbXBsYXRlX2V4dHxwZGZfY2lyY2xlfHBkZl9jbGlwfHBkZl9jbG9zZXxwZGZfY2xvc2VfaW1hZ2V8cGRmX2Nsb3NlX3BkaXxwZGZfY2xvc2VfcGRpX3BhZ2V8cGRmX2Nsb3NlcGF0aHxcCnBkZl9jbG9zZXBhdGhfZmlsbF9zdHJva2V8cGRmX2Nsb3NlcGF0aF9zdHJva2V8cGRmX2NvbmNhdHxwZGZfY29udGludWVfdGV4dHxwZGZfY3JlYXRlXzNkdmlld3xwZGZfY3JlYXRlX2FjdGlvbnxwZGZfY3JlYXRlX2Fubm90YXRpb258XApwZGZfY3JlYXRlX2Jvb2ttYXJrfHBkZl9jcmVhdGVfZmllbGR8cGRmX2NyZWF0ZV9maWVsZGdyb3VwfHBkZl9jcmVhdGVfZ3N0YXRlfHBkZl9jcmVhdGVfcHZmfHBkZl9jcmVhdGVfdGV4dGZsb3d8cGRmX2N1cnZldG98XApwZGZfZGVmaW5lX2xheWVyfHBkZl9kZWxldGV8cGRmX2RlbGV0ZV9wdmZ8cGRmX2RlbGV0ZV90YWJsZXxwZGZfZGVsZXRlX3RleHRmbG93fHBkZl9lbmNvZGluZ19zZXRfY2hhcnxwZGZfZW5kX2RvY3VtZW50fHBkZl9lbmRfZm9udHxcCnBkZl9lbmRfZ2x5cGh8cGRmX2VuZF9pdGVtfHBkZl9lbmRfbGF5ZXJ8cGRmX2VuZF9wYWdlfHBkZl9lbmRfcGFnZV9leHR8cGRmX2VuZF9wYXR0ZXJufHBkZl9lbmRfdGVtcGxhdGV8cGRmX2VuZHBhdGh8cGRmX2ZpbGx8XApwZGZfZmlsbF9pbWFnZWJsb2NrfHBkZl9maWxsX3BkZmJsb2NrfHBkZl9maWxsX3N0cm9rZXxwZGZfZmlsbF90ZXh0YmxvY2t8cGRmX2ZpbmRmb250fHBkZl9maXRfaW1hZ2V8cGRmX2ZpdF9wZGlfcGFnZXxwZGZfZml0X3RhYmxlfFwKcGRmX2ZpdF90ZXh0Zmxvd3xwZGZfZml0X3RleHRsaW5lfHBkZl9nZXRfYXBpbmFtZXxwZGZfZ2V0X2J1ZmZlcnxwZGZfZ2V0X2Vycm1zZ3xwZGZfZ2V0X2Vycm51bXxwZGZfZ2V0X2ZvbnR8cGRmX2dldF9mb250bmFtZXxcCnBkZl9nZXRfZm9udHNpemV8cGRmX2dldF9pbWFnZV9oZWlnaHR8cGRmX2dldF9pbWFnZV93aWR0aHxwZGZfZ2V0X21ham9ydmVyc2lvbnxwZGZfZ2V0X21pbm9ydmVyc2lvbnxwZGZfZ2V0X3BhcmFtZXRlcnxcCnBkZl9nZXRfcGRpX3BhcmFtZXRlcnxwZGZfZ2V0X3BkaV92YWx1ZXxwZGZfZ2V0X3ZhbHVlfHBkZl9pbmZvX2ZvbnR8cGRmX2luZm9fbWF0Y2hib3h8cGRmX2luZm9fdGFibGV8cGRmX2luZm9fdGV4dGZsb3d8cGRmX2luZm9fdGV4dGxpbmV8XApwZGZfaW5pdGdyYXBoaWNzfHBkZl9saW5ldG98cGRmX2xvYWRfM2RkYXRhfHBkZl9sb2FkX2ZvbnR8cGRmX2xvYWRfaWNjcHJvZmlsZXxwZGZfbG9hZF9pbWFnZXxwZGZfbWFrZXNwb3Rjb2xvcnxwZGZfbW92ZXRvfHBkZl9uZXd8XApwZGZfb3Blbl9jY2l0dHxwZGZfb3Blbl9maWxlfHBkZl9vcGVuX2dpZnxwZGZfb3Blbl9pbWFnZXxwZGZfb3Blbl9pbWFnZV9maWxlfHBkZl9vcGVuX2pwZWd8cGRmX29wZW5fbWVtb3J5X2ltYWdlfHBkZl9vcGVuX3BkaXxcCnBkZl9vcGVuX3BkaV9kb2N1bWVudHxwZGZfb3Blbl9wZGlfcGFnZXxwZGZfb3Blbl90aWZmfHBkZl9wY29zX2dldF9udW1iZXJ8cGRmX3Bjb3NfZ2V0X3N0cmVhbXxwZGZfcGNvc19nZXRfc3RyaW5nfHBkZl9wbGFjZV9pbWFnZXxcCnBkZl9wbGFjZV9wZGlfcGFnZXxwZGZfcHJvY2Vzc19wZGl8cGRmX3JlY3R8cGRmX3Jlc3RvcmV8cGRmX3Jlc3VtZV9wYWdlfHBkZl9yb3RhdGV8cGRmX3NhdmV8cGRmX3NjYWxlfHBkZl9zZXRfYm9yZGVyX2NvbG9yfFwKcGRmX3NldF9ib3JkZXJfZGFzaHxwZGZfc2V0X2JvcmRlcl9zdHlsZXxwZGZfc2V0X2NoYXJfc3BhY2luZ3xwZGZfc2V0X2R1cmF0aW9ufHBkZl9zZXRfZ3N0YXRlfHBkZl9zZXRfaG9yaXpfc2NhbGluZ3xwZGZfc2V0X2luZm98XApwZGZfc2V0X2luZm9fYXV0aG9yfHBkZl9zZXRfaW5mb19jcmVhdG9yfHBkZl9zZXRfaW5mb19rZXl3b3Jkc3xwZGZfc2V0X2luZm9fc3ViamVjdHxwZGZfc2V0X2luZm9fdGl0bGV8cGRmX3NldF9sYXllcl9kZXBlbmRlbmN5fFwKcGRmX3NldF9sZWFkaW5nfHBkZl9zZXRfcGFyYW1ldGVyfHBkZl9zZXRfdGV4dF9tYXRyaXh8cGRmX3NldF90ZXh0X3Bvc3xwZGZfc2V0X3RleHRfcmVuZGVyaW5nfHBkZl9zZXRfdGV4dF9yaXNlfHBkZl9zZXRfdmFsdWV8XApwZGZfc2V0X3dvcmRfc3BhY2luZ3xwZGZfc2V0Y29sb3J8cGRmX3NldGRhc2h8cGRmX3NldGRhc2hwYXR0ZXJufHBkZl9zZXRmbGF0fHBkZl9zZXRmb250fHBkZl9zZXRncmF5fHBkZl9zZXRncmF5X2ZpbGx8cGRmX3NldGdyYXlfc3Ryb2tlfFwKcGRmX3NldGxpbmVjYXB8cGRmX3NldGxpbmVqb2lufHBkZl9zZXRsaW5ld2lkdGh8cGRmX3NldG1hdHJpeHxwZGZfc2V0bWl0ZXJsaW1pdHxwZGZfc2V0cG9seWRhc2h8cGRmX3NldHJnYmNvbG9yfHBkZl9zZXRyZ2Jjb2xvcl9maWxsfFwKcGRmX3NldHJnYmNvbG9yX3N0cm9rZXxwZGZfc2hhZGluZ3xwZGZfc2hhZGluZ19wYXR0ZXJufHBkZl9zaGZpbGx8cGRmX3Nob3d8cGRmX3Nob3dfYm94ZWR8cGRmX3Nob3dfeHl8cGRmX3NrZXd8cGRmX3N0cmluZ3dpZHRofHBkZl9zdHJva2V8XApwZGZfc3VzcGVuZF9wYWdlfHBkZl90cmFuc2xhdGV8cGRmX3V0ZjE2X3RvX3V0Zjh8cGRmX3V0ZjMyX3RvX3V0ZjE2fHBkZl91dGY4X3RvX3V0ZjE2fHBkb3xwZG9fY3VicmlkX3NjaGVtYXxwZG9fcGdzcWxsb2JjcmVhdGV8XApwZG9fcGdzcWxsb2JvcGVufHBkb19wZ3NxbGxvYnVubGlua3xwZG9fc3FsaXRlY3JlYXRlYWdncmVnYXRlfHBkb19zcWxpdGVjcmVhdGVmdW5jdGlvbnxwZG9leGNlcHRpb258cGRvc3RhdGVtZW50fHBmc29ja29wZW58XApwZ19hZmZlY3RlZF9yb3dzfHBnX2NhbmNlbF9xdWVyeXxwZ19jbGllbnRfZW5jb2Rpbmd8cGdfY2xvc2V8cGdfY29ubmVjdHxwZ19jb25uZWN0aW9uX2J1c3l8cGdfY29ubmVjdGlvbl9yZXNldHxwZ19jb25uZWN0aW9uX3N0YXR1c3xcCnBnX2NvbnZlcnR8cGdfY29weV9mcm9tfHBnX2NvcHlfdG98cGdfZGJuYW1lfHBnX2RlbGV0ZXxwZ19lbmRfY29weXxwZ19lc2NhcGVfYnl0ZWF8cGdfZXNjYXBlX3N0cmluZ3xwZ19leGVjdXRlfHBnX2ZldGNoX2FsbHxcCnBnX2ZldGNoX2FsbF9jb2x1bW5zfHBnX2ZldGNoX2FycmF5fHBnX2ZldGNoX2Fzc29jfHBnX2ZldGNoX29iamVjdHxwZ19mZXRjaF9yZXN1bHR8cGdfZmV0Y2hfcm93fHBnX2ZpZWxkX2lzX251bGx8cGdfZmllbGRfbmFtZXxcCnBnX2ZpZWxkX251bXxwZ19maWVsZF9wcnRsZW58cGdfZmllbGRfc2l6ZXxwZ19maWVsZF90YWJsZXxwZ19maWVsZF90eXBlfHBnX2ZpZWxkX3R5cGVfb2lkfHBnX2ZyZWVfcmVzdWx0fHBnX2dldF9ub3RpZnl8cGdfZ2V0X3BpZHxcCnBnX2dldF9yZXN1bHR8cGdfaG9zdHxwZ19pbnNlcnR8cGdfbGFzdF9lcnJvcnxwZ19sYXN0X25vdGljZXxwZ19sYXN0X29pZHxwZ19sb19jbG9zZXxwZ19sb19jcmVhdGV8cGdfbG9fZXhwb3J0fHBnX2xvX2ltcG9ydHxwZ19sb19vcGVufFwKcGdfbG9fcmVhZHxwZ19sb19yZWFkX2FsbHxwZ19sb19zZWVrfHBnX2xvX3RlbGx8cGdfbG9fdW5saW5rfHBnX2xvX3dyaXRlfHBnX21ldGFfZGF0YXxwZ19udW1fZmllbGRzfHBnX251bV9yb3dzfHBnX29wdGlvbnN8XApwZ19wYXJhbWV0ZXJfc3RhdHVzfHBnX3Bjb25uZWN0fHBnX3Bpbmd8cGdfcG9ydHxwZ19wcmVwYXJlfHBnX3B1dF9saW5lfHBnX3F1ZXJ5fHBnX3F1ZXJ5X3BhcmFtc3xwZ19yZXN1bHRfZXJyb3J8cGdfcmVzdWx0X2Vycm9yX2ZpZWxkfFwKcGdfcmVzdWx0X3NlZWt8cGdfcmVzdWx0X3N0YXR1c3xwZ19zZWxlY3R8cGdfc2VuZF9leGVjdXRlfHBnX3NlbmRfcHJlcGFyZXxwZ19zZW5kX3F1ZXJ5fHBnX3NlbmRfcXVlcnlfcGFyYW1zfHBnX3NldF9jbGllbnRfZW5jb2Rpbmd8XApwZ19zZXRfZXJyb3JfdmVyYm9zaXR5fHBnX3RyYWNlfHBnX3RyYW5zYWN0aW9uX3N0YXR1c3xwZ190dHl8cGdfdW5lc2NhcGVfYnl0ZWF8cGdfdW50cmFjZXxwZ191cGRhdGV8cGdfdmVyc2lvbnxwaHBfY2hlY2tfc3ludGF4fFwKcGhwX2luaV9sb2FkZWRfZmlsZXxwaHBfaW5pX3NjYW5uZWRfZmlsZXN8cGhwX2xvZ29fZ3VpZHxwaHBfc2FwaV9uYW1lfHBocF9zdHJpcF93aGl0ZXNwYWNlfHBocF91bmFtZXxwaHBjcmVkaXRzfHBocGluZm98cGhwdmVyc2lvbnxwaXxcCnBuZzJ3Ym1wfHBvcGVufHBvc3xwb3NpeF9hY2Nlc3N8cG9zaXhfY3Rlcm1pZHxwb3NpeF9lcnJub3xwb3NpeF9nZXRfbGFzdF9lcnJvcnxwb3NpeF9nZXRjd2R8cG9zaXhfZ2V0ZWdpZHxwb3NpeF9nZXRldWlkfHBvc2l4X2dldGdpZHxcCnBvc2l4X2dldGdyZ2lkfHBvc2l4X2dldGdybmFtfHBvc2l4X2dldGdyb3Vwc3xwb3NpeF9nZXRsb2dpbnxwb3NpeF9nZXRwZ2lkfHBvc2l4X2dldHBncnB8cG9zaXhfZ2V0cGlkfHBvc2l4X2dldHBwaWR8cG9zaXhfZ2V0cHduYW18XApwb3NpeF9nZXRwd3VpZHxwb3NpeF9nZXRybGltaXR8cG9zaXhfZ2V0c2lkfHBvc2l4X2dldHVpZHxwb3NpeF9pbml0Z3JvdXBzfHBvc2l4X2lzYXR0eXxwb3NpeF9raWxsfHBvc2l4X21rZmlmb3xwb3NpeF9ta25vZHxwb3NpeF9zZXRlZ2lkfFwKcG9zaXhfc2V0ZXVpZHxwb3NpeF9zZXRnaWR8cG9zaXhfc2V0cGdpZHxwb3NpeF9zZXRzaWR8cG9zaXhfc2V0dWlkfHBvc2l4X3N0cmVycm9yfHBvc2l4X3RpbWVzfHBvc2l4X3R0eW5hbWV8cG9zaXhfdW5hbWV8cG93fHByZWdfZmlsdGVyfFwKcHJlZ19ncmVwfHByZWdfbGFzdF9lcnJvcnxwcmVnX21hdGNofHByZWdfbWF0Y2hfYWxsfHByZWdfcXVvdGV8cHJlZ19yZXBsYWNlfHByZWdfcmVwbGFjZV9jYWxsYmFja3xwcmVnX3NwbGl0fHByZXZ8cHJpbnR8cHJpbnRfcnxcCnByaW50ZXJfYWJvcnR8cHJpbnRlcl9jbG9zZXxwcmludGVyX2NyZWF0ZV9icnVzaHxwcmludGVyX2NyZWF0ZV9kY3xwcmludGVyX2NyZWF0ZV9mb250fHByaW50ZXJfY3JlYXRlX3BlbnxwcmludGVyX2RlbGV0ZV9icnVzaHxcCnByaW50ZXJfZGVsZXRlX2RjfHByaW50ZXJfZGVsZXRlX2ZvbnR8cHJpbnRlcl9kZWxldGVfcGVufHByaW50ZXJfZHJhd19ibXB8cHJpbnRlcl9kcmF3X2Nob3JkfHByaW50ZXJfZHJhd19lbGlwc2V8cHJpbnRlcl9kcmF3X2xpbmV8XApwcmludGVyX2RyYXdfcGllfHByaW50ZXJfZHJhd19yZWN0YW5nbGV8cHJpbnRlcl9kcmF3X3JvdW5kcmVjdHxwcmludGVyX2RyYXdfdGV4dHxwcmludGVyX2VuZF9kb2N8cHJpbnRlcl9lbmRfcGFnZXxwcmludGVyX2dldF9vcHRpb258XApwcmludGVyX2xpc3R8cHJpbnRlcl9sb2dpY2FsX2ZvbnRoZWlnaHR8cHJpbnRlcl9vcGVufHByaW50ZXJfc2VsZWN0X2JydXNofHByaW50ZXJfc2VsZWN0X2ZvbnR8cHJpbnRlcl9zZWxlY3RfcGVufHByaW50ZXJfc2V0X29wdGlvbnxcCnByaW50ZXJfc3RhcnRfZG9jfHByaW50ZXJfc3RhcnRfcGFnZXxwcmludGVyX3dyaXRlfHByaW50Znxwcm9jX2Nsb3NlfHByb2NfZ2V0X3N0YXR1c3xwcm9jX25pY2V8cHJvY19vcGVufHByb2NfdGVybWluYXRlfHByb3BlcnR5X2V4aXN0c3xcCnBzX2FkZF9ib29rbWFya3xwc19hZGRfbGF1bmNobGlua3xwc19hZGRfbG9jYWxsaW5rfHBzX2FkZF9ub3RlfHBzX2FkZF9wZGZsaW5rfHBzX2FkZF93ZWJsaW5rfHBzX2FyY3xwc19hcmNufHBzX2JlZ2luX3BhZ2V8XApwc19iZWdpbl9wYXR0ZXJufHBzX2JlZ2luX3RlbXBsYXRlfHBzX2NpcmNsZXxwc19jbGlwfHBzX2Nsb3NlfHBzX2Nsb3NlX2ltYWdlfHBzX2Nsb3NlcGF0aHxwc19jbG9zZXBhdGhfc3Ryb2tlfHBzX2NvbnRpbnVlX3RleHR8cHNfY3VydmV0b3xcCnBzX2RlbGV0ZXxwc19lbmRfcGFnZXxwc19lbmRfcGF0dGVybnxwc19lbmRfdGVtcGxhdGV8cHNfZmlsbHxwc19maWxsX3N0cm9rZXxwc19maW5kZm9udHxwc19nZXRfYnVmZmVyfHBzX2dldF9wYXJhbWV0ZXJ8cHNfZ2V0X3ZhbHVlfFwKcHNfaHlwaGVuYXRlfHBzX2luY2x1ZGVfZmlsZXxwc19saW5ldG98cHNfbWFrZXNwb3Rjb2xvcnxwc19tb3ZldG98cHNfbmV3fHBzX29wZW5fZmlsZXxwc19vcGVuX2ltYWdlfHBzX29wZW5faW1hZ2VfZmlsZXxcCnBzX29wZW5fbWVtb3J5X2ltYWdlfHBzX3BsYWNlX2ltYWdlfHBzX3JlY3R8cHNfcmVzdG9yZXxwc19yb3RhdGV8cHNfc2F2ZXxwc19zY2FsZXxwc19zZXRfYm9yZGVyX2NvbG9yfHBzX3NldF9ib3JkZXJfZGFzaHxcCnBzX3NldF9ib3JkZXJfc3R5bGV8cHNfc2V0X2luZm98cHNfc2V0X3BhcmFtZXRlcnxwc19zZXRfdGV4dF9wb3N8cHNfc2V0X3ZhbHVlfHBzX3NldGNvbG9yfHBzX3NldGRhc2h8cHNfc2V0ZmxhdHxwc19zZXRmb250fHBzX3NldGdyYXl8XApwc19zZXRsaW5lY2FwfHBzX3NldGxpbmVqb2lufHBzX3NldGxpbmV3aWR0aHxwc19zZXRtaXRlcmxpbWl0fHBzX3NldG92ZXJwcmludG1vZGV8cHNfc2V0cG9seWRhc2h8cHNfc2hhZGluZ3xwc19zaGFkaW5nX3BhdHRlcm58cHNfc2hmaWxsfFwKcHNfc2hvd3xwc19zaG93Mnxwc19zaG93X2JveGVkfHBzX3Nob3dfeHl8cHNfc2hvd194eTJ8cHNfc3RyaW5nX2dlb21ldHJ5fHBzX3N0cmluZ3dpZHRofHBzX3N0cm9rZXxwc19zeW1ib2x8cHNfc3ltYm9sX25hbWV8XApwc19zeW1ib2xfd2lkdGh8cHNfdHJhbnNsYXRlfHBzcGVsbF9hZGRfdG9fcGVyc29uYWx8cHNwZWxsX2FkZF90b19zZXNzaW9ufHBzcGVsbF9jaGVja3xwc3BlbGxfY2xlYXJfc2Vzc2lvbnxwc3BlbGxfY29uZmlnX2NyZWF0ZXxcCnBzcGVsbF9jb25maWdfZGF0YV9kaXJ8cHNwZWxsX2NvbmZpZ19kaWN0X2Rpcnxwc3BlbGxfY29uZmlnX2lnbm9yZXxwc3BlbGxfY29uZmlnX21vZGV8cHNwZWxsX2NvbmZpZ19wZXJzb25hbHxwc3BlbGxfY29uZmlnX3JlcGx8XApwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyfHBzcGVsbF9jb25maWdfc2F2ZV9yZXBsfHBzcGVsbF9uZXd8cHNwZWxsX25ld19jb25maWd8cHNwZWxsX25ld19wZXJzb25hbHxwc3BlbGxfc2F2ZV93b3JkbGlzdHxcCnBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudHxwc3BlbGxfc3VnZ2VzdHxwdXRlbnZ8cHhfY2xvc2V8cHhfY3JlYXRlX2ZwfHB4X2RhdGUyc3RyaW5nfHB4X2RlbGV0ZXxweF9kZWxldGVfcmVjb3JkfHB4X2dldF9maWVsZHxweF9nZXRfaW5mb3xcCnB4X2dldF9wYXJhbWV0ZXJ8cHhfZ2V0X3JlY29yZHxweF9nZXRfc2NoZW1hfHB4X2dldF92YWx1ZXxweF9pbnNlcnRfcmVjb3JkfHB4X25ld3xweF9udW1maWVsZHN8cHhfbnVtcmVjb3Jkc3xweF9vcGVuX2ZwfHB4X3B1dF9yZWNvcmR8XApweF9yZXRyaWV2ZV9yZWNvcmR8cHhfc2V0X2Jsb2JfZmlsZXxweF9zZXRfcGFyYW1ldGVyfHB4X3NldF90YWJsZW5hbWV8cHhfc2V0X3RhcmdldGVuY29kaW5nfHB4X3NldF92YWx1ZXxweF90aW1lc3RhbXAyc3RyaW5nfFwKcHhfdXBkYXRlX3JlY29yZHxxZG9tX2Vycm9yfHFkb21fdHJlZXxxdW90ZWRfcHJpbnRhYmxlX2RlY29kZXxxdW90ZWRfcHJpbnRhYmxlX2VuY29kZXxxdW90ZW1ldGF8cmFkMmRlZ3xyYWRpdXNfYWNjdF9vcGVufFwKcmFkaXVzX2FkZF9zZXJ2ZXJ8cmFkaXVzX2F1dGhfb3BlbnxyYWRpdXNfY2xvc2V8cmFkaXVzX2NvbmZpZ3xyYWRpdXNfY3JlYXRlX3JlcXVlc3R8cmFkaXVzX2N2dF9hZGRyfHJhZGl1c19jdnRfaW50fHJhZGl1c19jdnRfc3RyaW5nfFwKcmFkaXVzX2RlbWFuZ2xlfHJhZGl1c19kZW1hbmdsZV9tcHBlX2tleXxyYWRpdXNfZ2V0X2F0dHJ8cmFkaXVzX2dldF92ZW5kb3JfYXR0cnxyYWRpdXNfcHV0X2FkZHJ8cmFkaXVzX3B1dF9hdHRyfHJhZGl1c19wdXRfaW50fFwKcmFkaXVzX3B1dF9zdHJpbmd8cmFkaXVzX3B1dF92ZW5kb3JfYWRkcnxyYWRpdXNfcHV0X3ZlbmRvcl9hdHRyfHJhZGl1c19wdXRfdmVuZG9yX2ludHxyYWRpdXNfcHV0X3ZlbmRvcl9zdHJpbmd8XApyYWRpdXNfcmVxdWVzdF9hdXRoZW50aWNhdG9yfHJhZGl1c19zZW5kX3JlcXVlc3R8cmFkaXVzX3NlcnZlcl9zZWNyZXR8cmFkaXVzX3N0cmVycm9yfHJhbmR8cmFuZ2V8cmFuZ2VleGNlcHRpb258cmFyX3dyYXBwZXJfY2FjaGVfc3RhdHN8XApyYXJhcmNoaXZlfHJhcmVudHJ5fHJhcmV4Y2VwdGlvbnxyYXd1cmxkZWNvZGV8cmF3dXJsZW5jb2RlfHJlYWRfZXhpZl9kYXRhfHJlYWRkaXJ8cmVhZGZpbGV8cmVhZGd6ZmlsZXxyZWFkbGluZXxyZWFkbGluZV9hZGRfaGlzdG9yeXxcCnJlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbHxyZWFkbGluZV9jYWxsYmFja19oYW5kbGVyX3JlbW92ZXxyZWFkbGluZV9jYWxsYmFja19yZWFkX2NoYXJ8cmVhZGxpbmVfY2xlYXJfaGlzdG9yeXxcCnJlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb258cmVhZGxpbmVfaW5mb3xyZWFkbGluZV9saXN0X2hpc3Rvcnl8cmVhZGxpbmVfb25fbmV3X2xpbmV8cmVhZGxpbmVfcmVhZF9oaXN0b3J5fHJlYWRsaW5lX3JlZGlzcGxheXxcCnJlYWRsaW5lX3dyaXRlX2hpc3Rvcnl8cmVhZGxpbmt8cmVhbHBhdGh8cmVhbHBhdGhfY2FjaGVfZ2V0fHJlYWxwYXRoX2NhY2hlX3NpemV8cmVjb2RlfHJlY29kZV9maWxlfHJlY29kZV9zdHJpbmd8cmVjdXJzaXZlYXJyYXlpdGVyYXRvcnxcCnJlY3Vyc2l2ZWNhY2hpbmdpdGVyYXRvcnxyZWN1cnNpdmVjYWxsYmFja2ZpbHRlcml0ZXJhdG9yfHJlY3Vyc2l2ZWRpcmVjdG9yeWl0ZXJhdG9yfHJlY3Vyc2l2ZWZpbHRlcml0ZXJhdG9yfHJlY3Vyc2l2ZWl0ZXJhdG9yfFwKcmVjdXJzaXZlaXRlcmF0b3JpdGVyYXRvcnxyZWN1cnNpdmVyZWdleGl0ZXJhdG9yfHJlY3Vyc2l2ZXRyZWVpdGVyYXRvcnxyZWZsZWN0aW9ufHJlZmxlY3Rpb25jbGFzc3xyZWZsZWN0aW9uZXhjZXB0aW9ufHJlZmxlY3Rpb25leHRlbnNpb258XApyZWZsZWN0aW9uZnVuY3Rpb258cmVmbGVjdGlvbmZ1bmN0aW9uYWJzdHJhY3R8cmVmbGVjdGlvbm1ldGhvZHxyZWZsZWN0aW9ub2JqZWN0fHJlZmxlY3Rpb25wYXJhbWV0ZXJ8cmVmbGVjdGlvbnByb3BlcnR5fHJlZmxlY3RvcnxcCnJlZ2V4aXRlcmF0b3J8cmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb258cmVnaXN0ZXJfdGlja19mdW5jdGlvbnxyZW5hbWV8cmVuYW1lX2Z1bmN0aW9ufHJlcXVpcmV8cmVxdWlyZV9vbmNlfHJlc2V0fHJlc2V0VmFsdWV8XApyZXNvdXJjZWJ1bmRsZXxyZXN0b3JlX2Vycm9yX2hhbmRsZXJ8cmVzdG9yZV9leGNlcHRpb25faGFuZGxlcnxyZXN0b3JlX2luY2x1ZGVfcGF0aHxyZXR1cm58cmV3aW5kfHJld2luZGRpcnxybWRpcnxyb3VuZHxycG1fY2xvc2V8XApycG1fZ2V0X3RhZ3xycG1faXNfdmFsaWR8cnBtX29wZW58cnBtX3ZlcnNpb258cnJkX2NyZWF0ZXxycmRfZXJyb3J8cnJkX2ZldGNofHJyZF9maXJzdHxycmRfZ3JhcGh8cnJkX2luZm98cnJkX2xhc3R8cnJkX2xhc3R1cGRhdGV8XApycmRfcmVzdG9yZXxycmRfdHVuZXxycmRfdXBkYXRlfHJyZF94cG9ydHxycmRjcmVhdG9yfHJyZGdyYXBofHJyZHVwZGF0ZXJ8cnNvcnR8cnRyaW18cnVua2l0X2NsYXNzX2Fkb3B0fHJ1bmtpdF9jbGFzc19lbWFuY2lwYXRlfFwKcnVua2l0X2NvbnN0YW50X2FkZHxydW5raXRfY29uc3RhbnRfcmVkZWZpbmV8cnVua2l0X2NvbnN0YW50X3JlbW92ZXxydW5raXRfZnVuY3Rpb25fYWRkfHJ1bmtpdF9mdW5jdGlvbl9jb3B5fHJ1bmtpdF9mdW5jdGlvbl9yZWRlZmluZXxcCnJ1bmtpdF9mdW5jdGlvbl9yZW1vdmV8cnVua2l0X2Z1bmN0aW9uX3JlbmFtZXxydW5raXRfaW1wb3J0fHJ1bmtpdF9saW50fHJ1bmtpdF9saW50X2ZpbGV8cnVua2l0X21ldGhvZF9hZGR8cnVua2l0X21ldGhvZF9jb3B5fFwKcnVua2l0X21ldGhvZF9yZWRlZmluZXxydW5raXRfbWV0aG9kX3JlbW92ZXxydW5raXRfbWV0aG9kX3JlbmFtZXxydW5raXRfcmV0dXJuX3ZhbHVlX3VzZWR8cnVua2l0X3NhbmRib3hfb3V0cHV0X2hhbmRsZXJ8XApydW5raXRfc3VwZXJnbG9iYWxzfHJ1bnRpbWVleGNlcHRpb258c2FtY29ubmVjdGlvbl9jb21taXR8c2FtY29ubmVjdGlvbl9jb25uZWN0fHNhbWNvbm5lY3Rpb25fY29uc3RydWN0b3J8c2FtY29ubmVjdGlvbl9kaXNjb25uZWN0fFwKc2FtY29ubmVjdGlvbl9lcnJub3xzYW1jb25uZWN0aW9uX2Vycm9yfHNhbWNvbm5lY3Rpb25faXNjb25uZWN0ZWR8c2FtY29ubmVjdGlvbl9wZWVrfHNhbWNvbm5lY3Rpb25fcGVla2FsbHxzYW1jb25uZWN0aW9uX3JlY2VpdmV8XApzYW1jb25uZWN0aW9uX3JlbW92ZXxzYW1jb25uZWN0aW9uX3JvbGxiYWNrfHNhbWNvbm5lY3Rpb25fc2VuZHxzYW1jb25uZWN0aW9uX3NldERlYnVnfHNhbWNvbm5lY3Rpb25fc3Vic2NyaWJlfHNhbWNvbm5lY3Rpb25fdW5zdWJzY3JpYmV8XApzYW1tZXNzYWdlX2JvZHl8c2FtbWVzc2FnZV9jb25zdHJ1Y3RvcnxzYW1tZXNzYWdlX2hlYWRlcnxzY2FfY3JlYXRlZGF0YW9iamVjdHxzY2FfZ2V0c2VydmljZXxzY2FfbG9jYWxwcm94eV9jcmVhdGVkYXRhb2JqZWN0fFwKc2NhX3NvYXBwcm94eV9jcmVhdGVkYXRhb2JqZWN0fHNjYW5kaXJ8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2JlZ2lubG9nZ2luZ3xzZG9fZGFzX2NoYW5nZXN1bW1hcnlfZW5kbG9nZ2luZ3xcCnNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRjaGFuZ2VkZGF0YW9iamVjdHN8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2dldGNoYW5nZXR5cGV8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2dldG9sZGNvbnRhaW5lcnxcCnNkb19kYXNfY2hhbmdlc3VtbWFyeV9nZXRvbGR2YWx1ZXN8c2RvX2Rhc19jaGFuZ2VzdW1tYXJ5X2lzbG9nZ2luZ3xzZG9fZGFzX2RhdGFmYWN0b3J5X2FkZHByb3BlcnR5dG90eXBlfHNkb19kYXNfZGF0YWZhY3RvcnlfYWRkdHlwZXxcCnNkb19kYXNfZGF0YWZhY3RvcnlfZ2V0ZGF0YWZhY3Rvcnl8c2RvX2Rhc19kYXRhb2JqZWN0X2dldGNoYW5nZXN1bW1hcnl8c2RvX2Rhc19yZWxhdGlvbmFsX2FwcGx5Y2hhbmdlc3xzZG9fZGFzX3JlbGF0aW9uYWxfY29uc3RydWN0fFwKc2RvX2Rhc19yZWxhdGlvbmFsX2NyZWF0ZXJvb3RkYXRhb2JqZWN0fHNkb19kYXNfcmVsYXRpb25hbF9leGVjdXRlcHJlcGFyZWRxdWVyeXxzZG9fZGFzX3JlbGF0aW9uYWxfZXhlY3V0ZXF1ZXJ5fFwKc2RvX2Rhc19zZXR0aW5nX2dldGxpc3RpbmRleHxzZG9fZGFzX3NldHRpbmdfZ2V0cHJvcGVydHlpbmRleHxzZG9fZGFzX3NldHRpbmdfZ2V0cHJvcGVydHluYW1lfHNkb19kYXNfc2V0dGluZ19nZXR2YWx1ZXxcCnNkb19kYXNfc2V0dGluZ19pc3NldHxzZG9fZGFzX3htbF9hZGR0eXBlc3xzZG9fZGFzX3htbF9jcmVhdGV8c2RvX2Rhc194bWxfY3JlYXRlZGF0YW9iamVjdHxzZG9fZGFzX3htbF9jcmVhdGVkb2N1bWVudHxcCnNkb19kYXNfeG1sX2RvY3VtZW50X2dldHJvb3RkYXRhb2JqZWN0fHNkb19kYXNfeG1sX2RvY3VtZW50X2dldHJvb3RlbGVtZW50bmFtZXxzZG9fZGFzX3htbF9kb2N1bWVudF9nZXRyb290ZWxlbWVudHVyaXxcCnNkb19kYXNfeG1sX2RvY3VtZW50X3NldGVuY29kaW5nfHNkb19kYXNfeG1sX2RvY3VtZW50X3NldHhtbGRlY2xhcmF0aW9ufHNkb19kYXNfeG1sX2RvY3VtZW50X3NldHhtbHZlcnNpb258c2RvX2Rhc194bWxfbG9hZGZpbGV8XApzZG9fZGFzX3htbF9sb2Fkc3RyaW5nfHNkb19kYXNfeG1sX3NhdmVmaWxlfHNkb19kYXNfeG1sX3NhdmVzdHJpbmd8c2RvX2RhdGFmYWN0b3J5X2NyZWF0ZXxzZG9fZGF0YW9iamVjdF9jbGVhcnxcCnNkb19kYXRhb2JqZWN0X2NyZWF0ZWRhdGFvYmplY3R8c2RvX2RhdGFvYmplY3RfZ2V0Y29udGFpbmVyfHNkb19kYXRhb2JqZWN0X2dldHNlcXVlbmNlfHNkb19kYXRhb2JqZWN0X2dldHR5cGVuYW1lfFwKc2RvX2RhdGFvYmplY3RfZ2V0dHlwZW5hbWVzcGFjZXVyaXxzZG9fZXhjZXB0aW9uX2dldGNhdXNlfHNkb19saXN0X2luc2VydHxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0Y29udGFpbmluZ3R5cGV8XApzZG9fbW9kZWxfcHJvcGVydHlfZ2V0ZGVmYXVsdHxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0bmFtZXxzZG9fbW9kZWxfcHJvcGVydHlfZ2V0dHlwZXxzZG9fbW9kZWxfcHJvcGVydHlfaXNjb250YWlubWVudHxcCnNkb19tb2RlbF9wcm9wZXJ0eV9pc21hbnl8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2NvbnN0cnVjdHxzZG9fbW9kZWxfcmVmbGVjdGlvbmRhdGFvYmplY3RfZXhwb3J0fFwKc2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2dldGNvbnRhaW5tZW50cHJvcGVydHl8c2RvX21vZGVsX3JlZmxlY3Rpb25kYXRhb2JqZWN0X2dldGluc3RhbmNlcHJvcGVydGllc3xcCnNkb19tb2RlbF9yZWZsZWN0aW9uZGF0YW9iamVjdF9nZXR0eXBlfHNkb19tb2RlbF90eXBlX2dldGJhc2V0eXBlfHNkb19tb2RlbF90eXBlX2dldG5hbWV8c2RvX21vZGVsX3R5cGVfZ2V0bmFtZXNwYWNldXJpfFwKc2RvX21vZGVsX3R5cGVfZ2V0cHJvcGVydGllc3xzZG9fbW9kZWxfdHlwZV9nZXRwcm9wZXJ0eXxzZG9fbW9kZWxfdHlwZV9pc2Fic3RyYWN0dHlwZXxzZG9fbW9kZWxfdHlwZV9pc2RhdGF0eXBlfHNkb19tb2RlbF90eXBlX2lzaW5zdGFuY2V8XApzZG9fbW9kZWxfdHlwZV9pc29wZW50eXBlfHNkb19tb2RlbF90eXBlX2lzc2VxdWVuY2VkdHlwZXxzZG9fc2VxdWVuY2VfZ2V0cHJvcGVydHl8c2RvX3NlcXVlbmNlX2luc2VydHxzZG9fc2VxdWVuY2VfbW92ZXxzZWVrYWJsZWl0ZXJhdG9yfFwKc2VtX2FjcXVpcmV8c2VtX2dldHxzZW1fcmVsZWFzZXxzZW1fcmVtb3ZlfHNlcmlhbGl6YWJsZXxzZXJpYWxpemV8c2Vzc2lvbl9jYWNoZV9leHBpcmV8c2Vzc2lvbl9jYWNoZV9saW1pdGVyfHNlc3Npb25fY29tbWl0fFwKc2Vzc2lvbl9kZWNvZGV8c2Vzc2lvbl9kZXN0cm95fHNlc3Npb25fZW5jb2RlfHNlc3Npb25fZ2V0X2Nvb2tpZV9wYXJhbXN8c2Vzc2lvbl9pZHxzZXNzaW9uX2lzX3JlZ2lzdGVyZWR8c2Vzc2lvbl9tb2R1bGVfbmFtZXxzZXNzaW9uX25hbWV8XApzZXNzaW9uX3Bnc3FsX2FkZF9lcnJvcnxzZXNzaW9uX3Bnc3FsX2dldF9lcnJvcnxzZXNzaW9uX3Bnc3FsX2dldF9maWVsZHxzZXNzaW9uX3Bnc3FsX3Jlc2V0fHNlc3Npb25fcGdzcWxfc2V0X2ZpZWxkfHNlc3Npb25fcGdzcWxfc3RhdHVzfFwKc2Vzc2lvbl9yZWdlbmVyYXRlX2lkfHNlc3Npb25fcmVnaXN0ZXJ8c2Vzc2lvbl9zYXZlX3BhdGh8c2Vzc2lvbl9zZXRfY29va2llX3BhcmFtc3xzZXNzaW9uX3NldF9zYXZlX2hhbmRsZXJ8c2Vzc2lvbl9zdGFydHxcCnNlc3Npb25fdW5yZWdpc3RlcnxzZXNzaW9uX3Vuc2V0fHNlc3Npb25fd3JpdGVfY2xvc2V8c2V0Q291bnRlckNsYXNzfHNldF9lcnJvcl9oYW5kbGVyfHNldF9leGNlcHRpb25faGFuZGxlcnxzZXRfZmlsZV9idWZmZXJ8XApzZXRfaW5jbHVkZV9wYXRofHNldF9tYWdpY19xdW90ZXNfcnVudGltZXxzZXRfc29ja2V0X2Jsb2NraW5nfHNldF90aW1lX2xpbWl0fHNldGNvb2tpZXxzZXRsb2NhbGV8c2V0cHJvY3RpdGxlfHNldHJhd2Nvb2tpZXxcCnNldHN0YXRpY3Byb3BlcnR5dmFsdWV8c2V0dGhyZWFkdGl0bGV8c2V0dHlwZXxzaGExfHNoYTFfZmlsZXxzaGVsbF9leGVjfHNobV9hdHRhY2h8c2htX2RldGFjaHxzaG1fZ2V0X3ZhcnxzaG1faGFzX3ZhcnxzaG1fcHV0X3ZhcnxcCnNobV9yZW1vdmV8c2htX3JlbW92ZV92YXJ8c2htb3BfY2xvc2V8c2htb3BfZGVsZXRlfHNobW9wX29wZW58c2htb3BfcmVhZHxzaG1vcF9zaXplfHNobW9wX3dyaXRlfHNob3dfc291cmNlfHNodWZmbGV8c2lnbmV1cmxwYWllbWVudHxcCnNpbWlsYXJfdGV4dHxzaW1wbGV4bWxfaW1wb3J0X2RvbXxzaW1wbGV4bWxfbG9hZF9maWxlfHNpbXBsZXhtbF9sb2FkX3N0cmluZ3xzaW1wbGV4bWxlbGVtZW50fHNpbXBsZXhtbGl0ZXJhdG9yfHNpbnxzaW5ofHNpemVvZnxzbGVlcHxzbm1wfFwKc25tcDJfZ2V0fHNubXAyX2dldG5leHR8c25tcDJfcmVhbF93YWxrfHNubXAyX3NldHxzbm1wMl93YWxrfHNubXAzX2dldHxzbm1wM19nZXRuZXh0fHNubXAzX3JlYWxfd2Fsa3xzbm1wM19zZXR8c25tcDNfd2Fsa3xcCnNubXBfZ2V0X3F1aWNrX3ByaW50fHNubXBfZ2V0X3ZhbHVlcmV0cmlldmFsfHNubXBfcmVhZF9taWJ8c25tcF9zZXRfZW51bV9wcmludHxzbm1wX3NldF9vaWRfbnVtZXJpY19wcmludHxzbm1wX3NldF9vaWRfb3V0cHV0X2Zvcm1hdHxcCnNubXBfc2V0X3F1aWNrX3ByaW50fHNubXBfc2V0X3ZhbHVlcmV0cmlldmFsfHNubXBnZXR8c25tcGdldG5leHR8c25tcHJlYWx3YWxrfHNubXBzZXR8c25tcHdhbGt8c25tcHdhbGtvaWR8c29hcGNsaWVudHxzb2FwZmF1bHR8XApzb2FwaGVhZGVyfHNvYXBwYXJhbXxzb2Fwc2VydmVyfHNvYXB2YXJ8c29ja2V0X2FjY2VwdHxzb2NrZXRfYmluZHxzb2NrZXRfY2xlYXJfZXJyb3J8c29ja2V0X2Nsb3NlfHNvY2tldF9jb25uZWN0fHNvY2tldF9jcmVhdGV8XApzb2NrZXRfY3JlYXRlX2xpc3Rlbnxzb2NrZXRfY3JlYXRlX3BhaXJ8c29ja2V0X2dldF9vcHRpb258c29ja2V0X2dldF9zdGF0dXN8c29ja2V0X2dldHBlZXJuYW1lfHNvY2tldF9nZXRzb2NrbmFtZXxzb2NrZXRfbGFzdF9lcnJvcnxcCnNvY2tldF9saXN0ZW58c29ja2V0X3JlYWR8c29ja2V0X3JlY3Z8c29ja2V0X3JlY3Zmcm9tfHNvY2tldF9zZWxlY3R8c29ja2V0X3NlbmR8c29ja2V0X3NlbmR0b3xzb2NrZXRfc2V0X2Jsb2NrfHNvY2tldF9zZXRfYmxvY2tpbmd8XApzb2NrZXRfc2V0X25vbmJsb2NrfHNvY2tldF9zZXRfb3B0aW9ufHNvY2tldF9zZXRfdGltZW91dHxzb2NrZXRfc2h1dGRvd258c29ja2V0X3N0cmVycm9yfHNvY2tldF93cml0ZXxzb2xyX2dldF92ZXJzaW9ufHNvbHJjbGllbnR8XApzb2xyY2xpZW50ZXhjZXB0aW9ufHNvbHJkb2N1bWVudHxzb2xyZG9jdW1lbnRmaWVsZHxzb2xyZXhjZXB0aW9ufHNvbHJnZW5lcmljcmVzcG9uc2V8c29scmlsbGVnYWxhcmd1bWVudGV4Y2VwdGlvbnxcCnNvbHJpbGxlZ2Fsb3BlcmF0aW9uZXhjZXB0aW9ufHNvbHJpbnB1dGRvY3VtZW50fHNvbHJtb2RpZmlhYmxlcGFyYW1zfHNvbHJvYmplY3R8c29scnBhcmFtc3xzb2xycGluZ3Jlc3BvbnNlfHNvbHJxdWVyeXxzb2xycXVlcnlyZXNwb25zZXxcCnNvbHJyZXNwb25zZXxzb2xydXBkYXRlcmVzcG9uc2V8c29scnV0aWxzfHNvcnR8c291bmRleHxzcGhpbnhjbGllbnR8c3BsX2F1dG9sb2FkfHNwbF9hdXRvbG9hZF9jYWxsfHNwbF9hdXRvbG9hZF9leHRlbnNpb25zfFwKc3BsX2F1dG9sb2FkX2Z1bmN0aW9uc3xzcGxfYXV0b2xvYWRfcmVnaXN0ZXJ8c3BsX2F1dG9sb2FkX3VucmVnaXN0ZXJ8c3BsX2NsYXNzZXN8c3BsX29iamVjdF9oYXNofHNwbGJvb2x8c3BsZG91Ymx5bGlua2VkbGlzdHxzcGxlbnVtfFwKc3BsZmlsZWluZm98c3BsZmlsZW9iamVjdHxzcGxmaXhlZGFycmF5fHNwbGZsb2F0fHNwbGhlYXB8c3BsaW50fHNwbGl0fHNwbGl0aXxzcGxtYXhoZWFwfHNwbG1pbmhlYXB8c3Bsb2JqZWN0c3RvcmFnZXxzcGxvYnNlcnZlcnxcCnNwbHByaW9yaXR5cXVldWV8c3BscXVldWV8c3Bsc3RhY2t8c3Bsc3RyaW5nfHNwbHN1YmplY3R8c3BsdGVtcGZpbGVvYmplY3R8c3Bvb2ZjaGVja2VyfHNwcmludGZ8c3FsX3JlZ2Nhc2V8c3FsaXRlM3xzcWxpdGUzcmVzdWx0fFwKc3FsaXRlM3N0bXR8c3FsaXRlX2FycmF5X3F1ZXJ5fHNxbGl0ZV9idXN5X3RpbWVvdXR8c3FsaXRlX2NoYW5nZXN8c3FsaXRlX2Nsb3NlfHNxbGl0ZV9jb2x1bW58c3FsaXRlX2NyZWF0ZV9hZ2dyZWdhdGV8XApzcWxpdGVfY3JlYXRlX2Z1bmN0aW9ufHNxbGl0ZV9jdXJyZW50fHNxbGl0ZV9lcnJvcl9zdHJpbmd8c3FsaXRlX2VzY2FwZV9zdHJpbmd8c3FsaXRlX2V4ZWN8c3FsaXRlX2ZhY3Rvcnl8c3FsaXRlX2ZldGNoX2FsbHxcCnNxbGl0ZV9mZXRjaF9hcnJheXxzcWxpdGVfZmV0Y2hfY29sdW1uX3R5cGVzfHNxbGl0ZV9mZXRjaF9vYmplY3R8c3FsaXRlX2ZldGNoX3NpbmdsZXxzcWxpdGVfZmV0Y2hfc3RyaW5nfHNxbGl0ZV9maWVsZF9uYW1lfFwKc3FsaXRlX2hhc19tb3JlfHNxbGl0ZV9oYXNfcHJldnxzcWxpdGVfa2V5fHNxbGl0ZV9sYXN0X2Vycm9yfHNxbGl0ZV9sYXN0X2luc2VydF9yb3dpZHxzcWxpdGVfbGliZW5jb2Rpbmd8c3FsaXRlX2xpYnZlcnNpb258c3FsaXRlX25leHR8XApzcWxpdGVfbnVtX2ZpZWxkc3xzcWxpdGVfbnVtX3Jvd3N8c3FsaXRlX29wZW58c3FsaXRlX3BvcGVufHNxbGl0ZV9wcmV2fHNxbGl0ZV9xdWVyeXxzcWxpdGVfcmV3aW5kfHNxbGl0ZV9zZWVrfHNxbGl0ZV9zaW5nbGVfcXVlcnl8XApzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnl8c3FsaXRlX3VkZl9lbmNvZGVfYmluYXJ5fHNxbGl0ZV91bmJ1ZmZlcmVkX3F1ZXJ5fHNxbGl0ZV92YWxpZHxzcXJ0fHNyYW5kfHNzY2FuZnxzc2RlZXBfZnV6enlfY29tcGFyZXxcCnNzZGVlcF9mdXp6eV9oYXNofHNzZGVlcF9mdXp6eV9oYXNoX2ZpbGVuYW1lfHNzaDJfYXV0aF9ob3N0YmFzZWRfZmlsZXxzc2gyX2F1dGhfbm9uZXxzc2gyX2F1dGhfcGFzc3dvcmR8c3NoMl9hdXRoX3B1YmtleV9maWxlfFwKc3NoMl9jb25uZWN0fHNzaDJfZXhlY3xzc2gyX2ZldGNoX3N0cmVhbXxzc2gyX2ZpbmdlcnByaW50fHNzaDJfbWV0aG9kc19uZWdvdGlhdGVkfHNzaDJfcHVibGlja2V5X2FkZHxzc2gyX3B1YmxpY2tleV9pbml0fFwKc3NoMl9wdWJsaWNrZXlfbGlzdHxzc2gyX3B1YmxpY2tleV9yZW1vdmV8c3NoMl9zY3BfcmVjdnxzc2gyX3NjcF9zZW5kfHNzaDJfc2Z0cHxzc2gyX3NmdHBfbHN0YXR8c3NoMl9zZnRwX21rZGlyfHNzaDJfc2Z0cF9yZWFkbGlua3xcCnNzaDJfc2Z0cF9yZWFscGF0aHxzc2gyX3NmdHBfcmVuYW1lfHNzaDJfc2Z0cF9ybWRpcnxzc2gyX3NmdHBfc3RhdHxzc2gyX3NmdHBfc3ltbGlua3xzc2gyX3NmdHBfdW5saW5rfHNzaDJfc2hlbGx8c3NoMl90dW5uZWx8c3RhdHxcCnN0YXRzX2Fic29sdXRlX2RldmlhdGlvbnxzdGF0c19jZGZfYmV0YXxzdGF0c19jZGZfYmlub21pYWx8c3RhdHNfY2RmX2NhdWNoeXxzdGF0c19jZGZfY2hpc3F1YXJlfHN0YXRzX2NkZl9leHBvbmVudGlhbHxzdGF0c19jZGZfZnxcCnN0YXRzX2NkZl9nYW1tYXxzdGF0c19jZGZfbGFwbGFjZXxzdGF0c19jZGZfbG9naXN0aWN8c3RhdHNfY2RmX25lZ2F0aXZlX2Jpbm9taWFsfHN0YXRzX2NkZl9ub25jZW50cmFsX2NoaXNxdWFyZXxzdGF0c19jZGZfbm9uY2VudHJhbF9mfFwKc3RhdHNfY2RmX3BvaXNzb258c3RhdHNfY2RmX3R8c3RhdHNfY2RmX3VuaWZvcm18c3RhdHNfY2RmX3dlaWJ1bGx8c3RhdHNfY292YXJpYW5jZXxzdGF0c19kZW5fdW5pZm9ybXxzdGF0c19kZW5zX2JldGF8c3RhdHNfZGVuc19jYXVjaHl8XApzdGF0c19kZW5zX2NoaXNxdWFyZXxzdGF0c19kZW5zX2V4cG9uZW50aWFsfHN0YXRzX2RlbnNfZnxzdGF0c19kZW5zX2dhbW1hfHN0YXRzX2RlbnNfbGFwbGFjZXxzdGF0c19kZW5zX2xvZ2lzdGljfFwKc3RhdHNfZGVuc19uZWdhdGl2ZV9iaW5vbWlhbHxzdGF0c19kZW5zX25vcm1hbHxzdGF0c19kZW5zX3BtZl9iaW5vbWlhbHxzdGF0c19kZW5zX3BtZl9oeXBlcmdlb21ldHJpY3xzdGF0c19kZW5zX3BtZl9wb2lzc29ufHN0YXRzX2RlbnNfdHxcCnN0YXRzX2RlbnNfd2VpYnVsbHxzdGF0c19oYXJtb25pY19tZWFufHN0YXRzX2t1cnRvc2lzfHN0YXRzX3JhbmRfZ2VuX2JldGF8c3RhdHNfcmFuZF9nZW5fY2hpc3F1YXJlfHN0YXRzX3JhbmRfZ2VuX2V4cG9uZW50aWFsfFwKc3RhdHNfcmFuZF9nZW5fZnxzdGF0c19yYW5kX2dlbl9mdW5pZm9ybXxzdGF0c19yYW5kX2dlbl9nYW1tYXxzdGF0c19yYW5kX2dlbl9pYmlub21pYWx8c3RhdHNfcmFuZF9nZW5faWJpbm9taWFsX25lZ2F0aXZlfFwKc3RhdHNfcmFuZF9nZW5faW50fHN0YXRzX3JhbmRfZ2VuX2lwb2lzc29ufHN0YXRzX3JhbmRfZ2VuX2l1bmlmb3JtfHN0YXRzX3JhbmRfZ2VuX25vbmNlbnJhbF9jaGlzcXVhcmV8c3RhdHNfcmFuZF9nZW5fbm9uY2VudHJhbF9mfFwKc3RhdHNfcmFuZF9nZW5fbm9uY2VudHJhbF90fHN0YXRzX3JhbmRfZ2VuX25vcm1hbHxzdGF0c19yYW5kX2dlbl90fHN0YXRzX3JhbmRfZ2V0X3NlZWRzfHN0YXRzX3JhbmRfcGhyYXNlX3RvX3NlZWRzfHN0YXRzX3JhbmRfcmFuZnxcCnN0YXRzX3JhbmRfc2V0YWxsfHN0YXRzX3NrZXd8c3RhdHNfc3RhbmRhcmRfZGV2aWF0aW9ufHN0YXRzX3N0YXRfYmlub21pYWxfY29lZnxzdGF0c19zdGF0X2NvcnJlbGF0aW9ufHN0YXRzX3N0YXRfZ2VubmNofFwKc3RhdHNfc3RhdF9pbmRlcGVuZGVudF90fHN0YXRzX3N0YXRfaW5uZXJwcm9kdWN0fHN0YXRzX3N0YXRfbm9uY2VudHJhbF90fHN0YXRzX3N0YXRfcGFpcmVkX3R8c3RhdHNfc3RhdF9wZXJjZW50aWxlfHN0YXRzX3N0YXRfcG93ZXJzdW18XApzdGF0c192YXJpYW5jZXxzdG9tcHxzdG9tcF9jb25uZWN0X2Vycm9yfHN0b21wX3ZlcnNpb258c3RvbXBleGNlcHRpb258c3RvbXBmcmFtZXxzdHJfZ2V0Y3N2fHN0cl9pcmVwbGFjZXxzdHJfcGFkfHN0cl9yZXBlYXR8c3RyX3JlcGxhY2V8XApzdHJfcm90MTN8c3RyX3NodWZmbGV8c3RyX3NwbGl0fHN0cl93b3JkX2NvdW50fHN0cmNhc2VjbXB8c3RyY2hyfHN0cmNtcHxzdHJjb2xsfHN0cmNzcG58c3RyZWFtX2J1Y2tldF9hcHBlbmR8c3RyZWFtX2J1Y2tldF9tYWtlX3dyaXRlYWJsZXxcCnN0cmVhbV9idWNrZXRfbmV3fHN0cmVhbV9idWNrZXRfcHJlcGVuZHxzdHJlYW1fY29udGV4dF9jcmVhdGV8c3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHR8c3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnN8XApzdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zfHN0cmVhbV9jb250ZXh0X3NldF9kZWZhdWx0fHN0cmVhbV9jb250ZXh0X3NldF9vcHRpb258c3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtc3xzdHJlYW1fY29weV90b19zdHJlYW18XApzdHJlYW1fZW5jb2Rpbmd8c3RyZWFtX2ZpbHRlcl9hcHBlbmR8c3RyZWFtX2ZpbHRlcl9wcmVwZW5kfHN0cmVhbV9maWx0ZXJfcmVnaXN0ZXJ8c3RyZWFtX2ZpbHRlcl9yZW1vdmV8c3RyZWFtX2dldF9jb250ZW50c3xcCnN0cmVhbV9nZXRfZmlsdGVyc3xzdHJlYW1fZ2V0X2xpbmV8c3RyZWFtX2dldF9tZXRhX2RhdGF8c3RyZWFtX2dldF90cmFuc3BvcnRzfHN0cmVhbV9nZXRfd3JhcHBlcnN8c3RyZWFtX2lzX2xvY2FsfFwKc3RyZWFtX25vdGlmaWNhdGlvbl9jYWxsYmFja3xzdHJlYW1fcmVnaXN0ZXJfd3JhcHBlcnxzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGh8c3RyZWFtX3NlbGVjdHxzdHJlYW1fc2V0X2Jsb2NraW5nfHN0cmVhbV9zZXRfcmVhZF9idWZmZXJ8XApzdHJlYW1fc2V0X3RpbWVvdXR8c3RyZWFtX3NldF93cml0ZV9idWZmZXJ8c3RyZWFtX3NvY2tldF9hY2NlcHR8c3RyZWFtX3NvY2tldF9jbGllbnR8c3RyZWFtX3NvY2tldF9lbmFibGVfY3J5cHRvfHN0cmVhbV9zb2NrZXRfZ2V0X25hbWV8XApzdHJlYW1fc29ja2V0X3BhaXJ8c3RyZWFtX3NvY2tldF9yZWN2ZnJvbXxzdHJlYW1fc29ja2V0X3NlbmR0b3xzdHJlYW1fc29ja2V0X3NlcnZlcnxzdHJlYW1fc29ja2V0X3NodXRkb3dufHN0cmVhbV9zdXBwb3J0c19sb2NrfFwKc3RyZWFtX3dyYXBwZXJfcmVnaXN0ZXJ8c3RyZWFtX3dyYXBwZXJfcmVzdG9yZXxzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyfHN0cmVhbXdyYXBwZXJ8c3RyZnRpbWV8c3RyaXBfdGFnc3xzdHJpcGNzbGFzaGVzfHN0cmlwb3N8XApzdHJpcHNsYXNoZXN8c3RyaXN0cnxzdHJsZW58c3RybmF0Y2FzZWNtcHxzdHJuYXRjbXB8c3RybmNhc2VjbXB8c3RybmNtcHxzdHJwYnJrfHN0cnBvc3xzdHJwdGltZXxzdHJyY2hyfHN0cnJldnxzdHJyaXBvc3xzdHJycG9zfHN0cnNwbnxcCnN0cnN0cnxzdHJ0b2t8c3RydG9sb3dlcnxzdHJ0b3RpbWV8c3RydG91cHBlcnxzdHJ0cnxzdHJ2YWx8c3Vic3RyfHN1YnN0cl9jb21wYXJlfHN1YnN0cl9jb3VudHxzdWJzdHJfcmVwbGFjZXxzdm18c3ZtbW9kZWx8c3ZuX2FkZHxcCnN2bl9hdXRoX2dldF9wYXJhbWV0ZXJ8c3ZuX2F1dGhfc2V0X3BhcmFtZXRlcnxzdm5fYmxhbWV8c3ZuX2NhdHxzdm5fY2hlY2tvdXR8c3ZuX2NsZWFudXB8c3ZuX2NsaWVudF92ZXJzaW9ufHN2bl9jb21taXR8c3ZuX2RlbGV0ZXxcCnN2bl9kaWZmfHN2bl9leHBvcnR8c3ZuX2ZzX2Fib3J0X3R4bnxzdm5fZnNfYXBwbHlfdGV4dHxzdm5fZnNfYmVnaW5fdHhuMnxzdm5fZnNfY2hhbmdlX25vZGVfcHJvcHxzdm5fZnNfY2hlY2tfcGF0aHxcCnN2bl9mc19jb250ZW50c19jaGFuZ2VkfHN2bl9mc19jb3B5fHN2bl9mc19kZWxldGV8c3ZuX2ZzX2Rpcl9lbnRyaWVzfHN2bl9mc19maWxlX2NvbnRlbnRzfHN2bl9mc19maWxlX2xlbmd0aHxzdm5fZnNfaXNfZGlyfHN2bl9mc19pc19maWxlfFwKc3ZuX2ZzX21ha2VfZGlyfHN2bl9mc19tYWtlX2ZpbGV8c3ZuX2ZzX25vZGVfY3JlYXRlZF9yZXZ8c3ZuX2ZzX25vZGVfcHJvcHxzdm5fZnNfcHJvcHNfY2hhbmdlZHxzdm5fZnNfcmV2aXNpb25fcHJvcHxzdm5fZnNfcmV2aXNpb25fcm9vdHxcCnN2bl9mc190eG5fcm9vdHxzdm5fZnNfeW91bmdlc3RfcmV2fHN2bl9pbXBvcnR8c3ZuX2xvZ3xzdm5fbHN8c3ZuX21rZGlyfHN2bl9yZXBvc19jcmVhdGV8c3ZuX3JlcG9zX2ZzfHN2bl9yZXBvc19mc19iZWdpbl90eG5fZm9yX2NvbW1pdHxcCnN2bl9yZXBvc19mc19jb21taXRfdHhufHN2bl9yZXBvc19ob3Rjb3B5fHN2bl9yZXBvc19vcGVufHN2bl9yZXBvc19yZWNvdmVyfHN2bl9yZXZlcnR8c3ZuX3N0YXR1c3xzdm5fdXBkYXRlfHN3Zl9hY3Rpb25nZXR1cmx8XApzd2ZfYWN0aW9uZ290b2ZyYW1lfHN3Zl9hY3Rpb25nb3RvbGFiZWx8c3dmX2FjdGlvbm5leHRmcmFtZXxzd2ZfYWN0aW9ucGxheXxzd2ZfYWN0aW9ucHJldmZyYW1lfHN3Zl9hY3Rpb25zZXR0YXJnZXR8c3dmX2FjdGlvbnN0b3B8XApzd2ZfYWN0aW9udG9nZ2xlcXVhbGl0eXxzd2ZfYWN0aW9ud2FpdGZvcmZyYW1lfHN3Zl9hZGRidXR0b25yZWNvcmR8c3dmX2FkZGNvbG9yfHN3Zl9jbG9zZWZpbGV8c3dmX2RlZmluZWJpdG1hcHxzd2ZfZGVmaW5lZm9udHxcCnN3Zl9kZWZpbmVsaW5lfHN3Zl9kZWZpbmVwb2x5fHN3Zl9kZWZpbmVyZWN0fHN3Zl9kZWZpbmV0ZXh0fHN3Zl9lbmRidXR0b258c3dmX2VuZGRvYWN0aW9ufHN3Zl9lbmRzaGFwZXxzd2ZfZW5kc3ltYm9sfHN3Zl9mb250c2l6ZXxcCnN3Zl9mb250c2xhbnR8c3dmX2ZvbnR0cmFja2luZ3xzd2ZfZ2V0Yml0bWFwaW5mb3xzd2ZfZ2V0Zm9udGluZm98c3dmX2dldGZyYW1lfHN3Zl9sYWJlbGZyYW1lfHN3Zl9sb29rYXR8c3dmX21vZGlmeW9iamVjdHxzd2ZfbXVsY29sb3J8XApzd2ZfbmV4dGlkfHN3Zl9vbmNvbmRpdGlvbnxzd2Zfb3BlbmZpbGV8c3dmX29ydGhvfHN3Zl9vcnRobzJ8c3dmX3BlcnNwZWN0aXZlfHN3Zl9wbGFjZW9iamVjdHxzd2ZfcG9sYXJ2aWV3fHN3Zl9wb3BtYXRyaXh8c3dmX3Bvc3JvdW5kfFwKc3dmX3B1c2htYXRyaXh8c3dmX3JlbW92ZW9iamVjdHxzd2Zfcm90YXRlfHN3Zl9zY2FsZXxzd2Zfc2V0Zm9udHxzd2Zfc2V0ZnJhbWV8c3dmX3NoYXBlYXJjfHN3Zl9zaGFwZWN1cnZldG98c3dmX3NoYXBlY3VydmV0bzN8XApzd2Zfc2hhcGVmaWxsYml0bWFwY2xpcHxzd2Zfc2hhcGVmaWxsYml0bWFwdGlsZXxzd2Zfc2hhcGVmaWxsb2ZmfHN3Zl9zaGFwZWZpbGxzb2xpZHxzd2Zfc2hhcGVsaW5lc29saWR8c3dmX3NoYXBlbGluZXRvfHN3Zl9zaGFwZW1vdmV0b3xcCnN3Zl9zaG93ZnJhbWV8c3dmX3N0YXJ0YnV0dG9ufHN3Zl9zdGFydGRvYWN0aW9ufHN3Zl9zdGFydHNoYXBlfHN3Zl9zdGFydHN5bWJvbHxzd2ZfdGV4dHdpZHRofHN3Zl90cmFuc2xhdGV8c3dmX3ZpZXdwb3J0fHN3ZmFjdGlvbnxcCnN3ZmJpdG1hcHxzd2ZidXR0b258c3dmZGlzcGxheWl0ZW18c3dmZmlsbHxzd2Zmb250fHN3ZmZvbnRjaGFyfHN3ZmdyYWRpZW50fHN3Zm1vcnBofHN3Zm1vdmllfHN3ZnByZWJ1aWx0Y2xpcHxzd2ZzaGFwZXxzd2Zzb3VuZHxcCnN3ZnNvdW5kaW5zdGFuY2V8c3dmc3ByaXRlfHN3ZnRleHR8c3dmdGV4dGZpZWxkfHN3ZnZpZGVvc3RyZWFtfHN3aXNoX2NvbnN0cnVjdHxzd2lzaF9nZXRtZXRhbGlzdHxzd2lzaF9nZXRwcm9wZXJ0eWxpc3R8c3dpc2hfcHJlcGFyZXxcCnN3aXNoX3F1ZXJ5fHN3aXNocmVzdWx0X2dldG1ldGFsaXN0fHN3aXNocmVzdWx0X3N0ZW18c3dpc2hyZXN1bHRzX2dldHBhcnNlZHdvcmRzfHN3aXNocmVzdWx0c19nZXRyZW1vdmVkc3RvcHdvcmRzfHN3aXNocmVzdWx0c19uZXh0cmVzdWx0fFwKc3dpc2hyZXN1bHRzX3NlZWtyZXN1bHR8c3dpc2hzZWFyY2hfZXhlY3V0ZXxzd2lzaHNlYXJjaF9yZXNldGxpbWl0fHN3aXNoc2VhcmNoX3NldGxpbWl0fHN3aXNoc2VhcmNoX3NldHBocmFzZWRlbGltaXRlcnxcCnN3aXNoc2VhcmNoX3NldHNvcnR8c3dpc2hzZWFyY2hfc2V0c3RydWN0dXJlfHN5YmFzZV9hZmZlY3RlZF9yb3dzfHN5YmFzZV9jbG9zZXxzeWJhc2VfY29ubmVjdHxzeWJhc2VfZGF0YV9zZWVrfFwKc3liYXNlX2RlYWRsb2NrX3JldHJ5X2NvdW50fHN5YmFzZV9mZXRjaF9hcnJheXxzeWJhc2VfZmV0Y2hfYXNzb2N8c3liYXNlX2ZldGNoX2ZpZWxkfHN5YmFzZV9mZXRjaF9vYmplY3R8c3liYXNlX2ZldGNoX3Jvd3xcCnN5YmFzZV9maWVsZF9zZWVrfHN5YmFzZV9mcmVlX3Jlc3VsdHxzeWJhc2VfZ2V0X2xhc3RfbWVzc2FnZXxzeWJhc2VfbWluX2NsaWVudF9zZXZlcml0eXxzeWJhc2VfbWluX2Vycm9yX3NldmVyaXR5fFwKc3liYXNlX21pbl9tZXNzYWdlX3NldmVyaXR5fHN5YmFzZV9taW5fc2VydmVyX3NldmVyaXR5fHN5YmFzZV9udW1fZmllbGRzfHN5YmFzZV9udW1fcm93c3xzeWJhc2VfcGNvbm5lY3R8c3liYXNlX3F1ZXJ5fHN5YmFzZV9yZXN1bHR8XApzeWJhc2Vfc2VsZWN0X2RifHN5YmFzZV9zZXRfbWVzc2FnZV9oYW5kbGVyfHN5YmFzZV91bmJ1ZmZlcmVkX3F1ZXJ5fHN5bWxpbmt8c3lzX2dldF90ZW1wX2RpcnxzeXNfZ2V0bG9hZGF2Z3xzeXNsb2d8c3lzdGVtfHRhZ3x0YW58dGFuaHxcCnRjcHdyYXBfY2hlY2t8dGVtcG5hbXx0ZXh0ZG9tYWlufHRpZHl8dGlkeV9hY2Nlc3NfY291bnR8dGlkeV9jb25maWdfY291bnR8dGlkeV9kaWFnbm9zZXx0aWR5X2Vycm9yX2NvdW50fHRpZHlfZ2V0X2Vycm9yX2J1ZmZlcnxcCnRpZHlfZ2V0X291dHB1dHx0aWR5X2xvYWRfY29uZmlnfHRpZHlfcmVzZXRfY29uZmlnfHRpZHlfc2F2ZV9jb25maWd8dGlkeV9zZXRfZW5jb2Rpbmd8dGlkeV9zZXRvcHR8dGlkeV93YXJuaW5nX2NvdW50fHRpZHlub2RlfHRpbWV8XAp0aW1lX25hbm9zbGVlcHx0aW1lX3NsZWVwX3VudGlsfHRpbWV6b25lX2FiYnJldmlhdGlvbnNfbGlzdHx0aW1lem9uZV9pZGVudGlmaWVyc19saXN0fHRpbWV6b25lX2xvY2F0aW9uX2dldHx0aW1lem9uZV9uYW1lX2Zyb21fYWJicnxcCnRpbWV6b25lX25hbWVfZ2V0fHRpbWV6b25lX29mZnNldF9nZXR8dGltZXpvbmVfb3Blbnx0aW1lem9uZV90cmFuc2l0aW9uc19nZXR8dGltZXpvbmVfdmVyc2lvbl9nZXR8dG1wZmlsZXx0b2tlbl9nZXRfYWxsfHRva2VuX25hbWV8XAp0b2t5b3R5cmFudHx0b2t5b3R5cmFudHF1ZXJ5fHRva3lvdHlyYW50dGFibGV8dG9zdHJpbmd8dG9zdHJpbmd8dG91Y2h8dHJhaXRfZXhpc3RzfHRyYW5zbGl0ZXJhdG9yfHRyYXZlcnNhYmxlfHRyaWdnZXJfZXJyb3J8dHJpbXx1YXNvcnR8dWNmaXJzdHxcCnVjd29yZHN8dWRtX2FkZF9zZWFyY2hfbGltaXR8dWRtX2FsbG9jX2FnZW50fHVkbV9hbGxvY19hZ2VudF9hcnJheXx1ZG1fYXBpX3ZlcnNpb258dWRtX2NhdF9saXN0fHVkbV9jYXRfcGF0aHx1ZG1fY2hlY2tfY2hhcnNldHxcCnVkbV9jaGVja19zdG9yZWR8dWRtX2NsZWFyX3NlYXJjaF9saW1pdHN8dWRtX2Nsb3NlX3N0b3JlZHx1ZG1fY3JjMzJ8dWRtX2Vycm5vfHVkbV9lcnJvcnx1ZG1fZmluZHx1ZG1fZnJlZV9hZ2VudHx1ZG1fZnJlZV9pc3BlbGxfZGF0YXxcCnVkbV9mcmVlX3Jlc3x1ZG1fZ2V0X2RvY19jb3VudHx1ZG1fZ2V0X3Jlc19maWVsZHx1ZG1fZ2V0X3Jlc19wYXJhbXx1ZG1faGFzaDMyfHVkbV9sb2FkX2lzcGVsbF9kYXRhfHVkbV9vcGVuX3N0b3JlZHx1ZG1fc2V0X2FnZW50X3BhcmFtfFwKdWtzb3J0fHVtYXNrfHVuZGVyZmxvd2V4Y2VwdGlvbnx1bmV4cGVjdGVkdmFsdWVleGNlcHRpb258dW5pcWlkfHVuaXh0b2pkfHVubGlua3x1bnBhY2t8dW5yZWdpc3Rlcl90aWNrX2Z1bmN0aW9ufHVuc2VyaWFsaXplfHVuc2V0fFwKdXJsZGVjb2RlfHVybGVuY29kZXx1c2Vfc29hcF9lcnJvcl9oYW5kbGVyfHVzZXJfZXJyb3J8dXNsZWVwfHVzb3J0fHV0ZjhfZGVjb2RlfHV0ZjhfZW5jb2RlfHY4anN8djhqc2V4Y2VwdGlvbnx2YXJfZHVtcHx2YXJfZXhwb3J0fHZhcmlhbnR8XAp2YXJpYW50X2Fic3x2YXJpYW50X2FkZHx2YXJpYW50X2FuZHx2YXJpYW50X2Nhc3R8dmFyaWFudF9jYXR8dmFyaWFudF9jbXB8dmFyaWFudF9kYXRlX2Zyb21fdGltZXN0YW1wfHZhcmlhbnRfZGF0ZV90b190aW1lc3RhbXB8XAp2YXJpYW50X2Rpdnx2YXJpYW50X2Vxdnx2YXJpYW50X2ZpeHx2YXJpYW50X2dldF90eXBlfHZhcmlhbnRfaWRpdnx2YXJpYW50X2ltcHx2YXJpYW50X2ludHx2YXJpYW50X21vZHx2YXJpYW50X211bHx2YXJpYW50X25lZ3x2YXJpYW50X25vdHxcCnZhcmlhbnRfb3J8dmFyaWFudF9wb3d8dmFyaWFudF9yb3VuZHx2YXJpYW50X3NldHx2YXJpYW50X3NldF90eXBlfHZhcmlhbnRfc3VifHZhcmlhbnRfeG9yfHZlcnNpb25fY29tcGFyZXx2ZnByaW50Znx2aXJ0dWFsfFwKdnBvcG1haWxfYWRkX2FsaWFzX2RvbWFpbnx2cG9wbWFpbF9hZGRfYWxpYXNfZG9tYWluX2V4fHZwb3BtYWlsX2FkZF9kb21haW58dnBvcG1haWxfYWRkX2RvbWFpbl9leHx2cG9wbWFpbF9hZGRfdXNlcnx2cG9wbWFpbF9hbGlhc19hZGR8XAp2cG9wbWFpbF9hbGlhc19kZWx8dnBvcG1haWxfYWxpYXNfZGVsX2RvbWFpbnx2cG9wbWFpbF9hbGlhc19nZXR8dnBvcG1haWxfYWxpYXNfZ2V0X2FsbHx2cG9wbWFpbF9hdXRoX3VzZXJ8dnBvcG1haWxfZGVsX2RvbWFpbnxcCnZwb3BtYWlsX2RlbF9kb21haW5fZXh8dnBvcG1haWxfZGVsX3VzZXJ8dnBvcG1haWxfZXJyb3J8dnBvcG1haWxfcGFzc3dkfHZwb3BtYWlsX3NldF91c2VyX3F1b3RhfHZwcmludGZ8dnNwcmludGZ8dzMyYXBpX2RlZnR5cGV8XAp3MzJhcGlfaW5pdF9kdHlwZXx3MzJhcGlfaW52b2tlX2Z1bmN0aW9ufHczMmFwaV9yZWdpc3Rlcl9mdW5jdGlvbnx3MzJhcGlfc2V0X2NhbGxfbWV0aG9kfHdkZHhfYWRkX3ZhcnN8d2RkeF9kZXNlcmlhbGl6ZXx3ZGR4X3BhY2tldF9lbmR8XAp3ZGR4X3BhY2tldF9zdGFydHx3ZGR4X3NlcmlhbGl6ZV92YWx1ZXx3ZGR4X3NlcmlhbGl6ZV92YXJzfHdpbjMyX2NvbnRpbnVlX3NlcnZpY2V8d2luMzJfY3JlYXRlX3NlcnZpY2V8d2luMzJfZGVsZXRlX3NlcnZpY2V8XAp3aW4zMl9nZXRfbGFzdF9jb250cm9sX21lc3NhZ2V8d2luMzJfcGF1c2Vfc2VydmljZXx3aW4zMl9wc19saXN0X3Byb2NzfHdpbjMyX3BzX3N0YXRfbWVtfHdpbjMyX3BzX3N0YXRfcHJvY3x3aW4zMl9xdWVyeV9zZXJ2aWNlX3N0YXR1c3xcCndpbjMyX3NldF9zZXJ2aWNlX3N0YXR1c3x3aW4zMl9zdGFydF9zZXJ2aWNlfHdpbjMyX3N0YXJ0X3NlcnZpY2VfY3RybF9kaXNwYXRjaGVyfHdpbjMyX3N0b3Bfc2VydmljZXx3aW5jYWNoZV9mY2FjaGVfZmlsZWluZm98XAp3aW5jYWNoZV9mY2FjaGVfbWVtaW5mb3x3aW5jYWNoZV9sb2NrfHdpbmNhY2hlX29jYWNoZV9maWxlaW5mb3x3aW5jYWNoZV9vY2FjaGVfbWVtaW5mb3x3aW5jYWNoZV9yZWZyZXNoX2lmX2NoYW5nZWR8XAp3aW5jYWNoZV9ycGxpc3RfZmlsZWluZm98d2luY2FjaGVfcnBsaXN0X21lbWluZm98d2luY2FjaGVfc2NhY2hlX2luZm98d2luY2FjaGVfc2NhY2hlX21lbWluZm98d2luY2FjaGVfdWNhY2hlX2FkZHx3aW5jYWNoZV91Y2FjaGVfY2FzfFwKd2luY2FjaGVfdWNhY2hlX2NsZWFyfHdpbmNhY2hlX3VjYWNoZV9kZWN8d2luY2FjaGVfdWNhY2hlX2RlbGV0ZXx3aW5jYWNoZV91Y2FjaGVfZXhpc3RzfHdpbmNhY2hlX3VjYWNoZV9nZXR8d2luY2FjaGVfdWNhY2hlX2luY3xcCndpbmNhY2hlX3VjYWNoZV9pbmZvfHdpbmNhY2hlX3VjYWNoZV9tZW1pbmZvfHdpbmNhY2hlX3VjYWNoZV9zZXR8d2luY2FjaGVfdW5sb2NrfHdvcmR3cmFwfHhhdHRyX2dldHx4YXR0cl9saXN0fHhhdHRyX3JlbW92ZXx4YXR0cl9zZXR8XAp4YXR0cl9zdXBwb3J0ZWR8eGRpZmZfZmlsZV9iZGlmZnx4ZGlmZl9maWxlX2JkaWZmX3NpemV8eGRpZmZfZmlsZV9icGF0Y2h8eGRpZmZfZmlsZV9kaWZmfHhkaWZmX2ZpbGVfZGlmZl9iaW5hcnl8eGRpZmZfZmlsZV9tZXJnZTN8XAp4ZGlmZl9maWxlX3BhdGNofHhkaWZmX2ZpbGVfcGF0Y2hfYmluYXJ5fHhkaWZmX2ZpbGVfcmFiZGlmZnx4ZGlmZl9zdHJpbmdfYmRpZmZ8eGRpZmZfc3RyaW5nX2JkaWZmX3NpemV8eGRpZmZfc3RyaW5nX2JwYXRjaHxcCnhkaWZmX3N0cmluZ19kaWZmfHhkaWZmX3N0cmluZ19kaWZmX2JpbmFyeXx4ZGlmZl9zdHJpbmdfbWVyZ2UzfHhkaWZmX3N0cmluZ19wYXRjaHx4ZGlmZl9zdHJpbmdfcGF0Y2hfYmluYXJ5fHhkaWZmX3N0cmluZ19yYWJkaWZmfFwKeGhwcm9mX2Rpc2FibGV8eGhwcm9mX2VuYWJsZXx4aHByb2Zfc2FtcGxlX2Rpc2FibGV8eGhwcm9mX3NhbXBsZV9lbmFibGV8eG1sX2Vycm9yX3N0cmluZ3x4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleHxcCnhtbF9nZXRfY3VycmVudF9jb2x1bW5fbnVtYmVyfHhtbF9nZXRfY3VycmVudF9saW5lX251bWJlcnx4bWxfZ2V0X2Vycm9yX2NvZGV8eG1sX3BhcnNlfHhtbF9wYXJzZV9pbnRvX3N0cnVjdHx4bWxfcGFyc2VyX2NyZWF0ZXxcCnhtbF9wYXJzZXJfY3JlYXRlX25zfHhtbF9wYXJzZXJfZnJlZXx4bWxfcGFyc2VyX2dldF9vcHRpb258eG1sX3BhcnNlcl9zZXRfb3B0aW9ufHhtbF9zZXRfY2hhcmFjdGVyX2RhdGFfaGFuZGxlcnx4bWxfc2V0X2RlZmF1bHRfaGFuZGxlcnxcCnhtbF9zZXRfZWxlbWVudF9oYW5kbGVyfHhtbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXJ8eG1sX3NldF9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXJ8eG1sX3NldF9ub3RhdGlvbl9kZWNsX2hhbmRsZXJ8XAp4bWxfc2V0X29iamVjdHx4bWxfc2V0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25faGFuZGxlcnx4bWxfc2V0X3N0YXJ0X25hbWVzcGFjZV9kZWNsX2hhbmRsZXJ8eG1sX3NldF91bnBhcnNlZF9lbnRpdHlfZGVjbF9oYW5kbGVyfHhtbHJlYWRlcnxcCnhtbHJwY19kZWNvZGV8eG1scnBjX2RlY29kZV9yZXF1ZXN0fHhtbHJwY19lbmNvZGV8eG1scnBjX2VuY29kZV9yZXF1ZXN0fHhtbHJwY19nZXRfdHlwZXx4bWxycGNfaXNfZmF1bHR8eG1scnBjX3BhcnNlX21ldGhvZF9kZXNjcmlwdGlvbnN8XAp4bWxycGNfc2VydmVyX2FkZF9pbnRyb3NwZWN0aW9uX2RhdGF8eG1scnBjX3NlcnZlcl9jYWxsX21ldGhvZHx4bWxycGNfc2VydmVyX2NyZWF0ZXx4bWxycGNfc2VydmVyX2Rlc3Ryb3l8XAp4bWxycGNfc2VydmVyX3JlZ2lzdGVyX2ludHJvc3BlY3Rpb25fY2FsbGJhY2t8eG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2R8eG1scnBjX3NldF90eXBlfHhtbHdyaXRlcl9lbmRfYXR0cmlidXRlfHhtbHdyaXRlcl9lbmRfY2RhdGF8XAp4bWx3cml0ZXJfZW5kX2NvbW1lbnR8eG1sd3JpdGVyX2VuZF9kb2N1bWVudHx4bWx3cml0ZXJfZW5kX2R0ZHx4bWx3cml0ZXJfZW5kX2R0ZF9hdHRsaXN0fHhtbHdyaXRlcl9lbmRfZHRkX2VsZW1lbnR8XAp4bWx3cml0ZXJfZW5kX2R0ZF9lbnRpdHl8eG1sd3JpdGVyX2VuZF9lbGVtZW50fHhtbHdyaXRlcl9lbmRfcGl8eG1sd3JpdGVyX2ZsdXNofHhtbHdyaXRlcl9mdWxsX2VuZF9lbGVtZW50fHhtbHdyaXRlcl9vcGVuX21lbW9yeXxcCnhtbHdyaXRlcl9vcGVuX3VyaXx4bWx3cml0ZXJfb3V0cHV0X21lbW9yeXx4bWx3cml0ZXJfc2V0X2luZGVudHx4bWx3cml0ZXJfc2V0X2luZGVudF9zdHJpbmd8eG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZXxcCnhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGVfbnN8eG1sd3JpdGVyX3N0YXJ0X2NkYXRhfHhtbHdyaXRlcl9zdGFydF9jb21tZW50fHhtbHdyaXRlcl9zdGFydF9kb2N1bWVudHx4bWx3cml0ZXJfc3RhcnRfZHRkfFwKeG1sd3JpdGVyX3N0YXJ0X2R0ZF9hdHRsaXN0fHhtbHdyaXRlcl9zdGFydF9kdGRfZWxlbWVudHx4bWx3cml0ZXJfc3RhcnRfZHRkX2VudGl0eXx4bWx3cml0ZXJfc3RhcnRfZWxlbWVudHx4bWx3cml0ZXJfc3RhcnRfZWxlbWVudF9uc3xcCnhtbHdyaXRlcl9zdGFydF9waXx4bWx3cml0ZXJfdGV4dHx4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlfHhtbHdyaXRlcl93cml0ZV9hdHRyaWJ1dGVfbnN8eG1sd3JpdGVyX3dyaXRlX2NkYXRhfHhtbHdyaXRlcl93cml0ZV9jb21tZW50fFwKeG1sd3JpdGVyX3dyaXRlX2R0ZHx4bWx3cml0ZXJfd3JpdGVfZHRkX2F0dGxpc3R8eG1sd3JpdGVyX3dyaXRlX2R0ZF9lbGVtZW50fHhtbHdyaXRlcl93cml0ZV9kdGRfZW50aXR5fHhtbHdyaXRlcl93cml0ZV9lbGVtZW50fFwKeG1sd3JpdGVyX3dyaXRlX2VsZW1lbnRfbnN8eG1sd3JpdGVyX3dyaXRlX3BpfHhtbHdyaXRlcl93cml0ZV9yYXd8eHBhdGhfZXZhbHx4cGF0aF9ldmFsX2V4cHJlc3Npb258eHBhdGhfbmV3X2NvbnRleHR8eHBhdGhfcmVnaXN0ZXJfbnN8XAp4cGF0aF9yZWdpc3Rlcl9uc19hdXRvfHhwdHJfZXZhbHx4cHRyX25ld19jb250ZXh0fHhzbHRfYmFja2VuZF9pbmZvfHhzbHRfYmFja2VuZF9uYW1lfHhzbHRfYmFja2VuZF92ZXJzaW9ufHhzbHRfY3JlYXRlfHhzbHRfZXJybm98XAp4c2x0X2Vycm9yfHhzbHRfZnJlZXx4c2x0X2dldG9wdHx4c2x0X3Byb2Nlc3N8eHNsdF9zZXRfYmFzZXx4c2x0X3NldF9lbmNvZGluZ3x4c2x0X3NldF9lcnJvcl9oYW5kbGVyfHhzbHRfc2V0X2xvZ3x4c2x0X3NldF9vYmplY3R8XAp4c2x0X3NldF9zYXhfaGFuZGxlcnx4c2x0X3NldF9zYXhfaGFuZGxlcnN8eHNsdF9zZXRfc2NoZW1lX2hhbmRsZXJ8eHNsdF9zZXRfc2NoZW1lX2hhbmRsZXJzfHhzbHRfc2V0b3B0fHhzbHRwcm9jZXNzb3J8eWFtbF9lbWl0fFwKeWFtbF9lbWl0X2ZpbGV8eWFtbF9wYXJzZXx5YW1sX3BhcnNlX2ZpbGV8eWFtbF9wYXJzZV91cmx8eWF6X2FkZGluZm98eWF6X2NjbF9jb25mfHlhel9jY2xfcGFyc2V8eWF6X2Nsb3NlfHlhel9jb25uZWN0fHlhel9kYXRhYmFzZXxcCnlhel9lbGVtZW50fHlhel9lcnJub3x5YXpfZXJyb3J8eWF6X2VzfHlhel9lc19yZXN1bHR8eWF6X2dldF9vcHRpb258eWF6X2hpdHN8eWF6X2l0ZW1vcmRlcnx5YXpfcHJlc2VudHx5YXpfcmFuZ2V8eWF6X3JlY29yZHx5YXpfc2NhbnxcCnlhel9zY2FuX3Jlc3VsdHx5YXpfc2NoZW1hfHlhel9zZWFyY2h8eWF6X3NldF9vcHRpb258eWF6X3NvcnR8eWF6X3N5bnRheHx5YXpfd2FpdHx5cF9hbGx8eXBfY2F0fHlwX2Vycl9zdHJpbmd8eXBfZXJybm98eXBfZmlyc3R8XAp5cF9nZXRfZGVmYXVsdF9kb21haW58eXBfbWFzdGVyfHlwX21hdGNofHlwX25leHR8eXBfb3JkZXJ8emVuZF9sb2dvX2d1aWR8emVuZF90aHJlYWRfaWR8emVuZF92ZXJzaW9ufHppcF9jbG9zZXx6aXBfZW50cnlfY2xvc2V8XAp6aXBfZW50cnlfY29tcHJlc3NlZHNpemV8emlwX2VudHJ5X2NvbXByZXNzaW9ubWV0aG9kfHppcF9lbnRyeV9maWxlc2l6ZXx6aXBfZW50cnlfbmFtZXx6aXBfZW50cnlfb3Blbnx6aXBfZW50cnlfcmVhZHx6aXBfb3Blbnx6aXBfcmVhZHxcCnppcGFyY2hpdmV8emlwYXJjaGl2ZV9hZGRlbXB0eWRpcnx6aXBhcmNoaXZlX2FkZGZpbGV8emlwYXJjaGl2ZV9hZGRmcm9tc3RyaW5nfHppcGFyY2hpdmVfY2xvc2V8emlwYXJjaGl2ZV9kZWxldGVpbmRleHxcCnppcGFyY2hpdmVfZGVsZXRlbmFtZXx6aXBhcmNoaXZlX2V4dHJhY3R0b3x6aXBhcmNoaXZlX2dldGFyY2hpdmVjb21tZW50fHppcGFyY2hpdmVfZ2V0Y29tbWVudGluZGV4fHppcGFyY2hpdmVfZ2V0Y29tbWVudG5hbWV8XAp6aXBhcmNoaXZlX2dldGZyb21pbmRleHx6aXBhcmNoaXZlX2dldGZyb21uYW1lfHppcGFyY2hpdmVfZ2V0bmFtZWluZGV4fHppcGFyY2hpdmVfZ2V0c3RhdHVzc3RyaW5nfHppcGFyY2hpdmVfZ2V0c3RyZWFtfFwKemlwYXJjaGl2ZV9sb2NhdGVuYW1lfHppcGFyY2hpdmVfb3Blbnx6aXBhcmNoaXZlX3JlbmFtZWluZGV4fHppcGFyY2hpdmVfcmVuYW1lbmFtZXx6aXBhcmNoaXZlX3NldENvbW1lbnROYW1lfHppcGFyY2hpdmVfc2V0YXJjaGl2ZWNvbW1lbnR8XAp6aXBhcmNoaXZlX3NldGNvbW1lbnRpbmRleHx6aXBhcmNoaXZlX3N0YXRpbmRleHx6aXBhcmNoaXZlX3N0YXRuYW1lfHppcGFyY2hpdmVfdW5jaGFuZ2VhbGx8emlwYXJjaGl2ZV91bmNoYW5nZWFyY2hpdmV8XAp6aXBhcmNoaXZlX3VuY2hhbmdlaW5kZXh8emlwYXJjaGl2ZV91bmNoYW5nZW5hbWV8emxpYl9nZXRfY29kaW5nX3R5cGUnLnNwbGl0KCd8JykKICAgICk7CiAgICB2YXIga2V5d29yZHMgPSBsYW5nLmFycmF5VG9NYXAoCidhYnN0cmFjdHxhbmR8YXJyYXl8YXN8YnJlYWt8Y2FsbGFibGV8Y2FzZXxjYXRjaHxjbGFzc3xjbG9uZXxjb25zdHxjb250aW51ZXxkZWNsYXJlfGRlZmF1bHR8ZG98ZWxzZXxlbHNlaWZ8ZW5kZGVjbGFyZXxlbmRmb3J8ZW5kZm9yZWFjaHxcCmVuZGlmfGVuZHN3aXRjaHxlbmR3aGlsZXxleHRlbmRzfGZpbmFsfGZpbmFsbHl8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258Z2xvYmFsfGdvdG98aWZ8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGluc3RlYWRvZnxpbnRlcmZhY2V8bmFtZXNwYWNlfG5ld3xvcnxwcml2YXRlfHByb3RlY3RlZHxcCnB1YmxpY3xzdGF0aWN8c3dpdGNofHRocm93fHRyYWl0fHRyeXx1c2V8dmFyfHdoaWxlfHhvcnx5aWVsZCcuc3BsaXQoJ3wnKQogICAgKTsKICAgIHZhciBsYW5ndWFnZUNvbnN0cnVjdHMgPSBsYW5nLmFycmF5VG9NYXAoCiAgICAgICAgKCdfX2hhbHRfY29tcGlsZXJ8ZGllfGVjaG98ZW1wdHl8ZXhpdHxldmFsfGluY2x1ZGV8aW5jbHVkZV9vbmNlfGlzc2V0fGxpc3R8cmVxdWlyZXxyZXF1aXJlX29uY2V8cmV0dXJufHByaW50fHVuc2V0Jykuc3BsaXQoJ3wnKQogICAgKTsKCiAgICB2YXIgYnVpbHRpbkNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAoJ3RydWV8VFJVRXxmYWxzZXxGQUxTRXxudWxsfE5VTEx8X19DTEFTU19ffF9fRElSX198X19GSUxFX198X19MSU5FX198X19NRVRIT0RfX3xfX0ZVTkNUSU9OX198X19OQU1FU1BBQ0VfX3xfX1RSQUlUX18nKS5zcGxpdCgnfCcpCiAgICApOwoKICAgIHZhciBidWlsdGluVmFyaWFibGVzID0gbGFuZy5hcnJheVRvTWFwKAonJEdMT0JBTFN8JF9TRVJWRVJ8JF9HRVR8JF9QT1NUfCRfRklMRVN8JF9SRVFVRVNUfCRfU0VTU0lPTnwkX0VOVnwkX0NPT0tJRXwkcGhwX2Vycm9ybXNnfCRIVFRQX1JBV19QT1NUX0RBVEF8XAokaHR0cF9yZXNwb25zZV9oZWFkZXJ8JGFyZ2N8JGFyZ3YnLnNwbGl0KCd8JykKICAgICk7CiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9uc0RlcHJlY2F0ZWQgPSBsYW5nLmFycmF5VG9NYXAoCidrZXlfZXhpc3RzfGNhaXJvX21hdHJpeF9jcmVhdGVfc2NhbGV8Y2Fpcm9fbWF0cml4X2NyZWF0ZV90cmFuc2xhdGV8Y2FsbF91c2VyX21ldGhvZHxjYWxsX3VzZXJfbWV0aG9kX2FycmF5fGNvbV9hZGRyZWZ8Y29tX2dldHxcCmNvbV9pbnZva2V8Y29tX2lzZW51bXxjb21fbG9hZHxjb21fcmVsZWFzZXxjb21fc2V0fGNvbm5lY3Rpb25fdGltZW91dHxjdWJyaWRfbG9hZF9mcm9tX2dsb3xjdWJyaWRfbmV3X2dsb3xjdWJyaWRfc2F2ZV90b19nbG98XApjdWJyaWRfc2VuZF9nbG98ZGVmaW5lX3N5c2xvZ192YXJpYWJsZXN8ZGx8ZXJlZ3xlcmVnX3JlcGxhY2V8ZXJlZ2l8ZXJlZ2lfcmVwbGFjZXxod19kb2N1bWVudGF0dHJpYnV0ZXN8aHdfZG9jdW1lbnRib2R5dGFnfFwKaHdfZG9jdW1lbnRzaXplfGh3X291dHB1dGRvY3VtZW50fGltYWdlZGFzaGVkbGluZXxtYXhkYl9iaW5kX3BhcmFtfG1heGRiX2JpbmRfcmVzdWx0fG1heGRiX2NsaWVudF9lbmNvZGluZ3xtYXhkYl9jbG9zZV9sb25nX2RhdGF8XAptYXhkYl9leGVjdXRlfG1heGRiX2ZldGNofG1heGRiX2dldF9tZXRhZGF0YXxtYXhkYl9wYXJhbV9jb3VudHxtYXhkYl9zZW5kX2xvbmdfZGF0YXxtY3J5cHRfZWNifG1jcnlwdF9nZW5lcmljX2VuZHxtaW1lX2NvbnRlbnRfdHlwZXxcCm15c3FsX2NyZWF0ZWRifG15c3FsX2RibmFtZXxteXNxbF9kYl9xdWVyeXxteXNxbF9kcm9wX2RifG15c3FsX2Ryb3BkYnxteXNxbF9lc2NhcGVfc3RyaW5nfG15c3FsX2ZpZWxkZmxhZ3N8bXlzcWxfZmllbGRmbGFnc3xcCm15c3FsX2ZpZWxkbmFtZXxteXNxbF9maWVsZHRhYmxlfG15c3FsX2ZpZWxkdHlwZXxteXNxbF9mcmVlcmVzdWx0fG15c3FsX2xpc3RkYnN8bXlzcWxfbGlzdF9maWVsZHN8bXlzcWxfbGlzdGZpZWxkc3xteXNxbF9saXN0X3RhYmxlc3xcCm15c3FsX2xpc3R0YWJsZXN8bXlzcWxfbnVtZmllbGRzfG15c3FsX251bXJvd3N8bXlzcWxfc2VsZWN0ZGJ8bXlzcWxfdGFibGVuYW1lfG15c3FsaV9iaW5kX3BhcmFtfG15c3FsaV9iaW5kX3Jlc3VsdHxcCm15c3FsaV9kaXNhYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9kaXNhYmxlX3JwbF9wYXJzZXxteXNxbGlfZW5hYmxlX3JlYWRzX2Zyb21fbWFzdGVyfG15c3FsaV9lbmFibGVfcnBsX3BhcnNlfG15c3FsaV9leGVjdXRlfFwKbXlzcWxpX2ZldGNofG15c3FsaV9nZXRfbWV0YWRhdGF8bXlzcWxpX21hc3Rlcl9xdWVyeXxteXNxbGlfcGFyYW1fY291bnR8bXlzcWxpX3JwbF9wYXJzZV9lbmFibGVkfG15c3FsaV9ycGxfcHJvYmV8bXlzcWxpX3JwbF9xdWVyeV90eXBlfFwKbXlzcWxpX3NlbmRfbG9uZ19kYXRhfG15c3FsaV9zZW5kX3F1ZXJ5fG15c3FsaV9zbGF2ZV9xdWVyeXxvY2liaW5kYnluYW1lfG9jaWNhbmNlbHxvY2ljbG9zZWxvYnxvY2ljb2xsYXBwZW5kfG9jaWNvbGxhc3NpZ258XApvY2ljb2xsYXNzaWduZWxlbXxvY2ljb2xsZ2V0ZWxlbXxvY2ljb2xsbWF4fG9jaWNvbGxzaXplfG9jaWNvbGx0cmltfG9jaWNvbHVtbmlzbnVsbHxvY2ljb2x1bW5uYW1lfG9jaWNvbHVtbnByZWNpc2lvbnxvY2ljb2x1bW5zY2FsZXxcCm9jaWNvbHVtbnNpemV8b2NpY29sdW1udHlwZXxvY2ljb2x1bW50eXBlcmF3fG9jaWNvbW1pdHxvY2lkZWZpbmVieW5hbWV8b2NpZXJyb3J8b2NpZXhlY3V0ZXxvY2lmZXRjaHxvY2lmZXRjaGludG98b2NpZmV0Y2hzdGF0ZW1lbnR8XApvY2lmcmVlY29sbGVjdGlvbnxvY2lmcmVlY3Vyc29yfG9jaWZyZWVkZXNjfG9jaWZyZWVzdGF0ZW1lbnR8b2NpaW50ZXJuYWxkZWJ1Z3xvY2lsb2FkbG9ifG9jaWxvZ29mZnxvY2lsb2dvbnxvY2luZXdjb2xsZWN0aW9ufFwKb2NpbmV3Y3Vyc29yfG9jaW5ld2Rlc2NyaXB0b3J8b2NpbmxvZ29ufG9jaW51bWNvbHN8b2NpcGFyc2V8b2NpcGxvZ29ufG9jaXJlc3VsdHxvY2lyb2xsYmFja3xvY2lyb3djb3VudHxvY2lzYXZlbG9ifG9jaXNhdmVsb2JmaWxlfFwKb2Npc2VydmVydmVyc2lvbnxvY2lzZXRwcmVmZXRjaHxvY2lzdGF0ZW1lbnR0eXBlfG9jaXdyaXRlbG9idG9maWxlfG9jaXdyaXRldGVtcG9yYXJ5bG9ifFBERl9hZGRfYW5ub3RhdGlvbnxQREZfYWRkX2Jvb2ttYXJrfFwKUERGX2FkZF9sYXVuY2hsaW5rfFBERl9hZGRfbG9jYWxsaW5rfFBERl9hZGRfbm90ZXxQREZfYWRkX291dGxpbmV8UERGX2FkZF9wZGZsaW5rfFBERl9hZGRfd2VibGlua3xQREZfYXR0YWNoX2ZpbGV8UERGX2JlZ2luX3BhZ2V8XApQREZfYmVnaW5fdGVtcGxhdGV8UERGX2Nsb3NlX3BkaXxQREZfY2xvc2V8UERGX2ZpbmRmb250fFBERl9nZXRfZm9udHxQREZfZ2V0X2ZvbnRuYW1lfFBERl9nZXRfZm9udHNpemV8UERGX2dldF9pbWFnZV9oZWlnaHR8XApQREZfZ2V0X2ltYWdlX3dpZHRofFBERl9nZXRfbWFqb3J2ZXJzaW9ufFBERl9nZXRfbWlub3J2ZXJzaW9ufFBERl9nZXRfcGRpX3BhcmFtZXRlcnxQREZfZ2V0X3BkaV92YWx1ZXxQREZfb3Blbl9jY2l0dHxQREZfb3Blbl9maWxlfFwKUERGX29wZW5fZ2lmfFBERl9vcGVuX2ltYWdlX2ZpbGV8UERGX29wZW5faW1hZ2V8UERGX29wZW5fanBlZ3xQREZfb3Blbl9wZGl8UERGX29wZW5fdGlmZnxQREZfcGxhY2VfaW1hZ2V8UERGX3BsYWNlX3BkaV9wYWdlfFwKUERGX3NldF9ib3JkZXJfY29sb3J8UERGX3NldF9ib3JkZXJfZGFzaHxQREZfc2V0X2JvcmRlcl9zdHlsZXxQREZfc2V0X2NoYXJfc3BhY2luZ3xQREZfc2V0X2R1cmF0aW9ufFBERl9zZXRfaG9yaXpfc2NhbGluZ3xcClBERl9zZXRfaW5mb19hdXRob3J8UERGX3NldF9pbmZvX2NyZWF0b3J8UERGX3NldF9pbmZvX2tleXdvcmRzfFBERl9zZXRfaW5mb19zdWJqZWN0fFBERl9zZXRfaW5mb190aXRsZXxQREZfc2V0X2xlYWRpbmd8XApQREZfc2V0X3RleHRfbWF0cml4fFBERl9zZXRfdGV4dF9yZW5kZXJpbmd8UERGX3NldF90ZXh0X3Jpc2V8UERGX3NldF93b3JkX3NwYWNpbmd8UERGX3NldGdyYXlfZmlsbHxQREZfc2V0Z3JheV9zdHJva2V8UERGX3NldGdyYXl8XApQREZfc2V0cG9seWRhc2h8UERGX3NldHJnYmNvbG9yX2ZpbGx8UERGX3NldHJnYmNvbG9yX3N0cm9rZXxQREZfc2V0cmdiY29sb3J8UERGX3Nob3dfYm94ZWR8cGhwX2NoZWNrX3N5bnRheHxweF9zZXRfdGFibGVuYW1lfFwKcHhfc2V0X3RhcmdldGVuY29kaW5nfHJ1bmtpdF9zYW5kYm94X291dHB1dF9oYW5kbGVyfHNlc3Npb25faXNfcmVnaXN0ZXJlZHxzZXNzaW9uX3JlZ2lzdGVyfHNlc3Npb25fdW5yZWdpc3RlclwKc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lfG1hZ2ljX3F1b3Rlc19ydW50aW1lfHNldF9zb2NrZXRfYmxvY2tpbmd8c29ja2V0X3NldF9ibG9ja2luZ3xzZXRfc29ja2V0X3RpbWVvdXR8c29ja2V0X3NldF90aW1lb3V0fHNwbGl0fHNwbGl0aXxcCnNxbF9yZWdjYXNlJy5zcGxpdCgnfCcpCiAgICApOwoKICAgIHZhciBrZXl3b3Jkc0RlcHJlY2F0ZWQgPSBsYW5nLmFycmF5VG9NYXAoCiAgICAgICAgKCdjZnVuY3Rpb258b2xkX2Z1bmN0aW9uJykuc3BsaXQoJ3wnKQogICAgKTsKCiAgICB2YXIgZnV0dXJlUmVzZXJ2ZWQgPSBsYW5nLmFycmF5VG9NYXAoW10pOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86I3xcL1wvKSg/OlteP118XD9bXj5dKSovCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGRvY0NvbW1lbnQuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVtnaW15XSpcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyAiIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyAnIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZSIsIC8vIGNvbnN0YW50cwogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxiKD86REVGQVVMVF9JTkNMVURFX1BBVEh8RV8oPzpBTEx8Q08oPzpNUElMRV8oPzpFUlJPUnxXQVJOSU5HKXxSRV8oPzpFUlJPUnxXQVJOSU5HKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUnxOT1RJQ0V8UEFSU0V8U1RSSUNUfFVTRVJfKD86RVJST1J8Tk9USUNFfFdBUk5JTkcpfFdBUk5JTkcpfFAoPzpFQVJfKD86RVhURU5TSU9OX0RJUnxJTlNUQUxMX0RJUil8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJIUF8oPzpCSU5ESVJ8Q09ORklHX0ZJTEVfKD86UEFUSHxTQ0FOX0RJUil8REFUQURJUnxFKD86T0x8WFRFTlNJT05fRElSKXxJTlRfKD86TUFYfFNJWkUpfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiTCg/OklCRElSfE9DQUxTVEFURURJUil8Tyg/OlN8VVRQVVRfSEFORExFUl8oPzpDT05UfEVORHxTVEFSVCkpfFBSRUZJWHxTKD86QVBJfEhMSUJfU1VGRklYfFlTQ09ORkRJUil8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJWRVJTSU9OKSl8X19DT01QSUxFUl9IQUxUX09GRlNFVF9fKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAidGV4dCIsICJzdXBwb3J0LmNsYXNzIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXGIobmV3KShcXHMrKShcXHcrKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuY2xhc3MiLCAia2V5d29yZC5vcGVyYXRvciJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxiKFxcdyspKDo6KSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UiLCAvLyBjb25zdGFudHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcYig/OkEoPzpCKD86REFZXyg/OjF8MnwzfDR8NXw2fDcpfE1PTl8oPzoxKD86MHwxfDJ8KXwyfDN8NHw1fDZ8N3w4fDkpKXxMVF9ESUdJVFN8TV9TVFJ8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJTU0VSVF8oPzpBQ1RJVkV8QkFJTHxDQUxMQkFDS3xRVUlFVF9FVkFMfFdBUk5JTkcpKXxDKD86QVNFXyg/OkxPV0VSfFVQUEVSKXxIQVJfTUFYfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiTyg/OkRFU0VUfE5ORUNUSU9OXyg/OkFCT1JURUR8Tk9STUFMfFRJTUVPVVQpfFVOVF8oPzpOT1JNQUx8UkVDVVJTSVZFKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJSKD86RURJVFNfKD86QUxMfERPQ1N8RlVMTFBBR0V8Ryg/OkVORVJBTHxST1VQKXxNT0RVTEVTfFFBfFNBUEkpfE5DWVNUUnwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIllQVF8oPzpCTE9XRklTSHxFWFRfREVTfE1ENXxTKD86QUxUX0xFTkdUSHxURF9ERVMpKSl8VVJSRU5DWV9TWU1CT0wpfEQoPzpBWV8oPzoxfDJ8M3w0fDV8Nnw3KXwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIkVDSU1BTF9QT0lOVHxJUkVDVE9SWV9TRVBBUkFUT1J8Xyg/OkZNVHxUX0ZNVCkpfEUoPzpOVF8oPzpDT01QQVR8Tk9RVU9URVN8UVVPVEVTKXxSQSg/Ol8oPzpEXyg/OkZNVHxUX0ZNVCl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJUX0ZNVHxZRUFSKXwpfFhUUl8oPzpJRl9FWElTVFN8T1ZFUldSSVRFfFBSRUZJWF8oPzpBTEx8SSg/OkZfRVhJU1RTfE5WQUxJRCl8U0FNRSl8U0tJUCkpfEZSQUNfRElHSVRTfEdST1VQSU5HfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiSFRNTF8oPzpFTlRJVElFU3xTUEVDSUFMQ0hBUlMpfElOKD86Rk9fKD86QUxMfEMoPzpPTkZJR1VSQVRJT058UkVESVRTKXxFTlZJUk9OTUVOVHxHRU5FUkFMfExJQ0VOU0V8TU9EVUxFU3xWQVJJQUJMRVMpfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiSV8oPzpBTEx8UEVSRElSfFNZU1RFTXxVU0VSKXxUXyg/OkNVUlJfU1lNQk9MfEZSQUNfRElHSVRTKSl8TCg/OkNfKD86QUxMfEMoPzpPTExBVEV8VFlQRSl8TSg/OkVTU0FHRVN8T05FVEFSWSl8TlVNRVJJQ3xUSU1FKXwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIk8oPzpDS18oPzpFWHxOQnxTSHxVTil8R18oPzpBKD86TEVSVHxVVEgoPzpQUklWfCkpfEMoPzpPTlN8Uig/OklUfE9OKSl8RCg/OkFFTU9OfEVCVUcpfEUoPzpNRVJHfFJSKXxJTkZPfEtFUk58IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJMKD86T0NBTCg/OjB8MXwyfDN8NHw1fDZ8Nyl8UFIpfE1BSUx8Tig/OkRFTEFZfEVXU3xPKD86VElDRXxXQUlUKSl8T0RFTEFZfFAoPzpFUlJPUnxJRCl8U1lTTE9HfFUoPzpTRVJ8VUNQKXxXQVJOSU5HKSkpfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAiTSg/Ok9OXyg/OjEoPzowfDF8MnwpfDJ8M3w0fDV8Nnw3fDh8OXxERUNJTUFMX1BPSU5UfEdST1VQSU5HfFRIT1VTQU5EU19TRVApfF8oPzoxX1BJfDJfKD86UEl8U1FSVFBJKXxFfEwoPzpOKD86MTB8Mil8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJPRyg/OjEwRXwyRSkpfFBJKD86Xyg/OjJ8NCl8KXxTUVJUKD86MV8yfDIpKSl8Tig/OkVHQVRJVkVfU0lHTnxPKD86RVhQUnxTVFIpfF8oPzpDU19QUkVDRURFU3xTKD86RVBfQllfU1BBQ0V8SUdOX1BPU04pKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJQKD86QVRIKD86SU5GT18oPzpCQVNFTkFNRXxESVJOQU1FfEVYVEVOU0lPTil8X1NFUEFSQVRPUil8TV9TVFJ8T1NJVElWRV9TSUdOfF8oPzpDU19QUkVDRURFU3xTKD86RVBfQllfU1BBQ0V8SUdOX1BPU04pKSl8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICJSQURJWENIQVJ8Uyg/OkVFS18oPzpDVVJ8RU5EfFNFVCl8T1JUXyg/OkFTQ3xERVNDfE5VTUVSSUN8UkVHVUxBUnxTVFJJTkcpfFRSX1BBRF8oPzpCT1RIfExFRlR8UklHSFQpKXwiICsKICAgICAgICAgICAgICAgICAgICAgICAgIlQoPzpIT1VTKD86QU5EU19TRVB8RVApfF9GTVQoPzpfQU1QTXwpKXxZRVMoPzpFWFBSfFNUUil8U1REKD86SU58T1VUfEVSUikpXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChidWlsdGluQ29uc3RhbnRzLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudC5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYnVpbHRpblZhcmlhYmxlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1dHVyZVJlc2VydmVkLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkLmlsbGVnYWwiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5GdW5jdGlvbnMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuZnVuY3Rpb24iOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJkZWJ1Z2dlciIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaW52YWxpZC5kZXByZWNhdGVkIjsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlLm1hdGNoKC9eKFwkW2EtekEtWl9ceDdmLVx1ZmZmZl1bYS16QS1aMC05X1x4N2YtXHVmZmZmXSp8c2VsZnxwYXJlbnQpJC8pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiaWRlbnRpZmllciI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAvW2EtekEtWl8kXHg3Zi1cdWZmZmZdW2EtekEtWjAtOV9ceDdmLVx1ZmZmZl0qLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTYXRlLCBzdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDMpOwogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVswXSA9PSAiJyIgfHwgdmFsdWVbMF0gPT0gJyInKQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKTsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS51bnNoaWZ0KHRoaXMubmV4dCwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAibWFya3VwLmxpc3QiOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLzw8PCg/Olx3K3wnXHcrJ3wiXHcrIikkLywKICAgICAgICAgICAgICAgIG5leHQ6ICJoZXJlZG9jIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjo6fCF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fCE9fCE9PXw8PXw+PXw9Pnw8PD18Pj49fD4+Pj18PD58PHw+fFxcLj18PXwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwvPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLDtdLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJoZXJlZG9jIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U2F0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMV0gIT0gdmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYXJrdXAubGlzdCI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxcdysoPz07PyQpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLioiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdcXFxcKD86W25ydHZlZlxcXFwiJF18WzAtN117MSwzfXx4WzAtOUEtRmEtZl17MSwyfSknCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkW1x3XSsoPzpcW1tcd1xdK118Wz1cLV0+XHcrKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkXHtbXiJcfV0rXH0/LyAgICAgICAgICAgLy8gdGhpcyBpcyB3cm9uZyBidXQgb2sgZm9yIG5vdwogICAgICAgICAgICB9LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAnIicsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcifQogICAgICAgIF0sCiAgICAgICAgInFzdHJpbmciIDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiAvXFxbJ1xcXS99LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiJyIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcifQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Cn07Cgpvb3AuaW5oZXJpdHMoUGhwTGFuZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKCnZhciBQaHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIHN0YXJ0UnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnBocF90YWciLCAvLyBwaHAgb3BlbiB0YWcKICAgICAgICAgICAgcmVnZXggOiAiPFxcPyg/OnBocHw9KT8iLAogICAgICAgICAgICBwdXNoICA6ICJwaHAtc3RhcnQiCiAgICAgICAgfQogICAgXTsKCiAgICB2YXIgZW5kUnVsZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LnBocF90YWciLCAvLyBwaHAgY2xvc2UgdGFnCiAgICAgICAgICAgIHJlZ2V4IDogIlxcPz4iLAogICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgfQogICAgXTsKCiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy4kcnVsZXMpCiAgICAgICAgdGhpcy4kcnVsZXNba2V5XS51bnNoaWZ0LmFwcGx5KHRoaXMuJHJ1bGVzW2tleV0sIHN0YXJ0UnVsZXMpOwoKICAgIHRoaXMuZW1iZWRSdWxlcyhQaHBMYW5nSGlnaGxpZ2h0UnVsZXMsICJwaHAtIiwgZW5kUnVsZXMsIFsic3RhcnQiXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFBocEhpZ2hsaWdodFJ1bGVzLCBIdG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QaHBIaWdobGlnaHRSdWxlcyA9IFBocEhpZ2hsaWdodFJ1bGVzOwpleHBvcnRzLlBocExhbmdIaWdobGlnaHRSdWxlcyA9IFBocExhbmdIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3BocF9sYXJhdmVsX2JsYWRlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvcGhwX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFBocEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9waHBfaGlnaGxpZ2h0X3J1bGVzIikuUGhwSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUEhQTGFyYXZlbEJsYWRlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFBocEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIGJsYWRlUnVsZXMgPSB7CiAgICAgICAgc3RhcnQ6IFt7CiAgICAgICAgICAgIGluY2x1ZGU6ICJjb21tZW50cyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJkaXJlY3RpdmVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInBhcmVudGhlc2lzIgogICAgICAgIH1dLAogICAgICAgIGNvbW1lbnRzOiBbewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5ibGFkZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiKFxcL1xcLyguKSopfChcXCMoLikqKSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5iZWdpbi5waHAiLAogICAgICAgICAgICByZWdleDogIig/OlxcL1xcKikiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuZW5kLnBocCIsCiAgICAgICAgICAgICAgICByZWdleDogIig/OlxcKlxcLykiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5ibG9jay5ibGFkZSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmJlZ2luLmJsYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXHtcXHtcXC1cXC0pIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmVuZC5ibGFkZSIsCiAgICAgICAgICAgICAgICByZWdleDogIig/OlxcLVxcLVxcfVxcfSkiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudC5ibG9jay5ibGFkZSIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICBwYXJlbnRoZXNpczogW3sKICAgICAgICAgICAgdG9rZW46ICJwYXJlbnRoZXNpcy5iZWdpbi5ibGFkZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFwoIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW50aGVzaXMuZW5kLmJsYWRlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmdzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAidmFyaWFibGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlOiAibGFuZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogInBhcmVudGhlc2lzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzb3VyY2UuYmxhZGUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZGlyZWN0aXZlczogW3sKICAgICAgICAgICAgICAgIHRva2VuOiBbImRpcmVjdGl2ZS5kZWNsYXJhdGlvbi5ibGFkZSIsICJrZXl3b3JkLmRpcmVjdGl2ZXMuYmxhZGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiKEApKGVuZHVubGVzc3xlbmRpc3NldHxlbmRlbXB0eXxlbmRhdXRofGVuZGd1ZXN0fGVuZGNvbXBvbmVudHxlbmRzbG90fGVuZGFsZXJ0fGVuZHZlcmJhdGltfGVuZHNlY3Rpb258c2hvd3xwaHB8ZW5kcGhwfGVuZHB1c2h8ZW5kcHJlcGVuZHxlbmRlbnZ8ZW5kZm9yZWxzZXxpc3NldHxlbXB0eXxjb21wb25lbnR8c2xvdHxhbGVydHxqc29ufHZlcmJhdGltfHNlY3Rpb258YXV0aHxndWVzdHxoYXNTZWN0aW9ufGZvcmVsc2V8aW5jbHVkZUlmfGluY2x1ZGVXaGVufGluY2x1ZGVGaXJzdHxlYWNofHB1c2h8c3RhY2t8cHJlcGVuZHxpbmplY3R8ZW52fGVsc2VlbnZ8dW5sZXNzfHlpZWxkfGV4dGVuZHN8cGFyZW50fGluY2x1ZGV8YWNmcmVwZWF0ZXJ8YmxvY2t8Y2FufGNhbm5vdHxjaG9pY2V8ZGVidWd8ZWxzZWNhbnxlbHNlY2Fubm90fGVtYmVkfGhpcGNoYXR8bGFuZ3xsYXlvdXR8bWFjcm98bWFjcm9kZWZ8bWluaWZ5fHBhcnRpYWx8cmVuZGVyfHNlcnZlcnN8c2V0fHNsYWNrfHN0b3J5fHRhc2t8dW5zZXR8d3Bwb3N0c3xhY2ZlbmR8YWZ0ZXJ8YXBwZW5kfGJyZWFrcG9pbnR8ZW5kYWZ0ZXJ8ZW5kY2FufGVuZGNhbm5vdHxlbmRlbWJlZHxlbmRtYWNyb3xlbmRtYXJrZG93bnxlbmRtaW5pZnl8ZW5kcGFydGlhbHxlbmRzZXR1cHxlbmRzdG9yeXxlbmR0YXNrfGVuZHVubGVzc3xtYXJrZG93bnxvdmVyd3JpdGV8c2V0dXB8c3RvcHx3cGVtcHR5fHdwZW5kfHdwcXVlcnkpIgoKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46IFsiZGlyZWN0aXZlLmRlY2xhcmF0aW9uLmJsYWRlIiwgImtleXdvcmQuY29udHJvbC5ibGFkZSJdLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoQCkoaWZ8ZWxzZXxlbHNlaWZ8ZW5kaWZ8Zm9yZWFjaHxlbmRmb3JlYWNofHN3aXRjaHxjYXNlfGJyZWFrfGRlZmF1bHR8ZW5kc3dpdGNofGZvcnxlbmRmb3J8d2hpbGV8ZW5kd2hpbGV8Y29udGludWUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJkaXJlY3RpdmUuaWdub3JlLmJsYWRlIiwgImluamVjdGlvbnMuYmVnaW4uYmxhZGUiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiKEA/KShcXHtcXHspIiwKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJpbmplY3Rpb25zLmVuZC5ibGFkZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJcXH1cXH0iLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogInN0cmluZ3MiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogInZhcmlhYmxlcyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzb3VyY2UuYmxhZGUiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImluamVjdGlvbnMudW5lc2NhcGVkLmJlZ2luLmJsYWRlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFx7XFwhXFwhIiwKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJpbmplY3Rpb25zLnVuZXNjYXBlZC5lbmQuYmxhZGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwhXFwhXFx9IiwKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJzdHJpbmdzIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ2YXJpYWJsZXMiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic291cmNlLmJsYWRlIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfQoKICAgICAgICBdLAoKICAgICAgICBsYW5nOiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuYmxhZGUiLAogICAgICAgICAgICByZWdleDogIig/OiE9fCF8PD18Pj18PHw+fD09PXw9PXw9fFxcK1xcK3xcXDt8XFwsfCV8JiZ8XFx8XFx8KXxcXGIoPzphbmR8b3J8ZXF8bmVxfG5lfGd0ZXxndHxnZXxsdGV8bHR8bGV8bm90fG1vZHxhcylcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmJsYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXGIoPzpUUlVFfEZBTFNFfHRydWV8ZmFsc2UpXFxiIgogICAgICAgIH1dLAogICAgICAgIHN0cmluZ3M6IFt7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uYmxhZGUiLAogICAgICAgICAgICByZWdleDogIlwiIiwKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLmJsYWRlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXCIiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2hhcmFjdGVyLmVzY2FwZS5ibGFkZSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwuIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLnNpbmdsZS5ibGFkZSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uYmxhZGUiLAogICAgICAgICAgICByZWdleDogIiciLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuYmxhZGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICInIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNoYXJhY3Rlci5lc2NhcGUuYmxhZGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcLiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1b3RlZC5kb3VibGUuYmxhZGUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgdmFyaWFibGVzOiBbewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmJsYWRlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXCQoW2EtekEtWl9dW2EtekEtWjAtOV9dKilcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkLm9wZXJhdG9yLmJsYWRlIiwgImNvbnN0YW50Lm90aGVyLnByb3BlcnR5LmJsYWRlIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKC0+KShbYS16QS1aX11bYS16QS1aMC05X10qKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3BlcmF0b3IuYmxhZGUiLAogICAgICAgICAgICAgICAgIm1ldGEuZnVuY3Rpb24tY2FsbC5vYmplY3QuYmxhZGUiLAogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24udmFyaWFibGUuYmxhZGUiLAogICAgICAgICAgICAgICAgInZhcmlhYmxlLmJsYWRlIiwKICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnZhcmlhYmxlLmJsYWRlIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogIigtPikoW2EtekEtWl9dW2EtekEtWjAtOV9dKikoXFwoKSguKj8pKFxcKSkiCiAgICAgICAgfV0KICAgIH07CgogICAgdmFyIGJsYWRlU3RhcnQgPSBibGFkZVJ1bGVzLnN0YXJ0OwoKICAgIGZvciAodmFyIHJ1bGUgaW4gdGhpcy4kcnVsZXMpIHsKICAgICAgICB0aGlzLiRydWxlc1tydWxlXS51bnNoaWZ0LmFwcGx5KHRoaXMuJHJ1bGVzW3J1bGVdLCBibGFkZVN0YXJ0KTsKICAgIH0KCiAgICBPYmplY3Qua2V5cyhibGFkZVJ1bGVzKS5mb3JFYWNoKGZ1bmN0aW9uKHgpIHsKICAgICAgICBpZiAoIXRoaXMuJHJ1bGVzW3hdKQogICAgICAgICAgICB0aGlzLiRydWxlc1t4XSA9IGJsYWRlUnVsZXNbeF07CiAgICB9LCB0aGlzKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKb29wLmluaGVyaXRzKFBIUExhcmF2ZWxCbGFkZUhpZ2hsaWdodFJ1bGVzLCBQaHBIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlBIUExhcmF2ZWxCbGFkZUhpZ2hsaWdodFJ1bGVzID0gUEhQTGFyYXZlbEJsYWRlSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3BocF9jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIGZ1bmN0aW9uTWFwID0gewogICAgImFicyI6IFsKICAgICAgICAiaW50IGFicyhpbnQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIG51bWJlciIKICAgIF0sCiAgICAiYWNvcyI6IFsKICAgICAgICAiZmxvYXQgYWNvcyhmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJuIHRoZSBhcmMgY29zaW5lIG9mIHRoZSBudW1iZXIgaW4gcmFkaWFucyIKICAgIF0sCiAgICAiYWNvc2giOiBbCiAgICAgICAgImZsb2F0IGFjb3NoKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIG9mIHRoZSBudW1iZXIsIGkuZS4gdGhlIHZhbHVlIHdob3NlIGh5cGVyYm9saWMgY29zaW5lIGlzIG51bWJlciIKICAgIF0sCiAgICAiYWRkR2xvYiI6IFsKICAgICAgICAiYm9vbCBhZGRHbG9iKHN0cmluZyBwYXR0ZXJuWyxpbnQgZmxhZ3MgWywgYXJyYXkgb3B0aW9uc11dKSIsCiAgICAgICAgIkFkZCBmaWxlcyBtYXRjaGluZyB0aGUgZ2xvYiBwYXR0ZXJuLiBTZWUgcGhwJ3MgZ2xvYiBmb3IgdGhlIHBhdHRlcm4gc3ludGF4LiIKICAgIF0sCiAgICAiYWRkUGF0dGVybiI6IFsKICAgICAgICAiYm9vbCBhZGRQYXR0ZXJuKHN0cmluZyBwYXR0ZXJuWywgc3RyaW5nIHBhdGggWywgYXJyYXkgb3B0aW9uc11dKSIsCiAgICAgICAgIkFkZCBmaWxlcyBtYXRjaGluZyB0aGUgcGNyZSBwYXR0ZXJuLiBTZWUgcGhwJ3MgcGNyZSBmb3IgdGhlIHBhdHRlcm4gc3ludGF4LiIKICAgIF0sCiAgICAiYWRkY3NsYXNoZXMiOiBbCiAgICAgICAgInN0cmluZyBhZGRjc2xhc2hlcyhzdHJpbmcgc3RyLCBzdHJpbmcgY2hhcmxpc3QpIiwKICAgICAgICAiRXNjYXBlcyBhbGwgY2hhcnMgbWVudGlvbmVkIGluIGNoYXJsaXN0IHdpdGggYmFja3NsYXNoLiBJdCBjcmVhdGVzIG9jdGFsIHJlcHJlc2VudGF0aW9ucyBpZiBhc2tlZCB0byBiYWNrc2xhc2ggY2hhcmFjdGVycyB3aXRoIDh0aCBiaXQgc2V0IG9yIHdpdGggQVNDSUk8MzIgKGV4Y2VwdCAnXFxuJywgJ1xccicsICdcXHQnIGV0Yy4uLikiCiAgICBdLAogICAgImFkZHNsYXNoZXMiOiBbCiAgICAgICAgInN0cmluZyBhZGRzbGFzaGVzKHN0cmluZyBzdHIpIiwKICAgICAgICAiRXNjYXBlcyBzaW5nbGUgcXVvdGUsIGRvdWJsZSBxdW90ZXMgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIHdpdGggYmFja3NsYXNoZXMiCiAgICBdLAogICAgImFwYWNoZV9jaGlsZF90ZXJtaW5hdGUiOiBbCiAgICAgICAgImJvb2wgYXBhY2hlX2NoaWxkX3Rlcm1pbmF0ZSh2b2lkKSIsCiAgICAgICAgIlRlcm1pbmF0ZSBhcGFjaGUgcHJvY2VzcyBhZnRlciB0aGlzIHJlcXVlc3QiCiAgICBdLAogICAgImFwYWNoZV9nZXRfbW9kdWxlcyI6IFsKICAgICAgICAiYXJyYXkgYXBhY2hlX2dldF9tb2R1bGVzKHZvaWQpIiwKICAgICAgICAiR2V0IGEgbGlzdCBvZiBsb2FkZWQgQXBhY2hlIG1vZHVsZXMiCiAgICBdLAogICAgImFwYWNoZV9nZXRfdmVyc2lvbiI6IFsKICAgICAgICAic3RyaW5nIGFwYWNoZV9nZXRfdmVyc2lvbih2b2lkKSIsCiAgICAgICAgIkZldGNoIEFwYWNoZSB2ZXJzaW9uIgogICAgXSwKICAgICJhcGFjaGVfZ2V0ZW52IjogWwogICAgICAgICJib29sIGFwYWNoZV9nZXRlbnYoc3RyaW5nIHZhcmlhYmxlIFssIGJvb2wgd2Fsa190b190b3BdKSIsCiAgICAgICAgIkdldCBhbiBBcGFjaGUgc3VicHJvY2Vzc19lbnYgdmFyaWFibGUiCiAgICBdLAogICAgImFwYWNoZV9sb29rdXBfdXJpIjogWwogICAgICAgICJvYmplY3QgYXBhY2hlX2xvb2t1cF91cmkoc3RyaW5nIFVSSSkiLAogICAgICAgICJQZXJmb3JtIGEgcGFydGlhbCByZXF1ZXN0IG9mIHRoZSBnaXZlbiBVUkkgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGl0IgogICAgXSwKICAgICJhcGFjaGVfbm90ZSI6IFsKICAgICAgICAic3RyaW5nIGFwYWNoZV9ub3RlKHN0cmluZyBub3RlX25hbWUgWywgc3RyaW5nIG5vdGVfdmFsdWVdKSIsCiAgICAgICAgIkdldCBhbmQgc2V0IEFwYWNoZSByZXF1ZXN0IG5vdGVzIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9hdXRoX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBhcGFjaGVfcmVxdWVzdF9hdXRoX25hbWUoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfYXV0aF90eXBlIjogWwogICAgICAgICJzdHJpbmcgYXBhY2hlX3JlcXVlc3RfYXV0aF90eXBlKCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X2Rpc2NhcmRfcmVxdWVzdF9ib2R5IjogWwogICAgICAgICJsb25nIGFwYWNoZV9yZXF1ZXN0X2Rpc2NhcmRfcmVxdWVzdF9ib2R5KCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X2Vycl9oZWFkZXJzX291dCI6IFsKICAgICAgICAiYXJyYXkgYXBhY2hlX3JlcXVlc3RfZXJyX2hlYWRlcnNfb3V0KFt7c3RyaW5nIG5hbWV8YXJyYXkgbGlzdH0gWywgc3RyaW5nIHZhbHVlIFssIGJvb2wgcmVwbGFjZSA9IGZhbHNlXV1dKSIsCiAgICAgICAgIiogZmV0Y2ggYWxsIGhlYWRlcnMgdGhhdCBnbyBvdXQgaW4gY2FzZSBvZiBhbiBlcnJvciBvciBhIHN1YnJlcXVlc3QiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X2hlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnModm9pZCkiLAogICAgICAgICJGZXRjaCBhbGwgSFRUUCByZXF1ZXN0IGhlYWRlcnMiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X2hlYWRlcnNfaW4iOiBbCiAgICAgICAgImFycmF5IGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnNfaW4oKSIsCiAgICAgICAgIiogZmV0Y2ggYWxsIGluY29taW5nIHJlcXVlc3QgaGVhZGVycyIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfaGVhZGVyc19vdXQiOiBbCiAgICAgICAgImFycmF5IGFwYWNoZV9yZXF1ZXN0X2hlYWRlcnNfb3V0KFt7c3RyaW5nIG5hbWV8YXJyYXkgbGlzdH0gWywgc3RyaW5nIHZhbHVlIFssIGJvb2wgcmVwbGFjZSA9IGZhbHNlXV1dKSIsCiAgICAgICAgIiogZmV0Y2ggYWxsIG91dGdvaW5nIHJlcXVlc3QgaGVhZGVycyIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfaXNfaW5pdGlhbF9yZXEiOiBbCiAgICAgICAgImJvb2wgYXBhY2hlX3JlcXVlc3RfaXNfaW5pdGlhbF9yZXEoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfbG9nX2Vycm9yIjogWwogICAgICAgICJib29sZWFuIGFwYWNoZV9yZXF1ZXN0X2xvZ19lcnJvcihzdHJpbmcgbWVzc2FnZSwgW2xvbmcgZmFjaWxpdHldKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3RfbWVldHNfY29uZGl0aW9ucyI6IFsKICAgICAgICAibG9uZyBhcGFjaGVfcmVxdWVzdF9tZWV0c19jb25kaXRpb25zKCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3JlbW90ZV9ob3N0IjogWwogICAgICAgICJpbnQgYXBhY2hlX3JlcXVlc3RfcmVtb3RlX2hvc3QoW2ludCB0eXBlXSkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3J1biI6IFsKICAgICAgICAibG9uZyBhcGFjaGVfcmVxdWVzdF9ydW4oKSIsCiAgICAgICAgIlRoaXMgaXMgYSB3cmFwcGVyIGZvciBhcF9zdWJfcnVuX3JlcSBhbmQgYXBfZGVzdG9yeV9zdWJfcmVxLiAgSXQgdGFrZXMgICAgICBzdWJfcmVxdWVzdCwgcnVucyBpdCwgZGVzdHJveXMgaXQsIGFuZCByZXR1cm5zIGl0J3Mgc3RhdHVzLiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc2F0aXNmaWVzIjogWwogICAgICAgICJsb25nIGFwYWNoZV9yZXF1ZXN0X3NhdGlzZmllcygpIiwKICAgICAgICAiIgogICAgXSwKICAgICJhcGFjaGVfcmVxdWVzdF9zZXJ2ZXJfcG9ydCI6IFsKICAgICAgICAiaW50IGFwYWNoZV9yZXF1ZXN0X3NlcnZlcl9wb3J0KCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3NldF9ldGFnIjogWwogICAgICAgICJ2b2lkIGFwYWNoZV9yZXF1ZXN0X3NldF9ldGFnKCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3NldF9sYXN0X21vZGlmaWVkIjogWwogICAgICAgICJ2b2lkIGFwYWNoZV9yZXF1ZXN0X3NldF9sYXN0X21vZGlmaWVkKCkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3NvbWVfYXV0aF9yZXF1aXJlZCI6IFsKICAgICAgICAiYm9vbCBhcGFjaGVfcmVxdWVzdF9zb21lX2F1dGhfcmVxdWlyZWQoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc3ViX3JlcV9sb29rdXBfZmlsZSI6IFsKICAgICAgICAib2JqZWN0IGFwYWNoZV9yZXF1ZXN0X3N1Yl9yZXFfbG9va3VwX2ZpbGUoc3RyaW5nIGZpbGUpIiwKICAgICAgICAiUmV0dXJucyBzdWItcmVxdWVzdCBmb3IgdGhlIHNwZWNpZmllZCBmaWxlLiAgWW91IHdvdWxkICAgICBuZWVkIHRvIHJ1biBpdCB5b3Vyc2VsZiB3aXRoIHJ1bigpLiIKICAgIF0sCiAgICAiYXBhY2hlX3JlcXVlc3Rfc3ViX3JlcV9sb29rdXBfdXJpIjogWwogICAgICAgICJvYmplY3QgYXBhY2hlX3JlcXVlc3Rfc3ViX3JlcV9sb29rdXBfdXJpKHN0cmluZyB1cmkpIiwKICAgICAgICAiUmV0dXJucyBzdWItcmVxdWVzdCBmb3IgdGhlIHNwZWNpZmllZCB1cmkuICBZb3Ugd291bGQgICAgIG5lZWQgdG8gcnVuIGl0IHlvdXJzZWxmIHdpdGggcnVuKCkiCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3N1Yl9yZXFfbWV0aG9kX3VyaSI6IFsKICAgICAgICAib2JqZWN0IGFwYWNoZV9yZXF1ZXN0X3N1Yl9yZXFfbWV0aG9kX3VyaShzdHJpbmcgbWV0aG9kLCBzdHJpbmcgdXJpKSIsCiAgICAgICAgIlJldHVybnMgc3ViLXJlcXVlc3QgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZS4gIFlvdSB3b3VsZCAgICAgbmVlZCB0byBydW4gaXQgeW91cnNlbGYgd2l0aCBydW4oKS4iCiAgICBdLAogICAgImFwYWNoZV9yZXF1ZXN0X3VwZGF0ZV9tdGltZSI6IFsKICAgICAgICAibG9uZyBhcGFjaGVfcmVxdWVzdF91cGRhdGVfbXRpbWUoW2ludCBkZXBlbmRlbmN5X210aW1lXSkiLAogICAgICAgICIiCiAgICBdLAogICAgImFwYWNoZV9yZXNldF90aW1lb3V0IjogWwogICAgICAgICJib29sIGFwYWNoZV9yZXNldF90aW1lb3V0KHZvaWQpIiwKICAgICAgICAiUmVzZXQgdGhlIEFwYWNoZSB3cml0ZSB0aW1lciIKICAgIF0sCiAgICAiYXBhY2hlX3Jlc3BvbnNlX2hlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IGFwYWNoZV9yZXNwb25zZV9oZWFkZXJzKHZvaWQpIiwKICAgICAgICAiRmV0Y2ggYWxsIEhUVFAgcmVzcG9uc2UgaGVhZGVycyIKICAgIF0sCiAgICAiYXBhY2hlX3NldGVudiI6IFsKICAgICAgICAiYm9vbCBhcGFjaGVfc2V0ZW52KHN0cmluZyB2YXJpYWJsZSwgc3RyaW5nIHZhbHVlIFssIGJvb2wgd2Fsa190b190b3BdKSIsCiAgICAgICAgIlNldCBhbiBBcGFjaGUgc3VicHJvY2Vzc19lbnYgdmFyaWFibGUiCiAgICBdLAogICAgImFycmF5X2NoYW5nZV9rZXlfY2FzZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfY2hhbmdlX2tleV9jYXNlKGFycmF5IGlucHV0IFssIGludCBjYXNlPUNBU0VfTE9XRVJdKSIsCiAgICAgICAgIlJldHVucyBhbiBhcnJheSB3aXRoIGFsbCBzdHJpbmcga2V5cyBsb3dlcmNhc2VkIFtvciB1cHBlcmNhc2VkXSIKICAgIF0sCiAgICAiYXJyYXlfY2h1bmsiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2NodW5rKGFycmF5IGlucHV0LCBpbnQgc2l6ZSBbLCBib29sIHByZXNlcnZlX2tleXNdKSIsCiAgICAgICAgIlNwbGl0IGFycmF5IGludG8gY2h1bmtzIgogICAgXSwKICAgICJhcnJheV9jb21iaW5lIjogWwogICAgICAgICJhcnJheSBhcnJheV9jb21iaW5lKGFycmF5IGtleXMsIGFycmF5IHZhbHVlcykiLAogICAgICAgICJDcmVhdGVzIGFuIGFycmF5IGJ5IHVzaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGFzIGtleXMgYW5kIHRoZSBlbGVtZW50cyBvZiB0aGUgc2Vjb25kIGFzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyIKICAgIF0sCiAgICAiYXJyYXlfY291bnRfdmFsdWVzIjogWwogICAgICAgICJhcnJheSBhcnJheV9jb3VudF92YWx1ZXMoYXJyYXkgaW5wdXQpIiwKICAgICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBhcyBrZXkgYW5kIHRoZSBmcmVxdWVuY3kgb2YgdGhhdCB2YWx1ZSBpbiBpbnB1dCBhcyB2YWx1ZSIKICAgIF0sCiAgICAiYXJyYXlfZGlmZiI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZGlmZihhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXJzIGFyZ3VtZW50cy4iCiAgICBdLAogICAgImFycmF5X2RpZmZfYXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2RpZmZfYXNzb2MoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiBhbnkgb2YgdGhlIG90aGVycyBhcmd1bWVudHMgYnV0IGRvIGFkZGl0aW9uYWwgY2hlY2tzIHdoZXRoZXIgdGhlIGtleXMgYXJlIGVxdWFsIgogICAgXSwKICAgICJhcnJheV9kaWZmX2tleSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZGlmZl9rZXkoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUga2V5cyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gYW55IG9mIHRoZSBvdGhlcnMgYXJndW1lbnRzLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYXJyYXlfZGlmZigpIGJ1dCB3b3JrcyBvbiB0aGUga2V5cyBpbnN0ZWFkIG9mIHRoZSB2YWx1ZXMuIFRoZSBhc3NvY2lhdGl2aXR5IGlzIHByZXNlcnZlZC4iCiAgICBdLAogICAgImFycmF5X2RpZmZfdWFzc29jIjogWwogICAgICAgICJhcnJheSBhcnJheV9kaWZmX3Vhc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGRhdGFfY29tcF9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiBhbnkgb2YgdGhlIG90aGVycyBhcmd1bWVudHMgYnV0IGRvIGFkZGl0aW9uYWwgY2hlY2tzIHdoZXRoZXIgdGhlIGtleXMgYXJlIGVxdWFsLiBFbGVtZW50cyBhcmUgY29tcGFyZWQgYnkgdXNlciBzdXBwbGllZCBmdW5jdGlvbi4iCiAgICBdLAogICAgImFycmF5X2RpZmZfdWtleSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZGlmZl91a2V5KGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSwgY2FsbGJhY2sga2V5X2NvbXBfZnVuYykiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIGtleXMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXJzIGFyZ3VtZW50cy4gVXNlciBzdXBwbGllZCBmdW5jdGlvbiBpcyB1c2VkIGZvciBjb21wYXJpbmcgdGhlIGtleXMuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBhcnJheV91ZGlmZigpIGJ1dCB3b3JrcyBvbiB0aGUga2V5cyBpbnN0ZWFkIG9mIHRoZSB2YWx1ZXMuIFRoZSBhc3NvY2lhdGl2aXR5IGlzIHByZXNlcnZlZC4iCiAgICBdLAogICAgImFycmF5X2ZpbGwiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2ZpbGwoaW50IHN0YXJ0X2tleSwgaW50IG51bSwgbWl4ZWQgdmFsKSIsCiAgICAgICAgIkNyZWF0ZSBhbiBhcnJheSBjb250YWluaW5nIG51bSBlbGVtZW50cyBzdGFydGluZyB3aXRoIGluZGV4IHN0YXJ0X2tleSBlYWNoIGluaXRpYWxpemVkIHRvIHZhbCIKICAgIF0sCiAgICAiYXJyYXlfZmlsbF9rZXlzIjogWwogICAgICAgICJhcnJheSBhcnJheV9maWxsX2tleXMoYXJyYXkga2V5cywgbWl4ZWQgdmFsKSIsCiAgICAgICAgIkNyZWF0ZSBhbiBhcnJheSB1c2luZyB0aGUgZWxlbWVudHMgb2YgdGhlIGZpcnN0IHBhcmFtZXRlciBhcyBrZXlzIGVhY2ggaW5pdGlhbGl6ZWQgdG8gdmFsIgogICAgXSwKICAgICJhcnJheV9maWx0ZXIiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2ZpbHRlcihhcnJheSBpbnB1dCBbLCBtaXhlZCBjYWxsYmFja10pIiwKICAgICAgICAiRmlsdGVycyBlbGVtZW50cyBmcm9tIHRoZSBhcnJheSB2aWEgdGhlIGNhbGxiYWNrLiIKICAgIF0sCiAgICAiYXJyYXlfZmxpcCI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfZmxpcChhcnJheSBpbnB1dCkiLAogICAgICAgICJSZXR1cm4gYXJyYXkgd2l0aCBrZXkgPC0+IHZhbHVlIGZsaXBwZWQiCiAgICBdLAogICAgImFycmF5X2ludGVyc2VjdCI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfaW50ZXJzZWN0KGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwgdGhlIG90aGVyIGFyZ3VtZW50cyIKICAgIF0sCiAgICAiYXJyYXlfaW50ZXJzZWN0X2Fzc29jIjogWwogICAgICAgICJhcnJheSBhcnJheV9pbnRlcnNlY3RfYXNzb2MoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzLiBLZXlzIGFyZSB1c2VkIHRvIGRvIG1vcmUgcmVzdHJpY3RpdmUgY2hlY2siCiAgICBdLAogICAgImFycmF5X2ludGVyc2VjdF9rZXkiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2ludGVyc2VjdF9rZXkoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUga2V5cyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwgdGhlIG90aGVyIGFyZ3VtZW50cy4gS2luZCBvZiBlcXVpdmFsZW50IHRvIGFycmF5X2RpZmYoYXJyYXlfa2V5cygkYXJyMSksIGFycmF5X2tleXMoJGFycjIpWyxhcnJheV9rZXlzKC4uLildKS4gRXF1aXZhbGVudCBvZiBhcnJheV9pbnRlcnNlY3RfYXNzb2MoKSBidXQgZG9lcyBub3QgZG8gY29tcGFyZSBvZiB0aGUgZGF0YS4iCiAgICBdLAogICAgImFycmF5X2ludGVyc2VjdF91YXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X2ludGVyc2VjdF91YXNzb2MoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBrZXlfY29tcGFyZV9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBwcmVzZW50IGluIGFsbCB0aGUgb3RoZXIgYXJndW1lbnRzLiBLZXlzIGFyZSB1c2VkIHRvIGRvIG1vcmUgcmVzdHJpY3RpdmUgY2hlY2sgYW5kIHRoZXkgYXJlIGNvbXBhcmVkIGJ5IHVzaW5nIGFuIHVzZXItc3VwcGxpZWQgY2FsbGJhY2suIgogICAgXSwKICAgICJhcnJheV9pbnRlcnNlY3RfdWtleSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfaW50ZXJzZWN0X3VrZXkoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBrZXlfY29tcGFyZV9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUga2V5cyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwgdGhlIG90aGVyIGFyZ3VtZW50cy4gS2luZCBvZiBlcXVpdmFsZW50IHRvIGFycmF5X2RpZmYoYXJyYXlfa2V5cygkYXJyMSksIGFycmF5X2tleXMoJGFycjIpWyxhcnJheV9rZXlzKC4uLildKS4gVGhlIGNvbXBhcmlzb24gb2YgdGhlIGtleXMgaXMgcGVyZm9ybWVkIGJ5IGEgdXNlciBzdXBwbGllZCBmdW5jdGlvbi4gRXF1aXZhbGVudCBvZiBhcnJheV9pbnRlcnNlY3RfdWFzc29jKCkgYnV0IGRvZXMgbm90IGRvIGNvbXBhcmUgb2YgdGhlIGRhdGEuIgogICAgXSwKICAgICJhcnJheV9rZXlfZXhpc3RzIjogWwogICAgICAgICJib29sIGFycmF5X2tleV9leGlzdHMobWl4ZWQga2V5LCBhcnJheSBzZWFyY2gpIiwKICAgICAgICAiQ2hlY2tzIGlmIHRoZSBnaXZlbiBrZXkgb3IgaW5kZXggZXhpc3RzIGluIHRoZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfa2V5cyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfa2V5cyhhcnJheSBpbnB1dCBbLCBtaXhlZCBzZWFyY2hfdmFsdWVbLCBib29sIHN0cmljdF1dKSIsCiAgICAgICAgIlJldHVybiBqdXN0IHRoZSBrZXlzIGZyb20gdGhlIGlucHV0IGFycmF5LCBvcHRpb25hbGx5IG9ubHkgZm9yIHRoZSBzcGVjaWZpZWQgc2VhcmNoX3ZhbHVlIgogICAgXSwKICAgICJhcnJheV9tYXAiOiBbCiAgICAgICAgImFycmF5IGFycmF5X21hcChtaXhlZCBjYWxsYmFjaywgYXJyYXkgaW5wdXQxIFssIGFycmF5IGlucHV0MiAsLi4uXSkiLAogICAgICAgICJBcHBsaWVzIHRoZSBjYWxsYmFjayB0byB0aGUgZWxlbWVudHMgaW4gZ2l2ZW4gYXJyYXlzLiIKICAgIF0sCiAgICAiYXJyYXlfbWVyZ2UiOiBbCiAgICAgICAgImFycmF5IGFycmF5X21lcmdlKGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSkiLAogICAgICAgICJNZXJnZXMgZWxlbWVudHMgZnJvbSBwYXNzZWQgYXJyYXlzIGludG8gb25lIGFycmF5IgogICAgXSwKICAgICJhcnJheV9tZXJnZV9yZWN1cnNpdmUiOiBbCiAgICAgICAgImFycmF5IGFycmF5X21lcmdlX3JlY3Vyc2l2ZShhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmVjdXJzaXZlbHkgbWVyZ2VzIGVsZW1lbnRzIGZyb20gcGFzc2VkIGFycmF5cyBpbnRvIG9uZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfbXVsdGlzb3J0IjogWwogICAgICAgICJib29sIGFycmF5X211bHRpc29ydChhcnJheSBhcjEgWywgU09SVF9BU0N8U09SVF9ERVNDIFssIFNPUlRfUkVHVUxBUnxTT1JUX05VTUVSSUN8U09SVF9TVFJJTkddXSBbLCBhcnJheSBhcjIgWywgU09SVF9BU0N8U09SVF9ERVNDIFssIFNPUlRfUkVHVUxBUnxTT1JUX05VTUVSSUN8U09SVF9TVFJJTkddXSwgLi4uXSkiLAogICAgICAgICJTb3J0IG11bHRpcGxlIGFycmF5cyBhdCBvbmNlIHNpbWlsYXIgdG8gaG93IE9SREVSIEJZIGNsYXVzZSB3b3JrcyBpbiBTUUwiCiAgICBdLAogICAgImFycmF5X3BhZCI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfcGFkKGFycmF5IGlucHV0LCBpbnQgcGFkX3NpemUsIG1peGVkIHBhZF92YWx1ZSkiLAogICAgICAgICJSZXR1cm5zIGEgY29weSBvZiBpbnB1dCBhcnJheSBwYWRkZWQgd2l0aCBwYWRfdmFsdWUgdG8gc2l6ZSBwYWRfc2l6ZSIKICAgIF0sCiAgICAiYXJyYXlfcG9wIjogWwogICAgICAgICJtaXhlZCBhcnJheV9wb3AoYXJyYXkgc3RhY2spIiwKICAgICAgICAiUG9wcyBhbiBlbGVtZW50IG9mZiB0aGUgZW5kIG9mIHRoZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfcHJvZHVjdCI6IFsKICAgICAgICAibWl4ZWQgYXJyYXlfcHJvZHVjdChhcnJheSBpbnB1dCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoZSBhcnJheSBlbnRyaWVzIgogICAgXSwKICAgICJhcnJheV9wdXNoIjogWwogICAgICAgICJpbnQgYXJyYXlfcHVzaChhcnJheSBzdGFjaywgbWl4ZWQgdmFyIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiUHVzaGVzIGVsZW1lbnRzIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkiCiAgICBdLAogICAgImFycmF5X3JhbmQiOiBbCiAgICAgICAgIm1peGVkIGFycmF5X3JhbmQoYXJyYXkgaW5wdXQgWywgaW50IG51bV9yZXFdKSIsCiAgICAgICAgIlJldHVybiBrZXkva2V5cyBmb3IgcmFuZG9tIGVudHJ5L2VudHJpZXMgaW4gdGhlIGFycmF5IgogICAgXSwKICAgICJhcnJheV9yZWR1Y2UiOiBbCiAgICAgICAgIm1peGVkIGFycmF5X3JlZHVjZShhcnJheSBpbnB1dCwgbWl4ZWQgY2FsbGJhY2sgWywgbWl4ZWQgaW5pdGlhbF0pIiwKICAgICAgICAiSXRlcmF0aXZlbHkgcmVkdWNlIHRoZSBhcnJheSB0byBhIHNpbmdsZSB2YWx1ZSB2aWEgdGhlIGNhbGxiYWNrLiIKICAgIF0sCiAgICAiYXJyYXlfcmVwbGFjZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfcmVwbGFjZShhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0pIiwKICAgICAgICAiUmVwbGFjZXMgZWxlbWVudHMgZnJvbSBwYXNzZWQgYXJyYXlzIGludG8gb25lIGFycmF5IgogICAgXSwKICAgICJhcnJheV9yZXBsYWNlX3JlY3Vyc2l2ZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dKSIsCiAgICAgICAgIlJlY3Vyc2l2ZWx5IHJlcGxhY2VzIGVsZW1lbnRzIGZyb20gcGFzc2VkIGFycmF5cyBpbnRvIG9uZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfcmV2ZXJzZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfcmV2ZXJzZShhcnJheSBpbnB1dCBbLCBib29sIHByZXNlcnZlIGtleXNdKSIsCiAgICAgICAgIlJldHVybiBpbnB1dCBhcyBhIG5ldyBhcnJheSB3aXRoIHRoZSBvcmRlciBvZiB0aGUgZW50cmllcyByZXZlcnNlZCIKICAgIF0sCiAgICAiYXJyYXlfc2VhcmNoIjogWwogICAgICAgICJtaXhlZCBhcnJheV9zZWFyY2gobWl4ZWQgbmVlZGxlLCBhcnJheSBoYXlzdGFjayBbLCBib29sIHN0cmljdF0pIiwKICAgICAgICAiU2VhcmNoZXMgdGhlIGFycmF5IGZvciBhIGdpdmVuIHZhbHVlIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGtleSBpZiBzdWNjZXNzZnVsIgogICAgXSwKICAgICJhcnJheV9zaGlmdCI6IFsKICAgICAgICAibWl4ZWQgYXJyYXlfc2hpZnQoYXJyYXkgc3RhY2spIiwKICAgICAgICAiUG9wcyBhbiBlbGVtZW50IG9mZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfc2xpY2UiOiBbCiAgICAgICAgImFycmF5IGFycmF5X3NsaWNlKGFycmF5IGlucHV0LCBpbnQgb2Zmc2V0IFssIGludCBsZW5ndGggWywgYm9vbCBwcmVzZXJ2ZV9rZXlzXV0pIiwKICAgICAgICAiUmV0dXJucyBlbGVtZW50cyBzcGVjaWZpZWQgYnkgb2Zmc2V0IGFuZCBsZW5ndGgiCiAgICBdLAogICAgImFycmF5X3NwbGljZSI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfc3BsaWNlKGFycmF5IGlucHV0LCBpbnQgb2Zmc2V0IFssIGludCBsZW5ndGggWywgYXJyYXkgcmVwbGFjZW1lbnRdXSkiLAogICAgICAgICJSZW1vdmVzIHRoZSBlbGVtZW50cyBkZXNpZ25hdGVkIGJ5IG9mZnNldCBhbmQgbGVuZ3RoIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBzdXBwbGllZCBhcnJheSIKICAgIF0sCiAgICAiYXJyYXlfc3VtIjogWwogICAgICAgICJtaXhlZCBhcnJheV9zdW0oYXJyYXkgaW5wdXQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3VtIG9mIHRoZSBhcnJheSBlbnRyaWVzIgogICAgXSwKICAgICJhcnJheV91ZGlmZiI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfdWRpZmYoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBkYXRhX2NvbXBfZnVuYykiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgbm90IHByZXNlbnQgaW4gYW55IG9mIHRoZSBvdGhlcnMgYXJndW1lbnRzLiBFbGVtZW50cyBhcmUgY29tcGFyZWQgYnkgdXNlciBzdXBwbGllZCBmdW5jdGlvbi4iCiAgICBdLAogICAgImFycmF5X3VkaWZmX2Fzc29jIjogWwogICAgICAgICJhcnJheSBhcnJheV91ZGlmZl9hc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGtleV9jb21wX2Z1bmMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIG5vdCBwcmVzZW50IGluIGFueSBvZiB0aGUgb3RoZXJzIGFyZ3VtZW50cyBidXQgZG8gYWRkaXRpb25hbCBjaGVja3Mgd2hldGhlciB0aGUga2V5cyBhcmUgZXF1YWwuIEtleXMgYXJlIGNvbXBhcmVkIGJ5IHVzZXIgc3VwcGxpZWQgZnVuY3Rpb24uIgogICAgXSwKICAgICJhcnJheV91ZGlmZl91YXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X3VkaWZmX3Vhc3NvYyhhcnJheSBhcnIxLCBhcnJheSBhcnIyIFssIGFycmF5IC4uLl0sIGNhbGxiYWNrIGRhdGFfY29tcF9mdW5jLCBjYWxsYmFjayBrZXlfY29tcF9mdW5jKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVudHJpZXMgb2YgYXJyMSB0aGF0IGhhdmUgdmFsdWVzIHdoaWNoIGFyZSBub3QgcHJlc2VudCBpbiBhbnkgb2YgdGhlIG90aGVycyBhcmd1bWVudHMgYnV0IGRvIGFkZGl0aW9uYWwgY2hlY2tzIHdoZXRoZXIgdGhlIGtleXMgYXJlIGVxdWFsLiBLZXlzIGFuZCBlbGVtZW50cyBhcmUgY29tcGFyZWQgYnkgdXNlciBzdXBwbGllZCBmdW5jdGlvbnMuIgogICAgXSwKICAgICJhcnJheV91aW50ZXJzZWN0IjogWwogICAgICAgICJhcnJheSBhcnJheV91aW50ZXJzZWN0KGFycmF5IGFycjEsIGFycmF5IGFycjIgWywgYXJyYXkgLi4uXSwgY2FsbGJhY2sgZGF0YV9jb21wYXJlX2Z1bmMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW50cmllcyBvZiBhcnIxIHRoYXQgaGF2ZSB2YWx1ZXMgd2hpY2ggYXJlIHByZXNlbnQgaW4gYWxsIHRoZSBvdGhlciBhcmd1bWVudHMuIERhdGEgaXMgY29tcGFyZWQgYnkgdXNpbmcgYW4gdXNlci1zdXBwbGllZCBjYWxsYmFjay4iCiAgICBdLAogICAgImFycmF5X3VpbnRlcnNlY3RfYXNzb2MiOiBbCiAgICAgICAgImFycmF5IGFycmF5X3VpbnRlcnNlY3RfYXNzb2MoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBkYXRhX2NvbXBhcmVfZnVuYykiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwgdGhlIG90aGVyIGFyZ3VtZW50cy4gS2V5cyBhcmUgdXNlZCB0byBkbyBtb3JlIHJlc3RyaWN0aXZlIGNoZWNrLiBEYXRhIGlzIGNvbXBhcmVkIGJ5IHVzaW5nIGFuIHVzZXItc3VwcGxpZWQgY2FsbGJhY2suIgogICAgXSwKICAgICJhcnJheV91aW50ZXJzZWN0X3Vhc3NvYyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfdWludGVyc2VjdF91YXNzb2MoYXJyYXkgYXJyMSwgYXJyYXkgYXJyMiBbLCBhcnJheSAuLi5dLCBjYWxsYmFjayBkYXRhX2NvbXBhcmVfZnVuYywgY2FsbGJhY2sga2V5X2NvbXBhcmVfZnVuYykiLAogICAgICAgICJSZXR1cm5zIHRoZSBlbnRyaWVzIG9mIGFycjEgdGhhdCBoYXZlIHZhbHVlcyB3aGljaCBhcmUgcHJlc2VudCBpbiBhbGwgdGhlIG90aGVyIGFyZ3VtZW50cy4gS2V5cyBhcmUgdXNlZCB0byBkbyBtb3JlIHJlc3RyaWN0aXZlIGNoZWNrLiBCb3RoIGRhdGEgYW5kIGtleXMgYXJlIGNvbXBhcmVkIGJ5IHVzaW5nIHVzZXItc3VwcGxpZWQgY2FsbGJhY2tzLiIKICAgIF0sCiAgICAiYXJyYXlfdW5pcXVlIjogWwogICAgICAgICJhcnJheSBhcnJheV91bmlxdWUoYXJyYXkgaW5wdXQgWywgaW50IHNvcnRfZmxhZ3NdKSIsCiAgICAgICAgIlJlbW92ZXMgZHVwbGljYXRlIHZhbHVlcyBmcm9tIGFycmF5IgogICAgXSwKICAgICJhcnJheV91bnNoaWZ0IjogWwogICAgICAgICJpbnQgYXJyYXlfdW5zaGlmdChhcnJheSBzdGFjaywgbWl4ZWQgdmFyIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiUHVzaGVzIGVsZW1lbnRzIG9udG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkiCiAgICBdLAogICAgImFycmF5X3ZhbHVlcyI6IFsKICAgICAgICAiYXJyYXkgYXJyYXlfdmFsdWVzKGFycmF5IGlucHV0KSIsCiAgICAgICAgIlJldHVybiBqdXN0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgaW5wdXQgYXJyYXkiCiAgICBdLAogICAgImFycmF5X3dhbGsiOiBbCiAgICAgICAgImJvb2wgYXJyYXlfd2FsayhhcnJheSBpbnB1dCwgc3RyaW5nIGZ1bmNuYW1lIFssIG1peGVkIHVzZXJkYXRhXSkiLAogICAgICAgICJBcHBseSBhIHVzZXIgZnVuY3Rpb24gdG8gZXZlcnkgbWVtYmVyIG9mIGFuIGFycmF5IgogICAgXSwKICAgICJhcnJheV93YWxrX3JlY3Vyc2l2ZSI6IFsKICAgICAgICAiYm9vbCBhcnJheV93YWxrX3JlY3Vyc2l2ZShhcnJheSBpbnB1dCwgc3RyaW5nIGZ1bmNuYW1lIFssIG1peGVkIHVzZXJkYXRhXSkiLAogICAgICAgICJBcHBseSBhIHVzZXIgZnVuY3Rpb24gcmVjdXJzaXZlbHkgdG8gZXZlcnkgbWVtYmVyIG9mIGFuIGFycmF5IgogICAgXSwKICAgICJhcnNvcnQiOiBbCiAgICAgICAgImJvb2wgYXJzb3J0KGFycmF5ICZhcnJheV9hcmcgWywgaW50IHNvcnRfZmxhZ3NdKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgaW4gcmV2ZXJzZSBvcmRlciBhbmQgbWFpbnRhaW4gaW5kZXggYXNzb2NpYXRpb24iCiAgICBdLAogICAgImFzaW4iOiBbCiAgICAgICAgImZsb2F0IGFzaW4oZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGFyYyBzaW5lIG9mIHRoZSBudW1iZXIgaW4gcmFkaWFucyIKICAgIF0sCiAgICAiYXNpbmgiOiBbCiAgICAgICAgImZsb2F0IGFzaW5oKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZiB0aGUgbnVtYmVyLCBpLmUuIHRoZSB2YWx1ZSB3aG9zZSBoeXBlcmJvbGljIHNpbmUgaXMgbnVtYmVyIgogICAgXSwKICAgICJhc29ydCI6IFsKICAgICAgICAiYm9vbCBhc29ydChhcnJheSAmYXJyYXlfYXJnIFssIGludCBzb3J0X2ZsYWdzXSkiLAogICAgICAgICJTb3J0IGFuIGFycmF5IGFuZCBtYWludGFpbiBpbmRleCBhc3NvY2lhdGlvbiIKICAgIF0sCiAgICAiYXNzZXJ0IjogWwogICAgICAgICJpbnQgYXNzZXJ0KHN0cmluZ3xib29sIGFzc2VydGlvbikiLAogICAgICAgICJDaGVja3MgaWYgYXNzZXJ0aW9uIGlzIGZhbHNlIgogICAgXSwKICAgICJhc3NlcnRfb3B0aW9ucyI6IFsKICAgICAgICAibWl4ZWQgYXNzZXJ0X29wdGlvbnMoaW50IHdoYXQgWywgbWl4ZWQgdmFsdWVdKSIsCiAgICAgICAgIlNldC9nZXQgdGhlIHZhcmlvdXMgYXNzZXJ0IGZsYWdzIgogICAgXSwKICAgICJhdGFuIjogWwogICAgICAgICJmbG9hdCBhdGFuKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBhcmMgdGFuZ2VudCBvZiB0aGUgbnVtYmVyIGluIHJhZGlhbnMiCiAgICBdLAogICAgImF0YW4yIjogWwogICAgICAgICJmbG9hdCBhdGFuMihmbG9hdCB5LCBmbG9hdCB4KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGFyYyB0YW5nZW50IG9mIHkveCwgd2l0aCB0aGUgcmVzdWx0aW5nIHF1YWRyYW50IGRldGVybWluZWQgYnkgdGhlIHNpZ25zIG9mIHkgYW5kIHgiCiAgICBdLAogICAgImF0YW5oIjogWwogICAgICAgICJmbG9hdCBhdGFuaChmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgdGhlIG51bWJlciwgaS5lLiB0aGUgdmFsdWUgd2hvc2UgaHlwZXJib2xpYyB0YW5nZW50IGlzIG51bWJlciIKICAgIF0sCiAgICAiYXR0YWNoSXRlcmF0b3IiOiBbCiAgICAgICAgInZvaWQgYXR0YWNoSXRlcmF0b3IoSXRlcmF0b3IgaXRlcmF0b3JbLCBtaXhlZCBpbmZvXSkiLAogICAgICAgICJBdHRhY2ggYSBuZXcgaXRlcmF0b3IiCiAgICBdLAogICAgImJhc2U2NF9kZWNvZGUiOiBbCiAgICAgICAgInN0cmluZyBiYXNlNjRfZGVjb2RlKHN0cmluZyBzdHJbLCBib29sIHN0cmljdF0pIiwKICAgICAgICAiRGVjb2RlcyBzdHJpbmcgdXNpbmcgTUlNRSBiYXNlNjQgYWxnb3JpdGhtIgogICAgXSwKICAgICJiYXNlNjRfZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcgYmFzZTY0X2VuY29kZShzdHJpbmcgc3RyKSIsCiAgICAgICAgIkVuY29kZXMgc3RyaW5nIHVzaW5nIE1JTUUgYmFzZTY0IGFsZ29yaXRobSIKICAgIF0sCiAgICAiYmFzZV9jb252ZXJ0IjogWwogICAgICAgICJzdHJpbmcgYmFzZV9jb252ZXJ0KHN0cmluZyBudW1iZXIsIGludCBmcm9tYmFzZSwgaW50IHRvYmFzZSkiLAogICAgICAgICJDb252ZXJ0cyBhIG51bWJlciBpbiBhIHN0cmluZyBmcm9tIGFueSBiYXNlIDw9IDM2IHRvIGFueSBiYXNlIDw9IDM2IgogICAgXSwKICAgICJiYXNlbmFtZSI6IFsKICAgICAgICAic3RyaW5nIGJhc2VuYW1lKHN0cmluZyBwYXRoIFssIHN0cmluZyBzdWZmaXhdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGZpbGVuYW1lIGNvbXBvbmVudCBvZiB0aGUgcGF0aCIKICAgIF0sCiAgICAiYmNhZGQiOiBbCiAgICAgICAgInN0cmluZyBiY2FkZChzdHJpbmcgbGVmdF9vcGVyYW5kLCBzdHJpbmcgcmlnaHRfb3BlcmFuZCBbLCBpbnQgc2NhbGVdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHN1bSBvZiB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzIgogICAgXSwKICAgICJiY2NvbXAiOiBbCiAgICAgICAgImludCBiY2NvbXAoc3RyaW5nIGxlZnRfb3BlcmFuZCwgc3RyaW5nIHJpZ2h0X29wZXJhbmQgWywgaW50IHNjYWxlXSkiLAogICAgICAgICJDb21wYXJlcyB0d28gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXJzIgogICAgXSwKICAgICJiY2RpdiI6IFsKICAgICAgICAic3RyaW5nIGJjZGl2KHN0cmluZyBsZWZ0X29wZXJhbmQsIHN0cmluZyByaWdodF9vcGVyYW5kIFssIGludCBzY2FsZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgcXVvdGllbnQgb2YgdHdvIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVycyAoZGl2aXNpb24pIgogICAgXSwKICAgICJiY21vZCI6IFsKICAgICAgICAic3RyaW5nIGJjbW9kKHN0cmluZyBsZWZ0X29wZXJhbmQsIHN0cmluZyByaWdodF9vcGVyYW5kKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG1vZHVsdXMgb2YgdGhlIHR3byBhcmJpdHJhcnkgcHJlY2lzaW9uIG9wZXJhbmRzIgogICAgXSwKICAgICJiY211bCI6IFsKICAgICAgICAic3RyaW5nIGJjbXVsKHN0cmluZyBsZWZ0X29wZXJhbmQsIHN0cmluZyByaWdodF9vcGVyYW5kIFssIGludCBzY2FsZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbXVsdGlwbGljYXRpb24gb2YgdHdvIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVycyIKICAgIF0sCiAgICAiYmNwb3ciOiBbCiAgICAgICAgInN0cmluZyBiY3BvdyhzdHJpbmcgeCwgc3RyaW5nIHkgWywgaW50IHNjYWxlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhbiBhcmJpdHJhcnkgcHJlY2lzaW9uIG51bWJlciByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGFub3RoZXIiCiAgICBdLAogICAgImJjcG93bW9kIjogWwogICAgICAgICJzdHJpbmcgYmNwb3dtb2Qoc3RyaW5nIHgsIHN0cmluZyB5LCBzdHJpbmcgbW9kIFssIGludCBzY2FsZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgdmFsdWUgb2YgYW4gYXJiaXRyYXJ5IHByZWNpc2lvbiBudW1iZXIgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiBhbm90aGVyIHJlZHVjZWQgYnkgYSBtb2R1bG91cyIKICAgIF0sCiAgICAiYmNzY2FsZSI6IFsKICAgICAgICAiYm9vbCBiY3NjYWxlKGludCBzY2FsZSkiLAogICAgICAgICJTZXRzIGRlZmF1bHQgc2NhbGUgcGFyYW1ldGVyIGZvciBhbGwgYmMgbWF0aCBmdW5jdGlvbnMiCiAgICBdLAogICAgImJjc3FydCI6IFsKICAgICAgICAic3RyaW5nIGJjc3FydChzdHJpbmcgb3BlcmFuZCBbLCBpbnQgc2NhbGVdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIGFuIGFyYml0cmF5IHByZWNpc2lvbiBudW1iZXIiCiAgICBdLAogICAgImJjc3ViIjogWwogICAgICAgICJzdHJpbmcgYmNzdWIoc3RyaW5nIGxlZnRfb3BlcmFuZCwgc3RyaW5nIHJpZ2h0X29wZXJhbmQgWywgaW50IHNjYWxlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGFyYml0cmFyeSBwcmVjaXNpb24gbnVtYmVycyIKICAgIF0sCiAgICAiYmluMmhleCI6IFsKICAgICAgICAic3RyaW5nIGJpbjJoZXgoc3RyaW5nIGRhdGEpIiwKICAgICAgICAiQ29udmVydHMgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBkYXRhIHRvIGhleCIKICAgIF0sCiAgICAiYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQiOiBbCiAgICAgICAgInN0cmluZyBiaW5kX3RleHRkb21haW5fY29kZXNldCAoc3RyaW5nIGRvbWFpbiwgc3RyaW5nIGNvZGVzZXQpIiwKICAgICAgICAiU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBET01BSU4gbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuIgogICAgXSwKICAgICJiaW5kZWMiOiBbCiAgICAgICAgImludCBiaW5kZWMoc3RyaW5nIGJpbmFyeV9udW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZGVjaW1hbCBlcXVpdmFsZW50IG9mIHRoZSBiaW5hcnkgbnVtYmVyIgogICAgXSwKICAgICJiaW5kdGV4dGRvbWFpbiI6IFsKICAgICAgICAic3RyaW5nIGJpbmR0ZXh0ZG9tYWluKHN0cmluZyBkb21haW5fbmFtZSwgc3RyaW5nIGRpcikiLAogICAgICAgICJCaW5kIHRvIHRoZSB0ZXh0IGRvbWFpbiBkb21haW5fbmFtZSwgbG9va2luZyBmb3IgdHJhbnNsYXRpb25zIGluIGRpci4gUmV0dXJucyB0aGUgY3VycmVudCBkb21haW4iCiAgICBdLAogICAgImJpcmRzdGVwX2F1dG9jb21taXQiOiBbCiAgICAgICAgImJvb2wgYmlyZHN0ZXBfYXV0b2NvbW1pdChpbnQgaW5kZXgpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiaXJkc3RlcF9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBiaXJkc3RlcF9jbG9zZShpbnQgaWQpIiwKICAgICAgICAiIgogICAgXSwKICAgICJiaXJkc3RlcF9jb21taXQiOiBbCiAgICAgICAgImJvb2wgYmlyZHN0ZXBfY29tbWl0KGludCBpbmRleCkiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX2Nvbm5lY3QiOiBbCiAgICAgICAgImludCBiaXJkc3RlcF9jb25uZWN0KHN0cmluZyBzZXJ2ZXIsIHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzcykiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX2V4ZWMiOiBbCiAgICAgICAgImludCBiaXJkc3RlcF9leGVjKGludCBpbmRleCwgc3RyaW5nIGV4ZWNfc3RyKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfZmV0Y2giOiBbCiAgICAgICAgImJvb2wgYmlyZHN0ZXBfZmV0Y2goaW50IGluZGV4KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfZmllbGRuYW1lIjogWwogICAgICAgICJzdHJpbmcgYmlyZHN0ZXBfZmllbGRuYW1lKGludCBpbmRleCwgaW50IGNvbCkiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX2ZpZWxkbnVtIjogWwogICAgICAgICJpbnQgYmlyZHN0ZXBfZmllbGRudW0oaW50IGluZGV4KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfZnJlZXJlc3VsdCI6IFsKICAgICAgICAiYm9vbCBiaXJkc3RlcF9mcmVlcmVzdWx0KGludCBpbmRleCkiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX29mZl9hdXRvY29tbWl0IjogWwogICAgICAgICJib29sIGJpcmRzdGVwX29mZl9hdXRvY29tbWl0KGludCBpbmRleCkiLAogICAgICAgICIiCiAgICBdLAogICAgImJpcmRzdGVwX3Jlc3VsdCI6IFsKICAgICAgICAibWl4ZWQgYmlyZHN0ZXBfcmVzdWx0KGludCBpbmRleCwgbWl4ZWQgY29sKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYmlyZHN0ZXBfcm9sbGJhY2siOiBbCiAgICAgICAgImJvb2wgYmlyZHN0ZXBfcm9sbGJhY2soaW50IGluZGV4KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiYnpjb21wcmVzcyI6IFsKICAgICAgICAic3RyaW5nIGJ6Y29tcHJlc3Moc3RyaW5nIHNvdXJjZSBbLCBpbnQgYmxvY2tzaXplMTAwayBbLCBpbnQgd29ya2ZhY3Rvcl1dKSIsCiAgICAgICAgIkNvbXByZXNzZXMgYSBzdHJpbmcgaW50byBCWmlwMiBlbmNvZGVkIGRhdGEiCiAgICBdLAogICAgImJ6ZGVjb21wcmVzcyI6IFsKICAgICAgICAic3RyaW5nIGJ6ZGVjb21wcmVzcyhzdHJpbmcgc291cmNlIFssIGludCBzbWFsbF0pIiwKICAgICAgICAiRGVjb21wcmVzc2VzIEJaaXAyIGNvbXByZXNzZWQgZGF0YSIKICAgIF0sCiAgICAiYnplcnJubyI6IFsKICAgICAgICAiaW50IGJ6ZXJybm8ocmVzb3VyY2UgYnopIiwKICAgICAgICAiUmV0dXJucyB0aGUgZXJyb3IgbnVtYmVyIgogICAgXSwKICAgICJiemVycm9yIjogWwogICAgICAgICJhcnJheSBiemVycm9yKHJlc291cmNlIGJ6KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVycm9yIG51bWJlciBhbmQgZXJyb3Igc3RyaW5nIGluIGFuIGFzc29jaWF0aXZlIGFycmF5IgogICAgXSwKICAgICJiemVycnN0ciI6IFsKICAgICAgICAic3RyaW5nIGJ6ZXJyc3RyKHJlc291cmNlIGJ6KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVycm9yIHN0cmluZyIKICAgIF0sCiAgICAiYnpvcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBiem9wZW4oc3RyaW5nfGludCBmaWxlfGZwLCBzdHJpbmcgbW9kZSkiLAogICAgICAgICJPcGVucyBhIG5ldyBCWmlwMiBzdHJlYW0iCiAgICBdLAogICAgImJ6cmVhZCI6IFsKICAgICAgICAic3RyaW5nIGJ6cmVhZChyZXNvdXJjZSBielssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIlJlYWRzIHVwIHRvIGxlbmd0aCBieXRlcyBmcm9tIGEgQlppcDIgc3RyZWFtLCBvciAxMDI0IGJ5dGVzIGlmIGxlbmd0aCBpcyBub3Qgc3BlY2lmaWVkIgogICAgXSwKICAgICJjYWxfZGF5c19pbl9tb250aCI6IFsKICAgICAgICAiaW50IGNhbF9kYXlzX2luX21vbnRoKGludCBjYWxlbmRhciwgaW50IG1vbnRoLCBpbnQgeWVhcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiBhIG1vbnRoIGZvciBhIGdpdmVuIHllYXIgYW5kIGNhbGVuZGFyIgogICAgXSwKICAgICJjYWxfZnJvbV9qZCI6IFsKICAgICAgICAiYXJyYXkgY2FsX2Zyb21famQoaW50IGpkLCBpbnQgY2FsZW5kYXIpIiwKICAgICAgICAiQ29udmVydHMgZnJvbSBKdWxpYW4gRGF5IENvdW50IHRvIGEgc3VwcG9ydGVkIGNhbGVuZGFyIGFuZCByZXR1cm4gZXh0ZW5kZWQgaW5mb3JtYXRpb24iCiAgICBdLAogICAgImNhbF9pbmZvIjogWwogICAgICAgICJhcnJheSBjYWxfaW5mbyhbaW50IGNhbGVuZGFyXSkiLAogICAgICAgICJSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGFydGljdWxhciBjYWxlbmRhciIKICAgIF0sCiAgICAiY2FsX3RvX2pkIjogWwogICAgICAgICJpbnQgY2FsX3RvX2pkKGludCBjYWxlbmRhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgeWVhcikiLAogICAgICAgICJDb252ZXJ0cyBmcm9tIGEgc3VwcG9ydGVkIGNhbGVuZGFyIHRvIEp1bGlhbiBEYXkgQ291bnQiCiAgICBdLAogICAgImNhbGxfdXNlcl9mdW5jIjogWwogICAgICAgICJtaXhlZCBjYWxsX3VzZXJfZnVuYyhtaXhlZCBmdW5jdGlvbl9uYW1lIFssIG1peGVkIHBhcm1ldGVyXSBbLCBtaXhlZCAuLi5dKSIsCiAgICAgICAgIkNhbGwgYSB1c2VyIGZ1bmN0aW9uIHdoaWNoIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIiCiAgICBdLAogICAgImNhbGxfdXNlcl9mdW5jX2FycmF5IjogWwogICAgICAgICJtaXhlZCBjYWxsX3VzZXJfZnVuY19hcnJheShzdHJpbmcgZnVuY3Rpb25fbmFtZSwgYXJyYXkgcGFyYW1ldGVycykiLAogICAgICAgICJDYWxsIGEgdXNlciBmdW5jdGlvbiB3aGljaCBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHdpdGggdGhlIGFyZ3VtZW50cyBjb250YWluZWQgaW4gYXJyYXkiCiAgICBdLAogICAgImNhbGxfdXNlcl9tZXRob2QiOiBbCiAgICAgICAgIm1peGVkIGNhbGxfdXNlcl9tZXRob2Qoc3RyaW5nIG1ldGhvZF9uYW1lLCBtaXhlZCBvYmplY3QgWywgbWl4ZWQgcGFyYW1ldGVyXSBbLCBtaXhlZCAuLi5dKSIsCiAgICAgICAgIkNhbGwgYSB1c2VyIG1ldGhvZCBvbiBhIHNwZWNpZmljIG9iamVjdCBvciBjbGFzcyIKICAgIF0sCiAgICAiY2FsbF91c2VyX21ldGhvZF9hcnJheSI6IFsKICAgICAgICAibWl4ZWQgY2FsbF91c2VyX21ldGhvZF9hcnJheShzdHJpbmcgbWV0aG9kX25hbWUsIG1peGVkIG9iamVjdCwgYXJyYXkgcGFyYW1zKSIsCiAgICAgICAgIkNhbGwgYSB1c2VyIG1ldGhvZCBvbiBhIHNwZWNpZmljIG9iamVjdCBvciBjbGFzcyB1c2luZyBhIHBhcmFtZXRlciBhcnJheSIKICAgIF0sCiAgICAiY2VpbCI6IFsKICAgICAgICAiZmxvYXQgY2VpbChmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmV4dCBoaWdoZXN0IGludGVnZXIgdmFsdWUgb2YgdGhlIG51bWJlciIKICAgIF0sCiAgICAiY2hkaXIiOiBbCiAgICAgICAgImJvb2wgY2hkaXIoc3RyaW5nIGRpcmVjdG9yeSkiLAogICAgICAgICJDaGFuZ2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IgogICAgXSwKICAgICJjaGVja2RhdGUiOiBbCiAgICAgICAgImJvb2wgY2hlY2tkYXRlKGludCBtb250aCwgaW50IGRheSwgaW50IHllYXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlKDEpIGlmIGl0IGlzIGEgdmFsaWQgZGF0ZSBpbiBncmVnb3JpYW4gY2FsZW5kYXIiCiAgICBdLAogICAgImNoZ3JwIjogWwogICAgICAgICJib29sIGNoZ3JwKHN0cmluZyBmaWxlbmFtZSwgbWl4ZWQgZ3JvdXApIiwKICAgICAgICAiQ2hhbmdlIGZpbGUgZ3JvdXAiCiAgICBdLAogICAgImNobW9kIjogWwogICAgICAgICJib29sIGNobW9kKHN0cmluZyBmaWxlbmFtZSwgaW50IG1vZGUpIiwKICAgICAgICAiQ2hhbmdlIGZpbGUgbW9kZSIKICAgIF0sCiAgICAiY2hvd24iOiBbCiAgICAgICAgImJvb2wgY2hvd24gKHN0cmluZyBmaWxlbmFtZSwgbWl4ZWQgdXNlcikiLAogICAgICAgICJDaGFuZ2UgZmlsZSBvd25lciIKICAgIF0sCiAgICAiY2hyIjogWwogICAgICAgICJzdHJpbmcgY2hyKGludCBhc2NpaSkiLAogICAgICAgICJDb252ZXJ0cyBBU0NJSSBjb2RlIHRvIGEgY2hhcmFjdGVyIgogICAgXSwKICAgICJjaHJvb3QiOiBbCiAgICAgICAgImJvb2wgY2hyb290KHN0cmluZyBkaXJlY3RvcnkpIiwKICAgICAgICAiQ2hhbmdlIHJvb3QgZGlyZWN0b3J5IgogICAgXSwKICAgICJjaHVua19zcGxpdCI6IFsKICAgICAgICAic3RyaW5nIGNodW5rX3NwbGl0KHN0cmluZyBzdHIgWywgaW50IGNodW5rbGVuIFssIHN0cmluZyBlbmRpbmddXSkiLAogICAgICAgICJSZXR1cm5zIHNwbGl0IGxpbmUiCiAgICBdLAogICAgImNsYXNzX2FsaWFzIjogWwogICAgICAgICJib29sIGNsYXNzX2FsaWFzKHN0cmluZyB1c2VyX2NsYXNzX25hbWUgLCBzdHJpbmcgYWxpYXNfbmFtZSBbLCBib29sIGF1dG9sb2FkXSkiLAogICAgICAgICJDcmVhdGVzIGFuIGFsaWFzIGZvciB1c2VyIGRlZmluZWQgY2xhc3MiCiAgICBdLAogICAgImNsYXNzX2V4aXN0cyI6IFsKICAgICAgICAiYm9vbCBjbGFzc19leGlzdHMoc3RyaW5nIGNsYXNzbmFtZSBbLCBib29sIGF1dG9sb2FkXSkiLAogICAgICAgICJDaGVja3MgaWYgdGhlIGNsYXNzIGV4aXN0cyIKICAgIF0sCiAgICAiY2xhc3NfaW1wbGVtZW50cyI6IFsKICAgICAgICAiYXJyYXkgY2xhc3NfaW1wbGVtZW50cyhtaXhlZCB3aGF0IFssIGJvb2wgYXV0b2xvYWQgXSkiLAogICAgICAgICJSZXR1cm4gYWxsIGNsYXNzZXMgYW5kIGludGVyZmFjZXMgaW1wbGVtZW50ZWQgYnkgU1BMIgogICAgXSwKICAgICJjbGFzc19wYXJlbnRzIjogWwogICAgICAgICJhcnJheSBjbGFzc19wYXJlbnRzKG9iamVjdCBpbnN0YW5jZSBbLCBib29sZWFuIGF1dG9sb2FkID0gdHJ1ZV0pIiwKICAgICAgICAiUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGFsbCBwYXJlbnQgY2xhc3NlcyIKICAgIF0sCiAgICAiY2xlYXJzdGF0Y2FjaGUiOiBbCiAgICAgICAgInZvaWQgY2xlYXJzdGF0Y2FjaGUoW2Jvb2wgY2xlYXJfcmVhbHBhdGhfY2FjaGVbLCBzdHJpbmcgZmlsZW5hbWVdXSkiLAogICAgICAgICJDbGVhciBmaWxlIHN0YXQgY2FjaGUiCiAgICBdLAogICAgImNsb3NlZGlyIjogWwogICAgICAgICJ2b2lkIGNsb3NlZGlyKFtyZXNvdXJjZSBkaXJfaGFuZGxlXSkiLAogICAgICAgICJDbG9zZSBkaXJlY3RvcnkgY29ubmVjdGlvbiBpZGVudGlmaWVkIGJ5IHRoZSBkaXJfaGFuZGxlIgogICAgXSwKICAgICJjbG9zZWxvZyI6IFsKICAgICAgICAiYm9vbCBjbG9zZWxvZyh2b2lkKSIsCiAgICAgICAgIkNsb3NlIGNvbm5lY3Rpb24gdG8gc3lzdGVtIGxvZ2dlciIKICAgIF0sCiAgICAiY29sbGF0b3JfYXNvcnQiOiBbCiAgICAgICAgImJvb2wgY29sbGF0b3JfYXNvcnQoIENvbGxhdG9yICRjb2xsLCBhcnJheShzdHJpbmcpICRhcnIgKSIsCiAgICAgICAgIiogU29ydCBhcnJheSB1c2luZyBzcGVjaWZpZWQgY29sbGF0b3IsIG1haW50YWluaW5nIGluZGV4IGFzc29jaWF0aW9uLiIKICAgIF0sCiAgICAiY29sbGF0b3JfY29tcGFyZSI6IFsKICAgICAgICAiaW50IGNvbGxhdG9yX2NvbXBhcmUoIENvbGxhdG9yICRjb2xsLCBzdHJpbmcgJHN0cjEsIHN0cmluZyAkc3RyMiApIiwKICAgICAgICAiKiBDb21wYXJlIHR3byBzdHJpbmdzLiIKICAgIF0sCiAgICAiY29sbGF0b3JfY3JlYXRlIjogWwogICAgICAgICJDb2xsYXRvciBjb2xsYXRvcl9jcmVhdGUoIHN0cmluZyAkbG9jYWxlICkiLAogICAgICAgICIqIENyZWF0ZSBjb2xsYXRvci4iCiAgICBdLAogICAgImNvbGxhdG9yX2dldF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgImludCBjb2xsYXRvcl9nZXRfYXR0cmlidXRlKCBDb2xsYXRvciAkY29sbCwgaW50ICRhdHRyICkiLAogICAgICAgICIqIEdldCBjb2xsYXRpb24gYXR0cmlidXRlIHZhbHVlLiIKICAgIF0sCiAgICAiY29sbGF0b3JfZ2V0X2Vycm9yX2NvZGUiOiBbCiAgICAgICAgImludCBjb2xsYXRvcl9nZXRfZXJyb3JfY29kZSggQ29sbGF0b3IgJGNvbGwgKSIsCiAgICAgICAgIiogR2V0IGNvbGxhdG9yJ3MgbGFzdCBlcnJvciBjb2RlLiIKICAgIF0sCiAgICAiY29sbGF0b3JfZ2V0X2Vycm9yX21lc3NhZ2UiOiBbCiAgICAgICAgInN0cmluZyBjb2xsYXRvcl9nZXRfZXJyb3JfbWVzc2FnZSggQ29sbGF0b3IgJGNvbGwgKSIsCiAgICAgICAgIiogR2V0IHRleHQgZGVzY3JpcHRpb24gZm9yIGNvbGxhdG9yJ3MgbGFzdCBlcnJvciBjb2RlLiIKICAgIF0sCiAgICAiY29sbGF0b3JfZ2V0X2xvY2FsZSI6IFsKICAgICAgICAic3RyaW5nIGNvbGxhdG9yX2dldF9sb2NhbGUoIENvbGxhdG9yICRjb2xsLCBpbnQgJHR5cGUgKSIsCiAgICAgICAgIiogR2V0cyB0aGUgbG9jYWxlIG5hbWUgb2YgdGhlIGNvbGxhdG9yLiIKICAgIF0sCiAgICAiY29sbGF0b3JfZ2V0X3NvcnRfa2V5IjogWwogICAgICAgICJib29sIGNvbGxhdG9yX2dldF9zb3J0X2tleSggQ29sbGF0b3IgJGNvbGwsIHN0cmluZyAkc3RyICkiLAogICAgICAgICIqIEdldCBhIHNvcnQga2V5IGZvciBhIHN0cmluZyBmcm9tIGEgQ29sbGF0b3IuIH19fSIKICAgIF0sCiAgICAiY29sbGF0b3JfZ2V0X3N0cmVuZ3RoIjogWwogICAgICAgICJpbnQgY29sbGF0b3JfZ2V0X3N0cmVuZ3RoKENvbGxhdG9yIGNvbGwpIiwKICAgICAgICAiKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbGxhdGlvbiBzdHJlbmd0aC4iCiAgICBdLAogICAgImNvbGxhdG9yX3NldF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgImJvb2wgY29sbGF0b3Jfc2V0X2F0dHJpYnV0ZSggQ29sbGF0b3IgJGNvbGwsIGludCAkYXR0ciwgaW50ICR2YWwgKSIsCiAgICAgICAgIiogU2V0IGNvbGxhdGlvbiBhdHRyaWJ1dGUuIgogICAgXSwKICAgICJjb2xsYXRvcl9zZXRfc3RyZW5ndGgiOiBbCiAgICAgICAgImJvb2wgY29sbGF0b3Jfc2V0X3N0cmVuZ3RoKENvbGxhdG9yIGNvbGwsIGludCBzdHJlbmd0aCkiLAogICAgICAgICIqIFNldCB0aGUgY29sbGF0aW9uIHN0cmVuZ3RoLiIKICAgIF0sCiAgICAiY29sbGF0b3Jfc29ydCI6IFsKICAgICAgICAiYm9vbCBjb2xsYXRvcl9zb3J0KCAgQ29sbGF0b3IgJGNvbGwsIGFycmF5KHN0cmluZykgJGFyciBbLCBpbnQgJHNvcnRfZmxhZ3NdICkiLAogICAgICAgICIqIFNvcnQgYXJyYXkgdXNpbmcgc3BlY2lmaWVkIGNvbGxhdG9yLiIKICAgIF0sCiAgICAiY29sbGF0b3Jfc29ydF93aXRoX3NvcnRfa2V5cyI6IFsKICAgICAgICAiYm9vbCBjb2xsYXRvcl9zb3J0X3dpdGhfc29ydF9rZXlzKCBDb2xsYXRvciAkY29sbCwgYXJyYXkoc3RyaW5nKSAkYXJyICkiLAogICAgICAgICIqIEVxdWl2YWxlbnQgdG8gc3RhbmRhcmQgUEhQIHNvcnQgdXNpbmcgQ29sbGF0b3IuICAqIFVzZXMgSUNVIHVjb2xfZ2V0U29ydEtleSBmb3IgcGVyZm9ybWFuY2UuIgogICAgXSwKICAgICJjb21fY3JlYXRlX2d1aWQiOiBbCiAgICAgICAgInN0cmluZyBjb21fY3JlYXRlX2d1aWQoKSIsCiAgICAgICAgIkdlbmVyYXRlIGEgZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgKEdVSUQpIgogICAgXSwKICAgICJjb21fZXZlbnRfc2luayI6IFsKICAgICAgICAiYm9vbCBjb21fZXZlbnRfc2luayhvYmplY3QgY29tb2JqZWN0LCBvYmplY3Qgc2lua29iamVjdCBbLCBtaXhlZCBzaW5raW50ZXJmYWNlXSkiLAogICAgICAgICJDb25uZWN0IGV2ZW50cyBmcm9tIGEgQ09NIG9iamVjdCB0byBhIFBIUCBvYmplY3QiCiAgICBdLAogICAgImNvbV9nZXRfYWN0aXZlX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IGNvbV9nZXRfYWN0aXZlX29iamVjdChzdHJpbmcgcHJvZ2lkIFssIGludCBjb2RlX3BhZ2UgXSkiLAogICAgICAgICJSZXR1cm5zIGEgaGFuZGxlIHRvIGFuIGFscmVhZHkgcnVubmluZyBpbnN0YW5jZSBvZiBhIENPTSBvYmplY3QiCiAgICBdLAogICAgImNvbV9sb2FkX3R5cGVsaWIiOiBbCiAgICAgICAgImJvb2wgY29tX2xvYWRfdHlwZWxpYihzdHJpbmcgdHlwZWxpYl9uYW1lIFssIGludCBjYXNlX2luc2Vuc2l0aXZlXSkiLAogICAgICAgICJMb2FkcyBhIFR5cGVsaWJyYXJ5IGFuZCByZWdpc3RlcnMgaXRzIGNvbnN0YW50cyIKICAgIF0sCiAgICAiY29tX21lc3NhZ2VfcHVtcCI6IFsKICAgICAgICAiYm9vbCBjb21fbWVzc2FnZV9wdW1wKFtpbnQgdGltZW91dG1zXSkiLAogICAgICAgICJQcm9jZXNzIENPTSBtZXNzYWdlcywgc2xlZXBpbmcgZm9yIHVwIHRvIHRpbWVvdXRtcyBtaWxsaXNlY29uZHMiCiAgICBdLAogICAgImNvbV9wcmludF90eXBlaW5mbyI6IFsKICAgICAgICAiYm9vbCBjb21fcHJpbnRfdHlwZWluZm8ob2JqZWN0IGNvbW9iamVjdCB8IHN0cmluZyB0eXBlbGliLCBzdHJpbmcgZGlzcGludGVyZmFjZSwgYm9vbCB3YW50c2luaykiLAogICAgICAgICJQcmludCBvdXQgYSBQSFAgY2xhc3MgZGVmaW5pdGlvbiBmb3IgYSBkaXNwYXRjaGFibGUgaW50ZXJmYWNlIgogICAgXSwKICAgICJjb21wYWN0IjogWwogICAgICAgICJhcnJheSBjb21wYWN0KG1peGVkIHZhcl9uYW1lcyBbLCBtaXhlZCAuLi5dKSIsCiAgICAgICAgIkNyZWF0ZXMgYSBoYXNoIGNvbnRhaW5pbmcgdmFyaWFibGVzIGFuZCB0aGVpciB2YWx1ZXMiCiAgICBdLAogICAgImNvbXBvc2VfbG9jYWxlIjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGNvbXBvc2VfbG9jYWxlKCRhcnJheSkiLAogICAgICAgICIqIENyZWF0ZXMgYSBsb2NhbGUgYnkgY29tYmluaW5nIHRoZSBwYXJ0cyBvZiBsb2NhbGUtSUQgcGFzc2VkICAqIH19fSIKICAgIF0sCiAgICAiY29uZmlybV9leHRuYW1lX2NvbXBpbGVkIjogWwogICAgICAgICJzdHJpbmcgY29uZmlybV9leHRuYW1lX2NvbXBpbGVkKHN0cmluZyBhcmcpIiwKICAgICAgICAiUmV0dXJuIGEgc3RyaW5nIHRvIGNvbmZpcm0gdGhhdCB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkIGluIgogICAgXSwKICAgICJjb25uZWN0aW9uX2Fib3J0ZWQiOiBbCiAgICAgICAgImludCBjb25uZWN0aW9uX2Fib3J0ZWQodm9pZCkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgY2xpZW50IGRpc2Nvbm5lY3RlZCIKICAgIF0sCiAgICAiY29ubmVjdGlvbl9zdGF0dXMiOiBbCiAgICAgICAgImludCBjb25uZWN0aW9uX3N0YXR1cyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIGJpdGZpZWxkIgogICAgXSwKICAgICJjb25zdGFudCI6IFsKICAgICAgICAibWl4ZWQgY29uc3RhbnQoc3RyaW5nIGNvbnN0X25hbWUpIiwKICAgICAgICAiR2l2ZW4gdGhlIG5hbWUgb2YgYSBjb25zdGFudCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBjb25zdGFudCdzIGFzc29jaWF0ZWQgdmFsdWUiCiAgICBdLAogICAgImNvbnZlcnRfY3lyX3N0cmluZyI6IFsKICAgICAgICAic3RyaW5nIGNvbnZlcnRfY3lyX3N0cmluZyhzdHJpbmcgc3RyLCBzdHJpbmcgZnJvbSwgc3RyaW5nIHRvKSIsCiAgICAgICAgIkNvbnZlcnQgZnJvbSBvbmUgQ3lyaWxsaWMgY2hhcmFjdGVyIHNldCB0byBhbm90aGVyIgogICAgXSwKICAgICJjb252ZXJ0X3V1ZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgY29udmVydF91dWRlY29kZShzdHJpbmcgZGF0YSkiLAogICAgICAgICJkZWNvZGUgYSB1dWVuY29kZWQgc3RyaW5nIgogICAgXSwKICAgICJjb252ZXJ0X3V1ZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcgY29udmVydF91dWVuY29kZShzdHJpbmcgZGF0YSkiLAogICAgICAgICJ1dWVuY29kZSBhIHN0cmluZyIKICAgIF0sCiAgICAiY29weSI6IFsKICAgICAgICAiYm9vbCBjb3B5KHN0cmluZyBzb3VyY2VfZmlsZSwgc3RyaW5nIGRlc3RpbmF0aW9uX2ZpbGUgWywgcmVzb3VyY2UgY29udGV4dF0pIiwKICAgICAgICAiQ29weSBhIGZpbGUiCiAgICBdLAogICAgImNvcyI6IFsKICAgICAgICAiZmxvYXQgY29zKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBjb3NpbmUgb2YgdGhlIG51bWJlciBpbiByYWRpYW5zIgogICAgXSwKICAgICJjb3NoIjogWwogICAgICAgICJmbG9hdCBjb3NoKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgbnVtYmVyLCBkZWZpbmVkIGFzIChleHAobnVtYmVyKSArIGV4cCgtbnVtYmVyKSkvMiIKICAgIF0sCiAgICAiY291bnQiOiBbCiAgICAgICAgImludCBjb3VudChtaXhlZCB2YXIgWywgaW50IG1vZGVdKSIsCiAgICAgICAgIkNvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYSB2YXJpYWJsZSAodXN1YWxseSBhbiBhcnJheSkiCiAgICBdLAogICAgImNvdW50X2NoYXJzIjogWwogICAgICAgICJtaXhlZCBjb3VudF9jaGFycyhzdHJpbmcgaW5wdXQgWywgaW50IG1vZGVdKSIsCiAgICAgICAgIlJldHVybnMgaW5mbyBhYm91dCB3aGF0IGNoYXJhY3RlcnMgYXJlIHVzZWQgaW4gaW5wdXQiCiAgICBdLAogICAgImNyYzMyIjogWwogICAgICAgICJzdHJpbmcgY3JjMzIoc3RyaW5nIHN0cikiLAogICAgICAgICJDYWxjdWxhdGUgdGhlIGNyYzMyIHBvbHlub21pYWwgb2YgYSBzdHJpbmciCiAgICBdLAogICAgImNyZWF0ZV9mdW5jdGlvbiI6IFsKICAgICAgICAic3RyaW5nIGNyZWF0ZV9mdW5jdGlvbihzdHJpbmcgYXJncywgc3RyaW5nIGNvZGUpIiwKICAgICAgICAiQ3JlYXRlcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24sIGFuZCByZXR1cm5zIGl0cyBuYW1lIChmdW5ueSwgZWg/KSIKICAgIF0sCiAgICAiY3J5cHQiOiBbCiAgICAgICAgInN0cmluZyBjcnlwdChzdHJpbmcgc3RyIFssIHN0cmluZyBzYWx0XSkiLAogICAgICAgICJIYXNoIGEgc3RyaW5nIgogICAgXSwKICAgICJjdHlwZV9hbG51bSI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9hbG51bShtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgYWxwaGFudW1lcmljIGNoYXJhY3RlcihzKSIKICAgIF0sCiAgICAiY3R5cGVfYWxwaGEiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfYWxwaGEobWl4ZWQgYykiLAogICAgICAgICJDaGVja3MgZm9yIGFscGhhYmV0aWMgY2hhcmFjdGVyKHMpIgogICAgXSwKICAgICJjdHlwZV9jbnRybCI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9jbnRybChtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgY29udHJvbCBjaGFyYWN0ZXIocykiCiAgICBdLAogICAgImN0eXBlX2RpZ2l0IjogWwogICAgICAgICJib29sIGN0eXBlX2RpZ2l0KG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciBudW1lcmljIGNoYXJhY3RlcihzKSIKICAgIF0sCiAgICAiY3R5cGVfZ3JhcGgiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfZ3JhcGgobWl4ZWQgYykiLAogICAgICAgICJDaGVja3MgZm9yIGFueSBwcmludGFibGUgY2hhcmFjdGVyKHMpIGV4Y2VwdCBzcGFjZSIKICAgIF0sCiAgICAiY3R5cGVfbG93ZXIiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfbG93ZXIobWl4ZWQgYykiLAogICAgICAgICJDaGVja3MgZm9yIGxvd2VyY2FzZSBjaGFyYWN0ZXIocykiCiAgICBdLAogICAgImN0eXBlX3ByaW50IjogWwogICAgICAgICJib29sIGN0eXBlX3ByaW50KG1peGVkIGMpIiwKICAgICAgICAiQ2hlY2tzIGZvciBwcmludGFibGUgY2hhcmFjdGVyKHMpIgogICAgXSwKICAgICJjdHlwZV9wdW5jdCI6IFsKICAgICAgICAiYm9vbCBjdHlwZV9wdW5jdChtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIgd2hpY2ggaXMgbm90IHdoaXRlc3BhY2Ugb3IgYW4gYWxwaGFudW1lcmljIGNoYXJhY3RlciIKICAgIF0sCiAgICAiY3R5cGVfc3BhY2UiOiBbCiAgICAgICAgImJvb2wgY3R5cGVfc3BhY2UobWl4ZWQgYykiLAogICAgICAgICJDaGVja3MgZm9yIHdoaXRlc3BhY2UgY2hhcmFjdGVyKHMpIgogICAgXSwKICAgICJjdHlwZV91cHBlciI6IFsKICAgICAgICAiYm9vbCBjdHlwZV91cHBlcihtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgdXBwZXJjYXNlIGNoYXJhY3RlcihzKSIKICAgIF0sCiAgICAiY3R5cGVfeGRpZ2l0IjogWwogICAgICAgICJib29sIGN0eXBlX3hkaWdpdChtaXhlZCBjKSIsCiAgICAgICAgIkNoZWNrcyBmb3IgY2hhcmFjdGVyKHMpIHJlcHJlc2VudGluZyBhIGhleGFkZWNpbWFsIGRpZ2l0IgogICAgXSwKICAgICJjdXJsX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIGN1cmxfY2xvc2UocmVzb3VyY2UgY2gpIiwKICAgICAgICAiQ2xvc2UgYSBjVVJMIHNlc3Npb24iCiAgICBdLAogICAgImN1cmxfY29weV9oYW5kbGUiOiBbCiAgICAgICAgInJlc291cmNlIGN1cmxfY29weV9oYW5kbGUocmVzb3VyY2UgY2gpIiwKICAgICAgICAiQ29weSBhIGNVUkwgaGFuZGxlIGFsb25nIHdpdGggYWxsIG9mIGl0J3MgcHJlZmVyZW5jZXMiCiAgICBdLAogICAgImN1cmxfZXJybm8iOiBbCiAgICAgICAgImludCBjdXJsX2Vycm5vKHJlc291cmNlIGNoKSIsCiAgICAgICAgIlJldHVybiBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIGxhc3QgZXJyb3IgbnVtYmVyIgogICAgXSwKICAgICJjdXJsX2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgY3VybF9lcnJvcihyZXNvdXJjZSBjaCkiLAogICAgICAgICJSZXR1cm4gYSBzdHJpbmcgY29udGFpbiB0aGUgbGFzdCBlcnJvciBmb3IgdGhlIGN1cnJlbnQgc2Vzc2lvbiIKICAgIF0sCiAgICAiY3VybF9leGVjIjogWwogICAgICAgICJib29sIGN1cmxfZXhlYyhyZXNvdXJjZSBjaCkiLAogICAgICAgICJQZXJmb3JtIGEgY1VSTCBzZXNzaW9uIgogICAgXSwKICAgICJjdXJsX2dldGluZm8iOiBbCiAgICAgICAgIm1peGVkIGN1cmxfZ2V0aW5mbyhyZXNvdXJjZSBjaCBbLCBpbnQgb3B0aW9uXSkiLAogICAgICAgICJHZXQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGEgc3BlY2lmaWMgdHJhbnNmZXIiCiAgICBdLAogICAgImN1cmxfaW5pdCI6IFsKICAgICAgICAicmVzb3VyY2UgY3VybF9pbml0KFtzdHJpbmcgdXJsXSkiLAogICAgICAgICJJbml0aWFsaXplIGEgY1VSTCBzZXNzaW9uIgogICAgXSwKICAgICJjdXJsX211bHRpX2FkZF9oYW5kbGUiOiBbCiAgICAgICAgImludCBjdXJsX211bHRpX2FkZF9oYW5kbGUocmVzb3VyY2UgbWgsIHJlc291cmNlIGNoKSIsCiAgICAgICAgIkFkZCBhIG5vcm1hbCBjVVJMIGhhbmRsZSB0byBhIGNVUkwgbXVsdGkgaGFuZGxlIgogICAgXSwKICAgICJjdXJsX211bHRpX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIGN1cmxfbXVsdGlfY2xvc2UocmVzb3VyY2UgbWgpIiwKICAgICAgICAiQ2xvc2UgYSBzZXQgb2YgY1VSTCBoYW5kbGVzIgogICAgXSwKICAgICJjdXJsX211bHRpX2V4ZWMiOiBbCiAgICAgICAgImludCBjdXJsX211bHRpX2V4ZWMocmVzb3VyY2UgbWgsIGludCAmc3RpbGxfcnVubmluZykiLAogICAgICAgICJSdW4gdGhlIHN1Yi1jb25uZWN0aW9ucyBvZiB0aGUgY3VycmVudCBjVVJMIGhhbmRsZSIKICAgIF0sCiAgICAiY3VybF9tdWx0aV9nZXRjb250ZW50IjogWwogICAgICAgICJzdHJpbmcgY3VybF9tdWx0aV9nZXRjb250ZW50KHJlc291cmNlIGNoKSIsCiAgICAgICAgIlJldHVybiB0aGUgY29udGVudCBvZiBhIGNVUkwgaGFuZGxlIGlmIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgaXMgc2V0IgogICAgXSwKICAgICJjdXJsX211bHRpX2luZm9fcmVhZCI6IFsKICAgICAgICAiYXJyYXkgY3VybF9tdWx0aV9pbmZvX3JlYWQocmVzb3VyY2UgbWggWywgbG9uZyBtc2dzX2luX3F1ZXVlXSkiLAogICAgICAgICJHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgdHJhbnNmZXJzIgogICAgXSwKICAgICJjdXJsX211bHRpX2luaXQiOiBbCiAgICAgICAgInJlc291cmNlIGN1cmxfbXVsdGlfaW5pdCh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYSBuZXcgY1VSTCBtdWx0aSBoYW5kbGUiCiAgICBdLAogICAgImN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSI6IFsKICAgICAgICAiaW50IGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShyZXNvdXJjZSBtaCwgcmVzb3VyY2UgY2gpIiwKICAgICAgICAiUmVtb3ZlIGEgbXVsdGkgaGFuZGxlIGZyb20gYSBzZXQgb2YgY1VSTCBoYW5kbGVzIgogICAgXSwKICAgICJjdXJsX211bHRpX3NlbGVjdCI6IFsKICAgICAgICAiaW50IGN1cmxfbXVsdGlfc2VsZWN0KHJlc291cmNlIG1oWywgZG91YmxlIHRpbWVvdXRdKSIsCiAgICAgICAgIkdldCBhbGwgdGhlIHNvY2tldHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjVVJMIGV4dGVuc2lvbiwgd2hpY2ggY2FuIHRoZW4gYmUgXCJzZWxlY3RlZFwiIgogICAgXSwKICAgICJjdXJsX3NldG9wdCI6IFsKICAgICAgICAiYm9vbCBjdXJsX3NldG9wdChyZXNvdXJjZSBjaCwgaW50IG9wdGlvbiwgbWl4ZWQgdmFsdWUpIiwKICAgICAgICAiU2V0IGFuIG9wdGlvbiBmb3IgYSBjVVJMIHRyYW5zZmVyIgogICAgXSwKICAgICJjdXJsX3NldG9wdF9hcnJheSI6IFsKICAgICAgICAiYm9vbCBjdXJsX3NldG9wdF9hcnJheShyZXNvdXJjZSBjaCwgYXJyYXkgb3B0aW9ucykiLAogICAgICAgICJTZXQgYW4gYXJyYXkgb2Ygb3B0aW9uIGZvciBhIGNVUkwgdHJhbnNmZXIiCiAgICBdLAogICAgImN1cmxfdmVyc2lvbiI6IFsKICAgICAgICAiYXJyYXkgY3VybF92ZXJzaW9uKFtpbnQgdmVyc2lvbl0pIiwKICAgICAgICAiUmV0dXJuIGNVUkwgdmVyc2lvbiBpbmZvcm1hdGlvbi4iCiAgICBdLAogICAgImN1cnJlbnQiOiBbCiAgICAgICAgIm1peGVkIGN1cnJlbnQoYXJyYXkgYXJyYXlfYXJnKSIsCiAgICAgICAgIlJldHVybiB0aGUgZWxlbWVudCBjdXJyZW50bHkgcG9pbnRlZCB0byBieSB0aGUgaW50ZXJuYWwgYXJyYXkgcG9pbnRlciIKICAgIF0sCiAgICAiZGF0ZSI6IFsKICAgICAgICAic3RyaW5nIGRhdGUoc3RyaW5nIGZvcm1hdCBbLCBsb25nIHRpbWVzdGFtcF0pIiwKICAgICAgICAiRm9ybWF0IGEgbG9jYWwgZGF0ZS90aW1lIgogICAgXSwKICAgICJkYXRlX2FkZCI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV9hZGQoRGF0ZVRpbWUgb2JqZWN0LCBEYXRlSW50ZXJ2YWwgaW50ZXJ2YWwpIiwKICAgICAgICAiQWRkcyBhbiBpbnRlcnZhbCB0byB0aGUgY3VycmVudCBkYXRlIGluIG9iamVjdC4iCiAgICBdLAogICAgImRhdGVfY3JlYXRlIjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX2NyZWF0ZShbc3RyaW5nIHRpbWVbLCBEYXRlVGltZVpvbmUgb2JqZWN0XV0pIiwKICAgICAgICAiUmV0dXJucyBuZXcgRGF0ZVRpbWUgb2JqZWN0IgogICAgXSwKICAgICJkYXRlX2NyZWF0ZV9mcm9tX2Zvcm1hdCI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV9jcmVhdGVfZnJvbV9mb3JtYXQoc3RyaW5nIGZvcm1hdCwgc3RyaW5nIHRpbWVbLCBEYXRlVGltZVpvbmUgb2JqZWN0XSkiLAogICAgICAgICJSZXR1cm5zIG5ldyBEYXRlVGltZSBvYmplY3QgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCIKICAgIF0sCiAgICAiZGF0ZV9kYXRlX3NldCI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV9kYXRlX3NldChEYXRlVGltZSBvYmplY3QsIGxvbmcgeWVhciwgbG9uZyBtb250aCwgbG9uZyBkYXkpIiwKICAgICAgICAiU2V0cyB0aGUgZGF0ZS4iCiAgICBdLAogICAgImRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQiOiBbCiAgICAgICAgInN0cmluZyBkYXRlX2RlZmF1bHRfdGltZXpvbmVfZ2V0KCkiLAogICAgICAgICJHZXRzIHRoZSBkZWZhdWx0IHRpbWV6b25lIHVzZWQgYnkgYWxsIGRhdGUvdGltZSBmdW5jdGlvbnMgaW4gYSBzY3JpcHQiCiAgICBdLAogICAgImRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQiOiBbCiAgICAgICAgImJvb2wgZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldChzdHJpbmcgdGltZXpvbmVfaWRlbnRpZmllcikiLAogICAgICAgICJTZXRzIHRoZSBkZWZhdWx0IHRpbWV6b25lIHVzZWQgYnkgYWxsIGRhdGUvdGltZSBmdW5jdGlvbnMgaW4gYSBzY3JpcHQiCiAgICBdLAogICAgImRhdGVfZGlmZiI6IFsKICAgICAgICAiRGF0ZUludGVydmFsIGRhdGVfZGlmZihEYXRlVGltZSBvYmplY3QgWywgYm9vbCBhYnNvbHV0ZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBEYXRlVGltZSBvYmplY3RzLiIKICAgIF0sCiAgICAiZGF0ZV9mb3JtYXQiOiBbCiAgICAgICAgInN0cmluZyBkYXRlX2Zvcm1hdChEYXRlVGltZSBvYmplY3QsIHN0cmluZyBmb3JtYXQpIiwKICAgICAgICAiUmV0dXJucyBkYXRlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gZ2l2ZW4gZm9ybWF0IgogICAgXSwKICAgICJkYXRlX2dldF9sYXN0X2Vycm9ycyI6IFsKICAgICAgICAiYXJyYXkgZGF0ZV9nZXRfbGFzdF9lcnJvcnMoKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHdhcm5pbmdzIGFuZCBlcnJvcnMgZm91bmQgd2hpbGUgcGFyc2luZyBhIGRhdGUvdGltZSBzdHJpbmcuIgogICAgXSwKICAgICJkYXRlX2ludGVydmFsX2NyZWF0ZV9mcm9tX2RhdGVfc3RyaW5nIjogWwogICAgICAgICJEYXRlSW50ZXJ2YWwgZGF0ZV9pbnRlcnZhbF9jcmVhdGVfZnJvbV9kYXRlX3N0cmluZyhzdHJpbmcgdGltZSkiLAogICAgICAgICJVc2VzIHRoZSBub3JtYWwgZGF0ZSBwYXJzZXJzIGFuZCBzZXRzIHVwIGEgRGF0ZUludGVydmFsIGZyb20gdGhlIHJlbGF0aXZlIHBhcnRzIG9mIHRoZSBwYXJzZWQgc3RyaW5nIgogICAgXSwKICAgICJkYXRlX2ludGVydmFsX2Zvcm1hdCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVfaW50ZXJ2YWxfZm9ybWF0KERhdGVJbnRlcnZhbCBvYmplY3QsIHN0cmluZyBmb3JtYXQpIiwKICAgICAgICAiRm9ybWF0cyB0aGUgaW50ZXJ2YWwuIgogICAgXSwKICAgICJkYXRlX2lzb2RhdGVfc2V0IjogWwogICAgICAgICJEYXRlVGltZSBkYXRlX2lzb2RhdGVfc2V0KERhdGVUaW1lIG9iamVjdCwgbG9uZyB5ZWFyLCBsb25nIHdlZWtbLCBsb25nIGRheV0pIiwKICAgICAgICAiU2V0cyB0aGUgSVNPIGRhdGUuIgogICAgXSwKICAgICJkYXRlX21vZGlmeSI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV9tb2RpZnkoRGF0ZVRpbWUgb2JqZWN0LCBzdHJpbmcgbW9kaWZ5KSIsCiAgICAgICAgIkFsdGVycyB0aGUgdGltZXN0YW1wLiIKICAgIF0sCiAgICAiZGF0ZV9vZmZzZXRfZ2V0IjogWwogICAgICAgICJsb25nIGRhdGVfb2Zmc2V0X2dldChEYXRlVGltZSBvYmplY3QpIiwKICAgICAgICAiUmV0dXJucyB0aGUgRFNUIG9mZnNldC4iCiAgICBdLAogICAgImRhdGVfcGFyc2UiOiBbCiAgICAgICAgImFycmF5IGRhdGVfcGFyc2Uoc3RyaW5nIGRhdGUpIiwKICAgICAgICAiUmV0dXJucyBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGRldGFpbGVkIGluZm8gYWJvdXQgZ2l2ZW4gZGF0ZSIKICAgIF0sCiAgICAiZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdCI6IFsKICAgICAgICAiYXJyYXkgZGF0ZV9wYXJzZV9mcm9tX2Zvcm1hdChzdHJpbmcgZm9ybWF0LCBzdHJpbmcgZGF0ZSkiLAogICAgICAgICJSZXR1cm5zIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZGV0YWlsZWQgaW5mbyBhYm91dCBnaXZlbiBkYXRlIgogICAgXSwKICAgICJkYXRlX3N1YiI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV9zdWIoRGF0ZVRpbWUgb2JqZWN0LCBEYXRlSW50ZXJ2YWwgaW50ZXJ2YWwpIiwKICAgICAgICAiU3VidHJhY3RzIGFuIGludGVydmFsIHRvIHRoZSBjdXJyZW50IGRhdGUgaW4gb2JqZWN0LiIKICAgIF0sCiAgICAiZGF0ZV9zdW5faW5mbyI6IFsKICAgICAgICAiYXJyYXkgZGF0ZV9zdW5faW5mbyhsb25nIHRpbWUsIGZsb2F0IGxhdGl0dWRlLCBmbG9hdCBsb25naXR1ZGUpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHN1biBzZXQvcmlzZSBhbmQgdHdpbGlnaHQgYmVnaW4vZW5kIgogICAgXSwKICAgICJkYXRlX3N1bnJpc2UiOiBbCiAgICAgICAgIm1peGVkIGRhdGVfc3VucmlzZShtaXhlZCB0aW1lIFssIGludCBmb3JtYXQgWywgZmxvYXQgbGF0aXR1ZGUgWywgZmxvYXQgbG9uZ2l0dWRlIFssIGZsb2F0IHplbml0aCBbLCBmbG9hdCBnbXRfb2Zmc2V0XV1dXV0pIiwKICAgICAgICAiUmV0dXJucyB0aW1lIG9mIHN1bnJpc2UgZm9yIGEgZ2l2ZW4gZGF5IGFuZCBsb2NhdGlvbiIKICAgIF0sCiAgICAiZGF0ZV9zdW5zZXQiOiBbCiAgICAgICAgIm1peGVkIGRhdGVfc3Vuc2V0KG1peGVkIHRpbWUgWywgaW50IGZvcm1hdCBbLCBmbG9hdCBsYXRpdHVkZSBbLCBmbG9hdCBsb25naXR1ZGUgWywgZmxvYXQgemVuaXRoIFssIGZsb2F0IGdtdF9vZmZzZXRdXV1dXSkiLAogICAgICAgICJSZXR1cm5zIHRpbWUgb2Ygc3Vuc2V0IGZvciBhIGdpdmVuIGRheSBhbmQgbG9jYXRpb24iCiAgICBdLAogICAgImRhdGVfdGltZV9zZXQiOiBbCiAgICAgICAgIkRhdGVUaW1lIGRhdGVfdGltZV9zZXQoRGF0ZVRpbWUgb2JqZWN0LCBsb25nIGhvdXIsIGxvbmcgbWludXRlWywgbG9uZyBzZWNvbmRdKSIsCiAgICAgICAgIlNldHMgdGhlIHRpbWUuIgogICAgXSwKICAgICJkYXRlX3RpbWVzdGFtcF9nZXQiOiBbCiAgICAgICAgImxvbmcgZGF0ZV90aW1lc3RhbXBfZ2V0KERhdGVUaW1lIG9iamVjdCkiLAogICAgICAgICJHZXRzIHRoZSBVbml4IHRpbWVzdGFtcC4iCiAgICBdLAogICAgImRhdGVfdGltZXN0YW1wX3NldCI6IFsKICAgICAgICAiRGF0ZVRpbWUgZGF0ZV90aW1lc3RhbXBfc2V0KERhdGVUaW1lIG9iamVjdCwgbG9uZyB1bml4VGltZXN0YW1wKSIsCiAgICAgICAgIlNldHMgdGhlIGRhdGUgYW5kIHRpbWUgYmFzZWQgb24gYW4gVW5peCB0aW1lc3RhbXAuIgogICAgXSwKICAgICJkYXRlX3RpbWV6b25lX2dldCI6IFsKICAgICAgICAiRGF0ZVRpbWVab25lIGRhdGVfdGltZXpvbmVfZ2V0KERhdGVUaW1lIG9iamVjdCkiLAogICAgICAgICJSZXR1cm4gbmV3IERhdGVUaW1lWm9uZSBvYmplY3QgcmVsYXRpdmUgdG8gZ2l2ZSBEYXRlVGltZSIKICAgIF0sCiAgICAiZGF0ZV90aW1lem9uZV9zZXQiOiBbCiAgICAgICAgIkRhdGVUaW1lIGRhdGVfdGltZXpvbmVfc2V0KERhdGVUaW1lIG9iamVjdCwgRGF0ZVRpbWVab25lIG9iamVjdCkiLAogICAgICAgICJTZXRzIHRoZSB0aW1lem9uZSBmb3IgdGhlIERhdGVUaW1lIG9iamVjdC4iCiAgICBdLAogICAgImRhdGVmbXRfY3JlYXRlIjogWwogICAgICAgICJJbnRsRGF0ZUZvcm1hdHRlciBkYXRlZm10X2NyZWF0ZShzdHJpbmcgJGxvY2FsZSwgbG9uZyBkYXRlX3R5cGUsIGxvbmcgdGltZV90eXBlWywgc3RyaW5nICR0aW1lem9uZV9zdHIsIGxvbmcgJGNhbGVuZGFyLCBzdHJpbmcgJHBhdHRlcm5dICkiLAogICAgICAgICIqIENyZWF0ZSBmb3JtYXR0ZXIuIgogICAgXSwKICAgICJkYXRlZm10X2Zvcm1hdCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfZm9ybWF0KCBbbWl4ZWRdaW50ICRhcmdzIG9yIGFycmF5ICRhcmdzICkiLAogICAgICAgICIqIEZvcm1hdCB0aGUgdGltZSB2YWx1ZSBhcyBhIHN0cmluZy4gfX19IgogICAgXSwKICAgICJkYXRlZm10X2dldF9jYWxlbmRhciI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfZ2V0X2NhbGVuZGFyKCBJbnRsRGF0ZUZvcm1hdHRlciAkbWYgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBjYWxlbmRhci4iCiAgICBdLAogICAgImRhdGVmbXRfZ2V0X2RhdGV0eXBlIjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9nZXRfZGF0ZXR5cGUoIEludGxEYXRlRm9ybWF0dGVyICRtZiApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGRhdGV0eXBlLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9nZXRfZXJyb3JfY29kZSI6IFsKICAgICAgICAiaW50IGRhdGVmbXRfZ2V0X2Vycm9yX2NvZGUoIEludGxEYXRlRm9ybWF0dGVyICRuZiApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyJ3MgbGFzdCBlcnJvciBjb2RlLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9nZXRfZXJyb3JfbWVzc2FnZSI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfZ2V0X2Vycm9yX21lc3NhZ2UoIEludGxEYXRlRm9ybWF0dGVyICRjb2xsICkiLAogICAgICAgICIqIEdldCB0ZXh0IGRlc2NyaXB0aW9uIGZvciBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJkYXRlZm10X2dldF9sb2NhbGUiOiBbCiAgICAgICAgInN0cmluZyBkYXRlZm10X2dldF9sb2NhbGUoSW50bERhdGVGb3JtYXR0ZXIgJG1mKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBsb2NhbGUuIgogICAgXSwKICAgICJkYXRlZm10X2dldF9wYXR0ZXJuIjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9nZXRfcGF0dGVybiggSW50bERhdGVGb3JtYXR0ZXIgJG1mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgcGF0dGVybi4iCiAgICBdLAogICAgImRhdGVmbXRfZ2V0X3RpbWV0eXBlIjogWwogICAgICAgICJzdHJpbmcgZGF0ZWZtdF9nZXRfdGltZXR5cGUoIEludGxEYXRlRm9ybWF0dGVyICRtZiApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIHRpbWV0eXBlLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9nZXRfdGltZXpvbmVfaWQiOiBbCiAgICAgICAgInN0cmluZyBkYXRlZm10X2dldF90aW1lem9uZV9pZCggSW50bERhdGVGb3JtYXR0ZXIgJG1mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgdGltZXpvbmVfaWQuIgogICAgXSwKICAgICJkYXRlZm10X2lzTGVuaWVudCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfaXNMZW5pZW50KEludGxEYXRlRm9ybWF0dGVyICRtZikiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgbG9jYWxlLiIKICAgIF0sCiAgICAiZGF0ZWZtdF9sb2NhbHRpbWUiOiBbCiAgICAgICAgImludGVnZXIgZGF0ZWZtdF9sb2NhbHRpbWUoIEludGxEYXRlRm9ybWF0dGVyICRmbXQsIHN0cmluZyAkdGV4dF90b19wYXJzZVssIGludCAkcGFyc2VfcG9zIF0pIiwKICAgICAgICAiKiBQYXJzZSB0aGUgc3RyaW5nICR2YWx1ZSB0byBhIGxvY2FsdGltZSBhcnJheSAgfX19IgogICAgXSwKICAgICJkYXRlZm10X3BhcnNlIjogWwogICAgICAgICJpbnRlZ2VyIGRhdGVmbXRfcGFyc2UoIEludGxEYXRlRm9ybWF0dGVyICRmbXQsIHN0cmluZyAkdGV4dF90b19wYXJzZSBbLCBpbnQgJHBhcnNlX3Bvc10gKSIsCiAgICAgICAgIiogUGFyc2UgdGhlIHN0cmluZyAkdmFsdWUgc3RhcnRpbmcgYXQgcGFyc2VfcG9zIHRvIGEgVW5peCB0aW1lc3RhbXAgLWludCB9fX0iCiAgICBdLAogICAgImRhdGVmbXRfc2V0TGVuaWVudCI6IFsKICAgICAgICAic3RyaW5nIGRhdGVmbXRfc2V0TGVuaWVudChJbnRsRGF0ZUZvcm1hdHRlciAkbWYpIiwKICAgICAgICAiKiBTZXQgZm9ybWF0dGVyIGxlbmllbnQuIgogICAgXSwKICAgICJkYXRlZm10X3NldF9jYWxlbmRhciI6IFsKICAgICAgICAiYm9vbCBkYXRlZm10X3NldF9jYWxlbmRhciggSW50bERhdGVGb3JtYXR0ZXIgJG1mLCBpbnQgJGNhbGVuZGFyICkiLAogICAgICAgICIqIFNldCBmb3JtYXR0ZXIgY2FsZW5kYXIuIgogICAgXSwKICAgICJkYXRlZm10X3NldF9wYXR0ZXJuIjogWwogICAgICAgICJib29sIGRhdGVmbXRfc2V0X3BhdHRlcm4oIEludGxEYXRlRm9ybWF0dGVyICRtZiwgc3RyaW5nICRwYXR0ZXJuICkiLAogICAgICAgICIqIFNldCBmb3JtYXR0ZXIgcGF0dGVybi4iCiAgICBdLAogICAgImRhdGVmbXRfc2V0X3RpbWV6b25lX2lkIjogWwogICAgICAgICJib29sZWFuIGRhdGVmbXRfc2V0X3RpbWV6b25lX2lkKCBJbnRsRGF0ZUZvcm1hdHRlciAkbWYsJHRpbWV6b25lX2lkKSIsCiAgICAgICAgIiogU2V0IGZvcm1hdHRlciB0aW1lem9uZV9pZC4iCiAgICBdLAogICAgImRiYV9jbG9zZSI6IFsKICAgICAgICAidm9pZCBkYmFfY2xvc2UocmVzb3VyY2UgaGFuZGxlKSIsCiAgICAgICAgIkNsb3NlcyBkYXRhYmFzZSIKICAgIF0sCiAgICAiZGJhX2RlbGV0ZSI6IFsKICAgICAgICAiYm9vbCBkYmFfZGVsZXRlKHN0cmluZyBrZXksIHJlc291cmNlIGhhbmRsZSkiLAogICAgICAgICJEZWxldGVzIHRoZSBlbnRyeSBhc3NvY2lhdGVkIHdpdGgga2V5ICAgIElmIGluaWZpbGU6IHJlbW92ZSBhbGwgb3RoZXIga2V5IGxpbmVzIgogICAgXSwKICAgICJkYmFfZXhpc3RzIjogWwogICAgICAgICJib29sIGRiYV9leGlzdHMoc3RyaW5nIGtleSwgcmVzb3VyY2UgaGFuZGxlKSIsCiAgICAgICAgIkNoZWNrcywgaWYgdGhlIHNwZWNpZmllZCBrZXkgZXhpc3RzIgogICAgXSwKICAgICJkYmFfZmV0Y2giOiBbCiAgICAgICAgInN0cmluZyBkYmFfZmV0Y2goc3RyaW5nIGtleSwgW2ludCBza2lwICxdIHJlc291cmNlIGhhbmRsZSkiLAogICAgICAgICJGZXRjaGVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBrZXkiCiAgICBdLAogICAgImRiYV9maXJzdGtleSI6IFsKICAgICAgICAic3RyaW5nIGRiYV9maXJzdGtleShyZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiUmVzZXRzIHRoZSBpbnRlcm5hbCBrZXkgcG9pbnRlciBhbmQgcmV0dXJucyB0aGUgZmlyc3Qga2V5IgogICAgXSwKICAgICJkYmFfaGFuZGxlcnMiOiBbCiAgICAgICAgImFycmF5IGRiYV9oYW5kbGVycyhbYm9vbCBmdWxsX2luZm9dKSIsCiAgICAgICAgIkxpc3QgY29uZmlndXJlZCBkYXRhYmFzZSBoYW5kbGVycyIKICAgIF0sCiAgICAiZGJhX2luc2VydCI6IFsKICAgICAgICAiYm9vbCBkYmFfaW5zZXJ0KHN0cmluZyBrZXksIHN0cmluZyB2YWx1ZSwgcmVzb3VyY2UgaGFuZGxlKSIsCiAgICAgICAgIklmIG5vdCBpbmlmaWxlOiBJbnNlcnQgdmFsdWUgYXMga2V5LCByZXR1cm4gZmFsc2UsIGlmIGtleSBleGlzdHMgYWxyZWFkeSAgICAgSWYgaW5pZmlsZTogQWRkIHZha3VlIGFzIGtleSAobmV4dCBpbnN0YW5jZSBvZiBrZXkpIgogICAgXSwKICAgICJkYmFfa2V5X3NwbGl0IjogWwogICAgICAgICJhcnJheXxmYWxzZSBkYmFfa2V5X3NwbGl0KHN0cmluZyBrZXkpIiwKICAgICAgICAiU3BsaXRzIGFuIGluaWZpbGUga2V5IGludG8gYW4gYXJyYXkgb2YgdGhlIGZvcm0gYXJyYXkoMD0+Z3JvdXAsMT0+dmFsdWVfbmFtZSkgYnV0IHJldHVybnMgZmFsc2UgaWYgaW5wdXQgaXMgZmFsc2Ugb3IgbnVsbCIKICAgIF0sCiAgICAiZGJhX2xpc3QiOiBbCiAgICAgICAgImFycmF5IGRiYV9saXN0KCkiLAogICAgICAgICJMaXN0IG9wZW5lZCBkYXRhYmFzZXMiCiAgICBdLAogICAgImRiYV9uZXh0a2V5IjogWwogICAgICAgICJzdHJpbmcgZGJhX25leHRrZXkocmVzb3VyY2UgaGFuZGxlKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5leHQga2V5IgogICAgXSwKICAgICJkYmFfb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgZGJhX29wZW4oc3RyaW5nIHBhdGgsIHN0cmluZyBtb2RlIFssIHN0cmluZyBoYW5kbGVybmFtZSwgc3RyaW5nIC4uLl0pIiwKICAgICAgICAiT3BlbnMgcGF0aCB1c2luZyB0aGUgc3BlY2lmaWVkIGhhbmRsZXIgaW4gbW9kZSIKICAgIF0sCiAgICAiZGJhX29wdGltaXplIjogWwogICAgICAgICJib29sIGRiYV9vcHRpbWl6ZShyZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiT3B0aW1pemVzIChlLmcuIGNsZWFuIHVwLCB2YWN1dW0pIGRhdGFiYXNlIgogICAgXSwKICAgICJkYmFfcG9wZW4iOiBbCiAgICAgICAgInJlc291cmNlIGRiYV9wb3BlbihzdHJpbmcgcGF0aCwgc3RyaW5nIG1vZGUgWywgc3RyaW5nIGhhbmRsZXJuYW1lLCBzdHJpbmcgLi4uXSkiLAogICAgICAgICJPcGVucyBwYXRoIHVzaW5nIHRoZSBzcGVjaWZpZWQgaGFuZGxlciBpbiBtb2RlIHBlcnNpc3RlbnRseSIKICAgIF0sCiAgICAiZGJhX3JlcGxhY2UiOiBbCiAgICAgICAgImJvb2wgZGJhX3JlcGxhY2Uoc3RyaW5nIGtleSwgc3RyaW5nIHZhbHVlLCByZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiSW5zZXJ0cyB2YWx1ZSBhcyBrZXksIHJlcGxhY2VzIGtleSwgaWYga2V5IGV4aXN0cyBhbHJlYWR5ICAgIElmIGluaWZpbGU6IHJlbW92ZSBhbGwgb3RoZXIga2V5IGxpbmVzIgogICAgXSwKICAgICJkYmFfc3luYyI6IFsKICAgICAgICAiYm9vbCBkYmFfc3luYyhyZXNvdXJjZSBoYW5kbGUpIiwKICAgICAgICAiU3luY2hyb25pemVzIGRhdGFiYXNlIgogICAgXSwKICAgICJkY2dldHRleHQiOiBbCiAgICAgICAgInN0cmluZyBkY2dldHRleHQoc3RyaW5nIGRvbWFpbl9uYW1lLCBzdHJpbmcgbXNnaWQsIGxvbmcgY2F0ZWdvcnkpIiwKICAgICAgICAiUmV0dXJuIHRoZSB0cmFuc2xhdGlvbiBvZiBtc2dpZCBmb3IgZG9tYWluX25hbWUgYW5kIGNhdGVnb3J5LCBvciBtc2dpZCB1bmFsdGVyZWQgaWYgYSB0cmFuc2xhdGlvbiBkb2VzIG5vdCBleGlzdCIKICAgIF0sCiAgICAiZGNuZ2V0dGV4dCI6IFsKICAgICAgICAic3RyaW5nIGRjbmdldHRleHQgKHN0cmluZyBkb21haW4sIHN0cmluZyBtc2dpZDEsIHN0cmluZyBtc2dpZDIsIGludCBuLCBpbnQgY2F0ZWdvcnkpIiwKICAgICAgICAiUGx1cmFsIHZlcnNpb24gb2YgZGNnZXR0ZXh0KCkiCiAgICBdLAogICAgImRlYnVnX2JhY2t0cmFjZSI6IFsKICAgICAgICAiYXJyYXkgZGVidWdfYmFja3RyYWNlKFtib29sIHByb3ZpZGVfb2JqZWN0XSkiLAogICAgICAgICJSZXR1cm4gYmFja3RyYWNlIGFzIGFycmF5IgogICAgXSwKICAgICJkZWJ1Z19wcmludF9iYWNrdHJhY2UiOiBbCiAgICAgICAgInZvaWQgZGVidWdfcHJpbnRfYmFja3RyYWNlKHZvaWQpICovIiwKICAgICAgICAiWkVORF9GVU5DVElPTihkZWJ1Z19wcmludF9iYWNrdHJhY2UpIHsgIHplbmRfZXhlY3V0ZV9kYXRhICpwdHIsICpza2lwOyAgaW50IGxpbmVubzsgIGNoYXIgKmZ1bmN0aW9uX25hbWU7ICBjaGFyICpmaWxlbmFtZTsgIGNoYXIgKmNsYXNzX25hbWUgPSBOVUxMOyAgY2hhciAqY2FsbF90eXBlOyAgY2hhciAqaW5jbHVkZV9maWxlbmFtZSA9IE5VTEw7ICB6dmFsICphcmdfYXJyYXkgPSBOVUxMOyAgaW50IGluZGVudCA9IDA7ICAgaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVyc19ub25lKCkgPT0gRkFJTFVSRSkgeyAgIHJldHVybjsgIH0gICBwdHIgPSBFRyhjdXJyZW50X2V4ZWN1dGVfZGF0YSk7IiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKGRvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlX2ZpbGUpIHsgIF9kb21fZG9jdW1lbnRfcmVsYXhOR192YWxpZGF0ZShJTlRFUk5BTF9GVU5DVElPTl9QQVJBTV9QQVNTVEhSVSwgRE9NX0xPQURfRklMRSk7IH0gLyogfX19IGVuZCBkb21fZG9jdW1lbnRfcmVsYXhOR192YWxpZGF0ZV9maWxlIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfcmVsYXhOR192YWxpZGF0ZV94bWwiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX2RvY3VtZW50X3JlbGF4TkdfdmFsaWRhdGVfeG1sKHN0cmluZyBzb3VyY2UpOyAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihkb21fZG9jdW1lbnRfcmVsYXhOR192YWxpZGF0ZV94bWwpIHsgIF9kb21fZG9jdW1lbnRfcmVsYXhOR192YWxpZGF0ZShJTlRFUk5BTF9GVU5DVElPTl9QQVJBTV9QQVNTVEhSVSwgRE9NX0xPQURfU1RSSU5HKTsgfSAvKiB9fX0gZW5kIGRvbV9kb2N1bWVudF9yZWxheE5HX3ZhbGlkYXRlX3htbCIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3JlbmFtZV9ub2RlIjogWwogICAgICAgICJET01Ob2RlIGRvbV9kb2N1bWVudF9yZW5hbWVfbm9kZShub2RlIG4sIHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBxdWFsaWZpZWROYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLURvY3VtZW50My1yZW5hbWVOb2RlIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3NhdmUiOiBbCiAgICAgICAgImludCBkb21fZG9jdW1lbnRfc2F2ZShzdHJpbmcgZmlsZSk7IiwKICAgICAgICAiQ29udmVuaWVuY2UgbWV0aG9kIHRvIHNhdmUgdG8gZmlsZSIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3NhdmVfaHRtbCI6IFsKICAgICAgICAic3RyaW5nIGRvbV9kb2N1bWVudF9zYXZlX2h0bWwoKTsiLAogICAgICAgICJDb252ZW5pZW5jZSBtZXRob2QgdG8gb3V0cHV0IGFzIGh0bWwiCiAgICBdLAogICAgImRvbV9kb2N1bWVudF9zYXZlX2h0bWxfZmlsZSI6IFsKICAgICAgICAiaW50IGRvbV9kb2N1bWVudF9zYXZlX2h0bWxfZmlsZShzdHJpbmcgZmlsZSk7IiwKICAgICAgICAiQ29udmVuaWVuY2UgbWV0aG9kIHRvIHNhdmUgdG8gZmlsZSBhcyBodG1sIgogICAgXSwKICAgICJkb21fZG9jdW1lbnRfc2F2ZXhtbCI6IFsKICAgICAgICAic3RyaW5nIGRvbV9kb2N1bWVudF9zYXZleG1sKFtub2RlIG5dKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUxTL2xvYWQtc2F2ZS5odG1sI0xTLURvY3VtZW50TFMtc2F2ZVhNTCBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9kb2N1bWVudF9zY2hlbWFfdmFsaWRhdGUiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZShzdHJpbmcgc291cmNlKTsgKi8iLAogICAgICAgICJQSFBfRlVOQ1RJT04oZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZV94bWwpIHsgIF9kb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBET01fTE9BRF9TVFJJTkcpOyB9IC8qIH19fSBlbmQgZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZSIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3NjaGVtYV92YWxpZGF0ZV9maWxlIjogWwogICAgICAgICJib29sZWFuIGRvbV9kb2N1bWVudF9zY2hlbWFfdmFsaWRhdGVfZmlsZShzdHJpbmcgZmlsZW5hbWUpOyAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihkb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlX2ZpbGUpIHsgIF9kb21fZG9jdW1lbnRfc2NoZW1hX3ZhbGlkYXRlKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBET01fTE9BRF9GSUxFKTsgfSAvKiB9fX0gZW5kIGRvbV9kb2N1bWVudF9zY2hlbWFfdmFsaWRhdGVfZmlsZSIKICAgIF0sCiAgICAiZG9tX2RvY3VtZW50X3ZhbGlkYXRlIjogWwogICAgICAgICJib29sZWFuIGRvbV9kb2N1bWVudF92YWxpZGF0ZSgpOyIsCiAgICAgICAgIlNpbmNlOiBET00gZXh0ZW5kZWQiCiAgICBdLAogICAgImRvbV9kb2N1bWVudF94aW5jbHVkZSI6IFsKICAgICAgICAiaW50IGRvbV9kb2N1bWVudF94aW5jbHVkZShbaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlN1YnN0aXR1dHVlcyB4aW5jbHVkZXMgaW4gYSBEb21Eb2N1bWVudCIKICAgIF0sCiAgICAiZG9tX2RvbWNvbmZpZ3VyYXRpb25fY2FuX3NldF9wYXJhbWV0ZXIiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX2RvbWNvbmZpZ3VyYXRpb25fY2FuX3NldF9wYXJhbWV0ZXIoc3RyaW5nIG5hbWUsIGRvbXVzZXJkYXRhIHZhbHVlKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNET01Db25maWd1cmF0aW9uLWNhblNldFBhcmFtZXRlciBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21jb25maWd1cmF0aW9uX2dldF9wYXJhbWV0ZXIiOiBbCiAgICAgICAgImRvbWRvbXVzZXJkYXRhIGRvbV9kb21jb25maWd1cmF0aW9uX2dldF9wYXJhbWV0ZXIoc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0RPTUNvbmZpZ3VyYXRpb24tZ2V0UGFyYW1ldGVyIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2RvbWNvbmZpZ3VyYXRpb25fc2V0X3BhcmFtZXRlciI6IFsKICAgICAgICAiZG9tX3ZvaWQgZG9tX2RvbWNvbmZpZ3VyYXRpb25fc2V0X3BhcmFtZXRlcihzdHJpbmcgbmFtZSwgZG9tdXNlcmRhdGEgdmFsdWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0RPTUNvbmZpZ3VyYXRpb24tcHJvcGVydHkgU2luY2U6IgogICAgXSwKICAgICJkb21fZG9tZXJyb3JoYW5kbGVyX2hhbmRsZV9lcnJvciI6IFsKICAgICAgICAiZG9tX2Jvb2xlYW4gZG9tX2RvbWVycm9yaGFuZGxlcl9oYW5kbGVfZXJyb3IoZG9tZXJyb3IgZXJyb3IpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0lELUVSUk9SUy1ET01FcnJvckhhbmRsZXItaGFuZGxlRXJyb3IgU2luY2U6IgogICAgXSwKICAgICJkb21fZG9taW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50IjogWwogICAgICAgICJET01Eb2N1bWVudCBkb21fZG9taW1wbGVtZW50YXRpb25fY3JlYXRlX2RvY3VtZW50KHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBxdWFsaWZpZWROYW1lLCBET01Eb2N1bWVudFR5cGUgZG9jdHlwZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTGV2ZWwtMi1Db3JlLURPTS1jcmVhdGVEb2N1bWVudCBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnRfdHlwZSI6IFsKICAgICAgICAiRE9NRG9jdW1lbnRUeXBlIGRvbV9kb21pbXBsZW1lbnRhdGlvbl9jcmVhdGVfZG9jdW1lbnRfdHlwZShzdHJpbmcgcXVhbGlmaWVkTmFtZSwgc3RyaW5nIHB1YmxpY0lkLCBzdHJpbmcgc3lzdGVtSWQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI0xldmVsLTItQ29yZS1ET00tY3JlYXRlRG9jVHlwZSBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbl9nZXRfZmVhdHVyZSI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fZG9taW1wbGVtZW50YXRpb25fZ2V0X2ZlYXR1cmUoc3RyaW5nIGZlYXR1cmUsIHN0cmluZyB2ZXJzaW9uKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNET01JbXBsZW1lbnRhdGlvbjMtZ2V0RmVhdHVyZSBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbl9oYXNfZmVhdHVyZSI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fZG9taW1wbGVtZW50YXRpb25faGFzX2ZlYXR1cmUoc3RyaW5nIGZlYXR1cmUsIHN0cmluZyB2ZXJzaW9uKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNJRC01Q0VEOTRENyBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbmxpc3RfaXRlbSI6IFsKICAgICAgICAiZG9tZG9taW1wbGVtZW50YXRpb24gZG9tX2RvbWltcGxlbWVudGF0aW9ubGlzdF9pdGVtKGludCBpbmRleCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjRE9NSW1wbGVtZW50YXRpb25MaXN0LWl0ZW0gU2luY2U6IgogICAgXSwKICAgICJkb21fZG9taW1wbGVtZW50YXRpb25zb3VyY2VfZ2V0X2RvbWltcGxlbWVudGF0aW9uIjogWwogICAgICAgICJkb21kb21pbXBsZW1lbnRhdGlvbiBkb21fZG9taW1wbGVtZW50YXRpb25zb3VyY2VfZ2V0X2RvbWltcGxlbWVudGF0aW9uKHN0cmluZyBmZWF0dXJlcyk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjSUQtZ2V0RE9NSW1wbCBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21pbXBsZW1lbnRhdGlvbnNvdXJjZV9nZXRfZG9taW1wbGVtZW50YXRpb25zIjogWwogICAgICAgICJkb21pbXBsZW1lbnRhdGlvbmxpc3QgZG9tX2RvbWltcGxlbWVudGF0aW9uc291cmNlX2dldF9kb21pbXBsZW1lbnRhdGlvbnMoc3RyaW5nIGZlYXR1cmVzKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNJRC1nZXRET01JbXBscyBTaW5jZToiCiAgICBdLAogICAgImRvbV9kb21zdHJpbmdsaXN0X2l0ZW0iOiBbCiAgICAgICAgImRvbXN0cmluZyBkb21fZG9tc3RyaW5nbGlzdF9pdGVtKGludCBpbmRleCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjRE9NU3RyaW5nTGlzdC1pdGVtIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAic3RyaW5nIGRvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGUoc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtNjY2RUUwRjkgU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25vZGUiOiBbCiAgICAgICAgIkRPTUF0dHIgZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlKHN0cmluZyBuYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTIxN0E5MUI4IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ub2RlX25zIjogWwogICAgICAgICJET01BdHRyIGRvbV9lbGVtZW50X2dldF9hdHRyaWJ1dGVfbm9kZV9ucyhzdHJpbmcgbmFtZXNwYWNlVVJJLCBzdHJpbmcgbG9jYWxOYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsR2V0QXROb2RlTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fZWxlbWVudF9nZXRfYXR0cmlidXRlX25zIjogWwogICAgICAgICJzdHJpbmcgZG9tX2VsZW1lbnRfZ2V0X2F0dHJpYnV0ZV9ucyhzdHJpbmcgbmFtZXNwYWNlVVJJLCBzdHJpbmcgbG9jYWxOYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsR2V0QXR0ck5TIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfZ2V0X2VsZW1lbnRzX2J5X3RhZ19uYW1lIjogWwogICAgICAgICJET01Ob2RlTGlzdCBkb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWUoc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtMTkzODkxOEQgU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9nZXRfZWxlbWVudHNfYnlfdGFnX25hbWVfbnMiOiBbCiAgICAgICAgIkRPTU5vZGVMaXN0IGRvbV9lbGVtZW50X2dldF9lbGVtZW50c19ieV90YWdfbmFtZV9ucyhzdHJpbmcgbmFtZXNwYWNlVVJJLCBzdHJpbmcgbG9jYWxOYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUE2QzkwOTQyIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZSI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fZWxlbWVudF9oYXNfYXR0cmlidXRlKHN0cmluZyBuYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsSGFzQXR0ciBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9lbGVtZW50X2hhc19hdHRyaWJ1dGVfbnMiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX2VsZW1lbnRfaGFzX2F0dHJpYnV0ZV9ucyhzdHJpbmcgbmFtZXNwYWNlVVJJLCBzdHJpbmcgbG9jYWxOYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsSGFzQXR0ck5TIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZSI6IFsKICAgICAgICAidm9pZCBkb21fZWxlbWVudF9yZW1vdmVfYXR0cmlidXRlKHN0cmluZyBuYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTZENkFDMEY5IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ub2RlIjogWwogICAgICAgICJET01BdHRyIGRvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbm9kZShET01BdHRyIG9sZEF0dHIpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRDU4OTE5OCBTaW5jZToiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3JlbW92ZV9hdHRyaWJ1dGVfbnMiOiBbCiAgICAgICAgInZvaWQgZG9tX2VsZW1lbnRfcmVtb3ZlX2F0dHJpYnV0ZV9ucyhzdHJpbmcgbmFtZXNwYWNlVVJJLCBzdHJpbmcgbG9jYWxOYW1lKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsUmVtQXROUyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3NldF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgInZvaWQgZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZShzdHJpbmcgbmFtZSwgc3RyaW5nIHZhbHVlKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUY2OEYwODIgU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGUiOiBbCiAgICAgICAgIkRPTUF0dHIgZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlKERPTUF0dHIgbmV3QXR0cik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC04ODcyMzYxNTQgU2luY2U6IgogICAgXSwKICAgICJkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25vZGVfbnMiOiBbCiAgICAgICAgIkRPTUF0dHIgZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ub2RlX25zKERPTUF0dHIgbmV3QXR0cik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1FbFNldEF0Tm9kZU5TIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX2VsZW1lbnRfc2V0X2F0dHJpYnV0ZV9ucyI6IFsKICAgICAgICAidm9pZCBkb21fZWxlbWVudF9zZXRfYXR0cmlidXRlX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBxdWFsaWZpZWROYW1lLCBzdHJpbmcgdmFsdWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtRWxTZXRBdHRyTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fZWxlbWVudF9zZXRfaWRfYXR0cmlidXRlIjogWwogICAgICAgICJ2b2lkIGRvbV9lbGVtZW50X3NldF9pZF9hdHRyaWJ1dGUoc3RyaW5nIG5hbWUsIGJvb2xlYW4gaXNJZCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1FbFNldElkQXR0ciBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9lbGVtZW50X3NldF9pZF9hdHRyaWJ1dGVfbm9kZSI6IFsKICAgICAgICAidm9pZCBkb21fZWxlbWVudF9zZXRfaWRfYXR0cmlidXRlX25vZGUoYXR0ciBpZEF0dHIsIGJvb2xlYW4gaXNJZCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1FbFNldElkQXR0ck5vZGUgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fZWxlbWVudF9zZXRfaWRfYXR0cmlidXRlX25zIjogWwogICAgICAgICJ2b2lkIGRvbV9lbGVtZW50X3NldF9pZF9hdHRyaWJ1dGVfbnMoc3RyaW5nIG5hbWVzcGFjZVVSSSwgc3RyaW5nIGxvY2FsTmFtZSwgYm9vbGVhbiBpc0lkKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELUVsU2V0SWRBdHRyTlMgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21faW1wb3J0X3NpbXBsZXhtbCI6IFsKICAgICAgICAic29tTm9kZSBkb21faW1wb3J0X3NpbXBsZXhtbChzeGVvYmplY3Qgbm9kZSkiLAogICAgICAgICJHZXQgYSBzaW1wbGV4bWxfZWxlbWVudCBvYmplY3QgZnJvbSBkb20gdG8gYWxsb3cgZm9yIHByb2Nlc3NpbmciCiAgICBdLAogICAgImRvbV9uYW1lZG5vZGVtYXBfZ2V0X25hbWVkX2l0ZW0iOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX25hbWVkbm9kZW1hcF9nZXRfbmFtZWRfaXRlbShzdHJpbmcgbmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC0xMDc0NTc3NTQ5IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25hbWVkbm9kZW1hcF9nZXRfbmFtZWRfaXRlbV9ucyI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fbmFtZWRub2RlbWFwX2dldF9uYW1lZF9pdGVtX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtZ2V0TmFtZWRJdGVtTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fbmFtZWRub2RlbWFwX2l0ZW0iOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX25hbWVkbm9kZW1hcF9pdGVtKGludCBpbmRleCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC0zNDk0NjdGOSBTaW5jZToiCiAgICBdLAogICAgImRvbV9uYW1lZG5vZGVtYXBfcmVtb3ZlX25hbWVkX2l0ZW0iOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX25hbWVkbm9kZW1hcF9yZW1vdmVfbmFtZWRfaXRlbShzdHJpbmcgbmFtZSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1ENThCMTkzIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25hbWVkbm9kZW1hcF9yZW1vdmVfbmFtZWRfaXRlbV9ucyI6IFsKICAgICAgICAiRE9NTm9kZSBkb21fbmFtZWRub2RlbWFwX3JlbW92ZV9uYW1lZF9pdGVtX25zKHN0cmluZyBuYW1lc3BhY2VVUkksIHN0cmluZyBsb2NhbE5hbWUpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtcmVtb3ZlTmFtZWRJdGVtTlMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fbmFtZWRub2RlbWFwX3NldF9uYW1lZF9pdGVtIjogWwogICAgICAgICJET01Ob2RlIGRvbV9uYW1lZG5vZGVtYXBfc2V0X25hbWVkX2l0ZW0oRE9NTm9kZSBhcmcpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtMTAyNTE2Mzc4OCBTaW5jZToiCiAgICBdLAogICAgImRvbV9uYW1lZG5vZGVtYXBfc2V0X25hbWVkX2l0ZW1fbnMiOiBbCiAgICAgICAgIkRPTU5vZGUgZG9tX25hbWVkbm9kZW1hcF9zZXRfbmFtZWRfaXRlbV9ucyhET01Ob2RlIGFyZyk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC1zZXROYW1lZEl0ZW1OUyBTaW5jZTogRE9NIExldmVsIDIiCiAgICBdLAogICAgImRvbV9uYW1lbGlzdF9nZXRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIGRvbV9uYW1lbGlzdF9nZXRfbmFtZShpbnQgaW5kZXgpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI05hbWVMaXN0LWdldE5hbWUgU2luY2U6IgogICAgXSwKICAgICJkb21fbmFtZWxpc3RfZ2V0X25hbWVzcGFjZV91cmkiOiBbCiAgICAgICAgInN0cmluZyBkb21fbmFtZWxpc3RfZ2V0X25hbWVzcGFjZV91cmkoaW50IGluZGV4KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOYW1lTGlzdC1nZXROYW1lc3BhY2VVUkkgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9hcHBlbmRfY2hpbGQiOiBbCiAgICAgICAgIkRvbU5vZGUgZG9tX25vZGVfYXBwZW5kX2NoaWxkKERvbU5vZGUgbmV3Q2hpbGQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtMTg0RTcxMDcgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9jbG9uZV9ub2RlIjogWwogICAgICAgICJEb21Ob2RlIGRvbV9ub2RlX2Nsb25lX25vZGUoYm9vbGVhbiBkZWVwKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTNBMEVEMEE0IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25vZGVfY29tcGFyZV9kb2N1bWVudF9wb3NpdGlvbiI6IFsKICAgICAgICAic2hvcnQgZG9tX25vZGVfY29tcGFyZV9kb2N1bWVudF9wb3NpdGlvbihEb21Ob2RlIG90aGVyKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOb2RlMy1jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9ub2RlX2dldF9mZWF0dXJlIjogWwogICAgICAgICJEb21Ob2RlIGRvbV9ub2RlX2dldF9mZWF0dXJlKHN0cmluZyBmZWF0dXJlLCBzdHJpbmcgdmVyc2lvbik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTm9kZTMtZ2V0RmVhdHVyZSBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9ub2RlX2dldF91c2VyX2RhdGEiOiBbCiAgICAgICAgIm1peGVkIGRvbV9ub2RlX2dldF91c2VyX2RhdGEoc3RyaW5nIGtleSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTm9kZTMtZ2V0VXNlckRhdGEgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fbm9kZV9oYXNfYXR0cmlidXRlcyI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fbm9kZV9oYXNfYXR0cmlidXRlcygpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtTm9kZUhhc0F0dHJzIFNpbmNlOiBET00gTGV2ZWwgMiIKICAgIF0sCiAgICAiZG9tX25vZGVfaGFzX2NoaWxkX25vZGVzIjogWwogICAgICAgICJib29sZWFuIGRvbV9ub2RlX2hhc19jaGlsZF9ub2RlcygpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtODEwNTk0MTg3IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25vZGVfaW5zZXJ0X2JlZm9yZSI6IFsKICAgICAgICAiZG9tbm9kZSBkb21fbm9kZV9pbnNlcnRfYmVmb3JlKERvbU5vZGUgbmV3Q2hpbGQsIERvbU5vZGUgcmVmQ2hpbGQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtOTUyMjgwNzI3IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25vZGVfaXNfZGVmYXVsdF9uYW1lc3BhY2UiOiBbCiAgICAgICAgImJvb2xlYW4gZG9tX25vZGVfaXNfZGVmYXVsdF9uYW1lc3BhY2Uoc3RyaW5nIG5hbWVzcGFjZVVSSSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1Db3JlL2NvcmUuaHRtbCNOb2RlMy1pc0RlZmF1bHROYW1lc3BhY2UgU2luY2U6IERPTSBMZXZlbCAzIgogICAgXSwKICAgICJkb21fbm9kZV9pc19lcXVhbF9ub2RlIjogWwogICAgICAgICJib29sZWFuIGRvbV9ub2RlX2lzX2VxdWFsX25vZGUoRG9tTm9kZSBhcmcpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI05vZGUzLWlzRXF1YWxOb2RlIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVfaXNfc2FtZV9ub2RlIjogWwogICAgICAgICJib29sZWFuIGRvbV9ub2RlX2lzX3NhbWVfbm9kZShEb21Ob2RlIG90aGVyKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOb2RlMy1pc1NhbWVOb2RlIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVfaXNfc3VwcG9ydGVkIjogWwogICAgICAgICJib29sZWFuIGRvbV9ub2RlX2lzX3N1cHBvcnRlZChzdHJpbmcgZmVhdHVyZSwgc3RyaW5nIHZlcnNpb24pOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtTGV2ZWwtMi1Db3JlLU5vZGUtc3VwcG9ydHMgU2luY2U6IERPTSBMZXZlbCAyIgogICAgXSwKICAgICJkb21fbm9kZV9sb29rdXBfbmFtZXNwYWNlX3VyaSI6IFsKICAgICAgICAic3RyaW5nIGRvbV9ub2RlX2xvb2t1cF9uYW1lc3BhY2VfdXJpKHN0cmluZyBwcmVmaXgpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9jb3JlLmh0bWwjTm9kZTMtbG9va3VwTmFtZXNwYWNlVVJJIFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVfbG9va3VwX3ByZWZpeCI6IFsKICAgICAgICAic3RyaW5nIGRvbV9ub2RlX2xvb2t1cF9wcmVmaXgoc3RyaW5nIG5hbWVzcGFjZVVSSSk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjTm9kZTMtbG9va3VwTmFtZXNwYWNlUHJlZml4IFNpbmNlOiBET00gTGV2ZWwgMyIKICAgIF0sCiAgICAiZG9tX25vZGVfbm9ybWFsaXplIjogWwogICAgICAgICJ2b2lkIGRvbV9ub2RlX25vcm1hbGl6ZSgpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtSUQtbm9ybWFsaXplIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX25vZGVfcmVtb3ZlX2NoaWxkIjogWwogICAgICAgICJEb21Ob2RlIGRvbV9ub2RlX3JlbW92ZV9jaGlsZChEb21Ob2RlIG9sZENoaWxkKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTE3MzQ4MzQwNjYgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9yZXBsYWNlX2NoaWxkIjogWwogICAgICAgICJEb21Ob2RlIGRvbV9ub2RlX3JlcGxhY2VfY2hpbGQoRG9tTm9kZSBuZXdDaGlsZCwgRG9tTm9kZSBvbGRDaGlsZCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjY29yZS1JRC03ODU4ODczMDcgU2luY2U6IgogICAgXSwKICAgICJkb21fbm9kZV9zZXRfdXNlcl9kYXRhIjogWwogICAgICAgICJtaXhlZCBkb21fbm9kZV9zZXRfdXNlcl9kYXRhKHN0cmluZyBrZXksIG1peGVkIGRhdGEsIHVzZXJkYXRhaGFuZGxlciBoYW5kbGVyKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNOb2RlMy1zZXRVc2VyRGF0YSBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV9ub2RlbGlzdF9pdGVtIjogWwogICAgICAgICJET01Ob2RlIGRvbV9ub2RlbGlzdF9pdGVtKGludCBpbmRleCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjSUQtODQ0Mzc3MTM2IFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX3N0cmluZ19leHRlbmRfZmluZF9vZmZzZXQxNiI6IFsKICAgICAgICAiaW50IGRvbV9zdHJpbmdfZXh0ZW5kX2ZpbmRfb2Zmc2V0MTYoaW50IG9mZnNldDMyKTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNpMThuLW1ldGhvZHMtU3RyaW5nRXh0ZW5kLWZpbmRPZmZzZXQxNiBTaW5jZToiCiAgICBdLAogICAgImRvbV9zdHJpbmdfZXh0ZW5kX2ZpbmRfb2Zmc2V0MzIiOiBbCiAgICAgICAgImludCBkb21fc3RyaW5nX2V4dGVuZF9maW5kX29mZnNldDMyKGludCBvZmZzZXQxNik7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjaTE4bi1tZXRob2RzLVN0cmluZ0V4dGVuZC1maW5kT2Zmc2V0MzIgU2luY2U6IgogICAgXSwKICAgICJkb21fdGV4dF9pc193aGl0ZXNwYWNlX2luX2VsZW1lbnRfY29udGVudCI6IFsKICAgICAgICAiYm9vbGVhbiBkb21fdGV4dF9pc193aGl0ZXNwYWNlX2luX2VsZW1lbnRfY29udGVudCgpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtVGV4dDMtaXNXaGl0ZXNwYWNlSW5FbGVtZW50Q29udGVudCBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV90ZXh0X3JlcGxhY2Vfd2hvbGVfdGV4dCI6IFsKICAgICAgICAiRE9NVGV4dCBkb21fdGV4dF9yZXBsYWNlX3dob2xlX3RleHQoc3RyaW5nIGNvbnRlbnQpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sI2NvcmUtVGV4dDMtcmVwbGFjZVdob2xlVGV4dCBTaW5jZTogRE9NIExldmVsIDMiCiAgICBdLAogICAgImRvbV90ZXh0X3NwbGl0X3RleHQiOiBbCiAgICAgICAgIkRPTVRleHQgZG9tX3RleHRfc3BsaXRfdGV4dChpbnQgb2Zmc2V0KTsiLAogICAgICAgICJVUkw6IGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtQ29yZS0yMDAzMDIyNi9ET00zLUNvcmUuaHRtbCNjb3JlLUlELTM4ODUzQzFEIFNpbmNlOiIKICAgIF0sCiAgICAiZG9tX3VzZXJkYXRhaGFuZGxlcl9oYW5kbGUiOiBbCiAgICAgICAgImRvbV92b2lkIGRvbV91c2VyZGF0YWhhbmRsZXJfaGFuZGxlKHNob3J0IG9wZXJhdGlvbiwgc3RyaW5nIGtleSwgZG9tb2JqZWN0IGRhdGEsIG5vZGUgc3JjLCBub2RlIGRzdCk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjSUQtaGFuZGxlVXNlckRhdGFFdmVudCBTaW5jZToiCiAgICBdLAogICAgImRvbV94cGF0aF9ldmFsdWF0ZSI6IFsKICAgICAgICAibWl4ZWQgZG9tX3hwYXRoX2V2YWx1YXRlKHN0cmluZyBleHByIFssRE9NTm9kZSBjb250ZXh0XSk7ICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKGRvbV94cGF0aF9ldmFsdWF0ZSkgeyAgcGhwX3hwYXRoX2V2YWwoSU5URVJOQUxfRlVOQ1RJT05fUEFSQU1fUEFTU1RIUlUsIFBIUF9ET01fWFBBVEhfRVZBTFVBVEUpOyB9IC8qIH19fSBlbmQgZG9tX3hwYXRoX2V2YWx1YXRlIgogICAgXSwKICAgICJkb21feHBhdGhfcXVlcnkiOiBbCiAgICAgICAgIkRPTU5vZGVMaXN0IGRvbV94cGF0aF9xdWVyeShzdHJpbmcgZXhwciBbLERPTU5vZGUgY29udGV4dF0pOyAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihkb21feHBhdGhfcXVlcnkpIHsgIHBocF94cGF0aF9ldmFsKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNX1BBU1NUSFJVLCBQSFBfRE9NX1hQQVRIX1FVRVJZKTsgfSAvKiB9fX0gZW5kIGRvbV94cGF0aF9xdWVyeSIKICAgIF0sCiAgICAiZG9tX3hwYXRoX3JlZ2lzdGVyX25zIjogWwogICAgICAgICJib29sZWFuIGRvbV94cGF0aF9yZWdpc3Rlcl9ucyhzdHJpbmcgcHJlZml4LCBzdHJpbmcgdXJpKTsgKi8iLAogICAgICAgICJQSFBfRlVOQ1RJT04oZG9tX3hwYXRoX3JlZ2lzdGVyX25zKSB7ICB6dmFsICppZDsgIHhtbFhQYXRoQ29udGV4dFB0ciBjdHhwOyAgaW50IHByZWZpeF9sZW4sIG5zX3VyaV9sZW47ICBkb21feHBhdGhfb2JqZWN0ICppbnRlcm47ICB1bnNpZ25lZCBjaGFyICpwcmVmaXgsICpuc191cmk7ICAgaWYgKHplbmRfcGFyc2VfbWV0aG9kX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgZ2V0VGhpcygpLCBcIk9zc1wiLCAmaWQsIGRvbV94cGF0aF9jbGFzc19lbnRyeSwgJnByZWZpeCwgJnByZWZpeF9sZW4sICZuc191cmksICZuc191cmlfbGVuKSA9PSBGQUlMVVJFKSB7ICAgcmV0dXJuOyAgfSAgIGludGVybiA9IChkb21feHBhdGhfb2JqZWN0ICopemVuZF9vYmplY3Rfc3RvcmVfZ2V0X29iamVjdChpZCBUU1JNTFNfQ0MpOyAgIGN0eHAgPSAoeG1sWFBhdGhDb250ZXh0UHRyKSBpbnRlcm4tPnB0cjsgIGlmIChjdHhwID09IE5VTEwpIHsgICBwaHBfZXJyb3JfZG9jcmVmKE5VTEwgVFNSTUxTX0NDLCBFX1dBUk5JTkcsIFwiSW52YWxpZCBYUGF0aCBDb250ZXh0XCIpOyAgIFJFVFVSTl9GQUxTRTsgIH0gICBpZiAoeG1sWFBhdGhSZWdpc3Rlck5zKGN0eHAsIHByZWZpeCwgbnNfdXJpKSAhPSAwKSB7ICAgUkVUVVJOX0ZBTFNFICB9ICBSRVRVUk5fVFJVRTsgfSAvKiB9fX0iCiAgICBdLAogICAgImRvbV94cGF0aF9yZWdpc3Rlcl9waHBfZnVuY3Rpb25zIjogWwogICAgICAgICJ2b2lkIGRvbV94cGF0aF9yZWdpc3Rlcl9waHBfZnVuY3Rpb25zKCkgKi8iLAogICAgICAgICJQSFBfRlVOQ1RJT04oZG9tX3hwYXRoX3JlZ2lzdGVyX3BocF9mdW5jdGlvbnMpIHsgIHp2YWwgKmlkOyAgZG9tX3hwYXRoX29iamVjdCAqaW50ZXJuOyAgenZhbCAqYXJyYXlfdmFsdWUsICoqZW50cnksICpuZXdfc3RyaW5nOyAgaW50ICBuYW1lX2xlbiA9IDA7ICBjaGFyICpuYW1lOyAgIERPTV9HRVRfVEhJUyhpZCk7ICAgIGlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnNfZXgoWkVORF9QQVJTRV9QQVJBTVNfUVVJRVQsIFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsIFwiYVwiLCAgJmFycmF5X3ZhbHVlKSA9PSBTVUNDRVNTKSB7ICAgaW50ZXJuID0gKGRvbV94cGF0aF9vYmplY3QgKil6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KGlkIFRTUk1MU19DQyk7ICAgemVuZF9oYXNoX2ludGVybmFsX3BvaW50ZXJfcmVzZXQoWl9BUlJWQUxfUChhcnJheV92YWx1ZSkpOyAgICB3aGlsZSAoemVuZF9oYXNoX2dldF9jdXJyZW50X2RhdGEoWl9BUlJWQUxfUChhcnJheV92YWx1ZSksICh2b2lkICoqKSZlbnRyeSkgPT0gU1VDQ0VTUykgeyAgICBTRVBBUkFURV9aVkFMKGVudHJ5KTsgICAgY29udmVydF90b19zdHJpbmdfZXgoZW50cnkpOyAgICAgTUFLRV9TVERfWlZBTChuZXdfc3RyaW5nKTsgICAgWlZBTF9MT05HKG5ld19zdHJpbmcsMSk7ICAgICAgIHplbmRfaGFzaF91cGRhdGUoaW50ZXJuLT5yZWdpc3RlcmVkX3BocGZ1bmN0aW9ucywgWl9TVFJWQUxfUFAoZW50cnkpLCBaX1NUUkxFTl9QUChlbnRyeSkgKyAxLCAmbmV3X3N0cmluZywgc2l6ZW9mKHp2YWwqKSwgTlVMTCk7ICAgIHplbmRfaGFzaF9tb3ZlX2ZvcndhcmQoWl9BUlJWQUxfUChhcnJheV92YWx1ZSkpOyAgIH0gICBpbnRlcm4tPnJlZ2lzdGVyUGhwRnVuY3Rpb25zID0gMjsgICBSRVRVUk5fVFJVRTsgICB9IGVsc2UgaWYgKHplbmRfcGFyc2VfcGFyYW1ldGVyc19leChaRU5EX1BBUlNFX1BBUkFNU19RVUlFVCwgWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgXCJzXCIsICAmbmFtZSwgJm5hbWVfbGVuKSA9PSBTVUNDRVNTKSB7ICAgaW50ZXJuID0gKGRvbV94cGF0aF9vYmplY3QgKil6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KGlkIFRTUk1MU19DQyk7ICAgICAgTUFLRV9TVERfWlZBTChuZXdfc3RyaW5nKTsgICBaVkFMX0xPTkcobmV3X3N0cmluZywxKTsgICB6ZW5kX2hhc2hfdXBkYXRlKGludGVybi0+cmVnaXN0ZXJlZF9waHBmdW5jdGlvbnMsIG5hbWUsIG5hbWVfbGVuICsgMSwgJm5ld19zdHJpbmcsIHNpemVvZih6dmFsKiksIE5VTEwpOyAgIGludGVybi0+cmVnaXN0ZXJQaHBGdW5jdGlvbnMgPSAyOyAgICAgfSBlbHNlIHsgICBpbnRlcm4gPSAoZG9tX3hwYXRoX29iamVjdCAqKXplbmRfb2JqZWN0X3N0b3JlX2dldF9vYmplY3QoaWQgVFNSTUxTX0NDKTsgICBpbnRlcm4tPnJlZ2lzdGVyUGhwRnVuY3Rpb25zID0gMTsgIH0gICB9IC8qIH19fSBlbmQgZG9tX3hwYXRoX3JlZ2lzdGVyX3BocF9mdW5jdGlvbnMiCiAgICBdLAogICAgImVhY2giOiBbCiAgICAgICAgImFycmF5IGVhY2goYXJyYXkgYXJyKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudGx5IHBvaW50ZWQga2V5Li52YWx1ZSBwYWlyIGluIHRoZSBwYXNzZWQgYXJyYXksIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IGVsZW1lbnQiCiAgICBdLAogICAgImVhc3Rlcl9kYXRlIjogWwogICAgICAgICJpbnQgZWFzdGVyX2RhdGUoW2ludCB5ZWFyXSkiLAogICAgICAgICJSZXR1cm4gdGhlIHRpbWVzdGFtcCBvZiBtaWRuaWdodCBvbiBFYXN0ZXIgb2YgYSBnaXZlbiB5ZWFyIChkZWZhdWx0cyB0byBjdXJyZW50IHllYXIpIgogICAgXSwKICAgICJlYXN0ZXJfZGF5cyI6IFsKICAgICAgICAiaW50IGVhc3Rlcl9kYXlzKFtpbnQgeWVhciwgW2ludCBtZXRob2RdXSkiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiBkYXlzIGFmdGVyIE1hcmNoIDIxIHRoYXQgRWFzdGVyIGZhbGxzIG9uIGZvciBhIGdpdmVuIHllYXIgKGRlZmF1bHRzIHRvIGN1cnJlbnQgeWVhcikiCiAgICBdLAogICAgImVjaG8iOiBbCiAgICAgICAgInZvaWQgZWNobyhzdHJpbmcgYXJnMSBbLCBzdHJpbmcgLi4uXSkiLAogICAgICAgICJPdXRwdXQgb25lIG9yIG1vcmUgc3RyaW5ncyIKICAgIF0sCiAgICAiZW1wdHkiOiBbCiAgICAgICAgImJvb2wgZW1wdHkoIG1peGVkIHZhciApIiwKICAgICAgICAiRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YXJpYWJsZSBpcyBlbXB0eSIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfZGVzY3JpYmUiOiBbCiAgICAgICAgImFycmF5IGVuY2hhbnRfYnJva2VyX2Rlc2NyaWJlKHJlc291cmNlIGJyb2tlcikiLAogICAgICAgICJFbnVtZXJhdGVzIHRoZSBFbmNoYW50IHByb3ZpZGVycyBhbmQgdGVsbHMgeW91IHNvbWUgcnVkaW1lbnRhcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS4gVGhlIHNhbWUgaW5mbyBpcyBwcm92aWRlZCB0aHJvdWdoIHBocGluZm8oKSIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgZW5jaGFudF9icm9rZXJfZGljdF9leGlzdHMocmVzb3VyY2UgYnJva2VyLCBzdHJpbmcgdGFnKSIsCiAgICAgICAgIldoZXRoZXIgYSBkaWN0aW9uYXJ5IGV4aXN0cyBvciBub3QuIFVzaW5nIG5vbi1lbXB0eSB0YWciCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX2ZyZWUiOiBbCiAgICAgICAgImJvb2xlYW4gZW5jaGFudF9icm9rZXJfZnJlZShyZXNvdXJjZSBicm9rZXIpIiwKICAgICAgICAiRGVzdHJveXMgdGhlIGJyb2tlciBvYmplY3QgYW5kIGl0cyBkaWN0aW9ubmFyaWVzIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9mcmVlX2RpY3QiOiBbCiAgICAgICAgInJlc291cmNlIGVuY2hhbnRfYnJva2VyX2ZyZWVfZGljdChyZXNvdXJjZSBkaWN0KSIsCiAgICAgICAgIkZyZWUgdGhlIGRpY3Rpb25hcnkgcmVzb3VyY2UiCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX2dldF9kaWN0X3BhdGgiOiBbCiAgICAgICAgInN0cmluZyBlbmNoYW50X2Jyb2tlcl9nZXRfZGljdF9wYXRoKHJlc291cmNlIGJyb2tlciwgaW50IGRpY3RfdHlwZSkiLAogICAgICAgICJHZXQgdGhlIGRpcmVjdG9yeSBwYXRoIGZvciBhIGdpdmVuIGJhY2tlbmQsIHdvcmtzIHdpdGggaXNwZWxsIGFuZCBteXNwZWxsIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9nZXRfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBlbmNoYW50X2Jyb2tlcl9nZXRfZXJyb3IocmVzb3VyY2UgYnJva2VyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGxhc3QgZXJyb3Igb2YgdGhlIGJyb2tlciIKICAgIF0sCiAgICAiZW5jaGFudF9icm9rZXJfaW5pdCI6IFsKICAgICAgICAicmVzb3VyY2UgZW5jaGFudF9icm9rZXJfaW5pdCgpIiwKICAgICAgICAiY3JlYXRlIGEgbmV3IGJyb2tlciBvYmplY3QgY2FwYWJsZSBvZiByZXF1ZXN0aW5nIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9saXN0X2RpY3RzIjogWwogICAgICAgICJzdHJpbmcgZW5jaGFudF9icm9rZXJfbGlzdF9kaWN0cyhyZXNvdXJjZSBicm9rZXIpIiwKICAgICAgICAiTGlzdHMgdGhlIGRpY3Rpb25hcmllcyBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBicm9rZXIiCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdCI6IFsKICAgICAgICAicmVzb3VyY2UgZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KHJlc291cmNlIGJyb2tlciwgc3RyaW5nIHRhZykiLAogICAgICAgICJjcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB1c2luZyB0YWcsIHRoZSBub24tZW1wdHkgbGFuZ3VhZ2UgdGFnIHlvdSB3aXNoIHRvIHJlcXVlc3QgIGEgZGljdGlvbmFyeSBmb3IgKFwiZW5fVVNcIiwgXCJkZV9ERVwiLCAuLi4pIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X3B3bF9kaWN0IjogWwogICAgICAgICJyZXNvdXJjZSBlbmNoYW50X2Jyb2tlcl9yZXF1ZXN0X3B3bF9kaWN0KHJlc291cmNlIGJyb2tlciwgc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgImNyZWF0ZXMgYSBkaWN0aW9uYXJ5IHVzaW5nIGEgUFdMIGZpbGUuIEEgUFdMIGZpbGUgaXMgcGVyc29uYWwgd29yZCBmaWxlIG9uZSB3b3JkIHBlciBsaW5lLiBJdCBtdXN0IGV4aXN0IGJlZm9yZSB0aGUgY2FsbC4iCiAgICBdLAogICAgImVuY2hhbnRfYnJva2VyX3NldF9kaWN0X3BhdGgiOiBbCiAgICAgICAgImJvb2wgZW5jaGFudF9icm9rZXJfc2V0X2RpY3RfcGF0aChyZXNvdXJjZSBicm9rZXIsIGludCBkaWN0X3R5cGUsIHN0cmluZyB2YWx1ZSkiLAogICAgICAgICJTZXQgdGhlIGRpcmVjdG9yeSBwYXRoIGZvciBhIGdpdmVuIGJhY2tlbmQsIHdvcmtzIHdpdGggaXNwZWxsIGFuZCBteXNwZWxsIgogICAgXSwKICAgICJlbmNoYW50X2Jyb2tlcl9zZXRfb3JkZXJpbmciOiBbCiAgICAgICAgImJvb2wgZW5jaGFudF9icm9rZXJfc2V0X29yZGVyaW5nKHJlc291cmNlIGJyb2tlciwgc3RyaW5nIHRhZywgc3RyaW5nIG9yZGVyaW5nKSIsCiAgICAgICAgIkRlY2xhcmVzIGEgcHJlZmVyZW5jZSBvZiBkaWN0aW9uYXJpZXMgdG8gdXNlIGZvciB0aGUgbGFuZ3VhZ2UgIGRlc2NyaWJlZC9yZWZlcnJlZCB0byBieSAndGFnJy4gVGhlIG9yZGVyaW5nIGlzIGEgY29tbWEgZGVsaW1pdGVkICBsaXN0IG9mIHByb3ZpZGVyIG5hbWVzLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgXCIqXCIgdGFnIGNhbiAgYmUgdXNlZCBhcyBhIGxhbmd1YWdlIHRhZyB0byBkZWNsYXJlIGEgZGVmYXVsdCBvcmRlcmluZyBmb3IgYW55ICBsYW5ndWFnZSB0aGF0IGRvZXMgbm90IGV4cGxpY3RseSBkZWNsYXJlIGFuIG9yZGVyaW5nLiIKICAgIF0sCiAgICAiZW5jaGFudF9kaWN0X2FkZF90b19wZXJzb25hbCI6IFsKICAgICAgICAidm9pZCBlbmNoYW50X2RpY3RfYWRkX3RvX3BlcnNvbmFsKHJlc291cmNlIGRpY3QsIHN0cmluZyB3b3JkKSIsCiAgICAgICAgImFkZCAnd29yZCcgdG8gcGVyc29uYWwgd29yZCBsaXN0IgogICAgXSwKICAgICJlbmNoYW50X2RpY3RfYWRkX3RvX3Nlc3Npb24iOiBbCiAgICAgICAgInZvaWQgZW5jaGFudF9kaWN0X2FkZF90b19zZXNzaW9uKHJlc291cmNlIGRpY3QsIHN0cmluZyB3b3JkKSIsCiAgICAgICAgImFkZCAnd29yZCcgdG8gdGhpcyBzcGVsbC1jaGVja2luZyBzZXNzaW9uIgogICAgXSwKICAgICJlbmNoYW50X2RpY3RfY2hlY2siOiBbCiAgICAgICAgImJvb2wgZW5jaGFudF9kaWN0X2NoZWNrKHJlc291cmNlIGRpY3QsIHN0cmluZyB3b3JkKSIsCiAgICAgICAgIklmIHRoZSB3b3JkIGlzIGNvcnJlY3RseSBzcGVsbGVkIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlIgogICAgXSwKICAgICJlbmNoYW50X2RpY3RfZGVzY3JpYmUiOiBbCiAgICAgICAgImFycmF5IGVuY2hhbnRfZGljdF9kZXNjcmliZShyZXNvdXJjZSBkaWN0KSIsCiAgICAgICAgIkRlc2NyaWJlcyBhbiBpbmRpdmlkdWFsIGRpY3Rpb25hcnkgJ2RpY3QnIgogICAgXSwKICAgICJlbmNoYW50X2RpY3RfZ2V0X2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgZW5jaGFudF9kaWN0X2dldF9lcnJvcihyZXNvdXJjZSBkaWN0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGxhc3QgZXJyb3Igb2YgdGhlIGN1cnJlbnQgc3BlbGxpbmctc2Vzc2lvbiIKICAgIF0sCiAgICAiZW5jaGFudF9kaWN0X2lzX2luX3Nlc3Npb24iOiBbCiAgICAgICAgImJvb2wgZW5jaGFudF9kaWN0X2lzX2luX3Nlc3Npb24ocmVzb3VyY2UgZGljdCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAid2hldGhlciBvciBub3QgJ3dvcmQnIGV4aXN0cyBpbiB0aGlzIHNwZWxsaW5nLXNlc3Npb24iCiAgICBdLAogICAgImVuY2hhbnRfZGljdF9xdWlja19jaGVjayI6IFsKICAgICAgICAiYm9vbCBlbmNoYW50X2RpY3RfcXVpY2tfY2hlY2socmVzb3VyY2UgZGljdCwgc3RyaW5nIHdvcmQgWywgYXJyYXkgJnN1Z2dlc3Rpb25zXSkiLAogICAgICAgICJJZiB0aGUgd29yZCBpcyBjb3JyZWN0bHkgc3BlbGxlZCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZSwgaWYgc3VnZ2VzdGlvbnMgdmFyaWFibGUgICAgIGlzIHByb3ZpZGVkLCBmaWxsIGl0IHdpdGggc3BlbGxpbmcgYWx0ZXJuYXRpdmVzLiIKICAgIF0sCiAgICAiZW5jaGFudF9kaWN0X3N0b3JlX3JlcGxhY2VtZW50IjogWwogICAgICAgICJ2b2lkIGVuY2hhbnRfZGljdF9zdG9yZV9yZXBsYWNlbWVudChyZXNvdXJjZSBkaWN0LCBzdHJpbmcgbWlzLCBzdHJpbmcgY29yKSIsCiAgICAgICAgImFkZCBhIGNvcnJlY3Rpb24gZm9yICdtaXMnIHVzaW5nICdjb3InLiAgTm90ZXMgdGhhdCB5b3UgcmVwbGFjZWQgQG1pcyB3aXRoIEBjb3IsIHNvIGl0J3MgcG9zc2libHkgbW9yZSBsaWtlbHkgIHRoYXQgZnV0dXJlIG9jY3VycmVuY2VzIG9mIEBtaXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIEBjb3IuIFNvIGl0IG1pZ2h0ICBidW1wIEBjb3IgdXAgaW4gdGhlIHN1Z2dlc3Rpb24gbGlzdC4iCiAgICBdLAogICAgImVuY2hhbnRfZGljdF9zdWdnZXN0IjogWwogICAgICAgICJhcnJheSBlbmNoYW50X2RpY3Rfc3VnZ2VzdChyZXNvdXJjZSBkaWN0LCBzdHJpbmcgd29yZCkiLAogICAgICAgICJXaWxsIHJldHVybiBhIGxpc3Qgb2YgdmFsdWVzIGlmIGFueSBvZiB0aG9zZSBwcmUtY29uZGl0aW9ucyBhcmUgbm90IG1ldC4iCiAgICBdLAogICAgImVuZCI6IFsKICAgICAgICAibWl4ZWQgZW5kKGFycmF5IGFycmF5X2FyZykiLAogICAgICAgICJBZHZhbmNlcyBhcnJheSBhcmd1bWVudCdzIGludGVybmFsIHBvaW50ZXIgdG8gdGhlIGxhc3QgZWxlbWVudCBhbmQgcmV0dXJuIGl0IgogICAgXSwKICAgICJlcmVnIjogWwogICAgICAgICJpbnQgZXJlZyhzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHN0cmluZyBbLCBhcnJheSByZWdpc3RlcnNdKSIsCiAgICAgICAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCIKICAgIF0sCiAgICAiZXJlZ19yZXBsYWNlIjogWwogICAgICAgICJzdHJpbmcgZXJlZ19yZXBsYWNlKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgcmVwbGFjZW1lbnQsIHN0cmluZyBzdHJpbmcpIiwKICAgICAgICAiUmVwbGFjZSByZWd1bGFyIGV4cHJlc3Npb24iCiAgICBdLAogICAgImVyZWdpIjogWwogICAgICAgICJpbnQgZXJlZ2koc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHJpbmcgWywgYXJyYXkgcmVnaXN0ZXJzXSkiLAogICAgICAgICJDYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCIKICAgIF0sCiAgICAiZXJlZ2lfcmVwbGFjZSI6IFsKICAgICAgICAic3RyaW5nIGVyZWdpX3JlcGxhY2Uoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyByZXBsYWNlbWVudCwgc3RyaW5nIHN0cmluZykiLAogICAgICAgICJDYXNlIGluc2Vuc2l0aXZlIHJlcGxhY2UgcmVndWxhciBleHByZXNzaW9uIgogICAgXSwKICAgICJlcnJvcl9nZXRfbGFzdCI6IFsKICAgICAgICAiYXJyYXkgZXJyb3JfZ2V0X2xhc3QoKSIsCiAgICAgICAgIkdldCB0aGUgbGFzdCBvY2N1cnJlZCBlcnJvciBhcyBhc3NvY2lhdGl2ZSBhcnJheS4gUmV0dXJucyBOVUxMIGlmIHRoZXJlIGhhc24ndCBiZWVuIGFuIGVycm9yIHlldC4iCiAgICBdLAogICAgImVycm9yX2xvZyI6IFsKICAgICAgICAiYm9vbCBlcnJvcl9sb2coc3RyaW5nIG1lc3NhZ2UgWywgaW50IG1lc3NhZ2VfdHlwZSBbLCBzdHJpbmcgZGVzdGluYXRpb24gWywgc3RyaW5nIGV4dHJhX2hlYWRlcnNdXV0pIiwKICAgICAgICAiU2VuZCBhbiBlcnJvciBtZXNzYWdlIHNvbWV3aGVyZSIKICAgIF0sCiAgICAiZXJyb3JfcmVwb3J0aW5nIjogWwogICAgICAgICJpbnQgZXJyb3JfcmVwb3J0aW5nKFtpbnQgbmV3X2Vycm9yX2xldmVsXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgZXJyb3JfcmVwb3J0aW5nIGxldmVsLCBhbmQgaWYgYW4gYXJndW1lbnQgd2FzIHBhc3NlZCAtIGNoYW5nZSB0byB0aGUgbmV3IGxldmVsIgogICAgXSwKICAgICJlc2NhcGVzaGVsbGFyZyI6IFsKICAgICAgICAic3RyaW5nIGVzY2FwZXNoZWxsYXJnKHN0cmluZyBhcmcpIiwKICAgICAgICAiUXVvdGUgYW5kIGVzY2FwZSBhbiBhcmd1bWVudCBmb3IgdXNlIGluIGEgc2hlbGwgY29tbWFuZCIKICAgIF0sCiAgICAiZXNjYXBlc2hlbGxjbWQiOiBbCiAgICAgICAgInN0cmluZyBlc2NhcGVzaGVsbGNtZChzdHJpbmcgY29tbWFuZCkiLAogICAgICAgICJFc2NhcGUgc2hlbGwgbWV0YWNoYXJhY3RlcnMiCiAgICBdLAogICAgImV4ZWMiOiBbCiAgICAgICAgInN0cmluZyBleGVjKHN0cmluZyBjb21tYW5kIFssIGFycmF5ICZvdXRwdXQgWywgaW50ICZyZXR1cm5fdmFsdWVdXSkiLAogICAgICAgICJFeGVjdXRlIGFuIGV4dGVybmFsIHByb2dyYW0iCiAgICBdLAogICAgImV4aWZfaW1hZ2V0eXBlIjogWwogICAgICAgICJpbnQgZXhpZl9pbWFnZXR5cGUoc3RyaW5nIGltYWdlZmlsZSkiLAogICAgICAgICJHZXQgdGhlIHR5cGUgb2YgYW4gaW1hZ2UiCiAgICBdLAogICAgImV4aWZfcmVhZF9kYXRhIjogWwogICAgICAgICJhcnJheSBleGlmX3JlYWRfZGF0YShzdHJpbmcgZmlsZW5hbWUgWywgc2VjdGlvbnNfbmVlZGVkIFssIHN1Yl9hcnJheXNbLCByZWFkX3RodW1ibmFpbF1dXSkiLAogICAgICAgICJSZWFkcyBoZWFkZXIgZGF0YSBmcm9tIHRoZSBKUEVHL1RJRkYgaW1hZ2UgZmlsZW5hbWUgYW5kIG9wdGlvbmFsbHkgcmVhZHMgdGhlIGludGVybmFsIHRodW1ibmFpbHMiCiAgICBdLAogICAgImV4aWZfdGFnbmFtZSI6IFsKICAgICAgICAic3RyaW5nIGV4aWZfdGFnbmFtZShpbmRleCkiLAogICAgICAgICJHZXQgaGVhZGVybmFtZSBmb3IgaW5kZXggb3IgZmFsc2UgaWYgbm90IGRlZmluZWQiCiAgICBdLAogICAgImV4aWZfdGh1bWJuYWlsIjogWwogICAgICAgICJzdHJpbmcgZXhpZl90aHVtYm5haWwoc3RyaW5nIGZpbGVuYW1lIFssICZ3aWR0aCwgJmhlaWdodCBbLCAmaW1hZ2V0eXBlXV0pIiwKICAgICAgICAiUmVhZHMgdGhlIGVtYmVkZGVkIHRodW1ibmFpbCIKICAgIF0sCiAgICAiZXhpdCI6IFsKICAgICAgICAidm9pZCBleGl0KFttaXhlZCBzdGF0dXNdKSIsCiAgICAgICAgIk91dHB1dCBhIG1lc3NhZ2UgYW5kIHRlcm1pbmF0ZSB0aGUgY3VycmVudCBzY3JpcHQiCiAgICBdLAogICAgImV4cCI6IFsKICAgICAgICAiZmxvYXQgZXhwKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIGUgcmFpc2VkIHRvIHRoZSBwb3dlciBvZiB0aGUgbnVtYmVyIgogICAgXSwKICAgICJleHBsb2RlIjogWwogICAgICAgICJhcnJheSBleHBsb2RlKHN0cmluZyBzZXBhcmF0b3IsIHN0cmluZyBzdHIgWywgaW50IGxpbWl0XSkiLAogICAgICAgICJTcGxpdHMgYSBzdHJpbmcgb24gc3RyaW5nIHNlcGFyYXRvciBhbmQgcmV0dXJuIGFycmF5IG9mIGNvbXBvbmVudHMuIElmIGxpbWl0IGlzIHBvc2l0aXZlIG9ubHkgbGltaXQgbnVtYmVyIG9mIGNvbXBvbmVudHMgaXMgcmV0dXJuZWQuIElmIGxpbWl0IGlzIG5lZ2F0aXZlIGFsbCBjb21wb25lbnRzIGV4Y2VwdCB0aGUgbGFzdCBhYnMobGltaXQpIGFyZSByZXR1cm5lZC4iCiAgICBdLAogICAgImV4cG0xIjogWwogICAgICAgICJmbG9hdCBleHBtMShmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyBleHAobnVtYmVyKSAtIDEsIGNvbXB1dGVkIGluIGEgd2F5IHRoYXQgYWNjdXJhdGUgZXZlbiB3aGVuIHRoZSB2YWx1ZSBvZiBudW1iZXIgaXMgY2xvc2UgdG8gemVybyIKICAgIF0sCiAgICAiZXh0ZW5zaW9uX2xvYWRlZCI6IFsKICAgICAgICAiYm9vbCBleHRlbnNpb25fbG9hZGVkKHN0cmluZyBleHRlbnNpb25fbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdGhlIG5hbWVkIGV4dGVuc2lvbiBpcyBsb2FkZWQiCiAgICBdLAogICAgImV4dHJhY3QiOiBbCiAgICAgICAgImludCBleHRyYWN0KGFycmF5IHZhcl9hcnJheSBbLCBpbnQgZXh0cmFjdF90eXBlIFssIHN0cmluZyBwcmVmaXhdXSkiLAogICAgICAgICJJbXBvcnRzIHZhcmlhYmxlcyBpbnRvIHN5bWJvbCB0YWJsZSBmcm9tIGFuIGFycmF5IgogICAgXSwKICAgICJlem1sbV9oYXNoIjogWwogICAgICAgICJpbnQgZXptbG1faGFzaChzdHJpbmcgYWRkcikiLAogICAgICAgICJDYWxjdWxhdGUgRVpNTE0gbGlzdCBoYXNoIHZhbHVlLiIKICAgIF0sCiAgICAiZmNsb3NlIjogWwogICAgICAgICJib29sIGZjbG9zZShyZXNvdXJjZSBmcCkiLAogICAgICAgICJDbG9zZSBhbiBvcGVuIGZpbGUgcG9pbnRlciIKICAgIF0sCiAgICAiZmVvZiI6IFsKICAgICAgICAiYm9vbCBmZW9mKHJlc291cmNlIGZwKSIsCiAgICAgICAgIlRlc3QgZm9yIGVuZC1vZi1maWxlIG9uIGEgZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmZmx1c2giOiBbCiAgICAgICAgImJvb2wgZmZsdXNoKHJlc291cmNlIGZwKSIsCiAgICAgICAgIkZsdXNoZXMgb3V0cHV0IgogICAgXSwKICAgICJmZ2V0YyI6IFsKICAgICAgICAic3RyaW5nIGZnZXRjKHJlc291cmNlIGZwKSIsCiAgICAgICAgIkdldCBhIGNoYXJhY3RlciBmcm9tIGZpbGUgcG9pbnRlciIKICAgIF0sCiAgICAiZmdldGNzdiI6IFsKICAgICAgICAiYXJyYXkgZmdldGNzdihyZXNvdXJjZSBmcCBbLGludCBsZW5ndGggWywgc3RyaW5nIGRlbGltaXRlciBbLCBzdHJpbmcgZW5jbG9zdXJlIFssIHN0cmluZyBlc2NhcGVdXV1dKSIsCiAgICAgICAgIkdldCBsaW5lIGZyb20gZmlsZSBwb2ludGVyIGFuZCBwYXJzZSBmb3IgQ1NWIGZpZWxkcyIKICAgIF0sCiAgICAiZmdldHMiOiBbCiAgICAgICAgInN0cmluZyBmZ2V0cyhyZXNvdXJjZSBmcFssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIkdldCBhIGxpbmUgZnJvbSBmaWxlIHBvaW50ZXIiCiAgICBdLAogICAgImZnZXRzcyI6IFsKICAgICAgICAic3RyaW5nIGZnZXRzcyhyZXNvdXJjZSBmcCBbLCBpbnQgbGVuZ3RoIFssIHN0cmluZyBhbGxvd2FibGVfdGFnc11dKSIsCiAgICAgICAgIkdldCBhIGxpbmUgZnJvbSBmaWxlIHBvaW50ZXIgYW5kIHN0cmlwIEhUTUwgdGFncyIKICAgIF0sCiAgICAiZmlsZSI6IFsKICAgICAgICAiYXJyYXkgZmlsZShzdHJpbmcgZmlsZW5hbWUgWywgaW50IGZsYWdzWywgcmVzb3VyY2UgY29udGV4dF1dKSIsCiAgICAgICAgIlJlYWQgZW50aXJlIGZpbGUgaW50byBhbiBhcnJheSIKICAgIF0sCiAgICAiZmlsZV9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgZmlsZV9leGlzdHMoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlbmFtZSBleGlzdHMiCiAgICBdLAogICAgImZpbGVfZ2V0X2NvbnRlbnRzIjogWwogICAgICAgICJzdHJpbmcgZmlsZV9nZXRfY29udGVudHMoc3RyaW5nIGZpbGVuYW1lIFssIGJvb2wgdXNlX2luY2x1ZGVfcGF0aCBbLCByZXNvdXJjZSBjb250ZXh0IFssIGxvbmcgb2Zmc2V0IFssIGxvbmcgbWF4bGVuXV1dXSkiLAogICAgICAgICJSZWFkIHRoZSBlbnRpcmUgZmlsZSBpbnRvIGEgc3RyaW5nIgogICAgXSwKICAgICJmaWxlX3B1dF9jb250ZW50cyI6IFsKICAgICAgICAiaW50IGZpbGVfcHV0X2NvbnRlbnRzKHN0cmluZyBmaWxlLCBtaXhlZCBkYXRhIFssIGludCBmbGFncyBbLCByZXNvdXJjZSBjb250ZXh0XV0pIiwKICAgICAgICAiV3JpdGUvQ3JlYXRlIGEgZmlsZSB3aXRoIGNvbnRlbnRzIGRhdGEgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4iCiAgICBdLAogICAgImZpbGVhdGltZSI6IFsKICAgICAgICAiaW50IGZpbGVhdGltZShzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiR2V0IGxhc3QgYWNjZXNzIHRpbWUgb2YgZmlsZSIKICAgIF0sCiAgICAiZmlsZWN0aW1lIjogWwogICAgICAgICJpbnQgZmlsZWN0aW1lKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgaW5vZGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgZmlsZSIKICAgIF0sCiAgICAiZmlsZWdyb3VwIjogWwogICAgICAgICJpbnQgZmlsZWdyb3VwKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgZmlsZSBncm91cCIKICAgIF0sCiAgICAiZmlsZWlub2RlIjogWwogICAgICAgICJpbnQgZmlsZWlub2RlKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgZmlsZSBpbm9kZSIKICAgIF0sCiAgICAiZmlsZW10aW1lIjogWwogICAgICAgICJpbnQgZmlsZW10aW1lKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiBmaWxlIgogICAgXSwKICAgICJmaWxlb3duZXIiOiBbCiAgICAgICAgImludCBmaWxlb3duZXIoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBmaWxlIG93bmVyIgogICAgXSwKICAgICJmaWxlcGVybXMiOiBbCiAgICAgICAgImludCBmaWxlcGVybXMoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdldCBmaWxlIHBlcm1pc3Npb25zIgogICAgXSwKICAgICJmaWxlc2l6ZSI6IFsKICAgICAgICAiaW50IGZpbGVzaXplKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgZmlsZSBzaXplIgogICAgXSwKICAgICJmaWxldHlwZSI6IFsKICAgICAgICAic3RyaW5nIGZpbGV0eXBlKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJHZXQgZmlsZSB0eXBlIgogICAgXSwKICAgICJmaWx0ZXJfaGFzX3ZhciI6IFsKICAgICAgICAibWl4ZWQgZmlsdGVyX2hhc192YXIoY29uc3RhbnQgdHlwZSwgc3RyaW5nIHZhcmlhYmxlX25hbWUpIiwKICAgICAgICAiKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhcmlhYmxlIHdpdGggdGhlIG5hbWUgJ25hbWUnIGV4aXN0cyBpbiBzb3VyY2UuIgogICAgXSwKICAgICJmaWx0ZXJfaW5wdXQiOiBbCiAgICAgICAgIm1peGVkIGZpbHRlcl9pbnB1dChjb25zdGFudCB0eXBlLCBzdHJpbmcgdmFyaWFibGVfbmFtZSBbLCBsb25nIGZpbHRlciBbLCBtaXhlZCBvcHRpb25zXV0pIiwKICAgICAgICAiKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCB2YXJpYWJsZSAnbmFtZScqIGZyb20gc291cmNlIGB0eXBlYC4iCiAgICBdLAogICAgImZpbHRlcl9pbnB1dF9hcnJheSI6IFsKICAgICAgICAibWl4ZWQgZmlsdGVyX2lucHV0X2FycmF5KGNvbnN0YW50IHR5cGUsIFssIG1peGVkIG9wdGlvbnNdXSkiLAogICAgICAgICIqIFJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgYXJndW1lbnRzIGRlZmluZWQgaW4gJ2RlZmluaXRpb24nLiIKICAgIF0sCiAgICAiZmlsdGVyX3ZhciI6IFsKICAgICAgICAibWl4ZWQgZmlsdGVyX3ZhcihtaXhlZCB2YXJpYWJsZSBbLCBsb25nIGZpbHRlciBbLCBtaXhlZCBvcHRpb25zXV0pIiwKICAgICAgICAiKiBSZXR1cm5zIHRoZSBmaWx0ZXJlZCB2ZXJzaW9uIG9mIHRoZSB2cmlhYmxlLiIKICAgIF0sCiAgICAiZmlsdGVyX3Zhcl9hcnJheSI6IFsKICAgICAgICAibWl4ZWQgZmlsdGVyX3Zhcl9hcnJheShhcnJheSBkYXRhLCBbLCBtaXhlZCBvcHRpb25zXV0pIiwKICAgICAgICAiKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIGFyZ3VtZW50cyBkZWZpbmVkIGluICdkZWZpbml0aW9uJy4iCiAgICBdLAogICAgImZpbmZvX2J1ZmZlciI6IFsKICAgICAgICAic3RyaW5nIGZpbmZvX2J1ZmZlcihyZXNvdXJjZSBmaW5mbywgY2hhciAqc3RyaW5nIFssIGludCBvcHRpb25zIFssIHJlc291cmNlIGNvbnRleHRdXSkiLAogICAgICAgICJSZXR1cm4gaW5mcm9tYXRpb24gYWJvdXQgYSBzdHJpbmcgYnVmZmVyLiIKICAgIF0sCiAgICAiZmluZm9fY2xvc2UiOiBbCiAgICAgICAgInJlc291cmNlIGZpbmZvX2Nsb3NlKHJlc291cmNlIGZpbmZvKSIsCiAgICAgICAgIkNsb3NlIGZpbGVpbmZvIHJlc291cmNlLiIKICAgIF0sCiAgICAiZmluZm9fZmlsZSI6IFsKICAgICAgICAic3RyaW5nIGZpbmZvX2ZpbGUocmVzb3VyY2UgZmluZm8sIGNoYXIgKmZpbGVfbmFtZSBbLCBpbnQgb3B0aW9ucyBbLCByZXNvdXJjZSBjb250ZXh0XV0pIiwKICAgICAgICAiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZS4iCiAgICBdLAogICAgImZpbmZvX29wZW4iOiBbCiAgICAgICAgInJlc291cmNlIGZpbmZvX29wZW4oW2ludCBvcHRpb25zIFssIHN0cmluZyBhcmddXSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgZmlsZWluZm8gcmVzb3VyY2UuIgogICAgXSwKICAgICJmaW5mb19zZXRfZmxhZ3MiOiBbCiAgICAgICAgImJvb2wgZmluZm9fc2V0X2ZsYWdzKHJlc291cmNlIGZpbmZvLCBpbnQgb3B0aW9ucykiLAogICAgICAgICJTZXQgbGlibWFnaWMgY29uZmlndXJhdGlvbiBvcHRpb25zLiIKICAgIF0sCiAgICAiZmxvYXR2YWwiOiBbCiAgICAgICAgImZsb2F0IGZsb2F0dmFsKG1peGVkIHZhcikiLAogICAgICAgICJHZXQgdGhlIGZsb2F0IHZhbHVlIG9mIGEgdmFyaWFibGUiCiAgICBdLAogICAgImZsb2NrIjogWwogICAgICAgICJib29sIGZsb2NrKHJlc291cmNlIGZwLCBpbnQgb3BlcmF0aW9uIFssIGludCAmd291bGRibG9ja10pIiwKICAgICAgICAiUG9ydGFibGUgZmlsZSBsb2NraW5nIgogICAgXSwKICAgICJmbG9vciI6IFsKICAgICAgICAiZmxvYXQgZmxvb3IoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5leHQgbG93ZXN0IGludGVnZXIgdmFsdWUgZnJvbSB0aGUgbnVtYmVyIgogICAgXSwKICAgICJmbHVzaCI6IFsKICAgICAgICAidm9pZCBmbHVzaCh2b2lkKSIsCiAgICAgICAgIkZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJmbW9kIjogWwogICAgICAgICJmbG9hdCBmbW9kKGZsb2F0IHgsIGZsb2F0IHkpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGRpdmlkaW5nIHggYnkgeSBhcyBhIGZsb2F0IgogICAgXSwKICAgICJmbm1hdGNoIjogWwogICAgICAgICJib29sIGZubWF0Y2goc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgZmxhZ3NdKSIsCiAgICAgICAgIk1hdGNoIGZpbGVuYW1lIGFnYWluc3QgcGF0dGVybiIKICAgIF0sCiAgICAiZm9wZW4iOiBbCiAgICAgICAgInJlc291cmNlIGZvcGVuKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nIG1vZGUgWywgYm9vbCB1c2VfaW5jbHVkZV9wYXRoIFssIHJlc291cmNlIGNvbnRleHRdXSkiLAogICAgICAgICJPcGVuIGEgZmlsZSBvciBhIFVSTCBhbmQgcmV0dXJuIGEgZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmb3J3YXJkX3N0YXRpY19jYWxsIjogWwogICAgICAgICJtaXhlZCBmb3J3YXJkX3N0YXRpY19jYWxsKG1peGVkIGZ1bmN0aW9uX25hbWUgWywgbWl4ZWQgcGFybWV0ZXJdIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiQ2FsbCBhIHVzZXIgZnVuY3Rpb24gd2hpY2ggaXMgdGhlIGZpcnN0IHBhcmFtZXRlciIKICAgIF0sCiAgICAiZnBhc3N0aHJ1IjogWwogICAgICAgICJpbnQgZnBhc3N0aHJ1KHJlc291cmNlIGZwKSIsCiAgICAgICAgIk91dHB1dCBhbGwgcmVtYWluaW5nIGRhdGEgZnJvbSBhIGZpbGUgcG9pbnRlciIKICAgIF0sCiAgICAiZnByaW50ZiI6IFsKICAgICAgICAiaW50IGZwcmludGYocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZm9ybWF0IFssIG1peGVkIGFyZzEgWywgbWl4ZWQgLi4uXV0pIiwKICAgICAgICAiT3V0cHV0IGEgZm9ybWF0dGVkIHN0cmluZyBpbnRvIGEgc3RyZWFtIgogICAgXSwKICAgICJmcHV0Y3N2IjogWwogICAgICAgICJpbnQgZnB1dGNzdihyZXNvdXJjZSBmcCwgYXJyYXkgZmllbGRzIFssIHN0cmluZyBkZWxpbWl0ZXIgWywgc3RyaW5nIGVuY2xvc3VyZV1dKSIsCiAgICAgICAgIkZvcm1hdCBsaW5lIGFzIENTViBhbmQgd3JpdGUgdG8gZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmcmVhZCI6IFsKICAgICAgICAic3RyaW5nIGZyZWFkKHJlc291cmNlIGZwLCBpbnQgbGVuZ3RoKSIsCiAgICAgICAgIkJpbmFyeS1zYWZlIGZpbGUgcmVhZCIKICAgIF0sCiAgICAiZnJlbmNodG9qZCI6IFsKICAgICAgICAiaW50IGZyZW5jaHRvamQoaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgeWVhcikiLAogICAgICAgICJDb252ZXJ0cyBhIGZyZW5jaCByZXB1YmxpYyBjYWxlbmRhciBkYXRlIHRvIGp1bGlhbiBkYXkgY291bnQiCiAgICBdLAogICAgImZzY2FuZiI6IFsKICAgICAgICAibWl4ZWQgZnNjYW5mKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGZvcm1hdCBbLCBzdHJpbmcgLi4uXSkiLAogICAgICAgICJJbXBsZW1lbnRzIGEgbW9zdGx5IEFOU0kgY29tcGF0aWJsZSBmc2NhbmYoKSIKICAgIF0sCiAgICAiZnNlZWsiOiBbCiAgICAgICAgImludCBmc2VlayhyZXNvdXJjZSBmcCwgaW50IG9mZnNldCBbLCBpbnQgd2hlbmNlXSkiLAogICAgICAgICJTZWVrIG9uIGEgZmlsZSBwb2ludGVyIgogICAgXSwKICAgICJmc29ja29wZW4iOiBbCiAgICAgICAgInJlc291cmNlIGZzb2Nrb3BlbihzdHJpbmcgaG9zdG5hbWUsIGludCBwb3J0IFssIGludCBlcnJubyBbLCBzdHJpbmcgZXJyc3RyIFssIGZsb2F0IHRpbWVvdXRdXV0pIiwKICAgICAgICAiT3BlbiBJbnRlcm5ldCBvciBVbml4IGRvbWFpbiBzb2NrZXQgY29ubmVjdGlvbiIKICAgIF0sCiAgICAiZnN0YXQiOiBbCiAgICAgICAgImFycmF5IGZzdGF0KHJlc291cmNlIGZwKSIsCiAgICAgICAgIlN0YXQoKSBvbiBhIGZpbGVoYW5kbGUiCiAgICBdLAogICAgImZ0ZWxsIjogWwogICAgICAgICJpbnQgZnRlbGwocmVzb3VyY2UgZnApIiwKICAgICAgICAiR2V0IGZpbGUgcG9pbnRlcidzIHJlYWQvd3JpdGUgcG9zaXRpb24iCiAgICBdLAogICAgImZ0b2siOiBbCiAgICAgICAgImludCBmdG9rKHN0cmluZyBwYXRobmFtZSwgc3RyaW5nIHByb2opIiwKICAgICAgICAiQ29udmVydCBhIHBhdGhuYW1lIGFuZCBhIHByb2plY3QgaWRlbnRpZmllciB0byBhIFN5c3RlbSBWIElQQyBrZXkiCiAgICBdLAogICAgImZ0cF9hbGxvYyI6IFsKICAgICAgICAiYm9vbCBmdHBfYWxsb2MocmVzb3VyY2Ugc3RyZWFtLCBpbnQgc2l6ZVssICZyZXNwb25zZV0pIiwKICAgICAgICAiQXR0ZW1wdCB0byBhbGxvY2F0ZSBzcGFjZSBvbiB0aGUgcmVtb3RlIEZUUCBzZXJ2ZXIiCiAgICBdLAogICAgImZ0cF9jZHVwIjogWwogICAgICAgICJib29sIGZ0cF9jZHVwKHJlc291cmNlIHN0cmVhbSkiLAogICAgICAgICJDaGFuZ2VzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IgogICAgXSwKICAgICJmdHBfY2hkaXIiOiBbCiAgICAgICAgImJvb2wgZnRwX2NoZGlyKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGRpcmVjdG9yeSkiLAogICAgICAgICJDaGFuZ2VzIGRpcmVjdG9yaWVzIgogICAgXSwKICAgICJmdHBfY2htb2QiOiBbCiAgICAgICAgImludCBmdHBfY2htb2QocmVzb3VyY2Ugc3RyZWFtLCBpbnQgbW9kZSwgc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlNldHMgcGVybWlzc2lvbnMgb24gYSBmaWxlIgogICAgXSwKICAgICJmdHBfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgZnRwX2Nsb3NlKHJlc291cmNlIHN0cmVhbSkiLAogICAgICAgICJDbG9zZXMgdGhlIEZUUCBzdHJlYW0iCiAgICBdLAogICAgImZ0cF9jb25uZWN0IjogWwogICAgICAgICJyZXNvdXJjZSBmdHBfY29ubmVjdChzdHJpbmcgaG9zdCBbLCBpbnQgcG9ydCBbLCBpbnQgdGltZW91dF1dKSIsCiAgICAgICAgIk9wZW5zIGEgRlRQIHN0cmVhbSIKICAgIF0sCiAgICAiZnRwX2RlbGV0ZSI6IFsKICAgICAgICAiYm9vbCBmdHBfZGVsZXRlKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGZpbGUpIiwKICAgICAgICAiRGVsZXRlcyBhIGZpbGUiCiAgICBdLAogICAgImZ0cF9leGVjIjogWwogICAgICAgICJib29sIGZ0cF9leGVjKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGNvbW1hbmQpIiwKICAgICAgICAiUmVxdWVzdHMgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSBvbiB0aGUgRlRQIHNlcnZlciIKICAgIF0sCiAgICAiZnRwX2ZnZXQiOiBbCiAgICAgICAgImJvb2wgZnRwX2ZnZXQocmVzb3VyY2Ugc3RyZWFtLCByZXNvdXJjZSBmcCwgc3RyaW5nIHJlbW90ZV9maWxlLCBpbnQgbW9kZVssIGludCByZXN1bWVwb3NdKSIsCiAgICAgICAgIlJldHJpZXZlcyBhIGZpbGUgZnJvbSB0aGUgRlRQIHNlcnZlciBhbmQgd3JpdGVzIGl0IHRvIGFuIG9wZW4gZmlsZSIKICAgIF0sCiAgICAiZnRwX2ZwdXQiOiBbCiAgICAgICAgImJvb2wgZnRwX2ZwdXQocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgcmVtb3RlX2ZpbGUsIHJlc291cmNlIGZwLCBpbnQgbW9kZVssIGludCBzdGFydHBvc10pIiwKICAgICAgICAiU3RvcmVzIGEgZmlsZSBmcm9tIGFuIG9wZW4gZmlsZSB0byB0aGUgRlRQIHNlcnZlciIKICAgIF0sCiAgICAiZnRwX2dldCI6IFsKICAgICAgICAiYm9vbCBmdHBfZ2V0KHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGxvY2FsX2ZpbGUsIHN0cmluZyByZW1vdGVfZmlsZSwgaW50IG1vZGVbLCBpbnQgcmVzdW1lX3Bvc10pIiwKICAgICAgICAiUmV0cmlldmVzIGEgZmlsZSBmcm9tIHRoZSBGVFAgc2VydmVyIGFuZCB3cml0ZXMgaXQgdG8gYSBsb2NhbCBmaWxlIgogICAgXSwKICAgICJmdHBfZ2V0X29wdGlvbiI6IFsKICAgICAgICAibWl4ZWQgZnRwX2dldF9vcHRpb24ocmVzb3VyY2Ugc3RyZWFtLCBpbnQgb3B0aW9uKSIsCiAgICAgICAgIkdldHMgYW4gRlRQIG9wdGlvbiIKICAgIF0sCiAgICAiZnRwX2xvZ2luIjogWwogICAgICAgICJib29sIGZ0cF9sb2dpbihyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyB1c2VybmFtZSwgc3RyaW5nIHBhc3N3b3JkKSIsCiAgICAgICAgIkxvZ3MgaW50byB0aGUgRlRQIHNlcnZlciIKICAgIF0sCiAgICAiZnRwX21kdG0iOiBbCiAgICAgICAgImludCBmdHBfbWR0bShyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIHRoZSBmaWxlLCBvciAtMSBvbiBlcnJvciIKICAgIF0sCiAgICAiZnRwX21rZGlyIjogWwogICAgICAgICJzdHJpbmcgZnRwX21rZGlyKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGRpcmVjdG9yeSkiLAogICAgICAgICJDcmVhdGVzIGEgZGlyZWN0b3J5IGFuZCByZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIGZvciB0aGUgbmV3IGRpcmVjdG9yeSBvciBmYWxzZSBvbiBlcnJvciIKICAgIF0sCiAgICAiZnRwX25iX2NvbnRpbnVlIjogWwogICAgICAgICJpbnQgZnRwX25iX2NvbnRpbnVlKHJlc291cmNlIHN0cmVhbSkiLAogICAgICAgICJDb250aW51ZXMgcmV0cmlldmluZy9zZW5kaW5nIGEgZmlsZSBuYnJvbm91c2x5IgogICAgXSwKICAgICJmdHBfbmJfZmdldCI6IFsKICAgICAgICAiaW50IGZ0cF9uYl9mZ2V0KHJlc291cmNlIHN0cmVhbSwgcmVzb3VyY2UgZnAsIHN0cmluZyByZW1vdGVfZmlsZSwgaW50IG1vZGVbLCBpbnQgcmVzdW1lcG9zXSkiLAogICAgICAgICJSZXRyaWV2ZXMgYSBmaWxlIGZyb20gdGhlIEZUUCBzZXJ2ZXIgYXN5bmNocm9ubHkgYW5kIHdyaXRlcyBpdCB0byBhbiBvcGVuIGZpbGUiCiAgICBdLAogICAgImZ0cF9uYl9mcHV0IjogWwogICAgICAgICJpbnQgZnRwX25iX2ZwdXQocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgcmVtb3RlX2ZpbGUsIHJlc291cmNlIGZwLCBpbnQgbW9kZVssIGludCBzdGFydHBvc10pIiwKICAgICAgICAiU3RvcmVzIGEgZmlsZSBmcm9tIGFuIG9wZW4gZmlsZSB0byB0aGUgRlRQIHNlcnZlciBuYnJvbmx5IgogICAgXSwKICAgICJmdHBfbmJfZ2V0IjogWwogICAgICAgICJpbnQgZnRwX25iX2dldChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBsb2NhbF9maWxlLCBzdHJpbmcgcmVtb3RlX2ZpbGUsIGludCBtb2RlWywgaW50IHJlc3VtZV9wb3NdKSIsCiAgICAgICAgIlJldHJpZXZlcyBhIGZpbGUgZnJvbSB0aGUgRlRQIHNlcnZlciBuYmhyb25seSBhbmQgd3JpdGVzIGl0IHRvIGEgbG9jYWwgZmlsZSIKICAgIF0sCiAgICAiZnRwX25iX3B1dCI6IFsKICAgICAgICAiaW50IGZ0cF9uYl9wdXQocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgcmVtb3RlX2ZpbGUsIHN0cmluZyBsb2NhbF9maWxlLCBpbnQgbW9kZVssIGludCBzdGFydHBvc10pIiwKICAgICAgICAiU3RvcmVzIGEgZmlsZSBvbiB0aGUgRlRQIHNlcnZlciIKICAgIF0sCiAgICAiZnRwX25saXN0IjogWwogICAgICAgICJhcnJheSBmdHBfbmxpc3QocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZGlyZWN0b3J5KSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgZmlsZW5hbWVzIGluIHRoZSBnaXZlbiBkaXJlY3RvcnkiCiAgICBdLAogICAgImZ0cF9wYXN2IjogWwogICAgICAgICJib29sIGZ0cF9wYXN2KHJlc291cmNlIHN0cmVhbSwgYm9vbCBwYXN2KSIsCiAgICAgICAgIlR1cm5zIHBhc3NpdmUgbW9kZSBvbiBvciBvZmYiCiAgICBdLAogICAgImZ0cF9wdXQiOiBbCiAgICAgICAgImJvb2wgZnRwX3B1dChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyByZW1vdGVfZmlsZSwgc3RyaW5nIGxvY2FsX2ZpbGUsIGludCBtb2RlWywgaW50IHN0YXJ0cG9zXSkiLAogICAgICAgICJTdG9yZXMgYSBmaWxlIG9uIHRoZSBGVFAgc2VydmVyIgogICAgXSwKICAgICJmdHBfcHdkIjogWwogICAgICAgICJzdHJpbmcgZnRwX3B3ZChyZXNvdXJjZSBzdHJlYW0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgcHJlc2VudCB3b3JraW5nIGRpcmVjdG9yeSIKICAgIF0sCiAgICAiZnRwX3JhdyI6IFsKICAgICAgICAiYXJyYXkgZnRwX3JhdyhyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBjb21tYW5kKSIsCiAgICAgICAgIlNlbmRzIGEgbGl0ZXJhbCBjb21tYW5kIHRvIHRoZSBGVFAgc2VydmVyIgogICAgXSwKICAgICJmdHBfcmF3bGlzdCI6IFsKICAgICAgICAiYXJyYXkgZnRwX3Jhd2xpc3QocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZGlyZWN0b3J5IFssIGJvb2wgcmVjdXJzaXZlXSkiLAogICAgICAgICJSZXR1cm5zIGEgZGV0YWlsZWQgbGlzdGluZyBvZiBhIGRpcmVjdG9yeSBhcyBhbiBhcnJheSBvZiBvdXRwdXQgbGluZXMiCiAgICBdLAogICAgImZ0cF9yZW5hbWUiOiBbCiAgICAgICAgImJvb2wgZnRwX3JlbmFtZShyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBzcmMsIHN0cmluZyBkZXN0KSIsCiAgICAgICAgIlJlbmFtZXMgdGhlIGdpdmVuIGZpbGUgdG8gYSBuZXcgcGF0aCIKICAgIF0sCiAgICAiZnRwX3JtZGlyIjogWwogICAgICAgICJib29sIGZ0cF9ybWRpcihyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBkaXJlY3RvcnkpIiwKICAgICAgICAiUmVtb3ZlcyBhIGRpcmVjdG9yeSIKICAgIF0sCiAgICAiZnRwX3NldF9vcHRpb24iOiBbCiAgICAgICAgImJvb2wgZnRwX3NldF9vcHRpb24ocmVzb3VyY2Ugc3RyZWFtLCBpbnQgb3B0aW9uLCBtaXhlZCB2YWx1ZSkiLAogICAgICAgICJTZXRzIGFuIEZUUCBvcHRpb24iCiAgICBdLAogICAgImZ0cF9zaXRlIjogWwogICAgICAgICJib29sIGZ0cF9zaXRlKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGNtZCkiLAogICAgICAgICJTZW5kcyBhIFNJVEUgY29tbWFuZCB0byB0aGUgc2VydmVyIgogICAgXSwKICAgICJmdHBfc2l6ZSI6IFsKICAgICAgICAiaW50IGZ0cF9zaXplKHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHNpemUgb2YgdGhlIGZpbGUsIG9yIC0xIG9uIGVycm9yIgogICAgXSwKICAgICJmdHBfc3NsX2Nvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIGZ0cF9zc2xfY29ubmVjdChzdHJpbmcgaG9zdCBbLCBpbnQgcG9ydCBbLCBpbnQgdGltZW91dF1dKSIsCiAgICAgICAgIk9wZW5zIGEgRlRQLVNTTCBzdHJlYW0iCiAgICBdLAogICAgImZ0cF9zeXN0eXBlIjogWwogICAgICAgICJzdHJpbmcgZnRwX3N5c3R5cGUocmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHN5c3RlbSB0eXBlIGlkZW50aWZpZXIiCiAgICBdLAogICAgImZ0cnVuY2F0ZSI6IFsKICAgICAgICAiYm9vbCBmdHJ1bmNhdGUocmVzb3VyY2UgZnAsIGludCBzaXplKSIsCiAgICAgICAgIlRydW5jYXRlIGZpbGUgdG8gJ3NpemUnIGxlbmd0aCIKICAgIF0sCiAgICAiZnVuY19nZXRfYXJnIjogWwogICAgICAgICJtaXhlZCBmdW5jX2dldF9hcmcoaW50IGFyZ19udW0pIiwKICAgICAgICAiR2V0IHRoZSAkYXJnX251bSd0aCBhcmd1bWVudCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIgogICAgXSwKICAgICJmdW5jX2dldF9hcmdzIjogWwogICAgICAgICJhcnJheSBmdW5jX2dldF9hcmdzKCkiLAogICAgICAgICJHZXQgYW4gYXJyYXkgb2YgdGhlIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiIKICAgIF0sCiAgICAiZnVuY19udW1fYXJncyI6IFsKICAgICAgICAiaW50IGZ1bmNfbnVtX2FyZ3Modm9pZCkiLAogICAgICAgICJHZXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhhdCB3ZXJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24iCiAgICBdLAogICAgImZ1bmN0aW9uICI6IFsiIiwgIiJdLAogICAgImZvcmVhY2ggIjogWyIiLCAiIl0sCiAgICAiZnVuY3Rpb25fZXhpc3RzIjogWwogICAgICAgICJib29sIGZ1bmN0aW9uX2V4aXN0cyhzdHJpbmcgZnVuY3Rpb25fbmFtZSkiLAogICAgICAgICJDaGVja3MgaWYgdGhlIGZ1bmN0aW9uIGV4aXN0cyIKICAgIF0sCiAgICAiZndyaXRlIjogWwogICAgICAgICJpbnQgZndyaXRlKHJlc291cmNlIGZwLCBzdHJpbmcgc3RyIFssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIkJpbmFyeS1zYWZlIGZpbGUgd3JpdGUiCiAgICBdLAogICAgImdjX2NvbGxlY3RfY3ljbGVzIjogWwogICAgICAgICJpbnQgZ2NfY29sbGVjdF9jeWNsZXModm9pZCkiLAogICAgICAgICJGb3JjZXMgY29sbGVjdGlvbiBvZiBhbnkgZXhpc3RpbmcgZ2FyYmFnZSBjeWNsZXMuICAgIFJldHVybnMgbnVtYmVyIG9mIGZyZWVkIHp2YWxzIgogICAgXSwKICAgICJnY19kaXNhYmxlIjogWwogICAgICAgICJ2b2lkIGdjX2Rpc2FibGUodm9pZCkiLAogICAgICAgICJEZWFjdGl2YXRlcyB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNvbGxlY3RvciIKICAgIF0sCiAgICAiZ2NfZW5hYmxlIjogWwogICAgICAgICJ2b2lkIGdjX2VuYWJsZSh2b2lkKSIsCiAgICAgICAgIkFjdGl2YXRlcyB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNvbGxlY3RvciIKICAgIF0sCiAgICAiZ2NfZW5hYmxlZCI6IFsKICAgICAgICAidm9pZCBnY19lbmFibGVkKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBzdGF0dXMgb2YgdGhlIGNpcmN1bGFyIHJlZmVyZW5jZSBjb2xsZWN0b3IiCiAgICBdLAogICAgImdkX2luZm8iOiBbCiAgICAgICAgImFycmF5IGdkX2luZm8oKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAiZ2V0S2V5d29yZHMiOiBbCiAgICAgICAgInN0YXRpYyBhcnJheSBnZXRLZXl3b3JkcyhzdHJpbmcgJGxvY2FsZSkgeyIsCiAgICAgICAgIiogcmV0dXJuIGFuIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcga2V5d29yZC12YWx1ZSAgKiBwYWlycyBmb3IgdGhpcyBsb2NhbGUuIFRoZSBrZXlzIGFyZSBrZXlzIHRvIHRoZSBhcnJheSAoZG9oISkgICogfX19IgogICAgXSwKICAgICJnZXRfYnJvd3NlciI6IFsKICAgICAgICAibWl4ZWQgZ2V0X2Jyb3dzZXIoW3N0cmluZyBicm93c2VyX25hbWUgWywgYm9vbCByZXR1cm5fYXJyYXldXSkiLAogICAgICAgICJHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhcGFiaWxpdGllcyBvZiBhIGJyb3dzZXIuIElmIGJyb3dzZXJfbmFtZSBpcyBvbWl0dGVkIG9yIG51bGwsIEhUVFBfVVNFUl9BR0VOVCBpcyB1c2VkLiBSZXR1cm5zIGFuIG9iamVjdCBieSBkZWZhdWx0OyBpZiByZXR1cm5fYXJyYXkgaXMgdHJ1ZSwgcmV0dXJucyBhbiBhcnJheS4iCiAgICBdLAogICAgImdldF9jYWxsZWRfY2xhc3MiOiBbCiAgICAgICAgInN0cmluZyBnZXRfY2FsbGVkX2NsYXNzKCkiLAogICAgICAgICJSZXRyaWV2ZXMgdGhlIFwiTGF0ZSBTdGF0aWMgQmluZGluZ1wiIGNsYXNzIG5hbWUiCiAgICBdLAogICAgImdldF9jZmdfdmFyIjogWwogICAgICAgICJtaXhlZCBnZXRfY2ZnX3ZhcihzdHJpbmcgb3B0aW9uX25hbWUpIiwKICAgICAgICAiR2V0IHRoZSB2YWx1ZSBvZiBhIFBIUCBjb25maWd1cmF0aW9uIG9wdGlvbiIKICAgIF0sCiAgICAiZ2V0X2NsYXNzIjogWwogICAgICAgICJzdHJpbmcgZ2V0X2NsYXNzKFtvYmplY3Qgb2JqZWN0XSkiLAogICAgICAgICJSZXRyaWV2ZXMgdGhlIGNsYXNzIG5hbWUiCiAgICBdLAogICAgImdldF9jbGFzc19tZXRob2RzIjogWwogICAgICAgICJhcnJheSBnZXRfY2xhc3NfbWV0aG9kcyhtaXhlZCBjbGFzcykiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIG1ldGhvZCBuYW1lcyBmb3IgY2xhc3Mgb3IgY2xhc3MgaW5zdGFuY2UuIgogICAgXSwKICAgICJnZXRfY2xhc3NfdmFycyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X2NsYXNzX3ZhcnMoc3RyaW5nIGNsYXNzX25hbWUpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBkZWZhdWx0IHByb3BlcnRpZXMgb2YgdGhlIGNsYXNzLiIKICAgIF0sCiAgICAiZ2V0X2N1cnJlbnRfdXNlciI6IFsKICAgICAgICAic3RyaW5nIGdldF9jdXJyZW50X3VzZXIodm9pZCkiLAogICAgICAgICJHZXQgdGhlIG5hbWUgb2YgdGhlIG93bmVyIG9mIHRoZSBjdXJyZW50IFBIUCBzY3JpcHQiCiAgICBdLAogICAgImdldF9kZWNsYXJlZF9jbGFzc2VzIjogWwogICAgICAgICJhcnJheSBnZXRfZGVjbGFyZWRfY2xhc3NlcygpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgZGVjbGFyZWQgY2xhc3Nlcy4iCiAgICBdLAogICAgImdldF9kZWNsYXJlZF9pbnRlcmZhY2VzIjogWwogICAgICAgICJhcnJheSBnZXRfZGVjbGFyZWRfaW50ZXJmYWNlcygpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgZGVjbGFyZWQgaW50ZXJmYWNlcy4iCiAgICBdLAogICAgImdldF9kZWZpbmVkX2NvbnN0YW50cyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X2RlZmluZWRfY29uc3RhbnRzKFtib29sIGNhdGVnb3JpemVdKSIsCiAgICAgICAgIlJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBhbmQgdmFsdWVzIG9mIGFsbCBkZWZpbmVkIGNvbnN0YW50cyIKICAgIF0sCiAgICAiZ2V0X2RlZmluZWRfZnVuY3Rpb25zIjogWwogICAgICAgICJhcnJheSBnZXRfZGVmaW5lZF9mdW5jdGlvbnModm9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIGFsbCBkZWZpbmVkIGZ1bmN0aW9ucyIKICAgIF0sCiAgICAiZ2V0X2RlZmluZWRfdmFycyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X2RlZmluZWRfdmFycyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgbmFtZXMgYW5kIHZhbHVlcyBvZiBhbGwgY3VycmVudGx5IGRlZmluZWQgdmFyaWFibGUgbmFtZXMgKHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBzY29wZSkiCiAgICBdLAogICAgImdldF9kaXNwbGF5X2xhbmd1YWdlIjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGdldF9kaXNwbGF5X2xhbmd1YWdlKCRsb2NhbGVbLCAkaW5fbG9jYWxlID0gbnVsbF0pIiwKICAgICAgICAiKiBnZXRzIHRoZSBsYW5ndWFnZSBmb3IgdGhlICRsb2NhbGUgaW4gJGluX2xvY2FsZSBvciBkZWZhdWx0X2xvY2FsZSIKICAgIF0sCiAgICAiZ2V0X2Rpc3BsYXlfbmFtZSI6IFsKICAgICAgICAic3RhdGljIHN0cmluZyBnZXRfZGlzcGxheV9uYW1lKCRsb2NhbGVbLCAkaW5fbG9jYWxlID0gbnVsbF0pIiwKICAgICAgICAiKiBnZXRzIHRoZSBuYW1lIGZvciB0aGUgJGxvY2FsZSBpbiAkaW5fbG9jYWxlIG9yIGRlZmF1bHRfbG9jYWxlIgogICAgXSwKICAgICJnZXRfZGlzcGxheV9yZWdpb24iOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgZ2V0X2Rpc3BsYXlfcmVnaW9uKCRsb2NhbGUsICRpbl9sb2NhbGUgPSBudWxsKSIsCiAgICAgICAgIiogZ2V0cyB0aGUgcmVnaW9uIGZvciB0aGUgJGxvY2FsZSBpbiAkaW5fbG9jYWxlIG9yIGRlZmF1bHRfbG9jYWxlIgogICAgXSwKICAgICJnZXRfZGlzcGxheV9zY3JpcHQiOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgZ2V0X2Rpc3BsYXlfc2NyaXB0KCRsb2NhbGUsICRpbl9sb2NhbGUgPSBudWxsKSIsCiAgICAgICAgIiogZ2V0cyB0aGUgc2NyaXB0IGZvciB0aGUgJGxvY2FsZSBpbiAkaW5fbG9jYWxlIG9yIGRlZmF1bHRfbG9jYWxlIgogICAgXSwKICAgICJnZXRfZXh0ZW5zaW9uX2Z1bmNzIjogWwogICAgICAgICJhcnJheSBnZXRfZXh0ZW5zaW9uX2Z1bmNzKHN0cmluZyBleHRlbnNpb25fbmFtZSkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIG5hbWVzIG9mIGZ1bmN0aW9ucyBiZWxvbmdpbmcgdG8gdGhlIG5hbWVkIGV4dGVuc2lvbiIKICAgIF0sCiAgICAiZ2V0X2hlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IGdldF9oZWFkZXJzKHN0cmluZyB1cmxbLCBpbnQgZm9ybWF0XSkiLAogICAgICAgICJmZXRjaGVzIGFsbCB0aGUgaGVhZGVycyBzZW50IGJ5IHRoZSBzZXJ2ZXIgaW4gcmVzcG9uc2UgdG8gYSBIVFRQIHJlcXVlc3QiCiAgICBdLAogICAgImdldF9odG1sX3RyYW5zbGF0aW9uX3RhYmxlIjogWwogICAgICAgICJhcnJheSBnZXRfaHRtbF90cmFuc2xhdGlvbl90YWJsZShbaW50IHRhYmxlIFssIGludCBxdW90ZV9zdHlsZV1dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGludGVybmFsIHRyYW5zbGF0aW9uIHRhYmxlIHVzZWQgYnkgaHRtbHNwZWNpYWxjaGFycyBhbmQgaHRtbGVudGl0aWVzIgogICAgXSwKICAgICJnZXRfaW5jbHVkZV9wYXRoIjogWwogICAgICAgICJzdHJpbmcgZ2V0X2luY2x1ZGVfcGF0aCgpIiwKICAgICAgICAiR2V0IHRoZSBjdXJyZW50IGluY2x1ZGVfcGF0aCBjb25maWd1cmF0aW9uIG9wdGlvbiIKICAgIF0sCiAgICAiZ2V0X2luY2x1ZGVkX2ZpbGVzIjogWwogICAgICAgICJhcnJheSBnZXRfaW5jbHVkZWRfZmlsZXModm9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGZpbGUgbmFtZXMgdGhhdCB3ZXJlIGluY2x1ZGVfb25jZSgpJ2QiCiAgICBdLAogICAgImdldF9sb2FkZWRfZXh0ZW5zaW9ucyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X2xvYWRlZF9leHRlbnNpb25zKFtib29sIHplbmRfZXh0ZW5zaW9uc10pIiwKICAgICAgICAiUmV0dXJuIGFuIGFycmF5IGNvbnRhaW5pbmcgbmFtZXMgb2YgbG9hZGVkIGV4dGVuc2lvbnMiCiAgICBdLAogICAgImdldF9tYWdpY19xdW90ZXNfZ3BjIjogWwogICAgICAgICJpbnQgZ2V0X21hZ2ljX3F1b3Rlc19ncGModm9pZCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvZiBtYWdpY19xdW90ZXNfZ3BjIgogICAgXSwKICAgICJnZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUiOiBbCiAgICAgICAgImludCBnZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUodm9pZCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvZiBtYWdpY19xdW90ZXNfcnVudGltZSIKICAgIF0sCiAgICAiZ2V0X21ldGFfdGFncyI6IFsKICAgICAgICAiYXJyYXkgZ2V0X21ldGFfdGFncyhzdHJpbmcgZmlsZW5hbWUgWywgYm9vbCB1c2VfaW5jbHVkZV9wYXRoXSkiLAogICAgICAgICJFeHRyYWN0cyBhbGwgbWV0YSB0YWcgY29udGVudCBhdHRyaWJ1dGVzIGZyb20gYSBmaWxlIGFuZCByZXR1cm5zIGFuIGFycmF5IgogICAgXSwKICAgICJnZXRfb2JqZWN0X3ZhcnMiOiBbCiAgICAgICAgImFycmF5IGdldF9vYmplY3RfdmFycyhvYmplY3Qgb2JqKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2Ygb2JqZWN0IHByb3BlcnRpZXMiCiAgICBdLAogICAgImdldF9wYXJlbnRfY2xhc3MiOiBbCiAgICAgICAgInN0cmluZyBnZXRfcGFyZW50X2NsYXNzKFttaXhlZCBvYmplY3RdKSIsCiAgICAgICAgIlJldHJpZXZlcyB0aGUgcGFyZW50IGNsYXNzIG5hbWUgZm9yIG9iamVjdCBvciBjbGFzcyBvciBjdXJyZW50IHNjb3BlLiIKICAgIF0sCiAgICAiZ2V0X3Jlc291cmNlX3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBnZXRfcmVzb3VyY2VfdHlwZShyZXNvdXJjZSByZXMpIiwKICAgICAgICAiR2V0IHRoZSByZXNvdXJjZSB0eXBlIG5hbWUgZm9yIGEgZ2l2ZW4gcmVzb3VyY2UiCiAgICBdLAogICAgImdldGFsbGhlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IGdldGFsbGhlYWRlcnModm9pZCkiLAogICAgICAgICIiCiAgICBdLAogICAgImdldGN3ZCI6IFsKICAgICAgICAibWl4ZWQgZ2V0Y3dkKHZvaWQpIiwKICAgICAgICAiR2V0cyB0aGUgY3VycmVudCBkaXJlY3RvcnkiCiAgICBdLAogICAgImdldGRhdGUiOiBbCiAgICAgICAgImFycmF5IGdldGRhdGUoW2ludCB0aW1lc3RhbXBdKSIsCiAgICAgICAgIkdldCBkYXRlL3RpbWUgaW5mb3JtYXRpb24iCiAgICBdLAogICAgImdldGVudiI6IFsKICAgICAgICAic3RyaW5nIGdldGVudihzdHJpbmcgdmFybmFtZSkiLAogICAgICAgICJHZXQgdGhlIHZhbHVlIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIgogICAgXSwKICAgICJnZXRob3N0YnlhZGRyIjogWwogICAgICAgICJzdHJpbmcgZ2V0aG9zdGJ5YWRkcihzdHJpbmcgaXBfYWRkcmVzcykiLAogICAgICAgICJHZXQgdGhlIEludGVybmV0IGhvc3QgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gSVAgYWRkcmVzcyIKICAgIF0sCiAgICAiZ2V0aG9zdGJ5bmFtZSI6IFsKICAgICAgICAic3RyaW5nIGdldGhvc3RieW5hbWUoc3RyaW5nIGhvc3RuYW1lKSIsCiAgICAgICAgIkdldCB0aGUgSVAgYWRkcmVzcyBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gSW50ZXJuZXQgaG9zdCBuYW1lIgogICAgXSwKICAgICJnZXRob3N0YnluYW1lbCI6IFsKICAgICAgICAiYXJyYXkgZ2V0aG9zdGJ5bmFtZWwoc3RyaW5nIGhvc3RuYW1lKSIsCiAgICAgICAgIlJldHVybiBhIGxpc3Qgb2YgSVAgYWRkcmVzc2VzIHRoYXQgYSBnaXZlbiBob3N0bmFtZSByZXNvbHZlcyB0by4iCiAgICBdLAogICAgImdldGhvc3RuYW1lIjogWwogICAgICAgICJzdHJpbmcgZ2V0aG9zdG5hbWUoKSIsCiAgICAgICAgIkdldCB0aGUgaG9zdCBuYW1lIG9mIHRoZSBjdXJyZW50IG1hY2hpbmUiCiAgICBdLAogICAgImdldGltYWdlc2l6ZSI6IFsKICAgICAgICAiYXJyYXkgZ2V0aW1hZ2VzaXplKHN0cmluZyBpbWFnZWZpbGUgWywgYXJyYXkgaW5mb10pIiwKICAgICAgICAiR2V0IHRoZSBzaXplIG9mIGFuIGltYWdlIGFzIDQtZWxlbWVudCBhcnJheSIKICAgIF0sCiAgICAiZ2V0bGFzdG1vZCI6IFsKICAgICAgICAiaW50IGdldGxhc3Rtb2Qodm9pZCkiLAogICAgICAgICJHZXQgdGltZSBvZiBsYXN0IHBhZ2UgbW9kaWZpY2F0aW9uIgogICAgXSwKICAgICJnZXRteWdpZCI6IFsKICAgICAgICAiaW50IGdldG15Z2lkKHZvaWQpIiwKICAgICAgICAiR2V0IFBIUCBzY3JpcHQgb3duZXIncyBHSUQiCiAgICBdLAogICAgImdldG15aW5vZGUiOiBbCiAgICAgICAgImludCBnZXRteWlub2RlKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSBpbm9kZSBvZiB0aGUgY3VycmVudCBzY3JpcHQgYmVpbmcgcGFyc2VkIgogICAgXSwKICAgICJnZXRteXBpZCI6IFsKICAgICAgICAiaW50IGdldG15cGlkKHZvaWQpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgcHJvY2VzcyBJRCIKICAgIF0sCiAgICAiZ2V0bXl1aWQiOiBbCiAgICAgICAgImludCBnZXRteXVpZCh2b2lkKSIsCiAgICAgICAgIkdldCBQSFAgc2NyaXB0IG93bmVyJ3MgVUlEIgogICAgXSwKICAgICJnZXRvcHQiOiBbCiAgICAgICAgImFycmF5IGdldG9wdChzdHJpbmcgb3B0aW9ucyBbLCBhcnJheSBsb25nb3B0c10pIiwKICAgICAgICAiR2V0IG9wdGlvbnMgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGxpc3QiCiAgICBdLAogICAgImdldHByb3RvYnluYW1lIjogWwogICAgICAgICJpbnQgZ2V0cHJvdG9ieW5hbWUoc3RyaW5nIG5hbWUpIiwKICAgICAgICAiUmV0dXJucyBwcm90b2NvbCBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIG5hbWUgYXMgcGVyIC9ldGMvcHJvdG9jb2xzIgogICAgXSwKICAgICJnZXRwcm90b2J5bnVtYmVyIjogWwogICAgICAgICJzdHJpbmcgZ2V0cHJvdG9ieW51bWJlcihpbnQgcHJvdG8pIiwKICAgICAgICAiUmV0dXJucyBwcm90b2NvbCBuYW1lIGFzc29jaWF0ZWQgd2l0aCBwcm90b2NvbCBudW1iZXIgcHJvdG8iCiAgICBdLAogICAgImdldHJhbmRtYXgiOiBbCiAgICAgICAgImludCBnZXRyYW5kbWF4KHZvaWQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZSBhIHJhbmRvbSBudW1iZXIgY2FuIGhhdmUiCiAgICBdLAogICAgImdldHJ1c2FnZSI6IFsKICAgICAgICAiYXJyYXkgZ2V0cnVzYWdlKFtpbnQgd2hvXSkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIHVzYWdlIHN0YXRpc3RpY3MiCiAgICBdLAogICAgImdldHNlcnZieW5hbWUiOiBbCiAgICAgICAgImludCBnZXRzZXJ2YnluYW1lKHN0cmluZyBzZXJ2aWNlLCBzdHJpbmcgcHJvdG9jb2wpIiwKICAgICAgICAiUmV0dXJucyBwb3J0IGFzc29jaWF0ZWQgd2l0aCBzZXJ2aWNlLiBQcm90b2NvbCBtdXN0IGJlIFwidGNwXCIgb3IgXCJ1ZHBcIiIKICAgIF0sCiAgICAiZ2V0c2VydmJ5cG9ydCI6IFsKICAgICAgICAic3RyaW5nIGdldHNlcnZieXBvcnQoaW50IHBvcnQsIHN0cmluZyBwcm90b2NvbCkiLAogICAgICAgICJSZXR1cm5zIHNlcnZpY2UgbmFtZSBhc3NvY2lhdGVkIHdpdGggcG9ydC4gUHJvdG9jb2wgbXVzdCBiZSBcInRjcFwiIG9yIFwidWRwXCIiCiAgICBdLAogICAgImdldHRleHQiOiBbCiAgICAgICAgInN0cmluZyBnZXR0ZXh0KHN0cmluZyBtc2dpZCkiLAogICAgICAgICJSZXR1cm4gdGhlIHRyYW5zbGF0aW9uIG9mIG1zZ2lkIGZvciB0aGUgY3VycmVudCBkb21haW4sIG9yIG1zZ2lkIHVuYWx0ZXJlZCBpZiBhIHRyYW5zbGF0aW9uIGRvZXMgbm90IGV4aXN0IgogICAgXSwKICAgICJnZXR0aW1lb2ZkYXkiOiBbCiAgICAgICAgImFycmF5IGdldHRpbWVvZmRheShbYm9vbCBnZXRfYXNfZmxvYXRdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGN1cnJlbnQgdGltZSBhcyBhcnJheSIKICAgIF0sCiAgICAiZ2V0dHlwZSI6IFsKICAgICAgICAic3RyaW5nIGdldHR5cGUobWl4ZWQgdmFyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIgogICAgXSwKICAgICJnbG9iIjogWwogICAgICAgICJhcnJheSBnbG9iKHN0cmluZyBwYXR0ZXJuIFssIGludCBmbGFnc10pIiwKICAgICAgICAiRmluZCBwYXRobmFtZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgogICAgXSwKICAgICJnbWRhdGUiOiBbCiAgICAgICAgInN0cmluZyBnbWRhdGUoc3RyaW5nIGZvcm1hdCBbLCBsb25nIHRpbWVzdGFtcF0pIiwKICAgICAgICAiRm9ybWF0IGEgR01UIGRhdGUvdGltZSIKICAgIF0sCiAgICAiZ21ta3RpbWUiOiBbCiAgICAgICAgImludCBnbW1rdGltZShbaW50IGhvdXIgWywgaW50IG1pbiBbLCBpbnQgc2VjIFssIGludCBtb24gWywgaW50IGRheSBbLCBpbnQgeWVhcl1dXV1dXSkiLAogICAgICAgICJHZXQgVU5JWCB0aW1lc3RhbXAgZm9yIGEgR01UIGRhdGUiCiAgICBdLAogICAgImdtcF9hYnMiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9hYnMocmVzb3VyY2UgYSkiLAogICAgICAgICJDYWxjdWxhdGVzIGFic29sdXRlIHZhbHVlIgogICAgXSwKICAgICJnbXBfYWRkIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfYWRkKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQWRkIGEgYW5kIGIiCiAgICBdLAogICAgImdtcF9hbmQiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9hbmQocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDYWxjdWxhdGVzIGxvZ2ljYWwgQU5EIG9mIGEgYW5kIGIiCiAgICBdLAogICAgImdtcF9jbHJiaXQiOiBbCiAgICAgICAgInZvaWQgZ21wX2NscmJpdChyZXNvdXJjZSAmYSwgaW50IGluZGV4KSIsCiAgICAgICAgIkNsZWFycyBiaXQgaW4gYSIKICAgIF0sCiAgICAiZ21wX2NtcCI6IFsKICAgICAgICAiaW50IGdtcF9jbXAocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDb21wYXJlcyB0d28gbnVtYmVycyIKICAgIF0sCiAgICAiZ21wX2NvbSI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2NvbShyZXNvdXJjZSBhKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgb25lJ3MgY29tcGxlbWVudCBvZiBhIgogICAgXSwKICAgICJnbXBfZGl2X3EiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9kaXZfcShyZXNvdXJjZSBhLCByZXNvdXJjZSBiIFssIGludCByb3VuZF0pIiwKICAgICAgICAiRGl2aWRlIGEgYnkgYiwgcmV0dXJucyBxdW90aWVudCBvbmx5IgogICAgXSwKICAgICJnbXBfZGl2X3FyIjogWwogICAgICAgICJhcnJheSBnbXBfZGl2X3FyKHJlc291cmNlIGEsIHJlc291cmNlIGIgWywgaW50IHJvdW5kXSkiLAogICAgICAgICJEaXZpZGUgYSBieSBiLCByZXR1cm5zIHF1b3RpZW50IGFuZCByZW1pbmRlciIKICAgIF0sCiAgICAiZ21wX2Rpdl9yIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfZGl2X3IocmVzb3VyY2UgYSwgcmVzb3VyY2UgYiBbLCBpbnQgcm91bmRdKSIsCiAgICAgICAgIkRpdmlkZSBhIGJ5IGIsIHJldHVybnMgcmVtaW5kZXIgb25seSIKICAgIF0sCiAgICAiZ21wX2RpdmV4YWN0IjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfZGl2ZXhhY3QocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJEaXZpZGUgYSBieSBiIHVzaW5nIGV4YWN0IGRpdmlzaW9uIGFsZ29yaXRobSIKICAgIF0sCiAgICAiZ21wX2ZhY3QiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9mYWN0KGludCBhKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgZmFjdG9yaWFsIGZ1bmN0aW9uIgogICAgXSwKICAgICJnbXBfZ2NkIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfZ2NkKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ29tcHV0ZXMgZ3JlYXRlc3QgY29tbW9uIGRlbm9taW5hdG9yIChnY2QpIG9mIGEgYW5kIGIiCiAgICBdLAogICAgImdtcF9nY2RleHQiOiBbCiAgICAgICAgImFycmF5IGdtcF9nY2RleHQocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJDb21wdXRlcyBHLCBTLCBhbmQgVCwgc3VjaCB0aGF0IEFTICsgQlQgPSBHID0gYGdjZCcgKEEsIEIpIgogICAgXSwKICAgICJnbXBfaGFtZGlzdCI6IFsKICAgICAgICAiaW50IGdtcF9oYW1kaXN0KHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ2FsY3VsYXRlcyBoYW1taW5nIGRpc3RhbmNlIGJldHdlZW4gYSBhbmQgYiIKICAgIF0sCiAgICAiZ21wX2luaXQiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9pbml0KG1peGVkIG51bWJlciBbLCBpbnQgYmFzZV0pIiwKICAgICAgICAiSW5pdGlhbGl6ZXMgR01QIG51bWJlciIKICAgIF0sCiAgICAiZ21wX2ludHZhbCI6IFsKICAgICAgICAiaW50IGdtcF9pbnR2YWwocmVzb3VyY2UgZ21wbnVtYmVyKSIsCiAgICAgICAgIkdldHMgc2lnbmVkIGxvbmcgdmFsdWUgb2YgR01QIG51bWJlciIKICAgIF0sCiAgICAiZ21wX2ludmVydCI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX2ludmVydChyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkNvbXB1dGVzIHRoZSBpbnZlcnNlIG9mIGEgbW9kdWxvIGIiCiAgICBdLAogICAgImdtcF9qYWNvYmkiOiBbCiAgICAgICAgImludCBnbXBfamFjb2JpKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ29tcHV0ZXMgSmFjb2JpIHN5bWJvbCIKICAgIF0sCiAgICAiZ21wX2xlZ2VuZHJlIjogWwogICAgICAgICJpbnQgZ21wX2xlZ2VuZHJlKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ29tcHV0ZXMgTGVnZW5kcmUgc3ltYm9sIgogICAgXSwKICAgICJnbXBfbW9kIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfbW9kKHJlc291cmNlIGEsIHJlc291cmNlIGIpIiwKICAgICAgICAiQ29tcHV0ZXMgYSBtb2R1bG8gYiIKICAgIF0sCiAgICAiZ21wX211bCI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX211bChyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIk11bHRpcGx5IGEgYW5kIGIiCiAgICBdLAogICAgImdtcF9uZWciOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9uZWcocmVzb3VyY2UgYSkiLAogICAgICAgICJOZWdhdGVzIGEgbnVtYmVyIgogICAgXSwKICAgICJnbXBfbmV4dHByaW1lIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfbmV4dHByaW1lKHJlc291cmNlIGEpIiwKICAgICAgICAiRmluZHMgbmV4dCBwcmltZSBvZiBhIgogICAgXSwKICAgICJnbXBfb3IiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9vcihyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgbG9naWNhbCBPUiBvZiBhIGFuZCBiIgogICAgXSwKICAgICJnbXBfcGVyZmVjdF9zcXVhcmUiOiBbCiAgICAgICAgImJvb2wgZ21wX3BlcmZlY3Rfc3F1YXJlKHJlc291cmNlIGEpIiwKICAgICAgICAiQ2hlY2tzIGlmIGEgaXMgYW4gZXhhY3Qgc3F1YXJlIgogICAgXSwKICAgICJnbXBfcG9wY291bnQiOiBbCiAgICAgICAgImludCBnbXBfcG9wY291bnQocmVzb3VyY2UgYSkiLAogICAgICAgICJDYWxjdWxhdGVzIHRoZSBwb3B1bGF0aW9uIGNvdW50IG9mIGEiCiAgICBdLAogICAgImdtcF9wb3ciOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9wb3cocmVzb3VyY2UgYmFzZSwgaW50IGV4cCkiLAogICAgICAgICJSYWlzZSBiYXNlIHRvIHBvd2VyIGV4cCIKICAgIF0sCiAgICAiZ21wX3Bvd20iOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9wb3dtKHJlc291cmNlIGJhc2UsIHJlc291cmNlIGV4cCwgcmVzb3VyY2UgbW9kKSIsCiAgICAgICAgIlJhaXNlIGJhc2UgdG8gcG93ZXIgZXhwIGFuZCB0YWtlIHJlc3VsdCBtb2R1bG8gbW9kIgogICAgXSwKICAgICJnbXBfcHJvYl9wcmltZSI6IFsKICAgICAgICAiaW50IGdtcF9wcm9iX3ByaW1lKHJlc291cmNlIGFbLCBpbnQgcmVwc10pIiwKICAgICAgICAiQ2hlY2tzIGlmIGEgaXMgXCJwcm9iYWJseSBwcmltZVwiIgogICAgXSwKICAgICJnbXBfcmFuZG9tIjogWwogICAgICAgICJyZXNvdXJjZSBnbXBfcmFuZG9tKFtpbnQgbGltaXRlcl0pIiwKICAgICAgICAiR2V0cyByYW5kb20gbnVtYmVyIgogICAgXSwKICAgICJnbXBfc2NhbjAiOiBbCiAgICAgICAgImludCBnbXBfc2NhbjAocmVzb3VyY2UgYSwgaW50IHN0YXJ0KSIsCiAgICAgICAgIkZpbmRzIGZpcnN0IHplcm8gYml0IgogICAgXSwKICAgICJnbXBfc2NhbjEiOiBbCiAgICAgICAgImludCBnbXBfc2NhbjEocmVzb3VyY2UgYSwgaW50IHN0YXJ0KSIsCiAgICAgICAgIkZpbmRzIGZpcnN0IG5vbi16ZXJvIGJpdCIKICAgIF0sCiAgICAiZ21wX3NldGJpdCI6IFsKICAgICAgICAidm9pZCBnbXBfc2V0Yml0KHJlc291cmNlICZhLCBpbnQgaW5kZXhbLCBib29sIHNldF9jbGVhcl0pIiwKICAgICAgICAiU2V0cyBvciBjbGVhciBiaXQgaW4gYSIKICAgIF0sCiAgICAiZ21wX3NpZ24iOiBbCiAgICAgICAgImludCBnbXBfc2lnbihyZXNvdXJjZSBhKSIsCiAgICAgICAgIkdldHMgdGhlIHNpZ24gb2YgdGhlIG51bWJlciIKICAgIF0sCiAgICAiZ21wX3NxcnQiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9zcXJ0KHJlc291cmNlIGEpIiwKICAgICAgICAiVGFrZXMgaW50ZWdlciBwYXJ0IG9mIHNxdWFyZSByb290IG9mIGEiCiAgICBdLAogICAgImdtcF9zcXJ0cmVtIjogWwogICAgICAgICJhcnJheSBnbXBfc3FydHJlbShyZXNvdXJjZSBhKSIsCiAgICAgICAgIlNxdWFyZSByb290IHdpdGggcmVtYWluZGVyIgogICAgXSwKICAgICJnbXBfc3RydmFsIjogWwogICAgICAgICJzdHJpbmcgZ21wX3N0cnZhbChyZXNvdXJjZSBnbXBudW1iZXIgWywgaW50IGJhc2VdKSIsCiAgICAgICAgIkdldHMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIEdNUCBudW1iZXIiCiAgICBdLAogICAgImdtcF9zdWIiOiBbCiAgICAgICAgInJlc291cmNlIGdtcF9zdWIocmVzb3VyY2UgYSwgcmVzb3VyY2UgYikiLAogICAgICAgICJTdWJ0cmFjdCBiIGZyb20gYSIKICAgIF0sCiAgICAiZ21wX3Rlc3RiaXQiOiBbCiAgICAgICAgImJvb2wgZ21wX3Rlc3RiaXQocmVzb3VyY2UgYSwgaW50IGluZGV4KSIsCiAgICAgICAgIlRlc3RzIGlmIGJpdCBpcyBzZXQgaW4gYSIKICAgIF0sCiAgICAiZ21wX3hvciI6IFsKICAgICAgICAicmVzb3VyY2UgZ21wX3hvcihyZXNvdXJjZSBhLCByZXNvdXJjZSBiKSIsCiAgICAgICAgIkNhbGN1bGF0ZXMgbG9naWNhbCBleGNsdXNpdmUgT1Igb2YgYSBhbmQgYiIKICAgIF0sCiAgICAiZ21zdHJmdGltZSI6IFsKICAgICAgICAic3RyaW5nIGdtc3RyZnRpbWUoc3RyaW5nIGZvcm1hdCBbLCBpbnQgdGltZXN0YW1wXSkiLAogICAgICAgICJGb3JtYXQgYSBHTVQvVUNUIHRpbWUvZGF0ZSBhY2NvcmRpbmcgdG8gbG9jYWxlIHNldHRpbmdzIgogICAgXSwKICAgICJncmFwaGVtZV9leHRyYWN0IjogWwogICAgICAgICJzdHJpbmcgZ3JhcGhlbWVfZXh0cmFjdChzdHJpbmcgc3RyLCBpbnQgc2l6ZVssIGludCBleHRyYWN0X3R5cGVbLCBpbnQgc3RhcnRbLCBpbnQgbmV4dF1dXSkiLAogICAgICAgICJGdW5jdGlvbiB0byBleHRyYWN0IGEgc2VxdWVuY2Ugb2YgZGVmYXVsdCBncmFwaGVtZSBjbHVzdGVycyIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3RyaXBvcyI6IFsKICAgICAgICAiaW50IGdyYXBoZW1lX3N0cmlwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXQgXSkiLAogICAgICAgICJGaW5kIHBvc2l0aW9uIG9mIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGlnbm9yaW5nIGNhc2UgZGlmZmVyZW5jZXMiCiAgICBdLAogICAgImdyYXBoZW1lX3N0cmlzdHIiOiBbCiAgICAgICAgInN0cmluZyBncmFwaGVtZV9zdHJpc3RyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZVssIGJvb2wgcGFydF0pIiwKICAgICAgICAiRmluZHMgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3RybGVuIjogWwogICAgICAgICJpbnQgZ3JhcGhlbWVfc3RybGVuKHN0cmluZyBzdHIpIiwKICAgICAgICAiR2V0IG51bWJlciBvZiBncmFwaGVtZXMgaW4gYSBzdHJpbmciCiAgICBdLAogICAgImdyYXBoZW1lX3N0cnBvcyI6IFsKICAgICAgICAiaW50IGdyYXBoZW1lX3N0cnBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldCBdKSIsCiAgICAgICAgIkZpbmQgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3Rycmlwb3MiOiBbCiAgICAgICAgImludCBncmFwaGVtZV9zdHJyaXBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiRmluZCBwb3NpdGlvbiBvZiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIsIGlnbm9yaW5nIGNhc2UiCiAgICBdLAogICAgImdyYXBoZW1lX3N0cnJwb3MiOiBbCiAgICAgICAgImludCBncmFwaGVtZV9zdHJycG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0XSkiLAogICAgICAgICJGaW5kIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3Ryc3RyIjogWwogICAgICAgICJzdHJpbmcgZ3JhcGhlbWVfc3Ryc3RyKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZVssIGJvb2wgcGFydF0pIiwKICAgICAgICAiRmluZHMgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAiZ3JhcGhlbWVfc3Vic3RyIjogWwogICAgICAgICJzdHJpbmcgZ3JhcGhlbWVfc3Vic3RyKHN0cmluZyBzdHIsIGludCBzdGFydCBbLCBpbnQgbGVuZ3RoXSkiLAogICAgICAgICJSZXR1cm5zIHBhcnQgb2YgYSBzdHJpbmciCiAgICBdLAogICAgImdyZWdvcmlhbnRvamQiOiBbCiAgICAgICAgImludCBncmVnb3JpYW50b2pkKGludCBtb250aCwgaW50IGRheSwgaW50IHllYXIpIiwKICAgICAgICAiQ29udmVydHMgYSBncmVnb3JpYW4gY2FsZW5kYXIgZGF0ZSB0byBqdWxpYW4gZGF5IGNvdW50IgogICAgXSwKICAgICJnemNvbXByZXNzIjogWwogICAgICAgICJzdHJpbmcgZ3pjb21wcmVzcyhzdHJpbmcgZGF0YSBbLCBpbnQgbGV2ZWxdKSIsCiAgICAgICAgIkd6aXAtY29tcHJlc3MgYSBzdHJpbmciCiAgICBdLAogICAgImd6ZGVmbGF0ZSI6IFsKICAgICAgICAic3RyaW5nIGd6ZGVmbGF0ZShzdHJpbmcgZGF0YSBbLCBpbnQgbGV2ZWxdKSIsCiAgICAgICAgIkd6aXAtY29tcHJlc3MgYSBzdHJpbmciCiAgICBdLAogICAgImd6ZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcgZ3plbmNvZGUoc3RyaW5nIGRhdGEgWywgaW50IGxldmVsIFssIGludCBlbmNvZGluZ19tb2RlXV0pIiwKICAgICAgICAiR1ogZW5jb2RlIGEgc3RyaW5nIgogICAgXSwKICAgICJnemZpbGUiOiBbCiAgICAgICAgImFycmF5IGd6ZmlsZShzdHJpbmcgZmlsZW5hbWUgWywgaW50IHVzZV9pbmNsdWRlX3BhdGhdKSIsCiAgICAgICAgIlJlYWQgdW5kIHVuY29tcHJlc3MgZW50aXJlIC5nei1maWxlIGludG8gYW4gYXJyYXkiCiAgICBdLAogICAgImd6aW5mbGF0ZSI6IFsKICAgICAgICAic3RyaW5nIGd6aW5mbGF0ZShzdHJpbmcgZGF0YSBbLCBpbnQgbGVuZ3RoXSkiLAogICAgICAgICJVbnppcCBhIGd6aXAtY29tcHJlc3NlZCBzdHJpbmciCiAgICBdLAogICAgImd6b3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgZ3pvcGVuKHN0cmluZyBmaWxlbmFtZSwgc3RyaW5nIG1vZGUgWywgaW50IHVzZV9pbmNsdWRlX3BhdGhdKSIsCiAgICAgICAgIk9wZW4gYSAuZ3otZmlsZSBhbmQgcmV0dXJuIGEgLmd6LWZpbGUgcG9pbnRlciIKICAgIF0sCiAgICAiZ3p1bmNvbXByZXNzIjogWwogICAgICAgICJzdHJpbmcgZ3p1bmNvbXByZXNzKHN0cmluZyBkYXRhIFssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIlVuemlwIGEgZ3ppcC1jb21wcmVzc2VkIHN0cmluZyIKICAgIF0sCiAgICAiaGFzaCI6IFsKICAgICAgICAic3RyaW5nIGhhc2goc3RyaW5nIGFsZ28sIHN0cmluZyBkYXRhWywgYm9vbCByYXdfb3V0cHV0ID0gZmFsc2VdKSIsCiAgICAgICAgIkdlbmVyYXRlIGEgaGFzaCBvZiBhIGdpdmVuIGlucHV0IHN0cmluZyBSZXR1cm5zIGxvd2VyY2FzZSBoZXhpdHMgYnkgZGVmYXVsdCIKICAgIF0sCiAgICAiaGFzaF9hbGdvcyI6IFsKICAgICAgICAiYXJyYXkgaGFzaF9hbGdvcyh2b2lkKSIsCiAgICAgICAgIlJldHVybiBhIGxpc3Qgb2YgcmVnaXN0ZXJlZCBoYXNoaW5nIGFsZ29yaXRobXMiCiAgICBdLAogICAgImhhc2hfY29weSI6IFsKICAgICAgICAicmVzb3VyY2UgaGFzaF9jb3B5KHJlc291cmNlIGNvbnRleHQpIiwKICAgICAgICAiQ29weSBoYXNoIHJlc291cmNlIgogICAgXSwKICAgICJoYXNoX2ZpbGUiOiBbCiAgICAgICAgInN0cmluZyBoYXNoX2ZpbGUoc3RyaW5nIGFsZ28sIHN0cmluZyBmaWxlbmFtZVssIGJvb2wgcmF3X291dHB1dCA9IGZhbHNlXSkiLAogICAgICAgICJHZW5lcmF0ZSBhIGhhc2ggb2YgYSBnaXZlbiBmaWxlIFJldHVybnMgbG93ZXJjYXNlIGhleGl0cyBieSBkZWZhdWx0IgogICAgXSwKICAgICJoYXNoX2ZpbmFsIjogWwogICAgICAgICJzdHJpbmcgaGFzaF9maW5hbChyZXNvdXJjZSBjb250ZXh0WywgYm9vbCByYXdfb3V0cHV0PWZhbHNlXSkiLAogICAgICAgICJPdXRwdXQgcmVzdWx0aW5nIGRpZ2VzdCIKICAgIF0sCiAgICAiaGFzaF9obWFjIjogWwogICAgICAgICJzdHJpbmcgaGFzaF9obWFjKHN0cmluZyBhbGdvLCBzdHJpbmcgZGF0YSwgc3RyaW5nIGtleVssIGJvb2wgcmF3X291dHB1dCA9IGZhbHNlXSkiLAogICAgICAgICJHZW5lcmF0ZSBhIGhhc2ggb2YgYSBnaXZlbiBpbnB1dCBzdHJpbmcgd2l0aCBhIGtleSB1c2luZyBITUFDIFJldHVybnMgbG93ZXJjYXNlIGhleGl0cyBieSBkZWZhdWx0IgogICAgXSwKICAgICJoYXNoX2htYWNfZmlsZSI6IFsKICAgICAgICAic3RyaW5nIGhhc2hfaG1hY19maWxlKHN0cmluZyBhbGdvLCBzdHJpbmcgZmlsZW5hbWUsIHN0cmluZyBrZXlbLCBib29sIHJhd19vdXRwdXQgPSBmYWxzZV0pIiwKICAgICAgICAiR2VuZXJhdGUgYSBoYXNoIG9mIGEgZ2l2ZW4gZmlsZSB3aXRoIGEga2V5IHVzaW5nIEhNQUMgUmV0dXJucyBsb3dlcmNhc2UgaGV4aXRzIGJ5IGRlZmF1bHQiCiAgICBdLAogICAgImhhc2hfaW5pdCI6IFsKICAgICAgICAicmVzb3VyY2UgaGFzaF9pbml0KHN0cmluZyBhbGdvWywgaW50IG9wdGlvbnMsIHN0cmluZyBrZXldKSIsCiAgICAgICAgIkluaXRpYWxpemUgYSBoYXNoaW5nIGNvbnRleHQiCiAgICBdLAogICAgImhhc2hfdXBkYXRlIjogWwogICAgICAgICJib29sIGhhc2hfdXBkYXRlKHJlc291cmNlIGNvbnRleHQsIHN0cmluZyBkYXRhKSIsCiAgICAgICAgIlB1bXAgZGF0YSBpbnRvIHRoZSBoYXNoaW5nIGFsZ29yaXRobSIKICAgIF0sCiAgICAiaGFzaF91cGRhdGVfZmlsZSI6IFsKICAgICAgICAiYm9vbCBoYXNoX3VwZGF0ZV9maWxlKHJlc291cmNlIGNvbnRleHQsIHN0cmluZyBmaWxlbmFtZVssIHJlc291cmNlIGNvbnRleHRdKSIsCiAgICAgICAgIlB1bXAgZGF0YSBpbnRvIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBmcm9tIGEgZmlsZSIKICAgIF0sCiAgICAiaGFzaF91cGRhdGVfc3RyZWFtIjogWwogICAgICAgICJpbnQgaGFzaF91cGRhdGVfc3RyZWFtKHJlc291cmNlIGNvbnRleHQsIHJlc291cmNlIGhhbmRsZVssIGludGVnZXIgbGVuZ3RoXSkiLAogICAgICAgICJQdW1wIGRhdGEgaW50byB0aGUgaGFzaGluZyBhbGdvcml0aG0gZnJvbSBhbiBvcGVuIHN0cmVhbSIKICAgIF0sCiAgICAiaGVhZGVyIjogWwogICAgICAgICJ2b2lkIGhlYWRlcihzdHJpbmcgaGVhZGVyIFssIGJvb2wgcmVwbGFjZSwgW2ludCBodHRwX3Jlc3BvbnNlX2NvZGVdXSkiLAogICAgICAgICJTZW5kcyBhIHJhdyBIVFRQIGhlYWRlciIKICAgIF0sCiAgICAiaGVhZGVyX3JlbW92ZSI6IFsKICAgICAgICAidm9pZCBoZWFkZXJfcmVtb3ZlKFtzdHJpbmcgbmFtZV0pIiwKICAgICAgICAiUmVtb3ZlcyBhbiBIVFRQIGhlYWRlciBwcmV2aW91c2x5IHNldCB1c2luZyBoZWFkZXIoKSIKICAgIF0sCiAgICAiaGVhZGVyc19saXN0IjogWwogICAgICAgICJhcnJheSBoZWFkZXJzX2xpc3Qodm9pZCkiLAogICAgICAgICJSZXR1cm4gbGlzdCBvZiBoZWFkZXJzIHRvIGJlIHNlbnQgLyBhbHJlYWR5IHNlbnQiCiAgICBdLAogICAgImhlYWRlcnNfc2VudCI6IFsKICAgICAgICAiYm9vbCBoZWFkZXJzX3NlbnQoW3N0cmluZyAmJGZpbGUgWywgaW50ICYkbGluZV1dKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBoZWFkZXJzIGhhdmUgYWxyZWFkeSBiZWVuIHNlbnQsIGZhbHNlIG90aGVyd2lzZSIKICAgIF0sCiAgICAiaGVicmV2IjogWwogICAgICAgICJzdHJpbmcgaGVicmV2KHN0cmluZyBzdHIgWywgaW50IG1heF9jaGFyc19wZXJfbGluZV0pIiwKICAgICAgICAiQ29udmVydHMgbG9naWNhbCBIZWJyZXcgdGV4dCB0byB2aXN1YWwgdGV4dCIKICAgIF0sCiAgICAiaGVicmV2YyI6IFsKICAgICAgICAic3RyaW5nIGhlYnJldmMoc3RyaW5nIHN0ciBbLCBpbnQgbWF4X2NoYXJzX3Blcl9saW5lXSkiLAogICAgICAgICJDb252ZXJ0cyBsb2dpY2FsIEhlYnJldyB0ZXh0IHRvIHZpc3VhbCB0ZXh0IHdpdGggbmV3bGluZSBjb252ZXJzaW9uIgogICAgXSwKICAgICJoZXhkZWMiOiBbCiAgICAgICAgImludCBoZXhkZWMoc3RyaW5nIGhleGFkZWNpbWFsX251bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBkZWNpbWFsIGVxdWl2YWxlbnQgb2YgdGhlIGhleGFkZWNpbWFsIG51bWJlciIKICAgIF0sCiAgICAiaGlnaGxpZ2h0X2ZpbGUiOiBbCiAgICAgICAgImJvb2wgaGlnaGxpZ2h0X2ZpbGUoc3RyaW5nIGZpbGVfbmFtZSBbLCBib29sIHJldHVybl0gKSIsCiAgICAgICAgIlN5bnRheCBoaWdobGlnaHQgYSBzb3VyY2UgZmlsZSIKICAgIF0sCiAgICAiaGlnaGxpZ2h0X3N0cmluZyI6IFsKICAgICAgICAiYm9vbCBoaWdobGlnaHRfc3RyaW5nKHN0cmluZyBzdHJpbmcgWywgYm9vbCByZXR1cm5dICkiLAogICAgICAgICJTeW50YXggaGlnaGxpZ2h0IGEgc3RyaW5nIG9yIG9wdGlvbmFsbHkgcmV0dXJuIGl0IgogICAgXSwKICAgICJodG1sX2VudGl0eV9kZWNvZGUiOiBbCiAgICAgICAgInN0cmluZyBodG1sX2VudGl0eV9kZWNvZGUoc3RyaW5nIHN0cmluZyBbLCBpbnQgcXVvdGVfc3R5bGVdWywgc3RyaW5nIGNoYXJzZXRdKSIsCiAgICAgICAgIkNvbnZlcnQgYWxsIEhUTUwgZW50aXRpZXMgdG8gdGhlaXIgYXBwbGljYWJsZSBjaGFyYWN0ZXJzIgogICAgXSwKICAgICJodG1sZW50aXRpZXMiOiBbCiAgICAgICAgInN0cmluZyBodG1sZW50aXRpZXMoc3RyaW5nIHN0cmluZyBbLCBpbnQgcXVvdGVfc3R5bGVbLCBzdHJpbmcgY2hhcnNldFssIGJvb2wgZG91YmxlX2VuY29kZV1dXSkiLAogICAgICAgICJDb252ZXJ0IGFsbCBhcHBsaWNhYmxlIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcyIKICAgIF0sCiAgICAiaHRtbHNwZWNpYWxjaGFycyI6IFsKICAgICAgICAic3RyaW5nIGh0bWxzcGVjaWFsY2hhcnMoc3RyaW5nIHN0cmluZyBbLCBpbnQgcXVvdGVfc3R5bGVbLCBzdHJpbmcgY2hhcnNldFssIGJvb2wgZG91YmxlX2VuY29kZV1dXSkiLAogICAgICAgICJDb252ZXJ0IHNwZWNpYWwgY2hhcmFjdGVycyB0byBIVE1MIGVudGl0aWVzIgogICAgXSwKICAgICJodG1sc3BlY2lhbGNoYXJzX2RlY29kZSI6IFsKICAgICAgICAic3RyaW5nIGh0bWxzcGVjaWFsY2hhcnNfZGVjb2RlKHN0cmluZyBzdHJpbmcgWywgaW50IHF1b3RlX3N0eWxlXSkiLAogICAgICAgICJDb252ZXJ0IHNwZWNpYWwgSFRNTCBlbnRpdGllcyBiYWNrIHRvIGNoYXJhY3RlcnMiCiAgICBdLAogICAgImh0dHBfYnVpbGRfcXVlcnkiOiBbCiAgICAgICAgInN0cmluZyBodHRwX2J1aWxkX3F1ZXJ5KG1peGVkIGZvcm1kYXRhIFssIHN0cmluZyBwcmVmaXggWywgc3RyaW5nIGFyZ19zZXBhcmF0b3JdXSkiLAogICAgICAgICJHZW5lcmF0ZXMgYSBmb3JtLWVuY29kZWQgcXVlcnkgc3RyaW5nIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJyYXkgb3Igb2JqZWN0LiIKICAgIF0sCiAgICAiaHlwb3QiOiBbCiAgICAgICAgImZsb2F0IGh5cG90KGZsb2F0IG51bTEsIGZsb2F0IG51bTIpIiwKICAgICAgICAiUmV0dXJucyBzcXJ0KG51bTEqbnVtMSArIG51bTIqbnVtMikiCiAgICBdLAogICAgImliYXNlX2FkZF91c2VyIjogWwogICAgICAgICJib29sIGliYXNlX2FkZF91c2VyKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBzdHJpbmcgdXNlcl9uYW1lLCBzdHJpbmcgcGFzc3dvcmQgWywgc3RyaW5nIGZpcnN0X25hbWUgWywgc3RyaW5nIG1pZGRsZV9uYW1lIFssIHN0cmluZyBsYXN0X25hbWVdXV0pIiwKICAgICAgICAiQWRkIGEgdXNlciB0byBzZWN1cml0eSBkYXRhYmFzZSIKICAgIF0sCiAgICAiaWJhc2VfYWZmZWN0ZWRfcm93cyI6IFsKICAgICAgICAiaW50IGliYXNlX2FmZmVjdGVkX3Jvd3MoIFsgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyIF0gKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGJ5IHRoZSBwcmV2aW91cyBJTlNFUlQsIFVQREFURSBvciBERUxFVEUgc3RhdGVtZW50IgogICAgXSwKICAgICJpYmFzZV9iYWNrdXAiOiBbCiAgICAgICAgIm1peGVkIGliYXNlX2JhY2t1cChyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nIHNvdXJjZV9kYiwgc3RyaW5nIGRlc3RfZmlsZSBbLCBpbnQgb3B0aW9ucyBbLCBib29sIHZlcmJvc2VdXSkiLAogICAgICAgICJJbml0aWF0ZXMgYSBiYWNrdXAgdGFzayBpbiB0aGUgc2VydmljZSBtYW5hZ2VyIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5IgogICAgXSwKICAgICJpYmFzZV9ibG9iX2FkZCI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9ibG9iX2FkZChyZXNvdXJjZSBibG9iX2hhbmRsZSwgc3RyaW5nIGRhdGEpIiwKICAgICAgICAiQWRkIGRhdGEgaW50byBjcmVhdGVkIGJsb2IiCiAgICBdLAogICAgImliYXNlX2Jsb2JfY2FuY2VsIjogWwogICAgICAgICJib29sIGliYXNlX2Jsb2JfY2FuY2VsKHJlc291cmNlIGJsb2JfaGFuZGxlKSIsCiAgICAgICAgIkNhbmNlbCBjcmVhdGluZyBibG9iIgogICAgXSwKICAgICJpYmFzZV9ibG9iX2Nsb3NlIjogWwogICAgICAgICJzdHJpbmcgaWJhc2VfYmxvYl9jbG9zZShyZXNvdXJjZSBibG9iX2hhbmRsZSkiLAogICAgICAgICJDbG9zZSBibG9iIgogICAgXSwKICAgICJpYmFzZV9ibG9iX2NyZWF0ZSI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2VfYmxvYl9jcmVhdGUoW3Jlc291cmNlIGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiQ3JlYXRlIGJsb2IgZm9yIGFkZGluZyBkYXRhIgogICAgXSwKICAgICJpYmFzZV9ibG9iX2VjaG8iOiBbCiAgICAgICAgImJvb2wgaWJhc2VfYmxvYl9lY2hvKFsgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyLCBdIHN0cmluZyBibG9iX2lkKSIsCiAgICAgICAgIk91dHB1dCBibG9iIGNvbnRlbnRzIHRvIGJyb3dzZXIiCiAgICBdLAogICAgImliYXNlX2Jsb2JfZ2V0IjogWwogICAgICAgICJzdHJpbmcgaWJhc2VfYmxvYl9nZXQocmVzb3VyY2UgYmxvYl9oYW5kbGUsIGludCBsZW4pIiwKICAgICAgICAiR2V0IGxlbiBieXRlcyBkYXRhIGZyb20gb3BlbiBibG9iIgogICAgXSwKICAgICJpYmFzZV9ibG9iX2ltcG9ydCI6IFsKICAgICAgICAic3RyaW5nIGliYXNlX2Jsb2JfaW1wb3J0KFsgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyLCBdIHJlc291cmNlIGZpbGUpIiwKICAgICAgICAiQ3JlYXRlIGJsb2IsIGNvcHkgZmlsZSBpbiBpdCwgYW5kIGNsb3NlIGl0IgogICAgXSwKICAgICJpYmFzZV9ibG9iX2luZm8iOiBbCiAgICAgICAgImFycmF5IGliYXNlX2Jsb2JfaW5mbyhbIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciwgXSBzdHJpbmcgYmxvYl9pZCkiLAogICAgICAgICJSZXR1cm4gYmxvYiBsZW5ndGggYW5kIG90aGVyIHVzZWZ1bCBpbmZvIgogICAgXSwKICAgICJpYmFzZV9ibG9iX29wZW4iOiBbCiAgICAgICAgInJlc291cmNlIGliYXNlX2Jsb2Jfb3BlbihbIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciwgXSBzdHJpbmcgYmxvYl9pZCkiLAogICAgICAgICJPcGVuIGJsb2IgZm9yIHJldHJpZXZpbmcgZGF0YSBwYXJ0cyIKICAgIF0sCiAgICAiaWJhc2VfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfY2xvc2UoW3Jlc291cmNlIGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiQ2xvc2UgYW4gSW50ZXJCYXNlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgImliYXNlX2NvbW1pdCI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9jb21taXQoIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciApIiwKICAgICAgICAiQ29tbWl0IHRyYW5zYWN0aW9uIgogICAgXSwKICAgICJpYmFzZV9jb21taXRfcmV0IjogWwogICAgICAgICJib29sIGliYXNlX2NvbW1pdF9yZXQoIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciApIiwKICAgICAgICAiQ29tbWl0IHRyYW5zYWN0aW9uIGFuZCByZXRhaW4gdGhlIHRyYW5zYWN0aW9uIGNvbnRleHQiCiAgICBdLAogICAgImliYXNlX2Nvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIGliYXNlX2Nvbm5lY3Qoc3RyaW5nIGRhdGFiYXNlIFssIHN0cmluZyB1c2VybmFtZSBbLCBzdHJpbmcgcGFzc3dvcmQgWywgc3RyaW5nIGNoYXJzZXQgWywgaW50IGJ1ZmZlcnMgWywgaW50IGRpYWxlY3QgWywgc3RyaW5nIHJvbGVdXV1dXV0pIiwKICAgICAgICAiT3BlbiBhIGNvbm5lY3Rpb24gdG8gYW4gSW50ZXJCYXNlIGRhdGFiYXNlIgogICAgXSwKICAgICJpYmFzZV9kYl9pbmZvIjogWwogICAgICAgICJzdHJpbmcgaWJhc2VfZGJfaW5mbyhyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nIGRiLCBpbnQgYWN0aW9uIFssIGludCBhcmd1bWVudF0pIiwKICAgICAgICAiUmVxdWVzdCBzdGF0aXN0aWNzIGFib3V0IGEgZGF0YWJhc2UiCiAgICBdLAogICAgImliYXNlX2RlbGV0ZV91c2VyIjogWwogICAgICAgICJib29sIGliYXNlX2RlbGV0ZV91c2VyKHJlc291cmNlIHNlcnZpY2VfaGFuZGxlLCBzdHJpbmcgdXNlcl9uYW1lLCBzdHJpbmcgcGFzc3dvcmQgWywgc3RyaW5nIGZpcnN0X25hbWUgWywgc3RyaW5nIG1pZGRsZV9uYW1lIFssIHN0cmluZyBsYXN0X25hbWVdXV0pIiwKICAgICAgICAiRGVsZXRlIGEgdXNlciBmcm9tIHNlY3VyaXR5IGRhdGFiYXNlIgogICAgXSwKICAgICJpYmFzZV9kcm9wX2RiIjogWwogICAgICAgICJib29sIGliYXNlX2Ryb3BfZGIoW3Jlc291cmNlIGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiRHJvcCBhbiBJbnRlckJhc2UgZGF0YWJhc2UiCiAgICBdLAogICAgImliYXNlX2VycmNvZGUiOiBbCiAgICAgICAgImludCBpYmFzZV9lcnJjb2RlKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIGVycm9yIGNvZGUiCiAgICBdLAogICAgImliYXNlX2Vycm1zZyI6IFsKICAgICAgICAic3RyaW5nIGliYXNlX2Vycm1zZyh2b2lkKSIsCiAgICAgICAgIlJldHVybiBlcnJvciBtZXNzYWdlIgogICAgXSwKICAgICJpYmFzZV9leGVjdXRlIjogWwogICAgICAgICJtaXhlZCBpYmFzZV9leGVjdXRlKHJlc291cmNlIHF1ZXJ5IFssIG1peGVkIGJpbmRfYXJnIFssIG1peGVkIGJpbmRfYXJnIFssIC4uLl1dXSkiLAogICAgICAgICJFeGVjdXRlIGEgcHJldmlvdXNseSBwcmVwYXJlZCBxdWVyeSIKICAgIF0sCiAgICAiaWJhc2VfZmV0Y2hfYXNzb2MiOiBbCiAgICAgICAgImFycmF5IGliYXNlX2ZldGNoX2Fzc29jKHJlc291cmNlIHJlc3VsdCBbLCBpbnQgZmV0Y2hfZmxhZ3NdKSIsCiAgICAgICAgIkZldGNoIGEgcm93ICBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcXVlcnkiCiAgICBdLAogICAgImliYXNlX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IGliYXNlX2ZldGNoX29iamVjdChyZXNvdXJjZSByZXN1bHQgWywgaW50IGZldGNoX2ZsYWdzXSkiLAogICAgICAgICJGZXRjaCBhIG9iamVjdCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcXVlcnkiCiAgICBdLAogICAgImliYXNlX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYXJyYXkgaWJhc2VfZmV0Y2hfcm93KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgZmV0Y2hfZmxhZ3NdKSIsCiAgICAgICAgIkZldGNoIGEgcm93ICBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcXVlcnkiCiAgICBdLAogICAgImliYXNlX2ZpZWxkX2luZm8iOiBbCiAgICAgICAgImFycmF5IGliYXNlX2ZpZWxkX2luZm8ocmVzb3VyY2UgcXVlcnlfcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIkdldCBpbmZvcm1hdGlvbiBhYm91dCBhIGZpZWxkIgogICAgXSwKICAgICJpYmFzZV9mcmVlX2V2ZW50X2hhbmRsZXIiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfZnJlZV9ldmVudF9oYW5kbGVyKHJlc291cmNlIGV2ZW50KSIsCiAgICAgICAgIkZyZWVzIHRoZSBldmVudCBoYW5kbGVyIHNldCBieSBpYmFzZV9zZXRfZXZlbnRfaGFuZGxlcigpIgogICAgXSwKICAgICJpYmFzZV9mcmVlX3F1ZXJ5IjogWwogICAgICAgICJib29sIGliYXNlX2ZyZWVfcXVlcnkocmVzb3VyY2UgcXVlcnkpIiwKICAgICAgICAiRnJlZSBtZW1vcnkgdXNlZCBieSBhIHF1ZXJ5IgogICAgXSwKICAgICJpYmFzZV9mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9mcmVlX3Jlc3VsdChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiRnJlZSB0aGUgbWVtb3J5IHVzZWQgYnkgYSByZXN1bHQiCiAgICBdLAogICAgImliYXNlX2dlbl9pZCI6IFsKICAgICAgICAiaW50IGliYXNlX2dlbl9pZChzdHJpbmcgZ2VuZXJhdG9yIFssIGludCBpbmNyZW1lbnQgWywgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyIF1dKSIsCiAgICAgICAgIkluY3JlbWVudHMgdGhlIG5hbWVkIGdlbmVyYXRvciBhbmQgcmV0dXJucyBpdHMgbmV3IHZhbHVlIgogICAgXSwKICAgICJpYmFzZV9tYWludGFpbl9kYiI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9tYWludGFpbl9kYihyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nIGRiLCBpbnQgYWN0aW9uIFssIGludCBhcmd1bWVudF0pIiwKICAgICAgICAiRXhlY3V0ZSBhIG1haW50ZW5hbmNlIGNvbW1hbmQgb24gdGhlIGRhdGFiYXNlIHNlcnZlciIKICAgIF0sCiAgICAiaWJhc2VfbW9kaWZ5X3VzZXIiOiBbCiAgICAgICAgImJvb2wgaWJhc2VfbW9kaWZ5X3VzZXIocmVzb3VyY2Ugc2VydmljZV9oYW5kbGUsIHN0cmluZyB1c2VyX25hbWUsIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgZmlyc3RfbmFtZSBbLCBzdHJpbmcgbWlkZGxlX25hbWUgWywgc3RyaW5nIGxhc3RfbmFtZV1dXSkiLAogICAgICAgICJNb2RpZnkgYSB1c2VyIGluIHNlY3VyaXR5IGRhdGFiYXNlIgogICAgXSwKICAgICJpYmFzZV9uYW1lX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9uYW1lX3Jlc3VsdChyZXNvdXJjZSByZXN1bHQsIHN0cmluZyBuYW1lKSIsCiAgICAgICAgIkFzc2lnbiBhIG5hbWUgdG8gYSByZXN1bHQgZm9yIHVzZSB3aXRoIC4uLiBXSEVSRSBDVVJSRU5UIE9GIDxuYW1lPiBzdGF0ZW1lbnRzIgogICAgXSwKICAgICJpYmFzZV9udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgaWJhc2VfbnVtX2ZpZWxkcyhyZXNvdXJjZSBxdWVyeV9yZXN1bHQpIiwKICAgICAgICAiR2V0IHRoZSBudW1iZXIgb2YgZmllbGRzIGluIHJlc3VsdCIKICAgIF0sCiAgICAiaWJhc2VfbnVtX3BhcmFtcyI6IFsKICAgICAgICAiaW50IGliYXNlX251bV9wYXJhbXMocmVzb3VyY2UgcXVlcnkpIiwKICAgICAgICAiR2V0IHRoZSBudW1iZXIgb2YgcGFyYW1zIGluIGEgcHJlcGFyZWQgcXVlcnkiCiAgICBdLAogICAgImliYXNlX251bV9yb3dzIjogWwogICAgICAgICJpbnQgaWJhc2VfbnVtX3Jvd3MoIHJlc291cmNlIHJlc3VsdF9pZGVudGlmaWVyICkiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiByb3dzIHRoYXQgYXJlIGF2YWlsYWJsZSBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAiaWJhc2VfcGFyYW1faW5mbyI6IFsKICAgICAgICAiYXJyYXkgaWJhc2VfcGFyYW1faW5mbyhyZXNvdXJjZSBxdWVyeSwgaW50IGZpZWxkX251bWJlcikiLAogICAgICAgICJHZXQgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJhbWV0ZXIiCiAgICBdLAogICAgImliYXNlX3Bjb25uZWN0IjogWwogICAgICAgICJyZXNvdXJjZSBpYmFzZV9wY29ubmVjdChzdHJpbmcgZGF0YWJhc2UgWywgc3RyaW5nIHVzZXJuYW1lIFssIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgY2hhcnNldCBbLCBpbnQgYnVmZmVycyBbLCBpbnQgZGlhbGVjdCBbLCBzdHJpbmcgcm9sZV1dXV1dXSkiLAogICAgICAgICJPcGVuIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGFuIEludGVyQmFzZSBkYXRhYmFzZSIKICAgIF0sCiAgICAiaWJhc2VfcHJlcGFyZSI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2VfcHJlcGFyZShyZXNvdXJjZSBsaW5rX2lkZW50aWZpZXJbLCBzdHJpbmcgcXVlcnkgWywgcmVzb3VyY2UgdHJhbnNfaWRlbnRpZmllciBdXSkiLAogICAgICAgICJQcmVwYXJlIGEgcXVlcnkgZm9yIGxhdGVyIGV4ZWN1dGlvbiIKICAgIF0sCiAgICAiaWJhc2VfcXVlcnkiOiBbCiAgICAgICAgIm1peGVkIGliYXNlX3F1ZXJ5KFtyZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIsIFsgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyLCBdXSBzdHJpbmcgcXVlcnkgWywgbWl4ZWQgYmluZF9hcmcgWywgbWl4ZWQgYmluZF9hcmcgWywgLi4uXV1dKSIsCiAgICAgICAgIkV4ZWN1dGUgYSBxdWVyeSIKICAgIF0sCiAgICAiaWJhc2VfcmVzdG9yZSI6IFsKICAgICAgICAibWl4ZWQgaWJhc2VfcmVzdG9yZShyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSwgc3RyaW5nIHNvdXJjZV9maWxlLCBzdHJpbmcgZGVzdF9kYiBbLCBpbnQgb3B0aW9ucyBbLCBib29sIHZlcmJvc2VdXSkiLAogICAgICAgICJJbml0aWF0ZXMgYSByZXN0b3JlIHRhc2sgaW4gdGhlIHNlcnZpY2UgbWFuYWdlciBhbmQgcmV0dXJucyBpbW1lZGlhdGVseSIKICAgIF0sCiAgICAiaWJhc2Vfcm9sbGJhY2siOiBbCiAgICAgICAgImJvb2wgaWJhc2Vfcm9sbGJhY2soIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciApIiwKICAgICAgICAiUm9sbGJhY2sgdHJhbnNhY3Rpb24iCiAgICBdLAogICAgImliYXNlX3JvbGxiYWNrX3JldCI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9yb2xsYmFja19yZXQoIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciApIiwKICAgICAgICAiUm9sbGJhY2sgdHJhbnNhY3Rpb24gYW5kIHJldGFpbiB0aGUgdHJhbnNhY3Rpb24gY29udGV4dCIKICAgIF0sCiAgICAiaWJhc2Vfc2VydmVyX2luZm8iOiBbCiAgICAgICAgInN0cmluZyBpYmFzZV9zZXJ2ZXJfaW5mbyhyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSwgaW50IGFjdGlvbikiLAogICAgICAgICJSZXF1ZXN0IGluZm9ybWF0aW9uIGFib3V0IGEgZGF0YWJhc2Ugc2VydmVyIgogICAgXSwKICAgICJpYmFzZV9zZXJ2aWNlX2F0dGFjaCI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2Vfc2VydmljZV9hdHRhY2goc3RyaW5nIGhvc3QsIHN0cmluZyBkYmFfdXNlcm5hbWUsIHN0cmluZyBkYmFfcGFzc3dvcmQpIiwKICAgICAgICAiQ29ubmVjdCB0byB0aGUgc2VydmljZSBtYW5hZ2VyIgogICAgXSwKICAgICJpYmFzZV9zZXJ2aWNlX2RldGFjaCI6IFsKICAgICAgICAiYm9vbCBpYmFzZV9zZXJ2aWNlX2RldGFjaChyZXNvdXJjZSBzZXJ2aWNlX2hhbmRsZSkiLAogICAgICAgICJEaXNjb25uZWN0IGZyb20gdGhlIHNlcnZpY2UgbWFuYWdlciIKICAgIF0sCiAgICAiaWJhc2Vfc2V0X2V2ZW50X2hhbmRsZXIiOiBbCiAgICAgICAgInJlc291cmNlIGliYXNlX3NldF9ldmVudF9oYW5kbGVyKFtyZXNvdXJjZSBsaW5rX2lkZW50aWZpZXIsXSBjYWxsYmFjayBoYW5kbGVyLCBzdHJpbmcgZXZlbnQgWywgc3RyaW5nIGV2ZW50IFssIC4uLl1dKSIsCiAgICAgICAgIlJlZ2lzdGVyIHRoZSBjYWxsYmFjayBmb3IgaGFuZGxpbmcgZWFjaCBvZiB0aGUgbmFtZWQgZXZlbnRzIgogICAgXSwKICAgICJpYmFzZV90cmFucyI6IFsKICAgICAgICAicmVzb3VyY2UgaWJhc2VfdHJhbnMoW2ludCB0cmFuc19hcmdzIFssIHJlc291cmNlIGxpbmtfaWRlbnRpZmllciBbLCAuLi4gXSwgaW50IHRyYW5zX2FyZ3MgWywgcmVzb3VyY2UgbGlua19pZGVudGlmaWVyIFssIC4uLiBdXSBbLCAuLi5dXV0pIiwKICAgICAgICAiU3RhcnQgYSB0cmFuc2FjdGlvbiBvdmVyIG9uZSBvciBzZXZlcmFsIGRhdGFiYXNlcyIKICAgIF0sCiAgICAiaWJhc2Vfd2FpdF9ldmVudCI6IFsKICAgICAgICAic3RyaW5nIGliYXNlX3dhaXRfZXZlbnQoW3Jlc291cmNlIGxpbmtfaWRlbnRpZmllcixdIHN0cmluZyBldmVudCBbLCBzdHJpbmcgZXZlbnQgWywgLi4uXV0pIiwKICAgICAgICAiV2FpdHMgZm9yIGFueSBvbmUgb2YgdGhlIHBhc3NlZCBJbnRlcmJhc2UgZXZlbnRzIHRvIGJlIHBvc3RlZCBieSB0aGUgZGF0YWJhc2UsIGFuZCByZXR1cm5zIGl0cyBuYW1lIgogICAgXSwKICAgICJpY29udiI6IFsKICAgICAgICAic3RyaW5nIGljb252KHN0cmluZyBpbl9jaGFyc2V0LCBzdHJpbmcgb3V0X2NoYXJzZXQsIHN0cmluZyBzdHIpIiwKICAgICAgICAiUmV0dXJucyBzdHIgY29udmVydGVkIHRvIHRoZSBvdXRfY2hhcnNldCBjaGFyYWN0ZXIgc2V0IgogICAgXSwKICAgICJpY29udl9nZXRfZW5jb2RpbmciOiBbCiAgICAgICAgIm1peGVkIGljb252X2dldF9lbmNvZGluZyhbc3RyaW5nIHR5cGVdKSIsCiAgICAgICAgIkdldCBpbnRlcm5hbCBlbmNvZGluZyBhbmQgb3V0cHV0IGVuY29kaW5nIGZvciBvYl9pY29udl9oYW5kbGVyKCkiCiAgICBdLAogICAgImljb252X21pbWVfZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgaWNvbnZfbWltZV9kZWNvZGUoc3RyaW5nIGVuY29kZWRfc3RyaW5nIFssIGludCBtb2RlLCBzdHJpbmcgY2hhcnNldF0pIiwKICAgICAgICAiRGVjb2RlcyBhIG1pbWUgaGVhZGVyIGZpZWxkIgogICAgXSwKICAgICJpY29udl9taW1lX2RlY29kZV9oZWFkZXJzIjogWwogICAgICAgICJhcnJheSBpY29udl9taW1lX2RlY29kZV9oZWFkZXJzKHN0cmluZyBoZWFkZXJzIFssIGludCBtb2RlLCBzdHJpbmcgY2hhcnNldF0pIiwKICAgICAgICAiRGVjb2RlcyBtdWx0aXBsZSBtaW1lIGhlYWRlciBmaWVsZHMiCiAgICBdLAogICAgImljb252X21pbWVfZW5jb2RlIjogWwogICAgICAgICJzdHJpbmcgaWNvbnZfbWltZV9lbmNvZGUoc3RyaW5nIGZpZWxkX25hbWUsIHN0cmluZyBmaWVsZF92YWx1ZSBbLCBhcnJheSBwcmVmZXJlbmNlXSkiLAogICAgICAgICJDb21wb3NlcyBhIG1pbWUgaGVhZGVyIGZpZWxkIHdpdGggZmllbGRfbmFtZSBhbmQgZmllbGRfdmFsdWUgaW4gYSBzcGVjaWZpZWQgc2NoZW1lIgogICAgXSwKICAgICJpY29udl9zZXRfZW5jb2RpbmciOiBbCiAgICAgICAgImJvb2wgaWNvbnZfc2V0X2VuY29kaW5nKHN0cmluZyB0eXBlLCBzdHJpbmcgY2hhcnNldCkiLAogICAgICAgICJTZXRzIGludGVybmFsIGVuY29kaW5nIGFuZCBvdXRwdXQgZW5jb2RpbmcgZm9yIG9iX2ljb252X2hhbmRsZXIoKSIKICAgIF0sCiAgICAiaWNvbnZfc3RybGVuIjogWwogICAgICAgICJpbnQgaWNvbnZfc3RybGVuKHN0cmluZyBzdHIgWywgc3RyaW5nIGNoYXJzZXRdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGNoYXJhY3RlciBjb3VudCBvZiBzdHIiCiAgICBdLAogICAgImljb252X3N0cnBvcyI6IFsKICAgICAgICAiaW50IGljb252X3N0cnBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldCBbLCBzdHJpbmcgY2hhcnNldF1dKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGZpcnN0IG9jY3VycmVuY2Ugb2YgbmVlZGxlIHdpdGhpbiBwYXJ0IG9mIGhheXN0YWNrIGJlZ2lubmluZyB3aXRoIG9mZnNldCIKICAgIF0sCiAgICAiaWNvbnZfc3RycnBvcyI6IFsKICAgICAgICAiaW50IGljb252X3N0cnJwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIHN0cmluZyBjaGFyc2V0XSkiLAogICAgICAgICJGaW5kcyBwb3NpdGlvbiBvZiBsYXN0IG9jY3VycmVuY2Ugb2YgbmVlZGxlIHdpdGhpbiBwYXJ0IG9mIGhheXN0YWNrIGJlZ2lubmluZyB3aXRoIG9mZnNldCIKICAgIF0sCiAgICAiaWNvbnZfc3Vic3RyIjogWwogICAgICAgICJzdHJpbmcgaWNvbnZfc3Vic3RyKHN0cmluZyBzdHIsIGludCBvZmZzZXQsIFtpbnQgbGVuZ3RoLCBzdHJpbmcgY2hhcnNldF0pIiwKICAgICAgICAiUmV0dXJucyBzcGVjaWZpZWQgcGFydCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAiaWRhdGUiOiBbCiAgICAgICAgImludCBpZGF0ZShzdHJpbmcgZm9ybWF0IFssIGludCB0aW1lc3RhbXBdKSIsCiAgICAgICAgIkZvcm1hdCBhIGxvY2FsIHRpbWUvZGF0ZSBhcyBpbnRlZ2VyIgogICAgXSwKICAgICJpZG5fdG9fYXNjaWkiOiBbCiAgICAgICAgImludCBpZG5fdG9fYXNjaWkoc3RyaW5nIGRvbWFpblssIGludCBvcHRpb25zXSkiLAogICAgICAgICJDb252ZXJ0cyBhbiBVbmljb2RlIGRvbWFpbiB0byBBU0NJSSByZXByZXNlbnRhdGlvbiwgYXMgZGVmaW5lZCBpbiB0aGUgSUROQSBSRkMiCiAgICBdLAogICAgImlkbl90b191dGY4IjogWwogICAgICAgICJpbnQgaWRuX3RvX3V0Zjgoc3RyaW5nIGRvbWFpblssIGludCBvcHRpb25zXSkiLAogICAgICAgICJDb252ZXJ0cyBhbiBBU0NJSSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9tYWluIHRvIFVuaWNvZGUgKFVURi04KSwgYXMgZGVmaW5lZCBpbiB0aGUgSUROQSBSRkMiCiAgICBdLAogICAgImlnbm9yZV91c2VyX2Fib3J0IjogWwogICAgICAgICJpbnQgaWdub3JlX3VzZXJfYWJvcnQoW3N0cmluZyB2YWx1ZV0pIiwKICAgICAgICAiU2V0IHdoZXRoZXIgd2Ugd2FudCB0byBpZ25vcmUgYSB1c2VyIGFib3J0IGV2ZW50IG9yIG5vdCIKICAgIF0sCiAgICAiaW1hZ2Uyd2JtcCI6IFsKICAgICAgICAiYm9vbCBpbWFnZTJ3Ym1wKHJlc291cmNlIGltIFssIHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgdGhyZXNob2xkXV0pIiwKICAgICAgICAiT3V0cHV0IFdCTVAgaW1hZ2UgdG8gYnJvd3NlciBvciBmaWxlIgogICAgXSwKICAgICJpbWFnZV90eXBlX3RvX2V4dGVuc2lvbiI6IFsKICAgICAgICAic3RyaW5nIGltYWdlX3R5cGVfdG9fZXh0ZW5zaW9uKGludCBpbWFnZXR5cGUgWywgYm9vbCBpbmNsdWRlX2RvdF0pIiwKICAgICAgICAiR2V0IGZpbGUgZXh0ZW5zaW9uIGZvciBpbWFnZS10eXBlIHJldHVybmVkIGJ5IGdldGltYWdlc2l6ZSwgZXhpZl9yZWFkX2RhdGEsIGV4aWZfdGh1bWJuYWlsLCBleGlmX2ltYWdldHlwZSIKICAgIF0sCiAgICAiaW1hZ2VfdHlwZV90b19taW1lX3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBpbWFnZV90eXBlX3RvX21pbWVfdHlwZShpbnQgaW1hZ2V0eXBlKSIsCiAgICAgICAgIkdldCBNaW1lLVR5cGUgZm9yIGltYWdlLXR5cGUgcmV0dXJuZWQgYnkgZ2V0aW1hZ2VzaXplLCBleGlmX3JlYWRfZGF0YSwgZXhpZl90aHVtYm5haWwsIGV4aWZfaW1hZ2V0eXBlIgogICAgXSwKICAgICJpbWFnZWFscGhhYmxlbmRpbmciOiBbCiAgICAgICAgImJvb2wgaW1hZ2VhbHBoYWJsZW5kaW5nKHJlc291cmNlIGltLCBib29sIG9uKSIsCiAgICAgICAgIlR1cm4gYWxwaGEgYmxlbmRpbmcgbW9kZSBvbiBvciBvZmYgZm9yIHRoZSBnaXZlbiBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2VhbnRpYWxpYXMiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VhbnRpYWxpYXMocmVzb3VyY2UgaW0sIGJvb2wgb24pIiwKICAgICAgICAiU2hvdWxkIGFudGlhbGlhc2VkIGZ1bmN0aW9ucyB1c2VkIG9yIG5vdCIKICAgIF0sCiAgICAiaW1hZ2VhcmMiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VhcmMocmVzb3VyY2UgaW0sIGludCBjeCwgaW50IGN5LCBpbnQgdywgaW50IGgsIGludCBzLCBpbnQgZSwgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgcGFydGlhbCBlbGxpcHNlIgogICAgXSwKICAgICJpbWFnZWNoYXIiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VjaGFyKHJlc291cmNlIGltLCBpbnQgZm9udCwgaW50IHgsIGludCB5LCBzdHJpbmcgYywgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgY2hhcmFjdGVyIgogICAgXSwKICAgICJpbWFnZWNoYXJ1cCI6IFsKICAgICAgICAiYm9vbCBpbWFnZWNoYXJ1cChyZXNvdXJjZSBpbSwgaW50IGZvbnQsIGludCB4LCBpbnQgeSwgc3RyaW5nIGMsIGludCBjb2wpIiwKICAgICAgICAiRHJhdyBhIGNoYXJhY3RlciByb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UiCiAgICBdLAogICAgImltYWdlY29sb3JhbGxvY2F0ZSI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JhbGxvY2F0ZShyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSkiLAogICAgICAgICJBbGxvY2F0ZSBhIGNvbG9yIGZvciBhbiBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmFsbG9jYXRlYWxwaGEiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9yYWxsb2NhdGVhbHBoYShyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKSIsCiAgICAgICAgIkFsbG9jYXRlIGEgY29sb3Igd2l0aCBhbiBhbHBoYSBsZXZlbC4gIFdvcmtzIGZvciB0cnVlIGNvbG9yIGFuZCBwYWxldHRlIGJhc2VkIGltYWdlcyIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmF0IjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcmF0KHJlc291cmNlIGltLCBpbnQgeCwgaW50IHkpIiwKICAgICAgICAiR2V0IHRoZSBpbmRleCBvZiB0aGUgY29sb3Igb2YgYSBwaXhlbCIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcmNsb3Nlc3QiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9yY2xvc2VzdChyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSkiLAogICAgICAgICJHZXQgdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGNvbG9yIHRvIHRoZSBzcGVjaWZpZWQgY29sb3IiCiAgICBdLAogICAgImltYWdlY29sb3JjbG9zZXN0YWxwaGEiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9yY2xvc2VzdGFscGhhKHJlc291cmNlIGltLCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpIiwKICAgICAgICAiRmluZCB0aGUgY2xvc2VzdCBtYXRjaGluZyBjb2xvdXIgd2l0aCBhbHBoYSB0cmFuc3BhcmVuY3kiCiAgICBdLAogICAgImltYWdlY29sb3JjbG9zZXN0aHdiIjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcmNsb3Nlc3Rod2IocmVzb3VyY2UgaW0sIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUpIiwKICAgICAgICAiR2V0IHRoZSBpbmRleCBvZiB0aGUgY29sb3Igd2hpY2ggaGFzIHRoZSBodWUsIHdoaXRlIGFuZCBibGFja25lc3MgbmVhcmVzdCB0byB0aGUgZ2l2ZW4gY29sb3IiCiAgICBdLAogICAgImltYWdlY29sb3JkZWFsbG9jYXRlIjogWwogICAgICAgICJib29sIGltYWdlY29sb3JkZWFsbG9jYXRlKHJlc291cmNlIGltLCBpbnQgaW5kZXgpIiwKICAgICAgICAiRGUtYWxsb2NhdGUgYSBjb2xvciBmb3IgYW4gaW1hZ2UiCiAgICBdLAogICAgImltYWdlY29sb3JleGFjdCI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JleGFjdChyZXNvdXJjZSBpbSwgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSkiLAogICAgICAgICJHZXQgdGhlIGluZGV4IG9mIHRoZSBzcGVjaWZpZWQgY29sb3IiCiAgICBdLAogICAgImltYWdlY29sb3JleGFjdGFscGhhIjogWwogICAgICAgICJpbnQgaW1hZ2Vjb2xvcmV4YWN0YWxwaGEocmVzb3VyY2UgaW0sIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkiLAogICAgICAgICJGaW5kIGV4YWN0IG1hdGNoIGZvciBjb2xvdXIgd2l0aCB0cmFuc3BhcmVuY3kiCiAgICBdLAogICAgImltYWdlY29sb3JtYXRjaCI6IFsKICAgICAgICAiYm9vbCBpbWFnZWNvbG9ybWF0Y2gocmVzb3VyY2UgaW0xLCByZXNvdXJjZSBpbTIpIiwKICAgICAgICAiTWFrZXMgdGhlIGNvbG9ycyBvZiB0aGUgcGFsZXR0ZSB2ZXJzaW9uIG9mIGFuIGltYWdlIG1vcmUgY2xvc2VseSBtYXRjaCB0aGUgdHJ1ZSBjb2xvciB2ZXJzaW9uIgogICAgXSwKICAgICJpbWFnZWNvbG9ycmVzb2x2ZSI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JyZXNvbHZlKHJlc291cmNlIGltLCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlKSIsCiAgICAgICAgIkdldCB0aGUgaW5kZXggb2YgdGhlIHNwZWNpZmllZCBjb2xvciBvciBpdHMgY2xvc2VzdCBwb3NzaWJsZSBhbHRlcm5hdGl2ZSIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcnJlc29sdmVhbHBoYSI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JyZXNvbHZlYWxwaGEocmVzb3VyY2UgaW0sIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkiLAogICAgICAgICJSZXNvbHZlL0FsbG9jYXRlIGEgY29sb3VyIHdpdGggYW4gYWxwaGEgbGV2ZWwuICBXb3JrcyBmb3IgdHJ1ZSBjb2xvdXIgYW5kIHBhbGV0dGUgYmFzZWQgaW1hZ2VzIgogICAgXSwKICAgICJpbWFnZWNvbG9yc2V0IjogWwogICAgICAgICJ2b2lkIGltYWdlY29sb3JzZXQocmVzb3VyY2UgaW0sIGludCBjb2wsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUpIiwKICAgICAgICAiU2V0IHRoZSBjb2xvciBmb3IgdGhlIHNwZWNpZmllZCBwYWxldHRlIGluZGV4IgogICAgXSwKICAgICJpbWFnZWNvbG9yc2ZvcmluZGV4IjogWwogICAgICAgICJhcnJheSBpbWFnZWNvbG9yc2ZvcmluZGV4KHJlc291cmNlIGltLCBpbnQgY29sKSIsCiAgICAgICAgIkdldCB0aGUgY29sb3JzIGZvciBhbiBpbmRleCIKICAgIF0sCiAgICAiaW1hZ2Vjb2xvcnN0b3RhbCI6IFsKICAgICAgICAiaW50IGltYWdlY29sb3JzdG90YWwocmVzb3VyY2UgaW0pIiwKICAgICAgICAiRmluZCBvdXQgdGhlIG51bWJlciBvZiBjb2xvcnMgaW4gYW4gaW1hZ2UncyBwYWxldHRlIgogICAgXSwKICAgICJpbWFnZWNvbG9ydHJhbnNwYXJlbnQiOiBbCiAgICAgICAgImludCBpbWFnZWNvbG9ydHJhbnNwYXJlbnQocmVzb3VyY2UgaW0gWywgaW50IGNvbF0pIiwKICAgICAgICAiRGVmaW5lIGEgY29sb3IgYXMgdHJhbnNwYXJlbnQiCiAgICBdLAogICAgImltYWdlY29udm9sdXRpb24iOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY29udm9sdXRpb24ocmVzb3VyY2Ugc3JjX2ltLCBhcnJheSBtYXRyaXgzeDMsIGRvdWJsZSBkaXYsIGRvdWJsZSBvZmZzZXQpIiwKICAgICAgICAiQXBwbHkgYSAzeDMgY29udm9sdXRpb24gbWF0cml4LCB1c2luZyBjb2VmZmljaWVudCBkaXYgYW5kIG9mZnNldCIKICAgIF0sCiAgICAiaW1hZ2Vjb3B5IjogWwogICAgICAgICJib29sIGltYWdlY29weShyZXNvdXJjZSBkc3RfaW0sIHJlc291cmNlIHNyY19pbSwgaW50IGRzdF94LCBpbnQgZHN0X3ksIGludCBzcmNfeCwgaW50IHNyY195LCBpbnQgc3JjX3csIGludCBzcmNfaCkiLAogICAgICAgICJDb3B5IHBhcnQgb2YgYW4gaW1hZ2UiCiAgICBdLAogICAgImltYWdlY29weW1lcmdlIjogWwogICAgICAgICJib29sIGltYWdlY29weW1lcmdlKHJlc291cmNlIHNyY19pbSwgcmVzb3VyY2UgZHN0X2ltLCBpbnQgZHN0X3gsIGludCBkc3RfeSwgaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBzcmNfdywgaW50IHNyY19oLCBpbnQgcGN0KSIsCiAgICAgICAgIk1lcmdlIG9uZSBwYXJ0IG9mIGFuIGltYWdlIHdpdGggYW5vdGhlciIKICAgIF0sCiAgICAiaW1hZ2Vjb3B5bWVyZ2VncmF5IjogWwogICAgICAgICJib29sIGltYWdlY29weW1lcmdlZ3JheShyZXNvdXJjZSBzcmNfaW0sIHJlc291cmNlIGRzdF9pbSwgaW50IGRzdF94LCBpbnQgZHN0X3ksIGludCBzcmNfeCwgaW50IHNyY195LCBpbnQgc3JjX3csIGludCBzcmNfaCwgaW50IHBjdCkiLAogICAgICAgICJNZXJnZSBvbmUgcGFydCBvZiBhbiBpbWFnZSB3aXRoIGFub3RoZXIiCiAgICBdLAogICAgImltYWdlY29weXJlc2FtcGxlZCI6IFsKICAgICAgICAiYm9vbCBpbWFnZWNvcHlyZXNhbXBsZWQocmVzb3VyY2UgZHN0X2ltLCByZXNvdXJjZSBzcmNfaW0sIGludCBkc3RfeCwgaW50IGRzdF95LCBpbnQgc3JjX3gsIGludCBzcmNfeSwgaW50IGRzdF93LCBpbnQgZHN0X2gsIGludCBzcmNfdywgaW50IHNyY19oKSIsCiAgICAgICAgIkNvcHkgYW5kIHJlc2l6ZSBwYXJ0IG9mIGFuIGltYWdlIHVzaW5nIHJlc2FtcGxpbmcgdG8gaGVscCBlbnN1cmUgY2xhcml0eSIKICAgIF0sCiAgICAiaW1hZ2Vjb3B5cmVzaXplZCI6IFsKICAgICAgICAiYm9vbCBpbWFnZWNvcHlyZXNpemVkKHJlc291cmNlIGRzdF9pbSwgcmVzb3VyY2Ugc3JjX2ltLCBpbnQgZHN0X3gsIGludCBkc3RfeSwgaW50IHNyY194LCBpbnQgc3JjX3ksIGludCBkc3RfdywgaW50IGRzdF9oLCBpbnQgc3JjX3csIGludCBzcmNfaCkiLAogICAgICAgICJDb3B5IGFuZCByZXNpemUgcGFydCBvZiBhbiBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGUiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlKGludCB4X3NpemUsIGludCB5X3NpemUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21nZCI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VjcmVhdGVmcm9tZ2Qoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIEdEIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21nZDIiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRlZnJvbWdkMihzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gR0QyIGZpbGUgb3IgVVJMIgogICAgXSwKICAgICJpbWFnZWNyZWF0ZWZyb21nZDJwYXJ0IjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb21nZDJwYXJ0KHN0cmluZyBmaWxlbmFtZSwgaW50IHNyY1gsIGludCBzcmNZLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gYSBnaXZlbiBwYXJ0IG9mIEdEMiBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9tZ2lmIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb21naWYoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIEdJRiBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9tanBlZyI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VjcmVhdGVmcm9tanBlZyhzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gSlBFRyBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9tcG5nIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb21wbmcoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIFBORyBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9tc3RyaW5nIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb21zdHJpbmcoc3RyaW5nIGltYWdlKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIHRoZSBpbWFnZSBzdHJlYW0gaW4gdGhlIHN0cmluZyIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9td2JtcCI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hZ2VjcmVhdGVmcm9td2JtcChzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IGltYWdlIGZyb20gV0JNUCBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9teGJtIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb214Ym0oc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIFhCTSBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGVmcm9teHBtIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWNyZWF0ZWZyb214cG0oc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBhIG5ldyBpbWFnZSBmcm9tIFhQTSBmaWxlIG9yIFVSTCIKICAgIF0sCiAgICAiaW1hZ2VjcmVhdGV0cnVlY29sb3IiOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlY3JlYXRldHJ1ZWNvbG9yKGludCB4X3NpemUsIGludCB5X3NpemUpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IHRydWUgY29sb3IgaW1hZ2UiCiAgICBdLAogICAgImltYWdlZGFzaGVkbGluZSI6IFsKICAgICAgICAiYm9vbCBpbWFnZWRhc2hlZGxpbmUocmVzb3VyY2UgaW0sIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgZGFzaGVkIGxpbmUiCiAgICBdLAogICAgImltYWdlZGVzdHJveSI6IFsKICAgICAgICAiYm9vbCBpbWFnZWRlc3Ryb3kocmVzb3VyY2UgaW0pIiwKICAgICAgICAiRGVzdHJveSBhbiBpbWFnZSIKICAgIF0sCiAgICAiaW1hZ2VlbGxpcHNlIjogWwogICAgICAgICJib29sIGltYWdlZWxsaXBzZShyZXNvdXJjZSBpbSwgaW50IGN4LCBpbnQgY3ksIGludCB3LCBpbnQgaCwgaW50IGNvbG9yKSIsCiAgICAgICAgIkRyYXcgYW4gZWxsaXBzZSIKICAgIF0sCiAgICAiaW1hZ2VmaWxsIjogWwogICAgICAgICJib29sIGltYWdlZmlsbChyZXNvdXJjZSBpbSwgaW50IHgsIGludCB5LCBpbnQgY29sKSIsCiAgICAgICAgIkZsb29kIGZpbGwiCiAgICBdLAogICAgImltYWdlZmlsbGVkYXJjIjogWwogICAgICAgICJib29sIGltYWdlZmlsbGVkYXJjKHJlc291cmNlIGltLCBpbnQgY3gsIGludCBjeSwgaW50IHcsIGludCBoLCBpbnQgcywgaW50IGUsIGludCBjb2wsIGludCBzdHlsZSkiLAogICAgICAgICJEcmF3IGEgZmlsbGVkIHBhcnRpYWwgZWxsaXBzZSIKICAgIF0sCiAgICAiaW1hZ2VmaWxsZWRlbGxpcHNlIjogWwogICAgICAgICJib29sIGltYWdlZmlsbGVkZWxsaXBzZShyZXNvdXJjZSBpbSwgaW50IGN4LCBpbnQgY3ksIGludCB3LCBpbnQgaCwgaW50IGNvbG9yKSIsCiAgICAgICAgIkRyYXcgYW4gZWxsaXBzZSIKICAgIF0sCiAgICAiaW1hZ2VmaWxsZWRwb2x5Z29uIjogWwogICAgICAgICJib29sIGltYWdlZmlsbGVkcG9seWdvbihyZXNvdXJjZSBpbSwgYXJyYXkgcG9pbnQsIGludCBudW1fcG9pbnRzLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBmaWxsZWQgcG9seWdvbiIKICAgIF0sCiAgICAiaW1hZ2VmaWxsZWRyZWN0YW5nbGUiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VmaWxsZWRyZWN0YW5nbGUocmVzb3VyY2UgaW0sIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgZmlsbGVkIHJlY3RhbmdsZSIKICAgIF0sCiAgICAiaW1hZ2VmaWxsdG9ib3JkZXIiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VmaWxsdG9ib3JkZXIocmVzb3VyY2UgaW0sIGludCB4LCBpbnQgeSwgaW50IGJvcmRlciwgaW50IGNvbCkiLAogICAgICAgICJGbG9vZCBmaWxsIHRvIHNwZWNpZmljIGNvbG9yIgogICAgXSwKICAgICJpbWFnZWZpbHRlciI6IFsKICAgICAgICAiYm9vbCBpbWFnZWZpbHRlcihyZXNvdXJjZSBzcmNfaW0sIGludCBmaWx0ZXJ0eXBlLCBbYXJnc10gKSIsCiAgICAgICAgIkFwcGxpZXMgRmlsdGVyIGFuIGltYWdlIHVzaW5nIGEgY3VzdG9tIGFuZ2xlIgogICAgXSwKICAgICJpbWFnZWZvbnRoZWlnaHQiOiBbCiAgICAgICAgImludCBpbWFnZWZvbnRoZWlnaHQoaW50IGZvbnQpIiwKICAgICAgICAiR2V0IGZvbnQgaGVpZ2h0IgogICAgXSwKICAgICJpbWFnZWZvbnR3aWR0aCI6IFsKICAgICAgICAiaW50IGltYWdlZm9udHdpZHRoKGludCBmb250KSIsCiAgICAgICAgIkdldCBmb250IHdpZHRoIgogICAgXSwKICAgICJpbWFnZWZ0YmJveCI6IFsKICAgICAgICAiYXJyYXkgaW1hZ2VmdGJib3goZmxvYXQgc2l6ZSwgZmxvYXQgYW5nbGUsIHN0cmluZyBmb250X2ZpbGUsIHN0cmluZyB0ZXh0IFssIGFycmF5IGV4dHJhaW5mb10pIiwKICAgICAgICAiR2l2ZSB0aGUgYm91bmRpbmcgYm94IG9mIGEgdGV4dCB1c2luZyBmb250cyB2aWEgZnJlZXR5cGUyIgogICAgXSwKICAgICJpbWFnZWZ0dGV4dCI6IFsKICAgICAgICAiYXJyYXkgaW1hZ2VmdHRleHQocmVzb3VyY2UgaW0sIGZsb2F0IHNpemUsIGZsb2F0IGFuZ2xlLCBpbnQgeCwgaW50IHksIGludCBjb2wsIHN0cmluZyBmb250X2ZpbGUsIHN0cmluZyB0ZXh0IFssIGFycmF5IGV4dHJhaW5mb10pIiwKICAgICAgICAiV3JpdGUgdGV4dCB0byB0aGUgaW1hZ2UgdXNpbmcgZm9udHMgdmlhIGZyZWV0eXBlMiIKICAgIF0sCiAgICAiaW1hZ2VnYW1tYWNvcnJlY3QiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VnYW1tYWNvcnJlY3QocmVzb3VyY2UgaW0sIGZsb2F0IGlucHV0Z2FtbWEsIGZsb2F0IG91dHB1dGdhbW1hKSIsCiAgICAgICAgIkFwcGx5IGEgZ2FtbWEgY29ycmVjdGlvbiB0byBhIEdEIGltYWdlIgogICAgXSwKICAgICJpbWFnZWdkIjogWwogICAgICAgICJib29sIGltYWdlZ2QocmVzb3VyY2UgaW0gWywgc3RyaW5nIGZpbGVuYW1lXSkiLAogICAgICAgICJPdXRwdXQgR0QgaW1hZ2UgdG8gYnJvd3NlciBvciBmaWxlIgogICAgXSwKICAgICJpbWFnZWdkMiI6IFsKICAgICAgICAiYm9vbCBpbWFnZWdkMihyZXNvdXJjZSBpbSBbLCBzdHJpbmcgZmlsZW5hbWUsIFssIGludCBjaHVua19zaXplLCBbLCBpbnQgdHlwZV1dXSkiLAogICAgICAgICJPdXRwdXQgR0QyIGltYWdlIHRvIGJyb3dzZXIgb3IgZmlsZSIKICAgIF0sCiAgICAiaW1hZ2VnaWYiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VnaWYocmVzb3VyY2UgaW0gWywgc3RyaW5nIGZpbGVuYW1lXSkiLAogICAgICAgICJPdXRwdXQgR0lGIGltYWdlIHRvIGJyb3dzZXIgb3IgZmlsZSIKICAgIF0sCiAgICAiaW1hZ2VncmFic2NyZWVuIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZWdyYWJzY3JlZW4oKSIsCiAgICAgICAgIkdyYWIgYSBzY3JlZW5zaG90IgogICAgXSwKICAgICJpbWFnZWdyYWJ3aW5kb3ciOiBbCiAgICAgICAgInJlc291cmNlIGltYWdlZ3JhYndpbmRvdyhpbnQgd2luZG93X2hhbmRsZSBbLCBpbnQgY2xpZW50X2FyZWFdKSIsCiAgICAgICAgIkdyYWIgYSB3aW5kb3cgb3IgaXRzIGNsaWVudCBhcmVhIHVzaW5nIGEgd2luZG93cyBoYW5kbGUgKEhXTkQgcHJvcGVydHkgaW4gQ09NIGluc3RhbmNlKSIKICAgIF0sCiAgICAiaW1hZ2VpbnRlcmxhY2UiOiBbCiAgICAgICAgImludCBpbWFnZWludGVybGFjZShyZXNvdXJjZSBpbSBbLCBpbnQgaW50ZXJsYWNlXSkiLAogICAgICAgICJFbmFibGUgb3IgZGlzYWJsZSBpbnRlcmxhY2UiCiAgICBdLAogICAgImltYWdlaXN0cnVlY29sb3IiOiBbCiAgICAgICAgImJvb2wgaW1hZ2Vpc3RydWVjb2xvcihyZXNvdXJjZSBpbSkiLAogICAgICAgICJyZXR1cm4gdHJ1ZSBpZiB0aGUgaW1hZ2UgdXNlcyB0cnVlY29sb3IiCiAgICBdLAogICAgImltYWdlanBlZyI6IFsKICAgICAgICAiYm9vbCBpbWFnZWpwZWcocmVzb3VyY2UgaW0gWywgc3RyaW5nIGZpbGVuYW1lIFssIGludCBxdWFsaXR5XV0pIiwKICAgICAgICAiT3V0cHV0IEpQRUcgaW1hZ2UgdG8gYnJvd3NlciBvciBmaWxlIgogICAgXSwKICAgICJpbWFnZWxheWVyZWZmZWN0IjogWwogICAgICAgICJib29sIGltYWdlbGF5ZXJlZmZlY3QocmVzb3VyY2UgaW0sIGludCBlZmZlY3QpIiwKICAgICAgICAiU2V0IHRoZSBhbHBoYSBibGVuZGluZyBmbGFnIHRvIHVzZSB0aGUgYnVuZGxlZCBsaWJnZCBsYXllcmluZyBlZmZlY3RzIgogICAgXSwKICAgICJpbWFnZWxpbmUiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VsaW5lKHJlc291cmNlIGltLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIsIGludCBjb2wpIiwKICAgICAgICAiRHJhdyBhIGxpbmUiCiAgICBdLAogICAgImltYWdlbG9hZGZvbnQiOiBbCiAgICAgICAgImludCBpbWFnZWxvYWRmb250KHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJMb2FkIGEgbmV3IGZvbnQiCiAgICBdLAogICAgImltYWdlcGFsZXR0ZWNvcHkiOiBbCiAgICAgICAgInZvaWQgaW1hZ2VwYWxldHRlY29weShyZXNvdXJjZSBkc3QsIHJlc291cmNlIHNyYykiLAogICAgICAgICJDb3B5IHRoZSBwYWxldHRlIGZyb20gdGhlIHNyYyBpbWFnZSBvbnRvIHRoZSBkc3QgaW1hZ2UiCiAgICBdLAogICAgImltYWdlcG5nIjogWwogICAgICAgICJib29sIGltYWdlcG5nKHJlc291cmNlIGltIFssIHN0cmluZyBmaWxlbmFtZV0pIiwKICAgICAgICAiT3V0cHV0IFBORyBpbWFnZSB0byBicm93c2VyIG9yIGZpbGUiCiAgICBdLAogICAgImltYWdlcG9seWdvbiI6IFsKICAgICAgICAiYm9vbCBpbWFnZXBvbHlnb24ocmVzb3VyY2UgaW0sIGFycmF5IHBvaW50LCBpbnQgbnVtX3BvaW50cywgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgcG9seWdvbiIKICAgIF0sCiAgICAiaW1hZ2Vwc2Jib3giOiBbCiAgICAgICAgImFycmF5IGltYWdlcHNiYm94KHN0cmluZyB0ZXh0LCByZXNvdXJjZSBmb250LCBpbnQgc2l6ZSBbLCBpbnQgc3BhY2UsIGludCB0aWdodG5lc3MsIGZsb2F0IGFuZ2xlXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGJvdW5kaW5nIGJveCBuZWVkZWQgYnkgYSBzdHJpbmcgaWYgcmFzdGVyaXplZCIKICAgIF0sCiAgICAiaW1hZ2Vwc2NvcHlmb250IjogWwogICAgICAgICJpbnQgaW1hZ2Vwc2NvcHlmb250KGludCBmb250X2luZGV4KSIsCiAgICAgICAgIk1ha2UgYSBjb3B5IG9mIGEgZm9udCBmb3IgcHVycG9zZXMgbGlrZSBleHRlbmRpbmcgb3IgcmVlbmNvbmRpbmciCiAgICBdLAogICAgImltYWdlcHNlbmNvZGVmb250IjogWwogICAgICAgICJib29sIGltYWdlcHNlbmNvZGVmb250KHJlc291cmNlIGZvbnRfaW5kZXgsIHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJUbyBjaGFuZ2UgYSBmb250cyBjaGFyYWN0ZXIgZW5jb2RpbmcgdmVjdG9yIgogICAgXSwKICAgICJpbWFnZXBzZXh0ZW5kZm9udCI6IFsKICAgICAgICAiYm9vbCBpbWFnZXBzZXh0ZW5kZm9udChyZXNvdXJjZSBmb250X2luZGV4LCBmbG9hdCBleHRlbmQpIiwKICAgICAgICAiRXh0ZW5kIG9yIG9yIGNvbmRlbnNlIChpZiBleHRlbmQgPCAxKSBhIGZvbnQiCiAgICBdLAogICAgImltYWdlcHNmcmVlZm9udCI6IFsKICAgICAgICAiYm9vbCBpbWFnZXBzZnJlZWZvbnQocmVzb3VyY2UgZm9udF9pbmRleCkiLAogICAgICAgICJGcmVlIG1lbW9yeSB1c2VkIGJ5IGEgZm9udCIKICAgIF0sCiAgICAiaW1hZ2Vwc2xvYWRmb250IjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZXBzbG9hZGZvbnQoc3RyaW5nIHBhdGhuYW1lKSIsCiAgICAgICAgIkxvYWQgYSBuZXcgZm9udCBmcm9tIHNwZWNpZmllZCBmaWxlIgogICAgXSwKICAgICJpbWFnZXBzc2xhbnRmb250IjogWwogICAgICAgICJib29sIGltYWdlcHNzbGFudGZvbnQocmVzb3VyY2UgZm9udF9pbmRleCwgZmxvYXQgc2xhbnQpIiwKICAgICAgICAiU2xhbnQgYSBmb250IgogICAgXSwKICAgICJpbWFnZXBzdGV4dCI6IFsKICAgICAgICAiYXJyYXkgaW1hZ2Vwc3RleHQocmVzb3VyY2UgaW1hZ2UsIHN0cmluZyB0ZXh0LCByZXNvdXJjZSBmb250LCBpbnQgc2l6ZSwgaW50IGZvcmVncm91bmQsIGludCBiYWNrZ3JvdW5kLCBpbnQgeGNvb3JkLCBpbnQgeWNvb3JkIFssIGludCBzcGFjZSBbLCBpbnQgdGlnaHRuZXNzIFssIGZsb2F0IGFuZ2xlIFssIGludCBhbnRpYWxpYXNdKSIsCiAgICAgICAgIlJhc3Rlcml6ZSBhIHN0cmluZyBvdmVyIGFuIGltYWdlIgogICAgXSwKICAgICJpbWFnZXJlY3RhbmdsZSI6IFsKICAgICAgICAiYm9vbCBpbWFnZXJlY3RhbmdsZShyZXNvdXJjZSBpbSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSByZWN0YW5nbGUiCiAgICBdLAogICAgImltYWdlcm90YXRlIjogWwogICAgICAgICJyZXNvdXJjZSBpbWFnZXJvdGF0ZShyZXNvdXJjZSBzcmNfaW0sIGZsb2F0IGFuZ2xlLCBpbnQgYmdkY29sb3IgWywgaW50IGlnbm9yZXRyYW5zcGFyZW50XSkiLAogICAgICAgICJSb3RhdGUgYW4gaW1hZ2UgdXNpbmcgYSBjdXN0b20gYW5nbGUiCiAgICBdLAogICAgImltYWdlc2F2ZWFscGhhIjogWwogICAgICAgICJib29sIGltYWdlc2F2ZWFscGhhKHJlc291cmNlIGltLCBib29sIG9uKSIsCiAgICAgICAgIkluY2x1ZGUgYWxwaGEgY2hhbm5lbCB0byBhIHNhdmVkIGltYWdlIgogICAgXSwKICAgICJpbWFnZXNldGJydXNoIjogWwogICAgICAgICJib29sIGltYWdlc2V0YnJ1c2gocmVzb3VyY2UgaW1hZ2UsIHJlc291cmNlIGJydXNoKSIsCiAgICAgICAgIlNldCB0aGUgYnJ1c2ggaW1hZ2UgdG8gJGJydXNoIHdoZW4gZmlsbGluZyAkaW1hZ2Ugd2l0aCB0aGUgXCJJTUdfQ09MT1JfQlJVU0hFRFwiIGNvbG9yIgogICAgXSwKICAgICJpbWFnZXNldHBpeGVsIjogWwogICAgICAgICJib29sIGltYWdlc2V0cGl4ZWwocmVzb3VyY2UgaW0sIGludCB4LCBpbnQgeSwgaW50IGNvbCkiLAogICAgICAgICJTZXQgYSBzaW5nbGUgcGl4ZWwiCiAgICBdLAogICAgImltYWdlc2V0c3R5bGUiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VzZXRzdHlsZShyZXNvdXJjZSBpbSwgYXJyYXkgc3R5bGVzKSIsCiAgICAgICAgIlNldCB0aGUgbGluZSBkcmF3aW5nIHN0eWxlcyBmb3IgdXNlIHdpdGggaW1hZ2VsaW5lIGFuZCBJTUdfQ09MT1JfU1RZTEVELiIKICAgIF0sCiAgICAiaW1hZ2VzZXR0aGlja25lc3MiOiBbCiAgICAgICAgImJvb2wgaW1hZ2VzZXR0aGlja25lc3MocmVzb3VyY2UgaW0sIGludCB0aGlja25lc3MpIiwKICAgICAgICAiU2V0IGxpbmUgdGhpY2tuZXNzIGZvciBkcmF3aW5nIGxpbmVzLCBlbGxpcHNlcywgcmVjdGFuZ2xlcywgcG9seWdvbnMgZXRjLiIKICAgIF0sCiAgICAiaW1hZ2VzZXR0aWxlIjogWwogICAgICAgICJib29sIGltYWdlc2V0dGlsZShyZXNvdXJjZSBpbWFnZSwgcmVzb3VyY2UgdGlsZSkiLAogICAgICAgICJTZXQgdGhlIHRpbGUgaW1hZ2UgdG8gJHRpbGUgd2hlbiBmaWxsaW5nICRpbWFnZSB3aXRoIHRoZSBcIklNR19DT0xPUl9USUxFRFwiIGNvbG9yIgogICAgXSwKICAgICJpbWFnZXN0cmluZyI6IFsKICAgICAgICAiYm9vbCBpbWFnZXN0cmluZyhyZXNvdXJjZSBpbSwgaW50IGZvbnQsIGludCB4LCBpbnQgeSwgc3RyaW5nIHN0ciwgaW50IGNvbCkiLAogICAgICAgICJEcmF3IGEgc3RyaW5nIGhvcml6b250YWxseSIKICAgIF0sCiAgICAiaW1hZ2VzdHJpbmd1cCI6IFsKICAgICAgICAiYm9vbCBpbWFnZXN0cmluZ3VwKHJlc291cmNlIGltLCBpbnQgZm9udCwgaW50IHgsIGludCB5LCBzdHJpbmcgc3RyLCBpbnQgY29sKSIsCiAgICAgICAgIkRyYXcgYSBzdHJpbmcgdmVydGljYWxseSAtIHJvdGF0ZWQgOTAgZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSIKICAgIF0sCiAgICAiaW1hZ2VzeCI6IFsKICAgICAgICAiaW50IGltYWdlc3gocmVzb3VyY2UgaW0pIiwKICAgICAgICAiR2V0IGltYWdlIHdpZHRoIgogICAgXSwKICAgICJpbWFnZXN5IjogWwogICAgICAgICJpbnQgaW1hZ2VzeShyZXNvdXJjZSBpbSkiLAogICAgICAgICJHZXQgaW1hZ2UgaGVpZ2h0IgogICAgXSwKICAgICJpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZSI6IFsKICAgICAgICAidm9pZCBpbWFnZXRydWVjb2xvcnRvcGFsZXR0ZShyZXNvdXJjZSBpbSwgYm9vbCBkaXRoZXJGbGFnLCBpbnQgY29sb3JzV2FudGVkKSIsCiAgICAgICAgIkNvbnZlcnQgYSB0cnVlIGNvbG91ciBpbWFnZSB0byBhIHBhbGV0dGUgYmFzZWQgaW1hZ2Ugd2l0aCBhIG51bWJlciBvZiBjb2xvdXJzLCBvcHRpb25hbGx5IHVzaW5nIGRpdGhlcmluZy4iCiAgICBdLAogICAgImltYWdldHRmYmJveCI6IFsKICAgICAgICAiYXJyYXkgaW1hZ2V0dGZiYm94KGZsb2F0IHNpemUsIGZsb2F0IGFuZ2xlLCBzdHJpbmcgZm9udF9maWxlLCBzdHJpbmcgdGV4dCkiLAogICAgICAgICJHaXZlIHRoZSBib3VuZGluZyBib3ggb2YgYSB0ZXh0IHVzaW5nIFRydWVUeXBlIGZvbnRzIgogICAgXSwKICAgICJpbWFnZXR0ZnRleHQiOiBbCiAgICAgICAgImFycmF5IGltYWdldHRmdGV4dChyZXNvdXJjZSBpbSwgZmxvYXQgc2l6ZSwgZmxvYXQgYW5nbGUsIGludCB4LCBpbnQgeSwgaW50IGNvbCwgc3RyaW5nIGZvbnRfZmlsZSwgc3RyaW5nIHRleHQpIiwKICAgICAgICAiV3JpdGUgdGV4dCB0byB0aGUgaW1hZ2UgdXNpbmcgYSBUcnVlVHlwZSBmb250IgogICAgXSwKICAgICJpbWFnZXR5cGVzIjogWwogICAgICAgICJpbnQgaW1hZ2V0eXBlcyh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgdHlwZXMgb2YgaW1hZ2VzIHN1cHBvcnRlZCBpbiBhIGJpdGZpZWxkIC0gMT1HSUYsIDI9SlBFRywgND1QTkcsIDg9V0JNUCwgMTY9WFBNIgogICAgXSwKICAgICJpbWFnZXdibXAiOiBbCiAgICAgICAgImJvb2wgaW1hZ2V3Ym1wKHJlc291cmNlIGltIFssIHN0cmluZyBmaWxlbmFtZSwgWywgaW50IGZvcmVncm91bmRdXSkiLAogICAgICAgICJPdXRwdXQgV0JNUCBpbWFnZSB0byBicm93c2VyIG9yIGZpbGUiCiAgICBdLAogICAgImltYWdleGJtIjogWwogICAgICAgICJpbnQgaW1hZ2V4Ym0oaW50IGltLCBzdHJpbmcgZmlsZW5hbWUgWywgaW50IGZvcmVncm91bmRdKSIsCiAgICAgICAgIk91dHB1dCBYQk0gaW1hZ2UgdG8gYnJvd3NlciBvciBmaWxlIgogICAgXSwKICAgICJpbWFwXzhiaXQiOiBbCiAgICAgICAgInN0cmluZyBpbWFwXzhiaXQoc3RyaW5nIHRleHQpIiwKICAgICAgICAiQ29udmVydCBhbiA4LWJpdCBzdHJpbmcgdG8gYSBxdW90ZWQtcHJpbnRhYmxlIHN0cmluZyIKICAgIF0sCiAgICAiaW1hcF9hbGVydHMiOiBbCiAgICAgICAgImFycmF5IGltYXBfYWxlcnRzKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgSU1BUCBhbGVydHMgdGhhdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIHNpbmNlIHRoZSBsYXN0IHBhZ2UgbG9hZCBvciBzaW5jZSB0aGUgbGFzdCBpbWFwX2FsZXJ0cygpIGNhbGwsIHdoaWNoZXZlciBjYW1lIGxhc3QuIFRoZSBhbGVydCBzdGFjayBpcyBjbGVhcmVkIGFmdGVyIGltYXBfYWxlcnRzKCkgaXMgY2FsbGVkLiIKICAgIF0sCiAgICAiaW1hcF9hcHBlbmQiOiBbCiAgICAgICAgImJvb2wgaW1hcF9hcHBlbmQocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgZm9sZGVyLCBzdHJpbmcgbWVzc2FnZSBbLCBzdHJpbmcgb3B0aW9ucyBbLCBzdHJpbmcgaW50ZXJuYWxfZGF0ZV1dKSIsCiAgICAgICAgIkFwcGVuZCBhIG5ldyBtZXNzYWdlIHRvIGEgc3BlY2lmaWVkIG1haWxib3giCiAgICBdLAogICAgImltYXBfYmFzZTY0IjogWwogICAgICAgICJzdHJpbmcgaW1hcF9iYXNlNjQoc3RyaW5nIHRleHQpIiwKICAgICAgICAiRGVjb2RlIEJBU0U2NCBlbmNvZGVkIHRleHQiCiAgICBdLAogICAgImltYXBfYmluYXJ5IjogWwogICAgICAgICJzdHJpbmcgaW1hcF9iaW5hcnkoc3RyaW5nIHRleHQpIiwKICAgICAgICAiQ29udmVydCBhbiA4Yml0IHN0cmluZyB0byBhIGJhc2U2NCBzdHJpbmciCiAgICBdLAogICAgImltYXBfYm9keSI6IFsKICAgICAgICAic3RyaW5nIGltYXBfYm9keShyZXNvdXJjZSBzdHJlYW1faWQsIGludCBtc2dfbm8gWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlJlYWQgdGhlIG1lc3NhZ2UgYm9keSIKICAgIF0sCiAgICAiaW1hcF9ib2R5c3RydWN0IjogWwogICAgICAgICJvYmplY3QgaW1hcF9ib2R5c3RydWN0KHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubywgc3RyaW5nIHNlY3Rpb24pIiwKICAgICAgICAiUmVhZCB0aGUgc3RydWN0dXJlIG9mIGEgc3BlY2lmaWVkIGJvZHkgc2VjdGlvbiBvZiBhIHNwZWNpZmljIG1lc3NhZ2UiCiAgICBdLAogICAgImltYXBfY2hlY2siOiBbCiAgICAgICAgIm9iamVjdCBpbWFwX2NoZWNrKHJlc291cmNlIHN0cmVhbV9pZCkiLAogICAgICAgICJHZXQgbWFpbGJveCBwcm9wZXJ0aWVzIgogICAgXSwKICAgICJpbWFwX2NsZWFyZmxhZ19mdWxsIjogWwogICAgICAgICJib29sIGltYXBfY2xlYXJmbGFnX2Z1bGwocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgc2VxdWVuY2UsIHN0cmluZyBmbGFnIFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJDbGVhcnMgZmxhZ3Mgb24gbWVzc2FnZXMiCiAgICBdLAogICAgImltYXBfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgaW1hcF9jbG9zZShyZXNvdXJjZSBzdHJlYW1faWQgWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkNsb3NlIGFuIElNQVAgc3RyZWFtIgogICAgXSwKICAgICJpbWFwX2NyZWF0ZW1haWxib3giOiBbCiAgICAgICAgImJvb2wgaW1hcF9jcmVhdGVtYWlsYm94KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG1haWxib3gpIiwKICAgICAgICAiQ3JlYXRlIGEgbmV3IG1haWxib3giCiAgICBdLAogICAgImltYXBfZGVsZXRlIjogWwogICAgICAgICJib29sIGltYXBfZGVsZXRlKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubyBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiTWFyayBhIG1lc3NhZ2UgZm9yIGRlbGV0aW9uIgogICAgXSwKICAgICJpbWFwX2RlbGV0ZW1haWxib3giOiBbCiAgICAgICAgImJvb2wgaW1hcF9kZWxldGVtYWlsYm94KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG1haWxib3gpIiwKICAgICAgICAiRGVsZXRlIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9lcnJvcnMiOiBbCiAgICAgICAgImFycmF5IGltYXBfZXJyb3JzKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgSU1BUCBlcnJvcnMgZ2VuZXJhdGVkIHNpbmNlIHRoZSBsYXN0IHBhZ2UgbG9hZCwgb3Igc2luY2UgdGhlIGxhc3QgaW1hcF9lcnJvcnMoKSBjYWxsLCB3aGljaGV2ZXIgY2FtZSBsYXN0LiBUaGUgZXJyb3Igc3RhY2sgaXMgY2xlYXJlZCBhZnRlciBpbWFwX2Vycm9ycygpIGlzIGNhbGxlZC4iCiAgICBdLAogICAgImltYXBfZXhwdW5nZSI6IFsKICAgICAgICAiYm9vbCBpbWFwX2V4cHVuZ2UocmVzb3VyY2Ugc3RyZWFtX2lkKSIsCiAgICAgICAgIlBlcm1hbmVudGx5IGRlbGV0ZSBhbGwgbWVzc2FnZXMgbWFya2VkIGZvciBkZWxldGlvbiIKICAgIF0sCiAgICAiaW1hcF9mZXRjaF9vdmVydmlldyI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9mZXRjaF9vdmVydmlldyhyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBzZXF1ZW5jZSBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiUmVhZCBhbiBvdmVydmlldyBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGhlYWRlcnMgb2YgdGhlIGdpdmVuIG1lc3NhZ2Ugc2VxdWVuY2UiCiAgICBdLAogICAgImltYXBfZmV0Y2hib2R5IjogWwogICAgICAgICJzdHJpbmcgaW1hcF9mZXRjaGJvZHkocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgbXNnX25vLCBzdHJpbmcgc2VjdGlvbiBbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiR2V0IGEgc3BlY2lmaWMgYm9keSBzZWN0aW9uIgogICAgXSwKICAgICJpbWFwX2ZldGNoaGVhZGVyIjogWwogICAgICAgICJzdHJpbmcgaW1hcF9mZXRjaGhlYWRlcihyZXNvdXJjZSBzdHJlYW1faWQsIGludCBtc2dfbm8gWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIkdldCB0aGUgZnVsbCB1bmZpbHRlcmVkIGhlYWRlciBmb3IgYSBtZXNzYWdlIgogICAgXSwKICAgICJpbWFwX2ZldGNoc3RydWN0dXJlIjogWwogICAgICAgICJvYmplY3QgaW1hcF9mZXRjaHN0cnVjdHVyZShyZXNvdXJjZSBzdHJlYW1faWQsIGludCBtc2dfbm8gWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlJlYWQgdGhlIGZ1bGwgc3RydWN0dXJlIG9mIGEgbWVzc2FnZSIKICAgIF0sCiAgICAiaW1hcF9nYyI6IFsKICAgICAgICAiYm9vbCBpbWFwX2djKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IGZsYWdzKSIsCiAgICAgICAgIlRoaXMgZnVuY3Rpb24gZ2FyYmFnZSBjb2xsZWN0cyAocHVyZ2VzKSB0aGUgY2FjaGUgb2YgZW50cmllcyBvZiBhIHNwZWNpZmljIHR5cGUuIgogICAgXSwKICAgICJpbWFwX2dldF9xdW90YSI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9nZXRfcXVvdGEocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgcXJvb3QpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcXVvdGEgc2V0IHRvIHRoZSBtYWlsYm94IGFjY291bnQgcXJvb3QiCiAgICBdLAogICAgImltYXBfZ2V0X3F1b3Rhcm9vdCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9nZXRfcXVvdGFyb290KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG1ib3gpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcXVvdGEgc2V0IHRvIHRoZSBtYWlsYm94IGFjY291bnQgbWJveCIKICAgIF0sCiAgICAiaW1hcF9nZXRhY2wiOiBbCiAgICAgICAgImFycmF5IGltYXBfZ2V0YWNsKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG1haWxib3gpIiwKICAgICAgICAiR2V0cyB0aGUgQUNMIGZvciBhIGdpdmVuIG1haWxib3giCiAgICBdLAogICAgImltYXBfZ2V0bWFpbGJveGVzIjogWwogICAgICAgICJhcnJheSBpbWFwX2dldG1haWxib3hlcyhyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyByZWYsIHN0cmluZyBwYXR0ZXJuKSIsCiAgICAgICAgIlJlYWRzIHRoZSBsaXN0IG9mIG1haWxib3hlcyBhbmQgcmV0dXJucyBhIGZ1bGwgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIG5hbWUsIGF0dHJpYnV0ZXMsIGFuZCBkZWxpbWl0ZXIiCiAgICBdLAogICAgImltYXBfZ2V0c3Vic2NyaWJlZCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9nZXRzdWJzY3JpYmVkKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHJlZiwgc3RyaW5nIHBhdHRlcm4pIiwKICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiBzdWJzY3JpYmVkIG1haWxib3hlcywgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIGltYXBfZ2V0bWFpbGJveGVzKCkiCiAgICBdLAogICAgImltYXBfaGVhZGVyaW5mbyI6IFsKICAgICAgICAib2JqZWN0IGltYXBfaGVhZGVyaW5mbyhyZXNvdXJjZSBzdHJlYW1faWQsIGludCBtc2dfbm8gWywgaW50IGZyb21fbGVuZ3RoIFssIGludCBzdWJqZWN0X2xlbmd0aCBbLCBzdHJpbmcgZGVmYXVsdF9ob3N0XV1dKSIsCiAgICAgICAgIlJlYWQgdGhlIGhlYWRlcnMgb2YgdGhlIG1lc3NhZ2UiCiAgICBdLAogICAgImltYXBfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9oZWFkZXJzKHJlc291cmNlIHN0cmVhbV9pZCkiLAogICAgICAgICJSZXR1cm5zIGhlYWRlcnMgZm9yIGFsbCBtZXNzYWdlcyBpbiBhIG1haWxib3giCiAgICBdLAogICAgImltYXBfbGFzdF9lcnJvciI6IFsKICAgICAgICAic3RyaW5nIGltYXBfbGFzdF9lcnJvcih2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGxhc3QgZXJyb3IgdGhhdCB3YXMgZ2VuZXJhdGVkIGJ5IGFuIElNQVAgZnVuY3Rpb24uIFRoZSBlcnJvciBzdGFjayBpcyBOT1QgY2xlYXJlZCBhZnRlciB0aGlzIGNhbGwuIgogICAgXSwKICAgICJpbWFwX2xpc3QiOiBbCiAgICAgICAgImFycmF5IGltYXBfbGlzdChyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyByZWYsIHN0cmluZyBwYXR0ZXJuKSIsCiAgICAgICAgIlJlYWQgdGhlIGxpc3Qgb2YgbWFpbGJveGVzIgogICAgXSwKICAgICJpbWFwX2xpc3RzY2FuIjogWwogICAgICAgICJhcnJheSBpbWFwX2xpc3RzY2FuKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHJlZiwgc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIlJlYWQgbGlzdCBvZiBtYWlsYm94ZXMgY29udGFpbmluZyBhIGNlcnRhaW4gc3RyaW5nIgogICAgXSwKICAgICJpbWFwX2xzdWIiOiBbCiAgICAgICAgImFycmF5IGltYXBfbHN1YihyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyByZWYsIHN0cmluZyBwYXR0ZXJuKSIsCiAgICAgICAgIlJldHVybiBhIGxpc3Qgb2Ygc3Vic2NyaWJlZCBtYWlsYm94ZXMiCiAgICBdLAogICAgImltYXBfbWFpbCI6IFsKICAgICAgICAiYm9vbCBpbWFwX21haWwoc3RyaW5nIHRvLCBzdHJpbmcgc3ViamVjdCwgc3RyaW5nIG1lc3NhZ2UgWywgc3RyaW5nIGFkZGl0aW9uYWxfaGVhZGVycyBbLCBzdHJpbmcgY2MgWywgc3RyaW5nIGJjYyBbLCBzdHJpbmcgcnBhdGhdXV1dKSIsCiAgICAgICAgIlNlbmQgYW4gZW1haWwgbWVzc2FnZSIKICAgIF0sCiAgICAiaW1hcF9tYWlsX2NvbXBvc2UiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX21haWxfY29tcG9zZShhcnJheSBlbnZlbG9wZSwgYXJyYXkgYm9keSkiLAogICAgICAgICJDcmVhdGUgYSBNSU1FIG1lc3NhZ2UgYmFzZWQgb24gZ2l2ZW4gZW52ZWxvcGUgYW5kIGJvZHkgc2VjdGlvbnMiCiAgICBdLAogICAgImltYXBfbWFpbF9jb3B5IjogWwogICAgICAgICJib29sIGltYXBfbWFpbF9jb3B5KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG1zZ2xpc3QsIHN0cmluZyBtYWlsYm94IFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJDb3B5IHNwZWNpZmllZCBtZXNzYWdlIHRvIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9tYWlsX21vdmUiOiBbCiAgICAgICAgImJvb2wgaW1hcF9tYWlsX21vdmUocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgc2VxdWVuY2UsIHN0cmluZyBtYWlsYm94IFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJNb3ZlIHNwZWNpZmllZCBtZXNzYWdlIHRvIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9tYWlsYm94bXNnaW5mbyI6IFsKICAgICAgICAib2JqZWN0IGltYXBfbWFpbGJveG1zZ2luZm8ocmVzb3VyY2Ugc3RyZWFtX2lkKSIsCiAgICAgICAgIlJldHVybnMgaW5mbyBhYm91dCB0aGUgY3VycmVudCBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX21pbWVfaGVhZGVyX2RlY29kZSI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9taW1lX2hlYWRlcl9kZWNvZGUoc3RyaW5nIHN0cikiLAogICAgICAgICJEZWNvZGUgbWltZSBoZWFkZXIgZWxlbWVudCBpbiBhY2NvcmRhbmNlIHdpdGggUkZDIDIwNDcgYW5kIHJldHVybiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgJ2NoYXJzZXQnIGVuY29kaW5nIGFuZCBkZWNvZGVkICd0ZXh0JyIKICAgIF0sCiAgICAiaW1hcF9tc2dubyI6IFsKICAgICAgICAiaW50IGltYXBfbXNnbm8ocmVzb3VyY2Ugc3RyZWFtX2lkLCBpbnQgdW5pcXVlX21zZ19pZCkiLAogICAgICAgICJHZXQgdGhlIHNlcXVlbmNlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggYSBVSUQiCiAgICBdLAogICAgImltYXBfbXV0ZjdfdG9fdXRmOCI6IFsKICAgICAgICAic3RyaW5nIGltYXBfbXV0ZjdfdG9fdXRmOChzdHJpbmcgaW4pIiwKICAgICAgICAiRGVjb2RlIGEgbW9kaWZpZWQgVVRGLTcgc3RyaW5nIHRvIFVURi04IgogICAgXSwKICAgICJpbWFwX251bV9tc2ciOiBbCiAgICAgICAgImludCBpbWFwX251bV9tc2cocmVzb3VyY2Ugc3RyZWFtX2lkKSIsCiAgICAgICAgIkdpdmVzIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gdGhlIGN1cnJlbnQgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9udW1fcmVjZW50IjogWwogICAgICAgICJpbnQgaW1hcF9udW1fcmVjZW50KHJlc291cmNlIHN0cmVhbV9pZCkiLAogICAgICAgICJHaXZlcyB0aGUgbnVtYmVyIG9mIHJlY2VudCBtZXNzYWdlcyBpbiBjdXJyZW50IG1haWxib3giCiAgICBdLAogICAgImltYXBfb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgaW1hcF9vcGVuKHN0cmluZyBtYWlsYm94LCBzdHJpbmcgdXNlciwgc3RyaW5nIHBhc3N3b3JkIFssIGludCBvcHRpb25zIFssIGludCBuX3JldHJpZXNdXSkiLAogICAgICAgICJPcGVuIGFuIElNQVAgc3RyZWFtIHRvIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9waW5nIjogWwogICAgICAgICJib29sIGltYXBfcGluZyhyZXNvdXJjZSBzdHJlYW1faWQpIiwKICAgICAgICAiQ2hlY2sgaWYgdGhlIElNQVAgc3RyZWFtIGlzIHN0aWxsIGFjdGl2ZSIKICAgIF0sCiAgICAiaW1hcF9xcHJpbnQiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX3FwcmludChzdHJpbmcgdGV4dCkiLAogICAgICAgICJDb252ZXJ0IGEgcXVvdGVkLXByaW50YWJsZSBzdHJpbmcgdG8gYW4gOC1iaXQgc3RyaW5nIgogICAgXSwKICAgICJpbWFwX3JlbmFtZW1haWxib3giOiBbCiAgICAgICAgImJvb2wgaW1hcF9yZW5hbWVtYWlsYm94KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG9sZF9uYW1lLCBzdHJpbmcgbmV3X25hbWUpIiwKICAgICAgICAiUmVuYW1lIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9yZW9wZW4iOiBbCiAgICAgICAgImJvb2wgaW1hcF9yZW9wZW4ocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCBbLCBpbnQgb3B0aW9ucyBbLCBpbnQgbl9yZXRyaWVzXV0pIiwKICAgICAgICAiUmVvcGVuIGFuIElNQVAgc3RyZWFtIHRvIGEgbmV3IG1haWxib3giCiAgICBdLAogICAgImltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3QiOiBbCiAgICAgICAgImFycmF5IGltYXBfcmZjODIyX3BhcnNlX2Fkcmxpc3Qoc3RyaW5nIGFkZHJlc3Nfc3RyaW5nLCBzdHJpbmcgZGVmYXVsdF9ob3N0KSIsCiAgICAgICAgIlBhcnNlcyBhbiBhZGRyZXNzIHN0cmluZyIKICAgIF0sCiAgICAiaW1hcF9yZmM4MjJfcGFyc2VfaGVhZGVycyI6IFsKICAgICAgICAib2JqZWN0IGltYXBfcmZjODIyX3BhcnNlX2hlYWRlcnMoc3RyaW5nIGhlYWRlcnMgWywgc3RyaW5nIGRlZmF1bHRfaG9zdF0pIiwKICAgICAgICAiUGFyc2UgYSBzZXQgb2YgbWFpbCBoZWFkZXJzIGNvbnRhaW5lZCBpbiBhIHN0cmluZywgYW5kIHJldHVybiBhbiBvYmplY3Qgc2ltaWxhciB0byBpbWFwX2hlYWRlcmluZm8oKSIKICAgIF0sCiAgICAiaW1hcF9yZmM4MjJfd3JpdGVfYWRkcmVzcyI6IFsKICAgICAgICAic3RyaW5nIGltYXBfcmZjODIyX3dyaXRlX2FkZHJlc3Moc3RyaW5nIG1haWxib3gsIHN0cmluZyBob3N0LCBzdHJpbmcgcGVyc29uYWwpIiwKICAgICAgICAiUmV0dXJucyBhIHByb3Blcmx5IGZvcm1hdHRlZCBlbWFpbCBhZGRyZXNzIGdpdmVuIHRoZSBtYWlsYm94LCBob3N0LCBhbmQgcGVyc29uYWwgaW5mbyIKICAgIF0sCiAgICAiaW1hcF9zYXZlYm9keSI6IFsKICAgICAgICAiYm9vbCBpbWFwX3NhdmVib2R5KHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nfHJlc291cmNlIGZpbGUsIGludCBtc2dfbm9bLCBzdHJpbmcgc2VjdGlvbiA9IFwiXCJbLCBpbnQgb3B0aW9ucyA9IDBdXSkiLAogICAgICAgICJTYXZlIGEgc3BlY2lmaWMgYm9keSBzZWN0aW9uIHRvIGEgZmlsZSIKICAgIF0sCiAgICAiaW1hcF9zZWFyY2giOiBbCiAgICAgICAgImFycmF5IGltYXBfc2VhcmNoKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIGNyaXRlcmlhIFssIGludCBvcHRpb25zIFssIHN0cmluZyBjaGFyc2V0XV0pIiwKICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiBtZXNzYWdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gY3JpdGVyaWEiCiAgICBdLAogICAgImltYXBfc2V0X3F1b3RhIjogWwogICAgICAgICJib29sIGltYXBfc2V0X3F1b3RhKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIHFyb290LCBpbnQgbWFpbGJveF9zaXplKSIsCiAgICAgICAgIldpbGwgc2V0IHRoZSBxdW90YSBmb3IgcXJvb3QgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9zZXRhY2wiOiBbCiAgICAgICAgImJvb2wgaW1hcF9zZXRhY2wocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCwgc3RyaW5nIGlkLCBzdHJpbmcgcmlnaHRzKSIsCiAgICAgICAgIlNldHMgdGhlIEFDTCBmb3IgYSBnaXZlbiBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3NldGZsYWdfZnVsbCI6IFsKICAgICAgICAiYm9vbCBpbWFwX3NldGZsYWdfZnVsbChyZXNvdXJjZSBzdHJlYW1faWQsIHN0cmluZyBzZXF1ZW5jZSwgc3RyaW5nIGZsYWcgWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlNldHMgZmxhZ3Mgb24gbWVzc2FnZXMiCiAgICBdLAogICAgImltYXBfc29ydCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF9zb3J0KHJlc291cmNlIHN0cmVhbV9pZCwgaW50IGNyaXRlcmlhLCBpbnQgcmV2ZXJzZSBbLCBpbnQgb3B0aW9ucyBbLCBzdHJpbmcgc2VhcmNoX2NyaXRlcmlhIFssIHN0cmluZyBjaGFyc2V0XV1dKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgb2YgbWVzc2FnZSBoZWFkZXJzLCBvcHRpb25hbGx5IGluY2x1ZGluZyBvbmx5IG1lc3NhZ2VzIHRoYXQgbWVldCBzcGVjaWZpZWQgY3JpdGVyaWEuIgogICAgXSwKICAgICJpbWFwX3N0YXR1cyI6IFsKICAgICAgICAib2JqZWN0IGltYXBfc3RhdHVzKHJlc291cmNlIHN0cmVhbV9pZCwgc3RyaW5nIG1haWxib3gsIGludCBvcHRpb25zKSIsCiAgICAgICAgIkdldCBzdGF0dXMgaW5mbyBmcm9tIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF9zdWJzY3JpYmUiOiBbCiAgICAgICAgImJvb2wgaW1hcF9zdWJzY3JpYmUocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCkiLAogICAgICAgICJTdWJzY3JpYmUgdG8gYSBtYWlsYm94IgogICAgXSwKICAgICJpbWFwX3RocmVhZCI6IFsKICAgICAgICAiYXJyYXkgaW1hcF90aHJlYWQocmVzb3VyY2Ugc3RyZWFtX2lkIFssIGludCBvcHRpb25zXSkiLAogICAgICAgICJSZXR1cm4gdGhyZWFkZWQgYnkgUkVGRVJFTkNFUyB0cmVlIgogICAgXSwKICAgICJpbWFwX3RpbWVvdXQiOiBbCiAgICAgICAgIm1peGVkIGltYXBfdGltZW91dChpbnQgdGltZW91dF90eXBlIFssIGludCB0aW1lb3V0XSkiLAogICAgICAgICJTZXQgb3IgZmV0Y2ggaW1hcCB0aW1lb3V0IgogICAgXSwKICAgICJpbWFwX3VpZCI6IFsKICAgICAgICAiaW50IGltYXBfdWlkKHJlc291cmNlIHN0cmVhbV9pZCwgaW50IG1zZ19ubykiLAogICAgICAgICJHZXQgdGhlIHVuaXF1ZSBtZXNzYWdlIGlkIGFzc29jaWF0ZWQgd2l0aCBhIHN0YW5kYXJkIHNlcXVlbnRpYWwgbWVzc2FnZSBudW1iZXIiCiAgICBdLAogICAgImltYXBfdW5kZWxldGUiOiBbCiAgICAgICAgImJvb2wgaW1hcF91bmRlbGV0ZShyZXNvdXJjZSBzdHJlYW1faWQsIGludCBtc2dfbm8gWywgaW50IGZsYWdzXSkiLAogICAgICAgICJSZW1vdmUgdGhlIGRlbGV0ZSBmbGFnIGZyb20gYSBtZXNzYWdlIgogICAgXSwKICAgICJpbWFwX3Vuc3Vic2NyaWJlIjogWwogICAgICAgICJib29sIGltYXBfdW5zdWJzY3JpYmUocmVzb3VyY2Ugc3RyZWFtX2lkLCBzdHJpbmcgbWFpbGJveCkiLAogICAgICAgICJVbnN1YnNjcmliZSBmcm9tIGEgbWFpbGJveCIKICAgIF0sCiAgICAiaW1hcF91dGY3X2RlY29kZSI6IFsKICAgICAgICAic3RyaW5nIGltYXBfdXRmN19kZWNvZGUoc3RyaW5nIGJ1ZikiLAogICAgICAgICJEZWNvZGUgYSBtb2RpZmllZCBVVEYtNyBzdHJpbmciCiAgICBdLAogICAgImltYXBfdXRmN19lbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX3V0ZjdfZW5jb2RlKHN0cmluZyBidWYpIiwKICAgICAgICAiRW5jb2RlIGEgc3RyaW5nIGluIG1vZGlmaWVkIFVURi03IgogICAgXSwKICAgICJpbWFwX3V0ZjgiOiBbCiAgICAgICAgInN0cmluZyBpbWFwX3V0Zjgoc3RyaW5nIG1pbWVfZW5jb2RlZF90ZXh0KSIsCiAgICAgICAgIkNvbnZlcnQgYSBtaW1lLWVuY29kZWQgdGV4dCB0byBVVEYtOCIKICAgIF0sCiAgICAiaW1hcF91dGY4X3RvX211dGY3IjogWwogICAgICAgICJzdHJpbmcgaW1hcF91dGY4X3RvX211dGY3KHN0cmluZyBpbikiLAogICAgICAgICJFbmNvZGUgYSBVVEYtOCBzdHJpbmcgdG8gbW9kaWZpZWQgVVRGLTciCiAgICBdLAogICAgImltcGxvZGUiOiBbCiAgICAgICAgInN0cmluZyBpbXBsb2RlKFtzdHJpbmcgZ2x1ZSxdIGFycmF5IHBpZWNlcykiLAogICAgICAgICJKb2lucyBhcnJheSBlbGVtZW50cyBwbGFjaW5nIGdsdWUgc3RyaW5nIGJldHdlZW4gaXRlbXMgYW5kIHJldHVybiBvbmUgc3RyaW5nIgogICAgXSwKICAgICJpbXBvcnRfcmVxdWVzdF92YXJpYWJsZXMiOiBbCiAgICAgICAgImJvb2wgaW1wb3J0X3JlcXVlc3RfdmFyaWFibGVzKHN0cmluZyB0eXBlcyBbLCBzdHJpbmcgcHJlZml4XSkiLAogICAgICAgICJJbXBvcnQgR0VUL1BPU1QvQ29va2llIHZhcmlhYmxlcyBpbnRvIHRoZSBnbG9iYWwgc2NvcGUiCiAgICBdLAogICAgImluX2FycmF5IjogWwogICAgICAgICJib29sIGluX2FycmF5KG1peGVkIG5lZWRsZSwgYXJyYXkgaGF5c3RhY2sgWywgYm9vbCBzdHJpY3RdKSIsCiAgICAgICAgIkNoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgZXhpc3RzIGluIHRoZSBhcnJheSIKICAgIF0sCiAgICAiaW5jbHVkZSI6IFsKICAgICAgICAiYm9vbCBpbmNsdWRlKHN0cmluZyBwYXRoKSIsCiAgICAgICAgIkluY2x1ZGVzIGFuZCBldmFsdWF0ZXMgdGhlIHNwZWNpZmllZCBmaWxlIgogICAgXSwKICAgICJpbmNsdWRlX29uY2UiOiBbCiAgICAgICAgImJvb2wgaW5jbHVkZV9vbmNlKHN0cmluZyBwYXRoKSIsCiAgICAgICAgIkluY2x1ZGVzIGFuZCBldmFsdWF0ZXMgdGhlIHNwZWNpZmllZCBmaWxlIgogICAgXSwKICAgICJpbmV0X250b3AiOiBbCiAgICAgICAgInN0cmluZyBpbmV0X250b3Aoc3RyaW5nIGluX2FkZHIpIiwKICAgICAgICAiQ29udmVydHMgYSBwYWNrZWQgaW5ldCBhZGRyZXNzIHRvIGEgaHVtYW4gcmVhZGFibGUgSVAgYWRkcmVzcyBzdHJpbmciCiAgICBdLAogICAgImluZXRfcHRvbiI6IFsKICAgICAgICAic3RyaW5nIGluZXRfcHRvbihzdHJpbmcgaXBfYWRkcmVzcykiLAogICAgICAgICJDb252ZXJ0cyBhIGh1bWFuIHJlYWRhYmxlIElQIGFkZHJlc3MgdG8gYSBwYWNrZWQgYmluYXJ5IHN0cmluZyIKICAgIF0sCiAgICAiaW5pX2dldCI6IFsKICAgICAgICAic3RyaW5nIGluaV9nZXQoc3RyaW5nIHZhcm5hbWUpIiwKICAgICAgICAiR2V0IGEgY29uZmlndXJhdGlvbiBvcHRpb24iCiAgICBdLAogICAgImluaV9nZXRfYWxsIjogWwogICAgICAgICJhcnJheSBpbmlfZ2V0X2FsbChbc3RyaW5nIGV4dGVuc2lvblssIGJvb2wgZGV0YWlscyA9IHRydWVdXSkiLAogICAgICAgICJHZXQgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIKICAgIF0sCiAgICAiaW5pX3Jlc3RvcmUiOiBbCiAgICAgICAgInZvaWQgaW5pX3Jlc3RvcmUoc3RyaW5nIHZhcm5hbWUpIiwKICAgICAgICAiUmVzdG9yZSB0aGUgdmFsdWUgb2YgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBzcGVjaWZpZWQgYnkgdmFybmFtZSIKICAgIF0sCiAgICAiaW5pX3NldCI6IFsKICAgICAgICAic3RyaW5nIGluaV9zZXQoc3RyaW5nIHZhcm5hbWUsIHN0cmluZyBuZXd2YWx1ZSkiLAogICAgICAgICJTZXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmV0dXJucyBmYWxzZSBvbiBlcnJvciBhbmQgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gb24gc3VjY2VzcyIKICAgIF0sCiAgICAiaW50ZXJmYWNlX2V4aXN0cyI6IFsKICAgICAgICAiYm9vbCBpbnRlcmZhY2VfZXhpc3RzKHN0cmluZyBjbGFzc25hbWUgWywgYm9vbCBhdXRvbG9hZF0pIiwKICAgICAgICAiQ2hlY2tzIGlmIHRoZSBjbGFzcyBleGlzdHMiCiAgICBdLAogICAgImludGxfZXJyb3JfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIGludGxfZXJyb3JfbmFtZSgpIiwKICAgICAgICAiKiBSZXR1cm4gYSBzdHJpbmcgZm9yIGEgZ2l2ZW4gZXJyb3IgY29kZS4gICogVGhlIHN0cmluZyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBuYW1lIG9mIHRoZSBlcnJvciBjb2RlIGNvbnN0YW50LiIKICAgIF0sCiAgICAiaW50bF9nZXRfZXJyb3JfY29kZSI6IFsKICAgICAgICAiaW50IGludGxfZ2V0X2Vycm9yX2NvZGUoKSIsCiAgICAgICAgIiogR2V0IGNvZGUgb2YgdGhlIGxhc3Qgb2NjdXJlZCBlcnJvci4iCiAgICBdLAogICAgImludGxfZ2V0X2Vycm9yX21lc3NhZ2UiOiBbCiAgICAgICAgInN0cmluZyBpbnRsX2dldF9lcnJvcl9tZXNzYWdlKCkiLAogICAgICAgICIqIEdldCB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBsYXN0IG9jY3VyZWQgZXJyb3IuIgogICAgXSwKICAgICJpbnRsX2lzX2ZhaWx1cmUiOiBbCiAgICAgICAgImJvb2wgaW50bF9pc19mYWlsdXJlKCkiLAogICAgICAgICIqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGVycm9yIGNvZGUgaW5kaWNhdGVzIGEgZmFpbHVyZS4gICogUmV0dXJucyB0cnVlIGlmIGl0IGRvZXMsIGFuZCBmYWxzZSBpZiB0aGUgY29kZSAgKiBpbmRpY2F0ZXMgc3VjY2VzcyBvciBhIHdhcm5pbmcuIgogICAgXSwKICAgICJpbnR2YWwiOiBbCiAgICAgICAgImludCBpbnR2YWwobWl4ZWQgdmFyIFssIGludCBiYXNlXSkiLAogICAgICAgICJHZXQgdGhlIGludGVnZXIgdmFsdWUgb2YgYSB2YXJpYWJsZSB1c2luZyB0aGUgb3B0aW9uYWwgYmFzZSBmb3IgdGhlIGNvbnZlcnNpb24iCiAgICBdLAogICAgImlwMmxvbmciOiBbCiAgICAgICAgImludCBpcDJsb25nKHN0cmluZyBpcF9hZGRyZXNzKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gKElQdjQpIEludGVybmV0IFByb3RvY29sIGRvdHRlZCBhZGRyZXNzIGludG8gYSBwcm9wZXIgYWRkcmVzcyIKICAgIF0sCiAgICAiaXB0Y2VtYmVkIjogWwogICAgICAgICJhcnJheSBpcHRjZW1iZWQoc3RyaW5nIGlwdGNkYXRhLCBzdHJpbmcganBlZ19maWxlX25hbWUgWywgaW50IHNwb29sXSkiLAogICAgICAgICJFbWJlZCBiaW5hcnkgSVBUQyBkYXRhIGludG8gYSBKUEVHIGltYWdlLiIKICAgIF0sCiAgICAiaXB0Y3BhcnNlIjogWwogICAgICAgICJhcnJheSBpcHRjcGFyc2Uoc3RyaW5nIGlwdGNkYXRhKSIsCiAgICAgICAgIlBhcnNlIGJpbmFyeSBJUFRDLWRhdGEgaW50byBhc3NvY2lhdGl2ZSBhcnJheSIKICAgIF0sCiAgICAiaXNfYSI6IFsKICAgICAgICAiYm9vbCBpc19hKG9iamVjdCBvYmplY3QsIHN0cmluZyBjbGFzc19uYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIG9mIHRoaXMgY2xhc3Mgb3IgaGFzIHRoaXMgY2xhc3MgYXMgb25lIG9mIGl0cyBwYXJlbnRzIgogICAgXSwKICAgICJpc19hcnJheSI6IFsKICAgICAgICAiYm9vbCBpc19hcnJheShtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIGFuIGFycmF5IgogICAgXSwKICAgICJpc19ib29sIjogWwogICAgICAgICJib29sIGlzX2Jvb2wobWl4ZWQgdmFyKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB2YXJpYWJsZSBpcyBhIGJvb2xlYW4iCiAgICBdLAogICAgImlzX2NhbGxhYmxlIjogWwogICAgICAgICJib29sIGlzX2NhbGxhYmxlKG1peGVkIHZhciBbLCBib29sIHN5bnRheF9vbmx5IFssIHN0cmluZyBjYWxsYWJsZV9uYW1lXV0pIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhciBpcyBjYWxsYWJsZS4iCiAgICBdLAogICAgImlzX2RpciI6IFsKICAgICAgICAiYm9vbCBpc19kaXIoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlIGlzIGRpcmVjdG9yeSIKICAgIF0sCiAgICAiaXNfZXhlY3V0YWJsZSI6IFsKICAgICAgICAiYm9vbCBpc19leGVjdXRhYmxlKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgZmlsZSBpcyBleGVjdXRhYmxlIgogICAgXSwKICAgICJpc19maWxlIjogWwogICAgICAgICJib29sIGlzX2ZpbGUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlIGlzIGEgcmVndWxhciBmaWxlIgogICAgXSwKICAgICJpc19maW5pdGUiOiBbCiAgICAgICAgImJvb2wgaXNfZmluaXRlKGZsb2F0IHZhbCkiLAogICAgICAgICJSZXR1cm5zIHdoZXRoZXIgYXJndW1lbnQgaXMgZmluaXRlIgogICAgXSwKICAgICJpc19mbG9hdCI6IFsKICAgICAgICAiYm9vbCBpc19mbG9hdChtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIGZsb2F0IHBvaW50IgogICAgXSwKICAgICJpc19pbmZpbml0ZSI6IFsKICAgICAgICAiYm9vbCBpc19pbmZpbml0ZShmbG9hdCB2YWwpIiwKICAgICAgICAiUmV0dXJucyB3aGV0aGVyIGFyZ3VtZW50IGlzIGluZmluaXRlIgogICAgXSwKICAgICJpc19saW5rIjogWwogICAgICAgICJib29sIGlzX2xpbmsoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlIGlzIHN5bWJvbGljIGxpbmsiCiAgICBdLAogICAgImlzX2xvbmciOiBbCiAgICAgICAgImJvb2wgaXNfbG9uZyhtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIGEgbG9uZyAoaW50ZWdlcikiCiAgICBdLAogICAgImlzX25hbiI6IFsKICAgICAgICAiYm9vbCBpc19uYW4oZmxvYXQgdmFsKSIsCiAgICAgICAgIlJldHVybnMgd2hldGhlciBhcmd1bWVudCBpcyBub3QgYSBudW1iZXIiCiAgICBdLAogICAgImlzX251bGwiOiBbCiAgICAgICAgImJvb2wgaXNfbnVsbChtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIG51bGwiCiAgICBdLAogICAgImlzX251bWVyaWMiOiBbCiAgICAgICAgImJvb2wgaXNfbnVtZXJpYyhtaXhlZCB2YWx1ZSkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYSBudW1iZXIgb3IgYSBudW1lcmljIHN0cmluZyIKICAgIF0sCiAgICAiaXNfb2JqZWN0IjogWwogICAgICAgICJib29sIGlzX29iamVjdChtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIGFuIG9iamVjdCIKICAgIF0sCiAgICAiaXNfcmVhZGFibGUiOiBbCiAgICAgICAgImJvb2wgaXNfcmVhZGFibGUoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiBmaWxlIGNhbiBiZSByZWFkIgogICAgXSwKICAgICJpc19yZXNvdXJjZSI6IFsKICAgICAgICAiYm9vbCBpc19yZXNvdXJjZShtaXhlZCB2YXIpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhcmlhYmxlIGlzIGEgcmVzb3VyY2UiCiAgICBdLAogICAgImlzX3NjYWxhciI6IFsKICAgICAgICAiYm9vbCBpc19zY2FsYXIobWl4ZWQgdmFsdWUpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGEgc2NhbGFyIgogICAgXSwKICAgICJpc19zdHJpbmciOiBbCiAgICAgICAgImJvb2wgaXNfc3RyaW5nKG1peGVkIHZhcikiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdmFyaWFibGUgaXMgYSBzdHJpbmciCiAgICBdLAogICAgImlzX3N1YmNsYXNzX29mIjogWwogICAgICAgICJib29sIGlzX3N1YmNsYXNzX29mKG9iamVjdCBvYmplY3QsIHN0cmluZyBjbGFzc19uYW1lKSIsCiAgICAgICAgIlJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0IGhhcyB0aGlzIGNsYXNzIGFzIG9uZSBvZiBpdHMgcGFyZW50cyIKICAgIF0sCiAgICAiaXNfdXBsb2FkZWRfZmlsZSI6IFsKICAgICAgICAiYm9vbCBpc191cGxvYWRlZF9maWxlKHN0cmluZyBwYXRoKSIsCiAgICAgICAgIkNoZWNrIGlmIGZpbGUgd2FzIGNyZWF0ZWQgYnkgcmZjMTg2NyB1cGxvYWQiCiAgICBdLAogICAgImlzX3dyaXRhYmxlIjogWwogICAgICAgICJib29sIGlzX3dyaXRhYmxlKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgZmlsZSBjYW4gYmUgd3JpdHRlbiIKICAgIF0sCiAgICAiaXNzZXQiOiBbCiAgICAgICAgImJvb2wgaXNzZXQobWl4ZWQgdmFyIFssIG1peGVkIHZhcl0pIiwKICAgICAgICAiRGV0ZXJtaW5lIHdoZXRoZXIgYSB2YXJpYWJsZSBpcyBzZXQiCiAgICBdLAogICAgIml0ZXJhdG9yX2FwcGx5IjogWwogICAgICAgICJpbnQgaXRlcmF0b3JfYXBwbHkoVHJhdmVyc2FibGUgaXQsIG1peGVkIGZ1bmN0aW9uIFssIG1peGVkIHBhcmFtc10pIiwKICAgICAgICAiQ2FsbHMgYSBmdW5jdGlvbiBmb3IgZXZlcnkgZWxlbWVudCBpbiBhbiBpdGVyYXRvciIKICAgIF0sCiAgICAiaXRlcmF0b3JfY291bnQiOiBbCiAgICAgICAgImludCBpdGVyYXRvcl9jb3VudChUcmF2ZXJzYWJsZSBpdCkiLAogICAgICAgICJDb3VudCB0aGUgZWxlbWVudHMgaW4gYW4gaXRlcmF0b3IiCiAgICBdLAogICAgIml0ZXJhdG9yX3RvX2FycmF5IjogWwogICAgICAgICJhcnJheSBpdGVyYXRvcl90b19hcnJheShUcmF2ZXJzYWJsZSBpdCBbLCBib29sIHVzZV9rZXlzID0gdHJ1ZV0pIiwKICAgICAgICAiQ29weSB0aGUgaXRlcmF0b3IgaW50byBhbiBhcnJheSIKICAgIF0sCiAgICAiamRkYXlvZndlZWsiOiBbCiAgICAgICAgIm1peGVkIGpkZGF5b2Z3ZWVrKGludCBqdWxpYW5kYXljb3VudCBbLCBpbnQgbW9kZV0pIiwKICAgICAgICAiUmV0dXJucyBuYW1lIG9yIG51bWJlciBvZiBkYXkgb2Ygd2VlayBmcm9tIGp1bGlhbiBkYXkgY291bnQiCiAgICBdLAogICAgImpkbW9udGhuYW1lIjogWwogICAgICAgICJzdHJpbmcgamRtb250aG5hbWUoaW50IGp1bGlhbmRheWNvdW50LCBpbnQgbW9kZSkiLAogICAgICAgICJSZXR1cm5zIG5hbWUgb2YgbW9udGggZm9yIGp1bGlhbiBkYXkgY291bnQiCiAgICBdLAogICAgImpkdG9mcmVuY2giOiBbCiAgICAgICAgInN0cmluZyBqZHRvZnJlbmNoKGludCBqdWxpYW5kYXljb3VudCkiLAogICAgICAgICJDb252ZXJ0cyBhIGp1bGlhbiBkYXkgY291bnQgdG8gYSBmcmVuY2ggcmVwdWJsaWMgY2FsZW5kYXIgZGF0ZSIKICAgIF0sCiAgICAiamR0b2dyZWdvcmlhbiI6IFsKICAgICAgICAic3RyaW5nIGpkdG9ncmVnb3JpYW4oaW50IGp1bGlhbmRheWNvdW50KSIsCiAgICAgICAgIkNvbnZlcnRzIGEganVsaWFuIGRheSBjb3VudCB0byBhIGdyZWdvcmlhbiBjYWxlbmRhciBkYXRlIgogICAgXSwKICAgICJqZHRvamV3aXNoIjogWwogICAgICAgICJzdHJpbmcgamR0b2pld2lzaChpbnQganVsaWFuZGF5Y291bnQgWywgYm9vbCBoZWJyZXcgWywgaW50IGZsXV0pIiwKICAgICAgICAiQ29udmVydHMgYSBqdWxpYW4gZGF5IGNvdW50IHRvIGEgamV3aXNoIGNhbGVuZGFyIGRhdGUiCiAgICBdLAogICAgImpkdG9qdWxpYW4iOiBbCiAgICAgICAgInN0cmluZyBqZHRvanVsaWFuKGludCBqdWxpYW5kYXljb3VudCkiLAogICAgICAgICJDb252ZXJ0IGEganVsaWFuIGRheSBjb3VudCB0byBhIGp1bGlhbiBjYWxlbmRhciBkYXRlIgogICAgXSwKICAgICJqZHRvdW5peCI6IFsKICAgICAgICAiaW50IGpkdG91bml4KGludCBqZGF5KSIsCiAgICAgICAgIkNvbnZlcnQgSnVsaWFuIERheSB0byBVTklYIHRpbWVzdGFtcCIKICAgIF0sCiAgICAiamV3aXNodG9qZCI6IFsKICAgICAgICAiaW50IGpld2lzaHRvamQoaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgeWVhcikiLAogICAgICAgICJDb252ZXJ0cyBhIGpld2lzaCBjYWxlbmRhciBkYXRlIHRvIGEganVsaWFuIGRheSBjb3VudCIKICAgIF0sCiAgICAiam9pbiI6IFsKICAgICAgICAic3RyaW5nIGpvaW4oYXJyYXkgc3JjLCBzdHJpbmcgZ2x1ZSkiLAogICAgICAgICJBbiBhbGlhcyBmb3IgaW1wbG9kZSIKICAgIF0sCiAgICAianBlZzJ3Ym1wIjogWwogICAgICAgICJib29sIGpwZWcyd2JtcCAoc3RyaW5nIGZfb3JnLCBzdHJpbmcgZl9kZXN0LCBpbnQgZF9oZWlnaHQsIGludCBkX3dpZHRoLCBpbnQgdGhyZXNob2xkKSIsCiAgICAgICAgIkNvbnZlcnQgSlBFRyBpbWFnZSB0byBXQk1QIGltYWdlIgogICAgXSwKICAgICJqc29uX2RlY29kZSI6IFsKICAgICAgICAibWl4ZWQganNvbl9kZWNvZGUoc3RyaW5nIGpzb24gWywgYm9vbCBhc3NvYyBbLCBsb25nIGRlcHRoXV0pIiwKICAgICAgICAiRGVjb2RlcyB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBpbnRvIGEgUEhQIHZhbHVlIgogICAgXSwKICAgICJqc29uX2VuY29kZSI6IFsKICAgICAgICAic3RyaW5nIGpzb25fZW5jb2RlKG1peGVkIGRhdGEgWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSB2YWx1ZSIKICAgIF0sCiAgICAianNvbl9sYXN0X2Vycm9yIjogWwogICAgICAgICJpbnQganNvbl9sYXN0X2Vycm9yKCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBsYXN0IGpzb25fZGVjb2RlKCkuIgogICAgXSwKICAgICJqdWxpYW50b2pkIjogWwogICAgICAgICJpbnQganVsaWFudG9qZChpbnQgbW9udGgsIGludCBkYXksIGludCB5ZWFyKSIsCiAgICAgICAgIkNvbnZlcnRzIGEganVsaWFuIGNhbGVuZGFyIGRhdGUgdG8ganVsaWFuIGRheSBjb3VudCIKICAgIF0sCiAgICAia2V5IjogWwogICAgICAgICJtaXhlZCBrZXkoYXJyYXkgYXJyYXlfYXJnKSIsCiAgICAgICAgIlJldHVybiB0aGUga2V5IG9mIHRoZSBlbGVtZW50IGN1cnJlbnRseSBwb2ludGVkIHRvIGJ5IHRoZSBpbnRlcm5hbCBhcnJheSBwb2ludGVyIgogICAgXSwKICAgICJrcnNvcnQiOiBbCiAgICAgICAgImJvb2wga3Jzb3J0KGFycmF5ICZhcnJheV9hcmcgWywgaW50IHNvcnRfZmxhZ3NdKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgYnkga2V5IHZhbHVlIGluIHJldmVyc2Ugb3JkZXIiCiAgICBdLAogICAgImtzb3J0IjogWwogICAgICAgICJib29sIGtzb3J0KGFycmF5ICZhcnJheV9hcmcgWywgaW50IHNvcnRfZmxhZ3NdKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgYnkga2V5IgogICAgXSwKICAgICJsY2ZpcnN0IjogWwogICAgICAgICJzdHJpbmcgbGNmaXJzdChzdHJpbmcgc3RyKSIsCiAgICAgICAgIk1ha2UgYSBzdHJpbmcncyBmaXJzdCBjaGFyYWN0ZXIgbG93ZXJjYXNlIgogICAgXSwKICAgICJsY2dfdmFsdWUiOiBbCiAgICAgICAgImZsb2F0IGxjZ192YWx1ZSgpIiwKICAgICAgICAiUmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIGNvbWJpbmVkIGxpbmVhciBjb25ncnVlbnRpYWwgZ2VuZXJhdG9yIgogICAgXSwKICAgICJsY2hncnAiOiBbCiAgICAgICAgImJvb2wgbGNoZ3JwKHN0cmluZyBmaWxlbmFtZSwgbWl4ZWQgZ3JvdXApIiwKICAgICAgICAiQ2hhbmdlIHN5bWxpbmsgZ3JvdXAiCiAgICBdLAogICAgImxkYXBfODg1OV90b190NjEiOiBbCiAgICAgICAgInN0cmluZyBsZGFwXzg4NTlfdG9fdDYxKHN0cmluZyB2YWx1ZSkiLAogICAgICAgICJUcmFuc2xhdGUgODg1OSBjaGFyYWN0ZXJzIHRvIHQ2MSBjaGFyYWN0ZXJzIgogICAgXSwKICAgICJsZGFwX2FkZCI6IFsKICAgICAgICAiYm9vbCBsZGFwX2FkZChyZXNvdXJjZSBsaW5rLCBzdHJpbmcgZG4sIGFycmF5IGVudHJ5KSIsCiAgICAgICAgIkFkZCBlbnRyaWVzIHRvIExEQVAgZGlyZWN0b3J5IgogICAgXSwKICAgICJsZGFwX2JpbmQiOiBbCiAgICAgICAgImJvb2wgbGRhcF9iaW5kKHJlc291cmNlIGxpbmsgWywgc3RyaW5nIGRuIFssIHN0cmluZyBwYXNzd29yZF1dKSIsCiAgICAgICAgIkJpbmQgdG8gTERBUCBkaXJlY3RvcnkiCiAgICBdLAogICAgImxkYXBfY29tcGFyZSI6IFsKICAgICAgICAiYm9vbCBsZGFwX2NvbXBhcmUocmVzb3VyY2UgbGluaywgc3RyaW5nIGRuLCBzdHJpbmcgYXR0ciwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIkRldGVybWluZSBpZiBhbiBlbnRyeSBoYXMgYSBzcGVjaWZpYyB2YWx1ZSBmb3Igb25lIG9mIGl0cyBhdHRyaWJ1dGVzIgogICAgXSwKICAgICJsZGFwX2Nvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIGxkYXBfY29ubmVjdChbc3RyaW5nIGhvc3QgWywgaW50IHBvcnQgWywgc3RyaW5nIHdhbGxldCBbLCBzdHJpbmcgd2FsbGV0X3Bhc3N3ZCBbLCBpbnQgYXV0aG1vZGVdXV1dXSkiLAogICAgICAgICJDb25uZWN0IHRvIGFuIExEQVAgc2VydmVyIgogICAgXSwKICAgICJsZGFwX2NvdW50X2VudHJpZXMiOiBbCiAgICAgICAgImludCBsZGFwX2NvdW50X2VudHJpZXMocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkNvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhIHNlYXJjaCByZXN1bHQiCiAgICBdLAogICAgImxkYXBfZGVsZXRlIjogWwogICAgICAgICJib29sIGxkYXBfZGVsZXRlKHJlc291cmNlIGxpbmssIHN0cmluZyBkbikiLAogICAgICAgICJEZWxldGUgYW4gZW50cnkgZnJvbSBhIGRpcmVjdG9yeSIKICAgIF0sCiAgICAibGRhcF9kbjJ1Zm4iOiBbCiAgICAgICAgInN0cmluZyBsZGFwX2RuMnVmbihzdHJpbmcgZG4pIiwKICAgICAgICAiQ29udmVydCBETiB0byBVc2VyIEZyaWVuZGx5IE5hbWluZyBmb3JtYXQiCiAgICBdLAogICAgImxkYXBfZXJyMnN0ciI6IFsKICAgICAgICAic3RyaW5nIGxkYXBfZXJyMnN0cihpbnQgZXJybm8pIiwKICAgICAgICAiQ29udmVydCBlcnJvciBudW1iZXIgdG8gZXJyb3Igc3RyaW5nIgogICAgXSwKICAgICJsZGFwX2Vycm5vIjogWwogICAgICAgICJpbnQgbGRhcF9lcnJubyhyZXNvdXJjZSBsaW5rKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBsZGFwIGVycm9yIG51bWJlciIKICAgIF0sCiAgICAibGRhcF9lcnJvciI6IFsKICAgICAgICAic3RyaW5nIGxkYXBfZXJyb3IocmVzb3VyY2UgbGluaykiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgbGRhcCBlcnJvciBzdHJpbmciCiAgICBdLAogICAgImxkYXBfZXhwbG9kZV9kbiI6IFsKICAgICAgICAiYXJyYXkgbGRhcF9leHBsb2RlX2RuKHN0cmluZyBkbiwgaW50IHdpdGhfYXR0cmliKSIsCiAgICAgICAgIlNwbGl0cyBETiBpbnRvIGl0cyBjb21wb25lbnQgcGFydHMiCiAgICBdLAogICAgImxkYXBfZmlyc3RfYXR0cmlidXRlIjogWwogICAgICAgICJzdHJpbmcgbGRhcF9maXJzdF9hdHRyaWJ1dGUocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0X2VudHJ5KSIsCiAgICAgICAgIlJldHVybiBmaXJzdCBhdHRyaWJ1dGUiCiAgICBdLAogICAgImxkYXBfZmlyc3RfZW50cnkiOiBbCiAgICAgICAgInJlc291cmNlIGxkYXBfZmlyc3RfZW50cnkocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybiBmaXJzdCByZXN1bHQgaWQiCiAgICBdLAogICAgImxkYXBfZmlyc3RfcmVmZXJlbmNlIjogWwogICAgICAgICJyZXNvdXJjZSBsZGFwX2ZpcnN0X3JlZmVyZW5jZShyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJuIGZpcnN0IHJlZmVyZW5jZSIKICAgIF0sCiAgICAibGRhcF9mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBsZGFwX2ZyZWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGcmVlIHJlc3VsdCBtZW1vcnkiCiAgICBdLAogICAgImxkYXBfZ2V0X2F0dHJpYnV0ZXMiOiBbCiAgICAgICAgImFycmF5IGxkYXBfZ2V0X2F0dHJpYnV0ZXMocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0X2VudHJ5KSIsCiAgICAgICAgIkdldCBhdHRyaWJ1dGVzIGZyb20gYSBzZWFyY2ggcmVzdWx0IGVudHJ5IgogICAgXSwKICAgICJsZGFwX2dldF9kbiI6IFsKICAgICAgICAic3RyaW5nIGxkYXBfZ2V0X2RuKHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdF9lbnRyeSkiLAogICAgICAgICJHZXQgdGhlIEROIG9mIGEgcmVzdWx0IGVudHJ5IgogICAgXSwKICAgICJsZGFwX2dldF9lbnRyaWVzIjogWwogICAgICAgICJhcnJheSBsZGFwX2dldF9lbnRyaWVzKHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXQgYWxsIHJlc3VsdCBlbnRyaWVzIgogICAgXSwKICAgICJsZGFwX2dldF9vcHRpb24iOiBbCiAgICAgICAgImJvb2wgbGRhcF9nZXRfb3B0aW9uKHJlc291cmNlIGxpbmssIGludCBvcHRpb24sIG1peGVkIHJldHZhbCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdmFyaW91cyBzZXNzaW9uLXdpZGUgcGFyYW1ldGVycyIKICAgIF0sCiAgICAibGRhcF9nZXRfdmFsdWVzX2xlbiI6IFsKICAgICAgICAiYXJyYXkgbGRhcF9nZXRfdmFsdWVzX2xlbihyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHRfZW50cnksIHN0cmluZyBhdHRyaWJ1dGUpIiwKICAgICAgICAiR2V0IGFsbCB2YWx1ZXMgd2l0aCBsZW5ndGhzIGZyb20gYSByZXN1bHQgZW50cnkiCiAgICBdLAogICAgImxkYXBfbGlzdCI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9saXN0KHJlc291cmNlfGFycmF5IGxpbmssIHN0cmluZyBiYXNlX2RuLCBzdHJpbmcgZmlsdGVyIFssIGFycmF5IGF0dHJzIFssIGludCBhdHRyc29ubHkgWywgaW50IHNpemVsaW1pdCBbLCBpbnQgdGltZWxpbWl0IFssIGludCBkZXJlZl1dXV1dKSIsCiAgICAgICAgIlNpbmdsZS1sZXZlbCBzZWFyY2giCiAgICBdLAogICAgImxkYXBfbW9kX2FkZCI6IFsKICAgICAgICAiYm9vbCBsZGFwX21vZF9hZGQocmVzb3VyY2UgbGluaywgc3RyaW5nIGRuLCBhcnJheSBlbnRyeSkiLAogICAgICAgICJBZGQgYXR0cmlidXRlIHZhbHVlcyB0byBjdXJyZW50IgogICAgXSwKICAgICJsZGFwX21vZF9kZWwiOiBbCiAgICAgICAgImJvb2wgbGRhcF9tb2RfZGVsKHJlc291cmNlIGxpbmssIHN0cmluZyBkbiwgYXJyYXkgZW50cnkpIiwKICAgICAgICAiRGVsZXRlIGF0dHJpYnV0ZSB2YWx1ZXMiCiAgICBdLAogICAgImxkYXBfbW9kX3JlcGxhY2UiOiBbCiAgICAgICAgImJvb2wgbGRhcF9tb2RfcmVwbGFjZShyZXNvdXJjZSBsaW5rLCBzdHJpbmcgZG4sIGFycmF5IGVudHJ5KSIsCiAgICAgICAgIlJlcGxhY2UgYXR0cmlidXRlIHZhbHVlcyB3aXRoIG5ldyBvbmVzIgogICAgXSwKICAgICJsZGFwX25leHRfYXR0cmlidXRlIjogWwogICAgICAgICJzdHJpbmcgbGRhcF9uZXh0X2F0dHJpYnV0ZShyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHRfZW50cnkpIiwKICAgICAgICAiR2V0IHRoZSBuZXh0IGF0dHJpYnV0ZSBpbiByZXN1bHQiCiAgICBdLAogICAgImxkYXBfbmV4dF9lbnRyeSI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9uZXh0X2VudHJ5KHJlc291cmNlIGxpbmssIHJlc291cmNlIHJlc3VsdF9lbnRyeSkiLAogICAgICAgICJHZXQgbmV4dCByZXN1bHQgZW50cnkiCiAgICBdLAogICAgImxkYXBfbmV4dF9yZWZlcmVuY2UiOiBbCiAgICAgICAgInJlc291cmNlIGxkYXBfbmV4dF9yZWZlcmVuY2UocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVmZXJlbmNlX2VudHJ5KSIsCiAgICAgICAgIkdldCBuZXh0IHJlZmVyZW5jZSIKICAgIF0sCiAgICAibGRhcF9wYXJzZV9yZWZlcmVuY2UiOiBbCiAgICAgICAgImJvb2wgbGRhcF9wYXJzZV9yZWZlcmVuY2UocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVmZXJlbmNlX2VudHJ5LCBhcnJheSByZWZlcnJhbHMpIiwKICAgICAgICAiRXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHJlZmVyZW5jZSBlbnRyeSIKICAgIF0sCiAgICAibGRhcF9wYXJzZV9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbGRhcF9wYXJzZV9yZXN1bHQocmVzb3VyY2UgbGluaywgcmVzb3VyY2UgcmVzdWx0LCBpbnQgZXJyY29kZSwgc3RyaW5nIG1hdGNoZWRkbiwgc3RyaW5nIGVycm1zZywgYXJyYXkgcmVmZXJyYWxzKSIsCiAgICAgICAgIkV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSByZXN1bHQiCiAgICBdLAogICAgImxkYXBfcmVhZCI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9yZWFkKHJlc291cmNlfGFycmF5IGxpbmssIHN0cmluZyBiYXNlX2RuLCBzdHJpbmcgZmlsdGVyIFssIGFycmF5IGF0dHJzIFssIGludCBhdHRyc29ubHkgWywgaW50IHNpemVsaW1pdCBbLCBpbnQgdGltZWxpbWl0IFssIGludCBkZXJlZl1dXV1dKSIsCiAgICAgICAgIlJlYWQgYW4gZW50cnkiCiAgICBdLAogICAgImxkYXBfcmVuYW1lIjogWwogICAgICAgICJib29sIGxkYXBfcmVuYW1lKHJlc291cmNlIGxpbmssIHN0cmluZyBkbiwgc3RyaW5nIG5ld3Jkbiwgc3RyaW5nIG5ld3BhcmVudCwgYm9vbCBkZWxldGVvbGRyZG4pOyIsCiAgICAgICAgIk1vZGlmeSB0aGUgbmFtZSBvZiBhbiBlbnRyeSIKICAgIF0sCiAgICAibGRhcF9zYXNsX2JpbmQiOiBbCiAgICAgICAgImJvb2wgbGRhcF9zYXNsX2JpbmQocmVzb3VyY2UgbGluayBbLCBzdHJpbmcgYmluZGRuIFssIHN0cmluZyBwYXNzd29yZCBbLCBzdHJpbmcgc2FzbF9tZWNoIFssIHN0cmluZyBzYXNsX3JlYWxtIFssIHN0cmluZyBzYXNsX2F1dGhjX2lkIFssIHN0cmluZyBzYXNsX2F1dGh6X2lkIFssIHN0cmluZyBwcm9wc11dXV1dXV0pIiwKICAgICAgICAiQmluZCB0byBMREFQIGRpcmVjdG9yeSB1c2luZyBTQVNMIgogICAgXSwKICAgICJsZGFwX3NlYXJjaCI6IFsKICAgICAgICAicmVzb3VyY2UgbGRhcF9zZWFyY2gocmVzb3VyY2V8YXJyYXkgbGluaywgc3RyaW5nIGJhc2VfZG4sIHN0cmluZyBmaWx0ZXIgWywgYXJyYXkgYXR0cnMgWywgaW50IGF0dHJzb25seSBbLCBpbnQgc2l6ZWxpbWl0IFssIGludCB0aW1lbGltaXQgWywgaW50IGRlcmVmXV1dXV0pIiwKICAgICAgICAiU2VhcmNoIExEQVAgdHJlZSB1bmRlciBiYXNlX2RuIgogICAgXSwKICAgICJsZGFwX3NldF9vcHRpb24iOiBbCiAgICAgICAgImJvb2wgbGRhcF9zZXRfb3B0aW9uKHJlc291cmNlIGxpbmssIGludCBvcHRpb24sIG1peGVkIG5ld3ZhbCkiLAogICAgICAgICJTZXQgdGhlIHZhbHVlIG9mIHZhcmlvdXMgc2Vzc2lvbi13aWRlIHBhcmFtZXRlcnMiCiAgICBdLAogICAgImxkYXBfc2V0X3JlYmluZF9wcm9jIjogWwogICAgICAgICJib29sIGxkYXBfc2V0X3JlYmluZF9wcm9jKHJlc291cmNlIGxpbmssIHN0cmluZyBjYWxsYmFjaykiLAogICAgICAgICJTZXQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBkbyByZS1iaW5kcyBvbiByZWZlcnJhbCBjaGFzaW5nLiIKICAgIF0sCiAgICAibGRhcF9zb3J0IjogWwogICAgICAgICJib29sIGxkYXBfc29ydChyZXNvdXJjZSBsaW5rLCByZXNvdXJjZSByZXN1bHQsIHN0cmluZyBzb3J0ZmlsdGVyKSIsCiAgICAgICAgIlNvcnQgTERBUCByZXN1bHQgZW50cmllcyIKICAgIF0sCiAgICAibGRhcF9zdGFydF90bHMiOiBbCiAgICAgICAgImJvb2wgbGRhcF9zdGFydF90bHMocmVzb3VyY2UgbGluaykiLAogICAgICAgICJTdGFydCBUTFMiCiAgICBdLAogICAgImxkYXBfdDYxX3RvXzg4NTkiOiBbCiAgICAgICAgInN0cmluZyBsZGFwX3Q2MV90b184ODU5KHN0cmluZyB2YWx1ZSkiLAogICAgICAgICJUcmFuc2xhdGUgdDYxIGNoYXJhY3RlcnMgdG8gODg1OSBjaGFyYWN0ZXJzIgogICAgXSwKICAgICJsZGFwX3VuYmluZCI6IFsKICAgICAgICAiYm9vbCBsZGFwX3VuYmluZChyZXNvdXJjZSBsaW5rKSIsCiAgICAgICAgIlVuYmluZCBmcm9tIExEQVAgZGlyZWN0b3J5IgogICAgXSwKICAgICJsZWFrIjogWwogICAgICAgICJ2b2lkIGxlYWsoaW50IG51bV9ieXRlcz0zKSIsCiAgICAgICAgIkNhdXNlIGFuIGludGVudGlvbmFsIG1lbW9yeSBsZWFrLCBmb3IgdGVzdGluZy9kZWJ1Z2dpbmcgcHVycG9zZXMiCiAgICBdLAogICAgImxldmVuc2h0ZWluIjogWwogICAgICAgICJpbnQgbGV2ZW5zaHRlaW4oc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyWywgaW50IGNvc3RfaW5zLCBpbnQgY29zdF9yZXAsIGludCBjb3N0X2RlbF0pIiwKICAgICAgICAiQ2FsY3VsYXRlIExldmVuc2h0ZWluIGRpc3RhbmNlIGJldHdlZW4gdHdvIHN0cmluZ3MiCiAgICBdLAogICAgImxpYnhtbF9jbGVhcl9lcnJvcnMiOiBbCiAgICAgICAgInZvaWQgbGlieG1sX2NsZWFyX2Vycm9ycygpIiwKICAgICAgICAiQ2xlYXIgbGFzdCBlcnJvciBmcm9tIGxpYnhtbCIKICAgIF0sCiAgICAibGlieG1sX2Rpc2FibGVfZW50aXR5X2xvYWRlciI6IFsKICAgICAgICAiYm9vbCBsaWJ4bWxfZGlzYWJsZV9lbnRpdHlfbG9hZGVyKFtib29sZWFuIGRpc2FibGVdKSIsCiAgICAgICAgIkRpc2FibGUvRW5hYmxlIGFiaWxpdHkgdG8gbG9hZCBleHRlcm5hbCBlbnRpdGllcyIKICAgIF0sCiAgICAibGlieG1sX2dldF9lcnJvcnMiOiBbCiAgICAgICAgIm9iamVjdCBsaWJ4bWxfZ2V0X2Vycm9ycygpIiwKICAgICAgICAiUmV0cmlldmUgYXJyYXkgb2YgZXJyb3JzIgogICAgXSwKICAgICJsaWJ4bWxfZ2V0X2xhc3RfZXJyb3IiOiBbCiAgICAgICAgIm9iamVjdCBsaWJ4bWxfZ2V0X2xhc3RfZXJyb3IoKSIsCiAgICAgICAgIlJldHJpZXZlIGxhc3QgZXJyb3IgZnJvbSBsaWJ4bWwiCiAgICBdLAogICAgImxpYnhtbF9zZXRfc3RyZWFtc19jb250ZXh0IjogWwogICAgICAgICJ2b2lkIGxpYnhtbF9zZXRfc3RyZWFtc19jb250ZXh0KHJlc291cmNlIHN0cmVhbXNfY29udGV4dCkiLAogICAgICAgICJTZXQgdGhlIHN0cmVhbXMgY29udGV4dCBmb3IgdGhlIG5leHQgbGlieG1sIGRvY3VtZW50IGxvYWQgb3Igd3JpdGUiCiAgICBdLAogICAgImxpYnhtbF91c2VfaW50ZXJuYWxfZXJyb3JzIjogWwogICAgICAgICJib29sIGxpYnhtbF91c2VfaW50ZXJuYWxfZXJyb3JzKFtib29sZWFuIHVzZV9lcnJvcnNdKSIsCiAgICAgICAgIkRpc2FibGUgbGlieG1sIGVycm9ycyBhbmQgYWxsb3cgdXNlciB0byBmZXRjaCBlcnJvciBpbmZvcm1hdGlvbiBhcyBuZWVkZWQiCiAgICBdLAogICAgImxpbmsiOiBbCiAgICAgICAgImludCBsaW5rKHN0cmluZyB0YXJnZXQsIHN0cmluZyBsaW5rKSIsCiAgICAgICAgIkNyZWF0ZSBhIGhhcmQgbGluayIKICAgIF0sCiAgICAibGlua2luZm8iOiBbCiAgICAgICAgImludCBsaW5raW5mbyhzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3RfZGV2IGZpZWxkIG9mIHRoZSBVTklYIEMgc3RhdCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbGluayIKICAgIF0sCiAgICAibGl0ZXNwZWVkX3JlcXVlc3RfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgbGl0ZXNwZWVkX3JlcXVlc3RfaGVhZGVycyh2b2lkKSIsCiAgICAgICAgIkZldGNoIGFsbCBIVFRQIHJlcXVlc3QgaGVhZGVycyIKICAgIF0sCiAgICAibGl0ZXNwZWVkX3Jlc3BvbnNlX2hlYWRlcnMiOiBbCiAgICAgICAgImFycmF5IGxpdGVzcGVlZF9yZXNwb25zZV9oZWFkZXJzKHZvaWQpIiwKICAgICAgICAiRmV0Y2ggYWxsIEhUVFAgcmVzcG9uc2UgaGVhZGVycyIKICAgIF0sCiAgICAibG9jYWxlX2FjY2VwdF9mcm9tX2h0dHAiOiBbCiAgICAgICAgInN0cmluZyBsb2NhbGVfYWNjZXB0X2Zyb21faHR0cChzdHJpbmcgJGh0dHBfYWNjZXB0KSIsCiAgICAgICAgbnVsbAogICAgXSwKICAgICJsb2NhbGVfY2Fub25pY2FsaXplIjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGxvY2FsZV9jYW5vbmljYWxpemUoTG9jYWxlICRsb2MsIHN0cmluZyAkbG9jYWxlKSIsCiAgICAgICAgIiogQHBhcmFtIHN0cmluZyAkbG9jYWxlIFRoZSBsb2NhbGUgc3RyaW5nIHRvIGNhbm9uaWNhbGl6ZSIKICAgIF0sCiAgICAibG9jYWxlX2ZpbHRlcl9tYXRjaGVzIjogWwogICAgICAgICJib29sZWFuIGxvY2FsZV9maWx0ZXJfbWF0Y2hlcyhzdHJpbmcgJGxhbmd0YWcsIHN0cmluZyAkbG9jYWxlWywgYm9vbCAkY2Fub25pY2FsaXplXSkiLAogICAgICAgICIqIENoZWNrcyBpZiBhICRsYW5ndGFnIGZpbHRlciBtYXRjaGVzIHdpdGggJGxvY2FsZSBhY2NvcmRpbmcgdG8gUkZDIDQ2NDcncyBiYXNpYyBmaWx0ZXJpbmcgYWxnb3JpdGhtIgogICAgXSwKICAgICJsb2NhbGVfZ2V0X2FsbF92YXJpYW50cyI6IFsKICAgICAgICAic3RhdGljIGFycmF5IGxvY2FsZV9nZXRfYWxsX3ZhcmlhbnRzKCRsb2NhbGUpIiwKICAgICAgICAiKiBnZXRzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgdmFyaWFudHMsIG9yIG51bGwiCiAgICBdLAogICAgImxvY2FsZV9nZXRfZGVmYXVsdCI6IFsKICAgICAgICAic3RhdGljIHN0cmluZyBsb2NhbGVfZ2V0X2RlZmF1bHQoICkiLAogICAgICAgICJHZXQgZGVmYXVsdCBsb2NhbGUiCiAgICBdLAogICAgImxvY2FsZV9nZXRfa2V5d29yZHMiOiBbCiAgICAgICAgInN0YXRpYyBhcnJheSBsb2NhbGVfZ2V0X2tleXdvcmRzKHN0cmluZyAkbG9jYWxlKSB7IiwKICAgICAgICAiKiByZXR1cm4gYW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBrZXl3b3JkLXZhbHVlICAqIHBhaXJzIGZvciB0aGlzIGxvY2FsZS4gVGhlIGtleXMgYXJlIGtleXMgdG8gdGhlIGFycmF5IChkb2ghKSIKICAgIF0sCiAgICAibG9jYWxlX2dldF9wcmltYXJ5X2xhbmd1YWdlIjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGxvY2FsZV9nZXRfcHJpbWFyeV9sYW5ndWFnZSgkbG9jYWxlKSIsCiAgICAgICAgIiogZ2V0cyB0aGUgcHJpbWFyeSBsYW5ndWFnZSBmb3IgdGhlICRsb2NhbGUiCiAgICBdLAogICAgImxvY2FsZV9nZXRfcmVnaW9uIjogWwogICAgICAgICJzdGF0aWMgc3RyaW5nIGxvY2FsZV9nZXRfcmVnaW9uKCRsb2NhbGUpIiwKICAgICAgICAiKiBnZXRzIHRoZSByZWdpb24gZm9yIHRoZSAkbG9jYWxlIgogICAgXSwKICAgICJsb2NhbGVfZ2V0X3NjcmlwdCI6IFsKICAgICAgICAic3RhdGljIHN0cmluZyBsb2NhbGVfZ2V0X3NjcmlwdCgkbG9jYWxlKSIsCiAgICAgICAgIiogZ2V0cyB0aGUgc2NyaXB0IGZvciB0aGUgJGxvY2FsZSIKICAgIF0sCiAgICAibG9jYWxlX2xvb2t1cCI6IFsKICAgICAgICAic3RyaW5nIGxvY2FsZV9sb29rdXAoYXJyYXkgJGxhbmd0YWcsIHN0cmluZyAkbG9jYWxlWywgYm9vbCAkY2Fub25pY2FsaXplWywgc3RyaW5nICRkZWZhdWx0ID0gbnVsbF1dKSIsCiAgICAgICAgIiogU2VhcmNocyB0aGUgaXRlbXMgaW4gJGxhbmd0YWcgZm9yIHRoZSBiZXN0IG1hdGNoIHRvIHRoZSBsYW5ndWFnZSAqIHJhbmdlIgogICAgXSwKICAgICJsb2NhbGVfc2V0X2RlZmF1bHQiOiBbCiAgICAgICAgInN0YXRpYyBzdHJpbmcgbG9jYWxlX3NldF9kZWZhdWx0KCBzdHJpbmcgJGxvY2FsZSApIiwKICAgICAgICAiU2V0IGRlZmF1bHQgbG9jYWxlIgogICAgXSwKICAgICJsb2NhbGVjb252IjogWwogICAgICAgICJhcnJheSBsb2NhbGVjb252KHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBudW1lcmljIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgbG9jYWxlIgogICAgXSwKICAgICJsb2NhbHRpbWUiOiBbCiAgICAgICAgImFycmF5IGxvY2FsdGltZShbaW50IHRpbWVzdGFtcCBbLCBib29sIGFzc29jaWF0aXZlX2FycmF5XV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgcmVzdWx0cyBvZiB0aGUgQyBzeXN0ZW0gY2FsbCBsb2NhbHRpbWUgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgaWYgdGhlIGFzc29jaWF0aXZlX2FycmF5IGFyZ3VtZW50IGlzIHNldCB0byAxIG90aGVyIHdpc2UgaXQgaXMgYSByZWd1bGFyIGFycmF5IgogICAgXSwKICAgICJsb2ciOiBbCiAgICAgICAgImZsb2F0IGxvZyhmbG9hdCBudW1iZXIsIFtmbG9hdCBiYXNlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgbnVtYmVyLCBvciB0aGUgYmFzZSBsb2cgaWYgYmFzZSBpcyBzcGVjaWZpZWQiCiAgICBdLAogICAgImxvZzEwIjogWwogICAgICAgICJmbG9hdCBsb2cxMChmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgdGhlIG51bWJlciIKICAgIF0sCiAgICAibG9nMXAiOiBbCiAgICAgICAgImZsb2F0IGxvZzFwKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIGxvZygxICsgbnVtYmVyKSwgY29tcHV0ZWQgaW4gYSB3YXkgdGhhdCBhY2N1cmF0ZSBldmVuIHdoZW4gdGhlIHZhbHVlIG9mIG51bWJlciBpcyBjbG9zZSB0byB6ZXJvIgogICAgXSwKICAgICJsb25nMmlwIjogWwogICAgICAgICJzdHJpbmcgbG9uZzJpcChpbnQgcHJvcGVyX2FkZHJlc3MpIiwKICAgICAgICAiQ29udmVydHMgYW4gKElQdjQpIEludGVybmV0IG5ldHdvcmsgYWRkcmVzcyBpbnRvIGEgc3RyaW5nIGluIEludGVybmV0IHN0YW5kYXJkIGRvdHRlZCBmb3JtYXQiCiAgICBdLAogICAgImxzdGF0IjogWwogICAgICAgICJhcnJheSBsc3RhdChzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiR2l2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGZpbGUgb3Igc3ltYm9saWMgbGluayIKICAgIF0sCiAgICAibHRyaW0iOiBbCiAgICAgICAgInN0cmluZyBsdHJpbShzdHJpbmcgc3RyIFssIHN0cmluZyBjaGFyYWN0ZXJfbWFza10pIiwKICAgICAgICAiU3RyaXBzIHdoaXRlc3BhY2UgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nIgogICAgXSwKICAgICJtYWlsIjogWwogICAgICAgICJpbnQgbWFpbChzdHJpbmcgdG8sIHN0cmluZyBzdWJqZWN0LCBzdHJpbmcgbWVzc2FnZSBbLCBzdHJpbmcgYWRkaXRpb25hbF9oZWFkZXJzIFssIHN0cmluZyBhZGRpdGlvbmFsX3BhcmFtZXRlcnNdXSkiLAogICAgICAgICJTZW5kIGFuIGVtYWlsIG1lc3NhZ2UiCiAgICBdLAogICAgIm1heCI6IFsKICAgICAgICAibWl4ZWQgbWF4KG1peGVkIGFyZzEgWywgbWl4ZWQgYXJnMiBbLCBtaXhlZCAuLi5dXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGhpZ2hlc3QgdmFsdWUgaW4gYW4gYXJyYXkgb3IgYSBzZXJpZXMgb2YgYXJndW1lbnRzIgogICAgXSwKICAgICJtYl9jaGVja19lbmNvZGluZyI6IFsKICAgICAgICAiYm9vbCBtYl9jaGVja19lbmNvZGluZyhbc3RyaW5nIHZhclssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkNoZWNrIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmciCiAgICBdLAogICAgIm1iX2NvbnZlcnRfY2FzZSI6IFsKICAgICAgICAic3RyaW5nIG1iX2NvbnZlcnRfY2FzZShzdHJpbmcgc291cmNlc3RyaW5nLCBpbnQgbW9kZSBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIlJldHVybnMgYSBjYXNlLWZvbGRlZCB2ZXJzaW9uIG9mIHNvdXJjZXN0cmluZyIKICAgIF0sCiAgICAibWJfY29udmVydF9lbmNvZGluZyI6IFsKICAgICAgICAic3RyaW5nIG1iX2NvbnZlcnRfZW5jb2Rpbmcoc3RyaW5nIHN0ciwgc3RyaW5nIHRvLWVuY29kaW5nIFssIG1peGVkIGZyb20tZW5jb2RpbmddKSIsCiAgICAgICAgIlJldHVybnMgY29udmVydGVkIHN0cmluZyBpbiBkZXNpcmVkIGVuY29kaW5nIgogICAgXSwKICAgICJtYl9jb252ZXJ0X2thbmEiOiBbCiAgICAgICAgInN0cmluZyBtYl9jb252ZXJ0X2thbmEoc3RyaW5nIHN0ciBbLCBzdHJpbmcgb3B0aW9uXSBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIkNvbnZlcnNpb24gYmV0d2VlbiBmdWxsLXdpZHRoIGNoYXJhY3RlciBhbmQgaGFsZi13aWR0aCBjaGFyYWN0ZXIgKEphcGFuZXNlKSIKICAgIF0sCiAgICAibWJfY29udmVydF92YXJpYWJsZXMiOiBbCiAgICAgICAgInN0cmluZyBtYl9jb252ZXJ0X3ZhcmlhYmxlcyhzdHJpbmcgdG8tZW5jb2RpbmcsIG1peGVkIGZyb20tZW5jb2RpbmcsIG1peGVkIHZhcnMgWywgLi4uXSkiLAogICAgICAgICJDb252ZXJ0cyB0aGUgc3RyaW5nIHJlc291cmNlIGluIHZhcmlhYmxlcyB0byBkZXNpcmVkIGVuY29kaW5nIgogICAgXSwKICAgICJtYl9kZWNvZGVfbWltZWhlYWRlciI6IFsKICAgICAgICAic3RyaW5nIG1iX2RlY29kZV9taW1laGVhZGVyKHN0cmluZyBzdHJpbmcpIiwKICAgICAgICAiRGVjb2RlcyB0aGUgTUlNRSBcImVuY29kZWQtd29yZFwiIGluIHRoZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2RlY29kZV9udW1lcmljZW50aXR5IjogWwogICAgICAgICJzdHJpbmcgbWJfZGVjb2RlX251bWVyaWNlbnRpdHkoc3RyaW5nIHN0cmluZywgYXJyYXkgY29udm1hcCBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIkNvbnZlcnRzIEhUTUwgbnVtZXJpYyBlbnRpdGllcyB0byBjaGFyYWN0ZXIgY29kZSIKICAgIF0sCiAgICAibWJfZGV0ZWN0X2VuY29kaW5nIjogWwogICAgICAgICJzdHJpbmcgbWJfZGV0ZWN0X2VuY29kaW5nKHN0cmluZyBzdHIgWywgbWl4ZWQgZW5jb2RpbmdfbGlzdCBbLCBib29sIHN0cmljdF1dKSIsCiAgICAgICAgIkVuY29kaW5ncyBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIHJldHVybmVkIChhcyBhIHN0cmluZykiCiAgICBdLAogICAgIm1iX2RldGVjdF9vcmRlciI6IFsKICAgICAgICAiYm9vbHxhcnJheSBtYl9kZXRlY3Rfb3JkZXIoW21peGVkIGVuY29kaW5nLWxpc3RdKSIsCiAgICAgICAgIlNldHMgdGhlIGN1cnJlbnQgZGV0ZWN0X29yZGVyIG9yIFJldHVybiB0aGUgY3VycmVudCBkZXRlY3Rfb3JkZXIgYXMgYSBhcnJheSIKICAgIF0sCiAgICAibWJfZW5jb2RlX21pbWVoZWFkZXIiOiBbCiAgICAgICAgInN0cmluZyBtYl9lbmNvZGVfbWltZWhlYWRlcihzdHJpbmcgc3RyIFssIHN0cmluZyBjaGFyc2V0IFssIHN0cmluZyB0cmFuc2Zlci1lbmNvZGluZyBbLCBzdHJpbmcgbGluZWZlZWQgWywgaW50IGluZGVudF1dXV0pIiwKICAgICAgICAiQ29udmVydHMgdGhlIHN0cmluZyB0byBNSU1FIFwiZW5jb2RlZC13b3JkXCIgaW4gdGhlIGZvcm1hdCBvZiA9P2NoYXJzZXQ/KEJ8USk/ZW5jb2RlZF9zdHJpbmc/PSIKICAgIF0sCiAgICAibWJfZW5jb2RlX251bWVyaWNlbnRpdHkiOiBbCiAgICAgICAgInN0cmluZyBtYl9lbmNvZGVfbnVtZXJpY2VudGl0eShzdHJpbmcgc3RyaW5nLCBhcnJheSBjb252bWFwIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiQ29udmVydHMgc3BlY2lmaWVkIGNoYXJhY3RlcnMgdG8gSFRNTCBudW1lcmljIGVudGl0aWVzIgogICAgXSwKICAgICJtYl9lbmNvZGluZ19hbGlhc2VzIjogWwogICAgICAgICJhcnJheSBtYl9lbmNvZGluZ19hbGlhc2VzKHN0cmluZyBlbmNvZGluZykiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBhbGlhc2VzIG9mIGEgZ2l2ZW4gZW5jb2RpbmcgbmFtZSIKICAgIF0sCiAgICAibWJfZXJlZyI6IFsKICAgICAgICAiaW50IG1iX2VyZWcoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHJpbmcgWywgYXJyYXkgcmVnaXN0ZXJzXSkiLAogICAgICAgICJSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggZm9yIG11bHRpYnl0ZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2VyZWdfbWF0Y2giOiBbCiAgICAgICAgImJvb2wgbWJfZXJlZ19tYXRjaChzdHJpbmcgcGF0dGVybiwgc3RyaW5nIHN0cmluZyBbLHN0cmluZyBvcHRpb25dKSIsCiAgICAgICAgIlJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBmb3IgbXVsdGlieXRlIHN0cmluZyIKICAgIF0sCiAgICAibWJfZXJlZ19yZXBsYWNlIjogWwogICAgICAgICJzdHJpbmcgbWJfZXJlZ19yZXBsYWNlKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgcmVwbGFjZW1lbnQsIHN0cmluZyBzdHJpbmcgWywgc3RyaW5nIG9wdGlvbl0pIiwKICAgICAgICAiUmVwbGFjZSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIG11bHRpYnl0ZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoIjogWwogICAgICAgICJib29sIG1iX2VyZWdfc2VhcmNoKFtzdHJpbmcgcGF0dGVyblssIHN0cmluZyBvcHRpb25dXSkiLAogICAgICAgICJSZWd1bGFyIGV4cHJlc3Npb24gc2VhcmNoIGZvciBtdWx0aWJ5dGUgc3RyaW5nIgogICAgXSwKICAgICJtYl9lcmVnX3NlYXJjaF9nZXRwb3MiOiBbCiAgICAgICAgImludCBtYl9lcmVnX3NlYXJjaF9nZXRwb3Modm9pZCkiLAogICAgICAgICJHZXQgc2VhcmNoIHN0YXJ0IHBvc2l0aW9uIgogICAgXSwKICAgICJtYl9lcmVnX3NlYXJjaF9nZXRyZWdzIjogWwogICAgICAgICJhcnJheSBtYl9lcmVnX3NlYXJjaF9nZXRyZWdzKHZvaWQpIiwKICAgICAgICAiR2V0IG1hdGNoZWQgc3Vic3RyaW5nIG9mIHRoZSBsYXN0IHRpbWUiCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoX2luaXQiOiBbCiAgICAgICAgImJvb2wgbWJfZXJlZ19zZWFyY2hfaW5pdChzdHJpbmcgc3RyaW5nIFssIHN0cmluZyBwYXR0ZXJuWywgc3RyaW5nIG9wdGlvbl1dKSIsCiAgICAgICAgIkluaXRpYWxpemUgc3RyaW5nIGFuZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHNlYXJjaC4iCiAgICBdLAogICAgIm1iX2VyZWdfc2VhcmNoX3BvcyI6IFsKICAgICAgICAiYXJyYXkgbWJfZXJlZ19zZWFyY2hfcG9zKFtzdHJpbmcgcGF0dGVyblssIHN0cmluZyBvcHRpb25dXSkiLAogICAgICAgICJSZWd1bGFyIGV4cHJlc3Npb24gc2VhcmNoIGZvciBtdWx0aWJ5dGUgc3RyaW5nIgogICAgXSwKICAgICJtYl9lcmVnX3NlYXJjaF9yZWdzIjogWwogICAgICAgICJhcnJheSBtYl9lcmVnX3NlYXJjaF9yZWdzKFtzdHJpbmcgcGF0dGVyblssIHN0cmluZyBvcHRpb25dXSkiLAogICAgICAgICJSZWd1bGFyIGV4cHJlc3Npb24gc2VhcmNoIGZvciBtdWx0aWJ5dGUgc3RyaW5nIgogICAgXSwKICAgICJtYl9lcmVnX3NlYXJjaF9zZXRwb3MiOiBbCiAgICAgICAgImJvb2wgbWJfZXJlZ19zZWFyY2hfc2V0cG9zKGludCBwb3NpdGlvbikiLAogICAgICAgICJTZXQgc2VhcmNoIHN0YXJ0IHBvc2l0aW9uIgogICAgXSwKICAgICJtYl9lcmVnaSI6IFsKICAgICAgICAiaW50IG1iX2VyZWdpKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3RyaW5nIFssIGFycmF5IHJlZ2lzdGVyc10pIiwKICAgICAgICAiQ2FzZS1pbnNlbnNpdGl2ZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggZm9yIG11bHRpYnl0ZSBzdHJpbmciCiAgICBdLAogICAgIm1iX2VyZWdpX3JlcGxhY2UiOiBbCiAgICAgICAgInN0cmluZyBtYl9lcmVnaV9yZXBsYWNlKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgcmVwbGFjZW1lbnQsIHN0cmluZyBzdHJpbmcpIiwKICAgICAgICAiQ2FzZSBpbnNlbnNpdGl2ZSByZXBsYWNlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgbXVsdGlieXRlIHN0cmluZyIKICAgIF0sCiAgICAibWJfZ2V0X2luZm8iOiBbCiAgICAgICAgIm1peGVkIG1iX2dldF9pbmZvKFtzdHJpbmcgdHlwZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgY3VycmVudCBzZXR0aW5ncyBvZiBtYnN0cmluZyIKICAgIF0sCiAgICAibWJfaHR0cF9pbnB1dCI6IFsKICAgICAgICAibWl4ZWQgbWJfaHR0cF9pbnB1dChbc3RyaW5nIHR5cGVdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGlucHV0IGVuY29kaW5nIgogICAgXSwKICAgICJtYl9odHRwX291dHB1dCI6IFsKICAgICAgICAic3RyaW5nIG1iX2h0dHBfb3V0cHV0KFtzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIlNldHMgdGhlIGN1cnJlbnQgb3V0cHV0X2VuY29kaW5nIG9yIHJldHVybnMgdGhlIGN1cnJlbnQgb3V0cHV0X2VuY29kaW5nIGFzIGEgc3RyaW5nIgogICAgXSwKICAgICJtYl9pbnRlcm5hbF9lbmNvZGluZyI6IFsKICAgICAgICAic3RyaW5nIG1iX2ludGVybmFsX2VuY29kaW5nKFtzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIlNldHMgdGhlIGN1cnJlbnQgaW50ZXJuYWwgZW5jb2Rpbmcgb3IgUmV0dXJucyB0aGUgY3VycmVudCBpbnRlcm5hbCBlbmNvZGluZyBhcyBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfbGFuZ3VhZ2UiOiBbCiAgICAgICAgInN0cmluZyBtYl9sYW5ndWFnZShbc3RyaW5nIGxhbmd1YWdlXSkiLAogICAgICAgICJTZXRzIHRoZSBjdXJyZW50IGxhbmd1YWdlIG9yIFJldHVybnMgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgYXMgYSBzdHJpbmciCiAgICBdLAogICAgIm1iX2xpc3RfZW5jb2RpbmdzIjogWwogICAgICAgICJtaXhlZCBtYl9saXN0X2VuY29kaW5ncygpIiwKICAgICAgICAiUmV0dXJucyBhbiBhcnJheSBvZiBhbGwgc3VwcG9ydGVkIGVudGl0eSBlbmNvZGluZ3MiCiAgICBdLAogICAgIm1iX291dHB1dF9oYW5kbGVyIjogWwogICAgICAgICJzdHJpbmcgbWJfb3V0cHV0X2hhbmRsZXIoc3RyaW5nIGNvbnRlbnRzLCBpbnQgc3RhdHVzKSIsCiAgICAgICAgIlJldHVybnMgc3RyaW5nIGluIG91dHB1dCBidWZmZXIgY29udmVydGVkIHRvIHRoZSBodHRwX291dHB1dCBlbmNvZGluZyIKICAgIF0sCiAgICAibWJfcGFyc2Vfc3RyIjogWwogICAgICAgICJib29sIG1iX3BhcnNlX3N0cihzdHJpbmcgZW5jb2RlZF9zdHJpbmcgWywgYXJyYXkgcmVzdWx0XSkiLAogICAgICAgICJQYXJzZXMgR0VUL1BPU1QvQ09PS0lFIGRhdGEgYW5kIHNldHMgZ2xvYmFsIHZhcmlhYmxlcyIKICAgIF0sCiAgICAibWJfcHJlZmVycmVkX21pbWVfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG1iX3ByZWZlcnJlZF9taW1lX25hbWUoc3RyaW5nIGVuY29kaW5nKSIsCiAgICAgICAgIlJldHVybiB0aGUgcHJlZmVycmVkIE1JTUUgbmFtZSAoY2hhcnNldCkgYXMgYSBzdHJpbmciCiAgICBdLAogICAgIm1iX3JlZ2V4X2VuY29kaW5nIjogWwogICAgICAgICJzdHJpbmcgbWJfcmVnZXhfZW5jb2RpbmcoW3N0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiUmV0dXJucyB0aGUgY3VycmVudCBlbmNvZGluZyBmb3IgcmVnZXggYXMgYSBzdHJpbmcuIgogICAgXSwKICAgICJtYl9yZWdleF9zZXRfb3B0aW9ucyI6IFsKICAgICAgICAic3RyaW5nIG1iX3JlZ2V4X3NldF9vcHRpb25zKFtzdHJpbmcgb3B0aW9uc10pIiwKICAgICAgICAiU2V0IG9yIGdldCB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciBtYnJlZ2V4IGZ1bmN0aW9ucyIKICAgIF0sCiAgICAibWJfc2VuZF9tYWlsIjogWwogICAgICAgICJpbnQgbWJfc2VuZF9tYWlsKHN0cmluZyB0bywgc3RyaW5nIHN1YmplY3QsIHN0cmluZyBtZXNzYWdlIFssIHN0cmluZyBhZGRpdGlvbmFsX2hlYWRlcnMgWywgc3RyaW5nIGFkZGl0aW9uYWxfcGFyYW1ldGVyc11dKSIsCiAgICAgICAgIiogIFNlbmRzIGFuIGVtYWlsIG1lc3NhZ2Ugd2l0aCBNSU1FIHNjaGVtZSIKICAgIF0sCiAgICAibWJfc3BsaXQiOiBbCiAgICAgICAgImFycmF5IG1iX3NwbGl0KHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3RyaW5nIFssIGludCBsaW1pdF0pIiwKICAgICAgICAic3BsaXQgbXVsdGlieXRlIHN0cmluZyBpbnRvIGFycmF5IGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiIKICAgIF0sCiAgICAibWJfc3RyY3V0IjogWwogICAgICAgICJzdHJpbmcgbWJfc3RyY3V0KHN0cmluZyBzdHIsIGludCBzdGFydCBbLCBpbnQgbGVuZ3RoIFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIlJldHVybnMgcGFydCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfc3RyaW13aWR0aCI6IFsKICAgICAgICAic3RyaW5nIG1iX3N0cmltd2lkdGgoc3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgd2lkdGggWywgc3RyaW5nIHRyaW1tYXJrZXIgWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiVHJpbSB0aGUgc3RyaW5nIGluIHRlcm1pbmFsIHdpZHRoIgogICAgXSwKICAgICJtYl9zdHJpcG9zIjogWwogICAgICAgICJpbnQgbWJfc3RyaXBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldCBbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJGaW5kcyBwb3NpdGlvbiBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlIgogICAgXSwKICAgICJtYl9zdHJpc3RyIjogWwogICAgICAgICJzdHJpbmcgbWJfc3RyaXN0cihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGVbLCBib29sIHBhcnRbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlIgogICAgXSwKICAgICJtYl9zdHJsZW4iOiBbCiAgICAgICAgImludCBtYl9zdHJsZW4oc3RyaW5nIHN0ciBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIkdldCBjaGFyYWN0ZXIgbnVtYmVycyBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfc3RycG9zIjogWwogICAgICAgICJpbnQgbWJfc3RycG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0IFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkZpbmQgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAibWJfc3RycmNociI6IFsKICAgICAgICAic3RyaW5nIG1iX3N0cnJjaHIoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlWywgYm9vbCBwYXJ0Wywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiRmluZHMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNoYXJhY3RlciBpbiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAibWJfc3RycmljaHIiOiBbCiAgICAgICAgInN0cmluZyBtYl9zdHJyaWNocihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGVbLCBib29sIHBhcnRbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJGaW5kcyB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgY2hhcmFjdGVyIGluIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlIgogICAgXSwKICAgICJtYl9zdHJyaXBvcyI6IFsKICAgICAgICAiaW50IG1iX3N0cnJpcG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0IFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciwgY2FzZSBpbnNlbnNpdGl2ZSIKICAgIF0sCiAgICAibWJfc3RycnBvcyI6IFsKICAgICAgICAiaW50IG1iX3N0cnJwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXQgWywgc3RyaW5nIGVuY29kaW5nXV0pIiwKICAgICAgICAiRmluZCBwb3NpdGlvbiBvZiBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIiCiAgICBdLAogICAgIm1iX3N0cnN0ciI6IFsKICAgICAgICAic3RyaW5nIG1iX3N0cnN0cihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGVbLCBib29sIHBhcnRbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJtYl9zdHJ0b2xvd2VyIjogWwogICAgICAgICJzdHJpbmcgbWJfc3RydG9sb3dlcihzdHJpbmcgc291cmNlc3RyaW5nIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiKiAgUmV0dXJucyBhIGxvd2VyY2FzZWQgdmVyc2lvbiBvZiBzb3VyY2VzdHJpbmciCiAgICBdLAogICAgIm1iX3N0cnRvdXBwZXIiOiBbCiAgICAgICAgInN0cmluZyBtYl9zdHJ0b3VwcGVyKHN0cmluZyBzb3VyY2VzdHJpbmcgWywgc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICIqICBSZXR1cm5zIGEgdXBwZXJjYXNlZCB2ZXJzaW9uIG9mIHNvdXJjZXN0cmluZyIKICAgIF0sCiAgICAibWJfc3Ryd2lkdGgiOiBbCiAgICAgICAgImludCBtYl9zdHJ3aWR0aChzdHJpbmcgc3RyIFssIHN0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiR2V0cyB0ZXJtaW5hbCB3aWR0aCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXIiOiBbCiAgICAgICAgIm1peGVkIG1iX3N1YnN0aXR1dGVfY2hhcmFjdGVyKFttaXhlZCBzdWJzdGNoYXJdKSIsCiAgICAgICAgIlNldHMgdGhlIGN1cnJlbnQgc3Vic3RpdHV0ZV9jaGFyYWN0ZXIgb3IgcmV0dXJucyB0aGUgY3VycmVudCBzdWJzdGl0dXRlX2NoYXJhY3RlciIKICAgIF0sCiAgICAibWJfc3Vic3RyIjogWwogICAgICAgICJzdHJpbmcgbWJfc3Vic3RyKHN0cmluZyBzdHIsIGludCBzdGFydCBbLCBpbnQgbGVuZ3RoIFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIlJldHVybnMgcGFydCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAibWJfc3Vic3RyX2NvdW50IjogWwogICAgICAgICJpbnQgbWJfc3Vic3RyX2NvdW50KHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIkNvdW50IHRoZSBudW1iZXIgb2Ygc3Vic3RyaW5nIG9jY3VycmVuY2VzIgogICAgXSwKICAgICJtY3J5cHRfY2JjIjogWwogICAgICAgICJzdHJpbmcgbWNyeXB0X2NiYyhpbnQgY2lwaGVyLCBzdHJpbmcga2V5LCBzdHJpbmcgZGF0YSwgaW50IG1vZGUsIHN0cmluZyBpdikiLAogICAgICAgICJDQkMgY3J5cHQvZGVjcnlwdCBkYXRhIHVzaW5nIGtleSBrZXkgd2l0aCBjaXBoZXIgY2lwaGVyIHN0YXJ0aW5nIHdpdGggaXYiCiAgICBdLAogICAgIm1jcnlwdF9jZmIiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfY2ZiKGludCBjaXBoZXIsIHN0cmluZyBrZXksIHN0cmluZyBkYXRhLCBpbnQgbW9kZSwgc3RyaW5nIGl2KSIsCiAgICAgICAgIkNGQiBjcnlwdC9kZWNyeXB0IGRhdGEgdXNpbmcga2V5IGtleSB3aXRoIGNpcGhlciBjaXBoZXIgc3RhcnRpbmcgd2l0aCBpdiIKICAgIF0sCiAgICAibWNyeXB0X2NyZWF0ZV9pdiI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9jcmVhdGVfaXYoaW50IHNpemUsIGludCBzb3VyY2UpIiwKICAgICAgICAiQ3JlYXRlIGFuIGluaXRpYWxpemF0aW9uIHZlY3RvciAoSVYpIgogICAgXSwKICAgICJtY3J5cHRfZGVjcnlwdCI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9kZWNyeXB0KHN0cmluZyBjaXBoZXIsIHN0cmluZyBrZXksIHN0cmluZyBkYXRhLCBzdHJpbmcgbW9kZSwgc3RyaW5nIGl2KSIsCiAgICAgICAgIk9GQiBjcnlwdC9kZWNyeXB0IGRhdGEgdXNpbmcga2V5IGtleSB3aXRoIGNpcGhlciBjaXBoZXIgc3RhcnRpbmcgd2l0aCBpdiIKICAgIF0sCiAgICAibWNyeXB0X2VjYiI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9lY2IoaW50IGNpcGhlciwgc3RyaW5nIGtleSwgc3RyaW5nIGRhdGEsIGludCBtb2RlLCBzdHJpbmcgaXYpIiwKICAgICAgICAiRUNCIGNyeXB0L2RlY3J5cHQgZGF0YSB1c2luZyBrZXkga2V5IHdpdGggY2lwaGVyIGNpcGhlciBzdGFydGluZyB3aXRoIGl2IgogICAgXSwKICAgICJtY3J5cHRfZW5jX2dldF9hbGdvcml0aG1zX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfZW5jX2dldF9hbGdvcml0aG1zX25hbWUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZCBieSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X2VuY19nZXRfYmxvY2tfc2l6ZSI6IFsKICAgICAgICAiaW50IG1jcnlwdF9lbmNfZ2V0X2Jsb2NrX3NpemUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyIHNwZWNpZmllZCBieSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X2VuY19nZXRfaXZfc2l6ZSI6IFsKICAgICAgICAiaW50IG1jcnlwdF9lbmNfZ2V0X2l2X3NpemUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgSVYgaW4gYnl0ZXMgb2YgdGhlIGFsZ29yaXRobSBzcGVjaWZpZWQgYnkgdGhlIGRlc2NyaXB0b3IgdGQiCiAgICBdLAogICAgIm1jcnlwdF9lbmNfZ2V0X2tleV9zaXplIjogWwogICAgICAgICJpbnQgbWNyeXB0X2VuY19nZXRfa2V5X3NpemUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbWF4aW11bSBzdXBwb3J0ZWQga2V5IHNpemUgaW4gYnl0ZXMgb2YgdGhlIGFsZ29yaXRobSBzcGVjaWZpZWQgYnkgdGhlIGRlc2NyaXB0b3IgdGQiCiAgICBdLAogICAgIm1jcnlwdF9lbmNfZ2V0X21vZGVzX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfZW5jX2dldF9tb2Rlc19uYW1lKHJlc291cmNlIHRkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIG1vZGUgc3BlY2lmaWVkIGJ5IHRoZSBkZXNjcmlwdG9yIHRkIgogICAgXSwKICAgICJtY3J5cHRfZW5jX2dldF9zdXBwb3J0ZWRfa2V5X3NpemVzIjogWwogICAgICAgICJhcnJheSBtY3J5cHRfZW5jX2dldF9zdXBwb3J0ZWRfa2V5X3NpemVzKHJlc291cmNlIHRkKSIsCiAgICAgICAgIlRoaXMgZnVuY3Rpb24gZGVjcnlwdHMgdGhlIGNyeXB0dGV4dCIKICAgIF0sCiAgICAibWNyeXB0X2VuY19pc19ibG9ja19hbGdvcml0aG0iOiBbCiAgICAgICAgImJvb2wgbWNyeXB0X2VuY19pc19ibG9ja19hbGdvcml0aG0ocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyBUUlVFIGlmIHRoZSBhbHJvZ2l0aG0gaXMgYSBibG9jayBhbGdvcml0aG1zIgogICAgXSwKICAgICJtY3J5cHRfZW5jX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlIjogWwogICAgICAgICJib29sIG1jcnlwdF9lbmNfaXNfYmxvY2tfYWxnb3JpdGhtX21vZGUocmVzb3VyY2UgdGQpIiwKICAgICAgICAiUmV0dXJucyBUUlVFIGlmIHRoZSBtb2RlIGlzIGZvciB1c2Ugd2l0aCBibG9jayBhbGdvcml0aG1zIgogICAgXSwKICAgICJtY3J5cHRfZW5jX2lzX2Jsb2NrX21vZGUiOiBbCiAgICAgICAgImJvb2wgbWNyeXB0X2VuY19pc19ibG9ja19tb2RlKHJlc291cmNlIHRkKSIsCiAgICAgICAgIlJldHVybnMgVFJVRSBpZiB0aGUgbW9kZSBvdXRwdXRzIGJsb2NrcyIKICAgIF0sCiAgICAibWNyeXB0X2VuY19zZWxmX3Rlc3QiOiBbCiAgICAgICAgImludCBtY3J5cHRfZW5jX3NlbGZfdGVzdChyZXNvdXJjZSB0ZCkiLAogICAgICAgICJUaGlzIGZ1bmN0aW9uIHJ1bnMgdGhlIHNlbGYgdGVzdCBvbiB0aGUgYWxnb3JpdGhtIHNwZWNpZmllZCBieSB0aGUgZGVzY3JpcHRvciB0ZCIKICAgIF0sCiAgICAibWNyeXB0X2VuY3J5cHQiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfZW5jcnlwdChzdHJpbmcgY2lwaGVyLCBzdHJpbmcga2V5LCBzdHJpbmcgZGF0YSwgc3RyaW5nIG1vZGUsIHN0cmluZyBpdikiLAogICAgICAgICJPRkIgY3J5cHQvZGVjcnlwdCBkYXRhIHVzaW5nIGtleSBrZXkgd2l0aCBjaXBoZXIgY2lwaGVyIHN0YXJ0aW5nIHdpdGggaXYiCiAgICBdLAogICAgIm1jcnlwdF9nZW5lcmljIjogWwogICAgICAgICJzdHJpbmcgbWNyeXB0X2dlbmVyaWMocmVzb3VyY2UgdGQsIHN0cmluZyBkYXRhKSIsCiAgICAgICAgIlRoaXMgZnVuY3Rpb24gZW5jcnlwdHMgdGhlIHBsYWludGV4dCIKICAgIF0sCiAgICAibWNyeXB0X2dlbmVyaWNfZGVpbml0IjogWwogICAgICAgICJib29sIG1jcnlwdF9nZW5lcmljX2RlaW5pdChyZXNvdXJjZSB0ZCkiLAogICAgICAgICJUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgZW5jcnlwdCBzcGVjaWZpZWQgYnkgdGhlIGRlc2NyaXB0b3IgdGQiCiAgICBdLAogICAgIm1jcnlwdF9nZW5lcmljX2luaXQiOiBbCiAgICAgICAgImludCBtY3J5cHRfZ2VuZXJpY19pbml0KHJlc291cmNlIHRkLCBzdHJpbmcga2V5LCBzdHJpbmcgaXYpIiwKICAgICAgICAiVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhbGwgYnVmZmVycyBmb3IgdGhlIHNwZWNpZmljIG1vZHVsZSIKICAgIF0sCiAgICAibWNyeXB0X2dldF9ibG9ja19zaXplIjogWwogICAgICAgICJpbnQgbWNyeXB0X2dldF9ibG9ja19zaXplKHN0cmluZyBjaXBoZXIsIHN0cmluZyBtb2R1bGUpIiwKICAgICAgICAiR2V0IHRoZSBrZXkgc2l6ZSBvZiBjaXBoZXIiCiAgICBdLAogICAgIm1jcnlwdF9nZXRfY2lwaGVyX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBtY3J5cHRfZ2V0X2NpcGhlcl9uYW1lKHN0cmluZyBjaXBoZXIpIiwKICAgICAgICAiR2V0IHRoZSBrZXkgc2l6ZSBvZiBjaXBoZXIiCiAgICBdLAogICAgIm1jcnlwdF9nZXRfaXZfc2l6ZSI6IFsKICAgICAgICAiaW50IG1jcnlwdF9nZXRfaXZfc2l6ZShzdHJpbmcgY2lwaGVyLCBzdHJpbmcgbW9kdWxlKSIsCiAgICAgICAgIkdldCB0aGUgSVYgc2l6ZSBvZiBjaXBoZXIgKFVzdWFsbHkgdGhlIHNhbWUgYXMgdGhlIGJsb2Nrc2l6ZSkiCiAgICBdLAogICAgIm1jcnlwdF9nZXRfa2V5X3NpemUiOiBbCiAgICAgICAgImludCBtY3J5cHRfZ2V0X2tleV9zaXplKHN0cmluZyBjaXBoZXIsIHN0cmluZyBtb2R1bGUpIiwKICAgICAgICAiR2V0IHRoZSBrZXkgc2l6ZSBvZiBjaXBoZXIiCiAgICBdLAogICAgIm1jcnlwdF9saXN0X2FsZ29yaXRobXMiOiBbCiAgICAgICAgImFycmF5IG1jcnlwdF9saXN0X2FsZ29yaXRobXMoW3N0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJMaXN0IGFsbCBhbGdvcml0aG1zIGluIFwibW9kdWxlX2RpclwiIgogICAgXSwKICAgICJtY3J5cHRfbGlzdF9tb2RlcyI6IFsKICAgICAgICAiYXJyYXkgbWNyeXB0X2xpc3RfbW9kZXMoW3N0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJMaXN0IGFsbCBtb2RlcyBcIm1vZHVsZV9kaXJcIiIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfbW9kdWxlX2Nsb3NlKHJlc291cmNlIHRkKSIsCiAgICAgICAgIkZyZWUgdGhlIGRlc2NyaXB0b3IgdGQiCiAgICBdLAogICAgIm1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fYmxvY2tfc2l6ZSI6IFsKICAgICAgICAiaW50IG1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fYmxvY2tfc2l6ZShzdHJpbmcgYWxnb3JpdGhtIFssIHN0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBibG9jayBzaXplIG9mIHRoZSBhbGdvcml0aG0iCiAgICBdLAogICAgIm1jcnlwdF9tb2R1bGVfZ2V0X2FsZ29fa2V5X3NpemUiOiBbCiAgICAgICAgImludCBtY3J5cHRfbW9kdWxlX2dldF9hbGdvX2tleV9zaXplKHN0cmluZyBhbGdvcml0aG0gWywgc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG1heGltdW0gc3VwcG9ydGVkIGtleSBzaXplIG9mIHRoZSBhbGdvcml0aG0iCiAgICBdLAogICAgIm1jcnlwdF9tb2R1bGVfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXMiOiBbCiAgICAgICAgImFycmF5IG1jcnlwdF9tb2R1bGVfZ2V0X3N1cHBvcnRlZF9rZXlfc2l6ZXMoc3RyaW5nIGFsZ29yaXRobSBbLCBzdHJpbmcgbGliX2Rpcl0pIiwKICAgICAgICAiVGhpcyBmdW5jdGlvbiBkZWNyeXB0cyB0aGUgY3J5cHR0ZXh0IgogICAgXSwKICAgICJtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobSI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobShzdHJpbmcgYWxnb3JpdGhtIFssIHN0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJSZXR1cm5zIFRSVUUgaWYgdGhlIGFsZ29yaXRobSBpcyBhIGJsb2NrIGFsZ29yaXRobSIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9pc19ibG9ja19hbGdvcml0aG1fbW9kZSI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX2FsZ29yaXRobV9tb2RlKHN0cmluZyBtb2RlIFssIHN0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJSZXR1cm5zIFRSVUUgaWYgdGhlIG1vZGUgaXMgZm9yIHVzZSB3aXRoIGJsb2NrIGFsZ29yaXRobXMiCiAgICBdLAogICAgIm1jcnlwdF9tb2R1bGVfaXNfYmxvY2tfbW9kZSI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfbW9kdWxlX2lzX2Jsb2NrX21vZGUoc3RyaW5nIG1vZGUgWywgc3RyaW5nIGxpYl9kaXJdKSIsCiAgICAgICAgIlJldHVybnMgVFJVRSBpZiB0aGUgbW9kZSBvdXRwdXRzIGJsb2NrcyBvZiBieXRlcyIKICAgIF0sCiAgICAibWNyeXB0X21vZHVsZV9vcGVuIjogWwogICAgICAgICJyZXNvdXJjZSBtY3J5cHRfbW9kdWxlX29wZW4oc3RyaW5nIGNpcGhlciwgc3RyaW5nIGNpcGhlcl9kaXJlY3RvcnksIHN0cmluZyBtb2RlLCBzdHJpbmcgbW9kZV9kaXJlY3RvcnkpIiwKICAgICAgICAiT3BlbnMgdGhlIG1vZHVsZSBvZiB0aGUgYWxnb3JpdGhtIGFuZCB0aGUgbW9kZSB0byBiZSB1c2VkIgogICAgXSwKICAgICJtY3J5cHRfbW9kdWxlX3NlbGZfdGVzdCI6IFsKICAgICAgICAiYm9vbCBtY3J5cHRfbW9kdWxlX3NlbGZfdGVzdChzdHJpbmcgYWxnb3JpdGhtIFssIHN0cmluZyBsaWJfZGlyXSkiLAogICAgICAgICJEb2VzIGEgc2VsZiB0ZXN0IG9mIHRoZSBtb2R1bGUgXCJtb2R1bGVcIiIKICAgIF0sCiAgICAibWNyeXB0X29mYiI6IFsKICAgICAgICAic3RyaW5nIG1jcnlwdF9vZmIoaW50IGNpcGhlciwgc3RyaW5nIGtleSwgc3RyaW5nIGRhdGEsIGludCBtb2RlLCBzdHJpbmcgaXYpIiwKICAgICAgICAiT0ZCIGNyeXB0L2RlY3J5cHQgZGF0YSB1c2luZyBrZXkga2V5IHdpdGggY2lwaGVyIGNpcGhlciBzdGFydGluZyB3aXRoIGl2IgogICAgXSwKICAgICJtZDUiOiBbCiAgICAgICAgInN0cmluZyBtZDUoc3RyaW5nIHN0ciwgWyBib29sIHJhd19vdXRwdXRdKSIsCiAgICAgICAgIkNhbGN1bGF0ZSB0aGUgbWQ1IGhhc2ggb2YgYSBzdHJpbmciCiAgICBdLAogICAgIm1kNV9maWxlIjogWwogICAgICAgICJzdHJpbmcgbWQ1X2ZpbGUoc3RyaW5nIGZpbGVuYW1lIFssIGJvb2wgcmF3X291dHB1dF0pIiwKICAgICAgICAiQ2FsY3VsYXRlIHRoZSBtZDUgaGFzaCBvZiBnaXZlbiBmaWxlbmFtZSIKICAgIF0sCiAgICAibWRlY3J5cHRfZ2VuZXJpYyI6IFsKICAgICAgICAic3RyaW5nIG1kZWNyeXB0X2dlbmVyaWMocmVzb3VyY2UgdGQsIHN0cmluZyBkYXRhKSIsCiAgICAgICAgIlRoaXMgZnVuY3Rpb24gZGVjcnlwdHMgdGhlIHBsYWludGV4dCIKICAgIF0sCiAgICAibWVtb3J5X2dldF9wZWFrX3VzYWdlIjogWwogICAgICAgICJpbnQgbWVtb3J5X2dldF9wZWFrX3VzYWdlKFtyZWFsX3VzYWdlXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBwZWFrIGFsbG9jYXRlZCBieSBQSFAgbWVtb3J5IgogICAgXSwKICAgICJtZW1vcnlfZ2V0X3VzYWdlIjogWwogICAgICAgICJpbnQgbWVtb3J5X2dldF91c2FnZShbcmVhbF91c2FnZV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgYWxsb2NhdGVkIGJ5IFBIUCBtZW1vcnkiCiAgICBdLAogICAgIm1ldGFwaG9uZSI6IFsKICAgICAgICAic3RyaW5nIG1ldGFwaG9uZShzdHJpbmcgdGV4dFssIGludCBwaG9uZXNdKSIsCiAgICAgICAgIkJyZWFrIGVuZ2xpc2ggcGhyYXNlcyBkb3duIGludG8gdGhlaXIgcGhvbmVtZXMiCiAgICBdLAogICAgIm1ldGhvZF9leGlzdHMiOiBbCiAgICAgICAgImJvb2wgbWV0aG9kX2V4aXN0cyhvYmplY3Qgb2JqZWN0LCBzdHJpbmcgbWV0aG9kKSIsCiAgICAgICAgIkNoZWNrcyBpZiB0aGUgY2xhc3MgbWV0aG9kIGV4aXN0cyIKICAgIF0sCiAgICAibWhhc2giOiBbCiAgICAgICAgInN0cmluZyBtaGFzaChpbnQgaGFzaCwgc3RyaW5nIGRhdGEgWywgc3RyaW5nIGtleV0pIiwKICAgICAgICAiSGFzaCBkYXRhIHdpdGggaGFzaCIKICAgIF0sCiAgICAibWhhc2hfY291bnQiOiBbCiAgICAgICAgImludCBtaGFzaF9jb3VudCh2b2lkKSIsCiAgICAgICAgIkdldHMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgaGFzaGVzIgogICAgXSwKICAgICJtaGFzaF9nZXRfYmxvY2tfc2l6ZSI6IFsKICAgICAgICAiaW50IG1oYXNoX2dldF9ibG9ja19zaXplKGludCBoYXNoKSIsCiAgICAgICAgIkdldHMgdGhlIGJsb2NrIHNpemUgb2YgaGFzaCIKICAgIF0sCiAgICAibWhhc2hfZ2V0X2hhc2hfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG1oYXNoX2dldF9oYXNoX25hbWUoaW50IGhhc2gpIiwKICAgICAgICAiR2V0cyB0aGUgbmFtZSBvZiBoYXNoIgogICAgXSwKICAgICJtaGFzaF9rZXlnZW5fczJrIjogWwogICAgICAgICJzdHJpbmcgbWhhc2hfa2V5Z2VuX3MyayhpbnQgaGFzaCwgc3RyaW5nIGlucHV0X3Bhc3N3b3JkLCBzdHJpbmcgc2FsdCwgaW50IGJ5dGVzKSIsCiAgICAgICAgIkdlbmVyYXRlcyBhIGtleSB1c2luZyBoYXNoIGZ1bmN0aW9ucyIKICAgIF0sCiAgICAibWljcm90aW1lIjogWwogICAgICAgICJtaXhlZCBtaWNyb3RpbWUoW2Jvb2wgZ2V0X2FzX2Zsb2F0XSkiLAogICAgICAgICJSZXR1cm5zIGVpdGhlciBhIHN0cmluZyBvciBhIGZsb2F0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMiCiAgICBdLAogICAgIm1pbWVfY29udGVudF90eXBlIjogWwogICAgICAgICJzdHJpbmcgbWltZV9jb250ZW50X3R5cGUoc3RyaW5nIGZpbGVuYW1lfHJlc291cmNlIHN0cmVhbSkiLAogICAgICAgICJSZXR1cm4gY29udGVudC10eXBlIGZvciBmaWxlIgogICAgXSwKICAgICJtaW4iOiBbCiAgICAgICAgIm1peGVkIG1pbihtaXhlZCBhcmcxIFssIG1peGVkIGFyZzIgWywgbWl4ZWQgLi4uXV0pIiwKICAgICAgICAiUmV0dXJuIHRoZSBsb3dlc3QgdmFsdWUgaW4gYW4gYXJyYXkgb3IgYSBzZXJpZXMgb2YgYXJndW1lbnRzIgogICAgXSwKICAgICJta2RpciI6IFsKICAgICAgICAiYm9vbCBta2RpcihzdHJpbmcgcGF0aG5hbWUgWywgaW50IG1vZGUgWywgYm9vbCByZWN1cnNpdmUgWywgcmVzb3VyY2UgY29udGV4dF1dXSkiLAogICAgICAgICJDcmVhdGUgYSBkaXJlY3RvcnkiCiAgICBdLAogICAgIm1rdGltZSI6IFsKICAgICAgICAiaW50IG1rdGltZShbaW50IGhvdXIgWywgaW50IG1pbiBbLCBpbnQgc2VjIFssIGludCBtb24gWywgaW50IGRheSBbLCBpbnQgeWVhcl1dXV1dXSkiLAogICAgICAgICJHZXQgVU5JWCB0aW1lc3RhbXAgZm9yIGEgZGF0ZSIKICAgIF0sCiAgICAibW9uZXlfZm9ybWF0IjogWwogICAgICAgICJzdHJpbmcgbW9uZXlfZm9ybWF0KHN0cmluZyBmb3JtYXQgLCBmbG9hdCB2YWx1ZSkiLAogICAgICAgICJDb252ZXJ0IG1vbmV0YXJ5IHZhbHVlKHMpIHRvIHN0cmluZyIKICAgIF0sCiAgICAibW92ZV91cGxvYWRlZF9maWxlIjogWwogICAgICAgICJib29sIG1vdmVfdXBsb2FkZWRfZmlsZShzdHJpbmcgcGF0aCwgc3RyaW5nIG5ld19wYXRoKSIsCiAgICAgICAgIk1vdmUgYSBmaWxlIGlmIGFuZCBvbmx5IGlmIGl0IHdhcyBjcmVhdGVkIGJ5IGFuIHVwbG9hZCIKICAgIF0sCiAgICAibXNnX2dldF9xdWV1ZSI6IFsKICAgICAgICAicmVzb3VyY2UgbXNnX2dldF9xdWV1ZShpbnQga2V5IFssIGludCBwZXJtc10pIiwKICAgICAgICAiQXR0YWNoIHRvIGEgbWVzc2FnZSBxdWV1ZSIKICAgIF0sCiAgICAibXNnX3F1ZXVlX2V4aXN0cyI6IFsKICAgICAgICAiYm9vbCBtc2dfcXVldWVfZXhpc3RzKGludCBrZXkpIiwKICAgICAgICAiQ2hlY2sgd2hldGhlciBhIG1lc3NhZ2UgcXVldWUgZXhpc3RzIgogICAgXSwKICAgICJtc2dfcmVjZWl2ZSI6IFsKICAgICAgICAibWl4ZWQgbXNnX3JlY2VpdmUocmVzb3VyY2UgcXVldWUsIGludCBkZXNpcmVkbXNndHlwZSwgaW50ICZtc2d0eXBlLCBpbnQgbWF4c2l6ZSwgbWl4ZWQgbWVzc2FnZSBbLCBib29sIHVuc2VyaWFsaXplPXRydWUgWywgaW50IGZsYWdzPTAgWywgaW50IGVycm9yY29kZV1dXSkiLAogICAgICAgICJTZW5kIGEgbWVzc2FnZSBvZiB0eXBlIG1zZ3R5cGUgKG11c3QgYmUgPiAwKSB0byBhIG1lc3NhZ2UgcXVldWUiCiAgICBdLAogICAgIm1zZ19yZW1vdmVfcXVldWUiOiBbCiAgICAgICAgImJvb2wgbXNnX3JlbW92ZV9xdWV1ZShyZXNvdXJjZSBxdWV1ZSkiLAogICAgICAgICJEZXN0cm95IHRoZSBxdWV1ZSIKICAgIF0sCiAgICAibXNnX3NlbmQiOiBbCiAgICAgICAgImJvb2wgbXNnX3NlbmQocmVzb3VyY2UgcXVldWUsIGludCBtc2d0eXBlLCBtaXhlZCBtZXNzYWdlIFssIGJvb2wgc2VyaWFsaXplPXRydWUgWywgYm9vbCBibG9ja2luZz10cnVlIFssIGludCBlcnJvcmNvZGVdXV0pIiwKICAgICAgICAiU2VuZCBhIG1lc3NhZ2Ugb2YgdHlwZSBtc2d0eXBlIChtdXN0IGJlID4gMCkgdG8gYSBtZXNzYWdlIHF1ZXVlIgogICAgXSwKICAgICJtc2dfc2V0X3F1ZXVlIjogWwogICAgICAgICJib29sIG1zZ19zZXRfcXVldWUocmVzb3VyY2UgcXVldWUsIGFycmF5IGRhdGEpIiwKICAgICAgICAiU2V0IGluZm9ybWF0aW9uIGZvciBhIG1lc3NhZ2UgcXVldWUiCiAgICBdLAogICAgIm1zZ19zdGF0X3F1ZXVlIjogWwogICAgICAgICJhcnJheSBtc2dfc3RhdF9xdWV1ZShyZXNvdXJjZSBxdWV1ZSkiLAogICAgICAgICJSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbWVzc2FnZSBxdWV1ZSIKICAgIF0sCiAgICAibXNnZm10X2NyZWF0ZSI6IFsKICAgICAgICAiTWVzc2FnZUZvcm1hdHRlciBtc2dmbXRfY3JlYXRlKCBzdHJpbmcgJGxvY2FsZSwgc3RyaW5nICRwYXR0ZXJuICkiLAogICAgICAgICIqIENyZWF0ZSBmb3JtYXR0ZXIuIgogICAgXSwKICAgICJtc2dmbXRfZm9ybWF0IjogWwogICAgICAgICJtaXhlZCBtc2dmbXRfZm9ybWF0KCBNZXNzYWdlRm9ybWF0dGVyICRuZiwgYXJyYXkgJGFyZ3MgKSIsCiAgICAgICAgIiogRm9ybWF0IGEgbWVzc2FnZS4iCiAgICBdLAogICAgIm1zZ2ZtdF9mb3JtYXRfbWVzc2FnZSI6IFsKICAgICAgICAibWl4ZWQgbXNnZm10X2Zvcm1hdF9tZXNzYWdlKCBzdHJpbmcgJGxvY2FsZSwgc3RyaW5nICRwYXR0ZXJuLCBhcnJheSAkYXJncyApIiwKICAgICAgICAiKiBGb3JtYXQgYSBtZXNzYWdlLiIKICAgIF0sCiAgICAibXNnZm10X2dldF9lcnJvcl9jb2RlIjogWwogICAgICAgICJpbnQgbXNnZm10X2dldF9lcnJvcl9jb2RlKCBNZXNzYWdlRm9ybWF0dGVyICRuZiApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyJ3MgbGFzdCBlcnJvciBjb2RlLiIKICAgIF0sCiAgICAibXNnZm10X2dldF9lcnJvcl9tZXNzYWdlIjogWwogICAgICAgICJzdHJpbmcgbXNnZm10X2dldF9lcnJvcl9tZXNzYWdlKCBNZXNzYWdlRm9ybWF0dGVyICRjb2xsICkiLAogICAgICAgICIqIEdldCB0ZXh0IGRlc2NyaXB0aW9uIGZvciBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJtc2dmbXRfZ2V0X2xvY2FsZSI6IFsKICAgICAgICAic3RyaW5nIG1zZ2ZtdF9nZXRfbG9jYWxlKE1lc3NhZ2VGb3JtYXR0ZXIgJG1mKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBsb2NhbGUuIgogICAgXSwKICAgICJtc2dmbXRfZ2V0X3BhdHRlcm4iOiBbCiAgICAgICAgInN0cmluZyBtc2dmbXRfZ2V0X3BhdHRlcm4oIE1lc3NhZ2VGb3JtYXR0ZXIgJG1mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgcGF0dGVybi4iCiAgICBdLAogICAgIm1zZ2ZtdF9wYXJzZSI6IFsKICAgICAgICAiYXJyYXkgbXNnZm10X3BhcnNlKCBNZXNzYWdlRm9ybWF0dGVyICRuZiwgc3RyaW5nICRzb3VyY2UgKSIsCiAgICAgICAgIiogUGFyc2UgYSBtZXNzYWdlLiIKICAgIF0sCiAgICAibXNnZm10X3NldF9wYXR0ZXJuIjogWwogICAgICAgICJib29sIG1zZ2ZtdF9zZXRfcGF0dGVybiggTWVzc2FnZUZvcm1hdHRlciAkbWYsIHN0cmluZyAkcGF0dGVybiApIiwKICAgICAgICAiKiBTZXQgZm9ybWF0dGVyIHBhdHRlcm4uIgogICAgXSwKICAgICJtc3NxbF9iaW5kIjogWwogICAgICAgICJib29sIG1zc3FsX2JpbmQocmVzb3VyY2Ugc3RtdCwgc3RyaW5nIHBhcmFtX25hbWUsIG1peGVkIHZhciwgaW50IHR5cGUgWywgYm9vbCBpc19vdXRwdXQgWywgYm9vbCBpc19udWxsIFssIGludCBtYXhsZW5dXV0pIiwKICAgICAgICAiQWRkcyBhIHBhcmFtZXRlciB0byBhIHN0b3JlZCBwcm9jZWR1cmUgb3IgYSByZW1vdGUgc3RvcmVkIHByb2NlZHVyZSIKICAgIF0sCiAgICAibXNzcWxfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgbXNzcWxfY2xvc2UoW3Jlc291cmNlIGNvbm5faWRdKSIsCiAgICAgICAgIkNsb3NlcyBhIGNvbm5lY3Rpb24gdG8gYSBNUy1TUUwgc2VydmVyIgogICAgXSwKICAgICJtc3NxbF9jb25uZWN0IjogWwogICAgICAgICJpbnQgbXNzcWxfY29ubmVjdChbc3RyaW5nIHNlcnZlcm5hbWUgWywgc3RyaW5nIHVzZXJuYW1lIFssIHN0cmluZyBwYXNzd29yZCBbLCBib29sIG5ld19saW5rXV1dXSkiLAogICAgICAgICJFc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gdG8gYSBNUy1TUUwgc2VydmVyIgogICAgXSwKICAgICJtc3NxbF9kYXRhX3NlZWsiOiBbCiAgICAgICAgImJvb2wgbXNzcWxfZGF0YV9zZWVrKHJlc291cmNlIHJlc3VsdF9pZCwgaW50IG9mZnNldCkiLAogICAgICAgICJNb3ZlcyB0aGUgaW50ZXJuYWwgcm93IHBvaW50ZXIgb2YgdGhlIE1TLVNRTCByZXN1bHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgcmVzdWx0IGlkZW50aWZpZXIgdG8gcG9pbnRlciB0byB0aGUgc3BlY2lmaWVkIHJvdyBudW1iZXIiCiAgICBdLAogICAgIm1zc3FsX2V4ZWN1dGUiOiBbCiAgICAgICAgIm1peGVkIG1zc3FsX2V4ZWN1dGUocmVzb3VyY2Ugc3RtdCBbLCBib29sIHNraXBfcmVzdWx0cyA9IGZhbHNlXSkiLAogICAgICAgICJFeGVjdXRlcyBhIHN0b3JlZCBwcm9jZWR1cmUgb24gYSBNUy1TUUwgc2VydmVyIGRhdGFiYXNlIgogICAgXSwKICAgICJtc3NxbF9mZXRjaF9hcnJheSI6IFsKICAgICAgICAiYXJyYXkgbXNzcWxfZmV0Y2hfYXJyYXkocmVzb3VyY2UgcmVzdWx0X2lkIFssIGludCByZXN1bHRfdHlwZV0pIiwKICAgICAgICAiUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiB0aGUgY3VycmVudCByb3cgaW4gdGhlIHJlc3VsdCBzZXQgc3BlY2lmaWVkIGJ5IHJlc3VsdF9pZCIKICAgIF0sCiAgICAibXNzcWxfZmV0Y2hfYXNzb2MiOiBbCiAgICAgICAgImFycmF5IG1zc3FsX2ZldGNoX2Fzc29jKHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHRoZSBjdXJyZW50IHJvdyBpbiB0aGUgcmVzdWx0IHNldCBzcGVjaWZpZWQgYnkgcmVzdWx0X2lkIgogICAgXSwKICAgICJtc3NxbF9mZXRjaF9iYXRjaCI6IFsKICAgICAgICAiaW50IG1zc3FsX2ZldGNoX2JhdGNoKHJlc291cmNlIHJlc3VsdF9pbmRleCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuZXh0IGJhdGNoIG9mIHJlY29yZHMiCiAgICBdLAogICAgIm1zc3FsX2ZldGNoX2ZpZWxkIjogWwogICAgICAgICJvYmplY3QgbXNzcWxfZmV0Y2hfZmllbGQocmVzb3VyY2UgcmVzdWx0X2lkIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkdldHMgaW5mb3JtYXRpb24gYWJvdXQgY2VydGFpbiBmaWVsZHMgaW4gYSBxdWVyeSByZXN1bHQiCiAgICBdLAogICAgIm1zc3FsX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IG1zc3FsX2ZldGNoX29iamVjdChyZXNvdXJjZSByZXN1bHRfaWQpIiwKICAgICAgICAiUmV0dXJucyBhIHBzZXVkby1vYmplY3Qgb2YgdGhlIGN1cnJlbnQgcm93IGluIHRoZSByZXN1bHQgc2V0IHNwZWNpZmllZCBieSByZXN1bHRfaWQiCiAgICBdLAogICAgIm1zc3FsX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYXJyYXkgbXNzcWxfZmV0Y2hfcm93KHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBjdXJyZW50IHJvdyBpbiB0aGUgcmVzdWx0IHNldCBzcGVjaWZpZWQgYnkgcmVzdWx0X2lkIgogICAgXSwKICAgICJtc3NxbF9maWVsZF9sZW5ndGgiOiBbCiAgICAgICAgImludCBtc3NxbF9maWVsZF9sZW5ndGgocmVzb3VyY2UgcmVzdWx0X2lkIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkdldCB0aGUgbGVuZ3RoIG9mIGEgTVMtU1FMIGZpZWxkIgogICAgXSwKICAgICJtc3NxbF9maWVsZF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgbXNzcWxfZmllbGRfbmFtZShyZXNvdXJjZSByZXN1bHRfaWQgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmllbGQgZ2l2ZW4gYnkgb2Zmc2V0IGluIHRoZSByZXN1bHQgc2V0IGdpdmVuIGJ5IHJlc3VsdF9pZCIKICAgIF0sCiAgICAibXNzcWxfZmllbGRfc2VlayI6IFsKICAgICAgICAiYm9vbCBtc3NxbF9maWVsZF9zZWVrKHJlc291cmNlIHJlc3VsdF9pZCwgaW50IG9mZnNldCkiLAogICAgICAgICJTZWVrcyB0byB0aGUgc3BlY2lmaWVkIGZpZWxkIG9mZnNldCIKICAgIF0sCiAgICAibXNzcWxfZmllbGRfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIG1zc3FsX2ZpZWxkX3R5cGUocmVzb3VyY2UgcmVzdWx0X2lkIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHR5cGUgb2YgYSBmaWVsZCIKICAgIF0sCiAgICAibXNzcWxfZnJlZV9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgbXNzcWxfZnJlZV9yZXN1bHQocmVzb3VyY2UgcmVzdWx0X2luZGV4KSIsCiAgICAgICAgIkZyZWUgYSBNUy1TUUwgcmVzdWx0IGluZGV4IgogICAgXSwKICAgICJtc3NxbF9mcmVlX3N0YXRlbWVudCI6IFsKICAgICAgICAiYm9vbCBtc3NxbF9mcmVlX3N0YXRlbWVudChyZXNvdXJjZSByZXN1bHRfaW5kZXgpIiwKICAgICAgICAiRnJlZSBhIE1TLVNRTCBzdGF0ZW1lbnQgaW5kZXgiCiAgICBdLAogICAgIm1zc3FsX2dldF9sYXN0X21lc3NhZ2UiOiBbCiAgICAgICAgInN0cmluZyBtc3NxbF9nZXRfbGFzdF9tZXNzYWdlKHZvaWQpIiwKICAgICAgICAiR2V0cyB0aGUgbGFzdCBtZXNzYWdlIGZyb20gdGhlIE1TLVNRTCBzZXJ2ZXIiCiAgICBdLAogICAgIm1zc3FsX2d1aWRfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgbXNzcWxfZ3VpZF9zdHJpbmcoc3RyaW5nIGJpbmFyeSBbLGJvb2wgc2hvcnRfZm9ybWF0XSkiLAogICAgICAgICJDb252ZXJ0cyBhIDE2IGJ5dGUgYmluYXJ5IEdVSUQgdG8gYSBzdHJpbmciCiAgICBdLAogICAgIm1zc3FsX2luaXQiOiBbCiAgICAgICAgImludCBtc3NxbF9pbml0KHN0cmluZyBzcF9uYW1lIFssIHJlc291cmNlIGNvbm5faWRdKSIsCiAgICAgICAgIkluaXRpYWxpemVzIGEgc3RvcmVkIHByb2NlZHVyZSBvciBhIHJlbW90ZSBzdG9yZWQgcHJvY2VkdXJlIgogICAgXSwKICAgICJtc3NxbF9taW5fZXJyb3Jfc2V2ZXJpdHkiOiBbCiAgICAgICAgInZvaWQgbXNzcWxfbWluX2Vycm9yX3NldmVyaXR5KGludCBzZXZlcml0eSkiLAogICAgICAgICJTZXRzIHRoZSBsb3dlciBlcnJvciBzZXZlcml0eSIKICAgIF0sCiAgICAibXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHkiOiBbCiAgICAgICAgInZvaWQgbXNzcWxfbWluX21lc3NhZ2Vfc2V2ZXJpdHkoaW50IHNldmVyaXR5KSIsCiAgICAgICAgIlNldHMgdGhlIGxvd2VyIG1lc3NhZ2Ugc2V2ZXJpdHkiCiAgICBdLAogICAgIm1zc3FsX25leHRfcmVzdWx0IjogWwogICAgICAgICJib29sIG1zc3FsX25leHRfcmVzdWx0KHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJNb3ZlIHRoZSBpbnRlcm5hbCByZXN1bHQgcG9pbnRlciB0byB0aGUgbmV4dCByZXN1bHQiCiAgICBdLAogICAgIm1zc3FsX251bV9maWVsZHMiOiBbCiAgICAgICAgImludCBtc3NxbF9udW1fZmllbGRzKHJlc291cmNlIG1zc3FsX3Jlc3VsdF9pbmRleCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgZmllbGRzIGZldGNoZWQgaW4gZnJvbSB0aGUgcmVzdWx0IGlkIHNwZWNpZmllZCIKICAgIF0sCiAgICAibXNzcWxfbnVtX3Jvd3MiOiBbCiAgICAgICAgImludCBtc3NxbF9udW1fcm93cyhyZXNvdXJjZSBtc3NxbF9yZXN1bHRfaW5kZXgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3MgZmV0Y2hlZCBpbiBmcm9tIHRoZSByZXN1bHQgaWQgc3BlY2lmaWVkIgogICAgXSwKICAgICJtc3NxbF9wY29ubmVjdCI6IFsKICAgICAgICAiaW50IG1zc3FsX3Bjb25uZWN0KFtzdHJpbmcgc2VydmVybmFtZSBbLCBzdHJpbmcgdXNlcm5hbWUgWywgc3RyaW5nIHBhc3N3b3JkIFssIGJvb2wgbmV3X2xpbmtdXV1dKSIsCiAgICAgICAgIkVzdGFibGlzaGVzIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIHRvIGEgTVMtU1FMIHNlcnZlciIKICAgIF0sCiAgICAibXNzcWxfcXVlcnkiOiBbCiAgICAgICAgInJlc291cmNlIG1zc3FsX3F1ZXJ5KHN0cmluZyBxdWVyeSBbLCByZXNvdXJjZSBjb25uX2lkIFssIGludCBiYXRjaF9zaXplXV0pIiwKICAgICAgICAiUGVyZm9ybSBhbiBTUUwgcXVlcnkgb24gYSBNUy1TUUwgc2VydmVyIGRhdGFiYXNlIgogICAgXSwKICAgICJtc3NxbF9yZXN1bHQiOiBbCiAgICAgICAgInN0cmluZyBtc3NxbF9yZXN1bHQocmVzb3VyY2UgcmVzdWx0X2lkLCBpbnQgcm93LCBtaXhlZCBmaWVsZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBjb250ZW50cyBvZiBvbmUgY2VsbCBmcm9tIGEgTVMtU1FMIHJlc3VsdCBzZXQiCiAgICBdLAogICAgIm1zc3FsX3Jvd3NfYWZmZWN0ZWQiOiBbCiAgICAgICAgImludCBtc3NxbF9yb3dzX2FmZmVjdGVkKHJlc291cmNlIGNvbm5faWQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY29yZHMgYWZmZWN0ZWQgYnkgdGhlIHF1ZXJ5IgogICAgXSwKICAgICJtc3NxbF9zZWxlY3RfZGIiOiBbCiAgICAgICAgImJvb2wgbXNzcWxfc2VsZWN0X2RiKHN0cmluZyBkYXRhYmFzZV9uYW1lIFssIHJlc291cmNlIGNvbm5faWRdKSIsCiAgICAgICAgIlNlbGVjdCBhIE1TLVNRTCBkYXRhYmFzZSIKICAgIF0sCiAgICAibXRfZ2V0cmFuZG1heCI6IFsKICAgICAgICAiaW50IG10X2dldHJhbmRtYXgodm9pZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBtYXhpbXVtIHZhbHVlIGEgcmFuZG9tIG51bWJlciBmcm9tIE1lcnNlbm5lIFR3aXN0ZXIgY2FuIGhhdmUiCiAgICBdLAogICAgIm10X3JhbmQiOiBbCiAgICAgICAgImludCBtdF9yYW5kKFtpbnQgbWluLCBpbnQgbWF4XSkiLAogICAgICAgICJSZXR1cm5zIGEgcmFuZG9tIG51bWJlciBmcm9tIE1lcnNlbm5lIFR3aXN0ZXIiCiAgICBdLAogICAgIm10X3NyYW5kIjogWwogICAgICAgICJ2b2lkIG10X3NyYW5kKFtpbnQgc2VlZF0pIiwKICAgICAgICAiU2VlZHMgTWVyc2VubmUgVHdpc3RlciByYW5kb20gbnVtYmVyIGdlbmVyYXRvciIKICAgIF0sCiAgICAibXlzcWxfYWZmZWN0ZWRfcm93cyI6IFsKICAgICAgICAiaW50IG15c3FsX2FmZmVjdGVkX3Jvd3MoW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIkdldHMgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MgaW4gcHJldmlvdXMgTXlTUUwgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbF9jbGllbnRfZW5jb2RpbmciOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9jbGllbnRfZW5jb2RpbmcoW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHNldCBmb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgbXlzcWxfY2xvc2UoW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIkNsb3NlIGEgTXlTUUwgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxfY29ubmVjdChbc3RyaW5nIGhvc3RuYW1lWzpwb3J0XVs6L3BhdGgvdG8vc29ja2V0XSBbLCBzdHJpbmcgdXNlcm5hbWUgWywgc3RyaW5nIHBhc3N3b3JkIFssIGJvb2wgbmV3IFssIGludCBmbGFnc11dXV1dKSIsCiAgICAgICAgIk9wZW5zIGEgY29ubmVjdGlvbiB0byBhIE15U1FMIFNlcnZlciIKICAgIF0sCiAgICAibXlzcWxfY3JlYXRlX2RiIjogWwogICAgICAgICJib29sIG15c3FsX2NyZWF0ZV9kYihzdHJpbmcgZGF0YWJhc2VfbmFtZSBbLCBpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJDcmVhdGUgYSBNeVNRTCBkYXRhYmFzZSIKICAgIF0sCiAgICAibXlzcWxfZGF0YV9zZWVrIjogWwogICAgICAgICJib29sIG15c3FsX2RhdGFfc2VlayhyZXNvdXJjZSByZXN1bHQsIGludCByb3dfbnVtYmVyKSIsCiAgICAgICAgIk1vdmUgaW50ZXJuYWwgcmVzdWx0IHBvaW50ZXIiCiAgICBdLAogICAgIm15c3FsX2RiX3F1ZXJ5IjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF9kYl9xdWVyeShzdHJpbmcgZGF0YWJhc2VfbmFtZSwgc3RyaW5nIHF1ZXJ5IFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlNlbmRzIGFuIFNRTCBxdWVyeSB0byBNeVNRTCIKICAgIF0sCiAgICAibXlzcWxfZHJvcF9kYiI6IFsKICAgICAgICAiYm9vbCBteXNxbF9kcm9wX2RiKHN0cmluZyBkYXRhYmFzZV9uYW1lIFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIkRyb3BzIChkZWxldGUpIGEgTXlTUUwgZGF0YWJhc2UiCiAgICBdLAogICAgIm15c3FsX2Vycm5vIjogWwogICAgICAgICJpbnQgbXlzcWxfZXJybm8oW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHByZXZpb3VzIE15U1FMIG9wZXJhdGlvbiIKICAgIF0sCiAgICAibXlzcWxfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9lcnJvcihbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgdGV4dCBvZiB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHByZXZpb3VzIE15U1FMIG9wZXJhdGlvbiIKICAgIF0sCiAgICAibXlzcWxfZXNjYXBlX3N0cmluZyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2VzY2FwZV9zdHJpbmcoc3RyaW5nIHRvX2JlX2VzY2FwZWQpIiwKICAgICAgICAiRXNjYXBlIHN0cmluZyBmb3IgbXlzcWwgcXVlcnkiCiAgICBdLAogICAgIm15c3FsX2ZldGNoX2FycmF5IjogWwogICAgICAgICJhcnJheSBteXNxbF9mZXRjaF9hcnJheShyZXNvdXJjZSByZXN1bHQgWywgaW50IHJlc3VsdF90eXBlXSkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gYXJyYXkgKGFzc29jaWF0aXZlLCBudW1lcmljIG9yIGJvdGgpIgogICAgXSwKICAgICJteXNxbF9mZXRjaF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgbXlzcWxfZmV0Y2hfYXNzb2MocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSIKICAgIF0sCiAgICAibXlzcWxfZmV0Y2hfZmllbGQiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbF9mZXRjaF9maWVsZChyZXNvdXJjZSByZXN1bHQgWywgaW50IGZpZWxkX29mZnNldF0pIiwKICAgICAgICAiR2V0cyBjb2x1bW4gaW5mb3JtYXRpb24gZnJvbSBhIHJlc3VsdCBhbmQgcmV0dXJuIGFzIGFuIG9iamVjdCIKICAgIF0sCiAgICAibXlzcWxfZmV0Y2hfbGVuZ3RocyI6IFsKICAgICAgICAiYXJyYXkgbXlzcWxfZmV0Y2hfbGVuZ3RocyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiR2V0cyBtYXggZGF0YSBzaXplIG9mIGVhY2ggY29sdW1uIGluIGEgcmVzdWx0IgogICAgXSwKICAgICJteXNxbF9mZXRjaF9vYmplY3QiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbF9mZXRjaF9vYmplY3QocmVzb3VyY2UgcmVzdWx0IFssIHN0cmluZyBjbGFzc19uYW1lIFssIE5VTEx8YXJyYXkgY3Rvcl9wYXJhbXNdXSkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gb2JqZWN0IgogICAgXSwKICAgICJteXNxbF9mZXRjaF9yb3ciOiBbCiAgICAgICAgImFycmF5IG15c3FsX2ZldGNoX3JvdyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiR2V0cyBhIHJlc3VsdCByb3cgYXMgYW4gZW51bWVyYXRlZCBhcnJheSIKICAgIF0sCiAgICAibXlzcWxfZmllbGRfZmxhZ3MiOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9maWVsZF9mbGFncyhyZXNvdXJjZSByZXN1bHQsIGludCBmaWVsZF9vZmZzZXQpIiwKICAgICAgICAiR2V0cyB0aGUgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgZmllbGQgaW4gYSByZXN1bHQiCiAgICBdLAogICAgIm15c3FsX2ZpZWxkX2xlbiI6IFsKICAgICAgICAiaW50IG15c3FsX2ZpZWxkX2xlbihyZXNvdXJjZSByZXN1bHQsIGludCBmaWVsZF9vZmZzZXQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQiCiAgICBdLAogICAgIm15c3FsX2ZpZWxkX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9maWVsZF9uYW1lKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX2luZGV4KSIsCiAgICAgICAgIkdldHMgdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmllZCBmaWVsZCBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxfZmllbGRfc2VlayI6IFsKICAgICAgICAiYm9vbCBteXNxbF9maWVsZF9zZWVrKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX29mZnNldCkiLAogICAgICAgICJTZXRzIHJlc3VsdCBwb2ludGVyIHRvIGEgc3BlY2lmaWMgZmllbGQgb2Zmc2V0IgogICAgXSwKICAgICJteXNxbF9maWVsZF90YWJsZSI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2ZpZWxkX3RhYmxlKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX29mZnNldCkiLAogICAgICAgICJHZXRzIG5hbWUgb2YgdGhlIHRhYmxlIHRoZSBzcGVjaWZpZWQgZmllbGQgaXMgaW4iCiAgICBdLAogICAgIm15c3FsX2ZpZWxkX3R5cGUiOiBbCiAgICAgICAgInN0cmluZyBteXNxbF9maWVsZF90eXBlKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX29mZnNldCkiLAogICAgICAgICJHZXRzIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgZmllbGQgaW4gYSByZXN1bHQiCiAgICBdLAogICAgIm15c3FsX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJib29sIG15c3FsX2ZyZWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGcmVlIHJlc3VsdCBtZW1vcnkiCiAgICBdLAogICAgIm15c3FsX2dldF9jbGllbnRfaW5mbyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2dldF9jbGllbnRfaW5mbyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjbGllbnQgbGlicmFyeSB2ZXJzaW9uIgogICAgXSwKICAgICJteXNxbF9nZXRfaG9zdF9pbmZvIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfZ2V0X2hvc3RfaW5mbyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSB0eXBlIG9mIGNvbm5lY3Rpb24gaW4gdXNlLCBpbmNsdWRpbmcgdGhlIHNlcnZlciBob3N0IG5hbWUiCiAgICBdLAogICAgIm15c3FsX2dldF9wcm90b19pbmZvIjogWwogICAgICAgICJpbnQgbXlzcWxfZ2V0X3Byb3RvX2luZm8oW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHByb3RvY29sIHZlcnNpb24gdXNlZCBieSBjdXJyZW50IGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm15c3FsX2dldF9zZXJ2ZXJfaW5mbyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2dldF9zZXJ2ZXJfaW5mbyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIHNlcnZlciB2ZXJzaW9uIG51bWJlciIKICAgIF0sCiAgICAibXlzcWxfaW5mbyI6IFsKICAgICAgICAic3RyaW5nIG15c3FsX2luZm8oW2ludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9zdCByZWNlbnQgcXVlcnkiCiAgICBdLAogICAgIm15c3FsX2luc2VydF9pZCI6IFsKICAgICAgICAiaW50IG15c3FsX2luc2VydF9pZChbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiR2V0cyB0aGUgSUQgZ2VuZXJhdGVkIGZyb20gdGhlIHByZXZpb3VzIElOU0VSVCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsX2xpc3RfZGJzIjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF9saXN0X2RicyhbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiTGlzdCBkYXRhYmFzZXMgYXZhaWxhYmxlIG9uIGEgTXlTUUwgc2VydmVyIgogICAgXSwKICAgICJteXNxbF9saXN0X2ZpZWxkcyI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxfbGlzdF9maWVsZHMoc3RyaW5nIGRhdGFiYXNlX25hbWUsIHN0cmluZyB0YWJsZV9uYW1lIFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIkxpc3QgTXlTUUwgcmVzdWx0IGZpZWxkcyIKICAgIF0sCiAgICAibXlzcWxfbGlzdF9wcm9jZXNzZXMiOiBbCiAgICAgICAgInJlc291cmNlIG15c3FsX2xpc3RfcHJvY2Vzc2VzKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IHNldCBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHNlcnZlciB0aHJlYWRzIgogICAgXSwKICAgICJteXNxbF9saXN0X3RhYmxlcyI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxfbGlzdF90YWJsZXMoc3RyaW5nIGRhdGFiYXNlX25hbWUgWywgaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiTGlzdCB0YWJsZXMgaW4gYSBNeVNRTCBkYXRhYmFzZSIKICAgIF0sCiAgICAibXlzcWxfbnVtX2ZpZWxkcyI6IFsKICAgICAgICAiaW50IG15c3FsX251bV9maWVsZHMocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIkdldHMgbnVtYmVyIG9mIGZpZWxkcyBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxfbnVtX3Jvd3MiOiBbCiAgICAgICAgImludCBteXNxbF9udW1fcm93cyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiR2V0cyBudW1iZXIgb2Ygcm93cyBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxfcGNvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIG15c3FsX3Bjb25uZWN0KFtzdHJpbmcgaG9zdG5hbWVbOnBvcnRdWzovcGF0aC90by9zb2NrZXRdIFssIHN0cmluZyB1c2VybmFtZSBbLCBzdHJpbmcgcGFzc3dvcmQgWywgaW50IGZsYWdzXV1dXSkiLAogICAgICAgICJPcGVucyBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbiB0byBhIE15U1FMIFNlcnZlciIKICAgIF0sCiAgICAibXlzcWxfcGluZyI6IFsKICAgICAgICAiYm9vbCBteXNxbF9waW5nKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJQaW5nIGEgc2VydmVyIGNvbm5lY3Rpb24uIElmIG5vIGNvbm5lY3Rpb24gdGhlbiByZWNvbm5lY3QuIgogICAgXSwKICAgICJteXNxbF9xdWVyeSI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxfcXVlcnkoc3RyaW5nIHF1ZXJ5IFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlNlbmRzIGFuIFNRTCBxdWVyeSB0byBNeVNRTCIKICAgIF0sCiAgICAibXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKHN0cmluZyB0b19iZV9lc2NhcGVkIFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIkVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcgZm9yIHVzZSBpbiBhIFNRTCBzdGF0ZW1lbnQsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGN1cnJlbnQgY2hhcnNldCBvZiB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxfcmVzdWx0IjogWwogICAgICAgICJtaXhlZCBteXNxbF9yZXN1bHQocmVzb3VyY2UgcmVzdWx0LCBpbnQgcm93IFssIG1peGVkIGZpZWxkXSkiLAogICAgICAgICJHZXRzIHJlc3VsdCBkYXRhIgogICAgXSwKICAgICJteXNxbF9zZWxlY3RfZGIiOiBbCiAgICAgICAgImJvb2wgbXlzcWxfc2VsZWN0X2RiKHN0cmluZyBkYXRhYmFzZV9uYW1lIFssIGludCBsaW5rX2lkZW50aWZpZXJdKSIsCiAgICAgICAgIlNlbGVjdHMgYSBNeVNRTCBkYXRhYmFzZSIKICAgIF0sCiAgICAibXlzcWxfc2V0X2NoYXJzZXQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxfc2V0X2NoYXJzZXQoc3RyaW5nIGNzbmFtZSBbLCBpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJzZXRzIGNsaWVudCBjaGFyYWN0ZXIgc2V0IgogICAgXSwKICAgICJteXNxbF9zdGF0IjogWwogICAgICAgICJzdHJpbmcgbXlzcWxfc3RhdChbaW50IGxpbmtfaWRlbnRpZmllcl0pIiwKICAgICAgICAiUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHN0YXR1cyBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAibXlzcWxfdGhyZWFkX2lkIjogWwogICAgICAgICJpbnQgbXlzcWxfdGhyZWFkX2lkKFtpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJSZXR1cm5zIHRoZSB0aHJlYWQgaWQgb2YgY3VycmVudCBjb25uZWN0aW9uIgogICAgXSwKICAgICJteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5IjogWwogICAgICAgICJyZXNvdXJjZSBteXNxbF91bmJ1ZmZlcmVkX3F1ZXJ5KHN0cmluZyBxdWVyeSBbLCBpbnQgbGlua19pZGVudGlmaWVyXSkiLAogICAgICAgICJTZW5kcyBhbiBTUUwgcXVlcnkgdG8gTXlTUUwsIHdpdGhvdXQgZmV0Y2hpbmcgYW5kIGJ1ZmZlcmluZyB0aGUgcmVzdWx0IHJvd3MiCiAgICBdLAogICAgIm15c3FsaV9hZmZlY3RlZF9yb3dzIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfYWZmZWN0ZWRfcm93cyhvYmplY3QgbGluaykiLAogICAgICAgICJHZXQgbnVtYmVyIG9mIGFmZmVjdGVkIHJvd3MgaW4gcHJldmlvdXMgTXlTUUwgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbGlfYXV0b2NvbW1pdCI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfYXV0b2NvbW1pdChvYmplY3QgbGluaywgYm9vbCBtb2RlKSIsCiAgICAgICAgIlR1cm4gYXV0byBjb21taXQgb24gb3Igb2YiCiAgICBdLAogICAgIm15c3FsaV9jYWNoZV9zdGF0cyI6IFsKICAgICAgICAiYXJyYXkgbXlzcWxpX2NhY2hlX3N0YXRzKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBzdGF0aXN0aWNzIGFib3V0IHRoZSB6dmFsIGNhY2hlIgogICAgXSwKICAgICJteXNxbGlfY2hhbmdlX3VzZXIiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX2NoYW5nZV91c2VyKG9iamVjdCBsaW5rLCBzdHJpbmcgdXNlciwgc3RyaW5nIHBhc3N3b3JkLCBzdHJpbmcgZGF0YWJhc2UpIiwKICAgICAgICAiQ2hhbmdlIGxvZ2dlZC1pbiB1c2VyIG9mIHRoZSBhY3RpdmUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2NoYXJhY3Rlcl9zZXRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9jaGFyYWN0ZXJfc2V0X25hbWUob2JqZWN0IGxpbmspIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyIHNldCB1c2VkIGZvciB0aGlzIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm15c3FsaV9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfY2xvc2Uob2JqZWN0IGxpbmspIiwKICAgICAgICAiQ2xvc2UgY29ubmVjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2NvbW1pdCI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfY29tbWl0KG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkNvbW1pdCBvdXRzdGFuZGluZyBhY3Rpb25zIGFuZCBjbG9zZSB0cmFuc2FjdGlvbiIKICAgIF0sCiAgICAibXlzcWxpX2Nvbm5lY3QiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbGlfY29ubmVjdChbc3RyaW5nIGhvc3RuYW1lIFssc3RyaW5nIHVzZXJuYW1lIFssc3RyaW5nIHBhc3N3ZCBbLHN0cmluZyBkYm5hbWUgWyxpbnQgcG9ydCBbLHN0cmluZyBzb2NrZXRdXV1dXV0pIiwKICAgICAgICAiT3BlbiBhIGNvbm5lY3Rpb24gdG8gYSBteXNxbCBzZXJ2ZXIiCiAgICBdLAogICAgIm15c3FsaV9jb25uZWN0X2Vycm5vIjogWwogICAgICAgICJpbnQgbXlzcWxpX2Nvbm5lY3RfZXJybm8odm9pZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSBsYXN0IGNvbm5lY3QgY29tbWFuZCIKICAgIF0sCiAgICAibXlzcWxpX2Nvbm5lY3RfZXJyb3IiOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfY29ubmVjdF9lcnJvcih2b2lkKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHRleHQgb2YgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9kYXRhX3NlZWsiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX2RhdGFfc2VlayhvYmplY3QgcmVzdWx0LCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIk1vdmUgaW50ZXJuYWwgcmVzdWx0IHBvaW50ZXIiCiAgICBdLAogICAgIm15c3FsaV9kZWJ1ZyI6IFsKICAgICAgICAidm9pZCBteXNxbGlfZGVidWcoc3RyaW5nIGRlYnVnKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX2R1bXBfZGVidWdfaW5mbyI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfZHVtcF9kZWJ1Z19pbmZvKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX2VtYmVkZGVkX3NlcnZlcl9lbmQiOiBbCiAgICAgICAgInZvaWQgbXlzcWxpX2VtYmVkZGVkX3NlcnZlcl9lbmQodm9pZCkiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9lbWJlZGRlZF9zZXJ2ZXJfc3RhcnQiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX2VtYmVkZGVkX3NlcnZlcl9zdGFydChib29sIHN0YXJ0LCBhcnJheSBhcmd1bWVudHMsIGFycmF5IGdyb3VwcykiLAogICAgICAgICJpbml0aWFsaXplIGFuZCBzdGFydCBlbWJlZGRlZCBzZXJ2ZXIiCiAgICBdLAogICAgIm15c3FsaV9lcnJubyI6IFsKICAgICAgICAiaW50IG15c3FsaV9lcnJubyhvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9lcnJvciI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9lcnJvcihvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm5zIHRoZSB0ZXh0IG9mIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gcHJldmlvdXMgTXlTUUwgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbGlfZmV0Y2hfYWxsIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfZmV0Y2hfYWxsIChvYmplY3QgcmVzdWx0IFssaW50IHJlc3VsdHR5cGVdKSIsCiAgICAgICAgIkZldGNoZXMgYWxsIHJlc3VsdCByb3dzIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LCBhIG51bWVyaWMgYXJyYXksIG9yIGJvdGgiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9hcnJheSI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2ZldGNoX2FycmF5IChvYmplY3QgcmVzdWx0IFssaW50IHJlc3VsdHR5cGVdKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSwgYSBudW1lcmljIGFycmF5LCBvciBib3RoIgogICAgXSwKICAgICJteXNxbGlfZmV0Y2hfYXNzb2MiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9mZXRjaF9hc3NvYyAob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9maWVsZCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2ZldGNoX2ZpZWxkIChvYmplY3QgcmVzdWx0KSIsCiAgICAgICAgIkdldCBjb2x1bW4gaW5mb3JtYXRpb24gZnJvbSBhIHJlc3VsdCBhbmQgcmV0dXJuIGFzIGFuIG9iamVjdCIKICAgIF0sCiAgICAibXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2ZldGNoX2ZpZWxkX2RpcmVjdCAob2JqZWN0IHJlc3VsdCwgaW50IG9mZnNldCkiLAogICAgICAgICJGZXRjaCBtZXRhLWRhdGEgZm9yIGEgc2luZ2xlIGZpZWxkIgogICAgXSwKICAgICJteXNxbGlfZmV0Y2hfZmllbGRzIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfZmV0Y2hfZmllbGRzIChvYmplY3QgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgZmllbGQgbWV0YS1kYXRhIgogICAgXSwKICAgICJteXNxbGlfZmV0Y2hfbGVuZ3RocyI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2ZldGNoX2xlbmd0aHMgKG9iamVjdCByZXN1bHQpIiwKICAgICAgICAiR2V0IHRoZSBsZW5ndGggb2YgZWFjaCBvdXRwdXQgaW4gYSByZXN1bHQiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9vYmplY3QiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9mZXRjaF9vYmplY3QgKG9iamVjdCByZXN1bHQgWywgc3RyaW5nIGNsYXNzX25hbWUgWywgTlVMTHxhcnJheSBjdG9yX3BhcmFtc11dKSIsCiAgICAgICAgIkZldGNoIGEgcmVzdWx0IHJvdyBhcyBhbiBvYmplY3QiCiAgICBdLAogICAgIm15c3FsaV9mZXRjaF9yb3ciOiBbCiAgICAgICAgImFycmF5IG15c3FsaV9mZXRjaF9yb3cgKG9iamVjdCByZXN1bHQpIiwKICAgICAgICAiR2V0IGEgcmVzdWx0IHJvdyBhcyBhbiBlbnVtZXJhdGVkIGFycmF5IgogICAgXSwKICAgICJteXNxbGlfZmllbGRfY291bnQiOiBbCiAgICAgICAgImludCBteXNxbGlfZmllbGRfY291bnQob2JqZWN0IGxpbmspIiwKICAgICAgICAiRmV0Y2ggdGhlIG51bWJlciBvZiBmaWVsZHMgcmV0dXJuZWQgYnkgdGhlIGxhc3QgcXVlcnkgZm9yIHRoZSBnaXZlbiBsaW5rIgogICAgXSwKICAgICJteXNxbGlfZmllbGRfc2VlayI6IFsKICAgICAgICAiaW50IG15c3FsaV9maWVsZF9zZWVrKG9iamVjdCByZXN1bHQsIGludCBmaWVsZG5yKSIsCiAgICAgICAgIlNldCByZXN1bHQgcG9pbnRlciB0byBhIHNwZWNpZmllZCBmaWVsZCBvZmZzZXQiCiAgICBdLAogICAgIm15c3FsaV9maWVsZF90ZWxsIjogWwogICAgICAgICJpbnQgbXlzcWxpX2ZpZWxkX3RlbGwob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJHZXQgY3VycmVudCBmaWVsZCBvZmZzZXQgb2YgcmVzdWx0IHBvaW50ZXIiCiAgICBdLAogICAgIm15c3FsaV9mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAidm9pZCBteXNxbGlfZnJlZV9yZXN1bHQob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJGcmVlIHF1ZXJ5IHJlc3VsdCBtZW1vcnkgZm9yIHRoZSBnaXZlbiByZXN1bHQgaGFuZGxlIgogICAgXSwKICAgICJteXNxbGlfZ2V0X2NoYXJzZXQiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbGlfZ2V0X2NoYXJzZXQob2JqZWN0IGxpbmspIiwKICAgICAgICAicmV0dXJucyBhIGNoYXJhY3RlciBzZXQgb2JqZWN0IgogICAgXSwKICAgICJteXNxbGlfZ2V0X2NsaWVudF9pbmZvIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxpX2dldF9jbGllbnRfaW5mbyh2b2lkKSIsCiAgICAgICAgIkdldCBNeVNRTCBjbGllbnQgaW5mbyIKICAgIF0sCiAgICAibXlzcWxpX2dldF9jbGllbnRfc3RhdHMiOiBbCiAgICAgICAgImFycmF5IG15c3FsaV9nZXRfY2xpZW50X3N0YXRzKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyBzdGF0aXN0aWNzIGFib3V0IHRoZSB6dmFsIGNhY2hlIgogICAgXSwKICAgICJteXNxbGlfZ2V0X2NsaWVudF92ZXJzaW9uIjogWwogICAgICAgICJpbnQgbXlzcWxpX2dldF9jbGllbnRfdmVyc2lvbih2b2lkKSIsCiAgICAgICAgIkdldCBNeVNRTCBjbGllbnQgaW5mbyIKICAgIF0sCiAgICAibXlzcWxpX2dldF9jb25uZWN0aW9uX3N0YXRzIjogWwogICAgICAgICJhcnJheSBteXNxbGlfZ2V0X2Nvbm5lY3Rpb25fc3RhdHModm9pZCkiLAogICAgICAgICJSZXR1cm5zIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHp2YWwgY2FjaGUiCiAgICBdLAogICAgIm15c3FsaV9nZXRfaG9zdF9pbmZvIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxpX2dldF9ob3N0X2luZm8gKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCBNeVNRTCBob3N0IGluZm8iCiAgICBdLAogICAgIm15c3FsaV9nZXRfcHJvdG9faW5mbyI6IFsKICAgICAgICAiaW50IG15c3FsaV9nZXRfcHJvdG9faW5mbyhvYmplY3QgbGluaykiLAogICAgICAgICJHZXQgTXlTUUwgcHJvdG9jb2wgaW5mb3JtYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9nZXRfc2VydmVyX2luZm8iOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfZ2V0X3NlcnZlcl9pbmZvKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkdldCBNeVNRTCBzZXJ2ZXIgaW5mbyIKICAgIF0sCiAgICAibXlzcWxpX2dldF9zZXJ2ZXJfdmVyc2lvbiI6IFsKICAgICAgICAiaW50IG15c3FsaV9nZXRfc2VydmVyX3ZlcnNpb24ob2JqZWN0IGxpbmspIiwKICAgICAgICAiUmV0dXJuIHRoZSBNeVNRTCB2ZXJzaW9uIGZvciB0aGUgc2VydmVyIHJlZmVyZW5jZWQgYnkgdGhlIGdpdmVuIGxpbmsiCiAgICBdLAogICAgIm15c3FsaV9nZXRfd2FybmluZ3MiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbGlfZ2V0X3dhcm5pbmdzKG9iamVjdCBsaW5rKSAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihteXNxbGlfZ2V0X3dhcm5pbmdzKSB7ICBNWV9NWVNRTCAgICpteXNxbDsgIHp2YWwgICAgKm15c3FsX2xpbms7ICBNWVNRTElfUkVTT1VSQ0UgICpteXNxbGlfcmVzb3VyY2U7ICBNWVNRTElfV0FSTklORyAgKnc7ICAgaWYgKHplbmRfcGFyc2VfbWV0aG9kX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgZ2V0VGhpcygpLCBcIk9cIiwgJm15c3FsX2xpbmssIG15c3FsaV9saW5rX2NsYXNzX2VudHJ5KSA9PSBGQUlMVVJFKSB7ICAgcmV0dXJuOyAgfSAgTVlTUUxJX0ZFVENIX1JFU09VUkNFKG15c3FsLCBNWV9NWVNRTCosICZteXNxbF9saW5rLCBcIm15c3FsaV9saW5rXCIsIE1ZU1FMSV9TVEFUVVNfVkFMSUQpOyAgIGlmIChteXNxbF93YXJuaW5nX2NvdW50KG15c3FsLT5teXNxbCkpIHsgICB3ID0gcGhwX2dldF93YXJuaW5ncyhteXNxbC0+bXlzcWwgVFNSTUxTX0NDKTsgICB9IGVsc2UgeyAgIFJFVFVSTl9GQUxTRTsgIH0gIG15c3FsaV9yZXNvdXJjZSA9IChNWVNRTElfUkVTT1VSQ0UgKillY2FsbG9jICgxLCBzaXplb2YoTVlTUUxJX1JFU09VUkNFKSk7ICBteXNxbGlfcmVzb3VyY2UtPnB0ciA9IG15c3FsaV9yZXNvdXJjZS0+aW5mbyA9ICh2b2lkICopdzsgIG15c3FsaV9yZXNvdXJjZS0+c3RhdHVzID0gTVlTUUxJX1NUQVRVU19WQUxJRDsgIE1ZU1FMSV9SRVRVUk5fUkVTT1VSQ0UobXlzcWxpX3Jlc291cmNlLCBteXNxbGlfd2FybmluZ19jbGFzc19lbnRyeSk7ICB9IC8qIH19fSIKICAgIF0sCiAgICAibXlzcWxpX2luZm8iOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfaW5mbyhvYmplY3QgbGluaykiLAogICAgICAgICJHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vc3QgcmVjZW50IHF1ZXJ5IgogICAgXSwKICAgICJteXNxbGlfaW5pdCI6IFsKICAgICAgICAicmVzb3VyY2UgbXlzcWxpX2luaXQodm9pZCkiLAogICAgICAgICJJbml0aWFsaXplIG15c3FsaSBhbmQgcmV0dXJuIGEgcmVzb3VyY2UgZm9yIHVzZSB3aXRoIG15c3FsX3JlYWxfY29ubmVjdCIKICAgIF0sCiAgICAibXlzcWxpX2luc2VydF9pZCI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX2luc2VydF9pZChvYmplY3QgbGluaykiLAogICAgICAgICJHZXQgdGhlIElEIGdlbmVyYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBJTlNFUlQgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbGlfa2lsbCI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfa2lsbChvYmplY3QgbGluaywgaW50IHByb2Nlc3NpZCkiLAogICAgICAgICJLaWxsIGEgbXlzcWwgcHJvY2VzcyBvbiB0aGUgc2VydmVyIgogICAgXSwKICAgICJteXNxbGlfbGlua19jb25zdHJ1Y3QiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbGlfbGlua19jb25zdHJ1Y3QoKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX21vcmVfcmVzdWx0cyI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfbW9yZV9yZXN1bHRzKG9iamVjdCBsaW5rKSIsCiAgICAgICAgImNoZWNrIGlmIHRoZXJlIGFueSBtb3JlIHF1ZXJ5IHJlc3VsdHMgZnJvbSBhIG11bHRpIHF1ZXJ5IgogICAgXSwKICAgICJteXNxbGlfbXVsdGlfcXVlcnkiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX211bHRpX3F1ZXJ5KG9iamVjdCBsaW5rLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiYWxsb3dzIHRvIGV4ZWN1dGUgbXVsdGlwbGUgcXVlcmllcyIKICAgIF0sCiAgICAibXlzcWxpX25leHRfcmVzdWx0IjogWwogICAgICAgICJib29sIG15c3FsaV9uZXh0X3Jlc3VsdChvYmplY3QgbGluaykiLAogICAgICAgICJyZWFkIG5leHQgcmVzdWx0IGZyb20gbXVsdGlfcXVlcnkiCiAgICBdLAogICAgIm15c3FsaV9udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgbXlzcWxpX251bV9maWVsZHMob2JqZWN0IHJlc3VsdCkiLAogICAgICAgICJHZXQgbnVtYmVyIG9mIGZpZWxkcyBpbiByZXN1bHQiCiAgICBdLAogICAgIm15c3FsaV9udW1fcm93cyI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX251bV9yb3dzKG9iamVjdCByZXN1bHQpIiwKICAgICAgICAiR2V0IG51bWJlciBvZiByb3dzIGluIHJlc3VsdCIKICAgIF0sCiAgICAibXlzcWxpX29wdGlvbnMiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX29wdGlvbnMob2JqZWN0IGxpbmssIGludCBmbGFncywgbWl4ZWQgdmFsdWVzKSIsCiAgICAgICAgIlNldCBvcHRpb25zIgogICAgXSwKICAgICJteXNxbGlfcGluZyI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfcGluZyhvYmplY3QgbGluaykiLAogICAgICAgICJQaW5nIGEgc2VydmVyIGNvbm5lY3Rpb24gb3IgcmVjb25uZWN0IGlmIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm15c3FsaV9wb2xsIjogWwogICAgICAgICJpbnQgbXlzcWxpX3BvbGwoYXJyYXkgcmVhZCwgYXJyYXkgd3JpdGUsIGFycmF5IGVycm9yLCBsb25nIHNlYyBbLCBsb25nIHVzZWNdKSIsCiAgICAgICAgIlBvbGwgY29ubmVjdGlvbnMiCiAgICBdLAogICAgIm15c3FsaV9wcmVwYXJlIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfcHJlcGFyZShvYmplY3QgbGluaywgc3RyaW5nIHF1ZXJ5KSIsCiAgICAgICAgIlByZXBhcmUgYSBTUUwgc3RhdGVtZW50IGZvciBleGVjdXRpb24iCiAgICBdLAogICAgIm15c3FsaV9xdWVyeSI6IFsKICAgICAgICAibWl4ZWQgbXlzcWxpX3F1ZXJ5KG9iamVjdCBsaW5rLCBzdHJpbmcgcXVlcnkgWyxpbnQgcmVzdWx0bW9kZV0pICovIiwKICAgICAgICAiUEhQX0ZVTkNUSU9OKG15c3FsaV9xdWVyeSkgeyAgTVlfTVlTUUwgICAqbXlzcWw7ICB6dmFsICAgICpteXNxbF9saW5rOyAgTVlTUUxJX1JFU09VUkNFICAqbXlzcWxpX3Jlc291cmNlOyAgTVlTUUxfUkVTICAgICpyZXN1bHQ7ICBjaGFyICAgICpxdWVyeSA9IE5VTEw7ICB1bnNpZ25lZCBpbnQgICBxdWVyeV9sZW47ICB1bnNpZ25lZCBsb25nICAgcmVzdWx0bW9kZSA9IE1ZU1FMSV9TVE9SRV9SRVNVTFQ7ICAgaWYgKHplbmRfcGFyc2VfbWV0aG9kX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgZ2V0VGhpcygpLCBcIk9zfGxcIiwgJm15c3FsX2xpbmssIG15c3FsaV9saW5rX2NsYXNzX2VudHJ5LCAmcXVlcnksICZxdWVyeV9sZW4sICZyZXN1bHRtb2RlKSA9PSBGQUlMVVJFKSB7ICAgcmV0dXJuOyAgfSAgIGlmICghcXVlcnlfbGVuKSB7ICAgcGhwX2Vycm9yX2RvY3JlZihOVUxMIFRTUk1MU19DQywgRV9XQVJOSU5HLCBcIkVtcHR5IHF1ZXJ5XCIpOyAgIFJFVFVSTl9GQUxTRTsgIH0gIGlmICgocmVzdWx0bW9kZSAmIH5NWVNRTElfQVNZTkMpICE9IE1ZU1FMSV9VU0VfUkVTVUxUICYmIChyZXN1bHRtb2RlICYgfk1ZU1FMSV9BU1lOQykgIT0gTVlTUUxJX1NUT1JFX1JFU1VMVCkgeyAgIHBocF9lcnJvcl9kb2NyZWYoTlVMTCBUU1JNTFNfQ0MsIEVfV0FSTklORywgXCJJbnZhbGlkIHZhbHVlIGZvciByZXN1bHRtb2RlXCIpOyAgIFJFVFVSTl9GQUxTRTsgIH0gICBNWVNRTElfRkVUQ0hfUkVTT1VSQ0UobXlzcWwsIE1ZX01ZU1FMKiwgJm15c3FsX2xpbmssIFwibXlzcWxpX2xpbmtcIiwgTVlTUUxJX1NUQVRVU19WQUxJRCk7ICAgTVlTUUxJX0RJU0FCTEVfTVE7ICAgI2lmZGVmIE1ZU1FMSV9VU0VfTVlTUUxORCAgaWYgKHJlc3VsdG1vZGUgJiBNWVNRTElfQVNZTkMpIHsgICBpZiAobXlzcWxpX2FzeW5jX3F1ZXJ5KG15c3FsLT5teXNxbCwgcXVlcnksIHF1ZXJ5X2xlbikpIHsgICAgTVlTUUxJX1JFUE9SVF9NWVNRTF9FUlJPUihteXNxbC0+bXlzcWwpOyAgICBSRVRVUk5fRkFMU0U7ICAgfSAgIG15c3FsLT5hc3luY19yZXN1bHRfZmV0Y2hfdHlwZSA9IHJlc3VsdG1vZGUgJiB+TVlTUUxJX0FTWU5DOyAgIFJFVFVSTl9UUlVFOyAgfSAjZW5kaWYgICBpZiAobXlzcWxfcmVhbF9xdWVyeShteXNxbC0+bXlzcWwsIHF1ZXJ5LCBxdWVyeV9sZW4pKSB7ICAgTVlTUUxJX1JFUE9SVF9NWVNRTF9FUlJPUihteXNxbC0+bXlzcWwpOyAgIFJFVFVSTl9GQUxTRTsgIH0gICBpZiAoIW15c3FsX2ZpZWxkX2NvdW50KG15c3FsLT5teXNxbCkpIHsgICAvKiBubyByZXN1bHQgc2V0IC0gbm90IGEgU0VMRUNUIgogICAgXSwKICAgICJteXNxbGlfcmVhbF9jb25uZWN0IjogWwogICAgICAgICJib29sIG15c3FsaV9yZWFsX2Nvbm5lY3Qob2JqZWN0IGxpbmsgWyxzdHJpbmcgaG9zdG5hbWUgWyxzdHJpbmcgdXNlcm5hbWUgWyxzdHJpbmcgcGFzc3dkIFssc3RyaW5nIGRibmFtZSBbLGludCBwb3J0IFssc3RyaW5nIHNvY2tldCBbLGludCBmbGFnc11dXV1dXV0pIiwKICAgICAgICAiT3BlbiBhIGNvbm5lY3Rpb24gdG8gYSBteXNxbCBzZXJ2ZXIiCiAgICBdLAogICAgIm15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKG9iamVjdCBsaW5rLCBzdHJpbmcgZXNjYXBlc3RyKSIsCiAgICAgICAgIkVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGZvciB1c2UgaW4gYSBTUUwgc3RhdGVtZW50LCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBjdXJyZW50IGNoYXJzZXQgb2YgdGhlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm15c3FsaV9yZWFsX3F1ZXJ5IjogWwogICAgICAgICJib29sIG15c3FsaV9yZWFsX3F1ZXJ5KG9iamVjdCBsaW5rLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiQmluYXJ5LXNhZmUgdmVyc2lvbiBvZiBteXNxbF9xdWVyeSgpIgogICAgXSwKICAgICJteXNxbGlfcmVhcF9hc3luY19xdWVyeSI6IFsKICAgICAgICAiaW50IG15c3FsaV9yZWFwX2FzeW5jX3F1ZXJ5KG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlBvbGwgY29ubmVjdGlvbnMiCiAgICBdLAogICAgIm15c3FsaV9yZWZyZXNoIjogWwogICAgICAgICJib29sIG15c3FsaV9yZWZyZXNoKG9iamVjdCBsaW5rLCBsb25nIG9wdGlvbnMpIiwKICAgICAgICAiRmx1c2ggdGFibGVzIG9yIGNhY2hlcywgb3IgcmVzZXQgcmVwbGljYXRpb24gc2VydmVyIGluZm9ybWF0aW9uIgogICAgXSwKICAgICJteXNxbGlfcmVwb3J0IjogWwogICAgICAgICJib29sIG15c3FsaV9yZXBvcnQoaW50IGZsYWdzKSIsCiAgICAgICAgInNldHMgcmVwb3J0IGxldmVsIgogICAgXSwKICAgICJteXNxbGlfcm9sbGJhY2siOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3JvbGxiYWNrKG9iamVjdCBsaW5rKSIsCiAgICAgICAgIlVuZG8gYWN0aW9ucyBmcm9tIGN1cnJlbnQgdHJhbnNhY3Rpb24iCiAgICBdLAogICAgIm15c3FsaV9zZWxlY3RfZGIiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3NlbGVjdF9kYihvYmplY3QgbGluaywgc3RyaW5nIGRibmFtZSkiLAogICAgICAgICJTZWxlY3QgYSBNeVNRTCBkYXRhYmFzZSIKICAgIF0sCiAgICAibXlzcWxpX3NldF9jaGFyc2V0IjogWwogICAgICAgICJib29sIG15c3FsaV9zZXRfY2hhcnNldChvYmplY3QgbGluaywgc3RyaW5nIGNzbmFtZSkiLAogICAgICAgICJzZXRzIGNsaWVudCBjaGFyYWN0ZXIgc2V0IgogICAgXSwKICAgICJteXNxbGlfc2V0X2xvY2FsX2luZmlsZV9kZWZhdWx0IjogWwogICAgICAgICJ2b2lkIG15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2RlZmF1bHQob2JqZWN0IGxpbmspIiwKICAgICAgICAidW5zZXRzIHVzZXIgZGVmaW5lZCBoYW5kbGVyIGZvciBsb2FkIGxvY2FsIGluZmlsZSBjb21tYW5kIgogICAgXSwKICAgICJteXNxbGlfc2V0X2xvY2FsX2luZmlsZV9oYW5kbGVyIjogWwogICAgICAgICJib29sIG15c3FsaV9zZXRfbG9jYWxfaW5maWxlX2hhbmRsZXIob2JqZWN0IGxpbmssIGNhbGxiYWNrIHJlYWRfZnVuYykiLAogICAgICAgICJTZXQgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBMT0FEIERBVEEgTE9DQUwgSU5GSUxFIgogICAgXSwKICAgICJteXNxbGlfc3Fsc3RhdGUiOiBbCiAgICAgICAgInN0cmluZyBteXNxbGlfc3Fsc3RhdGUob2JqZWN0IGxpbmspIiwKICAgICAgICAiUmV0dXJucyB0aGUgU1FMU1RBVEUgZXJyb3IgZnJvbSBwcmV2aW91cyBNeVNRTCBvcGVyYXRpb24iCiAgICBdLAogICAgIm15c3FsaV9zc2xfc2V0IjogWwogICAgICAgICJib29sIG15c3FsaV9zc2xfc2V0KG9iamVjdCBsaW5rICxzdHJpbmcga2V5ICxzdHJpbmcgY2VydCAsc3RyaW5nIGNhICxzdHJpbmcgY2FwYXRoICxzdHJpbmcgY2lwaGVyXSkiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9zdGF0IjogWwogICAgICAgICJtaXhlZCBteXNxbGlfc3RhdChvYmplY3QgbGluaykiLAogICAgICAgICJHZXQgY3VycmVudCBzeXN0ZW0gc3RhdHVzIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9hZmZlY3RlZF9yb3dzIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfc3RtdF9hZmZlY3RlZF9yb3dzKG9iamVjdCBzdG10KSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHJvd3MgYWZmZWN0ZWQgaW4gdGhlIGxhc3QgcXVlcnkgZm9yIHRoZSBnaXZlbiBsaW5rIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9hdHRyX2dldCI6IFsKICAgICAgICAiaW50IG15c3FsaV9zdG10X2F0dHJfZ2V0KG9iamVjdCBzdG10LCBsb25nIGF0dHIpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9hdHRyX3NldCI6IFsKICAgICAgICAiaW50IG15c3FsaV9zdG10X2F0dHJfc2V0KG9iamVjdCBzdG10LCBsb25nIGF0dHIsIGxvbmcgbW9kZSkiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2JpbmRfcGFyYW0iOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfYmluZF9wYXJhbShvYmplY3Qgc3RtdCwgc3RyaW5nIHR5cGVzLCBtaXhlZCB2YXJpYWJsZSBbLG1peGVkLC4uLi5dKSIsCiAgICAgICAgIkJpbmQgdmFyaWFibGVzIHRvIGEgcHJlcGFyZWQgc3RhdGVtZW50IGFzIHBhcmFtZXRlcnMiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2JpbmRfcmVzdWx0IjogWwogICAgICAgICJib29sIG15c3FsaV9zdG10X2JpbmRfcmVzdWx0KG9iamVjdCBzdG10LCBtaXhlZCB2YXIsIFssbWl4ZWQsIC4uLl0pIiwKICAgICAgICAiQmluZCB2YXJpYWJsZXMgdG8gYSBwcmVwYXJlZCBzdGF0ZW1lbnQgZm9yIHJlc3VsdCBzdG9yYWdlIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfc3RtdF9jbG9zZShvYmplY3Qgc3RtdCkiLAogICAgICAgICJDbG9zZSBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2RhdGFfc2VlayI6IFsKICAgICAgICAidm9pZCBteXNxbGlfc3RtdF9kYXRhX3NlZWsob2JqZWN0IHN0bXQsIGludCBvZmZzZXQpIiwKICAgICAgICAiTW92ZSBpbnRlcm5hbCByZXN1bHQgcG9pbnRlciIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZXJybm8iOiBbCiAgICAgICAgImludCBteXNxbGlfc3RtdF9lcnJubyhvYmplY3Qgc3RtdCkiLAogICAgICAgICIiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgbXlzcWxpX3N0bXRfZXJyb3Iob2JqZWN0IHN0bXQpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9leGVjdXRlIjogWwogICAgICAgICJib29sIG15c3FsaV9zdG10X2V4ZWN1dGUob2JqZWN0IHN0bXQpIiwKICAgICAgICAiRXhlY3V0ZSBhIHByZXBhcmVkIHN0YXRlbWVudCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZmV0Y2giOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdG10X2ZldGNoKG9iamVjdCBzdG10KSIsCiAgICAgICAgIkZldGNoIHJlc3VsdHMgZnJvbSBhIHByZXBhcmVkIHN0YXRlbWVudCBpbnRvIHRoZSBib3VuZCB2YXJpYWJsZXMiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2ZpZWxkX2NvdW50IjogWwogICAgICAgICJpbnQgbXlzcWxpX3N0bXRfZmllbGRfY291bnQob2JqZWN0IHN0bXQpIHsiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiByZXN1bHQgY29sdW1ucyBmb3IgdGhlIGdpdmVuIHN0YXRlbWVudCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZnJlZV9yZXN1bHQiOiBbCiAgICAgICAgInZvaWQgbXlzcWxpX3N0bXRfZnJlZV9yZXN1bHQob2JqZWN0IHN0bXQpIiwKICAgICAgICAiRnJlZSBzdG9yZWQgcmVzdWx0IG1lbW9yeSBmb3IgdGhlIGdpdmVuIHN0YXRlbWVudCBoYW5kbGUiCiAgICBdLAogICAgIm15c3FsaV9zdG10X2dldF9yZXN1bHQiOiBbCiAgICAgICAgIm9iamVjdCBteXNxbGlfc3RtdF9nZXRfcmVzdWx0KG9iamVjdCBsaW5rKSIsCiAgICAgICAgIkJ1ZmZlciByZXN1bHQgc2V0IG9uIGNsaWVudCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfZ2V0X3dhcm5pbmdzIjogWwogICAgICAgICJvYmplY3QgbXlzcWxpX3N0bXRfZ2V0X3dhcm5pbmdzKG9iamVjdCBsaW5rKSAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihteXNxbGlfc3RtdF9nZXRfd2FybmluZ3MpIHsgIE1ZX1NUTVQgICAgKnN0bXQ7ICB6dmFsICAgICpzdG10X2xpbms7ICBNWVNRTElfUkVTT1VSQ0UgICpteXNxbGlfcmVzb3VyY2U7ICBNWVNRTElfV0FSTklORyAgKnc7ICAgaWYgKHplbmRfcGFyc2VfbWV0aG9kX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgZ2V0VGhpcygpLCBcIk9cIiwgJnN0bXRfbGluaywgbXlzcWxpX3N0bXRfY2xhc3NfZW50cnkpID09IEZBSUxVUkUpIHsgICByZXR1cm47ICB9ICBNWVNRTElfRkVUQ0hfUkVTT1VSQ0Uoc3RtdCwgTVlfU1RNVCosICZzdG10X2xpbmssIFwibXlzcWxpX3N0bXRcIiwgTVlTUUxJX1NUQVRVU19WQUxJRCk7ICAgaWYgKG15c3FsaV9zdG10X3dhcm5pbmdfY291bnQoc3RtdC0+c3RtdCkpIHsgICB3ID0gcGhwX2dldF93YXJuaW5ncyhteXNxbGlfc3RtdF9nZXRfY29ubmVjdGlvbihzdG10LT5zdG10KSBUU1JNTFNfQ0MpOyAgIH0gZWxzZSB7ICAgUkVUVVJOX0ZBTFNFOyAgfSAgbXlzcWxpX3Jlc291cmNlID0gKE1ZU1FMSV9SRVNPVVJDRSAqKWVjYWxsb2MgKDEsIHNpemVvZihNWVNRTElfUkVTT1VSQ0UpKTsgIG15c3FsaV9yZXNvdXJjZS0+cHRyID0gbXlzcWxpX3Jlc291cmNlLT5pbmZvID0gKHZvaWQgKil3OyAgbXlzcWxpX3Jlc291cmNlLT5zdGF0dXMgPSBNWVNRTElfU1RBVFVTX1ZBTElEOyAgTVlTUUxJX1JFVFVSTl9SRVNPVVJDRShteXNxbGlfcmVzb3VyY2UsIG15c3FsaV93YXJuaW5nX2NsYXNzX2VudHJ5KTsgfSAvKiB9fX0iCiAgICBdLAogICAgIm15c3FsaV9zdG10X2luaXQiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdG10X2luaXQob2JqZWN0IGxpbmspIiwKICAgICAgICAiSW5pdGlhbGl6ZSBzdGF0ZW1lbnQgb2JqZWN0IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9pbnNlcnRfaWQiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdG10X2luc2VydF9pZChvYmplY3Qgc3RtdCkiLAogICAgICAgICJHZXQgdGhlIElEIGdlbmVyYXRlZCBmcm9tIHRoZSBwcmV2aW91cyBJTlNFUlQgb3BlcmF0aW9uIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9uZXh0X3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBteXNxbGlfc3RtdF9uZXh0X3Jlc3VsdChvYmplY3QgbGluaykiLAogICAgICAgICJyZWFkIG5leHQgcmVzdWx0IGZyb20gbXVsdGlfcXVlcnkiCiAgICBdLAogICAgIm15c3FsaV9zdG10X251bV9yb3dzIjogWwogICAgICAgICJtaXhlZCBteXNxbGlfc3RtdF9udW1fcm93cyhvYmplY3Qgc3RtdCkiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiByb3dzIGluIHN0YXRlbWVudHMgcmVzdWx0IHNldCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfcGFyYW1fY291bnQiOiBbCiAgICAgICAgImludCBteXNxbGlfc3RtdF9wYXJhbV9jb3VudChvYmplY3Qgc3RtdCkiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiBwYXJhbWV0ZXIgZm9yIHRoZSBnaXZlbiBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm15c3FsaV9zdG10X3ByZXBhcmUiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfcHJlcGFyZShvYmplY3Qgc3RtdCwgc3RyaW5nIHF1ZXJ5KSIsCiAgICAgICAgInByZXBhcmUgc2VydmVyIHNpZGUgc3RhdGVtZW50IHdpdGggcXVlcnkiCiAgICBdLAogICAgIm15c3FsaV9zdG10X3Jlc2V0IjogWwogICAgICAgICJib29sIG15c3FsaV9zdG10X3Jlc2V0KG9iamVjdCBzdG10KSIsCiAgICAgICAgInJlc2V0IGEgcHJlcGFyZWQgc3RhdGVtZW50IgogICAgXSwKICAgICJteXNxbGlfc3RtdF9yZXN1bHRfbWV0YWRhdGEiOiBbCiAgICAgICAgIm1peGVkIG15c3FsaV9zdG10X3Jlc3VsdF9tZXRhZGF0YShvYmplY3Qgc3RtdCkiLAogICAgICAgICJyZXR1cm4gcmVzdWx0IHNldCBmcm9tIHN0YXRlbWVudCIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfc2VuZF9sb25nX2RhdGEiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3N0bXRfc2VuZF9sb25nX2RhdGEob2JqZWN0IHN0bXQsIGludCBwYXJhbV9uciwgc3RyaW5nIGRhdGEpIiwKICAgICAgICAiIgogICAgXSwKICAgICJteXNxbGlfc3RtdF9zcWxzdGF0ZSI6IFsKICAgICAgICAic3RyaW5nIG15c3FsaV9zdG10X3NxbHN0YXRlKG9iamVjdCBzdG10KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX3N0bXRfc3RvcmVfcmVzdWx0IjogWwogICAgICAgICJib29sIG15c3FsaV9zdG10X3N0b3JlX3Jlc3VsdChzdG10KSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAibXlzcWxpX3N0b3JlX3Jlc3VsdCI6IFsKICAgICAgICAib2JqZWN0IG15c3FsaV9zdG9yZV9yZXN1bHQob2JqZWN0IGxpbmspIiwKICAgICAgICAiQnVmZmVyIHJlc3VsdCBzZXQgb24gY2xpZW50IgogICAgXSwKICAgICJteXNxbGlfdGhyZWFkX2lkIjogWwogICAgICAgICJpbnQgbXlzcWxpX3RocmVhZF9pZChvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgdGhyZWFkIElEIgogICAgXSwKICAgICJteXNxbGlfdGhyZWFkX3NhZmUiOiBbCiAgICAgICAgImJvb2wgbXlzcWxpX3RocmVhZF9zYWZlKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHdoZXRoZXIgdGhyZWFkIHNhZmV0eSBpcyBnaXZlbiBvciBub3QiCiAgICBdLAogICAgIm15c3FsaV91c2VfcmVzdWx0IjogWwogICAgICAgICJtaXhlZCBteXNxbGlfdXNlX3Jlc3VsdChvYmplY3QgbGluaykiLAogICAgICAgICJEaXJlY3RseSByZXRyaWV2ZSBxdWVyeSByZXN1bHRzIC0gZG8gbm90IGJ1ZmZlciByZXN1bHRzIG9uIGNsaWVudCBzaWRlIgogICAgXSwKICAgICJteXNxbGlfd2FybmluZ19jb3VudCI6IFsKICAgICAgICAiaW50IG15c3FsaV93YXJuaW5nX2NvdW50IChvYmplY3QgbGluaykiLAogICAgICAgICJSZXR1cm4gbnVtYmVyIG9mIHdhcm5pbmdzIGZyb20gdGhlIGxhc3QgcXVlcnkgZm9yIHRoZSBnaXZlbiBsaW5rIgogICAgXSwKICAgICJuYXRjYXNlc29ydCI6IFsKICAgICAgICAidm9pZCBuYXRjYXNlc29ydChhcnJheSAmYXJyYXlfYXJnKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgdXNpbmcgY2FzZS1pbnNlbnNpdGl2ZSBuYXR1cmFsIHNvcnQiCiAgICBdLAogICAgIm5hdHNvcnQiOiBbCiAgICAgICAgInZvaWQgbmF0c29ydChhcnJheSAmYXJyYXlfYXJnKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgdXNpbmcgbmF0dXJhbCBzb3J0IgogICAgXSwKICAgICJuZXh0IjogWwogICAgICAgICJtaXhlZCBuZXh0KGFycmF5IGFycmF5X2FyZykiLAogICAgICAgICJNb3ZlIGFycmF5IGFyZ3VtZW50J3MgaW50ZXJuYWwgcG9pbnRlciB0byB0aGUgbmV4dCBlbGVtZW50IGFuZCByZXR1cm4gaXQiCiAgICBdLAogICAgIm5nZXR0ZXh0IjogWwogICAgICAgICJzdHJpbmcgbmdldHRleHQoc3RyaW5nIE1TR0lEMSwgc3RyaW5nIE1TR0lEMiwgaW50IE4pIiwKICAgICAgICAiUGx1cmFsIHZlcnNpb24gb2YgZ2V0dGV4dCgpIgogICAgXSwKICAgICJubDJiciI6IFsKICAgICAgICAic3RyaW5nIG5sMmJyKHN0cmluZyBzdHIgWywgYm9vbCBpc194aHRtbF0pIiwKICAgICAgICAiQ29udmVydHMgbmV3bGluZXMgdG8gSFRNTCBsaW5lIGJyZWFrcyIKICAgIF0sCiAgICAibmxfbGFuZ2luZm8iOiBbCiAgICAgICAgInN0cmluZyBubF9sYW5naW5mbyhpbnQgaXRlbSkiLAogICAgICAgICJRdWVyeSBsYW5ndWFnZSBhbmQgbG9jYWxlIGluZm9ybWF0aW9uIgogICAgXSwKICAgICJub3JtYWxpemVyX2lzX25vcm1hbGl6ZSI6IFsKICAgICAgICAiYm9vbCBub3JtYWxpemVyX2lzX25vcm1hbGl6ZSggc3RyaW5nICRpbnB1dCBbLCBzdHJpbmcgJGZvcm0gPSBGT1JNX0NdICkiLAogICAgICAgICIqIFRlc3QgaWYgYSBzdHJpbmcgaXMgaW4gYSBnaXZlbiBub3JtYWxpemF0aW9uIGZvcm0uIgogICAgXSwKICAgICJub3JtYWxpemVyX25vcm1hbGl6ZSI6IFsKICAgICAgICAic3RyaW5nIG5vcm1hbGl6ZXJfbm9ybWFsaXplKCBzdHJpbmcgJGlucHV0IFssIHN0cmluZyAkZm9ybSA9IEZPUk1fQ10gKSIsCiAgICAgICAgIiogTm9ybWFsaXplIGEgc3RyaW5nLiIKICAgIF0sCiAgICAibnNhcGlfcmVxdWVzdF9oZWFkZXJzIjogWwogICAgICAgICJhcnJheSBuc2FwaV9yZXF1ZXN0X2hlYWRlcnModm9pZCkiLAogICAgICAgICJHZXQgYWxsIGhlYWRlcnMgZnJvbSB0aGUgcmVxdWVzdCIKICAgIF0sCiAgICAibnNhcGlfcmVzcG9uc2VfaGVhZGVycyI6IFsKICAgICAgICAiYXJyYXkgbnNhcGlfcmVzcG9uc2VfaGVhZGVycyh2b2lkKSIsCiAgICAgICAgIkdldCBhbGwgaGVhZGVycyBmcm9tIHRoZSByZXNwb25zZSIKICAgIF0sCiAgICAibnNhcGlfdmlydHVhbCI6IFsKICAgICAgICAiYm9vbCBuc2FwaV92aXJ0dWFsKHN0cmluZyB1cmkpIiwKICAgICAgICAiUGVyZm9ybSBhbiBOU0FQSSBzdWItcmVxdWVzdCIKICAgIF0sCiAgICAibnVtYmVyX2Zvcm1hdCI6IFsKICAgICAgICAic3RyaW5nIG51bWJlcl9mb3JtYXQoZmxvYXQgbnVtYmVyIFssIGludCBudW1fZGVjaW1hbF9wbGFjZXMgWywgc3RyaW5nIGRlY19zZXBlcmF0b3IsIHN0cmluZyB0aG91c2FuZHNfc2VwZXJhdG9yXV0pIiwKICAgICAgICAiRm9ybWF0cyBhIG51bWJlciB3aXRoIGdyb3VwZWQgdGhvdXNhbmRzIgogICAgXSwKICAgICJudW1mbXRfY3JlYXRlIjogWwogICAgICAgICJOdW1iZXJGb3JtYXR0ZXIgbnVtZm10X2NyZWF0ZSggc3RyaW5nICRsb2NhbGUsIGludCBzdHlsZVssIHN0cmluZyAkcGF0dGVybiBdICkiLAogICAgICAgICIqIENyZWF0ZSBudW1iZXIgZm9ybWF0dGVyLiIKICAgIF0sCiAgICAibnVtZm10X2Zvcm1hdCI6IFsKICAgICAgICAibWl4ZWQgbnVtZm10X2Zvcm1hdCggTnVtYmVyRm9ybWF0dGVyICRuZiwgbWl4ZWQgJG51bVssIGludCB0eXBlXSApIiwKICAgICAgICAiKiBGb3JtYXQgYSBudW1iZXIuIgogICAgXSwKICAgICJudW1mbXRfZm9ybWF0X2N1cnJlbmN5IjogWwogICAgICAgICJtaXhlZCBudW1mbXRfZm9ybWF0X2N1cnJlbmN5KCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBkb3VibGUgJG51bSwgc3RyaW5nICRjdXJyZW5jeSApIiwKICAgICAgICAiKiBGb3JtYXQgYSBudW1iZXIgYXMgY3VycmVuY3kuIgogICAgXSwKICAgICJudW1mbXRfZ2V0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAibWl4ZWQgbnVtZm10X2dldF9hdHRyaWJ1dGUoIE51bWJlckZvcm1hdHRlciAkbmYsIGludCAkYXR0ciApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGF0dHJpYnV0ZSB2YWx1ZS4iCiAgICBdLAogICAgIm51bWZtdF9nZXRfZXJyb3JfY29kZSI6IFsKICAgICAgICAiaW50IG51bWZtdF9nZXRfZXJyb3JfY29kZSggTnVtYmVyRm9ybWF0dGVyICRuZiApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyJ3MgbGFzdCBlcnJvciBjb2RlLiIKICAgIF0sCiAgICAibnVtZm10X2dldF9lcnJvcl9tZXNzYWdlIjogWwogICAgICAgICJzdHJpbmcgbnVtZm10X2dldF9lcnJvcl9tZXNzYWdlKCBOdW1iZXJGb3JtYXR0ZXIgJG5mICkiLAogICAgICAgICIqIEdldCB0ZXh0IGRlc2NyaXB0aW9uIGZvciBmb3JtYXR0ZXIncyBsYXN0IGVycm9yIGNvZGUuIgogICAgXSwKICAgICJudW1mbXRfZ2V0X2xvY2FsZSI6IFsKICAgICAgICAic3RyaW5nIG51bWZtdF9nZXRfbG9jYWxlKCBOdW1iZXJGb3JtYXR0ZXIgJG5mWywgaW50IHR5cGVdICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgbG9jYWxlLiIKICAgIF0sCiAgICAibnVtZm10X2dldF9wYXR0ZXJuIjogWwogICAgICAgICJzdHJpbmcgbnVtZm10X2dldF9wYXR0ZXJuKCBOdW1iZXJGb3JtYXR0ZXIgJG5mICkiLAogICAgICAgICIqIEdldCBmb3JtYXR0ZXIgcGF0dGVybi4iCiAgICBdLAogICAgIm51bWZtdF9nZXRfc3ltYm9sIjogWwogICAgICAgICJzdHJpbmcgbnVtZm10X2dldF9zeW1ib2woIE51bWJlckZvcm1hdHRlciAkbmYsIGludCAkYXR0ciApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIHN5bWJvbCB2YWx1ZS4iCiAgICBdLAogICAgIm51bWZtdF9nZXRfdGV4dF9hdHRyaWJ1dGUiOiBbCiAgICAgICAgInN0cmluZyBudW1mbXRfZ2V0X3RleHRfYXR0cmlidXRlKCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBpbnQgJGF0dHIgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBhdHRyaWJ1dGUgdmFsdWUuIgogICAgXSwKICAgICJudW1mbXRfcGFyc2UiOiBbCiAgICAgICAgIm1peGVkIG51bWZtdF9wYXJzZSggTnVtYmVyRm9ybWF0dGVyICRuZiwgc3RyaW5nICRzdHJbLCBpbnQgJHR5cGUsIGludCAmJHBvc2l0aW9uIF0pIiwKICAgICAgICAiKiBQYXJzZSBhIG51bWJlci4iCiAgICBdLAogICAgIm51bWZtdF9wYXJzZV9jdXJyZW5jeSI6IFsKICAgICAgICAiZG91YmxlIG51bWZtdF9wYXJzZV9jdXJyZW5jeSggTnVtYmVyRm9ybWF0dGVyICRuZiwgc3RyaW5nICRzdHIsIHN0cmluZyAkJmN1cnJlbmN5WywgaW50ICQmcG9zaXRpb25dICkiLAogICAgICAgICIqIFBhcnNlIGEgbnVtYmVyIGFzIGN1cnJlbmN5LiIKICAgIF0sCiAgICAibnVtZm10X3BhcnNlX21lc3NhZ2UiOiBbCiAgICAgICAgImFycmF5IG51bWZtdF9wYXJzZV9tZXNzYWdlKCBzdHJpbmcgJGxvY2FsZSwgc3RyaW5nICRwYXR0ZXJuLCBzdHJpbmcgJHNvdXJjZSApIiwKICAgICAgICAiKiBQYXJzZSBhIG1lc3NhZ2UuIgogICAgXSwKICAgICJudW1mbXRfc2V0X2F0dHJpYnV0ZSI6IFsKICAgICAgICAiYm9vbCBudW1mbXRfc2V0X2F0dHJpYnV0ZSggTnVtYmVyRm9ybWF0dGVyICRuZiwgaW50ICRhdHRyLCBtaXhlZCAkdmFsdWUgKSIsCiAgICAgICAgIiogR2V0IGZvcm1hdHRlciBhdHRyaWJ1dGUgdmFsdWUuIgogICAgXSwKICAgICJudW1mbXRfc2V0X3BhdHRlcm4iOiBbCiAgICAgICAgImJvb2wgbnVtZm10X3NldF9wYXR0ZXJuKCBOdW1iZXJGb3JtYXR0ZXIgJG5mLCBzdHJpbmcgJHBhdHRlcm4gKSIsCiAgICAgICAgIiogU2V0IGZvcm1hdHRlciBwYXR0ZXJuLiIKICAgIF0sCiAgICAibnVtZm10X3NldF9zeW1ib2wiOiBbCiAgICAgICAgImJvb2wgbnVtZm10X3NldF9zeW1ib2woIE51bWJlckZvcm1hdHRlciAkbmYsIGludCAkYXR0ciwgc3RyaW5nICRzeW1ib2wgKSIsCiAgICAgICAgIiogU2V0IGZvcm1hdHRlciBzeW1ib2wgdmFsdWUuIgogICAgXSwKICAgICJudW1mbXRfc2V0X3RleHRfYXR0cmlidXRlIjogWwogICAgICAgICJib29sIG51bWZtdF9zZXRfdGV4dF9hdHRyaWJ1dGUoIE51bWJlckZvcm1hdHRlciAkbmYsIGludCAkYXR0ciwgc3RyaW5nICR2YWx1ZSApIiwKICAgICAgICAiKiBHZXQgZm9ybWF0dGVyIGF0dHJpYnV0ZSB2YWx1ZS4iCiAgICBdLAogICAgIm9iX2NsZWFuIjogWwogICAgICAgICJib29sIG9iX2NsZWFuKHZvaWQpIiwKICAgICAgICAiQ2xlYW4gKGRlbGV0ZSkgdGhlIGN1cnJlbnQgb3V0cHV0IGJ1ZmZlciIKICAgIF0sCiAgICAib2JfZW5kX2NsZWFuIjogWwogICAgICAgICJib29sIG9iX2VuZF9jbGVhbih2b2lkKSIsCiAgICAgICAgIkNsZWFuIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgZGVsZXRlIGN1cnJlbnQgb3V0cHV0IGJ1ZmZlciIKICAgIF0sCiAgICAib2JfZW5kX2ZsdXNoIjogWwogICAgICAgICJib29sIG9iX2VuZF9mbHVzaCh2b2lkKSIsCiAgICAgICAgIkZsdXNoIChzZW5kKSB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGRlbGV0ZSBjdXJyZW50IG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2ZsdXNoIjogWwogICAgICAgICJib29sIG9iX2ZsdXNoKHZvaWQpIiwKICAgICAgICAiRmx1c2ggKHNlbmQpIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBUaGUgbGFzdCBidWZmZXIgY29udGVudCBpcyBzZW50IHRvIG5leHQgYnVmZmVyIgogICAgXSwKICAgICJvYl9nZXRfY2xlYW4iOiBbCiAgICAgICAgImJvb2wgb2JfZ2V0X2NsZWFuKHZvaWQpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIGFuZCBkZWxldGUgY3VycmVudCBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJvYl9nZXRfY29udGVudHMiOiBbCiAgICAgICAgInN0cmluZyBvYl9nZXRfY29udGVudHModm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJvYl9nZXRfZmx1c2giOiBbCiAgICAgICAgImJvb2wgb2JfZ2V0X2ZsdXNoKHZvaWQpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzLCBmbHVzaCAoc2VuZCkgdGhlIG91dHB1dCBidWZmZXIsIGFuZCBkZWxldGUgY3VycmVudCBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJvYl9nZXRfbGVuZ3RoIjogWwogICAgICAgICJpbnQgb2JfZ2V0X2xlbmd0aCh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyIgogICAgXSwKICAgICJvYl9nZXRfbGV2ZWwiOiBbCiAgICAgICAgImludCBvYl9nZXRfbGV2ZWwodm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIG5lc3RpbmcgbGV2ZWwgb2YgdGhlIG91dHB1dCBidWZmZXIiCiAgICBdLAogICAgIm9iX2dldF9zdGF0dXMiOiBbCiAgICAgICAgImZhbHNlfGFycmF5IG9iX2dldF9zdGF0dXMoW2Jvb2wgZnVsbF9zdGF0dXNdKSIsCiAgICAgICAgIlJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBhY3RpdmUgb3IgYWxsIG91dHB1dCBidWZmZXJzIgogICAgXSwKICAgICJvYl9nemhhbmRsZXIiOiBbCiAgICAgICAgInN0cmluZyBvYl9nemhhbmRsZXIoc3RyaW5nIHN0ciwgaW50IG1vZGUpIiwKICAgICAgICAiRW5jb2RlIHN0ciBiYXNlZCBvbiBhY2NlcHQtZW5jb2Rpbmcgc2V0dGluZyAtIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIG9iX3N0YXJ0KCkiCiAgICBdLAogICAgIm9iX2ljb252X2hhbmRsZXIiOiBbCiAgICAgICAgInN0cmluZyBvYl9pY29udl9oYW5kbGVyKHN0cmluZyBjb250ZW50cywgaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHN0ciBpbiBvdXRwdXQgYnVmZmVyIGNvbnZlcnRlZCB0byB0aGUgaWNvbnYub3V0cHV0X2VuY29kaW5nIGNoYXJhY3RlciBzZXQiCiAgICBdLAogICAgIm9iX2ltcGxpY2l0X2ZsdXNoIjogWwogICAgICAgICJ2b2lkIG9iX2ltcGxpY2l0X2ZsdXNoKFtpbnQgZmxhZ10pIiwKICAgICAgICAiVHVybiBpbXBsaWNpdCBmbHVzaCBvbi9vZmYgYW5kIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBmbHVzaCgpIGFmdGVyIGV2ZXJ5IG91dHB1dCBjYWxsIgogICAgXSwKICAgICJvYl9saXN0X2hhbmRsZXJzIjogWwogICAgICAgICJmYWxzZXxhcnJheSBvYl9saXN0X2hhbmRsZXJzKCkiLAogICAgICAgICIqICBMaXN0IGFsbCBvdXRwdXRfYnVmZmVycyBpbiBhbiBhcnJheSIKICAgIF0sCiAgICAib2Jfc3RhcnQiOiBbCiAgICAgICAgImJvb2wgb2Jfc3RhcnQoWyBzdHJpbmd8YXJyYXkgdXNlcl9mdW5jdGlvbiBbLCBpbnQgY2h1bmtfc2l6ZSBbLCBib29sIGVyYXNlXV1dKSIsCiAgICAgICAgIlR1cm4gb24gT3V0cHV0IEJ1ZmZlcmluZyAoc3BlY2lmeWluZyBhbiBvcHRpb25hbCBvdXRwdXQgaGFuZGxlcikuIgogICAgXSwKICAgICJvY2lfYmluZF9hcnJheV9ieV9uYW1lIjogWwogICAgICAgICJib29sIG9jaV9iaW5kX2FycmF5X2J5X25hbWUocmVzb3VyY2Ugc3RtdCwgc3RyaW5nIG5hbWUsIGFycmF5ICZ2YXIsIGludCBtYXhfdGFibGVfbGVuZ3RoIFssIGludCBtYXhfaXRlbV9sZW5ndGggWywgaW50IHR5cGUgXV0pIiwKICAgICAgICAiQmluZCBhIFBIUCBhcnJheSB0byBhbiBPcmFjbGUgUEwvU1FMIHR5cGUgYnkgbmFtZSIKICAgIF0sCiAgICAib2NpX2JpbmRfYnlfbmFtZSI6IFsKICAgICAgICAiYm9vbCBvY2lfYmluZF9ieV9uYW1lKHJlc291cmNlIHN0bXQsIHN0cmluZyBuYW1lLCBtaXhlZCAmdmFyLCBbLCBpbnQgbWF4bGVuZ3RoIFssIGludCB0eXBlXV0pIiwKICAgICAgICAiQmluZCBhIFBIUCB2YXJpYWJsZSB0byBhbiBPcmFjbGUgcGxhY2Vob2xkZXIgYnkgbmFtZSIKICAgIF0sCiAgICAib2NpX2NhbmNlbCI6IFsKICAgICAgICAiYm9vbCBvY2lfY2FuY2VsKHJlc291cmNlIHN0bXQpIiwKICAgICAgICAiQ2FuY2VsIHJlYWRpbmcgZnJvbSBhIGN1cnNvciIKICAgIF0sCiAgICAib2NpX2Nsb3NlIjogWwogICAgICAgICJib29sIG9jaV9jbG9zZShyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIkRpc2Nvbm5lY3QgZnJvbSBkYXRhYmFzZSIKICAgIF0sCiAgICAib2NpX2NvbGxlY3Rpb25fYXBwZW5kIjogWwogICAgICAgICJib29sIG9jaV9jb2xsZWN0aW9uX2FwcGVuZChzdHJpbmcgdmFsdWUpIiwKICAgICAgICAiQXBwZW5kIGFuIG9iamVjdCB0byB0aGUgY29sbGVjdGlvbiIKICAgIF0sCiAgICAib2NpX2NvbGxlY3Rpb25fYXNzaWduIjogWwogICAgICAgICJib29sIG9jaV9jb2xsZWN0aW9uX2Fzc2lnbihvYmplY3QgZnJvbSkiLAogICAgICAgICJBc3NpZ24gYSBjb2xsZWN0aW9uIGZyb20gYW5vdGhlciBleGlzdGluZyBjb2xsZWN0aW9uIgogICAgXSwKICAgICJvY2lfY29sbGVjdGlvbl9lbGVtZW50X2Fzc2lnbiI6IFsKICAgICAgICAiYm9vbCBvY2lfY29sbGVjdGlvbl9lbGVtZW50X2Fzc2lnbihpbnQgaW5kZXgsIHN0cmluZyB2YWwpIiwKICAgICAgICAiQXNzaWduIGVsZW1lbnQgdmFsIHRvIGNvbGxlY3Rpb24gYXQgaW5kZXggbmR4IgogICAgXSwKICAgICJvY2lfY29sbGVjdGlvbl9lbGVtZW50X2dldCI6IFsKICAgICAgICAic3RyaW5nIG9jaV9jb2xsZWN0aW9uX2VsZW1lbnRfZ2V0KGludCBuZHgpIiwKICAgICAgICAiUmV0cmlldmUgdGhlIHZhbHVlIGF0IGNvbGxlY3Rpb24gaW5kZXggbmR4IgogICAgXSwKICAgICJvY2lfY29sbGVjdGlvbl9tYXgiOiBbCiAgICAgICAgImludCBvY2lfY29sbGVjdGlvbl9tYXgoKSIsCiAgICAgICAgIlJldHVybiB0aGUgbWF4IHZhbHVlIG9mIGEgY29sbGVjdGlvbi4gRm9yIGEgdmFycmF5IHRoaXMgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBhcnJheSIKICAgIF0sCiAgICAib2NpX2NvbGxlY3Rpb25fc2l6ZSI6IFsKICAgICAgICAiaW50IG9jaV9jb2xsZWN0aW9uX3NpemUoKSIsCiAgICAgICAgIlJldHVybiB0aGUgc2l6ZSBvZiBhIGNvbGxlY3Rpb24iCiAgICBdLAogICAgIm9jaV9jb2xsZWN0aW9uX3RyaW0iOiBbCiAgICAgICAgImJvb2wgb2NpX2NvbGxlY3Rpb25fdHJpbShpbnQgbnVtKSIsCiAgICAgICAgIlRyaW0gbnVtIGVsZW1lbnRzIGZyb20gdGhlIGVuZCBvZiBhIGNvbGxlY3Rpb24iCiAgICBdLAogICAgIm9jaV9jb21taXQiOiBbCiAgICAgICAgImJvb2wgb2NpX2NvbW1pdChyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIkNvbW1pdCB0aGUgY3VycmVudCBjb250ZXh0IgogICAgXSwKICAgICJvY2lfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2Ugb2NpX2Nvbm5lY3Qoc3RyaW5nIHVzZXIsIHN0cmluZyBwYXNzIFssIHN0cmluZyBkYiBbLCBzdHJpbmcgY2hhcnNldCBbLCBpbnQgc2Vzc2lvbl9tb2RlIF1dKSIsCiAgICAgICAgIkNvbm5lY3QgdG8gYW4gT3JhY2xlIGRhdGFiYXNlIGFuZCBsb2cgb24uIFJldHVybnMgYSBuZXcgc2Vzc2lvbi4iCiAgICBdLAogICAgIm9jaV9kZWZpbmVfYnlfbmFtZSI6IFsKICAgICAgICAiYm9vbCBvY2lfZGVmaW5lX2J5X25hbWUocmVzb3VyY2Ugc3RtdCwgc3RyaW5nIG5hbWUsIG1peGVkICZ2YXIgWywgaW50IHR5cGVdKSIsCiAgICAgICAgIkRlZmluZSBhIFBIUCB2YXJpYWJsZSB0byBhbiBPcmFjbGUgY29sdW1uIGJ5IG5hbWUiCiAgICBdLAogICAgIm9jaV9lcnJvciI6IFsKICAgICAgICAiYXJyYXkgb2NpX2Vycm9yKFtyZXNvdXJjZSBzdG10fGNvbm5lY3Rpb258Z2xvYmFsXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGxhc3QgZXJyb3Igb2Ygc3RtdHxjb25uZWN0aW9ufGdsb2JhbC4gSWYgbm8gZXJyb3IgaGFwcGVuZWQgcmV0dXJucyBmYWxzZS4iCiAgICBdLAogICAgIm9jaV9leGVjdXRlIjogWwogICAgICAgICJib29sIG9jaV9leGVjdXRlKHJlc291cmNlIHN0bXQgWywgaW50IG1vZGVdKSIsCiAgICAgICAgIkV4ZWN1dGUgYSBwYXJzZWQgc3RhdGVtZW50IgogICAgXSwKICAgICJvY2lfZmV0Y2giOiBbCiAgICAgICAgImJvb2wgb2NpX2ZldGNoKHJlc291cmNlIHN0bXQpIiwKICAgICAgICAiUHJlcGFyZSBhIG5ldyByb3cgb2YgZGF0YSBmb3IgcmVhZGluZyIKICAgIF0sCiAgICAib2NpX2ZldGNoX2FsbCI6IFsKICAgICAgICAiaW50IG9jaV9mZXRjaF9hbGwocmVzb3VyY2Ugc3RtdCwgYXJyYXkgJm91dHB1dFssIGludCBza2lwWywgaW50IG1heHJvd3NbLCBpbnQgZmxhZ3NdXV0pIiwKICAgICAgICAiRmV0Y2ggYWxsIHJvd3Mgb2YgcmVzdWx0IGRhdGEgaW50byBhbiBhcnJheSIKICAgIF0sCiAgICAib2NpX2ZldGNoX2FycmF5IjogWwogICAgICAgICJhcnJheSBvY2lfZmV0Y2hfYXJyYXkoIHJlc291cmNlIHN0bXQgWywgaW50IG1vZGUgXSkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gYXJyYXkiCiAgICBdLAogICAgIm9jaV9mZXRjaF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgb2NpX2ZldGNoX2Fzc29jKCByZXNvdXJjZSBzdG10ICkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkiCiAgICBdLAogICAgIm9jaV9mZXRjaF9vYmplY3QiOiBbCiAgICAgICAgIm9iamVjdCBvY2lfZmV0Y2hfb2JqZWN0KCByZXNvdXJjZSBzdG10ICkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gb2JqZWN0IgogICAgXSwKICAgICJvY2lfZmV0Y2hfcm93IjogWwogICAgICAgICJhcnJheSBvY2lfZmV0Y2hfcm93KCByZXNvdXJjZSBzdG10ICkiLAogICAgICAgICJGZXRjaCBhIHJlc3VsdCByb3cgYXMgYW4gZW51bWVyYXRlZCBhcnJheSIKICAgIF0sCiAgICAib2NpX2ZpZWxkX2lzX251bGwiOiBbCiAgICAgICAgImJvb2wgb2NpX2ZpZWxkX2lzX251bGwocmVzb3VyY2Ugc3RtdCwgaW50IGNvbCkiLAogICAgICAgICJUZWxsIHdoZXRoZXIgYSBjb2x1bW4gaXMgTlVMTCIKICAgIF0sCiAgICAib2NpX2ZpZWxkX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBvY2lfZmllbGRfbmFtZShyZXNvdXJjZSBzdG10LCBpbnQgY29sKSIsCiAgICAgICAgIlRlbGwgdGhlIG5hbWUgb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9jaV9maWVsZF9wcmVjaXNpb24iOiBbCiAgICAgICAgImludCBvY2lfZmllbGRfcHJlY2lzaW9uKHJlc291cmNlIHN0bXQsIGludCBjb2wpIiwKICAgICAgICAiVGVsbCB0aGUgcHJlY2lzaW9uIG9mIGEgY29sdW1uIgogICAgXSwKICAgICJvY2lfZmllbGRfc2NhbGUiOiBbCiAgICAgICAgImludCBvY2lfZmllbGRfc2NhbGUocmVzb3VyY2Ugc3RtdCwgaW50IGNvbCkiLAogICAgICAgICJUZWxsIHRoZSBzY2FsZSBvZiBhIGNvbHVtbiIKICAgIF0sCiAgICAib2NpX2ZpZWxkX3NpemUiOiBbCiAgICAgICAgImludCBvY2lfZmllbGRfc2l6ZShyZXNvdXJjZSBzdG10LCBpbnQgY29sKSIsCiAgICAgICAgIlRlbGwgdGhlIG1heGltdW0gZGF0YSBzaXplIG9mIGEgY29sdW1uIgogICAgXSwKICAgICJvY2lfZmllbGRfdHlwZSI6IFsKICAgICAgICAibWl4ZWQgb2NpX2ZpZWxkX3R5cGUocmVzb3VyY2Ugc3RtdCwgaW50IGNvbCkiLAogICAgICAgICJUZWxsIHRoZSBkYXRhIHR5cGUgb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9jaV9maWVsZF90eXBlX3JhdyI6IFsKICAgICAgICAiaW50IG9jaV9maWVsZF90eXBlX3JhdyhyZXNvdXJjZSBzdG10LCBpbnQgY29sKSIsCiAgICAgICAgIlRlbGwgdGhlIHJhdyBvcmFjbGUgZGF0YSB0eXBlIG9mIGEgY29sdW1uIgogICAgXSwKICAgICJvY2lfZnJlZV9jb2xsZWN0aW9uIjogWwogICAgICAgICJib29sIG9jaV9mcmVlX2NvbGxlY3Rpb24oKSIsCiAgICAgICAgIkRlbGV0ZXMgY29sbGVjdGlvbiBvYmplY3QiCiAgICBdLAogICAgIm9jaV9mcmVlX2Rlc2NyaXB0b3IiOiBbCiAgICAgICAgImJvb2wgb2NpX2ZyZWVfZGVzY3JpcHRvcigpIiwKICAgICAgICAiRGVsZXRlcyBsYXJnZSBvYmplY3QgZGVzY3JpcHRpb24iCiAgICBdLAogICAgIm9jaV9mcmVlX3N0YXRlbWVudCI6IFsKICAgICAgICAiYm9vbCBvY2lfZnJlZV9zdGF0ZW1lbnQocmVzb3VyY2Ugc3RtdCkiLAogICAgICAgICJGcmVlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgc3RhdGVtZW50IgogICAgXSwKICAgICJvY2lfaW50ZXJuYWxfZGVidWciOiBbCiAgICAgICAgInZvaWQgb2NpX2ludGVybmFsX2RlYnVnKGludCBvbm9mZikiLAogICAgICAgICJUb2dnbGUgaW50ZXJuYWwgZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIE9DSSBleHRlbnNpb24iCiAgICBdLAogICAgIm9jaV9sb2JfYXBwZW5kIjogWwogICAgICAgICJib29sIG9jaV9sb2JfYXBwZW5kKCBvYmplY3QgbG9iICkiLAogICAgICAgICJBcHBlbmRzIGRhdGEgZnJvbSBhIExPQiB0byBhbm90aGVyIExPQiIKICAgIF0sCiAgICAib2NpX2xvYl9jbG9zZSI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX2Nsb3NlKCkiLAogICAgICAgICJDbG9zZXMgbG9iIGRlc2NyaXB0b3IiCiAgICBdLAogICAgIm9jaV9sb2JfY29weSI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX2NvcHkoIG9iamVjdCBsb2JfdG8sIG9iamVjdCBsb2JfZnJvbSBbLCBpbnQgbGVuZ3RoIF0gKSIsCiAgICAgICAgIkNvcGllcyBkYXRhIGZyb20gYSBMT0IgdG8gYW5vdGhlciBMT0IiCiAgICBdLAogICAgIm9jaV9sb2JfZW9mIjogWwogICAgICAgICJib29sIG9jaV9sb2JfZW9mKCkiLAogICAgICAgICJDaGVja3MgaWYgRU9GIGlzIHJlYWNoZWQiCiAgICBdLAogICAgIm9jaV9sb2JfZXJhc2UiOiBbCiAgICAgICAgImludCBvY2lfbG9iX2VyYXNlKCBbIGludCBvZmZzZXQgWywgaW50IGxlbmd0aCBdIF0gKSIsCiAgICAgICAgIkVyYXNlcyBhIHNwZWNpZmllZCBwb3J0aW9uIG9mIHRoZSBpbnRlcm5hbCBMT0IsIHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWVkIG9mZnNldCIKICAgIF0sCiAgICAib2NpX2xvYl9leHBvcnQiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9leHBvcnQoW3N0cmluZyBmaWxlbmFtZSBbLCBpbnQgc3RhcnQgWywgaW50IGxlbmd0aF1dXSkiLAogICAgICAgICJXcml0ZXMgYSBsYXJnZSBvYmplY3QgaW50byBhIGZpbGUiCiAgICBdLAogICAgIm9jaV9sb2JfZmx1c2giOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9mbHVzaCggWyBpbnQgZmxhZyBdICkiLAogICAgICAgICJGbHVzaGVzIHRoZSBMT0IgYnVmZmVyIgogICAgXSwKICAgICJvY2lfbG9iX2ltcG9ydCI6IFsKICAgICAgICAiYm9vbCBvY2lfbG9iX2ltcG9ydCggc3RyaW5nIGZpbGVuYW1lICkiLAogICAgICAgICJMb2FkcyBmaWxlIGludG8gYSBMT0IiCiAgICBdLAogICAgIm9jaV9sb2JfaXNfZXF1YWwiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9pc19lcXVhbCggb2JqZWN0IGxvYjEsIG9iamVjdCBsb2IyICkiLAogICAgICAgICJUZXN0cyB0byBzZWUgaWYgdHdvIExPQi9GSUxFIGxvY2F0b3JzIGFyZSBlcXVhbCIKICAgIF0sCiAgICAib2NpX2xvYl9sb2FkIjogWwogICAgICAgICJzdHJpbmcgb2NpX2xvYl9sb2FkKCkiLAogICAgICAgICJMb2FkcyBhIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAib2NpX2xvYl9yZWFkIjogWwogICAgICAgICJzdHJpbmcgb2NpX2xvYl9yZWFkKCBpbnQgbGVuZ3RoICkiLAogICAgICAgICJSZWFkcyBwYXJ0aWN1bGFyIHBhcnQgb2YgYSBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgIm9jaV9sb2JfcmV3aW5kIjogWwogICAgICAgICJib29sIG9jaV9sb2JfcmV3aW5kKCkiLAogICAgICAgICJSZXdpbmQgcG9pbnRlciBvZiBhIExPQiIKICAgIF0sCiAgICAib2NpX2xvYl9zYXZlIjogWwogICAgICAgICJib29sIG9jaV9sb2Jfc2F2ZSggc3RyaW5nIGRhdGEgWywgaW50IG9mZnNldCBdKSIsCiAgICAgICAgIlNhdmVzIGEgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJvY2lfbG9iX3NlZWsiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl9zZWVrKCBpbnQgb2Zmc2V0IFssIGludCB3aGVuY2UgXSkiLAogICAgICAgICJNb3ZlcyB0aGUgcG9pbnRlciBvZiBhIExPQiIKICAgIF0sCiAgICAib2NpX2xvYl9zaXplIjogWwogICAgICAgICJpbnQgb2NpX2xvYl9zaXplKCkiLAogICAgICAgICJSZXR1cm5zIHNpemUgb2YgYSBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgIm9jaV9sb2JfdGVsbCI6IFsKICAgICAgICAiaW50IG9jaV9sb2JfdGVsbCgpIiwKICAgICAgICAiVGVsbHMgTE9CIHBvaW50ZXIgcG9zaXRpb24iCiAgICBdLAogICAgIm9jaV9sb2JfdHJ1bmNhdGUiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl90cnVuY2F0ZSggWyBpbnQgbGVuZ3RoIF0pIiwKICAgICAgICAiVHJ1bmNhdGVzIGEgTE9CIgogICAgXSwKICAgICJvY2lfbG9iX3dyaXRlIjogWwogICAgICAgICJpbnQgb2NpX2xvYl93cml0ZSggc3RyaW5nIHN0cmluZyBbLCBpbnQgbGVuZ3RoIF0pIiwKICAgICAgICAiV3JpdGVzIGRhdGEgdG8gY3VycmVudCBwb3NpdGlvbiBvZiBhIExPQiIKICAgIF0sCiAgICAib2NpX2xvYl93cml0ZV90ZW1wb3JhcnkiOiBbCiAgICAgICAgImJvb2wgb2NpX2xvYl93cml0ZV90ZW1wb3Jhcnkoc3RyaW5nIHZhciBbLCBpbnQgbG9iX3R5cGVdKSIsCiAgICAgICAgIldyaXRlcyB0ZW1wb3JhcnkgYmxvYiIKICAgIF0sCiAgICAib2NpX25ld19jb2xsZWN0aW9uIjogWwogICAgICAgICJvYmplY3Qgb2NpX25ld19jb2xsZWN0aW9uKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyB0ZG8gWywgc3RyaW5nIHNjaGVtYV0pIiwKICAgICAgICAiSW5pdGlhbGl6ZSBhIG5ldyBjb2xsZWN0aW9uIgogICAgXSwKICAgICJvY2lfbmV3X2Nvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIG9jaV9uZXdfY29ubmVjdChzdHJpbmcgdXNlciwgc3RyaW5nIHBhc3MgWywgc3RyaW5nIGRiXSkiLAogICAgICAgICJDb25uZWN0IHRvIGFuIE9yYWNsZSBkYXRhYmFzZSBhbmQgbG9nIG9uLiBSZXR1cm5zIGEgbmV3IHNlc3Npb24uIgogICAgXSwKICAgICJvY2lfbmV3X2N1cnNvciI6IFsKICAgICAgICAicmVzb3VyY2Ugb2NpX25ld19jdXJzb3IocmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJSZXR1cm4gYSBuZXcgY3Vyc29yIChTdGF0ZW1lbnQtSGFuZGxlKSAtIHVzZSB0aGlzIHRvIGJpbmQgcmVmLWN1cnNvcnMhIgogICAgXSwKICAgICJvY2lfbmV3X2Rlc2NyaXB0b3IiOiBbCiAgICAgICAgIm9iamVjdCBvY2lfbmV3X2Rlc2NyaXB0b3IocmVzb3VyY2UgY29ubmVjdGlvbiBbLCBpbnQgdHlwZV0pIiwKICAgICAgICAiSW5pdGlhbGl6ZSBhIG5ldyBlbXB0eSBkZXNjcmlwdG9yIExPQi9GSUxFIChMT0IgaXMgZGVmYXVsdCkiCiAgICBdLAogICAgIm9jaV9udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgb2NpX251bV9maWVsZHMocmVzb3VyY2Ugc3RtdCkiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiByZXN1bHQgY29sdW1ucyBpbiBhIHN0YXRlbWVudCIKICAgIF0sCiAgICAib2NpX251bV9yb3dzIjogWwogICAgICAgICJpbnQgb2NpX251bV9yb3dzKHJlc291cmNlIHN0bXQpIiwKICAgICAgICAiUmV0dXJuIHRoZSByb3cgY291bnQgb2YgYW4gT0NJIHN0YXRlbWVudCIKICAgIF0sCiAgICAib2NpX3BhcnNlIjogWwogICAgICAgICJyZXNvdXJjZSBvY2lfcGFyc2UocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHF1ZXJ5KSIsCiAgICAgICAgIlBhcnNlIGEgcXVlcnkgYW5kIHJldHVybiBhIHN0YXRlbWVudCIKICAgIF0sCiAgICAib2NpX3Bhc3N3b3JkX2NoYW5nZSI6IFsKICAgICAgICAiYm9vbCBvY2lfcGFzc3dvcmRfY2hhbmdlKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyB1c2VybmFtZSwgc3RyaW5nIG9sZF9wYXNzd29yZCwgc3RyaW5nIG5ld19wYXNzd29yZCkiLAogICAgICAgICJDaGFuZ2VzIHRoZSBwYXNzd29yZCBvZiBhbiBhY2NvdW50IgogICAgXSwKICAgICJvY2lfcGNvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIG9jaV9wY29ubmVjdChzdHJpbmcgdXNlciwgc3RyaW5nIHBhc3MgWywgc3RyaW5nIGRiIFssIHN0cmluZyBjaGFyc2V0IF1dKSIsCiAgICAgICAgIkNvbm5lY3QgdG8gYW4gT3JhY2xlIGRhdGFiYXNlIHVzaW5nIGEgcGVyc2lzdGVudCBjb25uZWN0aW9uIGFuZCBsb2cgb24uIFJldHVybnMgYSBuZXcgc2Vzc2lvbi4iCiAgICBdLAogICAgIm9jaV9yZXN1bHQiOiBbCiAgICAgICAgInN0cmluZyBvY2lfcmVzdWx0KHJlc291cmNlIHN0bXQsIG1peGVkIGNvbHVtbikiLAogICAgICAgICJSZXR1cm4gYSBzaW5nbGUgY29sdW1uIG9mIHJlc3VsdCBkYXRhIgogICAgXSwKICAgICJvY2lfcm9sbGJhY2siOiBbCiAgICAgICAgImJvb2wgb2NpX3JvbGxiYWNrKHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiUm9sbGJhY2sgdGhlIGN1cnJlbnQgY29udGV4dCIKICAgIF0sCiAgICAib2NpX3NlcnZlcl92ZXJzaW9uIjogWwogICAgICAgICJzdHJpbmcgb2NpX3NlcnZlcl92ZXJzaW9uKHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgc2VydmVyIHZlcnNpb24gaW5mb3JtYXRpb24iCiAgICBdLAogICAgIm9jaV9zZXRfYWN0aW9uIjogWwogICAgICAgICJib29sIG9jaV9zZXRfYWN0aW9uKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyB2YWx1ZSkiLAogICAgICAgICJTZXRzIHRoZSBhY3Rpb24gYXR0cmlidXRlIG9uIHRoZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJvY2lfc2V0X2NsaWVudF9pZGVudGlmaWVyIjogWwogICAgICAgICJib29sIG9jaV9zZXRfY2xpZW50X2lkZW50aWZpZXIocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlNldHMgdGhlIGNsaWVudCBpZGVudGlmaWVyIGF0dHJpYnV0ZSBvbiB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAib2NpX3NldF9jbGllbnRfaW5mbyI6IFsKICAgICAgICAiYm9vbCBvY2lfc2V0X2NsaWVudF9pbmZvKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyB2YWx1ZSkiLAogICAgICAgICJTZXRzIHRoZSBjbGllbnQgaW5mbyBhdHRyaWJ1dGUgb24gdGhlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm9jaV9zZXRfZWRpdGlvbiI6IFsKICAgICAgICAiYm9vbCBvY2lfc2V0X2VkaXRpb24oc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlNldHMgdGhlIGVkaXRpb24gYXR0cmlidXRlIGZvciBhbGwgc3Vic2VxdWVudCBjb25uZWN0aW9ucyBjcmVhdGVkIgogICAgXSwKICAgICJvY2lfc2V0X21vZHVsZV9uYW1lIjogWwogICAgICAgICJib29sIG9jaV9zZXRfbW9kdWxlX25hbWUocmVzb3VyY2UgY29ubmVjdGlvbiwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIlNldHMgdGhlIG1vZHVsZSBhdHRyaWJ1dGUgb24gdGhlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgIm9jaV9zZXRfcHJlZmV0Y2giOiBbCiAgICAgICAgImJvb2wgb2NpX3NldF9wcmVmZXRjaChyZXNvdXJjZSBzdG10LCBpbnQgcHJlZmV0Y2hfcm93cykiLAogICAgICAgICJTZXRzIHRoZSBudW1iZXIgb2Ygcm93cyB0byBiZSBwcmVmZXRjaGVkIG9uIGV4ZWN1dGUgdG8gcHJlZmV0Y2hfcm93cyBmb3Igc3RtdCIKICAgIF0sCiAgICAib2NpX3N0YXRlbWVudF90eXBlIjogWwogICAgICAgICJzdHJpbmcgb2NpX3N0YXRlbWVudF90eXBlKHJlc291cmNlIHN0bXQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBxdWVyeSB0eXBlIG9mIGFuIE9DSSBzdGF0ZW1lbnQiCiAgICBdLAogICAgIm9jaWZldGNoaW50byI6IFsKICAgICAgICAiaW50IG9jaWZldGNoaW50byhyZXNvdXJjZSBzdG10LCBhcnJheSAmb3V0cHV0IFssIGludCBtb2RlXSkiLAogICAgICAgICJGZXRjaCBhIHJvdyBvZiByZXN1bHQgZGF0YSBpbnRvIGFuIGFycmF5IgogICAgXSwKICAgICJvY2lnZXRidWZmZXJpbmdsb2IiOiBbCiAgICAgICAgImJvb2wgb2NpZ2V0YnVmZmVyaW5nbG9iKCkiLAogICAgICAgICJSZXR1cm5zIGN1cnJlbnQgc3RhdGUgb2YgYnVmZmVyaW5nIGZvciBhIExPQiIKICAgIF0sCiAgICAib2Npc2V0YnVmZmVyaW5nbG9iIjogWwogICAgICAgICJib29sIG9jaXNldGJ1ZmZlcmluZ2xvYiggYm9vbGVhbiBmbGFnICkiLAogICAgICAgICJFbmFibGVzL2Rpc2FibGVzIGJ1ZmZlcmluZyBmb3IgYSBMT0IiCiAgICBdLAogICAgIm9jdGRlYyI6IFsKICAgICAgICAiaW50IG9jdGRlYyhzdHJpbmcgb2N0YWxfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGRlY2ltYWwgZXF1aXZhbGVudCBvZiBhbiBvY3RhbCBzdHJpbmciCiAgICBdLAogICAgIm9kYmNfYXV0b2NvbW1pdCI6IFsKICAgICAgICAibWl4ZWQgb2RiY19hdXRvY29tbWl0KHJlc291cmNlIGNvbm5lY3Rpb25faWQgWywgaW50IE9uT2ZmXSkiLAogICAgICAgICJUb2dnbGUgYXV0b2NvbW1pdCBtb2RlIG9yIGdldCBzdGF0dXMiCiAgICBdLAogICAgIm9kYmNfYmlubW9kZSI6IFsKICAgICAgICAiYm9vbCBvZGJjX2Jpbm1vZGUoaW50IHJlc3VsdF9pZCwgaW50IG1vZGUpIiwKICAgICAgICAiSGFuZGxlIGJpbmFyeSBjb2x1bW4gZGF0YSIKICAgIF0sCiAgICAib2RiY19jbG9zZSI6IFsKICAgICAgICAidm9pZCBvZGJjX2Nsb3NlKHJlc291cmNlIGNvbm5lY3Rpb25faWQpIiwKICAgICAgICAiQ2xvc2UgYW4gT0RCQyBjb25uZWN0aW9uIgogICAgXSwKICAgICJvZGJjX2Nsb3NlX2FsbCI6IFsKICAgICAgICAidm9pZCBvZGJjX2Nsb3NlX2FsbCh2b2lkKSIsCiAgICAgICAgIkNsb3NlIGFsbCBPREJDIGNvbm5lY3Rpb25zIgogICAgXSwKICAgICJvZGJjX2NvbHVtbnByaXZpbGVnZXMiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfY29sdW1ucHJpdmlsZWdlcyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBzdHJpbmcgY2F0YWxvZywgc3RyaW5nIHNjaGVtYSwgc3RyaW5nIHRhYmxlLCBzdHJpbmcgY29sdW1uKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciB0aGF0IGNhbiBiZSB1c2VkIHRvIGZldGNoIGEgbGlzdCBvZiBjb2x1bW5zIGFuZCBhc3NvY2lhdGVkIHByaXZpbGVnZXMgZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUiCiAgICBdLAogICAgIm9kYmNfY29sdW1ucyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19jb2x1bW5zKHJlc291cmNlIGNvbm5lY3Rpb25faWQgWywgc3RyaW5nIHF1YWxpZmllciBbLCBzdHJpbmcgb3duZXIgWywgc3RyaW5nIHRhYmxlX25hbWUgWywgc3RyaW5nIGNvbHVtbl9uYW1lXV1dXSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBmZXRjaCBhIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGluIHNwZWNpZmllZCB0YWJsZXMiCiAgICBdLAogICAgIm9kYmNfY29tbWl0IjogWwogICAgICAgICJib29sIG9kYmNfY29tbWl0KHJlc291cmNlIGNvbm5lY3Rpb25faWQpIiwKICAgICAgICAiQ29tbWl0IGFuIE9EQkMgdHJhbnNhY3Rpb24iCiAgICBdLAogICAgIm9kYmNfY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19jb25uZWN0KHN0cmluZyBEU04sIHN0cmluZyB1c2VyLCBzdHJpbmcgcGFzc3dvcmQgWywgaW50IGN1cnNvcl9vcHRpb25dKSIsCiAgICAgICAgIkNvbm5lY3QgdG8gYSBkYXRhc291cmNlIgogICAgXSwKICAgICJvZGJjX2N1cnNvciI6IFsKICAgICAgICAic3RyaW5nIG9kYmNfY3Vyc29yKHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJHZXQgY3Vyc29yIG5hbWUiCiAgICBdLAogICAgIm9kYmNfZGF0YV9zb3VyY2UiOiBbCiAgICAgICAgImFycmF5IG9kYmNfZGF0YV9zb3VyY2UocmVzb3VyY2UgY29ubmVjdGlvbl9pZCwgaW50IGZldGNoX3R5cGUpIiwKICAgICAgICAiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgY29ubmVjdGVkIGRhdGEgc291cmNlIgogICAgXSwKICAgICJvZGJjX2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgb2RiY19lcnJvcihbcmVzb3VyY2UgY29ubmVjdGlvbl9pZF0pIiwKICAgICAgICAiR2V0IHRoZSBsYXN0IGVycm9yIGNvZGUiCiAgICBdLAogICAgIm9kYmNfZXJyb3Jtc2ciOiBbCiAgICAgICAgInN0cmluZyBvZGJjX2Vycm9ybXNnKFtyZXNvdXJjZSBjb25uZWN0aW9uX2lkXSkiLAogICAgICAgICJHZXQgdGhlIGxhc3QgZXJyb3IgbWVzc2FnZSIKICAgIF0sCiAgICAib2RiY19leGVjIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX2V4ZWMocmVzb3VyY2UgY29ubmVjdGlvbl9pZCwgc3RyaW5nIHF1ZXJ5IFssIGludCBmbGFnc10pIiwKICAgICAgICAiUHJlcGFyZSBhbmQgZXhlY3V0ZSBhbiBTUUwgc3RhdGVtZW50IgogICAgXSwKICAgICJvZGJjX2V4ZWN1dGUiOiBbCiAgICAgICAgImJvb2wgb2RiY19leGVjdXRlKHJlc291cmNlIHJlc3VsdF9pZCBbLCBhcnJheSBwYXJhbWV0ZXJzX2FycmF5XSkiLAogICAgICAgICJFeGVjdXRlIGEgcHJlcGFyZWQgc3RhdGVtZW50IgogICAgXSwKICAgICJvZGJjX2ZldGNoX2FycmF5IjogWwogICAgICAgICJhcnJheSBvZGJjX2ZldGNoX2FycmF5KGludCByZXN1bHQgWywgaW50IHJvd251bWJlcl0pIiwKICAgICAgICAiRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IgogICAgXSwKICAgICJvZGJjX2ZldGNoX2ludG8iOiBbCiAgICAgICAgImludCBvZGJjX2ZldGNoX2ludG8ocmVzb3VyY2UgcmVzdWx0X2lkLCBhcnJheSAmcmVzdWx0X2FycmF5LCBbLCBpbnQgcm93bnVtYmVyXSkiLAogICAgICAgICJGZXRjaCBvbmUgcmVzdWx0IHJvdyBpbnRvIGFuIGFycmF5IgogICAgXSwKICAgICJvZGJjX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IG9kYmNfZmV0Y2hfb2JqZWN0KGludCByZXN1bHQgWywgaW50IHJvd251bWJlcl0pIiwKICAgICAgICAiRmV0Y2ggYSByZXN1bHQgcm93IGFzIGFuIG9iamVjdCIKICAgIF0sCiAgICAib2RiY19mZXRjaF9yb3ciOiBbCiAgICAgICAgImJvb2wgb2RiY19mZXRjaF9yb3cocmVzb3VyY2UgcmVzdWx0X2lkIFssIGludCByb3dfbnVtYmVyXSkiLAogICAgICAgICJGZXRjaCBhIHJvdyIKICAgIF0sCiAgICAib2RiY19maWVsZF9sZW4iOiBbCiAgICAgICAgImludCBvZGJjX2ZpZWxkX2xlbihyZXNvdXJjZSByZXN1bHRfaWQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiR2V0IHRoZSBsZW5ndGggKHByZWNpc2lvbikgb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9kYmNfZmllbGRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIG9kYmNfZmllbGRfbmFtZShyZXNvdXJjZSByZXN1bHRfaWQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiR2V0IGEgY29sdW1uIG5hbWUiCiAgICBdLAogICAgIm9kYmNfZmllbGRfbnVtIjogWwogICAgICAgICJpbnQgb2RiY19maWVsZF9udW0ocmVzb3VyY2UgcmVzdWx0X2lkLCBzdHJpbmcgZmllbGRfbmFtZSkiLAogICAgICAgICJSZXR1cm4gY29sdW1uIG51bWJlciIKICAgIF0sCiAgICAib2RiY19maWVsZF9zY2FsZSI6IFsKICAgICAgICAiaW50IG9kYmNfZmllbGRfc2NhbGUocmVzb3VyY2UgcmVzdWx0X2lkLCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIkdldCB0aGUgc2NhbGUgb2YgYSBjb2x1bW4iCiAgICBdLAogICAgIm9kYmNfZmllbGRfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIG9kYmNfZmllbGRfdHlwZShyZXNvdXJjZSByZXN1bHRfaWQsIGludCBmaWVsZF9udW1iZXIpIiwKICAgICAgICAiR2V0IHRoZSBkYXRhdHlwZSBvZiBhIGNvbHVtbiIKICAgIF0sCiAgICAib2RiY19mb3JlaWdua2V5cyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19mb3JlaWdua2V5cyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBzdHJpbmcgcGtfcXVhbGlmaWVyLCBzdHJpbmcgcGtfb3duZXIsIHN0cmluZyBwa190YWJsZSwgc3RyaW5nIGZrX3F1YWxpZmllciwgc3RyaW5nIGZrX293bmVyLCBzdHJpbmcgZmtfdGFibGUpIiwKICAgICAgICAiUmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyIHRvIGVpdGhlciBhIGxpc3Qgb2YgZm9yZWlnbiBrZXlzIGluIHRoZSBzcGVjaWZpZWQgdGFibGUgb3IgYSBsaXN0IG9mIGZvcmVpZ24ga2V5cyBpbiBvdGhlciB0YWJsZXMgdGhhdCByZWZlciB0byB0aGUgcHJpbWFyeSBrZXkgaW4gdGhlIHNwZWNpZmllZCB0YWJsZSIKICAgIF0sCiAgICAib2RiY19mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBvZGJjX2ZyZWVfcmVzdWx0KHJlc291cmNlIHJlc3VsdF9pZCkiLAogICAgICAgICJGcmVlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSByZXN1bHQiCiAgICBdLAogICAgIm9kYmNfZ2V0dHlwZWluZm8iOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfZ2V0dHlwZWluZm8ocmVzb3VyY2UgY29ubmVjdGlvbl9pZCBbLCBpbnQgZGF0YV90eXBlXSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBkYXRhIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgZGF0YSBzb3VyY2UiCiAgICBdLAogICAgIm9kYmNfbG9uZ3JlYWRsZW4iOiBbCiAgICAgICAgImJvb2wgb2RiY19sb25ncmVhZGxlbihpbnQgcmVzdWx0X2lkLCBpbnQgbGVuZ3RoKSIsCiAgICAgICAgIkhhbmRsZSBMT05HIGNvbHVtbnMiCiAgICBdLAogICAgIm9kYmNfbmV4dF9yZXN1bHQiOiBbCiAgICAgICAgImJvb2wgb2RiY19uZXh0X3Jlc3VsdChyZXNvdXJjZSByZXN1bHRfaWQpIiwKICAgICAgICAiQ2hlY2tzIGlmIG11bHRpcGxlIHJlc3VsdHMgYXJlIGF2YWlhYmxlIgogICAgXSwKICAgICJvZGJjX251bV9maWVsZHMiOiBbCiAgICAgICAgImludCBvZGJjX251bV9maWVsZHMocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIkdldCBudW1iZXIgb2YgY29sdW1ucyBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAib2RiY19udW1fcm93cyI6IFsKICAgICAgICAiaW50IG9kYmNfbnVtX3Jvd3MocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIkdldCBudW1iZXIgb2Ygcm93cyBpbiBhIHJlc3VsdCIKICAgIF0sCiAgICAib2RiY19wY29ubmVjdCI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19wY29ubmVjdChzdHJpbmcgRFNOLCBzdHJpbmcgdXNlciwgc3RyaW5nIHBhc3N3b3JkIFssIGludCBjdXJzb3Jfb3B0aW9uXSkiLAogICAgICAgICJFc3RhYmxpc2ggYSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gdG8gYSBkYXRhc291cmNlIgogICAgXSwKICAgICJvZGJjX3ByZXBhcmUiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfcHJlcGFyZShyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiUHJlcGFyZXMgYSBzdGF0ZW1lbnQgZm9yIGV4ZWN1dGlvbiIKICAgIF0sCiAgICAib2RiY19wcmltYXJ5a2V5cyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19wcmltYXJ5a2V5cyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkLCBzdHJpbmcgcXVhbGlmaWVyLCBzdHJpbmcgb3duZXIsIHN0cmluZyB0YWJsZSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgbGlzdGluZyB0aGUgY29sdW1uIG5hbWVzIHRoYXQgY29tcHJpc2UgdGhlIHByaW1hcnkga2V5IGZvciBhIHRhYmxlIgogICAgXSwKICAgICJvZGJjX3Byb2NlZHVyZWNvbHVtbnMiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfcHJvY2VkdXJlY29sdW1ucyhyZXNvdXJjZSBjb25uZWN0aW9uX2lkIFssIHN0cmluZyBxdWFsaWZpZXIsIHN0cmluZyBvd25lciwgc3RyaW5nIHByb2MsIHN0cmluZyBjb2x1bW5dKSIsCiAgICAgICAgIlJldHVybnMgYSByZXN1bHQgaWRlbnRpZmllciBjb250YWluaW5nIHRoZSBsaXN0IG9mIGlucHV0IGFuZCBvdXRwdXQgcGFyYW1ldGVycywgYXMgd2VsbCBhcyB0aGUgY29sdW1ucyB0aGF0IG1ha2UgdXAgdGhlIHJlc3VsdCBzZXQgZm9yIHRoZSBzcGVjaWZpZWQgcHJvY2VkdXJlcyIKICAgIF0sCiAgICAib2RiY19wcm9jZWR1cmVzIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX3Byb2NlZHVyZXMocmVzb3VyY2UgY29ubmVjdGlvbl9pZCBbLCBzdHJpbmcgcXVhbGlmaWVyLCBzdHJpbmcgb3duZXIsIHN0cmluZyBuYW1lXSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgY29udGFpbmcgdGhlIGxpc3Qgb2YgcHJvY2VkdXJlIG5hbWVzIGluIGEgZGF0YXNvdXJjZSIKICAgIF0sCiAgICAib2RiY19yZXN1bHQiOiBbCiAgICAgICAgIm1peGVkIG9kYmNfcmVzdWx0KHJlc291cmNlIHJlc3VsdF9pZCwgbWl4ZWQgZmllbGQpIiwKICAgICAgICAiR2V0IHJlc3VsdCBkYXRhIgogICAgXSwKICAgICJvZGJjX3Jlc3VsdF9hbGwiOiBbCiAgICAgICAgImludCBvZGJjX3Jlc3VsdF9hbGwocmVzb3VyY2UgcmVzdWx0X2lkIFssIHN0cmluZyBmb3JtYXRdKSIsCiAgICAgICAgIlByaW50IHJlc3VsdCBhcyBIVE1MIHRhYmxlIgogICAgXSwKICAgICJvZGJjX3JvbGxiYWNrIjogWwogICAgICAgICJib29sIG9kYmNfcm9sbGJhY2socmVzb3VyY2UgY29ubmVjdGlvbl9pZCkiLAogICAgICAgICJSb2xsYmFjayBhIHRyYW5zYWN0aW9uIgogICAgXSwKICAgICJvZGJjX3NldG9wdGlvbiI6IFsKICAgICAgICAiYm9vbCBvZGJjX3NldG9wdGlvbihyZXNvdXJjZSBjb25uX2lkfHJlc3VsdF9pZCwgaW50IHdoaWNoLCBpbnQgb3B0aW9uLCBpbnQgdmFsdWUpIiwKICAgICAgICAiU2V0cyBjb25uZWN0aW9uIG9yIHN0YXRlbWVudCBvcHRpb25zIgogICAgXSwKICAgICJvZGJjX3NwZWNpYWxjb2x1bW5zIjogWwogICAgICAgICJyZXNvdXJjZSBvZGJjX3NwZWNpYWxjb2x1bW5zKHJlc291cmNlIGNvbm5lY3Rpb25faWQsIGludCB0eXBlLCBzdHJpbmcgcXVhbGlmaWVyLCBzdHJpbmcgb3duZXIsIHN0cmluZyB0YWJsZSwgaW50IHNjb3BlLCBpbnQgbnVsbGFibGUpIiwKICAgICAgICAiUmV0dXJucyBhIHJlc3VsdCBpZGVudGlmaWVyIGNvbnRhaW5pbmcgZWl0aGVyIHRoZSBvcHRpbWFsIHNldCBvZiBjb2x1bW5zIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyBhIHJvdyBpbiB0aGUgdGFibGUgb3IgY29sdW1ucyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgd2hlbiBhbnkgdmFsdWUgaW4gdGhlIHJvdyBpcyB1cGRhdGVkIGJ5IGEgdHJhbnNhY3Rpb24iCiAgICBdLAogICAgIm9kYmNfc3RhdGlzdGljcyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY19zdGF0aXN0aWNzKHJlc291cmNlIGNvbm5lY3Rpb25faWQsIHN0cmluZyBxdWFsaWZpZXIsIHN0cmluZyBvd25lciwgc3RyaW5nIG5hbWUsIGludCB1bmlxdWUsIGludCBhY2N1cmFjeSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgdGhhdCBjb250YWlucyBzdGF0aXN0aWNzIGFib3V0IGEgc2luZ2xlIHRhYmxlIGFuZCB0aGUgaW5kZXhlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhYmxlIgogICAgXSwKICAgICJvZGJjX3RhYmxlcHJpdmlsZWdlcyI6IFsKICAgICAgICAicmVzb3VyY2Ugb2RiY190YWJsZXByaXZpbGVnZXMocmVzb3VyY2UgY29ubmVjdGlvbl9pZCwgc3RyaW5nIHF1YWxpZmllciwgc3RyaW5nIG93bmVyLCBzdHJpbmcgbmFtZSkiLAogICAgICAgICJSZXR1cm5zIGEgcmVzdWx0IGlkZW50aWZpZXIgY29udGFpbmluZyBhIGxpc3Qgb2YgdGFibGVzIGFuZCB0aGUgcHJpdmlsZWdlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCB0YWJsZSIKICAgIF0sCiAgICAib2RiY190YWJsZXMiOiBbCiAgICAgICAgInJlc291cmNlIG9kYmNfdGFibGVzKHJlc291cmNlIGNvbm5lY3Rpb25faWQgWywgc3RyaW5nIHF1YWxpZmllciBbLCBzdHJpbmcgb3duZXIgWywgc3RyaW5nIG5hbWUgWywgc3RyaW5nIHRhYmxlX3R5cGVzXV1dXSkiLAogICAgICAgICJDYWxsIHRoZSBTUUxUYWJsZXMgZnVuY3Rpb24iCiAgICBdLAogICAgIm9wZW5kaXIiOiBbCiAgICAgICAgIm1peGVkIG9wZW5kaXIoc3RyaW5nIHBhdGhbLCByZXNvdXJjZSBjb250ZXh0XSkiLAogICAgICAgICJPcGVuIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gYSBkaXJfaGFuZGxlIgogICAgXSwKICAgICJvcGVubG9nIjogWwogICAgICAgICJib29sIG9wZW5sb2coc3RyaW5nIGlkZW50LCBpbnQgb3B0aW9uLCBpbnQgZmFjaWxpdHkpIiwKICAgICAgICAiT3BlbiBjb25uZWN0aW9uIHRvIHN5c3RlbSBsb2dnZXIiCiAgICBdLAogICAgIm9wZW5zc2xfY3NyX2V4cG9ydCI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX2Nzcl9leHBvcnQocmVzb3VyY2UgY3NyLCBzdHJpbmcgJm91dCBbLCBib29sIG5vdGV4dD10cnVlXSkiLAogICAgICAgICJFeHBvcnRzIGEgQ1NSIHRvIGZpbGUgb3IgYSB2YXIiCiAgICBdLAogICAgIm9wZW5zc2xfY3NyX2V4cG9ydF90b19maWxlIjogWwogICAgICAgICJib29sIG9wZW5zc2xfY3NyX2V4cG9ydF90b19maWxlKHJlc291cmNlIGNzciwgc3RyaW5nIG91dGZpbGVuYW1lIFssIGJvb2wgbm90ZXh0PXRydWVdKSIsCiAgICAgICAgIkV4cG9ydHMgYSBDU1IgdG8gZmlsZSIKICAgIF0sCiAgICAib3BlbnNzbF9jc3JfZ2V0X3B1YmxpY19rZXkiOiBbCiAgICAgICAgIm1peGVkIG9wZW5zc2xfY3NyX2dldF9wdWJsaWNfa2V5KG1peGVkIGNzcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIGEgQ0VSVCBvciBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAib3BlbnNzbF9jc3JfZ2V0X3N1YmplY3QiOiBbCiAgICAgICAgIm1peGVkIG9wZW5zc2xfY3NyX2dldF9zdWJqZWN0KG1peGVkIGNzcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIGEgQ0VSVCBvciBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAib3BlbnNzbF9jc3JfbmV3IjogWwogICAgICAgICJib29sIG9wZW5zc2xfY3NyX25ldyhhcnJheSBkbiwgcmVzb3VyY2UgJnByaXZrZXkgWywgYXJyYXkgY29uZmlnYXJncyBbLCBhcnJheSBleHRyYWF0dHJpYnNdXSkiLAogICAgICAgICJHZW5lcmF0ZXMgYSBwcml2a2V5IGFuZCBDU1IiCiAgICBdLAogICAgIm9wZW5zc2xfY3NyX3NpZ24iOiBbCiAgICAgICAgInJlc291cmNlIG9wZW5zc2xfY3NyX3NpZ24obWl4ZWQgY3NyLCBtaXhlZCB4NTA5LCBtaXhlZCBwcml2X2tleSwgbG9uZyBkYXlzIFssIGFycmF5IGNvbmZpZ19hcmdzIFssIGxvbmcgc2VyaWFsXV0pIiwKICAgICAgICAiU2lnbnMgYSBjZXJ0IHdpdGggYW5vdGhlciBDRVJUIgogICAgXSwKICAgICJvcGVuc3NsX2RlY3J5cHQiOiBbCiAgICAgICAgInN0cmluZyBvcGVuc3NsX2RlY3J5cHQoc3RyaW5nIGRhdGEsIHN0cmluZyBtZXRob2QsIHN0cmluZyBwYXNzd29yZCBbLCBib29sIHJhd19pbnB1dD1mYWxzZV0pIiwKICAgICAgICAiVGFrZXMgcmF3IG9yIGJhc2U2NCBlbmNvZGVkIHN0cmluZyBhbmQgZGVjdHVwdCBpdCB1c2luZyBnaXZlbiBtZXRob2QgYW5kIGtleSIKICAgIF0sCiAgICAib3BlbnNzbF9kaF9jb21wdXRlX2tleSI6IFsKICAgICAgICAic3RyaW5nIG9wZW5zc2xfZGhfY29tcHV0ZV9rZXkoc3RyaW5nIHB1Yl9rZXksIHJlc291cmNlIGRoX2tleSkiLAogICAgICAgICJDb21wdXRlcyBzaGFyZWQgc2ljcmV0IGZvciBwdWJsaWMgdmFsdWUgb2YgcmVtb3RlIERIIGtleSBhbmQgbG9jYWwgREgga2V5IgogICAgXSwKICAgICJvcGVuc3NsX2RpZ2VzdCI6IFsKICAgICAgICAic3RyaW5nIG9wZW5zc2xfZGlnZXN0KHN0cmluZyBkYXRhLCBzdHJpbmcgbWV0aG9kIFssIGJvb2wgcmF3X291dHB1dD1mYWxzZV0pIiwKICAgICAgICAiQ29tcHV0ZXMgZGlnZXN0IGhhc2ggdmFsdWUgZm9yIGdpdmVuIGRhdGEgdXNpbmcgZ2l2ZW4gbWV0aG9kLCByZXR1cm5zIHJhdyBvciBiaW5oZXggZW5jb2RlZCBzdHJpbmciCiAgICBdLAogICAgIm9wZW5zc2xfZW5jcnlwdCI6IFsKICAgICAgICAic3RyaW5nIG9wZW5zc2xfZW5jcnlwdChzdHJpbmcgZGF0YSwgc3RyaW5nIG1ldGhvZCwgc3RyaW5nIHBhc3N3b3JkIFssIGJvb2wgcmF3X291dHB1dD1mYWxzZV0pIiwKICAgICAgICAiRW5jcnlwdHMgZ2l2ZW4gZGF0YSB3aXRoIGdpdmVuIG1ldGhvZCBhbmQga2V5LCByZXR1cm5zIHJhdyBvciBiYXNlNjQgZW5jb2RlZCBzdHJpbmciCiAgICBdLAogICAgIm9wZW5zc2xfZXJyb3Jfc3RyaW5nIjogWwogICAgICAgICJtaXhlZCBvcGVuc3NsX2Vycm9yX3N0cmluZyh2b2lkKSIsCiAgICAgICAgIlJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbGFzdCBlcnJvciwgYW5kIGFsdGVycyB0aGUgaW5kZXggb2YgdGhlIGVycm9yIG1lc3NhZ2VzLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGFyZSBubyBtb3JlIG1lc3NhZ2VzIgogICAgXSwKICAgICJvcGVuc3NsX2dldF9jaXBoZXJfbWV0aG9kcyI6IFsKICAgICAgICAiYXJyYXkgb3BlbnNzbF9nZXRfY2lwaGVyX21ldGhvZHMoW2Jvb2wgYWxpYXNlcyA9IGZhbHNlXSkiLAogICAgICAgICJSZXR1cm4gYXJyYXkgb2YgYXZhaWxhYmxlIGNpcGhlciBtZXRob2RzIgogICAgXSwKICAgICJvcGVuc3NsX2dldF9tZF9tZXRob2RzIjogWwogICAgICAgICJhcnJheSBvcGVuc3NsX2dldF9tZF9tZXRob2RzKFtib29sIGFsaWFzZXMgPSBmYWxzZV0pIiwKICAgICAgICAiUmV0dXJuIGFycmF5IG9mIGF2YWlsYWJsZSBkaWdlc3QgbWV0aG9kcyIKICAgIF0sCiAgICAib3BlbnNzbF9vcGVuIjogWwogICAgICAgICJib29sIG9wZW5zc2xfb3BlbihzdHJpbmcgZGF0YSwgJnN0cmluZyBvcGVuZGF0YSwgc3RyaW5nIGVrZXksIG1peGVkIHByaXZrZXkpIiwKICAgICAgICAiT3BlbnMgZGF0YSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2NzMTJfZXhwb3J0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtjczEyX2V4cG9ydChtaXhlZCB4NTA5LCBzdHJpbmcgJm91dCwgbWl4ZWQgcHJpdl9rZXksIHN0cmluZyBwYXNzWywgYXJyYXkgYXJnc10pIiwKICAgICAgICAiQ3JlYXRlcyBhbmQgZXhwb3J0cyBhIFBLQ1MxMiB0byBhIHZhciIKICAgIF0sCiAgICAib3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2NzMTJfZXhwb3J0X3RvX2ZpbGUobWl4ZWQgeDUwOSwgc3RyaW5nIGZpbGVuYW1lLCBtaXhlZCBwcml2X2tleSwgc3RyaW5nIHBhc3NbLCBhcnJheSBhcmdzXSkiLAogICAgICAgICJDcmVhdGVzIGFuZCBleHBvcnRzIGEgUEtDUyB0byBmaWxlIgogICAgXSwKICAgICJvcGVuc3NsX3BrY3MxMl9yZWFkIjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtjczEyX3JlYWQoc3RyaW5nIFBLQ1MxMiwgYXJyYXkgJmNlcnRzLCBzdHJpbmcgcGFzcykiLAogICAgICAgICJQYXJzZXMgYSBQS0NTMTIgdG8gYW4gYXJyYXkiCiAgICBdLAogICAgIm9wZW5zc2xfcGtjczdfZGVjcnlwdCI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3BrY3M3X2RlY3J5cHQoc3RyaW5nIGluZmlsZW5hbWUsIHN0cmluZyBvdXRmaWxlbmFtZSwgbWl4ZWQgcmVjaXBjZXJ0IFssIG1peGVkIHJlY2lwa2V5XSkiLAogICAgICAgICJEZWNyeXB0cyB0aGUgUy9NSU1FIG1lc3NhZ2UgaW4gdGhlIGZpbGUgbmFtZSBpbmZpbGVuYW1lIGFuZCBvdXRwdXQgdGhlIHJlc3VsdHMgdG8gdGhlIGZpbGUgbmFtZSBvdXRmaWxlbmFtZS4gIHJlY2lwY2VydCBpcyBhIENFUlQgZm9yIG9uZSBvZiB0aGUgcmVjaXBpZW50cy4gcmVjaXBrZXkgc3BlY2lmaWVzIHRoZSBwcml2YXRlIGtleSBtYXRjaGluZyByZWNpcGNlcnQsIGlmIHJlY2lwY2VydCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfcGtjczdfZW5jcnlwdCI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3BrY3M3X2VuY3J5cHQoc3RyaW5nIGluZmlsZSwgc3RyaW5nIG91dGZpbGUsIG1peGVkIHJlY2lwY2VydHMsIGFycmF5IGhlYWRlcnMgWywgbG9uZyBmbGFncyBbLCBsb25nIGNpcGhlcl1dKSIsCiAgICAgICAgIkVuY3J5cHRzIHRoZSBtZXNzYWdlIGluIHRoZSBmaWxlIG5hbWVkIGluZmlsZSB3aXRoIHRoZSBjZXJ0aWZpY2F0ZXMgaW4gcmVjaXBjZXJ0cyBhbmQgb3V0cHV0IHRoZSByZXN1bHQgdG8gdGhlIGZpbGUgbmFtZWQgb3V0ZmlsZSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2NzN19zaWduIjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtjczdfc2lnbihzdHJpbmcgaW5maWxlLCBzdHJpbmcgb3V0ZmlsZSwgbWl4ZWQgc2lnbmNlcnQsIG1peGVkIHNpZ25rZXksIGFycmF5IGhlYWRlcnMgWywgbG9uZyBmbGFncyBbLCBzdHJpbmcgZXh0cmFjZXJ0c2ZpbGVuYW1lXV0pIiwKICAgICAgICAiU2lnbnMgdGhlIE1JTUUgbWVzc2FnZSBpbiB0aGUgZmlsZSBuYW1lZCBpbmZpbGUgd2l0aCBzaWduY2VydC9zaWdua2V5IGFuZCBvdXRwdXQgdGhlIHJlc3VsdCB0byBmaWxlIG5hbWUgb3V0ZmlsZS4gaGVhZGVycyBsaXN0cyBwbGFpbiB0ZXh0IGhlYWRlcnMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzaWduZWQgcG9ydGlvbiBvZiB0aGUgbWVzc2FnZSwgYW5kIHNob3VsZCBpbmNsdWRlIHRvLCBmcm9tIGFuZCBzdWJqZWN0IGFzIGEgbWluaW11bSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2NzN192ZXJpZnkiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF9wa2NzN192ZXJpZnkoc3RyaW5nIGZpbGVuYW1lLCBsb25nIGZsYWdzIFssIHN0cmluZyBzaWduZXJzY2VydHMgWywgYXJyYXkgY2FpbmZvIFssIHN0cmluZyBleHRyYWNlcnRzIFssIHN0cmluZyBjb250ZW50XV1dXSkiLAogICAgICAgICJWZXJpZnlzIHRoYXQgdGhlIGRhdGEgYmxvY2sgaXMgaW50YWN0LCB0aGUgc2lnbmVyIGlzIHdobyB0aGV5IHNheSB0aGV5IGFyZSwgYW5kIHJldHVybnMgdGhlIENFUlRzIG9mIHRoZSBzaWduZXJzIgogICAgXSwKICAgICJvcGVuc3NsX3BrZXlfZXhwb3J0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtleV9leHBvcnQobWl4ZWQga2V5LCAmbWl4ZWQgb3V0IFssIHN0cmluZyBwYXNzcGhyYXNlIFssIGFycmF5IGNvbmZpZ19hcmdzXV0pIiwKICAgICAgICAiR2V0cyBhbiBleHBvcnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEga2V5IGludG8gYSBzdHJpbmcgb3IgZmlsZSIKICAgIF0sCiAgICAib3BlbnNzbF9wa2V5X2V4cG9ydF90b19maWxlIjogWwogICAgICAgICJib29sIG9wZW5zc2xfcGtleV9leHBvcnRfdG9fZmlsZShtaXhlZCBrZXksIHN0cmluZyBvdXRmaWxlbmFtZSBbLCBzdHJpbmcgcGFzc3BocmFzZSwgYXJyYXkgY29uZmlnX2FyZ3MpIiwKICAgICAgICAiR2V0cyBhbiBleHBvcnRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEga2V5IGludG8gYSBmaWxlIgogICAgXSwKICAgICJvcGVuc3NsX3BrZXlfZnJlZSI6IFsKICAgICAgICAidm9pZCBvcGVuc3NsX3BrZXlfZnJlZShpbnQga2V5KSIsCiAgICAgICAgIkZyZWVzIGEga2V5IgogICAgXSwKICAgICJvcGVuc3NsX3BrZXlfZ2V0X2RldGFpbHMiOiBbCiAgICAgICAgInJlc291cmNlIG9wZW5zc2xfcGtleV9nZXRfZGV0YWlscyhyZXNvdXJjZSBrZXkpIiwKICAgICAgICAicmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBrZXkgZGV0YWlscyAoYml0cywgcGtleSwgdHlwZSkiCiAgICBdLAogICAgIm9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZSI6IFsKICAgICAgICAiaW50IG9wZW5zc2xfcGtleV9nZXRfcHJpdmF0ZShzdHJpbmcga2V5IFssIHN0cmluZyBwYXNzcGhyYXNlXSkiLAogICAgICAgICJHZXRzIHByaXZhdGUga2V5cyIKICAgIF0sCiAgICAib3BlbnNzbF9wa2V5X2dldF9wdWJsaWMiOiBbCiAgICAgICAgImludCBvcGVuc3NsX3BrZXlfZ2V0X3B1YmxpYyhtaXhlZCBjZXJ0KSIsCiAgICAgICAgIkdldHMgcHVibGljIGtleSBmcm9tIFguNTA5IGNlcnRpZmljYXRlIgogICAgXSwKICAgICJvcGVuc3NsX3BrZXlfbmV3IjogWwogICAgICAgICJyZXNvdXJjZSBvcGVuc3NsX3BrZXlfbmV3KFthcnJheSBjb25maWdhcmdzXSkiLAogICAgICAgICJHZW5lcmF0ZXMgYSBuZXcgcHJpdmF0ZSBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcHJpdmF0ZV9kZWNyeXB0KHN0cmluZyBkYXRhLCBzdHJpbmcgJmRlY3J5cHRlZCwgbWl4ZWQga2V5IFssIGludCBwYWRkaW5nXSkiLAogICAgICAgICJEZWNyeXB0cyBkYXRhIHdpdGggcHJpdmF0ZSBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcHJpdmF0ZV9lbmNyeXB0KHN0cmluZyBkYXRhLCBzdHJpbmcgJmNyeXB0ZWQsIG1peGVkIGtleSBbLCBpbnQgcGFkZGluZ10pIiwKICAgICAgICAiRW5jcnlwdHMgZGF0YSB3aXRoIHByaXZhdGUga2V5IgogICAgXSwKICAgICJvcGVuc3NsX3B1YmxpY19kZWNyeXB0IjogWwogICAgICAgICJib29sIG9wZW5zc2xfcHVibGljX2RlY3J5cHQoc3RyaW5nIGRhdGEsIHN0cmluZyAmY3J5cHRlZCwgcmVzb3VyY2Uga2V5IFssIGludCBwYWRkaW5nXSkiLAogICAgICAgICJEZWNyeXB0cyBkYXRhIHdpdGggcHVibGljIGtleSIKICAgIF0sCiAgICAib3BlbnNzbF9wdWJsaWNfZW5jcnlwdCI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3B1YmxpY19lbmNyeXB0KHN0cmluZyBkYXRhLCBzdHJpbmcgJmNyeXB0ZWQsIG1peGVkIGtleSBbLCBpbnQgcGFkZGluZ10pIiwKICAgICAgICAiRW5jcnlwdHMgZGF0YSB3aXRoIHB1YmxpYyBrZXkiCiAgICBdLAogICAgIm9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyI6IFsKICAgICAgICAic3RyaW5nIG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyhpbnRlZ2VyIGxlbmd0aCBbLCAmYm9vbCByZXR1cm5lZF9zdHJvbmdfcmVzdWx0XSkiLAogICAgICAgICJSZXR1cm5zIGEgc3RyaW5nIG9mIHRoZSBsZW5ndGggc3BlY2lmaWVkIGZpbGxlZCB3aXRoIHJhbmRvbSBwc2V1ZG8gYnl0ZXMiCiAgICBdLAogICAgIm9wZW5zc2xfc2VhbCI6IFsKICAgICAgICAiaW50IG9wZW5zc2xfc2VhbChzdHJpbmcgZGF0YSwgJnN0cmluZyBzZWFsZGF0YSwgJmFycmF5IGVrZXlzLCBhcnJheSBwdWJrZXlzKSIsCiAgICAgICAgIlNlYWxzIGRhdGEiCiAgICBdLAogICAgIm9wZW5zc2xfc2lnbiI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3NpZ24oc3RyaW5nIGRhdGEsICZzdHJpbmcgc2lnbmF0dXJlLCBtaXhlZCBrZXlbLCBtaXhlZCBtZXRob2RdKSIsCiAgICAgICAgIlNpZ25zIGRhdGEiCiAgICBdLAogICAgIm9wZW5zc2xfdmVyaWZ5IjogWwogICAgICAgICJpbnQgb3BlbnNzbF92ZXJpZnkoc3RyaW5nIGRhdGEsIHN0cmluZyBzaWduYXR1cmUsIG1peGVkIGtleVssIG1peGVkIG1ldGhvZF0pIiwKICAgICAgICAiVmVyaWZ5cyBkYXRhIgogICAgXSwKICAgICJvcGVuc3NsX3g1MDlfY2hlY2tfcHJpdmF0ZV9rZXkiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF94NTA5X2NoZWNrX3ByaXZhdGVfa2V5KG1peGVkIGNlcnQsIG1peGVkIGtleSkiLAogICAgICAgICJDaGVja3MgaWYgYSBwcml2YXRlIGtleSBjb3JyZXNwb25kcyB0byBhIENFUlQiCiAgICBdLAogICAgIm9wZW5zc2xfeDUwOV9jaGVja3B1cnBvc2UiOiBbCiAgICAgICAgImludCBvcGVuc3NsX3g1MDlfY2hlY2twdXJwb3NlKG1peGVkIHg1MDljZXJ0LCBpbnQgcHVycG9zZSwgYXJyYXkgY2FpbmZvIFssIHN0cmluZyB1bnRydXN0ZWRmaWxlXSkiLAogICAgICAgICJDaGVja3MgdGhlIENFUlQgdG8gc2VlIGlmIGl0IGNhbiBiZSB1c2VkIGZvciB0aGUgcHVycG9zZSBpbiBwdXJwb3NlLiBjYWluZm8gaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdHJ1c3RlZCBDQXMiCiAgICBdLAogICAgIm9wZW5zc2xfeDUwOV9leHBvcnQiOiBbCiAgICAgICAgImJvb2wgb3BlbnNzbF94NTA5X2V4cG9ydChtaXhlZCB4NTA5LCBzdHJpbmcgJm91dCBbLCBib29sIG5vdGV4dCA9IHRydWVdKSIsCiAgICAgICAgIkV4cG9ydHMgYSBDRVJUIHRvIGZpbGUgb3IgYSB2YXIiCiAgICBdLAogICAgIm9wZW5zc2xfeDUwOV9leHBvcnRfdG9fZmlsZSI6IFsKICAgICAgICAiYm9vbCBvcGVuc3NsX3g1MDlfZXhwb3J0X3RvX2ZpbGUobWl4ZWQgeDUwOSwgc3RyaW5nIG91dGZpbGVuYW1lIFssIGJvb2wgbm90ZXh0ID0gdHJ1ZV0pIiwKICAgICAgICAiRXhwb3J0cyBhIENFUlQgdG8gZmlsZSBvciBhIHZhciIKICAgIF0sCiAgICAib3BlbnNzbF94NTA5X2ZyZWUiOiBbCiAgICAgICAgInZvaWQgb3BlbnNzbF94NTA5X2ZyZWUocmVzb3VyY2UgeDUwOSkiLAogICAgICAgICJGcmVlcyBYLjUwOSBjZXJ0aWZpY2F0ZXMiCiAgICBdLAogICAgIm9wZW5zc2xfeDUwOV9wYXJzZSI6IFsKICAgICAgICAiYXJyYXkgb3BlbnNzbF94NTA5X3BhcnNlKG1peGVkIHg1MDkgWywgYm9vbCBzaG9ydG5hbWVzPXRydWVdKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGZpZWxkcy92YWx1ZXMgb2YgdGhlIENFUlQiCiAgICBdLAogICAgIm9wZW5zc2xfeDUwOV9yZWFkIjogWwogICAgICAgICJyZXNvdXJjZSBvcGVuc3NsX3g1MDlfcmVhZChtaXhlZCBjZXJ0KSIsCiAgICAgICAgIlJlYWRzIFguNTA5IGNlcnRpZmljYXRlcyIKICAgIF0sCiAgICAib3JkIjogWwogICAgICAgICJpbnQgb3JkKHN0cmluZyBjaGFyYWN0ZXIpIiwKICAgICAgICAiUmV0dXJucyBBU0NJSSB2YWx1ZSBvZiBjaGFyYWN0ZXIiCiAgICBdLAogICAgIm91dHB1dF9hZGRfcmV3cml0ZV92YXIiOiBbCiAgICAgICAgImJvb2wgb3V0cHV0X2FkZF9yZXdyaXRlX3ZhcihzdHJpbmcgbmFtZSwgc3RyaW5nIHZhbHVlKSIsCiAgICAgICAgIkFkZCBVUkwgcmV3cml0ZXIgdmFsdWVzIgogICAgXSwKICAgICJvdXRwdXRfcmVzZXRfcmV3cml0ZV92YXJzIjogWwogICAgICAgICJib29sIG91dHB1dF9yZXNldF9yZXdyaXRlX3ZhcnModm9pZCkiLAogICAgICAgICJSZXNldChjbGVhcikgVVJMIHJld3JpdGVyIHZhbHVlcyIKICAgIF0sCiAgICAicGFjayI6IFsKICAgICAgICAic3RyaW5nIHBhY2soc3RyaW5nIGZvcm1hdCwgbWl4ZWQgYXJnMSBbLCBtaXhlZCBhcmcyIFssIG1peGVkIC4uLl1dKSIsCiAgICAgICAgIlRha2VzIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBhbmQgcGFja3MgdGhlbSBpbnRvIGEgYmluYXJ5IHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBhcmd1bWVudCIKICAgIF0sCiAgICAicGFyc2VfaW5pX2ZpbGUiOiBbCiAgICAgICAgImFycmF5IHBhcnNlX2luaV9maWxlKHN0cmluZyBmaWxlbmFtZSBbLCBib29sIHByb2Nlc3Nfc2VjdGlvbnMgWywgaW50IHNjYW5uZXJfbW9kZV1dKSIsCiAgICAgICAgIlBhcnNlIGNvbmZpZ3VyYXRpb24gZmlsZSIKICAgIF0sCiAgICAicGFyc2VfaW5pX3N0cmluZyI6IFsKICAgICAgICAiYXJyYXkgcGFyc2VfaW5pX3N0cmluZyhzdHJpbmcgaW5pX3N0cmluZyBbLCBib29sIHByb2Nlc3Nfc2VjdGlvbnMgWywgaW50IHNjYW5uZXJfbW9kZV1dKSIsCiAgICAgICAgIlBhcnNlIGNvbmZpZ3VyYXRpb24gc3RyaW5nIgogICAgXSwKICAgICJwYXJzZV9sb2NhbGUiOiBbCiAgICAgICAgInN0YXRpYyBhcnJheSBwYXJzZV9sb2NhbGUoJGxvY2FsZSkiLAogICAgICAgICIqIHBhcnNlcyBhIGxvY2FsZS1pZCBpbnRvIGFuIGFycmF5IHRoZSBkaWZmZXJlbnQgcGFydHMgb2YgaXQiCiAgICBdLAogICAgInBhcnNlX3N0ciI6IFsKICAgICAgICAidm9pZCBwYXJzZV9zdHIoc3RyaW5nIGVuY29kZWRfc3RyaW5nIFssIGFycmF5IHJlc3VsdF0pIiwKICAgICAgICAiUGFyc2VzIEdFVC9QT1NUL0NPT0tJRSBkYXRhIGFuZCBzZXRzIGdsb2JhbCB2YXJpYWJsZXMiCiAgICBdLAogICAgInBhcnNlX3VybCI6IFsKICAgICAgICAibWl4ZWQgcGFyc2VfdXJsKHN0cmluZyB1cmwsIFtpbnQgdXJsX2NvbXBvbmVudF0pIiwKICAgICAgICAiUGFyc2UgYSBVUkwgYW5kIHJldHVybiBpdHMgY29tcG9uZW50cyIKICAgIF0sCiAgICAicGFzc3RocnUiOiBbCiAgICAgICAgInZvaWQgcGFzc3RocnUoc3RyaW5nIGNvbW1hbmQgWywgaW50ICZyZXR1cm5fdmFsdWVdKSIsCiAgICAgICAgIkV4ZWN1dGUgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBhbmQgZGlzcGxheSByYXcgb3V0cHV0IgogICAgXSwKICAgICJwYXRoaW5mbyI6IFsKICAgICAgICAiYXJyYXkgcGF0aGluZm8oc3RyaW5nIHBhdGhbLCBpbnQgb3B0aW9uc10pIiwKICAgICAgICAiUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGNlcnRhaW4gc3RyaW5nIgogICAgXSwKICAgICJwY2xvc2UiOiBbCiAgICAgICAgImludCBwY2xvc2UocmVzb3VyY2UgZnApIiwKICAgICAgICAiQ2xvc2UgYSBmaWxlIHBvaW50ZXIgb3BlbmVkIGJ5IHBvcGVuKCkiCiAgICBdLAogICAgInBjbmx0X3NpZ3dhaXRpbmZvIjogWwogICAgICAgICJpbnQgcGNubHRfc2lnd2FpdGluZm8oYXJyYXkgc2V0WywgYXJyYXkgJnNpZ2luZm9dKSIsCiAgICAgICAgIlN5bmNocm9ub3VzbHkgd2FpdCBmb3IgcXVldWVkIHNpZ25hbHMiCiAgICBdLAogICAgInBjbnRsX2FsYXJtIjogWwogICAgICAgICJpbnQgcGNudGxfYWxhcm0oaW50IHNlY29uZHMpIiwKICAgICAgICAiU2V0IGFuIGFsYXJtIGNsb2NrIGZvciBkZWxpdmVyeSBvZiBhIHNpZ25hbCIKICAgIF0sCiAgICAicGNudGxfZXhlYyI6IFsKICAgICAgICAiYm9vbCBwY250bF9leGVjKHN0cmluZyBwYXRoIFssIGFycmF5IGFyZ3MgWywgYXJyYXkgZW52c11dKSIsCiAgICAgICAgIkV4ZWN1dGVzIHNwZWNpZmllZCBwcm9ncmFtIGluIGN1cnJlbnQgcHJvY2VzcyBzcGFjZSBhcyBkZWZpbmVkIGJ5IGV4ZWMoMikiCiAgICBdLAogICAgInBjbnRsX2ZvcmsiOiBbCiAgICAgICAgImludCBwY250bF9mb3JrKHZvaWQpIiwKICAgICAgICAiRm9ya3MgdGhlIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MgZm9sbG93aW5nIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHRoZSBVTklYIGZvcmsoKSBzeXN0ZW0gY2FsbCIKICAgIF0sCiAgICAicGNudGxfZ2V0cHJpb3JpdHkiOiBbCiAgICAgICAgImludCBwY250bF9nZXRwcmlvcml0eShbaW50IHBpZCBbLCBpbnQgcHJvY2Vzc19pZGVudGlmaWVyXV0pIiwKICAgICAgICAiR2V0IHRoZSBwcmlvcml0eSBvZiBhbnkgcHJvY2VzcyIKICAgIF0sCiAgICAicGNudGxfc2V0cHJpb3JpdHkiOiBbCiAgICAgICAgImJvb2wgcGNudGxfc2V0cHJpb3JpdHkoaW50IHByaW9yaXR5IFssIGludCBwaWQgWywgaW50IHByb2Nlc3NfaWRlbnRpZmllcl1dKSIsCiAgICAgICAgIkNoYW5nZSB0aGUgcHJpb3JpdHkgb2YgYW55IHByb2Nlc3MiCiAgICBdLAogICAgInBjbnRsX3NpZ25hbCI6IFsKICAgICAgICAiYm9vbCBwY250bF9zaWduYWwoaW50IHNpZ25vLCBjYWxsYmFjayBoYW5kbGUgWywgYm9vbCByZXN0YXJ0X3N5c2NhbGxzXSkiLAogICAgICAgICJBc3NpZ25zIGEgc3lzdGVtIHNpZ25hbCBoYW5kbGVyIHRvIGEgUEhQIGZ1bmN0aW9uIgogICAgXSwKICAgICJwY250bF9zaWduYWxfZGlzcGF0Y2giOiBbCiAgICAgICAgImJvb2wgcGNudGxfc2lnbmFsX2Rpc3BhdGNoKCkiLAogICAgICAgICJEaXNwYXRjaCBzaWduYWxzIHRvIHNpZ25hbCBoYW5kbGVycyIKICAgIF0sCiAgICAicGNudGxfc2lncHJvY21hc2siOiBbCiAgICAgICAgImJvb2wgcGNudGxfc2lncHJvY21hc2soaW50IGhvdywgYXJyYXkgc2V0WywgYXJyYXkgJm9sZHNldF0pIiwKICAgICAgICAiRXhhbWluZSBhbmQgY2hhbmdlIGJsb2NrZWQgc2lnbmFscyIKICAgIF0sCiAgICAicGNudGxfc2lndGltZWR3YWl0IjogWwogICAgICAgICJpbnQgcGNudGxfc2lndGltZWR3YWl0KGFycmF5IHNldFssIGFycmF5ICZzaWdpbmZvWywgaW50IHNlY29uZHNbLCBpbnQgbmFub3NlY29uZHNdXV0pIiwKICAgICAgICAiV2FpdCBmb3IgcXVldWVkIHNpZ25hbHMiCiAgICBdLAogICAgInBjbnRsX3dhaXQiOiBbCiAgICAgICAgImludCBwY250bF93YWl0KGludCAmc3RhdHVzKSIsCiAgICAgICAgIldhaXRzIG9uIG9yIHJldHVybnMgdGhlIHN0YXR1cyBvZiBhIGZvcmtlZCBjaGlsZCBhcyBkZWZpbmVkIGJ5IHRoZSB3YWl0cGlkKCkgc3lzdGVtIGNhbGwiCiAgICBdLAogICAgInBjbnRsX3dhaXRwaWQiOiBbCiAgICAgICAgImludCBwY250bF93YWl0cGlkKGludCBwaWQsIGludCAmc3RhdHVzLCBpbnQgb3B0aW9ucykiLAogICAgICAgICJXYWl0cyBvbiBvciByZXR1cm5zIHRoZSBzdGF0dXMgb2YgYSBmb3JrZWQgY2hpbGQgYXMgZGVmaW5lZCBieSB0aGUgd2FpdHBpZCgpIHN5c3RlbSBjYWxsIgogICAgXSwKICAgICJwY250bF93ZXhpdHN0YXR1cyI6IFsKICAgICAgICAiaW50IHBjbnRsX3dleGl0c3RhdHVzKGludCBzdGF0dXMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgc3RhdHVzIGNvZGUgb2YgYSBjaGlsZCdzIGV4aXQiCiAgICBdLAogICAgInBjbnRsX3dpZmV4aXRlZCI6IFsKICAgICAgICAiYm9vbCBwY250bF93aWZleGl0ZWQoaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHRydWUgaWYgdGhlIGNoaWxkIHN0YXR1cyBjb2RlIHJlcHJlc2VudHMgYSBzdWNjZXNzZnVsIGV4aXQiCiAgICBdLAogICAgInBjbnRsX3dpZnNpZ25hbGVkIjogWwogICAgICAgICJib29sIHBjbnRsX3dpZnNpZ25hbGVkKGludCBzdGF0dXMpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlsZCBzdGF0dXMgY29kZSByZXByZXNlbnRzIGEgcHJvY2VzcyB0aGF0IHdhcyB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCIKICAgIF0sCiAgICAicGNudGxfd2lmc3RvcHBlZCI6IFsKICAgICAgICAiYm9vbCBwY250bF93aWZzdG9wcGVkKGludCBzdGF0dXMpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHRoZSBjaGlsZCBzdGF0dXMgY29kZSByZXByZXNlbnRzIGEgc3RvcHBlZCBwcm9jZXNzIChXVU5UUkFDRUQgbXVzdCBoYXZlIGJlZW4gdXNlZCB3aXRoIHdhaXRwaWQpIgogICAgXSwKICAgICJwY250bF93c3RvcHNpZyI6IFsKICAgICAgICAiaW50IHBjbnRsX3dzdG9wc2lnKGludCBzdGF0dXMpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBzaWduYWwgdGhhdCBjYXVzZWQgdGhlIHByb2Nlc3MgdG8gc3RvcCB3aG8ncyBzdGF0dXMgY29kZSBpcyBwYXNzZWQiCiAgICBdLAogICAgInBjbnRsX3d0ZXJtc2lnIjogWwogICAgICAgICJpbnQgcGNudGxfd3Rlcm1zaWcoaW50IHN0YXR1cykiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHNpZ25hbCB0aGF0IHRlcm1pbmF0ZWQgdGhlIHByb2Nlc3Mgd2hvJ3Mgc3RhdHVzIGNvZGUgaXMgcGFzc2VkIgogICAgXSwKICAgICJwZG9fZHJpdmVycyI6IFsKICAgICAgICAiYXJyYXkgcGRvX2RyaXZlcnMoKSIsCiAgICAgICAgIlJldHVybiBhcnJheSBvZiBhdmFpbGFibGUgUERPIGRyaXZlcnMiCiAgICBdLAogICAgInBmc29ja29wZW4iOiBbCiAgICAgICAgInJlc291cmNlIHBmc29ja29wZW4oc3RyaW5nIGhvc3RuYW1lLCBpbnQgcG9ydCBbLCBpbnQgZXJybm8gWywgc3RyaW5nIGVycnN0ciBbLCBmbG9hdCB0aW1lb3V0XV1dKSIsCiAgICAgICAgIk9wZW4gcGVyc2lzdGVudCBJbnRlcm5ldCBvciBVbml4IGRvbWFpbiBzb2NrZXQgY29ubmVjdGlvbiIKICAgIF0sCiAgICAicGdfYWZmZWN0ZWRfcm93cyI6IFsKICAgICAgICAiaW50IHBnX2FmZmVjdGVkX3Jvd3MocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiBhZmZlY3RlZCB0dXBsZXMiCiAgICBdLAogICAgInBnX2NhbmNlbF9xdWVyeSI6IFsKICAgICAgICAiYm9vbCBwZ19jYW5jZWxfcXVlcnkocmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJDYW5jZWwgcmVxdWVzdCIKICAgIF0sCiAgICAicGdfY2xpZW50X2VuY29kaW5nIjogWwogICAgICAgICJzdHJpbmcgcGdfY2xpZW50X2VuY29kaW5nKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgY2xpZW50IGVuY29kaW5nIgogICAgXSwKICAgICJwZ19jbG9zZSI6IFsKICAgICAgICAiYm9vbCBwZ19jbG9zZShbcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiQ2xvc2UgYSBQb3N0Z3JlU1FMIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInBnX2Nvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIHBnX2Nvbm5lY3Qoc3RyaW5nIGNvbm5lY3Rpb25fc3RyaW5nWywgaW50IGNvbm5lY3RfdHlwZV0gfCBbc3RyaW5nIGhvc3QsIHN0cmluZyBwb3J0IFssIHN0cmluZyBvcHRpb25zIFssIHN0cmluZyB0dHksXV1dIHN0cmluZyBkYXRhYmFzZSkiLAogICAgICAgICJPcGVuIGEgUG9zdGdyZVNRTCBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ19jb25uZWN0aW9uX2J1c3kiOiBbCiAgICAgICAgImJvb2wgcGdfY29ubmVjdGlvbl9idXN5KHJlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiR2V0IGNvbm5lY3Rpb24gaXMgYnVzeSBvciBub3QiCiAgICBdLAogICAgInBnX2Nvbm5lY3Rpb25fcmVzZXQiOiBbCiAgICAgICAgImJvb2wgcGdfY29ubmVjdGlvbl9yZXNldChyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIlJlc2V0IGNvbm5lY3Rpb24gKHJlY29ubmVjdCkiCiAgICBdLAogICAgInBnX2Nvbm5lY3Rpb25fc3RhdHVzIjogWwogICAgICAgICJpbnQgcGdfY29ubmVjdGlvbl9zdGF0dXMocmVzb3VyY2UgY29ubm5lY3Rpb24pIiwKICAgICAgICAiR2V0IGNvbm5lY3Rpb24gc3RhdHVzIgogICAgXSwKICAgICJwZ19jb252ZXJ0IjogWwogICAgICAgICJhcnJheSBwZ19jb252ZXJ0KHJlc291cmNlIGRiLCBzdHJpbmcgdGFibGUsIGFycmF5IHZhbHVlc1ssIGludCBvcHRpb25zXSkiLAogICAgICAgICJDaGVjayBhbmQgY29udmVydCB2YWx1ZXMgZm9yIFBvc3RncmVTUUwgU1FMIHN0YXRlbWVudCIKICAgIF0sCiAgICAicGdfY29weV9mcm9tIjogWwogICAgICAgICJib29sIHBnX2NvcHlfZnJvbShyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgdGFibGVfbmFtZSAsIGFycmF5IHJvd3MgWywgc3RyaW5nIGRlbGltaXRlciBbLCBzdHJpbmcgbnVsbF9hc11dKSIsCiAgICAgICAgIkNvcHkgdGFibGUgZnJvbSBhcnJheSIKICAgIF0sCiAgICAicGdfY29weV90byI6IFsKICAgICAgICAiYXJyYXkgcGdfY29weV90byhyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgdGFibGVfbmFtZSBbLCBzdHJpbmcgZGVsaW1pdGVyIFssIHN0cmluZyBudWxsX2FzXV0pIiwKICAgICAgICAiQ29weSB0YWJsZSB0byBhcnJheSIKICAgIF0sCiAgICAicGdfZGJuYW1lIjogWwogICAgICAgICJzdHJpbmcgcGdfZGJuYW1lKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJHZXQgdGhlIGRhdGFiYXNlIG5hbWUiCiAgICBdLAogICAgInBnX2RlbGV0ZSI6IFsKICAgICAgICAibWl4ZWQgcGdfZGVsZXRlKHJlc291cmNlIGRiLCBzdHJpbmcgdGFibGUsIGFycmF5IGlkc1ssIGludCBvcHRpb25zXSkiLAogICAgICAgICJEZWxldGUgcmVjb3JkcyBoYXMgaWRzIChpZD0+dmFsdWUpIgogICAgXSwKICAgICJwZ19lbmRfY29weSI6IFsKICAgICAgICAiYm9vbCBwZ19lbmRfY29weShbcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiU3luYyB3aXRoIGJhY2tlbmQuIENvbXBsZXRlcyB0aGUgQ29weSBjb21tYW5kIgogICAgXSwKICAgICJwZ19lc2NhcGVfYnl0ZWEiOiBbCiAgICAgICAgInN0cmluZyBwZ19lc2NhcGVfYnl0ZWEoW3Jlc291cmNlIGNvbm5lY3Rpb24sXSBzdHJpbmcgZGF0YSkiLAogICAgICAgICJFc2NhcGUgYmluYXJ5IGZvciBieXRlYSB0eXBlIgogICAgXSwKICAgICJwZ19lc2NhcGVfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgcGdfZXNjYXBlX3N0cmluZyhbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBkYXRhKSIsCiAgICAgICAgIkVzY2FwZSBzdHJpbmcgZm9yIHRleHQvY2hhciB0eXBlIgogICAgXSwKICAgICJwZ19leGVjdXRlIjogWwogICAgICAgICJyZXNvdXJjZSBwZ19leGVjdXRlKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIHN0bXRuYW1lLCBhcnJheSBwYXJhbXMpIiwKICAgICAgICAiRXhlY3V0ZSBhIHByZXBhcmVkIHF1ZXJ5IgogICAgXSwKICAgICJwZ19mZXRjaF9hbGwiOiBbCiAgICAgICAgImFycmF5IHBnX2ZldGNoX2FsbChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiRmV0Y2ggYWxsIHJvd3MgaW50byBhcnJheSIKICAgIF0sCiAgICAicGdfZmV0Y2hfYWxsX2NvbHVtbnMiOiBbCiAgICAgICAgImFycmF5IHBnX2ZldGNoX2FsbF9jb2x1bW5zKHJlc291cmNlIHJlc3VsdCBbLCBpbnQgY29sdW1uX251bWJlcl0pIiwKICAgICAgICAiRmV0Y2ggYWxsIHJvd3MgaW50byBhcnJheSIKICAgIF0sCiAgICAicGdfZmV0Y2hfYXJyYXkiOiBbCiAgICAgICAgImFycmF5IHBnX2ZldGNoX2FycmF5KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgcm93IFssIGludCByZXN1bHRfdHlwZV1dKSIsCiAgICAgICAgIkZldGNoIGEgcm93IGFzIGFuIGFycmF5IgogICAgXSwKICAgICJwZ19mZXRjaF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgcGdfZmV0Y2hfYXNzb2MocmVzb3VyY2UgcmVzdWx0IFssIGludCByb3ddKSIsCiAgICAgICAgIkZldGNoIGEgcm93IGFzIGFuIGFzc29jIGFycmF5IgogICAgXSwKICAgICJwZ19mZXRjaF9vYmplY3QiOiBbCiAgICAgICAgIm9iamVjdCBwZ19mZXRjaF9vYmplY3QocmVzb3VyY2UgcmVzdWx0IFssIGludCByb3cgWywgc3RyaW5nIGNsYXNzX25hbWUgWywgTlVMTHxhcnJheSBjdG9yX3BhcmFtc11dXSkiLAogICAgICAgICJGZXRjaCBhIHJvdyBhcyBhbiBvYmplY3QiCiAgICBdLAogICAgInBnX2ZldGNoX3Jlc3VsdCI6IFsKICAgICAgICAibWl4ZWQgcGdfZmV0Y2hfcmVzdWx0KHJlc291cmNlIHJlc3VsdCwgW2ludCByb3dfbnVtYmVyLF0gbWl4ZWQgZmllbGRfbmFtZSkiLAogICAgICAgICJSZXR1cm5zIHZhbHVlcyBmcm9tIGEgcmVzdWx0IGlkZW50aWZpZXIiCiAgICBdLAogICAgInBnX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYXJyYXkgcGdfZmV0Y2hfcm93KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgcm93IFssIGludCByZXN1bHRfdHlwZV1dKSIsCiAgICAgICAgIkdldCBhIHJvdyBhcyBhbiBlbnVtZXJhdGVkIGFycmF5IgogICAgXSwKICAgICJwZ19maWVsZF9pc19udWxsIjogWwogICAgICAgICJpbnQgcGdfZmllbGRfaXNfbnVsbChyZXNvdXJjZSByZXN1bHQsIFtpbnQgcm93LF0gbWl4ZWQgZmllbGRfbmFtZV9vcl9udW1iZXIpIiwKICAgICAgICAiVGVzdCBpZiBhIGZpZWxkIGlzIE5VTEwiCiAgICBdLAogICAgInBnX2ZpZWxkX25hbWUiOiBbCiAgICAgICAgInN0cmluZyBwZ19maWVsZF9uYW1lKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX251bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCIKICAgIF0sCiAgICAicGdfZmllbGRfbnVtIjogWwogICAgICAgICJpbnQgcGdfZmllbGRfbnVtKHJlc291cmNlIHJlc3VsdCwgc3RyaW5nIGZpZWxkX25hbWUpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZmllbGQgbnVtYmVyIG9mIHRoZSBuYW1lZCBmaWVsZCIKICAgIF0sCiAgICAicGdfZmllbGRfcHJ0bGVuIjogWwogICAgICAgICJpbnQgcGdfZmllbGRfcHJ0bGVuKHJlc291cmNlIHJlc3VsdCwgW2ludCByb3csXSBtaXhlZCBmaWVsZF9uYW1lX29yX251bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBwcmludGVkIGxlbmd0aCIKICAgIF0sCiAgICAicGdfZmllbGRfc2l6ZSI6IFsKICAgICAgICAiaW50IHBnX2ZpZWxkX3NpemUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGludGVybmFsIHNpemUgb2YgdGhlIGZpZWxkIgogICAgXSwKICAgICJwZ19maWVsZF90YWJsZSI6IFsKICAgICAgICAibWl4ZWQgcGdfZmllbGRfdGFibGUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyWywgYm9vbCBvaWRfb25seV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGFibGUgZmllbGQgYmVsb25ncyB0bywgb3IgdGFibGUncyBvaWQgaWYgb2lkX29ubHkgaXMgdHJ1ZSIKICAgIF0sCiAgICAicGdfZmllbGRfdHlwZSI6IFsKICAgICAgICAic3RyaW5nIHBnX2ZpZWxkX3R5cGUocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRfbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHR5cGUgbmFtZSBmb3IgdGhlIGdpdmVuIGZpZWxkIgogICAgXSwKICAgICJwZ19maWVsZF90eXBlX29pZCI6IFsKICAgICAgICAic3RyaW5nIHBnX2ZpZWxkX3R5cGVfb2lkKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX251bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSB0eXBlIG9pZCBmb3IgdGhlIGdpdmVuIGZpZWxkIgogICAgXSwKICAgICJwZ19mcmVlX3Jlc3VsdCI6IFsKICAgICAgICAiYm9vbCBwZ19mcmVlX3Jlc3VsdChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiRnJlZSByZXN1bHQgbWVtb3J5IgogICAgXSwKICAgICJwZ19nZXRfbm90aWZ5IjogWwogICAgICAgICJhcnJheSBwZ19nZXRfbm90aWZ5KFtyZXNvdXJjZSBjb25uZWN0aW9uWywgcmVzdWx0X3R5cGVdXSkiLAogICAgICAgICJHZXQgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbiIKICAgIF0sCiAgICAicGdfZ2V0X3BpZCI6IFsKICAgICAgICAiaW50IHBnX2dldF9waWQoW3Jlc291cmNlIGNvbm5lY3Rpb24pIiwKICAgICAgICAiR2V0IGJhY2tlbmQoc2VydmVyKSBwaWQiCiAgICBdLAogICAgInBnX2dldF9yZXN1bHQiOiBbCiAgICAgICAgInJlc291cmNlIHBnX2dldF9yZXN1bHQocmVzb3VyY2UgY29ubmVjdGlvbikiLAogICAgICAgICJHZXQgYXN5bmNocm9ub3VzIHF1ZXJ5IHJlc3VsdCIKICAgIF0sCiAgICAicGdfaG9zdCI6IFsKICAgICAgICAic3RyaW5nIHBnX2hvc3QoW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGhvc3QgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInBnX2luc2VydCI6IFsKICAgICAgICAibWl4ZWQgcGdfaW5zZXJ0KHJlc291cmNlIGRiLCBzdHJpbmcgdGFibGUsIGFycmF5IHZhbHVlc1ssIGludCBvcHRpb25zXSkiLAogICAgICAgICJJbnNlcnQgdmFsdWVzIChmaWxlZD0+dmFsdWUpIHRvIHRhYmxlIgogICAgXSwKICAgICJwZ19sYXN0X2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgcGdfbGFzdF9lcnJvcihbcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiR2V0IHRoZSBlcnJvciBtZXNzYWdlIHN0cmluZyIKICAgIF0sCiAgICAicGdfbGFzdF9ub3RpY2UiOiBbCiAgICAgICAgInN0cmluZyBwZ19sYXN0X25vdGljZShyZXNvdXJjZSBjb25uZWN0aW9uKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGxhc3Qgbm90aWNlIHNldCBieSB0aGUgYmFja2VuZCIKICAgIF0sCiAgICAicGdfbGFzdF9vaWQiOiBbCiAgICAgICAgInN0cmluZyBwZ19sYXN0X29pZChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGFzdCBvYmplY3QgaWRlbnRpZmllciIKICAgIF0sCiAgICAicGdfbG9fY2xvc2UiOiBbCiAgICAgICAgImJvb2wgcGdfbG9fY2xvc2UocmVzb3VyY2UgbGFyZ2Vfb2JqZWN0KSIsCiAgICAgICAgIkNsb3NlIGEgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJwZ19sb19jcmVhdGUiOiBbCiAgICAgICAgIm1peGVkIHBnX2xvX2NyZWF0ZShbcmVzb3VyY2UgY29ubmVjdGlvbl0sW21peGVkIGxhcmdlX29iamVjdF9vaWRdKSIsCiAgICAgICAgIkNyZWF0ZSBhIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAicGdfbG9fZXhwb3J0IjogWwogICAgICAgICJib29sIHBnX2xvX2V4cG9ydChbcmVzb3VyY2UgY29ubmVjdGlvbiwgXSBpbnQgb2Jqb2lkLCBzdHJpbmcgZmlsZW5hbWUpIiwKICAgICAgICAiRXhwb3J0IGxhcmdlIG9iamVjdCBkaXJlY3QgdG8gZmlsZXN5c3RlbSIKICAgIF0sCiAgICAicGdfbG9faW1wb3J0IjogWwogICAgICAgICJpbnQgcGdfbG9faW1wb3J0KFtyZXNvdXJjZSBjb25uZWN0aW9uLCBdIHN0cmluZyBmaWxlbmFtZSBbLCBtaXhlZCBvaWRdKSIsCiAgICAgICAgIkltcG9ydCBsYXJnZSBvYmplY3QgZGlyZWN0IGZyb20gZmlsZXN5c3RlbSIKICAgIF0sCiAgICAicGdfbG9fb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfbG9fb3BlbihbcmVzb3VyY2UgY29ubmVjdGlvbixdIGludCBsYXJnZV9vYmplY3Rfb2lkLCBzdHJpbmcgbW9kZSkiLAogICAgICAgICJPcGVuIGEgbGFyZ2Ugb2JqZWN0IGFuZCByZXR1cm4gZmQiCiAgICBdLAogICAgInBnX2xvX3JlYWQiOiBbCiAgICAgICAgInN0cmluZyBwZ19sb19yZWFkKHJlc291cmNlIGxhcmdlX29iamVjdCBbLCBpbnQgbGVuXSkiLAogICAgICAgICJSZWFkIGEgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJwZ19sb19yZWFkX2FsbCI6IFsKICAgICAgICAiaW50IHBnX2xvX3JlYWRfYWxsKHJlc291cmNlIGxhcmdlX29iamVjdCkiLAogICAgICAgICJSZWFkIGEgbGFyZ2Ugb2JqZWN0IGFuZCBzZW5kIHN0cmFpZ2h0IHRvIGJyb3dzZXIiCiAgICBdLAogICAgInBnX2xvX3NlZWsiOiBbCiAgICAgICAgImJvb2wgcGdfbG9fc2VlayhyZXNvdXJjZSBsYXJnZV9vYmplY3QsIGludCBvZmZzZXQgWywgaW50IHdoZW5jZV0pIiwKICAgICAgICAiU2Vla3MgcG9zaXRpb24gb2YgbGFyZ2Ugb2JqZWN0IgogICAgXSwKICAgICJwZ19sb190ZWxsIjogWwogICAgICAgICJpbnQgcGdfbG9fdGVsbChyZXNvdXJjZSBsYXJnZV9vYmplY3QpIiwKICAgICAgICAiUmV0dXJucyBjdXJyZW50IHBvc2l0aW9uIG9mIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAicGdfbG9fdW5saW5rIjogWwogICAgICAgICJib29sIHBnX2xvX3VubGluayhbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBsYXJnZV9vYmplY3Rfb2lkKSIsCiAgICAgICAgIkRlbGV0ZSBhIGxhcmdlIG9iamVjdCIKICAgIF0sCiAgICAicGdfbG9fd3JpdGUiOiBbCiAgICAgICAgImludCBwZ19sb193cml0ZShyZXNvdXJjZSBsYXJnZV9vYmplY3QsIHN0cmluZyBidWYgWywgaW50IGxlbl0pIiwKICAgICAgICAiV3JpdGUgYSBsYXJnZSBvYmplY3QiCiAgICBdLAogICAgInBnX21ldGFfZGF0YSI6IFsKICAgICAgICAiYXJyYXkgcGdfbWV0YV9kYXRhKHJlc291cmNlIGRiLCBzdHJpbmcgdGFibGUpIiwKICAgICAgICAiR2V0IG1ldGFfZGF0YSIKICAgIF0sCiAgICAicGdfbnVtX2ZpZWxkcyI6IFsKICAgICAgICAiaW50IHBnX251bV9maWVsZHMocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIGZpZWxkcyBpbiB0aGUgcmVzdWx0IgogICAgXSwKICAgICJwZ19udW1fcm93cyI6IFsKICAgICAgICAiaW50IHBnX251bV9yb3dzKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJSZXR1cm4gdGhlIG51bWJlciBvZiByb3dzIGluIHRoZSByZXN1bHQiCiAgICBdLAogICAgInBnX29wdGlvbnMiOiBbCiAgICAgICAgInN0cmluZyBwZ19vcHRpb25zKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJHZXQgdGhlIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ19wYXJhbWV0ZXJfc3RhdHVzIjogWwogICAgICAgICJzdHJpbmd8ZmFsc2UgcGdfcGFyYW1ldGVyX3N0YXR1cyhbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBwYXJhbV9uYW1lKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHZhbHVlIG9mIGEgc2VydmVyIHBhcmFtZXRlciIKICAgIF0sCiAgICAicGdfcGNvbm5lY3QiOiBbCiAgICAgICAgInJlc291cmNlIHBnX3Bjb25uZWN0KHN0cmluZyBjb25uZWN0aW9uX3N0cmluZyB8IFtzdHJpbmcgaG9zdCwgc3RyaW5nIHBvcnQgWywgc3RyaW5nIG9wdGlvbnMgWywgc3RyaW5nIHR0eSxdXV0gc3RyaW5nIGRhdGFiYXNlKSIsCiAgICAgICAgIk9wZW4gYSBwZXJzaXN0ZW50IFBvc3RncmVTUUwgY29ubmVjdGlvbiIKICAgIF0sCiAgICAicGdfcGluZyI6IFsKICAgICAgICAiYm9vbCBwZ19waW5nKFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJQaW5nIGRhdGFiYXNlLiBJZiBjb25uZWN0aW9uIGlzIGJhZCwgdHJ5IHRvIHJlY29ubmVjdC4iCiAgICBdLAogICAgInBnX3BvcnQiOiBbCiAgICAgICAgImludCBwZ19wb3J0KFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJSZXR1cm4gdGhlIHBvcnQgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAicGdfcHJlcGFyZSI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfcHJlcGFyZShbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBzdG10bmFtZSwgc3RyaW5nIHF1ZXJ5KSIsCiAgICAgICAgIlByZXBhcmUgYSBxdWVyeSBmb3IgZnV0dXJlIGV4ZWN1dGlvbiIKICAgIF0sCiAgICAicGdfcHV0X2xpbmUiOiBbCiAgICAgICAgImJvb2wgcGdfcHV0X2xpbmUoW3Jlc291cmNlIGNvbm5lY3Rpb24sXSBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiU2VuZCBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIGJhY2tlbmQgc2VydmVyIgogICAgXSwKICAgICJwZ19xdWVyeSI6IFsKICAgICAgICAicmVzb3VyY2UgcGdfcXVlcnkoW3Jlc291cmNlIGNvbm5lY3Rpb24sXSBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiRXhlY3V0ZSBhIHF1ZXJ5IgogICAgXSwKICAgICJwZ19xdWVyeV9wYXJhbXMiOiBbCiAgICAgICAgInJlc291cmNlIHBnX3F1ZXJ5X3BhcmFtcyhbcmVzb3VyY2UgY29ubmVjdGlvbixdIHN0cmluZyBxdWVyeSwgYXJyYXkgcGFyYW1zKSIsCiAgICAgICAgIkV4ZWN1dGUgYSBxdWVyeSIKICAgIF0sCiAgICAicGdfcmVzdWx0X2Vycm9yIjogWwogICAgICAgICJzdHJpbmcgcGdfcmVzdWx0X2Vycm9yKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXQgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggcmVzdWx0IgogICAgXSwKICAgICJwZ19yZXN1bHRfZXJyb3JfZmllbGQiOiBbCiAgICAgICAgInN0cmluZyBwZ19yZXN1bHRfZXJyb3JfZmllbGQocmVzb3VyY2UgcmVzdWx0LCBpbnQgZmllbGRjb2RlKSIsCiAgICAgICAgIkdldCBlcnJvciBtZXNzYWdlIGZpZWxkIGFzc29jaWF0ZWQgd2l0aCByZXN1bHQiCiAgICBdLAogICAgInBnX3Jlc3VsdF9zZWVrIjogWwogICAgICAgICJib29sIHBnX3Jlc3VsdF9zZWVrKHJlc291cmNlIHJlc3VsdCwgaW50IG9mZnNldCkiLAogICAgICAgICJTZXQgaW50ZXJuYWwgcm93IG9mZnNldCIKICAgIF0sCiAgICAicGdfcmVzdWx0X3N0YXR1cyI6IFsKICAgICAgICAibWl4ZWQgcGdfcmVzdWx0X3N0YXR1cyhyZXNvdXJjZSByZXN1bHRbLCBsb25nIHJlc3VsdF90eXBlXSkiLAogICAgICAgICJHZXQgc3RhdHVzIG9mIHF1ZXJ5IHJlc3VsdCIKICAgIF0sCiAgICAicGdfc2VsZWN0IjogWwogICAgICAgICJtaXhlZCBwZ19zZWxlY3QocmVzb3VyY2UgZGIsIHN0cmluZyB0YWJsZSwgYXJyYXkgaWRzWywgaW50IG9wdGlvbnNdKSIsCiAgICAgICAgIlNlbGVjdCByZWNvcmRzIHRoYXQgaGFzIGlkcyAoaWQ9PnZhbHVlKSIKICAgIF0sCiAgICAicGdfc2VuZF9leGVjdXRlIjogWwogICAgICAgICJib29sIHBnX3NlbmRfZXhlY3V0ZShyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgc3RtdG5hbWUsIGFycmF5IHBhcmFtcykiLAogICAgICAgICJFeGVjdXRlcyBwcmV2cmlvdXNseSBwcmVwYXJlZCBzdG10bmFtZSBhc3luY2hyb25vdXNseSIKICAgIF0sCiAgICAicGdfc2VuZF9wcmVwYXJlIjogWwogICAgICAgICJib29sIHBnX3NlbmRfcHJlcGFyZShyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgc3RtdG5hbWUsIHN0cmluZyBxdWVyeSkiLAogICAgICAgICJBc3luY2hyb25vdXNseSBwcmVwYXJlIGEgcXVlcnkgZm9yIGZ1dHVyZSBleGVjdXRpb24iCiAgICBdLAogICAgInBnX3NlbmRfcXVlcnkiOiBbCiAgICAgICAgImJvb2wgcGdfc2VuZF9xdWVyeShyZXNvdXJjZSBjb25uZWN0aW9uLCBzdHJpbmcgcXVlcnkpIiwKICAgICAgICAiU2VuZCBhc3luY2hyb25vdXMgcXVlcnkiCiAgICBdLAogICAgInBnX3NlbmRfcXVlcnlfcGFyYW1zIjogWwogICAgICAgICJib29sIHBnX3NlbmRfcXVlcnlfcGFyYW1zKHJlc291cmNlIGNvbm5lY3Rpb24sIHN0cmluZyBxdWVyeSwgYXJyYXkgcGFyYW1zKSIsCiAgICAgICAgIlNlbmQgYXN5bmNocm9ub3VzIHBhcmFtZXRlcml6ZWQgcXVlcnkiCiAgICBdLAogICAgInBnX3NldF9jbGllbnRfZW5jb2RpbmciOiBbCiAgICAgICAgImludCBwZ19zZXRfY2xpZW50X2VuY29kaW5nKFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gc3RyaW5nIGVuY29kaW5nKSIsCiAgICAgICAgIlNldCBjbGllbnQgZW5jb2RpbmciCiAgICBdLAogICAgInBnX3NldF9lcnJvcl92ZXJib3NpdHkiOiBbCiAgICAgICAgImludCBwZ19zZXRfZXJyb3JfdmVyYm9zaXR5KFtyZXNvdXJjZSBjb25uZWN0aW9uLF0gaW50IHZlcmJvc2l0eSkiLAogICAgICAgICJTZXQgZXJyb3IgdmVyYm9zaXR5IgogICAgXSwKICAgICJwZ190cmFjZSI6IFsKICAgICAgICAiYm9vbCBwZ190cmFjZShzdHJpbmcgZmlsZW5hbWUgWywgc3RyaW5nIG1vZGUgWywgcmVzb3VyY2UgY29ubmVjdGlvbl1dKSIsCiAgICAgICAgIkVuYWJsZSB0cmFjaW5nIGEgUG9zdGdyZVNRTCBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ190cmFuc2FjdGlvbl9zdGF0dXMiOiBbCiAgICAgICAgImludCBwZ190cmFuc2FjdGlvbl9zdGF0dXMocmVzb3VyY2UgY29ubm5lY3Rpb24pIiwKICAgICAgICAiR2V0IHRyYW5zYWN0aW9uIHN0YXR1cyIKICAgIF0sCiAgICAicGdfdHR5IjogWwogICAgICAgICJzdHJpbmcgcGdfdHR5KFtyZXNvdXJjZSBjb25uZWN0aW9uXSkiLAogICAgICAgICJSZXR1cm4gdGhlIHR0eSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ubmVjdGlvbiIKICAgIF0sCiAgICAicGdfdW5lc2NhcGVfYnl0ZWEiOiBbCiAgICAgICAgInN0cmluZyBwZ191bmVzY2FwZV9ieXRlYShzdHJpbmcgZGF0YSkiLAogICAgICAgICJVbmVzY2FwZSBiaW5hcnkgZm9yIGJ5dGVhIHR5cGUiCiAgICBdLAogICAgInBnX3VudHJhY2UiOiBbCiAgICAgICAgImJvb2wgcGdfdW50cmFjZShbcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiRGlzYWJsZSB0cmFjaW5nIG9mIGEgUG9zdGdyZVNRTCBjb25uZWN0aW9uIgogICAgXSwKICAgICJwZ191cGRhdGUiOiBbCiAgICAgICAgIm1peGVkIHBnX3VwZGF0ZShyZXNvdXJjZSBkYiwgc3RyaW5nIHRhYmxlLCBhcnJheSBmaWVsZHMsIGFycmF5IGlkc1ssIGludCBvcHRpb25zXSkiLAogICAgICAgICJVcGRhdGUgdGFibGUgdXNpbmcgdmFsdWVzIChmaWVsZD0+dmFsdWUpIGFuZCBpZHMgKGlkPT52YWx1ZSkiCiAgICBdLAogICAgInBnX3ZlcnNpb24iOiBbCiAgICAgICAgImFycmF5IHBnX3ZlcnNpb24oW3Jlc291cmNlIGNvbm5lY3Rpb25dKSIsCiAgICAgICAgIlJldHVybnMgYW4gYXJyYXkgd2l0aCBjbGllbnQsIHByb3RvY29sIGFuZCBzZXJ2ZXIgdmVyc2lvbiAod2hlbiBhdmFpbGFibGUpIgogICAgXSwKICAgICJwaHBfZWdnX2xvZ29fZ3VpZCI6IFsKICAgICAgICAic3RyaW5nIHBocF9lZ2dfbG9nb19ndWlkKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBzcGVjaWFsIElEIHVzZWQgdG8gcmVxdWVzdCB0aGUgUEhQIGxvZ28gaW4gcGhwaW5mbyBzY3JlZW5zIgogICAgXSwKICAgICJwaHBfaW5pX2xvYWRlZF9maWxlIjogWwogICAgICAgICJzdHJpbmcgcGhwX2luaV9sb2FkZWRfZmlsZSh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgYWN0dWFsIGxvYWRlZCBpbmkgZmlsZW5hbWUiCiAgICBdLAogICAgInBocF9pbmlfc2Nhbm5lZF9maWxlcyI6IFsKICAgICAgICAic3RyaW5nIHBocF9pbmlfc2Nhbm5lZF9maWxlcyh2b2lkKSIsCiAgICAgICAgIlJldHVybiBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIG9mIC5pbmkgZmlsZXMgcGFyc2VkIGZyb20gdGhlIGFkZGl0aW9uYWwgaW5pIGRpciIKICAgIF0sCiAgICAicGhwX2xvZ29fZ3VpZCI6IFsKICAgICAgICAic3RyaW5nIHBocF9sb2dvX2d1aWQodm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIHNwZWNpYWwgSUQgdXNlZCB0byByZXF1ZXN0IHRoZSBQSFAgbG9nbyBpbiBwaHBpbmZvIHNjcmVlbnMiCiAgICBdLAogICAgInBocF9yZWFsX2xvZ29fZ3VpZCI6IFsKICAgICAgICAic3RyaW5nIHBocF9yZWFsX2xvZ29fZ3VpZCh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgc3BlY2lhbCBJRCB1c2VkIHRvIHJlcXVlc3QgdGhlIFBIUCBsb2dvIGluIHBocGluZm8gc2NyZWVucyIKICAgIF0sCiAgICAicGhwX3NhcGlfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIHBocF9zYXBpX25hbWUodm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgU0FQSSBtb2R1bGUgbmFtZSIKICAgIF0sCiAgICAicGhwX3NubXB2MyI6IFsKICAgICAgICAidm9pZCBwaHBfc25tcHYzKElOVEVSTkFMX0ZVTkNUSU9OX1BBUkFNRVRFUlMsIGludCBzdCkiLAogICAgICAgICIqICogR2VuZXJpYyBTTk1QdjMgb2JqZWN0IGZldGNoZXIgKiBGcm9tIGhlcmUgaXMgcGFzc2VkIG9uIHRoZSB0aGUgY29tbW9uIGludGVybmFsIG9iamVjdCBmZXRjaGVyLiAqICogc3Q9U05NUF9DTURfR0VUICAgc25tcDNfZ2V0KCkgLSBxdWVyeSBhbiBhZ2VudCBhbmQgcmV0dXJuIGEgc2luZ2xlIHZhbHVlLiAqIHN0PVNOTVBfQ01EX0dFVE5FWFQgICBzbm1wM19nZXRuZXh0KCkgLSBxdWVyeSBhbiBhZ2VudCBhbmQgcmV0dXJuIHRoZSBuZXh0IHNpbmdsZSB2YWx1ZS4gKiBzdD1TTk1QX0NNRF9XQUxLICAgc25tcDNfd2FsaygpIC0gd2FsayB0aGUgbWliIGFuZCByZXR1cm4gYSBzaW5nbGUgZGltZW5zaW9uYWwgYXJyYXkgICogICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmcgdGhlIHZhbHVlcy4gKiBzdD1TTk1QX0NNRF9SRUFMV0FMSyAgIHNubXAzX3JlYWxfd2FsaygpIC0gd2FsayB0aGUgbWliIGFuZCByZXR1cm4gYW4gICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgb2Ygb2lkLHZhbHVlIHBhaXJzLiAqIHN0PVNOTVBfQ01EX1NFVCAgc25tcDNfc2V0KCkgLSBxdWVyeSBhbiBhZ2VudCBhbmQgc2V0IGEgc2luZ2xlIHZhbHVlICoiCiAgICBdLAogICAgInBocF9zdHJpcF93aGl0ZXNwYWNlIjogWwogICAgICAgICJzdHJpbmcgcGhwX3N0cmlwX3doaXRlc3BhY2Uoc3RyaW5nIGZpbGVfbmFtZSkiLAogICAgICAgICJSZXR1cm4gc291cmNlIHdpdGggc3RyaXBwZWQgY29tbWVudHMgYW5kIHdoaXRlc3BhY2UiCiAgICBdLAogICAgInBocF91bmFtZSI6IFsKICAgICAgICAic3RyaW5nIHBocF91bmFtZSh2b2lkKSIsCiAgICAgICAgIlJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3lzdGVtIFBIUCB3YXMgYnVpbHQgb24iCiAgICBdLAogICAgInBocGNyZWRpdHMiOiBbCiAgICAgICAgInZvaWQgcGhwY3JlZGl0cyhbaW50IGZsYWddKSIsCiAgICAgICAgIlByaW50cyB0aGUgbGlzdCBvZiBwZW9wbGUgd2hvJ3ZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBQSFAgcHJvamVjdCIKICAgIF0sCiAgICAicGhwaW5mbyI6IFsKICAgICAgICAidm9pZCBwaHBpbmZvKFtpbnQgd2hhdF0pIiwKICAgICAgICAiT3V0cHV0IGEgcGFnZSBvZiB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgUEhQIGFuZCB0aGUgY3VycmVudCByZXF1ZXN0IgogICAgXSwKICAgICJwaHB2ZXJzaW9uIjogWwogICAgICAgICJzdHJpbmcgcGhwdmVyc2lvbihbc3RyaW5nIGV4dGVuc2lvbl0pIiwKICAgICAgICAiUmV0dXJuIHRoZSBjdXJyZW50IFBIUCB2ZXJzaW9uIgogICAgXSwKICAgICJwaSI6IFsKICAgICAgICAiZmxvYXQgcGkodm9pZCkiLAogICAgICAgICJSZXR1cm5zIGFuIGFwcHJveGltYXRpb24gb2YgcGkiCiAgICBdLAogICAgInBuZzJ3Ym1wIjogWwogICAgICAgICJib29sIHBuZzJ3Ym1wIChzdHJpbmcgZl9vcmcsIHN0cmluZyBmX2Rlc3QsIGludCBkX2hlaWdodCwgaW50IGRfd2lkdGgsIGludCB0aHJlc2hvbGQpIiwKICAgICAgICAiQ29udmVydCBQTkcgaW1hZ2UgdG8gV0JNUCBpbWFnZSIKICAgIF0sCiAgICAicG9wZW4iOiBbCiAgICAgICAgInJlc291cmNlIHBvcGVuKHN0cmluZyBjb21tYW5kLCBzdHJpbmcgbW9kZSkiLAogICAgICAgICJFeGVjdXRlIGEgY29tbWFuZCBhbmQgb3BlbiBlaXRoZXIgYSByZWFkIG9yIGEgd3JpdGUgcGlwZSB0byBpdCIKICAgIF0sCiAgICAicG9zaXhfYWNjZXNzIjogWwogICAgICAgICJib29sIHBvc2l4X2FjY2VzcyhzdHJpbmcgZmlsZSBbLCBpbnQgbW9kZV0pIiwKICAgICAgICAiRGV0ZXJtaW5lIGFjY2Vzc2liaWxpdHkgb2YgYSBmaWxlIChQT1NJWC4xIDUuNi4zKSIKICAgIF0sCiAgICAicG9zaXhfY3Rlcm1pZCI6IFsKICAgICAgICAic3RyaW5nIHBvc2l4X2N0ZXJtaWQodm9pZCkiLAogICAgICAgICJHZW5lcmF0ZSB0ZXJtaW5hbCBwYXRoIG5hbWUgKFBPU0lYLjEsIDQuNy4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0X2xhc3RfZXJyb3IiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRfbGFzdF9lcnJvcih2b2lkKSIsCiAgICAgICAgIlJldHJpZXZlIHRoZSBlcnJvciBudW1iZXIgc2V0IGJ5IHRoZSBsYXN0IHBvc2l4IGZ1bmN0aW9uIHdoaWNoIGZhaWxlZC4iCiAgICBdLAogICAgInBvc2l4X2dldGN3ZCI6IFsKICAgICAgICAic3RyaW5nIHBvc2l4X2dldGN3ZCh2b2lkKSIsCiAgICAgICAgIkdldCB3b3JraW5nIGRpcmVjdG9yeSBwYXRobmFtZSAoUE9TSVguMSwgNS4yLjIpIgogICAgXSwKICAgICJwb3NpeF9nZXRlZ2lkIjogWwogICAgICAgICJpbnQgcG9zaXhfZ2V0ZWdpZCh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgY3VycmVudCBlZmZlY3RpdmUgZ3JvdXAgaWQgKFBPU0lYLjEsIDQuMi4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0ZXVpZCI6IFsKICAgICAgICAiaW50IHBvc2l4X2dldGV1aWQodm9pZCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgZWZmZWN0aXZlIHVzZXIgaWQgKFBPU0lYLjEsIDQuMi4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0Z2lkIjogWwogICAgICAgICJpbnQgcG9zaXhfZ2V0Z2lkKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSBjdXJyZW50IGdyb3VwIGlkIChQT1NJWC4xLCA0LjIuMSkiCiAgICBdLAogICAgInBvc2l4X2dldGdyZ2lkIjogWwogICAgICAgICJhcnJheSBwb3NpeF9nZXRncmdpZChsb25nIGdpZCkiLAogICAgICAgICJHcm91cCBkYXRhYmFzZSBhY2Nlc3MgKFBPU0lYLjEsIDkuMi4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0Z3JuYW0iOiBbCiAgICAgICAgImFycmF5IHBvc2l4X2dldGdybmFtKHN0cmluZyBncm91cG5hbWUpIiwKICAgICAgICAiR3JvdXAgZGF0YWJhc2UgYWNjZXNzIChQT1NJWC4xLCA5LjIuMSkiCiAgICBdLAogICAgInBvc2l4X2dldGdyb3VwcyI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfZ2V0Z3JvdXBzKHZvaWQpIiwKICAgICAgICAiR2V0IHN1cHBsZW1lbnRhcnkgZ3JvdXAgaWQncyAoUE9TSVguMSwgNC4yLjMpIgogICAgXSwKICAgICJwb3NpeF9nZXRsb2dpbiI6IFsKICAgICAgICAic3RyaW5nIHBvc2l4X2dldGxvZ2luKHZvaWQpIiwKICAgICAgICAiR2V0IHVzZXIgbmFtZSAoUE9TSVguMSwgNC4yLjQpIgogICAgXSwKICAgICJwb3NpeF9nZXRwZ2lkIjogWwogICAgICAgICJpbnQgcG9zaXhfZ2V0cGdpZCh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgcHJvY2VzcyBncm91cCBpZCBvZiB0aGUgc3BlY2lmaWVkIHByb2Nlc3MgKFRoaXMgaXMgbm90IGEgUE9TSVggZnVuY3Rpb24sIGJ1dCBhIFNWUjRpc20sIHNvIHdlIGNvbXBpbGUgY29uZGl0aW9uYWxseSkiCiAgICBdLAogICAgInBvc2l4X2dldHBncnAiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRwZ3JwKHZvaWQpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgcHJvY2VzcyBncm91cCBpZCAoUE9TSVguMSwgNC4zLjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRwaWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRwaWQodm9pZCkiLAogICAgICAgICJHZXQgdGhlIGN1cnJlbnQgcHJvY2VzcyBpZCAoUE9TSVguMSwgNC4xLjEpIgogICAgXSwKICAgICJwb3NpeF9nZXRwcGlkIjogWwogICAgICAgICJpbnQgcG9zaXhfZ2V0cHBpZCh2b2lkKSIsCiAgICAgICAgIkdldCB0aGUgcGFyZW50IHByb2Nlc3MgaWQgKFBPU0lYLjEsIDQuMS4xKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0cHduYW0iOiBbCiAgICAgICAgImFycmF5IHBvc2l4X2dldHB3bmFtKHN0cmluZyBncm91cG5hbWUpIiwKICAgICAgICAiVXNlciBkYXRhYmFzZSBhY2Nlc3MgKFBPU0lYLjEsIDkuMi4yKSIKICAgIF0sCiAgICAicG9zaXhfZ2V0cHd1aWQiOiBbCiAgICAgICAgImFycmF5IHBvc2l4X2dldHB3dWlkKGxvbmcgdWlkKSIsCiAgICAgICAgIlVzZXIgZGF0YWJhc2UgYWNjZXNzIChQT1NJWC4xLCA5LjIuMikiCiAgICBdLAogICAgInBvc2l4X2dldHJsaW1pdCI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfZ2V0cmxpbWl0KHZvaWQpIiwKICAgICAgICAiR2V0IHN5c3RlbSByZXNvdXJjZSBjb25zdW1wdGlvbiBsaW1pdHMgKFRoaXMgaXMgbm90IGEgUE9TSVggZnVuY3Rpb24sIGJ1dCBhIEJTRGlzbSBhbmQgYSBTVlI0aXNtLiBXZSBjb21waWxlIGNvbmRpdGlvbmFsbHkpIgogICAgXSwKICAgICJwb3NpeF9nZXRzaWQiOiBbCiAgICAgICAgImludCBwb3NpeF9nZXRzaWQodm9pZCkiLAogICAgICAgICJHZXQgcHJvY2VzcyBncm91cCBpZCBvZiBzZXNzaW9uIGxlYWRlciAoVGhpcyBpcyBub3QgYSBQT1NJWCBmdW5jdGlvbiwgYnV0IGEgU1ZSNGlzbSwgc28gYmUgY29tcGlsZSBjb25kaXRpb25hbGx5KSIKICAgIF0sCiAgICAicG9zaXhfZ2V0dWlkIjogWwogICAgICAgICJpbnQgcG9zaXhfZ2V0dWlkKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSBjdXJyZW50IHVzZXIgaWQgKFBPU0lYLjEsIDQuMi4xKSIKICAgIF0sCiAgICAicG9zaXhfaW5pdGdyb3VwcyI6IFsKICAgICAgICAiYm9vbCBwb3NpeF9pbml0Z3JvdXBzKHN0cmluZyBuYW1lLCBpbnQgYmFzZV9ncm91cF9pZCkiLAogICAgICAgICJDYWxjdWxhdGUgdGhlIGdyb3VwIGFjY2VzcyBsaXN0IGZvciB0aGUgdXNlciBzcGVjaWZpZWQgaW4gbmFtZS4iCiAgICBdLAogICAgInBvc2l4X2lzYXR0eSI6IFsKICAgICAgICAiYm9vbCBwb3NpeF9pc2F0dHkoaW50IGZkKSIsCiAgICAgICAgIkRldGVybWluZSBpZiBmaWxlZGVzYyBpcyBhIHR0eSAoUE9TSVguMSwgNC43LjEpIgogICAgXSwKICAgICJwb3NpeF9raWxsIjogWwogICAgICAgICJib29sIHBvc2l4X2tpbGwoaW50IHBpZCwgaW50IHNpZykiLAogICAgICAgICJTZW5kIGEgc2lnbmFsIHRvIGEgcHJvY2VzcyAoUE9TSVguMSwgMy4zLjIpIgogICAgXSwKICAgICJwb3NpeF9ta2ZpZm8iOiBbCiAgICAgICAgImJvb2wgcG9zaXhfbWtmaWZvKHN0cmluZyBwYXRobmFtZSwgaW50IG1vZGUpIiwKICAgICAgICAiTWFrZSBhIEZJRk8gc3BlY2lhbCBmaWxlIChQT1NJWC4xLCA1LjQuMikiCiAgICBdLAogICAgInBvc2l4X21rbm9kIjogWwogICAgICAgICJib29sIHBvc2l4X21rbm9kKHN0cmluZyBwYXRobmFtZSwgaW50IG1vZGUgWywgaW50IG1ham9yIFssIGludCBtaW5vcl1dKSIsCiAgICAgICAgIk1ha2UgYSBzcGVjaWFsIG9yIG9yZGluYXJ5IGZpbGUgKFBPU0lYLjEpIgogICAgXSwKICAgICJwb3NpeF9zZXRlZ2lkIjogWwogICAgICAgICJib29sIHBvc2l4X3NldGVnaWQobG9uZyB1aWQpIiwKICAgICAgICAiU2V0IGVmZmVjdGl2ZSBncm91cCBpZCIKICAgIF0sCiAgICAicG9zaXhfc2V0ZXVpZCI6IFsKICAgICAgICAiYm9vbCBwb3NpeF9zZXRldWlkKGxvbmcgdWlkKSIsCiAgICAgICAgIlNldCBlZmZlY3RpdmUgdXNlciBpZCIKICAgIF0sCiAgICAicG9zaXhfc2V0Z2lkIjogWwogICAgICAgICJib29sIHBvc2l4X3NldGdpZChpbnQgdWlkKSIsCiAgICAgICAgIlNldCBncm91cCBpZCAoUE9TSVguMSwgNC4yLjIpIgogICAgXSwKICAgICJwb3NpeF9zZXRwZ2lkIjogWwogICAgICAgICJib29sIHBvc2l4X3NldHBnaWQoaW50IHBpZCwgaW50IHBnaWQpIiwKICAgICAgICAiU2V0IHByb2Nlc3MgZ3JvdXAgaWQgZm9yIGpvYiBjb250cm9sIChQT1NJWC4xLCA0LjMuMykiCiAgICBdLAogICAgInBvc2l4X3NldHNpZCI6IFsKICAgICAgICAiaW50IHBvc2l4X3NldHNpZCh2b2lkKSIsCiAgICAgICAgIkNyZWF0ZSBzZXNzaW9uIGFuZCBzZXQgcHJvY2VzcyBncm91cCBpZCAoUE9TSVguMSwgNC4zLjIpIgogICAgXSwKICAgICJwb3NpeF9zZXR1aWQiOiBbCiAgICAgICAgImJvb2wgcG9zaXhfc2V0dWlkKGxvbmcgdWlkKSIsCiAgICAgICAgIlNldCB1c2VyIGlkIChQT1NJWC4xLCA0LjIuMikiCiAgICBdLAogICAgInBvc2l4X3N0cmVycm9yIjogWwogICAgICAgICJzdHJpbmcgcG9zaXhfc3RyZXJyb3IoaW50IGVycm5vKSIsCiAgICAgICAgIlJldHJpZXZlIHRoZSBzeXN0ZW0gZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGVycm5vLiIKICAgIF0sCiAgICAicG9zaXhfdGltZXMiOiBbCiAgICAgICAgImFycmF5IHBvc2l4X3RpbWVzKHZvaWQpIiwKICAgICAgICAiR2V0IHByb2Nlc3MgdGltZXMgKFBPU0lYLjEsIDQuNS4yKSIKICAgIF0sCiAgICAicG9zaXhfdHR5bmFtZSI6IFsKICAgICAgICAic3RyaW5nIHBvc2l4X3R0eW5hbWUoaW50IGZkKSIsCiAgICAgICAgIkRldGVybWluZSB0ZXJtaW5hbCBkZXZpY2UgbmFtZSAoUE9TSVguMSwgNC43LjIpIgogICAgXSwKICAgICJwb3NpeF91bmFtZSI6IFsKICAgICAgICAiYXJyYXkgcG9zaXhfdW5hbWUodm9pZCkiLAogICAgICAgICJHZXQgc3lzdGVtIG5hbWUgKFBPU0lYLjEsIDQuNC4xKSIKICAgIF0sCiAgICAicG93IjogWwogICAgICAgICJudW1iZXIgcG93KG51bWJlciBiYXNlLCBudW1iZXIgZXhwb25lbnQpIiwKICAgICAgICAiUmV0dXJucyBiYXNlIHJhaXNlZCB0byB0aGUgcG93ZXIgb2YgZXhwb25lbnQuIFJldHVybnMgaW50ZWdlciByZXN1bHQgd2hlbiBwb3NzaWJsZSIKICAgIF0sCiAgICAicHJlZ19maWx0ZXIiOiBbCiAgICAgICAgIm1peGVkIHByZWdfZmlsdGVyKG1peGVkIHJlZ2V4LCBtaXhlZCByZXBsYWNlLCBtaXhlZCBzdWJqZWN0IFssIGludCBsaW1pdCBbLCBpbnQgJmNvdW50XV0pIiwKICAgICAgICAiUGVyZm9ybSBQZXJsLXN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiByZXBsYWNlbWVudCBhbmQgb25seSByZXR1cm4gbWF0Y2hlcy4iCiAgICBdLAogICAgInByZWdfZ3JlcCI6IFsKICAgICAgICAiYXJyYXkgcHJlZ19ncmVwKHN0cmluZyByZWdleCwgYXJyYXkgaW5wdXQgWywgaW50IGZsYWdzXSkiLAogICAgICAgICJTZWFyY2hlcyBhcnJheSBhbmQgcmV0dXJucyBlbnRyaWVzIHdoaWNoIG1hdGNoIHJlZ2V4IgogICAgXSwKICAgICJwcmVnX2xhc3RfZXJyb3IiOiBbCiAgICAgICAgImludCBwcmVnX2xhc3RfZXJyb3IoKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGVycm9yIGNvZGUgb2YgdGhlIGxhc3QgcmVnZXhwIGV4ZWN1dGlvbi4iCiAgICBdLAogICAgInByZWdfbWF0Y2giOiBbCiAgICAgICAgImludCBwcmVnX21hdGNoKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3ViamVjdCBbLCBhcnJheSAmc3VicGF0dGVybnMgWywgaW50IGZsYWdzIFssIGludCBvZmZzZXRdXV0pIiwKICAgICAgICAiUGVyZm9ybSBhIFBlcmwtc3R5bGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIgogICAgXSwKICAgICJwcmVnX21hdGNoX2FsbCI6IFsKICAgICAgICAiaW50IHByZWdfbWF0Y2hfYWxsKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3ViamVjdCwgYXJyYXkgJnN1YnBhdHRlcm5zIFssIGludCBmbGFncyBbLCBpbnQgb2Zmc2V0XV0pIiwKICAgICAgICAiUGVyZm9ybSBhIFBlcmwtc3R5bGUgZ2xvYmFsIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCIKICAgIF0sCiAgICAicHJlZ19xdW90ZSI6IFsKICAgICAgICAic3RyaW5nIHByZWdfcXVvdGUoc3RyaW5nIHN0ciBbLCBzdHJpbmcgZGVsaW1fY2hhcl0pIiwKICAgICAgICAiUXVvdGUgcmVndWxhciBleHByZXNzaW9uIGNoYXJhY3RlcnMgcGx1cyBhbiBvcHRpb25hbCBjaGFyYWN0ZXIiCiAgICBdLAogICAgInByZWdfcmVwbGFjZSI6IFsKICAgICAgICAibWl4ZWQgcHJlZ19yZXBsYWNlKG1peGVkIHJlZ2V4LCBtaXhlZCByZXBsYWNlLCBtaXhlZCBzdWJqZWN0IFssIGludCBsaW1pdCBbLCBpbnQgJmNvdW50XV0pIiwKICAgICAgICAiUGVyZm9ybSBQZXJsLXN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiByZXBsYWNlbWVudC4iCiAgICBdLAogICAgInByZWdfcmVwbGFjZV9jYWxsYmFjayI6IFsKICAgICAgICAibWl4ZWQgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKG1peGVkIHJlZ2V4LCBtaXhlZCBjYWxsYmFjaywgbWl4ZWQgc3ViamVjdCBbLCBpbnQgbGltaXQgWywgaW50ICZjb3VudF1dKSIsCiAgICAgICAgIlBlcmZvcm0gUGVybC1zdHlsZSByZWd1bGFyIGV4cHJlc3Npb24gcmVwbGFjZW1lbnQgdXNpbmcgcmVwbGFjZW1lbnQgY2FsbGJhY2suIgogICAgXSwKICAgICJwcmVnX3NwbGl0IjogWwogICAgICAgICJhcnJheSBwcmVnX3NwbGl0KHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3ViamVjdCBbLCBpbnQgbGltaXQgWywgaW50IGZsYWdzXV0pIiwKICAgICAgICAiU3BsaXQgc3RyaW5nIGludG8gYW4gYXJyYXkgdXNpbmcgYSBwZXJsLXN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcyBhIGRlbGltaXRlciIKICAgIF0sCiAgICAicHJldiI6IFsKICAgICAgICAibWl4ZWQgcHJldihhcnJheSBhcnJheV9hcmcpIiwKICAgICAgICAiTW92ZSBhcnJheSBhcmd1bWVudCdzIGludGVybmFsIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIGVsZW1lbnQgYW5kIHJldHVybiBpdCIKICAgIF0sCiAgICAicHJpbnQiOiBbCiAgICAgICAgImludCBwcmludChzdHJpbmcgYXJnKSIsCiAgICAgICAgIk91dHB1dCBhIHN0cmluZyIKICAgIF0sCiAgICAicHJpbnRfciI6IFsKICAgICAgICAibWl4ZWQgcHJpbnRfcihtaXhlZCB2YXIgWywgYm9vbCByZXR1cm5dKSIsCiAgICAgICAgIlByaW50cyBvdXQgb3IgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIHZhcmlhYmxlIgogICAgXSwKICAgICJwcmludGYiOiBbCiAgICAgICAgImludCBwcmludGYoc3RyaW5nIGZvcm1hdCBbLCBtaXhlZCBhcmcxIFssIG1peGVkIC4uLl1dKSIsCiAgICAgICAgIk91dHB1dCBhIGZvcm1hdHRlZCBzdHJpbmciCiAgICBdLAogICAgInByb2NfY2xvc2UiOiBbCiAgICAgICAgImludCBwcm9jX2Nsb3NlKHJlc291cmNlIHByb2Nlc3MpIiwKICAgICAgICAiY2xvc2UgYSBwcm9jZXNzIG9wZW5lZCBieSBwcm9jX29wZW4iCiAgICBdLAogICAgInByb2NfZ2V0X3N0YXR1cyI6IFsKICAgICAgICAiYXJyYXkgcHJvY19nZXRfc3RhdHVzKHJlc291cmNlIHByb2Nlc3MpIiwKICAgICAgICAiZ2V0IGluZm9ybWF0aW9uIGFib3V0IGEgcHJvY2VzcyBvcGVuZWQgYnkgcHJvY19vcGVuIgogICAgXSwKICAgICJwcm9jX25pY2UiOiBbCiAgICAgICAgImJvb2wgcHJvY19uaWNlKGludCBwcmlvcml0eSkiLAogICAgICAgICJDaGFuZ2UgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IHByb2Nlc3MiCiAgICBdLAogICAgInByb2Nfb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgcHJvY19vcGVuKHN0cmluZyBjb21tYW5kLCBhcnJheSBkZXNjcmlwdG9yc3BlYywgYXJyYXkgJnBpcGVzIFssIHN0cmluZyBjd2QgWywgYXJyYXkgZW52IFssIGFycmF5IG90aGVyX29wdGlvbnNdXV0pIiwKICAgICAgICAiUnVuIGEgcHJvY2VzcyB3aXRoIG1vcmUgY29udHJvbCBvdmVyIGl0J3MgZmlsZSBkZXNjcmlwdG9ycyIKICAgIF0sCiAgICAicHJvY190ZXJtaW5hdGUiOiBbCiAgICAgICAgImJvb2wgcHJvY190ZXJtaW5hdGUocmVzb3VyY2UgcHJvY2VzcyBbLCBsb25nIHNpZ25hbF0pIiwKICAgICAgICAia2lsbCBhIHByb2Nlc3Mgb3BlbmVkIGJ5IHByb2Nfb3BlbiIKICAgIF0sCiAgICAicHJvcGVydHlfZXhpc3RzIjogWwogICAgICAgICJib29sIHByb3BlcnR5X2V4aXN0cyhtaXhlZCBvYmplY3Rfb3JfY2xhc3MsIHN0cmluZyBwcm9wZXJ0eV9uYW1lKSIsCiAgICAgICAgIkNoZWNrcyBpZiB0aGUgb2JqZWN0IG9yIGNsYXNzIGhhcyBhIHByb3BlcnR5IgogICAgXSwKICAgICJwc3BlbGxfYWRkX3RvX3BlcnNvbmFsIjogWwogICAgICAgICJib29sIHBzcGVsbF9hZGRfdG9fcGVyc29uYWwoaW50IHBzcGVsbCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiQWRkcyBhIHdvcmQgdG8gYSBwZXJzb25hbCBsaXN0IgogICAgXSwKICAgICJwc3BlbGxfYWRkX3RvX3Nlc3Npb24iOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2FkZF90b19zZXNzaW9uKGludCBwc3BlbGwsIHN0cmluZyB3b3JkKSIsCiAgICAgICAgIkFkZHMgYSB3b3JkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24iCiAgICBdLAogICAgInBzcGVsbF9jaGVjayI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfY2hlY2soaW50IHBzcGVsbCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiUmV0dXJucyB0cnVlIGlmIHdvcmQgaXMgdmFsaWQiCiAgICBdLAogICAgInBzcGVsbF9jbGVhcl9zZXNzaW9uIjogWwogICAgICAgICJib29sIHBzcGVsbF9jbGVhcl9zZXNzaW9uKGludCBwc3BlbGwpIiwKICAgICAgICAiQ2xlYXJzIHRoZSBjdXJyZW50IHNlc3Npb24iCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfY3JlYXRlIjogWwogICAgICAgICJpbnQgcHNwZWxsX2NvbmZpZ19jcmVhdGUoc3RyaW5nIGxhbmd1YWdlIFssIHN0cmluZyBzcGVsbGluZyBbLCBzdHJpbmcgamFyZ29uIFssIHN0cmluZyBlbmNvZGluZ11dXSkiLAogICAgICAgICJDcmVhdGUgYSBuZXcgY29uZmlnIHRvIGJlIHVzZWQgbGF0ZXIgdG8gY3JlYXRlIGEgbWFuYWdlciIKICAgIF0sCiAgICAicHNwZWxsX2NvbmZpZ19kYXRhX2RpciI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfY29uZmlnX2RhdGFfZGlyKGludCBjb25mLCBzdHJpbmcgZGlyZWN0b3J5KSIsCiAgICAgICAgImxvY2F0aW9uIG9mIGxhbmd1YWdlIGRhdGEgZmlsZXMiCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfZGljdF9kaXIiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19kaWN0X2RpcihpbnQgY29uZiwgc3RyaW5nIGRpcmVjdG9yeSkiLAogICAgICAgICJsb2NhdGlvbiBvZiB0aGUgbWFpbiB3b3JkIGxpc3QiCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfaWdub3JlIjogWwogICAgICAgICJib29sIHBzcGVsbF9jb25maWdfaWdub3JlKGludCBjb25mLCBpbnQgaWdub3JlKSIsCiAgICAgICAgIklnbm9yZSB3b3JkcyA8PSBuIGNoYXJzIgogICAgXSwKICAgICJwc3BlbGxfY29uZmlnX21vZGUiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19tb2RlKGludCBjb25mLCBsb25nIG1vZGUpIiwKICAgICAgICAiU2VsZWN0IG1vZGUgZm9yIGNvbmZpZyAoUFNQRUxMX0ZBU1QsIFBTUEVMTF9OT1JNQUwgb3IgUFNQRUxMX0JBRF9TUEVMTEVSUykiCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfcGVyc29uYWwiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19wZXJzb25hbChpbnQgY29uZiwgc3RyaW5nIHBlcnNvbmFsKSIsCiAgICAgICAgIlVzZSBhIHBlcnNvbmFsIGRpY3Rpb25hcnkgZm9yIHRoaXMgY29uZmlnIgogICAgXSwKICAgICJwc3BlbGxfY29uZmlnX3JlcGwiOiBbCiAgICAgICAgImJvb2wgcHNwZWxsX2NvbmZpZ19yZXBsKGludCBjb25mLCBzdHJpbmcgcmVwbCkiLAogICAgICAgICJVc2UgYSBwZXJzb25hbCBkaWN0aW9uYXJ5IHdpdGggcmVwbGFjZW1lbnQgcGFpcnMgZm9yIHRoaXMgY29uZmlnIgogICAgXSwKICAgICJwc3BlbGxfY29uZmlnX3J1bnRvZ2V0aGVyIjogWwogICAgICAgICJib29sIHBzcGVsbF9jb25maWdfcnVudG9nZXRoZXIoaW50IGNvbmYsIGJvb2wgcnVudG9nZXRoZXIpIiwKICAgICAgICAiQ29uc2lkZXIgcnVuLXRvZ2V0aGVyIHdvcmRzIGFzIHZhbGlkIGNvbXBvbmVudHMiCiAgICBdLAogICAgInBzcGVsbF9jb25maWdfc2F2ZV9yZXBsIjogWwogICAgICAgICJib29sIHBzcGVsbF9jb25maWdfc2F2ZV9yZXBsKGludCBjb25mLCBib29sIHNhdmUpIiwKICAgICAgICAiU2F2ZSByZXBsYWNlbWVudCBwYWlycyB3aGVuIHBlcnNvbmFsIGxpc3QgaXMgc2F2ZWQgZm9yIHRoaXMgY29uZmlnIgogICAgXSwKICAgICJwc3BlbGxfbmV3IjogWwogICAgICAgICJpbnQgcHNwZWxsX25ldyhzdHJpbmcgbGFuZ3VhZ2UgWywgc3RyaW5nIHNwZWxsaW5nIFssIHN0cmluZyBqYXJnb24gWywgc3RyaW5nIGVuY29kaW5nIFssIGludCBtb2RlXV1dXSkiLAogICAgICAgICJMb2FkIGEgZGljdGlvbmFyeSIKICAgIF0sCiAgICAicHNwZWxsX25ld19jb25maWciOiBbCiAgICAgICAgImludCBwc3BlbGxfbmV3X2NvbmZpZyhpbnQgY29uZmlnKSIsCiAgICAgICAgIkxvYWQgYSBkaWN0aW9uYXJ5IGJhc2VkIG9uIHRoZSBnaXZlbiBjb25maWciCiAgICBdLAogICAgInBzcGVsbF9uZXdfcGVyc29uYWwiOiBbCiAgICAgICAgImludCBwc3BlbGxfbmV3X3BlcnNvbmFsKHN0cmluZyBwZXJzb25hbCwgc3RyaW5nIGxhbmd1YWdlIFssIHN0cmluZyBzcGVsbGluZyBbLCBzdHJpbmcgamFyZ29uIFssIHN0cmluZyBlbmNvZGluZyBbLCBpbnQgbW9kZV1dXV0pIiwKICAgICAgICAiTG9hZCBhIGRpY3Rpb25hcnkgd2l0aCBhIHBlcnNvbmFsIHdvcmRsaXN0IgogICAgXSwKICAgICJwc3BlbGxfc2F2ZV93b3JkbGlzdCI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfc2F2ZV93b3JkbGlzdChpbnQgcHNwZWxsKSIsCiAgICAgICAgIlNhdmVzIHRoZSBjdXJyZW50IChwZXJzb25hbCkgd29yZGxpc3QiCiAgICBdLAogICAgInBzcGVsbF9zdG9yZV9yZXBsYWNlbWVudCI6IFsKICAgICAgICAiYm9vbCBwc3BlbGxfc3RvcmVfcmVwbGFjZW1lbnQoaW50IHBzcGVsbCwgc3RyaW5nIG1pc3NwZWxsLCBzdHJpbmcgY29ycmVjdCkiLAogICAgICAgICJOb3RpZnkgdGhlIGRpY3Rpb25hcnkgb2YgYSB1c2VyLXNlbGVjdGVkIHJlcGxhY2VtZW50IgogICAgXSwKICAgICJwc3BlbGxfc3VnZ2VzdCI6IFsKICAgICAgICAiYXJyYXkgcHNwZWxsX3N1Z2dlc3QoaW50IHBzcGVsbCwgc3RyaW5nIHdvcmQpIiwKICAgICAgICAiUmV0dXJucyBhcnJheSBvZiBzdWdnZXN0aW9ucyIKICAgIF0sCiAgICAicHV0ZW52IjogWwogICAgICAgICJib29sIHB1dGVudihzdHJpbmcgc2V0dGluZykiLAogICAgICAgICJTZXQgdGhlIHZhbHVlIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIgogICAgXSwKICAgICJxdW90ZWRfcHJpbnRhYmxlX2RlY29kZSI6IFsKICAgICAgICAic3RyaW5nIHF1b3RlZF9wcmludGFibGVfZGVjb2RlKHN0cmluZyBzdHIpIiwKICAgICAgICAiQ29udmVydCBhIHF1b3RlZC1wcmludGFibGUgc3RyaW5nIHRvIGFuIDggYml0IHN0cmluZyIKICAgIF0sCiAgICAicXVvdGVkX3ByaW50YWJsZV9lbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyBxdW90ZWRfcHJpbnRhYmxlX2VuY29kZShzdHJpbmcgc3RyKSAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTihxdW90ZWRfcHJpbnRhYmxlX2VuY29kZSkgeyAgY2hhciAqc3RyLCAqbmV3X3N0cjsgIGludCBzdHJfbGVuOyAgc2l6ZV90IG5ld19zdHJfbGVuOyAgIGlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnMoWkVORF9OVU1fQVJHUygpIFRTUk1MU19DQywgXCJzXCIsICZzdHIsICZzdHJfbGVuKSAhPSBTVUNDRVNTKSB7ICAgcmV0dXJuOyAgfSAgIGlmICghc3RyX2xlbikgeyAgIFJFVFVSTl9FTVBUWV9TVFJJTkcoKTsgIH0gICBuZXdfc3RyID0gKGNoYXIgKilwaHBfcXVvdF9wcmludF9lbmNvZGUoKHVuc2lnbmVkIGNoYXIgKilzdHIsIChzaXplX3Qpc3RyX2xlbiwgJm5ld19zdHJfbGVuKTsgIFJFVFVSTl9TVFJJTkdMKG5ld19zdHIsIG5ld19zdHJfbGVuLCAwKTsgfSAvKiB9fX0iCiAgICBdLAogICAgInF1b3RlbWV0YSI6IFsKICAgICAgICAic3RyaW5nIHF1b3RlbWV0YShzdHJpbmcgc3RyKSIsCiAgICAgICAgIlF1b3RlcyBtZXRhIGNoYXJhY3RlcnMiCiAgICBdLAogICAgInJhZDJkZWciOiBbCiAgICAgICAgImZsb2F0IHJhZDJkZWcoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIkNvbnZlcnRzIHRoZSByYWRpYW4gbnVtYmVyIHRvIHRoZSBlcXVpdmFsZW50IG51bWJlciBpbiBkZWdyZWVzIgogICAgXSwKICAgICJyYW5kIjogWwogICAgICAgICJpbnQgcmFuZChbaW50IG1pbiwgaW50IG1heF0pIiwKICAgICAgICAiUmV0dXJucyBhIHJhbmRvbSBudW1iZXIiCiAgICBdLAogICAgInJhbmdlIjogWwogICAgICAgICJhcnJheSByYW5nZShtaXhlZCBsb3csIG1peGVkIGhpZ2hbLCBpbnQgc3RlcF0pIiwKICAgICAgICAiQ3JlYXRlIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJhbmdlIG9mIGludGVnZXJzIG9yIGNoYXJhY3RlcnMgZnJvbSBsb3cgdG8gaGlnaCAoaW5jbHVzaXZlKSIKICAgIF0sCiAgICAicmF3dXJsZGVjb2RlIjogWwogICAgICAgICJzdHJpbmcgcmF3dXJsZGVjb2RlKHN0cmluZyBzdHIpIiwKICAgICAgICAiRGVjb2RlcyBVUkwtZW5jb2RlcyBzdHJpbmciCiAgICBdLAogICAgInJhd3VybGVuY29kZSI6IFsKICAgICAgICAic3RyaW5nIHJhd3VybGVuY29kZShzdHJpbmcgc3RyKSIsCiAgICAgICAgIlVSTC1lbmNvZGVzIHN0cmluZyIKICAgIF0sCiAgICAicmVhZGRpciI6IFsKICAgICAgICAic3RyaW5nIHJlYWRkaXIoW3Jlc291cmNlIGRpcl9oYW5kbGVdKSIsCiAgICAgICAgIlJlYWQgZGlyZWN0b3J5IGVudHJ5IGZyb20gZGlyX2hhbmRsZSIKICAgIF0sCiAgICAicmVhZGZpbGUiOiBbCiAgICAgICAgImludCByZWFkZmlsZShzdHJpbmcgZmlsZW5hbWUgWywgYm9vbCB1c2VfaW5jbHVkZV9wYXRoWywgcmVzb3VyY2UgY29udGV4dF1dKSIsCiAgICAgICAgIk91dHB1dCBhIGZpbGUgb3IgYSBVUkwiCiAgICBdLAogICAgInJlYWRnemZpbGUiOiBbCiAgICAgICAgImludCByZWFkZ3pmaWxlKHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgdXNlX2luY2x1ZGVfcGF0aF0pIiwKICAgICAgICAiT3V0cHV0IGEgLmd6LWZpbGUiCiAgICBdLAogICAgInJlYWRsaW5lIjogWwogICAgICAgICJzdHJpbmcgcmVhZGxpbmUoW3N0cmluZyBwcm9tcHRdKSIsCiAgICAgICAgIlJlYWRzIGEgbGluZSIKICAgIF0sCiAgICAicmVhZGxpbmVfYWRkX2hpc3RvcnkiOiBbCiAgICAgICAgImJvb2wgcmVhZGxpbmVfYWRkX2hpc3Rvcnkoc3RyaW5nIHByb21wdCkiLAogICAgICAgICJBZGRzIGEgbGluZSB0byB0aGUgaGlzdG9yeSIKICAgIF0sCiAgICAicmVhZGxpbmVfY2FsbGJhY2tfaGFuZGxlcl9pbnN0YWxsIjogWwogICAgICAgICJ2b2lkIHJlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfaW5zdGFsbChzdHJpbmcgcHJvbXB0LCBtaXhlZCBjYWxsYmFjaykiLAogICAgICAgICJJbml0aWFsaXplcyB0aGUgcmVhZGxpbmUgY2FsbGJhY2sgaW50ZXJmYWNlIGFuZCB0ZXJtaW5hbCwgcHJpbnRzIHRoZSBwcm9tcHQgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkiCiAgICBdLAogICAgInJlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfcmVtb3ZlIjogWwogICAgICAgICJib29sIHJlYWRsaW5lX2NhbGxiYWNrX2hhbmRsZXJfcmVtb3ZlKCkiLAogICAgICAgICJSZW1vdmVzIGEgcHJldmlvdXNseSBpbnN0YWxsZWQgY2FsbGJhY2sgaGFuZGxlciBhbmQgcmVzdG9yZXMgdGVybWluYWwgc2V0dGluZ3MiCiAgICBdLAogICAgInJlYWRsaW5lX2NhbGxiYWNrX3JlYWRfY2hhciI6IFsKICAgICAgICAidm9pZCByZWFkbGluZV9jYWxsYmFja19yZWFkX2NoYXIoKSIsCiAgICAgICAgIkluZm9ybXMgdGhlIHJlYWRsaW5lIGNhbGxiYWNrIGludGVyZmFjZSB0aGF0IGEgY2hhcmFjdGVyIGlzIHJlYWR5IGZvciBpbnB1dCIKICAgIF0sCiAgICAicmVhZGxpbmVfY2xlYXJfaGlzdG9yeSI6IFsKICAgICAgICAiYm9vbCByZWFkbGluZV9jbGVhcl9oaXN0b3J5KHZvaWQpIiwKICAgICAgICAiQ2xlYXJzIHRoZSBoaXN0b3J5IgogICAgXSwKICAgICJyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uIjogWwogICAgICAgICJib29sIHJlYWRsaW5lX2NvbXBsZXRpb25fZnVuY3Rpb24oc3RyaW5nIGZ1bmNuYW1lKSIsCiAgICAgICAgIlJlYWRsaW5lIGNvbXBsZXRpb24gZnVuY3Rpb24/IgogICAgXSwKICAgICJyZWFkbGluZV9pbmZvIjogWwogICAgICAgICJtaXhlZCByZWFkbGluZV9pbmZvKFtzdHJpbmcgdmFybmFtZSBbLCBzdHJpbmcgbmV3dmFsdWVdXSkiLAogICAgICAgICJHZXRzL3NldHMgdmFyaW91cyBpbnRlcm5hbCByZWFkbGluZSB2YXJpYWJsZXMuIgogICAgXSwKICAgICJyZWFkbGluZV9saXN0X2hpc3RvcnkiOiBbCiAgICAgICAgImFycmF5IHJlYWRsaW5lX2xpc3RfaGlzdG9yeSh2b2lkKSIsCiAgICAgICAgIkxpc3RzIHRoZSBoaXN0b3J5IgogICAgXSwKICAgICJyZWFkbGluZV9vbl9uZXdfbGluZSI6IFsKICAgICAgICAidm9pZCByZWFkbGluZV9vbl9uZXdfbGluZSh2b2lkKSIsCiAgICAgICAgIkluZm9ybSByZWFkbGluZSB0aGF0IHRoZSBjdXJzb3IgaGFzIG1vdmVkIHRvIGEgbmV3IGxpbmUiCiAgICBdLAogICAgInJlYWRsaW5lX3JlYWRfaGlzdG9yeSI6IFsKICAgICAgICAiYm9vbCByZWFkbGluZV9yZWFkX2hpc3RvcnkoW3N0cmluZyBmaWxlbmFtZV0pIiwKICAgICAgICAiUmVhZHMgdGhlIGhpc3RvcnkiCiAgICBdLAogICAgInJlYWRsaW5lX3JlZGlzcGxheSI6IFsKICAgICAgICAidm9pZCByZWFkbGluZV9yZWRpc3BsYXkodm9pZCkiLAogICAgICAgICJBc2sgcmVhZGxpbmUgdG8gcmVkcmF3IHRoZSBkaXNwbGF5IgogICAgXSwKICAgICJyZWFkbGluZV93cml0ZV9oaXN0b3J5IjogWwogICAgICAgICJib29sIHJlYWRsaW5lX3dyaXRlX2hpc3RvcnkoW3N0cmluZyBmaWxlbmFtZV0pIiwKICAgICAgICAiV3JpdGVzIHRoZSBoaXN0b3J5IgogICAgXSwKICAgICJyZWFkbGluayI6IFsKICAgICAgICAic3RyaW5nIHJlYWRsaW5rKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJSZXR1cm4gdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmsiCiAgICBdLAogICAgInJlYWxwYXRoIjogWwogICAgICAgICJzdHJpbmcgcmVhbHBhdGgoc3RyaW5nIHBhdGgpIiwKICAgICAgICAiUmV0dXJuIHRoZSByZXNvbHZlZCBwYXRoIgogICAgXSwKICAgICJyZWFscGF0aF9jYWNoZV9nZXQiOiBbCiAgICAgICAgImJvb2wgcmVhbHBhdGhfY2FjaGVfZ2V0KCkiLAogICAgICAgICJHZXQgY3VycmVudCBzaXplIG9mIHJlYWxwYXRoIGNhY2hlIgogICAgXSwKICAgICJyZWFscGF0aF9jYWNoZV9zaXplIjogWwogICAgICAgICJib29sIHJlYWxwYXRoX2NhY2hlX3NpemUoKSIsCiAgICAgICAgIkdldCBjdXJyZW50IHNpemUgb2YgcmVhbHBhdGggY2FjaGUiCiAgICBdLAogICAgInJlY29kZV9maWxlIjogWwogICAgICAgICJib29sIHJlY29kZV9maWxlKHN0cmluZyByZXF1ZXN0LCByZXNvdXJjZSBpbnB1dCwgcmVzb3VyY2Ugb3V0cHV0KSIsCiAgICAgICAgIlJlY29kZSBmaWxlIGlucHV0IGludG8gZmlsZSBvdXRwdXQgYWNjb3JkaW5nIHRvIHJlcXVlc3QiCiAgICBdLAogICAgInJlY29kZV9zdHJpbmciOiBbCiAgICAgICAgInN0cmluZyByZWNvZGVfc3RyaW5nKHN0cmluZyByZXF1ZXN0LCBzdHJpbmcgc3RyKSIsCiAgICAgICAgIlJlY29kZSBzdHJpbmcgc3RyIGFjY29yZGluZyB0byByZXF1ZXN0IHN0cmluZyIKICAgIF0sCiAgICAicmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24iOiBbCiAgICAgICAgInZvaWQgcmVnaXN0ZXJfc2h1dGRvd25fZnVuY3Rpb24oc3RyaW5nIGZ1bmN0aW9uX25hbWUpIiwKICAgICAgICAiUmVnaXN0ZXIgYSB1c2VyLWxldmVsIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiByZXF1ZXN0IHRlcm1pbmF0aW9uIgogICAgXSwKICAgICJyZWdpc3Rlcl90aWNrX2Z1bmN0aW9uIjogWwogICAgICAgICJib29sIHJlZ2lzdGVyX3RpY2tfZnVuY3Rpb24oc3RyaW5nIGZ1bmN0aW9uX25hbWUgWywgbWl4ZWQgYXJnIFssIG1peGVkIC4uLiBdXSkiLAogICAgICAgICJSZWdpc3RlcnMgYSB0aWNrIGNhbGxiYWNrIGZ1bmN0aW9uIgogICAgXSwKICAgICJyZW5hbWUiOiBbCiAgICAgICAgImJvb2wgcmVuYW1lKHN0cmluZyBvbGRfbmFtZSwgc3RyaW5nIG5ld19uYW1lWywgcmVzb3VyY2UgY29udGV4dF0pIiwKICAgICAgICAiUmVuYW1lIGEgZmlsZSIKICAgIF0sCiAgICAicmVxdWlyZSI6IFsKICAgICAgICAiYm9vbCByZXF1aXJlKHN0cmluZyBwYXRoKSIsCiAgICAgICAgIkluY2x1ZGVzIGFuZCBldmFsdWF0ZXMgdGhlIHNwZWNpZmllZCBmaWxlLCBlcnJvcmluZyBpZiB0aGUgZmlsZSBjYW5ub3QgYmUgaW5jbHVkZWQiCiAgICBdLAogICAgInJlcXVpcmVfb25jZSI6IFsKICAgICAgICAiYm9vbCByZXF1aXJlX29uY2Uoc3RyaW5nIHBhdGgpIiwKICAgICAgICAiSW5jbHVkZXMgYW5kIGV2YWx1YXRlcyB0aGUgc3BlY2lmaWVkIGZpbGUsIGVycm9yaW5nIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBpbmNsdWRlZCIKICAgIF0sCiAgICAicmVzZXQiOiBbCiAgICAgICAgIm1peGVkIHJlc2V0KGFycmF5IGFycmF5X2FyZykiLAogICAgICAgICJTZXQgYXJyYXkgYXJndW1lbnQncyBpbnRlcm5hbCBwb2ludGVyIHRvIHRoZSBmaXJzdCBlbGVtZW50IGFuZCByZXR1cm4gaXQiCiAgICBdLAogICAgInJlc3RvcmVfZXJyb3JfaGFuZGxlciI6IFsKICAgICAgICAidm9pZCByZXN0b3JlX2Vycm9yX2hhbmRsZXIodm9pZCkiLAogICAgICAgICJSZXN0b3JlcyB0aGUgcHJldmlvdXNseSBkZWZpbmVkIGVycm9yIGhhbmRsZXIgZnVuY3Rpb24iCiAgICBdLAogICAgInJlc3RvcmVfZXhjZXB0aW9uX2hhbmRsZXIiOiBbCiAgICAgICAgInZvaWQgcmVzdG9yZV9leGNlcHRpb25faGFuZGxlcih2b2lkKSIsCiAgICAgICAgIlJlc3RvcmVzIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZXhjZXB0aW9uIGhhbmRsZXIgZnVuY3Rpb24iCiAgICBdLAogICAgInJlc3RvcmVfaW5jbHVkZV9wYXRoIjogWwogICAgICAgICJ2b2lkIHJlc3RvcmVfaW5jbHVkZV9wYXRoKCkiLAogICAgICAgICJSZXN0b3JlIHRoZSB2YWx1ZSBvZiB0aGUgaW5jbHVkZV9wYXRoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIgogICAgXSwKICAgICJyZXdpbmQiOiBbCiAgICAgICAgImJvb2wgcmV3aW5kKHJlc291cmNlIGZwKSIsCiAgICAgICAgIlJld2luZCB0aGUgcG9zaXRpb24gb2YgYSBmaWxlIHBvaW50ZXIiCiAgICBdLAogICAgInJld2luZGRpciI6IFsKICAgICAgICAidm9pZCByZXdpbmRkaXIoW3Jlc291cmNlIGRpcl9oYW5kbGVdKSIsCiAgICAgICAgIlJld2luZCBkaXJfaGFuZGxlIGJhY2sgdG8gdGhlIHN0YXJ0IgogICAgXSwKICAgICJybWRpciI6IFsKICAgICAgICAiYm9vbCBybWRpcihzdHJpbmcgZGlybmFtZVssIHJlc291cmNlIGNvbnRleHRdKSIsCiAgICAgICAgIlJlbW92ZSBhIGRpcmVjdG9yeSIKICAgIF0sCiAgICAicm91bmQiOiBbCiAgICAgICAgImZsb2F0IHJvdW5kKGZsb2F0IG51bWJlciBbLCBpbnQgcHJlY2lzaW9uIFssIGludCBtb2RlXV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgbnVtYmVyIHJvdW5kZWQgdG8gc3BlY2lmaWVkIHByZWNpc2lvbiIKICAgIF0sCiAgICAicnNvcnQiOiBbCiAgICAgICAgImJvb2wgcnNvcnQoYXJyYXkgJmFycmF5X2FyZyBbLCBpbnQgc29ydF9mbGFnc10pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSBpbiByZXZlcnNlIG9yZGVyIgogICAgXSwKICAgICJydHJpbSI6IFsKICAgICAgICAic3RyaW5nIHJ0cmltKHN0cmluZyBzdHIgWywgc3RyaW5nIGNoYXJhY3Rlcl9tYXNrXSkiLAogICAgICAgICJSZW1vdmVzIHRyYWlsaW5nIHdoaXRlc3BhY2UiCiAgICBdLAogICAgInNjYW5kaXIiOiBbCiAgICAgICAgImFycmF5IHNjYW5kaXIoc3RyaW5nIGRpciBbLCBpbnQgc29ydGluZ19vcmRlciBbLCByZXNvdXJjZSBjb250ZXh0XV0pIiwKICAgICAgICAiTGlzdCBmaWxlcyAmIGRpcmVjdG9yaWVzIGluc2lkZSB0aGUgc3BlY2lmaWVkIHBhdGgiCiAgICBdLAogICAgInNlbV9hY3F1aXJlIjogWwogICAgICAgICJib29sIHNlbV9hY3F1aXJlKHJlc291cmNlIGlkKSIsCiAgICAgICAgIkFjcXVpcmVzIHRoZSBzZW1hcGhvcmUgd2l0aCB0aGUgZ2l2ZW4gaWQsIGJsb2NraW5nIGlmIG5lY2Vzc2FyeSIKICAgIF0sCiAgICAic2VtX2dldCI6IFsKICAgICAgICAicmVzb3VyY2Ugc2VtX2dldChpbnQga2V5IFssIGludCBtYXhfYWNxdWlyZSBbLCBpbnQgcGVybSBbLCBpbnQgYXV0b19yZWxlYXNlXV0pIiwKICAgICAgICAiUmV0dXJuIGFuIGlkIGZvciB0aGUgc2VtYXBob3JlIHdpdGggdGhlIGdpdmVuIGtleSwgYW5kIGFsbG93IG1heF9hY3F1aXJlIChkZWZhdWx0IDEpIHByb2Nlc3NlcyB0byBhY3F1aXJlIGl0IHNpbXVsdGFuZW91c2x5IgogICAgXSwKICAgICJzZW1fcmVsZWFzZSI6IFsKICAgICAgICAiYm9vbCBzZW1fcmVsZWFzZShyZXNvdXJjZSBpZCkiLAogICAgICAgICJSZWxlYXNlcyB0aGUgc2VtYXBob3JlIHdpdGggdGhlIGdpdmVuIGlkIgogICAgXSwKICAgICJzZW1fcmVtb3ZlIjogWwogICAgICAgICJib29sIHNlbV9yZW1vdmUocmVzb3VyY2UgaWQpIiwKICAgICAgICAiUmVtb3ZlcyBzZW1hcGhvcmUgZnJvbSBVbml4IHN5c3RlbXMiCiAgICBdLAogICAgInNlcmlhbGl6ZSI6IFsKICAgICAgICAic3RyaW5nIHNlcmlhbGl6ZShtaXhlZCB2YXJpYWJsZSkiLAogICAgICAgICJSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHZhcmlhYmxlICh3aGljaCBjYW4gbGF0ZXIgYmUgdW5zZXJpYWxpemVkKSIKICAgIF0sCiAgICAic2Vzc2lvbl9jYWNoZV9leHBpcmUiOiBbCiAgICAgICAgImludCBzZXNzaW9uX2NhY2hlX2V4cGlyZShbaW50IG5ld19jYWNoZV9leHBpcmVdKSIsCiAgICAgICAgIlJldHVybiB0aGUgY3VycmVudCBjYWNoZSBleHBpcmUuIElmIG5ld19jYWNoZV9leHBpcmUgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGNhY2hlX2V4cGlyZSBpcyByZXBsYWNlZCB3aXRoIG5ld19jYWNoZV9leHBpcmUiCiAgICBdLAogICAgInNlc3Npb25fY2FjaGVfbGltaXRlciI6IFsKICAgICAgICAic3RyaW5nIHNlc3Npb25fY2FjaGVfbGltaXRlcihbc3RyaW5nIG5ld19jYWNoZV9saW1pdGVyXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgY2FjaGUgbGltaXRlci4gSWYgbmV3X2NhY2hlX2xpbWl0ZWQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGNhY2hlX2xpbWl0ZXIgaXMgcmVwbGFjZWQgd2l0aCBuZXdfY2FjaGVfbGltaXRlciIKICAgIF0sCiAgICAic2Vzc2lvbl9kZWNvZGUiOiBbCiAgICAgICAgImJvb2wgc2Vzc2lvbl9kZWNvZGUoc3RyaW5nIGRhdGEpIiwKICAgICAgICAiRGVzZXJpYWxpemVzIGRhdGEgYW5kIHJlaW5pdGlhbGl6ZXMgdGhlIHZhcmlhYmxlcyIKICAgIF0sCiAgICAic2Vzc2lvbl9kZXN0cm95IjogWwogICAgICAgICJib29sIHNlc3Npb25fZGVzdHJveSh2b2lkKSIsCiAgICAgICAgIkRlc3Ryb3kgdGhlIGN1cnJlbnQgc2Vzc2lvbiBhbmQgYWxsIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0IgogICAgXSwKICAgICJzZXNzaW9uX2VuY29kZSI6IFsKICAgICAgICAic3RyaW5nIHNlc3Npb25fZW5jb2RlKHZvaWQpIiwKICAgICAgICAiU2VyaWFsaXplcyB0aGUgY3VycmVudCBzZXR1cCBhbmQgcmV0dXJucyB0aGUgc2VyaWFsaXplZCByZXByZXNlbnRhdGlvbiIKICAgIF0sCiAgICAic2Vzc2lvbl9nZXRfY29va2llX3BhcmFtcyI6IFsKICAgICAgICAiYXJyYXkgc2Vzc2lvbl9nZXRfY29va2llX3BhcmFtcyh2b2lkKSIsCiAgICAgICAgIlJldHVybiB0aGUgc2Vzc2lvbiBjb29raWUgcGFyYW1ldGVycyIKICAgIF0sCiAgICAic2Vzc2lvbl9pZCI6IFsKICAgICAgICAic3RyaW5nIHNlc3Npb25faWQoW3N0cmluZyBuZXdpZF0pIiwKICAgICAgICAiUmV0dXJuIHRoZSBjdXJyZW50IHNlc3Npb24gaWQuIElmIG5ld2lkIGlzIGdpdmVuLCB0aGUgc2Vzc2lvbiBpZCBpcyByZXBsYWNlZCB3aXRoIG5ld2lkIgogICAgXSwKICAgICJzZXNzaW9uX2lzX3JlZ2lzdGVyZWQiOiBbCiAgICAgICAgImJvb2wgc2Vzc2lvbl9pc19yZWdpc3RlcmVkKHN0cmluZyB2YXJuYW1lKSIsCiAgICAgICAgIkNoZWNrcyBpZiBhIHZhcmlhYmxlIGlzIHJlZ2lzdGVyZWQgaW4gc2Vzc2lvbiIKICAgIF0sCiAgICAic2Vzc2lvbl9tb2R1bGVfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIHNlc3Npb25fbW9kdWxlX25hbWUoW3N0cmluZyBuZXduYW1lXSkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgbW9kdWxlIG5hbWUgdXNlZCBmb3IgYWNjZXNzaW5nIHNlc3Npb24gZGF0YS4gSWYgbmV3bmFtZSBpcyBnaXZlbiwgdGhlIG1vZHVsZSBuYW1lIGlzIHJlcGxhY2VkIHdpdGggbmV3bmFtZSIKICAgIF0sCiAgICAic2Vzc2lvbl9uYW1lIjogWwogICAgICAgICJzdHJpbmcgc2Vzc2lvbl9uYW1lKFtzdHJpbmcgbmV3bmFtZV0pIiwKICAgICAgICAiUmV0dXJuIHRoZSBjdXJyZW50IHNlc3Npb24gbmFtZS4gSWYgbmV3bmFtZSBpcyBnaXZlbiwgdGhlIHNlc3Npb24gbmFtZSBpcyByZXBsYWNlZCB3aXRoIG5ld25hbWUiCiAgICBdLAogICAgInNlc3Npb25fcmVnZW5lcmF0ZV9pZCI6IFsKICAgICAgICAiYm9vbCBzZXNzaW9uX3JlZ2VuZXJhdGVfaWQoW2Jvb2wgZGVsZXRlX29sZF9zZXNzaW9uXSkiLAogICAgICAgICJVcGRhdGUgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpZCB3aXRoIGEgbmV3bHkgZ2VuZXJhdGVkIG9uZS4gSWYgZGVsZXRlX29sZF9zZXNzaW9uIGlzIHNldCB0byB0cnVlLCByZW1vdmUgdGhlIG9sZCBzZXNzaW9uLiIKICAgIF0sCiAgICAic2Vzc2lvbl9yZWdpc3RlciI6IFsKICAgICAgICAiYm9vbCBzZXNzaW9uX3JlZ2lzdGVyKG1peGVkIHZhcl9uYW1lcyBbLCBtaXhlZCAuLi5dKSIsCiAgICAgICAgIkFkZHMgdmFybmFtZShzKSB0byB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgd2hpY2ggYXJlIGZyZWV6ZWQgYXQgdGhlIHNlc3Npb24gZW5kIgogICAgXSwKICAgICJzZXNzaW9uX3NhdmVfcGF0aCI6IFsKICAgICAgICAic3RyaW5nIHNlc3Npb25fc2F2ZV9wYXRoKFtzdHJpbmcgbmV3bmFtZV0pIiwKICAgICAgICAiUmV0dXJuIHRoZSBjdXJyZW50IHNhdmUgcGF0aCBwYXNzZWQgdG8gbW9kdWxlX25hbWUuIElmIG5ld25hbWUgaXMgZ2l2ZW4sIHRoZSBzYXZlIHBhdGggaXMgcmVwbGFjZWQgd2l0aCBuZXduYW1lIgogICAgXSwKICAgICJzZXNzaW9uX3NldF9jb29raWVfcGFyYW1zIjogWwogICAgICAgICJ2b2lkIHNlc3Npb25fc2V0X2Nvb2tpZV9wYXJhbXMoaW50IGxpZmV0aW1lIFssIHN0cmluZyBwYXRoIFssIHN0cmluZyBkb21haW4gWywgYm9vbCBzZWN1cmVbLCBib29sIGh0dHBvbmx5XV1dXSkiLAogICAgICAgICJTZXQgc2Vzc2lvbiBjb29raWUgcGFyYW1ldGVycyIKICAgIF0sCiAgICAic2Vzc2lvbl9zZXRfc2F2ZV9oYW5kbGVyIjogWwogICAgICAgICJ2b2lkIHNlc3Npb25fc2V0X3NhdmVfaGFuZGxlcihzdHJpbmcgb3Blbiwgc3RyaW5nIGNsb3NlLCBzdHJpbmcgcmVhZCwgc3RyaW5nIHdyaXRlLCBzdHJpbmcgZGVzdHJveSwgc3RyaW5nIGdjKSIsCiAgICAgICAgIlNldHMgdXNlci1sZXZlbCBmdW5jdGlvbnMiCiAgICBdLAogICAgInNlc3Npb25fc3RhcnQiOiBbCiAgICAgICAgImJvb2wgc2Vzc2lvbl9zdGFydCh2b2lkKSIsCiAgICAgICAgIkJlZ2luIHNlc3Npb24gLSByZWluaXRpYWxpemVzIGZyZWV6ZWQgdmFyaWFibGVzLCByZWdpc3RlcnMgYnJvd3NlcnMgZXRjIgogICAgXSwKICAgICJzZXNzaW9uX3VucmVnaXN0ZXIiOiBbCiAgICAgICAgImJvb2wgc2Vzc2lvbl91bnJlZ2lzdGVyKHN0cmluZyB2YXJuYW1lKSIsCiAgICAgICAgIlJlbW92ZXMgdmFybmFtZSBmcm9tIHRoZSBsaXN0IG9mIHZhcmlhYmxlcyB3aGljaCBhcmUgZnJlZXplZCBhdCB0aGUgc2Vzc2lvbiBlbmQiCiAgICBdLAogICAgInNlc3Npb25fdW5zZXQiOiBbCiAgICAgICAgInZvaWQgc2Vzc2lvbl91bnNldCh2b2lkKSIsCiAgICAgICAgIlVuc2V0IGFsbCByZWdpc3RlcmVkIHZhcmlhYmxlcyIKICAgIF0sCiAgICAic2Vzc2lvbl93cml0ZV9jbG9zZSI6IFsKICAgICAgICAidm9pZCBzZXNzaW9uX3dyaXRlX2Nsb3NlKHZvaWQpIiwKICAgICAgICAiV3JpdGUgc2Vzc2lvbiBkYXRhIGFuZCBlbmQgc2Vzc2lvbiIKICAgIF0sCiAgICAic2V0X2Vycm9yX2hhbmRsZXIiOiBbCiAgICAgICAgInN0cmluZyBzZXRfZXJyb3JfaGFuZGxlcihzdHJpbmcgZXJyb3JfaGFuZGxlciBbLCBpbnQgZXJyb3JfdHlwZXNdKSIsCiAgICAgICAgIlNldHMgYSB1c2VyLWRlZmluZWQgZXJyb3IgaGFuZGxlciBmdW5jdGlvbi4gIFJldHVybnMgdGhlIHByZXZpb3VzbHkgZGVmaW5lZCBlcnJvciBoYW5kbGVyLCBvciBmYWxzZSBvbiBlcnJvciIKICAgIF0sCiAgICAic2V0X2V4Y2VwdGlvbl9oYW5kbGVyIjogWwogICAgICAgICJzdHJpbmcgc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGNhbGxhYmxlIGV4Y2VwdGlvbl9oYW5kbGVyKSIsCiAgICAgICAgIlNldHMgYSB1c2VyLWRlZmluZWQgZXhjZXB0aW9uIGhhbmRsZXIgZnVuY3Rpb24uICBSZXR1cm5zIHRoZSBwcmV2aW91c2x5IGRlZmluZWQgZXhjZXB0aW9uIGhhbmRsZXIsIG9yIGZhbHNlIG9uIGVycm9yIgogICAgXSwKICAgICJzZXRfaW5jbHVkZV9wYXRoIjogWwogICAgICAgICJzdHJpbmcgc2V0X2luY2x1ZGVfcGF0aChzdHJpbmcgbmV3X2luY2x1ZGVfcGF0aCkiLAogICAgICAgICJTZXRzIHRoZSBpbmNsdWRlX3BhdGggY29uZmlndXJhdGlvbiBvcHRpb24iCiAgICBdLAogICAgInNldF9tYWdpY19xdW90ZXNfcnVudGltZSI6IFsKICAgICAgICAiYm9vbCBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoaW50IG5ld19zZXR0aW5nKSIsCiAgICAgICAgIlNldCB0aGUgY3VycmVudCBhY3RpdmUgY29uZmlndXJhdGlvbiBzZXR0aW5nIG9mIG1hZ2ljX3F1b3Rlc19ydW50aW1lIGFuZCByZXR1cm4gcHJldmlvdXMiCiAgICBdLAogICAgInNldF90aW1lX2xpbWl0IjogWwogICAgICAgICJib29sIHNldF90aW1lX2xpbWl0KGludCBzZWNvbmRzKSIsCiAgICAgICAgIlNldHMgdGhlIG1heGltdW0gdGltZSBhIHNjcmlwdCBjYW4gcnVuIgogICAgXSwKICAgICJzZXRjb29raWUiOiBbCiAgICAgICAgImJvb2wgc2V0Y29va2llKHN0cmluZyBuYW1lIFssIHN0cmluZyB2YWx1ZSBbLCBpbnQgZXhwaXJlcyBbLCBzdHJpbmcgcGF0aCBbLCBzdHJpbmcgZG9tYWluIFssIGJvb2wgc2VjdXJlWywgYm9vbCBodHRwb25seV1dXV1dXSkiLAogICAgICAgICJTZW5kIGEgY29va2llIgogICAgXSwKICAgICJzZXRsb2NhbGUiOiBbCiAgICAgICAgInN0cmluZyBzZXRsb2NhbGUobWl4ZWQgY2F0ZWdvcnksIHN0cmluZyBsb2NhbGUgWywgc3RyaW5nIC4uLl0pIiwKICAgICAgICAiU2V0IGxvY2FsZSBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAic2V0cmF3Y29va2llIjogWwogICAgICAgICJib29sIHNldHJhd2Nvb2tpZShzdHJpbmcgbmFtZSBbLCBzdHJpbmcgdmFsdWUgWywgaW50IGV4cGlyZXMgWywgc3RyaW5nIHBhdGggWywgc3RyaW5nIGRvbWFpbiBbLCBib29sIHNlY3VyZVssIGJvb2wgaHR0cG9ubHldXV1dXV0pIiwKICAgICAgICAiU2VuZCBhIGNvb2tpZSB3aXRoIG5vIHVybCBlbmNvZGluZyBvZiB0aGUgdmFsdWUiCiAgICBdLAogICAgInNldHR5cGUiOiBbCiAgICAgICAgImJvb2wgc2V0dHlwZShtaXhlZCB2YXIsIHN0cmluZyB0eXBlKSIsCiAgICAgICAgIlNldCB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUiCiAgICBdLAogICAgInNoYTEiOiBbCiAgICAgICAgInN0cmluZyBzaGExKHN0cmluZyBzdHIgWywgYm9vbCByYXdfb3V0cHV0XSkiLAogICAgICAgICJDYWxjdWxhdGUgdGhlIHNoYTEgaGFzaCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAic2hhMV9maWxlIjogWwogICAgICAgICJzdHJpbmcgc2hhMV9maWxlKHN0cmluZyBmaWxlbmFtZSBbLCBib29sIHJhd19vdXRwdXRdKSIsCiAgICAgICAgIkNhbGN1bGF0ZSB0aGUgc2hhMSBoYXNoIG9mIGdpdmVuIGZpbGVuYW1lIgogICAgXSwKICAgICJzaGVsbF9leGVjIjogWwogICAgICAgICJzdHJpbmcgc2hlbGxfZXhlYyhzdHJpbmcgY21kKSIsCiAgICAgICAgIkV4ZWN1dGUgY29tbWFuZCB2aWEgc2hlbGwgYW5kIHJldHVybiBjb21wbGV0ZSBvdXRwdXQgYXMgc3RyaW5nIgogICAgXSwKICAgICJzaG1fYXR0YWNoIjogWwogICAgICAgICJpbnQgc2htX2F0dGFjaChpbnQga2V5IFssIGludCBtZW1zaXplIFssIGludCBwZXJtXV0pIiwKICAgICAgICAiQ3JlYXRlcyBvciBvcGVuIGEgc2hhcmVkIG1lbW9yeSBzZWdtZW50IgogICAgXSwKICAgICJzaG1fZGV0YWNoIjogWwogICAgICAgICJib29sIHNobV9kZXRhY2gocmVzb3VyY2Ugc2htX2lkZW50aWZpZXIpIiwKICAgICAgICAiRGlzY29ubmVjdHMgZnJvbSBzaGFyZWQgbWVtb3J5IHNlZ21lbnQiCiAgICBdLAogICAgInNobV9nZXRfdmFyIjogWwogICAgICAgICJtaXhlZCBzaG1fZ2V0X3ZhcihyZXNvdXJjZSBpZCwgaW50IHZhcmlhYmxlX2tleSkiLAogICAgICAgICJSZXR1cm5zIGEgdmFyaWFibGUgZnJvbSBzaGFyZWQgbWVtb3J5IgogICAgXSwKICAgICJzaG1faGFzX3ZhciI6IFsKICAgICAgICAiYm9vbCBzaG1faGFzX3ZhcihyZXNvdXJjZSBpZCwgaW50IHZhcmlhYmxlX2tleSkiLAogICAgICAgICJDaGVja3Mgd2hldGhlciBhIHNwZWNpZmljIGVudHJ5IGV4aXN0cyIKICAgIF0sCiAgICAic2htX3B1dF92YXIiOiBbCiAgICAgICAgImJvb2wgc2htX3B1dF92YXIocmVzb3VyY2Ugc2htX2lkZW50aWZpZXIsIGludCB2YXJpYWJsZV9rZXksIG1peGVkIHZhcmlhYmxlKSIsCiAgICAgICAgIkluc2VydHMgb3IgdXBkYXRlcyBhIHZhcmlhYmxlIGluIHNoYXJlZCBtZW1vcnkiCiAgICBdLAogICAgInNobV9yZW1vdmUiOiBbCiAgICAgICAgImJvb2wgc2htX3JlbW92ZShyZXNvdXJjZSBzaG1faWRlbnRpZmllcikiLAogICAgICAgICJSZW1vdmVzIHNoYXJlZCBtZW1vcnkgZnJvbSBVbml4IHN5c3RlbXMiCiAgICBdLAogICAgInNobV9yZW1vdmVfdmFyIjogWwogICAgICAgICJib29sIHNobV9yZW1vdmVfdmFyKHJlc291cmNlIGlkLCBpbnQgdmFyaWFibGVfa2V5KSIsCiAgICAgICAgIlJlbW92ZXMgdmFyaWFibGUgZnJvbSBzaGFyZWQgbWVtb3J5IgogICAgXSwKICAgICJzaG1vcF9jbG9zZSI6IFsKICAgICAgICAidm9pZCBzaG1vcF9jbG9zZSAoaW50IHNobWlkKSIsCiAgICAgICAgImNsb3NlcyBhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIKICAgIF0sCiAgICAic2htb3BfZGVsZXRlIjogWwogICAgICAgICJib29sIHNobW9wX2RlbGV0ZSAoaW50IHNobWlkKSIsCiAgICAgICAgIm1hcmsgc2VnbWVudCBmb3IgZGVsZXRpb24iCiAgICBdLAogICAgInNobW9wX29wZW4iOiBbCiAgICAgICAgImludCBzaG1vcF9vcGVuIChpbnQga2V5LCBzdHJpbmcgZmxhZ3MsIGludCBtb2RlLCBpbnQgc2l6ZSkiLAogICAgICAgICJnZXRzIGFuZCBhdHRhY2hlcyBhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIKICAgIF0sCiAgICAic2htb3BfcmVhZCI6IFsKICAgICAgICAic3RyaW5nIHNobW9wX3JlYWQgKGludCBzaG1pZCwgaW50IHN0YXJ0LCBpbnQgY291bnQpIiwKICAgICAgICAicmVhZHMgZnJvbSBhIHNobSBzZWdtZW50IgogICAgXSwKICAgICJzaG1vcF9zaXplIjogWwogICAgICAgICJpbnQgc2htb3Bfc2l6ZSAoaW50IHNobWlkKSIsCiAgICAgICAgInJldHVybnMgdGhlIHNobSBzaXplIgogICAgXSwKICAgICJzaG1vcF93cml0ZSI6IFsKICAgICAgICAiaW50IHNobW9wX3dyaXRlIChpbnQgc2htaWQsIHN0cmluZyBkYXRhLCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIndyaXRlcyB0byBhIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIKICAgIF0sCiAgICAic2h1ZmZsZSI6IFsKICAgICAgICAiYm9vbCBzaHVmZmxlKGFycmF5IGFycmF5X2FyZykiLAogICAgICAgICJSYW5kb21seSBzaHVmZmxlIHRoZSBjb250ZW50cyBvZiBhbiBhcnJheSIKICAgIF0sCiAgICAic2ltaWxhcl90ZXh0IjogWwogICAgICAgICJpbnQgc2ltaWxhcl90ZXh0KHN0cmluZyBzdHIxLCBzdHJpbmcgc3RyMiBbLCBmbG9hdCBwZXJjZW50XSkiLAogICAgICAgICJDYWxjdWxhdGVzIHRoZSBzaW1pbGFyaXR5IGJldHdlZW4gdHdvIHN0cmluZ3MiCiAgICBdLAogICAgInNpbXBsZXhtbF9pbXBvcnRfZG9tIjogWwogICAgICAgICJzaW1wbGVteG1sX2VsZW1lbnQgc2ltcGxleG1sX2ltcG9ydF9kb20oZG9tTm9kZSBub2RlIFssIHN0cmluZyBjbGFzc19uYW1lXSkiLAogICAgICAgICJHZXQgYSBzaW1wbGV4bWxfZWxlbWVudCBvYmplY3QgZnJvbSBkb20gdG8gYWxsb3cgZm9yIHByb2Nlc3NpbmciCiAgICBdLAogICAgInNpbXBsZXhtbF9sb2FkX2ZpbGUiOiBbCiAgICAgICAgInNpbXBsZW14bWxfZWxlbWVudCBzaW1wbGV4bWxfbG9hZF9maWxlKHN0cmluZyBmaWxlbmFtZSBbLCBzdHJpbmcgY2xhc3NfbmFtZSBbLCBpbnQgb3B0aW9ucyBbLCBzdHJpbmcgbnMgWywgYm9vbCBpc19wcmVmaXhdXV1dKSIsCiAgICAgICAgIkxvYWQgYSBmaWxlbmFtZSBhbmQgcmV0dXJuIGEgc2ltcGxleG1sX2VsZW1lbnQgb2JqZWN0IHRvIGFsbG93IGZvciBwcm9jZXNzaW5nIgogICAgXSwKICAgICJzaW1wbGV4bWxfbG9hZF9zdHJpbmciOiBbCiAgICAgICAgInNpbXBsZW14bWxfZWxlbWVudCBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoc3RyaW5nIGRhdGEgWywgc3RyaW5nIGNsYXNzX25hbWUgWywgaW50IG9wdGlvbnMgWywgc3RyaW5nIG5zIFssIGJvb2wgaXNfcHJlZml4XV1dXSkiLAogICAgICAgICJMb2FkIGEgc3RyaW5nIGFuZCByZXR1cm4gYSBzaW1wbGV4bWxfZWxlbWVudCBvYmplY3QgdG8gYWxsb3cgZm9yIHByb2Nlc3NpbmciCiAgICBdLAogICAgInNpbiI6IFsKICAgICAgICAiZmxvYXQgc2luKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBzaW5lIG9mIHRoZSBudW1iZXIgaW4gcmFkaWFucyIKICAgIF0sCiAgICAic2luaCI6IFsKICAgICAgICAiZmxvYXQgc2luaChmbG9hdCBudW1iZXIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIHRoZSBudW1iZXIsIGRlZmluZWQgYXMgKGV4cChudW1iZXIpIC0gZXhwKC1udW1iZXIpKS8yIgogICAgXSwKICAgICJzbGVlcCI6IFsKICAgICAgICAidm9pZCBzbGVlcChpbnQgc2Vjb25kcykiLAogICAgICAgICJEZWxheSBmb3IgYSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcyIKICAgIF0sCiAgICAic21maV9hZGRoZWFkZXIiOiBbCiAgICAgICAgImJvb2wgc21maV9hZGRoZWFkZXIoc3RyaW5nIGhlYWRlcmYsIHN0cmluZyBoZWFkZXJ2KSIsCiAgICAgICAgIkFkZHMgYSBoZWFkZXIgdG8gdGhlIGN1cnJlbnQgbWVzc2FnZS4iCiAgICBdLAogICAgInNtZmlfYWRkcmNwdCI6IFsKICAgICAgICAiYm9vbCBzbWZpX2FkZHJjcHQoc3RyaW5nIHJjcHQpIiwKICAgICAgICAiQWRkIGEgcmVjaXBpZW50IHRvIHRoZSBtZXNzYWdlIGVudmVsb3BlLiIKICAgIF0sCiAgICAic21maV9jaGdoZWFkZXIiOiBbCiAgICAgICAgImJvb2wgc21maV9jaGdoZWFkZXIoc3RyaW5nIGhlYWRlcmYsIHN0cmluZyBoZWFkZXJ2KSIsCiAgICAgICAgIkNoYW5nZXMgYSBoZWFkZXIncyB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgbWVzc2FnZS4iCiAgICBdLAogICAgInNtZmlfZGVscmNwdCI6IFsKICAgICAgICAiYm9vbCBzbWZpX2RlbHJjcHQoc3RyaW5nIHJjcHQpIiwKICAgICAgICAiUmVtb3ZlcyB0aGUgbmFtZWQgcmVjaXBpZW50IGZyb20gdGhlIGN1cnJlbnQgbWVzc2FnZSdzIGVudmVsb3BlLiIKICAgIF0sCiAgICAic21maV9nZXRzeW12YWwiOiBbCiAgICAgICAgInN0cmluZyBzbWZpX2dldHN5bXZhbChzdHJpbmcgbWFjcm8pIiwKICAgICAgICAiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIG1hY3JvIG9yIE5VTEwgaWYgdGhlIG1hY3JvIGlzIG5vdCBkZWZpbmVkLiIKICAgIF0sCiAgICAic21maV9yZXBsYWNlYm9keSI6IFsKICAgICAgICAiYm9vbCBzbWZpX3JlcGxhY2Vib2R5KHN0cmluZyBib2R5KSIsCiAgICAgICAgIlJlcGxhY2VzIHRoZSBib2R5IG9mIHRoZSBjdXJyZW50IG1lc3NhZ2UuIElmIGNhbGxlZCBtb3JlIHRoYW4gb25jZSwgICAgc3Vic2VxdWVudCBjYWxscyByZXN1bHQgaW4gZGF0YSBiZWluZyBhcHBlbmRlZCB0byB0aGUgbmV3IGJvZHkuIgogICAgXSwKICAgICJzbWZpX3NldGZsYWdzIjogWwogICAgICAgICJ2b2lkIHNtZmlfc2V0ZmxhZ3MobG9uZyBmbGFncykiLAogICAgICAgICJTZXRzIHRoZSBmbGFncyBkZXNjcmliaW5nIHRoZSBhY3Rpb25zIHRoZSBmaWx0ZXIgbWF5IHRha2UuIgogICAgXSwKICAgICJzbWZpX3NldHJlcGx5IjogWwogICAgICAgICJib29sIHNtZmlfc2V0cmVwbHkoc3RyaW5nIHJjb2RlLCBzdHJpbmcgeGNvZGUsIHN0cmluZyBtZXNzYWdlKSIsCiAgICAgICAgIkRpcmVjdGx5IHNldCB0aGUgU01UUCBlcnJvciByZXBseSBjb2RlIGZvciB0aGlzIGNvbm5lY3Rpb24uICAgIFRoaXMgY29kZSB3aWxsIGJlIHVzZWQgb24gc3Vic2VxdWVudCBlcnJvciByZXBsaWVzIHJlc3VsdGluZyBmcm9tIGFjdGlvbnMgdGFrZW4gYnkgdGhpcyBmaWx0ZXIuIgogICAgXSwKICAgICJzbWZpX3NldHRpbWVvdXQiOiBbCiAgICAgICAgInZvaWQgc21maV9zZXR0aW1lb3V0KGxvbmcgdGltZW91dCkiLAogICAgICAgICJTZXRzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsaWJtaWx0ZXIgd2lsbCB3YWl0IGZvciBhbiBNVEEgY29ubmVjdGlvbiBiZWZvcmUgdGltaW5nIG91dCBhIHNvY2tldC4iCiAgICBdLAogICAgInNubXAyX2dldCI6IFsKICAgICAgICAic3RyaW5nIHNubXAyX2dldChzdHJpbmcgaG9zdCwgc3RyaW5nIGNvbW11bml0eSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIkZldGNoIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXAyX2dldG5leHQiOiBbCiAgICAgICAgInN0cmluZyBzbm1wMl9nZXRuZXh0KHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcDJfcmVhbF93YWxrIjogWwogICAgICAgICJhcnJheSBzbm1wMl9yZWFsX3dhbGsoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJSZXR1cm4gYWxsIG9iamVjdHMgaW5jbHVkaW5nIHRoZWlyIHJlc3BlY3RpdmUgb2JqZWN0IGlkIHdpdGhpbmcgdGhlIHNwZWNpZmllZCBvbmUiCiAgICBdLAogICAgInNubXAyX3NldCI6IFsKICAgICAgICAiaW50IHNubXAyX3NldChzdHJpbmcgaG9zdCwgc3RyaW5nIGNvbW11bml0eSwgc3RyaW5nIG9iamVjdF9pZCwgc3RyaW5nIHR5cGUsIG1peGVkIHZhbHVlIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiU2V0IHRoZSB2YWx1ZSBvZiBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wMl93YWxrIjogWwogICAgICAgICJhcnJheSBzbm1wMl93YWxrKHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiUmV0dXJuIGFsbCBvYmplY3RzIHVuZGVyIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlkIgogICAgXSwKICAgICJzbm1wM19nZXQiOiBbCiAgICAgICAgImludCBzbm1wM19nZXQoc3RyaW5nIGhvc3QsIHN0cmluZyBzZWNfbmFtZSwgc3RyaW5nIHNlY19sZXZlbCwgc3RyaW5nIGF1dGhfcHJvdG9jb2wsIHN0cmluZyBhdXRoX3Bhc3NwaHJhc2UsIHN0cmluZyBwcml2X3Byb3RvY29sLCBzdHJpbmcgcHJpdl9wYXNzcGhyYXNlLCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggdGhlIHZhbHVlIG9mIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXAzX2dldG5leHQiOiBbCiAgICAgICAgImludCBzbm1wM19nZXRuZXh0KHN0cmluZyBob3N0LCBzdHJpbmcgc2VjX25hbWUsIHN0cmluZyBzZWNfbGV2ZWwsIHN0cmluZyBhdXRoX3Byb3RvY29sLCBzdHJpbmcgYXV0aF9wYXNzcGhyYXNlLCBzdHJpbmcgcHJpdl9wcm90b2NvbCwgc3RyaW5nIHByaXZfcGFzc3BocmFzZSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIkZldGNoIHRoZSB2YWx1ZSBvZiBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wM19yZWFsX3dhbGsiOiBbCiAgICAgICAgImludCBzbm1wM19yZWFsX3dhbGsoc3RyaW5nIGhvc3QsIHN0cmluZyBzZWNfbmFtZSwgc3RyaW5nIHNlY19sZXZlbCwgc3RyaW5nIGF1dGhfcHJvdG9jb2wsIHN0cmluZyBhdXRoX3Bhc3NwaHJhc2UsIHN0cmluZyBwcml2X3Byb3RvY29sLCBzdHJpbmcgcHJpdl9wYXNzcGhyYXNlLCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggdGhlIHZhbHVlIG9mIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXAzX3NldCI6IFsKICAgICAgICAiaW50IHNubXAzX3NldChzdHJpbmcgaG9zdCwgc3RyaW5nIHNlY19uYW1lLCBzdHJpbmcgc2VjX2xldmVsLCBzdHJpbmcgYXV0aF9wcm90b2NvbCwgc3RyaW5nIGF1dGhfcGFzc3BocmFzZSwgc3RyaW5nIHByaXZfcHJvdG9jb2wsIHN0cmluZyBwcml2X3Bhc3NwaHJhc2UsIHN0cmluZyBvYmplY3RfaWQsIHN0cmluZyB0eXBlLCBtaXhlZCB2YWx1ZSBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIkZldGNoIHRoZSB2YWx1ZSBvZiBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wM193YWxrIjogWwogICAgICAgICJpbnQgc25tcDNfd2FsayhzdHJpbmcgaG9zdCwgc3RyaW5nIHNlY19uYW1lLCBzdHJpbmcgc2VjX2xldmVsLCBzdHJpbmcgYXV0aF9wcm90b2NvbCwgc3RyaW5nIGF1dGhfcGFzc3BocmFzZSwgc3RyaW5nIHByaXZfcHJvdG9jb2wsIHN0cmluZyBwcml2X3Bhc3NwaHJhc2UsIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJGZXRjaCB0aGUgdmFsdWUgb2YgYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcF9nZXRfcXVpY2tfcHJpbnQiOiBbCiAgICAgICAgImJvb2wgc25tcF9nZXRfcXVpY2tfcHJpbnQodm9pZCkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHF1aWNrX3ByaW50IgogICAgXSwKICAgICJzbm1wX2dldF92YWx1ZXJldHJpZXZhbCI6IFsKICAgICAgICAiaW50IHNubXBfZ2V0X3ZhbHVlcmV0cmlldmFsKCkiLAogICAgICAgICJSZXR1cm4gdGhlIG1ldGhvZCBob3cgdGhlIFNOTVAgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQiCiAgICBdLAogICAgInNubXBfcmVhZF9taWIiOiBbCiAgICAgICAgImludCBzbm1wX3JlYWRfbWliKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJSZWFkcyBhbmQgcGFyc2VzIGEgTUlCIGZpbGUgaW50byB0aGUgYWN0aXZlIE1JQiB0cmVlLiIKICAgIF0sCiAgICAic25tcF9zZXRfZW51bV9wcmludCI6IFsKICAgICAgICAidm9pZCBzbm1wX3NldF9lbnVtX3ByaW50KGludCBlbnVtX3ByaW50KSIsCiAgICAgICAgIlJldHVybiBhbGwgdmFsdWVzIHRoYXQgYXJlIGVudW1zIHdpdGggdGhlaXIgZW51bSB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSByYXcgaW50ZWdlciIKICAgIF0sCiAgICAic25tcF9zZXRfb2lkX291dHB1dF9mb3JtYXQiOiBbCiAgICAgICAgInZvaWQgc25tcF9zZXRfb2lkX291dHB1dF9mb3JtYXQoaW50IG9pZF9mb3JtYXQpIiwKICAgICAgICAiU2V0IHRoZSBPSUQgb3V0cHV0IGZvcm1hdC4iCiAgICBdLAogICAgInNubXBfc2V0X3F1aWNrX3ByaW50IjogWwogICAgICAgICJ2b2lkIHNubXBfc2V0X3F1aWNrX3ByaW50KGludCBxdWlja19wcmludCkiLAogICAgICAgICJSZXR1cm4gYWxsIG9iamVjdHMgaW5jbHVkaW5nIHRoZWlyIHJlc3BlY3RpdmUgb2JqZWN0IGlkIHdpdGhpbmcgdGhlIHNwZWNpZmllZCBvbmUiCiAgICBdLAogICAgInNubXBfc2V0X3ZhbHVlcmV0cmlldmFsIjogWwogICAgICAgICJ2b2lkIHNubXBfc2V0X3ZhbHVlcmV0cmlldmFsKGludCBtZXRob2QpIiwKICAgICAgICAiU3BlY2lmeSB0aGUgbWV0aG9kIGhvdyB0aGUgU05NUCB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCIKICAgIF0sCiAgICAic25tcGdldCI6IFsKICAgICAgICAic3RyaW5nIHNubXBnZXQoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJGZXRjaCBhIFNOTVAgb2JqZWN0IgogICAgXSwKICAgICJzbm1wZ2V0bmV4dCI6IFsKICAgICAgICAic3RyaW5nIHNubXBnZXRuZXh0KHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkIFssIGludCB0aW1lb3V0IFssIGludCByZXRyaWVzXV0pIiwKICAgICAgICAiRmV0Y2ggYSBTTk1QIG9iamVjdCIKICAgIF0sCiAgICAic25tcHJlYWx3YWxrIjogWwogICAgICAgICJhcnJheSBzbm1wcmVhbHdhbGsoc3RyaW5nIGhvc3QsIHN0cmluZyBjb21tdW5pdHksIHN0cmluZyBvYmplY3RfaWQgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJSZXR1cm4gYWxsIG9iamVjdHMgaW5jbHVkaW5nIHRoZWlyIHJlc3BlY3RpdmUgb2JqZWN0IGlkIHdpdGhpbmcgdGhlIHNwZWNpZmllZCBvbmUiCiAgICBdLAogICAgInNubXBzZXQiOiBbCiAgICAgICAgImludCBzbm1wc2V0KHN0cmluZyBob3N0LCBzdHJpbmcgY29tbXVuaXR5LCBzdHJpbmcgb2JqZWN0X2lkLCBzdHJpbmcgdHlwZSwgbWl4ZWQgdmFsdWUgWywgaW50IHRpbWVvdXQgWywgaW50IHJldHJpZXNdXSkiLAogICAgICAgICJTZXQgdGhlIHZhbHVlIG9mIGEgU05NUCBvYmplY3QiCiAgICBdLAogICAgInNubXB3YWxrIjogWwogICAgICAgICJhcnJheSBzbm1wd2FsayhzdHJpbmcgaG9zdCwgc3RyaW5nIGNvbW11bml0eSwgc3RyaW5nIG9iamVjdF9pZCBbLCBpbnQgdGltZW91dCBbLCBpbnQgcmV0cmllc11dKSIsCiAgICAgICAgIlJldHVybiBhbGwgb2JqZWN0cyB1bmRlciB0aGUgc3BlY2lmaWVkIG9iamVjdCBpZCIKICAgIF0sCiAgICAic29ja2V0X2FjY2VwdCI6IFsKICAgICAgICAicmVzb3VyY2Ugc29ja2V0X2FjY2VwdChyZXNvdXJjZSBzb2NrZXQpIiwKICAgICAgICAiQWNjZXB0cyBhIGNvbm5lY3Rpb24gb24gdGhlIGxpc3RlbmluZyBzb2NrZXQgZmQiCiAgICBdLAogICAgInNvY2tldF9iaW5kIjogWwogICAgICAgICJib29sIHNvY2tldF9iaW5kKHJlc291cmNlIHNvY2tldCwgc3RyaW5nIGFkZHIgWywgaW50IHBvcnRdKSIsCiAgICAgICAgIkJpbmRzIGFuIG9wZW4gc29ja2V0IHRvIGEgbGlzdGVuaW5nIHBvcnQsIHBvcnQgaXMgb25seSBzcGVjaWZpZWQgaW4gQUZfSU5FVCBmYW1pbHkuIgogICAgXSwKICAgICJzb2NrZXRfY2xlYXJfZXJyb3IiOiBbCiAgICAgICAgInZvaWQgc29ja2V0X2NsZWFyX2Vycm9yKFtyZXNvdXJjZSBzb2NrZXRdKSIsCiAgICAgICAgIkNsZWFycyB0aGUgZXJyb3Igb24gdGhlIHNvY2tldCBvciB0aGUgbGFzdCBlcnJvciBjb2RlLiIKICAgIF0sCiAgICAic29ja2V0X2Nsb3NlIjogWwogICAgICAgICJ2b2lkIHNvY2tldF9jbG9zZShyZXNvdXJjZSBzb2NrZXQpIiwKICAgICAgICAiQ2xvc2VzIGEgZmlsZSBkZXNjcmlwdG9yIgogICAgXSwKICAgICJzb2NrZXRfY29ubmVjdCI6IFsKICAgICAgICAiYm9vbCBzb2NrZXRfY29ubmVjdChyZXNvdXJjZSBzb2NrZXQsIHN0cmluZyBhZGRyIFssIGludCBwb3J0XSkiLAogICAgICAgICJPcGVucyBhIGNvbm5lY3Rpb24gdG8gYWRkcjpwb3J0IG9uIHRoZSBzb2NrZXQgc3BlY2lmaWVkIGJ5IHNvY2tldCIKICAgIF0sCiAgICAic29ja2V0X2NyZWF0ZSI6IFsKICAgICAgICAicmVzb3VyY2Ugc29ja2V0X2NyZWF0ZShpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKSIsCiAgICAgICAgIkNyZWF0ZXMgYW4gZW5kcG9pbnQgZm9yIGNvbW11bmljYXRpb24gaW4gdGhlIGRvbWFpbiBzcGVjaWZpZWQgYnkgZG9tYWluLCBvZiB0eXBlIHNwZWNpZmllZCBieSB0eXBlIgogICAgXSwKICAgICJzb2NrZXRfY3JlYXRlX2xpc3RlbiI6IFsKICAgICAgICAicmVzb3VyY2Ugc29ja2V0X2NyZWF0ZV9saXN0ZW4oaW50IHBvcnRbLCBpbnQgYmFja2xvZ10pIiwKICAgICAgICAiT3BlbnMgYSBzb2NrZXQgb24gcG9ydCB0byBhY2NlcHQgY29ubmVjdGlvbnMiCiAgICBdLAogICAgInNvY2tldF9jcmVhdGVfcGFpciI6IFsKICAgICAgICAiYm9vbCBzb2NrZXRfY3JlYXRlX3BhaXIoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgYXJyYXkgJmZkKSIsCiAgICAgICAgIkNyZWF0ZXMgYSBwYWlyIG9mIGluZGlzdGluZ3Vpc2hhYmxlIHNvY2tldHMgYW5kIHN0b3JlcyB0aGVtIGluIGZkcy4iCiAgICBdLAogICAgInNvY2tldF9nZXRfb3B0aW9uIjogWwogICAgICAgICJtaXhlZCBzb2NrZXRfZ2V0X29wdGlvbihyZXNvdXJjZSBzb2NrZXQsIGludCBsZXZlbCwgaW50IG9wdG5hbWUpIiwKICAgICAgICAiR2V0cyBzb2NrZXQgb3B0aW9ucyBmb3IgdGhlIHNvY2tldCIKICAgIF0sCiAgICAic29ja2V0X2dldHBlZXJuYW1lIjogWwogICAgICAgICJib29sIHNvY2tldF9nZXRwZWVybmFtZShyZXNvdXJjZSBzb2NrZXQsIHN0cmluZyAmYWRkclssIGludCAmcG9ydF0pIiwKICAgICAgICAiUXVlcmllcyB0aGUgcmVtb3RlIHNpZGUgb2YgdGhlIGdpdmVuIHNvY2tldCB3aGljaCBtYXkgZWl0aGVyIHJlc3VsdCBpbiBob3N0L3BvcnQgb3IgaW4gYSBVTklYIGZpbGVzeXN0ZW0gcGF0aCwgZGVwZW5kZW50IG9uIGl0cyB0eXBlLiIKICAgIF0sCiAgICAic29ja2V0X2dldHNvY2tuYW1lIjogWwogICAgICAgICJib29sIHNvY2tldF9nZXRzb2NrbmFtZShyZXNvdXJjZSBzb2NrZXQsIHN0cmluZyAmYWRkclssIGludCAmcG9ydF0pIiwKICAgICAgICAiUXVlcmllcyB0aGUgcmVtb3RlIHNpZGUgb2YgdGhlIGdpdmVuIHNvY2tldCB3aGljaCBtYXkgZWl0aGVyIHJlc3VsdCBpbiBob3N0L3BvcnQgb3IgaW4gYSBVTklYIGZpbGVzeXN0ZW0gcGF0aCwgZGVwZW5kZW50IG9uIGl0cyB0eXBlLiIKICAgIF0sCiAgICAic29ja2V0X2xhc3RfZXJyb3IiOiBbCiAgICAgICAgImludCBzb2NrZXRfbGFzdF9lcnJvcihbcmVzb3VyY2Ugc29ja2V0XSkiLAogICAgICAgICJSZXR1cm5zIHRoZSBsYXN0IHNvY2tldCBlcnJvciAoZWl0aGVyIHRoZSBsYXN0IHVzZWQgb3IgdGhlIHByb3ZpZGVkIHNvY2tldCByZXNvdXJjZSkiCiAgICBdLAogICAgInNvY2tldF9saXN0ZW4iOiBbCiAgICAgICAgImJvb2wgc29ja2V0X2xpc3RlbihyZXNvdXJjZSBzb2NrZXRbLCBpbnQgYmFja2xvZ10pIiwKICAgICAgICAiU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgYWxsb3dlZCB0byBiZSB3YWl0ZWQgZm9yIG9uIHRoZSBzb2NrZXQgc3BlY2lmaWVkIGJ5IGZkIgogICAgXSwKICAgICJzb2NrZXRfcmVhZCI6IFsKICAgICAgICAic3RyaW5nIHNvY2tldF9yZWFkKHJlc291cmNlIHNvY2tldCwgaW50IGxlbmd0aCBbLCBpbnQgdHlwZV0pIiwKICAgICAgICAiUmVhZHMgYSBtYXhpbXVtIG9mIGxlbmd0aCBieXRlcyBmcm9tIHNvY2tldCIKICAgIF0sCiAgICAic29ja2V0X3JlY3YiOiBbCiAgICAgICAgImludCBzb2NrZXRfcmVjdihyZXNvdXJjZSBzb2NrZXQsIHN0cmluZyAmYnVmLCBpbnQgbGVuLCBpbnQgZmxhZ3MpIiwKICAgICAgICAiUmVjZWl2ZXMgZGF0YSBmcm9tIGEgY29ubmVjdGVkIHNvY2tldCIKICAgIF0sCiAgICAic29ja2V0X3JlY3Zmcm9tIjogWwogICAgICAgICJpbnQgc29ja2V0X3JlY3Zmcm9tKHJlc291cmNlIHNvY2tldCwgc3RyaW5nICZidWYsIGludCBsZW4sIGludCBmbGFncywgc3RyaW5nICZuYW1lIFssIGludCAmcG9ydF0pIiwKICAgICAgICAiUmVjZWl2ZXMgZGF0YSBmcm9tIGEgc29ja2V0LCBjb25uZWN0ZWQgb3Igbm90IgogICAgXSwKICAgICJzb2NrZXRfc2VsZWN0IjogWwogICAgICAgICJpbnQgc29ja2V0X3NlbGVjdChhcnJheSAmcmVhZF9mZHMsIGFycmF5ICZ3cml0ZV9mZHMsIGFycmF5ICZleGNlcHRfZmRzLCBpbnQgdHZfc2VjWywgaW50IHR2X3VzZWNdKSIsCiAgICAgICAgIlJ1bnMgdGhlIHNlbGVjdCgpIHN5c3RlbSBjYWxsIG9uIHRoZSBzZXRzIG1lbnRpb25lZCB3aXRoIGEgdGltZW91dCBzcGVjaWZpZWQgYnkgdHZfc2VjIGFuZCB0dl91c2VjIgogICAgXSwKICAgICJzb2NrZXRfc2VuZCI6IFsKICAgICAgICAiaW50IHNvY2tldF9zZW5kKHJlc291cmNlIHNvY2tldCwgc3RyaW5nIGJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzKSIsCiAgICAgICAgIlNlbmRzIGRhdGEgdG8gYSBjb25uZWN0ZWQgc29ja2V0IgogICAgXSwKICAgICJzb2NrZXRfc2VuZHRvIjogWwogICAgICAgICJpbnQgc29ja2V0X3NlbmR0byhyZXNvdXJjZSBzb2NrZXQsIHN0cmluZyBidWYsIGludCBsZW4sIGludCBmbGFncywgc3RyaW5nIGFkZHIgWywgaW50IHBvcnRdKSIsCiAgICAgICAgIlNlbmRzIGEgbWVzc2FnZSB0byBhIHNvY2tldCwgd2hldGhlciBpdCBpcyBjb25uZWN0ZWQgb3Igbm90IgogICAgXSwKICAgICJzb2NrZXRfc2V0X2Jsb2NrIjogWwogICAgICAgICJib29sIHNvY2tldF9zZXRfYmxvY2socmVzb3VyY2Ugc29ja2V0KSIsCiAgICAgICAgIlNldHMgYmxvY2tpbmcgbW9kZSBvbiBhIHNvY2tldCByZXNvdXJjZSIKICAgIF0sCiAgICAic29ja2V0X3NldF9ub25ibG9jayI6IFsKICAgICAgICAiYm9vbCBzb2NrZXRfc2V0X25vbmJsb2NrKHJlc291cmNlIHNvY2tldCkiLAogICAgICAgICJTZXRzIG5vbmJsb2NraW5nIG1vZGUgb24gYSBzb2NrZXQgcmVzb3VyY2UiCiAgICBdLAogICAgInNvY2tldF9zZXRfb3B0aW9uIjogWwogICAgICAgICJib29sIHNvY2tldF9zZXRfb3B0aW9uKHJlc291cmNlIHNvY2tldCwgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgaW50fGFycmF5IG9wdHZhbCkiLAogICAgICAgICJTZXRzIHNvY2tldCBvcHRpb25zIGZvciB0aGUgc29ja2V0IgogICAgXSwKICAgICJzb2NrZXRfc2h1dGRvd24iOiBbCiAgICAgICAgImJvb2wgc29ja2V0X3NodXRkb3duKHJlc291cmNlIHNvY2tldFssIGludCBob3ddKSIsCiAgICAgICAgIlNodXRzIGRvd24gYSBzb2NrZXQgZm9yIHJlY2VpdmluZywgc2VuZGluZywgb3IgYm90aC4iCiAgICBdLAogICAgInNvY2tldF9zdHJlcnJvciI6IFsKICAgICAgICAic3RyaW5nIHNvY2tldF9zdHJlcnJvcihpbnQgZXJybm8pIiwKICAgICAgICAiUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIGFuIGVycm9yIgogICAgXSwKICAgICJzb2NrZXRfd3JpdGUiOiBbCiAgICAgICAgImludCBzb2NrZXRfd3JpdGUocmVzb3VyY2Ugc29ja2V0LCBzdHJpbmcgYnVmWywgaW50IGxlbmd0aF0pIiwKICAgICAgICAiV3JpdGVzIHRoZSBidWZmZXIgdG8gdGhlIHNvY2tldCByZXNvdXJjZSwgbGVuZ3RoIGlzIG9wdGlvbmFsIgogICAgXSwKICAgICJzb2xpZF9mZXRjaF9wcmV2IjogWwogICAgICAgICJib29sIHNvbGlkX2ZldGNoX3ByZXYocmVzb3VyY2UgcmVzdWx0X2lkKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAic29ydCI6IFsKICAgICAgICAiYm9vbCBzb3J0KGFycmF5ICZhcnJheV9hcmcgWywgaW50IHNvcnRfZmxhZ3NdKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkiCiAgICBdLAogICAgInNvdW5kZXgiOiBbCiAgICAgICAgInN0cmluZyBzb3VuZGV4KHN0cmluZyBzdHIpIiwKICAgICAgICAiQ2FsY3VsYXRlIHRoZSBzb3VuZGV4IGtleSBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAic3BsX2F1dG9sb2FkIjogWwogICAgICAgICJ2b2lkIHNwbF9hdXRvbG9hZChzdHJpbmcgY2xhc3NfbmFtZSBbLCBzdHJpbmcgZmlsZV9leHRlbnNpb25zXSkiLAogICAgICAgICJEZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBfX2F1dG9sb2FkKCkiCiAgICBdLAogICAgInNwbF9hdXRvbG9hZF9jYWxsIjogWwogICAgICAgICJ2b2lkIHNwbF9hdXRvbG9hZF9jYWxsKHN0cmluZyBjbGFzc19uYW1lKSIsCiAgICAgICAgIlRyeSBhbGwgcmVnaXN0ZXJkIGF1dG9sb2FkIGZ1bmN0aW9uIHRvIGxvYWQgdGhlIHJlcXVlc3RlZCBjbGFzcyIKICAgIF0sCiAgICAic3BsX2F1dG9sb2FkX2V4dGVuc2lvbnMiOiBbCiAgICAgICAgInN0cmluZyBzcGxfYXV0b2xvYWRfZXh0ZW5zaW9ucyhbc3RyaW5nIGZpbGVfZXh0ZW5zaW9uc10pIiwKICAgICAgICAiUmVnaXN0ZXIgYW5kIHJldHVybiBkZWZhdWx0IGZpbGUgZXh0ZW5zaW9ucyBmb3Igc3BsX2F1dG9sb2FkIgogICAgXSwKICAgICJzcGxfYXV0b2xvYWRfZnVuY3Rpb25zIjogWwogICAgICAgICJmYWxzZXxhcnJheSBzcGxfYXV0b2xvYWRfZnVuY3Rpb25zKCkiLAogICAgICAgICJSZXR1cm4gYWxsIHJlZ2lzdGVyZWQgX19hdXRvbG9hZCgpIGZ1bmN0aW9ubnMiCiAgICBdLAogICAgInNwbF9hdXRvbG9hZF9yZWdpc3RlciI6IFsKICAgICAgICAiYm9vbCBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoW21peGVkIGF1dG9sb2FkX2Z1bmN0aW9uID0gXCJzcGxfYXV0b2xvYWRcIiBbLCB0aHJvdyA9IHRydWUgWywgcHJlcGVuZF1dXSkiLAogICAgICAgICJSZWdpc3RlciBnaXZlbiBmdW5jdGlvbiBhcyBfX2F1dG9sb2FkKCkgaW1wbGVtZW50YXRpb24iCiAgICBdLAogICAgInNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyIjogWwogICAgICAgICJib29sIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKG1peGVkIGF1dG9sb2FkX2Z1bmN0aW9uKSIsCiAgICAgICAgIlVucmVnaXN0ZXIgZ2l2ZW4gZnVuY3Rpb24gYXMgX19hdXRvbG9hZCgpIGltcGxlbWVudGF0aW9uIgogICAgXSwKICAgICJzcGxfY2xhc3NlcyI6IFsKICAgICAgICAiYXJyYXkgc3BsX2NsYXNzZXMoKSIsCiAgICAgICAgIlJldHVybiBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgY2xzc2VzIGFuZCBpbnRlcmZhY2VzIGRlZmluZWQgaW4gU1BMIgogICAgXSwKICAgICJzcGxfb2JqZWN0X2hhc2giOiBbCiAgICAgICAgInN0cmluZyBzcGxfb2JqZWN0X2hhc2gob2JqZWN0IG9iaikiLAogICAgICAgICJSZXR1cm4gaGFzaCBpZCBmb3IgZ2l2ZW4gb2JqZWN0IgogICAgXSwKICAgICJzcGxpdCI6IFsKICAgICAgICAiYXJyYXkgc3BsaXQoc3RyaW5nIHBhdHRlcm4sIHN0cmluZyBzdHJpbmcgWywgaW50IGxpbWl0XSkiLAogICAgICAgICJTcGxpdCBzdHJpbmcgaW50byBhcnJheSBieSByZWd1bGFyIGV4cHJlc3Npb24iCiAgICBdLAogICAgInNwbGl0aSI6IFsKICAgICAgICAiYXJyYXkgc3BsaXRpKHN0cmluZyBwYXR0ZXJuLCBzdHJpbmcgc3RyaW5nIFssIGludCBsaW1pdF0pIiwKICAgICAgICAiU3BsaXQgc3RyaW5nIGludG8gYXJyYXkgYnkgcmVndWxhciBleHByZXNzaW9uIGNhc2UtaW5zZW5zaXRpdmUiCiAgICBdLAogICAgInNwcmludGYiOiBbCiAgICAgICAgInN0cmluZyBzcHJpbnRmKHN0cmluZyBmb3JtYXQgWywgbWl4ZWQgYXJnMSBbLCBtaXhlZCAuLi5dXSkiLAogICAgICAgICJSZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIgogICAgXSwKICAgICJzcWxfcmVnY2FzZSI6IFsKICAgICAgICAic3RyaW5nIHNxbF9yZWdjYXNlKHN0cmluZyBzdHJpbmcpIiwKICAgICAgICAiTWFrZSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2giCiAgICBdLAogICAgInNxbGl0ZV9hcnJheV9xdWVyeSI6IFsKICAgICAgICAiYXJyYXkgc3FsaXRlX2FycmF5X3F1ZXJ5KHJlc291cmNlIGRiLCBzdHJpbmcgcXVlcnkgWyAsIGludCByZXN1bHRfdHlwZSBbLCBib29sIGRlY29kZV9iaW5hcnldXSkiLAogICAgICAgICJFeGVjdXRlcyBhIHF1ZXJ5IGFnYWluc3QgYSBnaXZlbiBkYXRhYmFzZSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhcnJheXMuIgogICAgXSwKICAgICJzcWxpdGVfYnVzeV90aW1lb3V0IjogWwogICAgICAgICJ2b2lkIHNxbGl0ZV9idXN5X3RpbWVvdXQocmVzb3VyY2UgZGIsIGludCBtcykiLAogICAgICAgICJTZXQgYnVzeSB0aW1lb3V0IGR1cmF0aW9uLiBJZiBtcyA8PSAwLCBhbGwgYnVzeSBoYW5kbGVycyBhcmUgZGlzYWJsZWQuIgogICAgXSwKICAgICJzcWxpdGVfY2hhbmdlcyI6IFsKICAgICAgICAiaW50IHNxbGl0ZV9jaGFuZ2VzKHJlc291cmNlIGRiKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSBjaGFuZ2VkIGJ5IHRoZSBtb3N0IHJlY2VudCBTUUwgc3RhdGVtZW50LiIKICAgIF0sCiAgICAic3FsaXRlX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIHNxbGl0ZV9jbG9zZShyZXNvdXJjZSBkYikiLAogICAgICAgICJDbG9zZXMgYW4gb3BlbiBzcWxpdGUgZGF0YWJhc2UuIgogICAgXSwKICAgICJzcWxpdGVfY29sdW1uIjogWwogICAgICAgICJtaXhlZCBzcWxpdGVfY29sdW1uKHJlc291cmNlIHJlc3VsdCwgbWl4ZWQgaW5kZXhfb3JfbmFtZSBbLCBib29sIGRlY29kZV9iaW5hcnldKSIsCiAgICAgICAgIkZldGNoZXMgYSBjb2x1bW4gZnJvbSB0aGUgY3VycmVudCByb3cgb2YgYSByZXN1bHQgc2V0LiIKICAgIF0sCiAgICAic3FsaXRlX2NyZWF0ZV9hZ2dyZWdhdGUiOiBbCiAgICAgICAgImJvb2wgc3FsaXRlX2NyZWF0ZV9hZ2dyZWdhdGUocmVzb3VyY2UgZGIsIHN0cmluZyBmdW5jbmFtZSwgbWl4ZWQgc3RlcF9mdW5jLCBtaXhlZCBmaW5hbGl6ZV9mdW5jWywgbG9uZyBudW1fYXJnc10pIiwKICAgICAgICAiUmVnaXN0ZXJzIGFuIGFnZ3JlZ2F0ZSBmdW5jdGlvbiBmb3IgcXVlcmllcy4iCiAgICBdLAogICAgInNxbGl0ZV9jcmVhdGVfZnVuY3Rpb24iOiBbCiAgICAgICAgImJvb2wgc3FsaXRlX2NyZWF0ZV9mdW5jdGlvbihyZXNvdXJjZSBkYiwgc3RyaW5nIGZ1bmNuYW1lLCBtaXhlZCBjYWxsYmFja1ssIGxvbmcgbnVtX2FyZ3NdKSIsCiAgICAgICAgIlJlZ2lzdGVycyBhIFwicmVndWxhclwiIGZ1bmN0aW9uIGZvciBxdWVyaWVzLiIKICAgIF0sCiAgICAic3FsaXRlX2N1cnJlbnQiOiBbCiAgICAgICAgImFycmF5IHNxbGl0ZV9jdXJyZW50KHJlc291cmNlIHJlc3VsdCBbLCBpbnQgcmVzdWx0X3R5cGUgWywgYm9vbCBkZWNvZGVfYmluYXJ5XV0pIiwKICAgICAgICAiRmV0Y2hlcyB0aGUgY3VycmVudCByb3cgZnJvbSBhIHJlc3VsdCBzZXQgYXMgYW4gYXJyYXkuIgogICAgXSwKICAgICJzcWxpdGVfZXJyb3Jfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgc3FsaXRlX2Vycm9yX3N0cmluZyhpbnQgZXJyb3JfY29kZSkiLAogICAgICAgICJSZXR1cm5zIHRoZSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIGFuIGVycm9yIGNvZGUuIgogICAgXSwKICAgICJzcWxpdGVfZXNjYXBlX3N0cmluZyI6IFsKICAgICAgICAic3RyaW5nIHNxbGl0ZV9lc2NhcGVfc3RyaW5nKHN0cmluZyBpdGVtKSIsCiAgICAgICAgIkVzY2FwZXMgYSBzdHJpbmcgZm9yIHVzZSBhcyBhIHF1ZXJ5IHBhcmFtZXRlci4iCiAgICBdLAogICAgInNxbGl0ZV9leGVjIjogWwogICAgICAgICJib29sZWFuIHNxbGl0ZV9leGVjKHN0cmluZyBxdWVyeSwgcmVzb3VyY2UgZGJbLCBzdHJpbmcgJmVycm9yX21lc3NhZ2VdKSIsCiAgICAgICAgIkV4ZWN1dGVzIGEgcmVzdWx0LWxlc3MgcXVlcnkgYWdhaW5zdCBhIGdpdmVuIGRhdGFiYXNlIgogICAgXSwKICAgICJzcWxpdGVfZmFjdG9yeSI6IFsKICAgICAgICAib2JqZWN0IHNxbGl0ZV9mYWN0b3J5KHN0cmluZyBmaWxlbmFtZSBbLCBpbnQgbW9kZSBbLCBzdHJpbmcgJmVycm9yX21lc3NhZ2VdXSkiLAogICAgICAgICJPcGVucyBhIFNRTGl0ZSBkYXRhYmFzZSBhbmQgY3JlYXRlcyBhbiBvYmplY3QgZm9yIGl0LiBXaWxsIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaWYgaXQgZG9lcyBub3QgZXhpc3QuIgogICAgXSwKICAgICJzcWxpdGVfZmV0Y2hfYWxsIjogWwogICAgICAgICJhcnJheSBzcWxpdGVfZmV0Y2hfYWxsKHJlc291cmNlIHJlc3VsdCBbLCBpbnQgcmVzdWx0X3R5cGUgWywgYm9vbCBkZWNvZGVfYmluYXJ5XV0pIiwKICAgICAgICAiRmV0Y2hlcyBhbGwgcm93cyBmcm9tIGEgcmVzdWx0IHNldCBhcyBhbiBhcnJheSBvZiBhcnJheXMuIgogICAgXSwKICAgICJzcWxpdGVfZmV0Y2hfYXJyYXkiOiBbCiAgICAgICAgImFycmF5IHNxbGl0ZV9mZXRjaF9hcnJheShyZXNvdXJjZSByZXN1bHQgWywgaW50IHJlc3VsdF90eXBlIFssIGJvb2wgZGVjb2RlX2JpbmFyeV1dKSIsCiAgICAgICAgIkZldGNoZXMgdGhlIG5leHQgcm93IGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIGFycmF5LiIKICAgIF0sCiAgICAic3FsaXRlX2ZldGNoX2NvbHVtbl90eXBlcyI6IFsKICAgICAgICAicmVzb3VyY2Ugc3FsaXRlX2ZldGNoX2NvbHVtbl90eXBlcyhzdHJpbmcgdGFibGVfbmFtZSwgcmVzb3VyY2UgZGIgWywgaW50IHJlc3VsdF90eXBlXSkiLAogICAgICAgICJSZXR1cm4gYW4gYXJyYXkgb2YgY29sdW1uIHR5cGVzIGZyb20gYSBwYXJ0aWN1bGFyIHRhYmxlLiIKICAgIF0sCiAgICAic3FsaXRlX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IHNxbGl0ZV9mZXRjaF9vYmplY3QocmVzb3VyY2UgcmVzdWx0IFssIHN0cmluZyBjbGFzc19uYW1lIFssIE5VTEx8YXJyYXkgY3Rvcl9wYXJhbXMgWywgYm9vbCBkZWNvZGVfYmluYXJ5XV1dKSIsCiAgICAgICAgIkZldGNoZXMgdGhlIG5leHQgcm93IGZyb20gYSByZXN1bHQgc2V0IGFzIGFuIG9iamVjdC4iCiAgICBdLAogICAgInNxbGl0ZV9mZXRjaF9zaW5nbGUiOiBbCiAgICAgICAgInN0cmluZyBzcWxpdGVfZmV0Y2hfc2luZ2xlKHJlc291cmNlIHJlc3VsdCBbLCBib29sIGRlY29kZV9iaW5hcnldKSIsCiAgICAgICAgIkZldGNoZXMgdGhlIGZpcnN0IGNvbHVtbiBvZiBhIHJlc3VsdCBzZXQgYXMgYSBzdHJpbmcuIgogICAgXSwKICAgICJzcWxpdGVfZmllbGRfbmFtZSI6IFsKICAgICAgICAic3RyaW5nIHNxbGl0ZV9maWVsZF9uYW1lKHJlc291cmNlIHJlc3VsdCwgaW50IGZpZWxkX2luZGV4KSIsCiAgICAgICAgIlJldHVybnMgdGhlIG5hbWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIG9mIGEgcmVzdWx0IHNldC4iCiAgICBdLAogICAgInNxbGl0ZV9oYXNfcHJldiI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfaGFzX3ByZXYocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIiogUmV0dXJucyB3aGV0aGVyIGEgcHJldmlvdXMgcm93IGlzIGF2YWlsYWJsZS4iCiAgICBdLAogICAgInNxbGl0ZV9rZXkiOiBbCiAgICAgICAgImludCBzcWxpdGVfa2V5KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJSZXR1cm4gdGhlIGN1cnJlbnQgcm93IGluZGV4IG9mIGEgYnVmZmVyZWQgcmVzdWx0LiIKICAgIF0sCiAgICAic3FsaXRlX2xhc3RfZXJyb3IiOiBbCiAgICAgICAgImludCBzcWxpdGVfbGFzdF9lcnJvcihyZXNvdXJjZSBkYikiLAogICAgICAgICJSZXR1cm5zIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBsYXN0IGVycm9yIGZvciBhIGRhdGFiYXNlLiIKICAgIF0sCiAgICAic3FsaXRlX2xhc3RfaW5zZXJ0X3Jvd2lkIjogWwogICAgICAgICJpbnQgc3FsaXRlX2xhc3RfaW5zZXJ0X3Jvd2lkKHJlc291cmNlIGRiKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHJvd2lkIG9mIHRoZSBtb3N0IHJlY2VudGx5IGluc2VydGVkIHJvdy4iCiAgICBdLAogICAgInNxbGl0ZV9saWJlbmNvZGluZyI6IFsKICAgICAgICAic3RyaW5nIHNxbGl0ZV9saWJlbmNvZGluZygpIiwKICAgICAgICAiUmV0dXJucyB0aGUgZW5jb2RpbmcgKGlzbzg4NTkgb3IgVVRGLTgpIG9mIHRoZSBsaW5rZWQgU1FMaXRlIGxpYnJhcnkuIgogICAgXSwKICAgICJzcWxpdGVfbGlidmVyc2lvbiI6IFsKICAgICAgICAic3RyaW5nIHNxbGl0ZV9saWJ2ZXJzaW9uKCkiLAogICAgICAgICJSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaW5rZWQgU1FMaXRlIGxpYnJhcnkuIgogICAgXSwKICAgICJzcWxpdGVfbmV4dCI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfbmV4dChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiU2VlayB0byB0aGUgbmV4dCByb3cgbnVtYmVyIG9mIGEgcmVzdWx0IHNldC4iCiAgICBdLAogICAgInNxbGl0ZV9udW1fZmllbGRzIjogWwogICAgICAgICJpbnQgc3FsaXRlX251bV9maWVsZHMocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiBmaWVsZHMgaW4gYSByZXN1bHQgc2V0LiIKICAgIF0sCiAgICAic3FsaXRlX251bV9yb3dzIjogWwogICAgICAgICJpbnQgc3FsaXRlX251bV9yb3dzKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiBhIGJ1ZmZlcmVkIHJlc3VsdCBzZXQuIgogICAgXSwKICAgICJzcWxpdGVfb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2Ugc3FsaXRlX29wZW4oc3RyaW5nIGZpbGVuYW1lIFssIGludCBtb2RlIFssIHN0cmluZyAmZXJyb3JfbWVzc2FnZV1dKSIsCiAgICAgICAgIk9wZW5zIGEgU1FMaXRlIGRhdGFiYXNlLiBXaWxsIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaWYgaXQgZG9lcyBub3QgZXhpc3QuIgogICAgXSwKICAgICJzcWxpdGVfcG9wZW4iOiBbCiAgICAgICAgInJlc291cmNlIHNxbGl0ZV9wb3BlbihzdHJpbmcgZmlsZW5hbWUgWywgaW50IG1vZGUgWywgc3RyaW5nICZlcnJvcl9tZXNzYWdlXV0pIiwKICAgICAgICAiT3BlbnMgYSBwZXJzaXN0ZW50IGhhbmRsZSB0byBhIFNRTGl0ZSBkYXRhYmFzZS4gV2lsbCBjcmVhdGUgdGhlIGRhdGFiYXNlIGlmIGl0IGRvZXMgbm90IGV4aXN0LiIKICAgIF0sCiAgICAic3FsaXRlX3ByZXYiOiBbCiAgICAgICAgImJvb2wgc3FsaXRlX3ByZXYocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIiogU2VlayB0byB0aGUgcHJldmlvdXMgcm93IG51bWJlciBvZiBhIHJlc3VsdCBzZXQuIgogICAgXSwKICAgICJzcWxpdGVfcXVlcnkiOiBbCiAgICAgICAgInJlc291cmNlIHNxbGl0ZV9xdWVyeShzdHJpbmcgcXVlcnksIHJlc291cmNlIGRiIFssIGludCByZXN1bHRfdHlwZSBbLCBzdHJpbmcgJmVycm9yX21lc3NhZ2VdXSkiLAogICAgICAgICJFeGVjdXRlcyBhIHF1ZXJ5IGFnYWluc3QgYSBnaXZlbiBkYXRhYmFzZSBhbmQgcmV0dXJucyBhIHJlc3VsdCBoYW5kbGUuIgogICAgXSwKICAgICJzcWxpdGVfcmV3aW5kIjogWwogICAgICAgICJib29sIHNxbGl0ZV9yZXdpbmQocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlNlZWsgdG8gdGhlIGZpcnN0IHJvdyBudW1iZXIgb2YgYSBidWZmZXJlZCByZXN1bHQgc2V0LiIKICAgIF0sCiAgICAic3FsaXRlX3NlZWsiOiBbCiAgICAgICAgImJvb2wgc3FsaXRlX3NlZWsocmVzb3VyY2UgcmVzdWx0LCBpbnQgcm93KSIsCiAgICAgICAgIlNlZWsgdG8gYSBwYXJ0aWN1bGFyIHJvdyBudW1iZXIgb2YgYSBidWZmZXJlZCByZXN1bHQgc2V0LiIKICAgIF0sCiAgICAic3FsaXRlX3NpbmdsZV9xdWVyeSI6IFsKICAgICAgICAiYXJyYXkgc3FsaXRlX3NpbmdsZV9xdWVyeShyZXNvdXJjZSBkYiwgc3RyaW5nIHF1ZXJ5IFssIGJvb2wgZmlyc3Rfcm93X29ubHkgWywgYm9vbCBkZWNvZGVfYmluYXJ5XV0pIiwKICAgICAgICAiRXhlY3V0ZXMgYSBxdWVyeSBhbmQgcmV0dXJucyBlaXRoZXIgYW4gYXJyYXkgZm9yIG9uZSBzaW5nbGUgY29sdW1uIG9yIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qgcm93LiIKICAgIF0sCiAgICAic3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5IjogWwogICAgICAgICJzdHJpbmcgc3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5KHN0cmluZyBkYXRhKSIsCiAgICAgICAgIkRlY29kZSBiaW5hcnkgZW5jb2Rpbmcgb24gYSBzdHJpbmcgcGFyYW1ldGVyIHBhc3NlZCB0byBhbiBVREYuIgogICAgXSwKICAgICJzcWxpdGVfdWRmX2VuY29kZV9iaW5hcnkiOiBbCiAgICAgICAgInN0cmluZyBzcWxpdGVfdWRmX2VuY29kZV9iaW5hcnkoc3RyaW5nIGRhdGEpIiwKICAgICAgICAiQXBwbHkgYmluYXJ5IGVuY29kaW5nIChpZiByZXF1aXJlZCkgdG8gYSBzdHJpbmcgdG8gcmV0dXJuIGZyb20gYW4gVURGLiIKICAgIF0sCiAgICAic3FsaXRlX3VuYnVmZmVyZWRfcXVlcnkiOiBbCiAgICAgICAgInJlc291cmNlIHNxbGl0ZV91bmJ1ZmZlcmVkX3F1ZXJ5KHN0cmluZyBxdWVyeSwgcmVzb3VyY2UgZGIgWyAsIGludCByZXN1bHRfdHlwZSBbLCBzdHJpbmcgJmVycm9yX21lc3NhZ2VdXSkiLAogICAgICAgICJFeGVjdXRlcyBhIHF1ZXJ5IHRoYXQgZG9lcyBub3QgcHJlZmV0Y2ggYW5kIGJ1ZmZlciBhbGwgZGF0YS4iCiAgICBdLAogICAgInNxbGl0ZV92YWxpZCI6IFsKICAgICAgICAiYm9vbCBzcWxpdGVfdmFsaWQocmVzb3VyY2UgcmVzdWx0KSIsCiAgICAgICAgIlJldHVybnMgd2hldGhlciBtb3JlIHJvd3MgYXJlIGF2YWlsYWJsZS4iCiAgICBdLAogICAgInNxcnQiOiBbCiAgICAgICAgImZsb2F0IHNxcnQoZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBudW1iZXIiCiAgICBdLAogICAgInNyYW5kIjogWwogICAgICAgICJ2b2lkIHNyYW5kKFtpbnQgc2VlZF0pIiwKICAgICAgICAiU2VlZHMgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IiCiAgICBdLAogICAgInNzY2FuZiI6IFsKICAgICAgICAibWl4ZWQgc3NjYW5mKHN0cmluZyBzdHIsIHN0cmluZyBmb3JtYXQgWywgc3RyaW5nIC4uLl0pIiwKICAgICAgICAiSW1wbGVtZW50cyBhbiBBTlNJIEMgY29tcGF0aWJsZSBzc2NhbmYiCiAgICBdLAogICAgInN0YXQiOiBbCiAgICAgICAgImFycmF5IHN0YXQoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkdpdmUgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIgogICAgXSwKICAgICJzdHJfZ2V0Y3N2IjogWwogICAgICAgICJhcnJheSBzdHJfZ2V0Y3N2KHN0cmluZyBpbnB1dFssIHN0cmluZyBkZWxpbWl0ZXJbLCBzdHJpbmcgZW5jbG9zdXJlWywgc3RyaW5nIGVzY2FwZV1dXSkiLAogICAgICAgICJQYXJzZSBhIENTViBzdHJpbmcgaW50byBhbiBhcnJheSIKICAgIF0sCiAgICAic3RyX2lyZXBsYWNlIjogWwogICAgICAgICJtaXhlZCBzdHJfaXJlcGxhY2UobWl4ZWQgc2VhcmNoLCBtaXhlZCByZXBsYWNlLCBtaXhlZCBzdWJqZWN0IFssIGludCAmcmVwbGFjZV9jb3VudF0pIiwKICAgICAgICAiUmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIHNlYXJjaCBpbiBoYXlzdGFjayB3aXRoIHJlcGxhY2UgLyBjYXNlLWluc2Vuc2l0aXZlIgogICAgXSwKICAgICJzdHJfcGFkIjogWwogICAgICAgICJzdHJpbmcgc3RyX3BhZChzdHJpbmcgaW5wdXQsIGludCBwYWRfbGVuZ3RoIFssIHN0cmluZyBwYWRfc3RyaW5nIFssIGludCBwYWRfdHlwZV1dKSIsCiAgICAgICAgIlJldHVybnMgaW5wdXQgc3RyaW5nIHBhZGRlZCBvbiB0aGUgbGVmdCBvciByaWdodCB0byBzcGVjaWZpZWQgbGVuZ3RoIHdpdGggcGFkX3N0cmluZyIKICAgIF0sCiAgICAic3RyX3JlcGVhdCI6IFsKICAgICAgICAic3RyaW5nIHN0cl9yZXBlYXQoc3RyaW5nIGlucHV0LCBpbnQgbXVsdCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgcmVwZWF0IG11bHQgdGltZXMiCiAgICBdLAogICAgInN0cl9yZXBsYWNlIjogWwogICAgICAgICJtaXhlZCBzdHJfcmVwbGFjZShtaXhlZCBzZWFyY2gsIG1peGVkIHJlcGxhY2UsIG1peGVkIHN1YmplY3QgWywgaW50ICZyZXBsYWNlX2NvdW50XSkiLAogICAgICAgICJSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2Ygc2VhcmNoIGluIGhheXN0YWNrIHdpdGggcmVwbGFjZSIKICAgIF0sCiAgICAic3RyX3JvdDEzIjogWwogICAgICAgICJzdHJpbmcgc3RyX3JvdDEzKHN0cmluZyBzdHIpIiwKICAgICAgICAiUGVyZm9ybSB0aGUgcm90MTMgdHJhbnNmb3JtIG9uIGEgc3RyaW5nIgogICAgXSwKICAgICJzdHJfc2h1ZmZsZSI6IFsKICAgICAgICAidm9pZCBzdHJfc2h1ZmZsZShzdHJpbmcgc3RyKSIsCiAgICAgICAgIlNodWZmbGVzIHN0cmluZy4gT25lIHBlcm11dGF0aW9uIG9mIGFsbCBwb3NzaWJsZSBpcyBjcmVhdGVkIgogICAgXSwKICAgICJzdHJfc3BsaXQiOiBbCiAgICAgICAgImFycmF5IHN0cl9zcGxpdChzdHJpbmcgc3RyIFssIGludCBzcGxpdF9sZW5ndGhdKSIsCiAgICAgICAgIkNvbnZlcnQgYSBzdHJpbmcgdG8gYW4gYXJyYXkuIElmIHNwbGl0X2xlbmd0aCBpcyBzcGVjaWZpZWQsIGJyZWFrIHRoZSBzdHJpbmcgZG93biBpbnRvIGNodW5rcyBlYWNoIHNwbGl0X2xlbmd0aCBjaGFyYWN0ZXJzIGxvbmcuIgogICAgXSwKICAgICJzdHJfd29yZF9jb3VudCI6IFsKICAgICAgICAibWl4ZWQgc3RyX3dvcmRfY291bnQoc3RyaW5nIHN0ciwgW2ludCBmb3JtYXQgWywgc3RyaW5nIGNoYXJsaXN0XV0pIiwKICAgICAgICAiQ291bnRzIHRoZSBudW1iZXIgb2Ygd29yZHMgaW5zaWRlIGEgc3RyaW5nLiBJZiBmb3JtYXQgb2YgMSBpcyBzcGVjaWZpZWQsICAgICB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgd29yZHMgICAgIGZvdW5kIGluc2lkZSB0aGUgc3RyaW5nLiBJZiBmb3JtYXQgb2YgMiBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGZ1bmN0aW9uICAgICB3aWxsIHJldHVybiBhbiBhc3NvY2lhdGVkIGFycmF5IHdoZXJlIHRoZSBwb3NpdGlvbiBvZiB0aGUgd29yZCBpcyB0aGUga2V5ICAgICBhbmQgdGhlIHdvcmQgaXRzZWxmIGlzIHRoZSB2YWx1ZS4gICAgICAgICAgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24sICd3b3JkJyBpcyBkZWZpbmVkIGFzIGEgbG9jYWxlIGRlcGVuZGVudCAgICAgc3RyaW5nIGNvbnRhaW5pbmcgYWxwaGFiZXRpYyBjaGFyYWN0ZXJzLCB3aGljaCBhbHNvIG1heSBjb250YWluLCBidXQgbm90IHN0YXJ0ICAgICB3aXRoIFwiJ1wiIGFuZCBcIi1cIiBjaGFyYWN0ZXJzLiIKICAgIF0sCiAgICAic3RyY2FzZWNtcCI6IFsKICAgICAgICAiaW50IHN0cmNhc2VjbXAoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyKSIsCiAgICAgICAgIkJpbmFyeSBzYWZlIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24iCiAgICBdLAogICAgInN0cmNociI6IFsKICAgICAgICAic3RyaW5nIHN0cmNocihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUpIiwKICAgICAgICAiQW4gYWxpYXMgZm9yIHN0cnN0ciIKICAgIF0sCiAgICAic3RyY21wIjogWwogICAgICAgICJpbnQgc3RyY21wKHN0cmluZyBzdHIxLCBzdHJpbmcgc3RyMikiLAogICAgICAgICJCaW5hcnkgc2FmZSBzdHJpbmcgY29tcGFyaXNvbiIKICAgIF0sCiAgICAic3RyY29sbCI6IFsKICAgICAgICAiaW50IHN0cmNvbGwoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyKSIsCiAgICAgICAgIkNvbXBhcmVzIHR3byBzdHJpbmdzIHVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZSIKICAgIF0sCiAgICAic3RyY3NwbiI6IFsKICAgICAgICAiaW50IHN0cmNzcG4oc3RyaW5nIHN0ciwgc3RyaW5nIG1hc2sgWywgc3RhcnQgWywgbGVuXV0pIiwKICAgICAgICAiRmluZHMgbGVuZ3RoIG9mIGluaXRpYWwgc2VnbWVudCBjb25zaXN0aW5nIGVudGlyZWx5IG9mIGNoYXJhY3RlcnMgbm90IGZvdW5kIGluIG1hc2suIElmIHN0YXJ0IG9yL2FuZCBsZW5ndGggaXMgcHJvdmlkZSB3b3JrcyBsaWtlIHN0cmNzcG4oc3Vic3RyKCRzLCRzdGFydCwkbGVuKSwkYmFkX2NoYXJzKSIKICAgIF0sCiAgICAic3RyZWFtX2J1Y2tldF9hcHBlbmQiOiBbCiAgICAgICAgInZvaWQgc3RyZWFtX2J1Y2tldF9hcHBlbmQocmVzb3VyY2UgYnJpZ2FkZSwgcmVzb3VyY2UgYnVja2V0KSIsCiAgICAgICAgIkFwcGVuZCBidWNrZXQgdG8gYnJpZ2FkZSIKICAgIF0sCiAgICAic3RyZWFtX2J1Y2tldF9tYWtlX3dyaXRlYWJsZSI6IFsKICAgICAgICAib2JqZWN0IHN0cmVhbV9idWNrZXRfbWFrZV93cml0ZWFibGUocmVzb3VyY2UgYnJpZ2FkZSkiLAogICAgICAgICJSZXR1cm4gYSBidWNrZXQgb2JqZWN0IGZyb20gdGhlIGJyaWdhZGUgZm9yIG9wZXJhdGluZyBvbiIKICAgIF0sCiAgICAic3RyZWFtX2J1Y2tldF9uZXciOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9idWNrZXRfbmV3KHJlc291cmNlIHN0cmVhbSwgc3RyaW5nIGJ1ZmZlcikiLAogICAgICAgICJDcmVhdGUgYSBuZXcgYnVja2V0IGZvciB1c2Ugb24gdGhlIGN1cnJlbnQgc3RyZWFtIgogICAgXSwKICAgICJzdHJlYW1fYnVja2V0X3ByZXBlbmQiOiBbCiAgICAgICAgInZvaWQgc3RyZWFtX2J1Y2tldF9wcmVwZW5kKHJlc291cmNlIGJyaWdhZGUsIHJlc291cmNlIGJ1Y2tldCkiLAogICAgICAgICJQcmVwZW5kIGJ1Y2tldCB0byBicmlnYWRlIgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9jcmVhdGUiOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9jb250ZXh0X2NyZWF0ZShbYXJyYXkgb3B0aW9uc1ssIGFycmF5IHBhcmFtc11dKSIsCiAgICAgICAgIkNyZWF0ZSBhIGZpbGUgY29udGV4dCBhbmQgb3B0aW9uYWxseSBzZXQgcGFyYW1ldGVycyIKICAgIF0sCiAgICAic3RyZWFtX2NvbnRleHRfZ2V0X2RlZmF1bHQiOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9jb250ZXh0X2dldF9kZWZhdWx0KFthcnJheSBvcHRpb25zXSkiLAogICAgICAgICJHZXQgYSBoYW5kbGUgb24gdGhlIGRlZmF1bHQgZmlsZS9zdHJlYW0gY29udGV4dCBhbmQgb3B0aW9uYWxseSBzZXQgcGFyYW1ldGVycyIKICAgIF0sCiAgICAic3RyZWFtX2NvbnRleHRfZ2V0X29wdGlvbnMiOiBbCiAgICAgICAgImFycmF5IHN0cmVhbV9jb250ZXh0X2dldF9vcHRpb25zKHJlc291cmNlIGNvbnRleHR8cmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIlJldHJpZXZlIG9wdGlvbnMgZm9yIGEgc3RyZWFtL3dyYXBwZXIvY29udGV4dCIKICAgIF0sCiAgICAic3RyZWFtX2NvbnRleHRfZ2V0X3BhcmFtcyI6IFsKICAgICAgICAiYXJyYXkgc3RyZWFtX2NvbnRleHRfZ2V0X3BhcmFtcyhyZXNvdXJjZSBjb250ZXh0fHJlc291cmNlIHN0cmVhbSkiLAogICAgICAgICJHZXQgcGFyYW1ldGVycyBvZiBhIGZpbGUgY29udGV4dCIKICAgIF0sCiAgICAic3RyZWFtX2NvbnRleHRfc2V0X2RlZmF1bHQiOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9jb250ZXh0X3NldF9kZWZhdWx0KGFycmF5IG9wdGlvbnMpIiwKICAgICAgICAiU2V0IGRlZmF1bHQgZmlsZS9zdHJlYW0gY29udGV4dCwgcmV0dXJucyB0aGUgY29udGV4dCBhcyBhIHJlc291cmNlIgogICAgXSwKICAgICJzdHJlYW1fY29udGV4dF9zZXRfb3B0aW9uIjogWwogICAgICAgICJib29sIHN0cmVhbV9jb250ZXh0X3NldF9vcHRpb24ocmVzb3VyY2UgY29udGV4dHxyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyB3cmFwcGVybmFtZSwgc3RyaW5nIG9wdGlvbm5hbWUsIG1peGVkIHZhbHVlKSIsCiAgICAgICAgIlNldCBhbiBvcHRpb24gZm9yIGEgd3JhcHBlciIKICAgIF0sCiAgICAic3RyZWFtX2NvbnRleHRfc2V0X3BhcmFtcyI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fY29udGV4dF9zZXRfcGFyYW1zKHJlc291cmNlIGNvbnRleHR8cmVzb3VyY2Ugc3RyZWFtLCBhcnJheSBvcHRpb25zKSIsCiAgICAgICAgIlNldCBwYXJhbWV0ZXJzIGZvciBhIGZpbGUgY29udGV4dCIKICAgIF0sCiAgICAic3RyZWFtX2NvcHlfdG9fc3RyZWFtIjogWwogICAgICAgICJsb25nIHN0cmVhbV9jb3B5X3RvX3N0cmVhbShyZXNvdXJjZSBzb3VyY2UsIHJlc291cmNlIGRlc3QgWywgbG9uZyBtYXhsZW4gWywgbG9uZyBwb3NdXSkiLAogICAgICAgICJSZWFkcyB1cCB0byBtYXhsZW4gYnl0ZXMgZnJvbSBzb3VyY2Ugc3RyZWFtIGFuZCB3cml0ZXMgdGhlbSB0byBkZXN0IHN0cmVhbS4iCiAgICBdLAogICAgInN0cmVhbV9maWx0ZXJfYXBwZW5kIjogWwogICAgICAgICJyZXNvdXJjZSBzdHJlYW1fZmlsdGVyX2FwcGVuZChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBmaWx0ZXJuYW1lWywgaW50IHJlYWRfd3JpdGVbLCBzdHJpbmcgZmlsdGVycGFyYW1zXV0pIiwKICAgICAgICAiQXBwZW5kIGEgZmlsdGVyIHRvIGEgc3RyZWFtIgogICAgXSwKICAgICJzdHJlYW1fZmlsdGVyX3ByZXBlbmQiOiBbCiAgICAgICAgInJlc291cmNlIHN0cmVhbV9maWx0ZXJfcHJlcGVuZChyZXNvdXJjZSBzdHJlYW0sIHN0cmluZyBmaWx0ZXJuYW1lWywgaW50IHJlYWRfd3JpdGVbLCBzdHJpbmcgZmlsdGVycGFyYW1zXV0pIiwKICAgICAgICAiUHJlcGVuZCBhIGZpbHRlciB0byBhIHN0cmVhbSIKICAgIF0sCiAgICAic3RyZWFtX2ZpbHRlcl9yZWdpc3RlciI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fZmlsdGVyX3JlZ2lzdGVyKHN0cmluZyBmaWx0ZXJuYW1lLCBzdHJpbmcgY2xhc3NuYW1lKSIsCiAgICAgICAgIlJlZ2lzdGVycyBhIGN1c3RvbSBmaWx0ZXIgaGFuZGxlciBjbGFzcyIKICAgIF0sCiAgICAic3RyZWFtX2ZpbHRlcl9yZW1vdmUiOiBbCiAgICAgICAgImJvb2wgc3RyZWFtX2ZpbHRlcl9yZW1vdmUocmVzb3VyY2Ugc3RyZWFtX2ZpbHRlcikiLAogICAgICAgICJGbHVzaGVzIGFueSBkYXRhIGluIHRoZSBmaWx0ZXIncyBpbnRlcm5hbCBidWZmZXIsIHJlbW92ZXMgaXQgZnJvbSB0aGUgY2hhaW4sIGFuZCBmcmVlcyB0aGUgcmVzb3VyY2UiCiAgICBdLAogICAgInN0cmVhbV9nZXRfY29udGVudHMiOiBbCiAgICAgICAgInN0cmluZyBzdHJlYW1fZ2V0X2NvbnRlbnRzKHJlc291cmNlIHNvdXJjZSBbLCBsb25nIG1heGxlbiBbLCBsb25nIG9mZnNldF1dKSIsCiAgICAgICAgIlJlYWRzIGFsbCByZW1haW5pbmcgYnl0ZXMgKG9yIHVwIHRvIG1heGxlbiBieXRlcykgZnJvbSBhIHN0cmVhbSBhbmQgcmV0dXJucyB0aGVtIGFzIGEgc3RyaW5nLiIKICAgIF0sCiAgICAic3RyZWFtX2dldF9maWx0ZXJzIjogWwogICAgICAgICJhcnJheSBzdHJlYW1fZ2V0X2ZpbHRlcnModm9pZCkiLAogICAgICAgICJSZXR1cm5zIGEgbGlzdCBvZiByZWdpc3RlcmVkIGZpbHRlcnMiCiAgICBdLAogICAgInN0cmVhbV9nZXRfbGluZSI6IFsKICAgICAgICAic3RyaW5nIHN0cmVhbV9nZXRfbGluZShyZXNvdXJjZSBzdHJlYW0sIGludCBtYXhsZW4gWywgc3RyaW5nIGVuZGluZ10pIiwKICAgICAgICAiUmVhZCB1cCB0byBtYXhsZW4gYnl0ZXMgZnJvbSBhIHN0cmVhbSBvciB1bnRpbCB0aGUgZW5kaW5nIHN0cmluZyBpcyBmb3VuZCIKICAgIF0sCiAgICAic3RyZWFtX2dldF9tZXRhX2RhdGEiOiBbCiAgICAgICAgImFycmF5IHN0cmVhbV9nZXRfbWV0YV9kYXRhKHJlc291cmNlIGZwKSIsCiAgICAgICAgIlJldHJpZXZlcyBoZWFkZXIvbWV0YSBkYXRhIGZyb20gc3RyZWFtcy9maWxlIHBvaW50ZXJzIgogICAgXSwKICAgICJzdHJlYW1fZ2V0X3RyYW5zcG9ydHMiOiBbCiAgICAgICAgImFycmF5IHN0cmVhbV9nZXRfdHJhbnNwb3J0cygpIiwKICAgICAgICAiUmV0cmlldmVzIGxpc3Qgb2YgcmVnaXN0ZXJlZCBzb2NrZXQgdHJhbnNwb3J0cyIKICAgIF0sCiAgICAic3RyZWFtX2dldF93cmFwcGVycyI6IFsKICAgICAgICAiYXJyYXkgc3RyZWFtX2dldF93cmFwcGVycygpIiwKICAgICAgICAiUmV0cmlldmVzIGxpc3Qgb2YgcmVnaXN0ZXJlZCBzdHJlYW0gd3JhcHBlcnMiCiAgICBdLAogICAgInN0cmVhbV9pc19sb2NhbCI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1faXNfbG9jYWwocmVzb3VyY2Ugc3RyZWFtfHN0cmluZyB1cmwpIiwKICAgICAgICAiIgogICAgXSwKICAgICJzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgiOiBbCiAgICAgICAgInN0cmluZyBzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgoc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkRldGVybWluZSB3aGF0IGZpbGUgd2lsbCBiZSBvcGVuZWQgYnkgY2FsbHMgdG8gZm9wZW4oKSB3aXRoIGEgcmVsYXRpdmUgcGF0aCIKICAgIF0sCiAgICAic3RyZWFtX3NlbGVjdCI6IFsKICAgICAgICAiaW50IHN0cmVhbV9zZWxlY3QoYXJyYXkgJnJlYWRfc3RyZWFtcywgYXJyYXkgJndyaXRlX3N0cmVhbXMsIGFycmF5ICZleGNlcHRfc3RyZWFtcywgaW50IHR2X3NlY1ssIGludCB0dl91c2VjXSkiLAogICAgICAgICJSdW5zIHRoZSBzZWxlY3QoKSBzeXN0ZW0gY2FsbCBvbiB0aGUgc2V0cyBvZiBzdHJlYW1zIHdpdGggYSB0aW1lb3V0IHNwZWNpZmllZCBieSB0dl9zZWMgYW5kIHR2X3VzZWMiCiAgICBdLAogICAgInN0cmVhbV9zZXRfYmxvY2tpbmciOiBbCiAgICAgICAgImJvb2wgc3RyZWFtX3NldF9ibG9ja2luZyhyZXNvdXJjZSBzb2NrZXQsIGludCBtb2RlKSIsCiAgICAgICAgIlNldCBibG9ja2luZy9ub24tYmxvY2tpbmcgbW9kZSBvbiBhIHNvY2tldCBvciBzdHJlYW0iCiAgICBdLAogICAgInN0cmVhbV9zZXRfdGltZW91dCI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fc2V0X3RpbWVvdXQocmVzb3VyY2Ugc3RyZWFtLCBpbnQgc2Vjb25kcyBbLCBpbnQgbWljcm9zZWNvbmRzXSkiLAogICAgICAgICJTZXQgdGltZW91dCBvbiBzdHJlYW0gcmVhZCB0byBzZWNvbmRzICsgbWljcm9zZW9uZHMiCiAgICBdLAogICAgInN0cmVhbV9zZXRfd3JpdGVfYnVmZmVyIjogWwogICAgICAgICJpbnQgc3RyZWFtX3NldF93cml0ZV9idWZmZXIocmVzb3VyY2UgZnAsIGludCBidWZmZXIpIiwKICAgICAgICAiU2V0IGZpbGUgd3JpdGUgYnVmZmVyIgogICAgXSwKICAgICJzdHJlYW1fc29ja2V0X2FjY2VwdCI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX3NvY2tldF9hY2NlcHQocmVzb3VyY2Ugc2VydmVyc3RyZWFtLCBbIGRvdWJsZSB0aW1lb3V0IFssIHN0cmluZyAmcGVlcm5hbWUgXV0pIiwKICAgICAgICAiQWNjZXB0IGEgY2xpZW50IGNvbm5lY3Rpb24gZnJvbSBhIHNlcnZlciBzb2NrZXQiCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfY2xpZW50IjogWwogICAgICAgICJyZXNvdXJjZSBzdHJlYW1fc29ja2V0X2NsaWVudChzdHJpbmcgcmVtb3RlYWRkcmVzcyBbLCBsb25nICZlcnJjb2RlIFssIHN0cmluZyAmZXJyc3RyaW5nIFssIGRvdWJsZSB0aW1lb3V0IFssIGxvbmcgZmxhZ3MgWywgcmVzb3VyY2UgY29udGV4dF1dXV1dKSIsCiAgICAgICAgIk9wZW4gYSBjbGllbnQgY29ubmVjdGlvbiB0byBhIHJlbW90ZSBhZGRyZXNzIgogICAgXSwKICAgICJzdHJlYW1fc29ja2V0X2VuYWJsZV9jcnlwdG8iOiBbCiAgICAgICAgImludCBzdHJlYW1fc29ja2V0X2VuYWJsZV9jcnlwdG8ocmVzb3VyY2Ugc3RyZWFtLCBib29sIGVuYWJsZSBbLCBpbnQgY3J5cHRva2luZCBbLCByZXNvdXJjZSBzZXNzaW9uc3RyZWFtXV0pIiwKICAgICAgICAiRW5hYmxlIG9yIGRpc2FibGUgYSBzcGVjaWZpYyBraW5kIG9mIGNyeXB0byBvbiB0aGUgc3RyZWFtIgogICAgXSwKICAgICJzdHJlYW1fc29ja2V0X2dldF9uYW1lIjogWwogICAgICAgICJzdHJpbmcgc3RyZWFtX3NvY2tldF9nZXRfbmFtZShyZXNvdXJjZSBzdHJlYW0sIGJvb2wgd2FudF9wZWVyKSIsCiAgICAgICAgIlJldHVybnMgZWl0aGVyIHRoZSBsb2NhbGx5IGJvdW5kIG9yIHJlbW90ZSBuYW1lIGZvciBhIHNvY2tldCBzdHJlYW0iCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfcGFpciI6IFsKICAgICAgICAiYXJyYXkgc3RyZWFtX3NvY2tldF9wYWlyKGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpIiwKICAgICAgICAiQ3JlYXRlcyBhIHBhaXIgb2YgY29ubmVjdGVkLCBpbmRpc3Rpbmd1aXNoYWJsZSBzb2NrZXQgc3RyZWFtcyIKICAgIF0sCiAgICAic3RyZWFtX3NvY2tldF9yZWN2ZnJvbSI6IFsKICAgICAgICAic3RyaW5nIHN0cmVhbV9zb2NrZXRfcmVjdmZyb20ocmVzb3VyY2Ugc3RyZWFtLCBsb25nIGFtb3VudCBbLCBsb25nIGZsYWdzIFssIHN0cmluZyAmcmVtb3RlX2FkZHJdXSkiLAogICAgICAgICJSZWNlaXZlcyBkYXRhIGZyb20gYSBzb2NrZXQgc3RyZWFtIgogICAgXSwKICAgICJzdHJlYW1fc29ja2V0X3NlbmR0byI6IFsKICAgICAgICAibG9uZyBzdHJlYW1fc29ja2V0X3NlbmR0byhyZXNvdWNlIHN0cmVhbSwgc3RyaW5nIGRhdGEgWywgbG9uZyBmbGFncyBbLCBzdHJpbmcgdGFyZ2V0X2FkZHJdXSkiLAogICAgICAgICJTZW5kIGRhdGEgdG8gYSBzb2NrZXQgc3RyZWFtLiAgSWYgdGFyZ2V0X2FkZHIgaXMgc3BlY2lmaWVkIGl0IG11c3QgYmUgaW4gZG90dGVkIHF1YWQgKG9yIFtpcHY2XSkgZm9ybWF0IgogICAgXSwKICAgICJzdHJlYW1fc29ja2V0X3NlcnZlciI6IFsKICAgICAgICAicmVzb3VyY2Ugc3RyZWFtX3NvY2tldF9zZXJ2ZXIoc3RyaW5nIGxvY2FsYWRkcmVzcyBbLCBsb25nICZlcnJjb2RlIFssIHN0cmluZyAmZXJyc3RyaW5nIFssIGxvbmcgZmxhZ3MgWywgcmVzb3VyY2UgY29udGV4dF1dXV0pIiwKICAgICAgICAiQ3JlYXRlIGEgc2VydmVyIHNvY2tldCBib3VuZCB0byBsb2NhbGFkZHJlc3MiCiAgICBdLAogICAgInN0cmVhbV9zb2NrZXRfc2h1dGRvd24iOiBbCiAgICAgICAgImludCBzdHJlYW1fc29ja2V0X3NodXRkb3duKHJlc291cmNlIHN0cmVhbSwgaW50IGhvdykiLAogICAgICAgICJjYXVzZXMgYWxsIG9yIHBhcnQgb2YgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uIG9uIHRoZSBzb2NrZXQgYXNzb2NpYXRlZCAgd2l0aCBzdHJlYW0gdG8gYmUgc2h1dCBkb3duLiAgSWYgaG93IGlzIFNIVVRfUkQsICBmdXJ0aGVyIHJlY2VwdGlvbnMgd2lsbCAgYmUgZGlzYWxsb3dlZC4gSWYgaG93IGlzIFNIVVRfV1IsIGZ1cnRoZXIgdHJhbnNtaXNzaW9ucyB3aWxsIGJlIGRpc2FsbG93ZWQuICBJZiBob3cgaXMgU0hVVF9SRFdSLCAgZnVydGhlciAgcmVjZXB0aW9ucyBhbmQgdHJhbnNtaXNzaW9ucyB3aWxsIGJlICBkaXNhbGxvd2VkLiIKICAgIF0sCiAgICAic3RyZWFtX3N1cHBvcnRzX2xvY2siOiBbCiAgICAgICAgImJvb2wgc3RyZWFtX3N1cHBvcnRzX2xvY2socmVzb3VyY2Ugc3RyZWFtKSIsCiAgICAgICAgIlRlbGxzIHdoZXRoZXIgdGhlIHN0cmVhbSBzdXBwb3J0cyBsb2NraW5nIHRocm91Z2ggZmxvY2soKS4iCiAgICBdLAogICAgInN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyIjogWwogICAgICAgICJib29sIHN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyKHN0cmluZyBwcm90b2NvbCwgc3RyaW5nIGNsYXNzbmFtZVssIGludGVnZXIgZmxhZ3NdKSIsCiAgICAgICAgIlJlZ2lzdGVycyBhIGN1c3RvbSBVUkwgcHJvdG9jb2wgaGFuZGxlciBjbGFzcyIKICAgIF0sCiAgICAic3RyZWFtX3dyYXBwZXJfcmVzdG9yZSI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fd3JhcHBlcl9yZXN0b3JlKHN0cmluZyBwcm90b2NvbCkiLAogICAgICAgICJSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90b2NvbCBoYW5kbGVyLCBvdmVycmlkaW5nIGlmIG5lY2Vzc2FyeSIKICAgIF0sCiAgICAic3RyZWFtX3dyYXBwZXJfdW5yZWdpc3RlciI6IFsKICAgICAgICAiYm9vbCBzdHJlYW1fd3JhcHBlcl91bnJlZ2lzdGVyKHN0cmluZyBwcm90b2NvbCkiLAogICAgICAgICJVbnJlZ2lzdGVyIGEgd3JhcHBlciBmb3IgdGhlIGxpZmUgb2YgdGhlIGN1cnJlbnQgcmVxdWVzdC4iCiAgICBdLAogICAgInN0cmZ0aW1lIjogWwogICAgICAgICJzdHJpbmcgc3RyZnRpbWUoc3RyaW5nIGZvcm1hdCBbLCBpbnQgdGltZXN0YW1wXSkiLAogICAgICAgICJGb3JtYXQgYSBsb2NhbCB0aW1lL2RhdGUgYWNjb3JkaW5nIHRvIGxvY2FsZSBzZXR0aW5ncyIKICAgIF0sCiAgICAic3RyaXBfdGFncyI6IFsKICAgICAgICAic3RyaW5nIHN0cmlwX3RhZ3Moc3RyaW5nIHN0ciBbLCBzdHJpbmcgYWxsb3dhYmxlX3RhZ3NdKSIsCiAgICAgICAgIlN0cmlwcyBIVE1MIGFuZCBQSFAgdGFncyBmcm9tIGEgc3RyaW5nIgogICAgXSwKICAgICJzdHJpcGNzbGFzaGVzIjogWwogICAgICAgICJzdHJpbmcgc3RyaXBjc2xhc2hlcyhzdHJpbmcgc3RyKSIsCiAgICAgICAgIlN0cmlwcyBiYWNrc2xhc2hlcyBmcm9tIGEgc3RyaW5nLiBVc2VzIEMtc3R5bGUgY29udmVudGlvbnMiCiAgICBdLAogICAgInN0cmlwb3MiOiBbCiAgICAgICAgImludCBzdHJpcG9zKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIG5lZWRsZSBbLCBpbnQgb2Zmc2V0XSkiLAogICAgICAgICJGaW5kcyBwb3NpdGlvbiBvZiBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlIgogICAgXSwKICAgICJzdHJpcHNsYXNoZXMiOiBbCiAgICAgICAgInN0cmluZyBzdHJpcHNsYXNoZXMoc3RyaW5nIHN0cikiLAogICAgICAgICJTdHJpcHMgYmFja3NsYXNoZXMgZnJvbSBhIHN0cmluZyIKICAgIF0sCiAgICAic3RyaXN0ciI6IFsKICAgICAgICAic3RyaW5nIHN0cmlzdHIoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlWywgYm9vbCBwYXJ0XSkiLAogICAgICAgICJGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlIgogICAgXSwKICAgICJzdHJsZW4iOiBbCiAgICAgICAgImludCBzdHJsZW4oc3RyaW5nIHN0cikiLAogICAgICAgICJHZXQgc3RyaW5nIGxlbmd0aCIKICAgIF0sCiAgICAic3RybmF0Y2FzZWNtcCI6IFsKICAgICAgICAiaW50IHN0cm5hdGNhc2VjbXAoc3RyaW5nIHMxLCBzdHJpbmcgczIpIiwKICAgICAgICAiUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIGNvbXBhcmlzb24gdXNpbmcgJ25hdHVyYWwnIGFsZ29yaXRobSIKICAgIF0sCiAgICAic3RybmF0Y21wIjogWwogICAgICAgICJpbnQgc3RybmF0Y21wKHN0cmluZyBzMSwgc3RyaW5nIHMyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHJlc3VsdCBvZiBzdHJpbmcgY29tcGFyaXNvbiB1c2luZyAnbmF0dXJhbCcgYWxnb3JpdGhtIgogICAgXSwKICAgICJzdHJuY2FzZWNtcCI6IFsKICAgICAgICAiaW50IHN0cm5jYXNlY21wKHN0cmluZyBzdHIxLCBzdHJpbmcgc3RyMiwgaW50IGxlbikiLAogICAgICAgICJCaW5hcnkgc2FmZSBzdHJpbmcgY29tcGFyaXNvbiIKICAgIF0sCiAgICAic3RybmNtcCI6IFsKICAgICAgICAiaW50IHN0cm5jbXAoc3RyaW5nIHN0cjEsIHN0cmluZyBzdHIyLCBpbnQgbGVuKSIsCiAgICAgICAgIkJpbmFyeSBzYWZlIHN0cmluZyBjb21wYXJpc29uIgogICAgXSwKICAgICJzdHJwYnJrIjogWwogICAgICAgICJhcnJheSBzdHJwYnJrKHN0cmluZyBoYXlzdGFjaywgc3RyaW5nIGNoYXJfbGlzdCkiLAogICAgICAgICJTZWFyY2ggYSBzdHJpbmcgZm9yIGFueSBvZiBhIHNldCBvZiBjaGFyYWN0ZXJzIgogICAgXSwKICAgICJzdHJwb3MiOiBbCiAgICAgICAgImludCBzdHJwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdHJpbmcgd2l0aGluIGFub3RoZXIiCiAgICBdLAogICAgInN0cnB0aW1lIjogWwogICAgICAgICJzdHJpbmcgc3RycHRpbWUoc3RyaW5nIHRpbWVzdGFtcCwgc3RyaW5nIGZvcm1hdCkiLAogICAgICAgICJQYXJzZSBhIHRpbWUvZGF0ZSBnZW5lcmF0ZWQgd2l0aCBzdHJmdGltZSgpIgogICAgXSwKICAgICJzdHJyY2hyIjogWwogICAgICAgICJzdHJpbmcgc3RycmNocihzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUpIiwKICAgICAgICAiRmluZHMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNoYXJhY3RlciBpbiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciIKICAgIF0sCiAgICAic3RycmV2IjogWwogICAgICAgICJzdHJpbmcgc3RycmV2KHN0cmluZyBzdHIpIiwKICAgICAgICAiUmV2ZXJzZSBhIHN0cmluZyIKICAgIF0sCiAgICAic3Rycmlwb3MiOiBbCiAgICAgICAgImludCBzdHJyaXBvcyhzdHJpbmcgaGF5c3RhY2ssIHN0cmluZyBuZWVkbGUgWywgaW50IG9mZnNldF0pIiwKICAgICAgICAiRmluZHMgcG9zaXRpb24gb2YgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIHN0cmluZyIKICAgIF0sCiAgICAic3RycnBvcyI6IFsKICAgICAgICAiaW50IHN0cnJwb3Moc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkZpbmRzIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciBzdHJpbmciCiAgICBdLAogICAgInN0cnNwbiI6IFsKICAgICAgICAiaW50IHN0cnNwbihzdHJpbmcgc3RyLCBzdHJpbmcgbWFzayBbLCBzdGFydCBbLCBsZW5dXSkiLAogICAgICAgICJGaW5kcyBsZW5ndGggb2YgaW5pdGlhbCBzZWdtZW50IGNvbnNpc3RpbmcgZW50aXJlbHkgb2YgY2hhcmFjdGVycyBmb3VuZCBpbiBtYXNrLiBJZiBzdGFydCBvci9hbmQgbGVuZ3RoIGlzIHByb3ZpZGVkIHdvcmtzIGxpa2Ugc3Ryc3BuKHN1YnN0cigkcywkc3RhcnQsJGxlbiksJGdvb2RfY2hhcnMpIgogICAgXSwKICAgICJzdHJzdHIiOiBbCiAgICAgICAgInN0cmluZyBzdHJzdHIoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlWywgYm9vbCBwYXJ0XSkiLAogICAgICAgICJGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyIgogICAgXSwKICAgICJzdHJ0b2siOiBbCiAgICAgICAgInN0cmluZyBzdHJ0b2soW3N0cmluZyBzdHIsXSBzdHJpbmcgdG9rZW4pIiwKICAgICAgICAiVG9rZW5pemUgYSBzdHJpbmciCiAgICBdLAogICAgInN0cnRvbG93ZXIiOiBbCiAgICAgICAgInN0cmluZyBzdHJ0b2xvd2VyKHN0cmluZyBzdHIpIiwKICAgICAgICAiTWFrZXMgYSBzdHJpbmcgbG93ZXJjYXNlIgogICAgXSwKICAgICJzdHJ0b3RpbWUiOiBbCiAgICAgICAgImludCBzdHJ0b3RpbWUoc3RyaW5nIHRpbWUgWywgaW50IG5vdyBdKSIsCiAgICAgICAgIkNvbnZlcnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGRhdGUgYW5kIHRpbWUgdG8gYSB0aW1lc3RhbXAiCiAgICBdLAogICAgInN0cnRvdXBwZXIiOiBbCiAgICAgICAgInN0cmluZyBzdHJ0b3VwcGVyKHN0cmluZyBzdHIpIiwKICAgICAgICAiTWFrZXMgYSBzdHJpbmcgdXBwZXJjYXNlIgogICAgXSwKICAgICJzdHJ0ciI6IFsKICAgICAgICAic3RyaW5nIHN0cnRyKHN0cmluZyBzdHIsIHN0cmluZyBmcm9tWywgc3RyaW5nIHRvXSkiLAogICAgICAgICJUcmFuc2xhdGVzIGNoYXJhY3RlcnMgaW4gc3RyIHVzaW5nIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlcyIKICAgIF0sCiAgICAic3RydmFsIjogWwogICAgICAgICJzdHJpbmcgc3RydmFsKG1peGVkIHZhcikiLAogICAgICAgICJHZXQgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHZhcmlhYmxlIgogICAgXSwKICAgICJzdWJzdHIiOiBbCiAgICAgICAgInN0cmluZyBzdWJzdHIoc3RyaW5nIHN0ciwgaW50IHN0YXJ0IFssIGludCBsZW5ndGhdKSIsCiAgICAgICAgIlJldHVybnMgcGFydCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAic3Vic3RyX2NvbXBhcmUiOiBbCiAgICAgICAgImludCBzdWJzdHJfY29tcGFyZShzdHJpbmcgbWFpbl9zdHIsIHN0cmluZyBzdHIsIGludCBvZmZzZXQgWywgaW50IGxlbmd0aCBbLCBib29sIGNhc2Vfc2Vuc2l0aXZpdHldXSkiLAogICAgICAgICJCaW5hcnkgc2FmZSBvcHRpb25hbGx5IGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBvZiAyIHN0cmluZ3MgZnJvbSBhbiBvZmZzZXQsIHVwIHRvIGxlbmd0aCBjaGFyYWN0ZXJzIgogICAgXSwKICAgICJzdWJzdHJfY291bnQiOiBbCiAgICAgICAgImludCBzdWJzdHJfY291bnQoc3RyaW5nIGhheXN0YWNrLCBzdHJpbmcgbmVlZGxlIFssIGludCBvZmZzZXQgWywgaW50IGxlbmd0aF1dKSIsCiAgICAgICAgIlJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHN1YnN0cmluZyBvY2N1cnMgaW4gdGhlIHN0cmluZyIKICAgIF0sCiAgICAic3Vic3RyX3JlcGxhY2UiOiBbCiAgICAgICAgIm1peGVkIHN1YnN0cl9yZXBsYWNlKG1peGVkIHN0ciwgbWl4ZWQgcmVwbCwgbWl4ZWQgc3RhcnQgWywgbWl4ZWQgbGVuZ3RoXSkiLAogICAgICAgICJSZXBsYWNlcyBwYXJ0IG9mIGEgc3RyaW5nIHdpdGggYW5vdGhlciBzdHJpbmciCiAgICBdLAogICAgInN5YmFzZV9hZmZlY3RlZF9yb3dzIjogWwogICAgICAgICJpbnQgc3liYXNlX2FmZmVjdGVkX3Jvd3MoW3Jlc291cmNlIGxpbmtfaWRdKSIsCiAgICAgICAgIkdldCBudW1iZXIgb2YgYWZmZWN0ZWQgcm93cyBpbiBsYXN0IHF1ZXJ5IgogICAgXSwKICAgICJzeWJhc2VfY2xvc2UiOiBbCiAgICAgICAgImJvb2wgc3liYXNlX2Nsb3NlKFtyZXNvdXJjZSBsaW5rX2lkXSkiLAogICAgICAgICJDbG9zZSBTeWJhc2UgY29ubmVjdGlvbiIKICAgIF0sCiAgICAic3liYXNlX2Nvbm5lY3QiOiBbCiAgICAgICAgImludCBzeWJhc2VfY29ubmVjdChbc3RyaW5nIGhvc3QgWywgc3RyaW5nIHVzZXIgWywgc3RyaW5nIHBhc3N3b3JkIFssIHN0cmluZyBjaGFyc2V0IFssIHN0cmluZyBhcHBuYW1lIFssIGJvb2wgbmV3XV1dXV1dKSIsCiAgICAgICAgIk9wZW4gU3liYXNlIHNlcnZlciBjb25uZWN0aW9uIgogICAgXSwKICAgICJzeWJhc2VfZGF0YV9zZWVrIjogWwogICAgICAgICJib29sIHN5YmFzZV9kYXRhX3NlZWsocmVzb3VyY2UgcmVzdWx0LCBpbnQgb2Zmc2V0KSIsCiAgICAgICAgIk1vdmUgaW50ZXJuYWwgcm93IHBvaW50ZXIiCiAgICBdLAogICAgInN5YmFzZV9kZWFkbG9ja19yZXRyeV9jb3VudCI6IFsKICAgICAgICAidm9pZCBzeWJhc2VfZGVhZGxvY2tfcmV0cnlfY291bnQoaW50IHJldHJ5X2NvdW50KSIsCiAgICAgICAgIlNldHMgZGVhZGxvY2sgcmV0cnkgY291bnQiCiAgICBdLAogICAgInN5YmFzZV9mZXRjaF9hcnJheSI6IFsKICAgICAgICAiYXJyYXkgc3liYXNlX2ZldGNoX2FycmF5KHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGZXRjaCByb3cgYXMgYXJyYXkiCiAgICBdLAogICAgInN5YmFzZV9mZXRjaF9hc3NvYyI6IFsKICAgICAgICAiYXJyYXkgc3liYXNlX2ZldGNoX2Fzc29jKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJGZXRjaCByb3cgYXMgYXJyYXkgd2l0aG91dCBudW1iZXJpYyBpbmRpY2VzIgogICAgXSwKICAgICJzeWJhc2VfZmV0Y2hfZmllbGQiOiBbCiAgICAgICAgIm9iamVjdCBzeWJhc2VfZmV0Y2hfZmllbGQocmVzb3VyY2UgcmVzdWx0IFssIGludCBvZmZzZXRdKSIsCiAgICAgICAgIkdldCBmaWVsZCBpbmZvcm1hdGlvbiIKICAgIF0sCiAgICAic3liYXNlX2ZldGNoX29iamVjdCI6IFsKICAgICAgICAib2JqZWN0IHN5YmFzZV9mZXRjaF9vYmplY3QocmVzb3VyY2UgcmVzdWx0IFssIG1peGVkIG9iamVjdF0pIiwKICAgICAgICAiRmV0Y2ggcm93IGFzIG9iamVjdCIKICAgIF0sCiAgICAic3liYXNlX2ZldGNoX3JvdyI6IFsKICAgICAgICAiYXJyYXkgc3liYXNlX2ZldGNoX3JvdyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiR2V0IHJvdyBhcyBlbnVtZXJhdGVkIGFycmF5IgogICAgXSwKICAgICJzeWJhc2VfZmllbGRfc2VlayI6IFsKICAgICAgICAiYm9vbCBzeWJhc2VfZmllbGRfc2VlayhyZXNvdXJjZSByZXN1bHQsIGludCBvZmZzZXQpIiwKICAgICAgICAiU2V0IGZpZWxkIG9mZnNldCIKICAgIF0sCiAgICAic3liYXNlX2ZyZWVfcmVzdWx0IjogWwogICAgICAgICJib29sIHN5YmFzZV9mcmVlX3Jlc3VsdChyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiRnJlZSByZXN1bHQgbWVtb3J5IgogICAgXSwKICAgICJzeWJhc2VfZ2V0X2xhc3RfbWVzc2FnZSI6IFsKICAgICAgICAic3RyaW5nIHN5YmFzZV9nZXRfbGFzdF9tZXNzYWdlKHZvaWQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbGFzdCBtZXNzYWdlIGZyb20gc2VydmVyIChvdmVyIG1pbl9tZXNzYWdlX3NldmVyaXR5KSIKICAgIF0sCiAgICAic3liYXNlX21pbl9jbGllbnRfc2V2ZXJpdHkiOiBbCiAgICAgICAgInZvaWQgc3liYXNlX21pbl9jbGllbnRfc2V2ZXJpdHkoaW50IHNldmVyaXR5KSIsCiAgICAgICAgIlNldHMgbWluaW11bSBjbGllbnQgc2V2ZXJpdHkiCiAgICBdLAogICAgInN5YmFzZV9taW5fc2VydmVyX3NldmVyaXR5IjogWwogICAgICAgICJ2b2lkIHN5YmFzZV9taW5fc2VydmVyX3NldmVyaXR5KGludCBzZXZlcml0eSkiLAogICAgICAgICJTZXRzIG1pbmltdW0gc2VydmVyIHNldmVyaXR5IgogICAgXSwKICAgICJzeWJhc2VfbnVtX2ZpZWxkcyI6IFsKICAgICAgICAiaW50IHN5YmFzZV9udW1fZmllbGRzKHJlc291cmNlIHJlc3VsdCkiLAogICAgICAgICJHZXQgbnVtYmVyIG9mIGZpZWxkcyBpbiByZXN1bHQiCiAgICBdLAogICAgInN5YmFzZV9udW1fcm93cyI6IFsKICAgICAgICAiaW50IHN5YmFzZV9udW1fcm93cyhyZXNvdXJjZSByZXN1bHQpIiwKICAgICAgICAiR2V0IG51bWJlciBvZiByb3dzIGluIHJlc3VsdCIKICAgIF0sCiAgICAic3liYXNlX3Bjb25uZWN0IjogWwogICAgICAgICJpbnQgc3liYXNlX3Bjb25uZWN0KFtzdHJpbmcgaG9zdCBbLCBzdHJpbmcgdXNlciBbLCBzdHJpbmcgcGFzc3dvcmQgWywgc3RyaW5nIGNoYXJzZXQgWywgc3RyaW5nIGFwcG5hbWVdXV1dXSkiLAogICAgICAgICJPcGVuIHBlcnNpc3RlbnQgU3liYXNlIGNvbm5lY3Rpb24iCiAgICBdLAogICAgInN5YmFzZV9xdWVyeSI6IFsKICAgICAgICAiaW50IHN5YmFzZV9xdWVyeShzdHJpbmcgcXVlcnkgWywgcmVzb3VyY2UgbGlua19pZF0pIiwKICAgICAgICAiU2VuZCBTeWJhc2UgcXVlcnkiCiAgICBdLAogICAgInN5YmFzZV9yZXN1bHQiOiBbCiAgICAgICAgInN0cmluZyBzeWJhc2VfcmVzdWx0KHJlc291cmNlIHJlc3VsdCwgaW50IHJvdywgbWl4ZWQgZmllbGQpIiwKICAgICAgICAiR2V0IHJlc3VsdCBkYXRhIgogICAgXSwKICAgICJzeWJhc2Vfc2VsZWN0X2RiIjogWwogICAgICAgICJib29sIHN5YmFzZV9zZWxlY3RfZGIoc3RyaW5nIGRhdGFiYXNlIFssIHJlc291cmNlIGxpbmtfaWRdKSIsCiAgICAgICAgIlNlbGVjdCBTeWJhc2UgZGF0YWJhc2UiCiAgICBdLAogICAgInN5YmFzZV9zZXRfbWVzc2FnZV9oYW5kbGVyIjogWwogICAgICAgICJib29sIHN5YmFzZV9zZXRfbWVzc2FnZV9oYW5kbGVyKG1peGVkIGVycm9yX2Z1bmMgWywgcmVzb3VyY2UgY29ubmVjdGlvbl0pIiwKICAgICAgICAiU2V0IHRoZSBlcnJvciBoYW5kbGVyLCB0byBiZSBjYWxsZWQgd2hlbiBhIHNlcnZlciBtZXNzYWdlIGlzIHJhaXNlZC4gICAgIElmIGVycm9yX2Z1bmMgaXMgTlVMTCB0aGUgaGFuZGxlciB3aWxsIGJlIGRlbGV0ZWQiCiAgICBdLAogICAgInN5YmFzZV91bmJ1ZmZlcmVkX3F1ZXJ5IjogWwogICAgICAgICJpbnQgc3liYXNlX3VuYnVmZmVyZWRfcXVlcnkoc3RyaW5nIHF1ZXJ5IFssIHJlc291cmNlIGxpbmtfaWRdKSIsCiAgICAgICAgIlNlbmQgU3liYXNlIHF1ZXJ5IgogICAgXSwKICAgICJzeW1saW5rIjogWwogICAgICAgICJpbnQgc3ltbGluayhzdHJpbmcgdGFyZ2V0LCBzdHJpbmcgbGluaykiLAogICAgICAgICJDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIgogICAgXSwKICAgICJzeXNfZ2V0X3RlbXBfZGlyIjogWwogICAgICAgICJzdHJpbmcgc3lzX2dldF90ZW1wX2RpcigpIiwKICAgICAgICAiUmV0dXJucyBkaXJlY3RvcnkgcGF0aCB1c2VkIGZvciB0ZW1wb3JhcnkgZmlsZXMiCiAgICBdLAogICAgInN5c19nZXRsb2FkYXZnIjogWwogICAgICAgICJhcnJheSBzeXNfZ2V0bG9hZGF2ZygpIiwKICAgICAgICAiIgogICAgXSwKICAgICJzeXNsb2ciOiBbCiAgICAgICAgImJvb2wgc3lzbG9nKGludCBwcmlvcml0eSwgc3RyaW5nIG1lc3NhZ2UpIiwKICAgICAgICAiR2VuZXJhdGUgYSBzeXN0ZW0gbG9nIG1lc3NhZ2UiCiAgICBdLAogICAgInN5c3RlbSI6IFsKICAgICAgICAiaW50IHN5c3RlbShzdHJpbmcgY29tbWFuZCBbLCBpbnQgJnJldHVybl92YWx1ZV0pIiwKICAgICAgICAiRXhlY3V0ZSBhbiBleHRlcm5hbCBwcm9ncmFtIGFuZCBkaXNwbGF5IG91dHB1dCIKICAgIF0sCiAgICAidGFuIjogWwogICAgICAgICJmbG9hdCB0YW4oZmxvYXQgbnVtYmVyKSIsCiAgICAgICAgIlJldHVybnMgdGhlIHRhbmdlbnQgb2YgdGhlIG51bWJlciBpbiByYWRpYW5zIgogICAgXSwKICAgICJ0YW5oIjogWwogICAgICAgICJmbG9hdCB0YW5oKGZsb2F0IG51bWJlcikiLAogICAgICAgICJSZXR1cm5zIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgdGhlIG51bWJlciwgZGVmaW5lZCBhcyBzaW5oKG51bWJlcikvY29zaChudW1iZXIpIgogICAgXSwKICAgICJ0ZW1wbmFtIjogWwogICAgICAgICJzdHJpbmcgdGVtcG5hbShzdHJpbmcgZGlyLCBzdHJpbmcgcHJlZml4KSIsCiAgICAgICAgIkNyZWF0ZSBhIHVuaXF1ZSBmaWxlbmFtZSBpbiBhIGRpcmVjdG9yeSIKICAgIF0sCiAgICAidGV4dGRvbWFpbiI6IFsKICAgICAgICAic3RyaW5nIHRleHRkb21haW4oc3RyaW5nIGRvbWFpbikiLAogICAgICAgICJTZXQgdGhlIHRleHRkb21haW4gdG8gXCJkb21haW5cIi4gUmV0dXJucyB0aGUgY3VycmVudCBkb21haW4iCiAgICBdLAogICAgInRpZHlfYWNjZXNzX2NvdW50IjogWwogICAgICAgICJpbnQgdGlkeV9hY2Nlc3NfY291bnQoKSIsCiAgICAgICAgIlJldHVybnMgdGhlIE51bWJlciBvZiBUaWR5IGFjY2Vzc2liaWxpdHkgd2FybmluZ3MgZW5jb3VudGVyZWQgZm9yIHNwZWNpZmllZCBkb2N1bWVudC4iCiAgICBdLAogICAgInRpZHlfY2xlYW5fcmVwYWlyIjogWwogICAgICAgICJib29sZWFuIHRpZHlfY2xlYW5fcmVwYWlyKCkiLAogICAgICAgICJFeGVjdXRlIGNvbmZpZ3VyZWQgY2xlYW51cCBhbmQgcmVwYWlyIG9wZXJhdGlvbnMgb24gcGFyc2VkIG1hcmt1cCIKICAgIF0sCiAgICAidGlkeV9jb25maWdfY291bnQiOiBbCiAgICAgICAgImludCB0aWR5X2NvbmZpZ19jb3VudCgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgTnVtYmVyIG9mIFRpZHkgY29uZmlndXJhdGlvbiBlcnJvcnMgZW5jb3VudGVyZWQgZm9yIHNwZWNpZmllZCBkb2N1bWVudC4iCiAgICBdLAogICAgInRpZHlfZGlhZ25vc2UiOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9kaWFnbm9zZSgpIiwKICAgICAgICAiUnVuIGNvbmZpZ3VyZWQgZGlhZ25vc3RpY3Mgb24gcGFyc2VkIGFuZCByZXBhaXJlZCBtYXJrdXAuIgogICAgXSwKICAgICJ0aWR5X2Vycm9yX2NvdW50IjogWwogICAgICAgICJpbnQgdGlkeV9lcnJvcl9jb3VudCgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgTnVtYmVyIG9mIFRpZHkgZXJyb3JzIGVuY291bnRlcmVkIGZvciBzcGVjaWZpZWQgZG9jdW1lbnQuIgogICAgXSwKICAgICJ0aWR5X2dldF9ib2R5IjogWwogICAgICAgICJUaWR5Tm9kZSB0aWR5X2dldF9ib2R5KHJlc291cmNlIHRpZHkpIiwKICAgICAgICAiUmV0dXJucyBhIFRpZHlOb2RlIE9iamVjdCBzdGFydGluZyBmcm9tIHRoZSA8Qk9EWT4gdGFnIG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUiCiAgICBdLAogICAgInRpZHlfZ2V0X2NvbmZpZyI6IFsKICAgICAgICAiYXJyYXkgdGlkeV9nZXRfY29uZmlnKCkiLAogICAgICAgICJHZXQgY3VycmVudCBUaWR5IGNvbmZpZ3VhcmlvbiIKICAgIF0sCiAgICAidGlkeV9nZXRfZXJyb3JfYnVmZmVyIjogWwogICAgICAgICJzdHJpbmcgdGlkeV9nZXRfZXJyb3JfYnVmZmVyKFtib29sZWFuIGRldGFpbGVkXSkiLAogICAgICAgICJSZXR1cm4gd2FybmluZ3MgYW5kIGVycm9ycyB3aGljaCBvY2N1cmVkIHBhcnNpbmcgdGhlIHNwZWNpZmllZCBkb2N1bWVudCIKICAgIF0sCiAgICAidGlkeV9nZXRfaGVhZCI6IFsKICAgICAgICAiVGlkeU5vZGUgdGlkeV9nZXRfaGVhZCgpIiwKICAgICAgICAiUmV0dXJucyBhIFRpZHlOb2RlIE9iamVjdCBzdGFydGluZyBmcm9tIHRoZSA8SEVBRD4gdGFnIG9mIHRoZSB0aWR5IHBhcnNlIHRyZWUiCiAgICBdLAogICAgInRpZHlfZ2V0X2h0bWwiOiBbCiAgICAgICAgIlRpZHlOb2RlIHRpZHlfZ2V0X2h0bWwoKSIsCiAgICAgICAgIlJldHVybnMgYSBUaWR5Tm9kZSBPYmplY3Qgc3RhcnRpbmcgZnJvbSB0aGUgPEhUTUw+IHRhZyBvZiB0aGUgdGlkeSBwYXJzZSB0cmVlIgogICAgXSwKICAgICJ0aWR5X2dldF9odG1sX3ZlciI6IFsKICAgICAgICAiaW50IHRpZHlfZ2V0X2h0bWxfdmVyKCkiLAogICAgICAgICJHZXQgdGhlIERldGVjdGVkIEhUTUwgdmVyc2lvbiBmb3IgdGhlIHNwZWNpZmllZCBkb2N1bWVudC4iCiAgICBdLAogICAgInRpZHlfZ2V0X29wdF9kb2MiOiBbCiAgICAgICAgInN0cmluZyB0aWR5X2dldF9vcHRfZG9jKHRpZHkgcmVzb3VyY2UsIHN0cmluZyBvcHRuYW1lKSIsCiAgICAgICAgIlJldHVybnMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBnaXZlbiBvcHRpb24gbmFtZSIKICAgIF0sCiAgICAidGlkeV9nZXRfb3V0cHV0IjogWwogICAgICAgICJzdHJpbmcgdGlkeV9nZXRfb3V0cHV0KCkiLAogICAgICAgICJSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgdGlkeSBtYXJrdXAiCiAgICBdLAogICAgInRpZHlfZ2V0X3JlbGVhc2UiOiBbCiAgICAgICAgInN0cmluZyB0aWR5X2dldF9yZWxlYXNlKCkiLAogICAgICAgICJHZXQgcmVsZWFzZSBkYXRlICh2ZXJzaW9uKSBmb3IgVGlkeSBsaWJyYXJ5IgogICAgXSwKICAgICJ0aWR5X2dldF9yb290IjogWwogICAgICAgICJUaWR5Tm9kZSB0aWR5X2dldF9yb290KCkiLAogICAgICAgICJSZXR1cm5zIGEgVGlkeU5vZGUgT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcm9vdCBvZiB0aGUgdGlkeSBwYXJzZSB0cmVlIgogICAgXSwKICAgICJ0aWR5X2dldF9zdGF0dXMiOiBbCiAgICAgICAgImludCB0aWR5X2dldF9zdGF0dXMoKSIsCiAgICAgICAgIkdldCBzdGF0dXMgb2Ygc3BlY2ZpZWQgZG9jdW1lbnQuIgogICAgXSwKICAgICJ0aWR5X2dldG9wdCI6IFsKICAgICAgICAibWl4ZWQgdGlkeV9nZXRvcHQoc3RyaW5nIG9wdGlvbikiLAogICAgICAgICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciB0aGUgdGlkeSBkb2N1bWVudC4iCiAgICBdLAogICAgInRpZHlfaXNfeGh0bWwiOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9pc194aHRtbCgpIiwKICAgICAgICAiSW5kaWNhdGVzIGlmIHRoZSBkb2N1bWVudCBpcyBhIFhIVE1MIGRvY3VtZW50LiIKICAgIF0sCiAgICAidGlkeV9pc194bWwiOiBbCiAgICAgICAgImJvb2xlYW4gdGlkeV9pc194bWwoKSIsCiAgICAgICAgIkluZGljYXRlcyBpZiB0aGUgZG9jdW1lbnQgaXMgYSBnZW5lcmljIChub24gSFRNTC9YSFRNTCkgWE1MIGRvY3VtZW50LiIKICAgIF0sCiAgICAidGlkeV9wYXJzZV9maWxlIjogWwogICAgICAgICJib29sZWFuIHRpZHlfcGFyc2VfZmlsZShzdHJpbmcgZmlsZSBbLCBtaXhlZCBjb25maWdfb3B0aW9ucyBbLCBzdHJpbmcgZW5jb2RpbmcgWywgYm9vbCB1c2VfaW5jbHVkZV9wYXRoXV1dKSIsCiAgICAgICAgIlBhcnNlIG1hcmt1cCBpbiBmaWxlIG9yIFVSSSIKICAgIF0sCiAgICAidGlkeV9wYXJzZV9zdHJpbmciOiBbCiAgICAgICAgImJvb2wgdGlkeV9wYXJzZV9zdHJpbmcoc3RyaW5nIGlucHV0IFssIG1peGVkIGNvbmZpZ19vcHRpb25zIFssIHN0cmluZyBlbmNvZGluZ11dKSIsCiAgICAgICAgIlBhcnNlIGEgZG9jdW1lbnQgc3RvcmVkIGluIGEgc3RyaW5nIgogICAgXSwKICAgICJ0aWR5X3JlcGFpcl9maWxlIjogWwogICAgICAgICJib29sZWFuIHRpZHlfcmVwYWlyX2ZpbGUoc3RyaW5nIGZpbGVuYW1lIFssIG1peGVkIGNvbmZpZ19maWxlIFssIHN0cmluZyBlbmNvZGluZyBbLCBib29sIHVzZV9pbmNsdWRlX3BhdGhdXV0pIiwKICAgICAgICAiUmVwYWlyIGEgZmlsZSB1c2luZyBhbiBvcHRpb25hbGx5IHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gZmlsZSIKICAgIF0sCiAgICAidGlkeV9yZXBhaXJfc3RyaW5nIjogWwogICAgICAgICJib29sZWFuIHRpZHlfcmVwYWlyX3N0cmluZyhzdHJpbmcgZGF0YSBbLCBtaXhlZCBjb25maWdfZmlsZSBbLCBzdHJpbmcgZW5jb2RpbmddXSkiLAogICAgICAgICJSZXBhaXIgYSBzdHJpbmcgdXNpbmcgYW4gb3B0aW9uYWxseSBwcm92aWRlZCBjb25maWd1cmF0aW9uIGZpbGUiCiAgICBdLAogICAgInRpZHlfd2FybmluZ19jb3VudCI6IFsKICAgICAgICAiaW50IHRpZHlfd2FybmluZ19jb3VudCgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgTnVtYmVyIG9mIFRpZHkgd2FybmluZ3MgZW5jb3VudGVyZWQgZm9yIHNwZWNpZmllZCBkb2N1bWVudC4iCiAgICBdLAogICAgInRpbWUiOiBbCiAgICAgICAgImludCB0aW1lKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIGN1cnJlbnQgVU5JWCB0aW1lc3RhbXAiCiAgICBdLAogICAgInRpbWVfbmFub3NsZWVwIjogWwogICAgICAgICJtaXhlZCB0aW1lX25hbm9zbGVlcChsb25nIHNlY29uZHMsIGxvbmcgbmFub3NlY29uZHMpIiwKICAgICAgICAiRGVsYXkgZm9yIGEgbnVtYmVyIG9mIHNlY29uZHMgYW5kIG5hbm8gc2Vjb25kcyIKICAgIF0sCiAgICAidGltZV9zbGVlcF91bnRpbCI6IFsKICAgICAgICAibWl4ZWQgdGltZV9zbGVlcF91bnRpbChmbG9hdCB0aW1lc3RhbXApIiwKICAgICAgICAiTWFrZSB0aGUgc2NyaXB0IHNsZWVwIHVudGlsIHRoZSBzcGVjaWZpZWQgdGltZSIKICAgIF0sCiAgICAidGltZXpvbmVfYWJicmV2aWF0aW9uc19saXN0IjogWwogICAgICAgICJhcnJheSB0aW1lem9uZV9hYmJyZXZpYXRpb25zX2xpc3QoKSIsCiAgICAgICAgIlJldHVybnMgYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyBkc3QsIG9mZnNldCBhbmQgdGhlIHRpbWV6b25lIG5hbWUiCiAgICBdLAogICAgInRpbWV6b25lX2lkZW50aWZpZXJzX2xpc3QiOiBbCiAgICAgICAgImFycmF5IHRpbWV6b25lX2lkZW50aWZpZXJzX2xpc3QoW2xvbmcgd2hhdFssIHN0cmluZyBjb3VudHJ5XV0pIiwKICAgICAgICAiUmV0dXJucyBudW1lcmljYWxseSBpbmRleCBhcnJheSB3aXRoIGFsbCB0aW1lem9uZSBpZGVudGlmaWVycy4iCiAgICBdLAogICAgInRpbWV6b25lX2xvY2F0aW9uX2dldCI6IFsKICAgICAgICAiYXJyYXkgdGltZXpvbmVfbG9jYXRpb25fZ2V0KCkiLAogICAgICAgICJSZXR1cm5zIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciBhIHRpbWV6b25lLCBpbmNsdWRpbmcgY291bnRyeSBjb2RlLCBsYXRpdHVkZS9sb25naXR1ZGUgYW5kIGNvbW1lbnRzIgogICAgXSwKICAgICJ0aW1lem9uZV9uYW1lX2Zyb21fYWJiciI6IFsKICAgICAgICAic3RyaW5nIHRpbWV6b25lX25hbWVfZnJvbV9hYmJyKHN0cmluZyBhYmJyWywgbG9uZyBnbXRPZmZzZXRbLCBsb25nIGlzZHN0XV0pIiwKICAgICAgICAiUmV0dXJucyB0aGUgdGltZXpvbmUgbmFtZSBmcm9tIGFiYnJldmF0aW9uIgogICAgXSwKICAgICJ0aW1lem9uZV9uYW1lX2dldCI6IFsKICAgICAgICAic3RyaW5nIHRpbWV6b25lX25hbWVfZ2V0KERhdGVUaW1lWm9uZSBvYmplY3QpIiwKICAgICAgICAiUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdGltZXpvbmUuIgogICAgXSwKICAgICJ0aW1lem9uZV9vZmZzZXRfZ2V0IjogWwogICAgICAgICJsb25nIHRpbWV6b25lX29mZnNldF9nZXQoRGF0ZVRpbWVab25lIG9iamVjdCwgRGF0ZVRpbWUgb2JqZWN0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIHRpbWV6b25lIG9mZnNldC4iCiAgICBdLAogICAgInRpbWV6b25lX29wZW4iOiBbCiAgICAgICAgIkRhdGVUaW1lWm9uZSB0aW1lem9uZV9vcGVuKHN0cmluZyB0aW1lem9uZSkiLAogICAgICAgICJSZXR1cm5zIG5ldyBEYXRlVGltZVpvbmUgb2JqZWN0IgogICAgXSwKICAgICJ0aW1lem9uZV90cmFuc2l0aW9uc19nZXQiOiBbCiAgICAgICAgImFycmF5IHRpbWV6b25lX3RyYW5zaXRpb25zX2dldChEYXRlVGltZVpvbmUgb2JqZWN0IFssIGxvbmcgdGltZXN0YW1wX2JlZ2luIFssIGxvbmcgdGltZXN0YW1wX2VuZCBdXSkiLAogICAgICAgICJSZXR1cm5zIG51bWVyaWNhbGx5IGluZGV4ZWQgYXJyYXkgY29udGFpbmluZyBhc3NvY2lhdGl2ZSBhcnJheSBmb3IgYWxsIHRyYW5zaXRpb25zIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UgZm9yIHRoZSB0aW1lem9uZS4iCiAgICBdLAogICAgInRpbWV6b25lX3ZlcnNpb25fZ2V0IjogWwogICAgICAgICJhcnJheSB0aW1lem9uZV92ZXJzaW9uX2dldCgpIiwKICAgICAgICAiUmV0dXJucyB0aGUgT2xzb24gZGF0YWJhc2UgdmVyc2lvbiBudW1iZXIuIgogICAgXSwKICAgICJ0bXBmaWxlIjogWwogICAgICAgICJyZXNvdXJjZSB0bXBmaWxlKHZvaWQpIiwKICAgICAgICAiQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCB3aWxsIGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSBhZnRlciB1c2UiCiAgICBdLAogICAgInRva2VuX2dldF9hbGwiOiBbCiAgICAgICAgImFycmF5IHRva2VuX2dldF9hbGwoc3RyaW5nIHNvdXJjZSkiLAogICAgICAgICIiCiAgICBdLAogICAgInRva2VuX25hbWUiOiBbCiAgICAgICAgInN0cmluZyB0b2tlbl9uYW1lKGludCB0eXBlKSIsCiAgICAgICAgIiIKICAgIF0sCiAgICAidG91Y2giOiBbCiAgICAgICAgImJvb2wgdG91Y2goc3RyaW5nIGZpbGVuYW1lIFssIGludCB0aW1lIFssIGludCBhdGltZV1dKSIsCiAgICAgICAgIlNldCBtb2RpZmljYXRpb24gdGltZSBvZiBmaWxlIgogICAgXSwKICAgICJ0cmlnZ2VyX2Vycm9yIjogWwogICAgICAgICJ2b2lkIHRyaWdnZXJfZXJyb3Ioc3RyaW5nIG1lc3NzYWdlIFssIGludCBlcnJvcl90eXBlXSkiLAogICAgICAgICJHZW5lcmF0ZXMgYSB1c2VyLWxldmVsIGVycm9yL3dhcm5pbmcvbm90aWNlIG1lc3NhZ2UiCiAgICBdLAogICAgInRyaW0iOiBbCiAgICAgICAgInN0cmluZyB0cmltKHN0cmluZyBzdHIgWywgc3RyaW5nIGNoYXJhY3Rlcl9tYXNrXSkiLAogICAgICAgICJTdHJpcHMgd2hpdGVzcGFjZSBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZyIKICAgIF0sCiAgICAidWFzb3J0IjogWwogICAgICAgICJib29sIHVhc29ydChhcnJheSBhcnJheV9hcmcsIHN0cmluZyBjbXBfZnVuY3Rpb24pIiwKICAgICAgICAiU29ydCBhbiBhcnJheSB3aXRoIGEgdXNlci1kZWZpbmVkIGNvbXBhcmlzb24gZnVuY3Rpb24gYW5kIG1haW50YWluIGluZGV4IGFzc29jaWF0aW9uIgogICAgXSwKICAgICJ1Y2ZpcnN0IjogWwogICAgICAgICJzdHJpbmcgdWNmaXJzdChzdHJpbmcgc3RyKSIsCiAgICAgICAgIk1ha2UgYSBzdHJpbmcncyBmaXJzdCBjaGFyYWN0ZXIgbG93ZXJjYXNlIgogICAgXSwKICAgICJ1Y3dvcmRzIjogWwogICAgICAgICJzdHJpbmcgdWN3b3JkcyhzdHJpbmcgc3RyKSIsCiAgICAgICAgIlVwcGVyY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGV2ZXJ5IHdvcmQgaW4gYSBzdHJpbmciCiAgICBdLAogICAgInVrc29ydCI6IFsKICAgICAgICAiYm9vbCB1a3NvcnQoYXJyYXkgYXJyYXlfYXJnLCBzdHJpbmcgY21wX2Z1bmN0aW9uKSIsCiAgICAgICAgIlNvcnQgYW4gYXJyYXkgYnkga2V5cyB1c2luZyBhIHVzZXItZGVmaW5lZCBjb21wYXJpc29uIGZ1bmN0aW9uIgogICAgXSwKICAgICJ1bWFzayI6IFsKICAgICAgICAiaW50IHVtYXNrKFtpbnQgbWFza10pIiwKICAgICAgICAiUmV0dXJuIG9yIGNoYW5nZSB0aGUgdW1hc2siCiAgICBdLAogICAgInVuaXFpZCI6IFsKICAgICAgICAic3RyaW5nIHVuaXFpZChbc3RyaW5nIHByZWZpeCBbLCBib29sIG1vcmVfZW50cm9weV1dKSIsCiAgICAgICAgIkdlbmVyYXRlcyBhIHVuaXF1ZSBJRCIKICAgIF0sCiAgICAidW5peHRvamQiOiBbCiAgICAgICAgImludCB1bml4dG9qZChbaW50IHRpbWVzdGFtcF0pIiwKICAgICAgICAiQ29udmVydCBVTklYIHRpbWVzdGFtcCB0byBKdWxpYW4gRGF5IgogICAgXSwKICAgICJ1bmxpbmsiOiBbCiAgICAgICAgImJvb2wgdW5saW5rKHN0cmluZyBmaWxlbmFtZVssIGNvbnRleHQgY29udGV4dF0pIiwKICAgICAgICAiRGVsZXRlIGEgZmlsZSIKICAgIF0sCiAgICAidW5wYWNrIjogWwogICAgICAgICJhcnJheSB1bnBhY2soc3RyaW5nIGZvcm1hdCwgc3RyaW5nIGlucHV0KSIsCiAgICAgICAgIlVucGFjayBiaW5hcnkgc3RyaW5nIGludG8gbmFtZWQgYXJyYXkgZWxlbWVudHMgYWNjb3JkaW5nIHRvIGZvcm1hdCBhcmd1bWVudCIKICAgIF0sCiAgICAidW5yZWdpc3Rlcl90aWNrX2Z1bmN0aW9uIjogWwogICAgICAgICJ2b2lkIHVucmVnaXN0ZXJfdGlja19mdW5jdGlvbihzdHJpbmcgZnVuY3Rpb25fbmFtZSkiLAogICAgICAgICJVbnJlZ2lzdGVycyBhIHRpY2sgY2FsbGJhY2sgZnVuY3Rpb24iCiAgICBdLAogICAgInVuc2VyaWFsaXplIjogWwogICAgICAgICJtaXhlZCB1bnNlcmlhbGl6ZShzdHJpbmcgdmFyaWFibGVfcmVwcmVzZW50YXRpb24pIiwKICAgICAgICAiVGFrZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdmFyaWFibGUgYW5kIHJlY3JlYXRlcyBpdCIKICAgIF0sCiAgICAidW5zZXQiOiBbCiAgICAgICAgInZvaWQgdW5zZXQgKG1peGVkIHZhciBbLCBtaXhlZCB2YXJdKSIsCiAgICAgICAgIlVuc2V0IGEgZ2l2ZW4gdmFyaWFibGUiCiAgICBdLAogICAgInVybGRlY29kZSI6IFsKICAgICAgICAic3RyaW5nIHVybGRlY29kZShzdHJpbmcgc3RyKSIsCiAgICAgICAgIkRlY29kZXMgVVJMLWVuY29kZWQgc3RyaW5nIgogICAgXSwKICAgICJ1cmxlbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyB1cmxlbmNvZGUoc3RyaW5nIHN0cikiLAogICAgICAgICJVUkwtZW5jb2RlcyBzdHJpbmciCiAgICBdLAogICAgInVzbGVlcCI6IFsKICAgICAgICAidm9pZCB1c2xlZXAoaW50IG1pY3JvX3NlY29uZHMpIiwKICAgICAgICAiRGVsYXkgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pY3JvIHNlY29uZHMiCiAgICBdLAogICAgInVzb3J0IjogWwogICAgICAgICJib29sIHVzb3J0KGFycmF5IGFycmF5X2FyZywgc3RyaW5nIGNtcF9mdW5jdGlvbikiLAogICAgICAgICJTb3J0IGFuIGFycmF5IGJ5IHZhbHVlcyB1c2luZyBhIHVzZXItZGVmaW5lZCBjb21wYXJpc29uIGZ1bmN0aW9uIgogICAgXSwKICAgICJ1dGY4X2RlY29kZSI6IFsKICAgICAgICAic3RyaW5nIHV0ZjhfZGVjb2RlKHN0cmluZyBkYXRhKSIsCiAgICAgICAgIkNvbnZlcnRzIGEgVVRGLTggZW5jb2RlZCBzdHJpbmcgdG8gSVNPLTg4NTktMSIKICAgIF0sCiAgICAidXRmOF9lbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyB1dGY4X2VuY29kZShzdHJpbmcgZGF0YSkiLAogICAgICAgICJFbmNvZGVzIGFuIElTTy04ODU5LTEgc3RyaW5nIHRvIFVURi04IgogICAgXSwKICAgICJ2YXJfZHVtcCI6IFsKICAgICAgICAidm9pZCB2YXJfZHVtcChtaXhlZCB2YXIpIiwKICAgICAgICAiRHVtcHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdmFyaWFibGUgdG8gb3V0cHV0IgogICAgXSwKICAgICJ2YXJfZXhwb3J0IjogWwogICAgICAgICJtaXhlZCB2YXJfZXhwb3J0KG1peGVkIHZhciBbLCBib29sIHJldHVybl0pIiwKICAgICAgICAiT3V0cHV0cyBvciByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdmFyaWFibGUiCiAgICBdLAogICAgInZhcmlhbnRfYWJzIjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X2FicyhtaXhlZCBsZWZ0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdmFyaWFudCIKICAgIF0sCiAgICAidmFyaWFudF9hZGQiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfYWRkKG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIlwiQWRkc1wiIHR3byB2YXJpYW50IHZhbHVlcyB0b2dldGhlciBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IgogICAgXSwKICAgICJ2YXJpYW50X2FuZCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9hbmQobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAicGVyZm9ybXMgYSBiaXR3aXNlIEFORCBvcGVyYXRpb24gYmV0d2VlbiB0d28gdmFyaWFudHMgYW5kIHJldHVybnMgdGhlIHJlc3VsdCIKICAgIF0sCiAgICAidmFyaWFudF9jYXN0IjogWwogICAgICAgICJvYmplY3QgdmFyaWFudF9jYXN0KG9iamVjdCB2YXJpYW50LCBpbnQgdHlwZSkiLAogICAgICAgICJDb252ZXJ0IGEgdmFyaWFudCBpbnRvIGEgbmV3IHZhcmlhbnQgb2JqZWN0IG9mIGFub3RoZXIgdHlwZSIKICAgIF0sCiAgICAidmFyaWFudF9jYXQiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfY2F0KG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgImNvbmNhdGVuYXRlcyB0d28gdmFyaWFudCB2YWx1ZXMgdG9nZXRoZXIgYW5kIHJldHVybnMgdGhlIHJlc3VsdCIKICAgIF0sCiAgICAidmFyaWFudF9jbXAiOiBbCiAgICAgICAgImludCB2YXJpYW50X2NtcChtaXhlZCBsZWZ0LCBtaXhlZCByaWdodCBbLCBpbnQgbGNpZCBbLCBpbnQgZmxhZ3NdXSkiLAogICAgICAgICJDb21wYXJlcyB0d28gdmFyaWFudHMiCiAgICBdLAogICAgInZhcmlhbnRfZGF0ZV9mcm9tX3RpbWVzdGFtcCI6IFsKICAgICAgICAib2JqZWN0IHZhcmlhbnRfZGF0ZV9mcm9tX3RpbWVzdGFtcChpbnQgdGltZXN0YW1wKSIsCiAgICAgICAgIlJldHVybnMgYSB2YXJpYW50IGRhdGUgcmVwcmVzZW50YXRpb24gb2YgYSB1bml4IHRpbWVzdGFtcCIKICAgIF0sCiAgICAidmFyaWFudF9kYXRlX3RvX3RpbWVzdGFtcCI6IFsKICAgICAgICAiaW50IHZhcmlhbnRfZGF0ZV90b190aW1lc3RhbXAob2JqZWN0IHZhcmlhbnQpIiwKICAgICAgICAiQ29udmVydHMgYSB2YXJpYW50IGRhdGUvdGltZSB2YWx1ZSB0byB1bml4IHRpbWVzdGFtcCIKICAgIF0sCiAgICAidmFyaWFudF9kaXYiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfZGl2KG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIHJlc3VsdCBmcm9tIGRpdmlkaW5nIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmFyaWFudF9lcXYiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfZXF2KG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIlBlcmZvcm1zIGEgYml0d2lzZSBlcXVpdmFsZW5jZSBvbiB0d28gdmFyaWFudHMiCiAgICBdLAogICAgInZhcmlhbnRfZml4IjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X2ZpeChtaXhlZCBsZWZ0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIGludGVnZXIgcGFydCA/IG9mIGEgdmFyaWFudCIKICAgIF0sCiAgICAidmFyaWFudF9nZXRfdHlwZSI6IFsKICAgICAgICAiaW50IHZhcmlhbnRfZ2V0X3R5cGUob2JqZWN0IHZhcmlhbnQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgVlRfWFhYIHR5cGUgY29kZSBmb3IgYSB2YXJpYW50IgogICAgXSwKICAgICJ2YXJpYW50X2lkaXYiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfaWRpdihtaXhlZCBsZWZ0LCBtaXhlZCByaWdodCkiLAogICAgICAgICJDb252ZXJ0cyB2YXJpYW50cyB0byBpbnRlZ2VycyBhbmQgdGhlbiByZXR1cm5zIHRoZSByZXN1bHQgZnJvbSBkaXZpZGluZyB0aGVtIgogICAgXSwKICAgICJ2YXJpYW50X2ltcCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9pbXAobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiUGVyZm9ybXMgYSBiaXR3aXNlIGltcGxpY2F0aW9uIG9uIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmFyaWFudF9pbnQiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfaW50KG1peGVkIGxlZnQpIiwKICAgICAgICAiUmV0dXJucyB0aGUgaW50ZWdlciBwb3J0aW9uIG9mIGEgdmFyaWFudCIKICAgIF0sCiAgICAidmFyaWFudF9tb2QiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfbW9kKG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIkRpdmlkZXMgdHdvIHZhcmlhbnRzIGFuZCByZXR1cm5zIG9ubHkgdGhlIHJlbWFpbmRlciIKICAgIF0sCiAgICAidmFyaWFudF9tdWwiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfbXVsKG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIm11bHRpcGxpZXMgdGhlIHZhbHVlcyBvZiB0aGUgdHdvIHZhcmlhbnRzIGFuZCByZXR1cm5zIHRoZSByZXN1bHQiCiAgICBdLAogICAgInZhcmlhbnRfbmVnIjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X25lZyhtaXhlZCBsZWZ0KSIsCiAgICAgICAgIlBlcmZvcm1zIGxvZ2ljYWwgbmVnYXRpb24gb24gYSB2YXJpYW50IgogICAgXSwKICAgICJ2YXJpYW50X25vdCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9ub3QobWl4ZWQgbGVmdCkiLAogICAgICAgICJQZXJmb3JtcyBiaXR3aXNlIG5vdCBuZWdhdGlvbiBvbiBhIHZhcmlhbnQiCiAgICBdLAogICAgInZhcmlhbnRfb3IiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfb3IobWl4ZWQgbGVmdCwgbWl4ZWQgcmlnaHQpIiwKICAgICAgICAiUGVyZm9ybXMgYSBsb2dpY2FsIGRpc2p1bmN0aW9uIG9uIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmFyaWFudF9wb3ciOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfcG93KG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgIlJldHVybnMgdGhlIHJlc3VsdCBvZiBwZXJmb3JtaW5nIHRoZSBwb3dlciBmdW5jdGlvbiB3aXRoIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmFyaWFudF9yb3VuZCI6IFsKICAgICAgICAibWl4ZWQgdmFyaWFudF9yb3VuZChtaXhlZCBsZWZ0LCBpbnQgZGVjaW1hbHMpIiwKICAgICAgICAiUm91bmRzIGEgdmFyaWFudCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyIKICAgIF0sCiAgICAidmFyaWFudF9zZXQiOiBbCiAgICAgICAgInZvaWQgdmFyaWFudF9zZXQob2JqZWN0IHZhcmlhbnQsIG1peGVkIHZhbHVlKSIsCiAgICAgICAgIkFzc2lnbnMgYSBuZXcgdmFsdWUgZm9yIGEgdmFyaWFudCBvYmplY3QiCiAgICBdLAogICAgInZhcmlhbnRfc2V0X3R5cGUiOiBbCiAgICAgICAgInZvaWQgdmFyaWFudF9zZXRfdHlwZShvYmplY3QgdmFyaWFudCwgaW50IHR5cGUpIiwKICAgICAgICAiQ29udmVydCBhIHZhcmlhbnQgaW50byBhbm90aGVyIHR5cGUuICBWYXJpYW50IGlzIG1vZGlmaWVkIFwiaW4tcGxhY2VcIiIKICAgIF0sCiAgICAidmFyaWFudF9zdWIiOiBbCiAgICAgICAgIm1peGVkIHZhcmlhbnRfc3ViKG1peGVkIGxlZnQsIG1peGVkIHJpZ2h0KSIsCiAgICAgICAgInN1YnRyYWN0cyB0aGUgdmFsdWUgb2YgdGhlIHJpZ2h0IHZhcmlhbnQgZnJvbSB0aGUgbGVmdCB2YXJpYW50IHZhbHVlIGFuZCByZXR1cm5zIHRoZSByZXN1bHQiCiAgICBdLAogICAgInZhcmlhbnRfeG9yIjogWwogICAgICAgICJtaXhlZCB2YXJpYW50X3hvcihtaXhlZCBsZWZ0LCBtaXhlZCByaWdodCkiLAogICAgICAgICJQZXJmb3JtcyBhIGxvZ2ljYWwgZXhjbHVzaW9uIG9uIHR3byB2YXJpYW50cyIKICAgIF0sCiAgICAidmVyc2lvbl9jb21wYXJlIjogWwogICAgICAgICJpbnQgdmVyc2lvbl9jb21wYXJlKHN0cmluZyB2ZXIxLCBzdHJpbmcgdmVyMiBbLCBzdHJpbmcgb3Blcl0pIiwKICAgICAgICAiQ29tcGFyZXMgdHdvIFwiUEhQLXN0YW5kYXJkaXplZFwiIHZlcnNpb24gbnVtYmVyIHN0cmluZ3MiCiAgICBdLAogICAgInZmcHJpbnRmIjogWwogICAgICAgICJpbnQgdmZwcmludGYocmVzb3VyY2Ugc3RyZWFtLCBzdHJpbmcgZm9ybWF0LCBhcnJheSBhcmdzKSIsCiAgICAgICAgIk91dHB1dCBhIGZvcm1hdHRlZCBzdHJpbmcgaW50byBhIHN0cmVhbSIKICAgIF0sCiAgICAidmlydHVhbCI6IFsKICAgICAgICAiYm9vbCB2aXJ0dWFsKHN0cmluZyBmaWxlbmFtZSkiLAogICAgICAgICJQZXJmb3JtIGFuIEFwYWNoZSBzdWItcmVxdWVzdCIKICAgIF0sCiAgICAidnByaW50ZiI6IFsKICAgICAgICAiaW50IHZwcmludGYoc3RyaW5nIGZvcm1hdCwgYXJyYXkgYXJncykiLAogICAgICAgICJPdXRwdXQgYSBmb3JtYXR0ZWQgc3RyaW5nIgogICAgXSwKICAgICJ2c3ByaW50ZiI6IFsKICAgICAgICAic3RyaW5nIHZzcHJpbnRmKHN0cmluZyBmb3JtYXQsIGFycmF5IGFyZ3MpIiwKICAgICAgICAiUmV0dXJuIGEgZm9ybWF0dGVkIHN0cmluZyIKICAgIF0sCiAgICAid2RkeF9hZGRfdmFycyI6IFsKICAgICAgICAiaW50IHdkZHhfYWRkX3ZhcnMocmVzb3VyY2UgcGFja2V0X2lkLCAgbWl4ZWQgdmFyX25hbWVzIFssIG1peGVkIC4uLl0pIiwKICAgICAgICAiU2VyaWFsaXplcyBnaXZlbiB2YXJpYWJsZXMgYW5kIGFkZHMgdGhlbSB0byBwYWNrZXQgZ2l2ZW4gYnkgcGFja2V0X2lkIgogICAgXSwKICAgICJ3ZGR4X2Rlc2VyaWFsaXplIjogWwogICAgICAgICJtaXhlZCB3ZGR4X2Rlc2VyaWFsaXplKG1peGVkIHBhY2tldCkiLAogICAgICAgICJEZXNlcmlhbGl6ZXMgZ2l2ZW4gcGFja2V0IGFuZCByZXR1cm5zIGEgUEhQIHZhbHVlIgogICAgXSwKICAgICJ3ZGR4X3BhY2tldF9lbmQiOiBbCiAgICAgICAgInN0cmluZyB3ZGR4X3BhY2tldF9lbmQocmVzb3VyY2UgcGFja2V0X2lkKSIsCiAgICAgICAgIkVuZHMgc3BlY2lmaWVkIFdERFggcGFja2V0IGFuZCByZXR1cm5zIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgcGFja2V0IgogICAgXSwKICAgICJ3ZGR4X3BhY2tldF9zdGFydCI6IFsKICAgICAgICAicmVzb3VyY2Ugd2RkeF9wYWNrZXRfc3RhcnQoW3N0cmluZyBjb21tZW50XSkiLAogICAgICAgICJTdGFydHMgYSBXRERYIHBhY2tldCB3aXRoIG9wdGlvbmFsIGNvbW1lbnQgYW5kIHJldHVybnMgdGhlIHBhY2tldCBpZCIKICAgIF0sCiAgICAid2RkeF9zZXJpYWxpemVfdmFsdWUiOiBbCiAgICAgICAgInN0cmluZyB3ZGR4X3NlcmlhbGl6ZV92YWx1ZShtaXhlZCB2YXIgWywgc3RyaW5nIGNvbW1lbnRdKSIsCiAgICAgICAgIkNyZWF0ZXMgYSBuZXcgcGFja2V0IGFuZCBzZXJpYWxpemVzIHRoZSBnaXZlbiB2YWx1ZSIKICAgIF0sCiAgICAid2RkeF9zZXJpYWxpemVfdmFycyI6IFsKICAgICAgICAic3RyaW5nIHdkZHhfc2VyaWFsaXplX3ZhcnMobWl4ZWQgdmFyX25hbWUgWywgbWl4ZWQgLi4uXSkiLAogICAgICAgICJDcmVhdGVzIGEgbmV3IHBhY2tldCBhbmQgc2VyaWFsaXplcyBnaXZlbiB2YXJpYWJsZXMgaW50byBhIHN0cnVjdCIKICAgIF0sCiAgICAid29yZHdyYXAiOiBbCiAgICAgICAgInN0cmluZyB3b3Jkd3JhcChzdHJpbmcgc3RyIFssIGludCB3aWR0aCBbLCBzdHJpbmcgYnJlYWsgWywgYm9vbGVhbiBjdXRdXV0pIiwKICAgICAgICAiV3JhcHMgYnVmZmVyIHRvIHNlbGVjdGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVzaW5nIHN0cmluZyBicmVhayBjaGFyIgogICAgXSwKICAgICJ4bWxfZXJyb3Jfc3RyaW5nIjogWwogICAgICAgICJzdHJpbmcgeG1sX2Vycm9yX3N0cmluZyhpbnQgY29kZSkiLAogICAgICAgICJHZXQgWE1MIHBhcnNlciBlcnJvciBzdHJpbmciCiAgICBdLAogICAgInhtbF9nZXRfY3VycmVudF9ieXRlX2luZGV4IjogWwogICAgICAgICJpbnQgeG1sX2dldF9jdXJyZW50X2J5dGVfaW5kZXgocmVzb3VyY2UgcGFyc2VyKSIsCiAgICAgICAgIkdldCBjdXJyZW50IGJ5dGUgaW5kZXggZm9yIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9nZXRfY3VycmVudF9jb2x1bW5fbnVtYmVyIjogWwogICAgICAgICJpbnQgeG1sX2dldF9jdXJyZW50X2NvbHVtbl9udW1iZXIocmVzb3VyY2UgcGFyc2VyKSIsCiAgICAgICAgIkdldCBjdXJyZW50IGNvbHVtbiBudW1iZXIgZm9yIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9nZXRfY3VycmVudF9saW5lX251bWJlciI6IFsKICAgICAgICAiaW50IHhtbF9nZXRfY3VycmVudF9saW5lX251bWJlcihyZXNvdXJjZSBwYXJzZXIpIiwKICAgICAgICAiR2V0IGN1cnJlbnQgbGluZSBudW1iZXIgZm9yIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9nZXRfZXJyb3JfY29kZSI6IFsKICAgICAgICAiaW50IHhtbF9nZXRfZXJyb3JfY29kZShyZXNvdXJjZSBwYXJzZXIpIiwKICAgICAgICAiR2V0IFhNTCBwYXJzZXIgZXJyb3IgY29kZSIKICAgIF0sCiAgICAieG1sX3BhcnNlIjogWwogICAgICAgICJpbnQgeG1sX3BhcnNlKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGRhdGEgWywgaW50IGlzRmluYWxdKSIsCiAgICAgICAgIlN0YXJ0IHBhcnNpbmcgYW4gWE1MIGRvY3VtZW50IgogICAgXSwKICAgICJ4bWxfcGFyc2VfaW50b19zdHJ1Y3QiOiBbCiAgICAgICAgImludCB4bWxfcGFyc2VfaW50b19zdHJ1Y3QocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgZGF0YSwgYXJyYXkgJnZhbHVlcyBbLCBhcnJheSAmaW5kZXggXSkiLAogICAgICAgICJQYXJzaW5nIGEgWE1MIGRvY3VtZW50IgogICAgXSwKICAgICJ4bWxfcGFyc2VyX2NyZWF0ZSI6IFsKICAgICAgICAicmVzb3VyY2UgeG1sX3BhcnNlcl9jcmVhdGUoW3N0cmluZyBlbmNvZGluZ10pIiwKICAgICAgICAiQ3JlYXRlIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9wYXJzZXJfY3JlYXRlX25zIjogWwogICAgICAgICJyZXNvdXJjZSB4bWxfcGFyc2VyX2NyZWF0ZV9ucyhbc3RyaW5nIGVuY29kaW5nIFssIHN0cmluZyBzZXBdXSkiLAogICAgICAgICJDcmVhdGUgYW4gWE1MIHBhcnNlciIKICAgIF0sCiAgICAieG1sX3BhcnNlcl9mcmVlIjogWwogICAgICAgICJpbnQgeG1sX3BhcnNlcl9mcmVlKHJlc291cmNlIHBhcnNlcikiLAogICAgICAgICJGcmVlIGFuIFhNTCBwYXJzZXIiCiAgICBdLAogICAgInhtbF9wYXJzZXJfZ2V0X29wdGlvbiI6IFsKICAgICAgICAiaW50IHhtbF9wYXJzZXJfZ2V0X29wdGlvbihyZXNvdXJjZSBwYXJzZXIsIGludCBvcHRpb24pIiwKICAgICAgICAiR2V0IG9wdGlvbnMgZnJvbSBhbiBYTUwgcGFyc2VyIgogICAgXSwKICAgICJ4bWxfcGFyc2VyX3NldF9vcHRpb24iOiBbCiAgICAgICAgImludCB4bWxfcGFyc2VyX3NldF9vcHRpb24ocmVzb3VyY2UgcGFyc2VyLCBpbnQgb3B0aW9uLCBtaXhlZCB2YWx1ZSkiLAogICAgICAgICJTZXQgb3B0aW9ucyBpbiBhbiBYTUwgcGFyc2VyIgogICAgXSwKICAgICJ4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgaGRsKSIsCiAgICAgICAgIlNldCB1cCBjaGFyYWN0ZXIgZGF0YSBoYW5kbGVyIgogICAgXSwKICAgICJ4bWxfc2V0X2RlZmF1bHRfaGFuZGxlciI6IFsKICAgICAgICAiaW50IHhtbF9zZXRfZGVmYXVsdF9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGhkbCkiLAogICAgICAgICJTZXQgdXAgZGVmYXVsdCBoYW5kbGVyIgogICAgXSwKICAgICJ4bWxfc2V0X2VsZW1lbnRfaGFuZGxlciI6IFsKICAgICAgICAiaW50IHhtbF9zZXRfZWxlbWVudF9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIHNoZGwsIHN0cmluZyBlaGRsKSIsCiAgICAgICAgIlNldCB1cCBzdGFydCBhbmQgZW5kIGVsZW1lbnQgaGFuZGxlcnMiCiAgICBdLAogICAgInhtbF9zZXRfZW5kX25hbWVzcGFjZV9kZWNsX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X2VuZF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGhkbCkiLAogICAgICAgICJTZXQgdXAgY2hhcmFjdGVyIGRhdGEgaGFuZGxlciIKICAgIF0sCiAgICAieG1sX3NldF9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X2V4dGVybmFsX2VudGl0eV9yZWZfaGFuZGxlcihyZXNvdXJjZSBwYXJzZXIsIHN0cmluZyBoZGwpIiwKICAgICAgICAiU2V0IHVwIGV4dGVybmFsIGVudGl0eSByZWZlcmVuY2UgaGFuZGxlciIKICAgIF0sCiAgICAieG1sX3NldF9ub3RhdGlvbl9kZWNsX2hhbmRsZXIiOiBbCiAgICAgICAgImludCB4bWxfc2V0X25vdGF0aW9uX2RlY2xfaGFuZGxlcihyZXNvdXJjZSBwYXJzZXIsIHN0cmluZyBoZGwpIiwKICAgICAgICAiU2V0IHVwIG5vdGF0aW9uIGRlY2xhcmF0aW9uIGhhbmRsZXIiCiAgICBdLAogICAgInhtbF9zZXRfb2JqZWN0IjogWwogICAgICAgICJpbnQgeG1sX3NldF9vYmplY3QocmVzb3VyY2UgcGFyc2VyLCBvYmplY3QgJm9iaikiLAogICAgICAgICJTZXQgdXAgb2JqZWN0IHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciBjYWxsYmFja3MiCiAgICBdLAogICAgInhtbF9zZXRfcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9oYW5kbGVyIjogWwogICAgICAgICJpbnQgeG1sX3NldF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX2hhbmRsZXIocmVzb3VyY2UgcGFyc2VyLCBzdHJpbmcgaGRsKSIsCiAgICAgICAgIlNldCB1cCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIChQSSkgaGFuZGxlciIKICAgIF0sCiAgICAieG1sX3NldF9zdGFydF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyIjogWwogICAgICAgICJpbnQgeG1sX3NldF9zdGFydF9uYW1lc3BhY2VfZGVjbF9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGhkbCkiLAogICAgICAgICJTZXQgdXAgY2hhcmFjdGVyIGRhdGEgaGFuZGxlciIKICAgIF0sCiAgICAieG1sX3NldF91bnBhcnNlZF9lbnRpdHlfZGVjbF9oYW5kbGVyIjogWwogICAgICAgICJpbnQgeG1sX3NldF91bnBhcnNlZF9lbnRpdHlfZGVjbF9oYW5kbGVyKHJlc291cmNlIHBhcnNlciwgc3RyaW5nIGhkbCkiLAogICAgICAgICJTZXQgdXAgdW5wYXJzZWQgZW50aXR5IGRlY2xhcmF0aW9uIGhhbmRsZXIiCiAgICBdLAogICAgInhtbHJwY19kZWNvZGUiOiBbCiAgICAgICAgImFycmF5IHhtbHJwY19kZWNvZGUoc3RyaW5nIHhtbCBbLCBzdHJpbmcgZW5jb2RpbmddKSIsCiAgICAgICAgIkRlY29kZXMgWE1MIGludG8gbmF0aXZlIFBIUCB0eXBlcyIKICAgIF0sCiAgICAieG1scnBjX2RlY29kZV9yZXF1ZXN0IjogWwogICAgICAgICJhcnJheSB4bWxycGNfZGVjb2RlX3JlcXVlc3Qoc3RyaW5nIHhtbCwgc3RyaW5nJiBtZXRob2QgWywgc3RyaW5nIGVuY29kaW5nXSkiLAogICAgICAgICJEZWNvZGVzIFhNTCBpbnRvIG5hdGl2ZSBQSFAgdHlwZXMiCiAgICBdLAogICAgInhtbHJwY19lbmNvZGUiOiBbCiAgICAgICAgInN0cmluZyB4bWxycGNfZW5jb2RlKG1peGVkIHZhbHVlKSIsCiAgICAgICAgIkdlbmVyYXRlcyBYTUwgZm9yIGEgUEhQIHZhbHVlIgogICAgXSwKICAgICJ4bWxycGNfZW5jb2RlX3JlcXVlc3QiOiBbCiAgICAgICAgInN0cmluZyB4bWxycGNfZW5jb2RlX3JlcXVlc3Qoc3RyaW5nIG1ldGhvZCwgbWl4ZWQgcGFyYW1zIFssIGFycmF5IG91dHB1dF9vcHRpb25zXSkiLAogICAgICAgICJHZW5lcmF0ZXMgWE1MIGZvciBhIG1ldGhvZCByZXF1ZXN0IgogICAgXSwKICAgICJ4bWxycGNfZ2V0X3R5cGUiOiBbCiAgICAgICAgInN0cmluZyB4bWxycGNfZ2V0X3R5cGUobWl4ZWQgdmFsdWUpIiwKICAgICAgICAiR2V0cyB4bWxycGMgdHlwZSBmb3IgYSBQSFAgdmFsdWUuIEVzcGVjaWFsbHkgdXNlZnVsIGZvciBiYXNlNjQgYW5kIGRhdGV0aW1lIHN0cmluZ3MiCiAgICBdLAogICAgInhtbHJwY19pc19mYXVsdCI6IFsKICAgICAgICAiYm9vbCB4bWxycGNfaXNfZmF1bHQoYXJyYXkpIiwKICAgICAgICAiRGV0ZXJtaW5lcyBpZiBhbiBhcnJheSB2YWx1ZSByZXByZXNlbnRzIGFuIFhNTFJQQyBmYXVsdC4iCiAgICBdLAogICAgInhtbHJwY19wYXJzZV9tZXRob2RfZGVzY3JpcHRpb25zIjogWwogICAgICAgICJhcnJheSB4bWxycGNfcGFyc2VfbWV0aG9kX2Rlc2NyaXB0aW9ucyhzdHJpbmcgeG1sKSIsCiAgICAgICAgIkRlY29kZXMgWE1MIGludG8gYSBsaXN0IG9mIG1ldGhvZCBkZXNjcmlwdGlvbnMiCiAgICBdLAogICAgInhtbHJwY19zZXJ2ZXJfYWRkX2ludHJvc3BlY3Rpb25fZGF0YSI6IFsKICAgICAgICAiaW50IHhtbHJwY19zZXJ2ZXJfYWRkX2ludHJvc3BlY3Rpb25fZGF0YShyZXNvdXJjZSBzZXJ2ZXIsIGFycmF5IGRlc2MpIiwKICAgICAgICAiQWRkcyBpbnRyb3NwZWN0aW9uIGRvY3VtZW50YXRpb24iCiAgICBdLAogICAgInhtbHJwY19zZXJ2ZXJfY2FsbF9tZXRob2QiOiBbCiAgICAgICAgIm1peGVkIHhtbHJwY19zZXJ2ZXJfY2FsbF9tZXRob2QocmVzb3VyY2Ugc2VydmVyLCBzdHJpbmcgeG1sLCBtaXhlZCB1c2VyX2RhdGEgWywgYXJyYXkgb3V0cHV0X29wdGlvbnNdKSIsCiAgICAgICAgIlBhcnNlcyBYTUwgcmVxdWVzdHMgYW5kIGNhbGwgbWV0aG9kcyIKICAgIF0sCiAgICAieG1scnBjX3NlcnZlcl9jcmVhdGUiOiBbCiAgICAgICAgInJlc291cmNlIHhtbHJwY19zZXJ2ZXJfY3JlYXRlKHZvaWQpIiwKICAgICAgICAiQ3JlYXRlcyBhbiB4bWxycGMgc2VydmVyIgogICAgXSwKICAgICJ4bWxycGNfc2VydmVyX2Rlc3Ryb3kiOiBbCiAgICAgICAgImludCB4bWxycGNfc2VydmVyX2Rlc3Ryb3kocmVzb3VyY2Ugc2VydmVyKSIsCiAgICAgICAgIkRlc3Ryb3lzIHNlcnZlciByZXNvdXJjZXMiCiAgICBdLAogICAgInhtbHJwY19zZXJ2ZXJfcmVnaXN0ZXJfaW50cm9zcGVjdGlvbl9jYWxsYmFjayI6IFsKICAgICAgICAiYm9vbCB4bWxycGNfc2VydmVyX3JlZ2lzdGVyX2ludHJvc3BlY3Rpb25fY2FsbGJhY2socmVzb3VyY2Ugc2VydmVyLCBzdHJpbmcgZnVuY3Rpb24pIiwKICAgICAgICAiUmVnaXN0ZXIgYSBQSFAgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgZG9jdW1lbnRhdGlvbiIKICAgIF0sCiAgICAieG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2QiOiBbCiAgICAgICAgImJvb2wgeG1scnBjX3NlcnZlcl9yZWdpc3Rlcl9tZXRob2QocmVzb3VyY2Ugc2VydmVyLCBzdHJpbmcgbWV0aG9kX25hbWUsIHN0cmluZyBmdW5jdGlvbikiLAogICAgICAgICJSZWdpc3RlciBhIFBIUCBmdW5jdGlvbiB0byBoYW5kbGUgbWV0aG9kIG1hdGNoaW5nIG1ldGhvZF9uYW1lIgogICAgXSwKICAgICJ4bWxycGNfc2V0X3R5cGUiOiBbCiAgICAgICAgImJvb2wgeG1scnBjX3NldF90eXBlKHN0cmluZyB2YWx1ZSwgc3RyaW5nIHR5cGUpIiwKICAgICAgICAiU2V0cyB4bWxycGMgdHlwZSwgYmFzZTY0IG9yIGRhdGV0aW1lLCBmb3IgYSBQSFAgc3RyaW5nIHZhbHVlIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX2F0dHJpYnV0ZSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZW5kX2F0dHJpYnV0ZShyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGF0dHJpYnV0ZSAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfY2RhdGEiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9jZGF0YShyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgQ0RBVEEgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX2NvbW1lbnQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9jb21tZW50KHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJDcmVhdGUgZW5kIGNvbW1lbnQgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX2RvY3VtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9lbmRfZG9jdW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkVuZCBjdXJyZW50IGRvY3VtZW50IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX2VuZF9kdGQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9kdGQocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkVuZCBjdXJyZW50IERURCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfZHRkX2F0dGxpc3QiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX2VuZF9kdGRfYXR0bGlzdChyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgRFREIEF0dExpc3QgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX2R0ZF9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9lbmRfZHRkX2VsZW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkVuZCBjdXJyZW50IERURCBlbGVtZW50IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX2VuZF9kdGRfZW50aXR5IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9lbmRfZHRkX2VudGl0eShyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgRFREIEVudGl0eSAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9lbmRfZWxlbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZW5kX2VsZW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkVuZCBjdXJyZW50IGVsZW1lbnQgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZW5kX3BpIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9lbmRfcGkocmVzb3VyY2UgeG1sd3JpdGVyKSIsCiAgICAgICAgIkVuZCBjdXJyZW50IFBJIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX2ZsdXNoIjogWwogICAgICAgICJtaXhlZCB4bWx3cml0ZXJfZmx1c2gocmVzb3VyY2UgeG1sd3JpdGVyIFssYm9vbCBlbXB0eV0pIiwKICAgICAgICAiT3V0cHV0IGN1cnJlbnQgYnVmZmVyIgogICAgXSwKICAgICJ4bWx3cml0ZXJfZnVsbF9lbmRfZWxlbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfZnVsbF9lbmRfZWxlbWVudChyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiRW5kIGN1cnJlbnQgZWxlbWVudCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9vcGVuX21lbW9yeSI6IFsKICAgICAgICAicmVzb3VyY2UgeG1sd3JpdGVyX29wZW5fbWVtb3J5KCkiLAogICAgICAgICJDcmVhdGUgbmV3IHhtbHdyaXRlciB1c2luZyBtZW1vcnkgZm9yIHN0cmluZyBvdXRwdXQiCiAgICBdLAogICAgInhtbHdyaXRlcl9vcGVuX3VyaSI6IFsKICAgICAgICAicmVzb3VyY2UgeG1sd3JpdGVyX29wZW5fdXJpKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHNvdXJjZSkiLAogICAgICAgICJDcmVhdGUgbmV3IHhtbHdyaXRlciB1c2luZyBzb3VyY2UgdXJpIGZvciBvdXRwdXQiCiAgICBdLAogICAgInhtbHdyaXRlcl9vdXRwdXRfbWVtb3J5IjogWwogICAgICAgICJzdHJpbmcgeG1sd3JpdGVyX291dHB1dF9tZW1vcnkocmVzb3VyY2UgeG1sd3JpdGVyIFssYm9vbCBmbHVzaF0pIiwKICAgICAgICAiT3V0cHV0IGN1cnJlbnQgYnVmZmVyIGFzIHN0cmluZyIKICAgIF0sCiAgICAieG1sd3JpdGVyX3NldF9pbmRlbnQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3NldF9pbmRlbnQocmVzb3VyY2UgeG1sd3JpdGVyLCBib29sIGluZGVudCkiLAogICAgICAgICJUb2dnbGUgaW5kZW50YXRpb24gb24vb2ZmIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3NldF9pbmRlbnRfc3RyaW5nIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zZXRfaW5kZW50X3N0cmluZyhyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBpbmRlbnRTdHJpbmcpIiwKICAgICAgICAiU2V0IHN0cmluZyB1c2VkIGZvciBpbmRlbnRpbmcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfYXR0cmlidXRlIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9hdHRyaWJ1dGUocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZSkiLAogICAgICAgICJDcmVhdGUgc3RhcnQgYXR0cmlidXRlIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2F0dHJpYnV0ZV9ucyI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfYXR0cmlidXRlX25zKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHByZWZpeCwgc3RyaW5nIG5hbWUsIHN0cmluZyB1cmkpIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IG5hbWVzcGFjZWQgYXR0cmlidXRlIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2NkYXRhIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9jZGF0YShyZXNvdXJjZSB4bWx3cml0ZXIpIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IENEQVRBIHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9jb21tZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9jb21tZW50KHJlc291cmNlIHhtbHdyaXRlcikiLAogICAgICAgICJDcmVhdGUgc3RhcnQgY29tbWVudCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9kb2N1bWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfZG9jdW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgdmVyc2lvbiwgc3RyaW5nIGVuY29kaW5nLCBzdHJpbmcgc3RhbmRhbG9uZSkiLAogICAgICAgICJDcmVhdGUgZG9jdW1lbnQgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2R0ZCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfZHRkKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUsIHN0cmluZyBwdWJpZCwgc3RyaW5nIHN5c2lkKSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBEVEQgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3N0YXJ0X2R0ZF9hdHRsaXN0IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9kdGRfYXR0bGlzdChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBEVEQgQXR0TGlzdCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9kdGRfZWxlbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfZHRkX2VsZW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZSkiLAogICAgICAgICJDcmVhdGUgc3RhcnQgRFREIGVsZW1lbnQgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfZHRkX2VudGl0eSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfZHRkX2VudGl0eShyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lLCBib29sIGlzcGFyYW0pIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IERURCBFbnRpdHkgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfZWxlbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfc3RhcnRfZWxlbWVudChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBzdGFydCBlbGVtZW50IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl9zdGFydF9lbGVtZW50X25zIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl9zdGFydF9lbGVtZW50X25zKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHByZWZpeCwgc3RyaW5nIG5hbWUsIHN0cmluZyB1cmkpIiwKICAgICAgICAiQ3JlYXRlIHN0YXJ0IG5hbWVzcGFjZWQgZWxlbWVudCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfc3RhcnRfcGkiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3N0YXJ0X3BpKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHRhcmdldCkiLAogICAgICAgICJDcmVhdGUgc3RhcnQgUEkgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3RleHQiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3RleHQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgY29udGVudCkiLAogICAgICAgICJXcml0ZSB0ZXh0IC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX2F0dHJpYnV0ZSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWUsIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIldyaXRlIGZ1bGwgYXR0cmlidXRlIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX2F0dHJpYnV0ZV9ucyI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfYXR0cmlidXRlX25zKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHByZWZpeCwgc3RyaW5nIG5hbWUsIHN0cmluZyB1cmksIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIldyaXRlIGZ1bGwgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfY2RhdGEiOiBbCiAgICAgICAgImJvb2wgeG1sd3JpdGVyX3dyaXRlX2NkYXRhKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBDREFUQSB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfY29tbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfY29tbWVudChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIldyaXRlIGZ1bGwgY29tbWVudCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfZHRkIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9kdGQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZSwgc3RyaW5nIHB1YmlkLCBzdHJpbmcgc3lzaWQsIHN0cmluZyBzdWJzZXQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBEVEQgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX2R0ZF9hdHRsaXN0IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9kdGRfYXR0bGlzdChyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lLCBzdHJpbmcgY29udGVudCkiLAogICAgICAgICJXcml0ZSBmdWxsIERURCBBdHRMaXN0IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9kdGRfZWxlbWVudCI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfZHRkX2VsZW1lbnQocmVzb3VyY2UgeG1sd3JpdGVyLCBzdHJpbmcgbmFtZSwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgZnVsbCBEVEQgZWxlbWVudCB0YWcgLSByZXR1cm5zIEZBTFNFIG9uIGVycm9yIgogICAgXSwKICAgICJ4bWx3cml0ZXJfd3JpdGVfZHRkX2VudGl0eSI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfZHRkX2VudGl0eShyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyBuYW1lLCBzdHJpbmcgY29udGVudCBbLCBpbnQgcGUgWywgc3RyaW5nIHB1YmlkIFssIHN0cmluZyBzeXNpZCBbLCBzdHJpbmcgbmRhdGFpZF1dXV0pIiwKICAgICAgICAiV3JpdGUgZnVsbCBEVEQgRW50aXR5IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9lbGVtZW50IjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9lbGVtZW50KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIG5hbWVbLCBzdHJpbmcgY29udGVudF0pIiwKICAgICAgICAiV3JpdGUgZnVsbCBlbGVtZW50IHRhZyAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhtbHdyaXRlcl93cml0ZV9lbGVtZW50X25zIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9lbGVtZW50X25zKHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIHByZWZpeCwgc3RyaW5nIG5hbWUsIHN0cmluZyB1cmlbLCBzdHJpbmcgY29udGVudF0pIiwKICAgICAgICAiV3JpdGUgZnVsbCBuYW1lc3BhY2VkIGVsZW1lbnQgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX3BpIjogWwogICAgICAgICJib29sIHhtbHdyaXRlcl93cml0ZV9waShyZXNvdXJjZSB4bWx3cml0ZXIsIHN0cmluZyB0YXJnZXQsIHN0cmluZyBjb250ZW50KSIsCiAgICAgICAgIldyaXRlIGZ1bGwgUEkgdGFnIC0gcmV0dXJucyBGQUxTRSBvbiBlcnJvciIKICAgIF0sCiAgICAieG1sd3JpdGVyX3dyaXRlX3JhdyI6IFsKICAgICAgICAiYm9vbCB4bWx3cml0ZXJfd3JpdGVfcmF3KHJlc291cmNlIHhtbHdyaXRlciwgc3RyaW5nIGNvbnRlbnQpIiwKICAgICAgICAiV3JpdGUgdGV4dCAtIHJldHVybnMgRkFMU0Ugb24gZXJyb3IiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX2dldF9wYXJhbWV0ZXIiOiBbCiAgICAgICAgInN0cmluZyB4c2xfeHNsdHByb2Nlc3Nvcl9nZXRfcGFyYW1ldGVyKHN0cmluZyBuYW1lc3BhY2UsIHN0cmluZyBuYW1lKTsiLAogICAgICAgICIiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX2hhc19leHNsdF9zdXBwb3J0IjogWwogICAgICAgICJib29sIHhzbF94c2x0cHJvY2Vzc29yX2hhc19leHNsdF9zdXBwb3J0KCk7IiwKICAgICAgICAiIgogICAgXSwKICAgICJ4c2xfeHNsdHByb2Nlc3Nvcl9pbXBvcnRfc3R5bGVzaGVldCI6IFsKICAgICAgICAidm9pZCB4c2xfeHNsdHByb2Nlc3Nvcl9pbXBvcnRfc3R5bGVzaGVldChkb21kb2N1bWVudCBkb2MpOyIsCiAgICAgICAgIlVSTDogaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1Db3JlLTIwMDMwMjI2L0RPTTMtQ29yZS5odG1sIyBTaW5jZToiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX3JlZ2lzdGVyX3BocF9mdW5jdGlvbnMiOiBbCiAgICAgICAgInZvaWQgeHNsX3hzbHRwcm9jZXNzb3JfcmVnaXN0ZXJfcGhwX2Z1bmN0aW9ucyhbbWl4ZWQgJHJlc3RyaWN0XSk7IiwKICAgICAgICAiIgogICAgXSwKICAgICJ4c2xfeHNsdHByb2Nlc3Nvcl9yZW1vdmVfcGFyYW1ldGVyIjogWwogICAgICAgICJib29sIHhzbF94c2x0cHJvY2Vzc29yX3JlbW92ZV9wYXJhbWV0ZXIoc3RyaW5nIG5hbWVzcGFjZSwgc3RyaW5nIG5hbWUpOyIsCiAgICAgICAgIiIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3Jfc2V0X3BhcmFtZXRlciI6IFsKICAgICAgICAiYm9vbCB4c2xfeHNsdHByb2Nlc3Nvcl9zZXRfcGFyYW1ldGVyKHN0cmluZyBuYW1lc3BhY2UsIG1peGVkIG5hbWUgWywgc3RyaW5nIHZhbHVlXSk7IiwKICAgICAgICAiIgogICAgXSwKICAgICJ4c2xfeHNsdHByb2Nlc3Nvcl9zZXRfcHJvZmlsaW5nIjogWwogICAgICAgICJib29sIHhzbF94c2x0cHJvY2Vzc29yX3NldF9wcm9maWxpbmcoc3RyaW5nIGZpbGVuYW1lKSAqLyIsCiAgICAgICAgIlBIUF9GVU5DVElPTih4c2xfeHNsdHByb2Nlc3Nvcl9zZXRfcHJvZmlsaW5nKSB7ICB6dmFsICppZDsgIHhzbF9vYmplY3QgKmludGVybjsgIGNoYXIgKmZpbGVuYW1lID0gTlVMTDsgIGludCBmaWxlbmFtZV9sZW47ICBET01fR0VUX1RISVMoaWQpOyAgIGlmICh6ZW5kX3BhcnNlX3BhcmFtZXRlcnNfZXgoWkVORF9QQVJTRV9QQVJBTVNfUVVJRVQsIFpFTkRfTlVNX0FSR1MoKSBUU1JNTFNfQ0MsIFwicyFcIiwgJmZpbGVuYW1lLCAmZmlsZW5hbWVfbGVuKSA9PSBTVUNDRVNTKSB7ICAgaW50ZXJuID0gKHhzbF9vYmplY3QgKil6ZW5kX29iamVjdF9zdG9yZV9nZXRfb2JqZWN0KGlkIFRTUk1MU19DQyk7ICAgaWYgKGludGVybi0+cHJvZmlsaW5nKSB7ICAgIGVmcmVlKGludGVybi0+cHJvZmlsaW5nKTsgICB9ICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsgICAgaW50ZXJuLT5wcm9maWxpbmcgPSBlc3RybmR1cChmaWxlbmFtZSxmaWxlbmFtZV9sZW4pOyAgIH0gZWxzZSB7ICAgIGludGVybi0+cHJvZmlsaW5nID0gTlVMTDsgICB9ICAgUkVUVVJOX1RSVUU7ICB9IGVsc2UgeyAgIFdST05HX1BBUkFNX0NPVU5UOyAgfSB9IC8qIH19fSBlbmQgeHNsX3hzbHRwcm9jZXNzb3Jfc2V0X3Byb2ZpbGluZyIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3JfdHJhbnNmb3JtX3RvX2RvYyI6IFsKICAgICAgICAiZG9tZG9jdW1lbnQgeHNsX3hzbHRwcm9jZXNzb3JfdHJhbnNmb3JtX3RvX2RvYyhkb21ub2RlIGRvYyk7IiwKICAgICAgICAiVVJMOiBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUNvcmUtMjAwMzAyMjYvRE9NMy1Db3JlLmh0bWwjIFNpbmNlOiIKICAgIF0sCiAgICAieHNsX3hzbHRwcm9jZXNzb3JfdHJhbnNmb3JtX3RvX3VyaSI6IFsKICAgICAgICAiaW50IHhzbF94c2x0cHJvY2Vzc29yX3RyYW5zZm9ybV90b191cmkoZG9tZG9jdW1lbnQgZG9jLCBzdHJpbmcgdXJpKTsiLAogICAgICAgICIiCiAgICBdLAogICAgInhzbF94c2x0cHJvY2Vzc29yX3RyYW5zZm9ybV90b194bWwiOiBbCiAgICAgICAgInN0cmluZyB4c2xfeHNsdHByb2Nlc3Nvcl90cmFuc2Zvcm1fdG9feG1sKGRvbWRvY3VtZW50IGRvYyk7IiwKICAgICAgICAiIgogICAgXSwKICAgICJ6ZW5kX2xvZ29fZ3VpZCI6IFsKICAgICAgICAic3RyaW5nIHplbmRfbG9nb19ndWlkKHZvaWQpIiwKICAgICAgICAiUmV0dXJuIHRoZSBzcGVjaWFsIElEIHVzZWQgdG8gcmVxdWVzdCB0aGUgWmVuZCBsb2dvIGluIHBocGluZm8gc2NyZWVucyIKICAgIF0sCiAgICAiemVuZF92ZXJzaW9uIjogWwogICAgICAgICJzdHJpbmcgemVuZF92ZXJzaW9uKHZvaWQpIiwKICAgICAgICAiR2V0IHRoZSB2ZXJzaW9uIG9mIHRoZSBaZW5kIEVuZ2luZSIKICAgIF0sCiAgICAiemlwX2Nsb3NlIjogWwogICAgICAgICJ2b2lkIHppcF9jbG9zZShyZXNvdXJjZSB6aXApIiwKICAgICAgICAiQ2xvc2UgYSBaaXAgYXJjaGl2ZSIKICAgIF0sCiAgICAiemlwX2VudHJ5X2Nsb3NlIjogWwogICAgICAgICJ2b2lkIHppcF9lbnRyeV9jbG9zZShyZXNvdXJjZSB6aXBfZW50KSIsCiAgICAgICAgIkNsb3NlIGEgemlwIGVudHJ5IgogICAgXSwKICAgICJ6aXBfZW50cnlfY29tcHJlc3NlZHNpemUiOiBbCiAgICAgICAgImludCB6aXBfZW50cnlfY29tcHJlc3NlZHNpemUocmVzb3VyY2UgemlwX2VudHJ5KSIsCiAgICAgICAgIlJldHVybiB0aGUgY29tcHJlc3NlZCBzaXplIG9mIGEgWlppcCBlbnRyeSIKICAgIF0sCiAgICAiemlwX2VudHJ5X2NvbXByZXNzaW9ubWV0aG9kIjogWwogICAgICAgICJzdHJpbmcgemlwX2VudHJ5X2NvbXByZXNzaW9ubWV0aG9kKHJlc291cmNlIHppcF9lbnRyeSkiLAogICAgICAgICJSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tcHJlc3Npb24gbWV0aG9kIHVzZWQgb24gYSBwYXJ0aWN1bGFyIGVudHJ5IgogICAgXSwKICAgICJ6aXBfZW50cnlfZmlsZXNpemUiOiBbCiAgICAgICAgImludCB6aXBfZW50cnlfZmlsZXNpemUocmVzb3VyY2UgemlwX2VudHJ5KSIsCiAgICAgICAgIlJldHVybiB0aGUgYWN0dWFsIGZpbGVzaXplIG9mIGEgWlppcCBlbnRyeSIKICAgIF0sCiAgICAiemlwX2VudHJ5X25hbWUiOiBbCiAgICAgICAgInN0cmluZyB6aXBfZW50cnlfbmFtZShyZXNvdXJjZSB6aXBfZW50cnkpIiwKICAgICAgICAiUmV0dXJuIHRoZSBuYW1lIGdpdmVuIGEgWlppcCBlbnRyeSIKICAgIF0sCiAgICAiemlwX2VudHJ5X29wZW4iOiBbCiAgICAgICAgImJvb2wgemlwX2VudHJ5X29wZW4ocmVzb3VyY2UgemlwX2RwLCByZXNvdXJjZSB6aXBfZW50cnkgWywgc3RyaW5nIG1vZGVdKSIsCiAgICAgICAgIk9wZW4gYSBaaXAgRmlsZSwgcG9pbnRlZCBieSB0aGUgcmVzb3VyY2UgZW50cnkiCiAgICBdLAogICAgInppcF9lbnRyeV9yZWFkIjogWwogICAgICAgICJtaXhlZCB6aXBfZW50cnlfcmVhZChyZXNvdXJjZSB6aXBfZW50cnkgWywgaW50IGxlbl0pIiwKICAgICAgICAiUmVhZCBmcm9tIGFuIG9wZW4gZGlyZWN0b3J5IGVudHJ5IgogICAgXSwKICAgICJ6aXBfb3BlbiI6IFsKICAgICAgICAicmVzb3VyY2UgemlwX29wZW4oc3RyaW5nIGZpbGVuYW1lKSIsCiAgICAgICAgIkNyZWF0ZSBuZXcgemlwIHVzaW5nIHNvdXJjZSB1cmkgZm9yIG91dHB1dCIKICAgIF0sCiAgICAiemlwX3JlYWQiOiBbCiAgICAgICAgInJlc291cmNlIHppcF9yZWFkKHJlc291cmNlIHppcCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBuZXh0IGZpbGUgaW4gdGhlIGFyY2hpdmUiCiAgICBdLAogICAgInpsaWJfZ2V0X2NvZGluZ190eXBlIjogWwogICAgICAgICJzdHJpbmcgemxpYl9nZXRfY29kaW5nX3R5cGUodm9pZCkiLAogICAgICAgICJSZXR1cm5zIHRoZSBjb2RpbmcgdHlwZSB1c2VkIGZvciBvdXRwdXQgY29tcHJlc3Npb24iCiAgICBdCn07Cgp2YXIgdmFyaWFibGVNYXAgPSB7CiAgICAiJF9DT09LSUUiOiB7CiAgICAgICAgdHlwZTogImFycmF5IgogICAgfSwKICAgICIkX0VOViI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9LAogICAgIiRfRklMRVMiOiB7CiAgICAgICAgdHlwZTogImFycmF5IgogICAgfSwKICAgICIkX0dFVCI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9LAogICAgIiRfUE9TVCI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9LAogICAgIiRfUkVRVUVTVCI6IHsKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICB9LAogICAgIiRfU0VSVkVSIjogewogICAgICAgIHR5cGU6ICJhcnJheSIsCiAgICAgICAgdmFsdWU6IHsKICAgICAgICAgICAgIkRPQ1VNRU5UX1JPT1QiOiAgMSwKICAgICAgICAgICAgIkdBVEVXQVlfSU5URVJGQUNFIjogIDEsCiAgICAgICAgICAgICJIVFRQX0FDQ0VQVCI6ICAxLAogICAgICAgICAgICAiSFRUUF9BQ0NFUFRfQ0hBUlNFVCI6ICAxLAogICAgICAgICAgICAiSFRUUF9BQ0NFUFRfRU5DT0RJTkciOiAgMSAsCiAgICAgICAgICAgICJIVFRQX0FDQ0VQVF9MQU5HVUFHRSI6ICAxLAogICAgICAgICAgICAiSFRUUF9DT05ORUNUSU9OIjogIDEsCiAgICAgICAgICAgICJIVFRQX0hPU1QiOiAgMSwKICAgICAgICAgICAgIkhUVFBfUkVGRVJFUiI6ICAxLAogICAgICAgICAgICAiSFRUUF9VU0VSX0FHRU5UIjogIDEsCiAgICAgICAgICAgICJQQVRIX1RSQU5TTEFURUQiOiAgMSwKICAgICAgICAgICAgIlBIUF9TRUxGIjogIDEsCiAgICAgICAgICAgICJRVUVSWV9TVFJJTkciOiAgMSwKICAgICAgICAgICAgIlJFTU9URV9BRERSIjogIDEsCiAgICAgICAgICAgICJSRU1PVEVfUE9SVCI6ICAxLAogICAgICAgICAgICAiUkVRVUVTVF9NRVRIT0QiOiAgMSwKICAgICAgICAgICAgIlJFUVVFU1RfVVJJIjogIDEsCiAgICAgICAgICAgICJTQ1JJUFRfRklMRU5BTUUiOiAgMSwKICAgICAgICAgICAgIlNDUklQVF9OQU1FIjogIDEsCiAgICAgICAgICAgICJTRVJWRVJfQURNSU4iOiAgMSwKICAgICAgICAgICAgIlNFUlZFUl9OQU1FIjogIDEsCiAgICAgICAgICAgICJTRVJWRVJfUE9SVCI6ICAxLAogICAgICAgICAgICAiU0VSVkVSX1BST1RPQ09MIjogIDEsCiAgICAgICAgICAgICJTRVJWRVJfU0lHTkFUVVJFIjogIDEsCiAgICAgICAgICAgICJTRVJWRVJfU09GVFdBUkUiOiAgMQogICAgICAgIH0KICAgIH0sCiAgICAiJF9TRVNTSU9OIjogewogICAgICAgIHR5cGU6ICJhcnJheSIKICAgIH0sCiAgICAiJEdMT0JBTFMiOiB7CiAgICAgICAgdHlwZTogImFycmF5IgogICAgfQp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUpID4gLTE7Cn0KCnZhciBQaHBDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KHBvcy5yb3csIHBvcy5jb2x1bW4pOwoKICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgCiAgICAgICAgaWYgKHRva2VuLnR5cGU9PT0nc3VwcG9ydC5waHBfdGFnJyAmJiB0b2tlbi52YWx1ZT09PSc8PycpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKHRva2VuLnR5cGU9PT0naWRlbnRpZmllcicpIHsKICAgICAgICAgICAgaWYgKHRva2VuLmluZGV4ID4gMCkgewogICAgICAgICAgICAgICAgdmFyIHByZXZUb2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCB0b2tlbi5zdGFydCk7CiAgICAgICAgICAgICAgICBpZiAocHJldlRva2VuLnR5cGU9PT0nc3VwcG9ydC5waHBfdGFnJykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnVuY3Rpb25Db21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIH0KICAgICAgICBpZiAoaXModG9rZW4sICJ2YXJpYWJsZSIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIGlmICh0b2tlbi50eXBlPT09J3N0cmluZycgJiYgLyhcJFtcd10qKVxbWyInXShbXiciXSopJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEFycmF5S2V5Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKCiAgICAgICAgcmV0dXJuIFtdOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRUYWdDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiBbewogICAgICAgICAgICBjYXB0aW9uOiAncGhwJywKICAgICAgICAgICAgdmFsdWU6ICdwaHAnLAogICAgICAgICAgICBtZXRhOiAicGhwIHRhZyIsCiAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXB0aW9uOiAnPScsCiAgICAgICAgICAgIHZhbHVlOiAnPScsCiAgICAgICAgICAgIG1ldGE6ICJwaHAgdGFnIiwKICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICB9XTsKICAgIH07CgogICAgdGhpcy5nZXRGdW5jdGlvbkNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IE9iamVjdC5rZXlzKGZ1bmN0aW9uTWFwKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25zLm1hcChmdW5jdGlvbihmdW5jKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IGZ1bmMsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiBmdW5jICsgJygkMCknLAogICAgICAgICAgICAgICAgbWV0YTogInBocCBmdW5jdGlvbiIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMCwKICAgICAgICAgICAgICAgIGRvY0hUTUw6IGZ1bmN0aW9uTWFwW2Z1bmNdWzFdCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0VmFyaWFibGVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB2YXJpYWJsZXMgPSBPYmplY3Qua2V5cyh2YXJpYWJsZU1hcCk7CiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcy5tYXAoZnVuY3Rpb24odmFyaWFibGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFyaWFibGUsCiAgICAgICAgICAgICAgICB2YWx1ZTogdmFyaWFibGUsCiAgICAgICAgICAgICAgICBtZXRhOiAicGhwIHZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXJyYXlLZXlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgdmFyaWFibGUgPSBsaW5lLm1hdGNoKC8oXCRbXHddKilcW1siJ10oW14nIl0qKSQvaSlbMV07CgogICAgICAgIGlmICghdmFyaWFibGVNYXBbdmFyaWFibGVdKSB7CiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB9CgogICAgICAgIHZhciBrZXlzID0gW107CiAgICAgICAgaWYgKHZhcmlhYmxlTWFwW3ZhcmlhYmxlXS50eXBlPT09J2FycmF5JyAmJiB2YXJpYWJsZU1hcFt2YXJpYWJsZV0udmFsdWUpCiAgICAgICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YXJpYWJsZU1hcFt2YXJpYWJsZV0udmFsdWUpOwoKICAgICAgICByZXR1cm4ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBrZXksCiAgICAgICAgICAgICAgICB2YWx1ZToga2V5LAogICAgICAgICAgICAgICAgbWV0YTogInBocCBhcnJheSBrZXkiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKFBocENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLlBocENvbXBsZXRpb25zID0gUGhwQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwogICAgCiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJHF1b3RlcyA9IHsnIic6ICciJywgIiciOiAiJyIsICJgIjogImAifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CiAgICAgICAgdmFyIGVuZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiIHx8IHN0YXRlID09ICJub19yZWdleCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKjp8W1x7XChcW10pXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CiAgICAgICAgICAgIGlmIChlbmRTdGF0ZSA9PSAic3RhcnQiIHx8IGVuZFN0YXRlID09ICJub19yZWdleCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsICJKYXZhU2NyaXB0V29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKHJlc3VsdHMpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhyZXN1bHRzLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvamF2YXNjcmlwdCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9saWIvbGFuZyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9Cgp2YXIgWG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CiAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBzZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwoKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSAmJiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSB8fCBpcyh0b2tlbiwgInN0cmluZyIpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgd2hpbGUgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgIndoaXRlc3BhY2UiKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmlnaHRTcGFjZSA9ICFyaWdodENoYXIgfHwgcmlnaHRDaGFyLm1hdGNoKC9ccy8pOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtZXF1YWxzIikgJiYgKHJpZ2h0U3BhY2UgfHwgcmlnaHRDaGFyID09ICc+JykgfHwgKGlzKHRva2VuLCAiZGVjbC1hdHRyaWJ1dGUtZXF1YWxzIikgJiYgKHJpZ2h0U3BhY2UgfHwgcmlnaHRDaGFyID09ICc/JykpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxlY3RlZCA9PSAiJyIpKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJhdXRvY2xvc2luZyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7CiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpLnN0YXJ0OwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICBpZiAoIXRva2VuIHx8ICEoaXModG9rZW4sICJ0YWctbmFtZSIpIHx8IGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtZXF1YWxzIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgInJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpIHsKICAgICAgICAgICAgICAgIHZhciB0b2tlbkVuZENvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA8IHRva2VuRW5kQ29sdW1uKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPT0gdG9rZW5FbmRDb2x1bW4pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFRva2VuICYmIGlzKG5leHRUb2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgvXlxzKj4vLnRlc3Qoc2Vzc2lvbi5nZXRMaW5lKHBvc2l0aW9uLnJvdykuc2xpY2UocG9zaXRpb24uY29sdW1uKSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHdoaWxlICghaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09ICI8IikgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHRva2VuUm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgIHZhciB0b2tlbkNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICBpZiAoaXMoaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCksICJlbmQtdGFnLW9wZW4iKSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIGlmICh0b2tlblJvdyA9PSBwb3NpdGlvbi5yb3cpCiAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW5Db2x1bW4pOwoKICAgICAgICAgICAgaWYgKHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KGVsZW1lbnQudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgdGV4dDogIj4iICsgIjwvIiArIGVsZW1lbnQgKyAiPiIsCiAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9pbmRlbnQiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICJcbiIpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwoKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigidGFnLWNsb3NlIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIi8+IikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctbmFtZSIpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGFnID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB2YXIgcm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlLmluZGV4T2YoImVuZC10YWciKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMudm9pZEVsZW1lbnRzICYmICF0aGlzLnZvaWRFbGVtZW50c1t0YWddKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKzEpOwogICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRJbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGVudCA9IG5leHRJbmRlbnQgKyBzZXNzaW9uLmdldFRhYlN0cmluZygpOwoKICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFRva2VuICYmIG5leHRUb2tlbi52YWx1ZSA9PT0gIjwvIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogIlxuIiArIGluZGVudCArICJcbiIgKyBuZXh0SW5kZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50Lmxlbmd0aF0KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogIlxuIiArIGluZGVudAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKCm9vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2aW91cik7CgpleHBvcnRzLlhtbEJlaGF2aW91ciA9IFhtbEJlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihkZWZhdWx0TW9kZSwgc3ViTW9kZXMpIHsKICAgIHRoaXMuZGVmYXVsdE1vZGUgPSBkZWZhdWx0TW9kZTsKICAgIHRoaXMuc3ViTW9kZXMgPSBzdWJNb2RlczsKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKCiAgICB0aGlzLiRnZXRNb2RlID0gZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICBpZiAodHlwZW9mIHN0YXRlICE9ICJzdHJpbmciKSAKICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXTsKICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zdWJNb2RlcykgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZXhPZihrZXkpID09PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViTW9kZXNba2V5XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHN0YXRlKTsKICAgICAgICByZXR1cm4gKG1vZGUgPyBtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIDogIiIpOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSksIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB8fAogICAgICAgICAgICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93KSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKICAgICAgICApOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93KSk7CiAgICAgICAgCiAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQogICAgICAgICAgICBtb2RlID0gdGhpcy5kZWZhdWx0TW9kZTsKICAgICAgICAKICAgICAgICByZXR1cm4gbW9kZS5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKHZvaWRFbGVtZW50cywgb3B0aW9uYWxFbmRUYWdzKSB7CiAgICBCYXNlRm9sZE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gdm9pZEVsZW1lbnRzIHx8IHt9OwogICAgdGhpcy5vcHRpb25hbEVuZFRhZ3MgPSBvb3AubWl4aW4oe30sIHRoaXMudm9pZEVsZW1lbnRzKTsKICAgIGlmIChvcHRpb25hbEVuZFRhZ3MpCiAgICAgICAgb29wLm1peGluKHRoaXMub3B0aW9uYWxFbmRUYWdzLCBvcHRpb25hbEVuZFRhZ3MpOwogICAgCn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCnZhciBUYWcgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMudGFnTmFtZSA9ICIiOwogICAgdGhpcy5jbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnNlbGZDbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnN0YXJ0ID0ge3JvdzogMCwgY29sdW1uOiAwfTsKICAgIHRoaXMuZW5kID0ge3JvdzogMCwgY29sdW1uOiAwfTsKfTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdyk7CgogICAgICAgIGlmICh0YWcuY2xvc2luZyB8fCAoIXRhZy50YWdOYW1lICYmIHRhZy5zZWxmQ2xvc2luZykpCiAgICAgICAgICAgIHJldHVybiBmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIgPyAiZW5kIiA6ICIiOwoKICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRhZy5zZWxmQ2xvc2luZyB8fCB0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eSh0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICBpZiAodGhpcy5fZmluZEVuZFRhZ0luTGluZShzZXNzaW9uLCByb3csIHRhZy50YWdOYW1lLCB0YWcuZW5kLmNvbHVtbikpCiAgICAgICAgICAgIHJldHVybiAiIjsKCiAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICB9OwogICAgCiAgICB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgaWYgKC9jb21tZW50Ly50ZXN0KHNlc3Npb24uZ2V0U3RhdGUocm93KSkgJiYgLzwhLS8udGVzdChzZXNzaW9uLmdldExpbmUocm93KSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSB0YWcuc3RhcnQuY29sdW1uICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbKytpXTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChpKys7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gJy8+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLl9maW5kRW5kVGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCB0YWdOYW1lLCBzdGFydENvbHVtbikgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciBjb2x1bW4gPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0Q29sdW1uKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpICsgMV07CiAgICAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUgPT0gdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5fcmVhZFRhZ0ZvcndhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpKTsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3BvcCA9IGZ1bmN0aW9uKHN0YWNrLCB0YWcpIHsKICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdG9wID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdOwogICAgICAgICAgICBpZiAoIXRhZyB8fCB0b3AudGFnTmFtZSA9PSB0YWcudGFnTmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnBvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9uYWxFbmRUYWdzLmhhc093blByb3BlcnR5KHRvcC50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKCFmaXJzdFRhZykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50Rm9sZFdpZGdldChzZXNzaW9uLCByb3cpCiAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZpcnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CiAgICAgICAgdmFyIHN0YWNrID0gW107CiAgICAgICAgdmFyIHRhZzsKICAgICAgICAKICAgICAgICBpZiAoIWlzQmFja3dhcmQpIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgc3RhcnQgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogZmlyc3RUYWcuc3RhcnQuY29sdW1uICsgZmlyc3RUYWcudGFnTmFtZS5sZW5ndGggKyAyCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChmaXJzdFRhZy5zdGFydC5yb3cgPT0gZmlyc3RUYWcuZW5kLnJvdykKICAgICAgICAgICAgICAgIHN0YXJ0LmNvbHVtbiA9IGZpcnN0VGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnRm9yd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGFnLmNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgdGFnLnN0YXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5lbmQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4KICAgICAgICAgICAgfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnQmFja3dhcmQoaXRlcmF0b3IpKSB7CiAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIHRhZy5lbmQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnN0YXJ0LnJvdyA9PSB0YWcuZW5kLnJvdyAmJiB0YWcuc3RhcnQuY29sdW1uIDwgdGFnLmVuZC5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gdGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgZW5kKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRhZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBNaXhlZEZvbGRNb2RlID0gcmVxdWlyZSgiLi9taXhlZCIpLkZvbGRNb2RlOwp2YXIgWG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKHZvaWRFbGVtZW50cywgb3B0aW9uYWxUYWdzKSB7CiAgICBNaXhlZEZvbGRNb2RlLmNhbGwodGhpcywgbmV3IFhtbEZvbGRNb2RlKHZvaWRFbGVtZW50cywgb3B0aW9uYWxUYWdzKSwgewogICAgICAgICJqcy0iOiBuZXcgQ1N0eWxlRm9sZE1vZGUoKSwKICAgICAgICAiY3NzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpCiAgICB9KTsKfTsKCm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgTWl4ZWRGb2xkTW9kZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgY29tbW9uQXR0cmlidXRlcyA9IFsKICAgICJhY2Nlc3NrZXkiLAogICAgImNsYXNzIiwKICAgICJjb250ZW50ZWRpdGFibGUiLAogICAgImNvbnRleHRtZW51IiwKICAgICJkaXIiLAogICAgImRyYWdnYWJsZSIsCiAgICAiZHJvcHpvbmUiLAogICAgImhpZGRlbiIsCiAgICAiaWQiLAogICAgImluZXJ0IiwKICAgICJpdGVtaWQiLAogICAgIml0ZW1wcm9wIiwKICAgICJpdGVtcmVmIiwKICAgICJpdGVtc2NvcGUiLAogICAgIml0ZW10eXBlIiwKICAgICJsYW5nIiwKICAgICJzcGVsbGNoZWNrIiwKICAgICJzdHlsZSIsCiAgICAidGFiaW5kZXgiLAogICAgInRpdGxlIiwKICAgICJ0cmFuc2xhdGUiCl07Cgp2YXIgZXZlbnRBdHRyaWJ1dGVzID0gWwogICAgIm9uYWJvcnQiLAogICAgIm9uYmx1ciIsCiAgICAib25jYW5jZWwiLAogICAgIm9uY2FucGxheSIsCiAgICAib25jYW5wbGF5dGhyb3VnaCIsCiAgICAib25jaGFuZ2UiLAogICAgIm9uY2xpY2siLAogICAgIm9uY2xvc2UiLAogICAgIm9uY29udGV4dG1lbnUiLAogICAgIm9uY3VlY2hhbmdlIiwKICAgICJvbmRibGNsaWNrIiwKICAgICJvbmRyYWciLAogICAgIm9uZHJhZ2VuZCIsCiAgICAib25kcmFnZW50ZXIiLAogICAgIm9uZHJhZ2xlYXZlIiwKICAgICJvbmRyYWdvdmVyIiwKICAgICJvbmRyYWdzdGFydCIsCiAgICAib25kcm9wIiwKICAgICJvbmR1cmF0aW9uY2hhbmdlIiwKICAgICJvbmVtcHRpZWQiLAogICAgIm9uZW5kZWQiLAogICAgIm9uZXJyb3IiLAogICAgIm9uZm9jdXMiLAogICAgIm9uaW5wdXQiLAogICAgIm9uaW52YWxpZCIsCiAgICAib25rZXlkb3duIiwKICAgICJvbmtleXByZXNzIiwKICAgICJvbmtleXVwIiwKICAgICJvbmxvYWQiLAogICAgIm9ubG9hZGVkZGF0YSIsCiAgICAib25sb2FkZWRtZXRhZGF0YSIsCiAgICAib25sb2Fkc3RhcnQiLAogICAgIm9ubW91c2Vkb3duIiwKICAgICJvbm1vdXNlbW92ZSIsCiAgICAib25tb3VzZW91dCIsCiAgICAib25tb3VzZW92ZXIiLAogICAgIm9ubW91c2V1cCIsCiAgICAib25tb3VzZXdoZWVsIiwKICAgICJvbnBhdXNlIiwKICAgICJvbnBsYXkiLAogICAgIm9ucGxheWluZyIsCiAgICAib25wcm9ncmVzcyIsCiAgICAib25yYXRlY2hhbmdlIiwKICAgICJvbnJlc2V0IiwKICAgICJvbnNjcm9sbCIsCiAgICAib25zZWVrZWQiLAogICAgIm9uc2Vla2luZyIsCiAgICAib25zZWxlY3QiLAogICAgIm9uc2hvdyIsCiAgICAib25zdGFsbGVkIiwKICAgICJvbnN1Ym1pdCIsCiAgICAib25zdXNwZW5kIiwKICAgICJvbnRpbWV1cGRhdGUiLAogICAgIm9udm9sdW1lY2hhbmdlIiwKICAgICJvbndhaXRpbmciCl07Cgp2YXIgZ2xvYmFsQXR0cmlidXRlcyA9IGNvbW1vbkF0dHJpYnV0ZXMuY29uY2F0KGV2ZW50QXR0cmlidXRlcyk7Cgp2YXIgYXR0cmlidXRlTWFwID0gewogICAgImEiOiB7ImhyZWYiOiAxLCAidGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAidG9wIjogMX0sICJwaW5nIjogMSwgInJlbCI6IHsibm9mb2xsb3ciOiAxLCAiYWx0ZXJuYXRlIjogMSwgImF1dGhvciI6IDEsICJib29rbWFyayI6IDEsICJoZWxwIjogMSwgImxpY2Vuc2UiOiAxLCAibmV4dCI6IDEsICJub3JlZmVycmVyIjogMSwgInByZWZldGNoIjogMSwgInByZXYiOiAxLCAic2VhcmNoIjogMSwgInRhZyI6IDF9LCAibWVkaWEiOiAxLCAiaHJlZmxhbmciOiAxLCAidHlwZSI6IDF9LAogICAgImFiYnIiOiB7fSwKICAgICJhZGRyZXNzIjoge30sCiAgICAiYXJlYSI6IHsic2hhcGUiOiAxLCAiY29vcmRzIjogMSwgImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAiYWx0IjogMSwgInRhcmdldCI6IDEsICJtZWRpYSI6IDEsICJyZWwiOiAxLCAicGluZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYXJ0aWNsZSI6IHsicHViZGF0ZSI6IDF9LAogICAgImFzaWRlIjoge30sCiAgICAiYXVkaW8iOiB7InNyYyI6IDEsICJhdXRvYnVmZmVyIjogMSwgImF1dG9wbGF5IjogeyJhdXRvcGxheSI6IDF9LCAibG9vcCI6IHsibG9vcCI6IDF9LCAiY29udHJvbHMiOiB7ImNvbnRyb2xzIjogMX0sICJtdXRlZCI6IHsibXV0ZWQiOiAxfSwgInByZWxvYWQiOiB7ImF1dG8iOiAxLCAibWV0YWRhdGEiOiAxLCAibm9uZSI6IDEgfX0sCiAgICAiYiI6IHt9LAogICAgImJhc2UiOiB7ImhyZWYiOiAxLCAidGFyZ2V0IjogMX0sCiAgICAiYmRpIjoge30sCiAgICAiYmRvIjoge30sCiAgICAiYmxvY2txdW90ZSI6IHsiY2l0ZSI6IDF9LAogICAgImJvZHkiOiB7Im9uYWZ0ZXJwcmludCI6IDEsICJvbmJlZm9yZXByaW50IjogMSwgIm9uYmVmb3JldW5sb2FkIjogMSwgIm9uaGFzaGNoYW5nZSI6IDEsICJvbm1lc3NhZ2UiOiAxLCAib25vZmZsaW5lIjogMSwgIm9ucG9wc3RhdGUiOiAxLCAib25yZWRvIjogMSwgIm9ucmVzaXplIjogMSwgIm9uc3RvcmFnZSI6IDEsICJvbnVuZG8iOiAxLCAib251bmxvYWQiOiAxfSwKICAgICJiciI6IHt9LAogICAgImJ1dHRvbiI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogMSwgImZvcm1tZXRob2QiOiAxLCAiZm9ybW5vdmFsaWRhdGUiOiAxLCAiZm9ybXRhcmdldCI6IDEsICJuYW1lIjogMSwgInZhbHVlIjogMSwgInR5cGUiOiB7ImJ1dHRvbiI6IDEsICJzdWJtaXQiOiAxfX0sCiAgICAiY2FudmFzIjogeyJ3aWR0aCI6IDEsICJoZWlnaHQiOiAxfSwKICAgICJjYXB0aW9uIjoge30sCiAgICAiY2l0ZSI6IHt9LAogICAgImNvZGUiOiB7fSwKICAgICJjb2wiOiB7InNwYW4iOiAxfSwKICAgICJjb2xncm91cCI6IHsic3BhbiI6IDF9LAogICAgImNvbW1hbmQiOiB7InR5cGUiOiAxLCAibGFiZWwiOiAxLCAiaWNvbiI6IDEsICJkaXNhYmxlZCI6IDEsICJjaGVja2VkIjogMSwgInJhZGlvZ3JvdXAiOiAxLCAiY29tbWFuZCI6IDF9LAogICAgImRhdGEiOiB7fSwKICAgICJkYXRhbGlzdCI6IHt9LAogICAgImRkIjoge30sCiAgICAiZGVsIjogeyJjaXRlIjogMSwgImRhdGV0aW1lIjogMX0sCiAgICAiZGV0YWlscyI6IHsib3BlbiI6IDF9LAogICAgImRmbiI6IHt9LAogICAgImRpYWxvZyI6IHsib3BlbiI6IDF9LAogICAgImRpdiI6IHt9LAogICAgImRsIjoge30sCiAgICAiZHQiOiB7fSwKICAgICJlbSI6IHt9LAogICAgImVtYmVkIjogeyJzcmMiOiAxLCAiaGVpZ2h0IjogMSwgIndpZHRoIjogMSwgInR5cGUiOiAxfSwKICAgICJmaWVsZHNldCI6IHsiZGlzYWJsZWQiOiAxLCAiZm9ybSI6IDEsICJuYW1lIjogMX0sCiAgICAiZmlnY2FwdGlvbiI6IHt9LAogICAgImZpZ3VyZSI6IHt9LAogICAgImZvb3RlciI6IHt9LAogICAgImZvcm0iOiB7ImFjY2VwdC1jaGFyc2V0IjogMSwgImFjdGlvbiI6IDEsICJhdXRvY29tcGxldGUiOiAxLCAiZW5jdHlwZSI6IHsibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxfSwgIm1ldGhvZCI6IHsiZ2V0IjogMSwgInBvc3QiOiAxfSwgIm5hbWUiOiAxLCAibm92YWxpZGF0ZSI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfX0sCiAgICAiaDEiOiB7fSwKICAgICJoMiI6IHt9LAogICAgImgzIjoge30sCiAgICAiaDQiOiB7fSwKICAgICJoNSI6IHt9LAogICAgImg2Ijoge30sCiAgICAiaGVhZCI6IHt9LAogICAgImhlYWRlciI6IHt9LAogICAgImhyIjoge30sCiAgICAiaHRtbCI6IHsibWFuaWZlc3QiOiAxfSwKICAgICJpIjoge30sCiAgICAiaWZyYW1lIjogeyJuYW1lIjogMSwgInNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAic2FuZGJveCI6IHsiYWxsb3ctc2FtZS1vcmlnaW4iOiAxLCAiYWxsb3ctdG9wLW5hdmlnYXRpb24iOiAxLCAiYWxsb3ctZm9ybXMiOiAxLCAiYWxsb3ctc2NyaXB0cyI6IDF9LCAic2VhbWxlc3MiOiB7InNlYW1sZXNzIjogMX19LAogICAgImltZyI6IHsiYWx0IjogMSwgInNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgImlzbWFwIjogMX0sCiAgICAiaW5wdXQiOiB7CiAgICAgICAgInR5cGUiOiB7InRleHQiOiAxLCAicGFzc3dvcmQiOiAxLCAiaGlkZGVuIjogMSwgImNoZWNrYm94IjogMSwgInN1Ym1pdCI6IDEsICJyYWRpbyI6IDEsICJmaWxlIjogMSwgImJ1dHRvbiI6IDEsICJyZXNldCI6IDEsICJpbWFnZSI6IDMxLCAiY29sb3IiOiAxLCAiZGF0ZSI6IDEsICJkYXRldGltZSI6IDEsICJkYXRldGltZS1sb2NhbCI6IDEsICJlbWFpbCI6IDEsICJtb250aCI6IDEsICJudW1iZXIiOiAxLCAicmFuZ2UiOiAxLCAic2VhcmNoIjogMSwgInRlbCI6IDEsICJ0aW1lIjogMSwgInVybCI6IDEsICJ3ZWVrIjogMX0sCiAgICAgICAgImFjY2VwdCI6IDEsICJhbHQiOiAxLCAiYXV0b2NvbXBsZXRlIjogeyJvbiI6IDEsICJvZmYiOiAxfSwgImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJjaGVja2VkIjogeyJjaGVja2VkIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAiZm9ybWFjdGlvbiI6IDEsICJmb3JtZW5jdHlwZSI6IHsiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjogMSwgIm11bHRpcGFydC9mb3JtLWRhdGEiOiAxLCAidGV4dC9wbGFpbiI6IDF9LCAiZm9ybW1ldGhvZCI6IHsiZ2V0IjogMSwgInBvc3QiOiAxfSwgImZvcm1ub3ZhbGlkYXRlIjogeyJmb3Jtbm92YWxpZGF0ZSI6IDF9LCAiZm9ybXRhcmdldCI6IHsiX2JsYW5rIjogMSwgIl9zZWxmIjogMSwgIl9wYXJlbnQiOiAxLCAiX3RvcCI6IDF9LCAiaGVpZ2h0IjogMSwgImxpc3QiOiAxLCAibWF4IjogMSwgIm1heGxlbmd0aCI6IDEsICJtaW4iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInBhdHRlcm4iOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInNpemUiOiAxLCAic3JjIjogMSwgInN0ZXAiOiAxLCAid2lkdGgiOiAxLCAiZmlsZXMiOiAxLCAidmFsdWUiOiAxfSwKICAgICJpbnMiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJrYmQiOiB7fSwKICAgICJrZXlnZW4iOiB7ImF1dG9mb2N1cyI6IDEsICJjaGFsbGVuZ2UiOiB7ImNoYWxsZW5nZSI6IDF9LCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImtleXR5cGUiOiB7InJzYSI6IDEsICJkc2EiOiAxLCAiZWMiOiAxfSwgIm5hbWUiOiAxfSwKICAgICJsYWJlbCI6IHsiZm9ybSI6IDEsICJmb3IiOiAxfSwKICAgICJsZWdlbmQiOiB7fSwKICAgICJsaSI6IHsidmFsdWUiOiAxfSwKICAgICJsaW5rIjogeyJocmVmIjogMSwgImhyZWZsYW5nIjogMSwgInJlbCI6IHsic3R5bGVzaGVldCI6IDEsICJpY29uIjogMX0sICJtZWRpYSI6IHsiYWxsIjogMSwgInNjcmVlbiI6IDEsICJwcmludCI6IDF9LCAidHlwZSI6IHsidGV4dC9jc3MiOiAxLCAiaW1hZ2UvcG5nIjogMSwgImltYWdlL2pwZWciOiAxLCAiaW1hZ2UvZ2lmIjogMX0sICJzaXplcyI6IDF9LAogICAgIm1haW4iOiB7fSwKICAgICJtYXAiOiB7Im5hbWUiOiAxfSwKICAgICJtYXJrIjoge30sCiAgICAibWF0aCI6IHt9LAogICAgIm1lbnUiOiB7InR5cGUiOiAxLCAibGFiZWwiOiAxfSwKICAgICJtZXRhIjogeyJodHRwLWVxdWl2IjogeyJjb250ZW50LXR5cGUiOiAxfSwgIm5hbWUiOiB7ImRlc2NyaXB0aW9uIjogMSwgImtleXdvcmRzIjogMX0sICJjb250ZW50IjogeyJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiOiAxfSwgImNoYXJzZXQiOiAxfSwKICAgICJtZXRlciI6IHsidmFsdWUiOiAxLCAibWluIjogMSwgIm1heCI6IDEsICJsb3ciOiAxLCAiaGlnaCI6IDEsICJvcHRpbXVtIjogMX0sCiAgICAibmF2Ijoge30sCiAgICAibm9zY3JpcHQiOiB7ImhyZWYiOiAxfSwKICAgICJvYmplY3QiOiB7InBhcmFtIjogMSwgImRhdGEiOiAxLCAidHlwZSI6IDEsICJoZWlnaHQiIDogMSwgIndpZHRoIjogMSwgInVzZW1hcCI6IDEsICJuYW1lIjogMSwgImZvcm0iOiAxLCAiY2xhc3NpZCI6IDF9LAogICAgIm9sIjogeyJzdGFydCI6IDEsICJyZXZlcnNlZCI6IDF9LAogICAgIm9wdGdyb3VwIjogeyJkaXNhYmxlZCI6IDEsICJsYWJlbCI6IDF9LAogICAgIm9wdGlvbiI6IHsiZGlzYWJsZWQiOiAxLCAic2VsZWN0ZWQiOiAxLCAibGFiZWwiOiAxLCAidmFsdWUiOiAxfSwKICAgICJvdXRwdXQiOiB7ImZvciI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJwIjoge30sCiAgICAicGFyYW0iOiB7Im5hbWUiOiAxLCAidmFsdWUiOiAxfSwKICAgICJwcmUiOiB7fSwKICAgICJwcm9ncmVzcyI6IHsidmFsdWUiOiAxLCAibWF4IjogMX0sCiAgICAicSI6IHsiY2l0ZSI6IDF9LAogICAgInJwIjoge30sCiAgICAicnQiOiB7fSwKICAgICJydWJ5Ijoge30sCiAgICAicyI6IHt9LAogICAgInNhbXAiOiB7fSwKICAgICJzY3JpcHQiOiB7ImNoYXJzZXQiOiAxLCAidHlwZSI6IHsidGV4dC9qYXZhc2NyaXB0IjogMX0sICJzcmMiOiAxLCAiZGVmZXIiOiAxLCAiYXN5bmMiOiAxfSwKICAgICJzZWxlY3QiOiB7ImF1dG9mb2N1cyI6IDEsICJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm11bHRpcGxlIjogeyJtdWx0aXBsZSI6IDF9LCAibmFtZSI6IDEsICJzaXplIjogMSwgInJlYWRvbmx5Ijp7InJlYWRvbmx5IjogMX19LAogICAgInNtYWxsIjoge30sCiAgICAic291cmNlIjogeyJzcmMiOiAxLCAidHlwZSI6IDEsICJtZWRpYSI6IDF9LAogICAgInNwYW4iOiB7fSwKICAgICJzdHJvbmciOiB7fSwKICAgICJzdHlsZSI6IHsidHlwZSI6IDEsICJtZWRpYSI6IHsiYWxsIjogMSwgInNjcmVlbiI6IDEsICJwcmludCI6IDF9LCAic2NvcGVkIjogMX0sCiAgICAic3ViIjoge30sCiAgICAic3VwIjoge30sCiAgICAic3ZnIjoge30sCiAgICAidGFibGUiOiB7InN1bW1hcnkiOiAxfSwKICAgICJ0Ym9keSI6IHt9LAogICAgInRkIjogeyJoZWFkZXJzIjogMSwgInJvd3NwYW4iOiAxLCAiY29sc3BhbiI6IDF9LAogICAgInRleHRhcmVhIjogeyJhdXRvZm9jdXMiOiB7ImF1dG9mb2N1cyI6IDF9LCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgIm1heGxlbmd0aCI6IDEsICJuYW1lIjogMSwgInBsYWNlaG9sZGVyIjogMSwgInJlYWRvbmx5IjogeyJyZWFkb25seSI6IDF9LCAicmVxdWlyZWQiOiB7InJlcXVpcmVkIjogMX0sICJyb3dzIjogMSwgImNvbHMiOiAxLCAid3JhcCI6IHsib24iOiAxLCAib2ZmIjogMSwgImhhcmQiOiAxLCAic29mdCI6IDF9fSwKICAgICJ0Zm9vdCI6IHt9LAogICAgInRoIjogeyJoZWFkZXJzIjogMSwgInJvd3NwYW4iOiAxLCAiY29sc3BhbiI6IDEsICJzY29wZSI6IDF9LAogICAgInRoZWFkIjoge30sCiAgICAidGltZSI6IHsiZGF0ZXRpbWUiOiAxfSwKICAgICJ0aXRsZSI6IHt9LAogICAgInRyIjoge30sCiAgICAidHJhY2siOiB7ImtpbmQiOiAxLCAic3JjIjogMSwgInNyY2xhbmciOiAxLCAibGFiZWwiOiAxLCAiZGVmYXVsdCI6IDF9LAogICAgInNlY3Rpb24iOiB7fSwKICAgICJzdW1tYXJ5Ijoge30sCiAgICAidSI6IHt9LAogICAgInVsIjoge30sCiAgICAidmFyIjoge30sCiAgICAidmlkZW8iOiB7InNyYyI6IDEsICJhdXRvYnVmZmVyIjogMSwgImF1dG9wbGF5IjogeyJhdXRvcGxheSI6IDF9LCAibG9vcCI6IHsibG9vcCI6IDF9LCAiY29udHJvbHMiOiB7ImNvbnRyb2xzIjogMX0sICJ3aWR0aCI6IDEsICJoZWlnaHQiOiAxLCAicG9zdGVyIjogMSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMX19LAogICAgIndiciI6IHt9Cn07Cgp2YXIgZWxlbWVudHMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCmZ1bmN0aW9uIGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcykgewogICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zLnJvdywgcG9zLmNvbHVtbik7CiAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgIHdoaWxlICh0b2tlbiAmJiAhaXModG9rZW4sICJ0YWctbmFtZSIpKXsKICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgfQogICAgaWYgKHRva2VuKQogICAgICAgIHJldHVybiB0b2tlbi52YWx1ZTsKfQoKZnVuY3Rpb24gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9Cgp2YXIgSHRtbENvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7Cgp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQocG9zLnJvdywgcG9zLmNvbHVtbik7CgogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpIHx8IGlzKHRva2VuLCAidGFnLW9wZW4iKSB8fCBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWdDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIGlmICgvJlthLXpdKiQvaS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRIVE1MRW50aXR5Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKCiAgICAgICAgcmV0dXJuIFtdOwogICAgfTsKCiAgICB0aGlzLmdldFRhZ0NvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLm1hcChmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LAogICAgICAgICAgICAgICAgbWV0YTogInRhZyIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIGlmICghdGFnTmFtZSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZ2xvYmFsQXR0cmlidXRlczsKICAgICAgICBpZiAodGFnTmFtZSBpbiBhdHRyaWJ1dGVNYXApIHsKICAgICAgICAgICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuY29uY2F0KE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5tYXAoZnVuY3Rpb24oYXR0cmlidXRlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IGF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IGF0dHJpYnV0ZSArICc9IiQwIicsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0YWdOYW1lID0gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IGZpbmRBdHRyaWJ1dGVOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgCiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCAmJiBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZU1hcFt0YWdOYW1lXSAmJiB0eXBlb2YgYXR0cmlidXRlTWFwW3RhZ05hbWVdW2F0dHJpYnV0ZU5hbWVdID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogImF0dHJpYnV0ZSB2YWx1ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB2YWx1ZXMgPSBbJ0FhY3V0ZTsnLCAnYWFjdXRlOycsICdBY2lyYzsnLCAnYWNpcmM7JywgJ2FjdXRlOycsICdBRWxpZzsnLCAnYWVsaWc7JywgJ0FncmF2ZTsnLCAnYWdyYXZlOycsICdhbGVmc3ltOycsICdBbHBoYTsnLCAnYWxwaGE7JywgJ2FtcDsnLCAnYW5kOycsICdhbmc7JywgJ0FyaW5nOycsICdhcmluZzsnLCAnYXN5bXA7JywgJ0F0aWxkZTsnLCAnYXRpbGRlOycsICdBdW1sOycsICdhdW1sOycsICdiZHF1bzsnLCAnQmV0YTsnLCAnYmV0YTsnLCAnYnJ2YmFyOycsICdidWxsOycsICdjYXA7JywgJ0NjZWRpbDsnLCAnY2NlZGlsOycsICdjZWRpbDsnLCAnY2VudDsnLCAnQ2hpOycsICdjaGk7JywgJ2NpcmM7JywgJ2NsdWJzOycsICdjb25nOycsICdjb3B5OycsICdjcmFycjsnLCAnY3VwOycsICdjdXJyZW47JywgJ0RhZ2dlcjsnLCAnZGFnZ2VyOycsICdkQXJyOycsICdkYXJyOycsICdkZWc7JywgJ0RlbHRhOycsICdkZWx0YTsnLCAnZGlhbXM7JywgJ2RpdmlkZTsnLCAnRWFjdXRlOycsICdlYWN1dGU7JywgJ0VjaXJjOycsICdlY2lyYzsnLCAnRWdyYXZlOycsICdlZ3JhdmU7JywgJ2VtcHR5OycsICdlbXNwOycsICdlbnNwOycsICdFcHNpbG9uOycsICdlcHNpbG9uOycsICdlcXVpdjsnLCAnRXRhOycsICdldGE7JywgJ0VUSDsnLCAnZXRoOycsICdFdW1sOycsICdldW1sOycsICdldXJvOycsICdleGlzdDsnLCAnZm5vZjsnLCAnZm9yYWxsOycsICdmcmFjMTI7JywgJ2ZyYWMxNDsnLCAnZnJhYzM0OycsICdmcmFzbDsnLCAnR2FtbWE7JywgJ2dhbW1hOycsICdnZTsnLCAnZ3Q7JywgJ2hBcnI7JywgJ2hhcnI7JywgJ2hlYXJ0czsnLCAnaGVsbGlwOycsICdJYWN1dGU7JywgJ2lhY3V0ZTsnLCAnSWNpcmM7JywgJ2ljaXJjOycsICdpZXhjbDsnLCAnSWdyYXZlOycsICdpZ3JhdmU7JywgJ2ltYWdlOycsICdpbmZpbjsnLCAnaW50OycsICdJb3RhOycsICdpb3RhOycsICdpcXVlc3Q7JywgJ2lzaW47JywgJ0l1bWw7JywgJ2l1bWw7JywgJ0thcHBhOycsICdrYXBwYTsnLCAnTGFtYmRhOycsICdsYW1iZGE7JywgJ2xhbmc7JywgJ2xhcXVvOycsICdsQXJyOycsICdsYXJyOycsICdsY2VpbDsnLCAnbGRxdW87JywgJ2xlOycsICdsZmxvb3I7JywgJ2xvd2FzdDsnLCAnbG96OycsICdscm07JywgJ2xzYXF1bzsnLCAnbHNxdW87JywgJ2x0OycsICdtYWNyOycsICdtZGFzaDsnLCAnbWljcm87JywgJ21pZGRvdDsnLCAnbWludXM7JywgJ011OycsICdtdTsnLCAnbmFibGE7JywgJ25ic3A7JywgJ25kYXNoOycsICduZTsnLCAnbmk7JywgJ25vdDsnLCAnbm90aW47JywgJ25zdWI7JywgJ050aWxkZTsnLCAnbnRpbGRlOycsICdOdTsnLCAnbnU7JywgJ09hY3V0ZTsnLCAnb2FjdXRlOycsICdPY2lyYzsnLCAnb2NpcmM7JywgJ09FbGlnOycsICdvZWxpZzsnLCAnT2dyYXZlOycsICdvZ3JhdmU7JywgJ29saW5lOycsICdPbWVnYTsnLCAnb21lZ2E7JywgJ09taWNyb247JywgJ29taWNyb247JywgJ29wbHVzOycsICdvcjsnLCAnb3JkZjsnLCAnb3JkbTsnLCAnT3NsYXNoOycsICdvc2xhc2g7JywgJ090aWxkZTsnLCAnb3RpbGRlOycsICdvdGltZXM7JywgJ091bWw7JywgJ291bWw7JywgJ3BhcmE7JywgJ3BhcnQ7JywgJ3Blcm1pbDsnLCAncGVycDsnLCAnUGhpOycsICdwaGk7JywgJ1BpOycsICdwaTsnLCAncGl2OycsICdwbHVzbW47JywgJ3BvdW5kOycsICdQcmltZTsnLCAncHJpbWU7JywgJ3Byb2Q7JywgJ3Byb3A7JywgJ1BzaTsnLCAncHNpOycsICdxdW90OycsICdyYWRpYzsnLCAncmFuZzsnLCAncmFxdW87JywgJ3JBcnI7JywgJ3JhcnI7JywgJ3JjZWlsOycsICdyZHF1bzsnLCAncmVhbDsnLCAncmVnOycsICdyZmxvb3I7JywgJ1JobzsnLCAncmhvOycsICdybG07JywgJ3JzYXF1bzsnLCAncnNxdW87JywgJ3NicXVvOycsICdTY2Fyb247JywgJ3NjYXJvbjsnLCAnc2RvdDsnLCAnc2VjdDsnLCAnc2h5OycsICdTaWdtYTsnLCAnc2lnbWE7JywgJ3NpZ21hZjsnLCAnc2ltOycsICdzcGFkZXM7JywgJ3N1YjsnLCAnc3ViZTsnLCAnc3VtOycsICdzdXA7JywgJ3N1cDE7JywgJ3N1cDI7JywgJ3N1cDM7JywgJ3N1cGU7JywgJ3N6bGlnOycsICdUYXU7JywgJ3RhdTsnLCAndGhlcmU0OycsICdUaGV0YTsnLCAndGhldGE7JywgJ3RoZXRhc3ltOycsICd0aGluc3A7JywgJ1RIT1JOOycsICd0aG9ybjsnLCAndGlsZGU7JywgJ3RpbWVzOycsICd0cmFkZTsnLCAnVWFjdXRlOycsICd1YWN1dGU7JywgJ3VBcnI7JywgJ3VhcnI7JywgJ1VjaXJjOycsICd1Y2lyYzsnLCAnVWdyYXZlOycsICd1Z3JhdmU7JywgJ3VtbDsnLCAndXBzaWg7JywgJ1Vwc2lsb247JywgJ3Vwc2lsb247JywgJ1V1bWw7JywgJ3V1bWw7JywgJ3dlaWVycDsnLCAnWGk7JywgJ3hpOycsICdZYWN1dGU7JywgJ3lhY3V0ZTsnLCAneWVuOycsICdZdW1sOycsICd5dW1sOycsICdaZXRhOycsICd6ZXRhOycsICd6d2o7JywgJ3p3bmo7J107CgogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiaHRtbCBlbnRpdHkiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKEh0bWxDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5IdG1sQ29tcGxldGlvbnMgPSBIdG1sQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsImFjZS9tb2RlL2h0bWxfY29tcGxldGlvbnMiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEphdmFTY3JpcHRNb2RlID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0IikuTW9kZTsKdmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIveG1sIikuWG1sQmVoYXZpb3VyOwp2YXIgSHRtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2h0bWwiKS5Gb2xkTW9kZTsKdmFyIEh0bWxDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vaHRtbF9jb21wbGV0aW9ucyIpLkh0bWxDb21wbGV0aW9uczsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgdm9pZEVsZW1lbnRzID0gWyJhcmVhIiwgImJhc2UiLCAiYnIiLCAiY29sIiwgImVtYmVkIiwgImhyIiwgImltZyIsICJpbnB1dCIsICJrZXlnZW4iLCAibGluayIsICJtZXRhIiwgIm1lbnVpdGVtIiwgInBhcmFtIiwgInNvdXJjZSIsICJ0cmFjayIsICJ3YnIiXTsKdmFyIG9wdGlvbmFsRW5kVGFncyA9IFsibGkiLCAiZHQiLCAiZGQiLCAicCIsICJydCIsICJycCIsICJvcHRncm91cCIsICJvcHRpb24iLCAiY29sZ3JvdXAiLCAidGQiLCAidGgiXTsKCnZhciBNb2RlID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgdGhpcy5mcmFnbWVudENvbnRleHQgPSBvcHRpb25zICYmIG9wdGlvbnMuZnJhZ21lbnRDb250ZXh0OwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBYbWxCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBIdG1sQ29tcGxldGlvbnMoKTsKICAgIAogICAgdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsKICAgICAgICAianMtIjogSmF2YVNjcmlwdE1vZGUsCiAgICAgICAgImNzcy0iOiBDc3NNb2RlCiAgICB9KTsKICAgIAogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgSHRtbEZvbGRNb2RlKHRoaXMudm9pZEVsZW1lbnRzLCBsYW5nLmFycmF5VG9NYXAob3B0aW9uYWxFbmRUYWdzKSk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICI8IS0tIiwgZW5kOiAiLS0+In07CgogICAgdGhpcy52b2lkRWxlbWVudHMgPSBsYW5nLmFycmF5VG9NYXAodm9pZEVsZW1lbnRzKTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciAhPSBNb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2h0bWxfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dCkKICAgICAgICAgICAgd29ya2VyLmNhbGwoInNldE9wdGlvbnMiLCBbe2NvbnRleHQ6IHRoaXMuZnJhZ21lbnRDb250ZXh0fV0pOwoKICAgICAgICB3b3JrZXIub24oImVycm9yIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9odG1sIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcGhwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcGhwX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3BocF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvcGhwX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIiwiYWNlL3VuaWNvZGUiLCJhY2UvbW9kZS9odG1sIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFBocEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9waHBfaGlnaGxpZ2h0X3J1bGVzIikuUGhwSGlnaGxpZ2h0UnVsZXM7CnZhciBQaHBMYW5nSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3BocF9oaWdobGlnaHRfcnVsZXMiKS5QaHBMYW5nSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciBQaHBDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vcGhwX2NvbXBsZXRpb25zIikuUGhwQ29tcGxldGlvbnM7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKdmFyIHVuaWNvZGUgPSByZXF1aXJlKCIuLi91bmljb2RlIik7CnZhciBIdG1sTW9kZSA9IHJlcXVpcmUoIi4vaHRtbCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGU7CnZhciBDc3NNb2RlID0gcmVxdWlyZSgiLi9jc3MiKS5Nb2RlOwoKdmFyIFBocE1vZGUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUGhwTGFuZ0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IFBocENvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoUGhwTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMudG9rZW5SZSA9IG5ldyBSZWdFeHAoIl5bIiArIHVuaWNvZGUud29yZENoYXJzICsgIl9dKyIsICJnIik7CiAgICB0aGlzLm5vblRva2VuUmUgPSBuZXcgUmVnRXhwKCJeKD86W14iICsgdW5pY29kZS53b3JkQ2hhcnMgKyAiX118XFxzXSkrIiwgImciKTsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSBbIi8vIiwgIiMiXTsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcWzpdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CiAgICAgICAgICAgIGlmIChlbmRTdGF0ZSAhPSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcGhwLWlubGluZSI7Cn0pLmNhbGwoUGhwTW9kZS5wcm90b3R5cGUpOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRzKSB7CiAgICBpZiAob3B0cyAmJiBvcHRzLmlubGluZSkgewogICAgICAgIHZhciBtb2RlID0gbmV3IFBocE1vZGUoKTsKICAgICAgICBtb2RlLmNyZWF0ZVdvcmtlciA9IHRoaXMuY3JlYXRlV29ya2VyOwogICAgICAgIG1vZGUuaW5saW5lUGhwID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbW9kZTsKICAgIH0KICAgIEh0bWxNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUGhwSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUsCiAgICAgICAgInBocC0iOiBQaHBNb2RlCiAgICB9KTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzLnN1Yk1vZGVzWyJwaHAtIl0gPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvcGhwX3dvcmtlciIsICJQaHBXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICBpZiAodGhpcy5pbmxpbmVQaHApCiAgICAgICAgICAgIHdvcmtlci5jYWxsKCJzZXRPcHRpb25zIiwgW3tpbmxpbmU6IHRydWV9XSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3BocCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3BocF9sYXJhdmVsX2JsYWRlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9waHBfbGFyYXZlbF9ibGFkZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9waHAiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICAgdmFyIFBIUExhcmF2ZWxCbGFkZUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9waHBfbGFyYXZlbF9ibGFkZV9oaWdobGlnaHRfcnVsZXMiKS5QSFBMYXJhdmVsQmxhZGVIaWdobGlnaHRSdWxlczsKICAgIHZhciBQSFBNb2RlID0gcmVxdWlyZSgiLi9waHAiKS5Nb2RlOwogICAgdmFyIEphdmFTY3JpcHRNb2RlID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0IikuTW9kZTsKICAgIHZhciBDc3NNb2RlID0gcmVxdWlyZSgiLi9jc3MiKS5Nb2RlOwogICAgdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKCiAgICB2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIFBIUE1vZGUuY2FsbCh0aGlzKTsKCiAgICAgICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFBIUExhcmF2ZWxCbGFkZUhpZ2hsaWdodFJ1bGVzOwogICAgICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CiAgICAgICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAgICAgImNzcy0iOiBDc3NNb2RlLAogICAgICAgICAgICAiaHRtbC0iOiBIdG1sTW9kZQogICAgICAgIH0pOwogICAgfTsKICAgIG9vcC5pbmhlcml0cyhNb2RlLCBQSFBNb2RlKTsKCiAgICAoZnVuY3Rpb24oKSB7CgogICAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3BocF9sYXJhdmVsX2JsYWRlIjsKICAgIH0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKICAgIGV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9waHBfbGFyYXZlbF9ibGFkZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-pig.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9waWdfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUGlnSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgdG9rZW46ICJjb21tZW50LmJsb2NrLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXC9cKi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQuYmxvY2sucGlnIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXCpcLy8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50LmJsb2NrLnBpZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5saW5lLmRvdWJsZS1kYXNoLmFzY2lpZG9jIiwKICAgICAgICAgICAgcmVnZXg6IC8tLS4qJC8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpBU1NFUlR8TE9BRHxTVE9SRXxEVU1QfEZJTFRFUnxESVNUSU5DVHxGT1JFQUNIfEdFTkVSQVRFfFNUUkVBTXxKT0lOfENPR1JPVVB8R1JPVVB8Q1JPU1N8T1JERVJ8TElNSVR8VU5JT058U1BMSVR8REVTQ1JJQkV8RVhQTEFJTnxJTExVU1RSQVRFfEFTfEJZfElOVE98VVNJTkd8TElNSVR8UEFSQUxMRUx8T1VURVJ8SU5ORVJ8REVGQVVMVHxMRUZUfFNBTVBMRXxSQU5LfENVQkV8QUxMfEtJTEx8UVVJVHxNQVBSRURVQ0V8QVNDfERFU0N8VEhST1VHSHxTSElQfENBQ0hFfERFQ0xBUkV8Q0FTRXxXSEVOfFRIRU58RU5EfElOfFBBUlRJVElPTnxGVUxMfElNUE9SVHxJRnxPTlNDSEVNQXxJTlBVVHxPVVRQVVQpXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS5kYXRhdHlwZXMucGlnIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OmludHxsb25nfGZsb2F0fGRvdWJsZXxjaGFyYXJyYXl8Ynl0ZWFycmF5fGJvb2xlYW58ZGF0ZXRpbWV8YmlnaW50ZWdlcnxiaWdkZWNpbWFsfHR1cGxlfGJhZ3xtYXApXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi5zdG9yYWdlLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpQaWdTdG9yYWdlfEJpblN0b3JhZ2V8QmluYXJ5U3RvcmFnZXxQaWdEdW1wfEhCYXNlU3RvcmFnZXxKc29uTG9hZGVyfEpzb25TdG9yYWdlfEF2cm9TdG9yYWdlfFRleHRMb2FkZXJ8UGlnU3RyZWFtaW5nfFRyZXZuaVN0b3JhZ2V8QWNjdW11bG9TdG9yYWdlKVxiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LmZ1bmN0aW9uLnVkZi5waWciLAogICAgICAgICAgICByZWdleDogL1xiKD86RElGRnxUT0JBR3xUT01BUHxUT1B8VE9UVVBMRXxSQU5ET018RkxBVFRFTnxmbGF0dGVufENVQkV8Uk9MTFVQfElzRW1wdHl8QVJJVFl8UGx1Y2tUdXBsZXxTVUJUUkFDVHxCYWdUb1N0cmluZylcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi51ZGYubWF0aC5waWciLAogICAgICAgICAgICByZWdleDogL1xiKD86QUJTfEFDT1N8QVNJTnxBVEFOfENCUlR8Q0VJTHxDT1N8Q09TSHxFWFB8RkxPT1J8TE9HfExPRzEwfFJPVU5EfFJPVU5EX1RPfFNJTnxTSU5IfFNRUlR8VEFOfFRBTkh8QVZHfENPVU5UfENPVU5UX1NUQVJ8TUFYfE1JTnxTVU18Q09SfENPVilcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi51ZGYuc3RyaW5nLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpDT05DQVR8SU5ERVhPRnxMQVNUX0lOREVYX09GfExDRklSU1R8TE9XRVJ8UkVHRVhfRVhUUkFDVHxSRUdFWF9FWFRSQUNUX0FMTHxSRVBMQUNFfFNJWkV8U1RSU1BMSVR8U1VCU1RSSU5HfFRPS0VOSVpFfFRSSU18VUNGSVJTVHxVUFBFUnxMVFJJTXxSVFJJTXxFTkRTV0lUSHxTVEFSVFNXSVRIfFRSSU0pXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN1cHBvcnQuZnVuY3Rpb24udWRmLmRhdGV0aW1lLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpBZGREdXJhdGlvbnxDdXJyZW50VGltZXxEYXlzQmV0d2VlbnxHZXREYXl8R2V0SG91cnxHZXRNaWxsaVNlY29uZHxHZXRNaW51dGV8R2V0TW9udGh8R2V0U2Vjb25kfEdldFdlZWt8R2V0V2Vla1llYXJ8R2V0WWVhcnxIb3Vyc0JldHdlZW58TWlsbGlTZWNvbmRzQmV0d2VlbnxNaW51dGVzQmV0d2VlbnxNb250aHNCZXR3ZWVufFNlY29uZHNCZXR3ZWVufFN1YnRyYWN0RHVyYXRpb258VG9EYXRlfFdlZWtzQmV0d2VlbnxZZWFyc0JldHdlZW58VG9NaWxsaVNlY29uZHN8VG9TdHJpbmd8VG9Vbml4VGltZSlcYi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi5jb21tYW5kLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoPzpjYXR8Y2R8Y29weUZyb21Mb2NhbHxjb3B5VG9Mb2NhbHxjcHxsc3xta2Rpcnxtdnxwd2R8cm0pXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCRbYV96QS1aMC05X10rLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5waWciLAogICAgICAgICAgICByZWdleDogL1xiKD86TlVMTHx0cnVlfGZhbHNlfHN0ZGlufHN0ZG91dHxzdGRlcnIpXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5waWciLAogICAgICAgICAgICByZWdleDogL1xiXGQrKD86XC5cZCspP1xiLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmNvbXBhcmlzb24ucGlnIiwKICAgICAgICAgICAgcmVnZXg6IC8hPXw9PXw8fD58PD18Pj18XGIoPzpNQVRDSEVTfElTfE9SfEFORHxOT1QpXGIvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5hcml0aG1ldGljLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCt8XC18XCp8XC98XCV8XD98Onw6OnxcLlwufCMvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLnBpZyIsCiAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLnBpZyIsCiAgICAgICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLnBpZyIsCiAgICAgICAgICAgICAgICByZWdleDogL1xcLi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1b3RlZC5kb3VibGUucGlnIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucXVvdGVkLnNpbmdsZS5waWciLAogICAgICAgICAgICByZWdleDogLycvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucXVvdGVkLnNpbmdsZS5waWciLAogICAgICAgICAgICAgICAgcmVnZXg6IC8nLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5waWciLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cXC4vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuc2luZ2xlLnBpZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRvZG86IHsKICAgICAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLnBhcmFtZXRlci5waWciLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlLnBhcmFtZXRlci5waWciCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eKFxzKikoc2V0KShccyspKFxTKykvLAogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvJC8sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiAiJHNlbGYiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgImtleXdvcmQuYWxpYXMucGlnIiwKICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUuYWxpYXMucGlnIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLyhccyopKERFRklORXxERUNMQVJFfFJFR0lTVEVSKShccyspKFxTKykvLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUsCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC87PyQvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfV0KICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKUGlnSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7CiAgICBmaWxlVHlwZXM6IFsicGlnIl0sCiAgICBuYW1lOiAiUGlnIiwKICAgIHNjb3BlTmFtZTogInNvdXJjZS5waWciCn07CgoKb29wLmluaGVyaXRzKFBpZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QaWdIaWdobGlnaHRSdWxlcyA9IFBpZ0hpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3BpZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3BpZ19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFBpZ0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9waWdfaGlnaGxpZ2h0X3J1bGVzIikuUGlnSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUGlnSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi0tIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcGlnIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcGlnIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-plain_text.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wbGFpbl90ZXh0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFRleHRIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBCZWhhdmlvdXIoKTsKfTsKCm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnR5cGUgPSAidGV4dCI7CiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHJldHVybiAnJzsKICAgIH07CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9wbGFpbl90ZXh0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcGxhaW5fdGV4dCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-powershell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wb3dlcnNoZWxsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFBvd2Vyc2hlbGxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJiZWdpbnxicmVha3xjYXRjaHxjb250aW51ZXxkYXRhfGRvfGR5bmFtaWNwYXJhbXxlbHNlfGVsc2VpZnxlbmR8ZXhpdHxmaWx0ZXJ8IiArCiAgICAgICAgImZpbmFsbHl8Zm9yfGZvcmVhY2h8ZnJvbXxmdW5jdGlvbnxpZnxpbnxpbmxpbmVzY3JpcHR8aGlkZGVufHBhcmFsbGVsfHBhcmFtfCIgKwogICAgICAgICJwcm9jZXNzfHJldHVybnxzZXF1ZW5jZXxzd2l0Y2h8dGhyb3d8dHJhcHx0cnl8dW50aWx8d2hpbGV8d29ya2Zsb3ciCiAgICApOwogICAgdmFyIGJ1aWx0aW5GdW5jdGlvbnMgPSAoCiAgICAgICAgIkdldC1BcHBCYWNrZ3JvdW5kVGFza3xTdGFydC1BcHBCYWNrZ3JvdW5kVGFza3xVbnJlZ2lzdGVyLUFwcEJhY2tncm91bmRUYXNrfERpc2FibGUtQXBwQmFja2dyb3VuZFRhc2tEaWFnbm9zdGljTG9nfEVuYWJsZS1BcHBCYWNrZ3JvdW5kVGFza0RpYWdub3N0aWNMb2d8U2V0LUFwcEJhY2tncm91bmRUYXNrUmVzb3VyY2VQb2xpY3l8IiArCiAgICAgICAgIkdldC1BcHBMb2NrZXJGaWxlSW5mb3JtYXRpb258R2V0LUFwcExvY2tlclBvbGljeXxOZXctQXBwTG9ja2VyUG9saWN5fFNldC1BcHBMb2NrZXJQb2xpY3l8VGVzdC1BcHBMb2NrZXJQb2xpY3l8IiArCiAgICAgICAgIkdldC1BcHB4TGFzdEVycm9yfEdldC1BcHB4TG9nfEFkZC1BcHB4UGFja2FnZXxBZGQtQXBweFZvbHVtZXxEaXNtb3VudC1BcHB4Vm9sdW1lfEdldC1BcHB4RGVmYXVsdFZvbHVtZXxHZXQtQXBweFBhY2thZ2V8R2V0LUFwcHhQYWNrYWdlTWFuaWZlc3R8R2V0LUFwcHhWb2x1bWV8TW91bnQtQXBweFZvbHVtZXxNb3ZlLUFwcHhQYWNrYWdlfFJlbW92ZS1BcHB4UGFja2FnZXxSZW1vdmUtQXBweFZvbHVtZXxTZXQtQXBweERlZmF1bHRWb2x1bWV8IiArCiAgICAgICAgIkNsZWFyLUFzc2lnbmVkQWNjZXNzfEdldC1Bc3NpZ25lZEFjY2Vzc3xTZXQtQXNzaWduZWRBY2Nlc3N8IiArCiAgICAgICAgIkFkZC1CaXRMb2NrZXJLZXlQcm90ZWN0b3J8QmFja3VwLUJpdExvY2tlcktleVByb3RlY3RvcnxDbGVhci1CaXRMb2NrZXJBdXRvVW5sb2NrfERpc2FibGUtQml0TG9ja2VyfERpc2FibGUtQml0TG9ja2VyQXV0b1VubG9ja3xFbmFibGUtQml0TG9ja2VyfEVuYWJsZS1CaXRMb2NrZXJBdXRvVW5sb2NrfEdldC1CaXRMb2NrZXJWb2x1bWV8TG9jay1CaXRMb2NrZXJ8UmVtb3ZlLUJpdExvY2tlcktleVByb3RlY3RvcnxSZXN1bWUtQml0TG9ja2VyfFN1c3BlbmQtQml0TG9ja2VyfFVubG9jay1CaXRMb2NrZXJ8IiArCiAgICAgICAgIkFkZC1CaXRzRmlsZXxDb21wbGV0ZS1CaXRzVHJhbnNmZXJ8R2V0LUJpdHNUcmFuc2ZlcnxSZW1vdmUtQml0c1RyYW5zZmVyfFJlc3VtZS1CaXRzVHJhbnNmZXJ8U2V0LUJpdHNUcmFuc2ZlcnxTdGFydC1CaXRzVHJhbnNmZXJ8U3VzcGVuZC1CaXRzVHJhbnNmZXJ8IiArCiAgICAgICAgIkFkZC1CQ0RhdGFDYWNoZUV4dGVuc2lvbnxDbGVhci1CQ0NhY2hlfERpc2FibGUtQkN8RGlzYWJsZS1CQ0Rvd25ncmFkaW5nfERpc2FibGUtQkNTZXJ2ZU9uQmF0dGVyeXxFbmFibGUtQkNEaXN0cmlidXRlZHxFbmFibGUtQkNEb3duZ3JhZGluZ3xFbmFibGUtQkNIb3N0ZWRDbGllbnR8RW5hYmxlLUJDSG9zdGVkU2VydmVyfEVuYWJsZS1CQ0xvY2FsfEVuYWJsZS1CQ1NlcnZlT25CYXR0ZXJ5fEV4cG9ydC1CQ0NhY2hlUGFja2FnZXxFeHBvcnQtQkNTZWNyZXRLZXl8R2V0LUJDQ2xpZW50Q29uZmlndXJhdGlvbnxHZXQtQkNDb250ZW50U2VydmVyQ29uZmlndXJhdGlvbnxHZXQtQkNEYXRhQ2FjaGV8R2V0LUJDRGF0YUNhY2hlRXh0ZW5zaW9ufEdldC1CQ0hhc2hDYWNoZXxHZXQtQkNIb3N0ZWRDYWNoZVNlcnZlckNvbmZpZ3VyYXRpb258R2V0LUJDTmV0d29ya0NvbmZpZ3VyYXRpb258R2V0LUJDU3RhdHVzfEltcG9ydC1CQ0NhY2hlUGFja2FnZXxJbXBvcnQtQkNTZWNyZXRLZXl8UHVibGlzaC1CQ0ZpbGVDb250ZW50fFB1Ymxpc2gtQkNXZWJDb250ZW50fFJlbW92ZS1CQ0RhdGFDYWNoZUV4dGVuc2lvbnxSZXNldC1CQ3xTZXQtQkNBdXRoZW50aWNhdGlvbnxTZXQtQkNDYWNoZXxTZXQtQkNEYXRhQ2FjaGVFbnRyeU1heEFnZXxTZXQtQkNNaW5TTUJMYXRlbmN5fFNldC1CQ1NlY3JldEtleXwiICsKICAgICAgICAiRXhwb3J0LUJpbmFyeU1pTG9nfEdldC1DaW1Bc3NvY2lhdGVkSW5zdGFuY2V8R2V0LUNpbUNsYXNzfEdldC1DaW1JbnN0YW5jZXxHZXQtQ2ltU2Vzc2lvbnxJbXBvcnQtQmluYXJ5TWlMb2d8SW52b2tlLUNpbU1ldGhvZHxOZXctQ2ltSW5zdGFuY2V8TmV3LUNpbVNlc3Npb258TmV3LUNpbVNlc3Npb25PcHRpb258UmVnaXN0ZXItQ2ltSW5kaWNhdGlvbkV2ZW50fFJlbW92ZS1DaW1JbnN0YW5jZXxSZW1vdmUtQ2ltU2Vzc2lvbnxTZXQtQ2ltSW5zdGFuY2V8IiArCiAgICAgICAgIkNvbnZlcnRGcm9tLUNJUG9saWN5fCIgKwogICAgICAgICJBZGQtU2lnbmVyUnVsZXxFZGl0LUNJUG9saWN5UnVsZXxHZXQtQ0lQb2xpY3l8R2V0LUNJUG9saWN5SW5mb3xHZXQtU3lzdGVtRHJpdmVyfE1lcmdlLUNJUG9saWN5fE5ldy1DSVBvbGljeXxOZXctQ0lQb2xpY3lSdWxlfFJlbW92ZS1DSVBvbGljeVJ1bGV8U2V0LUNJUG9saWN5VmVyc2lvbnxTZXQtSFZDSU9wdGlvbnN8U2V0LVJ1bGVPcHRpb258IiArCiAgICAgICAgIkFkZC1NcFByZWZlcmVuY2V8R2V0LU1wQ29tcHV0ZXJTdGF0dXN8R2V0LU1wUHJlZmVyZW5jZXxHZXQtTXBUaHJlYXR8R2V0LU1wVGhyZWF0Q2F0YWxvZ3xHZXQtTXBUaHJlYXREZXRlY3Rpb258UmVtb3ZlLU1wUHJlZmVyZW5jZXxSZW1vdmUtTXBUaHJlYXR8U2V0LU1wUHJlZmVyZW5jZXxTdGFydC1NcFNjYW58U3RhcnQtTXBXRE9TY2FufFVwZGF0ZS1NcFNpZ25hdHVyZXwiICsKICAgICAgICAiRGlzYWJsZS1EQU1hbnVhbEVudHJ5UG9pbnRTZWxlY3Rpb258RW5hYmxlLURBTWFudWFsRW50cnlQb2ludFNlbGVjdGlvbnxHZXQtREFDbGllbnRFeHBlcmllbmNlQ29uZmlndXJhdGlvbnxHZXQtREFFbnRyeVBvaW50VGFibGVJdGVtfE5ldy1EQUVudHJ5UG9pbnRUYWJsZUl0ZW18UmVtb3ZlLURBRW50cnlQb2ludFRhYmxlSXRlbXxSZW5hbWUtREFFbnRyeVBvaW50VGFibGVJdGVtfFJlc2V0LURBQ2xpZW50RXhwZXJpZW5jZUNvbmZpZ3VyYXRpb258UmVzZXQtREFFbnRyeVBvaW50VGFibGVJdGVtfFNldC1EQUNsaWVudEV4cGVyaWVuY2VDb25maWd1cmF0aW9ufFNldC1EQUVudHJ5UG9pbnRUYWJsZUl0ZW18IiArCiAgICAgICAgIkFkZC1Qcm92aXNpb25lZEFwcHhQYWNrYWdlfEFwcGx5LVdpbmRvd3NVbmF0dGVuZHxHZXQtUHJvdmlzaW9uZWRBcHB4UGFja2FnZXxSZW1vdmUtUHJvdmlzaW9uZWRBcHB4UGFja2FnZXxBZGQtQXBweFByb3Zpc2lvbmVkUGFja2FnZXxBZGQtV2luZG93c0NhcGFiaWxpdHl8QWRkLVdpbmRvd3NEcml2ZXJ8QWRkLVdpbmRvd3NJbWFnZXxBZGQtV2luZG93c1BhY2thZ2V8Q2xlYXItV2luZG93c0NvcnJ1cHRNb3VudFBvaW50fERpc2FibGUtV2luZG93c09wdGlvbmFsRmVhdHVyZXxEaXNtb3VudC1XaW5kb3dzSW1hZ2V8RW5hYmxlLVdpbmRvd3NPcHRpb25hbEZlYXR1cmV8RXhwYW5kLVdpbmRvd3NDdXN0b21EYXRhSW1hZ2V8RXhwYW5kLVdpbmRvd3NJbWFnZXxFeHBvcnQtV2luZG93c0RyaXZlcnxFeHBvcnQtV2luZG93c0ltYWdlfEdldC1BcHB4UHJvdmlzaW9uZWRQYWNrYWdlfEdldC1XSU1Cb290RW50cnl8R2V0LVdpbmRvd3NDYXBhYmlsaXR5fEdldC1XaW5kb3dzRHJpdmVyfEdldC1XaW5kb3dzRWRpdGlvbnxHZXQtV2luZG93c0ltYWdlfEdldC1XaW5kb3dzSW1hZ2VDb250ZW50fEdldC1XaW5kb3dzT3B0aW9uYWxGZWF0dXJlfEdldC1XaW5kb3dzUGFja2FnZXxNb3VudC1XaW5kb3dzSW1hZ2V8TmV3LVdpbmRvd3NDdXN0b21JbWFnZXxOZXctV2luZG93c0ltYWdlfE9wdGltaXplLVdpbmRvd3NJbWFnZXxSZW1vdmUtQXBweFByb3Zpc2lvbmVkUGFja2FnZXxSZW1vdmUtV2luZG93c0NhcGFiaWxpdHl8UmVtb3ZlLVdpbmRvd3NEcml2ZXJ8UmVtb3ZlLVdpbmRvd3NJbWFnZXxSZW1vdmUtV2luZG93c1BhY2thZ2V8UmVwYWlyLVdpbmRvd3NJbWFnZXxTYXZlLVdpbmRvd3NJbWFnZXxTZXQtQXBwWFByb3Zpc2lvbmVkRGF0YUZpbGV8U2V0LVdpbmRvd3NFZGl0aW9ufFNldC1XaW5kb3dzUHJvZHVjdEtleXxTcGxpdC1XaW5kb3dzSW1hZ2V8VXBkYXRlLVdJTUJvb3RFbnRyeXxVc2UtV2luZG93c1VuYXR0ZW5kfCIgKwogICAgICAgICJBZGQtRG5zQ2xpZW50TnJwdFJ1bGV8Q2xlYXItRG5zQ2xpZW50Q2FjaGV8R2V0LURuc0NsaWVudHxHZXQtRG5zQ2xpZW50Q2FjaGV8R2V0LURuc0NsaWVudEdsb2JhbFNldHRpbmd8R2V0LURuc0NsaWVudE5ycHRHbG9iYWx8R2V0LURuc0NsaWVudE5ycHRQb2xpY3l8R2V0LURuc0NsaWVudE5ycHRSdWxlfEdldC1EbnNDbGllbnRTZXJ2ZXJBZGRyZXNzfFJlZ2lzdGVyLURuc0NsaWVudHxSZW1vdmUtRG5zQ2xpZW50TnJwdFJ1bGV8U2V0LURuc0NsaWVudHxTZXQtRG5zQ2xpZW50R2xvYmFsU2V0dGluZ3xTZXQtRG5zQ2xpZW50TnJwdEdsb2JhbHxTZXQtRG5zQ2xpZW50TnJwdFJ1bGV8U2V0LURuc0NsaWVudFNlcnZlckFkZHJlc3N8UmVzb2x2ZS1EbnNOYW1lfCIgKwogICAgICAgICJBZGQtRXR3VHJhY2VQcm92aWRlcnxHZXQtQXV0b2xvZ2dlckNvbmZpZ3xHZXQtRXR3VHJhY2VQcm92aWRlcnxHZXQtRXR3VHJhY2VTZXNzaW9ufE5ldy1BdXRvbG9nZ2VyQ29uZmlnfE5ldy1FdHdUcmFjZVNlc3Npb258UmVtb3ZlLUF1dG9sb2dnZXJDb25maWd8UmVtb3ZlLUV0d1RyYWNlUHJvdmlkZXJ8UmVtb3ZlLUV0d1RyYWNlU2Vzc2lvbnxTZW5kLUV0d1RyYWNlU2Vzc2lvbnxTZXQtQXV0b2xvZ2dlckNvbmZpZ3xTZXQtRXR3VHJhY2VQcm92aWRlcnxTZXQtRXR3VHJhY2VTZXNzaW9ufCIgKwogICAgICAgICJHZXQtV2luQWNjZXB0TGFuZ3VhZ2VGcm9tTGFuZ3VhZ2VMaXN0T3B0T3V0fEdldC1XaW5DdWx0dXJlRnJvbUxhbmd1YWdlTGlzdE9wdE91dHxHZXQtV2luRGVmYXVsdElucHV0TWV0aG9kT3ZlcnJpZGV8R2V0LVdpbkhvbWVMb2NhdGlvbnxHZXQtV2luTGFuZ3VhZ2VCYXJPcHRpb258R2V0LVdpblN5c3RlbUxvY2FsZXxHZXQtV2luVUlMYW5ndWFnZU92ZXJyaWRlfEdldC1XaW5Vc2VyTGFuZ3VhZ2VMaXN0fE5ldy1XaW5Vc2VyTGFuZ3VhZ2VMaXN0fFNldC1DdWx0dXJlfFNldC1XaW5BY2NlcHRMYW5ndWFnZUZyb21MYW5ndWFnZUxpc3RPcHRPdXR8U2V0LVdpbkN1bHR1cmVGcm9tTGFuZ3VhZ2VMaXN0T3B0T3V0fFNldC1XaW5EZWZhdWx0SW5wdXRNZXRob2RPdmVycmlkZXxTZXQtV2luSG9tZUxvY2F0aW9ufFNldC1XaW5MYW5ndWFnZUJhck9wdGlvbnxTZXQtV2luU3lzdGVtTG9jYWxlfFNldC1XaW5VSUxhbmd1YWdlT3ZlcnJpZGV8U2V0LVdpblVzZXJMYW5ndWFnZUxpc3R8IiArCiAgICAgICAgIkNvbm5lY3QtSXNjc2lUYXJnZXR8RGlzY29ubmVjdC1Jc2NzaVRhcmdldHxHZXQtSXNjc2lDb25uZWN0aW9ufEdldC1Jc2NzaVNlc3Npb258R2V0LUlzY3NpVGFyZ2V0fEdldC1Jc2NzaVRhcmdldFBvcnRhbHxOZXctSXNjc2lUYXJnZXRQb3J0YWx8UmVnaXN0ZXItSXNjc2lTZXNzaW9ufFJlbW92ZS1Jc2NzaVRhcmdldFBvcnRhbHxTZXQtSXNjc2lDaGFwU2VjcmV0fFVucmVnaXN0ZXItSXNjc2lTZXNzaW9ufFVwZGF0ZS1Jc2NzaVRhcmdldHxVcGRhdGUtSXNjc2lUYXJnZXRQb3J0YWx8IiArCiAgICAgICAgIkdldC1Jc2VTbmlwcGV0fEltcG9ydC1Jc2VTbmlwcGV0fE5ldy1Jc2VTbmlwcGV0fCIgKwogICAgICAgICJBZGQtS2RzUm9vdEtleXxDbGVhci1LZHNDYWNoZXxHZXQtS2RzQ29uZmlndXJhdGlvbnxHZXQtS2RzUm9vdEtleXxTZXQtS2RzQ29uZmlndXJhdGlvbnxUZXN0LUtkc1Jvb3RLZXl8IiArCiAgICAgICAgIkNvbXByZXNzLUFyY2hpdmV8RXhwYW5kLUFyY2hpdmV8IiArCiAgICAgICAgIkV4cG9ydC1Db3VudGVyfEdldC1Db3VudGVyfEdldC1XaW5FdmVudHxJbXBvcnQtQ291bnRlcnxOZXctV2luRXZlbnR8IiArCiAgICAgICAgIlN0YXJ0LVRyYW5zY3JpcHR8U3RvcC1UcmFuc2NyaXB0fCIgKwogICAgICAgICJBZGQtQ29tcHV0ZXJ8QWRkLUNvbnRlbnR8Q2hlY2twb2ludC1Db21wdXRlcnxDbGVhci1Db250ZW50fENsZWFyLUV2ZW50TG9nfENsZWFyLUl0ZW18Q2xlYXItSXRlbVByb3BlcnR5fENsZWFyLVJlY3ljbGVCaW58Q29tcGxldGUtVHJhbnNhY3Rpb258Q29udmVydC1QYXRofENvcHktSXRlbXxDb3B5LUl0ZW1Qcm9wZXJ0eXxEZWJ1Zy1Qcm9jZXNzfERpc2FibGUtQ29tcHV0ZXJSZXN0b3JlfEVuYWJsZS1Db21wdXRlclJlc3RvcmV8R2V0LUNoaWxkSXRlbXxHZXQtQ2xpcGJvYXJkfEdldC1Db21wdXRlclJlc3RvcmVQb2ludHxHZXQtQ29udGVudHxHZXQtQ29udHJvbFBhbmVsSXRlbXxHZXQtRXZlbnRMb2d8R2V0LUhvdEZpeHxHZXQtSXRlbXxHZXQtSXRlbVByb3BlcnR5fEdldC1JdGVtUHJvcGVydHlWYWx1ZXxHZXQtTG9jYXRpb258R2V0LVByb2Nlc3N8R2V0LVBTRHJpdmV8R2V0LVBTUHJvdmlkZXJ8R2V0LVNlcnZpY2V8R2V0LVRyYW5zYWN0aW9ufEdldC1XbWlPYmplY3R8SW52b2tlLUl0ZW18SW52b2tlLVdtaU1ldGhvZHxKb2luLVBhdGh8TGltaXQtRXZlbnRMb2d8TW92ZS1JdGVtfE1vdmUtSXRlbVByb3BlcnR5fE5ldy1FdmVudExvZ3xOZXctSXRlbXxOZXctSXRlbVByb3BlcnR5fE5ldy1QU0RyaXZlfE5ldy1TZXJ2aWNlfE5ldy1XZWJTZXJ2aWNlUHJveHl8UG9wLUxvY2F0aW9ufFB1c2gtTG9jYXRpb258UmVnaXN0ZXItV21pRXZlbnR8UmVtb3ZlLUNvbXB1dGVyfFJlbW92ZS1FdmVudExvZ3xSZW1vdmUtSXRlbXxSZW1vdmUtSXRlbVByb3BlcnR5fFJlbW92ZS1QU0RyaXZlfFJlbW92ZS1XbWlPYmplY3R8UmVuYW1lLUNvbXB1dGVyfFJlbmFtZS1JdGVtfFJlbmFtZS1JdGVtUHJvcGVydHl8UmVzZXQtQ29tcHV0ZXJNYWNoaW5lUGFzc3dvcmR8UmVzb2x2ZS1QYXRofFJlc3RhcnQtQ29tcHV0ZXJ8UmVzdGFydC1TZXJ2aWNlfFJlc3RvcmUtQ29tcHV0ZXJ8UmVzdW1lLVNlcnZpY2V8U2V0LUNsaXBib2FyZHxTZXQtQ29udGVudHxTZXQtSXRlbXxTZXQtSXRlbVByb3BlcnR5fFNldC1Mb2NhdGlvbnxTZXQtU2VydmljZXxTZXQtV21pSW5zdGFuY2V8U2hvdy1Db250cm9sUGFuZWxJdGVtfFNob3ctRXZlbnRMb2d8U3BsaXQtUGF0aHxTdGFydC1Qcm9jZXNzfFN0YXJ0LVNlcnZpY2V8U3RhcnQtVHJhbnNhY3Rpb258U3RvcC1Db21wdXRlcnxTdG9wLVByb2Nlc3N8U3RvcC1TZXJ2aWNlfFN1c3BlbmQtU2VydmljZXxUZXN0LUNvbXB1dGVyU2VjdXJlQ2hhbm5lbHxUZXN0LUNvbm5lY3Rpb258VGVzdC1QYXRofFVuZG8tVHJhbnNhY3Rpb258VXNlLVRyYW5zYWN0aW9ufFdhaXQtUHJvY2Vzc3xXcml0ZS1FdmVudExvZ3wiICsKICAgICAgICAiRXhwb3J0LU9EYXRhRW5kcG9pbnRQcm94eXwiICsKICAgICAgICAiQ29udmVydEZyb20tU2VjdXJlU3RyaW5nfENvbnZlcnRUby1TZWN1cmVTdHJpbmd8R2V0LUFjbHxHZXQtQXV0aGVudGljb2RlU2lnbmF0dXJlfEdldC1DbXNNZXNzYWdlfEdldC1DcmVkZW50aWFsfEdldC1FeGVjdXRpb25Qb2xpY3l8R2V0LVBmeENlcnRpZmljYXRlfFByb3RlY3QtQ21zTWVzc2FnZXxTZXQtQWNsfFNldC1BdXRoZW50aWNvZGVTaWduYXR1cmV8U2V0LUV4ZWN1dGlvblBvbGljeXxVbnByb3RlY3QtQ21zTWVzc2FnZXwiICsKICAgICAgICAiQ29udmVydEZyb20tU2RkbFN0cmluZ3xGb3JtYXQtSGV4fEdldC1GaWxlSGFzaHxJbXBvcnQtUG93ZXJTaGVsbERhdGFGaWxlfE5ldy1HdWlkfE5ldy1UZW1wb3JhcnlGaWxlfEFkZC1NZW1iZXJ8QWRkLVR5cGV8Q2xlYXItVmFyaWFibGV8Q29tcGFyZS1PYmplY3R8Q29udmVydEZyb20tQ3N2fENvbnZlcnRGcm9tLUpzb258Q29udmVydEZyb20tU3RyaW5nfENvbnZlcnRGcm9tLVN0cmluZ0RhdGF8Q29udmVydC1TdHJpbmd8Q29udmVydFRvLUNzdnxDb252ZXJ0VG8tSHRtbHxDb252ZXJ0VG8tSnNvbnxDb252ZXJ0VG8tWG1sfERlYnVnLVJ1bnNwYWNlfERpc2FibGUtUFNCcmVha3BvaW50fERpc2FibGUtUnVuc3BhY2VEZWJ1Z3xFbmFibGUtUFNCcmVha3BvaW50fEVuYWJsZS1SdW5zcGFjZURlYnVnfEV4cG9ydC1BbGlhc3xFeHBvcnQtQ2xpeG1sfEV4cG9ydC1Dc3Z8RXhwb3J0LUZvcm1hdERhdGF8RXhwb3J0LVBTU2Vzc2lvbnxGb3JtYXQtQ3VzdG9tfEZvcm1hdC1MaXN0fEZvcm1hdC1UYWJsZXxGb3JtYXQtV2lkZXxHZXQtQWxpYXN8R2V0LUN1bHR1cmV8R2V0LURhdGV8R2V0LUV2ZW50fEdldC1FdmVudFN1YnNjcmliZXJ8R2V0LUZvcm1hdERhdGF8R2V0LUhvc3R8R2V0LU1lbWJlcnxHZXQtUFNCcmVha3BvaW50fEdldC1QU0NhbGxTdGFja3xHZXQtUmFuZG9tfEdldC1SdW5zcGFjZXxHZXQtUnVuc3BhY2VEZWJ1Z3xHZXQtVHJhY2VTb3VyY2V8R2V0LVR5cGVEYXRhfEdldC1VSUN1bHR1cmV8R2V0LVVuaXF1ZXxHZXQtVmFyaWFibGV8R3JvdXAtT2JqZWN0fEltcG9ydC1BbGlhc3xJbXBvcnQtQ2xpeG1sfEltcG9ydC1Dc3Z8SW1wb3J0LUxvY2FsaXplZERhdGF8SW1wb3J0LVBTU2Vzc2lvbnxJbnZva2UtRXhwcmVzc2lvbnxJbnZva2UtUmVzdE1ldGhvZHxJbnZva2UtV2ViUmVxdWVzdHxNZWFzdXJlLUNvbW1hbmR8TWVhc3VyZS1PYmplY3R8TmV3LUFsaWFzfE5ldy1FdmVudHxOZXctT2JqZWN0fE5ldy1UaW1lU3BhbnxOZXctVmFyaWFibGV8T3V0LUZpbGV8T3V0LUdyaWRWaWV3fE91dC1QcmludGVyfE91dC1TdHJpbmd8UmVhZC1Ib3N0fFJlZ2lzdGVyLUVuZ2luZUV2ZW50fFJlZ2lzdGVyLU9iamVjdEV2ZW50fFJlbW92ZS1FdmVudHxSZW1vdmUtUFNCcmVha3BvaW50fFJlbW92ZS1UeXBlRGF0YXxSZW1vdmUtVmFyaWFibGV8U2VsZWN0LU9iamVjdHxTZWxlY3QtU3RyaW5nfFNlbGVjdC1YbWx8U2VuZC1NYWlsTWVzc2FnZXxTZXQtQWxpYXN8U2V0LURhdGV8U2V0LVBTQnJlYWtwb2ludHxTZXQtVHJhY2VTb3VyY2V8U2V0LVZhcmlhYmxlfFNob3ctQ29tbWFuZHxTb3J0LU9iamVjdHxTdGFydC1TbGVlcHxUZWUtT2JqZWN0fFRyYWNlLUNvbW1hbmR8VW5ibG9jay1GaWxlfFVucmVnaXN0ZXItRXZlbnR8VXBkYXRlLUZvcm1hdERhdGF8VXBkYXRlLUxpc3R8VXBkYXRlLVR5cGVEYXRhfFdhaXQtRGVidWdnZXJ8V2FpdC1FdmVudHxXcml0ZS1EZWJ1Z3xXcml0ZS1FcnJvcnxXcml0ZS1Ib3N0fFdyaXRlLUluZm9ybWF0aW9ufFdyaXRlLU91dHB1dHxXcml0ZS1Qcm9ncmVzc3xXcml0ZS1WZXJib3NlfFdyaXRlLVdhcm5pbmd8IiArCiAgICAgICAgIkNvbm5lY3QtV1NNYW58RGlzYWJsZS1XU01hbkNyZWRTU1B8RGlzY29ubmVjdC1XU01hbnxFbmFibGUtV1NNYW5DcmVkU1NQfEdldC1XU01hbkNyZWRTU1B8R2V0LVdTTWFuSW5zdGFuY2V8SW52b2tlLVdTTWFuQWN0aW9ufE5ldy1XU01hbkluc3RhbmNlfE5ldy1XU01hblNlc3Npb25PcHRpb258UmVtb3ZlLVdTTWFuSW5zdGFuY2V8U2V0LVdTTWFuSW5zdGFuY2V8U2V0LVdTTWFuUXVpY2tDb25maWd8VGVzdC1XU01hbnwiICsKICAgICAgICAiRGVidWctTU1BcHBQcmVsYXVuY2h8RGlzYWJsZS1NTUFnZW50fEVuYWJsZS1NTUFnZW50fEdldC1NTUFnZW50fFNldC1NTUFnZW50fCIgKwogICAgICAgICJBZGQtRHRjQ2x1c3RlclRNTWFwcGluZ3xHZXQtRHRjfEdldC1EdGNBZHZhbmNlZEhvc3RTZXR0aW5nfEdldC1EdGNBZHZhbmNlZFNldHRpbmd8R2V0LUR0Y0NsdXN0ZXJEZWZhdWx0fEdldC1EdGNDbHVzdGVyVE1NYXBwaW5nfEdldC1EdGNEZWZhdWx0fEdldC1EdGNMb2d8R2V0LUR0Y05ldHdvcmtTZXR0aW5nfEdldC1EdGNUcmFuc2FjdGlvbnxHZXQtRHRjVHJhbnNhY3Rpb25zU3RhdGlzdGljc3xHZXQtRHRjVHJhbnNhY3Rpb25zVHJhY2VTZXNzaW9ufEdldC1EdGNUcmFuc2FjdGlvbnNUcmFjZVNldHRpbmd8SW5zdGFsbC1EdGN8UmVtb3ZlLUR0Y0NsdXN0ZXJUTU1hcHBpbmd8UmVzZXQtRHRjTG9nfFNldC1EdGNBZHZhbmNlZEhvc3RTZXR0aW5nfFNldC1EdGNBZHZhbmNlZFNldHRpbmd8U2V0LUR0Y0NsdXN0ZXJEZWZhdWx0fFNldC1EdGNDbHVzdGVyVE1NYXBwaW5nfFNldC1EdGNEZWZhdWx0fFNldC1EdGNMb2d8U2V0LUR0Y05ldHdvcmtTZXR0aW5nfFNldC1EdGNUcmFuc2FjdGlvbnxTZXQtRHRjVHJhbnNhY3Rpb25zVHJhY2VTZXNzaW9ufFNldC1EdGNUcmFuc2FjdGlvbnNUcmFjZVNldHRpbmd8U3RhcnQtRHRjfFN0YXJ0LUR0Y1RyYW5zYWN0aW9uc1RyYWNlU2Vzc2lvbnxTdG9wLUR0Y3xTdG9wLUR0Y1RyYW5zYWN0aW9uc1RyYWNlU2Vzc2lvbnxUZXN0LUR0Y3xVbmluc3RhbGwtRHRjfFdyaXRlLUR0Y1RyYW5zYWN0aW9uc1RyYWNlU2Vzc2lvbnxDb21wbGV0ZS1EdGNEaWFnbm9zdGljVHJhbnNhY3Rpb258Sm9pbi1EdGNEaWFnbm9zdGljUmVzb3VyY2VNYW5hZ2VyfE5ldy1EdGNEaWFnbm9zdGljVHJhbnNhY3Rpb258UmVjZWl2ZS1EdGNEaWFnbm9zdGljVHJhbnNhY3Rpb258U2VuZC1EdGNEaWFnbm9zdGljVHJhbnNhY3Rpb258U3RhcnQtRHRjRGlhZ25vc3RpY1Jlc291cmNlTWFuYWdlcnxTdG9wLUR0Y0RpYWdub3N0aWNSZXNvdXJjZU1hbmFnZXJ8VW5kby1EdGNEaWFnbm9zdGljVHJhbnNhY3Rpb258IiArCiAgICAgICAgIkRpc2FibGUtTmV0QWRhcHRlcnxEaXNhYmxlLU5ldEFkYXB0ZXJCaW5kaW5nfERpc2FibGUtTmV0QWRhcHRlckNoZWNrc3VtT2ZmbG9hZHxEaXNhYmxlLU5ldEFkYXB0ZXJFbmNhcHN1bGF0ZWRQYWNrZXRUYXNrT2ZmbG9hZHxEaXNhYmxlLU5ldEFkYXB0ZXJJUHNlY09mZmxvYWR8RGlzYWJsZS1OZXRBZGFwdGVyTHNvfERpc2FibGUtTmV0QWRhcHRlclBhY2tldERpcmVjdHxEaXNhYmxlLU5ldEFkYXB0ZXJQb3dlck1hbmFnZW1lbnR8RGlzYWJsZS1OZXRBZGFwdGVyUW9zfERpc2FibGUtTmV0QWRhcHRlclJkbWF8RGlzYWJsZS1OZXRBZGFwdGVyUnNjfERpc2FibGUtTmV0QWRhcHRlclJzc3xEaXNhYmxlLU5ldEFkYXB0ZXJTcmlvdnxEaXNhYmxlLU5ldEFkYXB0ZXJWbXF8RW5hYmxlLU5ldEFkYXB0ZXJ8RW5hYmxlLU5ldEFkYXB0ZXJCaW5kaW5nfEVuYWJsZS1OZXRBZGFwdGVyQ2hlY2tzdW1PZmZsb2FkfEVuYWJsZS1OZXRBZGFwdGVyRW5jYXBzdWxhdGVkUGFja2V0VGFza09mZmxvYWR8RW5hYmxlLU5ldEFkYXB0ZXJJUHNlY09mZmxvYWR8RW5hYmxlLU5ldEFkYXB0ZXJMc298RW5hYmxlLU5ldEFkYXB0ZXJQYWNrZXREaXJlY3R8RW5hYmxlLU5ldEFkYXB0ZXJQb3dlck1hbmFnZW1lbnR8RW5hYmxlLU5ldEFkYXB0ZXJRb3N8RW5hYmxlLU5ldEFkYXB0ZXJSZG1hfEVuYWJsZS1OZXRBZGFwdGVyUnNjfEVuYWJsZS1OZXRBZGFwdGVyUnNzfEVuYWJsZS1OZXRBZGFwdGVyU3Jpb3Z8RW5hYmxlLU5ldEFkYXB0ZXJWbXF8R2V0LU5ldEFkYXB0ZXJ8R2V0LU5ldEFkYXB0ZXJBZHZhbmNlZFByb3BlcnR5fEdldC1OZXRBZGFwdGVyQmluZGluZ3xHZXQtTmV0QWRhcHRlckNoZWNrc3VtT2ZmbG9hZHxHZXQtTmV0QWRhcHRlckVuY2Fwc3VsYXRlZFBhY2tldFRhc2tPZmZsb2FkfEdldC1OZXRBZGFwdGVySGFyZHdhcmVJbmZvfEdldC1OZXRBZGFwdGVySVBzZWNPZmZsb2FkfEdldC1OZXRBZGFwdGVyTHNvfEdldC1OZXRBZGFwdGVyUGFja2V0RGlyZWN0fEdldC1OZXRBZGFwdGVyUG93ZXJNYW5hZ2VtZW50fEdldC1OZXRBZGFwdGVyUW9zfEdldC1OZXRBZGFwdGVyUmRtYXxHZXQtTmV0QWRhcHRlclJzY3xHZXQtTmV0QWRhcHRlclJzc3xHZXQtTmV0QWRhcHRlclNyaW92fEdldC1OZXRBZGFwdGVyU3Jpb3ZWZnxHZXQtTmV0QWRhcHRlclN0YXRpc3RpY3N8R2V0LU5ldEFkYXB0ZXJWbXF8R2V0LU5ldEFkYXB0ZXJWbXFRdWV1ZXxHZXQtTmV0QWRhcHRlclZQb3J0fE5ldy1OZXRBZGFwdGVyQWR2YW5jZWRQcm9wZXJ0eXxSZW1vdmUtTmV0QWRhcHRlckFkdmFuY2VkUHJvcGVydHl8UmVuYW1lLU5ldEFkYXB0ZXJ8UmVzZXQtTmV0QWRhcHRlckFkdmFuY2VkUHJvcGVydHl8UmVzdGFydC1OZXRBZGFwdGVyfFNldC1OZXRBZGFwdGVyfFNldC1OZXRBZGFwdGVyQWR2YW5jZWRQcm9wZXJ0eXxTZXQtTmV0QWRhcHRlckJpbmRpbmd8U2V0LU5ldEFkYXB0ZXJDaGVja3N1bU9mZmxvYWR8U2V0LU5ldEFkYXB0ZXJFbmNhcHN1bGF0ZWRQYWNrZXRUYXNrT2ZmbG9hZHxTZXQtTmV0QWRhcHRlcklQc2VjT2ZmbG9hZHxTZXQtTmV0QWRhcHRlckxzb3xTZXQtTmV0QWRhcHRlclBhY2tldERpcmVjdHxTZXQtTmV0QWRhcHRlclBvd2VyTWFuYWdlbWVudHxTZXQtTmV0QWRhcHRlclFvc3xTZXQtTmV0QWRhcHRlclJkbWF8U2V0LU5ldEFkYXB0ZXJSc2N8U2V0LU5ldEFkYXB0ZXJSc3N8U2V0LU5ldEFkYXB0ZXJTcmlvdnxTZXQtTmV0QWRhcHRlclZtcXwiICsKICAgICAgICAiR2V0LU5ldENvbm5lY3Rpb25Qcm9maWxlfFNldC1OZXRDb25uZWN0aW9uUHJvZmlsZXwiICsKICAgICAgICAiQWRkLU5ldEV2ZW50TmV0d29ya0FkYXB0ZXJ8QWRkLU5ldEV2ZW50UGFja2V0Q2FwdHVyZVByb3ZpZGVyfEFkZC1OZXRFdmVudFByb3ZpZGVyfEFkZC1OZXRFdmVudFZtTmV0d29ya0FkYXB0ZXJ8QWRkLU5ldEV2ZW50Vm1Td2l0Y2h8QWRkLU5ldEV2ZW50V0ZQQ2FwdHVyZVByb3ZpZGVyfEdldC1OZXRFdmVudE5ldHdvcmtBZGFwdGVyfEdldC1OZXRFdmVudFBhY2tldENhcHR1cmVQcm92aWRlcnxHZXQtTmV0RXZlbnRQcm92aWRlcnxHZXQtTmV0RXZlbnRTZXNzaW9ufEdldC1OZXRFdmVudFZtTmV0d29ya0FkYXB0ZXJ8R2V0LU5ldEV2ZW50Vm1Td2l0Y2h8R2V0LU5ldEV2ZW50V0ZQQ2FwdHVyZVByb3ZpZGVyfE5ldy1OZXRFdmVudFNlc3Npb258UmVtb3ZlLU5ldEV2ZW50TmV0d29ya0FkYXB0ZXJ8UmVtb3ZlLU5ldEV2ZW50UGFja2V0Q2FwdHVyZVByb3ZpZGVyfFJlbW92ZS1OZXRFdmVudFByb3ZpZGVyfFJlbW92ZS1OZXRFdmVudFNlc3Npb258UmVtb3ZlLU5ldEV2ZW50Vm1OZXR3b3JrQWRhcHRlcnxSZW1vdmUtTmV0RXZlbnRWbVN3aXRjaHxSZW1vdmUtTmV0RXZlbnRXRlBDYXB0dXJlUHJvdmlkZXJ8U2V0LU5ldEV2ZW50UGFja2V0Q2FwdHVyZVByb3ZpZGVyfFNldC1OZXRFdmVudFByb3ZpZGVyfFNldC1OZXRFdmVudFNlc3Npb258U2V0LU5ldEV2ZW50V0ZQQ2FwdHVyZVByb3ZpZGVyfFN0YXJ0LU5ldEV2ZW50U2Vzc2lvbnxTdG9wLU5ldEV2ZW50U2Vzc2lvbnwiICsKICAgICAgICAiQWRkLU5ldExiZm9UZWFtTWVtYmVyfEFkZC1OZXRMYmZvVGVhbU5pY3xHZXQtTmV0TGJmb1RlYW18R2V0LU5ldExiZm9UZWFtTWVtYmVyfEdldC1OZXRMYmZvVGVhbU5pY3xOZXctTmV0TGJmb1RlYW18UmVtb3ZlLU5ldExiZm9UZWFtfFJlbW92ZS1OZXRMYmZvVGVhbU1lbWJlcnxSZW1vdmUtTmV0TGJmb1RlYW1OaWN8UmVuYW1lLU5ldExiZm9UZWFtfFNldC1OZXRMYmZvVGVhbXxTZXQtTmV0TGJmb1RlYW1NZW1iZXJ8U2V0LU5ldExiZm9UZWFtTmljfCIgKwogICAgICAgICJBZGQtTmV0TmF0RXh0ZXJuYWxBZGRyZXNzfEFkZC1OZXROYXRTdGF0aWNNYXBwaW5nfEdldC1OZXROYXR8R2V0LU5ldE5hdEV4dGVybmFsQWRkcmVzc3xHZXQtTmV0TmF0R2xvYmFsfEdldC1OZXROYXRTZXNzaW9ufEdldC1OZXROYXRTdGF0aWNNYXBwaW5nfE5ldy1OZXROYXR8UmVtb3ZlLU5ldE5hdHxSZW1vdmUtTmV0TmF0RXh0ZXJuYWxBZGRyZXNzfFJlbW92ZS1OZXROYXRTdGF0aWNNYXBwaW5nfFNldC1OZXROYXR8U2V0LU5ldE5hdEdsb2JhbHwiICsKICAgICAgICAiR2V0LU5ldFFvc1BvbGljeXxOZXctTmV0UW9zUG9saWN5fFJlbW92ZS1OZXRRb3NQb2xpY3l8U2V0LU5ldFFvc1BvbGljeXwiICsKICAgICAgICAiQ29weS1OZXRGaXJld2FsbFJ1bGV8Q29weS1OZXRJUHNlY01haW5Nb2RlQ3J5cHRvU2V0fENvcHktTmV0SVBzZWNNYWluTW9kZVJ1bGV8Q29weS1OZXRJUHNlY1BoYXNlMUF1dGhTZXR8Q29weS1OZXRJUHNlY1BoYXNlMkF1dGhTZXR8Q29weS1OZXRJUHNlY1F1aWNrTW9kZUNyeXB0b1NldHxDb3B5LU5ldElQc2VjUnVsZXxEaXNhYmxlLU5ldEZpcmV3YWxsUnVsZXxEaXNhYmxlLU5ldElQc2VjTWFpbk1vZGVSdWxlfERpc2FibGUtTmV0SVBzZWNSdWxlfEVuYWJsZS1OZXRGaXJld2FsbFJ1bGV8RW5hYmxlLU5ldElQc2VjTWFpbk1vZGVSdWxlfEVuYWJsZS1OZXRJUHNlY1J1bGV8RmluZC1OZXRJUHNlY1J1bGV8R2V0LU5ldEZpcmV3YWxsQWRkcmVzc0ZpbHRlcnxHZXQtTmV0RmlyZXdhbGxBcHBsaWNhdGlvbkZpbHRlcnxHZXQtTmV0RmlyZXdhbGxJbnRlcmZhY2VGaWx0ZXJ8R2V0LU5ldEZpcmV3YWxsSW50ZXJmYWNlVHlwZUZpbHRlcnxHZXQtTmV0RmlyZXdhbGxQb3J0RmlsdGVyfEdldC1OZXRGaXJld2FsbFByb2ZpbGV8R2V0LU5ldEZpcmV3YWxsUnVsZXxHZXQtTmV0RmlyZXdhbGxTZWN1cml0eUZpbHRlcnxHZXQtTmV0RmlyZXdhbGxTZXJ2aWNlRmlsdGVyfEdldC1OZXRGaXJld2FsbFNldHRpbmd8R2V0LU5ldElQc2VjRG9zcFNldHRpbmd8R2V0LU5ldElQc2VjTWFpbk1vZGVDcnlwdG9TZXR8R2V0LU5ldElQc2VjTWFpbk1vZGVSdWxlfEdldC1OZXRJUHNlY01haW5Nb2RlU0F8R2V0LU5ldElQc2VjUGhhc2UxQXV0aFNldHxHZXQtTmV0SVBzZWNQaGFzZTJBdXRoU2V0fEdldC1OZXRJUHNlY1F1aWNrTW9kZUNyeXB0b1NldHxHZXQtTmV0SVBzZWNRdWlja01vZGVTQXxHZXQtTmV0SVBzZWNSdWxlfE5ldy1OZXRGaXJld2FsbFJ1bGV8TmV3LU5ldElQc2VjRG9zcFNldHRpbmd8TmV3LU5ldElQc2VjTWFpbk1vZGVDcnlwdG9TZXR8TmV3LU5ldElQc2VjTWFpbk1vZGVSdWxlfE5ldy1OZXRJUHNlY1BoYXNlMUF1dGhTZXR8TmV3LU5ldElQc2VjUGhhc2UyQXV0aFNldHxOZXctTmV0SVBzZWNRdWlja01vZGVDcnlwdG9TZXR8TmV3LU5ldElQc2VjUnVsZXxPcGVuLU5ldEdQT3xSZW1vdmUtTmV0RmlyZXdhbGxSdWxlfFJlbW92ZS1OZXRJUHNlY0Rvc3BTZXR0aW5nfFJlbW92ZS1OZXRJUHNlY01haW5Nb2RlQ3J5cHRvU2V0fFJlbW92ZS1OZXRJUHNlY01haW5Nb2RlUnVsZXxSZW1vdmUtTmV0SVBzZWNNYWluTW9kZVNBfFJlbW92ZS1OZXRJUHNlY1BoYXNlMUF1dGhTZXR8UmVtb3ZlLU5ldElQc2VjUGhhc2UyQXV0aFNldHxSZW1vdmUtTmV0SVBzZWNRdWlja01vZGVDcnlwdG9TZXR8UmVtb3ZlLU5ldElQc2VjUXVpY2tNb2RlU0F8UmVtb3ZlLU5ldElQc2VjUnVsZXxSZW5hbWUtTmV0RmlyZXdhbGxSdWxlfFJlbmFtZS1OZXRJUHNlY01haW5Nb2RlQ3J5cHRvU2V0fFJlbmFtZS1OZXRJUHNlY01haW5Nb2RlUnVsZXxSZW5hbWUtTmV0SVBzZWNQaGFzZTFBdXRoU2V0fFJlbmFtZS1OZXRJUHNlY1BoYXNlMkF1dGhTZXR8UmVuYW1lLU5ldElQc2VjUXVpY2tNb2RlQ3J5cHRvU2V0fFJlbmFtZS1OZXRJUHNlY1J1bGV8U2F2ZS1OZXRHUE98U2V0LU5ldEZpcmV3YWxsQWRkcmVzc0ZpbHRlcnxTZXQtTmV0RmlyZXdhbGxBcHBsaWNhdGlvbkZpbHRlcnxTZXQtTmV0RmlyZXdhbGxJbnRlcmZhY2VGaWx0ZXJ8U2V0LU5ldEZpcmV3YWxsSW50ZXJmYWNlVHlwZUZpbHRlcnxTZXQtTmV0RmlyZXdhbGxQb3J0RmlsdGVyfFNldC1OZXRGaXJld2FsbFByb2ZpbGV8U2V0LU5ldEZpcmV3YWxsUnVsZXxTZXQtTmV0RmlyZXdhbGxTZWN1cml0eUZpbHRlcnxTZXQtTmV0RmlyZXdhbGxTZXJ2aWNlRmlsdGVyfFNldC1OZXRGaXJld2FsbFNldHRpbmd8U2V0LU5ldElQc2VjRG9zcFNldHRpbmd8U2V0LU5ldElQc2VjTWFpbk1vZGVDcnlwdG9TZXR8U2V0LU5ldElQc2VjTWFpbk1vZGVSdWxlfFNldC1OZXRJUHNlY1BoYXNlMUF1dGhTZXR8U2V0LU5ldElQc2VjUGhhc2UyQXV0aFNldHxTZXQtTmV0SVBzZWNRdWlja01vZGVDcnlwdG9TZXR8U2V0LU5ldElQc2VjUnVsZXxTaG93LU5ldEZpcmV3YWxsUnVsZXxTaG93LU5ldElQc2VjUnVsZXxTeW5jLU5ldElQc2VjUnVsZXxVcGRhdGUtTmV0SVBzZWNSdWxlfEdldC1EQVBvbGljeUNoYW5nZXxOZXctTmV0SVBzZWNBdXRoUHJvcG9zYWx8TmV3LU5ldElQc2VjTWFpbk1vZGVDcnlwdG9Qcm9wb3NhbHxOZXctTmV0SVBzZWNRdWlja01vZGVDcnlwdG9Qcm9wb3NhbHwiICsKICAgICAgICAiQWRkLU5ldFN3aXRjaFRlYW1NZW1iZXJ8R2V0LU5ldFN3aXRjaFRlYW18R2V0LU5ldFN3aXRjaFRlYW1NZW1iZXJ8TmV3LU5ldFN3aXRjaFRlYW18UmVtb3ZlLU5ldFN3aXRjaFRlYW18UmVtb3ZlLU5ldFN3aXRjaFRlYW1NZW1iZXJ8UmVuYW1lLU5ldFN3aXRjaFRlYW18IiArCiAgICAgICAgIkZpbmQtTmV0Um91dGV8R2V0LU5ldENvbXBhcnRtZW50fEdldC1OZXRJUEFkZHJlc3N8R2V0LU5ldElQQ29uZmlndXJhdGlvbnxHZXQtTmV0SVBJbnRlcmZhY2V8R2V0LU5ldElQdjRQcm90b2NvbHxHZXQtTmV0SVB2NlByb3RvY29sfEdldC1OZXROZWlnaGJvcnxHZXQtTmV0T2ZmbG9hZEdsb2JhbFNldHRpbmd8R2V0LU5ldFByZWZpeFBvbGljeXxHZXQtTmV0Um91dGV8R2V0LU5ldFRDUENvbm5lY3Rpb258R2V0LU5ldFRDUFNldHRpbmd8R2V0LU5ldFRyYW5zcG9ydEZpbHRlcnxHZXQtTmV0VURQRW5kcG9pbnR8R2V0LU5ldFVEUFNldHRpbmd8TmV3LU5ldElQQWRkcmVzc3xOZXctTmV0TmVpZ2hib3J8TmV3LU5ldFJvdXRlfE5ldy1OZXRUcmFuc3BvcnRGaWx0ZXJ8UmVtb3ZlLU5ldElQQWRkcmVzc3xSZW1vdmUtTmV0TmVpZ2hib3J8UmVtb3ZlLU5ldFJvdXRlfFJlbW92ZS1OZXRUcmFuc3BvcnRGaWx0ZXJ8U2V0LU5ldElQQWRkcmVzc3xTZXQtTmV0SVBJbnRlcmZhY2V8U2V0LU5ldElQdjRQcm90b2NvbHxTZXQtTmV0SVB2NlByb3RvY29sfFNldC1OZXROZWlnaGJvcnxTZXQtTmV0T2ZmbG9hZEdsb2JhbFNldHRpbmd8U2V0LU5ldFJvdXRlfFNldC1OZXRUQ1BTZXR0aW5nfFNldC1OZXRVRFBTZXR0aW5nfFRlc3QtTmV0Q29ubmVjdGlvbnwiICsKICAgICAgICAiR2V0LURBQ29ubmVjdGlvblN0YXR1c3xHZXQtTkNTSVBvbGljeUNvbmZpZ3VyYXRpb258UmVzZXQtTkNTSVBvbGljeUNvbmZpZ3VyYXRpb258U2V0LU5DU0lQb2xpY3lDb25maWd1cmF0aW9ufCIgKwogICAgICAgICJEaXNhYmxlLU5ldHdvcmtTd2l0Y2hFdGhlcm5ldFBvcnR8RGlzYWJsZS1OZXR3b3JrU3dpdGNoRmVhdHVyZXxEaXNhYmxlLU5ldHdvcmtTd2l0Y2hWbGFufEVuYWJsZS1OZXR3b3JrU3dpdGNoRXRoZXJuZXRQb3J0fEVuYWJsZS1OZXR3b3JrU3dpdGNoRmVhdHVyZXxFbmFibGUtTmV0d29ya1N3aXRjaFZsYW58R2V0LU5ldHdvcmtTd2l0Y2hFdGhlcm5ldFBvcnR8R2V0LU5ldHdvcmtTd2l0Y2hGZWF0dXJlfEdldC1OZXR3b3JrU3dpdGNoR2xvYmFsRGF0YXxHZXQtTmV0d29ya1N3aXRjaFZsYW58TmV3LU5ldHdvcmtTd2l0Y2hWbGFufFJlbW92ZS1OZXR3b3JrU3dpdGNoRXRoZXJuZXRQb3J0SVBBZGRyZXNzfFJlbW92ZS1OZXR3b3JrU3dpdGNoVmxhbnxSZXN0b3JlLU5ldHdvcmtTd2l0Y2hDb25maWd1cmF0aW9ufFNhdmUtTmV0d29ya1N3aXRjaENvbmZpZ3VyYXRpb258U2V0LU5ldHdvcmtTd2l0Y2hFdGhlcm5ldFBvcnRJUEFkZHJlc3N8U2V0LU5ldHdvcmtTd2l0Y2hQb3J0TW9kZXxTZXQtTmV0d29ya1N3aXRjaFBvcnRQcm9wZXJ0eXxTZXQtTmV0d29ya1N3aXRjaFZsYW5Qcm9wZXJ0eXwiICsKICAgICAgICAiQWRkLU5ldElQSHR0cHNDZXJ0QmluZGluZ3xEaXNhYmxlLU5ldERuc1RyYW5zaXRpb25Db25maWd1cmF0aW9ufERpc2FibGUtTmV0SVBIdHRwc1Byb2ZpbGV8RGlzYWJsZS1OZXROYXRUcmFuc2l0aW9uQ29uZmlndXJhdGlvbnxFbmFibGUtTmV0RG5zVHJhbnNpdGlvbkNvbmZpZ3VyYXRpb258RW5hYmxlLU5ldElQSHR0cHNQcm9maWxlfEVuYWJsZS1OZXROYXRUcmFuc2l0aW9uQ29uZmlndXJhdGlvbnxHZXQtTmV0NnRvNENvbmZpZ3VyYXRpb258R2V0LU5ldERuc1RyYW5zaXRpb25Db25maWd1cmF0aW9ufEdldC1OZXREbnNUcmFuc2l0aW9uTW9uaXRvcmluZ3xHZXQtTmV0SVBIdHRwc0NvbmZpZ3VyYXRpb258R2V0LU5ldElQSHR0cHNTdGF0ZXxHZXQtTmV0SXNhdGFwQ29uZmlndXJhdGlvbnxHZXQtTmV0TmF0VHJhbnNpdGlvbkNvbmZpZ3VyYXRpb258R2V0LU5ldE5hdFRyYW5zaXRpb25Nb25pdG9yaW5nfEdldC1OZXRUZXJlZG9Db25maWd1cmF0aW9ufEdldC1OZXRUZXJlZG9TdGF0ZXxOZXctTmV0SVBIdHRwc0NvbmZpZ3VyYXRpb258TmV3LU5ldE5hdFRyYW5zaXRpb25Db25maWd1cmF0aW9ufFJlbW92ZS1OZXRJUEh0dHBzQ2VydEJpbmRpbmd8UmVtb3ZlLU5ldElQSHR0cHNDb25maWd1cmF0aW9ufFJlbW92ZS1OZXROYXRUcmFuc2l0aW9uQ29uZmlndXJhdGlvbnxSZW5hbWUtTmV0SVBIdHRwc0NvbmZpZ3VyYXRpb258UmVzZXQtTmV0NnRvNENvbmZpZ3VyYXRpb258UmVzZXQtTmV0RG5zVHJhbnNpdGlvbkNvbmZpZ3VyYXRpb258UmVzZXQtTmV0SVBIdHRwc0NvbmZpZ3VyYXRpb258UmVzZXQtTmV0SXNhdGFwQ29uZmlndXJhdGlvbnxSZXNldC1OZXRUZXJlZG9Db25maWd1cmF0aW9ufFNldC1OZXQ2dG80Q29uZmlndXJhdGlvbnxTZXQtTmV0RG5zVHJhbnNpdGlvbkNvbmZpZ3VyYXRpb258U2V0LU5ldElQSHR0cHNDb25maWd1cmF0aW9ufFNldC1OZXRJc2F0YXBDb25maWd1cmF0aW9ufFNldC1OZXROYXRUcmFuc2l0aW9uQ29uZmlndXJhdGlvbnxTZXQtTmV0VGVyZWRvQ29uZmlndXJhdGlvbnwiICsKICAgICAgICAiRmluZC1QYWNrYWdlfEZpbmQtUGFja2FnZVByb3ZpZGVyfEdldC1QYWNrYWdlfEdldC1QYWNrYWdlUHJvdmlkZXJ8R2V0LVBhY2thZ2VTb3VyY2V8SW1wb3J0LVBhY2thZ2VQcm92aWRlcnxJbnN0YWxsLVBhY2thZ2V8SW5zdGFsbC1QYWNrYWdlUHJvdmlkZXJ8UmVnaXN0ZXItUGFja2FnZVNvdXJjZXxTYXZlLVBhY2thZ2V8U2V0LVBhY2thZ2VTb3VyY2V8VW5pbnN0YWxsLVBhY2thZ2V8VW5yZWdpc3Rlci1QYWNrYWdlU291cmNlfCIgKwogICAgICAgICJDbGVhci1QY3N2RGV2aWNlTG9nfEdldC1QY3N2RGV2aWNlfEdldC1QY3N2RGV2aWNlTG9nfFJlc3RhcnQtUGNzdkRldmljZXxTZXQtUGNzdkRldmljZUJvb3RDb25maWd1cmF0aW9ufFNldC1QY3N2RGV2aWNlTmV0d29ya0NvbmZpZ3VyYXRpb258U2V0LVBjc3ZEZXZpY2VVc2VyUGFzc3dvcmR8U3RhcnQtUGNzdkRldmljZXxTdG9wLVBjc3ZEZXZpY2V8IiArCiAgICAgICAgIkFmdGVyQWxsfEFmdGVyRWFjaHxBc3NlcnQtTW9ja0NhbGxlZHxBc3NlcnQtVmVyaWZpYWJsZU1vY2tzfEJlZm9yZUFsbHxCZWZvcmVFYWNofENvbnRleHR8RGVzY3JpYmV8R2V0LU1vY2tEeW5hbWljUGFyYW1ldGVyc3xHZXQtVGVzdERyaXZlSXRlbXxJbnxJbk1vZHVsZVNjb3BlfEludm9rZS1Nb2NrfEludm9rZS1QZXN0ZXJ8SXR8TW9ja3xOZXctRml4dHVyZXxTZXQtRHluYW1pY1BhcmFtZXRlclZhcmlhYmxlc3xTZXR1cHxTaG91bGR8IiArCiAgICAgICAgIkFkZC1DZXJ0aWZpY2F0ZUVucm9sbG1lbnRQb2xpY3lTZXJ2ZXJ8RXhwb3J0LUNlcnRpZmljYXRlfEV4cG9ydC1QZnhDZXJ0aWZpY2F0ZXxHZXQtQ2VydGlmaWNhdGV8R2V0LUNlcnRpZmljYXRlQXV0b0Vucm9sbG1lbnRQb2xpY3l8R2V0LUNlcnRpZmljYXRlRW5yb2xsbWVudFBvbGljeVNlcnZlcnxHZXQtQ2VydGlmaWNhdGVOb3RpZmljYXRpb25UYXNrfEdldC1QZnhEYXRhfEltcG9ydC1DZXJ0aWZpY2F0ZXxJbXBvcnQtUGZ4Q2VydGlmaWNhdGV8TmV3LUNlcnRpZmljYXRlTm90aWZpY2F0aW9uVGFza3xOZXctU2VsZlNpZ25lZENlcnRpZmljYXRlfFJlbW92ZS1DZXJ0aWZpY2F0ZUVucm9sbG1lbnRQb2xpY3lTZXJ2ZXJ8UmVtb3ZlLUNlcnRpZmljYXRlTm90aWZpY2F0aW9uVGFza3xTZXQtQ2VydGlmaWNhdGVBdXRvRW5yb2xsbWVudFBvbGljeXxTd2l0Y2gtQ2VydGlmaWNhdGV8VGVzdC1DZXJ0aWZpY2F0ZXwiICsKICAgICAgICAiRGlzYWJsZS1QbnBEZXZpY2V8RW5hYmxlLVBucERldmljZXxHZXQtUG5wRGV2aWNlfEdldC1QbnBEZXZpY2VQcm9wZXJ0eXwiICsKICAgICAgICAiRmluZC1Ec2NSZXNvdXJjZXxGaW5kLU1vZHVsZXxGaW5kLVNjcmlwdHxHZXQtSW5zdGFsbGVkTW9kdWxlfEdldC1JbnN0YWxsZWRTY3JpcHR8R2V0LVBTUmVwb3NpdG9yeXxJbnN0YWxsLU1vZHVsZXxJbnN0YWxsLVNjcmlwdHxOZXctU2NyaXB0RmlsZUluZm98UHVibGlzaC1Nb2R1bGV8UHVibGlzaC1TY3JpcHR8UmVnaXN0ZXItUFNSZXBvc2l0b3J5fFNhdmUtTW9kdWxlfFNhdmUtU2NyaXB0fFNldC1QU1JlcG9zaXRvcnl8VGVzdC1TY3JpcHRGaWxlSW5mb3xVbmluc3RhbGwtTW9kdWxlfFVuaW5zdGFsbC1TY3JpcHR8VW5yZWdpc3Rlci1QU1JlcG9zaXRvcnl8VXBkYXRlLU1vZHVsZXxVcGRhdGUtTW9kdWxlTWFuaWZlc3R8VXBkYXRlLVNjcmlwdHxVcGRhdGUtU2NyaXB0RmlsZUluZm98IiArCiAgICAgICAgIkFkZC1QcmludGVyfEFkZC1QcmludGVyRHJpdmVyfEFkZC1QcmludGVyUG9ydHxHZXQtUHJpbnRDb25maWd1cmF0aW9ufEdldC1QcmludGVyfEdldC1QcmludGVyRHJpdmVyfEdldC1QcmludGVyUG9ydHxHZXQtUHJpbnRlclByb3BlcnR5fEdldC1QcmludEpvYnxSZWFkLVByaW50ZXJOZmNUYWd8UmVtb3ZlLVByaW50ZXJ8UmVtb3ZlLVByaW50ZXJEcml2ZXJ8UmVtb3ZlLVByaW50ZXJQb3J0fFJlbW92ZS1QcmludEpvYnxSZW5hbWUtUHJpbnRlcnxSZXN0YXJ0LVByaW50Sm9ifFJlc3VtZS1QcmludEpvYnxTZXQtUHJpbnRDb25maWd1cmF0aW9ufFNldC1QcmludGVyfFNldC1QcmludGVyUHJvcGVydHl8U3VzcGVuZC1QcmludEpvYnxXcml0ZS1QcmludGVyTmZjVGFnfCIgKwogICAgICAgICJDb25maWd1cmF0aW9ufERpc2FibGUtRHNjRGVidWd8RW5hYmxlLURzY0RlYnVnfEdldC1Ec2NDb25maWd1cmF0aW9ufEdldC1Ec2NDb25maWd1cmF0aW9uU3RhdHVzfEdldC1Ec2NMb2NhbENvbmZpZ3VyYXRpb25NYW5hZ2VyfEdldC1Ec2NSZXNvdXJjZXxOZXctRHNjQ2hlY2tzdW18UmVtb3ZlLURzY0NvbmZpZ3VyYXRpb25Eb2N1bWVudHxSZXN0b3JlLURzY0NvbmZpZ3VyYXRpb258U3RvcC1Ec2NDb25maWd1cmF0aW9ufEludm9rZS1Ec2NSZXNvdXJjZXxQdWJsaXNoLURzY0NvbmZpZ3VyYXRpb258U2V0LURzY0xvY2FsQ29uZmlndXJhdGlvbk1hbmFnZXJ8U3RhcnQtRHNjQ29uZmlndXJhdGlvbnxUZXN0LURzY0NvbmZpZ3VyYXRpb258VXBkYXRlLURzY0NvbmZpZ3VyYXRpb258IiArCiAgICAgICAgIkRpc2FibGUtUFNUcmFjZXxEaXNhYmxlLVBTV1NNYW5Db21iaW5lZFRyYWNlfERpc2FibGUtV1NNYW5UcmFjZXxFbmFibGUtUFNUcmFjZXxFbmFibGUtUFNXU01hbkNvbWJpbmVkVHJhY2V8RW5hYmxlLVdTTWFuVHJhY2V8R2V0LUxvZ1Byb3BlcnRpZXN8U2V0LUxvZ1Byb3BlcnRpZXN8U3RhcnQtVHJhY2V8U3RvcC1UcmFjZXwiICsKICAgICAgICAiUFNDb25zb2xlSG9zdFJlYWRsaW5lfEdldC1QU1JlYWRsaW5lS2V5SGFuZGxlcnxHZXQtUFNSZWFkbGluZU9wdGlvbnxSZW1vdmUtUFNSZWFkbGluZUtleUhhbmRsZXJ8U2V0LVBTUmVhZGxpbmVLZXlIYW5kbGVyfFNldC1QU1JlYWRsaW5lT3B0aW9ufCIgKwogICAgICAgICJBZGQtSm9iVHJpZ2dlcnxEaXNhYmxlLUpvYlRyaWdnZXJ8RGlzYWJsZS1TY2hlZHVsZWRKb2J8RW5hYmxlLUpvYlRyaWdnZXJ8RW5hYmxlLVNjaGVkdWxlZEpvYnxHZXQtSm9iVHJpZ2dlcnxHZXQtU2NoZWR1bGVkSm9ifEdldC1TY2hlZHVsZWRKb2JPcHRpb258TmV3LUpvYlRyaWdnZXJ8TmV3LVNjaGVkdWxlZEpvYk9wdGlvbnxSZWdpc3Rlci1TY2hlZHVsZWRKb2J8UmVtb3ZlLUpvYlRyaWdnZXJ8U2V0LUpvYlRyaWdnZXJ8U2V0LVNjaGVkdWxlZEpvYnxTZXQtU2NoZWR1bGVkSm9iT3B0aW9ufFVucmVnaXN0ZXItU2NoZWR1bGVkSm9ifCIgKwogICAgICAgICJOZXctUFNXb3JrZmxvd1Nlc3Npb258TmV3LVBTV29ya2Zsb3dFeGVjdXRpb25PcHRpb258IiArCiAgICAgICAgIkludm9rZS1Bc1dvcmtmbG93fCIgKwogICAgICAgICJEaXNhYmxlLVNjaGVkdWxlZFRhc2t8RW5hYmxlLVNjaGVkdWxlZFRhc2t8RXhwb3J0LVNjaGVkdWxlZFRhc2t8R2V0LUNsdXN0ZXJlZFNjaGVkdWxlZFRhc2t8R2V0LVNjaGVkdWxlZFRhc2t8R2V0LVNjaGVkdWxlZFRhc2tJbmZvfE5ldy1TY2hlZHVsZWRUYXNrfE5ldy1TY2hlZHVsZWRUYXNrQWN0aW9ufE5ldy1TY2hlZHVsZWRUYXNrUHJpbmNpcGFsfE5ldy1TY2hlZHVsZWRUYXNrU2V0dGluZ3NTZXR8TmV3LVNjaGVkdWxlZFRhc2tUcmlnZ2VyfFJlZ2lzdGVyLUNsdXN0ZXJlZFNjaGVkdWxlZFRhc2t8UmVnaXN0ZXItU2NoZWR1bGVkVGFza3xTZXQtQ2x1c3RlcmVkU2NoZWR1bGVkVGFza3xTZXQtU2NoZWR1bGVkVGFza3xTdGFydC1TY2hlZHVsZWRUYXNrfFN0b3AtU2NoZWR1bGVkVGFza3xVbnJlZ2lzdGVyLUNsdXN0ZXJlZFNjaGVkdWxlZFRhc2t8VW5yZWdpc3Rlci1TY2hlZHVsZWRUYXNrfCIgKwogICAgICAgICJDb25maXJtLVNlY3VyZUJvb3RVRUZJfEZvcm1hdC1TZWN1cmVCb290VUVGSXxHZXQtU2VjdXJlQm9vdFBvbGljeXxHZXQtU2VjdXJlQm9vdFVFRkl8U2V0LVNlY3VyZUJvb3RVRUZJfCIgKwogICAgICAgICJCbG9jay1TbWJTaGFyZUFjY2Vzc3xDbG9zZS1TbWJPcGVuRmlsZXxDbG9zZS1TbWJTZXNzaW9ufERpc2FibGUtU21iRGVsZWdhdGlvbnxFbmFibGUtU21iRGVsZWdhdGlvbnxHZXQtU21iQmFuZHdpZHRoTGltaXR8R2V0LVNtYkNsaWVudENvbmZpZ3VyYXRpb258R2V0LVNtYkNsaWVudE5ldHdvcmtJbnRlcmZhY2V8R2V0LVNtYkNvbm5lY3Rpb258R2V0LVNtYkRlbGVnYXRpb258R2V0LVNtYk1hcHBpbmd8R2V0LVNtYk11bHRpY2hhbm5lbENvbm5lY3Rpb258R2V0LVNtYk11bHRpY2hhbm5lbENvbnN0cmFpbnR8R2V0LVNtYk9wZW5GaWxlfEdldC1TbWJTZXJ2ZXJDb25maWd1cmF0aW9ufEdldC1TbWJTZXJ2ZXJOZXR3b3JrSW50ZXJmYWNlfEdldC1TbWJTZXNzaW9ufEdldC1TbWJTaGFyZXxHZXQtU21iU2hhcmVBY2Nlc3N8R3JhbnQtU21iU2hhcmVBY2Nlc3N8TmV3LVNtYk1hcHBpbmd8TmV3LVNtYk11bHRpY2hhbm5lbENvbnN0cmFpbnR8TmV3LVNtYlNoYXJlfFJlbW92ZS1TbWJCYW5kd2lkdGhMaW1pdHxSZW1vdmUtU21iTWFwcGluZ3xSZW1vdmUtU21iTXVsdGljaGFubmVsQ29uc3RyYWludHxSZW1vdmUtU21iU2hhcmV8UmV2b2tlLVNtYlNoYXJlQWNjZXNzfFNldC1TbWJCYW5kd2lkdGhMaW1pdHxTZXQtU21iQ2xpZW50Q29uZmlndXJhdGlvbnxTZXQtU21iUGF0aEFjbHxTZXQtU21iU2VydmVyQ29uZmlndXJhdGlvbnxTZXQtU21iU2hhcmV8VW5ibG9jay1TbWJTaGFyZUFjY2Vzc3xVcGRhdGUtU21iTXVsdGljaGFubmVsQ29ubmVjdGlvbnwiICsKICAgICAgICAiTW92ZS1TbWJDbGllbnR8R2V0LVNtYldpdG5lc3NDbGllbnR8TW92ZS1TbWJXaXRuZXNzQ2xpZW50fCIgKwogICAgICAgICJHZXQtU3RhcnRBcHBzfEV4cG9ydC1TdGFydExheW91dHxJbXBvcnQtU3RhcnRMYXlvdXR8IiArCiAgICAgICAgIkRpc2FibGUtUGh5c2ljYWxEaXNrSW5kaWNhdGlvbnxEaXNhYmxlLVN0b3JhZ2VEaWFnbm9zdGljTG9nfEVuYWJsZS1QaHlzaWNhbERpc2tJbmRpY2F0aW9ufEVuYWJsZS1TdG9yYWdlRGlhZ25vc3RpY0xvZ3xGbHVzaC1Wb2x1bWV8R2V0LURpc2tTTlZ8R2V0LVBoeXNpY2FsRGlza1NOVnxHZXQtU3RvcmFnZUVuY2xvc3VyZVNOVnxJbml0aWFsaXplLVZvbHVtZXxXcml0ZS1GaWxlU3lzdGVtQ2FjaGV8QWRkLUluaXRpYXRvcklkVG9NYXNraW5nU2V0fEFkZC1QYXJ0aXRpb25BY2Nlc3NQYXRofEFkZC1QaHlzaWNhbERpc2t8QWRkLVRhcmdldFBvcnRUb01hc2tpbmdTZXR8QWRkLVZpcnR1YWxEaXNrVG9NYXNraW5nU2V0fEJsb2NrLUZpbGVTaGFyZUFjY2Vzc3xDbGVhci1EaXNrfENsZWFyLUZpbGVTdG9yYWdlVGllcnxDbGVhci1TdG9yYWdlRGlhZ25vc3RpY0luZm98Q29ubmVjdC1WaXJ0dWFsRGlza3xEZWJ1Zy1GaWxlU2hhcmV8RGVidWctU3RvcmFnZVN1YlN5c3RlbXxEZWJ1Zy1Wb2x1bWV8RGlzYWJsZS1QaHlzaWNhbERpc2tJZGVudGlmaWNhdGlvbnxEaXNhYmxlLVN0b3JhZ2VFbmNsb3N1cmVJZGVudGlmaWNhdGlvbnxEaXNhYmxlLVN0b3JhZ2VIaWdoQXZhaWxhYmlsaXR5fERpc2Nvbm5lY3QtVmlydHVhbERpc2t8RGlzbW91bnQtRGlza0ltYWdlfEVuYWJsZS1QaHlzaWNhbERpc2tJZGVudGlmaWNhdGlvbnxFbmFibGUtU3RvcmFnZUVuY2xvc3VyZUlkZW50aWZpY2F0aW9ufEVuYWJsZS1TdG9yYWdlSGlnaEF2YWlsYWJpbGl0eXxGb3JtYXQtVm9sdW1lfEdldC1EZWR1cFByb3BlcnRpZXN8R2V0LURpc2t8R2V0LURpc2tJbWFnZXxHZXQtRGlza1N0b3JhZ2VOb2RlVmlld3xHZXQtRmlsZUludGVncml0eXxHZXQtRmlsZVNoYXJlfEdldC1GaWxlU2hhcmVBY2Nlc3NDb250cm9sRW50cnl8R2V0LUZpbGVTdG9yYWdlVGllcnxHZXQtSW5pdGlhdG9ySWR8R2V0LUluaXRpYXRvclBvcnR8R2V0LU1hc2tpbmdTZXR8R2V0LU9mZmxvYWREYXRhVHJhbnNmZXJTZXR0aW5nfEdldC1QYXJ0aXRpb258R2V0LVBhcnRpdGlvblN1cHBvcnRlZFNpemV8R2V0LVBoeXNpY2FsRGlza3xHZXQtUGh5c2ljYWxEaXNrU3RvcmFnZU5vZGVWaWV3fEdldC1SZXNpbGllbmN5U2V0dGluZ3xHZXQtU3RvcmFnZUFkdmFuY2VkUHJvcGVydHl8R2V0LVN0b3JhZ2VEaWFnbm9zdGljSW5mb3xHZXQtU3RvcmFnZUVuY2xvc3VyZXxHZXQtU3RvcmFnZUVuY2xvc3VyZVN0b3JhZ2VOb2RlVmlld3xHZXQtU3RvcmFnZUVuY2xvc3VyZVZlbmRvckRhdGF8R2V0LVN0b3JhZ2VGYXVsdERvbWFpbnxHZXQtU3RvcmFnZUZpbGVTZXJ2ZXJ8R2V0LVN0b3JhZ2VGaXJtd2FyZUluZm9ybWF0aW9ufEdldC1TdG9yYWdlSGVhbHRoQWN0aW9ufEdldC1TdG9yYWdlSGVhbHRoUmVwb3J0fEdldC1TdG9yYWdlSGVhbHRoU2V0dGluZ3xHZXQtU3RvcmFnZUpvYnxHZXQtU3RvcmFnZU5vZGV8R2V0LVN0b3JhZ2VQb29sfEdldC1TdG9yYWdlUHJvdmlkZXJ8R2V0LVN0b3JhZ2VSZWxpYWJpbGl0eUNvdW50ZXJ8R2V0LVN0b3JhZ2VTZXR0aW5nfEdldC1TdG9yYWdlU3ViU3lzdGVtfEdldC1TdG9yYWdlVGllcnxHZXQtU3RvcmFnZVRpZXJTdXBwb3J0ZWRTaXplfEdldC1TdXBwb3J0ZWRDbHVzdGVyU2l6ZXN8R2V0LVN1cHBvcnRlZEZpbGVTeXN0ZW1zfEdldC1UYXJnZXRQb3J0fEdldC1UYXJnZXRQb3J0YWx8R2V0LVZpcnR1YWxEaXNrfEdldC1WaXJ0dWFsRGlza1N1cHBvcnRlZFNpemV8R2V0LVZvbHVtZXxHZXQtVm9sdW1lQ29ycnVwdGlvbkNvdW50fEdldC1Wb2x1bWVTY3J1YlBvbGljeXxHcmFudC1GaWxlU2hhcmVBY2Nlc3N8SGlkZS1WaXJ0dWFsRGlza3xJbml0aWFsaXplLURpc2t8TW91bnQtRGlza0ltYWdlfE5ldy1GaWxlU2hhcmV8TmV3LU1hc2tpbmdTZXR8TmV3LVBhcnRpdGlvbnxOZXctU3RvcmFnZUZpbGVTZXJ2ZXJ8TmV3LVN0b3JhZ2VQb29sfE5ldy1TdG9yYWdlU3Vic3lzdGVtVmlydHVhbERpc2t8TmV3LVN0b3JhZ2VUaWVyfE5ldy1WaXJ0dWFsRGlza3xOZXctVmlydHVhbERpc2tDbG9uZXxOZXctVmlydHVhbERpc2tTbmFwc2hvdHxOZXctVm9sdW1lfE9wdGltaXplLVN0b3JhZ2VQb29sfE9wdGltaXplLVZvbHVtZXxSZWdpc3Rlci1TdG9yYWdlU3Vic3lzdGVtfFJlbW92ZS1GaWxlU2hhcmV8UmVtb3ZlLUluaXRpYXRvcklkfFJlbW92ZS1Jbml0aWF0b3JJZEZyb21NYXNraW5nU2V0fFJlbW92ZS1NYXNraW5nU2V0fFJlbW92ZS1QYXJ0aXRpb258UmVtb3ZlLVBhcnRpdGlvbkFjY2Vzc1BhdGh8UmVtb3ZlLVBoeXNpY2FsRGlza3xSZW1vdmUtU3RvcmFnZUZpbGVTZXJ2ZXJ8UmVtb3ZlLVN0b3JhZ2VIZWFsdGhTZXR0aW5nfFJlbW92ZS1TdG9yYWdlUG9vbHxSZW1vdmUtU3RvcmFnZVRpZXJ8UmVtb3ZlLVRhcmdldFBvcnRGcm9tTWFza2luZ1NldHxSZW1vdmUtVmlydHVhbERpc2t8UmVtb3ZlLVZpcnR1YWxEaXNrRnJvbU1hc2tpbmdTZXR8UmVuYW1lLU1hc2tpbmdTZXR8UmVwYWlyLUZpbGVJbnRlZ3JpdHl8UmVwYWlyLVZpcnR1YWxEaXNrfFJlcGFpci1Wb2x1bWV8UmVzZXQtUGh5c2ljYWxEaXNrfFJlc2V0LVN0b3JhZ2VSZWxpYWJpbGl0eUNvdW50ZXJ8UmVzaXplLVBhcnRpdGlvbnxSZXNpemUtU3RvcmFnZVRpZXJ8UmVzaXplLVZpcnR1YWxEaXNrfFJldm9rZS1GaWxlU2hhcmVBY2Nlc3N8U2V0LURpc2t8U2V0LUZpbGVJbnRlZ3JpdHl8U2V0LUZpbGVTaGFyZXxTZXQtRmlsZVN0b3JhZ2VUaWVyfFNldC1Jbml0aWF0b3JQb3J0fFNldC1QYXJ0aXRpb258U2V0LVBoeXNpY2FsRGlza3xTZXQtUmVzaWxpZW5jeVNldHRpbmd8U2V0LVN0b3JhZ2VGaWxlU2VydmVyfFNldC1TdG9yYWdlSGVhbHRoU2V0dGluZ3xTZXQtU3RvcmFnZVBvb2x8U2V0LVN0b3JhZ2VQcm92aWRlcnxTZXQtU3RvcmFnZVNldHRpbmd8U2V0LVN0b3JhZ2VTdWJTeXN0ZW18U2V0LVN0b3JhZ2VUaWVyfFNldC1WaXJ0dWFsRGlza3xTZXQtVm9sdW1lfFNldC1Wb2x1bWVTY3J1YlBvbGljeXxTaG93LVZpcnR1YWxEaXNrfFN0YXJ0LVN0b3JhZ2VEaWFnbm9zdGljTG9nfFN0b3AtU3RvcmFnZURpYWdub3N0aWNMb2d8U3RvcC1TdG9yYWdlSm9ifFVuYmxvY2stRmlsZVNoYXJlQWNjZXNzfFVucmVnaXN0ZXItU3RvcmFnZVN1YnN5c3RlbXxVcGRhdGUtRGlza3xVcGRhdGUtSG9zdFN0b3JhZ2VDYWNoZXxVcGRhdGUtU3RvcmFnZUZpcm13YXJlfFVwZGF0ZS1TdG9yYWdlUG9vbHxVcGRhdGUtU3RvcmFnZVByb3ZpZGVyQ2FjaGV8V3JpdGUtVm9sdW1lQ2FjaGV8IiArCiAgICAgICAgIkRpc2FibGUtVGxzQ2lwaGVyU3VpdGV8RGlzYWJsZS1UbHNTZXNzaW9uVGlja2V0S2V5fEVuYWJsZS1UbHNDaXBoZXJTdWl0ZXxFbmFibGUtVGxzU2Vzc2lvblRpY2tldEtleXxFeHBvcnQtVGxzU2Vzc2lvblRpY2tldEtleXxHZXQtVGxzQ2lwaGVyU3VpdGV8TmV3LVRsc1Nlc3Npb25UaWNrZXRLZXl8IiArCiAgICAgICAgIkdldC1Ucm91Ymxlc2hvb3RpbmdQYWNrfEludm9rZS1Ucm91Ymxlc2hvb3RpbmdQYWNrfCIgKwogICAgICAgICJDbGVhci1UcG18Q29udmVydFRvLVRwbU93bmVyQXV0aHxEaXNhYmxlLVRwbUF1dG9Qcm92aXNpb25pbmd8RW5hYmxlLVRwbUF1dG9Qcm92aXNpb25pbmd8R2V0LVRwbXxHZXQtVHBtRW5kb3JzZW1lbnRLZXlJbmZvfEdldC1UcG1TdXBwb3J0ZWRGZWF0dXJlfEltcG9ydC1UcG1Pd25lckF1dGh8SW5pdGlhbGl6ZS1UcG18U2V0LVRwbU93bmVyQXV0aHxVbmJsb2NrLVRwbXwiICsKICAgICAgICAiQWRkLVZwbkNvbm5lY3Rpb258QWRkLVZwbkNvbm5lY3Rpb25Sb3V0ZXxBZGQtVnBuQ29ubmVjdGlvblRyaWdnZXJBcHBsaWNhdGlvbnxBZGQtVnBuQ29ubmVjdGlvblRyaWdnZXJEbnNDb25maWd1cmF0aW9ufEFkZC1WcG5Db25uZWN0aW9uVHJpZ2dlclRydXN0ZWROZXR3b3JrfEdldC1WcG5Db25uZWN0aW9ufEdldC1WcG5Db25uZWN0aW9uVHJpZ2dlcnxOZXctRWFwQ29uZmlndXJhdGlvbnxOZXctVnBuU2VydmVyQWRkcmVzc3xSZW1vdmUtVnBuQ29ubmVjdGlvbnxSZW1vdmUtVnBuQ29ubmVjdGlvblJvdXRlfFJlbW92ZS1WcG5Db25uZWN0aW9uVHJpZ2dlckFwcGxpY2F0aW9ufFJlbW92ZS1WcG5Db25uZWN0aW9uVHJpZ2dlckRuc0NvbmZpZ3VyYXRpb258UmVtb3ZlLVZwbkNvbm5lY3Rpb25UcmlnZ2VyVHJ1c3RlZE5ldHdvcmt8U2V0LVZwbkNvbm5lY3Rpb258U2V0LVZwbkNvbm5lY3Rpb25JUHNlY0NvbmZpZ3VyYXRpb258U2V0LVZwbkNvbm5lY3Rpb25Qcm94eXxTZXQtVnBuQ29ubmVjdGlvblRyaWdnZXJEbnNDb25maWd1cmF0aW9ufFNldC1WcG5Db25uZWN0aW9uVHJpZ2dlclRydXN0ZWROZXR3b3JrfCIgKwogICAgICAgICJBZGQtT2RiY0RzbnxEaXNhYmxlLU9kYmNQZXJmQ291bnRlcnxEaXNhYmxlLVdkYWNCaWRUcmFjZXxFbmFibGUtT2RiY1BlcmZDb3VudGVyfEVuYWJsZS1XZGFjQmlkVHJhY2V8R2V0LU9kYmNEcml2ZXJ8R2V0LU9kYmNEc258R2V0LU9kYmNQZXJmQ291bnRlcnxHZXQtV2RhY0JpZFRyYWNlfFJlbW92ZS1PZGJjRHNufFNldC1PZGJjRHJpdmVyfFNldC1PZGJjRHNufCIgKwogICAgICAgICJHZXQtV2luZG93c0RldmVsb3BlckxpY2Vuc2V8U2hvdy1XaW5kb3dzRGV2ZWxvcGVyTGljZW5zZVJlZ2lzdHJhdGlvbnxVbnJlZ2lzdGVyLVdpbmRvd3NEZXZlbG9wZXJMaWNlbnNlfCIgKwogICAgICAgICJEaXNhYmxlLVdpbmRvd3NFcnJvclJlcG9ydGluZ3xFbmFibGUtV2luZG93c0Vycm9yUmVwb3J0aW5nfEdldC1XaW5kb3dzRXJyb3JSZXBvcnRpbmd8IiArCiAgICAgICAgIkdldC1XaW5kb3dzU2VhcmNoU2V0dGluZ3xTZXQtV2luZG93c1NlYXJjaFNldHRpbmd8IiArCiAgICAgICAgIkdldC1XaW5kb3dzVXBkYXRlTG9nIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMKICAgIH0sICJpZGVudGlmaWVyIik7CiAgICB2YXIgYmluYXJ5T3BlcmF0b3JzUmUgPSAoCiAgICAgICAgImVxfG5lfGd0fGx0fGxlfGdlfGxpa2V8bm90bGlrZXxtYXRjaHxub3RtYXRjaHxjb250YWluc3xub3Rjb250YWluc3xpbnxub3RpbnxiYW5kfGJvcnxieG9yfGJub3R8IiArIAogICAgICAgICJjZXF8Y25lfGNndHxjbHR8Y2xlfGNnZXxjbGlrZXxjbm90bGlrZXxjbWF0Y2h8Y25vdG1hdGNofGNjb250YWluc3xjbm90Y29udGFpbnN8Y2lufGNub3RpbnwiICsgCiAgICAgICAgImllcXxpbmV8aWd0fGlsdHxpbGV8aWdlfGlsaWtlfGlub3RsaWtlfGltYXRjaHxpbm90bWF0Y2h8aWNvbnRhaW5zfGlub3Rjb250YWluc3xpaW58aW5vdGlufCIgKwogICAgICAgICJhbmR8b3J8eG9yfG5vdHwiICsKICAgICAgICAic3BsaXR8am9pbnxyZXBsYWNlfGZ8IiArCiAgICAgICAgImNzcGxpdHxjcmVwbGFjZXwiICsKICAgICAgICAiaXNwbGl0fGlyZXBsYWNlfCIgKwogICAgICAgICJpc3xpc25vdHxhc3wiICsKICAgICAgICAic2hsfHNociIKICAgICk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjwjIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJF0oPzpbVHRdcnVlfFtGZl1hbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyRdW05uXXVsbFxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUuaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyRdW2EtekEtWl1bYS16QS1aMC05X10qXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXFwtXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwtKD86IiArIGJpbmFyeU9wZXJhdG9yc1JlICsgIikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJnxcXCt8XFwtfFxcKnxcXC98XFwlfFxcPXxcXD58XFwmfFxcIXxcXHwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjPiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJkb2MuY29tbWVudC50YWciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxcLlxcdysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhQb3dlcnNoZWxsSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlBvd2Vyc2hlbGxIaWdobGlnaHRSdWxlcyA9IFBvd2Vyc2hlbGxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Bvd2Vyc2hlbGwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9wb3dlcnNoZWxsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBQb3dlcnNoZWxsSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Bvd2Vyc2hlbGxfaGlnaGxpZ2h0X3J1bGVzIikuUG93ZXJzaGVsbEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQb3dlcnNoZWxsSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSh7c3RhcnQ6ICJeXFxzKig8IykiLCBlbmQ6ICJeWyNcXHNdPlxccyokIn0pOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiPCMiLCBlbmQ6ICIjPiJ9OwogICAgCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQogICAgICAKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9wb3dlcnNoZWxsIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcG93ZXJzaGVsbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-praat.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wcmFhdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBQcmFhdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJpZnx0aGVufGVsc2V8ZWxzaWZ8ZWxpZnxlbmRpZnxmaXwiICsKICAgICAgICAiZW5kZm9yfGVuZHByb2N8IiArIC8vIHJlbGF0ZWQga2V5d29yZHMgc3BlY2lmaWVkIGJlbG93CiAgICAgICAgIndoaWxlfGVuZHdoaWxlfCIgKwogICAgICAgICJyZXBlYXR8dW50aWx8IiArCiAgICAgICAgInNlbGVjdHxwbHVzfG1pbnVzfCIgKwogICAgICAgICJhc3NlcnR8YXNzZXJ0ZXJyb3IiCiAgICApOwoKICAgIHZhciBwcmVkZWZpbmVkVmFyaWFibGVzID0gKAogICAgICAgICJtYWNpbnRvc2h8d2luZG93c3x1bml4fCIgKwogICAgICAgICJwcmFhdFZlcnNpb258cHJhYXRWZXJzaW9uXFwkIiArCiAgICAgICAgInBpfHVuZGVmaW5lZHwiICsKICAgICAgICAibmV3bGluZVxcJHx0YWJcXCR8IiArCiAgICAgICAgInNoZWxsRGlyZWN0b3J5XFwkfGhvbWVEaXJlY3RvcnlcXCR8cHJlZmVyZW5jZXNEaXJlY3RvcnlcXCR8IiArCiAgICAgICAgInRlbXBvcmFyeURpcmVjdG9yeVxcJHxkZWZhdWx0RGlyZWN0b3J5XFwkIgogICAgKTsKICAgIHZhciBkaXJlY3RpdmVzID0gKAogICAgICAgICJjbGVhcmluZm98ZW5kU2VuZFByYWF0IgogICAgKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gKAogICAgICAgICJ3cml0ZUluZm98d3JpdGVJbmZvTGluZXxhcHBlbmRJbmZvfGFwcGVuZEluZm9MaW5lfGluZm9cXCR8IiArCiAgICAgICAgIndyaXRlRmlsZXx3cml0ZUZpbGVMaW5lfGFwcGVuZEZpbGV8YXBwZW5kRmlsZUxpbmV8IiArCiAgICAgICAgImFic3xyb3VuZHxmbG9vcnxjZWlsaW5nfG1pbnxtYXh8aW1pbnxpbWF4fCIgKwogICAgICAgICJzcXJ0fHNpbnxjb3N8dGFufGFyY3NpbnxhcmNjb3N8YXJjdGFufGFyY3RhbjJ8c2luY3xzaW5jcGl8IiArCiAgICAgICAgImV4cHxsbnxsbkJldGF8bG5HYW1tYXxsb2cxMHxsb2cyfCIgKwogICAgICAgICJzaW5ofGNvc2h8dGFuaHxhcmNzaW5ofGFyY2Nvc2h8YXJjdGFuaHwiICsKICAgICAgICAic2lnbW9pZHxpbnZTaWdtb2lkfGVyZnxlcmZjfCIgKwogICAgICAgICJyYW5kb20oPzpVbmlmb3JtfEludGVnZXJ8R2F1c3N8UG9pc3NvbnxCaW5vbWlhbCl8IiArCiAgICAgICAgImdhdXNzUHxnYXVzc1F8aW52R2F1c3NRfGluY29tcGxldGVHYW1tYVB8aW5jb21wbGV0ZUJldGF8IiArCiAgICAgICAgImNoaVNxdWFyZVB8Y2hpU3F1YXJlUXxpbnZDaGlTcXVhcmVRfHN0dWRlbnRQfHN0dWRlbnRRfGludlN0dWRlbnRRfCIgKwogICAgICAgICJmaXNoZXJQfGZpc2hlclF8aW52RmlzaGVyUXwiICsKICAgICAgICAiYmlub21pYWxQfGJpbm9taWFsUXxpbnZCaW5vbWlhbFB8aW52Qmlub21pYWxRfCIgKwogICAgICAgICJoZXJ0elRvQmFya3xiYXJrVG9IZXJ6fCIgKwogICAgICAgICJoZXJ0elRvTWVsfG1lbFRvSGVydHp8IiArCiAgICAgICAgImhlcnR6VG9TZW1pdG9uZXN8c2VtaXRvbmVzVG9IZXJ6fCIgKwogICAgICAgICJlcmJ8aGVydHpUb0VyYnxlcmJUb0hlcnR6fCIgKwogICAgICAgICJwaG9uVG9EaWZmZXJlbmNlTGltZW5zfGRpZmZlcmVuY2VMaW1lbnNUb1Bob258IiArCiAgICAgICAgInNvdW5kUHJlc3N1cmVUb1Bob258IiArCiAgICAgICAgImJldGF8YmV0YTJ8YmVzc2VsSXxiZXNzZWxLfCIgKwogICAgICAgICJudW1iZXJPZkNvbHVtbnN8bnVtYmVyT2ZSb3dzfCIgKwogICAgICAgICJzZWxlY3RlZHxzZWxlY3RlZFxcJHxudW1iZXJPZlNlbGVjdGVkfHZhcmlhYmxlRXhpc3RzfCIrCiAgICAgICAgImluZGV4fHJpbmRleHxzdGFydHNXaXRofGVuZHNXaXRofCIrCiAgICAgICAgImluZGV4X3JlZ2V4fHJpbmRleF9yZWdleHxyZXBsYWNlX3JlZ2V4XFwkfCIrCiAgICAgICAgImxlbmd0aHxleHRyYWN0V29yZFxcJHxleHRyYWN0TGluZVxcJHxleHRyYWN0TnVtYmVyfCIgKwogICAgICAgICJsZWZ0XFwkfHJpZ2h0XFwkfG1pZFxcJHxyZXBsYWNlXFwkfCIgKwogICAgICAgICJkYXRlXFwkfGZpeGVkXFwkfHBlcmNlbnRcXCR8IiArCiAgICAgICAgInplcm8jfGxpbmVhciN8cmFuZG9tVW5pZm9ybSN8cmFuZG9tSW50ZWdlciN8cmFuZG9tR2F1c3MjfCIgKwogICAgICAgICJiZWdpblBhdXNlfGVuZFBhdXNlfCIgKwogICAgICAgICJkZW1vU2hvd3xkZW1vV2luZG93VGl0bGV8ZGVtb0lucHV0fGRlbW9XYWl0Rm9ySW5wdXR8IiArCiAgICAgICAgImRlbW9DbGlja2VkfGRlbW9DbGlja2VkSW58ZGVtb1h8ZGVtb1l8IiArCiAgICAgICAgImRlbW9LZXlQcmVzc2VkfGRlbW9LZXlcXCR8IiArCiAgICAgICAgImRlbW9FeHRyYUNvbnRyb2xLZXlQcmVzc2VkfGRlbW9TaGlmdEtleVByZXNzZWR8IisKICAgICAgICAiZGVtb0NvbW1hbmRLZXlQcmVzc2VkfGRlbW9PcHRpb25LZXlQcmVzc2VkfCIgKwogICAgICAgICJlbnZpcm9ubWVudFxcJHxjaG9vc2VSZWFkRmlsZVxcJHwiICsKICAgICAgICAiY2hvb3NlRGlyZWN0b3J5XFwkfGNyZWF0ZURpcmVjdG9yeXxmaWxlUmVhZGFibGV8ZGVsZXRlRmlsZXwiICsKICAgICAgICAic2VsZWN0T2JqZWN0fHJlbW92ZU9iamVjdHxwbHVzT2JqZWN0fG1pbnVzT2JqZWN0fCIgKwogICAgICAgICJydW5TY3JpcHR8ZXhpdFNjcmlwdHwiICsKICAgICAgICAiYmVnaW5TZW5kUHJhYXR8ZW5kU2VuZFByYWF0fCIgKwogICAgICAgICJvYmplY3RzQXJlSWRlbnRpY2FsIgogICAgKTsKCiAgICB2YXIgb2JqZWN0VHlwZXMgPSAoCiAgICAgICAgIkFjdGl2YXRpb258QWZmaW5lVHJhbnNmb3JtfEFtcGxpdHVkZVRpZXJ8QXJ0fEFydHdvcmR8QXV0b3NlZ21lbnR8IiAgKwogICAgICAgICJCYXJrRmlsdGVyfENDQXxDYXRlZ29yaWVzfENlcHN0cnVtfENlcHN0cnVtY3xDaGVieXNoZXZTZXJpZXN8IiAgICAgICsKICAgICAgICAiQ2xhc3NpZmljYXRpb25UYWJsZXxDb2NobGVhZ3JhbXxDb2xsZWN0aW9ufENvbmZpZ3VyYXRpb258IiAgICAgICAgICArCiAgICAgICAgIkNvbmZ1c2lvbnxDb250aW5nZW5jeVRhYmxlfENvcnB1c3xDb3JyZWxhdGlvbnxDb3ZhcmlhbmNlfCIgICAgICAgICAgKwogICAgICAgICJDcm9zc0NvcnJlbGF0aW9uVGFibGV8Q3Jvc3NDb3JyZWxhdGlvblRhYmxlc3xEVFd8RGlhZ29uYWxpemVyfCIgICAgICsKICAgICAgICAiRGlzY3JpbWluYW50fERpc3NpbWlsYXJpdHl8RGlzdGFuY2V8RGlzdHJpYnV0aW9uc3xEdXJhdGlvblRpZXJ8IiAgICArCiAgICAgICAgIkVFR3xFUlB8RVJQVGllcnxFaWdlbnxFeGNpdGF0aW9ufEV4Y2l0YXRpb25zfEV4cGVyaW1lbnRNRkN8RkZOZXR8IiAgKwogICAgICAgICJGZWF0dXJlV2VpZ2h0c3xGb3JtYW50fEZvcm1hbnRGaWx0ZXJ8Rm9ybWFudEdyaWR8Rm9ybWFudFBvaW50fCIgICAgICsKICAgICAgICAiRm9ybWFudFRpZXJ8R2F1c3NpYW5NaXh0dXJlfEhNTXxITU1fT2JzZXJ2YXRpb258IiAgICAgICAgICAgICAgICAgICArCiAgICAgICAgIkhNTV9PYnNlcnZhdGlvblNlcXVlbmNlfEhNTV9TdGF0ZXxITU1fU3RhdGVTZXF1ZW5jZXxIYXJtb25pY2l0eXwiICAgKwogICAgICAgICJJU3BsaW5lfEluZGV4fEludGVuc2l0eXxJbnRlbnNpdHlUaWVyfEludGVydmFsVGllcnxLTk58S2xhdHRHcmlkfCIgICsKICAgICAgICAiS2xhdHRUYWJsZXxMRkNDfExQQ3xMYWJlbHxMZWdlbmRyZVNlcmllc3xMaW5lYXJSZWdyZXNzaW9ufCIgICAgICAgICArCiAgICAgICAgIkxvZ2lzdGljUmVncmVzc2lvbnxMb25nU291bmR8THRhc3xNRkNDfE1TcGxpbmV8TWFuUGFnZXN8IiAgICAgICAgICAgKwogICAgICAgICJNYW5pcHVsYXRpb258TWF0cml4fE1lbEZpbHRlcnxNaXhpbmdNYXRyaXh8TW92aWV8TmV0d29ya3wiICAgICAgICAgICsKICAgICAgICAiT1RHcmFtbWFyfE9USGlzdG9yeXxPVE11bHRpfFBDQXxQYWlyRGlzdHJpYnV0aW9ufFBhcmFtQ3VydmV8IiAgICAgICArCiAgICAgICAgIlBhdHRlcm58UGVybXV0YXRpb258UGl0Y2h8UGl0Y2hUaWVyfFBvaW50UHJvY2Vzc3xQb2x5Z29ufCIgICAgICAgICAgKwogICAgICAgICJQb2x5bm9taWFsfFByb2NydXN0ZXN8UmVhbFBvaW50fFJlYWxUaWVyfFJlc3VsdHNNRkN8Um9vdHN8U1BJTkVUfCIgICsKICAgICAgICAiU1NDUHxTVkR8U2FsaWVuY2V8U2NhbGFyUHJvZHVjdHxTaW1pbGFyaXR5fFNpbXBsZVN0cmluZ3wiICAgICAgICAgICArCiAgICAgICAgIlNvcnRlZFNldE9mU3RyaW5nfFNvdW5kfFNwZWFrZXJ8U3BlY3Ryb2dyYW18U3BlY3RydW18U3BlY3RydW1UaWVyfCIgKwogICAgICAgICJTcGVlY2hTeW50aGVzaXplcnxTcGVsbGluZ0NoZWNrZXJ8U3RyaW5nc3xTdHJpbmdzSW5kZXh8VGFibGV8IiAgICAgICsKICAgICAgICAiVGFibGVPZlJlYWx8VGV4dEdyaWR8VGV4dEludGVydmFsfFRleHRQb2ludHxUZXh0VGllcnxUaWVyfCIgICAgICAgICArCiAgICAgICAgIlRyYW5zaXRpb258Vm9jYWxUcmFjdHxXZWlnaHR8V29yZExpc3QiCiAgICApOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5pbnRlcnBvbGF0ZWQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJygoPzpcLj9bYS16XVthLXpBLVowLTlfLl0qKSg/OlwkfCN8OlswLTldKyk/KScvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgImtleXdvcmQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyheXHMqKSg/OihcLj9bYS16XVthLXpBLVowLTlfLl0qXCQ/XHMrKSg9KShccyspKT8oc3RvcHdhdGNoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAia2V5d29yZCIsICJ0ZXh0IiwgInN0cmluZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKF5ccyopKHByaW50KD86bGluZXx0YWIpP3xlY2hvfGV4aXR8cGF1c2V8c2VuZCg/OnByYWF0fHNvY2tldCl8aW5jbHVkZXxleGVjdXRlfHN5c3RlbSg/Ol9ub2NoZWNrKT8pKFxzKykoLiopLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoXlxccyopKCIgKyBkaXJlY3RpdmVzICsgIikkIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhccyspKCg/OlwrfC18XC98XCp8PHw+KT0/fD09P3whPXwlfFxefFx8fGFuZHxvcnxub3QpKFxzKykvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgImtleXdvcmQiLCAidGV4dCIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oXlxzKikoPzooXC4/W2Etel1bYS16QS1aMC05Xy5dKlwkP1xzKykoPSkoXHMrKSk/KD86KCg/Om5vKT93YXJufCg/OnVuaXhfKT9ub2NoZWNrfG5vcHJvZ3Jlc3MpKFxzKykpPygoPzpbQS1aXVteLjoiXSspKD86JHwoPzpcLnszfXw6KSkpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJrZXl3b3JkIiwgInRleHQiLCAia2V5d29yZCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKF5ccyopKCg/Om5vKD86d2FybnxjaGVjaykpPykoXHMqKShcYig/OmVkaXRvcig/Ojo/KXxlbmRlZGl0b3IpXGIpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJrZXl3b3JkIiwgInRleHQiLCAia2V5d29yZCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKF5ccyopKD86KGRlbW8pPyhccyspKSgoPzpbQS1aXVteLjoiXSspKD86JHwoPzpcLnszfXw6KSkpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJrZXl3b3JkIiwgInRleHQiLCAia2V5d29yZCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXihccyopKD86KGRlbW8pKFxzKykpPygxMHwxMnwxNHwxNnwyNCkkLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJzdXBwb3J0LmZ1bmN0aW9uIiwgInRleHQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhccyopKGRvXCQ/KShccyo6XHMqfFxzKlwoXHMqKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm5hbWUudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIG9iamVjdFR5cGVzICsgIikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgcHJlZGVmaW5lZFZhcmlhYmxlcyArICIpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5mdW5jdGlvbiIsICJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoKD86IiArIGZ1bmN0aW9ucyArICIpXFwkPykoXFxzKig/Ojp8XFwoKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKFxiZm9yXGIpLywKICAgICAgICAgICAgICAgIG5leHQgOiAiZm9yIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihcXGIoPzoiICsga2V5d29yZHMgKyAiKVxcYikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iW14iXSoiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIlteIl0qJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogImJyb2tlbnN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAia2V5d29yZCIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLnNlY3Rpb24iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyheXHMqKShcYmZvcm1cYikoXHMrKSguKikvLAogICAgICAgICAgICAgICAgbmV4dCA6ICJmb3JtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xiWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrLV0/XGQrKT8pP1xiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocHJvY2VkdXJlKShccyspKFteOlxzXSspLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKEBcUyspKDp8XHMqXCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJrZXl3b3JkIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyheXHMqKShjYWxsKShccyspKFxTKykvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKF5ccyojfDspLiokLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xzKy8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImZvcm0iIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgImNvbnN0YW50Lm51bWVyaWMiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLygoPzpvcHRpb25tZW51fGNob2ljZSlccyspKFxTKzpccyspKFswLTldKykvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwgImNvbnN0YW50Lm51bWVyaWMiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLygoPzpvcHRpb258YnV0dG9uKVxzKykoWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrLV0/XGQrKT8pP1xiKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oKD86b3B0aW9ufGJ1dHRvbilccyspKC4qKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAidGV4dCIsICJzdHJpbmciXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLygoPzpzZW50ZW5jZXx0ZXh0KVxzKykoXFMrXHMqKSguKikvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwgInRleHQiLCAic3RyaW5nIiwgImludmFsaWQuaWxsZWdhbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHdvcmRccyspKFxTK1xzKikoXFMrKT8oXHMuKik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgImNvbnN0YW50Lmxhbmd1YWdlIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oYm9vbGVhblxzKykoXFMrXHMqKSgwfDF8Ij8oPzp5ZXN8bm8pIj8pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgImNvbnN0YW50Lm51bWVyaWMiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLygoPzpyZWFsfG5hdHVyYWx8cG9zaXRpdmV8aW50ZWdlcilccyspKFxTK1xzKikoWystXT9cZCsoPzooPzpcLlxkKik/KD86W2VFXVsrLV0/XGQrKT8pP1xiKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29tbWVudFxzKykoLiopLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ2VuZGZvcm0nLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImZvciIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwgInRleHQiLCAiY29uc3RhbnQubnVtZXJpYyIsICJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oZnJvbXx0bykoXHMrKShbKy1dP1xkKyg/Oig/OlwuXGQqKT8oPzpbZUVdWystXT9cZCspPyk/KShccyopLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oZnJvbXx0bykoXHMrXFMrXHMqKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8kLywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJicm9rZW5zdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsidGV4dCIsICJzdHJpbmciXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhccypcLnszfSkoW14iXSopLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhQcmFhdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QcmFhdEhpZ2hsaWdodFJ1bGVzID0gUHJhYXRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3ByYWF0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcHJhYXRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUHJhYXRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcHJhYXRfaGlnaGxpZ2h0X3J1bGVzIikuUHJhYXRIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUHJhYXRIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbOl1ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3ByYWF0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcHJhYXQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-prolog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wcm9sb2dfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUHJvbG9nSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsgc3RhcnQ6IAogICAgICAgWyB7IGluY2x1ZGU6ICcjY29tbWVudCcgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2Jhc2ljX2ZhY3QnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNydWxlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjZGlyZWN0aXZlJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjZmFjdCcgfSBdLAogICAgICAnI2F0b20nOiAKICAgICAgIFsgeyB0b2tlbjogJ2NvbnN0YW50Lm90aGVyLmF0b20ucHJvbG9nJywKICAgICAgICAgICByZWdleDogJ1xcYlthLXpdW2EtekEtWjAtOV9dKlxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMucHJvbG9nJywKICAgICAgICAgICByZWdleDogJy0/XFxkKyg/OlxcLlxcZCspPycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3N0cmluZycgfSBdLAogICAgICAnI2Jhc2ljX2VsZW0nOiAKICAgICAgIFsgeyBpbmNsdWRlOiAnI2NvbW1lbnQnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNzdGF0ZW1lbnQnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNjb25zdGFudHMnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNvcGVyYXRvcnMnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNidWlsdGlucycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2xpc3QnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNhdG9tJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0gXSwKICAgICAgJyNiYXNpY19mYWN0JzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdlbnRpdHkubmFtZS5mdW5jdGlvbi5mYWN0LmJhc2ljLnByb2xvZycsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmVuZC5mYWN0LmJhc2ljLnByb2xvZycgXSwKICAgICAgICAgICByZWdleDogJyhbYS16XVxcdyopKFxcLiknIH0gXSwKICAgICAgJyNidWlsdGlucyc6IAogICAgICAgWyB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi5idWlsdGluLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphYm9saXNofGFib3J0fGFuY2VzdG9yc3xhcmd8YXNjaWl8YXNzZXJ0W2F6XXxhdG9tKD86aWMpP3xib2R5fGNoYXJ8Y2xvc2V8Y29uY3xjb25jYXR8Y29uc3VsdHxkZWZpbmV8ZGVmaW5pdGlvbnxkeW5hbWljfGR1bXB8ZmFpbHxmaWxlfGZyZWV8ZnJlZV9wcm9jfGZ1bmN0b3J8Z2V0Y3xnb2FsfGhhbHR8aGVhZHxoZWFkfGludGVnZXJ8bGVuZ3RofGxpc3Rpbmd8bWF0Y2hfYXJnc3xtZW1iZXJ8bmV4dF9jbGF1c2V8bmx8bm9udmFyfG50aHxudW1iZXJ8Y3ZhcnN8bnZhcnN8b2Zmc2V0fG9wfHByaW50P3xwcm9tcHR8cHV0Y3xxdW90ZWR8cmF0b218cmVhZHxyZWRlZmluZXxyZW5hbWV8cmV0cmFjdCg/OmFsbCk/fHNlZXxzZWVpbmd8c2Vlbnxza2lwfHNweXxzdGF0aXN0aWNzfHN5c3RlbXx0YWJ8dGVsbHx0ZWxsaW5nfHRlcm18dGltZXx0b2xkfHVuaXZ8dW5saW5rX2NsYXVzZXx1bnNweV9wcmVkaWNhdGV8dmFyfHdyaXRlKVxcYicgfSBdLAogICAgICAnI2NvbW1lbnQnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5wcm9sb2cnLAogICAgICAgICAgICAgICdjb21tZW50LmxpbmUucGVyY2VudGFnZS5wcm9sb2cnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoJSkoLiokKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5wcm9sb2cnLAogICAgICAgICAgIHJlZ2V4OiAnL1xcKicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCovJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmJsb2NrLnByb2xvZycgfSBdIH0gXSwKICAgICAgJyNjb25zdGFudHMnOiAKICAgICAgIFsgeyB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzp0cnVlfGZhbHNlfHllc3xubylcXGInIH0gXSwKICAgICAgJyNkaXJlY3RpdmUnOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IuZGlyZWN0aXZlLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICc6LScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ21ldGEuZGlyZWN0aXZlLnByb2xvZycsIHJlZ2V4OiAnXFwuJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjc3RhdGVtZW50JyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5kaXJlY3RpdmUucHJvbG9nJyB9IF0gfSBdLAogICAgICAnI2V4cHInOiAKICAgICAgIFsgeyBpbmNsdWRlOiAnI2NvbW1lbnRzJyB9LAogICAgICAgICB7IHRva2VuOiAnbWV0YS5leHByZXNzaW9uLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXCgnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdtZXRhLmV4cHJlc3Npb24ucHJvbG9nJywgcmVnZXg6ICdcXCknLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNleHByJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5leHByZXNzaW9uLnByb2xvZycgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wuY3V0b2ZmLnByb2xvZycsIHJlZ2V4OiAnIScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmNvbnRyb2wuYW5kLnByb2xvZycsIHJlZ2V4OiAnLCcgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmNvbnRyb2wub3IucHJvbG9nJywgcmVnZXg6ICc7JyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjYmFzaWNfZWxlbScgfSBdLAogICAgICAnI2ZhY3QnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2VudGl0eS5uYW1lLmZ1bmN0aW9uLmZhY3QucHJvbG9nJywKICAgICAgICAgICAgICAncHVuY3R1YXRpb24uYmVnaW4uZmFjdC5wYXJhbWV0ZXJzLnByb2xvZycgXSwKICAgICAgICAgICByZWdleDogJyhbYS16XVxcdyopKFxcKCkoPyEuKjotKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZW5kLmZhY3QucGFyYW1ldGVycy5wcm9sb2cnLAogICAgICAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmVuZC5mYWN0LnByb2xvZycgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFxcKSkoXFwuPyknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjcGFyYW1ldGVyJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5mYWN0LnByb2xvZycgfSBdIH0gXSwKICAgICAgJyNsaXN0JzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5iZWdpbi5saXN0LnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXFsoPz0uKlxcXSknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5lbmQubGlzdC5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLmxpc3QucHJvbG9nJywgcmVnZXg6ICcsJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5jb25jYXQubGlzdC5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXHwnLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5saXN0LmNvbmNhdC5wcm9sb2cnLAogICAgICAgICAgICAgICAgICAgICByZWdleDogJyg/PVxccypcXF0pJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNiYXNpY19lbGVtJyB9LAogICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmxpc3QuY29uY2F0LnByb2xvZycgfSBdIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2Jhc2ljX2VsZW0nIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmxpc3QucHJvbG9nJyB9IF0gfSBdLAogICAgICAnI29wZXJhdG9ycyc6IAogICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5wcm9sb2cnLAogICAgICAgICAgIHJlZ2V4OiAnXFxcXFxcK3xcXGJub3RcXGJ8XFxiaXNcXGJ8LT58Wz48XXxbPjxcXFxcOj1dPz18KD86PVxcXFx8XFxcXD0pPScgfSBdLAogICAgICAnI3BhcmFtZXRlcic6IAogICAgICAgWyB7IHRva2VuOiAndmFyaWFibGUubGFuZ3VhZ2UuYW5vbnltb3VzLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGJfXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUucGFyYW1ldGVyLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGJbQS1aX11cXHcqXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwYXJhdG9yLnBhcmFtZXRlcnMucHJvbG9nJywgcmVnZXg6ICcsJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjYmFzaWNfZWxlbScgfSwKICAgICAgICAgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJ1teXFxzXScgfSBdLAogICAgICAnI3J1bGUnOiAKICAgICAgIFsgeyB0b2tlbjogJ21ldGEucnVsZS5wcm9sb2cnLAogICAgICAgICAgIHJlZ2V4OiAnKD89W2Etel1cXHcqLio6LSknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5ydWxlLmVuZC5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXC4nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnbWV0YS5ydWxlLnNpZ25hdHVyZS5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPz1bYS16XVxcdyouKjotKScsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICdtZXRhLnJ1bGUuc2lnbmF0dXJlLnByb2xvZycsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnKD89Oi0pJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICdlbnRpdHkubmFtZS5mdW5jdGlvbi5ydWxlLnByb2xvZycsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnW2Etel1cXHcqKD89XFwofFxccyo6LSknIH0sCiAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24ucnVsZS5wYXJhbWV0ZXJzLmJlZ2luLnByb2xvZycsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwoJywKICAgICAgICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5ydWxlLnBhcmFtZXRlcnMuZW5kLnByb2xvZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcXCknLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNwYXJhbWV0ZXInIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5ydWxlLnBhcmFtZXRlcnMucHJvbG9nJyB9IF0gfSwKICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5ydWxlLnNpZ25hdHVyZS5wcm9sb2cnIH0gXSB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmRlZmluaXRpb24ucHJvbG9nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnOi0nLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5ydWxlLmRlZmluaXRpb24ucHJvbG9nJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICcoPz1cXC4pJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb21tZW50JyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2V4cHInIH0sCiAgICAgICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEucnVsZS5kZWZpbml0aW9uLnByb2xvZycgfSBdIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLnJ1bGUucHJvbG9nJyB9IF0gfSBdLAogICAgICAnI3N0YXRlbWVudCc6IAogICAgICAgWyB7IHRva2VuOiAnbWV0YS5zdGF0ZW1lbnQucHJvbG9nJywKICAgICAgICAgICByZWdleDogJyg/PVthLXpdXFx3KlxcKCknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5lbmQuc3RhdGVtZW50LnBhcmFtZXRlcnMucHJvbG9nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwpJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2J1aWx0aW5zJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNhdG9tJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5iZWdpbi5zdGF0ZW1lbnQucGFyYW1ldGVycy5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCgnLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5zdGF0ZW1lbnQucGFyYW1ldGVycy5wcm9sb2cnLAogICAgICAgICAgICAgICAgICAgICByZWdleDogJyg/PVxcKSknLAogICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnNlcGFyYXRvci5zdGF0ZW1lbnQucHJvbG9nJywgcmVnZXg6ICcsJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2Jhc2ljX2VsZW0nIH0sCiAgICAgICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuc3RhdGVtZW50LnBhcmFtZXRlcnMucHJvbG9nJyB9IF0gfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuc3RhdGVtZW50LnByb2xvZycgfSBdIH0gXSwKICAgICAgJyNzdHJpbmcnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5wcm9sb2cnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLnByb2xvZycsIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUucXVvdGUucHJvbG9nJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXCdcJycgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQuc2luZ2xlLnByb2xvZycgfSBdIH0gXSwKICAgICAgJyN2YXJpYWJsZSc6IAogICAgICAgWyB7IHRva2VuOiAndmFyaWFibGUubGFuZ3VhZ2UuYW5vbnltb3VzLnByb2xvZycsCiAgICAgICAgICAgcmVnZXg6ICdcXGJfXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUub3RoZXIucHJvbG9nJywKICAgICAgICAgICByZWdleDogJ1xcYltBLVpfXVthLXpBLVowLTlfXSpcXGInIH0gXSB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpQcm9sb2dIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsgZmlsZVR5cGVzOiBbICdwbGcnLCAncHJvbG9nJyBdLAogICAgICBmb2xkaW5nU3RhcnRNYXJrZXI6ICcoJVxccypyZWdpb24gXFx3Kil8KFthLXpdXFx3Ki4qOi0gPyknLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJyglXFxzKmVuZChcXHMqcmVnaW9uKT8pfCg/PVxcLiknLAogICAgICBrZXlFcXVpdmFsZW50OiAnXn5QJywKICAgICAgbmFtZTogJ1Byb2xvZycsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5wcm9sb2cnIH07CgoKb29wLmluaGVyaXRzKFByb2xvZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Qcm9sb2dIaWdobGlnaHRSdWxlcyA9IFByb2xvZ0hpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Byb2xvZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3Byb2xvZ19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFByb2xvZ0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9wcm9sb2dfaGlnaGxpZ2h0X3J1bGVzIikuUHJvbG9nSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUHJvbG9nSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIlIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcHJvbG9nIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcHJvbG9nIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-properties.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wcm9wZXJ0aWVzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFByb3BlcnRpZXNIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBlc2NhcGVSZSA9IC9cXHVbMC05YS1mQS1GXXs0fXxcXC87CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bISNdLiokLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s9Ol0kLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s9Ol0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAidmFsdWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZVJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInZhcmlhYmxlIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAidmFsdWUiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZWdleCA6IC9cXCQvLAogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIG5leHQgOiAidmFsdWUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvLAogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZVJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07Cgp9OwoKb29wLmluaGVyaXRzKFByb3BlcnRpZXNIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUHJvcGVydGllc0hpZ2hsaWdodFJ1bGVzID0gUHJvcGVydGllc0hpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcHJvcGVydGllcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3Byb3BlcnRpZXNfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUHJvcGVydGllc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9wcm9wZXJ0aWVzX2hpZ2hsaWdodF9ydWxlcyIpLlByb3BlcnRpZXNIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUHJvcGVydGllc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Byb3BlcnRpZXMiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9wcm9wZXJ0aWVzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-protobuf.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jX2NwcF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY0Z1bmN0aW9ucyA9IGV4cG9ydHMuY0Z1bmN0aW9ucyA9ICJcXGIoPzpoeXBvdCg/OmZ8bCk/fHMoPzpzY2FuZnx5c3RlbXxucHJpbnRmfGNhKD86bmZ8bGIoPzpuKD86ZnxsKT98bG4oPzpmfGwpPykpfGkoPzpuKD86aCg/OmZ8bCk/fGZ8bCk/fGduKD86YWx8Yml0KSl8dHIoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT8pfGVycm9yfHBicmt8ZnRpbWV8bGVufHJjaHJ8eGZybSl8cHJpbnRmfGV0KD86am1wfHZidWZ8bG9jYWxlfGJ1Zil8cXJ0KD86ZnxsKT98dyg/OnNjYW5mfHByaW50Zil8cmFuZCl8big/OmUoPzphcmJ5aW50KD86ZnxsKT98eHQoPzp0b3dhcmQoPzpmfGwpP3xhZnRlcig/OmZ8bCk/KSl8YW4oPzpmfGwpPyl8Yyg/OnMoPzppbig/OmgoPzpmfGwpP3xmfGwpP3xxcnQoPzpmfGwpPyl8Y29zKD86aCg/OmYpP3xmfGwpP3xpbWFnKD86ZnxsKT98dCg/OmltZXxhbig/OmgoPzpmfGwpP3xmfGwpPyl8byg/OnMoPzpoKD86ZnxsKT98ZnxsKT98bmooPzpmfGwpP3xweXNpZ24oPzpmfGwpPyl8cCg/Om93KD86ZnxsKT98cm9qKD86ZnxsKT8pfGUoPzppbCg/OmZ8bCk/fHhwKD86ZnxsKT8pfGwoPzpvKD86Y2t8Zyg/OmZ8bCk/KXxlYXJlcnIpfGEoPzpzaW4oPzpoKD86ZnxsKT98ZnxsKT98Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHRhbig/OmgoPzpmfGwpP3xmfGwpP3xsbG9jfHJnKD86ZnxsKT98YnMoPzpmfGwpPyl8cmVhbCg/OmZ8bCk/fGJydCg/OmZ8bCk/KXx0KD86aW1lfG8oPzp1cHBlcnxsb3dlcil8YW4oPzpoKD86ZnxsKT98ZnxsKT98cnVuYyg/OmZ8bCk/fGdhbW1hKD86ZnxsKT98bXAoPzpuYW18ZmlsZSkpfGkoPzpzKD86c3BhY2V8big/Om9ybWFsfGFuKXxjbnRybHxpbmZ8ZGlnaXR8dSg/Om5vcmRlcmVkfHBwZXIpfHAoPzp1bmN0fHJpbnQpfGZpbml0ZXx3KD86c3BhY2V8Yyg/Om50cmx8dHlwZSl8ZGlnaXR8dXBwZXJ8cCg/OnVuY3R8cmludCl8bG93ZXJ8YWwoPzpudW18cGhhKXxncmFwaHx4ZGlnaXR8YmxhbmspfGwoPzpvd2VyfGVzcyg/OmVxdWFsfGdyZWF0ZXIpPyl8YWwoPzpudW18cGhhKXxncig/OmVhdGVyKD86ZXF1YWwpP3xhcGgpfHhkaWdpdHxibGFuayl8bG9nYig/OmZ8bCk/fG1heCg/OmRpdnxhYnMpKXxkaSg/OnZ8ZmZ0aW1lKXxfRXhpdHx1bmdldCg/OmN8d2MpfHAoPzpvdyg/OmZ8bCk/fHV0KD86c3xjKD86aGFyKT98d2MoPzpoYXIpPyl8ZXJyb3J8cmludGYpfGUoPzpyZig/OmMoPzpmfGwpP3xmfGwpP3x4KD86aXR8cCg/OjIoPzpmfGwpP3xmfGx8bTEoPzpmfGwpPyk/KSl8dig/OnMoPzpzY2FuZnxucHJpbnRmfGNhbmZ8cHJpbnRmfHcoPzpzY2FuZnxwcmludGYpKXxwcmludGZ8Zig/OnNjYW5mfHByaW50Znx3KD86c2NhbmZ8cHJpbnRmKSl8dyg/OnNjYW5mfHByaW50Zil8YV8oPzpzdGFydHxjb3B5fGVuZHxhcmcpKXxxc29ydHxmKD86cyg/OmNhbmZ8ZSg/OnRwb3N8ZWspKXxjbG9zZXx0ZWxsfG9wZW58ZGltKD86ZnxsKT98cCg/OmNsYXNzaWZ5fHV0KD86c3xjfHcoPzpzfGMpKXxyaW50Zil8ZSg/OmhvbGRleGNlcHR8c2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpfGNsZWFyZXhjZXB0fHRlc3RleGNlcHR8b2Z8dXBkYXRlZW52fHIoPzphaXNlZXhjZXB0fHJvcil8Z2V0KD86ZSg/Om52fHhjZXB0ZmxhZyl8cm91bmQpKXxmbHVzaHx3KD86c2NhbmZ8aWRlfHByaW50ZnxyaXRlKXxsb29yKD86ZnxsKT98YWJzKD86ZnxsKT98Z2V0KD86c3xjfHBvc3x3KD86c3xjKSl8cmUoPzpvcGVufGV8YWR8eHAoPzpmfGwpPyl8bSg/OmluKD86ZnxsKT98b2QoPzpmfGwpP3xhKD86ZnxsfHgoPzpmfGwpPyk/KSl8bCg/OmQoPzppdnxleHAoPzpmfGwpPyl8byg/Om5nam1wfGNhbCg/OnRpbWV8ZWNvbnYpfGcoPzoxKD86cCg/OmZ8bCk/fDAoPzpmfGwpPyl8Mig/OmZ8bCk/fGZ8bHxiKD86ZnxsKT8pPyl8YWJzfGwoPzpkaXZ8YWJzfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT8pKXxyKD86aW50KD86ZnxsKT98b3VuZCg/OmZ8bCk/KXxnYW1tYSg/OmZ8bCk/KXx3KD86c2NhbmZ8Yyg/OnMoPzpzKD86dHJ8cG4pfG5jKD86cHl8YXR8bXApfGMoPzpzcG58aHJ8b2xsfHB5fGF0fG1wKXx0byg/OmltYXh8ZHx1KD86bCg/OmwpP3xtYXgpfGt8ZnxsKD86ZHxsKT98bWJzKXxwYnJrfGZ0aW1lfGxlbnxyKD86Y2hyfHRvbWJzKXx4ZnJtKXx0byg/OmJ8bWIpfHJ0b21iKXxwcmludGZ8bWVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSkpfGEoPzpzKD86c2VydHxjdGltZXxpbig/OmgoPzpmfGwpP3xmfGwpPyl8Y29zKD86aCg/OmZ8bCk/fGZ8bCk/fHQoPzpvKD86aXxmfGwoPzpsKT8pfGV4aXR8YW4oPzpoKD86ZnxsKT98Mig/OmZ8bCk/fGZ8bCk/KXxiKD86c3xvcnQpKXxnKD86ZXQoPzpzfGMoPzpoYXIpP3xlbnZ8d2MoPzpoYXIpPyl8bXRpbWUpfHIoPzppbnQoPzpmfGwpP3xvdW5kKD86ZnxsKT98ZSg/Om5hbWV8YWxsb2N8d2luZHxtKD86b3ZlfHF1byg/OmZ8bCk/fGFpbmRlcig/OmZ8bCk/KSl8YSg/Om5kfGlzZSkpfGIoPzpzZWFyY2h8dG93Yyl8bSg/Om9kZig/OmZ8bCk/fGVtKD86c2V0fGMoPzpocnxweXxtcCl8bW92ZSl8a3RpbWV8YWxsb2N8Yig/OnMoPzppbml0fHRvd2NzfHJ0b3djcyl8dG93Y3xsZW58cig/OnRvd2N8bGVuKSkpKVxcYiI7Cgp2YXIgY19jcHBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBrZXl3b3JkQ29udHJvbHMgPSAoCiAgICAgICAgImJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGZvcnxnb3RvfGlmfF9QcmFnbWF8IiArCiAgICAgICAgInJldHVybnxzd2l0Y2h8d2hpbGV8Y2F0Y2h8b3BlcmF0b3J8dHJ5fHRocm93fHVzaW5nIgogICAgKTsKICAgIAogICAgdmFyIHN0b3JhZ2VUeXBlID0gKAogICAgICAgICJhc218X19hc21fX3xhdXRvfGJvb2x8X0Jvb2x8Y2hhcnxfQ29tcGxleHxkb3VibGV8ZW51bXxmbG9hdHwiICsKICAgICAgICAiX0ltYWdpbmFyeXxpbnR8bG9uZ3xzaG9ydHxzaWduZWR8c3RydWN0fHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHwiICsKICAgICAgICAiY2xhc3N8d2NoYXJfdHx0ZW1wbGF0ZXxjaGFyMTZfdHxjaGFyMzJfdCIKICAgICk7CgogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAoCiAgICAgICAgImNvbnN0fGV4dGVybnxyZWdpc3RlcnxyZXN0cmljdHxzdGF0aWN8dm9sYXRpbGV8aW5saW5lfHByaXZhdGV8IiArCiAgICAgICAgInByb3RlY3RlZHxwdWJsaWN8ZnJpZW5kfGV4cGxpY2l0fHZpcnR1YWx8ZXhwb3J0fG11dGFibGV8dHlwZW5hbWV8IiArCiAgICAgICAgImNvbnN0ZXhwcnxuZXd8ZGVsZXRlfGFsaWduYXN8YWxpZ25vZnxkZWNsdHlwZXxub2V4Y2VwdHx0aHJlYWRfbG9jYWwiCiAgICApOwoKICAgIHZhciBrZXl3b3JkT3BlcmF0b3JzID0gKAogICAgICAgICJhbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxjb21wbHxub3R8bm90X2VxfG9yfG9yX2VxfHR5cGVpZHx4b3J8eG9yX2VxfCIgKwogICAgICAgICJjb25zdF9jYXN0fGR5bmFtaWNfY2FzdHxyZWludGVycHJldF9jYXN0fHN0YXRpY19jYXN0fHNpemVvZnxuYW1lc3BhY2UiCiAgICApOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJOVUxMfHRydWV8ZmFsc2V8VFJVRXxGQUxTRXxudWxscHRyIgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuJGtleXdvcmRzID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sIiA6IGtleXdvcmRDb250cm9scywKICAgICAgICAic3RvcmFnZS50eXBlIiA6IHN0b3JhZ2VUeXBlLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIiA6IHN0b3JhZ2VNb2RpZmllcnMsCiAgICAgICAgImtleXdvcmQub3BlcmF0b3IiIDoga2V5d29yZE9wZXJhdG9ycywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKlxcYiI7CiAgICB2YXIgZXNjYXBlUmUgPSAvXFwoPzpbJyI/XFxhYmZucnR2XXxbMC03XXsxLDN9fHhbYS1mQS1GXGRdezJ9fHVbYS1mQS1GXGRdezR9VVthLWZBLUZcZF17OH18LikvLnNvdXJjZTsKICAgIHZhciBmb3JtYXRSZSA9ICIlIgogICAgICAgICAgKyAvKFxkK1wkKT8vLnNvdXJjZSAvLyBmaWVsZCAoYXJndW1lbnQgIykKICAgICAgICAgICsgL1sjMFwtICsnXSovLnNvdXJjZSAvLyBmbGFncwogICAgICAgICAgKyAvWyw7Ol9dPy8uc291cmNlIC8vIHNlcGFyYXRvciBjaGFyYWN0ZXIgKEFsdGlWZWMpCiAgICAgICAgICArIC8oKC0/XGQrKXxcKigtP1xkK1wkKT8pPy8uc291cmNlIC8vIG1pbmltdW0gZmllbGQgd2lkdGgKICAgICAgICAgICsgLyhcLigoLT9cZCspfFwqKC0/XGQrXCQpPyk/KT8vLnNvdXJjZSAvLyBwcmVjaXNpb24KICAgICAgICAgICsgLyhoaHxofGxsfGx8anx0fHp8cXxMfHZofHZsfHZ8aHZ8aGwpPy8uc291cmNlIC8vIGxlbmd0aCBtb2RpZmllcgogICAgICAgICAgKyAvKFxbW14iXF1dK1xdfFtkaW91eFhET1VlRWZGZ0dhQUNjU3NwbiVdKS8uc291cmNlOyAvLyBjb252ZXJzaW9uIHR5cGUKCiAgICB0aGlzLiRydWxlcyA9IHsgCiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIvLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInNpbmdsZUxpbmVDb21tZW50IgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD86IiArIGVzY2FwZVJlICsgInwuKT8nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsIAogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFzdHJpbmciLAogICAgICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmciLCByZWdleDogL1xcXHMqJC8sIG5leHQ6ICJxcXN0cmluZyIgfSwKICAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IGVzY2FwZVJlIH0sCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiBmb3JtYXRSZSB9LAogICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICJzdHJpbmcuZW5kIiwgcmVnZXg6ICcifCQnLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnUiJcXCgnLCAKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogInJhd1N0cmluZyIsCiAgICAgICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgeyB0b2tlbjogInN0cmluZy5lbmQiLCByZWdleDogJ1xcKSInLCBuZXh0OiAic3RhcnQiIH0sCiAgICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdKyhMfGx8VUx8dWx8dXxVfEZ8ZnxsbHxMTHx1bGx8VUxMKT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8oTHxsfFVMfHVsfHV8VXxGfGZ8bGx8TEx8dWxsfFVMTCk/XFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNcXHMqKD86aW5jbHVkZXxpbXBvcnR8cHJhZ21hfGxpbmV8ZGVmaW5lfHVuZGVmKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJkaXJlY3RpdmUiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBzcGVjaWFsIGNhc2UgcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiI1xccyooPzplbmRpZnxpZnxpZmRlZnxlbHNlfGVsaWZ8aWZuZGVmKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5DOTkuYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IGNGdW5jdGlvbnMKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PDw9fD4+PXw+Pj49fDw+fCYmfFx8XHx8XD86fFsqJVwvK1wtJlxefH4hPD49XT0/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcP3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzaW5nbGVMaW5lQ29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIG5leHQgOiAic2luZ2xlTGluZUNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGlyZWN0aXZlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIubXVsdGlsaW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlci5tdWx0aWxpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLipcXC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKjwuKz8+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1xccypbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMqWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5vdGhlciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXlxcXC9dKy8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhjX2NwcEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5jX2NwcEhpZ2hsaWdodFJ1bGVzID0gY19jcHBIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NfY3BwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvY19jcHBfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIGNfY3BwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NfY3BwX2hpZ2hsaWdodF9ydWxlcyIpLmNfY3BwSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IGNfY3BwSGlnaGxpZ2h0UnVsZXM7CgogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2NfY3BwIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcHJvdG9idWZfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICAgdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CgogICAgdmFyIFByb3RvYnVmSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgdmFyIGJ1aWx0aW5UeXBlcyA9ICJkb3VibGV8ZmxvYXR8aW50MzJ8aW50NjR8dWludDMyfHVpbnQ2NHxzaW50MzJ8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaW50NjR8Zml4ZWQzMnxmaXhlZDY0fHNmaXhlZDMyfHNmaXhlZDY0fGJvb2x8IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmd8Ynl0ZXMiOwogICAgICAgIHZhciBrZXl3b3JkRGVjbGFyYXRpb24gPSAibWVzc2FnZXxyZXF1aXJlZHxvcHRpb25hbHxyZXBlYXRlZHxwYWNrYWdlfCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0fG9wdGlvbnxlbnVtIjsKCiAgICAgICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICAgICAia2V5d29yZC5kZWNsYXJhdGlvbi5wcm90b2J1ZiI6IGtleXdvcmREZWNsYXJhdGlvbiwKICAgICAgICAgICAgInN1cHBvcnQudHlwZSI6IGJ1aWx0aW5UeXBlcwogICAgICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgICAic3RhcnQiOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cL1wvLiokLwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC9cL1wqLywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAiY29tbWVudCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50IiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIjxbXj5dKz4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICI9IiwKICAgICAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuYXNzaWdubWVudC5wcm90b2J1ZiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICdbXCddKD86KD86XFxcXC4pfCg/OlteXCdcXFxcXSkpKj9bXCddJwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiMFt4WF1bMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgICAgICByZWdleDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICJjb21tZW50IjogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICAgICAgfV0KICAgICAgICB9OwoKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7CiAgICB9OwoKICAgIG9vcC5pbmhlcml0cyhQcm90b2J1ZkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKICAgIGV4cG9ydHMuUHJvdG9idWZIaWdobGlnaHRSdWxlcyA9IFByb3RvYnVmSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9wcm90b2J1ZiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvY19jcHAiLCJhY2UvbW9kZS9wcm90b2J1Zl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIENNb2RlID0gcmVxdWlyZSgiLi9jX2NwcCIpLk1vZGU7CnZhciBQcm90b2J1ZkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9wcm90b2J1Zl9oaWdobGlnaHRfcnVsZXMiKS5Qcm90b2J1ZkhpZ2hsaWdodFJ1bGVzOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgQ01vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUHJvdG9idWZIaWdobGlnaHRSdWxlczsKfTsKb29wLmluaGVyaXRzKE1vZGUsIENNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Byb3RvYnVmIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcHJvdG9idWYiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-puppet.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9wdXBwZXRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgUHVwcGV0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbiAoKSB7CiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiBbJ2tleXdvcmQudHlwZS5wdXBwZXQnLCAnY29uc3RhbnQuY2xhc3MucHVwcGV0JywgJ2tleXdvcmQuaW5oZXJpdHMucHVwcGV0JywgJ2NvbnN0YW50LmNsYXNzLnB1cHBldCddLAogICAgICAgICAgICAgICAgcmVnZXg6ICJeXFxzKihjbGFzcykoXFxzKyg/OlstX0EtWmEtejAtOVwiLl0rOjopKlstX0EtWmEtejAtOVwiLl0rXFxzKikoPzooaW5oZXJpdHNcXHMqKShcXHMrKD86Wy1fQS1aYS16MC05XCIuXSs6OikqWy1fQS1aYS16MC05XCIuXStcXHMqKSk/IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogWydzdG9yYWdlLmZ1bmN0aW9uLnB1cHBldCcsICduYW1lLmZ1bmN0aW9uLnB1cHBldCcsICdwdW5jdHVhdGlvbi5scGFyJ10sCiAgICAgICAgICAgICAgICByZWdleDogIiheXFxzKmRlZmluZSkoXFxzK1thLXpBLVowLTlfOl0rXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBwdXNoOgogICAgICAgICAgICAgICAgICAgIFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24ucnBhci5wdXBwZXQnLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIlxcKSIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJjb25zdGFudHMifSwKICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJ2YXJpYWJsZSJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7aW5jbHVkZTogInN0cmluZ3MifSwKICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJvcGVyYXRvcnMifSwKICAgICAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogJ3N0cmluZyd9XQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJsYW5ndWFnZS5zdXBwb3J0LmNsYXNzIiwgImtleXdvcmQub3BlcmF0b3IiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxiKFthLXpBLVpfXSspKFxccys9PikiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiBbImV4cG9ydGVkLnJlc291cmNlLnB1cHBldCIsICJrZXl3b3JkLm5hbWUucmVzb3VyY2UucHVwcGV0IiwgInBhcmVuLmxwYXJlbiJdLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoXFxAXFxAKT8oXFxzKlthLXpBLVpfXSopKFxccypcXHspIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInF1YWxpZmllZC52YXJpYWJsZS5wdXBwZXQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoXFwkKFthLXpdW2EtejAtOV9dKik/KDo6W2Etel1bYS16MC05X10qKSo6OlthLXowLTlfXVthLXpBLVowLTlfXSopIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzaW5nbGVsaW5lLmNvbW1lbnQucHVwcGV0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIyguKSokJwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogIm11bHRpbGluZS5jb21tZW50LmJlZ2luLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogJ15cXHMqXFwvXFwqXFxzKiQnLAogICAgICAgICAgICAgICAgcHVzaDogImJsb2NrQ29tbWVudCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wucHVwcGV0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxiKGNhc2V8aWZ8dW5sZXNzfGVsc2V8ZWxzaWZ8aW58ZGVmYXVsdDp8YW5kfG9yKVxccysoPyE6OikiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcYihpbXBvcnR8ZGVmYXVsdHxpbmhlcml0c3xpbmNsdWRlfHJlcXVpcmV8Y29udGFpbnxub2RlfGFwcGxpY2F0aW9ufGNvbnN1bWVzfGVudmlyb25tZW50fHNpdGV8ZnVuY3Rpb258cHJvZHVjZXMpXFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN1cHBvcnQuZnVuY3Rpb24ucHVwcGV0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxiKGxlc3R8c3RyMmJvb2x8ZXNjYXBlfGdzdWJ8VGltZXN0YW1wfFRpbWVzcGFufHdpdGh8YWxlcnR8Y3JpdHxkZWJ1Z3xub3RpY2V8c3ByaW50ZnxzcGxpdHxzdGVwfHN0cmZ0aW1lfHNsaWNlfHNoZWxscXVvdGV8dHlwZXxzaGExfGRlZmluZWR8c2NhbmZ8cmV2ZXJzZV9lYWNofHJlZ3N1YnN0fHJldHVybnxlbWVyZ3xyZWR1Y2V8ZXJyfGZhaWxlZHxmYWlsfHZlcnNpb25jbXB8ZmlsZXxnZW5lcmF0ZXx0aGVufGluZm98cmVhbGl6ZXxzZWFyY2h8dGFnfHRhZ2dlZHx0ZW1wbGF0ZXxlcHB8d2FybmluZ3xoaWVyYV9pbmNsdWRlfGVhY2h8YXNzZXJ0X3R5cGV8YmluYXJ5X2ZpbGV8Y3JlYXRlX3Jlc291cmNlc3xkaWd8ZGlnZXN0fGZpbHRlcnxsb29rdXB8ZmluZF9maWxlfGZxZG5fcmFuZHxoaWVyYV9hcnJheXxoaWVyYV9oYXNofGlubGluZV9lcHB8aW5saW5lX3RlbXBsYXRlfG1hcHxtYXRjaHxtZDV8bmV3fG5leHQpXFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LnR5cGVzLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcYihTdHJpbmd8RmlsZXxQYWNrYWdlfFNlcnZpY2V8Q2xhc3N8SW50ZWdlcnxBcnJheXxDYXRhbG9nZW50cnl8VmFyaWFudHxCb29sZWFufFVuZGVmfE51bWJlcnxIYXNofEZsb2F0fE51bWVyaWN8Tm90VW5kZWZ8Q2FsbGFibGV8T3B0aW9uYWx8QW55fFJlZ2V4cHxTZW5zaXRpdmV8U2Vuc2l0aXZlLm5ld3xUeXBlfFJlc291cmNlfERlZmF1bHR8RW51bXxTY2FsYXJ8Q29sbGVjdGlvbnxEYXRhfFBhdHRlcm58VHVwbGV8U3RydWN0KVxcYiIKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1soe10iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAge2luY2x1ZGU6ICJ2YXJpYWJsZSJ9LAogICAgICAgICAgICB7aW5jbHVkZTogImNvbnN0YW50cyJ9LAogICAgICAgICAgICB7aW5jbHVkZTogInN0cmluZ3MifSwKICAgICAgICAgICAge2luY2x1ZGU6ICJvcGVyYXRvcnMifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuYmVnaW4uc3RyaW5nLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxccyooXFwvKFxcUykrKVxcLyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgYmxvY2tDb21tZW50OiBbewogICAgICAgICAgICByZWdleDogIl5cXHMqXFwvXFwqXFxzKiQiLAogICAgICAgICAgICB0b2tlbjogIm11bHRpbGluZS5jb21tZW50LmJlZ2luLnB1cHBldCIsCiAgICAgICAgICAgIHB1c2g6ICJibG9ja0NvbW1lbnQiCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleDogIl5cXHMqXFwqXFwvXFxzKiQiLAogICAgICAgICAgICB0b2tlbjogIm11bHRpbGluZS5jb21tZW50LmVuZC5wdXBwZXQiLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudCIKICAgICAgICB9XSwKICAgICAgICAiY29uc3RhbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcYihmYWxzZXx0cnVlfHJ1bm5pbmd8c3RvcHBlZHxpbnN0YWxsZWR8cHVyZ2VkfGxhdGVzdHxmaWxlfGRpcmVjdG9yeXxoZWxkfHVuZGVmfHByZXNlbnR8YWJzZW50fGxpbmt8bW91bnRlZHx1bm1vdW50ZWQpXFxiIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAidmFyaWFibGUiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucHVwcGV0IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiKFxcJFthLXowLTlfXHtdW2EtekEtWjAtOV9dKikiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdHJpbmdzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnF1b3RlLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogIiciLAogICAgICAgICAgICAgICAgcHVzaDoKICAgICAgICAgICAgICAgICAgICBbewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogJ3B1bmN0dWF0aW9uLnF1b3RlLnB1cHBldCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiJyIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJlc2NhcGVkX2NoYXJzIn0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICdzdHJpbmcnfV0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5xdW90ZS5wdXBwZXQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIHB1c2g6CiAgICAgICAgICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdwdW5jdHVhdGlvbi5xdW90ZS5wdXBwZXQnLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiAiZXNjYXBlZF9jaGFycyJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7aW5jbHVkZTogInZhcmlhYmxlIn0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICdzdHJpbmcnfV0KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImVzY2FwZWRfY2hhcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuZXNjYXBlZF9jaGFyLnB1cHBldCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwuIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAib3BlcmF0b3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXCtcXC58XFwtXFwufFxcKlxcLnxcXC9cXC58I3w7O3xcXCt8XFwtfFxcKnxcXCpcXCpcXC98XFwvXFwvfCV8PDx8Pj58JnxcXHx8XFxefH58PHw+fDw9fD0+fD09fCE9fDw+fDwtfD18Ojp8LCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKb29wLmluaGVyaXRzKFB1cHBldEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QdXBwZXRIaWdobGlnaHRSdWxlcyA9IFB1cHBldEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvcHVwcGV0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcHVwcGV0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUHVwcGV0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3B1cHBldF9oaWdobGlnaHRfcnVsZXMiKS5QdXBwZXRIaWdobGlnaHRSdWxlczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24gKCkgewogICAgVGV4dE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQdXBwZXRIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKCihmdW5jdGlvbiAoKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9wdXBwZXQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9wdXBwZXQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9weXRob25faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUHl0aG9uSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImFuZHxhc3xhc3NlcnR8YnJlYWt8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8IiArCiAgICAgICAgImZpbmFsbHl8Zm9yfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpc3xsYW1iZGF8bm90fG9yfHBhc3N8cHJpbnR8IiArCiAgICAgICAgInJhaXNlfHJldHVybnx0cnl8d2hpbGV8d2l0aHx5aWVsZHxhc3luY3xhd2FpdHxub25sb2NhbCIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoCiAgICAgICAgIlRydWV8RmFsc2V8Tm9uZXxOb3RJbXBsZW1lbnRlZHxFbGxpcHNpc3xfX2RlYnVnX18iCiAgICApOwoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYnN8ZGl2bW9kfGlucHV0fG9wZW58c3RhdGljbWV0aG9kfGFsbHxlbnVtZXJhdGV8aW50fG9yZHxzdHJ8YW55fCIgKwogICAgICAgICJldmFsfGlzaW5zdGFuY2V8cG93fHN1bXxiYXNlc3RyaW5nfGV4ZWNmaWxlfGlzc3ViY2xhc3N8cHJpbnR8c3VwZXJ8IiArCiAgICAgICAgImJpbmZpbGV8YmlufGl0ZXJ8cHJvcGVydHl8dHVwbGV8Ym9vbHxmaWx0ZXJ8bGVufHJhbmdlfHR5cGV8Ynl0ZWFycmF5fCIgKwogICAgICAgICJmbG9hdHxsaXN0fHJhd19pbnB1dHx1bmljaHJ8Y2FsbGFibGV8Zm9ybWF0fGxvY2Fsc3xyZWR1Y2V8dW5pY29kZXwiICsKICAgICAgICAiY2hyfGZyb3plbnNldHxsb25nfHJlbG9hZHx2YXJzfGNsYXNzbWV0aG9kfGdldGF0dHJ8bWFwfHJlcHJ8eHJhbmdlfCIgKwogICAgICAgICJjbXB8Z2xvYmFsc3xtYXh8cmV2ZXJzZWR8emlwfGNvbXBpbGV8aGFzYXR0cnxtZW1vcnl2aWV3fHJvdW5kfCIgKwogICAgICAgICJfX2ltcG9ydF9ffGNvbXBsZXh8aGFzaHxtaW58YXBwbHl8ZGVsYXR0cnxoZWxwfG5leHR8c2V0YXR0cnxzZXR8IiArCiAgICAgICAgImJ1ZmZlcnxkaWN0fGhleHxvYmplY3R8c2xpY2V8Y29lcmNlfGRpcnxpZHxvY3R8c29ydGVkfGludGVybnwiICsKICAgICAgICAiYXNjaWl8YnJlYWtwb2ludHxieXRlcyIKICAgICk7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6ICJkZWJ1Z2dlciIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJzZWxmfGNscyIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbHRpbkNvbnN0YW50cywKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBzdHJQcmUgPSAiW3VVXT8iOwogICAgdmFyIHN0clJhd1ByZSA9ICJbclJdIjsKICAgIHZhciBzdHJGb3JtYXRQcmUgPSAiW2ZGXSI7CiAgICB2YXIgc3RyUmF3Rm9ybWF0UHJlID0gIig/OltyUl1bZkZdfFtmRl1bclJdKSI7CiAgICB2YXIgZGVjaW1hbEludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwogICAgdmFyIG9jdEludGVnZXIgPSAiKD86MFtvT10/WzAtN10rKSI7CiAgICB2YXIgaGV4SW50ZWdlciA9ICIoPzowW3hYXVtcXGRBLUZhLWZdKykiOwogICAgdmFyIGJpbkludGVnZXIgPSAiKD86MFtiQl1bMDFdKykiOwogICAgdmFyIGludGVnZXIgPSAiKD86IiArIGRlY2ltYWxJbnRlZ2VyICsgInwiICsgb2N0SW50ZWdlciArICJ8IiArIGhleEludGVnZXIgKyAifCIgKyBiaW5JbnRlZ2VyICsgIikiOwoKICAgIHZhciBleHBvbmVudCA9ICIoPzpbZUVdWystXT9cXGQrKSI7CiAgICB2YXIgZnJhY3Rpb24gPSAiKD86XFwuXFxkKykiOwogICAgdmFyIGludFBhcnQgPSAiKD86XFxkKykiOwogICAgdmFyIHBvaW50RmxvYXQgPSAiKD86KD86IiArIGludFBhcnQgKyAiPyIgKyBmcmFjdGlvbiArICIpfCg/OiIgKyBpbnRQYXJ0ICsgIlxcLikpIjsKICAgIHZhciBleHBvbmVudEZsb2F0ID0gIig/Oig/OiIgKyBwb2ludEZsb2F0ICsgInwiICsgaW50UGFydCArICIpIiArIGV4cG9uZW50ICsgIikiOwogICAgdmFyIGZsb2F0TnVtYmVyID0gIig/OiIgKyBleHBvbmVudEZsb2F0ICsgInwiICsgcG9pbnRGbG9hdCArICIpIjsKCiAgICB2YXIgc3RyaW5nRXNjYXBlID0gIlxcXFwoeFswLTlBLUZhLWZdezJ9fFswLTddezN9fFtcXFxcYWJmbnJ0didcIl18VVswLTlBLUZhLWZdezh9fHVbMC05QS1GYS1mXXs0fSkiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiMuKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgIHJlZ2V4IDogc3RyUHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6IHN0clByZSArICciKD89LiknLAogICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vIG11bHRpIGxpbmUgJycnIHN0cmluZyBzdGFydAogICAgICAgICAgICByZWdleCA6IHN0clByZSArICInezN9IiwKICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICByZWdleCA6IHN0clByZSArICInKD89LikiLAogICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdQcmUgKyAnInszfScsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIAogICAgICAgICAgICByZWdleDogc3RyUmF3UHJlICsgJyIoPz0uKScsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxcXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0clJhd1ByZSArICInezN9IiwKICAgICAgICAgICAgbmV4dDogInJhd3FzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3UHJlICsgIicoPz0uKSIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyRm9ybWF0UHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAiZnFxc3RyaW5nMyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6IHN0ckZvcm1hdFByZSArICciKD89LiknLAogICAgICAgICAgICBuZXh0OiAiZnFxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyRm9ybWF0UHJlICsgIid7M30iLAogICAgICAgICAgICBuZXh0OiAiZnFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyRm9ybWF0UHJlICsgIicoPz0uKSIsCiAgICAgICAgICAgIG5leHQ6ICJmcXN0cmluZyIKICAgICAgICB9LHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAicmZxcXN0cmluZzMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdGb3JtYXRQcmUgKyAnIig/PS4pJywKICAgICAgICAgICAgbmV4dDogInJmcXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJSYXdGb3JtYXRQcmUgKyAiJ3szfSIsCiAgICAgICAgICAgIG5leHQ6ICJyZnFzdHJpbmczIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogc3RyUmF3Rm9ybWF0UHJlICsgIicoPz0uKSIsCiAgICAgICAgICAgIG5leHQ6ICJyZnFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogIlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfCV8QHw8PHw+PnwmfFxcfHxcXF58fnw8fD58PD18PT58PT18IT18PD58PSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogIix8Onw7fFxcLT58XFwrPXxcXC09fFxcKj18XFwvPXxcXC9cXC89fCU9fEA9fCY9fFxcfD18Xj18Pj49fDw8PXxcXCpcXCo9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIltcXFtcXChcXHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIltcXF1cXClcXH1dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXg6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImNvbnN0YW50cyIKICAgICAgICB9XSwKICAgICAgICAicXFzdHJpbmczIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBlbmQKICAgICAgICAgICAgcmVnZXg6ICciezN9JywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInFxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAicXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnInwkJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleDogc3RyaW5nRXNjYXBlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0OiAicXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3Fxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3FzdHJpbmczIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgInJhd3Fxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInJhd3Fxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyJ8JCcsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmF3cXN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJyYXdxc3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIid8JCIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAiZnFxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lICIiIiBzdHJpbmcgZW5kCiAgICAgICAgICAgIHJlZ2V4OiAnInszfScsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJmcXFzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJmcXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnInwkJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAiZnFzdHJpbmciOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiBzdHJpbmdFc2NhcGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICInfCQiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyZnFxc3RyaW5nMyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSAiIiIgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogJyJ7M30nLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyZnFzdHJpbmczIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLCAgLy8gbXVsdGkgbGluZSAnJycgc3RyaW5nIGVuZAogICAgICAgICAgICByZWdleDogIid7M30iLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgICAgIHB1c2g6ICJmcXN0cmluZ1BhclJ1bGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJyZnFxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInJmcXFzdHJpbmciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnInwkJywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogInsiLAogICAgICAgICAgICBwdXNoOiAiZnFzdHJpbmdQYXJSdWxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAicmZxc3RyaW5nIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIid8JCIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgfV0sCiAgICAgICAgImZxc3RyaW5nUGFyUnVsZXMiOiBbey8vVE9ETzogbmVzdGVkIHt9CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxbXFwoXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFxdXFwpXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHMrIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIicoLikqJyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICciKC4pKiInCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImZ1bmN0aW9uLnN1cHBvcnQiLAogICAgICAgICAgICByZWdleDogIighc3whcnwhYSkiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiY29uc3RhbnRzIgogICAgICAgIH0sewogICAgICAgICAgICB0b2tlbjogJ3BhcmVuLnJwYXJlbicsCiAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgIG5leHQ6ICdwb3AnCiAgICAgICAgfSx7CiAgICAgICAgICAgIHRva2VuOiAncGFyZW4ubHBhcmVuJywKICAgICAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICAgICAgcHVzaDogImZxc3RyaW5nUGFyUnVsZXMiCiAgICAgICAgfV0sCiAgICAgICAgImNvbnN0YW50cyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGltYWdpbmFyeQogICAgICAgICAgICByZWdleDogIig/OiIgKyBmbG9hdE51bWJlciArICJ8XFxkKylbakpdXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXg6IGZsb2F0TnVtYmVyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBsb25nIGludGVnZXIKICAgICAgICAgICAgcmVnZXg6IGludGVnZXIgKyAiW2xMXVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgcmVnZXg6IGludGVnZXIgKyAiXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IFsicHVuY3R1YXRpb24iLCAiZnVuY3Rpb24uc3VwcG9ydCJdLC8vIG1ldGhvZAogICAgICAgICAgICByZWdleDogIihcXC4pKFthLXpBLVpfXSspXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH1dCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFB5dGhvbkhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5QeXRob25IaWdobGlnaHRSdWxlcyA9IFB5dGhvbkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9weXRob25pYyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKG1hcmtlcnMpIHsKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgiKFtcXFt7XSkoPzpcXHMqKSR8KCIgKyBtYXJrZXJzICsgIikoPzpcXHMqKSg/OiMuKik/JCIpOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgbWF0Y2guaW5kZXgpOwogICAgICAgICAgICBpZiAobWF0Y2hbMl0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdywgbWF0Y2guaW5kZXggKyBtYXRjaFsyXS5sZW5ndGgpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9weXRob24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9weXRob25faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9weXRob25pYyIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFB5dGhvbkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9weXRob25faGlnaGxpZ2h0X3J1bGVzIikuUHl0aG9uSGlnaGxpZ2h0UnVsZXM7CnZhciBQeXRob25Gb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9weXRob25pYyIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBQeXRob25IaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IFB5dGhvbkZvbGRNb2RlKCJcXDoiKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKltce1woXFs6XVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB2YXIgb3V0ZGVudHMgPSB7CiAgICAgICAgInBhc3MiOiAxLAogICAgICAgICJyZXR1cm4iOiAxLAogICAgICAgICJyYWlzZSI6IDEsCiAgICAgICAgImJyZWFrIjogMSwKICAgICAgICAiY29udGludWUiOiAxCiAgICB9OwogICAgCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIGlmIChpbnB1dCAhPT0gIlxyXG4iICYmIGlucHV0ICE9PSAiXHIiICYmIGlucHV0ICE9PSAiXG4iKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZS50cmltKCksIHN0YXRlKS50b2tlbnM7CiAgICAgICAgCiAgICAgICAgaWYgKCF0b2tlbnMpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBkbyB7CiAgICAgICAgICAgIHZhciBsYXN0ID0gdG9rZW5zLnBvcCgpOwogICAgICAgIH0gd2hpbGUgKGxhc3QgJiYgKGxhc3QudHlwZSA9PSAiY29tbWVudCIgfHwgKGxhc3QudHlwZSA9PSAidGV4dCIgJiYgbGFzdC52YWx1ZS5tYXRjaCgvXlxzKyQvKSkpKTsKICAgICAgICAKICAgICAgICBpZiAoIWxhc3QpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAKICAgICAgICByZXR1cm4gKGxhc3QudHlwZSA9PSAia2V5d29yZCIgJiYgb3V0ZGVudHNbbGFzdC52YWx1ZV0pOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgCiAgICAgICAgcm93ICs9IDE7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShyb3cpKTsKICAgICAgICB2YXIgdGFiID0gZG9jLmdldFRhYlN0cmluZygpOwogICAgICAgIGlmIChpbmRlbnQuc2xpY2UoLXRhYi5sZW5ndGgpID09IHRhYikKICAgICAgICAgICAgZG9jLnJlbW92ZShuZXcgUmFuZ2Uocm93LCBpbmRlbnQubGVuZ3RoLXRhYi5sZW5ndGgsIHJvdywgaW5kZW50Lmxlbmd0aCkpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9weXRob24iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9weXRob24iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-r.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90ZXhfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBUZXhIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKHRleHRDbGFzcykgewoKICAgIGlmICghdGV4dENsYXNzKQogICAgICAgIHRleHRDbGFzcyA9ICJ0ZXh0IjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiUuKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogdGV4dENsYXNzLCAvLyBub24tY29tbWFuZAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXFskJiUjXFx7XFx9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpkb2N1bWVudGNsYXNzfHVzZXBhY2thZ2V8bmV3Y291bnRlcnxzZXRjb3VudGVyfGFkZHRvY291bnRlcnx2YWx1ZXxhcmFiaWN8c3RlcGNvdW50ZXJ8bmV3ZW52aXJvbm1lbnR8cmVuZXdlbnZpcm9ubWVudHxyZWZ8dnJlZnxlcXJlZnxwYWdlcmVmfGxhYmVsfGNpdGVbYS16QS1aXSp8dGFnfGJlZ2lufGVuZHxiaWJpdGVtKVxcYiIsCiAgICAgICAgICAgICAgIG5leHQgOiAibm9zcGVsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpbYS16QS1aMC05XSt8W15hLXpBLVowLTldKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5rZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiB0ZXh0Q2xhc3MsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibm9zcGVsbCIgOiBbCiAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiJS4qJCIsCiAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJub3NwZWxsLiIgKyB0ZXh0Q2xhc3MsIC8vIG5vbi1jb21tYW5kCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFxbJCYlI1xce1xcfV0iCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86ZG9jdW1lbnRjbGFzc3x1c2VwYWNrYWdlfG5ld2NvdW50ZXJ8c2V0Y291bnRlcnxhZGR0b2NvdW50ZXJ8dmFsdWV8YXJhYmljfHN0ZXBjb3VudGVyfG5ld2Vudmlyb25tZW50fHJlbmV3ZW52aXJvbm1lbnR8cmVmfHZyZWZ8ZXFyZWZ8cGFnZXJlZnxsYWJlbHxjaXRlW2EtekEtWl0qfHRhZ3xiZWdpbnxlbmR8YmliaXRlbSlcXGIiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86W2EtekEtWjAtOV0rfFteYS16QS1aMC05XSkiLAogICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pXSIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICByZWdleCA6ICJ9IiwKICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwuIiArIHRleHRDbGFzcywKICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwuIiArIHRleHRDbGFzcywKICAgICAgICAgICAgICAgcmVnZXggOiAiXFx3KyIKICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhUZXhIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuVGV4SGlnaGxpZ2h0UnVsZXMgPSBUZXhIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3JfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKQp7CgogICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICB2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CiAgIHZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwogICB2YXIgVGV4SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleF9oaWdobGlnaHRfcnVsZXMiKS5UZXhIaWdobGlnaHRSdWxlczsKCiAgIHZhciBSSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpCiAgIHsKCiAgICAgIHZhciBrZXl3b3JkcyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAgICAgKCJmdW5jdGlvbnxpZnxpbnxicmVha3xuZXh0fHJlcGVhdHxlbHNlfGZvcnxyZXR1cm58c3dpdGNofHdoaWxlfHRyeXx0cnlDYXRjaHxzdG9wfHdhcm5pbmd8cmVxdWlyZXxsaWJyYXJ5fGF0dGFjaHxkZXRhY2h8c291cmNlfHNldE1ldGhvZHxzZXRHZW5lcmljfHNldEdyb3VwR2VuZXJpY3xzZXRDbGFzcyIpCiAgICAgICAgICAgICAgICAgIC5zcGxpdCgifCIpCiAgICAgICAgICAgICk7CgogICAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAgICAgKCJOVUxMfE5BfFRSVUV8RkFMU0V8VHxGfEluZnxOYU58TkFfaW50ZWdlcl98TkFfcmVhbF98TkFfY2hhcmFjdGVyX3wiICsKICAgICAgICAgICAgICJOQV9jb21wbGV4XyIpLnNwbGl0KCJ8IikKICAgICAgICAgICAgKTsKCiAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuc2VjdGlvbmhlYWQiLAogICAgICAgICAgICAgICByZWdleCA6ICIjKyg/IScpLiooPzotLS0tfD09PT18IyMjIylcXHMqJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiIysnIiwKICAgICAgICAgICAgICAgbmV4dCA6ICJyZC1zdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiIy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICByZWdleCA6ICdbIl0nLAogICAgICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSIsCiAgICAgICAgICAgICAgIG5leHQgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGV4cGxpY2l0IGludGVnZXIKICAgICAgICAgICAgICAgcmVnZXggOiAiXFxkK0xcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIG51bWJlcgogICAgICAgICAgICAgICByZWdleCA6ICJcXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gbnVtYmVyIHdpdGggbGVhZGluZyBkZWNpbWFsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcLlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP2k/XFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICByZWdleCA6ICIoPzpUUlVFfEZBTFNFfFR8RilcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogImAuKj9gIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHNbdmFsdWVdKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICBlbHNlIGlmIChidWlsZGluQ29uc3RhbnRzW3ZhbHVlXSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudC5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICcuLi4nIHx8IHZhbHVlLm1hdGNoKC9eXC5cLlxkKyQvKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpZGVudGlmaWVyIjsKICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWi5dW2EtekEtWjAtOS5fXSpcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIiUlfD49fDw9fD09fCE9fFxcLT58PFxcLXxcXHxcXHx8JiZ8PXxcXCt8XFwtfFxcKnwvfFxcXnw+fDx8IXwmfFxcfHx+fFxcJHw6IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLCAvLyBpbmZpeCBvcGVyYXRvcnMKICAgICAgICAgICAgICAgcmVnZXggOiAiJS4qPyUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgcmVnZXggOiAnKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLAogICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJwogICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICByZWdleCA6ICIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsCiAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICAgXQogICAgICB9OwoKICAgICAgdmFyIHJkUnVsZXMgPSBuZXcgVGV4SGlnaGxpZ2h0UnVsZXMoImNvbW1lbnQiKS5nZXRSdWxlcygpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJkUnVsZXNbInN0YXJ0Il0ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgcmRSdWxlc1sic3RhcnQiXVtpXS50b2tlbiArPSAiLnZpcnR1YWwtY29tbWVudCI7CiAgICAgIH0KCiAgICAgIHRoaXMuYWRkUnVsZXMocmRSdWxlcywgInJkLSIpOwogICAgICB0aGlzLiRydWxlc1sicmQtc3RhcnQiXS51bnNoaWZ0KHsKICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICByZWdleDogIl4iLAogICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICB9KTsKICAgICAgdGhpcy4kcnVsZXNbInJkLXN0YXJ0Il0udW5zaGlmdCh7CiAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICByZWdleCA6ICJAKD8hQClbXiBdKiIKICAgICAgfSk7CiAgICAgIHRoaXMuJHJ1bGVzWyJyZC1zdGFydCJdLnVuc2hpZnQoewogICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgcmVnZXggOiAiQEAiCiAgICAgIH0pOwogICAgICB0aGlzLiRydWxlc1sicmQtc3RhcnQiXS5wdXNoKHsKICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgIHJlZ2V4IDogIlteJVxcXFxbKHtcXF0pfV0rIgogICAgICB9KTsKICAgfTsKCiAgIG9vcC5pbmhlcml0cyhSSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgogICBleHBvcnRzLlJIaWdobGlnaHRSdWxlcyA9IFJIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS91bmljb2RlIiwiYWNlL3JhbmdlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9yX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICJ1c2Ugc3RyaWN0IjsKCiAgIHZhciB1bmljb2RlID0gcmVxdWlyZSgiLi4vdW5pY29kZSIpOwogICB2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwogICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICB2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwogICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKICAgdmFyIFJIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcl9oaWdobGlnaHRfcnVsZXMiKS5SSGlnaGxpZ2h0UnVsZXM7CiAgIHZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwoKICAgdmFyIE1vZGUgPSBmdW5jdGlvbigpewogICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUkhpZ2hsaWdodFJ1bGVzOwogICAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7CiAgIH07CiAgIG9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgogICAoZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgICAgdGhpcy50b2tlblJlID0gbmV3IFJlZ0V4cCgiXlsiICsgdW5pY29kZS53b3JkQ2hhcnMgKyAiLl9dKyIsICJnIik7CgogICAgICB0aGlzLm5vblRva2VuUmUgPSBuZXcgUmVnRXhwKCJeKD86W14iICsgdW5pY29kZS53b3JkQ2hhcnMgKyAiLl9dfFxzXSkrIiwgImciKTsKICAgICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3IiOwogICB9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKICAgZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3IiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-razor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc2hhcnBfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBDU2hhcnBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJ0aGlzIiwKICAgICAgICAia2V5d29yZCI6ICJhYnN0cmFjdHxhc3luY3xhd2FpdHxldmVudHxuZXd8c3RydWN0fGFzfGV4cGxpY2l0fG51bGx8c3dpdGNofGJhc2V8ZXh0ZXJufG9iamVjdHx0aGlzfGJvb2x8ZmFsc2V8b3BlcmF0b3J8dGhyb3d8YnJlYWt8ZmluYWxseXxvdXR8dHJ1ZXxieXRlfGZpeGVkfG92ZXJyaWRlfHRyeXxjYXNlfGZsb2F0fHBhcmFtc3x0eXBlb2Z8Y2F0Y2h8Zm9yfHByaXZhdGV8dWludHxjaGFyfGZvcmVhY2h8cHJvdGVjdGVkfHVsb25nfGNoZWNrZWR8Z290b3xwdWJsaWN8dW5jaGVja2VkfGNsYXNzfGlmfHJlYWRvbmx5fHVuc2FmZXxjb25zdHxpbXBsaWNpdHxyZWZ8dXNob3J0fGNvbnRpbnVlfGlufHJldHVybnx1c2luZ3xkZWNpbWFsfGludHxzYnl0ZXx2aXJ0dWFsfGRlZmF1bHR8aW50ZXJmYWNlfHNlYWxlZHx2b2xhdGlsZXxkZWxlZ2F0ZXxpbnRlcm5hbHxwYXJ0aWFsfHNob3J0fHZvaWR8ZG98aXN8c2l6ZW9mfHdoaWxlfGRvdWJsZXxsb2NrfHN0YWNrYWxsb2N8ZWxzZXxsb25nfHN0YXRpY3xlbnVtfG5hbWVzcGFjZXxzdHJpbmd8dmFyfGR5bmFtaWMiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6ICJudWxsfHRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2hhcmFjdGVyCiAgICAgICAgICAgICAgICByZWdleCA6IC8nKD86LnxcXCg6P3VbXGRhLWZBLUZdK3x4W1xkYS1mQS1GXSt8W3RicmYnIm5dKSk/Jy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgc3RhcnQgOiAnIicsIGVuZCA6ICcifCQnLCBuZXh0OiBbCiAgICAgICAgICAgICAgICAgICAge3Rva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXg6IC9cXCg6P3VbXGRhLWZBLUZdK3x4W1xkYS1mQS1GXSt8W3RicmYnIm5dKS99LAogICAgICAgICAgICAgICAgICAgIHt0b2tlbjogImludmFsaWQiLCByZWdleDogL1xcLi99CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIHN0YXJ0IDogJ0AiJywgZW5kIDogJyInLCBuZXh0OlsKICAgICAgICAgICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogJyIiJ30KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgc3RhcnQgOiAvXCQiLywgZW5kIDogJyJ8JCcsIG5leHQ6IFsKICAgICAgICAgICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogL1xcKDo/JCl8e3svfSwKICAgICAgICAgICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogL1xcKDo/dVtcZGEtZkEtRl0rfHhbXGRhLWZBLUZdK3xbdGJyZicibl0pL30sCiAgICAgICAgICAgICAgICAgICAge3Rva2VuOiAiaW52YWxpZCIsIHJlZ2V4OiAvXFwuL30KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAiMFt4WF1bMC05YS1mQS1GXStcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIhfFxcJHwlfCZ8XFwqfFxcLVxcLXxcXC18XFwrXFwrfFxcK3x+fD09PXw9PXw9fCE9fCE9PXw8PXw+PXw8PD18Pj49fD4+Pj18PD58PHw+fCF8JiZ8XFx8XFx8fFxcP1xcOnxcXCo9fCU9fFxcKz18XFwtPXwmPXxcXF49fFxcYig/OmlufGluc3RhbmNlb2Z8bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxccyojKGlmfGVsc2V8ZWxpZnxlbmRpZnxkZWZpbmV8dW5kZWZ8d2FybmluZ3xlcnJvcnxsaW5lfHJlZ2lvbnxlbmRyZWdpb258cHJhZ21hKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFw/fFxcOnxcXCx8XFw7fFxcLiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoQ1NoYXJwSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkNTaGFycEhpZ2hsaWdodFJ1bGVzID0gQ1NoYXJwSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9yYXpvcl9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvY3NoYXJwX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwp2YXIgQ1NoYXJwSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2NzaGFycF9oaWdobGlnaHRfcnVsZXMiKS5DU2hhcnBIaWdobGlnaHRSdWxlczsKCnZhciBibG9ja1ByZWZpeCA9ICdyYXpvci1ibG9jay0nOwp2YXIgUmF6b3JMYW5nSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIENTaGFycEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIHByb2Nlc3NQb3RlbnRpYWxDYWxsYmFjayA9IGZ1bmN0aW9uKHZhbHVlLCBzdGFja0l0ZW0pIHsKICAgICAgICBpZiAodHlwZW9mIHN0YWNrSXRlbSA9PT0gImZ1bmN0aW9uIikKICAgICAgICAgICAgcmV0dXJuIHN0YWNrSXRlbSh2YWx1ZSk7CgogICAgICAgIHJldHVybiBzdGFja0l0ZW07CiAgICB9OwoKICAgIHZhciBpbkJyYWNlcyA9ICdpbi1icmFjZXMnOwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdCh7CiAgICAgICAgcmVnZXg6ICdbXFxbKHtdJywKICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXggPSAvcmF6b3ItW15cLV0rLS8uZXhlYyhzdGF0ZSlbMF07CgogICAgICAgICAgICBzdGFjay51bnNoaWZ0KHZhbHVlKTsKICAgICAgICAgICAgc3RhY2sudW5zaGlmdChwcmVmaXggKyBpbkJyYWNlcyk7CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHByZWZpeCArIGluQnJhY2VzOwogICAgICAgICAgICByZXR1cm4gJ3BhcmVuLmxwYXJlbic7CiAgICAgICAgfQogICAgfSwgewogICAgICAgIHN0YXJ0OiAiQFxcKiIsCiAgICAgICAgZW5kOiAiXFwqQCIsCiAgICAgICAgdG9rZW46ICJjb21tZW50IgogICAgfSk7CgogICAgdmFyIHBhcmVudENsb3NlTWFwID0gewogICAgICAgICd7JzogJ30nLAogICAgICAgICdbJzogJ10nLAogICAgICAgICcoJzogJyknCiAgICB9OwoKICAgIHRoaXMuJHJ1bGVzW2luQnJhY2VzXSA9IGxhbmcuZGVlcENvcHkodGhpcy4kcnVsZXMuc3RhcnQpOwogICAgdGhpcy4kcnVsZXNbaW5CcmFjZXNdLnVuc2hpZnQoewogICAgICAgIHJlZ2V4OiAnW1xcXSl9XScsCiAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb3BlbiA9IHN0YWNrWzFdOwogICAgICAgICAgICBpZiAocGFyZW50Q2xvc2VNYXBbb3Blbl0gIT09IHZhbHVlKQogICAgICAgICAgICAgICAgcmV0dXJuICdpbnZhbGlkLmlsbGVnYWwnOwoKICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsgLy8gZXhpdCBpbi1icmFjZXMgYmxvY2sKICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsgLy8gZXhpdCBicmFjZSBtYXJrZXIKICAgICAgICAgICAgdGhpcy5uZXh0ID0gcHJvY2Vzc1BvdGVudGlhbENhbGxiYWNrKHZhbHVlLCBzdGFja1swXSkgfHwgJ3N0YXJ0JzsKICAgICAgICAgICAgcmV0dXJuICdwYXJlbi5ycGFyZW4nOwogICAgICAgIH0KICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKFJhem9yTGFuZ0hpZ2hsaWdodFJ1bGVzLCBDU2hhcnBIaWdobGlnaHRSdWxlcyk7Cgp2YXIgUmF6b3JIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIGJsb2NrU3RhcnRSdWxlID0gewogICAgICAgIHJlZ2V4OiAnQFsoe118QGZ1bmN0aW9uc3snLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh2YWx1ZSk7CiAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoJ3Jhem9yLWJsb2NrLXN0YXJ0Jyk7CiAgICAgICAgICAgIHRoaXMubmV4dCA9ICdyYXpvci1ibG9jay1zdGFydCc7CiAgICAgICAgICAgIHJldHVybiAncHVuY3R1YXRpb24uYmxvY2sucmF6b3InOwogICAgICAgIH0KICAgIH07CgogICAgdmFyIGJsb2NrRW5kTWFwID0gewogICAgICAgICdAeyc6ICd9JywKICAgICAgICAnQCgnOiAnKScsCiAgICAgICAgJ0BmdW5jdGlvbnN7JzonfScKICAgIH07CgogICAgdmFyIGJsb2NrRW5kUnVsZSA9IHsKICAgICAgICByZWdleDogJ1t9KV0nLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgdmFyIGJsb2NrU3RhcnQgPSBzdGFja1sxXTsKICAgICAgICAgICAgaWYgKGJsb2NrRW5kTWFwW2Jsb2NrU3RhcnRdICE9PSB2YWx1ZSkKICAgICAgICAgICAgICAgIHJldHVybiAnaW52YWxpZC5pbGxlZ2FsJzsKCiAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7IC8vIGV4aXQgcmF6b3IgYmxvY2sKICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsgLy8gcmVtb3ZlIGJsb2NrIHR5cGUgbWFya2VyCiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCkgfHwgJ3N0YXJ0JzsKICAgICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbi5ibG9jay5yYXpvcic7CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgc2hvcnRTdGFydFJ1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJAKD8hW3soXSkiLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgicmF6b3Itc2hvcnQtc3RhcnQiKTsKICAgICAgICAgICAgdGhpcy5uZXh0ID0gInJhem9yLXNob3J0LXN0YXJ0IjsKICAgICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbi5zaG9ydC5yYXpvcic7CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgc2hvcnRFbmRSdWxlID0gewogICAgICAgIHRva2VuOiAiIiwKICAgICAgICByZWdleDogIig/PVteQS1aYS16X1xcLigpXFxbXFxdXSkiLAogICAgICAgIG5leHQ6ICdwb3AnCiAgICB9OwoKICAgIHZhciBpZlN0YXJ0UnVsZSA9IHsKICAgICAgICByZWdleDogIkAoPz1pZikiLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgc3RhY2sudW5zaGlmdChmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSAnfScpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzdGFydCc7CgogICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnNoaWZ0KCkgfHwgJ3N0YXJ0JzsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMubmV4dCA9ICdyYXpvci1ibG9jay1zdGFydCc7CiAgICAgICAgICAgIHJldHVybiAncHVuY3R1YXRpb24uY29udHJvbC5yYXpvcic7CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgcmF6b3JTdGFydFJ1bGVzID0gWwogICAgICAgIHsKICAgICAgICAgICAgc3RhcnQ6ICJAXFwqIiwKICAgICAgICAgICAgZW5kOiAiXFwqQCIsCiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsibWV0YS5kaXJlY3RpdmUucmF6b3IiLCAidGV4dCIsICJpZGVudGlmaWVyIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiXihcXHMqQG1vZGVsKShcXHMrKSguKykkIgogICAgICAgIH0sCiAgICAgICAgYmxvY2tTdGFydFJ1bGUsCiAgICAgICAgc2hvcnRTdGFydFJ1bGUKICAgIF07CgogICAgZm9yICh2YXIga2V5IGluIHRoaXMuJHJ1bGVzKQogICAgICAgIHRoaXMuJHJ1bGVzW2tleV0udW5zaGlmdC5hcHBseSh0aGlzLiRydWxlc1trZXldLCByYXpvclN0YXJ0UnVsZXMpOwoKICAgIHRoaXMuZW1iZWRSdWxlcyhSYXpvckxhbmdIaWdobGlnaHRSdWxlcywgInJhem9yLWJsb2NrLSIsIFtibG9ja0VuZFJ1bGVdLCBbInN0YXJ0Il0pOwogICAgdGhpcy5lbWJlZFJ1bGVzKFJhem9yTGFuZ0hpZ2hsaWdodFJ1bGVzLCAicmF6b3Itc2hvcnQtIiwgW3Nob3J0RW5kUnVsZV0sIFsic3RhcnQiXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFJhem9ySGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlJhem9ySGlnaGxpZ2h0UnVsZXMgPSBSYXpvckhpZ2hsaWdodFJ1bGVzOwpleHBvcnRzLlJhem9yTGFuZ0hpZ2hsaWdodFJ1bGVzID0gUmF6b3JMYW5nSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9yYXpvcl9jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIga2V5d29yZHMgPSBbCiAgICAiYWJzdHJhY3QiLCAiYXMiLCAiYmFzZSIsICJib29sIiwKICAgICJicmVhayIsICJieXRlIiwgImNhc2UiLCAiY2F0Y2giLAogICAgImNoYXIiLCAiY2hlY2tlZCIsICJjbGFzcyIsICJjb25zdCIsCiAgICAiY29udGludWUiLCAiZGVjaW1hbCIsICJkZWZhdWx0IiwgImRlbGVnYXRlIiwKICAgICJkbyIsICJkb3VibGUiLCJlbHNlIiwiZW51bSIsCiAgICAiZXZlbnQiLCAiZXhwbGljaXQiLCAiZXh0ZXJuIiwgImZhbHNlIiwKICAgICJmaW5hbGx5IiwgImZpeGVkIiwgImZsb2F0IiwgImZvciIsCiAgICAiZm9yZWFjaCIsICJnb3RvIiwgImlmIiwgImltcGxpY2l0IiwKICAgICJpbiIsICJpbnQiLCAiaW50ZXJmYWNlIiwgImludGVybmFsIiwKICAgICJpcyIsICJsb2NrIiwgImxvbmciLCAibmFtZXNwYWNlIiwKICAgICJuZXciLCAibnVsbCIsICJvYmplY3QiLCAib3BlcmF0b3IiLAogICAgIm91dCIsICJvdmVycmlkZSIsICJwYXJhbXMiLCAicHJpdmF0ZSIsCiAgICAicHJvdGVjdGVkIiwgInB1YmxpYyIsICJyZWFkb25seSIsICJyZWYiLAogICAgInJldHVybiIsICJzYnl0ZSIsICJzZWFsZWQiLCAic2hvcnQiLAogICAgInNpemVvZiIsICJzdGFja2FsbG9jIiwgInN0YXRpYyIsICJzdHJpbmciLAogICAgInN0cnVjdCIsICJzd2l0Y2giLCAidGhpcyIsICJ0aHJvdyIsCiAgICAidHJ1ZSIsICJ0cnkiLCAidHlwZW9mIiwgInVpbnQiLAogICAgInVsb25nIiwgInVuY2hlY2tlZCIsICJ1bnNhZmUiLCAidXNob3J0IiwKICAgICJ1c2luZyIsICJ2YXIiLCAidmlydHVhbCIsICJ2b2lkIiwKICAgICJ2b2xhdGlsZSIsICJ3aGlsZSJdOwoKdmFyIHNob3J0SGFuZHMgID0gWwogICAgIkh0bWwiLCAiTW9kZWwiLCAiVXJsIiwgIkxheW91dCIKXTsKICAgIAp2YXIgUmF6b3JDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewoKfTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgCiAgICAgICAgaWYoc3RhdGUubGFzdEluZGV4T2YoInJhem9yLXNob3J0LXN0YXJ0IikgPT0gLTEgJiYgc3RhdGUubGFzdEluZGV4T2YoInJhem9yLWJsb2NrLXN0YXJ0IikgPT0gLTEpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAKICAgICAgICB2YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQocG9zLnJvdywgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIAogICAgICAgIGlmKHN0YXRlLmxhc3RJbmRleE9mKCJyYXpvci1zaG9ydC1zdGFydCIpICE9IC0xKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNob3J0U3RhcnRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZihzdGF0ZS5sYXN0SW5kZXhPZigicmF6b3ItYmxvY2stc3RhcnQiKSAhPSAtMSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRLZXl3b3JkQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB9CgogICAgICAgIAogICAgfTsKICAgIAogICAgdGhpcy5nZXRTaG9ydFN0YXJ0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gc2hvcnRIYW5kcy5tYXAoZnVuY3Rpb24oZWxlbWVudCl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudCwKICAgICAgICAgICAgICAgIG1ldGE6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0S2V5d29yZENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNob3J0SGFuZHMuY29uY2F0KGtleXdvcmRzKS5tYXAoZnVuY3Rpb24oZWxlbWVudCl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudCwKICAgICAgICAgICAgICAgIG1ldGE6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChSYXpvckNvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLlJhem9yQ29tcGxldGlvbnMgPSBSYXpvckNvbXBsZXRpb25zOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Jhem9yIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sIiwiYWNlL21vZGUvcmF6b3JfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvcmF6b3JfY29tcGxldGlvbnMiLCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgUmF6b3JIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcmF6b3JfaGlnaGxpZ2h0X3J1bGVzIikuUmF6b3JIaWdobGlnaHRSdWxlczsKdmFyIFJhem9yQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL3Jhem9yX2NvbXBsZXRpb25zIikuUmF6b3JDb21wbGV0aW9uczsKdmFyIEh0bWxDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vaHRtbF9jb21wbGV0aW9ucyIpLkh0bWxDb21wbGV0aW9uczsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy4kaGlnaGxpZ2h0UnVsZXMgPSBuZXcgUmF6b3JIaWdobGlnaHRSdWxlcygpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IFJhem9yQ29tcGxldGlvbnMoKTsKICAgIHRoaXMuJGh0bWxDb21wbGV0ZXIgPSBuZXcgSHRtbENvbXBsZXRpb25zKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBIdG1sTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHJhem9yVG9rZW4gPSB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgaHRtbFRva2VuID0gdGhpcy4kaHRtbENvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIHJldHVybiByYXpvclRva2VuLmNvbmNhdChodG1sVG9rZW4pOwogICAgfTsKICAgIAogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Jhem9yIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcmF6b3IiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-rdoc.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9sYXRleF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBMYXRleEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7ICAKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIiUuKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJscGFyZW4iLCAidmFyaWFibGUucGFyYW1ldGVyIiwgInJwYXJlbiIsICJscGFyZW4iLCAic3RvcmFnZS50eXBlIiwgInJwYXJlbiJdLAogICAgICAgICAgICByZWdleCA6ICIoXFxcXCg/OmRvY3VtZW50Y2xhc3N8dXNlcGFja2FnZXxpbnB1dCkpKD86KFxcWykoW15cXF1dKikoXFxdKSk/KHspKFtefV0qKSh9KSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwibHBhcmVuIiwgInZhcmlhYmxlLnBhcmFtZXRlciIsICJycGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAiKFxcXFwoPzpsYWJlbHx2P3JlZnxjaXRlKD86W157XSopKSkoPzooeykoW159XSopKH0pKT8iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcYmVnaW4pKHspKHZlcmJhdGltKSh9KSIsCiAgICAgICAgICAgIG5leHQgOiAidmVyYmF0aW0iCiAgICAgICAgfSwgIHsKICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJscGFyZW4iLCAidmFyaWFibGUucGFyYW1ldGVyIiwgInJwYXJlbiJdLAogICAgICAgICAgICByZWdleCA6ICIoXFxcXGJlZ2luKSh7KShsc3RsaXN0aW5nKSh9KSIsCiAgICAgICAgICAgIG5leHQgOiAibHN0bGlzdGluZyIKICAgICAgICB9LCAgewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcKD86YmVnaW58ZW5kKSkoeykoW1xcdypdKikofSkiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICByZWdleCA6IC9cXHZlcmJcYlwqPy8sCiAgICAgICAgICAgIG5leHQgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQub3BlcmF0b3IiLCAic3RyaW5nIiwgImtleXdvcmQub3BlcmF0b3IiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiguKSguKj8pKFxcMXwkKXwiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXFxbYS16QS1aXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXFteYS16QS1aXT8iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXCR7MSwyfSIsCiAgICAgICAgICAgIG5leHQgIDogImVxdWF0aW9uIgogICAgICAgIH1dLAogICAgICAgICJlcXVhdGlvbiIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiJS4qJCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcJHsxLDJ9IiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCg/OlteYS16QS1aXXxbYS16QS1aXSspIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiZXJyb3IiLCAKICAgICAgICAgICAgcmVnZXggOiAiXlxccyokIiwgCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiIAogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgICAgICB9XSwKICAgICAgICAidmVyYmF0aW0iOiBbewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcZW5kKSh7KSh2ZXJiYXRpbSkofSkiLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInRleHQiCiAgICAgICAgfV0sCiAgICAgICAgImxzdGxpc3RpbmciOiBbewogICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgImxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicnBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIihcXFxcZW5kKSh7KShsc3RsaXN0aW5nKSh9KSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAidGV4dCIKICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9Owpvb3AuaW5oZXJpdHMoTGF0ZXhIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTGF0ZXhIaWdobGlnaHRSdWxlcyA9IExhdGV4SGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvcmRvY19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbGF0ZXhfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgTGFUZVhIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbGF0ZXhfaGlnaGxpZ2h0X3J1bGVzIik7Cgp2YXIgUkRvY0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIlLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwgLy8gbm9uLWNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFxbJCYlI1xce1xcfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBjb21tYW5kCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86bmFtZXxhbGlhc3xtZXRob2R8UzNtZXRob2R8UzRtZXRob2R8aXRlbXxjb2RlfHByZWZvcm1hdHRlZHxrYmR8cGtnfHZhcnxlbnZ8b3B0aW9ufGNvbW1hbmR8YXV0aG9yfGVtYWlsfHVybHxzb3VyY2V8Y2l0ZXxhY3JvbnltfGhyZWZ8Y29kZXxwcmVmb3JtYXR0ZWR8bGlua3xlcW58ZGVxbnxrZXl3b3JkfHVzYWdlfGV4YW1wbGVzfGRvbnRydW58ZG9udHNob3d8ZmlndXJlfGlmfGlmZWxzZXxTZXhwcnxSZE9wdHN8aW5wdXRlbmNvZGluZ3x1c2VwYWNrYWdlKVxcYiIsCiAgICAgICAgICAgICAgIG5leHQgOiAibm9zcGVsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpbYS16QS1aMC05XSt8W15hLXpBLVowLTldKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5rZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibm9zcGVsbCIgOiBbCiAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiJS4qJCIsCiAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJub3NwZWxsLnRleHQiLCAvLyBub24tY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcWyQmJSNcXHtcXH1dIgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCg/Om5hbWV8YWxpYXN8bWV0aG9kfFMzbWV0aG9kfFM0bWV0aG9kfGl0ZW18Y29kZXxwcmVmb3JtYXR0ZWR8a2JkfHBrZ3x2YXJ8ZW52fG9wdGlvbnxjb21tYW5kfGF1dGhvcnxlbWFpbHx1cmx8c291cmNlfGNpdGV8YWNyb255bXxocmVmfGNvZGV8cHJlZm9ybWF0dGVkfGxpbmt8ZXFufGRlcW58a2V5d29yZHx1c2FnZXxleGFtcGxlc3xkb250cnVufGRvbnRzaG93fGZpZ3VyZXxpZnxpZmVsc2V8U2V4cHJ8UmRPcHRzfGlucHV0ZW5jb2Rpbmd8dXNlcGFja2FnZSlcXGIiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86W2EtekEtWjAtOV0rfFteYS16QS1aMC05XSkiLAogICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pXSIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICByZWdleCA6ICJ9IiwKICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwudGV4dCIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJub3NwZWxsLnRleHQiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXHcrIgogICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKFJEb2NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUkRvY0hpZ2hsaWdodFJ1bGVzID0gUkRvY0hpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9yZG9jIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcmRvY19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgUkRvY0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9yZG9jX2hpZ2hsaWdodF9ydWxlcyIpLlJEb2NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKHN1cHByZXNzSGlnaGxpZ2h0aW5nKSB7Cgl0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUkRvY0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9yZG9jIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcmRvYyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-red.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9yZWRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgUmVkSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIgY29tcG91bmRLZXl3b3JkcyA9ICIiOyAgICAgICAgCgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAge3Rva2VuIDogImtleXdvcmQub3BlcmF0b3IiLCAKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHMoW1wtKyUvPTw+Kl18KD86XCpcKlx8XC9cL3w9PXw+Pj4/fDw+fDw8fD0+fDw9fD1cPykpKFxzfCg/PTopKS99LAogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmVtYWlsIiwgcmVnZXggOiAvXHdbLVx3Ll9dKlxAXHdbLVx3Ll9dKi99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFsdWUudGltZSIsIHJlZ2V4IDogL1xiXGQrOlxkKyg6XGQrKT8vfSwKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy51cmwiLCByZWdleCA6IC9cd1stXHdfXSpcOihcL1wvKT9cd1stXHcuX10qKDpcZCspPy99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFsdWUuZGF0ZSIsIHJlZ2V4IDogLyhcYlxkezEsNH1bLS9dXGR7MSwyfVstL11cZHsxLDJ9fFxkezEsMn1bLS9dXGR7MSwyfVstL11cZHsxLDR9KVxiL30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YWx1ZS50dXBsZSIsIHJlZ2V4IDogL1xiXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfShcLlxkezEsM30pezAsOX0vfSwKICAgICAgICAgICAge3Rva2VuIDogInZhbHVlLnBhaXIiLCByZWdleDogL1srLV0/XGQreFstK10/XGQrL30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YWx1ZS5iaW5hcnkiLCByZWdleCA6IC9cYjIjeyhbMDFdezh9KSt9L30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YWx1ZS5iaW5hcnkiLCByZWdleCA6IC9cYjY0I3soW1x3Lz0rXSkrfS99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFsdWUuYmluYXJ5IiwgcmVnZXggOiAvKDE2KT8jeyhbXGRhYmNkZWZBQkNERUZdW1xkYWJjZGVmQUJDREVGXSkqfS99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFsdWUuaXNzdWUiLCByZWdleCA6IC8jXHdbLVx3JyouXSovfSwKICAgICAgICAgICAge3Rva2VuIDogInZhbHVlLm51bWVyaWMiLCByZWdleDogL1srLV0/XGRbJ1xkXSooPzpcLlxkKyk/ZVstK10/XGR7MSwzfVwlPyg/IVx3KS99LAogICAgICAgICAgICB7dG9rZW4gOiAiaW52YWxpZC5pbGxlZ2FsIiwgcmVnZXg6IC9bKy1dP1xkWydcZF0qKD86XC5cZCspP1wlP1thLXpBLVpdL30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YWx1ZS5udW1lcmljIiwgcmVnZXg6IC9bKy1dP1xkWydcZF0qKD86XC5cZCspP1wlPyg/IVthLXpBLVpdKS99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFsdWUuY2hhcmFjdGVyIiwgcmVnZXggOiAvIyIoXF5bLUAvX35eIkhLTE1cW118LikiL30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuZmlsZSIsIHJlZ2V4IDogLyVbLVx3XC5cL10rL30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcudGFnIiwgcmVnZXggOiAvPC8sIG5leHQgOiAidGFnIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6IC8iLywgbmV4dCAgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcub3RoZXIiLCByZWdleCA6ICJ7IiwgbmV4dCAgOiAic3RyaW5nLm90aGVyIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiY29tbWVudCBbe10iLCBuZXh0IDogImNvbW1lbnQifSwKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCAgcmVnZXggOiAvOy4rJC99LAogICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4ubWFwLXN0YXJ0IiwgcmVnZXggOiAiI1xcKCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4uYmxvY2stc3RhcnQiLCByZWdleCA6ICJbXFxbXSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4uYmxvY2stZW5kIiwgcmVnZXggOiAiW1xcXV0ifSwKICAgICAgICAgICAge3Rva2VuIDogInBhcmVuLnBhcmVucy1zdGFydCIsIHJlZ2V4IDogIlsoXSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4ucGFyZW5zLWVuZCIsIHJlZ2V4IDogIlxcKSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAia2V5d29yZCIsIHJlZ2V4IDogIi9sb2NhbHwvZXh0ZXJuYWwifSwKICAgICAgICAgICAge3Rva2VuIDogImtleXdvcmQucHJlcHJvY2Vzc29yIiwgcmVnZXggOiAiIyhpZnxlaXRoZXJ8IiArCiAgICAgICAgICAgICAgICAic3dpdGNofGNhc2V8aW5jbHVkZXxkb3xtYWNyb2xvY2FsfHJlc2V0fHByb2Nlc3N8dHJhY2UpIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5kYXRhdHlwZSEiLCByZWdleCA6IAogICAgICAgICAgICAgICAgIig/OmRhdGF0eXBlfHVuc2V0fG5vbmV8bG9naWN8YmxvY2t8cGFyZW58c3RyaW5nfCIgKwogICAgICAgICAgICAgICAgImZpbGV8dXJsfGNoYXJ8aW50ZWdlcnxmbG9hdHx3b3JkfHNldC13b3JkfGxpdC13b3JkfCIgKwogICAgICAgICAgICAgICAgImdldC13b3JkfHJlZmluZW1lbnR8aXNzdWV8bmF0aXZlfGFjdGlvbnxvcHxmdW5jdGlvbnwiICsKICAgICAgICAgICAgICAgICJwYXRofGxpdC1wYXRofHNldC1wYXRofGdldC1wYXRofHJvdXRpbmV8Yml0c2V0fHBvaW50fCIgKyAKICAgICAgICAgICAgICAgICJvYmplY3R8dHlwZXNldHxlcnJvcnx2ZWN0b3J8aGFzaHxwYWlyfHBlcmNlbnR8dHVwbGV8IiArCiAgICAgICAgICAgICAgICAibWFwfGJpbmFyeXx0aW1lfHRhZ3xlbWFpbHxoYW5kbGV8ZGF0ZXxpbWFnZXxldmVudHwiICsKICAgICAgICAgICAgICAgICJzZXJpZXN8YW55LXR5cGV8bnVtYmVyfGFueS1vYmplY3R8c2NhbGFyfCIgKwogICAgICAgICAgICAgICAgImFueS1zdHJpbmd8YW55LXdvcmR8YW55LWZ1bmN0aW9ufGFueS1ibG9ja3xhbnktbGlzdHwiICsKICAgICAgICAgICAgICAgICJhbnktcGF0aHxpbW1lZGlhdGV8YWxsLXdvcmR8aW50ZXJuYWx8ZXh0ZXJuYWx8ZGVmYXVsdCkhKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAia2V5d29yZC5mdW5jdGlvbiIsIHJlZ2V4IDogCiAgICAgICAgICAgICAgICAiXFxiKD86Y29sbGVjdHxxdW90ZXxvbi1wYXJzZS1ldmVudHxtYXRofGxhc3R8c291cmNlfGV4cGFuZHwiICsKICAgICAgICAgICAgICAgICJzaG93fGNvbnRleHR8b2JqZWN0fGlucHV0fHF1aXR8ZGlyfG1ha2UtZGlyfGNhdXNlLWVycm9yfCIgKwogICAgICAgICAgICAgICAgImVycm9yXFw/fG5vbmVcXD98YmxvY2tcXD98YW55LWxpc3RcXD98d29yZFxcP3xjaGFyXFw/fCIgKwogICAgICAgICAgICAgICAgImFueS1zdHJpbmdcXD98c2VyaWVzXFw/fGJpbmFyeVxcP3xhdHRlbXB0fHVybFxcP3wiICsKICAgICAgICAgICAgICAgICJzdHJpbmdcXD98c3VmZml4XFw/fGZpbGVcXD98b2JqZWN0XFw/fGJvZHktb2Z8Zmlyc3R8IiArCiAgICAgICAgICAgICAgICAic2Vjb25kfHRoaXJkfG1vZHxjbGVhbi1wYXRofGRpclxcP3x0by1yZWQtZmlsZXwiICsKICAgICAgICAgICAgICAgICJub3JtYWxpemUtZGlyfGxpc3QtZGlyfHBhZHxlbXB0eVxcP3xkaXJpemV8b2Zmc2V0XFw/fCIgKwogICAgICAgICAgICAgICAgIndoYXQtZGlyfGV4cGFuZC1kaXJlY3RpdmVzfGxvYWR8c3BsaXQtcGF0aHxjaGFuZ2UtZGlyfCIgKwogICAgICAgICAgICAgICAgInRvLWZpbGV8cGF0aC10aHJ1fHNhdmV8bG9hZC10aHJ1fFZpZXd8ZmxvYXRcXD98dG8tZmxvYXR8IiArCiAgICAgICAgICAgICAgICAiY2hhcnNldHxcXD98cHJvYmV8c2V0LXdvcmRcXD98cXx3b3Jkcy1vZnxyZXBsYWNlfHJlcGVuZHwiICsKICAgICAgICAgICAgICAgICJyZWFjdHxmdW5jdGlvblxcP3xzcGVjLW9mfHVuc2V0XFw/fGhhbHR8b3BcXD98IiArCiAgICAgICAgICAgICAgICAiYW55LWZ1bmN0aW9uXFw/fHRvLXBhcmVufHRhZ1xcP3xyb3V0aW5lfGNsYXNzLW9mfCIgKwogICAgICAgICAgICAgICAgInNpemUtdGV4dHxkcmF3fGhhbmRsZVxcP3xsaW5rLXRhYnMtdG8tcGFyZW50fCIgKwogICAgICAgICAgICAgICAgImxpbmstc3ViLXRvLXBhcmVudHxvbi1mYWNlLWRlZXAtY2hhbmdlKnwiICsKICAgICAgICAgICAgICAgICJ1cGRhdGUtZm9udC1mYWNlc3xkby1hY3Rvcnxkby1zYWZlfGRvLWV2ZW50c3xwYWlyXFw/fCIgKwogICAgICAgICAgICAgICAgImZvcmVhY2gtZmFjZXxoZXgtdG8tcmdifGlzc3VlXFw/fGFsdGVyfHBhdGhcXD98IiArCiAgICAgICAgICAgICAgICAidHlwZXNldFxcP3xkYXRhdHlwZVxcP3xzZXQtZmxhZ3xsYXlvdXR8ZXh0cmFjdHxpbWFnZVxcP3wiICsKICAgICAgICAgICAgICAgICJnZXQtd29yZFxcP3x0by1sb2dpY3x0by1zZXQtd29yZHx0by1ibG9ja3xjZW50ZXItZmFjZXwiICsKICAgICAgICAgICAgICAgICJkdW1wLWZhY2V8cmVxdWVzdC1mb250fHJlcXVlc3QtZmlsZXxyZXF1ZXN0LWRpcnxyZWpvaW58IiArCiAgICAgICAgICAgICAgICAiZWxsaXBzaXplLWF0fGFueS1ibG9ja1xcP3xhbnktb2JqZWN0XFw/fG1hcFxcP3xrZXlzLW9mfCIgKwogICAgICAgICAgICAgICAgImEtYW58YWxzb3xwYXJzZS1mdW5jLXNwZWN8aGVscC1zdHJpbmd8d2hhdHxyb3V0aW5lXFw/fCIgKwogICAgICAgICAgICAgICAgImFjdGlvblxcP3xuYXRpdmVcXD98cmVmaW5lbWVudFxcP3xjb21tb24tc3Vic3RyfCIgKwogICAgICAgICAgICAgICAgInJlZC1jb21wbGV0ZS1maWxlfHJlZC1jb21wbGV0ZS1wYXRofHVudmlld3xjb21tZW50fFxcP1xcP3wiICsKICAgICAgICAgICAgICAgICJmb3VydGh8ZmlmdGh8dmFsdWVzLW9mfGJpdHNldFxcP3xlbWFpbFxcP3xnZXQtcGF0aFxcP3wiICsKICAgICAgICAgICAgICAgICJoYXNoXFw/fGludGVnZXJcXD98bGl0LXBhdGhcXD98bGl0LXdvcmRcXD98bG9naWNcXD98IiArCiAgICAgICAgICAgICAgICAicGFyZW5cXD98cGVyY2VudFxcP3xzZXQtcGF0aFxcP3x0aW1lXFw/fHR1cGxlXFw/fGRhdGVcXD98IiArCiAgICAgICAgICAgICAgICAidmVjdG9yXFw/fGFueS1wYXRoXFw/fGFueS13b3JkXFw/fG51bWJlclxcP3xpbW1lZGlhdGVcXD98IiArCiAgICAgICAgICAgICAgICAic2NhbGFyXFw/fGFsbC13b3JkXFw/fHRvLWJpdHNldHx0by1iaW5hcnl8dG8tY2hhcnx0by1lbWFpbHwiICsKICAgICAgICAgICAgICAgICJ0by1nZXQtcGF0aHx0by1nZXQtd29yZHx0by1oYXNofHRvLWludGVnZXJ8dG8taXNzdWV8IiArCiAgICAgICAgICAgICAgICAidG8tbGl0LXBhdGh8dG8tbGl0LXdvcmR8dG8tbWFwfHRvLW5vbmV8dG8tcGFpcnx0by1wYXRofCIgKwogICAgICAgICAgICAgICAgInRvLXBlcmNlbnR8dG8tcmVmaW5lbWVudHx0by1zZXQtcGF0aHx0by1zdHJpbmd8dG8tdGFnfCIgKwogICAgICAgICAgICAgICAgInRvLXRpbWV8dG8tdHlwZXNldHx0by10dXBsZXx0by11bnNldHx0by11cmx8dG8td29yZHwiICsKICAgICAgICAgICAgICAgICJ0by1pbWFnZXx0by1kYXRlfHBhcnNlLXRyYWNlfG1vZHVsb3xldmFsLXNldC1wYXRofCIgKwogICAgICAgICAgICAgICAgImV4dHJhY3QtYm9vdC1hcmdzfGZsaXAtZXhlLWZsYWd8c3BsaXR8ZG8tZmlsZXwiICsKICAgICAgICAgICAgICAgICJleGlzdHMtdGhydVxcP3xyZWFkLXRocnV8ZG8tdGhydXxjb3N8c2lufHRhbnxhY29zfGFzaW58IiArCiAgICAgICAgICAgICAgICAiYXRhbnxhdGFuMnxzcXJ0fGNsZWFyLXJlYWN0aW9uc3xkdW1wLXJlYWN0aW9uc3xyZWFjdFxcP3wiICsKICAgICAgICAgICAgICAgICJ3aXRoaW5cXD98b3ZlcmxhcFxcP3xkaXN0YW5jZVxcP3xmYWNlXFw/fG1ldHJpY3NcXD98IiArCiAgICAgICAgICAgICAgICAiZ2V0LXNjcm9sbGVyfGluc2VydC1ldmVudC1mdW5jfHJlbW92ZS1ldmVudC1mdW5jfCIgKwogICAgICAgICAgICAgICAgInNldC1mb2N1c3xoZWxwfGZldGNoLWhlbHB8YWJvdXR8bHN8bGx8cHdkfGNkfCIgKwogICAgICAgICAgICAgICAgInJlZC1jb21wbGV0ZS1pbnB1dHxtYXRyaXgpKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAia2V5d29yZC5hY3Rpb24iLCByZWdleCA6IAogICAgICAgICAgICAgICAgIlxcYig/OnRvfHJlbW92ZXxjb3B5fGluc2VydHxjaGFuZ2V8Y2xlYXJ8bW92ZXxwb2tlfHB1dHwiICsKICAgICAgICAgICAgICAgICJyYW5kb218cmV2ZXJzZXxzb3J0fHN3YXB8dGFrZXx0cmltfGFkZHxzdWJ0cmFjdHwiICsKICAgICAgICAgICAgICAgICJkaXZpZGV8bXVsdGlwbHl8bWFrZXxyZWZsZWN0fGZvcm18bW9sZHxtb2RpZnl8IiArCiAgICAgICAgICAgICAgICAiYWJzb2x1dGV8bmVnYXRlfHBvd2VyfHJlbWFpbmRlcnxyb3VuZHxldmVuXFw/fG9kZFxcP3wiICsKICAgICAgICAgICAgICAgICJhbmR+fGNvbXBsZW1lbnR8b3J+fHhvcn58YXBwZW5kfGF0fGJhY2t8ZmluZHxza2lwfCIgKwogICAgICAgICAgICAgICAgInRhaWx8aGVhZHxoZWFkXFw/fGluZGV4XFw/fGxlbmd0aFxcP3xuZXh0fHBpY2t8IiArCiAgICAgICAgICAgICAgICAic2VsZWN0fHRhaWxcXD98ZGVsZXRlfHJlYWR8d3JpdGUpKD8hWy1fIT9cXHd+XSkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJrZXl3b3JkLm5hdGl2ZSIsIHJlZ2V4IDogCiAgICAgICAgICAgICAgICAiXFxiKD86bm90fGFueXxzZXR8dXBwZXJjYXNlfGxvd2VyY2FzZXxjaGVja3N1bXwiICsKICAgICAgICAgICAgICAgICJ0cnl8Y2F0Y2h8YnJvd3NlfHRocm93fGFsbHxhc3wiICsKICAgICAgICAgICAgICAgICJyZW1vdmUtZWFjaHxmdW5jfGZ1bmN0aW9ufGRvZXN8aGFzfGRvfHJlZHVjZXwiICsKICAgICAgICAgICAgICAgICJjb21wb3NlfGdldHxwcmludHxwcmlufGVxdWFsXFw/fG5vdC1lcXVhbFxcP3wiICsKICAgICAgICAgICAgICAgICJzdHJpY3QtZXF1YWxcXD98bGVzc2VyXFw/fGdyZWF0ZXJcXD98bGVzc2VyLW9yLWVxdWFsXFw/fCIgKwogICAgICAgICAgICAgICAgImdyZWF0ZXItb3ItZXF1YWxcXD98c2FtZVxcP3x0eXBlXFw/fHN0YXRzfGJpbmR8aW58cGFyc2V8IiArCiAgICAgICAgICAgICAgICAidW5pb258dW5pcXVlfGludGVyc2VjdHxkaWZmZXJlbmNlfGV4Y2x1ZGV8IiArCiAgICAgICAgICAgICAgICAiY29tcGxlbWVudFxcP3xkZWhleHxuZWdhdGl2ZVxcP3xwb3NpdGl2ZVxcP3xtYXh8bWlufCIgKwogICAgICAgICAgICAgICAgInNoaWZ0fHRvLWhleHxzaW5lfGNvc2luZXx0YW5nZW50fGFyY3NpbmV8YXJjY29zaW5lfCIgKwogICAgICAgICAgICAgICAgImFyY3RhbmdlbnR8YXJjdGFuZ2VudDJ8TmFOXFw/fHplcm9cXD98bG9nLTJ8bG9nLTEwfGxvZy1lfCIgKwogICAgICAgICAgICAgICAgImV4cHxzcXVhcmUtcm9vdHxjb25zdHJ1Y3R8dmFsdWVcXD98YXMtcGFpcnwiICsKICAgICAgICAgICAgICAgICJleHRlbmR8ZGViYXNlfGVuYmFzZXx0by1sb2NhbC1maWxlfCIgKwogICAgICAgICAgICAgICAgIndhaXR8dW5zZXR8bmV3LWxpbmV8bmV3LWxpbmVcXD98Y29udGV4dFxcP3xzZXQtZW52fCIgKwogICAgICAgICAgICAgICAgImdldC1lbnZ8bGlzdC1lbnZ8bm93fHNpZ25cXD98Y2FsbHxzaXplXFw/KSg/IVstIT9cXHd+XSkiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJrZXl3b3JkIiwgcmVnZXggOiAKICAgICAgICAgICAgICAgICJcXGIoPzpSZWQoPz1cXHMrXFxbKXxvYmplY3R8Y29udGV4dHxtYWtlfHNlbGZ8a2VlcCkoPyFbLSE/XFx3fl0pIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7dG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsIHJlZ2V4IDogInRoaXMifSwKICAgICAgICAgICAge3Rva2VuOiAia2V5d29yZC5jb250cm9sIiwgcmVnZXggOiAKICAgICAgICAgICAgICAgICIoPzp3aGlsZXxpZnxyZXR1cm58Y2FzZXx1bmxlc3N8ZWl0aGVyfHVudGlsfGxvb3B8cmVwZWF0fCIgKwogICAgICAgICAgICAgICAgImZvcmV2ZXJ8Zm9yZWFjaHxmb3JhbGx8c3dpdGNofGJyZWFrfGNvbnRpbnVlfGV4aXQpKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5sYW5ndWFnZSIsIHJlZ2V4IDogCiAgICAgICAgICAgICAgICAiXFxiKD86dHJ1ZXxmYWxzZXxvbnxvZmZ8eWVzfG5vbmV8bm8pKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgcmVnZXggOiAvXGJwaSg/IVteLV9dKS99LAogICAgICAgICAgICB7dG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIiLCByZWdleCA6ICJcXGIoc3BhY2V8dGFifG5ld2xpbmV8Y3J8bGYpKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwgcmVnZXggOiAiXHMob3J8YW5kfHhvcnxpcylccyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidmFyaWFibGUuZ2V0LXBhdGgiLCByZWdleCA6IC86XHdbLVx3JyouPyFdKihcL1x3Wy1cdycqLj8hXSopKFwvXHdbLVx3JyouPyFdKikqL30sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YXJpYWJsZS5zZXQtcGF0aCIsIHJlZ2V4IDogL1x3Wy1cdycqLj8hXSooXC9cd1stXHcnKi4/IV0qKShcL1x3Wy1cdycqLj8hXSopKjovfSwKICAgICAgICAgICAge3Rva2VuIDogInZhcmlhYmxlLmxpdC1wYXRoIiwgcmVnZXggOiAvJ1x3Wy1cdycqLj8hXSooXC9cd1stXHcnKi4/IV0qKShcL1x3Wy1cdycqLj8hXSopKi99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFyaWFibGUucGF0aCIsIHJlZ2V4IDogL1x3Wy1cdycqLj8hXSooXC9cd1stXHcnKi4/IV0qKShcL1x3Wy1cdycqLj8hXSopKi99LAogICAgICAgICAgICB7dG9rZW4gOiAidmFyaWFibGUucmVmaW5lbWVudCIsIHJlZ2V4IDogL1wvXHdbLVx3JyouPyFdKi99LCAKICAgICAgICAgICAge3Rva2VuIDogImtleXdvcmQudmlldy5zdHlsZSIsIHJlZ2V4IDogCiAgICAgICAgICAgICAgICAiXFxiKD86d2luZG93fGJhc2V8YnV0dG9ufHRleHR8ZmllbGR8YXJlYXxjaGVja3wiICsKICAgICAgICAgICAgICAgICJyYWRpb3xwcm9ncmVzc3xzbGlkZXJ8Y2FtZXJhfHRleHQtbGlzdHwiICsKICAgICAgICAgICAgICAgICJkcm9wLWxpc3R8ZHJvcC1kb3dufHBhbmVsfGdyb3VwLWJveHwiICsKICAgICAgICAgICAgICAgICJ0YWItcGFuZWx8aDF8aDJ8aDN8aDR8aDV8Ym94fGltYWdlfGluaXQpKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAia2V5d29yZC52aWV3LmV2ZW50IiwgcmVnZXggOiAKICAgICAgICAgICAgICAgICJcXGIoPzpkZXRlY3R8b24tZGV0ZWN0fHRpbWV8b24tdGltZXxkcmF3aW5nfG9uLWRyYXdpbmd8IiArCiAgICAgICAgICAgICAgICAic2Nyb2xsfG9uLXNjcm9sbHxkb3dufG9uLWRvd258dXB8b24tdXB8bWlkLWRvd258IiArCiAgICAgICAgICAgICAgICAib24tbWlkLWRvd258bWlkLXVwfG9uLW1pZC11cHxhbHQtZG93bnxvbi1hbHQtZG93bnwiICsKICAgICAgICAgICAgICAgICJhbHQtdXB8b24tYWx0LXVwfGF1eC1kb3dufG9uLWF1eC1kb3dufGF1eC11cHwiICsKICAgICAgICAgICAgICAgICJvbi1hdXgtdXB8d2hlZWx8b24td2hlZWx8ZHJhZy1zdGFydHxvbi1kcmFnLXN0YXJ0fCIgKwogICAgICAgICAgICAgICAgImRyYWd8b24tZHJhZ3xkcm9wfG9uLWRyb3B8Y2xpY2t8b24tY2xpY2t8ZGJsLWNsaWNrfCIgKwogICAgICAgICAgICAgICAgIm9uLWRibC1jbGlja3xvdmVyfG9uLW92ZXJ8a2V5fG9uLWtleXxrZXktZG93bnwiICsKICAgICAgICAgICAgICAgICJvbi1rZXktZG93bnxrZXktdXB8b24ta2V5LXVwfGltZXxvbi1pbWV8Zm9jdXN8IiArCiAgICAgICAgICAgICAgICAib24tZm9jdXN8dW5mb2N1c3xvbi11bmZvY3VzfHNlbGVjdHxvbi1zZWxlY3R8IiArCiAgICAgICAgICAgICAgICAiY2hhbmdlfG9uLWNoYW5nZXxlbnRlcnxvbi1lbnRlcnxtZW51fG9uLW1lbnV8Y2xvc2V8IiArCiAgICAgICAgICAgICAgICAib24tY2xvc2V8bW92ZXxvbi1tb3ZlfHJlc2l6ZXxvbi1yZXNpemV8bW92aW5nfCIgKwogICAgICAgICAgICAgICAgIm9uLW1vdmluZ3xyZXNpemluZ3xvbi1yZXNpemluZ3x6b29tfG9uLXpvb218cGFufCIgKwogICAgICAgICAgICAgICAgIm9uLXBhbnxyb3RhdGV8b24tcm90YXRlfHR3by10YXB8b24tdHdvLXRhcHwiICsKICAgICAgICAgICAgICAgICJwcmVzcy10YXB8b24tcHJlc3MtdGFwfGNyZWF0ZXxvbi1jcmVhdGV8Y3JlYXRlZHxvbi1jcmVhdGVkKSg/IVstIT9cXHd+XSkifSwKICAgICAgICAgICAge3Rva2VuIDogImtleXdvcmQudmlldy5vcHRpb24iLCByZWdleCA6IAogICAgICAgICAgICAgICAgIlxcYig/OmFsbC1vdmVyfGNlbnRlcnxjb2xvcnxkZWZhdWx0fGRpc2FibGVkfGRvd258IiArCiAgICAgICAgICAgICAgICAiZmxhZ3N8Zm9jdXN8Zm9udHxmb250LWNvbG9yfGZvbnQtbmFtZXwiICsKICAgICAgICAgICAgICAgICJmb250LXNpemV8aGlkZGVufGhpbnR8bGVmdHxsb29zZXxuYW1lfCIgKwogICAgICAgICAgICAgICAgIm5vLWJvcmRlcnxub3d8cmF0ZXxyZWFjdHxzZWxlY3R8c2l6ZXxzcGFjZSkoPyFbLSE/XFx3fl0pIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5vdGhlci5jb2xvdXIiLCByZWdleCA6ICJcXGIoPzpSZWR8d2hpdGV8dHJhbnNwYXJlbnR8IiArCiAgICAgICAgICAgICAgICAiYmxhY2t8Z3JheXxhcXVhfGJlaWdlfGJsdWV8YnJpY2t8YnJvd258Y29hbHxjb2ZmZWV8IiArCiAgICAgICAgICAgICAgICAiY3JpbXNvbnxjeWFufGZvcmVzdHxnb2xkfGdyZWVufGl2b3J5fGtoYWtpfGxlYWZ8bGluZW58IiArCiAgICAgICAgICAgICAgICAibWFnZW50YXxtYXJvb258bWludHxuYXZ5fG9sZHJhYnxvbGl2ZXxvcmFuZ2V8cGFwYXlhfCIgKwogICAgICAgICAgICAgICAgInBld3RlcnxwaW5rfHB1cnBsZXxyZWJsdWV8cmVib2xvcnxzaWVubmF8c2lsdmVyfHNreXwiICsKICAgICAgICAgICAgICAgICJzbm93fHRhbm5lZHx0ZWFsfHZpb2xldHx3YXRlcnx3aGVhdHx5ZWxsb3x5ZWxsb3d8Z2xhc3MpKD8hWy0hP1xcd35dKSJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidmFyaWFibGUuZ2V0LXdvcmQiLCByZWdleCA6IC9cOlx3Wy1cdycqLj8hXSovfSwgCiAgICAgICAgICAgIHt0b2tlbiA6ICJ2YXJpYWJsZS5zZXQtd29yZCIsIHJlZ2V4IDogL1x3Wy1cdycqLj8hXSpcOi99LCAKICAgICAgICAgICAge3Rva2VuIDogInZhcmlhYmxlLmxpdC13b3JkIiwgcmVnZXggOiAvJ1x3Wy1cdycqLj8hXSovfSwKICAgICAgICAgICAge3Rva2VuIDogInZhcmlhYmxlLndvcmQiLCByZWdleCA6IC9cYlx3K1stXHcnKi4hP10qL30sCiAgICAgICAgICAgIHtjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgXSwKICAgICAgICAic3RyaW5nIiA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZyIsIHJlZ2V4IDogLyIvLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nIn0KICAgICAgICBdLAogICAgICAgICJzdHJpbmcub3RoZXIiIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLm90aGVyIiwgcmVnZXggOiAvfS8sIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcub3RoZXIifQogICAgICAgIF0sCiAgICAgICAgInRhZyIgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcudGFnIiwgcmVnZXggOiAvPi8sIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcudGFnIn0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6IC99LywgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQifQogICAgICAgIF0KICAgIH07Cn07Cm9vcC5pbmhlcml0cyhSZWRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUmVkSGlnaGxpZ2h0UnVsZXMgPSBSZWRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3JlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3JlZF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBSZWRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcmVkX2hpZ2hsaWdodF9ydWxlcyIpLlJlZEhpZ2hsaWdodFJ1bGVzOwp2YXIgUmVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBSZWRIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IFJlZEZvbGRNb2RlKCk7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICI7IjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0geyBzdGFydDogImNvbW1lbnQgeyIsIGVuZDogIn0iIH07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcW1woXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvcmVkIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcmVkIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-redshift.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qc29uX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEpzb25IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXVxccyooPz06KScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIHNpbmdsZSBxdW90ZWQgc3RyaW5ncyBhcmUgbm90IGFsbG93ZWQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50cyBhcmUgbm90IGFsbG93ZWQsIGJ1dCB3aG8gY2FyZXM/CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuc3RhcnQiLCAvLyBjb21tZW50cyBhcmUgbm90IGFsbG93ZWQsIGJ1dCB3aG8gY2FyZXM/CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86eFswLTlhLWZBLUZdezJ9fHVbMC05YS1mQS1GXXs0fXxbIlxcXC9iZm5ydF0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZW5kIiwgLy8gY29tbWVudHMgYXJlIG5vdCBhbGxvd2VkLCBidXQgd2hvIGNhcmVzPwogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKICAgIAp9OwoKb29wLmluaGVyaXRzKEpzb25IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSnNvbkhpZ2hsaWdodFJ1bGVzID0gSnNvbkhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcmVkc2hpZnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2pzb25faGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgSnNvbkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qc29uX2hpZ2hsaWdodF9ydWxlcyIpLkpzb25IaWdobGlnaHRSdWxlczsKCnZhciBSZWRzaGlmdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgImFlczEyOHxhZXMyNTZ8YWxsfGFsbG93b3ZlcndyaXRlfGFuYWx5c2V8YW5hbHl6ZXxhbmR8YW55fGFycmF5fGFzfGFzY3xhdXRob3JpemF0aW9ufGJhY2t1cHwiICsgCiAgICAgICAgImJldHdlZW58YmluYXJ5fGJsYW5rc2FzbnVsbHxib3RofGJ5dGVkaWN0fGJ6aXAyfGNhc2V8Y2FzdHxjaGVja3xjb2xsYXRlfGNvbHVtbnxjb25zdHJhaW50fGNyZWF0ZXxjcmVkZW50aWFsc3wiICsgCiAgICAgICAgImNyb3NzfGN1cnJlbnRfZGF0ZXxjdXJyZW50X3RpbWV8Y3VycmVudF90aW1lc3RhbXB8Y3VycmVudF91c2VyfGN1cnJlbnRfdXNlcl9pZHxkZWZhdWx0fGRlZmVycmFibGV8ZGVmbGF0ZXxkZWZyYWd8ZGVsdGF8IiArIAogICAgICAgICJkZWx0YTMya3xkZXNjfGRpc2FibGV8ZGlzdGluY3R8ZG98ZWxzZXxlbXB0eWFzbnVsbHxlbmFibGV8ZW5jb2RlfGVuY3J5cHR8ZW5jcnlwdGlvbnxlbmR8ZXhjZXB0fGV4cGxpY2l0fGZhbHNlfGZvcnxmb3JlaWdufCIgKyAKICAgICAgICAiZnJlZXplfGZyb218ZnVsbHxnbG9iYWxkaWN0MjU2fGdsb2JhbGRpY3Q2NGt8Z3JhbnR8Z3JvdXB8Z3ppcHxoYXZpbmd8aWRlbnRpdHl8aWdub3JlfGlsaWtlfGlufGluaXRpYWxseXxpbm5lcnxpbnRlcnNlY3R8aW50b3xpc3wiICsgCiAgICAgICAgImlzbnVsbHxqb2lufGxlYWRpbmd8bGVmdHxsaWtlfGxpbWl0fGxvY2FsdGltZXxsb2NhbHRpbWVzdGFtcHxsdW58bHVuc3xsem98bHpvcHxtaW51c3xtb3N0bHkxM3xtb3N0bHkzMnxtb3N0bHk4fG5hdHVyYWx8bmV3fG5vdHxub3RudWxsfCIgKyAKICAgICAgICAibnVsbHxudWxsc3xvZmZ8b2ZmbGluZXxvZmZzZXR8b2xkfG9ufG9ubHl8b3BlbnxvcnxvcmRlcnxvdXRlcnxvdmVybGFwc3xwYXJhbGxlbHxwYXJ0aXRpb258cGVyY2VudHxwZXJtaXNzaW9uc3xwbGFjaW5nfHByaW1hcnl8cmF3fHJlYWRyYXRpb3wiICsKICAgICAgICAicmVjb3ZlcnxyZWZlcmVuY2VzfHJlamVjdGxvZ3xyZXNvcnR8cmVzdG9yZXxyaWdodHxzZWxlY3R8c2Vzc2lvbl91c2VyfHNpbWlsYXJ8c29tZXxzeXNkYXRlfHN5c3RlbXx0YWJsZXx0YWd8dGRlc3x0ZXh0MjU1fHRleHQzMmt8dGhlbnx0aW1lc3RhbXB8IiArIAogICAgICAgICJ0b3x0b3B8dHJhaWxpbmd8dHJ1ZXx0cnVuY2F0ZWNvbHVtbnN8dW5pb258dW5pcXVlfHVzZXJ8dXNpbmd8dmVyYm9zZXx3YWxsZXR8d2hlbnx3aGVyZXx3aXRofHdpdGhvdXQiCiAgICApOwoKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiY3VycmVudF9zY2hlbWF8Y3VycmVudF9zY2hlbWFzfGhhc19kYXRhYmFzZV9wcml2aWxlZ2V8aGFzX3NjaGVtYV9wcml2aWxlZ2V8aGFzX3RhYmxlX3ByaXZpbGVnZXxhZ2V8Y3VycmVudF90aW1lfGN1cnJlbnRfdGltZXN0YW1wfGxvY2FsdGltZXwiICsgCiAgICAgICAgImlzZmluaXRlfG5vd3xhc2NpaXxnZXRfYml0fGdldF9ieXRlfG9jdGV0X2xlbmd0aHxzZXRfYml0fHNldF9ieXRlfHRvX2FzY2lpfGF2Z3xjb3VudHxsaXN0YWdnfG1heHxtaW58c3RkZGV2X3NhbXB8c3RkZGV2X3BvcHxzdW18dmFyX3NhbXB8dmFyX3BvcHwiICsgCiAgICAgICAgImJpdF9hbmR8Yml0X29yfGJvb2xfYW5kfGJvb2xfb3J8YXZnfGNvdW50fGN1bWVfZGlzdHxkZW5zZV9yYW5rfGZpcnN0X3ZhbHVlfGxhc3RfdmFsdWV8bGFnfGxlYWR8bGlzdGFnZ3xtYXh8bWVkaWFufG1pbnxudGhfdmFsdWV8bnRpbGV8cGVyY2VudF9yYW5rfCIgKyAKICAgICAgICAicGVyY2VudGlsZV9jb250fHBlcmNlbnRpbGVfZGlzY3xyYW5rfHJhdGlvX3RvX3JlcG9ydHxyb3dfbnVtYmVyfGNhc2V8Y29hbGVzY2V8ZGVjb2RlfGdyZWF0ZXN0fGxlYXN0fG52bHxudmwyfG51bGxpZnxhZGRfbW9udGhzfGFnZXxjb252ZXJ0X3RpbWV6b25lfCIgKwogICAgICAgICJjdXJyZW50X2RhdGV8dGltZW9mZGF5fGN1cnJlbnRfdGltZXxjdXJyZW50X3RpbWVzdGFtcHxkYXRlX2NtcHxkYXRlX2NtcF90aW1lc3RhbXB8ZGF0ZV9wYXJ0X3llYXJ8ZGF0ZWFkZHxkYXRlZGlmZnxkYXRlX3BhcnR8ZGF0ZV90cnVuY3xleHRyYWN0fGdldGRhdGV8IiArCiAgICAgICAgImludGVydmFsX2NtcHxpc2Zpbml0ZXxsYXN0X2RheXxsb2NhbHRpbWV8bG9jYWx0aW1lc3RhbXB8bW9udGhzX2JldHdlZW58bmV4dF9kYXl8bm93fHN5c2RhdGV8dGltZXN0YW1wX2NtcHx0aW1lc3RhbXBfY21wX2RhdGV8dHJ1bmN8YWJzfGFjb3N8YXNpbnxhdGFufCIgKwogICAgICAgICJhdGFuMnxjYnJ0fGNlaWxpbmd8Y2VpbHxjaGVja3N1bXxjb3N8Y290fGRlZ3JlZXN8ZGV4cHxkbG9nMXxkbG9nMTB8ZXhwfGZsb29yfGxufGxvZ3xtb2R8cGl8cG93ZXJ8cmFkaWFuc3xyYW5kb218cm91bmR8c2lufHNpZ258c3FydHx0YW58dHJ1bmN8YXNjaWl8IiArCiAgICAgICAgImJwY2hhcmNtcHxidHJpbXxidHRleHRfcGF0dGVybl9jbXB8Y2hhcl9sZW5ndGh8Y2hhcmFjdGVyX2xlbmd0aHxjaGFyaW5kZXh8Y2hyfGNvbmNhdHxjcmMzMnxmdW5jX3NoYTF8Z2V0X2JpdHxnZXRfYnl0ZXxpbml0Y2FwfGxlZnR8cmlnaHR8bGVufGxlbmd0aHwiICsKICAgICAgICAibG93ZXJ8bHBhZHxycGFkfGx0cmltfG1kNXxvY3RldF9sZW5ndGh8cG9zaXRpb258cXVvdGVfaWRlbnR8cXVvdGVfbGl0ZXJhbHxyZWdleHBfY291bnR8cmVnZXhwX2luc3RyfHJlZ2V4cF9yZXBsYWNlfHJlZ2V4cF9zdWJzdHJ8cmVwZWF0fHJlcGxhY2V8cmVwbGljYXRlfCIgKwogICAgICAgICJyZXZlcnNlfHJ0cmltfHNldF9iaXR8c2V0X2J5dGV8c3BsaXRfcGFydHxzdHJwb3N8c3RydG9sfHN1YnN0cmluZ3x0ZXh0bGVufHRvX2FzY2lpfHRvX2hleHx0cmFuc2xhdGV8dHJpbXx1cHBlcnxqc29uX2FycmF5X2xlbmd0aHxqc29uX2V4dHJhY3RfYXJyYXlfZWxlbWVudF90ZXh0fCIgKwogICAgICAgICJqc29uX2V4dHJhY3RfcGF0aF90ZXh0fGNhc3R8Y29udmVydHx0b19jaGFyfHRvX2RhdGV8dG9fbnVtYmVyfGN1cnJlbnRfZGF0YWJhc2V8Y3VycmVudF9zY2hlbWF8Y3VycmVudF9zY2hlbWFzfGN1cnJlbnRfdXNlcnxjdXJyZW50X3VzZXJfaWR8aGFzX2RhdGFiYXNlX3ByaXZpbGVnZXwiICsKICAgICAgICAiaGFzX3NjaGVtYV9wcml2aWxlZ2V8aGFzX3RhYmxlX3ByaXZpbGVnZXxwZ19iYWNrZW5kX3BpZHxwZ19sYXN0X2NvcHlfY291bnR8cGdfbGFzdF9jb3B5X2lkfHBnX2xhc3RfcXVlcnlfaWR8cGdfbGFzdF91bmxvYWRfY291bnR8c2Vzc2lvbl91c2VyfHNsaWNlX251bXx1c2VyfHZlcnNpb24iCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcwogICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCgogICAgdmFyIHNxbFJ1bGVzID0gW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUgc3RyaW5nIC0tIGFzc3VtZSBkb2xsYXIgc3RyaW5ncyBpZiBtdWx0aS1saW5lIGZvciBub3cKICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwgLy8gcGcgaWRlbnRpZmllcgogICAgICAgICAgICByZWdleCA6ICciLio/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl9dW2EtekEtWjAtOV8kXSpcXGIiIC8vIFRPRE8gLSBVbmljb2RlIGluIGlkZW50aWZpZXJzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiIXwhIXwhfnwhflxcKnwhfn58IX5+XFwqfCN8IyN8Izx8Izw9fCM8PnwjPXwjPnwjPj18JXxcXCZ8XFwmXFwmfFxcJjx8XFwmPFxcfHxcXCY+fFxcKnxcXCt8IiArCiAgICAgICAgICAgICAgICAgICAgIlxcLXwvfDx8PCM+fDxcXC0+fDw8fDw8PXw8PFxcfHw8PXw8Pnw8XFw/Pnw8QHw8XFxefD18Pnw+PXw+Pnw+Pj18PlxcXnxcXD8jfFxcP1xcLXxcXD9cXC1cXHx8IiArCiAgICAgICAgICAgICAgICAgICAgIlxcP1xcfHxcXD9cXHxcXHx8QHxAXFwtQHxAPnxAQHxAQEB8XFxefFxcfHxcXHxcXCY+fFxcfC98XFx8Pj58XFx8XFx8fFxcfFxcfC98fnx+XFwqfH48PX58fjx+fCIgKwogICAgICAgICAgICAgICAgICAgICJ+PXx+Pj1+fH4+fnx+fnx+flxcKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXChdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9CiAgICBdOwoKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgogICAgICAgICAgICB9LHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuc3RhdGVtZW50QmVnaW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXlthLXpBLVpdKyIsIC8vIENvdWxkIGVudW1lcmF0ZSBzdGFydGluZyBrZXl3b3JkcyBidXQgdGhpcyBhbGxvd3MgdGhpbmdzIHRvIHdvcmsgd2hlbiBuZXcgc3RhdGVtZW50cyBhcmUgYWRkZWQuCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXRlbWVudCIKICAgICAgICAgICAgfSx7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmJ1aWxkaW4iLCAvLyBwc3FsIGRpcmVjdGl2ZQogICAgICAgICAgICAgICAgcmVnZXggOiAiXlxcXFxbXFxTXSsuKiQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAic3RhdGVtZW50IiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi0tLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50U3RhdGVtZW50IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdGF0ZW1lbnRFbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiOyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwkanNvblxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogImpzb24tc3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCRbXFx3XzAtOV0qXFwkJCIsIC8vIGRvbGxhciBxdW90ZSBhdCB0aGUgZW5kIG9mIGEgbGluZQogICAgICAgICAgICAgICAgbmV4dCA6ICJkb2xsYXJTcWwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCRbXFx3XzAtOV0qXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiZG9sbGFyU3RhdGVtZW50U3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXS5jb25jYXQoc3FsUnVsZXMpLAoKICAgICAgICAiZG9sbGFyU3FsIiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi0tLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXCoiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50RG9sbGFyU3FsIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBlbmQgcXVvdGluZyB3aXRoIGRvbGxhciBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJeXFwkW1xcd18wLTldKlxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXRlbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcJFtcXHdfMC05XSpcXCQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJkb2xsYXJTcWxTdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLmNvbmNhdChzcWxSdWxlcyksCgogICAgICAgICJjb21tZW50IiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiLisiCiAgICAgICAgICAgIH0KICAgICAgICBdLAoKICAgICAgICAiY29tbWVudFN0YXRlbWVudCIgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhdGVtZW50IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY29tbWVudCBzcGFubmluZyB3aG9sZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICIuKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJjb21tZW50RG9sbGFyU3FsIiA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICIuKj9cXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJkb2xsYXJTcWwiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXSwKCiAgICAgICAgImRvbGxhclN0YXRlbWVudFN0cmluZyIgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gY2xvc2luZyBkb2xsYXJzdHJpbmcKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4qP1xcJFtcXHdfMC05XSpcXCQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGF0ZW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIGRvbGxhcnN0cmluZyBzcGFubmluZyB3aG9sZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICIuKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCgogICAgICAgICJkb2xsYXJTcWxTdHJpbmciIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIGNsb3NpbmcgZG9sbGFyc3RyaW5nCiAgICAgICAgICAgICAgICByZWdleCA6ICIuKj9cXCRbXFx3XzAtOV0qXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiZG9sbGFyU3FsIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBkb2xsYXJzdHJpbmcgc3Bhbm5pbmcgd2hvbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiLisiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKICAgIHRoaXMuZW1iZWRSdWxlcyhKc29uSGlnaGxpZ2h0UnVsZXMsICJqc29uLSIsIFt7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiXFwkanNvblxcJCIsIG5leHQgOiAic3RhdGVtZW50In1dKTsKfTsKCm9vcC5pbmhlcml0cyhSZWRzaGlmdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5SZWRzaGlmdEhpZ2hsaWdodFJ1bGVzID0gUmVkc2hpZnRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3JlZHNoaWZ0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvcmVkc2hpZnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi4vbW9kZS90ZXh0IikuTW9kZTsKdmFyIFJlZHNoaWZ0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3JlZHNoaWZ0X2hpZ2hsaWdodF9ydWxlcyIpLlJlZHNoaWZ0SGlnaGxpZ2h0UnVsZXM7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFJlZHNoaWZ0SGlnaGxpZ2h0UnVsZXM7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLS0iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsgCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gImtleXdvcmQuc3RhdGVtZW50RW5kIikgewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsgLy8gS2VlcCB3aGF0ZXZlciBpbmRlbnQgdGhlIHByZXZpb3VzIGxpbmUgaGFzCiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9yZWRzaGlmdCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3JlZHNoaWZ0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-rhtml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90ZXhfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBUZXhIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKHRleHRDbGFzcykgewoKICAgIGlmICghdGV4dENsYXNzKQogICAgICAgIHRleHRDbGFzcyA9ICJ0ZXh0IjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiUuKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogdGV4dENsYXNzLCAvLyBub24tY29tbWFuZAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXFskJiUjXFx7XFx9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpkb2N1bWVudGNsYXNzfHVzZXBhY2thZ2V8bmV3Y291bnRlcnxzZXRjb3VudGVyfGFkZHRvY291bnRlcnx2YWx1ZXxhcmFiaWN8c3RlcGNvdW50ZXJ8bmV3ZW52aXJvbm1lbnR8cmVuZXdlbnZpcm9ubWVudHxyZWZ8dnJlZnxlcXJlZnxwYWdlcmVmfGxhYmVsfGNpdGVbYS16QS1aXSp8dGFnfGJlZ2lufGVuZHxiaWJpdGVtKVxcYiIsCiAgICAgICAgICAgICAgIG5leHQgOiAibm9zcGVsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpbYS16QS1aMC05XSt8W15hLXpBLVowLTldKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5rZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiB0ZXh0Q2xhc3MsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibm9zcGVsbCIgOiBbCiAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiJS4qJCIsCiAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJub3NwZWxsLiIgKyB0ZXh0Q2xhc3MsIC8vIG5vbi1jb21tYW5kCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFxbJCYlI1xce1xcfV0iCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86ZG9jdW1lbnRjbGFzc3x1c2VwYWNrYWdlfG5ld2NvdW50ZXJ8c2V0Y291bnRlcnxhZGR0b2NvdW50ZXJ8dmFsdWV8YXJhYmljfHN0ZXBjb3VudGVyfG5ld2Vudmlyb25tZW50fHJlbmV3ZW52aXJvbm1lbnR8cmVmfHZyZWZ8ZXFyZWZ8cGFnZXJlZnxsYWJlbHxjaXRlW2EtekEtWl0qfHRhZ3xiZWdpbnxlbmR8YmliaXRlbSlcXGIiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86W2EtekEtWjAtOV0rfFteYS16QS1aMC05XSkiLAogICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pXSIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICByZWdleCA6ICJ9IiwKICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwuIiArIHRleHRDbGFzcywKICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwuIiArIHRleHRDbGFzcywKICAgICAgICAgICAgICAgcmVnZXggOiAiXFx3KyIKICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhUZXhIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuVGV4SGlnaGxpZ2h0UnVsZXMgPSBUZXhIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3JfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKQp7CgogICB2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwogICB2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CiAgIHZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwogICB2YXIgVGV4SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleF9oaWdobGlnaHRfcnVsZXMiKS5UZXhIaWdobGlnaHRSdWxlczsKCiAgIHZhciBSSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpCiAgIHsKCiAgICAgIHZhciBrZXl3b3JkcyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAgICAgKCJmdW5jdGlvbnxpZnxpbnxicmVha3xuZXh0fHJlcGVhdHxlbHNlfGZvcnxyZXR1cm58c3dpdGNofHdoaWxlfHRyeXx0cnlDYXRjaHxzdG9wfHdhcm5pbmd8cmVxdWlyZXxsaWJyYXJ5fGF0dGFjaHxkZXRhY2h8c291cmNlfHNldE1ldGhvZHxzZXRHZW5lcmljfHNldEdyb3VwR2VuZXJpY3xzZXRDbGFzcyIpCiAgICAgICAgICAgICAgICAgIC5zcGxpdCgifCIpCiAgICAgICAgICAgICk7CgogICAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAgICAgKCJOVUxMfE5BfFRSVUV8RkFMU0V8VHxGfEluZnxOYU58TkFfaW50ZWdlcl98TkFfcmVhbF98TkFfY2hhcmFjdGVyX3wiICsKICAgICAgICAgICAgICJOQV9jb21wbGV4XyIpLnNwbGl0KCJ8IikKICAgICAgICAgICAgKTsKCiAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuc2VjdGlvbmhlYWQiLAogICAgICAgICAgICAgICByZWdleCA6ICIjKyg/IScpLiooPzotLS0tfD09PT18IyMjIylcXHMqJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiIysnIiwKICAgICAgICAgICAgICAgbmV4dCA6ICJyZC1zdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiIy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICByZWdleCA6ICdbIl0nLAogICAgICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSIsCiAgICAgICAgICAgICAgIG5leHQgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rW0xpXT9cXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGV4cGxpY2l0IGludGVnZXIKICAgICAgICAgICAgICAgcmVnZXggOiAiXFxkK0xcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIG51bWJlcgogICAgICAgICAgICAgICByZWdleCA6ICJcXGQrKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQqKT9pP1xcYiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gbnVtYmVyIHdpdGggbGVhZGluZyBkZWNpbWFsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcLlxcZCsoPzpbZUVdWytcXC1dP1xcZCopP2k/XFxiIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICByZWdleCA6ICIoPzpUUlVFfEZBTFNFfFR8RilcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogImAuKj9gIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHNbdmFsdWVdKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICBlbHNlIGlmIChidWlsZGluQ29uc3RhbnRzW3ZhbHVlXSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudC5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICcuLi4nIHx8IHZhbHVlLm1hdGNoKC9eXC5cLlxkKyQvKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpZGVudGlmaWVyIjsKICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWi5dW2EtekEtWjAtOS5fXSpcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIiUlfD49fDw9fD09fCE9fFxcLT58PFxcLXxcXHxcXHx8JiZ8PXxcXCt8XFwtfFxcKnwvfFxcXnw+fDx8IXwmfFxcfHx+fFxcJHw6IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLCAvLyBpbmZpeCBvcGVyYXRvcnMKICAgICAgICAgICAgICAgcmVnZXggOiAiJS4qPyUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgcmVnZXggOiAnKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLAogICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJwogICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICByZWdleCA6ICIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsCiAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICAgXQogICAgICB9OwoKICAgICAgdmFyIHJkUnVsZXMgPSBuZXcgVGV4SGlnaGxpZ2h0UnVsZXMoImNvbW1lbnQiKS5nZXRSdWxlcygpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJkUnVsZXNbInN0YXJ0Il0ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgcmRSdWxlc1sic3RhcnQiXVtpXS50b2tlbiArPSAiLnZpcnR1YWwtY29tbWVudCI7CiAgICAgIH0KCiAgICAgIHRoaXMuYWRkUnVsZXMocmRSdWxlcywgInJkLSIpOwogICAgICB0aGlzLiRydWxlc1sicmQtc3RhcnQiXS51bnNoaWZ0KHsKICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICByZWdleDogIl4iLAogICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICB9KTsKICAgICAgdGhpcy4kcnVsZXNbInJkLXN0YXJ0Il0udW5zaGlmdCh7CiAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICByZWdleCA6ICJAKD8hQClbXiBdKiIKICAgICAgfSk7CiAgICAgIHRoaXMuJHJ1bGVzWyJyZC1zdGFydCJdLnVuc2hpZnQoewogICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgcmVnZXggOiAiQEAiCiAgICAgIH0pOwogICAgICB0aGlzLiRydWxlc1sicmQtc3RhcnQiXS5wdXNoKHsKICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgIHJlZ2V4IDogIlteJVxcXFxbKHtcXF0pfV0rIgogICAgICB9KTsKICAgfTsKCiAgIG9vcC5pbmhlcml0cyhSSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgogICBleHBvcnRzLlJIaWdobGlnaHRSdWxlcyA9IFJIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3JodG1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvcl9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgUkhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9yX2hpZ2hsaWdodF9ydWxlcyIpLlJIaWdobGlnaHRSdWxlczsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFJIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwoKICAgIHRoaXMuJHJ1bGVzWyJzdGFydCJdLnVuc2hpZnQoewogICAgICAgIHRva2VuOiAic3VwcG9ydC5mdW5jdGlvbi5jb2RlYmVnaW4iLAogICAgICAgIHJlZ2V4OiAiXjwiICsgIiEtLVxccypiZWdpbi5yY29kZVxccyooPzouKikiLAogICAgICAgIG5leHQ6ICJyLXN0YXJ0IgogICAgfSk7CgogICAgdGhpcy5lbWJlZFJ1bGVzKFJIaWdobGlnaHRSdWxlcywgInItIiwgW3sKICAgICAgICB0b2tlbjogInN1cHBvcnQuZnVuY3Rpb24uY29kZWVuZCIsCiAgICAgICAgcmVnZXg6ICJeXFxzKmVuZC5yY29kZVxccyotLT4iLAogICAgICAgIG5leHQ6ICJzdGFydCIKICAgIH1dLCBbInN0YXJ0Il0pOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKb29wLmluaGVyaXRzKFJIdG1sSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlJIdG1sSGlnaGxpZ2h0UnVsZXMgPSBSSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvcmh0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS9yaHRtbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBIdG1sTW9kZSA9IHJlcXVpcmUoIi4vaHRtbCIpLk1vZGU7Cgp2YXIgUkh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcmh0bWxfaGlnaGxpZ2h0X3J1bGVzIikuUkh0bWxIaWdobGlnaHRSdWxlczsKCnZhciBNb2RlID0gZnVuY3Rpb24oZG9jLCBzZXNzaW9uKSB7CiAgIEh0bWxNb2RlLmNhbGwodGhpcyk7CiAgIHRoaXMuJHNlc3Npb24gPSBzZXNzaW9uOwogICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUkh0bWxIaWdobGlnaHRSdWxlczsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgdGhpcy5pbnNlcnRDaHVua0luZm8gPSB7CiAgICAgIHZhbHVlOiAiPCEtLWJlZ2luLnJjb2RlXG5cbmVuZC5yY29kZS0tPlxuIiwKICAgICAgcG9zaXRpb246IHtyb3c6IDAsIGNvbHVtbjogMTV9CiAgIH07CiAgICAKICAgdGhpcy5nZXRMYW5ndWFnZU1vZGUgPSBmdW5jdGlvbihwb3NpdGlvbikKICAgewogICAgICByZXR1cm4gdGhpcy4kc2Vzc2lvbi5nZXRTdGF0ZShwb3NpdGlvbi5yb3cpLm1hdGNoKC9eci0vKSA/ICdSJyA6ICdIVE1MJzsKICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9yaHRtbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3JodG1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9yc3RfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBSU1RIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICB2YXIgdG9rZW5zID0gewogICAgdGl0bGU6ICJtYXJrdXAuaGVhZGluZyIsCiAgICBsaXN0OiAibWFya3VwLmhlYWRpbmciLAogICAgdGFibGU6ICJjb25zdGFudCIsCiAgICBkaXJlY3RpdmU6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgIGVudGl0eTogInN0cmluZyIsCiAgICBsaW5rOiAibWFya3VwLnVuZGVybGluZS5saXN0IiwKICAgIGJvbGQ6ICJtYXJrdXAuYm9sZCIsCiAgICBpdGFsaWM6ICJtYXJrdXAuaXRhbGljIiwKICAgIGxpdGVyYWw6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgIGNvbW1lbnQ6ICJjb21tZW50IgogIH07CgogIHZhciBzdGFydFN0cmluZ1ByZWZpeCA9ICIoXnxcXHN8W1wiJyg8XFxbe1xcLS86XSkiOwogIHZhciBlbmRTdHJpbmdTdWZmaXggPSAiKD86JHwoPz1cXHN8W1xcXFwuLDshP1xcLS86XCInKT5cXF19XSkpIjsKCiAgdGhpcy4kcnVsZXMgPSB7CiAgICAic3RhcnQiOiBbCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy50aXRsZSwKICAgICAgICByZWdleCA6ICIoXikoW1xcPVxcLWA6XFwuJ1wiflxcXl9cXCpcXCsjXSkoXFwyezIsfVxccyokKSIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgdG9rZW5zLmRpcmVjdGl2ZSwgdG9rZW5zLmxpdGVyYWxdLAogICAgICAgIHJlZ2V4IDogIiheXFxzKlxcLlxcLiApKFteOiBdKzo6KSguKiQpIiwKICAgICAgICBuZXh0ICA6ICJjb2RlYmxvY2siCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy5kaXJlY3RpdmUsCiAgICAgICAgcmVnZXggOiAiOjokIiwKICAgICAgICBuZXh0ICA6ICJjb2RlYmxvY2siCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6IFt0b2tlbnMuZW50aXR5LCB0b2tlbnMubGlua10sCiAgICAgICAgcmVnZXggOiAiKF5cXC5cXC4gX1teOl0rOikoLiokKSIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogW3Rva2Vucy5lbnRpdHksIHRva2Vucy5saW5rXSwKICAgICAgICByZWdleCA6ICIoXl9fICkoaHR0cHM/Oi8vLiokKSIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogdG9rZW5zLmVudGl0eSwKICAgICAgICByZWdleCA6ICJeXFwuXFwuIFxcW1teXFxdXStcXF0gIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMuY29tbWVudCwKICAgICAgICByZWdleCA6ICJeXFwuXFwuIC4qJCIsCiAgICAgICAgbmV4dCAgOiAiY29tbWVudCIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogdG9rZW5zLmxpc3QsCiAgICAgICAgcmVnZXggOiAiXlxccypbXFwqXFwrLV0gIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGlzdCwKICAgICAgICByZWdleCA6ICJeXFxzKig/OltBLVphLXpdfFswLTldK3xbaXZ4bGNkbUlWWExDRE1dKylcXC4gIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGlzdCwKICAgICAgICByZWdleCA6ICJeXFxzKlxcKD8oPzpbQS1aYS16XXxbMC05XSt8W2l2eGxjZG1JVlhMQ0RNXSspXFwpICIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogdG9rZW5zLnRhYmxlLAogICAgICAgIHJlZ2V4IDogIl49ezIsfSg/OiArPXsyLH0pKyQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy50YWJsZSwKICAgICAgICByZWdleCA6ICJeXFwrLXsyLH0oPzpcXCstezIsfSkrXFwrJCIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogdG9rZW5zLnRhYmxlLAogICAgICAgIHJlZ2V4IDogIl5cXCs9ezIsfSg/OlxcKz17Mix9KStcXCskIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiBbInRleHQiLCB0b2tlbnMubGl0ZXJhbF0sCiAgICAgICAgcmVnZXggOiBzdGFydFN0cmluZ1ByZWZpeCArICIoYGApKD89XFxTKSIsCiAgICAgICAgbmV4dCAgOiAiY29kZSIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgdG9rZW5zLmJvbGRdLAogICAgICAgIHJlZ2V4IDogc3RhcnRTdHJpbmdQcmVmaXggKyAiKFxcKlxcKikoPz1cXFMpIiwKICAgICAgICBuZXh0ICA6ICJib2xkIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiBbInRleHQiLCB0b2tlbnMuaXRhbGljXSwKICAgICAgICByZWdleCA6IHN0YXJ0U3RyaW5nUHJlZml4ICsgIihcXCopKD89XFxTKSIsCiAgICAgICAgbmV4dCAgOiAiaXRhbGljIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMuZW50aXR5LAogICAgICAgIHJlZ2V4IDogIlxcfFtcXHdcXC1dKz9cXHwiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy5lbnRpdHksCiAgICAgICAgcmVnZXggOiAiOltcXHctOl0rOmBcXFMiLAogICAgICAgIG5leHQgIDogImVudGl0eSIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgdG9rZW5zLmVudGl0eV0sCiAgICAgICAgcmVnZXggOiBzdGFydFN0cmluZ1ByZWZpeCArICIoX2ApKD89XFxTKSIsCiAgICAgICAgbmV4dCAgOiAiZW50aXR5IgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMuZW50aXR5LAogICAgICAgIHJlZ2V4IDogIl9bQS1aYS16MC05XFwtXSs/IgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiBbInRleHQiLCB0b2tlbnMubGlua10sCiAgICAgICAgcmVnZXggOiBzdGFydFN0cmluZ1ByZWZpeCArICIoYCkoPz1cXFMpIiwKICAgICAgICBuZXh0ICA6ICJsaW5rIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGluaywKICAgICAgICByZWdleCA6ICJbQS1aYS16MC05XFwtXSs/X18/IgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGluaywKICAgICAgICByZWdleCA6ICJcXFtbXlxcXV0rP1xcXV8iCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy5saW5rLAogICAgICAgIHJlZ2V4IDogImh0dHBzPzovL1xcUysiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy50YWJsZSwKICAgICAgICByZWdleCA6ICJcXHwiCiAgICAgIH0KICAgIF0sCiAgICAiY29kZWJsb2NrIjogWwogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGl0ZXJhbCwKICAgICAgICByZWdleCA6ICJeICsuKyQiLAogICAgICAgIG5leHQgOiAiY29kZWJsb2NrIgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGl0ZXJhbCwKICAgICAgICByZWdleCA6ICdeJCcsCiAgICAgICAgbmV4dDogImNvZGVibG9jayIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogImVtcHR5IiwKICAgICAgICByZWdleCA6ICIiLAogICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgIH0KICAgIF0sCiAgICAiY29kZSI6IFsKICAgICAgewogICAgICAgIHRva2VuIDogdG9rZW5zLmxpdGVyYWwsCiAgICAgICAgcmVnZXggOiAiXFxTYGAiICsgZW5kU3RyaW5nU3VmZml4LAogICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICB9LAogICAgICB7CiAgICAgICAgZGVmYXVsdFRva2VuOiB0b2tlbnMubGl0ZXJhbAogICAgICB9CiAgICBdLAogICAgImJvbGQiOiBbCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy5ib2xkLAogICAgICAgIHJlZ2V4IDogIlxcU1xcKlxcKiIgKyBlbmRTdHJpbmdTdWZmaXgsCiAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkZWZhdWx0VG9rZW46IHRva2Vucy5ib2xkCiAgICAgIH0KICAgIF0sCiAgICAiaXRhbGljIjogWwogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMuaXRhbGljLAogICAgICAgIHJlZ2V4IDogIlxcU1xcKiIgKyBlbmRTdHJpbmdTdWZmaXgsCiAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkZWZhdWx0VG9rZW46IHRva2Vucy5pdGFsaWMKICAgICAgfQogICAgXSwKICAgICJlbnRpdHkiOiBbCiAgICAgIHsKICAgICAgICB0b2tlbiA6IHRva2Vucy5lbnRpdHksCiAgICAgICAgcmVnZXggOiAiXFxTYCIgKyBlbmRTdHJpbmdTdWZmaXgsCiAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBkZWZhdWx0VG9rZW46IHRva2Vucy5lbnRpdHkKICAgICAgfQogICAgXSwKICAgICJsaW5rIjogWwogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMubGluaywKICAgICAgICByZWdleCA6ICJcXFNgX18/IiArIGVuZFN0cmluZ1N1ZmZpeCwKICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgfSwKICAgICAgewogICAgICAgIGRlZmF1bHRUb2tlbjogdG9rZW5zLmxpbmsKICAgICAgfQogICAgXSwKICAgICJjb21tZW50IjogWwogICAgICB7CiAgICAgICAgdG9rZW4gOiB0b2tlbnMuY29tbWVudCwKICAgICAgICByZWdleCA6ICJeICsuKyQiLAogICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgfSwKICAgICAgewogICAgICAgIHRva2VuIDogdG9rZW5zLmNvbW1lbnQsCiAgICAgICAgcmVnZXggOiAnXiQnLAogICAgICAgIG5leHQ6ICJjb21tZW50IgogICAgICB9LAogICAgICB7CiAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgIHJlZ2V4IDogIiIsCiAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgfQogICAgXQogIH07Cn07Cm9vcC5pbmhlcml0cyhSU1RIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuUlNUSGlnaGxpZ2h0UnVsZXMgPSBSU1RIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3JzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3JzdF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBSU1RIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vcnN0X2hpZ2hsaWdodF9ydWxlcyIpLlJTVEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBSU1RIaWdobGlnaHRSdWxlczsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMudHlwZSA9ICJ0ZXh0IjsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9yc3QiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcnN0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgY29uc3RhbnRPdGhlclN5bWJvbCA9IGV4cG9ydHMuY29uc3RhbnRPdGhlclN5bWJvbCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm90aGVyLnN5bWJvbC5ydWJ5IiwgLy8gc3ltYm9sCiAgICByZWdleCA6ICJbOl0oPzpbQS1aYS16X118W0AkXSg/PVthLXpBLVowLTlfXSkpW2EtekEtWjAtOV9dKlshPT9dPyIKfTsKCnZhciBxU3RyaW5nID0gZXhwb3J0cy5xU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCn07Cgp2YXIgcXFTdHJpbmcgPSBleHBvcnRzLnFxU3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCn07Cgp2YXIgdFN0cmluZyA9IGV4cG9ydHMudFN0cmluZyA9IHsKICAgIHRva2VuIDogInN0cmluZyIsIC8vIGJhY2t0aWNrIHN0cmluZwogICAgcmVnZXggOiAiW2BdKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1tgXSIKfTsKCnZhciBjb25zdGFudE51bWVyaWNIZXggPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0hleCA9IHsKICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgKICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0oPzpbMC05YS1mQS1GXXxfKD89WzAtOWEtZkEtRl0pKSpcXGIiCn07Cgp2YXIgY29uc3RhbnROdW1lcmljRmxvYXQgPSBleHBvcnRzLmNvbnN0YW50TnVtZXJpY0Zsb2F0ID0gewogICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICByZWdleCA6ICJbKy1dP1xcZCg/OlxcZHxfKD89XFxkKSkqKD86KD86XFwuXFxkKD86XFxkfF8oPz1cXGQpKSopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgp9OwoKdmFyIGluc3RhbmNlVmFyaWFibGUgPSBleHBvcnRzLmluc3RhbmNlVmFyaWFibGUgPSB7CiAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgp9OwoKdmFyIFJ1YnlIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhYm9ydHxBcnJheXxhc3NlcnR8YXNzZXJ0X2VxdWFsfGFzc2VydF9ub3RfZXF1YWx8YXNzZXJ0X3NhbWV8YXNzZXJ0X25vdF9zYW1lfCIgKwogICAgICAgICJhc3NlcnRfbmlsfGFzc2VydF9ub3RfbmlsfGFzc2VydF9tYXRjaHxhc3NlcnRfbm9fbWF0Y2h8YXNzZXJ0X2luX2RlbHRhfGFzc2VydF90aHJvd3N8IiArCiAgICAgICAgImFzc2VydF9yYWlzZXxhc3NlcnRfbm90aGluZ19yYWlzZWR8YXNzZXJ0X2luc3RhbmNlX29mfGFzc2VydF9raW5kX29mfGFzc2VydF9yZXNwb25kX3RvfCIgKwogICAgICAgICJhc3NlcnRfb3BlcmF0b3J8YXNzZXJ0X3NlbmR8YXNzZXJ0X2RpZmZlcmVuY2V8YXNzZXJ0X25vX2RpZmZlcmVuY2V8YXNzZXJ0X3JlY29nbml6ZXN8IiArCiAgICAgICAgImFzc2VydF9nZW5lcmF0ZXN8YXNzZXJ0X3Jlc3BvbnNlfGFzc2VydF9yZWRpcmVjdGVkX3RvfGFzc2VydF90ZW1wbGF0ZXxhc3NlcnRfc2VsZWN0fCIgKwogICAgICAgICJhc3NlcnRfc2VsZWN0X2VtYWlsfGFzc2VydF9zZWxlY3RfcmpzfGFzc2VydF9zZWxlY3RfZW5jb2RlZHxjc3Nfc2VsZWN0fGF0X2V4aXR8IiArCiAgICAgICAgImF0dHJ8YXR0cl93cml0ZXJ8YXR0cl9yZWFkZXJ8YXR0cl9hY2Nlc3NvcnxhdHRyX2FjY2Vzc2libGV8YXV0b2xvYWR8YmluZGluZ3xibG9ja19naXZlbj98Y2FsbGNjfCIgKwogICAgICAgICJjYWxsZXJ8Y2F0Y2h8Y2hvbXB8Y2hvbXAhfGNob3B8Y2hvcCF8ZGVmaW5lZD98ZGVsZXRlX3ZpYV9yZWRpcmVjdHxldmFsfGV4ZWN8ZXhpdHwiICsKICAgICAgICAiZXhpdCF8ZmFpbHxGbG9hdHxmbHVua3xmb2xsb3dfcmVkaXJlY3QhfGZvcmt8Zm9ybV9mb3J8Zm9ybV90YWd8Zm9ybWF0fGdldHN8Z2xvYmFsX3ZhcmlhYmxlc3xnc3VifCIgKwogICAgICAgICJnc3ViIXxnZXRfdmlhX3JlZGlyZWN0fGhvc3QhfGh0dHBzP3xodHRwcyF8aW5jbHVkZXxJbnRlZ2VyfGxhbWJkYXxsaW5rX3RvfCIgKwogICAgICAgICJsaW5rX3RvX3VubGVzc19jdXJyZW50fGxpbmtfdG9fZnVuY3Rpb258bGlua190b19yZW1vdGV8bG9hZHxsb2NhbF92YXJpYWJsZXN8bG9vcHxvcGVufG9wZW5fc2Vzc2lvbnwiICsKICAgICAgICAicHxwcmludHxwcmludGZ8cHJvY3xwdXRjfHB1dHN8cG9zdF92aWFfcmVkaXJlY3R8cHV0X3ZpYV9yZWRpcmVjdHxyYWlzZXxyYW5kfCIgKwogICAgICAgICJyYXd8cmVhZGxpbmV8cmVhZGxpbmVzfHJlZGlyZWN0P3xyZXF1ZXN0X3ZpYV9yZWRpcmVjdHxyZXF1aXJlfHNjYW58c2VsZWN0fCIgKwogICAgICAgICJzZXRfdHJhY2VfZnVuY3xzbGVlcHxzcGxpdHxzcHJpbnRmfHNyYW5kfFN0cmluZ3xzdHlsZXNoZWV0X2xpbmtfdGFnfHN5c2NhbGx8c3lzdGVtfHN1YnxzdWIhfHRlc3R8IiArCiAgICAgICAgInRocm93fHRyYWNlX3Zhcnx0cmFwfHVudHJhY2VfdmFyfGF0YW4yfGNvc3xleHB8ZnJleHB8bGRleHB8bG9nfGxvZzEwfHNpbnxzcXJ0fHRhbnwiICsKICAgICAgICAicmVuZGVyfGphdmFzY3JpcHRfaW5jbHVkZV90YWd8Y3NyZl9tZXRhX3RhZ3xsYWJlbF90YWd8dGV4dF9maWVsZF90YWd8c3VibWl0X3RhZ3xjaGVja19ib3hfdGFnfCIgKwogICAgICAgICJjb250ZW50X3RhZ3xyYWRpb19idXR0b25fdGFnfHRleHRfYXJlYV90YWd8cGFzc3dvcmRfZmllbGRfdGFnfGhpZGRlbl9maWVsZF90YWd8IiArCiAgICAgICAgImZpZWxkc19mb3J8c2VsZWN0X3RhZ3xvcHRpb25zX2Zvcl9zZWxlY3R8b3B0aW9uc19mcm9tX2NvbGxlY3Rpb25fZm9yX3NlbGVjdHxjb2xsZWN0aW9uX3NlbGVjdHwiICsKICAgICAgICAidGltZV96b25lX3NlbGVjdHxzZWxlY3RfZGF0ZXxzZWxlY3RfdGltZXxzZWxlY3RfZGF0ZXRpbWV8ZGF0ZV9zZWxlY3R8dGltZV9zZWxlY3R8ZGF0ZXRpbWVfc2VsZWN0fCIgKwogICAgICAgICJzZWxlY3RfeWVhcnxzZWxlY3RfbW9udGh8c2VsZWN0X2RheXxzZWxlY3RfaG91cnxzZWxlY3RfbWludXRlfHNlbGVjdF9zZWNvbmR8ZmlsZV9maWVsZF90YWd8IiArCiAgICAgICAgImZpbGVfZmllbGR8cmVzcG9uZF90b3xza2lwX2JlZm9yZV9maWx0ZXJ8YXJvdW5kX2ZpbHRlcnxhZnRlcl9maWx0ZXJ8dmVyaWZ5fCIgKwogICAgICAgICJwcm90ZWN0X2Zyb21fZm9yZ2VyeXxyZXNjdWVfZnJvbXxoZWxwZXJfbWV0aG9kfHJlZGlyZWN0X3RvfGJlZm9yZV9maWx0ZXJ8IiArCiAgICAgICAgInNlbmRfZGF0YXxzZW5kX2ZpbGV8dmFsaWRhdGVzX3ByZXNlbmNlX29mfHZhbGlkYXRlc191bmlxdWVuZXNzX29mfHZhbGlkYXRlc19sZW5ndGhfb2Z8IiArCiAgICAgICAgInZhbGlkYXRlc19mb3JtYXRfb2Z8dmFsaWRhdGVzX2FjY2VwdGFuY2Vfb2Z8dmFsaWRhdGVzX2Fzc29jaWF0ZWR8dmFsaWRhdGVzX2V4Y2x1c2lvbl9vZnwiICsKICAgICAgICAidmFsaWRhdGVzX2luY2x1c2lvbl9vZnx2YWxpZGF0ZXNfbnVtZXJpY2FsaXR5X29mfHZhbGlkYXRlc193aXRofHZhbGlkYXRlc19lYWNofCIgKwogICAgICAgICJhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfYmFzaWN8YXV0aGVudGljYXRlX29yX3JlcXVlc3Rfd2l0aF9odHRwX2RpZ2VzdHwiICsKICAgICAgICAiZmlsdGVyX3BhcmFtZXRlcl9sb2dnaW5nfG1hdGNofGdldHxwb3N0fHJlc291cmNlc3xyZWRpcmVjdHxzY29wZXxhc3NlcnRfcm91dGluZ3wiICsKICAgICAgICAidHJhbnNsYXRlfGxvY2FsaXplfGV4dHJhY3RfbG9jYWxlX2Zyb21fdGxkfGNhY2hlc19wYWdlfGV4cGlyZV9wYWdlfGNhY2hlc19hY3Rpb258ZXhwaXJlX2FjdGlvbnwiICsKICAgICAgICAiY2FjaGV8ZXhwaXJlX2ZyYWdtZW50fGV4cGlyZV9jYWNoZV9mb3J8b2JzZXJ2ZXxjYWNoZV9zd2VlcGVyfCIgKwogICAgICAgICJoYXNfbWFueXxoYXNfb25lfGJlbG9uZ3NfdG98aGFzX2FuZF9iZWxvbmdzX3RvX21hbnkiCiAgICApOwoKICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAiYWxpYXN8YW5kfEJFR0lOfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRlZmluZWR8ZG98ZWxzZXxlbHNpZnxFTkR8ZW5kfGVuc3VyZXwiICsKICAgICAgICAiX19GSUxFX198ZmluYWxseXxmb3J8Z2VtfGlmfGlufF9fTElORV9ffG1vZHVsZXxuZXh0fG5vdHxvcnxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8IiArCiAgICAgICAgInJlZG98cmVzY3VlfHJldHJ5fHJldHVybnxzdXBlcnx0aGVufHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgKICAgICAgICAidHJ1ZXxUUlVFfGZhbHNlfEZBTFNFfG5pbHxOSUx8QVJHRnxBUkdWfERBVEF8RU5WfFJVQllfUExBVEZPUk18UlVCWV9SRUxFQVNFX0RBVEV8IiArCiAgICAgICAgIlJVQllfVkVSU0lPTnxTVERFUlJ8U1RESU58U1RET1VUfFRPUExFVkVMX0JJTkRJTkciCiAgICApOwoKICAgIHZhciBidWlsdGluVmFyaWFibGVzID0gKAogICAgICAgICIkREVCVUd8JGRlZm91dHwkRklMRU5BTUV8JExPQURfUEFUSHwkU0FGRXwkc3RkaW58JHN0ZG91dHwkc3RkZXJyfCRWRVJCT1NFfCIgKwogICAgICAgICIkIXxyb290X3VybHxmbGFzaHxzZXNzaW9ufGNvb2tpZXN8cGFyYW1zfHJlcXVlc3R8cmVzcG9uc2V8bG9nZ2VyfHNlbGYiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy4ka2V5d29yZHMgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjogYnVpbGRpbkNvbnN0YW50cywKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiBidWlsdGluVmFyaWFibGVzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAiaW52YWxpZC5kZXByZWNhdGVkIjogImRlYnVnZ2VyIiAvLyBUT0RPIGlzIHRoaXMgYSByZW1uYW50IGZyb20ganMgbW9kZT8KICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJePWJlZ2luKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLmxwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5lbmQiOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbmV4dFN0YXRlOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8iLywKICAgICAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86W25zcnR2ZmJhZSciXFxdfGMufEMtLnxNLS4oPzpcXEMtLik/fFswLTddezN9fHhbXGRhLWZBLUZdezJ9fHVbXGRhLWZBLUZdezR9KS8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvI3svLAogICAgICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXCg/Oltuc3J0dmZiYWUnIlxcXXxjLnxDLS58TS0uKD86XFxDLS4pP3xbMC03XXszfXx4W1xkYS1mQS1GXXsyfXx1W1xkYS1mQS1GXXs0fSkvCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4uc3RhcnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyN7LywKICAgICAgICAgICAgICAgICAgICBwdXNoICA6ICJzdGFydCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLycvLAogICAgICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXFxbJ1xcXS8KICAgICAgICAgICAgICAgIH0sICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvJy8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH1dLAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIG5hbWVzcGFjZXMgYXJlbid0IHN5bWJvbHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjo6IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIGluc3RhbmNlIHZhcmlhYmxlCiAgICAgICAgICAgICAgICByZWdleCA6ICJAezEsMn1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmNsYXNzIiwgLy8gY2xhc3MgbmFtZQogICAgICAgICAgICAgICAgcmVnZXggOiAiW0EtWl1bYS16QS1aX1xcZF0rIgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY29uc3RhbnRPdGhlclN5bWJvbCwKICAgICAgICAgICAgY29uc3RhbnROdW1lcmljSGV4LAogICAgICAgICAgICBjb25zdGFudE51bWVyaWNGbG9hdCwKCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86dHJ1ZXxmYWxzZSlcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24uc2VwYXJhdG9yLmtleS12YWx1ZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI9PiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAiaGVyZWRvYyIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHZhbHVlWzJdID09ICctJyA/ICJpbmRlbnRlZEhlcmVkb2MiIDogImhlcmVkb2MiOwogICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbnMgPSB2YWx1ZS5zcGxpdCh0aGlzLnNwbGl0UmVnZXgpOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzNdKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToiY29uc3RhbnQiLCB2YWx1ZTogdG9rZW5zWzFdfSwKICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6InN0cmluZyIsIHZhbHVlOiB0b2tlbnNbMl19LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3VwcG9ydC5jbGFzcyIsIHZhbHVlOiB0b2tlbnNbM119LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s0XX0KICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8PC0/KShbJ1wiYF0/KShbXFx3XSspKFsnXCJgXT8pIiwKICAgICAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICAgICAgaGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogIGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICJeICsiCiAgICAgICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dCA6IGZ1bmN0aW9uKGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFN0YXRlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5jaGFyYWN0ZXIiLAogICAgICAgICAgICAgICByZWdleCA6ICJcXEJcXD8uIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl49ZW5kKD86JHxcXHMuKiQpIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoUnVieUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5SdWJ5SGlnaGxpZ2h0UnVsZXMgPSBSdWJ5SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3J1YnkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBSdWJ5SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIikuUnVieUhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBSdWJ5SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIHZhciBzdGFydGluZ0NsYXNzT3JNZXRob2QgPSBsaW5lLm1hdGNoKC9eXHMqKGNsYXNzfGRlZnxtb2R1bGUpXHMuKiQvKTsKICAgICAgICAgICAgdmFyIHN0YXJ0aW5nRG9CbG9jayA9IGxpbmUubWF0Y2goLy4qZG8oXHMqfFxzK1x8LipcfFxzKikkLyk7CiAgICAgICAgICAgIHZhciBzdGFydGluZ0NvbmRpdGlvbmFsID0gbGluZS5tYXRjaCgvXlxzKihpZnxlbHNlfHdoZW4pXHMqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCB8fCBzdGFydGluZ0NsYXNzT3JNZXRob2QgfHwgc3RhcnRpbmdEb0Jsb2NrIHx8IHN0YXJ0aW5nQ29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIC9eXHMrKGVuZHxlbHNlKSQvLnRlc3QobGluZSArIGlucHV0KSB8fCB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICBpZiAoL30vLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KHNlc3Npb24sIHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgcHJldkxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQocHJldkxpbmUpOwogICAgICAgIHZhciB0YWIgPSBzZXNzaW9uLmdldFRhYlN0cmluZygpOwogICAgICAgIGlmIChwcmV2SW5kZW50Lmxlbmd0aCA8PSBpbmRlbnQubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQuc2xpY2UoLXRhYi5sZW5ndGgpID09IHRhYikKICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKG5ldyBSYW5nZShyb3csIGluZGVudC5sZW5ndGgtdGFiLmxlbmd0aCwgcm93LCBpbmRlbnQubGVuZ3RoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9ydWJ5IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvcnVieSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-rust.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9ydXN0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIHN0cmluZ0VzY2FwZSA9IC9cXCg/OltucnQwJyJcXF18eFtcZGEtZkEtRl17Mn18dVx7W1xkYS1mQS1GXXs2fVx9KS8uc291cmNlOwp2YXIgUnVzdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7IHN0YXJ0OgogICAgICAgWyB7IHRva2VuOiAndmFyaWFibGUub3RoZXIuc291cmNlLnJ1c3QnLAogICAgICAgICAgIHJlZ2V4OiAnXCdbYS16QS1aX11bYS16QS1aMC05X10qKD8hW1xcXCddKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3N0cmluZy5xdW90ZWQuc2luZ2xlLnNvdXJjZS5ydXN0JywKICAgICAgICAgICByZWdleDogIicoPzpbXidcXFxcXXwiICsgc3RyaW5nRXNjYXBlICsgIiknIiB9LAogICAgICAgICB7IHRva2VuOiAnaWRlbnRpZmllcicsCiAgICAgICAgICAgcmVnZXg6ICAvciNbYS16QS1aX11bYS16QS1aMC05X10qXGIvIH0sCiAgICAgICAgIHsKICAgICAgICAgICAgc3RhdGVOYW1lOiAiYnJhY2tldGVkQ29tbWVudCIsCiAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjayl7CiAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdmFsdWUubGVuZ3RoIC0gMSwgY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nLnF1b3RlZC5yYXcuc291cmNlLnJ1c3QiOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleCA6IC9yIyoiLywKICAgICAgICAgICAgbmV4dCAgOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9ICJzdHJpbmcucXVvdGVkLnJhdy5zb3VyY2UucnVzdCI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiBzdGFja1sxXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICJpbnZhbGlkIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIjKi8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZy5xdW90ZWQucmF3LnNvdXJjZS5ydXN0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5zb3VyY2UucnVzdCcsCiAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuc291cmNlLnJ1c3QnLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuc291cmNlLnJ1c3QnLAogICAgICAgICAgICAgICAgcmVnZXg6IHN0cmluZ0VzY2FwZSB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5kb3VibGUuc291cmNlLnJ1c3QnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiBbICdrZXl3b3JkLnNvdXJjZS5ydXN0JywgJ3RleHQnLCAnZW50aXR5Lm5hbWUuZnVuY3Rpb24uc291cmNlLnJ1c3QnIF0sCiAgICAgICAgICAgcmVnZXg6ICdcXGIoZm4pKFxccyspKCg/OnIjKT9bYS16QS1aX11bYS16QS1aMC05X10qKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuY29uc3RhbnQnLCByZWdleDogJ1xcYlthLXpBLVpfXVtcXHdcXGRdKjo6JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5zb3VyY2UucnVzdCcsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzphYnN0cmFjdHxhbGlnbm9mfGFzfGJlY29tZXxib3h8YnJlYWt8Y2F0Y2h8Y29udGludWV8Y29uc3R8Y3JhdGV8ZGVmYXVsdHxkb3xkeW58ZWxzZXxlbnVtfGV4dGVybnxmb3J8ZmluYWx8aWZ8aW1wbHxpbnxsZXR8bG9vcHxtYWNyb3xtYXRjaHxtb2R8bW92ZXxtdXR8b2Zmc2V0b2Z8b3ZlcnJpZGV8cHJpdnxwcm9jfHB1YnxwdXJlfHJlZnxyZXR1cm58c2VsZnxzaXplb2Z8c3RhdGljfHN0cnVjdHxzdXBlcnx0cmFpdHx0eXBlfHR5cGVvZnx1bmlvbnx1bnNhZmV8dW5zaXplZHx1c2V8dmlydHVhbHx3aGVyZXx3aGlsZXx5aWVsZClcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUuc291cmNlLnJ1c3QnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86U2VsZnxpc2l6ZXx1c2l6ZXxjaGFyfGJvb2x8dTh8dTE2fHUzMnx1NjR8dTEyOHxmMTZ8ZjMyfGY2NHxpOHxpMTZ8aTMyfGk2NHxpMTI4fHN0cnxvcHRpb258ZWl0aGVyfGNfZmxvYXR8Y19kb3VibGV8Y192b2lkfEZJTEV8ZnBvc190fERJUnxkaXJlbnR8Y19jaGFyfGNfc2NoYXJ8Y191Y2hhcnxjX3Nob3J0fGNfdXNob3J0fGNfaW50fGNfdWludHxjX2xvbmd8Y191bG9uZ3xzaXplX3R8cHRyZGlmZl90fGNsb2NrX3R8dGltZV90fGNfbG9uZ2xvbmd8Y191bG9uZ2xvbmd8aW50cHRyX3R8dWludHB0cl90fG9mZl90fGRldl90fGlub190fHBpZF90fG1vZGVfdHxzc2l6ZV90KVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3ZhcmlhYmxlLmxhbmd1YWdlLnNvdXJjZS5ydXN0JywgcmVnZXg6ICdcXGJzZWxmXFxiJyB9LAogICAgICAgICAKICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQubGluZS5kb2Muc291cmNlLnJ1c3QnLAogICAgICAgICAgIHJlZ2V4OiAnLy8hLiokJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5saW5lLmRvdWJsZS1kYXNoLnNvdXJjZS5ydXN0JywKICAgICAgICAgICByZWdleDogJy8vLiokJyB9LAogICAgICAgICB7IHRva2VuOiAnY29tbWVudC5zdGFydC5ibG9jay5zb3VyY2UucnVzdCcsCiAgICAgICAgICAgcmVnZXg6ICcvXFwqJywKICAgICAgICAgICBzdGF0ZU5hbWU6ICdjb21tZW50JywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAnY29tbWVudC5zdGFydC5ibG9jay5zb3VyY2UucnVzdCcsCiAgICAgICAgICAgICAgICByZWdleDogJy9cXConLAogICAgICAgICAgICAgICAgcHVzaDogJ2NvbW1lbnQnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbW1lbnQuZW5kLmJsb2NrLnNvdXJjZS5ydXN0JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwqLycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay5zb3VyY2UucnVzdCcgfSBdIH0sCiAgICAgICAgIAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicsCiAgICAgICAgICAgcmVnZXg6IC9cJHxbLT1dPnxbLSslXj0hJnw8Pl09P3xbKi9dKD8hWyovXSk9Py8gfSwKICAgICAgICAgeyB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsIHJlZ2V4IDogL1s/Oiw7Ll0vIH0sCiAgICAgICAgIHsgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwgcmVnZXggOiAvW1xbKHtdLyB9LAogICAgICAgICB7IHRva2VuIDogInBhcmVuLnJwYXJlbiIsIHJlZ2V4IDogL1tcXSl9XS8gfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLnNvdXJjZS5ydXN0JywKICAgICAgICAgICByZWdleDogJ1xcYig/OnRydWV8ZmFsc2V8U29tZXxOb25lfE9rfEVycilcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdXBwb3J0LmNvbnN0YW50LnNvdXJjZS5ydXN0JywKICAgICAgICAgICByZWdleDogJ1xcYig/OkVYSVRfRkFJTFVSRXxFWElUX1NVQ0NFU1N8UkFORF9NQVh8RU9GfFNFRUtfU0VUfFNFRUtfQ1VSfFNFRUtfRU5EfF9JT0ZCRnxfSU9OQkZ8X0lPTEJGfEJVRlNJWnxGT1BFTl9NQVh8RklMRU5BTUVfTUFYfExfdG1wbmFtfFRNUF9NQVh8T19SRE9OTFl8T19XUk9OTFl8T19SRFdSfE9fQVBQRU5EfE9fQ1JFQVR8T19FWENMfE9fVFJVTkN8U19JRklGT3xTX0lGQ0hSfFNfSUZCTEt8U19JRkRJUnxTX0lGUkVHfFNfSUZNVHxTX0lFWEVDfFNfSVdSSVRFfFNfSVJFQUR8U19JUldYVXxTX0lYVVNSfFNfSVdVU1J8U19JUlVTUnxGX09LfFJfT0t8V19PS3xYX09LfFNURElOX0ZJTEVOT3xTVERPVVRfRklMRU5PfFNUREVSUl9GSUxFTk8pXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnbWV0YS5wcmVwcm9jZXNzb3Iuc291cmNlLnJ1c3QnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiXFx3XFwoXFx3XFwpKiF8I1xcW1tcXHc9XFwoXFwpX10rXFxdXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQubnVtZXJpYy5zb3VyY2UucnVzdCcsCiAgICAgICAgICAgcmVnZXg6IC9cYig/OjB4W2EtZkEtRjAtOV9dK3wwb1swLTdfXSt8MGJbMDFfXSt8WzAtOV1bMC05X10qKD8hXC4pKSg/OltpdV0oPzpzaXplfDh8MTZ8MzJ8NjR8MTI4KSk/XGIvIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5udW1lcmljLnNvdXJjZS5ydXN0JywKICAgICAgICAgICByZWdleDogL1xiKD86WzAtOV1bMC05X10qKSg/OlwuWzAtOV1bMC05X10qKT8oPzpbRWVdWystXVswLTldWzAtOV9dKik/KD86ZjMyfGY2NCk/XGIvIH0gXSB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpSdXN0SGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7IGZpbGVUeXBlczogWyAncnMnLCAncmMnIF0sCiAgICAgIGZvbGRpbmdTdGFydE1hcmtlcjogJ14uKlxcYmZuXFxzKihcXHcrXFxzKik/XFwoW15cXCldKlxcKShcXHMqXFx7W15cXH1dKik/XFxzKiQnLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJ15cXHMqXFx9JywKICAgICAgbmFtZTogJ1J1c3QnLAogICAgICBzY29wZU5hbWU6ICdzb3VyY2UucnVzdCcgfTsKCgpvb3AuaW5oZXJpdHMoUnVzdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5SdXN0SGlnaGxpZ2h0UnVsZXMgPSBSdXN0SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvcnVzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3J1c3RfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBSdXN0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3J1c3RfaGlnaGxpZ2h0X3J1bGVzIikuUnVzdEhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFJ1c3RIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyIsIG5lc3RhYmxlOiB0cnVlfTsKICAgIHRoaXMuJHF1b3RlcyA9IHsgJyInOiAnIicgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3J1c3QiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9ydXN0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-sass.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpOwoKdmFyIFNjc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgcHJvcGVydGllcyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0VHlwZS5zcGxpdCgifCIpKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiaHNsfGhzbGF8cmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVyc3xhYnN8YWRqdXN0X2NvbG9yfGFkanVzdF9odWV8IiArCiAgICAgICAgICJhbHBoYXxqb2lufGJsdWV8Y2VpbHxjaGFuZ2VfY29sb3J8Y29tcGFyYWJsZXxjb21wbGVtZW50fGRhcmtlbnxkZXNhdHVyYXRlfCIgKyAKICAgICAgICAgImZsb29yfGdyYXlzY2FsZXxncmVlbnxodWV8aWZ8aW52ZXJ0fGpvaW58bGVuZ3RofGxpZ2h0ZW58bGlnaHRuZXNzfG1peHwiICsgCiAgICAgICAgICJudGh8b3BhY2lmeXxvcGFjaXR5fHBlcmNlbnRhZ2V8cXVvdGV8cmVkfHJvdW5kfHNhdHVyYXRlfHNhdHVyYXRpb258IiArCiAgICAgICAgICJzY2FsZV9jb2xvcnx0cmFuc3BhcmVudGl6ZXx0eXBlX29mfHVuaXR8dW5pdGxlc3N8dW5xdW90ZSIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIGNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnQuc3BsaXQoInwiKSk7CgogICAgdmFyIGNvbG9ycyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnRDb2xvci5zcGxpdCgifCIpKTsKICAgIAogICAgdmFyIGtleXdvcmRzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiQG1peGlufEBleHRlbmR8QGluY2x1ZGV8QGltcG9ydHxAbWVkaWF8QGRlYnVnfEB3YXJufEBpZnxAZm9yfEBlYWNofEB3aGlsZXxAZWxzZXxAZm9udC1mYWNlfEAtd2Via2l0LWtleWZyYW1lc3xpZnxhbmR8IWRlZmF1bHR8bW9kdWxlfGRlZnxlbmR8ZGVjbGFyZSIpLnNwbGl0KCJ8IikKICAgICk7CiAgICAKICAgIHZhciB0YWdzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiYXxhYmJyfGFjcm9ueW18YWRkcmVzc3xhcHBsZXR8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiYXNlZm9udHxiZG98IiArIAogICAgICAgICAiYmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2VudGVyfGNpdGV8Y29kZXxjb2x8Y29sZ3JvdXB8IiArIAogICAgICAgICAiY29tbWFuZHxkYXRhbGlzdHxkZHxkZWx8ZGV0YWlsc3xkZm58ZGlyfGRpdnxkbHxkdHxlbXxlbWJlZHxmaWVsZHNldHwiICsgCiAgICAgICAgICJmaWdjYXB0aW9ufGZpZ3VyZXxmb250fGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGhlYWR8IiArIAogICAgICAgICAiaGVhZGVyfGhncm91cHxocnxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2V5Z2VufGtiZHxsYWJlbHxsZWdlbmR8bGl8IiArIAogICAgICAgICAibGlua3xtYXB8bWFya3xtZW51fG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHwiICsgCiAgICAgICAgICJvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzfHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fCIgKyAKICAgICAgICAgInNtYWxsfHNvdXJjZXxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1bW1hcnl8c3VwfHRhYmxlfHRib2R5fHRkfCIgKyAKICAgICAgICAgInRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dGl0bGV8dHJ8dHR8dXx1bHx2YXJ8dmlkZW98d2JyfHhtcCIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIG51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0uKlxcXFwkJywKICAgICAgICAgICAgICAgIG5leHQgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddLipcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgcmVnZXggOiBudW1SZSArICIoPzpjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuZnVuY3Rpb24iLCAic3RyaW5nIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih1cmxcXCgpKC4qKShcXCkpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC50eXBlIjsKICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5mdW5jdGlvbiI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sb3JzLmhhc093blByb3BlcnR5KHZhbHVlLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhZ3MuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0IjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC0/W0BhLXpfXVtAYS16MC05X1xcLV0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16X1xcLSRdW2EtejAtOV9cXC0kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjx8Pnw8PXw+PXw9PXwhPXwtfCV8I3xcXCt8XFwkfFxcK3xcXCoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKFNjc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2Nzc0hpZ2hsaWdodFJ1bGVzID0gU2Nzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Nhc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9zY3NzX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgU2Nzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zY3NzX2hpZ2hsaWdodF9ydWxlcyIpLlNjc3NIaWdobGlnaHRSdWxlczsKCnZhciBTYXNzSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFNjc3NIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwogICAgdmFyIHN0YXJ0ID0gdGhpcy4kcnVsZXMuc3RhcnQ7CiAgICBpZiAoc3RhcnRbMV0udG9rZW4gPT0gImNvbW1lbnQiKSB7CiAgICAgICAgc3RhcnQuc3BsaWNlKDEsIDEsIHsKICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0LCAtMSwgdmFsdWUubGVuZ3RoIC0gMiwgY3VycmVudFN0YXRlKTsKICAgICAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4OiAvXlxzKlwvXCovLAogICAgICAgICAgICBuZXh0OiAiY29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAiZXJyb3IuaW52YWxpZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiL1xcKnxbezt9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC50eXBlIiwKICAgICAgICAgICAgcmVnZXg6IC9eXHMqOltcd1wtXStccy8KICAgICAgICB9KTsKICAgICAgICAKICAgICAgICB0aGlzLiRydWxlcy5jb21tZW50ID0gWwogICAgICAgICAgICB7cmVnZXg6IC9eXHMqLywgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIGlmIChzdGFja1sxXSA9PT0gLTEpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0gPSBNYXRoLm1heChzdGFja1syXSwgdmFsdWUubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDw9IHN0YWNrWzFdKSB7c3RhY2suc2hpZnQoKTtzdGFjay5zaGlmdCgpO3N0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gInRleHQiOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogImNvbW1lbnQifQogICAgICAgIF07CiAgICB9Cn07Cgpvb3AuaW5oZXJpdHMoU2Fzc0hpZ2hsaWdodFJ1bGVzLCBTY3NzSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5TYXNzSGlnaGxpZ2h0UnVsZXMgPSBTYXNzSGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CgogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBsZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKCiAgICAgICAgICAgIGlmIChsZXZlbCA9PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKGxpbmVbbGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KCiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHZhciBlbmRDb2x1bW4gPSBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGg7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHQgPSBzZXNzaW9uLmdldExpbmUocm93ICsgMSk7CiAgICAgICAgdmFyIHByZXYgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSBwcmV2LnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dEluZGVudCA9IG5leHQuc2VhcmNoKC9cUy8pOwoKICAgICAgICBpZiAoaW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSBwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IG5leHRJbmRlbnQgPyAic3RhcnQiIDogIiI7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgaWYgKHByZXZJbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGluZGVudCA9PSBuZXh0SW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHByZXZJbmRlbnQgPT0gaW5kZW50ICYmIGxpbmVbaW5kZW50XSA9PSAiIyIgJiYgcHJldltpbmRlbnRdID09ICIjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2FzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3Nhc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTYXNzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Nhc3NfaGlnaGxpZ2h0X3J1bGVzIikuU2Fzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFNhc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgeyAgIAogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Nhc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc2FzcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-scad.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zY2FkX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBzY2FkSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOiAidGhpcyIsCiAgICAgICAgImtleXdvcmQiOiAibW9kdWxlfGlmfGVsc2V8Zm9yIiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiAiTlVMTCIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoInN0YXJ0IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAnWyJdLipcXFxcJCcsCiAgICAgICAgICAgICAgICBuZXh0IDogInFxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gbXVsdGkgbGluZSBzdHJpbmcgc3RhcnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXS4qXFxcXCQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50IiwgLy8gPENPTlNUQU5UPgogICAgICAgICAgICAgIHJlZ2V4IDogIjxbYS16QS1aMC05Ll0rPiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLCAvLyBwcmUtY29tcGlsZXIgZGlyZWN0aXZzCiAgICAgICAgICAgICAgcmVnZXggOiAiKD86dXNlfGluY2x1ZGUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PXw9fCE9fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58bmV3fGRlbGV0ZXx0eXBlb2Z8dm9pZCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1lbnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcoPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/IicsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj8nIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcuKycKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICAKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJzdGFydCIpIF0pOwp9OwoKb29wLmluaGVyaXRzKHNjYWRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuc2NhZEhpZ2hsaWdodFJ1bGVzID0gc2NhZEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2NhZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3NjYWRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIHNjYWRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc2NhZF9oaWdobGlnaHRfcnVsZXMiKS5zY2FkSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IHNjYWRIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3NjYWQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9zY2FkIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-scala.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zY2FsYV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFNjYWxhSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgICAgICJjYXNlfGRlZmF1bHR8ZG98ZWxzZXxmb3J8aWZ8bWF0Y2h8d2hpbGV8dGhyb3d8cmV0dXJufHRyeXx0cnllfGNhdGNofGZpbmFsbHl8eWllbGR8IiArCiAgICAgICAgICAgICJhYnN0cmFjdHxjbGFzc3xkZWZ8ZXh0ZW5kc3xmaW5hbHxmb3JTb21lfGltcGxpY2l0fGltcGxpY2l0c3xpbXBvcnR8bGF6eXxuZXd8b2JqZWN0fG51bGx8IiArCiAgICAgICAgICAgICJvdmVycmlkZXxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHNlYWxlZHxzdXBlcnx0aGlzfHRyYWl0fHR5cGV8dmFsfHZhcnx3aXRofCIgKwogICAgICAgICAgICAiYXNzZXJ0fGFzc3VtZXxyZXF1aXJlfHByaW50fHByaW50bG58cHJpbnRmfHJlYWRMaW5lfHJlYWRCb29sZWFufHJlYWRCeXRlfHJlYWRTaG9ydHwiICsgLy8gcGFja2FnZSBzY2FsYQogICAgICAgICAgICAicmVhZENoYXJ8cmVhZEludHxyZWFkTG9uZ3xyZWFkRmxvYXR8cmVhZERvdWJsZSIgLy8gcGFja2FnZSBzY2FsYQogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgidHJ1ZXxmYWxzZSIpOwoKICAgIHZhciBsYW5nQ2xhc3NlcyA9ICgKICAgICAgICAiQWJzdHJhY3RNZXRob2RFcnJvcnxBc3NlcnRpb25FcnJvcnxDbGFzc0NpcmN1bGFyaXR5RXJyb3J8IisKICAgICAgICAiQ2xhc3NGb3JtYXRFcnJvcnxEZXByZWNhdGVkfEVudW1Db25zdGFudE5vdFByZXNlbnRFeGNlcHRpb258IisKICAgICAgICAiRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yfElsbGVnYWxBY2Nlc3NFcnJvcnwiKwogICAgICAgICJJbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb258SW5zdGFudGlhdGlvbkVycm9yfEludGVybmFsRXJyb3J8IisKCiAgICAgICAgIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9ufE5vU3VjaEZpZWxkRXJyb3J8T3ZlcnJpZGV8UHJvY2Vzc3wiKwogICAgICAgICJQcm9jZXNzQnVpbGRlcnxTZWN1cml0eU1hbmFnZXJ8U3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnwiKwogICAgICAgICJTdXBwcmVzc1dhcm5pbmdzfFR5cGVOb3RQcmVzZW50RXhjZXB0aW9ufFVua25vd25FcnJvcnwiKwogICAgICAgICJVbnNhdGlzZmllZExpbmtFcnJvcnxVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yfFZlcmlmeUVycm9yfCIrCiAgICAgICAgIkluc3RhbnRpYXRpb25FeGNlcHRpb258SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbnwiKwogICAgICAgICJBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb258Q2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb258IisKICAgICAgICAiTm9TdWNoRmllbGRFeGNlcHRpb258SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9ufE51bWJlckZvcm1hdEV4Y2VwdGlvbnwiKwogICAgICAgICJTZWN1cml0eUV4Y2VwdGlvbnxWb2lkfEluaGVyaXRhYmxlVGhyZWFkTG9jYWx8SWxsZWdhbFN0YXRlRXhjZXB0aW9ufCIrCiAgICAgICAgIkludGVycnVwdGVkRXhjZXB0aW9ufE5vU3VjaE1ldGhvZEV4Y2VwdGlvbnxJbGxlZ2FsQWNjZXNzRXhjZXB0aW9ufCIrCiAgICAgICAgIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufEVudW18U3RyaWN0TWF0aHxQYWNrYWdlfENvbXBpbGVyfCIrCiAgICAgICAgIlJlYWRhYmxlfFJ1bnRpbWV8U3RyaW5nQnVpbGRlcnxNYXRofEluY29tcGF0aWJsZUNsYXNzQ2hhbmdlRXJyb3J8IisKICAgICAgICAiTm9TdWNoTWV0aG9kRXJyb3J8VGhyZWFkTG9jYWx8UnVudGltZVBlcm1pc3Npb258QXJpdGhtZXRpY0V4Y2VwdGlvbnwiKwogICAgICAgICJOdWxsUG9pbnRlckV4Y2VwdGlvbnxMb25nfEludGVnZXJ8U2hvcnR8Qnl0ZXxEb3VibGV8TnVtYmVyfEZsb2F0fCIrCiAgICAgICAgIkNoYXJhY3RlcnxCb29sZWFufFN0YWNrVHJhY2VFbGVtZW50fEFwcGVuZGFibGV8U3RyaW5nQnVmZmVyfCIrCiAgICAgICAgIkl0ZXJhYmxlfFRocmVhZEdyb3VwfFJ1bm5hYmxlfFRocmVhZHxJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufCIrCiAgICAgICAgIlN0YWNrT3ZlcmZsb3dFcnJvcnxPdXRPZk1lbW9yeUVycm9yfFZpcnR1YWxNYWNoaW5lRXJyb3J8IisKICAgICAgICAiQXJyYXlTdG9yZUV4Y2VwdGlvbnxDbGFzc0Nhc3RFeGNlcHRpb258TGlua2FnZUVycm9yfCIrCiAgICAgICAgIk5vQ2xhc3NEZWZGb3VuZEVycm9yfENsYXNzTm90Rm91bmRFeGNlcHRpb258UnVudGltZUV4Y2VwdGlvbnwiKwogICAgICAgICJFeGNlcHRpb258VGhyZWFkRGVhdGh8RXJyb3J8VGhyb3dhYmxlfFN5c3RlbXxDbGFzc0xvYWRlcnwiKwogICAgICAgICJDbG9uZWFibGV8Q2xhc3N8Q2hhclNlcXVlbmNlfENvbXBhcmFibGV8U3RyaW5nfE9iamVjdHwiICsKICAgICAgICAiVW5pdHxBbnl8QW55VmFsfEFueVJlZnxOdWxsfFNjYWxhT2JqZWN0fFNpbmdsZXRvbnxTZXF8SXRlcmFibGV8TGlzdHwiICsKICAgICAgICAiT3B0aW9ufEFycmF5fENoYXJ8Qnl0ZXxJbnR8TG9uZ3xOb3RoaW5nfCIgKwoKICAgICAgICAiQXBwfEFwcGxpY2F0aW9ufEJ1ZmZlcmVkSXRlcmF0b3J8QmlnRGVjaW1hbHxCaWdJbnR8Q29uc29sZXxFaXRoZXJ8IiArCiAgICAgICAgIkVudW1lcmF0aW9ufEVxdWl2fEZyYWN0aW9uYWx8RnVuY3Rpb258SW5kZXhlZFNlcXxJbnRlZ3JhbHxJdGVyYXRvcnwiICsKICAgICAgICAiTWFwfE51bWVyaWN8TmlsfE5vdE51bGx8T3JkZXJlZHxPcmRlcmluZ3xQYXJ0aWFsRnVuY3Rpb258UGFydGlhbE9yZGVyaW5nfCIgKwogICAgICAgICJQcm9kdWN0fFByb3h5fFJhbmdlfFJlc3BvbmRlcnxTZXF8U2VyaWFsaXphYmxlfFNldHxTcGVjaWFsaXphYmxlfFN0cmVhbXwiICsKICAgICAgICAiU3RyaW5nQ29udGV4dHxTeW1ib2x8VHJhdmVyc2FibGV8VHJhdmVyc2FibGVPbmNlfFR1cGxlfFZlY3RvcnxQYWlyfFRyaXBsZSIKCgogICAgKTsKCiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogInRoaXMiLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBsYW5nQ2xhc3NlcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsZGluQ29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvLiokIgogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIiIiJywKICAgICAgICAgICAgICAgIG5leHQgOiAidHN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsIC8vICIgc3RyaW5ncyBjYW4ndCBzcGFuIG11bHRpcGxlIGxpbmVzCiAgICAgICAgICAgICAgICBuZXh0IDogInN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3ltYm9sLmNvbnN0YW50IiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIidbXFx3XFxkX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18XFxiKD86aW58aW5zdGFuY2VvZnxuZXd8ZGVsZXRlfHR5cGVvZnx2b2lkKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29tbWVudCIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdcXFxcIicKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnW14iXFxcXF0qJCcsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnW14iXFxcXF0rJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAidHN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciezMsNX0nLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7Cn07Cgpvb3AuaW5oZXJpdHMoU2NhbGFIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2NhbGFIaWdobGlnaHRSdWxlcyA9IFNjYWxhSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zY2FsYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL3NjYWxhX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEphdmFTY3JpcHRNb2RlID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0IikuTW9kZTsKdmFyIFNjYWxhSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3NjYWxhX2hpZ2hsaWdodF9ydWxlcyIpLlNjYWxhSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgSmF2YVNjcmlwdE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTY2FsYUhpZ2hsaWdodFJ1bGVzOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgSmF2YVNjcmlwdE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zY2FsYSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3NjYWxhIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-scheme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zY2hlbWVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU2NoZW1lSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkQ29udHJvbCA9ICJjYXNlfGRvfGxldHxsb29wfGlmfGVsc2V8d2hlbiI7CiAgICB2YXIga2V5d29yZE9wZXJhdG9yID0gImVxP3xlcXY/fGVxdWFsP3xhbmR8b3J8bm90fG51bGw/IjsKICAgIHZhciBjb25zdGFudExhbmd1YWdlID0gIiN0fCNmIjsKICAgIHZhciBzdXBwb3J0RnVuY3Rpb25zID0gImNvbnN8Y2FyfGNkcnxjb25kfGxhbWJkYXxsYW1iZGEqfHN5bnRheC1ydWxlc3xmb3JtYXR8c2V0IXxxdW90ZXxldmFsfGFwcGVuZHxsaXN0fGxpc3Q/fG1lbWJlcj98bG9hZCI7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkLmNvbnRyb2wiOiBrZXl3b3JkQ29udHJvbCwKICAgICAgICAia2V5d29yZC5vcGVyYXRvciI6IGtleXdvcmRPcGVyYXRvciwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBjb25zdGFudExhbmd1YWdlLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9ucwogICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCiAgICB0aGlzLiRydWxlcyA9IAogICAgICAgIHsKICAgICJzdGFydCI6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICI7LiokIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAidG9rZW4iOiBbInN0b3JhZ2UudHlwZS5mdW5jdGlvbi10eXBlLnNjaGVtZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uLnNjaGVtZSJdLAogICAgICAgICAgICAicmVnZXgiOiAiKD86XFxiKD86KGRlZmluZXxkZWZpbmUtc3ludGF4fGRlZmluZS1tYWNybykpXFxiKShcXHMrKSgoPzpcXHd8XFwtfFxcIXxcXD8pKikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0b2tlbiI6ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbnN0YW50LmNoYXJhY3Rlci5zY2hlbWUiLAogICAgICAgICAgICAicmVnZXgiOiAiIzpcXFMrIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAidG9rZW4iOiBbInB1bmN0dWF0aW9uLmRlZmluaXRpb24udmFyaWFibGUuc2NoZW1lIiwgInZhcmlhYmxlLm90aGVyLmdsb2JhbC5zY2hlbWUiLCAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi52YXJpYWJsZS5zY2hlbWUiXSwKICAgICAgICAgICAgInJlZ2V4IjogIihcXCopKFxcUyopKFxcKikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0b2tlbiIgOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAicmVnZXgiIDogIiNbeFhvT2JCXVswLTlhLWZBLUZdKyIKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgICJ0b2tlbiIgOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgICJyZWdleCIgOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT8iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICAgICAidG9rZW4iIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgICJyZWdleCIgOiAiW2EtekEtWl8jXVthLXpBLVowLTlfXFwtXFw/XFwhXFwqXSoiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0b2tlbiIgOiAic3RyaW5nIiwKICAgICAgICAgICAgInJlZ2V4IiA6ICciKD89LiknLAogICAgICAgICAgICAibmV4dCIgIDogInFxc3RyaW5nIgogICAgICAgIH0KICAgIF0sCiAgICAicXFzdHJpbmciOiBbCiAgICAgICAgewogICAgICAgICAgICAidG9rZW4iOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5zY2hlbWUiLAogICAgICAgICAgICAicmVnZXgiOiAiXFxcXC4iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJ0b2tlbiIgOiAic3RyaW5nIiwKICAgICAgICAgICAgInJlZ2V4IiA6ICdbXiJcXFxcXSsnLAogICAgICAgICAgICAibWVyZ2UiIDogdHJ1ZQogICAgICAgIH0sIHsKICAgICAgICAgICAgInRva2VuIiA6ICJzdHJpbmciLAogICAgICAgICAgICAicmVnZXgiIDogIlxcXFwkIiwKICAgICAgICAgICAgIm5leHQiICA6ICJxcXN0cmluZyIsCiAgICAgICAgICAgICJtZXJnZSIgOiB0cnVlCiAgICAgICAgfSwgewogICAgICAgICAgICAidG9rZW4iIDogInN0cmluZyIsCiAgICAgICAgICAgICJyZWdleCIgOiAnInwkJywKICAgICAgICAgICAgIm5leHQiICA6ICJzdGFydCIsCiAgICAgICAgICAgICJtZXJnZSIgOiB0cnVlCiAgICAgICAgfQogICAgXQp9OwoKfTsKCm9vcC5pbmhlcml0cyhTY2hlbWVIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2NoZW1lSGlnaGxpZ2h0UnVsZXMgPSBTY2hlbWVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX3BhcmVuc19vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nUGFyZW5zT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcKS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlwpKS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccyspLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nUGFyZW5zT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ1BhcmVuc091dGRlbnQgPSBNYXRjaGluZ1BhcmVuc091dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zY2hlbWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zY2hlbWVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfcGFyZW5zX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTY2hlbWVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc2NoZW1lX2hpZ2hsaWdodF9ydWxlcyIpLlNjaGVtZUhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdQYXJlbnNPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19wYXJlbnNfb3V0ZGVudCIpLk1hdGNoaW5nUGFyZW5zT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU2NoZW1lSGlnaGxpZ2h0UnVsZXM7Cgl0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nUGFyZW5zT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgICAgIAogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIjsiOwogICAgdGhpcy5taW5vckluZGVudEZ1bmN0aW9ucyA9IFsiZGVmaW5lIiwgImxhbWJkYSIsICJkZWZpbmUtbWFjcm8iLCAiZGVmaW5lLXN5bnRheCIsICJzeW50YXgtcnVsZXMiLCAiZGVmaW5lLXJlY29yZC10eXBlIiwgImRlZmluZS1zdHJ1Y3R1cmUiXTsKCiAgICB0aGlzLiR0b0luZGVudCA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHJldHVybiBzdHIuc3BsaXQoJycpLm1hcChmdW5jdGlvbihjaCkgewogICAgICAgICAgICBpZiAoL1xzLy5leGVjKGNoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNoOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICcgJzsKICAgICAgICAgICAgfQogICAgICAgIH0pLmpvaW4oJycpOwogICAgfTsKCiAgICB0aGlzLiRjYWxjdWxhdGVJbmRlbnQgPSBmdW5jdGlvbihsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgYmFzZUluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgZGVsdGEgPSAwOwogICAgICAgIHZhciBpc1BhcmVuLCBjaDsKICAgICAgICBmb3IgKHZhciBpID0gbGluZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBjaCA9IGxpbmVbaV07CiAgICAgICAgICAgIGlmIChjaCA9PT0gJygnKSB7CiAgICAgICAgICAgICAgICBkZWx0YS0tOwogICAgICAgICAgICAgICAgaXNQYXJlbiA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcoJyB8fCBjaCA9PT0gJ1snIHx8IGNoID09PSAneycpIHsKICAgICAgICAgICAgICAgIGRlbHRhLS07CiAgICAgICAgICAgICAgICBpc1BhcmVuID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICcpJyB8fCBjaCA9PT0gJ10nIHx8IGNoID09PSAnfScpIHsKICAgICAgICAgICAgICAgIGRlbHRhKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGRlbHRhIDwgMCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGRlbHRhIDwgMCAmJiBpc1BhcmVuKSB7CiAgICAgICAgICAgIGkgKz0gMTsKICAgICAgICAgICAgdmFyIGlCZWZvcmUgPSBpOwogICAgICAgICAgICB2YXIgZm4gPSAnJzsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgIGNoID0gbGluZVtpXTsKICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJyAnIHx8IGNoID09PSAnXHQnKSB7CiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5taW5vckluZGVudEZ1bmN0aW9ucy5pbmRleE9mKGZuKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRvSW5kZW50KGxpbmUuc3Vic3RyaW5nKDAsIGlCZWZvcmUgLSAxKSArIHRhYik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRvSW5kZW50KGxpbmUuc3Vic3RyaW5nKDAsIGkgKyAxKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRvSW5kZW50KGxpbmUuc3Vic3RyaW5nKDAsIGlCZWZvcmUgLSAxKSArIHRhYik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmbiArPSBsaW5lW2ldOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmKGRlbHRhIDwgMCAmJiAhaXNQYXJlbikgewogICAgICAgICAgICByZXR1cm4gdGhpcy4kdG9JbmRlbnQobGluZS5zdWJzdHJpbmcoMCwgaSsxKSk7CiAgICAgICAgfSBlbHNlIGlmKGRlbHRhID4gMCkgewogICAgICAgICAgICBiYXNlSW5kZW50ID0gYmFzZUluZGVudC5zdWJzdHJpbmcoMCwgYmFzZUluZGVudC5sZW5ndGggLSB0YWIubGVuZ3RoKTsKICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGJhc2VJbmRlbnQ7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHJldHVybiB0aGlzLiRjYWxjdWxhdGVJbmRlbnQobGluZSwgdGFiKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwogICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zY2hlbWUiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9zY2hlbWUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-scss.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpOwoKdmFyIFNjc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgcHJvcGVydGllcyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0VHlwZS5zcGxpdCgifCIpKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiaHNsfGhzbGF8cmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVyc3xhYnN8YWRqdXN0X2NvbG9yfGFkanVzdF9odWV8IiArCiAgICAgICAgICJhbHBoYXxqb2lufGJsdWV8Y2VpbHxjaGFuZ2VfY29sb3J8Y29tcGFyYWJsZXxjb21wbGVtZW50fGRhcmtlbnxkZXNhdHVyYXRlfCIgKyAKICAgICAgICAgImZsb29yfGdyYXlzY2FsZXxncmVlbnxodWV8aWZ8aW52ZXJ0fGpvaW58bGVuZ3RofGxpZ2h0ZW58bGlnaHRuZXNzfG1peHwiICsgCiAgICAgICAgICJudGh8b3BhY2lmeXxvcGFjaXR5fHBlcmNlbnRhZ2V8cXVvdGV8cmVkfHJvdW5kfHNhdHVyYXRlfHNhdHVyYXRpb258IiArCiAgICAgICAgICJzY2FsZV9jb2xvcnx0cmFuc3BhcmVudGl6ZXx0eXBlX29mfHVuaXR8dW5pdGxlc3N8dW5xdW90ZSIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIGNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnQuc3BsaXQoInwiKSk7CgogICAgdmFyIGNvbG9ycyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnRDb2xvci5zcGxpdCgifCIpKTsKICAgIAogICAgdmFyIGtleXdvcmRzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiQG1peGlufEBleHRlbmR8QGluY2x1ZGV8QGltcG9ydHxAbWVkaWF8QGRlYnVnfEB3YXJufEBpZnxAZm9yfEBlYWNofEB3aGlsZXxAZWxzZXxAZm9udC1mYWNlfEAtd2Via2l0LWtleWZyYW1lc3xpZnxhbmR8IWRlZmF1bHR8bW9kdWxlfGRlZnxlbmR8ZGVjbGFyZSIpLnNwbGl0KCJ8IikKICAgICk7CiAgICAKICAgIHZhciB0YWdzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiYXxhYmJyfGFjcm9ueW18YWRkcmVzc3xhcHBsZXR8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiYXNlZm9udHxiZG98IiArIAogICAgICAgICAiYmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2VudGVyfGNpdGV8Y29kZXxjb2x8Y29sZ3JvdXB8IiArIAogICAgICAgICAiY29tbWFuZHxkYXRhbGlzdHxkZHxkZWx8ZGV0YWlsc3xkZm58ZGlyfGRpdnxkbHxkdHxlbXxlbWJlZHxmaWVsZHNldHwiICsgCiAgICAgICAgICJmaWdjYXB0aW9ufGZpZ3VyZXxmb250fGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGhlYWR8IiArIAogICAgICAgICAiaGVhZGVyfGhncm91cHxocnxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2V5Z2VufGtiZHxsYWJlbHxsZWdlbmR8bGl8IiArIAogICAgICAgICAibGlua3xtYXB8bWFya3xtZW51fG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHwiICsgCiAgICAgICAgICJvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzfHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fCIgKyAKICAgICAgICAgInNtYWxsfHNvdXJjZXxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1bW1hcnl8c3VwfHRhYmxlfHRib2R5fHRkfCIgKyAKICAgICAgICAgInRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dGl0bGV8dHJ8dHR8dXx1bHx2YXJ8dmlkZW98d2JyfHhtcCIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIG51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0uKlxcXFwkJywKICAgICAgICAgICAgICAgIG5leHQgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddLipcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgcmVnZXggOiBudW1SZSArICIoPzpjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuZnVuY3Rpb24iLCAic3RyaW5nIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih1cmxcXCgpKC4qKShcXCkpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC50eXBlIjsKICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5mdW5jdGlvbiI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sb3JzLmhhc093blByb3BlcnR5KHZhbHVlLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhZ3MuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0IjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC0/W0BhLXpfXVtAYS16MC05X1xcLV0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16X1xcLSRdW2EtejAtOV9cXC0kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjx8Pnw8PXw+PXw9PXwhPXwtfCV8I3xcXCt8XFwkfFxcK3xcXCoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKFNjc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2Nzc0hpZ2hsaWdodFJ1bGVzID0gU2Nzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBwcm9wZXJ0eU1hcCA9IHsKICAgICJiYWNrZ3JvdW5kIjogeyIjJDAiOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogeyIjJDAiOiAxLCAidHJhbnNwYXJlbnQiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLWltYWdlIjogeyJ1cmwoJy8kMCcpIjogMX0sCiAgICAiYmFja2dyb3VuZC1yZXBlYXQiOiB7InJlcGVhdCI6IDEsICJyZXBlYXQteCI6IDEsICJyZXBlYXQteSI6IDEsICJuby1yZXBlYXQiOiAxLCAiaW5oZXJpdCI6IDF9LAogICAgImJhY2tncm91bmQtcG9zaXRpb24iOiB7ImJvdHRvbSI6MiwgImNlbnRlciI6MiwgImxlZnQiOjIsICJyaWdodCI6MiwgInRvcCI6MiwgImluaGVyaXQiOjJ9LAogICAgImJhY2tncm91bmQtYXR0YWNobWVudCI6IHsic2Nyb2xsIjogMSwgImZpeGVkIjogMX0sCiAgICAiYmFja2dyb3VuZC1zaXplIjogeyJjb3ZlciI6IDEsICJjb250YWluIjogMX0sCiAgICAiYmFja2dyb3VuZC1jbGlwIjogeyJib3JkZXItYm94IjogMSwgInBhZGRpbmctYm94IjogMSwgImNvbnRlbnQtYm94IjogMX0sCiAgICAiYmFja2dyb3VuZC1vcmlnaW4iOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJib3JkZXIiOiB7InNvbGlkICQwIjogMSwgImRhc2hlZCAkMCI6IDEsICJkb3R0ZWQgJDAiOiAxLCAiIyQwIjogMX0sCiAgICAiYm9yZGVyLWNvbG9yIjogeyIjJDAiOiAxfSwKICAgICJib3JkZXItc3R5bGUiOiB7InNvbGlkIjoyLCAiZGFzaGVkIjoyLCAiZG90dGVkIjoyLCAiZG91YmxlIjoyLCAiZ3Jvb3ZlIjoyLCAiaGlkZGVuIjoyLCAiaW5oZXJpdCI6MiwgImluc2V0IjoyLCAibm9uZSI6MiwgIm91dHNldCI6MiwgInJpZGdlZCI6Mn0sCiAgICAiYm9yZGVyLWNvbGxhcHNlIjogeyJjb2xsYXBzZSI6IDEsICJzZXBhcmF0ZSI6IDF9LAogICAgImJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImNsZWFyIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImJvdGgiOiAxLCAibm9uZSI6IDF9LAogICAgImNvbG9yIjogeyIjJDAiOiAxLCAicmdiKCMkMDAsMCwwKSI6IDF9LAogICAgImN1cnNvciI6IHsiZGVmYXVsdCI6IDEsICJwb2ludGVyIjogMSwgIm1vdmUiOiAxLCAidGV4dCI6IDEsICJ3YWl0IjogMSwgImhlbHAiOiAxLCAicHJvZ3Jlc3MiOiAxLCAibi1yZXNpemUiOiAxLCAibmUtcmVzaXplIjogMSwgImUtcmVzaXplIjogMSwgInNlLXJlc2l6ZSI6IDEsICJzLXJlc2l6ZSI6IDEsICJzdy1yZXNpemUiOiAxLCAidy1yZXNpemUiOiAxLCAibnctcmVzaXplIjogMX0sCiAgICAiZGlzcGxheSI6IHsibm9uZSI6IDEsICJibG9jayI6IDEsICJpbmxpbmUiOiAxLCAiaW5saW5lLWJsb2NrIjogMSwgInRhYmxlLWNlbGwiOiAxfSwKICAgICJlbXB0eS1jZWxscyI6IHsic2hvdyI6IDEsICJoaWRlIjogMX0sCiAgICAiZmxvYXQiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAibm9uZSI6IDF9LAogICAgImZvbnQtZmFtaWx5IjogeyJBcmlhbCI6MiwiQ29taWMgU2FucyBNUyI6MiwiQ29uc29sYXMiOjIsIkNvdXJpZXIgTmV3IjoyLCJDb3VyaWVyIjoyLCJHZW9yZ2lhIjoyLCJNb25vc3BhY2UiOjIsIlNhbnMtU2VyaWYiOjIsICJTZWdvZSBVSSI6MiwiVGFob21hIjoyLCJUaW1lcyBOZXcgUm9tYW4iOjIsIlRyZWJ1Y2hldCBNUyI6MiwiVmVyZGFuYSI6IDF9LAogICAgImZvbnQtc2l6ZSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImZvbnQtd2VpZ2h0IjogeyJib2xkIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtc3R5bGUiOiB7Iml0YWxpYyI6IDEsICJub3JtYWwiOiAxfSwKICAgICJmb250LXZhcmlhbnQiOiB7Im5vcm1hbCI6IDEsICJzbWFsbC1jYXBzIjogMX0sCiAgICAiaGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgImxldHRlci1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJsaW5lLWhlaWdodCI6IHsibm9ybWFsIjogMX0sCiAgICAibGlzdC1zdHlsZS10eXBlIjogeyJub25lIjogMSwgImRpc2MiOiAxLCAiY2lyY2xlIjogMSwgInNxdWFyZSI6IDEsICJkZWNpbWFsIjogMSwgImRlY2ltYWwtbGVhZGluZy16ZXJvIjogMSwgImxvd2VyLXJvbWFuIjogMSwgInVwcGVyLXJvbWFuIjogMSwgImxvd2VyLWdyZWVrIjogMSwgImxvd2VyLWxhdGluIjogMSwgInVwcGVyLWxhdGluIjogMSwgImdlb3JnaWFuIjogMSwgImxvd2VyLWFscGhhIjogMSwgInVwcGVyLWFscGhhIjogMX0sCiAgICAibWFyZ2luIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLXJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLWxlZnQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWFyZ2luLWJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXgtd2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4taGVpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWluLXdpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAib3ZlcmZsb3ciOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAib3ZlcmZsb3cteCI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy15IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgInBhZGRpbmciOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLXRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJwYWRkaW5nLWJvdHRvbSI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZ2UtYnJlYWstYWZ0ZXIiOiB7ImF1dG8iOiAxLCAiYWx3YXlzIjogMSwgImF2b2lkIjogMSwgImxlZnQiOiAxLCAicmlnaHQiOiAxfSwKICAgICJwYWdlLWJyZWFrLWJlZm9yZSI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBvc2l0aW9uIjogeyJhYnNvbHV0ZSI6IDEsICJyZWxhdGl2ZSI6IDEsICJmaXhlZCI6IDEsICJzdGF0aWMiOiAxfSwKICAgICJyaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInRhYmxlLWxheW91dCI6IHsiZml4ZWQiOiAxLCAiYXV0byI6IDF9LAogICAgInRleHQtZGVjb3JhdGlvbiI6IHsibm9uZSI6IDEsICJ1bmRlcmxpbmUiOiAxLCAibGluZS10aHJvdWdoIjogMSwgImJsaW5rIjogMX0sCiAgICAidGV4dC1hbGlnbiI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJjZW50ZXIiOiAxLCAianVzdGlmeSI6IDF9LAogICAgInRleHQtdHJhbnNmb3JtIjogeyJjYXBpdGFsaXplIjogMSwgInVwcGVyY2FzZSI6IDEsICJsb3dlcmNhc2UiOiAxLCAibm9uZSI6IDF9LAogICAgInRvcCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInZlcnRpY2FsLWFsaWduIjogeyJ0b3AiOiAxLCAiYm90dG9tIjogMX0sCiAgICAidmlzaWJpbGl0eSI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxfSwKICAgICJ3aGl0ZS1zcGFjZSI6IHsibm93cmFwIjogMSwgIm5vcm1hbCI6IDEsICJwcmUiOiAxLCAicHJlLWxpbmUiOiAxLCAicHJlLXdyYXAiOiAxfSwKICAgICJ3aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIndvcmQtc3BhY2luZyI6IHsibm9ybWFsIjogMX0sCiAgICAiZmlsdGVyIjogeyJhbHBoYShvcGFjaXR5PSQwMTAwKSI6IDF9LAoKICAgICJ0ZXh0LXNoYWRvdyI6IHsiJDAycHggMnB4IDJweCAjNzc3IjogMX0sCiAgICAidGV4dC1vdmVyZmxvdyI6IHsiZWxsaXBzaXMtd29yZCI6IDEsICJjbGlwIjogMSwgImVsbGlwc2lzIjogMX0sCiAgICAiLW1vei1ib3JkZXItcmFkaXVzIjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0IjogMSwKICAgICItd2Via2l0LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjogMSwKICAgICItbW96LWJveC1zaGFkb3ciOiAxLAogICAgIi13ZWJraXQtYm94LXNoYWRvdyI6IDEsCiAgICAidHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItbW96LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMX0sCiAgICAiLXdlYmtpdC10cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDEgfQp9OwoKdmFyIENzc0NvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7Cgp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY29tcGxldGlvbnNEZWZpbmVkID0gZmFsc2U7CgogICAgdGhpcy5kZWZpbmVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChkb2N1bWVudCkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjJykuc3R5bGU7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIHN0eWxlKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0eWxlW2ldICE9PSAnc3RyaW5nJykKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGkucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24oeCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAnLScgKyB4LnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5TWFwLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TWFwW25hbWVdID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSB0cnVlOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgaWYgKCF0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCkgewogICAgICAgICAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGU9PT0ncnVsZXNldCcgfHwgc2Vzc2lvbi4kbW9kZS4kaWQgPT0gImFjZS9tb2RlL3Njc3MiKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICAgICAgaWYgKC86W147XSskLy50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgICAgICAvKFtcd1wtXSspOlteOl0qJC8udGVzdChsaW5lKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFtdOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHByb3BlcnR5TWFwKTsKICAgICAgICByZXR1cm4gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24ocHJvcGVydHkpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogcHJvcGVydHksCiAgICAgICAgICAgICAgICBzbmlwcGV0OiBwcm9wZXJ0eSArICc6ICQwOycsCiAgICAgICAgICAgICAgICBtZXRhOiAicHJvcGVydHkiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRQcm9wZXJ0eVZhbHVlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgdmFyIHByb3BlcnR5ID0gKC8oW1x3XC1dKyk6W146XSokLy5leGVjKGxpbmUpIHx8IHt9KVsxXTsKCiAgICAgICAgaWYgKCFwcm9wZXJ0eSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciB2YWx1ZXMgPSBbXTsKICAgICAgICBpZiAocHJvcGVydHkgaW4gcHJvcGVydHlNYXAgJiYgdHlwZW9mIHByb3BlcnR5TWFwW3Byb3BlcnR5XSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgdmFsdWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXBbcHJvcGVydHldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSB2YWx1ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoQ3NzQ29tcGxldGlvbnMucHJvdG90eXBlKTsKCmV4cG9ydHMuQ3NzQ29tcGxldGlvbnMgPSBDc3NDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Njc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTY3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIikuU2Nzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgQ3NzQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2Nzc19jb21wbGV0aW9ucyIpLkNzc0NvbXBsZXRpb25zOwoKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU2Nzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IENzc0NvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xzKiQvKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Njc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc2NzcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-sh.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zaF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciByZXNlcnZlZEtleXdvcmRzID0gZXhwb3J0cy5yZXNlcnZlZEtleXdvcmRzID0gKAogICAgICAgICchfHt8fXxjYXNlfGRvfGRvbmV8ZWxpZnxlbHNlfCcrCiAgICAgICAgJ2VzYWN8Zml8Zm9yfGlmfGlufHRoZW58dW50aWx8d2hpbGV8JysKICAgICAgICAnJnw7fGV4cG9ydHxsb2NhbHxyZWFkfHR5cGVzZXR8dW5zZXR8JysKICAgICAgICAnZWxpZnxzZWxlY3R8c2V0fGZ1bmN0aW9ufGRlY2xhcmV8cmVhZG9ubHknCiAgICApOwoKdmFyIGxhbmd1YWdlQ29uc3RydWN0cyA9IGV4cG9ydHMubGFuZ3VhZ2VDb25zdHJ1Y3RzID0gKAogICAgJ1t8XXxhbGlhc3xiZ3xiaW5kfGJyZWFrfGJ1aWx0aW58JysKICAgICAnY2R8Y29tbWFuZHxjb21wZ2VufGNvbXBsZXRlfGNvbnRpbnVlfCcrCiAgICAgJ2RpcnN8ZGlzb3dufGVjaG98ZW5hYmxlfGV2YWx8ZXhlY3wnKwogICAgICdleGl0fGZjfGZnfGdldG9wdHN8aGFzaHxoZWxwfGhpc3Rvcnl8JysKICAgICAnam9ic3xraWxsfGxldHxsb2dvdXR8cG9wZHxwcmludGZ8cHVzaGR8JysKICAgICAncHdkfHJldHVybnxzZXR8c2hpZnR8c2hvcHR8c291cmNlfCcrCiAgICAgJ3N1c3BlbmR8dGVzdHx0aW1lc3x0cmFwfHR5cGV8dWxpbWl0fCcrCiAgICAgJ3VtYXNrfHVuYWxpYXN8d2FpdCcKKTsKCnZhciBTaEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiByZXNlcnZlZEtleXdvcmRzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uLmJ1aWx0aW4iOiBsYW5ndWFnZUNvbnN0cnVjdHMsCiAgICAgICAgImludmFsaWQuZGVwcmVjYXRlZCI6ICJkZWJ1Z2dlciIKICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgdmFyIGludGVnZXIgPSAiKD86KD86WzEtOV1cXGQqKXwoPzowKSkiOwoKICAgIHZhciBmcmFjdGlvbiA9ICIoPzpcXC5cXGQrKSI7CiAgICB2YXIgaW50UGFydCA9ICIoPzpcXGQrKSI7CiAgICB2YXIgcG9pbnRGbG9hdCA9ICIoPzooPzoiICsgaW50UGFydCArICI/IiArIGZyYWN0aW9uICsgIil8KD86IiArIGludFBhcnQgKyAiXFwuKSkiOwogICAgdmFyIGV4cG9uZW50RmxvYXQgPSAiKD86KD86IiArIHBvaW50RmxvYXQgKyAifCIgKyAgaW50UGFydCArICIpIiArICIpIjsKICAgIHZhciBmbG9hdE51bWJlciA9ICIoPzoiICsgZXhwb25lbnRGbG9hdCArICJ8IiArIHBvaW50RmxvYXQgKyAiKSI7CiAgICB2YXIgZmlsZURlc2NyaXB0b3IgPSAiKD86JiIgKyBpbnRQYXJ0ICsgIikiOwoKICAgIHZhciB2YXJpYWJsZU5hbWUgPSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiI7CiAgICB2YXIgdmFyaWFibGUgPSAiKD86IiArIHZhcmlhYmxlTmFtZSArICIoPz09KSkiOwoKICAgIHZhciBidWlsdGluVmFyaWFibGUgPSAiKD86XFwkKD86U0hMVkx8XFwkfFxcIXxcXD8pKSI7CgogICAgdmFyIGZ1bmMgPSAiKD86IiArIHZhcmlhYmxlTmFtZSArICJcXHMqXFwoXFwpKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50IiwKICAgICAgICAgICAgcmVnZXggOiAvXFwuLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAiY29tbWVudCJdLAogICAgICAgICAgICByZWdleCA6IC8oXnxccykoIy4qKSQvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbJGAiXFxdfCQpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBpbmNsdWRlIDogInZhcmlhYmxlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9gLyAvLyBUT0RPIGhpZ2hsaWdodCBgCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXCQnIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbYWJlRWZucnR2XFwnIl18eFthLWZBLUZcZF17MSwyfXx1W2EtZkEtRlxkXXs0fShbYS1mQS1GXGRdezR9KT98Yy58XGR7MSwzfSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIjw8PCIsCiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiCiAgICAgICAgfSwgewogICAgICAgICAgICBzdGF0ZU5hbWU6ICJoZXJlZG9jIiwKICAgICAgICAgICAgcmVnZXggOiAiKDw8LT8pKFxccyopKFsnXCJgXT8pKFtcXHdcXC1dKykoWydcImBdPykiLAogICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdmFsdWVbMl0gPT0gJy0nID8gImluZGVudGVkSGVyZWRvYyIgOiAiaGVyZWRvYyI7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5zID0gdmFsdWUuc3BsaXQodGhpcy5zcGxpdFJlZ2V4KTsKICAgICAgICAgICAgICAgIHN0YWNrLnB1c2gobmV4dCwgdG9rZW5zWzRdKTsKICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAge3R5cGU6ImNvbnN0YW50IiwgdmFsdWU6IHRva2Vuc1sxXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InRleHQiLCB2YWx1ZTogdG9rZW5zWzJdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1szXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InN1cHBvcnQuY2xhc3MiLCB2YWx1ZTogdG9rZW5zWzRdfSwKICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1s1XX0KICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJ1bGVzOiB7CiAgICAgICAgICAgICAgICBoZXJlZG9jOiBbewogICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6ICBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHN0YWNrWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICByZWdleDogIi4qJCIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICBpbmRlbnRlZEhlcmVkb2M6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXlx0KyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzdGFja1sxXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIuKiQiLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHJlZ2V4IDogIiQiLAogICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgIG5leHQgOiBmdW5jdGlvbihjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT09ICJoZXJlZG9jIiB8fCBzdGFja1swXSA9PT0gImluZGVudGVkSGVyZWRvYyIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrWzBdOwogICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTsKICAgICAgICAgICAgfQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbImtleXdvcmQiLCAidGV4dCIsICJ0ZXh0IiwgInRleHQiLCAidmFyaWFibGUiXSwKICAgICAgICAgICAgcmVnZXggOiAvKGRlY2xhcmV8bG9jYWx8cmVhZG9ubHkpKFxzKykoPzooLVtmaXhhcl0rKShccyspKT8oW2EtekEtWl9dW2EtekEtWjAtOV9dKlxiKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgcmVnZXggOiBidWlsdGluVmFyaWFibGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiB2YXJpYWJsZQogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZSA6ICJ2YXJpYWJsZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiBmdW5jCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgcmVnZXggOiBmaWxlRGVzY3JpcHRvcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgICAgICAgICAgIC8vICcgc3RyaW5nCiAgICAgICAgICAgIHN0YXJ0IDogIiciLCBlbmQgOiAiJyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6IGZsb2F0TnVtYmVyCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaW50ZWdlcgogICAgICAgICAgICByZWdleCA6IGludGVnZXIgKyAiXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aX11bYS16QS1aMC05X10qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwqfFxcKlxcKnxcXC98XFwvXFwvfH58PHw+fDw9fD0+fD18IT18WyUmfGBdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICI7IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcW1xcKFxce10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXClcXH1dIiwKICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgfV0sCiAgICAgICAgdmFyaWFibGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJCkoXHcrKS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShcKCkvLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInZhcmlhYmxlIiwgInBhcmVuLmxwYXJlbiIsICJrZXl3b3JkLm9wZXJhdG9yIiwgInZhcmlhYmxlIiwgImtleXdvcmQub3BlcmF0b3IiXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShceykoWyMhXT8pKFx3K3xbKkAjP1wtJCEwX10pKDpbPytcLT1dP3wjIz98JSU/fCwsP1wvfFxeXF4/KT8vLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6IC9cJFsqQCM/XC0kITBfXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXggOiAvKFwkKShceykvLAogICAgICAgICAgICBwdXNoIDogInN0YXJ0IgogICAgICAgIH1dCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoU2hIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2hIaWdobGlnaHRSdWxlcyA9IFNoSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zaF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTaEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zaF9oaWdobGlnaHRfcnVsZXMiKS5TaEhpZ2hsaWdodFJ1bGVzOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFNoSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcWzpdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHZhciBvdXRkZW50cyA9IHsKICAgICAgICAicGFzcyI6IDEsCiAgICAgICAgInJldHVybiI6IDEsCiAgICAgICAgInJhaXNlIjogMSwKICAgICAgICAiYnJlYWsiOiAxLAogICAgICAgICJjb250aW51ZSI6IDEKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoaW5wdXQgIT09ICJcclxuIiAmJiBpbnB1dCAhPT0gIlxyIiAmJiBpbnB1dCAhPT0gIlxuIikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUudHJpbSgpLCBzdGF0ZSkudG9rZW5zOwoKICAgICAgICBpZiAoIXRva2VucykKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGRvIHsKICAgICAgICAgICAgdmFyIGxhc3QgPSB0b2tlbnMucG9wKCk7CiAgICAgICAgfSB3aGlsZSAobGFzdCAmJiAobGFzdC50eXBlID09ICJjb21tZW50IiB8fCAobGFzdC50eXBlID09ICJ0ZXh0IiAmJiBsYXN0LnZhbHVlLm1hdGNoKC9eXHMrJC8pKSkpOwoKICAgICAgICBpZiAoIWxhc3QpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIChsYXN0LnR5cGUgPT0gImtleXdvcmQiICYmIG91dGRlbnRzW2xhc3QudmFsdWVdKTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewoKICAgICAgICByb3cgKz0gMTsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKHJvdykpOwogICAgICAgIHZhciB0YWIgPSBkb2MuZ2V0VGFiU3RyaW5nKCk7CiAgICAgICAgaWYgKGluZGVudC5zbGljZSgtdGFiLmxlbmd0aCkgPT0gdGFiKQogICAgICAgICAgICBkb2MucmVtb3ZlKG5ldyBSYW5nZShyb3csIGluZGVudC5sZW5ndGgtdGFiLmxlbmd0aCwgcm93LCBpbmRlbnQubGVuZ3RoKSk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3NoIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc2giXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-sjs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zanNfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU0pTSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBwYXJlbnQgPSBuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtub0VTNjogdHJ1ZX0pOwogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC02XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIjM3WzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB2YXIgY29udGV4dEF3YXJlID0gZnVuY3Rpb24oZikgewogICAgICAgIGYuaXNDb250ZXh0QXdhcmUgPSB0cnVlOwogICAgICAgIHJldHVybiBmOwogICAgfTsKCiAgICB2YXIgY3R4QmVnaW4gPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW46IG9wdHMudG9rZW4sCiAgICAgICAgICAgIHJlZ2V4OiBvcHRzLnJlZ2V4LAogICAgICAgICAgICBuZXh0OiBjb250ZXh0QXdhcmUoZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KG9wdHMubmV4dCk7CiAgICAgICAgICAgICAgICByZXR1cm4gb3B0cy5uZXh0OwogICAgICAgICAgICB9KQogICAgICAgIH07CiAgICB9OwoKICAgIHZhciBjdHhFbmQgPSBmdW5jdGlvbihvcHRzKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW46IG9wdHMudG9rZW4sCiAgICAgICAgICAgIHJlZ2V4OiBvcHRzLnJlZ2V4LAogICAgICAgICAgICBuZXh0OiBjb250ZXh0QXdhcmUoZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICB9KQogICAgICAgIH07CiAgICB9OwoKICAgIHRoaXMuJHJ1bGVzID0gcGFyZW50LiRydWxlczsKICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4ID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIod2FpdGZvcnxvcnxhbmR8Y29sbGFwc2V8c3Bhd258cmV0cmFjdClcXGIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4OiAiKC0+fD0+fFxcLlxcLikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogIihob2xkfGRlZmF1bHQpXFxiIgogICAgICAgIH0sCiAgICAgICAgY3R4QmVnaW4oewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAiYCIsCiAgICAgICAgICAgIG5leHQ6ICJic3RyaW5nIgogICAgICAgIH0pLAogICAgICAgIGN0eEJlZ2luKHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICBuZXh0OiAicXFzdHJpbmciCiAgICAgICAgfSksCiAgICAgICAgY3R4QmVnaW4oewogICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgIG5leHQ6ICJxcXN0cmluZyIKICAgICAgICB9KSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInBhcmVuLmxwYXJlbiIsICJ0ZXh0IiwgInBhcmVuLnJwYXJlbiJdLAogICAgICAgICAgICByZWdleDogIihcXHspKFxccyopKFxcfCkiLAogICAgICAgICAgICBuZXh0OiAiYmxvY2tfYXJndW1lbnRzIgogICAgICAgIH0KCiAgICBdLmNvbmNhdCh0aGlzLiRydWxlcy5ub19yZWdleCk7CgogICAgdGhpcy4kcnVsZXMuYmxvY2tfYXJndW1lbnRzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxcfCIsCiAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICB9CiAgICBdLmNvbmNhdCh0aGlzLiRydWxlcy5mdW5jdGlvbl9hcmd1bWVudHMpOwoKICAgIHRoaXMuJHJ1bGVzLmJzdHJpbmcgPSBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJic3RyaW5nIgogICAgICAgIH0sCiAgICAgICAgY3R4QmVnaW4oewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJcXCRcXHsiLAogICAgICAgICAgICBuZXh0OiAic3RyaW5nX2ludGVycCIKICAgICAgICB9KSwKICAgICAgICBjdHhCZWdpbih7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcJCIsCiAgICAgICAgICAgIG5leHQ6ICJic3RyaW5nX2ludGVycF9zaW5nbGUiCiAgICAgICAgfSksCiAgICAgICAgY3R4RW5kKHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiYCIKICAgICAgICB9KSwKICAgICAgICB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9CiAgICBdOwogICAgCiAgICB0aGlzLiRydWxlcy5xcXN0cmluZyA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dDogInFxc3RyaW5nIgogICAgICAgIH0sCiAgICAgICAgY3R4QmVnaW4oewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICIjXFx7IiwKICAgICAgICAgICAgbmV4dDogInN0cmluZ19pbnRlcnAiCiAgICAgICAgfSksCiAgICAgICAgY3R4RW5kKHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAnIicKICAgICAgICB9KSwKICAgICAgICB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICB9CiAgICBdOwogICAgdmFyIGVtYmVkZGFibGVSdWxlcyA9IFtdOwogICAgZm9yICh2YXIgaT0wOyBpIDwgdGhpcy4kcnVsZXMubm9fcmVnZXgubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgcnVsZSA9IHRoaXMuJHJ1bGVzLm5vX3JlZ2V4W2ldOwogICAgICAgIHZhciB0b2tlbiA9IFN0cmluZyhydWxlLnRva2VuKTsKICAgICAgICBpZiAodG9rZW4uaW5kZXhPZigncGFyZW4nKSA9PSAtMSAmJiAoIXJ1bGUubmV4dCB8fCBydWxlLm5leHQuaXNDb250ZXh0QXdhcmUpKSB7CiAgICAgICAgICAgIGVtYmVkZGFibGVSdWxlcy5wdXNoKHJ1bGUpOwogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLiRydWxlcy5zdHJpbmdfaW50ZXJwID0gWwogICAgICAgIGN0eEVuZCh7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXH0iCiAgICAgICAgfSksCiAgICAgICAgY3R4QmVnaW4oewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAneycsCiAgICAgICAgICAgIG5leHQ6ICJzdHJpbmdfaW50ZXJwIgogICAgICAgIH0pCiAgICBdLmNvbmNhdChlbWJlZGRhYmxlUnVsZXMpOwogICAgdGhpcy4kcnVsZXMuYnN0cmluZ19pbnRlcnBfc2luZ2xlID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsiaWRlbnRpZmllciIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgcmVnZXg6ICcoXFx3KykoXFwoKScsCiAgICAgICAgICAgIG5leHQ6ICdic3RyaW5nX2ludGVycF9zaW5nbGVfY2FsbCcKICAgICAgICB9LAogICAgICAgIGN0eEVuZCh7CiAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICByZWdleCA6ICJcXHcqIgogICAgICAgIH0pCiAgICBdOwogICAgdGhpcy4kcnVsZXMuYnN0cmluZ19pbnRlcnBfc2luZ2xlX2NhbGwgPSBbCiAgICAgICAgY3R4QmVnaW4oewogICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFwoIiwKICAgICAgICAgICAgbmV4dDogImJzdHJpbmdfaW50ZXJwX3NpbmdsZV9jYWxsIgogICAgICAgIH0pLAogICAgICAgIGN0eEVuZCh7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXCkiCiAgICAgICAgfSkKICAgIF0uY29uY2F0KGVtYmVkZGFibGVSdWxlcyk7Cn07Cm9vcC5pbmhlcml0cyhTSlNIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU0pTSGlnaGxpZ2h0UnVsZXMgPSBTSlNIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3NqcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL3Nqc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBKU01vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgU0pTSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Nqc19oaWdobGlnaHRfcnVsZXMiKS5TSlNIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU0pTSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgSlNNb2RlKTsKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvc2pzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc2pzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-slim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zbGltX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9jb25maWciLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgbW9kZXMgPSByZXF1aXJlKCIuLi9jb25maWciKS4kbW9kZXM7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIFNsaW1IaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXihccyopKFx3Kyk6XHMqLywKICAgICAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gL15ccyovLmV4ZWMobGluZSlbMF07CiAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB2YWx1ZS5tYXRjaCgvXihccyopKFx3Kyk6Lyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxhbmd1YWdlID0gbVsyXTsKICAgICAgICAgICAgICAgICAgICBpZiAoIS9eKGphdmFzY3JpcHR8cnVieXxjb2ZmZWV8bWFya2Rvd258Y3NzfHNjc3N8c2Fzc3xsZXNzKSQvLnRlc3QobGFuZ3VhZ2UpKQogICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSA9ICIiOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoImxhbmd1YWdlLWVtYmVkIiwgW10sIFtpbmRlbnQsIGxhbmd1YWdlXSwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogImxhbmd1YWdlLWVtYmVkIiwKICAgICAgICAgICAgICAgIG5leHQ6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAvXihccyopLywKICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgc3RhdGUsIHN0YWNrLCBsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSBzdGFja1syXVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGVudC5sZW5ndGggPj0gdmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCwgMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbe3R5cGU6ICJ0ZXh0IiwgdmFsdWU6IGluZGVudH1dOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgbmV4dDogIiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6IC8uKy8sCiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsdWUsIHN0YXRlLCBzdGFjaywgbGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gc3RhY2tbMl1bMF07CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5ndWFnZSA9IHN0YWNrWzJdWzFdOwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1iZWRTdGF0ZSA9IHN0YWNrWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVzW2xhbmd1YWdlXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBtb2Rlc1tsYW5ndWFnZV0uZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLnNsaWNlKGluZGVudC5sZW5ndGgpLCBlbWJlZFN0YXRlLnNsaWNlKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdID0gZGF0YS5zdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnRva2VuczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50LmJlZ2luLmphdmFzY3JpcHQuZmlsdGVyLnNsaW0nLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKCk6JCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdjb25zdGFudC5iZWdpbi4uZmlsdGVyLnNsaW0nLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKHJ1YnkpOiQnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQuYmVnaW4uY29mZmVlc2NyaXB0LmZpbHRlci5zbGltJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgpOiQnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQuYmVnaW4uLmZpbHRlci5zbGltJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKShtYXJrZG93bik6JCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdjb25zdGFudC5iZWdpbi5jc3MuZmlsdGVyLnNsaW0nLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKCk6JCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdjb25zdGFudC5iZWdpbi5zY3NzLmZpbHRlci5zbGltJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgpOiQnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAnY29uc3RhbnQuYmVnaW4uLmZpbHRlci5zbGltJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKShzYXNzKTokJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2NvbnN0YW50LmJlZ2luLi5maWx0ZXIuc2xpbScsCiAgICAgICAgICAgICAgICByZWdleDogJ14oXFxzKikobGVzcyk6JCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdjb25zdGFudC5iZWdpbi4uZmlsdGVyLnNsaW0nLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKGVyYik6JCcKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdrZXl3b3JkLmh0bWwudGFncy5zbGltJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXihcXHMqKSgoOj9cXCooXFx3KSspfGRvY3R5cGUgaHRtbHxhYmJyfGFjcm9ueW18YWRkcmVzc3xhcHBsZXR8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJhc2V8YmFzZWZvbnR8YmRvfGJpZ3xibG9ja3F1b3RlfGJvZHl8YnJ8YnV0dG9ufGNhbnZhc3xjYXB0aW9ufGNlbnRlcnxjaXRlfGNvZGV8Y29sfGNvbGdyb3VwfGNvbW1hbmR8ZGF0YWxpc3R8ZGR8ZGVsfGRldGFpbHN8ZGlhbG9nfGRmbnxkaXJ8ZGl2fGRsfGR0fGVtYmVkfGZpZWxkc2V0fGZpZ3VyZXxmb250fGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGhlYWR8aGVhZGVyfGhncm91cHxocnxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2V5Z2VufGtiZHxsYWJlbHxsZWdlbmR8bGlua3xsaXxtYXB8bWFya3xtZW51fG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHxvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzYW1wfHNjcmlwdHxzZWN0aW9ufHNlbGVjdHxzbWFsbHxzb3VyY2V8c3BhbnxzdHJpa2V8c3Ryb25nfHN0eWxlfHN1YnxzdXB8dGFibGV8dGJvZHl8dGR8dGV4dGFyZWF8dGZvb3R8dGh8dGhlYWR8dGltZXx0aXRsZXx0cnx0dHx1bHx2YXJ8dmlkZW98eG1wfGJ8dXxzfGVtfGEpKD86KFsuI10oXFx3fFxcLikrKStcXHM/KT9cXGInCgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ2tleXdvcmQuc2xpbScsCiAgICAgICAgICAgICAgICByZWdleDogJ14oXFxzKikoPzooWy4jXShcXHd8XFwuKSspK1xccz8pJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleDogL14oXHMqKSgnfFx8fFwvfChcLyEpKVxzKi8sCiAgICAgICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaywgbGluZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSAvXlxzKi8uZXhlYyhsaW5lKVswXTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFja1swXSA9ICJtbFN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGluZGVudC5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0gPSBpbmRlbnQubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBuZXh0OiAibWxTdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAna2V5d29yZC5jb250cm9sLnNsaW0nLAogICAgICAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKFxcLXw9PXw9KScsCiAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAnY29udHJvbC5lbmQuc2xpbScsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICckJywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJydWJ5bGluZSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiAibWlzYyIKICAgICAgICAgICAgICAgIH1dCgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogJ3BhcmVuJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwoJywKICAgICAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdwYXJlbicsCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcXCknLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZTogIm1pc2MiCiAgICAgICAgICAgICAgICB9XQoKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICdwYXJlbicsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcWycsCiAgICAgICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAncGFyZW4nLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxdJywKICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJtaXNjIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZTogIm1pc2MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJtbFN0cmluZyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiaW5kZW50IiwKICAgICAgICAgICAgcmVnZXg6IC9eXHMqLywKICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHZhciBjdXJJbmRlbnQgPSBzdGFja1sxXTsKCiAgICAgICAgICAgICAgICBpZiAoY3VySW5kZW50ID49IHZhbC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICJtbFN0cmluZyI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH1dLAogICAgICAgICJydWJ5bGluZSI6IFt7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5ydWJ5LmVtYmVkZGVkLnNsaW0iLAogICAgICAgICAgICByZWdleDogIig9PXw9KSg8Pnw+PHw8J3wnPHw8fD4pP3wtIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJsaXN0LnJ1Ynkub3BlcmF0b3JzLnNsaW0iLAogICAgICAgICAgICByZWdleDogIihcXGIpKGZvcnxpbnxkb3xpZnxlbHNlfGVsc2lmfHVubGVzc3x3aGlsZXx5aWVsZHxub3R8YW5kfG9yKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJbJ10oLikqP1snXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJbXCJdKC4pKj9bXCJdIgogICAgICAgIH1dLAogICAgICAgICJtaXNjIjogW3sKICAgICAgICAgICAgdG9rZW46ICdjbGFzcy52YXJpYWJsZS5zbGltJywKICAgICAgICAgICAgcmVnZXg6ICdcXEAoW2EtekEtWl9dW2EtekEtWjAtOV9dKilcXGInCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImxpc3QubWV0YS5zbGltIiwKICAgICAgICAgICAgcmVnZXg6ICIoXFxiKSh0cnVlfGZhbHNlfG5pbCkoXFxiKSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5lcXVhbHMuc2xpbScsCiAgICAgICAgICAgIHJlZ2V4OiAnPScKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJbJ10oLikqP1snXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICJbXCJdKC4pKj9bXCJdIgogICAgICAgIH1dCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCm9vcC5pbmhlcml0cyhTbGltSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNsaW1IaWdobGlnaHRSdWxlcyA9IFNsaW1IaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWciLAogICAgICAgICAgICByZWdleCA6ICJAW1xcd1xcZF9dKyIgLy8gVE9ETzogZml4IGVtYWlsIGFkZHJlc3NlcwogICAgICAgIH0sIAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudC5kb2MiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZy5zdG9yYWdlLnR5cGUiLAogICAgICAgIHJlZ2V4IDogIlxcYig/OlRPRE98RklYTUV8WFhYfEhBQ0spXFxiIgogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGRvYyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwvXFwqKD89XFwqKSIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlID0gZnVuY3Rpb24gKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKCmV4cG9ydHMuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIGlkZW50aWZpZXJSZSA9ICJbYS16QS1aXFwkX1x1MDBhMS1cdWZmZmZdW2EtekEtWlxcZFxcJF9cdTAwYTEtXHVmZmZmXSoiOwoKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiQXJyYXl8Qm9vbGVhbnxEYXRlfEZ1bmN0aW9ufEl0ZXJhdG9yfE51bWJlcnxPYmplY3R8UmVnRXhwfFN0cmluZ3xQcm94eXwiICArIC8vIENvbnN0cnVjdG9ycwogICAgICAgICAgICAiTmFtZXNwYWNlfFFOYW1lfFhNTHxYTUxMaXN0fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIEU0WAogICAgICAgICAgICAiQXJyYXlCdWZmZXJ8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fCIgICArCiAgICAgICAgICAgICJVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5fCIgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkVycm9yfEV2YWxFcnJvcnxJbnRlcm5hbEVycm9yfFJhbmdlRXJyb3J8UmVmZXJlbmNlRXJyb3J8U3RvcEl0ZXJhdGlvbnwiICAgKyAvLyBFcnJvcnMKICAgICAgICAgICAgIlN5bnRheEVycm9yfFR5cGVFcnJvcnxVUklFcnJvcnwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiZGVjb2RlVVJJfGRlY29kZVVSSUNvbXBvbmVudHxlbmNvZGVVUkl8ZW5jb2RlVVJJQ29tcG9uZW50fGV2YWx8aXNGaW5pdGV8IiArIC8vIE5vbi1jb25zdHJ1Y3RvciBmdW5jdGlvbnMKICAgICAgICAgICAgImlzTmFOfHBhcnNlRmxvYXR8cGFyc2VJbnR8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiSlNPTnxNYXRofCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIC8vIE90aGVyCiAgICAgICAgICAgICJ0aGlzfGFyZ3VtZW50c3xwcm90b3R5cGV8d2luZG93fGRvY3VtZW50IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgLy8gUHNldWRvCiAgICAgICAgImtleXdvcmQiOgogICAgICAgICAgICAiY29uc3R8eWllbGR8aW1wb3J0fGdldHxzZXR8YXN5bmN8YXdhaXR8IiArCiAgICAgICAgICAgICJicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258IiArCiAgICAgICAgICAgICJpZnxpbnxvZnxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofHRocm93fHRyeXx0eXBlb2Z8bGV0fHZhcnx3aGlsZXx3aXRofGRlYnVnZ2VyfCIgKwogICAgICAgICAgICAiX19wYXJlbnRfX3xfX2NvdW50X198ZXNjYXBlfHVuZXNjYXBlfHdpdGh8X19wcm90b19ffCIgKwogICAgICAgICAgICAiY2xhc3N8ZW51bXxleHRlbmRzfHN1cGVyfGV4cG9ydHxpbXBsZW1lbnRzfHByaXZhdGV8cHVibGljfGludGVyZmFjZXxwYWNrYWdlfHByb3RlY3RlZHxzdGF0aWMiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiY29uc3R8bGV0fHZhcnxmdW5jdGlvbiIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlIjoKICAgICAgICAgICAgIm51bGx8SW5maW5pdHl8TmFOfHVuZGVmaW5lZCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiYWxlcnQiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgdmFyIGt3QmVmb3JlUmUgPSAiY2FzZXxkb3xlbHNlfGZpbmFsbHl8aW58aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZnx5aWVsZHx2b2lkIjsKCiAgICB2YXIgZXNjYXBlZFJlID0gIlxcXFwoPzp4WzAtOWEtZkEtRl17Mn18IiArIC8vIGhleAogICAgICAgICJ1WzAtOWEtZkEtRl17NH18IiArIC8vIHVuaWNvZGUKICAgICAgICAidXtbMC05YS1mQS1GXXsxLDZ9fXwiICsgLy8gZXM2IHVuaWNvZGUKICAgICAgICAiWzAtMl1bMC03XXswLDJ9fCIgKyAvLyBvY3QKICAgICAgICAiM1swLTddWzAtN10/fCIgKyAvLyBvY3QKICAgICAgICAiWzQtN11bMC03XT98IiArIC8vb2N0CiAgICAgICAgIi4pIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAibm9fcmVnZXgiIDogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoIm5vX3JlZ2V4IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleGFkZWNpbWFsLCBvY3RhbCBhbmQgYmluYXJ5CiAgICAgICAgICAgICAgICByZWdleCA6IC8wKD86W3hYXVswLTlhLWZBLUZdK3xbb09dWzAtN10rfFtiQl1bMDFdKylcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0cwogICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XGRcZCooPzpcLlxkKik/fFwuXGQrKSg/OltlRV1bKy1dP1xkK1xiKT8vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKShwcm90b3R5cGUpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyspKFxcdyspKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihmdW5jdGlvbikoXFxzKykoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxccyopKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogImZyb20oPz1cXHMqKCd8XCIpKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoiICsga3dCZWZvcmVSZSArICIpXFxiIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmNvbnN0YW50Il0sCiAgICAgICAgICAgICAgICByZWdleCA6IC90aGF0XGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAic3VwcG9ydC5mdW5jdGlvbi5maXJlYnVnIl0sCiAgICAgICAgICAgICAgICByZWdleCA6IC8oY29uc29sZSkoXC4pKHdhcm58aW5mb3xsb2d8ZXJyb3J8dGltZXx0cmFjZXx0aW1lRW5kfGFzc2VydClcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwcm9wZXJ0eSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLz0+LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8XC57M318PT09fD09fD18IT18IT09fDwrPT98Pis9P3whfCYmfFx8XHx8XD86fFshJCUmKitcLX5cL15dPT8vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1s/Oiw7Ll0vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXFsoe10vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bXF0pfV0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleDogL14jIS4qJC8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgcHJvcGVydHk6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoPzooXFxzKykoXFx3KykpPyhcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzpoKD86aWZ0fG93KD86TW9kKD86ZWxlc3NEaWFsb2d8YWxEaWFsb2cpfEhlbHApKXxjcm9sbCg/Olh8QnkoPzpQYWdlc3xMaW5lcyk/fFl8VG8pP3x0KD86b3B8cmlrZSl8aSg/Om58emVUb0NvbnRlbnR8ZGViYXJ8Z25UZXh0KXxvcnR8dSg/OnB8Yig/OnN0cig/OmluZyk/KT8pfHBsaSg/OmNlfHQpfGUoPzpuZHx0KD86UmUoPzpzaXphYmxlfHF1ZXN0SGVhZGVyKXxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG8oPzp0S2V5c3x1cnMpfFllYXJ8Q3Vyc29yfFRpbWUoPzpvdXQpP3xJbnRlcnZhbHxaT3B0aW9uc3xEYXRlfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYXRlfEZ1bGxZZWFyKXxGdWxsWWVhcnxBY3RpdmUpfGFyY2gpfHFydHxsaWNlfGF2ZVByZWZlcmVuY2VzfG1hbGwpfGgoPzpvbWV8YW5kbGVFdmVudCl8bmF2aWdhdGV8Yyg/Omhhcig/OkNvZGVBdHxBdCl8byg/OnN8big/OmNhdHx0ZXh0dWFsfGZpcm0pfG1waWxlKXxlaWx8bGVhcig/OlRpbWVvdXR8SW50ZXJ2YWwpP3xhKD86cHR1cmVFdmVudHN8bGwpfHJlYXRlKD86U3R5bGVTaGVldHxQb3B1cHxFdmVudE9iamVjdCkpfHQoPzpvKD86R01UU3RyaW5nfFMoPzp0cmluZ3xvdXJjZSl8VSg/OlRDU3RyaW5nfHBwZXJDYXNlKXxMbyg/OmNhbGVTdHJpbmd8d2VyQ2FzZSkpfGVzdHxhKD86bnxpbnQoPzpFbmFibGVkKT8pKXxpKD86cyg/Ok5hTnxGaW5pdGUpfG5kZXhPZnx0YWxpY3MpfGQoPzppc2FibGVFeHRlcm5hbENhcHR1cmV8dW1wfGV0YWNoRXZlbnQpfHUoPzpuKD86c2hpZnR8dGFpbnR8ZXNjYXBlfHdhdGNoKXxwZGF0ZUNvbW1hbmRzKXxqKD86b2lufGF2YUVuYWJsZWQpfHAoPzpvKD86cHx3KXx1c2h8bHVnaW5zLnJlZnJlc2h8YSg/OmRkaW5nc3xyc2UoPzpJbnR8RmxvYXQpPyl8cig/OmludHxvbXB0fGVmZXJlbmNlKSl8ZSg/OnNjYXBlfG5hYmxlRXh0ZXJuYWxDYXB0dXJlfHZhbHxsZW1lbnRGcm9tUG9pbnR8eCg/OnB8ZWMoPzpTY3JpcHR8Q29tbWFuZCk/KSl8dmFsdWVPZnxVVEN8cXVlcnlDb21tYW5kKD86U3RhdGV8SW5kZXRlcm18RW5hYmxlZHxWYWx1ZSl8Zig/OmkoPzpuZHxsZSg/Ok1vZGlmaWVkRGF0ZXxTaXplfENyZWF0ZWREYXRlfFVwZGF0ZWREYXRlKXx4ZWQpfG8oPzpudCg/OnNpemV8Y29sb3IpfHJ3YXJkKXxsb29yfHJvbUNoYXJDb2RlKXx3YXRjaHxsKD86aW5rfG8oPzphZHxnKXxhc3RJbmRleE9mKXxhKD86c2lufG5jaG9yfGNvc3x0KD86dGFjaEV2ZW50fG9ifGFuKD86Mik/KXxwcGx5fGxlcnR8Yig/OnN8b3J0KSl8cig/Om91KD86bmR8dGVFdmVudHMpfGUoPzpzaXplKD86Qnl8VG8pfGNhbGN8dHVyblZhbHVlfHBsYWNlfHZlcnNlfGwoPzpvYWR8ZWFzZSg/OkNhcHR1cmV8RXZlbnRzKSkpfGFuZG9tKXxnKD86b3xldCg/OlJlc3BvbnNlSGVhZGVyfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2UoPzpjb25kc3xsZWN0aW9uKXxIb3Vyc3xZZWFyfFRpbWUoPzp6b25lT2Zmc2V0KT98RGEoPzp5fHRlKXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGEoPzp5fHRlKXxGdWxsWWVhcil8RnVsbFllYXJ8QSg/OnR0ZW50aW9ufGxsUmVzcG9uc2VIZWFkZXJzKSkpfG0oPzppbnxvdmUoPzpCKD86eXxlbG93KXxUbyg/OkFic29sdXRlKT98QWJvdmUpfGVyZ2VBdHRyaWJ1dGVzfGEoPzp0Y2h8cmdpbnN8eCkpfGIoPzp0b2F8aWd8byg/OmxkfHJkZXJXaWR0aHMpfGxpbmt8YWNrKSlcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbi5kb20iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp1Yig/OnN0cmluZ0RhdGF8bWl0KXxwbGl0VGV4dHxlKD86dCg/Ok5hbWVkSXRlbXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGxlY3QpKXxoYXMoPzpDaGlsZE5vZGVzfEZlYXR1cmUpfG5hbWVkSXRlbXxjKD86bCg/Omlja3xvKD86c2V8bmVOb2RlKSl8cmVhdGUoPzpDKD86b21tZW50fERBVEFTZWN0aW9ufGFwdGlvbil8VCg/OkhlYWR8ZXh0Tm9kZXxGb290KXxEb2N1bWVudEZyYWdtZW50fFByb2Nlc3NpbmdJbnN0cnVjdGlvbnxFKD86bnRpdHlSZWZlcmVuY2V8bGVtZW50KXxBdHRyaWJ1dGUpKXx0YWJJbmRleHxpKD86bnNlcnQoPzpSb3d8QmVmb3JlfENlbGx8RGF0YSl8dGVtKXxvcGVufGRlbGV0ZSg/OlJvd3xDKD86ZWxsfGFwdGlvbil8VCg/OkhlYWR8Rm9vdCl8RGF0YSl8Zm9jdXN8d3JpdGUoPzpsbik/fGEoPzpkZHxwcGVuZCg/OkNoaWxkfERhdGEpKXxyZSg/OnNldHxwbGFjZSg/OkNoaWxkfERhdGEpfG1vdmUoPzpOYW1lZEl0ZW18Q2hpbGR8QXR0cmlidXRlKD86Tm9kZSk/KT8pfGdldCg/Ok5hbWVkSXRlbXxFbGVtZW50KD86c0J5KD86TmFtZXxUYWdOYW1lfENsYXNzTmFtZSl8QnlJZCl8QXR0cmlidXRlKD86Tm9kZSk/KXxibHVyKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICAic3VwcG9ydC5jb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnlzdGVtTGFuZ3VhZ2V8Y3IoPzppcHRzfG9sbGJhcnN8ZWVuKD86WHxZfFRvcHxMZWZ0KSl8dCg/OnlsZSg/OlNoZWV0cyk/fGF0dXMoPzpUZXh0fGJhcik/KXxpYmxpbmcoPzpCZWxvd3xBYm92ZSl8b3VyY2V8dWZmaXhlc3xlKD86Y3VyaXR5KD86UG9saWN5KT98bCg/OmVjdGlvbnxmKSkpfGgoPzppc3Rvcnl8b3N0KD86bmFtZSk/fGFzKD86aHxGb2N1cykpfHl8WCg/Ok1MRG9jdW1lbnR8U0xEb2N1bWVudCl8big/OmV4dHxhbWUoPzpzcGFjZSg/OnN8VVJJKXxQcm9wKSl8TSg/OklOX1ZBTFVFfEFYX1ZBTFVFKXxjKD86aGFyYWN0ZXJTZXR8byg/Om4oPzpzdHJ1Y3Rvcnx0cm9sbGVycyl8b2tpZUVuYWJsZWR8bG9yRGVwdGh8bXAoPzpvbmVudHN8bGV0ZSkpfHVycmVudHxwdUNsYXNzfGwoPzppKD86cCg/OmJvYXJkRGF0YSk/fGVudEluZm9ybWF0aW9uKXxvc2VkfGFzc2VzKXxhbGxlKD86ZXxyKXxyeXB0byl8dCg/Om8oPzpvbGJhcnxwKXxleHQoPzpUcmFuc2Zvcm18SW5kZW50fERlY29yYXRpb258QWxpZ24pfGFncyl8U1FSVCg/OjFfMnwyKXxpKD86big/Om5lcig/OkhlaWdodHxXaWR0aCl8cHV0KXxkc3xnbm9yZUNhc2UpfHpJbmRleHxvKD86c2NwdXxuKD86cmVhZHlzdGF0ZWNoYW5nZXxMaW5lKXx1dGVyKD86SGVpZ2h0fFdpZHRoKXxwKD86c1Byb2ZpbGV8ZW5lcil8ZmZzY3JlZW5CdWZmZXJpbmcpfE5FR0FUSVZFX0lORklOSVRZfGQoPzppKD86c3BsYXl8YWxvZyg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdHxBcmd1bWVudHMpfHJlY3Rvcmllcyl8ZSg/OnNjcmlwdGlvbnxmYXVsdCg/OlN0YXR1c3xDaCg/OmVja2VkfGFyc2V0KXxWaWV3KSkpfHUoPzpzZXIoPzpQcm9maWxlfExhbmd1YWdlfEFnZW50KXxuKD86aXF1ZUlEfGRlZmluZWQpfHBkYXRlSW50ZXJ2YWwpfF9jb250ZW50fHAoPzppeGVsRGVwdGh8b3J0fGVyc29uYWxiYXJ8a2NzMTF8bCg/OnVnaW5zfGF0Zm9ybSl8YSg/OnRobmFtZXxkZGluZyg/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCl8cmVudCg/OldpbmRvd3xMYXllcik/fGdlKD86WCg/Ok9mZnNldCk/fFkoPzpPZmZzZXQpPykpfHIoPzpvKD86dG8oPzpjb2x8dHlwZSl8ZHVjdCg/OlN1Yik/fG1wdGVyKXxlKD86dmlvdXN8Zml4KSkpfGUoPzpuKD86Y29kaW5nfGFibGVkUGx1Z2luKXx4KD86dGVybmFsfHBhbmRvKXxtYmVkcyl8dig/OmlzaWJpbGl0eXxlbmRvcig/OlN1Yik/fExpbmtjb2xvcil8VVJMVW5lbmNvZGVkfFAoPzpJfE9TSVRJVkVfSU5GSU5JVFkpfGYoPzppbGVuYW1lfG8oPzpudCg/OlNpemV8RmFtaWx5fFdlaWdodCl8cm1OYW1lKXxyYW1lKD86c3xFbGVtZW50KXxnQ29sb3IpfEV8d2hpdGVTcGFjZXxsKD86aSg/OnN0U3R5bGVUeXBlfG4oPzplSGVpZ2h0fGtDb2xvcikpfG8oPzpjYSg/OnRpb24oPzpiYXIpP3xsTmFtZSl8d3NyYyl8ZSg/Om5ndGh8ZnQoPzpDb250ZXh0KT8pfGEoPzpzdCg/Ok0oPzpvZGlmaWVkfGF0Y2gpfEluZGV4fFBhcmVuKXx5ZXIoPzpzfFgpfG5ndWFnZSkpfGEoPzpwcCg/Ok1pbm9yVmVyc2lvbnxOYW1lfENvKD86ZGVOYW1lfHJlKXxWZXJzaW9uKXx2YWlsKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0KXxsbHxyKD86aXR5fGd1bWVudHMpfExpbmtjb2xvcnxib3ZlKXxyKD86aWdodCg/OkNvbnRleHQpP3xlKD86c3BvbnNlKD86WE1MfFRleHQpfGFkeVN0YXRlKSl8Z2xvYmFsfHh8bSg/OmltZVR5cGVzfHVsdGlsaW5lfGVudWJhcnxhcmdpbig/OlJpZ2h0fEJvdHRvbXxUb3B8TGVmdCkpfEwoPzpOKD86MTB8Mil8T0coPzoxMEV8MkUpKXxiKD86byg/OnR0b218cmRlcig/OldpZHRofFJpZ2h0V2lkdGh8Qm90dG9tV2lkdGh8U3R5bGV8Q29sb3J8VG9wV2lkdGh8TGVmdFdpZHRoKSl8dWZmZXJEZXB0aHxlbG93fGFja2dyb3VuZCg/OkNvbG9yfEltYWdlKSkpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImlkZW50aWZpZXIiLAogICAgICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJzdGFydCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC8iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccyt8XiQiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIvW3N4bmdpbXldKiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImludmFsaWQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9ce1xkK1xiLD9cZCpcfVsrKl18WysqJF4/XVsrKl18WyReXVs/XXxcP3szLH0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1woXD9bOj0hXXxcKXxce1xkK1xiLD9cZCpcfXxbKypdXD98WygpJF4rKj8uXS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZGVsaW1pdGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHwvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFtcXj8vLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5jaGFyY2xhc3Mua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwoPzp1W1xcZGEtZkEtRl17NH18eFtcXGRhLWZBLUZdezJ9fC4pIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICAgICAgbmV4dDogInJlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogIi0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cC5jaGFyYWNodGVyY2xhc3MiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbl9hcmd1bWVudHMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUucGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiBpZGVudGlmaWVyUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIlssIF0rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxcXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CgoKICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5ub0VTNikgewogICAgICAgIHRoaXMuJHJ1bGVzLm5vX3JlZ2V4LnVuc2hpZnQoewogICAgICAgICAgICByZWdleDogIlt7fV0iLCBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09ICJ7IiA/IHRoaXMubmV4dFN0YXRlIDogIiI7CiAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KCJzdGFydCIsIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEgfHwgdGhpcy5uZXh0LmluZGV4T2YoImpzeCIpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLnF1YXNpLmVuZCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09ICJ7IiA/ICJwYXJlbi5scGFyZW4iIDogInBhcmVuLnJwYXJlbiI7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5leHRTdGF0ZTogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cJHsvLAogICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdWFzaSIKICAgICAgICAgICAgfV0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuanN4ICE9IGZhbHNlKQogICAgICAgICAgICBKU1guY2FsbCh0aGlzKTsKICAgIH0KCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgibm9fcmVnZXgiKSBdKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZnVuY3Rpb24gSlNYKCkgewogICAgdmFyIHRhZ1JlZ2V4ID0gaWRlbnRpZmllclJlLnJlcGxhY2UoIlxcZCIsICJcXGRcXC0iKTsKICAgIHZhciBqc3hUYWcgPSB7CiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB2YWwuY2hhckF0KDEpID09ICIvIiA/IDIgOiAxOwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IDEpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCwgdGhpcy5uZXh0U3RhdGUsIDApOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgIHN0YWNrWzJdKys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSB0aGlzLm5leHRTdGF0ZSkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcucHVuY3R1YXRpb24uIiArIChvZmZzZXQgPT0gMSA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zbGljZSgwLCBvZmZzZXQpCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy50YWctbmFtZS54bWwiLAogICAgICAgICAgICAgICAgdmFsdWU6IHZhbC5zdWJzdHIob2Zmc2V0KQogICAgICAgICAgICB9XTsKICAgICAgICB9LAogICAgICAgIHJlZ2V4IDogIjwvPyIgKyB0YWdSZWdleCArICIiLAogICAgICAgIG5leHQ6ICJqc3hBdHRyaWJ1dGVzIiwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9OwogICAgdGhpcy4kcnVsZXMuc3RhcnQudW5zaGlmdChqc3hUYWcpOwogICAgdmFyIGpzeEpzUnVsZSA9IHsKICAgICAgICByZWdleDogInsiLAogICAgICAgIHRva2VuOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgIHB1c2g6ICJzdGFydCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5qc3ggPSBbCiAgICAgICAganN4SnNSdWxlLAogICAgICAgIGpzeFRhZywKICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgIF07CiAgICB0aGlzLiRydWxlcy5qc3hBdHRyaWJ1dGVzID0gW3sKICAgICAgICB0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwKICAgICAgICByZWdleCA6ICIvPz4iLAogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09IHN0YWNrWzBdKQogICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2tbMF0gPT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdIHx8ICJzdGFydCI7CiAgICAgICAgICAgIHJldHVybiBbe3R5cGU6IHRoaXMudG9rZW4sIHZhbHVlOiB2YWx1ZX1dOwogICAgICAgIH0sCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfSwKICAgIGpzeEpzUnVsZSwKICAgIGNvbW1lbnRzKCJqc3hBdHRyaWJ1dGVzIiksCiAgICB7CiAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnhtbCIsCiAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgIHJlZ2V4IDogIj0iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIHN0YXRlTmFtZSA6ICJqc3hfYXR0cl9xcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwKICAgIGpzeFRhZwogICAgXTsKICAgIHRoaXMuJHJ1bGVzLnJlZmVyZW5jZSA9IFt7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgfV07Cn0KCmZ1bmN0aW9uIGNvbW1lbnRzKG5leHQpIHsKICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gbXVsdGkgbGluZSBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogL1wvXCovLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleCA6ICJcXC9cXC8iLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQiLCByZWdleCA6ICIkfF4iLCBuZXh0IDogbmV4dCB8fCAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9CiAgICBdOwp9CmV4cG9ydHMuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiKS5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwogICAgCiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJHF1b3RlcyA9IHsnIic6ICciJywgIiciOiAiJyIsICJgIjogImAifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIHZhciB0b2tlbml6ZWRMaW5lID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKTsKICAgICAgICB2YXIgdG9rZW5zID0gdG9rZW5pemVkTGluZS50b2tlbnM7CiAgICAgICAgdmFyIGVuZFN0YXRlID0gdG9rZW5pemVkTGluZS5zdGF0ZTsKCiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiIHx8IHN0YXRlID09ICJub19yZWdleCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qKD86XGJjYXNlXGIuKjp8W1x7XChcW10pXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09ICJkb2Mtc3RhcnQiKSB7CiAgICAgICAgICAgIGlmIChlbmRTdGF0ZSA9PSAic3RhcnQiIHx8IGVuZFN0YXRlID09ICJub19yZWdleCIpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXHMqKFwvPylcKi8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgewogICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAiICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiogIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS9qYXZhc2NyaXB0X3dvcmtlciIsICJKYXZhU2NyaXB0V29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKHJlc3VsdHMpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhyZXN1bHRzLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvamF2YXNjcmlwdCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2JlaGF2aW91ciIsImFjZS90b2tlbl9pdGVyYXRvciIsImFjZS9saWIvbGFuZyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9Cgp2YXIgWG1sQmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gJyInIHx8IHRleHQgPT0gIiciKSB7CiAgICAgICAgICAgIHZhciBxdW90ZSA9IHRleHQ7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKSk7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZCAhPT0gIiIgJiYgc2VsZWN0ZWQgIT09ICInIiAmJiBzZWxlY3RlZCAhPSAnIicgJiYgZWRpdG9yLmdldFdyYXBCZWhhdmlvdXJzRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgc2VsZWN0ZWQgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwoKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBxdW90ZSAmJiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSB8fCBpcyh0b2tlbiwgInN0cmluZyIpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgd2hpbGUgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgIndoaXRlc3BhY2UiKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmlnaHRTcGFjZSA9ICFyaWdodENoYXIgfHwgcmlnaHRDaGFyLm1hdGNoKC9ccy8pOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtZXF1YWxzIikgJiYgKHJpZ2h0U3BhY2UgfHwgcmlnaHRDaGFyID09ICc+JykgfHwgKGlzKHRva2VuLCAiZGVjbC1hdHRyaWJ1dGUtZXF1YWxzIikgJiYgKHJpZ2h0U3BhY2UgfHwgcmlnaHRDaGFyID09ICc/JykpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6IHF1b3RlICsgcXVvdGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiZGVsZXRpb24iLCBmdW5jdGlvbihzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgKHNlbGVjdGVkID09ICciJyB8fCBzZWxlY3RlZCA9PSAiJyIpKSB7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uICsgMSwgcmFuZ2Uuc3RhcnQuY29sdW1uICsgMik7CiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gc2VsZWN0ZWQpIHsKICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4rKzsKICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJhdXRvY2xvc2luZyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7CiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpLnN0YXJ0OwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpIHx8IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICBpZiAoIXRva2VuIHx8ICEoaXModG9rZW4sICJ0YWctbmFtZSIpIHx8IGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtZXF1YWxzIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgInJlZmVyZW5jZS5hdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpIHsKICAgICAgICAgICAgICAgIHZhciB0b2tlbkVuZENvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA8IHRva2VuRW5kQ29sdW1uKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPT0gdG9rZW5FbmRDb2x1bW4pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFRva2VuICYmIGlzKG5leHRUb2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgvXlxzKj4vLnRlc3Qoc2Vzc2lvbi5nZXRMaW5lKHBvc2l0aW9uLnJvdykuc2xpY2UocG9zaXRpb24uY29sdW1uKSkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHdoaWxlICghaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09ICI8IikgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEZvcndhcmQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHRva2VuUm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgIHZhciB0b2tlbkNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICBpZiAoaXMoaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCksICJlbmQtdGFnLW9wZW4iKSkKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgIGlmICh0b2tlblJvdyA9PSBwb3NpdGlvbi5yb3cpCiAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5zdWJzdHJpbmcoMCwgcG9zaXRpb24uY29sdW1uIC0gdG9rZW5Db2x1bW4pOwoKICAgICAgICAgICAgaWYgKHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KGVsZW1lbnQudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgdGV4dDogIj4iICsgIjwvIiArIGVsZW1lbnQgKyAiPiIsCiAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9pbmRlbnQiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICJcbiIpIHsKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwoKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigidGFnLWNsb3NlIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIi8+IikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctbmFtZSIpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgdGFnID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB2YXIgcm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlLmluZGV4T2YoImVuZC10YWciKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMudm9pZEVsZW1lbnRzICYmICF0aGlzLnZvaWRFbGVtZW50c1t0YWddKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKzEpOwogICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRJbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGVudCA9IG5leHRJbmRlbnQgKyBzZXNzaW9uLmdldFRhYlN0cmluZygpOwoKICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFRva2VuICYmIG5leHRUb2tlbi52YWx1ZSA9PT0gIjwvIikgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogIlxuIiArIGluZGVudCArICJcbiIgKyBuZXh0SW5kZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgaW5kZW50Lmxlbmd0aCwgMSwgaW5kZW50Lmxlbmd0aF0KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogIlxuIiArIGluZGVudAogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKfTsKCm9vcC5pbmhlcml0cyhYbWxCZWhhdmlvdXIsIEJlaGF2aW91cik7CgpleHBvcnRzLlhtbEJlaGF2aW91ciA9IFhtbEJlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUveG1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3htbF9oaWdobGlnaHRfcnVsZXMiKS5YbWxIaWdobGlnaHRSdWxlczsKdmFyIFhtbEJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cjsKdmFyIFhtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL3htbCIpLkZvbGRNb2RlOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gWG1sSGlnaGxpZ2h0UnVsZXM7CiAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBYbWxCZWhhdmlvdXIoKTsKICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgWG1sRm9sZE1vZGUoKTsKfTsKCm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy52b2lkRWxlbWVudHMgPSBsYW5nLmFycmF5VG9NYXAoW10pOwoKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiPCEtLSIsIGVuZDogIi0tPiJ9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciB3b3JrZXIgPSBuZXcgV29ya2VyQ2xpZW50KFsiYWNlIl0sICJhY2UvbW9kZS94bWxfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwogICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS94bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBNaXhlZEZvbGRNb2RlID0gcmVxdWlyZSgiLi9taXhlZCIpLkZvbGRNb2RlOwp2YXIgWG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL3htbCIpLkZvbGRNb2RlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKHZvaWRFbGVtZW50cywgb3B0aW9uYWxUYWdzKSB7CiAgICBNaXhlZEZvbGRNb2RlLmNhbGwodGhpcywgbmV3IFhtbEZvbGRNb2RlKHZvaWRFbGVtZW50cywgb3B0aW9uYWxUYWdzKSwgewogICAgICAgICJqcy0iOiBuZXcgQ1N0eWxlRm9sZE1vZGUoKSwKICAgICAgICAiY3NzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpCiAgICB9KTsKfTsKCm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgTWl4ZWRGb2xkTW9kZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgY29tbW9uQXR0cmlidXRlcyA9IFsKICAgICJhY2Nlc3NrZXkiLAogICAgImNsYXNzIiwKICAgICJjb250ZW50ZWRpdGFibGUiLAogICAgImNvbnRleHRtZW51IiwKICAgICJkaXIiLAogICAgImRyYWdnYWJsZSIsCiAgICAiZHJvcHpvbmUiLAogICAgImhpZGRlbiIsCiAgICAiaWQiLAogICAgImluZXJ0IiwKICAgICJpdGVtaWQiLAogICAgIml0ZW1wcm9wIiwKICAgICJpdGVtcmVmIiwKICAgICJpdGVtc2NvcGUiLAogICAgIml0ZW10eXBlIiwKICAgICJsYW5nIiwKICAgICJzcGVsbGNoZWNrIiwKICAgICJzdHlsZSIsCiAgICAidGFiaW5kZXgiLAogICAgInRpdGxlIiwKICAgICJ0cmFuc2xhdGUiCl07Cgp2YXIgZXZlbnRBdHRyaWJ1dGVzID0gWwogICAgIm9uYWJvcnQiLAogICAgIm9uYmx1ciIsCiAgICAib25jYW5jZWwiLAogICAgIm9uY2FucGxheSIsCiAgICAib25jYW5wbGF5dGhyb3VnaCIsCiAgICAib25jaGFuZ2UiLAogICAgIm9uY2xpY2siLAogICAgIm9uY2xvc2UiLAogICAgIm9uY29udGV4dG1lbnUiLAogICAgIm9uY3VlY2hhbmdlIiwKICAgICJvbmRibGNsaWNrIiwKICAgICJvbmRyYWciLAogICAgIm9uZHJhZ2VuZCIsCiAgICAib25kcmFnZW50ZXIiLAogICAgIm9uZHJhZ2xlYXZlIiwKICAgICJvbmRyYWdvdmVyIiwKICAgICJvbmRyYWdzdGFydCIsCiAgICAib25kcm9wIiwKICAgICJvbmR1cmF0aW9uY2hhbmdlIiwKICAgICJvbmVtcHRpZWQiLAogICAgIm9uZW5kZWQiLAogICAgIm9uZXJyb3IiLAogICAgIm9uZm9jdXMiLAogICAgIm9uaW5wdXQiLAogICAgIm9uaW52YWxpZCIsCiAgICAib25rZXlkb3duIiwKICAgICJvbmtleXByZXNzIiwKICAgICJvbmtleXVwIiwKICAgICJvbmxvYWQiLAogICAgIm9ubG9hZGVkZGF0YSIsCiAgICAib25sb2FkZWRtZXRhZGF0YSIsCiAgICAib25sb2Fkc3RhcnQiLAogICAgIm9ubW91c2Vkb3duIiwKICAgICJvbm1vdXNlbW92ZSIsCiAgICAib25tb3VzZW91dCIsCiAgICAib25tb3VzZW92ZXIiLAogICAgIm9ubW91c2V1cCIsCiAgICAib25tb3VzZXdoZWVsIiwKICAgICJvbnBhdXNlIiwKICAgICJvbnBsYXkiLAogICAgIm9ucGxheWluZyIsCiAgICAib25wcm9ncmVzcyIsCiAgICAib25yYXRlY2hhbmdlIiwKICAgICJvbnJlc2V0IiwKICAgICJvbnNjcm9sbCIsCiAgICAib25zZWVrZWQiLAogICAgIm9uc2Vla2luZyIsCiAgICAib25zZWxlY3QiLAogICAgIm9uc2hvdyIsCiAgICAib25zdGFsbGVkIiwKICAgICJvbnN1Ym1pdCIsCiAgICAib25zdXNwZW5kIiwKICAgICJvbnRpbWV1cGRhdGUiLAogICAgIm9udm9sdW1lY2hhbmdlIiwKICAgICJvbndhaXRpbmciCl07Cgp2YXIgZ2xvYmFsQXR0cmlidXRlcyA9IGNvbW1vbkF0dHJpYnV0ZXMuY29uY2F0KGV2ZW50QXR0cmlidXRlcyk7Cgp2YXIgYXR0cmlidXRlTWFwID0gewogICAgImEiOiB7ImhyZWYiOiAxLCAidGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAidG9wIjogMX0sICJwaW5nIjogMSwgInJlbCI6IHsibm9mb2xsb3ciOiAxLCAiYWx0ZXJuYXRlIjogMSwgImF1dGhvciI6IDEsICJib29rbWFyayI6IDEsICJoZWxwIjogMSwgImxpY2Vuc2UiOiAxLCAibmV4dCI6IDEsICJub3JlZmVycmVyIjogMSwgInByZWZldGNoIjogMSwgInByZXYiOiAxLCAic2VhcmNoIjogMSwgInRhZyI6IDF9LCAibWVkaWEiOiAxLCAiaHJlZmxhbmciOiAxLCAidHlwZSI6IDF9LAogICAgImFiYnIiOiB7fSwKICAgICJhZGRyZXNzIjoge30sCiAgICAiYXJlYSI6IHsic2hhcGUiOiAxLCAiY29vcmRzIjogMSwgImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAiYWx0IjogMSwgInRhcmdldCI6IDEsICJtZWRpYSI6IDEsICJyZWwiOiAxLCAicGluZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYXJ0aWNsZSI6IHsicHViZGF0ZSI6IDF9LAogICAgImFzaWRlIjoge30sCiAgICAiYXVkaW8iOiB7InNyYyI6IDEsICJhdXRvYnVmZmVyIjogMSwgImF1dG9wbGF5IjogeyJhdXRvcGxheSI6IDF9LCAibG9vcCI6IHsibG9vcCI6IDF9LCAiY29udHJvbHMiOiB7ImNvbnRyb2xzIjogMX0sICJtdXRlZCI6IHsibXV0ZWQiOiAxfSwgInByZWxvYWQiOiB7ImF1dG8iOiAxLCAibWV0YWRhdGEiOiAxLCAibm9uZSI6IDEgfX0sCiAgICAiYiI6IHt9LAogICAgImJhc2UiOiB7ImhyZWYiOiAxLCAidGFyZ2V0IjogMX0sCiAgICAiYmRpIjoge30sCiAgICAiYmRvIjoge30sCiAgICAiYmxvY2txdW90ZSI6IHsiY2l0ZSI6IDF9LAogICAgImJvZHkiOiB7Im9uYWZ0ZXJwcmludCI6IDEsICJvbmJlZm9yZXByaW50IjogMSwgIm9uYmVmb3JldW5sb2FkIjogMSwgIm9uaGFzaGNoYW5nZSI6IDEsICJvbm1lc3NhZ2UiOiAxLCAib25vZmZsaW5lIjogMSwgIm9ucG9wc3RhdGUiOiAxLCAib25yZWRvIjogMSwgIm9ucmVzaXplIjogMSwgIm9uc3RvcmFnZSI6IDEsICJvbnVuZG8iOiAxLCAib251bmxvYWQiOiAxfSwKICAgICJiciI6IHt9LAogICAgImJ1dHRvbiI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogMSwgImZvcm1tZXRob2QiOiAxLCAiZm9ybW5vdmFsaWRhdGUiOiAxLCAiZm9ybXRhcmdldCI6IDEsICJuYW1lIjogMSwgInZhbHVlIjogMSwgInR5cGUiOiB7ImJ1dHRvbiI6IDEsICJzdWJtaXQiOiAxfX0sCiAgICAiY2FudmFzIjogeyJ3aWR0aCI6IDEsICJoZWlnaHQiOiAxfSwKICAgICJjYXB0aW9uIjoge30sCiAgICAiY2l0ZSI6IHt9LAogICAgImNvZGUiOiB7fSwKICAgICJjb2wiOiB7InNwYW4iOiAxfSwKICAgICJjb2xncm91cCI6IHsic3BhbiI6IDF9LAogICAgImNvbW1hbmQiOiB7InR5cGUiOiAxLCAibGFiZWwiOiAxLCAiaWNvbiI6IDEsICJkaXNhYmxlZCI6IDEsICJjaGVja2VkIjogMSwgInJhZGlvZ3JvdXAiOiAxLCAiY29tbWFuZCI6IDF9LAogICAgImRhdGEiOiB7fSwKICAgICJkYXRhbGlzdCI6IHt9LAogICAgImRkIjoge30sCiAgICAiZGVsIjogeyJjaXRlIjogMSwgImRhdGV0aW1lIjogMX0sCiAgICAiZGV0YWlscyI6IHsib3BlbiI6IDF9LAogICAgImRmbiI6IHt9LAogICAgImRpYWxvZyI6IHsib3BlbiI6IDF9LAogICAgImRpdiI6IHt9LAogICAgImRsIjoge30sCiAgICAiZHQiOiB7fSwKICAgICJlbSI6IHt9LAogICAgImVtYmVkIjogeyJzcmMiOiAxLCAiaGVpZ2h0IjogMSwgIndpZHRoIjogMSwgInR5cGUiOiAxfSwKICAgICJmaWVsZHNldCI6IHsiZGlzYWJsZWQiOiAxLCAiZm9ybSI6IDEsICJuYW1lIjogMX0sCiAgICAiZmlnY2FwdGlvbiI6IHt9LAogICAgImZpZ3VyZSI6IHt9LAogICAgImZvb3RlciI6IHt9LAogICAgImZvcm0iOiB7ImFjY2VwdC1jaGFyc2V0IjogMSwgImFjdGlvbiI6IDEsICJhdXRvY29tcGxldGUiOiAxLCAiZW5jdHlwZSI6IHsibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxfSwgIm1ldGhvZCI6IHsiZ2V0IjogMSwgInBvc3QiOiAxfSwgIm5hbWUiOiAxLCAibm92YWxpZGF0ZSI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfX0sCiAgICAiaDEiOiB7fSwKICAgICJoMiI6IHt9LAogICAgImgzIjoge30sCiAgICAiaDQiOiB7fSwKICAgICJoNSI6IHt9LAogICAgImg2Ijoge30sCiAgICAiaGVhZCI6IHt9LAogICAgImhlYWRlciI6IHt9LAogICAgImhyIjoge30sCiAgICAiaHRtbCI6IHsibWFuaWZlc3QiOiAxfSwKICAgICJpIjoge30sCiAgICAiaWZyYW1lIjogeyJuYW1lIjogMSwgInNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAic2FuZGJveCI6IHsiYWxsb3ctc2FtZS1vcmlnaW4iOiAxLCAiYWxsb3ctdG9wLW5hdmlnYXRpb24iOiAxLCAiYWxsb3ctZm9ybXMiOiAxLCAiYWxsb3ctc2NyaXB0cyI6IDF9LCAic2VhbWxlc3MiOiB7InNlYW1sZXNzIjogMX19LAogICAgImltZyI6IHsiYWx0IjogMSwgInNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgImlzbWFwIjogMX0sCiAgICAiaW5wdXQiOiB7CiAgICAgICAgInR5cGUiOiB7InRleHQiOiAxLCAicGFzc3dvcmQiOiAxLCAiaGlkZGVuIjogMSwgImNoZWNrYm94IjogMSwgInN1Ym1pdCI6IDEsICJyYWRpbyI6IDEsICJmaWxlIjogMSwgImJ1dHRvbiI6IDEsICJyZXNldCI6IDEsICJpbWFnZSI6IDMxLCAiY29sb3IiOiAxLCAiZGF0ZSI6IDEsICJkYXRldGltZSI6IDEsICJkYXRldGltZS1sb2NhbCI6IDEsICJlbWFpbCI6IDEsICJtb250aCI6IDEsICJudW1iZXIiOiAxLCAicmFuZ2UiOiAxLCAic2VhcmNoIjogMSwgInRlbCI6IDEsICJ0aW1lIjogMSwgInVybCI6IDEsICJ3ZWVrIjogMX0sCiAgICAgICAgImFjY2VwdCI6IDEsICJhbHQiOiAxLCAiYXV0b2NvbXBsZXRlIjogeyJvbiI6IDEsICJvZmYiOiAxfSwgImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJjaGVja2VkIjogeyJjaGVja2VkIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAiZm9ybWFjdGlvbiI6IDEsICJmb3JtZW5jdHlwZSI6IHsiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjogMSwgIm11bHRpcGFydC9mb3JtLWRhdGEiOiAxLCAidGV4dC9wbGFpbiI6IDF9LCAiZm9ybW1ldGhvZCI6IHsiZ2V0IjogMSwgInBvc3QiOiAxfSwgImZvcm1ub3ZhbGlkYXRlIjogeyJmb3Jtbm92YWxpZGF0ZSI6IDF9LCAiZm9ybXRhcmdldCI6IHsiX2JsYW5rIjogMSwgIl9zZWxmIjogMSwgIl9wYXJlbnQiOiAxLCAiX3RvcCI6IDF9LCAiaGVpZ2h0IjogMSwgImxpc3QiOiAxLCAibWF4IjogMSwgIm1heGxlbmd0aCI6IDEsICJtaW4iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInBhdHRlcm4iOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInNpemUiOiAxLCAic3JjIjogMSwgInN0ZXAiOiAxLCAid2lkdGgiOiAxLCAiZmlsZXMiOiAxLCAidmFsdWUiOiAxfSwKICAgICJpbnMiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJrYmQiOiB7fSwKICAgICJrZXlnZW4iOiB7ImF1dG9mb2N1cyI6IDEsICJjaGFsbGVuZ2UiOiB7ImNoYWxsZW5nZSI6IDF9LCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImtleXR5cGUiOiB7InJzYSI6IDEsICJkc2EiOiAxLCAiZWMiOiAxfSwgIm5hbWUiOiAxfSwKICAgICJsYWJlbCI6IHsiZm9ybSI6IDEsICJmb3IiOiAxfSwKICAgICJsZWdlbmQiOiB7fSwKICAgICJsaSI6IHsidmFsdWUiOiAxfSwKICAgICJsaW5rIjogeyJocmVmIjogMSwgImhyZWZsYW5nIjogMSwgInJlbCI6IHsic3R5bGVzaGVldCI6IDEsICJpY29uIjogMX0sICJtZWRpYSI6IHsiYWxsIjogMSwgInNjcmVlbiI6IDEsICJwcmludCI6IDF9LCAidHlwZSI6IHsidGV4dC9jc3MiOiAxLCAiaW1hZ2UvcG5nIjogMSwgImltYWdlL2pwZWciOiAxLCAiaW1hZ2UvZ2lmIjogMX0sICJzaXplcyI6IDF9LAogICAgIm1haW4iOiB7fSwKICAgICJtYXAiOiB7Im5hbWUiOiAxfSwKICAgICJtYXJrIjoge30sCiAgICAibWF0aCI6IHt9LAogICAgIm1lbnUiOiB7InR5cGUiOiAxLCAibGFiZWwiOiAxfSwKICAgICJtZXRhIjogeyJodHRwLWVxdWl2IjogeyJjb250ZW50LXR5cGUiOiAxfSwgIm5hbWUiOiB7ImRlc2NyaXB0aW9uIjogMSwgImtleXdvcmRzIjogMX0sICJjb250ZW50IjogeyJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiOiAxfSwgImNoYXJzZXQiOiAxfSwKICAgICJtZXRlciI6IHsidmFsdWUiOiAxLCAibWluIjogMSwgIm1heCI6IDEsICJsb3ciOiAxLCAiaGlnaCI6IDEsICJvcHRpbXVtIjogMX0sCiAgICAibmF2Ijoge30sCiAgICAibm9zY3JpcHQiOiB7ImhyZWYiOiAxfSwKICAgICJvYmplY3QiOiB7InBhcmFtIjogMSwgImRhdGEiOiAxLCAidHlwZSI6IDEsICJoZWlnaHQiIDogMSwgIndpZHRoIjogMSwgInVzZW1hcCI6IDEsICJuYW1lIjogMSwgImZvcm0iOiAxLCAiY2xhc3NpZCI6IDF9LAogICAgIm9sIjogeyJzdGFydCI6IDEsICJyZXZlcnNlZCI6IDF9LAogICAgIm9wdGdyb3VwIjogeyJkaXNhYmxlZCI6IDEsICJsYWJlbCI6IDF9LAogICAgIm9wdGlvbiI6IHsiZGlzYWJsZWQiOiAxLCAic2VsZWN0ZWQiOiAxLCAibGFiZWwiOiAxLCAidmFsdWUiOiAxfSwKICAgICJvdXRwdXQiOiB7ImZvciI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJwIjoge30sCiAgICAicGFyYW0iOiB7Im5hbWUiOiAxLCAidmFsdWUiOiAxfSwKICAgICJwcmUiOiB7fSwKICAgICJwcm9ncmVzcyI6IHsidmFsdWUiOiAxLCAibWF4IjogMX0sCiAgICAicSI6IHsiY2l0ZSI6IDF9LAogICAgInJwIjoge30sCiAgICAicnQiOiB7fSwKICAgICJydWJ5Ijoge30sCiAgICAicyI6IHt9LAogICAgInNhbXAiOiB7fSwKICAgICJzY3JpcHQiOiB7ImNoYXJzZXQiOiAxLCAidHlwZSI6IHsidGV4dC9qYXZhc2NyaXB0IjogMX0sICJzcmMiOiAxLCAiZGVmZXIiOiAxLCAiYXN5bmMiOiAxfSwKICAgICJzZWxlY3QiOiB7ImF1dG9mb2N1cyI6IDEsICJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm11bHRpcGxlIjogeyJtdWx0aXBsZSI6IDF9LCAibmFtZSI6IDEsICJzaXplIjogMSwgInJlYWRvbmx5Ijp7InJlYWRvbmx5IjogMX19LAogICAgInNtYWxsIjoge30sCiAgICAic291cmNlIjogeyJzcmMiOiAxLCAidHlwZSI6IDEsICJtZWRpYSI6IDF9LAogICAgInNwYW4iOiB7fSwKICAgICJzdHJvbmciOiB7fSwKICAgICJzdHlsZSI6IHsidHlwZSI6IDEsICJtZWRpYSI6IHsiYWxsIjogMSwgInNjcmVlbiI6IDEsICJwcmludCI6IDF9LCAic2NvcGVkIjogMX0sCiAgICAic3ViIjoge30sCiAgICAic3VwIjoge30sCiAgICAic3ZnIjoge30sCiAgICAidGFibGUiOiB7InN1bW1hcnkiOiAxfSwKICAgICJ0Ym9keSI6IHt9LAogICAgInRkIjogeyJoZWFkZXJzIjogMSwgInJvd3NwYW4iOiAxLCAiY29sc3BhbiI6IDF9LAogICAgInRleHRhcmVhIjogeyJhdXRvZm9jdXMiOiB7ImF1dG9mb2N1cyI6IDF9LCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgIm1heGxlbmd0aCI6IDEsICJuYW1lIjogMSwgInBsYWNlaG9sZGVyIjogMSwgInJlYWRvbmx5IjogeyJyZWFkb25seSI6IDF9LCAicmVxdWlyZWQiOiB7InJlcXVpcmVkIjogMX0sICJyb3dzIjogMSwgImNvbHMiOiAxLCAid3JhcCI6IHsib24iOiAxLCAib2ZmIjogMSwgImhhcmQiOiAxLCAic29mdCI6IDF9fSwKICAgICJ0Zm9vdCI6IHt9LAogICAgInRoIjogeyJoZWFkZXJzIjogMSwgInJvd3NwYW4iOiAxLCAiY29sc3BhbiI6IDEsICJzY29wZSI6IDF9LAogICAgInRoZWFkIjoge30sCiAgICAidGltZSI6IHsiZGF0ZXRpbWUiOiAxfSwKICAgICJ0aXRsZSI6IHt9LAogICAgInRyIjoge30sCiAgICAidHJhY2siOiB7ImtpbmQiOiAxLCAic3JjIjogMSwgInNyY2xhbmciOiAxLCAibGFiZWwiOiAxLCAiZGVmYXVsdCI6IDF9LAogICAgInNlY3Rpb24iOiB7fSwKICAgICJzdW1tYXJ5Ijoge30sCiAgICAidSI6IHt9LAogICAgInVsIjoge30sCiAgICAidmFyIjoge30sCiAgICAidmlkZW8iOiB7InNyYyI6IDEsICJhdXRvYnVmZmVyIjogMSwgImF1dG9wbGF5IjogeyJhdXRvcGxheSI6IDF9LCAibG9vcCI6IHsibG9vcCI6IDF9LCAiY29udHJvbHMiOiB7ImNvbnRyb2xzIjogMX0sICJ3aWR0aCI6IDEsICJoZWlnaHQiOiAxLCAicG9zdGVyIjogMSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMX19LAogICAgIndiciI6IHt9Cn07Cgp2YXIgZWxlbWVudHMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXApOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCmZ1bmN0aW9uIGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcykgewogICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zLnJvdywgcG9zLmNvbHVtbik7CiAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgIHdoaWxlICh0b2tlbiAmJiAhaXModG9rZW4sICJ0YWctbmFtZSIpKXsKICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgfQogICAgaWYgKHRva2VuKQogICAgICAgIHJldHVybiB0b2tlbi52YWx1ZTsKfQoKZnVuY3Rpb24gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9Cgp2YXIgSHRtbENvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7Cgp9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQocG9zLnJvdywgcG9zLmNvbHVtbik7CgogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpIHx8IGlzKHRva2VuLCAidGFnLW9wZW4iKSB8fCBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUYWdDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgIGlmICgvJlthLXpdKiQvaS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRIVE1MRW50aXR5Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKCiAgICAgICAgcmV0dXJuIFtdOwogICAgfTsKCiAgICB0aGlzLmdldFRhZ0NvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLm1hcChmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LAogICAgICAgICAgICAgICAgbWV0YTogInRhZyIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIGlmICghdGFnTmFtZSkKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIHZhciBhdHRyaWJ1dGVzID0gZ2xvYmFsQXR0cmlidXRlczsKICAgICAgICBpZiAodGFnTmFtZSBpbiBhdHRyaWJ1dGVNYXApIHsKICAgICAgICAgICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuY29uY2F0KE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5tYXAoZnVuY3Rpb24oYXR0cmlidXRlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IGF0dHJpYnV0ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IGF0dHJpYnV0ZSArICc9IiQwIicsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlVmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0YWdOYW1lID0gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IGZpbmRBdHRyaWJ1dGVOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgCiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCAmJiBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZU1hcFt0YWdOYW1lXSAmJiB0eXBlb2YgYXR0cmlidXRlTWFwW3RhZ05hbWVdW2F0dHJpYnV0ZU5hbWVdID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogImF0dHJpYnV0ZSB2YWx1ZSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB2YWx1ZXMgPSBbJ0FhY3V0ZTsnLCAnYWFjdXRlOycsICdBY2lyYzsnLCAnYWNpcmM7JywgJ2FjdXRlOycsICdBRWxpZzsnLCAnYWVsaWc7JywgJ0FncmF2ZTsnLCAnYWdyYXZlOycsICdhbGVmc3ltOycsICdBbHBoYTsnLCAnYWxwaGE7JywgJ2FtcDsnLCAnYW5kOycsICdhbmc7JywgJ0FyaW5nOycsICdhcmluZzsnLCAnYXN5bXA7JywgJ0F0aWxkZTsnLCAnYXRpbGRlOycsICdBdW1sOycsICdhdW1sOycsICdiZHF1bzsnLCAnQmV0YTsnLCAnYmV0YTsnLCAnYnJ2YmFyOycsICdidWxsOycsICdjYXA7JywgJ0NjZWRpbDsnLCAnY2NlZGlsOycsICdjZWRpbDsnLCAnY2VudDsnLCAnQ2hpOycsICdjaGk7JywgJ2NpcmM7JywgJ2NsdWJzOycsICdjb25nOycsICdjb3B5OycsICdjcmFycjsnLCAnY3VwOycsICdjdXJyZW47JywgJ0RhZ2dlcjsnLCAnZGFnZ2VyOycsICdkQXJyOycsICdkYXJyOycsICdkZWc7JywgJ0RlbHRhOycsICdkZWx0YTsnLCAnZGlhbXM7JywgJ2RpdmlkZTsnLCAnRWFjdXRlOycsICdlYWN1dGU7JywgJ0VjaXJjOycsICdlY2lyYzsnLCAnRWdyYXZlOycsICdlZ3JhdmU7JywgJ2VtcHR5OycsICdlbXNwOycsICdlbnNwOycsICdFcHNpbG9uOycsICdlcHNpbG9uOycsICdlcXVpdjsnLCAnRXRhOycsICdldGE7JywgJ0VUSDsnLCAnZXRoOycsICdFdW1sOycsICdldW1sOycsICdldXJvOycsICdleGlzdDsnLCAnZm5vZjsnLCAnZm9yYWxsOycsICdmcmFjMTI7JywgJ2ZyYWMxNDsnLCAnZnJhYzM0OycsICdmcmFzbDsnLCAnR2FtbWE7JywgJ2dhbW1hOycsICdnZTsnLCAnZ3Q7JywgJ2hBcnI7JywgJ2hhcnI7JywgJ2hlYXJ0czsnLCAnaGVsbGlwOycsICdJYWN1dGU7JywgJ2lhY3V0ZTsnLCAnSWNpcmM7JywgJ2ljaXJjOycsICdpZXhjbDsnLCAnSWdyYXZlOycsICdpZ3JhdmU7JywgJ2ltYWdlOycsICdpbmZpbjsnLCAnaW50OycsICdJb3RhOycsICdpb3RhOycsICdpcXVlc3Q7JywgJ2lzaW47JywgJ0l1bWw7JywgJ2l1bWw7JywgJ0thcHBhOycsICdrYXBwYTsnLCAnTGFtYmRhOycsICdsYW1iZGE7JywgJ2xhbmc7JywgJ2xhcXVvOycsICdsQXJyOycsICdsYXJyOycsICdsY2VpbDsnLCAnbGRxdW87JywgJ2xlOycsICdsZmxvb3I7JywgJ2xvd2FzdDsnLCAnbG96OycsICdscm07JywgJ2xzYXF1bzsnLCAnbHNxdW87JywgJ2x0OycsICdtYWNyOycsICdtZGFzaDsnLCAnbWljcm87JywgJ21pZGRvdDsnLCAnbWludXM7JywgJ011OycsICdtdTsnLCAnbmFibGE7JywgJ25ic3A7JywgJ25kYXNoOycsICduZTsnLCAnbmk7JywgJ25vdDsnLCAnbm90aW47JywgJ25zdWI7JywgJ050aWxkZTsnLCAnbnRpbGRlOycsICdOdTsnLCAnbnU7JywgJ09hY3V0ZTsnLCAnb2FjdXRlOycsICdPY2lyYzsnLCAnb2NpcmM7JywgJ09FbGlnOycsICdvZWxpZzsnLCAnT2dyYXZlOycsICdvZ3JhdmU7JywgJ29saW5lOycsICdPbWVnYTsnLCAnb21lZ2E7JywgJ09taWNyb247JywgJ29taWNyb247JywgJ29wbHVzOycsICdvcjsnLCAnb3JkZjsnLCAnb3JkbTsnLCAnT3NsYXNoOycsICdvc2xhc2g7JywgJ090aWxkZTsnLCAnb3RpbGRlOycsICdvdGltZXM7JywgJ091bWw7JywgJ291bWw7JywgJ3BhcmE7JywgJ3BhcnQ7JywgJ3Blcm1pbDsnLCAncGVycDsnLCAnUGhpOycsICdwaGk7JywgJ1BpOycsICdwaTsnLCAncGl2OycsICdwbHVzbW47JywgJ3BvdW5kOycsICdQcmltZTsnLCAncHJpbWU7JywgJ3Byb2Q7JywgJ3Byb3A7JywgJ1BzaTsnLCAncHNpOycsICdxdW90OycsICdyYWRpYzsnLCAncmFuZzsnLCAncmFxdW87JywgJ3JBcnI7JywgJ3JhcnI7JywgJ3JjZWlsOycsICdyZHF1bzsnLCAncmVhbDsnLCAncmVnOycsICdyZmxvb3I7JywgJ1JobzsnLCAncmhvOycsICdybG07JywgJ3JzYXF1bzsnLCAncnNxdW87JywgJ3NicXVvOycsICdTY2Fyb247JywgJ3NjYXJvbjsnLCAnc2RvdDsnLCAnc2VjdDsnLCAnc2h5OycsICdTaWdtYTsnLCAnc2lnbWE7JywgJ3NpZ21hZjsnLCAnc2ltOycsICdzcGFkZXM7JywgJ3N1YjsnLCAnc3ViZTsnLCAnc3VtOycsICdzdXA7JywgJ3N1cDE7JywgJ3N1cDI7JywgJ3N1cDM7JywgJ3N1cGU7JywgJ3N6bGlnOycsICdUYXU7JywgJ3RhdTsnLCAndGhlcmU0OycsICdUaGV0YTsnLCAndGhldGE7JywgJ3RoZXRhc3ltOycsICd0aGluc3A7JywgJ1RIT1JOOycsICd0aG9ybjsnLCAndGlsZGU7JywgJ3RpbWVzOycsICd0cmFkZTsnLCAnVWFjdXRlOycsICd1YWN1dGU7JywgJ3VBcnI7JywgJ3VhcnI7JywgJ1VjaXJjOycsICd1Y2lyYzsnLCAnVWdyYXZlOycsICd1Z3JhdmU7JywgJ3VtbDsnLCAndXBzaWg7JywgJ1Vwc2lsb247JywgJ3Vwc2lsb247JywgJ1V1bWw7JywgJ3V1bWw7JywgJ3dlaWVycDsnLCAnWGk7JywgJ3hpOycsICdZYWN1dGU7JywgJ3lhY3V0ZTsnLCAneWVuOycsICdZdW1sOycsICd5dW1sOycsICdaZXRhOycsICd6ZXRhOycsICd6d2o7JywgJ3p3bmo7J107CgogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiaHRtbCBlbnRpdHkiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07Cgp9KS5jYWxsKEh0bWxDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5IdG1sQ29tcGxldGlvbnMgPSBIdG1sQ29tcGxldGlvbnM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL2NzcyIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCIsImFjZS9tb2RlL2h0bWxfY29tcGxldGlvbnMiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEphdmFTY3JpcHRNb2RlID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0IikuTW9kZTsKdmFyIENzc01vZGUgPSByZXF1aXJlKCIuL2NzcyIpLk1vZGU7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwp2YXIgWG1sQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIveG1sIikuWG1sQmVoYXZpb3VyOwp2YXIgSHRtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2h0bWwiKS5Gb2xkTW9kZTsKdmFyIEh0bWxDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vaHRtbF9jb21wbGV0aW9ucyIpLkh0bWxDb21wbGV0aW9uczsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgdm9pZEVsZW1lbnRzID0gWyJhcmVhIiwgImJhc2UiLCAiYnIiLCAiY29sIiwgImVtYmVkIiwgImhyIiwgImltZyIsICJpbnB1dCIsICJrZXlnZW4iLCAibGluayIsICJtZXRhIiwgIm1lbnVpdGVtIiwgInBhcmFtIiwgInNvdXJjZSIsICJ0cmFjayIsICJ3YnIiXTsKdmFyIG9wdGlvbmFsRW5kVGFncyA9IFsibGkiLCAiZHQiLCAiZGQiLCAicCIsICJydCIsICJycCIsICJvcHRncm91cCIsICJvcHRpb24iLCAiY29sZ3JvdXAiLCAidGQiLCAidGgiXTsKCnZhciBNb2RlID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgdGhpcy5mcmFnbWVudENvbnRleHQgPSBvcHRpb25zICYmIG9wdGlvbnMuZnJhZ21lbnRDb250ZXh0OwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEh0bWxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBYbWxCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBIdG1sQ29tcGxldGlvbnMoKTsKICAgIAogICAgdGhpcy5jcmVhdGVNb2RlRGVsZWdhdGVzKHsKICAgICAgICAianMtIjogSmF2YVNjcmlwdE1vZGUsCiAgICAgICAgImNzcy0iOiBDc3NNb2RlCiAgICB9KTsKICAgIAogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgSHRtbEZvbGRNb2RlKHRoaXMudm9pZEVsZW1lbnRzLCBsYW5nLmFycmF5VG9NYXAob3B0aW9uYWxFbmRUYWdzKSk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICI8IS0tIiwgZW5kOiAiLS0+In07CgogICAgdGhpcy52b2lkRWxlbWVudHMgPSBsYW5nLmFycmF5VG9NYXAodm9pZEVsZW1lbnRzKTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHJldHVybiB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbXBsZXRlci5nZXRDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciAhPSBNb2RlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2h0bWxfd29ya2VyIiwgIldvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIGlmICh0aGlzLmZyYWdtZW50Q29udGV4dCkKICAgICAgICAgICAgd29ya2VyLmNhbGwoInNldE9wdGlvbnMiLCBbe2NvbnRleHQ6IHRoaXMuZnJhZ21lbnRDb250ZXh0fV0pOwoKICAgICAgICB3b3JrZXIub24oImVycm9yIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9odG1sIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWFya2Rvd25faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2NvbmZpZyIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG1vZGVzID0gcmVxdWlyZSgiLi4vY29uZmlnIikuJG1vZGVzOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgZXNjYXBlZCA9IGZ1bmN0aW9uKGNoKSB7CiAgICByZXR1cm4gIig/OlteIiArIGxhbmcuZXNjYXBlUmVnRXhwKGNoKSArICJcXFxcXXxcXFxcLikqIjsKfTsKCnZhciBNYXJrZG93bkhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKICAgIHZhciBjb2RlQmxvY2tTdGFydFJ1bGUgPSB7CiAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgcmVnZXggOiAvXlxzKihgYGArW15gXSp8fn5+K1tefl0qKSQvLAogICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgdmFyIG0gPSB2YWx1ZS5tYXRjaCgvXihccyopKFtgfl0rKSguKikvKTsKICAgICAgICAgICAgdmFyIGxhbmd1YWdlID0gL1tcdy1dK3wkLy5leGVjKG1bM10pWzBdOwogICAgICAgICAgICBpZiAoIW1vZGVzW2xhbmd1YWdlXSkKICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gIiI7CiAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoImdpdGh1YmJsb2NrIiwgW10sIFttWzFdLCBtWzJdLCBsYW5ndWFnZV0sIHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgfSwKICAgICAgICBuZXh0ICA6ICJnaXRodWJibG9jayIKICAgIH07CiAgICB2YXIgY29kZUJsb2NrUnVsZXMgPSBbewogICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgIHJlZ2V4IDogIi4qIiwKICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgc3RhdGUsIHN0YWNrLCBsaW5lKSB7CiAgICAgICAgICAgIHZhciBlbWJlZFN0YXRlID0gc3RhY2tbMV07CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBzdGFja1syXVswXTsKICAgICAgICAgICAgdmFyIGVuZE1hcmtlciA9IHN0YWNrWzJdWzFdOwogICAgICAgICAgICB2YXIgbGFuZ3VhZ2UgPSBzdGFja1syXVsyXTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBtID0gL14oXHMqKShgK3x+KylccyokLy5leGVjKHZhbHVlKTsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgbSAmJiBtWzFdLmxlbmd0aCA8IGluZGVudC5sZW5ndGggKyAzCiAgICAgICAgICAgICAgICAmJiBtWzJdLmxlbmd0aCA+PSBlbmRNYXJrZXIubGVuZ3RoICYmIG1bMl1bMF0gPT0gZW5kTWFya2VyWzBdCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgc3RhY2suc3BsaWNlKDAsIDMpOwogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICBpZiAobGFuZ3VhZ2UgJiYgbW9kZXNbbGFuZ3VhZ2VdKSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG1vZGVzW2xhbmd1YWdlXS5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKHZhbHVlLCBlbWJlZFN0YXRlLnNsaWNlKDApKTsKICAgICAgICAgICAgICAgIHN0YWNrWzFdID0gZGF0YS5zdGF0ZTsKICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnRva2VuczsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICB9CiAgICB9XTsKCiAgICB0aGlzLiRydWxlc1sic3RhcnQiXS51bnNoaWZ0KHsKICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICByZWdleCA6ICdeJCcsCiAgICAgICAgbmV4dDogImFsbG93QmxvY2siCiAgICB9LCB7IC8vIGgxCiAgICAgICAgdG9rZW46ICJtYXJrdXAuaGVhZGluZy4xIiwKICAgICAgICByZWdleDogIl49Kyg/PVxccyokKSIKICAgIH0sIHsgLy8gaDIKICAgICAgICB0b2tlbjogIm1hcmt1cC5oZWFkaW5nLjIiLAogICAgICAgIHJlZ2V4OiAiXlxcLSsoPz1cXHMqJCkiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gIm1hcmt1cC5oZWFkaW5nLiIgKyB2YWx1ZS5sZW5ndGg7CiAgICAgICAgfSwKICAgICAgICByZWdleCA6IC9eI3sxLDZ9KD89XHN8JCkvLAogICAgICAgIG5leHQgOiAiaGVhZGVyIgogICAgfSwKICAgIGNvZGVCbG9ja1N0YXJ0UnVsZSwKICAgIHsgLy8gYmxvY2sgcXVvdGUKICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYmxvY2txdW90ZSIsCiAgICAgICAgcmVnZXggOiAiXlxccyo+XFxzKig/OlsqKy1dfFxcZCtcXC4pP1xccysiLAogICAgICAgIG5leHQgIDogImJsb2NrcXVvdGUiCiAgICB9LCB7IC8vIEhSICogLSBfCiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQiLAogICAgICAgIHJlZ2V4IDogIl4gezAsM30oPzooPzpcXCogPyl7Myx9fCg/OlxcLSA/KXszLH18KD86XFxfID8pezMsfSlcXHMqJCIsCiAgICAgICAgbmV4dDogImFsbG93QmxvY2siCiAgICB9LCB7IC8vIGxpc3QKICAgICAgICB0b2tlbiA6ICJtYXJrdXAubGlzdCIsCiAgICAgICAgcmVnZXggOiAiXlxcc3swLDN9KD86WyorLV18XFxkK1xcLilcXHMrIiwKICAgICAgICBuZXh0ICA6ICJsaXN0YmxvY2stc3RhcnQiCiAgICB9LCB7CiAgICAgICAgaW5jbHVkZSA6ICJiYXNpYyIKICAgIH0pOwoKICAgIHRoaXMuYWRkUnVsZXMoewogICAgICAgICJiYXNpYyIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IC9cXFtcXGAqX3t9XFtcXSgpIytcLS4hXS8KICAgICAgICB9LCB7IC8vIGNvZGUgc3BhbiBgCiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoYCspKC4qP1teYF0pKFxcMSkiCiAgICAgICAgfSwgeyAvLyByZWZlcmVuY2UKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAiY29uc3RhbnQiLCAidGV4dCIsICJ1cmwiLCAic3RyaW5nIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXggOiAiXihbIF17MCwzfVxcWykoW15cXF1dKykoXFxdOlxccyopKFteIF0rKShcXHMqKD86W1wiXVteXCJdK1tcIl0pPyhcXHMqKSkkIgogICAgICAgIH0sIHsgLy8gbGluayBieSByZWZlcmVuY2UKICAgICAgICAgICAgdG9rZW4gOiBbInRleHQiLCAic3RyaW5nIiwgInRleHQiLCAiY29uc3RhbnQiLCAidGV4dCJdLAogICAgICAgICAgICByZWdleCA6ICIoXFxbKSgiICsgZXNjYXBlZCgiXSIpICsgIikoXFxdXFxzKlxcWykoIisgZXNjYXBlZCgiXSIpICsgIikoXFxdKSIKICAgICAgICB9LCB7IC8vIGxpbmsgYnkgdXJsCiAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgInN0cmluZyIsICJ0ZXh0IiwgIm1hcmt1cC51bmRlcmxpbmUiLCAic3RyaW5nIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXggOiAiKFxcIT9cXFspKCIgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbCiAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCgiXSIpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5rIHRleHQgb3IgYWx0IHRleHQKICAgICAgICAgICAgICAgICAgICAiKShcXF1cXCgpIisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIF0oCiAgICAgICAgICAgICAgICAgICAgJygoPzpbXlxcKVxcc1xcXFxdfFxcXFwufFxccyg/PVteIl0pKSopJyArICAgICAgICAvLyBocmVmIG9yIGltYWdlCiAgICAgICAgICAgICAgICAgICAgJyhcXHMqIicgKyAgZXNjYXBlZCgnIicpICsgJyJcXHMqKT8nICsgICAgICAgICAgICAvLyAidGl0bGUiCiAgICAgICAgICAgICAgICAgICAgIihcXCkpIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApCiAgICAgICAgfSwgeyAvLyBzdHJvbmcgKiogX18KICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0cm9uZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIihbKl17Mn18W19dezJ9KD89XFxTKSkoLio/XFxTWypfXSopKFxcMSkiCiAgICAgICAgfSwgeyAvLyBlbXBoYXNpcyAqIF8KICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVtcGhhc2lzIiwKICAgICAgICAgICAgcmVnZXggOiAiKFsqXXxbX10oPz1cXFMpKSguKj9cXFNbKl9dKikoXFwxKSIKICAgICAgICB9LCB7IC8vCiAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgInVybCIsICJ0ZXh0Il0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8KSgiKwogICAgICAgICAgICAgICAgICAgICAgIig/Omh0dHBzP3xmdHB8ZGljdCk6W14nXCI+XFxzXSsiKwogICAgICAgICAgICAgICAgICAgICAgInwiKwogICAgICAgICAgICAgICAgICAgICAgIig/Om1haWx0bzopP1stLlxcd10rXFxAWy1hLXowLTldKyg/OlxcLlstYS16MC05XSspKlxcLlthLXpdKyIrCiAgICAgICAgICAgICAgICAgICAgIikoPikiCiAgICAgICAgfV0sCiAgICAgICAgImFsbG93QmxvY2siOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwgcmVnZXggOiAiXiB7NH0uKyIsIG5leHQgOiAiYWxsb3dCbG9jayJ9LAogICAgICAgICAgICB7dG9rZW4gOiAiZW1wdHlfbGluZSIsIHJlZ2V4IDogJ14kJywgbmV4dDogImFsbG93QmxvY2sifSwKICAgICAgICAgICAge3Rva2VuIDogImVtcHR5IiwgcmVnZXggOiAiIiwgbmV4dCA6ICJzdGFydCJ9CiAgICAgICAgXSwKCiAgICAgICAgImhlYWRlciIgOiBbewogICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogImJhc2ljIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImhlYWRpbmciCiAgICAgICAgfSBdLAoKICAgICAgICAibGlzdGJsb2NrLXN0YXJ0IiA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQudmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6IC8oPzpcW1sgeF1cXSk/LywKICAgICAgICAgICAgbmV4dCAgOiAibGlzdGJsb2NrIgogICAgICAgIH1dLAoKICAgICAgICAibGlzdGJsb2NrIiA6IFsgeyAvLyBMaXN0cyBvbmx5IGVzY2FwZSBvbiBjb21wbGV0ZWx5IGJsYW5rIGxpbmVzLgogICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgcmVnZXggOiAiXiQiLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9LCB7IC8vIGxpc3QKICAgICAgICAgICAgdG9rZW4gOiAibWFya3VwLmxpc3QiLAogICAgICAgICAgICByZWdleCA6ICJeXFxzezAsM30oPzpbKistXXxcXGQrXFwuKVxccysiLAogICAgICAgICAgICBuZXh0ICA6ICJsaXN0YmxvY2stc3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImJhc2ljIiwgbm9Fc2NhcGU6IHRydWUKICAgICAgICB9LAogICAgICAgIGNvZGVCbG9ja1N0YXJ0UnVsZSwKICAgICAgICB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJsaXN0IiAvL2RvIG5vdCB1c2UgbWFya3VwLmxpc3QgdG8gYWxsb3cgc3RsaW5nIGxlYWRpbmcgYCpgIGRpZmZlcm50bHkKICAgICAgICB9IF0sCgogICAgICAgICJibG9ja3F1b3RlIiA6IFsgeyAvLyBCbG9ja3F1b3RlcyBvbmx5IGVzY2FwZSBvbiBibGFuayBsaW5lcy4KICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHlfbGluZSIsCiAgICAgICAgICAgIHJlZ2V4IDogIl5cXHMqJCIsCiAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgIH0sIHsgLy8gYmxvY2sgcXVvdGUKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmJsb2NrcXVvdGUiLAogICAgICAgICAgICByZWdleCA6ICJeXFxzKj5cXHMqKD86WyorLV18XFxkK1xcLik/XFxzKyIsCiAgICAgICAgICAgIG5leHQgIDogImJsb2NrcXVvdGUiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImJhc2ljIiwgbm9Fc2NhcGU6IHRydWUKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYmxvY2txdW90ZSIKICAgICAgICB9IF0sCgogICAgICAgICJnaXRodWJibG9jayIgOiBjb2RlQmxvY2tSdWxlcwogICAgfSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9Owpvb3AuaW5oZXJpdHMoTWFya2Rvd25IaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuTWFya2Rvd25IaWdobGlnaHRSdWxlcyA9IE1hcmtkb3duSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL21hcmtkb3duIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvXig/Ols9LV0rXHMqJHwjezEsNn0gfGB7M30pLzsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgaWYgKCF0aGlzLmZvbGRpbmdTdGFydE1hcmtlci50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmIChsaW5lWzBdID09ICJgIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5iZ1Rva2VuaXplci5nZXRTdGF0ZShyb3cpID09ICJzdGFydCIpCiAgICAgICAgICAgICAgICByZXR1cm4gImVuZCI7CiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmICghbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcikpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGxpbmVbMF0gPT0gImAiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmJnVG9rZW5pemVyLmdldFN0YXRlKHJvdykgIT09ICJzdGFydCIpIHsKICAgICAgICAgICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICBpZiAobGluZVswXSA9PSAiYCIgJiBsaW5lLnN1YnN0cmluZygwLCAzKSA9PSAiYGBgIikKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgcm93LCAwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHdoaWxlIChyb3cgLS0gPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICAgICAgICAgIGlmIChsaW5lWzBdID09ICJgIiAmIGxpbmUuc3Vic3RyaW5nKDAsIDMpID09ICJgYGAiKQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uocm93LCBsaW5lLmxlbmd0aCwgc3RhcnRSb3csIDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgdG9rZW47CiAgICAgICAgZnVuY3Rpb24gaXNIZWFkaW5nKHJvdykgewogICAgICAgICAgICB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdylbMF07CiAgICAgICAgICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKGhlYWRpbmcsIDApID09PSAwOwogICAgICAgIH0KCiAgICAgICAgdmFyIGhlYWRpbmcgPSAibWFya3VwLmhlYWRpbmciOwogICAgICAgIGZ1bmN0aW9uIGdldExldmVsKCkgewogICAgICAgICAgICB2YXIgY2ggPSB0b2tlbi52YWx1ZVswXTsKICAgICAgICAgICAgaWYgKGNoID09ICI9IikgcmV0dXJuIDY7CiAgICAgICAgICAgIGlmIChjaCA9PSAiLSIpIHJldHVybiA1OwogICAgICAgICAgICByZXR1cm4gNyAtIHRva2VuLnZhbHVlLnNlYXJjaCgvW14jXXwkLyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNIZWFkaW5nKHJvdykpIHsKICAgICAgICAgICAgdmFyIHN0YXJ0SGVhZGluZ0xldmVsID0gZ2V0TGV2ZWwoKTsKICAgICAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzSGVhZGluZyhyb3cpKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgdmFyIGxldmVsID0gZ2V0TGV2ZWwoKTsKICAgICAgICAgICAgICAgIGlmIChsZXZlbCA+PSBzdGFydEhlYWRpbmdMZXZlbCkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZW5kUm93ID0gcm93IC0gKCF0b2tlbiB8fCBbIj0iLCAiLSJdLmluZGV4T2YodG9rZW4udmFsdWVbMF0pID09IC0xID8gMSA6IDIpOwoKICAgICAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoZW5kUm93ID4gc3RhcnRSb3cgJiYgL15ccyokLy50ZXN0KHNlc3Npb24uZ2V0TGluZShlbmRSb3cpKSkKICAgICAgICAgICAgICAgICAgICBlbmRSb3ctLTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2hfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgcmVzZXJ2ZWRLZXl3b3JkcyA9IGV4cG9ydHMucmVzZXJ2ZWRLZXl3b3JkcyA9ICgKICAgICAgICAnIXx7fH18Y2FzZXxkb3xkb25lfGVsaWZ8ZWxzZXwnKwogICAgICAgICdlc2FjfGZpfGZvcnxpZnxpbnx0aGVufHVudGlsfHdoaWxlfCcrCiAgICAgICAgJyZ8O3xleHBvcnR8bG9jYWx8cmVhZHx0eXBlc2V0fHVuc2V0fCcrCiAgICAgICAgJ2VsaWZ8c2VsZWN0fHNldHxmdW5jdGlvbnxkZWNsYXJlfHJlYWRvbmx5JwogICAgKTsKCnZhciBsYW5ndWFnZUNvbnN0cnVjdHMgPSBleHBvcnRzLmxhbmd1YWdlQ29uc3RydWN0cyA9ICgKICAgICdbfF18YWxpYXN8Ymd8YmluZHxicmVha3xidWlsdGlufCcrCiAgICAgJ2NkfGNvbW1hbmR8Y29tcGdlbnxjb21wbGV0ZXxjb250aW51ZXwnKwogICAgICdkaXJzfGRpc293bnxlY2hvfGVuYWJsZXxldmFsfGV4ZWN8JysKICAgICAnZXhpdHxmY3xmZ3xnZXRvcHRzfGhhc2h8aGVscHxoaXN0b3J5fCcrCiAgICAgJ2pvYnN8a2lsbHxsZXR8bG9nb3V0fHBvcGR8cHJpbnRmfHB1c2hkfCcrCiAgICAgJ3B3ZHxyZXR1cm58c2V0fHNoaWZ0fHNob3B0fHNvdXJjZXwnKwogICAgICdzdXNwZW5kfHRlc3R8dGltZXN8dHJhcHx0eXBlfHVsaW1pdHwnKwogICAgICd1bWFza3x1bmFsaWFzfHdhaXQnCik7Cgp2YXIgU2hIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkIjogcmVzZXJ2ZWRLZXl3b3JkcywKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbi5idWlsdGluIjogbGFuZ3VhZ2VDb25zdHJ1Y3RzLAogICAgICAgICJpbnZhbGlkLmRlcHJlY2F0ZWQiOiAiZGVidWdnZXIiCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBpbnRlZ2VyID0gIig/Oig/OlsxLTldXFxkKil8KD86MCkpIjsKCiAgICB2YXIgZnJhY3Rpb24gPSAiKD86XFwuXFxkKykiOwogICAgdmFyIGludFBhcnQgPSAiKD86XFxkKykiOwogICAgdmFyIHBvaW50RmxvYXQgPSAiKD86KD86IiArIGludFBhcnQgKyAiPyIgKyBmcmFjdGlvbiArICIpfCg/OiIgKyBpbnRQYXJ0ICsgIlxcLikpIjsKICAgIHZhciBleHBvbmVudEZsb2F0ID0gIig/Oig/OiIgKyBwb2ludEZsb2F0ICsgInwiICsgIGludFBhcnQgKyAiKSIgKyAiKSI7CiAgICB2YXIgZmxvYXROdW1iZXIgPSAiKD86IiArIGV4cG9uZW50RmxvYXQgKyAifCIgKyBwb2ludEZsb2F0ICsgIikiOwogICAgdmFyIGZpbGVEZXNjcmlwdG9yID0gIig/OiYiICsgaW50UGFydCArICIpIjsKCiAgICB2YXIgdmFyaWFibGVOYW1lID0gIlthLXpBLVpfXVthLXpBLVowLTlfXSoiOwogICAgdmFyIHZhcmlhYmxlID0gIig/OiIgKyB2YXJpYWJsZU5hbWUgKyAiKD89PSkpIjsKCiAgICB2YXIgYnVpbHRpblZhcmlhYmxlID0gIig/OlxcJCg/OlNITFZMfFxcJHxcXCF8XFw/KSkiOwoKICAgIHZhciBmdW5jID0gIig/OiIgKyB2YXJpYWJsZU5hbWUgKyAiXFxzKlxcKFxcKSkiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcLi8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ0ZXh0IiwgImNvbW1lbnQiXSwKICAgICAgICAgICAgcmVnZXggOiAvKF58XHMpKCMuKikkLwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86WyRgIlxcXXwkKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJ2YXJpYWJsZXMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvYC8gLy8gVE9ETyBoaWdobGlnaHQgYAogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFwkJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86W2FiZUVmbnJ0dlxcJyJdfHhbYS1mQS1GXGRdezEsMn18dVthLWZBLUZcZF17NH0oW2EtZkEtRlxkXXs0fSk/fGMufFxkezEsM30pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleCA6ICI8PDwiLAogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIgogICAgICAgIH0sIHsKICAgICAgICAgICAgc3RhdGVOYW1lOiAiaGVyZWRvYyIsCiAgICAgICAgICAgIHJlZ2V4IDogIig8PC0/KShcXHMqKShbJ1wiYF0/KShbXFx3XFwtXSspKFsnXCJgXT8pIiwKICAgICAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHZhbHVlWzJdID09ICctJyA/ICJpbmRlbnRlZEhlcmVkb2MiIDogImhlcmVkb2MiOwogICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KHRoaXMuc3BsaXRSZWdleCk7CiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5leHQsIHRva2Vuc1s0XSk7CiAgICAgICAgICAgICAgICByZXR1cm4gWwogICAgICAgICAgICAgICAgICAgIHt0eXBlOiJjb25zdGFudCIsIHZhbHVlOiB0b2tlbnNbMV19LAogICAgICAgICAgICAgICAgICAgIHt0eXBlOiJ0ZXh0IiwgdmFsdWU6IHRva2Vuc1syXX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InN0cmluZyIsIHZhbHVlOiB0b2tlbnNbM119LAogICAgICAgICAgICAgICAgICAgIHt0eXBlOiJzdXBwb3J0LmNsYXNzIiwgdmFsdWU6IHRva2Vuc1s0XX0sCiAgICAgICAgICAgICAgICAgICAge3R5cGU6InN0cmluZyIsIHZhbHVlOiB0b2tlbnNbNV19CiAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICB9LAogICAgICAgICAgICBydWxlczogewogICAgICAgICAgICAgICAgaGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzdGFja1sxXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmNsYXNzIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIuKiQiLAogICAgICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgaW5kZW50ZWRIZXJlZG9jOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIl5cdCsiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgb25NYXRjaDogIGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5jbGFzcyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9CiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleCA6ICIkIiwKICAgICAgICAgICAgdG9rZW4gOiAiZW1wdHkiLAogICAgICAgICAgICBuZXh0IDogZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09PSAiaGVyZWRvYyIgfHwgc3RhY2tbMF0gPT09ICJpbmRlbnRlZEhlcmVkb2MiKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja1swXTsKICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U3RhdGU7CiAgICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJrZXl3b3JkIiwgInRleHQiLCAidGV4dCIsICJ0ZXh0IiwgInZhcmlhYmxlIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhkZWNsYXJlfGxvY2FsfHJlYWRvbmx5KShccyspKD86KC1bZml4YXJdKykoXHMrKSk/KFthLXpBLVpfXVthLXpBLVowLTlfXSpcYikvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgIHJlZ2V4IDogYnVpbHRpblZhcmlhYmxlCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4IDogdmFyaWFibGUKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGUgOiAidmFyaWFibGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4IDogZnVuYwogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgIHJlZ2V4IDogZmlsZURlc2NyaXB0b3IKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICBzdGFydCA6ICInIiwgZW5kIDogIiciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiBmbG9hdE51bWJlcgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGludGVnZXIKICAgICAgICAgICAgcmVnZXggOiBpbnRlZ2VyICsgIlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcKnxcXCpcXCp8XFwvfFxcL1xcL3x+fDx8Pnw8PXw9Pnw9fCE9fFslJnxgXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiOyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXFtcXChcXHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcXV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFwpXFx9XSIsCiAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgIH1dLAogICAgICAgIHZhcmlhYmxlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICByZWdleCA6IC8oXCQpKFx3KykvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsidmFyaWFibGUiLCAicGFyZW4ubHBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJCkoXCgpLywKICAgICAgICAgICAgcHVzaCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJ2YXJpYWJsZSIsICJwYXJlbi5scGFyZW4iLCAia2V5d29yZC5vcGVyYXRvciIsICJ2YXJpYWJsZSIsICJrZXl3b3JkLm9wZXJhdG9yIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJCkoXHspKFsjIV0/KShcdyt8WypAIz9cLSQhMF9dKSg6Wz8rXC09XT98IyM/fCUlP3wsLD9cL3xcXlxePyk/LywKICAgICAgICAgICAgcHVzaCA6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXggOiAvXCRbKkAjP1wtJCEwX10vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsidmFyaWFibGUiLCAicGFyZW4ubHBhcmVuIl0sCiAgICAgICAgICAgIHJlZ2V4IDogLyhcJCkoXHspLywKICAgICAgICAgICAgcHVzaCA6ICJzdGFydCIKICAgICAgICB9XQogICAgfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFNoSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNoSGlnaGxpZ2h0UnVsZXMgPSBTaEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zaF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTaEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zaF9oaWdobGlnaHRfcnVsZXMiKS5TaEhpZ2hsaWdodFJ1bGVzOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3R5bGUiKS5Dc3R5bGVCZWhhdmlvdXI7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFNoSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcWzpdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHZhciBvdXRkZW50cyA9IHsKICAgICAgICAicGFzcyI6IDEsCiAgICAgICAgInJldHVybiI6IDEsCiAgICAgICAgInJhaXNlIjogMSwKICAgICAgICAiYnJlYWsiOiAxLAogICAgICAgICJjb250aW51ZSI6IDEKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoaW5wdXQgIT09ICJcclxuIiAmJiBpbnB1dCAhPT0gIlxyIiAmJiBpbnB1dCAhPT0gIlxuIikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUudHJpbSgpLCBzdGF0ZSkudG9rZW5zOwoKICAgICAgICBpZiAoIXRva2VucykKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGRvIHsKICAgICAgICAgICAgdmFyIGxhc3QgPSB0b2tlbnMucG9wKCk7CiAgICAgICAgfSB3aGlsZSAobGFzdCAmJiAobGFzdC50eXBlID09ICJjb21tZW50IiB8fCAobGFzdC50eXBlID09ICJ0ZXh0IiAmJiBsYXN0LnZhbHVlLm1hdGNoKC9eXHMrJC8pKSkpOwoKICAgICAgICBpZiAoIWxhc3QpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIChsYXN0LnR5cGUgPT0gImtleXdvcmQiICYmIG91dGRlbnRzW2xhc3QudmFsdWVdKTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewoKICAgICAgICByb3cgKz0gMTsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKHJvdykpOwogICAgICAgIHZhciB0YWIgPSBkb2MuZ2V0VGFiU3RyaW5nKCk7CiAgICAgICAgaWYgKGluZGVudC5zbGljZSgtdGFiLmxlbmd0aCkgPT0gdGFiKQogICAgICAgICAgICBkb2MucmVtb3ZlKG5ldyBSYW5nZShyb3csIGluZGVudC5sZW5ndGgtdGFiLmxlbmd0aCwgcm93LCBpbmRlbnQubGVuZ3RoKSk7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3NoIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWFya2Rvd24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUveG1sIiwiYWNlL21vZGUvaHRtbCIsImFjZS9tb2RlL21hcmtkb3duX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvbWFya2Rvd24iLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvaHRtbCIsImFjZS9tb2RlL3NoIiwiYWNlL21vZGUvc2giLCJhY2UvbW9kZS94bWwiLCJhY2UvbW9kZS9jc3MiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGU7CnZhciBYbWxNb2RlID0gcmVxdWlyZSgiLi94bWwiKS5Nb2RlOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgTWFya2Rvd25IaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vbWFya2Rvd25faGlnaGxpZ2h0X3J1bGVzIikuTWFya2Rvd25IaWdobGlnaHRSdWxlczsKdmFyIE1hcmtkb3duRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvbWFya2Rvd24iKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gTWFya2Rvd25IaWdobGlnaHRSdWxlczsKCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgIGphdmFzY3JpcHQ6IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGUsCiAgICAgICAgaHRtbDogcmVxdWlyZSgiLi9odG1sIikuTW9kZSwKICAgICAgICBiYXNoOiByZXF1aXJlKCIuL3NoIikuTW9kZSwKICAgICAgICBzaDogcmVxdWlyZSgiLi9zaCIpLk1vZGUsCiAgICAgICAgeG1sOiByZXF1aXJlKCIuL3htbCIpLk1vZGUsCiAgICAgICAgY3NzOiByZXF1aXJlKCIuL2NzcyIpLk1vZGUKICAgIH0pOwoKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IE1hcmtkb3duRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnR5cGUgPSAidGV4dCI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKICAgIHRoaXMuJHF1b3RlcyA9IHsnIic6ICciJywgImAiOiAiYCJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgaWYgKHN0YXRlID09ICJsaXN0YmxvY2siKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eKFxzKikoPzooWy0rKl0pfChcZCspXC4pKFxzKykvLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbWF0Y2gpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIHZhciBtYXJrZXIgPSBtYXRjaFsyXTsKICAgICAgICAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgICAgICAgICBtYXJrZXIgPSBwYXJzZUludChtYXRjaFszXSwgMTApICsgMSArICIuIjsKICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdICsgbWFya2VyICsgbWF0Y2hbNF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvbWFya2Rvd24iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jb2ZmZWVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKICAgIHZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CiAgICB2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCiAgICBvb3AuaW5oZXJpdHMoQ29mZmVlSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgogICAgZnVuY3Rpb24gQ29mZmVlSGlnaGxpZ2h0UnVsZXMoKSB7CiAgICAgICAgdmFyIGlkZW50aWZpZXIgPSAiWyRBLVphLXpfXFx4N2YtXFx1ZmZmZl1bJFxcd1xceDdmLVxcdWZmZmZdKiI7CgogICAgICAgIHZhciBrZXl3b3JkcyA9ICgKICAgICAgICAgICAgInRoaXN8dGhyb3d8dGhlbnx0cnl8dHlwZW9mfHN1cGVyfHN3aXRjaHxyZXR1cm58YnJlYWt8Ynl8Y29udGludWV8IiArCiAgICAgICAgICAgICJjYXRjaHxjbGFzc3xpbnxpbnN0YW5jZW9mfGlzfGlzbnR8aWZ8ZWxzZXxleHRlbmRzfGZvcnxvd258IiArCiAgICAgICAgICAgICJmaW5hbGx5fGZ1bmN0aW9ufHdoaWxlfHdoZW58bmV3fG5vfG5vdHxkZWxldGV8ZGVidWdnZXJ8ZG98bG9vcHxvZnxvZmZ8IiArCiAgICAgICAgICAgICJvcnxvbnx1bmxlc3N8dW50aWx8YW5kfHllc3x5aWVsZHxleHBvcnR8aW1wb3J0fGRlZmF1bHQiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIGxhbmdDb25zdGFudCA9ICgKICAgICAgICAgICAgInRydWV8ZmFsc2V8bnVsbHx1bmRlZmluZWR8TmFOfEluZmluaXR5IgogICAgICAgICk7CgogICAgICAgIHZhciBpbGxlZ2FsID0gKAogICAgICAgICAgICAiY2FzZXxjb25zdHxmdW5jdGlvbnx2YXJ8dm9pZHx3aXRofGVudW18aW1wbGVtZW50c3wiICsKICAgICAgICAgICAgImludGVyZmFjZXxsZXR8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8c3RhdGljIgogICAgICAgICk7CgogICAgICAgIHZhciBzdXBwb3J0Q2xhc3MgPSAoCiAgICAgICAgICAgICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258TnVtYmVyfE9iamVjdHxSZWdFeHB8UmVmZXJlbmNlRXJyb3J8U3RyaW5nfCIgKwogICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgKwogICAgICAgICAgICAiU3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfCIgICsKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICsKICAgICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXkiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIHN1cHBvcnRGdW5jdGlvbiA9ICgKICAgICAgICAgICAgIk1hdGh8SlNPTnxpc05hTnxpc0Zpbml0ZXxwYXJzZUludHxwYXJzZUZsb2F0fGVuY29kZVVSSXwiICsKICAgICAgICAgICAgImVuY29kZVVSSUNvbXBvbmVudHxkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fFN0cmluZ3wiCiAgICAgICAgKTsKCiAgICAgICAgdmFyIHZhcmlhYmxlTGFuZ3VhZ2UgPSAoCiAgICAgICAgICAgICJ3aW5kb3d8YXJndW1lbnRzfHByb3RvdHlwZXxkb2N1bWVudCIKICAgICAgICApOwoKICAgICAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMsCiAgICAgICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGxhbmdDb25zdGFudCwKICAgICAgICAgICAgImludmFsaWQuaWxsZWdhbCI6IGlsbGVnYWwsCiAgICAgICAgICAgICJsYW5ndWFnZS5zdXBwb3J0LmNsYXNzIjogc3VwcG9ydENsYXNzLAogICAgICAgICAgICAibGFuZ3VhZ2Uuc3VwcG9ydC5mdW5jdGlvbiI6IHN1cHBvcnRGdW5jdGlvbiwKICAgICAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogdmFyaWFibGVMYW5ndWFnZQogICAgICAgIH0sICJpZGVudGlmaWVyIik7CgogICAgICAgIHZhciBmdW5jdGlvblJ1bGUgPSB7CiAgICAgICAgICAgIHRva2VuOiBbInBhcmVuLmxwYXJlbiIsICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLCAicGFyZW4ucnBhcmVuIiwgInRleHQiLCAic3RvcmFnZS50eXBlIl0sCiAgICAgICAgICAgIHJlZ2V4OiAvKD86KFwoKSgoPzoiW14iKV0qPyJ8J1teJyldKj8nfFwvW15cLyldKj9cL3xbXigpIidcL10pKj8pKFwpKShccyopKT8oW1wtPV0+KS8uc291cmNlCiAgICAgICAgfTsKCiAgICAgICAgdmFyIHN0cmluZ0VzY2FwZSA9IC9cXCg/OnhbMC05YS1mQS1GXXsyfXx1WzAtOWEtZkEtRl17NH18WzAtMl1bMC03XXswLDJ9fDNbMC02XVswLTddP3wzN1swLTddP3xbNC03XVswLTddP3wuKS87CgogICAgICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICAgICBzdGFydCA6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoPzoweFtcXGRhLWZBLUZdK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/KSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxZG9jIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICInJyciLCBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiJycnIiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiBzdHJpbmdFc2NhcGV9LAogICAgICAgICAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAicXFkb2MiLAogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAnIiIiJywKICAgICAgICAgICAgICAgICAgICBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAnIiIiJywgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAicGFyZW4uc3RyaW5nIiwgcmVnZXggOiAnI3snLCBwdXNoIDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleCA6IHN0cmluZ0VzY2FwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCByZWdleCA6ICInIiwgbmV4dCA6IFsKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZyIsIHJlZ2V4IDogIiciLCBuZXh0IDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleCA6IHN0cmluZ0VzY2FwZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJxcXN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwgcmVnZXggOiAnIicsIG5leHQgOiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuZW5kIiwgcmVnZXggOiAnIicsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogInBhcmVuLnN0cmluZyIsIHJlZ2V4IDogJyN7JywgcHVzaCA6ICJzdGFydCJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwgcmVnZXggOiBzdHJpbmdFc2NhcGV9LAogICAgICAgICAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAic3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGVOYW1lOiAianMiLAogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIHJlZ2V4IDogImAiLCBuZXh0IDogWwogICAgICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nIiwgcmVnZXggOiAiYCIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAgICAgICAgICAgICAge3Rva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4IDogc3RyaW5nRXNjYXBlfSwKICAgICAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKSB8fCAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5zdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAicGFyZW4iOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXgiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIi8vLyIsCiAgICAgICAgICAgICAgICAgICAgbmV4dCA6ICJoZXJlZ2V4IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5yZWdleCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvKD86XC8oPyFbXHM9XSlbXltcL1xuXFxdKig/Oig/OlxcW1xzXFNdfFxbW15cXVxuXFxdKig/OlxcW1xzXFNdW15cXVxuXFxdKikqXSlbXltcL1xuXFxdKikqXC8pKD86W2ltZ3ldezAsNH0pKD8hXHcpLwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIiMjIyg/ISMpIiwKICAgICAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiIy4qIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJ0ZXh0IiwgImlkZW50aWZpZXIiXSwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICIoXFwuKShcXHMqKSgiICsgaWxsZWdhbCArICIpIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJcXC57MSwzfSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6IFsia2V5d29yZCIsICJ0ZXh0IiwgImxhbmd1YWdlLnN1cHBvcnQuY2xhc3MiLAogICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJrZXl3b3JkIiwgInRleHQiLCAibGFuZ3VhZ2Uuc3VwcG9ydC5jbGFzcyJdLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIihjbGFzcykoXFxzKykoIiArIGlkZW50aWZpZXIgKyAiKSg/OihcXHMrKShleHRlbmRzKShcXHMrKSgiICsgaWRlbnRpZmllciArICIpKT8iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiBbImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0Il0uY29uY2F0KGZ1bmN0aW9uUnVsZS50b2tlbiksCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyICsgIikoXFxzKikoWz06XSkoXFxzKikiICsgZnVuY3Rpb25SdWxlLnJlZ2V4CiAgICAgICAgICAgICAgICB9LCAKICAgICAgICAgICAgICAgIGZ1bmN0aW9uUnVsZSwgCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIkAoPzoiICsgaWRlbnRpZmllciArICIpPyIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbjoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFwsfFxcLiIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXC09XT4iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiKD86Wy0rKi8lPD4mfF4hPz1dPXw+Pj49P3xcXC1cXC18XFwrXFwrfDo6fCYmPXxcXHxcXHw9fDw8PXw+Pj18XFw/XFwufFxcLnsyLDN9fFshKistPT48XSkiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6ICJbKHtbXSIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF19KV0iCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgICAgIH1dLAoKCiAgICAgICAgICAgIGhlcmVnZXggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnJlZ2V4IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4qPy8vL1tpbWd5XXswLDR9JywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQucmVnZXgiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyg/OiMuKik/IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXgiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxTKyIKICAgICAgICAgICAgfV0sCgogICAgICAgICAgICBjb21tZW50IDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIyMjJywKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH07CiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwogICAgfQoKICAgIGV4cG9ydHMuQ29mZmVlSGlnaGxpZ2h0UnVsZXMgPSBDb2ZmZWVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9tb2RlL2NvZmZlZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL2xpYi9vb3AiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSdWxlcyA9IHJlcXVpcmUoIi4vY29mZmVlX2hpZ2hsaWdodF9ydWxlcyIpLkNvZmZlZUhpZ2hsaWdodFJ1bGVzOwp2YXIgT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKCmZ1bmN0aW9uIE1vZGUoKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gUnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE91dGRlbnQoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7Cn0KCm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB2YXIgaW5kZW50ZXIgPSAvKD86Wyh7Wz06XXxbLT1dPnxcYig/OmVsc2V8dHJ5fCg/OnN3aXxjYSl0Y2goPzpccytbJEEtWmEtel9ceDdmLVx1ZmZmZl1bJFx3XHg3Zi1cdWZmZmZdKik/fGZpbmFsbHkpKVxzKiR8XlxzKihlbHNlXGJccyopPyg/OmlmfGZvcnx3aGlsZXxsb29wKVxiKD8hLipcYnRoZW5cYikvOwogICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIiMjIyIsIGVuZDogIiMjIyJ9OwogICAgCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwogICAgCiAgICAgICAgaWYgKCEodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPT09ICdjb21tZW50JykgJiYKICAgICAgICAgICAgc3RhdGUgPT09ICdzdGFydCcgJiYgaW5kZW50ZXIudGVzdChsaW5lKSkKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKICAgIAogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKICAgIAogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKICAgIAogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2NvZmZlZV93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKICAgICAgICAKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY29mZmVlIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpOwoKdmFyIFNjc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgCiAgICB2YXIgcHJvcGVydGllcyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0VHlwZS5zcGxpdCgifCIpKTsKCiAgICB2YXIgZnVuY3Rpb25zID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiaHNsfGhzbGF8cmdifHJnYmF8dXJsfGF0dHJ8Y291bnRlcnxjb3VudGVyc3xhYnN8YWRqdXN0X2NvbG9yfGFkanVzdF9odWV8IiArCiAgICAgICAgICJhbHBoYXxqb2lufGJsdWV8Y2VpbHxjaGFuZ2VfY29sb3J8Y29tcGFyYWJsZXxjb21wbGVtZW50fGRhcmtlbnxkZXNhdHVyYXRlfCIgKyAKICAgICAgICAgImZsb29yfGdyYXlzY2FsZXxncmVlbnxodWV8aWZ8aW52ZXJ0fGpvaW58bGVuZ3RofGxpZ2h0ZW58bGlnaHRuZXNzfG1peHwiICsgCiAgICAgICAgICJudGh8b3BhY2lmeXxvcGFjaXR5fHBlcmNlbnRhZ2V8cXVvdGV8cmVkfHJvdW5kfHNhdHVyYXRlfHNhdHVyYXRpb258IiArCiAgICAgICAgICJzY2FsZV9jb2xvcnx0cmFuc3BhcmVudGl6ZXx0eXBlX29mfHVuaXR8dW5pdGxlc3N8dW5xdW90ZSIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIGNvbnN0YW50cyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnQuc3BsaXQoInwiKSk7CgogICAgdmFyIGNvbG9ycyA9IGxhbmcuYXJyYXlUb01hcChDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnRDb2xvci5zcGxpdCgifCIpKTsKICAgIAogICAgdmFyIGtleXdvcmRzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiQG1peGlufEBleHRlbmR8QGluY2x1ZGV8QGltcG9ydHxAbWVkaWF8QGRlYnVnfEB3YXJufEBpZnxAZm9yfEBlYWNofEB3aGlsZXxAZWxzZXxAZm9udC1mYWNlfEAtd2Via2l0LWtleWZyYW1lc3xpZnxhbmR8IWRlZmF1bHR8bW9kdWxlfGRlZnxlbmR8ZGVjbGFyZSIpLnNwbGl0KCJ8IikKICAgICk7CiAgICAKICAgIHZhciB0YWdzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiYXxhYmJyfGFjcm9ueW18YWRkcmVzc3xhcHBsZXR8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiYXNlZm9udHxiZG98IiArIAogICAgICAgICAiYmlnfGJsb2NrcXVvdGV8Ym9keXxicnxidXR0b258Y2FudmFzfGNhcHRpb258Y2VudGVyfGNpdGV8Y29kZXxjb2x8Y29sZ3JvdXB8IiArIAogICAgICAgICAiY29tbWFuZHxkYXRhbGlzdHxkZHxkZWx8ZGV0YWlsc3xkZm58ZGlyfGRpdnxkbHxkdHxlbXxlbWJlZHxmaWVsZHNldHwiICsgCiAgICAgICAgICJmaWdjYXB0aW9ufGZpZ3VyZXxmb250fGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGgxfGgyfGgzfGg0fGg1fGg2fGhlYWR8IiArIAogICAgICAgICAiaGVhZGVyfGhncm91cHxocnxodG1sfGl8aWZyYW1lfGltZ3xpbnB1dHxpbnN8a2V5Z2VufGtiZHxsYWJlbHxsZWdlbmR8bGl8IiArIAogICAgICAgICAibGlua3xtYXB8bWFya3xtZW51fG1ldGF8bWV0ZXJ8bmF2fG5vZnJhbWVzfG5vc2NyaXB0fG9iamVjdHxvbHxvcHRncm91cHwiICsgCiAgICAgICAgICJvcHRpb258b3V0cHV0fHB8cGFyYW18cHJlfHByb2dyZXNzfHF8cnB8cnR8cnVieXxzfHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fCIgKyAKICAgICAgICAgInNtYWxsfHNvdXJjZXxzcGFufHN0cmlrZXxzdHJvbmd8c3R5bGV8c3VifHN1bW1hcnl8c3VwfHRhYmxlfHRib2R5fHRkfCIgKyAKICAgICAgICAgInRleHRhcmVhfHRmb290fHRofHRoZWFkfHRpbWV8dGl0bGV8dHJ8dHR8dXx1bHx2YXJ8dmlkZW98d2JyfHhtcCIpLnNwbGl0KCJ8IikKICAgICk7CgogICAgdmFyIG51bVJlID0gIlxcLT8oPzooPzpbMC05XSspfCg/OlswLTldKlxcLlswLTldKykpIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwqIiwKICAgICAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0uKlxcXFwkJywKICAgICAgICAgICAgICAgIG5leHQgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddLipcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLAogICAgICAgICAgICAgICAgcmVnZXggOiBudW1SZSArICIoPzpjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezZ9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICAgICAgcmVnZXggOiAiI1thLWYwLTldezN9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuZnVuY3Rpb24iLCAic3RyaW5nIiwgInN1cHBvcnQuZnVuY3Rpb24iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIih1cmxcXCgpKC4qKShcXCkpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC50eXBlIjsKICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9ucy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5mdW5jdGlvbiI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sb3JzLmhhc093blByb3BlcnR5KHZhbHVlLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhZ3MuaGFzT3duUHJvcGVydHkodmFsdWUudG9Mb3dlckNhc2UoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidmFyaWFibGUubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXh0IjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC0/W0BhLXpfXVtAYS16MC05X1xcLV0qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16X1xcLSRdW2EtejAtOV9cXC0kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUubGFuZ3VhZ2UiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIjpbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgICAgICByZWdleDogIlthLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjx8Pnw8PXw+PXw9PXwhPXwtfCV8I3xcXCt8XFwkfFxcK3xcXCoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqPyInLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/JyIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKFNjc3NIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU2Nzc0hpZ2hsaWdodFJ1bGVzID0gU2Nzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Njc3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zY3NzX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3NzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvbW9kZS9jc3NfY29tcGxldGlvbnMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTY3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIikuU2Nzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgQ3NzQ29tcGxldGlvbnMgPSByZXF1aXJlKCIuL2Nzc19jb21wbGV0aW9ucyIpLkNzc0NvbXBsZXRpb25zOwoKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU2Nzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzc0JlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IENzc0NvbXBsZXRpb25zKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSkudG9rZW5zOwogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipce1xzKiQvKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Njc3MiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2Fzc19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBTY3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Njc3NfaGlnaGxpZ2h0X3J1bGVzIikuU2Nzc0hpZ2hsaWdodFJ1bGVzOwoKdmFyIFNhc3NIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgU2Nzc0hpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CiAgICB2YXIgc3RhcnQgPSB0aGlzLiRydWxlcy5zdGFydDsKICAgIGlmIChzdGFydFsxXS50b2tlbiA9PSAiY29tbWVudCIpIHsKICAgICAgICBzdGFydC5zcGxpY2UoMSwgMSwgewogICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIC0xLCB2YWx1ZS5sZW5ndGggLSAyLCBjdXJyZW50U3RhdGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXg6IC9eXHMqXC9cKi8sCiAgICAgICAgICAgIG5leHQ6ICJjb21tZW50IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJlcnJvci5pbnZhbGlkIiwKICAgICAgICAgICAgcmVnZXg6ICIvXFwqfFt7O31dIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LnR5cGUiLAogICAgICAgICAgICByZWdleDogL15ccyo6W1x3XC1dK1xzLwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHRoaXMuJHJ1bGVzLmNvbW1lbnQgPSBbCiAgICAgICAgICAgIHtyZWdleDogL15ccyovLCBvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzFdID09PSAtMSkKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXSA9IE1hdGgubWF4KHN0YWNrWzJdLCB2YWx1ZS5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPD0gc3RhY2tbMV0pIHtzdGFjay5zaGlmdCgpO3N0YWNrLnNoaWZ0KCk7c3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAidGV4dCI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICIiOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIG5leHQ6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAiY29tbWVudCJ9CiAgICAgICAgXTsKICAgIH0KfTsKCm9vcC5pbmhlcml0cyhTYXNzSGlnaGxpZ2h0UnVsZXMsIFNjc3NIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNhc3NIaWdobGlnaHRSdWxlcyA9IFNhc3NIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zYXNzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvc2Fzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFNhc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc2Fzc19oaWdobGlnaHRfcnVsZXMiKS5TYXNzSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU2Fzc0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7ICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvc2FzcyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sZXNzX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgnLi9jc3NfaGlnaGxpZ2h0X3J1bGVzJyk7Cgp2YXIgTGVzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgoKICAgIHZhciBrZXl3b3JkTGlzdCA9ICJAaW1wb3J0fEBtZWRpYXxAZm9udC1mYWNlfEBrZXlmcmFtZXN8QC13ZWJraXQta2V5ZnJhbWVzfEBzdXBwb3J0c3wiICsgCiAgICAgICAgIkBjaGFyc2V0fEBwbHVnaW58QG5hbWVzcGFjZXxAZG9jdW1lbnR8QHBhZ2V8QHZpZXdwb3J0fEAtbXMtdmlld3BvcnR8IiArCiAgICAgICAgIm9yfGFuZHx3aGVufG5vdCI7CgogICAgdmFyIGtleXdvcmRzID0ga2V5d29yZExpc3Quc3BsaXQoJ3wnKTsKCiAgICB2YXIgcHJvcGVydGllcyA9IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRUeXBlLnNwbGl0KCd8Jyk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmNvbnN0YW50IjogQ3NzSGlnaGxpZ2h0UnVsZXMuc3VwcG9ydENvbnN0YW50LAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZExpc3QsCiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuY29sb3IiOiBDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0Q29uc3RhbnRDb2xvciwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5mb250cyI6IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRDb25zdGFudEZvbnRzCiAgICB9LCAiaWRlbnRpZmllciIsIHRydWUpOyAgIAoKICAgIHZhciBudW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKXwoPzpbMC05XSpcXC5bMC05XSspKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC9cXC8uKiQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbImNvbnN0YW50Lm51bWVyaWMiLCAia2V5d29yZCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBudW1SZSArICIpKGNofGNtfGRlZ3xlbXxleHxmcnxnZHxncmFkfEh6fGlufGtIenxtbXxtc3xwY3xwdHxweHxyYWR8cmVtfHN8dHVybnx2aHx2bXx2d3wlKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDYgY29sb3IKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXs2fSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleDMgY29sb3IKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXszfSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgICAgICByZWdleCA6IG51bVJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWyJzdXBwb3J0LmZ1bmN0aW9uIiwgInBhcmVuLmxwYXJlbiIsICJzdHJpbmciLCAicGFyZW4ucnBhcmVuIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIodXJsKShcXCgpKC4qKShcXCkpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5mdW5jdGlvbiIsICJwYXJlbi5scGFyZW4iXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig6ZXh0ZW5kfFthLXowLTlfXFwtXSspKFxcKCkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMuaW5kZXhPZih2YWx1ZS50b0xvd2VyQ2FzZSgpKSA+IC0xKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZSI7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAiW0BcXCRdW2EtejAtOV9cXC1AXFwkXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltAXFwkXVxce1thLXowLTlfXFwtQFxcJF0qXFx9IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHsKICAgICAgICAgICAgICAgICAgICBpZihwcm9wZXJ0aWVzLmluZGV4T2YoZmlyc3QudG9Mb3dlckNhc2UoKSkgPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJzdXBwb3J0LnR5cGUucHJvcGVydHkiLCAidGV4dCJdOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsic3VwcG9ydC50eXBlLnVua25vd25Qcm9wZXJ0eSIsICJ0ZXh0Il07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIihbYS16MC05LV9dKykoXFxzKjopIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiYiICAgLy8gc3BlY2lhbCBjYXNlIC0gYWx3YXlzIHRyZWF0IGFzIGtleXdvcmQKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwtP1tAYS16X11bQGEtejAtOV9cXC1dKiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIiNbYS16MC05LV9dKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5sYW5ndWFnZSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcLlthLXowLTktX10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiOlthLXpfXVthLXowLTktX10qIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiPHw+fDw9fD49fD18IT18LXwlfFxcK3xcXCoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbWyh7XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhMZXNzSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLkxlc3NIaWdobGlnaHRSdWxlcyA9IExlc3NIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sZXNzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvbGVzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgTGVzc0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9sZXNzX2hpZ2hsaWdodF9ydWxlcyIpLkxlc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBDc3NCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci9jc3MiKS5Dc3NCZWhhdmlvdXI7CnZhciBDc3NDb21wbGV0aW9ucyA9IHJlcXVpcmUoIi4vY3NzX2NvbXBsZXRpb25zIikuQ3NzQ29tcGxldGlvbnM7Cgp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IExlc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICAKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgdG9rZW5zID0gdGhpcy5nZXRUb2tlbml6ZXIoKS5nZXRMaW5lVG9rZW5zKGxpbmUsIHN0YXRlKS50b2tlbnM7CiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zW3Rva2Vucy5sZW5ndGgtMV0udHlwZSA9PSAiY29tbWVudCIpIHsKICAgICAgICAgICAgcmV0dXJuIGluZGVudDsKICAgICAgICB9CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKlx7XHMqJC8pOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKCJydWxlc2V0Iiwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9sZXNzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBjb25zdGFudE90aGVyU3ltYm9sID0gZXhwb3J0cy5jb25zdGFudE90aGVyU3ltYm9sID0gewogICAgdG9rZW4gOiAiY29uc3RhbnQub3RoZXIuc3ltYm9sLnJ1YnkiLCAvLyBzeW1ib2wKICAgIHJlZ2V4IDogIls6XSg/OltBLVphLXpfXXxbQCRdKD89W2EtekEtWjAtOV9dKSlbYS16QS1aMC05X10qWyE9P10/Igp9OwoKdmFyIHFTdHJpbmcgPSBleHBvcnRzLnFTdHJpbmcgPSB7CiAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKfTsKCnZhciBxcVN0cmluZyA9IGV4cG9ydHMucXFTdHJpbmcgPSB7CiAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKfTsKCnZhciB0U3RyaW5nID0gZXhwb3J0cy50U3RyaW5nID0gewogICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gYmFja3RpY2sgc3RyaW5nCiAgICByZWdleCA6ICJbYF0oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/W2BdIgp9OwoKdmFyIGNvbnN0YW50TnVtZXJpY0hleCA9IGV4cG9ydHMuY29uc3RhbnROdW1lcmljSGV4ID0gewogICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgcmVnZXggOiAiMFt4WF1bMC05YS1mQS1GXSg/OlswLTlhLWZBLUZdfF8oPz1bMC05YS1mQS1GXSkpKlxcYiIKfTsKCnZhciBjb25zdGFudE51bWVyaWNGbG9hdCA9IGV4cG9ydHMuY29uc3RhbnROdW1lcmljRmxvYXQgPSB7CiAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgIHJlZ2V4IDogIlsrLV0/XFxkKD86XFxkfF8oPz1cXGQpKSooPzooPzpcXC5cXGQoPzpcXGR8Xyg/PVxcZCkpKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCn07Cgp2YXIgaW5zdGFuY2VWYXJpYWJsZSA9IGV4cG9ydHMuaW5zdGFuY2VWYXJpYWJsZSA9IHsKICAgIHRva2VuIDogInZhcmlhYmxlLmluc3RhbmNlIiwgLy8gaW5zdGFuY2UgdmFyaWFibGUKICAgIHJlZ2V4IDogIkB7MSwyfVthLXpBLVpfXFxkXSsiCn07Cgp2YXIgUnVieUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGJ1aWx0aW5GdW5jdGlvbnMgPSAoCiAgICAgICAgImFib3J0fEFycmF5fGFzc2VydHxhc3NlcnRfZXF1YWx8YXNzZXJ0X25vdF9lcXVhbHxhc3NlcnRfc2FtZXxhc3NlcnRfbm90X3NhbWV8IiArCiAgICAgICAgImFzc2VydF9uaWx8YXNzZXJ0X25vdF9uaWx8YXNzZXJ0X21hdGNofGFzc2VydF9ub19tYXRjaHxhc3NlcnRfaW5fZGVsdGF8YXNzZXJ0X3Rocm93c3wiICsKICAgICAgICAiYXNzZXJ0X3JhaXNlfGFzc2VydF9ub3RoaW5nX3JhaXNlZHxhc3NlcnRfaW5zdGFuY2Vfb2Z8YXNzZXJ0X2tpbmRfb2Z8YXNzZXJ0X3Jlc3BvbmRfdG98IiArCiAgICAgICAgImFzc2VydF9vcGVyYXRvcnxhc3NlcnRfc2VuZHxhc3NlcnRfZGlmZmVyZW5jZXxhc3NlcnRfbm9fZGlmZmVyZW5jZXxhc3NlcnRfcmVjb2duaXplc3wiICsKICAgICAgICAiYXNzZXJ0X2dlbmVyYXRlc3xhc3NlcnRfcmVzcG9uc2V8YXNzZXJ0X3JlZGlyZWN0ZWRfdG98YXNzZXJ0X3RlbXBsYXRlfGFzc2VydF9zZWxlY3R8IiArCiAgICAgICAgImFzc2VydF9zZWxlY3RfZW1haWx8YXNzZXJ0X3NlbGVjdF9yanN8YXNzZXJ0X3NlbGVjdF9lbmNvZGVkfGNzc19zZWxlY3R8YXRfZXhpdHwiICsKICAgICAgICAiYXR0cnxhdHRyX3dyaXRlcnxhdHRyX3JlYWRlcnxhdHRyX2FjY2Vzc29yfGF0dHJfYWNjZXNzaWJsZXxhdXRvbG9hZHxiaW5kaW5nfGJsb2NrX2dpdmVuP3xjYWxsY2N8IiArCiAgICAgICAgImNhbGxlcnxjYXRjaHxjaG9tcHxjaG9tcCF8Y2hvcHxjaG9wIXxkZWZpbmVkP3xkZWxldGVfdmlhX3JlZGlyZWN0fGV2YWx8ZXhlY3xleGl0fCIgKwogICAgICAgICJleGl0IXxmYWlsfEZsb2F0fGZsdW5rfGZvbGxvd19yZWRpcmVjdCF8Zm9ya3xmb3JtX2Zvcnxmb3JtX3RhZ3xmb3JtYXR8Z2V0c3xnbG9iYWxfdmFyaWFibGVzfGdzdWJ8IiArCiAgICAgICAgImdzdWIhfGdldF92aWFfcmVkaXJlY3R8aG9zdCF8aHR0cHM/fGh0dHBzIXxpbmNsdWRlfEludGVnZXJ8bGFtYmRhfGxpbmtfdG98IiArCiAgICAgICAgImxpbmtfdG9fdW5sZXNzX2N1cnJlbnR8bGlua190b19mdW5jdGlvbnxsaW5rX3RvX3JlbW90ZXxsb2FkfGxvY2FsX3ZhcmlhYmxlc3xsb29wfG9wZW58b3Blbl9zZXNzaW9ufCIgKwogICAgICAgICJwfHByaW50fHByaW50Znxwcm9jfHB1dGN8cHV0c3xwb3N0X3ZpYV9yZWRpcmVjdHxwdXRfdmlhX3JlZGlyZWN0fHJhaXNlfHJhbmR8IiArCiAgICAgICAgInJhd3xyZWFkbGluZXxyZWFkbGluZXN8cmVkaXJlY3Q/fHJlcXVlc3RfdmlhX3JlZGlyZWN0fHJlcXVpcmV8c2NhbnxzZWxlY3R8IiArCiAgICAgICAgInNldF90cmFjZV9mdW5jfHNsZWVwfHNwbGl0fHNwcmludGZ8c3JhbmR8U3RyaW5nfHN0eWxlc2hlZXRfbGlua190YWd8c3lzY2FsbHxzeXN0ZW18c3VifHN1YiF8dGVzdHwiICsKICAgICAgICAidGhyb3d8dHJhY2VfdmFyfHRyYXB8dW50cmFjZV92YXJ8YXRhbjJ8Y29zfGV4cHxmcmV4cHxsZGV4cHxsb2d8bG9nMTB8c2lufHNxcnR8dGFufCIgKwogICAgICAgICJyZW5kZXJ8amF2YXNjcmlwdF9pbmNsdWRlX3RhZ3xjc3JmX21ldGFfdGFnfGxhYmVsX3RhZ3x0ZXh0X2ZpZWxkX3RhZ3xzdWJtaXRfdGFnfGNoZWNrX2JveF90YWd8IiArCiAgICAgICAgImNvbnRlbnRfdGFnfHJhZGlvX2J1dHRvbl90YWd8dGV4dF9hcmVhX3RhZ3xwYXNzd29yZF9maWVsZF90YWd8aGlkZGVuX2ZpZWxkX3RhZ3wiICsKICAgICAgICAiZmllbGRzX2ZvcnxzZWxlY3RfdGFnfG9wdGlvbnNfZm9yX3NlbGVjdHxvcHRpb25zX2Zyb21fY29sbGVjdGlvbl9mb3Jfc2VsZWN0fGNvbGxlY3Rpb25fc2VsZWN0fCIgKwogICAgICAgICJ0aW1lX3pvbmVfc2VsZWN0fHNlbGVjdF9kYXRlfHNlbGVjdF90aW1lfHNlbGVjdF9kYXRldGltZXxkYXRlX3NlbGVjdHx0aW1lX3NlbGVjdHxkYXRldGltZV9zZWxlY3R8IiArCiAgICAgICAgInNlbGVjdF95ZWFyfHNlbGVjdF9tb250aHxzZWxlY3RfZGF5fHNlbGVjdF9ob3VyfHNlbGVjdF9taW51dGV8c2VsZWN0X3NlY29uZHxmaWxlX2ZpZWxkX3RhZ3wiICsKICAgICAgICAiZmlsZV9maWVsZHxyZXNwb25kX3RvfHNraXBfYmVmb3JlX2ZpbHRlcnxhcm91bmRfZmlsdGVyfGFmdGVyX2ZpbHRlcnx2ZXJpZnl8IiArCiAgICAgICAgInByb3RlY3RfZnJvbV9mb3JnZXJ5fHJlc2N1ZV9mcm9tfGhlbHBlcl9tZXRob2R8cmVkaXJlY3RfdG98YmVmb3JlX2ZpbHRlcnwiICsKICAgICAgICAic2VuZF9kYXRhfHNlbmRfZmlsZXx2YWxpZGF0ZXNfcHJlc2VuY2Vfb2Z8dmFsaWRhdGVzX3VuaXF1ZW5lc3Nfb2Z8dmFsaWRhdGVzX2xlbmd0aF9vZnwiICsKICAgICAgICAidmFsaWRhdGVzX2Zvcm1hdF9vZnx2YWxpZGF0ZXNfYWNjZXB0YW5jZV9vZnx2YWxpZGF0ZXNfYXNzb2NpYXRlZHx2YWxpZGF0ZXNfZXhjbHVzaW9uX29mfCIgKwogICAgICAgICJ2YWxpZGF0ZXNfaW5jbHVzaW9uX29mfHZhbGlkYXRlc19udW1lcmljYWxpdHlfb2Z8dmFsaWRhdGVzX3dpdGh8dmFsaWRhdGVzX2VhY2h8IiArCiAgICAgICAgImF1dGhlbnRpY2F0ZV9vcl9yZXF1ZXN0X3dpdGhfaHR0cF9iYXNpY3xhdXRoZW50aWNhdGVfb3JfcmVxdWVzdF93aXRoX2h0dHBfZGlnZXN0fCIgKwogICAgICAgICJmaWx0ZXJfcGFyYW1ldGVyX2xvZ2dpbmd8bWF0Y2h8Z2V0fHBvc3R8cmVzb3VyY2VzfHJlZGlyZWN0fHNjb3BlfGFzc2VydF9yb3V0aW5nfCIgKwogICAgICAgICJ0cmFuc2xhdGV8bG9jYWxpemV8ZXh0cmFjdF9sb2NhbGVfZnJvbV90bGR8Y2FjaGVzX3BhZ2V8ZXhwaXJlX3BhZ2V8Y2FjaGVzX2FjdGlvbnxleHBpcmVfYWN0aW9ufCIgKwogICAgICAgICJjYWNoZXxleHBpcmVfZnJhZ21lbnR8ZXhwaXJlX2NhY2hlX2ZvcnxvYnNlcnZlfGNhY2hlX3N3ZWVwZXJ8IiArCiAgICAgICAgImhhc19tYW55fGhhc19vbmV8YmVsb25nc190b3xoYXNfYW5kX2JlbG9uZ3NfdG9fbWFueSIKICAgICk7CgogICAgdmFyIGtleXdvcmRzID0gKAogICAgICAgICJhbGlhc3xhbmR8QkVHSU58YmVnaW58YnJlYWt8Y2FzZXxjbGFzc3xkZWZ8ZGVmaW5lZHxkb3xlbHNlfGVsc2lmfEVORHxlbmR8ZW5zdXJlfCIgKwogICAgICAgICJfX0ZJTEVfX3xmaW5hbGx5fGZvcnxnZW18aWZ8aW58X19MSU5FX198bW9kdWxlfG5leHR8bm90fG9yfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3wiICsKICAgICAgICAicmVkb3xyZXNjdWV8cmV0cnl8cmV0dXJufHN1cGVyfHRoZW58dW5kZWZ8dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8eWllbGQiCiAgICApOwoKICAgIHZhciBidWlsZGluQ29uc3RhbnRzID0gKAogICAgICAgICJ0cnVlfFRSVUV8ZmFsc2V8RkFMU0V8bmlsfE5JTHxBUkdGfEFSR1Z8REFUQXxFTlZ8UlVCWV9QTEFURk9STXxSVUJZX1JFTEVBU0VfREFURXwiICsKICAgICAgICAiUlVCWV9WRVJTSU9OfFNUREVSUnxTVERJTnxTVERPVVR8VE9QTEVWRUxfQklORElORyIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5WYXJpYWJsZXMgPSAoCiAgICAgICAgIiRERUJVR3wkZGVmb3V0fCRGSUxFTkFNRXwkTE9BRF9QQVRIfCRTQUZFfCRzdGRpbnwkc3Rkb3V0fCRzdGRlcnJ8JFZFUkJPU0V8IiArCiAgICAgICAgIiQhfHJvb3RfdXJsfGZsYXNofHNlc3Npb258Y29va2llc3xwYXJhbXN8cmVxdWVzdHxyZXNwb25zZXxsb2dnZXJ8c2VsZiIKICAgICk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLiRrZXl3b3JkcyA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsZGluQ29uc3RhbnRzLAogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6IGJ1aWx0aW5WYXJpYWJsZXMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICJpbnZhbGlkLmRlcHJlY2F0ZWQiOiAiZGVidWdnZXIiIC8vIFRPRE8gaXMgdGhpcyBhIHJlbW5hbnQgZnJvbSBqcyBtb2RlPwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiMuKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIl49YmVnaW4oPzokfFxccy4qJCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJjb21tZW50IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsvXSg/Oig/OlxcWyg/OlxcXFxdfFteXFxdXSkrXFxdKXwoPzpcXFxcL3xbXlxcXS9dKSkqWy9dXFx3KlxccyooPz1bKS4sO118JCkiCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBbewogICAgICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSB2YWwgPT0gInsiID8gdGhpcy5uZXh0U3RhdGUgOiAiIjsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsID09ICJ7IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAicGFyZW4ubHBhcmVuIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAifSIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHQuaW5kZXhPZigic3RyaW5nIikgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBhcmVuLmVuZCI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT0gInsiID8gInBhcmVuLmxwYXJlbiIgOiAicGFyZW4ucnBhcmVuIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyIvLAogICAgICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvXFwoPzpbbnNydHZmYmFlJyJcXF18Yy58Qy0ufE0tLig/OlxcQy0uKT98WzAtN117M318eFtcZGEtZkEtRl17Mn18dVtcZGEtZkEtRl17NH0pLwogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnN0YXJ0IiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8jey8sCiAgICAgICAgICAgICAgICAgICAgcHVzaCAgOiAic3RhcnQiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvIi8sCiAgICAgICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgICAgIHB1c2ggIDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86W25zcnR2ZmJhZSciXFxdfGMufEMtLnxNLS4oPzpcXEMtLik/fFswLTddezN9fHhbXGRhLWZBLUZdezJ9fHVbXGRhLWZBLUZdezR9KS8KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5zdGFydCIsCiAgICAgICAgICAgICAgICAgICAgcmVnZXggOiAvI3svLAogICAgICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJy8sCiAgICAgICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC9cXFsnXFxdLwogICAgICAgICAgICAgICAgfSwgIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgICAgICByZWdleCA6IC8nLywKICAgICAgICAgICAgICAgICAgICBuZXh0ICA6ICJwb3AiCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgfV0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwgLy8gbmFtZXNwYWNlcyBhcmVuJ3Qgc3ltYm9scwogICAgICAgICAgICAgICAgcmVnZXggOiAiOjoiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmluc3RhbmNlIiwgLy8gaW5zdGFuY2UgdmFyaWFibGUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIkB7MSwyfVthLXpBLVpfXFxkXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuY2xhc3MiLCAvLyBjbGFzcyBuYW1lCiAgICAgICAgICAgICAgICByZWdleCA6ICJbQS1aXVthLXpBLVpfXFxkXSsiCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBjb25zdGFudE90aGVyU3ltYm9sLAogICAgICAgICAgICBjb25zdGFudE51bWVyaWNIZXgsCiAgICAgICAgICAgIGNvbnN0YW50TnVtZXJpY0Zsb2F0LAoKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5zZXBhcmF0b3Iua2V5LXZhbHVlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj0+IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBzdGF0ZU5hbWU6ICJoZXJlZG9jIiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdmFsdWVbMl0gPT0gJy0nID8gImluZGVudGVkSGVyZWRvYyIgOiAiaGVyZWRvYyI7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VucyA9IHZhbHVlLnNwbGl0KHRoaXMuc3BsaXRSZWdleCk7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXh0LCB0b2tlbnNbM10pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbCiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiJjb25zdGFudCIsIHZhbHVlOiB0b2tlbnNbMV19LAogICAgICAgICAgICAgICAgICAgICAgICB7dHlwZToic3RyaW5nIiwgdmFsdWU6IHRva2Vuc1syXX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiJzdXBwb3J0LmNsYXNzIiwgdmFsdWU6IHRva2Vuc1szXX0sCiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiJzdHJpbmciLCB2YWx1ZTogdG9rZW5zWzRdfQogICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDw8LT8pKFsnXCJgXT8pKFtcXHddKykoWydcImBdPykiLAogICAgICAgICAgICAgICAgcnVsZXM6IHsKICAgICAgICAgICAgICAgICAgICBoZXJlZG9jOiBbewogICAgICAgICAgICAgICAgICAgICAgICBvbk1hdGNoOiAgZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gc3RhY2tbMV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuY2xhc3MiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiLiokIiwKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgICAgIGluZGVudGVkSGVyZWRvYzogW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIl4gKyIKICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgIG9uTWF0Y2g6ICBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzdGFja1sxXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3VwcG9ydC5jbGFzcyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIuKiQiLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgcmVnZXggOiAiJCIsCiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICBuZXh0IDogZnVuY3Rpb24oY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1swXSA9PT0gImhlcmVkb2MiIHx8IHN0YWNrWzBdID09PSAiaW5kZW50ZWRIZXJlZG9jIikKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrWzBdOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U3RhdGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmNoYXJhY3RlciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcQlxcPy4iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIXxcXCR8JXwmfFxcKnxcXC1cXC18XFwtfFxcK1xcK3xcXCt8fnw9PT18PT18PXwhPXwhPT18PD18Pj18PDw9fD4+PXw+Pj49fDw+fDx8PnwhfCYmfFxcfFxcfHxcXD9cXDp8XFwqPXwlPXxcXCs9fFxcLT18Jj18XFxePXxcXGIoPzppbnxpbnN0YW5jZW9mfG5ld3xkZWxldGV8dHlwZW9mfHZvaWQpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiXj1lbmQoPzokfFxccy4qJCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNvbW1lbnQgc3Bhbm5pbmcgd2hvbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiLisiCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhSdWJ5SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlJ1YnlIaWdobGlnaHRSdWxlcyA9IFJ1YnlIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3J1YnkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9ydWJ5X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBSdWJ5SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3J1YnlfaGlnaGxpZ2h0X3J1bGVzIikuUnVieUhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBSdWJ5SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIHZhciBzdGFydGluZ0NsYXNzT3JNZXRob2QgPSBsaW5lLm1hdGNoKC9eXHMqKGNsYXNzfGRlZnxtb2R1bGUpXHMuKiQvKTsKICAgICAgICAgICAgdmFyIHN0YXJ0aW5nRG9CbG9jayA9IGxpbmUubWF0Y2goLy4qZG8oXHMqfFxzK1x8LipcfFxzKikkLyk7CiAgICAgICAgICAgIHZhciBzdGFydGluZ0NvbmRpdGlvbmFsID0gbGluZS5tYXRjaCgvXlxzKihpZnxlbHNlfHdoZW4pXHMqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCB8fCBzdGFydGluZ0NsYXNzT3JNZXRob2QgfHwgc3RhcnRpbmdEb0Jsb2NrIHx8IHN0YXJ0aW5nQ29uZGl0aW9uYWwpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIC9eXHMrKGVuZHxlbHNlKSQvLnRlc3QobGluZSArIGlucHV0KSB8fCB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICBpZiAoL30vLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KHNlc3Npb24sIHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICB2YXIgcHJldkxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93IC0gMSk7CiAgICAgICAgdmFyIHByZXZJbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQocHJldkxpbmUpOwogICAgICAgIHZhciB0YWIgPSBzZXNzaW9uLmdldFRhYlN0cmluZygpOwogICAgICAgIGlmIChwcmV2SW5kZW50Lmxlbmd0aCA8PSBpbmRlbnQubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQuc2xpY2UoLXRhYi5sZW5ndGgpID09IHRhYikKICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlKG5ldyBSYW5nZShyb3csIGluZGVudC5sZW5ndGgtdGFiLmxlbmd0aCwgcm93LCBpbmRlbnQubGVuZ3RoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9ydWJ5IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvc2xpbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3NsaW1faGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL21hcmtkb3duIiwiYWNlL21vZGUvY29mZmVlIiwiYWNlL21vZGUvc2NzcyIsImFjZS9tb2RlL3Nhc3MiLCJhY2UvbW9kZS9sZXNzIiwiYWNlL21vZGUvcnVieSIsImFjZS9tb2RlL2NzcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFNsaW1IaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc2xpbV9oaWdobGlnaHRfcnVsZXMiKS5TbGltSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgVGV4dE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTbGltSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgIGphdmFzY3JpcHQ6IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGUsCiAgICAgICAgbWFya2Rvd246IHJlcXVpcmUoIi4vbWFya2Rvd24iKS5Nb2RlLAogICAgICAgIGNvZmZlZTogcmVxdWlyZSgiLi9jb2ZmZWUiKS5Nb2RlLAogICAgICAgIHNjc3M6IHJlcXVpcmUoIi4vc2NzcyIpLk1vZGUsCiAgICAgICAgc2FzczogcmVxdWlyZSgiLi9zYXNzIikuTW9kZSwKICAgICAgICBsZXNzOiByZXF1aXJlKCIuL2xlc3MiKS5Nb2RlLAogICAgICAgIHJ1Ynk6IHJlcXVpcmUoIi4vcnVieSIpLk1vZGUsCiAgICAgICAgY3NzOiByZXF1aXJlKCIuL2NzcyIpLk1vZGUKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zbGltIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc2xpbSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-smarty.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zbWFydHlfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU21hcnR5SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwogICAgdmFyIHNtYXJ0eVJ1bGVzID0geyBzdGFydDogCiAgICAgICBbIHsgaW5jbHVkZTogJyNjb21tZW50cycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2Jsb2NrcycgfSBdLAogICAgICAnI2Jsb2Nrcyc6IAogICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VjdGlvbi5lbWJlZGRlZC5iZWdpbi5zbWFydHknLAogICAgICAgICAgIHJlZ2V4OiAnXFx7JT8nLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5zZWN0aW9uLmVtYmVkZGVkLmVuZC5zbWFydHknLAogICAgICAgICAgICAgICAgcmVnZXg6ICclP1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmdzJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyN2YXJpYWJsZXMnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2xhbmcnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzb3VyY2Uuc21hcnR5JyB9IF0gfSBdLAogICAgICAnI2NvbW1lbnRzJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuc21hcnR5JywKICAgICAgICAgICAgICAnY29tbWVudC5ibG9jay5zbWFydHknIF0sCiAgICAgICAgICAgcmVnZXg6ICcoXFx7JT8pKFxcKiknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdjb21tZW50LmJsb2NrLnNtYXJ0eScsIHJlZ2V4OiAnXFwqJT9cXH0nLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay5zbWFydHknIH0gXSB9IF0sCiAgICAgICcjbGFuZyc6IAogICAgICAgWyB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5zbWFydHknLAogICAgICAgICAgIHJlZ2V4OiAnKD86IT18IXw8PXw+PXw8fD58PT09fD09fCV8JiZ8XFx8XFx8KXxcXGIoPzphbmR8b3J8ZXF8bmVxfG5lfGd0ZXxndHxnZXxsdGV8bHR8bGV8bm90fG1vZClcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5zbWFydHknLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86VFJVRXxGQUxTRXx0cnVlfGZhbHNlKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5zbWFydHknLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86aWZ8ZWxzZXxlbHNlaWZ8Zm9yZWFjaHxmb3JlYWNoZWxzZXxzZWN0aW9ufHN3aXRjaHxjYXNlfGJyZWFrfGRlZmF1bHQpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUucGFyYW1ldGVyLnNtYXJ0eScsIHJlZ2V4OiAnXFxiW2EtekEtWl0rPScgfSwKICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uYnVpbHQtaW4uc21hcnR5JywKICAgICAgICAgICByZWdleDogJ1xcYig/OmNhcHR1cmV8Y29uZmlnX2xvYWR8Y291bnRlcnxjeWNsZXxkZWJ1Z3xldmFsfGZldGNofGluY2x1ZGVfcGhwfGluY2x1ZGV8aW5zZXJ0fGxpdGVyYWx8bWF0aHxzdHJpcHxyZGVsaW18bGRlbGltfGFzc2lnbnxjb25zdGFudHxibG9ja3xodG1sX1thLXpfXSopXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbi52YXJpYWJsZS1tb2RpZmllci5zbWFydHknLAogICAgICAgICAgIHJlZ2V4OiAnXFx8KD86Y2FwaXRhbGl6ZXxjYXR8Y291bnRfY2hhcmFjdGVyc3xjb3VudF9wYXJhZ3JhcGhzfGNvdW50X3NlbnRlbmNlc3xjb3VudF93b3Jkc3xkYXRlX2Zvcm1hdHxkZWZhdWx0fGVzY2FwZXxpbmRlbnR8bG93ZXJ8bmwyYnJ8cmVnZXhfcmVwbGFjZXxyZXBsYWNlfHNwYWNpZnl8c3RyaW5nX2Zvcm1hdHxzdHJpcF90YWdzfHN0cmlwfHRydW5jYXRlfHVwcGVyfHdvcmR3cmFwKScgfSBdLAogICAgICAnI3N0cmluZ3MnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLnNtYXJ0eScsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC5zbWFydHknLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLnNtYXJ0eScsIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLnNpbmdsZS5zbWFydHknIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4uc21hcnR5JywKICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQuc21hcnR5JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLnNtYXJ0eScsIHJlZ2V4OiAnXFxcXC4nIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZS5zbWFydHknIH0gXSB9IF0sCiAgICAgICcjdmFyaWFibGVzJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnZhcmlhYmxlLnNtYXJ0eScsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLm90aGVyLmdsb2JhbC5zbWFydHknIF0sCiAgICAgICAgICAgcmVnZXg6ICdcXGIoXFwkKShTbWFydHlcXC4pJyB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi52YXJpYWJsZS5zbWFydHknLAogICAgICAgICAgICAgICd2YXJpYWJsZS5vdGhlci5zbWFydHknIF0sCiAgICAgICAgICAgcmVnZXg6ICcoXFwkKShbYS16QS1aX11bYS16QS1aMC05X10qKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogWyAna2V5d29yZC5vcGVyYXRvci5zbWFydHknLCAndmFyaWFibGUub3RoZXIucHJvcGVydHkuc21hcnR5JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKC0+KShbYS16QS1aX11bYS16QS1aMC05X10qKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2tleXdvcmQub3BlcmF0b3Iuc21hcnR5JywKICAgICAgICAgICAgICAnbWV0YS5mdW5jdGlvbi1jYWxsLm9iamVjdC5zbWFydHknLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnZhcmlhYmxlLnNtYXJ0eScsCiAgICAgICAgICAgICAgJ3ZhcmlhYmxlLm90aGVyLnNtYXJ0eScsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udmFyaWFibGUuc21hcnR5JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKC0+KShbYS16QS1aX11bYS16QS1aMC05X10qKShcXCgpKC4qPykoXFwpKScgfSBdIH07CiAgICAKICAgIHZhciBzbWFydHlTdGFydCA9IHNtYXJ0eVJ1bGVzLnN0YXJ0OwogICAgCiAgICBmb3IgKHZhciBydWxlIGluIHRoaXMuJHJ1bGVzKSB7CiAgICAgICAgdGhpcy4kcnVsZXNbcnVsZV0udW5zaGlmdC5hcHBseSh0aGlzLiRydWxlc1tydWxlXSwgc21hcnR5U3RhcnQpOwogICAgfQogICAgCiAgICBPYmplY3Qua2V5cyhzbWFydHlSdWxlcykuZm9yRWFjaChmdW5jdGlvbih4KSB7CiAgICAgICAgaWYgKCF0aGlzLiRydWxlc1t4XSkKICAgICAgICAgICAgdGhpcy4kcnVsZXNbeF0gPSBzbWFydHlSdWxlc1t4XTsKICAgIH0sIHRoaXMpOwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpTbWFydHlIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsgZmlsZVR5cGVzOiBbICd0cGwnIF0sCiAgICAgIGZvbGRpbmdTdGFydE1hcmtlcjogJ1xceyU/JywKICAgICAgZm9sZGluZ1N0b3BNYXJrZXI6ICclP1xcfScsCiAgICAgIG5hbWU6ICdTbWFydHknLAogICAgICBzY29wZU5hbWU6ICd0ZXh0Lmh0bWwuc21hcnR5JyB9OwoKCm9vcC5pbmhlcml0cyhTbWFydHlIaWdobGlnaHRSdWxlcywgSHRtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU21hcnR5SGlnaGxpZ2h0UnVsZXMgPSBTbWFydHlIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3NtYXJ0eSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvaHRtbCIsImFjZS9tb2RlL3NtYXJ0eV9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIFNtYXJ0eUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zbWFydHlfaGlnaGxpZ2h0X3J1bGVzIikuU21hcnR5SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgSHRtbE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTbWFydHlIaWdobGlnaHRSdWxlczsKfTsKCm9vcC5pbmhlcml0cyhNb2RlLCBIdG1sTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3NtYXJ0eSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3NtYXJ0eSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-snippets.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciByZSA9IC9cUy87CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSB8fCBsaW5lW3N0YXJ0TGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGluZS5zZWFyY2gocmUpOwoKICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBpZiAobGluZVtsZXZlbF0gIT0gIiMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBuZXh0W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocHJldkluZGVudCA9PSBpbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMikuc2VhcmNoKC9cUy8pID09IC0xKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgaW5kZW50KQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKCiAgICAgICAgaWYgKGluZGVudCA8IG5leHRJbmRlbnQpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zbmlwcGV0cyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFNuaXBwZXRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHZhciBidWlsdGlucyA9ICJTRUxFQ1RJT058Q1VSUkVOVF9XT1JEfFNFTEVDVEVEX1RFWFR8Q1VSUkVOVF9MSU5FfExJTkVfSU5ERVh8IiArCiAgICAgICAgIkxJTkVfTlVNQkVSfFNPRlRfVEFCU3xUQUJfU0laRXxGSUxFTkFNRXxGSUxFUEFUSHxGVUxMTkFNRSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAge3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLCByZWdleDogL1xcW1wkfWBcXF0vfSwKICAgICAgICAgICAge3Rva2VuOiJrZXl3b3JkIiwgcmVnZXg6ICJcXCQoPzpUTV8pPyg/OiIgKyBidWlsdGlucyArICIpXFxiIn0sCiAgICAgICAgICAgIHt0b2tlbjoidmFyaWFibGUiLCByZWdleDogIlxcJFxcdysifSwKICAgICAgICAgICAge29uTWF0Y2g6IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIGlmIChzdGFja1sxXSkKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXSsrOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoc3RhdGUsIDEpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5OYW1lOwogICAgICAgICAgICB9LCB0b2tlbk5hbWU6ICJtYXJrdXAubGlzdCIsIHJlZ2V4OiAiXFwkeyIsIG5leHQ6ICJ2YXJEZWNsIn0sCiAgICAgICAgICAgIHtvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAidGV4dCI7CiAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSkKICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCwyKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuTmFtZTsKICAgICAgICAgICAgfSwgdG9rZW5OYW1lOiAibWFya3VwLmxpc3QiLCByZWdleDogIn0ifSwKICAgICAgICAgICAge3Rva2VuOiAiZG9jLmNvbW1lbnQiLCByZWdleDovXlwkezJ9LXs1LH0kL30KICAgICAgICBdLAogICAgICAgICJ2YXJEZWNsIiA6IFsKICAgICAgICAgICAge3JlZ2V4OiAvXGQrXGIvLCB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMifSwKICAgICAgICAgICAge3Rva2VuOiJrZXl3b3JkIiwgcmVnZXg6ICIoPzpUTV8pPyg/OiIgKyBidWlsdGlucyArICIpXFxiIn0sCiAgICAgICAgICAgIHt0b2tlbjoidmFyaWFibGUiLCByZWdleDogIlxcdysifSwKICAgICAgICAgICAge3JlZ2V4OiAvOi8sIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCBuZXh0OiAic3RhcnQifSwKICAgICAgICAgICAge3JlZ2V4OiAvXC8vLCB0b2tlbjogInN0cmluZy5yZWdleCIsIG5leHQ6ICJyZWdleHAifSwKICAgICAgICAgICAge3JlZ2V4OiAiIiwgbmV4dDogInN0YXJ0In0KICAgICAgICBdLAogICAgICAgICJyZWdleHAiIDogWwogICAgICAgICAgICB7cmVnZXg6IC9cXC4vLCB0b2tlbjogImVzY2FwZSJ9LAogICAgICAgICAgICB7cmVnZXg6IC9cWy8sIHRva2VuOiAicmVnZXguc3RhcnQiLCBuZXh0OiAiY2hhckNsYXNzIn0sCiAgICAgICAgICAgIHtyZWdleDogIi8iLCB0b2tlbjogInN0cmluZy5yZWdleCIsIG5leHQ6ICJmb3JtYXQifSwKICAgICAgICAgICAgeyJ0b2tlbiI6ICJzdHJpbmcucmVnZXgiLCByZWdleDoiLiJ9CiAgICAgICAgXSwKICAgICAgICBjaGFyQ2xhc3MgOiBbCiAgICAgICAgICAgIHtyZWdleDogIlxcLiIsIHRva2VuOiAiZXNjYXBlIn0sCiAgICAgICAgICAgIHtyZWdleDogIlxcXSIsIHRva2VuOiAicmVnZXguZW5kIiwgbmV4dDogInJlZ2V4cCJ9LAogICAgICAgICAgICB7InRva2VuIjogInN0cmluZy5yZWdleCIsIHJlZ2V4OiIuIn0KICAgICAgICBdLAogICAgICAgICJmb3JtYXQiIDogWwogICAgICAgICAgICB7cmVnZXg6IC9cXFt1bFVMRV0vLCB0b2tlbjogImtleXdvcmQifSwKICAgICAgICAgICAge3JlZ2V4OiAvXCRcZCsvLCB0b2tlbjogInZhcmlhYmxlIn0sCiAgICAgICAgICAgIHtyZWdleDogIi9bZ2ltXSo6PyIsIHRva2VuOiAic3RyaW5nLnJlZ2V4IiwgbmV4dDogInN0YXJ0In0sCiAgICAgICAgICAgIHsidG9rZW4iOiAic3RyaW5nIiwgcmVnZXg6Ii4ifQogICAgICAgIF0KICAgIH07Cn07Cm9vcC5pbmhlcml0cyhTbmlwcGV0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNuaXBwZXRIaWdobGlnaHRSdWxlcyA9IFNuaXBwZXRIaWdobGlnaHRSdWxlczsKCnZhciBTbmlwcGV0R3JvdXBIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAge3Rva2VuOiAidGV4dCIsIHJlZ2V4OiAiXlxcdCIsIG5leHQ6ICJzbi1zdGFydCJ9LAogICAgICAgICAgICB7dG9rZW46ImludmFsaWQiLCByZWdleDogL14gXHMqL30sCiAgICAgICAgICAgIHt0b2tlbjoiY29tbWVudCIsIHJlZ2V4OiAvXiMuKi99LAogICAgICAgICAgICB7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiAiXnJlZ2V4ICIsIG5leHQ6ICJyZWdleCJ9LAogICAgICAgICAgICB7dG9rZW46ImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4OiAiXih0cmlnZ2VyfGVuZFRyaWdnZXJ8bmFtZXxzbmlwcGV0fGd1YXJkfGVuZEd1YXJkfHRhYlRyaWdnZXJ8a2V5KVxcYiJ9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiIDogWwogICAgICAgICAgICB7dG9rZW46InRleHQiLCByZWdleDogIlxcLiJ9LAogICAgICAgICAgICB7dG9rZW46ImtleXdvcmQiLCByZWdleDogIi8ifSwKICAgICAgICAgICAge3Rva2VuOiJlbXB0eSIsIHJlZ2V4OiAiJCIsIG5leHQ6ICJzdGFydCJ9CiAgICAgICAgXQogICAgfTsKICAgIHRoaXMuZW1iZWRSdWxlcyhTbmlwcGV0SGlnaGxpZ2h0UnVsZXMsICJzbi0iLCBbCiAgICAgICAge3Rva2VuOiAidGV4dCIsIHJlZ2V4OiAiXlxcdCIsIG5leHQ6ICJzbi1zdGFydCJ9LAogICAgICAgIHtvbk1hdGNoOiBmdW5jdGlvbih2YWx1ZSwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIHN0YWNrLnNwbGljZShzdGFjay5sZW5ndGgpOwogICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbk5hbWU7CiAgICAgICAgfSwgdG9rZW5OYW1lOiAidGV4dCIsIHJlZ2V4OiAiXig/IVx0KSIsIG5leHQ6ICJzdGFydCJ9CiAgICBdKTsKICAgIAp9OwoKb29wLmluaGVyaXRzKFNuaXBwZXRHcm91cEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5TbmlwcGV0R3JvdXBIaWdobGlnaHRSdWxlcyA9IFNuaXBwZXRHcm91cEhpZ2hsaWdodFJ1bGVzOwoKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTbmlwcGV0R3JvdXBIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy4kaW5kZW50V2l0aFRhYnMgPSB0cnVlOwogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIiMiOwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvc25pcHBldHMiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc25pcHBldHMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-soy_template.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zb3lfdGVtcGxhdGVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU295VGVtcGxhdGVIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgSHRtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdmFyIHNveVJ1bGVzID0geyBzdGFydDogCiAgICAgICBbIHsgaW5jbHVkZTogJyN0ZW1wbGF0ZScgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2lmJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudC1saW5lJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudC1ibG9jaycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2NvbW1lbnQtZG9jJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY2FsbCcgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2NzcycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3BhcmFtJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcHJpbnQnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNtc2cnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNmb3InIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNmb3JlYWNoJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjc3dpdGNoJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjdGFnJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICd0ZXh0Lmh0bWwuYmFzaWMnIH0gXSwKICAgICAgJyNjYWxsJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5iZWdpbi5zb3knLAogICAgICAgICAgICAgICdtZXRhLnRhZy5jYWxsLnNveScgXSwKICAgICAgICAgICByZWdleDogJyhcXHsvPykoXFxzKikoPz1jYWxsfGRlbGNhbGwpJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuZW5kLnNveScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmctcXVvdGVkLXNpbmdsZScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjc3RyaW5nLXF1b3RlZC1kb3VibGUnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogWydlbnRpdHkubmFtZS50YWcuc295JywgJ3ZhcmlhYmxlLnBhcmFtZXRlci5zb3knXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKGNhbGx8ZGVsY2FsbCkoXFxzK1tcXC5cXHddKyknfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuc295JywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdrZXl3b3JkLm9wZXJhdG9yLnNveScgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiKGRhdGEpKFxccyopKD0pJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcuY2FsbC5zb3knIH0gXSB9IF0sCiAgICAgICcjY29tbWVudC1saW5lJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdjb21tZW50LmxpbmUuZG91YmxlLXNsYXNoLnNveScsCiAgICAgICAgICAgICAgJ2NvbW1lbnQubGluZS5kb3VibGUtc2xhc2guc295JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKC8vKSguKiQpJyB9IF0sCiAgICAgICcjY29tbWVudC1ibG9jayc6IAogICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmJlZ2luLnNveScsCiAgICAgICAgICAgcmVnZXg6ICcvXFwqKD8hXFwqKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5lbmQuc295JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFwqLycsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnY29tbWVudC5ibG9jay5zb3knIH0gXSB9IF0sCiAgICAgICcjY29tbWVudC1kb2MnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5iZWdpbi5zb3knLAogICAgICAgICAgIHJlZ2V4OiAnL1xcKlxcKig/IS8pJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LmVuZC5zb3knLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCovJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogWyAnc3VwcG9ydC50eXBlLnNveScsICd0ZXh0JywgJ3ZhcmlhYmxlLnBhcmFtZXRlci5zb3knIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhAcGFyYW18QHBhcmFtXFw/KShcXHMrKShcXHcrKScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ2NvbW1lbnQuYmxvY2suZG9jdW1lbnRhdGlvbi5zb3knIH0gXSB9IF0sCiAgICAgICcjY3NzJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5iZWdpbi5zb3knLAogICAgICAgICAgICAgICdtZXRhLnRhZy5jc3Muc295JywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudGFnLnNveScgXSwKICAgICAgICAgICByZWdleDogJyhcXHsvPykoXFxzKikoY3NzKVxcYicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmVuZC5zb3knLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXH0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnc3VwcG9ydC5jb25zdGFudC5zb3knLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpMSVRFUkFMfFJFRkVSRU5DRXxCQUNLRU5EX1NQRUNJRklDfEdPT0cpXFxiJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcuY3NzLnNveScgfSBdIH0gXSwKICAgICAgJyNmb3InOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmJlZ2luLnNveScsCiAgICAgICAgICAgICAgJ21ldGEudGFnLmZvci5zb3knLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50YWcuc295JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcey8/KShcXHMqKShmb3IpXFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuZW5kLnNveScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnNveScsIHJlZ2V4OiAnXFxiaW5cXGInIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uc295JywgcmVnZXg6ICdcXGJyYW5nZVxcYicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI251bWJlcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjcHJpbWl0aXZlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcuZm9yLnNveScgfSBdIH0gXSwKICAgICAgJyNmb3JlYWNoJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5iZWdpbi5zb3knLAogICAgICAgICAgICAgICdtZXRhLnRhZy5mb3JlYWNoLnNveScsCiAgICAgICAgICAgICAgJ2VudGl0eS5uYW1lLnRhZy5zb3knIF0sCiAgICAgICAgICAgcmVnZXg6ICcoXFx7Lz8pKFxccyopKGZvcmVhY2gpXFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuZW5kLnNveScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnNveScsIHJlZ2V4OiAnXFxiaW5cXGInIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3ZhcmlhYmxlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcuZm9yZWFjaC5zb3knIH0gXSB9IF0sCiAgICAgICcjZnVuY3Rpb24nOiAKICAgICAgIFsgeyB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24uc295JywKICAgICAgICAgICByZWdleDogJ1xcYig/OmlzRmlyc3R8aXNMYXN0fGluZGV4fGhhc0RhdGF8bGVuZ3RofGtleXN8cm91bmR8Zmxvb3J8Y2VpbGluZ3xtaW58bWF4fHJhbmRvbUludClcXGInIH0gXSwKICAgICAgJyNpZic6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuYmVnaW4uc295JywKICAgICAgICAgICAgICAnbWV0YS50YWcuaWYuc295JywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudGFnLnNveScgXSwKICAgICAgICAgICByZWdleDogJyhcXHsvPykoXFxzKikoaWZ8ZWxzZWlmKVxcYicsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmVuZC5zb3knLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXH0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI29wZXJhdG9yJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNmdW5jdGlvbicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjc3RyaW5nLXF1b3RlZC1zaW5nbGUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3N0cmluZy1xdW90ZWQtZG91YmxlJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcuaWYuc295JyB9IF0gfSBdLAogICAgICAnI25hbWVzcGFjZSc6IAogICAgICAgWyB7IHRva2VuOiBbICdlbnRpdHkubmFtZS50YWcuc295JywgJ3RleHQnLCAndmFyaWFibGUucGFyYW1ldGVyLnNveScgXSwKICAgICAgICAgICByZWdleDogJyhuYW1lc3BhY2V8ZGVscGFja2FnZSkoXFxzKykoW1xcd1xcLl0rKScgfSBdLAogICAgICAnI251bWJlcic6IFsgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMnLCByZWdleDogJ1tcXGRdKycgfSBdLAogICAgICAnI29wZXJhdG9yJzogCiAgICAgICBbIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLnNveScsCiAgICAgICAgICAgcmVnZXg6ICc9PXwhPXxcXGJhbmRcXGJ8XFxib3JcXGJ8XFxibm90XFxifC18XFwrfC98XFw/OicgfSBdLAogICAgICAnI3BhcmFtJzogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5iZWdpbi5zb3knLAogICAgICAgICAgICAgICdtZXRhLnRhZy5wYXJhbS5zb3knLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50YWcuc295JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcey8/KShcXHMqKShwYXJhbSknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5lbmQuc295JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3ZhcmlhYmxlJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5zb3knLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ2tleXdvcmQub3BlcmF0b3Iuc295JyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGIoW1xcd10rKShcXHMqKSgoPzo6KT8pJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcucGFyYW0uc295JyB9IF0gfSBdLAogICAgICAnI3ByaW1pdGl2ZSc6IAogICAgICAgWyB7IHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2Uuc295JywKICAgICAgICAgICByZWdleDogJ1xcYig/Om51bGx8ZmFsc2V8dHJ1ZSlcXGInIH0gXSwKICAgICAgJyNtc2cnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmJlZ2luLnNveScsCiAgICAgICAgICAgICAgJ21ldGEudGFnLm1zZy5zb3knLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50YWcuc295JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcey8/KShcXHMqKShtc2cpXFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuZW5kLnNveScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmctcXVvdGVkLXNpbmdsZScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjc3RyaW5nLXF1b3RlZC1kb3VibGUnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnNveScsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAna2V5d29yZC5vcGVyYXRvci5zb3knIF0sCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihtZWFuaW5nfGRlc2MpKFxccyopKD0pJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcubXNnLnNveScgfSBdIH0gXSwKICAgICAgJyNwcmludCc6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuYmVnaW4uc295JywKICAgICAgICAgICAgICAnbWV0YS50YWcucHJpbnQuc295JywKICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudGFnLnNveScgXSwKICAgICAgICAgICByZWdleDogJyhcXHsvPykoXFxzKikocHJpbnQpXFxiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuZW5kLnNveScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyN2YXJpYWJsZScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjcHJpbnQtcGFyYW1ldGVyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNudW1iZXInIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3ByaW1pdGl2ZScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjYXR0cmlidXRlLWxvb2t1cCcgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEudGFnLnByaW50LnNveScgfSBdIH0gXSwKICAgICAgJyNwcmludC1wYXJhbWV0ZXInOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3Iuc295JywgcmVnZXg6ICdcXHwnIH0sCiAgICAgICAgIHsgdG9rZW46ICd2YXJpYWJsZS5wYXJhbWV0ZXIuc295JywKICAgICAgICAgICByZWdleDogJ25vQXV0b2VzY2FwZXxpZHxlc2NhcGVIdG1sfGVzY2FwZUpzfGluc2VydFdvcmtCcmVha3N8dHJ1bmNhdGUnIH0gXSwKICAgICAgJyNzcGVjaWFsLWNoYXJhY3Rlcic6IAogICAgICAgWyB7IHRva2VuOiAnc3VwcG9ydC5jb25zdGFudC5zb3knLAogICAgICAgICAgIHJlZ2V4OiAnXFxic3BcXGJ8XFxibmlsXFxifFxcXFxyfFxcXFxufFxcXFx0fFxcYmxiXFxifFxcYnJiXFxiJyB9IF0sCiAgICAgICcjc3RyaW5nLXF1b3RlZC1kb3VibGUnOiBbIHsgdG9rZW46ICdzdHJpbmcucXVvdGVkLmRvdWJsZScsIHJlZ2V4OiAnIlteIl0qIicgfSBdLAogICAgICAnI3N0cmluZy1xdW90ZWQtc2luZ2xlJzogWyB7IHRva2VuOiAnc3RyaW5nLnF1b3RlZC5zaW5nbGUnLCByZWdleDogJ1wnW15cJ10qXCcnIH0gXSwKICAgICAgJyNzd2l0Y2gnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmJlZ2luLnNveScsCiAgICAgICAgICAgICAgJ21ldGEudGFnLnN3aXRjaC5zb3knLAogICAgICAgICAgICAgICdlbnRpdHkubmFtZS50YWcuc295JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcey8/KShcXHMqKShzd2l0Y2h8Y2FzZSlcXGInLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5lbmQuc295JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3ZhcmlhYmxlJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNmdW5jdGlvbicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjbnVtYmVyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmctcXVvdGVkLXNpbmdsZScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjc3RyaW5nLXF1b3RlZC1kb3VibGUnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLnRhZy5zd2l0Y2guc295JyB9IF0gfSBdLAogICAgICAnI2F0dHJpYnV0ZS1sb29rdXAnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYXR0cmlidXRlLWxvb2t1cC5iZWdpbi5zb3knLAogICAgICAgICAgIHJlZ2V4OiAnXFxbJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5hdHRyaWJ1dGUtbG9va3VwLmVuZC5zb3knLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXF0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2Z1bmN0aW9uJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNvcGVyYXRvcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjbnVtYmVyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNwcmltaXRpdmUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3N0cmluZy1xdW90ZWQtc2luZ2xlJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdHJpbmctcXVvdGVkLWRvdWJsZScgfSBdIH0gXSwKICAgICAgJyN0YWcnOiAKICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmJlZ2luLnNveScsCiAgICAgICAgICAgcmVnZXg6ICdcXHsnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnRhZy5lbmQuc295JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFx9JywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI25hbWVzcGFjZScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjdmFyaWFibGUnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3NwZWNpYWwtY2hhcmFjdGVyJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyN0YWctc2ltcGxlJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNmdW5jdGlvbicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjb3BlcmF0b3InIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2F0dHJpYnV0ZS1sb29rdXAnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI251bWJlcicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjcHJpbWl0aXZlJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNwcmludC1wYXJhbWV0ZXInIH0gXSB9IF0sCiAgICAgICcjdGFnLXNpbXBsZSc6IAogICAgICAgWyB7IHRva2VuOiAnZW50aXR5Lm5hbWUudGFnLnNveScsCiAgICAgICAgICAgcmVnZXg6ICd7e1xccyooPzpsaXRlcmFsfGVsc2V8aWZlbXB0eXxkZWZhdWx0KVxccyooPz1cXH0pJ30gXSwKICAgICAgJyN0ZW1wbGF0ZSc6IAogICAgICAgWyB7IHRva2VuOiAKICAgICAgICAgICAgWyAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi50YWcuYmVnaW4uc295JywKICAgICAgICAgICAgICAnbWV0YS50YWcudGVtcGxhdGUuc295JyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxcey8/KShcXHMqKSg/PXRlbXBsYXRlfGRlbHRlbXBsYXRlKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24udGFnLmVuZC5zb3knLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXH0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiBbJ2VudGl0eS5uYW1lLnRhZy5zb3knLCAndGV4dCcsICdlbnRpdHkubmFtZS5mdW5jdGlvbi5zb3knIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyh0ZW1wbGF0ZXxkZWx0ZW1wbGF0ZSkoXFxzKykoW1xcLlxcd10rKScsCiAgICAgICAgICAgICAgICBvcmlnaW5hbFJlZ2V4OiAnKD88PXRlbXBsYXRlfGRlbHRlbXBsYXRlKVxccysoW1xcLlxcd10rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuc295JywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdrZXl3b3JkLm9wZXJhdG9yLnNveScsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAnc3RyaW5nLnF1b3RlZC5kb3VibGUuc295JyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXGIocHJpdmF0ZSkoXFxzKikoPSkoXFxzKikoInRydWUifCJmYWxzZSIpJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5zb3knLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ2tleXdvcmQub3BlcmF0b3Iuc295JywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdzdHJpbmcucXVvdGVkLnNpbmdsZS5zb3knIF0sCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihwcml2YXRlKShcXHMqKSg9KShcXHMqKShcJ3RydWVcJ3xcJ2ZhbHNlXCcpJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5zb3knLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ2tleXdvcmQub3BlcmF0b3Iuc295JywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdzdHJpbmcucXVvdGVkLmRvdWJsZS5zb3knIF0sCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihhdXRvZXNjYXBlKShcXHMqKSg9KShcXHMqKSgidHJ1ZSJ8ImZhbHNlInwiY29udGV4dHVhbCIpJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46IAogICAgICAgICAgICAgICAgIFsgJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS5zb3knLAogICAgICAgICAgICAgICAgICAgJ3RleHQnLAogICAgICAgICAgICAgICAgICAgJ2tleXdvcmQub3BlcmF0b3Iuc295JywKICAgICAgICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICdzdHJpbmcucXVvdGVkLnNpbmdsZS5zb3knIF0sCiAgICAgICAgICAgICAgICByZWdleDogJ1xcYihhdXRvZXNjYXBlKShcXHMqKSg9KShcXHMqKShcJ3RydWVcJ3xcJ2ZhbHNlXCd8XCdjb250ZXh0dWFsXCcpJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS50YWcudGVtcGxhdGUuc295JyB9IF0gfSBdLAogICAgICAnI3ZhcmlhYmxlJzogWyB7IHRva2VuOiAndmFyaWFibGUub3RoZXIuc295JywgcmVnZXg6ICdcXCRbXFx3XFwuXSsnIH0gXSB9OwogICAgCiAgICAKICAgIGZvciAodmFyIGkgaW4gc295UnVsZXMpIHsKICAgICAgICBpZiAodGhpcy4kcnVsZXNbaV0pIHsKICAgICAgICAgICAgdGhpcy4kcnVsZXNbaV0udW5zaGlmdC5hcHBseSh0aGlzLiRydWxlc1tpXSwgc295UnVsZXNbaV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJHJ1bGVzW2ldID0gc295UnVsZXNbaV07CiAgICAgICAgfQogICAgfQogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpTb3lUZW1wbGF0ZUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0geyBjb21tZW50OiAnU295VGVtcGxhdGUnLAogICAgICBmaWxlVHlwZXM6IFsgJ3NveScgXSwKICAgICAgZmlyc3RMaW5lTWF0Y2g6ICdcXHtcXHMqbmFtZXNwYWNlXFxiJywKICAgICAgZm9sZGluZ1N0YXJ0TWFya2VyOiAnXFx7XFxzKnRlbXBsYXRlXFxzK1teXFx9XSpcXH0nLAogICAgICBmb2xkaW5nU3RvcE1hcmtlcjogJ1xce1xccyovXFxzKnRlbXBsYXRlXFxzKlxcfScsCiAgICAgIG5hbWU6ICdTb3lUZW1wbGF0ZScsCiAgICAgIHNjb3BlTmFtZTogJ3NvdXJjZS5zb3knIH07CgoKb29wLmluaGVyaXRzKFNveVRlbXBsYXRlSGlnaGxpZ2h0UnVsZXMsIEh0bWxIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNveVRlbXBsYXRlSGlnaGxpZ2h0UnVsZXMgPSBTb3lUZW1wbGF0ZUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvc295X3RlbXBsYXRlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sIiwiYWNlL21vZGUvc295X3RlbXBsYXRlX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIFNveVRlbXBsYXRlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3NveV90ZW1wbGF0ZV9oaWdobGlnaHRfcnVsZXMiKS5Tb3lUZW1wbGF0ZUhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU295VGVtcGxhdGVIaWdobGlnaHRSdWxlczsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3NveV90ZW1wbGF0ZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3NveV90ZW1wbGF0ZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-space.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKCkge307Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJhbmdlID0gdGhpcy5pbmRlbnRhdGlvbkJsb2NrKHNlc3Npb24sIHJvdyk7CiAgICAgICAgaWYgKHJhbmdlKQogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CgogICAgICAgIHZhciByZSA9IC9cUy87CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRMZXZlbCA9IGxpbmUuc2VhcmNoKHJlKTsKICAgICAgICBpZiAoc3RhcnRMZXZlbCA9PSAtMSB8fCBsaW5lW3N0YXJ0TGV2ZWxdICE9ICIjIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKCiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGxldmVsID0gbGluZS5zZWFyY2gocmUpOwoKICAgICAgICAgICAgaWYgKGxldmVsID09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBpZiAobGluZVtsZXZlbF0gIT0gIiMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBuZXh0W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocHJldkluZGVudCA9PSBpbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMiKSB7CiAgICAgICAgICAgIGlmIChzZXNzaW9uLmdldExpbmUocm93IC0gMikuc2VhcmNoKC9cUy8pID09IC0xKSB7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgaW5kZW50KQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKCiAgICAgICAgaWYgKGluZGVudCA8IG5leHRJbmRlbnQpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zcGFjZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBTcGFjZUhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyAqLywKICAgICAgICAgICAgICAgIG5leHQgOiAia2V5IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eV9saW5lIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyQvLAogICAgICAgICAgICAgICAgbmV4dCA6ICJrZXkiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJrZXkiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cUysvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImVtcHR5X2xpbmUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvJC8sCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvIC8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJ2YWx1ZSIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInZhbHVlIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8kLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW14kXS8KICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07CiAgICAKfTsKCm9vcC5pbmhlcml0cyhTcGFjZUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5TcGFjZUhpZ2hsaWdodFJ1bGVzID0gU3BhY2VIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3NwYWNlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLCJhY2UvbW9kZS9zcGFjZV9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NvZmZlZSIpLkZvbGRNb2RlOwp2YXIgU3BhY2VIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc3BhY2VfaGlnaGxpZ2h0X3J1bGVzIikuU3BhY2VIaWdobGlnaHRSdWxlczsKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTcGFjZUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvc3BhY2UiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3NwYWNlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-sparql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zcGFycWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU1BBUlFMSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgaW5jbHVkZTogIiNjb21tZW50cyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjc3RyaW5ncyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjc3RyaW5nLWxhbmd1YWdlLXN1ZmZpeGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNzdHJpbmctZGF0YXR5cGUtc3VmZml4ZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI2xvZ2ljLW9wZXJhdG9ycyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjcmVsYXRpdmUtdXJscyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjeG1sLXNjaGVtYS10eXBlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjcmRmLXNjaGVtYS10eXBlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjb3dsLXR5cGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNxbmFtZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI2tleXdvcmRzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNidWlsdC1pbi1mdW5jdGlvbnMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3ZhcmlhYmxlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjYm9vbGVhbi1saXRlcmFsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNwdW5jdHVhdGlvbi1vcGVyYXRvcnMiCiAgICAgICAgfV0sCiAgICAgICAgIiNib29sZWFuLWxpdGVyYWwiOiBbewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4uc3BhcnFsIiwKICAgICAgICAgICAgcmVnZXg6IC90cnVlfGZhbHNlLwogICAgICAgIH1dLAogICAgICAgICIjYnVpbHQtaW4tZnVuY3Rpb25zIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LmZ1bmN0aW9uLnNwYXJxbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvW0FhXVtCYl1bU3NdfFtBYV1bVnZdW0dnXXxbQmJdW05uXVtPb11bRGRdW0VlXXxbQmJdW09vXVtVdV1bTm5dW0RkXXxbQ2NdW0VlXVtJaV1bTGxdfFtDY11bT29dW0FhXVtMbF1bRWVdW1NzXVtDY11bRWVdfFtDY11bT29dW05uXVtDY11bQWFdW1R0XXxbQ2NdW09vXVtObl1bVHRdW0FhXVtJaV1bTm5dW1NzXXxbQ2NdW09vXVtVdV1bTm5dW1R0XXxbRGRdW0FhXVtUdF1bQWFdW1R0XVtZeV1bUHBdW0VlXXxbRGRdW0FhXVtZeV18W0VlXVtObl1bQ2NdW09vXVtEZF1bRWVdX1tGZl1bT29dW1JyXV9bVXVdW1JyXVtJaV18W0VlXVtYeF1bSWldW1NzXVtUdF1bU3NdfFtGZl1bTGxdW09vXVtPb11bUnJdfFtHZ11bUnJdW09vXVtVdV1bUHBdX1tDY11bT29dW05uXVtDY11bQWFdW1R0XXxbSGhdW09vXVtVdV1bUnJdW1NzXXxbSWldW0ZmXXxbSWldW1JyXVtJaV18W0lpXVtTc11bQmJdW0xsXVtBYV1bTm5dW0trXXxbSWldW1NzXVtJaV1bUnJdW0lpXXxbSWldW1NzXVtMbF1bSWldW1R0XVtFZV1bUnJdW0FhXVtMbF18W0lpXVtTc11bTm5dW1V1XVtNbV1bRWVdW1JyXVtJaV1bQ2NdfFtJaV1bU3NdW1V1XVtScl1bSWldfFtMbF1bQWFdW05uXVtHZ118W0xsXVtBYV1bTm5dW0dnXVtNbV1bQWFdW1R0XVtDY11bSGhdW0VlXVtTc118W0xsXVtDY11bQWFdW1NzXVtFZV18W01tXVtBYV1bWHhdfFtNbV1bRGRdNXxbTW1dW0lpXVtObl18W01tXVtJaV1bTm5dW1V1XVtUdF1bRWVdW1NzXXxbTW1dW09vXVtObl1bVHRdW0hoXXxbTm5dW09vXVtXd118W1JyXVtBYV1bTm5dW0RkXXxbUnJdW0VlXVtHZ11bRWVdW1h4XXxbUnJdW0VlXVtQcF1bTGxdW0FhXVtDY11bRWVdfFtScl1bT29dW1V1XVtObl1bRGRdfFtTc11bQWFdW01tXVtFZV1bVHRdW0VlXVtScl1bTW1dfFtTc11bQWFdW01tXVtQcF1bTGxdW0VlXXxbU3NdW0VlXVtDY11bT29dW05uXVtEZF1bU3NdfFtTc11bRWVdW1BwXVtBYV1bUnJdW0FhXVtUdF1bT29dW1JyXXxbU3NdW0hoXVtBYV0oPzoxfDI1NnwzODR8NTEyKXxbU3NdW1R0XVtScl18W1NzXVtUdF1bUnJdW0FhXVtGZl1bVHRdW0VlXVtScl18W1NzXVtUdF1bUnJdW0JiXVtFZV1bRmZdW09vXVtScl1bRWVdfFtTc11bVHRdW1JyXVtEZF1bVHRdfFtTc11bVHRdW1JyXVtFZV1bTm5dW0RkXVtTc118W1NzXVtUdF1bUnJdW0xsXVtBYV1bTm5dW0dnXXxbU3NdW1R0XVtScl1bTGxdW0VlXVtObl18W1NzXVtUdF1bUnJdW1NzXVtUdF1bQWFdW1JyXVtUdF1bU3NdfFtTc11bVHRdW1JyXVtVdV1bVXVdW0lpXVtEZF18W1NzXVtVdV1bQmJdW1NzXVtUdF1bUnJdfFtTc11bVXVdW01tXXxbVHRdW0lpXVtNbV1bRWVdW1p6XVtPb11bTm5dW0VlXXxbVHRdW1p6XXxbVXVdW0NjXVtBYV1bU3NdW0VlXXxbVXVdW1JyXVtJaV18W1V1XVtVdV1bSWldW0RkXXxbWXldW0VlXVtBYV1bUnJdLwogICAgICAgIH1dLAogICAgICAgICIjY29tbWVudHMiOiBbewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC5zcGFycWwiLAogICAgICAgICAgICAgICAgImNvbW1lbnQubGluZS5oYXNoLnNwYXJxbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC8oIykoLiokKS8KICAgICAgICB9XSwKICAgICAgICAiI2tleXdvcmRzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyLnNwYXJxbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvW0FhXVtEZF1bRGRdfFtBYV1bTGxdW0xsXXxbQWFdW1NzXXxbQXNdW1NzXVtDY118W0FhXVtTc11bS2tdfFtCYl1bQWFdW1NzXVtFZV18W0JiXVtJaV1bTm5dW0RkXXxbQmJdW1l5XXxbQ2NdW0xsXVtFZV1bQWFdW1JyXXxbQ2NdW09vXVtObl1bU3NdW1R0XVtScl1bVXVdW0NjXVtUdF18W0NjXVtPb11bUHBdW1l5XXxbQ2NdW1JyXVtFZV1bQWFdW1R0XVtFZV18W0RkXVtBYV1bVHRdW0FhXXxbRGRdW0VlXVtGZl1bQWFdW1V1XVtMbF1bVHRdfFtEZF1bRWVdW0xsXVtFZV1bVHRdW0VlXXxbRGRdW0VlXVtTY11bQ2NdfFtEZF1bRWVdW1NzXVtDY11bUnJdW0lpXVtCYl1bRWVdfFtEZF1bSWldW1NzXVtUdF1bSWldW05uXVtDY11bVHRdfFtEZF1bUnJdW09vXVtQcF18W0ZmXVtJaV1bTGxdW1R0XVtFZV1bUnJdfFtGZl1bUnJdW09vXVtNbV18W0dnXVtScl1bQWFdW1BwXVtIaF18W0dnXVtScl1bT29dW1V1XVtQcF18W0hoXVtBYV1bVnZdW0lpXVtObl1bR2ddfFtJaV1bTm5dW1NzXVtFZV1bUnJdW1R0XXxbTGxdW0lpXVtNbV1bSWldW1R0XXxbTGxdW09vXVtBYV1bRGRdfFtNbV1bSWldW05uXVtVdV1bU3NdfFtNbV1bT29dW1Z2XVtFZV18W05uXVtBYV1bTW1dW0VlXVtEZF18W09vXVtGZl1bRmZdW1NzXVtFZV1bVHRdfFtPb11bUHBdW1R0XVtJaV1bT29dW05uXVtBYV1bTGxdfFtPb11bUnJdW0RkXVtFZV1bUnJdfFtQcF1bUnJdW0VlXVtGZl1bSWldW1h4XXxbUnJdW0VlXVtEZF1bVXVdW0NjXVtFZV1bRGRdfFtTc11bRWVdW0xsXVtFZV1bQ2NdW1R0XXxbU3NdW0VlXVtQcF1bQWFdW1JyXVtBYV1bVHRdW09vXVtScl18W1NzXVtFZV1bUnJdW1Z2XVtJaV1bQ2NdW0VlXXxbU3NdW0lpXVtMbF1bRWVdW05uXVtUdF18W1R0XVtPb118W1V1XVtObl1bRGRdW0VlXVtGZl18W1V1XVtObl1bSWldW09vXVtObl18W1V1XVtTc11bSWldW05uXVtHZ118W1Z2XVtBYV1bTGxdW1V1XVtFZV1bU3NdfFtXd11bSGVdW0VlXVtScl1bRWVdfFtXd11bSWldW1R0XVtIaF0vCiAgICAgICAgfV0sCiAgICAgICAgIiNsb2dpYy1vcGVyYXRvcnMiOiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IubG9naWNhbC5zcGFycWwiLAogICAgICAgICAgICByZWdleDogL1x8XHx8JiZ8PXwhPXw8fD58PD18Pj18KD86XnwhP1xzKUlOKD86IT9cc3wkKXwoPzpefCE/XHMpTk9UKD86IT9cc3wkKXwtfFwrfFwqfFwvfFwhLwogICAgICAgIH1dLAogICAgICAgICIjb3dsLXR5cGVzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LnR5cGUuZGF0YXR5cGUub3dsLnNwYXJxbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvb3dsOlthLXpBLVpdKy8KICAgICAgICB9XSwKICAgICAgICAiI3B1bmN0dWF0aW9uLW9wZXJhdG9ycyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvci5wdW5jdHVhdGlvbi5zcGFycWwiLAogICAgICAgICAgICByZWdleDogLzt8LHxcLnxcKHxcKXxce3xcfXxcfC8KICAgICAgICB9XSwKICAgICAgICAiI3FuYW1lcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAiZW50aXR5Lm5hbWUub3RoZXIucW5hbWUuc3BhcnFsIiwKICAgICAgICAgICAgcmVnZXg6IC8oPzpbYS16QS1aXVstX2EtekEtWjAtOV0qKT86KD86W19hLXpBLVpdWy1fYS16QS1aMC05XSopPy8KICAgICAgICB9XSwKICAgICAgICAiI3JkZi1zY2hlbWEtdHlwZXMiOiBbewogICAgICAgICAgICB0b2tlbjogInN1cHBvcnQudHlwZS5kYXRhdHlwZS5yZGYuc2NoZW1hLnNwYXJxbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvcmRmcz86W2EtekEtWl0rfCg/Ol58XHMpYSg/OlxzfCQpLwogICAgICAgIH1dLAogICAgICAgICIjcmVsYXRpdmUtdXJscyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnF1b3RlZC5vdGhlci5yZWxhdGl2ZS51cmwuc3BhcnFsIiwKICAgICAgICAgICAgcmVnZXg6IC88LywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnF1b3RlZC5vdGhlci5yZWxhdGl2ZS51cmwuc3BhcnFsIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvPi8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLm90aGVyLnJlbGF0aXZlLnVybC5zcGFycWwiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiNzdHJpbmctZGF0YXR5cGUtc3VmZml4ZXMiOiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IuZGF0YXR5cGUuc3VmZml4LnNwYXJxbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXF5cXi8KICAgICAgICB9XSwKICAgICAgICAiI3N0cmluZy1sYW5ndWFnZS1zdWZmaXhlcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvci5sYW5ndWFnZS5zdWZmaXguc3BhcnFsIiwKICAgICAgICAgICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5zdWZmaXguc3BhcnFsIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLyg/ISIpKEApKFthLXpdKyg/OlwtW2EtejAtOV0rKSopLwogICAgICAgIH1dLAogICAgICAgICIjc3RyaW5ncyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnF1b3RlZC50cmlwbGUuc3BhcnFsIiwKICAgICAgICAgICAgcmVnZXg6IC8iIiIvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucXVvdGVkLnRyaXBsZS5zcGFycWwiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8iIiIvLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1b3RlZC50cmlwbGUuc3BhcnFsIgogICAgICAgICAgICB9XQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucXVvdGVkLmRvdWJsZS5zcGFycWwiLAogICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucXVvdGVkLmRvdWJsZS5zcGFycWwiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8iLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiaW52YWxpZC5zdHJpbmcubmV3bGluZSIsCiAgICAgICAgICAgICAgICByZWdleDogLyQvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS5zcGFycWwiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cXC4vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLnNwYXJxbCIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKICAgICAgICAiI3ZhcmlhYmxlcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAidmFyaWFibGUub3RoZXIuc3BhcnFsIiwKICAgICAgICAgICAgcmVnZXg6IC8oPzpcP3xcJClbLV9hLXpBLVowLTldKy8KICAgICAgICB9XSwKICAgICAgICAiI3htbC1zY2hlbWEtdHlwZXMiOiBbewogICAgICAgICAgICB0b2tlbjogInN1cHBvcnQudHlwZS5kYXRhdHlwZS5zY2hlbWEuc3BhcnFsIiwKICAgICAgICAgICAgcmVnZXg6IC94c2Q/OlthLXpdW2EtekEtWl0rLwogICAgICAgIH1dCiAgICB9OwogICAgCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpTUEFSUUxIaWdobGlnaHRSdWxlcy5tZXRhRGF0YSA9IHsKICAgIGZpbGVUeXBlczogWyJycSIsICJzcGFycWwiXSwKICAgIG5hbWU6ICJTUEFSUUwiLAogICAgc2NvcGVOYW1lOiAic291cmNlLnNwYXJxbCIKfTsKCgpvb3AuaW5oZXJpdHMoU1BBUlFMSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNQQVJRTEhpZ2hsaWdodFJ1bGVzID0gU1BBUlFMSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvc3BhcnFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvc3BhcnFsX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgU1BBUlFMSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3NwYXJxbF9oaWdobGlnaHRfcnVsZXMiKS5TUEFSUUxIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTUEFSUUxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zcGFycWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS9zcGFycWwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-sql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9zcWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU3FsSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB2YXIga2V5d29yZHMgPSAoCiAgICAgICAgInNlbGVjdHxpbnNlcnR8dXBkYXRlfGRlbGV0ZXxmcm9tfHdoZXJlfGFuZHxvcnxncm91cHxieXxvcmRlcnxsaW1pdHxvZmZzZXR8aGF2aW5nfGFzfGNhc2V8IiArCiAgICAgICAgIndoZW58dGhlbnxlbHNlfGVuZHx0eXBlfGxlZnR8cmlnaHR8am9pbnxvbnxvdXRlcnxkZXNjfGFzY3x1bmlvbnxjcmVhdGV8dGFibGV8cHJpbWFyeXxrZXl8aWZ8IiArCiAgICAgICAgImZvcmVpZ258bm90fHJlZmVyZW5jZXN8ZGVmYXVsdHxudWxsfGlubmVyfGNyb3NzfG5hdHVyYWx8ZGF0YWJhc2V8ZHJvcHxncmFudCIKICAgICk7CgogICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoCiAgICAgICAgInRydWV8ZmFsc2UiCiAgICApOwoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJhdmd8Y291bnR8Zmlyc3R8bGFzdHxtYXh8bWlufHN1bXx1Y2FzZXxsY2FzZXxtaWR8bGVufHJvdW5kfHJhbmt8bm93fGZvcm1hdHwiICsgCiAgICAgICAgImNvYWxlc2NlfGlmbnVsbHxpc251bGx8bnZsIgogICAgKTsKCiAgICB2YXIgZGF0YVR5cGVzID0gKAogICAgICAgICJpbnR8bnVtZXJpY3xkZWNpbWFsfGRhdGV8dmFyY2hhcnxjaGFyfGJpZ2ludHxmbG9hdHxkb3VibGV8Yml0fGJpbmFyeXx0ZXh0fHNldHx0aW1lc3RhbXB8IiArCiAgICAgICAgIm1vbmV5fHJlYWx8bnVtYmVyfGludGVnZXIiCiAgICApOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IGJ1aWx0aW5GdW5jdGlvbnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzLAogICAgICAgICJzdG9yYWdlLnR5cGUiOiBkYXRhVHlwZXMKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgfSwgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHN0YXJ0IDogIi9cXCoiLAogICAgICAgICAgICBlbmQgOiAiXFwqLyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAiIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICciLio/IicKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyAnIHN0cmluZwogICAgICAgICAgICByZWdleCA6ICInLio/JyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsICAgICAgICAgICAvLyBgIHN0cmluZyAoYXBhY2hlIGRyaWxsKQogICAgICAgICAgICByZWdleCA6ICJgLio/YCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcK3xcXC18XFwvfFxcL1xcL3wlfDxAPnxAPnw8QHwmfFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKF0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFwpXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0gXQogICAgfTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhTcWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU3FsSGlnaGxpZ2h0UnVsZXMgPSBTcWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3NxbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3NxbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTcWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc3FsX2hpZ2hsaWdodF9ydWxlcyIpLlNxbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBTcWxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi0tIjsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zcWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc3FsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-sqlserver.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zcWxzZXJ2ZXJfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBTcWxTZXJ2ZXJIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGxvZ2ljYWxPcGVyYXRvcnMgPSAiQUxMfEFORHxBTll8QkVUV0VFTnxFWElTVFN8SU58TElLRXxOT1R8T1J8U09NRSI7CiAgICBsb2dpY2FsT3BlcmF0b3JzICs9ICJ8TlVMTHxJU3xBUFBMWXxJTk5FUnxPVVRFUnxMRUZUfFJJR0hUfEpPSU58Q1JPU1MiOyAvL1NTTVMgY29sb3JzIHRoZXNlIGdyYXkgdG9vCiAgICAKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9ICgKICAgICAgICAiT1BFTkRBVEFTT1VSQ0V8T1BFTlFVRVJZfE9QRU5ST1dTRVR8T1BFTlhNTHwiICsKICAgICAgICAiQVZHfENIRUNLU1VNX0FHR3xDT1VOVHxDT1VOVF9CSUd8R1JPVVBJTkd8R1JPVVBJTkdfSUR8TUFYfE1JTnxTVERFVnxTVERFVlB8U1VNfFZBUnxWQVJQfCIgKwogICAgICAgICJERU5TRV9SQU5LfE5USUxFfFJBTkt8Uk9XX05VTUJFUiIgKwogICAgICAgICJAQERBVEVGSVJTVHxAQERCVFN8QEBMQU5HSUR8QEBMQU5HVUFHRXxAQExPQ0tfVElNRU9VVHxAQE1BWF9DT05ORUNUSU9OU3xAQE1BWF9QUkVDSVNJT058QEBORVNUTEVWRUx8QEBPUFRJT05TfEBAUkVNU0VSVkVSfEBAU0VSVkVSTkFNRXxAQFNFUlZJQ0VOQU1FfEBAU1BJRHxAQFRFWFRTSVpFfEBAVkVSU0lPTnwiICsKICAgICAgICAiQ0FTVHxDT05WRVJUfFBBUlNFfFRSWV9DQVNUfFRSWV9DT05WRVJUfFRSWV9QQVJTRSIgKwogICAgICAgICJAQENVUlNPUl9ST1dTfEBARkVUQ0hfU1RBVFVTfENVUlNPUl9TVEFUVVN8IiArCiAgICAgICAgIkBAREFURUZJUlNUfEBATEFOR1VBR0V8Q1VSUkVOVF9USU1FU1RBTVB8REFURUFERHxEQVRFRElGRnxEQVRFRlJPTVBBUlRTfERBVEVOQU1FfERBVEVQQVJUfERBVEVUSU1FMkZST01QQVJUU3xEQVRFVElNRUZST01QQVJUU3xEQVRFVElNRU9GRlNFVEZST01QQVJUU3xEQVl8RU9NT05USHxHRVREQVRFfEdFVFVUQ0RBVEV8SVNEQVRFfE1PTlRIfFNFVCBEQVRFRklSU1R8U0VUIERBVEVGT1JNQVR8U0VUIExBTkdVQUdFfFNNQUxMREFURVRJTUVGUk9NUEFSVFN8U1BfSEVMUExBTkdVQUdFfFNXSVRDSE9GRlNFVHxTWVNEQVRFVElNRXxTWVNEQVRFVElNRU9GRlNFVHxTWVNVVENEQVRFVElNRXxUSU1FRlJPTVBBUlRTfFRPREFURVRJTUVPRkZTRVR8WUVBUnwiICsKICAgICAgICAiQ0hPT1NFfElJRnwiICsKICAgICAgICAiQUJTfEFDT1N8QVNJTnxBVEFOfEFUTjJ8Q0VJTElOR3xDT1N8Q09UfERFR1JFRVN8RVhQfEZMT09SfExPR3xMT0cxMHxQSXxQT1dFUnxSQURJQU5TfFJBTkR8Uk9VTkR8U0lHTnxTSU58U1FSVHxTUVVBUkV8VEFOfCIgKwogICAgICAgICJAQFBST0NJRHxBUFBMT0NLX01PREV8QVBQTE9DS19URVNUfEFQUF9OQU1FfEFTU0VNQkxZUFJPUEVSVFl8Q09MVU1OUFJPUEVSVFl8Q09MX0xFTkdUSHxDT0xfTkFNRXxEQVRBQkFTRVBST1BFUlRZRVh8REFUQUJBU0VfUFJJTkNJUEFMX0lEfERCX0lEfERCX05BTUV8RklMRUdST1VQUFJPUEVSVFl8RklMRUdST1VQX0lEfEZJTEVHUk9VUF9OQU1FfEZJTEVQUk9QRVJUWXxGSUxFX0lEfEZJTEVfSURFWHxGSUxFX05BTUV8RlVMTFRFWFRDQVRBTE9HUFJPUEVSVFl8RlVMTFRFWFRTRVJWSUNFUFJPUEVSVFl8SU5ERVhLRVlfUFJPUEVSVFl8SU5ERVhQUk9QRVJUWXxJTkRFWF9DT0x8T0JKRUNUUFJPUEVSVFl8T0JKRUNUUFJPUEVSVFlFWHxPQkpFQ1RfREVGSU5JVElPTnxPQkpFQ1RfSUR8T0JKRUNUX05BTUV8T0JKRUNUX1NDSEVNQV9OQU1FfE9SSUdJTkFMX0RCX05BTUV8UEFSU0VOQU1FfFNDSEVNQV9JRHxTQ0hFTUFfTkFNRXxTQ09QRV9JREVOVElUWXxTRVJWRVJQUk9QRVJUWXxTVEFUU19EQVRFfFRZUEVQUk9QRVJUWXxUWVBFX0lEfFRZUEVfTkFNRXwiICsKICAgICAgICAiQ0VSVEVOQ09ERUR8Q0VSVFBSSVZBVEVLRVl8Q1VSUkVOVF9VU0VSfERBVEFCQVNFX1BSSU5DSVBBTF9JRHxIQVNfUEVSTVNfQllfTkFNRXxJU19NRU1CRVJ8SVNfUk9MRU1FTUJFUnxJU19TUlZST0xFTUVNQkVSfE9SSUdJTkFMX0xPR0lOfFBFUk1JU1NJT05TfFBXRENPTVBBUkV8UFdERU5DUllQVHxTQ0hFTUFfSUR8U0NIRU1BX05BTUV8U0VTU0lPTl9VU0VSfFNVU0VSX0lEfFNVU0VSX05BTUV8U1VTRVJfU0lEfFNVU0VSX1NOQU1FfFNZUy5GTl9CVUlMVElOX1BFUk1JU1NJT05TfFNZUy5GTl9HRVRfQVVESVRfRklMRXxTWVMuRk5fTVlfUEVSTUlTU0lPTlN8U1lTVEVNX1VTRVJ8VVNFUl9JRHxVU0VSX05BTUV8IiArCiAgICAgICAgIkFTQ0lJfENIQVJ8Q0hBUklOREVYfENPTkNBVHxESUZGRVJFTkNFfEZPUk1BVHxMRU58TE9XRVJ8TFRSSU18TkNIQVJ8UEFUSU5ERVh8UVVPVEVOQU1FfFJFUExBQ0V8UkVQTElDQVRFfFJFVkVSU0V8UlRSSU18U09VTkRFWHxTUEFDRXxTVFJ8U1RVRkZ8U1VCU1RSSU5HfFVOSUNPREV8VVBQRVJ8IiArCiAgICAgICAgIiRQQVJUSVRJT058QEBFUlJPUnxAQElERU5USVRZfEBAUEFDS19SRUNFSVZFRHxAQFJPV0NPVU5UfEBAVFJBTkNPVU5UfEJJTkFSWV9DSEVDS1NVTXxDSEVDS1NVTXxDT05ORUNUSU9OUFJPUEVSVFl8Q09OVEVYVF9JTkZPfENVUlJFTlRfUkVRVUVTVF9JRHxFUlJPUl9MSU5FfEVSUk9SX01FU1NBR0V8RVJST1JfTlVNQkVSfEVSUk9SX1BST0NFRFVSRXxFUlJPUl9TRVZFUklUWXxFUlJPUl9TVEFURXxGT1JNQVRNRVNTQUdFfEdFVEFOU0lOVUxMfEdFVF9GSUxFU1RSRUFNX1RSQU5TQUNUSU9OX0NPTlRFWFR8SE9TVF9JRHxIT1NUX05BTUV8SVNOVUxMfElTTlVNRVJJQ3xNSU5fQUNUSVZFX1JPV1ZFUlNJT058TkVXSUR8TkVXU0VRVUVOVElBTElEfFJPV0NPVU5UX0JJR3xYQUNUX1NUQVRFfCIgKwogICAgICAgICJAQENPTk5FQ1RJT05TfEBAQ1BVX0JVU1l8QEBJRExFfEBASU9fQlVTWXxAQFBBQ0tFVF9FUlJPUlN8QEBQQUNLX1JFQ0VJVkVEfEBAUEFDS19TRU5UfEBAVElNRVRJQ0tTfEBAVE9UQUxfRVJST1JTfEBAVE9UQUxfUkVBRHxAQFRPVEFMX1dSSVRFfEZOX1ZJUlRVQUxGSUxFU1RBVFN8IiArCiAgICAgICAgIlBBVElOREVYfFRFWFRQVFJ8VEVYVFZBTElEfCIgKwogICAgICAgICJDT0FMRVNDRXxOVUxMSUYiCiAgICApOwogICAgdmFyIGRhdGFUeXBlcyA9ICgiQklHSU5UfEJJTkFSWXxCSVR8Q0hBUnxDVVJTT1J8REFURXxEQVRFVElNRXxEQVRFVElNRTJ8REFURVRJTUVPRkZTRVR8REVDSU1BTHxGTE9BVHxISUVSQVJDSFlJRHxJTUFHRXxJTlRFR0VSfElOVHxNT05FWXxOQ0hBUnxOVEVYVHxOVU1FUklDfE5WQVJDSEFSfFJFQUx8U01BTExEQVRFVElNRXxTTUFMTElOVHxTTUFMTE1PTkVZfFNRTF9WQVJJQU5UfFRBQkxFfFRFWFR8VElNRXxUSU1FU1RBTVB8VElOWUlOVHxVTklRVUVJREVOVElGSUVSfFZBUkJJTkFSWXxWQVJDSEFSfFhNTCIpOwogICAgdmFyIGJ1aWx0SW5TdG9yZWRQcm9jZWR1cmVzID0gInNwX2FkZGV4dGVuZGVkcHJvY3xzcF9hZGRleHRlbmRlZHByb3BlcnR5fHNwX2FkZG1lc3NhZ2V8c3BfYWRkdHlwZXxzcF9hZGR1bXBkZXZpY2V8c3BfYWRkX2RhdGFfZmlsZV9yZWNvdmVyX3N1c3BlY3RfZGJ8c3BfYWRkX2xvZ19maWxlX3JlY292ZXJfc3VzcGVjdF9kYnxzcF9hbHRlcm1lc3NhZ2V8c3BfYXR0YWNoX2RifHNwX2F0dGFjaF9zaW5nbGVfZmlsZV9kYnxzcF9hdXRvc3RhdHN8c3BfYmluZGVmYXVsdHxzcF9iaW5kcnVsZXxzcF9iaW5kc2Vzc2lvbnxzcF9jZXJ0aWZ5X3JlbW92YWJsZXxzcF9jbGVhbl9kYl9maWxlX2ZyZWVfc3BhY2V8c3BfY2xlYW5fZGJfZnJlZV9zcGFjZXxzcF9jb25maWd1cmV8c3BfY29udHJvbF9wbGFuX2d1aWRlfHNwX2NyZWF0ZXN0YXRzfHNwX2NyZWF0ZV9wbGFuX2d1aWRlfHNwX2NyZWF0ZV9wbGFuX2d1aWRlX2Zyb21faGFuZGxlfHNwX2NyZWF0ZV9yZW1vdmFibGV8c3BfY3ljbGVfZXJyb3Jsb2d8c3BfZGF0YXR5cGVfaW5mb3xzcF9kYmNtcHRsZXZlbHxzcF9kYm1tb25pdG9yYWRkbW9uaXRvcmluZ3xzcF9kYm1tb25pdG9yY2hhbmdlYWxlcnR8c3BfZGJtbW9uaXRvcmNoYW5nZW1vbml0b3Jpbmd8c3BfZGJtbW9uaXRvcmRyb3BhbGVydHxzcF9kYm1tb25pdG9yZHJvcG1vbml0b3Jpbmd8c3BfZGJtbW9uaXRvcmhlbHBhbGVydHxzcF9kYm1tb25pdG9yaGVscG1vbml0b3Jpbmd8c3BfZGJtbW9uaXRvcnJlc3VsdHN8c3BfZGJfaW5jcmVhc2VkX3BhcnRpdGlvbnN8c3BfZGVsZXRlX2JhY2t1cGhpc3Rvcnl8c3BfZGVwZW5kc3xzcF9kZXNjcmliZV9maXJzdF9yZXN1bHRfc2V0fHNwX2Rlc2NyaWJlX3VuZGVjbGFyZWRfcGFyYW1ldGVyc3xzcF9kZXRhY2hfZGJ8c3BfZHJvcGRldmljZXxzcF9kcm9wZXh0ZW5kZWRwcm9jfHNwX2Ryb3BleHRlbmRlZHByb3BlcnR5fHNwX2Ryb3BtZXNzYWdlfHNwX2Ryb3B0eXBlfHNwX2V4ZWN1dGV8c3BfZXhlY3V0ZXNxbHxzcF9nZXRhcHBsb2NrfHNwX2dldGJpbmR0b2tlbnxzcF9oZWxwfHNwX2hlbHBjb25zdHJhaW50fHNwX2hlbHBkYnxzcF9oZWxwZGV2aWNlfHNwX2hlbHBleHRlbmRlZHByb2N8c3BfaGVscGZpbGV8c3BfaGVscGZpbGVncm91cHxzcF9oZWxwaW5kZXh8c3BfaGVscGxhbmd1YWdlfHNwX2hlbHBzZXJ2ZXJ8c3BfaGVscHNvcnR8c3BfaGVscHN0YXRzfHNwX2hlbHB0ZXh0fHNwX2hlbHB0cmlnZ2VyfHNwX2luZGV4b3B0aW9ufHNwX2ludmFsaWRhdGVfdGV4dHB0cnxzcF9sb2NrfHNwX21vbml0b3J8c3BfcHJlcGFyZXxzcF9wcmVwZXhlY3xzcF9wcmVwZXhlY3JwY3xzcF9wcm9jb3B0aW9ufHNwX3JlY29tcGlsZXxzcF9yZWZyZXNodmlld3xzcF9yZWxlYXNlYXBwbG9ja3xzcF9yZW5hbWV8c3BfcmVuYW1lZGJ8c3BfcmVzZXRzdGF0dXN8c3Bfc2VxdWVuY2VfZ2V0X3JhbmdlfHNwX3NlcnZlcm9wdGlvbnxzcF9zZXRuZXRuYW1lfHNwX3NldHRyaWdnZXJvcmRlcnxzcF9zcGFjZXVzZWR8c3BfdGFibGVvcHRpb258c3BfdW5iaW5kZWZhdWx0fHNwX3VuYmluZHJ1bGV8c3BfdW5wcmVwYXJlfHNwX3VwZGF0ZWV4dGVuZGVkcHJvcGVydHl8c3BfdXBkYXRlc3RhdHN8c3BfdmFsaWRuYW1lfHNwX3dob3xzeXMuc3BfbWVyZ2VfeHRwX2NoZWNrcG9pbnRfZmlsZXN8c3lzLnNwX3h0cF9iaW5kX2RiX3Jlc291cmNlX3Bvb2x8c3lzLnNwX3h0cF9jaGVja3BvaW50X2ZvcmNlX2dhcmJhZ2VfY29sbGVjdGlvbnxzeXMuc3BfeHRwX2NvbnRyb2xfcHJvY19leGVjX3N0YXRzfHN5cy5zcF94dHBfY29udHJvbF9xdWVyeV9leGVjX3N0YXRzfHN5cy5zcF94dHBfdW5iaW5kX2RiX3Jlc291cmNlX3Bvb2wiOwogICAgdmFyIGtleXdvcmRzID0gIkFCU09MVVRFfEFDVElPTnxBREF8QUREfEFETUlOfEFGVEVSfEFHR1JFR0FURXxBTElBU3xBTEx8QUxMT0NBVEV8QUxURVJ8QU5EfEFOWXxBUkV8QVJSQVl8QVN8QVNDfEFTRU5TSVRJVkV8QVNTRVJUSU9OfEFTWU1NRVRSSUN8QVR8QVRPTUlDfEFVVEhPUklaQVRJT058QkFDS1VQfEJFRk9SRXxCRUdJTnxCRVRXRUVOfEJJVF9MRU5HVEh8QkxPQnxCT09MRUFOfEJPVEh8QlJFQURUSHxCUkVBS3xCUk9XU0V8QlVMS3xCWXxDQUxMfENBTExFRHxDQVJESU5BTElUWXxDQVNDQURFfENBU0NBREVEfENBU0V8Q0FUQUxPR3xDSEFSQUNURVJ8Q0hBUkFDVEVSX0xFTkdUSHxDSEFSX0xFTkdUSHxDSEVDS3xDSEVDS1BPSU5UfENMQVNTfENMT0J8Q0xPU0V8Q0xVU1RFUkVEfENPQUxFU0NFfENPTExBVEV8Q09MTEFUSU9OfENPTExFQ1R8Q09MVU1OfENPTU1JVHxDT01QTEVUSU9OfENPTVBVVEV8Q09ORElUSU9OfENPTk5FQ1R8Q09OTkVDVElPTnxDT05TVFJBSU5UfENPTlNUUkFJTlRTfENPTlNUUlVDVE9SfENPTlRBSU5TfENPTlRBSU5TVEFCTEV8Q09OVElOVUV8Q09SUnxDT1JSRVNQT05ESU5HfENPVkFSX1BPUHxDT1ZBUl9TQU1QfENSRUFURXxDUk9TU3xDVUJFfENVTUVfRElTVHxDVVJSRU5UfENVUlJFTlRfQ0FUQUxPR3xDVVJSRU5UX0RBVEV8Q1VSUkVOVF9ERUZBVUxUX1RSQU5TRk9STV9HUk9VUHxDVVJSRU5UX1BBVEh8Q1VSUkVOVF9ST0xFfENVUlJFTlRfU0NIRU1BfENVUlJFTlRfVElNRXxDVVJSRU5UX1RSQU5TRk9STV9HUk9VUF9GT1JfVFlQRXxDWUNMRXxEQVRBfERBVEFCQVNFfERCQ0N8REVBTExPQ0FURXxERUN8REVDTEFSRXxERUZBVUxUfERFRkVSUkFCTEV8REVGRVJSRUR8REVMRVRFfERFTll8REVQVEh8REVSRUZ8REVTQ3xERVNDUklCRXxERVNDUklQVE9SfERFU1RST1l8REVTVFJVQ1RPUnxERVRFUk1JTklTVElDfERJQUdOT1NUSUNTfERJQ1RJT05BUll8RElTQ09OTkVDVHxESVNLfERJU1RJTkNUfERJU1RSSUJVVEVEfERPTUFJTnxET1VCTEV8RFJPUHxEVU1QfERZTkFNSUN8RUFDSHxFTEVNRU5UfEVMU0V8RU5EfEVORC1FWEVDfEVRVUFMU3xFUlJMVkx8RVNDQVBFfEVWRVJZfEVYQ0VQVHxFWENFUFRJT058RVhFQ3xFWEVDVVRFfEVYSVNUU3xFWElUfEVYVEVSTkFMfEVYVFJBQ1R8RkVUQ0h8RklMRXxGSUxMRkFDVE9SfEZJTFRFUnxGSVJTVHxGT1J8Rk9SRUlHTnxGT1JUUkFOfEZPVU5EfEZSRUV8RlJFRVRFWFR8RlJFRVRFWFRUQUJMRXxGUk9NfEZVTEx8RlVMTFRFWFRUQUJMRXxGVU5DVElPTnxGVVNJT058R0VORVJBTHxHRVR8R0xPQkFMfEdPfEdPVE98R1JBTlR8R1JPVVB8SEFWSU5HfEhPTER8SE9MRExPQ0t8SE9TVHxIT1VSfElERU5USVRZfElERU5USVRZQ09MfElERU5USVRZX0lOU0VSVHxJRnxJR05PUkV8SU1NRURJQVRFfElOfElOQ0xVREV8SU5ERVh8SU5ESUNBVE9SfElOSVRJQUxJWkV8SU5JVElBTExZfElOTkVSfElOT1VUfElOUFVUfElOU0VOU0lUSVZFfElOU0VSVHxJTlRFR0VSfElOVEVSU0VDVHxJTlRFUlNFQ1RJT058SU5URVJWQUx8SU5UT3xJU3xJU09MQVRJT058SVRFUkFURXxKT0lOfEtFWXxLSUxMfExBTkdVQUdFfExBUkdFfExBU1R8TEFURVJBTHxMRUFESU5HfExFU1N8TEVWRUx8TElLRXxMSUtFX1JFR0VYfExJTUlUfExJTkVOT3xMTnxMT0FEfExPQ0FMfExPQ0FMVElNRXxMT0NBTFRJTUVTVEFNUHxMT0NBVE9SfE1BUHxNQVRDSHxNRU1CRVJ8TUVSR0V8TUVUSE9EfE1JTlVURXxNT0R8TU9ESUZJRVN8TU9ESUZZfE1PRFVMRXxNVUxUSVNFVHxOQU1FU3xOQVRJT05BTHxOQVRVUkFMfE5DTE9CfE5FV3xORVhUfE5PfE5PQ0hFQ0t8Tk9OQ0xVU1RFUkVEfE5PTkV8Tk9STUFMSVpFfE5PVHxOVUxMfE5VTExJRnxPQkpFQ1R8T0NDVVJSRU5DRVNfUkVHRVh8T0NURVRfTEVOR1RIfE9GfE9GRnxPRkZTRVRTfE9MRHxPTnxPTkxZfE9QRU58T1BFUkFUSU9OfE9QVElPTnxPUnxPUkRFUnxPUkRJTkFMSVRZfE9VVHxPVVRFUnxPVVRQVVR8T1ZFUnxPVkVSTEFQU3xPVkVSTEFZfFBBRHxQQVJBTUVURVJ8UEFSQU1FVEVSU3xQQVJUSUFMfFBBUlRJVElPTnxQQVNDQUx8UEFUSHxQRVJDRU5UfFBFUkNFTlRJTEVfQ09OVHxQRVJDRU5USUxFX0RJU0N8UEVSQ0VOVF9SQU5LfFBJVk9UfFBMQU58UE9TSVRJT058UE9TSVRJT05fUkVHRVh8UE9TVEZJWHxQUkVDSVNJT058UFJFRklYfFBSRU9SREVSfFBSRVBBUkV8UFJFU0VSVkV8UFJJTUFSWXxQUklOVHxQUklPUnxQUklWSUxFR0VTfFBST0N8UFJPQ0VEVVJFfFBVQkxJQ3xSQUlTRVJST1J8UkFOR0V8UkVBRHxSRUFEU3xSRUFEVEVYVHxSRUNPTkZJR1VSRXxSRUNVUlNJVkV8UkVGfFJFRkVSRU5DRVN8UkVGRVJFTkNJTkd8UkVHUl9BVkdYfFJFR1JfQVZHWXxSRUdSX0NPVU5UfFJFR1JfSU5URVJDRVBUfFJFR1JfUjJ8UkVHUl9TTE9QRXxSRUdSX1NYWHxSRUdSX1NYWXxSRUdSX1NZWXxSRUxBVElWRXxSRUxFQVNFfFJFUExJQ0FUSU9OfFJFU1RPUkV8UkVTVFJJQ1R8UkVTVUxUfFJFVFVSTnxSRVRVUk5TfFJFVkVSVHxSRVZPS0V8Uk9MRXxST0xMQkFDS3xST0xMVVB8Uk9VVElORXxST1d8Uk9XQ09VTlR8Uk9XR1VJRENPTHxST1dTfFJVTEV8U0FWRXxTQVZFUE9JTlR8U0NIRU1BfFNDT1BFfFNDUk9MTHxTRUFSQ0h8U0VDT05EfFNFQ1RJT058U0VDVVJJVFlBVURJVHxTRUxFQ1R8U0VNQU5USUNLRVlQSFJBU0VUQUJMRXxTRU1BTlRJQ1NJTUlMQVJJVFlERVRBSUxTVEFCTEV8U0VNQU5USUNTSU1JTEFSSVRZVEFCTEV8U0VOU0lUSVZFfFNFUVVFTkNFfFNFU1NJT058U0VUfFNFVFN8U0VUVVNFUnxTSFVURE9XTnxTSU1JTEFSfFNJWkV8U09NRXxTUEVDSUZJQ3xTUEVDSUZJQ1RZUEV8U1FMfFNRTENBfFNRTENPREV8U1FMRVJST1J8U1FMRVhDRVBUSU9OfFNRTFNUQVRFfFNRTFdBUk5JTkd8U1RBUlR8U1RBVEV8U1RBVEVNRU5UfFNUQVRJQ3xTVEFUSVNUSUNTfFNURERFVl9QT1B8U1REREVWX1NBTVB8U1RSVUNUVVJFfFNVQk1VTFRJU0VUfFNVQlNUUklOR19SRUdFWHxTWU1NRVRSSUN8U1lTVEVNfFRBQkxFU0FNUExFfFRFTVBPUkFSWXxURVJNSU5BVEV8VEVYVFNJWkV8VEhBTnxUSEVOfFRJTUVaT05FX0hPVVJ8VElNRVpPTkVfTUlOVVRFfFRPfFRPUHxUUkFJTElOR3xUUkFOfFRSQU5TQUNUSU9OfFRSQU5TTEFURXxUUkFOU0xBVEVfUkVHRVh8VFJBTlNMQVRJT058VFJFQVR8VFJJR0dFUnxUUklNfFRSVU5DQVRFfFRTRVFVQUx8VUVTQ0FQRXxVTkRFUnxVTklPTnxVTklRVUV8VU5LTk9XTnxVTk5FU1R8VU5QSVZPVHxVUERBVEV8VVBEQVRFVEVYVHxVU0FHRXxVU0V8VVNFUnxVU0lOR3xWQUxVRXxWQUxVRVN8VkFSSUFCTEV8VkFSWUlOR3xWQVJfUE9QfFZBUl9TQU1QfFZJRVd8V0FJVEZPUnxXSEVOfFdIRU5FVkVSfFdIRVJFfFdISUxFfFdJRFRIX0JVQ0tFVHxXSU5ET1d8V0lUSHxXSVRISU58V0lUSElOIEdST1VQfFdJVEhPVVR8V09SS3xXUklURXxXUklURVRFWFR8WE1MQUdHfFhNTEFUVFJJQlVURVN8WE1MQklOQVJZfFhNTENBU1R8WE1MQ09NTUVOVHxYTUxDT05DQVR8WE1MRE9DVU1FTlR8WE1MRUxFTUVOVHxYTUxFWElTVFN8WE1MRk9SRVNUfFhNTElURVJBVEV8WE1MTkFNRVNQQUNFU3xYTUxQQVJTRXxYTUxQSXxYTUxRVUVSWXxYTUxTRVJJQUxJWkV8WE1MVEFCTEV8WE1MVEVYVHxYTUxWQUxJREFURXxaT05FIjsKICAgIGtleXdvcmRzICs9ICJ8S0VFUElERU5USVRZfEtFRVBERUZBVUxUU3xJR05PUkVfQ09OU1RSQUlOVFN8SUdOT1JFX1RSSUdHRVJTfFhMT0NLfEZPUkNFU0NBTnxGT1JDRVNFRUt8SE9MRExPQ0t8Tk9MT0NLfE5PV0FJVHxQQUdMT0NLfFJFQURDT01NSVRURUR8UkVBRENPTU1JVFRFRExPQ0t8UkVBRFBBU1R8UkVBRFVOQ09NTUlUVEVEfFJFUEVBVEFCTEVSRUFEfFJPV0xPQ0t8U0VSSUFMSVpBQkxFfFNOQVBTSE9UfFNQQVRJQUxfV0lORE9XX01BWF9DRUxMU3xUQUJMT0NLfFRBQkxPQ0tYfFVQRExPQ0t8WExPQ0t8SUdOT1JFX05PTkNMVVNURVJFRF9DT0xVTU5TVE9SRV9JTkRFWHxFWFBBTkR8VklFV1N8RkFTVHxGT1JDRXxLRUVQfEtFRVBGSVhFRHxNQVhET1B8TUFYUkVDVVJTSU9OfE9QVElNSVpFfFBBUkFNRVRFUklaQVRJT058U0lNUExFfEZPUkNFRHxSRUNPTVBJTEV8Uk9CVVNUfFBMQU58U1BBVElBTF9XSU5ET1dfTUFYX0NFTExTfE5PRVhQQU5EfEhJTlQiOwogICAga2V5d29yZHMgKz0gInxMT09QfEhBU0h8TUVSR0V8UkVNT1RFIjsKICAgIGtleXdvcmRzICs9ICJ8VFJZfENBVENIfFRIUk9XIjsKICAgIGtleXdvcmRzICs9ICJ8VFlQRSI7CiAgICBrZXl3b3JkcyA9IGtleXdvcmRzLnNwbGl0KCd8Jyk7CiAgICBrZXl3b3JkcyA9IGtleXdvcmRzLmZpbHRlcihmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIHNlbGYpIHsKICAgICAgICByZXR1cm4gbG9naWNhbE9wZXJhdG9ycy5zcGxpdCgnfCcpLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiBidWlsdGluRnVuY3Rpb25zLnNwbGl0KCd8JykuaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmIGRhdGFUeXBlcy5zcGxpdCgnfCcpLmluZGV4T2YodmFsdWUpID09PSAtMTsKICAgIH0pOwogICAga2V5d29yZHMgPSBrZXl3b3Jkcy5zb3J0KCkuam9pbignfCcpOwogICAgCiAgICAKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBsb2dpY2FsT3BlcmF0b3JzLAogICAgICAgICJzdG9yYWdlLnR5cGUiOiBkYXRhVHlwZXMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBidWlsdGluRnVuY3Rpb25zLAogICAgICAgICJzdXBwb3J0LnN0b3JlZHByb2NlZHVyZSI6IGJ1aWx0SW5TdG9yZWRQcm9jZWR1cmVzLAogICAgICAgICJrZXl3b3JkIjoga2V5d29yZHMKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7CiAgICB2YXIgc2V0U3RhdGVtZW50cyA9ICJTRVQgQU5TSV9ERUZBVUxUU3xTRVQgQU5TSV9OVUxMU3xTRVQgQU5TSV9OVUxMX0RGTFRfT0ZGfFNFVCBBTlNJX05VTExfREZMVF9PTnxTRVQgQU5TSV9QQURESU5HfFNFVCBBTlNJX1dBUk5JTkdTfFNFVCBBUklUSEFCT1JUfFNFVCBBUklUSElHTk9SRXxTRVQgQ09OQ0FUX05VTExfWUlFTERTX05VTEx8U0VUIENVUlNPUl9DTE9TRV9PTl9DT01NSVR8U0VUIERBVEVGSVJTVHxTRVQgREFURUZPUk1BVHxTRVQgREVBRExPQ0tfUFJJT1JJVFl8U0VUIEZJUFNfRkxBR0dFUnxTRVQgRk1UT05MWXxTRVQgRk9SQ0VQTEFOfFNFVCBJREVOVElUWV9JTlNFUlR8U0VUIElNUExJQ0lUX1RSQU5TQUNUSU9OU3xTRVQgTEFOR1VBR0V8U0VUIExPQ0tfVElNRU9VVHxTRVQgTk9DT1VOVHxTRVQgTk9FWEVDfFNFVCBOVU1FUklDX1JPVU5EQUJPUlR8U0VUIE9GRlNFVFN8U0VUIFBBUlNFT05MWXxTRVQgUVVFUllfR09WRVJOT1JfQ09TVF9MSU1JVHxTRVQgUVVPVEVEX0lERU5USUZJRVJ8U0VUIFJFTU9URV9QUk9DX1RSQU5TQUNUSU9OU3xTRVQgUk9XQ09VTlR8U0VUIFNIT1dQTEFOX0FMTHxTRVQgU0hPV1BMQU5fVEVYVHxTRVQgU0hPV1BMQU5fWE1MfFNFVCBTVEFUSVNUSUNTIElPfFNFVCBTVEFUSVNUSUNTIFBST0ZJTEV8U0VUIFNUQVRJU1RJQ1MgVElNRXxTRVQgU1RBVElTVElDUyBYTUx8U0VUIFRFWFRTSVpFfFNFVCBYQUNUX0FCT1JUIi5zcGxpdCgnfCcpOwogICAgdmFyIGlzb2xhdGlvbkxldmVscyA9ICJSRUFEIFVOQ09NTUlUVEVEfFJFQUQgQ09NTUlUVEVEfFJFUEVBVEFCTEUgUkVBRHxTTkFQU0hPUHxTRVJJQUxJWkFCTEUiLnNwbGl0KCd8Jyk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlzb2xhdGlvbkxldmVscy5sZW5ndGg7IGkrKykgewogICAgICAgIHNldFN0YXRlbWVudHMucHVzaCgnU0VUIFRSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCAnICsgaXNvbGF0aW9uTGV2ZWxzW2ldKTsKICAgIH0KICAgIAogICAgCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiLAogICAgICAgICAgICByZWdleDogIiciLAogICAgICAgICAgICBuZXh0OiBbewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8nJy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZW5kIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJzdGFydCIsCiAgICAgICAgICAgICAgICByZWdleDogIiciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LAogICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLCB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiLS0uKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICBzdGFydDogIi9cXCoiLAogICAgICAgICAgICBlbmQ6ICJcXCovIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXg6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleDogIkB7MCwyfVthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYig/IV0pIiAvL3VwIHRvIDIgQHN5bWJvbHMgZm9yIHNvbWUgYnVpbHQgaW4gZnVuY3Rpb25zCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNsYXNzIiwKICAgICAgICAgICAgcmVnZXg6ICJAQD9bYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogIlxcK3xcXC18XFwvfFxcL1xcL3wlfDxAPnxAPnw8QHwmfFxcXnx+fDx8Pnw8PXw9Pnw9PXwhPXw8Pnw9fFxcKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFwoXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJbXFwpXSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24iLAogICAgICAgICAgICByZWdleDogIix8OyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAidGV4dCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxzKyIKICAgICAgICB9XSwKICAgICAgICBjb21tZW50OiBbCiAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICByZWdleDogIlxcKlxcLyIsCiAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XQogICAgfTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0U3RhdGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbjogInNldC5zdGF0ZW1lbnQiLAogICAgICAgICAgICByZWdleDogc2V0U3RhdGVtZW50c1tpXQogICAgICAgIH0pOwogICAgfQogICAgCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsIFtEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKV0pOwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwogICAgdmFyIGNvbXBsZXRpb25zID0gW107CiAgICB2YXIgYWRkQ29tcGxldGlvbnMgPSBmdW5jdGlvbihhcnIsIG1ldGEpIHsKICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbih2KSB7CiAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goewogICAgICAgICAgICAgICAgbmFtZTogdiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2LAogICAgICAgICAgICAgICAgc2NvcmU6IDAsCiAgICAgICAgICAgICAgICBtZXRhOiBtZXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfTsKICAgIGFkZENvbXBsZXRpb25zKGJ1aWx0SW5TdG9yZWRQcm9jZWR1cmVzLnNwbGl0KCd8JyksICdwcm9jZWR1cmUnKTsKICAgIGFkZENvbXBsZXRpb25zKGxvZ2ljYWxPcGVyYXRvcnMuc3BsaXQoJ3wnKSwgJ29wZXJhdG9yJyk7CiAgICBhZGRDb21wbGV0aW9ucyhidWlsdGluRnVuY3Rpb25zLnNwbGl0KCd8JyksICdmdW5jdGlvbicpOwogICAgYWRkQ29tcGxldGlvbnMoZGF0YVR5cGVzLnNwbGl0KCd8JyksICd0eXBlJyk7CiAgICBhZGRDb21wbGV0aW9ucyhzZXRTdGF0ZW1lbnRzLCAnc3RhdGVtZW50Jyk7CiAgICBhZGRDb21wbGV0aW9ucyhrZXl3b3Jkcy5zcGxpdCgnfCcpLCAna2V5d29yZCcpOwogICAgCiAgICB0aGlzLmNvbXBsZXRpb25zID0gY29tcGxldGlvbnM7Cn07Cgpvb3AuaW5oZXJpdHMoU3FsU2VydmVySGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlNxbEhpZ2hsaWdodFJ1bGVzID0gU3FsU2VydmVySGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9zcWxzZXJ2ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oXGJDQVNFXGJ8XGJCRUdJTlxiKXxeXHMqKFwvXCopL2k7CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfC0tKSM/cmVnaW9uXGIvOwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkgcmV0dXJuIHRoaXMuZ2V0QmVnaW5FbmRCbG9jayhzZXNzaW9uLCByb3csIGksIG1hdGNoWzFdKTsKICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CiAgICAKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikgcmV0dXJuOwogICAgICAgIHJldHVybjsKICAgIH07CiAgICB0aGlzLmdldEJlZ2luRW5kQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIGNvbHVtbiwgbWF0Y2hTZXF1ZW5jZSkgewogICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uICsgbWF0Y2hTZXF1ZW5jZS5sZW5ndGgKICAgICAgICB9OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBsaW5lOwogICAgCiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB2YXIgcmUgPSAvKFxiQ0FTRVxifFxiQkVHSU5cYil8KFxiRU5EXGIpL2k7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgrKzsKICAgICAgICAgICAgZWxzZSBkZXB0aC0tOwogICAgCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydC5yb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zcWxzZXJ2ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9zcWxzZXJ2ZXJfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9zcWxzZXJ2ZXIiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBTcWxTZXJ2ZXJIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vc3Fsc2VydmVyX2hpZ2hsaWdodF9ydWxlcyIpLlNxbEhpZ2hsaWdodFJ1bGVzOwp2YXIgU3FsU2VydmVyRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvc3Fsc2VydmVyIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFNxbFNlcnZlckhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgU3FsU2VydmVyRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLS0iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNlc3Npb24uJG1vZGUuJGhpZ2hsaWdodFJ1bGVzLmNvbXBsZXRpb25zOwogICAgfTsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvc3FsIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3NxbHNlcnZlciJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-stylus.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3N0eWx1c19oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvY3NzX2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpOwoKdmFyIFN0eWx1c0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LnR5cGUiOiBDc3NIaWdobGlnaHRSdWxlcy5zdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRGdW5jdGlvbiwKICAgICAgICAic3VwcG9ydC5jb25zdGFudCI6IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRDb25zdGFudCwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IENzc0hpZ2hsaWdodFJ1bGVzLnN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogQ3NzSGlnaGxpZ2h0UnVsZXMuc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICBzdGFydDogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogL1wvXC8uKiQvCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAvXC9cKi8sCiAgICAgICAgICAgIG5leHQgOiAiY29tbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsiZW50aXR5Lm5hbWUuZnVuY3Rpb24uc3R5bHVzIiwgInRleHQiXSwKICAgICAgICAgICAgcmVnZXg6ICJeKFstYS16QS1aX11bLVxcd10qKT8oXFwoKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLmNsYXNzLnN0eWx1cyJdLAogICAgICAgICAgICByZWdleDogIlxcLi0/W19hLXpBLVpdK1tfYS16QS1aMC05LV0qIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJlbnRpdHkubGFuZ3VhZ2Uuc3R5bHVzIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiXiAqJiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsidmFyaWFibGUubGFuZ3VhZ2Uuc3R5bHVzIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKGFyZ3VtZW50cykiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQuc3R5bHVzIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiQFstXFx3XSsiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWVsZW1lbnQuY3NzIl0sCiAgICAgICAgICAgIHJlZ2V4IDogQ3NzSGlnaGxpZ2h0UnVsZXMucHNldWRvRWxlbWVudHMKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbiIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUucHNldWRvLWNsYXNzLmNzcyJdLAogICAgICAgICAgICByZWdleCA6IENzc0hpZ2hsaWdodFJ1bGVzLnBzZXVkb0NsYXNzZXMKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbImVudGl0eS5uYW1lLnRhZy5zdHlsdXMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIpKGF8YWJicnxhY3JvbnltfGFkZHJlc3N8YXJlYXxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJ8YmFzZXxiaWd8YmxvY2txdW90ZXxib2R5fGJyfGJ1dHRvbnxjYW52YXN8Y2FwdGlvbnxjaXRlfGNvZGV8Y29sfGNvbGdyb3VwfGRhdGFsaXN0fGRkfGRlbHxkZXRhaWxzfGRmbnxkaWFsb2d8ZGl2fGRsfGR0fGVtfGV2ZW50c291cmNlfGZpZWxkc2V0fGZpZ3VyZXxmaWdjYXB0aW9ufGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fCg/OmhbMS02XSl8aGVhZHxoZWFkZXJ8aGdyb3VwfGhyfGh0bWx8aXxpZnJhbWV8aW1nfGlucHV0fGluc3xrYmR8bGFiZWx8bGVnZW5kfGxpfGxpbmt8bWFwfG1hcmt8bWVudXxtZXRhfG1ldGVyfG5hdnxub2ZyYW1lc3xub3NjcmlwdHxvYmplY3R8b2x8b3B0Z3JvdXB8b3B0aW9ufG91dHB1dHxwfHBhcmFtfHByZXxwcm9ncmVzc3xxfHNhbXB8c2NyaXB0fHNlY3Rpb258c2VsZWN0fHNtYWxsfHNwYW58c3RyaWtlfHN0cm9uZ3xzdHlsZXxzdWJ8c3VtbWFyeXxzdXB8dGFibGV8dGJvZHl8dGR8dGV4dGFyZWF8dGZvb3R8dGh8dGhlYWR8dGltZXx0aXRsZXx0cnx0dHx1bHx2YXJ8dmlkZW8pKD86XFxiKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsICAvLyBoZXg2IGNvbG9yCiAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXs2fSIKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXgzIGNvbG9yCiAgICAgICAgICAgIHJlZ2V4IDogIiNbYS1mMC05XXszfSIKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbInB1bmN0dWF0aW9uLmRlZmluaXRpb24uZW50aXR5LnN0eWx1cyIsICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuaWQuc3R5bHVzIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKCMpKFthLXpBLVpdW2EtekEtWjAtOV8tXSopIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogIm1ldGEudmVuZG9yLXByZWZpeC5zdHlsdXMiLAogICAgICAgICAgICByZWdleDogIi13ZWJraXQtfC1tb3pcXC18LW1zLXwtby0iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLnN0eWx1cyIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86IWltcG9ydGFudHxmb3J8aW58cmV0dXJufHRydWV8ZmFsc2V8bnVsbHxpZnxlbHNlfHVubGVzc3xyZXR1cm4pXFxiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3Iuc3R5bHVzIiwKICAgICAgICAgICAgcmVnZXg6ICIhfH58XFwrfC18KD86XFwqKT9cXCp8XFwvfCV8KD86XFwuKVxcLlxcLnw8fD58KD86PXw6fFxcP3xcXCt8LXxcXCp8XFwvfCV8PHw+KT89fCE9IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3Iuc3R5bHVzIiwKICAgICAgICAgICAgcmVnZXg6ICIoPzppbnxpcyg/Om50KT98bm90KVxcYiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgbmV4dCAgOiAicXN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJyIoPz0uKScsCiAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogQ3NzSGlnaGxpZ2h0UnVsZXMubnVtUmUKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICByZWdleCA6ICIoPzpjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm18dnd8JSlcXGIiCiAgICAgICAgfSwgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcLT9bYS16QS1aX11bYS16QS1aMC05X1xcLV0qIgogICAgICAgIH0KICAgIF0sCiAgICAiY29tbWVudCIgOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwgLy8gY2xvc2luZyBjb21tZW50CiAgICAgICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIKICAgICAgICB9CiAgICBdLAogICAgInFxc3RyaW5nIiA6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogJ1teIlxcXFxdKycKICAgICAgICB9LCAKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgfSwgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICcifCQnLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9CiAgICBdLAogICAgInFzdHJpbmciIDogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiW14nXFxcXF0rIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgogICAgICAgIH0sIAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgfQogICAgXQp9OwoKfTsKCm9vcC5pbmhlcml0cyhTdHlsdXNIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU3R5bHVzSGlnaGxpZ2h0UnVsZXMgPSBTdHlsdXNIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3N0eWx1cyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3N0eWx1c19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFN0eWx1c0hpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9zdHlsdXNfaGlnaGxpZ2h0X3J1bGVzIikuU3R5bHVzSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU3R5bHVzSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvc3R5bHVzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvc3R5bHVzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-svg.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihub3JtYWxpemUpIHsKICAgIHZhciB0YWdSZWdleCA9ICJbXzphLXpBLVpceGMwLVx1ZmZmZl1bLV86LmEtekEtWjAtOVx4YzAtXHVmZmZmXSoiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0IDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIjxcXCFcXFtDREFUQVxcWyIsIG5leHQgOiAiY2RhdGEifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLmluc3RydWN0aW9uLnhtbCIsICJrZXl3b3JkLmluc3RydWN0aW9uLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXD8pKCIgKyB0YWdSZWdleCArICIpIiwgbmV4dCA6ICJwcm9jZXNzaW5nX2luc3RydWN0aW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5zdGFydC54bWwiLCByZWdleCA6ICI8XFwhLS0iLCBuZXh0IDogImNvbW1lbnQifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInhtbC1wZS5kb2N0eXBlLnhtbCIsICJ4bWwtcGUuZG9jdHlwZS54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKShET0NUWVBFKSg/PVtcXHNdKSIsIG5leHQgOiAiZG9jdHlwZSIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJ0YWcifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQuZW5kLXRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPC8ifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQudGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8In0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInRleHQueG1sIn0KICAgICAgICBdLAoKICAgICAgICBwcm9jZXNzaW5nX2luc3RydWN0aW9uIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLmRlY2wtYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5kZWNsLWF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ3aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLnhtbC1kZWNsLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcPz4iLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH1dLAoKICAgICAgICBkb2N0eXBlIDogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJ3aGl0ZXNwYWNlIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLmRvY3R5cGUueG1sIiwgcmVnZXggOiAiPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS54bWwiLCByZWdleCA6ICJbLV9hLXpBLVowLTk6XSsifSwKICAgICAgICAgICAge3Rva2VuIDogInB1bmN0dWF0aW9uLmludC1zdWJzZXQiLCByZWdleCA6ICJcXFsiLCBwdXNoIDogImludF9zdWJzZXQifQogICAgICAgIF0sCgogICAgICAgIGludF9zdWJzZXQgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmludC1zdWJzZXQueG1sIiwKICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLCAia2V5d29yZC5tYXJrdXAtZGVjbC54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKCIgKyB0YWdSZWdleCArICIpIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifV0KICAgICAgICB9XSwKCiAgICAgICAgY2RhdGEgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiXFxdXFxdPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiXFxzKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICIoPzpbXlxcXV18XFxdKD8hXFxdPikpKyJ9CiAgICAgICAgXSwKCiAgICAgICAgY29tbWVudCA6IFsKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuZW5kLnhtbCIsIHJlZ2V4IDogIi0tPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cl9yZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgICAgICB9XSwKCiAgICAgICAgdGFnIDogW3sKICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPzooPCl8KDwvKSkoKD86IiArIHRhZ1JlZ2V4ICsgIjopPyIgKyB0YWdSZWdleCArICIpIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogInN0YXJ0In0KICAgICAgICAgICAgXQogICAgICAgIH1dLAoKICAgICAgICB0YWdfd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICB3aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC53aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgc3RyaW5nOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dLAoKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidGFnX3doaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyaWJ1dGVfdmFsdWU6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyX3JlZmVyZW5jZSJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyX3JlZmVyZW5jZSJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XQogICAgfTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gWG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmVtYmVkVGFnUnVsZXMgPSBmdW5jdGlvbihIaWdobGlnaHRSdWxlcywgcHJlZml4LCB0YWcpewogICAgICAgIHRoaXMuJHJ1bGVzLnRhZy51bnNoaWZ0KHsKICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwpKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogcHJlZml4ICsgInN0YXJ0In0KICAgICAgICAgICAgXQogICAgICAgIH0pOwoKICAgICAgICB0aGlzLiRydWxlc1t0YWcgKyAiLWVuZCJdID0gWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgIG5leHQ6ICJzdGFydCIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgIH19CiAgICAgICAgXTsKCiAgICAgICAgdGhpcy5lbWJlZFJ1bGVzKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIFt7CiAgICAgICAgICAgIHRva2VuOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8LykoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiB0YWcgKyAiLWVuZCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNkYXRhLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIjxcXCFcXFtDREFUQVxcWyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNkYXRhLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXVxcXT4iCiAgICAgICAgfV0pOwogICAgfTsKCn0pLmNhbGwoVGV4dEhpZ2hsaWdodFJ1bGVzLnByb3RvdHlwZSk7Cgpvb3AuaW5oZXJpdHMoWG1sSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlhtbEhpZ2hsaWdodFJ1bGVzID0gWG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvbGliL2xhbmciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuICYmIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKdmFyIFhtbEJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICciJyB8fCB0ZXh0ID09ICInIikgewogICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OwogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UoZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHNlbGVjdGVkICsgcXVvdGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gcXVvdGUgJiYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikgfHwgaXModG9rZW4sICJzdHJpbmciKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwoKICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHdoaWxlIChpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJ3aGl0ZXNwYWNlIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJpZ2h0U3BhY2UgPSAhcmlnaHRDaGFyIHx8IHJpZ2h0Q2hhci5tYXRjaCgvXHMvKTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPicpIHx8IChpcyh0b2tlbiwgImRlY2wtYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICc+JykgewogICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhKGlzKHRva2VuLCAidGFnLW5hbWUiKSB8fCBpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJyZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5FbmRDb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCB0b2tlbkVuZENvbHVtbikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IHRva2VuRW5kQ29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBpcyhuZXh0VG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoL15ccyo+Ly50ZXN0KHNlc3Npb24uZ2V0TGluZShwb3NpdGlvbi5yb3cpLnNsaWNlKHBvc2l0aW9uLmNvbHVtbikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB3aGlsZSAoIWlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciB0b2tlblJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICB2YXIgdG9rZW5Db2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICAgICAgaWYgKGlzKGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBpZiAodG9rZW5Sb3cgPT0gcG9zaXRpb24ucm93KQogICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuQ29sdW1uKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eShlbGVtZW50LnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgIHRleHQ6ICI+IiArICI8LyIgKyBlbGVtZW50ICsgIj4iLAogICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJhdXRvaW5kZW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAiXG4iKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1jbG9zZSIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09ICIvPiIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdmFyIHJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5pbmRleE9mKCJlbmQtdGFnIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cyAmJiAhdGhpcy52b2lkRWxlbWVudHNbdGFnXSkgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbisxKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSBuZXh0SW5kZW50ICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICI8LyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQgKyAiXG4iICsgbmV4dEluZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cgpvb3AuaW5oZXJpdHMoWG1sQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwoKZXhwb3J0cy5YbWxCZWhhdmlvdXIgPSBYbWxCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKHZvaWRFbGVtZW50cywgb3B0aW9uYWxFbmRUYWdzKSB7CiAgICBCYXNlRm9sZE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gdm9pZEVsZW1lbnRzIHx8IHt9OwogICAgdGhpcy5vcHRpb25hbEVuZFRhZ3MgPSBvb3AubWl4aW4oe30sIHRoaXMudm9pZEVsZW1lbnRzKTsKICAgIGlmIChvcHRpb25hbEVuZFRhZ3MpCiAgICAgICAgb29wLm1peGluKHRoaXMub3B0aW9uYWxFbmRUYWdzLCBvcHRpb25hbEVuZFRhZ3MpOwogICAgCn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCnZhciBUYWcgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMudGFnTmFtZSA9ICIiOwogICAgdGhpcy5jbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnNlbGZDbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnN0YXJ0ID0ge3JvdzogMCwgY29sdW1uOiAwfTsKICAgIHRoaXMuZW5kID0ge3JvdzogMCwgY29sdW1uOiAwfTsKfTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdyk7CgogICAgICAgIGlmICh0YWcuY2xvc2luZyB8fCAoIXRhZy50YWdOYW1lICYmIHRhZy5zZWxmQ2xvc2luZykpCiAgICAgICAgICAgIHJldHVybiBmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIgPyAiZW5kIiA6ICIiOwoKICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRhZy5zZWxmQ2xvc2luZyB8fCB0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eSh0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICBpZiAodGhpcy5fZmluZEVuZFRhZ0luTGluZShzZXNzaW9uLCByb3csIHRhZy50YWdOYW1lLCB0YWcuZW5kLmNvbHVtbikpCiAgICAgICAgICAgIHJldHVybiAiIjsKCiAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICB9OwogICAgCiAgICB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgaWYgKC9jb21tZW50Ly50ZXN0KHNlc3Npb24uZ2V0U3RhdGUocm93KSkgJiYgLzwhLS8udGVzdChzZXNzaW9uLmdldExpbmUocm93KSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSB0YWcuc3RhcnQuY29sdW1uICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbKytpXTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChpKys7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gJy8+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLl9maW5kRW5kVGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCB0YWdOYW1lLCBzdGFydENvbHVtbikgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciBjb2x1bW4gPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0Q29sdW1uKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpICsgMV07CiAgICAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUgPT0gdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5fcmVhZFRhZ0ZvcndhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpKTsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3BvcCA9IGZ1bmN0aW9uKHN0YWNrLCB0YWcpIHsKICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdG9wID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdOwogICAgICAgICAgICBpZiAoIXRhZyB8fCB0b3AudGFnTmFtZSA9PSB0YWcudGFnTmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnBvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9uYWxFbmRUYWdzLmhhc093blByb3BlcnR5KHRvcC50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKCFmaXJzdFRhZykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50Rm9sZFdpZGdldChzZXNzaW9uLCByb3cpCiAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZpcnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CiAgICAgICAgdmFyIHN0YWNrID0gW107CiAgICAgICAgdmFyIHRhZzsKICAgICAgICAKICAgICAgICBpZiAoIWlzQmFja3dhcmQpIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgc3RhcnQgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogZmlyc3RUYWcuc3RhcnQuY29sdW1uICsgZmlyc3RUYWcudGFnTmFtZS5sZW5ndGggKyAyCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChmaXJzdFRhZy5zdGFydC5yb3cgPT0gZmlyc3RUYWcuZW5kLnJvdykKICAgICAgICAgICAgICAgIHN0YXJ0LmNvbHVtbiA9IGZpcnN0VGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnRm9yd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGFnLmNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgdGFnLnN0YXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5lbmQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4KICAgICAgICAgICAgfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnQmFja3dhcmQoaXRlcmF0b3IpKSB7CiAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIHRhZy5lbmQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnN0YXJ0LnJvdyA9PSB0YWcuZW5kLnJvdyAmJiB0YWcuc3RhcnQuY29sdW1uIDwgdGFnLmVuZC5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gdGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgZW5kKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRhZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZTsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwogICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgWG1sQmVoYXZpb3VyKCk7CiAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IFhtbEZvbGRNb2RlKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gbGFuZy5hcnJheVRvTWFwKFtdKTsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUveG1sX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImVycm9yIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUveG1sIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWyB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jLnRhZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIkBbXFx3XFxkX10rIiAvLyBUT0RPOiBmaXggZW1haWwgYWRkcmVzc2VzCiAgICAgICAgfSwgCiAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50LmRvYyIsCiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnLnN0b3JhZ2UudHlwZSIsCiAgICAgICAgcmVnZXggOiAiXFxiKD86VE9ET3xGSVhNRXxYWFh8SEFDSylcXGIiCiAgICB9Owp9OwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuIDogImNvbW1lbnQuZG9jIiwgLy8gZG9jIGNvbW1lbnQKICAgICAgICByZWdleCA6ICJcXC9cXCooPz1cXCopIiwKICAgICAgICBuZXh0ICA6IHN0YXJ0CiAgICB9Owp9OwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUgPSBmdW5jdGlvbiAoc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgoKZXhwb3J0cy5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiKS5Eb2NDb21tZW50SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgaWRlbnRpZmllclJlID0gIlthLXpBLVpcXCRfXHUwMGExLVx1ZmZmZl1bYS16QS1aXFxkXFwkX1x1MDBhMS1cdWZmZmZdKiI7Cgp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6CiAgICAgICAgICAgICJBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258SXRlcmF0b3J8TnVtYmVyfE9iamVjdHxSZWdFeHB8U3RyaW5nfFByb3h5fCIgICsgLy8gQ29uc3RydWN0b3JzCiAgICAgICAgICAgICJOYW1lc3BhY2V8UU5hbWV8WE1MfFhNTExpc3R8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8gRTRYCiAgICAgICAgICAgICJBcnJheUJ1ZmZlcnxGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8IiAgICsKICAgICAgICAgICAgIlVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXl8IiAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAiRXJyb3J8RXZhbEVycm9yfEludGVybmFsRXJyb3J8UmFuZ2VFcnJvcnxSZWZlcmVuY2VFcnJvcnxTdG9wSXRlcmF0aW9ufCIgICArIC8vIEVycm9ycwogICAgICAgICAgICAiU3ludGF4RXJyb3J8VHlwZUVycm9yfFVSSUVycm9yfCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJkZWNvZGVVUkl8ZGVjb2RlVVJJQ29tcG9uZW50fGVuY29kZVVSSXxlbmNvZGVVUklDb21wb25lbnR8ZXZhbHxpc0Zpbml0ZXwiICsgLy8gTm9uLWNvbnN0cnVjdG9yIGZ1bmN0aW9ucwogICAgICAgICAgICAiaXNOYU58cGFyc2VGbG9hdHxwYXJzZUludHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJKU09OfE1hdGh8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgLy8gT3RoZXIKICAgICAgICAgICAgInRoaXN8YXJndW1lbnRzfHByb3RvdHlwZXx3aW5kb3d8ZG9jdW1lbnQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAvLyBQc2V1ZG8KICAgICAgICAia2V5d29yZCI6CiAgICAgICAgICAgICJjb25zdHx5aWVsZHxpbXBvcnR8Z2V0fHNldHxhc3luY3xhd2FpdHwiICsKICAgICAgICAgICAgImJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnwiICsKICAgICAgICAgICAgImlmfGlufG9mfGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnxsZXR8dmFyfHdoaWxlfHdpdGh8ZGVidWdnZXJ8IiArCiAgICAgICAgICAgICJfX3BhcmVudF9ffF9fY291bnRfX3xlc2NhcGV8dW5lc2NhcGV8d2l0aHxfX3Byb3RvX198IiArCiAgICAgICAgICAgICJjbGFzc3xlbnVtfGV4dGVuZHN8c3VwZXJ8ZXhwb3J0fGltcGxlbWVudHN8cHJpdmF0ZXxwdWJsaWN8aW50ZXJmYWNlfHBhY2thZ2V8cHJvdGVjdGVkfHN0YXRpYyIsCiAgICAgICAgInN0b3JhZ2UudHlwZSI6CiAgICAgICAgICAgICJjb25zdHxsZXR8dmFyfGZ1bmN0aW9uIiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOgogICAgICAgICAgICAibnVsbHxJbmZpbml0eXxOYU58dW5kZWZpbmVkIiwKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6CiAgICAgICAgICAgICJhbGVydCIsCiAgICAgICAgImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iOiAidHJ1ZXxmYWxzZSIKICAgIH0sICJpZGVudGlmaWVyIik7CiAgICB2YXIga3dCZWZvcmVSZSA9ICJjYXNlfGRvfGVsc2V8ZmluYWxseXxpbnxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mfHlpZWxkfHZvaWQiOwoKICAgIHZhciBlc2NhcGVkUmUgPSAiXFxcXCg/OnhbMC05YS1mQS1GXXsyfXwiICsgLy8gaGV4CiAgICAgICAgInVbMC05YS1mQS1GXXs0fXwiICsgLy8gdW5pY29kZQogICAgICAgICJ1e1swLTlhLWZBLUZdezEsNn19fCIgKyAvLyBlczYgdW5pY29kZQogICAgICAgICJbMC0yXVswLTddezAsMn18IiArIC8vIG9jdAogICAgICAgICIzWzAtN11bMC03XT98IiArIC8vIG9jdAogICAgICAgICJbNC03XVswLTddP3wiICsgLy9vY3QKICAgICAgICAiLikiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJub19yZWdleCIgOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygibm9fcmVnZXgiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIicoPz0uKSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnIig/PS4pJywKICAgICAgICAgICAgICAgIG5leHQgIDogInFxc3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4YWRlY2ltYWwsIG9jdGFsIGFuZCBiaW5hcnkKICAgICAgICAgICAgICAgIHJlZ2V4IDogLzAoPzpbeFhdWzAtOWEtZkEtRl0rfFtvT11bMC03XSt8W2JCXVswMV0rKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZGVjaW1hbCBpbnRlZ2VycyBhbmQgZmxvYXRzCiAgICAgICAgICAgICAgICByZWdleCA6IC8oPzpcZFxkKig/OlwuXGQqKT98XC5cZCspKD86W2VFXVsrLV0/XGQrXGIpPy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsImtleXdvcmQub3BlcmF0b3IiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKHByb3RvdHlwZSkoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLCAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFwuKSgiICsgaWRlbnRpZmllclJlICsiKShcXHMqKSg9KShcXHMqKShmdW5jdGlvbikoXFxzKykoXFx3KykoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKGZ1bmN0aW9uKShcXHMrKSgiICsgaWRlbnRpZmllclJlICsgIikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAic3RvcmFnZS50eXBlIiwgInRleHQiLCAicGFyZW4ubHBhcmVuIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIigiICsgaWRlbnRpZmllclJlICsgIikoXFxzKikoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInRleHQiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDopKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiZnJvbSg/PVxccyooJ3xcIikpIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig/OiIgKyBrd0JlZm9yZVJlICsgIilcXGIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN1cHBvcnQuY29uc3RhbnQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL3RoYXRcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJzdXBwb3J0LmZ1bmN0aW9uLmZpcmVidWciXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhjb25zb2xlKShcLikod2FybnxpbmZvfGxvZ3xlcnJvcnx0aW1lfHRyYWNlfHRpbWVFbmR8YXNzZXJ0KVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXJSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLywKICAgICAgICAgICAgICAgIG5leHQgIDogInByb3BlcnR5IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvPT4vLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvLS18XCtcK3xcLnszfXw9PT18PT18PXwhPXwhPT18PCs9P3w+Kz0/fCF8JiZ8XHxcfHxcPzp8WyEkJSYqK1wtflwvXl09Py8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWz86LDsuXS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcWyh7XS8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1tcXSl9XS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXiMhLiokLwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICBwcm9wZXJ0eTogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKSg/OihcXHMrKShcXHcrKSk/KFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvWy5dKD8hWy5dKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OmgoPzppZnR8b3coPzpNb2QoPzplbGVzc0RpYWxvZ3xhbERpYWxvZyl8SGVscCkpfGNyb2xsKD86WHxCeSg/OlBhZ2VzfExpbmVzKT98WXxUbyk/fHQoPzpvcHxyaWtlKXxpKD86bnx6ZVRvQ29udGVudHxkZWJhcnxnblRleHQpfG9ydHx1KD86cHxiKD86c3RyKD86aW5nKT8pPyl8cGxpKD86Y2V8dCl8ZSg/Om5kfHQoPzpSZSg/OnNpemFibGV8cXVlc3RIZWFkZXIpfE0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIbyg/OnRLZXlzfHVycyl8WWVhcnxDdXJzb3J8VGltZSg/Om91dCk/fEludGVydmFsfFpPcHRpb25zfERhdGV8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhdGV8RnVsbFllYXIpfEZ1bGxZZWFyfEFjdGl2ZSl8YXJjaCl8cXJ0fGxpY2V8YXZlUHJlZmVyZW5jZXN8bWFsbCl8aCg/Om9tZXxhbmRsZUV2ZW50KXxuYXZpZ2F0ZXxjKD86aGFyKD86Q29kZUF0fEF0KXxvKD86c3xuKD86Y2F0fHRleHR1YWx8ZmlybSl8bXBpbGUpfGVpbHxsZWFyKD86VGltZW91dHxJbnRlcnZhbCk/fGEoPzpwdHVyZUV2ZW50c3xsbCl8cmVhdGUoPzpTdHlsZVNoZWV0fFBvcHVwfEV2ZW50T2JqZWN0KSl8dCg/Om8oPzpHTVRTdHJpbmd8Uyg/OnRyaW5nfG91cmNlKXxVKD86VENTdHJpbmd8cHBlckNhc2UpfExvKD86Y2FsZVN0cmluZ3x3ZXJDYXNlKSl8ZXN0fGEoPzpufGludCg/OkVuYWJsZWQpPykpfGkoPzpzKD86TmFOfEZpbml0ZSl8bmRleE9mfHRhbGljcyl8ZCg/OmlzYWJsZUV4dGVybmFsQ2FwdHVyZXx1bXB8ZXRhY2hFdmVudCl8dSg/Om4oPzpzaGlmdHx0YWludHxlc2NhcGV8d2F0Y2gpfHBkYXRlQ29tbWFuZHMpfGooPzpvaW58YXZhRW5hYmxlZCl8cCg/Om8oPzpwfHcpfHVzaHxsdWdpbnMucmVmcmVzaHxhKD86ZGRpbmdzfHJzZSg/OkludHxGbG9hdCk/KXxyKD86aW50fG9tcHR8ZWZlcmVuY2UpKXxlKD86c2NhcGV8bmFibGVFeHRlcm5hbENhcHR1cmV8dmFsfGxlbWVudEZyb21Qb2ludHx4KD86cHxlYyg/OlNjcmlwdHxDb21tYW5kKT8pKXx2YWx1ZU9mfFVUQ3xxdWVyeUNvbW1hbmQoPzpTdGF0ZXxJbmRldGVybXxFbmFibGVkfFZhbHVlKXxmKD86aSg/Om5kfGxlKD86TW9kaWZpZWREYXRlfFNpemV8Q3JlYXRlZERhdGV8VXBkYXRlZERhdGUpfHhlZCl8byg/Om50KD86c2l6ZXxjb2xvcil8cndhcmQpfGxvb3J8cm9tQ2hhckNvZGUpfHdhdGNofGwoPzppbmt8byg/OmFkfGcpfGFzdEluZGV4T2YpfGEoPzpzaW58bmNob3J8Y29zfHQoPzp0YWNoRXZlbnR8b2J8YW4oPzoyKT8pfHBwbHl8bGVydHxiKD86c3xvcnQpKXxyKD86b3UoPzpuZHx0ZUV2ZW50cyl8ZSg/OnNpemUoPzpCeXxUbyl8Y2FsY3x0dXJuVmFsdWV8cGxhY2V8dmVyc2V8bCg/Om9hZHxlYXNlKD86Q2FwdHVyZXxFdmVudHMpKSl8YW5kb20pfGcoPzpvfGV0KD86UmVzcG9uc2VIZWFkZXJ8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZSg/OmNvbmRzfGxlY3Rpb24pfEhvdXJzfFllYXJ8VGltZSg/OnpvbmVPZmZzZXQpP3xEYSg/Onl8dGUpfFVUQyg/Ok0oPzppKD86bnV0ZXN8bGxpc2Vjb25kcyl8b250aCl8U2Vjb25kc3xIb3Vyc3xEYSg/Onl8dGUpfEZ1bGxZZWFyKXxGdWxsWWVhcnxBKD86dHRlbnRpb258bGxSZXNwb25zZUhlYWRlcnMpKSl8bSg/OmlufG92ZSg/OkIoPzp5fGVsb3cpfFRvKD86QWJzb2x1dGUpP3xBYm92ZSl8ZXJnZUF0dHJpYnV0ZXN8YSg/OnRjaHxyZ2luc3x4KSl8Yig/OnRvYXxpZ3xvKD86bGR8cmRlcldpZHRocyl8bGlua3xhY2spKVxiKD89XCgpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uLmRvbSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8ocyg/OnViKD86c3RyaW5nRGF0YXxtaXQpfHBsaXRUZXh0fGUoPzp0KD86TmFtZWRJdGVtfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8bGVjdCkpfGhhcyg/OkNoaWxkTm9kZXN8RmVhdHVyZSl8bmFtZWRJdGVtfGMoPzpsKD86aWNrfG8oPzpzZXxuZU5vZGUpKXxyZWF0ZSg/OkMoPzpvbW1lbnR8REFUQVNlY3Rpb258YXB0aW9uKXxUKD86SGVhZHxleHROb2RlfEZvb3QpfERvY3VtZW50RnJhZ21lbnR8UHJvY2Vzc2luZ0luc3RydWN0aW9ufEUoPzpudGl0eVJlZmVyZW5jZXxsZW1lbnQpfEF0dHJpYnV0ZSkpfHRhYkluZGV4fGkoPzpuc2VydCg/OlJvd3xCZWZvcmV8Q2VsbHxEYXRhKXx0ZW0pfG9wZW58ZGVsZXRlKD86Um93fEMoPzplbGx8YXB0aW9uKXxUKD86SGVhZHxGb290KXxEYXRhKXxmb2N1c3x3cml0ZSg/OmxuKT98YSg/OmRkfHBwZW5kKD86Q2hpbGR8RGF0YSkpfHJlKD86c2V0fHBsYWNlKD86Q2hpbGR8RGF0YSl8bW92ZSg/Ok5hbWVkSXRlbXxDaGlsZHxBdHRyaWJ1dGUoPzpOb2RlKT8pPyl8Z2V0KD86TmFtZWRJdGVtfEVsZW1lbnQoPzpzQnkoPzpOYW1lfFRhZ05hbWV8Q2xhc3NOYW1lKXxCeUlkKXxBdHRyaWJ1dGUoPzpOb2RlKT8pfGJsdXIpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogICJzdXBwb3J0LmNvbnN0YW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86eXN0ZW1MYW5ndWFnZXxjcig/OmlwdHN8b2xsYmFyc3xlZW4oPzpYfFl8VG9wfExlZnQpKXx0KD86eWxlKD86U2hlZXRzKT98YXR1cyg/OlRleHR8YmFyKT8pfGlibGluZyg/OkJlbG93fEFib3ZlKXxvdXJjZXx1ZmZpeGVzfGUoPzpjdXJpdHkoPzpQb2xpY3kpP3xsKD86ZWN0aW9ufGYpKSl8aCg/OmlzdG9yeXxvc3QoPzpuYW1lKT98YXMoPzpofEZvY3VzKSl8eXxYKD86TUxEb2N1bWVudHxTTERvY3VtZW50KXxuKD86ZXh0fGFtZSg/OnNwYWNlKD86c3xVUkkpfFByb3ApKXxNKD86SU5fVkFMVUV8QVhfVkFMVUUpfGMoPzpoYXJhY3RlclNldHxvKD86big/OnN0cnVjdG9yfHRyb2xsZXJzKXxva2llRW5hYmxlZHxsb3JEZXB0aHxtcCg/Om9uZW50c3xsZXRlKSl8dXJyZW50fHB1Q2xhc3N8bCg/OmkoPzpwKD86Ym9hcmREYXRhKT98ZW50SW5mb3JtYXRpb24pfG9zZWR8YXNzZXMpfGFsbGUoPzplfHIpfHJ5cHRvKXx0KD86byg/Om9sYmFyfHApfGV4dCg/OlRyYW5zZm9ybXxJbmRlbnR8RGVjb3JhdGlvbnxBbGlnbil8YWdzKXxTUVJUKD86MV8yfDIpfGkoPzpuKD86bmVyKD86SGVpZ2h0fFdpZHRoKXxwdXQpfGRzfGdub3JlQ2FzZSl8ekluZGV4fG8oPzpzY3B1fG4oPzpyZWFkeXN0YXRlY2hhbmdlfExpbmUpfHV0ZXIoPzpIZWlnaHR8V2lkdGgpfHAoPzpzUHJvZmlsZXxlbmVyKXxmZnNjcmVlbkJ1ZmZlcmluZyl8TkVHQVRJVkVfSU5GSU5JVFl8ZCg/OmkoPzpzcGxheXxhbG9nKD86SGVpZ2h0fFRvcHxXaWR0aHxMZWZ0fEFyZ3VtZW50cyl8cmVjdG9yaWVzKXxlKD86c2NyaXB0aW9ufGZhdWx0KD86U3RhdHVzfENoKD86ZWNrZWR8YXJzZXQpfFZpZXcpKSl8dSg/OnNlcig/OlByb2ZpbGV8TGFuZ3VhZ2V8QWdlbnQpfG4oPzppcXVlSUR8ZGVmaW5lZCl8cGRhdGVJbnRlcnZhbCl8X2NvbnRlbnR8cCg/Oml4ZWxEZXB0aHxvcnR8ZXJzb25hbGJhcnxrY3MxMXxsKD86dWdpbnN8YXRmb3JtKXxhKD86dGhuYW1lfGRkaW5nKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KXxyZW50KD86V2luZG93fExheWVyKT98Z2UoPzpYKD86T2Zmc2V0KT98WSg/Ok9mZnNldCk/KSl8cig/Om8oPzp0byg/OmNvbHx0eXBlKXxkdWN0KD86U3ViKT98bXB0ZXIpfGUoPzp2aW91c3xmaXgpKSl8ZSg/Om4oPzpjb2Rpbmd8YWJsZWRQbHVnaW4pfHgoPzp0ZXJuYWx8cGFuZG8pfG1iZWRzKXx2KD86aXNpYmlsaXR5fGVuZG9yKD86U3ViKT98TGlua2NvbG9yKXxVUkxVbmVuY29kZWR8UCg/Okl8T1NJVElWRV9JTkZJTklUWSl8Zig/OmlsZW5hbWV8byg/Om50KD86U2l6ZXxGYW1pbHl8V2VpZ2h0KXxybU5hbWUpfHJhbWUoPzpzfEVsZW1lbnQpfGdDb2xvcil8RXx3aGl0ZVNwYWNlfGwoPzppKD86c3RTdHlsZVR5cGV8big/OmVIZWlnaHR8a0NvbG9yKSl8byg/OmNhKD86dGlvbig/OmJhcik/fGxOYW1lKXx3c3JjKXxlKD86bmd0aHxmdCg/OkNvbnRleHQpPyl8YSg/OnN0KD86TSg/Om9kaWZpZWR8YXRjaCl8SW5kZXh8UGFyZW4pfHllcig/OnN8WCl8bmd1YWdlKSl8YSg/OnBwKD86TWlub3JWZXJzaW9ufE5hbWV8Q28oPzpkZU5hbWV8cmUpfFZlcnNpb24pfHZhaWwoPzpIZWlnaHR8VG9wfFdpZHRofExlZnQpfGxsfHIoPzppdHl8Z3VtZW50cyl8TGlua2NvbG9yfGJvdmUpfHIoPzppZ2h0KD86Q29udGV4dCk/fGUoPzpzcG9uc2UoPzpYTUx8VGV4dCl8YWR5U3RhdGUpKXxnbG9iYWx8eHxtKD86aW1lVHlwZXN8dWx0aWxpbmV8ZW51YmFyfGFyZ2luKD86UmlnaHR8Qm90dG9tfFRvcHxMZWZ0KSl8TCg/Ok4oPzoxMHwyKXxPRyg/OjEwRXwyRSkpfGIoPzpvKD86dHRvbXxyZGVyKD86V2lkdGh8UmlnaHRXaWR0aHxCb3R0b21XaWR0aHxTdHlsZXxDb2xvcnxUb3BXaWR0aHxMZWZ0V2lkdGgpKXx1ZmZlckRlcHRofGVsb3d8YWNrZ3JvdW5kKD86Q29sb3J8SW1hZ2UpKSlcYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICByZWdleCA6IGlkZW50aWZpZXJSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICByZWdleDogIiIsCiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInN0YXJ0IjogWwogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgY29tbWVudHMoInN0YXJ0IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcLyIsCiAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzK3xeJCIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4IjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInJlZ2V4cC5rZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgICAgICByZWdleDogIi9bc3huZ2lteV0qIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW52YWxpZCIsCiAgICAgICAgICAgICAgICByZWdleDogL1x7XGQrXGIsP1xkKlx9WysqXXxbKyokXj9dWysqXXxbJF5dWz9dfFw/ezMsfS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXChcP1s6PSFdfFwpfFx7XGQrXGIsP1xkKlx9fFsrKl1cP3xbKCkkXisqPy5dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5kZWxpbWl0ZXIiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cfC8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cW1xePy8sCiAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXhfY2hhcmFjdGVyX2NsYXNzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmNoYXJjbGFzcy5rZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxcXCg/OnVbXFxkYS1mQS1GXXs0fXx4W1xcZGEtZkEtRl17Mn18LikiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXSIsCiAgICAgICAgICAgICAgICBuZXh0OiAicmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiLSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucmVnZXhwLmNoYXJhY2h0ZXJjbGFzcyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImZ1bmN0aW9uX2FyZ3VtZW50cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZS5wYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgcmVnZXg6IGlkZW50aWZpZXJSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiWywgXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInFxc3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXFxcJCIsCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZCAgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICcifCQnLAogICAgICAgICAgICAgICAgbmV4dCAgOiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIid8JCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCgogICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLm5vRVM2KSB7CiAgICAgICAgdGhpcy4kcnVsZXMubm9fcmVnZXgudW5zaGlmdCh7CiAgICAgICAgICAgIHJlZ2V4OiAiW3t9XSIsIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSB2YWwgPT0gInsiID8gdGhpcy5uZXh0U3RhdGUgOiAiIjsKICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gInsiICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsID09ICJ9IiAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV4dC5pbmRleE9mKCJzdHJpbmciKSAhPSAtMSB8fCB0aGlzLm5leHQuaW5kZXhPZigianN4IikgIT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAicGFyZW4ucXVhc2kuZW5kIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB2YWwgPT0gInsiID8gInBhcmVuLmxwYXJlbiIgOiAicGFyZW4ucnBhcmVuIjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbmV4dFN0YXRlOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuc3RhcnQiLAogICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgcHVzaCAgOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogZXNjYXBlZFJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1wkey8sCiAgICAgICAgICAgICAgICBwdXNoICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnF1YXNpLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9gLywKICAgICAgICAgICAgICAgIG5leHQgIDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1YXNpIgogICAgICAgICAgICB9XQogICAgICAgIH0pOwoKICAgICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5qc3ggIT0gZmFsc2UpCiAgICAgICAgICAgIEpTWC5jYWxsKHRoaXMpOwogICAgfQoKICAgIHRoaXMuZW1iZWRSdWxlcyhEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMsICJkb2MtIiwKICAgICAgICBbIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRFbmRSdWxlKCJub19yZWdleCIpIF0pOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpmdW5jdGlvbiBKU1goKSB7CiAgICB2YXIgdGFnUmVnZXggPSBpZGVudGlmaWVyUmUucmVwbGFjZSgiXFxkIiwgIlxcZFxcLSIpOwogICAgdmFyIGpzeFRhZyA9IHsKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgdmFyIG9mZnNldCA9IHZhbC5jaGFyQXQoMSkgPT0gIi8iID8gMiA6IDE7CiAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gMSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQodGhpcy5uZXh0LCB0aGlzLm5leHRTdGF0ZSwgMCk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQpOwogICAgICAgICAgICAgICAgc3RhY2tbMl0rKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IHRoaXMubmV4dFN0YXRlKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2tbMV0tLTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICAgIHR5cGU6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKG9mZnNldCA9PSAxID8gIiIgOiAiZW5kLSIpICsgInRhZy1vcGVuLnhtbCIsCiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsLnNsaWNlKDAsIG9mZnNldCkKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnRhZy1uYW1lLnhtbCIsCiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsLnN1YnN0cihvZmZzZXQpCiAgICAgICAgICAgIH1dOwogICAgICAgIH0sCiAgICAgICAgcmVnZXggOiAiPC8/IiArIHRhZ1JlZ2V4ICsgIiIsCiAgICAgICAgbmV4dDogImpzeEF0dHJpYnV0ZXMiLAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH07CiAgICB0aGlzLiRydWxlcy5zdGFydC51bnNoaWZ0KGpzeFRhZyk7CiAgICB2YXIganN4SnNSdWxlID0gewogICAgICAgIHJlZ2V4OiAieyIsCiAgICAgICAgdG9rZW46ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgcHVzaDogInN0YXJ0IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLmpzeCA9IFsKICAgICAgICBqc3hKc1J1bGUsCiAgICAgICAganN4VGFnLAogICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgIHtkZWZhdWx0VG9rZW46ICJzdHJpbmcifQogICAgXTsKICAgIHRoaXMuJHJ1bGVzLmpzeEF0dHJpYnV0ZXMgPSBbewogICAgICAgIHRva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLAogICAgICAgIHJlZ2V4IDogIi8/PiIsCiAgICAgICAgb25NYXRjaCA6IGZ1bmN0aW9uKHZhbHVlLCBjdXJyZW50U3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT0gc3RhY2tbMF0pCiAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgICAgIGlmIChzdGFja1swXSA9PSB0aGlzLm5leHRTdGF0ZSkKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgaWYgKCFzdGFja1sxXSB8fCBzdGFja1sxXSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCwgMik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2tbMF0gfHwgInN0YXJ0IjsKICAgICAgICAgICAgcmV0dXJuIFt7dHlwZTogdGhpcy50b2tlbiwgdmFsdWU6IHZhbHVlfV07CiAgICAgICAgfSwKICAgICAgICBuZXh0U3RhdGU6ICJqc3giCiAgICB9LAogICAganN4SnNSdWxlLAogICAgY29tbWVudHMoImpzeEF0dHJpYnV0ZXMiKSwKICAgIHsKICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgcmVnZXggOiAiPSIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJ0ZXh0LnRhZy13aGl0ZXNwYWNlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgc3RhdGVOYW1lIDogImpzeF9hdHRyX3EiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgc3RhdGVOYW1lIDogImpzeF9hdHRyX3FxIiwKICAgICAgICBwdXNoIDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICBdCiAgICB9LAogICAganN4VGFnCiAgICBdOwogICAgdGhpcy4kcnVsZXMucmVmZXJlbmNlID0gW3sKICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiKD86JiNbMC05XSs7KXwoPzomI3hbMC05YS1mQS1GXSs7KXwoPzomW2EtekEtWjAtOV86XFwuLV0rOykiCiAgICB9XTsKfQoKZnVuY3Rpb24gY29tbWVudHMobmV4dCkgewogICAgcmV0dXJuIFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAvXC9cKi8sCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIlxcKlxcLyIsIG5leHQgOiBuZXh0IHx8ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLyIsCiAgICAgICAgICAgIG5leHQ6IFsKICAgICAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRUYWdSdWxlKCksCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudCIsIHJlZ2V4IDogIiR8XiIsIG5leHQgOiBuZXh0IHx8ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0KICAgICAgICAgICAgXQogICAgICAgIH0KICAgIF07Cn0KZXhwb3J0cy5KYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5saW5lQ29tbWVudFN0YXJ0ID0gIi8vIjsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAiLyoiLCBlbmQ6ICIqLyJ9OwogICAgdGhpcy4kcXVvdGVzID0geyciJzogJyInLCAiJyI6ICInIiwgImAiOiAiYCJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIgfHwgc3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLiooPzpcYmNhc2VcYi4qOnxbXHtcKFxbXSlccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gImRvYy1zdGFydCIpIHsKICAgICAgICAgICAgaWYgKGVuZFN0YXRlID09ICJzdGFydCIgfHwgZW5kU3RhdGUgPT0gIm5vX3JlZ2V4IikgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL15ccyooXC8/KVwqLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaWYgKG1hdGNoWzFdKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICIgIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGluZGVudCArPSAiKiAiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2phdmFzY3JpcHRfd29ya2VyIiwgIkphdmFTY3JpcHRXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImFubm90YXRlIiwgZnVuY3Rpb24ocmVzdWx0cykgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKHJlc3VsdHMuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9qYXZhc2NyaXB0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvc3ZnX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU3ZnSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5lbWJlZFRhZ1J1bGVzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgImpzLSIsICJzY3JpcHQiKTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoU3ZnSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuU3ZnSGlnaGxpZ2h0UnVsZXMgPSBTdmdIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvbWl4ZWQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihkZWZhdWx0TW9kZSwgc3ViTW9kZXMpIHsKICAgIHRoaXMuZGVmYXVsdE1vZGUgPSBkZWZhdWx0TW9kZTsKICAgIHRoaXMuc3ViTW9kZXMgPSBzdWJNb2RlczsKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKCiAgICB0aGlzLiRnZXRNb2RlID0gZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICBpZiAodHlwZW9mIHN0YXRlICE9ICJzdHJpbmciKSAKICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVswXTsKICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5zdWJNb2RlcykgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZXhPZihrZXkpID09PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3ViTW9kZXNba2V5XTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLiR0cnlNb2RlID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHN0YXRlKTsKICAgICAgICByZXR1cm4gKG1vZGUgPyBtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIDogIiIpOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHJldHVybiAoCiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSksIHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB8fAogICAgICAgICAgICB0aGlzLiR0cnlNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93KSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuZGVmYXVsdE1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykKICAgICAgICApOwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93LTEpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLiRnZXRNb2RlKHNlc3Npb24uZ2V0U3RhdGUocm93KSk7CiAgICAgICAgCiAgICAgICAgaWYgKCFtb2RlIHx8ICFtb2RlLmdldEZvbGRXaWRnZXQoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpKQogICAgICAgICAgICBtb2RlID0gdGhpcy5kZWZhdWx0TW9kZTsKICAgICAgICAKICAgICAgICByZXR1cm4gbW9kZS5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zdmciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3htbCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS9zdmdfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsImFjZS9tb2RlL2ZvbGRpbmcveG1sIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBYbWxNb2RlID0gcmVxdWlyZSgiLi94bWwiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgU3ZnSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3N2Z19oaWdobGlnaHRfcnVsZXMiKS5TdmdIaWdobGlnaHRSdWxlczsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvbWl4ZWQiKS5Gb2xkTW9kZTsKdmFyIFhtbEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL3htbCIpLkZvbGRNb2RlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgWG1sTW9kZS5jYWxsKHRoaXMpOwogICAgCiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gU3ZnSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuY3JlYXRlTW9kZURlbGVnYXRlcyh7CiAgICAgICAgImpzLSI6IEphdmFTY3JpcHRNb2RlCiAgICB9KTsKICAgIAogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgTWl4ZWRGb2xkTW9kZShuZXcgWG1sRm9sZE1vZGUoKSwgewogICAgICAgICJqcy0iOiBuZXcgQ1N0eWxlRm9sZE1vZGUoKQogICAgfSk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgWG1sTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICByZXR1cm4gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgfTsKICAgIAoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3N2ZyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3N2ZyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-swift.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9zd2lmdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgU3dpZnRIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjogIiIsCiAgICAgICAgImtleXdvcmQiOiAiX19DT0xVTU5fX3xfX0ZJTEVfX3xfX0ZVTkNUSU9OX198X19MSU5FX18iCiAgICAgICAgICAgICsgInxhc3xhc3NvY2lhdGl2aXR5fGJyZWFrfGNhc2V8Y2xhc3N8Y29udGludWV8ZGVmYXVsdHxkZWluaXR8ZGlkU2V0IgogICAgICAgICAgICArICJ8ZG98ZHluYW1pY1R5cGV8ZWxzZXxlbnVtfGV4dGVuc2lvbnxmYWxsdGhyb3VnaHxmb3J8ZnVuY3xnZXR8aWZ8aW1wb3J0IgogICAgICAgICAgICArICJ8aW58aW5maXh8aW5pdHxpbm91dHxpc3xsZWZ0fGxldHxsZXR8bXV0YXRpbmd8bmV3fG5vbmV8bm9ubXV0YXRpbmciCiAgICAgICAgICAgICsgInxvcGVyYXRvcnxvdmVycmlkZXxwb3N0Zml4fHByZWNlZGVuY2V8cHJlZml4fHByb3RvY29sfHJldHVybnxyaWdodCIKICAgICAgICAgICAgKyAifHNhZmV8U2VsZnxzZWxmfHNldHxzdHJ1Y3R8c3Vic2NyaXB0fHN3aXRjaHxUeXBlfHR5cGVhbGlhcyIKICAgICAgICAgICAgKyAifHVub3duZWR8dW5zYWZlfHZhcnx3ZWFrfHdoZXJlfHdoaWxlfHdpbGxTZXQiCiAgICAgICAgICAgICsgInxjb252ZW5pZW5jZXxkeW5hbWljfGZpbmFsfGluZml4fGxhenl8bXV0YXRpbmd8bm9ubXV0YXRpbmd8b3B0aW9uYWx8b3ZlcnJpZGV8cG9zdGZpeCIKICAgICAgICAgICAgKyAifHByZWZpeHxyZXF1aXJlZHxzdGF0aWN8Z3VhcmR8ZGVmZXIiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOiAiYm9vbHxkb3VibGV8RG91YmxlIgogICAgICAgICAgICArICJ8ZXh0ZW5zaW9ufGZsb2F0fEZsb2F0fGludHxJbnR8b3BlbnxpbnRlcm5hbHxmaWxlcHJpdmF0ZXxwcml2YXRlfHB1YmxpY3xzdHJpbmd8U3RyaW5nIiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOgogICAgICAgICAgICAiZmFsc2V8SW5maW5pdHl8TmFOfG5pbHxub3xudWxsfG51bGx8b2ZmfG9ufHN1cGVyfHRoaXN8dHJ1ZXx1bmRlZmluZWR8eWVzIiwKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbiI6CiAgICAgICAgICAgICIiCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgCiAgICBmdW5jdGlvbiBzdHJpbmcoc3RhcnQsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgbmVzdGFibGUgPSBvcHRpb25zLm5lc3RhYmxlIHx8IG9wdGlvbnMuaW50ZXJwb2xhdGlvbjsKICAgICAgICB2YXIgaW50ZXJwU3RhcnQgPSBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLm5leHRTdGF0ZSB8fCAic3RhcnQiOwogICAgICAgIHZhciBtYWluUnVsZSA9IHsKICAgICAgICAgICAgcmVnZXg6IHN0YXJ0ICsgKG9wdGlvbnMubXVsdGlsaW5lID8gIiIgOiAiKD89LikiKSwKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuc3RhcnQiCiAgICAgICAgfTsKICAgICAgICB2YXIgbmV4dFN0YXRlID0gWwogICAgICAgICAgICBvcHRpb25zLmVzY2FwZSAmJiB7CiAgICAgICAgICAgICAgICByZWdleDogb3B0aW9ucy5lc2NhcGUsCiAgICAgICAgICAgICAgICB0b2tlbjogImNoYXJhY3Rlci5lc2NhcGUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IGxhbmcuZXNjYXBlUmVnRXhwKG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5sZWFkICsgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLm9wZW4pLAogICAgICAgICAgICAgICAgcHVzaCAgOiBpbnRlcnBTdGFydAogICAgICAgICAgICB9LAogICAgICAgICAgICBvcHRpb25zLmVycm9yICYmIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiBvcHRpb25zLmVycm9yLAogICAgICAgICAgICAgICAgdG9rZW46ICJlcnJvci5pbnZhbGlkIgogICAgICAgICAgICB9LCAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVnZXg6IHN0YXJ0ICsgKG9wdGlvbnMubXVsdGlsaW5lID8gIiIgOiAifCQiKSwKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICBuZXh0OiBuZXN0YWJsZSA/ICJwb3AiIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLmZpbHRlcihCb29sZWFuKTsKICAgICAgICAKICAgICAgICBpZiAobmVzdGFibGUpCiAgICAgICAgICAgIG1haW5SdWxlLnB1c2ggPSBuZXh0U3RhdGU7CiAgICAgICAgZWxzZQogICAgICAgICAgICBtYWluUnVsZS5uZXh0ID0gbmV4dFN0YXRlOwogICAgICAgIAogICAgICAgIGlmICghb3B0aW9ucy5pbnRlcnBvbGF0aW9uKQogICAgICAgICAgICByZXR1cm4gbWFpblJ1bGU7CiAgICAgICAgCiAgICAgICAgdmFyIG9wZW4gPSBvcHRpb25zLmludGVycG9sYXRpb24ub3BlbjsKICAgICAgICB2YXIgY2xvc2UgPSBvcHRpb25zLmludGVycG9sYXRpb24uY2xvc2U7CiAgICAgICAgdmFyIGNvdW50ZXIgPSB7CiAgICAgICAgICAgIHJlZ2V4OiAiWyIgKyBsYW5nLmVzY2FwZVJlZ0V4cChvcGVuICsgY2xvc2UpICsgIl0iLAogICAgICAgICAgICBvbk1hdGNoOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gdmFsID09IG9wZW4gPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBvcGVuICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnVuc2hpZnQoInN0YXJ0Iiwgc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiAicGFyZW4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSBjbG9zZSAmJiBzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zaGlmdCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV4dC5pbmRleE9mKCJzdHJpbmciKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSBvcGVuID8gInBhcmVuLmxwYXJlbiIgOiAicGFyZW4ucnBhcmVuIjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbmV4dFN0YXRlOiBpbnRlcnBTdGFydAogICAgICAgIH07IAogICAgICAgIHJldHVybiBbY291bnRlciwgbWFpblJ1bGVdOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBjb21tZW50cygpIHsKICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvKD89LikiLAogICAgICAgICAgICAgICAgbmV4dCA6IFsKICAgICAgICAgICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dDogInN0YXJ0In0sCiAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlKCJkb2Mtc3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgICAgIHN0YXRlTmFtZTogIm5lc3RlZF9jb21tZW50IiwKICAgICAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5zdGFydCIsIHJlZ2V4IDogL1wvXCovLCBwdXNoOiAibmVzdGVkX2NvbW1lbnQifSwKICAgICAgICAgICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQiLCByZWdleCA6ICJcXCpcXC8iLCBuZXh0IDogInBvcCJ9LAogICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAiY29tbWVudCIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZX0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfQogICAgICAgIF07CiAgICB9CiAgICAKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogWwogICAgICAgICAgICBzdHJpbmcoJyInLCB7CiAgICAgICAgICAgICAgICBlc2NhcGU6IC9cXCg/OlswXFx0bnIiJ118dXtbYS1mQS1GMS05XXswLDh9fSkvLAogICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbjoge2xlYWQ6ICJcXCIsIG9wZW46ICIoIiwgY2xvc2U6ICIpIn0sCiAgICAgICAgICAgICAgICBlcnJvcjogL1xcLi8sCiAgICAgICAgICAgICAgICBtdWx0aWxpbmU6IGZhbHNlCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjb21tZW50cygpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmVnZXg6IC9AW2EtekEtWl8kXVthLXpBLVpfJFxkXHUwMDgwLVx1ZmZmZV0qLywKICAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVnZXg6IC9bYS16QS1aXyRdW2EtekEtWl8kXGRcdTAwODAtXHVmZmZlXSovLAogICAgICAgICAgICAgICAgdG9rZW46IGtleXdvcmRNYXBwZXIKICAgICAgICAgICAgfSwgIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgCiAgICAgICAgICAgICAgICByZWdleCA6IC9bKy1dPyg/OjAoPzpiWzAxXSt8b1swLTddK3x4W1xkYS1mQS1GXSl8XGQrKD86KD86XC5cZCopPyg/OltQcEVlXVsrLV0/XGQrKT8pXGIpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLy0tfFwrXCt8PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9IAogICAgICAgICAgICAKICAgICAgICBdCiAgICB9OwogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoInN0YXJ0IikgXSk7CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCgpvb3AuaW5oZXJpdHMoU3dpZnRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSGlnaGxpZ2h0UnVsZXMgPSBTd2lmdEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3N3aWZ0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvc3dpZnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3N3aWZ0X2hpZ2hsaWdodF9ydWxlcyIpLkhpZ2hsaWdodFJ1bGVzOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIiwgbmVzdGFibGU6IHRydWV9OwogICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS9zd2lmdCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3N3aWZ0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-tcl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvdGNsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFRjbEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiMuKlxcXFwkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogImNvbW1lbnRmb2xsb3ciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIy4qJCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICdbXFxcXF0kJywKICAgICAgICAgICAgICAgIG5leHQgIDogInNwbGl0bGluZVN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcKD86WyJ7fVxbXF0kXFxdKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsIC8vIGxhc3QgdmFsdWUgYmVmb3JlIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ158W157XVs7XVtefV18Wy9cci9dJywKICAgICAgICAgICAgICAgIG5leHQgIDogImNvbW1hbmRJdGVtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAnWyBdKlsiXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgIiIiIHN0cmluZyBzdGFydAogICAgICAgICAgICAgICAgcmVnZXggOiAnWyBdKlsiXScsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUuaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyRdIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInZhcmlhYmxlIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18e1xcKn18O3w6OiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaWRlbnRpZmllciIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbW3tdIiwKICAgICAgICAgICAgICAgIG5leHQgIDogImNvbW1hbmRJdGVtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiWyhdIgogICAgICAgICAgICB9LCAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbW1hbmRJdGVtIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLipcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJjb21tZW50Zm9sbG93IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiMuKiQiLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICdbIF0qWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidmFyaWFibGUuaW5zdGFuY2UiLCAKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlskXSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJ2YXJpYWJsZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzpbOl1bOl0pW2EtekEtWjAtOV8vXSsoPzpbOl1bOl0pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogImNvbW1hbmRJdGVtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVowLTlfL10rKD86WzpdWzpdKSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJjb21tYW5kSXRlbSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzpbOl1bOl0pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogImNvbW1hbmRJdGVtIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiF8XFwkfCV8JnxcXCp8XFwtXFwtfFxcLXxcXCtcXCt8XFwrfH58PT09fD09fD18IT18IT09fDw9fD49fDw8PXw+Pj18Pj4+PXw8Pnw8fD58IXwmJnxcXHxcXHx8XFw/XFw6fFxcKj18JT18XFwrPXxcXC09fCY9fFxcXj18e1xcKn18O3w6OiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aMC05Xy9dKyIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSBdLAogICAgICAgICJjb21tZW50Zm9sbG93IiA6IFsgCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiLipcXFxcJCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJjb21tZW50Zm9sbG93IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJy4rJywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgIH0gXSwKICAgICAgICAic3BsaXRsaW5lU3RhcnQiIDogWyAKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJeLiIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfV0sCiAgICAgICAgInZhcmlhYmxlIiA6IFsgCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInZhcmlhYmxlLmluc3RhbmNlIiwgLy8gdmFyaWFibGUgdGNsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbYS16QS1aX1xcZF0rKD86WyhdW2EtekEtWl9cXGRdK1spXSk/IiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5pbnN0YW5jZSIsIC8vIHZhcmlhYmxlIHRjbCB3aXRoIGJyYWNlcwogICAgICAgICAgICAgICAgcmVnZXggOiAiez9bYS16QS1aX1xcZF0rfT8iLAogICAgICAgICAgICAgICAgbmV4dCAgOiAic3RhcnQiCiAgICAgICAgICAgIH1dLCAgCiAgICAgICAgInFxc3RyaW5nIiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBtdWx0aSBsaW5lICIiIiBzdHJpbmcgZW5kCiAgICAgICAgICAgIHJlZ2V4IDogJyg/OlteXFxcXF18XFxcXC4pKj9bIl0nLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgfSBdCiAgICB9Owp9OwoKb29wLmluaGVyaXRzKFRjbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5UY2xIaWdobGlnaHRSdWxlcyA9IFRjbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90Y2wiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL3RjbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBUY2xIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGNsX2hpZ2hsaWdodF9ydWxlcyIpLlRjbEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gVGNsSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiIyI7CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IikgewogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eLipbXHtcKFxbXVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvdGNsIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvdGNsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-terraform.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90ZXJyYWZvcm1faGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbiAocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGVycmFmb3JtSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbiAoKSB7CgoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46IFsnc3RvcmFnZS5mdW5jdGlvbi50ZXJyYWZvcm0nXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXFxiKG91dHB1dHxyZXNvdXJjZXxkYXRhfHZhcmlhYmxlfG1vZHVsZXxleHBvcnQpXFxiJwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnRlcnJhZm9ybSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcJFxccyIsCiAgICAgICAgICAgICAgICBwdXNoOiBbCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQudGVycmFmb3JtIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICIoLXZhci1maWxlfC12YXIpIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnRlcnJhZm9ybSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFxufCQiLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiAic3RyaW5ncyJ9LAogICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiAidmFyaWFibGVzIn0sCiAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJvcGVyYXRvcnMifSwKCiAgICAgICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbjogInRleHQifQogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImxhbmd1YWdlLnN1cHBvcnQuY2xhc3MiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXGIodGltZW91dHN8cHJvdmlkZXJ8Y29ubmVjdGlvbnxwcm92aXNpb25lcnxsaWZlY3ljbGVwcm92aWRlcnxhdGxhcylcXGIiCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInNpbmdsZWxpbmUuY29tbWVudC50ZXJyYWZvcm0iLAogICAgICAgICAgICAgICAgcmVnZXg6ICcjKC4pKiQnCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAibXVsdGlsaW5lLmNvbW1lbnQuYmVnaW4udGVycmFmb3JtIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXlxccypcXC9cXConLAogICAgICAgICAgICAgICAgcHVzaDogImJsb2NrQ29tbWVudCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLmZ1bmN0aW9uLnRlcnJhZm9ybSIsCiAgICAgICAgICAgICAgICByZWdleDogIl5cXHMqKGxvY2Fsc3x0ZXJyYWZvcm0pXFxzKnsiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiW1soe10iCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleDogIltcXF0pfV0iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlOiAiY29uc3RhbnRzIn0sCiAgICAgICAgICAgIHtpbmNsdWRlOiAic3RyaW5ncyJ9LAogICAgICAgICAgICB7aW5jbHVkZTogIm9wZXJhdG9ycyJ9LAogICAgICAgICAgICB7aW5jbHVkZTogInZhcmlhYmxlcyJ9CiAgICAgICAgXSwKICAgICAgICBibG9ja0NvbW1lbnQ6IFt7CiAgICAgICAgICAgIHJlZ2V4OiAiXlxccypcXC9cXCoiLAogICAgICAgICAgICB0b2tlbjogIm11bHRpbGluZS5jb21tZW50LmJlZ2luLnRlcnJhZm9ybSIsCiAgICAgICAgICAgIHB1c2g6ICJibG9ja0NvbW1lbnQiCiAgICAgICAgfSwgewogICAgICAgICAgICByZWdleDogIlxcKlxcL1xccyokIiwKICAgICAgICAgICAgdG9rZW46ICJtdWx0aWxpbmUuY29tbWVudC5lbmQudGVycmFmb3JtIiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogImNvbW1lbnQiCiAgICAgICAgfV0sCiAgICAgICAgImNvbnN0YW50cyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS50ZXJyYWZvcm0iLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXGIodHJ1ZXxmYWxzZXx5ZXN8bm98b258b2ZmfEVPRilcXGIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy50ZXJyYWZvcm0iLAogICAgICAgICAgICAgICAgcmVnZXg6ICIoXFxiKFswLTldKykoW2tLbU1nR11iPyk/XFxiKXwoXFxiKDB4WzAtOUEtRmEtZl0rKShba0ttTWdHXWI/KT9cXGIpIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAidmFyaWFibGVzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJ2YXJpYWJsZS5hc3NpZ25tZW50LnRlcnJhZm9ybSIsICJrZXl3b3JkLm9wZXJhdG9yIl0sCiAgICAgICAgICAgICAgICByZWdleDogIlxcYihbYS16QS1aX10rKShcXHMqPSkiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJpbnRlcnBvbGF0ZWRfdmFyaWFibGVzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnRlcnJhZm9ybSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcYih2YXJ8c2VsZnxjb3VudHxwYXRofGxvY2FsKVxcYig/OlxcLipbYS16QS1aXy1dKik/IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RyaW5ncyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5xdW90ZS50ZXJyYWZvcm0iLAogICAgICAgICAgICAgICAgcmVnZXg6ICInIiwKICAgICAgICAgICAgICAgIHB1c2g6CiAgICAgICAgICAgICAgICAgICAgW3sKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdwdW5jdHVhdGlvbi5xdW90ZS50ZXJyYWZvcm0nLAogICAgICAgICAgICAgICAgICAgICAgICByZWdleDogIiciLAogICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiAiZXNjYXBlZF9jaGFycyJ9LAogICAgICAgICAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuOiAnc3RyaW5nJ31dCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ucXVvdGUudGVycmFmb3JtIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgICAgICBwdXNoOgogICAgICAgICAgICAgICAgICAgIFt7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAncHVuY3R1YXRpb24ucXVvdGUudGVycmFmb3JtJywKICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7aW5jbHVkZTogImludGVycG9sYXRpb24ifSwKICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJlc2NhcGVkX2NoYXJzIn0sCiAgICAgICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICdzdHJpbmcnfV0KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImVzY2FwZWRfY2hhcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuZXNjYXBlZF9jaGFyLnRlcnJhZm9ybSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcXFwuIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAib3BlcmF0b3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXD98Onw9PXwhPXw+fDx8Pj18PD18JiZ8XFx8XFxcfHwhfCV8JnxcXCp8XFwrfFxcLXwvfD0iCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJpbnRlcnBvbGF0aW9uIjogWwogICAgICAgICAgICB7Ly8gVE9ETzogZG91YmxlICQKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50ZXJwb2xhdGVkLmJlZ2luLnRlcnJhZm9ybSIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcJD9cXCRcXHsiLAogICAgICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmludGVycG9sYXRlZC5lbmQudGVycmFmb3JtIiwKICAgICAgICAgICAgICAgICAgICByZWdleDogIlxcfSIsCiAgICAgICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJpbnRlcnBvbGF0ZWRfdmFyaWFibGVzIn0sCiAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJvcGVyYXRvcnMifSwKICAgICAgICAgICAgICAgICAgICB7aW5jbHVkZTogImNvbnN0YW50cyJ9LAogICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiAic3RyaW5ncyJ9LAogICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiAiZnVuY3Rpb25zIn0sCiAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6ICJwYXJlbnRoZXNpcyJ9LAogICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW46ICJwdW5jdHVhdGlvbiJ9CiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJmdW5jdGlvbnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5mdW5jdGlvbi50ZXJyYWZvcm0iLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXGIoYWJzfGJhc2VuYW1lfGJhc2U2NGRlY29kZXxiYXNlNjRlbmNvZGV8YmFzZTY0Z3ppcHxiYXNlNjRzaGEyNTZ8YmFzZTY0c2hhNTEyfGJjcnlwdHxjZWlsfGNob21wfGNodW5rbGlzdHxjaWRyaG9zdHxjaWRybmV0bWFza3xjaWRyc3VibmV0fGNvYWxlc2NlfGNvYWxlc2NlbGlzdHxjb21wYWN0fGNvbmNhdHxjb250YWluc3xkaXJuYW1lfGRpc3RpbmN0fGVsZW1lbnR8ZmlsZXxmbG9vcnxmbGF0dGVufGZvcm1hdHxmb3JtYXRsaXN0fGluZGVudHxpbmRleHxqb2lufGpzb25lbmNvZGV8a2V5c3xsZW5ndGh8bGlzdHxsb2d8bG9va3VwfGxvd2VyfG1hcHxtYXRjaGtleXN8bWF4fG1lcmdlfG1pbnxtZDV8cGF0aGV4cGFuZHxwb3d8cmVwbGFjZXxyc2FkZWNyeXB0fHNoYTF8c2hhMjU2fHNoYTUxMnxzaWdudW18c2xpY2V8c29ydHxzcGxpdHxzdWJzdHJ8dGltZXN0YW1wfHRpbWVhZGR8dGl0bGV8dHJhbnNwb3NlfHRyaW1zcGFjZXx1cHBlcnx1cmxlbmNvZGV8dXVpZHx2YWx1ZXN8emlwbWFwKVxcYiIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInBhcmVudGhlc2lzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleDogIlxcWyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXF0iCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKFRlcnJhZm9ybUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5UZXJyYWZvcm1IaWdobGlnaHRSdWxlcyA9IFRlcnJhZm9ybUhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvdGVycmFmb3JtIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGVycmFmb3JtX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVGVycmFmb3JtSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RlcnJhZm9ybV9oaWdobGlnaHRfcnVsZXMiKS5UZXJyYWZvcm1IaWdobGlnaHRSdWxlczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24gKCkgewogICAgVGV4dE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBUZXJyYWZvcm1IaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKCihmdW5jdGlvbiAoKSB7CiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS90ZXJyYWZvcm0iOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS90ZXJyYWZvcm0iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-tex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90ZXhfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBUZXhIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKHRleHRDbGFzcykgewoKICAgIGlmICghdGV4dENsYXNzKQogICAgICAgIHRleHRDbGFzcyA9ICJ0ZXh0IjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIiUuKiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogdGV4dENsYXNzLCAvLyBub24tY29tbWFuZAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXFskJiUjXFx7XFx9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpkb2N1bWVudGNsYXNzfHVzZXBhY2thZ2V8bmV3Y291bnRlcnxzZXRjb3VudGVyfGFkZHRvY291bnRlcnx2YWx1ZXxhcmFiaWN8c3RlcGNvdW50ZXJ8bmV3ZW52aXJvbm1lbnR8cmVuZXdlbnZpcm9ubWVudHxyZWZ8dnJlZnxlcXJlZnxwYWdlcmVmfGxhYmVsfGNpdGVbYS16QS1aXSp8dGFnfGJlZ2lufGVuZHxiaWJpdGVtKVxcYiIsCiAgICAgICAgICAgICAgIG5leHQgOiAibm9zcGVsbCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsIC8vIGNvbW1hbmQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwoPzpbYS16QS1aMC05XSt8W15hLXpBLVowLTldKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5rZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiB0ZXh0Q2xhc3MsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAibm9zcGVsbCIgOiBbCiAgICAgICAgICAgewogICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgcmVnZXggOiAiJS4qJCIsCiAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJub3NwZWxsLiIgKyB0ZXh0Q2xhc3MsIC8vIG5vbi1jb21tYW5kCiAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFxbJCYlI1xce1xcfV0iCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86ZG9jdW1lbnRjbGFzc3x1c2VwYWNrYWdlfG5ld2NvdW50ZXJ8c2V0Y291bnRlcnxhZGR0b2NvdW50ZXJ8dmFsdWV8YXJhYmljfHN0ZXBjb3VudGVyfG5ld2Vudmlyb25tZW50fHJlbmV3ZW52aXJvbm1lbnR8cmVmfHZyZWZ8ZXFyZWZ8cGFnZXJlZnxsYWJlbHxjaXRlW2EtekEtWl0qfHRhZ3xiZWdpbnxlbmR8YmliaXRlbSlcXGIiCiAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gY29tbWFuZAogICAgICAgICAgICAgICByZWdleCA6ICJcXFxcKD86W2EtekEtWjAtOV0rfFteYS16QS1aMC05XSkiLAogICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ua2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgIHJlZ2V4IDogIltcXF0pXSIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICByZWdleCA6ICJ9IiwKICAgICAgICAgICAgICAgbmV4dCA6ICJzdGFydCIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwuIiArIHRleHRDbGFzcywKICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgIHRva2VuIDogIm5vc3BlbGwuIiArIHRleHRDbGFzcywKICAgICAgICAgICAgICAgcmVnZXggOiAiXFx3KyIKICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKfTsKCm9vcC5pbmhlcml0cyhUZXhIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuVGV4SGlnaGxpZ2h0UnVsZXMgPSBUZXhIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvdGV4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXhfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBUZXhIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4X2hpZ2hsaWdodF9ydWxlcyIpLlRleEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oc3VwcHJlc3NIaWdobGlnaHRpbmcpIHsKICAgIGlmIChzdXBwcmVzc0hpZ2hsaWdodGluZykKICAgICAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gVGV4dEhpZ2hsaWdodFJ1bGVzOwogICAgZWxzZQogICAgICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBUZXhIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIlIjsKICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgfTsKCiAgIHRoaXMuYWxsb3dBdXRvSW5zZXJ0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3RleCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3RleCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-text.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CjsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvdGV4dCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-textile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90ZXh0aWxlX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFRleHRpbGVIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5jaGFyQXQoMCkgPT0gImgiKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1hcmt1cC5oZWFkaW5nLiIgKyB2YWx1ZS5jaGFyQXQoMSk7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1hcmt1cC5oZWFkaW5nIjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICByZWdleCA6ICJoMXxoMnxoM3xoNHxoNXxoNnxicXxwfGJjfHByZSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJibG9ja3RhZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFwqXSt8WyNdKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIuKyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImJsb2NrdGFnIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXC4gIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKCIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJibG9ja3RhZ3Byb3BlcnRpZXMiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJibG9ja3RhZ3Byb3BlcnRpZXMiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcKSIsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJibG9ja3RhZyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVowLTlcXC1fXSsiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiIyIKICAgICAgICAgICAgfQogICAgICAgIF0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoVGV4dGlsZUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5UZXh0aWxlSGlnaGxpZ2h0UnVsZXMgPSBUZXh0aWxlSGlnaGxpZ2h0UnVsZXM7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90ZXh0aWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGV4dGlsZV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVGV4dGlsZUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0aWxlX2hpZ2hsaWdodF9ydWxlcyIpLlRleHRpbGVIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFRleHRpbGVIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IHRoaXMuJGRlZmF1bHRCZWhhdmlvdXI7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnR5cGUgPSAidGV4dCI7CiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIGlmIChzdGF0ZSA9PSAiaW50YWciKQogICAgICAgICAgICByZXR1cm4gdGFiOwogICAgICAgIAogICAgICAgIHJldHVybiAiIjsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwogICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS90ZXh0aWxlIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3RleHRpbGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-tmsnippet.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90bXNuaXBwZXQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvdG9rZW5pemVyIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lKCIuLi9saWIvb29wIiksaT1lKCIuL3RleHQiKS5Nb2RlLHM9ZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyLG89ZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlcyx1PWZ1bmN0aW9uKCl7dmFyIGU9IlNFTEVDVElPTnxDVVJSRU5UX1dPUkR8U0VMRUNURURfVEVYVHxDVVJSRU5UX0xJTkV8TElORV9JTkRFWHxMSU5FX05VTUJFUnxTT0ZUX1RBQlN8VEFCX1NJWkV8RklMRU5BTUV8RklMRVBBVEh8RlVMTE5BTUUiO3RoaXMuJHJ1bGVzPXtzdGFydDpbe3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4Oi9cXFtcJH1gXFxdL30se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiXFwkKD86VE1fKT8oPzoiK2UrIilcXGIifSx7dG9rZW46InZhcmlhYmxlIixyZWdleDoiXFwkXFx3KyJ9LHtvbk1hdGNoOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gblsxXT9uWzFdKys6bi51bnNoaWZ0KHQsMSksdGhpcy50b2tlbk5hbWV9LHRva2VuTmFtZToibWFya3VwLmxpc3QiLHJlZ2V4OiJcXCR7IixuZXh0OiJ2YXJEZWNsIn0se29uTWF0Y2g6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuWzFdPyhuWzFdLS0sblsxXXx8bi5zcGxpY2UoMCwyKSx0aGlzLnRva2VuTmFtZSk6InRleHQifSx0b2tlbk5hbWU6Im1hcmt1cC5saXN0IixyZWdleDoifSJ9LHt0b2tlbjoiZG9jLmNvbW1lbnQiLHJlZ2V4Oi9eXCR7Mn0tezUsfSQvfV0sdmFyRGVjbDpbe3JlZ2V4Oi9cZCtcYi8sdG9rZW46ImNvbnN0YW50Lm51bWVyaWMifSx7dG9rZW46ImtleXdvcmQiLHJlZ2V4OiIoPzpUTV8pPyg/OiIrZSsiKVxcYiJ9LHt0b2tlbjoidmFyaWFibGUiLHJlZ2V4OiJcXHcrIn0se3JlZ2V4Oi86Lyx0b2tlbjoicHVuY3R1YXRpb24ub3BlcmF0b3IiLG5leHQ6InN0YXJ0In0se3JlZ2V4Oi9cLy8sdG9rZW46InN0cmluZy5yZWdleCIsbmV4dDoicmVnZXhwIn0se3JlZ2V4OiIiLG5leHQ6InN0YXJ0In1dLHJlZ2V4cDpbe3JlZ2V4Oi9cXC4vLHRva2VuOiJlc2NhcGUifSx7cmVnZXg6L1xbLyx0b2tlbjoicmVnZXguc3RhcnQiLG5leHQ6ImNoYXJDbGFzcyJ9LHtyZWdleDoiLyIsdG9rZW46InN0cmluZy5yZWdleCIsbmV4dDoiZm9ybWF0In0se3Rva2VuOiJzdHJpbmcucmVnZXgiLHJlZ2V4OiIuIn1dLGNoYXJDbGFzczpbe3JlZ2V4OiJcXC4iLHRva2VuOiJlc2NhcGUifSx7cmVnZXg6IlxcXSIsdG9rZW46InJlZ2V4LmVuZCIsbmV4dDoicmVnZXhwIn0se3Rva2VuOiJzdHJpbmcucmVnZXgiLHJlZ2V4OiIuIn1dLGZvcm1hdDpbe3JlZ2V4Oi9cXFt1bFVMRV0vLHRva2VuOiJrZXl3b3JkIn0se3JlZ2V4Oi9cJFxkKy8sdG9rZW46InZhcmlhYmxlIn0se3JlZ2V4OiIvW2dpbV0qOj8iLHRva2VuOiJzdHJpbmcucmVnZXgiLG5leHQ6InN0YXJ0In0se3Rva2VuOiJzdHJpbmciLHJlZ2V4OiIuIn1dfX07ci5pbmhlcml0cyh1LG8pLHQuU25pcHBldEhpZ2hsaWdodFJ1bGVzPXU7dmFyIGE9ZnVuY3Rpb24oKXt0aGlzLiRydWxlcz17c3RhcnQ6W3t0b2tlbjoidGV4dCIscmVnZXg6Il5cXHQiLG5leHQ6InNuLXN0YXJ0In0se3Rva2VuOiJpbnZhbGlkIixyZWdleDovXiBccyovfSx7dG9rZW46ImNvbW1lbnQiLHJlZ2V4Oi9eIy4qL30se3Rva2VuOiJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLHJlZ2V4OiJecmVnZXggIixuZXh0OiJyZWdleCJ9LHt0b2tlbjoiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIixyZWdleDoiXih0cmlnZ2VyfGVuZFRyaWdnZXJ8bmFtZXxzbmlwcGV0fGd1YXJkfGVuZEd1YXJkfHRhYlRyaWdnZXJ8a2V5KVxcYiJ9XSxyZWdleDpbe3Rva2VuOiJ0ZXh0IixyZWdleDoiXFwuIn0se3Rva2VuOiJrZXl3b3JkIixyZWdleDoiLyJ9LHt0b2tlbjoiZW1wdHkiLHJlZ2V4OiIkIixuZXh0OiJzdGFydCJ9XX0sdGhpcy5lbWJlZFJ1bGVzKHUsInNuLSIsW3t0b2tlbjoidGV4dCIscmVnZXg6Il5cXHQiLG5leHQ6InNuLXN0YXJ0In0se29uTWF0Y2g6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuLnNwbGljZShuLmxlbmd0aCksdGhpcy50b2tlbk5hbWV9LHRva2VuTmFtZToidGV4dCIscmVnZXg6Il4oPyEJKSIsbmV4dDoic3RhcnQifV0pfTtyLmluaGVyaXRzKGEsbyksdC5TbmlwcGV0R3JvdXBIaWdobGlnaHRSdWxlcz1hO3ZhciBmPWUoIi4vZm9sZGluZy9jb2ZmZWUiKS5Gb2xkTW9kZSxsPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGE7dGhpcy5mb2xkaW5nUnVsZXM9bmV3IGYsdGhpcy4kdG9rZW5pemVyPW5ldyBzKGUuZ2V0UnVsZXMoKSl9O3IuaW5oZXJpdHMobCxpKSxmdW5jdGlvbigpe3RoaXMuZ2V0TmV4dExpbmVJbmRlbnQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLiRnZXRJbmRlbnQodCl9fS5jYWxsKGwucHJvdG90eXBlKSx0Lk1vZGU9bH0pLGRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jb2ZmZWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUoIi4uLy4uL2xpYi9vb3AiKSxpPWUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGUscz1lKCIuLi8uLi9yYW5nZSIpLlJhbmdlLG89dC5Gb2xkTW9kZT1mdW5jdGlvbigpe307ci5pbmhlcml0cyhvLGkpLGZ1bmN0aW9uKCl7dGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2U9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuaW5kZW50YXRpb25CbG9jayhlLG4pO2lmKHIpcmV0dXJuIHI7dmFyIGk9L1xTLyxvPWUuZ2V0TGluZShuKSx1PW8uc2VhcmNoKGkpO2lmKHU9PS0xfHxvW3VdIT0iIyIpcmV0dXJuO3ZhciBhPW8ubGVuZ3RoLGY9ZS5nZXRMZW5ndGgoKSxsPW4sYz1uO3doaWxlKCsrbjxmKXtvPWUuZ2V0TGluZShuKTt2YXIgaD1vLnNlYXJjaChpKTtpZihoPT0tMSljb250aW51ZTtpZihvW2hdIT0iIyIpYnJlYWs7Yz1ufWlmKGM+bCl7dmFyIHA9ZS5nZXRMaW5lKGMpLmxlbmd0aDtyZXR1cm4gbmV3IHMobCxhLGMscCl9fSx0aGlzLmdldEZvbGRXaWRnZXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0TGluZShuKSxpPXIuc2VhcmNoKC9cUy8pLHM9ZS5nZXRMaW5lKG4rMSksbz1lLmdldExpbmUobi0xKSx1PW8uc2VhcmNoKC9cUy8pLGE9cy5zZWFyY2goL1xTLyk7aWYoaT09LTEpcmV0dXJuIGUuZm9sZFdpZGdldHNbbi0xXT11IT0tMSYmdTxhPyJzdGFydCI6IiIsIiI7aWYodT09LTEpe2lmKGk9PWEmJnJbaV09PSIjIiYmc1tpXT09IiMiKXJldHVybiBlLmZvbGRXaWRnZXRzW24tMV09IiIsZS5mb2xkV2lkZ2V0c1tuKzFdPSIiLCJzdGFydCJ9ZWxzZSBpZih1PT1pJiZyW2ldPT0iIyImJm9baV09PSIjIiYmZS5nZXRMaW5lKG4tMikuc2VhcmNoKC9cUy8pPT0tMSlyZXR1cm4gZS5mb2xkV2lkZ2V0c1tuLTFdPSJzdGFydCIsZS5mb2xkV2lkZ2V0c1tuKzFdPSIiLCIiO3JldHVybiB1IT0tMSYmdTxpP2UuZm9sZFdpZGdldHNbbi0xXT0ic3RhcnQiOmUuZm9sZFdpZGdldHNbbi0xXT0iIixpPGE/InN0YXJ0IjoiIn19LmNhbGwoby5wcm90b3R5cGUpfSk=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-toml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90b21sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFRvbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5ib29sZWFuIjogInRydWV8ZmFsc2UiCiAgICB9LCAiaWRlbnRpZmllciIpOwoKICAgIHZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qXFxiIjsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICJzdGFydCI6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC50b21sIiwKICAgICAgICAgICAgcmVnZXg6IC8jLiokLwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsidmFyaWFibGUua2V5Z3JvdXAudG9tbCJdLAogICAgICAgICAgICByZWdleDogIig/Ol5cXHMqKShcXFtcXFsoW15cXF1dKylcXF1cXF0pIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJ2YXJpYWJsZS5rZXlncm91cC50b21sIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XlxccyopKFxcWyhbXlxcXV0rKVxcXSkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgcmVnZXggOiBpZGVudGlmaWVyUmUKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmRhdGUudG9tbCIsCiAgICAgICAgICAgcmVnZXg6ICJcXGR7NH0tXFxkezJ9LVxcZHsyfShUKVxcZHsyfTpcXGR7Mn06XFxkezJ9KFopIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy50b21sIiwKICAgICAgICAgICByZWdleDogIi0/XFxkKyhcXC4/XFxkKyk/IgogICAgICAgIH0KICAgIF0sCiAgICAicXFzdHJpbmciIDogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICBuZXh0ICA6ICJxcXN0cmluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAnXFxcXFswdG5yIlxcXFxdJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICcifCQnLAogICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgIH0KICAgIF0KICAgIH07Cgp9OwoKb29wLmluaGVyaXRzKFRvbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuVG9tbEhpZ2hsaWdodFJ1bGVzID0gVG9tbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9pbmkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHsKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gL15ccypcWyhbXlxdKV0qKV1ccyooPzokfFs7I10pLzsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIHJlID0gdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXI7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICB2YXIgbSA9IGxpbmUubWF0Y2gocmUpOwogICAgICAgIAogICAgICAgIGlmICghbSkgcmV0dXJuOwogICAgICAgIAogICAgICAgIHZhciBzdGFydE5hbWUgPSBtWzFdICsgIi4iOwogICAgICAgIAogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICBpZiAoL15ccyokLy50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIG0gPSBsaW5lLm1hdGNoKHJlKTsKICAgICAgICAgICAgaWYgKG0gJiYgbVsxXS5sYXN0SW5kZXhPZihzdGFydE5hbWUsIDApICE9PSAwKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3RvbWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS90b21sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2ZvbGRpbmcvaW5pIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVG9tbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90b21sX2hpZ2hsaWdodF9ydWxlcyIpLlRvbWxIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2luaSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBUb21sSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gdGhpcy4kZGVmYXVsdEJlaGF2aW91cjsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3RvbWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS90b21sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-tsx.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90eXBlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKCnZhciBUeXBlU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbiAob3B0aW9ucykgewoKICAgIHZhciB0c1J1bGVzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24udHMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoZnVuY3Rpb24pKFxccyspKFthLXpBLVowLTlcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVowLTlcZFwkX1x1MDBhMS1cdWZmZmZdKikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKGNvbnN0cnVjdG9yfGRlY2xhcmV8aW50ZXJmYWNlfGFzfEFTfHB1YmxpY3xwcml2YXRlfGV4dGVuZHN8ZXhwb3J0fHN1cGVyfHJlYWRvbmx5fG1vZHVsZXxuYW1lc3BhY2V8YWJzdHJhY3R8aW1wbGVtZW50cylcXGIpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkIiwgInN0b3JhZ2UudHlwZS52YXJpYWJsZS50cyJdLAogICAgICAgICAgICByZWdleDogIihjbGFzc3x0eXBlKShcXHMrW2EtekEtWjAtOV8/LiRdW1xcdz8uJF0qKSIKICAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKD86c3VwZXJ8ZXhwb3J0fGltcG9ydHxrZXlvZnxpbmZlcilcXGIiCiAgICAgICAgfSwgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdG9yYWdlLnR5cGUudmFyaWFibGUudHMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIodGhpc1xcLnxzdHJpbmdcXGJ8Ym9vbFxcYnxib29sZWFuXFxifG51bWJlclxcYnx0cnVlXFxifGZhbHNlXFxifHVuZGVmaW5lZFxcYnxhbnlcXGJ8bnVsbFxcYnwoPzp1bmlxdWUgKT9zeW1ib2xcXGJ8b2JqZWN0XFxifG5ldmVyXFxifGVudW1cXGIpKSIKICAgICAgICB9CiAgICBdOwoKICAgIHZhciBKU1J1bGVzID0gbmV3IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyh7anN4OiAob3B0aW9ucyAmJiBvcHRpb25zLmpzeCkgPT0gdHJ1ZX0pLmdldFJ1bGVzKCk7CiAgICAKICAgIEpTUnVsZXMubm9fcmVnZXggPSB0c1J1bGVzLmNvbmNhdChKU1J1bGVzLm5vX3JlZ2V4KTsKICAgIHRoaXMuJHJ1bGVzID0gSlNSdWxlczsKfTsKCm9vcC5pbmhlcml0cyhUeXBlU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlR5cGVTY3JpcHRIaWdobGlnaHRSdWxlcyA9IFR5cGVTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3R5cGVzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS90eXBlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBqc01vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgVHlwZVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90eXBlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLlR5cGVTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gVHlwZVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwogICAgCiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwganNNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3R5cGVzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90c3giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3R5cGVzY3JpcHQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciB0c01vZGUgPSByZXF1aXJlKCIuL3R5cGVzY3JpcHQiKS5Nb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRzTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy4kaGlnaGxpZ2h0UnVsZUNvbmZpZyA9IHtqc3g6IHRydWV9Owp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgdHNNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3RzeCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3RzeCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-turtle.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS90dXJ0bGVfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgVHVydGxlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICBzdGFydDogW3sKICAgICAgICAgICAgaW5jbHVkZTogIiNjb21tZW50cyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjc3RyaW5ncyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjYmFzZS1wcmVmaXgtZGVjbGFyYXRpb25zIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNzdHJpbmctbGFuZ3VhZ2Utc3VmZml4ZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3N0cmluZy1kYXRhdHlwZS1zdWZmaXhlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjcmVsYXRpdmUtdXJscyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjeG1sLXNjaGVtYS10eXBlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjcmRmLXNjaGVtYS10eXBlcyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICIjb3dsLXR5cGVzIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIiNxbmFtZXMiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiI3B1bmN0dWF0aW9uLW9wZXJhdG9ycyIKICAgICAgICB9XSwKICAgICAgICAiI2Jhc2UtcHJlZml4LWRlY2xhcmF0aW9ucyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vdGhlci5wcmVmaXgudHVydGxlIiwKICAgICAgICAgICAgcmVnZXg6IC9AKD86YmFzZXxwcmVmaXgpLwogICAgICAgIH1dLAogICAgICAgICIjY29tbWVudHMiOiBbewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC50dXJ0bGUiLAogICAgICAgICAgICAgICAgImNvbW1lbnQubGluZS5oYXNoLnR1cnRsZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC8oIykoLiokKS8KICAgICAgICB9XSwKICAgICAgICAiI293bC10eXBlcyI6IFt7CiAgICAgICAgICAgIHRva2VuOiAic3VwcG9ydC50eXBlLmRhdGF0eXBlLm93bC50dXJ0bGUiLAogICAgICAgICAgICByZWdleDogL293bDpbYS16QS1aXSsvCiAgICAgICAgfV0sCiAgICAgICAgIiNwdW5jdHVhdGlvbi1vcGVyYXRvcnMiOiBbewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IucHVuY3R1YXRpb24udHVydGxlIiwKICAgICAgICAgICAgcmVnZXg6IC87fCx8XC58XCh8XCl8XFt8XF0vCiAgICAgICAgfV0sCiAgICAgICAgIiNxbmFtZXMiOiBbewogICAgICAgICAgICB0b2tlbjogImVudGl0eS5uYW1lLm90aGVyLnFuYW1lLnR1cnRsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvKD86W2EtekEtWl1bLV9hLXpBLVowLTldKik/Oig/OltfYS16QS1aXVstX2EtekEtWjAtOV0qKT8vCiAgICAgICAgfV0sCiAgICAgICAgIiNyZGYtc2NoZW1hLXR5cGVzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LnR5cGUuZGF0YXR5cGUucmRmLnNjaGVtYS50dXJ0bGUiLAogICAgICAgICAgICByZWdleDogL3JkZnM/OlthLXpBLVpdK3woPzpefFxzKWEoPzpcc3wkKS8KICAgICAgICB9XSwKICAgICAgICAiI3JlbGF0aXZlLXVybHMiOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQub3RoZXIucmVsYXRpdmUudXJsLnR1cnRsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvPC8sCiAgICAgICAgICAgIHB1c2g6IFt7CiAgICAgICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQub3RoZXIucmVsYXRpdmUudXJsLnR1cnRsZSIsCiAgICAgICAgICAgICAgICByZWdleDogLz4vLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1b3RlZC5vdGhlci5yZWxhdGl2ZS51cmwudHVydGxlIgogICAgICAgICAgICB9XQogICAgICAgIH1dLAogICAgICAgICIjc3RyaW5nLWRhdGF0eXBlLXN1ZmZpeGVzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yLmRhdGF0eXBlLnN1ZmZpeC50dXJ0bGUiLAogICAgICAgICAgICByZWdleDogL1xeXF4vCiAgICAgICAgfV0sCiAgICAgICAgIiNzdHJpbmctbGFuZ3VhZ2Utc3VmZml4ZXMiOiBbewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IubGFuZ3VhZ2Uuc3VmZml4LnR1cnRsZSIsCiAgICAgICAgICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2Uuc3VmZml4LnR1cnRsZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC8oPyEiKShAKShbYS16XSsoPzpcLVthLXowLTldKykqKS8KICAgICAgICB9XSwKICAgICAgICAiI3N0cmluZ3MiOiBbewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQudHJpcGxlLnR1cnRsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvIiIiLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnF1b3RlZC50cmlwbGUudHVydGxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvIiIiLywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5xdW90ZWQudHJpcGxlLnR1cnRsZSIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnF1b3RlZC5kb3VibGUudHVydGxlIiwKICAgICAgICAgICAgcmVnZXg6IC8iLywKICAgICAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnF1b3RlZC5kb3VibGUudHVydGxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvIi8sCiAgICAgICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImludmFsaWQuc3RyaW5nLm5ld2xpbmUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC8kLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUudHVydGxlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXFwuLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVvdGVkLmRvdWJsZS50dXJ0bGUiCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgIiN4bWwtc2NoZW1hLXR5cGVzIjogW3sKICAgICAgICAgICAgdG9rZW46ICJzdXBwb3J0LnR5cGUuZGF0YXR5cGUueG1sLnNjaGVtYS50dXJ0bGUiLAogICAgICAgICAgICByZWdleDogL3hzZD86W2Etel1bYS16QS1aXSsvCiAgICAgICAgfV0KICAgIH07CiAgICAKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKClR1cnRsZUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0gewogICAgZmlsZVR5cGVzOiBbInR0bCIsICJudCJdLAogICAgbmFtZTogIlR1cnRsZSIsCiAgICBzY29wZU5hbWU6ICJzb3VyY2UudHVydGxlIgp9OwoKCm9vcC5pbmhlcml0cyhUdXJ0bGVIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuVHVydGxlSGlnaGxpZ2h0UnVsZXMgPSBUdXJ0bGVIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90dXJ0bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS90dXJ0bGVfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBUdXJ0bGVIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdHVydGxlX2hpZ2hsaWdodF9ydWxlcyIpLlR1cnRsZUhpZ2hsaWdodFJ1bGVzOwp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFR1cnRsZUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3R1cnRsZSI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3R1cnRsZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-twig.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90d2lnX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgVHdpZ0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKCiAgICB2YXIgdGFncyA9ICJhdXRvZXNjYXBlfGJsb2NrfGRvfGVtYmVkfGV4dGVuZHN8ZmlsdGVyfGZsdXNofGZvcnxmcm9tfGlmfGltcG9ydHxpbmNsdWRlfG1hY3JvfHNhbmRib3h8c2V0fHNwYWNlbGVzc3x1c2V8dmVyYmF0aW0iOwogICAgdGFncyA9IHRhZ3MgKyAifGVuZCIgKyB0YWdzLnJlcGxhY2UoL1x8L2csICJ8ZW5kIik7CiAgICB2YXIgZmlsdGVycyA9ICJhYnN8YmF0Y2h8Y2FwaXRhbGl6ZXxjb252ZXJ0X2VuY29kaW5nfGRhdGV8ZGF0ZV9tb2RpZnl8ZGVmYXVsdHxlfGVzY2FwZXxmaXJzdHxmb3JtYXR8am9pbnxqc29uX2VuY29kZXxrZXlzfGxhc3R8bGVuZ3RofGxvd2VyfG1lcmdlfG5sMmJyfG51bWJlcl9mb3JtYXR8cmF3fHJlcGxhY2V8cmV2ZXJzZXxzbGljZXxzb3J0fHNwbGl0fHN0cmlwdGFnc3x0aXRsZXx0cmltfHVwcGVyfHVybF9lbmNvZGUiOwogICAgdmFyIGZ1bmN0aW9ucyA9ICJhdHRyaWJ1dGV8Y29uc3RhbnR8Y3ljbGV8ZGF0ZXxkdW1wfHBhcmVudHxyYW5kb218cmFuZ2V8dGVtcGxhdGVfZnJvbV9zdHJpbmciOwogICAgdmFyIHRlc3RzID0gImNvbnN0YW50fGRpdmlzaWJsZWJ5fHNhbWVhc3xkZWZpbmVkfGVtcHR5fGV2ZW58aXRlcmFibGV8b2RkIjsKICAgIHZhciBjb25zdGFudHMgPSAibnVsbHxub25lfHRydWV8ZmFsc2UiOwogICAgdmFyIG9wZXJhdG9ycyA9ICJiLWFuZHxiLXhvcnxiLW9yfGlufGlzfGFuZHxvcnxub3QiOwoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5jb250cm9sLnR3aWciOiB0YWdzLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uLnR3aWciOiBbZmlsdGVycywgZnVuY3Rpb25zLCB0ZXN0c10uam9pbigifCIpLAogICAgICAgICJrZXl3b3JkLm9wZXJhdG9yLnR3aWciOiAgb3BlcmF0b3JzLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS50d2lnIjogY29uc3RhbnRzCiAgICB9LCAiaWRlbnRpZmllciIpOwogICAgZm9yICh2YXIgcnVsZSBpbiB0aGlzLiRydWxlcykgewogICAgICAgIHRoaXMuJHJ1bGVzW3J1bGVdLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6ICJ2YXJpYWJsZS5vdGhlci5yZWFkd3JpdGUubG9jYWwudHdpZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxce1xcey0/IiwKICAgICAgICAgICAgcHVzaCA6ICJ0d2lnLXN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAibWV0YS50YWcudHdpZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxceyUtPyIsCiAgICAgICAgICAgIHB1c2ggOiAidHdpZy1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuYmxvY2sudHdpZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxceyMtPyIsCiAgICAgICAgICAgIHB1c2ggOiAidHdpZy1jb21tZW50IgogICAgICAgIH0pOwogICAgfQogICAgdGhpcy4kcnVsZXNbInR3aWctY29tbWVudCJdID0gW3sKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmJsb2NrLnR3aWciLAogICAgICAgIHJlZ2V4IDogIi4qLT8jXFx9IiwKICAgICAgICBuZXh0IDogInBvcCIKICAgIH1dOwoKICAgIHRoaXMuJHJ1bGVzWyJ0d2lnLXN0YXJ0Il0gPSBbewogICAgICAgIHRva2VuIDogInZhcmlhYmxlLm90aGVyLnJlYWR3cml0ZS5sb2NhbC50d2lnIiwKICAgICAgICByZWdleCA6ICItP1xcfVxcfSIsCiAgICAgICAgbmV4dCA6ICJwb3AiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcudHdpZyIsCiAgICAgICAgcmVnZXggOiAiLT8lXFx9IiwKICAgICAgICBuZXh0IDogInBvcCIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgIG5leHQgIDogInR3aWctcXN0cmluZyIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgIG5leHQgIDogInR3aWctcXFzdHJpbmciCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgfSwgewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgfSwgewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgfSwgewogICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50IiwKICAgICAgICByZWdleCA6ICI9fH4iCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5jb21wYXJpc29uIiwKICAgICAgICByZWdleCA6ICI9PXwhPXw8fD58Pj18PD18PT09IgogICAgfSwgewogICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IuYXJpdGhtZXRpYyIsCiAgICAgICAgcmVnZXggOiAiXFwrfC18L3wlfC8vfFxcKnxcXCpcXCoiCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5vdGhlciIsCiAgICAgICAgcmVnZXggOiAiXFwuXFwufFxcfCIKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgcmVnZXggOiAvXD98OnwsfDt8XC4vCiAgICB9LCB7CiAgICAgICAgdG9rZW4gOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICByZWdleCA6IC9bXFtcKHtdLwogICAgfSwgewogICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgIHJlZ2V4IDogIlxccysiCiAgICB9IF07CgogICAgdGhpcy4kcnVsZXNbInR3aWctcXFzdHJpbmciXSA9IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4IDogL1xcW1xcIiQjbnRyXXwje1teIn1dKn0vCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgbmV4dCAgOiAidHdpZy1zdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJzdHJpbmciCiAgICAgICAgfQogICAgXTsKCiAgICB0aGlzLiRydWxlc1sidHdpZy1xc3RyaW5nIl0gPSBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICByZWdleCA6IC9cXFtcXCdudHJdfS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgIHJlZ2V4IDogIiciLAogICAgICAgICAgICBuZXh0ICA6ICJ0d2lnLXN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgICAgICB9CiAgICBdOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhUd2lnSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlR3aWdIaWdobGlnaHRSdWxlcyA9IFR3aWdIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3R3aWciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS90d2lnX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBIdG1sTW9kZSA9IHJlcXVpcmUoIi4vaHRtbCIpLk1vZGU7CnZhciBUd2lnSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3R3aWdfaGlnaGxpZ2h0X3J1bGVzIikuVHdpZ0hpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICBIdG1sTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFR3aWdIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuYmxvY2tDb21tZW50ID0ge3N0YXJ0OiAieyMiLCBlbmQ6ICIjfSJ9OwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKCiAgICAgICAgdmFyIHRva2VuaXplZExpbmUgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0b2tlbml6ZWRMaW5lLnRva2VuczsKICAgICAgICB2YXIgZW5kU3RhdGUgPSB0b2tlbml6ZWRMaW5lLnN0YXRlOwoKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlID09ICJzdGFydCIpIHsKICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qW1x7XChcW11ccyokLyk7CiAgICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGluZGVudDsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gdGhpcy4kb3V0ZGVudC5jaGVja091dGRlbnQobGluZSwgaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGRvYywgcm93KSB7CiAgICAgICAgdGhpcy4kb3V0ZGVudC5hdXRvT3V0ZGVudChkb2MsIHJvdyk7CiAgICB9OwogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvdHdpZyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3R3aWciXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-typescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS90eXBlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24gKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKCnZhciBUeXBlU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbiAob3B0aW9ucykgewoKICAgIHZhciB0c1J1bGVzID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24udHMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoZnVuY3Rpb24pKFxccyspKFthLXpBLVowLTlcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVowLTlcZFwkX1x1MDBhMS1cdWZmZmZdKikiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86XFxiKGNvbnN0cnVjdG9yfGRlY2xhcmV8aW50ZXJmYWNlfGFzfEFTfHB1YmxpY3xwcml2YXRlfGV4dGVuZHN8ZXhwb3J0fHN1cGVyfHJlYWRvbmx5fG1vZHVsZXxuYW1lc3BhY2V8YWJzdHJhY3R8aW1wbGVtZW50cylcXGIpIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJrZXl3b3JkIiwgInN0b3JhZ2UudHlwZS52YXJpYWJsZS50cyJdLAogICAgICAgICAgICByZWdleDogIihjbGFzc3x0eXBlKShcXHMrW2EtekEtWjAtOV8/LiRdW1xcdz8uJF0qKSIKICAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFxiKD86c3VwZXJ8ZXhwb3J0fGltcG9ydHxrZXlvZnxpbmZlcilcXGIiCiAgICAgICAgfSwgCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJzdG9yYWdlLnR5cGUudmFyaWFibGUudHMiXSwKICAgICAgICAgICAgcmVnZXg6ICIoPzpcXGIodGhpc1xcLnxzdHJpbmdcXGJ8Ym9vbFxcYnxib29sZWFuXFxifG51bWJlclxcYnx0cnVlXFxifGZhbHNlXFxifHVuZGVmaW5lZFxcYnxhbnlcXGJ8bnVsbFxcYnwoPzp1bmlxdWUgKT9zeW1ib2xcXGJ8b2JqZWN0XFxifG5ldmVyXFxifGVudW1cXGIpKSIKICAgICAgICB9CiAgICBdOwoKICAgIHZhciBKU1J1bGVzID0gbmV3IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyh7anN4OiAob3B0aW9ucyAmJiBvcHRpb25zLmpzeCkgPT0gdHJ1ZX0pLmdldFJ1bGVzKCk7CiAgICAKICAgIEpTUnVsZXMubm9fcmVnZXggPSB0c1J1bGVzLmNvbmNhdChKU1J1bGVzLm5vX3JlZ2V4KTsKICAgIHRoaXMuJHJ1bGVzID0gSlNSdWxlczsKfTsKCm9vcC5pbmhlcml0cyhUeXBlU2NyaXB0SGlnaGxpZ2h0UnVsZXMsIEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlR5cGVTY3JpcHRIaWdobGlnaHRSdWxlcyA9IFR5cGVTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3R5cGVzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2phdmFzY3JpcHQiLCJhY2UvbW9kZS90eXBlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL2JlaGF2aW91ci9jc3R5bGUiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBqc01vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgVHlwZVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90eXBlc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLlR5cGVTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzdHlsZSIpLkNzdHlsZUJlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gVHlwZVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwogICAgCiAgICB0aGlzLiRvdXRkZW50ID0gbmV3IE1hdGNoaW5nQnJhY2VPdXRkZW50KCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgQ3N0eWxlQmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwganNNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3R5cGVzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS90eXBlc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-vala.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS92YWxhX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFZhbGFIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0geyBzdGFydDogCiAgICAgICBbIHsgdG9rZW46IAogICAgICAgICAgICBbICdtZXRhLnVzaW5nLnZhbGEnLAogICAgICAgICAgICAgICdrZXl3b3JkLm90aGVyLnVzaW5nLnZhbGEnLAogICAgICAgICAgICAgICdtZXRhLnVzaW5nLnZhbGEnLAogICAgICAgICAgICAgICdzdG9yYWdlLm1vZGlmaWVyLnVzaW5nLnZhbGEnLAogICAgICAgICAgICAgICdtZXRhLnVzaW5nLnZhbGEnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi50ZXJtaW5hdG9yLnZhbGEnIF0sCiAgICAgICAgICAgcmVnZXg6ICdeKFxccyopKHVzaW5nKVxcYig/OihcXHMqKShbXiA7JF0rKShcXHMqKSgoPzo7KT8pKT8nIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNjb2RlJyB9IF0sCiAgICAgICcjYWxsLXR5cGVzJzogCiAgICAgICBbIHsgaW5jbHVkZTogJyNwcmltaXRpdmUtYXJyYXlzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcHJpbWl0aXZlLXR5cGVzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjb2JqZWN0LXR5cGVzJyB9IF0sCiAgICAgICcjYW5ub3RhdGlvbnMnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3N0b3JhZ2UudHlwZS5hbm5vdGF0aW9uLnZhbGEnLAogICAgICAgICAgICAgICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmFubm90YXRpb24tYXJndW1lbnRzLmJlZ2luLnZhbGEnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoQFteIChdKykoXFwoKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uYW5ub3RhdGlvbi1hcmd1bWVudHMuZW5kLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgICAgICBbICdjb25zdGFudC5vdGhlci5rZXkudmFsYScsCiAgICAgICAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAna2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LnZhbGEnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJyhcXHcqKShcXHMqKSg9KScgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29kZScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uc2VwZXJhdG9yLnByb3BlcnR5LnZhbGEnLCByZWdleDogJywnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmRlY2xhcmF0aW9uLmFubm90YXRpb24udmFsYScgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUuYW5ub3RhdGlvbi52YWxhJywgcmVnZXg6ICdAXFx3KicgfSBdLAogICAgICAnI2Fub255bW91cy1jbGFzc2VzLWFuZC1uZXcnOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5uZXcudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGJuZXdcXGInLAogICAgICAgICAgIHB1c2hfZGlzYWJsZWQ6IAogICAgICAgICAgICBbIHsgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKD88PVxcKXxcXF0pKD8hXFxzKnspfCg/PD19KXwoPz07KScsCiAgICAgICAgICAgICAgICBUT0RPOiAnRklYTUU6IHJlZ2V4cCBkb2VzblwndCBoYXZlIGpzIGVxdWl2YWxlbnQnLAogICAgICAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PD1cXCl8XFxdKSg/IVxccyp7KXwoPzw9fSl8KD89OyknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiBbICdzdG9yYWdlLnR5cGUudmFsYScsICd0ZXh0JyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoXFx3KykoXFxzKikoPz1cXFspJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJ318KD89O3xcXCkpJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcXFsnLAogICAgICAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJ1xcXScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb2RlJyB9IF0gfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICd7JywKICAgICAgICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICd0ZXh0JywgcmVnZXg6ICcoPz19KScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb2RlJyB9IF0gfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPz1cXHcuKlxcKCknLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnKD88PVxcKSknLAogICAgICAgICAgICAgICAgICAgICBUT0RPOiAnRklYTUU6IHJlZ2V4cCBkb2VzblwndCBoYXZlIGpzIGVxdWl2YWxlbnQnLAogICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFJlZ2V4OiAnKD88PVxcKSknLAogICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI29iamVjdC10eXBlcycgfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcXCgnLAogICAgICAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJ1xcKScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb2RlJyB9IF0gfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ21ldGEuaW5uZXItY2xhc3MudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJ3snLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5pbm5lci1jbGFzcy52YWxhJywgcmVnZXg6ICd9JywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjbGFzcy1ib2R5JyB9LAogICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmlubmVyLWNsYXNzLnZhbGEnIH0gXSB9IF0gfSBdLAogICAgICAnI2Fzc2VydGlvbnMnOiAKICAgICAgIFsgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2tleXdvcmQuY29udHJvbC5hc3NlcnQudmFsYScsCiAgICAgICAgICAgICAgJ21ldGEuZGVjbGFyYXRpb24uYXNzZXJ0aW9uLnZhbGEnIF0sCiAgICAgICAgICAgcmVnZXg6ICdcXGIoYXNzZXJ0fHJlcXVpcmVzfGVuc3VyZXMpKFxccyknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdtZXRhLmRlY2xhcmF0aW9uLmFzc2VydGlvbi52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnJCcsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmFzc2VydC5leHByZXNzaW9uLXNlcGVyYXRvci52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnOicgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29kZScgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZGVjbGFyYXRpb24uYXNzZXJ0aW9uLnZhbGEnIH0gXSB9IF0sCiAgICAgICcjY2xhc3MnOiAKICAgICAgIFsgeyB0b2tlbjogJ21ldGEuY2xhc3MudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICcoPz1cXHc/W1xcd1xcc10qKD86Y2xhc3N8KD86QCk/aW50ZXJmYWNlfGVudW18c3RydWN0fG5hbWVzcGFjZSlcXHMrXFx3KyknLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwYXJlbi52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnfScsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdG9yYWdlLW1vZGlmaWVycycgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudHMnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnc3RvcmFnZS5tb2RpZmllci52YWxhJywKICAgICAgICAgICAgICAgICAgICdtZXRhLmNsYXNzLmlkZW50aWZpZXIudmFsYScsCiAgICAgICAgICAgICAgICAgICAnZW50aXR5Lm5hbWUudHlwZS5jbGFzcy52YWxhJyBdLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoY2xhc3N8KD86QCk/aW50ZXJmYWNlfGVudW18c3RydWN0fG5hbWVzcGFjZSkoXFxzKykoW1xcd1xcLl0rKScgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnc3RvcmFnZS5tb2RpZmllci5leHRlbmRzLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICc6JywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ21ldGEuZGVmaW5pdGlvbi5jbGFzcy5pbmhlcml0ZWQuY2xhc3Nlcy52YWxhJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICcoPz17fCwpJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNvYmplY3QtdHlwZXMtaW5oZXJpdGVkJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2NvbW1lbnRzJyB9LAogICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmRlZmluaXRpb24uY2xhc3MuaW5oZXJpdGVkLmNsYXNzZXMudmFsYScgfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgICAgICAgWyAnc3RvcmFnZS5tb2RpZmllci5pbXBsZW1lbnRzLnZhbGEnLAogICAgICAgICAgICAgICAgICAgJ21ldGEuZGVmaW5pdGlvbi5jbGFzcy5pbXBsZW1lbnRlZC5pbnRlcmZhY2VzLnZhbGEnIF0sCiAgICAgICAgICAgICAgICByZWdleDogJygsKShcXHMpJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ21ldGEuZGVmaW5pdGlvbi5jbGFzcy5pbXBsZW1lbnRlZC5pbnRlcmZhY2VzLnZhbGEnLAogICAgICAgICAgICAgICAgICAgICByZWdleDogJyg/PVxceyknLAogICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI29iamVjdC10eXBlcy1pbmhlcml0ZWQnIH0sCiAgICAgICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudHMnIH0sCiAgICAgICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEuZGVmaW5pdGlvbi5jbGFzcy5pbXBsZW1lbnRlZC5pbnRlcmZhY2VzLnZhbGEnIH0gXSB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdwYXJlbi52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAneycsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICdwYXJlbi52YWxhJywgcmVnZXg6ICcoPz19KScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY2xhc3MtYm9keScgfSwKICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5jbGFzcy5ib2R5LnZhbGEnIH0gXSB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5jbGFzcy52YWxhJyB9IF0sCiAgICAgICAgICAgY29tbWVudDogJ2F0dGVtcHRpbmcgdG8gcHV0IG5hbWVzcGFjZSBpbiBoZXJlLicgfSBdLAogICAgICAnI2NsYXNzLWJvZHknOiAKICAgICAgIFsgeyBpbmNsdWRlOiAnI2NvbW1lbnRzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY2xhc3MnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNlbnVtcycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI21ldGhvZHMnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNhbm5vdGF0aW9ucycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3N0b3JhZ2UtbW9kaWZpZXJzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29kZScgfSBdLAogICAgICAnI2NvZGUnOiAKICAgICAgIFsgeyBpbmNsdWRlOiAnI2NvbW1lbnRzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY2xhc3MnIH0sCiAgICAgICAgIHsgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICByZWdleDogJ3snLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICd0ZXh0JywgcmVnZXg6ICd9JywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29kZScgfSBdIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNhc3NlcnRpb25zJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcGFyZW5zJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29uc3RhbnRzLWFuZC1zcGVjaWFsLXZhcnMnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNhbm9ueW1vdXMtY2xhc3Nlcy1hbmQtbmV3JyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcja2V5d29yZHMnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNzdG9yYWdlLW1vZGlmaWVycycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI3N0cmluZ3MnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNhbGwtdHlwZXMnIH0gXSwKICAgICAgJyNjb21tZW50cyc6IAogICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnL1xcKlxcKi8nIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJ3RleHQuaHRtbC5qYXZhZG9jJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjY29tbWVudHMtaW5saW5lJyB9IF0sCiAgICAgICcjY29tbWVudHMtaW5saW5lJzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICcvXFwqJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5jb21tZW50LnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXCovJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdjb21tZW50LmJsb2NrLnZhbGEnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAKICAgICAgICAgICAgWyAndGV4dCcsCiAgICAgICAgICAgICAgJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uY29tbWVudC52YWxhJywKICAgICAgICAgICAgICAnY29tbWVudC5saW5lLmRvdWJsZS1zbGFzaC52YWxhJyBdLAogICAgICAgICAgIHJlZ2V4OiAnKFxccyopKC8vKSguKiQpJyB9IF0sCiAgICAgICcjY29uc3RhbnRzLWFuZC1zcGVjaWFsLXZhcnMnOiAKICAgICAgIFsgeyB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86dHJ1ZXxmYWxzZXxudWxsKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ3ZhcmlhYmxlLmxhbmd1YWdlLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86dGhpc3xiYXNlKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50Lm51bWVyaWMudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzowKD86eHxYKVswLTlhLWZBLUZdKnwoPzpbMC05XStcXC4/WzAtOV0qfFxcLlswLTldKykoPzooPzplfEUpKD86XFwrfC0pP1swLTldKyk/KSg/OltMbEZmVXVEZF18VUx8dWwpP1xcYicgfSwKICAgICAgICAgeyB0b2tlbjogWyAna2V5d29yZC5vcGVyYXRvci5kZXJlZmVyZW5jZS52YWxhJywgJ2NvbnN0YW50Lm90aGVyLnZhbGEnIF0sCiAgICAgICAgICAgcmVnZXg6ICcoKD86XFwuKT8pXFxiKFtBLVpdW0EtWjAtOV9dKykoPyE8fFxcLmNsYXNzfFxccypcXHcrXFxzKj0pXFxiJyB9IF0sCiAgICAgICcjZW51bXMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgIHJlZ2V4OiAnXig/PVxccypbQS1aMC05X10rXFxzKig/Ont8XFwofCwpKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJyg/PTt8fSknLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5vdGhlci5lbnVtLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICdcXHcrJywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ21ldGEuZW51bS52YWxhJywgcmVnZXg6ICcoPz0sfDt8fSknLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3BhcmVucycgfSwKICAgICAgICAgICAgICAgICAgIHsgdG9rZW46ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICd7JywKICAgICAgICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICd0ZXh0JywgcmVnZXg6ICd9JywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2NsYXNzLWJvZHknIH0gXSB9LAogICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLmVudW0udmFsYScgfSBdIH0gXSB9IF0sCiAgICAgICcja2V5d29yZHMnOiAKICAgICAgIFsgeyB0b2tlbjogJ2tleXdvcmQuY29udHJvbC5jYXRjaC1leGNlcHRpb24udmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzp0cnl8Y2F0Y2h8ZmluYWxseXx0aHJvdylcXGInIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLmNvbnRyb2wudmFsYScsIHJlZ2V4OiAnXFw/fDp8XFw/XFw/JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5jb250cm9sLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86cmV0dXJufGJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkb3x3aGlsZXxmb3J8Zm9yZWFjaHxzd2l0Y2h8aWZ8ZWxzZXxpbnx5aWVsZHxnZXR8c2V0fHZhbHVlKVxcYicgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3IudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzp0eXBlb2Z8aXN8YXMpXFxiJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5jb21wYXJpc29uLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnPT18IT18PD18Pj18PD58PHw+JyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5hc3NpZ25tZW50LnZhbGEnLCByZWdleDogJz0nIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmluY3JlbWVudC1kZWNyZW1lbnQudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXC1cXC18XFwrXFwrJyB9LAogICAgICAgICB7IHRva2VuOiAna2V5d29yZC5vcGVyYXRvci5hcml0aG1ldGljLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFwtfFxcK3xcXCp8XFwvfCUnIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmxvZ2ljYWwudmFsYScsIHJlZ2V4OiAnIXwmJnxcXHxcXHwnIH0sCiAgICAgICAgIHsgdG9rZW46ICdrZXl3b3JkLm9wZXJhdG9yLmRlcmVmZXJlbmNlLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFwuKD89XFxTKScsCiAgICAgICAgICAgb3JpZ2luYWxSZWdleDogJyg/PD1cXFMpXFwuKD89XFxTKScgfSwKICAgICAgICAgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLnRlcm1pbmF0b3IudmFsYScsIHJlZ2V4OiAnOycgfSwKICAgICAgICAgeyB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3Iub3duZXJzaGlwJywgcmVnZXg6ICdvd25lZHx1bm93bmVkJyB9IF0sCiAgICAgICcjbWV0aG9kcyc6IAogICAgICAgWyB7IHRva2VuOiAnbWV0YS5tZXRob2QudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICcoPyFuZXcpKD89XFx3LipcXHMrKSg/PVtePV0rXFwoKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3BhcmVuLnZhbGEnLCByZWdleDogJ318KD89OyknLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNzdG9yYWdlLW1vZGlmaWVycycgfSwKICAgICAgICAgICAgICB7IHRva2VuOiBbICdlbnRpdHkubmFtZS5mdW5jdGlvbi52YWxhJywgJ21ldGEubWV0aG9kLmlkZW50aWZpZXIudmFsYScgXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAnKFtcXH5cXHdcXC5dKykoXFxzKlxcKCknLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5tZXRob2QuaWRlbnRpZmllci52YWxhJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICdcXCknLAogICAgICAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI3BhcmFtZXRlcnMnIH0sCiAgICAgICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEubWV0aG9kLmlkZW50aWZpZXIudmFsYScgfSBdIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ21ldGEubWV0aG9kLnJldHVybi10eXBlLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICcoPz1cXHcuKlxccytcXHcrXFxzKlxcKCknLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5tZXRob2QucmV0dXJuLXR5cGUudmFsYScsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAnKD89XFx3K1xccypcXCgpJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNhbGwtdHlwZXMnIH0sCiAgICAgICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEubWV0aG9kLnJldHVybi10eXBlLnZhbGEnIH0gXSB9LAogICAgICAgICAgICAgIHsgaW5jbHVkZTogJyN0aHJvd3MnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ3BhcmVuLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICd7JywKICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgIFsgeyB0b2tlbjogJ3BhcmVuLnZhbGEnLCByZWdleDogJyg/PX0pJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb2RlJyB9LAogICAgICAgICAgICAgICAgICAgeyBkZWZhdWx0VG9rZW46ICdtZXRhLm1ldGhvZC5ib2R5LnZhbGEnIH0gXSB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5tZXRob2QudmFsYScgfSBdIH0gXSwKICAgICAgJyNuYW1lc3BhY2UnOiAKICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgIHJlZ2V4OiAnXig/PVxccypbQS1aMC05X10rXFxzKig/Ont8XFwofCwpKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLCByZWdleDogJyg/PTt8fSknLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5vdGhlci5uYW1lc3BhY2UudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcdysnLAogICAgICAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAnbWV0YS5uYW1lc3BhY2UudmFsYScsIHJlZ2V4OiAnKD89LHw7fH0pJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNwYXJlbnMnIH0sCiAgICAgICAgICAgICAgICAgICB7IHRva2VuOiAndGV4dCcsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2V4OiAneycsCiAgICAgICAgICAgICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICAgICAgICAgICAgWyB7IHRva2VuOiAndGV4dCcsIHJlZ2V4OiAnfScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5jbHVkZTogJyNjb2RlJyB9IF0gfSwKICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnbWV0YS5uYW1lc3BhY2UudmFsYScgfSBdIH0gXSwKICAgICAgICAgICBjb21tZW50OiAnVGhpcyBpcyBub3QgcXVpdGUgcmlnaHQuIFNlZSB0aGUgY2xhc3MgZ3JhbW1hciByaWdodCBub3cnIH0gXSwKICAgICAgJyNvYmplY3QtdHlwZXMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UudHlwZS5nZW5lcmljLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86W2Etel1cXHcqXFwuKSpbQS1aXStcXHcqPCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UudHlwZS5nZW5lcmljLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICc+fFteXFx3XFxzLFxcPzxcXFsoKVxcXV0nLAogICAgICAgICAgICAgICAgVE9ETzogJ0ZJWE1FOiByZWdleHAgZG9lc25cJ3QgaGF2ZSBqcyBlcXVpdmFsZW50JywKICAgICAgICAgICAgICAgIG9yaWdpbmFsUmVnZXg6ICc+fFteXFx3XFxzLFxcPzxcXFsoPzpbLF0rKVxcXV0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjb2JqZWN0LXR5cGVzJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUuZ2VuZXJpYy52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnPCcsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUuZ2VuZXJpYy52YWxhJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICc+fFteXFx3XFxzLFxcW1xcXTxdJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RvcmFnZS50eXBlLmdlbmVyaWMudmFsYScgfSBdLAogICAgICAgICAgICAgICAgY29tbWVudDogJ1RoaXMgaXMganVzdCB0byBzdXBwb3J0IDw+XCdzIHdpdGggbm8gYWN0dWFsIHR5cGUgcHJlZml4JyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RvcmFnZS50eXBlLmdlbmVyaWMudmFsYScgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUub2JqZWN0LmFycmF5LnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86W2Etel1cXHcqXFwuKSpbQS1aXStcXHcqKD89XFxbKScsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UudHlwZS5vYmplY3QuYXJyYXkudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJyg/PVteXFxdXFxzXSknLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAndGV4dCcsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcWycsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICd0ZXh0JywgcmVnZXg6ICdcXF0nLCBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI2NvZGUnIH0gXSB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RvcmFnZS50eXBlLm9iamVjdC5hcnJheS52YWxhJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ3N0b3JhZ2UudHlwZS52YWxhJywKICAgICAgICAgICAgICAna2V5d29yZC5vcGVyYXRvci5kZXJlZmVyZW5jZS52YWxhJywKICAgICAgICAgICAgICAnc3RvcmFnZS50eXBlLnZhbGEnIF0sCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzooW2Etel1cXHcqKShcXC4pKSooW0EtWl0rXFx3KlxcYiknIH0gXSwKICAgICAgJyNvYmplY3QtdHlwZXMtaW5oZXJpdGVkJzogCiAgICAgICBbIHsgdG9rZW46ICdlbnRpdHkub3RoZXIuaW5oZXJpdGVkLWNsYXNzLnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86W2Etel1cXHcqXFwuKSpbQS1aXStcXHcqPCcsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ2VudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3MudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJz58W15cXHdcXHMsPF0nLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjb2JqZWN0LXR5cGVzJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUuZ2VuZXJpYy52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnPCcsCiAgICAgICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgICAgICBbIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUuZ2VuZXJpYy52YWxhJywKICAgICAgICAgICAgICAgICAgICAgcmVnZXg6ICc+fFteXFx3XFxzLDxdJywKICAgICAgICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RvcmFnZS50eXBlLmdlbmVyaWMudmFsYScgfSBdLAogICAgICAgICAgICAgICAgY29tbWVudDogJ1RoaXMgaXMganVzdCB0byBzdXBwb3J0IDw+XCdzIHdpdGggbm8gYWN0dWFsIHR5cGUgcHJlZml4JyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnZW50aXR5Lm90aGVyLmluaGVyaXRlZC1jbGFzcy52YWxhJyB9IF0gfSwKICAgICAgICAgeyB0b2tlbjogCiAgICAgICAgICAgIFsgJ2VudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3MudmFsYScsCiAgICAgICAgICAgICAgJ2tleXdvcmQub3BlcmF0b3IuZGVyZWZlcmVuY2UudmFsYScsCiAgICAgICAgICAgICAgJ2VudGl0eS5vdGhlci5pbmhlcml0ZWQtY2xhc3MudmFsYScgXSwKICAgICAgICAgICByZWdleDogJ1xcYig/OihbYS16XVxcdyopKFxcLikpKihbQS1aXStcXHcqKScgfSBdLAogICAgICAnI3BhcmFtZXRlcnMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UubW9kaWZpZXIudmFsYScsIHJlZ2V4OiAnZmluYWwnIH0sCiAgICAgICAgIHsgaW5jbHVkZTogJyNwcmltaXRpdmUtYXJyYXlzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjcHJpbWl0aXZlLXR5cGVzJyB9LAogICAgICAgICB7IGluY2x1ZGU6ICcjb2JqZWN0LXR5cGVzJyB9LAogICAgICAgICB7IHRva2VuOiAndmFyaWFibGUucGFyYW1ldGVyLnZhbGEnLCByZWdleDogJ1xcdysnIH0gXSwKICAgICAgJyNwYXJlbnMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3RleHQnLAogICAgICAgICAgIHJlZ2V4OiAnXFwoJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAndGV4dCcsIHJlZ2V4OiAnXFwpJywgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IGluY2x1ZGU6ICcjY29kZScgfSBdIH0gXSwKICAgICAgJyNwcmltaXRpdmUtYXJyYXlzJzogCiAgICAgICBbIHsgdG9rZW46ICdzdG9yYWdlLnR5cGUucHJpbWl0aXZlLmFycmF5LnZhbGEnLAogICAgICAgICAgIHJlZ2V4OiAnXFxiKD86Ym9vbHxieXRlfHNieXRlfGNoYXJ8ZGVjaW1hbHxkb3VibGV8ZmxvYXR8aW50fHVpbnR8bG9uZ3x1bG9uZ3xvYmplY3R8c2hvcnR8dXNob3J0fHN0cmluZ3x2b2lkfGludDh8aW50MTZ8aW50MzJ8aW50NjR8dWludDh8dWludDE2fHVpbnQzMnx1aW50NjQpKD86XFxbXFxdKSpcXGInIH0gXSwKICAgICAgJyNwcmltaXRpdmUtdHlwZXMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UudHlwZS5wcmltaXRpdmUudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzp2YXJ8Ym9vbHxieXRlfHNieXRlfGNoYXJ8ZGVjaW1hbHxkb3VibGV8ZmxvYXR8aW50fHVpbnR8bG9uZ3x1bG9uZ3xvYmplY3R8c2hvcnR8dXNob3J0fHN0cmluZ3x2b2lkfHNpZ25hbHxpbnQ4fGludDE2fGludDMyfGludDY0fHVpbnQ4fHVpbnQxNnx1aW50MzJ8dWludDY0KVxcYicsCiAgICAgICAgICAgY29tbWVudDogJ3ZhciBpcyBub3QgcmVhbGx5IGEgcHJpbWl0aXZlLCBidXQgYWN0cyBsaWtlIG9uZSBpbiBtb3N0IGNhc2VzJyB9IF0sCiAgICAgICcjc3RvcmFnZS1tb2RpZmllcnMnOiAKICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UubW9kaWZpZXIudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcXGIoPzpwdWJsaWN8cHJpdmF0ZXxwcm90ZWN0ZWR8aW50ZXJuYWx8c3RhdGljfGZpbmFsfHNlYWxlZHx2aXJ0dWFsfG92ZXJyaWRlfGFic3RyYWN0fHJlYWRvbmx5fHZvbGF0aWxlfGR5bmFtaWN8YXN5bmN8dW5zYWZlfG91dHxyZWZ8d2Vha3xvd25lZHx1bm93bmVkfGNvbnN0KVxcYicsCiAgICAgICAgICAgY29tbWVudDogJ05vdCBzdXJlIGFib3V0IHVuc2FmZSBhbmQgcmVhZG9ubHknIH0gXSwKICAgICAgJyNzdHJpbmdzJzogCiAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi52YWxhJywKICAgICAgICAgICByZWdleDogJ0AiJywKICAgICAgICAgICBwdXNoOiAKICAgICAgICAgICAgWyB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuZW5kLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICciJywKICAgICAgICAgICAgICAgIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyB0b2tlbjogJ2NvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJ1xcXFwufCVbXFx3XFwuXFwtXSt8XFwkKD86XFx3K3xcXChbXFx3XFxzXFwrXFwtXFwqXFwvXStcXCkpJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC5pbnRlcnBvbGF0ZWQudmFsYScgfSBdIH0sCiAgICAgICAgIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5iZWdpbi52YWxhJywKICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJyInLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS52YWxhJywgcmVnZXg6ICdcXFxcLicgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnJVtcXHdcXC5cXC1dKycgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQuZG91YmxlLnZhbGEnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4udmFsYScsCiAgICAgICAgICAgcmVnZXg6ICdcJycsCiAgICAgICAgICAgcHVzaDogCiAgICAgICAgICAgIFsgeyB0b2tlbjogJ3B1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmVuZC52YWxhJywKICAgICAgICAgICAgICAgIHJlZ2V4OiAnXCcnLAogICAgICAgICAgICAgICAgbmV4dDogJ3BvcCcgfSwKICAgICAgICAgICAgICB7IHRva2VuOiAnY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZS52YWxhJywgcmVnZXg6ICdcXFxcLicgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ3N0cmluZy5xdW90ZWQuc2luZ2xlLnZhbGEnIH0gXSB9LAogICAgICAgICB7IHRva2VuOiAncHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmcuYmVnaW4udmFsYScsCiAgICAgICAgICAgcmVnZXg6ICciIiInLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZy5lbmQudmFsYScsCiAgICAgICAgICAgICAgICByZWdleDogJyIiIicsCiAgICAgICAgICAgICAgICBuZXh0OiAncG9wJyB9LAogICAgICAgICAgICAgIHsgdG9rZW46ICdjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlLnZhbGEnLAogICAgICAgICAgICAgICAgcmVnZXg6ICclW1xcd1xcLlxcLV0rJyB9LAogICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuOiAnc3RyaW5nLnF1b3RlZC50cmlwbGUudmFsYScgfSBdIH0gXSwKICAgICAgJyN0aHJvd3MnOiAKICAgICAgIFsgeyB0b2tlbjogJ3N0b3JhZ2UubW9kaWZpZXIudmFsYScsCiAgICAgICAgICAgcmVnZXg6ICd0aHJvd3MnLAogICAgICAgICAgIHB1c2g6IAogICAgICAgICAgICBbIHsgdG9rZW46ICdtZXRhLnRocm93YWJsZXMudmFsYScsIHJlZ2V4OiAnKD89e3w7KScsIG5leHQ6ICdwb3AnIH0sCiAgICAgICAgICAgICAgeyBpbmNsdWRlOiAnI29iamVjdC10eXBlcycgfSwKICAgICAgICAgICAgICB7IGRlZmF1bHRUb2tlbjogJ21ldGEudGhyb3dhYmxlcy52YWxhJyB9IF0gfSBdLAogICAgICAnI3ZhbHVlcyc6IAogICAgICAgWyB7IGluY2x1ZGU6ICcjc3RyaW5ncycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI29iamVjdC10eXBlcycgfSwKICAgICAgICAgeyBpbmNsdWRlOiAnI2NvbnN0YW50cy1hbmQtc3BlY2lhbC12YXJzJyB9IF0gfTsKICAgIAogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKVmFsYUhpZ2hsaWdodFJ1bGVzLm1ldGFEYXRhID0geyAKICAgIGNvbW1lbnQ6ICdCYXNlZCBoZWF2aWx5IG9uIHRoZSBKYXZhIGJ1bmRsZVwncyBsYW5ndWFnZSBzeW50YXguIFRPRE86XG4qIENsb3N1cmVzXG4qIERlbGVnYXRlc1xuKiBQcm9wZXJ0aWVzOiBCZXR0ZXIgc3VwcG9ydCBmb3IgcHJvcGVydGllcy5cbiogQW5ub3RhdGlvbnNcbiogRXJyb3IgZG9tYWluc1xuKiBOYW1lZCBhcmd1bWVudHNcbiogQXJyYXkgc2xpY2luZywgbmVnYXRpdmUgaW5kZXhlcywgbXVsdGlkaW1lbnNpb25hbFxuKiBjb25zdHJ1Y3QgYmxvY2tzXG4qIGxvY2sgYmxvY2tzP1xuKiByZWdleCBsaXRlcmFsc1xuKiBEb2NCbG9jayBzeW50YXggaGlnaGxpZ2h0aW5nLiAoQ3VycmVudGx5IGltcG9ydGluZyBqYXZhZG9jKVxuKiBGb2xkaW5nIHJ1bGUgZm9yIGNvbW1lbnRzLlxuJywKICAgICAgZmlsZVR5cGVzOiBbICd2YWxhJyBdLAogICAgICBmb2xkaW5nU3RhcnRNYXJrZXI6ICcoXFx7XFxzKigvLy4qKT8kfF5cXHMqLy8gXFx7XFx7XFx7KScsCiAgICAgIGZvbGRpbmdTdG9wTWFya2VyOiAnXlxccyooXFx9fC8vIFxcfVxcfVxcfSQpJywKICAgICAgbmFtZTogJ1ZhbGEnLAogICAgICBzY29wZU5hbWU6ICdzb3VyY2UudmFsYScgfTsKCgpvb3AuaW5oZXJpdHMoVmFsYUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5WYWxhSGlnaGxpZ2h0UnVsZXMgPSBWYWxhSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IGZ1bmN0aW9uKCkge307CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihsaW5lLCBpbnB1dCkgewogICAgICAgIGlmICghIC9eXHMrJC8udGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gL15ccypcfS8udGVzdChpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKlx9KS8pOwoKICAgICAgICBpZiAoIW1hdGNoKSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGNvbHVtbiA9IG1hdGNoWzFdLmxlbmd0aDsKICAgICAgICB2YXIgb3BlbkJyYWNlUG9zID0gZG9jLmZpbmRNYXRjaGluZ0JyYWNrZXQoe3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn0pOwoKICAgICAgICBpZiAoIW9wZW5CcmFjZVBvcyB8fCBvcGVuQnJhY2VQb3Mucm93ID09IHJvdykgcmV0dXJuIDA7CgogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQoZG9jLmdldExpbmUob3BlbkJyYWNlUG9zLnJvdykpOwogICAgICAgIGRvYy5yZXBsYWNlKG5ldyBSYW5nZShyb3csIDAsIHJvdywgY29sdW1uLTEpLCBpbmRlbnQpOwogICAgfTsKCiAgICB0aGlzLiRnZXRJbmRlbnQgPSBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgcmV0dXJuIGxpbmUubWF0Y2goL15ccyovKVswXTsKICAgIH07Cgp9KS5jYWxsKE1hdGNoaW5nQnJhY2VPdXRkZW50LnByb3RvdHlwZSk7CgpleHBvcnRzLk1hdGNoaW5nQnJhY2VPdXRkZW50ID0gTWF0Y2hpbmdCcmFjZU91dGRlbnQ7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS92YWxhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL3Rva2VuaXplciIsImFjZS9tb2RlL3ZhbGFfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVG9rZW5pemVyID0gcmVxdWlyZSgiLi4vdG9rZW5pemVyIikuVG9rZW5pemVyOwp2YXIgVmFsYUhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi92YWxhX2hpZ2hsaWdodF9ydWxlcyIpLlZhbGFIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50OwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBWYWxhSGlnaGxpZ2h0UnVsZXM7CiAgICAKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3R5bGVCZWhhdmlvdXIoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IENTdHlsZUZvbGRNb2RlKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3ZhbGEiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS92YWxhIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-vbscript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS92YnNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBWQlNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJrZXl3b3JkLmNvbnRyb2wuYXNwIjogICJJZnxUaGVufEVsc2V8RWxzZUlmfEVuZHxXaGlsZXxXZW5kfEZvcnxUb3xFYWNofENhc2V8U2VsZWN0fFJldHVybiIKICAgICAgICAgICAgKyAifENvbnRpbnVlfERvfFVudGlsfExvb3B8TmV4dHxXaXRofEV4aXR8RnVuY3Rpb258UHJvcGVydHl8VHlwZXxFbnVtfFN1YnxJSWYiLAogICAgICAgICJzdG9yYWdlLnR5cGUuYXNwIjogIkRpbXxDYWxsfENsYXNzfENvbnN0fERpbXxSZWRpbXxTZXR8TGV0fEdldHxOZXd8UmFuZG9taXplfE9wdGlvbnxFeHBsaWNpdCIsCiAgICAgICAgInN0b3JhZ2UubW9kaWZpZXIuYXNwIjogIlByaXZhdGV8UHVibGljfERlZmF1bHQiLAogICAgICAgICJrZXl3b3JkLm9wZXJhdG9yLmFzcCI6ICJNb2R8QW5kfE5vdHxPcnxYb3J8YXMiLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZS5hc3AiOiAiRW1wdHl8RmFsc2V8Tm90aGluZ3xOdWxsfFRydWUiLAogICAgICAgICJzdXBwb3J0LmNsYXNzLmFzcCI6ICJBcHBsaWNhdGlvbnxPYmplY3RDb250ZXh0fFJlcXVlc3R8UmVzcG9uc2V8U2VydmVyfFNlc3Npb24iLAogICAgICAgICJzdXBwb3J0LmNsYXNzLmNvbGxlY3Rpb24uYXNwIjogIkNvbnRlbnRzfFN0YXRpY09iamVjdHN8Q2xpZW50Q2VydGlmaWNhdGV8Q29va2llc3xGb3JtfFF1ZXJ5U3RyaW5nfFNlcnZlclZhcmlhYmxlcyIsCiAgICAgICAgInN1cHBvcnQuY29uc3RhbnQuYXNwIjogIlRvdGFsQnl0ZXN8QnVmZmVyfENhY2hlQ29udHJvbHxDaGFyc2V0fENvbnRlbnRUeXBlfEV4cGlyZXN8RXhwaXJlc0Fic29sdXRlIgogICAgICAgICAgICArICJ8SXNDbGllbnRDb25uZWN0ZWR8UElDU3xTdGF0dXN8U2NyaXB0VGltZW91dHxDb2RlUGFnZXxMQ0lEfFNlc3Npb25JRHxUaW1lb3V0IiwKICAgICAgICAic3VwcG9ydC5mdW5jdGlvbi5hc3AiOiAiTG9ja3xVbmxvY2t8U2V0QWJvcnR8U2V0Q29tcGxldGV8QmluYXJ5UmVhZHxBZGRIZWFkZXJ8QXBwZW5kVG9Mb2ciCiAgICAgICAgICAgICsgInxCaW5hcnlXcml0ZXxDbGVhcnxGbHVzaHxSZWRpcmVjdHxXcml0ZXxDcmVhdGVPYmplY3R8SFRNTEVuY29kZXxNYXBQYXRofFVSTEVuY29kZXxBYmFuZG9ufENvbnZlcnR8UmVnZXgiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uLmV2ZW50LmFzcCI6ICJBcHBsaWNhdGlvbl9PbkVuZHxBcHBsaWNhdGlvbl9PblN0YXJ0IgogICAgICAgICAgICArICJ8T25UcmFuc2FjdGlvbkFib3J0fE9uVHJhbnNhY3Rpb25Db21taXR8U2Vzc2lvbl9PbkVuZHxTZXNzaW9uX09uU3RhcnQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uLnZiLmFzcCI6ICJBcnJheXxBZGR8QXNjfEF0bnxDQm9vbHxDQnl0ZXxDQ3VyfENEYXRlfENEYmx8Q2hyfENJbnR8Q0xuZyIKICAgICAgICAgICAgKyAifENvbnZlcnNpb25zfENvc3xDcmVhdGVPYmplY3R8Q1NuZ3xDU3RyfERhdGV8RGF0ZUFkZHxEYXRlRGlmZnxEYXRlUGFydHxEYXRlU2VyaWFsIgogICAgICAgICAgICArICJ8RGF0ZVZhbHVlfERheXxEZXJpdmVkfE1hdGh8RXNjYXBlfEV2YWx8RXhpc3RzfEV4cHxGaWx0ZXJ8Rm9ybWF0Q3VycmVuY3kiCiAgICAgICAgICAgICsgInxGb3JtYXREYXRlVGltZXxGb3JtYXROdW1iZXJ8Rm9ybWF0UGVyY2VudHxHZXRMb2NhbGV8R2V0T2JqZWN0fEdldFJlZnxIZXgiCiAgICAgICAgICAgICsgInxIb3VyfElucHV0Qm94fEluU3RyfEluU3RyUmV2fEludHxGaXh8SXNBcnJheXxJc0RhdGV8SXNFbXB0eXxJc051bGx8SXNOdW1lcmljIgogICAgICAgICAgICArICJ8SXNPYmplY3R8SXRlbXxJdGVtc3xKb2lufEtleXN8TEJvdW5kfExDYXNlfExlZnR8TGVufExvYWRQaWN0dXJlfExvZ3xMVHJpbXxSVHJpbSIKICAgICAgICAgICAgKyAifFRyaW18TWF0aHN8TWlkfE1pbnV0ZXxNb250aHxNb250aE5hbWV8TXNnQm94fE5vd3xPY3R8UmVtb3ZlfFJlbW92ZUFsbHxSZXBsYWNlIgogICAgICAgICAgICArICJ8UkdCfFJpZ2h0fFJuZHxSb3VuZHxTY3JpcHRFbmdpbmV8U2NyaXB0RW5naW5lQnVpbGRWZXJzaW9ufFNjcmlwdEVuZ2luZU1ham9yVmVyc2lvbiIKICAgICAgICAgICAgKyAifFNjcmlwdEVuZ2luZU1pbm9yVmVyc2lvbnxTZWNvbmR8U2V0TG9jYWxlfFNnbnxTaW58U3BhY2V8U3BsaXR8U3FyfFN0ckNvbXB8U3RyaW5nfFN0clJldmVyc2UiCiAgICAgICAgICAgICsgInxUYW58VGltZXxUaW1lcnxUaW1lU2VyaWFsfFRpbWVWYWx1ZXxUeXBlTmFtZXxVQm91bmR8VUNhc2V8VW5lc2NhcGV8VmFyVHlwZXxXZWVrZGF5fFdlZWtkYXlOYW1lfFllYXIiLAogICAgICAgICJzdXBwb3J0LnR5cGUudmIuYXNwIjogInZidHJ1ZXx2YmZhbHNlfHZiY3J8dmJjcmxmfHZiZm9ybWZlZWR8dmJsZnx2Ym5ld2xpbmV8dmJudWxsY2hhcnx2Ym51bGxzdHJpbmd8IgogICAgICAgICAgICArICJpbnQzMnx2YnRhYnx2YnZlcnRpY2FsdGFifHZiYmluYXJ5Y29tcGFyZXx2YnRleHRjb21wYXJldmJzdW5kYXl8dmJtb25kYXl8dmJ0dWVzZGF5fHZid2VkbmVzZGF5IgogICAgICAgICAgICArICJ8dmJ0aHVyc2RheXx2YmZyaWRheXx2YnNhdHVyZGF5fHZidXNlc3lzdGVtZGF5b2Z3ZWVrfHZiZmlyc3RqYW4xfHZiZmlyc3Rmb3VyZGF5c3x2YmZpcnN0ZnVsbHdlZWsiCiAgICAgICAgICAgICsgInx2YmdlbmVyYWxkYXRlfHZibG9uZ2RhdGV8dmJzaG9ydGRhdGV8dmJsb25ndGltZXx2YnNob3J0dGltZXx2Ym9iamVjdGVycm9yfHZiRW1wdHl8dmJOdWxsfHZiSW50ZWdlciIKICAgICAgICAgICAgKyAifHZiTG9uZ3x2YlNpbmdsZXx2YkRvdWJsZXx2YkN1cnJlbmN5fHZiRGF0ZXx2YlN0cmluZ3x2Yk9iamVjdHx2YkVycm9yfHZiQm9vbGVhbnx2YlZhcmlhbnQiCiAgICAgICAgICAgICsgInx2YkRhdGFPYmplY3R8dmJEZWNpbWFsfHZiQnl0ZXx2YkFycmF5IgogICAgfSwgImlkZW50aWZpZXIiLCB0cnVlKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICJzdGFydCI6IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAibWV0YS5lbmRpbmctc3BhY2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAiJCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFtudWxsXSwKICAgICAgICAgICAgcmVnZXg6ICJeKD89XFx0KSIsCiAgICAgICAgICAgIG5leHQ6ICJzdGF0ZV8zIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogW251bGxdLAogICAgICAgICAgICByZWdleDogIl4oPz0gKSIsCiAgICAgICAgICAgIG5leHQ6ICJzdGF0ZV80IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZS5mdW5jdGlvbi5hc3AiLAogICAgICAgICAgICAgICAgInRleHQiLAogICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLmZ1bmN0aW9uLmFzcCIsCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmFzcCIsCiAgICAgICAgICAgICAgICAidmFyaWFibGUucGFyYW1ldGVyLmZ1bmN0aW9uLmFzcCIsCiAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5wYXJhbWV0ZXJzLmFzcCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6ICJeKFxccyopKEZ1bmN0aW9ufFN1YikoXFxzKykoW2EtekEtWl9dXFx3KikoXFxzKikoXFwoKShbXildKikoXFwpKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLmNvbW1lbnQuYXNwIiwKICAgICAgICAgICAgcmVnZXg6ICInfFJFTSg/PVxcc3wkKSIsCiAgICAgICAgICAgIG5leHQ6ICJjb21tZW50IiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS50eXBlLmFzcCIsCiAgICAgICAgICAgIHJlZ2V4OiAiT24gRXJyb3IgUmVzdW1lIE5leHR8T24gRXJyb3IgR29UbyIsCiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmRlZmluaXRpb24uc3RyaW5nLmJlZ2luLmFzcCIsCiAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgIG5leHQ6ICJzdHJpbmciCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAicHVuY3R1YXRpb24uZGVmaW5pdGlvbi52YXJpYWJsZS5hc3AiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAiKFxcJClbYS16QS1aX3g3Zi14ZmZdW2EtekEtWjAtOV94N2YteGZmXSo/XFxiXFxzKiIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljLmFzcCIsCiAgICAgICAgICAgIHJlZ2V4OiAiLT9cXGIoPzooPzowKD86eHxYKVswLTlhLWZBLUZdKil8KD86KD86WzAtOV0rXFwuP1swLTldKil8KD86XFwuWzAtOV0rKSkoPzooPzplfEUpKD86XFwrfC0pP1swLTldKyk/KSg/Okx8bHxVTHx1bHx1fFV8RnxmKT9cXGIiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHJlZ2V4OiAiXFx3KyIsCiAgICAgICAgICAgIHRva2VuOiBrZXl3b3JkTWFwcGVyCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbImVudGl0eS5uYW1lLmZ1bmN0aW9uLmFzcCJdLAogICAgICAgICAgICByZWdleDogIig/OihcXGJbYS16QS1aX3g3Zi14ZmZdW2EtekEtWjAtOV94N2YteGZmXSo/XFxiKSg/PVxcKFxcKT8pKSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsia2V5d29yZC5vcGVyYXRvci5hc3AiXSwKICAgICAgICAgICAgcmVnZXg6ICJcXC18XFwrfFxcKlxcL3xcXD58XFw8fFxcPXxcXCYiCiAgICAgICAgfQogICAgXSwKICAgICJzdGF0ZV8zIjogWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICJtZXRhLm9kZC10YWIudGFicyIsCiAgICAgICAgICAgICAgICAibWV0YS5ldmVuLXRhYi50YWJzIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogIihcXHQpKFxcdCk/IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogIm1ldGEubGVhZGluZy1zcGFjZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD89W15cXHRdKSIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJtZXRhLmxlYWRpbmctc3BhY2UiLAogICAgICAgICAgICByZWdleDogIi4iLAogICAgICAgICAgICBuZXh0OiAic3RhdGVfMyIKICAgICAgICB9CiAgICBdLAogICAgInN0YXRlXzQiOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWyJtZXRhLm9kZC10YWIuc3BhY2VzIiwgIm1ldGEuZXZlbi10YWIuc3BhY2VzIl0sCiAgICAgICAgICAgIHJlZ2V4OiAiKCAgKSggICk/IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogIm1ldGEubGVhZGluZy1zcGFjZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD89W14gXSkiLAogICAgICAgICAgICBuZXh0OiAic3RhcnQiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogIm1ldGEubGVhZGluZy1zcGFjZSIKICAgICAgICB9CiAgICBdLAogICAgImNvbW1lbnQiOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQubGluZS5hcG9zdHJvcGhlLmFzcCIsCiAgICAgICAgICAgIHJlZ2V4OiAiJHwoPz0oPzolPikpIiwKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJjb21tZW50LmxpbmUuYXBvc3Ryb3BoZS5hc3AiCiAgICAgICAgfQogICAgXSwKICAgICJzdHJpbmciOiBbCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50LmNoYXJhY3Rlci5lc2NhcGUuYXBvc3Ryb3BoZS5hc3AiLAogICAgICAgICAgICByZWdleDogJyIiJwogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5xdW90ZWQuZG91YmxlLmFzcCIsCiAgICAgICAgICAgIHJlZ2V4OiAnIicsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnF1b3RlZC5kb3VibGUuYXNwIgogICAgICAgIH0KICAgIF0KfTsKCn07Cgpvb3AuaW5oZXJpdHMoVkJTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuVkJTY3JpcHRIaWdobGlnaHRSdWxlcyA9IFZCU2NyaXB0SGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS92YnNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3Zic2NyaXB0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFZCU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Zic2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLlZCU2NyaXB0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFZCU2NyaXB0SGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgICAgCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSBbIiciLCAiUkVNIl07CiAgICAKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3Zic2NyaXB0IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvdmJzY3JpcHQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-velocity.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS92ZWxvY2l0eV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIikuSHRtbEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFZlbG9jaXR5SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIEh0bWxIaWdobGlnaHRSdWxlcy5jYWxsKHRoaXMpOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgndHJ1ZXxmYWxzZXxudWxsJykuc3BsaXQoJ3wnKQogICAgKTsKCiAgICB2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAoIl9EYXRlVG9vbHxfRGlzcGxheVRvb2x8X0VzY2FwZVRvb2x8X0ZpZWxkVG9vbHxfTWF0aFRvb2x8X051bWJlclRvb2x8X1NlcmlhbGl6ZXJUb29sfF9Tb3J0VG9vbHxfU3RyaW5nVG9vbHxfWFBhdGhUb29sIikuc3BsaXQoJ3wnKQogICAgKTsKCiAgICB2YXIgYnVpbHRpblZhcmlhYmxlcyA9IGxhbmcuYXJyYXlUb01hcCgKICAgICAgICAoJyRjb250ZW50Um9vdHwkZm9yZWFjaCcpLnNwbGl0KCd8JykKICAgICk7CgogICAgdmFyIGtleXdvcmRzID0gbGFuZy5hcnJheVRvTWFwKAogICAgICAgICgiI3NldHwjbWFjcm98I2luY2x1ZGV8I3BhcnNlfCIgKwogICAgICAgICIjaWZ8I2Vsc2VpZnwjZWxzZXwjZm9yZWFjaHwiICsKICAgICAgICAiI2JyZWFrfCNlbmR8I3N0b3AiCiAgICAgICAgKS5zcGxpdCgnfCcpCiAgICApOwoKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnB1c2goCiAgICAgICAgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiIyMuKiQiCiAgICAgICAgfSx7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQuYmxvY2siLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAiI1xcKiIsCiAgICAgICAgICAgIG5leHQgOiAidm1fY29tbWVudCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICByZWdleCA6ICJbL10oPzooPzpcXFsoPzpcXFxcXXxbXlxcXV0pK1xcXSl8KD86XFxcXC98W15cXF0vXSkpKlsvXVxcdypcXHMqKD89WykuLDtdfCQpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgcmVnZXggOiAnWyJdKD86KD86XFxcXC4pfCg/OlteIlxcXFxdKSkqP1siXScKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4CiAgICAgICAgICAgIHJlZ2V4IDogIjBbeFhdWzAtOWEtZkEtRl0rXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGZsb2F0CiAgICAgICAgICAgIHJlZ2V4IDogIlsrLV0/XFxkKyg/Oig/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPyk/XFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OnRydWV8ZmFsc2UpXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoYnVpbHRpbkNvbnN0YW50cy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdGFudC5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChidWlsdGluVmFyaWFibGVzLmhhc093blByb3BlcnR5KHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZhcmlhYmxlLmxhbmd1YWdlIjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5GdW5jdGlvbnMuaGFzT3duUHJvcGVydHkodmFsdWUpIHx8IGJ1aWx0aW5GdW5jdGlvbnMuaGFzT3duUHJvcGVydHkodmFsdWUuc3Vic3RyaW5nKDEpKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gInN1cHBvcnQuZnVuY3Rpb24iOwogICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gImRlYnVnZ2VyIikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImludmFsaWQuZGVwcmVjYXRlZCI7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWUubWF0Y2goL14oXCRbYS16QS1aX11bYS16QS1aMC05X10qKSQvKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZSI7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpZGVudGlmaWVyIjsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWiQjXVthLXpBLVowLTlfXSpcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiIXwmfFxcKnxcXC18XFwrfD18IT18PD18Pj18PHw+fCYmfFxcfFxcfCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0KICAgICk7CgogICAgdGhpcy4kcnVsZXNbInZtX2NvbW1lbnQiXSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjbG9zaW5nIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXggOiAiXFwqI3wtLT4iLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAiY29tbWVudCIKICAgICAgICB9CiAgICBdOwoKICAgIHRoaXMuJHJ1bGVzWyJ2bV9zdGFydCJdID0gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJ2YXJpYWJsZSIsCiAgICAgICAgICAgIHJlZ2V4OiAifSIsCiAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgcmVnZXggOiAiWy9dKD86KD86XFxbKD86XFxcXF18W15cXF1dKStcXF0pfCg/OlxcXFwvfFteXFxdL10pKSpbL11cXHcqXFxzKig/PVspLiw7XXwkKSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICByZWdleCA6ICJbJ10oPzooPzpcXFxcLil8KD86W14nXFxcXF0pKSo/WyddIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICByZWdleCA6ICIwW3hYXVswLTlhLWZBLUZdK1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICByZWdleCA6ICJbKy1dP1xcZCsoPzooPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pP1xcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmJvb2xlYW4iLAogICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgICAgIGlmIChrZXl3b3Jkcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5Db25zdGFudHMuaGFzT3duUHJvcGVydHkodmFsdWUpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3RhbnQubGFuZ3VhZ2UiOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoYnVpbHRpblZhcmlhYmxlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS5sYW5ndWFnZSI7CiAgICAgICAgICAgICAgICBlbHNlIGlmIChidWlsdGluRnVuY3Rpb25zLmhhc093blByb3BlcnR5KHZhbHVlKSB8fCBidWlsdGluRnVuY3Rpb25zLmhhc093blByb3BlcnR5KHZhbHVlLnN1YnN0cmluZygxKSkpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJzdXBwb3J0LmZ1bmN0aW9uIjsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJkZWJ1Z2dlciIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnZhbGlkLmRlcHJlY2F0ZWQiOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlLm1hdGNoKC9eKFwkW2EtekEtWl8kXVthLXpBLVowLTlfXSopJC8pKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gImlkZW50aWZpZXIiOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiIXwmfFxcKnxcXC18XFwrfD18IT18PD18Pj18PHw+fCYmfFxcfFxcfCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltbKHtdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcXSl9XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgIH0KICAgIF07CgogICAgZm9yICh2YXIgaSBpbiB0aGlzLiRydWxlcykgewogICAgICAgIHRoaXMuJHJ1bGVzW2ldLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXCR7IiwKICAgICAgICAgICAgcHVzaDogInZtX3N0YXJ0IgogICAgICAgIH0pOwogICAgfQoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhWZWxvY2l0eUhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5WZWxvY2l0eUhpZ2hsaWdodFJ1bGVzID0gVmVsb2NpdHlIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvdmVsb2NpdHkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbigpIHt9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciByYW5nZSA9IHRoaXMuaW5kZW50YXRpb25CbG9jayhzZXNzaW9uLCByb3cpOwogICAgICAgIGlmIChyYW5nZSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwoKICAgICAgICB2YXIgcmUgPSAvXFMvOwogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0TGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CiAgICAgICAgaWYgKHN0YXJ0TGV2ZWwgPT0gLTEgfHwgbGluZVtzdGFydExldmVsXSAhPSAiIyMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyMiKQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKTsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgbmV4dCA9IHNlc3Npb24uZ2V0TGluZShyb3cgKyAxKTsKICAgICAgICB2YXIgcHJldiA9IHNlc3Npb24uZ2V0TGluZShyb3cgLSAxKTsKICAgICAgICB2YXIgcHJldkluZGVudCA9IHByZXYuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0SW5kZW50ID0gbmV4dC5zZWFyY2goL1xTLyk7CgogICAgICAgIGlmIChpbmRlbnQgPT0gLTEpIHsKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9IHByZXZJbmRlbnQhPSAtMSAmJiBwcmV2SW5kZW50IDwgbmV4dEluZGVudCA/ICJzdGFydCIgOiAiIjsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAocHJldkluZGVudCA9PSAtMSkgewogICAgICAgICAgICBpZiAoaW5kZW50ID09IG5leHRJbmRlbnQgJiYgbGluZVtpbmRlbnRdID09ICIjIyIgJiYgbmV4dFtpbmRlbnRdID09ICIjIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMjIiAmJiBwcmV2W2luZGVudF0gPT0gIiMjIikgewogICAgICAgICAgICBpZiAoc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDIpLnNlYXJjaCgvXFMvKSA9PSAtMSkgewogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyArIDFdID0gIiI7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChwcmV2SW5kZW50IT0gLTEgJiYgcHJldkluZGVudCA8IGluZGVudCkKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gIiI7CgogICAgICAgIGlmIChpbmRlbnQgPCBuZXh0SW5kZW50KQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiAiIjsKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvdmVsb2NpdHkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWwiLCJhY2UvbW9kZS92ZWxvY2l0eV9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL3ZlbG9jaXR5Il0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbE1vZGUgPSByZXF1aXJlKCIuL2h0bWwiKS5Nb2RlOwp2YXIgVmVsb2NpdHlIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdmVsb2NpdHlfaGlnaGxpZ2h0X3J1bGVzIikuVmVsb2NpdHlIaWdobGlnaHRSdWxlczsKdmFyIEZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL3ZlbG9jaXR5IikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgSHRtbE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBWZWxvY2l0eUhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIEh0bWxNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIiMqIiwgZW5kOiAiKiMifTsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3ZlbG9jaXR5IjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUvdmVsb2NpdHkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-verilog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS92ZXJpbG9nX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFZlcmlsb2dIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewp2YXIga2V5d29yZHMgPSAiYWx3YXlzfGFuZHxhc3NpZ258YXV0b21hdGljfGJlZ2lufGJ1ZnxidWZpZjB8YnVmaWYxfGNhc2V8Y2FzZXh8Y2FzZXp8Y2VsbHxjbW9zfGNvbmZpZ3wiICsKICAgICJkZWFzc2lnbnxkZWZhdWx0fGRlZnBhcmFtfGRlc2lnbnxkaXNhYmxlfGVkZ2V8ZWxzZXxlbmR8ZW5kY2FzZXxlbmRjb25maWd8ZW5kZnVuY3Rpb258ZW5kZ2VuZXJhdGV8ZW5kbW9kdWxlfCIgKwogICAgImVuZHByaW1pdGl2ZXxlbmRzcGVjaWZ5fGVuZHRhYmxlfGVuZHRhc2t8ZXZlbnR8Zm9yfGZvcmNlfGZvcmV2ZXJ8Zm9ya3xmdW5jdGlvbnxnZW5lcmF0ZXxnZW52YXJ8aGlnaHowfCIgKwogICAgImhpZ2h6MXxpZnxpZm5vbmV8aW5jZGlyfGluY2x1ZGV8aW5pdGlhbHxpbm91dHxpbnB1dHxpbnN0YW5jZXxpbnRlZ2VyfGpvaW58bGFyZ2V8bGlibGlzdHxsaWJyYXJ5fGxvY2FscGFyYW18IiArCiAgICAibWFjcm9tb2R1bGV8bWVkaXVtfG1vZHVsZXxuYW5kfG5lZ2VkZ2V8bm1vc3xub3J8bm9zaG93Y2FuY2VsbGVkfG5vdHxub3RpZjB8bm90aWYxfG9yfG91dHB1dHxwYXJhbWV0ZXJ8cG1vc3wiICsKICAgICJwb3NlZGdlfHByaW1pdGl2ZXxwdWxsMHxwdWxsMXxwdWxsZG93bnxwdWxsdXB8cHVsc2VzdHlsZV9vbmV2ZW50fHB1bHNlc3R5bGVfb25kZXRlY3R8cmNtb3N8cmVhbHxyZWFsdGltZXwiICsKICAgICJyZWd8cmVsZWFzZXxyZXBlYXR8cm5tb3N8cnBtb3N8cnRyYW58cnRyYW5pZjB8cnRyYW5pZjF8c2NhbGFyZWR8c2hvd2NhbmNlbGxlZHxzaWduZWR8c21hbGx8c3BlY2lmeXxzcGVjcGFyYW18IiArCiAgICAic3Ryb25nMHxzdHJvbmcxfHN1cHBseTB8c3VwcGx5MXx0YWJsZXx0YXNrfHRpbWV8dHJhbnx0cmFuaWYwfHRyYW5pZjF8dHJpfHRyaTB8dHJpMXx0cmlhbmR8dHJpb3J8dHJpcmVnfCIgKwogICAgInVuc2lnbmVkfHVzZXx2ZWN0b3JlZHx3YWl0fHdhbmR8d2VhazB8d2VhazF8d2hpbGV8d2lyZXx3b3J8eG5vcnx4b3IiICsKICAgICJiZWdpbnxidWZpZjB8YnVmaWYxfGNhc2V8Y2FzZXh8Y2FzZXp8Y29uZmlnfGVsc2V8ZW5kfGVuZGNhc2V8ZW5kY29uZmlnfGVuZGZ1bmN0aW9ufCIgKwogICAgImVuZGdlbmVyYXRlfGVuZG1vZHVsZXxlbmRwcmltaXRpdmV8ZW5kc3BlY2lmeXxlbmR0YWJsZXxlbmR0YXNrfGZvcnxmb3JldmVyfGZ1bmN0aW9ufGdlbmVyYXRlfGlmfGlmbm9uZXwiICsKICAgICJtYWNyb21vZHVsZXxtb2R1bGV8cHJpbWl0aXZlfHJlcGVhdHxzcGVjaWZ5fHRhYmxlfHRhc2t8d2hpbGUiOwoKICAgIHZhciBidWlsdGluQ29uc3RhbnRzID0gKAogICAgICAgICJ0cnVlfGZhbHNlfG51bGwiCiAgICApOwoKICAgIHZhciBidWlsdGluRnVuY3Rpb25zID0gKAogICAgICAgICJjb3VudHxtaW58bWF4fGF2Z3xzdW18cmFua3xub3d8Y29hbGVzY2V8bWFpbiIKICAgICk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogYnVpbHRpbkZ1bmN0aW9ucywKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWx0aW5Db25zdGFudHMKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiLy8uKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50LnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiL1xcKiIsCiAgICAgICAgICAgIG5leHQgOiBbCiAgICAgICAgICAgICAgICB7IHRva2VuIDogImNvbW1lbnQuZW5kIiwgcmVnZXggOiAiXFwqLyIsIG5leHQ6ICJzdGFydCIgfSwKICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuIDogImNvbW1lbnQiIH0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIG5leHQgOiBbCiAgICAgICAgICAgICAgICB7IHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsIHJlZ2V4IDogL1xcKD86W250dmZhXFwiXXxbMC03XXsxLDN9fFx4W2EtZkEtRlxkXXsxLDJ9fCkvLCBjb25zdW1lTGluZUVuZCA6IHRydWUgfSwKICAgICAgICAgICAgICAgIHsgdG9rZW4gOiAic3RyaW5nLmVuZCIsIHJlZ2V4IDogJyJ8JCcsIG5leHQ6ICJzdGFydCIgfSwKICAgICAgICAgICAgICAgIHsgZGVmYXVsdFRva2VuIDogInN0cmluZyIgfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICByZWdleCA6ICInXlsnXSciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IGtleXdvcmRNYXBwZXIsCiAgICAgICAgICAgIHJlZ2V4IDogIlthLXpBLVpfJF1bYS16QS1aMC05XyRdKlxcYiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleCA6ICJcXCt8XFwtfFxcL3xcXC9cXC98JXw8QD58QD58PEB8JnxcXF58fnw8fD58PD18PT58PT18IT18PD58PSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltcXChdIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucnBhcmVuIiwKICAgICAgICAgICAgcmVnZXggOiAiW1xcKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9IF0KICAgIH07CiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07Cgpvb3AuaW5oZXJpdHMoVmVyaWxvZ0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5WZXJpbG9nSGlnaGxpZ2h0UnVsZXMgPSBWZXJpbG9nSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS92ZXJpbG9nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdmVyaWxvZ19oaWdobGlnaHRfcnVsZXMiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBWZXJpbG9nSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Zlcmlsb2dfaGlnaGxpZ2h0X3J1bGVzIikuVmVyaWxvZ0hpZ2hsaWdodFJ1bGVzOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBWZXJpbG9nSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIvLyI7CiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIi8qIiwgZW5kOiAiKi8ifTsKICAgIHRoaXMuJHF1b3RlcyA9IHsgJyInOiAnIicgfTsKCgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvdmVyaWxvZyI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS92ZXJpbG9nIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-vhdl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS92aGRsX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFZIRExIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKCiAgICAKICAgIHZhciBrZXl3b3JkcyA9ICJhY2Nlc3N8YWZ0ZXJ8YWlsYXN8YWxsfGFyY2hpdGVjdHVyZXxhc3NlcnR8YXR0cmlidXRlfCIrCiAgICAgICAgICAgICAgICAgICAiYmVnaW58YmxvY2t8YnVmZmVyfGJ1c3xjYXNlfGNvbXBvbmVudHxjb25maWd1cmF0aW9ufCIrCiAgICAgICAgICAgICAgICAgICAiZGlzY29ubmVjdHxkb3dudG98ZWxzZXxlbHNpZnxlbmR8ZW50aXR5fGZpbGV8Zm9yfGZ1bmN0aW9ufCIrCiAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGV8Z2VuZXJpY3xndWFyZGVkfGlmfGltcHVyZXxpbnxpbmVydGlhbHxpbm91dHxpc3wiKwogICAgICAgICAgICAgICAgICAgImxhYmVsfGxpbmthZ2V8bGl0ZXJhbHxsb29wfG1hcG5ld3xuZXh0fG9mfG9ufG9wZW58IisKICAgICAgICAgICAgICAgICAgICJvdGhlcnN8b3V0fHBvcnR8cHJvY2Vzc3xwdXJlfHJhbmdlfHJlY29yZHxyZWplY3R8IisKICAgICAgICAgICAgICAgICAgICJyZXBvcnR8cmV0dXJufHNlbGVjdHxzaGFyZWR8c3VidHlwZXx0aGVufHRvfHRyYW5zcG9ydHwiKwogICAgICAgICAgICAgICAgICAgInR5cGV8dW5hZmZlY3RlZHx1bml0ZWR8dW50aWx8d2FpdHx3aGVufHdoaWxlfHdpdGgiOwogICAgCiAgICB2YXIgc3RvcmFnZVR5cGUgPSAiYml0fGJpdF92ZWN0b3J8Ym9vbGVhbnxjaGFyYWN0ZXJ8aW50ZWdlcnxsaW5lfG5hdHVyYWx8IisKICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGl2ZXxyZWFsfHJlZ2lzdGVyfHNldmVyaXR5fHNpZ25hbHxzaWduZWR8IisKICAgICAgICAgICAgICAgICAgICAgICJzdGRfbG9naWN8c3RkX2xvZ2ljX3ZlY3RvcnxzdHJpbmd8fHRleHR8dGltZXx1bnNpZ25lZHwiKwogICAgICAgICAgICAgICAgICAgICAgInZhcmlhYmxlIjsKICAgIAogICAgdmFyIHN0b3JhZ2VNb2RpZmllcnMgPSAiYXJyYXl8Y29uc3RhbnQiOwogICAgCiAgICB2YXIga2V5d29yZE9wZXJhdG9ycyA9ICJhYnN8YW5kfG1vZHxuYW5kfG5vcnxub3R8cmVtfHJvbHxyb3J8c2xhfHNsbHxzcmEiKwogICAgICAgICAgICAgICAgICAgICAgICAgICAic3JsfHhub3J8eG9yIjsKICAgIAogICAgdmFyIGJ1aWx0aW5Db25zdGFudHMgPSAoCiAgICAgICAgInRydWV8ZmFsc2V8bnVsbCIKICAgICk7CgoKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAia2V5d29yZC5vcGVyYXRvciI6IGtleXdvcmRPcGVyYXRvcnMsCiAgICAgICAgImtleXdvcmQiOiBrZXl3b3JkcywKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOiBidWlsdGluQ29uc3RhbnRzLAogICAgICAgICJzdG9yYWdlLm1vZGlmaWVyIjogc3RvcmFnZU1vZGlmaWVycywKICAgICAgICAic3RvcmFnZS50eXBlIjogc3RvcmFnZVR5cGUKICAgIH0sICJpZGVudGlmaWVyIiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiLS0uKiQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gIiBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiAnIi4qPyInCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAgICAgICAgICAgLy8gJyBzdHJpbmcKICAgICAgICAgICAgcmVnZXggOiAiJy4qPyciCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgcmVnZXggOiAiWystXT9cXGQrKD86KD86XFwuXFxkKik/KD86W2VFXVsrLV0/XFxkKyk/KT9cXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkIiwgLy8gcHJlLWNvbXBpbGVyIGRpcmVjdGl2ZXMKICAgICAgICAgICAgcmVnZXggOiAiXFxzKig/OmxpYnJhcnl8cGFja2FnZXx1c2UpXFxiIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJbYS16QS1aXyRdW2EtekEtWjAtOV8kXSpcXGIiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiJnxcXCp8XFwrfFxcLXxcXC98PHw9fD58XFx8fD0+fFxcKlxcKnw6PXxcXC89fD49fDw9fDw+IiAKICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgIHJlZ2V4IDogIlxcJ3xcXDp8XFwsfFxcO3xcXC4iCiAgICAgICAgfSx7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIltbKF0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICByZWdleCA6ICJbXFxdKV0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9IF0KCiAgICAgICAKICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoVkhETEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5WSERMSGlnaGxpZ2h0UnVsZXMgPSBWSERMSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS92aGRsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdmhkbF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBWSERMSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3ZoZGxfaGlnaGxpZ2h0X3J1bGVzIikuVkhETEhpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBWSERMSGlnaGxpZ2h0UnVsZXM7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICItLSI7CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvdmhkbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS92aGRsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-visualforce.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIHN1cHBvcnRUeXBlID0gZXhwb3J0cy5zdXBwb3J0VHlwZSA9ICJhbGlnbi1jb250ZW50fGFsaWduLWl0ZW1zfGFsaWduLXNlbGZ8YWxsfGFuaW1hdGlvbnxhbmltYXRpb24tZGVsYXl8YW5pbWF0aW9uLWRpcmVjdGlvbnxhbmltYXRpb24tZHVyYXRpb258YW5pbWF0aW9uLWZpbGwtbW9kZXxhbmltYXRpb24taXRlcmF0aW9uLWNvdW50fGFuaW1hdGlvbi1uYW1lfGFuaW1hdGlvbi1wbGF5LXN0YXRlfGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb258YmFja2ZhY2UtdmlzaWJpbGl0eXxiYWNrZ3JvdW5kfGJhY2tncm91bmQtYXR0YWNobWVudHxiYWNrZ3JvdW5kLWJsZW5kLW1vZGV8YmFja2dyb3VuZC1jbGlwfGJhY2tncm91bmQtY29sb3J8YmFja2dyb3VuZC1pbWFnZXxiYWNrZ3JvdW5kLW9yaWdpbnxiYWNrZ3JvdW5kLXBvc2l0aW9ufGJhY2tncm91bmQtcmVwZWF0fGJhY2tncm91bmQtc2l6ZXxib3JkZXJ8Ym9yZGVyLWJvdHRvbXxib3JkZXItYm90dG9tLWNvbG9yfGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXN8Ym9yZGVyLWJvdHRvbS1zdHlsZXxib3JkZXItYm90dG9tLXdpZHRofGJvcmRlci1jb2xsYXBzZXxib3JkZXItY29sb3J8Ym9yZGVyLWltYWdlfGJvcmRlci1pbWFnZS1vdXRzZXR8Ym9yZGVyLWltYWdlLXJlcGVhdHxib3JkZXItaW1hZ2Utc2xpY2V8Ym9yZGVyLWltYWdlLXNvdXJjZXxib3JkZXItaW1hZ2Utd2lkdGh8Ym9yZGVyLWxlZnR8Ym9yZGVyLWxlZnQtY29sb3J8Ym9yZGVyLWxlZnQtc3R5bGV8Ym9yZGVyLWxlZnQtd2lkdGh8Ym9yZGVyLXJhZGl1c3xib3JkZXItcmlnaHR8Ym9yZGVyLXJpZ2h0LWNvbG9yfGJvcmRlci1yaWdodC1zdHlsZXxib3JkZXItcmlnaHQtd2lkdGh8Ym9yZGVyLXNwYWNpbmd8Ym9yZGVyLXN0eWxlfGJvcmRlci10b3B8Ym9yZGVyLXRvcC1jb2xvcnxib3JkZXItdG9wLWxlZnQtcmFkaXVzfGJvcmRlci10b3AtcmlnaHQtcmFkaXVzfGJvcmRlci10b3Atc3R5bGV8Ym9yZGVyLXRvcC13aWR0aHxib3JkZXItd2lkdGh8Ym90dG9tfGJveC1zaGFkb3d8Ym94LXNpemluZ3xjYXB0aW9uLXNpZGV8Y2xlYXJ8Y2xpcHxjb2xvcnxjb2x1bW4tY291bnR8Y29sdW1uLWZpbGx8Y29sdW1uLWdhcHxjb2x1bW4tcnVsZXxjb2x1bW4tcnVsZS1jb2xvcnxjb2x1bW4tcnVsZS1zdHlsZXxjb2x1bW4tcnVsZS13aWR0aHxjb2x1bW4tc3Bhbnxjb2x1bW4td2lkdGh8Y29sdW1uc3xjb250ZW50fGNvdW50ZXItaW5jcmVtZW50fGNvdW50ZXItcmVzZXR8Y3Vyc29yfGRpcmVjdGlvbnxkaXNwbGF5fGVtcHR5LWNlbGxzfGZpbHRlcnxmbGV4fGZsZXgtYmFzaXN8ZmxleC1kaXJlY3Rpb258ZmxleC1mbG93fGZsZXgtZ3Jvd3xmbGV4LXNocmlua3xmbGV4LXdyYXB8ZmxvYXR8Zm9udHxmb250LWZhbWlseXxmb250LXNpemV8Zm9udC1zaXplLWFkanVzdHxmb250LXN0cmV0Y2h8Zm9udC1zdHlsZXxmb250LXZhcmlhbnR8Zm9udC13ZWlnaHR8aGFuZ2luZy1wdW5jdHVhdGlvbnxoZWlnaHR8anVzdGlmeS1jb250ZW50fGxlZnR8bGV0dGVyLXNwYWNpbmd8bGluZS1oZWlnaHR8bGlzdC1zdHlsZXxsaXN0LXN0eWxlLWltYWdlfGxpc3Qtc3R5bGUtcG9zaXRpb258bGlzdC1zdHlsZS10eXBlfG1hcmdpbnxtYXJnaW4tYm90dG9tfG1hcmdpbi1sZWZ0fG1hcmdpbi1yaWdodHxtYXJnaW4tdG9wfG1heC1oZWlnaHR8bWF4LXdpZHRofG1heC16b29tfG1pbi1oZWlnaHR8bWluLXdpZHRofG1pbi16b29tfG5hdi1kb3dufG5hdi1pbmRleHxuYXYtbGVmdHxuYXYtcmlnaHR8bmF2LXVwfG9wYWNpdHl8b3JkZXJ8b3V0bGluZXxvdXRsaW5lLWNvbG9yfG91dGxpbmUtb2Zmc2V0fG91dGxpbmUtc3R5bGV8b3V0bGluZS13aWR0aHxvdmVyZmxvd3xvdmVyZmxvdy14fG92ZXJmbG93LXl8cGFkZGluZ3xwYWRkaW5nLWJvdHRvbXxwYWRkaW5nLWxlZnR8cGFkZGluZy1yaWdodHxwYWRkaW5nLXRvcHxwYWdlLWJyZWFrLWFmdGVyfHBhZ2UtYnJlYWstYmVmb3JlfHBhZ2UtYnJlYWstaW5zaWRlfHBlcnNwZWN0aXZlfHBlcnNwZWN0aXZlLW9yaWdpbnxwb3NpdGlvbnxxdW90ZXN8cmVzaXplfHJpZ2h0fHRhYi1zaXplfHRhYmxlLWxheW91dHx0ZXh0LWFsaWdufHRleHQtYWxpZ24tbGFzdHx0ZXh0LWRlY29yYXRpb258dGV4dC1kZWNvcmF0aW9uLWNvbG9yfHRleHQtZGVjb3JhdGlvbi1saW5lfHRleHQtZGVjb3JhdGlvbi1zdHlsZXx0ZXh0LWluZGVudHx0ZXh0LWp1c3RpZnl8dGV4dC1vdmVyZmxvd3x0ZXh0LXNoYWRvd3x0ZXh0LXRyYW5zZm9ybXx0b3B8dHJhbnNmb3JtfHRyYW5zZm9ybS1vcmlnaW58dHJhbnNmb3JtLXN0eWxlfHRyYW5zaXRpb258dHJhbnNpdGlvbi1kZWxheXx0cmFuc2l0aW9uLWR1cmF0aW9ufHRyYW5zaXRpb24tcHJvcGVydHl8dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb258dW5pY29kZS1iaWRpfHVzZXItc2VsZWN0fHVzZXItem9vbXx2ZXJ0aWNhbC1hbGlnbnx2aXNpYmlsaXR5fHdoaXRlLXNwYWNlfHdpZHRofHdvcmQtYnJlYWt8d29yZC1zcGFjaW5nfHdvcmQtd3JhcHx6LWluZGV4IjsKdmFyIHN1cHBvcnRGdW5jdGlvbiA9IGV4cG9ydHMuc3VwcG9ydEZ1bmN0aW9uID0gInJnYnxyZ2JhfHVybHxhdHRyfGNvdW50ZXJ8Y291bnRlcnMiOwp2YXIgc3VwcG9ydENvbnN0YW50ID0gZXhwb3J0cy5zdXBwb3J0Q29uc3RhbnQgPSAiYWJzb2x1dGV8YWZ0ZXItZWRnZXxhZnRlcnxhbGwtc2Nyb2xsfGFsbHxhbHBoYWJldGljfGFsd2F5c3xhbnRpYWxpYXNlZHxhcm1lbmlhbnxhdXRvfGF2b2lkLWNvbHVtbnxhdm9pZC1wYWdlfGF2b2lkfGJhbGFuY2V8YmFzZWxpbmV8YmVmb3JlLWVkZ2V8YmVmb3JlfGJlbG93fGJpZGktb3ZlcnJpZGV8YmxvY2stbGluZS1oZWlnaHR8YmxvY2t8Ym9sZHxib2xkZXJ8Ym9yZGVyLWJveHxib3RofGJvdHRvbXxib3h8YnJlYWstYWxsfGJyZWFrLXdvcmR8Y2FwaXRhbGl6ZXxjYXBzLWhlaWdodHxjYXB0aW9ufGNlbnRlcnxjZW50cmFsfGNoYXJ8Y2lyY2xlfGNqay1pZGVvZ3JhcGhpY3xjbG9uZXxjbG9zZS1xdW90ZXxjb2wtcmVzaXplfGNvbGxhcHNlfGNvbHVtbnxjb25zaWRlci1zaGlmdHN8Y29udGFpbnxjb250ZW50LWJveHxjb3Zlcnxjcm9zc2hhaXJ8Y3ViaWMtYmV6aWVyfGRhc2hlZHxkZWNpbWFsLWxlYWRpbmctemVyb3xkZWNpbWFsfGRlZmF1bHR8ZGlzYWJsZWR8ZGlzY3xkaXNyZWdhcmQtc2hpZnRzfGRpc3RyaWJ1dGUtYWxsLWxpbmVzfGRpc3RyaWJ1dGUtbGV0dGVyfGRpc3RyaWJ1dGUtc3BhY2V8ZGlzdHJpYnV0ZXxkb3R0ZWR8ZG91YmxlfGUtcmVzaXplfGVhc2UtaW58ZWFzZS1pbi1vdXR8ZWFzZS1vdXR8ZWFzZXxlbGxpcHNpc3xlbmR8ZXhjbHVkZS1ydWJ5fGZpbGx8Zml4ZWR8Z2VvcmdpYW58Z2x5cGhzfGdyaWQtaGVpZ2h0fGdyb292ZXxoYW5kfGhhbmdpbmd8aGVicmV3fGhlbHB8aGlkZGVufGhpcmFnYW5hLWlyb2hhfGhpcmFnYW5hfGhvcml6b250YWx8aWNvbnxpZGVvZ3JhcGgtYWxwaGF8aWRlb2dyYXBoLW51bWVyaWN8aWRlb2dyYXBoLXBhcmVudGhlc2lzfGlkZW9ncmFwaC1zcGFjZXxpZGVvZ3JhcGhpY3xpbmFjdGl2ZXxpbmNsdWRlLXJ1Ynl8aW5oZXJpdHxpbml0aWFsfGlubGluZS1ibG9ja3xpbmxpbmUtYm94fGlubGluZS1saW5lLWhlaWdodHxpbmxpbmUtdGFibGV8aW5saW5lfGluc2V0fGluc2lkZXxpbnRlci1pZGVvZ3JhcGh8aW50ZXItd29yZHxpbnZlcnR8aXRhbGljfGp1c3RpZnl8a2F0YWthbmEtaXJvaGF8a2F0YWthbmF8a2VlcC1hbGx8bGFzdHxsZWZ0fGxpZ2h0ZXJ8bGluZS1lZGdlfGxpbmUtdGhyb3VnaHxsaW5lfGxpbmVhcnxsaXN0LWl0ZW18bG9jYWx8bG9vc2V8bG93ZXItYWxwaGF8bG93ZXItZ3JlZWt8bG93ZXItbGF0aW58bG93ZXItcm9tYW58bG93ZXJjYXNlfGxyLXRifGx0cnxtYXRoZW1hdGljYWx8bWF4LWhlaWdodHxtYXgtc2l6ZXxtZWRpdW18bWVudXxtZXNzYWdlLWJveHxtaWRkbGV8bW92ZXxuLXJlc2l6ZXxuZS1yZXNpemV8bmV3c3BhcGVyfG5vLWNoYW5nZXxuby1jbG9zZS1xdW90ZXxuby1kcm9wfG5vLW9wZW4tcXVvdGV8bm8tcmVwZWF0fG5vbmV8bm9ybWFsfG5vdC1hbGxvd2VkfG5vd3JhcHxudy1yZXNpemV8b2JsaXF1ZXxvcGVuLXF1b3RlfG91dHNldHxvdXRzaWRlfG92ZXJsaW5lfHBhZGRpbmctYm94fHBhZ2V8cG9pbnRlcnxwcmUtbGluZXxwcmUtd3JhcHxwcmV8cHJlc2VydmUtM2R8cHJvZ3Jlc3N8cmVsYXRpdmV8cmVwZWF0LXh8cmVwZWF0LXl8cmVwZWF0fHJlcGxhY2VkfHJlc2V0LXNpemV8cmlkZ2V8cmlnaHR8cm91bmR8cm93LXJlc2l6ZXxydGx8cy1yZXNpemV8c2Nyb2xsfHNlLXJlc2l6ZXxzZXBhcmF0ZXxzbGljZXxzbWFsbC1jYXBzfHNtYWxsLWNhcHRpb258c29saWR8c3BhY2V8c3F1YXJlfHN0YXJ0fHN0YXRpY3xzdGF0dXMtYmFyfHN0ZXAtZW5kfHN0ZXAtc3RhcnR8c3RlcHN8c3RyZXRjaHxzdHJpY3R8c3VifHN1cGVyfHN3LXJlc2l6ZXx0YWJsZS1jYXB0aW9ufHRhYmxlLWNlbGx8dGFibGUtY29sdW1uLWdyb3VwfHRhYmxlLWNvbHVtbnx0YWJsZS1mb290ZXItZ3JvdXB8dGFibGUtaGVhZGVyLWdyb3VwfHRhYmxlLXJvdy1ncm91cHx0YWJsZS1yb3d8dGFibGV8dGItcmx8dGV4dC1hZnRlci1lZGdlfHRleHQtYmVmb3JlLWVkZ2V8dGV4dC1ib3R0b218dGV4dC1zaXplfHRleHQtdG9wfHRleHR8dGhpY2t8dGhpbnx0cmFuc3BhcmVudHx1bmRlcmxpbmV8dXBwZXItYWxwaGF8dXBwZXItbGF0aW58dXBwZXItcm9tYW58dXBwZXJjYXNlfHVzZS1zY3JpcHR8dmVydGljYWwtaWRlb2dyYXBoaWN8dmVydGljYWwtdGV4dHx2aXNpYmxlfHctcmVzaXplfHdhaXR8d2hpdGVzcGFjZXx6LWluZGV4fHplcm98em9vbSI7CnZhciBzdXBwb3J0Q29uc3RhbnRDb2xvciA9IGV4cG9ydHMuc3VwcG9ydENvbnN0YW50Q29sb3IgPSAiYWxpY2VibHVlfGFudGlxdWV3aGl0ZXxhcXVhfGFxdWFtYXJpbmV8YXp1cmV8YmVpZ2V8YmlzcXVlfGJsYWNrfGJsYW5jaGVkYWxtb25kfGJsdWV8Ymx1ZXZpb2xldHxicm93bnxidXJseXdvb2R8Y2FkZXRibHVlfGNoYXJ0cmV1c2V8Y2hvY29sYXRlfGNvcmFsfGNvcm5mbG93ZXJibHVlfGNvcm5zaWxrfGNyaW1zb258Y3lhbnxkYXJrYmx1ZXxkYXJrY3lhbnxkYXJrZ29sZGVucm9kfGRhcmtncmF5fGRhcmtncmVlbnxkYXJrZ3JleXxkYXJra2hha2l8ZGFya21hZ2VudGF8ZGFya29saXZlZ3JlZW58ZGFya29yYW5nZXxkYXJrb3JjaGlkfGRhcmtyZWR8ZGFya3NhbG1vbnxkYXJrc2VhZ3JlZW58ZGFya3NsYXRlYmx1ZXxkYXJrc2xhdGVncmF5fGRhcmtzbGF0ZWdyZXl8ZGFya3R1cnF1b2lzZXxkYXJrdmlvbGV0fGRlZXBwaW5rfGRlZXBza3libHVlfGRpbWdyYXl8ZGltZ3JleXxkb2RnZXJibHVlfGZpcmVicmlja3xmbG9yYWx3aGl0ZXxmb3Jlc3RncmVlbnxmdWNoc2lhfGdhaW5zYm9yb3xnaG9zdHdoaXRlfGdvbGR8Z29sZGVucm9kfGdyYXl8Z3JlZW58Z3JlZW55ZWxsb3d8Z3JleXxob25leWRld3xob3RwaW5rfGluZGlhbnJlZHxpbmRpZ298aXZvcnl8a2hha2l8bGF2ZW5kZXJ8bGF2ZW5kZXJibHVzaHxsYXduZ3JlZW58bGVtb25jaGlmZm9ufGxpZ2h0Ymx1ZXxsaWdodGNvcmFsfGxpZ2h0Y3lhbnxsaWdodGdvbGRlbnJvZHllbGxvd3xsaWdodGdyYXl8bGlnaHRncmVlbnxsaWdodGdyZXl8bGlnaHRwaW5rfGxpZ2h0c2FsbW9ufGxpZ2h0c2VhZ3JlZW58bGlnaHRza3libHVlfGxpZ2h0c2xhdGVncmF5fGxpZ2h0c2xhdGVncmV5fGxpZ2h0c3RlZWxibHVlfGxpZ2h0eWVsbG93fGxpbWV8bGltZWdyZWVufGxpbmVufG1hZ2VudGF8bWFyb29ufG1lZGl1bWFxdWFtYXJpbmV8bWVkaXVtYmx1ZXxtZWRpdW1vcmNoaWR8bWVkaXVtcHVycGxlfG1lZGl1bXNlYWdyZWVufG1lZGl1bXNsYXRlYmx1ZXxtZWRpdW1zcHJpbmdncmVlbnxtZWRpdW10dXJxdW9pc2V8bWVkaXVtdmlvbGV0cmVkfG1pZG5pZ2h0Ymx1ZXxtaW50Y3JlYW18bWlzdHlyb3NlfG1vY2Nhc2lufG5hdmFqb3doaXRlfG5hdnl8b2xkbGFjZXxvbGl2ZXxvbGl2ZWRyYWJ8b3JhbmdlfG9yYW5nZXJlZHxvcmNoaWR8cGFsZWdvbGRlbnJvZHxwYWxlZ3JlZW58cGFsZXR1cnF1b2lzZXxwYWxldmlvbGV0cmVkfHBhcGF5YXdoaXB8cGVhY2hwdWZmfHBlcnV8cGlua3xwbHVtfHBvd2RlcmJsdWV8cHVycGxlfHJlYmVjY2FwdXJwbGV8cmVkfHJvc3licm93bnxyb3lhbGJsdWV8c2FkZGxlYnJvd258c2FsbW9ufHNhbmR5YnJvd258c2VhZ3JlZW58c2Vhc2hlbGx8c2llbm5hfHNpbHZlcnxza3libHVlfHNsYXRlYmx1ZXxzbGF0ZWdyYXl8c2xhdGVncmV5fHNub3d8c3ByaW5nZ3JlZW58c3RlZWxibHVlfHRhbnx0ZWFsfHRoaXN0bGV8dG9tYXRvfHR1cnF1b2lzZXx2aW9sZXR8d2hlYXR8d2hpdGV8d2hpdGVzbW9rZXx5ZWxsb3d8eWVsbG93Z3JlZW4iOwp2YXIgc3VwcG9ydENvbnN0YW50Rm9udHMgPSBleHBvcnRzLnN1cHBvcnRDb25zdGFudEZvbnRzID0gImFyaWFsfGNlbnR1cnl8Y29taWN8Y291cmllcnxjdXJzaXZlfGZhbnRhc3l8Z2FyYW1vbmR8Z2VvcmdpYXxoZWx2ZXRpY2F8aW1wYWN0fGx1Y2lkYXxzeW1ib2x8c3lzdGVtfHRhaG9tYXx0aW1lc3x0cmVidWNoZXR8dXRvcGlhfHZlcmRhbmF8d2ViZGluZ3N8c2Fucy1zZXJpZnxzZXJpZnxtb25vc3BhY2UiOwoKdmFyIG51bVJlID0gZXhwb3J0cy5udW1SZSA9ICJcXC0/KD86KD86WzAtOV0rKD86XFwuWzAtOV0rKT8pfCg/OlxcLlswLTldKykpIjsKdmFyIHBzZXVkb0VsZW1lbnRzID0gZXhwb3J0cy5wc2V1ZG9FbGVtZW50cyA9ICIoXFw6KylcXGIoYWZ0ZXJ8YmVmb3JlfGZpcnN0LWxldHRlcnxmaXJzdC1saW5lfG1vei1zZWxlY3Rpb258c2VsZWN0aW9uKVxcYiI7CnZhciBwc2V1ZG9DbGFzc2VzICA9IGV4cG9ydHMucHNldWRvQ2xhc3NlcyA9ICAiKDopXFxiKGFjdGl2ZXxjaGVja2VkfGRpc2FibGVkfGVtcHR5fGVuYWJsZWR8Zmlyc3QtY2hpbGR8Zmlyc3Qtb2YtdHlwZXxmb2N1c3xob3ZlcnxpbmRldGVybWluYXRlfGludmFsaWR8bGFzdC1jaGlsZHxsYXN0LW9mLXR5cGV8bGlua3xub3R8bnRoLWNoaWxkfG50aC1sYXN0LWNoaWxkfG50aC1sYXN0LW9mLXR5cGV8bnRoLW9mLXR5cGV8b25seS1jaGlsZHxvbmx5LW9mLXR5cGV8cmVxdWlyZWR8cm9vdHx0YXJnZXR8dmFsaWR8dmlzaXRlZClcXGIiOwoKdmFyIENzc0hpZ2hsaWdodFJ1bGVzID0gZnVuY3Rpb24oKSB7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjogc3VwcG9ydEZ1bmN0aW9uLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50Ijogc3VwcG9ydENvbnN0YW50LAogICAgICAgICJzdXBwb3J0LnR5cGUiOiBzdXBwb3J0VHlwZSwKICAgICAgICAic3VwcG9ydC5jb25zdGFudC5jb2xvciI6IHN1cHBvcnRDb25zdGFudENvbG9yLAogICAgICAgICJzdXBwb3J0LmNvbnN0YW50LmZvbnRzIjogc3VwcG9ydENvbnN0YW50Rm9udHMKICAgIH0sICJ0ZXh0IiwgdHJ1ZSk7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFt7CiAgICAgICAgICAgIGluY2x1ZGUgOiBbInN0cmluZ3MiLCAidXJsIiwgImNvbW1lbnRzIl0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicGFyZW4ubHBhcmVuIiwKICAgICAgICAgICAgcmVnZXg6ICJcXHsiLAogICAgICAgICAgICBuZXh0OiAgInJ1bGVzZXQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICByZWdleDogIkAoPyF2aWV3cG9ydCkiLAogICAgICAgICAgICBuZXh0OiAgIm1lZGlhIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkIiwKICAgICAgICAgICAgcmVnZXg6ICIjW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQiLAogICAgICAgICAgICByZWdleDogIiUiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlIiwKICAgICAgICAgICAgcmVnZXg6ICJcXC5bYS16MC05LV9dKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI6W2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwKICAgICAgICAgICAgcmVnZXggOiBudW1SZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudCIsCiAgICAgICAgICAgIHJlZ2V4OiAiW2EtejAtOS1fXSsiCiAgICAgICAgfSwgewogICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHRydWUKICAgICAgICB9XSwKCiAgICAgICAgIm1lZGlhIjogW3sKICAgICAgICAgICAgaW5jbHVkZSA6IFsic3RyaW5ncyIsICJ1cmwiLCAiY29tbWVudHMiXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICByZWdleDogIlxceyIsCiAgICAgICAgICAgIG5leHQ6ICAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4OiAiXFx9IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nIiwKICAgICAgICAgICAgcmVnZXg6ICI7IiwKICAgICAgICAgICAgbmV4dDogICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKD86bWVkaWF8c3VwcG9ydHN8ZG9jdW1lbnR8Y2hhcnNldHxpbXBvcnR8bmFtZXNwYWNlfG1lZGlhfHN1cHBvcnRzfGRvY3VtZW50IgogICAgICAgICAgICAgICAgKyAifHBhZ2V8Zm9udHxrZXlmcmFtZXN8dmlld3BvcnR8Y291bnRlci1zdHlsZXxmb250LWZlYXR1cmUtdmFsdWVzIgogICAgICAgICAgICAgICAgKyAifHN3YXNofG9ybmFtZW50c3xhbm5vdGF0aW9ufHN0eWxpc3RpY3xzdHlsZXNldHxjaGFyYWN0ZXItdmFyaWFudCkiCiAgICAgICAgfV0sCgogICAgICAgICJjb21tZW50cyIgOiBbewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgcmVnZXg6ICJcXC9cXCoiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCpcXC8iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbiA6ICJjb21tZW50IgogICAgICAgICAgICB9XQogICAgICAgIH1dLAoKICAgICAgICAicnVsZXNldCIgOiBbewogICAgICAgICAgICByZWdleCA6ICItKHdlYmtpdHxtc3xtb3p8byktIiwKICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAiWzo7XSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcfSIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogWyJzdHJpbmdzIiwgInVybCIsICJjb21tZW50cyJdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsiY29uc3RhbnQubnVtZXJpYyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIigiICsgbnVtUmUgKyAiKShjaHxjbXxkZWd8ZW18ZXh8ZnJ8Z2R8Z3JhZHxIenxpbnxrSHp8bW18bXN8cGN8cHR8cHh8cmFkfHJlbXxzfHR1cm58dmh8dm1heHx2bWlufHZtfHZ3fCUpIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsCiAgICAgICAgICAgIHJlZ2V4IDogbnVtUmUKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAgLy8gaGV4NiBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17Nn0iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gaGV4MyBjb2xvcgogICAgICAgICAgICByZWdleCA6ICIjW2EtZjAtOV17M30iCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1lbGVtZW50LmNzcyJdLAogICAgICAgICAgICByZWdleCA6IHBzZXVkb0VsZW1lbnRzCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24iLCAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLnBzZXVkby1jbGFzcy5jc3MiXSwKICAgICAgICAgICAgcmVnZXggOiBwc2V1ZG9DbGFzc2VzCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidXJsIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6ICJcXC0/W2EtekEtWl9dW2EtekEtWjAtOV9cXC1dKiIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgIH1dLAoKICAgICAgICB1cmw6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICByZWdleCA6ICIoPzp1cmwoOj8tcHJlZml4KT98ZG9tYWlufHJlZ2V4cClcXCgiLAogICAgICAgICAgICBwdXNoOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3VwcG9ydC5mdW5jdGlvbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXCkiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9XSwKCiAgICAgICAgc3RyaW5nczogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnN0YXJ0IiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmVuZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICInfCQiLAogICAgICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgaW5jbHVkZSA6ICJlc2NhcGVzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXFwkLywKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZyIKICAgICAgICAgICAgfV0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5lbmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAnInwkJywKICAgICAgICAgICAgICAgIG5leHQ6ICJwb3AiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGluY2x1ZGUgOiAiZXNjYXBlcyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1xcJC8sCiAgICAgICAgICAgICAgICBjb25zdW1lTGluZUVuZDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH1dCiAgICAgICAgfV0sCiAgICAgICAgZXNjYXBlczogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiAvXFwoW2EtZkEtRlxkXXsxLDZ9fFteYS1mQS1GXGRdKS8KICAgICAgICB9XQoKICAgIH07CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKENzc0hpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5Dc3NIaWdobGlnaHRSdWxlcyA9IENzc0hpZ2hsaWdodFJ1bGVzOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzc19jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIHByb3BlcnR5TWFwID0gewogICAgImJhY2tncm91bmQiOiB7IiMkMCI6IDF9LAogICAgImJhY2tncm91bmQtY29sb3IiOiB7IiMkMCI6IDEsICJ0cmFuc3BhcmVudCI6IDEsICJmaXhlZCI6IDF9LAogICAgImJhY2tncm91bmQtaW1hZ2UiOiB7InVybCgnLyQwJykiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCI6IHsicmVwZWF0IjogMSwgInJlcGVhdC14IjogMSwgInJlcGVhdC15IjogMSwgIm5vLXJlcGVhdCI6IDEsICJpbmhlcml0IjogMX0sCiAgICAiYmFja2dyb3VuZC1wb3NpdGlvbiI6IHsiYm90dG9tIjoyLCAiY2VudGVyIjoyLCAibGVmdCI6MiwgInJpZ2h0IjoyLCAidG9wIjoyLCAiaW5oZXJpdCI6Mn0sCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IjogeyJzY3JvbGwiOiAxLCAiZml4ZWQiOiAxfSwKICAgICJiYWNrZ3JvdW5kLXNpemUiOiB7ImNvdmVyIjogMSwgImNvbnRhaW4iOiAxfSwKICAgICJiYWNrZ3JvdW5kLWNsaXAiOiB7ImJvcmRlci1ib3giOiAxLCAicGFkZGluZy1ib3giOiAxLCAiY29udGVudC1ib3giOiAxfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiI6IHsiYm9yZGVyLWJveCI6IDEsICJwYWRkaW5nLWJveCI6IDEsICJjb250ZW50LWJveCI6IDF9LAogICAgImJvcmRlciI6IHsic29saWQgJDAiOiAxLCAiZGFzaGVkICQwIjogMSwgImRvdHRlZCAkMCI6IDEsICIjJDAiOiAxfSwKICAgICJib3JkZXItY29sb3IiOiB7IiMkMCI6IDF9LAogICAgImJvcmRlci1zdHlsZSI6IHsic29saWQiOjIsICJkYXNoZWQiOjIsICJkb3R0ZWQiOjIsICJkb3VibGUiOjIsICJncm9vdmUiOjIsICJoaWRkZW4iOjIsICJpbmhlcml0IjoyLCAiaW5zZXQiOjIsICJub25lIjoyLCAib3V0c2V0IjoyLCAicmlkZ2VkIjoyfSwKICAgICJib3JkZXItY29sbGFwc2UiOiB7ImNvbGxhcHNlIjogMSwgInNlcGFyYXRlIjogMX0sCiAgICAiYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiY2xlYXIiOiB7ImxlZnQiOiAxLCAicmlnaHQiOiAxLCAiYm90aCI6IDEsICJub25lIjogMX0sCiAgICAiY29sb3IiOiB7IiMkMCI6IDEsICJyZ2IoIyQwMCwwLDApIjogMX0sCiAgICAiY3Vyc29yIjogeyJkZWZhdWx0IjogMSwgInBvaW50ZXIiOiAxLCAibW92ZSI6IDEsICJ0ZXh0IjogMSwgIndhaXQiOiAxLCAiaGVscCI6IDEsICJwcm9ncmVzcyI6IDEsICJuLXJlc2l6ZSI6IDEsICJuZS1yZXNpemUiOiAxLCAiZS1yZXNpemUiOiAxLCAic2UtcmVzaXplIjogMSwgInMtcmVzaXplIjogMSwgInN3LXJlc2l6ZSI6IDEsICJ3LXJlc2l6ZSI6IDEsICJudy1yZXNpemUiOiAxfSwKICAgICJkaXNwbGF5IjogeyJub25lIjogMSwgImJsb2NrIjogMSwgImlubGluZSI6IDEsICJpbmxpbmUtYmxvY2siOiAxLCAidGFibGUtY2VsbCI6IDF9LAogICAgImVtcHR5LWNlbGxzIjogeyJzaG93IjogMSwgImhpZGUiOiAxfSwKICAgICJmbG9hdCI6IHsibGVmdCI6IDEsICJyaWdodCI6IDEsICJub25lIjogMX0sCiAgICAiZm9udC1mYW1pbHkiOiB7IkFyaWFsIjoyLCJDb21pYyBTYW5zIE1TIjoyLCJDb25zb2xhcyI6MiwiQ291cmllciBOZXciOjIsIkNvdXJpZXIiOjIsIkdlb3JnaWEiOjIsIk1vbm9zcGFjZSI6MiwiU2Fucy1TZXJpZiI6MiwgIlNlZ29lIFVJIjoyLCJUYWhvbWEiOjIsIlRpbWVzIE5ldyBSb21hbiI6MiwiVHJlYnVjaGV0IE1TIjoyLCJWZXJkYW5hIjogMX0sCiAgICAiZm9udC1zaXplIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAiZm9udC13ZWlnaHQiOiB7ImJvbGQiOiAxLCAibm9ybWFsIjogMX0sCiAgICAiZm9udC1zdHlsZSI6IHsiaXRhbGljIjogMSwgIm5vcm1hbCI6IDF9LAogICAgImZvbnQtdmFyaWFudCI6IHsibm9ybWFsIjogMSwgInNtYWxsLWNhcHMiOiAxfSwKICAgICJoZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJsZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibGV0dGVyLXNwYWNpbmciOiB7Im5vcm1hbCI6IDF9LAogICAgImxpbmUtaGVpZ2h0IjogeyJub3JtYWwiOiAxfSwKICAgICJsaXN0LXN0eWxlLXR5cGUiOiB7Im5vbmUiOiAxLCAiZGlzYyI6IDEsICJjaXJjbGUiOiAxLCAic3F1YXJlIjogMSwgImRlY2ltYWwiOiAxLCAiZGVjaW1hbC1sZWFkaW5nLXplcm8iOiAxLCAibG93ZXItcm9tYW4iOiAxLCAidXBwZXItcm9tYW4iOiAxLCAibG93ZXItZ3JlZWsiOiAxLCAibG93ZXItbGF0aW4iOiAxLCAidXBwZXItbGF0aW4iOiAxLCAiZ2VvcmdpYW4iOiAxLCAibG93ZXItYWxwaGEiOiAxLCAidXBwZXItYWxwaGEiOiAxfSwKICAgICJtYXJnaW4iOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tcmlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tbGVmdCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1hcmdpbi10b3AiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtYXJnaW4tYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAibWF4LWhlaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1heC13aWR0aCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgIm1pbi1oZWlnaHQiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJtaW4td2lkdGgiOiB7InB4IjogMSwgImVtIjogMSwgIiUiOiAxfSwKICAgICJvdmVyZmxvdyI6IHsiaGlkZGVuIjogMSwgInZpc2libGUiOiAxLCAiYXV0byI6IDEsICJzY3JvbGwiOiAxfSwKICAgICJvdmVyZmxvdy14IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDEsICJhdXRvIjogMSwgInNjcm9sbCI6IDF9LAogICAgIm92ZXJmbG93LXkiOiB7ImhpZGRlbiI6IDEsICJ2aXNpYmxlIjogMSwgImF1dG8iOiAxLCAic2Nyb2xsIjogMX0sCiAgICAicGFkZGluZyI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctdG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1yaWdodCI6IHsicHgiOiAxLCAiZW0iOiAxLCAiJSI6IDF9LAogICAgInBhZGRpbmctYm90dG9tIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFkZGluZy1sZWZ0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAicGFnZS1icmVhay1hZnRlciI6IHsiYXV0byI6IDEsICJhbHdheXMiOiAxLCAiYXZvaWQiOiAxLCAibGVmdCI6IDEsICJyaWdodCI6IDF9LAogICAgInBhZ2UtYnJlYWstYmVmb3JlIjogeyJhdXRvIjogMSwgImFsd2F5cyI6IDEsICJhdm9pZCI6IDEsICJsZWZ0IjogMSwgInJpZ2h0IjogMX0sCiAgICAicG9zaXRpb24iOiB7ImFic29sdXRlIjogMSwgInJlbGF0aXZlIjogMSwgImZpeGVkIjogMSwgInN0YXRpYyI6IDF9LAogICAgInJpZ2h0IjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidGFibGUtbGF5b3V0IjogeyJmaXhlZCI6IDEsICJhdXRvIjogMX0sCiAgICAidGV4dC1kZWNvcmF0aW9uIjogeyJub25lIjogMSwgInVuZGVybGluZSI6IDEsICJsaW5lLXRocm91Z2giOiAxLCAiYmxpbmsiOiAxfSwKICAgICJ0ZXh0LWFsaWduIjogeyJsZWZ0IjogMSwgInJpZ2h0IjogMSwgImNlbnRlciI6IDEsICJqdXN0aWZ5IjogMX0sCiAgICAidGV4dC10cmFuc2Zvcm0iOiB7ImNhcGl0YWxpemUiOiAxLCAidXBwZXJjYXNlIjogMSwgImxvd2VyY2FzZSI6IDEsICJub25lIjogMX0sCiAgICAidG9wIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAidmVydGljYWwtYWxpZ24iOiB7InRvcCI6IDEsICJib3R0b20iOiAxfSwKICAgICJ2aXNpYmlsaXR5IjogeyJoaWRkZW4iOiAxLCAidmlzaWJsZSI6IDF9LAogICAgIndoaXRlLXNwYWNlIjogeyJub3dyYXAiOiAxLCAibm9ybWFsIjogMSwgInByZSI6IDEsICJwcmUtbGluZSI6IDEsICJwcmUtd3JhcCI6IDF9LAogICAgIndpZHRoIjogeyJweCI6IDEsICJlbSI6IDEsICIlIjogMX0sCiAgICAid29yZC1zcGFjaW5nIjogeyJub3JtYWwiOiAxfSwKICAgICJmaWx0ZXIiOiB7ImFscGhhKG9wYWNpdHk9JDAxMDApIjogMX0sCgogICAgInRleHQtc2hhZG93IjogeyIkMDJweCAycHggMnB4ICM3NzciOiAxfSwKICAgICJ0ZXh0LW92ZXJmbG93IjogeyJlbGxpcHNpcy13b3JkIjogMSwgImNsaXAiOiAxLCAiZWxsaXBzaXMiOiAxfSwKICAgICItbW96LWJvcmRlci1yYWRpdXMiOiAxLAogICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogMSwKICAgICItbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdCI6IDEsCiAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAxLAogICAgIi13ZWJraXQtYm9yZGVyLXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyI6IDEsCiAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogMSwKICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiOiAxLAogICAgIi1tb3otYm94LXNoYWRvdyI6IDEsCiAgICAiLXdlYmtpdC1ib3gtc2hhZG93IjogMSwKICAgICJ0cmFuc2Zvcm0iOiB7InJvdGF0ZSgkMDBkZWcpIjogMSwgInNrZXcoJDAwZGVnKSI6IDF9LAogICAgIi1tb3otdHJhbnNmb3JtIjogeyJyb3RhdGUoJDAwZGVnKSI6IDEsICJza2V3KCQwMGRlZykiOiAxfSwKICAgICItd2Via2l0LXRyYW5zZm9ybSI6IHsicm90YXRlKCQwMGRlZykiOiAxLCAic2tldygkMDBkZWcpIjogMSB9Cn07Cgp2YXIgQ3NzQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5jb21wbGV0aW9uc0RlZmluZWQgPSBmYWxzZTsKCiAgICB0aGlzLmRlZmluZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2MnKS5zdHlsZTsKCiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc3R5bGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3R5bGVbaV0gIT09ICdzdHJpbmcnKQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgIHZhciBuYW1lID0gaS5yZXBsYWNlKC9bQS1aXS9nLCBmdW5jdGlvbih4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICctJyArIHgudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydHlNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlNYXBbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aGlzLmNvbXBsZXRpb25zRGVmaW5lZCA9IHRydWU7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICBpZiAoIXRoaXMuY29tcGxldGlvbnNEZWZpbmVkKSB7CiAgICAgICAgICAgIHRoaXMuZGVmaW5lQ29tcGxldGlvbnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZT09PSdydWxlc2V0JyB8fCBzZXNzaW9uLiRtb2RlLiRpZCA9PSAiYWNlL21vZGUvc2NzcyIpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocG9zLnJvdykuc3Vic3RyKDAsIHBvcy5jb2x1bW4pOwogICAgICAgICAgICBpZiAoLzpbXjtdKyQvLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgICAgIC8oW1x3XC1dKyk6W146XSokLy50ZXN0KGxpbmUpOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0UHJvcGVydHlDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcGVydHlNYXApOwogICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLm1hcChmdW5jdGlvbihwcm9wZXJ0eSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHByb3BlcnR5ICsgJzogJDA7JywKICAgICAgICAgICAgICAgIG1ldGE6ICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLmdldFByb3BlcnR5VmFsdWVDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHBvcy5yb3cpLnN1YnN0cigwLCBwb3MuY29sdW1uKTsKICAgICAgICB2YXIgcHJvcGVydHkgPSAoLyhbXHdcLV0rKTpbXjpdKiQvLmV4ZWMobGluZSkgfHwge30pWzFdOwoKICAgICAgICBpZiAoIXByb3BlcnR5KQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIHZhbHVlcyA9IFtdOwogICAgICAgIGlmIChwcm9wZXJ0eSBpbiBwcm9wZXJ0eU1hcCAmJiB0eXBlb2YgcHJvcGVydHlNYXBbcHJvcGVydHldID09PSAib2JqZWN0IikgewogICAgICAgICAgICB2YWx1ZXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eU1hcFtwcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSl7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBjYXB0aW9uOiB2YWx1ZSwKICAgICAgICAgICAgICAgIHNuaXBwZXQ6IHZhbHVlLAogICAgICAgICAgICAgICAgbWV0YTogInByb3BlcnR5IHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKfSkuY2FsbChDc3NDb21wbGV0aW9ucy5wcm90b3R5cGUpOwoKZXhwb3J0cy5Dc3NDb21wbGV0aW9ucyA9IENzc0NvbXBsZXRpb25zOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJlaGF2aW91ciA9IHJlcXVpcmUoIi4uL2JlaGF2aW91ciIpLkJlaGF2aW91cjsKdmFyIENzdHlsZUJlaGF2aW91ciA9IHJlcXVpcmUoIi4vY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBDc3NCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91cik7CgogICAgdGhpcy5hZGQoImNvbG9uIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJzonICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUubWF0Y2goL1xzKy8pKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAnc3VwcG9ydC50eXBlJykgewogICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc6JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC9eKFxzK1teO118XHMqJCkvLnRlc3QobGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbikpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnOjsnLAogICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJjb2xvbiIsICJkZWxldGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHJhbmdlKSB7CiAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKHJhbmdlKTsKICAgICAgICBpZiAoIXJhbmdlLmlzTXVsdGlMaW5lKCkgJiYgc2VsZWN0ZWQgPT09ICc6JykgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKICAgICAgICAgICAgaWYgKHRva2VuICYmIHRva2VuLnZhbHVlLm1hdGNoKC9ccysvKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ3N1cHBvcnQudHlwZScpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShyYW5nZS5zdGFydC5yb3cpOwogICAgICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLmVuZC5jb2x1bW4sIHJhbmdlLmVuZC5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT09ICc7JykgewogICAgICAgICAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gKys7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInNlbWljb2xvbiIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT09ICc7JyAmJiBlZGl0b3Iuc2VsZWN0aW9uLmlzRW1wdHkoKSkgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5kb2MuZ2V0TGluZShjdXJzb3Iucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKGN1cnNvci5jb2x1bW4sIGN1cnNvci5jb2x1bW4gKyAxKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PT0gJzsnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgdGV4dDogJycsCiAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCIhaW1wb3J0YW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PT0gJyEnICYmIGVkaXRvci5zZWxlY3Rpb24uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwoKICAgICAgICAgICAgaWYgKC9eXHMqKDt8fXwkKS8udGVzdChsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogJyFpbXBvcnRhbnQnLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEwLCAxMF0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cm9vcC5pbmhlcml0cyhDc3NCZWhhdmlvdXIsIENzdHlsZUJlaGF2aW91cik7CgpleHBvcnRzLkNzc0JlaGF2aW91ciA9IENzc0JlaGF2aW91cjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL2Nzc19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL21vZGUvY3NzX2NvbXBsZXRpb25zIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzcyIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgQ3NzSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2Nzc19oaWdobGlnaHRfcnVsZXMiKS5Dc3NIaWdobGlnaHRSdWxlczsKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gcmVxdWlyZSgiLi9tYXRjaGluZ19icmFjZV9vdXRkZW50IikuTWF0Y2hpbmdCcmFjZU91dGRlbnQ7CnZhciBXb3JrZXJDbGllbnQgPSByZXF1aXJlKCIuLi93b3JrZXIvd29ya2VyX2NsaWVudCIpLldvcmtlckNsaWVudDsKdmFyIENzc0NvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9jc3NfY29tcGxldGlvbnMiKS5Dc3NDb21wbGV0aW9uczsKdmFyIENzc0JlaGF2aW91ciA9IHJlcXVpcmUoIi4vYmVoYXZpb3VyL2NzcyIpLkNzc0JlaGF2aW91cjsKdmFyIENTdHlsZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkaW5nL2NzdHlsZSIpLkZvbGRNb2RlOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuSGlnaGxpZ2h0UnVsZXMgPSBDc3NIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuJGJlaGF2aW91ciA9IG5ldyBDc3NCZWhhdmlvdXIoKTsKICAgIHRoaXMuJGNvbXBsZXRlciA9IG5ldyBDc3NDb21wbGV0aW9ucygpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9ICJjU3R5bGUiOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciB0b2tlbnMgPSB0aGlzLmdldFRva2VuaXplcigpLmdldExpbmVUb2tlbnMobGluZSwgc3RhdGUpLnRva2VuczsKICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCAmJiB0b2tlbnNbdG9rZW5zLmxlbmd0aC0xXS50eXBlID09ICJjb21tZW50IikgewogICAgICAgICAgICByZXR1cm4gaW5kZW50OwogICAgICAgIH0KCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXi4qXHtccyokLyk7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCBpbnB1dCkgewogICAgICAgIHJldHVybiB0aGlzLiRvdXRkZW50LmNoZWNrT3V0ZGVudChsaW5lLCBpbnB1dCk7CiAgICB9OwoKICAgIHRoaXMuYXV0b091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCByb3cpIHsKICAgICAgICB0aGlzLiRvdXRkZW50LmF1dG9PdXRkZW50KGRvYywgcm93KTsKICAgIH07CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHJldHVybiB0aGlzLiRjb21wbGV0ZXIuZ2V0Q29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgIH07CgogICAgdGhpcy5jcmVhdGVXb3JrZXIgPSBmdW5jdGlvbihzZXNzaW9uKSB7CiAgICAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXJDbGllbnQoWyJhY2UiXSwgImFjZS9tb2RlL2Nzc193b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgd29ya2VyLm9uKCJhbm5vdGF0ZSIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgc2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhlLmRhdGEpOwogICAgICAgIH0pOwoKICAgICAgICB3b3JrZXIub24oInRlcm1pbmF0ZSIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXNzaW9uLmNsZWFyQW5ub3RhdGlvbnMoKTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUvY3NzIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBYbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKG5vcm1hbGl6ZSkgewogICAgdmFyIHRhZ1JlZ2V4ID0gIltfOmEtekEtWlx4YzAtXHVmZmZmXVstXzouYS16QS1aMC05XHhjMC1cdWZmZmZdKiI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgc3RhcnQgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIiwgbmV4dCA6ICJjZGF0YSJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsicHVuY3R1YXRpb24uaW5zdHJ1Y3Rpb24ueG1sIiwgImtleXdvcmQuaW5zdHJ1Y3Rpb24ueG1sIl0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPFxcPykoIiArIHRhZ1JlZ2V4ICsgIikiLCBuZXh0IDogInByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LnN0YXJ0LnhtbCIsIHJlZ2V4IDogIjxcXCEtLSIsIG5leHQgOiAiY29tbWVudCJ9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsieG1sLXBlLmRvY3R5cGUueG1sIiwgInhtbC1wZS5kb2N0eXBlLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKERPQ1RZUEUpKD89W1xcc10pIiwgbmV4dCA6ICJkb2N0eXBlIiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInRhZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC5lbmQtdGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8LyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctb3Blbi54bWwiLCByZWdleDogIjwifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAidGV4dC54bWwifQogICAgICAgIF0sCgogICAgICAgIHByb2Nlc3NpbmdfaW5zdHJ1Y3Rpb24gOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUuZGVjbC1hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmRlY2wtYXR0cmlidXRlLWVxdWFscy54bWwiLAogICAgICAgICAgICByZWdleCA6ICI9IgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogIndoaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAic3RyaW5nIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ueG1sLWRlY2wueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFw/PiIsCiAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgfV0sCgogICAgICAgIGRvY3R5cGUgOiBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogIndoaXRlc3BhY2UifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAic3RyaW5nIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ4bWwtcGUuZG9jdHlwZS54bWwiLCByZWdleCA6ICI+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLnhtbCIsIHJlZ2V4IDogIlstX2EtekEtWjAtOTpdKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAicHVuY3R1YXRpb24uaW50LXN1YnNldCIsIHJlZ2V4IDogIlxcWyIsIHB1c2ggOiAiaW50X3N1YnNldCJ9CiAgICAgICAgXSwKCiAgICAgICAgaW50X3N1YnNldCA6IFt7CiAgICAgICAgICAgIHRva2VuIDogInRleHQueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uaW50LXN1YnNldC54bWwiLAogICAgICAgICAgICByZWdleDogIl0iLAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsICJrZXl3b3JkLm1hcmt1cC1kZWNsLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPFxcISkoIiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIHRva2VuIDogInRleHQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxzKyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicHVuY3R1YXRpb24ubWFya3VwLWRlY2wueG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj4iLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9XQogICAgICAgIH1dLAoKICAgICAgICBjZGF0YSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5jZGF0YS54bWwiLCByZWdleCA6ICJcXF1cXF0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICJcXHMrIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LnhtbCIsIHJlZ2V4IDogIig/OlteXFxdXXxcXF0oPyFcXF0+KSkrIn0KICAgICAgICBdLAoKICAgICAgICBjb21tZW50IDogWwogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5lbmQueG1sIiwgcmVnZXggOiAiLS0+IiwgbmV4dCA6ICJzdGFydCJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQueG1sIn0KICAgICAgICBdLAoKICAgICAgICByZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyX3JlZmVyZW5jZSA6IFt7CiAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIig/OiYjWzAtOV0rOyl8KD86JiN4WzAtOWEtZkEtRl0rOyl8KD86JlthLXpBLVowLTlfOlxcLi1dKzspIgogICAgICAgIH1dLAoKICAgICAgICB0YWcgOiBbewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig/Oig8KXwoPC8pKSgoPzoiICsgdGFnUmVnZXggKyAiOik/IiArIHRhZ1JlZ2V4ICsgIikiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIHRhZ193aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC50YWctd2hpdGVzcGFjZS54bWwiLCByZWdleCA6ICJcXHMrIn0KICAgICAgICBdLAogICAgICAgIHdoaXRlc3BhY2UgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJ0ZXh0LndoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICBzdHJpbmc6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogJyInLAogICAgICAgICAgICBwdXNoIDogWwogICAgICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy54bWwifQogICAgICAgICAgICBdCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZXM6IFt7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6IHRhZ1JlZ2V4CiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJhdHRyaWJ1dGVfdmFsdWUiCiAgICAgICAgfV0sCgogICAgICAgIGF0dHJpYnV0ZV92YWx1ZTogW3sKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICInIiwKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJfcmVmZXJlbmNlIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dCiAgICB9OwoKICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBYbWxIaWdobGlnaHRSdWxlcykKICAgICAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyA9IGZ1bmN0aW9uKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIHRhZyl7CiAgICAgICAgdGhpcy4kcnVsZXMudGFnLnVuc2hpZnQoewogICAgICAgICAgICB0b2tlbiA6IFsibWV0YS50YWcucHVuY3R1YXRpb24udGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLiIgKyB0YWcgKyAiLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPCkoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiBbCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiBwcmVmaXggKyAic3RhcnQifQogICAgICAgICAgICBdCiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuJHJ1bGVzW3RhZyArICItZW5kIl0gPSBbCiAgICAgICAgICAgIHtpbmNsdWRlIDogImF0dHJpYnV0ZXMifSwKICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCAgbmV4dDogInN0YXJ0IiwKICAgICAgICAgICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWx1ZSwgY3VycmVudFN0YXRlLCBzdGFjaykgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgfX0KICAgICAgICBdOwoKICAgICAgICB0aGlzLmVtYmVkUnVsZXMoSGlnaGxpZ2h0UnVsZXMsIHByZWZpeCwgW3sKICAgICAgICAgICAgdG9rZW46IFsibWV0YS50YWcucHVuY3R1YXRpb24uZW5kLXRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwvKSgiICsgdGFnICsgIig/PVxcc3w+fCQpKSIsCiAgICAgICAgICAgIG5leHQ6IHRhZyArICItZW5kIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPFxcIVxcW0NEQVRBXFxbIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuY2RhdGEueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiXFxdXFxdPiIKICAgICAgICB9XSk7CiAgICB9OwoKfSkuY2FsbChUZXh0SGlnaGxpZ2h0UnVsZXMucHJvdG90eXBlKTsKCm9vcC5pbmhlcml0cyhYbWxIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuWG1sSGlnaGxpZ2h0UnVsZXMgPSBYbWxIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvbW9kZS9jc3NfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvamF2YXNjcmlwdF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBDc3NIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vY3NzX2hpZ2hsaWdodF9ydWxlcyIpLkNzc0hpZ2hsaWdodFJ1bGVzOwp2YXIgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIpLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7Cgp2YXIgdGFnTWFwID0gbGFuZy5jcmVhdGVNYXAoewogICAgYSAgICAgICAgICAgOiAnYW5jaG9yJywKICAgIGJ1dHRvbiAJICAgIDogJ2Zvcm0nLAogICAgZm9ybSAgICAgICAgOiAnZm9ybScsCiAgICBpbWcgICAgICAgICA6ICdpbWFnZScsCiAgICBpbnB1dCAgICAgICA6ICdmb3JtJywKICAgIGxhYmVsICAgICAgIDogJ2Zvcm0nLAogICAgb3B0aW9uICAgICAgOiAnZm9ybScsCiAgICBzY3JpcHQgICAgICA6ICdzY3JpcHQnLAogICAgc2VsZWN0ICAgICAgOiAnZm9ybScsCiAgICB0ZXh0YXJlYSAgICA6ICdmb3JtJywKICAgIHN0eWxlICAgICAgIDogJ3N0eWxlJywKICAgIHRhYmxlICAgICAgIDogJ3RhYmxlJywKICAgIHRib2R5ICAgICAgIDogJ3RhYmxlJywKICAgIHRkICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRmb290ICAgICAgIDogJ3RhYmxlJywKICAgIHRoICAgICAgICAgIDogJ3RhYmxlJywKICAgIHRyICAgICAgICAgIDogJ3RhYmxlJwp9KTsKCnZhciBIdG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIFhtbEhpZ2hsaWdodFJ1bGVzLmNhbGwodGhpcyk7CgogICAgdGhpcy5hZGRSdWxlcyh7CiAgICAgICAgYXR0cmlidXRlczogW3sKICAgICAgICAgICAgaW5jbHVkZSA6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICJbLV9hLXpBLVowLTk6Ll0rIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iLAogICAgICAgICAgICBwdXNoIDogW3sKICAgICAgICAgICAgICAgIGluY2x1ZGU6ICJ0YWdfd2hpdGVzcGFjZSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nLnVucXVvdGVkLmF0dHJpYnV0ZS12YWx1ZS5odG1sIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIltePD49J1wiYFxcc10rIiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJlbXB0eSIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIiLAogICAgICAgICAgICAgICAgbmV4dCA6ICJwb3AiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlIDogImF0dHJpYnV0ZV92YWx1ZSIKICAgICAgICB9XSwKICAgICAgICB0YWc6IFt7CiAgICAgICAgICAgIHRva2VuIDogZnVuY3Rpb24oc3RhcnQsIHRhZykgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwID0gdGFnTWFwW3RhZ107CiAgICAgICAgICAgICAgICByZXR1cm4gWyJtZXRhLnRhZy5wdW5jdHVhdGlvbi4iICsgKHN0YXJ0ID09ICI8IiA/ICIiIDogImVuZC0iKSArICJ0YWctb3Blbi54bWwiLAogICAgICAgICAgICAgICAgICAgICJtZXRhLnRhZyIgKyAoZ3JvdXAgPyAiLiIgKyBncm91cCA6ICIiKSArICIudGFnLW5hbWUueG1sIl07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8Lz8pKFstX2EtekEtWjAtOTouXSspIiwKICAgICAgICAgICAgbmV4dDogInRhZ19zdHVmZiIKICAgICAgICB9XSwKICAgICAgICB0YWdfc3R1ZmY6IFsKICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsIHJlZ2V4IDogIi8/PiIsIG5leHQgOiAic3RhcnQifQogICAgICAgIF0KICAgIH0pOwoKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhDc3NIaWdobGlnaHRSdWxlcywgImNzcy0iLCAic3R5bGUiKTsKICAgIHRoaXMuZW1iZWRUYWdSdWxlcyhuZXcgSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzKHtqc3g6IGZhbHNlfSkuZ2V0UnVsZXMoKSwgImpzLSIsICJzY3JpcHQiKTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gSHRtbEhpZ2hsaWdodFJ1bGVzKQogICAgICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhIdG1sSGlnaGxpZ2h0UnVsZXMsIFhtbEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuSHRtbEhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9taXhlZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGRlZmF1bHRNb2RlLCBzdWJNb2RlcykgewogICAgdGhpcy5kZWZhdWx0TW9kZSA9IGRlZmF1bHRNb2RlOwogICAgdGhpcy5zdWJNb2RlcyA9IHN1Yk1vZGVzOwp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CgoKICAgIHRoaXMuJGdldE1vZGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgIT0gInN0cmluZyIpIAogICAgICAgICAgICBzdGF0ZSA9IHN0YXRlWzBdOwogICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnN1Yk1vZGVzKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRleE9mKGtleSkgPT09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJNb2Rlc1trZXldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuJHRyeU1vZGUgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc3RhdGUpOwogICAgICAgIHJldHVybiAobW9kZSA/IG1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgOiAiIik7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICAgdGhpcy4kdHJ5TW9kZShzZXNzaW9uLmdldFN0YXRlKHJvdy0xKSwgc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHx8CiAgICAgICAgICAgIHRoaXMuJHRyeU1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpLCBzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgfHwKICAgICAgICAgICAgdGhpcy5kZWZhdWx0TW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KQogICAgICAgICk7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3ctMSkpOwogICAgICAgIAogICAgICAgIGlmICghbW9kZSB8fCAhbW9kZS5nZXRGb2xkV2lkZ2V0KHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSkKICAgICAgICAgICAgbW9kZSA9IHRoaXMuJGdldE1vZGUoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKTsKICAgICAgICAKICAgICAgICBpZiAoIW1vZGUgfHwgIW1vZGUuZ2V0Rm9sZFdpZGdldChzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykpCiAgICAgICAgICAgIG1vZGUgPSB0aGlzLmRlZmF1bHRNb2RlOwogICAgICAgIAogICAgICAgIHJldHVybiBtb2RlLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbGliL2xhbmciLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS90b2tlbl9pdGVyYXRvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKdmFyIFRva2VuSXRlcmF0b3IgPSByZXF1aXJlKCIuLi8uLi90b2tlbl9pdGVyYXRvciIpLlRva2VuSXRlcmF0b3I7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbEVuZFRhZ3MpIHsKICAgIEJhc2VGb2xkTW9kZS5jYWxsKHRoaXMpOwogICAgdGhpcy52b2lkRWxlbWVudHMgPSB2b2lkRWxlbWVudHMgfHwge307CiAgICB0aGlzLm9wdGlvbmFsRW5kVGFncyA9IG9vcC5taXhpbih7fSwgdGhpcy52b2lkRWxlbWVudHMpOwogICAgaWYgKG9wdGlvbmFsRW5kVGFncykKICAgICAgICBvb3AubWl4aW4odGhpcy5vcHRpb25hbEVuZFRhZ3MsIG9wdGlvbmFsRW5kVGFncyk7CiAgICAKfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKdmFyIFRhZyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy50YWdOYW1lID0gIiI7CiAgICB0aGlzLmNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc2VsZkNsb3NpbmcgPSBmYWxzZTsKICAgIHRoaXMuc3RhcnQgPSB7cm93OiAwLCBjb2x1bW46IDB9OwogICAgdGhpcy5lbmQgPSB7cm93OiAwLCBjb2x1bW46IDB9Owp9OwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciB0YWcgPSB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZShzZXNzaW9uLCByb3cpOwoKICAgICAgICBpZiAoIXRhZykKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKHRhZy5jbG9zaW5nIHx8ICghdGFnLnRhZ05hbWUgJiYgdGFnLnNlbGZDbG9zaW5nKSkKICAgICAgICAgICAgcmV0dXJuIGZvbGRTdHlsZSA9PSAibWFya2JlZ2luZW5kIiA/ICJlbmQiIDogIiI7CgogICAgICAgIGlmICghdGFnLnRhZ05hbWUgfHwgdGFnLnNlbGZDbG9zaW5nIHx8IHRoaXMudm9pZEVsZW1lbnRzLmhhc093blByb3BlcnR5KHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICByZXR1cm4gIiI7CgogICAgICAgIGlmICh0aGlzLl9maW5kRW5kVGFnSW5MaW5lKHNlc3Npb24sIHJvdywgdGFnLnRhZ05hbWUsIHRhZy5lbmQuY29sdW1uKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICByZXR1cm4gInN0YXJ0IjsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Q29tbWVudEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICBpZiAoL2NvbW1lbnQvLnRlc3Qoc2Vzc2lvbi5nZXRTdGF0ZShyb3cpKSAmJiAvPCEtLy50ZXN0KHNlc3Npb24uZ2V0TGluZShyb3cpKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgcmV0dXJuICIiOwogICAgfTsKICAgIHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIHRhZyA9IG5ldyBUYWcoKTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiA9IHRhZy5zdGFydC5jb2x1bW4gKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1srK2ldOwogICAgICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIHRhZy50YWdOYW1lID0gdG9rZW4udmFsdWU7CiAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBmb3IgKGkrKzsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctY2xvc2UiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICcvPic7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwoKICAgIHRoaXMuX2ZpbmRFbmRUYWdJbkxpbmUgPSBmdW5jdGlvbihzZXNzaW9uLCByb3csIHRhZ05hbWUsIHN0YXJ0Q29sdW1uKSB7CiAgICAgICAgdmFyIHRva2VucyA9IHNlc3Npb24uZ2V0VG9rZW5zKHJvdyk7CiAgICAgICAgdmFyIGNvbHVtbiA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICBjb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICBpZiAoY29sdW1uIDwgc3RhcnRDb2x1bW4pCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2kgKyAxXTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi52YWx1ZSA9PSB0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLl9yZWFkVGFnRm9yd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSh0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3JlYWRUYWdCYWNrd2FyZCA9IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaXModG9rZW4sICJ0YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0YWcuY2xvc2luZyA9IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIik7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQucm93ID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuUm93KCk7CiAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0YWc7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXModG9rZW4sICJ0YWctbmFtZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgIHRhZy5zZWxmQ2xvc2luZyA9IHRva2VuLnZhbHVlID09ICIvPiI7CiAgICAgICAgICAgICAgICB0YWcuZW5kLnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKSk7CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKICAgIAogICAgdGhpcy5fcG9wID0gZnVuY3Rpb24oc3RhY2ssIHRhZykgewogICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciB0b3AgPSBzdGFja1tzdGFjay5sZW5ndGgtMV07CiAgICAgICAgICAgIGlmICghdGFnIHx8IHRvcC50YWdOYW1lID09IHRhZy50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25hbEVuZFRhZ3MuaGFzT3duUHJvcGVydHkodG9wLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGZpcnN0VGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKICAgICAgICAKICAgICAgICBpZiAoIWZpcnN0VGFnKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdykKICAgICAgICAgICAgICAgICYmIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIHNlc3Npb24uZ2V0TGluZShyb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBpc0JhY2t3YXJkID0gZmlyc3RUYWcuY2xvc2luZyB8fCBmaXJzdFRhZy5zZWxmQ2xvc2luZzsKICAgICAgICB2YXIgc3RhY2sgPSBbXTsKICAgICAgICB2YXIgdGFnOwogICAgICAgIAogICAgICAgIGlmICghaXNCYWNrd2FyZCkgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIHZhciBzdGFydCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4gKyBmaXJzdFRhZy50YWdOYW1lLmxlbmd0aCArIDIKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKGZpcnN0VGFnLnN0YXJ0LnJvdyA9PSBmaXJzdFRhZy5lbmQucm93KQogICAgICAgICAgICAgICAgc3RhcnQuY29sdW1uID0gZmlyc3RUYWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdGb3J3YXJkKGl0ZXJhdG9yKSkgewogICAgICAgICAgICAgICAgaWYgKHRhZy5zZWxmQ2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gKz0gdGFnLnRhZ05hbWUubGVuZ3RoICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gLT0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCB0YWcuZW5kKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmICh0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHN0YXJ0LCB0YWcuc3RhcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0YWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCByb3csIGZpcnN0VGFnLmVuZC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgZW5kID0gewogICAgICAgICAgICAgICAgcm93OiByb3csCiAgICAgICAgICAgICAgICBjb2x1bW46IGZpcnN0VGFnLnN0YXJ0LmNvbHVtbgogICAgICAgICAgICB9OwogICAgICAgICAgICAKICAgICAgICAgICAgd2hpbGUgKHRhZyA9IHRoaXMuX3JlYWRUYWdCYWNrd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAoIXRhZy5jbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9wKHN0YWNrLCB0YWcpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcuc3RhcnQucm93ID09IHRhZy5lbmQucm93ICYmIHRhZy5zdGFydC5jb2x1bW4gPCB0YWcuZW5kLmNvbHVtbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5zdGFydC5jb2x1bW4gPSB0YWcuZW5kLmNvbHVtbjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmdlLmZyb21Qb2ludHModGFnLnN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9odG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL21peGVkIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIE1peGVkRm9sZE1vZGUgPSByZXF1aXJlKCIuL21peGVkIikuRm9sZE1vZGU7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4veG1sIikuRm9sZE1vZGU7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24odm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpIHsKICAgIE1peGVkRm9sZE1vZGUuY2FsbCh0aGlzLCBuZXcgWG1sRm9sZE1vZGUodm9pZEVsZW1lbnRzLCBvcHRpb25hbFRhZ3MpLCB7CiAgICAgICAgImpzLSI6IG5ldyBDU3R5bGVGb2xkTW9kZSgpLAogICAgICAgICJjc3MtIjogbmV3IENTdHlsZUZvbGRNb2RlKCkKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBNaXhlZEZvbGRNb2RlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX2NvbXBsZXRpb25zIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCnZhciBjb21tb25BdHRyaWJ1dGVzID0gWwogICAgImFjY2Vzc2tleSIsCiAgICAiY2xhc3MiLAogICAgImNvbnRlbnRlZGl0YWJsZSIsCiAgICAiY29udGV4dG1lbnUiLAogICAgImRpciIsCiAgICAiZHJhZ2dhYmxlIiwKICAgICJkcm9wem9uZSIsCiAgICAiaGlkZGVuIiwKICAgICJpZCIsCiAgICAiaW5lcnQiLAogICAgIml0ZW1pZCIsCiAgICAiaXRlbXByb3AiLAogICAgIml0ZW1yZWYiLAogICAgIml0ZW1zY29wZSIsCiAgICAiaXRlbXR5cGUiLAogICAgImxhbmciLAogICAgInNwZWxsY2hlY2siLAogICAgInN0eWxlIiwKICAgICJ0YWJpbmRleCIsCiAgICAidGl0bGUiLAogICAgInRyYW5zbGF0ZSIKXTsKCnZhciBldmVudEF0dHJpYnV0ZXMgPSBbCiAgICAib25hYm9ydCIsCiAgICAib25ibHVyIiwKICAgICJvbmNhbmNlbCIsCiAgICAib25jYW5wbGF5IiwKICAgICJvbmNhbnBsYXl0aHJvdWdoIiwKICAgICJvbmNoYW5nZSIsCiAgICAib25jbGljayIsCiAgICAib25jbG9zZSIsCiAgICAib25jb250ZXh0bWVudSIsCiAgICAib25jdWVjaGFuZ2UiLAogICAgIm9uZGJsY2xpY2siLAogICAgIm9uZHJhZyIsCiAgICAib25kcmFnZW5kIiwKICAgICJvbmRyYWdlbnRlciIsCiAgICAib25kcmFnbGVhdmUiLAogICAgIm9uZHJhZ292ZXIiLAogICAgIm9uZHJhZ3N0YXJ0IiwKICAgICJvbmRyb3AiLAogICAgIm9uZHVyYXRpb25jaGFuZ2UiLAogICAgIm9uZW1wdGllZCIsCiAgICAib25lbmRlZCIsCiAgICAib25lcnJvciIsCiAgICAib25mb2N1cyIsCiAgICAib25pbnB1dCIsCiAgICAib25pbnZhbGlkIiwKICAgICJvbmtleWRvd24iLAogICAgIm9ua2V5cHJlc3MiLAogICAgIm9ua2V5dXAiLAogICAgIm9ubG9hZCIsCiAgICAib25sb2FkZWRkYXRhIiwKICAgICJvbmxvYWRlZG1ldGFkYXRhIiwKICAgICJvbmxvYWRzdGFydCIsCiAgICAib25tb3VzZWRvd24iLAogICAgIm9ubW91c2Vtb3ZlIiwKICAgICJvbm1vdXNlb3V0IiwKICAgICJvbm1vdXNlb3ZlciIsCiAgICAib25tb3VzZXVwIiwKICAgICJvbm1vdXNld2hlZWwiLAogICAgIm9ucGF1c2UiLAogICAgIm9ucGxheSIsCiAgICAib25wbGF5aW5nIiwKICAgICJvbnByb2dyZXNzIiwKICAgICJvbnJhdGVjaGFuZ2UiLAogICAgIm9ucmVzZXQiLAogICAgIm9uc2Nyb2xsIiwKICAgICJvbnNlZWtlZCIsCiAgICAib25zZWVraW5nIiwKICAgICJvbnNlbGVjdCIsCiAgICAib25zaG93IiwKICAgICJvbnN0YWxsZWQiLAogICAgIm9uc3VibWl0IiwKICAgICJvbnN1c3BlbmQiLAogICAgIm9udGltZXVwZGF0ZSIsCiAgICAib252b2x1bWVjaGFuZ2UiLAogICAgIm9ud2FpdGluZyIKXTsKCnZhciBnbG9iYWxBdHRyaWJ1dGVzID0gY29tbW9uQXR0cmlidXRlcy5jb25jYXQoZXZlbnRBdHRyaWJ1dGVzKTsKCnZhciBhdHRyaWJ1dGVNYXAgPSB7CiAgICAiYSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiB7Il9ibGFuayI6IDEsICJ0b3AiOiAxfSwgInBpbmciOiAxLCAicmVsIjogeyJub2ZvbGxvdyI6IDEsICJhbHRlcm5hdGUiOiAxLCAiYXV0aG9yIjogMSwgImJvb2ttYXJrIjogMSwgImhlbHAiOiAxLCAibGljZW5zZSI6IDEsICJuZXh0IjogMSwgIm5vcmVmZXJyZXIiOiAxLCAicHJlZmV0Y2giOiAxLCAicHJldiI6IDEsICJzZWFyY2giOiAxLCAidGFnIjogMX0sICJtZWRpYSI6IDEsICJocmVmbGFuZyI6IDEsICJ0eXBlIjogMX0sCiAgICAiYWJiciI6IHt9LAogICAgImFkZHJlc3MiOiB7fSwKICAgICJhcmVhIjogeyJzaGFwZSI6IDEsICJjb29yZHMiOiAxLCAiaHJlZiI6IDEsICJocmVmbGFuZyI6IDEsICJhbHQiOiAxLCAidGFyZ2V0IjogMSwgIm1lZGlhIjogMSwgInJlbCI6IDEsICJwaW5nIjogMSwgInR5cGUiOiAxfSwKICAgICJhcnRpY2xlIjogeyJwdWJkYXRlIjogMX0sCiAgICAiYXNpZGUiOiB7fSwKICAgICJhdWRpbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIm11dGVkIjogeyJtdXRlZCI6IDF9LCAicHJlbG9hZCI6IHsiYXV0byI6IDEsICJtZXRhZGF0YSI6IDEsICJub25lIjogMSB9fSwKICAgICJiIjoge30sCiAgICAiYmFzZSI6IHsiaHJlZiI6IDEsICJ0YXJnZXQiOiAxfSwKICAgICJiZGkiOiB7fSwKICAgICJiZG8iOiB7fSwKICAgICJibG9ja3F1b3RlIjogeyJjaXRlIjogMX0sCiAgICAiYm9keSI6IHsib25hZnRlcnByaW50IjogMSwgIm9uYmVmb3JlcHJpbnQiOiAxLCAib25iZWZvcmV1bmxvYWQiOiAxLCAib25oYXNoY2hhbmdlIjogMSwgIm9ubWVzc2FnZSI6IDEsICJvbm9mZmxpbmUiOiAxLCAib25wb3BzdGF0ZSI6IDEsICJvbnJlZG8iOiAxLCAib25yZXNpemUiOiAxLCAib25zdG9yYWdlIjogMSwgIm9udW5kbyI6IDEsICJvbnVubG9hZCI6IDF9LAogICAgImJyIjoge30sCiAgICAiYnV0dG9uIjogeyJhdXRvZm9jdXMiOiAxLCAiZGlzYWJsZWQiOiB7ImRpc2FibGVkIjogMX0sICJmb3JtIjogMSwgImZvcm1hY3Rpb24iOiAxLCAiZm9ybWVuY3R5cGUiOiAxLCAiZm9ybW1ldGhvZCI6IDEsICJmb3Jtbm92YWxpZGF0ZSI6IDEsICJmb3JtdGFyZ2V0IjogMSwgIm5hbWUiOiAxLCAidmFsdWUiOiAxLCAidHlwZSI6IHsiYnV0dG9uIjogMSwgInN1Ym1pdCI6IDF9fSwKICAgICJjYW52YXMiOiB7IndpZHRoIjogMSwgImhlaWdodCI6IDF9LAogICAgImNhcHRpb24iOiB7fSwKICAgICJjaXRlIjoge30sCiAgICAiY29kZSI6IHt9LAogICAgImNvbCI6IHsic3BhbiI6IDF9LAogICAgImNvbGdyb3VwIjogeyJzcGFuIjogMX0sCiAgICAiY29tbWFuZCI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDEsICJpY29uIjogMSwgImRpc2FibGVkIjogMSwgImNoZWNrZWQiOiAxLCAicmFkaW9ncm91cCI6IDEsICJjb21tYW5kIjogMX0sCiAgICAiZGF0YSI6IHt9LAogICAgImRhdGFsaXN0Ijoge30sCiAgICAiZGQiOiB7fSwKICAgICJkZWwiOiB7ImNpdGUiOiAxLCAiZGF0ZXRpbWUiOiAxfSwKICAgICJkZXRhaWxzIjogeyJvcGVuIjogMX0sCiAgICAiZGZuIjoge30sCiAgICAiZGlhbG9nIjogeyJvcGVuIjogMX0sCiAgICAiZGl2Ijoge30sCiAgICAiZGwiOiB7fSwKICAgICJkdCI6IHt9LAogICAgImVtIjoge30sCiAgICAiZW1iZWQiOiB7InNyYyI6IDEsICJoZWlnaHQiOiAxLCAid2lkdGgiOiAxLCAidHlwZSI6IDF9LAogICAgImZpZWxkc2V0IjogeyJkaXNhYmxlZCI6IDEsICJmb3JtIjogMSwgIm5hbWUiOiAxfSwKICAgICJmaWdjYXB0aW9uIjoge30sCiAgICAiZmlndXJlIjoge30sCiAgICAiZm9vdGVyIjoge30sCiAgICAiZm9ybSI6IHsiYWNjZXB0LWNoYXJzZXQiOiAxLCAiYWN0aW9uIjogMSwgImF1dG9jb21wbGV0ZSI6IDEsICJlbmN0eXBlIjogeyJtdWx0aXBhcnQvZm9ybS1kYXRhIjogMSwgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI6IDF9LCAibWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAibmFtZSI6IDEsICJub3ZhbGlkYXRlIjogMSwgInRhcmdldCI6IHsiX2JsYW5rIjogMSwgInRvcCI6IDF9fSwKICAgICJoMSI6IHt9LAogICAgImgyIjoge30sCiAgICAiaDMiOiB7fSwKICAgICJoNCI6IHt9LAogICAgImg1Ijoge30sCiAgICAiaDYiOiB7fSwKICAgICJoZWFkIjoge30sCiAgICAiaGVhZGVyIjoge30sCiAgICAiaHIiOiB7fSwKICAgICJodG1sIjogeyJtYW5pZmVzdCI6IDF9LAogICAgImkiOiB7fSwKICAgICJpZnJhbWUiOiB7Im5hbWUiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJzYW5kYm94IjogeyJhbGxvdy1zYW1lLW9yaWdpbiI6IDEsICJhbGxvdy10b3AtbmF2aWdhdGlvbiI6IDEsICJhbGxvdy1mb3JtcyI6IDEsICJhbGxvdy1zY3JpcHRzIjogMX0sICJzZWFtbGVzcyI6IHsic2VhbWxlc3MiOiAxfX0sCiAgICAiaW1nIjogeyJhbHQiOiAxLCAic3JjIjogMSwgImhlaWdodCI6IDEsICJ3aWR0aCI6IDEsICJ1c2VtYXAiOiAxLCAiaXNtYXAiOiAxfSwKICAgICJpbnB1dCI6IHsKICAgICAgICAidHlwZSI6IHsidGV4dCI6IDEsICJwYXNzd29yZCI6IDEsICJoaWRkZW4iOiAxLCAiY2hlY2tib3giOiAxLCAic3VibWl0IjogMSwgInJhZGlvIjogMSwgImZpbGUiOiAxLCAiYnV0dG9uIjogMSwgInJlc2V0IjogMSwgImltYWdlIjogMzEsICJjb2xvciI6IDEsICJkYXRlIjogMSwgImRhdGV0aW1lIjogMSwgImRhdGV0aW1lLWxvY2FsIjogMSwgImVtYWlsIjogMSwgIm1vbnRoIjogMSwgIm51bWJlciI6IDEsICJyYW5nZSI6IDEsICJzZWFyY2giOiAxLCAidGVsIjogMSwgInRpbWUiOiAxLCAidXJsIjogMSwgIndlZWsiOiAxfSwKICAgICAgICAiYWNjZXB0IjogMSwgImFsdCI6IDEsICJhdXRvY29tcGxldGUiOiB7Im9uIjogMSwgIm9mZiI6IDF9LCAiYXV0b2ZvY3VzIjogeyJhdXRvZm9jdXMiOiAxfSwgImNoZWNrZWQiOiB7ImNoZWNrZWQiOiAxfSwgImRpc2FibGVkIjogeyJkaXNhYmxlZCI6IDF9LCAiZm9ybSI6IDEsICJmb3JtYWN0aW9uIjogMSwgImZvcm1lbmN0eXBlIjogeyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOiAxLCAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI6IDEsICJ0ZXh0L3BsYWluIjogMX0sICJmb3JtbWV0aG9kIjogeyJnZXQiOiAxLCAicG9zdCI6IDF9LCAiZm9ybW5vdmFsaWRhdGUiOiB7ImZvcm1ub3ZhbGlkYXRlIjogMX0sICJmb3JtdGFyZ2V0IjogeyJfYmxhbmsiOiAxLCAiX3NlbGYiOiAxLCAiX3BhcmVudCI6IDEsICJfdG9wIjogMX0sICJoZWlnaHQiOiAxLCAibGlzdCI6IDEsICJtYXgiOiAxLCAibWF4bGVuZ3RoIjogMSwgIm1pbiI6IDEsICJtdWx0aXBsZSI6IHsibXVsdGlwbGUiOiAxfSwgIm5hbWUiOiAxLCAicGF0dGVybiI6IDEsICJwbGFjZWhvbGRlciI6IDEsICJyZWFkb25seSI6IHsicmVhZG9ubHkiOiAxfSwgInJlcXVpcmVkIjogeyJyZXF1aXJlZCI6IDF9LCAic2l6ZSI6IDEsICJzcmMiOiAxLCAic3RlcCI6IDEsICJ3aWR0aCI6IDEsICJmaWxlcyI6IDEsICJ2YWx1ZSI6IDF9LAogICAgImlucyI6IHsiY2l0ZSI6IDEsICJkYXRldGltZSI6IDF9LAogICAgImtiZCI6IHt9LAogICAgImtleWdlbiI6IHsiYXV0b2ZvY3VzIjogMSwgImNoYWxsZW5nZSI6IHsiY2hhbGxlbmdlIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAia2V5dHlwZSI6IHsicnNhIjogMSwgImRzYSI6IDEsICJlYyI6IDF9LCAibmFtZSI6IDF9LAogICAgImxhYmVsIjogeyJmb3JtIjogMSwgImZvciI6IDF9LAogICAgImxlZ2VuZCI6IHt9LAogICAgImxpIjogeyJ2YWx1ZSI6IDF9LAogICAgImxpbmsiOiB7ImhyZWYiOiAxLCAiaHJlZmxhbmciOiAxLCAicmVsIjogeyJzdHlsZXNoZWV0IjogMSwgImljb24iOiAxfSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJ0eXBlIjogeyJ0ZXh0L2NzcyI6IDEsICJpbWFnZS9wbmciOiAxLCAiaW1hZ2UvanBlZyI6IDEsICJpbWFnZS9naWYiOiAxfSwgInNpemVzIjogMX0sCiAgICAibWFpbiI6IHt9LAogICAgIm1hcCI6IHsibmFtZSI6IDF9LAogICAgIm1hcmsiOiB7fSwKICAgICJtYXRoIjoge30sCiAgICAibWVudSI6IHsidHlwZSI6IDEsICJsYWJlbCI6IDF9LAogICAgIm1ldGEiOiB7Imh0dHAtZXF1aXYiOiB7ImNvbnRlbnQtdHlwZSI6IDF9LCAibmFtZSI6IHsiZGVzY3JpcHRpb24iOiAxLCAia2V5d29yZHMiOiAxfSwgImNvbnRlbnQiOiB7InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI6IDF9LCAiY2hhcnNldCI6IDF9LAogICAgIm1ldGVyIjogeyJ2YWx1ZSI6IDEsICJtaW4iOiAxLCAibWF4IjogMSwgImxvdyI6IDEsICJoaWdoIjogMSwgIm9wdGltdW0iOiAxfSwKICAgICJuYXYiOiB7fSwKICAgICJub3NjcmlwdCI6IHsiaHJlZiI6IDF9LAogICAgIm9iamVjdCI6IHsicGFyYW0iOiAxLCAiZGF0YSI6IDEsICJ0eXBlIjogMSwgImhlaWdodCIgOiAxLCAid2lkdGgiOiAxLCAidXNlbWFwIjogMSwgIm5hbWUiOiAxLCAiZm9ybSI6IDEsICJjbGFzc2lkIjogMX0sCiAgICAib2wiOiB7InN0YXJ0IjogMSwgInJldmVyc2VkIjogMX0sCiAgICAib3B0Z3JvdXAiOiB7ImRpc2FibGVkIjogMSwgImxhYmVsIjogMX0sCiAgICAib3B0aW9uIjogeyJkaXNhYmxlZCI6IDEsICJzZWxlY3RlZCI6IDEsICJsYWJlbCI6IDEsICJ2YWx1ZSI6IDF9LAogICAgIm91dHB1dCI6IHsiZm9yIjogMSwgImZvcm0iOiAxLCAibmFtZSI6IDF9LAogICAgInAiOiB7fSwKICAgICJwYXJhbSI6IHsibmFtZSI6IDEsICJ2YWx1ZSI6IDF9LAogICAgInByZSI6IHt9LAogICAgInByb2dyZXNzIjogeyJ2YWx1ZSI6IDEsICJtYXgiOiAxfSwKICAgICJxIjogeyJjaXRlIjogMX0sCiAgICAicnAiOiB7fSwKICAgICJydCI6IHt9LAogICAgInJ1YnkiOiB7fSwKICAgICJzIjoge30sCiAgICAic2FtcCI6IHt9LAogICAgInNjcmlwdCI6IHsiY2hhcnNldCI6IDEsICJ0eXBlIjogeyJ0ZXh0L2phdmFzY3JpcHQiOiAxfSwgInNyYyI6IDEsICJkZWZlciI6IDEsICJhc3luYyI6IDF9LAogICAgInNlbGVjdCI6IHsiYXV0b2ZvY3VzIjogMSwgImRpc2FibGVkIjogMSwgImZvcm0iOiAxLCAibXVsdGlwbGUiOiB7Im11bHRpcGxlIjogMX0sICJuYW1lIjogMSwgInNpemUiOiAxLCAicmVhZG9ubHkiOnsicmVhZG9ubHkiOiAxfX0sCiAgICAic21hbGwiOiB7fSwKICAgICJzb3VyY2UiOiB7InNyYyI6IDEsICJ0eXBlIjogMSwgIm1lZGlhIjogMX0sCiAgICAic3BhbiI6IHt9LAogICAgInN0cm9uZyI6IHt9LAogICAgInN0eWxlIjogeyJ0eXBlIjogMSwgIm1lZGlhIjogeyJhbGwiOiAxLCAic2NyZWVuIjogMSwgInByaW50IjogMX0sICJzY29wZWQiOiAxfSwKICAgICJzdWIiOiB7fSwKICAgICJzdXAiOiB7fSwKICAgICJzdmciOiB7fSwKICAgICJ0YWJsZSI6IHsic3VtbWFyeSI6IDF9LAogICAgInRib2R5Ijoge30sCiAgICAidGQiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMX0sCiAgICAidGV4dGFyZWEiOiB7ImF1dG9mb2N1cyI6IHsiYXV0b2ZvY3VzIjogMX0sICJkaXNhYmxlZCI6IHsiZGlzYWJsZWQiOiAxfSwgImZvcm0iOiAxLCAibWF4bGVuZ3RoIjogMSwgIm5hbWUiOiAxLCAicGxhY2Vob2xkZXIiOiAxLCAicmVhZG9ubHkiOiB7InJlYWRvbmx5IjogMX0sICJyZXF1aXJlZCI6IHsicmVxdWlyZWQiOiAxfSwgInJvd3MiOiAxLCAiY29scyI6IDEsICJ3cmFwIjogeyJvbiI6IDEsICJvZmYiOiAxLCAiaGFyZCI6IDEsICJzb2Z0IjogMX19LAogICAgInRmb290Ijoge30sCiAgICAidGgiOiB7ImhlYWRlcnMiOiAxLCAicm93c3BhbiI6IDEsICJjb2xzcGFuIjogMSwgInNjb3BlIjogMX0sCiAgICAidGhlYWQiOiB7fSwKICAgICJ0aW1lIjogeyJkYXRldGltZSI6IDF9LAogICAgInRpdGxlIjoge30sCiAgICAidHIiOiB7fSwKICAgICJ0cmFjayI6IHsia2luZCI6IDEsICJzcmMiOiAxLCAic3JjbGFuZyI6IDEsICJsYWJlbCI6IDEsICJkZWZhdWx0IjogMX0sCiAgICAic2VjdGlvbiI6IHt9LAogICAgInN1bW1hcnkiOiB7fSwKICAgICJ1Ijoge30sCiAgICAidWwiOiB7fSwKICAgICJ2YXIiOiB7fSwKICAgICJ2aWRlbyI6IHsic3JjIjogMSwgImF1dG9idWZmZXIiOiAxLCAiYXV0b3BsYXkiOiB7ImF1dG9wbGF5IjogMX0sICJsb29wIjogeyJsb29wIjogMX0sICJjb250cm9scyI6IHsiY29udHJvbHMiOiAxfSwgIndpZHRoIjogMSwgImhlaWdodCI6IDEsICJwb3N0ZXIiOiAxLCAibXV0ZWQiOiB7Im11dGVkIjogMX0sICJwcmVsb2FkIjogeyJhdXRvIjogMSwgIm1ldGFkYXRhIjogMSwgIm5vbmUiOiAxfX0sCiAgICAid2JyIjoge30KfTsKCnZhciBlbGVtZW50cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcCk7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKZnVuY3Rpb24gZmluZFRhZ05hbWUoc2Vzc2lvbiwgcG9zKSB7CiAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3Mucm93LCBwb3MuY29sdW1uKTsKICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgd2hpbGUgKHRva2VuICYmICFpcyh0b2tlbiwgInRhZy1uYW1lIikpewogICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICB9CiAgICBpZiAodG9rZW4pCiAgICAgICAgcmV0dXJuIHRva2VuLnZhbHVlOwp9CgpmdW5jdGlvbiBmaW5kQXR0cmlidXRlTmFtZShzZXNzaW9uLCBwb3MpIHsKICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvcy5yb3csIHBvcy5jb2x1bW4pOwogICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CiAgICB3aGlsZSAodG9rZW4gJiYgIWlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSl7CiAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgIH0KICAgIGlmICh0b2tlbikKICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7Cn0KCnZhciBIdG1sQ29tcGxldGlvbnMgPSBmdW5jdGlvbigpIHsKCn07CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCkgewogICAgICAgIHZhciB0b2tlbiA9IHNlc3Npb24uZ2V0VG9rZW5BdChwb3Mucm93LCBwb3MuY29sdW1uKTsKCiAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIGlmIChpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctb3BlbiIpIHx8IGlzKHRva2VuLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRhZ0NvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLXdoaXRlc3BhY2UiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1uYW1lIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZUNvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlQ29tcGxldGlvbnMoc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KTsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShwb3Mucm93KS5zdWJzdHIoMCwgcG9zLmNvbHVtbik7CiAgICAgICAgaWYgKC8mW2Etel0qJC9pLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEhUTUxFbnRpdHlDb21wbGV0aW9ucyhzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpOwoKICAgICAgICByZXR1cm4gW107CiAgICB9OwoKICAgIHRoaXMuZ2V0VGFnQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gZWxlbWVudHMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsCiAgICAgICAgICAgICAgICBtZXRhOiAidGFnIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0QXR0cmlidXRlQ29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICB2YXIgdGFnTmFtZSA9IGZpbmRUYWdOYW1lKHNlc3Npb24sIHBvcyk7CiAgICAgICAgaWYgKCF0YWdOYW1lKQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBnbG9iYWxBdHRyaWJ1dGVzOwogICAgICAgIGlmICh0YWdOYW1lIGluIGF0dHJpYnV0ZU1hcCkgewogICAgICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcy5jb25jYXQoT2JqZWN0LmtleXMoYXR0cmlidXRlTWFwW3RhZ05hbWVdKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLm1hcChmdW5jdGlvbihhdHRyaWJ1dGUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogYXR0cmlidXRlLAogICAgICAgICAgICAgICAgc25pcHBldDogYXR0cmlidXRlICsgJz0iJDAiJywKICAgICAgICAgICAgICAgIG1ldGE6ICJhdHRyaWJ1dGUiLAogICAgICAgICAgICAgICAgc2NvcmU6IDEwMDAwMDAKICAgICAgICAgICAgfTsKICAgICAgICB9KTsKICAgIH07CgogICAgdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHRhZ05hbWUgPSBmaW5kVGFnTmFtZShzZXNzaW9uLCBwb3MpOwogICAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gZmluZEF0dHJpYnV0ZU5hbWUoc2Vzc2lvbiwgcG9zKTsKICAgICAgICAKICAgICAgICBpZiAoIXRhZ05hbWUpCiAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICB2YXIgdmFsdWVzID0gW107CiAgICAgICAgaWYgKHRhZ05hbWUgaW4gYXR0cmlidXRlTWFwICYmIGF0dHJpYnV0ZU5hbWUgaW4gYXR0cmlidXRlTWFwW3RhZ05hbWVdICYmIHR5cGVvZiBhdHRyaWJ1dGVNYXBbdGFnTmFtZV1bYXR0cmlidXRlTmFtZV0gPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZU1hcFt0YWdOYW1lXVthdHRyaWJ1dGVOYW1lXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2YWx1ZXMubWFwKGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGNhcHRpb246IHZhbHVlLAogICAgICAgICAgICAgICAgc25pcHBldDogdmFsdWUsCiAgICAgICAgICAgICAgICBtZXRhOiAiYXR0cmlidXRlIHZhbHVlIiwKICAgICAgICAgICAgICAgIHNjb3JlOiAxMDAwMDAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0SFRNTEVudGl0eUNvbXBsZXRpb25zID0gZnVuY3Rpb24oc3RhdGUsIHNlc3Npb24sIHBvcywgcHJlZml4KSB7CiAgICAgICAgdmFyIHZhbHVlcyA9IFsnQWFjdXRlOycsICdhYWN1dGU7JywgJ0FjaXJjOycsICdhY2lyYzsnLCAnYWN1dGU7JywgJ0FFbGlnOycsICdhZWxpZzsnLCAnQWdyYXZlOycsICdhZ3JhdmU7JywgJ2FsZWZzeW07JywgJ0FscGhhOycsICdhbHBoYTsnLCAnYW1wOycsICdhbmQ7JywgJ2FuZzsnLCAnQXJpbmc7JywgJ2FyaW5nOycsICdhc3ltcDsnLCAnQXRpbGRlOycsICdhdGlsZGU7JywgJ0F1bWw7JywgJ2F1bWw7JywgJ2JkcXVvOycsICdCZXRhOycsICdiZXRhOycsICdicnZiYXI7JywgJ2J1bGw7JywgJ2NhcDsnLCAnQ2NlZGlsOycsICdjY2VkaWw7JywgJ2NlZGlsOycsICdjZW50OycsICdDaGk7JywgJ2NoaTsnLCAnY2lyYzsnLCAnY2x1YnM7JywgJ2Nvbmc7JywgJ2NvcHk7JywgJ2NyYXJyOycsICdjdXA7JywgJ2N1cnJlbjsnLCAnRGFnZ2VyOycsICdkYWdnZXI7JywgJ2RBcnI7JywgJ2RhcnI7JywgJ2RlZzsnLCAnRGVsdGE7JywgJ2RlbHRhOycsICdkaWFtczsnLCAnZGl2aWRlOycsICdFYWN1dGU7JywgJ2VhY3V0ZTsnLCAnRWNpcmM7JywgJ2VjaXJjOycsICdFZ3JhdmU7JywgJ2VncmF2ZTsnLCAnZW1wdHk7JywgJ2Vtc3A7JywgJ2Vuc3A7JywgJ0Vwc2lsb247JywgJ2Vwc2lsb247JywgJ2VxdWl2OycsICdFdGE7JywgJ2V0YTsnLCAnRVRIOycsICdldGg7JywgJ0V1bWw7JywgJ2V1bWw7JywgJ2V1cm87JywgJ2V4aXN0OycsICdmbm9mOycsICdmb3JhbGw7JywgJ2ZyYWMxMjsnLCAnZnJhYzE0OycsICdmcmFjMzQ7JywgJ2ZyYXNsOycsICdHYW1tYTsnLCAnZ2FtbWE7JywgJ2dlOycsICdndDsnLCAnaEFycjsnLCAnaGFycjsnLCAnaGVhcnRzOycsICdoZWxsaXA7JywgJ0lhY3V0ZTsnLCAnaWFjdXRlOycsICdJY2lyYzsnLCAnaWNpcmM7JywgJ2lleGNsOycsICdJZ3JhdmU7JywgJ2lncmF2ZTsnLCAnaW1hZ2U7JywgJ2luZmluOycsICdpbnQ7JywgJ0lvdGE7JywgJ2lvdGE7JywgJ2lxdWVzdDsnLCAnaXNpbjsnLCAnSXVtbDsnLCAnaXVtbDsnLCAnS2FwcGE7JywgJ2thcHBhOycsICdMYW1iZGE7JywgJ2xhbWJkYTsnLCAnbGFuZzsnLCAnbGFxdW87JywgJ2xBcnI7JywgJ2xhcnI7JywgJ2xjZWlsOycsICdsZHF1bzsnLCAnbGU7JywgJ2xmbG9vcjsnLCAnbG93YXN0OycsICdsb3o7JywgJ2xybTsnLCAnbHNhcXVvOycsICdsc3F1bzsnLCAnbHQ7JywgJ21hY3I7JywgJ21kYXNoOycsICdtaWNybzsnLCAnbWlkZG90OycsICdtaW51czsnLCAnTXU7JywgJ211OycsICduYWJsYTsnLCAnbmJzcDsnLCAnbmRhc2g7JywgJ25lOycsICduaTsnLCAnbm90OycsICdub3RpbjsnLCAnbnN1YjsnLCAnTnRpbGRlOycsICdudGlsZGU7JywgJ051OycsICdudTsnLCAnT2FjdXRlOycsICdvYWN1dGU7JywgJ09jaXJjOycsICdvY2lyYzsnLCAnT0VsaWc7JywgJ29lbGlnOycsICdPZ3JhdmU7JywgJ29ncmF2ZTsnLCAnb2xpbmU7JywgJ09tZWdhOycsICdvbWVnYTsnLCAnT21pY3JvbjsnLCAnb21pY3JvbjsnLCAnb3BsdXM7JywgJ29yOycsICdvcmRmOycsICdvcmRtOycsICdPc2xhc2g7JywgJ29zbGFzaDsnLCAnT3RpbGRlOycsICdvdGlsZGU7JywgJ290aW1lczsnLCAnT3VtbDsnLCAnb3VtbDsnLCAncGFyYTsnLCAncGFydDsnLCAncGVybWlsOycsICdwZXJwOycsICdQaGk7JywgJ3BoaTsnLCAnUGk7JywgJ3BpOycsICdwaXY7JywgJ3BsdXNtbjsnLCAncG91bmQ7JywgJ1ByaW1lOycsICdwcmltZTsnLCAncHJvZDsnLCAncHJvcDsnLCAnUHNpOycsICdwc2k7JywgJ3F1b3Q7JywgJ3JhZGljOycsICdyYW5nOycsICdyYXF1bzsnLCAnckFycjsnLCAncmFycjsnLCAncmNlaWw7JywgJ3JkcXVvOycsICdyZWFsOycsICdyZWc7JywgJ3JmbG9vcjsnLCAnUmhvOycsICdyaG87JywgJ3JsbTsnLCAncnNhcXVvOycsICdyc3F1bzsnLCAnc2JxdW87JywgJ1NjYXJvbjsnLCAnc2Nhcm9uOycsICdzZG90OycsICdzZWN0OycsICdzaHk7JywgJ1NpZ21hOycsICdzaWdtYTsnLCAnc2lnbWFmOycsICdzaW07JywgJ3NwYWRlczsnLCAnc3ViOycsICdzdWJlOycsICdzdW07JywgJ3N1cDsnLCAnc3VwMTsnLCAnc3VwMjsnLCAnc3VwMzsnLCAnc3VwZTsnLCAnc3psaWc7JywgJ1RhdTsnLCAndGF1OycsICd0aGVyZTQ7JywgJ1RoZXRhOycsICd0aGV0YTsnLCAndGhldGFzeW07JywgJ3RoaW5zcDsnLCAnVEhPUk47JywgJ3Rob3JuOycsICd0aWxkZTsnLCAndGltZXM7JywgJ3RyYWRlOycsICdVYWN1dGU7JywgJ3VhY3V0ZTsnLCAndUFycjsnLCAndWFycjsnLCAnVWNpcmM7JywgJ3VjaXJjOycsICdVZ3JhdmU7JywgJ3VncmF2ZTsnLCAndW1sOycsICd1cHNpaDsnLCAnVXBzaWxvbjsnLCAndXBzaWxvbjsnLCAnVXVtbDsnLCAndXVtbDsnLCAnd2VpZXJwOycsICdYaTsnLCAneGk7JywgJ1lhY3V0ZTsnLCAneWFjdXRlOycsICd5ZW47JywgJ1l1bWw7JywgJ3l1bWw7JywgJ1pldGE7JywgJ3pldGE7JywgJ3p3ajsnLCAnenduajsnXTsKCiAgICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgY2FwdGlvbjogdmFsdWUsCiAgICAgICAgICAgICAgICBzbmlwcGV0OiB2YWx1ZSwKICAgICAgICAgICAgICAgIG1ldGE6ICJodG1sIGVudGl0eSIsCiAgICAgICAgICAgICAgICBzY29yZTogMTAwMDAwMAogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCn0pLmNhbGwoSHRtbENvbXBsZXRpb25zLnByb3RvdHlwZSk7CgpleHBvcnRzLkh0bWxDb21wbGV0aW9ucyA9IEh0bWxDb21wbGV0aW9uczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9saWIvbGFuZyIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0IiwiYWNlL21vZGUvY3NzIiwiYWNlL21vZGUvaHRtbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy9odG1sIiwiYWNlL21vZGUvaHRtbF9jb21wbGV0aW9ucyIsImFjZS93b3JrZXIvd29ya2VyX2NsaWVudCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi9saWIvbGFuZyIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgSmF2YVNjcmlwdE1vZGUgPSByZXF1aXJlKCIuL2phdmFzY3JpcHQiKS5Nb2RlOwp2YXIgQ3NzTW9kZSA9IHJlcXVpcmUoIi4vY3NzIikuTW9kZTsKdmFyIEh0bWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vaHRtbF9oaWdobGlnaHRfcnVsZXMiKS5IdG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwp2YXIgSHRtbENvbXBsZXRpb25zID0gcmVxdWlyZSgiLi9odG1sX2NvbXBsZXRpb25zIikuSHRtbENvbXBsZXRpb25zOwp2YXIgV29ya2VyQ2xpZW50ID0gcmVxdWlyZSgiLi4vd29ya2VyL3dvcmtlcl9jbGllbnQiKS5Xb3JrZXJDbGllbnQ7CnZhciB2b2lkRWxlbWVudHMgPSBbImFyZWEiLCAiYmFzZSIsICJiciIsICJjb2wiLCAiZW1iZWQiLCAiaHIiLCAiaW1nIiwgImlucHV0IiwgImtleWdlbiIsICJsaW5rIiwgIm1ldGEiLCAibWVudWl0ZW0iLCAicGFyYW0iLCAic291cmNlIiwgInRyYWNrIiwgIndiciJdOwp2YXIgb3B0aW9uYWxFbmRUYWdzID0gWyJsaSIsICJkdCIsICJkZCIsICJwIiwgInJ0IiwgInJwIiwgIm9wdGdyb3VwIiwgIm9wdGlvbiIsICJjb2xncm91cCIsICJ0ZCIsICJ0aCJdOwoKdmFyIE1vZGUgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB0aGlzLmZyYWdtZW50Q29udGV4dCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudENvbnRleHQ7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gSHRtbEhpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwogICAgdGhpcy4kY29tcGxldGVyID0gbmV3IEh0bWxDb21wbGV0aW9ucygpOwogICAgCiAgICB0aGlzLmNyZWF0ZU1vZGVEZWxlZ2F0ZXMoewogICAgICAgICJqcy0iOiBKYXZhU2NyaXB0TW9kZSwKICAgICAgICAiY3NzLSI6IENzc01vZGUKICAgIH0pOwogICAgCiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBIdG1sRm9sZE1vZGUodGhpcy52b2lkRWxlbWVudHMsIGxhbmcuYXJyYXlUb01hcChvcHRpb25hbEVuZFRhZ3MpKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLnZvaWRFbGVtZW50cyA9IGxhbmcuYXJyYXlUb01hcCh2b2lkRWxlbWVudHMpOwoKICAgIHRoaXMuZ2V0TmV4dExpbmVJbmRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgdGFiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgIH07CgogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIHRoaXMuZ2V0Q29tcGxldGlvbnMgPSBmdW5jdGlvbihzdGF0ZSwgc2Vzc2lvbiwgcG9zLCBwcmVmaXgpIHsKICAgICAgICByZXR1cm4gdGhpcy4kY29tcGxldGVyLmdldENvbXBsZXRpb25zKHN0YXRlLCBzZXNzaW9uLCBwb3MsIHByZWZpeCk7CiAgICB9OwoKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yICE9IE1vZGUpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvaHRtbF93b3JrZXIiLCAiV29ya2VyIik7CiAgICAgICAgd29ya2VyLmF0dGFjaFRvRG9jdW1lbnQoc2Vzc2lvbi5nZXREb2N1bWVudCgpKTsKCiAgICAgICAgaWYgKHRoaXMuZnJhZ21lbnRDb250ZXh0KQogICAgICAgICAgICB3b3JrZXIuY2FsbCgic2V0T3B0aW9ucyIsIFt7Y29udGV4dDogdGhpcy5mcmFnbWVudENvbnRleHR9XSk7CgogICAgICAgIHdvcmtlci5vbigiZXJyb3IiLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMoZS5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2h0bWwiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS92aXN1YWxmb3JjZV9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL2h0bWxfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgSHRtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi4vbW9kZS9odG1sX2hpZ2hsaWdodF9ydWxlcyIpLkh0bWxIaWdobGlnaHRSdWxlczsKCmZ1bmN0aW9uIHN0cmluZyhvcHRpb25zKSB7CiAgICByZXR1cm4gewogICAgICAgIHRva2VuOiBvcHRpb25zLnRva2VuICsgIi5zdGFydCIsCiAgICAgICAgcmVnZXg6IG9wdGlvbnMuc3RhcnQsCiAgICAgICAgcHVzaDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXggOiBvcHRpb25zLmVzY2FwZQogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW46IG9wdGlvbnMudG9rZW4gKyAiLmVuZCIsCiAgICAgICAgICAgIHJlZ2V4OiBvcHRpb25zLnN0YXJ0LAogICAgICAgICAgICBuZXh0OiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuOiBvcHRpb25zLnRva2VuCiAgICAgICAgfV0KICAgIH07Cn0KdmFyIFZpc3VhbGZvcmNlSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkTWFwcGVyID0gdGhpcy5jcmVhdGVLZXl3b3JkTWFwcGVyKHsKICAgICAgICAidmFyaWFibGUubGFuZ3VhZ2UiOgogICAgICAgICAgICAiJEFjdGlvbnwkQXBpfCRDb21wb25lbnR8JENvbXBvbmVudExhYmVsfCRDdXJyZW50UGFnZXwkRmllbGRTZXR8JExhYmVsfCRMYWJlbHwiICsKICAgICAgICAgICAgIiRPYmplY3RUeXBlfCRPcmdhbml6YXRpb258JFBhZ2V8JFBlcm1pc3Npb258JFByb2ZpbGV8JFJlc291cmNlfCRTQ29udHJvbHwiICsKICAgICAgICAgICAgIiRTZXR1cHwkU2l0ZXwkU3lzdGVtLk9yaWdpbkRhdGVUaW1lfCRVc2VyfCRVc2VyUm9sZXwiICsKICAgICAgICAgICAgIlNpdGV8VUlUaGVtZXxVSVRoZW1lRGlzcGxheWVkIiwKICAgICAgICAia2V5d29yZCI6CiAgICAgICAgICAgICIiLAogICAgICAgICJzdG9yYWdlLnR5cGUiOgogICAgICAgICAgICAiIiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UiOgogICAgICAgICAgICAidHJ1ZXxmYWxzZXxudWxsfFRSVUV8RkFMU0V8TlVMTCIsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOgogICAgICAgICAgICAiREFURXxEQVRFVkFMVUV8REFURVRJTUVWQUxVRXxEQVl8TU9OVEh8Tk9XfFRPREFZfFlFQVJ8QkxBTktWQUxVRXxJU0JMQU5LfCIgKwogICAgICAgICAgICAiTlVMTFZBTFVFfFBSSU9SVkFMVUV8QU5EfENBU0V8SUZ8SVNDSEFOR0VEfElTTkVXfElTTlVNQkVSfE5PVHxPUnxBQlN8IiArCiAgICAgICAgICAgICJDRUlMSU5HfEVYUHxGTE9PUnxMTnxMT0d8TUFYfE1JTnxNT0R8Uk9VTkR8U1FSVHxCRUdJTlN8QlJ8Q0FTRVNBRkVJRHwiICsKICAgICAgICAgICAgIkNPTlRBSU5TfEZJTkR8R0VUU0VTU0lPTklEfEhUTUxFTkNPREV8SVNQSUNLVkFMfEpTRU5DT0RFfEpTSU5IVE1MRU5DT0RFfCIgKwogICAgICAgICAgICAiTEVGVHxMRU58TE9XRVJ8TFBBRHxNSUR8UklHSFR8UlBBRHxTVUJTVElUVVRFfFRFWFR8VFJJTXxVUFBFUnxVUkxFTkNPREV8VkFMVUV8IiArCiAgICAgICAgICAgICJHRVRSRUNPUkRJRFN8SU5DTFVERXxMSU5LVE98UkVHRVh8UkVRVUlSRVNDUklQVHxVUkxGT1J8VkxPT0tVUHxIVE1MRU5DT0RFfEpTRU5DT0RFfCIgKwogICAgICAgICAgICAiSlNJTkhUTUxFTkNPREV8VVJMRU5DT0RFIgogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICBIdG1sSGlnaGxpZ2h0UnVsZXMuY2FsbCh0aGlzKTsKICAgIHZhciBoYnMgPSB7CiAgICAgICAgdG9rZW4gOiAia2V5d29yZC5zdGFydCIsCiAgICAgICAgcmVnZXggOiAieyEiLAogICAgICAgIHB1c2ggOiAiVmlzdWFsZm9yY2UiCiAgICB9OwogICAgZm9yICh2YXIga2V5IGluIHRoaXMuJHJ1bGVzKSB7CiAgICAgICAgdGhpcy4kcnVsZXNba2V5XS51bnNoaWZ0KGhicyk7CiAgICB9CiAgICB0aGlzLiRydWxlcy5WaXN1YWxmb3JjZSA9IFsKICAgICAgICBzdHJpbmcoewogICAgICAgICAgICBzdGFydDogJyInLAogICAgICAgICAgICBlc2NhcGU6IC9cXFtidG5mciInXFxdLywKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICBtdWx0aWxpbmU6IHRydWUKICAgICAgICB9KSwKICAgICAgICBzdHJpbmcoewogICAgICAgICAgICBzdGFydDogIiciLAogICAgICAgICAgICBlc2NhcGU6IC9cXFtidG5mciInXFxdLywKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmciLAogICAgICAgICAgICBtdWx0aWxpbmU6IHRydWUKICAgICAgICB9KSwKICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29tbWVudC5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgIHB1c2g6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50LmVuZCIsIHJlZ2V4IDogIlxcKlxcL3woPz19KSIsIG5leHQgOiAicG9wIn0sCiAgICAgICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogImNvbW1lbnQiLCBjYXNlSW5zZW5zaXRpdmU6IHRydWV9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQuZW5kIiwKICAgICAgICAgICAgcmVnZXggOiAifSIsCiAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICByZWdleCA6IC9bYS16QS1aJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcZCRfXHUwMGExLVx1ZmZmZl0qXGIvCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAvPT18PD58IT18PD18Pj18JiZ8XHxcfHxbK1wtKi9eKCk9PD4mXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXggOiAvWz86LDsuXS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLmxwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogL1tcWyh7XS8KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgIHJlZ2V4IDogL1tcXSl9XS8KICAgICAgICB9CiAgICBdOwoKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKfTsKCm9vcC5pbmhlcml0cyhWaXN1YWxmb3JjZUhpZ2hsaWdodFJ1bGVzLCBIdG1sSGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5WaXN1YWxmb3JjZUhpZ2hsaWdodFJ1bGVzID0gVmlzdWFsZm9yY2VIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3Zpc3VhbGZvcmNlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9odG1sIiwiYWNlL21vZGUvdmlzdWFsZm9yY2VfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsImFjZS9tb2RlL2ZvbGRpbmcvaHRtbCJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIEh0bWxNb2RlID0gcmVxdWlyZSgiLi9odG1sIikuTW9kZTsKdmFyIFZpc3VhbGZvcmNlSGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3Zpc3VhbGZvcmNlX2hpZ2hsaWdodF9ydWxlcyIpLlZpc3VhbGZvcmNlSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBIdG1sRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvaHRtbCIpLkZvbGRNb2RlOwoKZnVuY3Rpb24gVmlzdWFsZm9yY2VNb2RlKCkgewogICAgSHRtbE1vZGUuY2FsbCh0aGlzKTsKCiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gVmlzdWFsZm9yY2VIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEh0bWxGb2xkTW9kZSgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IFhtbEJlaGF2aW91cigpOwp9Cgpvb3AuaW5oZXJpdHMoVmlzdWFsZm9yY2VNb2RlLCBIdG1sTW9kZSk7CgpWaXN1YWxmb3JjZU1vZGUucHJvdG90eXBlLmVtbWV0Q29uZmlnID0gewogICAgcHJvZmlsZTogInhodG1sIgp9OwoKZXhwb3J0cy5Nb2RlID0gVmlzdWFsZm9yY2VNb2RlOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9tb2RlL3Zpc3VhbGZvcmNlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-wollok.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHRfaGlnaGxpZ2h0X3J1bGVzIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCIgOiBbIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MudGFnIiwKICAgICAgICAgICAgcmVnZXggOiAiQFtcXHdcXGRfXSsiIC8vIFRPRE86IGZpeCBlbWFpbCBhZGRyZXNzZXMKICAgICAgICB9LCAKICAgICAgICBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0VGFnUnVsZSgpLAogICAgICAgIHsKICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogImNvbW1lbnQuZG9jIiwKICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB0cnVlCiAgICAgICAgfV0KICAgIH07Cn07Cgpvb3AuaW5oZXJpdHMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUgPSBmdW5jdGlvbihzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYy50YWcuc3RvcmFnZS50eXBlIiwKICAgICAgICByZWdleCA6ICJcXGIoPzpUT0RPfEZJWE1FfFhYWHxIQUNLKVxcYiIKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0U3RhcnRSdWxlID0gZnVuY3Rpb24oc3RhcnQpIHsKICAgIHJldHVybiB7CiAgICAgICAgdG9rZW4gOiAiY29tbWVudC5kb2MiLCAvLyBkb2MgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcL1xcKig/PVxcKikiLAogICAgICAgIG5leHQgIDogc3RhcnQKICAgIH07Cn07CgpEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSA9IGZ1bmN0aW9uIChzdGFydCkgewogICAgcmV0dXJuIHsKICAgICAgICB0b2tlbiA6ICJjb21tZW50LmRvYyIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgIHJlZ2V4IDogIlxcKlxcLyIsCiAgICAgICAgbmV4dCAgOiBzdGFydAogICAgfTsKfTsKCgpleHBvcnRzLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IERvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2RvY19jb21tZW50X2hpZ2hsaWdodF9ydWxlcyIpLkRvY0NvbW1lbnRIaWdobGlnaHRSdWxlczsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7CnZhciBpZGVudGlmaWVyUmUgPSAiW2EtekEtWlxcJF9cdTAwYTEtXHVmZmZmXVthLXpBLVpcXGRcXCRfXHUwMGExLVx1ZmZmZl0qIjsKCnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICB2YXIga2V5d29yZE1hcHBlciA9IHRoaXMuY3JlYXRlS2V5d29yZE1hcHBlcih7CiAgICAgICAgInZhcmlhYmxlLmxhbmd1YWdlIjoKICAgICAgICAgICAgIkFycmF5fEJvb2xlYW58RGF0ZXxGdW5jdGlvbnxJdGVyYXRvcnxOdW1iZXJ8T2JqZWN0fFJlZ0V4cHxTdHJpbmd8UHJveHl8IiAgKyAvLyBDb25zdHJ1Y3RvcnMKICAgICAgICAgICAgIk5hbWVzcGFjZXxRTmFtZXxYTUx8WE1MTGlzdHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBFNFgKICAgICAgICAgICAgIkFycmF5QnVmZmVyfEZsb2F0MzJBcnJheXxGbG9hdDY0QXJyYXl8SW50MTZBcnJheXxJbnQzMkFycmF5fEludDhBcnJheXwiICAgKwogICAgICAgICAgICAiVWludDE2QXJyYXl8VWludDMyQXJyYXl8VWludDhBcnJheXxVaW50OENsYW1wZWRBcnJheXwiICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICJFcnJvcnxFdmFsRXJyb3J8SW50ZXJuYWxFcnJvcnxSYW5nZUVycm9yfFJlZmVyZW5jZUVycm9yfFN0b3BJdGVyYXRpb258IiAgICsgLy8gRXJyb3JzCiAgICAgICAgICAgICJTeW50YXhFcnJvcnxUeXBlRXJyb3J8VVJJRXJyb3J8IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgImRlY29kZVVSSXxkZWNvZGVVUklDb21wb25lbnR8ZW5jb2RlVVJJfGVuY29kZVVSSUNvbXBvbmVudHxldmFsfGlzRmluaXRlfCIgKyAvLyBOb24tY29uc3RydWN0b3IgZnVuY3Rpb25zCiAgICAgICAgICAgICJpc05hTnxwYXJzZUZsb2F0fHBhcnNlSW50fCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgIkpTT058TWF0aHwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAvLyBPdGhlcgogICAgICAgICAgICAidGhpc3xhcmd1bWVudHN8cHJvdG90eXBlfHdpbmRvd3xkb2N1bWVudCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIC8vIFBzZXVkbwogICAgICAgICJrZXl3b3JkIjoKICAgICAgICAgICAgImNvbnN0fHlpZWxkfGltcG9ydHxnZXR8c2V0fGFzeW5jfGF3YWl0fCIgKwogICAgICAgICAgICAiYnJlYWt8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufCIgKwogICAgICAgICAgICAiaWZ8aW58b2Z8aW5zdGFuY2VvZnxuZXd8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8dHlwZW9mfGxldHx2YXJ8d2hpbGV8d2l0aHxkZWJ1Z2dlcnwiICsKICAgICAgICAgICAgIl9fcGFyZW50X198X19jb3VudF9ffGVzY2FwZXx1bmVzY2FwZXx3aXRofF9fcHJvdG9fX3wiICsKICAgICAgICAgICAgImNsYXNzfGVudW18ZXh0ZW5kc3xzdXBlcnxleHBvcnR8aW1wbGVtZW50c3xwcml2YXRlfHB1YmxpY3xpbnRlcmZhY2V8cGFja2FnZXxwcm90ZWN0ZWR8c3RhdGljIiwKICAgICAgICAic3RvcmFnZS50eXBlIjoKICAgICAgICAgICAgImNvbnN0fGxldHx2YXJ8ZnVuY3Rpb24iLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6CiAgICAgICAgICAgICJudWxsfEluZmluaXR5fE5hTnx1bmRlZmluZWQiLAogICAgICAgICJzdXBwb3J0LmZ1bmN0aW9uIjoKICAgICAgICAgICAgImFsZXJ0IiwKICAgICAgICAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiI6ICJ0cnVlfGZhbHNlIgogICAgfSwgImlkZW50aWZpZXIiKTsKICAgIHZhciBrd0JlZm9yZVJlID0gImNhc2V8ZG98ZWxzZXxmaW5hbGx5fGlufGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2Z8eWllbGR8dm9pZCI7CgogICAgdmFyIGVzY2FwZWRSZSA9ICJcXFxcKD86eFswLTlhLWZBLUZdezJ9fCIgKyAvLyBoZXgKICAgICAgICAidVswLTlhLWZBLUZdezR9fCIgKyAvLyB1bmljb2RlCiAgICAgICAgInV7WzAtOWEtZkEtRl17MSw2fX18IiArIC8vIGVzNiB1bmljb2RlCiAgICAgICAgIlswLTJdWzAtN117MCwyfXwiICsgLy8gb2N0CiAgICAgICAgIjNbMC03XVswLTddP3wiICsgLy8gb2N0CiAgICAgICAgIls0LTddWzAtN10/fCIgKyAvL29jdAogICAgICAgICIuKSI7CgogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgIm5vX3JlZ2V4IiA6IFsKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIGNvbW1lbnRzKCJub19yZWdleCIpLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJyg/PS4pIiwKICAgICAgICAgICAgICAgIG5leHQgIDogInFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsCiAgICAgICAgICAgICAgICByZWdleCA6ICciKD89LiknLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicXFzdHJpbmciCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeQogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXSt8W29PXVswLTddK3xbYkJdWzAxXSspXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHMKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyg/OlxkXGQqKD86XC5cZCopP3xcLlxkKykoPzpbZUVdWystXT9cZCtcYik/LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24iLAogICAgICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0Iiwia2V5d29yZC5vcGVyYXRvciIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikocHJvdG90eXBlKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAicHVuY3R1YXRpb24ub3BlcmF0b3IiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsCiAgICAgICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgImtleXdvcmQub3BlcmF0b3IiLCAidGV4dCIsICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICAgICAgICAgICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbCiAgICAgICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsICJ0ZXh0IiwKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInRleHQiLCAiZW50aXR5Lm5hbWUuZnVuY3Rpb24iLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXC4pKCIgKyBpZGVudGlmaWVyUmUgKyIpKFxccyopKD0pKFxccyopKGZ1bmN0aW9uKShcXHMrKShcXHcrKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoZnVuY3Rpb24pKFxccyspKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKShcXCgpIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJmdW5jdGlvbl9hcmd1bWVudHMiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogWwogICAgICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJwYXJlbi5scGFyZW4iCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKCIgKyBpZGVudGlmaWVyUmUgKyAiKShcXHMqKSg6KShcXHMqKShmdW5jdGlvbikoXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAidGV4dCIsICJ0ZXh0IiwgInN0b3JhZ2UudHlwZSIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoOikoXFxzKikoZnVuY3Rpb24pKFxccyopKFxcKCkiLAogICAgICAgICAgICAgICAgbmV4dDogImZ1bmN0aW9uX2FyZ3VtZW50cyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJmcm9tKD89XFxzKignfFwiKSkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImtleXdvcmQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKD86IiArIGt3QmVmb3JlUmUgKyAiKVxcYiIsCiAgICAgICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3VwcG9ydC5jb25zdGFudCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvdGhhdFxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgInN1cHBvcnQuZnVuY3Rpb24uZmlyZWJ1ZyJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKGNvbnNvbGUpKFwuKSh3YXJufGluZm98bG9nfGVycm9yfHRpbWV8dHJhY2V8dGltZUVuZHxhc3NlcnQpXGIvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDoga2V5d29yZE1hcHBlciwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1suXSg/IVsuXSkvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicHJvcGVydHkiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IC89Pi8sCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJzdGFydCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC8tLXxcK1wrfFwuezN9fD09PXw9PXw9fCE9fCE9PXw8Kz0/fD4rPT98IXwmJnxcfFx8fFw/OnxbISQlJiorXC1+XC9eXT0/LywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bPzosOy5dLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xbKHtdLywKICAgICAgICAgICAgICAgIG5leHQgIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5ycGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAvW1xdKX1dLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbW1lbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9eIyEuKiQvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgIHByb3BlcnR5OiBbewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6IFsKICAgICAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwgInB1bmN0dWF0aW9uLm9wZXJhdG9yIiwgImVudGl0eS5uYW1lLmZ1bmN0aW9uIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJrZXl3b3JkLm9wZXJhdG9yIiwgInRleHQiLAogICAgICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUiLCAidGV4dCIsICJlbnRpdHkubmFtZS5mdW5jdGlvbiIsICJ0ZXh0IiwgInBhcmVuLmxwYXJlbiIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICByZWdleCA6ICIoIiArIGlkZW50aWZpZXJSZSArICIpKFxcLikoIiArIGlkZW50aWZpZXJSZSArIikoXFxzKikoPSkoXFxzKikoZnVuY3Rpb24pKD86KFxccyspKFxcdyspKT8oXFxzKikoXFwoKSIsCiAgICAgICAgICAgICAgICBuZXh0OiAiZnVuY3Rpb25fYXJndW1lbnRzIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9bLl0oPyFbLl0pLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdXBwb3J0LmZ1bmN0aW9uIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86aCg/OmlmdHxvdyg/Ok1vZCg/OmVsZXNzRGlhbG9nfGFsRGlhbG9nKXxIZWxwKSl8Y3JvbGwoPzpYfEJ5KD86UGFnZXN8TGluZXMpP3xZfFRvKT98dCg/Om9wfHJpa2UpfGkoPzpufHplVG9Db250ZW50fGRlYmFyfGduVGV4dCl8b3J0fHUoPzpwfGIoPzpzdHIoPzppbmcpPyk/KXxwbGkoPzpjZXx0KXxlKD86bmR8dCg/OlJlKD86c2l6YWJsZXxxdWVzdEhlYWRlcil8TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvKD86dEtleXN8dXJzKXxZZWFyfEN1cnNvcnxUaW1lKD86b3V0KT98SW50ZXJ2YWx8Wk9wdGlvbnN8RGF0ZXxVVEMoPzpNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlY29uZHN8SG91cnN8RGF0ZXxGdWxsWWVhcil8RnVsbFllYXJ8QWN0aXZlKXxhcmNoKXxxcnR8bGljZXxhdmVQcmVmZXJlbmNlc3xtYWxsKXxoKD86b21lfGFuZGxlRXZlbnQpfG5hdmlnYXRlfGMoPzpoYXIoPzpDb2RlQXR8QXQpfG8oPzpzfG4oPzpjYXR8dGV4dHVhbHxmaXJtKXxtcGlsZSl8ZWlsfGxlYXIoPzpUaW1lb3V0fEludGVydmFsKT98YSg/OnB0dXJlRXZlbnRzfGxsKXxyZWF0ZSg/OlN0eWxlU2hlZXR8UG9wdXB8RXZlbnRPYmplY3QpKXx0KD86byg/OkdNVFN0cmluZ3xTKD86dHJpbmd8b3VyY2UpfFUoPzpUQ1N0cmluZ3xwcGVyQ2FzZSl8TG8oPzpjYWxlU3RyaW5nfHdlckNhc2UpKXxlc3R8YSg/Om58aW50KD86RW5hYmxlZCk/KSl8aSg/OnMoPzpOYU58RmluaXRlKXxuZGV4T2Z8dGFsaWNzKXxkKD86aXNhYmxlRXh0ZXJuYWxDYXB0dXJlfHVtcHxldGFjaEV2ZW50KXx1KD86big/OnNoaWZ0fHRhaW50fGVzY2FwZXx3YXRjaCl8cGRhdGVDb21tYW5kcyl8aig/Om9pbnxhdmFFbmFibGVkKXxwKD86byg/OnB8dyl8dXNofGx1Z2lucy5yZWZyZXNofGEoPzpkZGluZ3N8cnNlKD86SW50fEZsb2F0KT8pfHIoPzppbnR8b21wdHxlZmVyZW5jZSkpfGUoPzpzY2FwZXxuYWJsZUV4dGVybmFsQ2FwdHVyZXx2YWx8bGVtZW50RnJvbVBvaW50fHgoPzpwfGVjKD86U2NyaXB0fENvbW1hbmQpPykpfHZhbHVlT2Z8VVRDfHF1ZXJ5Q29tbWFuZCg/OlN0YXRlfEluZGV0ZXJtfEVuYWJsZWR8VmFsdWUpfGYoPzppKD86bmR8bGUoPzpNb2RpZmllZERhdGV8U2l6ZXxDcmVhdGVkRGF0ZXxVcGRhdGVkRGF0ZSl8eGVkKXxvKD86bnQoPzpzaXplfGNvbG9yKXxyd2FyZCl8bG9vcnxyb21DaGFyQ29kZSl8d2F0Y2h8bCg/Omlua3xvKD86YWR8Zyl8YXN0SW5kZXhPZil8YSg/OnNpbnxuY2hvcnxjb3N8dCg/OnRhY2hFdmVudHxvYnxhbig/OjIpPyl8cHBseXxsZXJ0fGIoPzpzfG9ydCkpfHIoPzpvdSg/Om5kfHRlRXZlbnRzKXxlKD86c2l6ZSg/OkJ5fFRvKXxjYWxjfHR1cm5WYWx1ZXxwbGFjZXx2ZXJzZXxsKD86b2FkfGVhc2UoPzpDYXB0dXJlfEV2ZW50cykpKXxhbmRvbSl8Zyg/Om98ZXQoPzpSZXNwb25zZUhlYWRlcnxNKD86aSg/Om51dGVzfGxsaXNlY29uZHMpfG9udGgpfFNlKD86Y29uZHN8bGVjdGlvbil8SG91cnN8WWVhcnxUaW1lKD86em9uZU9mZnNldCk/fERhKD86eXx0ZSl8VVRDKD86TSg/OmkoPzpudXRlc3xsbGlzZWNvbmRzKXxvbnRoKXxTZWNvbmRzfEhvdXJzfERhKD86eXx0ZSl8RnVsbFllYXIpfEZ1bGxZZWFyfEEoPzp0dGVudGlvbnxsbFJlc3BvbnNlSGVhZGVycykpKXxtKD86aW58b3ZlKD86Qig/Onl8ZWxvdyl8VG8oPzpBYnNvbHV0ZSk/fEFib3ZlKXxlcmdlQXR0cmlidXRlc3xhKD86dGNofHJnaW5zfHgpKXxiKD86dG9hfGlnfG8oPzpsZHxyZGVyV2lkdGhzKXxsaW5rfGFjaykpXGIoPz1cKCkvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN1cHBvcnQuZnVuY3Rpb24uZG9tIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogLyhzKD86dWIoPzpzdHJpbmdEYXRhfG1pdCl8cGxpdFRleHR8ZSg/OnQoPzpOYW1lZEl0ZW18QXR0cmlidXRlKD86Tm9kZSk/KXxsZWN0KSl8aGFzKD86Q2hpbGROb2Rlc3xGZWF0dXJlKXxuYW1lZEl0ZW18Yyg/OmwoPzppY2t8byg/OnNlfG5lTm9kZSkpfHJlYXRlKD86Qyg/Om9tbWVudHxEQVRBU2VjdGlvbnxhcHRpb24pfFQoPzpIZWFkfGV4dE5vZGV8Rm9vdCl8RG9jdW1lbnRGcmFnbWVudHxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb258RSg/Om50aXR5UmVmZXJlbmNlfGxlbWVudCl8QXR0cmlidXRlKSl8dGFiSW5kZXh8aSg/Om5zZXJ0KD86Um93fEJlZm9yZXxDZWxsfERhdGEpfHRlbSl8b3BlbnxkZWxldGUoPzpSb3d8Qyg/OmVsbHxhcHRpb24pfFQoPzpIZWFkfEZvb3QpfERhdGEpfGZvY3VzfHdyaXRlKD86bG4pP3xhKD86ZGR8cHBlbmQoPzpDaGlsZHxEYXRhKSl8cmUoPzpzZXR8cGxhY2UoPzpDaGlsZHxEYXRhKXxtb3ZlKD86TmFtZWRJdGVtfENoaWxkfEF0dHJpYnV0ZSg/Ok5vZGUpPyk/KXxnZXQoPzpOYW1lZEl0ZW18RWxlbWVudCg/OnNCeSg/Ok5hbWV8VGFnTmFtZXxDbGFzc05hbWUpfEJ5SWQpfEF0dHJpYnV0ZSg/Ok5vZGUpPyl8Ymx1cilcYig/PVwoKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAgInN1cHBvcnQuY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvKHMoPzp5c3RlbUxhbmd1YWdlfGNyKD86aXB0c3xvbGxiYXJzfGVlbig/Olh8WXxUb3B8TGVmdCkpfHQoPzp5bGUoPzpTaGVldHMpP3xhdHVzKD86VGV4dHxiYXIpPyl8aWJsaW5nKD86QmVsb3d8QWJvdmUpfG91cmNlfHVmZml4ZXN8ZSg/OmN1cml0eSg/OlBvbGljeSk/fGwoPzplY3Rpb258ZikpKXxoKD86aXN0b3J5fG9zdCg/Om5hbWUpP3xhcyg/Omh8Rm9jdXMpKXx5fFgoPzpNTERvY3VtZW50fFNMRG9jdW1lbnQpfG4oPzpleHR8YW1lKD86c3BhY2UoPzpzfFVSSSl8UHJvcCkpfE0oPzpJTl9WQUxVRXxBWF9WQUxVRSl8Yyg/OmhhcmFjdGVyU2V0fG8oPzpuKD86c3RydWN0b3J8dHJvbGxlcnMpfG9raWVFbmFibGVkfGxvckRlcHRofG1wKD86b25lbnRzfGxldGUpKXx1cnJlbnR8cHVDbGFzc3xsKD86aSg/OnAoPzpib2FyZERhdGEpP3xlbnRJbmZvcm1hdGlvbil8b3NlZHxhc3Nlcyl8YWxsZSg/OmV8cil8cnlwdG8pfHQoPzpvKD86b2xiYXJ8cCl8ZXh0KD86VHJhbnNmb3JtfEluZGVudHxEZWNvcmF0aW9ufEFsaWduKXxhZ3MpfFNRUlQoPzoxXzJ8Mil8aSg/Om4oPzpuZXIoPzpIZWlnaHR8V2lkdGgpfHB1dCl8ZHN8Z25vcmVDYXNlKXx6SW5kZXh8byg/OnNjcHV8big/OnJlYWR5c3RhdGVjaGFuZ2V8TGluZSl8dXRlcig/OkhlaWdodHxXaWR0aCl8cCg/OnNQcm9maWxlfGVuZXIpfGZmc2NyZWVuQnVmZmVyaW5nKXxORUdBVElWRV9JTkZJTklUWXxkKD86aSg/OnNwbGF5fGFsb2coPzpIZWlnaHR8VG9wfFdpZHRofExlZnR8QXJndW1lbnRzKXxyZWN0b3JpZXMpfGUoPzpzY3JpcHRpb258ZmF1bHQoPzpTdGF0dXN8Q2goPzplY2tlZHxhcnNldCl8VmlldykpKXx1KD86c2VyKD86UHJvZmlsZXxMYW5ndWFnZXxBZ2VudCl8big/OmlxdWVJRHxkZWZpbmVkKXxwZGF0ZUludGVydmFsKXxfY29udGVudHxwKD86aXhlbERlcHRofG9ydHxlcnNvbmFsYmFyfGtjczExfGwoPzp1Z2luc3xhdGZvcm0pfGEoPzp0aG5hbWV8ZGRpbmcoPzpSaWdodHxCb3R0b218VG9wfExlZnQpfHJlbnQoPzpXaW5kb3d8TGF5ZXIpP3xnZSg/OlgoPzpPZmZzZXQpP3xZKD86T2Zmc2V0KT8pKXxyKD86byg/OnRvKD86Y29sfHR5cGUpfGR1Y3QoPzpTdWIpP3xtcHRlcil8ZSg/OnZpb3VzfGZpeCkpKXxlKD86big/OmNvZGluZ3xhYmxlZFBsdWdpbil8eCg/OnRlcm5hbHxwYW5kbyl8bWJlZHMpfHYoPzppc2liaWxpdHl8ZW5kb3IoPzpTdWIpP3xMaW5rY29sb3IpfFVSTFVuZW5jb2RlZHxQKD86SXxPU0lUSVZFX0lORklOSVRZKXxmKD86aWxlbmFtZXxvKD86bnQoPzpTaXplfEZhbWlseXxXZWlnaHQpfHJtTmFtZSl8cmFtZSg/OnN8RWxlbWVudCl8Z0NvbG9yKXxFfHdoaXRlU3BhY2V8bCg/OmkoPzpzdFN0eWxlVHlwZXxuKD86ZUhlaWdodHxrQ29sb3IpKXxvKD86Y2EoPzp0aW9uKD86YmFyKT98bE5hbWUpfHdzcmMpfGUoPzpuZ3RofGZ0KD86Q29udGV4dCk/KXxhKD86c3QoPzpNKD86b2RpZmllZHxhdGNoKXxJbmRleHxQYXJlbil8eWVyKD86c3xYKXxuZ3VhZ2UpKXxhKD86cHAoPzpNaW5vclZlcnNpb258TmFtZXxDbyg/OmRlTmFtZXxyZSl8VmVyc2lvbil8dmFpbCg/OkhlaWdodHxUb3B8V2lkdGh8TGVmdCl8bGx8cig/Oml0eXxndW1lbnRzKXxMaW5rY29sb3J8Ym92ZSl8cig/OmlnaHQoPzpDb250ZXh0KT98ZSg/OnNwb25zZSg/OlhNTHxUZXh0KXxhZHlTdGF0ZSkpfGdsb2JhbHx4fG0oPzppbWVUeXBlc3x1bHRpbGluZXxlbnViYXJ8YXJnaW4oPzpSaWdodHxCb3R0b218VG9wfExlZnQpKXxMKD86Tig/OjEwfDIpfE9HKD86MTBFfDJFKSl8Yig/Om8oPzp0dG9tfHJkZXIoPzpXaWR0aHxSaWdodFdpZHRofEJvdHRvbVdpZHRofFN0eWxlfENvbG9yfFRvcFdpZHRofExlZnRXaWR0aCkpfHVmZmVyRGVwdGh8ZWxvd3xhY2tncm91bmQoPzpDb2xvcnxJbWFnZSkpKVxiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpZGVudGlmaWVyIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHJlZ2V4OiAiIiwKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAic3RhcnQiOiBbCiAgICAgICAgICAgIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcy5nZXRTdGFydFJ1bGUoImRvYy1zdGFydCIpLAogICAgICAgICAgICBjb21tZW50cygic3RhcnQiKSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiXFwvIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAidGV4dCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXHMrfF4kIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVnZXgiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicmVnZXhwLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcucmVnZXhwIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiL1tzeG5naW15XSoiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbnZhbGlkIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXHtcZCtcYiw/XGQqXH1bKypdfFsrKiReP11bKypdfFskXl1bP118XD97Myx9LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6IC9cKFw/Wzo9IV18XCl8XHtcZCtcYiw/XGQqXH18WysqXVw/fFsoKSReKyo/Ll0vCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmRlbGltaXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogL1x8LwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleDogL1xbXF4/LywKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleF9jaGFyYWN0ZXJfY2xhc3MiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIkIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nLnJlZ2V4cCIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlZ2V4X2NoYXJhY3Rlcl9jbGFzcyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW46ICJyZWdleHAuY2hhcmNsYXNzLmtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJcXFxcKD86dVtcXGRhLWZBLUZdezR9fHhbXFxkYS1mQS1GXXsyfXwuKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgICAgIG5leHQ6ICJyZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXg6ICItIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImVtcHR5IiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiJCIsCiAgICAgICAgICAgICAgICBuZXh0OiAibm9fcmVnZXgiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIGRlZmF1bHRUb2tlbjogInN0cmluZy5yZWdleHAuY2hhcmFjaHRlcmNsYXNzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZnVuY3Rpb25fYXJndW1lbnRzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbjogInZhcmlhYmxlLnBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICByZWdleDogaWRlbnRpZmllclJlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24ub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgcmVnZXg6ICJbLCBdKyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICByZWdleDogIiQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiZW1wdHkiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIiLAogICAgICAgICAgICAgICAgbmV4dDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXFzdHJpbmciIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcXFwkIiwKICAgICAgICAgICAgICAgIGNvbnN1bWVMaW5lRW5kICA6IHRydWUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogJyJ8JCcsCiAgICAgICAgICAgICAgICBuZXh0ICA6ICJub19yZWdleCIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicXN0cmluZyIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZSIsCiAgICAgICAgICAgICAgICByZWdleCA6IGVzY2FwZWRSZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiXFxcXCQiLAogICAgICAgICAgICAgICAgY29uc3VtZUxpbmVFbmQgIDogdHJ1ZQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAiJ3wkIiwKICAgICAgICAgICAgICAgIG5leHQgIDogIm5vX3JlZ2V4IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdCiAgICB9OwoKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMubm9FUzYpIHsKICAgICAgICB0aGlzLiRydWxlcy5ub19yZWdleC51bnNoaWZ0KHsKICAgICAgICAgICAgcmVnZXg6ICJbe31dIiwgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHZhbCA9PSAieyIgPyB0aGlzLm5leHRTdGF0ZSA6ICIiOwogICAgICAgICAgICAgICAgaWYgKHZhbCA9PSAieyIgJiYgc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCgic3RhcnQiLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwgPT0gIn0iICYmIHN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0LmluZGV4T2YoInN0cmluZyIpICE9IC0xIHx8IHRoaXMubmV4dC5pbmRleE9mKCJqc3giKSAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwYXJlbi5xdWFzaS5lbmQiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSAieyIgPyAicGFyZW4ubHBhcmVuIiA6ICJwYXJlbi5ycGFyZW4iOwogICAgICAgICAgICB9LAogICAgICAgICAgICBuZXh0U3RhdGU6ICJzdGFydCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5xdWFzaS5zdGFydCIsCiAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICBwdXNoICA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUiLAogICAgICAgICAgICAgICAgcmVnZXggOiBlc2NhcGVkUmUKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAicGFyZW4ucXVhc2kuc3RhcnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXCR7LywKICAgICAgICAgICAgICAgIHB1c2ggIDogInN0YXJ0IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcucXVhc2kuZW5kIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL2AvLAogICAgICAgICAgICAgICAgbmV4dCAgOiAicG9wIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICBkZWZhdWx0VG9rZW46ICJzdHJpbmcucXVhc2kiCiAgICAgICAgICAgIH1dCiAgICAgICAgfSk7CgogICAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmpzeCAhPSBmYWxzZSkKICAgICAgICAgICAgSlNYLmNhbGwodGhpcyk7CiAgICB9CgogICAgdGhpcy5lbWJlZFJ1bGVzKERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcywgImRvYy0iLAogICAgICAgIFsgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldEVuZFJ1bGUoIm5vX3JlZ2V4IikgXSk7CgogICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKb29wLmluaGVyaXRzKEphdmFTY3JpcHRIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmZ1bmN0aW9uIEpTWCgpIHsKICAgIHZhciB0YWdSZWdleCA9IGlkZW50aWZpZXJSZS5yZXBsYWNlKCJcXGQiLCAiXFxkXFwtIik7CiAgICB2YXIganN4VGFnID0gewogICAgICAgIG9uTWF0Y2ggOiBmdW5jdGlvbih2YWwsIHN0YXRlLCBzdGFjaykgewogICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsLmNoYXJBdCgxKSA9PSAiLyIgPyAyIDogMTsKICAgICAgICAgICAgaWYgKG9mZnNldCA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gdGhpcy5uZXh0U3RhdGUpCiAgICAgICAgICAgICAgICAgICAgc3RhY2sudW5zaGlmdCh0aGlzLm5leHQsIHRoaXMubmV4dFN0YXRlLCAwKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBzdGFjay51bnNoaWZ0KHRoaXMubmV4dCk7CiAgICAgICAgICAgICAgICBzdGFja1syXSsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSAyKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gdGhpcy5uZXh0U3RhdGUpIHsKICAgICAgICAgICAgICAgICAgICBzdGFja1sxXS0tOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tbMV0gfHwgc3RhY2tbMV0gPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdHlwZTogIm1ldGEudGFnLnB1bmN0dWF0aW9uLiIgKyAob2Zmc2V0ID09IDEgPyAiIiA6ICJlbmQtIikgKyAidGFnLW9wZW4ueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc2xpY2UoMCwgb2Zmc2V0KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0eXBlOiAibWV0YS50YWcudGFnLW5hbWUueG1sIiwKICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwuc3Vic3RyKG9mZnNldCkKICAgICAgICAgICAgfV07CiAgICAgICAgfSwKICAgICAgICByZWdleCA6ICI8Lz8iICsgdGFnUmVnZXggKyAiIiwKICAgICAgICBuZXh0OiAianN4QXR0cmlidXRlcyIsCiAgICAgICAgbmV4dFN0YXRlOiAianN4IgogICAgfTsKICAgIHRoaXMuJHJ1bGVzLnN0YXJ0LnVuc2hpZnQoanN4VGFnKTsKICAgIHZhciBqc3hKc1J1bGUgPSB7CiAgICAgICAgcmVnZXg6ICJ7IiwKICAgICAgICB0b2tlbjogInBhcmVuLnF1YXNpLnN0YXJ0IiwKICAgICAgICBwdXNoOiAic3RhcnQiCiAgICB9OwogICAgdGhpcy4kcnVsZXMuanN4ID0gWwogICAgICAgIGpzeEpzUnVsZSwKICAgICAgICBqc3hUYWcsCiAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAge2RlZmF1bHRUb2tlbjogInN0cmluZyJ9CiAgICBdOwogICAgdGhpcy4kcnVsZXMuanN4QXR0cmlidXRlcyA9IFt7CiAgICAgICAgdG9rZW4gOiAibWV0YS50YWcucHVuY3R1YXRpb24udGFnLWNsb3NlLnhtbCIsCiAgICAgICAgcmVnZXggOiAiLz8+IiwKICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBzdGFja1swXSkKICAgICAgICAgICAgICAgIHN0YWNrLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMikgewogICAgICAgICAgICAgICAgaWYgKHN0YWNrWzBdID09IHRoaXMubmV4dFN0YXRlKQogICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdLS07CiAgICAgICAgICAgICAgICBpZiAoIXN0YWNrWzFdIHx8IHN0YWNrWzFdIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnNwbGljZSgwLCAyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm5leHQgPSBzdGFja1swXSB8fCAic3RhcnQiOwogICAgICAgICAgICByZXR1cm4gW3t0eXBlOiB0aGlzLnRva2VuLCB2YWx1ZTogdmFsdWV9XTsKICAgICAgICB9LAogICAgICAgIG5leHRTdGF0ZTogImpzeCIKICAgIH0sCiAgICBqc3hKc1J1bGUsCiAgICBjb21tZW50cygianN4QXR0cmlidXRlcyIpLAogICAgewogICAgICAgIHRva2VuIDogImVudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZS54bWwiLAogICAgICAgIHJlZ2V4IDogdGFnUmVnZXgKICAgIH0sIHsKICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yLmF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICByZWdleCA6ICI9IgogICAgfSwgewogICAgICAgIHRva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwKICAgICAgICByZWdleCA6ICJcXHMrIgogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICInIiwKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcSIsCiAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAge3Rva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwgcmVnZXg6ICInIiwgbmV4dDogInBvcCJ9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJyZWZlcmVuY2UifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgXQogICAgfSwgewogICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICByZWdleCA6ICciJywKICAgICAgICBzdGF0ZU5hbWUgOiAianN4X2F0dHJfcXEiLAogICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCIsIHJlZ2V4OiAnIicsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAge2luY2x1ZGUgOiAicmVmZXJlbmNlIn0sCiAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwifQogICAgICAgIF0KICAgIH0sCiAgICBqc3hUYWcKICAgIF07CiAgICB0aGlzLiRydWxlcy5yZWZlcmVuY2UgPSBbewogICAgICAgIHRva2VuIDogImNvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZS5yZWZlcmVuY2UueG1sIiwKICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgIH1dOwp9CgpmdW5jdGlvbiBjb21tZW50cyhuZXh0KSB7CiAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIG11bHRpIGxpbmUgY29tbWVudAogICAgICAgICAgICByZWdleCA6IC9cL1wqLywKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiXFwqXFwvIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgcmVnZXggOiAiXFwvXFwvIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFRhZ1J1bGUoKSwKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJjb21tZW50IiwgcmVnZXggOiAiJHxeIiwgbmV4dCA6IG5leHQgfHwgInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50IiwgY2FzZUluc2Vuc2l0aXZlOiB0cnVlfQogICAgICAgICAgICBdCiAgICAgICAgfQogICAgXTsKfQpleHBvcnRzLkphdmFTY3JpcHRIaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvcmFuZ2UiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBmdW5jdGlvbigpIHt9OwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24obGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuIC9eXHMqXH0vLnRlc3QoaW5wdXQpOwogICAgfTsKCiAgICB0aGlzLmF1dG9PdXRkZW50ID0gZnVuY3Rpb24oZG9jLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IGRvYy5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXihccypcfSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy4kZ2V0SW5kZW50ID0gZnVuY3Rpb24obGluZSkgewogICAgICAgIHJldHVybiBsaW5lLm1hdGNoKC9eXHMqLylbMF07CiAgICB9OwoKfSkuY2FsbChNYXRjaGluZ0JyYWNlT3V0ZGVudC5wcm90b3R5cGUpOwoKZXhwb3J0cy5NYXRjaGluZ0JyYWNlT3V0ZGVudCA9IE1hdGNoaW5nQnJhY2VPdXRkZW50Owp9KTsKCmRlZmluZSgiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9yYW5nZSIsImFjZS9tb2RlL2ZvbGRpbmcvZm9sZF9tb2RlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi8uLi9yYW5nZSIpLlJhbmdlOwp2YXIgQmFzZUZvbGRNb2RlID0gcmVxdWlyZSgiLi9mb2xkX21vZGUiKS5Gb2xkTW9kZTsKCnZhciBGb2xkTW9kZSA9IGV4cG9ydHMuRm9sZE1vZGUgPSBmdW5jdGlvbihjb21tZW50UmVnZXgpIHsKICAgIGlmIChjb21tZW50UmVnZXgpIHsKICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguc3RhcnQpCiAgICAgICAgKTsKICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LmVuZCkKICAgICAgICApOwogICAgfQp9Owpvb3AuaW5oZXJpdHMoRm9sZE1vZGUsIEJhc2VGb2xkTW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gLyhbXHtcW1woXSlbXlx9XF1cKV0qJHxeXHMqKFwvXCopLzsKICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSAvXlteXFtce1woXSooW1x9XF1cKV0pfF5bXHNcKl0qKFwqXC8pLzsKICAgIHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlPSAvXlxzKihcL1wqKS4qXCpcL1xzKiQvOwogICAgdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUgPSAvXlxzKihcL1wqXCpcKikuKlwqXC9ccyokLzsKICAgIHRoaXMuc3RhcnRSZWdpb25SZSA9IC9eXHMqKFwvXCp8XC9cLykjP3JlZ2lvblxiLzsKICAgIHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlID0gdGhpcy5nZXRGb2xkV2lkZ2V0OwogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgCiAgICAgICAgaWYgKHRoaXMuc2luZ2xlTGluZUJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpIHsKICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSAmJiAhdGhpcy50cmlwbGVTdGFyQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAKICAgICAgICB2YXIgZncgPSB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZShzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdyk7CiAgICAKICAgICAgICBpZiAoIWZ3ICYmIHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gInN0YXJ0IjsgLy8gbGluZUNvbW1lbnRSZWdpb25TdGFydAogICAgCiAgICAgICAgcmV0dXJuIGZ3OwogICAgfTsKCiAgICB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93LCBmb3JjZU11bHRpbGluZSkgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKHRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2soc2Vzc2lvbiwgbGluZSwgcm93KTsKICAgICAgICAKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZW5pbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJhbmdlID0gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSArIG1hdGNoWzBdLmxlbmd0aCwgMSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZU11bHRpbGluZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5nZXRTZWN0aW9uUmFuZ2Uoc2Vzc2lvbiwgcm93KTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZFN0eWxlICE9ICJhbGwiKQogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvbGRTdHlsZSA9PT0gIm1hcmtiZWdpbiIpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdG9wTWFya2VyKTsKICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgdmFyIGkgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDsKCiAgICAgICAgICAgIGlmIChtYXRjaFsxXSkKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb3NpbmdCcmFja2V0QmxvY2soc2Vzc2lvbiwgbWF0Y2hbMV0sIHJvdywgaSk7CgogICAgICAgICAgICByZXR1cm4gc2Vzc2lvbi5nZXRDb21tZW50Rm9sZFJhbmdlKHJvdywgaSwgLTEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuZ2V0U2VjdGlvblJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICB2YXIgc3RhcnRJbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgcm93ID0gcm93ICsgMTsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBpbmRlbnQgPSBsaW5lLnNlYXJjaCgvXFMvKTsKICAgICAgICAgICAgaWYgKGluZGVudCA9PT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgIChzdGFydEluZGVudCA+IGluZGVudCkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB2YXIgc3ViUmFuZ2UgPSB0aGlzLmdldEZvbGRXaWRnZXRSYW5nZShzZXNzaW9uLCAiYWxsIiwgcm93KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdWJSYW5nZSkgewogICAgICAgICAgICAgICAgaWYgKHN1YlJhbmdlLnN0YXJ0LnJvdyA8PSBzdGFydFJvdykgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcm93ID0gc3ViUmFuZ2UuZW5kLnJvdzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRJbmRlbnQgPT0gaW5kZW50KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZW5kUm93ID0gcm93OwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBzZXNzaW9uLmdldExpbmUoZW5kUm93KS5sZW5ndGgpOwogICAgfTsKICAgIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrID0gZnVuY3Rpb24oc2Vzc2lvbiwgbGluZSwgcm93KSB7CiAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gbGluZS5zZWFyY2goL1xzKiQvKTsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB2YXIgc3RhcnRSb3cgPSByb3c7CiAgICAgICAgCiAgICAgICAgdmFyIHJlID0gL15ccyooPzpcL1wqfFwvXC98LS0pIz8oZW5kKT9yZWdpb25cYi87CiAgICAgICAgdmFyIGRlcHRoID0gMTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbSA9IHJlLmV4ZWMobGluZSk7CiAgICAgICAgICAgIGlmICghbSkgY29udGludWU7CiAgICAgICAgICAgIGlmIChtWzFdKSBkZXB0aC0tOwogICAgICAgICAgICBlbHNlIGRlcHRoKys7CgogICAgICAgICAgICBpZiAoIWRlcHRoKSBicmVhazsKICAgICAgICB9CgogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgaWYgKGVuZFJvdyA+IHN0YXJ0Um93KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGxpbmUubGVuZ3RoKTsKICAgICAgICB9CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS9qYXZhc2NyaXB0X2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiLCJhY2UvbW9kZS9iZWhhdmlvdXIvY3N0eWxlIiwiYWNlL21vZGUvZm9sZGluZy9jc3R5bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vdGV4dCIpLk1vZGU7CnZhciBKYXZhU2NyaXB0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL2phdmFzY3JpcHRfaGlnaGxpZ2h0X3J1bGVzIikuSmF2YVNjcmlwdEhpZ2hsaWdodFJ1bGVzOwp2YXIgTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSByZXF1aXJlKCIuL21hdGNoaW5nX2JyYWNlX291dGRlbnQiKS5NYXRjaGluZ0JyYWNlT3V0ZGVudDsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgQ3N0eWxlQmVoYXZpb3VyID0gcmVxdWlyZSgiLi9iZWhhdmlvdXIvY3N0eWxlIikuQ3N0eWxlQmVoYXZpb3VyOwp2YXIgQ1N0eWxlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY3N0eWxlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IEphdmFTY3JpcHRIaWdobGlnaHRSdWxlczsKICAgIAogICAgdGhpcy4kb3V0ZGVudCA9IG5ldyBNYXRjaGluZ0JyYWNlT3V0ZGVudCgpOwogICAgdGhpcy4kYmVoYXZpb3VyID0gbmV3IENzdHlsZUJlaGF2aW91cigpOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgQ1N0eWxlRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmxpbmVDb21tZW50U3RhcnQgPSAiLy8iOwogICAgdGhpcy5ibG9ja0NvbW1lbnQgPSB7c3RhcnQ6ICIvKiIsIGVuZDogIiovIn07CiAgICB0aGlzLiRxdW90ZXMgPSB7JyInOiAnIicsICInIjogIiciLCAiYCI6ICJgIn07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwoKICAgICAgICB2YXIgdG9rZW5pemVkTGluZSA9IHRoaXMuZ2V0VG9rZW5pemVyKCkuZ2V0TGluZVRva2VucyhsaW5lLCBzdGF0ZSk7CiAgICAgICAgdmFyIHRva2VucyA9IHRva2VuaXplZExpbmUudG9rZW5zOwogICAgICAgIHZhciBlbmRTdGF0ZSA9IHRva2VuaXplZExpbmUuc3RhdGU7CgogICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1t0b2tlbnMubGVuZ3RoLTFdLnR5cGUgPT0gImNvbW1lbnQiKSB7CiAgICAgICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGUgPT0gInN0YXJ0IiB8fCBzdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKig/OlxiY2FzZVxiLio6fFtce1woXFtdKVxzKiQvKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpbmRlbnQgKz0gdGFiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSAiZG9jLXN0YXJ0IikgewogICAgICAgICAgICBpZiAoZW5kU3RhdGUgPT0gInN0YXJ0IiB8fCBlbmRTdGF0ZSA9PSAibm9fcmVnZXgiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXlxzKihcLz8pXCovKTsKICAgICAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMV0pIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gIiAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaW5kZW50ICs9ICIqICI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLCAiSmF2YVNjcmlwdFdvcmtlciIpOwogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CgogICAgICAgIHdvcmtlci5vbigiYW5ub3RhdGUiLCBmdW5jdGlvbihyZXN1bHRzKSB7CiAgICAgICAgICAgIHNlc3Npb24uc2V0QW5ub3RhdGlvbnMocmVzdWx0cy5kYXRhKTsKICAgICAgICB9KTsKCiAgICAgICAgd29ya2VyLm9uKCJ0ZXJtaW5hdGUiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgc2Vzc2lvbi5jbGVhckFubm90YXRpb25zKCk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB3b3JrZXI7CiAgICB9OwoKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL2phdmFzY3JpcHQiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS93b2xsb2tfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9kb2NfY29tbWVudF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIERvY0NvbW1lbnRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vZG9jX2NvbW1lbnRfaGlnaGxpZ2h0X3J1bGVzIikuRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKCnZhciBXb2xsb2tIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGtleXdvcmRzID0gKAogICAgInRlc3R8ZGVzY3JpYmV8cGFja2FnZXxpbmhlcml0c3xmYWxzZXxpbXBvcnR8ZWxzZXxvcnxjbGFzc3xhbmR8bm90fG5hdGl2ZXxvdmVycmlkZXxwcm9ncmFtfHNlbGZ8dHJ5fGNvbnN0fHZhcnxjYXRjaHxvYmplY3R8c3VwZXJ8dGhyb3d8aWZ8bnVsbHxyZXR1cm58dHJ1ZXxuZXd8Y29uc3RydWN0b3J8bWV0aG9kfG1peGluIgogICAgKTsKCiAgICB2YXIgYnVpbGRpbkNvbnN0YW50cyA9ICgibnVsbHxhc3NlcnR8Y29uc29sZSIpOwoKICAgIHZhciBsYW5nQ2xhc3NlcyA9ICgKICAgICAgICAiT2JqZWN0fFBhaXJ8U3RyaW5nfEJvb2xlYW58TnVtYmVyfEludGVnZXJ8RG91YmxlfENvbGxlY3Rpb258U2V0fExpc3R8RXhjZXB0aW9ufFJhbmdlIiArCiAgICAgICAgInxTdGFja1RyYWNlRWxlbWVudCIKICAgICk7CgogICAgdmFyIGtleXdvcmRNYXBwZXIgPSB0aGlzLmNyZWF0ZUtleXdvcmRNYXBwZXIoewogICAgICAgICJ2YXJpYWJsZS5sYW5ndWFnZSI6ICJzZWxmIiwKICAgICAgICAia2V5d29yZCI6IGtleXdvcmRzLAogICAgICAgICJjb25zdGFudC5sYW5ndWFnZSI6IGJ1aWxkaW5Db25zdGFudHMsCiAgICAgICAgInN1cHBvcnQuZnVuY3Rpb24iOiBsYW5nQ2xhc3NlcwogICAgfSwgImlkZW50aWZpZXIiKTsKCiAgICB0aGlzLiRydWxlcyA9IHsKICAgICAgICAic3RhcnQiIDogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcLy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLmdldFN0YXJ0UnVsZSgiZG9jLXN0YXJ0IiksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBtdWx0aSBsaW5lIGNvbW1lbnQKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxcL1xcKiIsCiAgICAgICAgICAgICAgICBuZXh0IDogImNvbW1lbnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIHNpbmdsZSBsaW5lCiAgICAgICAgICAgICAgICByZWdleCA6ICdbIl0oPzooPzpcXFxcLil8KD86W14iXFxcXF0pKSo/WyJdJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLCAvLyBzaW5nbGUgbGluZQogICAgICAgICAgICAgICAgcmVnZXggOiAiWyddKD86KD86XFxcXC4pfCg/OlteJ1xcXFxdKSkqP1snXSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIGhleAogICAgICAgICAgICAgICAgcmVnZXggOiAvMCg/Olt4WF1bMC05YS1mQS1GXVswLTlhLWZBLUZfXSp8W2JCXVswMV1bMDFfXSopW0xsU3NEZEZmWXldP1xiLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5udW1lcmljIiwgLy8gZmxvYXQKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1srLV0/XGRbXGRfXSooPzooPzpcLltcZF9dKik/KD86W2VFXVsrLV0/W1xkX10rKT8pP1tMbFNzRGRGZll5XT9cYi8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIoPzp0cnVlfGZhbHNlKVxcYiIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiBrZXl3b3JkTWFwcGVyLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW2EtekEtWl8kXVthLXpBLVowLTlfJF0qXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIj09PXwmJnxcXCo9fFxcLlxcLnxcXCpcXCp8I3whfCV8XFwqfFxcPzp8XFwrfFxcL3wsfFxcKz18XFwtfFxcLlxcLjx8IT09fDp8XFwvPXxcXD9cXC58XFwrXFwrfD58PXw8fD49fD0+fD09fFxcXXxcXFt8XFwtPXxcXC0+fFxcfHxcXC1cXC18PD58IT18JT18XFx8IgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJscGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb21tZW50IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsIC8vIGNsb3NpbmcgY29tbWVudAogICAgICAgICAgICAgICAgcmVnZXggOiAiLio/XFwqXFwvIiwKICAgICAgICAgICAgICAgIG5leHQgOiAic3RhcnQiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbW1lbnQiLCAvLyBjb21tZW50IHNwYW5uaW5nIHdob2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi4rIgogICAgICAgICAgICB9CiAgICAgICAgXQogICAgfTsKCiAgICB0aGlzLmVtYmVkUnVsZXMoRG9jQ29tbWVudEhpZ2hsaWdodFJ1bGVzLCAiZG9jLSIsCiAgICAgICAgWyBEb2NDb21tZW50SGlnaGxpZ2h0UnVsZXMuZ2V0RW5kUnVsZSgic3RhcnQiKSBdKTsKfTsKCm9vcC5pbmhlcml0cyhXb2xsb2tIaWdobGlnaHRSdWxlcywgVGV4dEhpZ2hsaWdodFJ1bGVzKTsKCmV4cG9ydHMuV29sbG9rSGlnaGxpZ2h0UnVsZXMgPSBXb2xsb2tIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3dvbGxvayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvamF2YXNjcmlwdCIsImFjZS9tb2RlL3dvbGxva19oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoIi4vamF2YXNjcmlwdCIpLk1vZGU7CnZhciBXb2xsb2tIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vd29sbG9rX2hpZ2hsaWdodF9ydWxlcyIpLldvbGxva0hpZ2hsaWdodFJ1bGVzOwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgIEphdmFTY3JpcHRNb2RlLmNhbGwodGhpcyk7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gV29sbG9rSGlnaGxpZ2h0UnVsZXM7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBKYXZhU2NyaXB0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS93b2xsb2siOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS93b2xsb2siXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS94bWxfaGlnaGxpZ2h0X3J1bGVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0X2hpZ2hsaWdodF9ydWxlcyJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vdGV4dF9oaWdobGlnaHRfcnVsZXMiKS5UZXh0SGlnaGxpZ2h0UnVsZXM7Cgp2YXIgWG1sSGlnaGxpZ2h0UnVsZXMgPSBmdW5jdGlvbihub3JtYWxpemUpIHsKICAgIHZhciB0YWdSZWdleCA9ICJbXzphLXpBLVpceGMwLVx1ZmZmZl1bLV86LmEtekEtWjAtOVx4YzAtXHVmZmZmXSoiOwoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgIHN0YXJ0IDogWwogICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmNkYXRhLnhtbCIsIHJlZ2V4IDogIjxcXCFcXFtDREFUQVxcWyIsIG5leHQgOiAiY2RhdGEifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInB1bmN0dWF0aW9uLmluc3RydWN0aW9uLnhtbCIsICJrZXl3b3JkLmluc3RydWN0aW9uLnhtbCJdLAogICAgICAgICAgICAgICAgcmVnZXggOiAiKDxcXD8pKCIgKyB0YWdSZWdleCArICIpIiwgbmV4dCA6ICJwcm9jZXNzaW5nX2luc3RydWN0aW9uIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7dG9rZW4gOiAiY29tbWVudC5zdGFydC54bWwiLCByZWdleCA6ICI8XFwhLS0iLCBuZXh0IDogImNvbW1lbnQifSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiBbInhtbC1wZS5kb2N0eXBlLnhtbCIsICJ4bWwtcGUuZG9jdHlwZS54bWwiXSwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIig8XFwhKShET0NUWVBFKSg/PVtcXHNdKSIsIG5leHQgOiAiZG9jdHlwZSIsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJ0YWcifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQuZW5kLXRhZy1vcGVuLnhtbCIsIHJlZ2V4OiAiPC8ifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQudGFnLW9wZW4ueG1sIiwgcmVnZXg6ICI8In0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInJlZmVyZW5jZSJ9LAogICAgICAgICAgICB7ZGVmYXVsdFRva2VuIDogInRleHQueG1sIn0KICAgICAgICBdLAoKICAgICAgICBwcm9jZXNzaW5nX2luc3RydWN0aW9uIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiZW50aXR5Lm90aGVyLmF0dHJpYnV0ZS1uYW1lLmRlY2wtYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5kZWNsLWF0dHJpYnV0ZS1lcXVhbHMueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiPSIKICAgICAgICB9LCB7CiAgICAgICAgICAgIGluY2x1ZGU6ICJ3aGl0ZXNwYWNlIgogICAgICAgIH0sIHsKICAgICAgICAgICAgaW5jbHVkZTogInN0cmluZyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLnhtbC1kZWNsLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcPz4iLAogICAgICAgICAgICBuZXh0IDogInN0YXJ0IgogICAgICAgIH1dLAoKICAgICAgICBkb2N0eXBlIDogWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJ3aGl0ZXNwYWNlIn0sCiAgICAgICAgICAgIHtpbmNsdWRlIDogInN0cmluZyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAieG1sLXBlLmRvY3R5cGUueG1sIiwgcmVnZXggOiAiPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuIDogInhtbC1wZS54bWwiLCByZWdleCA6ICJbLV9hLXpBLVowLTk6XSsifSwKICAgICAgICAgICAge3Rva2VuIDogInB1bmN0dWF0aW9uLmludC1zdWJzZXQiLCByZWdleCA6ICJcXFsiLCBwdXNoIDogImludF9zdWJzZXQifQogICAgICAgIF0sCgogICAgICAgIGludF9zdWJzZXQgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0LnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgfSwgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmludC1zdWJzZXQueG1sIiwKICAgICAgICAgICAgcmVnZXg6ICJdIiwKICAgICAgICAgICAgbmV4dDogInBvcCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogWyJwdW5jdHVhdGlvbi5tYXJrdXAtZGVjbC54bWwiLCAia2V5d29yZC5tYXJrdXAtZGVjbC54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDxcXCEpKCIgKyB0YWdSZWdleCArICIpIiwKICAgICAgICAgICAgcHVzaCA6IFt7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlxccysiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInB1bmN0dWF0aW9uLm1hcmt1cC1kZWNsLnhtbCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICI+IiwKICAgICAgICAgICAgICAgIG5leHQgOiAicG9wIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7aW5jbHVkZSA6ICJzdHJpbmcifV0KICAgICAgICB9XSwKCiAgICAgICAgY2RhdGEgOiBbCiAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcuY2RhdGEueG1sIiwgcmVnZXggOiAiXFxdXFxdPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge3Rva2VuIDogInRleHQueG1sIiwgcmVnZXggOiAiXFxzKyJ9LAogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC54bWwiLCByZWdleCA6ICIoPzpbXlxcXV18XFxdKD8hXFxdPikpKyJ9CiAgICAgICAgXSwKCiAgICAgICAgY29tbWVudCA6IFsKICAgICAgICAgICAge3Rva2VuIDogImNvbW1lbnQuZW5kLnhtbCIsIHJlZ2V4IDogIi0tPiIsIG5leHQgOiAic3RhcnQifSwKICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJjb21tZW50LnhtbCJ9CiAgICAgICAgXSwKCiAgICAgICAgcmVmZXJlbmNlIDogW3sKICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlLnJlZmVyZW5jZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgICAgICB9XSwKCiAgICAgICAgYXR0cl9yZWZlcmVuY2UgOiBbewogICAgICAgICAgICB0b2tlbiA6ICJjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUucmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZS54bWwiLAogICAgICAgICAgICByZWdleCA6ICIoPzomI1swLTldKzspfCg/OiYjeFswLTlhLWZBLUZdKzspfCg/OiZbYS16QS1aMC05XzpcXC4tXSs7KSIKICAgICAgICB9XSwKCiAgICAgICAgdGFnIDogW3sKICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy5wdW5jdHVhdGlvbi5lbmQtdGFnLW9wZW4ueG1sIiwgIm1ldGEudGFnLnRhZy1uYW1lLnhtbCJdLAogICAgICAgICAgICByZWdleCA6ICIoPzooPCl8KDwvKSkoKD86IiArIHRhZ1JlZ2V4ICsgIjopPyIgKyB0YWdSZWdleCArICIpIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogInN0YXJ0In0KICAgICAgICAgICAgXQogICAgICAgIH1dLAoKICAgICAgICB0YWdfd2hpdGVzcGFjZSA6IFsKICAgICAgICAgICAge3Rva2VuIDogInRleHQudGFnLXdoaXRlc3BhY2UueG1sIiwgcmVnZXggOiAiXFxzKyJ9CiAgICAgICAgXSwKICAgICAgICB3aGl0ZXNwYWNlIDogWwogICAgICAgICAgICB7dG9rZW4gOiAidGV4dC53aGl0ZXNwYWNlLnhtbCIsIHJlZ2V4IDogIlxccysifQogICAgICAgIF0sCiAgICAgICAgc3RyaW5nOiBbewogICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmcueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLnhtbCIsIHJlZ2V4OiAiJyIsIG5leHQ6ICJwb3AifSwKICAgICAgICAgICAgICAgIHtkZWZhdWx0VG9rZW4gOiAic3RyaW5nLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy54bWwiLAogICAgICAgICAgICByZWdleCA6ICciJywKICAgICAgICAgICAgcHVzaCA6IFsKICAgICAgICAgICAgICAgIHt0b2tlbiA6ICJzdHJpbmcueG1sIiwgcmVnZXg6ICciJywgbmV4dDogInBvcCJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcueG1sIn0KICAgICAgICAgICAgXQogICAgICAgIH1dLAoKICAgICAgICBhdHRyaWJ1dGVzOiBbewogICAgICAgICAgICB0b2tlbiA6ICJlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiB0YWdSZWdleAogICAgICAgIH0sIHsKICAgICAgICAgICAgdG9rZW4gOiAia2V5d29yZC5vcGVyYXRvci5hdHRyaWJ1dGUtZXF1YWxzLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIj0iCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAidGFnX3doaXRlc3BhY2UiCiAgICAgICAgfSwgewogICAgICAgICAgICBpbmNsdWRlOiAiYXR0cmlidXRlX3ZhbHVlIgogICAgICAgIH1dLAoKICAgICAgICBhdHRyaWJ1dGVfdmFsdWU6IFt7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAiJyIsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogIiciLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyX3JlZmVyZW5jZSJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuIDogInN0cmluZy5hdHRyaWJ1dGUtdmFsdWUueG1sIiwKICAgICAgICAgICAgcmVnZXggOiAnIicsCiAgICAgICAgICAgIHB1c2ggOiBbCiAgICAgICAgICAgICAgICB7dG9rZW4gOiAic3RyaW5nLmF0dHJpYnV0ZS12YWx1ZS54bWwiLCByZWdleDogJyInLCBuZXh0OiAicG9wIn0sCiAgICAgICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyX3JlZmVyZW5jZSJ9LAogICAgICAgICAgICAgICAge2RlZmF1bHRUb2tlbiA6ICJzdHJpbmcuYXR0cmlidXRlLXZhbHVlLnhtbCJ9CiAgICAgICAgICAgIF0KICAgICAgICB9XQogICAgfTsKCiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gWG1sSGlnaGxpZ2h0UnVsZXMpCiAgICAgICAgdGhpcy5ub3JtYWxpemVSdWxlcygpOwp9OwoKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmVtYmVkVGFnUnVsZXMgPSBmdW5jdGlvbihIaWdobGlnaHRSdWxlcywgcHJlZml4LCB0YWcpewogICAgICAgIHRoaXMuJHJ1bGVzLnRhZy51bnNoaWZ0KHsKICAgICAgICAgICAgdG9rZW4gOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1vcGVuLnhtbCIsICJtZXRhLnRhZy4iICsgdGFnICsgIi50YWctbmFtZS54bWwiXSwKICAgICAgICAgICAgcmVnZXggOiAiKDwpKCIgKyB0YWcgKyAiKD89XFxzfD58JCkpIiwKICAgICAgICAgICAgbmV4dDogWwogICAgICAgICAgICAgICAge2luY2x1ZGUgOiAiYXR0cmlidXRlcyJ9LAogICAgICAgICAgICAgICAge3Rva2VuIDogIm1ldGEudGFnLnB1bmN0dWF0aW9uLnRhZy1jbG9zZS54bWwiLCByZWdleCA6ICIvPz4iLCBuZXh0IDogcHJlZml4ICsgInN0YXJ0In0KICAgICAgICAgICAgXQogICAgICAgIH0pOwoKICAgICAgICB0aGlzLiRydWxlc1t0YWcgKyAiLWVuZCJdID0gWwogICAgICAgICAgICB7aW5jbHVkZSA6ICJhdHRyaWJ1dGVzIn0sCiAgICAgICAgICAgIHt0b2tlbiA6ICJtZXRhLnRhZy5wdW5jdHVhdGlvbi50YWctY2xvc2UueG1sIiwgcmVnZXggOiAiLz8+IiwgIG5leHQ6ICJzdGFydCIsCiAgICAgICAgICAgICAgICBvbk1hdGNoIDogZnVuY3Rpb24odmFsdWUsIGN1cnJlbnRTdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgIH19CiAgICAgICAgXTsKCiAgICAgICAgdGhpcy5lbWJlZFJ1bGVzKEhpZ2hsaWdodFJ1bGVzLCBwcmVmaXgsIFt7CiAgICAgICAgICAgIHRva2VuOiBbIm1ldGEudGFnLnB1bmN0dWF0aW9uLmVuZC10YWctb3Blbi54bWwiLCAibWV0YS50YWcuIiArIHRhZyArICIudGFnLW5hbWUueG1sIl0sCiAgICAgICAgICAgIHJlZ2V4IDogIig8LykoIiArIHRhZyArICIoPz1cXHN8PnwkKSkiLAogICAgICAgICAgICBuZXh0OiB0YWcgKyAiLWVuZCIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNkYXRhLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIjxcXCFcXFtDREFUQVxcWyIKICAgICAgICB9LCB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLmNkYXRhLnhtbCIsCiAgICAgICAgICAgIHJlZ2V4IDogIlxcXVxcXT4iCiAgICAgICAgfV0pOwogICAgfTsKCn0pLmNhbGwoVGV4dEhpZ2hsaWdodFJ1bGVzLnByb3RvdHlwZSk7Cgpvb3AuaW5oZXJpdHMoWG1sSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlhtbEhpZ2hsaWdodFJ1bGVzID0gWG1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9iZWhhdmlvdXIiLCJhY2UvdG9rZW5faXRlcmF0b3IiLCJhY2UvbGliL2xhbmciXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBCZWhhdmlvdXIgPSByZXF1aXJlKCIuLi9iZWhhdmlvdXIiKS5CZWhhdmlvdXI7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uLy4uL2xpYi9sYW5nIik7CgpmdW5jdGlvbiBpcyh0b2tlbiwgdHlwZSkgewogICAgcmV0dXJuIHRva2VuICYmIHRva2VuLnR5cGUubGFzdEluZGV4T2YodHlwZSArICIueG1sIikgPiAtMTsKfQoKdmFyIFhtbEJlaGF2aW91ciA9IGZ1bmN0aW9uICgpIHsKCiAgICB0aGlzLmFkZCgic3RyaW5nX2RxdW90ZXMiLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICciJyB8fCB0ZXh0ID09ICInIikgewogICAgICAgICAgICB2YXIgcXVvdGUgPSB0ZXh0OwogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UoZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkpOwogICAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT09ICIiICYmIHNlbGVjdGVkICE9PSAiJyIgJiYgc2VsZWN0ZWQgIT0gJyInICYmIGVkaXRvci5nZXRXcmFwQmVoYXZpb3Vyc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHNlbGVjdGVkICsgcXVvdGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhjdXJzb3IuY29sdW1uLCBjdXJzb3IuY29sdW1uICsgMSk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmIChyaWdodENoYXIgPT0gcXVvdGUgJiYgKGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikgfHwgaXModG9rZW4sICJzdHJpbmciKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwoKICAgICAgICAgICAgaWYgKCF0b2tlbikKICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHdoaWxlIChpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJ3aGl0ZXNwYWNlIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJpZ2h0U3BhY2UgPSAhcmlnaHRDaGFyIHx8IHJpZ2h0Q2hhci5tYXRjaCgvXHMvKTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPicpIHx8IChpcyh0b2tlbiwgImRlY2wtYXR0cmlidXRlLWVxdWFscyIpICYmIChyaWdodFNwYWNlIHx8IHJpZ2h0Q2hhciA9PSAnPycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxdW90ZSArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImRlbGV0aW9uIiwgZnVuY3Rpb24oc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCByYW5nZSkgewogICAgICAgIHZhciBzZWxlY3RlZCA9IHNlc3Npb24uZG9jLmdldFRleHRSYW5nZShyYW5nZSk7CiAgICAgICAgaWYgKCFyYW5nZS5pc011bHRpTGluZSgpICYmIChzZWxlY3RlZCA9PSAnIicgfHwgc2VsZWN0ZWQgPT0gIiciKSkgewogICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZG9jLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KTsKICAgICAgICAgICAgdmFyIHJpZ2h0Q2hhciA9IGxpbmUuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0LmNvbHVtbiArIDEsIHJhbmdlLnN0YXJ0LmNvbHVtbiArIDIpOwogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHNlbGVjdGVkKSB7CiAgICAgICAgICAgICAgICByYW5nZS5lbmQuY29sdW1uKys7CiAgICAgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2Nsb3NpbmciLCAiaW5zZXJ0aW9uIiwgZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgdGV4dCkgewogICAgICAgIGlmICh0ZXh0ID09ICc+JykgewogICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uUmFuZ2UoKS5zdGFydDsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKSB8fCBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhKGlzKHRva2VuLCAidGFnLW5hbWUiKSB8fCBpcyh0b2tlbiwgInRhZy13aGl0ZXNwYWNlIikgfHwgaXModG9rZW4sICJhdHRyaWJ1dGUtbmFtZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLWVxdWFscyIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJyZWZlcmVuY2UuYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5FbmRDb2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKSArIHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbi5jb2x1bW4gPCB0b2tlbkVuZENvbHVtbikKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uID09IHRva2VuRW5kQ29sdW1uKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRUb2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBpcyhuZXh0VG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoL15ccyo+Ly50ZXN0KHNlc3Npb24uZ2V0TGluZShwb3NpdGlvbi5yb3cpLnNsaWNlKHBvc2l0aW9uLmNvbHVtbikpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB3aGlsZSAoIWlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBGb3J3YXJkKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciB0b2tlblJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICB2YXIgdG9rZW5Db2x1bW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Db2x1bW4oKTsKICAgICAgICAgICAgaWYgKGlzKGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpLCAiZW5kLXRhZy1vcGVuIikpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICBpZiAodG9rZW5Sb3cgPT0gcG9zaXRpb24ucm93KQogICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uLmNvbHVtbiAtIHRva2VuQ29sdW1uKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eShlbGVtZW50LnRvTG93ZXJDYXNlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgIHRleHQ6ICI+IiArICI8LyIgKyBlbGVtZW50ICsgIj4iLAogICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJhdXRvaW5kZW50IiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAiXG4iKSB7CiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUoY3Vyc29yLnJvdyk7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4pOwogICAgICAgICAgICB2YXIgdG9rZW4gPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW4oKTsKCiAgICAgICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1jbG9zZSIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09ICIvPiIpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICYmIHRva2VuLnR5cGUuaW5kZXhPZigidGFnLW5hbWUiKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHRhZyA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdmFyIHJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4gfHwgdG9rZW4udHlwZS5pbmRleE9mKCJlbmQtdGFnIikgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnZvaWRFbGVtZW50cyAmJiAhdGhpcy52b2lkRWxlbWVudHNbdGFnXSkgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBzZXNzaW9uLmdldFRva2VuQXQoY3Vyc29yLnJvdywgY3Vyc29yLmNvbHVtbisxKTsKICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0SW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSBuZXh0SW5kZW50ICsgc2Vzc2lvbi5nZXRUYWJTdHJpbmcoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRUb2tlbiAmJiBuZXh0VG9rZW4udmFsdWUgPT09ICI8LyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQgKyAiXG4iICsgbmV4dEluZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIGluZGVudC5sZW5ndGgsIDEsIGluZGVudC5sZW5ndGhdCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJcbiIgKyBpbmRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn07Cgpvb3AuaW5oZXJpdHMoWG1sQmVoYXZpb3VyLCBCZWhhdmlvdXIpOwoKZXhwb3J0cy5YbWxCZWhhdmlvdXIgPSBYbWxCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vLi4vbGliL2xhbmciKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZSgiLi4vLi4vdG9rZW5faXRlcmF0b3IiKS5Ub2tlbkl0ZXJhdG9yOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKHZvaWRFbGVtZW50cywgb3B0aW9uYWxFbmRUYWdzKSB7CiAgICBCYXNlRm9sZE1vZGUuY2FsbCh0aGlzKTsKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gdm9pZEVsZW1lbnRzIHx8IHt9OwogICAgdGhpcy5vcHRpb25hbEVuZFRhZ3MgPSBvb3AubWl4aW4oe30sIHRoaXMudm9pZEVsZW1lbnRzKTsKICAgIGlmIChvcHRpb25hbEVuZFRhZ3MpCiAgICAgICAgb29wLm1peGluKHRoaXMub3B0aW9uYWxFbmRUYWdzLCBvcHRpb25hbEVuZFRhZ3MpOwogICAgCn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCnZhciBUYWcgPSBmdW5jdGlvbigpIHsKICAgIHRoaXMudGFnTmFtZSA9ICIiOwogICAgdGhpcy5jbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnNlbGZDbG9zaW5nID0gZmFsc2U7CiAgICB0aGlzLnN0YXJ0ID0ge3JvdzogMCwgY29sdW1uOiAwfTsKICAgIHRoaXMuZW5kID0ge3JvdzogMCwgY29sdW1uOiAwfTsKfTsKCmZ1bmN0aW9uIGlzKHRva2VuLCB0eXBlKSB7CiAgICByZXR1cm4gdG9rZW4udHlwZS5sYXN0SW5kZXhPZih0eXBlICsgIi54bWwiKSA+IC0xOwp9CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgdGFnID0gdGhpcy5fZ2V0Rmlyc3RUYWdJbkxpbmUoc2Vzc2lvbiwgcm93KTsKCiAgICAgICAgaWYgKCF0YWcpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0KHNlc3Npb24sIHJvdyk7CgogICAgICAgIGlmICh0YWcuY2xvc2luZyB8fCAoIXRhZy50YWdOYW1lICYmIHRhZy5zZWxmQ2xvc2luZykpCiAgICAgICAgICAgIHJldHVybiBmb2xkU3R5bGUgPT0gIm1hcmtiZWdpbmVuZCIgPyAiZW5kIiA6ICIiOwoKICAgICAgICBpZiAoIXRhZy50YWdOYW1lIHx8IHRhZy5zZWxmQ2xvc2luZyB8fCB0aGlzLnZvaWRFbGVtZW50cy5oYXNPd25Qcm9wZXJ0eSh0YWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgcmV0dXJuICIiOwoKICAgICAgICBpZiAodGhpcy5fZmluZEVuZFRhZ0luTGluZShzZXNzaW9uLCByb3csIHRhZy50YWdOYW1lLCB0YWcuZW5kLmNvbHVtbikpCiAgICAgICAgICAgIHJldHVybiAiIjsKCiAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICB9OwogICAgCiAgICB0aGlzLmdldENvbW1lbnRGb2xkV2lkZ2V0ID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93KSB7CiAgICAgICAgaWYgKC9jb21tZW50Ly50ZXN0KHNlc3Npb24uZ2V0U3RhdGUocm93KSkgJiYgLzwhLS8udGVzdChzZXNzaW9uLmdldExpbmUocm93KSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICB0aGlzLl9nZXRGaXJzdFRhZ0luTGluZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciB0YWcgPSBuZXcgVGFnKCk7CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gPSB0YWcuc3RhcnQuY29sdW1uICsgdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbKytpXTsKICAgICAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB0YWcudGFnTmFtZSA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgdGFnLmVuZC5jb2x1bW4gKz0gdG9rZW4udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgZm9yIChpKys7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiArPSB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLWNsb3NlIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnNlbGZDbG9zaW5nID0gdG9rZW4udmFsdWUgPT0gJy8+JzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAnLz4nOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfTsKCiAgICB0aGlzLl9maW5kRW5kVGFnSW5MaW5lID0gZnVuY3Rpb24oc2Vzc2lvbiwgcm93LCB0YWdOYW1lLCBzdGFydENvbHVtbikgewogICAgICAgIHZhciB0b2tlbnMgPSBzZXNzaW9uLmdldFRva2Vucyhyb3cpOwogICAgICAgIHZhciBjb2x1bW4gPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgICAgICAgY29sdW1uICs9IHRva2VuLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGNvbHVtbiA8IHN0YXJ0Q29sdW1uKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpICsgMV07CiAgICAgICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udmFsdWUgPT0gdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5fcmVhZFRhZ0ZvcndhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRhZzsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUodG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpKTsKCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9OwogICAgCiAgICB0aGlzLl9yZWFkVGFnQmFja3dhcmQgPSBmdW5jdGlvbihpdGVyYXRvcikgewogICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgIHJldHVybiBudWxsOwoKICAgICAgICB2YXIgdGFnID0gbmV3IFRhZygpOwogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAidGFnLW9wZW4iKSkgewogICAgICAgICAgICAgICAgdGFnLmNsb3NpbmcgPSBpcyh0b2tlbiwgImVuZC10YWctb3BlbiIpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LnJvdyA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlblJvdygpOwogICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbkNvbHVtbigpOwogICAgICAgICAgICAgICAgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFnOwogICAgICAgICAgICB9IGVsc2UgaWYgKGlzKHRva2VuLCAidGFnLW5hbWUiKSkgewogICAgICAgICAgICAgICAgdGFnLnRhZ05hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmIChpcyh0b2tlbiwgInRhZy1jbG9zZSIpKSB7CiAgICAgICAgICAgICAgICB0YWcuc2VsZkNsb3NpbmcgPSB0b2tlbi52YWx1ZSA9PSAiLz4iOwogICAgICAgICAgICAgICAgdGFnLmVuZC5yb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlKHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCkpOwoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH07CiAgICAKICAgIHRoaXMuX3BvcCA9IGZ1bmN0aW9uKHN0YWNrLCB0YWcpIHsKICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgdG9wID0gc3RhY2tbc3RhY2subGVuZ3RoLTFdOwogICAgICAgICAgICBpZiAoIXRhZyB8fCB0b3AudGFnTmFtZSA9PSB0YWcudGFnTmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnBvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9uYWxFbmRUYWdzLmhhc093blByb3BlcnR5KHRvcC50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBmaXJzdFRhZyA9IHRoaXMuX2dldEZpcnN0VGFnSW5MaW5lKHNlc3Npb24sIHJvdyk7CiAgICAgICAgCiAgICAgICAgaWYgKCFmaXJzdFRhZykgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50Rm9sZFdpZGdldChzZXNzaW9uLCByb3cpCiAgICAgICAgICAgICAgICAmJiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBzZXNzaW9uLmdldExpbmUocm93KS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgaXNCYWNrd2FyZCA9IGZpcnN0VGFnLmNsb3NpbmcgfHwgZmlyc3RUYWcuc2VsZkNsb3Npbmc7CiAgICAgICAgdmFyIHN0YWNrID0gW107CiAgICAgICAgdmFyIHRhZzsKICAgICAgICAKICAgICAgICBpZiAoIWlzQmFja3dhcmQpIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5zdGFydC5jb2x1bW4pOwogICAgICAgICAgICB2YXIgc3RhcnQgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogZmlyc3RUYWcuc3RhcnQuY29sdW1uICsgZmlyc3RUYWcudGFnTmFtZS5sZW5ndGggKyAyCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChmaXJzdFRhZy5zdGFydC5yb3cgPT0gZmlyc3RUYWcuZW5kLnJvdykKICAgICAgICAgICAgICAgIHN0YXJ0LmNvbHVtbiA9IGZpcnN0VGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnRm9yd2FyZChpdGVyYXRvcikpIHsKICAgICAgICAgICAgICAgIGlmICh0YWcuc2VsZkNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uICs9IHRhZy50YWdOYW1lLmxlbmd0aCArIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhZy5lbmQuY29sdW1uIC09IDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgdGFnLmVuZCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBpZiAodGFnLmNsb3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Aoc3RhY2ssIHRhZyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCwgdGFnLnN0YXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGFnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGl0ZXJhdG9yID0gbmV3IFRva2VuSXRlcmF0b3Ioc2Vzc2lvbiwgcm93LCBmaXJzdFRhZy5lbmQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGVuZCA9IHsKICAgICAgICAgICAgICAgIHJvdzogcm93LAogICAgICAgICAgICAgICAgY29sdW1uOiBmaXJzdFRhZy5zdGFydC5jb2x1bW4KICAgICAgICAgICAgfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHdoaWxlICh0YWcgPSB0aGlzLl9yZWFkVGFnQmFja3dhcmQoaXRlcmF0b3IpKSB7CiAgICAgICAgICAgICAgICBpZiAodGFnLnNlbGZDbG9zaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICB0YWcuZW5kLmNvbHVtbiAtPSAyOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyh0YWcuc3RhcnQsIHRhZy5lbmQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaWYgKCF0YWcuY2xvc2luZykgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcChzdGFjaywgdGFnKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGFnLnN0YXJ0LmNvbHVtbiArPSB0YWcudGFnTmFtZS5sZW5ndGggKyAyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnLnN0YXJ0LnJvdyA9PSB0YWcuZW5kLnJvdyAmJiB0YWcuc3RhcnQuY29sdW1uIDwgdGFnLmVuZC5jb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcuc3RhcnQuY29sdW1uID0gdGFnLmVuZC5jb2x1bW47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRhZy5zdGFydCwgZW5kKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHRhZyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL2xpYi9sYW5nIiwiYWNlL21vZGUvdGV4dCIsImFjZS9tb2RlL3htbF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9iZWhhdmlvdXIveG1sIiwiYWNlL21vZGUvZm9sZGluZy94bWwiLCJhY2Uvd29ya2VyL3dvcmtlcl9jbGllbnQiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFhtbEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi94bWxfaGlnaGxpZ2h0X3J1bGVzIikuWG1sSGlnaGxpZ2h0UnVsZXM7CnZhciBYbWxCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94bWwiKS5YbWxCZWhhdmlvdXI7CnZhciBYbWxGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy94bWwiKS5Gb2xkTW9kZTsKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50OwoKdmFyIE1vZGUgPSBmdW5jdGlvbigpIHsKICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFhtbEhpZ2hsaWdodFJ1bGVzOwogICB0aGlzLiRiZWhhdmlvdXIgPSBuZXcgWG1sQmVoYXZpb3VyKCk7CiAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IFhtbEZvbGRNb2RlKCk7Cn07Cgpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMudm9pZEVsZW1lbnRzID0gbGFuZy5hcnJheVRvTWFwKFtdKTsKCiAgICB0aGlzLmJsb2NrQ29tbWVudCA9IHtzdGFydDogIjwhLS0iLCBlbmQ6ICItLT4ifTsKCiAgICB0aGlzLmNyZWF0ZVdvcmtlciA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUveG1sX3dvcmtlciIsICJXb3JrZXIiKTsKICAgICAgICB3b3JrZXIuYXR0YWNoVG9Eb2N1bWVudChzZXNzaW9uLmdldERvY3VtZW50KCkpOwoKICAgICAgICB3b3JrZXIub24oImVycm9yIiwgZnVuY3Rpb24oZSkgewogICAgICAgICAgICBzZXNzaW9uLnNldEFubm90YXRpb25zKGUuZGF0YSk7CiAgICAgICAgfSk7CgogICAgICAgIHdvcmtlci5vbigidGVybWluYXRlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gd29ya2VyOwogICAgfTsKICAgIAogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUveG1sIjsKfSkuY2FsbChNb2RlLnByb3RvdHlwZSk7CgpleHBvcnRzLk1vZGUgPSBNb2RlOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL21vZGUveG1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-xquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS94cXVlcnkveHF1ZXJ5X2xleGVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewptb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbiBvdXRlciAobW9kdWxlcywgY2FjaGUsIGVudHJ5KSB7CiAgICB2YXIgcHJldmlvdXNSZXF1aXJlID0gdHlwZW9mIHJlcXVpcmUgPT0gImZ1bmN0aW9uIiAmJiByZXF1aXJlOwogICAgZnVuY3Rpb24gbmV3UmVxdWlyZShuYW1lLCBqdW1wZWQpewogICAgICAgIGlmKCFjYWNoZVtuYW1lXSkgewogICAgICAgICAgICBpZighbW9kdWxlc1tuYW1lXSkgewogICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRSZXF1aXJlID0gdHlwZW9mIHJlcXVpcmUgPT0gImZ1bmN0aW9uIiAmJiByZXF1aXJlOwogICAgICAgICAgICAgICAgaWYgKCFqdW1wZWQgJiYgY3VycmVudFJlcXVpcmUpIHJldHVybiBjdXJyZW50UmVxdWlyZShuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JlcXVpcmUpIHJldHVybiBwcmV2aW91c1JlcXVpcmUobmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgXCcnICsgbmFtZSArICdcJycpOwogICAgICAgICAgICAgICAgZXJyLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7CiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG0gPSBjYWNoZVtuYW1lXSA9IHtleHBvcnRzOnt9fTsKICAgICAgICAgICAgbW9kdWxlc1tuYW1lXVswXS5jYWxsKG0uZXhwb3J0cywgZnVuY3Rpb24oeCl7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBtb2R1bGVzW25hbWVdWzFdW3hdOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ld1JlcXVpcmUoaWQgPyBpZCA6IHgpOwogICAgICAgICAgICB9LG0sbS5leHBvcnRzLG91dGVyLG1vZHVsZXMsY2FjaGUsZW50cnkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2FjaGVbbmFtZV0uZXhwb3J0czsKICAgIH0KICAgIGZvcih2YXIgaT0wO2k8ZW50cnkubGVuZ3RoO2krKykgbmV3UmVxdWlyZShlbnRyeVtpXSk7CiAgICByZXR1cm4gbmV3UmVxdWlyZShlbnRyeVswXSk7Cn0pCih7Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9sZXhlcnMvWFF1ZXJ5VG9rZW5pemVyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYUXVlcnlUb2tlbml6ZXIgPSBleHBvcnRzLlhRdWVyeVRva2VuaXplciA9IGZ1bmN0aW9uIFhRdWVyeVRva2VuaXplcihzdHJpbmcsIHBhcnNpbmdFdmVudEhhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0KHN0cmluZywgcGFyc2luZ0V2ZW50SGFuZGxlcik7CiAgdmFyIHNlbGYgPSB0aGlzOwoKICB0aGlzLlBhcnNlRXhjZXB0aW9uID0gZnVuY3Rpb24oYiwgZSwgcywgbywgeCkKICB7CiAgICB2YXIKICAgICAgYmVnaW4gPSBiLAogICAgICBlbmQgPSBlLAogICAgICBzdGF0ZSA9IHMsCiAgICAgIG9mZmVuZGluZyA9IG8sCiAgICAgIGV4cGVjdGVkID0geDsKCiAgICB0aGlzLmdldEJlZ2luID0gZnVuY3Rpb24oKSB7cmV0dXJuIGJlZ2luO307CiAgICB0aGlzLmdldEVuZCA9IGZ1bmN0aW9uKCkge3JldHVybiBlbmQ7fTsKICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbigpIHtyZXR1cm4gc3RhdGU7fTsKICAgIHRoaXMuZ2V0RXhwZWN0ZWQgPSBmdW5jdGlvbigpIHtyZXR1cm4gZXhwZWN0ZWQ7fTsKICAgIHRoaXMuZ2V0T2ZmZW5kaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9mZmVuZGluZzt9OwoKICAgIHRoaXMuZ2V0TWVzc2FnZSA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgcmV0dXJuIG9mZmVuZGluZyA8IDAgPyAibGV4aWNhbCBhbmFseXNpcyBmYWlsZWQiIDogInN5bnRheCBlcnJvciI7CiAgICB9OwogIH07CgogIGZ1bmN0aW9uIGluaXQoc3RyaW5nLCBwYXJzaW5nRXZlbnRIYW5kbGVyKQogIHsKICAgIGV2ZW50SGFuZGxlciA9IHBhcnNpbmdFdmVudEhhbmRsZXI7CiAgICBpbnB1dCA9IHN0cmluZzsKICAgIHNpemUgPSBzdHJpbmcubGVuZ3RoOwogICAgcmVzZXQoMCwgMCwgMCk7CiAgfQoKICB0aGlzLmdldElucHV0ID0gZnVuY3Rpb24oKQogIHsKICAgIHJldHVybiBpbnB1dDsKICB9OwoKICBmdW5jdGlvbiByZXNldChsLCBiLCBlKQogIHsKICAgICAgICAgICAgYjAgPSBiOyBlMCA9IGI7CiAgICBsMSA9IGw7IGIxID0gYjsgZTEgPSBlOwogICAgZW5kID0gZTsKICAgIGV2ZW50SGFuZGxlci5yZXNldChpbnB1dCk7CiAgfQoKICB0aGlzLmdldE9mZmVuZGluZ1Rva2VuID0gZnVuY3Rpb24oZSkKICB7CiAgICB2YXIgbyA9IGUuZ2V0T2ZmZW5kaW5nKCk7CiAgICByZXR1cm4gbyA+PSAwID8gWFF1ZXJ5VG9rZW5pemVyLlRPS0VOW29dIDogbnVsbDsKICB9OwoKICB0aGlzLmdldEV4cGVjdGVkVG9rZW5TZXQgPSBmdW5jdGlvbihlKQogIHsKICAgIHZhciBleHBlY3RlZDsKICAgIGlmIChlLmdldEV4cGVjdGVkKCkgPCAwKQogICAgewogICAgICBleHBlY3RlZCA9IFhRdWVyeVRva2VuaXplci5nZXRUb2tlblNldCgtIGUuZ2V0U3RhdGUoKSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGV4cGVjdGVkID0gW1hRdWVyeVRva2VuaXplci5UT0tFTltlLmdldEV4cGVjdGVkKCldXTsKICAgIH0KICAgIHJldHVybiBleHBlY3RlZDsKICB9OwoKICB0aGlzLmdldEVycm9yTWVzc2FnZSA9IGZ1bmN0aW9uKGUpCiAgewogICAgdmFyIHRva2VuU2V0ID0gdGhpcy5nZXRFeHBlY3RlZFRva2VuU2V0KGUpOwogICAgdmFyIGZvdW5kID0gdGhpcy5nZXRPZmZlbmRpbmdUb2tlbihlKTsKICAgIHZhciBwcmVmaXggPSBpbnB1dC5zdWJzdHJpbmcoMCwgZS5nZXRCZWdpbigpKTsKICAgIHZhciBsaW5lcyA9IHByZWZpeC5zcGxpdCgiXG4iKTsKICAgIHZhciBsaW5lID0gbGluZXMubGVuZ3RoOwogICAgdmFyIGNvbHVtbiA9IGxpbmVzW2xpbmUgLSAxXS5sZW5ndGggKyAxOwogICAgdmFyIHNpemUgPSBlLmdldEVuZCgpIC0gZS5nZXRCZWdpbigpOwogICAgcmV0dXJuIGUuZ2V0TWVzc2FnZSgpCiAgICAgICAgICsgKGZvdW5kID09IG51bGwgPyAiIiA6ICIsIGZvdW5kICIgKyBmb3VuZCkKICAgICAgICAgKyAiXG53aGlsZSBleHBlY3RpbmcgIgogICAgICAgICArICh0b2tlblNldC5sZW5ndGggPT0gMSA/IHRva2VuU2V0WzBdIDogKCJbIiArIHRva2VuU2V0LmpvaW4oIiwgIikgKyAiXSIpKQogICAgICAgICArICJcbiIKICAgICAgICAgKyAoc2l6ZSA9PSAwIHx8IGZvdW5kICE9IG51bGwgPyAiIiA6ICJhZnRlciBzdWNjZXNzZnVsbHkgc2Nhbm5pbmcgIiArIHNpemUgKyAiIGNoYXJhY3RlcnMgYmVnaW5uaW5nICIpCiAgICAgICAgICsgImF0IGxpbmUgIiArIGxpbmUgKyAiLCBjb2x1bW4gIiArIGNvbHVtbiArICI6XG4uLi4iCiAgICAgICAgICsgaW5wdXQuc3Vic3RyaW5nKGUuZ2V0QmVnaW4oKSwgTWF0aC5taW4oaW5wdXQubGVuZ3RoLCBlLmdldEJlZ2luKCkgKyA2NCkpCiAgICAgICAgICsgIi4uLiI7CiAgfTsKCiAgdGhpcy5wYXJzZV9zdGFydCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgic3RhcnQiLCBlMCk7CiAgICBsb29rYWhlYWQxVygxNCk7ICAgICAgICAgICAgICAgIC8vIE1vZHVsZURlY2wgfCBBbm5vdGF0aW9uIHwgT3B0aW9uRGVjbCB8IE9wZXJhdG9yIHwgVmFyaWFibGUgfCBUYWcgfCBBdHRyVGVzdCB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBzaGlmdCg1NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBicmVhazsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIHNoaWZ0KDU0KTsgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBicmVhazsKICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICBzaGlmdCg1Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIHNoaWZ0KDQwKTsgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgYnJlYWs7CiAgICBjYXNlIDQyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoOn4nCiAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAgIC8vICcoOn4nCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBjYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBzaGlmdCgyNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzEpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBzaGlmdCgzOSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBzaGlmdCg0Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICBzaGlmdCg0OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgYnJlYWs7CiAgICBjYXNlIDYyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICBzaGlmdCg2Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgYnJlYWs7CiAgICBjYXNlIDYzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgICBzaGlmdCg2Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBzaGlmdCg0Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICBzaGlmdCg0OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgYnJlYWs7CiAgICBjYXNlIDUzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgYnJlYWs7CiAgICBjYXNlIDUxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICBzaGlmdCg1MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDM0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICchJwogICAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBzaGlmdCgyNzMpOyAgICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFubm90YXRpb24KICAgICAgc2hpZnQoMik7ICAgICAgICAgICAgICAgICAgICAgLy8gQW5ub3RhdGlvbgogICAgICBicmVhazsKICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9kdWxlRGVjbAogICAgICBzaGlmdCgxKTsgICAgICAgICAgICAgICAgICAgICAvLyBNb2R1bGVEZWNsCiAgICAgIGJyZWFrOwogICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25EZWNsCiAgICAgIHNoaWZ0KDMpOyAgICAgICAgICAgICAgICAgICAgIC8vIE9wdGlvbkRlY2wKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJUZXN0CiAgICAgIHNoaWZ0KDEyKTsgICAgICAgICAgICAgICAgICAgIC8vIEF0dHJUZXN0CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBzaGlmdCgxMyk7ICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBicmVhazsKICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgc2hpZnQoMTUpOyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIHNoaWZ0KDE2KTsgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICAgIHNoaWZ0KDE3KTsgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDU6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxlCiAgICAgIHNoaWZ0KDUpOyAgICAgICAgICAgICAgICAgICAgIC8vIFZhcmlhYmxlCiAgICAgIGJyZWFrOwogICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWcKICAgICAgc2hpZnQoNik7ICAgICAgICAgICAgICAgICAgICAgLy8gVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYXRvcgogICAgICBzaGlmdCg0KTsgICAgICAgICAgICAgICAgICAgICAvLyBPcGVyYXRvcgogICAgICBicmVhazsKICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0VRTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJzdGFydCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1N0YXJ0VGFnID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTdGFydFRhZyIsIGUwKTsKICAgIGxvb2thaGVhZDFXKDgpOyAgICAgICAgICAgICAgICAgLy8gUU5hbWUgfCBTXldTIHwgRU9GIHwgJyInIHwgIiciIHwgJy8+JyB8ICc9JyB8ICc+JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgIHNoaWZ0KDU4KTsgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBicmVhazsKICAgIGNhc2UgNTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy8+JwogICAgICBzaGlmdCg1MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnLz4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzogICAgICAgICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICBzaGlmdCgyNyk7ICAgICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICBicmVhazsKICAgIGNhc2UgNTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIHNoaWZ0KDU3KTsgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBicmVhazsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBicmVhazsKICAgIGNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTdGFydFRhZyIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1RhZ0NvbnRlbnQgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRhZ0NvbnRlbnQiLCBlMCk7CiAgICBsb29rYWhlYWQxKDExKTsgICAgICAgICAgICAgICAgIC8vIFRhZyB8IEVuZFRhZyB8IFByZWRlZmluZWRFbnRpdHlSZWYgfCBFbGVtZW50Q29udGVudENoYXIgfCBDaGFyUmVmIHwgRU9GIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnRDb250ZW50Q2hhcgogICAgICBzaGlmdCgyMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50Q29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhZwogICAgICBzaGlmdCg2KTsgICAgICAgICAgICAgICAgICAgICAvLyBUYWcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuZFRhZwogICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAvLyBFbmRUYWcKICAgICAgYnJlYWs7CiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IVtDREFUQVsnCiAgICAgIHNoaWZ0KDU1KTsgICAgICAgICAgICAgICAgICAgIC8vICc8IVtDREFUQVsnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgICAgc2hpZnQoNTQpOyAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODogICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIHNoaWZ0KDE4KTsgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgc2hpZnQoMjkpOyAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBzaGlmdCgyNzIpOyAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIHNoaWZ0KDI3NSk7ICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzEpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVGFnQ29udGVudCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX0Fwb3NBdHRyID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcG9zQXR0ciIsIGUwKTsKICAgIGxvb2thaGVhZDEoMTApOyAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZUFwb3MgfCBBcG9zQXR0ckNvbnRlbnRDaGFyIHwgQ2hhclJlZiB8IEVPRiB8ICInIiB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgIHNoaWZ0KDIwKTsgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnQoMjUpOyAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0F0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDI5KTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjcyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFwb3NBdHRyIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUXVvdEF0dHIgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlF1b3RBdHRyIiwgZTApOwogICAgbG9va2FoZWFkMSg5KTsgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlUXVvdCB8IFF1b3RBdHRyQ29udGVudENoYXIgfCBDaGFyUmVmIHwgRU9GIHwgJyInIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgc2hpZnQoMTkpOyAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlUXVvdAogICAgICBicmVhazsKICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVvdEF0dHJDb250ZW50Q2hhcgogICAgICBzaGlmdCgyNCk7ICAgICAgICAgICAgICAgICAgICAvLyBRdW90QXR0ckNvbnRlbnRDaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODogICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIHNoaWZ0KDE4KTsgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgc2hpZnQoMjkpOyAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBzaGlmdCgyNzIpOyAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIHNoaWZ0KDI3NSk7ICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzEpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUXVvdEF0dHIiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9DRGF0YSA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ0RhdGEiLCBlMCk7CiAgICBsb29rYWhlYWQxKDEpOyAgICAgICAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbkNvbnRlbnRzIHwgRU9GIHwgJ11dPicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbkNvbnRlbnRzCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbkNvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgY2FzZSA2NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnXV0+JwogICAgICBzaGlmdCg2NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnXV0+JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDRGF0YSIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1hNTENvbW1lbnQgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlhNTENvbW1lbnQiLCBlMCk7CiAgICBsb29rYWhlYWQxKDApOyAgICAgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cyB8IEVPRiB8ICctLT4nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgICAgc2hpZnQoOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgY2FzZSA0NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JwogICAgICBzaGlmdCg0Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnLS0+JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJYTUxDb21tZW50IiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUEkgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBJIiwgZTApOwogICAgbG9va2FoZWFkMSgzKTsgICAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzIHwgRU9GIHwgJz8nIHwgJz8+JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlyUElDb250ZW50cwogICAgICBzaGlmdCgxMCk7ICAgICAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgY2FzZSA1OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgICAgc2hpZnQoNTkpOyAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIGJyZWFrOwogICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgICAgIHNoaWZ0KDYwKTsgICAgICAgICAgICAgICAgICAgIC8vICc/PicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUEkiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9QcmFnbWEgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByYWdtYSIsIGUwKTsKICAgIGxvb2thaGVhZDEoMik7ICAgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMgfCBFT0YgfCAnIycgfCAnIyknCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmFnbWFDb250ZW50cwogICAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAvLyBQcmFnbWFDb250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgMzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyMnCiAgICAgIHNoaWZ0KDM2KTsgICAgICAgICAgICAgICAgICAgIC8vICcjJwogICAgICBicmVhazsKICAgIGNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyMpJwogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnIyknCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByYWdtYSIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX0NvbW1lbnQgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbW1lbnQiLCBlMCk7CiAgICBsb29rYWhlYWQxKDQpOyAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRDb250ZW50cyB8IEVPRiB8ICcoOicgfCAnOiknCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICAgICAgYnJlYWs7CiAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBicmVhazsKICAgIGNhc2UgMzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tbWVudENvbnRlbnRzCiAgICAgIHNoaWZ0KDMwKTsgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRDb250ZW50cwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21tZW50IiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfQ29tbWVudERvYyA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tbWVudERvYyIsIGUwKTsKICAgIGxvb2thaGVhZDEoNSk7ICAgICAgICAgICAgICAgICAgLy8gRG9jVGFnIHwgRG9jQ29tbWVudENvbnRlbnRzIHwgRU9GIHwgJyg6JyB8ICc6KScKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvY1RhZwogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyBEb2NUYWcKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvY0NvbW1lbnRDb250ZW50cwogICAgICBzaGlmdCgzMik7ICAgICAgICAgICAgICAgICAgICAvLyBEb2NDb21tZW50Q29udGVudHMKICAgICAgYnJlYWs7CiAgICBjYXNlIDUyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICAgICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJzopJwogICAgICBicmVhazsKICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbW1lbnREb2MiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9RdW90U3RyaW5nID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJRdW90U3RyaW5nIiwgZTApOwogICAgbG9va2FoZWFkMSg2KTsgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlUXVvdCB8IFF1b3RDaGFyIHwgQ2hhclJlZiB8IEVPRiB8ICciJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDI5KTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgc2hpZnQoMTkpOyAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlUXVvdAogICAgICBicmVhazsKICAgIGNhc2UgMjE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUXVvdENoYXIKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUXVvdENoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUXVvdFN0cmluZyIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX0Fwb3NTdHJpbmcgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFwb3NTdHJpbmciLCBlMCk7CiAgICBsb29rYWhlYWQxKDcpOyAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYgfCBFc2NhcGVBcG9zIHwgQXBvc0NoYXIgfCBDaGFyUmVmIHwgRU9GIHwgIiciCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxODogICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIHNoaWZ0KDE4KTsgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgc2hpZnQoMjkpOyAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICBzaGlmdCgyMCk7ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBBcG9zQ2hhcgogICAgICBzaGlmdCgyMik7ICAgICAgICAgICAgICAgICAgICAvLyBBcG9zQ2hhcgogICAgICBicmVhazsKICAgIGNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcG9zU3RyaW5nIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUHJlZml4ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVmaXgiLCBlMCk7CiAgICBsb29rYWhlYWQxVygxMyk7ICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfTkNOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZWZpeCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX19FUU5hbWUgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIl9FUU5hbWUiLCBlMCk7CiAgICBsb29rYWhlYWQxVygxMik7ICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIl9FUU5hbWUiLCBlMCk7CiAgfTsKCiAgZnVuY3Rpb24gcGFyc2VfRVFOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRVFOYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnQoNzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBzaGlmdCgxMTUpOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdCgxMTYpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBzaGlmdCgxNDApOyAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIHNoaWZ0KDE0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBzaGlmdCgxNjApOyAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgc2hpZnQoMTgwKTsgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIHNoaWZ0KDE4Nik7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMjExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0KDIxMSk7ICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDIyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBzaGlmdCgyMjIpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgICBzaGlmdCgyMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIHNoaWZ0KDIzOSk7ICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIHNoaWZ0KDI0OCk7ICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0Z1bmN0aW9uTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFUU5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GdW5jdGlvbk5hbWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGdW5jdGlvbk5hbWUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNDogICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgICAgc2hpZnQoMTQpOyAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIGJyZWFrOwogICAgY2FzZSA2NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIHNoaWZ0KDY1KTsgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnQoNjgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0KDY5KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnQoNzApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnQoNzQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnQoNzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnQoODMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnQoODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0KDg1KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnQoODgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBzaGlmdCg5OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgc2hpZnQoMTAwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0KDEwMyk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIHNoaWZ0KDEwNCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBicmVhazsKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnQoMTA1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0KDEwNyk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgc2hpZnQoMTA4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBzaGlmdCgxMTMpOyAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBzaGlmdCgxMTQpOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnQoMTE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0KDExOCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0KDEyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgc2hpZnQoMTI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgc2hpZnQoMTI2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgc2hpZnQoMTI5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgc2hpZnQoMTMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgc2hpZnQoMTMxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgc2hpZnQoMTMyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgc2hpZnQoMTQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBicmVhazsKICAgIGNhc2UgMTQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBzaGlmdCgxNDMpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIHNoaWZ0KDE0NSk7ICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBzaGlmdCgxNDYpOyAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIHNoaWZ0KDE0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBzaGlmdCgxNTQpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdCgxNTUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdCgxNTcpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0KDE1OCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdCgxNTkpOyAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgc2hpZnQoMTY1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0KDE2Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0KDE2OSk7ICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0KDE3Myk7ICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0KDE3NSk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgc2hpZnQoMTc3KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0KDE3OSk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIHNoaWZ0KDE4MSk7ICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgICBzaGlmdCgxOTMpOyAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgc2hpZnQoMTk1KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBicmVhazsKICAgIGNhc2UgMTk2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBzaGlmdCgxOTYpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnQoMTk3KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdCgyMDEpOyAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnQoMjA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnQoMjA4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnQoMjEzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdCgyMTQpOyAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIHNoaWZ0KDIxNSk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBzaGlmdCgyMTkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBicmVhazsKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0KDIzMCk7ICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjMxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgc2hpZnQoMjMxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgc2hpZnQoMjMyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBzaGlmdCgyNDMpOyAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIHNoaWZ0KDI0NCk7ICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0KDI0NSk7ICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIHNoaWZ0KDI0OSk7ICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIHNoaWZ0KDI1MSk7ICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIHNoaWZ0KDI1NSk7ICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgc2hpZnQoMjYxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIHNoaWZ0KDI2NSk7ICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBicmVhazsKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScKICAgICAgc2hpZnQoMjY5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDY3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgc2hpZnQoNjcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIHNoaWZ0KDc4KTsgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIHNoaWZ0KDg2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0KDkzKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIHNoaWZ0KDk3KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIHNoaWZ0KDk5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgc2hpZnQoMTIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIHNoaWZ0KDEyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBicmVhazsKICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBzaGlmdCgxMjgpOyAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBzaGlmdCgxMzYpOyAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBzaGlmdCgxNDkpOyAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIHNoaWZ0KDE1MCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIHNoaWZ0KDE1Nik7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBzaGlmdCgxNjYpOyAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBzaGlmdCgxODcpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICBzaGlmdCgxOTQpOyAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBzaGlmdCgxOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICBzaGlmdCgyMTcpOyAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgc2hpZnQoMjIzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIHNoaWZ0KDIyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgc2hpZnQoMjM1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgc2hpZnQoMjQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIHNoaWZ0KDI0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBicmVhazsKICAgIGNhc2UgMjUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBzaGlmdCgyNTIpOyAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIHNoaWZ0KDI1Nik7ICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgc2hpZnQoMjU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIHNoaWZ0KDI1OCk7ICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBzaGlmdCgyNjIpOyAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgc2hpZnQoOTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgc2hpZnQoMTcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjE2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25OYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTkNOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTkNOYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuCiAgICAgIHNoaWZ0KDI2KTsgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgICBicmVhazsKICAgIGNhc2UgNjU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdCg2NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBzaGlmdCg3MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBicmVhazsKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBzaGlmdCg3NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICBzaGlmdCg3NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgNzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBzaGlmdCg4NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgc2hpZnQoODUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgc2hpZnQoMTAwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIHNoaWZ0KDEwNCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBicmVhazsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgc2hpZnQoMTEzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBzaGlmdCgxMTcpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgc2hpZnQoMTE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgc2hpZnQoMTIxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgc2hpZnQoMTIzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBicmVhazsKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgc2hpZnQoMTI2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIHNoaWZ0KDEzMik7ICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIHNoaWZ0KDE0MSk7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgc2hpZnQoMTQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBzaGlmdCgxNDUpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgc2hpZnQoMTQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIHNoaWZ0KDE1NSk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIHNoaWZ0KDE1Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgc2hpZnQoMTU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIHNoaWZ0KDE1OSk7ICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgc2hpZnQoMTY3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBicmVhazsKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgc2hpZnQoMTY5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgc2hpZnQoMTczKTsgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgc2hpZnQoMTc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgIHNoaWZ0KDE3Nik7ICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIHNoaWZ0KDE4MSk7ICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgICBzaGlmdCgxOTMpOyAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgc2hpZnQoMTk1KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBicmVhazsKICAgIGNhc2UgMTk2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBzaGlmdCgxOTYpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBzaGlmdCgyMTUpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBicmVhazsKICAgIGNhc2UgMjE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgc2hpZnQoMjE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIHNoaWZ0KDIzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIHNoaWZ0KDIzMik7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgc2hpZnQoMjQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBzaGlmdCgyNDQpOyAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIHNoaWZ0KDI0OSk7ICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgc2hpZnQoMjYxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIHNoaWZ0KDI2NSk7ICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBicmVhazsKICAgIGNhc2UgNjg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBzaGlmdCg2OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIGJyZWFrOwogICAgY2FzZSA2OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgc2hpZnQoNjkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBzaGlmdCg3Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBicmVhazsKICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgc2hpZnQoOTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgc2hpZnQoOTgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgc2hpZnQoMTAzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgICBzaGlmdCgxMDUpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIHNoaWZ0KDEwNik7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgc2hpZnQoMTA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgc2hpZnQoMTE0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTE1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIHNoaWZ0KDExNSk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIHNoaWZ0KDExNik7ICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBzaGlmdCgxMTkpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIHNoaWZ0KDEyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgc2hpZnQoMTI5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgc2hpZnQoMTMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgc2hpZnQoMTMxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBzaGlmdCgxNDApOyAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIHNoaWZ0KDE0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIHNoaWZ0KDE0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBzaGlmdCgxNTQpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIHNoaWZ0KDE2MCk7ICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBicmVhazsKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIHNoaWZ0KDE2NSk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgc2hpZnQoMTc3KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0KDE3OSk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHNoaWZ0KDE4MCk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdCgxODYpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBzaGlmdCgxOTcpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIHNoaWZ0KDIwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgICBzaGlmdCgyMDcpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBzaGlmdCgyMDgpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgc2hpZnQoMjExKTsgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICBzaGlmdCgyMTMpOyAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICBicmVhazsKICAgIGNhc2UgMjE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIHNoaWZ0KDIxNCk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDIyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBzaGlmdCgyMjIpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgc2hpZnQoMjMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgICBzaGlmdCgyMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIHNoaWZ0KDIzOSk7ICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgc2hpZnQoMjQ1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBzaGlmdCgyNDgpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIHNoaWZ0KDI1MSk7ICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIHNoaWZ0KDI1NSk7ICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgc2hpZnQoMjU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScKICAgICAgc2hpZnQoMjY5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDY3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgc2hpZnQoNjcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIHNoaWZ0KDc4KTsgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIHNoaWZ0KDg2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0KDkzKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIHNoaWZ0KDk3KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIHNoaWZ0KDk5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgc2hpZnQoMTIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIHNoaWZ0KDEyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBicmVhazsKICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBzaGlmdCgxMjgpOyAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBzaGlmdCgxMzYpOyAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBzaGlmdCgxNDkpOyAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIHNoaWZ0KDE1MCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIHNoaWZ0KDE1Nik7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBzaGlmdCgxNjYpOyAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBzaGlmdCgxODcpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICBzaGlmdCgxOTQpOyAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBzaGlmdCgxOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICBzaGlmdCgyMTcpOyAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgc2hpZnQoMjIzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIHNoaWZ0KDIyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgc2hpZnQoMjM1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgc2hpZnQoMjQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIHNoaWZ0KDI0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBicmVhazsKICAgIGNhc2UgMjUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBzaGlmdCgyNTIpOyAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIHNoaWZ0KDI1Nik7ICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBzaGlmdCgyNTgpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgc2hpZnQoMjYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIHNoaWZ0KDE3MSk7ICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5DTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHNoaWZ0KHQpCiAgewogICAgaWYgKGwxID09IHQpCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgZXZlbnRIYW5kbGVyLnRlcm1pbmFsKFhRdWVyeVRva2VuaXplci5UT0tFTltsMV0sIGIxLCBlMSA+IHNpemUgPyBzaXplIDogZTEpOwogICAgICBiMCA9IGIxOyBlMCA9IGUxOyBsMSA9IDA7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGVycm9yKGIxLCBlMSwgMCwgbDEsIHQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gd2hpdGVzcGFjZSgpCiAgewogICAgaWYgKGUwICE9IGIxKQogICAgewogICAgICBiMCA9IGUwOwogICAgICBlMCA9IGIxOwogICAgICBldmVudEhhbmRsZXIud2hpdGVzcGFjZShiMCwgZTApOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbWF0Y2hXKHNldCkKICB7CiAgICB2YXIgY29kZTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGNvZGUgPSBtYXRjaChzZXQpOwogICAgICBpZiAoY29kZSAhPSAyOCkgICAgICAgICAgICAgICAvLyBTXldTCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvZGU7CiAgfQoKICBmdW5jdGlvbiBsb29rYWhlYWQxVyhzZXQpCiAgewogICAgaWYgKGwxID09IDApCiAgICB7CiAgICAgIGwxID0gbWF0Y2hXKHNldCk7CiAgICAgIGIxID0gYmVnaW47CiAgICAgIGUxID0gZW5kOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbG9va2FoZWFkMShzZXQpCiAgewogICAgaWYgKGwxID09IDApCiAgICB7CiAgICAgIGwxID0gbWF0Y2goc2V0KTsKICAgICAgYjEgPSBiZWdpbjsKICAgICAgZTEgPSBlbmQ7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBlcnJvcihiLCBlLCBzLCBsLCB0KQogIHsKICAgIHRocm93IG5ldyBzZWxmLlBhcnNlRXhjZXB0aW9uKGIsIGUsIHMsIGwsIHQpOwogIH0KCiAgdmFyIGxrLCBiMCwgZTA7CiAgdmFyIGwxLCBiMSwgZTE7CiAgdmFyIGV2ZW50SGFuZGxlcjsKCiAgdmFyIGlucHV0OwogIHZhciBzaXplOwogIHZhciBiZWdpbjsKICB2YXIgZW5kOwoKICBmdW5jdGlvbiBtYXRjaCh0b2tlblNldElkKQogIHsKICAgIHZhciBub25ibXAgPSBmYWxzZTsKICAgIGJlZ2luID0gZW5kOwogICAgdmFyIGN1cnJlbnQgPSBlbmQ7CiAgICB2YXIgcmVzdWx0ID0gWFF1ZXJ5VG9rZW5pemVyLklOSVRJQUxbdG9rZW5TZXRJZF07CiAgICB2YXIgc3RhdGUgPSAwOwoKICAgIGZvciAodmFyIGNvZGUgPSByZXN1bHQgJiA0MDk1OyBjb2RlICE9IDA7ICkKICAgIHsKICAgICAgdmFyIGNoYXJjbGFzczsKICAgICAgdmFyIGMwID0gY3VycmVudCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGN1cnJlbnQpIDogMDsKICAgICAgKytjdXJyZW50OwogICAgICBpZiAoYzAgPCAweDgwKQogICAgICB7CiAgICAgICAgY2hhcmNsYXNzID0gWFF1ZXJ5VG9rZW5pemVyLk1BUDBbYzBdOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGMwIDwgMHhkODAwKQogICAgICB7CiAgICAgICAgdmFyIGMxID0gYzAgPj4gNDsKICAgICAgICBjaGFyY2xhc3MgPSBYUXVlcnlUb2tlbml6ZXIuTUFQMVsoYzAgJiAxNSkgKyBYUXVlcnlUb2tlbml6ZXIuTUFQMVsoYzEgJiAzMSkgKyBYUXVlcnlUb2tlbml6ZXIuTUFQMVtjMSA+PiA1XV1dOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIGlmIChjMCA8IDB4ZGMwMCkKICAgICAgICB7CiAgICAgICAgICB2YXIgYzEgPSBjdXJyZW50IDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoY3VycmVudCkgOiAwOwogICAgICAgICAgaWYgKGMxID49IDB4ZGMwMCAmJiBjMSA8IDB4ZTAwMCkKICAgICAgICAgIHsKICAgICAgICAgICAgKytjdXJyZW50OwogICAgICAgICAgICBjMCA9ICgoYzAgJiAweDNmZikgPDwgMTApICsgKGMxICYgMHgzZmYpICsgMHgxMDAwMDsKICAgICAgICAgICAgbm9uYm1wID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGxvID0gMCwgaGkgPSA1OwogICAgICAgIGZvciAodmFyIG0gPSAzOyA7IG0gPSAoaGkgKyBsbykgPj4gMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoWFF1ZXJ5VG9rZW5pemVyLk1BUDJbbV0gPiBjMCkgaGkgPSBtIC0gMTsKICAgICAgICAgIGVsc2UgaWYgKFhRdWVyeVRva2VuaXplci5NQVAyWzYgKyBtXSA8IGMwKSBsbyA9IG0gKyAxOwogICAgICAgICAgZWxzZSB7Y2hhcmNsYXNzID0gWFF1ZXJ5VG9rZW5pemVyLk1BUDJbMTIgKyBtXTsgYnJlYWs7fQogICAgICAgICAgaWYgKGxvID4gaGkpIHtjaGFyY2xhc3MgPSAwOyBicmVhazt9CiAgICAgICAgfQogICAgICB9CgogICAgICBzdGF0ZSA9IGNvZGU7CiAgICAgIHZhciBpMCA9IChjaGFyY2xhc3MgPDwgMTIpICsgY29kZSAtIDE7CiAgICAgIGNvZGUgPSBYUXVlcnlUb2tlbml6ZXIuVFJBTlNJVElPTlsoaTAgJiAxNSkgKyBYUXVlcnlUb2tlbml6ZXIuVFJBTlNJVElPTltpMCA+PiA0XV07CgogICAgICBpZiAoY29kZSA+IDQwOTUpCiAgICAgIHsKICAgICAgICByZXN1bHQgPSBjb2RlOwogICAgICAgIGNvZGUgJj0gNDA5NTsKICAgICAgICBlbmQgPSBjdXJyZW50OwogICAgICB9CiAgICB9CgogICAgcmVzdWx0ID4+PSAxMjsKICAgIGlmIChyZXN1bHQgPT0gMCkKICAgIHsKICAgICAgZW5kID0gY3VycmVudCAtIDE7CiAgICAgIHZhciBjMSA9IGVuZCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGVuZCkgOiAwOwogICAgICBpZiAoYzEgPj0gMHhkYzAwICYmIGMxIDwgMHhlMDAwKSAtLWVuZDsKICAgICAgcmV0dXJuIGVycm9yKGJlZ2luLCBlbmQsIHN0YXRlLCAtMSwgLTEpOwogICAgfQoKICAgIGlmIChub25ibXApCiAgICB7CiAgICAgIGZvciAodmFyIGkgPSByZXN1bHQgPj4gOTsgaSA+IDA7IC0taSkKICAgICAgewogICAgICAgIC0tZW5kOwogICAgICAgIHZhciBjMSA9IGVuZCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGVuZCkgOiAwOwogICAgICAgIGlmIChjMSA+PSAweGRjMDAgJiYgYzEgPCAweGUwMDApIC0tZW5kOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGVuZCAtPSByZXN1bHQgPj4gOTsKICAgIH0KCiAgICByZXR1cm4gKHJlc3VsdCAmIDUxMSkgLSAxOwogIH0KfQoKWFF1ZXJ5VG9rZW5pemVyLmdldFRva2VuU2V0ID0gZnVuY3Rpb24odG9rZW5TZXRJZCkKewogIHZhciBzZXQgPSBbXTsKICB2YXIgcyA9IHRva2VuU2V0SWQgPCAwID8gLSB0b2tlblNldElkIDogSU5JVElBTFt0b2tlblNldElkXSAmIDQwOTU7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNzY7IGkgKz0gMzIpCiAgewogICAgdmFyIGogPSBpOwogICAgdmFyIGkwID0gKGkgPj4gNSkgKiAyMDYyICsgcyAtIDE7CiAgICB2YXIgaTEgPSBpMCA+PiAyOwogICAgdmFyIGkyID0gaTEgPj4gMjsKICAgIHZhciBmID0gWFF1ZXJ5VG9rZW5pemVyLkVYUEVDVEVEWyhpMCAmIDMpICsgWFF1ZXJ5VG9rZW5pemVyLkVYUEVDVEVEWyhpMSAmIDMpICsgWFF1ZXJ5VG9rZW5pemVyLkVYUEVDVEVEWyhpMiAmIDMpICsgWFF1ZXJ5VG9rZW5pemVyLkVYUEVDVEVEW2kyID4+IDJdXV1dOwogICAgZm9yICggOyBmICE9IDA7IGYgPj4+PSAxLCArK2opCiAgICB7CiAgICAgIGlmICgoZiAmIDEpICE9IDApCiAgICAgIHsKICAgICAgICBzZXQucHVzaChYUXVlcnlUb2tlbml6ZXIuVE9LRU5bal0pOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBzZXQ7Cn07CgpYUXVlcnlUb2tlbml6ZXIuTUFQMCA9ClsgNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDI3LCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzMsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDM0LCAzNSwgMzYsIDM1LCAzMSwgMzUsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDMxLCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCAzMSwgNjEsIDYyLCA2MywgNjQsIDM1Cl07CgpYUXVlcnlUb2tlbml6ZXIuTUFQMSA9ClsgMTA4LCAxMjQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAxNTYsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAyMTQsIDIxNSwgMjEzLCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjQ3LCAyNjEsIDI3NywgMjkzLCAzMDksIDM0NywgMzYzLCAzNzksIDQxNiwgNDE2LCA0MTYsIDQwOCwgMzMxLCAzMjMsIDMzMSwgMzIzLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDQzMywgNDMzLCA0MzMsIDQzMywgNDMzLCA0MzMsIDQzMywgMzE2LCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzk0LCA0MTYsIDQxNiwgNDE3LCA0MTUsIDQxNiwgNDE2LCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgMzMwLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgNDE2LCA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMjcsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzUsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzIsIDMxLCAzMSwgMzMsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDM0LCAzNSwgMzYsIDM1LCAzMSwgMzUsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDMxLCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCAzMSwgNjEsIDYyLCA2MywgNjQsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDMxLCAzMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDY1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1Cl07CgpYUXVlcnlUb2tlbml6ZXIuTUFQMiA9ClsgNTczNDQsIDYzNzQ0LCA2NDk3NiwgNjUwMDgsIDY1NTM2LCA5ODMwNDAsIDYzNzQzLCA2NDk3NSwgNjUwMDcsIDY1NTMzLCA5ODMwMzksIDExMTQxMTEsIDM1LCAzMSwgMzUsIDMxLCAzMSwgMzUKXTsKClhRdWVyeVRva2VuaXplci5JTklUSUFMID0KWyAxLCAyLCAzNjg2NywgNDUwNjAsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUKXTsKClhRdWVyeVRva2VuaXplci5UUkFOU0lUSU9OID0KWyAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI5MDgsIDE4ODM2LCAxNzE1MiwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE3MzY1LCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDE3NDcwLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMTgxNTcsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTc4NDgsIDE3ODgwLCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTgwMjMsIDM2NTQ1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODE3MywgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2ODcsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4MTAxLCAxNzM5MywgMTg0ODksIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE4NTc5LCAyMTcxMSwgMTcxNTIsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAyODY4NCwgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxNzM2NSwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAxNzQ3MCwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDE4MTU3LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE3ODQ4LCAxNzg4MCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4MDIzLCAzNjU0NSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTgxNzMsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3Njg3LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODEwMSwgMTczOTMsIDE4NDg5LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMDExNiwgMTg4MzYsIDE4NjM3LCAxOTAwOCwgMTkyMzMsIDIxMjY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTg3NjMsIDE4Nzc4LCAxODc5NCwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE4ODIxLCAyMjkyMywgMTg5MDYsIDE5MDA4LCAxOTIzMywgMTc0MzEsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODkzNywgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAxOTA1NCwgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE4OTUzLCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTg0MywgMTg4MzYsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE2OTYsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNDI5LCAyMDEzMSwgMTg3MjAsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMjM1NTksIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTgwODcsIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDIxMjQyLCAxOTExMSwgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxOTAyNCwgMTg4MzYsIDE4NjA5LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTkwODEsIDIyNDQ0LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE5MDY1LCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxOTkyLCAyMjAwNywgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxODY5MCwgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjQxNCwgMTg4MzYsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDMwNjUxLCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE5MTM4LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMTkyODAsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxOTE3MiwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE3ODMsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxOTIxOCwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNjUxLCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxOTI0OSwgMTkyNjUsIDE5MzA3LCAxODg4OCwgMjc4NTcsIDMwNTM2LCAyNDQwMSwgMzE0NDQsIDIzMzU3LCAxODg4OCwgMTkzNTEsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDE5MzcwLCAyNzIxMSwgMjcyMTEsIDE5MzkyLCAyNDQwMSwgMzE5MTEsIDI0NDAxLCAyNDQwMSwgMjU0NjcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyODUzNywgMTk0NDAsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDAzNiwgMTc5OTQsIDI0MDYwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMTk0NjgsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMzUzNjcsIDE5NTIwLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDI5ODU1LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMTk1MzgsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMTk1NjAsIDI0NDAxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTkzMjcsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDE5NTgwLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMTk2MDAsIDI1NjY1LCAxODg4OCwgMTg4ODgsIDI4NTE4LCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAxOTYyMCwgMTk4NjgsIDI4NDM1LCAyNTcyMiwgMTg4ODksIDE5NjQ0LCAyNzIxMSwgMzI4ODgsIDM1ODUyLCAxOTg2OCwgMzEwMTgsIDE5Njk0LCAxOTM3NiwgMTk3MTcsIDIyMjE1LCAxOTczNSwgMjIwOTgsIDE5NzUxLCAzNTIwMywgMTk3NzYsIDE5Nzk3LCAxOTgxNywgMTk4NDAsIDI1NzgzLCAzMTczOCwgMjQxMzUsIDE5NzAxLCAxOTg1NiwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjgzMTEsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE3NjgsIDE4ODM2LCAxOTMwNywgMTg4ODgsIDI3ODU3LCAyNzkwNCwgMjQ0MDEsIDI5MTgzLCAyODAxNSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTg4OCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIyOTUzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjg1MzcsIDE5NDQwLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDE4ODgxLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzk5LCAxODgzNiwgMTk5MTgsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTY2NiwgMTg4MzYsIDE5MzA3LCAxODg4OCwgMjc4NTcsIDI3NTI1LCAyNDQwMSwgMjkxODMsIDIxNDY3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5OTQ2LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzIzODIsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyODUzNywgMTk5OTgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTUwMCwgMTg0NjcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMDAyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzNDI3MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzI5MjYsIDI5OTA4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjYwOTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMDA1MCwgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjAxMDEsIDE5MDM5LCAyMDE5MSwgMjA0MTIsIDIwOTAzLCAxNzU2OSwgMjAzMDksIDIwODcyLCAyNTYzMywgMjA2MjMsIDIwNTA1LCAyMDIxOCwgMjAyNDIsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAyMDI2NSwgMjAzMDYsIDIwMzI4LCAyMDM4MywgMjI0OTAsIDIwNzk2LCAyMDYxOSwgMjEzNTQsIDIwNjU0LCAyMDQxMCwgMjA5NTYsIDIxMjMyLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIyNDU5LCAyMDMxMiwgMjU1MzEsIDIyNDcwLCAyMDMwOSwgMjA0MjgsIDE4OTY0LCAyMDQ2NiwgMjA0OTEsIDIxMzQyLCAyMTA3MCwgMjA1MjEsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIyNDk3LCAyMDU1OSwgMTk1MDQsIDIwMjc5LCAyMDU3NSwgMjAyOTAsIDIwNDc1LCAyMDYwNCwgMjA2MzksIDIwMjI2LCAyMDY3MCwgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAxOTQ5NCwgMjA2OTgsIDIwNzExLCAyMjQ4MCwgMjEwNDYsIDIxMTE2LCAxODk3MSwgMjExMzAsIDIwNzI3LCAyMDc1NSwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDI1NTE4LCAyMDM5NCwgMjA3ODEsIDIwODMxLCAyMDIwMiwgMjA4NDcsIDIxNDAxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODU0OSwgMjA4NjMsIDIwNTg4LCAyNTU0MiwgMjA4ODgsIDIwOTE5LCAxODA3MiwgMTgxMTcsIDIwOTM1LCAyMDk3MiwgMjEwMzIsIDIxMDYyLCAyMTA4NiwgMTgyMzksIDIxMTAyLCAxODU2MywgMjExNDYsIDIxMTYyLCAyMTIwNiwgMTgzNTEsIDIwOTQ5LCAyMDkwMiwgMTgzNDAsIDIxMjIyLCAyMTI1OCwgMjEyODMsIDE4MzYwLCAyMDI0OSwgMTc0MDUsIDIxMjk1LCAyMTMxMSwgMjEzMjcsIDIwNzM5LCAyMDM0MywgMjEzNzAsIDIxMzg2LCAyMTQxNywgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxOTc3LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAyMTQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDIxNTA0LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDM2NTAxLCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMjg2NzQsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAxNzIzNywgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDIxNTc1LCAyMTUzNCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAyMTU2MCwgMzA2MjgsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTc5OCwgMTg4MzYsIDIxNjEyLCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE2MzYsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAxNzkwMiwgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNzUzLCAxOTA5NiwgMjE5MDMsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxOTI5MSwgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxNzM3OSwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAyMTkzMSwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDE4MjgwLCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTk2MiwgMTg1OTQsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIyMDQzLCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE2ODEsIDIxODU4LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDIxNTQ0LCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMDYxMywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMxNTAwLCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMyMzE5LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjE0MzEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjA5NSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTg3LCAyMjk2OCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjIyMzEsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAzNTc3OSwgMjAwODAsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDM0MDk3LCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTUwMCwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTE4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDIxNDMxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjYwOTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTg4ODgsIDI3ODU3LCAzNDA5NywgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMxNjc4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzE1MDAsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzExODEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyMTQzMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2MDk1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxODcsIDIyOTY4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDM1Nzc5LCAyMDA4MCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMDYxMywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMzNTg4LCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMxMTgxLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjE0MzEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjA5NSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTg3LCAyMjk2OCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAzNTc3OSwgMjAwODAsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDM1MDE5LCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMjQ4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTUwMCwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTE4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDIxNDMxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjYwOTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTg4ODgsIDI3ODU3LCAzNDA5NywgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODY2LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzI0LCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzA1MDEsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg2NiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDM0MDk3LCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4NjYsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDAzNiwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzQzNjUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzNTQsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAyNzA4NiwgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxOTkzMCwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxODI4LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMwOSwgMjI1MTMsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTkxMjIsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMjI1NDQsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI2MDgsIDE4ODM2LCAyMjk4OCwgMjMwMDQsIDI3NTg1LCAyMzAyMCwgMjMwMzYsIDIzMDY3LCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIzMTAyLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjMxMjIsIDMxMzg2LCAyNjE1NCwgMTk2NzQsIDE4ODg4LCAyODExOSwgMjgyMzIsIDE5NDI0LCAyMzcwNSwgMjcyMTEsIDI3MjExLCAyMzE0MiwgMjMxNzMsIDIzMTg5LCAyMzIxMiwgMjQ0MDEsIDI0NDAxLCAyMzI0NiwgMzQ0MjcsIDMxNjkzLCAyMzI2MiwgMTg4ODgsIDIzMjkwLCAyMzMwOCwgMjc3ODMsIDI3NjIwLCAyMzMyNywgMzUyNjMsIDM1MTA3LCAzMzM4MywgMjMzNDYsIDE4MTkzLCAyMzM5MywgMzI3NDgsIDIzOTY4LCAyNDQwMSwgMjM0MTQsIDM1MTUzLCAyMzQ2MywgMTg4ODgsIDMzOTEzLCAyMzQ0MiwgMjM0ODIsIDI3MjExLCAyNzIxMSwgMjM1MzIsIDIzNTUyLCAyMTQzMSwgMjM1NzUsIDI0NDAxLCAyNDQwMSwgMjM2MDQsIDI2MDk1LCAyMzYzNSwgMjM2NTcsIDE4ODg4LCAzMzQ4MiwgMjM2ODUsIDMzMjUxLCAyNzIxMSwgMjIxODcsIDE4ODUxLCAyMzcyMSwgMzU1MzYsIDI0NDAxLCAxODg4NywgMjM3NTAsIDMyNjQxLCAyNzIxMSwgMjM3NjksIDIzNzg3LCAyMDA4MCwgMzMwMTIsIDI0Mzg0LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMjM4MDMsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDI4MjI0LCAzMTgyNiwgMjM4MjMsIDI2OTE3LCAzNDk3OCwgMjM4NTAsIDI2NDkzLCAyNTc4MiwgMjM4NzgsIDIzOTE0LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyOTc4MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNjIzLCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMDYxMywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI4OTA5LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzQwNDgsIDIzOTMzLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjg0MDksIDIzOTQ5LCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMxMTgxLCAyNjU4MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMzU1ODUsIDIzOTg0LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNDAwNSwgMjIyMDEsIDI0MDMzLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDA1MiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTg3LCAyMjk2OCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAzNTc3OSwgMjAwODAsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAyNjQ5NiwgMjQwNzYsIDI0MTI2LCAyNDE1MSwgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjYzOCwgMTg4MzYsIDIyMDU5LCAxOTY3OCwgMjc4NTcsIDI0MTg1LCAyNDQwMSwgMjQyMDEsIDI0MjE3LCAyNjU5MiwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjQyNTIsIDI0MjY4LCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDI4NywgMjQzMDMsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE5NzgxLCAzNTQzMiwgMzYwMDcsIDMyNjQ5LCAxODg4OCwgMjU3ODMsIDI0MzIyLCAyODk2NiwgMjM3NzEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0MzU4LCAzMjEwNiwgMjY4MjksIDI0NDAwLCAzMTUwMCwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI0ODAxLCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI0NDE4LCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIwMTY3LCAzMTE4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4MzMsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDMzNTQwLCAyNzIxMSwgMzA3NTYsIDIxNDMxLCAyNDQwMSwgMjQ0MDEsIDIyOTcyLCAyNDQwMSwgMjYwOTUsIDE4ODg4LCAzNjEzMSwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjQ0NDAsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQ1OSwgMjQ0MDEsIDMxNjk5LCAyODQ1NCwgMTg4ODgsIDM0NTI4LCAzNDU3MCwgMzU3NzksIDI0NDc4LCAyNDQwMiwgMjQ0OTQsIDI1NjU5LCAxODg4OCwgMzYyMjgsIDI3MjExLCAyNzIxMSwgMjQ1MTUsIDMwOTgxLCAyMzczNCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAyNDUzOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMzAwNTksIDIzMzc3LCAyNDU2MywgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAyNTM3NCwgMjIxMDUsIDE5NDE5LCAyOTc5MywgMjQ1NzksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI2NTMsIDE4ODM2LCAyMjA1OSwgMjU3NTYsIDE5OTgyLCAzNDA5NywgMjMxOTYsIDI5MTgzLCAyNDYxNCwgMjQxMTAsIDIzNjQxLCAyNDY3MywgMjYxMDMsIDI0Njk3LCAyNDQ0MywgMjQ3MTMsIDI4NTU4LCAyMjEyMSwgMjQ3NDgsIDI0NDYyLCAyNDc2NCwgMjMzOTgsIDMwNjEzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjQ3OTgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNDIzMiwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMzMwMiwgMzE1MDAsIDIyNTU5LCAyNDEwNiwgMjQyMzIsIDE4ODg4LCAxODg4OCwgMzQ5NzAsIDI0ODE3LCAzMDQxMSwgMjcyMTEsIDI3MjExLCAzMjQ4NCwgMTk0ODQsIDI5NzUwLCAzNTEyNywgMjQ0MDEsIDI0NDAxLCAxOTg3MiwgMzExODEsIDI0ODUyLCAxODg4OCwgMTg4ODgsIDI0ODcxLCAyOTIyMSwgMjcyMTEsIDI3MjExLCAzMjA3MiwgMjcyMTEsIDMwNzU2LCAzNDQ0MSwgMjQ0MDEsIDI0NDAxLCAzMTU3MSwgMjQ0MDEsIDI2MDk1LCAzMzE0MSwgMjc4MDIsIDI3MDExLCAyNzg1NSwgMjUyOTUsIDI1NjA3LCAyNDg4OCwgMjIxODcsIDIyOTY4LCAxOTE5NSwgMzQ1OTMsIDI0OTA2LCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDM1Nzc5LCAyMDA4MCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDMzNjYzLCAyNzIxMSwgMjcyMTEsIDI0OTI0LCAyNDk0NywgMjM1ODgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAyMjEzNSwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMwOTA0LCAzMTA0MiwgMjQ5NzIsIDE5ODQwLCAyNTAwMCwgMzE3MzgsIDMwODk4LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjUwMTYsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNjY4LCAxODgzNiwgMjUwNDEsIDI1MDU3LCAzMTMyMCwgMjUwNzMsIDI1MDg5LCAyNTEwNSwgMjIwODcsIDM0Nzk2LCAyNDIzNiwgMzYxMzgsIDM0ODcwLCAzNDEyNSwgMjUxMjEsIDIzMTA2LCAzNTQ5NywgMjIyNDgsIDM2NjEzLCAyNTEzNywgMzA2NzEsIDI3MzY1LCAzMDYxMywgMjUxNTMsIDI2NDQ3LCAyNTE5OSwgMjUyMzMsIDIyNTc0LCAyMzI3NCwgMjUyNDksIDI1MjY1LCAyNTI4MSwgMjUzMTgsIDI1MzQ0LCAyNTM2MCwgMjU0MDAsIDI1NDI4LCAyNTQ1MiwgMjY3MzEsIDI1NTA0LCAzMTY5MywgMjM2NjksIDI1NTU4LCAyNzQwNywgMjU1NzUsIDI4NTk5LCAyNTkzNCwgMjU1OTksIDI3MjExLCAyODE4MCwgMjczMDQsIDI1NjIzLCAyNTgzOSwgMjU2NDksIDI0NDAxLCAzNDgyMCwgMjU2ODEsIDI1Njk4LCAyMjU4NiwgMjc3NzUsIDMwMTkwLCAyNTc0NSwgMjU3NzgsIDI1Nzk5LCAyNTgxNywgMjg5OTUsIDMzNTY5LCAzMDc1NiwgMjE1MTgsIDMzNDQzLCAyNTgzNywgMjU4NTUsIDI1ODkzLCAyNjA5NSwgMzEyNTQsIDI2Njc3LCAzMDEzNiwgMjc4NTUsIDI1OTMwLCAyNTk1MCwgMjcyMTEsIDIyMTg3LCAyMjk2OCwgMjU5NjYsIDI1OTg2LCAyNDQwMSwgMjM0MjgsIDI3NzYzLCAzNjMzMCwgMjY5NTksIDI2MDAyLCAyNjAyOSwgMjYwNDUsIDI2MDg1LCAyNjExOSwgMjYxNzAsIDI2MjAzLCAyNjIyMiwgMjYyMzksIDMwNTI3LCAyNjM3MiwgMjYyNzQsIDI4NDA0LCAzMTAxOCwgMzM3NTcsIDI3MjExLCAzNDI2MiwgMjYzMTYsIDM2NzI5LCAyNjM0NSwgMjYzNjYsIDM1MzM3LCAzMTAxNywgMjYzODgsIDI2NDA3LCAzMDk1NCwgMjYzNTAsIDMzODYxLCAyNjQzNCwgMjY0NjMsIDI2NDc5LCAyNjUxMiwgMjM1MTYsIDMzMTg5LCAyNjUzMSwgMjY1NDcsIDI3OTYzLCAzMTI5MywgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjY4MywgMTg4MzYsIDI2NTY4LCAyNjE4MSwgMjY2MDgsIDM0MDk3LCAyNjY0MywgMjkxODMsIDIyMDg3LCAyNjY2OSwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjY2OTMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNjcyMCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNjc3NCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI2NjE5LCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIxNTk2LCAzMTUwMCwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMzM5NzgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNTgwMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY3OTIsIDI0NDAxLCAzMTE4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMzU0NjQsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNjgwOSwgMzA3NTYsIDIxNDMxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjgyOCwgMjYwOTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAzMTk0OCwgMTg4ODksIDM1NzA3LCAyNzIxMSwgMTk3MTksIDI2ODQ1LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAyNjkwNSwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAyNDk4NCwgMzEwODgsIDE5NDE5LCAyNjk0NSwgMjc2NTEsIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI2OTgsIDE4ODM2LCAyNjk5OSwgMTg4ODgsIDI3ODU3LCAzNDA5NywgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIzMDUxLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDI3MDMzLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDI3MDU2LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMzAzMjAsIDI3MjExLCAyNzIxMSwgMjcwNzUsIDI0NDAxLCAyNDQwMSwgMjkwMzIsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDMzOTg2LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzEwMiwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI3MTIzLCAyNzE0NCwgMzYyNTQsIDI3MTYyLCAyNzIxMCwgMjcyMjgsIDI4NTAwLCAxODE4NywgMzQ4NDIsIDMzNDI2LCAyNzI0NCwgMzU5ODAsIDI3Mjc3LCAyNzMwMiwgMjczMjAsIDM2MDQ4LCAzNDAxMywgMjA5OTksIDMxODgyLCAyMTQ3OCwgMjc4OTUsIDI3MzU2LCAzMDI4NywgMjczODEsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAyNjMyOSwgMzAwODcsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMjIwNTksIDI3NDA2LCAyNzQyMywgMjc0NDUsIDM1Mjk0LCAyNzQ2MSwgMjIwODcsIDE4ODg4LCAxODg4OCwgMzAxNDAsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3OTg5LCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjU2ODIsIDI0NDAxLCAxODg2NiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAzNDA0MiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI5NzAwLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI3MTI4LCAzMTY5MywgMjc0NzcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzE5NCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAzNTI5OSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzA1OSwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMzMzY2LCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDM1MDQ0LCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMjA4MTUsIDI3MjExLCAzMDgxOCwgMTk5NjAsIDMzOTY5LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjcxMywgMTg4MzYsIDIyMDU5LCAyNzQ5NiwgMjc1MTYsIDI3NTQxLCAzNTIzMSwgMjc1NTcsIDIyMDg3LCAyOTY2MiwgMjYyOTIsIDIzMjkyLCAyNzU3MywgMjQ4MzYsIDI3NjAxLCAyNzIxMSwgMjc2MzYsIDIyMTIxLCAzNTU0NCwgMjc2ODYsIDI0NDAxLCAyNzcyMSwgMTg4NjYsIDE4ODg4LCAyNzc5OSwgMTg4ODgsIDI3ODE4LCAyMjA3MSwgMjc4NTMsIDMyMjYwLCAyNzIxMSwgMjYwMTMsIDI3ODczLCAyNzkyMCwgMjIxNjQsIDI5NDE5LCAyNDQwMSwgMjk5NDYsIDMzNDEzLCAyNjc0MiwgMjc3NTEsIDI2ODgxLCAxODg4OCwgMTg4ODgsIDI3MjYxLCAzNjc3NiwgMjc5MzYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3OTg4LCAyODAwNSwgMjgwMzEsIDI4MDUyLCAyNDQwMSwgMjQ0MDEsIDI4MDY5LCAyODA4OCwgMjgxMzUsIDI1NDg4LCAyODE1MiwgMjYwNjksIDI4MTY3LCAyNzIxMSwgMjgzNDAsIDI0NjU3LCAyODE5NiwgMzA3NTYsIDMxNTIzLCAyNDQwMSwgMjgyMTIsIDM0MTc2LCAzNjE3NCwgMjQ5NTYsIDI4MjQ4LCAyODI2NiwgMjgyOTAsIDIxNDg4LCAzMzA3NywgMjgzMjcsIDI4MzU2LCAxNzU5MCwgMjA5ODYsIDIzMTI2LCAyODM5MSwgMjg0MjUsIDI4MTAyLCAyODQ1MSwgMjg0NzAsIDI4NDkwLCAyODUxNiwgMjg1MzQsIDIwMDM0LCAzMzcyOCwgMjU4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzAyNDEsIDI4Mjc0LCAyODU1MywgMjg1NzQsIDE5NDA2LCAyODU5MCwgMjMwODYsIDIzMzMwLCAxOTgyOCwgMTk0NTIsIDI4NjE1LCAyODY2MCwgMjYxNDcsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMjk2MTMsIDM1OTU4LCAyOTI3NiwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMjMxNTcsIDI4NzAwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTg4ODgsIDI3ODU3LCAzNDA5NywgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODY2LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDIyNTI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MzMzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDMwODUzLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNzI4LCAxODgzNiwgMjg3NDcsIDI4NzgyLCAyODgxNywgMjg4NDEsIDI4ODU3LCAyODg4MCwgMjg4OTYsIDI0MTYxLCAyODk0MywgMzIwMTEsIDM2MjYxLCAyNzM0MCwgMjg5NjEsIDI5NDkyLCAyODk4MiwgMjkwMTEsIDI0NTIyLCAyOTAyNywgMjU0MzYsIDI5MDQ4LCAyMzA1MSwgMjc1MDAsIDI5MDkwLCAyOTExMCwgMzA3MTMsIDE4ODg4LCAyMzUxMiwgMjkxMzAsIDI1MTgzLCAyNzIxMSwgMjkxNTUsIDI4OTI3LCAyNzAzMywgMjkxNzMsIDIzMjMwLCAyNDQwMSwgMjkxOTksIDM1MzczLCAzMTY5MywgMTg4ODgsIDE4ODg4LCAyNTU4MywgMzI2MjksIDI5MjE4LCAyNzIxMSwgMjcyMTEsIDMxNDYxLCAzMDY5MiwgMjkyMzcsIDI3MDc1LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyOTI2MiwgMjkzMDIsIDE5NjI4LCAxODg4OCwgMzQzMjksIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyOTMyOSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDM1OTMzLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNzcwNSwgMzE2MTIsIDE4ODg4LCAxODg4OCwgMjkzNDYsIDI5Mzc0LCAyNzIxMSwgMzU2NTAsIDE3NTkwLCAyMTQzNiwgMjkzOTMsIDI0NDAxLCAyNTk3MCwgMTg4ODcsIDMzODk1LCAxODg4OCwgMjcyMTEsIDMyNTI4LCAyNzIxMiwgMjQwMTYsIDMyNzY5LCAxOTg2OCwgMjU2NTksIDE4ODg4LCAyNjg4OSwgMjcyMTEsIDI3MjExLCAyOTQxMiwgMjM4ODksIDI0MzcxLCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzY4LCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjk0MzUsIDI5NTA4LCAzMTEwMiwgMjk1NTAsIDI5NjA2LCAyMjEwNSwgMzAzMDAsIDI5NDYyLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjc0MywgMTg4MzYsIDIyMDU5LCAyOTYyOSwgMjk0NzMsIDM0MDk3LCAzMzI4NSwgMjkxODMsIDI5NjUxLCAyNzI1NCwgMTg4ODgsIDI5Njc4LCAzMzMyOSwgMzI1MzUsIDI3MjExLCAyOTY5NCwgMjk3MTYsIDIyMTIxLCAxOTIwMiwgMjQ0MDEsIDMyNzQyLCAyOTc0MSwgMTg4NjYsIDI2Nzc2LCAzMzkyMSwgMjg0NzQsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI5NzY2LCAyNzIxMSwgMjk4MDksIDI3MjExLCAzNTA3MiwgMjIxNjQsIDM1ODI1LCAyNDQwMSwgMjk4MjgsIDI0NDAxLCAyNDAzNiwgMzY3NjksIDI1MjE3LCAxODg4OCwgMTg4ODgsIDI5ODQ4LCAxODg5MCwgMjcyMTEsIDI5ODcxLCAyNzIxMSwgMjYyNTgsIDI3MjExLCAyOTg5NCwgMjQ0MDEsIDI5OTI5LCAyNDQwMSwgMzY1ODcsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjk3MjUsIDI5OTYyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4NDczLCAxODg4OCwgMTg4ODgsIDE5NTg0LCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyOTk4MiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5OTAyLCAxOTQ0NywgMzIwNTIsIDE5NTQ0LCAxOTgyOCwgMjk5OTgsIDMwMDk3LCAzMDAzMSwgMTk4NDAsIDI1NzgzLCAzMDA0NywgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDMwMDc1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI3NTgsIDE4ODM2LCAzMDEyMSwgMzAxNTYsIDMwMjA2LCAzMDI1NywgMzAyNzMsIDMwMzM2LCAyMjA4NywgMzU2MjQsIDMyODM3LCAyNTc2MiwgMTg4OTAsIDI5ODc4LCAzNDkzNCwgMjY4MTIsIDI3MjExLCAyMjEyMSwgMjQ5MzEsIDIzMjIzLCAyOTIwMiwgMjQ0MDEsIDE4ODY2LCAzNDM3MywgMzAzNTIsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzNDQ3LCAyNDgyOCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDMwMzcwLCAzNTA1MiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDI5NTIzLCAxODg4OCwgMTg4ODgsIDI3MTQ2LCAxODg4OCwgMzEzMDgsIDMwMzg2LCAyNzIxMSwgMjcyMTEsIDMwNDA1LCAzMDU1OCwgMTk0ODQsIDMwNDI3LCAyNDQwMSwgMjQ0MDEsIDI5OTM4LCAzNTY4NiwgMTk2MjgsIDI4NzY2LCAzMDQ0NywgMzQ1MDYsIDM1NjE0LCAyMzA4NiwgMjg3MzEsIDMwNDgyLCAzMDUxNywgMzA1NTIsIDMwNzU2LCAyNDAxMiwgMjAxNTYsIDMwNTc0LCAzMDU5OCwgMzA2NjcsIDI2MjgzLCAzMzQ2NCwgMjg5NDUsIDI3NjcwLCAzMDY4NywgMzI5MTUsIDMzNTA0LCAyNTMyOCwgMTc1OTAsIDIzOTYzLCAyMDQ1MCwgMzM4MzcsIDIxMDE2LCAzMjM5NywgMjYzMDAsIDMwNzA4LCAzMDcyOSwgMjc4ODUsIDMwNzQ4LCAyMTU4OCwgMzYzNzMsIDMwNzc5LCAyNjY1MywgMjQ2MjgsIDMzMjIwLCAzMjUxNCwgMzA4MDYsIDMxODM1LCAyNTQxMiwgMjU5MDYsIDI2NTE1LCAxODg5MCwgMjg4MjUsIDMxODMzLCAyNjEzMywgMTk0NDcsIDI4MzA0LCAzMTczMCwgMjM4MzQsIDI2MDU3LCAzMDg2OSwgMzA4ODUsIDMyMTgxLCAzMDkyMCwgMzA5NDIsIDMyNzk3LCAyNTc4MiwgMzA5NzAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDMwOTk3LCAzMTAzNCwgMjc5NjMsIDE5NjU5LCAyOTQ1MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNzczLCAxODgzNiwgMzEwNTgsIDMxMDc0LCAzMjQ2MywgMzExMjUsIDMxMTQxLCAzMTE5NywgMjIwODcsIDE4ODg4LCAyOTUzNCwgMzU0NzEsIDM2NzM4LCAyNzIxMSwgMjQzNDIsIDMxMjEzLCAyNDQyNCwgMjIxMjEsIDI0NDAxLCAyMDE3NSwgMzEyMjksIDMxOTE3LCAyNzczNiwgMzEyNDUsIDM0MzM0LCAyNzE3NSwgMTg4ODgsIDI5MDk0LCAyNzI4NiwgMjcyMTEsIDMxMjc4LCAzMTMzNiwgMjcyMTEsIDMxMzU1LCAzMTM3MSwgMjQ0MDEsIDMxNDAyLCAzMTQxOCwgMjQ0MDEsIDMxNDM3LCAzMTY5MywgMTg4ODgsIDMxNjE5LCAzMjg0MSwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDMxNDYwLCAzMTQ3NywgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDMxNDk3LCAzNjU4MSwgMjQ0MDEsIDMzMDIwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMzAwMDcsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMTUxNiwgMzIzMTAsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTUzOSwgMTg4ODgsIDI4NzYyLCAxODg4OCwgMjQ2NTEsIDM1NzQwLCAyNzIxMSwgMjcyMTEsIDI4NjQ0LCAzMTU2NSwgMzU3OTYsIDI0NDAxLCAyNDQwMSwgMTkzMTgsIDMyMTg4LCAxODg4OCwgMjQzMzQsIDI4MzY2LCAyNzIxMiwgMjk5NjYsIDI5ODMyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMzE1ODcsIDE5ODY4LCAzMTYzNSwgMzI0MzUsIDMzNjkzLCAzMDEwNSwgMzE2NjMsIDIwMDA1LCAzMTcxNSwgMzE3NTcsIDMxNzg0LCAzMTgxMiwgMzAwMTUsIDMxODUxLCAzMTg3OCwgMjU3ODMsIDMxODk4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAzMTkzMywgMzAyMjEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjc4OCwgMTg4MzYsIDIyMDU5LCAyNTcyOSwgMzA0NjYsIDMxOTY4LCAyNDMwNiwgMzE5ODQsIDMyMDAwLCAzMjgwNywgMzUxNjAsIDI3MDE3LCAyOTU5MCwgMzQ5NDEsIDE5ODAxLCAyOTM3NywgMzM3MDAsIDIyMTIxLCAyNzA0MCwgMzA0MzEsIDI5Mzk2LCAyODg2NCwgMjk1NjUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDMyMDI3LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjM2OTgsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMzA4NDUsIDI0NDAxLCAyNDAzNiwgMzIwNDUsIDE4ODg4LCAyNjkyOSwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDMxNDgxLCAzMjA2OCwgMjcyMTEsIDI3MjExLCAzMjA4OCwgMjQ0MDEsIDMzMDU4LCAzMjEyMiwgMjQ0MDEsIDI0NDAxLCAzMzczNiwgMTg4ODgsIDE4ODg4LCAzMzE2MiwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI5NDg0LCAyNzIxMSwgMjgzNzUsIDMyMTQ0LCAyNDQwMSwgMjQ0MDEsIDMzODMxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNjcwNCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDMzMTA3LCAyMjE3MSwgMzMyMjQsIDI0MjcxLCAzMjE2OSwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMzAyMzQsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAzMjIwNCwgMzIyMzIsIDMyMjUyLCAzMjY3NywgMzMyOTUsIDI5MDc0LCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIzNjE5LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDMyMjc2LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzIyOTksIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMzM4ODYsIDE4ODg5LCAzNjA2NSwgMjcyMTEsIDE5NzE5LCAzNTMyNiwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyODAzLCAxODgzNiwgMzIzMzUsIDMxNjQ3LCAzNDY2NiwgMzIzNTEsIDMyMzY3LCAzMjQxNywgMjIwODcsIDE4ODg4LCAzMjQzMywgMTkzMzUsIDMyNDUxLCAyNzIxMSwgMzI0NzksIDI3MTA3LCAzMjUwMCwgMjIxMjEsIDI0NDAxLCAzMjU1MSwgMjAwODUsIDMyNTcyLCAxODg2NiwgMjIyODcsIDIzNzUzLCAxODg4OCwgMTg4ODgsIDMyNjAyLCAzMjY2NSwgMjcyMTEsIDMyNjkzLCAyNzIxMSwgMjY5NzIsIDMyNzEzLCAzMjcyOSwgMjQ0MDEsIDMyNzY0LCAyNDQwMSwgMjU4NzcsIDMyNzg1LCAzNDc2OCwgMTg4ODgsIDI3MzkwLCAzMjgyMywgMjQ1OTQsIDI0ODU1LCAzMjg1NywgMjQ4OTAsIDMyODc4LCAzMjkwNCwgMjcyMTEsIDMyOTQyLCAzMjk3NywgMjQ0MDEsIDMzMDAwLCAyOTMxMywgMjQ0MDEsIDMwNzkwLCAyNjIwNiwgMjc2NjYsIDMzOTA0LCAxODg4OCwgMjMwODYsIDM2MzUzLCAyNzIxMSwgMzMwMzYsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDMyMTUzLCAyNDQwMSwgMzMwNTYsIDI0NDAxLCAzNTg2MSwgMTg4ODgsIDE4ODg4LCAzMDM1NCwgMjc5NzIsIDI3MjExLCAyNzIxMSwgMzM4MDAsIDE3NTkwLCAyMDE0NSwgMjQ0MDEsIDI0NDAxLCAzNDYzOCwgMjA4MTEsIDE4ODg4LCAxODg4OCwgMzMwNzQsIDI3MjExLCAyNzIxMiwgMzYxNjcsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDM0NjE2LCAyNDE2OSwgMzMwOTMsIDMzMTIzLCAzMzE1NywgMjc4NTYsIDMxNzQxLCAyMzg2MiwgMjY1NTIsIDM0MzAyLCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAzMzE3OCwgMTk5NzMsIDI3OTYzLCAyMzQ5NywgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjgxOCwgMTg4MzYsIDMzMjA1LCAyODExMywgMzMyNDAsIDM0MDk3LCAzMzI3NSwgMjkxODMsIDIyMDg3LCAzMzMxOCwgMzU0MzgsIDE4ODg4LCAxODg5MCwgMzMzNDUsIDI2MzkxLCAzMzM4MiwgMjcyMTEsIDIyMTIxLCAzMzM5OSwgMjgwNzIsIDMzNDQyLCAyNDQwMSwgMTg4NjYsIDIyMjMyLCAxODg4OCwgMzM0NTksIDE4ODg4LCAxODg4OCwgMzM0ODAsIDMzNDk4LCAyNTE3NSwgMjcyMTEsIDI3MjExLCAyNjcwNCwgMjIxNjQsIDI0Nzc1LCAzNTIzOSwgMjQ0MDEsIDI0NDAxLCAyNTkxNCwgMjk1ODAsIDE4ODg4LCAxODg4OCwgMzExMDksIDI1MjExLCAzMzUyMCwgMzM1MzksIDI3MjExLCAyNzIxMSwgMzM1NTYsIDM2Mjg0LCAxOTQ4NCwgMzM1ODUsIDI0NDAxLCAyNDQwMSwgMzM2MDQsIDMyNTU2LCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAzMTI2MiwgMzM2NTgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDMzNjc5LCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDMzNzE2LCAyNDQwMSwgMjY4NTQsIDI3NDgwLCAxODg4OCwgMzM3NTIsIDI3ODU1LCAzMzI1OSwgMzQ3MDEsIDI3MjExLCAxNzU5MCwgMzIxMDIsIDI0NzgyLCAyMzgwNywgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDMzNzczLCAzNjEwNSwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMjMzNjgsIDI3MjExLCAyOTE1NywgMTk3MTksIDIzODg5LCAzNDQ1NCwgMjkyODYsIDE4ODkwLCAzMzc5NCwgMjUzMDIsIDMzODE2LCAxOTQ0NywgMzQwNzksIDMzODUzLCAzMTg2MiwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMzM4NzcsIDI4OTIwLCAzMzkzNywgMTk4MzcsIDMwNDYxLCAzNDAwMiwgMjIyNzYsIDM2MDQxLCAzNDAyOSwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI4MzMsIDE4ODM2LCAzNDA2NCwgMzI2MTYsIDM0MTEzLCAzNDE0MSwgMzQxNTcsIDM0MTkyLCAzNDIwOCwgMzIyMTYsIDM2MDEzLCAzMTU0OSwgMzE5NTIsIDM0MjI0LCAzNDI0OCwgMzQyODcsIDI5MzMwLCAzNDM1MCwgMzQzODksIDM0NDEzLCAzNDQ4MSwgMjY3OTMsIDE4ODY2LCAyNjE4NywgMjk2MzUsIDIyMjkzLCAxODg4OCwgMzY2NTQsIDI1NzgzLCAzNDUyMiwgMzQ1NDQsIDM0NTY2LCAyNTgyMSwgMzUwNzIsIDIyMTY0LCAzNDU4NiwgMzQ2MDksIDM0NjMyLCAxOTYwNCwgMjQwMzYsIDM2NjQ0LCAzNjY3NCwgMjQ2ODEsIDE4ODg4LCAzMjQwMSwgMzQ2NTQsIDMxMzM5LCAzNDY4MiwgMzQ2OTgsIDI3MjExLCAzNDcxNywgMzQ3NTMsIDI4MDUzLCAzNDgxMiwgMzQ4MzYsIDI0NDAxLCAzMzYxOSwgMTk2MjgsIDM0ODU4LCAzMjIzNiwgMzQ5MDYsIDI0NTk4LCAzMzUyMywgMjc2MTIsIDM0ODkwLCAzNDkyMiwgMjQ3MzIsIDI5MjQ2LCAzNjcxNywgMzM2MzQsIDM0NDY1LCAzMjk4NCwgMzQxNjgsIDI2NzUwLCAzNDk1NywgMTg4ODgsIDE4ODg4LCAzNDk5NCwgMzUwMTAsIDI3MjExLCAzMzA0MCwgMTc1OTAsIDI5OTEzLCAzNTAzNSwgMjQ0MDEsIDM2MzA0LCAyNTQ4MiwgMzAxNzEsIDM1ODgzLCAzNTA2OCwgMzUwODgsIDI2NjI3LCAyMDQ0MSwgMzExNzMsIDM1MTIzLCAzNTE0MywgMzUxNzYsIDI0NjQwLCAzMDQ5MiwgMjkzNTgsIDE5NzE5LCAzNTE5MiwgMzUyMTksIDI1Mzg0LCAyODgwMSwgMzUyNTUsIDM1Mjc5LCAzMjU4NiwgMzQ0OTYsIDIzMDg2LCAyMzMzMCwgMjkwNjEsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDI0NTQ3LCAyNTE2NCwgMzUzMTUsIDMxNzk2LCAzNTM1MywgMzQzMTYsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDI0MDkxLCAyODYzMCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyODQ4LCAxODgzNiwgMjIwNTksIDM0NzgyLCAzNDA4OCwgMzUzODksIDIxMDA4LCAzNTQwNSwgMzU0MjEsIDM1NDU0LCAxODg4OCwgMTg4ODgsIDIzNDY2LCAzNTQ4NywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzU1MTMsIDMxMTU0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzNTU2MCwgMTg4ODgsIDI2ODYzLCAzNjY2NCwgMzU2MDEsIDI0ODcyLCAyNTc4MywgMzAzODksIDIzNTM2LCAyNjI1MCwgMzU2NDcsIDM1NjY2LCAyMjE2NCwgMTk1MjIsIDE5NTY0LCAzMDU4MiwgMzU2ODIsIDI3Njk3LCAzNTU3NSwgMjkxMTQsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMzU3MDIsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1NzIzLCAyNDQwMSwgMzU1MjcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAzMDE4NCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDM1NzM5LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyOTEzOSwgMjI5MzgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMzg5OCwgMzU3NTYsIDE4ODg4LCAxODg4OCwgMjUwMjUsIDM1Nzc4LCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyMDA2NCwgMzU3OTUsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAyMzkxNywgMTg4OTAsIDM0NTUwLCAzMTgzMywgMjIyNjIsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDI2NDE4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDM1ODEyLCAxOTgzNywgMjcxODcsIDM1ODQxLCAzMzEzNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMjIxNDgsIDI4NzEyLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjg2MywgMTg4MzYsIDIyMDU5LCAzNTg3NywgMjg3MjMsIDM0MDk3LCAzMTE2NCwgMjkxODMsIDIyMDg3LCAyNjc1OCwgMTg4ODgsIDIyNTkyLCAxODg5MCwgMjM5ODksIDI3MjExLCAyOTgxMiwgMjcyMTEsIDIyMTIxLCAzMzc3OCwgMjQ0MDEsIDMxNDIxLCAyNDQwMSwgMTg4NjYsIDE4ODg4LCAxODg4OCwgMjY4NzIsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAzMDczMiwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDkwOCwgMjQ0MDEsIDI0NDAxLCAyNDAzNiwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI4NzgsIDE4ODM2LCAyMjA1OSwgMjc4MzcsIDI3ODU3LCAzNTg5OSwgMjQ0MDEsIDM1OTE1LCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODY2LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDMxNjAyLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjYyMjMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDM1OTMxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAyODEzNiwgMTg4ODgsIDE4ODg4LCAzNTk0OSwgMjcyMTEsIDMyODYyLCAyNzIxMSwgMzI2OTcsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDMyMjgzLCAyNDQwMSwgMzIxMjgsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyODkzLCAxODgzNiwgMjIwNTksIDM1OTc0LCAzNDg4MiwgMzQwOTcsIDMzOTYwLCAyOTE4MywgMzU5OTYsIDE4ODg4LCAyMzMxMSwgMTg4ODgsIDM2MDI5LCAyNzIxMSwgMjcyMTEsIDM2MDY0LCAzNjA4MSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMzYxMDQsIDMzOTUwLCAxODg2NiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAzNjEyMSwgMTg4ODgsIDI1NTU5LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDMwMzEzLCAyNzIxMSwgMjcyMTEsIDM2MTU0LCAyNDQwMSwgMjQ0MDEsIDM0Mzk3LCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAyODI1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDMwOTI2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNjk4MywgMjQwMTIsIDMzNjQyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAxOTM1NCwgMjc4NTcsIDM2MTkwLCAyNDQwMSwgMzYyMDYsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODAwNywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjQ3MjQsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMDgyNywgMTg4NjYsIDE4ODg4LCAzNjIyMiwgMTg4ODgsIDI4Nzk1LCAxODg4OCwgMjU3ODMsIDM1MTAwLCAyNzIxMSwgMjc0MjksIDI3MjExLCAzNTA3MiwgMjIxNjQsIDMwODM2LCAyNDQwMSwgMjQ0OTksIDI0NDAxLCAyNDAzNiwgMzE2OTMsIDE4ODg4LCAzNjI0NCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDM2MDg4LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI4MDM2LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAzNTYzMSwgMTg4ODgsIDM1NzYyLCAyNzIxMSwgMjcyMTEsIDM2Mjc3LCAyNzIxMSwgMzQ3MzAsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDM2MzAwLCAyNDQwMSwgMzYzMjAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI1NzEyLCAxODg4OCwgMTg4ODgsIDM2MzQ2LCAyNzIxMSwgMjcyMTIsIDE5MTg0LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAzMjAyOSwgMTg4ODksIDI3MjExLCAzMzM1OSwgMTk3MTksIDIzODg5LCAzNjM2OSwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzODQsIDE4ODM2LCAzNjM4OSwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMzY0MzQsIDE3MTczLCAxNzU5NSwgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAzNjQ1MywgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMjAzNjIsIDIxNzI2LCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzY5LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAyMTczNywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTgxMywgMTg4MzYsIDM2NDg5LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDE3NzM3LCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3NzY4LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAyMDU0MywgMjIwMjIsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE4MjgsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAzNjUxNywgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxODI4LCAxODgzNiwgMTkzMDcsIDE4ODg4LCAyNzg1NywgMzA3NTYsIDI0NDAxLCAyOTE4MywgMjgwMTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzY1NjcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMjk1MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI4NTM3LCAzNjYwMywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAxODg4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAzNjYyOSwgMzY2OTAsIDE4NzIwLCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTc0NTQsIDE3NTk1LCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3MjIzLCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMzY3NTQsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAyMDM2MiwgMjE3MjYsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMCwgOTQyNDIsIDAsIDExODgyMCwgMCwgMjIxMTg0MCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDgyMTc2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDIyMDc3NDQsIDI0MDQzNTIsIDI0MTI1NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMDQ3NjgsIDI2MDUwNTYsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI2Nzg3ODQsIDIyMDc3NDQsIDI2OTUxNjgsIDIyMDc3NDQsIDI3MDMzNjAsIDIyMDc3NDQsIDI3MTE1NTIsIDI3NTI1MTIsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjY3ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNzAzMDQsIDMxNzQ0MDAsIDIxNTg1OTIsIDAsIDEzOSwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQyNDgzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjc0ODQxNiwgMjc1NjYwOCwgMjc3NzA4OCwgMjgwMTY2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjg2MzEwNCwgMjg5MTc3NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzEwNDc2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMjc4NTI4MCwgMjIwNzc0NCwgMjgwOTg1NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjg0MjYyNCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjg5OTk2OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ3Mzk4NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ5NDQ2NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjUyMzEzNiwgMjE1ODU5MiwgMjQwNDM1MiwgMjQxMjU0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU2NDA5NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYwNTA1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY3ODc4NCwgMjE1ODU5MiwgMjY5NTE2OCwgMjE1ODU5MiwgMjcwMzM2MCwgMjE1ODU5MiwgMjcxMTU1MiwgMjc1MjUxMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjc4NTI4MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjc4NTI4MCwgMjE1ODU5MiwgMjgwOTg1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjg0MjYyNCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjg5OTk2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDY0MSwgMCwgMjE1ODU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMzI3NjgsIDAsIDIxNTg1OTIsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIzODM4NzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMwMDY0NjQsIDIzODM4NzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDAsIDAsIDAsIDIxNTg4NzcsIDI1NzI1NzMsIDIxNTg4NzcsIDIxNTg4NzcsIDAsIDIyMDc3NDQsIDIyMDc3NDQsIDI1OTY4NjQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI2NDE5MjAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDAsIDAsIDAsIDE2NzkzNiwgMCwgMCwgMjE2MjY4OCwgMCwgMCwgMzEwNDc2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMCwgMCwgMjE0NjMwNCwgMjE0NjMwNCwgMjIyNDEyOCwgMjIyNDEyOCwgMjIzMjMyMCwgMjIzMjMyMCwgMjIzMjMyMCwgNjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTMxMzI4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNjE3MzQ0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDQxMjE2LCAyNDQ1MzEyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTAyNjU2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTgwNDgwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNjIxNDQwLCAyMTU4NTkyLCAyNTgwNDgwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNjIxNDQwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNjk5MjY0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNzQ4NDE2LCAyNzU2NjA4LCAyNzc3MDg4LCAyODAxNjY0LCAyMjA3NzQ0LCAyODYzMTA0LCAyODkxNzc2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDE4NzUyLCAyMjA3NzQ0LCAzMDQzMzI4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDgwMTkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTEyOTYwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCAwLCAwLCAxNzIzMTAsIDI3OSwgMCwgMjE2MjY4OCwgMCwgMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzE4NjY4OCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQwNDM1MiwgMjQxMjU0NCwgMjE1ODU5MiwgMjUxMDg0OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU4NDU3NiwgMjE1ODU5MiwgMjYwOTE1MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYyOTYzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY4Njk3NiwgMjE1ODU5MiwgMjcxNTY0OCwgMjE1ODU5MiwgMjE1ODU5MiwgMzEyMTE1MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE0OTgyNCwgMjE1ODU5MiwgMjE1ODU5MiwgMzE3MDMwNCwgMzE3NDQwMCwgMjE1ODU5MiwgMjM2NzQ4OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMCwgMCwgMjE1ODU5MiwgMjU3MjI4OCwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQzMzAyNCwgMjIwNzc0NCwgMjQ1MzUwNCwgMjQ2MTY5NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjUxMDg0OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjUzMTMyOCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjYxNzM0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMCwgMCwgMjE1ODU5MiwgMjU3MjI4OCwgMjE1ODU5MiwgMjE1ODU5MiwgMTUwOCwgMjcxNTY0OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjg2NzIwMCwgMjIwNzc0NCwgMjkwNDA2NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjU4MDQ4MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjYyMTQ0MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzE0OTgyNCwgMjIwNzc0NCwgMjIwNzc0NCwgMzE3MDMwNCwgMzE3NDQwMCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDA0MzUyLCAyNDEyNTQ0LCAyNzA3NDU2LCAyNzMyMDMyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyODIyMTQ0LCAyODI2MjQwLCAyMjA3NzQ0LCAyODk1ODcyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyOTI0NTQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyOTczNjk2LCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTY2Nzg0LCAwLCAwLCAwLCAwLCAwLCAyODUsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMTI5NjAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxODY2ODgsIDIxNTg1OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDAsIDI1MzU0MjQsIDI1NDM2MTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI5OTAwODAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1NzIyODgsIDI5ODE4ODgsIDIyMDc3NDQsIDIyMDc3NDQsIDMwMDIzNjgsIDIyMDc3NDQsIDMwNDc0MjQsIDMwNjM4MDgsIDMwNzYwOTYsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMyMDMwNzIsIDI3MDg5NjAsIDI3MzIwMzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI4MjIxNDQsIDI4Mjc3NDgsIDIxNTg1OTIsIDI4OTU4NzIsIDIxNTg1OTIsIDIxNTg1OTIsIDI5MjQ1NDQsIDIxNTg1OTIsIDIxNTg1OTIsIDI5NzM2OTYsIDIxNTg1OTIsIDI5ODE4ODgsIDIxNTg1OTIsIDIxNTg1OTIsIDMwMDIzNjgsIDIxNTg1OTIsIDMwNDc0MjQsIDMwNjM4MDgsIDMwNzYwOTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMyMDMwNzIsIDI5ODE4ODgsIDIxNTg1OTIsIDIxNTg1OTIsIDMwMDM4NzYsIDIxNTg1OTIsIDMwNDc0MjQsIDMwNjM4MDgsIDMwNzYwOTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMyMDMwNzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0MjQ4MzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIwNDgwLCAwLCAwLCAwLCAwLCAwLCAyMTYyNjg4LCAyMDQ4MCwgMCwgMjUyMzEzNiwgMjUyNzIzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU3NjM4NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjkwODE2MCwgMjUyNzIzMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjU3NjM4NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjkwODE2MCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2Njc4NCwgMCwgMCwgMCwgMCwgMCwgMjg2LCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNjMzNzI4LCAyNjU4MzA0LCAwLCAwLCAyNzQwMjI0LCAyNzQ0MzIwLCAwLCAyODM0NDMyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyOTc3NzkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDM5MjMyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTU4MDE2LCAwLCAwLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5MzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMjQ5NDQ2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjUyNDc1NywgMjUyNzIzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU3NjM4NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMTUwNCwgMjE1ODU5MiwgMjQ5ODU2MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU2ODE5MiwgMjE1ODU5MiwgMjU5Mjc2OCwgMjYyNTUzNiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY3NDY4OCwgMjczNjEyOCwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMjE1ODU5MiwgMjkxMjI1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzEwODg2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMzEzMzQ0MCwgMzE0NTcyOCwgMzE1MzkyMCwgMjM3NTY4MCwgMjM3OTc3NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjQyMDczNiwgMjIwNzc0NCwgMjQ0OTQwOCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ5ODU2MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjU2ODE5MiwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2Njc4NCwgMCwgMCwgMCwgMCwgMCwgNTUxLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAyNTA2NzUyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4NTkyLCAyNTA2NzUyLCAwLCAyMDIwLCAyMTU4NTkyLCAyNTkyNzY4LCAyNjI1NTM2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjc0Njg4LCAyNzM2MTI4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyOTEyMjU2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCA1NDIsIDAsIDU0NCwgMjIwNzc0NCwgMzEwODg2NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzEzMzQ0MCwgMzE0NTcyOCwgMzE1MzkyMCwgMjM3NTY4MCwgMjM3OTc3NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQyMDczNiwgMjE1ODU5MiwgMjQ0OTQwOCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE4NjY4OCwgMjE1ODU5MiwgMCwgNjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzY3NDg4LCAyMTU4NTkyLCAyNDk4NTYwLCAyMTU4NTkyLCAyMTU4NTkyLCAxNjIxLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTY4MTkyLCAyMTU4NTkyLCAyNTkyNzY4LCAyNjI1NTM2LCAyMTU4NTkyLCAyMTU4NTkyLCAyNjc0Njg4LCAwLCAwLCAwLCAwLCAwLCAxNjA4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwNywgOTcsIDk3LCAxMTEwLCA5NywgOTcsIDMxMzM0NDAsIDMxNDU3MjgsIDMxNTM5MjAsIDIxNTg1OTIsIDI0MDg0NDgsIDI0MTY2NDAsIDIxNTg1OTIsIDI0NjU3OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMwMTQ2NTYsIDIxNTg1OTIsIDIxNTg1OTIsIDMwNTE1MjAsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMDA2NzIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMjExNTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNDk4MjQsIDI0MTY2NDAsIDIyMDc3NDQsIDI0NjU3OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI2MzM3MjgsIDI2NTgzMDQsIDI3NDAyMjQsIDI3NDQzMjAsIDI4MzQ0MzIsIDI5NDkxMjAsIDIxNTg1OTIsIDI5ODU5ODQsIDIxNTg1OTIsIDI5OTgyNzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMjkzNDQsIDIyMDc3NDQsIDI0MDg0NDgsIDI5NDkxMjAsIDIyMDc3NDQsIDI5ODU5ODQsIDIyMDc3NDQsIDI5OTgyNzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMjkzNDQsIDIxNTg1OTIsIDI0MDg0NDgsIDI0MTY2NDAsIDIxNTg1OTIsIDI0NjU3OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxODY2ODgsIDIxNTg1OTIsIDAsIDMyNzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzY3NDg4LCAyOTQ5MTIwLCAyMTU4NTkyLCAyOTg1OTg0LCAyMTU4NTkyLCAyOTk4MjcyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTI5MzQ0LCAyMTU4NTkyLCAyMTU4NTkyLCAyNDc4MDgwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTM1NDI0LCAyNTQzNjE2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTE3MDU2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNDc4MDgwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjk5MjY0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNzQ4NDE2LCAyNzU2NjA4LCAyNzc3MDg4LCAyODAxNjY0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAwLCAyNTM1NzA5LCAyNTQzOTAxLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyOTkwMzY1LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTcyNDI2LCAyMjA3NzQ0LCAyNTM1NDI0LCAyNTQzNjE2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTE3MDU2LCAyMTU4NTkyLCAyMTU4NTkyLCAyNDc4MDgwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyOTkwMDgwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4NTkyLCAyMTU4NTkyLCAyNDgyMTc2LCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAyMTU4NTkyLCAyOTA4MTYwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyOTc3NzkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDM5MjMyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDEwNTYwLCAyMjA3NzQ0LCAyNDI4OTI4LCAyMjA3NzQ0LCAyNTE0OTQ0LCAyMjA3NzQ0LCAyNTg4NjcyLCAyMjA3NzQ0LCAyODM4NTI4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDEwNTYwLCAyMTU4NTkyLCAyNDI4OTI4LCAyMTU4NTkyLCAyNTE0OTQ0LCAwLCAwLCAyMTU4NTkyLCAyNTg4NjcyLCAyMTU4NTkyLCAwLCAyODM4NTI4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDEwNTYwLCAyMTU4NTkyLCAyNTA2NzUyLCAyMTU4NTkyLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMCwgMCwgMjkzMTUsIDkyMiwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzksIDQ1LCAzMDA2NDY0LCAyMzgzODcyLCAwLCAyMDIwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDA2NDY0LCAyMTU4NTkyLCAyNjM3ODI0LCAyOTUzMjE2LCAyMTU4NTkyLCAyMjA3NzQ0LCAyNjM3ODI0LCAyOTUzMjE2LCAyMjA3NzQ0LCAwLCAwLCAyMTU4NTkyLCAyNjM3ODI0LCAyOTUzMjE2LCAyMTU4NTkyLCAyNTM5NTIwLCAyMTU4NTkyLCAyNTM5NTIwLCAyMjA3NzQ0LCAwLCAwLCAyNTM5NTIwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAyNTA2NzUyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4NTkyLCAyNTA2NzUyLCAwLCAwLCAyMTU4NTkyLCAyMjA3NzQ0LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAwLCAyMTU4NTkyLCAyOTY1NTA0LCAyOTY1NTA0LCAyOTY1NTA0LCAwLCAwLCAwLCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNDc0MjY5LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNjM0MDEzLCAyNjU4NTg5LCAwLCAwLCAyNzQwNTA5LCAyNzQ0NjA1LCAwLCAyODM0NzE3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI4LCA5MDE0MywgOTQyNDIsIDExODgyMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAxMTg4MjAsIDExODgyMCwgMTE4ODIwLCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgMCwgMCwgMjQsIDI0LCAyNCwgMjcsIDI3LCAyNywgMjcsIDkwMTQzLCAwLCAwLCA4NjAxNiwgMCwgMCwgMjIxMTg0MCwgMTAyNDM5LCAwLCAwLCAwLCA5ODM0NywgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE1ODAxNiwgMCwgMjM3NTY4MCwgMjM3OTc3NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQyMDczNiwgMjE1ODU5MiwgMjQ0OTQwOCwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE4NDAsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMTM1LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTY0MDk2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTk2ODY0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNjQxOTIwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNzgxMTg0LCAyNzkzNDcyLCAyNDk0NDY0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTIzMTM2LCAyNTI3MjMyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTc2Mzg0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMCwgMjcsIDI3LCAwLCAyMTU4NTkyLCAyNDk4NTYwLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTY4MTkyLCAyMTU4NTkyLCAyNTkyNzY4LCAyNjI1NTM2LCAyMTU4NTkyLCAyMTU4NTkyLCAyNjc0Njg4LCAwLCAwLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDczOTg0LCAyMTU4NTkyLCAyMTU4NTkyLCAyNDk0NDY0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDA2NDY0LCAyMzgzODcyLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDA2NDY0LCAyMTU4NTkyLCAyNjM3ODI0LCAyOTUzMjE2LCAyMTU4NTkyLCAyMjA3NzQ0LCAyNjM3ODI0LCAyOTUzMjE2LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCAxNDc0ODgsIDk0MjQyLCAxNDc0NTYsIDE0NzQ4OCwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTQ3NDU2LCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDAsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDI3LCAwLCA4MTkyMCwgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0Mjg5MjgsIDIxNTg1OTIsIDI1MTQ5NDQsIDIxNTg1OTIsIDI1ODg2NzIsIDIxNTg1OTIsIDI4Mzg1MjgsIDIxNTg1OTIsIDIxNTg1OTIsIDQwOTc2LCAxOCwgMTUxNTczLCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMCwgNDA5NzYsIDE4LCAxOCwgMzY4ODQsIDAsIDQ1MDc4LCAwLCAyNCwgMjQsIDI0LCAyNywgMjcsIDI3LCAyNywgOTAxNDMsIDAsIDAsIDEzMTUsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDg3LCA5NywgMTgsIDEzMTQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDAsIDAsIDI5MzE1LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxMzAsIDk0MjQyLCAwLCAwLCAwLCAyMjExODQwLCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMwOTY1NzYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg1OTIsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCA2NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxODY2ODgsIDIyMDc3NDQsIDAsIDEwODAsIDAsIDEwODQsIDAsIDEwODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI1MzE0NjYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI2MTc0ODIsIDAsIDk0MjQyLCAwLCAwLCAwLCAyMjExODQwLCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI3ODExODQsIDI3OTM0NzIsIDIxNTg1OTIsIDI4MTgwNDgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCAxNTk3NzksIDE1OTc0NCwgMTAyNDM5LCAxNTk3NzksIDk4MzQ3LCAwLCAwLCAxNTk3NDQsIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAwLCA0NTA3OCwgMCwgMjIyNDI1MywgMTcyMDMyLCAyMjI0MjUzLCAyMjMyNDQ4LCAyMjMyNDQ4LCAxNzIwMzIsIDIyMzI0NDgsIDkwMTQzLCAwLCAwLCAyMTcwODgwLCAwLCAwLCA1NTAsIDgyOSwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjM4Nzk2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMTI0LCAxMjQsIDEyNywgMTI3LCAxMjcsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNSwgMjksIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAxNjM5MzEsIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAwLCA0NTA3OCwgMjQ5ODU2LCAyNCwgMjQsIDI0LCAyNywgMjcsIDI3LCAyNywgOTAxNDMsIDAsIDAsIDIxNzA4ODAsIDAsIDAsIDgyNywgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjM4Nzk2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgNDA5NzYsIDAsIDQyNDM4MTAsIDQyNDM4MTAsIDI0LCAyNCwgMjcsIDI3LCAyNywgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2Njc4NCwgMCwgMCwgMCwgMCwgNTczNDQsIDI4NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjcwNzQ1NiwgMjczMjAzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjgyMjE0NCwgMjgyNjI0MCwgMjE1ODU5MiwgMjg5NTg3MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjkyNDU0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjk3MzY5NiwgMjE1ODU5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzE4NjY4OCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMyNDgsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYxMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ5NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTY2Nzg0LCA1NDYsIDAsIDAsIDAsIDAsIDI4NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMTcsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDIwNDgwLCAxMjAsIDEyMSwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDAsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDI3LCA5MDE0MywgMCwgMCwgMjE3MDg4MCwgMCwgNTMyNDgsIDU1MCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjM4Nzk2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgNDA5NzYsIDE5NjYwOCwgMTgsIDI2NjI0MCwgMjQsIDI0LCAyNywgMjcsIDI3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDE2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQyNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDA1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk5LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNDkxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjYsIDY3LCA2NywgNjcsIDE3NjcsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgMCwgMjE2Njc4NCwgNTQ2LCAwLCA1MzUzMSwgNTM1MzEsIDAsIDI4NiwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc0MywgNTc4ODksIDAsIDIxNzA4ODAsIDAsIDAsIDU1MCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODU2LCA0NSwgMTg1OCwgMTg1OSwgNjcsIDY3LCA2NywgMTAwOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDIxLCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNjc3NzMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2OTk1NDksIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI3NDg3MDEsIDI3NTY4OTMsIDI3NzczNzMsIDI4MDE5NDksIDk3LCAxMTE1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1NywgOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODI2LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMzOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg3MCwgOTcsIDk3LCA2NywgNjcsIDY3LCAxNDYzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3OSwgNjcsIDY3LCA5NywgOTcsIDk3LCAxNTE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTA0LCA5MDUsIDk3LCA5NywgOTcsIDk3LCAxNjIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDkyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIDE2NzksIDY3LCA2NywgNjcsIDE2ODIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTAsIDY3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNjY5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODksIDQ1LCA0NSwgNDUsIDE3NDgsIDQ1LCA0NSwgNDUsIDE3NDksIDE3NTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE5NTksIDY3LCA2NywgNjcsIDY3LCAxNzY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3OTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgwMiwgNjcsIDE4MTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjMsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCAxODQ4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY1OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4NjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxODc4LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxOTczLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE2NSwgOTcsIDExNjcsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgMCwgMjE2Njc4NCwgMCwgMCwgNTM1MzEsIDUzNTMxLCAwLCAyODYsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAxNzg5LCA5NywgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE4NDAsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMTM2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTU4MDE2LCAyMjkzNzYsIDIzNzU2ODAsIDIzNzk3NzYsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MjA3MzYsIDIxNTg1OTIsIDI0NDk0MDgsIDIxNTg1OTIsIDIxNTg1OTIsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgMCwgMjgwLCA1NDcsIDAsIDUzNTMxLCA1MzUzMSwgMCwgMjg2LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE3ODgsIDk3LCA5NywgMCwgOTcsIDIwMjQsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIzNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA1Nzg4OSwgNTQ3LCA1NDcsIDAsIDAsIDU1MCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgMTc5OSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAxMDkyLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTYxMiwgOTcsIDk3LCA5NywgOTcsIDE2MTYsIDk3LCAxMjk3LCAxNDcyLCAwLCAwLCAwLCAwLCAxMzAzLCAxNDc0LCAwLCAwLCAwLCAwLCAxMzA5LCAxNDc2LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxNDgxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDg4LCA5NywgMCwgMTQ3NCwgMCwgMTQ3NiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MDcsIDk3LCA5NywgOTcsIDk3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjYsIDMwLCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjEzMDgwLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTQzNDQ4LCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDAsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTQ4MiwgOTcsIDE0ODMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjYsIDk3LCA5NywgMTMyOSwgMTMzMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1OSwgMTE2MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMjIxMTk3NCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNDc0MTIyLCAyMTU4NzMwLCAyMTU4NzMwLCAyNDk0NjAyLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyODA5OTk0LCAyMTU4NzMwLCAyMTU4NzMwLCAyODQyNzYyLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyOTAwMTA2LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDE0Nzk0LCAyMTU4NzMwLCAyMTU4NzMwLCAzMDUxNjU4LCAyMTU4NzMwLCAyMTU4NzMwLCAzMTAwODEwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDk2NzE0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNTcyMjg4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCA1NDEsIDU0MSwgNTQzLCA1NDMsIDAsIDAsIDIxNjY3ODQsIDAsIDU0OCwgNTQ5LCA1NDksIDAsIDI4NiwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjg2MzM4OSwgMjg5MjA2MSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMzE4Njk3MywgMjE1ODg3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM2NzYyNiwgMjE1ODg3NywgMjQwNDYzNywgMjQxMjgyOSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjU2NDM4MSwgMjE1ODg3NywgMjE1ODg3NywgMjYwNTM0MSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjY3OTA2OSwgMjE1ODg3NywgMjY5NTQ1MywgMjE1ODg3NywgMjcwMzY0NSwgMjE1ODg3NywgMjcxMTgzNywgMjc1Mjc5NywgMjE1ODg3NywgMCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjM4NDAxMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzAwNjYwMiwgMjM4Mzg3MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzA5NjU3NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2MjY4OCwgMCwgMCwgMjE1ODg3NywgMjc4NTU2NSwgMjE1ODg3NywgMjgxMDE0MSwgMjE1ODg3NywgMjE1ODg3NywgMjg0MjkwOSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjkwMDI1MywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjUzMTYxMywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjYxNzYyOSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODczMCwgMjgxODE4NiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzEwNTA1MywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTYxMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0OTYsIDk3LCA5NywgMTQ5OSwgOTcsIDk3LCA5NywgOTcsIDk3LCAyNDQxMzU0LCAyNDQ1NDUwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTAyNzk0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNDMzMTYyLCAyMTU4NzMwLCAyNDUzNjQyLCAyNDYxODM0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTgwNjE4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNjIxNTc4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNjk5NDAyLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNjc4OTIyLCAyMTU4NzMwLCAyNjk1MzA2LCAyMTU4NzMwLCAyNzAzNDk4LCAyMTU4NzMwLCAyNzExNjkwLCAyNzUyNjUwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNzg1NDE4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTEzMDk4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTg2ODI2LCAyMTU4NzMwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNzgxMTg0LCAyNzkzNDcyLCAyMjA3NzQ0LCAyODE4MDQ4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCA1NDEsIDAsIDU0MywgMjE1ODg3NywgMjUwMjk0MSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjU4MDc2NSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjYyMTcyNSwgMjE1ODg3NywgMzAxOTAzNywgMjE1ODg3NywgMzA0MzYxMywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMzA4MDQ3NywgMjE1ODg3NywgMjE1ODg3NywgMzExMzI0NSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMCwgMjE1ODg3NywgMjkwODQ0NSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjk3ODA3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMzAzOTUxNywgMjE1ODg3NywgMjE1ODczMCwgMjUxMDk4NiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjU4NDcxNCwgMjE1ODczMCwgMjYwOTI5MCwgMjE1ODczMCwgMjE1ODczMCwgMjYyOTc3MCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjM4ODEwNiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjYwNTE5NCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjY4NzExNCwgMjE1ODczMCwgMjcxNTc4NiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjg2NzMzOCwgMjE1ODczMCwgMjkwNDIwMiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjY0MjA1OCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjc4MTMyMiwgMjc5MzYxMCwgMjE1ODczMCwgMzEyMTI5MCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzE0OTk2MiwgMjE1ODczMCwgMjE1ODczMCwgMzE3MDQ0MiwgMzE3NDUzOCwgMjE1ODczMCwgMjM2NzQ4OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ0MTIxNiwgMjQ0NTMxMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjUwMjY1NiwgMjE1ODg3NywgMjQzMzMwOSwgMjE1ODg3NywgMjQ1Mzc4OSwgMjQ2MTk4MSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjUxMTEzMywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjU4NDg2MSwgMjE1ODg3NywgMjYwOTQzNywgMjE1ODg3NywgMjE1ODg3NywgMjYyOTkxNywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjY4NzI2MSwgMjE1ODg3NywgMjcxNTkzMywgMjE1ODg3NywgMjE1ODczMCwgMjE1ODczMCwgMjk3MzgzNCwgMjE1ODczMCwgMjk4MjAyNiwgMjE1ODczMCwgMjE1ODczMCwgMzAwMjUwNiwgMjE1ODczMCwgMzA0NzU2MiwgMzA2Mzk0NiwgMzA3NjIzNCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjIwNzc0NCwgMjUwNjc1MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODg3NywgMjUwNzAzNywgMCwgMCwgMjE1ODg3NywgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzIwMzIxMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQyNDgzMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjU2NDA5NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjcwNzc0MSwgMjczMjMxNywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjgyMjQyOSwgMjgyNjUyNSwgMjE1ODg3NywgMjg5NjE1NywgMjE1ODg3NywgMjE1ODg3NywgMjkyNDgyOSwgMjE1ODg3NywgMjE1ODg3NywgMjk3Mzk4MSwgMjE1ODg3NywgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDY0MiwgMCwgMjE1ODU5MiwgMCwgNDUsIDE1MjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzU1LCA0NSwgNjcsIDY3LCAyOTgyMTczLCAyMTU4ODc3LCAyMTU4ODc3LCAzMDAyNjUzLCAyMTU4ODc3LCAzMDQ3NzA5LCAzMDY0MDkzLCAzMDc2MzgxLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMjAzMzU3LCAyNTIzMjc0LCAyNTI3MzcwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTc2NTIyLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyOTA4Mjk4LCAyNDk0NzQ5LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNTIzNDIxLCAyNTI3NTE3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNTc2NjY5LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCA0MzIxMjgwLCAyMjI0MjUzLCAyMjMyNDQ4LCA0MzI5NDcyLCAyMjMyNDQ4LCAyMTU4NzMwLCAyNDk4Njk4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTY4MzMwLCAyMTU4NzMwLCAyNTkyOTA2LCAyNjI1Njc0LCAyMTU4NzMwLCAyMTU4NzMwLCAyNjc0ODI2LCAyNzM2MjY2LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4NzMwLCAyOTEyMzk0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTA5MDAyLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTMzNTc4LCAzMTQ1ODY2LCAzMTU0MDU4LCAyMzc1NjgwLCAyMjA3NzQ0LCAzMTA4ODY0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTMzNDQwLCAzMTQ1NzI4LCAzMTUzOTIwLCAyMzc1OTY1LCAyMzgwMDYxLCAyMTU4ODc3LCAyMTU4ODc3LCAyNDIxMDIxLCAyMTU4ODc3LCAyNDQ5NjkzLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTE3MzQxLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTA0OTA2LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4ODc3LCAyNDk4ODQ1LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyNTY4NDc3LCAyMTU4ODc3LCAyNTkzMDUzLCAyNjI1ODIxLCAyMTU4ODc3LCAyMTU4ODc3LCAyNjc0OTczLCAwLCAwLCAwLCAwLCA5NywgOTcsIDE0ODAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ4NSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxNzI5LCA5NywgMTczMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMxMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTIwLCA5NywgOTcsIDE1MjMsIDk3LCA5NywgMTUyNiwgOTcsIDI3MzY0MTMsIDIxNTg4NzcsIDIxNTg4NzcsIDAsIDIxNTg4NzcsIDI5MTI1NDEsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxMDkxNDksIDIxNTg4NzcsIDIxNTg4NzcsIDMwMTQ5NDEsIDIxNTg4NzcsIDIxNTg4NzcsIDMwNTE4MDUsIDIxNTg4NzcsIDIxNTg4NzcsIDMxMDA5NTcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxMjE0MzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxNTAxMDksIDMxMzM3MjUsIDMxNDYwMTMsIDMxNTQyMDUsIDIxNTg3MzAsIDI0MDg1ODYsIDI0MTY3NzgsIDIxNTg3MzAsIDI0NjU5MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMwMTg4OTAsIDIxNTg3MzAsIDMwNDM0NjYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMwODAzMzAsIDI2MzM4NjYsIDI2NTg0NDIsIDI3NDAzNjIsIDI3NDQ0NTgsIDI4MzQ1NzAsIDI5NDkyNTgsIDIxNTg3MzAsIDI5ODYxMjIsIDIxNTg3MzAsIDI5OTg0MTAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMxMjk0ODIsIDIyMDc3NDQsIDI0MDg0NDgsIDI5NDkxMjAsIDIyMDc3NDQsIDI5ODU5ODQsIDIyMDc3NDQsIDI5OTgyNzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMjkzNDQsIDIxNTg4NzcsIDI0MDg3MzMsIDI0MTY5MjUsIDIxNTg4NzcsIDI0NjYwNzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxNzA1ODksIDMxNzQ2ODUsIDIxNTg4NzcsIDAsIDAsIDAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI0MjQ5NzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI3MDc1OTQsIDI3MzIxNzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI4MjIyODIsIDI4MjYzNzgsIDIxNTg3MzAsIDI4OTYwMTAsIDIxNTg3MzAsIDIxNTg3MzAsIDI5MjQ2ODIsIDI5NDk0MDUsIDIxNTg4NzcsIDI5ODYyNjksIDIxNTg4NzcsIDI5OTg1NTcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxMjk2MjksIDIxNTg3MzAsIDIxNTg3MzAsIDI0NzgyMTgsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI1MzU1NjIsIDI1NDM3NTQsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMxMTcxOTQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0NzgwODAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMwMTQ2NTYsIDIyMDc3NDQsIDIyMDc3NDQsIDMwNTE1MjAsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMDA2NzIsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMjExNTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1ODQ1NzYsIDIyMDc3NDQsIDI2MDkxNTIsIDIyMDc3NDQsIDIyMDc3NDQsIDI2Mjk2MzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI2ODY5NzYsIDIyMDc3NDQsIDIyMDc3NDQsIDI1MzU0MjQsIDI1NDM2MTYsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMTcwNTYsIDIxNTg4NzcsIDIxNTg4NzcsIDI0NzgzNjUsIDAsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg3MzAsIDIxNTg3MzAsIDI0ODIzMTQsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIzODc5NjgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDAsIDgyMywgMCwgODI1LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyOTkwMjE4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNDgyMTc2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYyNjg4LCAxMzUsIDAsIDIyMDc3NDQsIDIyMDc3NDQsIDI5OTAwODAsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg4NzcsIDIxNTg4NzcsIDI0ODI0NjEsIDIxNTg4NzcsIDIxNTg4NzcsIDAsIDAsIDAsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg3MzAsIDI0MjkwNjYsIDIxNTg3MzAsIDI1MTUwODIsIDIxNTg3MzAsIDI1ODg4MTAsIDIxNTg3MzAsIDI4Mzg2NjYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMwMTA2OTgsIDIyMDc3NDQsIDI0Mjg5MjgsIDIyMDc3NDQsIDI1MTQ5NDQsIDIyMDc3NDQsIDI1ODg2NzIsIDIyMDc3NDQsIDI4Mzg1MjgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMwMTA1NjAsIDIxNTg4NzcsIDI0MjkyMTMsIDIxNTg4NzcsIDI1MTUyMjksIDAsIDAsIDIxNTg4NzcsIDI1ODg5NTcsIDIxNTg4NzcsIDAsIDI4Mzg4MTMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMwMTA4NDUsIDIxNTg3MzAsIDI1MDY4OTAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI3NDg1NTQsIDI3NTY3NDYsIDI3NzcyMjYsIDI4MDE4MDIsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI4NjMyNDIsIDI4OTE5MTQsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI1NjQyMzQsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI1OTcwMDIsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMwMDY0NjQsIDIzODQxNTcsIDAsIDAsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMwMDY3NDksIDIxNTg3MzAsIDI2Mzc5NjIsIDI5NTMzNTQsIDIxNTg3MzAsIDIyMDc3NDQsIDI2Mzc4MjQsIDI5NTMyMTYsIDIyMDc3NDQsIDAsIDAsIDIxNTg4NzcsIDI2MzgxMDksIDI5NTM1MDEsIDIxNTg4NzcsIDI1Mzk2NTgsIDIxNTg3MzAsIDI1Mzk1MjAsIDIyMDc3NDQsIDAsIDAsIDI1Mzk4MDUsIDIxNTg4NzcsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI5Nzc5MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMwMzkzNzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMxNTgxNTQsIDIyMDc3NDQsIDAsIDIxNTg4NzcsIDIxNTg3MzAsIDIyMDc3NDQsIDAsIDIxNTg4NzcsIDIxNTg3MzAsIDIyMDc3NDQsIDAsIDIxNTg4NzcsIDI5NjU2NDIsIDI5NjU1MDQsIDI5NjU3ODksIDAsIDAsIDAsIDAsIDEzMTUsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDg0LCA5NywgOTcsIDk3LCA5NywgMjE1ODU5MiwgMTgsIDAsIDEyMjg4MCwgMCwgMCwgMCwgNzc4MjQsIDAsIDIyMTE4NDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDAsIDM1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMjg4MDksIDAsIDEzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTQyNywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDMyLCA2NywgNjcsIDY3LCAzMTA0NzY4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAxMjI4ODAsIDAsIDAsIDAsIDAsIDEzMTUsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjIsIDU1MCwgMCwgMjg2LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDI0ODMyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDQzMjk0NzIsIDI3LCAyNywgMjIwNzc0NCwgMjIwNzc0NCwgMjk3Nzc5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzAzOTIzMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzE1ODAxNiwgNTQyLCAwLCAwLCAwLCA1NDIsIDAsIDU0NCwgMCwgMCwgMCwgNTQ0LCAwLCA1NTAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgMTYxMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4OTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQyNDgzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAyMzc1NjgsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjA0ODAsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAxOTI1MTIsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCA5NCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDk2LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTIzNzgsIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAwLCA0NTA3OCwgMCwgMjQsIDI0LCAyNCwgMTI2LCAxMjYsIDEyNiwgMTI2LCA5MDE0MywgMCwgMCwgMjE3MDg4MCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjM4Nzk2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjA0ODAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAyNDE2NjQsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjA1NjgsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAyMDA3OTcsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAyMDQ4MCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAwLCAwLCA0NCwgMCwgMCwgMjA1NzUsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgNDEsIDQxLCA0MSwgMCwgMCwgMTEyNjQwMCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDAsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCA4OSwgNDA5NzYsIDE4LCAxOCwgMzY4ODQsIDAsIDQ1MDc4LCAwLCAyNCwgMjQsIDI0LCAyNywgMTMxMjAxLCAyNywgMjcsIDkwMTQzLCAwLCAwLCAyMTcwODgwLCAwLCAwLCA1NTAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIzODc5NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0NDEyMTYsIDI0NDUzMTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDk0MjQyLCAwLCAwLCAyMDg4OTYsIDIyMTE4NDAsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE4NjY4OCwgMjE1ODU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM2NzQ4OCwgMzI3NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MzMwMjQsIDIxNTg1OTIsIDI0NTM1MDQsIDI0NjE2OTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1MTA4NDgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDQwOTc2LCAxOCwgMzY4ODQsIDI0NTc4MywgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjA0ODAsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAyMjExODQsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAxODAyMjQsIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAxNTU2NDgsIDQ1MDc4LCAwLCAyNCwgMjQsIDIxNzA4OCwgMjcsIDI3LCAyNywgMjE3MDg4LCA5MDE0MywgMCwgMCwgMjE3MDg4MCwgMCwgMCwgODI4LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMzg3OTY4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMzg3OTY4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYyNjg4LCAyMzM0NzIsIDAsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyNywgMTMxNDI3LCAwLCAwLCAwLCAwLCAzNjIsIDAsIDM2NSwgMjg4MDksIDM2NywgMTM5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODA4LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgMCwgMCwgOTcsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgNTc4ODksIDAsIDAsIDAsIDUzNTMxLCA1MzUzMSwgMzY3LCAyODYsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc4NywgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMjAyOSwgNDUsIDY3LCA2NywgNjcsIDY3LCAyMDMzLCA1Nzg4OSwgMCwgMCwgNTQwNzQsIDU0MDc0LCA1NTAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCAxNzk4LCA0NSwgNDUsIDE4MDAsIDQ1LCA0NSwgMCwgMTQ3MiwgMCwgMCwgMCwgMCwgMCwgMTQ3NCwgMCwgMCwgMCwgMCwgMCwgMTQ3NiwgMCwgMCwgMCwgMCwgMTMxNSwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDEzMjAsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE3ODYsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDE3OTAsIDE1MjcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY2MywgNjcsIDI0ODUwLCAyNDg1MCwgMTI1NjQsIDEyNTY0LCAwLCA1Nzg4OSwgMjgxLCAwLCAwLCA1MzUzMSwgNTM1MzEsIDM2NywgMjg2LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDE3ODUsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDE5NzksIDk3LCA5NywgNDUsIDQ1LCAxOTgzLCA0NSwgMTk4NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2OTAsIDQ1LCA0NSwgNjk0LCA0NSwgNDUsIDQwOTc2LCAxOSwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAyNjIxNDQsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMzgsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgNDYsIDY3LCA5OCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA0NSwgNjcsIDk3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjU4MDQ4LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTEyMjQyMywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMTE0MTUyLCAxMTE0MTUyLCAxMTE0MTUyLCAwLCAwLCAxMTE0MTEyLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM3LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDIwNDgwMCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDU3NDM2LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCAzMywgMzMsIDAsIDMzLCAzMywgMzMsIDAsIDAsIDAsIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAwLCA0NTA3OCwgMCwgMTI0LCAxMjQsIDEyNCwgMTI3LCAxMjcsIDEyNywgMTI3LCA5MDE0MywgMCwgMCwgMjE3MDg4MCwgMCwgMCwgNTUwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMzg4MjUzLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNzgxNDY5LCAyNzkzNzU3LCAyMTU4ODc3LCAyODE4MzMzLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyODY3NDg1LCAyMTU4ODc3LCAyOTA0MzQ5LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMDk2ODYxLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNDQxNTAxLCAyNDQ1NTk3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCA0MDk3NiwgMTIyLCAxMjMsIDM2ODg0LCAwLCA0NTA3OCwgMCwgMjQsIDI0LCAyNCwgMjcsIDI3LCAyNywgMjcsIDkwMTQzLCAwLCA5MjEsIDI5MzE1LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDkzNiwgMjE1ODU5MiwgNDI0MzgxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMCwgOTIxLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDkzNSwgNDUsIDQ1LCA0NSwgNzE1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA0NywgNjgsIDk5LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDQ4LCA2OSwgMTAwLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDQ5LCA3MCwgMTAxLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDUwLCA3MSwgMTAyLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDUxLCA3MiwgMTAzLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDUyLCA3MywgMTA0LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDUzLCA3NCwgMTA1LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDU0LCA3NSwgMTA2LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDU1LCA3NiwgMTA3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDU2LCA3NywgMTA4LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDU3LCA3OCwgMTA5LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDU4LCA3OSwgMTEwLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDU5LCA4MCwgMTExLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDYwLCA4MSwgMTEyLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDYxLCA4MiwgMTEzLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDYyLCA4MywgMTE0LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDYzLCA4NCwgMTE1LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDY0LCA4NSwgMTE2LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDY1LCA4NiwgMTE3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDY2LCA4NywgMTE4LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDExODgyMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAxMTg4MjAsIDExODgyMCwgMTE4ODIwLCA0MDk3NiwgMTgsIDE4LCAwLCAwLCA0NTA3OCwgMCwgMjQsIDI0LCAyNCwgMjcsIDI3LCAyNywgMjcsIDkwMTQzLCAwLCAwLCAxMzE0LCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjEsIDk3LCAxOCwgMTMxNDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDM2NSwgMCwgMzY3LCAwLCAwLCAxMzE1LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2MCwgOTcsIDk3LCAxMzEsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCA0NSwgMTQ1LCAxNDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0LCA0NSwgMTc5LCA0NSwgMTg1LCA0NSwgMTg4LCA0NSwgNDUsIDIwMiwgNjcsIDI1NSwgNjcsIDY3LCAyNjksIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgOTcsIDI5MiwgMjk2LCA5NywgOTcsIDk3LCA5NywgOTcsIDMyMSwgOTcsIDMyNiwgOTcsIDMzMiwgOTcsIDE4LCAxMzE0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCA2NDYsIDMzNSwgOTcsIDk3LCAzNDksIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCA0MzcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUyMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTExLCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA2MjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTAxLCAxNTAyLCA5NywgNzkzLCA2NywgNjcsIDc5NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwOCwgNjcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMCwgMCwgOTcsIDk3LCAyMDUyLCA2NywgNjcsIDY3LCA2NywgODEzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCA4MzAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMxNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU4OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODkxLCA5NywgOTcsIDg5NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwNiwgNDUsIDkzNywgNDUsIDQ1LCA5NDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MzQsIDczNSwgNjcsIDczNywgNjcsIDczOCwgNjcsIDc0MCwgNjcsIDY3LCA2NywgNDUsIDk2NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzUsIDQ1LCA0NSwgNDUsIDk4MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxNSwgNDUsIDQ1LCA2NywgNjcsIDEwMjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAxMDgxLCAxMzExMiwgMTA4NSwgNTQwNzQsIDEwODksIDAsIDAsIDAsIDAsIDAsIDAsIDM2MywgMCwgMjg4MDksIDAsIDEzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTkxMywgNjcsIDE5MTQsIDY3LCA2NywgNjcsIDE5MTgsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDExMTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMwLCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjksIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTIxLCAwLCAxMTc1LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzgsIDQ1LCA0NSwgNDUsIDQ1LCAxMjMzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc0MiwgNjcsIDQ1LCA0NSwgMTE5MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1NCwgNjcsIDY3LCA2NywgNjcsIDEyNDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1MSwgNjcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMjA1MCwgMCwgOTcsIDk3LCA0NSwgNDUsIDQ1LCA3MzIsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA2NywgNjcsIDY3LCAxMjg0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NzIsIDY3LCA2NywgNjcsIDEyOTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQwNDM1MiwgMjQxMjU0NCwgMTMyMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzMxLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MzcsIDk3LCAxMzY0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzczLCA5NywgMTgsIDEzMTQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDY0NywgNDUsIDQ1LCAxMzg3LCA0NSwgNDUsIDEzOTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MDcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTQxLCA0NSwgOTQzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTEsIDQ1LCA2NywgMTQzOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMTQ5MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzM2LCA5NywgNDUsIDQ1LCAxNTQxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjc3LCA0NSwgNDUsIDY3LCAxNTgxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc5MSwgNzkyLCA2NywgNjcsIDY3LCA2NywgMTU5OCwgNjcsIDE2MDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ3MiwgOTcsIDk3LCA5NywgMTcyNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTMsIDk3LCA5NywgNjcsIDY3LCA5NywgMTg3OSwgOTcsIDE4ODEsIDk3LCAwLCAxODg0LCAwLCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxODQyLCA5NywgOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDE5MjgsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwMywgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAxOTcxLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgMTM4MSwgNDUsIDQ1LCA0NSwgNDUsIDE5NzYsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0NywgODA5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDk3LCA5MDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjM4LCAwLCAwLCAwLCAwLCAxNDc4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTAsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgMTI0NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTQsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxMzc0LCA5NywgOTcsIDk3LCA5NywgMCwgMTE3NSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwOCwgNDUsIDQ1LCAxOTEwLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTE5LCA2NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDQ1LCAyMDQ4LCA2NywgMjA0OSwgMCwgMCwgOTcsIDIwNTEsIDQ1LCA0NSwgNDUsIDkzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzk3LCA0NSwgNDUsIDQ1LCAxOTIxLCA2NywgNjcsIDE5MjMsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCAxOTQ3LCA0NSwgMTkzNSwgMCwgMCwgMCwgOTcsIDE5MzksIDk3LCA5NywgMTk0MSwgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4MiwgMzg5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MTAsIDQ1LCA0NSwgMTgxMiwgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTYsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDMzNiwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDEzMTQyNywgMCwgMCwgMCwgMCwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgNDUsIDQ1LCAzNzEsIDM3MywgNDUsIDQ1LCA0NSwgOTU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTMsIDQ1LCA0NSwgNDUsIDQ1NywgNDU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3MywgNjcsIDQ3OCwgNjcsIDY3LCA0ODIsIDY3LCA2NywgNDg1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDE4MjgsIDk3LCA1NTQsIDU1NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NzAsIDk3LCA1NzUsIDk3LCA5NywgNTc5LCA5NywgOTcsIDU4MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMzMCwgOTcsIDk3LCA2NywgNzQ2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTc1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgODQ0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTYsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTczNSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2NDIsIDk3LCAxNjQ0LCA5NywgOTcsIDg5MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDY3LCA2NywgNjcsIDY3LCAxMDY1LCAxMDY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTMyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NiwgNjcsIDY3LCA5NywgOTcsIDE1MDUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTMsIDk3LCA5NywgMCwgMTQ3NCwgMCwgMTQ3NiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MTcsIDk3LCA5NywgMTYzNSwgMCwgMTYzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODUsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDE3MDQsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjUsIDU3MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxODMyLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDE5NDYsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMTkyNiwgOTcsIDE5MjcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDE5MzQsIDIwNDMsIDAsIDAsIDk3LCA5NywgOTcsIDIwNDcsIDQ1LCA0NSwgNjcsIDY3LCAwLCAxODMyLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDk4MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyNywgNDUsIDQ1LCA0NSwgMTMxNDI3LCAwLCAwLCAwLCAwLCAzNjIsIDAsIDM2NSwgMjg4MDksIDM2NywgMTM5LCA0NSwgNDUsIDM3MiwgNDUsIDQ1LCA0NSwgNDUsIDE2NjEsIDE2NjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY2NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjczLCA0NSwgMTY3NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxNDI2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA0NSwgNDE4LCA0NSwgNDUsIDQyMCwgNDUsIDQ1LCA0MjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTU5LCA0NSwgNDUsIDk2MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0ODMsIDY3LCA2NywgNjcsIDY3LCA1MDQsIDY3LCA2NywgNTA2LCA2NywgNjcsIDUwOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUyOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjg3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTU1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU4MCwgOTcsIDk3LCA5NywgOTcsIDYwMSwgOTcsIDk3LCA2MDMsIDk3LCA5NywgNjA2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0OTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNzE0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTg5LCA5OTAsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTEsIDY3LCA2NywgNjcsIDY3LCAxMDE1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzUzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ1LCA0NSwgMTE3OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEwMDMsIDEwMDQsIDY3LCAxMjE3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjgsIDY3LCAxNDYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzQsIDY3LCA5NywgMTUxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NzEsIDk3LCA2NywgNjcsIDY3LCAxNzA1LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzE1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgNDUsIDEzODAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCAxODg3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMjAwNiwgNDUsIDQ1LCAxOTA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MjAsIDY3LCA5NywgMCwgMjAzNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTQyOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQzNSwgNjcsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCA0NSwgMTQ2LCA0NSwgMTUyLCA0NSwgNDUsIDE2NSwgNDUsIDE3NSwgNDUsIDE4MCwgNDUsIDQ1LCAxODcsIDE5MCwgMTk1LCA0NSwgMjAzLCAyNTQsIDI1NywgMjYyLCA2NywgMjcwLCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMjgxLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgOTcsIDI5MywgOTcsIDI5OSwgOTcsIDk3LCAzMTIsIDk3LCAzMjIsIDk3LCAzMjcsIDk3LCA5NywgMzM0LCAzMzcsIDM0MiwgOTcsIDM1MCwgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDY3LCA0ODQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTksIDk3LCA1ODEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTYsIDY0OCwgNDUsIDY1MCwgNDUsIDY1MSwgNDUsIDY1MywgNDUsIDQ1LCA0NSwgNjU3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTU0LCA2NywgNjcsIDY3LCAxOTU4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY4MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODgsIDY4OSwgNjkxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0NywgNDUsIDQ1LCA0NSwgNDUsIDk1MiwgNDUsIDQ1LCA2OTgsIDY5OSwgNDUsIDQ1LCA3MDIsIDcwMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcxMSwgNzQ0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTcsIDY3LCA2NywgNjcsIDY3LCA3NjEsIDY3LCA2NywgNjcsIDY3LCA3NjUsIDY3LCA3NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzc1LCA3NzYsIDc3OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzg1LCA3ODYsIDY3LCA2NywgNzg5LCA3OTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDE3NzUsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzk4LCA2NywgNjcsIDY3LCA4MDIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2NSwgNjcsIDY3LCAxNDY4LCA2NywgNjcsIDE0NzEsIDY3LCA2NywgODEwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MjEsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDU3ODg5LCAwLCAwLCA1NDA3NCwgNTQwNzQsIDU1MCwgMCwgODMzLCA5NywgODM1LCA5NywgODM2LCA5NywgODM4LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDIwMDIsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzQwLCA0NSwgNDUsIDQ1LCAxNzQ0LCA0NSwgNDUsIDQ1LCA5NywgODQyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTUsIDk3LCA5NywgOTcsIDk3LCAwLCAxNzE3LCAxNzE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MjIsIDk3LCAwLCAwLCA4NTksIDk3LCA5NywgOTcsIDk3LCA4NjMsIDk3LCA4NjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODczLCA4NzQsIDg3NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODgzLCA4ODQsIDk3LCA5NywgODg3LCA4ODgsIDk3LCAxOCwgMTMxNDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjIsIDIyNTI4MCwgMCwgMzY1LCAwLCAzNjcsIDAsIDQ1LCA0NSwgNDUsIDE1MzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDkwOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTE5LCA2MzgsIDAsIDAsIDAsIDAsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI0MjUxMTcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI1OTcxNDksIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2NDIyMDUsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxNTgzMDEsIDAsIDIzNzU4MTgsIDIzNzk5MTQsIDIxNTg3MzAsIDIxNTg3MzAsIDI0MjA4NzQsIDIxNTg3MzAsIDI0NDk1NDYsIDIxNTg3MzAsIDIxNTg3MzAsIDk1MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTY1LCA5NzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMjcsIDY3LCAxMDI5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3NywgMTA3OCwgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjYsIDAsIDEzOSwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjQwNDQ5MCwgMjQxMjY4MiwgMTExMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyMSwgOTcsIDExMjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0MCwgMTE1NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjE1LCAxMTY4LCA5NywgOTcsIDExNzEsIDExNzIsIDk3LCA5NywgMCwgOTIxLCAwLCAxMTc1LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MywgNDUsIDQ1LCA0NSwgNDUsIDIwMSwgNDUsIDQ1LCA0NSwgMTIxOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0NiwgNjcsIDY3LCAxMjU0LCA2NywgMTI1NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODA2LCA4MDcsIDY3LCA2NywgOTcsIDEzMzYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTExMSwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzUxLCA5NywgOTcsIDk3LCAxMzU0LCA5NywgOTcsIDk3LCAxMzU5LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgMTY0MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg5NywgOTcsIDk3LCA5NywgOTAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzcxLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxNzMwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxNSwgOTcsIDk3LCA5NywgOTcsIDAsIDM2MCwgMCwgNjcsIDY3LCA2NywgMTQ0MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxNywgNjcsIDEwMTksIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTksIDk3LCA5NywgOTcsIDE0OTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTI1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTA3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUxNCwgNjcsIDY3LCA2NywgNjcsIDE1ODQsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4MywgNjcsIDY3LCA2NywgNzg4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTk5LCAxNjAxLCA2NywgNjcsIDY3LCAxNjA0LCA2NywgMTYwNiwgMTYwNywgNjcsIDE0NzIsIDAsIDE0NzQsIDAsIDE0NzYsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MTQsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDE4NTAsIDQ1LCA0NSwgNDUsIDQ1LCAxODU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjksIDk3LCAxNjE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyNSwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxMTc1LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE2MzMsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjQzLCAxNjQ1LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMTc4NCwgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgMTg5NCwgMTg5NSwgOTcsIDE4OTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3LCAxNjQ4LCA5NywgMTY1MCwgMTY1MSwgOTcsIDAsIDQ1LCA0NSwgNDUsIDE2NTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU4LCA0NSwgNDUsIDQ1LCA0NSwgNjY0LCA0NSwgNDUsIDE2NTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTg3LCA0NSwgNDUsIDE2NjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDEwMDUsIDY3LCA2NywgMTY4MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2ODYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3ODQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1NSwgNjcsIDY3LCA2NywgNjcsIDEwNjAsIDY3LCA2NywgOTcsIDk3LCAxNzEzLCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTM3OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQwOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ3LCA0NSwgMTU0OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDE3ODAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgNDUsIDQ1LCAyMDI3LCAyMDI4LCA0NSwgNDUsIDY3LCA2NywgMjAzMSwgMjAzMiwgNjcsIDQ1LCA0NSwgMTgwNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTE3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgxOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCAxNzA4LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgMTg2MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NywgNjcsIDY3LCA2NywgMTg3NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxODM5LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTkzNiwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTk0MywgMTk0NCwgMTk0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3MCwgNDUsIDQ1LCA0NSwgNDUsIDY3NCwgNDUsIDQ1LCA0NSwgNDUsIDY3OCwgNDUsIDE5NDgsIDQ1LCAxOTUwLCA0NSwgNDUsIDQ1LCA0NSwgMTk1NSwgMTk1NiwgMTk1NywgNjcsIDY3LCA2NywgMTk2MCwgNjcsIDE5NjIsIDY3LCA2NywgNjcsIDY3LCAxOTY3LCAxOTY4LCAxOTY5LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAxOTc0LCA5NywgMCwgMTkzNiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTA2LCAwLCAxOTc3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzQ2LCA0NSwgNDUsIDQ1LCA0NSwgMjAxMSwgNjcsIDY3LCAyMDEzLCA2NywgNjcsIDY3LCAyMDE3LCA5NywgOTcsIDAsIDAsIDIwMjEsIDk3LCA4MTkyLCA5NywgOTcsIDIwMjUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTkxNiwgNjcsIDY3LCA2NywgNjcsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCAxNDAsIDQ1LCA0NSwgNDUsIDExODAsIDQ1LCA0NSwgNDUsIDQ1LCAxMTg0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzg3LCA0NSwgMzkyLCA0NSwgNDUsIDM5NiwgNDUsIDQ1LCAzOTksIDQ1LCA0NSwgNjcsIDIwNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODAwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjAzLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDk3LCA5NywgMjg3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjU2LCAxNjU3LCA0NSwgMzc2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDQ2MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MTcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgNTQyLCAxMzExMiwgNTQ0LCA5NywgOTcsIDk3LCA5NywgNTU5LCA5NywgOTcsIDk3LCA5NywgOTcsIDU3MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODk2LCA5NywgOTcsIDk3LCA5MDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxMiwgOTE0LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzkxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcxMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NjIsIDQ1LCAxMTQwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzYsIDY3LCA2NywgMTI4MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxMywgNjcsIDY3LCAxMzYzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODksIDk3LCA5NywgOTcsIDE3MTQsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDkyNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjc2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgOTcsIDk3LCA5NywgMTgzMywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTkwMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTcsIDQ1LCA0NSwgNDUsIDQ1LCA5NjEsIDQ1LCA5NjMsIDQ1LCA0NSwgNDUsIDY3LCA5NywgMjAzNCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAyMDQwLCA0NSwgNDUsIDQ1LCAyMDQyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTc0LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1NzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc5OSwgNjcsIDY3LCA2NywgODA0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5OCwgMCwgMCwgMCwgMTMwNCwgMCwgMCwgMCwgMTMxMCwgMTMyLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQyOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA1Nzg4OSwgMCwgMCwgNTQwNzQsIDU0MDc0LCA1NTAsIDgzMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY4LCA5NywgOTcsIDk3LCA5NywgNTc4LCA5NywgNDUsIDQ1LCA5NjgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI4LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDEwODIsIDEzMTEyLCAxMDg2LCA1NDA3NCwgMTA5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAwLCAxMzksIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MDQzNTIsIDI0MTI1NDQsIDY3LCA2NywgNjcsIDY3LCAxNDY0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxMCwgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAxNTE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxOCwgOTcsIDAsIDAsIDAsIDAsIDE1MjgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTc2LCA0NSwgMTU1NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTYyLCA0NSwgNDUsIDE1NjUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODMsIDQ1LCA0NSwgNDUsIDY4NywgNDUsIDQ1LCA2OTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk1MywgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1NjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1OTQsIDk3LCA5NywgMTY0OSwgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCAxNjUzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjcwLCA0NSwgMTY3MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA3MzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNzQxLCA2NywgNjcsIDY3LCAxNjgwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzQsIDY3LCA2NywgNjcsIDE2OTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk3LCA2NywgMTY5OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDY4LCA0NzUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzQsIDk3LCA5NywgMTc5MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk2NCwgNDUsIDE1MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTc3LCAyMDQsIDQ1LCA2NywgNjcsIDY3LCAyMTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3ODcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNzEsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDk3LCA5NywgOTcsIDM1MSwgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDUsIDQ1LCA5MzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzk4LCA0NSwgNDUsIDQ1LCAxNTMsIDQ1LCAxNjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY2MCwgNjYxLCA0NSwgNDUsIDIwNSwgNDUsIDY3LCA2NywgNjcsIDY3LCAyMjAsIDY3LCAyMjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAyODAsIDk0LCAwLCAwLCA2NywgNjcsIDY3LCA2NywgNjcsIDI3MiwgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDk3LCA5NywgMzUyLCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCA0NSwgNDM5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NSwgNDUsIDQ1LCA0NSwgNDUyLCA0NSwgNDUsIDY3LCA2NywgMjEyLCAyMTYsIDY3LCA2NywgNjcsIDY3LCA2NywgMjQxLCA2NywgMjQ2LCA2NywgMjUyLCA2NywgNjcsIDQ4NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxMywgNjcsIDY3LCAxMDE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDUyMSwgNjcsIDY3LCA1MjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNTMxLCA2NywgNjcsIDY3LCA1MzgsIDY3LCAwLCAwLCAyMDQ2LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMCwgMCwgOTcsIDk3LCA0NSwgNDUsIDQ1LCAxMTkyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDE4LCA0NSwgNDUsIDE0MjEsIDk3LCA5NywgNTgzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTkxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzg0LCA5NywgNjE4LCA5NywgOTcsIDYyMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjgsIDk3LCA5NywgOTcsIDYzNSwgOTcsIDE4LCAxMzE0MjcsIDAsIDAsIDAsIDYzOSwgMCwgMTMyLCAzNjIsIDAsIDAsIDM2NSwgMjkzMTUsIDM2NywgMCwgOTIxLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDkzMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5NCwgNDUsIDExOTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTk5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNDUsIDQ1LCA2NjcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA4LCA0NSwgNDUsIDQ1LCA2OTYsIDQ1LCA0NSwgNDUsIDcwMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTAsIDQ1LCA0NSwgNDUsIDEyMjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NCwgNDUsIDQ1LCA0NSwgNzI5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc5NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODA1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4NywgNjcsIDE1ODksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc2MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjI5NjgsIDAsIDAsIDY3LCA2NywgNjcsIDY3LCA2NywgODE0LCA4MTYsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgNjcsIDY3LCAxMDA4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMjAsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE0MjksIDY3LCAxNDMwLCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxOCwgMTA3NiwgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4ODA5LCAwLCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCA5NywgOTcsIDExMDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyNCwgOTcsIDExMjYsIDk3LCA5NywgMTExNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTExMiwgOTcsIDk3LCAxMTU2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTk0LCA5NywgOTcsIDk3LCA5NywgMTE3MCwgOTcsIDk3LCA5NywgOTcsIDAsIDkyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDE1MzIsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcwNiwgNDUsIDQ1LCA3MDksIDQ1LCA0NSwgMTE3NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIwMiwgNDUsIDEyMDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTUsIDQ1LCA0NSwgNDUsIDEyMzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTIzNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1MywgMTA1NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA2MSwgNjcsIDY3LCAxMjgyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjg5LCA2NywgNjcsIDY3LCAxMjkyLCA5NywgOTcsIDk3LCA5NywgMTMzOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM0NCwgOTcsIDk3LCA5NywgOTcsIDQ1LCAxODQ5LCA0NSwgMTg1MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI2LCA0NSwgMTM4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4OCwgNDUsIDQ1LCAxNDAxLCAxNDAyLCA0NSwgNDUsIDQ1LCA0NSwgMTQwNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzUyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTQxMCwgNDUsIDQ1LCA0NSwgMTQxMywgNDUsIDE0MTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MTksIDQ1LCA0NSwgNDUsIDQ1LCAxODA2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCAyMDE5LCAwLCA5NywgNjcsIDY3LCA2NywgMTQ1MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjY0LCA2NywgNjcsIDE0NjAsIDY3LCAxNDYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAxMzAwLCAwLCAwLCAwLCAxMzA2LCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxNTA2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTIsIDk3LCA5NywgOTcsIDAsIDE3MjgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTAxLCA5NywgOTcsIDk3LCA5NywgMTUxNSwgOTcsIDE1MTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCAxNjUyLCA0NSwgNDUsIDQ1LCAxNjU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTUyLCAxNTUzLCA0NSwgNDUsIDQ1LCAxNTU2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjkzLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTU3MiwgNjcsIDY3LCA2NywgNjcsIDE1NzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYwMiwgNjcsIDY3LCAxNjA1LCA2NywgNjcsIDY3LCAwLCA2NywgMTU4MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTgwLCA2NywgNjcsIDE1OTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCA1NDIsIDAsIDU0NCwgNjcsIDY3LCA2NywgNjcsIDE3NTksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTMzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzc3LCA5NywgOTcsIDk3LCAxNzkzLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5OTgsIDQ1LCA0NSwgMTAwMSwgMTAwMiwgNDUsIDQ1LCA2NywgNjcsIDQ1LCAxODYxLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODcxLCA2NywgMTg3MywgMTg3NCwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDE2Mzg0LCA5NywgNDUsIDY3LCA5NywgMCwgMCwgMCwgMTQ3MywgMCwgMTA4MiwgMCwgMCwgMCwgMTQ3NSwgMCwgMTA4NiwgMCwgMCwgMCwgMTQ3NywgMTg3NiwgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTg4MywgMCwgMTg4NSwgOTcsIDk3LCA5NywgMTg4OSwgMCwgMCwgMCwgMjg2LCAwLCAwLCAwLCAyODYsIDAsIDIzNjc0ODgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMTI2LCAxMjYsIDEyNiwgMjA1MywgMCwgMjA1NSwgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMjAzOSwgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDIyNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjQ2LCA2NywgNjcsIDEyNDksIDEyNTAsIDY3LCA2NywgNjcsIDEzMiwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDE0MSwgNDUsIDQ1LCA0NSwgMTQwMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4NiwgNDUsIDQ1LCAxMTg5LCA0NSwgNDUsIDE1NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkxLCA0NSwgNDUsIDQ1LCA0NSwgNzAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NTMsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNDUsIDQ1LCA2NywgMjA4LCA2NywgNjcsIDY3LCAyMjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTgsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgMjg4LCA5NywgOTcsIDk3LCAzMDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzM4LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgMTMxNDI3LCAwLCAwLCAwLCAwLCAzNjIsIDAsIDM2NSwgMjg4MDksIDM2NywgMTM5LCA0NSwgMzcwLCA0NSwgNDUsIDQ1LCA0NSwgNzE2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkxMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODE5LCA2NywgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDQ1LCA0MDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwOSwgNDUsIDY3LCA2NywgNjcsIDY3LCA0ODksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzcxLCA2NywgNjcsIDY3LCA2NywgNTIwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzNCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3MSwgNjcsIDY3LCA2NywgMTI3NCwgNjcsIDY3LCA2NywgMTI3OSwgNjcsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgNTc4ODksIDAsIDAsIDAsIDUzNTMxLCA1MzUzMSwgMzY3LCAyODYsIDk3LCA1NTMsIDk3LCA5NywgOTcsIDk3LCA1ODYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzOCwgOTcsIDk3LCA5NywgOTcsIDYxNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzEsIDk3LCA5NywgOTcsIDAsIDE4MzQsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAzNTMsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDUsIDQ1LCA2NjgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjgyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTQ5LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDc0NywgNzQ4LCA2NywgNjcsIDY3LCA2NywgNzU1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMTMwMiwgMCwgMCwgMCwgMTMwOCwgMCwgNjcsIDc5NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzAxLCA2NywgOTcsIDk3LCA5NywgODQ1LCA4NDYsIDk3LCA5NywgOTcsIDk3LCA4NTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgOTcsIDk3LCA4OTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTAsIDk3LCA5NywgNDUsIDk5MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTIzOSwgNjcsIDY3LCA2NywgMTA2MywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMTMwMSwgMCwgMCwgMCwgMTMwNywgMCwgMCwgOTcsIDExNDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1MiwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDIwMDEsIDAsIDk3LCAyMDAzLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCAxNzM5LCA0NSwgNDUsIDQ1LCAxNzQyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3LCA5NywgOTcsIDk3LCAxMTU3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNDUsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1MSwgOTcsIDk3LCA5NywgMTI1MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTM5LCA0NSwgMTQyMywgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQzMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTcwMCwgNjcsIDE3MDIsIDY3LCA2NywgMTQzOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxNCwgNjcsIDY3LCA5NywgOTcsIDE0OTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTEsIDk3LCA5NywgMTcwMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODUyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgMTk0OSwgNDUsIDE5NTEsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTYxLCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDIwNjAsIDIwNjEsIDAsIDIwNjIsIDQ1LCA2NywgOTcsIDAsIDAsIDIwMzYsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMjMsIDY3LCA2NywgMjM3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTYzLCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMTk3MiwgMCwgOTcsIDk3LCA5NywgMTk3NSwgMCwgOTIxLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgOTMxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDE3LCA0NSwgNDUsIDE5ODksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk5NiwgOTcsIDE4LCAxMzE0MjcsIDAsIDAsIDM2MCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgOTMwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDk3LCA5NywgMTk5OCwgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTg1LCA0NSwgMTk4NiwgNDUsIDQ1LCA0NSwgMTU2LCA0NSwgNDUsIDE3MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3NSwgNDUsIDQ1LCA0NSwgNDUsIDY3OSwgMTMxNDI3LCAwLCAzNTgsIDAsIDAsIDM2MiwgMCwgMzY1LCAyODgwOSwgMzY3LCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzgxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MDAsIDQ1LCA0NSwgNDE5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNTA1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODIwLCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgNjcsIDY3LCA1MjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMTI5OSwgMCwgMCwgMCwgMTMwNSwgMCwgMCwgMCwgOTcsIDk3LCA2MTksIDk3LCA5NywgOTcsIDk3LCA5NywgNjI2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwNSwgOTcsIDk3LCA5NywgOTcsIDExMDksIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDY3LCA3NDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2MCwgNjcsIDAsIDk3LCA0NSwgNjcsIDIwNTgsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDIwNDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNzgwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTE2LCA2NywgNjcsIDk3LCA5NywgOTcsIDg3OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjksIDk3LCAwLCA0NSwgOTc5LCA0NSwgNDUsIDQ1LCA0NSwgOTg0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTk4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTAyMywgNjcsIDY3LCA2NywgNjcsIDEwMjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAxMDk0LCAwLCAwLCAwLCAxMDkyLCAxMzE1LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDg2LCA5NywgMTQ4OSwgOTcsIDk3LCA5NywgMTExNywgOTcsIDk3LCA5NywgOTcsIDExMjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTQ2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg4MSwgOTcsIDk3LCA5NywgODg2LCA5NywgOTcsIDk3LCAxMzExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYxNSwgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjMxLCA5NywgOTcsIDE4NDcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTg1MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg2OCwgNjcsIDY3LCA2NywgMTg3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMTg4MiwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDE4OTEsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxOTI5LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgMTkwMCwgNDUsIDE5MDEsIDQ1LCA0NSwgNDUsIDE5MDUsIDQ1LCA2NywgMjA1NCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgOTcsIDAsIDAsIDk3LCAyMDM3LCAyMDM4LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTg2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDE0MiwgNDUsIDQ1LCA0NSwgMTQxMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDMyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NywgNDUsIDQ1LCAxNzEsIDQ1LCA0NSwgNDUsIDE4MiwgNDUsIDQ1LCA0NSwgNDUsIDIwMCwgNDUsIDQ1LCA0NSwgMTU0MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTUxLCA0NSwgNDUsIDQ1LCA0NSwgMTE4MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjExLCA0NSwgNDUsIDQ1LCAxMjE0LCA0NSwgNDUsIDQ1LCA2NywgMjA5LCA2NywgNjcsIDY3LCAyMjQsIDY3LCA2NywgMjM4LCA2NywgNjcsIDY3LCAyNDksIDY3LCAwLCA5NywgMjA1NiwgMjA1NywgMCwgMjA1OSwgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCA5NywgMCwgMCwgMTkzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMjY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDk3LCAyODksIDk3LCA5NywgOTcsIDMwNCwgOTcsIDk3LCAzMTgsIDk3LCA5NywgOTcsIDMyOSwgOTcsIDk3LCAwLCAwLCA5NywgMTc4MywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgNDUsIDIwMjYsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMjAzMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCAzNDcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDUsIDY2NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDIwLCA0NSwgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg0MCwgNjcsIDEwMDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzEsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgMTEwMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTkyLCA5NywgOTcsIDk3LCAxMTkwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExOTUsIDQ1LCAxMTk3LCA0NSwgNDUsIDQ1LCA0NSwgMTIwMSwgNDUsIDQ1LCA0NSwgNDUsIDE5NTIsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUwLCA2NywgNjcsIDY3LCAxMjU1LCA2NywgMTI1NywgNjcsIDY3LCA2NywgNjcsIDEyNjEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUxLCAxMjU2NSwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMyLCA2NywgNjcsIDEyNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY5NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjI2ODgsIDAsIDAsIDEyODEsIDY3LCA2NywgNjcsIDY3LCAxMjg1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMzM1LCA5NywgMTMzNywgOTcsIDk3LCA5NywgOTcsIDEzNDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODgyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM0NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2MSwgOTcsIDE4LCAxMzE0MjcsIDAsIDYzOCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDAsIDU0NCwgMCwgNTUwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDczOTg0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyOTkwMDgwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNDgyMTc2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYyNjg4LCAwLCA1MzUzMCwgOTcsIDk3LCA5NywgMTM2NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA4LCA5NywgOTcsIDk3LCA0NSwgNDUsIDE0MjQsIDQ1LCAxNDI1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTgsIDY3LCA2NywgNjcsIDY3LCA0NSwgMTU1NSwgNDUsIDQ1LCAxNTU3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcwNywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTU3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3MywgNjcsIDY3LCAxNTk1LCA2NywgNjcsIDE1OTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDA0MzUyLCAyNDEyNTQ0LCA5NywgOTcsIDk3LCAxNjM2LCA5NywgOTcsIDk3LCAxNjM5LCA5NywgOTcsIDE2NDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNzMsIDAsIDkyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIDY3LCA2NywgNjcsIDE2OTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3MywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODUwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg4MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTA2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTg2MCwgNDUsIDQ1LCA2NywgNjcsIDE4NjUsIDY3LCA2NywgNjcsIDY3LCAxODcwLCA2NywgNjcsIDY3LCA2NywgMTg3NSwgNjcsIDY3LCA5NywgOTcsIDE4ODAsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAxODg4LCA5NywgMCwgMCwgMCwgMTkzOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODU0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwOSwgNDUsIDQ1LCAxOTExLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI0OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTkyMiwgNjcsIDY3LCAxOTI0LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTg5OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwNCwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDE2Mzg0LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTcyNCwgMjAwOCwgMjAwOSwgNDUsIDQ1LCA2NywgNjcsIDY3LCAyMDE0LCAyMDE1LCA2NywgNjcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMjAyMiwgMCwgMjAyMywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgNDUsIDE0NywgMTUxLCAxNTQsIDQ1LCAxNjIsIDQ1LCA0NSwgMTc2LCAxNzgsIDE4MSwgNDUsIDQ1LCA0NSwgMTkyLCAxOTYsIDQ1LCA0NSwgNDUsIDQ1LCAyMDEyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMDE4LCA5NywgMCwgMCwgOTcsIDE5NzgsIDk3LCA5NywgOTcsIDE5ODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3MiwgOTczLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAyNTksIDI2MywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDk3LCAyOTQsIDI5OCwgMzAxLCA5NywgMzA5LCA5NywgOTcsIDMyMywgMzI1LCAzMjgsIDk3LCA5NywgOTcsIDk3LCA5NywgNTYwLCA5NywgOTcsIDk3LCA1NjksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDkyMSwgMCwgMTE3NSwgMCwgMCwgMCwgMCwgNDUsIDMzOSwgMzQzLCA5NywgOTcsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCA2NywgNjcsIDUwMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTEyLCA2NywgNjcsIDUxOSwgOTcsIDk3LCA2MDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwOSwgOTcsIDk3LCA2MTYsIDQ1LCA2NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIwOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA3NjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzcwLCA2NywgNjcsIDY3LCA3NzQsIDY3LCAwLCAyMDQ1LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgNDUsIDQ1LCA0NSwgOTk0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAyMTMsIDY3LCAyMTksIDY3LCA2NywgMjMyLCA2NywgMjQyLCA2NywgMjQ3LCA2NywgNjcsIDY3LCA3NzksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxOCwgNjcsIDY3LCA2NywgNjcsIDgxMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCAwLCA5NywgODM0LCA5NywgOTcsIDk3LCA5NywgOTcsIDgzOSwgOTcsIDE4LCAxMzE0MjcsIDAsIDYzOCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDY0NSwgOTcsIDk3LCA4NjEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODY4LCA5NywgOTcsIDk3LCA4NzIsIDk3LCA5NywgODc3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjEzLCA5NywgOTcsIDk3LCA5NywgOTcsIDkwOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDEwMzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDcsIDY3LCA2NywgNjcsIDEwNTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzMsIDY3LCA2NywgNjcsIDk3LCA5NywgMTEzMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzOCwgMCwgMCwgNjcsIDY3LCA2NywgMTI5NSwgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDEzMTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzUsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCAxMzc5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjIsIDQ1LCA0NSwgNDUsIDQyOSwgNDMxLCA0NSwgNDUsIDQ1LCA0NSwgMCwgMTA5MCwgMCwgMCwgOTcsIDE0NzksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzIzLCAwLCA5MjEsIDI5MzE1LCAwLCAwLCAwLCAwLCA0NSwgOTI5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTYwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDk3LCAxNzM4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0MywgNDUsIDQ1LCA0NSwgNDUsIDE2NiwgNDUsIDQ1LCA0NSwgNDUsIDE4NCwgMTg2LCA0NSwgNDUsIDE5NywgNDUsIDQ1LCA5NywgMTc3OSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgMTgsIDEzMTQyNywgMCwgNjM4LCAwLCAwLCAwLCAwLCAzNjIsIDAsIDY0MCwgMzY1LCAyOTMxNSwgMzY3LCAwLCA5MjEsIDI5MzE1LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTUzNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODAzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MDksIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE4MTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDY3LCA2NywgNjcsIDE4MTgsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyNCwgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTg5MCwgMCwgMTgyOSwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDE4MzYsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE5ODEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5ODcsIDE4NDUsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg1MywgNDUsIDQ1LCA0NSwgMTg1NywgNDUsIDQ1LCA0NSwgNjcsIDE4NjQsIDY3LCAxODY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcxMCwgMTcxMSwgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDE4ODYsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxODM4LCAwLCAwLCAwLCA5NywgMTg0MywgOTcsIDAsIDE4OTMsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDE5MzEsIDk3LCA5NywgOTcsIDk3LCA5NywgNTg4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI5LCA5NywgOTcsIDk3LCA5NywgOTcsIDY3LCAyMDQ0LCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgNDUsIDQ1LCA0NSwgMTY2MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUzLCA0NSwgNDU1LCA2NywgNjcsIDY3LCA2NywgMjY4LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDk3LCAzNDgsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgMTMxNDI3LCAwLCAzNTksIDAsIDAsIDM2MiwgMCwgMzY1LCAyODgwOSwgMzY3LCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDIxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDM0LCA0NSwgNDUsIDY5NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY2NywgNDUsIDAsIDkyMSwgMjkzMTUsIDAsIDkyNSwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgxMSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzcsIDY3LCAxMDM5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjc3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDAsIDEwOTUsIDAsIDAsIDAsIDEwOTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzMSwgOTcsIDExMzMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzcwLCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMTIsIDAsIDAsIDAsIDAsIDEwOTYsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzI3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzIsIDk3LCA5NywgOTcsIDE4MzAsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDE4OTYsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTMzLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgNDUsIDQ1LCAzODAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MDEsIDQ1LCA0NSwgMTU4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIwMCwgNDUsIDQ1LCA0NSwgNDUsIDIwNiwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCA4MzIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDEwODMsIDEzMTEyLCAxMDg3LCA1NDA3NCwgMTA5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxNiwgMCwgODMxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE3NCwgOTIxLCAwLCAxMTc1LCAwLCAwLCAwLCAwLCA0NSwgMCwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDQ1LCAxNDgsIDY3LCA2NywgMjY0LCA2NywgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgOTcsIDI5NSwgOTcsIDk3LCA5NywgOTcsIDMxMywgOTcsIDk3LCA5NywgOTcsIDMzMSwgMzMzLCA5NywgMTgsIDEzMTQyNywgMzU2LCA2MzgsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAwLCAzNjcsIDAsIDQ1LCA0NSwgMTUzMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTg4LCA0NSwgNDUsIDQ1LCA5NywgMzQ0LCA5NywgOTcsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCA0MDIsIDQwNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzU2LCA2NywgNDM4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0OSwgNDUwLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDIxNCwgMjE4LCAyMjEsIDY3LCAyMjksIDY3LCA2NywgMjQzLCAyNDUsIDI0OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA0ODgsIDQ5MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDcxLCA2NywgMTA3MywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTM1LCA1MzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2ODMsIDE2ODQsIDY3LCA2NywgNjcsIDY3LCAxNjg4LCAxNjg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDU4NSwgNTg3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMyLCA2MzMsIDk3LCA5NywgMCwgMCwgMTc4MiwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA3MTIsIDQ1LCA0NSwgNDUsIDcxNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjUsIDQ1LCA0NSwgNDUsIDE2MywgMTY3LCAxNzMsIDE3NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTMsIDQ1LCA0NSwgNDUsIDQ1LCA5ODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTU4LCA0NSwgMTU2MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MDQsIDcwNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MzEsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNzM5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNzMsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA2NywgNjcsIDY3LCA3NjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgxMiwgNjcsIDY3LCA2NywgNjcsIDgxOCwgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDgzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTM3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyNywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDkxMCwgOTcsIDk3LCA5NywgOTcsIDkxNiwgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAxOTQwLCA5NywgOTcsIDE5NDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4NSwgNDUsIDQ1LCA0NSwgNDUsIDM5NSwgNDUsIDQ1LCA0NSwgNDUsIDk2NiwgNDUsIDk2OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3NSwgNDUsIDQ1LCA0NSwgNDA2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzQsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxMDEwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDAsIDY3LCAxMDQyLCA2NywgMTA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAxNzA2LCA5NywgOTcsIDk3LCAxNzA5LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgMTA1MSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ0MywgNjcsIDY3LCAxNDQ2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5NywgMCwgMCwgMCwgMTMwMywgMCwgMCwgMCwgMTMwOSwgNjcsIDY3LCA2NywgNjcsIDEwNzksIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1NzIyODgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDEwOTgsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzNCwgOTcsIDExMzYsIDk3LCAxMTM5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDkyMSwgMCwgMCwgMCwgMTE3NiwgMCwgNjQ2LCA0NSwgNjcsIDY3LCA2NywgMTI2OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2OSwgNjcsIDY3LCA2NywgOTcsIDEzNDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyNywgOTcsIDY3LCAxNTY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDgsIDE0NDksIDY3LCAxODE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODI1LCA2NywgNjcsIDE4MjcsIDk3LCA5NywgMCwgMTc4MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxODMxLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDE5ODAsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgMTg0NiwgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjEyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAyMDEwLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMDE2LCA2NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgMjAwNywgMCwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDE0MywgNDUsIDQ1LCA0NSwgMTY3MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTgxMywgNjcsIDY3LCAxODE1LCA0NSwgNDUsIDY3LCAyMTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIzOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgMjkwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwMywgOTcsIDk3LCAzMTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODk5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzNzUsIDQ1LCA0NSwgNDUsIDM3OSwgNDUsIDQ1LCAzOTAsIDQ1LCA0NSwgMzk0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2MSwgNjcsIDY3LCA2NywgNDY1LCA2NywgNjcsIDQ3NiwgNjcsIDY3LCA0ODAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUwMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3NSwgOTcsIDk3LCA5NywgNTU4LCA5NywgOTcsIDk3LCA1NjIsIDk3LCA5NywgNTczLCA5NywgOTcsIDU3NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwMywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxNjM4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2NDYsIDU5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMzNCwgNDUsIDY4MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzk2LCA0NSwgNDUsIDEzOTksIDQ1LCA0NSwgNzMwLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0MzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNDUsIDQ1LCA5OTMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxMjM4LCA2NywgNjcsIDEwMDYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODAsIDEwNDgsIDEwNDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjg2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5MSwgNjcsIDk3LCA5NywgMTEwMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzOCwgMCwgOTIwLCA5NywgOTcsIDExNDIsIDExNDMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTUzLCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTgsIDk3LCA5NywgOTcsIDExNjEsIDk3LCA5NywgOTcsIDk3LCAxMTY2LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzI4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDEyMTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3OCwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCAxMzQ5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTIxLCAwLCAwLCA5MjYsIDAsIDAsIDAsIDQ1LCA0NSwgMTQxMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzU0LCA0NSwgNDUsIDY3LCA2NywgMTMwMSwgMCwgMTMwNywgMCwgMTMxMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAyMTA1NCwgOTcsIDk3LCA5NywgOTcsIDY3LCAxNzU3LCA2NywgNjcsIDY3LCAxNzYwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzc4LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTExLCA5NywgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyMCwgNjcsIDE4MjIsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgMTkzMywgOTcsIDE4OTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE4OTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY2NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MjUsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDYyMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc5NiwgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxOTY0LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcyMSwgOTcsIDk3LCAwLCAwLCAxOTk3LCA5NywgMCwgMCwgMjAwMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA3MzMsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODAzLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCAxNDQsIDQ1LCA0NSwgNDUsIDE4MDUsIDQ1LCAxODA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIzMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA0NSwgNDUsIDY3LCAyMTEsIDY3LCA2NywgNjcsIDY3LCAyMzAsIDIzNCwgMjQwLCAyNDQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDc5LCA2NywgNjcsIDY3LCAyNjAsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgMjkxLCA5NywgOTcsIDk3LCA5NywgMzEwLCAzMTQsIDMyMCwgMzI0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzYyLCAzNDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCAxMzE0MjcsIDAsIDAsIDM2MCwgMCwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgMzY5LCA0NSwgNDUsIDQ1LCAzNzQsIDY3LCA2NywgNDYwLCA2NywgNjcsIDY3LCA2NywgNDY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDg3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDk4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzcyLCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5MjEsIDkyMiwgMTE3NSwgMCwgMCwgMCwgMCwgNDUsIDY3LCA1MDIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MDgsIDY3LCA2NywgNjcsIDUxNSwgNTE3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTkzMiwgOTcsIDk3LCAwLCAxOTk5LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDIwMDQsIDIwMDUsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTE5MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzYsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDU3ODg5LCAwLCAwLCAwLCA1MzUzMSwgNTM1MzEsIDM2NywgMjg2LCA1NTIsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3NywgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDU1NywgOTcsIDk3LCA5NywgOTcsIDU2MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTM1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1ODQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTExLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjM4LCAwLCAwLCAwLCAwLCAxMzE1LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxMzE5LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzMzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzQwLCA5NywgOTcsIDk3LCAxMzQzLCA5NywgOTcsIDEzNDUsIDk3LCAxMzQ2LCA5NywgNTk5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA1LCA5NywgOTcsIDk3LCA2MTIsIDYxNCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzk0LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxMywgNDUsIDQ1LCA3NDUsIDY3LCA2NywgNjcsIDY3LCA3NTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTc3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2MiwgNjcsIDY3LCA2NywgNjcsIDc2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNzc3LCA2NywgNjcsIDc4MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5MiwgMTU5MywgNjcsIDY3LCA5NywgODQzLCA5NywgOTcsIDk3LCA5NywgODQ5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTEwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODYwLCA5NywgOTcsIDk3LCA5NywgODY0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzk3LCA0NSwgNDUsIDQ1LCA0NSwgMTgwMSwgNDUsIDk3LCA4NzUsIDk3LCA5NywgODc5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTkxLCA0NSwgNDUsIDQ1LCA0NSwgOTk2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMjE1LCA2NywgNjcsIDY3LCA2NywgMjMzLCA2NywgNjcsIDY3LCA2NywgMjUxLCAyNTMsIDEwMjIsIDY3LCA2NywgNjcsIDEwMjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDM1LCA2NywgNjcsIDEwMzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU4LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjQsIDY3LCA2NywgNjcsIDEwNjcsIDY3LCA2NywgNjcsIDY3LCAxMDcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzY3NDg4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDAsIDAsIDEwOTYsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDAsIDAsIDkyOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5MzQsIDQ1LCA0NSwgNDUsIDE2NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk4LCA0NSwgNDUsIDQ1LCAzNzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM5MywgNDUsIDQ1LCA0NSwgMzk4LCA0NSwgOTcsIDk3LCAxMTE2LCA5NywgOTcsIDk3LCAxMTIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTQ3LCAxMTQ4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyOSwgOTcsIDk3LCAxMTMyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjYsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgMTE3OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUxLCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjI3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNjAsIDY3LCA2NywgNjcsIDEyNjMsIDY3LCA2NywgMTI2NSwgMTIwMywgNDUsIDQ1LCAxMjA1LCA0NSwgMTIwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxNiwgNjcsIDEyNjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDcxLCA2NywgNjcsIDY3LCA2NywgNDgxLCA2NywgNDUsIDEzODYsIDQ1LCAxMzg5LCA0NSwgNDUsIDQ1LCA0NSwgMTM5NCwgNDUsIDQ1LCA0NSwgMTM5NywgNDUsIDQ1LCA0NSwgNDUsIDk5NSwgNDUsIDk5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxOTE1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0MjIsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0MzMsIDY3LCAxNDM2LCA2NywgNjcsIDY3LCA2NywgMTQ0MSwgNjcsIDY3LCA2NywgMTQ0NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMjgxLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgOTcsIDk3LCAxNDk0LCA5NywgOTcsIDk3LCAxNDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCAxNTcxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgNTQyLCAxMzExMiwgNTQ0LCA2NywgNjcsIDE1ODMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzUyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMTYzNCwgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjUsIDk3LCA5NywgOTcsIDE2NDcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDA5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjU4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjgsIDE3MTIsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDE4MzUsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDE4NDQsIDk3LCA5NywgMTcyNiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzMyLCA5NywgMTczNCwgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDAsIDk3LCAzMDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODY2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgMTc1OCwgNjcsIDY3LCA2NywgMTc2MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDQzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzcxLCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3NzYsIDk3LCA5NywgOTcsIDk3LCAyOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwOCwgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDE5NjYsIDk3LCA5NywgOTcsIDE5NzAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxNzIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDE4MzcsIDk3LCAwLCAxODQwLCAxODQxLCA5NywgOTcsIDk3LCAxOTg4LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk5NCwgMTk5NSwgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxNywgOTcsIDk3LCAwLCAwLCAwLCA2NywgNjcsIDI2NSwgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgMzQ1LCA5NywgOTcsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCAxMzE0MjcsIDAsIDAsIDAsIDM2MSwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTEsIDQ1LCA0NSwgNDE0LCA0NSwgNDUsIDQ1LCA0NSwgMzc3LCA0NSwgNDUsIDQ1LCAzODYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQyNiwgNDUsIDQ1LCA0MzMsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNDYzLCA2NywgNjcsIDY3LCA0NzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzNywgNjcsIDU0MCwgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDU3ODg5LCAwLCAwLCAwLCA1MzUzMSwgNTM1MzEsIDM2NywgMjg2LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTA5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzNywgMTgsIDEzMTQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDAsIDkyNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzNCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxMjQwLCA0NSwgNjk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzA4LCA0NSwgNDUsIDQ1LCA0NSwgMTIyMSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA3OTUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDcwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODE1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgNTQyLCAxMzExMiwgNTQ0LCA5NywgOTcsIDk3LCA4OTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjQsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDEwMjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2ODcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDAsIDAsIDAsIDEwOTcsIDEyNDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTAsIDQ1LCA0NSwgMTM4OCwgNDUsIDEzOTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzNiwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDM3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDcyLCAxNDkwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTAzLCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTkzMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA4NDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1OCwgNjcsIDY3LCAxOTY1LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDE3MTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCAxMzgyLCA0NSwgMTM4MywgNDUsIDQ1LCA0NSwgMTU5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMjYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCAzNDEsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCA5NywgMTA5OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzMzLCA5NywgMTIzMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5OTIsIDY3LCAxOTkzLCA2NywgNjcsIDY3LCA5NywgOTcsIDQ1LCA0NSwgMTYwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY2NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzE0MjcsIDM1NywgMCwgMCwgMCwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTIsIDQ1LCA0NSwgNDUsIDQxNiwgNDUsIDQ1LCA0NSwgNDQwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTk5MCwgNjcsIDE5OTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDE3MDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDUwMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY5MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDMwLCA2NywgMTAzMiwgNjcsIDY3LCA2NywgNjcsIDU5OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYzMiwgMCwgOTIxLCAyOTMxNSwgOTIzLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDAsIDEzMTEyLCAwLCA1NDA3NCwgMCwgMCwgMTA5MywgMCwgMCwgMCwgMCwgMCwgOTcsIDE2MDksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjksIDk3LCA5NywgOTcsIDEzNzIsIDk3LCA5NywgNjcsIDY3LCAyNjYsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDM0NiwgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNjY1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjc3LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDQ1LCA0NSwgOTU0LCA0NSwgOTU2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0OCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA0NTYsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDEzNTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzc2LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NTksIDE1NjEsIDQ1LCA0NSwgNDUsIDE1NjQsIDQ1LCAxNTY2LCAxNTY3LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTczLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI0NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjUyLCA5NywgMTcyNSwgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjgsIDk3LCAxNjMwLCAwLCAwLCA5NDI0MiwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMTExODIwOCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODczMSwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzExNzA1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAxODc1MiwgMjE1ODU5MiwgMzA0MzMyOCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzA4MDE5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzExMjk2MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODg3OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYwNTA1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMCwgNTQyLCAwLCA1NDQsIDAsIDAsIDIxNjY3ODQsIDAsIDAsIDAsIDU1MCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjY4Njk3NiwgMjE1ODU5MiwgMjcxNTY0OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjg2NzIwMCwgMjE1ODU5MiwgMjkwNDA2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDExMzA0OTYsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxODY2ODgsIDIxNTg1OTIsIDAsIDAsIDEzOSwgMCwgMCwgMCwgMTM5LCAwLCAyMzY3NDg4LCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAxNzYxMjgsIDAsIDIxNjY3ODQsIDAsIDAsIDAsIDAsIDAsIDI4NiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE3MDMwNCwgMzE3NDQwMCwgMjE1ODU5MiwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQyNDgzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMTUwOCwgMjE1ODU5MiwgMjkwODE2MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjk3Nzc5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAzOTIzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE1ODAxNiwgNjcsIDI0ODUwLCAyNDg1MCwgMTI1NjQsIDEyNTY0LCAwLCAwLCAwLCAwLCAwLCA1MzUzMSwgNTM1MzEsIDAsIDI4NiwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTQ0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0OSwgOTcsIDk3LCA5NywgOTcsIDExNTQsIDU3ODg5LCAwLCAwLCAwLCAwLCA1NTAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTc2LCA5NywgOTcsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDAsIDAsIDEzOTI2NCwgMCwgOTIxLCAyOTMxNSwgMCwgMCwgOTI2LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTksIDcyMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0MiwgNDUsIDQ1LCA5NDYsIDQ1LCA0NSwgNDUsIDk1MCwgNDUsIDQ1LCAwLCAyMTQ2MzA0LCAyMTQ2MzA0LCAwLCAwLCAwLCAwLCAyMjI0MTI4LCAyMjI0MTI4LCAyMjI0MTI4LCAyMjMyMzIwLCAyMjMyMzIwLCAyMjMyMzIwLCAyMjMyMzIwLCAwLCAwLCAxMzAxLCAwLCAwLCAwLCAwLCAwLCAxMzA3LCAwLCAwLCAwLCAwLCAwLCAxMzEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDEzMTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3OTUsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAyMTU4NTkyLCAyMTQ2MzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAwLCA5MjEsIDI5MzE1LCAwLCA5MjQsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEwMDAsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcKXTsKClhRdWVyeVRva2VuaXplci5FWFBFQ1RFRCA9ClsgMjkwLCAzMDAsIDMwNCwgMzUzLCAyOTYsIDMwOSwgMzA1LCAzMTksIDMxNSwgMzI0LCAzMjgsIDM1MiwgMzU0LCAzMzQsIDMzOCwgMzMwLCAzMjAsIDM0NSwgMzQ5LCAyOTMsIDM1OCwgMzYyLCAzNDEsIDM2NiwgMzEyLCAzNzAsIDM3NCwgMzc4LCAzODIsIDM4NiwgMzkwLCAzOTQsIDM5OCwgNzM3LCA0MDIsIDYzNCwgNDM5LCA2MDQsIDYzNCwgNjM0LCA2MzQsIDYzNCwgNDA4LCA2MzQsIDYzNCwgNjM0LCA0MDQsIDYzNCwgNjM0LCA2MzQsIDQ1NywgNjM0LCA2MzQsIDk2MywgNjM0LCA2MzQsIDQxMywgNjM0LCA2MzQsIDYzNCwgNjM0LCA2MzQsIDYzNCwgNjM0LCA2NjMsIDQxOCwgNDIyLCA5MDMsIDkwMiwgNDI2LCA0MzEsIDU0OCwgNjM0LCA0MzcsIDUyMSwgOTE5LCA0NDMsIDYxNSwgNDA5LCA0NDksIDQ1NSwgNjI0LCA3MzEsIDc1MSwgNjM0LCA0NjEsIDQ2NSwgNjcyLCA0NzAsIDQ2OSwgNDc0LCA0ODEsIDQ4NSwgNDc3LCA0ODksIDQ5MywgNjI5LCA1NDIsIDQ5NywgNTA1LCA2MDMsIDYwMiwgOTkxLCA2NDgsIDUxMCwgODA0LCA2MzQsIDUxNSwgOTU4LCA1MjYsIDUyNSwgNTMwLCA3NjgsIDYzNCwgNTQ2LCA1NTIsIDcxMSwgNzEwLCA1OTMsIDU1OCwgNTYyLCA2MTgsIDU2NiwgNTcwLCA1NzQsIDU3OCwgNTgyLCA1ODYsIDU5MCwgNjA4LCA2MTIsIDY2MCwgODIyLCA4MjEsIDYzNCwgNjIyLCA1OTYsIDQ0NCwgNjI4LCA1MzMsIDcyNCwgNjMzLCA2NDAsIDY1MywgNjQ3LCA2NTIsIDUzNiwgMTAwOCwgNDUxLCA0NTAsIDQ0NSwgNjU3LCA2NzAsIDY3NiwgNjg1LCA2ODksIDY5MywgNjk3LCA3MDEsIDcwNCwgNzA3LCA3MTUsIDcxOSwgNzk4LCA4MTUsIDYzNCwgNzIzLCA3NjIsIDk5NiwgNjM0LCA3MjgsIDk2OSwgNzMwLCA3MzUsIDkwOCwgNjM0LCA3NDEsIDY3OSwgODg5LCA1MTEsIDc0NywgNjM0LCA3NTAsIDc1NSwgNDk5LCA2NjYsIDQ5OSwgNTAxLCA3NTksIDc3MiwgNzc2LCA3ODAsIDYzNCwgNzg3LCA3ODQsIDc5NywgODAyLCA4MDksIDgwOCwgNDI3LCA4MTQsIDEwMDYsIDUxNywgNjM0LCA1MTksIDg1MywgNjM0LCA4MTMsIDg1MCwgNzkzLCA2MzQsIDgxOSwgODI2LCA4MzMsIDgzMiwgODM3LCA4NDMsIDg0NywgODU3LCA4NjEsIDg2MywgODY3LCA4NzEsIDg3NSwgODc5LCA4ODMsIDY0MywgODg3LCA1MzksIDk4MCwgOTc5LCA2MzQsIDg5MywgOTQ0LCA2MzQsIDkwMCwgODk2LCA2MzQsIDkwNywgOTMzLCA1MDYsIDkxMiwgOTE3LCA4MjgsIDQzMywgNjM2LCA2MzUsIDU1NCwgOTYxLCA5MjMsIDkzMCwgOTI3LCA5MzcsIDk0MSwgNjM0LCA2MzQsIDYzNCwgOTc0LCA5NDgsIDk1MiwgOTg1LCA5MTMsIDk2OCwgOTY3LCA3NDMsIDYzNCwgOTczLCA4MzksIDYzNCwgOTc4LCA1OTksIDYzNCwgOTg0LCA5ODksIDc2NSwgNDQ0LCA5OTUsIDEwMDAsIDYzNCwgMTAwMywgNzkwLCA5NTUsIDEwMTIsIDY4MSwgNjM0LCA2MzQsIDYzNCwgNjM0LCA2MzQsIDQxNCwgMTAxNiwgMTAyMCwgMTAyNCwgMTA4NSwgMTAyNywgMTA5MCwgMTA5MCwgMTA0NiwgMTA4MCwgMTEzNywgMTEwOCwgMTIxNSwgMTA0OSwgMTAzMiwgMTAzOSwgMTA4NSwgMTA4NSwgMTA4NSwgMTA4NSwgMTA1OCwgMTA2MiwgMTA2OCwgMTA4NSwgMTA4NiwgMTA5MCwgMTA5MCwgMTA5MSwgMTA3MiwgMTA2NCwgMTEwNywgMTA5MCwgMTA5MCwgMTA5MCwgMTExOCwgMTEyMywgMTEzOCwgMTA3OCwgMTA3NCwgMTA4NCwgMTA4NSwgMTA4NSwgMTA4NSwgMTA4NywgMTA5MCwgMTA2MiwgMTA1MiwgMTA2MCwgMTExNCwgMTA2MiwgMTEwNCwgMTA4NSwgMTA4NSwgMTA5MCwgMTA5MCwgMTAyOCwgMTEyMiwgMTA2MywgMTEyOCwgMTEzOSwgMTEyNywgMTE1OCwgMTA4NSwgMTA4NSwgMTE1MSwgMTA5MCwgMTA5MCwgMTA5MCwgMTA5NSwgMTA5MCwgMTEzMiwgMTA3MywgMTEzNiwgMTE0MywgMTA2MSwgMTE1MCwgMTA4NSwgMTE1NSwgMTA5OCwgMTEwMSwgMTE0NiwgMTE2MiwgMTE2OSwgMTEwMSwgMTE4NSwgMTE1MSwgMTA5MCwgMTExMCwgMTE3MywgMTA1NCwgMTA4NywgMTEwOSwgMTE3NywgMTE2NSwgMTA4OSwgMTIwNCwgMTE4NCwgMTEwNywgMTE4OSwgMTE5MywgMTA4OCwgMTE5NywgMTE4MCwgMTIwMSwgMTIwOCwgMTA0MiwgMTIxMiwgMTIxOSwgMTIyMywgMTIyNywgMTIzMSwgMTIzNSwgMTI0NSwgMTc3NywgMTUyNywgMTY4NiwgMTY4NiwgMTIzOCwgMTY4NiwgMTI1NCwgMTY4NiwgMTY4NiwgMTY4NiwgMTI5NCwgMTY2OSwgMTY4NiwgMTY4NiwgMTY4NiwgMTMyMiwgMTYyNSwgMTUzNCwgMTI2OCwgMTYyNCwgMTI3NSwgMTI4MSwgMTQ0MywgMTI5MiwgMTMwMCwgMTY4NiwgMTY4NiwgMTY4NiwgMTM1MCwgMTgyNiwgMTMwNiwgMTY4NiwgMTY4NiwgMTI0MCwgMjAzMiwgMTMxNywgMTMyMSwgMTY4NiwgMTY4NiwgMTI1MywgMTY4NiwgMTMyNiwgMTY4NiwgMTY4NiwgMTY4NiwgMTQxOCwgMTcwOSwgMTQ0NiwgMTY4NiwgMTY4NiwgMTY4NiwgMTQ5MiwgMTY4NiwgMTI5NSwgMTQ0NywgMTY4NiwgMTY4NiwgMTI1OCwgMTY4NiwgMTczNiwgMTY4NiwgMTY4NiwgMTUyMCwgMTM1NSwgMTY4NiwgMTI4OCwgMTM0OCwgMTM2MSwgMTY4NiwgMTM1OSwgMTY4NiwgMTM2NCwgMTQ5OCwgMTM2OCwgMTMwMiwgMTM2MiwgMTM4MSwgMTM4OSwgMTM5NSwgMTQ4NiwgMTY4NiwgMTM3MSwgMTM3NywgMTM3MCwgMTY4NiwgMTM3NSwgMTM4MiwgMTM4NCwgMTQwMiwgMTQwOCwgMTM4NSwgMTM4MywgMTYxOSwgMTQxMywgMTQyMywgMTQyOCwgMTQzMywgMTY4NiwgMTY4NiwgMTI3MCwgMTY4NiwgMTMzOCwgMTY4NiwgMTQ0MCwgMTY4NiwgMTY4NiwgMTY4NiwgMTQ5OSwgMTQ2NSwgMTY4NiwgMTY4NiwgMTY4NiwgMTYzOSwgMTQ3MywgMTg4NCwgMTY4NiwgMTY4NiwgMTI5MywgMTg2NCwgMTY4NiwgMTY4NiwgMTI5NiwgMTMyMSwgMTQ4MywgMTY4NiwgMTY4NiwgMTY4NiwgMTY0NiwgMTY4NiwgMTc0OCwgMTQ5NiwgMTY4NiwgMTQxOCwgMTY3NSwgMTY4NiwgMTQxOCwgMTcwMiwgMTY4NiwgMTQxOCwgMTk4MSwgMTY4NiwgMTQyOSwgMTQwOSwgMTQyNywgMTUwNCwgMTY5MiwgMTY4NiwgMTY4NiwgMTMxMywgMTQ0OCwgMTY1MSwgMTUwOCwgMTY4NiwgMTY4NiwgMTM0MCwgMTY4NiwgMTkwMywgMTY4NiwgMTY4NiwgMTQzNSwgMTUxMywgMTY4NiwgMTI4MywgMTI4NywgMTUxOSwgMTY4NiwgMTUyNCwgMTM2MywgMTU2OCwgMTkzOCwgMTUzOSwgMTU2NiwgMTU3OSwgMTQ3OSwgMTUzMywgMTUzOCwgMTU1MywgMTU0NCwgMTU1MiwgMTU1NywgMTU2MywgMTU3NCwgMTU1NywgMTU4MywgMTU4OSwgMTU5MCwgMTc1OSwgMTU5NCwgMTYwMywgMTYwNywgMTYxMSwgMTY4NiwgMTQzNiwgMTUxNCwgMTY4NiwgMTQzNCwgMTY1NiwgMTY4NiwgMTQzNCwgMTY4MCwgMTY4NiwgMTQ1MywgMTY4NiwgMTY4NiwgMTY4NiwgMTU1OSwgMTYxNywgMTY4NiwgMTc3MCwgMTQxOCwgMTYyMywgMTc2OSwgMTYyOSwgMTY4NiwgMTUxNSwgMTMzNSwgMTY4NiwgMTI4NSwgMTY4NiwgMTY3MSwgMTkyMSwgMTY1MCwgMTY4NiwgMTY4NiwgMTM0NCwgMTMwOCwgMTY2NiwgMTY4NiwgMTY4NiwgMTY4NiwgMTY1OSwgMTY4NSwgMTY4NiwgMTY4NiwgMTY4NiwgMTY4NiwgMTI0MSwgMTY4NiwgMTY4NiwgMTg0NCwgMTY5MSwgMTY4NiwgMTYzMCwgMTk3NywgMTk3MCwgMTM2MiwgMTY4NiwgMTY4NiwgMTY4NiwgMTY5MywgMTY5OCwgMTY4NiwgMTY4NiwgMTY4NiwgMTY5NywgMTY4NiwgMTc2NCwgMTcxNSwgMTY4NiwgMTYzNCwgMTYzOCwgMTY4NiwgMTU5OSwgMTU4NSwgMTY4NiwgMTI3MSwgMTY4NiwgMTI2OSwgMTY4NiwgMTcyMSwgMTY4NiwgMTY4NiwgMTM1NCwgMTY4NiwgMTgwMSwgMTY4NiwgMTc5OSwgMTY4NiwgMTY0MCwgMTY4NiwgMTY4NiwgMTQ2MSwgMTY4NiwgMTY4NiwgMTczMiwgMTY4NiwgMTk0NCwgMTY4NiwgMTc0MCwgMTY4NiwgMTc0NiwgMTQxNSwgMTM5NiwgMTY4NiwgMTU5OCwgMTU0NywgMTQxNywgMTU5NywgMTQxNiwgMTU3NywgMTU0NiwgMTM5NywgMTU3NywgMTU0NywgMTU0OCwgMTU3MCwgMTM5OCwgMTc1MywgMTY4NiwgMTY1MiwgMTUwOSwgMTY4NiwgMTY4NiwgMTY4NiwgMTc1NywgMTY4NiwgMTQxOSwgMTY4NiwgMTc2MywgMTQxOCwgMTc2OCwgMTc4MSwgMTY4NiwgMTY4NiwgMTY4NiwgMTcwNSwgMTY4NiwgMjA0OCwgMTc5MiwgMTY4NiwgMTY4NiwgMTY4NiwgMTczNSwgMTY4NiwgMTc5NywgMTY4NiwgMTY4NiwgMTQwNCwgMTY4NiwgMTYzOSwgMTgxNSwgMTY4NiwgMTY4NiwgMTQxOCwgMjAxNywgMTgyMCwgMTY4NiwgMTY4NiwgMTgwMywgMTY4NiwgMTY4NiwgMTY4NiwgMTczNiwgMTQ4OSwgMTY4NiwgMTY4NiwgMTgyNSwgMTMzOCwgMTI2MCwgMTI2MywgMTY4NiwgMTY4NiwgMTc4NSwgMTY4NiwgMTY4NiwgMTcyOCwgMTY4NiwgMTY4NiwgMTc0OSwgMTQ5NywgMTgzMCwgMTgzMCwgMTI2MiwgMTI0OCwgMTI2MSwgMTMyOSwgMTI2MCwgMTI2NCwgMTMyOSwgMTI0OCwgMTI0OSwgMTI1OSwgMTU0MCwgMTg0OSwgMTg0MiwgMTY4NiwgMTY4NiwgMTgzNSwgMTY4NiwgMTY4NiwgMTgxNiwgMTY4NiwgMTY4NiwgMTgzMSwgMTg4MiwgMTg0OCwgMTY4NiwgMTY4NiwgMTY4NiwgMTc3NCwgMjA3MSwgMTg1NCwgMTY4NiwgMTY4NiwgMTQ2OSwgMTg4NCwgMTY4NiwgMTgyMSwgMTg1OSwgMTY4NiwgMTY4NiwgMTM1MCwgMTg4MywgMTY4NiwgMTY4NiwgMTY4NiwgMTc4MSwgMTM5MSwgMTg3NSwgMTY4NiwgMTY4NiwgMTYxMywgMTY0NCwgMTY4NiwgMTY4NiwgMTg4OSwgMTY4NiwgMTY4NiwgMTY2MiwgMTg4NCwgMTY4NiwgMTg4NSwgMTg5MCwgMTY4NiwgMTY4NiwgMTY4NiwgMTg5NCwgMTY4NiwgMTY4NiwgMTY3OCwgMTY4NiwgMTkwNywgMTY4NiwgMTY4NiwgMTUyOSwgMTkxNCwgMTY4NiwgMTgzOCwgMTY4NiwgMTY4NiwgMTg4MSwgMTY4NiwgMTY4NiwgMTg3MiwgMTg3NiwgMTgzNiwgMTkxOSwgMTY4NiwgMTgzNywgMTY5MiwgMTkxMCwgMTY4NiwgMTkyNSwgMTkyOCwgMTc0MiwgMTY4NiwgMTgxMSwgMTgxMSwgMTkzMCwgMTgxMCwgMTkyOSwgMTkzNSwgMTkyOCwgMTkwMCwgMTk0MiwgMTg2NywgMTg2OCwgMTkzMSwgMTAzNSwgMTc4OCwgMTk0OCwgMTk1MiwgMTk1NiwgMTk2MCwgMTk2NCwgMTY4NiwgMTk3NiwgMTY4NiwgMTY4NiwgMTY4NiwgMjA2NSwgMTY4NiwgMTk5MiwgMjAzNywgMTY4NiwgMTY4NiwgMTk5OCwgMjAwOSwgMTk3MiwgMjAwMiwgMTY4NiwgMTY4NiwgMTY4NiwgMjA3NywgMTMwMCwgMjAyMywgMTY4NiwgMTY4NiwgMTY4NiwgMTgwNywgMjAzMSwgMTY4NiwgMTY4NiwgMTY4NiwgMTg2MCwgMTUwMCwgMjAzMiwgMTY4NiwgMTY4NiwgMTY4NiwgMjA4MywgMTY4NiwgMjAzNiwgMTY4NiwgMTI3NywgMTI3NiwgMjA0MiwgMTg3NywgMTY4NiwgMTY4NiwgMjA0MSwgMTY4NiwgMTY4NiwgMjAyNywgMjAzNywgMjAxMiwgMTY4NiwgMjAxMiwgMTg1NSwgMTg1MCwgMTY4NiwgMjA0NiwgMTY4NiwgMTY4NiwgMjA1NCwgMTk5NiwgMTY4NiwgMTg5NywgMTMwOSwgMjA1OSwgMjA1MiwgMTY4NiwgMjA1OCwgMTY4NiwgMTY4NiwgMjA4MSwgMTY4NiwgMTcxNywgMTQ3NywgMTY4NiwgMTMzMSwgMTY4NiwgMTY4NiwgMTY4NywgMTY4NiwgMTg2MCwgMTY4MSwgMTY4NiwgMTY4NiwgMTY4NiwgMTk2NiwgMTcyNCwgMTY4NiwgMTY4NiwgMTY4NiwgMTk4NCwgMjAxNSwgMTY4NiwgMTY4NiwgMTY4NiwgMTk4OCwgMTY4NiwgMjA2MywgMTY4NiwgMTY4NiwgMTY4NiwgMjAwNSwgMTY4NiwgMTcyNywgMTY4NiwgMTY4NiwgMTcxMSwgMTQ1NywgMjA2OSwgMTY4NiwgMTY4NiwgMTY4NiwgMjAxOSwgMjA3NSwgMTY4NiwgMTY4NiwgMTkxNSwgMTY4NiwgMTY4NiwgMTc5MywgMTg3NCwgMTY4NiwgMTY4NiwgMTQ5MSwgMTM2MiwgMTQ0OSwgMTY4NiwgMTY4NiwgMTQ2MCwgMjA5OCwgMjA4NywgMjA5MSwgMjA5NSwgMjE4NCwgMjEwMiwgMjExMywgMjc4MCwgMjExNywgMjEzNCwgMjE0MiwgMjI4MSwgMjE0NiwgMjE0NiwgMjE0NiwgMjMwNCwgMjI5NiwgMjE4MSwgMjYzOSwgMjU5MSwgMjg3MiwgMjU5MiwgMjg3MywgMjMxMywgMjE5NSwgMjIwMCwgMjI4MSwgMjE0NiwgMjI3MywgMjIyNiwgMjIwNCwgMjE1MiwgMjIxOSwgMjI3NiwgMjE2NywgMjE3NywgMjI3NiwgMjIzNSwgMjI3NiwgMjI3NiwgMjIzMCwgMjI4MSwgMjI3NiwgMjI5NiwgMjI3NiwgMjI5MywgMjI3NiwgMjI3NiwgMjI3NiwgMjI3NiwgMjIzNCwgMjI3NiwgMjMxMSwgMjMxNCwgMjIxMCwgMjE5OSwgMjIxNywgMjIyMiwgMjI3NiwgMjI3NiwgMjI3NiwgMjI0MCwgMjI3NiwgMjI5NCwgMjI3NiwgMjI3NiwgMjE3MywgMjI3NiwgMjE5OCwgMjI4MSwgMjI4MSwgMjI4MSwgMjI4MSwgMjI4MiwgMjE0NiwgMjE0NiwgMjE0NiwgMjE0NiwgMjIwNSwgMjE0NiwgMjIwNCwgMjI0OCwgMjI3NiwgMjIzNSwgMjI3NiwgMjI5NywgMjI3NiwgMjI3NiwgMjI3NiwgMjI3NywgMjI1NiwgMjI4MSwgMjI4MywgMjE0NiwgMjE0NiwgMjE0NiwgMjI3NSwgMjI3NiwgMjI5NSwgMjI3NiwgMjI3NiwgMjI5MywgMjE0NiwgMjMwNCwgMjI2NCwgMjI2OSwgMjIyMSwgMjI3NiwgMjI3NiwgMjI3NiwgMjI5MywgMjI5NSwgMjI3NiwgMjI3NiwgMjI3NiwgMjI5NSwgMjI2MywgMjIwNSwgMjI2OCwgMjIyMCwgMjE3MiwgMjI3NiwgMjI3NiwgMjI3NiwgMjI5NiwgMjI3NiwgMjI3NiwgMjI5NiwgMjI5NCwgMjI3NiwgMjI3NiwgMjI3OCwgMjI4MSwgMjI4MSwgMjI4MCwgMjI4MSwgMjI4MSwgMjI4MSwgMjI4MywgMjIwNiwgMjIyMywgMjI3NiwgMjI3NiwgMjI3OSwgMjI4MSwgMjI4MSwgMjE0NiwgMjI3MywgMjI3NiwgMjI3NiwgMjI4MSwgMjI4MSwgMjI4MSwgMjI3NiwgMjI5MiwgMjI3NiwgMjI5OCwgMjIyNSwgMjI3NiwgMjI5OCwgMjE2OSwgMjIyNCwgMjI5MiwgMjI5OCwgMjE3MSwgMjIyOSwgMjI4MSwgMjI4MSwgMjE3MSwgMjIzNiwgMjI4MSwgMjI4MSwgMjI4MSwgMjE0NiwgMjI3NSwgMjIyNSwgMjI5MiwgMjI5OSwgMjI3NiwgMjIyOSwgMjI4MSwgMjE0NiwgMjI3NiwgMjI5MCwgMjI5NywgMjI4MywgMjE0NiwgMjE0NiwgMjI3NCwgMjIyNCwgMjIyNywgMjI5OCwgMjIyNSwgMjI5NywgMjI3NiwgMjIzMCwgMjE3MCwgMjIzMCwgMjI4MiwgMjE0NiwgMjE0NywgMjE1MSwgMjE1NiwgMjI4OCwgMjI3NiwgMjIzMCwgMjMwMywgMjMwOCwgMjIzNiwgMjI4NCwgMjIyOCwgMjMxOCwgMjMxOCwgMjMxOCwgMjMyNiwgMjMzNSwgMjMzOSwgMjM0MywgMjM0OSwgMjQxNiwgMjY5MywgMjM1NywgMjU5MiwgMjEwOSwgMjU5MiwgMjU5MiwgMjE2MiwgMjk0MywgMjgyMywgMjY0NiwgMjU5MiwgMjM2MSwgMjU5MiwgMjEyMiwgMjU5MiwgMjU5MiwgMjEyMiwgMjQ3MCwgMjU5MiwgMjU5MiwgMjU5MiwgMjEwOSwgMjEwNywgMjU5MiwgMjU5MiwgMjU5MiwgMjEyMywgMjU5MiwgMjU5MiwgMjU5MiwgMjEyNSwgMjU5MiwgMjQxMywgMjU5MiwgMjU5MiwgMjU5MiwgMjEyNywgMjU5MiwgMjU5MiwgMjQxNCwgMjU5MiwgMjU5MiwgMjU5MiwgMjEzMCwgMjk1MiwgMjU5MiwgMjU5NCwgMjU5MiwgMjU5MiwgMjIxMiwgMjYwOSwgMjI1MiwgMjU5MiwgMjU5MiwgMjU5MiwgMjQ0NiwgMjQzNCwgMjU5MiwgMjU5MiwgMjU5MiwgMjIxMiwgMjQ0NiwgMjQ1MCwgMjQ1NiwgMjQzMSwgMjQzNSwgMjU5MiwgMjU5MiwgMjI0MywgMjQ3OCwgMjQ0OCwgMjQzOSwgMjk0NiwgMjU5MiwgMjU5MiwgMjU5MiwgMjM2OCwgMjgwOSwgMjgxMywgMjQ1MCwgMjQ0MSwgMjIxMiwgMjgxMiwgMjQ0OSwgMjQ0MCwgMjk0NywgMjU5MiwgMjU5MiwgMjU5MiwgMjM0NSwgMjQ1MSwgMjQ1NywgMjk0OCwgMjU5MiwgMjEyNCwgMjU5MiwgMjU5MiwgMjY1MCwgMjgyMywgMjQ0OSwgMjQ1NSwgMjk0NiwgMjU5MiwgMjEyOCwgMjU5MiwgMjU5MiwgMjY0OSwgMjk1MiwgMjU5MiwgMjgxMCwgMjQ0OCwgMjQ2MSwgMjk5MSwgMjQ2NywgMjU5MiwgMjU5MiwgMjMyOSwgMjgxNywgMjQ3NCwgMjk5MCwgMjQ2NiwgMjU5MiwgMjU5MiwgMjM3MywgMjQ0NywgMjk5MiwgMjQ2OSwgMjU5MiwgMjU5MiwgMjU5MiwgMjM3MywgMjQ0NywgMjQ3NywgMjQ2OCwgMjU5MiwgMjU5MiwgMjM1MywgMjQ2OSwgMjU5MiwgMjQ5NSwgMjU5MiwgMjU5MiwgMjQxNSwgMjQ4MywgMjU5MiwgMjQxNSwgMjQ5NiwgMjU5MiwgMjU5MiwgMjM1MiwgMjU5MiwgMjU5MiwgMjM1MiwgMjM1MiwgMjQ2OSwgMjU5MiwgMjU5MiwgMjM2MywgMjMzMSwgMjQ5NCwgMjU5MiwgMjU5MiwgMjU5MiwgMjM3NSwgMjU5MiwgMjM3NSwgMjQxNSwgMjUwNCwgMjU5MiwgMjU5MiwgMjM2NywgMjM3MiwgMjUwMywgMjU5MiwgMjU5MiwgMjU5MiwgMjM4OSwgMjQxOCwgMjQxNSwgMjU5MiwgMjU5MiwgMjM3MywgMjU5MiwgMjU5MiwgMjU5MiwgMjU5MywgMjczMiwgMjQxNywgMjQxNSwgMjU5MiwgMjQxNywgMjUyMCwgMjU5MiwgMjU5MiwgMjU5MiwgMjM5MCwgMjUyMSwgMjUyMSwgMjU5MiwgMjU5MiwgMjU5MiwgMjQwMSwgMjU5OSwgMjU4NSwgMjUyNiwgMjUzMSwgMjEyMCwgMjU5MiwgMjIxMiwgMjQyNiwgMjQ1MCwgMjQ2MywgMjk0OCwgMjU5MiwgMjU5MiwgMjU5MiwgMjIxMywgMjM4OSwgMjUyNywgMjUzMiwgMjEyMSwgMjU0MiwgMjU1MSwgMjEwNSwgMjU5MiwgMjIxMywgMjU5MiwgMjU5MiwgMjU5MiwgMjU1OCwgMjUzOCwgMjU0NCwgMjU1MywgMjU1NywgMjUzNywgMjU0MywgMjU1MiwgMjQyMSwgMjU3MiwgMjU3NiwgMjU0NiwgMjU0MywgMjU0NywgMjU5MiwgMjU5MiwgMjM3MywgMjYxNSwgMjU3NSwgMjU0NSwgMjEwNSwgMjU5MiwgMjI0NCwgMjQ3OSwgMjU5MiwgMjEyOSwgMjU5MiwgMjU5MiwgMjYyOCwgMjY5MCwgMjQ2OSwgMjU2MiwgMjU2NiwgMjU5MiwgMjU5MiwgMjU5MiwgMjQxNSwgMjkyOCwgMjkzNCwgMjQwMSwgMjU3MCwgMjU3NCwgMjU2NCwgMjU3MiwgMjU4NSwgMjU5MCwgMjU5MiwgMjU5MiwgMjU4NSwgMjk2NSwgMjU5MiwgMjU5MiwgMjU5MiwgMjQ0NSwgMjI1MSwgMjU5MiwgMjU5MiwgMjU5MiwgMjQ3NCwgMjU5MiwgMjYwOSwgMjg5MiwgMjU5MiwgMjM2MiwgMjU5MiwgMjU5MiwgMjEzOCwgMjg1MSwgMjE1OSwgMjU5MiwgMjU5MiwgMjU5MiwgMjUwOSwgMjg4OCwgMjg5MiwgMjU5MiwgMjU5MiwgMjU5MiwgMjQ5MCwgMjQxOCwgMjg5MSwgMjU5MiwgMjU5MiwgMjM3NiwgMjU5MiwgMjU5MiwgMjM3NCwgMjU5MiwgMjg4OSwgMjM4OCwgMjU5MiwgMjM3MywgMjM3MywgMjg5MCwgMjU5MiwgMjU5MiwgMjM4NywgMjU5MiwgMjg4NywgMjUwNSwgMjg5MiwgMjU5MiwgMjM3MywgMjYxMCwgMjM4OCwgMjU5MiwgMjU5MiwgMjM3NiwgMjM3MywgMjU5MiwgMjg4NywgMjg5MSwgMjU5MiwgMjM3NCwgMjU5MiwgMjU5MiwgMjYwOCwgMjE1OSwgMjYxNCwgMjYyMCwgMjU5MiwgMjU5MiwgMjM5NCwgMjU5NCwgMjg4NywgMjM5OSwgMjU5MiwgMjg4NywgMjM5NywgMjUwOCwgMjM3NCwgMjUwNywgMjU5MiwgMjM3NSwgMjU5MiwgMjU5MiwgMjU5MiwgMjU5NSwgMjUwOCwgMjUwNiwgMjU5MiwgMjUwNiwgMjUwNSwgMjUwNSwgMjU5MiwgMjUwNywgMjYzNywgMjUwNSwgMjU5MiwgMjU5MiwgMjQwMSwgMjY2MSwgMjU5MiwgMjY0MywgMjU5MiwgMjU5MiwgMjQxNywgMjU5MiwgMjY1NSwgMjU5MiwgMjU5MiwgMjU5MiwgMjUxMCwgMjQxNCwgMjY1NiwgMjU5MiwgMjU5MiwgMjU5MiwgMjUxNiwgMjU5MiwgMjU5MywgMjY2MCwgMjY2NSwgMjg4MCwgMjU5MiwgMjU5MiwgMjU5MiwgMjUyMiwgMjc2NywgMjY2NiwgMjg4MSwgMjU5MiwgMjU5MiwgMjQyMCwgMjU3MSwgMjY5NiwgMjU5MiwgMjU5MiwgMjU5MiwgMjU4MCwgMjU3MiwgMjY4NiwgMjYzMiwgMjY5OCwgMjU5MiwgMjM4MywgMjUxNCwgMjU5MiwgMjE2MywgMjkzMiwgMjQ2NSwgMjY4NSwgMjYzMSwgMjY5NywgMjU5MiwgMjM4OCwgMjU5MiwgMjU5MiwgMjIxMiwgMjYwNCwgMjY3MSwgMjYzMiwgMjY3OCwgMjU5MiwgMjQwMSwgMjQwNSwgMjQwOSwgMjU5MiwgMjU5MiwgMjU5MiwgMjY3OSwgMjU5MiwgMjU5MiwgMjU5MiwgMjU5MiwgMjEwOCwgMjY3NywgMjU5MSwgMjU5MiwgMjU5MiwgMjU5MiwgMjQxOSwgMjU5MiwgMjY4MywgMjE4NywgMjE5MSwgMjQ2OSwgMjY3MSwgMjE4OSwgMjQ2NywgMjU5MiwgMjQwMSwgMjYyOSwgMjYzMywgMjcwMiwgMjQ2OCwgMjU5MiwgMjU5MiwgMjQyMSwgMjUzNiwgMjcwMywgMjQ2OSwgMjU5MiwgMjU5MiwgMjQyMiwgMjU3MywgMjU5MywgMjY3MiwgMjQ2NywgMjU5MiwgMjQwMiwgMjQwNiwgMjU5MiwgMjQwMiwgMjk3OSwgMjU5MiwgMjU5MiwgMjYyNiwgMjY3MywgMjQ2NywgMjU5MiwgMjQ0NiwgMjI1OSwgMjk0NywgMjU5MiwgMjM3NywgMjcwOSwgMjU5MiwgMjU5MiwgMjUyMiwgMjg2MiwgMjcxMywgMjQ2OCwgMjU5MiwgMjU5MiwgMjU4MSwgMjU3MiwgMjU2MiwgMjM3NCwgMjM3NCwgMjU5MiwgMjM3NiwgMjcyMSwgMjcyNCwgMjU5MiwgMjU5MiwgMjYyNCwgMjM3MywgMjczMSwgMjU5MiwgMjU5MiwgMjU5MiwgMjYyNiwgMjczMiwgMjU5MiwgMjU5MiwgMjU5MiwgMjc1NSwgMjY1NiwgMjcyNiwgMjczNiwgMjc0MSwgMjU5MiwgMjQ4NiwgMjU5MywgMjM4MSwgMjU5MiwgMjcyNywgMjczNywgMjc0MiwgMjcxNSwgMjc0NywgMjc1MywgMjU5MiwgMjQ5OCwgMjQ2OSwgMjg3MywgMjc0MywgMjU5MiwgMjU5MiwgMjU5MiwgMjc5MSwgMjc1OSwgMjc2MywgMjU5MiwgMjU5MiwgMjYyNywgMjcwNCwgMjU5MiwgMjU5MiwgMjUyMiwgMjc4OSwgMjU5MywgMjc2MSwgMjc1MywgMjU5MiwgMjQ5OCwgMjg2MywgMjU5MiwgMjU5MiwgMjc2NywgMjU5MiwgMjU5MiwgMjU5MiwgMjc5MiwgMjc4OSwgMjU5MiwgMjU5MiwgMjU5MiwgMjgwMywgMjEyNiwgMjU5MiwgMjU5MiwgMjU5MiwgMjgxMSwgMjEyMiwgMjU5MiwgMjU5MiwgMjU5MiwgMjgzNCwgMjc3NywgMjU5MiwgMjU5MiwgMjU5MiwgMjg0OCwgMjkzNiwgMjU5MSwgMjQ4OSwgMjc5NywgMjU5MiwgMjU5MiwgMjY3MCwgMjYzMSwgMjQ5MCwgMjc5OCwgMjU5MiwgMjU5MiwgMjU5MiwgMjk2MywgMjgwNywgMjU5MiwgMjU5MiwgMjU5MiwgMjk2NSwgMjgzOCwgMjU5MiwgMjU5MiwgMjU5MiwgMjk3NSwgMjMzMCwgMjgxOCwgMjgyOSwgMjU5MiwgMjQ5OCwgMjkzOSwgMjU5MiwgMjQ5OCwgMjU5MiwgMjc5MSwgMjMzMSwgMjgxOSwgMjgzMCwgMjU5MiwgMjU5MiwgMjU5MiwgMjk4MiwgMjgzNCwgMjgxNywgMjgyOCwgMjEwNiwgMjU5MiwgMjU5MiwgMjU5MiwgMjQwNSwgMjQwNSwgMjgxNywgMjgyOCwgMjU5MiwgMjU5MiwgMjQxNSwgMjg0OSwgMjg0MiwgMjU5MiwgMjUyMiwgMjc3MywgMjU5MiwgMjUyMiwgMjg2OCwgMjU5MiwgMjU4MCwgMjYwMCwgMjU4NiwgMjEzNywgMjg1MCwgMjg0MywgMjU5MiwgMjU5MiwgMjg1NSwgMjkzNywgMjg0NCwgMjU5MiwgMjU5MiwgMjU5MiwgMjk4NywgMjkzNiwgMjU5MSwgMjU5MiwgMjU5MiwgMjY4NCwgMjYzMCwgMjU5MiwgMjg1NiwgMjkzOCwgMjU5MiwgMjU5MiwgMjg2MCwgMjkzOSwgMjU5MiwgMjU5MiwgMjg3MiwgMjU5MiwgMjg2MSwgMjU5MSwgMjU5MiwgMjU5MiwgMjg4NywgMjYxNiwgMjU5MiwgMjg2NywgMjU5MiwgMjU5MiwgMjcwOCwgMjU5MiwgMjQ5OCwgMjQ2OSwgMjQ5OCwgMjQ5NywgMjc4NSwgMjc3MywgMjQ5OSwgMjc4MywgMjc3MCwgMjg3NywgMjg3NywgMjg3NywgMjc3MiwgMjU5MiwgMjU5MiwgMjM0NSwgMjg4NSwgMjU5MiwgMjU5MiwgMjU5MiwgMjcxNSwgMjc2MiwgMjUxNSwgMjg5NiwgMjU5MiwgMjU5MiwgMjcxNSwgMjkxNywgMjUxNiwgMjg5NywgMjU5MiwgMjU5MiwgMjU5MiwgMjkwMSwgMjkwNiwgMjkxMSwgMjU5MiwgMjU5MiwgMjk1NiwgMjk2MCwgMjcxNSwgMjkwMiwgMjkwNywgMjkxMiwgMjU5MywgMjkxNiwgMjkyMCwgMjgyMCwgMjkyMiwgMjgyMiwgMjU5MiwgMjU5MiwgMjcxNSwgMjkyNywgMjkyMSwgMjgyMSwgMjEwNiwgMjU5MiwgMjU5MiwgMjk3NCwgMjQwOCwgMjMyMSwgMjgyMSwgMjEwNiwgMjU5MiwgMjU5MiwgMjk4MywgMjU5MiwgMjU5MywgMjQwNCwgMjQwOCwgMjU5MiwgMjU5MiwgMjcxNywgMjc0OSwgMjcxNiwgMjkyOCwgMjMyMiwgMjgyMiwgMjU5MywgMjkyNiwgMjkxOSwgMjgyMCwgMjkzNCwgMjgyMywgMjU5MiwgMjU5MiwgMjU5MiwgMjY1MSwgMjgyNCwgMjU5MiwgMjU5MiwgMjU5MiwgMjEzMCwgMjk1MiwgMjU5MiwgMjU5MiwgMjU5MiwgMjU5MiwgMjk2NCwgMjU5MiwgMjU5MiwgMjcxNiwgMjc0OCwgMjU5MiwgMjk2OSwgMjU5MiwgMjU5MiwgMjcxNiwgMjkxOCwgMjM2OCwgMjk3MCwgMjU5MiwgMjU5MiwgMjU5MiwgMjQwMywgMjQwNywgMjU5MiwgMjU5MiwgMjc4NywgMjIxMSwgMjQwNCwgMjQwOSwgMjU5MiwgMjU5MiwgMjgwMiwgMjgzNywgMjk4NywgMjU5MiwgMjU5MiwgMjU5MiwgMjgwOSwgMjQyNywgMjU5MiwgMjc5MywgMjU5MiwgMjU5MiwgMjgwOSwgMjQ0NywgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgNTM5NzU0NDk2LCA1NDIzNzU5MzYsIDQwMjY1MzE4NCwgNTU0NDM0NTYwLCA1NzE3MzYwNjQsIDU0NTUyMTg1NiwgMjY4NDUxODQwLCAzMzU1NDQzMjAsIDI2ODY5MzYzMCwgNTEyLCAyMDQ4LCAyNTYsIDEwMjQsIDAsIDEwMjQsIDAsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDAsIDAsIDAsIDgzODg2MDgsIDAsIDAsIDEwNzM3NDE4MjQsIDEwNzM3NDE4MjQsIDAsIDB4ODAwMDAwMDAsIDUzNzEzMzA1NiwgNDE5NDMwNCwgMTA0ODU3NiwgMjY4NDM1NDU2LCAtMTA3Mzc0MTgyNCwgMCwgMCwgMCwgMTA0ODU3NiwgMCwgMCwgMCwgMTU3Mjg2NCwgMCwgMCwgMCwgNDE5NDMwNCwgMCwgMTM0MjE3NzI4LCAxNjc3NzIxNiwgMCwgMCwgMzIsIDY0LCA5ODMwNCwgMCwgMzM1NTQ0MzIsIDgzODg2MDgsIDE5MiwgNjcxMDg4NjQsIDY3MTA4ODY0LCA2NzEwODg2NCwgNjcxMDg4NjQsIDE2LCAzMiwgNCwgMCwgODE5MiwgMTk2NjA4LCAxOTY2MDgsIDIyOTM3NiwgODAsIDQwOTYsIDUyNDI4OCwgODM4ODYwOCwgMCwgMCwgMzIsIDEyOCwgMjU2LCAyNDU3NiwgMjQ2MDAsIDI0NTc2LCAyNDU3NiwgMiwgMjQ1NzYsIDI0NTc2LCAyNDU3NiwgMjQ1ODQsIDI0NTkyLCAyNDU3NiwgMjQ1NzgsIDI0NTc2LCAyNDU3OCwgMjQ1NzYsIDI0NTc2LCAxNiwgNTEyLCAyMDQ4LCAyMDQ4LCAyNTYsIDQwOTYsIDMyNzY4LCAxMDQ4NTc2LCA0MTk0MzA0LCA2NzEwODg2NCwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDI2MjE0NCwgMTM0MjE3NzI4LCAwLCAxMjgsIDEyOCwgNjQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDY3MTA4ODY0LCAzMiwgMzIsIDQsIDQsIDQwOTYsIDI2MjE0NCwgMTM0MjE3NzI4LCAwLCAwLCAwLCAyLCAwLCA4MTkyLCAxMzEwNzIsIDEzMTA3MiwgNDA5NiwgNDA5NiwgNDA5NiwgNDA5NiwgMjQ1NzYsIDI0NTc2LCAyNDU3NiwgOCwgOCwgMjQ1NzYsIDI0NTc2LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAyNDU3NiwgMjQ1ODQsIDI0NTc2LCAyNDU3NiwgMjQ1NzYsIDE2Mzg0LCAyNDU3NiwgNTM2ODcwOTEyLCAyNjIxNDQsIDAsIDAsIDMyLCAyMDQ4LCA4MTkyLCA0LCA0MDk2LCA0MDk2LCA0MDk2LCA3ODY0MzIsIDgzODg2MDgsIDE2Nzc3MjE2LCAwLCAxMjgsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDMyNzY4LCA2NTUzNiwgMjA5NzE1MiwgMzIsIDMyLCAzMiwgMzIsIDQsIDQsIDQsIDQsIDQsIDQwOTYsIDY3MTA4ODY0LCA2NzEwODg2NCwgNjcxMDg4NjQsIDI0NTc2LCAyNDU3NiwgMjQ1NzYsIDI0NTc2LCAwLCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgNjcxMDg4NjQsIDY3MTA4ODY0LCA4LCA2NzEwODg2NCwgMjQ1NzYsIDgsIDgsIDgsIDI0NTc2LCAyNDU3NiwgMjQ1NzYsIDI0NTc4LCAyNDU3NiwgMjQ1NzYsIDI0NTc2LCAyLCAyLCAyLCAxNjM4NCwgNjcxMDg4NjQsIDY3MTA4ODY0LCA2NzEwODg2NCwgMzIsIDY3MTA4ODY0LCA4LCA4LCAyNDU3NiwgMjA0OCwgMHg4MDAwMDAwMCwgNTM2ODcwOTEyLCAyNjIxNDQsIDI2MjE0NCwgMjYyMTQ0LCA2NzEwODg2NCwgOCwgMjQ1NzYsIDE2Mzg0LCAzMjc2OCwgMTA0ODU3NiwgNDE5NDMwNCwgMjUxNjU4MjQsIDY3MTA4ODY0LCAyNDU3NiwgMzI3NzAsIDIsIDQsIDExMiwgNTEyLCA5ODMwNCwgNTI0Mjg4LCA1MCwgNDAyNjUzMTg2LCAxMDQ5MDkwLCAxMDQ5MDkxLCAxMCwgNjYsIDEwMDkyNTUxNCwgMTAsIDY2LCAxMjU4MjkxNCwgMCwgMCwgLTE2NzgxOTQyMDcsIC0xNjc4MTk0MjA3LCAtMTA0MTU0MzIxOCwgMCwgMzI3NjgsIDAsIDAsIDMyLCA2NTUzNiwgMjY4NDM1NDU2LCAxLCAxLCA1MTMsIDEwNDg1NzcsIDAsIDEyNTgyOTEyLCAwLCAwLCAwLCA0LCAxNzkyLCAwLCAwLCAwLCA3LCAyOTM2MDEyOCwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgMTIsIDEsIDEsIDAsIDAsIC02MDQxMDI3MjEsIC02MDQxMDI3MjEsIDQxOTQzMDQsIDgzODg2MDgsIDAsIDAsIDAsIDMxLCA5MjU2MDAsIDk5Nzk4MTMwNiwgOTk3OTgxMzA2LCA5OTc5ODEzMDYsIDAsIDAsIDIwNDgsIDgzODg2MDgsIDAsIDAsIDEsIDIsIDQsIDMyLCA2NCwgNTEyLCA4MTkyLCAwLCAwLCAwLCAyNDU3NjAsIDk5NzcyMDA2NCwgMCwgMCwgMCwgMzIsIDAsIDAsIDAsIDMsIDEyLCAxNiwgMzIsIDgsIDExMiwgMzA3MiwgMTIyODgsIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDEzMTA3MiwgNzg2NDMyMCwgMTY3NzcyMTYsIDk3MzA3ODUyOCwgMCwgMCwgNjU1MzYsIDEzMTA3MiwgMzY3MDAxNiwgNDE5NDMwNCwgMTY3NzcyMTYsIDMzNTU0NDMyLCAyLCA4LCA0OCwgMjA0OCwgODE5MiwgMTYzODQsIDMyNzY4LCA2NTUzNiwgMTMxMDcyLCA1MjQyODgsIDEzMTA3MiwgNTI0Mjg4LCAzMTQ1NzI4LCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDY1NTM2LCAxMzEwNzIsIDIwOTcxNTIsIDQxOTQzMDQsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDUzNjg3MDkxMiwgMCwgMCwgMCwgMTAyNCwgMCwgOCwgNDgsIDIwNDgsIDgxOTIsIDY1NTM2LCAzMzU1NDQzMiwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDY1NTM2LCAyNjg0MzU0NTYsIDUzNjg3MDkxMiwgMCwgMCwgMzI3NjgsIDAsIDAsIDEyNiwgNjIzMTA0LCA2NTAxMTcxMiwgMCwgMzIsIDY1NTM2LCA1MzY4NzA5MTIsIDAsIDAsIDY1NTM2LCA1MjQyODgsIDAsIDMyLCA2NTUzNiwgMCwgMCwgMCwgMjA0OCwgMCwgMCwgMCwgMTU0ODIsIDI0NTc2MCwgLTYwNDEwMjcyMSwgMCwgMCwgMCwgMTg5MTMsIDMzMDYyOTEyLCA5MjU2MDAsIC02MDUwMjgzNTIsIDAsIDAsIDAsIDY1NTM2LCAzMSwgODA5NiwgMTMxMDcyLCA3ODY0MzIsIDMxNDU3MjgsIDMxNDU3MjgsIDEyNTgyOTEyLCA1MDMzMTY0OCwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDE2MCwgMjU2LCA1MTIsIDcxNjgsIDEzMTA3MiwgNzg2NDMyLCAxMzEwNzIsIDc4NjQzMiwgMTA0ODU3NiwgMjA5NzE1MiwgMTI1ODI5MTIsIDE2Nzc3MjE2LCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDEyNTgyOTEyLCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDI2ODQzNTQ1NiwgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgMywgMTIsIDE2LCAxNjAsIDI1NiwgNzE2OCwgNzg2NDMyLCAxMDQ4NTc2LCAxMjU4MjkxMiwgMTY3NzcyMTYsIDI2ODQzNTQ1NiwgMTA3Mzc0MTgyNCwgMCwgOCwgMTYsIDMyLCAxMjgsIDI1NiwgNTEyLCA3MTY4LCA3ODY0MzIsIDEwNDg1NzYsIDIwOTcxNTIsIDAsIDEsIDIsIDgsIDE2LCA3MTY4LCA3ODY0MzIsIDEwNDg1NzYsIDgzODg2MDgsIDE2Nzc3MjE2LCAxNjc3NzIxNiwgMTA3Mzc0MTgyNCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgOCwgMzIsIDEyOCwgMjU2LCA3MTY4LCA4LCAzMiwgMCwgMzA3MiwgMCwgOCwgMzIsIDMwNzIsIDQwOTYsIDUyNDI4OCwgOCwgMzIsIDAsIDAsIDMwNzIsIDQwOTYsIDAsIDIwNDgsIDUyNDI4OCwgODM4ODYwOCwgOCwgMjA0OCwgMCwgMCwgMSwgMTIsIDI1NiwgNDA5NiwgMzI3NjgsIDI2MjE0NCwgMTA0ODU3NiwgNDE5NDMwNCwgNjcxMDg4NjQsIDAsIDIwNDgsIDAsIDIwNDgsIDIwNDgsIDEwNzM3NDE4MjQsIC01ODgwNTk4NSwgLTU4ODA1OTg1LCAtNTg4MDU5ODUsIDAsIDAsIDI2MjE0NCwgMCwgMCwgMzIsIDQxOTQzMDQsIDE2Nzc3MjE2LCAxMzQyMTc3MjgsIDQzODIsIDE3MjAzMiwgLTU4OTgyNDAwLCAwLCAwLCAyLCAyOCwgMjU2LCA0MDk2LCA4MTkyLCA4MTkyLCAzMjc2OCwgMTMxMDcyLCAyNjIxNDQsIDUyNDI4OCwgMSwgMiwgMTIsIDI1NiwgNDA5NiwgMCwgMCwgNDE5NDMwNCwgNjcxMDg4NjQsIDEzNDIxNzcyOCwgODA1MzA2MzY4LCAxMDczNzQxODI0LCAwLCAwLCAxLCAyLCAxMiwgMTYsIDI1NiwgNDA5NiwgMTA0ODU3NiwgNjcxMDg4NjQsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCAwLCA1MTIsIDEwNDg1NzYsIDQxOTQzMDQsIDIwMTMyNjU5MiwgMTg3OTA0ODE5MiwgMCwgMCwgMTIsIDI1NiwgNDA5NiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDUzNjg3MDkxMiwgMTIsIDI1NiwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDAsIDEyLCAyNTYsIDAsIDAsIDEsIDMyLCA2NCwgNTEyLCAwLCAwLCAyMDUyMzY5NjEsIDIwNTIzNjk2MSwgMCwgMCwgMCwgMSwgOTYsIDY0MCwgMSwgMTA5NzYsIDIyOTM3NiwgMjA0OTk2NjA4LCAwLCA2NDAsIDIwNDgsIDgxOTIsIDIyOTM3NiwgMTU3Mjg2NCwgMTU3Mjg2NCwgMjA5NzE1MiwgMjAxMzI2NTkyLCAwLCAwLCAwLCA2NCwgNTEyLCAyMDQ4LCAyMjkzNzYsIDE1NzI4NjQsIDIwMTMyNjU5MiwgMTU3Mjg2NCwgMjAxMzI2NTkyLCAwLCAwLCAxLCA0MzgyLCAwLCAxLCAzMiwgMjA0OCwgNjU1MzYsIDEzMTA3MiwgMTU3Mjg2NCwgMjAxMzI2NTkyLCAxMzEwNzIsIDE1NzI4NjQsIDEzNDIxNzcyOCwgMCwgMCwgNTI0Mjg4LCA1MjQyODgsIDAsIDAsIDAsIC02ODU4Mjc4NiwgLTY4NTgyNzg2LCAtNjg1ODI3ODYsIDAsIDAsIDIwOTcxNTIsIDUyNDI4OCwgMCwgNTI0Mjg4LCAwLCAwLCA2NTUzNiwgMTMxMDcyLCAxNTcyODY0LCAwLCAwLCAyLCA0LCAwLCAwLCA2NTAxMTcxMiwgLTEzNDIxNzcyOCwgMCwgMCwgMCwgMCwgMiwgNCwgMTIwLCA1MTIsIC0yNjg0MzU0NTYsIDAsIDAsIDAsIDIsIDgsIDQ4LCA2NCwgMjA0OCwgODE5MiwgOTgzMDQsIDUyNDI4OCwgMjA5NzE1MiwgNDE5NDMwNCwgMjUxNjU4MjQsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMHg4MDAwMDAwMCwgMCwgMCwgMjUxNjU4MjQsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDE4NzkwNDgxOTIsIDB4ODAwMDAwMDAsIDAsIDAsIDQsIDExMiwgNTEyLCA2MjI1OTIsIDY1MDExNzEyLCAxMzQyMTc3MjgsIC0yNjg0MzU0NTYsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAxNjEwNjEyNzM2LCAwLCAwLCAwLCA2NCwgOTgzMDQsIDUyNDI4OCwgNDE5NDMwNCwgMTY3NzcyMTYsIDMzNTU0NDMyLCAwLCA5ODMwNCwgNTI0Mjg4LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDAsIDY1NTM2LCA1MjQyODgsIDMzNTU0NDMyLCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDAsIDY1NTM2LCA1MjQyODgsIDUzNjg3MDkxMiwgMTA3Mzc0MTgyNCwgMCwgMCwgNjU1MzYsIDUyNDI4OCwgNTM2ODcwOTEyLCAwLCA1MjQyODgsIDAsIDUyNDI4OCwgNTI0Mjg4LCAxMDQ4NTc2LCAyMDg2NjY2MjQwLCAweDgwMDAwMDAwLCAwLCAtMTY3ODE5NDIwNywgMCwgMCwgMCwgOCwgMzIsIDIwNDgsIDUyNDI4OCwgODM4ODYwOCwgMCwgMCwgMzMwNjI5MTIsIDQzNjIwNzYxNiwgMHg4MDAwMDAwMCwgMCwgMCwgMzIsIDY0LCAyNDMyLCAxNjM4NCwgMzI3NjgsIDMyNzY4LCA1MjQyODgsIDMxNDU3MjgsIDQxOTQzMDQsIDI1MTY1ODI0LCAyNTE2NTgyNCwgMTY3NzcyMTYwLCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDMyLCA2NCwgMzg0LCAyMDQ4LCAxNjM4NCwgMzI3NjgsIDEwNDg1NzYsIDIwOTcxNTIsIDQxOTQzMDQsIDI1MTY1ODI0LCAzMiwgNjQsIDEyOCwgMjU2LCAyMDQ4LCAxNjM4NCwgMjA0OCwgMTYzODQsIDEwNDg1NzYsIDQxOTQzMDQsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDAsIDAsIDIwNDgsIDE2Mzg0LCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgODA1MzA2MzY4LCAwLCAwLCAxNjc3NzIxNiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDYyMjU5MiwgNjIyNTkyLCA2MjI1OTIsIDg4MDcsIDg4MDcsIDQzNDc5MSwgMCwgMCwgMTY3NzcyMTYsIDAsIDAsIDAsIDcsIDYwOCwgODE5MiwgMCwgMCwgMCwgMywgNCwgOTYsIDUxMiwgMzIsIDY0LCA4MTkyLCAwLCAwLCAxNjc3NzIxNiwgMTM0MjE3NzI4LCAwLCAwLCAyLCA0LCA4MTkyLCAxNjM4NCwgNjU1MzYsIDIwOTcxNTIsIDMzNTU0NDMyLCAyNjg0MzU0NTYKXTsKClhRdWVyeVRva2VuaXplci5UT0tFTiA9ClsKICAiKDApIiwKICAiTW9kdWxlRGVjbCIsCiAgIkFubm90YXRpb24iLAogICJPcHRpb25EZWNsIiwKICAiT3BlcmF0b3IiLAogICJWYXJpYWJsZSIsCiAgIlRhZyIsCiAgIkVuZFRhZyIsCiAgIlByYWdtYUNvbnRlbnRzIiwKICAiRGlyQ29tbWVudENvbnRlbnRzIiwKICAiRGlyUElDb250ZW50cyIsCiAgIkNEYXRhU2VjdGlvbkNvbnRlbnRzIiwKICAiQXR0clRlc3QiLAogICJXaWxkY2FyZCIsCiAgIkVRTmFtZSIsCiAgIkludGVnZXJMaXRlcmFsIiwKICAiRGVjaW1hbExpdGVyYWwiLAogICJEb3VibGVMaXRlcmFsIiwKICAiUHJlZGVmaW5lZEVudGl0eVJlZiIsCiAgIidcIlwiJyIsCiAgIkVzY2FwZUFwb3MiLAogICJRdW90Q2hhciIsCiAgIkFwb3NDaGFyIiwKICAiRWxlbWVudENvbnRlbnRDaGFyIiwKICAiUXVvdEF0dHJDb250ZW50Q2hhciIsCiAgIkFwb3NBdHRyQ29udGVudENoYXIiLAogICJOQ05hbWUiLAogICJRTmFtZSIsCiAgIlMiLAogICJDaGFyUmVmIiwKICAiQ29tbWVudENvbnRlbnRzIiwKICAiRG9jVGFnIiwKICAiRG9jQ29tbWVudENvbnRlbnRzIiwKICAiRU9GIiwKICAiJyEnIiwKICAiJ1wiJyIsCiAgIicjJyIsCiAgIicjKSciLAogICInJycnIiwKICAiJygnIiwKICAiJygjJyIsCiAgIicoOiciLAogICInKDp+JyIsCiAgIicpJyIsCiAgIicqJyIsCiAgIicqJyIsCiAgIicsJyIsCiAgIictLT4nIiwKICAiJy4nIiwKICAiJy8nIiwKICAiJy8+JyIsCiAgIic6JyIsCiAgIic6KSciLAogICInOyciLAogICInPCEtLSciLAogICInPCFbQ0RBVEFbJyIsCiAgIic8PyciLAogICInPSciLAogICInPiciLAogICInPyciLAogICInPz4nIiwKICAiJ05hTiciLAogICInWyciLAogICInXSciLAogICInXV0+JyIsCiAgIidhZnRlciciLAogICInYWxsJyIsCiAgIidhbGxvd2luZyciLAogICInYW5jZXN0b3InIiwKICAiJ2FuY2VzdG9yLW9yLXNlbGYnIiwKICAiJ2FuZCciLAogICInYW55JyIsCiAgIidhcHBlbmQnIiwKICAiJ2FycmF5JyIsCiAgIidhcyciLAogICInYXNjZW5kaW5nJyIsCiAgIidhdCciLAogICInYXR0cmlidXRlJyIsCiAgIidiYXNlLXVyaSciLAogICInYmVmb3JlJyIsCiAgIidib3VuZGFyeS1zcGFjZSciLAogICInYnJlYWsnIiwKICAiJ2J5JyIsCiAgIidjYXNlJyIsCiAgIidjYXN0JyIsCiAgIidjYXN0YWJsZSciLAogICInY2F0Y2gnIiwKICAiJ2NoZWNrJyIsCiAgIidjaGlsZCciLAogICInY29sbGF0aW9uJyIsCiAgIidjb2xsZWN0aW9uJyIsCiAgIidjb21tZW50JyIsCiAgIidjb25zdHJhaW50JyIsCiAgIidjb25zdHJ1Y3Rpb24nIiwKICAiJ2NvbnRhaW5zJyIsCiAgIidjb250ZW50JyIsCiAgIidjb250ZXh0JyIsCiAgIidjb250aW51ZSciLAogICInY29weSciLAogICInY29weS1uYW1lc3BhY2VzJyIsCiAgIidjb3VudCciLAogICInZGVjaW1hbC1mb3JtYXQnIiwKICAiJ2RlY2ltYWwtc2VwYXJhdG9yJyIsCiAgIidkZWNsYXJlJyIsCiAgIidkZWZhdWx0JyIsCiAgIidkZWxldGUnIiwKICAiJ2Rlc2NlbmRhbnQnIiwKICAiJ2Rlc2NlbmRhbnQtb3Itc2VsZiciLAogICInZGVzY2VuZGluZyciLAogICInZGlhY3JpdGljcyciLAogICInZGlmZmVyZW50JyIsCiAgIidkaWdpdCciLAogICInZGlzdGFuY2UnIiwKICAiJ2RpdiciLAogICInZG9jdW1lbnQnIiwKICAiJ2RvY3VtZW50LW5vZGUnIiwKICAiJ2VsZW1lbnQnIiwKICAiJ2Vsc2UnIiwKICAiJ2VtcHR5JyIsCiAgIidlbXB0eS1zZXF1ZW5jZSciLAogICInZW5jb2RpbmcnIiwKICAiJ2VuZCciLAogICInZW50aXJlJyIsCiAgIidlcSciLAogICInZXZlcnknIiwKICAiJ2V4YWN0bHknIiwKICAiJ2V4Y2VwdCciLAogICInZXhpdCciLAogICInZXh0ZXJuYWwnIiwKICAiJ2ZpcnN0JyIsCiAgIidmb2xsb3dpbmcnIiwKICAiJ2ZvbGxvd2luZy1zaWJsaW5nJyIsCiAgIidmb3InIiwKICAiJ2ZvcmVhY2gnIiwKICAiJ2ZvcmVpZ24nIiwKICAiJ2Zyb20nIiwKICAiJ2Z0LW9wdGlvbiciLAogICInZnRhbmQnIiwKICAiJ2Z0bm90JyIsCiAgIidmdG9yJyIsCiAgIidmdW5jdGlvbiciLAogICInZ2UnIiwKICAiJ2dyZWF0ZXN0JyIsCiAgIidncm91cCciLAogICInZ3JvdXBpbmctc2VwYXJhdG9yJyIsCiAgIidndCciLAogICInaWRpdiciLAogICInaWYnIiwKICAiJ2ltcG9ydCciLAogICInaW4nIiwKICAiJ2luZGV4JyIsCiAgIidpbmZpbml0eSciLAogICInaW5oZXJpdCciLAogICInaW5zZW5zaXRpdmUnIiwKICAiJ2luc2VydCciLAogICInaW5zdGFuY2UnIiwKICAiJ2ludGVncml0eSciLAogICInaW50ZXJzZWN0JyIsCiAgIidpbnRvJyIsCiAgIidpcyciLAogICInaXRlbSciLAogICInanNvbiciLAogICInanNvbi1pdGVtJyIsCiAgIidrZXknIiwKICAiJ2xhbmd1YWdlJyIsCiAgIidsYXN0JyIsCiAgIidsYXgnIiwKICAiJ2xlJyIsCiAgIidsZWFzdCciLAogICInbGV0JyIsCiAgIidsZXZlbHMnIiwKICAiJ2xvb3AnIiwKICAiJ2xvd2VyY2FzZSciLAogICInbHQnIiwKICAiJ21pbnVzLXNpZ24nIiwKICAiJ21vZCciLAogICInbW9kaWZ5JyIsCiAgIidtb2R1bGUnIiwKICAiJ21vc3QnIiwKICAiJ25hbWVzcGFjZSciLAogICInbmFtZXNwYWNlLW5vZGUnIiwKICAiJ25lJyIsCiAgIiduZXh0JyIsCiAgIidubyciLAogICInbm8taW5oZXJpdCciLAogICInbm8tcHJlc2VydmUnIiwKICAiJ25vZGUnIiwKICAiJ25vZGVzJyIsCiAgIidub3QnIiwKICAiJ29iamVjdCciLAogICInb2NjdXJzJyIsCiAgIidvZiciLAogICInb24nIiwKICAiJ29ubHknIiwKICAiJ29wdGlvbiciLAogICInb3InIiwKICAiJ29yZGVyJyIsCiAgIidvcmRlcmVkJyIsCiAgIidvcmRlcmluZyciLAogICIncGFyYWdyYXBoJyIsCiAgIidwYXJhZ3JhcGhzJyIsCiAgIidwYXJlbnQnIiwKICAiJ3BhdHRlcm4tc2VwYXJhdG9yJyIsCiAgIidwZXItbWlsbGUnIiwKICAiJ3BlcmNlbnQnIiwKICAiJ3BocmFzZSciLAogICIncG9zaXRpb24nIiwKICAiJ3ByZWNlZGluZyciLAogICIncHJlY2VkaW5nLXNpYmxpbmcnIiwKICAiJ3ByZXNlcnZlJyIsCiAgIidwcmV2aW91cyciLAogICIncHJvY2Vzc2luZy1pbnN0cnVjdGlvbiciLAogICIncmVsYXRpb25zaGlwJyIsCiAgIidyZW5hbWUnIiwKICAiJ3JlcGxhY2UnIiwKICAiJ3JldHVybiciLAogICIncmV0dXJuaW5nJyIsCiAgIidyZXZhbGlkYXRpb24nIiwKICAiJ3NhbWUnIiwKICAiJ3NhdGlzZmllcyciLAogICInc2NoZW1hJyIsCiAgIidzY2hlbWEtYXR0cmlidXRlJyIsCiAgIidzY2hlbWEtZWxlbWVudCciLAogICInc2NvcmUnIiwKICAiJ3NlbGYnIiwKICAiJ3NlbnNpdGl2ZSciLAogICInc2VudGVuY2UnIiwKICAiJ3NlbnRlbmNlcyciLAogICInc2tpcCciLAogICInc2xpZGluZyciLAogICInc29tZSciLAogICInc3RhYmxlJyIsCiAgIidzdGFydCciLAogICInc3RlbW1pbmcnIiwKICAiJ3N0b3AnIiwKICAiJ3N0cmljdCciLAogICInc3RyaXAnIiwKICAiJ3N0cnVjdHVyZWQtaXRlbSciLAogICInc3dpdGNoJyIsCiAgIid0ZXh0JyIsCiAgIid0aGVuJyIsCiAgIid0aGVzYXVydXMnIiwKICAiJ3RpbWVzJyIsCiAgIid0byciLAogICIndHJlYXQnIiwKICAiJ3RyeSciLAogICIndHVtYmxpbmcnIiwKICAiJ3R5cGUnIiwKICAiJ3R5cGVzd2l0Y2gnIiwKICAiJ3VuaW9uJyIsCiAgIid1bmlxdWUnIiwKICAiJ3Vub3JkZXJlZCciLAogICIndXBkYXRpbmcnIiwKICAiJ3VwcGVyY2FzZSciLAogICIndXNpbmcnIiwKICAiJ3ZhbGlkYXRlJyIsCiAgIid2YWx1ZSciLAogICIndmFyaWFibGUnIiwKICAiJ3ZlcnNpb24nIiwKICAiJ3dlaWdodCciLAogICInd2hlbiciLAogICInd2hlcmUnIiwKICAiJ3doaWxlJyIsCiAgIid3aWxkY2FyZHMnIiwKICAiJ3dpbmRvdyciLAogICInd2l0aCciLAogICInd2l0aG91dCciLAogICInd29yZCciLAogICInd29yZHMnIiwKICAiJ3hxdWVyeSciLAogICInemVyby1kaWdpdCciLAogICIneyciLAogICIne3snIiwKICAiJ3wnIiwKICAiJ30nIiwKICAiJ319JyIKXTsKCn0se31dLCIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvbGV4ZXJzL2xleGVyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciBUb2tlbkhhbmRsZXIgPSBmdW5jdGlvbihjb2RlKSB7CiAgICB2YXIgaW5wdXQgPSBjb2RlOwogICAgdGhpcy50b2tlbnMgPSBbXTsKIAogICAgdGhpcy5yZXNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlucHV0ID0gaW5wdXQ7CiAgICAgICAgdGhpcy50b2tlbnMgPSBbXTsKICAgIH07CiAgICAKICAgIHRoaXMuc3RhcnROb250ZXJtaW5hbCA9IGZ1bmN0aW9uKCkge307CiAgICB0aGlzLmVuZE5vbnRlcm1pbmFsID0gZnVuY3Rpb24oKSB7fTsKCiAgICB0aGlzLnRlcm1pbmFsID0gZnVuY3Rpb24obmFtZSwgYmVnaW4sIGVuZCkgewogICAgICAgIHRoaXMudG9rZW5zLnB1c2goewogICAgICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgICAgICB2YWx1ZTogaW5wdXQuc3Vic3RyaW5nKGJlZ2luLCBlbmQpCiAgICAgICAgfSk7CiAgICB9OwoKICAgIHRoaXMud2hpdGVzcGFjZSA9IGZ1bmN0aW9uKGJlZ2luLCBlbmQpIHsKICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogJ1dTJywKICAgICAgICAgICAgdmFsdWU6IGlucHV0LnN1YnN0cmluZyhiZWdpbiwgZW5kKQogICAgICAgIH0pOwogICAgfTsKfTsKCmV4cG9ydHMuTGV4ZXIgPSBmdW5jdGlvbihUb2tlbml6ZXIsIFJ1bGVzKSB7CgogICAgdGhpcy50b2tlbnMgPSBbXTsKICAKICAgIHRoaXMuZ2V0TGluZVRva2VucyA9IGZ1bmN0aW9uKGxpbmUsIHN0YXRlKSB7CiAgICAgICAgc3RhdGUgPSAoc3RhdGUgPT09ICdzdGFydCcgfHwgIXN0YXRlKSA/ICdbInN0YXJ0Il0nIDogc3RhdGU7CiAgICAgICAgdmFyIHN0YWNrID0gSlNPTi5wYXJzZShzdGF0ZSk7CiAgICAgICAgdmFyIGggPSBuZXcgVG9rZW5IYW5kbGVyKGxpbmUpOwogICAgICAgIHZhciB0b2tlbml6ZXIgPSBuZXcgVG9rZW5pemVyKGxpbmUsIGgpOwogICAgICAgIHZhciB0b2tlbnMgPSBbXTsKICAgIAogICAgICAgIHdoaWxlKHRydWUpIHsKICAgICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaC50b2tlbnMgPSBbXTsKICAgICAgICAgICAgICAgIHRva2VuaXplclsncGFyc2VfJyArIGN1cnJlbnRTdGF0ZV0oKTsKICAgICAgICAgICAgICAgIHZhciBpbmZvID0gbnVsbDsKICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGgudG9rZW5zLmxlbmd0aCA+IDEgJiYgaC50b2tlbnNbMF0ubmFtZSA9PT0gJ1dTJykgewogICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaC50b2tlbnNbMF0udmFsdWUKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBoLnRva2Vucy5zcGxpY2UoMCwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBoLnRva2Vuc1swXTsKICAgICAgICAgICAgICAgIHZhciBydWxlcyAgPSBSdWxlc1tjdXJyZW50U3RhdGVdOwogICAgICAgICAgICAgICAgZm9yKHZhciBrID0gMDsgayA8IHJ1bGVzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBSdWxlc1tjdXJyZW50U3RhdGVdW2tdOwogICAgICAgICAgICAgICAgICAgIGlmKCh0eXBlb2YocnVsZS5uYW1lKSA9PT0gJ2Z1bmN0aW9uJyAmJiBydWxlLm5hbWUodG9rZW4pKSB8fCBydWxlLm5hbWUgPT09IHRva2VuLm5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHJ1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgICAgIGlmKHRva2VuLm5hbWUgPT09ICdFT0YnKSB7IGJyZWFrOyB9CiAgICAgICAgICAgICAgICBpZih0b2tlbi52YWx1ZSA9PT0gJycpIHsgdGhyb3cgJ0VuY291bnRlcmVkIGVtcHR5IHN0cmluZyBsZXhpY2FsIHJ1bGUuJzsgfQogICAgICAgIAogICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goewogICAgICAgICAgICAgICAgICAgIHR5cGU6IGluZm8gPT09IG51bGwgPyAndGV4dCcgOiAodHlwZW9mKGluZm8udG9rZW4pID09PSAnZnVuY3Rpb24nID8gaW5mby50b2tlbih0b2tlbi52YWx1ZSkgOiBpbmZvLnRva2VuKSwKICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdG9rZW4udmFsdWUKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIAogICAgICAgICAgICAgICAgaWYoaW5mbyAmJiBpbmZvLm5leHQpIHsKICAgICAgICAgICAgICAgICAgICBpbmZvLm5leHQoc3RhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAKICAgICAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgICAgICBpZihlIGluc3RhbmNlb2YgdG9rZW5pemVyLlBhcnNlRXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICBpbmRleCArPSB0b2tlbnNbaV0udmFsdWUubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IGxpbmUuc3Vic3RyaW5nKGluZGV4KSB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnM6IHRva2VucywKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU6IEpTT04uc3RyaW5naWZ5KFsnc3RhcnQnXSkKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0b2tlbnM6IHRva2VucywKICAgICAgICAgICAgc3RhdGU6IEpTT04uc3RyaW5naWZ5KHN0YWNrKQogICAgICAgIH07CiAgICB9Owp9Owp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy94cXVlcnlfbGV4ZXIuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIFhRdWVyeVRva2VuaXplciA9IF9kZXJlcV8oJy4vWFF1ZXJ5VG9rZW5pemVyJykuWFF1ZXJ5VG9rZW5pemVyOwp2YXIgTGV4ZXIgPSBfZGVyZXFfKCcuL2xleGVyJykuTGV4ZXI7Cgp2YXIga2V5cyA9ICdhZnRlcnxhbmNlc3RvcnxhbmNlc3Rvci1vci1zZWxmfGFuZHxhc3xhc2NlbmRpbmd8YXR0cmlidXRlfGJlZm9yZXxjYXNlfGNhc3R8Y2FzdGFibGV8Y2hpbGR8Y29sbGF0aW9ufGNvbW1lbnR8Y29weXxjb3VudHxkZWNsYXJlfGRlZmF1bHR8ZGVsZXRlfGRlc2NlbmRhbnR8ZGVzY2VuZGFudC1vci1zZWxmfGRlc2NlbmRpbmd8ZGl2fGRvY3VtZW50fGRvY3VtZW50LW5vZGV8ZWxlbWVudHxlbHNlfGVtcHR5fGVtcHR5LXNlcXVlbmNlfGVuZHxlcXxldmVyeXxleGNlcHR8Zmlyc3R8Zm9sbG93aW5nfGZvbGxvd2luZy1zaWJsaW5nfGZvcnxmdW5jdGlvbnxnZXxncm91cHxndHxpZGl2fGlmfGltcG9ydHxpbnNlcnR8aW5zdGFuY2V8aW50ZXJzZWN0fGludG98aXN8aXRlbXxsYXN0fGxlfGxldHxsdHxtb2R8bW9kaWZ5fG1vZHVsZXxuYW1lc3BhY2V8bmFtZXNwYWNlLW5vZGV8bmV8bm9kZXxvbmx5fG9yfG9yZGVyfG9yZGVyZWR8cGFyZW50fHByZWNlZGluZ3xwcmVjZWRpbmctc2libGluZ3xwcm9jZXNzaW5nLWluc3RydWN0aW9ufHJlbmFtZXxyZXBsYWNlfHJldHVybnxzYXRpc2ZpZXN8c2NoZW1hLWF0dHJpYnV0ZXxzY2hlbWEtZWxlbWVudHxzZWxmfHNvbWV8c3RhYmxlfHN0YXJ0fHN3aXRjaHx0ZXh0fHRvfHRyZWF0fHRyeXx0eXBlc3dpdGNofHVuaW9ufHVub3JkZXJlZHx2YWxpZGF0ZXx3aGVyZXx3aXRofHhxdWVyeXxjb250YWluc3xwYXJhZ3JhcGhzfHNlbnRlbmNlc3x0aW1lc3x3b3Jkc3xieXxjb2xsZWN0aW9ucmV0dXJufHZhcmlhYmxlfHZlcnNpb258b3B0aW9ufHdoZW58ZW5jb2Rpbmd8dG9zd2l0Y2h8Y2F0Y2h8dHVtYmxpbmd8c2xpZGluZ3x3aW5kb3d8YXR8dXNpbmd8c3RlbW1pbmd8Y29sbGVjdGlvbnxzY2hlbWF8d2hpbGV8b258bm9kZXN8aW5kZXh8ZXh0ZXJuYWx8dGhlbnxpbnx1cGRhdGluZ3x2YWx1ZXxvZnxjb250YWluc2JyZWFrfGxvb3B8Y29udGludWV8ZXhpdHxyZXR1cm5pbmd8YXBwZW5kfGpzb258cG9zaXRpb258c3RyaWN0Jy5zcGxpdCgnfCcpOwoKdmFyIGtleXdvcmRzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7IHJldHVybiB7IG5hbWU6ICdcJycgKyB2YWwgKyAnXCcnLCB0b2tlbjogJ2tleXdvcmQnIH07IH0pOwp2YXIgbmNuYW1lcyA9IGtleXMubWFwKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4geyBuYW1lOiAnXCcnICsgdmFsICsgJ1wnJywgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9OyB9KTsKCnZhciBjZGF0YSA9ICdjb25zdGFudC5sYW5ndWFnZSc7CnZhciBudW1iZXIgPSAnY29uc3RhbnQnOwp2YXIgeG1sY29tbWVudCA9ICdjb21tZW50JzsKdmFyIHBpID0gJ3htbC1wZSc7CnZhciBwcmFnbWEgPSAnY29uc3RhbnQuYnVpbGRpbic7CnZhciBuID0gZnVuY3Rpb24obmFtZSl7CiAgICByZXR1cm4gJ1wnJyArIG5hbWUgKyAnXCcnOwp9Owp2YXIgUnVsZXMgPSB7CiAgICBzdGFydDogWwogICAgICAgIHsgbmFtZTogbignKCMnKSwgdG9rZW46IHByYWdtYSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdQcmFnbWEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJyg6ficpLCB0b2tlbjogJ2NvbW1lbnQuZG9jJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50RG9jJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzwhLS0nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnWE1MQ29tbWVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc8PycpLCB0b2tlbjogcGksIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKSB7IHN0YWNrLnB1c2goJ1BJJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ1wnXCcnKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ0Fwb3NTdHJpbmcnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUXVvdFN0cmluZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnQW5ub3RhdGlvbicsIHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbicgfSwKICAgICAgICB7IG5hbWU6ICdNb2R1bGVEZWNsJywgdG9rZW46ICdrZXl3b3JkJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdQcmVmaXgnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ09wdGlvbkRlY2wnLCB0b2tlbjogJ2tleXdvcmQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ19FUU5hbWUnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ0F0dHJUZXN0JywgdG9rZW46ICdzdXBwb3J0LnR5cGUnIH0sCiAgICAgICAgeyBuYW1lOiAnVmFyaWFibGUnLCB0b2tlbjogJ3ZhcmlhYmxlJyB9LAogICAgICAgIHsgbmFtZTogbignPCFbQ0RBVEFbJyksIHRva2VuOiBjZGF0YSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDRGF0YScpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnSW50ZWdlckxpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnRGVjaW1hbExpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnRG91YmxlTGl0ZXJhbCcsIHRva2VuOiBudW1iZXIgfSwKICAgICAgICB7IG5hbWU6ICdPcGVyYXRvcicsIHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicgfSwKICAgICAgICB7IG5hbWU6ICdFUU5hbWUnLCB0b2tlbjogZnVuY3Rpb24odmFsKSB7IHJldHVybiBrZXlzLmluZGV4T2YodmFsKSAhPT0gLTEgPyAna2V5d29yZCcgOiAnc3VwcG9ydC5mdW5jdGlvbic7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJygnKSwgdG9rZW46ICdscGFyZW4nIH0sCiAgICAgICAgeyBuYW1lOiBuKCcpJyksIHRva2VuOiAncnBhcmVuJyB9LAogICAgICAgIHsgbmFtZTogJ1RhZycsIHRva2VuOiAnbWV0YS50YWcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1N0YXJ0VGFnJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ30nKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBpZihzdGFjay5sZW5ndGggPiAxKSB7IHN0YWNrLnBvcCgpOyB9IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0gLy8sIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgaWYoc3RhY2subGVuZ3RoID4gMSkgeyBzdGFjay5wb3AoKTsgfSB9IH0KICAgIF0uY29uY2F0KGtleXdvcmRzKSwKICAgIF9FUU5hbWU6IFsKICAgICAgICB7IG5hbWU6ICdFUU5hbWUnLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjaykgeyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLmNvbmNhdChuY25hbWVzKSwKICAgIFByZWZpeDogWwogICAgICAgIHsgbmFtZTogJ05DTmFtZScsIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKSB7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0uY29uY2F0KG5jbmFtZXMpLAogICAgU3RhcnRUYWc6IFsKICAgICAgICB7IG5hbWU6IG4oJz4nKSwgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnVGFnQ29udGVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUU5hbWUnLCB0b2tlbjogJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZScgfSwKICAgICAgICB7IG5hbWU6IG4oJz0nKSwgdG9rZW46ICd0ZXh0JyB9LAogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQXBvc0F0dHInKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUXVvdEF0dHInKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignLz4nKSwgdG9rZW46ICdtZXRhLnRhZy5yJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgVGFnQ29udGVudDogWwogICAgICAgIHsgbmFtZTogJ0VsZW1lbnRDb250ZW50Q2hhcicsIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJzwhW0NEQVRBWycpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ0RhdGEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignPCEtLScpLCB0b2tlbjogeG1sY29tbWVudCwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdYTUxDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdUYWcnLCB0b2tlbjogJ21ldGEudGFnJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdTdGFydFRhZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUHJlZGVmaW5lZEVudGl0eVJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0NoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6IG4oJ3t7JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnRW5kVGFnJywgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBBcG9zQXR0cjogWwogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVBcG9zJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQXBvc0F0dHJDb250ZW50Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogbigneycpLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ3N0YXJ0Jyk7IH0gfQogICAgXSwKICAgIFF1b3RBdHRyOiBbCiAgICAgICAgeyBuYW1lOiBuKCdcIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVRdW90JywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnUXVvdEF0dHJDb250ZW50Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogbigneycpLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ3N0YXJ0Jyk7IH0gfQogICAgXSwKICAgIFByYWdtYTogWwogICAgICAgIHsgbmFtZTogJ1ByYWdtYUNvbnRlbnRzJywgdG9rZW46IHByYWdtYSB9LAogICAgICAgIHsgbmFtZTogbignIycpLCB0b2tlbjogcHJhZ21hIH0sCiAgICAgICAgeyBuYW1lOiBuKCcjKScpLCB0b2tlbjogcHJhZ21hLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBDb21tZW50OiBbCiAgICAgICAgeyBuYW1lOiAnQ29tbWVudENvbnRlbnRzJywgdG9rZW46ICdjb21tZW50JyB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzopJyksIHRva2VuOiAnY29tbWVudCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIENvbW1lbnREb2M6IFsKICAgICAgICB7IG5hbWU6ICdEb2NDb21tZW50Q29udGVudHMnLCB0b2tlbjogJ2NvbW1lbnQuZG9jJyB9LAogICAgICAgIHsgbmFtZTogJ0RvY1RhZycsIHRva2VuOiAnY29tbWVudC5kb2MudGFnJyB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50LmRvYycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ29tbWVudERvYycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc6KScpLCB0b2tlbjogJ2NvbW1lbnQuZG9jJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgWE1MQ29tbWVudDogWwogICAgICAgIHsgbmFtZTogJ0RpckNvbW1lbnRDb250ZW50cycsIHRva2VuOiB4bWxjb21tZW50IH0sCiAgICAgICAgeyBuYW1lOiBuKCctLT4nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIENEYXRhOiBbCiAgICAgICAgeyBuYW1lOiAnQ0RhdGFTZWN0aW9uQ29udGVudHMnLCB0b2tlbjogY2RhdGEgfSwKICAgICAgICB7IG5hbWU6IG4oJ11dPicpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIFBJOiBbCiAgICAgICAgeyBuYW1lOiAnRGlyUElDb250ZW50cycsIHRva2VuOiBwaSB9LAogICAgICAgIHsgbmFtZTogbignPycpLCB0b2tlbjogcGkgfSwKICAgICAgICB7IG5hbWU6IG4oJz8+JyksIHRva2VuOiBwaSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgQXBvc1N0cmluZzogWwogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdQcmVkZWZpbmVkRW50aXR5UmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0VzY2FwZUFwb3MnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdBcG9zQ2hhcicsIHRva2VuOiAnc3RyaW5nJyB9CiAgICBdLAogICAgUXVvdFN0cmluZzogWwogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdQcmVkZWZpbmVkRW50aXR5UmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0VzY2FwZVF1b3QnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdRdW90Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9CiAgICBdCn07CiAgICAKZXhwb3J0cy5YUXVlcnlMZXhlciA9IGZ1bmN0aW9uKCl7IHJldHVybiBuZXcgTGV4ZXIoWFF1ZXJ5VG9rZW5pemVyLCBSdWxlcyk7IH07Cn0seyIuL1hRdWVyeVRva2VuaXplciI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9sZXhlcnMvWFF1ZXJ5VG9rZW5pemVyLmpzIiwiLi9sZXhlciI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9sZXhlcnMvbGV4ZXIuanMifV19LHt9LFsiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy94cXVlcnlfbGV4ZXIuanMiXSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3htbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL3Rva2VuX2l0ZXJhdG9yIiwiYWNlL2xpYi9sYW5nIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vLi4vbGliL29vcCIpOwp2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyIikuQmVoYXZpb3VyOwp2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKdmFyIGxhbmcgPSByZXF1aXJlKCIuLi8uLi9saWIvbGFuZyIpOwoKZnVuY3Rpb24gaXModG9rZW4sIHR5cGUpIHsKICAgIHJldHVybiB0b2tlbiAmJiB0b2tlbi50eXBlLmxhc3RJbmRleE9mKHR5cGUgKyAiLnhtbCIpID4gLTE7Cn0KCnZhciBYbWxCZWhhdmlvdXIgPSBmdW5jdGlvbiAoKSB7CgogICAgdGhpcy5hZGQoInN0cmluZ19kcXVvdGVzIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnIicgfHwgdGV4dCA9PSAiJyIpIHsKICAgICAgICAgICAgdmFyIHF1b3RlID0gdGV4dDsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gc2Vzc2lvbi5kb2MuZ2V0VGV4dFJhbmdlKGVkaXRvci5nZXRTZWxlY3Rpb25SYW5nZSgpKTsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSAiIiAmJiBzZWxlY3RlZCAhPT0gIiciICYmIHNlbGVjdGVkICE9ICciJyAmJiBlZGl0b3IuZ2V0V3JhcEJlaGF2aW91cnNFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBzZWxlY3RlZCArIHF1b3RlLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgcmlnaHRDaGFyID0gbGluZS5zdWJzdHJpbmcoY3Vyc29yLmNvbHVtbiwgY3Vyc29yLmNvbHVtbiArIDEpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAocmlnaHRDaGFyID09IHF1b3RlICYmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpIHx8IGlzKHRva2VuLCAic3RyaW5nIikpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXRva2VuKQogICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKCiAgICAgICAgICAgIGlmICghdG9rZW4pCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICB3aGlsZSAoaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAid2hpdGVzcGFjZSIpKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByaWdodFNwYWNlID0gIXJpZ2h0Q2hhciB8fCByaWdodENoYXIubWF0Y2goL1xzLyk7CiAgICAgICAgICAgIGlmIChpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz4nKSB8fCAoaXModG9rZW4sICJkZWNsLWF0dHJpYnV0ZS1lcXVhbHMiKSAmJiAocmlnaHRTcGFjZSB8fCByaWdodENoYXIgPT0gJz8nKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdGV4dDogcXVvdGUgKyBxdW90ZSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCAxXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0pOwoKICAgIHRoaXMuYWRkKCJzdHJpbmdfZHF1b3RlcyIsICJkZWxldGlvbiIsIGZ1bmN0aW9uKHN0YXRlLCBhY3Rpb24sIGVkaXRvciwgc2Vzc2lvbiwgcmFuZ2UpIHsKICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZXNzaW9uLmRvYy5nZXRUZXh0UmFuZ2UocmFuZ2UpOwogICAgICAgIGlmICghcmFuZ2UuaXNNdWx0aUxpbmUoKSAmJiAoc2VsZWN0ZWQgPT0gJyInIHx8IHNlbGVjdGVkID09ICInIikpIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmRvYy5nZXRMaW5lKHJhbmdlLnN0YXJ0LnJvdyk7CiAgICAgICAgICAgIHZhciByaWdodENoYXIgPSBsaW5lLnN1YnN0cmluZyhyYW5nZS5zdGFydC5jb2x1bW4gKyAxLCByYW5nZS5zdGFydC5jb2x1bW4gKyAyKTsKICAgICAgICAgICAgaWYgKHJpZ2h0Q2hhciA9PSBzZWxlY3RlZCkgewogICAgICAgICAgICAgICAgcmFuZ2UuZW5kLmNvbHVtbisrOwogICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5hZGQoImF1dG9jbG9zaW5nIiwgImluc2VydGlvbiIsIGZ1bmN0aW9uIChzdGF0ZSwgYWN0aW9uLCBlZGl0b3IsIHNlc3Npb24sIHRleHQpIHsKICAgICAgICBpZiAodGV4dCA9PSAnPicpIHsKICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvblJhbmdlKCkuc3RhcnQ7CiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IG5ldyBUb2tlbkl0ZXJhdG9yKHNlc3Npb24sIHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCkgfHwgaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIShpcyh0b2tlbiwgInRhZy1uYW1lIikgfHwgaXModG9rZW4sICJ0YWctd2hpdGVzcGFjZSIpIHx8IGlzKHRva2VuLCAiYXR0cmlidXRlLW5hbWUiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS1lcXVhbHMiKSB8fCBpcyh0b2tlbiwgImF0dHJpYnV0ZS12YWx1ZSIpKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgaWYgKGlzKHRva2VuLCAicmVmZXJlbmNlLmF0dHJpYnV0ZS12YWx1ZSIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpZiAoaXModG9rZW4sICJhdHRyaWJ1dGUtdmFsdWUiKSkgewogICAgICAgICAgICAgICAgdmFyIHRva2VuRW5kQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCkgKyB0b2tlbi52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24uY29sdW1uIDwgdG9rZW5FbmRDb2x1bW4pCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uLmNvbHVtbiA9PSB0b2tlbkVuZENvbHVtbikgewogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0VG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgaXMobmV4dFRva2VuLCAiYXR0cmlidXRlLXZhbHVlIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKC9eXHMqPi8udGVzdChzZXNzaW9uLmdldExpbmUocG9zaXRpb24ucm93KS5zbGljZShwb3NpdGlvbi5jb2x1bW4pKSkKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgd2hpbGUgKCFpcyh0b2tlbiwgInRhZy1uYW1lIikpIHsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT0gIjwiKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwRm9yd2FyZCgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5Sb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgdmFyIHRva2VuQ29sdW1uID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuQ29sdW1uKCk7CiAgICAgICAgICAgIGlmIChpcyhpdGVyYXRvci5zdGVwQmFja3dhcmQoKSwgImVuZC10YWctb3BlbiIpKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgaWYgKHRva2VuUm93ID09IHBvc2l0aW9uLnJvdykKICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbkNvbHVtbik7CgogICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMuaGFzT3duUHJvcGVydHkoZWxlbWVudC50b0xvd2VyQ2FzZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICB0ZXh0OiAiPiIgKyAiPC8iICsgZWxlbWVudCArICI+IiwKICAgICAgICAgICAgICAgc2VsZWN0aW9uOiBbMSwgMV0KICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICB9KTsKCiAgICB0aGlzLmFkZCgiYXV0b2luZGVudCIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gIlxuIikgewogICAgICAgICAgICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvclBvc2l0aW9uKCk7CiAgICAgICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKGN1cnNvci5yb3cpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBjdXJzb3Iucm93LCBjdXJzb3IuY29sdW1uKTsKICAgICAgICAgICAgdmFyIHRva2VuID0gaXRlcmF0b3IuZ2V0Q3VycmVudFRva2VuKCk7CgogICAgICAgICAgICBpZiAodG9rZW4gJiYgdG9rZW4udHlwZS5pbmRleE9mKCJ0YWctY2xvc2UiKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PSAiLz4iKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tlbi50eXBlLmluZGV4T2YoInRhZy1uYW1lIikgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBpdGVyYXRvci5zdGVwQmFja3dhcmQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgIHZhciByb3cgPSBpdGVyYXRvci5nZXRDdXJyZW50VG9rZW5Sb3coKTsKICAgICAgICAgICAgICAgIHRva2VuID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRva2VuIHx8IHRva2VuLnR5cGUuaW5kZXhPZigiZW5kLXRhZyIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodGhpcy52b2lkRWxlbWVudHMgJiYgIXRoaXMudm9pZEVsZW1lbnRzW3RhZ10pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFRva2VuID0gc2Vzc2lvbi5nZXRUb2tlbkF0KGN1cnNvci5yb3csIGN1cnNvci5jb2x1bW4rMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEluZGVudCA9IHRoaXMuJGdldEluZGVudChsaW5lKTsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50ID0gbmV4dEluZGVudCArIHNlc3Npb24uZ2V0VGFiU3RyaW5nKCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnZhbHVlID09PSAiPC8iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50ICsgIlxuIiArIG5leHRJbmRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb246IFsxLCBpbmRlbnQubGVuZ3RoLCAxLCBpbmRlbnQubGVuZ3RoXQogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiXG4iICsgaW5kZW50CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7Cgp9OwoKb29wLmluaGVyaXRzKFhtbEJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCmV4cG9ydHMuWG1sQmVoYXZpb3VyID0gWG1sQmVoYXZpb3VyOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvYmVoYXZpb3VyL3hxdWVyeSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvYmVoYXZpb3VyIiwiYWNlL21vZGUvYmVoYXZpb3VyL2NzdHlsZSIsImFjZS9tb2RlL2JlaGF2aW91ci94bWwiLCJhY2UvdG9rZW5faXRlcmF0b3IiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCiAgdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKICB2YXIgQmVoYXZpb3VyID0gcmVxdWlyZSgnLi4vYmVoYXZpb3VyJykuQmVoYXZpb3VyOwogIHZhciBDc3R5bGVCZWhhdmlvdXIgPSByZXF1aXJlKCcuL2NzdHlsZScpLkNzdHlsZUJlaGF2aW91cjsKICB2YXIgWG1sQmVoYXZpb3VyID0gcmVxdWlyZSgiLi4vYmVoYXZpb3VyL3htbCIpLlhtbEJlaGF2aW91cjsKICB2YXIgVG9rZW5JdGVyYXRvciA9IHJlcXVpcmUoIi4uLy4uL3Rva2VuX2l0ZXJhdG9yIikuVG9rZW5JdGVyYXRvcjsKCmZ1bmN0aW9uIGhhc1R5cGUodG9rZW4sIHR5cGUpIHsKICAgIHZhciBoYXNUeXBlID0gdHJ1ZTsKICAgIHZhciB0eXBlTGlzdCA9IHRva2VuLnR5cGUuc3BsaXQoJy4nKTsKICAgIHZhciBuZWVkbGVMaXN0ID0gdHlwZS5zcGxpdCgnLicpOwogICAgbmVlZGxlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKG5lZWRsZSl7CiAgICAgICAgaWYgKHR5cGVMaXN0LmluZGV4T2YobmVlZGxlKSA9PSAtMSkgewogICAgICAgICAgICBoYXNUeXBlID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKICAgIHJldHVybiBoYXNUeXBlOwp9CiAKICB2YXIgWFF1ZXJ5QmVoYXZpb3VyID0gZnVuY3Rpb24gKCkgewogICAgICAKICAgICAgdGhpcy5pbmhlcml0KENzdHlsZUJlaGF2aW91ciwgWyJicmFjZXMiLCAicGFyZW5zIiwgInN0cmluZ19kcXVvdGVzIl0pOyAvLyBHZXQgc3RyaW5nIGJlaGF2aW91cgogICAgICB0aGlzLmluaGVyaXQoWG1sQmVoYXZpb3VyKTsgLy8gR2V0IHhtbCBiZWhhdmlvdXIKICAgICAgCiAgICAgIHRoaXMuYWRkKCJhdXRvY2xvc2luZyIsICJpbnNlcnRpb24iLCBmdW5jdGlvbiAoc3RhdGUsIGFjdGlvbiwgZWRpdG9yLCBzZXNzaW9uLCB0ZXh0KSB7CiAgICAgICAgaWYgKHRleHQgPT0gJz4nKSB7CiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGVkaXRvci5nZXRDdXJzb3JQb3NpdGlvbigpOwogICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBuZXcgVG9rZW5JdGVyYXRvcihzZXNzaW9uLCBwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IGl0ZXJhdG9yLmdldEN1cnJlbnRUb2tlbigpOwogICAgICAgICAgICB2YXIgYXRDdXJzb3IgPSBmYWxzZTsKICAgICAgICAgICAgdmFyIHN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZSkucG9wKCk7CiAgICAgICAgICAgIGlmICgodG9rZW4gJiYgdG9rZW4udmFsdWUgPT09ICc+JykgfHwgc3RhdGUgIT09ICJTdGFydFRhZyIpIHJldHVybjsKICAgICAgICAgICAgaWYgKCF0b2tlbiB8fCAhaGFzVHlwZSh0b2tlbiwgJ21ldGEudGFnJykgJiYgIShoYXNUeXBlKHRva2VuLCAndGV4dCcpICYmIHRva2VuLnZhbHVlLm1hdGNoKCcvJykpKXsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGl0ZXJhdG9yLnN0ZXBCYWNrd2FyZCgpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAodG9rZW4gJiYgKGhhc1R5cGUodG9rZW4sICdzdHJpbmcnKSB8fCBoYXNUeXBlKHRva2VuLCAna2V5d29yZC5vcGVyYXRvcicpIHx8IGhhc1R5cGUodG9rZW4sICdlbnRpdHkuYXR0cmlidXRlLW5hbWUnKSB8fCBoYXNUeXBlKHRva2VuLCAndGV4dCcpKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhdEN1cnNvciA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gaXRlcmF0b3Iuc3RlcEJhY2t3YXJkKCk7CiAgICAgICAgICAgIGlmICghdG9rZW4gfHwgIWhhc1R5cGUodG9rZW4sICdtZXRhLnRhZycpIHx8IChwcmV2aW91cyAhPT0gbnVsbCAmJiBwcmV2aW91cy52YWx1ZS5tYXRjaCgnLycpKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciB0YWcgPSB0b2tlbi52YWx1ZS5zdWJzdHJpbmcoMSk7CiAgICAgICAgICAgIGlmIChhdEN1cnNvcil7CiAgICAgICAgICAgICAgICB2YXIgdGFnID0gdGFnLnN1YnN0cmluZygwLCBwb3NpdGlvbi5jb2x1bW4gLSB0b2tlbi5zdGFydCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgIHRleHQ6ICc+JyArICc8LycgKyB0YWcgKyAnPicsCiAgICAgICAgICAgICAgIHNlbGVjdGlvbjogWzEsIDFdCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgfSk7CgogIH07CiAgb29wLmluaGVyaXRzKFhRdWVyeUJlaGF2aW91ciwgQmVoYXZpb3VyKTsKCiAgZXhwb3J0cy5YUXVlcnlCZWhhdmlvdXIgPSBYUXVlcnlCZWhhdmlvdXI7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvZm9sZGluZy9mb2xkX21vZGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi8uLi9saWIvb29wIik7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7CnZhciBCYXNlRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRfbW9kZSIpLkZvbGRNb2RlOwoKdmFyIEZvbGRNb2RlID0gZXhwb3J0cy5Gb2xkTW9kZSA9IGZ1bmN0aW9uKGNvbW1lbnRSZWdleCkgewogICAgaWYgKGNvbW1lbnRSZWdleCkgewogICAgICAgIHRoaXMuZm9sZGluZ1N0YXJ0TWFya2VyID0gbmV3IFJlZ0V4cCgKICAgICAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5zdGFydCkKICAgICAgICApOwogICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyLnNvdXJjZS5yZXBsYWNlKC9cfFtefF0qPyQvLCAifCIgKyBjb21tZW50UmVnZXguZW5kKQogICAgICAgICk7CiAgICB9Cn07Cm9vcC5pbmhlcml0cyhGb2xkTW9kZSwgQmFzZUZvbGRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSAvKFtce1xbXChdKVteXH1cXVwpXSokfF5ccyooXC9cKikvOwogICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IC9eW15cW1x7XChdKihbXH1cXVwpXSl8Xltcc1wqXSooXCpcLykvOwogICAgdGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmU9IC9eXHMqKFwvXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZSA9IC9eXHMqKFwvXCpcKlwqKS4qXCpcL1xzKiQvOwogICAgdGhpcy5zdGFydFJlZ2lvblJlID0gL15ccyooXC9cKnxcL1wvKSM/cmVnaW9uXGIvOwogICAgdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2UgPSB0aGlzLmdldEZvbGRXaWRnZXQ7CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAKICAgICAgICBpZiAodGhpcy5zaW5nbGVMaW5lQmxvY2tDb21tZW50UmUudGVzdChsaW5lKSkgewogICAgICAgICAgICBpZiAoIXRoaXMuc3RhcnRSZWdpb25SZS50ZXN0KGxpbmUpICYmICF0aGlzLnRyaXBsZVN0YXJCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKQogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgIAogICAgICAgIHZhciBmdyA9IHRoaXMuX2dldEZvbGRXaWRnZXRCYXNlKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KTsKICAgIAogICAgICAgIGlmICghZncgJiYgdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiAic3RhcnQiOyAvLyBsaW5lQ29tbWVudFJlZ2lvblN0YXJ0CiAgICAKICAgICAgICByZXR1cm4gZnc7CiAgICB9OwoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3csIGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAKICAgICAgICBpZiAodGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayhzZXNzaW9uLCBsaW5lLCByb3cpOwogICAgICAgIAogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4OwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlbmluZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpICsgbWF0Y2hbMF0ubGVuZ3RoLCAxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlTXVsdGlsaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLmdldFNlY3Rpb25SYW5nZShzZXNzaW9uLCByb3cpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb2xkU3R5bGUgIT0gImFsbCIpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gcmFuZ2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZm9sZFN0eWxlID09PSAibWFya2JlZ2luIikKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaSA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoOwoKICAgICAgICAgICAgaWYgKG1hdGNoWzFdKQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2luZ0JyYWNrZXRCbG9jayhzZXNzaW9uLCBtYXRjaFsxXSwgcm93LCBpKTsKCiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uLmdldENvbW1lbnRGb2xkUmFuZ2Uocm93LCBpLCAtMSk7CiAgICAgICAgfQogICAgfTsKICAgIAogICAgdGhpcy5nZXRTZWN0aW9uUmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCByb3cpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydEluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLmxlbmd0aDsKICAgICAgICByb3cgPSByb3cgKyAxOwogICAgICAgIHZhciBlbmRSb3cgPSByb3c7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgICAgICBpZiAoaW5kZW50ID09PSAtMSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAgKHN0YXJ0SW5kZW50ID4gaW5kZW50KQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIHZhciBzdWJSYW5nZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlKHNlc3Npb24sICJhbGwiLCByb3cpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHN1YlJhbmdlKSB7CiAgICAgICAgICAgICAgICBpZiAoc3ViUmFuZ2Uuc3RhcnQucm93IDw9IHN0YXJ0Um93KSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YlJhbmdlLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICByb3cgPSBzdWJSYW5nZS5lbmQucm93OwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydEluZGVudCA9PSBpbmRlbnQpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbmRSb3cgPSByb3c7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIHNlc3Npb24uZ2V0TGluZShlbmRSb3cpLmxlbmd0aCk7CiAgICB9OwogICAgdGhpcy5nZXRDb21tZW50UmVnaW9uQmxvY2sgPSBmdW5jdGlvbihzZXNzaW9uLCBsaW5lLCByb3cpIHsKICAgICAgICB2YXIgc3RhcnRDb2x1bW4gPSBsaW5lLnNlYXJjaCgvXHMqJC8pOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICAKICAgICAgICB2YXIgcmUgPSAvXlxzKig/OlwvXCp8XC9cL3wtLSkjPyhlbmQpP3JlZ2lvblxiLzsKICAgICAgICB2YXIgZGVwdGggPSAxOwogICAgICAgIHdoaWxlICgrK3JvdyA8IG1heFJvdykgewogICAgICAgICAgICBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgICAgIHZhciBtID0gcmUuZXhlYyhsaW5lKTsKICAgICAgICAgICAgaWYgKCFtKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKG1bMV0pIGRlcHRoLS07CiAgICAgICAgICAgIGVsc2UgZGVwdGgrKzsKCiAgICAgICAgICAgIGlmICghZGVwdGgpIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICBpZiAoZW5kUm93ID4gc3RhcnRSb3cpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgbGluZS5sZW5ndGgpOwogICAgICAgIH0KICAgIH07Cgp9KS5jYWxsKEZvbGRNb2RlLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUveHF1ZXJ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3dvcmtlci93b3JrZXJfY2xpZW50IiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS94cXVlcnkveHF1ZXJ5X2xleGVyIiwiYWNlL3JhbmdlIiwiYWNlL21vZGUvYmVoYXZpb3VyL3hxdWVyeSIsImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIiwiYWNlL2FuY2hvciJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIFdvcmtlckNsaWVudCA9IHJlcXVpcmUoIi4uL3dvcmtlci93b3JrZXJfY2xpZW50IikuV29ya2VyQ2xpZW50Owp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgVGV4dE1vZGUgPSByZXF1aXJlKCIuL3RleHQiKS5Nb2RlOwp2YXIgVGV4dEhpZ2hsaWdodFJ1bGVzID0gcmVxdWlyZSgiLi90ZXh0X2hpZ2hsaWdodF9ydWxlcyIpLlRleHRIaWdobGlnaHRSdWxlczsKdmFyIFhRdWVyeUxleGVyID0gcmVxdWlyZSgiLi94cXVlcnkveHF1ZXJ5X2xleGVyIikuWFF1ZXJ5TGV4ZXI7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBYUXVlcnlCZWhhdmlvdXIgPSByZXF1aXJlKCIuL2JlaGF2aW91ci94cXVlcnkiKS5YUXVlcnlCZWhhdmlvdXI7CnZhciBDU3R5bGVGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKdmFyIEFuY2hvciA9IHJlcXVpcmUoIi4uL2FuY2hvciIpLkFuY2hvcjsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLiR0b2tlbml6ZXIgICA9IG5ldyBYUXVlcnlMZXhlcigpOwogICAgdGhpcy4kYmVoYXZpb3VyICAgPSBuZXcgWFF1ZXJ5QmVoYXZpb3VyKCk7CiAgICB0aGlzLmZvbGRpbmdSdWxlcyA9IG5ldyBDU3R5bGVGb2xkTW9kZSgpOwogICAgdGhpcy4kaGlnaGxpZ2h0UnVsZXMgPSBuZXcgVGV4dEhpZ2hsaWdodFJ1bGVzKCk7Cn07Cm9vcC5pbmhlcml0cyhNb2RlLCBUZXh0TW9kZSk7CgooZnVuY3Rpb24oKSB7CiAgICAKICAgIHRoaXMuY29tcGxldGVyID0gewogICAgICAgIGdldENvbXBsZXRpb25zOiBmdW5jdGlvbihlZGl0b3IsIHNlc3Npb24sIHBvcywgcHJlZml4LCBjYWxsYmFjaykgewogICAgICAgICAgICBpZiAoIXNlc3Npb24uJHdvcmtlcikKICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOwogICAgICAgICAgICBzZXNzaW9uLiR3b3JrZXIuZW1pdCgiY29tcGxldGUiLCB7IGRhdGE6IHsgcG9zOiBwb3MsIHByZWZpeDogcHJlZml4IH0gfSk7CiAgICAgICAgICAgIHNlc3Npb24uJHdvcmtlci5vbigiY29tcGxldGUiLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIGUuZGF0YSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy5nZXROZXh0TGluZUluZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBsaW5lLCB0YWIpIHsKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGxpbmUpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL1xzKig/OnRoZW58ZWxzZXxyZXR1cm58W3tcKF18PFx3Kz4pXHMqJC8pOwogICAgICAgIGlmIChtYXRjaCkKICAgICAgICAgICAgaW5kZW50ICs9IHRhYjsKICAgICAgICByZXR1cm4gaW5kZW50OwogICAgfTsKICAgIAogICAgdGhpcy5jaGVja091dGRlbnQgPSBmdW5jdGlvbihzdGF0ZSwgbGluZSwgaW5wdXQpIHsKICAgICAgICBpZiAoISAvXlxzKyQvLnRlc3QobGluZSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgcmV0dXJuICgvXlxzKltcfVwpXS8pLnRlc3QoaW5wdXQpOwogICAgfTsKICAgIAogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gZG9jLmdldExpbmUocm93KTsKICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eKFxzKltcfVwpXSkvKTsKCiAgICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuIDA7CgogICAgICAgIHZhciBjb2x1bW4gPSBtYXRjaFsxXS5sZW5ndGg7CiAgICAgICAgdmFyIG9wZW5CcmFjZVBvcyA9IGRvYy5maW5kTWF0Y2hpbmdCcmFja2V0KHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59KTsKCiAgICAgICAgaWYgKCFvcGVuQnJhY2VQb3MgfHwgb3BlbkJyYWNlUG9zLnJvdyA9PSByb3cpIHJldHVybiAwOwoKICAgICAgICB2YXIgaW5kZW50ID0gdGhpcy4kZ2V0SW5kZW50KGRvYy5nZXRMaW5lKG9wZW5CcmFjZVBvcy5yb3cpKTsKICAgICAgICBkb2MucmVwbGFjZShuZXcgUmFuZ2Uocm93LCAwLCByb3csIGNvbHVtbi0xKSwgaW5kZW50KTsKICAgIH07CgogICAgdGhpcy50b2dnbGVDb21tZW50TGluZXMgPSBmdW5jdGlvbihzdGF0ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93KSB7CiAgICAgICAgdmFyIGksIGxpbmU7CiAgICAgICAgdmFyIG91dGRlbnQgPSB0cnVlOwogICAgICAgIHZhciByZSA9IC9eXHMqXCg6KC4qKTpcKS87CgogICAgICAgIGZvciAoaT1zdGFydFJvdzsgaTw9IGVuZFJvdzsgaSsrKSB7CiAgICAgICAgICAgIGlmICghcmUudGVzdChkb2MuZ2V0TGluZShpKSkpIHsKICAgICAgICAgICAgICAgIG91dGRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2UoMCwgMCwgMCwgMCk7CiAgICAgICAgZm9yIChpPXN0YXJ0Um93OyBpPD0gZW5kUm93OyBpKyspIHsKICAgICAgICAgICAgbGluZSA9IGRvYy5nZXRMaW5lKGkpOwogICAgICAgICAgICByYW5nZS5zdGFydC5yb3cgID0gaTsKICAgICAgICAgICAgcmFuZ2UuZW5kLnJvdyAgICA9IGk7CiAgICAgICAgICAgIHJhbmdlLmVuZC5jb2x1bW4gPSBsaW5lLmxlbmd0aDsKCiAgICAgICAgICAgIGRvYy5yZXBsYWNlKHJhbmdlLCBvdXRkZW50ID8gbGluZS5tYXRjaChyZSlbMV0gOiAiKDoiICsgbGluZSArICI6KSIpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuY3JlYXRlV29ya2VyID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIAogICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlckNsaWVudChbImFjZSJdLCAiYWNlL21vZGUveHF1ZXJ5X3dvcmtlciIsICJYUXVlcnlXb3JrZXIiKTsKICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CgogICAgICAgIHdvcmtlci5hdHRhY2hUb0RvY3VtZW50KHNlc3Npb24uZ2V0RG9jdW1lbnQoKSk7CiAgICAgICAgCiAgICAgICAgd29ya2VyLm9uKCJvayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHdvcmtlci5vbigibWFya2VycyIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIHNlc3Npb24uY2xlYXJBbm5vdGF0aW9ucygpOwogICAgICAgICAgdGhhdC5hZGRNYXJrZXJzKGUuZGF0YSwgc2Vzc2lvbik7CiAgICAgICAgfSk7CiAKICAgICAgICB3b3JrZXIub24oImhpZ2hsaWdodCIsIGZ1bmN0aW9uKHRva2VucykgewogICAgICAgICAgdGhhdC4kdG9rZW5pemVyLnRva2VucyA9IHRva2Vucy5kYXRhLnRva2VuczsKICAgICAgICAgIHRoYXQuJHRva2VuaXplci5saW5lcyAgPSBzZXNzaW9uLmdldERvY3VtZW50KCkuZ2V0QWxsTGluZXMoKTsKICAgICAgICAgIAogICAgICAgICAgdmFyIHJvd3MgPSBPYmplY3Qua2V5cyh0aGF0LiR0b2tlbml6ZXIudG9rZW5zKTsKICAgICAgICAgIGZvcih2YXIgaT0wOyBpIDwgcm93cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgcm93ID0gcGFyc2VJbnQocm93c1tpXSk7CiAgICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uLmJnVG9rZW5pemVyLmxpbmVzW3Jvd107CiAgICAgICAgICAgIGRlbGV0ZSBzZXNzaW9uLmJnVG9rZW5pemVyLnN0YXRlc1tyb3ddOwogICAgICAgICAgICBzZXNzaW9uLmJnVG9rZW5pemVyLmZpcmVVcGRhdGVFdmVudChyb3csIHJvdyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHdvcmtlcjsKICAgIH07CgogICAgdGhpcy5yZW1vdmVNYXJrZXJzID0gZnVuY3Rpb24oc2Vzc2lvbikgewogICAgICAgIHZhciBtYXJrZXJzID0gc2Vzc2lvbi5nZXRNYXJrZXJzKGZhbHNlKTsKICAgICAgICBmb3IgKHZhciBpZCBpbiBtYXJrZXJzKSB7CiAgICAgICAgICAgIGlmIChtYXJrZXJzW2lkXS5jbGF6ei5pbmRleE9mKCdsYW5ndWFnZV9oaWdobGlnaHRfJykgPT09IDApIHsKICAgICAgICAgICAgICAgIHNlc3Npb24ucmVtb3ZlTWFya2VyKGlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlc3Npb24ubWFya2VyQW5jaG9ycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBzZXNzaW9uLm1hcmtlckFuY2hvcnNbaV0uZGV0YWNoKCk7CiAgICAgICAgfQogICAgICAgIHNlc3Npb24ubWFya2VyQW5jaG9ycyA9IFtdOwogICAgfTsKCiAgICB0aGlzLmFkZE1hcmtlcnMgPSBmdW5jdGlvbihhbm5vcywgbXlTZXNzaW9uKSB7CiAgICAgICAgdmFyIF9zZWxmID0gdGhpczsKICAgICAgICAKICAgICAgICBpZiAoIW15U2Vzc2lvbi5tYXJrZXJBbmNob3JzKSBteVNlc3Npb24ubWFya2VyQW5jaG9ycyA9IFtdOwogICAgICAgIHRoaXMucmVtb3ZlTWFya2VycyhteVNlc3Npb24pOwogICAgICAgIG15U2Vzc2lvbi5sYW5ndWFnZUFubm9zID0gW107CiAgICAgICAgYW5ub3MuZm9yRWFjaChmdW5jdGlvbihhbm5vKSB7CiAgICAgICAgICAgIHZhciBhbmNob3IgPSBuZXcgQW5jaG9yKG15U2Vzc2lvbi5nZXREb2N1bWVudCgpLCBhbm5vLnBvcy5zbCwgYW5uby5wb3Muc2MgfHwgMCk7CiAgICAgICAgICAgIG15U2Vzc2lvbi5tYXJrZXJBbmNob3JzLnB1c2goYW5jaG9yKTsKICAgICAgICAgICAgdmFyIG1hcmtlcklkOwogICAgICAgICAgICB2YXIgY29sRGlmZiA9IGFubm8ucG9zLmVjIC0gYW5uby5wb3Muc2M7CiAgICAgICAgICAgIHZhciByb3dEaWZmID0gYW5uby5wb3MuZWwgLSBhbm5vLnBvcy5zbDsKICAgICAgICAgICAgdmFyIGd1dHRlckFubm8gPSB7CiAgICAgICAgICAgICAgICBndXR0ZXJ0ZXh0OiBhbm5vLm1lc3NhZ2UsCiAgICAgICAgICAgICAgICB0eXBlOiBhbm5vLmxldmVsIHx8ICJ3YXJuaW5nIiwKICAgICAgICAgICAgICAgIHRleHQ6IGFubm8ubWVzc2FnZQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgZnVuY3Rpb24gdXBkYXRlRmxvYXQoc2luZ2xlKSB7CiAgICAgICAgICAgICAgICBpZiAobWFya2VySWQpCiAgICAgICAgICAgICAgICAgICAgbXlTZXNzaW9uLnJlbW92ZU1hcmtlcihtYXJrZXJJZCk7CiAgICAgICAgICAgICAgICBndXR0ZXJBbm5vLnJvdyA9IGFuY2hvci5yb3c7CiAgICAgICAgICAgICAgICBpZiAoYW5uby5wb3Muc2MgIT09IHVuZGVmaW5lZCAmJiBhbm5vLnBvcy5lYyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFJhbmdlKGFubm8ucG9zLnNsLCBhbm5vLnBvcy5zYywgYW5uby5wb3MuZWwsIGFubm8ucG9zLmVjKTsKICAgICAgICAgICAgICAgICAgICBtYXJrZXJJZCA9IG15U2Vzc2lvbi5hZGRNYXJrZXIocmFuZ2UsICJsYW5ndWFnZV9oaWdobGlnaHRfIiArIChhbm5vLnR5cGUgPyBhbm5vLnR5cGUgOiAiZGVmYXVsdCIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzaW5nbGUpIG15U2Vzc2lvbi5zZXRBbm5vdGF0aW9ucyhteVNlc3Npb24ubGFuZ3VhZ2VBbm5vcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXBkYXRlRmxvYXQoKTsKICAgICAgICAgICAgYW5jaG9yLm9uKCJjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHVwZGF0ZUZsb2F0KHRydWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKGFubm8ubWVzc2FnZSkgbXlTZXNzaW9uLmxhbmd1YWdlQW5ub3MucHVzaChndXR0ZXJBbm5vKTsKICAgICAgICB9KTsKICAgICAgICBteVNlc3Npb24uc2V0QW5ub3RhdGlvbnMobXlTZXNzaW9uLmxhbmd1YWdlQW5ub3MpOwogICAgfTsgICAgCiAgICAgICAgCiAgICB0aGlzLiRpZCA9ICJhY2UvbW9kZS94cXVlcnkiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS94cXVlcnkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-yaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS95YW1sX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFlhbWxIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy4kcnVsZXMgPSB7CiAgICAgICAgInN0YXJ0IiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29tbWVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6ICIjLiokIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJsaXN0Lm1hcmt1cCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9eKD86LXszfXxcLnszfSlccyooPz0jfCQpLwogICAgICAgICAgICB9LCAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAibGlzdC5tYXJrdXAiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXlxzKltcLT9dKD86JHxccykvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQiLAogICAgICAgICAgICAgICAgcmVnZXg6ICIhIVtcXHcvL10rIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lmxhbmd1YWdlIiwKICAgICAgICAgICAgICAgIHJlZ2V4OiAiWyZcXCpdW2EtekEtWjAtOS1fXSsiCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuOiBbIm1ldGEudGFnIiwgImtleXdvcmQiXSwKICAgICAgICAgICAgICAgIHJlZ2V4OiAvXihccypcdy4qPykoOig/PVxzfCQpKS8KICAgICAgICAgICAgfSx7CiAgICAgICAgICAgICAgICB0b2tlbjogWyJtZXRhLnRhZyIsICJrZXl3b3JkIl0sCiAgICAgICAgICAgICAgICByZWdleDogLyhcdys/KShccyo6KD89XHN8JCkpLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIjw8XFx3KjpcXHcqIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogIi1cXHMqKD89W3tdKSIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIGxpbmUKICAgICAgICAgICAgICAgIHJlZ2V4IDogJ1siXSg/Oig/OlxcXFwuKXwoPzpbXiJcXFxcXSkpKj9bIl0nCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInN0cmluZyIsIC8vIG11bHRpIGxpbmUgc3RyaW5nIHN0YXJ0CiAgICAgICAgICAgICAgICByZWdleCA6IC9bfD5dWy0rXGRdKig/OiR8XHMrKD86JHwjKSkvLAogICAgICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2ssIGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKC8gIy4qLywgIiIpOwogICAgICAgICAgICAgICAgICAgIHZhciBpbmRlbnQgPSAvXiAqKCg6XHMqKT8tKFxzKltefD5dKT8pPy8uZXhlYyhsaW5lKVswXQogICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFNccyokLywgIiIpLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZW50YXRpb25JbmRpY2F0b3IgPSBwYXJzZUludCgvXGQrW1xzKy1dKiQvLmV4ZWMobGluZSkpOwogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGlmIChpbmRlbnRhdGlvbkluZGljYXRvcikgewogICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0gaW5kZW50YXRpb25JbmRpY2F0b3IgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAibWxTdHJpbmciOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9ICJtbFN0cmluZ1ByZSI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5uZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChpbmRlbnQpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzBdID0gdGhpcy5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICBzdGFja1sxXSA9IGluZGVudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbmV4dCA6ICJtbFN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAic3RyaW5nIiwgLy8gc2luZ2xlIHF1b3RlZCBzdHJpbmcKICAgICAgICAgICAgICAgIHJlZ2V4IDogIlsnXSg/Oig/OlxcXFwuKXwoPzpbXidcXFxcXSkpKj9bJ10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImNvbnN0YW50Lm51bWVyaWMiLCAvLyBmbG9hdAogICAgICAgICAgICAgICAgcmVnZXggOiAvKFxifFsrXC1cLl0pW1xkX10rKD86KD86XC5bXGRfXSopPyg/OltlRV1bK1wtXT9bXGRfXSspPykoPz1bXlxkLVx3XXwkKS8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubnVtZXJpYyIsIC8vIG90aGVyIG51bWJlcgogICAgICAgICAgICAgICAgcmVnZXggOiAvWytcLV0/XC5pbmZcYnxOYU5cYnwweFtcZEEtRmEtZl9dK3wwYlsxMF9dKy8KICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiY29uc3RhbnQubGFuZ3VhZ2UuYm9vbGVhbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJcXGIoPzp0cnVlfGZhbHNlfFRSVUV8RkFMU0V8VHJ1ZXxGYWxzZXx5ZXN8bm8pXFxiIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJwYXJlbi5scGFyZW4iLAogICAgICAgICAgICAgICAgcmVnZXggOiAiW1soe10iCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogInBhcmVuLnJwYXJlbiIsCiAgICAgICAgICAgICAgICByZWdleCA6ICJbXFxdKX1dIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJ0ZXh0IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL1teXHMsOlxbXF1ce1x9XSsvCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJtbFN0cmluZ1ByZSIgOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImluZGVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9eICokLwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJpbmRlbnQiLAogICAgICAgICAgICAgICAgcmVnZXggOiAvXiAqLywKICAgICAgICAgICAgICAgIG9uTWF0Y2g6IGZ1bmN0aW9uKHZhbCwgc3RhdGUsIHN0YWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckluZGVudCA9IHN0YWNrWzFdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoY3VySW5kZW50ID49IHZhbC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gInN0YXJ0IjsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrWzFdID0gdmFsLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHN0YWNrWzBdID0gIm1sU3RyaW5nIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9rZW47CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgbmV4dCA6ICJtbFN0cmluZyIKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgZGVmYXVsdFRva2VuIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgIm1sU3RyaW5nIiA6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9rZW4gOiAiaW5kZW50IiwKICAgICAgICAgICAgICAgIHJlZ2V4IDogL14gKiQvCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgIHRva2VuIDogImluZGVudCIsCiAgICAgICAgICAgICAgICByZWdleCA6IC9eICovLAogICAgICAgICAgICAgICAgb25NYXRjaDogZnVuY3Rpb24odmFsLCBzdGF0ZSwgc3RhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgY3VySW5kZW50ID0gc3RhY2tbMV07CgogICAgICAgICAgICAgICAgICAgIGlmIChjdXJJbmRlbnQgPj0gdmFsLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAic3RhcnQiOwogICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5zcGxpY2UoMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQgPSAibWxTdHJpbmciOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2tlbjsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBuZXh0IDogIm1sU3RyaW5nIgogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICB0b2tlbiA6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgcmVnZXggOiAnLisnCiAgICAgICAgICAgIH0KICAgICAgICBdfTsKICAgIHRoaXMubm9ybWFsaXplUnVsZXMoKTsKCn07Cgpvb3AuaW5oZXJpdHMoWWFtbEhpZ2hsaWdodFJ1bGVzLCBUZXh0SGlnaGxpZ2h0UnVsZXMpOwoKZXhwb3J0cy5ZYW1sSGlnaGxpZ2h0UnVsZXMgPSBZYW1sSGlnaGxpZ2h0UnVsZXM7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9tYXRjaGluZ19icmFjZV9vdXRkZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL3JhbmdlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuLi9yYW5nZSIpLlJhbmdlOwoKdmFyIE1hdGNoaW5nQnJhY2VPdXRkZW50ID0gZnVuY3Rpb24oKSB7fTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLmNoZWNrT3V0ZGVudCA9IGZ1bmN0aW9uKGxpbmUsIGlucHV0KSB7CiAgICAgICAgaWYgKCEgL15ccyskLy50ZXN0KGxpbmUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIHJldHVybiAvXlxzKlx9Ly50ZXN0KGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKGRvYywgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBkb2MuZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14oXHMqXH0pLyk7CgogICAgICAgIGlmICghbWF0Y2gpIHJldHVybiAwOwoKICAgICAgICB2YXIgY29sdW1uID0gbWF0Y2hbMV0ubGVuZ3RoOwogICAgICAgIHZhciBvcGVuQnJhY2VQb3MgPSBkb2MuZmluZE1hdGNoaW5nQnJhY2tldCh7cm93OiByb3csIGNvbHVtbjogY29sdW1ufSk7CgogICAgICAgIGlmICghb3BlbkJyYWNlUG9zIHx8IG9wZW5CcmFjZVBvcy5yb3cgPT0gcm93KSByZXR1cm4gMDsKCiAgICAgICAgdmFyIGluZGVudCA9IHRoaXMuJGdldEluZGVudChkb2MuZ2V0TGluZShvcGVuQnJhY2VQb3Mucm93KSk7CiAgICAgICAgZG9jLnJlcGxhY2UobmV3IFJhbmdlKHJvdywgMCwgcm93LCBjb2x1bW4tMSksIGluZGVudCk7CiAgICB9OwoKICAgIHRoaXMuJGdldEluZGVudCA9IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICByZXR1cm4gbGluZS5tYXRjaCgvXlxzKi8pWzBdOwogICAgfTsKCn0pLmNhbGwoTWF0Y2hpbmdCcmFjZU91dGRlbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuTWF0Y2hpbmdCcmFjZU91dGRlbnQgPSBNYXRjaGluZ0JyYWNlT3V0ZGVudDsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSIsImFjZS9yYW5nZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7CnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uLy4uL3JhbmdlIikuUmFuZ2U7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oKSB7fTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldFJhbmdlID0gZnVuY3Rpb24oc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpIHsKICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLmluZGVudGF0aW9uQmxvY2soc2Vzc2lvbiwgcm93KTsKICAgICAgICBpZiAocmFuZ2UpCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKCiAgICAgICAgdmFyIHJlID0gL1xTLzsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIHZhciBzdGFydExldmVsID0gbGluZS5zZWFyY2gocmUpOwogICAgICAgIGlmIChzdGFydExldmVsID09IC0xIHx8IGxpbmVbc3RhcnRMZXZlbF0gIT0gIiMiKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHZhciBtYXhSb3cgPSBzZXNzaW9uLmdldExlbmd0aCgpOwogICAgICAgIHZhciBzdGFydFJvdyA9IHJvdzsKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwoKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgbGV2ZWwgPSBsaW5lLnNlYXJjaChyZSk7CgogICAgICAgICAgICBpZiAobGV2ZWwgPT0gLTEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChsaW5lW2xldmVsXSAhPSAiIyIpCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CgogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICB2YXIgZW5kQ29sdW1uID0gc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmdldEZvbGRXaWRnZXQgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIGluZGVudCA9IGxpbmUuc2VhcmNoKC9cUy8pOwogICAgICAgIHZhciBuZXh0ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyArIDEpOwogICAgICAgIHZhciBwcmV2ID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyAtIDEpOwogICAgICAgIHZhciBwcmV2SW5kZW50ID0gcHJldi5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIG5leHRJbmRlbnQgPSBuZXh0LnNlYXJjaCgvXFMvKTsKCiAgICAgICAgaWYgKGluZGVudCA9PSAtMSkgewogICAgICAgICAgICBzZXNzaW9uLmZvbGRXaWRnZXRzW3JvdyAtIDFdID0gcHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBuZXh0SW5kZW50ID8gInN0YXJ0IiA6ICIiOwogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICAgIGlmIChwcmV2SW5kZW50ID09IC0xKSB7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT0gbmV4dEluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIG5leHRbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAiIjsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93ICsgMV0gPSAiIjsKICAgICAgICAgICAgICAgIHJldHVybiAic3RhcnQiOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChwcmV2SW5kZW50ID09IGluZGVudCAmJiBsaW5lW2luZGVudF0gPT0gIiMiICYmIHByZXZbaW5kZW50XSA9PSAiIyIpIHsKICAgICAgICAgICAgaWYgKHNlc3Npb24uZ2V0TGluZShyb3cgLSAyKS5zZWFyY2goL1xTLykgPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgKyAxXSA9ICIiOwogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAocHJldkluZGVudCE9IC0xICYmIHByZXZJbmRlbnQgPCBpbmRlbnQpCiAgICAgICAgICAgIHNlc3Npb24uZm9sZFdpZGdldHNbcm93IC0gMV0gPSAic3RhcnQiOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc2Vzc2lvbi5mb2xkV2lkZ2V0c1tyb3cgLSAxXSA9ICIiOwoKICAgICAgICBpZiAoaW5kZW50IDwgbmV4dEluZGVudCkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICB9OwoKfSkuY2FsbChGb2xkTW9kZS5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3lhbWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL29vcCIsImFjZS9tb2RlL3RleHQiLCJhY2UvbW9kZS95YW1sX2hpZ2hsaWdodF9ydWxlcyIsImFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQiLCJhY2UvbW9kZS9mb2xkaW5nL2NvZmZlZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFlhbWxIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4veWFtbF9oaWdobGlnaHRfcnVsZXMiKS5ZYW1sSGlnaGxpZ2h0UnVsZXM7CnZhciBNYXRjaGluZ0JyYWNlT3V0ZGVudCA9IHJlcXVpcmUoIi4vbWF0Y2hpbmdfYnJhY2Vfb3V0ZGVudCIpLk1hdGNoaW5nQnJhY2VPdXRkZW50Owp2YXIgRm9sZE1vZGUgPSByZXF1aXJlKCIuL2ZvbGRpbmcvY29mZmVlIikuRm9sZE1vZGU7Cgp2YXIgTW9kZSA9IGZ1bmN0aW9uKCkgewogICAgdGhpcy5IaWdobGlnaHRSdWxlcyA9IFlhbWxIaWdobGlnaHRSdWxlczsKICAgIHRoaXMuJG91dGRlbnQgPSBuZXcgTWF0Y2hpbmdCcmFjZU91dGRlbnQoKTsKICAgIHRoaXMuZm9sZGluZ1J1bGVzID0gbmV3IEZvbGRNb2RlKCk7CiAgICB0aGlzLiRiZWhhdmlvdXIgPSB0aGlzLiRkZWZhdWx0QmVoYXZpb3VyOwp9Owpvb3AuaW5oZXJpdHMoTW9kZSwgVGV4dE1vZGUpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9IFsiIyJdOwogICAgCiAgICB0aGlzLmdldE5leHRMaW5lSW5kZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIHRhYikgewogICAgICAgIHZhciBpbmRlbnQgPSB0aGlzLiRnZXRJbmRlbnQobGluZSk7CgogICAgICAgIGlmIChzdGF0ZSA9PSAic3RhcnQiKSB7CiAgICAgICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2goL14uKltce1woXFtdXHMqJC8pOwogICAgICAgICAgICBpZiAobWF0Y2gpIHsKICAgICAgICAgICAgICAgIGluZGVudCArPSB0YWI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbmRlbnQ7CiAgICB9OwoKICAgIHRoaXMuY2hlY2tPdXRkZW50ID0gZnVuY3Rpb24oc3RhdGUsIGxpbmUsIGlucHV0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG91dGRlbnQuY2hlY2tPdXRkZW50KGxpbmUsIGlucHV0KTsKICAgIH07CgogICAgdGhpcy5hdXRvT3V0ZGVudCA9IGZ1bmN0aW9uKHN0YXRlLCBkb2MsIHJvdykgewogICAgICAgIHRoaXMuJG91dGRlbnQuYXV0b091dGRlbnQoZG9jLCByb3cpOwogICAgfTsKCgogICAgdGhpcy4kaWQgPSAiYWNlL21vZGUveWFtbCI7Cn0pLmNhbGwoTW9kZS5wcm90b3R5cGUpOwoKZXhwb3J0cy5Nb2RlID0gTW9kZTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS95YW1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/modes/mode-zeek.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvbW9kZS96ZWVrX2hpZ2hsaWdodF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvb29wIiwiYWNlL21vZGUvdGV4dF9oaWdobGlnaHRfcnVsZXMiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBUZXh0SGlnaGxpZ2h0UnVsZXMgPSByZXF1aXJlKCIuL3RleHRfaGlnaGxpZ2h0X3J1bGVzIikuVGV4dEhpZ2hsaWdodFJ1bGVzOwoKdmFyIFplZWtIaWdobGlnaHRSdWxlcyA9IGZ1bmN0aW9uKCkgewoKICAgIHRoaXMuJHJ1bGVzID0gewogICAgICAgICJzdGFydCI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImNvbW1lbnQubGluZSIsCiAgICAgICAgICAgIHJlZ2V4OiAiIy4qJCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5kb3VibGUiLAogICAgICAgICAgICByZWdleDogLyIvLAogICAgICAgICAgICBuZXh0OiAic3RyaW5nLXN0YXRlIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgIHJlZ2V4OiAiKC8pKD89LiovKSIsCiAgICAgICAgICAgIG5leHQ6ICJwYXR0ZXJuLXN0YXRlIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbImtleXdvcmQub3RoZXIiLCAibWV0YS5wcmVwcm9jZXNzb3IiXSwKICAgICAgICAgICAgcmVnZXg6IC8oQCg/OmxvYWQtcGx1Z2lufGxvYWQtc2lnc3xsb2FkfHVubG9hZCkpKC4qJCkvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgcmVnZXg6IC9AKD86REVCVUd8RElSfEZJTEVOQU1FfGRlcHJlY2F0ZWR8aWZ8aWZkZWZ8aWZuZGVmfGVsc2V8ZW5kaWYpLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAibWV0YS5wcmVwcm9jZXNzb3IiLAogICAgICAgICAgICAgICAgImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICAgICAgIm1ldGEucHJlcHJvY2Vzc29yIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogLyhAcHJlZml4ZXMpKFxzKikoXCs/PSkoLiokKS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0b3JhZ2UubW9kaWZpZXIuYXR0cmlidXRlIiwKICAgICAgICAgICAgcmVnZXg6IC9cJlxiKD86cmVkZWZ8cHJpb3JpdHl8bG9nfG9wdGlvbmFsfGRlZmF1bHR8YWRkX2Z1bmN8ZGVsZXRlX2Z1bmN8ZXhwaXJlX2Z1bmN8cmVhZF9leHBpcmV8d3JpdGVfZXhwaXJlfGNyZWF0ZV9leHBpcmV8c3luY2hyb25pemVkfHBlcnNpc3RlbnR8cm90YXRlX2ludGVydmFsfHJvdGF0ZV9zaXplfGVuY3J5cHR8cmF3X291dHB1dHxtZXJnZWFibGV8ZXJyb3JfaGFuZGxlcnx0eXBlX2NvbHVtbnxkZXByZWNhdGVkKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubGFuZ3VhZ2UiLAogICAgICAgICAgICByZWdleDogL1xiKD86VHxGKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5wb3J0IiwKICAgICAgICAgICAgcmVnZXg6IC9cYlxkezEsNX1cLyg/OnVkcHx0Y3B8aWNtcHx1bmtub3duKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5hZGRyIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAtMV1bMC05XXsyfXxbMC05XXsxLDJ9KVwuKD86MjVbMC01XXwyWzAtNF1bMC05XXxbMC0xXVswLTldezJ9fFswLTldezEsMn0pXC4oPzoyNVswLTVdfDJbMC00XVswLTldfFswLTFdWzAtOV17Mn18WzAtOV17MSwyfSlcLig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAtMV1bMC05XXsyfXxbMC05XXsxLDJ9KVxiLywKICAgICAgICAgICAgY29tbWVudDogIklQdjQgYWRkcmVzcyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMuYWRkciIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFsoPzpbMC05YS1mQS1GXXswLDR9Oil7Miw3fSg/OlswLTlhLWZBLUZdezAsNH0pPyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAtMV1bMC05XXsyfXxbMC05XXsxLDJ9KVwuKD86MjVbMC01XXwyWzAtNF1bMC05XXxbMC0xXVswLTldezJ9fFswLTldezEsMn0pXC4oPzoyNVswLTVdfDJbMC00XVswLTldfFswLTFdWzAtOV17Mn18WzAtOV17MSwyfSlcLig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAtMV1bMC05XXsyfXxbMC05XXsxLDJ9KSk/XF0vLAogICAgICAgICAgICBjb21tZW50OiAiSVB2NiBhZGRyZXNzIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5mbG9hdC5kZWNpbWFsLmludGVydmFsIiwKICAgICAgICAgICAgcmVnZXg6IC8oPzooPzpcZCpcLlxkKig/OltlRV1bKy1dP1xkKyk/fFxkKltlRV1bKy1dP1xkK3xcZCpcLlxkKil8XGQrKVxzKig/OmRheXxocnxtaW58bXNlY3x1c2VjfHNlYylzPy8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImNvbnN0YW50Lm51bWVyaWMuZmxvYXQuZGVjaW1hbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGQqXC5cZCooPzpbZUVdWystXT9cZCspP3xcZCpbZUVdWystXT9cZCt8XGQqXC5cZCovCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljLmhvc3RuYW1lIiwKICAgICAgICAgICAgcmVnZXg6IC9cYltBLVphLXowLTldW0EtWmEtejAtOVwtXSooPzpcLltBLVphLXowLTldW0EtWmEtejAtOVwtXSopK1xiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQubnVtZXJpYy5pbnRlZ2VyLmhleGFkZWNpbWFsIiwKICAgICAgICAgICAgcmVnZXg6IC9cYjB4WzAtOWEtZkEtRl0rXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5udW1lcmljLmludGVnZXIuZGVjaW1hbCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXGJcZCtcYi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogLz09fCE9fDw9fDx8Pj18Pi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogLygmJil8KFx8XHwpfCghKS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogLz18XCs9fC09LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCtcK3xcK3wtLXwtfFwqfFwvfCUvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6IC8mfFx8fFxefH4vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OmlufGFzfGlzKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24udGVybWluYXRvciIsCiAgICAgICAgICAgIHJlZ2V4OiAvOy8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmFjY2Vzc29yIiwKICAgICAgICAgICAgcmVnZXg6IC9cPz9cJC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLmFjY2Vzc29yIiwKICAgICAgICAgICAgcmVnZXg6IC86Oi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogImtleXdvcmQub3BlcmF0b3IiLAogICAgICAgICAgICByZWdleDogL1w/LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uc2VwYXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6IC86LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uc2VwYXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6IC8sLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAibWV0YS5uYW1lc3BhY2UiLAogICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLm5hbWVzcGFjZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC8obW9kdWxlKShccyspKFtBLVphLXpfXVtBLVphLXpfMC05XSooPzo6OltBLVphLXpfXVtBLVphLXpfMC05XSopKikvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgcmVnZXg6IC9cYmV4cG9ydFxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sLmNvbmRpdGlvbmFsIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OmlmfGVsc2UpXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wiLAogICAgICAgICAgICByZWdleDogL1xiKD86Zm9yfHdoaWxlKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OnJldHVybnxicmVha3xuZXh0fGNvbnRpbnVlfGZhbGx0aHJvdWdoKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAia2V5d29yZC5jb250cm9sIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OnN3aXRjaHxkZWZhdWx0fGNhc2UpXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OmFkZHxkZWxldGUpXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgcmVnZXg6IC9cYnByaW50XGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLmNvbnRyb2wiLAogICAgICAgICAgICByZWdleDogL1xiKD86d2hlbnx0aW1lb3V0fHNjaGVkdWxlKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAibWV0YS5zdHJ1Y3QucmVjb3JkIiwKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5zdHJ1Y3QucmVjb3JkIiwKICAgICAgICAgICAgICAgICJtZXRhLnN0cnVjdC5yZWNvcmQiLAogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLnNlcGFyYXRvciIsCiAgICAgICAgICAgICAgICAibWV0YS5zdHJ1Y3QucmVjb3JkIiwKICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUuc3RydWN0LnJlY29yZCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC9cYih0eXBlKShccyspKFtBLVphLXpfXVtBLVphLXpfMC05XSooPzo6OltBLVphLXpfXVtBLVphLXpfMC05XSopKikoXHMqKSg6KShccypcYikocmVjb3JkKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAia2V5d29yZC5vdGhlciIsCiAgICAgICAgICAgICAgICAibWV0YS5lbnVtIiwKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5lbnVtIiwKICAgICAgICAgICAgICAgICJtZXRhLmVudW0iLAogICAgICAgICAgICAgICAgInB1bmN0dWF0aW9uLnNlcGFyYXRvciIsCiAgICAgICAgICAgICAgICAibWV0YS5lbnVtIiwKICAgICAgICAgICAgICAgICJzdG9yYWdlLnR5cGUuZW51bSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC9cYih0eXBlKShccyspKFtBLVphLXpfXVtBLVphLXpfMC05XSooPzo6OltBLVphLXpfXVtBLVphLXpfMC05XSopKikoXHMqKSg6KShccypcYikoZW51bSlcYi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgImtleXdvcmQub3RoZXIiLAogICAgICAgICAgICAgICAgIm1ldGEudHlwZSIsCiAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUudHlwZSIsCiAgICAgICAgICAgICAgICAibWV0YS50eXBlIiwKICAgICAgICAgICAgICAgICJwdW5jdHVhdGlvbi5zZXBhcmF0b3IiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvXGIodHlwZSkoXHMrKShbQS1aYS16X11bQS1aYS16XzAtOV0qKD86OjpbQS1aYS16X11bQS1aYS16XzAtOV0qKSopKFxzKikoOikvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46IFsKICAgICAgICAgICAgICAgICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgICAgICJtZXRhLnN0cnVjdC5yZWNvcmQiLAogICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZS5zdHJ1Y3QucmVjb3JkIiwKICAgICAgICAgICAgICAgICJtZXRhLnN0cnVjdC5yZWNvcmQiLAogICAgICAgICAgICAgICAgImVudGl0eS5uYW1lLnN0cnVjdC5yZWNvcmQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvXGIocmVkZWYpKFxzKykocmVjb3JkKShccyspKFtBLVphLXpfXVtBLVphLXpfMC05XSooPzo6OltBLVphLXpfXVtBLVphLXpfMC05XSopKilcYi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgImtleXdvcmQub3RoZXIiLAogICAgICAgICAgICAgICAgIm1ldGEuZW51bSIsCiAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlLmVudW0iLAogICAgICAgICAgICAgICAgIm1ldGEuZW51bSIsCiAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUuZW51bSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC9cYihyZWRlZikoXHMrKShlbnVtKShccyspKFtBLVphLXpfXVtBLVphLXpfMC05XSooPzo6OltBLVphLXpfXVtBLVphLXpfMC05XSopKilcYi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAiZW50aXR5Lm5hbWUuZnVuY3Rpb24uZXZlbnQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHJlZ2V4OiAvXGIoZXZlbnQpKFxzKykoW0EtWmEtel9dW0EtWmEtel8wLTldKig/Ojo6W0EtWmEtel9dW0EtWmEtel8wLTldKikqKSg/PXMqXCgpLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbi5ob29rIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogL1xiKGhvb2spKFxzKykoW0EtWmEtel9dW0EtWmEtel8wLTldKig/Ojo6W0EtWmEtel9dW0EtWmEtel8wLTldKikqKSg/PXMqXCgpLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiBbCiAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgICAgICJ0ZXh0IiwKICAgICAgICAgICAgICAgICJlbnRpdHkubmFtZS5mdW5jdGlvbiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgcmVnZXg6IC9cYihmdW5jdGlvbikoXHMrKShbQS1aYS16X11bQS1aYS16XzAtOV0qKD86OjpbQS1aYS16X11bQS1aYS16XzAtOV0qKSopKD89cypcKCkvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm90aGVyIiwKICAgICAgICAgICAgcmVnZXg6IC9cYnJlZGVmXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICByZWdleDogL1xiYW55XGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICByZWdleDogL1xiKD86ZW51bXxyZWNvcmR8c2V0fHRhYmxlfHZlY3RvcilcYi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogWwogICAgICAgICAgICAgICAgInN0b3JhZ2UudHlwZSIsCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAia2V5d29yZC5vcGVyYXRvciIsCiAgICAgICAgICAgICAgICAidGV4dCIsCiAgICAgICAgICAgICAgICAic3RvcmFnZS50eXBlIgogICAgICAgICAgICBdLAogICAgICAgICAgICByZWdleDogL1xiKG9wYXF1ZSkoXHMrKShvZikoXHMrKShbQS1aYS16X11bQS1aYS16XzAtOV0qKD86OjpbQS1aYS16X11bQS1aYS16XzAtOV0qKSopXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJrZXl3b3JkLm9wZXJhdG9yIiwKICAgICAgICAgICAgcmVnZXg6IC9cYm9mXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLnR5cGUiLAogICAgICAgICAgICByZWdleDogL1xiKD86YWRkcnxib29sfGNvdW50fGRvdWJsZXxmaWxlfGludHxpbnRlcnZhbHxwYXR0ZXJufHBvcnR8c3RyaW5nfHN1Ym5ldHx0aW1lKVxiLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3RvcmFnZS50eXBlIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/OmZ1bmN0aW9ufGhvb2t8ZXZlbnQpXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdG9yYWdlLm1vZGlmaWVyIiwKICAgICAgICAgICAgcmVnZXg6IC9cYig/Omdsb2JhbHxsb2NhbHxjb25zdHxvcHRpb24pXGIvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJlbnRpdHkubmFtZS5mdW5jdGlvbi5jYWxsIiwKICAgICAgICAgICAgcmVnZXg6IC9cYltBLVphLXpfXVtBLVphLXpfMC05XSooPzo6OltBLVphLXpfXVtBLVphLXpfMC05XSopKig/PXMqXCgpLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAicHVuY3R1YXRpb24uc2VjdGlvbi5ibG9jay5iZWdpbiIsCiAgICAgICAgICAgIHJlZ2V4OiAvXHsvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5zZWN0aW9uLmJsb2NrLmVuZCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXH0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJwdW5jdHVhdGlvbi5zZWN0aW9uLmJyYWNrZXRzLmJlZ2luIiwKICAgICAgICAgICAgcmVnZXg6IC9cWy8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnNlY3Rpb24uYnJhY2tldHMuZW5kIiwKICAgICAgICAgICAgcmVnZXg6IC9cXS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnNlY3Rpb24ucGFyZW5zLmJlZ2luIiwKICAgICAgICAgICAgcmVnZXg6IC9cKC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInB1bmN0dWF0aW9uLnNlY3Rpb24ucGFyZW5zLmVuZCIsCiAgICAgICAgICAgIHJlZ2V4OiAvXCkvCiAgICAgICAgICAgIH0KCiAgICAgICAgXSwgLy8gc3RhdGU6IHN0YXJ0CgogICAgICAgICJzdHJpbmctc3RhdGUiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJjb25zdGFudC5jaGFyYWN0ZXIuZXNjYXBlIiwKICAgICAgICAgICAgcmVnZXg6IC9cXC4vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgdG9rZW46ICJzdHJpbmcuZG91YmxlIiwKICAgICAgICAgICAgcmVnZXg6IC8iLywKICAgICAgICAgICAgbmV4dDogInN0YXJ0IgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQub3RoZXIucGxhY2Vob2xkZXIiLAogICAgICAgICAgICByZWdleDogLyUtP1swLTldKihcLlswLTldKyk/W0RUZHhzZWZnXS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5kb3VibGUiLAogICAgICAgICAgICByZWdleDogIi4iCiAgICAgICAgICAgIH0KICAgICAgICBdLCAvLyBzdGF0ZTogc3RyaW5nLXN0YXRlCgogICAgICAgICJwYXR0ZXJuLXN0YXRlIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAiY29uc3RhbnQuY2hhcmFjdGVyLmVzY2FwZSIsCiAgICAgICAgICAgIHJlZ2V4OiAvXFwuLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgIHRva2VuOiAic3RyaW5nLnJlZ2V4cCIsCiAgICAgICAgICAgIHJlZ2V4OiAiLyIsCiAgICAgICAgICAgIG5leHQ6ICJzdGFydCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICB0b2tlbjogInN0cmluZy5yZWdleHAiLAogICAgICAgICAgICByZWdleDogIi4iCiAgICAgICAgICAgIH0KICAgICAgICBdIC8vIHN0YXRlOiBwYXR0ZXJuLXN0YXRlCgogICAgfTsKCiAgICB0aGlzLm5vcm1hbGl6ZVJ1bGVzKCk7Cn07CgpaZWVrSGlnaGxpZ2h0UnVsZXMubWV0YURhdGEgPSB7CiAgICBmaWxlVHlwZXM6IFsiYnJvIiwgInplZWsiXSwKICAgIG5hbWU6ICJaZWVrIiwKICAgIHNjb3BlTmFtZTogInNvdXJjZS56ZWVrIgp9OwoKCm9vcC5pbmhlcml0cyhaZWVrSGlnaGxpZ2h0UnVsZXMsIFRleHRIaWdobGlnaHRSdWxlcyk7CgpleHBvcnRzLlplZWtIaWdobGlnaHRSdWxlcyA9IFplZWtIaWdobGlnaHRSdWxlczsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2ZvbGRpbmcvY3N0eWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvcmFuZ2UiLCJhY2UvbW9kZS9mb2xkaW5nL2ZvbGRfbW9kZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uLy4uL2xpYi9vb3AiKTsKdmFyIFJhbmdlID0gcmVxdWlyZSgiLi4vLi4vcmFuZ2UiKS5SYW5nZTsKdmFyIEJhc2VGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZF9tb2RlIikuRm9sZE1vZGU7Cgp2YXIgRm9sZE1vZGUgPSBleHBvcnRzLkZvbGRNb2RlID0gZnVuY3Rpb24oY29tbWVudFJlZ2V4KSB7CiAgICBpZiAoY29tbWVudFJlZ2V4KSB7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RhcnRNYXJrZXIgPSBuZXcgUmVnRXhwKAogICAgICAgICAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlci5zb3VyY2UucmVwbGFjZSgvXHxbXnxdKj8kLywgInwiICsgY29tbWVudFJlZ2V4LnN0YXJ0KQogICAgICAgICk7CiAgICAgICAgdGhpcy5mb2xkaW5nU3RvcE1hcmtlciA9IG5ldyBSZWdFeHAoCiAgICAgICAgICAgIHRoaXMuZm9sZGluZ1N0b3BNYXJrZXIuc291cmNlLnJlcGxhY2UoL1x8W158XSo/JC8sICJ8IiArIGNvbW1lbnRSZWdleC5lbmQpCiAgICAgICAgKTsKICAgIH0KfTsKb29wLmluaGVyaXRzKEZvbGRNb2RlLCBCYXNlRm9sZE1vZGUpOwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLmZvbGRpbmdTdGFydE1hcmtlciA9IC8oW1x7XFtcKF0pW15cfVxdXCldKiR8XlxzKihcL1wqKS87CiAgICB0aGlzLmZvbGRpbmdTdG9wTWFya2VyID0gL15bXlxbXHtcKF0qKFtcfVxdXCldKXxeW1xzXCpdKihcKlwvKS87CiAgICB0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZT0gL15ccyooXC9cKikuKlwqXC9ccyokLzsKICAgIHRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlID0gL15ccyooXC9cKlwqXCopLipcKlwvXHMqJC87CiAgICB0aGlzLnN0YXJ0UmVnaW9uUmUgPSAvXlxzKihcL1wqfFwvXC8pIz9yZWdpb25cYi87CiAgICB0aGlzLl9nZXRGb2xkV2lkZ2V0QmFzZSA9IHRoaXMuZ2V0Rm9sZFdpZGdldDsKICAgIHRoaXMuZ2V0Rm9sZFdpZGdldCA9IGZ1bmN0aW9uKHNlc3Npb24sIGZvbGRTdHlsZSwgcm93KSB7CiAgICAgICAgdmFyIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgIAogICAgICAgIGlmICh0aGlzLnNpbmdsZUxpbmVCbG9ja0NvbW1lbnRSZS50ZXN0KGxpbmUpKSB7CiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydFJlZ2lvblJlLnRlc3QobGluZSkgJiYgIXRoaXMudHJpcGxlU3RhckJsb2NrQ29tbWVudFJlLnRlc3QobGluZSkpCiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgCiAgICAgICAgdmFyIGZ3ID0gdGhpcy5fZ2V0Rm9sZFdpZGdldEJhc2Uoc2Vzc2lvbiwgZm9sZFN0eWxlLCByb3cpOwogICAgCiAgICAgICAgaWYgKCFmdyAmJiB0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuICJzdGFydCI7IC8vIGxpbmVDb21tZW50UmVnaW9uU3RhcnQKICAgIAogICAgICAgIHJldHVybiBmdzsKICAgIH07CgogICAgdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2UgPSBmdW5jdGlvbihzZXNzaW9uLCBmb2xkU3R5bGUsIHJvdywgZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICB2YXIgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgIAogICAgICAgIGlmICh0aGlzLnN0YXJ0UmVnaW9uUmUudGVzdChsaW5lKSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudFJlZ2lvbkJsb2NrKHNlc3Npb24sIGxpbmUsIHJvdyk7CiAgICAgICAgCiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCh0aGlzLmZvbGRpbmdTdGFydE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVuaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciByYW5nZSA9IHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGkgKyBtYXRjaFswXS5sZW5ndGgsIDEpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS5pc011bHRpTGluZSgpKSB7CiAgICAgICAgICAgICAgICBpZiAoZm9yY2VNdWx0aWxpbmUpIHsKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuZ2V0U2VjdGlvblJhbmdlKHNlc3Npb24sIHJvdyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRTdHlsZSAhPSAiYWxsIikKICAgICAgICAgICAgICAgICAgICByYW5nZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICB9CgogICAgICAgIGlmIChmb2xkU3R5bGUgPT09ICJtYXJrYmVnaW4iKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBtYXRjaCA9IGxpbmUubWF0Y2godGhpcy5mb2xkaW5nU3RvcE1hcmtlcik7CiAgICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgICAgIHZhciBpID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7CgogICAgICAgICAgICBpZiAobWF0Y2hbMV0pCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zaW5nQnJhY2tldEJsb2NrKHNlc3Npb24sIG1hdGNoWzFdLCByb3csIGkpOwoKICAgICAgICAgICAgcmV0dXJuIHNlc3Npb24uZ2V0Q29tbWVudEZvbGRSYW5nZShyb3csIGksIC0xKTsKICAgICAgICB9CiAgICB9OwogICAgCiAgICB0aGlzLmdldFNlY3Rpb25SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24sIHJvdykgewogICAgICAgIHZhciBsaW5lID0gc2Vzc2lvbi5nZXRMaW5lKHJvdyk7CiAgICAgICAgdmFyIHN0YXJ0SW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUubGVuZ3RoOwogICAgICAgIHJvdyA9IHJvdyArIDE7CiAgICAgICAgdmFyIGVuZFJvdyA9IHJvdzsKICAgICAgICB2YXIgbWF4Um93ID0gc2Vzc2lvbi5nZXRMZW5ndGgoKTsKICAgICAgICB3aGlsZSAoKytyb3cgPCBtYXhSb3cpIHsKICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZ2V0TGluZShyb3cpOwogICAgICAgICAgICB2YXIgaW5kZW50ID0gbGluZS5zZWFyY2goL1xTLyk7CiAgICAgICAgICAgIGlmIChpbmRlbnQgPT09IC0xKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmICAoc3RhcnRJbmRlbnQgPiBpbmRlbnQpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgdmFyIHN1YlJhbmdlID0gdGhpcy5nZXRGb2xkV2lkZ2V0UmFuZ2Uoc2Vzc2lvbiwgImFsbCIsIHJvdyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3ViUmFuZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChzdWJSYW5nZS5zdGFydC5yb3cgPD0gc3RhcnRSb3cpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViUmFuZ2UuaXNNdWx0aUxpbmUoKSkgewogICAgICAgICAgICAgICAgICAgIHJvdyA9IHN1YlJhbmdlLmVuZC5yb3c7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0SW5kZW50ID09IGluZGVudCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVuZFJvdyA9IHJvdzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgc2Vzc2lvbi5nZXRMaW5lKGVuZFJvdykubGVuZ3RoKTsKICAgIH07CiAgICB0aGlzLmdldENvbW1lbnRSZWdpb25CbG9jayA9IGZ1bmN0aW9uKHNlc3Npb24sIGxpbmUsIHJvdykgewogICAgICAgIHZhciBzdGFydENvbHVtbiA9IGxpbmUuc2VhcmNoKC9ccyokLyk7CiAgICAgICAgdmFyIG1heFJvdyA9IHNlc3Npb24uZ2V0TGVuZ3RoKCk7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gcm93OwogICAgICAgIAogICAgICAgIHZhciByZSA9IC9eXHMqKD86XC9cKnxcL1wvfC0tKSM/KGVuZCk/cmVnaW9uXGIvOwogICAgICAgIHZhciBkZXB0aCA9IDE7CiAgICAgICAgd2hpbGUgKCsrcm93IDwgbWF4Um93KSB7CiAgICAgICAgICAgIGxpbmUgPSBzZXNzaW9uLmdldExpbmUocm93KTsKICAgICAgICAgICAgdmFyIG0gPSByZS5leGVjKGxpbmUpOwogICAgICAgICAgICBpZiAoIW0pIGNvbnRpbnVlOwogICAgICAgICAgICBpZiAobVsxXSkgZGVwdGgtLTsKICAgICAgICAgICAgZWxzZSBkZXB0aCsrOwoKICAgICAgICAgICAgaWYgKCFkZXB0aCkgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB2YXIgZW5kUm93ID0gcm93OwogICAgICAgIGlmIChlbmRSb3cgPiBzdGFydFJvdykgewogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBsaW5lLmxlbmd0aCk7CiAgICAgICAgfQogICAgfTsKCn0pLmNhbGwoRm9sZE1vZGUucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS96ZWVrIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9vb3AiLCJhY2UvbW9kZS90ZXh0IiwiYWNlL21vZGUvemVla19oaWdobGlnaHRfcnVsZXMiLCJhY2UvbW9kZS9mb2xkaW5nL2NzdHlsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIFRleHRNb2RlID0gcmVxdWlyZSgiLi90ZXh0IikuTW9kZTsKdmFyIFplZWtIaWdobGlnaHRSdWxlcyA9IHJlcXVpcmUoIi4vemVla19oaWdobGlnaHRfcnVsZXMiKS5aZWVrSGlnaGxpZ2h0UnVsZXM7CnZhciBGb2xkTW9kZSA9IHJlcXVpcmUoIi4vZm9sZGluZy9jc3R5bGUiKS5Gb2xkTW9kZTsKCnZhciBNb2RlID0gZnVuY3Rpb24oKSB7CiAgICB0aGlzLkhpZ2hsaWdodFJ1bGVzID0gWmVla0hpZ2hsaWdodFJ1bGVzOwogICAgdGhpcy5mb2xkaW5nUnVsZXMgPSBuZXcgRm9sZE1vZGUoKTsKfTsKb29wLmluaGVyaXRzKE1vZGUsIFRleHRNb2RlKTsKCihmdW5jdGlvbigpIHsKICAgIHRoaXMubGluZUNvbW1lbnRTdGFydCA9ICIjIjsKICAgIHRoaXMuJGlkID0gImFjZS9tb2RlL3plZWsiOwp9KS5jYWxsKE1vZGUucHJvdG90eXBlKTsKCmV4cG9ydHMuTW9kZSA9IE1vZGU7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvbW9kZS96ZWVrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/Readme.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QWNlIChBamF4Lm9yZyBDbG91ZDkgRWRpdG9yKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09ClshW0NETkpTXShodHRwczovL2ltZy5zaGllbGRzLmlvL2NkbmpzL3YvYWNlLnN2ZyldKGh0dHBzOi8vY2RuanMuY29tL2xpYnJhcmllcy9hY2UpClshW25wbV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vdi9hY2UtYnVpbGRzLnN2ZyldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2FjZS1idWlsZHMpCgpBY2UgaXMgYSBjb2RlIGVkaXRvciB3cml0dGVuIGluIEphdmFTY3JpcHQuCgpUaGlzIHJlcG9zaXRvcnkgaGFzIG9ubHkgZ2VuZXJhdGVkIGZpbGVzLgpJZiB5b3Ugd2FudCB0byB3b3JrIG9uIGFjZSBwbGVhc2UgZ28gdG8gaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlIGluc3RlYWQuCgoKaGVyZSB5b3UgY2FuIGZpbmQgcHJlLWJ1aWx0IGZpbGVzIGZvciBjb252ZW5pZW5jZSBvZiBlbWJlZGRpbmcuCml0IGNvbnRhaW5zIDQgdmVyc2lvbnMKICogW3NyY10oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlLWJ1aWxkcy90cmVlL21hc3Rlci9zcmMpICAgICAgICAgICAgICBjb25jYXRlbmF0ZWQgYnV0IG5vdCBtaW5pZmllZAogKiBbc3JjLW1pbl0oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlLWJ1aWxkcy90cmVlL21hc3Rlci9zcmMtbWluKSAgICAgIGNvbmNhdGVuYXRlZCBhbmQgbWluaWZpZWQgd2l0aCB1Z2xpZnkuanMKICogW3NyYy1ub2NvbmZsaWN0XShodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UtYnVpbGRzL3RyZWUvbWFzdGVyL3NyYy1ub2NvbmZsaWN0KSAgICAgIHVzZXMgYWNlLnJlcXVpcmUgaW5zdGVhZCBvZiByZXF1aXJlCiAqIFtzcmMtbWluLW5vY29uZmxpY3RdKGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS1idWlsZHMvdHJlZS9tYXN0ZXIvc3JjLW1pbi1ub2NvbmZsaWN0KSAgICAgIGNvbmNhdGVuYXRlZCwgbWluaWZpZWQgd2l0aCB1Z2xpZnkuanMsIGFuZCB1c2VzIGFjZS5yZXF1aXJlIGluc3RlYWQgb2YgcmVxdWlyZQoKCkZvciBhIHNpbXBsZSB3YXkgb2YgZW1iZWRkaW5nIGFjZSBpbnRvIHdlYnBhZ2Ugc2VlIFtlZGl0b3IuaHRtbF0oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlLWJ1aWxkcy9ibG9iL21hc3Rlci9lZGl0b3IuaHRtbCkgb3IgbGlzdCBvZiBvdGhlciBbc2ltcGxlIGV4YW1wbGVzXShodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UtYnVpbGRzL3RyZWUvbWFzdGVyL2RlbW8pClRvIHNlZSBhY2UgaW4gYWN0aW9uIGdvIHRvIFtraXRjaGVuLXNpbmstZGVtb10oaHR0cDovL2FqYXhvcmcuZ2l0aHViLmNvbS9hY2UtYnVpbGRzL2tpdGNoZW4tc2luay5odG1sKSwgW3Njcm9sbGFibGUtcGFnZS1kZW1vXShodHRwOi8vYWpheG9yZy5naXRodWIuY29tL2FjZS1idWlsZHMvZGVtby9zY3JvbGxhYmxlLXBhZ2UuaHRtbCkgb3IgW21pbmltYWwgZGVtb10oaHR0cDovL2FqYXhvcmcuZ2l0aHViLmNvbS9hY2UtYnVpbGRzL2VkaXRvci5odG1sKSwKCgo=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ace/snippets/abap.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYWJhcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImFiYXAiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9hYmFwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/abc.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYWJjIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIlxuXApzbmlwcGV0IHp1cGZub3Rlci5wcmludFxuXAoJJSUlJWhuLnByaW50IHtcInN0YXJ0cG9zXCI6ICR7MTpwb3NfeX0sIFwidFwiOlwiJHsyOnRpdGxlfVwiLCBcInZcIjpbJHszOnZvaWNlc31dLCBcInNcIjpbWyR7NDpzeW5jdm9pY2VzfTEsMl1dLCBcImZcIjpbJHs1OmZsb3dsaW5lc31dLCAgXCJzZlwiOlskezY6c3ViZmxvd2xpbmVzfV0sIFwialwiOlskezc6anVtcGxpbmVzfV19XG5cClxuXApzbmlwcGV0IHp1cGZub3Rlci5ub3RlXG5cCgklJSUlaG4ubm90ZSB7XCJwb3NcIjogWyR7MTpwb3NfeH0sJHsyOnBvc195fV0sIFwidGV4dFwiOiBcIiR7Mzp0ZXh0fVwiLCBcInN0eWxlXCI6IFwiJHs0OnN0eWxlfVwifVxuXApcblwKc25pcHBldCB6dXBmbm90ZXIuYW5ub3RhdGlvblxuXAoJJSUlJWhuLmFubm90YXRpb24ge1wiaWRcIjogXCIkezE6aWR9XCIsIFwicG9zXCI6IFskezI6cG9zfV0sIFwidGV4dFwiOiBcIiR7Mzp0ZXh0fVwifVxuXApcblwKc25pcHBldCB6dXBmbm90ZXIubHlyaWNzXG5cCgklJSUlaG4ubHlyaWNzIHtcInBvc1wiOiBbJHsxOnhfcG9zfSwkezI6eV9wb3N9XX1cblwKXG5cCnNuaXBwZXQgenVwZm5vdGVyLmxlZ2VuZFxuXAoJJSUlJWhuLmxlZ2VuZCB7XCJwb3NcIjogWyR7MTp4X3Bvc30sJHsyOnlfcG9zfV19XG5cClxuXApcblwKXG5cCnNuaXBwZXQgenVwZm5vdGVyLnRhcmdldFxuXAoJXCJeOiR7MTp0YXJnZXR9XCJcblwKXG5cCnNuaXBwZXQgenVwZm5vdGVyLmdvdG9cblwKCVwiXkAkezE6dGFyZ2V0fUAkezI6ZGlzdGFuY2V9XCJcblwKXG5cCnNuaXBwZXQgenVwZm5vdGVyLmFubm90YXRpb25yZWZcblwKCVwiXiMkezE6dGFyZ2V0fVwiXG5cClxuXApzbmlwcGV0IHp1cGZub3Rlci5hbm5vdGF0aW9uXG5cCglcIl4hJHsxOnRleHR9QCR7Mjp4X29mZnNldH0sJHszOnlfb2Zmc2V0fVwiXG5cClxuXApcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJhYmMiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9hYmMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/actionscript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYWN0aW9uc2NyaXB0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgbWFpblxuXAoJcGFja2FnZSB7XG5cCgkJaW1wb3J0IGZsYXNoLmRpc3BsYXkuKjtcblwKCQlpbXBvcnQgZmxhc2guRXZlbnRzLio7XG5cCglcblwKCQlwdWJsaWMgY2xhc3MgTWFpbiBleHRlbmRzIFNwcml0ZSB7XG5cCgkJCXB1YmxpYyBmdW5jdGlvbiBNYWluICgJKSB7XG5cCgkJCQl0cmFjZShcInN0YXJ0XCIpO1xuXAoJCQkJc3RhZ2Uuc2NhbGVNb2RlID0gU3RhZ2VTY2FsZU1vZGUuTk9fU0NBTEU7XG5cCgkJCQlzdGFnZS5hZGRFdmVudExpc3RlbmVyKEV2ZW50LlJFU0laRSwgcmVzaXplTGlzdGVuZXIpO1xuXAoJCQl9XG5cCglcblwKCQkJcHJpdmF0ZSBmdW5jdGlvbiByZXNpemVMaXN0ZW5lciAoZTpFdmVudCk6dm9pZCB7XG5cCgkJCQl0cmFjZShcIlRoZSBhcHBsaWNhdGlvbiB3aW5kb3cgY2hhbmdlZCBzaXplIVwiKTtcblwKCQkJCXRyYWNlKFwiTmV3IHdpZHRoOiAgXCIgKyBzdGFnZS5zdGFnZVdpZHRoKTtcblwKCQkJCXRyYWNlKFwiTmV3IGhlaWdodDogXCIgKyBzdGFnZS5zdGFnZUhlaWdodCk7XG5cCgkJCX1cblwKCVxuXAoJCX1cblwKCVxuXAoJfVxuXApzbmlwcGV0IGNsYXNzXG5cCgkkezE6cHVibGljfGludGVybmFsfSBjbGFzcyAkezI6bmFtZX0gJHszOmV4dGVuZHMgfSB7XG5cCgkJcHVibGljIGZ1bmN0aW9uICQyICgJKSB7XG5cCgkJCShcInN0YXJ0XCIpO1xuXAoJCX1cblwKCX1cblwKc25pcHBldCBhbGxcblwKCXBhY2thZ2UgbmFtZSB7XG5cClxuXAoJCSR7MTpwdWJsaWN8aW50ZXJuYWx8ZmluYWx9IGNsYXNzICR7MjpuYW1lfSAkezM6ZXh0ZW5kcyB9IHtcblwKCQkJcHJpdmF0ZXxwdWJsaWN8IHN0YXRpYyBjb25zdCBGT08gPSBcImFiY1wiO1xuXAoJCQlwcml2YXRlfHB1YmxpY3wgc3RhdGljIHZhciBCQVIgPSBcImFiY1wiO1xuXApcblwKCQkJLy8gY2xhc3MgaW5pdGlhbGl6ZXIgLSBubyBKSVQgISEgb25lIHRpbWUgc2V0dXBcblwKCQkJaWYgQ2FiYWJpbGl0aWVzLm9zID09IFwiTGludXh8TWFjT1NcIiB7XG5cCgkJCQlGT08gPSBcIm90aGVyXCI7XG5cCgkJCX1cblwKXG5cCgkJCS8vIGNvbnN0cnVjdG9yOlxuXAoJCQlwdWJsaWMgZnVuY3Rpb24gJDIgKAkpe1xuXAoJCQkJc3VwZXIyKCk7XG5cCgkJCQl0cmFjZShcInN0YXJ0XCIpO1xuXAoJCQl9XG5cCgkJCXB1YmxpYyBmdW5jdGlvbiBuYW1lIChhLCBiLi4uKXtcblwKCQkJCXN1cGVyLm5hbWUoLi4pO1xuXAoJCQkJbGFibGU6YnJlYWtcblwKCQkJfVxuXAoJCX1cblwKCX1cblwKXG5cCglmdW5jdGlvbiBBKCl7XG5cCgkJLy8gQSBjYW4gb25seSBiZSBhY2Nlc3NlZCB3aXRoaW4gdGhpcyBmaWxlXG5cCgl9XG5cCnNuaXBwZXQgc3dpdGNoXG5cCglzd2l0Y2goJHsxfSl7XG5cCgkJY2FzZSAkezJ9OlxuXAoJCQkkezN9XG5cCgkJYnJlYWs7XG5cCgkJZGVmYXVsdDpcblwKCX1cblwKc25pcHBldCBjYXNlXG5cCgkJY2FzZSAkezF9OlxuXAoJCQkkezJ9XG5cCgkJYnJlYWs7XG5cCnNuaXBwZXQgcGFja2FnZVxuXAoJcGFja2FnZSAkezE6cGFja2FnZX17XG5cCgkJJHsyfVxuXAoJfVxuXApzbmlwcGV0IHdoXG5cCgl3aGlsZSAkezE6Y29uZH17XG5cCgkJJHsyfVxuXAoJfVxuXApzbmlwcGV0IGRvXG5cCglkbyB7XG5cCgkJJHsyfVxuXAoJfSB3aGlsZSAoJHsxOmNvbmR9KVxuXApzbmlwcGV0IHdoaWxlXG5cCgl3aGlsZSAkezE6Y29uZH17XG5cCgkJJHsyfVxuXAoJfVxuXApzbmlwcGV0IGZvciBlbnVtZXJhdGUgbmFtZXNcblwKCWZvciAoJHsxOnZhcn0gaW4gJHsyOm9iamVjdH0pe1xuXAoJCSR7M31cblwKCX1cblwKc25pcHBldCBmb3IgZW51bWVyYXRlIHZhbHVlc1xuXAoJZm9yIGVhY2ggKCR7MTp2YXJ9IGluICR7MjpvYmplY3R9KXtcblwKCQkkezN9XG5cCgl9XG5cCnNuaXBwZXQgZ2V0X3NldFxuXAoJZnVuY3Rpb24gZ2V0ICR7MTpuYW1lfSB7XG5cCgkJcmV0dXJuICR7Mn1cblwKCX1cblwKCWZ1bmN0aW9uIHNldCAkMSAobmV3VmFsdWUpIHtcblwKCQkkezN9XG5cCgl9XG5cCnNuaXBwZXQgaW50ZXJmYWNlXG5cCglpbnRlcmZhY2UgbmFtZSB7XG5cCgkJZnVuY3Rpb24gbWV0aG9kKCR7MX0pOiR7MjpyZXR1cm50eXBlfTtcblwKCX1cblwKc25pcHBldCB0cnlcblwKCXRyeSB7XG5cCgkJJHsxfVxuXAoJfSBjYXRjaCAoZXJyb3I6RXJyb3JUeXBlKSB7XG5cCgkJJHsyfVxuXAoJfSBmaW5hbGx5IHtcblwKCQkkezN9XG5cCgl9XG5cCiMgRm9yIExvb3AgKHNhbWUgYXMgYy5zbmlwcGV0KVxuXApzbmlwcGV0IGZvciBmb3IgKC4uKSB7Li59XG5cCglmb3IgKCR7MjppfSA9IDA7ICQyIDwgJHsxOmNvdW50fTsgJDIkezM6Kyt9KSB7XG5cCgkJJHs0Oi8qIGNvZGUgKi99XG5cCgl9XG5cCiMgQ3VzdG9tIEZvciBMb29wXG5cCnNuaXBwZXQgZm9yclxuXAoJZm9yICgkezE6aX0gPSAkezI6MH07ICR7MzokMSA8IDEwfTsgJDEkezQ6Kyt9KSB7XG5cCgkJJHs1Oi8qIGNvZGUgKi99XG5cCgl9XG5cCiMgSWYgQ29uZGl0aW9uXG5cCnNuaXBwZXQgaWZcblwKCWlmICgkezE6LyogY29uZGl0aW9uICovfSkge1xuXAoJCSR7MjovKiBjb2RlICovfVxuXAoJfVxuXApzbmlwcGV0IGVsXG5cCgllbHNlIHtcblwKCQkkezF9XG5cCgl9XG5cCiMgVGVybmFyeSBjb25kaXRpb25hbFxuXApzbmlwcGV0IHRcblwKCSR7MTovKiBjb25kaXRpb24gKi99ID8gJHsyOmF9IDogJHszOmJ9XG5cCnNuaXBwZXQgZnVuXG5cCglmdW5jdGlvbiAkezE6ZnVuY3Rpb25fbmFtZX0oJHsyfSkkezN9XG5cCgl7XG5cCgkJJHs0Oi8qIGNvZGUgKi99XG5cCgl9XG5cCiMgRmx4U3ByaXRlICh1c2VmdWxsIHdoZW4gdXNpbmcgdGhlIGZsaXhlbCBsaWJyYXJ5KVxuXApzbmlwcGV0IEZseFNwcml0ZVxuXAoJcGFja2FnZVxuXAoJe1xuXAoJCWltcG9ydCBvcmcuZmxpeGVsLipcblwKXG5cCgkJcHVibGljIGNsYXNzICR7MTpDbGFzc05hbWV9IGV4dGVuZHMgJHsyOkZseFNwcml0ZX1cblwKCQl7XG5cCgkJCXB1YmxpYyBmdW5jdGlvbiAkMSgkezM6IFg6TnVtYmVyLCBZOk51bWJlcn0pOnZvaWRcblwKCQkJe1xuXAoJCQkJc3VwZXIoWCxZKTtcblwKCQkJCSR7NDogLy9jb2RlLi4ufVxuXAoJCQl9XG5cClxuXAoJCQlvdmVycmlkZSBwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKCk6dm9pZFxuXAoJCQl7XG5cCgkJCQlzdXBlci51cGRhdGUoKTtcblwKCQkJCSR7NTogLy9jb2RlLi4ufVxuXAoJCQl9XG5cCgkJfVxuXAoJfVxuXApcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJhY3Rpb25zY3JpcHQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9hY3Rpb25zY3JpcHQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/ada.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYWRhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiYWRhIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvYWRhIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/apache_conf.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXBhY2hlX2NvbmYiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJhcGFjaGVfY29uZiI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2FwYWNoZV9jb25mIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/apex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXBleCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImFwZXgiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9hcGV4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/applescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXBwbGVzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJhcHBsZXNjcmlwdCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2FwcGxlc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/aql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiYXFsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvYXFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/asciidoc.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXNjaWlkb2MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJhc2NpaWRvYyI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2FzY2lpZG9jIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/asl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXNsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uIChyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICBleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CiAgICBleHBvcnRzLnNjb3BlID0gImFzbCI7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvYXNsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/assembly_x86.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXNzZW1ibHlfeDg2IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiYXNzZW1ibHlfeDg2IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvYXNzZW1ibHlfeDg2Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/autohotkey.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYXV0b2hvdGtleSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImF1dG9ob3RrZXkiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9hdXRvaG90a2V5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/batchfile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYmF0Y2hmaWxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiYmF0Y2hmaWxlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvYmF0Y2hmaWxlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/bro.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYnJvIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvYnJvIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/c9search.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvYzlzZWFyY2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJjOXNlYXJjaCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2M5c2VhcmNoIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/cirru.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY2lycnUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJjaXJydSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2NpcnJ1Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY2xvanVyZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICJzbmlwcGV0IGNvbW1cblwKCShjb21tZW50XG5cCgkgICR7MX1cblwKCSAgKVxuXApzbmlwcGV0IGNvbmRwXG5cCgkoY29uZHAgJHsxOnByZWR9ICR7MjpleHByfVxuXAoJICAkezN9KVxuXApzbmlwcGV0IGRlZlxuXAoJKGRlZiAkezF9KVxuXApzbmlwcGV0IGRlZm1cblwKCShkZWZtZXRob2QgJHsxOm11bHRpZm59IFwiJHsyOmRvYy1zdHJpbmd9XCIgJHszOmRpc3BhdGNoLXZhbH0gWyR7NDphcmdzfV1cblwKCSAgJHs1fSlcblwKc25pcHBldCBkZWZtbVxuXAoJKGRlZm11bHRpICR7MTpuYW1lfSBcIiR7Mjpkb2Mtc3RyaW5nfVwiICR7MzpkaXNwYXRjaC1mbn0pXG5cCnNuaXBwZXQgZGVmbWFcblwKCShkZWZtYWNybyAkezE6bmFtZX0gXCIkezI6ZG9jLXN0cmluZ31cIiAkezM6ZGlzcGF0Y2gtZm59KVxuXApzbmlwcGV0IGRlZm5cblwKCShkZWZuICR7MTpuYW1lfSBcIiR7Mjpkb2Mtc3RyaW5nfVwiIFskezM6YXJnLWxpc3R9XVxuXAoJICAkezR9KVxuXApzbmlwcGV0IGRlZnBcblwKCShkZWZwcm90b2NvbCAkezE6bmFtZX1cblwKCSAgJHsyfSlcblwKc25pcHBldCBkZWZyXG5cCgkoZGVmcmVjb3JkICR7MTpuYW1lfSBbJHsyOmZpZWxkc31dXG5cCgkgICR7Mzpwcm90b2NvbH1cblwKCSAgJHs0fSlcblwKc25pcHBldCBkZWZ0XG5cCgkoZGVmdGVzdCAkezE6bmFtZX1cblwKCSAgICAoaXMgKD0gJHsyOmFzc2VydGlvbn0pKSlcblwKCSAgJHszfSlcblwKc25pcHBldCBpc1xuXAoJKGlzICg9ICR7MX0gJHsyfSkpXG5cCnNuaXBwZXQgZGVmdHlcblwKCShkZWZ0eXBlICR7MTpOYW1lfSBbJHsyOmZpZWxkc31dXG5cCgkgICR7MzpQcm90b2NvbH1cblwKCSAgJHs0fSlcblwKc25pcHBldCBkb3NlcVxuXAoJKGRvc2VxIFskezE6ZWxlbX0gJHsyOmNvbGx9XVxuXAoJICAkezN9KVxuXApzbmlwcGV0IGZuXG5cCgkoZm4gWyR7MTphcmctbGlzdH1dICR7Mn0pXG5cCnNuaXBwZXQgaWZcblwKCShpZiAkezE6dGVzdC1leHByfVxuXAoJICAkezI6dGhlbi1leHByfVxuXAoJICAkezM6ZWxzZS1leHByfSlcblwKc25pcHBldCBpZi1sZXQgXG5cCgkoaWYtbGV0IFskezE6cmVzdWx0fSAkezI6dGVzdC1leHByfV1cblwKCQkoJHszOnRoZW4tZXhwcn0gJDEpXG5cCgkJKCR7NDplbHNlLWV4cHJ9KSlcblwKc25pcHBldCBpbXBcblwKCSg6aW1wb3J0IFskezE6cGFja2FnZX1dKVxuXAoJJiB7OmtleXMgWyR7MTprZXlzfV0gOm9yIHskezI6ZGVmYXVsdHN9fX1cblwKc25pcHBldCBsZXRcblwKCShsZXQgWyR7MTpuYW1lfSAkezI6ZXhwcn1dXG5cCgkJJHszfSlcblwKc25pcHBldCBsZXRmblxuXAoJKGxldGZuIFsoJHsxOm5hbWUpIFskezI6YXJnc31dXG5cCgkgICAgICAgICAgJHszfSldKVxuXApzbmlwcGV0IG1hcFxuXAoJKG1hcCAkezE6ZnVuY30gJHsyOmNvbGx9KVxuXApzbmlwcGV0IG1hcGxcblwKCShtYXAgIygkezE6bGFtYmRhfSkgJHsyOmNvbGx9KVxuXApzbmlwcGV0IG1ldFxuXAoJKCR7MTpuYW1lfSBbJHsyOnRoaXN9ICR7MzphcmdzfV1cblwKCSAgJHs0fSlcblwKc25pcHBldCBuc1xuXAoJKG5zICR7MTpuYW1lfVxuXAoJICAkezJ9KVxuXApzbmlwcGV0IGRvdGltZXNcblwKCShkb3RpbWVzIFtfIDEwXVxuXAoJICAodGltZVxuXAoJICAgIChkb3RpbWVzIFtfICR7MTp0aW1lc31dXG5cCgkgICAgICAkezJ9KSkpXG5cCnNuaXBwZXQgcG1ldGhvZFxuXAoJKCR7MTpuYW1lfSBbJHsyOnRoaXN9ICR7MzphcmdzfV0pXG5cCnNuaXBwZXQgcmVmZXJcblwKCSg6cmVmZXItY2xvanVyZSA6ZXhjbHVkZSBbJHsxfV0pXG5cCnNuaXBwZXQgcmVxdWlyZVxuXAoJKDpyZXF1aXJlIFskezE6bmFtZXNwYWNlfSA6YXMgWyR7Mn1dXSlcblwKc25pcHBldCB1c2VcblwKCSg6dXNlIFskezE6bmFtZXNwYWNlfSA6b25seSBbJHsyfV1dKVxuXApzbmlwcGV0IHByaW50XG5cCgkocHJpbnRsbiAkezF9KVxuXApzbmlwcGV0IHJlZHVjZVxuXAoJKHJlZHVjZSAkezE6KGZuIFtwIG5dICR7M30pfSAkezJ9KVxuXApzbmlwcGV0IHdoZW5cblwKCSh3aGVuICR7MTp0ZXN0fSAkezI6Ym9keX0pXG5cCnNuaXBwZXQgd2hlbi1sZXRcblwKCSh3aGVuLWxldCBbJHsxOnJlc3VsdH0gJHsyOnRlc3R9XVxuXAoJCSR7Mzpib2R5fSlcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJjbG9qdXJlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvY2xvanVyZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/cobol.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY29ib2wiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJjb2JvbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2NvYm9sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/coffee.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY29mZmVlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgQ2xvc3VyZSBsb29wXG5cCnNuaXBwZXQgZm9yaW5kb1xuXAoJZm9yICR7MTpuYW1lfSBpbiAkezI6YXJyYXl9XG5cCgkJZG8gKCQxKSAtPlxuXAoJCQkkezM6Ly8gYm9keX1cblwKIyBBcnJheSBjb21wcmVoZW5zaW9uXG5cCnNuaXBwZXQgZm9yYVxuXAoJZm9yICR7MTpuYW1lfSBpbiAkezI6YXJyYXl9XG5cCgkJJHszOi8vIGJvZHkuLi59XG5cCiMgT2JqZWN0IGNvbXByZWhlbnNpb25cblwKc25pcHBldCBmb3JvXG5cCglmb3IgJHsxOmtleX0sICR7Mjp2YWx1ZX0gb2YgJHszOm9iamVjdH1cblwKCQkkezQ6Ly8gYm9keS4uLn1cblwKIyBSYW5nZSBjb21wcmVoZW5zaW9uIChpbmNsdXNpdmUpXG5cCnNuaXBwZXQgZm9yclxuXAoJZm9yICR7MTpuYW1lfSBpbiBbJHsyOnN0YXJ0fS4uJHszOmZpbmlzaH1dXG5cCgkJJHs0Oi8vIGJvZHkuLi59XG5cCnNuaXBwZXQgZm9ycmJcblwKCWZvciAkezE6bmFtZX0gaW4gWyR7MjpzdGFydH0uLiR7MzpmaW5pc2h9XSBieSAkezQ6c3RlcH1cblwKCQkkezU6Ly8gYm9keS4uLn1cblwKIyBSYW5nZSBjb21wcmVoZW5zaW9uIChleGNsdXNpdmUpXG5cCnNuaXBwZXQgZm9ycmV4XG5cCglmb3IgJHsxOm5hbWV9IGluIFskezI6c3RhcnR9Li4uJHszOmZpbmlzaH1dXG5cCgkJJHs0Oi8vIGJvZHkuLi59XG5cCnNuaXBwZXQgZm9ycmV4YlxuXAoJZm9yICR7MTpuYW1lfSBpbiBbJHsyOnN0YXJ0fS4uLiR7MzpmaW5pc2h9XSBieSAkezQ6c3RlcH1cblwKCQkkezU6Ly8gYm9keS4uLn1cblwKIyBGdW5jdGlvblxuXApzbmlwcGV0IGZ1blxuXAoJKCR7MTphcmdzfSkgLT5cblwKCQkkezI6Ly8gYm9keS4uLn1cblwKIyBGdW5jdGlvbiAoYm91bmQpXG5cCnNuaXBwZXQgYmZ1blxuXAoJKCR7MTphcmdzfSkgPT5cblwKCQkkezI6Ly8gYm9keS4uLn1cblwKIyBDbGFzc1xuXApzbmlwcGV0IGNsYSBjbGFzcyAuLlxuXAoJY2xhc3MgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCksICdcXChfXFx8XlxcKVxcKC5cXCknLCAnXFx1XFwyJywgJ2cnKWB9XG5cCgkJJHsyfVxuXApzbmlwcGV0IGNsYSBjbGFzcyAuLiBjb25zdHJ1Y3RvcjogLi5cblwKCWNsYXNzICR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgpLCAnXFwoX1xcfF5cXClcXCguXFwpJywgJ1xcdVxcMicsICdnJylgfVxuXAoJCWNvbnN0cnVjdG9yOiAoJHsyOmFyZ3N9KSAtPlxuXAoJCQkkezN9XG5cClxuXAoJCSR7NH1cblwKc25pcHBldCBjbGEgY2xhc3MgLi4gZXh0ZW5kcyAuLlxuXAoJY2xhc3MgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCksICdcXChfXFx8XlxcKVxcKC5cXCknLCAnXFx1XFwyJywgJ2cnKWB9IGV4dGVuZHMgJHsyOlBhcmVudENsYXNzfVxuXAoJCSR7M31cblwKc25pcHBldCBjbGEgY2xhc3MgLi4gZXh0ZW5kcyAuLiBjb25zdHJ1Y3RvcjogLi5cblwKCWNsYXNzICR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgpLCAnXFwoX1xcfF5cXClcXCguXFwpJywgJ1xcdVxcMicsICdnJylgfSBleHRlbmRzICR7MjpQYXJlbnRDbGFzc31cblwKCQljb25zdHJ1Y3RvcjogKCR7MzphcmdzfSkgLT5cblwKCQkJJHs0fVxuXApcblwKCQkkezV9XG5cCiMgSWZcblwKc25pcHBldCBpZlxuXAoJaWYgJHsxOmNvbmRpdGlvbn1cblwKCQkkezI6Ly8gYm9keS4uLn1cblwKIyBJZiBfXyBFbHNlXG5cCnNuaXBwZXQgaWZlXG5cCglpZiAkezE6Y29uZGl0aW9ufVxuXAoJCSR7MjovLyBib2R5Li4ufVxuXAoJZWxzZVxuXAoJCSR7MzovLyBib2R5Li4ufVxuXAojIEVsc2UgaWZcblwKc25pcHBldCBlbGlmXG5cCgllbHNlIGlmICR7MTpjb25kaXRpb259XG5cCgkJJHsyOi8vIGJvZHkuLi59XG5cCiMgVGVybmFyeSBJZlxuXApzbmlwcGV0IGlmdGVcblwKCWlmICR7MTpjb25kaXRpb259IHRoZW4gJHsyOnZhbHVlfSBlbHNlICR7MzpvdGhlcn1cblwKIyBVbmxlc3NcblwKc25pcHBldCB1bmxcblwKCSR7MTphY3Rpb259IHVubGVzcyAkezI6Y29uZGl0aW9ufVxuXAojIFN3aXRjaFxuXApzbmlwcGV0IHN3aVxuXAoJc3dpdGNoICR7MTpvYmplY3R9XG5cCgkJd2hlbiAkezI6dmFsdWV9XG5cCgkJCSR7MzovLyBib2R5Li4ufVxuXApcblwKIyBMb2dcblwKc25pcHBldCBsb2dcblwKCWNvbnNvbGUubG9nICR7MX1cblwKIyBUcnkgX18gQ2F0Y2hcblwKc25pcHBldCB0cnlcblwKCXRyeVxuXAoJCSR7MX1cblwKCWNhdGNoICR7MjplcnJvcn1cblwKCQkkezN9XG5cCiMgUmVxdWlyZVxuXApzbmlwcGV0IHJlcVxuXAoJJHsyOiQxfSA9IHJlcXVpcmUgJyR7MTpzeXN9JyR7M31cblwKIyBFeHBvcnRcblwKc25pcHBldCBleHBcblwKCSR7MTpyb290fSA9IGV4cG9ydHMgPyB0aGlzXG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiY29mZmVlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvY29mZmVlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/coldfusion.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY29sZGZ1c2lvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImNvbGRmdXNpb24iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9jb2xkZnVzaW9uIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/crystal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3J5c3RhbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImNyeXN0YWwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9jcnlzdGFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/csharp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3NoYXJwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiY3NoYXJwIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvY3NoYXJwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/csound_document.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3NvdW5kX2RvY3VtZW50IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgPENzb3VuZFN5bnRoZXNpemVyPlxuXApzbmlwcGV0IHN5bnRoXG5cCgk8Q3NvdW5kU3ludGhlc2l6ZXI+XG5cCgk8Q3NJbnN0cnVtZW50cz5cblwKCSR7MX1cblwKCTwvQ3NJbnN0cnVtZW50cz5cblwKCTxDc1Njb3JlPlxuXAoJZVxuXAoJPC9Dc1Njb3JlPlxuXAoJPC9Dc291bmRTeW50aGVzaXplcj5cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJjc291bmRfZG9jdW1lbnQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9jc291bmRfZG9jdW1lbnQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/csound_orchestra.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3NvdW5kX29yY2hlc3RyYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIGVsc2VcblwKc25pcHBldCBlbHNlXG5cCgllbHNlXG5cCgkJJHsxOi8qIHN0YXRlbWVudHMgKi99XG5cCiMgZWxzZWlmXG5cCnNuaXBwZXQgZWxzZWlmXG5cCgllbHNlaWYgJHsxOi8qIGNvbmRpdGlvbiAqL30gdGhlblxuXAoJCSR7MjovKiBzdGF0ZW1lbnRzICovfVxuXAojIGlmXG5cCnNuaXBwZXQgaWZcblwKCWlmICR7MTovKiBjb25kaXRpb24gKi99IHRoZW5cblwKCQkkezI6Lyogc3RhdGVtZW50cyAqL31cblwKCWVuZGlmXG5cCiMgaW5zdHJ1bWVudCBibG9ja1xuXApzbmlwcGV0IGluc3RyXG5cCglpbnN0ciAkezE6bmFtZX1cblwKCQkkezI6Lyogc3RhdGVtZW50cyAqL31cblwKCWVuZGluXG5cCiMgaS10aW1lIHdoaWxlIGxvb3BcblwKc25pcHBldCBpd2hpbGVcblwKCWkkezE6SW5kZXh9ID0gJHsyOjB9XG5cCgl3aGlsZSBpJHsxOkluZGV4fSA8ICR7MzovKiBjb3VudCAqL30gZG9cblwKCQkkezQ6Lyogc3RhdGVtZW50cyAqL31cblwKCQlpJHsxOkluZGV4fSArPSAxXG5cCglvZFxuXAojIGstcmF0ZSB3aGlsZSBsb29wXG5cCnNuaXBwZXQga3doaWxlXG5cCglrJHsxOkluZGV4fSA9ICR7MjowfVxuXAoJd2hpbGUgayR7MTpJbmRleH0gPCAkezM6LyogY291bnQgKi99IGRvXG5cCgkJJHs0Oi8qIHN0YXRlbWVudHMgKi99XG5cCgkJayR7MTpJbmRleH0gKz0gMVxuXAoJb2RcblwKIyBvcGNvZGVcblwKc25pcHBldCBvcGNvZGVcblwKCW9wY29kZSAkezE6bmFtZX0sICR7MjovKiBvdXRwdXQgdHlwZXMgKi8gMH0sICR7MzovKiBpbnB1dCB0eXBlcyAqLyAwfVxuXAoJCSR7NDovKiBzdGF0ZW1lbnRzICovfVxuXAoJZW5kb3BcblwKIyB1bnRpbCBsb29wXG5cCnNuaXBwZXQgdW50aWxcblwKCXVudGlsICR7MTovKiBjb25kaXRpb24gKi99IGRvXG5cCgkJJHsyOi8qIHN0YXRlbWVudHMgKi99XG5cCglvZFxuXAojIHdoaWxlIGxvb3BcblwKc25pcHBldCB3aGlsZVxuXAoJd2hpbGUgJHsxOi8qIGNvbmRpdGlvbiAqL30gZG9cblwKCQkkezI6Lyogc3RhdGVtZW50cyAqL31cblwKCW9kXG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiY3NvdW5kX29yY2hlc3RyYSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2Nzb3VuZF9vcmNoZXN0cmEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/csound_score.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3NvdW5kX3Njb3JlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiY3NvdW5kX3Njb3JlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvY3NvdW5kX3Njb3JlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/csp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3NwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvY3NwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3NzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgLlxuXAoJJHsxfSB7XG5cCgkJJHsyfVxuXAoJfVxuXApzbmlwcGV0ICFcblwKCSAhaW1wb3J0YW50XG5cCnNuaXBwZXQgYmRpOm0rXG5cCgktbW96LWJvcmRlci1pbWFnZTogdXJsKCR7MX0pICR7MjowfSAkezM6MH0gJHs0OjB9ICR7NTowfSAkezY6c3RyZXRjaH0gJHs3OnN0cmV0Y2h9O1xuXApzbmlwcGV0IGJkaTptXG5cCgktbW96LWJvcmRlci1pbWFnZTogJHsxfTtcblwKc25pcHBldCBiZHJ6Om1cblwKCS1tb3otYm9yZGVyLXJhZGl1czogJHsxfTtcblwKc25pcHBldCBieHNoOm0rXG5cCgktbW96LWJveC1zaGFkb3c6ICR7MTowfSAkezI6MH0gJHszOjB9ICMkezQ6MDAwfTtcblwKc25pcHBldCBieHNoOm1cblwKCS1tb3otYm94LXNoYWRvdzogJHsxfTtcblwKc25pcHBldCBiZGk6dytcblwKCS13ZWJraXQtYm9yZGVyLWltYWdlOiB1cmwoJHsxfSkgJHsyOjB9ICR7MzowfSAkezQ6MH0gJHs1OjB9ICR7NjpzdHJldGNofSAkezc6c3RyZXRjaH07XG5cCnNuaXBwZXQgYmRpOndcblwKCS13ZWJraXQtYm9yZGVyLWltYWdlOiAkezF9O1xuXApzbmlwcGV0IGJkcno6d1xuXAoJLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAkezF9O1xuXApzbmlwcGV0IGJ4c2g6dytcblwKCS13ZWJraXQtYm94LXNoYWRvdzogJHsxOjB9ICR7MjowfSAkezM6MH0gIyR7NDowMDB9O1xuXApzbmlwcGV0IGJ4c2g6d1xuXAoJLXdlYmtpdC1ib3gtc2hhZG93OiAkezF9O1xuXApzbmlwcGV0IEBmXG5cCglAZm9udC1mYWNlIHtcblwKCQlmb250LWZhbWlseTogJHsxfTtcblwKCQlzcmM6IHVybCgkezJ9KTtcblwKCX1cblwKc25pcHBldCBAaVxuXAoJQGltcG9ydCB1cmwoJHsxfSk7XG5cCnNuaXBwZXQgQG1cblwKCUBtZWRpYSAkezE6cHJpbnR9IHtcblwKCQkkezJ9XG5cCgl9XG5cCnNuaXBwZXQgYmcrXG5cCgliYWNrZ3JvdW5kOiAjJHsxOkZGRn0gdXJsKCR7Mn0pICR7MzowfSAkezQ6MH0gJHs1Om5vLXJlcGVhdH07XG5cCnNuaXBwZXQgYmdhXG5cCgliYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6ICR7MX07XG5cCnNuaXBwZXQgYmdhOmZcblwKCWJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7XG5cCnNuaXBwZXQgYmdhOnNcblwKCWJhY2tncm91bmQtYXR0YWNobWVudDogc2Nyb2xsO1xuXApzbmlwcGV0IGJnYmtcblwKCWJhY2tncm91bmQtYnJlYWs6ICR7MX07XG5cCnNuaXBwZXQgYmdiazpiYlxuXAoJYmFja2dyb3VuZC1icmVhazogYm91bmRpbmctYm94O1xuXApzbmlwcGV0IGJnYms6Y1xuXAoJYmFja2dyb3VuZC1icmVhazogY29udGludW91cztcblwKc25pcHBldCBiZ2JrOmViXG5cCgliYWNrZ3JvdW5kLWJyZWFrOiBlYWNoLWJveDtcblwKc25pcHBldCBiZ2NwXG5cCgliYWNrZ3JvdW5kLWNsaXA6ICR7MX07XG5cCnNuaXBwZXQgYmdjcDpiYlxuXAoJYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xuXApzbmlwcGV0IGJnY3A6Y2JcblwKCWJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG5cCnNuaXBwZXQgYmdjcDpuY1xuXAoJYmFja2dyb3VuZC1jbGlwOiBuby1jbGlwO1xuXApzbmlwcGV0IGJnY3A6cGJcblwKCWJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG5cCnNuaXBwZXQgYmdjXG5cCgliYWNrZ3JvdW5kLWNvbG9yOiAjJHsxOkZGRn07XG5cCnNuaXBwZXQgYmdjOnRcblwKCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuXApzbmlwcGV0IGJnaVxuXAoJYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7MX0pO1xuXApzbmlwcGV0IGJnaTpuXG5cCgliYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuXApzbmlwcGV0IGJnb1xuXAoJYmFja2dyb3VuZC1vcmlnaW46ICR7MX07XG5cCnNuaXBwZXQgYmdvOmJiXG5cCgliYWNrZ3JvdW5kLW9yaWdpbjogYm9yZGVyLWJveDtcblwKc25pcHBldCBiZ286Y2JcblwKCWJhY2tncm91bmQtb3JpZ2luOiBjb250ZW50LWJveDtcblwKc25pcHBldCBiZ286cGJcblwKCWJhY2tncm91bmQtb3JpZ2luOiBwYWRkaW5nLWJveDtcblwKc25pcHBldCBiZ3B4XG5cCgliYWNrZ3JvdW5kLXBvc2l0aW9uLXg6ICR7MX07XG5cCnNuaXBwZXQgYmdweVxuXAoJYmFja2dyb3VuZC1wb3NpdGlvbi15OiAkezF9O1xuXApzbmlwcGV0IGJncFxuXAoJYmFja2dyb3VuZC1wb3NpdGlvbjogJHsxOjB9ICR7MjowfTtcblwKc25pcHBldCBiZ3JcblwKCWJhY2tncm91bmQtcmVwZWF0OiAkezF9O1xuXApzbmlwcGV0IGJncjpuXG5cCgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuXApzbmlwcGV0IGJncjp4XG5cCgliYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7XG5cCnNuaXBwZXQgYmdyOnlcblwKCWJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteTtcblwKc25pcHBldCBiZ3I6clxuXAoJYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcblwKc25pcHBldCBiZ3pcblwKCWJhY2tncm91bmQtc2l6ZTogJHsxfTtcblwKc25pcHBldCBiZ3o6YVxuXAoJYmFja2dyb3VuZC1zaXplOiBhdXRvO1xuXApzbmlwcGV0IGJnejpjdFxuXAoJYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuXApzbmlwcGV0IGJnejpjdlxuXAoJYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcblwKc25pcHBldCBiZ1xuXAoJYmFja2dyb3VuZDogJHsxfTtcblwKc25pcHBldCBiZzppZVxuXAoJZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9JyR7MX0nLHNpemluZ01ldGhvZD0nJHsyOmNyb3B9Jyk7XG5cCnNuaXBwZXQgYmc6blxuXAoJYmFja2dyb3VuZDogbm9uZTtcblwKc25pcHBldCBiZCtcblwKCWJvcmRlcjogJHsxOjFweH0gJHsyOnNvbGlkfSAjJHszOjAwMH07XG5cCnNuaXBwZXQgYmRiK1xuXAoJYm9yZGVyLWJvdHRvbTogJHsxOjFweH0gJHsyOnNvbGlkfSAjJHszOjAwMH07XG5cCnNuaXBwZXQgYmRiY1xuXAoJYm9yZGVyLWJvdHRvbS1jb2xvcjogIyR7MTowMDB9O1xuXApzbmlwcGV0IGJkYmlcblwKCWJvcmRlci1ib3R0b20taW1hZ2U6IHVybCgkezF9KTtcblwKc25pcHBldCBiZGJpOm5cblwKCWJvcmRlci1ib3R0b20taW1hZ2U6IG5vbmU7XG5cCnNuaXBwZXQgYmRibGlcblwKCWJvcmRlci1ib3R0b20tbGVmdC1pbWFnZTogdXJsKCR7MX0pO1xuXApzbmlwcGV0IGJkYmxpOmNcblwKCWJvcmRlci1ib3R0b20tbGVmdC1pbWFnZTogY29udGludWU7XG5cCnNuaXBwZXQgYmRibGk6blxuXAoJYm9yZGVyLWJvdHRvbS1sZWZ0LWltYWdlOiBub25lO1xuXApzbmlwcGV0IGJkYmxyelxuXAoJYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHsxfTtcblwKc25pcHBldCBiZGJyaVxuXAoJYm9yZGVyLWJvdHRvbS1yaWdodC1pbWFnZTogdXJsKCR7MX0pO1xuXApzbmlwcGV0IGJkYnJpOmNcblwKCWJvcmRlci1ib3R0b20tcmlnaHQtaW1hZ2U6IGNvbnRpbnVlO1xuXApzbmlwcGV0IGJkYnJpOm5cblwKCWJvcmRlci1ib3R0b20tcmlnaHQtaW1hZ2U6IG5vbmU7XG5cCnNuaXBwZXQgYmRicnJ6XG5cCglib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJHsxfTtcblwKc25pcHBldCBiZGJzXG5cCglib3JkZXItYm90dG9tLXN0eWxlOiAkezF9O1xuXApzbmlwcGV0IGJkYnM6blxuXAoJYm9yZGVyLWJvdHRvbS1zdHlsZTogbm9uZTtcblwKc25pcHBldCBiZGJ3XG5cCglib3JkZXItYm90dG9tLXdpZHRoOiAkezF9O1xuXApzbmlwcGV0IGJkYlxuXAoJYm9yZGVyLWJvdHRvbTogJHsxfTtcblwKc25pcHBldCBiZGI6blxuXAoJYm9yZGVyLWJvdHRvbTogbm9uZTtcblwKc25pcHBldCBiZGJrXG5cCglib3JkZXItYnJlYWs6ICR7MX07XG5cCnNuaXBwZXQgYmRiazpjXG5cCglib3JkZXItYnJlYWs6IGNsb3NlO1xuXApzbmlwcGV0IGJkY2xcblwKCWJvcmRlci1jb2xsYXBzZTogJHsxfTtcblwKc25pcHBldCBiZGNsOmNcblwKCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG5cCnNuaXBwZXQgYmRjbDpzXG5cCglib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlO1xuXApzbmlwcGV0IGJkY1xuXAoJYm9yZGVyLWNvbG9yOiAjJHsxOjAwMH07XG5cCnNuaXBwZXQgYmRjaVxuXAoJYm9yZGVyLWNvcm5lci1pbWFnZTogdXJsKCR7MX0pO1xuXApzbmlwcGV0IGJkY2k6Y1xuXAoJYm9yZGVyLWNvcm5lci1pbWFnZTogY29udGludWU7XG5cCnNuaXBwZXQgYmRjaTpuXG5cCglib3JkZXItY29ybmVyLWltYWdlOiBub25lO1xuXApzbmlwcGV0IGJkZlxuXAoJYm9yZGVyLWZpdDogJHsxfTtcblwKc25pcHBldCBiZGY6Y1xuXAoJYm9yZGVyLWZpdDogY2xpcDtcblwKc25pcHBldCBiZGY6b2ZcblwKCWJvcmRlci1maXQ6IG92ZXJ3cml0ZTtcblwKc25pcHBldCBiZGY6b3dcblwKCWJvcmRlci1maXQ6IG92ZXJ3cml0ZTtcblwKc25pcHBldCBiZGY6clxuXAoJYm9yZGVyLWZpdDogcmVwZWF0O1xuXApzbmlwcGV0IGJkZjpzY1xuXAoJYm9yZGVyLWZpdDogc2NhbGU7XG5cCnNuaXBwZXQgYmRmOnNwXG5cCglib3JkZXItZml0OiBzcGFjZTtcblwKc25pcHBldCBiZGY6c3RcblwKCWJvcmRlci1maXQ6IHN0cmV0Y2g7XG5cCnNuaXBwZXQgYmRpXG5cCglib3JkZXItaW1hZ2U6IHVybCgkezF9KSAkezI6MH0gJHszOjB9ICR7NDowfSAkezU6MH0gJHs2OnN0cmV0Y2h9ICR7NzpzdHJldGNofTtcblwKc25pcHBldCBiZGk6blxuXAoJYm9yZGVyLWltYWdlOiBub25lO1xuXApzbmlwcGV0IGJkbCtcblwKCWJvcmRlci1sZWZ0OiAkezE6MXB4fSAkezI6c29saWR9ICMkezM6MDAwfTtcblwKc25pcHBldCBiZGxjXG5cCglib3JkZXItbGVmdC1jb2xvcjogIyR7MTowMDB9O1xuXApzbmlwcGV0IGJkbGlcblwKCWJvcmRlci1sZWZ0LWltYWdlOiB1cmwoJHsxfSk7XG5cCnNuaXBwZXQgYmRsaTpuXG5cCglib3JkZXItbGVmdC1pbWFnZTogbm9uZTtcblwKc25pcHBldCBiZGxzXG5cCglib3JkZXItbGVmdC1zdHlsZTogJHsxfTtcblwKc25pcHBldCBiZGxzOm5cblwKCWJvcmRlci1sZWZ0LXN0eWxlOiBub25lO1xuXApzbmlwcGV0IGJkbHdcblwKCWJvcmRlci1sZWZ0LXdpZHRoOiAkezF9O1xuXApzbmlwcGV0IGJkbFxuXAoJYm9yZGVyLWxlZnQ6ICR7MX07XG5cCnNuaXBwZXQgYmRsOm5cblwKCWJvcmRlci1sZWZ0OiBub25lO1xuXApzbmlwcGV0IGJkbHRcblwKCWJvcmRlci1sZW5ndGg6ICR7MX07XG5cCnNuaXBwZXQgYmRsdDphXG5cCglib3JkZXItbGVuZ3RoOiBhdXRvO1xuXApzbmlwcGV0IGJkcnpcblwKCWJvcmRlci1yYWRpdXM6ICR7MX07XG5cCnNuaXBwZXQgYmRyK1xuXAoJYm9yZGVyLXJpZ2h0OiAkezE6MXB4fSAkezI6c29saWR9ICMkezM6MDAwfTtcblwKc25pcHBldCBiZHJjXG5cCglib3JkZXItcmlnaHQtY29sb3I6ICMkezE6MDAwfTtcblwKc25pcHBldCBiZHJpXG5cCglib3JkZXItcmlnaHQtaW1hZ2U6IHVybCgkezF9KTtcblwKc25pcHBldCBiZHJpOm5cblwKCWJvcmRlci1yaWdodC1pbWFnZTogbm9uZTtcblwKc25pcHBldCBiZHJzXG5cCglib3JkZXItcmlnaHQtc3R5bGU6ICR7MX07XG5cCnNuaXBwZXQgYmRyczpuXG5cCglib3JkZXItcmlnaHQtc3R5bGU6IG5vbmU7XG5cCnNuaXBwZXQgYmRyd1xuXAoJYm9yZGVyLXJpZ2h0LXdpZHRoOiAkezF9O1xuXApzbmlwcGV0IGJkclxuXAoJYm9yZGVyLXJpZ2h0OiAkezF9O1xuXApzbmlwcGV0IGJkcjpuXG5cCglib3JkZXItcmlnaHQ6IG5vbmU7XG5cCnNuaXBwZXQgYmRzcFxuXAoJYm9yZGVyLXNwYWNpbmc6ICR7MX07XG5cCnNuaXBwZXQgYmRzXG5cCglib3JkZXItc3R5bGU6ICR7MX07XG5cCnNuaXBwZXQgYmRzOmRzXG5cCglib3JkZXItc3R5bGU6IGRhc2hlZDtcblwKc25pcHBldCBiZHM6ZHRkc1xuXAoJYm9yZGVyLXN0eWxlOiBkb3QtZGFzaDtcblwKc25pcHBldCBiZHM6ZHRkdGRzXG5cCglib3JkZXItc3R5bGU6IGRvdC1kb3QtZGFzaDtcblwKc25pcHBldCBiZHM6ZHRcblwKCWJvcmRlci1zdHlsZTogZG90dGVkO1xuXApzbmlwcGV0IGJkczpkYlxuXAoJYm9yZGVyLXN0eWxlOiBkb3VibGU7XG5cCnNuaXBwZXQgYmRzOmdcblwKCWJvcmRlci1zdHlsZTogZ3Jvb3ZlO1xuXApzbmlwcGV0IGJkczpoXG5cCglib3JkZXItc3R5bGU6IGhpZGRlbjtcblwKc25pcHBldCBiZHM6aVxuXAoJYm9yZGVyLXN0eWxlOiBpbnNldDtcblwKc25pcHBldCBiZHM6blxuXAoJYm9yZGVyLXN0eWxlOiBub25lO1xuXApzbmlwcGV0IGJkczpvXG5cCglib3JkZXItc3R5bGU6IG91dHNldDtcblwKc25pcHBldCBiZHM6clxuXAoJYm9yZGVyLXN0eWxlOiByaWRnZTtcblwKc25pcHBldCBiZHM6c1xuXAoJYm9yZGVyLXN0eWxlOiBzb2xpZDtcblwKc25pcHBldCBiZHM6d1xuXAoJYm9yZGVyLXN0eWxlOiB3YXZlO1xuXApzbmlwcGV0IGJkdCtcblwKCWJvcmRlci10b3A6ICR7MToxcHh9ICR7Mjpzb2xpZH0gIyR7MzowMDB9O1xuXApzbmlwcGV0IGJkdGNcblwKCWJvcmRlci10b3AtY29sb3I6ICMkezE6MDAwfTtcblwKc25pcHBldCBiZHRpXG5cCglib3JkZXItdG9wLWltYWdlOiB1cmwoJHsxfSk7XG5cCnNuaXBwZXQgYmR0aTpuXG5cCglib3JkZXItdG9wLWltYWdlOiBub25lO1xuXApzbmlwcGV0IGJkdGxpXG5cCglib3JkZXItdG9wLWxlZnQtaW1hZ2U6IHVybCgkezF9KTtcblwKc25pcHBldCBiZHRsaTpjXG5cCglib3JkZXItY29ybmVyLWltYWdlOiBjb250aW51ZTtcblwKc25pcHBldCBiZHRsaTpuXG5cCglib3JkZXItY29ybmVyLWltYWdlOiBub25lO1xuXApzbmlwcGV0IGJkdGxyelxuXAoJYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHsxfTtcblwKc25pcHBldCBiZHRyaVxuXAoJYm9yZGVyLXRvcC1yaWdodC1pbWFnZTogdXJsKCR7MX0pO1xuXApzbmlwcGV0IGJkdHJpOmNcblwKCWJvcmRlci10b3AtcmlnaHQtaW1hZ2U6IGNvbnRpbnVlO1xuXApzbmlwcGV0IGJkdHJpOm5cblwKCWJvcmRlci10b3AtcmlnaHQtaW1hZ2U6IG5vbmU7XG5cCnNuaXBwZXQgYmR0cnJ6XG5cCglib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHsxfTtcblwKc25pcHBldCBiZHRzXG5cCglib3JkZXItdG9wLXN0eWxlOiAkezF9O1xuXApzbmlwcGV0IGJkdHM6blxuXAoJYm9yZGVyLXRvcC1zdHlsZTogbm9uZTtcblwKc25pcHBldCBiZHR3XG5cCglib3JkZXItdG9wLXdpZHRoOiAkezF9O1xuXApzbmlwcGV0IGJkdFxuXAoJYm9yZGVyLXRvcDogJHsxfTtcblwKc25pcHBldCBiZHQ6blxuXAoJYm9yZGVyLXRvcDogbm9uZTtcblwKc25pcHBldCBiZHdcblwKCWJvcmRlci13aWR0aDogJHsxfTtcblwKc25pcHBldCBiZFxuXAoJYm9yZGVyOiAkezF9O1xuXApzbmlwcGV0IGJkOm5cblwKCWJvcmRlcjogbm9uZTtcblwKc25pcHBldCBiXG5cCglib3R0b206ICR7MX07XG5cCnNuaXBwZXQgYjphXG5cCglib3R0b206IGF1dG87XG5cCnNuaXBwZXQgYnhzaCtcblwKCWJveC1zaGFkb3c6ICR7MTowfSAkezI6MH0gJHszOjB9ICMkezQ6MDAwfTtcblwKc25pcHBldCBieHNoXG5cCglib3gtc2hhZG93OiAkezF9O1xuXApzbmlwcGV0IGJ4c2g6blxuXAoJYm94LXNoYWRvdzogbm9uZTtcblwKc25pcHBldCBieHpcblwKCWJveC1zaXppbmc6ICR7MX07XG5cCnNuaXBwZXQgYnh6OmJiXG5cCglib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXApzbmlwcGV0IGJ4ejpjYlxuXAoJYm94LXNpemluZzogY29udGVudC1ib3g7XG5cCnNuaXBwZXQgY3BzXG5cCgljYXB0aW9uLXNpZGU6ICR7MX07XG5cCnNuaXBwZXQgY3BzOmJcblwKCWNhcHRpb24tc2lkZTogYm90dG9tO1xuXApzbmlwcGV0IGNwczp0XG5cCgljYXB0aW9uLXNpZGU6IHRvcDtcblwKc25pcHBldCBjbFxuXAoJY2xlYXI6ICR7MX07XG5cCnNuaXBwZXQgY2w6YlxuXAoJY2xlYXI6IGJvdGg7XG5cCnNuaXBwZXQgY2w6bFxuXAoJY2xlYXI6IGxlZnQ7XG5cCnNuaXBwZXQgY2w6blxuXAoJY2xlYXI6IG5vbmU7XG5cCnNuaXBwZXQgY2w6clxuXAoJY2xlYXI6IHJpZ2h0O1xuXApzbmlwcGV0IGNwXG5cCgljbGlwOiAkezF9O1xuXApzbmlwcGV0IGNwOmFcblwKCWNsaXA6IGF1dG87XG5cCnNuaXBwZXQgY3A6clxuXAoJY2xpcDogcmVjdCgkezE6MH0gJHsyOjB9ICR7MzowfSAkezQ6MH0pO1xuXApzbmlwcGV0IGNcblwKCWNvbG9yOiAjJHsxOjAwMH07XG5cCnNuaXBwZXQgY3RcblwKCWNvbnRlbnQ6ICR7MX07XG5cCnNuaXBwZXQgY3Q6YVxuXAoJY29udGVudDogYXR0cigkezF9KTtcblwKc25pcHBldCBjdDpjcVxuXAoJY29udGVudDogY2xvc2UtcXVvdGU7XG5cCnNuaXBwZXQgY3Q6Y1xuXAoJY29udGVudDogY291bnRlcigkezF9KTtcblwKc25pcHBldCBjdDpjc1xuXAoJY29udGVudDogY291bnRlcnMoJHsxfSk7XG5cCnNuaXBwZXQgY3Q6bmNxXG5cCgljb250ZW50OiBuby1jbG9zZS1xdW90ZTtcblwKc25pcHBldCBjdDpub3FcblwKCWNvbnRlbnQ6IG5vLW9wZW4tcXVvdGU7XG5cCnNuaXBwZXQgY3Q6blxuXAoJY29udGVudDogbm9ybWFsO1xuXApzbmlwcGV0IGN0Om9xXG5cCgljb250ZW50OiBvcGVuLXF1b3RlO1xuXApzbmlwcGV0IGNvaVxuXAoJY291bnRlci1pbmNyZW1lbnQ6ICR7MX07XG5cCnNuaXBwZXQgY29yXG5cCgljb3VudGVyLXJlc2V0OiAkezF9O1xuXApzbmlwcGV0IGN1clxuXAoJY3Vyc29yOiAkezF9O1xuXApzbmlwcGV0IGN1cjphXG5cCgljdXJzb3I6IGF1dG87XG5cCnNuaXBwZXQgY3VyOmNcblwKCWN1cnNvcjogY3Jvc3NoYWlyO1xuXApzbmlwcGV0IGN1cjpkXG5cCgljdXJzb3I6IGRlZmF1bHQ7XG5cCnNuaXBwZXQgY3VyOmhhXG5cCgljdXJzb3I6IGhhbmQ7XG5cCnNuaXBwZXQgY3VyOmhlXG5cCgljdXJzb3I6IGhlbHA7XG5cCnNuaXBwZXQgY3VyOm1cblwKCWN1cnNvcjogbW92ZTtcblwKc25pcHBldCBjdXI6cFxuXAoJY3Vyc29yOiBwb2ludGVyO1xuXApzbmlwcGV0IGN1cjp0XG5cCgljdXJzb3I6IHRleHQ7XG5cCnNuaXBwZXQgZFxuXAoJZGlzcGxheTogJHsxfTtcblwKc25pcHBldCBkOm1pYlxuXAoJZGlzcGxheTogLW1vei1pbmxpbmUtYm94O1xuXApzbmlwcGV0IGQ6bWlzXG5cCglkaXNwbGF5OiAtbW96LWlubGluZS1zdGFjaztcblwKc25pcHBldCBkOmJcblwKCWRpc3BsYXk6IGJsb2NrO1xuXApzbmlwcGV0IGQ6Y3BcblwKCWRpc3BsYXk6IGNvbXBhY3Q7XG5cCnNuaXBwZXQgZDppYlxuXAoJZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXApzbmlwcGV0IGQ6aXRiXG5cCglkaXNwbGF5OiBpbmxpbmUtdGFibGU7XG5cCnNuaXBwZXQgZDppXG5cCglkaXNwbGF5OiBpbmxpbmU7XG5cCnNuaXBwZXQgZDpsaVxuXAoJZGlzcGxheTogbGlzdC1pdGVtO1xuXApzbmlwcGV0IGQ6blxuXAoJZGlzcGxheTogbm9uZTtcblwKc25pcHBldCBkOnJpXG5cCglkaXNwbGF5OiBydW4taW47XG5cCnNuaXBwZXQgZDp0YmNwXG5cCglkaXNwbGF5OiB0YWJsZS1jYXB0aW9uO1xuXApzbmlwcGV0IGQ6dGJjXG5cCglkaXNwbGF5OiB0YWJsZS1jZWxsO1xuXApzbmlwcGV0IGQ6dGJjbGdcblwKCWRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cDtcblwKc25pcHBldCBkOnRiY2xcblwKCWRpc3BsYXk6IHRhYmxlLWNvbHVtbjtcblwKc25pcHBldCBkOnRiZmdcblwKCWRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDtcblwKc25pcHBldCBkOnRiaGdcblwKCWRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcblwKc25pcHBldCBkOnRicmdcblwKCWRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cDtcblwKc25pcHBldCBkOnRiclxuXAoJZGlzcGxheTogdGFibGUtcm93O1xuXApzbmlwcGV0IGQ6dGJcblwKCWRpc3BsYXk6IHRhYmxlO1xuXApzbmlwcGV0IGVjXG5cCgllbXB0eS1jZWxsczogJHsxfTtcblwKc25pcHBldCBlYzpoXG5cCgllbXB0eS1jZWxsczogaGlkZTtcblwKc25pcHBldCBlYzpzXG5cCgllbXB0eS1jZWxsczogc2hvdztcblwKc25pcHBldCBleHBcblwKCWV4cHJlc3Npb24oKVxuXApzbmlwcGV0IGZsXG5cCglmbG9hdDogJHsxfTtcblwKc25pcHBldCBmbDpsXG5cCglmbG9hdDogbGVmdDtcblwKc25pcHBldCBmbDpuXG5cCglmbG9hdDogbm9uZTtcblwKc25pcHBldCBmbDpyXG5cCglmbG9hdDogcmlnaHQ7XG5cCnNuaXBwZXQgZitcblwKCWZvbnQ6ICR7MToxZW19ICR7MjpBcmlhbH0sJHszOnNhbnMtc2VyaWZ9O1xuXApzbmlwcGV0IGZlZlxuXAoJZm9udC1lZmZlY3Q6ICR7MX07XG5cCnNuaXBwZXQgZmVmOmViXG5cCglmb250LWVmZmVjdDogZW1ib3NzO1xuXApzbmlwcGV0IGZlZjplZ1xuXAoJZm9udC1lZmZlY3Q6IGVuZ3JhdmU7XG5cCnNuaXBwZXQgZmVmOm5cblwKCWZvbnQtZWZmZWN0OiBub25lO1xuXApzbmlwcGV0IGZlZjpvXG5cCglmb250LWVmZmVjdDogb3V0bGluZTtcblwKc25pcHBldCBmZW1wXG5cCglmb250LWVtcGhhc2l6ZS1wb3NpdGlvbjogJHsxfTtcblwKc25pcHBldCBmZW1wOmFcblwKCWZvbnQtZW1waGFzaXplLXBvc2l0aW9uOiBhZnRlcjtcblwKc25pcHBldCBmZW1wOmJcblwKCWZvbnQtZW1waGFzaXplLXBvc2l0aW9uOiBiZWZvcmU7XG5cCnNuaXBwZXQgZmVtc1xuXAoJZm9udC1lbXBoYXNpemUtc3R5bGU6ICR7MX07XG5cCnNuaXBwZXQgZmVtczphY1xuXAoJZm9udC1lbXBoYXNpemUtc3R5bGU6IGFjY2VudDtcblwKc25pcHBldCBmZW1zOmNcblwKCWZvbnQtZW1waGFzaXplLXN0eWxlOiBjaXJjbGU7XG5cCnNuaXBwZXQgZmVtczpkc1xuXAoJZm9udC1lbXBoYXNpemUtc3R5bGU6IGRpc2M7XG5cCnNuaXBwZXQgZmVtczpkdFxuXAoJZm9udC1lbXBoYXNpemUtc3R5bGU6IGRvdDtcblwKc25pcHBldCBmZW1zOm5cblwKCWZvbnQtZW1waGFzaXplLXN0eWxlOiBub25lO1xuXApzbmlwcGV0IGZlbVxuXAoJZm9udC1lbXBoYXNpemU6ICR7MX07XG5cCnNuaXBwZXQgZmZcblwKCWZvbnQtZmFtaWx5OiAkezF9O1xuXApzbmlwcGV0IGZmOmNcblwKCWZvbnQtZmFtaWx5OiAkezE6J01vbm90eXBlIENvcnNpdmEnLCdDb21pYyBTYW5zIE1TJ30sY3Vyc2l2ZTtcblwKc25pcHBldCBmZjpmXG5cCglmb250LWZhbWlseTogJHsxOkNhcGl0YWxzLEltcGFjdH0sZmFudGFzeTtcblwKc25pcHBldCBmZjptXG5cCglmb250LWZhbWlseTogJHsxOk1vbmFjbywnQ291cmllciBOZXcnfSxtb25vc3BhY2U7XG5cCnNuaXBwZXQgZmY6c3NcblwKCWZvbnQtZmFtaWx5OiAkezE6SGVsdmV0aWNhLEFyaWFsfSxzYW5zLXNlcmlmO1xuXApzbmlwcGV0IGZmOnNcblwKCWZvbnQtZmFtaWx5OiAkezE6R2VvcmdpYSwnVGltZXMgTmV3IFJvbWFuJ30sc2VyaWY7XG5cCnNuaXBwZXQgZnphXG5cCglmb250LXNpemUtYWRqdXN0OiAkezF9O1xuXApzbmlwcGV0IGZ6YTpuXG5cCglmb250LXNpemUtYWRqdXN0OiBub25lO1xuXApzbmlwcGV0IGZ6XG5cCglmb250LXNpemU6ICR7MX07XG5cCnNuaXBwZXQgZnNtXG5cCglmb250LXNtb290aDogJHsxfTtcblwKc25pcHBldCBmc206YXdcblwKCWZvbnQtc21vb3RoOiBhbHdheXM7XG5cCnNuaXBwZXQgZnNtOmFcblwKCWZvbnQtc21vb3RoOiBhdXRvO1xuXApzbmlwcGV0IGZzbTpuXG5cCglmb250LXNtb290aDogbmV2ZXI7XG5cCnNuaXBwZXQgZnN0XG5cCglmb250LXN0cmV0Y2g6ICR7MX07XG5cCnNuaXBwZXQgZnN0OmNcblwKCWZvbnQtc3RyZXRjaDogY29uZGVuc2VkO1xuXApzbmlwcGV0IGZzdDplXG5cCglmb250LXN0cmV0Y2g6IGV4cGFuZGVkO1xuXApzbmlwcGV0IGZzdDplY1xuXAoJZm9udC1zdHJldGNoOiBleHRyYS1jb25kZW5zZWQ7XG5cCnNuaXBwZXQgZnN0OmVlXG5cCglmb250LXN0cmV0Y2g6IGV4dHJhLWV4cGFuZGVkO1xuXApzbmlwcGV0IGZzdDpuXG5cCglmb250LXN0cmV0Y2g6IG5vcm1hbDtcblwKc25pcHBldCBmc3Q6c2NcblwKCWZvbnQtc3RyZXRjaDogc2VtaS1jb25kZW5zZWQ7XG5cCnNuaXBwZXQgZnN0OnNlXG5cCglmb250LXN0cmV0Y2g6IHNlbWktZXhwYW5kZWQ7XG5cCnNuaXBwZXQgZnN0OnVjXG5cCglmb250LXN0cmV0Y2g6IHVsdHJhLWNvbmRlbnNlZDtcblwKc25pcHBldCBmc3Q6dWVcblwKCWZvbnQtc3RyZXRjaDogdWx0cmEtZXhwYW5kZWQ7XG5cCnNuaXBwZXQgZnNcblwKCWZvbnQtc3R5bGU6ICR7MX07XG5cCnNuaXBwZXQgZnM6aVxuXAoJZm9udC1zdHlsZTogaXRhbGljO1xuXApzbmlwcGV0IGZzOm5cblwKCWZvbnQtc3R5bGU6IG5vcm1hbDtcblwKc25pcHBldCBmczpvXG5cCglmb250LXN0eWxlOiBvYmxpcXVlO1xuXApzbmlwcGV0IGZ2XG5cCglmb250LXZhcmlhbnQ6ICR7MX07XG5cCnNuaXBwZXQgZnY6blxuXAoJZm9udC12YXJpYW50OiBub3JtYWw7XG5cCnNuaXBwZXQgZnY6c2NcblwKCWZvbnQtdmFyaWFudDogc21hbGwtY2FwcztcblwKc25pcHBldCBmd1xuXAoJZm9udC13ZWlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgZnc6YlxuXAoJZm9udC13ZWlnaHQ6IGJvbGQ7XG5cCnNuaXBwZXQgZnc6YnJcblwKCWZvbnQtd2VpZ2h0OiBib2xkZXI7XG5cCnNuaXBwZXQgZnc6bHJcblwKCWZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuXApzbmlwcGV0IGZ3Om5cblwKCWZvbnQtd2VpZ2h0OiBub3JtYWw7XG5cCnNuaXBwZXQgZlxuXAoJZm9udDogJHsxfTtcblwKc25pcHBldCBoXG5cCgloZWlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgaDphXG5cCgloZWlnaHQ6IGF1dG87XG5cCnNuaXBwZXQgbFxuXAoJbGVmdDogJHsxfTtcblwKc25pcHBldCBsOmFcblwKCWxlZnQ6IGF1dG87XG5cCnNuaXBwZXQgbHRzXG5cCglsZXR0ZXItc3BhY2luZzogJHsxfTtcblwKc25pcHBldCBsaFxuXAoJbGluZS1oZWlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgbGlzaVxuXAoJbGlzdC1zdHlsZS1pbWFnZTogdXJsKCR7MX0pO1xuXApzbmlwcGV0IGxpc2k6blxuXAoJbGlzdC1zdHlsZS1pbWFnZTogbm9uZTtcblwKc25pcHBldCBsaXNwXG5cCglsaXN0LXN0eWxlLXBvc2l0aW9uOiAkezF9O1xuXApzbmlwcGV0IGxpc3A6aVxuXAoJbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuXApzbmlwcGV0IGxpc3A6b1xuXAoJbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTtcblwKc25pcHBldCBsaXN0XG5cCglsaXN0LXN0eWxlLXR5cGU6ICR7MX07XG5cCnNuaXBwZXQgbGlzdDpjXG5cCglsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZTtcblwKc25pcHBldCBsaXN0OmRjbHpcblwKCWxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbC1sZWFkaW5nLXplcm87XG5cCnNuaXBwZXQgbGlzdDpkY1xuXAoJbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsO1xuXApzbmlwcGV0IGxpc3Q6ZFxuXAoJbGlzdC1zdHlsZS10eXBlOiBkaXNjO1xuXApzbmlwcGV0IGxpc3Q6bHJcblwKCWxpc3Qtc3R5bGUtdHlwZTogbG93ZXItcm9tYW47XG5cCnNuaXBwZXQgbGlzdDpuXG5cCglsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XG5cCnNuaXBwZXQgbGlzdDpzXG5cCglsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZTtcblwKc25pcHBldCBsaXN0OnVyXG5cCglsaXN0LXN0eWxlLXR5cGU6IHVwcGVyLXJvbWFuO1xuXApzbmlwcGV0IGxpc1xuXAoJbGlzdC1zdHlsZTogJHsxfTtcblwKc25pcHBldCBsaXM6blxuXAoJbGlzdC1zdHlsZTogbm9uZTtcblwKc25pcHBldCBtYlxuXAoJbWFyZ2luLWJvdHRvbTogJHsxfTtcblwKc25pcHBldCBtYjphXG5cCgltYXJnaW4tYm90dG9tOiBhdXRvO1xuXApzbmlwcGV0IG1sXG5cCgltYXJnaW4tbGVmdDogJHsxfTtcblwKc25pcHBldCBtbDphXG5cCgltYXJnaW4tbGVmdDogYXV0bztcblwKc25pcHBldCBtclxuXAoJbWFyZ2luLXJpZ2h0OiAkezF9O1xuXApzbmlwcGV0IG1yOmFcblwKCW1hcmdpbi1yaWdodDogYXV0bztcblwKc25pcHBldCBtdFxuXAoJbWFyZ2luLXRvcDogJHsxfTtcblwKc25pcHBldCBtdDphXG5cCgltYXJnaW4tdG9wOiBhdXRvO1xuXApzbmlwcGV0IG1cblwKCW1hcmdpbjogJHsxfTtcblwKc25pcHBldCBtOjRcblwKCW1hcmdpbjogJHsxOjB9ICR7MjowfSAkezM6MH0gJHs0OjB9O1xuXApzbmlwcGV0IG06M1xuXAoJbWFyZ2luOiAkezE6MH0gJHsyOjB9ICR7MzowfTtcblwKc25pcHBldCBtOjJcblwKCW1hcmdpbjogJHsxOjB9ICR7MjowfTtcblwKc25pcHBldCBtOjBcblwKCW1hcmdpbjogMDtcblwKc25pcHBldCBtOmFcblwKCW1hcmdpbjogYXV0bztcblwKc25pcHBldCBtYWhcblwKCW1heC1oZWlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgbWFoOm5cblwKCW1heC1oZWlnaHQ6IG5vbmU7XG5cCnNuaXBwZXQgbWF3XG5cCgltYXgtd2lkdGg6ICR7MX07XG5cCnNuaXBwZXQgbWF3Om5cblwKCW1heC13aWR0aDogbm9uZTtcblwKc25pcHBldCBtaWhcblwKCW1pbi1oZWlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgbWl3XG5cCgltaW4td2lkdGg6ICR7MX07XG5cCnNuaXBwZXQgb3BcblwKCW9wYWNpdHk6ICR7MX07XG5cCnNuaXBwZXQgb3A6aWVcblwKCWZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JHsxOjEwMH0pO1xuXApzbmlwcGV0IG9wOm1zXG5cCgktbXMtZmlsdGVyOiAncHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JHsxOjEwMH0pJztcblwKc25pcHBldCBvcnBcblwKCW9ycGhhbnM6ICR7MX07XG5cCnNuaXBwZXQgbytcblwKCW91dGxpbmU6ICR7MToxcHh9ICR7Mjpzb2xpZH0gIyR7MzowMDB9O1xuXApzbmlwcGV0IG9jXG5cCglvdXRsaW5lLWNvbG9yOiAkezE6IzAwMH07XG5cCnNuaXBwZXQgb2M6aVxuXAoJb3V0bGluZS1jb2xvcjogaW52ZXJ0O1xuXApzbmlwcGV0IG9vXG5cCglvdXRsaW5lLW9mZnNldDogJHsxfTtcblwKc25pcHBldCBvc1xuXAoJb3V0bGluZS1zdHlsZTogJHsxfTtcblwKc25pcHBldCBvd1xuXAoJb3V0bGluZS13aWR0aDogJHsxfTtcblwKc25pcHBldCBvXG5cCglvdXRsaW5lOiAkezF9O1xuXApzbmlwcGV0IG86blxuXAoJb3V0bGluZTogbm9uZTtcblwKc25pcHBldCBvdnNcblwKCW92ZXJmbG93LXN0eWxlOiAkezF9O1xuXApzbmlwcGV0IG92czphXG5cCglvdmVyZmxvdy1zdHlsZTogYXV0bztcblwKc25pcHBldCBvdnM6bXFcblwKCW92ZXJmbG93LXN0eWxlOiBtYXJxdWVlO1xuXApzbmlwcGV0IG92czptdlxuXAoJb3ZlcmZsb3ctc3R5bGU6IG1vdmU7XG5cCnNuaXBwZXQgb3ZzOnBcblwKCW92ZXJmbG93LXN0eWxlOiBwYW5uZXI7XG5cCnNuaXBwZXQgb3ZzOnNcblwKCW92ZXJmbG93LXN0eWxlOiBzY3JvbGxiYXI7XG5cCnNuaXBwZXQgb3Z4XG5cCglvdmVyZmxvdy14OiAkezF9O1xuXApzbmlwcGV0IG92eDphXG5cCglvdmVyZmxvdy14OiBhdXRvO1xuXApzbmlwcGV0IG92eDpoXG5cCglvdmVyZmxvdy14OiBoaWRkZW47XG5cCnNuaXBwZXQgb3Z4OnNcblwKCW92ZXJmbG93LXg6IHNjcm9sbDtcblwKc25pcHBldCBvdng6dlxuXAoJb3ZlcmZsb3cteDogdmlzaWJsZTtcblwKc25pcHBldCBvdnlcblwKCW92ZXJmbG93LXk6ICR7MX07XG5cCnNuaXBwZXQgb3Z5OmFcblwKCW92ZXJmbG93LXk6IGF1dG87XG5cCnNuaXBwZXQgb3Z5OmhcblwKCW92ZXJmbG93LXk6IGhpZGRlbjtcblwKc25pcHBldCBvdnk6c1xuXAoJb3ZlcmZsb3cteTogc2Nyb2xsO1xuXApzbmlwcGV0IG92eTp2XG5cCglvdmVyZmxvdy15OiB2aXNpYmxlO1xuXApzbmlwcGV0IG92XG5cCglvdmVyZmxvdzogJHsxfTtcblwKc25pcHBldCBvdjphXG5cCglvdmVyZmxvdzogYXV0bztcblwKc25pcHBldCBvdjpoXG5cCglvdmVyZmxvdzogaGlkZGVuO1xuXApzbmlwcGV0IG92OnNcblwKCW92ZXJmbG93OiBzY3JvbGw7XG5cCnNuaXBwZXQgb3Y6dlxuXAoJb3ZlcmZsb3c6IHZpc2libGU7XG5cCnNuaXBwZXQgcGJcblwKCXBhZGRpbmctYm90dG9tOiAkezF9O1xuXApzbmlwcGV0IHBsXG5cCglwYWRkaW5nLWxlZnQ6ICR7MX07XG5cCnNuaXBwZXQgcHJcblwKCXBhZGRpbmctcmlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgcHRcblwKCXBhZGRpbmctdG9wOiAkezF9O1xuXApzbmlwcGV0IHBcblwKCXBhZGRpbmc6ICR7MX07XG5cCnNuaXBwZXQgcDo0XG5cCglwYWRkaW5nOiAkezE6MH0gJHsyOjB9ICR7MzowfSAkezQ6MH07XG5cCnNuaXBwZXQgcDozXG5cCglwYWRkaW5nOiAkezE6MH0gJHsyOjB9ICR7MzowfTtcblwKc25pcHBldCBwOjJcblwKCXBhZGRpbmc6ICR7MTowfSAkezI6MH07XG5cCnNuaXBwZXQgcDowXG5cCglwYWRkaW5nOiAwO1xuXApzbmlwcGV0IHBnYmFcblwKCXBhZ2UtYnJlYWstYWZ0ZXI6ICR7MX07XG5cCnNuaXBwZXQgcGdiYTphd1xuXAoJcGFnZS1icmVhay1hZnRlcjogYWx3YXlzO1xuXApzbmlwcGV0IHBnYmE6YVxuXAoJcGFnZS1icmVhay1hZnRlcjogYXV0bztcblwKc25pcHBldCBwZ2JhOmxcblwKCXBhZ2UtYnJlYWstYWZ0ZXI6IGxlZnQ7XG5cCnNuaXBwZXQgcGdiYTpyXG5cCglwYWdlLWJyZWFrLWFmdGVyOiByaWdodDtcblwKc25pcHBldCBwZ2JiXG5cCglwYWdlLWJyZWFrLWJlZm9yZTogJHsxfTtcblwKc25pcHBldCBwZ2JiOmF3XG5cCglwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzO1xuXApzbmlwcGV0IHBnYmI6YVxuXAoJcGFnZS1icmVhay1iZWZvcmU6IGF1dG87XG5cCnNuaXBwZXQgcGdiYjpsXG5cCglwYWdlLWJyZWFrLWJlZm9yZTogbGVmdDtcblwKc25pcHBldCBwZ2JiOnJcblwKCXBhZ2UtYnJlYWstYmVmb3JlOiByaWdodDtcblwKc25pcHBldCBwZ2JpXG5cCglwYWdlLWJyZWFrLWluc2lkZTogJHsxfTtcblwKc25pcHBldCBwZ2JpOmFcblwKCXBhZ2UtYnJlYWstaW5zaWRlOiBhdXRvO1xuXApzbmlwcGV0IHBnYmk6YXZcblwKCXBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcblwKc25pcHBldCBwb3NcblwKCXBvc2l0aW9uOiAkezF9O1xuXApzbmlwcGV0IHBvczphXG5cCglwb3NpdGlvbjogYWJzb2x1dGU7XG5cCnNuaXBwZXQgcG9zOmZcblwKCXBvc2l0aW9uOiBmaXhlZDtcblwKc25pcHBldCBwb3M6clxuXAoJcG9zaXRpb246IHJlbGF0aXZlO1xuXApzbmlwcGV0IHBvczpzXG5cCglwb3NpdGlvbjogc3RhdGljO1xuXApzbmlwcGV0IHFcblwKCXF1b3RlczogJHsxfTtcblwKc25pcHBldCBxOmVuXG5cCglxdW90ZXM6ICdcXDIwMUMnICdcXDIwMUQnICdcXDIwMTgnICdcXDIwMTknO1xuXApzbmlwcGV0IHE6blxuXAoJcXVvdGVzOiBub25lO1xuXApzbmlwcGV0IHE6cnVcblwKCXF1b3RlczogJ1xcMDBBQicgJ1xcMDBCQicgJ1xcMjAxRScgJ1xcMjAxQyc7XG5cCnNuaXBwZXQgcnpcblwKCXJlc2l6ZTogJHsxfTtcblwKc25pcHBldCByejpiXG5cCglyZXNpemU6IGJvdGg7XG5cCnNuaXBwZXQgcno6aFxuXAoJcmVzaXplOiBob3Jpem9udGFsO1xuXApzbmlwcGV0IHJ6Om5cblwKCXJlc2l6ZTogbm9uZTtcblwKc25pcHBldCByejp2XG5cCglyZXNpemU6IHZlcnRpY2FsO1xuXApzbmlwcGV0IHJcblwKCXJpZ2h0OiAkezF9O1xuXApzbmlwcGV0IHI6YVxuXAoJcmlnaHQ6IGF1dG87XG5cCnNuaXBwZXQgdGJsXG5cCgl0YWJsZS1sYXlvdXQ6ICR7MX07XG5cCnNuaXBwZXQgdGJsOmFcblwKCXRhYmxlLWxheW91dDogYXV0bztcblwKc25pcHBldCB0Ymw6ZlxuXAoJdGFibGUtbGF5b3V0OiBmaXhlZDtcblwKc25pcHBldCB0YWxcblwKCXRleHQtYWxpZ24tbGFzdDogJHsxfTtcblwKc25pcHBldCB0YWw6YVxuXAoJdGV4dC1hbGlnbi1sYXN0OiBhdXRvO1xuXApzbmlwcGV0IHRhbDpjXG5cCgl0ZXh0LWFsaWduLWxhc3Q6IGNlbnRlcjtcblwKc25pcHBldCB0YWw6bFxuXAoJdGV4dC1hbGlnbi1sYXN0OiBsZWZ0O1xuXApzbmlwcGV0IHRhbDpyXG5cCgl0ZXh0LWFsaWduLWxhc3Q6IHJpZ2h0O1xuXApzbmlwcGV0IHRhXG5cCgl0ZXh0LWFsaWduOiAkezF9O1xuXApzbmlwcGV0IHRhOmNcblwKCXRleHQtYWxpZ246IGNlbnRlcjtcblwKc25pcHBldCB0YTpsXG5cCgl0ZXh0LWFsaWduOiBsZWZ0O1xuXApzbmlwcGV0IHRhOnJcblwKCXRleHQtYWxpZ246IHJpZ2h0O1xuXApzbmlwcGV0IHRkXG5cCgl0ZXh0LWRlY29yYXRpb246ICR7MX07XG5cCnNuaXBwZXQgdGQ6bFxuXAoJdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XG5cCnNuaXBwZXQgdGQ6blxuXAoJdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXApzbmlwcGV0IHRkOm9cblwKCXRleHQtZGVjb3JhdGlvbjogb3ZlcmxpbmU7XG5cCnNuaXBwZXQgdGQ6dVxuXAoJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG5cCnNuaXBwZXQgdGVcblwKCXRleHQtZW1waGFzaXM6ICR7MX07XG5cCnNuaXBwZXQgdGU6YWNcblwKCXRleHQtZW1waGFzaXM6IGFjY2VudDtcblwKc25pcHBldCB0ZTphXG5cCgl0ZXh0LWVtcGhhc2lzOiBhZnRlcjtcblwKc25pcHBldCB0ZTpiXG5cCgl0ZXh0LWVtcGhhc2lzOiBiZWZvcmU7XG5cCnNuaXBwZXQgdGU6Y1xuXAoJdGV4dC1lbXBoYXNpczogY2lyY2xlO1xuXApzbmlwcGV0IHRlOmRzXG5cCgl0ZXh0LWVtcGhhc2lzOiBkaXNjO1xuXApzbmlwcGV0IHRlOmR0XG5cCgl0ZXh0LWVtcGhhc2lzOiBkb3Q7XG5cCnNuaXBwZXQgdGU6blxuXAoJdGV4dC1lbXBoYXNpczogbm9uZTtcblwKc25pcHBldCB0aFxuXAoJdGV4dC1oZWlnaHQ6ICR7MX07XG5cCnNuaXBwZXQgdGg6YVxuXAoJdGV4dC1oZWlnaHQ6IGF1dG87XG5cCnNuaXBwZXQgdGg6ZlxuXAoJdGV4dC1oZWlnaHQ6IGZvbnQtc2l6ZTtcblwKc25pcHBldCB0aDptXG5cCgl0ZXh0LWhlaWdodDogbWF4LXNpemU7XG5cCnNuaXBwZXQgdGg6dFxuXAoJdGV4dC1oZWlnaHQ6IHRleHQtc2l6ZTtcblwKc25pcHBldCB0aVxuXAoJdGV4dC1pbmRlbnQ6ICR7MX07XG5cCnNuaXBwZXQgdGk6LVxuXAoJdGV4dC1pbmRlbnQ6IC05OTk5cHg7XG5cCnNuaXBwZXQgdGpcblwKCXRleHQtanVzdGlmeTogJHsxfTtcblwKc25pcHBldCB0ajphXG5cCgl0ZXh0LWp1c3RpZnk6IGF1dG87XG5cCnNuaXBwZXQgdGo6ZFxuXAoJdGV4dC1qdXN0aWZ5OiBkaXN0cmlidXRlO1xuXApzbmlwcGV0IHRqOmljXG5cCgl0ZXh0LWp1c3RpZnk6IGludGVyLWNsdXN0ZXI7XG5cCnNuaXBwZXQgdGo6aWlcblwKCXRleHQtanVzdGlmeTogaW50ZXItaWRlb2dyYXBoO1xuXApzbmlwcGV0IHRqOml3XG5cCgl0ZXh0LWp1c3RpZnk6IGludGVyLXdvcmQ7XG5cCnNuaXBwZXQgdGo6a1xuXAoJdGV4dC1qdXN0aWZ5OiBrYXNoaWRhO1xuXApzbmlwcGV0IHRqOnRcblwKCXRleHQtanVzdGlmeTogdGliZXRhbjtcblwKc25pcHBldCB0bytcblwKCXRleHQtb3V0bGluZTogJHsxOjB9ICR7MjowfSAjJHszOjAwMH07XG5cCnNuaXBwZXQgdG9cblwKCXRleHQtb3V0bGluZTogJHsxfTtcblwKc25pcHBldCB0bzpuXG5cCgl0ZXh0LW91dGxpbmU6IG5vbmU7XG5cCnNuaXBwZXQgdHJcblwKCXRleHQtcmVwbGFjZTogJHsxfTtcblwKc25pcHBldCB0cjpuXG5cCgl0ZXh0LXJlcGxhY2U6IG5vbmU7XG5cCnNuaXBwZXQgdHNoK1xuXAoJdGV4dC1zaGFkb3c6ICR7MTowfSAkezI6MH0gJHszOjB9ICMkezQ6MDAwfTtcblwKc25pcHBldCB0c2hcblwKCXRleHQtc2hhZG93OiAkezF9O1xuXApzbmlwcGV0IHRzaDpuXG5cCgl0ZXh0LXNoYWRvdzogbm9uZTtcblwKc25pcHBldCB0dFxuXAoJdGV4dC10cmFuc2Zvcm06ICR7MX07XG5cCnNuaXBwZXQgdHQ6Y1xuXAoJdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG5cCnNuaXBwZXQgdHQ6bFxuXAoJdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcblwKc25pcHBldCB0dDpuXG5cCgl0ZXh0LXRyYW5zZm9ybTogbm9uZTtcblwKc25pcHBldCB0dDp1XG5cCgl0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuXApzbmlwcGV0IHR3XG5cCgl0ZXh0LXdyYXA6ICR7MX07XG5cCnNuaXBwZXQgdHc6bm9cblwKCXRleHQtd3JhcDogbm9uZTtcblwKc25pcHBldCB0dzpuXG5cCgl0ZXh0LXdyYXA6IG5vcm1hbDtcblwKc25pcHBldCB0dzpzXG5cCgl0ZXh0LXdyYXA6IHN1cHByZXNzO1xuXApzbmlwcGV0IHR3OnVcblwKCXRleHQtd3JhcDogdW5yZXN0cmljdGVkO1xuXApzbmlwcGV0IHRcblwKCXRvcDogJHsxfTtcblwKc25pcHBldCB0OmFcblwKCXRvcDogYXV0bztcblwKc25pcHBldCB2YVxuXAoJdmVydGljYWwtYWxpZ246ICR7MX07XG5cCnNuaXBwZXQgdmE6YmxcblwKCXZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcblwKc25pcHBldCB2YTpiXG5cCgl2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuXApzbmlwcGV0IHZhOm1cblwKCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cCnNuaXBwZXQgdmE6c3ViXG5cCgl2ZXJ0aWNhbC1hbGlnbjogc3ViO1xuXApzbmlwcGV0IHZhOnN1cFxuXAoJdmVydGljYWwtYWxpZ246IHN1cGVyO1xuXApzbmlwcGV0IHZhOnRiXG5cCgl2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207XG5cCnNuaXBwZXQgdmE6dHRcblwKCXZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDtcblwKc25pcHBldCB2YTp0XG5cCgl2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXApzbmlwcGV0IHZcblwKCXZpc2liaWxpdHk6ICR7MX07XG5cCnNuaXBwZXQgdjpjXG5cCgl2aXNpYmlsaXR5OiBjb2xsYXBzZTtcblwKc25pcHBldCB2OmhcblwKCXZpc2liaWxpdHk6IGhpZGRlbjtcblwKc25pcHBldCB2OnZcblwKCXZpc2liaWxpdHk6IHZpc2libGU7XG5cCnNuaXBwZXQgd2hzY1xuXAoJd2hpdGUtc3BhY2UtY29sbGFwc2U6ICR7MX07XG5cCnNuaXBwZXQgd2hzYzpiYVxuXAoJd2hpdGUtc3BhY2UtY29sbGFwc2U6IGJyZWFrLWFsbDtcblwKc25pcHBldCB3aHNjOmJzXG5cCgl3aGl0ZS1zcGFjZS1jb2xsYXBzZTogYnJlYWstc3RyaWN0O1xuXApzbmlwcGV0IHdoc2M6a1xuXAoJd2hpdGUtc3BhY2UtY29sbGFwc2U6IGtlZXAtYWxsO1xuXApzbmlwcGV0IHdoc2M6bFxuXAoJd2hpdGUtc3BhY2UtY29sbGFwc2U6IGxvb3NlO1xuXApzbmlwcGV0IHdoc2M6blxuXAoJd2hpdGUtc3BhY2UtY29sbGFwc2U6IG5vcm1hbDtcblwKc25pcHBldCB3aHNcblwKCXdoaXRlLXNwYWNlOiAkezF9O1xuXApzbmlwcGV0IHdoczpuXG5cCgl3aGl0ZS1zcGFjZTogbm9ybWFsO1xuXApzbmlwcGV0IHdoczpud1xuXAoJd2hpdGUtc3BhY2U6IG5vd3JhcDtcblwKc25pcHBldCB3aHM6cGxcblwKCXdoaXRlLXNwYWNlOiBwcmUtbGluZTtcblwKc25pcHBldCB3aHM6cHdcblwKCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcblwKc25pcHBldCB3aHM6cFxuXAoJd2hpdGUtc3BhY2U6IHByZTtcblwKc25pcHBldCB3aWRcblwKCXdpZG93czogJHsxfTtcblwKc25pcHBldCB3XG5cCgl3aWR0aDogJHsxfTtcblwKc25pcHBldCB3OmFcblwKCXdpZHRoOiBhdXRvO1xuXApzbmlwcGV0IHdvYlxuXAoJd29yZC1icmVhazogJHsxfTtcblwKc25pcHBldCB3b2I6YmFcblwKCXdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcblwKc25pcHBldCB3b2I6YnNcblwKCXdvcmQtYnJlYWs6IGJyZWFrLXN0cmljdDtcblwKc25pcHBldCB3b2I6a1xuXAoJd29yZC1icmVhazoga2VlcC1hbGw7XG5cCnNuaXBwZXQgd29iOmxcblwKCXdvcmQtYnJlYWs6IGxvb3NlO1xuXApzbmlwcGV0IHdvYjpuXG5cCgl3b3JkLWJyZWFrOiBub3JtYWw7XG5cCnNuaXBwZXQgd29zXG5cCgl3b3JkLXNwYWNpbmc6ICR7MX07XG5cCnNuaXBwZXQgd293XG5cCgl3b3JkLXdyYXA6ICR7MX07XG5cCnNuaXBwZXQgd293Om5vXG5cCgl3b3JkLXdyYXA6IG5vbmU7XG5cCnNuaXBwZXQgd293Om5cblwKCXdvcmQtd3JhcDogbm9ybWFsO1xuXApzbmlwcGV0IHdvdzpzXG5cCgl3b3JkLXdyYXA6IHN1cHByZXNzO1xuXApzbmlwcGV0IHdvdzp1XG5cCgl3b3JkLXdyYXA6IHVucmVzdHJpY3RlZDtcblwKc25pcHBldCB6XG5cCgl6LWluZGV4OiAkezF9O1xuXApzbmlwcGV0IHo6YVxuXAoJei1pbmRleDogYXV0bztcblwKc25pcHBldCB6b29cblwKCXpvb206IDE7XG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiY3NzIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvY3NzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/curly.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY3VybHkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJjdXJseSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2N1cmx5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/c_cpp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvY19jcHAiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAiIyMgU1RMIENvbGxlY3Rpb25zXG5cCiMgc3RkOjphcnJheVxuXApzbmlwcGV0IGFycmF5XG5cCglzdGQ6OmFycmF5PCR7MTpUfSwgJHsyOk59PiAkezN9OyR7NH1cblwKIyBzdGQ6OnZlY3RvclxuXApzbmlwcGV0IHZlY3RvclxuXAoJc3RkOjp2ZWN0b3I8JHsxOlR9PiAkezJ9OyR7M31cblwKIyBzdGQ6OmRlcXVlXG5cCnNuaXBwZXQgZGVxdWVcblwKCXN0ZDo6ZGVxdWU8JHsxOlR9PiAkezJ9OyR7M31cblwKIyBzdGQ6OmZvcndhcmRfbGlzdFxuXApzbmlwcGV0IGZsaXN0XG5cCglzdGQ6OmZvcndhcmRfbGlzdDwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6bGlzdFxuXApzbmlwcGV0IGxpc3RcblwKCXN0ZDo6bGlzdDwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6c2V0XG5cCnNuaXBwZXQgc2V0XG5cCglzdGQ6OnNldDwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6bWFwXG5cCnNuaXBwZXQgbWFwXG5cCglzdGQ6Om1hcDwkezE6S2V5fSwgJHsyOlR9PiAkezN9OyR7NH1cblwKIyBzdGQ6Om11bHRpc2V0XG5cCnNuaXBwZXQgbXNldFxuXAoJc3RkOjptdWx0aXNldDwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6bXVsdGltYXBcblwKc25pcHBldCBtbWFwXG5cCglzdGQ6Om11bHRpbWFwPCR7MTpLZXl9LCAkezI6VH0+ICR7M307JHs0fVxuXAojIHN0ZDo6dW5vcmRlcmVkX3NldFxuXApzbmlwcGV0IHVzZXRcblwKCXN0ZDo6dW5vcmRlcmVkX3NldDwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6dW5vcmRlcmVkX21hcFxuXApzbmlwcGV0IHVtYXBcblwKCXN0ZDo6dW5vcmRlcmVkX21hcDwkezE6S2V5fSwgJHsyOlR9PiAkezN9OyR7NH1cblwKIyBzdGQ6OnVub3JkZXJlZF9tdWx0aXNldFxuXApzbmlwcGV0IHVtc2V0XG5cCglzdGQ6OnVub3JkZXJlZF9tdWx0aXNldDwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6dW5vcmRlcmVkX211bHRpbWFwXG5cCnNuaXBwZXQgdW1tYXBcblwKCXN0ZDo6dW5vcmRlcmVkX211bHRpbWFwPCR7MTpLZXl9LCAkezI6VH0+ICR7M307JHs0fVxuXAojIHN0ZDo6c3RhY2tcblwKc25pcHBldCBzdGFja1xuXAoJc3RkOjpzdGFjazwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6cXVldWVcblwKc25pcHBldCBxdWV1ZVxuXAoJc3RkOjpxdWV1ZTwkezE6VH0+ICR7Mn07JHszfVxuXAojIHN0ZDo6cHJpb3JpdHlfcXVldWVcblwKc25pcHBldCBwcXVldWVcblwKCXN0ZDo6cHJpb3JpdHlfcXVldWU8JHsxOlR9PiAkezJ9OyR7M31cblwKIyNcblwKIyMgQWNjZXNzIE1vZGlmaWVyc1xuXAojIHByaXZhdGVcblwKc25pcHBldCBwcmlcblwKCXByaXZhdGVcblwKIyBwcm90ZWN0ZWRcblwKc25pcHBldCBwcm9cblwKCXByb3RlY3RlZFxuXAojIHB1YmxpY1xuXApzbmlwcGV0IHB1YlxuXAoJcHVibGljXG5cCiMgZnJpZW5kXG5cCnNuaXBwZXQgZnJcblwKCWZyaWVuZFxuXAojIG11dGFibGVcblwKc25pcHBldCBtdVxuXAoJbXV0YWJsZVxuXAojIyBcblwKIyMgQ2xhc3NcblwKIyBjbGFzc1xuXApzbmlwcGV0IGNsXG5cCgljbGFzcyAkezE6YEZpbGVuYW1lKCckMScsICduYW1lJylgfSBcblwKCXtcblwKCXB1YmxpYzpcblwKCQkkMSgkezJ9KTtcblwKCQl+JDEoKTtcblwKXG5cCglwcml2YXRlOlxuXAoJCSR7MzovKiBkYXRhICovfVxuXAoJfTtcblwKIyBtZW1iZXIgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25cblwKc25pcHBldCBtZnVuXG5cCgkkezQ6dm9pZH0gJHsxOmBGaWxlbmFtZSgnJDEnLCAnQ2xhc3NOYW1lJylgfTo6JHsyOm1lbWJlckZ1bmN0aW9ufSgkezN9KSB7XG5cCgkJJHs1Oi8qIGNvZGUgKi99XG5cCgl9XG5cCiMgbmFtZXNwYWNlXG5cCnNuaXBwZXQgbnNcblwKCW5hbWVzcGFjZSAkezE6YEZpbGVuYW1lKCcnLCAnbXknKWB9IHtcblwKCQkkezJ9XG5cCgl9IC8qIG5hbWVzcGFjZSAkMSAqL1xuXAojI1xuXAojIyBJbnB1dC9PdXRwdXRcblwKIyBzdGQ6OmNvdXRcblwKc25pcHBldCBjb3V0XG5cCglzdGQ6OmNvdXQgPDwgJHsxfSA8PCBzdGQ6OmVuZGw7JHsyfVxuXAojIHN0ZDo6Y2luXG5cCnNuaXBwZXQgY2luXG5cCglzdGQ6OmNpbiA+PiAkezF9OyR7Mn1cblwKIyNcblwKIyMgSXRlcmF0aW9uXG5cCiMgZm9yIGkgXG5cCnNuaXBwZXQgZm9yaVxuXAoJZm9yIChpbnQgJHsyOml9ID0gMDsgJDIgPCAkezE6Y291bnR9OyAkMiR7MzorK30pIHtcblwKCQkkezQ6LyogY29kZSAqL31cblwKCX0kezV9XG5cClxuXAojIGZvcmVhY2hcblwKc25pcHBldCBmb3JlXG5cCglmb3IgKCR7MTphdXRvfSAkezI6aX0gOiAkezM6Y29udGFpbmVyfSkge1xuXAoJCSR7NDovKiBjb2RlICovfVxuXAoJfSR7NX1cblwKIyBpdGVyYXRvclxuXApzbmlwcGV0IGl0ZXJcblwKCWZvciAoJHsxOnN0ZDo6dmVjdG9yfTwkezI6dHlwZX0+OjokezM6Y29uc3RfaXRlcmF0b3J9ICR7NDppfSA9ICR7NTpjb250YWluZXJ9LmJlZ2luKCk7ICQ0ICE9ICQ1LmVuZCgpOyArKyQ0KSB7XG5cCgkJJHs2fVxuXAoJfSR7N31cblwKXG5cCiMgYXV0byBpdGVyYXRvclxuXApzbmlwcGV0IGl0ZXJhXG5cCglmb3IgKGF1dG8gJHsxOml9ID0gJDEuYmVnaW4oKTsgJDEgIT0gJDEuZW5kKCk7ICsrJDEpIHtcblwKCQkkezI6c3RkOjpjb3V0IDw8ICokMSA8PCBzdGQ6OmVuZGw7fVxuXAoJfSR7M31cblwKIyNcblwKIyMgTGFtYmRhc1xuXAojIGxhbWRhIChvbmUgbGluZSlcblwKc25pcHBldCBsZFxuXAoJWyR7MX1dKCR7Mn0peyR7MzovKiBjb2RlICovfX0kezR9XG5cCiMgbGFtYmRhIChtdWx0aS1saW5lKVxuXApzbmlwcGV0IGxsZFxuXAoJWyR7MX1dKCR7Mn0pe1xuXAoJCSR7MzovKiBjb2RlICovfVxuXAoJfSR7NH1cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJjX2NwcCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2NfY3BwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/d.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9kIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/dart.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZGFydCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICJzbmlwcGV0IGxpYlxuXAoJbGlicmFyeSAkezF9O1xuXAoJJHsyfVxuXApzbmlwcGV0IGltXG5cCglpbXBvcnQgJyR7MX0nO1xuXAoJJHsyfVxuXApzbmlwcGV0IHBhXG5cCglwYXJ0ICckezF9JztcblwKCSR7Mn1cblwKc25pcHBldCBwYW9cblwKCXBhcnQgb2YgJHsxfTtcblwKCSR7Mn1cblwKc25pcHBldCBtYWluXG5cCgl2b2lkIG1haW4oKSB7XG5cCgkgICR7MTovKiBjb2RlICovfVxuXAoJfVxuXApzbmlwcGV0IHN0XG5cCglzdGF0aWMgJHsxfVxuXApzbmlwcGV0IGZpXG5cCglmaW5hbCAkezF9XG5cCnNuaXBwZXQgcmVcblwKCXJldHVybiAkezF9XG5cCnNuaXBwZXQgYnJcblwKCWJyZWFrO1xuXApzbmlwcGV0IHRoXG5cCgl0aHJvdyAkezF9XG5cCnNuaXBwZXQgY2xcblwKCWNsYXNzICR7MTpgRmlsZW5hbWUoXCJcIiwgXCJ1bnRpdGxlZFwiKWB9ICR7Mn1cblwKc25pcHBldCBpbXBcblwKCWltcGxlbWVudHMgJHsxfVxuXApzbmlwcGV0IGV4dFxuXAoJZXh0ZW5kcyAkezF9XG5cCnNuaXBwZXQgaWZcblwKCWlmICgkezE6dHJ1ZX0pIHtcblwKCSAgJHsyfVxuXAoJfVxuXApzbmlwcGV0IGlmZVxuXAoJaWYgKCR7MTp0cnVlfSkge1xuXAoJICAkezJ9XG5cCgl9IGVsc2Uge1xuXAoJICAkezN9XG5cCgl9XG5cCnNuaXBwZXQgZWxcblwKCWVsc2VcblwKc25pcHBldCBzd1xuXAoJc3dpdGNoICgkezF9KSB7XG5cCgkgICR7Mn1cblwKCX1cblwKc25pcHBldCBjc1xuXAoJY2FzZSAkezF9OlxuXAoJICAkezJ9XG5cCnNuaXBwZXQgZGVcblwKCWRlZmF1bHQ6XG5cCgkgICR7MX1cblwKc25pcHBldCBmb3JcblwKCWZvciAodmFyICR7MjppfSA9IDAsIGxlbiA9ICR7MTp0aGluZ3N9Lmxlbmd0aDsgJDIgPCBsZW47ICR7MzorK30kMikge1xuXAoJICAkezQ6JDFbJDJdfVxuXAoJfVxuXApzbmlwcGV0IGZvcmVcblwKCWZvciAoZmluYWwgJHsyOml0ZW19IGluICR7MTppdGVtTGlzdH0pIHtcblwKCSAgJHszOi8qIGNvZGUgKi99XG5cCgl9XG5cCnNuaXBwZXQgd2hcblwKCXdoaWxlICgkezE6LyogY29uZGl0aW9uICovfSkge1xuXAoJICAkezI6LyogY29kZSAqL31cblwKCX1cblwKc25pcHBldCBkb3doXG5cCglkbyB7XG5cCgkgICR7MjovKiBjb2RlICovfVxuXAoJfSB3aGlsZSAoJHsxOi8qIGNvbmRpdGlvbiAqL30pO1xuXApzbmlwcGV0IGFzXG5cCglhc3NlcnQoJHsxOi8qIGNvbmRpdGlvbiAqL30pO1xuXApzbmlwcGV0IHRyeVxuXAoJdHJ5IHtcblwKCSAgJHsyfVxuXAoJfSBjYXRjaCAoJHsxOkV4Y2VwdGlvbiBlfSkge1xuXAoJfVxuXApzbmlwcGV0IHRyeWZcblwKCXRyeSB7XG5cCgkgICR7Mn1cblwKCX0gY2F0Y2ggKCR7MTpFeGNlcHRpb24gZX0pIHtcblwKCX0gZmluYWxseSB7XG5cCgl9XG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiZGFydCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2RhcnQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZGlmZiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIERFUC0zIChodHRwOi8vZGVwLmRlYmlhbi5uZXQvZGVwcy9kZXAzLykgc3R5bGUgcGF0Y2ggaGVhZGVyXG5cCnNuaXBwZXQgaGVhZGVyIERFUC0zIHN0eWxlIGhlYWRlclxuXAoJRGVzY3JpcHRpb246ICR7MX1cblwKCU9yaWdpbjogJHsyOnZlbmRvcnx1cHN0cmVhbXxvdGhlcn0sICR7Mzp1cmwgb2YgdGhlIG9yaWdpbmFsIHBhdGNofVxuXAoJQnVnOiAkezQ6dXJsIGluIHVwc3RyZWFtIGJ1Z3RyYWNrZXJ9XG5cCglGb3J3YXJkZWQ6ICR7NTpub3xub3QtbmVlZGVkfHVybH1cblwKCUF1dGhvcjogJHs2OmBnOnNuaXBzX2F1dGhvcmB9XG5cCglSZXZpZXdlZC1ieTogJHs3Om5hbWUgYW5kIGVtYWlsfVxuXAoJTGFzdC1VcGRhdGU6ICR7ODpgc3RyZnRpbWUoXCIlWS0lbS0lZFwiKWB9XG5cCglBcHBsaWVkLVVwc3RyZWFtOiAkezk6dXBzdHJlYW0gdmVyc2lvbnx1cmx8Y29tbWl0fVxuXApcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJkaWZmIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZGlmZiJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/django.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZGphbmdvIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgTW9kZWwgRmllbGRzXG5cClxuXAojIE5vdGU6IE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgdXNpbmcgZGVmYXVsdHMgdGhhdCBtYXRjaCB3aGF0IERqYW5nbyB3aWxsIHVzZVxuXAojIGFzIGEgZGVmYXVsdCwgZS5nLiB3aXRoIG1heF9sZW5ndGggZmllbGRzLiAgRG9pbmcgdGhpcyBhcyBhIGZvcm0gb2Ygc2VsZlxuXAojIGRvY3VtZW50YXRpb24gYW5kIHRvIG1ha2UgaXQgZWFzeSB0byBrbm93IHdoZXRoZXIgeW91IHNob3VsZCBvdmVycmlkZSB0aGVcblwKIyBkZWZhdWx0IG9yIG5vdC5cblwKXG5cCiMgTm90ZTogT3B0aW9uYWwgYXJndW1lbnRzIHRoYXQgYXJlIGJvb2xlYW5zIHdpbGwgdXNlIHRoZSBvcHBvc2l0ZSBzaW5jZSB5b3VcblwKIyBjYW4gZWl0aGVyIG5vdCBzcGVjaWZ5IHRoZW0sIG9yIG92ZXJyaWRlIHRoZW0sIGUuZy4gYXV0b19ub3dfYWRkPUZhbHNlLlxuXApcblwKc25pcHBldCBhdXRvXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5BdXRvRmllbGQoJHsyfSlcblwKc25pcHBldCBib29sXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5Cb29sZWFuRmllbGQoJHsyOmRlZmF1bHQ9VHJ1ZX0pXG5cCnNuaXBwZXQgY2hhclxuXAoJJHsxOkZJRUxETkFNRX0gPSBtb2RlbHMuQ2hhckZpZWxkKG1heF9sZW5ndGg9JHsyfSR7MzosIGJsYW5rPVRydWV9KVxuXApzbmlwcGV0IGNvbW1hXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5Db21tYVNlcGFyYXRlZEludGVnZXJGaWVsZChtYXhfbGVuZ3RoPSR7Mn0kezM6LCBibGFuaz1UcnVlfSlcblwKc25pcHBldCBkYXRlXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5EYXRlRmllbGQoJHsyOmF1dG9fbm93X2FkZD1UcnVlLCBhdXRvX25vdz1UcnVlfSR7MzosIGJsYW5rPVRydWUsIG51bGw9VHJ1ZX0pXG5cCnNuaXBwZXQgZGF0ZXRpbWVcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoJHsyOmF1dG9fbm93X2FkZD1UcnVlLCBhdXRvX25vdz1UcnVlfSR7MzosIGJsYW5rPVRydWUsIG51bGw9VHJ1ZX0pXG5cCnNuaXBwZXQgZGVjaW1hbFxuXAoJJHsxOkZJRUxETkFNRX0gPSBtb2RlbHMuRGVjaW1hbEZpZWxkKG1heF9kaWdpdHM9JHsyfSwgZGVjaW1hbF9wbGFjZXM9JHszfSlcblwKc25pcHBldCBlbWFpbFxuXAoJJHsxOkZJRUxETkFNRX0gPSBtb2RlbHMuRW1haWxGaWVsZChtYXhfbGVuZ3RoPSR7Mjo3NX0kezM6LCBibGFuaz1UcnVlfSlcblwKc25pcHBldCBmaWxlXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5GaWxlRmllbGQodXBsb2FkX3RvPSR7MjpwYXRoL2Zvci91cGxvYWR9JHszOiwgbWF4X2xlbmd0aD0xMDB9KVxuXApzbmlwcGV0IGZpbGVwYXRoXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5GaWxlUGF0aEZpZWxkKHBhdGg9JHsyOlwiL2Ficy9wYXRoL3RvL2RpclwifSR7MzosIG1heF9sZW5ndGg9MTAwfSR7NDosIG1hdGNoPVwiKi5leHRcIn0kezU6LCByZWN1cnNpdmU9VHJ1ZX0kezY6LCBibGFuaz1UcnVlLCB9KVxuXApzbmlwcGV0IGZsb2F0XG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5GbG9hdEZpZWxkKCR7Mn0pXG5cCnNuaXBwZXQgaW1hZ2VcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLkltYWdlRmllbGQodXBsb2FkX3RvPSR7MjpwYXRoL2Zvci91cGxvYWR9JHszOiwgaGVpZ2h0X2ZpZWxkPWhlaWdodCwgd2lkdGhfZmllbGQ9d2lkdGh9JHs0OiwgbWF4X2xlbmd0aD0xMDB9KVxuXApzbmlwcGV0IGludFxuXAoJJHsxOkZJRUxETkFNRX0gPSBtb2RlbHMuSW50ZWdlckZpZWxkKCR7Mn0pXG5cCnNuaXBwZXQgaXBcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLklQQWRkcmVzc0ZpZWxkKCR7Mn0pXG5cCnNuaXBwZXQgbnVsbGJvb2xcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLk51bGxCb29sZWFuRmllbGQoJHsyfSlcblwKc25pcHBldCBwb3NpbnRcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLlBvc2l0aXZlSW50ZWdlckZpZWxkKCR7Mn0pXG5cCnNuaXBwZXQgcG9zc21hbGxpbnRcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLlBvc2l0aXZlU21hbGxJbnRlZ2VyRmllbGQoJHsyfSlcblwKc25pcHBldCBzbHVnXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5TbHVnRmllbGQobWF4X2xlbmd0aD0kezI6NTB9JHszOiwgYmxhbms9VHJ1ZX0pXG5cCnNuaXBwZXQgc21hbGxpbnRcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLlNtYWxsSW50ZWdlckZpZWxkKCR7Mn0pXG5cCnNuaXBwZXQgdGV4dFxuXAoJJHsxOkZJRUxETkFNRX0gPSBtb2RlbHMuVGV4dEZpZWxkKCR7MjpibGFuaz1UcnVlfSlcblwKc25pcHBldCB0aW1lXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5UaW1lRmllbGQoJHsyOmF1dG9fbm93X2FkZD1UcnVlLCBhdXRvX25vdz1UcnVlfSR7MzosIGJsYW5rPVRydWUsIG51bGw9VHJ1ZX0pXG5cCnNuaXBwZXQgdXJsXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5VUkxGaWVsZCgkezI6dmVyaWZ5X2V4aXN0cz1GYWxzZX0kezM6LCBtYXhfbGVuZ3RoPTIwMH0kezQ6LCBibGFuaz1UcnVlfSlcblwKc25pcHBldCB4bWxcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLlhNTEZpZWxkKHNjaGVtYV9wYXRoPSR7MjpOb25lfSR7MzosIGJsYW5rPVRydWV9KVxuXAojIFJlbGF0aW9uYWwgRmllbGRzXG5cCnNuaXBwZXQgZmtcblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLkZvcmVpZ25LZXkoJHsyOk90aGVyTW9kZWx9JHszOiwgcmVsYXRlZF9uYW1lPScnfSR7NDosIGxpbWl0X2Nob2ljZXNfdG89fSR7NTosIHRvX2ZpZWxkPScnfSlcblwKc25pcHBldCBtMm1cblwKCSR7MTpGSUVMRE5BTUV9ID0gbW9kZWxzLk1hbnlUb01hbnlGaWVsZCgkezI6T3RoZXJNb2RlbH0kezM6LCByZWxhdGVkX25hbWU9Jyd9JHs0OiwgbGltaXRfY2hvaWNlc190bz19JHs1Oiwgc3ltbWV0cmljYWw9RmFsc2V9JHs2OiwgdGhyb3VnaD0nJ30kezc6LCBkYl90YWJsZT0nJ30pXG5cCnNuaXBwZXQgbzJvXG5cCgkkezE6RklFTEROQU1FfSA9IG1vZGVscy5PbmVUb09uZUZpZWxkKCR7MjpPdGhlck1vZGVsfSR7MzosIHBhcmVudF9saW5rPVRydWV9JHs0OiwgcmVsYXRlZF9uYW1lPScnfSR7NTosIGxpbWl0X2Nob2ljZXNfdG89fSR7NjosIHRvX2ZpZWxkPScnfSlcblwKXG5cCiMgQ29kZSBTa2VsZXRvbnNcblwKXG5cCnNuaXBwZXQgZm9ybVxuXAoJY2xhc3MgJHsxOkZvcm1OYW1lfShmb3Jtcy5Gb3JtKTpcblwKCQlcIlwiXCIkezI6ZG9jc3RyaW5nfVwiXCJcIlxuXAoJCSR7M31cblwKXG5cCnNuaXBwZXQgbW9kZWxcblwKCWNsYXNzICR7MTpNb2RlbE5hbWV9KG1vZGVscy5Nb2RlbCk6XG5cCgkJXCJcIlwiJHsyOmRvY3N0cmluZ31cIlwiXCJcblwKCQkkezN9XG5cCgkJXG5cCgkJY2xhc3MgTWV0YTpcblwKCQkJJHs0fVxuXAoJCVxuXAoJCWRlZiBfX3VuaWNvZGVfXyhzZWxmKTpcblwKCQkJJHs1fVxuXAoJCVxuXAoJCWRlZiBzYXZlKHNlbGYsIGZvcmNlX2luc2VydD1GYWxzZSwgZm9yY2VfdXBkYXRlPUZhbHNlKTpcblwKCQkJJHs2fVxuXAoJCVxuXAoJCUBtb2RlbHMucGVybWFsaW5rXG5cCgkJZGVmIGdldF9hYnNvbHV0ZV91cmwoc2VsZik6XG5cCgkJCXJldHVybiAoJyR7Nzp2aWV3X29yX3VybF9uYW1lfScgJHs4fSlcblwKXG5cCnNuaXBwZXQgbW9kZWxhZG1pblxuXAoJY2xhc3MgJHsxOk1vZGVsTmFtZX1BZG1pbihhZG1pbi5Nb2RlbEFkbWluKTpcblwKCQkkezJ9XG5cCglcblwKCWFkbWluLnNpdGUucmVnaXN0ZXIoJDEsICQxQWRtaW4pXG5cCglcblwKc25pcHBldCB0YWJ1bGFyaW5saW5lXG5cCgljbGFzcyAkezE6TW9kZWxOYW1lfUlubGluZShhZG1pbi5UYWJ1bGFySW5saW5lKTpcblwKCQltb2RlbCA9ICQxXG5cClxuXApzbmlwcGV0IHN0YWNrZWRpbmxpbmVcblwKCWNsYXNzICR7MTpNb2RlbE5hbWV9SW5saW5lKGFkbWluLlN0YWNrZWRJbmxpbmUpOlxuXAoJCW1vZGVsID0gJDFcblwKXG5cCnNuaXBwZXQgcjJyXG5cCglyZXR1cm4gcmVuZGVyX3RvX3Jlc3BvbnNlKCckezE6dGVtcGxhdGUuaHRtbH0nLCB7XG5cCgkJCSR7Mn1cblwKCQl9JHszOiwgY29udGV4dF9pbnN0YW5jZT1SZXF1ZXN0Q29udGV4dChyZXF1ZXN0KX1cblwKCSlcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJkamFuZ28iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9kamFuZ28iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/dockerfile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZG9ja2VyZmlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImRvY2tlcmZpbGUiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9kb2NrZXJmaWxlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/dot.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZG90IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZG90IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZG90Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/drools.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZHJvb2xzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIlxuXApzbmlwcGV0IHJ1bGVcblwKCXJ1bGUgXCIkezE/OnJ1bGVfbmFtZX1cIlxuXAoJd2hlblxuXAoJCSR7MjovLyB3aGVuLi4ufSBcblwKCXRoZW5cblwKCQkkezM6Ly8gdGhlbi4uLn1cblwKCWVuZFxuXApcblwKc25pcHBldCBxdWVyeVxuXAoJcXVlcnkgJHsxPzpxdWVyeV9uYW1lfVxuXAoJCSR7MjovLyBmaW5kfSBcblwKCWVuZFxuXAoJXG5cCnNuaXBwZXQgZGVjbGFyZVxuXAoJZGVjbGFyZSAkezE/OnR5cGVfbmFtZX1cblwKCQkkezI6Ly8gYXR0cmlidXRlc30gXG5cCgllbmRcblwKXG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiZHJvb2xzIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZHJvb2xzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/edifact.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZWRpZmFjdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIyBBY2Nlc3MgTW9kaWZpZXJzXG5cCnNuaXBwZXQgdVxuXAoJVU5cblwKc25pcHBldCB1blxuXAoJVU5CXG5cCnNuaXBwZXQgcHJcblwKCXByaXZhdGVcblwKIyNcblwKIyMgQW5ub3RhdGlvbnNcblwKc25pcHBldCBiZWZvcmVcblwKCUBCZWZvcmVcblwKCXN0YXRpYyB2b2lkICR7MTppbnRlcmNlcHR9KCR7MjphcmdzfSkgeyAkezN9IH1cblwKc25pcHBldCBtbVxuXAoJQE1hbnlUb01hbnlcblwKCSR7MX1cblwKc25pcHBldCBtb1xuXAoJQE1hbnlUb09uZVxuXAoJJHsxfVxuXApzbmlwcGV0IG9tXG5cCglAT25lVG9NYW55JHsxOihjYXNjYWRlPUNhc2NhZGVUeXBlLkFMTCl9XG5cCgkkezJ9XG5cCnNuaXBwZXQgb29cblwKCUBPbmVUb09uZVxuXAoJJHsxfVxuXAojI1xuXAojIyBCYXNpYyBKYXZhIHBhY2thZ2VzIGFuZCBpbXBvcnRcblwKc25pcHBldCBpbVxuXAoJaW1wb3J0XG5cCnNuaXBwZXQgai5iXG5cCglqYXZhLmJlYW5zLlxuXApzbmlwcGV0IGouaVxuXAoJamF2YS5pby5cblwKc25pcHBldCBqLm1cblwKCWphdmEubWF0aC5cblwKc25pcHBldCBqLm5cblwKCWphdmEubmV0LlxuXApzbmlwcGV0IGoudVxuXAoJamF2YS51dGlsLlxuXAojI1xuXAojIyBDbGFzc1xuXApzbmlwcGV0IGNsXG5cCgljbGFzcyAkezE6YEZpbGVuYW1lKFwiXCIsIFwidW50aXRsZWRcIilgfSAkezJ9XG5cCnNuaXBwZXQgaW5cblwKCWludGVyZmFjZSAkezE6YEZpbGVuYW1lKFwiXCIsIFwidW50aXRsZWRcIilgfSAkezI6ZXh0ZW5kcyBQYXJlbnR9JHszfVxuXApzbmlwcGV0IHRjXG5cCglwdWJsaWMgY2xhc3MgJHsxOmBGaWxlbmFtZSgpYH0gZXh0ZW5kcyAkezI6VGVzdENhc2V9XG5cCiMjXG5cCiMjIENsYXNzIEVuaGFuY2VtZW50c1xuXApzbmlwcGV0IGV4dFxuXAoJZXh0ZW5kcyBcblwKc25pcHBldCBpbXBcblwKCWltcGxlbWVudHNcblwKIyNcblwKIyMgQ29tbWVudHNcblwKc25pcHBldCAvKlxuXAoJLypcblwKCSAqICR7MX1cblwKCSAqL1xuXAojI1xuXAojIyBDb25zdGFudHNcblwKc25pcHBldCBjb1xuXAoJc3RhdGljIHB1YmxpYyBmaW5hbCAkezE6U3RyaW5nfSAkezI6dmFyfSA9ICR7M307JHs0fVxuXApzbmlwcGV0IGNvc1xuXAoJc3RhdGljIHB1YmxpYyBmaW5hbCBTdHJpbmcgJHsxOnZhcn0gPSBcIiR7Mn1cIjskezN9XG5cCiMjXG5cCiMjIENvbnRyb2wgU3RhdGVtZW50c1xuXApzbmlwcGV0IGNhc2VcblwKCWNhc2UgJHsxfTpcblwKCQkkezJ9XG5cCnNuaXBwZXQgZGVmXG5cCglkZWZhdWx0OlxuXAoJCSR7Mn1cblwKc25pcHBldCBlbFxuXAoJZWxzZVxuXApzbmlwcGV0IGVsaWZcblwKCWVsc2UgaWYgKCR7MX0pICR7Mn1cblwKc25pcHBldCBpZlxuXAoJaWYgKCR7MX0pICR7Mn1cblwKc25pcHBldCBzd1xuXAoJc3dpdGNoICgkezF9KSB7XG5cCgkJJHsyfVxuXAoJfVxuXAojI1xuXAojIyBDcmVhdGUgYSBNZXRob2RcblwKc25pcHBldCBtXG5cCgkkezE6dm9pZH0gJHsyOm1ldGhvZH0oJHszfSkgJHs0OnRocm93cyB9JHs1fVxuXAojI1xuXAojIyBDcmVhdGUgYSBWYXJpYWJsZVxuXApzbmlwcGV0IHZcblwKCSR7MTpTdHJpbmd9ICR7Mjp2YXJ9JHszOiA9IG51bGx9JHs0fTskezV9XG5cCiMjXG5cCiMjIEVuaGFuY2VtZW50cyB0byBNZXRob2RzLCB2YXJpYWJsZXMsIGNsYXNzZXMsIGV0Yy5cblwKc25pcHBldCBhYlxuXAoJYWJzdHJhY3RcblwKc25pcHBldCBmaVxuXAoJZmluYWxcblwKc25pcHBldCBzdFxuXAoJc3RhdGljXG5cCnNuaXBwZXQgc3lcblwKCXN5bmNocm9uaXplZFxuXAojI1xuXAojIyBFcnJvciBNZXRob2RzXG5cCnNuaXBwZXQgZXJyXG5cCglTeXN0ZW0uZXJyLnByaW50KFwiJHsxOk1lc3NhZ2V9XCIpO1xuXApzbmlwcGV0IGVycmZcblwKCVN5c3RlbS5lcnIucHJpbnRmKFwiJHsxOk1lc3NhZ2V9XCIsICR7MjpleGNlcHRpb259KTtcblwKc25pcHBldCBlcnJsblxuXAoJU3lzdGVtLmVyci5wcmludGxuKFwiJHsxOk1lc3NhZ2V9XCIpO1xuXAojI1xuXAojIyBFeGNlcHRpb24gSGFuZGxpbmdcblwKc25pcHBldCBhc1xuXAoJYXNzZXJ0ICR7MTp0ZXN0fSA6IFwiJHsyOkZhaWx1cmUgbWVzc2FnZX1cIjskezN9XG5cCnNuaXBwZXQgY2FcblwKCWNhdGNoKCR7MTpFeGNlcHRpb259ICR7MjplfSkgJHszfVxuXApzbmlwcGV0IHRoclxuXAoJdGhyb3dcblwKc25pcHBldCB0aHNcblwKCXRocm93c1xuXApzbmlwcGV0IHRyeVxuXAoJdHJ5IHtcblwKCQkkezN9XG5cCgl9IGNhdGNoKCR7MTpFeGNlcHRpb259ICR7MjplfSkge1xuXAoJfVxuXApzbmlwcGV0IHRyeWZcblwKCXRyeSB7XG5cCgkJJHszfVxuXAoJfSBjYXRjaCgkezE6RXhjZXB0aW9ufSAkezI6ZX0pIHtcblwKCX0gZmluYWxseSB7XG5cCgl9XG5cCiMjXG5cCiMjIEZpbmQgTWV0aG9kc1xuXApzbmlwcGV0IGZpbmRhbGxcblwKCUxpc3Q8JHsxOmxpc3ROYW1lfT4gJHsyOml0ZW1zfSA9ICR7MX0uZmluZEFsbCgpOyR7M31cblwKc25pcHBldCBmaW5kYnlpZFxuXAoJJHsxOnZhcn0gJHsyOml0ZW19ID0gJHsxfS5maW5kQnlJZCgkezN9KTskezR9XG5cCiMjXG5cCiMjIEphdmFkb2NzXG5cCnNuaXBwZXQgLyoqXG5cCgkvKipcblwKCSAqICR7MX1cblwKCSAqL1xuXApzbmlwcGV0IEBhdVxuXAoJQGF1dGhvciBgc3lzdGVtKFwiZ3JlcCBcXGBpZCAtdW5cXGAgL2V0Yy9wYXNzd2QgfCBjdXQgLWQgXFxcIjpcXFwiIC1mNSB8IGN1dCAtZCBcXFwiLFxcXCIgLWYxXCIpYFxuXApzbmlwcGV0IEBiclxuXAoJQGJyaWVmICR7MTpEZXNjcmlwdGlvbn1cblwKc25pcHBldCBAZmlcblwKCUBmaWxlICR7MTpgRmlsZW5hbWUoKWB9LmphdmFcblwKc25pcHBldCBAcGFcblwKCUBwYXJhbSAkezE6cGFyYW19XG5cCnNuaXBwZXQgQHJlXG5cCglAcmV0dXJuICR7MTpwYXJhbX1cblwKIyNcblwKIyMgTG9nZ2VyIE1ldGhvZHNcblwKc25pcHBldCBkZWJ1Z1xuXAoJTG9nZ2VyLmRlYnVnKCR7MTpwYXJhbX0pOyR7Mn1cblwKc25pcHBldCBlcnJvclxuXAoJTG9nZ2VyLmVycm9yKCR7MTpwYXJhbX0pOyR7Mn1cblwKc25pcHBldCBpbmZvXG5cCglMb2dnZXIuaW5mbygkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgd2FyblxuXAoJTG9nZ2VyLndhcm4oJHsxOnBhcmFtfSk7JHsyfVxuXAojI1xuXAojIyBMb29wc1xuXApzbmlwcGV0IGVuZm9yXG5cCglmb3IgKCR7MX0gOiAkezJ9KSAkezN9XG5cCnNuaXBwZXQgZm9yXG5cCglmb3IgKCR7MX07ICR7Mn07ICR7M30pICR7NH1cblwKc25pcHBldCB3aFxuXAoJd2hpbGUgKCR7MX0pICR7Mn1cblwKIyNcblwKIyMgTWFpbiBtZXRob2RcblwKc25pcHBldCBtYWluXG5cCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykge1xuXAoJCSR7MTovKiBjb2RlICovfVxuXAoJfVxuXAojI1xuXAojIyBQcmludCBNZXRob2RzXG5cCnNuaXBwZXQgcHJpbnRcblwKCVN5c3RlbS5vdXQucHJpbnQoXCIkezE6TWVzc2FnZX1cIik7XG5cCnNuaXBwZXQgcHJpbnRmXG5cCglTeXN0ZW0ub3V0LnByaW50ZihcIiR7MTpNZXNzYWdlfVwiLCAkezI6YXJnc30pO1xuXApzbmlwcGV0IHByaW50bG5cblwKCVN5c3RlbS5vdXQucHJpbnRsbigkezF9KTtcblwKIyNcblwKIyMgUmVuZGVyIE1ldGhvZHNcblwKc25pcHBldCByZW5cblwKCXJlbmRlcigkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgcmVuYVxuXAoJcmVuZGVyQXJncy5wdXQoXCIkezF9XCIsICR7Mn0pOyR7M31cblwKc25pcHBldCByZW5iXG5cCglyZW5kZXJCaW5hcnkoJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IHJlbmpcblwKCXJlbmRlckpTT04oJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IHJlbnhcblwKCXJlbmRlclhtbCgkezE6cGFyYW19KTskezJ9XG5cCiMjXG5cCiMjIFNldHRlciBhbmQgR2V0dGVyIE1ldGhvZHNcblwKc25pcHBldCBzZXRcblwKCSR7MTpwdWJsaWN9IHZvaWQgc2V0JHszOn0oJHsyOlN0cmluZ30gJHs0On0pe1xuXAoJCXRoaXMuJDQgPSAkNDtcblwKCX1cblwKc25pcHBldCBnZXRcblwKCSR7MTpwdWJsaWN9ICR7MjpTdHJpbmd9IGdldCR7Mzp9KCl7XG5cCgkJcmV0dXJuIHRoaXMuJHs0On07XG5cCgl9XG5cCiMjXG5cCiMjIFRlcm1pbmF0ZSBNZXRob2RzIG9yIExvb3BzXG5cCnNuaXBwZXQgcmVcblwKCXJldHVyblxuXApzbmlwcGV0IGJyXG5cCglicmVhaztcblwKIyNcblwKIyMgVGVzdCBNZXRob2RzXG5cCnNuaXBwZXQgdFxuXAoJcHVibGljIHZvaWQgdGVzdCR7MTpOYW1lfSgpIHRocm93cyBFeGNlcHRpb24ge1xuXAoJCSR7Mn1cblwKCX1cblwKc25pcHBldCB0ZXN0XG5cCglAVGVzdFxuXAoJcHVibGljIHZvaWQgdGVzdCR7MTpOYW1lfSgpIHRocm93cyBFeGNlcHRpb24ge1xuXAoJCSR7Mn1cblwKCX1cblwKIyNcblwKIyMgVXRpbHNcblwKc25pcHBldCBTY1xuXAoJU2Nhbm5lclxuXAojI1xuXAojIyBNaXNjZWxsYW5lb3VzXG5cCnNuaXBwZXQgYWN0aW9uXG5cCglwdWJsaWMgc3RhdGljIHZvaWQgJHsxOmluZGV4fSgkezI6YXJnc30pIHsgJHszfSB9XG5cCnNuaXBwZXQgcm5mXG5cCglub3RGb3VuZCgkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgcm5maW5cblwKCW5vdEZvdW5kSWZOdWxsKCR7MTpwYXJhbX0pOyR7Mn1cblwKc25pcHBldCByclxuXAoJcmVkaXJlY3QoJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IHJ1XG5cCgl1bmF1dGhvcml6ZWQoJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IHVubGVzc1xuXAoJKHVubGVzcz0kezE6cGFyYW19KTskezJ9XG5cCiI7CiAgICBleHBvcnRzLnNjb3BlID0gImVkaWZhY3QiOwogICAgCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZWRpZmFjdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/eiffel.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZWlmZmVsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZWlmZmVsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZWlmZmVsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/ejs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZWpzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZWpzIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZWpzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/elixir.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZWxpeGlyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZWxpeGlyIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/elm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZWxtIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZWxtIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZWxtIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/erlang.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZXJsYW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgbW9kdWxlIGFuZCBleHBvcnQgYWxsXG5cCnNuaXBwZXQgbW9kXG5cCgktbW9kdWxlKCR7MTpgRmlsZW5hbWUoJycsICdteScpYH0pLlxuXAoJXG5cCgktY29tcGlsZShbZXhwb3J0X2FsbF0pLlxuXAoJXG5cCglzdGFydCgpIC0+XG5cCgkgICAgJHsyfVxuXAoJXG5cCglzdG9wKCkgLT5cblwKCSAgICBvay5cblwKIyBkZWZpbmUgZGlyZWN0aXZlXG5cCnNuaXBwZXQgZGVmXG5cCgktZGVmaW5lKCR7MTptYWNyb30sICR7Mjpib2R5fSkuJHszfVxuXAojIGV4cG9ydCBkaXJlY3RpdmVcblwKc25pcHBldCBleHBcblwKCS1leHBvcnQoWyR7MTpmdW5jdGlvbn0vJHsyOmFyaXR5fV0pLlxuXAojIGluY2x1ZGUgZGlyZWN0aXZlXG5cCnNuaXBwZXQgaW5jXG5cCgktaW5jbHVkZShcIiR7MTpmaWxlfVwiKS4kezJ9XG5cCiMgYmVoYXZpb3IgZGlyZWN0aXZlXG5cCnNuaXBwZXQgYmVoXG5cCgktYmVoYXZpb3VyKCR7MTpiZWhhdmlvdXJ9KS4kezJ9XG5cCiMgaWYgZXhwcmVzc2lvblxuXApzbmlwcGV0IGlmXG5cCglpZlxuXAoJICAgICR7MTpndWFyZH0gLT5cblwKCSAgICAgICAgJHsyOmJvZHl9XG5cCgllbmRcblwKIyBjYXNlIGV4cHJlc3Npb25cblwKc25pcHBldCBjYXNlXG5cCgljYXNlICR7MTpleHByZXNzaW9ufSBvZlxuXAoJICAgICR7MjpwYXR0ZXJufSAtPlxuXAoJICAgICAgICAkezM6Ym9keX07XG5cCgllbmRcblwKIyBhbm9ueW1vdXMgZnVuY3Rpb25cblwKc25pcHBldCBmdW5cblwKCWZ1biAoJHsxOlBhcmFtZXRlcnN9KSAtPiAkezI6Ym9keX0gZW5kJHszfVxuXAojIHRyeS4uLmNhdGNoXG5cCnNuaXBwZXQgdHJ5XG5cCgl0cnlcblwKCSAgICAkezF9XG5cCgljYXRjaFxuXAoJICAgICR7MjpfOl99IC0+ICR7Mzpnb3Rfc29tZV9leGNlcHRpb259XG5cCgllbmRcblwKIyByZWNvcmQgZGlyZWN0aXZlXG5cCnNuaXBwZXQgcmVjXG5cCgktcmVjb3JkKCR7MTpyZWNvcmR9LCB7XG5cCgkgICAgJHsyOmZpZWxkfT0kezM6dmFsdWV9fSkuJHs0fVxuXAojIHRvZG8gY29tbWVudFxuXApzbmlwcGV0IHRvZG9cblwKCSUlIFRPRE86ICR7MX1cblwKIyMgU25pcHBldHMgYmVsb3cgKHN0YXJ0aW5nIHdpdGggJyUnKSBhcmUgaW4gRURvYyBmb3JtYXQuXG5cCiMjIFNlZSBodHRwOi8vd3d3LmVybGFuZy5vcmcvZG9jL2FwcHMvZWRvYy9jaGFwdGVyLmh0bWwjaWQ1Njg4NyBmb3IgbW9yZSBkZXRhaWxzXG5cCiMgZG9jIGNvbW1lbnRcblwKc25pcHBldCAlZFxuXAoJJSUgQGRvYyAkezF9XG5cCiMgZW5kIG9mIGRvYyBjb21tZW50XG5cCnNuaXBwZXQgJWVcblwKCSUlIEBlbmRcblwKIyBzcGVjaWZpY2F0aW9uIGNvbW1lbnRcblwKc25pcHBldCAlc1xuXAoJJSUgQHNwZWMgJHsxfVxuXAojIHByaXZhdGUgZnVuY3Rpb24gbWFya2VyXG5cCnNuaXBwZXQgJXBcblwKCSUlIEBwcml2YXRlXG5cCiMgT1RQIGFwcGxpY2F0aW9uXG5cCnNuaXBwZXQgYXBwbGljYXRpb25cblwKCS1tb2R1bGUoJHsxOmBGaWxlbmFtZSgnJywgJ215JylgfSkuXG5cClxuXAoJLWJlaGF2aW91cihhcHBsaWNhdGlvbikuXG5cClxuXAoJLWV4cG9ydChbc3RhcnQvMiwgc3RvcC8xXSkuXG5cClxuXAoJc3RhcnQoX1R5cGUsIF9TdGFydEFyZ3MpIC0+XG5cCgkgICAgY2FzZSAkezI6cm9vdF9zdXBlcnZpc29yfTpzdGFydF9saW5rKCkgb2ZcblwKCSAgICAgICAge29rLCBQaWR9IC0+XG5cCgkgICAgICAgICAgICB7b2ssIFBpZH07XG5cCgkgICAgICAgIE90aGVyIC0+XG5cCgkJICAgICAgICAgIHtlcnJvciwgT3RoZXJ9XG5cCgkgICAgZW5kLlxuXApcblwKCXN0b3AoX1N0YXRlKSAtPlxuXAoJICAgIG9rLglcblwKIyBPVFAgc3VwZXJ2aXNvclxuXApzbmlwcGV0IHN1cGVydmlzb3JcblwKCS1tb2R1bGUoJHsxOmBGaWxlbmFtZSgnJywgJ215JylgfSkuXG5cClxuXAoJLWJlaGF2aW91cihzdXBlcnZpc29yKS5cblwKXG5cCgklJSBBUElcblwKCS1leHBvcnQoW3N0YXJ0X2xpbmsvMF0pLlxuXApcblwKCSUlIFN1cGVydmlzb3IgY2FsbGJhY2tzXG5cCgktZXhwb3J0KFtpbml0LzFdKS5cblwKXG5cCgktZGVmaW5lKFNFUlZFUiwgP01PRFVMRSkuXG5cClxuXAoJc3RhcnRfbGluaygpIC0+XG5cCgkgICAgc3VwZXJ2aXNvcjpzdGFydF9saW5rKHtsb2NhbCwgP1NFUlZFUn0sID9NT0RVTEUsIFtdKS5cblwKXG5cCglpbml0KFtdKSAtPlxuXAoJICAgIFNlcnZlciA9IHskezI6bXlfc2VydmVyfSwgeyQyLCBzdGFydF9saW5rLCBbXX0sXG5cCgkgICAgICBwZXJtYW5lbnQsIDIwMDAsIHdvcmtlciwgWyQyXX0sXG5cCgkgICAgQ2hpbGRyZW4gPSBbU2VydmVyXSxcblwKCSAgICBSZXN0YXJ0U3RyYXRlZ3kgPSB7b25lX2Zvcl9vbmUsIDAsIDF9LFxuXAoJICAgIHtvaywge1Jlc3RhcnRTdHJhdGVneSwgQ2hpbGRyZW59fS5cblwKIyBPVFAgZ2VuX3NlcnZlclxuXApzbmlwcGV0IGdlbl9zZXJ2ZXJcblwKCS1tb2R1bGUoJHsxOmBGaWxlbmFtZSgnJywgJ215JylgfSkuXG5cClxuXAoJLWJlaGF2aW91cihnZW5fc2VydmVyKS5cblwKXG5cCgklJSBBUElcblwKCS1leHBvcnQoW1xuXAoJICAgICAgICAgc3RhcnRfbGluay8wXG5cCgkgICAgICAgIF0pLlxuXApcblwKCSUlIGdlbl9zZXJ2ZXIgY2FsbGJhY2tzXG5cCgktZXhwb3J0KFtpbml0LzEsIGhhbmRsZV9jYWxsLzMsIGhhbmRsZV9jYXN0LzIsIGhhbmRsZV9pbmZvLzIsXG5cCgkgICAgICAgICB0ZXJtaW5hdGUvMiwgY29kZV9jaGFuZ2UvM10pLlxuXApcblwKCS1kZWZpbmUoU0VSVkVSLCA/TU9EVUxFKS5cblwKXG5cCgktcmVjb3JkKHN0YXRlLCB7fSkuXG5cClxuXAoJJSUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXAoJJSUlIEFQSVxuXAoJJSUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXApcblwKCXN0YXJ0X2xpbmsoKSAtPlxuXAoJICAgIGdlbl9zZXJ2ZXI6c3RhcnRfbGluayh7bG9jYWwsID9TRVJWRVJ9LCA/TU9EVUxFLCBbXSwgW10pLlxuXApcblwKCSUlJT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblwKCSUlJSBnZW5fc2VydmVyIGNhbGxiYWNrc1xuXAoJJSUlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXApcblwKCWluaXQoW10pIC0+XG5cCgkgICAge29rLCAjc3RhdGV7fX0uXG5cClxuXAoJaGFuZGxlX2NhbGwoX1JlcXVlc3QsIF9Gcm9tLCBTdGF0ZSkgLT5cblwKCSAgICBSZXBseSA9IG9rLFxuXAoJICAgIHtyZXBseSwgUmVwbHksIFN0YXRlfS5cblwKXG5cCgloYW5kbGVfY2FzdChfTXNnLCBTdGF0ZSkgLT5cblwKCSAgICB7bm9yZXBseSwgU3RhdGV9LlxuXApcblwKCWhhbmRsZV9pbmZvKF9JbmZvLCBTdGF0ZSkgLT5cblwKCSAgICB7bm9yZXBseSwgU3RhdGV9LlxuXApcblwKCXRlcm1pbmF0ZShfUmVhc29uLCBfU3RhdGUpIC0+XG5cCgkgICAgb2suXG5cClxuXAoJY29kZV9jaGFuZ2UoX09sZFZzbiwgU3RhdGUsIF9FeHRyYSkgLT5cblwKCSAgICB7b2ssIFN0YXRlfS5cblwKXG5cCgklJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cCgklJSUgSW50ZXJuYWwgZnVuY3Rpb25zXG5cCgklJSU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cClxuXAoiOwpleHBvcnRzLnNjb3BlID0gImVybGFuZyI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2VybGFuZyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/forth.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZm9ydGgiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJmb3J0aCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2ZvcnRoIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/fortran.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZm9ydHJhbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImZvcnRyYW4iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9mb3J0cmFuIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/fsharp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZnNoYXJwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIGV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKICAgIGV4cG9ydHMuc2NvcGUgPSAiZnNoYXJwIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZnNoYXJwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/fsl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZnNsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZnNsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/ftl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZnRsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZnRsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZnRsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/gcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ2NvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJnY29kZSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2djb2RlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/gherkin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ2hlcmtpbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImdoZXJraW4iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9naGVya2luIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/gitignore.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ2l0aWdub3JlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZ2l0aWdub3JlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZ2l0aWdub3JlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/glsl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ2xzbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImdsc2wiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9nbHNsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/gobstones.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ29ic3RvbmVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgc2NvcGU6IGdvYnN0b25lc1xuXApcblwKIyBwcm9ncmFtXG5cCnNuaXBwZXQgcHJvZ3JhbVxuXAoJcHJvZ3JhbSB7XG5cCgkJJHsxOi8vIGN1ZXJwby4uLn1cblwKCX1cblwKXG5cCiMgaW50ZXJhY3RpdmUgcHJvZ3JhbVxuXApzbmlwcGV0IGludGVyYWN0aXZlIHByb2dyYW1cblwKCWludGVyYWN0aXZlIHByb2dyYW0ge1xuXAoJCSR7MTpJTklUfSAtPiB7ICR7MjovLyBjdWVycG8uLi59IH1cblwKCQkkezM6VElNRU9VVCgkezQ6NTAwMH0pIC0+IHsgJHs1Oi8vIGN1ZXJwby4uLn0gfVxuXAoJCSR7NjpLX0VOVEVSfSAtPiB7ICR7NzovLyBjdWVycG8uLi59IH1cblwKCQlfIC0+IHt9XG5cCgl9XG5cClxuXAojIHByb2NlZHVyZVxuXApzbmlwcGV0IHByb2NlZHVyZVxuXAoJcHJvY2VkdXJlICR7MTpOb21icmV9KCR7MjpwYXJhbWV0cm9zfSkge1xuXAoJCSR7MzovLyBjdWVycG8uLi59XG5cCgl9XG5cClxuXAojIGZ1bmN0aW9uXG5cCnNuaXBwZXQgZnVuY3Rpb25cblwKCWZ1bmN0aW9uICR7MTpub21icmV9KCR7MjpwYXJhbWV0cm9zfSkge1xuXAoJCXJldHVybiAoJHszOmV4cHJlc2nDs24uLn0pXG5cCgl9XG5cClxuXAojIHJldHVyblxuXApzbmlwcGV0IHJldHVyblxuXAoJcmV0dXJuICgkezE6ZXhwcmVzacOzbi4uLn0pXG5cClxuXAojIHR5cGVcblwKc25pcHBldCB0eXBlXG5cCgl0eXBlICR7MTpOb21icmV9XG5cClxuXAojIGlzIHZhcmlhbnRcblwKc25pcHBldCBpcyB2YXJpYW50XG5cCglpcyB2YXJpYW50IHtcblwKCQljYXNlICR7MTpOb21icmVEZWxWYWxvcjF9IHt9XG5cCgkJY2FzZSAkezI6Tm9tYnJlRGVsVmFsb3IyfSB7fVxuXAoJCWNhc2UgJHszOk5vbWJyZURlbFZhbG9yM30ge31cblwKCQljYXNlICR7NDpOb21icmVEZWxWYWxvcjR9IHt9XG5cCgl9XG5cClxuXAojIGlzIHJlY29yZFxuXApzbmlwcGV0IGlzIHJlY29yZFxuXAoJaXMgcmVjb3JkIHtcblwKCQlmaWVsZCAkezE6Y2FtcG8xfSAvLyAkezI6VGlwb31cblwKCQlmaWVsZCAkezM6Y2FtcG8yfSAvLyAkezQ6VGlwb31cblwKCQlmaWVsZCAkezU6Y2FtcG8zfSAvLyAkezY6VGlwb31cblwKCQlmaWVsZCAkezc6Y2FtcG80fSAvLyAkezg6VGlwb31cblwKCX1cblwKXG5cCiMgdHlwZSBfIGlzIHZhcmlhbnRcblwKc25pcHBldCB0eXBlIF8gaXMgdmFyaWFudFxuXAoJdHlwZSAkezE6Tm9tYnJlfSBpcyB2YXJpYW50IHtcblwKCQljYXNlICR7MjpOb21icmVEZWxWYWxvcjF9IHt9XG5cCgkJY2FzZSAkezM6Tm9tYnJlRGVsVmFsb3IyfSB7fVxuXAoJCWNhc2UgJHs0Ok5vbWJyZURlbFZhbG9yM30ge31cblwKCQljYXNlICR7NTpOb21icmVEZWxWYWxvcjR9IHt9XG5cCgl9XG5cClxuXAojIHR5cGUgXyBpcyByZWNvcmRcblwKc25pcHBldCB0eXBlIF8gaXMgcmVjb3JkXG5cCgl0eXBlICR7MTpOb21icmV9IGlzIHJlY29yZCB7XG5cCgkJZmllbGQgJHsyOmNhbXBvMX0gLy8gJHszOlRpcG99XG5cCgkJZmllbGQgJHs0OmNhbXBvMn0gLy8gJHs1OlRpcG99XG5cCgkJZmllbGQgJHs2OmNhbXBvM30gLy8gJHs3OlRpcG99XG5cCgkJZmllbGQgJHs4OmNhbXBvNH0gLy8gJHs5OlRpcG99XG5cCgl9XG5cClxuXAojIHJlcGVhdFxuXApzbmlwcGV0IHJlcGVhdFxuXAoJcmVwZWF0ICR7MTpjYW50aWRhZH0ge1xuXAoJCSR7MjovLyBjdWVycG8uLi59XG5cCgl9XG5cClxuXAojIGZvcmVhY2hcblwKc25pcHBldCBmb3JlYWNoXG5cCglmb3JlYWNoICR7MTrDrW5kaWNlfSBpbiAkezI6bGlzdGF9IHtcblwKCQkkezM6Ly8gY3VlcnBvLi4ufVxuXAoJfVxuXApcblwKIyB3aGlsZVxuXApzbmlwcGV0IHdoaWxlXG5cCgl3aGlsZSAoJHsxPzpjb25kaWNpw7NufSkge1xuXAoJCSR7MjovLyBjdWVycG8uLi59XG5cCgl9XG5cClxuXAojIGlmXG5cCnNuaXBwZXQgaWZcblwKCWlmICgkezE/OmNvbmRpY2nDs259KSB7XG5cCgkJJHsyOi8vIGN1ZXJwby4uLn1cblwKCX1cblwKXG5cCiMgZWxzZWlmXG5cCnNuaXBwZXQgZWxzZWlmXG5cCgllbHNlaWYgKCR7MT86Y29uZGljacOzbn0pIHtcblwKCQkkezI6Ly8gY3VlcnBvLi4ufVxuXAoJfVxuXApcblwKIyBlbHNlXG5cCnNuaXBwZXQgZWxzZVxuXAoJZWxzZSB7XG5cCgkJJHsxOi8vIGN1ZXJwby4uLn1cblwKCX1cblwKXG5cCiMgaWYgKGNvbiBlbHNlKVxuXApzbmlwcGV0IGlmIChjb24gZWxzZSlcblwKCWlmICgkezE6Y29uZGljacOzbn0pIHtcblwKCQkkezI6Ly8gY3VlcnBvLi4ufVxuXAoJfSBlbHNlIHtcblwKCQkkezM6Ly8gY3VlcnBvLi4uLn1cblwKCX1cblwKXG5cCiMgaWYgKGNvbiBlbHNlaWYpXG5cCnNuaXBwZXQgaWYgKGNvbiBlbHNlaWYpXG5cCglpZiAoJHsxOmNvbmRpY2nDs259KSB7XG5cCgkJJHsyOi8vIGN1ZXJwby4uLn1cblwKCX0gZWxzZWlmICgkezM6Y29uZGljacOzbn0pIHtcblwKCQkkezQ6Ly8gY3VlcnBvLi4ufVxuXAoJfVxuXApcblwKIyBpZiAoY29uIGVsc2VpZiB5IGVsc2UpXG5cCnNuaXBwZXQgaWYgKGNvbiBlbHNlaWYgeSBlbHNlKVxuXAoJaWYgKCR7MTpjb25kaWNpw7NufSkge1xuXAoJCSR7MjovLyBjdWVycG8uLi59XG5cCgl9IGVsc2VpZiAoJHszOmNvbmRpY2nDs259KSB7XG5cCgkJJHs0Oi8vIGN1ZXJwby4uLn1cblwKCX0gZWxzZSB7XG5cCgkJJHs1Oi8vIGN1ZXJwby4uLi59XG5cCgl9XG5cClxuXAojIGlmIChjb24gMyBlbHNlaWYpXG5cCnNuaXBwZXQgaWYgKGNvbiAzIGVsc2VpZilcblwKCWlmICgkezE6Y29uZGljacOzbn0pIHtcblwKCQkkezI6Ly8gY3VlcnBvLi4ufVxuXAoJfSBlbHNlaWYgKCR7Mzpjb25kaWNpw7NufSkge1xuXAoJCSR7NDovLyBjdWVycG8uLi59XG5cCgl9IGVsc2VpZiAoJHs1OmNvbmRpY2nDs259KSB7XG5cCgkJJHs2Oi8vIGN1ZXJwby4uLn1cblwKCX0gZWxzZWlmICgkezc6Y29uZGljacOzbn0pIHtcblwKCQkkezg6Ly8gY3VlcnBvLi4ufVxuXAoJfVxuXApcblwKIyBjaG9vc2UgKDIgdmFsb3JlcylcblwKc25pcHBldCBjaG9vc2UgKDIgdmFsb3JlcylcblwKCWNob29zZVxuXAoJCSR7MTpWYWxvcjF9IHdoZW4gKCR7Mjpjb25kaWNpw7NufSlcblwKCQkkezM6VmFsb3IyfSBvdGhlcndpc2VcblwKXG5cCiMgY2hvb3NlICgyIHZhbG9yZXMgeSBib29tKVxuXApzbmlwcGV0IGNob29zZSAoMiB2YWxvcmVzIHkgYm9vbSlcblwKCWNob29zZVxuXAoJCSR7MTpWYWxvcjF9IHdoZW4gKCR7Mjpjb25kaWNpw7NufSlcblwKCQkkezM6VmFsb3IyfSB3aGVuICgkezQ6Y29uZGljacOzbn0pXG5cCgkJJHs1OlZhbG9yM30gd2hlbiAoJHs2OmNvbmRpY2nDs259KVxuXAoJCSR7NzpWYWxvcjR9IHdoZW4gKCR7ODpjb25kaWNpw7NufSlcblwKCQlib29tKFwiJHs5Ok5vIGVzIHVuIHZhbG9yIHbDoWxpZG99XCIpIG90aGVyd2lzZVxuXApcblwKIyBtYXRjaGluZyAoNCB2YWxvcmVzKVxuXApzbmlwcGV0IG1hdGNoaW5nICg0IHZhbG9yZXMpXG5cCgltYXRjaGluZyAoJHsxOnZhcmlhYmxlfSkgc2VsZWN0XG5cCgkJJHsyOlZhbG9yMX0gb24gJHszOm9wY2nDs24xfVxuXAoJCSR7NDpWYWxvcjJ9IG9uICR7NTpvcGNpw7NuMn1cblwKCQkkezY6VmFsb3IzfSBvbiAkezc6b3BjacOzbjN9XG5cCgkJJHs4OlZhbG9yNH0gb24gJHs5Om9wY2nDs240fVxuXAoJCWJvb20oXCIkezEwOk5vIGVzIHVuIHZhbG9yIHbDoWxpZG99XCIpIG90aGVyd2lzZVxuXApcblwKIyBzZWxlY3QgKDQgY2Fzb3MpXG5cCnNuaXBwZXQgc2VsZWN0ICg0IGNhc29zKVxuXAoJc2VsZWN0XG5cCgkJJHsxOlZhbG9yMX0gb24gKCR7MjpvcGNpw7NuMX0pXG5cCgkJJHszOlZhbG9yMn0gb24gKCR7NDpvcGNpw7NuMn0pXG5cCgkJJHs1OlZhbG9yM30gb24gKCR7NjpvcGNpw7NuM30pXG5cCgkJJHs3OlZhbG9yNH0gb24gKCR7ODpvcGNpw7NuNH0pXG5cCgkJYm9vbShcIiR7OTpObyBlcyB1biB2YWxvciB2w6FsaWRvfVwiKSBvdGhlcndpc2VcblwKXG5cCiMgc3dpdGNoXG5cCnNuaXBwZXQgc3dpdGNoXG5cCglzd2l0Y2ggKCR7MTp2YXJpYWJsZX0pIHtcblwKCQkkezI6VmFsb3IxfSAtPiB7JHszOi8vIGN1ZXJwby4uLn19XG5cCgkJJHs0OlZhbG9yMn0gLT4geyR7NTovLyBjdWVycG8uLi59fVxuXAoJCSR7NjpWYWxvcjN9IC0+IHskezc6Ly8gY3VlcnBvLi4ufX1cblwKCQkkezg6VmFsb3I0fSAtPiB7JHs5Oi8vIGN1ZXJwby4uLn19XG5cCgkJXyAtPiB7JHsxMDovLyBjdWVycG8uLi59fVxuXAoJfVxuXApcblwKIyBQb25lclxuXApzbmlwcGV0IFBvbmVyXG5cCglQb25lcigkezE6Y29sb3J9KVxuXApcblwKIyBTYWNhclxuXApzbmlwcGV0IFNhY2FyXG5cCglTYWNhcigkezE6Y29sb3J9KVxuXApcblwKIyBNb3ZlclxuXApzbmlwcGV0IE1vdmVyXG5cCglNb3ZlcigkezE6ZGlyZWNjacOzbn0pXG5cClxuXAojIElyQWxCb3JkZVxuXApzbmlwcGV0IElyQWxCb3JkZVxuXAoJSXJBbEJvcmRlKCR7MTpkaXJlY2Npw7NufSlcblwKXG5cCiMgVmFjaWFyVGFibGVyb1xuXApzbmlwcGV0IFZhY2lhclRhYmxlcm9cblwKCVZhY2lhclRhYmxlcm8oKVxuXApcblwKIyBCT09NXG5cCnNuaXBwZXQgQk9PTVxuXAoJQk9PTShcIiR7MTpNZW5zYWplIGRlIGVycm9yfVwiKVxuXApcblwKIyBoYXlCb2xpdGFzXG5cCnNuaXBwZXQgaGF5Qm9saXRhc1xuXAoJaGF5Qm9saXRhcygkezE6Y29sb3J9KVxuXApcblwKIyBucm9Cb2xpdGFzXG5cCnNuaXBwZXQgbnJvQm9saXRhc1xuXAoJbnJvQm9saXRhcygkezE6Y29sb3J9KVxuXApcblwKIyBwdWVkZU1vdmVyXG5cCnNuaXBwZXQgcHVlZGVNb3ZlclxuXAoJcHVlZGVNb3ZlcigkezE6ZGlyZWNjacOzbn0pXG5cClxuXAojIHNpZ3VpZW50ZVxuXApzbmlwcGV0IHNpZ3VpZW50ZVxuXAoJc2lndWllbnRlKCR7MTpjb2xvcnxkaXJlY2Npw7NufSlcblwKXG5cCiMgcHJldmlvXG5cCnNuaXBwZXQgcHJldmlvXG5cCglwcmV2aW8oJHsxOmNvbG9yfGRpcmVjY2nDs259KVxuXApcblwKIyBvcHVlc3RvXG5cCnNuaXBwZXQgb3B1ZXN0b1xuXAoJb3B1ZXN0bygkezE6ZGlyZWNjacOzbn0pXG5cClxuXAojIG1pbkRpclxuXApzbmlwcGV0IG1pbkRpclxuXAoJbWluRGlyKClcblwKXG5cCiMgbWF4RGlyXG5cCnNuaXBwZXQgbWF4RGlyXG5cCgltYXhEaXIoKVxuXApcblwKIyBtaW5Db2xvclxuXApzbmlwcGV0IG1pbkNvbG9yXG5cCgltaW5EaXIoKVxuXApcblwKIyBtYXhDb2xvclxuXApzbmlwcGV0IG1heENvbG9yXG5cCgltYXhEaXIoKVxuXApcblwKIyBtaW5Cb29sXG5cCnNuaXBwZXQgbWluQm9vbFxuXAoJbWluQm9vbCgpXG5cClxuXAojIG1heEJvb2xcblwKc25pcHBldCBtYXhCb29sXG5cCgltYXhCb29sKClcblwKXG5cCiMgcHJpbWVyb1xuXApzbmlwcGV0IHByaW1lcm9cblwKCXByaW1lcm8oJHsxOmxpc3RhfSlcblwKXG5cCiMgc2luRWxQcmltZXJvXG5cCnNuaXBwZXQgc2luRWxQcmltZXJvXG5cCglzaW5FbFByaW1lcm8oJHsxOmxpc3RhfSlcblwKXG5cCiMgZXNWYWPDrWFcblwKc25pcHBldCBlc1ZhY8OtYVxuXAoJZXNWYWPDrWEoJHsxOmxpc3RhfSlcblwKXG5cCiMgYm9vbVxuXApzbmlwcGV0IGJvb21cblwKCWJvb20oXCIkezE6TWVuc2FqZSBkZSBlcnJvcn1cIilcblwKXG5cCiMgQXp1bFxuXApzbmlwcGV0IEF6dWxcblwKCUF6dWxcblwKXG5cCiMgTmVncm9cblwKc25pcHBldCBOZWdyb1xuXAoJTmVncm9cblwKXG5cCiMgUm9qb1xuXApzbmlwcGV0IFJvam9cblwKCVJvam9cblwKXG5cCiMgVmVyZGVcblwKc25pcHBldCBWZXJkZVxuXAoJVmVyZGVcblwKXG5cCiMgTm9ydGVcblwKc25pcHBldCBOb3J0ZVxuXAoJTm9ydGVcblwKXG5cCiMgRXN0ZVxuXApzbmlwcGV0IEVzdGVcblwKCUVzdGVcblwKXG5cCiMgU3VyXG5cCnNuaXBwZXQgU3VyXG5cCglTdXJcblwKXG5cCiMgT2VzdGVcblwKc25pcHBldCBPZXN0ZVxuXAoJT2VzdGVcblwKXG5cCiMgVHJ1ZVxuXApzbmlwcGV0IFRydWVcblwKCVRydWVcblwKXG5cCiMgRmFsc2VcblwKc25pcHBldCBGYWxzZVxuXAoJRmFsc2VcblwKXG5cCiMgSU5JVFxuXApzbmlwcGV0IElOSVRcblwKCUlOSVQgLT4geyQxOi8vIGN1ZXJwby4uLn1cblwKXG5cCiMgVElNRU9VVFxuXApzbmlwcGV0IFRJTUVPVVRcblwKCVRJTUVPVVQoJHsxOjUwMDB9KSAtPiB7JDI6Ly8gY3VlcnBvLi4ufVxuXApcblwKIyBLX0FcblwKc25pcHBldCBLX0FcblwKCUtfQSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BXG5cCnNuaXBwZXQgS19DVFJMX0FcblwKCUtfQ1RSTF9BIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfQVxuXApzbmlwcGV0IEtfQUxUX0FcblwKCUtfQUxUX0EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0FcblwKc25pcHBldCBLX1NISUZUX0FcblwKCUtfU0hJRlRfQSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfQVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfQVxuXAoJS19DVFJMX0FMVF9BIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0FcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfQVxuXAoJS19DVFJMX1NISUZUX0EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0FcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0FcblwKCUtfQ1RSTF9BTFRfU0hJRlRfQSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0JcblwKc25pcHBldCBLX0JcblwKCUtfQiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9CXG5cCnNuaXBwZXQgS19DVFJMX0JcblwKCUtfQ1RSTF9CIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfQlxuXApzbmlwcGV0IEtfQUxUX0JcblwKCUtfQUxUX0IgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0JcblwKc25pcHBldCBLX1NISUZUX0JcblwKCUtfU0hJRlRfQiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfQlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfQlxuXAoJS19DVFJMX0FMVF9CIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0JcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfQlxuXAoJS19DVFJMX1NISUZUX0IgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0FMVF9TSElGVF9DXG5cCnNuaXBwZXQgS19BTFRfU0hJRlRfQ1xuXAoJS19BTFRfU0hJRlRfQyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9CTFRfU0hJRlRfQlxuXApzbmlwcGV0IEtfQ1RSTF9CTFRfU0hJRlRfQlxuXAoJS19DVFJMX0FMVF9TSElGVF9CIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cClxuXAojIEtfQ1xuXApzbmlwcGV0IEtfQ1xuXAoJS19DIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX0NcblwKc25pcHBldCBLX0NUUkxfQ1xuXAoJS19DVFJMX0MgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0FMVF9DXG5cCnNuaXBwZXQgS19BTFRfQ1xuXAoJS19BTFRfQyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfU0hJRlRfQ1xuXApzbmlwcGV0IEtfU0hJRlRfQ1xuXAoJS19TSElGVF9DIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX0FMVF9DXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9DXG5cCglLX0NUUkxfQUxUX0MgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfU0hJRlRfQ1xuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9DXG5cCglLX0NUUkxfU0hJRlRfQyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQUxUX1NISUZUX0NcblwKc25pcHBldCBLX0FMVF9TSElGVF9DXG5cCglLX0FMVF9TSElGVF9DIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX0FMVF9TSElGVF9DXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9DXG5cCglLX0NUUkxfQUxUX1NISUZUX0MgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKXG5cCiMgS19EXG5cCnNuaXBwZXQgS19EXG5cCglLX0QgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfRFxuXApzbmlwcGV0IEtfQ1RSTF9EXG5cCglLX0NUUkxfRCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQUxUX0RcblwKc25pcHBldCBLX0FMVF9EXG5cCglLX0RMVF9EIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19TSElGVF9EXG5cCnNuaXBwZXQgS19TSElGVF9EXG5cCglLX1NISUZUX0QgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX0RcblwKc25pcHBldCBLX0NUUkxfQUxUX0RcblwKCUtfQ1RSTF9ETFRfRCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9TSElGVF9EXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0RcblwKCUtfQ1RSTF9TSElGVF9EIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfU0hJRlRfRFxuXApzbmlwcGV0IEtfQUxUX1NISUZUX0RcblwKCUtfQUxUX1NISUZUX0QgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfRExUX1NISUZUX0RcblwKc25pcHBldCBLX0NUUkxfRExUX1NISUZUX0RcblwKCUtfQ1RSTF9BTFRfU0hJRlRfRCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0VcblwKc25pcHBldCBLX0VcblwKCUtfRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9FXG5cCnNuaXBwZXQgS19DVFJMX0VcblwKCUtfQ1RSTF9FIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRVxuXApzbmlwcGV0IEtfQUxUX0VcblwKCUtfQUxUX0UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0VcblwKc25pcHBldCBLX1NISUZUX0VcblwKCUtfU0hJRlRfRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfRVxuXAoJS19DVFJMX0FMVF9FIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0VcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfRVxuXAoJS19DVFJMX1NISUZUX0UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0VcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0VcblwKCUtfQ1RSTF9BTFRfU0hJRlRfRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0ZcblwKc25pcHBldCBLX0ZcblwKCUtfRiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GXG5cCnNuaXBwZXQgS19DVFJMX0ZcblwKCUtfQ1RSTF9GIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRlxuXApzbmlwcGV0IEtfQUxUX0ZcblwKCUtfQUxUX0YgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0ZcblwKc25pcHBldCBLX1NISUZUX0ZcblwKCUtfU0hJRlRfRiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfRlxuXAoJS19DVFJMX0FMVF9GIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0ZcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfRlxuXAoJS19DVFJMX1NISUZUX0YgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0ZcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0ZcblwKCUtfQ1RSTF9BTFRfU0hJRlRfRiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0dcblwKc25pcHBldCBLX0dcblwKCUtfRyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9HXG5cCnNuaXBwZXQgS19DVFJMX0dcblwKCUtfQ1RSTF9HIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfR1xuXApzbmlwcGV0IEtfQUxUX0dcblwKCUtfQUxUX0cgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0dcblwKc25pcHBldCBLX1NISUZUX0dcblwKCUtfU0hJRlRfRyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfR1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfR1xuXAoJS19DVFJMX0FMVF9HIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0dcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfR1xuXAoJS19DVFJMX1NISUZUX0cgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0dcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0dcblwKCUtfQ1RSTF9BTFRfU0hJRlRfRyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0hcblwKc25pcHBldCBLX0hcblwKCUtfSCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9IXG5cCnNuaXBwZXQgS19DVFJMX0hcblwKCUtfQ1RSTF9IIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfSFxuXApzbmlwcGV0IEtfQUxUX0hcblwKCUtfQUxUX0ggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0hcblwKc25pcHBldCBLX1NISUZUX0hcblwKCUtfU0hJRlRfSCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfSFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfSFxuXAoJS19DVFJMX0FMVF9IIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0hcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfSFxuXAoJS19DVFJMX1NISUZUX0ggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0hcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0hcblwKCUtfQ1RSTF9BTFRfU0hJRlRfSCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0lcblwKc25pcHBldCBLX0lcblwKCUtfSSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9JXG5cCnNuaXBwZXQgS19DVFJMX0lcblwKCUtfQ1RSTF9JIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfSVxuXApzbmlwcGV0IEtfQUxUX0lcblwKCUtfQUxUX0kgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0lcblwKc25pcHBldCBLX1NISUZUX0lcblwKCUtfU0hJRlRfSSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfSVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfSVxuXAoJS19DVFJMX0FMVF9JIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0lcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfSVxuXAoJS19DVFJMX1NISUZUX0kgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0lcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0lcblwKCUtfQ1RSTF9BTFRfU0hJRlRfSSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0pcblwKc25pcHBldCBLX0pcblwKCUtfSiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9KXG5cCnNuaXBwZXQgS19DVFJMX0pcblwKCUtfQ1RSTF9KIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfSlxuXApzbmlwcGV0IEtfQUxUX0pcblwKCUtfQUxUX0ogLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0pcblwKc25pcHBldCBLX1NISUZUX0pcblwKCUtfU0hJRlRfSiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfSlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfSlxuXAoJS19DVFJMX0FMVF9KIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0pcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfSlxuXAoJS19DVFJMX1NISUZUX0ogLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0pcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0pcblwKCUtfQ1RSTF9BTFRfU0hJRlRfSiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0tcblwKc25pcHBldCBLX0tcblwKCUtfSyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9LXG5cCnNuaXBwZXQgS19DVFJMX0tcblwKCUtfQ1RSTF9LIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfS1xuXApzbmlwcGV0IEtfQUxUX0tcblwKCUtfQUxUX0sgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0tcblwKc25pcHBldCBLX1NISUZUX0tcblwKCUtfU0hJRlRfSyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfS1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfS1xuXAoJS19DVFJMX0FMVF9LIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0tcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfS1xuXAoJS19DVFJMX1NISUZUX0sgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0tcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0tcblwKCUtfQ1RSTF9BTFRfU0hJRlRfSyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0xcblwKc25pcHBldCBLX0xcblwKCUtfTCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9MXG5cCnNuaXBwZXQgS19DVFJMX0xcblwKCUtfQ1RSTF9MIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfTFxuXApzbmlwcGV0IEtfQUxUX0xcblwKCUtfQUxUX0wgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0xcblwKc25pcHBldCBLX1NISUZUX0xcblwKCUtfU0hJRlRfTCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfTFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfTFxuXAoJS19DVFJMX0FMVF9MIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0xcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfTFxuXAoJS19DVFJMX1NISUZUX0wgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0xcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0xcblwKCUtfQ1RSTF9BTFRfU0hJRlRfTCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX01cblwKc25pcHBldCBLX01cblwKCUtfTSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9NXG5cCnNuaXBwZXQgS19DVFJMX01cblwKCUtfQ1RSTF9NIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfTVxuXApzbmlwcGV0IEtfQUxUX01cblwKCUtfQUxUX00gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX01cblwKc25pcHBldCBLX1NISUZUX01cblwKCUtfU0hJRlRfTSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfTVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfTVxuXAoJS19DVFJMX0FMVF9NIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX01cblwKc25pcHBldCBLX0NUUkxfU0hJRlRfTVxuXAoJS19DVFJMX1NISUZUX00gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX01cblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX01cblwKCUtfQ1RSTF9BTFRfU0hJRlRfTSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX05cblwKc25pcHBldCBLX05cblwKCUtfTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9OXG5cCnNuaXBwZXQgS19DVFJMX05cblwKCUtfQ1RSTF9OIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfTlxuXApzbmlwcGV0IEtfQUxUX05cblwKCUtfQUxUX04gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX05cblwKc25pcHBldCBLX1NISUZUX05cblwKCUtfU0hJRlRfTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfTlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfTlxuXAoJS19DVFJMX0FMVF9OIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX05cblwKc25pcHBldCBLX0NUUkxfU0hJRlRfTlxuXAoJS19DVFJMX1NISUZUX04gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX05cblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX05cblwKCUtfQ1RSTF9BTFRfU0hJRlRfTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX8ORXG5cCnNuaXBwZXQgS1/DkVxuXAoJS1/DkSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF/DkVxuXApzbmlwcGV0IEtfQ1RSTF/DkVxuXAoJS19DVFJMX8ORIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfw5FcblwKc25pcHBldCBLX0FMVF/DkVxuXAoJS19BTFRfw5EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX8ORXG5cCnNuaXBwZXQgS19TSElGVF/DkVxuXAoJS19TSElGVF/DkSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfw5FcblwKc25pcHBldCBLX0NUUkxfQUxUX8ORXG5cCglLX0NUUkxfQUxUX8ORIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX8ORXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX8ORXG5cCglLX0NUUkxfU0hJRlRfw5EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX8ORXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF/DkVxuXAoJS19DVFJMX0FMVF9TSElGVF/DkSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX09cblwKc25pcHBldCBLX09cblwKCUtfTyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9PXG5cCnNuaXBwZXQgS19DVFJMX09cblwKCUtfQ1RSTF9PIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfT1xuXApzbmlwcGV0IEtfQUxUX09cblwKCUtfQUxUX08gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX09cblwKc25pcHBldCBLX1NISUZUX09cblwKCUtfU0hJRlRfTyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfT1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfT1xuXAoJS19DVFJMX0FMVF9PIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX09cblwKc25pcHBldCBLX0NUUkxfU0hJRlRfT1xuXAoJS19DVFJMX1NISUZUX08gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX09cblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX09cblwKCUtfQ1RSTF9BTFRfU0hJRlRfTyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1BcblwKc25pcHBldCBLX1BcblwKCUtfUCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9QXG5cCnNuaXBwZXQgS19DVFJMX1BcblwKCUtfQ1RSTF9QIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfUFxuXApzbmlwcGV0IEtfQUxUX1BcblwKCUtfQUxUX1AgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1BcblwKc25pcHBldCBLX1NISUZUX1BcblwKCUtfU0hJRlRfUCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfUFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfUFxuXAoJS19DVFJMX0FMVF9QIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1BcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfUFxuXAoJS19DVFJMX1NISUZUX1AgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1BcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1BcblwKCUtfQ1RSTF9BTFRfU0hJRlRfUCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1FcblwKc25pcHBldCBLX1FcblwKCUtfUSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9RXG5cCnNuaXBwZXQgS19DVFJMX1FcblwKCUtfQ1RSTF9RIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfUVxuXApzbmlwcGV0IEtfQUxUX1FcblwKCUtfQUxUX1EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1FcblwKc25pcHBldCBLX1NISUZUX1FcblwKCUtfU0hJRlRfUSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfUVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfUVxuXAoJS19DVFJMX0FMVF9RIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1FcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfUVxuXAoJS19DVFJMX1NISUZUX1EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1FcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1FcblwKCUtfQ1RSTF9BTFRfU0hJRlRfUSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1JcblwKc25pcHBldCBLX1JcblwKCUtfUiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9SXG5cCnNuaXBwZXQgS19DVFJMX1JcblwKCUtfQ1RSTF9SIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfUlxuXApzbmlwcGV0IEtfQUxUX1JcblwKCUtfQUxUX1IgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1JcblwKc25pcHBldCBLX1NISUZUX1JcblwKCUtfU0hJRlRfUiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfUlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfUlxuXAoJS19DVFJMX0FMVF9SIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1JcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfUlxuXAoJS19DVFJMX1NISUZUX1IgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1JcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1JcblwKCUtfQ1RSTF9BTFRfU0hJRlRfUiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1NcblwKc25pcHBldCBLX1NcblwKCUtfUyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9TXG5cCnNuaXBwZXQgS19DVFJMX1NcblwKCUtfQ1RSTF9TIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfU1xuXApzbmlwcGV0IEtfQUxUX1NcblwKCUtfQUxUX1MgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1NcblwKc25pcHBldCBLX1NISUZUX1NcblwKCUtfU0hJRlRfUyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfU1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU1xuXAoJS19DVFJMX0FMVF9TIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1NcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfU1xuXAoJS19DVFJMX1NISUZUX1MgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1NcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1NcblwKCUtfQ1RSTF9BTFRfU0hJRlRfUyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1RcblwKc25pcHBldCBLX1RcblwKCUtfVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9UXG5cCnNuaXBwZXQgS19DVFJMX1RcblwKCUtfQ1RSTF9UIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfVFxuXApzbmlwcGV0IEtfQUxUX1RcblwKCUtfQUxUX1QgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1RcblwKc25pcHBldCBLX1NISUZUX1RcblwKCUtfU0hJRlRfVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfVFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfVFxuXAoJS19DVFJMX0FMVF9UIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1RcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfVFxuXAoJS19DVFJMX1NISUZUX1QgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1RcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1RcblwKCUtfQ1RSTF9BTFRfU0hJRlRfVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1VcblwKc25pcHBldCBLX1VcblwKCUtfVSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9VXG5cCnNuaXBwZXQgS19DVFJMX1VcblwKCUtfQ1RSTF9VIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfVVxuXApzbmlwcGV0IEtfQUxUX1VcblwKCUtfQUxUX1UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1VcblwKc25pcHBldCBLX1NISUZUX1VcblwKCUtfU0hJRlRfVSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfVVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfVVxuXAoJS19DVFJMX0FMVF9VIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1VcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfVVxuXAoJS19DVFJMX1NISUZUX1UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1VcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1VcblwKCUtfQ1RSTF9BTFRfU0hJRlRfVSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1ZcblwKc25pcHBldCBLX1ZcblwKCUtfViAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9WXG5cCnNuaXBwZXQgS19DVFJMX1ZcblwKCUtfQ1RSTF9WIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfVlxuXApzbmlwcGV0IEtfQUxUX1ZcblwKCUtfQUxUX1YgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1ZcblwKc25pcHBldCBLX1NISUZUX1ZcblwKCUtfU0hJRlRfViAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfVlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfVlxuXAoJS19DVFJMX0FMVF9WIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1ZcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfVlxuXAoJS19DVFJMX1NISUZUX1YgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1ZcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1ZcblwKCUtfQ1RSTF9BTFRfU0hJRlRfViAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1dcblwKc25pcHBldCBLX1dcblwKCUtfVyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9XXG5cCnNuaXBwZXQgS19DVFJMX1dcblwKCUtfQ1RSTF9XIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfV1xuXApzbmlwcGV0IEtfQUxUX1dcblwKCUtfQUxUX1cgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1dcblwKc25pcHBldCBLX1NISUZUX1dcblwKCUtfU0hJRlRfVyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfV1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfV1xuXAoJS19DVFJMX0FMVF9XIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1dcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfV1xuXAoJS19DVFJMX1NISUZUX1cgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1dcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1dcblwKCUtfQ1RSTF9BTFRfU0hJRlRfVyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1hcblwKc25pcHBldCBLX1hcblwKCUtfWCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9YXG5cCnNuaXBwZXQgS19DVFJMX1hcblwKCUtfQ1RSTF9YIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfWFxuXApzbmlwcGV0IEtfQUxUX1hcblwKCUtfQUxUX1ggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1hcblwKc25pcHBldCBLX1NISUZUX1hcblwKCUtfU0hJRlRfWCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfWFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfWFxuXAoJS19DVFJMX0FMVF9YIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1hcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfWFxuXAoJS19DVFJMX1NISUZUX1ggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1hcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1hcblwKCUtfQ1RSTF9BTFRfU0hJRlRfWCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1lcblwKc25pcHBldCBLX1lcblwKCUtfWSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9ZXG5cCnNuaXBwZXQgS19DVFJMX1lcblwKCUtfQ1RSTF9ZIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfWVxuXApzbmlwcGV0IEtfQUxUX1lcblwKCUtfQUxUX1kgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1lcblwKc25pcHBldCBLX1NISUZUX1lcblwKCUtfU0hJRlRfWSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfWVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfWVxuXAoJS19DVFJMX0FMVF9ZIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1lcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfWVxuXAoJS19DVFJMX1NISUZUX1kgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1lcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1lcblwKCUtfQ1RSTF9BTFRfU0hJRlRfWSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1pcblwKc25pcHBldCBLX1pcblwKCUtfWiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9aXG5cCnNuaXBwZXQgS19DVFJMX1pcblwKCUtfQ1RSTF9aIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfWlxuXApzbmlwcGV0IEtfQUxUX1pcblwKCUtfQUxUX1ogLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1pcblwKc25pcHBldCBLX1NISUZUX1pcblwKCUtfU0hJRlRfWiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfWlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfWlxuXAoJS19DVFJMX0FMVF9aIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1pcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfWlxuXAoJS19DVFJMX1NISUZUX1ogLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1pcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX1pcblwKCUtfQ1RSTF9BTFRfU0hJRlRfWiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzBcblwKc25pcHBldCBLXzBcblwKCUtfMCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF8wXG5cCnNuaXBwZXQgS19DVFJMXzBcblwKCUtfQ1RSTF8wIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfMFxuXApzbmlwcGV0IEtfQUxUXzBcblwKCUtfQUxUXzAgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzBcblwKc25pcHBldCBLX1NISUZUXzBcblwKCUtfU0hJRlRfMCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfMFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfMFxuXAoJS19DVFJMX0FMVF8wIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzBcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfMFxuXAoJS19DVFJMX1NISUZUXzAgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzBcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzBcblwKCUtfQ1RSTF9BTFRfU0hJRlRfMCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzFcblwKc25pcHBldCBLXzFcblwKCUtfMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF8xXG5cCnNuaXBwZXQgS19DVFJMXzFcblwKCUtfQ1RSTF8xIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfMVxuXApzbmlwcGV0IEtfQUxUXzFcblwKCUtfQUxUXzEgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzFcblwKc25pcHBldCBLX1NISUZUXzFcblwKCUtfU0hJRlRfMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfMVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfMVxuXAoJS19DVFJMX0FMVF8xIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzFcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfMVxuXAoJS19DVFJMX1NISUZUXzEgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzFcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzFcblwKCUtfQ1RSTF9BTFRfU0hJRlRfMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzJcblwKc25pcHBldCBLXzJcblwKCUtfMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF8yXG5cCnNuaXBwZXQgS19DVFJMXzJcblwKCUtfQ1RSTF8yIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfMlxuXApzbmlwcGV0IEtfQUxUXzJcblwKCUtfQUxUXzIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzJcblwKc25pcHBldCBLX1NISUZUXzJcblwKCUtfU0hJRlRfMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfMlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfMlxuXAoJS19DVFJMX0FMVF8yIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzJcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfMlxuXAoJS19DVFJMX1NISUZUXzIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzJcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzJcblwKCUtfQ1RSTF9BTFRfU0hJRlRfMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzNcblwKc25pcHBldCBLXzNcblwKCUtfMyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF8zXG5cCnNuaXBwZXQgS19DVFJMXzNcblwKCUtfQ1RSTF8zIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfM1xuXApzbmlwcGV0IEtfQUxUXzNcblwKCUtfQUxUXzMgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzNcblwKc25pcHBldCBLX1NISUZUXzNcblwKCUtfU0hJRlRfMyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfM1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfM1xuXAoJS19DVFJMX0FMVF8zIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzNcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfM1xuXAoJS19DVFJMX1NISUZUXzMgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzNcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzNcblwKCUtfQ1RSTF9BTFRfU0hJRlRfMyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzRcblwKc25pcHBldCBLXzRcblwKCUtfNCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF80XG5cCnNuaXBwZXQgS19DVFJMXzRcblwKCUtfQ1RSTF80IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfNFxuXApzbmlwcGV0IEtfQUxUXzRcblwKCUtfQUxUXzQgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzRcblwKc25pcHBldCBLX1NISUZUXzRcblwKCUtfU0hJRlRfNCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfNFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfNFxuXAoJS19DVFJMX0FMVF80IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzRcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfNFxuXAoJS19DVFJMX1NISUZUXzQgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzRcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzRcblwKCUtfQ1RSTF9BTFRfU0hJRlRfNCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzVcblwKc25pcHBldCBLXzVcblwKCUtfNSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF81XG5cCnNuaXBwZXQgS19DVFJMXzVcblwKCUtfQ1RSTF81IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfNVxuXApzbmlwcGV0IEtfQUxUXzVcblwKCUtfQUxUXzUgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzVcblwKc25pcHBldCBLX1NISUZUXzVcblwKCUtfU0hJRlRfNSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfNVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfNVxuXAoJS19DVFJMX0FMVF81IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzVcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfNVxuXAoJS19DVFJMX1NISUZUXzUgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzVcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzVcblwKCUtfQ1RSTF9BTFRfU0hJRlRfNSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzZcblwKc25pcHBldCBLXzZcblwKCUtfNiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF82XG5cCnNuaXBwZXQgS19DVFJMXzZcblwKCUtfQ1RSTF82IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfNlxuXApzbmlwcGV0IEtfQUxUXzZcblwKCUtfQUxUXzYgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzZcblwKc25pcHBldCBLX1NISUZUXzZcblwKCUtfU0hJRlRfNiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfNlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfNlxuXAoJS19DVFJMX0FMVF82IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzZcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfNlxuXAoJS19DVFJMX1NISUZUXzYgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzZcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzZcblwKCUtfQ1RSTF9BTFRfU0hJRlRfNiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzdcblwKc25pcHBldCBLXzdcblwKCUtfNyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF83XG5cCnNuaXBwZXQgS19DVFJMXzdcblwKCUtfQ1RSTF83IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfN1xuXApzbmlwcGV0IEtfQUxUXzdcblwKCUtfQUxUXzcgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzdcblwKc25pcHBldCBLX1NISUZUXzdcblwKCUtfU0hJRlRfNyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfN1xuXApzbmlwcGV0IEtfQ1RSTF9BTFRfN1xuXAoJS19DVFJMX0FMVF83IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzdcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfN1xuXAoJS19DVFJMX1NISUZUXzcgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzdcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzdcblwKCUtfQ1RSTF9BTFRfU0hJRlRfNyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzhcblwKc25pcHBldCBLXzhcblwKCUtfOCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF84XG5cCnNuaXBwZXQgS19DVFJMXzhcblwKCUtfQ1RSTF84IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfOFxuXApzbmlwcGV0IEtfQUxUXzhcblwKCUtfQUxUXzggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzhcblwKc25pcHBldCBLX1NISUZUXzhcblwKCUtfU0hJRlRfOCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfOFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfOFxuXAoJS19DVFJMX0FMVF84IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzhcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfOFxuXAoJS19DVFJMX1NISUZUXzggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzhcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzhcblwKCUtfQ1RSTF9BTFRfU0hJRlRfOCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLXzlcblwKc25pcHBldCBLXzlcblwKCUtfOSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF85XG5cCnNuaXBwZXQgS19DVFJMXzlcblwKCUtfQ1RSTF85IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfOVxuXApzbmlwcGV0IEtfQUxUXzlcblwKCUtfQUxUXzkgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUXzlcblwKc25pcHBldCBLX1NISUZUXzlcblwKCUtfU0hJRlRfOSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfOVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfOVxuXAoJS19DVFJMX0FMVF85IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUXzlcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfOVxuXAoJS19DVFJMX1NISUZUXzkgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUXzlcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUXzlcblwKCUtfQ1RSTF9BTFRfU0hJRlRfOSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0YxXG5cCnNuaXBwZXQgS19GMVxuXAoJS19GMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GMVxuXApzbmlwcGV0IEtfQ1RSTF9GMVxuXAoJS19DVFJMX0YxIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjFcblwKc25pcHBldCBLX0FMVF9GMVxuXAoJS19BTFRfRjEgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0YxXG5cCnNuaXBwZXQgS19TSElGVF9GMVxuXAoJS19TSElGVF9GMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjFcblwKc25pcHBldCBLX0NUUkxfQUxUX0YxXG5cCglLX0NUUkxfQUxUX0YxIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0YxXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0YxXG5cCglLX0NUUkxfU0hJRlRfRjEgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0YxXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GMVxuXAoJS19DVFJMX0FMVF9TSElGVF9GMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0YyXG5cCnNuaXBwZXQgS19GMlxuXAoJS19GMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GMlxuXApzbmlwcGV0IEtfQ1RSTF9GMlxuXAoJS19DVFJMX0YyIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjJcblwKc25pcHBldCBLX0FMVF9GMlxuXAoJS19BTFRfRjIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0YyXG5cCnNuaXBwZXQgS19TSElGVF9GMlxuXAoJS19TSElGVF9GMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjJcblwKc25pcHBldCBLX0NUUkxfQUxUX0YyXG5cCglLX0NUUkxfQUxUX0YyIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0YyXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0YyXG5cCglLX0NUUkxfU0hJRlRfRjIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0YyXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GMlxuXAoJS19DVFJMX0FMVF9TSElGVF9GMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0YzXG5cCnNuaXBwZXQgS19GM1xuXAoJS19GMyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GM1xuXApzbmlwcGV0IEtfQ1RSTF9GM1xuXAoJS19DVFJMX0YzIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjNcblwKc25pcHBldCBLX0FMVF9GM1xuXAoJS19BTFRfRjMgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0YzXG5cCnNuaXBwZXQgS19TSElGVF9GM1xuXAoJS19TSElGVF9GMyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjNcblwKc25pcHBldCBLX0NUUkxfQUxUX0YzXG5cCglLX0NUUkxfQUxUX0YzIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0YzXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0YzXG5cCglLX0NUUkxfU0hJRlRfRjMgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0YzXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GM1xuXAoJS19DVFJMX0FMVF9TSElGVF9GMyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0FcblwKc25pcHBldCBLX0FcblwKCUtfQSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BXG5cCnNuaXBwZXQgS19DVFJMX0FcblwKCUtfQ1RSTF9BIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfQVxuXApzbmlwcGV0IEtfQUxUX0FcblwKCUtfQUxUX0EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0FcblwKc25pcHBldCBLX1NISUZUX0FcblwKCUtfU0hJRlRfQSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfQVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfQVxuXAoJS19DVFJMX0FMVF9BIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0FcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfQVxuXAoJS19DVFJMX1NISUZUX0EgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0FcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0FcblwKCUtfQ1RSTF9BTFRfU0hJRlRfQSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0Y1XG5cCnNuaXBwZXQgS19GNVxuXAoJS19GNSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GNVxuXApzbmlwcGV0IEtfQ1RSTF9GNVxuXAoJS19DVFJMX0Y1IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjVcblwKc25pcHBldCBLX0FMVF9GNVxuXAoJS19BTFRfRjUgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0Y1XG5cCnNuaXBwZXQgS19TSElGVF9GNVxuXAoJS19TSElGVF9GNSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjVcblwKc25pcHBldCBLX0NUUkxfQUxUX0Y1XG5cCglLX0NUUkxfQUxUX0Y1IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0Y1XG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0Y1XG5cCglLX0NUUkxfU0hJRlRfRjUgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0Y1XG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GNVxuXAoJS19DVFJMX0FMVF9TSElGVF9GNSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0Y2XG5cCnNuaXBwZXQgS19GNlxuXAoJS19GNiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GNlxuXApzbmlwcGV0IEtfQ1RSTF9GNlxuXAoJS19DVFJMX0Y2IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjZcblwKc25pcHBldCBLX0FMVF9GNlxuXAoJS19BTFRfRjYgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0Y2XG5cCnNuaXBwZXQgS19TSElGVF9GNlxuXAoJS19TSElGVF9GNiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjZcblwKc25pcHBldCBLX0NUUkxfQUxUX0Y2XG5cCglLX0NUUkxfQUxUX0Y2IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0Y2XG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0Y2XG5cCglLX0NUUkxfU0hJRlRfRjYgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0Y2XG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GNlxuXAoJS19DVFJMX0FMVF9TSElGVF9GNiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0Y3XG5cCnNuaXBwZXQgS19GN1xuXAoJS19GNyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GN1xuXApzbmlwcGV0IEtfQ1RSTF9GN1xuXAoJS19DVFJMX0Y3IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjdcblwKc25pcHBldCBLX0FMVF9GN1xuXAoJS19BTFRfRjcgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0Y3XG5cCnNuaXBwZXQgS19TSElGVF9GN1xuXAoJS19TSElGVF9GNyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjdcblwKc25pcHBldCBLX0NUUkxfQUxUX0Y3XG5cCglLX0NUUkxfQUxUX0Y3IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0Y3XG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0Y3XG5cCglLX0NUUkxfU0hJRlRfRjcgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0Y3XG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GN1xuXAoJS19DVFJMX0FMVF9TSElGVF9GNyAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0Y4XG5cCnNuaXBwZXQgS19GOFxuXAoJS19GOCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GOFxuXApzbmlwcGV0IEtfQ1RSTF9GOFxuXAoJS19DVFJMX0Y4IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjhcblwKc25pcHBldCBLX0FMVF9GOFxuXAoJS19BTFRfRjggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0Y4XG5cCnNuaXBwZXQgS19TSElGVF9GOFxuXAoJS19TSElGVF9GOCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjhcblwKc25pcHBldCBLX0NUUkxfQUxUX0Y4XG5cCglLX0NUUkxfQUxUX0Y4IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0Y4XG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0Y4XG5cCglLX0NUUkxfU0hJRlRfRjggLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0Y4XG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GOFxuXAoJS19DVFJMX0FMVF9TSElGVF9GOCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0Y5XG5cCnNuaXBwZXQgS19GOVxuXAoJS19GOSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GOVxuXApzbmlwcGV0IEtfQ1RSTF9GOVxuXAoJS19DVFJMX0Y5IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjlcblwKc25pcHBldCBLX0FMVF9GOVxuXAoJS19BTFRfRjkgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0Y5XG5cCnNuaXBwZXQgS19TSElGVF9GOVxuXAoJS19TSElGVF9GOSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjlcblwKc25pcHBldCBLX0NUUkxfQUxUX0Y5XG5cCglLX0NUUkxfQUxUX0Y5IC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0Y5XG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX0Y5XG5cCglLX0NUUkxfU0hJRlRfRjkgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0Y5XG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9GOVxuXAoJS19DVFJMX0FMVF9TSElGVF9GOSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0YxMFxuXApzbmlwcGV0IEtfRjEwXG5cCglLX0YxMCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GMTBcblwKc25pcHBldCBLX0NUUkxfRjEwXG5cCglLX0NUUkxfRjEwIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjEwXG5cCnNuaXBwZXQgS19BTFRfRjEwXG5cCglLX0FMVF9GMTAgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0YxMFxuXApzbmlwcGV0IEtfU0hJRlRfRjEwXG5cCglLX1NISUZUX0YxMCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjEwXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9GMTBcblwKCUtfQ1RSTF9BTFRfRjEwIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0YxMFxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9GMTBcblwKCUtfQ1RSTF9TSElGVF9GMTAgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0YxMFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfRjEwXG5cCglLX0NUUkxfQUxUX1NISUZUX0YxMCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0YxMVxuXApzbmlwcGV0IEtfRjExXG5cCglLX0YxMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GMTFcblwKc25pcHBldCBLX0NUUkxfRjExXG5cCglLX0NUUkxfRjExIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjExXG5cCnNuaXBwZXQgS19BTFRfRjExXG5cCglLX0FMVF9GMTEgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0YxMVxuXApzbmlwcGV0IEtfU0hJRlRfRjExXG5cCglLX1NISUZUX0YxMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjExXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9GMTFcblwKCUtfQ1RSTF9BTFRfRjExIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0YxMVxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9GMTFcblwKCUtfQ1RSTF9TSElGVF9GMTEgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0YxMVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfRjExXG5cCglLX0NUUkxfQUxUX1NISUZUX0YxMSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0YxMlxuXApzbmlwcGV0IEtfRjEyXG5cCglLX0YxMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9GMTJcblwKc25pcHBldCBLX0NUUkxfRjEyXG5cCglLX0NUUkxfRjEyIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRjEyXG5cCnNuaXBwZXQgS19BTFRfRjEyXG5cCglLX0FMVF9GMTIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0YxMlxuXApzbmlwcGV0IEtfU0hJRlRfRjEyXG5cCglLX1NISUZUX0YxMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRjEyXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9GMTJcblwKCUtfQ1RSTF9BTFRfRjEyIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0YxMlxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9GMTJcblwKCUtfQ1RSTF9TSElGVF9GMTIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0YxMlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfRjEyXG5cCglLX0NUUkxfQUxUX1NISUZUX0YxMiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1JFVFVSTlxuXApzbmlwcGV0IEtfUkVUVVJOXG5cCglLX1JFVFVSTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9SRVRVUk5cblwKc25pcHBldCBLX0NUUkxfUkVUVVJOXG5cCglLX0NUUkxfUkVUVVJOIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfUkVUVVJOXG5cCnNuaXBwZXQgS19BTFRfUkVUVVJOXG5cCglLX0FMVF9SRVRVUk4gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1JFVFVSTlxuXApzbmlwcGV0IEtfU0hJRlRfUkVUVVJOXG5cCglLX1NISUZUX1JFVFVSTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfUkVUVVJOXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9SRVRVUk5cblwKCUtfQ1RSTF9BTFRfUkVUVVJOIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1JFVFVSTlxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9SRVRVUk5cblwKCUtfQ1RSTF9TSElGVF9SRVRVUk4gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1JFVFVSTlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfUkVUVVJOXG5cCglLX0NUUkxfQUxUX1NISUZUX1JFVFVSTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1NQQUNFXG5cCnNuaXBwZXQgS19TUEFDRVxuXAoJS19TUEFDRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9TUEFDRVxuXApzbmlwcGV0IEtfQ1RSTF9TUEFDRVxuXAoJS19DVFJMX1NQQUNFIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfU1BBQ0VcblwKc25pcHBldCBLX0FMVF9TUEFDRVxuXAoJS19BTFRfU1BBQ0UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1NQQUNFXG5cCnNuaXBwZXQgS19TSElGVF9TUEFDRVxuXAoJS19TSElGVF9TUEFDRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfU1BBQ0VcblwKc25pcHBldCBLX0NUUkxfQUxUX1NQQUNFXG5cCglLX0NUUkxfQUxUX1NQQUNFIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1NQQUNFXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX1NQQUNFXG5cCglLX0NUUkxfU0hJRlRfU1BBQ0UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1NQQUNFXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9TUEFDRVxuXAoJS19DVFJMX0FMVF9TSElGVF9TUEFDRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0VTQ0FQRVxuXApzbmlwcGV0IEtfRVNDQVBFXG5cCglLX0VTQ0FQRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9FU0NBUEVcblwKc25pcHBldCBLX0NUUkxfRVNDQVBFXG5cCglLX0NUUkxfRVNDQVBFIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRVNDQVBFXG5cCnNuaXBwZXQgS19BTFRfRVNDQVBFXG5cCglLX0FMVF9FU0NBUEUgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0VTQ0FQRVxuXApzbmlwcGV0IEtfU0hJRlRfRVNDQVBFXG5cCglLX1NISUZUX0VTQ0FQRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRVNDQVBFXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9FU0NBUEVcblwKCUtfQ1RSTF9BTFRfRVNDQVBFIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0VTQ0FQRVxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9FU0NBUEVcblwKCUtfQ1RSTF9TSElGVF9FU0NBUEUgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0VTQ0FQRVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfRVNDQVBFXG5cCglLX0NUUkxfQUxUX1NISUZUX0VTQ0FQRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0JBQ0tTUEFDRVxuXApzbmlwcGV0IEtfQkFDS1NQQUNFXG5cCglLX0JBQ0tTUEFDRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9CQUNLU1BBQ0VcblwKc25pcHBldCBLX0NUUkxfQkFDS1NQQUNFXG5cCglLX0NUUkxfQkFDS1NQQUNFIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfQkFDS1NQQUNFXG5cCnNuaXBwZXQgS19BTFRfQkFDS1NQQUNFXG5cCglLX0FMVF9CQUNLU1BBQ0UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0JBQ0tTUEFDRVxuXApzbmlwcGV0IEtfU0hJRlRfQkFDS1NQQUNFXG5cCglLX1NISUZUX0JBQ0tTUEFDRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfQkFDS1NQQUNFXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9CQUNLU1BBQ0VcblwKCUtfQ1RSTF9BTFRfQkFDS1NQQUNFIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0JBQ0tTUEFDRVxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9CQUNLU1BBQ0VcblwKCUtfQ1RSTF9TSElGVF9CQUNLU1BBQ0UgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0JBQ0tTUEFDRVxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfQkFDS1NQQUNFXG5cCglLX0NUUkxfQUxUX1NISUZUX0JBQ0tTUEFDRSAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1RBQlxuXApzbmlwcGV0IEtfVEFCXG5cCglLX1RBQiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9UQUJcblwKc25pcHBldCBLX0NUUkxfVEFCXG5cCglLX0NUUkxfVEFCIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfVEFCXG5cCnNuaXBwZXQgS19BTFRfVEFCXG5cCglLX0FMVF9UQUIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1RBQlxuXApzbmlwcGV0IEtfU0hJRlRfVEFCXG5cCglLX1NISUZUX1RBQiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfVEFCXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9UQUJcblwKCUtfQ1RSTF9BTFRfVEFCIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1RBQlxuXApzbmlwcGV0IEtfQ1RSTF9TSElGVF9UQUJcblwKCUtfQ1RSTF9TSElGVF9UQUIgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1RBQlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfU0hJRlRfVEFCXG5cCglLX0NUUkxfQUxUX1NISUZUX1RBQiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1VQXG5cCnNuaXBwZXQgS19VUFxuXAoJS19VUCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9VUFxuXApzbmlwcGV0IEtfQ1RSTF9VUFxuXAoJS19DVFJMX1VQIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfVVBcblwKc25pcHBldCBLX0FMVF9VUFxuXAoJS19BTFRfVVAgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1VQXG5cCnNuaXBwZXQgS19TSElGVF9VUFxuXAoJS19TSElGVF9VUCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfVVBcblwKc25pcHBldCBLX0NUUkxfQUxUX1VQXG5cCglLX0NUUkxfQUxUX1VQIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1VQXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX1VQXG5cCglLX0NUUkxfU0hJRlRfVVAgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1VQXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9VUFxuXAoJS19DVFJMX0FMVF9TSElGVF9VUCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0RPV05cblwKc25pcHBldCBLX0RPV05cblwKCUtfRE9XTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9ET1dOXG5cCnNuaXBwZXQgS19DVFJMX0RPV05cblwKCUtfQ1RSTF9ET1dOIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfRE9XTlxuXApzbmlwcGV0IEtfQUxUX0RPV05cblwKCUtfQUxUX0RPV04gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0RPV05cblwKc25pcHBldCBLX1NISUZUX0RPV05cblwKCUtfU0hJRlRfRE9XTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfRE9XTlxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfRE9XTlxuXAoJS19DVFJMX0FMVF9ET1dOIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0RPV05cblwKc25pcHBldCBLX0NUUkxfU0hJRlRfRE9XTlxuXAoJS19DVFJMX1NISUZUX0RPV04gLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0RPV05cblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0RPV05cblwKCUtfQ1RSTF9BTFRfU0hJRlRfRE9XTiAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX0xFRlRcblwKc25pcHBldCBLX0xFRlRcblwKCUtfTEVGVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9MRUZUXG5cCnNuaXBwZXQgS19DVFJMX0xFRlRcblwKCUtfQ1RSTF9MRUZUIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfTEVGVFxuXApzbmlwcGV0IEtfQUxUX0xFRlRcblwKCUtfQUxUX0xFRlQgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX0xFRlRcblwKc25pcHBldCBLX1NISUZUX0xFRlRcblwKCUtfU0hJRlRfTEVGVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfTEVGVFxuXApzbmlwcGV0IEtfQ1RSTF9BTFRfTEVGVFxuXAoJS19DVFJMX0FMVF9MRUZUIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX0xFRlRcblwKc25pcHBldCBLX0NUUkxfU0hJRlRfTEVGVFxuXAoJS19DVFJMX1NISUZUX0xFRlQgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX0xFRlRcblwKc25pcHBldCBLX0NUUkxfQUxUX1NISUZUX0xFRlRcblwKCUtfQ1RSTF9BTFRfU0hJRlRfTEVGVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyBLX1JJR0hUXG5cCnNuaXBwZXQgS19SSUdIVFxuXAoJS19SSUdIVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9SSUdIVFxuXApzbmlwcGV0IEtfQ1RSTF9SSUdIVFxuXAoJS19DVFJMX1JJR0hUIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19BTFRfUklHSFRcblwKc25pcHBldCBLX0FMVF9SSUdIVFxuXAoJS19BTFRfUklHSFQgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX1NISUZUX1JJR0hUXG5cCnNuaXBwZXQgS19TSElGVF9SSUdIVFxuXAoJS19TSElGVF9SSUdIVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXAojIEtfQ1RSTF9BTFRfUklHSFRcblwKc25pcHBldCBLX0NUUkxfQUxUX1JJR0hUXG5cCglLX0NUUkxfQUxUX1JJR0hUIC0+IHsgJHsxOi8vY3VlcnBvLi4ufSB9XG5cCiMgS19DVFJMX1NISUZUX1JJR0hUXG5cCnNuaXBwZXQgS19DVFJMX1NISUZUX1JJR0hUXG5cCglLX0NUUkxfU0hJRlRfUklHSFQgLT4geyAkezE6Ly9jdWVycG8uLi59IH1cblwKIyBLX0NUUkxfQUxUX1NISUZUX1JJR0hUXG5cCnNuaXBwZXQgS19DVFJMX0FMVF9TSElGVF9SSUdIVFxuXAoJS19DVFJMX0FMVF9TSElGVF9SSUdIVCAtPiB7ICR7MTovL2N1ZXJwby4uLn0gfVxuXApcblwKIyByZWNvcnJpZG8gKHNpbXBsZSlcblwKc25pcHBldCByZWNvcnJpZG8gKHNpbXBsZSlcblwKCSR7MTovLyBJciBhbCBpbmljaW99XG5cCgl3aGlsZSAobm90ICR7MjovLyBlcyDDumx0aW1vIGVsZW1lbnRvfSkge1xuXAoJCSR7MzovLyBQcm9jZXNhciBlbCBlbGVtZW50b31cblwKCQkkezQ6Ly8gSXIgYWwgcHLDs3hpbW8gZWxlbWVudG99XG5cCgl9XG5cCgkkezU6Ly8gRmluYWxpemFyfVxuXApcblwKIyByZWNvcnJpZG8gKGRlIGFjdW11bGFjacOzbilcblwKc25pcHBldCByZWNvcnJpZG8gKGRlIGFjdW11bGFjacOzbilcblwKCSR7MTovLyBJciBhbCBpbmljaW99XG5cCgkkezI6Y2FudGlkYWRWaXN0b3N9IDo9ICR7MzovLyBjb250YXIgZWxlbWVudG9zIGVuIGx1Z2FyIGFjdHVhbH1cblwKCXdoaWxlIChub3QgJHs0Oi8vIGVzIMO6bHRpbW8gZWxlbWVudG99KSB7XG5cCgkJJHs0Oi8vIElyIGFsIHByw7N4aW1vIGVsZW1lbnRvfVxuXAoJCSR7MjpjYW50aWRhZFZpc3Rvc30gOj0gJHsyOmNhbnRpZGFkVmlzdG9zfSArICR7MzovLyBjb250YXIgZWxlbWVudG9zIGVuIGx1Z2FyIGFjdHVhbH1cblwKCX1cblwKCXJldHVybiAoJHsyOmNhbnRpZGFkVmlzdG9zfSlcblwKXG5cCiMgcmVjb3JyaWRvIChkZSBiw7pzcXVlZGEpXG5cCnNuaXBwZXQgcmVjb3JyaWRvIChkZSBiw7pzcXVlZGEpXG5cCgkkezE6Ly8gSXIgYWwgaW5pY2lvfVxuXAoJd2hpbGUgKG5vdCAkezI6Ly8gZW5jb250csOpIGxvIHF1ZSBidXNjYWJhfSkge1xuXAoJCSR7MzovLyBJciBhbCBwcsOzeGltbyBlbGVtZW50b31cblwKCX1cblwKCXJldHVybiAoJHsyOi8vIGVuY29udHLDqSBsbyBxdWUgYnVzY2FiYSB9KVxuXApcblwKIyByZWNvcnJpZG8gKGRlIGLDunNxdWVkYSBjb24gYm9yZGUpXG5cCnNuaXBwZXQgcmVjb3JyaWRvIChkZSBiw7pzcXVlZGEgY29uIGJvcmRlKVxuXAoJJHsxOi8vIElyIGFsIGluaWNpb31cblwKCXdoaWxlIChub3QgJHsyOi8vIGVuY29udHLDqSBsbyBxdWUgYnVzY2FiYX0gJiYgbm90ICR7MzovLyBlcyDDumx0aW1vIGVsZW1lbnRvfSkge1xuXAoJCSR7NDovLyBJciBhbCBwcsOzeGltbyBlbGVtZW50b31cblwKCX1cblwKCXJldHVybiAoJHsyOi8vIGVuY29udHLDqSBsbyBxdWUgYnVzY2FiYSB9KVxuXApcblwKIyByZWNvcnJpZG8gKGRlIHRpcG9zIGVudW1lcmF0aXZvcylcblwKc25pcHBldCByZWNvcnJpZG8gKGRlIHRpcG9zIGVudW1lcmF0aXZvcylcblwKCSR7MTplbGVtZW50b0FjdHVhbH0gOj0gJHsyOm1pbkVsZW1lbnRvKCl9XG5cCgl3aGlsZSAoJHsxOmVsZW1lbnRvQWN0dWFsfSAvPSAkezM6bWF4RWxlbWVudG8oKX0pIHtcblwKCQkkezQ6Ly8gUHJvY2VzYXIgY29uIGVsZW1lbnRvIGFjdHVhbH1cblwKCQkkezE6ZWxlbWVudG9BY3R1YWx9IDo9IHNpZ3VpZW50ZSgkezE6ZWxlbWVudG9BY3R1YWx9KVxuXAoJfVxuXAoJJHs0Oi8vIFByb2Nlc2FyIGNvbiBlbGVtZW50byBhY3R1YWx9XG5cClxuXAojIHJlY29ycmlkbyAoZGUgYsO6c3F1ZWRhIHNvYnJlIGxpc3RhKVxuXApzbmlwcGV0IHJlY29ycmlkbyAoZGUgYsO6c3F1ZWRhIHNvYnJlIGxpc3RhKVxuXAoJJHsxOmxpc3RhUmVjb3JyaWRhfSA6PSAkezI6bGlzdGF9XG5cCgl3aGlsZSAocHJpbWVybygkezE6bGlzdGFSZWNvcnJpZGF9KSAvPSAkezM6Ly9lbGVtZW50byBidXNjYWRvfSkge1xuXAoJCSR7MTplbGVtZW50b0FjdHVhbH0gOj0gc2luRWxQcmltZXJvKCR7MTplbGVtZW50b0FjdHVhbH0pXG5cCgl9XG5cCglyZXR1cm4gKHByaW1lcm8oJHsxOmxpc3RhUmVjb3JyaWRhfSkpXG5cClxuXAojIHJlY29ycmlkbyAoZGUgYsO6c3F1ZWRhIHNvYnJlIGxpc3RhIGNvbiBib3JkZSlcblwKc25pcHBldCByZWNvcnJpZG8gKGRlIGLDunNxdWVkYSBzb2JyZSBsaXN0YSBjb24gYm9yZGUpXG5cCgkkezE6bGlzdGFSZWNvcnJpZGF9IDo9ICR7MjpsaXN0YX1cblwKCXdoaWxlIChub3QgZXNWYWPDrWEoJHsxOmxpc3RhUmVjb3JyaWRhfSkgJiYgcHJpbWVybygkezE6bGlzdGFSZWNvcnJpZGF9KSAvPSAkezM6Ly9lbGVtZW50byBidXNjYWRvfSkge1xuXAoJCSR7MTplbGVtZW50b0FjdHVhbH0gOj0gc2luRWxQcmltZXJvKCR7MTplbGVtZW50b0FjdHVhbH0pXG5cCgl9XG5cCglyZXR1cm4gKG5vdCBlc1ZhY8OtYSgkezE6bGlzdGFSZWNvcnJpZGF9KSlcblwKXG5cCiMgZG9jcyAocHJvY2VkaW1pZW50bylcblwKc25pcHBldCBkb2NzIChwcm9jZWRpbWllbnRvKVxuXAoJLypcblwKCQlAUFJPUMOTU0lUTzogJHsxOi4uLn1cblwKCQlAUFJFQ09ORElDScOTTjogJHsyOi4uLn1cblwKCSovXG5cClxuXAojIGRvY3MgKHByb2NlZGltaWVudG8gY29uIHBhcsOhbWV0cm9zKVxuXApzbmlwcGV0IGRvY3MgKHByb2NlZGltaWVudG8gY29uIHBhcsOhbWV0cm9zKVxuXAoJLypcblwKCQlAUFJPUMOTU0lUTzogJHsxOi4uLn1cblwKCQlAUFJFQ09ORElDScOTTjogJHsyOi4uLn1cblwKCQlAUEFSw4FNRVRST1M6XG5cCgkJCQkqICR7Mzpub21icmVEZWxQYXLDoW1ldHJvfSA6ICR7NDpUaXBvfSAtICR7NTpkZXNjcmlwY2nDs259XG5cCgkqL1xuXApcblwKIyBkb2NzIChmdW5jacOzbilcblwKc25pcHBldCBkb2NzIChmdW5jacOzbilcblwKCS8qXG5cCgkJQFBST1DDk1NJVE86ICR7MTouLi59XG5cCgkJQFBSRUNPTkRJQ0nDk046ICR7MjouLi59XG5cCgkJQFRJUE86ICR7MzouLi59XG5cCgkqL1xuXApcblwKIyBkb2NzIChmdW5jacOzbiBjb24gcGFyw6FtZXRyb3MpXG5cCnNuaXBwZXQgZG9jcyAoZnVuY2nDs24gY29uIHBhcsOhbWV0cm9zKVxuXAoJLypcblwKCQlAUFJPUMOTU0lUTzogJHsxOi4uLn1cblwKCQlAUFJFQ09ORElDScOTTjogJHsyOi4uLn1cblwKCQlAUEFSw4FNRVRST1M6XG5cCgkJCQkqICR7Mzpub21icmVEZWxQYXLDoW1ldHJvfSA6ICR7NDpUaXBvfSAtICR7NTpkZXNjcmlwY2nDs259XG5cCgkJQFRJUE86ICR7NjouLi59XG5cCgkqL1xuXAoiOwpleHBvcnRzLnNjb3BlID0gImdvYnN0b25lcyI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2dvYnN0b25lcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/golang.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ29sYW5nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZ29sYW5nIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZ29sYW5nIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/graphqlschema.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ3JhcGhxbHNjaGVtYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIFR5cGUgU25pcHBldFxuXAp0cmlnZ2VyIHR5cGVcblwKc25pcHBldCB0eXBlXG5cCgl0eXBlICR7MTp0eXBlX25hbWV9IHtcblwKCQkkezI6dHlwZV9zaWJsaW5nc31cblwKCX1cblwKXG5cCiMgSW5wdXQgU25pcHBldFxuXAp0cmlnZ2VyIGlucHV0XG5cCnNuaXBwZXQgaW5wdXRcblwKCWlucHV0ICR7MTppbnB1dF9uYW1lfSB7XG5cCgkJJHsyOmlucHV0X3NpYmxpbmdzfVxuXAoJfVxuXApcblwKIyBJbnRlcmZhY2UgU25pcHBldFxuXAp0cmlnZ2VyIGludGVyZmFjZVxuXApzbmlwcGV0IGludGVyZmFjZVxuXAoJaW50ZXJmYWNlICR7MTppbnRlcmZhY2VfbmFtZX0ge1xuXAoJCSR7MjppbnRlcmZhY2Vfc2libGluZ3N9XG5cCgl9XG5cClxuXAojIEludGVyZmFjZSBTbmlwcGV0XG5cCnRyaWdnZXIgdW5pb25cblwKc25pcHBldCB1bmlvblxuXAoJdW5pb24gJHsxOnVuaW9uX25hbWV9ID0gJHsyOnR5cGV9IHwgJHszOiB0eXBlfVxuXApcblwKIyBFbnVtIFNuaXBwZXRcblwKdHJpZ2dlciBlbnVtXG5cCnNuaXBwZXQgZW51bVxuXAoJZW51bSAkezE6ZW51bV9uYW1lfSB7XG5cCgkJJHsyOmVudW1fc2libGluZ3N9XG5cCgl9XG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiZ3JhcGhxbHNjaGVtYSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2dyYXBocWxzY2hlbWEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvZ3Jvb3Z5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiZ3Jvb3Z5IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvZ3Jvb3Z5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/haml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaGFtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICJzbmlwcGV0IHRcblwKCSV0YWJsZVxuXAoJCSV0clxuXAoJCQkldGhcblwKCQkJCSR7MTpoZWFkZXJzfVxuXAoJCSV0clxuXAoJCQkldGRcblwKCQkJCSR7MjpoZWFkZXJzfVxuXApzbmlwcGV0IHVsXG5cCgkldWxcblwKCQklbGlcblwKCQkJJHsxOml0ZW19XG5cCgkJJWxpXG5cCnNuaXBwZXQgPXJwXG5cCgk9IHJlbmRlciA6cGFydGlhbCA9PiAnJHsxOnBhcnRpYWx9J1xuXApzbmlwcGV0ID1ycGxcblwKCT0gcmVuZGVyIDpwYXJ0aWFsID0+ICckezE6cGFydGlhbH0nLCA6bG9jYWxzID0+IHt9XG5cCnNuaXBwZXQgPXJwY1xuXAoJPSByZW5kZXIgOnBhcnRpYWwgPT4gJyR7MTpwYXJ0aWFsfScsIDpjb2xsZWN0aW9uID0+IEAkMVxuXApcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJoYW1sIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvaGFtbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/handlebars.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaGFuZGxlYmFycyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImhhbmRsZWJhcnMiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9oYW5kbGViYXJzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaGFza2VsbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICJzbmlwcGV0IGxhbmdcblwKCXstIyBMQU5HVUFHRSAkezE6T3ZlcmxvYWRlZFN0cmluZ3N9ICMtfVxuXApzbmlwcGV0IGluZm9cblwKCS0tIHxcblwKCS0tIE1vZHVsZSAgICAgIDogICR7MTpNb2R1bGUuTmFtZXNwYWNlfVxuXAoJLS0gQ29weXJpZ2h0ICAgOiAgJHsyOkF1dGhvcn0gJHszOjIwMTEtMjAxMn1cblwKCS0tIExpY2Vuc2UgICAgIDogICR7NDpCU0QzfVxuXAoJLS1cblwKCS0tIE1haW50YWluZXIgIDogICR7NTplbWFpbEBzb21ldGhpbmcuY29tfVxuXAoJLS0gU3RhYmlsaXR5ICAgOiAgJHs2OmV4cGVyaW1lbnRhbH1cblwKCS0tIFBvcnRhYmlsaXR5IDogICR7Nzp1bmtub3dufVxuXAoJLS1cblwKCS0tICR7ODpEZXNjcmlwdGlvbn1cblwKCS0tXG5cCnNuaXBwZXQgaW1wb3J0XG5cCglpbXBvcnQgICAgICAgICAgICR7MTpEYXRhLlRleHR9XG5cCnNuaXBwZXQgaW1wb3J0MlxuXAoJaW1wb3J0ICAgICAgICAgICAkezE6RGF0YS5UZXh0fSAoJHsyOmhlYWR9KVxuXApzbmlwcGV0IGltcG9ydHFcblwKCWltcG9ydCBxdWFsaWZpZWQgJHsxOkRhdGEuVGV4dH0gYXMgJHsyOlR9XG5cCnNuaXBwZXQgaW5zdFxuXAoJaW5zdGFuY2UgJHsxOk1vbm9pZH0gJHsyOlR5cGV9IHdoZXJlXG5cCgkJJHszfVxuXApzbmlwcGV0IHR5cGVcblwKCXR5cGUgJHsxOlR5cGV9ID0gJHsyOlR5cGV9XG5cCnNuaXBwZXQgZGF0YVxuXAoJZGF0YSAkezE6VHlwZX0gPSAkezI6JDF9ICR7MzpJbnR9XG5cCnNuaXBwZXQgbmV3dHlwZVxuXAoJbmV3dHlwZSAkezE6VHlwZX0gPSAkezI6JDF9ICR7MzpJbnR9XG5cCnNuaXBwZXQgY2xhc3NcblwKCWNsYXNzICR7MTpDbGFzc30gYSB3aGVyZVxuXAoJCSR7Mn1cblwKc25pcHBldCBtb2R1bGVcblwKCW1vZHVsZSBgc3Vic3RpdHV0ZShzdWJzdGl0dXRlKGV4cGFuZCgnJTpyJyksICdbL1xcXFxdJywnLicsJ2cnKSwnXlxcJShcXGwqXFwuXFwpXFw/JywnJywnJylgIChcblwKCSkJd2hlcmVcblwKCWBleHBhbmQoJyUnKSA9fiAnTWFpbicgPyBcIlxcblxcbm1haW4gPSBkb1xcbiAgcHJpbnQgXFxcImhlbGxvIHdvcmxkXFxcIlwiIDogXCJcImBcblwKXG5cCnNuaXBwZXQgY29uc3RcblwKCSR7MTpuYW1lfSA6OiAkezI6YX1cblwKCSQxID0gJHszOnVuZGVmaW5lZH1cblwKc25pcHBldCBmblxuXAoJJHsxOmZufSA6OiAkezI6YX0gLT4gJHszOmF9XG5cCgkkMSAkezR9ID0gJHs1OnVuZGVmaW5lZH1cblwKc25pcHBldCBmbjJcblwKCSR7MTpmbn0gOjogJHsyOmF9IC0+ICR7MzphfSAtPiAkezQ6YX1cblwKCSQxICR7NX0gPSAkezY6dW5kZWZpbmVkfVxuXApzbmlwcGV0IGFwXG5cCgkkezE6bWFwfSAkezI6Zm59ICR7MzpsaXN0fVxuXApzbmlwcGV0IGRvXG5cCglkb1xuXAoJCVxuXApzbmlwcGV0IM67XG5cCglcXCR7MTp4fSAtPiAkezJ9XG5cCnNuaXBwZXQgXFxcblwKCVxcJHsxOnh9IC0+ICR7Mn1cblwKc25pcHBldCA8LVxuXAoJJHsxOmF9IDwtICR7MjptIGF9XG5cCnNuaXBwZXQg4oaQXG5cCgkkezE6YX0gPC0gJHsyOm0gYX1cblwKc25pcHBldCAtPlxuXAoJJHsxOm0gYX0gLT4gJHsyOmF9XG5cCnNuaXBwZXQg4oaSXG5cCgkkezE6bSBhfSAtPiAkezI6YX1cblwKc25pcHBldCB0dXBcblwKCSgkezE6YX0sICR7MjpifSlcblwKc25pcHBldCB0dXAyXG5cCgkoJHsxOmF9LCAkezI6Yn0sICR7MzpjfSlcblwKc25pcHBldCB0dXAzXG5cCgkoJHsxOmF9LCAkezI6Yn0sICR7MzpjfSwgJHs0OmR9KVxuXApzbmlwcGV0IHJlY1xuXAoJJHsxOlJlY29yZH0geyAkezI6cmVjRmllbGRBfSA9ICR7Mzp1bmRlZmluZWR9XG5cCgkJCQksICR7NDpyZWNGaWVsZEJ9ID0gJHs1OnVuZGVmaW5lZH1cblwKCQkJCX1cblwKc25pcHBldCBjYXNlXG5cCgljYXNlICR7MTpzb21ldGhpbmd9IG9mXG5cCgkJJHsyfSAtPiAkezN9XG5cCnNuaXBwZXQgbGV0XG5cCglsZXQgJHsxfSA9ICR7Mn1cblwKCWluICR7M31cblwKc25pcHBldCB3aGVyZVxuXAoJd2hlcmVcblwKCQkkezE6Zm59ID0gJHsyOnVuZGVmaW5lZH1cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJoYXNrZWxsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvaGFza2VsbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/haskell_cabal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaGFza2VsbF9jYWJhbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImhhc2tlbGxfY2FiYWwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9oYXNrZWxsX2NhYmFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/haxe.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaGF4ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImhheGUiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9oYXhlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/hjson.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaGpzb24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICIiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9oanNvbiJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/html.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaHRtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIFNvbWUgdXNlZnVsIFVuaWNvZGUgZW50aXRpZXNcblwKIyBOb24tQnJlYWtpbmcgU3BhY2VcblwKc25pcHBldCBuYnNcblwKCSZuYnNwO1xuXAojIOKGkFxuXApzbmlwcGV0IGxlZnRcblwKCSYjeDIxOTA7XG5cCiMg4oaSXG5cCnNuaXBwZXQgcmlnaHRcblwKCSYjeDIxOTI7XG5cCiMg4oaRXG5cCnNuaXBwZXQgdXBcblwKCSYjeDIxOTE7XG5cCiMg4oaTXG5cCnNuaXBwZXQgZG93blxuXAoJJiN4MjE5MztcblwKIyDihqlcblwKc25pcHBldCByZXR1cm5cblwKCSYjeDIxQTk7XG5cCiMg4oekXG5cCnNuaXBwZXQgYmFja3RhYlxuXAoJJiN4MjFFNDtcblwKIyDih6VcblwKc25pcHBldCB0YWJcblwKCSYjeDIxRTU7XG5cCiMg4oenXG5cCnNuaXBwZXQgc2hpZnRcblwKCSYjeDIxRTc7XG5cCiMg4oyDXG5cCnNuaXBwZXQgY3RybFxuXAoJJiN4MjMwMztcblwKIyDijIVcblwKc25pcHBldCBlbnRlclxuXAoJJiN4MjMwNTtcblwKIyDijJhcblwKc25pcHBldCBjbWRcblwKCSYjeDIzMTg7XG5cCiMg4oylXG5cCnNuaXBwZXQgb3B0aW9uXG5cCgkmI3gyMzI1O1xuXAojIOKMplxuXApzbmlwcGV0IGRlbGV0ZVxuXAoJJiN4MjMyNjtcblwKIyDijKtcblwKc25pcHBldCBiYWNrc3BhY2VcblwKCSYjeDIzMkI7XG5cCiMg4o6LXG5cCnNuaXBwZXQgZXNjXG5cCgkmI3gyMzhCO1xuXAojIEdlbmVyaWMgRG9jdHlwZVxuXApzbmlwcGV0IGRvY3R5cGUgSFRNTCA0LjAxIFN0cmljdFxuXAoJPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGRcIj5cblwKc25pcHBldCBkb2N0eXBlIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWxcblwKCTwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkXCI+XG5cCnNuaXBwZXQgZG9jdHlwZSBIVE1MIDVcblwKCTwhRE9DVFlQRSBIVE1MPlxuXApzbmlwcGV0IGRvY3R5cGUgWEhUTUwgMS4wIEZyYW1lc2V0XG5cCgk8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj5cblwKc25pcHBldCBkb2N0eXBlIFhIVE1MIDEuMCBTdHJpY3RcblwKCTwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZFwiPlxuXApzbmlwcGV0IGRvY3R5cGUgWEhUTUwgMS4wIFRyYW5zaXRpb25hbFxuXAoJPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkXCI+XG5cCnNuaXBwZXQgZG9jdHlwZSBYSFRNTCAxLjFcblwKCTwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZFwiPlxuXAojIEhUTUwgRG9jdHlwZSA0LjAxIFN0cmljdFxuXApzbmlwcGV0IGRvY3RzXG5cCgk8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZFwiPlxuXAojIEhUTUwgRG9jdHlwZSA0LjAxIFRyYW5zaXRpb25hbFxuXApzbmlwcGV0IGRvY3RcblwKCTwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkXCI+XG5cCiMgSFRNTCBEb2N0eXBlIDVcblwKc25pcHBldCBkb2N0NVxuXAoJPCFET0NUWVBFIGh0bWw+XG5cCiMgWEhUTUwgRG9jdHlwZSAxLjAgRnJhbWVzZXRcblwKc25pcHBldCBkb2N4ZlxuXAoJPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIEZyYW1lc2V0Ly9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLWZyYW1lc2V0LmR0ZFwiPlxuXAojIFhIVE1MIERvY3R5cGUgMS4wIFN0cmljdFxuXApzbmlwcGV0IGRvY3hzXG5cCgk8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj5cblwKIyBYSFRNTCBEb2N0eXBlIDEuMCBUcmFuc2l0aW9uYWxcblwKc25pcHBldCBkb2N4dFxuXAoJPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkXCI+XG5cCiMgWEhUTUwgRG9jdHlwZSAxLjFcblwKc25pcHBldCBkb2N4XG5cCgk8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGRcIj5cblwKIyBodG1sNXNoaXZcblwKc25pcHBldCBodG1sNXNoaXZcblwKCTwhLS1baWYgbHRlIElFIDhdPlxuXAoJCTxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvaHRtbDVzaGl2LzMuNy4zL2h0bWw1c2hpdi5taW4uanNcIj48L3NjcmlwdD5cblwKCTwhW2VuZGlmXS0tPlxuXApzbmlwcGV0IGh0bWw1cHJpbnRzaGl2XG5cCgk8IS0tW2lmIGx0ZSBJRSA4XT5cblwKCQk8c2NyaXB0IHNyYz1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2h0bWw1c2hpdi8zLjcuMy9odG1sNXNoaXYtcHJpbnRzaGl2Lm1pbi5qc1wiPjwvc2NyaXB0PlxuXAoJPCFbZW5kaWZdLS0+XG5cCiMgQXR0cmlidXRlc1xuXApzbmlwcGV0IGF0dHJcblwKCSR7MTphdHRyaWJ1dGV9PVwiJHsyOnByb3BlcnR5fVwiXG5cCnNuaXBwZXQgYXR0citcblwKCSR7MTphdHRyaWJ1dGV9PVwiJHsyOnByb3BlcnR5fVwiIGF0dHIrJHszfVxuXApzbmlwcGV0IC5cblwKCWNsYXNzPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0ICNcblwKCWlkPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IGFsdFxuXAoJYWx0PVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IGNoYXJzZXRcblwKCWNoYXJzZXQ9XCIkezE6dXRmLTh9XCIkezJ9XG5cCnNuaXBwZXQgZGF0YVxuXAoJZGF0YS0kezF9PVwiJHsyOiQxfVwiJHszfVxuXApzbmlwcGV0IGZvclxuXAoJZm9yPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IGhlaWdodFxuXAoJaGVpZ2h0PVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IGhyZWZcblwKCWhyZWY9XCIkezE6I31cIiR7Mn1cblwKc25pcHBldCBsYW5nXG5cCglsYW5nPVwiJHsxOmVufVwiJHsyfVxuXApzbmlwcGV0IG1lZGlhXG5cCgltZWRpYT1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCBuYW1lXG5cCgluYW1lPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IHJlbFxuXAoJcmVsPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IHNjb3BlXG5cCglzY29wZT1cIiR7MTpyb3d9XCIkezJ9XG5cCnNuaXBwZXQgc3JjXG5cCglzcmM9XCIkezF9XCIkezJ9XG5cCnNuaXBwZXQgdGl0bGU9XG5cCgl0aXRsZT1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCB0eXBlXG5cCgl0eXBlPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IHZhbHVlXG5cCgl2YWx1ZT1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCB3aWR0aFxuXAoJd2lkdGg9XCIkezF9XCIkezJ9XG5cCiMgRWxlbWVudHNcblwKc25pcHBldCBhXG5cCgk8YSBocmVmPVwiJHsxOiN9XCI+JHsyOiQxfTwvYT5cblwKc25pcHBldCBhLlxuXAoJPGEgY2xhc3M9XCIkezF9XCIgaHJlZj1cIiR7MjojfVwiPiR7MzokMX08L2E+XG5cCnNuaXBwZXQgYSNcblwKCTxhIGlkPVwiJHsxfVwiIGhyZWY9XCIkezI6I31cIj4kezM6JDF9PC9hPlxuXApzbmlwcGV0IGE6ZXh0XG5cCgk8YSBocmVmPVwiaHR0cDovLyR7MTpleGFtcGxlLmNvbX1cIj4kezI6JDF9PC9hPlxuXApzbmlwcGV0IGE6bWFpbFxuXAoJPGEgaHJlZj1cIm1haWx0bzokezE6am9lQGV4YW1wbGUuY29tfT9zdWJqZWN0PSR7MjpmZWVkYmFja31cIj4kezM6ZW1haWwgbWV9PC9hPlxuXApzbmlwcGV0IGFiYnJcblwKCTxhYmJyIHRpdGxlPVwiJHsxfVwiPiR7Mn08L2FiYnI+XG5cCnNuaXBwZXQgYWRkcmVzc1xuXAoJPGFkZHJlc3M+XG5cCgkJJHsxfVxuXAoJPC9hZGRyZXNzPlxuXApzbmlwcGV0IGFyZWFcblwKCTxhcmVhIHNoYXBlPVwiJHsxOnJlY3R9XCIgY29vcmRzPVwiJHsyfVwiIGhyZWY9XCIkezN9XCIgYWx0PVwiJHs0fVwiIC8+XG5cCnNuaXBwZXQgYXJlYStcblwKCTxhcmVhIHNoYXBlPVwiJHsxOnJlY3R9XCIgY29vcmRzPVwiJHsyfVwiIGhyZWY9XCIkezN9XCIgYWx0PVwiJHs0fVwiIC8+XG5cCglhcmVhKyR7NX1cblwKc25pcHBldCBhcmVhOmNcblwKCTxhcmVhIHNoYXBlPVwiY2lyY2xlXCIgY29vcmRzPVwiJHsxfVwiIGhyZWY9XCIkezJ9XCIgYWx0PVwiJHszfVwiIC8+XG5cCnNuaXBwZXQgYXJlYTpkXG5cCgk8YXJlYSBzaGFwZT1cImRlZmF1bHRcIiBjb29yZHM9XCIkezF9XCIgaHJlZj1cIiR7Mn1cIiBhbHQ9XCIkezN9XCIgLz5cblwKc25pcHBldCBhcmVhOnBcblwKCTxhcmVhIHNoYXBlPVwicG9seVwiIGNvb3Jkcz1cIiR7MX1cIiBocmVmPVwiJHsyfVwiIGFsdD1cIiR7M31cIiAvPlxuXApzbmlwcGV0IGFyZWE6clxuXAoJPGFyZWEgc2hhcGU9XCJyZWN0XCIgY29vcmRzPVwiJHsxfVwiIGhyZWY9XCIkezJ9XCIgYWx0PVwiJHszfVwiIC8+XG5cCnNuaXBwZXQgYXJ0aWNsZVxuXAoJPGFydGljbGU+XG5cCgkJJHsxfVxuXAoJPC9hcnRpY2xlPlxuXApzbmlwcGV0IGFydGljbGUuXG5cCgk8YXJ0aWNsZSBjbGFzcz1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2FydGljbGU+XG5cCnNuaXBwZXQgYXJ0aWNsZSNcblwKCTxhcnRpY2xlIGlkPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvYXJ0aWNsZT5cblwKc25pcHBldCBhc2lkZVxuXAoJPGFzaWRlPlxuXAoJCSR7MX1cblwKCTwvYXNpZGU+XG5cCnNuaXBwZXQgYXNpZGUuXG5cCgk8YXNpZGUgY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9hc2lkZT5cblwKc25pcHBldCBhc2lkZSNcblwKCTxhc2lkZSBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2FzaWRlPlxuXApzbmlwcGV0IGF1ZGlvXG5cCgk8YXVkaW8gc3JjPVwiJHsxfT4kezJ9PC9hdWRpbz5cblwKc25pcHBldCBiXG5cCgk8Yj4kezF9PC9iPlxuXApzbmlwcGV0IGJhc2VcblwKCTxiYXNlIGhyZWY9XCIkezF9XCIgdGFyZ2V0PVwiJHsyfVwiIC8+XG5cCnNuaXBwZXQgYmRpXG5cCgk8YmRpPiR7MX08L2Jkbz5cblwKc25pcHBldCBiZG9cblwKCTxiZG8gZGlyPVwiJHsxfVwiPiR7Mn08L2Jkbz5cblwKc25pcHBldCBiZG86bFxuXAoJPGJkbyBkaXI9XCJsdHJcIj4kezF9PC9iZG8+XG5cCnNuaXBwZXQgYmRvOnJcblwKCTxiZG8gZGlyPVwicnRsXCI+JHsxfTwvYmRvPlxuXApzbmlwcGV0IGJsb2NrcXVvdGVcblwKCTxibG9ja3F1b3RlPlxuXAoJCSR7MX1cblwKCTwvYmxvY2txdW90ZT5cblwKc25pcHBldCBib2R5XG5cCgk8Ym9keT5cblwKCQkkezF9XG5cCgk8L2JvZHk+XG5cCnNuaXBwZXQgYnJcblwKCTxiciAvPiR7MX1cblwKc25pcHBldCBidXR0b25cblwKCTxidXR0b24gdHlwZT1cIiR7MTpzdWJtaXR9XCI+JHsyfTwvYnV0dG9uPlxuXApzbmlwcGV0IGJ1dHRvbi5cblwKCTxidXR0b24gY2xhc3M9XCIkezE6YnV0dG9ufVwiIHR5cGU9XCIkezI6c3VibWl0fVwiPiR7M308L2J1dHRvbj5cblwKc25pcHBldCBidXR0b24jXG5cCgk8YnV0dG9uIGlkPVwiJHsxfVwiIHR5cGU9XCIkezI6c3VibWl0fVwiPiR7M308L2J1dHRvbj5cblwKc25pcHBldCBidXR0b246c1xuXAoJPGJ1dHRvbiB0eXBlPVwic3VibWl0XCI+JHsxfTwvYnV0dG9uPlxuXApzbmlwcGV0IGJ1dHRvbjpyXG5cCgk8YnV0dG9uIHR5cGU9XCJyZXNldFwiPiR7MX08L2J1dHRvbj5cblwKc25pcHBldCBjYW52YXNcblwKCTxjYW52YXM+XG5cCgkJJHsxfVxuXAoJPC9jYW52YXM+XG5cCnNuaXBwZXQgY2FwdGlvblxuXAoJPGNhcHRpb24+JHsxfTwvY2FwdGlvbj5cblwKc25pcHBldCBjaXRlXG5cCgk8Y2l0ZT4kezF9PC9jaXRlPlxuXApzbmlwcGV0IGNvZGVcblwKCTxjb2RlPiR7MX08L2NvZGU+XG5cCnNuaXBwZXQgY29sXG5cCgk8Y29sIC8+JHsxfVxuXApzbmlwcGV0IGNvbCtcblwKCTxjb2wgLz5cblwKCWNvbCskezF9XG5cCnNuaXBwZXQgY29sZ3JvdXBcblwKCTxjb2xncm91cD5cblwKCQkkezF9XG5cCgk8L2NvbGdyb3VwPlxuXApzbmlwcGV0IGNvbGdyb3VwK1xuXAoJPGNvbGdyb3VwPlxuXAoJCTxjb2wgLz5cblwKCQljb2wrJHsxfVxuXAoJPC9jb2xncm91cD5cblwKc25pcHBldCBjb21tYW5kXG5cCgk8Y29tbWFuZCB0eXBlPVwiY29tbWFuZFwiIGxhYmVsPVwiJHsxfVwiIGljb249XCIkezJ9XCIgLz5cblwKc25pcHBldCBjb21tYW5kOmNcblwKCTxjb21tYW5kIHR5cGU9XCJjaGVja2JveFwiIGxhYmVsPVwiJHsxfVwiIGljb249XCIkezJ9XCIgLz5cblwKc25pcHBldCBjb21tYW5kOnJcblwKCTxjb21tYW5kIHR5cGU9XCJyYWRpb1wiIHJhZGlvZ3JvdXA9XCIkezF9XCIgbGFiZWw9XCIkezJ9XCIgaWNvbj1cIiR7M31cIiAvPlxuXApzbmlwcGV0IGRhdGFncmlkXG5cCgk8ZGF0YWdyaWQ+XG5cCgkJJHsxfVxuXAoJPC9kYXRhZ3JpZD5cblwKc25pcHBldCBkYXRhbGlzdFxuXAoJPGRhdGFsaXN0PlxuXAoJCSR7MX1cblwKCTwvZGF0YWxpc3Q+XG5cCnNuaXBwZXQgZGF0YXRlbXBsYXRlXG5cCgk8ZGF0YXRlbXBsYXRlPlxuXAoJCSR7MX1cblwKCTwvZGF0YXRlbXBsYXRlPlxuXApzbmlwcGV0IGRkXG5cCgk8ZGQ+JHsxfTwvZGQ+XG5cCnNuaXBwZXQgZGQuXG5cCgk8ZGQgY2xhc3M9XCIkezF9XCI+JHsyfTwvZGQ+XG5cCnNuaXBwZXQgZGQjXG5cCgk8ZGQgaWQ9XCIkezF9XCI+JHsyfTwvZGQ+XG5cCnNuaXBwZXQgZGVsXG5cCgk8ZGVsPiR7MX08L2RlbD5cblwKc25pcHBldCBkZXRhaWxzXG5cCgk8ZGV0YWlscz4kezF9PC9kZXRhaWxzPlxuXApzbmlwcGV0IGRmblxuXAoJPGRmbj4kezF9PC9kZm4+XG5cCnNuaXBwZXQgZGlhbG9nXG5cCgk8ZGlhbG9nPlxuXAoJCSR7MX1cblwKCTwvZGlhbG9nPlxuXApzbmlwcGV0IGRpdlxuXAoJPGRpdj5cblwKCQkkezF9XG5cCgk8L2Rpdj5cblwKc25pcHBldCBkaXYuXG5cCgk8ZGl2IGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvZGl2PlxuXApzbmlwcGV0IGRpdiNcblwKCTxkaXYgaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9kaXY+XG5cCnNuaXBwZXQgZGxcblwKCTxkbD5cblwKCQkkezF9XG5cCgk8L2RsPlxuXApzbmlwcGV0IGRsLlxuXAoJPGRsIGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvZGw+XG5cCnNuaXBwZXQgZGwjXG5cCgk8ZGwgaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9kbD5cblwKc25pcHBldCBkbCtcblwKCTxkbD5cblwKCQk8ZHQ+JHsxfTwvZHQ+XG5cCgkJPGRkPiR7Mn08L2RkPlxuXAoJCWR0KyR7M31cblwKCTwvZGw+XG5cCnNuaXBwZXQgZHRcblwKCTxkdD4kezF9PC9kdD5cblwKc25pcHBldCBkdC5cblwKCTxkdCBjbGFzcz1cIiR7MX1cIj4kezJ9PC9kdD5cblwKc25pcHBldCBkdCNcblwKCTxkdCBpZD1cIiR7MX1cIj4kezJ9PC9kdD5cblwKc25pcHBldCBkdCtcblwKCTxkdD4kezF9PC9kdD5cblwKCTxkZD4kezJ9PC9kZD5cblwKCWR0KyR7M31cblwKc25pcHBldCBlbVxuXAoJPGVtPiR7MX08L2VtPlxuXApzbmlwcGV0IGVtYmVkXG5cCgk8ZW1iZWQgc3JjPSR7MX0gdHlwZT1cIiR7Mn0gLz5cblwKc25pcHBldCBmaWVsZHNldFxuXAoJPGZpZWxkc2V0PlxuXAoJCSR7MX1cblwKCTwvZmllbGRzZXQ+XG5cCnNuaXBwZXQgZmllbGRzZXQuXG5cCgk8ZmllbGRzZXQgY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9maWVsZHNldD5cblwKc25pcHBldCBmaWVsZHNldCNcblwKCTxmaWVsZHNldCBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2ZpZWxkc2V0PlxuXApzbmlwcGV0IGZpZWxkc2V0K1xuXAoJPGZpZWxkc2V0PlxuXAoJCTxsZWdlbmQ+PHNwYW4+JHsxfTwvc3Bhbj48L2xlZ2VuZD5cblwKCQkkezJ9XG5cCgk8L2ZpZWxkc2V0PlxuXAoJZmllbGRzZXQrJHszfVxuXApzbmlwcGV0IGZpZ2NhcHRpb25cblwKCTxmaWdjYXB0aW9uPiR7MX08L2ZpZ2NhcHRpb24+XG5cCnNuaXBwZXQgZmlndXJlXG5cCgk8ZmlndXJlPiR7MX08L2ZpZ3VyZT5cblwKc25pcHBldCBmb290ZXJcblwKCTxmb290ZXI+XG5cCgkJJHsxfVxuXAoJPC9mb290ZXI+XG5cCnNuaXBwZXQgZm9vdGVyLlxuXAoJPGZvb3RlciBjbGFzcz1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2Zvb3Rlcj5cblwKc25pcHBldCBmb290ZXIjXG5cCgk8Zm9vdGVyIGlkPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvZm9vdGVyPlxuXApzbmlwcGV0IGZvcm1cblwKCTxmb3JtIGFjdGlvbj1cIiR7MX1cIiBtZXRob2Q9XCIkezI6Z2V0fVwiIGFjY2VwdC1jaGFyc2V0PVwidXRmLThcIj5cblwKCQkkezN9XG5cCgk8L2Zvcm0+XG5cCnNuaXBwZXQgZm9ybS5cblwKCTxmb3JtIGNsYXNzPVwiJHsxfVwiIGFjdGlvbj1cIiR7Mn1cIiBtZXRob2Q9XCIkezM6Z2V0fVwiIGFjY2VwdC1jaGFyc2V0PVwidXRmLThcIj5cblwKCQkkezR9XG5cCgk8L2Zvcm0+XG5cCnNuaXBwZXQgZm9ybSNcblwKCTxmb3JtIGlkPVwiJHsxfVwiIGFjdGlvbj1cIiR7Mn1cIiBtZXRob2Q9XCIkezM6Z2V0fVwiIGFjY2VwdC1jaGFyc2V0PVwidXRmLThcIj5cblwKCQkkezR9XG5cCgk8L2Zvcm0+XG5cCnNuaXBwZXQgaDFcblwKCTxoMT4kezF9PC9oMT5cblwKc25pcHBldCBoMS5cblwKCTxoMSBjbGFzcz1cIiR7MX1cIj4kezJ9PC9oMT5cblwKc25pcHBldCBoMSNcblwKCTxoMSBpZD1cIiR7MX1cIj4kezJ9PC9oMT5cblwKc25pcHBldCBoMlxuXAoJPGgyPiR7MX08L2gyPlxuXApzbmlwcGV0IGgyLlxuXAoJPGgyIGNsYXNzPVwiJHsxfVwiPiR7Mn08L2gyPlxuXApzbmlwcGV0IGgyI1xuXAoJPGgyIGlkPVwiJHsxfVwiPiR7Mn08L2gyPlxuXApzbmlwcGV0IGgzXG5cCgk8aDM+JHsxfTwvaDM+XG5cCnNuaXBwZXQgaDMuXG5cCgk8aDMgY2xhc3M9XCIkezF9XCI+JHsyfTwvaDM+XG5cCnNuaXBwZXQgaDMjXG5cCgk8aDMgaWQ9XCIkezF9XCI+JHsyfTwvaDM+XG5cCnNuaXBwZXQgaDRcblwKCTxoND4kezF9PC9oND5cblwKc25pcHBldCBoNC5cblwKCTxoNCBjbGFzcz1cIiR7MX1cIj4kezJ9PC9oND5cblwKc25pcHBldCBoNCNcblwKCTxoNCBpZD1cIiR7MX1cIj4kezJ9PC9oND5cblwKc25pcHBldCBoNVxuXAoJPGg1PiR7MX08L2g1PlxuXApzbmlwcGV0IGg1LlxuXAoJPGg1IGNsYXNzPVwiJHsxfVwiPiR7Mn08L2g1PlxuXApzbmlwcGV0IGg1I1xuXAoJPGg1IGlkPVwiJHsxfVwiPiR7Mn08L2g1PlxuXApzbmlwcGV0IGg2XG5cCgk8aDY+JHsxfTwvaDY+XG5cCnNuaXBwZXQgaDYuXG5cCgk8aDYgY2xhc3M9XCIkezF9XCI+JHsyfTwvaDY+XG5cCnNuaXBwZXQgaDYjXG5cCgk8aDYgaWQ9XCIkezF9XCI+JHsyfTwvaDY+XG5cCnNuaXBwZXQgaGVhZFxuXAoJPGhlYWQ+XG5cCgkJPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIiAvPlxuXApcblwKCQk8dGl0bGU+JHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCcnLCAnUGFnZSBUaXRsZScpLCAnXi4nLCAnXFx1JicsICcnKWB9PC90aXRsZT5cblwKCQkkezJ9XG5cCgk8L2hlYWQ+XG5cCnNuaXBwZXQgaGVhZGVyXG5cCgk8aGVhZGVyPlxuXAoJCSR7MX1cblwKCTwvaGVhZGVyPlxuXApzbmlwcGV0IGhlYWRlci5cblwKCTxoZWFkZXIgY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9oZWFkZXI+XG5cCnNuaXBwZXQgaGVhZGVyI1xuXAoJPGhlYWRlciBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2hlYWRlcj5cblwKc25pcHBldCBoZ3JvdXBcblwKCTxoZ3JvdXA+XG5cCgkJJHsxfVxuXAoJPC9oZ3JvdXA+XG5cCnNuaXBwZXQgaGdyb3VwLlxuXAoJPGhncm91cCBjbGFzcz1cIiR7MX0+XG5cCgkJJHsyfVxuXAoJPC9oZ3JvdXA+XG5cCnNuaXBwZXQgaHJcblwKCTxociAvPiR7MX1cblwKc25pcHBldCBodG1sXG5cCgk8aHRtbD5cblwKCSR7MX1cblwKCTwvaHRtbD5cblwKc25pcHBldCB4aHRtbFxuXAoJPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG5cCgkkezF9XG5cCgk8L2h0bWw+XG5cCnNuaXBwZXQgaHRtbDVcblwKCTwhRE9DVFlQRSBodG1sPlxuXAoJPGh0bWw+XG5cCgkJPGhlYWQ+XG5cCgkJCTxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz5cblwKCQkJPHRpdGxlPiR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgnJywgJ1BhZ2UgVGl0bGUnKSwgJ14uJywgJ1xcdSYnLCAnJylgfTwvdGl0bGU+XG5cCgkJCSR7MjptZXRhfVxuXAoJCTwvaGVhZD5cblwKCQk8Ym9keT5cblwKCQkJJHszOmJvZHl9XG5cCgkJPC9ib2R5PlxuXAoJPC9odG1sPlxuXApzbmlwcGV0IHhodG1sNVxuXAoJPCFET0NUWVBFIGh0bWw+XG5cCgk8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj5cblwKCQk8aGVhZD5cblwKCQkJPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJhcHBsaWNhdGlvbi94aHRtbCt4bWw7IGNoYXJzZXQ9dXRmLThcIiAvPlxuXAoJCQk8dGl0bGU+JHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCcnLCAnUGFnZSBUaXRsZScpLCAnXi4nLCAnXFx1JicsICcnKWB9PC90aXRsZT5cblwKCQkJJHsyOm1ldGF9XG5cCgkJPC9oZWFkPlxuXAoJCTxib2R5PlxuXAoJCQkkezM6Ym9keX1cblwKCQk8L2JvZHk+XG5cCgk8L2h0bWw+XG5cCnNuaXBwZXQgaVxuXAoJPGk+JHsxfTwvaT5cblwKc25pcHBldCBpZnJhbWVcblwKCTxpZnJhbWUgc3JjPVwiJHsxfVwiIGZyYW1lYm9yZGVyPVwiMFwiPjwvaWZyYW1lPiR7Mn1cblwKc25pcHBldCBpZnJhbWUuXG5cCgk8aWZyYW1lIGNsYXNzPVwiJHsxfVwiIHNyYz1cIiR7Mn1cIiBmcmFtZWJvcmRlcj1cIjBcIj48L2lmcmFtZT4kezN9XG5cCnNuaXBwZXQgaWZyYW1lI1xuXAoJPGlmcmFtZSBpZD1cIiR7MX1cIiBzcmM9XCIkezJ9XCIgZnJhbWVib3JkZXI9XCIwXCI+PC9pZnJhbWU+JHszfVxuXApzbmlwcGV0IGltZ1xuXAoJPGltZyBzcmM9XCIkezF9XCIgYWx0PVwiJHsyfVwiIC8+JHszfVxuXApzbmlwcGV0IGltZy5cblwKCTxpbWcgY2xhc3M9XCIkezF9XCIgc3JjPVwiJHsyfVwiIGFsdD1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbWcjXG5cCgk8aW1nIGlkPVwiJHsxfVwiIHNyYz1cIiR7Mn1cIiBhbHQ9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXRcblwKCTxpbnB1dCB0eXBlPVwiJHsxOnRleHQvc3VibWl0L2hpZGRlbi9idXR0b24vaW1hZ2V9XCIgbmFtZT1cIiR7Mn1cIiBpZD1cIiR7MzokMn1cIiB2YWx1ZT1cIiR7NH1cIiAvPiR7NX1cblwKc25pcHBldCBpbnB1dC5cblwKCTxpbnB1dCBjbGFzcz1cIiR7MX1cIiB0eXBlPVwiJHsyOnRleHQvc3VibWl0L2hpZGRlbi9idXR0b24vaW1hZ2V9XCIgbmFtZT1cIiR7M31cIiBpZD1cIiR7NDokM31cIiB2YWx1ZT1cIiR7NX1cIiAvPiR7Nn1cblwKc25pcHBldCBpbnB1dDp0ZXh0XG5cCgk8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OnN1Ym1pdFxuXAoJPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmhpZGRlblxuXAoJPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmJ1dHRvblxuXAoJPGlucHV0IHR5cGU9XCJidXR0b25cIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmltYWdlXG5cCgk8aW5wdXQgdHlwZT1cImltYWdlXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiBzcmM9XCIkezN9XCIgYWx0PVwiJHs0fVwiIC8+JHs1fVxuXApzbmlwcGV0IGlucHV0OmNoZWNrYm94XG5cCgk8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiAvPiR7M31cblwKc25pcHBldCBpbnB1dDpyYWRpb1xuXAoJPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgLz4kezN9XG5cCnNuaXBwZXQgaW5wdXQ6Y29sb3JcblwKCTxpbnB1dCB0eXBlPVwiY29sb3JcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmRhdGVcblwKCTxpbnB1dCB0eXBlPVwiZGF0ZVwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6ZGF0ZXRpbWVcblwKCTxpbnB1dCB0eXBlPVwiZGF0ZXRpbWVcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmRhdGV0aW1lLWxvY2FsXG5cCgk8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDplbWFpbFxuXAoJPGlucHV0IHR5cGU9XCJlbWFpbFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6ZmlsZVxuXAoJPGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDptb250aFxuXAoJPGlucHV0IHR5cGU9XCJtb250aFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6bnVtYmVyXG5cCgk8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6cGFzc3dvcmRcblwKCTxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OnJhbmdlXG5cCgk8aW5wdXQgdHlwZT1cInJhbmdlXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpyZXNldFxuXAoJPGlucHV0IHR5cGU9XCJyZXNldFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6c2VhcmNoXG5cCgk8aW5wdXQgdHlwZT1cInNlYXJjaFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6dGltZVxuXAoJPGlucHV0IHR5cGU9XCJ0aW1lXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDp1cmxcblwKCTxpbnB1dCB0eXBlPVwidXJsXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDp3ZWVrXG5cCgk8aW5wdXQgdHlwZT1cIndlZWtcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGluc1xuXAoJPGlucz4kezF9PC9pbnM+XG5cCnNuaXBwZXQga2JkXG5cCgk8a2JkPiR7MX08L2tiZD5cblwKc25pcHBldCBrZXlnZW5cblwKCTxrZXlnZW4+JHsxfTwva2V5Z2VuPlxuXApzbmlwcGV0IGxhYmVsXG5cCgk8bGFiZWwgZm9yPVwiJHsyOiQxfVwiPiR7MX08L2xhYmVsPlxuXApzbmlwcGV0IGxhYmVsOmlcblwKCTxsYWJlbCBmb3I9XCIkezI6JDF9XCI+JHsxfTwvbGFiZWw+XG5cCgk8aW5wdXQgdHlwZT1cIiR7Mzp0ZXh0L3N1Ym1pdC9oaWRkZW4vYnV0dG9ufVwiIG5hbWU9XCIkezQ6JDJ9XCIgaWQ9XCIkezU6JDJ9XCIgdmFsdWU9XCIkezZ9XCIgLz4kezd9XG5cCnNuaXBwZXQgbGFiZWw6c1xuXAoJPGxhYmVsIGZvcj1cIiR7MjokMX1cIj4kezF9PC9sYWJlbD5cblwKCTxzZWxlY3QgbmFtZT1cIiR7MzokMn1cIiBpZD1cIiR7NDokMn1cIj5cblwKCQk8b3B0aW9uIHZhbHVlPVwiJHs1fVwiPiR7NjokNX08L29wdGlvbj5cblwKCTwvc2VsZWN0PlxuXApzbmlwcGV0IGxlZ2VuZFxuXAoJPGxlZ2VuZD4kezF9PC9sZWdlbmQ+XG5cCnNuaXBwZXQgbGVnZW5kK1xuXAoJPGxlZ2VuZD48c3Bhbj4kezF9PC9zcGFuPjwvbGVnZW5kPlxuXApzbmlwcGV0IGxpXG5cCgk8bGk+JHsxfTwvbGk+XG5cCnNuaXBwZXQgbGkuXG5cCgk8bGkgY2xhc3M9XCIkezF9XCI+JHsyfTwvbGk+XG5cCnNuaXBwZXQgbGkrXG5cCgk8bGk+JHsxfTwvbGk+XG5cCglsaSskezJ9XG5cCnNuaXBwZXQgbGlhXG5cCgk8bGk+PGEgaHJlZj1cIiR7MjojfVwiPiR7MX08L2E+PC9saT5cblwKc25pcHBldCBsaWErXG5cCgk8bGk+PGEgaHJlZj1cIiR7MjojfVwiPiR7MX08L2E+PC9saT5cblwKCWxpYSskezN9XG5cCnNuaXBwZXQgbGlua1xuXAoJPGxpbmsgcmVsPVwiJHsxfVwiIGhyZWY9XCIkezJ9XCIgdGl0bGU9XCIkezN9XCIgdHlwZT1cIiR7NH1cIiAvPiR7NX1cblwKc25pcHBldCBsaW5rOmF0b21cblwKCTxsaW5rIHJlbD1cImFsdGVybmF0ZVwiIGhyZWY9XCIkezE6YXRvbS54bWx9XCIgdGl0bGU9XCJBdG9tXCIgdHlwZT1cImFwcGxpY2F0aW9uL2F0b20reG1sXCIgLz4kezJ9XG5cCnNuaXBwZXQgbGluazpjc3NcblwKCTxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiJHsyOnN0eWxlLmNzc31cIiB0eXBlPVwidGV4dC9jc3NcIiBtZWRpYT1cIiR7MzphbGx9XCIgLz4kezR9XG5cCnNuaXBwZXQgbGluazpmYXZpY29uXG5cCgk8bGluayByZWw9XCJzaG9ydGN1dCBpY29uXCIgaHJlZj1cIiR7MTpmYXZpY29uLmljb31cIiB0eXBlPVwiaW1hZ2UveC1pY29uXCIgLz4kezJ9XG5cCnNuaXBwZXQgbGluazpyc3NcblwKCTxsaW5rIHJlbD1cImFsdGVybmF0ZVwiIGhyZWY9XCIkezE6cnNzLnhtbH1cIiB0aXRsZT1cIlJTU1wiIHR5cGU9XCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiIC8+JHsyfVxuXApzbmlwcGV0IGxpbms6dG91Y2hcblwKCTxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBocmVmPVwiJHsxOmZhdmljb24ucG5nfVwiIC8+JHsyfVxuXApzbmlwcGV0IG1hcFxuXAoJPG1hcCBuYW1lPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvbWFwPlxuXApzbmlwcGV0IG1hcC5cblwKCTxtYXAgY2xhc3M9XCIkezF9XCIgbmFtZT1cIiR7Mn1cIj5cblwKCQkkezN9XG5cCgk8L21hcD5cblwKc25pcHBldCBtYXAjXG5cCgk8bWFwIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9PlxuXAoJCSR7M31cblwKCTwvbWFwPlxuXApzbmlwcGV0IG1hcCtcblwKCTxtYXAgbmFtZT1cIiR7MX1cIj5cblwKCQk8YXJlYSBzaGFwZT1cIiR7Mn1cIiBjb29yZHM9XCIkezN9XCIgaHJlZj1cIiR7NH1cIiBhbHQ9XCIkezV9XCIgLz4kezZ9XG5cCgk8L21hcD4kezd9XG5cCnNuaXBwZXQgbWFya1xuXAoJPG1hcms+JHsxfTwvbWFyaz5cblwKc25pcHBldCBtZW51XG5cCgk8bWVudT5cblwKCQkkezF9XG5cCgk8L21lbnU+XG5cCnNuaXBwZXQgbWVudTpjXG5cCgk8bWVudSB0eXBlPVwiY29udGV4dFwiPlxuXAoJCSR7MX1cblwKCTwvbWVudT5cblwKc25pcHBldCBtZW51OnRcblwKCTxtZW51IHR5cGU9XCJ0b29sYmFyXCI+XG5cCgkJJHsxfVxuXAoJPC9tZW51PlxuXApzbmlwcGV0IG1ldGFcblwKCTxtZXRhIGh0dHAtZXF1aXY9XCIkezF9XCIgY29udGVudD1cIiR7Mn1cIiAvPiR7M31cblwKc25pcHBldCBtZXRhOmNvbXBhdFxuXAoJPG1ldGEgaHR0cC1lcXVpdj1cIlgtVUEtQ29tcGF0aWJsZVwiIGNvbnRlbnQ9XCJJRT0kezE6Nyw4LGVkZ2V9XCIgLz4kezN9XG5cCnNuaXBwZXQgbWV0YTpyZWZyZXNoXG5cCgk8bWV0YSBodHRwLWVxdWl2PVwicmVmcmVzaFwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOFwiIC8+JHszfVxuXApzbmlwcGV0IG1ldGE6dXRmXG5cCgk8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDtjaGFyc2V0PVVURi04XCIgLz4kezN9XG5cCnNuaXBwZXQgbWV0ZXJcblwKCTxtZXRlcj4kezF9PC9tZXRlcj5cblwKc25pcHBldCBuYXZcblwKCTxuYXY+XG5cCgkJJHsxfVxuXAoJPC9uYXY+XG5cCnNuaXBwZXQgbmF2LlxuXAoJPG5hdiBjbGFzcz1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L25hdj5cblwKc25pcHBldCBuYXYjXG5cCgk8bmF2IGlkPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvbmF2PlxuXApzbmlwcGV0IG5vc2NyaXB0XG5cCgk8bm9zY3JpcHQ+XG5cCgkJJHsxfVxuXAoJPC9ub3NjcmlwdD5cblwKc25pcHBldCBvYmplY3RcblwKCTxvYmplY3QgZGF0YT1cIiR7MX1cIiB0eXBlPVwiJHsyfVwiPlxuXAoJCSR7M31cblwKCTwvb2JqZWN0PiR7NH1cblwKIyBFbWJlZCBRVCBNb3ZpZVxuXApzbmlwcGV0IG1vdmllXG5cCgk8b2JqZWN0IHdpZHRoPVwiJDJcIiBoZWlnaHQ9XCIkM1wiIGNsYXNzaWQ9XCJjbHNpZDowMkJGMjVENS04QzE3LTRCMjMtQkM4MC1EMzQ4OEFCRERDNkJcIlxuXAoJIGNvZGViYXNlPVwiaHR0cDovL3d3dy5hcHBsZS5jb20vcXRhY3RpdmV4L3F0cGx1Z2luLmNhYlwiPlxuXAoJCTxwYXJhbSBuYW1lPVwic3JjXCIgdmFsdWU9XCIkMVwiIC8+XG5cCgkJPHBhcmFtIG5hbWU9XCJjb250cm9sbGVyXCIgdmFsdWU9XCIkNFwiIC8+XG5cCgkJPHBhcmFtIG5hbWU9XCJhdXRvcGxheVwiIHZhbHVlPVwiJDVcIiAvPlxuXAoJCTxlbWJlZCBzcmM9XCIkezE6bW92aWUubW92fVwiXG5cCgkJCXdpZHRoPVwiJHsyOjMyMH1cIiBoZWlnaHQ9XCIkezM6MjQwfVwiXG5cCgkJCWNvbnRyb2xsZXI9XCIkezQ6dHJ1ZX1cIiBhdXRvcGxheT1cIiR7NTp0cnVlfVwiXG5cCgkJCXNjYWxlPVwidG9maXRcIiBjYWNoZT1cInRydWVcIlxuXAoJCQlwbHVnaW5zcGFnZT1cImh0dHA6Ly93d3cuYXBwbGUuY29tL3F1aWNrdGltZS9kb3dubG9hZC9cIiAvPlxuXAoJPC9vYmplY3Q+JHs2fVxuXApzbmlwcGV0IG9sXG5cCgk8b2w+XG5cCgkJJHsxfVxuXAoJPC9vbD5cblwKc25pcHBldCBvbC5cblwKCTxvbCBjbGFzcz1cIiR7MX0+XG5cCgkJJHsyfVxuXAoJPC9vbD5cblwKc25pcHBldCBvbCNcblwKCTxvbCBpZD1cIiR7MX0+XG5cCgkJJHsyfVxuXAoJPC9vbD5cblwKc25pcHBldCBvbCtcblwKCTxvbD5cblwKCQk8bGk+JHsxfTwvbGk+XG5cCgkJbGkrJHsyfVxuXAoJPC9vbD5cblwKc25pcHBldCBvcHRcblwKCTxvcHRpb24gdmFsdWU9XCIkezF9XCI+JHsyOiQxfTwvb3B0aW9uPlxuXApzbmlwcGV0IG9wdCtcblwKCTxvcHRpb24gdmFsdWU9XCIkezF9XCI+JHsyOiQxfTwvb3B0aW9uPlxuXAoJb3B0KyR7M31cblwKc25pcHBldCBvcHR0XG5cCgk8b3B0aW9uPiR7MX08L29wdGlvbj5cblwKc25pcHBldCBvcHRncm91cFxuXAoJPG9wdGdyb3VwPlxuXAoJCTxvcHRpb24gdmFsdWU9XCIkezF9XCI+JHsyOiQxfTwvb3B0aW9uPlxuXAoJCW9wdCskezN9XG5cCgk8L29wdGdyb3VwPlxuXApzbmlwcGV0IG91dHB1dFxuXAoJPG91dHB1dD4kezF9PC9vdXRwdXQ+XG5cCnNuaXBwZXQgcFxuXAoJPHA+JHsxfTwvcD5cblwKc25pcHBldCBwYXJhbVxuXAoJPHBhcmFtIG5hbWU9XCIkezF9XCIgdmFsdWU9XCIkezJ9XCIgLz4kezN9XG5cCnNuaXBwZXQgcHJlXG5cCgk8cHJlPlxuXAoJCSR7MX1cblwKCTwvcHJlPlxuXApzbmlwcGV0IHByb2dyZXNzXG5cCgk8cHJvZ3Jlc3M+JHsxfTwvcHJvZ3Jlc3M+XG5cCnNuaXBwZXQgcVxuXAoJPHE+JHsxfTwvcT5cblwKc25pcHBldCBycFxuXAoJPHJwPiR7MX08L3JwPlxuXApzbmlwcGV0IHJ0XG5cCgk8cnQ+JHsxfTwvcnQ+XG5cCnNuaXBwZXQgcnVieVxuXAoJPHJ1Ynk+XG5cCgkJPHJwPjxydD4kezF9PC9ydD48L3JwPlxuXAoJPC9ydWJ5PlxuXApzbmlwcGV0IHNcblwKCTxzPiR7MX08L3M+XG5cCnNuaXBwZXQgc2FtcFxuXAoJPHNhbXA+XG5cCgkJJHsxfVxuXAoJPC9zYW1wPlxuXApzbmlwcGV0IHNjcmlwdFxuXAoJPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgY2hhcnNldD1cInV0Zi04XCI+XG5cCgkJJHsxfVxuXAoJPC9zY3JpcHQ+XG5cCnNuaXBwZXQgc2NyaXB0c3JjXG5cCgk8c2NyaXB0IHNyYz1cIiR7MX0uanNcIiB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgY2hhcnNldD1cInV0Zi04XCI+PC9zY3JpcHQ+XG5cCnNuaXBwZXQgbmV3c2NyaXB0XG5cCgk8c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIgY2hhcnNldD1cInV0Zi04XCI+XG5cCgkJJHsxfVxuXAoJPC9zY3JpcHQ+XG5cCnNuaXBwZXQgbmV3c2NyaXB0c3JjXG5cCgk8c2NyaXB0IHNyYz1cIiR7MX0uanNcIiB0eXBlPVwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIGNoYXJzZXQ9XCJ1dGYtOFwiPjwvc2NyaXB0PlxuXApzbmlwcGV0IHNlY3Rpb25cblwKCTxzZWN0aW9uPlxuXAoJCSR7MX1cblwKCTwvc2VjdGlvbj5cblwKc25pcHBldCBzZWN0aW9uLlxuXAoJPHNlY3Rpb24gY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9zZWN0aW9uPlxuXApzbmlwcGV0IHNlY3Rpb24jXG5cCgk8c2VjdGlvbiBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L3NlY3Rpb24+XG5cCnNuaXBwZXQgc2VsZWN0XG5cCgk8c2VsZWN0IG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCI+XG5cCgkJJHszfVxuXAoJPC9zZWxlY3Q+XG5cCnNuaXBwZXQgc2VsZWN0LlxuXAoJPHNlbGVjdCBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIGNsYXNzPVwiJHszfT5cblwKCQkkezR9XG5cCgk8L3NlbGVjdD5cblwKc25pcHBldCBzZWxlY3QrXG5cCgk8c2VsZWN0IG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCI+XG5cCgkJPG9wdGlvbiB2YWx1ZT1cIiR7M31cIj4kezQ6JDN9PC9vcHRpb24+XG5cCgkJb3B0KyR7NX1cblwKCTwvc2VsZWN0PlxuXApzbmlwcGV0IHNtYWxsXG5cCgk8c21hbGw+JHsxfTwvc21hbGw+XG5cCnNuaXBwZXQgc291cmNlXG5cCgk8c291cmNlIHNyYz1cIiR7MX1cIiB0eXBlPVwiJHsyfVwiIG1lZGlhPVwiJHszfVwiIC8+XG5cCnNuaXBwZXQgc3BhblxuXAoJPHNwYW4+JHsxfTwvc3Bhbj5cblwKc25pcHBldCBzdHJvbmdcblwKCTxzdHJvbmc+JHsxfTwvc3Ryb25nPlxuXApzbmlwcGV0IHN0eWxlXG5cCgk8c3R5bGUgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCIkezE6YWxsfVwiPlxuXAoJCSR7Mn1cblwKCTwvc3R5bGU+XG5cCnNuaXBwZXQgc3ViXG5cCgk8c3ViPiR7MX08L3N1Yj5cblwKc25pcHBldCBzdW1tYXJ5XG5cCgk8c3VtbWFyeT5cblwKCQkkezF9XG5cCgk8L3N1bW1hcnk+XG5cCnNuaXBwZXQgc3VwXG5cCgk8c3VwPiR7MX08L3N1cD5cblwKc25pcHBldCB0YWJsZVxuXAoJPHRhYmxlIGJvcmRlcj1cIiR7MTowfVwiPlxuXAoJCSR7Mn1cblwKCTwvdGFibGU+XG5cCnNuaXBwZXQgdGFibGUuXG5cCgk8dGFibGUgY2xhc3M9XCIkezF9XCIgYm9yZGVyPVwiJHsyOjB9XCI+XG5cCgkJJHszfVxuXAoJPC90YWJsZT5cblwKc25pcHBldCB0YWJsZSNcblwKCTx0YWJsZSBpZD1cIiR7MX1cIiBib3JkZXI9XCIkezI6MH1cIj5cblwKCQkkezN9XG5cCgk8L3RhYmxlPlxuXApzbmlwcGV0IHRib2R5XG5cCgk8dGJvZHk+XG5cCgkJJHsxfVxuXAoJPC90Ym9keT5cblwKc25pcHBldCB0ZFxuXAoJPHRkPiR7MX08L3RkPlxuXApzbmlwcGV0IHRkLlxuXAoJPHRkIGNsYXNzPVwiJHsxfVwiPiR7Mn08L3RkPlxuXApzbmlwcGV0IHRkI1xuXAoJPHRkIGlkPVwiJHsxfVwiPiR7Mn08L3RkPlxuXApzbmlwcGV0IHRkK1xuXAoJPHRkPiR7MX08L3RkPlxuXAoJdGQrJHsyfVxuXApzbmlwcGV0IHRleHRhcmVhXG5cCgk8dGV4dGFyZWEgbmFtZT1cIiR7MX1cIiBpZD0kezI6JDF9IHJvd3M9XCIkezM6OH1cIiBjb2xzPVwiJHs0OjQwfVwiPiR7NX08L3RleHRhcmVhPiR7Nn1cblwKc25pcHBldCB0Zm9vdFxuXAoJPHRmb290PlxuXAoJCSR7MX1cblwKCTwvdGZvb3Q+XG5cCnNuaXBwZXQgdGhcblwKCTx0aD4kezF9PC90aD5cblwKc25pcHBldCB0aC5cblwKCTx0aCBjbGFzcz1cIiR7MX1cIj4kezJ9PC90aD5cblwKc25pcHBldCB0aCNcblwKCTx0aCBpZD1cIiR7MX1cIj4kezJ9PC90aD5cblwKc25pcHBldCB0aCtcblwKCTx0aD4kezF9PC90aD5cblwKCXRoKyR7Mn1cblwKc25pcHBldCB0aGVhZFxuXAoJPHRoZWFkPlxuXAoJCSR7MX1cblwKCTwvdGhlYWQ+XG5cCnNuaXBwZXQgdGltZVxuXAoJPHRpbWUgZGF0ZXRpbWU9XCIkezF9XCIgcHViZGF0ZT1cIiR7MjokMX0+JHszOiQxfTwvdGltZT5cblwKc25pcHBldCB0aXRsZVxuXAoJPHRpdGxlPiR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgnJywgJ1BhZ2UgVGl0bGUnKSwgJ14uJywgJ1xcdSYnLCAnJylgfTwvdGl0bGU+XG5cCnNuaXBwZXQgdHJcblwKCTx0cj5cblwKCQkkezF9XG5cCgk8L3RyPlxuXApzbmlwcGV0IHRyK1xuXAoJPHRyPlxuXAoJCTx0ZD4kezF9PC90ZD5cblwKCQl0ZCskezJ9XG5cCgk8L3RyPlxuXApzbmlwcGV0IHRyYWNrXG5cCgk8dHJhY2sgc3JjPVwiJHsxfVwiIHNyY2xhbmc9XCIkezJ9XCIgbGFiZWw9XCIkezN9XCIgZGVmYXVsdD1cIiR7NDpkZWZhdWx0fT4kezV9PC90cmFjaz4kezZ9XG5cCnNuaXBwZXQgdWxcblwKCTx1bD5cblwKCQkkezF9XG5cCgk8L3VsPlxuXApzbmlwcGV0IHVsLlxuXAoJPHVsIGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvdWw+XG5cCnNuaXBwZXQgdWwjXG5cCgk8dWwgaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC91bD5cblwKc25pcHBldCB1bCtcblwKCTx1bD5cblwKCQk8bGk+JHsxfTwvbGk+XG5cCgkJbGkrJHsyfVxuXAoJPC91bD5cblwKc25pcHBldCB2YXJcblwKCTx2YXI+JHsxfTwvdmFyPlxuXApzbmlwcGV0IHZpZGVvXG5cCgk8dmlkZW8gc3JjPVwiJHsxfSBoZWlnaHQ9XCIkezJ9XCIgd2lkdGg9XCIkezN9XCIgcHJlbG9hZD1cIiR7NTpub25lfVwiIGF1dG9wbGF5PVwiJHs2OmF1dG9wbGF5fT4kezd9PC92aWRlbz4kezh9XG5cCnNuaXBwZXQgd2JyXG5cCgk8d2JyIC8+JHsxfVxuXAoiOwpleHBvcnRzLnNjb3BlID0gImh0bWwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9odG1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/html_completions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaHRtbF9jb21wbGV0aW9ucyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXt0LnNuaXBwZXRUZXh0PSIiLHQuc2NvcGU9Imh0bWxfY29tcGxldGlvbnMifSk=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/html_elixir.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaHRtbF9lbGl4aXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJodG1sX2VsaXhpciI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2h0bWxfZWxpeGlyIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/html_ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaHRtbF9ydWJ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiaHRtbF9ydWJ5IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvaHRtbF9ydWJ5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/ini.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaW5pIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiaW5pIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvaW5pIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/io.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvaW8iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldHMgPSBbCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiYXNzZXJ0RXF1YWxzKCR7MTpleHBlY3RlZH0sICR7MjpleHByfSkiLAogICAgICAgICJuYW1lIjogImFzc2VydEVxdWFscyIsCiAgICAgICAgInNjb3BlIjogImlvIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJhZSIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiJHsxOiR7MjpuZXdWYWx1ZX0gOj0gJHszOk9iamVjdH0gfWNsb25lIGRvKFxuXHQkMFxuKSIsCiAgICAgICAgIm5hbWUiOiAiY2xvbmUgZG8iLAogICAgICAgICJzY29wZSI6ICJpbyIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiY2RvIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJkb2NTbG90KFwiJHsxOnNsb3ROYW1lfVwiLCBcIiR7Mjpkb2N1bWVudGF0aW9ufVwiKSIsCiAgICAgICAgIm5hbWUiOiAiZG9jU2xvdCIsCiAgICAgICAgInNjb3BlIjogImlvIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJkcyIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiKCR7MTpoZWFkZXIsfVxuXHQkezI6Ym9keX1cbikkMCIsCiAgICAgICAgImtleUVxdWl2YWxlbnQiOiAiQCgiLAogICAgICAgICJuYW1lIjogIkluZGVudGVkIEJyYWNrZXRlZCBMaW5lIiwKICAgICAgICAic2NvcGUiOiAiaW8iLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIigiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIlxuXHQkMFxuIiwKICAgICAgICAia2V5RXF1aXZhbGVudCI6ICJcciIsCiAgICAgICAgIm5hbWUiOiAiU3BlY2lhbDogUmV0dXJuIEluc2lkZSBFbXB0eSBQYXJlbnRoZXNpcyIsCiAgICAgICAgInNjb3BlIjogImlvIG1ldGEuZW1wdHktcGFyZW50aGVzaXMuaW8sIGlvIG1ldGEuY29tbWEtcGFyZW50aGVzaXMuaW8iCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIiR7MTptZXRob2ROYW1lfSA6PSBtZXRob2QoJHsyOmFyZ3MsfVxuXHQkMFxuKSIsCiAgICAgICAgIm5hbWUiOiAibWV0aG9kIiwKICAgICAgICAic2NvcGUiOiAiaW8iLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIm0iCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIm5ld1Nsb3QoXCIkezE6c2xvdE5hbWV9XCIsICR7MjpkZWZhdWx0VmFsdWV9LCBcIiR7Mzpkb2NTdHJpbmd9XCIpJDAiLAogICAgICAgICJuYW1lIjogIm5ld1Nsb3QiLAogICAgICAgICJzY29wZSI6ICJpbyIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAibnMiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIiR7MTpuYW1lfSA6PSBPYmplY3QgY2xvbmUgZG8oXG5cdCQwXG4pIiwKICAgICAgICAibmFtZSI6ICJPYmplY3QgY2xvbmUgZG8iLAogICAgICAgICJzY29wZSI6ICJpbyIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAib2NkbyIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAidGVzdCR7MTpTb21lRmVhdHVyZX0gOj0gbWV0aG9kKFxuXHQkMFxuKSIsCiAgICAgICAgIm5hbWUiOiAidGVzdE1ldGhvZCIsCiAgICAgICAgInNjb3BlIjogImlvIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJ0cyIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiJHsxOlNvbWV0aGluZ31UZXN0IDo9ICR7MjpVbml0VGVzdH0gY2xvbmUgZG8oXG5cdCQwXG4pIiwKICAgICAgICAibmFtZSI6ICJVbml0VGVzdCIsCiAgICAgICAgInNjb3BlIjogImlvIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJ1dCIKICAgIH0KXTsKZXhwb3J0cy5zY29wZSA9ICJpbyI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2lvIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/jack.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvamFjayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImphY2siOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9qYWNrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/jade.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvamFkZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImphZGUiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9qYWRlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/java.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvamF2YSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIyBBY2Nlc3MgTW9kaWZpZXJzXG5cCnNuaXBwZXQgcG9cblwKCXByb3RlY3RlZFxuXApzbmlwcGV0IHB1XG5cCglwdWJsaWNcblwKc25pcHBldCBwclxuXAoJcHJpdmF0ZVxuXAojI1xuXAojIyBBbm5vdGF0aW9uc1xuXApzbmlwcGV0IGJlZm9yZVxuXAoJQEJlZm9yZVxuXAoJc3RhdGljIHZvaWQgJHsxOmludGVyY2VwdH0oJHsyOmFyZ3N9KSB7ICR7M30gfVxuXApzbmlwcGV0IG1tXG5cCglATWFueVRvTWFueVxuXAoJJHsxfVxuXApzbmlwcGV0IG1vXG5cCglATWFueVRvT25lXG5cCgkkezF9XG5cCnNuaXBwZXQgb21cblwKCUBPbmVUb01hbnkkezE6KGNhc2NhZGU9Q2FzY2FkZVR5cGUuQUxMKX1cblwKCSR7Mn1cblwKc25pcHBldCBvb1xuXAoJQE9uZVRvT25lXG5cCgkkezF9XG5cCiMjXG5cCiMjIEJhc2ljIEphdmEgcGFja2FnZXMgYW5kIGltcG9ydFxuXApzbmlwcGV0IGltXG5cCglpbXBvcnRcblwKc25pcHBldCBqLmJcblwKCWphdmEuYmVhbnMuXG5cCnNuaXBwZXQgai5pXG5cCglqYXZhLmlvLlxuXApzbmlwcGV0IGoubVxuXAoJamF2YS5tYXRoLlxuXApzbmlwcGV0IGoublxuXAoJamF2YS5uZXQuXG5cCnNuaXBwZXQgai51XG5cCglqYXZhLnV0aWwuXG5cCiMjXG5cCiMjIENsYXNzXG5cCnNuaXBwZXQgY2xcblwKCWNsYXNzICR7MTpgRmlsZW5hbWUoXCJcIiwgXCJ1bnRpdGxlZFwiKWB9ICR7Mn1cblwKc25pcHBldCBpblxuXAoJaW50ZXJmYWNlICR7MTpgRmlsZW5hbWUoXCJcIiwgXCJ1bnRpdGxlZFwiKWB9ICR7MjpleHRlbmRzIFBhcmVudH0kezN9XG5cCnNuaXBwZXQgdGNcblwKCXB1YmxpYyBjbGFzcyAkezE6YEZpbGVuYW1lKClgfSBleHRlbmRzICR7MjpUZXN0Q2FzZX1cblwKIyNcblwKIyMgQ2xhc3MgRW5oYW5jZW1lbnRzXG5cCnNuaXBwZXQgZXh0XG5cCglleHRlbmRzIFxuXApzbmlwcGV0IGltcFxuXAoJaW1wbGVtZW50c1xuXAojI1xuXAojIyBDb21tZW50c1xuXApzbmlwcGV0IC8qXG5cCgkvKlxuXAoJICogJHsxfVxuXAoJICovXG5cCiMjXG5cCiMjIENvbnN0YW50c1xuXApzbmlwcGV0IGNvXG5cCglzdGF0aWMgcHVibGljIGZpbmFsICR7MTpTdHJpbmd9ICR7Mjp2YXJ9ID0gJHszfTskezR9XG5cCnNuaXBwZXQgY29zXG5cCglzdGF0aWMgcHVibGljIGZpbmFsIFN0cmluZyAkezE6dmFyfSA9IFwiJHsyfVwiOyR7M31cblwKIyNcblwKIyMgQ29udHJvbCBTdGF0ZW1lbnRzXG5cCnNuaXBwZXQgY2FzZVxuXAoJY2FzZSAkezF9OlxuXAoJCSR7Mn1cblwKc25pcHBldCBkZWZcblwKCWRlZmF1bHQ6XG5cCgkJJHsyfVxuXApzbmlwcGV0IGVsXG5cCgllbHNlXG5cCnNuaXBwZXQgZWxpZlxuXAoJZWxzZSBpZiAoJHsxfSkgJHsyfVxuXApzbmlwcGV0IGlmXG5cCglpZiAoJHsxfSkgJHsyfVxuXApzbmlwcGV0IHN3XG5cCglzd2l0Y2ggKCR7MX0pIHtcblwKCQkkezJ9XG5cCgl9XG5cCiMjXG5cCiMjIENyZWF0ZSBhIE1ldGhvZFxuXApzbmlwcGV0IG1cblwKCSR7MTp2b2lkfSAkezI6bWV0aG9kfSgkezN9KSAkezQ6dGhyb3dzIH0kezV9XG5cCiMjXG5cCiMjIENyZWF0ZSBhIFZhcmlhYmxlXG5cCnNuaXBwZXQgdlxuXAoJJHsxOlN0cmluZ30gJHsyOnZhcn0kezM6ID0gbnVsbH0kezR9OyR7NX1cblwKIyNcblwKIyMgRW5oYW5jZW1lbnRzIHRvIE1ldGhvZHMsIHZhcmlhYmxlcywgY2xhc3NlcywgZXRjLlxuXApzbmlwcGV0IGFiXG5cCglhYnN0cmFjdFxuXApzbmlwcGV0IGZpXG5cCglmaW5hbFxuXApzbmlwcGV0IHN0XG5cCglzdGF0aWNcblwKc25pcHBldCBzeVxuXAoJc3luY2hyb25pemVkXG5cCiMjXG5cCiMjIEVycm9yIE1ldGhvZHNcblwKc25pcHBldCBlcnJcblwKCVN5c3RlbS5lcnIucHJpbnQoXCIkezE6TWVzc2FnZX1cIik7XG5cCnNuaXBwZXQgZXJyZlxuXAoJU3lzdGVtLmVyci5wcmludGYoXCIkezE6TWVzc2FnZX1cIiwgJHsyOmV4Y2VwdGlvbn0pO1xuXApzbmlwcGV0IGVycmxuXG5cCglTeXN0ZW0uZXJyLnByaW50bG4oXCIkezE6TWVzc2FnZX1cIik7XG5cCiMjXG5cCiMjIEV4Y2VwdGlvbiBIYW5kbGluZ1xuXApzbmlwcGV0IGFzXG5cCglhc3NlcnQgJHsxOnRlc3R9IDogXCIkezI6RmFpbHVyZSBtZXNzYWdlfVwiOyR7M31cblwKc25pcHBldCBjYVxuXAoJY2F0Y2goJHsxOkV4Y2VwdGlvbn0gJHsyOmV9KSAkezN9XG5cCnNuaXBwZXQgdGhyXG5cCgl0aHJvd1xuXApzbmlwcGV0IHRoc1xuXAoJdGhyb3dzXG5cCnNuaXBwZXQgdHJ5XG5cCgl0cnkge1xuXAoJCSR7M31cblwKCX0gY2F0Y2goJHsxOkV4Y2VwdGlvbn0gJHsyOmV9KSB7XG5cCgl9XG5cCnNuaXBwZXQgdHJ5ZlxuXAoJdHJ5IHtcblwKCQkkezN9XG5cCgl9IGNhdGNoKCR7MTpFeGNlcHRpb259ICR7MjplfSkge1xuXAoJfSBmaW5hbGx5IHtcblwKCX1cblwKIyNcblwKIyMgRmluZCBNZXRob2RzXG5cCnNuaXBwZXQgZmluZGFsbFxuXAoJTGlzdDwkezE6bGlzdE5hbWV9PiAkezI6aXRlbXN9ID0gJHsxfS5maW5kQWxsKCk7JHszfVxuXApzbmlwcGV0IGZpbmRieWlkXG5cCgkkezE6dmFyfSAkezI6aXRlbX0gPSAkezF9LmZpbmRCeUlkKCR7M30pOyR7NH1cblwKIyNcblwKIyMgSmF2YWRvY3NcblwKc25pcHBldCAvKipcblwKCS8qKlxuXAoJICogJHsxfVxuXAoJICovXG5cCnNuaXBwZXQgQGF1XG5cCglAYXV0aG9yIGBzeXN0ZW0oXCJncmVwIFxcYGlkIC11blxcYCAvZXRjL3Bhc3N3ZCB8IGN1dCAtZCBcXFwiOlxcXCIgLWY1IHwgY3V0IC1kIFxcXCIsXFxcIiAtZjFcIilgXG5cCnNuaXBwZXQgQGJyXG5cCglAYnJpZWYgJHsxOkRlc2NyaXB0aW9ufVxuXApzbmlwcGV0IEBmaVxuXAoJQGZpbGUgJHsxOmBGaWxlbmFtZSgpYH0uamF2YVxuXApzbmlwcGV0IEBwYVxuXAoJQHBhcmFtICR7MTpwYXJhbX1cblwKc25pcHBldCBAcmVcblwKCUByZXR1cm4gJHsxOnBhcmFtfVxuXAojI1xuXAojIyBMb2dnZXIgTWV0aG9kc1xuXApzbmlwcGV0IGRlYnVnXG5cCglMb2dnZXIuZGVidWcoJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IGVycm9yXG5cCglMb2dnZXIuZXJyb3IoJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IGluZm9cblwKCUxvZ2dlci5pbmZvKCR7MTpwYXJhbX0pOyR7Mn1cblwKc25pcHBldCB3YXJuXG5cCglMb2dnZXIud2FybigkezE6cGFyYW19KTskezJ9XG5cCiMjXG5cCiMjIExvb3BzXG5cCnNuaXBwZXQgZW5mb3JcblwKCWZvciAoJHsxfSA6ICR7Mn0pICR7M31cblwKc25pcHBldCBmb3JcblwKCWZvciAoJHsxfTsgJHsyfTsgJHszfSkgJHs0fVxuXApzbmlwcGV0IHdoXG5cCgl3aGlsZSAoJHsxfSkgJHsyfVxuXAojI1xuXAojIyBNYWluIG1ldGhvZFxuXApzbmlwcGV0IG1haW5cblwKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7XG5cCgkJJHsxOi8qIGNvZGUgKi99XG5cCgl9XG5cCiMjXG5cCiMjIFByaW50IE1ldGhvZHNcblwKc25pcHBldCBwcmludFxuXAoJU3lzdGVtLm91dC5wcmludChcIiR7MTpNZXNzYWdlfVwiKTtcblwKc25pcHBldCBwcmludGZcblwKCVN5c3RlbS5vdXQucHJpbnRmKFwiJHsxOk1lc3NhZ2V9XCIsICR7MjphcmdzfSk7XG5cCnNuaXBwZXQgcHJpbnRsblxuXAoJU3lzdGVtLm91dC5wcmludGxuKCR7MX0pO1xuXAojI1xuXAojIyBSZW5kZXIgTWV0aG9kc1xuXApzbmlwcGV0IHJlblxuXAoJcmVuZGVyKCR7MTpwYXJhbX0pOyR7Mn1cblwKc25pcHBldCByZW5hXG5cCglyZW5kZXJBcmdzLnB1dChcIiR7MX1cIiwgJHsyfSk7JHszfVxuXApzbmlwcGV0IHJlbmJcblwKCXJlbmRlckJpbmFyeSgkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgcmVualxuXAoJcmVuZGVySlNPTigkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgcmVueFxuXAoJcmVuZGVyWG1sKCR7MTpwYXJhbX0pOyR7Mn1cblwKIyNcblwKIyMgU2V0dGVyIGFuZCBHZXR0ZXIgTWV0aG9kc1xuXApzbmlwcGV0IHNldFxuXAoJJHsxOnB1YmxpY30gdm9pZCBzZXQkezM6fSgkezI6U3RyaW5nfSAkezQ6fSl7XG5cCgkJdGhpcy4kNCA9ICQ0O1xuXAoJfVxuXApzbmlwcGV0IGdldFxuXAoJJHsxOnB1YmxpY30gJHsyOlN0cmluZ30gZ2V0JHszOn0oKXtcblwKCQlyZXR1cm4gdGhpcy4kezQ6fTtcblwKCX1cblwKIyNcblwKIyMgVGVybWluYXRlIE1ldGhvZHMgb3IgTG9vcHNcblwKc25pcHBldCByZVxuXAoJcmV0dXJuXG5cCnNuaXBwZXQgYnJcblwKCWJyZWFrO1xuXAojI1xuXAojIyBUZXN0IE1ldGhvZHNcblwKc25pcHBldCB0XG5cCglwdWJsaWMgdm9pZCB0ZXN0JHsxOk5hbWV9KCkgdGhyb3dzIEV4Y2VwdGlvbiB7XG5cCgkJJHsyfVxuXAoJfVxuXApzbmlwcGV0IHRlc3RcblwKCUBUZXN0XG5cCglwdWJsaWMgdm9pZCB0ZXN0JHsxOk5hbWV9KCkgdGhyb3dzIEV4Y2VwdGlvbiB7XG5cCgkJJHsyfVxuXAoJfVxuXAojI1xuXAojIyBVdGlsc1xuXApzbmlwcGV0IFNjXG5cCglTY2FubmVyXG5cCiMjXG5cCiMjIE1pc2NlbGxhbmVvdXNcblwKc25pcHBldCBhY3Rpb25cblwKCXB1YmxpYyBzdGF0aWMgdm9pZCAkezE6aW5kZXh9KCR7MjphcmdzfSkgeyAkezN9IH1cblwKc25pcHBldCBybmZcblwKCW5vdEZvdW5kKCR7MTpwYXJhbX0pOyR7Mn1cblwKc25pcHBldCBybmZpblxuXAoJbm90Rm91bmRJZk51bGwoJHsxOnBhcmFtfSk7JHsyfVxuXApzbmlwcGV0IHJyXG5cCglyZWRpcmVjdCgkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgcnVcblwKCXVuYXV0aG9yaXplZCgkezE6cGFyYW19KTskezJ9XG5cCnNuaXBwZXQgdW5sZXNzXG5cCgkodW5sZXNzPSR7MTpwYXJhbX0pOyR7Mn1cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJqYXZhIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvamF2YSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvamF2YXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIFByb3RvdHlwZVxuXApzbmlwcGV0IHByb3RvXG5cCgkkezE6Y2xhc3NfbmFtZX0ucHJvdG90eXBlLiR7MjptZXRob2RfbmFtZX0gPSBmdW5jdGlvbigkezM6Zmlyc3RfYXJndW1lbnR9KSB7XG5cCgkJJHs0Oi8vIGJvZHkuLi59XG5cCgl9O1xuXAojIEZ1bmN0aW9uXG5cCnNuaXBwZXQgZnVuXG5cCglmdW5jdGlvbiAkezE/OmZ1bmN0aW9uX25hbWV9KCR7Mjphcmd1bWVudH0pIHtcblwKCQkkezM6Ly8gYm9keS4uLn1cblwKCX1cblwKIyBBbm9ueW1vdXMgRnVuY3Rpb25cblwKcmVnZXggLygoPSlcXHMqfCg6KVxccyp8KFxcKCl8XFxiKS9mLyhcXCkpPy9cblwKc25pcHBldCBmXG5cCglmdW5jdGlvbiR7TTE/OiAkezE6ZnVuY3Rpb25OYW1lfX0oJDIpIHtcblwKCQkkezA6JFRNX1NFTEVDVEVEX1RFWFR9XG5cCgl9JHtNMj87fSR7TTM/LH0ke000Pyl9XG5cCiMgSW1tZWRpYXRlIGZ1bmN0aW9uXG5cCnRyaWdnZXIgXFwoP2ZcXChcblwKZW5kVHJpZ2dlciBcXCk/XG5cCnNuaXBwZXQgZihcblwKCShmdW5jdGlvbigkezF9KSB7XG5cCgkJJHswOiR7VE1fU0VMRUNURURfVEVYVDovKiBjb2RlICovfX1cblwKCX0oJHsxfSkpO1xuXAojIGlmXG5cCnNuaXBwZXQgaWZcblwKCWlmICgkezE6dHJ1ZX0pIHtcblwKCQkkezB9XG5cCgl9XG5cCiMgaWYgLi4uIGVsc2VcblwKc25pcHBldCBpZmVcblwKCWlmICgkezE6dHJ1ZX0pIHtcblwKCQkkezJ9XG5cCgl9IGVsc2Uge1xuXAoJCSR7MH1cblwKCX1cblwKIyB0ZXJ0aWFyeSBjb25kaXRpb25hbFxuXApzbmlwcGV0IHRlclxuXAoJJHsxOi8qIGNvbmRpdGlvbiAqL30gPyAkezI6YX0gOiAkezM6Yn1cblwKIyBzd2l0Y2hcblwKc25pcHBldCBzd2l0Y2hcblwKCXN3aXRjaCAoJHsxOmV4cHJlc3Npb259KSB7XG5cCgkJY2FzZSAnJHszOmNhc2V9JzpcblwKCQkJJHs0Oi8vIGNvZGV9XG5cCgkJCWJyZWFrO1xuXAoJCSR7NX1cblwKCQlkZWZhdWx0OlxuXAoJCQkkezI6Ly8gY29kZX1cblwKCX1cblwKIyBjYXNlXG5cCnNuaXBwZXQgY2FzZVxuXAoJY2FzZSAnJHsxOmNhc2V9JzpcblwKCQkkezI6Ly8gY29kZX1cblwKCQlicmVhaztcblwKCSR7M31cblwKXG5cCiMgd2hpbGUgKC4uLikgey4uLn1cblwKc25pcHBldCB3aFxuXAoJd2hpbGUgKCR7MTovKiBjb25kaXRpb24gKi99KSB7XG5cCgkJJHswOi8qIGNvZGUgKi99XG5cCgl9XG5cCiMgdHJ5XG5cCnNuaXBwZXQgdHJ5XG5cCgl0cnkge1xuXAoJCSR7MDovKiBjb2RlICovfVxuXAoJfSBjYXRjaCAoZSkge31cblwKIyBkby4uLndoaWxlXG5cCnNuaXBwZXQgZG9cblwKCWRvIHtcblwKCQkkezI6LyogY29kZSAqL31cblwKCX0gd2hpbGUgKCR7MTovKiBjb25kaXRpb24gKi99KTtcblwKIyBPYmplY3QgTWV0aG9kXG5cCnNuaXBwZXQgOmZcblwKcmVnZXggLyhbLHtbXSl8XlxccyovOmYvXG5cCgkkezE6bWV0aG9kX25hbWV9OiBmdW5jdGlvbigkezI6YXR0cmlidXRlfSkge1xuXAoJCSR7MH1cblwKCX0kezM6LH1cblwKIyBzZXRUaW1lb3V0IGZ1bmN0aW9uXG5cCnNuaXBwZXQgc2V0VGltZW91dFxuXApyZWdleCAvXFxiL3N0fHRpbWVvdXR8c2V0VGltZW8/dT90Py9cblwKCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7JHszOiRUTV9TRUxFQ1RFRF9URVhUfX0sICR7MToxMH0pO1xuXAojIEdldCBFbGVtZW50c1xuXApzbmlwcGV0IGdldHRcblwKCWdldEVsZW1lbnRzQnkkezE6VGFnTmFtZX0oJyR7Mn0nKSR7M31cblwKIyBHZXQgRWxlbWVudFxuXApzbmlwcGV0IGdldFxuXAoJZ2V0RWxlbWVudEJ5JHsxOklkfSgnJHsyfScpJHszfVxuXAojIGNvbnNvbGUubG9nIChGaXJlYnVnKVxuXApzbmlwcGV0IGNsXG5cCgljb25zb2xlLmxvZygkezF9KTtcblwKIyByZXR1cm5cblwKc25pcHBldCByZXRcblwKCXJldHVybiAkezE6cmVzdWx0fVxuXAojIGZvciAocHJvcGVydHkgaW4gb2JqZWN0ICkgeyAuLi4gfVxuXApzbmlwcGV0IGZvcmlcblwKCWZvciAodmFyICR7MTpwcm9wfSBpbiAkezI6VGhpbmdzfSkge1xuXAoJCSR7MDokMlskMV19XG5cCgl9XG5cCiMgaGFzT3duUHJvcGVydHlcblwKc25pcHBldCBoYXNcblwKCWhhc093blByb3BlcnR5KCR7MX0pXG5cCiMgZG9jc3RyaW5nXG5cCnNuaXBwZXQgLyoqXG5cCgkvKipcblwKCSAqICR7MTpkZXNjcmlwdGlvbn1cblwKCSAqXG5cCgkgKi9cblwKc25pcHBldCBAcGFyXG5cCnJlZ2V4IC9eXFxzKlxcKlxccyovQChwYXJhP20/KT8vXG5cCglAcGFyYW0geyR7MTp0eXBlfX0gJHsyOm5hbWV9ICR7MzpkZXNjcmlwdGlvbn1cblwKc25pcHBldCBAcmV0XG5cCglAcmV0dXJuIHskezE6dHlwZX19ICR7MjpkZXNjcmlwdGlvbn1cblwKIyBKU09OLnBhcnNlXG5cCnNuaXBwZXQganNvbnBcblwKCUpTT04ucGFyc2UoJHsxOmpzdHJ9KTtcblwKIyBKU09OLnN0cmluZ2lmeVxuXApzbmlwcGV0IGpzb25zXG5cCglKU09OLnN0cmluZ2lmeSgkezE6b2JqZWN0fSk7XG5cCiMgc2VsZi1kZWZpbmluZyBmdW5jdGlvblxuXApzbmlwcGV0IHNkZlxuXAoJdmFyICR7MTpmdW5jdGlvbl9uYW1lfSA9IGZ1bmN0aW9uKCR7Mjphcmd1bWVudH0pIHtcblwKCQkkezM6Ly8gaW5pdGlhbCBjb2RlIC4uLn1cblwKXG5cCgkJJDEgPSBmdW5jdGlvbigkMikge1xuXAoJCQkkezQ6Ly8gbWFpbiBjb2RlfVxuXAoJCX07XG5cCgl9XG5cCiMgc2luZ2xldG9uXG5cCnNuaXBwZXQgc2luZ1xuXAoJZnVuY3Rpb24gJHsxOlNpbmdsZXRvbn0gKCR7Mjphcmd1bWVudH0pIHtcblwKCQkvLyB0aGUgY2FjaGVkIGluc3RhbmNlXG5cCgkJdmFyIGluc3RhbmNlO1xuXApcblwKCQkvLyByZXdyaXRlIHRoZSBjb25zdHJ1Y3RvclxuXAoJCSQxID0gZnVuY3Rpb24gJDEoJDIpIHtcblwKCQkJcmV0dXJuIGluc3RhbmNlO1xuXAoJCX07XG5cCgkJXG5cCgkJLy8gY2Fycnkgb3ZlciB0aGUgcHJvdG90eXBlIHByb3BlcnRpZXNcblwKCQkkMS5wcm90b3R5cGUgPSB0aGlzO1xuXApcblwKCQkvLyB0aGUgaW5zdGFuY2VcblwKCQlpbnN0YW5jZSA9IG5ldyAkMSgpO1xuXApcblwKCQkvLyByZXNldCB0aGUgY29uc3RydWN0b3IgcG9pbnRlclxuXAoJCWluc3RhbmNlLmNvbnN0cnVjdG9yID0gJDE7XG5cClxuXAoJCSR7MzovLyBjb2RlIC4uLn1cblwKXG5cCgkJcmV0dXJuIGluc3RhbmNlO1xuXAoJfVxuXAojIGNsYXNzXG5cCnNuaXBwZXQgY2xhc3NcblwKcmVnZXggL15cXHMqL2NsYXN7MCwyfS9cblwKCXZhciAkezE6Y2xhc3N9ID0gZnVuY3Rpb24oJHsyMH0pIHtcblwKCQkkNDAkMFxuXAoJfTtcblwKCVxuXAoJKGZ1bmN0aW9uKCkge1xuXAoJCSR7NjA6dGhpcy5wcm9wID0gXCJcIn1cblwKCX0pLmNhbGwoJHsxOmNsYXNzfS5wcm90b3R5cGUpO1xuXAoJXG5cCglleHBvcnRzLiR7MTpjbGFzc30gPSAkezE6Y2xhc3N9O1xuXAojIFxuXApzbmlwcGV0IGZvci1cblwKCWZvciAodmFyICR7MTppfSA9ICR7MjpUaGluZ3N9Lmxlbmd0aDsgJHsxOml9LS07ICkge1xuXAoJCSR7MDokezI6VGhpbmdzfVskezE6aX1dO31cblwKCX1cblwKIyBmb3IgKC4uLikgey4uLn1cblwKc25pcHBldCBmb3JcblwKCWZvciAodmFyICR7MTppfSA9IDA7ICQxIDwgJHsyOlRoaW5nc30ubGVuZ3RoOyAkMSsrKSB7XG5cCgkJJHszOiQyWyQxXX0kMFxuXAoJfVxuXAojIGZvciAoLi4uKSB7Li4ufSAoSW1wcm92ZWQgTmF0aXZlIEZvci1Mb29wKVxuXApzbmlwcGV0IGZvcnJcblwKCWZvciAodmFyICR7MTppfSA9ICR7MjpUaGluZ3N9Lmxlbmd0aCAtIDE7ICQxID49IDA7ICQxLS0pIHtcblwKCQkkezM6JDJbJDFdfSQwXG5cCgl9XG5cClxuXApcblwKI21vZHVsZXNcblwKc25pcHBldCBkZWZcblwKCWRlZmluZShmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblwKCVwidXNlIHN0cmljdFwiO1xuXAoJdmFyICR7MS8uKlxcLy8vfSA9IHJlcXVpcmUoXCIkezF9XCIpO1xuXAoJXG5cCgkkVE1fU0VMRUNURURfVEVYVFxuXAoJfSk7XG5cCnNuaXBwZXQgcmVxXG5cCmd1YXJkIF5cXHMqXG5cCgl2YXIgJHsxLy4qXFwvLy99ID0gcmVxdWlyZShcIiR7MX1cIik7XG5cCgkkMFxuXApzbmlwcGV0IHJlcXVcblwKZ3VhcmQgXlxccypcblwKCXZhciAkezEvLipcXC8oLikvXFx1JDEvfSA9IHJlcXVpcmUoXCIkezF9XCIpLiR7MS8uKlxcLyguKS9cXHUkMS99O1xuXAoJJDBcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJqYXZhc2NyaXB0IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvamF2YXNjcmlwdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/json.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvanNvbiIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImpzb24iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9qc29uIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/jsoniq.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvanNvbmlxIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgZm9yXG5cCglmb3IgJCR7MTppdGVtfSBpbiAkezI6ZXhwcn1cblwKc25pcHBldCByZXR1cm5cblwKCXJldHVybiAkezE6ZXhwcn1cblwKc25pcHBldCBpbXBvcnRcblwKCWltcG9ydCBtb2R1bGUgbmFtZXNwYWNlICR7MTpuc30gPSBcIiR7MjpodHRwOi8vd3d3LmV4YW1wbGUuY29tL31cIjtcblwKc25pcHBldCBzb21lXG5cCglzb21lICQkezE6dmFybmFtZX0gaW4gJHsyOmV4cHJ9IHNhdGlzZmllcyAkezM6ZXhwcn1cblwKc25pcHBldCBldmVyeVxuXAoJZXZlcnkgJCR7MTp2YXJuYW1lfSBpbiAkezI6ZXhwcn0gc2F0aXNmaWVzICR7MzpleHByfVxuXApzbmlwcGV0IGlmXG5cCglpZigkezE6dHJ1ZX0pIHRoZW4gJHsyOmV4cHJ9IGVsc2UgJHszOnRydWV9XG5cCnNuaXBwZXQgc3dpdGNoXG5cCglzd2l0Y2goJHsxOlwiZm9vXCJ9KVxuXAoJY2FzZSAkezI6XCJmb29cIn1cblwKCXJldHVybiAkezM6dHJ1ZX1cblwKCWRlZmF1bHQgcmV0dXJuICR7NDpmYWxzZX1cblwKc25pcHBldCB0cnlcblwKCXRyeSB7ICR7MTpleHByfSB9IGNhdGNoICR7MjoqfSB7ICR7MzpleHByfSB9XG5cCnNuaXBwZXQgdHVtYmxpbmdcblwKCWZvciB0dW1ibGluZyB3aW5kb3cgJCR7MTp2YXJuYW1lfSBpbiAkezI6ZXhwcn1cblwKCXN0YXJ0IGF0ICQkezM6c3RhcnR9IHdoZW4gJHs0OmV4cHJ9XG5cCgllbmQgYXQgJCR7NTplbmR9IHdoZW4gJHs2OmV4cHJ9XG5cCglyZXR1cm4gJHs3OmV4cHJ9XG5cCnNuaXBwZXQgc2xpZGluZ1xuXAoJZm9yIHNsaWRpbmcgd2luZG93ICQkezE6dmFybmFtZX0gaW4gJHsyOmV4cHJ9XG5cCglzdGFydCBhdCAkJHszOnN0YXJ0fSB3aGVuICR7NDpleHByfVxuXAoJZW5kIGF0ICQkezU6ZW5kfSB3aGVuICR7NjpleHByfVxuXAoJcmV0dXJuICR7NzpleHByfVxuXApzbmlwcGV0IGxldFxuXAoJbGV0ICQkezE6dmFybmFtZX0gOj0gJHsyOmV4cHJ9XG5cCnNuaXBwZXQgZ3JvdXBcblwKCWdyb3VwIGJ5ICQkezE6dmFybmFtZX0gOj0gJHsyOmV4cHJ9XG5cCnNuaXBwZXQgb3JkZXJcblwKCW9yZGVyIGJ5ICR7MTpleHByfSAkezI6ZGVzY2VuZGluZ31cblwKc25pcHBldCBzdGFibGVcblwKCXN0YWJsZSBvcmRlciBieSAkezE6ZXhwcn1cblwKc25pcHBldCBjb3VudFxuXAoJY291bnQgJCR7MTp2YXJuYW1lfVxuXApzbmlwcGV0IG9yZGVyZWRcblwKCW9yZGVyZWQgeyAkezE6ZXhwcn0gfVxuXApzbmlwcGV0IHVub3JkZXJlZFxuXAoJdW5vcmRlcmVkIHsgJHsxOmV4cHJ9IH1cblwKc25pcHBldCB0cmVhdCBcblwKCXRyZWF0IGFzICR7MTpleHByfVxuXApzbmlwcGV0IGNhc3RhYmxlXG5cCgljYXN0YWJsZSBhcyAkezE6YXRvbWljVHlwZX1cblwKc25pcHBldCBjYXN0XG5cCgljYXN0IGFzICR7MTphdG9taWNUeXBlfVxuXApzbmlwcGV0IHR5cGVzd2l0Y2hcblwKCXR5cGVzd2l0Y2goJHsxOmV4cHJ9KVxuXAoJY2FzZSAkezI6dHlwZX0gIHJldHVybiAkezM6ZXhwcn1cblwKCWRlZmF1bHQgcmV0dXJuICR7NDpleHByfVxuXApzbmlwcGV0IHZhclxuXAoJZGVjbGFyZSB2YXJpYWJsZSAkJHsxOnZhcm5hbWV9IDo9ICR7MjpleHByfTtcblwKc25pcHBldCBmblxuXAoJZGVjbGFyZSBmdW5jdGlvbiAkezE6bnN9OiR7MjpuYW1lfSgpe1xuXAoJJHszOmV4cHJ9XG5cCgl9O1xuXApzbmlwcGV0IG1vZHVsZVxuXAoJbW9kdWxlIG5hbWVzcGFjZSAkezE6bnN9ID0gXCIkezI6aHR0cDovL3d3dy5leGFtcGxlLmNvbX1cIjtcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJqc29uaXEiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9qc29uaXEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/jsp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvanNwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgQHBhZ2VcblwKCTwlQHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBwYWdlRW5jb2Rpbmc9XCJVVEYtOFwiJT5cblwKc25pcHBldCBqc3RsXG5cCgk8JUAgdGFnbGliIHVyaT1cImh0dHA6Ly9qYXZhLnN1bi5jb20vanNwL2pzdGwvY29yZVwiIHByZWZpeD1cImNcIiAlPlxuXAoJPCVAIHRhZ2xpYiB1cmk9XCJodHRwOi8vamF2YS5zdW4uY29tL2pzcC9qc3RsL2Z1bmN0aW9uc1wiIHByZWZpeD1cImZuXCIgJT5cblwKc25pcHBldCBqc3RsOmNcblwKCTwlQCB0YWdsaWIgdXJpPVwiaHR0cDovL2phdmEuc3VuLmNvbS9qc3AvanN0bC9jb3JlXCIgcHJlZml4PVwiY1wiICU+XG5cCnNuaXBwZXQganN0bDpmblxuXAoJPCVAIHRhZ2xpYiB1cmk9XCJodHRwOi8vamF2YS5zdW4uY29tL2pzcC9qc3RsL2Z1bmN0aW9uc1wiIHByZWZpeD1cImZuXCIgJT5cblwKc25pcHBldCBjcGF0aFxuXAoJJHtwYWdlQ29udGV4dC5yZXF1ZXN0LmNvbnRleHRQYXRofVxuXApzbmlwcGV0IGNvdXRcblwKCTxjOm91dCB2YWx1ZT1cIiR7MX1cIiBkZWZhdWx0PVwiJHsyfVwiIC8+XG5cCnNuaXBwZXQgY3NldFxuXAoJPGM6c2V0IHZhcj1cIiR7MX1cIiB2YWx1ZT1cIiR7Mn1cIiAvPlxuXApzbmlwcGV0IGNyZW1vdmVcblwKCTxjOnJlbW92ZSB2YXI9XCIkezF9XCIgc2NvcGU9XCIkezI6cGFnZX1cIiAvPlxuXApzbmlwcGV0IGNjYXRjaFxuXAoJPGM6Y2F0Y2ggdmFyPVwiJHsxfVwiIC8+XG5cCnNuaXBwZXQgY2lmXG5cCgk8YzppZiB0ZXN0PVwiJHskezF9fVwiPlxuXAoJCSR7Mn1cblwKCTwvYzppZj5cblwKc25pcHBldCBjY2hvb3NlXG5cCgk8YzpjaG9vc2U+XG5cCgkJJHsxfVxuXAoJPC9jOmNob29zZT5cblwKc25pcHBldCBjd2hlblxuXAoJPGM6d2hlbiB0ZXN0PVwiJHskezF9fVwiPlxuXAoJCSR7Mn1cblwKCTwvYzp3aGVuPlxuXApzbmlwcGV0IGNvdGhlclxuXAoJPGM6b3RoZXJ3aXNlPlxuXAoJCSR7MX1cblwKCTwvYzpvdGhlcndpc2U+XG5cCnNuaXBwZXQgY2ZvcmVcblwKCTxjOmZvckVhY2ggaXRlbXM9XCIkeyR7MX19XCIgdmFyPVwiJHsyfVwiIHZhclN0YXR1cz1cIiR7M31cIj5cblwKCQkkezQ6PGM6b3V0IHZhbHVlPVwiJDJcIiAvPn1cblwKCTwvYzpmb3JFYWNoPlxuXApzbmlwcGV0IGNmb3J0XG5cCgk8YzpzZXQgdmFyPVwiJHsxfVwiPiR7MjppdGVtMSxpdGVtMixpdGVtM308L2M6c2V0PlxuXAoJPGM6Zm9yVG9rZW5zIHZhcj1cIiR7M31cIiBpdGVtcz1cIiR7JDF9XCIgZGVsaW1zPVwiJHs0Oix9XCI+XG5cCgkJJHs1OjxjOm91dCB2YWx1ZT1cIiQzXCIgLz59XG5cCgk8L2M6Zm9yVG9rZW5zPlxuXApzbmlwcGV0IGNwYXJhbVxuXAoJPGM6cGFyYW0gbmFtZT1cIiR7MX1cIiB2YWx1ZT1cIiR7Mn1cIiAvPlxuXApzbmlwcGV0IGNwYXJhbStcblwKCTxjOnBhcmFtIG5hbWU9XCIkezF9XCIgdmFsdWU9XCIkezJ9XCIgLz5cblwKCWNwYXJhbSskezN9XG5cCnNuaXBwZXQgY2ltcG9ydFxuXAoJPGM6aW1wb3J0IHVybD1cIiR7MX1cIiAvPlxuXApzbmlwcGV0IGNpbXBvcnQrXG5cCgk8YzppbXBvcnQgdXJsPVwiJHsxfVwiPlxuXAoJCTxjOnBhcmFtIG5hbWU9XCIkezJ9XCIgdmFsdWU9XCIkezN9XCIgLz5cblwKCQljcGFyYW0rJHs0fVxuXAoJPC9jOmltcG9ydD5cblwKc25pcHBldCBjdXJsXG5cCgk8Yzp1cmwgdmFsdWU9XCIkezF9XCIgdmFyPVwiJHsyfVwiIC8+XG5cCgk8YSBocmVmPVwiJHskMn1cIj4kezN9PC9hPlxuXApzbmlwcGV0IGN1cmwrXG5cCgk8Yzp1cmwgdmFsdWU9XCIkezF9XCIgdmFyPVwiJHsyfVwiPlxuXAoJCTxjOnBhcmFtIG5hbWU9XCIkezR9XCIgdmFsdWU9XCIkezV9XCIgLz5cblwKCQljcGFyYW0rJHs2fVxuXAoJPC9jOnVybD5cblwKCTxhIGhyZWY9XCIkeyQyfVwiPiR7M308L2E+XG5cCnNuaXBwZXQgY3JlZGlyZWN0XG5cCgk8YzpyZWRpcmVjdCB1cmw9XCIkezF9XCIgLz5cblwKc25pcHBldCBjb250YWluc1xuXAoJJHtmbjpjb250YWlucygkezE6c3RyaW5nfSwgJHsyOnN1YnN0cn0pfVxuXApzbmlwcGV0IGNvbnRhaW5zOmlcblwKCSR7Zm46Y29udGFpbnNJZ25vcmVDYXNlKCR7MTpzdHJpbmd9LCAkezI6c3Vic3RyfSl9XG5cCnNuaXBwZXQgZW5kc3dpdGhcblwKCSR7Zm46ZW5kc1dpdGgoJHsxOnN0cmluZ30sICR7MjpzdWZmaXh9KX1cblwKc25pcHBldCBlc2NhcGVcblwKCSR7Zm46ZXNjYXBlWG1sKCR7MTpzdHJpbmd9KX1cblwKc25pcHBldCBpbmRleG9mXG5cCgkke2ZuOmluZGV4T2YoJHsxOnN0cmluZ30sICR7MjpzdWJzdHJ9KX1cblwKc25pcHBldCBqb2luXG5cCgkke2ZuOmpvaW4oJHsxOmNvbGxlY3Rpb259LCAkezI6ZGVsaW1zfSl9XG5cCnNuaXBwZXQgbGVuZ3RoXG5cCgkke2ZuOmxlbmd0aCgkezE6Y29sbGVjdGlvbl9vcl9zdHJpbmd9KX1cblwKc25pcHBldCByZXBsYWNlXG5cCgkke2ZuOnJlcGxhY2UoJHsxOnN0cmluZ30sICR7MjpzdWJzdHJ9LCAkezM6cmVwbGFjZX0pfVxuXApzbmlwcGV0IHNwbGl0XG5cCgkke2ZuOnNwbGl0KCR7MTpzdHJpbmd9LCAkezI6ZGVsaW1zfSl9XG5cCnNuaXBwZXQgc3RhcnRzd2l0aFxuXAoJJHtmbjpzdGFydHNXaXRoKCR7MTpzdHJpbmd9LCAkezI6cHJlZml4fSl9XG5cCnNuaXBwZXQgc3Vic3RyXG5cCgkke2ZuOnN1YnN0cmluZygkezE6c3RyaW5nfSwgJHsyOmJlZ2lufSwgJHszOmVuZH0pfVxuXApzbmlwcGV0IHN1YnN0cjphXG5cCgkke2ZuOnN1YnN0cmluZ0FmdGVyKCR7MTpzdHJpbmd9LCAkezI6c3Vic3RyfSl9XG5cCnNuaXBwZXQgc3Vic3RyOmJcblwKCSR7Zm46c3Vic3RyaW5nQmVmb3JlKCR7MTpzdHJpbmd9LCAkezI6c3Vic3RyfSl9XG5cCnNuaXBwZXQgbGNcblwKCSR7Zm46dG9Mb3dlckNhc2UoJHsxOnN0cmluZ30pfVxuXApzbmlwcGV0IHVjXG5cCgkke2ZuOnRvVXBwZXJDYXNlKCR7MTpzdHJpbmd9KX1cblwKc25pcHBldCB0cmltXG5cCgkke2ZuOnRyaW0oJHsxOnN0cmluZ30pfVxuXAoiOwpleHBvcnRzLnNjb3BlID0gImpzcCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2pzcCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/jssm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvanNzbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gIiI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2pzc20iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/jsx.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvanN4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAianN4IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvanN4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/julia.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvanVsaWEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJqdWxpYSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2p1bGlhIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/kotlin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMva290bGluIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMva290bGluIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/latex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbGF0ZXgiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJsYXRleCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2xhdGV4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/less.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbGVzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImxlc3MiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9sZXNzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/liquid.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbGlxdWlkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIlxuXAojIGxpcXVpZCBzcGVjaWZpYyBzbmlwcGV0c1xuXApzbmlwcGV0IGlmZVxuXAoJeyUgaWYgJHsxOmNvbmRpdGlvbn0gJX1cblwKXG5cCgl7JSBlbHNlICV9XG5cClxuXAoJeyUgZW5kaWYgJX1cblwKc25pcHBldCBpZlxuXAoJeyUgaWYgJHsxOmNvbmRpdGlvbn0gJX1cblwKCQlcblwKCXslIGVuZGlmICV9XG5cCnNuaXBwZXQgZm9yXG5cCgl7JSBmb3IgaW4gJHsxOml0ZXJhdG9yfSAlfVxuXApcblwKCXslIGVuZGZvciAlfVxuXApzbmlwcGV0IGNhcHR1cmVcblwKCXslIGNhcHR1cmUgJHsxfSAlfVxuXApcblwKCXslIGVuZGNhcHR1cmUgJX1cblwKc25pcHBldCBjb21tZW50XG5cCgl7JSBjb21tZW50ICV9XG5cCgkgICR7MTpjb21tZW50fVxuXAoJeyUgZW5kY29tbWVudCAlfVxuXApcblwKIyBJbmNsdWRlIGh0bWwuc25pcHBldHNcblwKIyBTb21lIHVzZWZ1bCBVbmljb2RlIGVudGl0aWVzXG5cCiMgTm9uLUJyZWFraW5nIFNwYWNlXG5cCnNuaXBwZXQgbmJzXG5cCgkmbmJzcDtcblwKIyDihpBcblwKc25pcHBldCBsZWZ0XG5cCgkmI3gyMTkwO1xuXAojIOKGklxuXApzbmlwcGV0IHJpZ2h0XG5cCgkmI3gyMTkyO1xuXAojIOKGkVxuXApzbmlwcGV0IHVwXG5cCgkmI3gyMTkxO1xuXAojIOKGk1xuXApzbmlwcGV0IGRvd25cblwKCSYjeDIxOTM7XG5cCiMg4oapXG5cCnNuaXBwZXQgcmV0dXJuXG5cCgkmI3gyMUE5O1xuXAojIOKHpFxuXApzbmlwcGV0IGJhY2t0YWJcblwKCSYjeDIxRTQ7XG5cCiMg4oelXG5cCnNuaXBwZXQgdGFiXG5cCgkmI3gyMUU1O1xuXAojIOKHp1xuXApzbmlwcGV0IHNoaWZ0XG5cCgkmI3gyMUU3O1xuXAojIOKMg1xuXApzbmlwcGV0IGN0cmxcblwKCSYjeDIzMDM7XG5cCiMg4oyFXG5cCnNuaXBwZXQgZW50ZXJcblwKCSYjeDIzMDU7XG5cCiMg4oyYXG5cCnNuaXBwZXQgY21kXG5cCgkmI3gyMzE4O1xuXAojIOKMpVxuXApzbmlwcGV0IG9wdGlvblxuXAoJJiN4MjMyNTtcblwKIyDijKZcblwKc25pcHBldCBkZWxldGVcblwKCSYjeDIzMjY7XG5cCiMg4oyrXG5cCnNuaXBwZXQgYmFja3NwYWNlXG5cCgkmI3gyMzJCO1xuXAojIOKOi1xuXApzbmlwcGV0IGVzY1xuXAoJJiN4MjM4QjtcblwKIyBHZW5lcmljIERvY3R5cGVcblwKc25pcHBldCBkb2N0eXBlIEhUTUwgNC4wMSBTdHJpY3RcblwKCTwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zdHJpY3QuZHRkXCI+XG5cCnNuaXBwZXQgZG9jdHlwZSBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsXG5cCgk8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZFwiPlxuXApzbmlwcGV0IGRvY3R5cGUgSFRNTCA1XG5cCgk8IURPQ1RZUEUgSFRNTD5cblwKc25pcHBldCBkb2N0eXBlIFhIVE1MIDEuMCBGcmFtZXNldFxuXAoJPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkXCI+XG5cCnNuaXBwZXQgZG9jdHlwZSBYSFRNTCAxLjAgU3RyaWN0XG5cCgk8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGRcIj5cblwKc25pcHBldCBkb2N0eXBlIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWxcblwKCTwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZFwiPlxuXApzbmlwcGV0IGRvY3R5cGUgWEhUTUwgMS4xXG5cCgk8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGRcIj5cblwKIyBIVE1MIERvY3R5cGUgNC4wMSBTdHJpY3RcblwKc25pcHBldCBkb2N0c1xuXAoJPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L3N0cmljdC5kdGRcIj5cblwKIyBIVE1MIERvY3R5cGUgNC4wMSBUcmFuc2l0aW9uYWxcblwKc25pcHBldCBkb2N0XG5cCgk8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZFwiPlxuXAojIEhUTUwgRG9jdHlwZSA1XG5cCnNuaXBwZXQgZG9jdDVcblwKCTwhRE9DVFlQRSBodG1sPlxuXAojIFhIVE1MIERvY3R5cGUgMS4wIEZyYW1lc2V0XG5cCnNuaXBwZXQgZG9jeGZcblwKCTwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1mcmFtZXNldC5kdGRcIj5cblwKIyBYSFRNTCBEb2N0eXBlIDEuMCBTdHJpY3RcblwKc25pcHBldCBkb2N4c1xuXAoJPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU5cIlxuXAoJXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkXCI+XG5cCiMgWEhUTUwgRG9jdHlwZSAxLjAgVHJhbnNpdGlvbmFsXG5cCnNuaXBwZXQgZG9jeHRcblwKCTwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOXCJcblwKCVwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZFwiPlxuXAojIFhIVE1MIERvY3R5cGUgMS4xXG5cCnNuaXBwZXQgZG9jeFxuXAoJPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTlwiXG5cCglcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkXCI+XG5cCiMgaHRtbDVzaGl2XG5cCnNuaXBwZXQgaHRtbDVzaGl2XG5cCgk8IS0tW2lmIGx0ZSBJRSA4XT5cblwKCQk8c2NyaXB0IHNyYz1cImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2h0bWw1c2hpdi8zLjcuMy9odG1sNXNoaXYubWluLmpzXCI+PC9zY3JpcHQ+XG5cCgk8IVtlbmRpZl0tLT5cblwKc25pcHBldCBodG1sNXByaW50c2hpdlxuXAoJPCEtLVtpZiBsdGUgSUUgOF0+XG5cCgkJPHNjcmlwdCBzcmM9XCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9odG1sNXNoaXYvMy43LjMvaHRtbDVzaGl2LXByaW50c2hpdi5taW4uanNcIj48L3NjcmlwdD5cblwKCTwhW2VuZGlmXS0tPlxuXAojIEF0dHJpYnV0ZXNcblwKc25pcHBldCBhdHRyXG5cCgkkezE6YXR0cmlidXRlfT1cIiR7Mjpwcm9wZXJ0eX1cIlxuXApzbmlwcGV0IGF0dHIrXG5cCgkkezE6YXR0cmlidXRlfT1cIiR7Mjpwcm9wZXJ0eX1cIiBhdHRyKyR7M31cblwKc25pcHBldCAuXG5cCgljbGFzcz1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCAjXG5cCglpZD1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCBhbHRcblwKCWFsdD1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCBjaGFyc2V0XG5cCgljaGFyc2V0PVwiJHsxOnV0Zi04fVwiJHsyfVxuXApzbmlwcGV0IGRhdGFcblwKCWRhdGEtJHsxfT1cIiR7MjokMX1cIiR7M31cblwKc25pcHBldCBmb3JcblwKCWZvcj1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCBoZWlnaHRcblwKCWhlaWdodD1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCBocmVmXG5cCglocmVmPVwiJHsxOiN9XCIkezJ9XG5cCnNuaXBwZXQgbGFuZ1xuXAoJbGFuZz1cIiR7MTplbn1cIiR7Mn1cblwKc25pcHBldCBtZWRpYVxuXAoJbWVkaWE9XCIkezF9XCIkezJ9XG5cCnNuaXBwZXQgbmFtZVxuXAoJbmFtZT1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCByZWxcblwKCXJlbD1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCBzY29wZVxuXAoJc2NvcGU9XCIkezE6cm93fVwiJHsyfVxuXApzbmlwcGV0IHNyY1xuXAoJc3JjPVwiJHsxfVwiJHsyfVxuXApzbmlwcGV0IHRpdGxlPVxuXAoJdGl0bGU9XCIkezF9XCIkezJ9XG5cCnNuaXBwZXQgdHlwZVxuXAoJdHlwZT1cIiR7MX1cIiR7Mn1cblwKc25pcHBldCB2YWx1ZVxuXAoJdmFsdWU9XCIkezF9XCIkezJ9XG5cCnNuaXBwZXQgd2lkdGhcblwKCXdpZHRoPVwiJHsxfVwiJHsyfVxuXAojIEVsZW1lbnRzXG5cCnNuaXBwZXQgYVxuXAoJPGEgaHJlZj1cIiR7MTojfVwiPiR7MjokMX08L2E+XG5cCnNuaXBwZXQgYS5cblwKCTxhIGNsYXNzPVwiJHsxfVwiIGhyZWY9XCIkezI6I31cIj4kezM6JDF9PC9hPlxuXApzbmlwcGV0IGEjXG5cCgk8YSBpZD1cIiR7MX1cIiBocmVmPVwiJHsyOiN9XCI+JHszOiQxfTwvYT5cblwKc25pcHBldCBhOmV4dFxuXAoJPGEgaHJlZj1cImh0dHA6Ly8kezE6ZXhhbXBsZS5jb219XCI+JHsyOiQxfTwvYT5cblwKc25pcHBldCBhOm1haWxcblwKCTxhIGhyZWY9XCJtYWlsdG86JHsxOmpvZUBleGFtcGxlLmNvbX0/c3ViamVjdD0kezI6ZmVlZGJhY2t9XCI+JHszOmVtYWlsIG1lfTwvYT5cblwKc25pcHBldCBhYmJyXG5cCgk8YWJiciB0aXRsZT1cIiR7MX1cIj4kezJ9PC9hYmJyPlxuXApzbmlwcGV0IGFkZHJlc3NcblwKCTxhZGRyZXNzPlxuXAoJCSR7MX1cblwKCTwvYWRkcmVzcz5cblwKc25pcHBldCBhcmVhXG5cCgk8YXJlYSBzaGFwZT1cIiR7MTpyZWN0fVwiIGNvb3Jkcz1cIiR7Mn1cIiBocmVmPVwiJHszfVwiIGFsdD1cIiR7NH1cIiAvPlxuXApzbmlwcGV0IGFyZWErXG5cCgk8YXJlYSBzaGFwZT1cIiR7MTpyZWN0fVwiIGNvb3Jkcz1cIiR7Mn1cIiBocmVmPVwiJHszfVwiIGFsdD1cIiR7NH1cIiAvPlxuXAoJYXJlYSskezV9XG5cCnNuaXBwZXQgYXJlYTpjXG5cCgk8YXJlYSBzaGFwZT1cImNpcmNsZVwiIGNvb3Jkcz1cIiR7MX1cIiBocmVmPVwiJHsyfVwiIGFsdD1cIiR7M31cIiAvPlxuXApzbmlwcGV0IGFyZWE6ZFxuXAoJPGFyZWEgc2hhcGU9XCJkZWZhdWx0XCIgY29vcmRzPVwiJHsxfVwiIGhyZWY9XCIkezJ9XCIgYWx0PVwiJHszfVwiIC8+XG5cCnNuaXBwZXQgYXJlYTpwXG5cCgk8YXJlYSBzaGFwZT1cInBvbHlcIiBjb29yZHM9XCIkezF9XCIgaHJlZj1cIiR7Mn1cIiBhbHQ9XCIkezN9XCIgLz5cblwKc25pcHBldCBhcmVhOnJcblwKCTxhcmVhIHNoYXBlPVwicmVjdFwiIGNvb3Jkcz1cIiR7MX1cIiBocmVmPVwiJHsyfVwiIGFsdD1cIiR7M31cIiAvPlxuXApzbmlwcGV0IGFydGljbGVcblwKCTxhcnRpY2xlPlxuXAoJCSR7MX1cblwKCTwvYXJ0aWNsZT5cblwKc25pcHBldCBhcnRpY2xlLlxuXAoJPGFydGljbGUgY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9hcnRpY2xlPlxuXApzbmlwcGV0IGFydGljbGUjXG5cCgk8YXJ0aWNsZSBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2FydGljbGU+XG5cCnNuaXBwZXQgYXNpZGVcblwKCTxhc2lkZT5cblwKCQkkezF9XG5cCgk8L2FzaWRlPlxuXApzbmlwcGV0IGFzaWRlLlxuXAoJPGFzaWRlIGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvYXNpZGU+XG5cCnNuaXBwZXQgYXNpZGUjXG5cCgk8YXNpZGUgaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9hc2lkZT5cblwKc25pcHBldCBhdWRpb1xuXAoJPGF1ZGlvIHNyYz1cIiR7MX0+JHsyfTwvYXVkaW8+XG5cCnNuaXBwZXQgYlxuXAoJPGI+JHsxfTwvYj5cblwKc25pcHBldCBiYXNlXG5cCgk8YmFzZSBocmVmPVwiJHsxfVwiIHRhcmdldD1cIiR7Mn1cIiAvPlxuXApzbmlwcGV0IGJkaVxuXAoJPGJkaT4kezF9PC9iZG8+XG5cCnNuaXBwZXQgYmRvXG5cCgk8YmRvIGRpcj1cIiR7MX1cIj4kezJ9PC9iZG8+XG5cCnNuaXBwZXQgYmRvOmxcblwKCTxiZG8gZGlyPVwibHRyXCI+JHsxfTwvYmRvPlxuXApzbmlwcGV0IGJkbzpyXG5cCgk8YmRvIGRpcj1cInJ0bFwiPiR7MX08L2Jkbz5cblwKc25pcHBldCBibG9ja3F1b3RlXG5cCgk8YmxvY2txdW90ZT5cblwKCQkkezF9XG5cCgk8L2Jsb2NrcXVvdGU+XG5cCnNuaXBwZXQgYm9keVxuXAoJPGJvZHk+XG5cCgkJJHsxfVxuXAoJPC9ib2R5PlxuXApzbmlwcGV0IGJyXG5cCgk8YnIgLz4kezF9XG5cCnNuaXBwZXQgYnV0dG9uXG5cCgk8YnV0dG9uIHR5cGU9XCIkezE6c3VibWl0fVwiPiR7Mn08L2J1dHRvbj5cblwKc25pcHBldCBidXR0b24uXG5cCgk8YnV0dG9uIGNsYXNzPVwiJHsxOmJ1dHRvbn1cIiB0eXBlPVwiJHsyOnN1Ym1pdH1cIj4kezN9PC9idXR0b24+XG5cCnNuaXBwZXQgYnV0dG9uI1xuXAoJPGJ1dHRvbiBpZD1cIiR7MX1cIiB0eXBlPVwiJHsyOnN1Ym1pdH1cIj4kezN9PC9idXR0b24+XG5cCnNuaXBwZXQgYnV0dG9uOnNcblwKCTxidXR0b24gdHlwZT1cInN1Ym1pdFwiPiR7MX08L2J1dHRvbj5cblwKc25pcHBldCBidXR0b246clxuXAoJPGJ1dHRvbiB0eXBlPVwicmVzZXRcIj4kezF9PC9idXR0b24+XG5cCnNuaXBwZXQgY2FudmFzXG5cCgk8Y2FudmFzPlxuXAoJCSR7MX1cblwKCTwvY2FudmFzPlxuXApzbmlwcGV0IGNhcHRpb25cblwKCTxjYXB0aW9uPiR7MX08L2NhcHRpb24+XG5cCnNuaXBwZXQgY2l0ZVxuXAoJPGNpdGU+JHsxfTwvY2l0ZT5cblwKc25pcHBldCBjb2RlXG5cCgk8Y29kZT4kezF9PC9jb2RlPlxuXApzbmlwcGV0IGNvbFxuXAoJPGNvbCAvPiR7MX1cblwKc25pcHBldCBjb2wrXG5cCgk8Y29sIC8+XG5cCgljb2wrJHsxfVxuXApzbmlwcGV0IGNvbGdyb3VwXG5cCgk8Y29sZ3JvdXA+XG5cCgkJJHsxfVxuXAoJPC9jb2xncm91cD5cblwKc25pcHBldCBjb2xncm91cCtcblwKCTxjb2xncm91cD5cblwKCQk8Y29sIC8+XG5cCgkJY29sKyR7MX1cblwKCTwvY29sZ3JvdXA+XG5cCnNuaXBwZXQgY29tbWFuZFxuXAoJPGNvbW1hbmQgdHlwZT1cImNvbW1hbmRcIiBsYWJlbD1cIiR7MX1cIiBpY29uPVwiJHsyfVwiIC8+XG5cCnNuaXBwZXQgY29tbWFuZDpjXG5cCgk8Y29tbWFuZCB0eXBlPVwiY2hlY2tib3hcIiBsYWJlbD1cIiR7MX1cIiBpY29uPVwiJHsyfVwiIC8+XG5cCnNuaXBwZXQgY29tbWFuZDpyXG5cCgk8Y29tbWFuZCB0eXBlPVwicmFkaW9cIiByYWRpb2dyb3VwPVwiJHsxfVwiIGxhYmVsPVwiJHsyfVwiIGljb249XCIkezN9XCIgLz5cblwKc25pcHBldCBkYXRhZ3JpZFxuXAoJPGRhdGFncmlkPlxuXAoJCSR7MX1cblwKCTwvZGF0YWdyaWQ+XG5cCnNuaXBwZXQgZGF0YWxpc3RcblwKCTxkYXRhbGlzdD5cblwKCQkkezF9XG5cCgk8L2RhdGFsaXN0PlxuXApzbmlwcGV0IGRhdGF0ZW1wbGF0ZVxuXAoJPGRhdGF0ZW1wbGF0ZT5cblwKCQkkezF9XG5cCgk8L2RhdGF0ZW1wbGF0ZT5cblwKc25pcHBldCBkZFxuXAoJPGRkPiR7MX08L2RkPlxuXApzbmlwcGV0IGRkLlxuXAoJPGRkIGNsYXNzPVwiJHsxfVwiPiR7Mn08L2RkPlxuXApzbmlwcGV0IGRkI1xuXAoJPGRkIGlkPVwiJHsxfVwiPiR7Mn08L2RkPlxuXApzbmlwcGV0IGRlbFxuXAoJPGRlbD4kezF9PC9kZWw+XG5cCnNuaXBwZXQgZGV0YWlsc1xuXAoJPGRldGFpbHM+JHsxfTwvZGV0YWlscz5cblwKc25pcHBldCBkZm5cblwKCTxkZm4+JHsxfTwvZGZuPlxuXApzbmlwcGV0IGRpYWxvZ1xuXAoJPGRpYWxvZz5cblwKCQkkezF9XG5cCgk8L2RpYWxvZz5cblwKc25pcHBldCBkaXZcblwKCTxkaXY+XG5cCgkJJHsxfVxuXAoJPC9kaXY+XG5cCnNuaXBwZXQgZGl2LlxuXAoJPGRpdiBjbGFzcz1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2Rpdj5cblwKc25pcHBldCBkaXYjXG5cCgk8ZGl2IGlkPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvZGl2PlxuXApzbmlwcGV0IGRsXG5cCgk8ZGw+XG5cCgkJJHsxfVxuXAoJPC9kbD5cblwKc25pcHBldCBkbC5cblwKCTxkbCBjbGFzcz1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2RsPlxuXApzbmlwcGV0IGRsI1xuXAoJPGRsIGlkPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvZGw+XG5cCnNuaXBwZXQgZGwrXG5cCgk8ZGw+XG5cCgkJPGR0PiR7MX08L2R0PlxuXAoJCTxkZD4kezJ9PC9kZD5cblwKCQlkdCskezN9XG5cCgk8L2RsPlxuXApzbmlwcGV0IGR0XG5cCgk8ZHQ+JHsxfTwvZHQ+XG5cCnNuaXBwZXQgZHQuXG5cCgk8ZHQgY2xhc3M9XCIkezF9XCI+JHsyfTwvZHQ+XG5cCnNuaXBwZXQgZHQjXG5cCgk8ZHQgaWQ9XCIkezF9XCI+JHsyfTwvZHQ+XG5cCnNuaXBwZXQgZHQrXG5cCgk8ZHQ+JHsxfTwvZHQ+XG5cCgk8ZGQ+JHsyfTwvZGQ+XG5cCglkdCskezN9XG5cCnNuaXBwZXQgZW1cblwKCTxlbT4kezF9PC9lbT5cblwKc25pcHBldCBlbWJlZFxuXAoJPGVtYmVkIHNyYz0kezF9IHR5cGU9XCIkezJ9IC8+XG5cCnNuaXBwZXQgZmllbGRzZXRcblwKCTxmaWVsZHNldD5cblwKCQkkezF9XG5cCgk8L2ZpZWxkc2V0PlxuXApzbmlwcGV0IGZpZWxkc2V0LlxuXAoJPGZpZWxkc2V0IGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvZmllbGRzZXQ+XG5cCnNuaXBwZXQgZmllbGRzZXQjXG5cCgk8ZmllbGRzZXQgaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9maWVsZHNldD5cblwKc25pcHBldCBmaWVsZHNldCtcblwKCTxmaWVsZHNldD5cblwKCQk8bGVnZW5kPjxzcGFuPiR7MX08L3NwYW4+PC9sZWdlbmQ+XG5cCgkJJHsyfVxuXAoJPC9maWVsZHNldD5cblwKCWZpZWxkc2V0KyR7M31cblwKc25pcHBldCBmaWdjYXB0aW9uXG5cCgk8ZmlnY2FwdGlvbj4kezF9PC9maWdjYXB0aW9uPlxuXApzbmlwcGV0IGZpZ3VyZVxuXAoJPGZpZ3VyZT4kezF9PC9maWd1cmU+XG5cCnNuaXBwZXQgZm9vdGVyXG5cCgk8Zm9vdGVyPlxuXAoJCSR7MX1cblwKCTwvZm9vdGVyPlxuXApzbmlwcGV0IGZvb3Rlci5cblwKCTxmb290ZXIgY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9mb290ZXI+XG5cCnNuaXBwZXQgZm9vdGVyI1xuXAoJPGZvb3RlciBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L2Zvb3Rlcj5cblwKc25pcHBldCBmb3JtXG5cCgk8Zm9ybSBhY3Rpb249XCIkezF9XCIgbWV0aG9kPVwiJHsyOmdldH1cIiBhY2NlcHQtY2hhcnNldD1cInV0Zi04XCI+XG5cCgkJJHszfVxuXAoJPC9mb3JtPlxuXApzbmlwcGV0IGZvcm0uXG5cCgk8Zm9ybSBjbGFzcz1cIiR7MX1cIiBhY3Rpb249XCIkezJ9XCIgbWV0aG9kPVwiJHszOmdldH1cIiBhY2NlcHQtY2hhcnNldD1cInV0Zi04XCI+XG5cCgkJJHs0fVxuXAoJPC9mb3JtPlxuXApzbmlwcGV0IGZvcm0jXG5cCgk8Zm9ybSBpZD1cIiR7MX1cIiBhY3Rpb249XCIkezJ9XCIgbWV0aG9kPVwiJHszOmdldH1cIiBhY2NlcHQtY2hhcnNldD1cInV0Zi04XCI+XG5cCgkJJHs0fVxuXAoJPC9mb3JtPlxuXApzbmlwcGV0IGgxXG5cCgk8aDE+JHsxfTwvaDE+XG5cCnNuaXBwZXQgaDEuXG5cCgk8aDEgY2xhc3M9XCIkezF9XCI+JHsyfTwvaDE+XG5cCnNuaXBwZXQgaDEjXG5cCgk8aDEgaWQ9XCIkezF9XCI+JHsyfTwvaDE+XG5cCnNuaXBwZXQgaDJcblwKCTxoMj4kezF9PC9oMj5cblwKc25pcHBldCBoMi5cblwKCTxoMiBjbGFzcz1cIiR7MX1cIj4kezJ9PC9oMj5cblwKc25pcHBldCBoMiNcblwKCTxoMiBpZD1cIiR7MX1cIj4kezJ9PC9oMj5cblwKc25pcHBldCBoM1xuXAoJPGgzPiR7MX08L2gzPlxuXApzbmlwcGV0IGgzLlxuXAoJPGgzIGNsYXNzPVwiJHsxfVwiPiR7Mn08L2gzPlxuXApzbmlwcGV0IGgzI1xuXAoJPGgzIGlkPVwiJHsxfVwiPiR7Mn08L2gzPlxuXApzbmlwcGV0IGg0XG5cCgk8aDQ+JHsxfTwvaDQ+XG5cCnNuaXBwZXQgaDQuXG5cCgk8aDQgY2xhc3M9XCIkezF9XCI+JHsyfTwvaDQ+XG5cCnNuaXBwZXQgaDQjXG5cCgk8aDQgaWQ9XCIkezF9XCI+JHsyfTwvaDQ+XG5cCnNuaXBwZXQgaDVcblwKCTxoNT4kezF9PC9oNT5cblwKc25pcHBldCBoNS5cblwKCTxoNSBjbGFzcz1cIiR7MX1cIj4kezJ9PC9oNT5cblwKc25pcHBldCBoNSNcblwKCTxoNSBpZD1cIiR7MX1cIj4kezJ9PC9oNT5cblwKc25pcHBldCBoNlxuXAoJPGg2PiR7MX08L2g2PlxuXApzbmlwcGV0IGg2LlxuXAoJPGg2IGNsYXNzPVwiJHsxfVwiPiR7Mn08L2g2PlxuXApzbmlwcGV0IGg2I1xuXAoJPGg2IGlkPVwiJHsxfVwiPiR7Mn08L2g2PlxuXApzbmlwcGV0IGhlYWRcblwKCTxoZWFkPlxuXAoJCTxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04XCIgLz5cblwKXG5cCgkJPHRpdGxlPiR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgnJywgJ1BhZ2UgVGl0bGUnKSwgJ14uJywgJ1xcdSYnLCAnJylgfTwvdGl0bGU+XG5cCgkJJHsyfVxuXAoJPC9oZWFkPlxuXApzbmlwcGV0IGhlYWRlclxuXAoJPGhlYWRlcj5cblwKCQkkezF9XG5cCgk8L2hlYWRlcj5cblwKc25pcHBldCBoZWFkZXIuXG5cCgk8aGVhZGVyIGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvaGVhZGVyPlxuXApzbmlwcGV0IGhlYWRlciNcblwKCTxoZWFkZXIgaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9oZWFkZXI+XG5cCnNuaXBwZXQgaGdyb3VwXG5cCgk8aGdyb3VwPlxuXAoJCSR7MX1cblwKCTwvaGdyb3VwPlxuXApzbmlwcGV0IGhncm91cC5cblwKCTxoZ3JvdXAgY2xhc3M9XCIkezF9PlxuXAoJCSR7Mn1cblwKCTwvaGdyb3VwPlxuXApzbmlwcGV0IGhyXG5cCgk8aHIgLz4kezF9XG5cCnNuaXBwZXQgaHRtbFxuXAoJPGh0bWw+XG5cCgkkezF9XG5cCgk8L2h0bWw+XG5cCnNuaXBwZXQgeGh0bWxcblwKCTxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuXAoJJHsxfVxuXAoJPC9odG1sPlxuXApzbmlwcGV0IGh0bWw1XG5cCgk8IURPQ1RZUEUgaHRtbD5cblwKCTxodG1sPlxuXAoJCTxoZWFkPlxuXAoJCQk8bWV0YSBodHRwLWVxdWl2PVwiY29udGVudC10eXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiIC8+XG5cCgkJCTx0aXRsZT4kezE6YHN1YnN0aXR1dGUoRmlsZW5hbWUoJycsICdQYWdlIFRpdGxlJyksICdeLicsICdcXHUmJywgJycpYH08L3RpdGxlPlxuXAoJCQkkezI6bWV0YX1cblwKCQk8L2hlYWQ+XG5cCgkJPGJvZHk+XG5cCgkJCSR7Mzpib2R5fVxuXAoJCTwvYm9keT5cblwKCTwvaHRtbD5cblwKc25pcHBldCB4aHRtbDVcblwKCTwhRE9DVFlQRSBodG1sPlxuXAoJPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG5cCgkJPGhlYWQ+XG5cCgkJCTxtZXRhIGh0dHAtZXF1aXY9XCJjb250ZW50LXR5cGVcIiBjb250ZW50PVwiYXBwbGljYXRpb24veGh0bWwreG1sOyBjaGFyc2V0PXV0Zi04XCIgLz5cblwKCQkJPHRpdGxlPiR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgnJywgJ1BhZ2UgVGl0bGUnKSwgJ14uJywgJ1xcdSYnLCAnJylgfTwvdGl0bGU+XG5cCgkJCSR7MjptZXRhfVxuXAoJCTwvaGVhZD5cblwKCQk8Ym9keT5cblwKCQkJJHszOmJvZHl9XG5cCgkJPC9ib2R5PlxuXAoJPC9odG1sPlxuXApzbmlwcGV0IGlcblwKCTxpPiR7MX08L2k+XG5cCnNuaXBwZXQgaWZyYW1lXG5cCgk8aWZyYW1lIHNyYz1cIiR7MX1cIiBmcmFtZWJvcmRlcj1cIjBcIj48L2lmcmFtZT4kezJ9XG5cCnNuaXBwZXQgaWZyYW1lLlxuXAoJPGlmcmFtZSBjbGFzcz1cIiR7MX1cIiBzcmM9XCIkezJ9XCIgZnJhbWVib3JkZXI9XCIwXCI+PC9pZnJhbWU+JHszfVxuXApzbmlwcGV0IGlmcmFtZSNcblwKCTxpZnJhbWUgaWQ9XCIkezF9XCIgc3JjPVwiJHsyfVwiIGZyYW1lYm9yZGVyPVwiMFwiPjwvaWZyYW1lPiR7M31cblwKc25pcHBldCBpbWdcblwKCTxpbWcgc3JjPVwiJHsxfVwiIGFsdD1cIiR7Mn1cIiAvPiR7M31cblwKc25pcHBldCBpbWcuXG5cCgk8aW1nIGNsYXNzPVwiJHsxfVwiIHNyYz1cIiR7Mn1cIiBhbHQ9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW1nI1xuXAoJPGltZyBpZD1cIiR7MX1cIiBzcmM9XCIkezJ9XCIgYWx0PVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0XG5cCgk8aW5wdXQgdHlwZT1cIiR7MTp0ZXh0L3N1Ym1pdC9oaWRkZW4vYnV0dG9uL2ltYWdlfVwiIG5hbWU9XCIkezJ9XCIgaWQ9XCIkezM6JDJ9XCIgdmFsdWU9XCIkezR9XCIgLz4kezV9XG5cCnNuaXBwZXQgaW5wdXQuXG5cCgk8aW5wdXQgY2xhc3M9XCIkezF9XCIgdHlwZT1cIiR7Mjp0ZXh0L3N1Ym1pdC9oaWRkZW4vYnV0dG9uL2ltYWdlfVwiIG5hbWU9XCIkezN9XCIgaWQ9XCIkezQ6JDN9XCIgdmFsdWU9XCIkezV9XCIgLz4kezZ9XG5cCnNuaXBwZXQgaW5wdXQ6dGV4dFxuXAoJPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpzdWJtaXRcblwKCTxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpoaWRkZW5cblwKCTxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpidXR0b25cblwKCTxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDppbWFnZVxuXAoJPGlucHV0IHR5cGU9XCJpbWFnZVwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgc3JjPVwiJHszfVwiIGFsdD1cIiR7NH1cIiAvPiR7NX1cblwKc25pcHBldCBpbnB1dDpjaGVja2JveFxuXAoJPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgLz4kezN9XG5cCnNuaXBwZXQgaW5wdXQ6cmFkaW9cblwKCTxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIC8+JHszfVxuXApzbmlwcGV0IGlucHV0OmNvbG9yXG5cCgk8aW5wdXQgdHlwZT1cImNvbG9yXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpkYXRlXG5cCgk8aW5wdXQgdHlwZT1cImRhdGVcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmRhdGV0aW1lXG5cCgk8aW5wdXQgdHlwZT1cImRhdGV0aW1lXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpkYXRldGltZS1sb2NhbFxuXAoJPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6ZW1haWxcblwKCTxpbnB1dCB0eXBlPVwiZW1haWxcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OmZpbGVcblwKCTxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6bW9udGhcblwKCTxpbnB1dCB0eXBlPVwibW9udGhcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0Om51bWJlclxuXAoJPGlucHV0IHR5cGU9XCJudW1iZXJcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OnBhc3N3b3JkXG5cCgk8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnB1dDpyYW5nZVxuXAoJPGlucHV0IHR5cGU9XCJyYW5nZVwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6cmVzZXRcblwKCTxpbnB1dCB0eXBlPVwicmVzZXRcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OnNlYXJjaFxuXAoJPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiIHZhbHVlPVwiJHszfVwiIC8+JHs0fVxuXApzbmlwcGV0IGlucHV0OnRpbWVcblwKCTxpbnB1dCB0eXBlPVwidGltZVwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6dXJsXG5cCgk8aW5wdXQgdHlwZT1cInVybFwiIG5hbWU9XCIkezF9XCIgaWQ9XCIkezI6JDF9XCIgdmFsdWU9XCIkezN9XCIgLz4kezR9XG5cCnNuaXBwZXQgaW5wdXQ6d2Vla1xuXAoJPGlucHV0IHR5cGU9XCJ3ZWVrXCIgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiB2YWx1ZT1cIiR7M31cIiAvPiR7NH1cblwKc25pcHBldCBpbnNcblwKCTxpbnM+JHsxfTwvaW5zPlxuXApzbmlwcGV0IGtiZFxuXAoJPGtiZD4kezF9PC9rYmQ+XG5cCnNuaXBwZXQga2V5Z2VuXG5cCgk8a2V5Z2VuPiR7MX08L2tleWdlbj5cblwKc25pcHBldCBsYWJlbFxuXAoJPGxhYmVsIGZvcj1cIiR7MjokMX1cIj4kezF9PC9sYWJlbD5cblwKc25pcHBldCBsYWJlbDppXG5cCgk8bGFiZWwgZm9yPVwiJHsyOiQxfVwiPiR7MX08L2xhYmVsPlxuXAoJPGlucHV0IHR5cGU9XCIkezM6dGV4dC9zdWJtaXQvaGlkZGVuL2J1dHRvbn1cIiBuYW1lPVwiJHs0OiQyfVwiIGlkPVwiJHs1OiQyfVwiIHZhbHVlPVwiJHs2fVwiIC8+JHs3fVxuXApzbmlwcGV0IGxhYmVsOnNcblwKCTxsYWJlbCBmb3I9XCIkezI6JDF9XCI+JHsxfTwvbGFiZWw+XG5cCgk8c2VsZWN0IG5hbWU9XCIkezM6JDJ9XCIgaWQ9XCIkezQ6JDJ9XCI+XG5cCgkJPG9wdGlvbiB2YWx1ZT1cIiR7NX1cIj4kezY6JDV9PC9vcHRpb24+XG5cCgk8L3NlbGVjdD5cblwKc25pcHBldCBsZWdlbmRcblwKCTxsZWdlbmQ+JHsxfTwvbGVnZW5kPlxuXApzbmlwcGV0IGxlZ2VuZCtcblwKCTxsZWdlbmQ+PHNwYW4+JHsxfTwvc3Bhbj48L2xlZ2VuZD5cblwKc25pcHBldCBsaVxuXAoJPGxpPiR7MX08L2xpPlxuXApzbmlwcGV0IGxpLlxuXAoJPGxpIGNsYXNzPVwiJHsxfVwiPiR7Mn08L2xpPlxuXApzbmlwcGV0IGxpK1xuXAoJPGxpPiR7MX08L2xpPlxuXAoJbGkrJHsyfVxuXApzbmlwcGV0IGxpYVxuXAoJPGxpPjxhIGhyZWY9XCIkezI6I31cIj4kezF9PC9hPjwvbGk+XG5cCnNuaXBwZXQgbGlhK1xuXAoJPGxpPjxhIGhyZWY9XCIkezI6I31cIj4kezF9PC9hPjwvbGk+XG5cCglsaWErJHszfVxuXApzbmlwcGV0IGxpbmtcblwKCTxsaW5rIHJlbD1cIiR7MX1cIiBocmVmPVwiJHsyfVwiIHRpdGxlPVwiJHszfVwiIHR5cGU9XCIkezR9XCIgLz4kezV9XG5cCnNuaXBwZXQgbGluazphdG9tXG5cCgk8bGluayByZWw9XCJhbHRlcm5hdGVcIiBocmVmPVwiJHsxOmF0b20ueG1sfVwiIHRpdGxlPVwiQXRvbVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiIC8+JHsyfVxuXApzbmlwcGV0IGxpbms6Y3NzXG5cCgk8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIiR7MjpzdHlsZS5jc3N9XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCIkezM6YWxsfVwiIC8+JHs0fVxuXApzbmlwcGV0IGxpbms6ZmF2aWNvblxuXAoJPGxpbmsgcmVsPVwic2hvcnRjdXQgaWNvblwiIGhyZWY9XCIkezE6ZmF2aWNvbi5pY299XCIgdHlwZT1cImltYWdlL3gtaWNvblwiIC8+JHsyfVxuXApzbmlwcGV0IGxpbms6cnNzXG5cCgk8bGluayByZWw9XCJhbHRlcm5hdGVcIiBocmVmPVwiJHsxOnJzcy54bWx9XCIgdGl0bGU9XCJSU1NcIiB0eXBlPVwiYXBwbGljYXRpb24vYXRvbSt4bWxcIiAvPiR7Mn1cblwKc25pcHBldCBsaW5rOnRvdWNoXG5cCgk8bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgaHJlZj1cIiR7MTpmYXZpY29uLnBuZ31cIiAvPiR7Mn1cblwKc25pcHBldCBtYXBcblwKCTxtYXAgbmFtZT1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L21hcD5cblwKc25pcHBldCBtYXAuXG5cCgk8bWFwIGNsYXNzPVwiJHsxfVwiIG5hbWU9XCIkezJ9XCI+XG5cCgkJJHszfVxuXAoJPC9tYXA+XG5cCnNuaXBwZXQgbWFwI1xuXAoJPG1hcCBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfT5cblwKCQkkezN9XG5cCgk8L21hcD5cblwKc25pcHBldCBtYXArXG5cCgk8bWFwIG5hbWU9XCIkezF9XCI+XG5cCgkJPGFyZWEgc2hhcGU9XCIkezJ9XCIgY29vcmRzPVwiJHszfVwiIGhyZWY9XCIkezR9XCIgYWx0PVwiJHs1fVwiIC8+JHs2fVxuXAoJPC9tYXA+JHs3fVxuXApzbmlwcGV0IG1hcmtcblwKCTxtYXJrPiR7MX08L21hcms+XG5cCnNuaXBwZXQgbWVudVxuXAoJPG1lbnU+XG5cCgkJJHsxfVxuXAoJPC9tZW51PlxuXApzbmlwcGV0IG1lbnU6Y1xuXAoJPG1lbnUgdHlwZT1cImNvbnRleHRcIj5cblwKCQkkezF9XG5cCgk8L21lbnU+XG5cCnNuaXBwZXQgbWVudTp0XG5cCgk8bWVudSB0eXBlPVwidG9vbGJhclwiPlxuXAoJCSR7MX1cblwKCTwvbWVudT5cblwKc25pcHBldCBtZXRhXG5cCgk8bWV0YSBodHRwLWVxdWl2PVwiJHsxfVwiIGNvbnRlbnQ9XCIkezJ9XCIgLz4kezN9XG5cCnNuaXBwZXQgbWV0YTpjb21wYXRcblwKCTxtZXRhIGh0dHAtZXF1aXY9XCJYLVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9JHsxOjcsOCxlZGdlfVwiIC8+JHszfVxuXApzbmlwcGV0IG1ldGE6cmVmcmVzaFxuXAoJPG1ldGEgaHR0cC1lcXVpdj1cInJlZnJlc2hcIiBjb250ZW50PVwidGV4dC9odG1sO2NoYXJzZXQ9VVRGLThcIiAvPiR7M31cblwKc25pcHBldCBtZXRhOnV0ZlxuXAoJPG1ldGEgaHR0cC1lcXVpdj1cImNvbnRlbnQtdHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOFwiIC8+JHszfVxuXApzbmlwcGV0IG1ldGVyXG5cCgk8bWV0ZXI+JHsxfTwvbWV0ZXI+XG5cCnNuaXBwZXQgbmF2XG5cCgk8bmF2PlxuXAoJCSR7MX1cblwKCTwvbmF2PlxuXApzbmlwcGV0IG5hdi5cblwKCTxuYXYgY2xhc3M9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9uYXY+XG5cCnNuaXBwZXQgbmF2I1xuXAoJPG5hdiBpZD1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L25hdj5cblwKc25pcHBldCBub3NjcmlwdFxuXAoJPG5vc2NyaXB0PlxuXAoJCSR7MX1cblwKCTwvbm9zY3JpcHQ+XG5cCnNuaXBwZXQgb2JqZWN0XG5cCgk8b2JqZWN0IGRhdGE9XCIkezF9XCIgdHlwZT1cIiR7Mn1cIj5cblwKCQkkezN9XG5cCgk8L29iamVjdD4kezR9XG5cCiMgRW1iZWQgUVQgTW92aWVcblwKc25pcHBldCBtb3ZpZVxuXAoJPG9iamVjdCB3aWR0aD1cIiQyXCIgaGVpZ2h0PVwiJDNcIiBjbGFzc2lkPVwiY2xzaWQ6MDJCRjI1RDUtOEMxNy00QjIzLUJDODAtRDM0ODhBQkREQzZCXCJcblwKCSBjb2RlYmFzZT1cImh0dHA6Ly93d3cuYXBwbGUuY29tL3F0YWN0aXZleC9xdHBsdWdpbi5jYWJcIj5cblwKCQk8cGFyYW0gbmFtZT1cInNyY1wiIHZhbHVlPVwiJDFcIiAvPlxuXAoJCTxwYXJhbSBuYW1lPVwiY29udHJvbGxlclwiIHZhbHVlPVwiJDRcIiAvPlxuXAoJCTxwYXJhbSBuYW1lPVwiYXV0b3BsYXlcIiB2YWx1ZT1cIiQ1XCIgLz5cblwKCQk8ZW1iZWQgc3JjPVwiJHsxOm1vdmllLm1vdn1cIlxuXAoJCQl3aWR0aD1cIiR7MjozMjB9XCIgaGVpZ2h0PVwiJHszOjI0MH1cIlxuXAoJCQljb250cm9sbGVyPVwiJHs0OnRydWV9XCIgYXV0b3BsYXk9XCIkezU6dHJ1ZX1cIlxuXAoJCQlzY2FsZT1cInRvZml0XCIgY2FjaGU9XCJ0cnVlXCJcblwKCQkJcGx1Z2luc3BhZ2U9XCJodHRwOi8vd3d3LmFwcGxlLmNvbS9xdWlja3RpbWUvZG93bmxvYWQvXCIgLz5cblwKCTwvb2JqZWN0PiR7Nn1cblwKc25pcHBldCBvbFxuXAoJPG9sPlxuXAoJCSR7MX1cblwKCTwvb2w+XG5cCnNuaXBwZXQgb2wuXG5cCgk8b2wgY2xhc3M9XCIkezF9PlxuXAoJCSR7Mn1cblwKCTwvb2w+XG5cCnNuaXBwZXQgb2wjXG5cCgk8b2wgaWQ9XCIkezF9PlxuXAoJCSR7Mn1cblwKCTwvb2w+XG5cCnNuaXBwZXQgb2wrXG5cCgk8b2w+XG5cCgkJPGxpPiR7MX08L2xpPlxuXAoJCWxpKyR7Mn1cblwKCTwvb2w+XG5cCnNuaXBwZXQgb3B0XG5cCgk8b3B0aW9uIHZhbHVlPVwiJHsxfVwiPiR7MjokMX08L29wdGlvbj5cblwKc25pcHBldCBvcHQrXG5cCgk8b3B0aW9uIHZhbHVlPVwiJHsxfVwiPiR7MjokMX08L29wdGlvbj5cblwKCW9wdCskezN9XG5cCnNuaXBwZXQgb3B0dFxuXAoJPG9wdGlvbj4kezF9PC9vcHRpb24+XG5cCnNuaXBwZXQgb3B0Z3JvdXBcblwKCTxvcHRncm91cD5cblwKCQk8b3B0aW9uIHZhbHVlPVwiJHsxfVwiPiR7MjokMX08L29wdGlvbj5cblwKCQlvcHQrJHszfVxuXAoJPC9vcHRncm91cD5cblwKc25pcHBldCBvdXRwdXRcblwKCTxvdXRwdXQ+JHsxfTwvb3V0cHV0PlxuXApzbmlwcGV0IHBcblwKCTxwPiR7MX08L3A+XG5cCnNuaXBwZXQgcGFyYW1cblwKCTxwYXJhbSBuYW1lPVwiJHsxfVwiIHZhbHVlPVwiJHsyfVwiIC8+JHszfVxuXApzbmlwcGV0IHByZVxuXAoJPHByZT5cblwKCQkkezF9XG5cCgk8L3ByZT5cblwKc25pcHBldCBwcm9ncmVzc1xuXAoJPHByb2dyZXNzPiR7MX08L3Byb2dyZXNzPlxuXApzbmlwcGV0IHFcblwKCTxxPiR7MX08L3E+XG5cCnNuaXBwZXQgcnBcblwKCTxycD4kezF9PC9ycD5cblwKc25pcHBldCBydFxuXAoJPHJ0PiR7MX08L3J0PlxuXApzbmlwcGV0IHJ1YnlcblwKCTxydWJ5PlxuXAoJCTxycD48cnQ+JHsxfTwvcnQ+PC9ycD5cblwKCTwvcnVieT5cblwKc25pcHBldCBzXG5cCgk8cz4kezF9PC9zPlxuXApzbmlwcGV0IHNhbXBcblwKCTxzYW1wPlxuXAoJCSR7MX1cblwKCTwvc2FtcD5cblwKc25pcHBldCBzY3JpcHRcblwKCTxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuXAoJCSR7MX1cblwKCTwvc2NyaXB0PlxuXApzbmlwcGV0IHNjcmlwdHNyY1xuXAoJPHNjcmlwdCBzcmM9XCIkezF9LmpzXCIgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIGNoYXJzZXQ9XCJ1dGYtOFwiPjwvc2NyaXB0PlxuXApzbmlwcGV0IG5ld3NjcmlwdFxuXAoJPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuXAoJCSR7MX1cblwKCTwvc2NyaXB0PlxuXApzbmlwcGV0IG5ld3NjcmlwdHNyY1xuXAoJPHNjcmlwdCBzcmM9XCIkezF9LmpzXCIgdHlwZT1cImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIiBjaGFyc2V0PVwidXRmLThcIj48L3NjcmlwdD5cblwKc25pcHBldCBzZWN0aW9uXG5cCgk8c2VjdGlvbj5cblwKCQkkezF9XG5cCgk8L3NlY3Rpb24+XG5cCnNuaXBwZXQgc2VjdGlvbi5cblwKCTxzZWN0aW9uIGNsYXNzPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvc2VjdGlvbj5cblwKc25pcHBldCBzZWN0aW9uI1xuXAoJPHNlY3Rpb24gaWQ9XCIkezF9XCI+XG5cCgkJJHsyfVxuXAoJPC9zZWN0aW9uPlxuXApzbmlwcGV0IHNlbGVjdFxuXAoJPHNlbGVjdCBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiPlxuXAoJCSR7M31cblwKCTwvc2VsZWN0PlxuXApzbmlwcGV0IHNlbGVjdC5cblwKCTxzZWxlY3QgbmFtZT1cIiR7MX1cIiBpZD1cIiR7MjokMX1cIiBjbGFzcz1cIiR7M30+XG5cCgkJJHs0fVxuXAoJPC9zZWxlY3Q+XG5cCnNuaXBwZXQgc2VsZWN0K1xuXAoJPHNlbGVjdCBuYW1lPVwiJHsxfVwiIGlkPVwiJHsyOiQxfVwiPlxuXAoJCTxvcHRpb24gdmFsdWU9XCIkezN9XCI+JHs0OiQzfTwvb3B0aW9uPlxuXAoJCW9wdCskezV9XG5cCgk8L3NlbGVjdD5cblwKc25pcHBldCBzbWFsbFxuXAoJPHNtYWxsPiR7MX08L3NtYWxsPlxuXApzbmlwcGV0IHNvdXJjZVxuXAoJPHNvdXJjZSBzcmM9XCIkezF9XCIgdHlwZT1cIiR7Mn1cIiBtZWRpYT1cIiR7M31cIiAvPlxuXApzbmlwcGV0IHNwYW5cblwKCTxzcGFuPiR7MX08L3NwYW4+XG5cCnNuaXBwZXQgc3Ryb25nXG5cCgk8c3Ryb25nPiR7MX08L3N0cm9uZz5cblwKc25pcHBldCBzdHlsZVxuXAoJPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiIG1lZGlhPVwiJHsxOmFsbH1cIj5cblwKCQkkezJ9XG5cCgk8L3N0eWxlPlxuXApzbmlwcGV0IHN1YlxuXAoJPHN1Yj4kezF9PC9zdWI+XG5cCnNuaXBwZXQgc3VtbWFyeVxuXAoJPHN1bW1hcnk+XG5cCgkJJHsxfVxuXAoJPC9zdW1tYXJ5PlxuXApzbmlwcGV0IHN1cFxuXAoJPHN1cD4kezF9PC9zdXA+XG5cCnNuaXBwZXQgdGFibGVcblwKCTx0YWJsZSBib3JkZXI9XCIkezE6MH1cIj5cblwKCQkkezJ9XG5cCgk8L3RhYmxlPlxuXApzbmlwcGV0IHRhYmxlLlxuXAoJPHRhYmxlIGNsYXNzPVwiJHsxfVwiIGJvcmRlcj1cIiR7MjowfVwiPlxuXAoJCSR7M31cblwKCTwvdGFibGU+XG5cCnNuaXBwZXQgdGFibGUjXG5cCgk8dGFibGUgaWQ9XCIkezF9XCIgYm9yZGVyPVwiJHsyOjB9XCI+XG5cCgkJJHszfVxuXAoJPC90YWJsZT5cblwKc25pcHBldCB0Ym9keVxuXAoJPHRib2R5PlxuXAoJCSR7MX1cblwKCTwvdGJvZHk+XG5cCnNuaXBwZXQgdGRcblwKCTx0ZD4kezF9PC90ZD5cblwKc25pcHBldCB0ZC5cblwKCTx0ZCBjbGFzcz1cIiR7MX1cIj4kezJ9PC90ZD5cblwKc25pcHBldCB0ZCNcblwKCTx0ZCBpZD1cIiR7MX1cIj4kezJ9PC90ZD5cblwKc25pcHBldCB0ZCtcblwKCTx0ZD4kezF9PC90ZD5cblwKCXRkKyR7Mn1cblwKc25pcHBldCB0ZXh0YXJlYVxuXAoJPHRleHRhcmVhIG5hbWU9XCIkezF9XCIgaWQ9JHsyOiQxfSByb3dzPVwiJHszOjh9XCIgY29scz1cIiR7NDo0MH1cIj4kezV9PC90ZXh0YXJlYT4kezZ9XG5cCnNuaXBwZXQgdGZvb3RcblwKCTx0Zm9vdD5cblwKCQkkezF9XG5cCgk8L3Rmb290PlxuXApzbmlwcGV0IHRoXG5cCgk8dGg+JHsxfTwvdGg+XG5cCnNuaXBwZXQgdGguXG5cCgk8dGggY2xhc3M9XCIkezF9XCI+JHsyfTwvdGg+XG5cCnNuaXBwZXQgdGgjXG5cCgk8dGggaWQ9XCIkezF9XCI+JHsyfTwvdGg+XG5cCnNuaXBwZXQgdGgrXG5cCgk8dGg+JHsxfTwvdGg+XG5cCgl0aCskezJ9XG5cCnNuaXBwZXQgdGhlYWRcblwKCTx0aGVhZD5cblwKCQkkezF9XG5cCgk8L3RoZWFkPlxuXApzbmlwcGV0IHRpbWVcblwKCTx0aW1lIGRhdGV0aW1lPVwiJHsxfVwiIHB1YmRhdGU9XCIkezI6JDF9PiR7MzokMX08L3RpbWU+XG5cCnNuaXBwZXQgdGl0bGVcblwKCTx0aXRsZT4kezE6YHN1YnN0aXR1dGUoRmlsZW5hbWUoJycsICdQYWdlIFRpdGxlJyksICdeLicsICdcXHUmJywgJycpYH08L3RpdGxlPlxuXApzbmlwcGV0IHRyXG5cCgk8dHI+XG5cCgkJJHsxfVxuXAoJPC90cj5cblwKc25pcHBldCB0citcblwKCTx0cj5cblwKCQk8dGQ+JHsxfTwvdGQ+XG5cCgkJdGQrJHsyfVxuXAoJPC90cj5cblwKc25pcHBldCB0cmFja1xuXAoJPHRyYWNrIHNyYz1cIiR7MX1cIiBzcmNsYW5nPVwiJHsyfVwiIGxhYmVsPVwiJHszfVwiIGRlZmF1bHQ9XCIkezQ6ZGVmYXVsdH0+JHs1fTwvdHJhY2s+JHs2fVxuXApzbmlwcGV0IHVsXG5cCgk8dWw+XG5cCgkJJHsxfVxuXAoJPC91bD5cblwKc25pcHBldCB1bC5cblwKCTx1bCBjbGFzcz1cIiR7MX1cIj5cblwKCQkkezJ9XG5cCgk8L3VsPlxuXApzbmlwcGV0IHVsI1xuXAoJPHVsIGlkPVwiJHsxfVwiPlxuXAoJCSR7Mn1cblwKCTwvdWw+XG5cCnNuaXBwZXQgdWwrXG5cCgk8dWw+XG5cCgkJPGxpPiR7MX08L2xpPlxuXAoJCWxpKyR7Mn1cblwKCTwvdWw+XG5cCnNuaXBwZXQgdmFyXG5cCgk8dmFyPiR7MX08L3Zhcj5cblwKc25pcHBldCB2aWRlb1xuXAoJPHZpZGVvIHNyYz1cIiR7MX0gaGVpZ2h0PVwiJHsyfVwiIHdpZHRoPVwiJHszfVwiIHByZWxvYWQ9XCIkezU6bm9uZX1cIiBhdXRvcGxheT1cIiR7NjphdXRvcGxheX0+JHs3fTwvdmlkZW8+JHs4fVxuXApzbmlwcGV0IHdiclxuXAoJPHdiciAvPiR7MX1cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJsaXF1aWQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9saXF1aWQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/lisp.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbGlzcCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImxpc3AiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9saXNwIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/livescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbGl2ZXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImxpdmVzY3JpcHQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9saXZlc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/logiql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbG9naXFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAibG9naXFsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbG9naXFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/logtalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbG9ndGFsayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImxvZ3RhbGsiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9sb2d0YWxrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/lsl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbHNsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgQFxuXAoJQCR7MTpsYWJlbH07XG5cCnNuaXBwZXQgQ0FNRVJBX0FDVElWRVxuXAoJQ0FNRVJBX0FDVElWRSwgJHsxOmludGVnZXIgaXNBY3RpdmV9LCAkMFxuXApzbmlwcGV0IENBTUVSQV9CRUhJTkRORVNTX0FOR0xFXG5cCglDQU1FUkFfQkVISU5ETkVTU19BTkdMRSwgJHsxOmZsb2F0IGRlZ3JlZXN9LCAkMFxuXApzbmlwcGV0IENBTUVSQV9CRUhJTkRORVNTX0xBR1xuXAoJQ0FNRVJBX0JFSElORE5FU1NfTEFHLCAkezE6ZmxvYXQgc2Vjb25kc30sICQwXG5cCnNuaXBwZXQgQ0FNRVJBX0RJU1RBTkNFXG5cCglDQU1FUkFfRElTVEFOQ0UsICR7MTpmbG9hdCBtZXRlcnN9LCAkMFxuXApzbmlwcGV0IENBTUVSQV9GT0NVU1xuXAoJQ0FNRVJBX0ZPQ1VTLCAkezE6dmVjdG9yIHBvc2l0aW9ufSwgJDBcblwKc25pcHBldCBDQU1FUkFfRk9DVVNfTEFHXG5cCglDQU1FUkFfRk9DVVNfTEFHLCAkezE6ZmxvYXQgc2Vjb25kc30sICQwXG5cCnNuaXBwZXQgQ0FNRVJBX0ZPQ1VTX0xPQ0tFRFxuXAoJQ0FNRVJBX0ZPQ1VTX0xPQ0tFRCwgJHsxOmludGVnZXIgaXNMb2NrZWR9LCAkMFxuXApzbmlwcGV0IENBTUVSQV9GT0NVU19PRkZTRVRcblwKCUNBTUVSQV9GT0NVU19PRkZTRVQsICR7MTp2ZWN0b3IgbWV0ZXJzfSwgJDBcblwKc25pcHBldCBDQU1FUkFfRk9DVVNfVEhSRVNIT0xEXG5cCglDQU1FUkFfRk9DVVNfVEhSRVNIT0xELCAkezE6ZmxvYXQgbWV0ZXJzfSwgJDBcblwKc25pcHBldCBDQU1FUkFfUElUQ0hcblwKCUNBTUVSQV9QSVRDSCwgJHsxOmZsb2F0IGRlZ3JlZXN9LCAkMFxuXApzbmlwcGV0IENBTUVSQV9QT1NJVElPTlxuXAoJQ0FNRVJBX1BPU0lUSU9OLCAkezE6dmVjdG9yIHBvc2l0aW9ufSwgJDBcblwKc25pcHBldCBDQU1FUkFfUE9TSVRJT05fTEFHXG5cCglDQU1FUkFfUE9TSVRJT05fTEFHLCAkezE6ZmxvYXQgc2Vjb25kc30sICQwXG5cCnNuaXBwZXQgQ0FNRVJBX1BPU0lUSU9OX0xPQ0tFRFxuXAoJQ0FNRVJBX1BPU0lUSU9OX0xPQ0tFRCwgJHsxOmludGVnZXIgaXNMb2NrZWR9LCAkMFxuXApzbmlwcGV0IENBTUVSQV9QT1NJVElPTl9USFJFU0hPTERcblwKCUNBTUVSQV9QT1NJVElPTl9USFJFU0hPTEQsICR7MTpmbG9hdCBtZXRlcnN9LCAkMFxuXApzbmlwcGV0IENIQVJBQ1RFUl9BVk9JREFOQ0VfTU9ERVxuXAoJQ0hBUkFDVEVSX0FWT0lEQU5DRV9NT0RFLCAkezE6aW50ZWdlciBmbGFnc30sICQwXG5cCnNuaXBwZXQgQ0hBUkFDVEVSX0RFU0lSRURfU1BFRURcblwKCUNIQVJBQ1RFUl9ERVNJUkVEX1NQRUVELCAkezE6ZmxvYXQgc3BlZWR9LCAkMFxuXApzbmlwcGV0IENIQVJBQ1RFUl9ERVNJUkVEX1RVUk5fU1BFRURcblwKCUNIQVJBQ1RFUl9ERVNJUkVEX1RVUk5fU1BFRUQsICR7MTpmbG9hdCBzcGVlZH0sICQwXG5cCnNuaXBwZXQgQ0hBUkFDVEVSX0xFTkdUSFxuXAoJQ0hBUkFDVEVSX0xFTkdUSCwgJHsxOmZsb2F0IGxlbmd0aH0sICQwXG5cCnNuaXBwZXQgQ0hBUkFDVEVSX01BWF9UVVJOX1JBRElVU1xuXAoJQ0hBUkFDVEVSX01BWF9UVVJOX1JBRElVUywgJHsxOmZsb2F0IHJhZGl1c30sICQwXG5cCnNuaXBwZXQgQ0hBUkFDVEVSX09SSUVOVEFUSU9OXG5cCglDSEFSQUNURVJfT1JJRU5UQVRJT04sICR7MTppbnRlZ2VyIG9yaWVudGF0aW9ufSwgJDBcblwKc25pcHBldCBDSEFSQUNURVJfUkFESVVTXG5cCglDSEFSQUNURVJfUkFESVVTLCAkezE6ZmxvYXQgcmFkaXVzfSwgJDBcblwKc25pcHBldCBDSEFSQUNURVJfU1RBWV9XSVRISU5fUEFSQ0VMXG5cCglDSEFSQUNURVJfU1RBWV9XSVRISU5fUEFSQ0VMLCAkezE6Ym9vbGVhbiBzdGF5fSwgJDBcblwKc25pcHBldCBDSEFSQUNURVJfVFlQRVxuXAoJQ0hBUkFDVEVSX1RZUEUsICR7MTppbnRlZ2VyIHR5cGV9LCAkMFxuXApzbmlwcGV0IEhUVFBfQk9EWV9NQVhMRU5HVEhcblwKCUhUVFBfQk9EWV9NQVhMRU5HVEgsICR7MTppbnRlZ2VyIGxlbmd0aH0sICQwXG5cCnNuaXBwZXQgSFRUUF9DVVNUT01fSEVBREVSXG5cCglIVFRQX0NVU1RPTV9IRUFERVIsICR7MTpzdHJpbmcgbmFtZX0sICR7MjpzdHJpbmcgdmFsdWV9LCAkMFxuXApzbmlwcGV0IEhUVFBfTUVUSE9EXG5cCglIVFRQX01FVEhPRCwgJHsxOnN0cmluZyBtZXRob2R9LCAkMFxuXApzbmlwcGV0IEhUVFBfTUlNRVRZUEVcblwKCUhUVFBfTUlNRVRZUEUsICR7MTpzdHJpbmcgbWltZVR5cGV9LCAkMFxuXApzbmlwcGV0IEhUVFBfUFJBR01BX05PX0NBQ0hFXG5cCglIVFRQX1BSQUdNQV9OT19DQUNIRSwgJHsxOmludGVnZXIgc2VuZF9oZWFkZXJ9LCAkMFxuXApzbmlwcGV0IEhUVFBfVkVSQk9TRV9USFJPVFRMRVxuXAoJSFRUUF9WRVJCT1NFX1RIUk9UVExFLCAkezE6aW50ZWdlciBub2lzeX0sICQwXG5cCnNuaXBwZXQgSFRUUF9WRVJJRllfQ0VSVFxuXAoJSFRUUF9WRVJJRllfQ0VSVCwgJHsxOmludGVnZXIgdmVyaWZ5fSwgJDBcblwKc25pcHBldCBSQ19EQVRBX0ZMQUdTXG5cCglSQ19EQVRBX0ZMQUdTLCAkezE6aW50ZWdlciBmbGFnc30sICQwXG5cCnNuaXBwZXQgUkNfREVURUNUX1BIQU5UT01cblwKCVJDX0RFVEVDVF9QSEFOVE9NLCAkezE6aW50ZWdlciBkZWN0ZWRQaGFudG9tfSwgJDBcblwKc25pcHBldCBSQ19NQVhfSElUU1xuXAoJUkNfTUFYX0hJVFMsICR7MTppbnRlZ2VyIG1heEhpdHN9LCAkMFxuXApzbmlwcGV0IFJDX1JFSkVDVF9UWVBFU1xuXAoJUkNfUkVKRUNUX1RZUEVTLCAkezE6aW50ZWdlciBmaWx0ZXJNYXNrfSwgJDBcblwKc25pcHBldCBhdF9yb3RfdGFyZ2V0XG5cCglhdF9yb3RfdGFyZ2V0KCR7MTppbnRlZ2VyIGhhbmRsZX0sICR7Mjpyb3RhdGlvbiB0YXJnZXRyb3R9LCAkezM6cm90YXRpb24gb3Vycm90fSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGF0X3RhcmdldFxuXAoJYXRfdGFyZ2V0KCR7MTppbnRlZ2VyIHRudW19LCAkezI6dmVjdG9yIHRhcmdldHBvc30sICR7Mzp2ZWN0b3Igb3VycG9zfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGF0dGFjaFxuXAoJYXR0YWNoKCR7MTprZXkgaWR9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgY2hhbmdlZFxuXAoJY2hhbmdlZCgkezE6aW50ZWdlciBjaGFuZ2V9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgY29sbGlzaW9uXG5cCgljb2xsaXNpb24oJHsxOmludGVnZXIgaW5kZXh9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgY29sbGlzaW9uX2VuZFxuXAoJY29sbGlzaW9uX2VuZCgkezE6aW50ZWdlciBpbmRleH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBjb2xsaXNpb25fc3RhcnRcblwKCWNvbGxpc2lvbl9zdGFydCgkezE6aW50ZWdlciBpbmRleH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBjb250cm9sXG5cCgljb250cm9sKCR7MTprZXkgaWR9LCAkezI6aW50ZWdlciBsZXZlbH0sICR7MzppbnRlZ2VyIGVkZ2V9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgZGF0YXNlcnZlclxuXAoJZGF0YXNlcnZlcigkezE6a2V5IHF1ZXJ5X2lkfSwgJHsyOnN0cmluZyBkYXRhfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGRvXG5cCglkb1xuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCgl3aGlsZSAoJHsxOmNvbmRpdGlvbn0pO1xuXApzbmlwcGV0IGVsc2VcblwKCWVsc2VcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGVtYWlsXG5cCgllbWFpbCgkezE6c3RyaW5nIHRpbWV9LCAkezI6c3RyaW5nIGFkZHJlc3N9LCAkezM6c3RyaW5nIHN1YmplY3R9LCAkezQ6c3RyaW5nIG1lc3NhZ2V9LCAkezU6aW50ZWdlciBudW1fbGVmdH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBleHBlcmllbmNlX3Blcm1pc3Npb25zXG5cCglleHBlcmllbmNlX3Blcm1pc3Npb25zKCR7MTprZXkgYWdlbnRfaWR9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgZXhwZXJpZW5jZV9wZXJtaXNzaW9uc19kZW5pZWRcblwKCWV4cGVyaWVuY2VfcGVybWlzc2lvbnNfZGVuaWVkKCR7MTprZXkgYWdlbnRfaWR9LCAkezI6aW50ZWdlciByZWFzb259KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgZm9yXG5cCglmb3IgKCR7MTpzdGFydH07ICR7Mzpjb25kaXRpb259OyAkezM6c3RlcH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBodHRwX3JlcXVlc3RcblwKCWh0dHBfcmVxdWVzdCgkezE6a2V5IHJlcXVlc3RfaWR9LCAkezI6c3RyaW5nIG1ldGhvZH0sICR7MzpzdHJpbmcgYm9keX0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBodHRwX3Jlc3BvbnNlXG5cCglodHRwX3Jlc3BvbnNlKCR7MTprZXkgcmVxdWVzdF9pZH0sICR7MjppbnRlZ2VyIHN0YXR1c30sICR7MzpsaXN0IG1ldGFkYXRhfSwgJHs0OnN0cmluZyBib2R5fSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGlmXG5cCglpZiAoJHsxOmNvbmRpdGlvbn0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBqdW1wXG5cCglqdW1wICR7MTpsYWJlbH07XG5cCnNuaXBwZXQgbGFuZF9jb2xsaXNpb25cblwKCWxhbmRfY29sbGlzaW9uKCR7MTp2ZWN0b3IgcG9zfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGxhbmRfY29sbGlzaW9uX2VuZFxuXAoJbGFuZF9jb2xsaXNpb25fZW5kKCR7MTp2ZWN0b3IgcG9zfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGxhbmRfY29sbGlzaW9uX3N0YXJ0XG5cCglsYW5kX2NvbGxpc2lvbl9zdGFydCgkezE6dmVjdG9yIHBvc30pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBsaW5rX21lc3NhZ2VcblwKCWxpbmtfbWVzc2FnZSgkezE6aW50ZWdlciBzZW5kZXJfbnVtfSwgJHsyOmludGVnZXIgbnVtfSwgJHszOnN0cmluZyBzdHJ9LCAkezQ6a2V5IGlkfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGxpc3RlblxuXAoJbGlzdGVuKCR7MTppbnRlZ2VyIGNoYW5uZWx9LCAkezI6c3RyaW5nIG5hbWV9LCAkezM6a2V5IGlkfSwgJHs0OnN0cmluZyBtZXNzYWdlfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IGxsQWJzXG5cCglsbEFicygkezE6aW50ZWdlciB2YWx9KVxuXApzbmlwcGV0IGxsQWNvc1xuXAoJbGxBY29zKCR7MTpmbG9hdCB2YWx9KVxuXApzbmlwcGV0IGxsQWRkVG9MYW5kQmFuTGlzdFxuXAoJbGxBZGRUb0xhbmRCYW5MaXN0KCR7MTprZXkgYWdlbnR9LCAkezI6ZmxvYXQgaG91cnN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxBZGRUb0xhbmRQYXNzTGlzdFxuXAoJbGxBZGRUb0xhbmRQYXNzTGlzdCgkezE6a2V5IGFnZW50fSwgJHsyOmZsb2F0IGhvdXJzfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsQWRqdXN0U291bmRWb2x1bWVcblwKCWxsQWRqdXN0U291bmRWb2x1bWUoJHsxOmZsb2F0IHZvbHVtZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbEFnZW50SW5FeHBlcmllbmNlXG5cCglsbEFnZW50SW5FeHBlcmllbmNlKCR7MTprZXkgYWdlbnR9KVxuXApzbmlwcGV0IGxsQWxsb3dJbnZlbnRvcnlEcm9wXG5cCglsbEFsbG93SW52ZW50b3J5RHJvcCgkezE6aW50ZWdlciBhZGR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxBbmdsZUJldHdlZW5cblwKCWxsQW5nbGVCZXR3ZWVuKCR7MTpyb3RhdGlvbiBhfSwgJHsyOnJvdGF0aW9uIGJ9KVxuXApzbmlwcGV0IGxsQXBwbHlJbXB1bHNlXG5cCglsbEFwcGx5SW1wdWxzZSgkezE6dmVjdG9yIGZvcmNlfSwgJHsyOmludGVnZXIgbG9jYWx9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxBcHBseVJvdGF0aW9uYWxJbXB1bHNlXG5cCglsbEFwcGx5Um90YXRpb25hbEltcHVsc2UoJHsxOnZlY3RvciBmb3JjZX0sICR7MjppbnRlZ2VyIGxvY2FsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsQXNpblxuXAoJbGxBc2luKCR7MTpmbG9hdCB2YWx9KVxuXApzbmlwcGV0IGxsQXRhbjJcblwKCWxsQXRhbjIoJHsxOmZsb2F0IHl9LCAkezI6ZmxvYXQgeH0pXG5cCnNuaXBwZXQgbGxBdHRhY2hUb0F2YXRhclxuXAoJbGxBdHRhY2hUb0F2YXRhcigkezE6aW50ZWdlciBhdHRhY2hfcG9pbnR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxBdHRhY2hUb0F2YXRhclRlbXBcblwKCWxsQXR0YWNoVG9BdmF0YXJUZW1wKCR7MTppbnRlZ2VyIGF0dGFjaF9wb2ludH0pO1xuXAoJJDBcblwKc25pcHBldCBsbEF2YXRhck9uTGlua1NpdFRhcmdldFxuXAoJbGxBdmF0YXJPbkxpbmtTaXRUYXJnZXQoJHsxOmludGVnZXIgbGlua30pXG5cCnNuaXBwZXQgbGxBdmF0YXJPblNpdFRhcmdldFxuXAoJbGxBdmF0YXJPblNpdFRhcmdldCgpXG5cCnNuaXBwZXQgbGxBeGVzMlJvdFxuXAoJbGxBeGVzMlJvdCgkezE6dmVjdG9yIGZ3ZH0sICR7Mjp2ZWN0b3IgbGVmdH0sICR7Mzp2ZWN0b3IgdXB9KVxuXApzbmlwcGV0IGxsQXhpc0FuZ2xlMlJvdFxuXAoJbGxBeGlzQW5nbGUyUm90KCR7MTp2ZWN0b3IgYXhpc30sICR7MjpmbG9hdCBhbmdsZX0pXG5cCnNuaXBwZXQgbGxCYXNlNjRUb0ludGVnZXJcblwKCWxsQmFzZTY0VG9JbnRlZ2VyKCR7MTpzdHJpbmcgc3RyfSlcblwKc25pcHBldCBsbEJhc2U2NFRvU3RyaW5nXG5cCglsbEJhc2U2NFRvU3RyaW5nKCR7MTpzdHJpbmcgc3RyfSlcblwKc25pcHBldCBsbEJyZWFrQWxsTGlua3NcblwKCWxsQnJlYWtBbGxMaW5rcygpO1xuXAoJJDBcblwKc25pcHBldCBsbEJyZWFrTGlua1xuXAoJbGxCcmVha0xpbmsoJHsxOmludGVnZXIgbGlua30pO1xuXAoJJDBcblwKc25pcHBldCBsbENhc3RSYXlcblwKCWxsQ2FzdFJheSgkezE6dmVjdG9yIHN0YXJ0fSwgJHsyOnZlY3RvciBlbmR9LCAkezM6bGlzdCBvcHRpb25zfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsQ2VpbFxuXAoJbGxDZWlsKCR7MTpmbG9hdCB2YWx9KVxuXApzbmlwcGV0IGxsQ2xlYXJDYW1lcmFQYXJhbXNcblwKCWxsQ2xlYXJDYW1lcmFQYXJhbXMoKTtcblwKCSQwXG5cCnNuaXBwZXQgbGxDbGVhckxpbmtNZWRpYVxuXAoJbGxDbGVhckxpbmtNZWRpYSgkezE6aW50ZWdlciBsaW5rfSwgJHsyOmludGVnZXIgZmFjZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbENsZWFyUHJpbU1lZGlhXG5cCglsbENsZWFyUHJpbU1lZGlhKCR7MTppbnRlZ2VyIGZhY2V9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxDbG9zZVJlbW90ZURhdGFDaGFubmVsXG5cCglsbENsb3NlUmVtb3RlRGF0YUNoYW5uZWwoJHsxOmtleSBjaGFubmVsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsQ29sbGlzaW9uRmlsdGVyXG5cCglsbENvbGxpc2lvbkZpbHRlcigkezE6c3RyaW5nIG5hbWV9LCAkezI6a2V5IGlkfSwgJHszOmludGVnZXIgYWNjZXB0fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsQ29sbGlzaW9uU291bmRcblwKCWxsQ29sbGlzaW9uU291bmQoJHsxOnN0cmluZyBpbXBhY3Rfc291bmR9LCAkezI6ZmxvYXQgaW1wYWN0X3ZvbHVtZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbENvc1xuXAoJbGxDb3MoJHsxOmZsb2F0IHRoZXRhfSlcblwKc25pcHBldCBsbENyZWF0ZUNoYXJhY3RlclxuXAoJbGxDcmVhdGVDaGFyYWN0ZXIoJHsxOmxpc3Qgb3B0aW9uc30pO1xuXAoJJDBcblwKc25pcHBldCBsbENyZWF0ZUtleVZhbHVlXG5cCglsbENyZWF0ZUtleVZhbHVlKCR7MTpzdHJpbmcga30pXG5cCnNuaXBwZXQgbGxDcmVhdGVMaW5rXG5cCglsbENyZWF0ZUxpbmsoJHsxOmtleSB0YXJnZXR9LCAkezI6aW50ZWdlciBwYXJlbnR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxDU1YyTGlzdFxuXAoJbGxDU1YyTGlzdCgkezE6c3RyaW5nIHNyY30pXG5cCnNuaXBwZXQgbGxEYXRhU2l6ZUtleVZhbHVlXG5cCglsbERhdGFTaXplS2V5VmFsdWUoKVxuXApzbmlwcGV0IGxsRGVsZXRlQ2hhcmFjdGVyXG5cCglsbERlbGV0ZUNoYXJhY3RlcigpO1xuXAoJJDBcblwKc25pcHBldCBsbERlbGV0ZUtleVZhbHVlXG5cCglsbERlbGV0ZUtleVZhbHVlKCR7MTpzdHJpbmcga30pXG5cCnNuaXBwZXQgbGxEZWxldGVTdWJMaXN0XG5cCglsbERlbGV0ZVN1Ykxpc3QoJHsxOmxpc3Qgc3JjfSwgJHsyOmludGVnZXIgc3RhcnR9LCAkezM6aW50ZWdlciBlbmR9KVxuXApzbmlwcGV0IGxsRGVsZXRlU3ViU3RyaW5nXG5cCglsbERlbGV0ZVN1YlN0cmluZygkezE6c3RyaW5nIHNyY30sICR7MjppbnRlZ2VyIHN0YXJ0fSwgJHszOmludGVnZXIgZW5kfSlcblwKc25pcHBldCBsbERldGFjaEZyb21BdmF0YXJcblwKCWxsRGV0YWNoRnJvbUF2YXRhcigpO1xuXAoJJDBcblwKc25pcHBldCBsbERldGVjdGVkR3JhYlxuXAoJbGxEZXRlY3RlZEdyYWIoJHsxOmludGVnZXIgbnVtYmVyfSlcblwKc25pcHBldCBsbERldGVjdGVkR3JvdXBcblwKCWxsRGV0ZWN0ZWRHcm91cCgkezE6aW50ZWdlciBudW1iZXJ9KVxuXApzbmlwcGV0IGxsRGV0ZWN0ZWRLZXlcblwKCWxsRGV0ZWN0ZWRLZXkoJHsxOmludGVnZXIgbnVtYmVyfSlcblwKc25pcHBldCBsbERldGVjdGVkTGlua051bWJlclxuXAoJbGxEZXRlY3RlZExpbmtOdW1iZXIoJHsxOmludGVnZXIgbnVtYmVyfSlcblwKc25pcHBldCBsbERldGVjdGVkTmFtZVxuXAoJbGxEZXRlY3RlZE5hbWUoJHsxOmludGVnZXIgbnVtYmVyfSlcblwKc25pcHBldCBsbERldGVjdGVkT3duZXJcblwKCWxsRGV0ZWN0ZWRPd25lcigkezE6aW50ZWdlciBudW1iZXJ9KVxuXApzbmlwcGV0IGxsRGV0ZWN0ZWRQb3NcblwKCWxsRGV0ZWN0ZWRQb3NsKCR7MTppbnRlZ2VyIG51bWJlcn0pXG5cCnNuaXBwZXQgbGxEZXRlY3RlZFJvdFxuXAoJbGxEZXRlY3RlZFJvdCgkezE6aW50ZWdlciBudW1iZXJ9KVxuXApzbmlwcGV0IGxsRGV0ZWN0ZWRUb3VjaEJpbm9ybWFsXG5cCglsbERldGVjdGVkVG91Y2hCaW5vcm1hbCgkezE6aW50ZWdlciBudW1iZXJ9KVxuXApzbmlwcGV0IGxsRGV0ZWN0ZWRUb3VjaEZhY2VcblwKCWxsRGV0ZWN0ZWRUb3VjaEZhY2UoJHsxOmludGVnZXIgbnVtYmVyfSlcblwKc25pcHBldCBsbERldGVjdGVkVG91Y2hOb3JtYWxcblwKCWxsRGV0ZWN0ZWRUb3VjaE5vcm1hbCgkezE6aW50ZWdlciBudW1iZXJ9KVxuXApzbmlwcGV0IGxsRGV0ZWN0ZWRUb3VjaFBvc1xuXAoJbGxEZXRlY3RlZFRvdWNoUG9zKCR7MTppbnRlZ2VyIG51bWJlcn0pXG5cCnNuaXBwZXQgbGxEZXRlY3RlZFRvdWNoU1RcblwKCWxsRGV0ZWN0ZWRUb3VjaFNUKCR7MTppbnRlZ2VyIG51bWJlcn0pXG5cCnNuaXBwZXQgbGxEZXRlY3RlZFRvdWNoVVZcblwKCWxsRGV0ZWN0ZWRUb3VjaFVWKCR7MTppbnRlZ2VyIG51bWJlcn0pXG5cCnNuaXBwZXQgbGxEZXRlY3RlZFR5cGVcblwKCWxsRGV0ZWN0ZWRUeXBlKCR7MTppbnRlZ2VyIG51bWJlcn0pXG5cCnNuaXBwZXQgbGxEZXRlY3RlZFZlbFxuXAoJbGxEZXRlY3RlZFZlbCgkezE6aW50ZWdlciBudW1iZXJ9KVxuXApzbmlwcGV0IGxsRGlhbG9nXG5cCglsbERpYWxvZygkezE6a2V5IGFnZW50fSwgJHsyOnN0cmluZyBtZXNzYWdlfSwgJHszOmxpc3QgYnV0dG9uc30sICR7NDppbnRlZ2VyIGNoYW5uZWx9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxEaWVcblwKCWxsRGllKCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsRHVtcExpc3QyU3RyaW5nXG5cCglsbER1bXBMaXN0MlN0cmluZygkezE6bGlzdCBzcmN9LCAkezI6c3RyaW5nIHNlcGFyYXRvcn0pXG5cCnNuaXBwZXQgbGxFZGdlT2ZXb3JsZFxuXAoJbGxFZGdlT2ZXb3JsZCgkezE6dmVjdG9yIHBvc30sICR7Mjp2ZWN0b3IgZGlyfSlcblwKc25pcHBldCBsbEVqZWN0RnJvbUxhbmRcblwKCWxsRWplY3RGcm9tTGFuZCgkezE6a2V5IGFnZW50fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsRW1haWxcblwKCWxsRW1haWwoJHsxOnN0cmluZyBhZGRyZXNzfSwgJHsyOnN0cmluZyBzdWJqZWN0fSwgJHszOnN0cmluZyBtZXNzYWdlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsRXNjYXBlVVJMXG5cCglsbEVzY2FwZVVSTCgkezE6c3RyaW5nIHVybH0pXG5cCnNuaXBwZXQgbGxFdWxlcjJSb3RcblwKCWxsRXVsZXIyUm90KCR7MTp2ZWN0b3Igdn0pXG5cCnNuaXBwZXQgbGxFeGVjQ2hhcmFjdGVyQ21kXG5cCglsbEV4ZWNDaGFyYWN0ZXJDbWQoJHsxOmludGVnZXIgY29tbWFuZH0sICR7MjpsaXN0IG9wdGlvbnN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxFdmFkZVxuXAoJbGxFdmFkZSgkezE6a2V5IHRhcmdldH0sICR7MjpsaXN0IG9wdGlvbnN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxGYWJzXG5cCglsbEZhYnMoJHsxOmZsb2F0IHZhbH0pXG5cCnNuaXBwZXQgbGxGbGVlRnJvbVxuXAoJbGxGbGVlRnJvbSgkezE6dmVjdG9yIHBvc2l0aW9ufSwgJHsyOmZsb2F0IGRpc3RhbmNlfSwgJHszOmxpc3Qgb3B0aW9uc30pO1xuXAoJJDBcblwKc25pcHBldCBsbEZsb29yXG5cCglsbEZsb29yKCR7MTpmbG9hdCB2YWx9KVxuXApzbmlwcGV0IGxsRm9yY2VNb3VzZWxvb2tcblwKCWxsRm9yY2VNb3VzZWxvb2soJHsxOmludGVnZXIgbW91c2Vsb29rfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsRnJhbmRcblwKCWxsRnJhbmQoJHsxOmZsb2F0IG1hZ30pXG5cCnNuaXBwZXQgbGxHZW5lcmF0ZUtleVxuXAoJbGxHZW5lcmF0ZUtleSgpXG5cCnNuaXBwZXQgbGxHZXRBY2NlbFxuXAoJbGxHZXRBY2NlbCgpXG5cCnNuaXBwZXQgbGxHZXRBZ2VudEluZm9cblwKCWxsR2V0QWdlbnRJbmZvKCR7MTprZXkgaWR9KVxuXApzbmlwcGV0IGxsR2V0QWdlbnRMYW5ndWFnZVxuXAoJbGxHZXRBZ2VudExhbmd1YWdlKCR7MTprZXkgYWdlbnR9KVxuXApzbmlwcGV0IGxsR2V0QWdlbnRMaXN0XG5cCglsbEdldEFnZW50TGlzdCgkezE6aW50ZWdlciBzY29wZX0sICR7MjpsaXN0IG9wdGlvbnN9KVxuXApzbmlwcGV0IGxsR2V0QWdlbnRTaXplXG5cCglsbEdldEFnZW50U2l6ZSgkezE6a2V5IGFnZW50fSlcblwKc25pcHBldCBsbEdldEFscGhhXG5cCglsbEdldEFscGhhKCR7MTppbnRlZ2VyIGZhY2V9KVxuXApzbmlwcGV0IGxsR2V0QW5kUmVzZXRUaW1lXG5cCglsbEdldEFuZFJlc2V0VGltZSgpXG5cCnNuaXBwZXQgbGxHZXRBbmltYXRpb25cblwKCWxsR2V0QW5pbWF0aW9uKCR7MTprZXkgaWR9KVxuXApzbmlwcGV0IGxsR2V0QW5pbWF0aW9uTGlzdFxuXAoJbGxHZXRBbmltYXRpb25MaXN0KCR7MTprZXkgYWdlbnR9KVxuXApzbmlwcGV0IGxsR2V0QW5pbWF0aW9uT3ZlcnJpZGVcblwKCWxsR2V0QW5pbWF0aW9uT3ZlcnJpZGUoJHsxOnN0cmluZyBhbmltX3N0YXRlfSlcblwKc25pcHBldCBsbEdldEF0dGFjaGVkXG5cCglsbEdldEF0dGFjaGVkKClcblwKc25pcHBldCBsbEdldEF0dGFjaGVkTGlzdFxuXAoJbGxHZXRBdHRhY2hlZExpc3QoJHsxOmtleSBpZH0pXG5cCnNuaXBwZXQgbGxHZXRCb3VuZGluZ0JveFxuXAoJbGxHZXRCb3VuZGluZ0JveCgkezE6a2V5IG9iamVjdH0pXG5cCnNuaXBwZXQgbGxHZXRDYW1lcmFQb3NcblwKCWxsR2V0Q2FtZXJhUG9zKClcblwKc25pcHBldCBsbEdldENhbWVyYVJvdFxuXAoJbGxHZXRDYW1lcmFSb3QoKVxuXApzbmlwcGV0IGxsR2V0Q2VudGVyT2ZNYXNzXG5cCglsbEdldENlbnRlck9mTWFzcygpXG5cCnNuaXBwZXQgbGxHZXRDbG9zZXN0TmF2UG9pbnRcblwKCWxsR2V0Q2xvc2VzdE5hdlBvaW50KCR7MTp2ZWN0b3IgcG9pbnR9LCAkezI6bGlzdCBvcHRpb25zfSlcblwKc25pcHBldCBsbEdldENvbG9yXG5cCglsbEdldENvbG9yKCR7MTppbnRlZ2VyIGZhY2V9KVxuXApzbmlwcGV0IGxsR2V0Q3JlYXRvclxuXAoJbGxHZXRDcmVhdG9yKClcblwKc25pcHBldCBsbEdldERhdGVcblwKCWxsR2V0RGF0ZSgpXG5cCnNuaXBwZXQgbGxHZXREaXNwbGF5TmFtZVxuXAoJbGxHZXREaXNwbGF5TmFtZSgkezE6a2V5IGlkfSlcblwKc25pcHBldCBsbEdldEVuZXJneVxuXAoJbGxHZXRFbmVyZ3koKVxuXApzbmlwcGV0IGxsR2V0RW52XG5cCglsbEdldEVudigkezE6c3RyaW5nIG5hbWV9KVxuXApzbmlwcGV0IGxsR2V0RXhwZXJpZW5jZURldGFpbHNcblwKCWxsR2V0RXhwZXJpZW5jZURldGFpbHMoJHsxOmtleSBleHBlcmllbmNlX2lkfSlcblwKc25pcHBldCBsbEdldEV4cGVyaWVuY2VFcnJvck1lc3NhZ2VcblwKCWxsR2V0RXhwZXJpZW5jZUVycm9yTWVzc2FnZSgkezE6aW50ZWdlciBlcnJvcn0pXG5cCnNuaXBwZXQgbGxHZXRGb3JjZVxuXAoJbGxHZXRGb3JjZSgpXG5cCnNuaXBwZXQgbGxHZXRGcmVlTWVtb3J5XG5cCglsbEdldEZyZWVNZW1vcnkoKVxuXApzbmlwcGV0IGxsR2V0RnJlZVVSTHNcblwKCWxsR2V0RnJlZVVSTHMoKVxuXApzbmlwcGV0IGxsR2V0R2VvbWV0cmljQ2VudGVyXG5cCglsbEdldEdlb21ldHJpY0NlbnRlcigpXG5cCnNuaXBwZXQgbGxHZXRHTVRjbG9ja1xuXAoJbGxHZXRHTVRjbG9jaygpXG5cCnNuaXBwZXQgbGxHZXRIVFRQSGVhZGVyXG5cCglsbEdldEhUVFBIZWFkZXIoJHsxOmtleSByZXF1ZXN0X2lkfSwgJHsyOnN0cmluZyBoZWFkZXJ9KVxuXApzbmlwcGV0IGxsR2V0SW52ZW50b3J5Q3JlYXRvclxuXAoJbGxHZXRJbnZlbnRvcnlDcmVhdG9yKCR7MTpzdHJpbmcgaXRlbX0pXG5cCnNuaXBwZXQgbGxHZXRJbnZlbnRvcnlLZXlcblwKCWxsR2V0SW52ZW50b3J5S2V5KCR7MTpzdHJpbmcgbmFtZX0pXG5cCnNuaXBwZXQgbGxHZXRJbnZlbnRvcnlOYW1lXG5cCglsbEdldEludmVudG9yeU5hbWUoJHsxOmludGVnZXIgdHlwZX0sICR7MjppbnRlZ2VyIG51bWJlcn0pXG5cCnNuaXBwZXQgbGxHZXRJbnZlbnRvcnlOdW1iZXJcblwKCWxsR2V0SW52ZW50b3J5TnVtYmVyKCR7MTppbnRlZ2VyIHR5cGV9KVxuXApzbmlwcGV0IGxsR2V0SW52ZW50b3J5UGVybU1hc2tcblwKCWxsR2V0SW52ZW50b3J5UGVybU1hc2soJHsxOnN0cmluZyBpdGVtfSwgJHsyOmludGVnZXIgbWFza30pXG5cCnNuaXBwZXQgbGxHZXRJbnZlbnRvcnlUeXBlXG5cCglsbEdldEludmVudG9yeVR5cGUoJHsxOnN0cmluZyBuYW1lfSlcblwKc25pcHBldCBsbEdldEtleVxuXAoJbGxHZXRLZXkoKVxuXApzbmlwcGV0IGxsR2V0TGFuZE93bmVyQXRcblwKCWxsR2V0TGFuZE93bmVyQXQoJHsxOnZlY3RvciBwb3N9KVxuXApzbmlwcGV0IGxsR2V0TGlua0tleVxuXAoJbGxHZXRMaW5rS2V5KCR7MTppbnRlZ2VyIGxpbmt9KVxuXApzbmlwcGV0IGxsR2V0TGlua01lZGlhXG5cCglsbEdldExpbmtNZWRpYSgkezE6aW50ZWdlciBsaW5rfSwgJHsyOmludGVnZXIgZmFjZX0sICR7MzpsaXN0IHBhcmFtc30pXG5cCnNuaXBwZXQgbGxHZXRMaW5rTmFtZVxuXAoJbGxHZXRMaW5rTmFtZSgkezE6aW50ZWdlciBsaW5rfSlcblwKc25pcHBldCBsbEdldExpbmtOdW1iZXJcblwKCWxsR2V0TGlua051bWJlcigpXG5cCnNuaXBwZXQgbGxHZXRMaW5rTnVtYmVyT2ZTaWRlc1xuXAoJbGxHZXRMaW5rTnVtYmVyT2ZTaWRlcygkezE6aW50ZWdlciBsaW5rfSlcblwKc25pcHBldCBsbEdldExpbmtQcmltaXRpdmVQYXJhbXNcblwKCWxsR2V0TGlua1ByaW1pdGl2ZVBhcmFtcygkezE6aW50ZWdlciBsaW5rfSwgJHsyOmxpc3QgcGFyYW1zfSlcblwKc25pcHBldCBsbEdldExpc3RFbnRyeVR5cGVcblwKCWxsR2V0TGlzdEVudHJ5VHlwZSgkezE6bGlzdCBzcmN9LCAkezI6aW50ZWdlciBpbmRleH0pXG5cCnNuaXBwZXQgbGxHZXRMaXN0TGVuZ3RoXG5cCglsbEdldExpc3RMZW5ndGgoJHsxOmxpc3Qgc3JjfSlcblwKc25pcHBldCBsbEdldExvY2FsUG9zXG5cCglsbEdldExvY2FsUG9zKClcblwKc25pcHBldCBsbEdldExvY2FsUm90XG5cCglsbEdldExvY2FsUm90KClcblwKc25pcHBldCBsbEdldE1hc3NcblwKCWxsR2V0TWFzcygpXG5cCnNuaXBwZXQgbGxHZXRNYXNzTUtTXG5cCglsbEdldE1hc3NNS1MoKVxuXApzbmlwcGV0IGxsR2V0TWF4U2NhbGVGYWN0b3JcblwKCWxsR2V0TWF4U2NhbGVGYWN0b3IoKVxuXApzbmlwcGV0IGxsR2V0TWVtb3J5TGltaXRcblwKCWxsR2V0TWVtb3J5TGltaXQoKVxuXApzbmlwcGV0IGxsR2V0TWluU2NhbGVGYWN0b3JcblwKCWxsR2V0TWluU2NhbGVGYWN0b3IoKVxuXApzbmlwcGV0IGxsR2V0TmV4dEVtYWlsXG5cCglsbEdldE5leHRFbWFpbCgkezE6c3RyaW5nIGFkZHJlc3N9LCAkezI6c3RyaW5nIHN1YmplY3R9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxHZXROb3RlY2FyZExpbmVcblwKCWxsR2V0Tm90ZWNhcmRMaW5lKCR7MTpzdHJpbmcgbmFtZX0sICR7MjppbnRlZ2VyIGxpbmV9KVxuXApzbmlwcGV0IGxsR2V0TnVtYmVyT2ZOb3RlY2FyZExpbmVzXG5cCglsbEdldE51bWJlck9mTm90ZWNhcmRMaW5lcygkezE6c3RyaW5nIG5hbWV9KVxuXApzbmlwcGV0IGxsR2V0TnVtYmVyT2ZQcmltc1xuXAoJbGxHZXROdW1iZXJPZlByaW1zKClcblwKc25pcHBldCBsbEdldE51bWJlck9mU2lkZXNcblwKCWxsR2V0TnVtYmVyT2ZTaWRlcygpXG5cCnNuaXBwZXQgbGxHZXRPYmplY3REZXNjXG5cCglsbEdldE9iamVjdERlc2MoKVxuXApzbmlwcGV0IGxsR2V0T2JqZWN0RGV0YWlsc1xuXAoJbGxHZXRPYmplY3REZXRhaWxzKCR7MTprZXkgaWR9LCAkezI6bGlzdCBwYXJhbXN9KVxuXApzbmlwcGV0IGxsR2V0T2JqZWN0TWFzc1xuXAoJbGxHZXRPYmplY3RNYXNzKCR7MTprZXkgaWR9KVxuXApzbmlwcGV0IGxsR2V0T2JqZWN0TmFtZVxuXAoJbGxHZXRPYmplY3ROYW1lKClcblwKc25pcHBldCBsbEdldE9iamVjdFBlcm1NYXNrXG5cCglsbEdldE9iamVjdFBlcm1NYXNrKCR7MTppbnRlZ2VyIG1hc2t9KVxuXApzbmlwcGV0IGxsR2V0T2JqZWN0UHJpbUNvdW50XG5cCglsbEdldE9iamVjdFByaW1Db3VudCgkezE6a2V5IHByaW19KVxuXApzbmlwcGV0IGxsR2V0T21lZ2FcblwKCWxsR2V0T21lZ2EoKVxuXApzbmlwcGV0IGxsR2V0T3duZXJcblwKCWxsR2V0T3duZXIoKVxuXApzbmlwcGV0IGxsR2V0T3duZXJLZXlcblwKCWxsR2V0T3duZXJLZXkoJHsxOmtleSBpZH0pXG5cCnNuaXBwZXQgbGxHZXRQYXJjZWxEZXRhaWxzXG5cCglsbEdldFBhcmNlbERldGFpbHMoJHsxOnZlY3RvciBwb3N9LCAkezI6bGlzdCBwYXJhbXN9KVxuXApzbmlwcGV0IGxsR2V0UGFyY2VsRmxhZ3NcblwKCWxsR2V0UGFyY2VsRmxhZ3MoJHsxOnZlY3RvciBwb3N9KVxuXApzbmlwcGV0IGxsR2V0UGFyY2VsTWF4UHJpbXNcblwKCWxsR2V0UGFyY2VsTWF4UHJpbXMoJHsxOnZlY3RvciBwb3N9LCAkezI6aW50ZWdlciBzaW1fd2lkZX0pXG5cCnNuaXBwZXQgbGxHZXRQYXJjZWxNdXNpY1VSTFxuXAoJbGxHZXRQYXJjZWxNdXNpY1VSTCgpXG5cCnNuaXBwZXQgbGxHZXRQYXJjZWxQcmltQ291bnRcblwKCWxsR2V0UGFyY2VsUHJpbUNvdW50KCR7MTp2ZWN0b3IgcG9zfSwgJHsyOmludGVnZXIgY2F0ZWdvcnl9LCAkezM6aW50ZWdlciBzaW1fd2lkZX0pXG5cCnNuaXBwZXQgbGxHZXRQYXJjZWxQcmltT3duZXJzXG5cCglsbEdldFBhcmNlbFByaW1Pd25lcnMoJHsxOnZlY3RvciBwb3N9KVxuXApzbmlwcGV0IGxsR2V0UGVybWlzc2lvbnNcblwKCWxsR2V0UGVybWlzc2lvbnMoKVxuXApzbmlwcGV0IGxsR2V0UGVybWlzc2lvbnNLZXlcblwKCWxsR2V0UGVybWlzc2lvbnNLZXkoKVxuXApzbmlwcGV0IGxsR2V0UGh5c2ljc01hdGVyaWFsXG5cCglsbEdldFBoeXNpY3NNYXRlcmlhbCgpXG5cCnNuaXBwZXQgbGxHZXRQb3NcblwKCWxsR2V0UG9zKClcblwKc25pcHBldCBsbEdldFByaW1pdGl2ZVBhcmFtc1xuXAoJbGxHZXRQcmltaXRpdmVQYXJhbXMoJHsxOmxpc3QgcGFyYW1zfSlcblwKc25pcHBldCBsbEdldFByaW1NZWRpYVBhcmFtc1xuXAoJbGxHZXRQcmltTWVkaWFQYXJhbXMoJHsxOmludGVnZXIgZmFjZX0sICR7MjpsaXN0IHBhcmFtc30pXG5cCnNuaXBwZXQgbGxHZXRSZWdpb25BZ2VudENvdW50XG5cCglsbEdldFJlZ2lvbkFnZW50Q291bnQoKVxuXApzbmlwcGV0IGxsR2V0UmVnaW9uQ29ybmVyXG5cCglsbEdldFJlZ2lvbkNvcm5lcigpXG5cCnNuaXBwZXQgbGxHZXRSZWdpb25GbGFnc1xuXAoJbGxHZXRSZWdpb25GbGFncygpXG5cCnNuaXBwZXQgbGxHZXRSZWdpb25GUFNcblwKCWxsR2V0UmVnaW9uRlBTKClcblwKc25pcHBldCBsbEdldFJlZ2lvbk5hbWVcblwKCWxsR2V0UmVnaW9uTmFtZSgpXG5cCnNuaXBwZXQgbGxHZXRSZWdpb25UaW1lRGlsYXRpb25cblwKCWxsR2V0UmVnaW9uVGltZURpbGF0aW9uKClcblwKc25pcHBldCBsbEdldFJvb3RQb3NpdGlvblxuXAoJbGxHZXRSb290UG9zaXRpb24oKVxuXApzbmlwcGV0IGxsR2V0Um9vdFJvdGF0aW9uXG5cCglsbEdldFJvb3RSb3RhdGlvbigpXG5cCnNuaXBwZXQgbGxHZXRSb3RcblwKCWxsR2V0Um90KClcblwKc25pcHBldCBsbEdldFNjYWxlXG5cCglsbEdldFNjYWxlKClcblwKc25pcHBldCBsbEdldFNjcmlwdE5hbWVcblwKCWxsR2V0U2NyaXB0TmFtZSgpXG5cCnNuaXBwZXQgbGxHZXRTY3JpcHRTdGF0ZVxuXAoJbGxHZXRTY3JpcHRTdGF0ZSgkezE6c3RyaW5nIHNjcmlwdH0pXG5cCnNuaXBwZXQgbGxHZXRTaW1TdGF0c1xuXAoJbGxHZXRTaW1TdGF0cygkezE6aW50ZWdlciBzdGF0X3R5cGV9KVxuXApzbmlwcGV0IGxsR2V0U2ltdWxhdG9ySG9zdG5hbWVcblwKCWxsR2V0U2ltdWxhdG9ySG9zdG5hbWUoKVxuXApzbmlwcGV0IGxsR2V0U1BNYXhNZW1vcnlcblwKCWxsR2V0U1BNYXhNZW1vcnkoKVxuXApzbmlwcGV0IGxsR2V0U3RhcnRQYXJhbWV0ZXJcblwKCWxsR2V0U3RhcnRQYXJhbWV0ZXIoKVxuXApzbmlwcGV0IGxsR2V0U3RhdGljUGF0aFxuXAoJbGxHZXRTdGF0aWNQYXRoKCR7MTp2ZWN0b3Igc3RhcnR9LCAkezI6dmVjdG9yIGVuZH0sICR7MzpmbG9hdCByYWRpdXN9LCAkezQ6bGlzdCBwYXJhbXN9KVxuXApzbmlwcGV0IGxsR2V0U3RhdHVzXG5cCglsbEdldFN0YXR1cygkezE6aW50ZWdlciBzdGF0dXN9KVxuXApzbmlwcGV0IGxsR2V0U3ViU3RyaW5nXG5cCglsbEdldFN1YlN0cmluZygkezE6c3RyaW5nIHNyY30sICR7MjppbnRlZ2VyIHN0YXJ0fSwgJHszOmludGVnZXIgZW5kfSlcblwKc25pcHBldCBsbEdldFN1bkRpcmVjdGlvblxuXAoJbGxHZXRTdW5EaXJlY3Rpb24oKVxuXApzbmlwcGV0IGxsR2V0VGV4dHVyZVxuXAoJbGxHZXRUZXh0dXJlKCR7MTppbnRlZ2VyIGZhY2V9KVxuXApzbmlwcGV0IGxsR2V0VGV4dHVyZU9mZnNldFxuXAoJbGxHZXRUZXh0dXJlT2Zmc2V0KCR7MTppbnRlZ2VyIGZhY2V9KVxuXApzbmlwcGV0IGxsR2V0VGV4dHVyZVJvdFxuXAoJbGxHZXRUZXh0dXJlUm90KCR7MTppbnRlZ2VyIGZhY2V9KVxuXApzbmlwcGV0IGxsR2V0VGV4dHVyZVNjYWxlXG5cCglsbEdldFRleHR1cmVTY2FsZSgkezE6aW50ZWdlciBmYWNlfSlcblwKc25pcHBldCBsbEdldFRpbWVcblwKCWxsR2V0VGltZSgpXG5cCnNuaXBwZXQgbGxHZXRUaW1lT2ZEYXlcblwKCWxsR2V0VGltZU9mRGF5KClcblwKc25pcHBldCBsbEdldFRpbWVzdGFtcFxuXAoJbGxHZXRUaW1lc3RhbXAoKVxuXApzbmlwcGV0IGxsR2V0VG9ycXVlXG5cCglsbEdldFRvcnF1ZSgpXG5cCnNuaXBwZXQgbGxHZXRVbml4VGltZVxuXAoJbGxHZXRVbml4VGltZSgpXG5cCnNuaXBwZXQgbGxHZXRVc2VkTWVtb3J5XG5cCglsbEdldFVzZWRNZW1vcnkoKVxuXApzbmlwcGV0IGxsR2V0VXNlcm5hbWVcblwKCWxsR2V0VXNlcm5hbWUoJHsxOmtleSBpZH0pXG5cCnNuaXBwZXQgbGxHZXRWZWxcblwKCWxsR2V0VmVsKClcblwKc25pcHBldCBsbEdldFdhbGxjbG9ja1xuXAoJbGxHZXRXYWxsY2xvY2soKVxuXApzbmlwcGV0IGxsR2l2ZUludmVudG9yeVxuXAoJbGxHaXZlSW52ZW50b3J5KCR7MTprZXkgZGVzdGluYXRpb259LCAkezI6c3RyaW5nIGludmVudG9yeX0pO1xuXAoJJDBcblwKc25pcHBldCBsbEdpdmVJbnZlbnRvcnlMaXN0XG5cCglsbEdpdmVJbnZlbnRvcnlMaXN0KCR7MTprZXkgdGFyZ2V0fSwgJHsyOnN0cmluZyBmb2xkZXJ9LCAkezM6bGlzdCBpbnZlbnRvcnl9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxHaXZlTW9uZXlcblwKCWxsR2l2ZU1vbmV5KCR7MTprZXkgZGVzdGluYXRpb259LCAkezI6aW50ZWdlciBhbW91bnR9KVxuXApzbmlwcGV0IGxsR3JvdW5kXG5cCglsbEdyb3VuZCgkezE6dmVjdG9yIG9mZnNldH0pXG5cCnNuaXBwZXQgbGxHcm91bmRDb250b3VyXG5cCglsbEdyb3VuZENvbnRvdXIoJHsxOnZlY3RvciBvZmZzZXR9KVxuXApzbmlwcGV0IGxsR3JvdW5kTm9ybWFsXG5cCglsbEdyb3VuZE5vcm1hbCgkezE6dmVjdG9yIG9mZnNldH0pXG5cCnNuaXBwZXQgbGxHcm91bmRSZXBlbFxuXAoJbGxHcm91bmRSZXBlbCgkezE6ZmxvYXQgaGVpZ2h0fSwgJHsyOmludGVnZXIgd2F0ZXJ9LCAkezM6ZmxvYXQgdGF1fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsR3JvdW5kU2xvcGVcblwKCWxsR3JvdW5kU2xvcGUoJHsxOnZlY3RvciBvZmZzZXR9KVxuXApzbmlwcGV0IGxsSFRUUFJlcXVlc3RcblwKCWxsSFRUUFJlcXVlc3QoJHsxOnN0cmluZyB1cmx9LCAkezI6bGlzdCBwYXJhbWV0ZXJzfSwgJHszOnN0cmluZyBib2R5fSlcblwKc25pcHBldCBsbEhUVFBSZXNwb25zZVxuXAoJbGxIVFRQUmVzcG9uc2UoJHsxOmtleSByZXF1ZXN0X2lkfSwgJHsyOmludGVnZXIgc3RhdHVzfSwgJHszOnN0cmluZyBib2R5fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsSW5zZXJ0U3RyaW5nXG5cCglsbEluc2VydFN0cmluZygkezE6c3RyaW5nIGRzdH0sICR7MjppbnRlZ2VyIHBvc30sICR7MzpzdHJpbmcgc3JjfSlcblwKc25pcHBldCBsbEluc3RhbnRNZXNzYWdlXG5cCglsbEluc3RhbnRNZXNzYWdlKCR7MTprZXkgdXNlcn0sICR7MjpzdHJpbmcgbWVzc2FnZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbEludGVnZXJUb0Jhc2U2NFxuXAoJbGxJbnRlZ2VyVG9CYXNlNjQoJHsxOmludGVnZXIgbnVtYmVyfSlcblwKc25pcHBldCBsbEpzb24yTGlzdFxuXAoJbGxKc29uMkxpc3QoJHsxOnN0cmluZyBqc29ufSlcblwKc25pcHBldCBsbEpzb25HZXRWYWx1ZVxuXAoJbGxKc29uR2V0VmFsdWUoJHsxOnN0cmluZyBqc29ufSwgJHsyOmxpc3Qgc3BlY2lmaWVyc30pXG5cCnNuaXBwZXQgbGxKc29uU2V0VmFsdWVcblwKCWxsSnNvblNldFZhbHVlKCR7MTpzdHJpbmcganNvbn0sICR7MjpsaXN0IHNwZWNpZmllcnN9LCAkezM6c3RyaW5nIG5ld1ZhbHVlfSlcblwKc25pcHBldCBsbEpzb25WYWx1ZVR5cGVcblwKCWxsSnNvblZhbHVlVHlwZSgkezE6c3RyaW5nIGpzb259LCAkezI6bGlzdCBzcGVjaWZpZXJzfSlcblwKc25pcHBldCBsbEtleTJOYW1lXG5cCglsbEtleTJOYW1lKCR7MTprZXkgaWR9KVxuXApzbmlwcGV0IGxsS2V5Q291bnRLZXlWYWx1ZVxuXAoJbGxLZXlDb3VudEtleVZhbHVlKClcblwKc25pcHBldCBsbEtleXNLZXlWYWx1ZVxuXAoJbGxLZXlzS2V5VmFsdWUoJHsxOmludGVnZXIgZmlyc3R9LCAkezI6aW50ZWdlciBjb3VudH0pXG5cCnNuaXBwZXQgbGxMaW5rUGFydGljbGVTeXN0ZW1cblwKCWxsTGlua1BhcnRpY2xlU3lzdGVtKCR7MTppbnRlZ2VyIGxpbmt9LCAkezI6bGlzdCBydWxlc30pO1xuXAoJJDBcblwKc25pcHBldCBsbExpbmtTaXRUYXJnZXRcblwKCWxsTGlua1NpdFRhcmdldCgkezE6aW50ZWdlciBsaW5rfSwgJHsyOnZlY3RvciBvZmZzZXR9LCAkezM6cm90YXRpb24gcm90fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsTGlzdDJDU1ZcblwKCWxsTGlzdDJDU1YoJHsxOmxpc3Qgc3JjfSlcblwKc25pcHBldCBsbExpc3QyRmxvYXRcblwKCWxsTGlzdDJGbG9hdCgkezE6bGlzdCBzcmN9LCAkezI6aW50ZWdlciBpbmRleH0pXG5cCnNuaXBwZXQgbGxMaXN0MkludGVnZXJcblwKCWxsTGlzdDJJbnRlZ2VyKCR7MTpsaXN0IHNyY30sICR7MjppbnRlZ2VyIGluZGV4fSlcblwKc25pcHBldCBsbExpc3QySnNvblxuXAoJbGxMaXN0Mkpzb24oJHsxOnN0cmluZyB0eXBlfSwgJHsyOmxpc3QgdmFsdWVzfSlcblwKc25pcHBldCBsbExpc3QyS2V5XG5cCglsbExpc3QyS2V5KCR7MTpsaXN0IHNyY30sICR7MjppbnRlZ2VyIGluZGV4fSlcblwKc25pcHBldCBsbExpc3QyTGlzdFxuXAoJbGxMaXN0Mkxpc3QoJHsxOmxpc3Qgc3JjfSwgJHsyOmludGVnZXIgc3RhcnR9LCAkezM6aW50ZWdlciBlbmR9KVxuXApzbmlwcGV0IGxsTGlzdDJMaXN0U3RyaWRlZFxuXAoJbGxMaXN0Mkxpc3RTdHJpZGVkKCR7MTpsaXN0IHNyY30sICR7MjppbnRlZ2VyIHN0YXJ0fSwgJHszOmludGVnZXIgZW5kfSwgJHs0OmludGVnZXIgc3RyaWRlfSlcblwKc25pcHBldCBsbExpc3QyUm90XG5cCglsbExpc3QyUm90KCR7MTpsaXN0IHNyY30sICR7MjppbnRlZ2VyIGluZGV4fSlcblwKc25pcHBldCBsbExpc3QyU3RyaW5nXG5cCglsbExpc3QyU3RyaW5nKCR7MTpsaXN0IHNyY30sICR7MjppbnRlZ2VyIGluZGV4fSlcblwKc25pcHBldCBsbExpc3QyVmVjdG9yXG5cCglsbExpc3QyVmVjdG9yKCR7MTpsaXN0IHNyY30sICR7MjppbnRlZ2VyIGluZGV4fSlcblwKc25pcHBldCBsbExpc3RlblxuXAoJbGxMaXN0ZW4oJHsxOmludGVnZXIgY2hhbm5lbH0sICR7MjpzdHJpbmcgbmFtZX0sICR7MzprZXkgaWR9LCAkezQ6c3RyaW5nIG1zZ30pXG5cCnNuaXBwZXQgbGxMaXN0ZW5Db250cm9sXG5cCglsbExpc3RlbkNvbnRyb2woJHsxOmludGVnZXIgaGFuZGxlfSwgJHsyOmludGVnZXIgYWN0aXZlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsTGlzdGVuUmVtb3ZlXG5cCglsbExpc3RlblJlbW92ZSgkezE6aW50ZWdlciBoYW5kbGV9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxMaXN0RmluZExpc3RcblwKCWxsTGlzdEZpbmRMaXN0KCR7MTpsaXN0IHNyY30sICR7MjpsaXN0IHRlc3R9KVxuXApzbmlwcGV0IGxsTGlzdEluc2VydExpc3RcblwKCWxsTGlzdEluc2VydExpc3QoJHsxOmxpc3QgZGVzdH0sICR7MjpsaXN0IHNyY30sICR7MzppbnRlZ2VyIHN0YXJ0fSlcblwKc25pcHBldCBsbExpc3RSYW5kb21pemVcblwKCWxsTGlzdFJhbmRvbWl6ZSgkezE6bGlzdCBzcmN9LCAkezI6aW50ZWdlciBzdHJpZGV9KVxuXApzbmlwcGV0IGxsTGlzdFJlcGxhY2VMaXN0XG5cCglsbExpc3RSZXBsYWNlTGlzdCgkezE6bGlzdCBkZXN0fSwgJHsyOmxpc3Qgc3JjfSwgJHszOmludGVnZXIgc3RhcnR9LCAkezQ6aW50ZWdlciBlbmR9KVxuXApzbmlwcGV0IGxsTGlzdFNvcnRcblwKCWxsTGlzdFNvcnQoJHsxOmxpc3Qgc3JjfSwgJHsyOmludGVnZXIgc3RyaWRlfSwgJHszOmludGVnZXIgYXNjZW5kaW5nfSlcblwKc25pcHBldCBsbExpc3RTdGF0aXN0aWNzXG5cCglsbExpc3RTdGF0aXN0aWNzKCR7MTppbnRlZ2VyIG9wZXJhdGlvbn0sICR7MjpsaXN0IHNyY30pXG5cCnNuaXBwZXQgbGxMb2FkVVJMXG5cCglsbExvYWRVUkwoJHsxOmtleSBhZ2VudH0sICR7MjpzdHJpbmcgbWVzc2FnZX0sICR7MzpzdHJpbmcgdXJsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsTG9nXG5cCglsbExvZygkezE6ZmxvYXQgdmFsfSlcblwKc25pcHBldCBsbExvZzEwXG5cCglsbExvZzEwKCR7MTpmbG9hdCB2YWx9KVxuXApzbmlwcGV0IGxsTG9va0F0XG5cCglsbExvb2tBdCgkezE6dmVjdG9yIHRhcmdldH0sICR7MjpmbG9hdCBzdHJlbmd0aH0sICR7MzpmbG9hdCBkYW1waW5nfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsTG9vcFNvdW5kXG5cCglsbExvb3BTb3VuZCgkezE6c3RyaW5nIHNvdW5kfSwgJHsyOmZsb2F0IHZvbHVtZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbExvb3BTb3VuZE1hc3RlclxuXAoJbGxMb29wU291bmRNYXN0ZXIoJHsxOnN0cmluZyBzb3VuZH0sICR7MjpmbG9hdCB2b2x1bWV9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxMb29wU291bmRTbGF2ZVxuXAoJbGxMb29wU291bmRTbGF2ZSgkezE6c3RyaW5nIHNvdW5kfSwgJHsyOmZsb2F0IHZvbHVtZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbE1hbmFnZUVzdGF0ZUFjY2Vzc1xuXAoJbGxNYW5hZ2VFc3RhdGVBY2Nlc3MoJHsxOmludGVnZXIgYWN0aW9ufSwgJHsyOmtleSBhZ2VudH0pXG5cCnNuaXBwZXQgbGxNYXBEZXN0aW5hdGlvblxuXAoJbGxNYXBEZXN0aW5hdGlvbigkezE6c3RyaW5nIHNpbW5hbWV9LCAkezI6dmVjdG9yIHBvc30sICR7Mzp2ZWN0b3IgbG9va19hdH0pO1xuXAoJJDBcblwKc25pcHBldCBsbE1ENVN0cmluZ1xuXAoJbGxNRDVTdHJpbmcoJHsxOnN0cmluZyBzcmN9LCAkezI6aW50ZWdlciBub25jZX0pXG5cCnNuaXBwZXQgbGxNZXNzYWdlTGlua2VkXG5cCglsbE1lc3NhZ2VMaW5rZWQoJHsxOmludGVnZXIgbGlua30sICR7MjppbnRlZ2VyIG51bX0sICR7MzpzdHJpbmcgc3RyfSwgJHs0OmtleSBpZH0pO1xuXAoJJDBcblwKc25pcHBldCBsbE1pbkV2ZW50RGVsYXlcblwKCWxsTWluRXZlbnREZWxheSgkezE6ZmxvYXQgZGVsYXl9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxNb2RpZnlMYW5kXG5cCglsbE1vZGlmeUxhbmQoJHsxOmludGVnZXIgYWN0aW9ufSwgJHsyOmludGVnZXIgYnJ1c2h9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxNb2RQb3dcblwKCWxsTW9kUG93KCR7MTppbnRlZ2VyIGF9LCAkezI6aW50ZWdlciBifSwgJHszOmludGVnZXIgY30pXG5cCnNuaXBwZXQgbGxNb3ZlVG9UYXJnZXRcblwKCWxsTW92ZVRvVGFyZ2V0KCR7MTp2ZWN0b3IgdGFyZ2V0fSwgJHsyOmZsb2F0IHRhdX0pO1xuXAoJJDBcblwKc25pcHBldCBsbE5hdmlnYXRlVG9cblwKCWxsTmF2aWdhdGVUbygkezE6dmVjdG9yIHBvc30sICR7MjpsaXN0IG9wdGlvbnN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxPZmZzZXRUZXh0dXJlXG5cCglsbE9mZnNldFRleHR1cmUoJHsxOmZsb2F0IHV9LCAkezI6ZmxvYXQgdn0sICR7MzppbnRlZ2VyIGZhY2V9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxPcGVuUmVtb3RlRGF0YUNoYW5uZWxcblwKCWxsT3BlblJlbW90ZURhdGFDaGFubmVsKCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsT3Zlck15TGFuZFxuXAoJbGxPdmVyTXlMYW5kKCR7MTprZXkgaWR9KVxuXApzbmlwcGV0IGxsT3duZXJTYXlcblwKCWxsT3duZXJTYXkoJHsxOnN0cmluZyBtc2d9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxQYXJjZWxNZWRpYUNvbW1hbmRMaXN0XG5cCglsbFBhcmNlbE1lZGlhQ29tbWFuZExpc3QoJHsxOmxpc3QgY29tbWFuZExpc3R9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxQYXJjZWxNZWRpYVF1ZXJ5XG5cCglsbFBhcmNlbE1lZGlhUXVlcnkoJHsxOmxpc3QgcXVlcnl9KVxuXApzbmlwcGV0IGxsUGFyc2VTdHJpbmcyTGlzdFxuXAoJbGxQYXJzZVN0cmluZzJMaXN0KCR7MTpzdHJpbmcgc3JjfSwgJHsyOmxpc3Qgc2VwYXJhdG9yc30sICR7MzpsaXN0IHNwYWNlcnN9KVxuXApzbmlwcGV0IGxsUGFyc2VTdHJpbmdLZWVwTnVsbHNcblwKCWxsUGFyc2VTdHJpbmdLZWVwTnVsbHMoJHsxOnN0cmluZyBzcmN9LCAkezI6bGlzdCBzZXBhcmF0b3JzfSwgJHszOmxpc3Qgc3BhY2Vyc30pXG5cCnNuaXBwZXQgbGxQYXJ0aWNsZVN5c3RlbVxuXAoJbGxQYXJ0aWNsZVN5c3RlbSgkezE6bGlzdCBydWxlc30pO1xuXAoJJDBcblwKc25pcHBldCBsbFBhc3NDb2xsaXNpb25zXG5cCglsbFBhc3NDb2xsaXNpb25zKCR7MTppbnRlZ2VyIHBhc3N9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxQYXNzVG91Y2hlc1xuXAoJbGxQYXNzVG91Y2hlcygkezE6aW50ZWdlciBwYXNzfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUGF0cm9sUG9pbnRzXG5cCglsbFBhdHJvbFBvaW50cygkezE6bGlzdCBwYXRyb2xQb2ludHN9LCAkezI6bGlzdCBvcHRpb25zfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUGxheVNvdW5kXG5cCglsbFBsYXlTb3VuZCgkezE6c3RyaW5nIHNvdW5kfSwgJHsyOmZsb2F0IHZvbHVtZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFBsYXlTb3VuZFNsYXZlXG5cCglsbFBsYXlTb3VuZFNsYXZlKCR7MTpzdHJpbmcgc291bmR9LCAkezI6ZmxvYXQgdm9sdW1lfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUG93XG5cCglsbFBvdygkezE6ZmxvYXQgYmFzZX0sICR7MjpmbG9hdCBleHBvbmVudH0pXG5cCnNuaXBwZXQgbGxQcmVsb2FkU291bmRcblwKCWxsUHJlbG9hZFNvdW5kKCR7MTpzdHJpbmcgc291bmR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxQdXJzdWVcblwKCWxsUHVyc3VlKCR7MTprZXkgdGFyZ2V0fSwgJHsyOmxpc3Qgb3B0aW9uc30pO1xuXAoJJDBcblwKc25pcHBldCBsbFB1c2hPYmplY3RcblwKCWxsUHVzaE9iamVjdCgkezE6a2V5IHRhcmdldH0sICR7Mjp2ZWN0b3IgaW1wdWxzZX0sICR7Mzp2ZWN0b3IgYW5nX2ltcHVsc2V9LCAkezQ6aW50ZWdlciBsb2NhbH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFJlYWRLZXlWYWx1ZVxuXAoJbGxSZWFkS2V5VmFsdWUoJHsxOnN0cmluZyBrfSlcblwKc25pcHBldCBsbFJlZ2lvblNheVxuXAoJbGxSZWdpb25TYXkoJHsxOmludGVnZXIgY2hhbm5lbH0sICR7MjpzdHJpbmcgbXNnfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVnaW9uU2F5VG9cblwKCWxsUmVnaW9uU2F5VG8oJHsxOmtleSB0YXJnZXR9LCAkezI6aW50ZWdlciBjaGFubmVsfSwgJHszOnN0cmluZyBtc2d9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSZWxlYXNlQ29udHJvbHNcblwKCWxsUmVsZWFzZUNvbnRyb2xzKCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVsZWFzZVVSTFxuXAoJbGxSZWxlYXNlVVJMKCR7MTpzdHJpbmcgdXJsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVtb3RlRGF0YVJlcGx5XG5cCglsbFJlbW90ZURhdGFSZXBseSgkezE6a2V5IGNoYW5uZWx9LCAkezI6a2V5IG1lc3NhZ2VfaWR9LCAkezM6c3RyaW5nIHNkYXRhfSwgJHs0OmludGVnZXIgaWRhdGF9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSZW1vdGVMb2FkU2NyaXB0UGluXG5cCglsbFJlbW90ZUxvYWRTY3JpcHRQaW4oJHsxOmtleSB0YXJnZXR9LCAkezI6c3RyaW5nIG5hbWV9LCAkezM6aW50ZWdlciBwaW59LCAkezQ6aW50ZWdlciBydW5uaW5nfSwgJHs1OmludGVnZXIgc3RhcnRfcGFyYW19KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSZW1vdmVGcm9tTGFuZEJhbkxpc3RcblwKCWxsUmVtb3ZlRnJvbUxhbmRCYW5MaXN0KCR7MTprZXkgYWdlbnR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSZW1vdmVGcm9tTGFuZFBhc3NMaXN0XG5cCglsbFJlbW92ZUZyb21MYW5kUGFzc0xpc3QoJHsxOmtleSBhZ2VudH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFJlbW92ZUludmVudG9yeVxuXAoJbGxSZW1vdmVJbnZlbnRvcnkoJHsxOnN0cmluZyBpdGVtfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVtb3ZlVmVoaWNsZUZsYWdzXG5cCglsbFJlbW92ZVZlaGljbGVGbGFncygkezE6aW50ZWdlciBmbGFnc30pO1xuXAoJJDBcblwKc25pcHBldCBsbFJlcXVlc3RBZ2VudERhdGFcblwKCWxsUmVxdWVzdEFnZW50RGF0YSgkezE6a2V5IGlkfSwgJHsyOmludGVnZXIgZGF0YX0pXG5cCnNuaXBwZXQgbGxSZXF1ZXN0RGlzcGxheU5hbWVcblwKCWxsUmVxdWVzdERpc3BsYXlOYW1lKCR7MTprZXkgaWR9KVxuXApzbmlwcGV0IGxsUmVxdWVzdEV4cGVyaWVuY2VQZXJtaXNzaW9uc1xuXAoJbGxSZXF1ZXN0RXhwZXJpZW5jZVBlcm1pc3Npb25zKCR7MTprZXkgYWdlbnR9LCAkezI6c3RyaW5nIG5hbWV9KVxuXApzbmlwcGV0IGxsUmVxdWVzdEludmVudG9yeURhdGFcblwKCWxsUmVxdWVzdEludmVudG9yeURhdGEoJHsxOnN0cmluZyBuYW1lfSlcblwKc25pcHBldCBsbFJlcXVlc3RQZXJtaXNzaW9uc1xuXAoJbGxSZXF1ZXN0UGVybWlzc2lvbnMoJHsxOmtleSBhZ2VudH0sICR7MjppbnRlZ2VyIHBlcm1pc3Npb25zfSlcblwKc25pcHBldCBsbFJlcXVlc3RTZWN1cmVVUkxcblwKCWxsUmVxdWVzdFNlY3VyZVVSTCgpXG5cCnNuaXBwZXQgbGxSZXF1ZXN0U2ltdWxhdG9yRGF0YVxuXAoJbGxSZXF1ZXN0U2ltdWxhdG9yRGF0YSgkezE6c3RyaW5nIHJlZ2lvbn0sICR7MjppbnRlZ2VyIGRhdGF9KVxuXApzbmlwcGV0IGxsUmVxdWVzdFVSTFxuXAoJbGxSZXF1ZXN0VVJMKClcblwKc25pcHBldCBsbFJlcXVlc3RVc2VybmFtZVxuXAoJbGxSZXF1ZXN0VXNlcm5hbWUoJHsxOmtleSBpZH0pXG5cCnNuaXBwZXQgbGxSZXNldEFuaW1hdGlvbk92ZXJyaWRlXG5cCglsbFJlc2V0QW5pbWF0aW9uT3ZlcnJpZGUoJHsxOnN0cmluZyBhbmltX3N0YXRlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVzZXRMYW5kQmFuTGlzdFxuXAoJbGxSZXNldExhbmRCYW5MaXN0KCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVzZXRMYW5kUGFzc0xpc3RcblwKCWxsUmVzZXRMYW5kUGFzc0xpc3QoKTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSZXNldE90aGVyU2NyaXB0XG5cCglsbFJlc2V0T3RoZXJTY3JpcHQoJHsxOnN0cmluZyBuYW1lfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmVzZXRTY3JpcHRcblwKCWxsUmVzZXRTY3JpcHQoKTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSZXNldFRpbWVcblwKCWxsUmVzZXRUaW1lKCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmV0dXJuT2JqZWN0c0J5SURcblwKCWxsUmV0dXJuT2JqZWN0c0J5SUQoJHsxOmxpc3Qgb2JqZWN0c30pXG5cCnNuaXBwZXQgbGxSZXR1cm5PYmplY3RzQnlPd25lclxuXAoJbGxSZXR1cm5PYmplY3RzQnlPd25lcigkezE6a2V5IG93bmVyfSwgJHsyOmludGVnZXIgc2NvcGV9KVxuXApzbmlwcGV0IGxsUmV6QXRSb290XG5cCglsbFJlekF0Um9vdCgkezE6c3RyaW5nIGludmVudG9yeX0sICR7Mjp2ZWN0b3IgcG9zaXRpb259LCAkezM6dmVjdG9yIHZlbG9jaXR5fSwgJHs0OnJvdGF0aW9uIHJvdH0sICR7NTppbnRlZ2VyIHBhcmFtfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUmV6T2JqZWN0XG5cCglsbFJlek9iamVjdCgkezE6c3RyaW5nIGludmVudG9yeX0sICR7Mjp2ZWN0b3IgcG9zfSwgJHszOnZlY3RvciB2ZWx9LCAkezQ6cm90YXRpb24gcm90fSwgJHs1OmludGVnZXIgcGFyYW19KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSb3QyQW5nbGVcblwKCWxsUm90MkFuZ2xlKCR7MTpyb3RhdGlvbiByb3R9KVxuXApzbmlwcGV0IGxsUm90MkF4aXNcblwKCWxsUm90MkF4aXMoJHsxOnJvdGF0aW9uIHJvdH0pXG5cCnNuaXBwZXQgbGxSb3QyRXVsZXJcblwKCWxsUm90MkV1bGVyKCR7MTpyb3RhdGlvbiBxdWF0fSlcblwKc25pcHBldCBsbFJvdDJGd2RcblwKCWxsUm90MkZ3ZCgkezE6cm90YXRpb24gcX0pXG5cCnNuaXBwZXQgbGxSb3QyTGVmdFxuXAoJbGxSb3QyTGVmdCgkezE6cm90YXRpb24gcX0pXG5cCnNuaXBwZXQgbGxSb3QyVXBcblwKCWxsUm90MlVwKCR7MTpyb3RhdGlvbiBxfSlcblwKc25pcHBldCBsbFJvdGF0ZVRleHR1cmVcblwKCWxsUm90YXRlVGV4dHVyZSgkezE6ZmxvYXQgYW5nbGV9LCAkezI6aW50ZWdlciBmYWNlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsUm90QmV0d2VlblxuXAoJbGxSb3RCZXR3ZWVuKCR7MTp2ZWN0b3Igc3RhcnR9LCAkezI6dmVjdG9yIGVuZH0pXG5cCnNuaXBwZXQgbGxSb3RMb29rQXRcblwKCWxsUm90TG9va0F0KCR7MTpyb3RhdGlvbiB0YXJnZXRfZGlyZWN0aW9ufSwgJHsyOmZsb2F0IHN0cmVuZ3RofSwgJHszOmZsb2F0IGRhbXBpbmd9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSb3RUYXJnZXRcblwKCWxsUm90VGFyZ2V0KCR7MTpyb3RhdGlvbiByb3R9LCAkezI6ZmxvYXQgZXJyb3J9KVxuXApzbmlwcGV0IGxsUm90VGFyZ2V0UmVtb3ZlXG5cCglsbFJvdFRhcmdldFJlbW92ZSgkezE6aW50ZWdlciBoYW5kbGV9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxSb3VuZFxuXAoJbGxSb3VuZCgkezE6ZmxvYXQgdmFsfSlcblwKc25pcHBldCBsbFNhbWVHcm91cFxuXAoJbGxTYW1lR3JvdXAoJHsxOmtleSBncm91cH0pXG5cCnNuaXBwZXQgbGxTYXlcblwKCWxsU2F5KCR7MTppbnRlZ2VyIGNoYW5uZWx9LCAkezI6c3RyaW5nIG1zZ30pO1xuXAoJJDBcblwKc25pcHBldCBsbFNjYWxlQnlGYWN0b3JcblwKCWxsU2NhbGVCeUZhY3RvcigkezE6ZmxvYXQgc2NhbGluZ19mYWN0b3J9KVxuXApzbmlwcGV0IGxsU2NhbGVUZXh0dXJlXG5cCglsbFNjYWxlVGV4dHVyZSgkezE6ZmxvYXQgdX0sICR7MjpmbG9hdCB2fSwgJHszOmludGVnZXIgZmFjZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNjcmlwdERhbmdlclxuXAoJbGxTY3JpcHREYW5nZXIoJHsxOnZlY3RvciBwb3N9KVxuXApzbmlwcGV0IGxsU2NyaXB0UHJvZmlsZXJcblwKCWxsU2NyaXB0UHJvZmlsZXIoJHsxOmludGVnZXIgZmxhZ3N9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZW5kUmVtb3RlRGF0YVxuXAoJbGxTZW5kUmVtb3RlRGF0YSgkezE6a2V5IGNoYW5uZWx9LCAkezI6c3RyaW5nIGRlc3R9LCAkezM6aW50ZWdlciBpZGF0YX0sICR7NDpzdHJpbmcgc2RhdGF9KVxuXApzbmlwcGV0IGxsU2Vuc29yXG5cCglsbFNlbnNvcigkezE6c3RyaW5nIG5hbWV9LCAkezI6a2V5IGlkfSwgJHszOmludGVnZXIgdHlwZX0sICR7NDpmbG9hdCByYW5nZX0sICR7NTpmbG9hdCBhcmN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZW5zb3JSZXBlYXRcblwKCWxsU2Vuc29yUmVwZWF0KCR7MTpzdHJpbmcgbmFtZX0sICR7MjprZXkgaWR9LCAkezM6aW50ZWdlciB0eXBlfSwgJHs0OmZsb2F0IHJhbmdlfSwgJHs1OmZsb2F0IGFyY30sICR7NjpmbG9hdCByYXRlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0QWxwaGFcblwKCWxsU2V0QWxwaGEoJHsxOmZsb2F0IGFscGhhfSwgJHsyOmludGVnZXIgZmFjZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldEFuZ3VsYXJWZWxvY2l0eVxuXAoJbGxTZXRBbmd1bGFyVmVsb2NpdHkoJHsxOnZlY3RvciBmb3JjZX0sICR7MjppbnRlZ2VyIGxvY2FsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0QW5pbWF0aW9uT3ZlcnJpZGVcblwKCWxsU2V0QW5pbWF0aW9uT3ZlcnJpZGUoJHsxOnN0cmluZyBhbmltX3N0YXRlfSwgJHsyOnN0cmluZyBhbmltfSlcblwKc25pcHBldCBsbFNldEJ1b3lhbmN5XG5cCglsbFNldEJ1b3lhbmN5KCR7MTpmbG9hdCBidW95YW5jeX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldENhbWVyYUF0T2Zmc2V0XG5cCglsbFNldENhbWVyYUF0T2Zmc2V0KCR7MTp2ZWN0b3Igb2Zmc2V0fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0Q2FtZXJhRXllT2Zmc2V0XG5cCglsbFNldENhbWVyYUV5ZU9mZnNldCgkezE6dmVjdG9yIG9mZnNldH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldENhbWVyYVBhcmFtc1xuXAoJbGxTZXRDYW1lcmFQYXJhbXMoJHsxOmxpc3QgcnVsZXN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRDbGlja0FjdGlvblxuXAoJbGxTZXRDbGlja0FjdGlvbigkezE6aW50ZWdlciBhY3Rpb259KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRDb2xvclxuXAoJbGxTZXRDb2xvcigkezE6dmVjdG9yIGNvbG9yfSwgJHsyOmludGVnZXIgZmFjZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldENvbnRlbnRUeXBlXG5cCglsbFNldENvbnRlbnRUeXBlKCR7MTprZXkgcmVxdWVzdF9pZH0sICR7MjppbnRlZ2VyIGNvbnRlbnRfdHlwZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldERhbWFnZVxuXAoJbGxTZXREYW1hZ2UoJHsxOmZsb2F0IGRhbWFnZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldEZvcmNlXG5cCglsbFNldEZvcmNlKCR7MTp2ZWN0b3IgZm9yY2V9LCAkezI6aW50ZWdlciBsb2NhbH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldEZvcmNlQW5kVG9ycXVlXG5cCglsbFNldEZvcmNlQW5kVG9ycXVlKCR7MTp2ZWN0b3IgZm9yY2V9LCAkezI6dmVjdG9yIHRvcnF1ZX0sICR7MzppbnRlZ2VyIGxvY2FsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0SG92ZXJIZWlnaHRcblwKCWxsU2V0SG92ZXJIZWlnaHQoJHsxOmZsb2F0IGhlaWdodH0sICR7MjppbnRlZ2VyIHdhdGVyfSwgJHszOmZsb2F0IHRhdX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldEtleWZyYW1lZE1vdGlvblxuXAoJbGxTZXRLZXlmcmFtZWRNb3Rpb24oJHsxOmxpc3Qga2V5ZnJhbWVzfSwgJHsyOmxpc3Qgb3B0aW9uc30pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldExpbmtBbHBoYVxuXAoJbGxTZXRMaW5rQWxwaGEoJHsxOmludGVnZXIgbGlua30sICR7MjpmbG9hdCBhbHBoYX0sICR7MzppbnRlZ2VyIGZhY2V9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRMaW5rQ2FtZXJhXG5cCglsbFNldExpbmtDYW1lcmEoJHsxOmludGVnZXIgbGlua30sICR7Mjp2ZWN0b3IgZXllfSwgJHszOnZlY3RvciBhdH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldExpbmtDb2xvclxuXAoJbGxTZXRMaW5rQ29sb3IoJHsxOmludGVnZXIgbGlua30sICR7Mjp2ZWN0b3IgY29sb3J9LCAkezM6aW50ZWdlciBmYWNlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0TGlua01lZGlhXG5cCglsbFNldExpbmtNZWRpYSgkezE6aW50ZWdlciBsaW5rfSwgJHsyOmludGVnZXIgZmFjZX0sICR7MzpsaXN0IHBhcmFtc30pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldExpbmtQcmltaXRpdmVQYXJhbXNcblwKCWxsU2V0TGlua1ByaW1pdGl2ZVBhcmFtcygkezE6aW50ZWdlciBsaW5rfSwgJHsyOmxpc3QgcnVsZXN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRMaW5rUHJpbWl0aXZlUGFyYW1zRmFzdFxuXAoJbGxTZXRMaW5rUHJpbWl0aXZlUGFyYW1zRmFzdCgkezE6aW50ZWdlciBsaW5rfSwgJHsyOmxpc3QgcnVsZXN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRMaW5rVGV4dHVyZVxuXAoJbGxTZXRMaW5rVGV4dHVyZSgkezE6aW50ZWdlciBsaW5rfSwgJHsyOnN0cmluZyB0ZXh0dXJlfSwgJHszOmludGVnZXIgZmFjZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldExpbmtUZXh0dXJlQW5pbVxuXAoJbGxTZXRMaW5rVGV4dHVyZUFuaW0oJHsxOmludGVnZXIgbGlua30sICR7MjppbnRlZ2VyIG1vZGV9LCAkezM6aW50ZWdlciBmYWNlfSwgJHs0OmludGVnZXIgc2l6ZXh9LCAkezU6aW50ZWdlciBzaXpleX0sICR7NjpmbG9hdCBzdGFydH0sICR7NzpmbG9hdCBsZW5ndGh9LCAkezg6ZmxvYXQgcmF0ZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldExvY2FsUm90XG5cCglsbFNldExvY2FsUm90KCR7MTpyb3RhdGlvbiByb3R9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRNZW1vcnlMaW1pdFxuXAoJbGxTZXRNZW1vcnlMaW1pdCgkezE6aW50ZWdlciBsaW1pdH0pXG5cCnNuaXBwZXQgbGxTZXRPYmplY3REZXNjXG5cCglsbFNldE9iamVjdERlc2MoJHsxOnN0cmluZyBkZXNjcmlwdGlvbn0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldE9iamVjdE5hbWVcblwKCWxsU2V0T2JqZWN0TmFtZSgkezE6c3RyaW5nIG5hbWV9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRQYXJjZWxNdXNpY1VSTFxuXAoJbGxTZXRQYXJjZWxNdXNpY1VSTCgkezE6c3RyaW5nIHVybH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFBheVByaWNlXG5cCglsbFNldFBheVByaWNlKCR7MTppbnRlZ2VyIHByaWNlfSwgWyR7MjppbnRlZ2VyIHByaWNlX2J1dHRvbl9hfSwgJHszOmludGVnZXIgcHJpY2VfYnV0dG9uX2J9LCAkezQ6aW50ZWdlciBwcmljZV9idXR0b25fY30sICR7NTppbnRlZ2VyIHByaWNlX2J1dHRvbl9kfV0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFBoeXNpY3NNYXRlcmlhbFxuXAoJbGxTZXRQaHlzaWNzTWF0ZXJpYWwoJHsxOmludGVnZXIgbWFza30sICR7MjpmbG9hdCBncmF2aXR5X211bHRpcGxpZXJ9LCAkezM6ZmxvYXQgcmVzdGl0dXRpb259LCAkezQ6ZmxvYXQgZnJpY3Rpb259LCAkezU6ZmxvYXQgZGVuc2l0eX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFBvc1xuXAoJbGxTZXRQb3MoJHsxOnZlY3RvciBwb3N9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRQcmltaXRpdmVQYXJhbXNcblwKCWxsU2V0UHJpbWl0aXZlUGFyYW1zKCR7MTpsaXN0IHJ1bGVzfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0UHJpbU1lZGlhUGFyYW1zXG5cCglsbFNldFByaW1NZWRpYVBhcmFtcygkezE6aW50ZWdlciBmYWNlfSwgJHsyOmxpc3QgcGFyYW1zfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0UmVnaW9uUG9zXG5cCglsbFNldFJlZ2lvblBvcygkezE6dmVjdG9yIHBvc2l0aW9ufSlcblwKc25pcHBldCBsbFNldFJlbW90ZVNjcmlwdEFjY2Vzc1BpblxuXAoJbGxTZXRSZW1vdGVTY3JpcHRBY2Nlc3NQaW4oJHsxOmludGVnZXIgcGlufSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0Um90XG5cCglsbFNldFJvdCgkezE6cm90YXRpb24gcm90fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0U2NhbGVcblwKCWxsU2V0U2NhbGUoJHsxOnZlY3RvciBzaXplfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0U2NyaXB0U3RhdGVcblwKCWxsU2V0U2NyaXB0U3RhdGUoJHsxOnN0cmluZyBuYW1lfSwgJHsyOmludGVnZXIgcnVufSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0U2l0VGV4dFxuXAoJbGxTZXRTaXRUZXh0KCR7MTpzdHJpbmcgdGV4dH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFNvdW5kUXVldWVpbmdcblwKCWxsU2V0U291bmRRdWV1ZWluZygkezE6aW50ZWdlciBxdWV1ZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFNvdW5kUmFkaXVzXG5cCglsbFNldFNvdW5kUmFkaXVzKCR7MTpmbG9hdCByYWRpdXN9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRTdGF0dXNcblwKCWxsU2V0U3RhdHVzKCR7MTppbnRlZ2VyIHN0YXR1c30sICR7MjppbnRlZ2VyIHZhbHVlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0VGV4dFxuXAoJbGxTZXRUZXh0KCR7MTpzdHJpbmcgdGV4dH0sICR7Mjp2ZWN0b3IgY29sb3J9LCAkezM6ZmxvYXQgYWxwaGF9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRUZXh0dXJlXG5cCglsbFNldFRleHR1cmUoJHsxOnN0cmluZyB0ZXh0dXJlfSwgJHsyOmludGVnZXIgZmFjZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFRleHR1cmVBbmltXG5cCglsbFNldFRleHR1cmVBbmltKCR7MTppbnRlZ2VyIG1vZGV9LCAkezI6aW50ZWdlciBmYWNlfSwgJHszOmludGVnZXIgc2l6ZXh9LCAkezQ6aW50ZWdlciBzaXpleX0sICR7NTpmbG9hdCBzdGFydH0sICR7NjpmbG9hdCBsZW5ndGh9LCAkezc6ZmxvYXQgcmF0ZX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFNldFRpbWVyRXZlbnRcblwKCWxsU2V0VGltZXJFdmVudCgkezE6ZmxvYXQgc2VjfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0VG9ycXVlXG5cCglsbFNldFRvcnF1ZSgkezE6dmVjdG9yIHRvcnF1ZX0sICR7MjppbnRlZ2VyIGxvY2FsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0VG91Y2hUZXh0XG5cCglsbFNldFRvdWNoVGV4dCgkezE6c3RyaW5nIHRleHR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRWZWhpY2xlRmxhZ3NcblwKCWxsU2V0VmVoaWNsZUZsYWdzKCR7MTppbnRlZ2VyIGZsYWdzfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0VmVoaWNsZUZsb2F0UGFyYW1cblwKCWxsU2V0VmVoaWNsZUZsb2F0UGFyYW0oJHsxOmludGVnZXIgcGFyYW19LCAkezI6ZmxvYXQgdmFsdWV9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRWZWhpY2xlUm90YXRpb25QYXJhbVxuXAoJbGxTZXRWZWhpY2xlUm90YXRpb25QYXJhbSgkezE6aW50ZWdlciBwYXJhbX0sICR7Mjpyb3RhdGlvbiByb3R9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTZXRWZWhpY2xlVHlwZVxuXAoJbGxTZXRWZWhpY2xlVHlwZSgkezE6aW50ZWdlciB0eXBlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0VmVoaWNsZVZlY3RvclBhcmFtXG5cCglsbFNldFZlaGljbGVWZWN0b3JQYXJhbSgkezE6aW50ZWdlciBwYXJhbX0sICR7Mjp2ZWN0b3IgdmVjfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2V0VmVsb2NpdHlcblwKCWxsU2V0VmVsb2NpdHkoJHsxOnZlY3RvciBmb3JjZX0sICR7MjppbnRlZ2VyIGxvY2FsfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU0hBMVN0cmluZ1xuXAoJbGxTSEExU3RyaW5nKCR7MTpzdHJpbmcgc3JjfSlcblwKc25pcHBldCBsbFNob3V0XG5cCglsbFNob3V0KCR7MTppbnRlZ2VyIGNoYW5uZWx9LCAkezI6c3RyaW5nIG1zZ30pO1xuXAoJJDBcblwKc25pcHBldCBsbFNpblxuXAoJbGxTaW4oJHsxOmZsb2F0IHRoZXRhfSlcblwKc25pcHBldCBsbFNpdFRhcmdldFxuXAoJbGxTaXRUYXJnZXQoJHsxOnZlY3RvciBvZmZzZXR9LCAkezI6cm90YXRpb24gcm90fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU2xlZXBcblwKCWxsU2xlZXAoJHsxOmZsb2F0IHNlY30pO1xuXAoJJDBcblwKc25pcHBldCBsbFNxcnRcblwKCWxsU3FydCgkezE6ZmxvYXQgdmFsfSlcblwKc25pcHBldCBsbFN0YXJ0QW5pbWF0aW9uXG5cCglsbFN0YXJ0QW5pbWF0aW9uKCR7MTpzdHJpbmcgYW5pbX0pO1xuXAoJJDBcblwKc25pcHBldCBsbFN0b3BBbmltYXRpb25cblwKCWxsU3RvcEFuaW1hdGlvbigkezE6c3RyaW5nIGFuaW19KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxTdG9wSG92ZXJcblwKCWxsU3RvcEhvdmVyKCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU3RvcExvb2tBdFxuXAoJbGxTdG9wTG9va0F0KCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU3RvcE1vdmVUb1RhcmdldFxuXAoJbGxTdG9wTW92ZVRvVGFyZ2V0KCk7XG5cCgkkMFxuXApzbmlwcGV0IGxsU3RvcFNvdW5kXG5cCglsbFN0b3BTb3VuZCgpO1xuXAoJJDBcblwKc25pcHBldCBsbFN0cmluZ0xlbmd0aFxuXAoJbGxTdHJpbmdMZW5ndGgoJHsxOnN0cmluZyBzdHJ9KVxuXApzbmlwcGV0IGxsU3RyaW5nVG9CYXNlNjRcblwKCWxsU3RyaW5nVG9CYXNlNjQoJHsxOnN0cmluZyBzdHJ9KVxuXApzbmlwcGV0IGxsU3RyaW5nVHJpbVxuXAoJbGxTdHJpbmdUcmltKCR7MTpzdHJpbmcgc3JjfSwgJHsyOmludGVnZXIgdHlwZX0pXG5cCnNuaXBwZXQgbGxTdWJTdHJpbmdJbmRleFxuXAoJbGxTdWJTdHJpbmdJbmRleCgkezE6c3RyaW5nIHNvdXJjZX0sICR7MjpzdHJpbmcgcGF0dGVybn0pXG5cCnNuaXBwZXQgbGxUYWtlQ29udHJvbHNcblwKCWxsVGFrZUNvbnRyb2xzKCR7MTppbnRlZ2VyIGNvbnRyb2xzfSwgJHsyOmludGVnZXIgYWNjZXB0fSwgJHszOmludGVnZXIgcGFzc19vbn0pO1xuXAoJJDBcblwKc25pcHBldCBsbFRhblxuXAoJbGxUYW4oJHsxOmZsb2F0IHRoZXRhfSlcblwKc25pcHBldCBsbFRhcmdldFxuXAoJbGxUYXJnZXQoJHsxOnZlY3RvciBwb3NpdGlvbn0sICR7MjpmbG9hdCByYW5nZX0pXG5cCnNuaXBwZXQgbGxUYXJnZXRPbWVnYVxuXAoJbGxUYXJnZXRPbWVnYSgkezE6dmVjdG9yIGF4aXN9LCAkezI6ZmxvYXQgc3BpbnJhdGV9LCAkezM6ZmxvYXQgZ2Fpbn0pO1xuXAoJJDBcblwKc25pcHBldCBsbFRhcmdldFJlbW92ZVxuXAoJbGxUYXJnZXRSZW1vdmUoJHsxOmludGVnZXIgaGFuZGxlfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsVGVsZXBvcnRBZ2VudFxuXAoJbGxUZWxlcG9ydEFnZW50KCR7MTprZXkgYWdlbnR9LCAkezI6c3RyaW5nIGxhbmRtYXJrfSwgJHszOnZlY3RvciBwb3NpdGlvbn0sICR7NDp2ZWN0b3IgbG9va19hdH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFRlbGVwb3J0QWdlbnRHbG9iYWxDb29yZHNcblwKCWxsVGVsZXBvcnRBZ2VudEdsb2JhbENvb3JkcygkezE6a2V5IGFnZW50fSwgJHsyOnZlY3RvciBnbG9iYWxfY29vcmRpbmF0ZXN9LCAkezM6dmVjdG9yIHJlZ2lvbl9jb29yZGluYXRlc30sICR7NDp2ZWN0b3IgbG9va19hdH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFRlbGVwb3J0QWdlbnRIb21lXG5cCglsbFRlbGVwb3J0QWdlbnRIb21lKCR7MTprZXkgYWdlbnR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxUZXh0Qm94XG5cCglsbFRleHRCb3goJHsxOmtleSBhZ2VudH0sICR7MjpzdHJpbmcgbWVzc2FnZX0sICR7MzppbnRlZ2VyIGNoYW5uZWx9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxUb0xvd2VyXG5cCglsbFRvTG93ZXIoJHsxOnN0cmluZyBzcmN9KVxuXApzbmlwcGV0IGxsVG9VcHBlclxuXAoJbGxUb1VwcGVyKCR7MTpzdHJpbmcgc3JjfSlcblwKc25pcHBldCBsbFRyYW5zZmVyTGluZGVuRG9sbGFyc1xuXAoJbGxUcmFuc2ZlckxpbmRlbkRvbGxhcnMoJHsxOmtleSBkZXN0aW5hdGlvbn0sICR7MjppbnRlZ2VyIGFtb3VudH0pXG5cCnNuaXBwZXQgbGxUcmlnZ2VyU291bmRcblwKCWxsVHJpZ2dlclNvdW5kKCR7MTpzdHJpbmcgc291bmR9LCAkezI6ZmxvYXQgdm9sdW1lfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsVHJpZ2dlclNvdW5kTGltaXRlZFxuXAoJbGxUcmlnZ2VyU291bmRMaW1pdGVkKCR7MTpzdHJpbmcgc291bmR9LCAkezI6ZmxvYXQgdm9sdW1lfSwgJHszOnZlY3RvciB0b3Bfbm9ydGhfZWFzdH0sICR7NDp2ZWN0b3IgYm90dG9tX3NvdXRoX3dlc3R9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxVbmVzY2FwZVVSTFxuXAoJbGxVbmVzY2FwZVVSTCgkezE6c3RyaW5nIHVybH0pXG5cCnNuaXBwZXQgbGxVblNpdFxuXAoJbGxVblNpdCgkezE6a2V5IGlkfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsVXBkYXRlQ2hhcmFjdGVyXG5cCglsbFVwZGF0ZUNoYXJhY3RlcigkezE6bGlzdCBvcHRpb25zfSlcblwKc25pcHBldCBsbFVwZGF0ZUtleVZhbHVlXG5cCglsbFVwZGF0ZUtleVZhbHVlKCR7MTpzdHJpbmcga30sICR7MjpzdHJpbmcgdn0sICR7MzppbnRlZ2VyIGNoZWNrZWR9LCAkezQ6c3RyaW5nIG92fSlcblwKc25pcHBldCBsbFZlY0Rpc3RcblwKCWxsVmVjRGlzdCgkezE6dmVjdG9yIHZlY19hfSwgJHsyOnZlY3RvciB2ZWNfYn0pXG5cCnNuaXBwZXQgbGxWZWNNYWdcblwKCWxsVmVjTWFnKCR7MTp2ZWN0b3IgdmVjfSlcblwKc25pcHBldCBsbFZlY05vcm1cblwKCWxsVmVjTm9ybSgkezE6dmVjdG9yIHZlY30pXG5cCnNuaXBwZXQgbGxWb2x1bWVEZXRlY3RcblwKCWxsVm9sdW1lRGV0ZWN0KCR7MTppbnRlZ2VyIGRldGVjdH0pO1xuXAoJJDBcblwKc25pcHBldCBsbFdhbmRlcldpdGhpblxuXAoJbGxXYW5kZXJXaXRoaW4oJHsxOnZlY3RvciBvcmlnaW59LCAkezI6dmVjdG9yIGRpc3R9LCAkezM6bGlzdCBvcHRpb25zfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsV2F0ZXJcblwKCWxsV2F0ZXIoJHsxOnZlY3RvciBvZmZzZXR9KTtcblwKCSQwXG5cCnNuaXBwZXQgbGxXaGlzcGVyXG5cCglsbFdoaXNwZXIoJHsxOmludGVnZXIgY2hhbm5lbH0sICR7MjpzdHJpbmcgbXNnfSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsV2luZFxuXAoJbGxXaW5kKCR7MTp2ZWN0b3Igb2Zmc2V0fSk7XG5cCgkkMFxuXApzbmlwcGV0IGxsWG9yQmFzZTY0XG5cCglsbFhvckJhc2U2NCgkezE6c3RyaW5nIHN0cjF9LCAkezI6c3RyaW5nIHN0cjJ9KVxuXApzbmlwcGV0IG1vbmV5XG5cCgltb25leSgkezE6a2V5IGlkfSwgJHsyOmludGVnZXIgYW1vdW50fSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IG9iamVjdF9yZXpcblwKCW9iamVjdF9yZXooJHsxOmtleSBpZH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBvbl9yZXpcblwKCW9uX3JleigkezE6aW50ZWdlciBzdGFydF9wYXJhbX0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCBwYXRoX3VwZGF0ZVxuXAoJcGF0aF91cGRhdGUoJHsxOmludGVnZXIgdHlwZX0sICR7MjpsaXN0IHJlc2VydmVkfSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXApzbmlwcGV0IHJlbW90ZV9kYXRhXG5cCglyZW1vdGVfZGF0YSgkezE6aW50ZWdlciBldmVudF90eXBlfSwgJHsyOmtleSBjaGFubmVsfSwgJHszOmtleSBtZXNzYWdlX2lkfSwgJHs0OnN0cmluZyBzZW5kZXJ9LCAkezU6aW50ZWdlciBpZGF0YX0sICR7NjpzdHJpbmcgc2RhdGF9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgcnVuX3RpbWVfcGVybWlzc2lvbnNcblwKCXJ1bl90aW1lX3Blcm1pc3Npb25zKCR7MTppbnRlZ2VyIHBlcm19KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgc2Vuc29yXG5cCglzZW5zb3IoJHsxOmludGVnZXIgaW5kZXh9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgc3RhdGVcblwKCXN0YXRlICR7MTpuYW1lfVxuXApzbmlwcGV0IHRvdWNoXG5cCgl0b3VjaCgkezE6aW50ZWdlciBpbmRleH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCB0b3VjaF9lbmRcblwKCXRvdWNoX2VuZCgkezE6aW50ZWdlciBpbmRleH0pXG5cCgl7XG5cCgkJJDBcblwKCX1cblwKc25pcHBldCB0b3VjaF9zdGFydFxuXAoJdG91Y2hfc3RhcnQoJHsxOmludGVnZXIgaW5kZXh9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgdHJhbnNhY3Rpb25fcmVzdWx0XG5cCgl0cmFuc2FjdGlvbl9yZXN1bHQoJHsxOmtleSBpZH0sICR7MjppbnRlZ2VyIHN1Y2Nlc3N9LCAkezM6c3RyaW5nIGRhdGF9KVxuXAoJe1xuXAoJCSQwXG5cCgl9XG5cCnNuaXBwZXQgd2hpbGVcblwKCXdoaWxlICgkezE6Y29uZGl0aW9ufSlcblwKCXtcblwKCQkkMFxuXAoJfVxuXAoiOwpleHBvcnRzLnNjb3BlID0gImxzbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL2xzbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbHVhIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgIyFcblwKCSMhL3Vzci9iaW4vZW52IGx1YVxuXAoJJDFcblwKc25pcHBldCBsb2NhbFxuXAoJbG9jYWwgJHsxOnh9ID0gJHsyOjF9XG5cCnNuaXBwZXQgZnVuXG5cCglmdW5jdGlvbiAkezE6Zm5hbWV9KCR7MjouLi59KVxuXAoJCSR7MzotLSBib2R5fVxuXAoJZW5kXG5cCnNuaXBwZXQgZm9yXG5cCglmb3IgJHsxOml9PSR7MjoxfSwkezM6MTB9IGRvXG5cCgkJJHs0OnByaW50KGkpfVxuXAoJZW5kXG5cCnNuaXBwZXQgZm9ycFxuXAoJZm9yICR7MTppfSwkezI6dn0gaW4gcGFpcnMoJHszOnRhYmxlX25hbWV9KSBkb1xuXAoJICAgJHs0Oi0tIGJvZHl9XG5cCgllbmRcblwKc25pcHBldCBmb3JpXG5cCglmb3IgJHsxOml9LCR7Mjp2fSBpbiBpcGFpcnMoJHszOnRhYmxlX25hbWV9KSBkb1xuXAoJICAgJHs0Oi0tIGJvZHl9XG5cCgllbmRcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJsdWEiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9sdWEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/luapage.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbHVhcGFnZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gImx1YXBhZ2UiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9sdWFwYWdlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/lucene.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbHVjZW5lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAibHVjZW5lIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbHVjZW5lIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/makefile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWFrZWZpbGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAic25pcHBldCBpZmVxXG5cCglpZmVxICgkezE6Y29uZDB9LCR7Mjpjb25kMX0pXG5cCgkJJHszOmNvZGV9XG5cCgllbmRpZlxuXAoiOwpleHBvcnRzLnNjb3BlID0gIm1ha2VmaWxlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbWFrZWZpbGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWFya2Rvd24iLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAiIyBNYXJrZG93blxuXApcblwKIyBJbmNsdWRlcyBvY3RvcHJlc3MgKGh0dHA6Ly9vY3RvcHJlc3Mub3JnLykgc25pcHBldHNcblwKXG5cCnNuaXBwZXQgW1xuXAoJWyR7MTp0ZXh0fV0oaHR0cDovLyR7MjphZGRyZXNzfSBcIiR7Mzp0aXRsZX1cIilcblwKc25pcHBldCBbKlxuXAoJWyR7MTpsaW5rfV0oJHsyOmBAKmB9IFwiJHszOnRpdGxlfVwiKSR7NH1cblwKXG5cCnNuaXBwZXQgWzpcblwKCVskezE6aWR9XTogaHR0cDovLyR7Mjp1cmx9IFwiJHszOnRpdGxlfVwiXG5cCnNuaXBwZXQgWzoqXG5cCglbJHsxOmlkfV06ICR7MjpgQCpgfSBcIiR7Mzp0aXRsZX1cIlxuXApcblwKc25pcHBldCAhW1xuXAoJIVskezE6YWx0dGV4dH1dKCR7MjovaW1hZ2VzL2ltYWdlLmpwZ30gXCIkezM6dGl0bGV9XCIpXG5cCnNuaXBwZXQgIVsqXG5cCgkhWyR7MTphbHR9XSgkezI6YEAqYH0gXCIkezM6dGl0bGV9XCIpJHs0fVxuXApcblwKc25pcHBldCAhWzpcblwKCSFbJHsxOmlkfV06ICR7Mjp1cmx9IFwiJHszOnRpdGxlfVwiXG5cCnNuaXBwZXQgIVs6KlxuXAoJIVskezE6aWR9XTogJHsyOmBAKmB9IFwiJHszOnRpdGxlfVwiXG5cClxuXApzbmlwcGV0ID09PVxuXApyZWdleCAvXi89Ky89Ki8vXG5cCgkke1BSRVZfTElORS8uLz0vZ31cblwKCVxuXAoJJHswfVxuXApzbmlwcGV0IC0tLVxuXApyZWdleCAvXi8tKy8tKi8vXG5cCgkke1BSRVZfTElORS8uLy0vZ31cblwKCVxuXAoJJHswfVxuXApzbmlwcGV0IGJsb2NrcXVvdGVcblwKCXslIGJsb2NrcXVvdGUgJX1cblwKCSR7MTpxdW90ZX1cblwKCXslIGVuZGJsb2NrcXVvdGUgJX1cblwKXG5cCnNuaXBwZXQgYmxvY2txdW90ZS1hdXRob3JcblwKCXslIGJsb2NrcXVvdGUgJHsxOmF1dGhvcn0sICR7Mjp0aXRsZX0gJX1cblwKCSR7MzpxdW90ZX1cblwKCXslIGVuZGJsb2NrcXVvdGUgJX1cblwKXG5cCnNuaXBwZXQgYmxvY2txdW90ZS1saW5rXG5cCgl7JSBibG9ja3F1b3RlICR7MTphdXRob3J9ICR7MjpVUkx9ICR7MzpsaW5rX3RleHR9ICV9XG5cCgkkezQ6cXVvdGV9XG5cCgl7JSBlbmRibG9ja3F1b3RlICV9XG5cClxuXApzbmlwcGV0IGJ0LWNvZGVibG9jay1zaG9ydFxuXAoJYGBgXG5cCgkkezE6Y29kZV9zbmlwcGV0fVxuXAoJYGBgXG5cClxuXApzbmlwcGV0IGJ0LWNvZGVibG9jay1mdWxsXG5cCglgYGAgJHsxOmxhbmd1YWdlfSAkezI6dGl0bGV9ICR7MzpVUkx9ICR7NDpsaW5rX3RleHR9XG5cCgkkezU6Y29kZV9zbmlwcGV0fVxuXAoJYGBgXG5cClxuXApzbmlwcGV0IGNvZGVibG9jay1zaG9ydFxuXAoJeyUgY29kZWJsb2NrICV9XG5cCgkkezE6Y29kZV9zbmlwcGV0fVxuXAoJeyUgZW5kY29kZWJsb2NrICV9XG5cClxuXApzbmlwcGV0IGNvZGVibG9jay1mdWxsXG5cCgl7JSBjb2RlYmxvY2sgJHsxOnRpdGxlfSBsYW5nOiR7MjpsYW5ndWFnZX0gJHszOlVSTH0gJHs0OmxpbmtfdGV4dH0gJX1cblwKCSR7NTpjb2RlX3NuaXBwZXR9XG5cCgl7JSBlbmRjb2RlYmxvY2sgJX1cblwKXG5cCnNuaXBwZXQgZ2lzdC1mdWxsXG5cCgl7JSBnaXN0ICR7MTpnaXN0X2lkfSAkezI6ZmlsZW5hbWV9ICV9XG5cClxuXApzbmlwcGV0IGdpc3Qtc2hvcnRcblwKCXslIGdpc3QgJHsxOmdpc3RfaWR9ICV9XG5cClxuXApzbmlwcGV0IGltZ1xuXAoJeyUgaW1nICR7MTpjbGFzc30gJHsyOlVSTH0gJHszOndpZHRofSAkezQ6aGVpZ2h0fSAkezU6dGl0bGVfdGV4dH0gJHs2OmFsdF90ZXh0fSAlfVxuXApcblwKc25pcHBldCB5b3V0dWJlXG5cCgl7JSB5b3V0dWJlICR7MTp2aWRlb19pZH0gJX1cblwKXG5cCiMgVGhlIHF1b3RlIHNob3VsZCBhcHBlYXIgb25seSBvbmNlIGluIHRoZSB0ZXh0LiBJdCBpcyBpbmhlcmVudGx5IHBhcnQgb2YgaXQuXG5cCiMgU2VlIGh0dHA6Ly9vY3RvcHJlc3Mub3JnL2RvY3MvcGx1Z2lucy9wdWxscXVvdGUvIGZvciBtb3JlIGluZm8uXG5cClxuXApzbmlwcGV0IHB1bGxxdW90ZVxuXAoJeyUgcHVsbHF1b3RlICV9XG5cCgkkezE6dGV4dH0ge1wiICR7MjpxdW90ZX0gXCJ9ICR7Mzp0ZXh0fVxuXAoJeyUgZW5kcHVsbHF1b3RlICV9XG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAibWFya2Rvd24iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9tYXJrZG93biJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/mask.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWFzayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gIm1hc2siOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9tYXNrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/matlab.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWF0bGFiIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAibWF0bGFiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbWF0bGFiIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/maze.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWF6ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICJzbmlwcGV0ID5cblwKZGVzY3JpcHRpb24gYXNzaWdubWVudFxuXApzY29wZSBtYXplXG5cCgktPiAkezF9PSAkezJ9XG5cClxuXApzbmlwcGV0ID5cblwKZGVzY3JpcHRpb24gaWZcblwKc2NvcGUgbWF6ZVxuXAoJLT4gSUYgJHsyOioqfSBUSEVOICUkezM6TH0gRUxTRSAlJHs0OlJ9XG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAibWF6ZSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL21hemUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/mel.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWVsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAibWVsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbWVsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/mixal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbWl4YWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJtaXhhbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL21peGFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/mushcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbXVzaGNvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJtdXNoY29kZSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL211c2hjb2RlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/mushcode_high_rules.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbXVzaGNvZGVfaGlnaF9ydWxlcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLGZ1bmN0aW9uKGUsdCxuKXt0LnNuaXBwZXRUZXh0PSIiLHQuc2NvcGU9Im11c2hjb2RlX2hpZ2hfcnVsZXMifSk=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/mysql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbXlzcWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJteXNxbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL215c3FsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/nginx.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbmdpbngiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJuZ2lueCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL25naW54Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/nim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbmltIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAibmltIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbmltIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/nix.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbml4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAibml4IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvbml4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/nsis.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvbnNpcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gIiI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL25zaXMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/objectivec.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvb2JqZWN0aXZlYyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gIm9iamVjdGl2ZWMiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9vYmplY3RpdmVjIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/ocaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvb2NhbWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJvY2FtbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL29jYW1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/pascal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGFzY2FsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAicGFzY2FsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvcGFzY2FsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGVybCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjICMhL3Vzci9iaW4vcGVybFxuXApzbmlwcGV0ICMhXG5cCgkjIS91c3IvYmluL2VudiBwZXJsXG5cClxuXAojIEhhc2ggUG9pbnRlclxuXApzbmlwcGV0IC5cblwKCSA9PlxuXAojIEZ1bmN0aW9uXG5cCnNuaXBwZXQgc3ViXG5cCglzdWIgJHsxOmZ1bmN0aW9uX25hbWV9IHtcblwKCQkkezI6I2JvZHkgLi4ufVxuXAoJfVxuXAojIENvbmRpdGlvbmFsXG5cCnNuaXBwZXQgaWZcblwKCWlmICgkezF9KSB7XG5cCgkJJHsyOiMgYm9keS4uLn1cblwKCX1cblwKIyBDb25kaXRpb25hbCBpZi4uZWxzZVxuXApzbmlwcGV0IGlmZVxuXAoJaWYgKCR7MX0pIHtcblwKCQkkezI6IyBib2R5Li4ufVxuXAoJfVxuXAoJZWxzZSB7XG5cCgkJJHszOiMgZWxzZS4uLn1cblwKCX1cblwKIyBDb25kaXRpb25hbCBpZi4uZWxzaWYuLmVsc2VcblwKc25pcHBldCBpZmVlXG5cCglpZiAoJHsxfSkge1xuXAoJCSR7MjojIGJvZHkuLi59XG5cCgl9XG5cCgllbHNpZiAoJHszfSkge1xuXAoJCSR7NDojIGVsc2lmLi4ufVxuXAoJfVxuXAoJZWxzZSB7XG5cCgkJJHs1OiMgZWxzZS4uLn1cblwKCX1cblwKIyBDb25kaXRpb25hbCBPbmUtbGluZVxuXApzbmlwcGV0IHhpZlxuXAoJJHsxOmV4cHJlc3Npb259IGlmICR7Mjpjb25kaXRpb259OyR7M31cblwKIyBVbmxlc3MgY29uZGl0aW9uYWxcblwKc25pcHBldCB1bmxlc3NcblwKCXVubGVzcyAoJHsxfSkge1xuXAoJCSR7MjojIGJvZHkuLi59XG5cCgl9XG5cCiMgVW5sZXNzIGNvbmRpdGlvbmFsIE9uZS1saW5lXG5cCnNuaXBwZXQgeHVubGVzc1xuXAoJJHsxOmV4cHJlc3Npb259IHVubGVzcyAkezI6Y29uZGl0aW9ufTskezN9XG5cCiMgVHJ5L0V4Y2VwdFxuXApzbmlwcGV0IGV2YWxcblwKCWxvY2FsICRAO1xuXAoJZXZhbCB7XG5cCgkJJHsxOiMgZG8gc29tZXRoaW5nIHJpc2t5Li4ufVxuXAoJfTtcblwKCWlmIChteSAkZSA9ICRAKSB7XG5cCgkJJHsyOiMgaGFuZGxlIGZhaWx1cmUuLi59XG5cCgl9XG5cCiMgV2hpbGUgTG9vcFxuXApzbmlwcGV0IHdoXG5cCgl3aGlsZSAoJHsxfSkge1xuXAoJCSR7MjojIGJvZHkuLi59XG5cCgl9XG5cCiMgV2hpbGUgTG9vcCBPbmUtbGluZVxuXApzbmlwcGV0IHh3aFxuXAoJJHsxOmV4cHJlc3Npb259IHdoaWxlICR7Mjpjb25kaXRpb259OyR7M31cblwKIyBDLXN0eWxlIEZvciBMb29wXG5cCnNuaXBwZXQgY2ZvclxuXAoJZm9yIChteSAkJHsyOnZhcn0gPSAwOyAkJDIgPCAkezE6Y291bnR9OyAkJDIkezM6Kyt9KSB7XG5cCgkJJHs0OiMgYm9keS4uLn1cblwKCX1cblwKIyBGb3IgbG9vcCBvbmUtbGluZVxuXApzbmlwcGV0IHhmb3JcblwKCSR7MTpleHByZXNzaW9ufSBmb3IgQCR7MjphcnJheX07JHszfVxuXAojIEZvcmVhY2ggTG9vcFxuXApzbmlwcGV0IGZvclxuXAoJZm9yZWFjaCBteSAkJHsxOnh9IChAJHsyOmFycmF5fSkge1xuXAoJCSR7MzojIGJvZHkuLi59XG5cCgl9XG5cCiMgRm9yZWFjaCBMb29wIE9uZS1saW5lXG5cCnNuaXBwZXQgZm9yZVxuXAoJJHsxOmV4cHJlc3Npb259IGZvcmVhY2ggQCR7MjphcnJheX07JHszfVxuXAojIFBhY2thZ2VcblwKc25pcHBldCBwYWNrYWdlXG5cCglwYWNrYWdlICR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgnJywgJ1BhZ2UgVGl0bGUnKSwgJ14uJywgJ1xcdSYnLCAnJylgfTtcblwKXG5cCgkkezJ9XG5cClxuXAoJMTtcblwKXG5cCglfX0VORF9fXG5cCiMgUGFja2FnZSBzeW50YXggcGVybCA+PSA1LjE0XG5cCnNuaXBwZXQgcGFja2FnZXY1MTRcblwKCXBhY2thZ2UgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCcnLCAnUGFnZSBUaXRsZScpLCAnXi4nLCAnXFx1JicsICcnKWB9ICR7MjowLjk5fTtcblwKXG5cCgkkezN9XG5cClxuXAoJMTtcblwKXG5cCglfX0VORF9fXG5cCiNtb29zZVxuXApzbmlwcGV0IG1vb3NlXG5cCgl1c2UgTW9vc2U7XG5cCgl1c2UgbmFtZXNwYWNlOjphdXRvY2xlYW47XG5cCgkkezE6I31CRUdJTiB7ZXh0ZW5kcyAnJHsyOlBhcmVudENsYXNzfSd9O1xuXApcblwKCSR7M31cblwKIyBwYXJlbnRcblwKc25pcHBldCBwYXJlbnRcblwKCXVzZSBwYXJlbnQgcXcoJHsxOlBhcmVudCBDbGFzc30pO1xuXAojIFJlYWQgRmlsZVxuXApzbmlwcGV0IHNsdXJwXG5cCglteSAkJHsxOnZhcn0gPSBkbyB7IGxvY2FsICQvOyBvcGVuIG15ICRmaWxlLCAnPCcsIFwiJHsyOmZpbGV9XCI7IDwkZmlsZT4gfTtcblwKCSR7M31cblwKIyBzdHJpY3Qgd2FybmluZ3NcblwKc25pcHBldCBzdHJ3YXJcblwKCXVzZSBzdHJpY3Q7XG5cCgl1c2Ugd2FybmluZ3M7XG5cCiMgb2xkZXIgdmVyc2lvbmluZyB3aXRoIHBlcmxjcml0aWMgYnlwYXNzXG5cCnNuaXBwZXQgdmVyc1xuXAoJIyMgbm8gY3JpdGljXG5cCglvdXIgJFZFUlNJT04gPSAnJHsxOnZlcnNpb259JztcblwKCWV2YWwgJFZFUlNJT047XG5cCgkjIyB1c2UgY3JpdGljXG5cCiMgbmV3ICdzd2l0Y2gnIGxpa2UgZmVhdHVyZVxuXApzbmlwcGV0IHN3aXRjaFxuXAoJdXNlIGZlYXR1cmUgJ3N3aXRjaCc7XG5cClxuXAojIEFub255bW91cyBzdWJyb3V0aW5lXG5cCnNuaXBwZXQgYXN1YlxuXAoJc3ViIHtcblwKCSAJJHsxOiMgYm9keSB9XG5cCgl9XG5cClxuXApcblwKXG5cCiMgQmVnaW4gYmxvY2tcblwKc25pcHBldCBiZWdpblxuXAoJQkVHSU4ge1xuXAoJCSR7MTojIGJlZ2luIGJvZHl9XG5cCgl9XG5cClxuXAojIGNhbGwgcGFja2FnZSBmdW5jdGlvbiB3aXRoIHNvbWUgcGFyYW1ldGVyXG5cCnNuaXBwZXQgcGtnbXZcblwKCV9fUEFDS0FHRV9fLT4kezE6cGFja2FnZV9tZXRob2R9KCR7Mjp2YXJ9KVxuXApcblwKIyBjYWxsIHBhY2thZ2UgZnVuY3Rpb24gd2l0aG91dCBhIHBhcmFtZXRlclxuXApzbmlwcGV0IHBrZ21cblwKCV9fUEFDS0FHRV9fLT4kezE6cGFja2FnZV9tZXRob2R9KClcblwKXG5cCiMgY2FsbCBwYWNrYWdlIFwiZ2V0X1wiIGZ1bmN0aW9uIHdpdGhvdXQgYSBwYXJhbWV0ZXJcblwKc25pcHBldCBwa2dldFxuXAoJX19QQUNLQUdFX18tPmdldF8kezE6cGFja2FnZV9tZXRob2R9KClcblwKXG5cCiMgY2FsbCBwYWNrYWdlIGZ1bmN0aW9uIHdpdGggYSBwYXJhbWV0ZXJcblwKc25pcHBldCBwa2dldHZcblwKCV9fUEFDS0FHRV9fLT5nZXRfJHsxOnBhY2thZ2VfbWV0aG9kfSgkezI6dmFyfSlcblwKXG5cCiMgY29tcGxleCByZWdleFxuXApzbmlwcGV0IHFyeFxuXAoJcXIvXG5cCgkgICAgICR7MTpyZWdleH1cblwKCS94bXNcblwKXG5cCiNzaW1wbGVyIHJlZ2V4XG5cCnNuaXBwZXQgcXIvXG5cCglxci8kezE6cmVnZXh9L3hcblwKXG5cCiNnaXZlblxuXApzbmlwcGV0IGdpdmVuXG5cCglnaXZlbiAoJCR7MTp2YXJ9KSB7XG5cCgkJJHsyOiMgY2FzZXN9XG5cCgkJJHszOiMgZGVmYXVsdH1cblwKCX1cblwKXG5cCiMgc3dpdGNoLWxpa2UgY2FzZVxuXApzbmlwcGV0IHdoZW5cblwKCXdoZW4gKCR7MTpjYXNlfSkge1xuXAoJCSR7MjojIGJvZHl9XG5cCgl9XG5cClxuXAojIGhhc2ggc2xpY2VcblwKc25pcHBldCBoc2xpY2VcblwKCUB7ICR7MTpoYXNofSAgfXsgJHsyOmFycmF5fSB9XG5cClxuXApcblwKIyBtYXBcblwKc25pcHBldCBtYXBcblwKCW1hcCB7ICAkezI6IGJvZHkgfSAgICB9ICAkezE6IEBhcnJheSB9IDtcblwKXG5cClxuXApcblwKIyBQb2Qgc3R1YlxuXApzbmlwcGV0IHBwb2RcblwKCT1oZWFkMSBOQU1FXG5cClxuXAoJJHsxOkNsYXNzTmFtZX0gLSAkezI6U2hvcnREZXNjfVxuXApcblwKCT1oZWFkMSBTWU5PUFNJU1xuXApcblwKCSAgdXNlICQxO1xuXApcblwKCSAgJHszOiMgc3lub3BzaXMuLi59XG5cClxuXAoJPWhlYWQxIERFU0NSSVBUSU9OXG5cClxuXAoJJHs0OiMgbG9uZ2VyIGRlc2NyaXB0aW9uLi4ufVxuXApcblwKXG5cCgk9aGVhZDEgSU5URVJGQUNFXG5cClxuXApcblwKCT1oZWFkMSBERVBFTkRFTkNJRVNcblwKXG5cClxuXAoJPWhlYWQxIFNFRSBBTFNPXG5cClxuXApcblwKIyBIZWFkaW5nIGZvciBhIHN1YnJvdXRpbmUgc3R1YlxuXApzbmlwcGV0IHBzdWJcblwKCT1oZWFkMiAkezE6TWV0aG9kTmFtZX1cblwKXG5cCgkkezI6U3VtbWFyeS4uLi59XG5cClxuXAojIEhlYWRpbmcgZm9yIGlubGluZSBzdWJyb3V0aW5lIHBvZFxuXApzbmlwcGV0IHBzdWJpXG5cCgk9aGVhZDIgJHsxOk1ldGhvZE5hbWV9XG5cClxuXAoJJHsyOlN1bW1hcnkuLi59XG5cClxuXApcblwKCT1jdXRcblwKIyBpbmxpbmUgZG9jdW1lbnRlZCBzdWJyb3V0aW5lXG5cCnNuaXBwZXQgc3VicG9kXG5cCgk9aGVhZDIgJDFcblwKXG5cCglTdW1tYXJ5IG9mICQxXG5cClxuXAoJPWN1dFxuXApcblwKCXN1YiAkezE6c3Vicm91dGluZV9uYW1lfSB7XG5cCgkJJHsyOiMgYm9keS4uLn1cblwKCX1cblwKIyBTdWJyb3V0aW5lIHNpZ25hdHVyZVxuXApzbmlwcGV0IHBhcmdcblwKCT1vdmVyIDJcblwKXG5cCgk9aXRlbVxuXAoJQXJndW1lbnRzXG5cClxuXApcblwKCT1vdmVyIDNcblwKXG5cCgk9aXRlbVxuXAoJQzwkezE6RGF0YVN0cnVjdHVyZX0+XG5cClxuXAoJICAkezI6U2FtcGxlfVxuXApcblwKXG5cCgk9YmFja1xuXApcblwKXG5cCgk9aXRlbVxuXAoJUmV0dXJuXG5cClxuXAoJPW92ZXIgM1xuXApcblwKXG5cCgk9aXRlbVxuXAoJQzwkezM6Li4ucmV0dXJuIGRhdGF9PlxuXApcblwKXG5cCgk9YmFja1xuXApcblwKXG5cCgk9YmFja1xuXApcblwKXG5cClxuXAojIE1vb3NlIGhhc1xuXApzbmlwcGV0IGhhc1xuXAoJaGFzICR7MTphdHRyaWJ1dGV9ID0+IChcblwKCQlpcwkgICAgPT4gJyR7Mjpyb3xyd30nLFxuXAoJCWlzYSAJPT4gJyR7MzpTdHJ8SW50fEhhc2hSZWZ8QXJyYXlSZWZ8ZXRjfScsXG5cCgkJZGVmYXVsdCA9PiBzdWIge1xuXAoJCQkkezQ6ZGVmYXVsdHZhbHVlfVxuXAoJCX0sXG5cCgkJJHs1OiMgb3RoZXIgYXR0cmlidXRlc31cblwKCSk7XG5cClxuXApcblwKIyBvdmVycmlkZVxuXApzbmlwcGV0IG92ZXJyaWRlXG5cCglvdmVycmlkZSAkezE6YXR0cmlidXRlfSA9PiBzdWIge1xuXAoJCSR7MjojIG15ICRzZWxmID0gc2hpZnQ7fTtcblwKCQkkezM6IyBteSAoJHNlbGYsICRhcmdzKSA9IEBfO307XG5cCgl9O1xuXApcblwKXG5cCiMgdXNlIHRlc3QgY2xhc3Nlc1xuXApzbmlwcGV0IHR1c2VcblwKCXVzZSBUZXN0OjpNb3JlO1xuXAoJdXNlIFRlc3Q6OkRlZXA7ICMgKCk7ICMgdW5jb21tZW50IHRvIHN0b3AgcHJvdG90eXBlIGVycm9yc1xuXAoJdXNlIFRlc3Q6OkV4Y2VwdGlvbjtcblwKXG5cCiMgbG9jYWwgdGVzdCBsaWJcblwKc25pcHBldCB0bGliXG5cCgl1c2UgbGliIHF3eyAuL3QvbGliIH07XG5cClxuXAojdGVzdCBtZXRob2RzXG5cCnNuaXBwZXQgdG1ldGhzXG5cCgkkRU5We1RFU1RfTUVUSE9EfSA9ICckezE6cmVnZXh9JztcblwKXG5cCiMgcnVudGVzdGNsYXNzXG5cCnNuaXBwZXQgdHJ1bm5lclxuXAoJdXNlICR7MTp0ZXN0X2NsYXNzfTtcblwKCSQxLT5ydW50ZXN0cygpO1xuXApcblwKIyBUZXN0OjpDbGFzcy1zdHlsZSB0ZXN0XG5cCnNuaXBwZXQgdHN1YlxuXAoJc3ViIHQkezE6bnVtYmVyfV8kezI6dGVzdF9jYXNlfSA6VGVzdCgkezM6bnVtX29mX3Rlc3RzfSkge1xuXAoJCW15ICRzZWxmID0gc2hpZnQ7XG5cCgkJJHs0OiMgIGJvZHl9XG5cClxuXAoJfVxuXApcblwKIyBUZXN0OjpSb3V0aW5lLXN0eWxlIHRlc3RcblwKc25pcHBldCB0cnN1YlxuXAoJdGVzdCAkezE6dGVzdF9uYW1lfSA9PiB7IGRlc2NyaXB0aW9uID0+ICckezI6RGVzY3JpcHRpb24gb2YgdGVzdC59J30gPT4gc3ViIHtcblwKCQlteSAoJHNlbGYpID0gQF87XG5cCgkJJHszOiMgdGVzdCBjb2RlfVxuXAoJfTtcblwKXG5cCiNwcmVwIHRlc3QgbWV0aG9kXG5cCnNuaXBwZXQgdHByZXBcblwKCXN1YiBwcmVwJHsxOm51bWJlcn1fJHsyOnRlc3RfY2FzZX0gOlRlc3Qoc3RhcnR1cCkge1xuXAoJCW15ICRzZWxmID0gc2hpZnQ7XG5cCgkJJHs0OiMgIGJvZHl9XG5cCgl9XG5cClxuXAojIGNhdXNlIGZhaWx1cmVzIHRvIHByaW50IHN0YWNrIHRyYWNlXG5cCnNuaXBwZXQgZGVidWdfdHJhY2VcblwKCXVzZSBDYXJwOyAjICd2ZXJib3NlJztcblwKCSMgY2xvYWsgXCJkaWVcIlxuXAoJIyB3YXJuIFwid2FybmluZ1wiXG5cCgkkU0lHeydfX0RJRV9fJ30gPSBzdWIge1xuXAoJCXJlcXVpcmUgQ2FycDsgQ2FycDo6Y29uZmVzc1xuXAoJfTtcblwKXG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAicGVybCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3BlcmwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/perl6.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGVybDYiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJwZXJsNiI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3Blcmw2Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/pgsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGdzcWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJwZ3NxbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3Bnc3FsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGhwIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgZWNcblwKCWVjaG8gJHsxfTtcblwKc25pcHBldCBuc1xuXAoJbmFtZXNwYWNlICR7MTpGb29cXEJhclxcQmF6fTtcblwKCSR7Mn1cblwKc25pcHBldCB1c2VcblwKCXVzZSAkezE6Rm9vXFxCYXJcXEJhen07XG5cCgkkezJ9XG5cCnNuaXBwZXQgY1xuXAoJJHsxOmFic3RyYWN0IH1jbGFzcyAkezI6JEZJTEVOQU1FfVxuXAoJe1xuXAoJCSR7M31cblwKCX1cblwKc25pcHBldCBpXG5cCglpbnRlcmZhY2UgJHsxOiRGSUxFTkFNRX1cblwKCXtcblwKCQkkezJ9XG5cCgl9XG5cCnNuaXBwZXQgdC5cblwKCSR0aGlzLT4kezF9XG5cCnNuaXBwZXQgZlxuXAoJZnVuY3Rpb24gJHsxOmZvb30oJHsyOmFycmF5IH0kezM6JGJhcn0pXG5cCgl7XG5cCgkJJHs0fVxuXAoJfVxuXAojIG1ldGhvZFxuXApzbmlwcGV0IG1cblwKCSR7MTphYnN0cmFjdCB9JHsyOnByb3RlY3RlZH0kezM6IHN0YXRpY30gZnVuY3Rpb24gJHs0OmZvb30oJHs1OmFycmF5IH0kezY6JGJhcn0pXG5cCgl7XG5cCgkJJHs3fVxuXAoJfVxuXAojIHNldHRlciBtZXRob2RcblwKc25pcHBldCBzbVxuXAoJLyoqXG5cCgkgKiBTZXRzIHRoZSB2YWx1ZSBvZiAkezE6Zm9vfVxuXAoJICpcblwKCSAqIEBwYXJhbSAkezI6JDF9ICQkMSAkezM6ZGVzY3JpcHRpb259XG5cCgkgKlxuXAoJICogQHJldHVybiAkezQ6JEZJTEVOQU1FfVxuXAoJICovXG5cCgkkezU6cHVibGljfSBmdW5jdGlvbiBzZXQkezY6JDJ9KCR7NzokMiB9JCQxKVxuXAoJe1xuXAoJCSR0aGlzLT4kezg6JDF9ID0gJCQxO1xuXAoJCXJldHVybiAkdGhpcztcblwKCX0kezl9XG5cCiMgZ2V0dGVyIG1ldGhvZFxuXApzbmlwcGV0IGdtXG5cCgkvKipcblwKCSAqIEdldHMgdGhlIHZhbHVlIG9mICR7MTpmb299XG5cCgkgKlxuXAoJICogQHJldHVybiAkezI6JDF9XG5cCgkgKi9cblwKCSR7MzpwdWJsaWN9IGZ1bmN0aW9uIGdldCR7NDokMn0oKVxuXAoJe1xuXAoJCXJldHVybiAkdGhpcy0+JHs1OiQxfTtcblwKCX0kezZ9XG5cCiNzZXR0ZXJcblwKc25pcHBldCAkc1xuXAoJJHsxOiRmb299LT5zZXQkezI6QmFyfSgkezN9KTtcblwKI2dldHRlclxuXApzbmlwcGV0ICRnXG5cCgkkezE6JGZvb30tPmdldCR7MjpCYXJ9KCk7XG5cClxuXAojIFRlcnRpYXJ5IGNvbmRpdGlvbmFsXG5cCnNuaXBwZXQgPT86XG5cCgkkJHsxOmZvb30gPSAkezI6dHJ1ZX0gPyAkezM6YX0gOiAkezR9O1xuXApzbmlwcGV0ID86XG5cCgkkezE6dHJ1ZX0gPyAkezI6YX0gOiAkezN9XG5cClxuXApzbmlwcGV0IENcblwKCSRfQ09PS0lFWyckezE6dmFyaWFibGV9J10kezJ9XG5cCnNuaXBwZXQgRVxuXAoJJF9FTlZbJyR7MTp2YXJpYWJsZX0nXSR7Mn1cblwKc25pcHBldCBGXG5cCgkkX0ZJTEVTWyckezE6dmFyaWFibGV9J10kezJ9XG5cCnNuaXBwZXQgR1xuXAoJJF9HRVRbJyR7MTp2YXJpYWJsZX0nXSR7Mn1cblwKc25pcHBldCBQXG5cCgkkX1BPU1RbJyR7MTp2YXJpYWJsZX0nXSR7Mn1cblwKc25pcHBldCBSXG5cCgkkX1JFUVVFU1RbJyR7MTp2YXJpYWJsZX0nXSR7Mn1cblwKc25pcHBldCBTXG5cCgkkX1NFUlZFUlsnJHsxOnZhcmlhYmxlfSddJHsyfVxuXApzbmlwcGV0IFNTXG5cCgkkX1NFU1NJT05bJyR7MTp2YXJpYWJsZX0nXSR7Mn1cblwKXG5cCiMgdGhlIGZvbGxvd2luZyBhcmUgb2xkIG9uZXNcblwKc25pcHBldCBpbmNcblwKCWluY2x1ZGUgJyR7MTpmaWxlfSc7JHsyfVxuXApzbmlwcGV0IGluYzFcblwKCWluY2x1ZGVfb25jZSAnJHsxOmZpbGV9JzskezJ9XG5cCnNuaXBwZXQgcmVxXG5cCglyZXF1aXJlICckezE6ZmlsZX0nOyR7Mn1cblwKc25pcHBldCByZXExXG5cCglyZXF1aXJlX29uY2UgJyR7MTpmaWxlfSc7JHsyfVxuXAojIFN0YXJ0IERvY2Jsb2NrXG5cCnNuaXBwZXQgLypcblwKCS8qKlxuXAoJICogJHsxfVxuXAoJICovXG5cCiMgQ2xhc3MgLSBwb3N0IGRvY1xuXApzbmlwcGV0IGRvY19jcFxuXAoJLyoqXG5cCgkgKiAkezE6dW5kb2N1bWVudGVkIGNsYXNzfVxuXAoJICpcblwKCSAqIEBwYWNrYWdlICR7MjpkZWZhdWx0fVxuXAoJICogQHN1YnBhY2thZ2UgJHszOmRlZmF1bHR9XG5cCgkgKiBAYXV0aG9yICR7NDpgZzpzbmlwc19hdXRob3JgfVxuXAoJICovJHs1fVxuXAojIENsYXNzIFZhcmlhYmxlIC0gcG9zdCBkb2NcblwKc25pcHBldCBkb2NfdnBcblwKCS8qKlxuXAoJICogJHsxOnVuZG9jdW1lbnRlZCBjbGFzcyB2YXJpYWJsZX1cblwKCSAqXG5cCgkgKiBAdmFyICR7MjpzdHJpbmd9XG5cCgkgKi8kezN9XG5cCiMgQ2xhc3MgVmFyaWFibGVcblwKc25pcHBldCBkb2NfdlxuXAoJLyoqXG5cCgkgKiAkezM6dW5kb2N1bWVudGVkIGNsYXNzIHZhcmlhYmxlfVxuXAoJICpcblwKCSAqIEB2YXIgJHs0OnN0cmluZ31cblwKCSAqL1xuXAoJJHsxOnZhcn0gJCR7Mn07JHs1fVxuXAojIENsYXNzXG5cCnNuaXBwZXQgZG9jX2NcblwKCS8qKlxuXAoJICogJHszOnVuZG9jdW1lbnRlZCBjbGFzc31cblwKCSAqXG5cCgkgKiBAcGFja2FnZSAkezQ6ZGVmYXVsdH1cblwKCSAqIEBzdWJwYWNrYWdlICR7NTpkZWZhdWx0fVxuXAoJICogQGF1dGhvciAkezY6YGc6c25pcHNfYXV0aG9yYH1cblwKCSAqL1xuXAoJJHsxOn1jbGFzcyAkezI6fVxuXAoJe1xuXAoJCSR7N31cblwKCX0gLy8gRU5EICQxY2xhc3MgJDJcblwKIyBDb25zdGFudCBEZWZpbml0aW9uIC0gcG9zdCBkb2NcblwKc25pcHBldCBkb2NfZHBcblwKCS8qKlxuXAoJICogJHsxOnVuZG9jdW1lbnRlZCBjb25zdGFudH1cblwKCSAqLyR7Mn1cblwKIyBDb25zdGFudCBEZWZpbml0aW9uXG5cCnNuaXBwZXQgZG9jX2RcblwKCS8qKlxuXAoJICogJHszOnVuZG9jdW1lbnRlZCBjb25zdGFudH1cblwKCSAqL1xuXAoJZGVmaW5lKCR7MX0sICR7Mn0pOyR7NH1cblwKIyBGdW5jdGlvbiAtIHBvc3QgZG9jXG5cCnNuaXBwZXQgZG9jX2ZwXG5cCgkvKipcblwKCSAqICR7MTp1bmRvY3VtZW50ZWQgZnVuY3Rpb259XG5cCgkgKlxuXAoJICogQHJldHVybiAkezI6dm9pZH1cblwKCSAqIEBhdXRob3IgJHszOmBnOnNuaXBzX2F1dGhvcmB9XG5cCgkgKi8kezR9XG5cCiMgRnVuY3Rpb24gc2lnbmF0dXJlXG5cCnNuaXBwZXQgZG9jX3NcblwKCS8qKlxuXAoJICogJHs0OnVuZG9jdW1lbnRlZCBmdW5jdGlvbn1cblwKCSAqXG5cCgkgKiBAcmV0dXJuICR7NTp2b2lkfVxuXAoJICogQGF1dGhvciAkezY6YGc6c25pcHNfYXV0aG9yYH1cblwKCSAqL1xuXAoJJHsxfWZ1bmN0aW9uICR7Mn0oJHszfSk7JHs3fVxuXAojIEZ1bmN0aW9uXG5cCnNuaXBwZXQgZG9jX2ZcblwKCS8qKlxuXAoJICogJHs0OnVuZG9jdW1lbnRlZCBmdW5jdGlvbn1cblwKCSAqXG5cCgkgKiBAcmV0dXJuICR7NTp2b2lkfVxuXAoJICogQGF1dGhvciAkezY6YGc6c25pcHNfYXV0aG9yYH1cblwKCSAqL1xuXAoJJHsxfWZ1bmN0aW9uICR7Mn0oJHszfSlcblwKCXskezd9XG5cCgl9XG5cCiMgSGVhZGVyXG5cCnNuaXBwZXQgZG9jX2hcblwKCS8qKlxuXAoJICogJHsxfVxuXAoJICpcblwKCSAqIEBhdXRob3IgJHsyOmBnOnNuaXBzX2F1dGhvcmB9XG5cCgkgKiBAdmVyc2lvbiAkezM6JElkJH1cblwKCSAqIEBjb3B5cmlnaHQgJHs0OiQyfSwgYHN0cmZ0aW1lKCclZCAlQiwgJVknKWBcblwKCSAqIEBwYWNrYWdlICR7NTpkZWZhdWx0fVxuXAoJICovXG5cClxuXAojIEludGVyZmFjZVxuXApzbmlwcGV0IGludGVyZmFjZVxuXAoJLyoqXG5cCgkgKiAkezI6dW5kb2N1bWVudGVkIGNsYXNzfVxuXAoJICpcblwKCSAqIEBwYWNrYWdlICR7MzpkZWZhdWx0fVxuXAoJICogQGF1dGhvciAkezQ6YGc6c25pcHNfYXV0aG9yYH1cblwKCSAqL1xuXAoJaW50ZXJmYWNlICR7MTokRklMRU5BTUV9XG5cCgl7XG5cCgkJJHs1fVxuXAoJfVxuXAojIGNsYXNzIC4uLlxuXApzbmlwcGV0IGNsYXNzXG5cCgkvKipcblwKCSAqICR7MX1cblwKCSAqL1xuXAoJY2xhc3MgJHsyOiRGSUxFTkFNRX1cblwKCXtcblwKCQkkezN9XG5cCgkJLyoqXG5cCgkJICogJHs0fVxuXAoJCSAqL1xuXAoJCSR7NTpwdWJsaWN9IGZ1bmN0aW9uICR7NjpfX2NvbnN0cnVjdH0oJHs3OmFyZ3VtZW50fSlcblwKCQl7XG5cCgkJCSR7ODovLyBjb2RlLi4ufVxuXAoJCX1cblwKCX1cblwKIyBkZWZpbmUoLi4uKVxuXApzbmlwcGV0IGRlZlxuXAoJZGVmaW5lKCckezF9JyR7Mn0pOyR7M31cblwKIyBkZWZpbmVkKC4uLilcblwKc25pcHBldCBkZWY/XG5cCgkkezF9ZGVmaW5lZCgnJHsyfScpJHszfVxuXApzbmlwcGV0IHdoXG5cCgl3aGlsZSAoJHsxOi8qIGNvbmRpdGlvbiAqL30pIHtcblwKCQkkezI6Ly8gY29kZS4uLn1cblwKCX1cblwKIyBkbyAuLi4gd2hpbGVcblwKc25pcHBldCBkb1xuXAoJZG8ge1xuXAoJCSR7MjovLyBjb2RlLi4uIH1cblwKCX0gd2hpbGUgKCR7MTovKiBjb25kaXRpb24gKi99KTtcblwKc25pcHBldCBpZlxuXAoJaWYgKCR7MTovKiBjb25kaXRpb24gKi99KSB7XG5cCgkJJHsyOi8vIGNvZGUuLi59XG5cCgl9XG5cCnNuaXBwZXQgaWZlXG5cCglpZiAoJHsxOi8qIGNvbmRpdGlvbiAqL30pIHtcblwKCQkkezI6Ly8gY29kZS4uLn1cblwKCX0gZWxzZSB7XG5cCgkJJHszOi8vIGNvZGUuLi59XG5cCgl9XG5cCgkkezR9XG5cCnNuaXBwZXQgZWxzZVxuXAoJZWxzZSB7XG5cCgkJJHsxOi8vIGNvZGUuLi59XG5cCgl9XG5cCnNuaXBwZXQgZWxzZWlmXG5cCgllbHNlaWYgKCR7MTovKiBjb25kaXRpb24gKi99KSB7XG5cCgkJJHsyOi8vIGNvZGUuLi59XG5cCgl9XG5cCnNuaXBwZXQgc3dpdGNoXG5cCglzd2l0Y2ggKCQkezE6dmFyaWFibGV9KSB7XG5cCgkJY2FzZSAnJHsyOnZhbHVlfSc6XG5cCgkJCSR7MzovLyBjb2RlLi4ufVxuXAoJCQlicmVhaztcblwKCQkkezV9XG5cCgkJZGVmYXVsdDpcblwKCQkJJHs0Oi8vIGNvZGUuLi59XG5cCgkJCWJyZWFrO1xuXAoJfVxuXApzbmlwcGV0IGNhc2VcblwKCWNhc2UgJyR7MTp2YWx1ZX0nOlxuXAoJCSR7MjovLyBjb2RlLi4ufVxuXAoJCWJyZWFrOyR7M31cblwKc25pcHBldCBmb3JcblwKCWZvciAoJCR7MjppfSA9IDA7ICQkMiA8ICR7MTpjb3VudH07ICQkMiR7MzorK30pIHtcblwKCQkkezQ6IC8vIGNvZGUuLi59XG5cCgl9XG5cCnNuaXBwZXQgZm9yZWFjaFxuXAoJZm9yZWFjaCAoJCR7MTp2YXJpYWJsZX0gYXMgJCR7Mjp2YWx1ZX0pIHtcblwKCQkkezM6Ly8gY29kZS4uLn1cblwKCX1cblwKc25pcHBldCBmb3JlYWNoa1xuXAoJZm9yZWFjaCAoJCR7MTp2YXJpYWJsZX0gYXMgJCR7MjprZXl9ID0+ICQkezM6dmFsdWV9KSB7XG5cCgkJJHs0Oi8vIGNvZGUuLi59XG5cCgl9XG5cCiMgJC4uLiA9IGFycmF5ICguLi4pXG5cCnNuaXBwZXQgYXJyYXlcblwKCSQkezE6YXJyYXlOYW1lfSA9IGFycmF5KCckezJ9JyA9PiAkezN9KTskezR9XG5cCnNuaXBwZXQgdHJ5XG5cCgl0cnkge1xuXAoJCSR7Mn1cblwKCX0gY2F0Y2ggKCR7MTpFeGNlcHRpb259ICRlKSB7XG5cCgl9XG5cCiMgbGFtYmRhIHdpdGggY2xvc3VyZVxuXApzbmlwcGV0IGxhbWJkYVxuXAoJJHsxOnN0YXRpYyB9ZnVuY3Rpb24gKCR7MjphcmdzfSkgdXNlICgkezM6JiR4LCAkeSAvKnB1dCB2YXJzIGluIHNjb3BlIChjbG9zdXJlKSAqL30pIHtcblwKCQkkezR9XG5cCgl9O1xuXAojIHByZV9kdW1wKCk7XG5cCnNuaXBwZXQgcGRcblwKCWVjaG8gJzxwcmU+JzsgdmFyX2R1bXAoJHsxfSk7IGVjaG8gJzwvcHJlPic7XG5cCiMgcHJlX2R1bXAoKTsgZGllKCk7XG5cCnNuaXBwZXQgcGRkXG5cCgllY2hvICc8cHJlPic7IHZhcl9kdW1wKCR7MX0pOyBlY2hvICc8L3ByZT4nOyBkaWUoJHsyOn0pO1xuXApzbmlwcGV0IHZkXG5cCgl2YXJfZHVtcCgkezF9KTtcblwKc25pcHBldCB2ZGRcblwKCXZhcl9kdW1wKCR7MX0pOyBkaWUoJHsyOn0pO1xuXApzbmlwcGV0IGh0dHBfcmVkaXJlY3RcblwKCWhlYWRlciAoXCJIVFRQLzEuMSAzMDEgTW92ZWQgUGVybWFuZW50bHlcIik7XG5cCgloZWFkZXIgKFwiTG9jYXRpb246IFwiLlVSTCk7XG5cCglleGl0KCk7XG5cCiMgR2V0dGVycyAmIFNldHRlcnNcblwKc25pcHBldCBnc1xuXAoJLyoqXG5cCgkgKiBHZXRzIHRoZSB2YWx1ZSBvZiAkezE6Zm9vfVxuXAoJICpcblwKCSAqIEByZXR1cm4gJHsyOiQxfVxuXAoJICovXG5cCglwdWJsaWMgZnVuY3Rpb24gZ2V0JHszOiQyfSgpXG5cCgl7XG5cCgkJcmV0dXJuICR0aGlzLT4kezQ6JDF9O1xuXAoJfVxuXApcblwKCS8qKlxuXAoJICogU2V0cyB0aGUgdmFsdWUgb2YgJDFcblwKCSAqXG5cCgkgKiBAcGFyYW0gJDIgJCQxICR7NTpkZXNjcmlwdGlvbn1cblwKCSAqXG5cCgkgKiBAcmV0dXJuICR7NjokRklMRU5BTUV9XG5cCgkgKi9cblwKCXB1YmxpYyBmdW5jdGlvbiBzZXQkMygkezc6JDIgfSQkMSlcblwKCXtcblwKCQkkdGhpcy0+JDQgPSAkJDE7XG5cCgkJcmV0dXJuICR0aGlzO1xuXAoJfSR7OH1cblwKIyBhbm90YXRpb24sIGdldCwgYW5kIHNldCwgdXNlZnVsIGZvciBkb2N0cmluZVxuXApzbmlwcGV0IGFnc1xuXAoJLyoqXG5cCgkgKiAkezE6ZGVzY3JpcHRpb259XG5cCgkgKlxuXAoJICogQCR7N31cblwKCSAqL1xuXAoJJHsyOnByb3RlY3RlZH0gJCR7Mzpmb299O1xuXApcblwKCXB1YmxpYyBmdW5jdGlvbiBnZXQkezQ6JDN9KClcblwKCXtcblwKCQlyZXR1cm4gJHRoaXMtPiQzO1xuXAoJfVxuXApcblwKCXB1YmxpYyBmdW5jdGlvbiBzZXQkNCgkezU6JDQgfSQkezY6JDN9KVxuXAoJe1xuXAoJCSR0aGlzLT4kMyA9ICQkNjtcblwKCQlyZXR1cm4gJHRoaXM7XG5cCgl9XG5cCnNuaXBwZXQgcmV0dFxuXAoJcmV0dXJuIHRydWU7XG5cCnNuaXBwZXQgcmV0ZlxuXAoJcmV0dXJuIGZhbHNlO1xuXApzY29wZSBodG1sXG5cCnNuaXBwZXQgPD9cblwKCTw/cGhwXG5cClxuXAoJJHsxfVxuXApzbmlwcGV0IDw/ZVxuXAoJPD9waHAgZWNobyAkezF9ID8+XG5cCiMgdGhpcyBvbmUgaXMgZm9yIHBocDUuNFxuXApzbmlwcGV0IDw/PVxuXAoJPD89JHsxfT8+XG5cCnNuaXBwZXQgaWZpbFxuXAoJPD9waHAgaWYgKCR7MTovKiBjb25kaXRpb24gKi99KTogPz5cblwKCQkkezI6PCEtLSBjb2RlLi4uIC0tPn1cblwKCTw/cGhwIGVuZGlmOyA/PlxuXApzbmlwcGV0IGlmZWlsXG5cCgk8P3BocCBpZiAoJHsxOi8qIGNvbmRpdGlvbiAqL30pOiA/PlxuXAoJCSR7Mjo8IS0tIGh0bWwuLi4gLS0+fVxuXAoJPD9waHAgZWxzZTogPz5cblwKCQkkezM6PCEtLSBodG1sLi4uIC0tPn1cblwKCTw/cGhwIGVuZGlmOyA/PlxuXAoJJHs0fVxuXApzbmlwcGV0IGZvcmVhY2hpbFxuXAoJPD9waHAgZm9yZWFjaCAoJCR7MTp2YXJpYWJsZX0gYXMgJCR7Mjp2YWx1ZX0pOiA/PlxuXAoJCSR7Mzo8IS0tIGh0bWwuLi4gLS0+fVxuXAoJPD9waHAgZW5kZm9yZWFjaDsgPz5cblwKc25pcHBldCBmb3JlYWNoa2lsXG5cCgk8P3BocCBmb3JlYWNoICgkJHsxOnZhcmlhYmxlfSBhcyAkJHsyOmtleX0gPT4gJCR7Mzp2YWx1ZX0pOiA/PlxuXAoJCSR7NDo8IS0tIGh0bWwuLi4gLS0+fVxuXAoJPD9waHAgZW5kZm9yZWFjaDsgPz5cblwKc2NvcGUgaHRtbC10YWdcblwKc25pcHBldCBpZmlsXFxuXFxcblwKCTw/cGhwIGlmICgkezE6dHJ1ZX0pOiA/PiR7Mjpjb2RlfTw/cGhwIGVuZGlmOyA/PlxuXApzbmlwcGV0IGlmZWlsXFxuXFxcblwKCTw/cGhwIGlmICgkezE6dHJ1ZX0pOiA/PiR7Mjpjb2RlfTw/cGhwIGVsc2U6ID8+JHszOmNvZGV9PD9waHAgZW5kaWY7ID8+JHs0fVxuXAoiOwpleHBvcnRzLnNjb3BlID0gInBocCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3BocCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/php_laravel_blade.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGhwX2xhcmF2ZWxfYmxhZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwogICAgZXhwb3J0cy5zY29wZSA9ICJwaHAiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9waHBfbGFyYXZlbF9ibGFkZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/pig.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGlnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAicGlnIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvcGlnIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/plain_text.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcGxhaW5fdGV4dCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInBsYWluX3RleHQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9wbGFpbl90ZXh0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/powershell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcG93ZXJzaGVsbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInBvd2Vyc2hlbGwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9wb3dlcnNoZWxsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/praat.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcHJhYXQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJwcmFhdCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3ByYWF0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/prolog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcHJvbG9nIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAicHJvbG9nIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvcHJvbG9nIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/properties.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcHJvcGVydGllcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInByb3BlcnRpZXMiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9wcm9wZXJ0aWVzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/protobuf.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcHJvdG9idWYiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAiIjsKZXhwb3J0cy5zY29wZSA9ICJwcm90b2J1ZiI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3Byb3RvYnVmIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/puppet.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcHVwcGV0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAicHVwcGV0IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvcHVwcGV0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcHl0aG9uIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgIyFcblwKCSMhL3Vzci9iaW4vZW52IHB5dGhvblxuXApzbmlwcGV0IGltcFxuXAoJaW1wb3J0ICR7MTptb2R1bGV9XG5cCnNuaXBwZXQgZnJvbVxuXAoJZnJvbSAkezE6cGFja2FnZX0gaW1wb3J0ICR7Mjptb2R1bGV9XG5cCiMgTW9kdWxlIERvY3N0cmluZ1xuXApzbmlwcGV0IGRvY3NcblwKCScnJ1xuXAoJRmlsZTogJHsxOkZJTEVOQU1FOmZpbGVfbmFtZX1cblwKCUF1dGhvcjogJHsyOmF1dGhvcn1cblwKCURlc2NyaXB0aW9uOiAkezN9XG5cCgknJydcblwKc25pcHBldCB3aFxuXAoJd2hpbGUgJHsxOmNvbmRpdGlvbn06XG5cCgkJJHsyOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKIyBkb3doIC0gZG9lcyB0aGUgc2FtZSBhcyBkby4uLndoaWxlIGluIG90aGVyIGxhbmd1YWdlc1xuXApzbmlwcGV0IGRvd2hcblwKCXdoaWxlIFRydWU6XG5cCgkJJHsxOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKCQlpZiAkezI6Y29uZGl0aW9ufTpcblwKCQkJYnJlYWtcblwKc25pcHBldCB3aXRoXG5cCgl3aXRoICR7MTpleHByfSBhcyAkezI6dmFyfTpcblwKCQkkezM6IyBUT0RPOiB3cml0ZSBjb2RlLi4ufVxuXAojIE5ldyBDbGFzc1xuXApzbmlwcGV0IGNsXG5cCgljbGFzcyAkezE6Q2xhc3NOYW1lfSgkezI6b2JqZWN0fSk6XG5cCgkJXCJcIlwiJHszOmRvY3N0cmluZyBmb3IgJDF9XCJcIlwiXG5cCgkJZGVmIF9faW5pdF9fKHNlbGYsICR7NDphcmd9KTpcblwKCQkJJHs1OnN1cGVyKCQxLCBzZWxmKS5fX2luaXRfXygpfVxuXAoJCQlzZWxmLiQ0ID0gJDRcblwKCQkJJHs2fVxuXAojIE5ldyBGdW5jdGlvblxuXApzbmlwcGV0IGRlZlxuXAoJZGVmICR7MTpmbmFtZX0oJHsyOmBpbmRlbnQoJy4nKSA/ICdzZWxmJyA6ICcnYH0pOlxuXAoJCVwiXCJcIiR7Mzpkb2NzdHJpbmcgZm9yICQxfVwiXCJcIlxuXAoJCSR7NDojIFRPRE86IHdyaXRlIGNvZGUuLi59XG5cCnNuaXBwZXQgZGVmZlxuXAoJZGVmICR7MTpmbmFtZX0oJHsyOmBpbmRlbnQoJy4nKSA/ICdzZWxmJyA6ICcnYH0pOlxuXAoJCSR7MzojIFRPRE86IHdyaXRlIGNvZGUuLi59XG5cCiMgTmV3IE1ldGhvZFxuXApzbmlwcGV0IGRlZnNcblwKCWRlZiAkezE6bW5hbWV9KHNlbGYsICR7Mjphcmd9KTpcblwKCQkkezM6IyBUT0RPOiB3cml0ZSBjb2RlLi4ufVxuXAojIE5ldyBQcm9wZXJ0eVxuXApzbmlwcGV0IHByb3BlcnR5XG5cCglkZWYgJHsxOmZvb30oKTpcblwKCQlkb2MgPSBcIiR7MjpUaGUgJDEgcHJvcGVydHkufVwiXG5cCgkJZGVmIGZnZXQoc2VsZik6XG5cCgkJCSR7MzpyZXR1cm4gc2VsZi5fJDF9XG5cCgkJZGVmIGZzZXQoc2VsZiwgdmFsdWUpOlxuXAoJCQkkezQ6c2VsZi5fJDEgPSB2YWx1ZX1cblwKIyBJZnNcblwKc25pcHBldCBpZlxuXAoJaWYgJHsxOmNvbmRpdGlvbn06XG5cCgkJJHsyOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKc25pcHBldCBlbFxuXAoJZWxzZTpcblwKCQkkezE6IyBUT0RPOiB3cml0ZSBjb2RlLi4ufVxuXApzbmlwcGV0IGVpXG5cCgllbGlmICR7MTpjb25kaXRpb259OlxuXAoJCSR7MjojIFRPRE86IHdyaXRlIGNvZGUuLi59XG5cCiMgRm9yXG5cCnNuaXBwZXQgZm9yXG5cCglmb3IgJHsxOml0ZW19IGluICR7MjppdGVtc306XG5cCgkJJHszOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKIyBFbmNvZGVzXG5cCnNuaXBwZXQgY3V0ZjhcblwKCSMgLSotIGNvZGluZzogdXRmLTggLSotXG5cCnNuaXBwZXQgY2xhdGluMVxuXAoJIyAtKi0gY29kaW5nOiBsYXRpbi0xIC0qLVxuXApzbmlwcGV0IGNhc2NpaVxuXAoJIyAtKi0gY29kaW5nOiBhc2NpaSAtKi1cblwKIyBMYW1iZGFcblwKc25pcHBldCBsZFxuXAoJJHsxOnZhcn0gPSBsYW1iZGEgJHsyOnZhcnN9IDogJHszOmFjdGlvbn1cblwKc25pcHBldCAuXG5cCglzZWxmLlxuXApzbmlwcGV0IHRyeSBUcnkvRXhjZXB0XG5cCgl0cnk6XG5cCgkJJHsxOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKCWV4Y2VwdCAkezI6RXhjZXB0aW9ufSwgJHszOmV9OlxuXAoJCSR7NDpyYWlzZSAkM31cblwKc25pcHBldCB0cnkgVHJ5L0V4Y2VwdC9FbHNlXG5cCgl0cnk6XG5cCgkJJHsxOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKCWV4Y2VwdCAkezI6RXhjZXB0aW9ufSwgJHszOmV9OlxuXAoJCSR7NDpyYWlzZSAkM31cblwKCWVsc2U6XG5cCgkJJHs1OiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKc25pcHBldCB0cnkgVHJ5L0V4Y2VwdC9GaW5hbGx5XG5cCgl0cnk6XG5cCgkJJHsxOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKCWV4Y2VwdCAkezI6RXhjZXB0aW9ufSwgJHszOmV9OlxuXAoJCSR7NDpyYWlzZSAkM31cblwKCWZpbmFsbHk6XG5cCgkJJHs1OiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKc25pcHBldCB0cnkgVHJ5L0V4Y2VwdC9FbHNlL0ZpbmFsbHlcblwKCXRyeTpcblwKCQkkezE6IyBUT0RPOiB3cml0ZSBjb2RlLi4ufVxuXAoJZXhjZXB0ICR7MjpFeGNlcHRpb259LCAkezM6ZX06XG5cCgkJJHs0OnJhaXNlICQzfVxuXAoJZWxzZTpcblwKCQkkezU6IyBUT0RPOiB3cml0ZSBjb2RlLi4ufVxuXAoJZmluYWxseTpcblwKCQkkezY6IyBUT0RPOiB3cml0ZSBjb2RlLi4ufVxuXAojIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6XG5cCnNuaXBwZXQgaWZtYWluXG5cCglpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOlxuXAoJCSR7MTptYWluKCl9XG5cCiMgX19tYWdpY19fXG5cCnNuaXBwZXQgX1xuXAoJX18kezE6aW5pdH1fXyR7Mn1cblwKIyBweXRob24gZGVidWdnZXIgKHBkYilcblwKc25pcHBldCBwZGJcblwKCWltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXAojIGlweXRob24gZGVidWdnZXIgKGlwZGIpXG5cCnNuaXBwZXQgaXBkYlxuXAoJaW1wb3J0IGlwZGI7IGlwZGIuc2V0X3RyYWNlKClcblwKIyBpcHl0aG9uIGRlYnVnZ2VyIChwZGJiYilcblwKc25pcHBldCBwZGJiYlxuXAoJaW1wb3J0IHBkYnBwOyBwZGJwcC5zZXRfdHJhY2UoKVxuXApzbmlwcGV0IHBwcmludFxuXAoJaW1wb3J0IHBwcmludDsgcHByaW50LnBwcmludCgkezF9KSR7Mn1cblwKc25pcHBldCBcIlxuXAoJXCJcIlwiXG5cCgkkezE6ZG9jfVxuXAoJXCJcIlwiXG5cCiMgdGVzdCBmdW5jdGlvbi9tZXRob2RcblwKc25pcHBldCB0ZXN0XG5cCglkZWYgdGVzdF8kezE6ZGVzY3JpcHRpb259KCR7MjpzZWxmfSk6XG5cCgkJJHszOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKIyB0ZXN0IGNhc2VcblwKc25pcHBldCB0ZXN0Y2FzZVxuXAoJY2xhc3MgJHsxOkV4YW1wbGVDYXNlfSh1bml0dGVzdC5UZXN0Q2FzZSk6XG5cCgkJXG5cCgkJZGVmIHRlc3RfJHsyOmRlc2NyaXB0aW9ufShzZWxmKTpcblwKCQkJJHszOiMgVE9ETzogd3JpdGUgY29kZS4uLn1cblwKc25pcHBldCBmdXRcblwKCWZyb20gX19mdXR1cmVfXyBpbXBvcnQgJHsxfVxuXAojZ2V0b3B0XG5cCnNuaXBwZXQgZ2V0b3B0XG5cCgl0cnk6XG5cCgkJIyBTaG9ydCBvcHRpb24gc3ludGF4OiBcImh2OlwiXG5cCgkJIyBMb25nIG9wdGlvbiBzeW50YXg6IFwiaGVscFwiIG9yIFwidmVyYm9zZT1cIlxuXAoJCW9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgXCIkezE6c2hvcnRfb3B0aW9uc31cIiwgWyR7Mjpsb25nX29wdGlvbnN9XSlcblwKCVxuXAoJZXhjZXB0IGdldG9wdC5HZXRvcHRFcnJvciwgZXJyOlxuXAoJCSMgUHJpbnQgZGVidWcgaW5mb1xuXAoJCXByaW50IHN0cihlcnIpXG5cCgkJJHszOmVycm9yX2FjdGlvbn1cblwKXG5cCglmb3Igb3B0aW9uLCBhcmd1bWVudCBpbiBvcHRzOlxuXAoJCWlmIG9wdGlvbiBpbiAoXCItaFwiLCBcIi0taGVscFwiKTpcblwKCQkJJHs0fVxuXAoJCWVsaWYgb3B0aW9uIGluIChcIi12XCIsIFwiLS12ZXJib3NlXCIpOlxuXAoJCQl2ZXJib3NlID0gYXJndW1lbnRcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJweXRob24iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9weXRob24iXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/r.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvciIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICJzbmlwcGV0ICMhXG5cCgkjIS91c3IvYmluL2VudiBSc2NyaXB0XG5cClxuXAojIGluY2x1ZGVzXG5cCnNuaXBwZXQgbGliXG5cCglsaWJyYXJ5KCR7MTpwYWNrYWdlfSlcblwKc25pcHBldCByZXFcblwKCXJlcXVpcmUoJHsxOnBhY2thZ2V9KVxuXApzbmlwcGV0IHNvdXJjZVxuXAoJc291cmNlKCckezE6ZmlsZX0nKVxuXApcblwKIyBjb25kaXRpb25hbHNcblwKc25pcHBldCBpZlxuXAoJaWYgKCR7MTpjb25kaXRpb259KSB7XG5cCgkJJHsyOmNvZGV9XG5cCgl9XG5cCnNuaXBwZXQgZWxcblwKCWVsc2Uge1xuXAoJCSR7MTpjb2RlfVxuXAoJfVxuXApzbmlwcGV0IGVpXG5cCgllbHNlIGlmICgkezE6Y29uZGl0aW9ufSkge1xuXAoJCSR7Mjpjb2RlfVxuXAoJfVxuXApcblwKIyBmdW5jdGlvbnNcblwKc25pcHBldCBmdW5cblwKCSR7MTpuYW1lfSA9IGZ1bmN0aW9uICgkezI6dmFyaWFibGVzfSkge1xuXAoJCSR7Mzpjb2RlfVxuXAoJfVxuXApzbmlwcGV0IHJldFxuXAoJcmV0dXJuKCR7MTpjb2RlfSlcblwKXG5cCiMgZGF0YWZyYW1lcywgbGlzdHMsIGV0Y1xuXApzbmlwcGV0IGRmXG5cCgkkezE6bmFtZX1bJHsyOnJvd3N9LCAkezM6Y29sc31dXG5cCnNuaXBwZXQgY1xuXAoJYygkezE6aXRlbXN9KVxuXApzbmlwcGV0IGxpXG5cCglsaXN0KCR7MTppdGVtc30pXG5cCnNuaXBwZXQgbWF0XG5cCgltYXRyaXgoJHsxOmRhdGF9LCBucm93PSR7Mjpyb3dzfSwgbmNvbD0kezM6Y29sc30pXG5cClxuXAojIGFwcGx5IGZ1bmN0aW9uc1xuXApzbmlwcGV0IGFwcGx5XG5cCglhcHBseSgkezE6YXJyYXl9LCAkezI6bWFyZ2lufSwgJHszOmZ1bmN0aW9ufSlcblwKc25pcHBldCBsYXBwbHlcblwKCWxhcHBseSgkezE6bGlzdH0sICR7MjpmdW5jdGlvbn0pXG5cCnNuaXBwZXQgc2FwcGx5XG5cCglzYXBwbHkoJHsxOmxpc3R9LCAkezI6ZnVuY3Rpb259KVxuXApzbmlwcGV0IHZhcHBseVxuXAoJdmFwcGx5KCR7MTpsaXN0fSwgJHsyOmZ1bmN0aW9ufSwgJHszOnR5cGV9KVxuXApzbmlwcGV0IG1hcHBseVxuXAoJbWFwcGx5KCR7MTpmdW5jdGlvbn0sICR7MjouLi59KVxuXApzbmlwcGV0IHRhcHBseVxuXAoJdGFwcGx5KCR7MTp2ZWN0b3J9LCAkezI6aW5kZXh9LCAkezM6ZnVuY3Rpb259KVxuXApzbmlwcGV0IHJhcHBseVxuXAoJcmFwcGx5KCR7MTpsaXN0fSwgJHsyOmZ1bmN0aW9ufSlcblwKXG5cCiMgcGx5ciBmdW5jdGlvbnNcblwKc25pcHBldCBkZFxuXAoJZGRwbHkoJHsxOmZyYW1lfSwgJHsyOnZhcmlhYmxlc30sICR7MzpmdW5jdGlvbn0pXG5cCnNuaXBwZXQgZGxcblwKCWRscGx5KCR7MTpmcmFtZX0sICR7Mjp2YXJpYWJsZXN9LCAkezM6ZnVuY3Rpb259KVxuXApzbmlwcGV0IGRhXG5cCglkYXBseSgkezE6ZnJhbWV9LCAkezI6dmFyaWFibGVzfSwgJHszOmZ1bmN0aW9ufSlcblwKc25pcHBldCBkX1xuXAoJZF9wbHkoJHsxOmZyYW1lfSwgJHsyOnZhcmlhYmxlc30sICR7MzpmdW5jdGlvbn0pXG5cClxuXApzbmlwcGV0IGFkXG5cCglhZHBseSgkezE6YXJyYXl9LCAkezI6bWFyZ2lufSwgJHszOmZ1bmN0aW9ufSlcblwKc25pcHBldCBhbFxuXAoJYWxwbHkoJHsxOmFycmF5fSwgJHsyOm1hcmdpbn0sICR7MzpmdW5jdGlvbn0pXG5cCnNuaXBwZXQgYWFcblwKCWFhcGx5KCR7MTphcnJheX0sICR7MjptYXJnaW59LCAkezM6ZnVuY3Rpb259KVxuXApzbmlwcGV0IGFfXG5cCglhX3BseSgkezE6YXJyYXl9LCAkezI6bWFyZ2lufSwgJHszOmZ1bmN0aW9ufSlcblwKXG5cCnNuaXBwZXQgbGRcblwKCWxkcGx5KCR7MTpsaXN0fSwgJHsyOmZ1bmN0aW9ufSlcblwKc25pcHBldCBsbFxuXAoJbGxwbHkoJHsxOmxpc3R9LCAkezI6ZnVuY3Rpb259KVxuXApzbmlwcGV0IGxhXG5cCglsYXBseSgkezE6bGlzdH0sICR7MjpmdW5jdGlvbn0pXG5cCnNuaXBwZXQgbF9cblwKCWxfcGx5KCR7MTpsaXN0fSwgJHsyOmZ1bmN0aW9ufSlcblwKXG5cCnNuaXBwZXQgbWRcblwKCW1kcGx5KCR7MTptYXRyaXh9LCAkezI6ZnVuY3Rpb259KVxuXApzbmlwcGV0IG1sXG5cCgltbHBseSgkezE6bWF0cml4fSwgJHsyOmZ1bmN0aW9ufSlcblwKc25pcHBldCBtYVxuXAoJbWFwbHkoJHsxOm1hdHJpeH0sICR7MjpmdW5jdGlvbn0pXG5cCnNuaXBwZXQgbV9cblwKCW1fcGx5KCR7MTptYXRyaXh9LCAkezI6ZnVuY3Rpb259KVxuXApcblwKIyBwbG90IGZ1bmN0aW9uc1xuXApzbmlwcGV0IHBsXG5cCglwbG90KCR7MTp4fSwgJHsyOnl9KVxuXApzbmlwcGV0IGdncFxuXAoJZ2dwbG90KCR7MTpkYXRhfSwgYWVzKCR7MjphZXN0aGV0aWNzfSkpXG5cCnNuaXBwZXQgaW1nXG5cCgkkezE6KGpwZWcsYm1wLHBuZyx0aWZmKX0oZmlsZW5hbWU9XCIkezI6ZmlsZW5hbWV9XCIsIHdpZHRoPSR7M30sIGhlaWdodD0kezR9LCB1bml0PVwiJHs1fVwiKVxuXAoJJHs2OnBsb3R9XG5cCglkZXYub2ZmKClcblwKXG5cCiMgc3RhdGlzdGljYWwgdGVzdCBmdW5jdGlvbnNcblwKc25pcHBldCBmaXNcblwKCWZpc2hlci50ZXN0KCR7MTp4fSwgJHsyOnl9KVxuXApzbmlwcGV0IGNoaVxuXAoJY2hpc3EudGVzdCgkezE6eH0sICR7Mjp5fSlcblwKc25pcHBldCB0dFxuXAoJdC50ZXN0KCR7MTp4fSwgJHsyOnl9KVxuXApzbmlwcGV0IHdpbFxuXAoJd2lsY294LnRlc3QoJHsxOnh9LCAkezI6eX0pXG5cCnNuaXBwZXQgY29yXG5cCgljb3IudGVzdCgkezE6eH0sICR7Mjp5fSlcblwKc25pcHBldCBmdGVcblwKCXZhci50ZXN0KCR7MTp4fSwgJHsyOnl9KVxuXApzbmlwcGV0IGt2dCBcblwKCWt2LnRlc3QoJHsxOnh9LCAkezI6eX0pXG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAiciI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3IiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/razor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcmF6b3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAic25pcHBldCBpZlxuXAooJHsxfSA9PSAkezJ9KSB7XG5cCgkkezN9XG5cCn0iOwpleHBvcnRzLnNjb3BlID0gInJhem9yIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvcmF6b3IiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/rdoc.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcmRvYyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInJkb2MiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9yZG9jIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/red.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcmVkIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiAiOwpleHBvcnRzLnNjb3BlID0gInJlZCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3JlZCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/redshift.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcmVkc2hpZnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJyZWRzaGlmdCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3JlZHNoaWZ0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/rhtml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcmh0bWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJyaHRtbCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3JodG1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcnN0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgcnN0XG5cClxuXApzbmlwcGV0IDpcblwKCTokezE6ZmllbGQgbmFtZX06ICR7MjpmaWVsZCBib2R5fVxuXApzbmlwcGV0ICpcblwKCSokezE6RW1waGFzaXN9KlxuXApzbmlwcGV0ICoqXG5cCgkqKiR7MTpTdHJvbmcgZW1waGFzaXN9KipcblwKc25pcHBldCBfXG5cCglcXGAkezE6aHlwZXJsaW5rLW5hbWV9XFxgX1xuXAoJLi4gX1xcYCQxXFxgOiAkezI6bGluay1ibG9ja31cblwKc25pcHBldCA9XG5cCgkkezE6VGl0bGV9XG5cCgk9PT09PSR7Mjo9fVxuXAoJJHszfVxuXApzbmlwcGV0IC1cblwKCSR7MTpUaXRsZX1cblwKCS0tLS0tJHsyOi19XG5cCgkkezN9XG5cCnNuaXBwZXQgY29udDpcblwKCS4uIGNvbnRlbnRzOjpcblwKCVxuXAoiOwpleHBvcnRzLnNjb3BlID0gInJzdCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3JzdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcnVieSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cCiMgUnVieSBzbmlwcGV0cyAtIGZvciBSYWlscywgc2VlIGJlbG93ICNcblwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuXApcblwKIyBlbmNvZGluZyBmb3IgUnVieSAxLjlcblwKc25pcHBldCBlbmNcblwKCSMgZW5jb2Rpbmc6IHV0Zi04XG5cClxuXAojICMhL3Vzci9iaW4vZW52IHJ1YnlcblwKc25pcHBldCAjIVxuXAoJIyEvdXNyL2Jpbi9lbnYgcnVieVxuXAoJIyBlbmNvZGluZzogdXRmLThcblwKXG5cCiMgTmV3IEJsb2NrXG5cCnNuaXBwZXQgPWJcblwKCT1iZWdpbiByZG9jXG5cCgkJJHsxfVxuXAoJPWVuZFxuXApzbmlwcGV0IHlcblwKCTp5aWVsZHM6ICR7MTphcmd1bWVudHN9XG5cCnNuaXBwZXQgcmJcblwKCSMhL3Vzci9iaW4vZW52IHJ1YnkgLXdLVVxuXApzbmlwcGV0IGJlZ1xuXAoJYmVnaW5cblwKCQkkezN9XG5cCglyZXNjdWUgJHsxOkV4Y2VwdGlvbn0gPT4gJHsyOmV9XG5cCgllbmRcblwKXG5cCnNuaXBwZXQgcmVxIHJlcXVpcmVcblwKCXJlcXVpcmUgXCIkezF9XCIkezJ9XG5cCnNuaXBwZXQgI1xuXAoJIyA9PlxuXApzbmlwcGV0IGVuZFxuXAoJX19FTkRfX1xuXApzbmlwcGV0IGNhc2VcblwKCWNhc2UgJHsxOm9iamVjdH1cblwKCXdoZW4gJHsyOmNvbmRpdGlvbn1cblwKCQkkezN9XG5cCgllbmRcblwKc25pcHBldCB3aGVuXG5cCgl3aGVuICR7MTpjb25kaXRpb259XG5cCgkJJHsyfVxuXApzbmlwcGV0IGRlZlxuXAoJZGVmICR7MTptZXRob2RfbmFtZX1cblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBkZWZ0XG5cCglkZWYgdGVzdF8kezE6Y2FzZV9uYW1lfVxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGlmXG5cCglpZiAkezE6Y29uZGl0aW9ufVxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGlmZVxuXAoJaWYgJHsxOmNvbmRpdGlvbn1cblwKCQkkezJ9XG5cCgllbHNlXG5cCgkJJHszfVxuXAoJZW5kXG5cCnNuaXBwZXQgZWxzaWZcblwKCWVsc2lmICR7MTpjb25kaXRpb259XG5cCgkJJHsyfVxuXApzbmlwcGV0IHVubGVzc1xuXAoJdW5sZXNzICR7MTpjb25kaXRpb259XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgd2hpbGVcblwKCXdoaWxlICR7MTpjb25kaXRpb259XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgZm9yXG5cCglmb3IgJHsxOmV9IGluICR7MjpjfVxuXAoJCSR7M31cblwKCWVuZFxuXApzbmlwcGV0IHVudGlsXG5cCgl1bnRpbCAkezE6Y29uZGl0aW9ufVxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGNsYSBjbGFzcyAuLiBlbmRcblwKCWNsYXNzICR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgpLCAnXFwoX1xcfF5cXClcXCguXFwpJywgJ1xcdVxcMicsICdnJylgfVxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGNsYSBjbGFzcyAuLiBpbml0aWFsaXplIC4uIGVuZFxuXAoJY2xhc3MgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCksICdcXChfXFx8XlxcKVxcKC5cXCknLCAnXFx1XFwyJywgJ2cnKWB9XG5cCgkJZGVmIGluaXRpYWxpemUoJHsyOmFyZ3N9KVxuXAoJCQkkezN9XG5cCgkJZW5kXG5cCgllbmRcblwKc25pcHBldCBjbGEgY2xhc3MgLi4gPCBQYXJlbnRDbGFzcyAuLiBpbml0aWFsaXplIC4uIGVuZFxuXAoJY2xhc3MgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCksICdcXChfXFx8XlxcKVxcKC5cXCknLCAnXFx1XFwyJywgJ2cnKWB9IDwgJHsyOlBhcmVudENsYXNzfVxuXAoJCWRlZiBpbml0aWFsaXplKCR7MzphcmdzfSlcblwKCQkJJHs0fVxuXAoJCWVuZFxuXAoJZW5kXG5cCnNuaXBwZXQgY2xhIENsYXNzTmFtZSA9IFN0cnVjdCAuLiBkbyAuLiBlbmRcblwKCSR7MTpgc3Vic3RpdHV0ZShGaWxlbmFtZSgpLCAnXFwoX1xcfF5cXClcXCguXFwpJywgJ1xcdVxcMicsICdnJylgfSA9IFN0cnVjdC5uZXcoOiR7MjphdHRyX25hbWVzfSkgZG9cblwKCQlkZWYgJHszOm1ldGhvZF9uYW1lfVxuXAoJCQkkezR9XG5cCgkJZW5kXG5cCgllbmRcblwKc25pcHBldCBjbGEgY2xhc3MgQmxhbmtTbGF0ZSAuLiBpbml0aWFsaXplIC4uIGVuZFxuXAoJY2xhc3MgJHsxOkJsYW5rU2xhdGV9XG5cCgkJaW5zdGFuY2VfbWV0aG9kcy5lYWNoIHsgfG1ldGh8IHVuZGVmX21ldGhvZChtZXRoKSB1bmxlc3MgbWV0aCA9fiAvXFxBX18vIH1cblwKCWVuZFxuXApzbmlwcGV0IGNsYSBjbGFzcyA8PCBzZWxmIC4uIGVuZFxuXAoJY2xhc3MgPDwgJHsxOnNlbGZ9XG5cCgkJJHsyfVxuXAoJZW5kXG5cCiMgY2xhc3MgLi4gPCBEZWxlZ2F0ZUNsYXNzIC4uIGluaXRpYWxpemUgLi4gZW5kXG5cCnNuaXBwZXQgY2xhLVxuXAoJY2xhc3MgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCksICdcXChfXFx8XlxcKVxcKC5cXCknLCAnXFx1XFwyJywgJ2cnKWB9IDwgRGVsZWdhdGVDbGFzcygkezI6UGFyZW50Q2xhc3N9KVxuXAoJCWRlZiBpbml0aWFsaXplKCR7MzphcmdzfSlcblwKCQkJc3VwZXIoJHs0OmRlbF9vYmp9KVxuXApcblwKCQkJJHs1fVxuXAoJCWVuZFxuXAoJZW5kXG5cCnNuaXBwZXQgbW9kIG1vZHVsZSAuLiBlbmRcblwKCW1vZHVsZSAkezE6YHN1YnN0aXR1dGUoRmlsZW5hbWUoKSwgJ1xcKF9cXHxeXFwpXFwoLlxcKScsICdcXHVcXDInLCAnZycpYH1cblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBtb2QgbW9kdWxlIC4uIG1vZHVsZV9mdW5jdGlvbiAuLiBlbmRcblwKCW1vZHVsZSAkezE6YHN1YnN0aXR1dGUoRmlsZW5hbWUoKSwgJ1xcKF9cXHxeXFwpXFwoLlxcKScsICdcXHVcXDInLCAnZycpYH1cblwKCQltb2R1bGVfZnVuY3Rpb25cblwKXG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgbW9kIG1vZHVsZSAuLiBDbGFzc01ldGhvZHMgLi4gZW5kXG5cCgltb2R1bGUgJHsxOmBzdWJzdGl0dXRlKEZpbGVuYW1lKCksICdcXChfXFx8XlxcKVxcKC5cXCknLCAnXFx1XFwyJywgJ2cnKWB9XG5cCgkJbW9kdWxlIENsYXNzTWV0aG9kc1xuXAoJCQkkezJ9XG5cCgkJZW5kXG5cClxuXAoJCW1vZHVsZSBJbnN0YW5jZU1ldGhvZHNcblwKXG5cCgkJZW5kXG5cClxuXAoJCWRlZiBzZWxmLmluY2x1ZGVkKHJlY2VpdmVyKVxuXAoJCQlyZWNlaXZlci5leHRlbmQgICAgICAgICBDbGFzc01ldGhvZHNcblwKCQkJcmVjZWl2ZXIuc2VuZCA6aW5jbHVkZSwgSW5zdGFuY2VNZXRob2RzXG5cCgkJZW5kXG5cCgllbmRcblwKIyBhdHRyX3JlYWRlclxuXApzbmlwcGV0IHJcblwKCWF0dHJfcmVhZGVyIDokezE6YXR0cl9uYW1lc31cblwKIyBhdHRyX3dyaXRlclxuXApzbmlwcGV0IHdcblwKCWF0dHJfd3JpdGVyIDokezE6YXR0cl9uYW1lc31cblwKIyBhdHRyX2FjY2Vzc29yXG5cCnNuaXBwZXQgcndcblwKCWF0dHJfYWNjZXNzb3IgOiR7MTphdHRyX25hbWVzfVxuXApzbmlwcGV0IGF0cFxuXAoJYXR0cl9wcm90ZWN0ZWQgOiR7MTphdHRyX25hbWVzfVxuXApzbmlwcGV0IGF0YVxuXAoJYXR0cl9hY2Nlc3NpYmxlIDokezE6YXR0cl9uYW1lc31cblwKIyBpbmNsdWRlIEVudW1lcmFibGVcblwKc25pcHBldCBFbnVtXG5cCglpbmNsdWRlIEVudW1lcmFibGVcblwKXG5cCglkZWYgZWFjaCgmYmxvY2spXG5cCgkJJHsxfVxuXAoJZW5kXG5cCiMgaW5jbHVkZSBDb21wYXJhYmxlXG5cCnNuaXBwZXQgQ29tcFxuXAoJaW5jbHVkZSBDb21wYXJhYmxlXG5cClxuXAoJZGVmIDw9PihvdGhlcilcblwKCQkkezF9XG5cCgllbmRcblwKIyBleHRlbmQgRm9yd2FyZGFibGVcblwKc25pcHBldCBGb3J3LVxuXAoJZXh0ZW5kIEZvcndhcmRhYmxlXG5cCiMgZGVmIHNlbGZcblwKc25pcHBldCBkZWZzXG5cCglkZWYgc2VsZi4kezE6Y2xhc3NfbWV0aG9kX25hbWV9XG5cCgkJJHsyfVxuXAoJZW5kXG5cCiMgZGVmIG1ldGhvZF9taXNzaW5nXG5cCnNuaXBwZXQgZGVmbW1cblwKCWRlZiBtZXRob2RfbWlzc2luZyhtZXRoLCAqYXJncywgJmJsaylcblwKCQkkezF9XG5cCgllbmRcblwKc25pcHBldCBkZWZkXG5cCglkZWZfZGVsZWdhdG9yIDokezE6QGRlbF9vYmp9LCA6JHsyOmRlbF9tZXRofSwgOiR7MzpuZXdfbmFtZX1cblwKc25pcHBldCBkZWZkc1xuXAoJZGVmX2RlbGVnYXRvcnMgOiR7MTpAZGVsX29ian0sIDokezI6ZGVsX21ldGhvZHN9XG5cCnNuaXBwZXQgYW1cblwKCWFsaWFzX21ldGhvZCA6JHsxOm5ld19uYW1lfSwgOiR7MjpvbGRfbmFtZX1cblwKc25pcHBldCBhcHBcblwKCWlmIF9fRklMRV9fID09ICRQUk9HUkFNX05BTUVcblwKCQkkezF9XG5cCgllbmRcblwKIyB1c2FnZV9pZigpXG5cCnNuaXBwZXQgdXNhaVxuXAoJaWYgQVJHVi4kezF9XG5cCgkJYWJvcnQgXCJVc2FnZTogI3skUFJPR1JBTV9OQU1FfSAkezI6QVJHU19HT19IRVJFfVwiJHszfVxuXAoJZW5kXG5cCiMgdXNhZ2VfdW5sZXNzKClcblwKc25pcHBldCB1c2F1XG5cCgl1bmxlc3MgQVJHVi4kezF9XG5cCgkJYWJvcnQgXCJVc2FnZTogI3skUFJPR1JBTV9OQU1FfSAkezI6QVJHU19HT19IRVJFfVwiJHszfVxuXAoJZW5kXG5cCnNuaXBwZXQgYXJyYXlcblwKCUFycmF5Lm5ldygkezE6MTB9KSB7IHwkezI6aX18ICR7M30gfVxuXApzbmlwcGV0IGhhc2hcblwKCUhhc2gubmV3IHsgfCR7MTpoYXNofSwgJHsyOmtleX18ICQxWyQyXSA9ICR7M30gfVxuXApzbmlwcGV0IGZpbGUgRmlsZS5mb3JlYWNoKCkgeyB8bGluZXwgLi4gfVxuXAoJRmlsZS5mb3JlYWNoKCR7MTpcInBhdGgvdG8vZmlsZVwifSkgeyB8JHsyOmxpbmV9fCAkezN9IH1cblwKc25pcHBldCBmaWxlIEZpbGUucmVhZCgpXG5cCglGaWxlLnJlYWQoJHsxOlwicGF0aC90by9maWxlXCJ9KSR7Mn1cblwKc25pcHBldCBEaXIgRGlyLmdsb2JhbCgpIHsgfGZpbGV8IC4uIH1cblwKCURpci5nbG9iKCR7MTpcImRpci9nbG9iLypcIn0pIHsgfCR7MjpmaWxlfXwgJHszfSB9XG5cCnNuaXBwZXQgRGlyIERpcltcIi4uXCJdXG5cCglEaXJbJHsxOlwiZ2xvYi8qKi8qLnJiXCJ9XSR7Mn1cblwKc25pcHBldCBkaXJcblwKCUZpbGVuYW1lLmRpcm5hbWUoX19GSUxFX18pXG5cCnNuaXBwZXQgZGVsaVxuXAoJZGVsZXRlX2lmIHsgfCR7MTplfXwgJHsyfSB9XG5cCnNuaXBwZXQgZmlsXG5cCglmaWxsKCR7MTpyYW5nZX0pIHsgfCR7MjppfXwgJHszfSB9XG5cCiMgZmxhdHRlbl9vbmNlKClcblwKc25pcHBldCBmbGFvXG5cCglpbmplY3QoQXJyYXkubmV3KSB7IHwkezE6YXJyfSwgJHsyOmF9fCAkMS5wdXNoKCokMil9JHszfVxuXApzbmlwcGV0IHppcFxuXAoJemlwKCR7MTplbnVtc30pIHsgfCR7Mjpyb3d9fCAkezN9IH1cblwKIyBkb3dudG8oMCkgeyB8bnwgLi4gfVxuXApzbmlwcGV0IGRvd1xuXAoJZG93bnRvKCR7MTowfSkgeyB8JHsyOm59fCAkezN9IH1cblwKc25pcHBldCBzdGVcblwKCXN0ZXAoJHsxOjJ9KSB7IHwkezI6bn18ICR7M30gfVxuXApzbmlwcGV0IHRpbVxuXAoJdGltZXMgeyB8JHsxOm59fCAkezJ9IH1cblwKc25pcHBldCB1cHRcblwKCXVwdG8oJHsxOjEuMC8wLjB9KSB7IHwkezI6bn18ICR7M30gfVxuXApzbmlwcGV0IGxvb1xuXAoJbG9vcCB7ICR7MX0gfVxuXApzbmlwcGV0IGVhXG5cCgllYWNoIHsgfCR7MTplfXwgJHsyfSB9XG5cCnNuaXBwZXQgZWFkXG5cCgllYWNoIGRvIHwkezE6ZX18XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgZWFiXG5cCgllYWNoX2J5dGUgeyB8JHsxOmJ5dGV9fCAkezJ9IH1cblwKc25pcHBldCBlYWMtIGVhY2hfY2hhciB7IHxjaHJ8IC4uIH1cblwKCWVhY2hfY2hhciB7IHwkezE6Y2hyfXwgJHsyfSB9XG5cCnNuaXBwZXQgZWFjLSBlYWNoX2NvbnMoLi4pIHsgfGdyb3VwfCAuLiB9XG5cCgllYWNoX2NvbnMoJHsxOjJ9KSB7IHwkezI6Z3JvdXB9fCAkezN9IH1cblwKc25pcHBldCBlYWlcblwKCWVhY2hfaW5kZXggeyB8JHsxOml9fCAkezJ9IH1cblwKc25pcHBldCBlYWlkXG5cCgllYWNoX2luZGV4IGRvIHwkezE6aX18XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgZWFrXG5cCgllYWNoX2tleSB7IHwkezE6a2V5fXwgJHsyfSB9XG5cCnNuaXBwZXQgZWFrZFxuXAoJZWFjaF9rZXkgZG8gfCR7MTprZXl9fFxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGVhbFxuXAoJZWFjaF9saW5lIHsgfCR7MTpsaW5lfXwgJHsyfSB9XG5cCnNuaXBwZXQgZWFsZFxuXAoJZWFjaF9saW5lIGRvIHwkezE6bGluZX18XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgZWFwXG5cCgllYWNoX3BhaXIgeyB8JHsxOm5hbWV9LCAkezI6dmFsfXwgJHszfSB9XG5cCnNuaXBwZXQgZWFwZFxuXAoJZWFjaF9wYWlyIGRvIHwkezE6bmFtZX0sICR7Mjp2YWx9fFxuXAoJCSR7M31cblwKCWVuZFxuXApzbmlwcGV0IGVhcy1cblwKCWVhY2hfc2xpY2UoJHsxOjJ9KSB7IHwkezI6Z3JvdXB9fCAkezN9IH1cblwKc25pcHBldCBlYXNkLVxuXAoJZWFjaF9zbGljZSgkezE6Mn0pIGRvIHwkezI6Z3JvdXB9fFxuXAoJCSR7M31cblwKCWVuZFxuXApzbmlwcGV0IGVhdlxuXAoJZWFjaF92YWx1ZSB7IHwkezE6dmFsfXwgJHsyfSB9XG5cCnNuaXBwZXQgZWF2ZFxuXAoJZWFjaF92YWx1ZSBkbyB8JHsxOnZhbH18XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgZWF3aVxuXAoJZWFjaF93aXRoX2luZGV4IHsgfCR7MTplfSwgJHsyOml9fCAkezN9IH1cblwKc25pcHBldCBlYXdpZFxuXAoJZWFjaF93aXRoX2luZGV4IGRvIHwkezE6ZX0sJHsyOml9fFxuXAoJCSR7M31cblwKCWVuZFxuXApzbmlwcGV0IHJldmVcblwKCXJldmVyc2VfZWFjaCB7IHwkezE6ZX18ICR7Mn0gfVxuXApzbmlwcGV0IHJldmVkXG5cCglyZXZlcnNlX2VhY2ggZG8gfCR7MTplfXxcblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBpbmpcblwKCWluamVjdCgkezE6aW5pdH0pIHsgfCR7MjptZW19LCAkezM6dmFyfXwgJHs0fSB9XG5cCnNuaXBwZXQgaW5qZFxuXAoJaW5qZWN0KCR7MTppbml0fSkgZG8gfCR7MjptZW19LCAkezM6dmFyfXxcblwKCQkkezR9XG5cCgllbmRcblwKc25pcHBldCBtYXBcblwKCW1hcCB7IHwkezE6ZX18ICR7Mn0gfVxuXApzbmlwcGV0IG1hcGRcblwKCW1hcCBkbyB8JHsxOmV9fFxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IG1hcHdpLVxuXAoJZW51bV93aXRoX2luZGV4Lm1hcCB7IHwkezE6ZX0sICR7MjppfXwgJHszfSB9XG5cCnNuaXBwZXQgc29yXG5cCglzb3J0IHsgfGEsIGJ8ICR7MX0gfVxuXApzbmlwcGV0IHNvcmJcblwKCXNvcnRfYnkgeyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCByYW5cblwKCXNvcnRfYnkgeyByYW5kIH1cblwKc25pcHBldCBhbGxcblwKCWFsbD8geyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCBhbnlcblwKCWFueT8geyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCBjbFxuXAoJY2xhc3NpZnkgeyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCBjb2xcblwKCWNvbGxlY3QgeyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCBjb2xkXG5cCgljb2xsZWN0IGRvIHwkezE6ZX18XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgZGV0XG5cCglkZXRlY3QgeyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCBkZXRkXG5cCglkZXRlY3QgZG8gfCR7MTplfXxcblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBmZXRcblwKCWZldGNoKCR7MTpuYW1lfSkgeyB8JHsyOmtleX18ICR7M30gfVxuXApzbmlwcGV0IGZpblxuXAoJZmluZCB7IHwkezE6ZX18ICR7Mn0gfVxuXApzbmlwcGV0IGZpbmRcblwKCWZpbmQgZG8gfCR7MTplfXxcblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBmaW5hXG5cCglmaW5kX2FsbCB7IHwkezE6ZX18ICR7Mn0gfVxuXApzbmlwcGV0IGZpbmFkXG5cCglmaW5kX2FsbCBkbyB8JHsxOmV9fFxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGdyZVxuXAoJZ3JlcCgkezE6L3BhdHRlcm4vfSkgeyB8JHsyOm1hdGNofXwgJHszfSB9XG5cCnNuaXBwZXQgc3ViXG5cCgkkezE6Z31zdWIoJHsyOi9wYXR0ZXJuL30pIHsgfCR7MzptYXRjaH18ICR7NH0gfVxuXApzbmlwcGV0IHNjYVxuXAoJc2NhbigkezE6L3BhdHRlcm4vfSkgeyB8JHsyOm1hdGNofXwgJHszfSB9XG5cCnNuaXBwZXQgc2NhZFxuXAoJc2NhbigkezE6L3BhdHRlcm4vfSkgZG8gfCR7MjptYXRjaH18XG5cCgkJJHszfVxuXAoJZW5kXG5cCnNuaXBwZXQgbWF4XG5cCgltYXggeyB8YSwgYnwgJHsxfSB9XG5cCnNuaXBwZXQgbWluXG5cCgltaW4geyB8YSwgYnwgJHsxfSB9XG5cCnNuaXBwZXQgcGFyXG5cCglwYXJ0aXRpb24geyB8JHsxOmV9fCAkezJ9IH1cblwKc25pcHBldCBwYXJkXG5cCglwYXJ0aXRpb24gZG8gfCR7MTplfXxcblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCByZWpcblwKCXJlamVjdCB7IHwkezE6ZX18ICR7Mn0gfVxuXApzbmlwcGV0IHJlamRcblwKCXJlamVjdCBkbyB8JHsxOmV9fFxuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IHNlbFxuXAoJc2VsZWN0IHsgfCR7MTplfXwgJHsyfSB9XG5cCnNuaXBwZXQgc2VsZFxuXAoJc2VsZWN0IGRvIHwkezE6ZX18XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgbGFtXG5cCglsYW1iZGEgeyB8JHsxOmFyZ3N9fCAkezJ9IH1cblwKc25pcHBldCBkb29cblwKCWRvXG5cCgkJJHsxfVxuXAoJZW5kXG5cCnNuaXBwZXQgZG92XG5cCglkbyB8JHsxOnZhcmlhYmxlfXxcblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCA6XG5cCgk6JHsxOmtleX0gPT4gJHsyOlwidmFsdWVcIn0kezN9XG5cCnNuaXBwZXQgb3BlXG5cCglvcGVuKCR7MTpcInBhdGgvb3IvdXJsL29yL3BpcGVcIn0sIFwiJHsyOnd9XCIpIHsgfCR7Mzppb318ICR7NH0gfVxuXAojIHBhdGhfZnJvbV9oZXJlKClcblwKc25pcHBldCBmcGF0aFxuXAoJRmlsZS5qb2luKEZpbGUuZGlybmFtZShfX0ZJTEVfXyksIColMlskezE6cmVsIHBhdGggaGVyZX1dKSR7Mn1cblwKIyB1bml4X2ZpbHRlciB7fVxuXApzbmlwcGV0IHVuaWZcblwKCUFSR0YuZWFjaF9saW5lJHsxfSBkbyB8JHsyOmxpbmV9fFxuXAoJCSR7M31cblwKCWVuZFxuXAojIG9wdGlvbl9wYXJzZSB7fVxuXApzbmlwcGV0IG9wdHBcblwKCXJlcXVpcmUgXCJvcHRwYXJzZVwiXG5cClxuXAoJb3B0aW9ucyA9IHskezE6ZGVmYXVsdCA9PiBcImFyZ3NcIn19XG5cClxuXAoJQVJHVi5vcHRpb25zIGRvIHxvcHRzfFxuXAoJCW9wdHMuYmFubmVyID0gXCJVc2FnZTogI3tGaWxlLmJhc2VuYW1lKCRQUk9HUkFNX05BTUUpfVxuXApzbmlwcGV0IG9wdFxuXAoJb3B0cy5vbiggXCItJHsxOm99XCIsIFwiLS0kezI6bG9uZy1vcHRpb24tbmFtZX1cIiwgJHszOlN0cmluZ30sXG5cCgkgICAgICAgICBcIiR7NDpPcHRpb24gZGVzY3JpcHRpb24ufVwiKSBkbyB8JHs1Om9wdH18XG5cCgkJJHs2fVxuXAoJZW5kXG5cCnNuaXBwZXQgdGNcblwKCXJlcXVpcmUgXCJ0ZXN0L3VuaXRcIlxuXApcblwKCXJlcXVpcmUgXCIkezE6bGlicmFyeV9maWxlX25hbWV9XCJcblwKXG5cCgljbGFzcyBUZXN0JHsyOiQxfSA8IFRlc3Q6OlVuaXQ6OlRlc3RDYXNlXG5cCgkJZGVmIHRlc3RfJHszOmNhc2VfbmFtZX1cblwKCQkJJHs0fVxuXAoJCWVuZFxuXAoJZW5kXG5cCnNuaXBwZXQgdHNcblwKCXJlcXVpcmUgXCJ0ZXN0L3VuaXRcIlxuXApcblwKCXJlcXVpcmUgXCJ0Y18kezE6dGVzdF9jYXNlX2ZpbGV9XCJcblwKCXJlcXVpcmUgXCJ0Y18kezI6dGVzdF9jYXNlX2ZpbGV9XCIkezN9XG5cCnNuaXBwZXQgYXNcblwKCWFzc2VydCAkezE6dGVzdH0sIFwiJHsyOkZhaWx1cmUgbWVzc2FnZS59XCIkezN9XG5cCnNuaXBwZXQgYXNlXG5cCglhc3NlcnRfZXF1YWwgJHsxOmV4cGVjdGVkfSwgJHsyOmFjdHVhbH0kezN9XG5cCnNuaXBwZXQgYXNuZVxuXAoJYXNzZXJ0X25vdF9lcXVhbCAkezE6dW5leHBlY3RlZH0sICR7MjphY3R1YWx9JHszfVxuXApzbmlwcGV0IGFzaWRcblwKCWFzc2VydF9pbl9kZWx0YSAkezE6ZXhwZWN0ZWRfZmxvYXR9LCAkezI6YWN0dWFsX2Zsb2F0fSwgJHszOjIgKiogLTIwfSR7NH1cblwKc25pcHBldCBhc2lvXG5cCglhc3NlcnRfaW5zdGFuY2Vfb2YgJHsxOkV4cGVjdGVkQ2xhc3N9LCAkezI6YWN0dWFsX2luc3RhbmNlfSR7M31cblwKc25pcHBldCBhc2tvXG5cCglhc3NlcnRfa2luZF9vZiAkezE6RXhwZWN0ZWRLaW5kfSwgJHsyOmFjdHVhbF9pbnN0YW5jZX0kezN9XG5cCnNuaXBwZXQgYXNuXG5cCglhc3NlcnRfbmlsICR7MTppbnN0YW5jZX0kezJ9XG5cCnNuaXBwZXQgYXNublxuXAoJYXNzZXJ0X25vdF9uaWwgJHsxOmluc3RhbmNlfSR7Mn1cblwKc25pcHBldCBhc21cblwKCWFzc2VydF9tYXRjaCAvJHsxOmV4cGVjdGVkX3BhdHRlcm59LywgJHsyOmFjdHVhbF9zdHJpbmd9JHszfVxuXApzbmlwcGV0IGFzbm1cblwKCWFzc2VydF9ub19tYXRjaCAvJHsxOnVuZXhwZWN0ZWRfcGF0dGVybn0vLCAkezI6YWN0dWFsX3N0cmluZ30kezN9XG5cCnNuaXBwZXQgYXNvXG5cCglhc3NlcnRfb3BlcmF0b3IgJHsxOmxlZnR9LCA6JHsyOm9wZXJhdG9yfSwgJHszOnJpZ2h0fSR7NH1cblwKc25pcHBldCBhc3JcblwKCWFzc2VydF9yYWlzZSAkezE6RXhjZXB0aW9ufSB7ICR7Mn0gfVxuXApzbmlwcGV0IGFzcmRcblwKCWFzc2VydF9yYWlzZSAkezE6RXhjZXB0aW9ufSBkb1xuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGFzbnJcblwKCWFzc2VydF9ub3RoaW5nX3JhaXNlZCAkezE6RXhjZXB0aW9ufSB7ICR7Mn0gfVxuXApzbmlwcGV0IGFzbnJkXG5cCglhc3NlcnRfbm90aGluZ19yYWlzZWQgJHsxOkV4Y2VwdGlvbn0gZG9cblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBhc3J0XG5cCglhc3NlcnRfcmVzcG9uZF90byAkezE6b2JqZWN0fSwgOiR7MjptZXRob2R9JHszfVxuXApzbmlwcGV0IGFzcyBhc3NlcnRfc2FtZSguLilcblwKCWFzc2VydF9zYW1lICR7MTpleHBlY3RlZH0sICR7MjphY3R1YWx9JHszfVxuXApzbmlwcGV0IGFzcyBhc3NlcnRfc2VuZCguLilcblwKCWFzc2VydF9zZW5kIFskezE6b2JqZWN0fSwgOiR7MjptZXNzYWdlfSwgJHszOmFyZ3N9XSR7NH1cblwKc25pcHBldCBhc25zXG5cCglhc3NlcnRfbm90X3NhbWUgJHsxOnVuZXhwZWN0ZWR9LCAkezI6YWN0dWFsfSR7M31cblwKc25pcHBldCBhc3RcblwKCWFzc2VydF90aHJvd3MgOiR7MTpleHBlY3RlZH0geyAkezJ9IH1cblwKc25pcHBldCBhc3RkXG5cCglhc3NlcnRfdGhyb3dzIDokezE6ZXhwZWN0ZWR9IGRvXG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgYXNudFxuXAoJYXNzZXJ0X25vdGhpbmdfdGhyb3duIHsgJHsxfSB9XG5cCnNuaXBwZXQgYXNudGRcblwKCWFzc2VydF9ub3RoaW5nX3Rocm93biBkb1xuXAoJCSR7MX1cblwKCWVuZFxuXApzbmlwcGV0IGZsXG5cCglmbHVuayBcIiR7MTpGYWlsdXJlIG1lc3NhZ2UufVwiJHsyfVxuXAojIEJlbmNobWFyay5ibWJtIGRvIC4uIGVuZFxuXApzbmlwcGV0IGJtLVxuXAoJVEVTVFMgPSAkezE6MTBfMDAwfVxuXAoJQmVuY2htYXJrLmJtYm0gZG8gfHJlc3VsdHN8XG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgcmVwXG5cCglyZXN1bHRzLnJlcG9ydChcIiR7MTpuYW1lfTpcIikgeyBURVNUUy50aW1lcyB7ICR7Mn0gfX1cblwKIyBNYXJzaGFsLmR1bXAoLi4sIGZpbGUpXG5cCnNuaXBwZXQgTWRcblwKCUZpbGUub3BlbigkezE6XCJwYXRoL3RvL2ZpbGUuZHVtcFwifSwgXCJ3YlwiKSB7IHwkezI6ZmlsZX18IE1hcnNoYWwuZHVtcCgkezM6b2JqfSwgJDIpIH0kezR9XG5cCiMgTWFzaGFsLmxvYWQob2JqKVxuXApzbmlwcGV0IE1sXG5cCglGaWxlLm9wZW4oJHsxOlwicGF0aC90by9maWxlLmR1bXBcIn0sIFwicmJcIikgeyB8JHsyOmZpbGV9fCBNYXJzaGFsLmxvYWQoJDIpIH0kezN9XG5cCiMgZGVlcF9jb3B5KC4uKVxuXApzbmlwcGV0IGRlZWNcblwKCU1hcnNoYWwubG9hZChNYXJzaGFsLmR1bXAoJHsxOm9ial90b19jb3B5fSkpJHsyfVxuXApzbmlwcGV0IFBuLVxuXAoJUFN0b3JlLm5ldygkezE6XCJmaWxlX25hbWUucHN0b3JlXCJ9KSR7Mn1cblwKc25pcHBldCB0cmFcblwKCXRyYW5zYWN0aW9uKCR7MTp0cnVlfSkgeyAkezJ9IH1cblwKIyB4bWxyZWFkKC4uKVxuXApzbmlwcGV0IHhtbC1cblwKCVJFWE1MOjpEb2N1bWVudC5uZXcoRmlsZS5yZWFkKCR7MTpcInBhdGgvdG8vZmlsZVwifSkpJHsyfVxuXAojIHhwYXRoKC4uKSB7IC4uIH1cblwKc25pcHBldCB4cGFcblwKCWVsZW1lbnRzLmVhY2goJHsxOlwiLy9YcGF0aFwifSkgZG8gfCR7Mjpub2RlfXxcblwKCQkkezN9XG5cCgllbmRcblwKIyBjbGFzc19mcm9tX25hbWUoKVxuXApzbmlwcGV0IGNsYWZuXG5cCglzcGxpdChcIjo6XCIpLmluamVjdChPYmplY3QpIHsgfHBhciwgY29uc3R8IHBhci5jb25zdF9nZXQoY29uc3QpIH1cblwKIyBzaW5nbGV0b25fY2xhc3MoKVxuXApzbmlwcGV0IHNpbmNcblwKCWNsYXNzIDw8IHNlbGY7IHNlbGYgZW5kXG5cCnNuaXBwZXQgbmFtXG5cCgluYW1lc3BhY2UgOiR7MTpgRmlsZW5hbWUoKWB9IGRvXG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgdGFzXG5cCglkZXNjIFwiJHsxOlRhc2sgZGVzY3JpcHRpb259XCJcblwKCXRhc2sgOiR7Mjp0YXNrX25hbWUgPT4gWzpkZXBlbmRlbnQsIDp0YXNrc119IGRvXG5cCgkJJHszfVxuXAoJZW5kXG5cCiMgYmxvY2tcblwKc25pcHBldCBiXG5cCgl7IHwkezE6dmFyfXwgJHsyfSB9XG5cCnNuaXBwZXQgYmVnaW5cblwKCWJlZ2luXG5cCgkJcmFpc2UgJ0EgdGVzdCBleGNlcHRpb24uJ1xuXAoJcmVzY3VlIEV4Y2VwdGlvbiA9PiBlXG5cCgkJcHV0cyBlLm1lc3NhZ2VcblwKCQlwdXRzIGUuYmFja3RyYWNlLmluc3BlY3RcblwKCWVsc2VcblwKCQkjIG90aGVyIGV4Y2VwdGlvblxuXAoJZW5zdXJlXG5cCgkJIyBhbHdheXMgZXhlY3V0ZWRcblwKCWVuZFxuXApcblwKI2RlYnVnZ2luZ1xuXApzbmlwcGV0IGRlYnVnXG5cCglyZXF1aXJlICdydWJ5LWRlYnVnJzsgZGVidWdnZXI7IHRydWU7XG5cCnNuaXBwZXQgcHJ5XG5cCglyZXF1aXJlICdwcnknOyBiaW5kaW5nLnByeVxuXApcblwKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cCiMgUmFpbHMgc25pcHBldHMgLSBmb3IgcHVyZSBSdWJ5LCBzZWUgYWJvdmUgI1xuXAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcblwKc25pcHBldCBhcnRcblwKCWFzc2VydF9yZWRpcmVjdGVkX3RvICR7MTo6YWN0aW9uID0+IFwiJHsyOmluZGV4fVwifVxuXApzbmlwcGV0IGFydG5wXG5cCglhc3NlcnRfcmVkaXJlY3RlZF90byAkezE6cGFyZW50fV8kezI6Y2hpbGR9X3BhdGgoJHszOkAkMX0sICR7NDpAJDJ9KVxuXApzbmlwcGV0IGFydG5wcFxuXAoJYXNzZXJ0X3JlZGlyZWN0ZWRfdG8gJHsxOnBhcmVudH1fJHsyOmNoaWxkfV9wYXRoKCR7MzpAJDF9KVxuXApzbmlwcGV0IGFydHBcblwKCWFzc2VydF9yZWRpcmVjdGVkX3RvICR7MTptb2RlbH1fcGF0aCgkezI6QCQxfSlcblwKc25pcHBldCBhcnRwcFxuXAoJYXNzZXJ0X3JlZGlyZWN0ZWRfdG8gJHsxOm1vZGVsfXNfcGF0aFxuXApzbmlwcGV0IGFzZFxuXAoJYXNzZXJ0X2RpZmZlcmVuY2UgXCIkezE6TW9kZWx9LiR7Mjpjb3VudH1cIiwgJDEgZG9cblwKCQkkezN9XG5cCgllbmRcblwKc25pcHBldCBhc25kXG5cCglhc3NlcnRfbm9fZGlmZmVyZW5jZSBcIiR7MTpNb2RlbH0uJHsyOmNvdW50fVwiIGRvXG5cCgkJJHszfVxuXAoJZW5kXG5cCnNuaXBwZXQgYXNyZVxuXAoJYXNzZXJ0X3Jlc3BvbnNlIDokezE6c3VjY2Vzc30sIEByZXNwb25zZS5ib2R5JHsyfVxuXApzbmlwcGV0IGFzcmpcblwKCWFzc2VydF9yanMgOiR7MTpyZXBsYWNlfSwgXCIkezI6ZG9tIGlkfVwiXG5cCnNuaXBwZXQgYXNzIGFzc2VydF9zZWxlY3QoLi4pXG5cCglhc3NlcnRfc2VsZWN0ICckezE6cGF0aH0nLCA6JHsyOnRleHR9ID0+ICckezM6aW5uZXJfaHRtbCcgJHs0OmRvfVxuXApzbmlwcGV0IGJmXG5cCgliZWZvcmVfZmlsdGVyIDokezE6bWV0aG9kfVxuXApzbmlwcGV0IGJ0XG5cCgliZWxvbmdzX3RvIDokezE6YXNzb2NpYXRpb259XG5cCnNuaXBwZXQgY3J3XG5cCgljYXR0cl9hY2Nlc3NvciA6JHsxOmF0dHJfbmFtZXN9XG5cCnNuaXBwZXQgZGVmY3JlYXRlXG5cCglkZWYgY3JlYXRlXG5cCgkJQCR7MTptb2RlbF9jbGFzc19uYW1lfSA9ICR7MjpNb2RlbENsYXNzTmFtZX0ubmV3KHBhcmFtc1s6JDFdKVxuXApcblwKCQlyZXNwb25kX3RvIGRvIHx3YW50c3xcblwKCQkJaWYgQCQxLnNhdmVcblwKCQkJCWZsYXNoWzpub3RpY2VdID0gJyQyIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC4nXG5cCgkJCQl3YW50cy5odG1sIHsgcmVkaXJlY3RfdG8oQCQxKSB9XG5cCgkJCQl3YW50cy54bWwgIHsgcmVuZGVyIDp4bWwgPT4gQCQxLCA6c3RhdHVzID0+IDpjcmVhdGVkLCA6bG9jYXRpb24gPT4gQCQxIH1cblwKCQkJZWxzZVxuXAoJCQkJd2FudHMuaHRtbCB7IHJlbmRlciA6YWN0aW9uID0+IFwibmV3XCIgfVxuXAoJCQkJd2FudHMueG1sICB7IHJlbmRlciA6eG1sID0+IEAkMS5lcnJvcnMsIDpzdGF0dXMgPT4gOnVucHJvY2Vzc2FibGVfZW50aXR5IH1cblwKCQkJZW5kXG5cCgkJZW5kXG5cCgllbmQkezN9XG5cCnNuaXBwZXQgZGVmZGVzdHJveVxuXAoJZGVmIGRlc3Ryb3lcblwKCQlAJHsxOm1vZGVsX2NsYXNzX25hbWV9ID0gJHsyOk1vZGVsQ2xhc3NOYW1lfS5maW5kKHBhcmFtc1s6aWRdKVxuXAoJCUAkMS5kZXN0cm95XG5cClxuXAoJCXJlc3BvbmRfdG8gZG8gfHdhbnRzfFxuXAoJCQl3YW50cy5odG1sIHsgcmVkaXJlY3RfdG8oJDFzX3VybCkgfVxuXAoJCQl3YW50cy54bWwgIHsgaGVhZCA6b2sgfVxuXAoJCWVuZFxuXAoJZW5kJHszfVxuXApzbmlwcGV0IGRlZmVkaXRcblwKCWRlZiBlZGl0XG5cCgkJQCR7MTptb2RlbF9jbGFzc19uYW1lfSA9ICR7MjpNb2RlbENsYXNzTmFtZX0uZmluZChwYXJhbXNbOmlkXSlcblwKCWVuZFxuXApzbmlwcGV0IGRlZmluZGV4XG5cCglkZWYgaW5kZXhcblwKCQlAJHsxOm1vZGVsX2NsYXNzX25hbWV9ID0gJHsyOk1vZGVsQ2xhc3NOYW1lfS5hbGxcblwKXG5cCgkJcmVzcG9uZF90byBkbyB8d2FudHN8XG5cCgkJCXdhbnRzLmh0bWwgIyBpbmRleC5odG1sLmVyYlxuXAoJCQl3YW50cy54bWwgIHsgcmVuZGVyIDp4bWwgPT4gQCQxcyB9XG5cCgkJZW5kXG5cCgllbmQkezN9XG5cCnNuaXBwZXQgZGVmbmV3XG5cCglkZWYgbmV3XG5cCgkJQCR7MTptb2RlbF9jbGFzc19uYW1lfSA9ICR7MjpNb2RlbENsYXNzTmFtZX0ubmV3XG5cClxuXAoJCXJlc3BvbmRfdG8gZG8gfHdhbnRzfFxuXAoJCQl3YW50cy5odG1sICMgbmV3Lmh0bWwuZXJiXG5cCgkJCXdhbnRzLnhtbCAgeyByZW5kZXIgOnhtbCA9PiBAJDEgfVxuXAoJCWVuZFxuXAoJZW5kJHszfVxuXApzbmlwcGV0IGRlZnNob3dcblwKCWRlZiBzaG93XG5cCgkJQCR7MTptb2RlbF9jbGFzc19uYW1lfSA9ICR7MjpNb2RlbENsYXNzTmFtZX0uZmluZChwYXJhbXNbOmlkXSlcblwKXG5cCgkJcmVzcG9uZF90byBkbyB8d2FudHN8XG5cCgkJCXdhbnRzLmh0bWwgIyBzaG93Lmh0bWwuZXJiXG5cCgkJCXdhbnRzLnhtbCAgeyByZW5kZXIgOnhtbCA9PiBAJDEgfVxuXAoJCWVuZFxuXAoJZW5kJHszfVxuXApzbmlwcGV0IGRlZnVwZGF0ZVxuXAoJZGVmIHVwZGF0ZVxuXAoJCUAkezE6bW9kZWxfY2xhc3NfbmFtZX0gPSAkezI6TW9kZWxDbGFzc05hbWV9LmZpbmQocGFyYW1zWzppZF0pXG5cClxuXAoJCXJlc3BvbmRfdG8gZG8gfHdhbnRzfFxuXAoJCQlpZiBAJDEudXBkYXRlX2F0dHJpYnV0ZXMocGFyYW1zWzokMV0pXG5cCgkJCQlmbGFzaFs6bm90aWNlXSA9ICckMiB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuJ1xuXAoJCQkJd2FudHMuaHRtbCB7IHJlZGlyZWN0X3RvKEAkMSkgfVxuXAoJCQkJd2FudHMueG1sICB7IGhlYWQgOm9rIH1cblwKCQkJZWxzZVxuXAoJCQkJd2FudHMuaHRtbCB7IHJlbmRlciA6YWN0aW9uID0+IFwiZWRpdFwiIH1cblwKCQkJCXdhbnRzLnhtbCAgeyByZW5kZXIgOnhtbCA9PiBAJDEuZXJyb3JzLCA6c3RhdHVzID0+IDp1bnByb2Nlc3NhYmxlX2VudGl0eSB9XG5cCgkJCWVuZFxuXAoJCWVuZFxuXAoJZW5kJHszfVxuXApzbmlwcGV0IGZsYXNoXG5cCglmbGFzaFs6JHsxOm5vdGljZX1dID0gXCIkezJ9XCJcblwKc25pcHBldCBoYWJ0bVxuXAoJaGFzX2FuZF9iZWxvbmdzX3RvX21hbnkgOiR7MTpvYmplY3R9LCA6am9pbl90YWJsZSA9PiBcIiR7Mjp0YWJsZV9uYW1lfVwiLCA6Zm9yZWlnbl9rZXkgPT4gXCIkezN9X2lkXCIkezR9XG5cCnNuaXBwZXQgaG1cblwKCWhhc19tYW55IDokezE6b2JqZWN0fVxuXApzbmlwcGV0IGhtZFxuXAoJaGFzX21hbnkgOiR7MTpvdGhlcn1zLCA6Y2xhc3NfbmFtZSA9PiBcIiR7MjokMX1cIiwgOmZvcmVpZ25fa2V5ID0+IFwiJHszOiQxfV9pZFwiLCA6ZGVwZW5kZW50ID0+IDpkZXN0cm95JHs0fVxuXApzbmlwcGV0IGhtdFxuXAoJaGFzX21hbnkgOiR7MTpvYmplY3R9LCA6dGhyb3VnaCA9PiA6JHsyOm9iamVjdH1cblwKc25pcHBldCBob1xuXAoJaGFzX29uZSA6JHsxOm9iamVjdH1cblwKc25pcHBldCBpMThcblwKCUkxOG4udCgnJHsxOnR5cGUua2V5fScpJHsyfVxuXApzbmlwcGV0IGlzdFxuXAoJPCU9IGltYWdlX3N1Ym1pdF90YWcoXCIkezE6YWdyZWUucG5nfVwiLCA6aWQgPT4gXCIkezI6aWR9XCIkezN9ICU+XG5cCnNuaXBwZXQgbG9nXG5cCglSYWlscy5sb2dnZXIuJHsxOmRlYnVnfSAkezJ9XG5cCnNuaXBwZXQgbG9nMlxuXAoJUkFJTFNfREVGQVVMVF9MT0dHRVIuJHsxOmRlYnVnfSAkezJ9XG5cCnNuaXBwZXQgbG9nZFxuXAoJbG9nZ2VyLmRlYnVnIHsgXCIkezE6bWVzc2FnZX1cIiB9JHsyfVxuXApzbmlwcGV0IGxvZ2VcblwKCWxvZ2dlci5lcnJvciB7IFwiJHsxOm1lc3NhZ2V9XCIgfSR7Mn1cblwKc25pcHBldCBsb2dmXG5cCglsb2dnZXIuZmF0YWwgeyBcIiR7MTptZXNzYWdlfVwiIH0kezJ9XG5cCnNuaXBwZXQgbG9naVxuXAoJbG9nZ2VyLmluZm8geyBcIiR7MTptZXNzYWdlfVwiIH0kezJ9XG5cCnNuaXBwZXQgbG9nd1xuXAoJbG9nZ2VyLndhcm4geyBcIiR7MTptZXNzYWdlfVwiIH0kezJ9XG5cCnNuaXBwZXQgbWFwY1xuXAoJJHsxOm1hcH0uJHsyOmNvbm5lY3R9ICckezM6Y29udHJvbGxlci86YWN0aW9uLzppZH0nXG5cCnNuaXBwZXQgbWFwY2FcblwKCSR7MTptYXB9LmNhdGNoX2FsbCBcIiokezI6YW55dGhpbmd9XCIsIDpjb250cm9sbGVyID0+IFwiJHszOmRlZmF1bHR9XCIsIDphY3Rpb24gPT4gXCIkezQ6ZXJyb3J9XCIkezV9XG5cCnNuaXBwZXQgbWFwclxuXAoJJHsxOm1hcH0ucmVzb3VyY2UgOiR7MjpyZXNvdXJjZX1cblwKc25pcHBldCBtYXByc1xuXAoJJHsxOm1hcH0ucmVzb3VyY2VzIDokezI6cmVzb3VyY2V9XG5cCnNuaXBwZXQgbWFwd29cblwKCSR7MTptYXB9LndpdGhfb3B0aW9ucyA6JHsyOmNvbnRyb2xsZXJ9ID0+ICckezM6dGhpbmd9JyBkbyB8JDN8XG5cCgkJJHs0fVxuXAoJZW5kXG5cCnNuaXBwZXQgbWJzXG5cCgliZWZvcmVfc2F2ZSA6JHsxOm1ldGhvZH1cblwKc25pcHBldCBtY2h0XG5cCgljaGFuZ2VfdGFibGUgOiR7MTp0YWJsZV9uYW1lfSBkbyB8dHxcblwKCQkkezJ9XG5cCgllbmRcblwKc25pcHBldCBtcFxuXAoJbWFwKCY6JHsxOmlkfSlcblwKc25pcHBldCBtcndcblwKCW1hdHRyX2FjY2Vzc29yIDokezE6YXR0cl9uYW1lc31cblwKc25pcHBldCBvYVxuXAoJb3JkZXIoXCIkezE6ZmllbGR9XCIpXG5cCnNuaXBwZXQgb2RcblwKCW9yZGVyKFwiJHsxOmZpZWxkfSBERVNDXCIpXG5cCnNuaXBwZXQgcGFcblwKCXBhcmFtc1s6JHsxOmlkfV0kezJ9XG5cCnNuaXBwZXQgcmFcblwKCXJlbmRlciA6YWN0aW9uID0+IFwiJHsxOmFjdGlvbn1cIlxuXApzbmlwcGV0IHJhbFxuXAoJcmVuZGVyIDphY3Rpb24gPT4gXCIkezE6YWN0aW9ufVwiLCA6bGF5b3V0ID0+IFwiJHsyOmxheW91dG5hbWV9XCJcblwKc25pcHBldCByZXN0XG5cCglyZXNwb25kX3RvIGRvIHx3YW50c3xcblwKCQl3YW50cy4kezE6aHRtbH0geyAkezJ9IH1cblwKCWVuZFxuXApzbmlwcGV0IHJmXG5cCglyZW5kZXIgOmZpbGUgPT4gXCIkezE6ZmlsZXBhdGh9XCJcblwKc25pcHBldCByZnVcblwKCXJlbmRlciA6ZmlsZSA9PiBcIiR7MTpmaWxlcGF0aH1cIiwgOnVzZV9mdWxsX3BhdGggPT4gJHsyOmZhbHNlfVxuXApzbmlwcGV0IHJpXG5cCglyZW5kZXIgOmlubGluZSA9PiBcIiR7MTo8JT0gJ2hlbGxvJyAlPn1cIlxuXApzbmlwcGV0IHJpbFxuXAoJcmVuZGVyIDppbmxpbmUgPT4gXCIkezE6PCU9ICdoZWxsbycgJT59XCIsIDpsb2NhbHMgPT4geyAkezI6Om5hbWV9ID0+IFwiJHszOnZhbHVlfVwiJHs0fSB9XG5cCnNuaXBwZXQgcml0XG5cCglyZW5kZXIgOmlubGluZSA9PiBcIiR7MTo8JT0gJ2hlbGxvJyAlPn1cIiwgOnR5cGUgPT4gJHsyOjpyeG1sfVxuXApzbmlwcGV0IHJqc29uXG5cCglyZW5kZXIgOmpzb24gPT4gJHsxOnRleHQgdG8gcmVuZGVyfVxuXApzbmlwcGV0IHJsXG5cCglyZW5kZXIgOmxheW91dCA9PiBcIiR7MTpsYXlvdXRuYW1lfVwiXG5cCnNuaXBwZXQgcm5cblwKCXJlbmRlciA6bm90aGluZyA9PiAkezE6dHJ1ZX1cblwKc25pcHBldCBybnNcblwKCXJlbmRlciA6bm90aGluZyA9PiAkezE6dHJ1ZX0sIDpzdGF0dXMgPT4gJHsyOjQwMX1cblwKc25pcHBldCBycFxuXAoJcmVuZGVyIDpwYXJ0aWFsID0+IFwiJHsxOml0ZW19XCJcblwKc25pcHBldCBycGNcblwKCXJlbmRlciA6cGFydGlhbCA9PiBcIiR7MTppdGVtfVwiLCA6Y29sbGVjdGlvbiA9PiAkezI6QCQxc31cblwKc25pcHBldCBycGxcblwKCXJlbmRlciA6cGFydGlhbCA9PiBcIiR7MTppdGVtfVwiLCA6bG9jYWxzID0+IHsgOiR7MjokMX0gPT4gJHszOkAkMX1cblwKc25pcHBldCBycG9cblwKCXJlbmRlciA6cGFydGlhbCA9PiBcIiR7MTppdGVtfVwiLCA6b2JqZWN0ID0+ICR7MjpAJDF9XG5cCnNuaXBwZXQgcnBzXG5cCglyZW5kZXIgOnBhcnRpYWwgPT4gXCIkezE6aXRlbX1cIiwgOnN0YXR1cyA9PiAkezI6NTAwfVxuXApzbmlwcGV0IHJ0XG5cCglyZW5kZXIgOnRleHQgPT4gXCIkezE6dGV4dCB0byByZW5kZXJ9XCJcblwKc25pcHBldCBydGxcblwKCXJlbmRlciA6dGV4dCA9PiBcIiR7MTp0ZXh0IHRvIHJlbmRlcn1cIiwgOmxheW91dCA9PiBcIiR7MjpsYXlvdXRuYW1lfVwiXG5cCnNuaXBwZXQgcnRsdFxuXAoJcmVuZGVyIDp0ZXh0ID0+IFwiJHsxOnRleHQgdG8gcmVuZGVyfVwiLCA6bGF5b3V0ID0+ICR7Mjp0cnVlfVxuXApzbmlwcGV0IHJ0c1xuXAoJcmVuZGVyIDp0ZXh0ID0+IFwiJHsxOnRleHQgdG8gcmVuZGVyfVwiLCA6c3RhdHVzID0+ICR7Mjo0MDF9XG5cCnNuaXBwZXQgcnVcblwKCXJlbmRlciA6dXBkYXRlIGRvIHwkezE6cGFnZX18XG5cCgkJJDEuJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgcnhtbFxuXAoJcmVuZGVyIDp4bWwgPT4gJHsxOnRleHQgdG8gcmVuZGVyfVxuXApzbmlwcGV0IHNjXG5cCglzY29wZSA6JHsxOm5hbWV9LCA6d2hlcmUoOkAkezI6ZmllbGR9ID0+ICR7Mzp2YWx1ZX0pXG5cCnNuaXBwZXQgc2xcblwKCXNjb3BlIDokezE6bmFtZX0sIGxhbWJkYSBkbyB8JHsyOnZhbHVlfXxcblwKCQl3aGVyZShcIiR7MzpmaWVsZCA9ID99XCIsICR7NDpiaW5kIHZhcn0pXG5cCgllbmRcblwKc25pcHBldCBzaGExXG5cCglEaWdlc3Q6OlNIQTEuaGV4ZGlnZXN0KCR7MTpzdHJpbmd9KVxuXApzbmlwcGV0IHN3ZWVwZXJcblwKCWNsYXNzICR7MTpNb2RlbENsYXNzTmFtZX1Td2VlcGVyIDwgQWN0aW9uQ29udHJvbGxlcjo6Q2FjaGluZzo6U3dlZXBlclxuXAoJCW9ic2VydmUgJDFcblwKXG5cCgkJZGVmIGFmdGVyX3NhdmUoJHsyOm1vZGVsX2NsYXNzX25hbWV9KVxuXAoJCQlleHBpcmVfY2FjaGUoJDIpXG5cCgkJZW5kXG5cClxuXAoJCWRlZiBhZnRlcl9kZXN0cm95KCQyKVxuXAoJCQlleHBpcmVfY2FjaGUoJDIpXG5cCgkJZW5kXG5cClxuXAoJCWRlZiBleHBpcmVfY2FjaGUoJDIpXG5cCgkJCWV4cGlyZV9wYWdlXG5cCgkJZW5kXG5cCgllbmRcblwKc25pcHBldCB0Y2JcblwKCXQuYm9vbGVhbiA6JHsxOnRpdGxlfVxuXAoJJHsyfVxuXApzbmlwcGV0IHRjYmlcblwKCXQuYmluYXJ5IDokezE6dGl0bGV9LCA6bGltaXQgPT4gJHsyOjJ9Lm1lZ2FieXRlc1xuXAoJJHszfVxuXApzbmlwcGV0IHRjZFxuXAoJdC5kZWNpbWFsIDokezE6dGl0bGV9LCA6cHJlY2lzaW9uID0+ICR7MjoxMH0sIDpzY2FsZSA9PiAkezM6Mn1cblwKCSR7NH1cblwKc25pcHBldCB0Y2RhXG5cCgl0LmRhdGUgOiR7MTp0aXRsZX1cblwKCSR7Mn1cblwKc25pcHBldCB0Y2R0XG5cCgl0LmRhdGV0aW1lIDokezE6dGl0bGV9XG5cCgkkezJ9XG5cCnNuaXBwZXQgdGNmXG5cCgl0LmZsb2F0IDokezE6dGl0bGV9XG5cCgkkezJ9XG5cCnNuaXBwZXQgdGNoXG5cCgl0LmNoYW5nZSA6JHsxOm5hbWV9LCA6JHsyOnN0cmluZ30sIDokezM6bGltaXR9ID0+ICR7NDo4MH1cblwKCSR7NX1cblwKc25pcHBldCB0Y2lcblwKCXQuaW50ZWdlciA6JHsxOnRpdGxlfVxuXAoJJHsyfVxuXApzbmlwcGV0IHRjbFxuXAoJdC5pbnRlZ2VyIDpsb2NrX3ZlcnNpb24sIDpudWxsID0+IGZhbHNlLCA6ZGVmYXVsdCA9PiAwXG5cCgkkezF9XG5cCnNuaXBwZXQgdGNyXG5cCgl0LnJlZmVyZW5jZXMgOiR7MTp0YWdnYWJsZX0sIDpwb2x5bW9ycGhpYyA9PiB7IDpkZWZhdWx0ID0+ICckezI6UGhvdG99JyB9XG5cCgkkezN9XG5cCnNuaXBwZXQgdGNzXG5cCgl0LnN0cmluZyA6JHsxOnRpdGxlfVxuXAoJJHsyfVxuXApzbmlwcGV0IHRjdFxuXAoJdC50ZXh0IDokezE6dGl0bGV9XG5cCgkkezJ9XG5cCnNuaXBwZXQgdGN0aVxuXAoJdC50aW1lIDokezE6dGl0bGV9XG5cCgkkezJ9XG5cCnNuaXBwZXQgdGN0c1xuXAoJdC50aW1lc3RhbXAgOiR7MTp0aXRsZX1cblwKCSR7Mn1cblwKc25pcHBldCB0Y3Rzc1xuXAoJdC50aW1lc3RhbXBzXG5cCgkkezF9XG5cCnNuaXBwZXQgdmFcblwKCXZhbGlkYXRlc19hc3NvY2lhdGVkIDokezE6YXR0cmlidXRlfVxuXApzbmlwcGV0IHZhb1xuXAoJdmFsaWRhdGVzX2FjY2VwdGFuY2Vfb2YgOiR7MTp0ZXJtc31cblwKc25pcHBldCB2Y1xuXAoJdmFsaWRhdGVzX2NvbmZpcm1hdGlvbl9vZiA6JHsxOmF0dHJpYnV0ZX1cblwKc25pcHBldCB2ZVxuXAoJdmFsaWRhdGVzX2V4Y2x1c2lvbl9vZiA6JHsxOmF0dHJpYnV0ZX0sIDppbiA9PiAkezI6JXcoIG1vdiBhdmkgKX1cblwKc25pcHBldCB2ZlxuXAoJdmFsaWRhdGVzX2Zvcm1hdF9vZiA6JHsxOmF0dHJpYnV0ZX0sIDp3aXRoID0+IC8kezI6cmVnZXh9L1xuXApzbmlwcGV0IHZpXG5cCgl2YWxpZGF0ZXNfaW5jbHVzaW9uX29mIDokezE6YXR0cmlidXRlfSwgOmluID0+ICV3KCR7MjogbW92IGF2aSB9KVxuXApzbmlwcGV0IHZsXG5cCgl2YWxpZGF0ZXNfbGVuZ3RoX29mIDokezE6YXR0cmlidXRlfSwgOndpdGhpbiA9PiAkezI6M30uLiR7MzoyMH1cblwKc25pcHBldCB2blxuXAoJdmFsaWRhdGVzX251bWVyaWNhbGl0eV9vZiA6JHsxOmF0dHJpYnV0ZX1cblwKc25pcHBldCB2cG9cblwKCXZhbGlkYXRlc19wcmVzZW5jZV9vZiA6JHsxOmF0dHJpYnV0ZX1cblwKc25pcHBldCB2dVxuXAoJdmFsaWRhdGVzX3VuaXF1ZW5lc3Nfb2YgOiR7MTphdHRyaWJ1dGV9XG5cCnNuaXBwZXQgd2FudHNcblwKCXdhbnRzLiR7MTpqc3x4bWx8aHRtbH0geyAkezJ9IH1cblwKc25pcHBldCB3Y1xuXAoJd2hlcmUoJHsxOlwiY29uZGl0aW9uc1wifSR7MjosIGJpbmRfdmFyfSlcblwKc25pcHBldCB3aFxuXAoJd2hlcmUoJHsxOmZpZWxkfSA9PiAkezI6dmFsdWV9KVxuXApzbmlwcGV0IHhkZWxldGVcblwKCXhociA6ZGVsZXRlLCA6JHsxOmRlc3Ryb3l9LCA6aWQgPT4gJHsyOjF9JHszfVxuXApzbmlwcGV0IHhnZXRcblwKCXhociA6Z2V0LCA6JHsxOnNob3d9LCA6aWQgPT4gJHsyOjF9JHszfVxuXApzbmlwcGV0IHhwb3N0XG5cCgl4aHIgOnBvc3QsIDokezE6Y3JlYXRlfSwgOiR7MjpvYmplY3R9ID0+IHsgJHszfSB9XG5cCnNuaXBwZXQgeHB1dFxuXAoJeGhyIDpwdXQsIDokezE6dXBkYXRlfSwgOmlkID0+ICR7MjoxfSwgOiR7MzpvYmplY3R9ID0+IHsgJHs0fSB9JHs1fVxuXApzbmlwcGV0IHRlc3RcblwKCXRlc3QgXCJzaG91bGQgJHsxOmRvIHNvbWV0aGluZ31cIiBkb1xuXAoJCSR7Mn1cblwKCWVuZFxuXAojbWlncmF0aW9uc1xuXApzbmlwcGV0IG1hY1xuXAoJYWRkX2NvbHVtbiA6JHsxOnRhYmxlX25hbWV9LCA6JHsyOmNvbHVtbl9uYW1lfSwgOiR7MzpkYXRhX3R5cGV9XG5cCnNuaXBwZXQgbXJjXG5cCglyZW1vdmVfY29sdW1uIDokezE6dGFibGVfbmFtZX0sIDokezI6Y29sdW1uX25hbWV9XG5cCnNuaXBwZXQgbXJuY1xuXAoJcmVuYW1lX2NvbHVtbiA6JHsxOnRhYmxlX25hbWV9LCA6JHsyOm9sZF9jb2x1bW5fbmFtZX0sIDokezM6bmV3X2NvbHVtbl9uYW1lfVxuXApzbmlwcGV0IG1jY1xuXAoJY2hhbmdlX2NvbHVtbiA6JHsxOnRhYmxlfSwgOiR7Mjpjb2x1bW59LCA6JHszOnR5cGV9XG5cCnNuaXBwZXQgbWNjY1xuXAoJdC5jb2x1bW4gOiR7MTp0aXRsZX0sIDokezI6c3RyaW5nfVxuXApzbmlwcGV0IG1jdFxuXAoJY3JlYXRlX3RhYmxlIDokezE6dGFibGVfbmFtZX0gZG8gfHR8XG5cCgkJdC5jb2x1bW4gOiR7MjpuYW1lfSwgOiR7Mzp0eXBlfVxuXAoJZW5kXG5cCnNuaXBwZXQgbWlncmF0aW9uXG5cCgljbGFzcyAkezE6Y2xhc3NfbmFtZX0gPCBBY3RpdmVSZWNvcmQ6Ok1pZ3JhdGlvblxuXAoJCWRlZiBzZWxmLnVwXG5cCgkJCSR7Mn1cblwKCQllbmRcblwKXG5cCgkJZGVmIHNlbGYuZG93blxuXAoJCWVuZFxuXAoJZW5kXG5cClxuXApzbmlwcGV0IHRyY1xuXAoJdC5yZW1vdmUgOiR7MTpjb2x1bW59XG5cCnNuaXBwZXQgdHJlXG5cCgl0LnJlbmFtZSA6JHsxOm9sZF9jb2x1bW5fbmFtZX0sIDokezI6bmV3X2NvbHVtbl9uYW1lfVxuXAoJJHszfVxuXApzbmlwcGV0IHRyZWZcblwKCXQucmVmZXJlbmNlcyA6JHsxOm1vZGVsfVxuXApcblwKI3JzcGVjXG5cCnNuaXBwZXQgaXRcblwKCWl0IFwiJHsxOnNwZWNfbmFtZX1cIiBkb1xuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGl0cFxuXAoJaXQgXCIkezE6c3BlY19uYW1lfVwiXG5cCgkkezJ9XG5cCnNuaXBwZXQgZGVzY1xuXAoJZGVzY3JpYmUgJHsxOmNsYXNzX25hbWV9IGRvXG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgY29udFxuXAoJY29udGV4dCBcIiR7MTptZXNzYWdlfVwiIGRvXG5cCgkJJHsyfVxuXAoJZW5kXG5cCnNuaXBwZXQgYmVmXG5cCgliZWZvcmUgOiR7MTplYWNofSBkb1xuXAoJCSR7Mn1cblwKCWVuZFxuXApzbmlwcGV0IGFmdFxuXAoJYWZ0ZXIgOiR7MTplYWNofSBkb1xuXAoJCSR7Mn1cblwKCWVuZFxuXAoiOwpleHBvcnRzLnNjb3BlID0gInJ1YnkiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9ydWJ5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/rust.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvcnVzdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInJ1c3QiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9ydXN0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/sass.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2FzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInNhc3MiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9zYXNzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/scad.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2NhZCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInNjYWQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9zY2FkIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/scala.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2NhbGEiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJzY2FsYSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3NjYWxhIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/scheme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2NoZW1lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAic2NoZW1lIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc2NoZW1lIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/scss.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2NzcyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInNjc3MiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9zY3NzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/sh.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAiIyBTaGViYW5nLiBFeGVjdXRpbmcgYmFzaCB2aWEgL3Vzci9iaW4vZW52IG1ha2VzIHNjcmlwdHMgbW9yZSBwb3J0YWJsZS5cblwKc25pcHBldCAjIVxuXAoJIyEvdXNyL2Jpbi9lbnYgYmFzaFxuXAoJXG5cCnNuaXBwZXQgaWZcblwKCWlmIFtbICR7MTpjb25kaXRpb259IF1dOyB0aGVuXG5cCgkJJHsyOiNzdGF0ZW1lbnRzfVxuXAoJZmlcblwKc25pcHBldCBlbGlmXG5cCgllbGlmIFtbICR7MTpjb25kaXRpb259IF1dOyB0aGVuXG5cCgkJJHsyOiNzdGF0ZW1lbnRzfVxuXApzbmlwcGV0IGZvclxuXAoJZm9yICgoICR7MjppfSA9IDA7ICQyIDwgJHsxOmNvdW50fTsgJDIrKyApKTsgZG9cblwKCQkkezM6I3N0YXRlbWVudHN9XG5cCglkb25lXG5cCnNuaXBwZXQgZm9yaVxuXAoJZm9yICR7MTpuZWVkbGV9IGluICR7MjpoYXlzdGFja30gOyBkb1xuXAoJCSR7Mzojc3RhdGVtZW50c31cblwKCWRvbmVcblwKc25pcHBldCB3aFxuXAoJd2hpbGUgW1sgJHsxOmNvbmRpdGlvbn0gXV07IGRvXG5cCgkJJHsyOiNzdGF0ZW1lbnRzfVxuXAoJZG9uZVxuXApzbmlwcGV0IHVudGlsXG5cCgl1bnRpbCBbWyAkezE6Y29uZGl0aW9ufSBdXTsgZG9cblwKCQkkezI6I3N0YXRlbWVudHN9XG5cCglkb25lXG5cCnNuaXBwZXQgY2FzZVxuXAoJY2FzZSAkezE6d29yZH0gaW5cblwKCQkkezI6cGF0dGVybn0pXG5cCgkJCSR7M307O1xuXAoJZXNhY1xuXApzbmlwcGV0IGdvIFxuXAoJd2hpbGUgZ2V0b3B0cyAnJHsxOm99JyAkezI6b3B0c30gXG5cCglkbyBcblwKCQljYXNlICQkMiBpblxuXAoJCSR7MzpvMH0pXG5cCgkJCSR7NDojc3RhbWVudHN9OztcblwKCQllc2FjXG5cCglkb25lXG5cCiMgU2V0IFNDUklQVF9ESVIgdmFyaWFibGUgdG8gZGlyZWN0b3J5IHNjcmlwdCBpcyBsb2NhdGVkLlxuXApzbmlwcGV0IHNkaXJcblwKCVNDUklQVF9ESVI9XCIkKCBjZCBcIiQoIGRpcm5hbWUgXCIke0JBU0hfU09VUkNFWzBdfVwiIClcIiAmJiBwd2QgKVwiXG5cCiMgZ2V0b3B0XG5cCnNuaXBwZXQgZ2V0b3B0XG5cCglfX1NjcmlwdFZlcnNpb249XCIkezE6dmVyc2lvbn1cIlxuXApcblwKCSM9PT0gIEZVTkNUSU9OICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cCgkjICAgICAgICAgTkFNRTogIHVzYWdlXG5cCgkjICBERVNDUklQVElPTjogIERpc3BsYXkgdXNhZ2UgaW5mb3JtYXRpb24uXG5cCgkjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXAoJZnVuY3Rpb24gdXNhZ2UgKClcblwKCXtcblwKCQkJY2F0IDw8LSBFT1RcblwKXG5cCgkgIFVzYWdlIDogICQkezA6MH0gW29wdGlvbnNdIFstLV0gXG5cClxuXAoJICBPcHRpb25zOiBcblwKCSAgLWh8aGVscCAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZVxuXAoJICAtdnx2ZXJzaW9uICAgIERpc3BsYXkgc2NyaXB0IHZlcnNpb25cblwKXG5cCglFT1RcblwKCX0gICAgIyAtLS0tLS0tLS0tICBlbmQgb2YgZnVuY3Rpb24gdXNhZ2UgIC0tLS0tLS0tLS1cblwKXG5cCgkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblwKCSMgIEhhbmRsZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG5cCgkjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblwKXG5cCgl3aGlsZSBnZXRvcHRzIFwiOmh2XCIgb3B0XG5cCglkb1xuXAoJICBjYXNlICRvcHQgaW5cblwKXG5cCgkJaHxoZWxwICAgICApICB1c2FnZTsgZXhpdCAwICAgOztcblwKXG5cCgkJdnx2ZXJzaW9uICApICBlY2hvIFwiJCR7MDowfSAtLSBWZXJzaW9uICRfX1NjcmlwdFZlcnNpb25cIjsgZXhpdCAwICAgOztcblwKXG5cCgkJXFw/ICkgIGVjaG8gLWUgXCJcXG4gIE9wdGlvbiBkb2VzIG5vdCBleGlzdCA6ICRPUFRBUkdcXG5cIlxuXAoJCQkgIHVzYWdlOyBleGl0IDEgICA7O1xuXApcblwKCSAgZXNhYyAgICAjIC0tLSBlbmQgb2YgY2FzZSAtLS1cblwKCWRvbmVcblwKCXNoaWZ0ICQoKCRPUFRJTkQtMSkpXG5cClxuXAoiOwpleHBvcnRzLnNjb3BlID0gInNoIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc2giXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/sjs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2pzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAic2pzIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc2pzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/slim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc2xpbSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICBleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CiAgICBleHBvcnRzLnNjb3BlID0gInNsaW0iOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9zbGltIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/smarty.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc21hcnR5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAic21hcnR5IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc21hcnR5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/snippets.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc25pcHBldHMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAiIyBzbmlwcGV0cyBmb3IgbWFraW5nIHNuaXBwZXRzIDopXG5cCnNuaXBwZXQgc25pcFxuXAoJc25pcHBldCAkezE6dHJpZ2dlcn1cblwKCQkkezJ9XG5cCnNuaXBwZXQgbXNuaXBcblwKCXNuaXBwZXQgJHsxOnRyaWdnZXJ9ICR7MjpkZXNjcmlwdGlvbn1cblwKCQkkezN9XG5cCnNuaXBwZXQgdlxuXAoJe1ZJU1VBTH1cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJzbmlwcGV0cyI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3NuaXBwZXRzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/soy_template.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc295X3RlbXBsYXRlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAic295X3RlbXBsYXRlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc295X3RlbXBsYXRlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/space.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3BhY2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJzcGFjZSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3NwYWNlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/sparql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3BhcnFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc3BhcnFsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/sql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3FsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgdGJsXG5cCgljcmVhdGUgdGFibGUgJHsxOnRhYmxlfSAoXG5cCgkJJHsyOmNvbHVtbnN9XG5cCgkpO1xuXApzbmlwcGV0IGNvbFxuXAoJJHsxOm5hbWV9CSR7Mjp0eXBlfQkkezM6ZGVmYXVsdCAnJ30JJHs0Om5vdCBudWxsfVxuXApzbmlwcGV0IGNjb2xcblwKCSR7MTpuYW1lfQl2YXJjaGFyMigkezI6c2l6ZX0pCSR7MzpkZWZhdWx0ICcnfQkkezQ6bm90IG51bGx9XG5cCnNuaXBwZXQgbmNvbFxuXAoJJHsxOm5hbWV9CW51bWJlcgkkezM6ZGVmYXVsdCAwfQkkezQ6bm90IG51bGx9XG5cCnNuaXBwZXQgZGNvbFxuXAoJJHsxOm5hbWV9CWRhdGUJJHszOmRlZmF1bHQgc3lzZGF0ZX0JJHs0Om5vdCBudWxsfVxuXApzbmlwcGV0IGluZFxuXAoJY3JlYXRlIGluZGV4ICR7MzokMV8kMn0gb24gJHsxOnRhYmxlfSgkezI6Y29sdW1ufSk7XG5cCnNuaXBwZXQgdWluZFxuXAoJY3JlYXRlIHVuaXF1ZSBpbmRleCAkezE6bmFtZX0gb24gJHsyOnRhYmxlfSgkezM6Y29sdW1ufSk7XG5cCnNuaXBwZXQgdGJsY29tXG5cCgljb21tZW50IG9uIHRhYmxlICR7MTp0YWJsZX0gaXMgJyR7Mjpjb21tZW50fSc7XG5cCnNuaXBwZXQgY29sY29tXG5cCgljb21tZW50IG9uIGNvbHVtbiAkezE6dGFibGV9LiR7Mjpjb2x1bW59IGlzICckezM6Y29tbWVudH0nO1xuXApzbmlwcGV0IGFkZGNvbFxuXAoJYWx0ZXIgdGFibGUgJHsxOnRhYmxlfSBhZGQgKCR7Mjpjb2x1bW59ICR7Mzp0eXBlfSk7XG5cCnNuaXBwZXQgc2VxXG5cCgljcmVhdGUgc2VxdWVuY2UgJHsxOm5hbWV9IHN0YXJ0IHdpdGggJHsyOjF9IGluY3JlbWVudCBieSAkezM6MX0gbWludmFsdWUgJHs0OjF9O1xuXApzbmlwcGV0IHMqXG5cCglzZWxlY3QgKiBmcm9tICR7MTp0YWJsZX1cblwKIjsKZXhwb3J0cy5zY29wZSA9ICJzcWwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy9zcWwiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/sqlserver.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3Fsc2VydmVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgSVNOVUxMXG5cCnNuaXBwZXQgaXNudWxsXG5cCglJU05VTEwoJHsxOmNoZWNrX2V4cHJlc3Npb259LCAkezI6cmVwbGFjZW1lbnRfdmFsdWV9KVxuXAojIEZPUk1BVFxuXApzbmlwcGV0IGZvcm1hdFxuXAoJRk9STUFUKCR7MTp2YWx1ZX0sICR7Mjpmb3JtYXR9KVxuXAojIENBU1RcblwKc25pcHBldCBjYXN0XG5cCglDQVNUKCR7MTpleHByZXNzaW9ufSBBUyAkezI6ZGF0YV90eXBlfSlcblwKIyBDT05WRVJUXG5cCnNuaXBwZXQgY29udmVydFxuXAoJQ09OVkVSVCgkezE6ZGF0YV90eXBlfSwgJHsyOmV4cHJlc3Npb259KVxuXAojIERBVEVQQVJUXG5cCnNuaXBwZXQgZGF0ZXBhcnRcblwKCURBVEVQQVJUKCR7MTpkYXRlcGFydH0sICR7MjpkYXRlfSlcblwKIyBEQVRFRElGRlxuXApzbmlwcGV0IGRhdGVkaWZmXG5cCglEQVRFRElGRigkezE6ZGF0ZXBhcnR9LCAkezI6c3RhcnRkYXRlfSwgJHszOmVuZGRhdGV9KVxuXAojIERBVEVBRERcblwKc25pcHBldCBkYXRlYWRkXG5cCglEQVRFQUREKCR7MTpkYXRlcGFydH0sICR7MjpudW1iZXJ9LCAkezM6ZGF0ZX0pXG5cCiMgREFURUZST01QQVJUUyBcblwKc25pcHBldCBkYXRlZnJvbXBhcnRzXG5cCglEQVRFRlJPTVBBUlRTKCR7MTp5ZWFyfSwgJHsyOm1vbnRofSwgJHszOmRheX0pXG5cCiMgT0JKRUNUX0RFRklOSVRJT05cblwKc25pcHBldCBvYmplY3RkZWZcblwKCVNFTEVDVCBPQkpFQ1RfREVGSU5JVElPTihPQkpFQ1RfSUQoJyR7MTpzeXMuc2VydmVyX3Blcm1pc3Npb25zIC8qb2JqZWN0IG5hbWUqL30nKSlcblwKIyBTVFVGRiBYTUxcblwKc25pcHBldCBzdHVmZnhtbFxuXAoJU1RVRkYoKFNFTEVDVCAnLCAnICsgJHsxOkNvbHVtbk5hbWV9XG5cCgkJRlJPTSAkezI6VGFibGVOYW1lfVxuXAoJCVdIRVJFICR7MzpXaGVyZUNsYXVzZX1cblwKCQlGT1IgWE1MIFBBVEgoJycpKSwgMSwgMSwgJycpIEFTICR7NDpBbGlhc31cblwKCSR7NTovKmh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODgwNDMuYXNweCovfVxuXAojIENyZWF0ZSBQcm9jZWR1cmVcblwKc25pcHBldCBjcmVhdGVwcm9jXG5cCgktLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblwKCS0tIEF1dGhvcjoJCSR7MTpBdXRob3J9XG5cCgktLSBDcmVhdGUgZGF0ZTogJHsyOkRhdGV9XG5cCgktLSBEZXNjcmlwdGlvbjoJJHszOkRlc2NyaXB0aW9ufVxuXAoJLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cCglDUkVBVEUgUFJPQ0VEVVJFICR7NDpQcm9jZWR1cmVfTmFtZX1cblwKCQkkezU6LypBZGQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBzdG9yZWQgcHJvY2VkdXJlIGhlcmUqL31cblwKCUFTXG5cCglCRUdJTlxuXAoJCS0tIFNFVCBOT0NPVU5UIE9OIGFkZGVkIHRvIHByZXZlbnQgZXh0cmEgcmVzdWx0IHNldHMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIFNFTEVDVCBzdGF0ZW1lbnRzLlxuXAoJCVNFVCBOT0NPVU5UIE9OO1xuXAoJCVxuXAoJCSR7NjovKkFkZCB0aGUgVC1TUUwgc3RhdGVtZW50cyB0byBjb21wdXRlIHRoZSByZXR1cm4gdmFsdWUgaGVyZSovfVxuXAoJCVxuXAoJRU5EXG5cCglHT1xuXAojIENyZWF0ZSBTY2FsYXIgRnVuY3Rpb25cblwKc25pcHBldCBjcmVhdGVmblxuXAoJLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cCgktLSBBdXRob3I6CQkkezE6QXV0aG9yfVxuXAoJLS0gQ3JlYXRlIGRhdGU6ICR7MjpEYXRlfVxuXAoJLS0gRGVzY3JpcHRpb246CSR7MzpEZXNjcmlwdGlvbn1cblwKCS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXAoJQ1JFQVRFIEZVTkNUSU9OICR7NDpTY2FsYXJfRnVuY3Rpb25fTmFtZX1cblwKCQktLSBBZGQgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiBoZXJlXG5cCglSRVRVUk5TICR7NTpGdW5jdGlvbl9EYXRhX1R5cGV9XG5cCglBU1xuXAoJQkVHSU5cblwKCQlERUNMQVJFIEBSZXN1bHQgJHs1OkZ1bmN0aW9uX0RhdGFfVHlwZX1cblwKCQlcblwKCQkkezY6LypBZGQgdGhlIFQtU1FMIHN0YXRlbWVudHMgdG8gY29tcHV0ZSB0aGUgcmV0dXJuIHZhbHVlIGhlcmUqL31cblwKCQlcblwKCUVORFxuXAoJR08iOwpleHBvcnRzLnNjb3BlID0gInNxbHNlcnZlciI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3NxbHNlcnZlciJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/stylus.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3R5bHVzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAic3R5bHVzIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc3R5bHVzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/svg.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3ZnIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAic3ZnIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvc3ZnIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/swift.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvc3dpZnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJzd2lmdCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3N3aWZ0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/tcl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdGNsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMgIyEvdXNyL2Jpbi9lbnYgdGNsc2hcblwKc25pcHBldCAjIVxuXAoJIyEvdXNyL2Jpbi9lbnYgdGNsc2hcblwKCVxuXAojIFByb2Nlc3NcblwKc25pcHBldCBwcm9cblwKCXByb2MgJHsxOmZ1bmN0aW9uX25hbWV9IHskezI6YXJnc319IHtcblwKCQkkezM6I2JvZHkgLi4ufVxuXAoJfVxuXAojeGlmXG5cCnNuaXBwZXQgeGlmXG5cCgkkezE6ZXhwcn0/ICR7Mjp0cnVlfSA6ICR7MzpmYWxzZX1cblwKIyBDb25kaXRpb25hbFxuXApzbmlwcGV0IGlmXG5cCglpZiB7JHsxfX0ge1xuXAoJCSR7MjojIGJvZHkuLi59XG5cCgl9XG5cCiMgQ29uZGl0aW9uYWwgaWYuLmVsc2VcblwKc25pcHBldCBpZmVcblwKCWlmIHskezF9fSB7XG5cCgkJJHsyOiMgYm9keS4uLn1cblwKCX0gZWxzZSB7XG5cCgkJJHszOiMgZWxzZS4uLn1cblwKCX1cblwKIyBDb25kaXRpb25hbCBpZi4uZWxzaWYuLmVsc2VcblwKc25pcHBldCBpZmVlXG5cCglpZiB7JHsxfX0ge1xuXAoJCSR7MjojIGJvZHkuLi59XG5cCgl9IGVsc2VpZiB7JHszfX0ge1xuXAoJCSR7NDojIGVsc2lmLi4ufVxuXAoJfSBlbHNlIHtcblwKCQkkezU6IyBlbHNlLi4ufVxuXAoJfVxuXAojIElmIGNhdGNoIHRoZW5cblwKc25pcHBldCBpZmNcblwKCWlmIHsgW2NhdGNoIHskezE6I2RvIHNvbWV0aGluZy4uLn19ICR7MjplcnJ9XSB9IHtcblwKCQkkezM6IyBoYW5kbGUgZmFpbHVyZS4uLn1cblwKCX1cblwKIyBDYXRjaFxuXApzbmlwcGV0IGNhdGNoXG5cCgljYXRjaCB7JHsxfX0gJHsyOmVycn0gJHszOm9wdGlvbnN9XG5cCiMgV2hpbGUgTG9vcFxuXApzbmlwcGV0IHdoXG5cCgl3aGlsZSB7JHsxfX0ge1xuXAoJCSR7MjojIGJvZHkuLi59XG5cCgl9XG5cCiMgRm9yIExvb3BcblwKc25pcHBldCBmb3JcblwKCWZvciB7c2V0ICR7Mjp2YXJ9IDB9IHskJDIgPCAkezE6Y291bnR9fSB7JHszOmluY3J9ICQyfSB7XG5cCgkJJHs0OiMgYm9keS4uLn1cblwKCX1cblwKIyBGb3JlYWNoIExvb3BcblwKc25pcHBldCBmb3JlXG5cCglmb3JlYWNoICR7MTp4fSB7JHsyOiNsaXN0fX0ge1xuXAoJCSR7MzojIGJvZHkuLi59XG5cCgl9XG5cCiMgYWZ0ZXIgbXMgc2NyaXB0Li4uXG5cCnNuaXBwZXQgYWZcblwKCWFmdGVyICR7MTptc30gJHsyOiNkbyBzb21ldGhpbmd9XG5cCiMgYWZ0ZXIgY2FuY2VsIGlkXG5cCnNuaXBwZXQgYWZjXG5cCglhZnRlciBjYW5jZWwgJHsxOmlkIG9yIHNjcmlwdH1cblwKIyBhZnRlciBpZGxlXG5cCnNuaXBwZXQgYWZpXG5cCglhZnRlciBpZGxlICR7MTpzY3JpcHR9XG5cCiMgYWZ0ZXIgaW5mbyBpZFxuXApzbmlwcGV0IGFmaW5cblwKCWFmdGVyIGluZm8gJHsxOmlkfVxuXAojIEV4cHJcblwKc25pcHBldCBleHBcblwKCWV4cHIgeyR7MTojZXhwcmVzc2lvbiBoZXJlfX1cblwKIyBTd2l0Y2hcblwKc25pcHBldCBzd1xuXAoJc3dpdGNoICR7MTp2YXJ9IHtcblwKCQkkezM6cGF0dGVybiAxfSB7XG5cCgkJCSR7NDojZG8gc29tZXRoaW5nfVxuXAoJCX1cblwKCQlkZWZhdWx0IHtcblwKCQkJJHsyOiNkbyBzb21ldGhpbmd9XG5cCgkJfVxuXAoJfVxuXAojIENhc2VcblwKc25pcHBldCBjYVxuXAoJJHsxOnBhdHRlcm59IHtcblwKCQkkezI6I2RvIHNvbWV0aGluZ31cblwKCX0kezN9XG5cCiMgTmFtZXNwYWNlIGV2YWxcblwKc25pcHBldCBuc1xuXAoJbmFtZXNwYWNlIGV2YWwgJHsxOnBhdGh9IHskezI6I3NjcmlwdC4uLn19XG5cCiMgTmFtZXNwYWNlIGN1cnJlbnRcblwKc25pcHBldCBuc2NcblwKCW5hbWVzcGFjZSBjdXJyZW50XG5cCiI7CmV4cG9ydHMuc2NvcGUgPSAidGNsIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdGNsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/terraform.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdGVycmFmb3JtIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAidGVycmFmb3JtIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdGVycmFmb3JtIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/tex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdGV4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiNQUkVBTUJMRVxuXAojbmV3Y29tbWFuZFxuXApzbmlwcGV0IG5jXG5cCglcXG5ld2NvbW1hbmR7XFwkezE6Y21kfX1bJHsyOm9wdH1deyR7MzpyZWFsY21kfX0kezR9XG5cCiN1c2VwYWNrYWdlXG5cCnNuaXBwZXQgdXBcblwKCVxcdXNlcGFja2FnZVskezE6W29wdGlvbnN9XXskezI6cGFja2FnZX19XG5cCiNuZXd1bmljb2RlY2hhclxuXApzbmlwcGV0IG51Y1xuXAoJXFxuZXd1bmljb2RlY2hhcnskezF9fXskezI6XFxlbnN1cmVtYXRofSR7Mzp0ZXgtc3Vic3RpdHV0ZX19fVxuXAojRGVjbGFyZU1hdGhPcGVyYXRvclxuXApzbmlwcGV0IGRtb1xuXAoJXFxEZWNsYXJlTWF0aE9wZXJhdG9yeyR7MX19eyR7Mn19XG5cClxuXAojRE9DVU1FTlRcblwKIyBcXGJlZ2lue30uLi5cXGVuZHt9XG5cCnNuaXBwZXQgYmVnaW5cblwKCVxcYmVnaW57JHsxOmVudn19XG5cCgkJJHsyfVxuXAoJXFxlbmR7JDF9XG5cCiMgVGFidWxhclxuXApzbmlwcGV0IHRhYlxuXAoJXFxiZWdpbnskezE6dGFidWxhcn19eyR7MjpjfX1cblwKCSR7M31cblwKCVxcZW5keyQxfVxuXApzbmlwcGV0IHRobVxuXAoJXFxiZWdpblskezE6YXV0aG9yfV17JHsyOnRobX19XG5cCgkkezN9XG5cCglcXGVuZHskMX1cblwKc25pcHBldCBjZW50ZXJcblwKCVxcYmVnaW57Y2VudGVyfVxuXAoJCSR7MX1cblwKCVxcZW5ke2NlbnRlcn1cblwKIyBBbGlnbihlZClcblwKc25pcHBldCBhbGlcblwKCVxcYmVnaW57YWxpZ24kezE6ZWR9fVxuXAoJCSR7Mn1cblwKCVxcZW5ke2FsaWduJDF9XG5cCiMgR2F0aGVyKGVkKVxuXApzbmlwcGV0IGdhdFxuXAoJXFxiZWdpbntnYXRoZXIkezE6ZWR9fVxuXAoJCSR7Mn1cblwKCVxcZW5ke2dhdGhlciQxfVxuXAojIEVxdWF0aW9uXG5cCnNuaXBwZXQgZXFcblwKCVxcYmVnaW57ZXF1YXRpb259XG5cCgkJJHsxfVxuXAoJXFxlbmR7ZXF1YXRpb259XG5cCiMgRXF1YXRpb25cblwKc25pcHBldCBlcSpcblwKCVxcYmVnaW57ZXF1YXRpb24qfVxuXAoJCSR7MX1cblwKCVxcZW5ke2VxdWF0aW9uKn1cblwKIyBVbm51bWJlcmVkIEVxdWF0aW9uXG5cCnNuaXBwZXQgXFxcblwKCVxcW1xuXAoJCSR7MX1cblwKCVxcXVxuXAojIEVudW1lcmF0ZVxuXApzbmlwcGV0IGVudW1cblwKCVxcYmVnaW57ZW51bWVyYXRlfVxuXAoJCVxcaXRlbSAkezF9XG5cCglcXGVuZHtlbnVtZXJhdGV9XG5cCiMgSXRlbWl6ZVxuXApzbmlwcGV0IGl0ZW1pemVcblwKCVxcYmVnaW57aXRlbWl6ZX1cblwKCQlcXGl0ZW0gJHsxfVxuXAoJXFxlbmR7aXRlbWl6ZX1cblwKIyBEZXNjcmlwdGlvblxuXApzbmlwcGV0IGRlc2NcblwKCVxcYmVnaW57ZGVzY3JpcHRpb259XG5cCgkJXFxpdGVtWyR7MX1dICR7Mn1cblwKCVxcZW5ke2Rlc2NyaXB0aW9ufVxuXAojIE1hdHJpeFxuXApzbmlwcGV0IG1hdFxuXAoJXFxiZWdpbnskezE6cC9iL3YvVi9CL3NtYWxsfW1hdHJpeH1cblwKCQkkezJ9XG5cCglcXGVuZHskMW1hdHJpeH1cblwKIyBDYXNlc1xuXApzbmlwcGV0IGNhc1xuXAoJXFxiZWdpbntjYXNlc31cblwKCQkkezE6ZXF1YXRpb259LCAmXFx0ZXh0eyBpZiB9JHsyOmNhc2V9XFxcXFxuXAoJCSR7M31cblwKCVxcZW5ke2Nhc2VzfVxuXAojIFNwbGl0XG5cCnNuaXBwZXQgc3BsXG5cCglcXGJlZ2lue3NwbGl0fVxuXAoJCSR7MX1cblwKCVxcZW5ke3NwbGl0fVxuXAojIFBhcnRcblwKc25pcHBldCBwYXJ0XG5cCglcXHBhcnR7JHsxOnBhcnQgbmFtZX19ICUgKGZvbGQpXG5cCglcXGxhYmVse3BydDokezI6JDF9fVxuXAoJJHszfVxuXAoJJSBwYXJ0ICQyIChlbmQpXG5cCiMgQ2hhcHRlclxuXApzbmlwcGV0IGNoYVxuXAoJXFxjaGFwdGVyeyR7MTpjaGFwdGVyIG5hbWV9fVxuXAoJXFxsYWJlbHtjaGE6JHsyOiQxfX1cblwKCSR7M31cblwKIyBTZWN0aW9uXG5cCnNuaXBwZXQgc2VjXG5cCglcXHNlY3Rpb257JHsxOnNlY3Rpb24gbmFtZX19XG5cCglcXGxhYmVse3NlYzokezI6JDF9fVxuXAoJJHszfVxuXAojIFN1YiBTZWN0aW9uXG5cCnNuaXBwZXQgc3ViXG5cCglcXHN1YnNlY3Rpb257JHsxOnN1YnNlY3Rpb24gbmFtZX19XG5cCglcXGxhYmVse3N1YjokezI6JDF9fVxuXAoJJHszfVxuXAojIFN1YiBTdWIgU2VjdGlvblxuXApzbmlwcGV0IHN1YnNcblwKCVxcc3Vic3Vic2VjdGlvbnskezE6c3Vic3Vic2VjdGlvbiBuYW1lfX1cblwKCVxcbGFiZWx7c3N1YjokezI6JDF9fVxuXAoJJHszfVxuXAojIFBhcmFncmFwaFxuXApzbmlwcGV0IHBhclxuXAoJXFxwYXJhZ3JhcGh7JHsxOnBhcmFncmFwaCBuYW1lfX1cblwKCVxcbGFiZWx7cGFyOiR7MjokMX19XG5cCgkkezN9XG5cCiMgU3ViIFBhcmFncmFwaFxuXApzbmlwcGV0IHN1YnBcblwKCVxcc3VicGFyYWdyYXBoeyR7MTpzdWJwYXJhZ3JhcGggbmFtZX19XG5cCglcXGxhYmVse3N1YnA6JHsyOiQxfX1cblwKCSR7M31cblwKI1JlZmVyZW5jZXNcblwKc25pcHBldCBpdGRcblwKCVxcaXRlbVskezE6ZGVzY3JpcHRpb259XSAkezI6aXRlbX1cblwKc25pcHBldCBmaWd1cmVcblwKCSR7MTpGaWd1cmV9flxccmVmeyR7MjpmaWc6fX0kezN9XG5cCnNuaXBwZXQgdGFibGVcblwKCSR7MTpUYWJsZX1+XFxyZWZ7JHsyOnRhYjp9fSR7M31cblwKc25pcHBldCBsaXN0aW5nXG5cCgkkezE6TGlzdGluZ31+XFxyZWZ7JHsyOmxpc3R9fSR7M31cblwKc25pcHBldCBzZWN0aW9uXG5cCgkkezE6U2VjdGlvbn1+XFxyZWZ7JHsyOnNlYzp9fSR7M31cblwKc25pcHBldCBwYWdlXG5cCgkkezE6cGFnZX1+XFxwYWdlcmVmeyR7Mn19JHszfVxuXApzbmlwcGV0IGluZGV4XG5cCglcXGluZGV4eyR7MTppbmRleH19JHsyfVxuXAojQ2l0YXRpb25zXG5cCnNuaXBwZXQgY2l0ZVxuXAoJXFxjaXRlWyR7MX1deyR7Mn19JHszfVxuXApzbmlwcGV0IGZjaXRlXG5cCglcXGZvb3RjaXRlWyR7MX1deyR7Mn19JHszfVxuXAojRm9ybWF0aW5nIHRleHQ6IGl0YWxpYywgYm9sZCwgdW5kZXJsaW5lLCBzbWFsbCBjYXBpdGFsLCBlbXBoYXNlIC4uXG5cCnNuaXBwZXQgaXRcblwKCVxcdGV4dGl0eyR7MTp0ZXh0fX1cblwKc25pcHBldCBiZlxuXAoJXFx0ZXh0YmZ7JHsxOnRleHR9fVxuXApzbmlwcGV0IHVuZGVyXG5cCglcXHVuZGVybGluZXskezE6dGV4dH19XG5cCnNuaXBwZXQgZW1wXG5cCglcXGVtcGh7JHsxOnRleHR9fVxuXApzbmlwcGV0IHNjXG5cCglcXHRleHRzY3skezE6dGV4dH19XG5cCiNDaG9vc2luZyBmb250XG5cCnNuaXBwZXQgc2ZcblwKCVxcdGV4dHNmeyR7MTp0ZXh0fX1cblwKc25pcHBldCBybVxuXAoJXFx0ZXh0cm17JHsxOnRleHR9fVxuXApzbmlwcGV0IHR0XG5cCglcXHRleHR0dHskezE6dGV4dH19XG5cCiNtaXNjXG5cCnNuaXBwZXQgZnRcblwKCVxcZm9vdG5vdGV7JHsxOnRleHR9fVxuXApzbmlwcGV0IGZpZ1xuXAoJXFxiZWdpbntmaWd1cmV9XG5cCglcXGJlZ2lue2NlbnRlcn1cblwKCSAgICBcXGluY2x1ZGVncmFwaGljc1tzY2FsZT0kezF9XXtGaWd1cmVzLyR7Mn19XG5cCglcXGVuZHtjZW50ZXJ9XG5cCglcXGNhcHRpb257JHszfX1cblwKCVxcbGFiZWx7ZmlnOiR7NH19XG5cCglcXGVuZHtmaWd1cmV9XG5cCnNuaXBwZXQgdGlrelxuXAoJXFxiZWdpbntmaWd1cmV9XG5cCglcXGJlZ2lue2NlbnRlcn1cblwKCVxcYmVnaW57dGlrenBpY3R1cmV9W3NjYWxlPSR7MToxfV1cblwKCQkkezJ9XG5cCglcXGVuZHt0aWt6cGljdHVyZX1cblwKCVxcZW5ke2NlbnRlcn1cblwKCVxcY2FwdGlvbnskezN9fVxuXAoJXFxsYWJlbHtmaWc6JHs0fX1cblwKCVxcZW5ke2ZpZ3VyZX1cblwKI21hdGhcblwKc25pcHBldCBzdGFja3JlbFxuXAoJXFxzdGFja3JlbHskezE6YWJvdmV9fXskezI6YmVsb3d9fSAkezN9XG5cCnNuaXBwZXQgZnJhY1xuXAoJXFxmcmFjeyR7MTpudW19fXskezI6ZGVub219fVxuXApzbmlwcGV0IHN1bVxuXAoJXFxzdW1eeyR7MTpufX1feyR7MjppPTF9fXskezN9fSI7CmV4cG9ydHMuc2NvcGUgPSAidGV4IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdGV4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/text.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdGV4dCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInRleHQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy90ZXh0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/textile.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdGV4dGlsZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9ICIjIEpla3lsbCBwb3N0IGhlYWRlclxuXApzbmlwcGV0IGhlYWRlclxuXAoJLS0tXG5cCgl0aXRsZTogJHsxOnRpdGxlfVxuXAoJbGF5b3V0OiBwb3N0XG5cCglkYXRlOiAkezI6ZGF0ZX0gJHszOmhvdXI6bWludXRlOnNlY29uZH0gLTA1OjAwXG5cCgktLS1cblwKXG5cCiMgSW1hZ2VcblwKc25pcHBldCBpbWdcblwKCSEkezE6dXJsfSgkezI6dGl0bGV9KTokezM6bGlua30hXG5cClxuXAojIFRhYmxlXG5cCnNuaXBwZXQgfFxuXAoJfCR7MX18JHsyfVxuXApcblwKIyBMaW5rXG5cCnNuaXBwZXQgbGlua1xuXAoJXCIkezE6bGluayB0ZXh0fVwiOiR7Mjp1cmx9XG5cClxuXAojIEFjcm9ueW1cblwKc25pcHBldCAoXG5cCgkoJHsxOkV4cGFuZCBhY3JvbnltfSkkezJ9XG5cClxuXAojIEZvb3Rub3RlXG5cCnNuaXBwZXQgZm5cblwKCVskezE6cmVmIG51bWJlcn1dICR7M31cblwKXG5cCglmbiQxLiAkezI6Zm9vdG5vdGV9XG5cCglcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJ0ZXh0aWxlIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdGV4dGlsZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/toml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdG9tbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInRvbWwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy90b21sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/tsx.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdHN4IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAidHN4IjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdHN4Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/turtle.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdHVydGxlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdHVydGxlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/twig.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdHdpZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInR3aWciOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy90d2lnIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/typescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdHlwZXNjcmlwdCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInR5cGVzY3JpcHQiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy90eXBlc2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/vala.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdmFsYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwpleHBvcnRzLnNuaXBwZXRzID0gWwogICAgewogICAgICAgICJjb250ZW50IjogImNhc2UgJHsxOmNvbmRpdGlvbn06XG5cdCQwXG5cdGJyZWFrO1xuIiwKICAgICAgICAibmFtZSI6ICJjYXNlIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiY2FzZSIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiLyoqXG4gKiAkezZ9XG4gKi9cbiR7MTpwdWJsaWN9IGNsYXNzICR7MjpNZXRob2ROYW1lfSR7MzogOiBHTGliLk9iamVjdH0ge1xuXG5cdC8qKlxuXHQgKiAkezd9XG5cdCAqL1xuXHRwdWJsaWMgJHsyfSgkezR9KSB7XG5cdFx0JHs1fVxuXHR9XG5cblx0JDBcbn0iLAogICAgICAgICJuYW1lIjogImNsYXNzIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiY2xhc3MiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIigkezF9KSA9PiB7XG5cdCR7MH1cbn1cbiIsCiAgICAgICAgIm5hbWUiOiAiY2xvc3VyZSIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIj0+IgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICIvKlxuICogJDBcbiAqLyIsCiAgICAgICAgIm5hbWUiOiAiQ29tbWVudCAobXVsdGlsaW5lKSIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIi8qIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJDb25zb2xlLldyaXRlTGluZSgkMSk7XG4kMCIsCiAgICAgICAgIm5hbWUiOiAiQ29uc29sZS5Xcml0ZUxpbmUgKHdyaXRlbGluZSkiLAogICAgICAgICJzY29wZSI6ICJ2YWxhIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJ3cml0ZWxpbmUiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIltEQnVzKG5hbWUgPSBcIiQwXCIpXSIsCiAgICAgICAgIm5hbWUiOiAiREJ1cyBhbm5vdGF0aW9uIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiW0RCdXMiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogImRlbGVnYXRlICR7MTp2b2lkfSAkezI6RGVsZWdhdGVOYW1lfSgkMCk7IiwKICAgICAgICAibmFtZSI6ICJkZWxlZ2F0ZSIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogImRlbGVnYXRlIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJkbyB7XG5cdCQwXG59IHdoaWxlICgkMSk7XG4iLAogICAgICAgICJuYW1lIjogImRvIHdoaWxlIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiZG93aGlsZSIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiLyoqXG4gKiAkMFxuICovIiwKICAgICAgICAibmFtZSI6ICJEb2NCbG9jayIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIi8qKiIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiZWxzZSBpZiAoJDEpIHtcblx0JDBcbn1cbiIsCiAgICAgICAgIm5hbWUiOiAiZWxzZSBpZiAoZWxzZWlmKSIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogImVsc2VpZiIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiZWxzZSB7XG5cdCQwXG59IiwKICAgICAgICAibmFtZSI6ICJlbHNlIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiZWxzZSIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiZW51bSB7JDE6RW51bU5hbWV9IHtcblx0JDBcbn0iLAogICAgICAgICJuYW1lIjogImVudW0iLAogICAgICAgICJzY29wZSI6ICJ2YWxhIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJlbnVtIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJwdWJsaWMgZXJyb3Jkb21haW4gJHsxOkVycm9yfSB7XG5cdCQwXG59IiwKICAgICAgICAibmFtZSI6ICJlcnJvciBkb21haW4iLAogICAgICAgICJzY29wZSI6ICJ2YWxhIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJlcnJvcmRvbWFpbiIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiZm9yICgkMTskMjskMykge1xuXHQkMFxufSIsCiAgICAgICAgIm5hbWUiOiAiZm9yIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiZm9yIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJmb3JlYWNoICgkMSBpbiAkMikge1xuXHQkMFxufSIsCiAgICAgICAgIm5hbWUiOiAiZm9yZWFjaCIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogImZvcmVhY2giCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIkdlZS5BcnJheUxpc3Q8JHsxOkd9PigkMCk7IiwKICAgICAgICAibmFtZSI6ICJHZWUuQXJyYXlMaXN0IiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiQXJyYXlMaXN0IgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJHZWUuSGFzaE1hcDwkezE6S30sJHsyOlZ9PigkMCk7IiwKICAgICAgICAibmFtZSI6ICJHZWUuSGFzaE1hcCIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIkhhc2hNYXAiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIkdlZS5IYXNoU2V0PCR7MTpHfT4oJDApOyIsCiAgICAgICAgIm5hbWUiOiAiR2VlLkhhc2hTZXQiLAogICAgICAgICJzY29wZSI6ICJ2YWxhIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJIYXNoU2V0IgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJpZiAoJDEpIHtcblx0JDBcbn0iLAogICAgICAgICJuYW1lIjogImlmIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiaWYiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogImludGVyZmFjZSAkezE6SW50ZXJmYWNlTmFtZX17JDI6IDogU3VwZXJJbnRlcmZhY2V9IHtcblx0JDBcbn0iLAogICAgICAgICJuYW1lIjogImludGVyZmFjZSIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogImludGVyZmFjZSIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAicHVibGljIHN0YXRpYyBpbnQgbWFpbihzdHJpbmcgW10gYXJndikge1xuXHQkezB9XG5cdHJldHVybiAwO1xufSIsCiAgICAgICAgIm5hbWUiOiAiTWFpbiBmdW5jdGlvbiIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogIm1haW4iCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogIm5hbWVzcGFjZSAkMSB7XG5cdCQwXG59XG4iLAogICAgICAgICJuYW1lIjogIm5hbWVzcGFjZSAobnMpIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAibnMiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogInN0ZG91dC5wcmludGYoJDApOyIsCiAgICAgICAgIm5hbWUiOiAicHJpbnRmIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAicHJpbnRmIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICIkezE6cHVibGljfSAkezI6VHlwZX0gJHszOk5hbWV9IHtcblx0c2V0IHtcblx0XHQkMFxuXHR9XG5cdGdldCB7XG5cblx0fVxufSIsCiAgICAgICAgIm5hbWUiOiAicHJvcGVydHkgKHByb3ApIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAicHJvcCIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAiJHsxOnB1YmxpY30gJHsyOlR5cGV9ICR7MzpOYW1lfSB7XG5cdGdldCB7XG5cdFx0JDBcblx0fVxufSIsCiAgICAgICAgIm5hbWUiOiAicmVhZC1vbmx5IHByb3BlcnR5IChyb3Byb3ApIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAicm9wcm9wIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJAXCIkezE6XFwkdmFyfVwiIiwKICAgICAgICAibmFtZSI6ICJTdHJpbmcgdGVtcGxhdGUgKEApIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAiQCIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAic3RydWN0ICR7MTpTdHJ1Y3ROYW1lfSB7XG5cdCQwXG59IiwKICAgICAgICAibmFtZSI6ICJzdHJ1Y3QiLAogICAgICAgICJzY29wZSI6ICJ2YWxhIiwKICAgICAgICAidGFiVHJpZ2dlciI6ICJzdHJ1Y3QiCiAgICB9LAogICAgewogICAgICAgICJjb250ZW50IjogInN3aXRjaCAoJDEpIHtcblx0JDBcbn0iLAogICAgICAgICJuYW1lIjogInN3aXRjaCIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogInN3aXRjaCIKICAgIH0sCiAgICB7CiAgICAgICAgImNvbnRlbnQiOiAidHJ5IHtcblx0JDJcbn0gY2F0Y2ggKCR7MTpFcnJvcn0gZSkge1xuXHQkMFxufSIsCiAgICAgICAgIm5hbWUiOiAidHJ5L2NhdGNoIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAidHJ5IgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJcIlwiXCIkMFwiXCJcIjsiLAogICAgICAgICJuYW1lIjogIlZlcmJhdGltIHN0cmluZyAoXCJcIlwiKSIsCiAgICAgICAgInNjb3BlIjogInZhbGEiLAogICAgICAgICJ0YWJUcmlnZ2VyIjogInZlcmJhdGltIgogICAgfSwKICAgIHsKICAgICAgICAiY29udGVudCI6ICJ3aGlsZSAoJDEpIHtcblx0JDBcbn0iLAogICAgICAgICJuYW1lIjogIndoaWxlIiwKICAgICAgICAic2NvcGUiOiAidmFsYSIsCiAgICAgICAgInRhYlRyaWdnZXIiOiAid2hpbGUiCiAgICB9Cl07CmV4cG9ydHMuc2NvcGUgPSAiIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvdmFsYSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/vbscript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdmJzY3JpcHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJ2YnNjcmlwdCI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3Zic2NyaXB0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/velocity.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdmVsb2NpdHkiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPSAiIyBtYWNyb1xuXApzbmlwcGV0ICNtYWNyb1xuXAoJI21hY3JvICggJHsxOm1hY3JvTmFtZX0gJHsyOlxcJHZhcjEsIFtcXCR2YXIyLCAuLi5dfSApXG5cCgkJJHszOiMjIG1hY3JvIGNvZGV9XG5cCgkjZW5kXG5cCiMgZm9yZWFjaFxuXApzbmlwcGV0ICNmb3JlYWNoXG5cCgkjZm9yZWFjaCAoICR7MTpcXCRpdGVtfSBpbiAkezI6XFwkY29sbGVjdGlvbn0gKVxuXAoJCSR7MzojIyBmb3JlYWNoIGNvZGV9XG5cCgkjZW5kXG5cCiMgaWZcblwKc25pcHBldCAjaWZcblwKCSNpZiAoICR7MTp0cnVlfSApXG5cCgkJJHswfVxuXAoJI2VuZFxuXAojIGlmIC4uLiBlbHNlXG5cCnNuaXBwZXQgI2lmZVxuXAoJI2lmICggJHsxOnRydWV9IClcblwKCQkkezJ9XG5cCgkjZWxzZVxuXAoJCSR7MH1cblwKCSNlbmRcblwKI2ltcG9ydFxuXApzbmlwcGV0ICNpbXBvcnRcblwKCSNpbXBvcnQgKCBcIiR7MTpwYXRoL3RvL3ZlbG9jaXR5L2Zvcm1hdH1cIiApXG5cCiMgc2V0XG5cCnNuaXBwZXQgI3NldFxuXAoJI3NldCAoICQkezE6dmFyfSA9ICR7MH0gKVxuXAoiOwpleHBvcnRzLnNjb3BlID0gInZlbG9jaXR5IjsKZXhwb3J0cy5pbmNsdWRlU2NvcGVzID0gWyJodG1sIiwgImphdmFzY3JpcHQiLCAiY3NzIl07Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3ZlbG9jaXR5Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/verilog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdmVyaWxvZyIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInZlcmlsb2ciOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy92ZXJpbG9nIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/vhdl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdmhkbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInZoZGwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy92aGRsIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/visualforce.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvdmlzdWFsZm9yY2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMuc25pcHBldFRleHQgPXVuZGVmaW5lZDsKZXhwb3J0cy5zY29wZSA9ICJ2aXN1YWxmb3JjZSI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3Zpc3VhbGZvcmNlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/wollok.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvd29sbG9rIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gIiMjXG5cCiMjIEJhc2ljIEphdmEgcGFja2FnZXMgYW5kIGltcG9ydFxuXApzbmlwcGV0IGltXG5cCglpbXBvcnRcblwKc25pcHBldCB3LmxcblwKCXdvbGxvay5sYW5nXG5cCnNuaXBwZXQgdy5pXG5cCgl3b2xsb2subGliXG5cClxuXAojIyBDbGFzcyBhbmQgb2JqZWN0XG5cCnNuaXBwZXQgY2xcblwKCWNsYXNzICR7MTpgRmlsZW5hbWUoXCJcIiwgXCJ1bnRpdGxlZFwiKWB9ICR7Mn1cblwKc25pcHBldCBvYmpcblwKCW9iamVjdCAkezE6YEZpbGVuYW1lKFwiXCIsIFwidW50aXRsZWRcIilgfSAkezI6aW5oZXJpdHMgUGFyZW50fSR7M31cblwKc25pcHBldCB0ZVxuXAoJdGVzdCAkezE6YEZpbGVuYW1lKFwiXCIsIFwidW50aXRsZWRcIilgfVxuXApcblwKIyNcblwKIyMgRW5oYW5jZW1lbnRzXG5cCnNuaXBwZXQgaW5oXG5cCglpbmhlcml0c1xuXApcblwKIyNcblwKIyMgQ29tbWVudHNcblwKc25pcHBldCAvKlxuXAoJLypcblwKCSAqICR7MX1cblwKCSAqL1xuXApcblwKIyNcblwKIyMgQ29udHJvbCBTdGF0ZW1lbnRzXG5cCnNuaXBwZXQgZWxcblwKCWVsc2VcblwKc25pcHBldCBpZlxuXAoJaWYgKCR7MX0pICR7Mn1cblwKXG5cCiMjXG5cCiMjIENyZWF0ZSBhIE1ldGhvZFxuXApzbmlwcGV0IG1cblwKCW1ldGhvZCAkezE6bWV0aG9kfSgkezJ9KSAkezV9XG5cClxuXAojIyAgXG5cCiMjIFRlc3RzXG5cCnNuaXBwZXQgYXNcblwKCWFzc2VydC5lcXVhbHMoJHsxOmV4cGVjdGVkfSwgJHsyOmFjdHVhbH0pXG5cClxuXAojI1xuXAojIyBFeGNlcHRpb25zXG5cCnNuaXBwZXQgY2FcblwKCWNhdGNoICR7MTplfSA6ICgkezI6RXhjZXB0aW9ufSApICR7M31cblwKc25pcHBldCB0aHJcblwKCXRocm93XG5cCnNuaXBwZXQgdHJ5XG5cCgl0cnkge1xuXAoJCSR7M31cblwKCX0gY2F0Y2ggJHsxOmV9IDogJHsyOkV4Y2VwdGlvbn0ge1xuXAoJfVxuXApcblwKIyNcblwKIyMgSmF2YWRvY3NcblwKc25pcHBldCAvKipcblwKCS8qKlxuXAoJICogJHsxfVxuXAoJICovXG5cClxuXAojI1xuXAojIyBQcmludCBNZXRob2RzXG5cCnNuaXBwZXQgcHJpbnRcblwKCWNvbnNvbGUucHJpbnRsbihcIiR7MTpNZXNzYWdlfVwiKVxuXApcblwKIyNcblwKIyMgU2V0dGVyIGFuZCBHZXR0ZXIgTWV0aG9kc1xuXApzbmlwcGV0IHNldFxuXAoJbWV0aG9kIHNldCR7MTp9KCR7Mjp9KSB7XG5cCgkJJDEgPSAkMlxuXAoJfVxuXApzbmlwcGV0IGdldFxuXAoJbWV0aG9kIGdldCR7MTp9KCkge1xuXAoJCXJldHVybiAkezE6fTtcblwKCX1cblwKXG5cCiMjXG5cCiMjIFRlcm1pbmF0ZSBNZXRob2RzIG9yIExvb3BzXG5cCnNuaXBwZXQgcmVcblwKCXJldHVybiI7CmV4cG9ydHMuc2NvcGUgPSAid29sbG9rIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMvd29sbG9rIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMveG1sIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID11bmRlZmluZWQ7CmV4cG9ydHMuc2NvcGUgPSAieG1sIjsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2Uvc25pcHBldHMveG1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/xquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMveHF1ZXJ5IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnNuaXBwZXRUZXh0ID0gInNuaXBwZXQgZm9yXG5cCglmb3IgJCR7MTppdGVtfSBpbiAkezI6ZXhwcn1cblwKc25pcHBldCByZXR1cm5cblwKCXJldHVybiAkezE6ZXhwcn1cblwKc25pcHBldCBpbXBvcnRcblwKCWltcG9ydCBtb2R1bGUgbmFtZXNwYWNlICR7MTpuc30gPSBcIiR7MjpodHRwOi8vd3d3LmV4YW1wbGUuY29tL31cIjtcblwKc25pcHBldCBzb21lXG5cCglzb21lICQkezE6dmFybmFtZX0gaW4gJHsyOmV4cHJ9IHNhdGlzZmllcyAkezM6ZXhwcn1cblwKc25pcHBldCBldmVyeVxuXAoJZXZlcnkgJCR7MTp2YXJuYW1lfSBpbiAkezI6ZXhwcn0gc2F0aXNmaWVzICR7MzpleHByfVxuXApzbmlwcGV0IGlmXG5cCglpZigkezE6dHJ1ZX0pIHRoZW4gJHsyOmV4cHJ9IGVsc2UgJHszOnRydWV9XG5cCnNuaXBwZXQgc3dpdGNoXG5cCglzd2l0Y2goJHsxOlwiZm9vXCJ9KVxuXAoJY2FzZSAkezI6XCJmb29cIn1cblwKCXJldHVybiAkezM6dHJ1ZX1cblwKCWRlZmF1bHQgcmV0dXJuICR7NDpmYWxzZX1cblwKc25pcHBldCB0cnlcblwKCXRyeSB7ICR7MTpleHByfSB9IGNhdGNoICR7MjoqfSB7ICR7MzpleHByfSB9XG5cCnNuaXBwZXQgdHVtYmxpbmdcblwKCWZvciB0dW1ibGluZyB3aW5kb3cgJCR7MTp2YXJuYW1lfSBpbiAkezI6ZXhwcn1cblwKCXN0YXJ0IGF0ICQkezM6c3RhcnR9IHdoZW4gJHs0OmV4cHJ9XG5cCgllbmQgYXQgJCR7NTplbmR9IHdoZW4gJHs2OmV4cHJ9XG5cCglyZXR1cm4gJHs3OmV4cHJ9XG5cCnNuaXBwZXQgc2xpZGluZ1xuXAoJZm9yIHNsaWRpbmcgd2luZG93ICQkezE6dmFybmFtZX0gaW4gJHsyOmV4cHJ9XG5cCglzdGFydCBhdCAkJHszOnN0YXJ0fSB3aGVuICR7NDpleHByfVxuXAoJZW5kIGF0ICQkezU6ZW5kfSB3aGVuICR7NjpleHByfVxuXAoJcmV0dXJuICR7NzpleHByfVxuXApzbmlwcGV0IGxldFxuXAoJbGV0ICQkezE6dmFybmFtZX0gOj0gJHsyOmV4cHJ9XG5cCnNuaXBwZXQgZ3JvdXBcblwKCWdyb3VwIGJ5ICQkezE6dmFybmFtZX0gOj0gJHsyOmV4cHJ9XG5cCnNuaXBwZXQgb3JkZXJcblwKCW9yZGVyIGJ5ICR7MTpleHByfSAkezI6ZGVzY2VuZGluZ31cblwKc25pcHBldCBzdGFibGVcblwKCXN0YWJsZSBvcmRlciBieSAkezE6ZXhwcn1cblwKc25pcHBldCBjb3VudFxuXAoJY291bnQgJCR7MTp2YXJuYW1lfVxuXApzbmlwcGV0IG9yZGVyZWRcblwKCW9yZGVyZWQgeyAkezE6ZXhwcn0gfVxuXApzbmlwcGV0IHVub3JkZXJlZFxuXAoJdW5vcmRlcmVkIHsgJHsxOmV4cHJ9IH1cblwKc25pcHBldCB0cmVhdCBcblwKCXRyZWF0IGFzICR7MTpleHByfVxuXApzbmlwcGV0IGNhc3RhYmxlXG5cCgljYXN0YWJsZSBhcyAkezE6YXRvbWljVHlwZX1cblwKc25pcHBldCBjYXN0XG5cCgljYXN0IGFzICR7MTphdG9taWNUeXBlfVxuXApzbmlwcGV0IHR5cGVzd2l0Y2hcblwKCXR5cGVzd2l0Y2goJHsxOmV4cHJ9KVxuXAoJY2FzZSAkezI6dHlwZX0gIHJldHVybiAkezM6ZXhwcn1cblwKCWRlZmF1bHQgcmV0dXJuICR7NDpleHByfVxuXApzbmlwcGV0IHZhclxuXAoJZGVjbGFyZSB2YXJpYWJsZSAkJHsxOnZhcm5hbWV9IDo9ICR7MjpleHByfTtcblwKc25pcHBldCBmblxuXAoJZGVjbGFyZSBmdW5jdGlvbiAkezE6bnN9OiR7MjpuYW1lfSgpe1xuXAoJJHszOmV4cHJ9XG5cCgl9O1xuXApzbmlwcGV0IG1vZHVsZVxuXAoJbW9kdWxlIG5hbWVzcGFjZSAkezE6bnN9ID0gXCIkezI6aHR0cDovL3d3dy5leGFtcGxlLmNvbX1cIjtcblwKIjsKZXhwb3J0cy5zY29wZSA9ICJ4cXVlcnkiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy94cXVlcnkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/yaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMveWFtbCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gInlhbWwiOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS9zbmlwcGV0cy95YW1sIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/snippets/zeek.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2Uvc25pcHBldHMvemVlayIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5zbmlwcGV0VGV4dCA9dW5kZWZpbmVkOwpleHBvcnRzLnNjb3BlID0gIiI7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3NuaXBwZXRzL3plZWsiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ace/themes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-ambiance.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvYW1iaWFuY2UiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtYW1iaWFuY2UiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1hbWJpYW5jZSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjM2QzZDNkO1wKYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KGxlZnQsICMzRDNEM0QsICMzMzMpO1wKYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1wKYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzRkNGQ0ZDtcCnRleHQtc2hhZG93OiAwcHggMXB4IDFweCAjNGQ0ZDRkO1wKY29sb3I6ICMyMjI7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfZ3V0dGVyLWxheWVyIHtcCmJhY2tncm91bmQ6IHJlcGVhdCBsZWZ0IHRvcDtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogIzNGM0YzRjtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9mb2xkLXdpZGdldCB7XAp0ZXh0LWFsaWduOiBjZW50ZXI7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfZm9sZC13aWRnZXQ6aG92ZXIge1wKY29sb3I6ICM3Nzc7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfZm9sZC13aWRnZXQuYWNlX3N0YXJ0LFwKLmFjZS1hbWJpYW5jZSAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9lbmQsXAouYWNlLWFtYmlhbmNlIC5hY2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZHtcCmJhY2tncm91bmQ6IG5vbmU7XApib3JkZXI6IG5vbmU7XApib3gtc2hhZG93OiBub25lO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9zdGFydDphZnRlciB7XApjb250ZW50OiAn4pa+J1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9lbmQ6YWZ0ZXIge1wKY29udGVudDogJ+KWtCdcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9mb2xkLXdpZGdldC5hY2VfY2xvc2VkOmFmdGVyIHtcCmNvbnRlbnQ6ICfigKMnXAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfcHJpbnQtbWFyZ2luIHtcCmJvcmRlci1sZWZ0OiAxcHggZG90dGVkICMyRDJEMkQ7XApyaWdodDogMDtcCmJhY2tncm91bmQ6ICMyNjI2MjY7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2Vfc2Nyb2xsZXIge1wKLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCBibGFjaztcCi1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggYmxhY2s7XAotby1ib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCBibGFjaztcCmJveC1zaGFkb3c6IGluc2V0IDAgMCAxMHB4IGJsYWNrO1wKfVwKLmFjZS1hbWJpYW5jZSB7XApjb2xvcjogI0U2RTFEQztcCmJhY2tncm91bmQtY29sb3I6ICMyMDIwMjA7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfY3Vyc29yIHtcCmJvcmRlci1sZWZ0OiAxcHggc29saWQgIzc5OTFFODtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9vdmVyd3JpdGUtY3Vyc29ycyAuYWNlX2N1cnNvciB7XApib3JkZXI6IDFweCBzb2xpZCAjRkZFMzAwO1wKYmFja2dyb3VuZDogIzc2NkIxMztcCn1cCi5hY2UtYW1iaWFuY2Uubm9ybWFsLW1vZGUgLmFjZV9jdXJzb3ItbGF5ZXIge1wKei1pbmRleDogMDtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiYSgyMjEsIDI0MCwgMjU1LCAwLjIwKTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlci1yYWRpdXM6IDRweDtcCmJvcmRlcjogOHB4IHNvbGlkICMzZjQ3NWQ7XApib3gtc2hhZG93OiAwIDAgNHB4IGJsYWNrO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMxKTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9pbnZpc2libGUge1wKY29sb3I6ICMzMzM7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfcGFyZW4ge1wKY29sb3I6ICMyNEMyQzc7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2Vfa2V5d29yZCB7XApjb2xvcjogI2NkYTg2OTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XApjb2xvcjogI2ZhOGQ2YTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9wdW5jdHVhdGlvbi5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6ICNmYThkNmE7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfaWRlbnRpZmllciB7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2Utc3RhdGVtZW50IHtcCmNvbG9yOiAjY2RhODY5O1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiAjQ0Y3RUE5O1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogI0NGN0VBOTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6ICM3OENGOEE7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfaW52YWxpZCB7XAp0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9pbnZhbGlkLmFjZV9pbGxlZ2FsIHtcCmNvbG9yOiNGOEY4Rjg7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDg2LCA0NSwgODYsIDAuNzUpO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX2ludmFsaWQsXAouYWNlLWFtYmlhbmNlIC5hY2VfZGVwcmVjYXRlZCB7XAp0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCmNvbG9yOiAjRDJBOEExO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX3N1cHBvcnQge1wKY29sb3I6ICM5Qjg1OUQ7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6ICNEQUQwODU7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfZnVuY3Rpb24uYWNlX2J1aWxkaW4ge1wKY29sb3I6ICM5Yjg1OWQ7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjOGY5ZDZhO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHtcCmNvbG9yOiAjREFEMDg1O1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX2NvbW1lbnQge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICM1NTU7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfY29tbWVudC5hY2VfZG9jIHtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7XApjb2xvcjogIzY2NjtcCmZvbnQtc3R5bGU6IG5vcm1hbDtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9kZWZpbml0aW9uLFwKLmFjZS1hbWJpYW5jZSAuYWNlX3R5cGUge1wKY29sb3I6ICNhYWM2ZTM7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICM5OTk5Y2M7XAp9XAouYWNlLWFtYmlhbmNlIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjOWI4NTlkO1wKfVwKLmFjZS1hbWJpYW5jZSAuYWNlX3htbC1wZSB7XApjb2xvcjogIzQ5NDk0OTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9ndXR0ZXItbGF5ZXIsXAouYWNlLWFtYmlhbmNlIC5hY2VfdGV4dC1sYXllciB7XApiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU1nQUFBRElDQVFBQUFBSFVXWVZBQUJGRlVsRVFWUVlHYnpCQ2VEVlUvNzQvNmZqOUhJY3gvRlJIeDlKQ0Ztek15R1JVUmhMWklrVXNvZVJmVWpTMkZORHRyNldrTWhPOXNtK1M4bWFKZnUrSmNzZysvby9jK1o0ei90OTcvdmV6eTN6K3o4ZWtHbG5ZSUNHL283Z2RrK3dtU0haMXo0cEpJdHFhcGpvS1hXYWhtOE5tVjZlT1RiV1VPcDYvNmEvWElnNkdRcW1lbkoybERIeXZDRloyY0JEYm10SEEwNDNWRmhId1h4Q2xXbWVZQWRMaFYwMEJkODVnbzhWbWFGQ2tiVmt6bFFFTnpmQkRaNWd0TjdId0YwS0RyVHdKMGR5cFNPenBhS0NNd1FIS1RJcmVZSXhsbWhYVHpUV2tWbStMVHluWmhpU0JUM1JaUTdhR2ZqR0VkM3F5WFExRkR5bXFiS3hwc3BFUlFOMk1pUmpOWmxGRlFYZkNORm05bk0xenBBc29Zam10UlRjNWFqd3VhWGM1eHJXc2tUOTdSYUt6QUdlNUFSSGhWVXNEYmpLa2x6aWlYNVdST2NKd1NOQ05JKzl3MUp3djRaYjJyN2xDTVo0b3E1QzBFZFR4KzJHek51S3BKK2lGZjM4SkVXa0hKbjlETkY3bW1CRElUcldFZzBWV0wzcEhVMjB0U1pudXFXdStSM0J0WWE4WHhWMUhPN0d5RDMyVWtPcEwveURsb0lORlRtdnRJZCtubUFqeFJ3NDBWTXdWS2l3cktMRTRiSzVVT1ZudFl3aE9jU1NYS3JKSEtQSmVkb2NwR2pWei9aTUlibllVUEIxMC9lS0NyczVhcHFwZ1ZtV3pCWVdwbXRLSGVjSlBqYVV1RWdSRERhVTBvWmdoQ0o2ek5NUTVaaERZeDA1cjV2Mm11UWRNMEVJTHRYVXNhS2lRWDlXTUVVb3RhZ1F6RmJVTk42TlVQQzJubTVweEVXR0NqTWMzR2RKSGpTVTJrT1JMSy9KR1Nya2ZHRUlqbmNVL0NZVW5PaXBvWWVtd2o4dFNUOU5zSm1CN1RVVlh0YlV0WEFUSlZaWEJNdlllVFhKZm9iZ0pVUG1HTVAveUZhV29uYWE2QmNGTzNucWNJcUNvelNab1pvU3IxZzR6Sk96dXlHbnhURVgzbFVFSjdXY1pnbWU4ZGRhV3ZXSm8yQUpSOURaVTNDVUliaENTRzZ5YlN3TjZxdEpWbkNVMnN2RFRQMlpJbk93MmNCVHJxdFFhaHROWm45TmNKNGwyTmFTbVNra1Axbm9aV25Wd2tMbWRVUE93TFpFd3kyWjNTM1IrNHJJRzloY2JwUFhIRlZXY1FkWmtuMkZPdGEzY0tXUW5OUkM1ZzFMc0phaDRHQ3pTVnNLbkNPWTVPQUZSVEJla3l5cnlleWlsaEZLdmE3NXI0TWMwYVdhbkdFYVRoY3kzMXM0MzlLS3hUekpZWTVXVEhQVTFGdElIalFVM09pcDR4bE56ai9sQncyM2RZWlZsaVFhN1dBWGY0c2hldGNRZmF0SStqV1JEQlBteU5lVzZBMVA1a2REZ3lZSmxiYTBCSU04Qlp1MUpmckZ3SXR5amNBTVIzSzBCV09JcnRNRVh5aHlybFZFeDN1aTVkVUJqbUIvUTNDWFc4NVI0bUJEMHM3Qis0cTV0S1VqT2xiOXFxbWhpNUFaNkdGSUM1SFh0T29iZFlHbFZkTVZiTko4dG9OVEZjSHhub0wrbXVCYWdjY3RqV25iTk11UjAwdUk3blFFU3dnNXEycXFyS1dJZnJOVW1lUW9jWTZIdXl4SlYwMndqMzZ3MDB5aHBtVUZlbnY0cDZmVWtaWXFMeXVpbngyUkdPamhDWFl5SkY4NG9pVTAwWU1PT2hocXVOZGZiT0I3Z1U4OHBZNHhKTzhMVmRwNi9xMnZvZUI0UjA0dklkaFNFNDB4Wk9ieDFIR0dKL2phMExCdGhGSW5LYUxQUEZ6dUNhWWFvajhKalBNRTh5b3l4bzZ6bEJxa2lVWllncTAwT1lNc3diV081TkdtcSt4aGlweEhMUlcyOUFSak5LWE8wd1JuZWFyOFhTZzRYRlBMS0VQVVMxR3F2eUx3aXVCVW9hN3pwWjBsNXh4RndXbVdaQzFINWg1RndVOGVRN0srZzhVY1ZZNlRNUXJlVlFULzh1UThaK0FMSVhuU0VhMnBZWlFuZUU5UlpiU0JOWVhmV1lKelcvaC80ajREcDF0WVZjRklDNTAxOVZ5aTRUaFBxU0ZDempHV2FIUVRCVThxNnZyVndneFA5TGttODQwaW1XS3BjTENqWVR0ckt1d3ZzS1NucnZIQ1hHa1NNazlwNmxoY2tmUnBJZWlzK04yUGlzelQrbUZMc3B5R2xlVWhEd2NMclpxbXlleWx4d2pCY0tIRWFwcWtteWFuZ3lMWlJWT2lqd090Q1k1U3NHNXpMME93bENKNHk1S3puRjNFVU5ERHJpbndpeUxaUnpPWHRsQmJLNUlUSEZHTHA4UTBSNmFiNm1TN2VuSTJjRnJ4T3lIdk9DRmFUMUhUaFMxa3JqQ3dxV2V1ckNrayt3aWxsaENDK1JTWm5SWEJpWmFDNVJYUklaWUtwMmx5ZnJId2lLUEtSMEpEenJkVTJFRmdwaWRhd2xGRFI2RmdYVU1OYStnMUZZM2JVUWgyY0xDd29zUmRudVFUUy9TK0pWckdMZVdJdnRRVXZPTkp4bHFTUVlZS3B3b04ya2FvY0xqZFZzaXM0TWs4MEVTRjJZcFNrendsZGpIa2pGQ1V1dEkvcitFSERVOG9DczZ5ekwzUGhXaUVvb1pkRk1reW1sYXM0QWNJM0ttb01NTlNRM3RIempHV0NyY0pKZFl5WkM3UUZHd2pSTDlwK01yUmtBR1d6SWFXQ245VzBGM1RzSzAxYzJadlF3MGJ5dnh1UVUwcjFsTTBxSk83d1cwa1JJTWREVHRYRWR6aTRWSWgrRW9JSG0wbVd0QXRwQ2l4bGFiZ244M2ZLVEk3YW5KZTlTVDdXSUsxRE1HcFFtWWVBNThJbVY2ZXpPR096SzJLZ3EwMXBkNjBjS1dpVWk5TGlldmIvMHZJRFBIUTA1S3p0NGRkUGNrUUJRdG9hdXJqeUhuZWsvbkt6cFFMclZnS1BqSWtoMnY0dXllenB2K1hvbzdmUEZYYUdGcDF2YUxLeFE0dVVwUVFTNVZ1UXM3QkNxNHhSSnY3ZndwVnZ2RkVCM2orNjIwaGFPdW9jcU1oV2Q2VFRQQUV4K21kRk5HSGRyYW5GZTk1V3JXbUl2bFk0RjFEbGUyRUNnYzZjdG83U3J5dXFHR0doYTB0RlE1VjUzbWlnVUttZzZYS0FvNHFTM21payswT1pwQWhPTGVaS2ljYWNnYVljeXg1aHlwWVFFMDJaQTR4aS9wTmhPUXhSNGtsTkt5cWFjaittcHhuTFRubkdTbzg1KyszWkNacTZsclprWGxHRVgzbytDOUZpZWNjSmJaV1ZGakMwWW8xRlpuSmhvWU1Gb0kxaEVaOXI2aHdnNzVId3pCTmhiWkNkSkVmSndUUEd6SnZhS0ltdzF5WVgxSERBbXBYUitaSlEvU21ncU1OVlFiNXZnYW1Hd0x0dDdWd3ZQN1FrMXhwaU01eDVDeXY5M0UwNk1abWdzME55YTJheklLT1lLQ0dCUVFXOTdSbWhLTktGMDJKWnFIRUo0bzU4cXA3WDVFY1ptYzU2dHJYRXF6akNCWjFNRkdSODdRbDJ0U1RzNkNHeFMwNVBUelJRb3JrYnc3YUtvS1hGRFhzWVc0MlZKaWgvcStGUDJCZFR6RFR3VnFPWUIxM2xpTTUwdkc3d3kyOHFhZ3l1SVhNZVFJL09xcThiY241d0pJNTB4SDAwQ1JudHlmcEwxVDRoeWRZcG9YZ05pRnpvSVVURFpuTE5Semg0VEJId2JZR0R2Wmt4bWx5SmxveXI2dFJpaHBlVUc5NEduS3RJem5SRUYwdHpKRy9PT3I3M0pCY3JTaDFrNld1VHByZ0xVK21uU0dudjZaZ2UwTk56K2tURGRIOG51QXVUZEpEQ05iMjFMQ2lJdXFsWWJxR3pUM1JBb1pvZlFmakZhemtxZU5XZFlhR3ZZVE0wMDFFVzJvS1B2VmsxbGRVR1NnVXRIRndqS00xaDlqbkZjbXk1bENob0xOYVFNR0dEc1liS2l4bGFNQm1tc3gxUWpDZmZsd1RmTy9nY2tXMHJ1WjNqdWdLUjNSNVc5aEdVV3FDZ3h1RmdzdWFDSG9yb3RHS3pHYWVaQjlETXNhVG5LQ3BNdHdUdk96aFlrMHJkckFyS0NxY2FXbVZrMStGMzcydXIxWWtLeGdhdEk4UWZlMWdJWDl3RTlGZ1M4RVNtdUFCSVhuUlViQ2FwY0tlK25PN3NsQ2xTWkZ6cFYvTGtMbmNFYjFxaU80MmZTM1I4NTVTdTJtQ0xoNjJ0MVNZWlpZVm1Ld0lIalJFRjJ1aWhUekIyMEpPa3o3ZGt4ellRbkswVU9VNDk0d2grVldSYzZVbjJrcFRhVmdMREZFa0ovdWh6UmNJMFlLR2dwR1dPbG9jQlUvYTRmS29KL3BFYU5WNmppcDMrRXM5VlhZMDc4ckdubUFkZjd0OXlsUFhTMzRSQlN1WVBzMVVlY1pUVTc4V2FuaEJDSHBaNXNBb1R6MExHWktqUGY5VFJ5cHFXRWlUdk9GZ2xMMWZDRVkzd1kvKytyYms3QzhiV2ViQTZwNm9tNlBnT0wya3A0NFRGSmxWTkJYYWUycnFxZFp6dE9KcFQ4N0dRc0U5anFDUEllOVZSZVp1US9DSWdhY3N5WmRDcElTY1NZcWNaazhyK25zeUN6aHlmaE9xSEdPSXZyTGtuQzh3VHBGY2FZaUdDL1JVMU5SYlVlVXBvY1FPbmtScEdPcklPY05SeCsxdUEwVXJ6aFNTdCtWeVMzU0pwbkZXa3pORHFPRkdJV2NmUjg2RG5tQVJUUTFIS0lMMzNFeFBpZW1lT2hZU1NqemxTVVpadUU0VHZlb0pMbkJVT0ZvZjZLaXlzQ2JuQUVjWmdjVU5URE93a3FXdTNSV3RtR3Bad2xIaEpFTmRaM21pR3owbEpsc0tuamJ3cVNIUWpweG5GRGxUTEx3cUpQTVpNamQ3S3J6a1NHN1ZzeFhCWkUrRjhZWmtiMDFPZTAweXlSSzlwc2g1U1loMjl5U1BLQm8yeWxOaHQ3WmtabnNLZW5qS05KdTlQTkV5WnBhQ0h2NEt0NlJRc0x2QVZwN005a0lpbW1DVXdHZVdxTE1tR3VJb3RZTW1XTnBTYWhraFp3OUZxWnNWbktKaHNqQUh2dEhNc1RNOWZDSTA2RHgvdTN2ZlVYQ3Fmc0tSYzRvRlkyak1zb28vN0RKRHdaMUNzSUtuSnUrSjlsZGtwbWlDeFF4MXJXakkrVDlGd2NXV3pPdWFZSDBIajdrbE5SVldFUXBtYXFvc2FraUdOVEZIZGpTL3FuVWRtZjBOSlc1eHNMMEhoaW1DQ1paU1J6bVNQVFhKUTRhYXp0QXd0Wm5vYWJlYkoraHRDYVo3Q201MzVCeW9xWEtiWDFXUmM0RWgyTWtSWFd6SW1WYzk2Q2o0VmRPS1Z4Ujg0VmRRc0lVTThQc29vdTJieVZIeVpGdXE3TzhvdGJTUTJVQW9lRVdUdWRBVExHU3BaelZMbFhWa1BVMkpjKzI3bHN3MmptZzVUNVZoYmVFM0JUMDgzSzlXc1RUa0ZVL09zaTByQzVsUmxwd1JIVWllc05TMHNPdm1xR01MMWFSYlBBeFRKRDlaS3R4dW9iK2hobDhjd1lHV3BKOG51Yjd0NXA2Y29ZYk1vdloxQlRkYUtuMWpZRDZoNEdGRE5GeVQvS3FlMVhDWHBoWEhPS0xabXVSU1JkQlBFZlZVWFF6Sm01WUdQR0dKZHZBRXI3aEhOZEdabnVCdnJwY2lHbW9wT0xmNU4wdVZNeTBGZllUb0prOTB1VUNiSnVwYVZwTzUzVUpYUjJiVnBvVTAwVjJLT280ek1GckJkMEp0ejJwYTBjbFQ1UTVMOElwUTE3N21XUWVqUE1FSmh1UWpTMTByZWY2SEhqZEVoeTFQMUVZUjdHdE8wdVNzS0pRWUxpVG5HMXJWU2NqNWx5YXpwcVdHbDV1QmJSV2w3bTZpeEdPT25Fc01KUjd6OEowbjZLTW5DZHhoaU5ZUUNvWjZDbVlMbk84b21DM01rVzNia3RsUG1FdC9WUVFIZWpMMytkT0U1RmxQZEsvTXE4aFp4eEp0THlScmVwTFRoWUtiTFp4a1NiNVc1MnZZeE5PYU94VUYweXhNVVB3QlRZcUN6eTAxWGF5WUswc0p5V0JMcVgwTXdVNUN6b3ltUnpWMEVqamVVZUxnRHBUbzZpajQyWkF6dkQwMWRIVVVUUExVOTZNZExiQk1FOG5GQm43ekpDTXRKY1pva244WW9xVTBGUzVXRkt5bmlIb2JndU1jbVc4TjBYa1daamt5TjNocU9NdFMwOHIrL3hUQndwWlNaM3FpVlJYOFN6TUhIamZVTkZqZ0hFUG1ZOVBMM3lrRXp4a1NyZS8xWkQ2ei9OdXpudUIwUmNFMVRXVG05elJnZlVXVkppRzZ5cnpnbVdQWEM4RUFSNFd4aGxhZDBaYmdReUV6M3BHNVJWRXd3REpIMm1nS3BqY1RpQ096bjFsZlVXQU5GYloyQkE4YmFsbkV3ZUpDOUowaXVhZVpvSStpcHBGQ3p0RUtWdmNrUjJpaWNlMUp2aFZ5dHJRd1VBWnBnc3ViQ1BhVTd4VWU5dlduYU9wYVNCRXNwYWx5a2hDOWJVbE9NcFQ0MlpIY2E2aHlycUttdy93TVI4SDVabWRGb0JWSmIwM080VUwwdFNObnZJZVJta3JMV3Fyczc4Z2NyRW4ydHBjYm9oMFVQT1czVVVSOVBNazRUNG5uTktXbUNqbHJlZmhDd3hSTnp0Zm1JUVZkREVsdlM0bTEvV3VPdWpvWkNzNVhWT2p0S1BHb2tKenNZQ3RGWW9Xb25TUFQyMURoZVUvd1doTTE5RmNFbHdxTkdPc3A5UThOL2N3WGFpTkQxTW1lTDFRNVhST3RZWWdHZUZxMWFUTXNvTW1jcktqUXJPRlFUUTFmbUJZaG1XNm84SmtqYzdpREpSVEJJbzVrZ0pENXlNRVlBM3NyQ2c3VkZLd2lWSmttUkNjNW9oR09LaHNZTW4vWEJMZG81dGFaamxiOVlBbEdXUmltcWJDc29ZN0hGQVhMYTVJMUhQUnhNTXNRREhGa1d0Uk5uaXFUOVVFZU5qY0U3UlVsckNKNFIyQ1NKdXFsS0hXdkpYakFVTmNJVFlrZW51QlJCODRUYmVlcGNxVGozelp5Rkp6Z1lRZEhucWZnSTBkZFV3UzZHcVdwc0tXaGpxOWNWMHZCQUVNTjJ6bnErRUJmSVdUK3BDbFl3NXhzVGxKVTZHZUlCc2pHbW1BTlR6SlppSVlwZ3JNME9hOFpNamQ3TlA4N2p4aHFHT2hKbG5RdGp1UXBCKzhhRUUwMHdaRnpuU0pQeUh4Z0gzSGtQT3NKRnZZazh6cUNIelRzMUJZT2E0SjNQRlUrVVZSWnhsSERNNFlhdmxOVXVNb1J2ZWlaQTJkN2dyTU5jMmcrUmJTQ0VLem1nWXNVbVdtYXpGSnlvaU9aNEtueWhLT0dSeldKYTArbW95VjRUVkhEem41MUF3dHFhcGhmay9sUlEwOEZYMWlpcXhUQi9rTHdkMFZ5bktmRXZJNmNkNFhNVjViTWhaN2daVVdWellRNk5tMkJZenhKYnczYkd0aEVVVU1mZ2JHZW9yYWU2RHhIdEpvWjZhbGhaMCt5dGlWb0sxUjR6NVBUck9FQ1QvU3Vnc2VFT2xiMU1NTlI0VlJOY0p5K1YxSGc5T05DbFNaRlpqZEhsYzZXNkZCTGRKamEyTUM1aGhwdTBEQllFWTFURkd3aUZBeFJSQ3NZa2lNOUpSYjBKTk1Wa1c2Q1pZVC8yRWlUR1dtbzhrK2g0RmhETkU3QnZwcG9UU0ZubUNWNXhaS3p2Y0NkRG83VlZQbklVK0krUmM2OGp1QXBDOTBNd2NGQ3NKNWhEcXhnU2NZS3JlcnV5UXdUcXJ6b3FEQ21oV2k0SWJoQjBZcnQzUkdhNkdmRHY1MnJLWFdoaDI4ZHlaYVdVdmNaZU1UQmFab1NHeWlDdFJVNUo4aXZpaW9IYUVyczdKa2o2MXN5VnpUVGdPY1VPUThidUZCVFlXZEw1ZzNUNHFscGUwK3d2RDYzaGVBWFJmQ0NJZWQ5UmJDc3AyQ2lJN3JhVU9ZT1RVMTNOOFBOSHZwYUd2YXlvNGEzTExUMWxEclZFUFQyekxVbGhlQjFSK1pUUmZLV0orZGNvY0xKZmkxMXZ5SjUxbExxSjBXRDd0UndyeWV6amlWNVcyOHVKTzlxeWt6WDhKRGUybEhsLzlveUJ3YTJVTWZPbmdwWENpeHZLZFhUazN3cnNLbWlWWWRaSXFzb1dFRVJqYmNVTkR1aWFRb21Hb0liRmRFSG1zeVdudVIrSWVyaUtEVkxubGF3bHlOSEt3S2xTVTYzMVBLZXA4SjRRK2F5amtTTEtZTGhhbE5IbFl2dHRiNmZIbTBwNk9BcHNaNGwyVmZkcVpranV5c3k2eXNLTGxja2YxS1V1dENUczM5Ym1DZ0V5eW9hc0lXbFZhTUY3bWdtV3RCVDhLb2w1eHBIOUlHbGxvOGNKZG9wY3ZaMnNJbWxEbU1JYnREazNLSXBlTmlTMDhsUXcxMU5GUFR3VkZsUFA2cEoyZ3ZSZkk3Z1FVZm1OQXRmNkdzMHdReERzS0dsVkJkRjhyQ2Ezanpkd01hR0hPc0l0clprN2hBeU96cEs5VlMwNmo1RjQ5YjBWTkdPT2ZLczNsRFRvTXNNQmU5Wld0SEZFZ3hUSkxzN3FyeWdLWmpVbm1DWW9lQXFlVTZqcVd1TEp1cDRXZ2hPZHZDWUpuclNrU3pveVJrbTVNMlN0UXdWbHRQa2ZDQWs1OHRFVC9DU2crOE1VZWNtb3RNRW5oQktmV0JJWnNnMmlocnVNSlFhb0ltK3RrVExLRXFzcE1oMDB3OTVndkZDUVJ0RHdUVDFnVkREU0VWZGx3cVpmeG9RUmJLMGcrdGJpQlp4ektscG5weXBlamREd1RhZU92b3JNay9JSkUxMGg5Q3FSZTI4aGhMYmUwcE1zZFN3djRaYmhLaXZvMkJqRFdmTDhVS0pnZWF2d2x3YjVLbHdoeUU0dTRYa0dFMnl0WkN6bktMQ0RaWnE0MlZ6VDhITENycHJ1RmJJZk9JSU5taC9xQ2RaMVpCYzY1a0xIUjFCa3lmNXpuNnBOM1N2R0tJbEZOR3BsaHJPOVFTWGFuTE9NUVRMQ2EwWUpDUnJDWm0vQ1ptckxUbTdXekNLNEdKRGlXVWRGZVl4MUxDRmczTk1kMFhtQ3VGM1k1cklUTERVc1lTOXpvSFZ6d25Kb1lwU1RRb09ieUV6cjRjRkJOcVlUb3BvYVUvd2t5TFoybFBoWC81WTk1dWx4R1RWN0tqaFdyT1pnbDhNeVVVYWZqWXJhTmpOVTFOM0lXY2pUNVd6V3Fqd3RvYXJIU1VPYkdZTzNHQ0pacHNCbG5KR1BkNlpZTHlsMUdkQ0EyNjI1SXd3SkRQOEdVS3ltYnp1eVBsWmx2VFVzYVVoNXpGRGhSV0Z6UEtLWkxBbFdkY1FiT2JnRjl0T3FPc21CMWRxY3FZSm1Xc3RGYlpSUkk5cG9vbG1xaUxuVTBQT3Z4U2NwYWgyaVNMNVVKTnpnU2NZNStBdUlicE8wWUQzTkNXK2RMTXN6RlNkRkNXR3FHNmVWcTJ1WVZORGRJQ0dENlc3RVBSV1pFWTVncHNFOXJVa1MzbWlqenpKbm02VXBVRlhHMWhDVWVWb1M1V2ZOY0ZwYmxFTEwycXFyQ3ZNdlJmZDQ1b2FsdktVMnRpUTZlUEpPVk1SWGFzZTlpVHRMSnp0UHhKS0xXcG8yQ1JEY0p3bjJzV1NMS0lPMVdRV05UQ3ZwVlV2T1poZ1NDNDBKRDBkT2N0YVNxemtDUmJYc0tsYjExT2lwNlBDSjBJd1NKTTMxajNha1J4bFA3UnduNmFHYVVMMHFpTG5Ka3ZCM3hXWjIrUTFUZkN3cFFIM0cwbzkyVXptWDRvL29KTlFNTVNRYzU0N3dWSGhkaytWQ3cwMURGWUVuVHh6WktBbTc0UW1lTk5SMXc2V3pFaE5LMTVWSnp1Q2R4UTUzZFJVRHdzNUt2d2dCTU9FZ3BjVk5lMGhaSTZSWFQxSmQwY3lqNW5zYUVBSGdWbUdhSklsV2RzYzVVaTJFbHJSUjZqclJBdHROTUVBSVdyVERGdWJrWmFvazcvQWt6Zkl3ZnVXVnEwakh6dUNLNFFhYnRMVU1WUEIza0owb3lIVFNWRmxxTUFMaWxKZjJSZjhrNWFhSHRNZmF5b2NMQlM4TDg5b0tveHBKdm5Ba0RQYTBxcDVEQVVUSEtXbUNjbnRobG91OGlDS2FGRkxIV2NJTmQxbnlJd1hxclN4TU5tU3M2S21vTDJRckt1V3RsUTVWMDEyMHhRNXZSeVpTMXJnRmtXd2hpT3dpdVFiUjBPT1ZoUU05aVMzdGlYcDRSYXdSUE1wNXREbGV0T09CTDk1TXBNMDFkWlRCTTlwa241cUYwMTBySWVIRmNGWmhtU0dwWXBUc0k2bndocWU1Qzl5bmhscHA1b3BodVJiNldjSkZsZGtWblZFd3d4VmZyVmt2bldVdU5MQ2c1Ymdib0ZIUERsRFBEbW5LN2hVcldpSWJqYWREY2x1amxaY2Fva09GdXA0Umkxa2FjVjZqbXJySzFoTjliR3dwS0VCUTRRNkR2SVVYT21vNlU1THFRTTZFUHlpS05qVmtQbkprRFBORWF4aGlGYXk1RXhXMU5YVlVHcWNwWVlkUGNHaUNxN3ovVFNsYmhMNHBwbFdYS2Q3TlpPNVFRRnJlZmhSUVcvTkhPc3FjSWdsYzRVaFdrbFI4SzBRemJBdzA4Q0JEbnBiZ3FYZGVEL1FVc000UlpYREZCVzZXSktlL21GUGRIMEx0QmdpcTU3d0ZMemx5UXp6ODJxWXg1RDVXSlA1eVZKRFcwMUJmeUhuUzZIS08vcmVacUlkMVdHYTRIa2gya1dvZEo4aTZLb0lQbEFqMmhQdDc2Q3pYc1ZSNmtvUFJ6V1RmS3FJZW50YXRZcFF3Mm1lNEFBM3kxS2luZDNTd29PS1pEY0ZYVHdsOXRXVTZtZmdSazlkNzFzS3RsTndyam5ZdzV0QzVuNUxkS2lHcnkzSktObEhFZDNvYU1DRkhyYXpCUE1wL3VOSitWN0l1ZGNTYmVPSWRqVUVkd2wwVkhDT1pvNXQ2WWx1RXVhQzltUWVNZ1NmT3lLbllHRkhjSWVRODR5UVdidUpZSnBadzVDemdsREg3Z0tuV3FxTTlaVGFYY04wVGVZaFI4NGVRdEpUNzZKSjFsUkVlN1dubnZzTW1SYzlGUTdTQkJNOW1WM2xDVWRtSGsvUzJSQU10MFFqRk5GcVFwV2pEUFEwMURYV1VkREJrWHppS1BqR0VQM1ZQK3pJV1UydDdpbTQxRk9sb3lXem4vTDZka1V5M1ZMRGFaNmFwcGdETEhQakpFc3l2Sm5nV0VQVXlWQmlBYUhDVEVYd3JMdlNFYlYxZTFnS0puaWljV29yQzFNVXJWakIzdURoSkUvd2dTT3prMURYcGswazczcUNNOHh3MlV2RDVrSm1EVWZPb21xTXBXQ2tKUmx2S1hHbW9lQm0xOFVTalZJazA0U0NseFRCNllyZ0xBUExXWUs5SExVdDVjbWMwdllFUzhHblRlUmM2c2taYlFrV2R4UnNJY3lCUnp4MURiVGs5RmJVMGNhVFBPZ0pIaEpLbk9HSVZoUXF2S21vMGxsUnc5c2FiclprRHRkZzNQcWFLaTlvYXRqWThCK0czNzFwYU1nNittWkZOTnRRMDRtV0JxM3JZTE9tdFdXUXA4S0pucHk5RGRGZW5zeWpkcVoreVk0MFZKbEg4d2NkTHpDOFBabnZITUZVVFpVckRUa0x5UWFHdXM1WDVMenBZQWYzaStlL1psaHFHcVdoaDZPdTZ4VFI5WjZvaTVBWlp0cDdNajJFRW04b1NweGlZWkNIVS8xZmJHZE5OTlJSb1pNaG1pbEViMmdxSE9FSkR0WGtISy9Kbkc2SXJ2YlBDd1YzTmhPTlZkUzF0aEJNczFUNFFPQmNUV2EySXpoTWsyblc1S3luOXRYVXRwdjlSc0cybXN4aytac1F6UlFhY0puY3Bna2UwK1Q4eTVGemo4QmlHbzdYbEpqYVRJbHBRczdLRmpwcUduS3VveUVQZUlLbkZNa1pIdm9wZ2g4MXlTeE5GV3ZKV2NLUnM3MGoyRk9UMDEySWxsRUVPMW40cEQxNTEzWWcyc3NRUE9UaE9rdnlycUhVZEVYT1NFc2lobUJiVGJLWDFrTEJQV3FXa0xPcUpiakIzR0JJWm1vYThxV2w0Q0cvaVo3b2lBNzJaTDdUSk5lWlVZN2tGUWZ0RGNISGx1QnpSYkNlZ3pNdHJSalZRcFgybGdvUEtLTEpBa2NiTWwwMVhLMnA3eWhMOHBDQmJRM0JOMmF2SmdLdnR0Y3JXREszQ2lVT1Z4UThaUCtwcVhLeUl4bm1CeW1DZzV2SmpOZmtQSzQrYzhjSWZLOG9jVnQ3a21mZC9JNVNSMWhLdkN6VXRiK2xoZ2MwMFphTzZDeWhJUVAxVXY0eUlaamxvYWQ3MlBYWDBPSUp2bkZVKzBaZjZNaHNKd1RmVzByMFV3UWZXNExOTFpsNUhLMjYxSkNaNHFuQmFBcmVWQVMzV3JqVjBMQm5ORFVOTkRUb0NFZUZmd2djYjRnT0VxTFJoaXJXa2V4ckNFWUtWVjcxMURMWUVFMVhCRXNwNXRwVEdqb3Jrb21LWUY5RkRYdjdmUjNCR3diZXR0U3hueUw1M01CUGpzeERaak1oK1ZVVzlOUnhxMURoVmsrRlN4UWNhR2pWOVBhd3Y2ZUdCeXc1cXpveTd4azRSc09TaHFqSndXS2UvMXBFRWZ6a29iZUQvZFFKbXBxZWRjeUJUeTJzcjRuR05SSDBjMFNQV1RMcnFBYzBPUWNiL2dlbUtncXVjUVQ3eVNXS0NuMkVVb3RvQ3ZwWmN0N1JPMnN5L1FXMElXY1hkN3BRUlF5WlZ3VDJVU1JPODd1aGppb1RMS1YyYnJwTVVjTVFSYktIL04yVCtVbFRwYU1sczZjbWM2Q0NOeTNKZFlZU1V6ekpRNG9TRDNvS0xuY1VMT2lKdmpCRUMyb3FuQ0prSmx1Q1l5MlpRNXNvOVlZbFoxVkxsUVUxbVhFVzFqWkVSd2ovTVVTUmMyNFRkZXhscUxLZlFCdERUU2NKVVY4RnN6WEJFWTVrdHBENVVyOWhZQjROYjFpaWt3M0pvWXBrS1grUm9kUktGdDUzTU11Um5LU3BZMzFQd1lhR2FJTGgzd3hKR3o5VGtUUEVFVHhvQ1dacmd2T2xteU16eEZFd1ZKRTV4Wkt6dnlKNFd4RWMxNkdkNFhlM1dlcTRYSDJqS1Jpa3FPa0dRODdoUW5DN3dCbUdZTEFuZXNYM00rUzg3ZUZBVGF1dU4rUWNyaDd4SXhYSmJVSWRNdzNKR0UzeWxDV3pyaWVhcUNuNHpoR00xOVRRM3oxb0gxQVgrcFdFcUljN3dOR0FrVUxCby9aeFJhVjlOTnloNEJyM3JDSFp6YnptU2Zhd0JMMGROUndwVzFrSzlteFBYUjlwb3ZjZHJHU1pLOWMyazB4d0ZHemp1bmlDdFJTWkNaNmNjWjdnYWt0bWdBT3RLYkcvSm5Pa0pyamNRVGRGTXN4UlEyY0xZM1dUSXJsQ3cxZVdLbjhSNnB2dDRHRkRzbzNRb0w0YTNuTGszRzZKcnRNRTNkU2VucHg3UE5GVG1nYTBFYUpUTFEwNjFzRWVRb1dYaFNvOUxUWHNhU2pvSlFSWGVaTHREY2xiQ3JZemZ6SEhlYUtqSENWT1VrUUhPM0plRWVwcjU2bWhpeWFZWUtqak5VK0ZlZDF3UzVWbGhXU3FJL2hZVWRET2theGlLZWhveU9uckNWNXlCSHRiV0ZxVEhDQ3d0cERjWW9sZXNWUjV5VXpUWkJiM1JOTWQwZDZXUCtTdmh1Qm1SY0d4bnVRelQ5NUlDMjg1Y3I0MWNMR1E2YUpKaG1pNFRNR2VtcHhlaW1CUlF3MXRGS1YrOGpkNkt1em9TVHFxRHh6UnRwWmt1cnZLRUh4bHFYS1JJampmVU5OWFFzTk9zUlNjb1dGTFQrWWVSWlZEM0dSTjBNZFFjS3FRakhETXJkR0dWdTNpWUpwUXgzV0dVdmZibXh3RmZSMjBXQnEwb1lZN0xNRmhoZ1l0cjhqcGFFbmFPemphd1dXYVRQOG1NcjB0L0VQRFBvcWNueFRCSTVvNThMN3VvV25NcnBvcVB3Z1ZybEFVV0UrVitUUWw5cmF3b3lQNlFHQWxRdzJUUFJYK1lTa3h5QkM4WjZqaEhrWEJnUUw3V0lJM0RWRm5SZkNyQmZ4ZXd2OUQ2eHN5anlzNFZraFdiOXBVVTYyN0psbFYwWUROSE1rdS9sZE5NTVhERW80YUZuQWtrNFU2ZnJORVU0WGdaVVBtRUtIVWw0NEtyem1ZYW1qQWJoMEpGdkduYVRMUHUxczlqUEN3akZwWWlON3oxRFRPay9uYzA3Q2ZERnptQ2Y3aStiZk5IWGhEdExlQlh6VEJUNXJrTXZXT0l4cGw0RU1oMkxHSkJ1MnN5RG5BRXgybmFFaEhEV01NelBaRWh5Z3lTMW1TNVJUSnI1WmtvS2JFVW9ZcXIya3FkRFVFOHp0SzdPYUludEprRnJJRUN3djhMSlRhVng1WEpFODZnbzhkRmVaM0ZOM3JqYWJDQVlwb1lFZUM5enpKVlVMQmJtWmhEeWQ3a28wOXlkcE5aM25tMktlZTRGUFBYSG5ZRUYxbnFPRkVDMDhMVVZjRHZZWGtKSFc4Z1RhS0NrOVlHT2VJSmhxaUU0VG9QRWVwZHA3SVdGamR3bldhdWZHTXdKSkNNdFVUVEJCSzlCR0NPeTJ0R0dySlRISXd5RU96cDZhUHpOTU90bFprRHZjRVdwUDVTVk5oZmt2RHhobVNhelRKWFlyTTlVMUUweHdGVndxWlF3ekp4dzYra0dHR1VqMkZnbEdHbW5iMS9HNTF1ZFJTTU5sVHc2R0duQ2NVd1ZjT3Btc3FUSGEwNm83MnN3MVJMMDJwOXowVmJuTUxPYUlYM1FLYVlLU0NGUXpCS0VVTkhUU2M0OGs1M1JIOXd4R010cFFhNUtqalcwVzBuNlhDQ0NHNHl4Tk5kaFE0UjRsMUZmKzJzU2Q2VUZIaUlFT3lxcUZnVDAxbUVVTUQram95NzVqUGhPQStvVlZMbTMwOUZSNHlWT2xwNFJoTGlTY05tU21hWUY1UHcwU1RyT0lvV01TUjJVa1JYT01wK000U0hXOG84Wm9pNk9aZ2pLT2FGYXI4elpEemtXenZLT2prS0JqbUNYYnk4SmFoaGpYVUxZNEtsemdLTHZBd3hWR2h2eWQ0enhCMWQ5VDBwaWF6bUtMQ1ZaWTVzS2lEMHkyWlNZcmtVRVBVYklrK2RsUTRTSkhUUjUwazFEUGFVV0lkVFpXOU5Kd25KTU9FQ2dkN291L01ucHBNSjAyTzFWVDRXc2g4NU1uWnpjRlRuZ3BYR0tvODRxbXdnS2JDTC9vclIvU3pKMmNyQSt0Nk1wOTRLdnhKVWVJYlQzQ1F1MXVJZGxRRU96bEtmUzNVTWNyVGlGbU91cm9vY3JaclQyQWNtYW1PS2c4WW9tZUVLbS9ybFQyc29jaU1heWJhVWxGaHVxSENNMnFJSityZzRFY0RGeW1pRFN4emFIZFBjcEU2MnBENWt5TTVTQk1vQTFQYVV0Zkl0aFM4NWlnMVZQaVBQWVhnWUVNTms0UXE3VFhCZ283b1Q1N2dQVWR3Z0NIemhJVkZQRlU2T1lKekhBWDltNW9OclZqZUU2MW1pRHJxUTRWU2Exb2lVUlRzS0hDMElmak53VTJXeks2ZXFLOGpXbG40ZzE1VFZCbnFtRHRlQ0o1MDFQR0FvY0poaHFqWmR0QkVCNmxuaExyZUZKS3htbEtiZUdycUxpU1RoVkliQ2RHemxvYXNhNmxwTVFYSENNRTJib0xwSmdUN3lXYWVtdTZ3Qk9OYnFHTlZSUzBQS0lMN0xja2JqbVF0UjdLOEk1cXRxZWwrVC9DaEpUTklLTGpkVU1OSVJ5dk9Fa285WVlsMmN3UXZlQmlrQ05hd0pLY0xCYmM3K0pNOTJteXNOdmQvRnFwOGEwazZDTkVlN2NuWnJ4bFcwd1FYYVhqYWt0blJ3Tk9HWktZaU9Od1M3YTFKVmhlcTNXZ0pIbFFVR0tIS21wNEtBeFhSL1VMVVJjTmdvYTR6aEtTTHBaUjNreFJSYjBObUQwT0ZuK1VDUzdDekkxbmJQNitvNHg0N1FaRTV4UkN0M1phZ25ZY3ZtcFlRa3RYZGs1WUtYVHpCQzU3a0tFZTBWVnVpU1lxYXBzc01TM0M5cDJDS2tIT2c4QjhQYThwNWF0ckl3M3FleklXYW5NR2E1SFJETkY2Uk05d2NhY2wwTitROFo4aHNJa1NuYUlJZEhSVU9FZWJBUHkxemJDa2hNMDYyRkNKdGlmN1BVK1V0b1ZYeldLcU0xUHhYTzhjZmRydWhGUS9hNngzSktZYWd2VkRoUUV0Tml5aWlTUTdPc3VSc1pVa3UwQ1JORHM0U29nNktLanNaZ2syYllKcWlqZ3NFZW5vS2VuaWluUlhCbi9VM2xncFBkeURaeW5ReDhJaWlvTW5DZXA1S3k4bWpHczZXdHkwbDFoVVFUY05Xc3dTM1dScDJrQ05ad0pHOG9tRzhKcGhQVWFGYkM4bEVmYWJ3UDdWdE05eW9hTkNBanBSNDFWTmhyRDlMa2JONzIydjBDb1pNQnlGemhhVytNeXpSWUVXRkRRd04yTTQvSmlUNzZQdWxqVDNWVS9BMzZlYUlUaGIrUjlvWkdPQUo5dGV3a2dHdnFPTU5SV1lqVC9Dd3U5OVE4THFERTRUZ2JMV3hKMWphRERBRVJzRk9Gcm9iZ2pVc0JTY2FndVhVOGtLbTJSTDE5dFJ5cFNIbkhObEhpSVpxZ3VmczRvcGdRZFZkd3hCTk5GQlI2a1ZGcWI4b2dpbU96QjZhNkhUenJsREhFcFlheGppaUE0VE1Rb2JrRGcydmVqamZ3SkdXbW5iVkZBdzNIM2hxMk55UWZHN2h6NGFDK3czQmJ3YmVzRzBzd1lheXZwQXM2KytSaTFWZnp4OTNtRkNodnlONXhWSFRTKzBwOWFxQ0F4eVo2WmFjWnl3NSs3dXVRa0ZQUjlERGs5Tk9pRTdYMVBDWUpWalZVcXE3SmxySHdXQUxGNW5mSE5HakFwZHBxZ3p4NU93aWxEaENpRFlUZ25jOXdhR1c0QmRMTk5VUXZPdHB6RE9XSERIOEQ3VFIvQS84NUtsakVRdTNOUkVjNFBsLzZCMUhoYzhVbWI1Q3NLTW1HQzlFUGN4b1QyYW13SE5DbWVPRW5PUGJrbG5Na2JPZ0l2TzVVTU9wUXJTOVVHVmR0NmlIL2ZVUmpoSS9XT3BhVzlPS0xZUm9kNkhDVUVkT1gwMDB3cERaUTZod2c2TGdaZk9xbzFSZlQvQ3JKempla1hPR2hwYzFWVzcxWkxiWHl5cCs5M0lMYkMxa1B0SUVZeDBGSXgxVkRyTG9WelhSS1JZV2s4MDl5WWxDOUltY3Jpbnh0YWJLbnpSSmszbEFVMU9MRU4xajJ6cll6cjJteUhSWEpGZjRoNFFLVDFxU1R6VEI1K1pOVHpUUmtBeFg4RmNMVjJ1Uzhlb1FRMmFBa0Z6dkNNNzJzSkljSkVUM1dQalJrNXdpMzJ1U1M5cmZaYWpwV0V2ajloVzQyRjRvNU55dFNYWXk4SUtIYXkxMFZZZHJjbDRTa3FzY3JYcE13eUdPZ3RrYWpoZVN4ZFFxbXB4UDFMM3Q0UjVQcWFzRm5yUUVqeXRxNnFncDlZMDlReDlvNFMxRnpoVUNuMWt5SFN6QldMZW1vU0d2T3FMTmhaeUJqbUNhQVVZcE1ndDRDazd3QkJNTXdXS1dnanNVd1RhR1ZzeFdDMW1Zb0tpeXFxZUdLWXFvblNJUlEzS0lrSE8wcG1BeFRkQkhrYk92ZmxsZnIrQUErN2duYzUwaHVWS1lLMzkzRk95ZzdyYlBPL2l6STdoRTRDbkhISG5KMG9nTlBSVUdlVXBzclpaVEJKY3JvdlVjSmU1MUJQc3I2R2tKZGhDQ3NaNmFUdE1FYjJwcVdrcWVWdERYRS9RVmdnc1UvTmw4NmQ5Uk1GM0R4dlpUQTU4YWd1ODEwUldhd0NpU3p6WEJlVTNNTVc5b3lKVWVkdk5FdlF5TnUxZjEwQlNNZGRSMXZhTENZcFlhL21Hb2NMU2lZRGNMYlF6OGFNbjVpeUY0eEJOTXMxUDBRRU9WN281Z2FXR3V6U2VMdWU0dHQzcm83eTRUZ200Ry9tb3BkWmdsNnEwbzZLekpXRTNtTWtzTnIzcithNkNiVDhnNXdaTnpUOU83ZmkvenBhT21uejNCUm9xb3MrdHY5ek1iZHB4c3FEQk9FZXd0Skx0N2NnNXd0S0tidmxkcFN6UlJDRDQzVkZoZUNJN3laTHBwZ2dNVkJTL0tNQWRIT0RKdk93cTJOUVNiS0tLUExkRldRczdGcW8rbXBsMDFKWFlSZ3E4ZG5HTGhUaUZ6cW1Xc1VNZHBsbFpkYktseXZTZFl4aEk5WWdoT3R4UjhMZ1NMV0hLNjJtR0dWb3h6QkU4TE5XenFIOUNVZXNRekZ5NVJRelRjNTZtaGk2ZmdYRVd3cEtmRTVaN00wNVpnWlVQbW82YXVpdjhZS3pEWXdXQkxNRXJJYktISnZPd0lydkVkaE9CY1E5SmRVMU5IUTdDWG4yWElERkJLVTJXQWdjWDlVQVV6RFhXZDVhbHd1eUo0MVo5cmpLTENMNGFDcDRXYXJoUG0yckgrU2FIVVlFMDAxSkRaMlpBelhQamRNcFpXdkM5d21xSUIybExoUTAxRDVqTzA2aGdoV01uZGJNN3lSSk1zb0NqMXZZYm5GUVZyVzlqYWszT2xFSjNzLzk2K3AzM2RFUFJWNUd4aXFhR2pJdGhVVTZGRkVaeXFDYTVxSnJwQmR6U3c5NUlVbk9QSXJDVVVqUlpRRnJidzVQUjBSMXFpWXgzY2I2bnJXVU1yQm1taUJReFZIdFRldzVJQ1AvaXA2ZzRoZWQvQWtvYi8zMnd2QkhzSU9YODNjSThoR2VOZU5QQ0lrUG1YZThmUEt4ODRPTVNSTTFNVGRYU3dqQ1o0UzMwalZHaHZxVFJhay9PVmhnR2F6SHVPQ3VkNW9uRU8xbEpyNmVjVnlhT0s2SDd6cWxCbElhSEUwb3JvQ2dmdkdKSWRQY21mTE5HTGpwejdoWndaUXBVYkZNRTBBMWNJSmE3Vk5PUmtnZnNNQmF0Yktnd3dKTTliU3ZRWGVOT3ZiSWplbGc2V1d2bzVrdmJLYUpKTkhleGtLTkhMOXhSeUZsSDhUaTJyaUI1d1ZQaFVrN25Ha0pub0NlNDI4TFIvd1JHZFlJbG1XZWJDeXhvdTFyQ2s0Zy9TaHVnQkRYMFYwWlFXa2gwZE9Wc2Fna00weVY2T29MZDV5ZStwUmxzQ3IwbitLaVFyR3VxNXlKRHpyVEFYSHRMVU1kdVREQlZLclNtM2VITCs2aWp4aEZEWDlaNWdWVS93bGlIWVRNaU1GcEtMTk1FeXd1ODB3ZDNtZW9GbXQ2VmJSTVBlbmhyT2M2RFZlNHBnWFU4RG5uSGFrTE9JSXJsRjRGWlBJdzZSK3p4QlAwZHlxNk9PWjRRNXNMS0NjejA4NG9rK1ZzTU15UWhOWm1tQmdYNXhJWE9FSlRtaTdWc0dUdk1UTmRISGhwemRiRThEdTJvS3hndkJxUUtkRERuVEZPeWxDRmF4UjFzeXoyaXFyT0kvRkVwTmMzQzZmMTEvNytBU1M2bDJpbnEyY2lUckNDemd5ZW1yQ0w1U1ZQalFrZFBaVW1HeTJjOVN3OUZ0UjFzUzMwUm1zS1BDUzRya0lDLzJVME1kdXd1Y1lvbEdhUGpLRXloem1pUFlYYWd5V2JZejhMV0JEZHpSaW1BWHp4eDR6OEs5aHB6bGhMcStOaVE5N0h1S29yTVVmSy9PVnZDMkpmaUhVUENRSS9xN0oyZ2pLK3RURE54a0NjNFRNc3NxQ3M0VEd0TFZ3UWloeW9BV2dqOWJvc1U4MFhHVzZBYzlUSkd6aWFVaDUraG5GY0hPbmxhTTFpUm4yOU5hcUdFTlRUVFNVSENIMnRXVGVWMG9zVWhINnBzdVZMalJVbUdXaG02T1pFc2hHZU5vd0FCSGNKMkJweTJac3pSY0trUlhkMlF1S1ZFZVhuYmZhRXE4MjVGZ3VxZmdmRTJ3aGxDaFNSTWRyb24rTEFUVFBRMlozNjl0NEI5QzVncy95bHp2K0NNbWVwSURQY2xGUWwxM1cwcnNwUGQxSk9jYmdoR09FdXRxQ3Y1cWFjVVJRbDNkREt5dnlKbHFLWEdQZ2NNOUZmYXdKQU1WbWRjc3BjWUtPWmM0R2pEWWtGbEswNW9sTk1IeUhuNHpGTnlreU94dDk5UmtIbGZ3bWlIbzYwbDJFS0krbWhyZUVLcDA4MFRidWcwOEJWUGNnb3FDNXpXdCtOTERUWjdvTlNGNTFOMXFpZTdWYTN1Q0N3eVpia0lOZi9ORUQ2anpPc0JkWmpGTjhvcUczd3hWdW5xQ1NZWUtmM0VkaEp5ZjlZV0dmN3RSVTJvSDNWSGdQcjFmZTVKOWhPZ0hkN3hRMHk3cUJ3WHIyM2FHRXJQMGNtNjRKVmpad3NPR3FMK21oTmdabWhKTFcyb1k0VWhlZHN5Qmd6ckNLcnE3Qm1jcE5WaFI2akJQcTY0VmdpK2tuNlhFNjhwcDhKNS8rMHdSSEdPcHNLZW5RbjlEWm50UHpqUkxacERBZEQyZm5TZ2tHOXRtSVhuVXdRNldWaWdoczdZaTJNeFEwTjNDcVlhQ1hrSjBveU96dE1ESmptU1NwY3B2bHJrMFJNTU9qbUFyUTA0UFJWMURPMUZ3aENWYVVWUHBLVU0wM0pLNVN4UHNJV1J1OC9DR0hpOFVIQ2hpcUdGRFRiU1JKV2VZVUREY0g2dkpXVXhSNGsxRlhiTVV3VjZlNEFKRlhTOG9NcXNaS3F6dllROUREUWRaY2tZNGFHc0lodGx1YmJkMnIzajRRQk1vVGFtZFBaazdPL0JmNjJsYWNad25lTmpRb0djZFZVN3pKT2Q3Z2hzVUhPa29zYWdpYzZjbldjOCs0Z2cyODVSNnpaUDVzMS9MVWJDS0l6blR3SzM2UGtkd2xPcmw0VTFMd2ZkQ0NhK0lydkZrbWd3MVBDQVVYS1dvMHNVUlhXY0kybXVLSmxneUZ6aHluQ1k0UkJPc3FDam9JMVI1elJFY28wbjJWdDA5QlF0WVNpemdLTkhmVW1VclE1VU9DaDUxQkZjTG1ZN3VtaFlxWEtRb21Pb3A4YlVuV05OUWNJaUJjWWFDNnh6TU5PUzhKUVFmZXFLQm1tZ2xCKzk3b2svbGZrM3lnYUhTeVphQ1JUelJ4UW82R3pMZmEyaldCUGVwdytVbVQ3U1FFSnlpeVJraEJMTVZPZmNvTWpjSzBlWkNoZlVOekZBVXpDc0VONXZQL1gxdVAvbi9hb01YK0srbncvSGpyLzl4T283ajdQanU2MXRMY2d2SnBUV1hOYmZONWpMcGk2VmZDT3ZpVGt0S2xGdXNRaXhkRUtXbUVCVUtOYUlwalpSU1NPWFNnemFhS0xkYWJybTEvOW5aKy9mK3ZkL3Z6L3Y5K1h5K3paN1BSb3JZb1pxeUxyQ3dRZEVBaXh4Vk9FWE5ObmpYMm5VU1Jsa3FHbVdvd2s4bHhSNTBKUHk5Qm82cUpYYVh3TnZSRUJ2blRoUEVQcmV3cnlMaGNBbmo1V0UxNUZxaThXN1Ixc0F1RXU4NlM0RU5pa0l0Rk40eGt2OUFmNG5YU25VVmNMaUE5eHplc0ZwaXZSUlZlRkt0c01SYUtCaHVTYmpPRUxuQVV0bFNRVXBYZ2RmQjRaMW9TYm5GRWV0YlEwSXJBZStZK3BxbkRjRUpGajZTOExEWnpaSHdZNGUzWE9OTmxBUnJhb21ORXQyYmt2R3Nvc0EzaW95SG0rNmpDTWJJNTl3cXQ0ZWVhcmEyOEl6RW15UGdvUmFVT0VEaFRWZEVKaG1Db1RXZkMwcDhhTmtDcDBvWXFpaDJpcUdpNHlYZU1rT3NuNExkTExubUtmaC9Zb2dqTnNQZWJlRkdSNG05QkpITHpCNjFYUTNCdHBJU2ZTMkZ1Z3NLOUZBdExXWDFkQ1JjckNuVXA0NENOenVDb3dVWm14U1JnWWFFNlphMFcydS9FN0NWWENpSS9VT1I4YUFtMStPU3lFM21PVWN3eWMxekJCZW9YMWtpS3kwWmZ4Y2sxR3N5dWx0aTExaTgzUVRCRjVLZzNwRFFUaEZNVkhpUFNsSyswY1NlZG5nL1ZhUzhiT1pidHNCY1RjWkFSOEpQNUtlcVExT1lLQWkyMG5qZE5OUnBnbnNVLy9LK0puYVhKYUdUb21yN2FZSXBob1JuOWFlU2hKV0tFcTlMY296U0Y3UWxlRWZESTVMWW01YmdWa0ZrUndWREJDVnUwRERJa0d1cG84VFpCcSsvcE1RVVJZRXJKUW1QS0dLak5Ea1dPTHg3SmQ1UWl6ZFV3ZUlhS3JsUDdTd0pEaFp2T05qTGtPc0JCWDlVcEd4bnlkaFhrZkJMUThJeGdvalFiTEZuSmY4MUp5dFNsamNsWVl5RUZ5eDBrVkJ2S1dPRkptT05wc2hHQWNzZHVRWTVnaVZOQ1Y1MWVPZEpZby9wTGhidk0wdURIU2V2TktSY3JLWklxbkN0SmVFc085NVJvcWNnR0s0b2NaY2hvMXRUWXRjWnZINDFwTlE3dkEwV3JoSWZPU3JhSUludElBaStOWFdDRXJkYmt2cld3alJMcnQwTktVZEw2S1NPc2NUT2RNU09VdEJId0w2T0xBMHZOU2R5bmFXUUVuQ3BJdkthSXJKSkVidkhrbXVOaG42T2pNOFZrU0dTcW4xdVlKQ0dIbnE5STNhTGhOTUUzdDZHaklrTzd4ck5GdW1weVROWC9OcndYN0NySVJpcXFXaWpJOUpPNGQxaWlleWt5Zmlwb3NRSVE4WWpqc2psQmg2b0hXYndSamdZSlFuMk5nU25OeWNtSkFrM05pWGh4NDRTeHlraWh4bTh5YlV3VDFPVkt5U2M3dmkzT1hWa2RCSjRBeVhCZWtzRFhHMEloZ3RZWTBsWTVhaENEMGVoYm9ySWs1YVVXUkp2aU1BN1h0NWt5UmpvbnJYRU5rbTh5WXFnczhWemdySm1DbEsyMHVNTTNqUkowRmlRSUNRRjloZEVUbExRV1JJYjVraTZXRGZXUlBvYnZPNmE0R1A1bWNPck56REZFTHRUa09OTGg5ZFhFOHh5cEVnN3o4QTlqa2hyUTZGaGpsZy9RVmt0Slh4dDRXWHpULzAzUThJYVFXU3FJdUV2bG9RMm1xQzlKZmk3d1J1bDRSWDNwU1BsenBvVmxtQ3RJMmp2S0hDRmhqY00zc042bHFGNkh4bktlbExqWFdid3JwUjR4enVDclRVWngycXE5b0FoOHA2aXhDVUdyNzhnOG95alJBdEI1Q1pGd2k4MFZlclZwSTBoK0llQnhhNlpnNmtXdnBESGFpb1lZdUVzUmJEQzNlT21DMkp2R1lMZWlveEdrbkwyVUFUTkpONmhtdGoxRGxwTHZEVm1vY1lickdDVkpLT3JnNFg2RGdkZExBMjAzQktNRm5nZEpKRnRGZDd2SkxtNktFcGM1eWpRcmtrN004MFNHZTM0WDI0blNleDFSYTVPbWdiNzFKS3lnOFNyVTNpL2tBUkt3V3BIMGtPR2hLa09ieWZkMFpHanZ5WGxBa1ZaNHhSYllKMmlyRk1rRlkxU3d5V3hyMm9vNHpsTmlWKzd6bWF3ZUZwVDRrUjNrYURBRlc2eHBTcXpKYXkwNUZ0WVI0SG1aaGM5VXhLYmJmRjJWOFJHMU1CbVNhRStrbUM2Sm5hUlhLOWdzaVhoSkhsL1UwcU0wV1RjYnlod2tZSXZGR3dqU2JqZndoaUp0OFpTUVUrQmQ1K21hclBNT2tWa0QwbXV4WUxJZkV1aGg2MHgvSjkyaXRndWloSlNFTXlTVlBRblRld25FbSs2MjByVFFFTXNPZm80L2tQLzBBUnZXaml0bHBTWDdHeEJnY01Fc2QzRUVlWVd2ZHl0ZCtTYWF3aTZhQ0lqMUNrR2I2QWo5cndoeDE2Q2YzdkF3Rnk1cHlMaFZvblh6eTUxRkRwZEVibGJrZEpiVWNFUERFRnpROHFObWh6ekxUbW1LV0tiRkNYZUV1UmFicDZyeGJ2QXRMRjQ0MlFqUSt3RUE5ZUwxeFNSN1EwSlh6bFNIako0ZXhxODl5UjBsYVNjSi9GVzZ6NGE3M3BGTUVmRGlSWnZ1dmlqSXQ4NlJhU0ZPbDAxcmlWMm1EMVVFdnhHay9HZWc1YVd3R2tpMXpnS1BHOUoyVThQRWc4cVl2TXNaZXl0aVRSWEJNc2xDVThKU2x4aThFYWJqd1VsZGxETkxmelRVbUNneFdzanFXQ09IYXZZQXFza25LRklPMHlRNjFWTDVBVkZ4azZXaEVhQ0FrZEpndDlhU2t6WGxLTlgyakVhNzl3YVl1YzdncTBOM0dESkdDQmhvaVRYVUVQc2RrbkNVRTFDSzBmd3NpYXlsU0YydWlEeU80WFgzcEZoTmQ3UjRpdEZHYzBrL0VsQlp3V3ZxK0dDNnN6VmVFb1MvTVorcXlsd3BLTkt2OVo0NjlVT2pxQ2p3bHVzaWN5VHhHNlZwTnhjUThJbmNvUjRSaExiUitOZHBHR21KV09jSXpKR1V1S1BHcFFnOHJyRzIxZE9NcVFzc0pRNFJ4SDVqYVVxblp1UTBGNFErY2p4THdQdHBaYklBazNRVEpIUVdCRTVTMUJva29WdERkNmxocXI5VXBIU1V4TWNJWWw5cG9qc2I4aDRTQk9zTVFjcXZPV0MyRThFVmVocWlKMWhyckFFYlF4ZUswTkdaMEdrcStndVNSZ25pTTIzYklIVmtxd3g0aGlIZDdzbWFPeWdseUl5UXVNOTc4ajRWUzA4Si9BMkcxS2VNQlJvNGZCYVNOaEtVRVpmUWV3VlEvQzFJK01nZmJFbGVFekNVdzdtS1hJME0zaGQxRUVTVmppOHg1dVE0MW54czFxNFJNSkNDWHM3SXE5YWNweG4yMm9TRG5RL3NKVHhzQ2JISVlaaUx5aFkwNVRZMFpMSU9RckdhU0pERE40dDhwVmFJcnNxcUZkRWVndGl6YzFpVGV3NVE0YXlCRE1Vc1FNa1hvY2FZa2MwaFp1YTQxMnNpWjFyU1hsUjQ2MHpSSjVTbEhHZTVqODAxUkxNbEpUeHRhT00zUTFwdnhKNDV6VWxXRkQ3cnNBYnBmRW0xSkh4RzBlaDh3MlI3UVFWekJVdzI4RmhGcDVRWnpxOHQycngyam9xdWxZVFdTdUpkVFlmV3dxTUZNY292Rm1TeUpQTnlMaEU0RTEwcEh6WWpPQzNodUFyUmE1NzFac0dhalFwUXgzOFNCUDVweVpCNmxNVTNraERucDBNQlY1MUJFOW8yRStUWTVNbDJFOFM3QzBvNncxeHZDWmpmMEhrVkVIQ3pGb3lObXFDKzl3ZGNxTitUcDdqU0RoZUU5d3M4WTVWME5KQ24yYmsydHFTWTRva2RyRWh4MWlETjhjU3Vkd2VwV21BR1hLY0pYSzY1SDl0bzhqWVFSSDdTQkYwMUVTVUpkZDBUYXlWSW5hV2hMa09qbFhFNWlyS0dPbkk2R1NXR0NKYTQ4MnpCSTlyQ3IwanlUVmNFdXpyaUMxdmNyNm13RkdTaXF5NXpNd3hCSC9USkh3alNQaEw4KzAxa2FhU1V1TUZLVGNMRXZhVWVQY3JTbXduOERacmdpa1diN0NHUHhrU2poUXdyUms1N3RjdG14THNiOXNadkw5TFNseXVTTGxXa3FPandkdW84YjZVdjFEa211ZEllRkYyZEhDZ3hWdGs4ZHBJdkhwQnhoRU9kaEtrN09MSVVTZEorY1NSWTU3QiswRGdHVVVsTmZwdGhUZkdrYXV6eHJ2VHNVVWFDVmhsS2V0ZVRYQ29KRENhMk5PS2hPbUM0RzFIOEpCZDRPQlpSZVNSR2txY2IvQ08xUHlMSlRMQjRqMXE4SllhSXV0RWpTTFg4WUtNK2E2cGhkTXNkTEZVb1Y1UlRtOUpTa3VETjhXY0lvbjBOWk1OWldoMXE4QzdTSkV3VjVIeHJtbm5UcmYzS29KQmxtQ1lJMmlsU0xsZkV2bEU0MDExTk5namd0aHpFdWEwb0tLN0pMRTdIWkhsRWw2MEJMTVZGZXdnNEVXTnQwVGhyVk5FVmtraVR3cEtYU1dKemRSRU5ndktHcTRJaGpzaWV6Z1NGdHNmQ1VxOHFraTVTMUxSUWVZUVE0bmVtbUNrSW1XTXczdEZVb1VCWms0Tk9lWllFcDRYUktUR2E2d0pqcldOSEJWSlI0bTNGQ25idUQ2YWFrMldzTVRoM1NaSW1HQ0lQS05nc0RwVnduc2E3MEszMWxDRkpaWWN3d1NNRmNRdWxHVHNadUVhU2RCWGtQR1podTBGc2RVTzczUkhqcThNUEdHSWZhR0liVlRrNml1STNHRmd1Y0hySVFrbVdTSmRCZDdCQnUrdU9yeVdBaFk3K0xraTlySzV3dEVReld3dnRicUdoSU1Gd1dSSnNFbHNZNG05SUlnOUw2bENYMFZrbGFQQVlrZmtaRUdEbk9Xb3dsQkpqdE1Va2NHSzRMZzZFdG9aSW5NVUJWWUxnbjBVc2RtQ3lDejdnSUdIRmZrK2sxUXdUaDVXZTdBOXgrSWRKNkN2SWtFYWdtczBoUjUwZUg5VW5UUUorMm9pS3lWbExGVUUrOGdCR3U4TVEzQ3BwVUhlc25qVEhONFFCL1VHUGhDVEhMRlBITUZyQ3FhNzNncU9iVUpHYTAzd2diaEhrckNmcEVwek5MRTdKRFMyNUZNS2hsaEtLV0tmQ2dxc3RMQ1B1MXpCWHkwSjJ6dHdqdGl4QnU4VVRSbjlMVnRrbUNOMml5Rmh0TUU3MEpIUlExS1ZaWHFLSS9LTklLWU1DWXMxR1VNRUtiTTFiS09JOUxEWEM3emJIUytidCsxTVRXUzlvZEE5RHRyWXRwYkltUUoyVkhoL2xpc0V3YUhxVWsxa2pLVEFLa25rQkVYa2JrZE1Hd3EwZG5oekxKRjNOSkgzSlZ3cnFPQjRTY2EyaHRpNzVubUpOMFd6eFM2VXhEWW9FcHhwYTRodFZsUmprWUU3RFpHekpWVTcydUM5SXloUUw0aThZZkdXU1lMTE5jSFhsb3l6N1FoTmlmbUtTRTlKZ2ZHbXV5TGhjNDAzWG05dnFjcDZnWGUzeHV1djhGNlZKTnhreVRIRWtIRzJnMGFLWEwwTXNYYzFiR2ZnYXMyLy9kQ09OWGlOTENYKzVtQjdlWklsMWtIaDdhandwaWt5emxVVVdPVk9zalNRbHNTK00wUitwUGplL2R6QlhSWkdPMHJNdGdRckxMRzlWU3U5bjZDTVhTM0Jod1ltU29JQmhzak5CbVpiZ3VzRTlCQ1BDUDV0cmlVNFZoTmJKZkUrc3dTUDI3YWF5RTh0dVRwWVlqdHJZak1WR1pkcDJOcFMxczZhQm5LU0hEc2JLdXBsS2JITTRhMHdNRmQvNS9EbUd5S3JKU1VhVzRJQnJxVWh4MHZ5ZnpUQkJMUElVY25aZHJBa05zS1Iwc1dSc3B1bVNuczZDaDB2L3FxSWJCWVVXS3ZQVS9DRm95ckRKR3dTTkZoYkEvTWx6S3Fqck84MGhSYnBLeDBKZXdzaS9TVGZ0d0dTbEtjMUpaeUF6eDA1ZGhMRWRuZlF2aFpPcWlIV1dFQUhDNyszMEZ1UmNaVWdhTzVncGFJSyt4c2lIUlVzcWFQRWxUVjQweFFaUTEwN1E5QlpFMW5yeURWR1U5WlNRNDdibWhCcExjWXBVdDdTK3h1Sy9GaVQ4cUtqd1hZdzV5cFMyaXVDdjdxMWd0Z2podUJ1QjhMQ0ZZNWNVdUNOdHNRT0ZjVCs0SWg5SlgrazhFYTZ2MGlDSVJaT3RDVDBFdDAwSlc1VWVDODVDZzBTY0swazQxMUhjRzF6S3RyZTNTZUlUQlJrN1dmd0RoRXZhWUxUSFA5bGUwbThCeTBKRHduNFRsTFcvYUpPdkdIeGRqWVVlcytTY1ppZ0NrWVFkTmRFT2hraWV6Z1NocWt4OHVlS2pJOGxEZksyb05pT0Z2clpIMWhTK3RrN05WN25PbUxIaWNHV0VndWJrWEtkd2R0WmtuQ0xKWGFDcGtyalpCdExaRnNEUDlDZHhXc1NyMDVTeGw2Q01tb0ZiQ09ncnlYNDB1RHRhbUI3U1ZtWFc0SWhsZ3BtcSswMHRCS1VVYTgzV2JqTFVOa3pEbVk3Y293MUpEeWd5UEdsaGdHS1lLejR2Y1Y3UUJOYkpJZ00xMVRVcVphTWR3VGVTZ3VINnJPYXcxSlJLemFhR3l4Vm0yRUovdUNJclZXVWNaVWtjcDJnck1zRWpLK0RNd1M1OWpRazNLZDZTRXExZDBTNnVWbU80QmMxbERYVFVjSGpsdUNYRXErMU9sQkRqMXBpOXpnaVh4bkt1RTBTcVRYd2hxYkVUVzZSZ2dNRW5HbC9xNDlVVDJpQ3pnSnZSd1ZYUzJLL2Q2K1preVVsN2phd1NWTGl0NDZFd3hWbGpEWndvU1EyMHNEQmloenRIZmsyeUE4TlZaZ2hpWHdyWUhRZGZLQU90enNheWpoWTliWTB5RTJDV0VlSjl4ZnpPNDIzeGhMNXN5UzJURkpvZk8ycGJvSG9iMG5ZNEdpQWdScnZHUUVEYS9GV1Nzb2FhWWwwc3lSc0V0M2tXb0gzQjAxc2hDWGhUVVdlOXczQnQ0NFNDOVFDaDNlU2hRY3R3YmFLMkFwTHJvR0NNbFpyWXF2bFkzcVloTTBhWHBGa1BPdW9xSjNEbTZmeFhyR3dWRjlnQ1daYWdqUHF6bmZrdU1LUThEUFRRUk84WnFHMWhQR0tFbTlJZ3BHVzREWkRnVE5yaVR4dkZpcStMeiswY0tmcDR3ajZPQ0s5SlNuek5TbjlMRlU3VWhLWlpNbll3Y0o4czh5UnNFQ1NjSzRqNVVPQjk1SEZPMEN6aFk0eEp4dUNpeDBsRGxFVWVNZFM2RVpCa1RzVWtaNEs3NGR1Z3lUWFM3YU5nTDhhcWpEZmtDRTBaYndrQ1hwYVdDS2hsOFA3VkQ1anh5a2l2U3l4eVpyWUVSYmUxNjhMWXU5WlloODZJa3NjZ1ZMRTd0V1BLbUp2MTFDZ295Smx0TUVicm9odFZBUWZPNEltbHRpSEVyb1lFczdSeEFhclZwWThBd1hNY01SZUZPVFlXZTVpaUxSUXhKNVE4RHRKOExRaFdPaEllRkVTUEdzSUxoYk5EUmxqTmJIek5SbFRGYmsyUzNMME5PUzZWMUtGSllLVWJTVGNJSWhNMHdRL3MyVE0wU1JNTmNRbVNhcDNqQ0g0eWhKWktTa3d5UkhwWVlnc0ZlUTRVN3hvQ0I3VlZPRXhoWGVwbzlBQkJzWWJ2R1dLWFBNRTNseUg5NVlpb1owZ3NzUVJXV2JJK0ZhU01rWGlqWlh3Z2lUbFlkUGRrTkxhRVR4bHlEVkl3cWVhRXVzMGFUY1ljZzBSVk9rcFIzQ1NKcUlkZEsrOTBKQ3h6c0RWbG95ckZkNVpBcjRUQktmYVdhNmJvRUE3QzdzNkVwWWFlRlBqdmVvb1k3Mm1qSWNjTEhKOUhVd1ZsRGhLa211dEpESkJ3bnAxcnZ1bEpaZ2dLRFJmYlhBa3ZDLzRsM296UU9HOWE4bHhqeDBpN25WNGpTWGM3dmhlM093SXhqZ1NIamRFaGhzaWY5WWtQR2x1czNpTEZEbldPRmh0Q1piSmcwVWJRY0lhUjY3Smp0aG9DeU1FWlJ3aGlYV3l4TzVReEk2dzVOaFQ0VTFXc0p2RE82MEozNGZXOWh3endsS2lqNlpBVzluZTRMMHM4QzZYZUJNRWtkL0xReTFWdWNCUm90NlFNbGJpdmFCaG9CZ2pxR2lDSk5oc3FWcC9TMlNzRzZESU9OQ1IwZFhodldiSitNUlJaSmtrdUVqZ0RYSmpGUVc2U1NMN0dYSzhaMkNaZzdjVnNiV0dvS21FcHpRNWVscGl5OFJ5ZzdkTWtMTFVFYXV6ZU84NkN1d2xTT2xnWUxvalpXZUo5eE0zUzFQV2ZFZktsNUlTTFEwTUVLUjhZT0IyUWZDeEpCanJLUENONGY5TWthU3Nxb1ZYSkJtUDdFcEZaOVVRZk9vT0Z3U3pCTjRNUThMc0dyeW1saXBjSlFobXkwR2FRalBxQ0hhWFJ3dUNad1JicUsyRmc5d2xDbFpxWWljcklnTWRaZnhUUTBjN1RCSWJyQ2h4bXV6b0tHOFhSYVNySWhoaXlORkprckM3b0lBV01FT1FhNWFCZWtQQ1JrbkNvNElLUHJZa3ZDREk4YVltWTdXRnRwcmdla2NKWjNvTElxc3NDU010RmJRVEpLd1hZeTNCWTVvQ2gyaUtQQ3BKT0UrelJkcFlnaTZPMkttT0FndlZDWWFVNHlTUmVrMXNneUZoSjQwM1FGSGlWRW1KSHd0eWJPMWdzOEhyNStCRVRRWDNXYXIwcVpuZ1lHZ3RWWnRvcWQ2dkZTay9Vd2RaRWxZcXlqckY0SFhVZUZzcElpOUlHS2Y0ajkycEtHQWRDWU1Wc2JjVjNrUkYwTitSOExVZDVQQ3NJR1dveER0QmtDSTBuS29mZEpReFQrTHRaZmx2dWM4UTNDandXa3E4S3dVcEh6a0svTm1Tc2NsQ0wwbnNlUWRqNUZSSDVDTkhTZ3RMaVc4ME9mNUhVOUhobHNnYTlibkJxM2ZFVmx0S2ZPNUlhU1RtR2pqYzRKMG90Y1A3UXNKVVNRTThwRWo1L3dDdVV1QzJEV3o4QUFBQUFFbEZUa1N1UW1DQ1wiKTtcCn1cCi5hY2UtYW1iaWFuY2UgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOUVVGRDR6NkNycS9zZkFBdVlBdVlsKzdsZkFBQUFBRWxGVGtTdVFtQ0NcIikgcmlnaHQgcmVwZWF0LXk7XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKCn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvYW1iaWFuY2UiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-chaos.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2hhb3MiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtY2hhb3MiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1jaGFvcyAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMTQxNDE0O1wKY29sb3I6ICM1OTU5NTk7XApib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjMjgyODI4O1wKfVwKLmFjZS1jaGFvcyAuYWNlX2d1dHRlci1jZWxsLmFjZV93YXJuaW5nIHtcCmJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XApiYWNrZ3JvdW5kOiAjRkMwO1wKYm9yZGVyLWxlZnQ6IG5vbmU7XApwYWRkaW5nLWxlZnQ6IDA7XApjb2xvcjogIzAwMDtcCn1cCi5hY2UtY2hhb3MgLmFjZV9ndXR0ZXItY2VsbC5hY2VfZXJyb3Ige1wKYmFja2dyb3VuZC1wb3NpdGlvbjogLTZweCBjZW50ZXI7XApiYWNrZ3JvdW5kLWltYWdlOiBub25lO1wKYmFja2dyb3VuZDogI0YxMDtcCmJvcmRlci1sZWZ0OiBub25lO1wKcGFkZGluZy1sZWZ0OiAwO1wKY29sb3I6ICMwMDA7XAp9XAouYWNlLWNoYW9zIC5hY2VfcHJpbnQtbWFyZ2luIHtcCmJvcmRlci1sZWZ0OiAxcHggc29saWQgIzU1NTtcCnJpZ2h0OiAwO1wKYmFja2dyb3VuZDogIzFEMUQxRDtcCn1cCi5hY2UtY2hhb3Mge1wKYmFja2dyb3VuZC1jb2xvcjogIzE2MTYxNjtcCmNvbG9yOiAjRTZFMURDO1wKfVwKLmFjZS1jaGFvcyAuYWNlX2N1cnNvciB7XApib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XAp9XAouYWNlLWNoYW9zIC5hY2VfY3Vyc29yLmFjZV9vdmVyd3JpdGUge1wKYm9yZGVyLWxlZnQ6IDBweDtcCmJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkZGRkZGO1wKfVwKLmFjZS1jaGFvcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjNDk0ODM2O1wKfVwKLmFjZS1jaGFvcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO1wKfVwKLmFjZS1jaGFvcyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgI0ZDRTk0RjtcCn1cCi5hY2UtY2hhb3MgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjMzMzO1wKfVwKLmFjZS1jaGFvcyAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyO1wKfVwKLmFjZS1jaGFvcyAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzQwNDA0MDtcCn1cCi5hY2UtY2hhb3MgLmFjZV9rZXl3b3JkIHtcCmNvbG9yOiMwMDY5OEY7XAp9XAouYWNlLWNoYW9zIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6I0ZGMzA4RjtcCn1cCi5hY2UtY2hhb3MgLmFjZV9jb25zdGFudCB7XApjb2xvcjojMUVEQUZCO1wKfVwKLmFjZS1jaGFvcyAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjojRkRDMjUxO1wKfVwKLmFjZS1jaGFvcyAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHtcCmNvbG9yOiM4REZGMEE7XAp9XAouYWNlLWNoYW9zIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6IzU4QzU1NDtcCn1cCi5hY2UtY2hhb3MgLmFjZV9pbnZhbGlkIHtcCmNvbG9yOiNGRkZGRkY7XApiYWNrZ3JvdW5kLWNvbG9yOiM5OTAwMDA7XAp9XAouYWNlLWNoYW9zIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7XApjb2xvcjojRkZGRkZGO1wKYmFja2dyb3VuZC1jb2xvcjojOTkwMDAwO1wKfVwKLmFjZS1jaGFvcyAuYWNlX3N1cHBvcnQge1wKY29sb3I6ICM5OTk7XAp9XAouYWNlLWNoYW9zIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6IzAwQUVFRjtcCn1cCi5hY2UtY2hhb3MgLmFjZV9mdW5jdGlvbiB7XApjb2xvcjojMDBBRUVGO1wKfVwKLmFjZS1jaGFvcyAuYWNlX3N0cmluZyB7XApjb2xvcjojNThDNTU0O1wKfVwKLmFjZS1jaGFvcyAuYWNlX2NvbW1lbnQge1wKY29sb3I6IzU1NTtcCmZvbnQtc3R5bGU6aXRhbGljO1wKcGFkZGluZy1ib3R0b206IDBweDtcCn1cCi5hY2UtY2hhb3MgLmFjZV92YXJpYWJsZSB7XApjb2xvcjojOTk3NzQ0O1wKfVwKLmFjZS1jaGFvcyAuYWNlX21ldGEuYWNlX3RhZyB7XApjb2xvcjojQkU1M0U2O1wKfVwKLmFjZS1jaGFvcyAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHtcCmNvbG9yOiNGRkZGODk7XAp9XAouYWNlLWNoYW9zIC5hY2VfbWFya3VwLmFjZV91bmRlcmxpbmUge1wKdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XAp9XAouYWNlLWNoYW9zIC5hY2VfZm9sZC13aWRnZXQge1wKdGV4dC1hbGlnbjogY2VudGVyO1wKfVwKLmFjZS1jaGFvcyAuYWNlX2ZvbGQtd2lkZ2V0OmhvdmVyIHtcCmNvbG9yOiAjNzc3O1wKfVwKLmFjZS1jaGFvcyAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9zdGFydCxcCi5hY2UtY2hhb3MgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kLFwKLmFjZS1jaGFvcyAuYWNlX2ZvbGQtd2lkZ2V0LmFjZV9jbG9zZWR7XApiYWNrZ3JvdW5kOiBub25lO1wKYm9yZGVyOiBub25lO1wKYm94LXNoYWRvdzogbm9uZTtcCn1cCi5hY2UtY2hhb3MgLmFjZV9mb2xkLXdpZGdldC5hY2Vfc3RhcnQ6YWZ0ZXIge1wKY29udGVudDogJ+KWvidcCn1cCi5hY2UtY2hhb3MgLmFjZV9mb2xkLXdpZGdldC5hY2VfZW5kOmFmdGVyIHtcCmNvbnRlbnQ6ICfilrQnXAp9XAouYWNlLWNoYW9zIC5hY2VfZm9sZC13aWRnZXQuYWNlX2Nsb3NlZDphZnRlciB7XApjb250ZW50OiAn4oCjJ1wKfVwKLmFjZS1jaGFvcyAuYWNlX2luZGVudC1ndWlkZSB7XApib3JkZXItcmlnaHQ6MXB4IGRvdHRlZCAjMzMzO1wKbWFyZ2luLXJpZ2h0Oi0xcHg7XAp9XAouYWNlLWNoYW9zIC5hY2VfZm9sZCB7IFwKYmFja2dyb3VuZDogIzIyMjsgXApib3JkZXItcmFkaXVzOiAzcHg7IFwKY29sb3I6ICM3QUY7IFwKYm9yZGVyOiBub25lOyBcCn1cCi5hY2UtY2hhb3MgLmFjZV9mb2xkOmhvdmVyIHtcCmJhY2tncm91bmQ6ICNDQ0M7IFwKY29sb3I6ICMwMDA7XAp9XAoiOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwoKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9jaGFvcyJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-chrome.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2hyb21lIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1jaHJvbWUiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1jaHJvbWUgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2ViZWJlYjtcCmNvbG9yOiAjMzMzO1wKb3ZlcmZsb3cgOiBoaWRkZW47XAp9XAouYWNlLWNocm9tZSAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogI2U4ZThlODtcCn1cCi5hY2UtY2hyb21lIHtcCmJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlLWNocm9tZSAuYWNlX2N1cnNvciB7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlLWNocm9tZSAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7XApjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiByZ2IoODgsIDkyLCAyNDYpO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XApjb2xvcjogcmdiKDYsIDE1MCwgMTQpO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9pbnZhbGlkIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDAsIDApO1wKY29sb3I6IHdoaXRlO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9mb2xkIHtcCn1cCi5hY2UtY2hyb21lIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAp9XAouYWNlLWNocm9tZSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLWNocm9tZSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUsXAouYWNlLWNocm9tZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzXAouYWNlLWNocm9tZSAuYWNlX3N1cHBvcnQuYWNlX290aGVyIHtcCmNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7XAp9XAouYWNlLWNocm9tZSAuYWNlX3ZhcmlhYmxlLmFjZV9wYXJhbWV0ZXIge1wKZm9udC1zdHlsZTppdGFsaWM7XApjb2xvcjojRkQ5NzFGO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XApjb2xvcjogcmdiKDEwNCwgMTE4LCAxMzUpO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9jb21tZW50IHtcCmNvbG9yOiAjMjM2ZTI0O1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9jb21tZW50LmFjZV9kb2Mge1wKY29sb3I6ICMyMzZlMjQ7XAp9XAouYWNlLWNocm9tZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHtcCmNvbG9yOiAjMjM2ZTI0O1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAp9XAouYWNlLWNocm9tZSAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiByZ2IoNDksIDEzMiwgMTQ5KTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfeG1sLXBlIHtcCmNvbG9yOiByZ2IoMTA0LCAxMDQsIDkxKTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzAwMDBBMjtcCn1cCi5hY2UtY2hyb21lIC5hY2VfaGVhZGluZyB7XApjb2xvcjogcmdiKDEyLCA3LCAyNTUpO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9saXN0IHtcCmNvbG9yOnJnYigxODUsIDYsIDE0NCk7XAp9XAouYWNlLWNocm9tZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7XAp9XAouYWNlLWNocm9tZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1wKYmFja2dyb3VuZDogcmdiKDE2NCwgMjI5LCAxMDEpO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3IgOiAjZGNkY2RjO1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTtcCn1cCi5hY2UtY2hyb21lIC5hY2Vfc3RvcmFnZSxcCi5hY2UtY2hyb21lIC5hY2Vfa2V5d29yZCxcCi5hY2UtY2hyb21lIC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOiByZ2IoMTQ3LCAxNSwgMTI4KTtcCn1cCi5hY2UtY2hyb21lIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XApjb2xvcjogcmdiKDI1NSwgMCwgMClcCn1cCi5hY2UtY2hyb21lIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjMUExQUE2O1wKfVwKLmFjZS1jaHJvbWUgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7XApjb2xvcjogIzk5NDQwOTtcCn1cCi5hY2UtY2hyb21lIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVwiKSByaWdodCByZXBlYXQteTtcCn1cCiI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvY2hyb21lIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-clouds.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2xvdWRzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1jbG91ZHMiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1jbG91ZHMgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2ViZWJlYjtcCmNvbG9yOiAjMzMzXAp9XAouYWNlLWNsb3VkcyAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogI2U4ZThlOFwKfVwKLmFjZS1jbG91ZHMge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCmNvbG9yOiAjMDAwMDAwXAp9XAouYWNlLWNsb3VkcyAuYWNlX2N1cnNvciB7XApjb2xvcjogIzAwMDAwMFwKfVwKLmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogI0JERDVGQ1wKfVwKLmFjZS1jbG91ZHMuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjRkZGRkZGO1wKfVwKLmFjZS1jbG91ZHMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigyNTUsIDI1NSwgMClcCn1cCi5hY2UtY2xvdWRzIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjQkZCRkJGXAp9XAouYWNlLWNsb3VkcyAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6ICNGRkZCRDFcCn1cCi5hY2UtY2xvdWRzIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3IgOiAjZGNkY2RjXAp9XAouYWNlLWNsb3VkcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKYm9yZGVyOiAxcHggc29saWQgI0JERDVGQ1wKfVwKLmFjZS1jbG91ZHMgLmFjZV9pbnZpc2libGUge1wKY29sb3I6ICNCRkJGQkZcCn1cCi5hY2UtY2xvdWRzIC5hY2Vfa2V5d29yZCxcCi5hY2UtY2xvdWRzIC5hY2VfbWV0YSxcCi5hY2UtY2xvdWRzIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQuYWNlX3Byb3BlcnR5LXZhbHVlIHtcCmNvbG9yOiAjQUY5NTZGXAp9XAouYWNlLWNsb3VkcyAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCmNvbG9yOiAjNDg0ODQ4XAp9XAouYWNlLWNsb3VkcyAuYWNlX2tleXdvcmQuYWNlX290aGVyLmFjZV91bml0IHtcCmNvbG9yOiAjOTZEQzVGXAp9XAouYWNlLWNsb3VkcyAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogIzM5OTQ2QVwKfVwKLmFjZS1jbG91ZHMgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogIzQ2QTYwOVwKfVwKLmFjZS1jbG91ZHMgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lbnRpdHkge1wKY29sb3I6ICNCRjc4Q0NcCn1cCi5hY2UtY2xvdWRzIC5hY2VfaW52YWxpZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkYwMDJBXAp9XAouYWNlLWNsb3VkcyAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogI0FGOTU2RjtcCmJvcmRlci1jb2xvcjogIzAwMDAwMFwKfVwKLmFjZS1jbG91ZHMgLmFjZV9zdG9yYWdlLFwKLmFjZS1jbG91ZHMgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyxcCi5hY2UtY2xvdWRzIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24sXAouYWNlLWNsb3VkcyAuYWNlX3N1cHBvcnQuYWNlX290aGVyLFwKLmFjZS1jbG91ZHMgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjQzUyNzI3XAp9XAouYWNlLWNsb3VkcyAuYWNlX3N0cmluZyB7XApjb2xvcjogIzVEOTBDRFwKfVwKLmFjZS1jbG91ZHMgLmFjZV9jb21tZW50IHtcCmNvbG9yOiAjQkNDOEJBXAp9XAouYWNlLWNsb3VkcyAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFwKLmFjZS1jbG91ZHMgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7XApjb2xvcjogIzYwNjA2MFwKfVwKLmFjZS1jbG91ZHMgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9jbG91ZHMiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-clouds_midnight.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY2xvdWRzX21pZG5pZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWNsb3Vkcy1taWRuaWdodCI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMjMyMzIzO1wKY29sb3I6ICM5MjkyOTJcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjMjMyMzIzXAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMTkxOTE5O1wKY29sb3I6ICM5MjkyOTJcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjN0RBNURDXAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjMDAwMDAwXAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodC5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMxOTE5MTk7XAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgI0JGQkZCRlwKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDIxNSwgMjE1LCAyMTUsIDAuMDMxKVwKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMTUsIDIxNSwgMjE1LCAwLjAzMSlcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwXAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzY2NlwKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9rZXl3b3JkLFwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9tZXRhLFwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudC5hY2VfcHJvcGVydHktdmFsdWUge1wKY29sb3I6ICM5MjdDNURcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6ICM0QjRCNEJcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfa2V5d29yZC5hY2Vfb3RoZXIuYWNlX3VuaXQge1wKY29sb3I6ICMzNjZGMUFcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjMzk5NDZBXAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtcCmNvbG9yOiAjNDZBNjA5XAp9XAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIuYWNlX2VudGl0eSB7XApjb2xvcjogI0ExNjVBQ1wKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9pbnZhbGlkIHtcCmNvbG9yOiAjRkZGRkZGO1wKYmFja2dyb3VuZC1jb2xvcjogI0U5MkUyRVwKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICM5MjdDNUQ7XApib3JkZXItY29sb3I6ICM5MjkyOTJcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfc3RvcmFnZSxcCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MsXAouYWNlLWNsb3Vkcy1taWRuaWdodCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uLFwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9vdGhlcixcCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogI0U5MkUyRVwKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9zdHJpbmcge1wKY29sb3I6ICM1RDkwQ0RcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfY29tbWVudCB7XApjb2xvcjogIzNDNDAzQlwKfVwKLmFjZS1jbG91ZHMtbWlkbmlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX3RhZyxcCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKY29sb3I6ICM2MDYwNjBcCn1cCi5hY2UtY2xvdWRzLW1pZG5pZ2h0IC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV05nWUdCZ1lIQjNkLzhQQUFPSUFkVUx3OHFNQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2Nsb3Vkc19taWRuaWdodCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-cobalt.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY29iYWx0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWNvYmFsdCI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLWNvYmFsdCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMDExZTNhO1wKY29sb3I6IHJnYigxMjgsMTQ1LDE2MClcCn1cCi5hY2UtY29iYWx0IC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjNTU1NTU1XAp9XAouYWNlLWNvYmFsdCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMDAyMjQwO1wKY29sb3I6ICNGRkZGRkZcCn1cCi5hY2UtY29iYWx0IC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLWNvYmFsdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2JhKDE3OSwgMTAxLCA1NywgMC43NSlcCn1cCi5hY2UtY29iYWx0LmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggIzAwMjI0MDtcCn1cCi5hY2UtY29iYWx0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XApiYWNrZ3JvdW5kOiByZ2IoMTI3LCAxMTEsIDE5KVwKfVwKLmFjZS1jb2JhbHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSlcCn1cCi5hY2UtY29iYWx0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjM1KVwKfVwKLmFjZS1jb2JhbHQgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM1KVwKfVwKLmFjZS1jb2JhbHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTc5LCAxMDEsIDU3LCAwLjc1KVwKfVwKLmFjZS1jb2JhbHQgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSlcCn1cCi5hY2UtY29iYWx0IC5hY2Vfa2V5d29yZCxcCi5hY2UtY29iYWx0IC5hY2VfbWV0YSB7XApjb2xvcjogI0ZGOUQwMFwKfVwKLmFjZS1jb2JhbHQgLmFjZV9jb25zdGFudCxcCi5hY2UtY29iYWx0IC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2UtY29iYWx0IC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3Rlci5hY2VfZXNjYXBlLFwKLmFjZS1jb2JhbHQgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICNGRjYyOENcCn1cCi5hY2UtY29iYWx0IC5hY2VfaW52YWxpZCB7XApjb2xvcjogI0Y4RjhGODtcCmJhY2tncm91bmQtY29sb3I6ICM4MDBGMDBcCn1cCi5hY2UtY29iYWx0IC5hY2Vfc3VwcG9ydCB7XApjb2xvcjogIzgwRkZCQlwKfVwKLmFjZS1jb2JhbHQgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XApjb2xvcjogI0VCOTM5QVwKfVwKLmFjZS1jb2JhbHQgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICNGRjlEMDA7XApib3JkZXItY29sb3I6ICNGRkZGRkZcCn1cCi5hY2UtY29iYWx0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6ICNGRkIwNTRcCn1cCi5hY2UtY29iYWx0IC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogI0ZGRUU4MFwKfVwKLmFjZS1jb2JhbHQgLmFjZV9lbnRpdHkge1wKY29sb3I6ICNGRkREMDBcCn1cCi5hY2UtY29iYWx0IC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjM0FEOTAwXAp9XAouYWNlLWNvYmFsdCAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHtcCmNvbG9yOiAjODBGRkMyXAp9XAouYWNlLWNvYmFsdCAuYWNlX2NvbW1lbnQge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICMwMDg4RkZcCn1cCi5hY2UtY29iYWx0IC5hY2VfaGVhZGluZyxcCi5hY2UtY29iYWx0IC5hY2VfbWFya3VwLmFjZV9oZWFkaW5nIHtcCmNvbG9yOiAjQzhFNEZEO1wKYmFja2dyb3VuZC1jb2xvcjogIzAwMTIyMVwKfVwKLmFjZS1jb2JhbHQgLmFjZV9saXN0LFwKLmFjZS1jb2JhbHQgLmFjZV9tYXJrdXAuYWNlX2xpc3Qge1wKYmFja2dyb3VuZC1jb2xvcjogIzEzMEQyNlwKfVwKLmFjZS1jb2JhbHQgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogI0NDQ0NDQ1wKfVwKLmFjZS1jb2JhbHQgLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6ICNGRjgwRTFcCn1cCi5hY2UtY29iYWx0IC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOiAjOUVGRkZGXAp9XAouYWNlLWNvYmFsdCAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZSENMU3ZrUEFBUDNBZ1NEVFJkNEFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15XAp9XAoiOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2NvYmFsdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-crimson_editor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvY3JpbXNvbl9lZGl0b3IiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKZXhwb3J0cy5pc0RhcmsgPSBmYWxzZTsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2ViZWJlYjtcCmNvbG9yOiAjMzMzO1wKb3ZlcmZsb3cgOiBoaWRkZW47XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfZ3V0dGVyLWxheWVyIHtcCndpZHRoOiAxMDAlO1wKdGV4dC1hbGlnbjogcmlnaHQ7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1wKY29sb3I6IHJnYig2NCwgNjQsIDY0KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9jdXJzb3Ige1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2lkZW50aWZpZXIge1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2tleXdvcmQge1wKY29sb3I6IGJsdWU7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4ge1wKY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiByZ2IoMjU1LCAxNTYsIDApO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2NvbnN0YW50LmFjZV9saWJyYXJ5IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfaW52YWxpZCB7XAp0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcCmNvbG9yOiByZ2IoMjI0LCAwLCAwKTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9mb2xkIHtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogcmdiKDE5MiwgMCwgMCk7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6IHJnYig2LCAxNTAsIDE0KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9zdXBwb3J0LmFjZV90eXBlLFwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHtcCmNvbG9yOiByZ2IoMTA5LCAxMjEsIDIyMik7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX3N0cmluZyB7XApjb2xvcjogcmdiKDEyOCwgMCwgMTI4KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9jb21tZW50IHtcCmNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9jb21tZW50LmFjZV9kb2Mge1wKY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcge1wKY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogcmdiKDAsIDAsIDY0KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogcmdiKDAsIDY0LCAxMjgpO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX3htbC1wZSB7XApjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwgMCk7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RhY2sge1wKYmFja2dyb3VuZDogcmdiKDE2NCwgMjI5LCAxMDEpO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgcmdiKDE5MiwgMTkyLCAxOTIpO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6IHJnYigyMzIsIDI0MiwgMjU0KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvciA6ICNkY2RjZGM7XAp9XAouYWNlLWNyaW1zb24tZWRpdG9yIC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOnJnYigyOCwgMiwgMjU1KTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTtcCn1cCi5hY2UtY3JpbXNvbi1lZGl0b3IgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHtcCmNvbG9yOiByZ2IoMTkyLCAwLCAxOTIpO1wKfVwKLmFjZS1jcmltc29uLWVkaXRvciAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8vQndBbVZnZDEvdzExL2dBQUFBQkpSVTVFcmtKZ2dnPT1cIikgcmlnaHQgcmVwZWF0LXk7XAp9IjsKCmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWNyaW1zb24tZWRpdG9yIjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9jcmltc29uX2VkaXRvciJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-dawn.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZGF3biIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZXhwb3J0cy5pc0RhcmsgPSBmYWxzZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtZGF3biI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLWRhd24gLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2ViZWJlYjtcCmNvbG9yOiAjMzMzXAp9XAouYWNlLWRhd24gLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICNlOGU4ZThcCn1cCi5hY2UtZGF3biB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRjlGOUY5O1wKY29sb3I6ICMwODA4MDhcCn1cCi5hY2UtZGF3biAuYWNlX2N1cnNvciB7XApjb2xvcjogIzAwMDAwMFwKfVwKLmFjZS1kYXduIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMzksIDk1LCAyNTUsIDAuMzApXAp9XAouYWNlLWRhd24uYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjRjlGOUY5O1wKfVwKLmFjZS1kYXduIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XApiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDApXAp9XAouYWNlLWRhd24gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzUsIDc1LCAxMjYsIDAuNTApXAp9XAouYWNlLWRhd24gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDM2LCA5OSwgMTgwLCAwLjEyKVwKfVwKLmFjZS1kYXduIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3IgOiAjZGNkY2RjXAp9XAouYWNlLWRhd24gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzksIDk1LCAyNTUsIDAuMzApXAp9XAouYWNlLWRhd24gLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoNzUsIDc1LCAxMjYsIDAuNTApXAp9XAouYWNlLWRhd24gLmFjZV9rZXl3b3JkLFwKLmFjZS1kYXduIC5hY2VfbWV0YSB7XApjb2xvcjogIzc5NDkzOFwKfVwKLmFjZS1kYXduIC5hY2VfY29uc3RhbnQsXAouYWNlLWRhd24gLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS1kYXduIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3Rlci5hY2VfZXNjYXBlLFwKLmFjZS1kYXduIC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjODExRjI0XAp9XAouYWNlLWRhd24gLmFjZV9pbnZhbGlkLmFjZV9pbGxlZ2FsIHtcCnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNGOEY4Rjg7XApiYWNrZ3JvdW5kLWNvbG9yOiAjQjUyQTFEXAp9XAouYWNlLWRhd24gLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHtcCnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNCNTJBMURcCn1cCi5hY2UtZGF3biAuYWNlX3N1cHBvcnQge1wKY29sb3I6ICM2OTFDOTdcCn1cCi5hY2UtZGF3biAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiAjQjQzNzFGXAp9XAouYWNlLWRhd24gLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICM3OTQ5Mzg7XApib3JkZXItY29sb3I6ICMwODA4MDhcCn1cCi5hY2UtZGF3biAuYWNlX2xpc3QsXAouYWNlLWRhd24gLmFjZV9tYXJrdXAuYWNlX2xpc3QsXAouYWNlLWRhd24gLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzY5M0ExN1wKfVwKLmFjZS1kYXduIC5hY2Vfc3RvcmFnZSB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogI0E3MUQ1RFwKfVwKLmFjZS1kYXduIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjMEI2MTI1XAp9XAouYWNlLWRhd24gLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7XApjb2xvcjogI0NGNTYyOFwKfVwKLmFjZS1kYXduIC5hY2VfY29tbWVudCB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogIzVBNTI1RlwKfVwKLmFjZS1kYXduIC5hY2VfaGVhZGluZyxcCi5hY2UtZGF3biAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyB7XApjb2xvcjogIzE5MzU2RFwKfVwKLmFjZS1kYXduIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICMyMzRBOTdcCn1cCi5hY2UtZGF3biAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZTGgvNSt4L0FBaXpBNGh4Tk5zWkFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9kYXduIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-dracula.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZHJhY3VsYSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZXhwb3J0cy5pc0RhcmsgPSB0cnVlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1kcmFjdWxhIjsKZXhwb3J0cy5jc3NUZXh0ID0gIlwKLmFjZS1kcmFjdWxhIC5hY2VfZ3V0dGVyIHtcCmJhY2tncm91bmQ6ICMyODJhMzY7XApjb2xvcjogcmdiKDE0NCwxNDUsMTQ4KVwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjNDQ0NzVhXAp9XAouYWNlLWRyYWN1bGEge1wKYmFja2dyb3VuZC1jb2xvcjogIzI4MmEzNjtcCmNvbG9yOiAjZjhmOGYyXAp9XAouYWNlLWRyYWN1bGEgLmFjZV9jdXJzb3Ige1wKY29sb3I6ICNmOGY4ZjBcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjNDQ0NzVhXAp9XAouYWNlLWRyYWN1bGEuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMjgyYTM2O1wKYm9yZGVyLXJhZGl1czogMnB4XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KVwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjYTI5NzA5XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjNDQ0NzVhXAp9XAouYWNlLWRyYWN1bGEgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogIzQ0NDc1YVwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3gtc2hhZG93OiAwcHggMHB4IDBweCAxcHggI2EyOTcwOTtcCmJvcmRlci1yYWRpdXM6IDNweDtcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzUwZmE3YjtcCmJvcmRlci1jb2xvcjogI2Y4ZjhmMlwKfVwKLmFjZS1kcmFjdWxhIC5hY2Vfa2V5d29yZCB7XApjb2xvcjogI2ZmNzljNlwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjYmQ5M2Y5XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogI2JkOTNmOVwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlciB7XApjb2xvcjogI2JkOTNmOVwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3Rlci5hY2VfZXNjYXBlIHtcCmNvbG9yOiAjZmY3OWM2XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICNiZDkzZjlcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiAjOGJlOWZkXAp9XAouYWNlLWRyYWN1bGEgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XApjb2xvcjogIzZiZTVmZFwKfVwKLmFjZS1kcmFjdWxhIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3Mge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICM2NmQ5ZWZcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICM2NmQ5ZWZcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX3N0b3JhZ2Uge1wKY29sb3I6ICNmZjc5YzZcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX3N0b3JhZ2UuYWNlX3R5cGUge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICM4YmU5ZmRcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX2ludmFsaWQge1wKY29sb3I6ICNGOEY4RjA7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZmY3OWM2XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHtcCmNvbG9yOiAjRjhGOEYwO1wKYmFja2dyb3VuZC1jb2xvcjogI2JkOTNmOVwKfVwKLmFjZS1kcmFjdWxhIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjZjFmYThjXAp9XAouYWNlLWRyYWN1bGEgLmFjZV9jb21tZW50IHtcCmNvbG9yOiAjNjI3MmE0XAp9XAouYWNlLWRyYWN1bGEgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogIzUwZmE3YlwKfVwKLmFjZS1kcmFjdWxhIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogI2ZmYjg2Y1wKfVwKLmFjZS1kcmFjdWxhIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKY29sb3I6ICM1MGZhN2JcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24ge1wKY29sb3I6ICM1MGZhN2JcCn1cCi5hY2UtZHJhY3VsYSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnIHtcCmNvbG9yOiAjZmY3OWM2XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9pbnZpc2libGUge1wKY29sb3I6ICM2MjY2ODA7XAp9XAouYWNlLWRyYWN1bGEgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFa2xFUVZRSW1XTmdZR0JnWUhCM2QvOFBBQU9JQWRVTHc4cU1BQUFBQUVsRlRrU3VRbUNDKSByaWdodCByZXBlYXQteVwKfSI7CmV4cG9ydHMuJHNlbGVjdGlvbkNvbG9yQ29uZmxpY3QgPSB0cnVlOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2RyYWN1bGEiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-dreamweaver.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZHJlYW13ZWF2ZXIiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKZXhwb3J0cy5pc0RhcmsgPSBmYWxzZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtZHJlYW13ZWF2ZXIiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1kcmVhbXdlYXZlciAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKY29sb3I6ICMzMzM7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKfVwKLmFjZS1kcmVhbXdlYXZlciB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzc1N0FEODtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9jdXJzb3Ige1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX3N0b3JhZ2UsXAouYWNlLWRyZWFtd2VhdmVyIC5hY2Vfa2V5d29yZCB7XApjb2xvcjogYmx1ZTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9jb25zdGFudC5hY2VfYnVpbGRpbiB7XApjb2xvcjogcmdiKDg4LCA3MiwgMjQ2KTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6IHJnYig4OCwgOTIsIDI0Nik7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkge1wKY29sb3I6IHJnYig2LCAxNTAsIDE0KTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9pbnZhbGlkIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYigxNTMsIDAsIDApO1wKY29sb3I6IHdoaXRlO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSxcCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7XApjb2xvcjogIzAwOTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9zdXBwb3J0LmFjZV9waHBfdGFnIHtcCmNvbG9yOiAjZjAwO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCmNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjMDBGO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2NvbW1lbnQge1wKY29sb3I6IHJnYig3NiwgMTM2LCAxMDcpO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XApjb2xvcjogcmdiKDAsIDEwMiwgMjU1KTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9jb21tZW50LmFjZV9kb2MuYWNlX3RhZyB7XApjb2xvcjogcmdiKDEyOCwgMTU5LCAxOTEpO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtcCmNvbG9yOiByZ2IoMCwgMCwgMjA1KTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogIzA2RlwKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX3htbC1wZSB7XApjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzAwRjtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9oZWFkaW5nIHtcCmNvbG9yOiByZ2IoMTIsIDcsIDI1NSk7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2VfbGlzdCB7XApjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2IoMTgxLCAyMTMsIDI1NSk7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XApiYWNrZ3JvdW5kOiByZ2IoMjUyLCAyNTUsIDApO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCmJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigxOTIsIDE5MiwgMTkyKTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDcpO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yIDogI0RDRENEQztcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tZXRhLmFjZV90YWcge1wKY29sb3I6IzAwOTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tZXRhLmFjZV90YWcuYWNlX2FuY2hvciB7XApjb2xvcjojMDYwO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX21ldGEuYWNlX3RhZy5hY2VfZm9ybSB7XApjb2xvcjojRjkwO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX21ldGEuYWNlX3RhZy5hY2VfaW1hZ2Uge1wKY29sb3I6IzkwOTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tZXRhLmFjZV90YWcuYWNlX3NjcmlwdCB7XApjb2xvcjojOTAwO1wKfVwKLmFjZS1kcmVhbXdlYXZlciAuYWNlX21ldGEuYWNlX3RhZy5hY2Vfc3R5bGUge1wKY29sb3I6IzkwOTtcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9tZXRhLmFjZV90YWcuYWNlX3RhYmxlIHtcCmNvbG9yOiMwOTk7XAp9XAouYWNlLWRyZWFtd2VhdmVyIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XApjb2xvcjogcmdiKDI1NSwgMCwgMClcCn1cCi5hY2UtZHJlYW13ZWF2ZXIgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15O1wKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvZHJlYW13ZWF2ZXIiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-eclipse.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZWNsaXBzZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1lY2xpcHNlIC5hY2VfZ3V0dGVyIHtcCmJhY2tncm91bmQ6ICNlYmViZWI7XApib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2IoMTU5LCAxNTksIDE1OSk7XApjb2xvcjogcmdiKDEzNiwgMTM2LCAxMzYpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZWJlYmViO1wKfVwKLmFjZS1lY2xpcHNlIHtcCmJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9jdXJzb3Ige1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2Vfc3RvcmFnZSxcCi5hY2UtZWNsaXBzZSAuYWNlX2tleXdvcmQsXAouYWNlLWVjbGlwc2UgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogcmdiKDEyNywgMCwgODUpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4ge1wKY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XApjb2xvcjogcmdiKDYsIDE1MCwgMTQpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6IHJnYig2MCwgNzYsIDExNCk7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9zdHJpbmcge1wKY29sb3I6IHJnYig0MiwgMCwgMjU1KTtcCn1cCi5hY2UtZWNsaXBzZSAuYWNlX2NvbW1lbnQge1wKY29sb3I6IHJnYigxMTMsIDE1MCwgMTMwKTtcCn1cCi5hY2UtZWNsaXBzZSAuYWNlX2NvbW1lbnQuYWNlX2RvYyB7XApjb2xvcjogcmdiKDYzLCA5NSwgMTkxKTtcCn1cCi5hY2UtZWNsaXBzZSAuYWNlX2NvbW1lbnQuYWNlX2RvYy5hY2VfdGFnIHtcCmNvbG9yOiByZ2IoMTI3LCAxNTksIDE5MSk7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogZGFya2JsdWU7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV90YWcge1wKY29sb3I6IHJnYigyNSwgMTE4LCAxMTYpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfdHlwZSB7XApjb2xvcjogcmdiKDEyNywgMCwgMTI3KTtcCn1cCi5hY2UtZWNsaXBzZSAuYWNlX3htbC1wZSB7XApjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9tZXRhLmFjZV90YWcge1wKY29sb3I6cmdiKDI1LCAxMTgsIDExNik7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9pbnZpc2libGUge1wKY29sb3I6ICNkZGQ7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7XApjb2xvcjpyZ2IoMTI3LCAwLCAxMjcpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XApiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDApO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiKDIzMiwgMjQyLCAyNTQpO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3IgOiAjREFEQURBO1wKfVwKLmFjZS1lY2xpcHNlIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMTgxLCAyMTMsIDI1NSk7XAp9XAouYWNlLWVjbGlwc2UgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15O1wKfSI7CgpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1lY2xpcHNlIjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9lY2xpcHNlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-github.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZ2l0aHViIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1naXRodWIiOwpleHBvcnRzLmNzc1RleHQgPSAiXAouYWNlLWdpdGh1YiAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKY29sb3I6ICNBQUE7XAp9XAouYWNlLWdpdGh1YiAge1wKYmFja2dyb3VuZDogI2ZmZjtcCmNvbG9yOiAjMDAwO1wKfVwKLmFjZS1naXRodWIgLmFjZV9rZXl3b3JkIHtcCmZvbnQtd2VpZ2h0OiBib2xkO1wKfVwKLmFjZS1naXRodWIgLmFjZV9zdHJpbmcge1wKY29sb3I6ICNEMTQ7XAp9XAouYWNlLWdpdGh1YiAuYWNlX3ZhcmlhYmxlLmFjZV9jbGFzcyB7XApjb2xvcjogdGVhbDtcCn1cCi5hY2UtZ2l0aHViIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6ICMwOTk7XAp9XAouYWNlLWdpdGh1YiAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHtcCmNvbG9yOiAjMDA4NkIzO1wKfVwKLmFjZS1naXRodWIgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzAwODZCMztcCn1cCi5hY2UtZ2l0aHViIC5hY2VfY29tbWVudCB7XApjb2xvcjogIzk5ODtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCn1cCi5hY2UtZ2l0aHViIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlICB7XApjb2xvcjogIzAwODZCMztcCn1cCi5hY2UtZ2l0aHViIC5hY2VfcGFyZW4ge1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlLWdpdGh1YiAuYWNlX2Jvb2xlYW4ge1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlLWdpdGh1YiAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHtcCmNvbG9yOiAjMDA5OTI2O1wKZm9udC13ZWlnaHQ6IG5vcm1hbDtcCn1cCi5hY2UtZ2l0aHViIC5hY2VfdmFyaWFibGUuYWNlX2luc3RhbmNlIHtcCmNvbG9yOiB0ZWFsO1wKfVwKLmFjZS1naXRodWIgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKZm9udC13ZWlnaHQ6IGJvbGQ7XAp9XAouYWNlLWdpdGh1YiAuYWNlX2N1cnNvciB7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlLWdpdGh1Yi5hY2VfZm9jdXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDIwNCk7XAp9XAouYWNlLWdpdGh1YiAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6IHJnYigyNDUsIDI0NSwgMjQ1KTtcCn1cCi5hY2UtZ2l0aHViIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYigxODEsIDIxMywgMjU1KTtcCn1cCi5hY2UtZ2l0aHViLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggd2hpdGU7XAp9XAouYWNlLWdpdGh1Yi5hY2Vfbm9ib2xkIC5hY2VfbGluZSA+IHNwYW4ge1wKZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50O1wKfVwKLmFjZS1naXRodWIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwgMCk7XAp9XAouYWNlLWdpdGh1YiAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCmJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcCn1cCi5hY2UtZ2l0aHViIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAp9XAouYWNlLWdpdGh1YiAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yIDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCn1cCi5hY2UtZ2l0aHViIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMjAwLCAyMDAsIDI1MCk7XAp9XAouYWNlLWdpdGh1YiAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogI0JGQkZCRlwKfVwKLmFjZS1naXRodWIgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICNlOGU4ZTg7XAp9XAouYWNlLWdpdGh1YiAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRTBsRVFWUUltV1A0Ly8vL2Y0YkxseS8vQndBbVZnZDEvdzExL2dBQUFBQkpSVTVFcmtKZ2dnPT1cIikgcmlnaHQgcmVwZWF0LXk7XAp9IjsKCiAgICB2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwogICAgZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2dpdGh1YiJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-gob.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZ29iIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWdvYiI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLWdvYiAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMEIxODE4O1wKY29sb3I6ICMwM0VFMDNcCn1cCi5hY2UtZ29iIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjMTMxMzEzXAp9XAouYWNlLWdvYiB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMEIwQjBCO1wKY29sb3I6ICMwMEZGMDBcCn1cCi5hY2UtZ29iIC5hY2VfY3Vyc29yIHtcCmJvcmRlci1jb2xvcjogcmdiYSgxNiwgMjQ4LCAyNTUsIDAuOTApO1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNiwgMjQwLCAyNDgsIDAuNzApO1wKb3BhY2l0eTogMC40O1wKfVwKLmFjZS1nb2IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiYSgyMjEsIDI0MCwgMjU1LCAwLjIwKVwKfVwKLmFjZS1nb2IuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMTQxNDE0O1wKfVwKLmFjZS1nb2IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigxNiwgMTI4LCAwKVwKfVwKLmFjZS1nb2IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNjQsIDI1NSwgMjU1LCAwLjI1KVwKfVwKLmFjZS1nb2IgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpXAp9XAouYWNlLWdvYiAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpXAp9XAouYWNlLWdvYiAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTIsIDI0MCwgMjU1LCAwLjIwKVwKfVwKLmFjZS1nb2IgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSlcCn1cCi5hY2UtZ29iIC5hY2Vfa2V5d29yZCxcCi5hY2UtZ29iIC5hY2VfbWV0YSB7XApjb2xvcjogIzEwRDhFOFwKfVwKLmFjZS1nb2IgLmFjZV9jb25zdGFudCxcCi5hY2UtZ29iIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2UtZ29iIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3Rlci5hY2VfZXNjYXBlLFwKLmFjZS1nb2IgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIsXAouYWNlLWdvYiAuYWNlX2hlYWRpbmcsXAouYWNlLWdvYiAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyxcCi5hY2UtZ29iIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6ICMxMEYwQTBcCn1cCi5hY2UtZ29iIC5hY2VfaW52YWxpZC5hY2VfaWxsZWdhbCB7XApjb2xvcjogI0Y4RjhGODtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoODYsIDQ1LCA4NiwgMC43NSlcCn1cCi5hY2UtZ29iIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7XAp0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCmNvbG9yOiAjMjBGOEMwXAp9XAouYWNlLWdvYiAuYWNlX3N1cHBvcnQge1wKY29sb3I6ICMyMEU4QjBcCn1cCi5hY2UtZ29iIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjNTBCOEI4O1wKYm9yZGVyLWNvbG9yOiAjNzBGOEY4XAp9XAouYWNlLWdvYiAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiAjMDBGODAwXAp9XAouYWNlLWdvYiAuYWNlX2xpc3QsXAouYWNlLWdvYiAuYWNlX21hcmt1cC5hY2VfbGlzdCxcCi5hY2UtZ29iIC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogIzEwRkY5OFwKfVwKLmFjZS1nb2IgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uLFwKLmFjZS1nb2IgLmFjZV9tZXRhLmFjZV90YWcsXAouYWNlLWdvYiAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjMDBGODY4XAp9XAouYWNlLWdvYiAuYWNlX3N0cmluZyB7XApjb2xvcjogIzEwRjA2MFwKfVwKLmFjZS1nb2IgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7XApjb2xvcjogIzIwRjA5MDtcCn1cCi5hY2UtZ29iIC5hY2VfY29tbWVudCB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogIzAwRTA2MDtcCn1cCi5hY2UtZ29iIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICMwMEY4ODg7XAp9XAouYWNlLWdvYiAuYWNlX3htbC1wZSB7XApjb2xvcjogIzQ4ODg1ODtcCn1cCi5hY2UtZ29iIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV01RRVJGcFlMQzF0ZjBQQUFnT0FuUG5oeHlpQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn1cCiI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvZ29iIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-gruvbox.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvZ3J1dmJveCIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZXhwb3J0cy5pc0RhcmsgPSB0cnVlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1ncnV2Ym94IjsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtZ3J1dmJveCAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjM0MzODM2O1wKfVwKLmFjZS1ncnV2Ym94IHtcCmNvbG9yOiAjRUJEQUI0O1wKYmFja2dyb3VuZC1jb2xvcjogIzFEMjAyMTtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzUwNDk0NTtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2JhKDE3OSwgMTAxLCA1NywgMC43NSlcCn1cCi5hY2UtZ3J1dmJveC5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMwMDIyNDA7XAp9XAouYWNlLWdydXZib3ggLmFjZV9rZXl3b3JkIHtcCmNvbG9yOiAjOGVjMDdjO1wKfVwKLmFjZS1ncnV2Ym94IC5hY2VfY29tbWVudCB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogIzkyODM3NTtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlLXN0YXRlbWVudCB7XApjb2xvcjogcmVkO1wKfVwKLmFjZS1ncnV2Ym94IC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICM4NEE1OTg7XAp9XAouYWNlLWdydXZib3ggLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6ICNEMjg3OUI7XAp9XAouYWNlLWdydXZib3ggLmFjZV9jb25zdGFudCB7XApjb2xvcjogI0MyODU5QTtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogI0MyODU5QTtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtcCmNvbG9yOiAjQzI4NTlBO1wKfVwKLmFjZS1ncnV2Ym94IC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjQjhCQTM3O1wKfVwKLmFjZS1ncnV2Ym94IC5hY2Vfc3VwcG9ydCB7XApjb2xvcjogI0Y5QkM0MTtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiAjRjg0QjNDO1wKfVwKLmFjZS1ncnV2Ym94IC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogIzhGQkY3RjtcCn1cCi5hY2UtZ3J1dmJveCAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCmNvbG9yOiAjRUJEQUI0O1wKfVwKLmFjZS1ncnV2Ym94IC5hY2VfcHVuY3R1YXRpb24uYWNlX29wZXJhdG9yIHtcCmNvbG9yOiB5ZWxsb3c7XAp9XAouYWNlLWdydXZib3ggLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjM0MzODM2O1wKfVwKLmFjZS1ncnV2Ym94IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXItcmFkaXVzOiA0cHg7XApib3JkZXI6IDhweCBzb2xpZCAjM2Y0NzVkO1wKfVwKLmFjZS1ncnV2Ym94IC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiA1cHg7XApiYWNrZ3JvdW5kOiAjM0MzODM2O1wKfVwKLmFjZS1ncnV2Ym94IC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFa2xFUVZRSW1XTlFVRkQ0ejZDcnEvc2ZBQXVZQXVZbCs3bGZBQUFBQUVsRlRrU3VRbUNDXCIpIHJpZ2h0IHJlcGVhdC15O1wKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cgp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2dydXZib3giXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-idle_fingers.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvaWRsZV9maW5nZXJzIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWlkbGUtZmluZ2VycyI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLWlkbGUtZmluZ2VycyAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjM2IzYjNiO1wKY29sb3I6IHJnYigxNTMsMTUzLDE1MylcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjM2IzYjNiXAp9XAouYWNlLWlkbGUtZmluZ2VycyB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMzIzMjMyO1wKY29sb3I6ICNGRkZGRkZcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjOTFGRjAwXAp9XAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2JhKDkwLCAxMDAsIDEyNiwgMC44OClcCn1cCi5hY2UtaWRsZS1maW5nZXJzLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggIzMyMzIzMjtcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XApiYWNrZ3JvdW5kOiByZ2IoMTAyLCA4MiwgMClcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwXAp9XAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6ICMzNTM2MzdcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3I6ICMzNTM2MzdcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDkwLCAxMDAsIDEyNiwgMC44OClcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjNDA0MDQwXAp9XAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX2tleXdvcmQsXAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX21ldGEge1wKY29sb3I6ICNDQzc4MzNcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY29uc3RhbnQsXAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIuYWNlX2VzY2FwZSxcCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfY29uc3RhbnQuYWNlX290aGVyLFwKLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XApjb2xvcjogIzZDOTlCQlwKfVwKLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9pbnZhbGlkIHtcCmNvbG9yOiAjRkZGRkZGO1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGMDAwMFwKfVwKLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICNDQzc4MzM7XApib3JkZXItY29sb3I6ICNGRkZGRkZcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6ICNCODM0MjZcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XApmb250LXN0eWxlOiBpdGFsaWNcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjQTVDMjYxXAp9XAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHtcCmNvbG9yOiAjQ0NDQzMzXAp9XAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX2NvbW1lbnQge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNCQzk0NThcCn1cCi5hY2UtaWRsZS1maW5nZXJzIC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOiAjRkZFNUJCXAp9XAouYWNlLWlkbGUtZmluZ2VycyAuYWNlX2VudGl0eS5hY2VfbmFtZSB7XApjb2xvcjogI0ZGQzY2RFwKfVwKLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9jb2xsYWIuYWNlX3VzZXIxIHtcCmNvbG9yOiAjMzIzMjMyO1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGRjk4MFwKfVwKLmFjZS1pZGxlLWZpbmdlcnMgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFa2xFUVZRSW1XTXdNakx5WllpUGovOFBBQXJlQXdBSTErZzBBQUFBQUVsRlRrU3VRbUNDKSByaWdodCByZXBlYXQteVwKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvaWRsZV9maW5nZXJzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-iplastic.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvaXBsYXN0aWMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gZmFsc2U7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWlwbGFzdGljIjsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtaXBsYXN0aWMgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2RkZGRkZDtcCmNvbG9yOiAjNjY2NjY2XAp9XAouYWNlLWlwbGFzdGljIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjYmJiYmJiXAp9XAouYWNlLWlwbGFzdGljIHtcCmJhY2tncm91bmQtY29sb3I6ICNlZWVlZWU7XApjb2xvcjogIzMzMzMzM1wKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2N1cnNvciB7XApjb2xvcjogIzMzM1wKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjQkFENkZEO1wKfVwKLmFjZS1pcGxhc3RpYy5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJvcmRlci1yYWRpdXM6IDRweFwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogIzQ0NDQ0NFwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgIzQ5NDgzRTtcCmJhY2tncm91bmQ6ICNGRkY3OTlcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjZTVlNWU1XAp9XAouYWNlLWlwbGFzdGljIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3I6ICNlZWVlZWVcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkICM1NTU1NTU7XApib3JkZXItcmFkaXVzOjRweFwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzk5OTk5OVwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFwKLmFjZS1pcGxhc3RpYyAuYWNlX2tleXdvcmQsXAouYWNlLWlwbGFzdGljIC5hY2VfbWV0YS5hY2VfdGFnLFwKLmFjZS1pcGxhc3RpYyAuYWNlX3N0b3JhZ2Uge1wKY29sb3I6ICMwMDAwRkZcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9wdW5jdHVhdGlvbixcCi5hY2UtaXBsYXN0aWMgLmFjZV9wdW5jdHVhdGlvbi5hY2VfdGFnIHtcCmNvbG9yOiAjMDAwXAp9XAouYWNlLWlwbGFzdGljIC5hY2VfY29uc3RhbnQge1wKY29sb3I6ICMzMzMzMzM7XApmb250LXdlaWdodDogNzAwXAp9XAouYWNlLWlwbGFzdGljIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2UtaXBsYXN0aWMgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UsXAouYWNlLWlwbGFzdGljIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMsXAouYWNlLWlwbGFzdGljIC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjMDA2NkZGO1wKZm9udC13ZWlnaHQ6IDcwMFwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmlje1wKZm9udC13ZWlnaHQ6IDEwMFwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2ludmFsaWQge1wKY29sb3I6ICNGOEY4RjA7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRjkyNjcyXAp9XAouYWNlLWlwbGFzdGljIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7XApjb2xvcjogI0Y4RjhGMDtcCmJhY2tncm91bmQtY29sb3I6ICNBRTgxRkZcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCxcCi5hY2UtaXBsYXN0aWMgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzMzMzMzMztcCmZvbnQtd2VpZ2h0OiA3MDBcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICM0NjQ2NDY7XApib3JkZXItY29sb3I6ICNGOEY4RjJcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9zdG9yYWdlLmFjZV90eXBlLFwKLmFjZS1pcGxhc3RpYyAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFwKLmFjZS1pcGxhc3RpYyAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICMzMzMzZmM7XApmb250LXdlaWdodDogNzAwXAp9XAouYWNlLWlwbGFzdGljIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2UtaXBsYXN0aWMgLmFjZV9lbnRpdHkuYWNlX290aGVyLFwKLmFjZS1pcGxhc3RpYyAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lLFwKLmFjZS1pcGxhc3RpYyAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjMzM2NmNjO1wKZm9udC1zdHlsZTogaXRhbGljXAp9XAouYWNlLWlwbGFzdGljIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogIzI0NjlFMFwKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX3N0cmluZyB7XApjb2xvcjogI2E1NWYwM1wKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2NvbW1lbnQge1wKY29sb3I6ICM3Nzc3Nzc7XApmb250LXN0eWxlOiBpdGFsaWNcCn1cCi5hY2UtaXBsYXN0aWMgLmFjZV9mb2xkLXdpZGdldCB7XApiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQU5FbEVRVlI0Mm1XS3NRMEFNQXpDOGl4TGxyelFqem1CaUVqcDBBNld3QkNTUGdLQVhvTGtxU290N25OM3lNd1I3cFozMk56cEtrVm9EQlV4S0FBQUFBQkpSVTVFcmtKZ2dnPT0pO1wKfVwKLmFjZS1pcGxhc3RpYyAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQUJsSlJFRlVlTnBpK1AvL1B3TXpNelB6ZndBQUFBRC8vd01BR1JzRUNTTUwvUklBQUFBQVNVVk9SSzVDWUlJPSkgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2lwbGFzdGljIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-katzenmilch.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUva2F0emVubWlsY2giLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gZmFsc2U7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLWthdHplbm1pbGNoIjsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2Uta2F0emVubWlsY2ggLmFjZV9ndXR0ZXIsXAouYWNlLWthdHplbm1pbGNoIC5hY2VfZ3V0dGVyIHtcCmJhY2tncm91bmQ6ICNlOGU4ZTg7XApjb2xvcjogIzMzM1wKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogI2U4ZThlOFwKfVwKLmFjZS1rYXR6ZW5taWxjaCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmMmYzO1wKY29sb3I6IHJnYmEoMTUsIDAsIDksIDEuMClcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9jdXJzb3Ige1wKYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMTAwMDExXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2Vfb3ZlcndyaXRlLWN1cnNvcnMgLmFjZV9jdXJzb3Ige1wKYm9yZGVyLWxlZnQ6IDBweDtcCmJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMTAwMDExXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMTAwLCA1LCAyMDgsIDAuMjcpXAp9XAouYWNlLWthdHplbm1pbGNoLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggI2YzZjJmMztcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigxOTgsIDIxOSwgMTc0KVwKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjMzKTtcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2IoMjMyLCAyNDIsIDI1NClcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzMiwgMjQyLCAyNTQpXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEwMCwgNSwgMjA4LCAwLjI3KVwKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogI0JGQkZCRlwKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyLCA5NSwgNzMsIDAuOTcpO1wKYm9yZGVyLWNvbG9yOiByZ2JhKDE1LCAwLCA5LCAxLjApXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2Vfa2V5d29yZCB7XApjb2xvcjogIzY3NEFhODtcCnJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE2MywgMTcwLCAyMTYsIDAuMDU1KVwKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogIzdEN2U1MjtcCnJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4OSwgMTkwLCAxMzAsIDAuMDU5KVwKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtcCmNvbG9yOiByZ2JhKDc5LCAxMzAsIDEyMywgMC45Myk7XApyYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxMTksIDE5NCwgMTg3LCAwLjA1OSlcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX2NvbnN0YW50LmFjZV9vdGhlciB7XApjb2xvcjogcmdiYSgyLCA5NSwgMTA1LCAxLjApO1wKcmJhY2tncm91bmQtY29sb3I6IHJnYmEoMTI3LCAzNCwgMTUzLCAwLjA2MylcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzlEN2U2MjtcCnJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4OSwgMTkwLCAxMzAsIDAuMDM5KVwKfVwKLmFjZS1rYXR6ZW5taWxjaCAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzIHtcCmNvbG9yOiByZ2JhKDIzOSwgMTA2LCAxNjcsIDEuMCk7XApyYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzksIDEwNiwgMTY3LCAwLjA2MylcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9zdG9yYWdlIHtcCmNvbG9yOiByZ2JhKDEyMywgOTIsIDE5MSwgMS4wKTtcCnJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEzOSwgOTMsIDIyMywgMC4wNTEpXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfaW52YWxpZCB7XApjb2xvcjogI0RGREZENTtcCnJiYWNrZ3JvdW5kLWNvbG9yOiAjQ0MxQjI3XAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjNWE1ZjliO1wKcmJhY2tncm91bmQtY29sb3I6IHJnYmEoMTcwLCAxNzUsIDIxOSwgMC4wMzUpXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfY29tbWVudCB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogcmdiYSg2NCwgNzksIDgwLCAwLjY3KTtcCnJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDk1LCAxNSwgMjU1LCAwLjAwNzgpXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2Uta2F0emVubWlsY2ggLmFjZV92YXJpYWJsZSB7XApjb2xvcjogcmdiYSgyLCA5NSwgNzMsIDAuOTcpO1wKcmJhY2tncm91bmQtY29sb3I6IHJnYmEoMzQsIDI1NSwgNzMsIDAuMTIpXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjMzE2ZmNmO1wKcmJhY2tncm91bmQtY29sb3I6IHJnYmEoNTgsIDE3NSwgMjU1LCAwLjAzOSlcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV92YXJpYWJsZS5hY2VfcGFyYW1ldGVyIHtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCmNvbG9yOiByZ2JhKDUxLCAxNTAsIDE1OSwgMC44Nyk7XApyYmFja2dyb3VuZC1jb2xvcjogcmdiYSg1LCAyMTQsIDI0OSwgMC4wNDMpXAp9XAouYWNlLWthdHplbm1pbGNoIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKY29sb3I6IHJnYmEoNzMsIDcwLCAxOTQsIDAuOTMpO1wKcmJhY2tncm91bmQtY29sb3I6IHJnYmEoNzMsIDEzNCwgMTk0LCAwLjAzNSlcCn1cCi5hY2Uta2F0emVubWlsY2ggLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX3RhZyB7XApjb2xvcjogIzM5NzZhMjtcCnJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDczLCAxNjYsIDIxMCwgMC4wMzkpXAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9rYXR6ZW5taWxjaCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-kr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUva3JfdGhlbWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLGZ1bmN0aW9uKGUsdCxuKXt0LmlzRGFyaz0hMCx0LmNzc0NsYXNzPSJhY2Uta3ItdGhlbWUiLHQuY3NzVGV4dD0iLmFjZS1rci10aGVtZSAuYWNlX2d1dHRlciB7YmFja2dyb3VuZDogIzFjMTkxNztjb2xvcjogI0ZDRkZFMH0uYWNlLWtyLXRoZW1lIC5hY2VfcHJpbnQtbWFyZ2luIHt3aWR0aDogMXB4O2JhY2tncm91bmQ6ICMxYzE5MTd9LmFjZS1rci10aGVtZSB7YmFja2dyb3VuZC1jb2xvcjogIzBCMEEwOTtjb2xvcjogI0ZDRkZFMH0uYWNlLWtyLXRoZW1lIC5hY2VfY3Vyc29yIHtib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRjk5MDB9LmFjZS1rci10aGVtZSAuYWNlX292ZXJ3cml0ZS1jdXJzb3JzIC5hY2VfY3Vyc29yIHtib3JkZXItbGVmdDogMHB4O2JvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRkY5OTAwfS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge2JhY2tncm91bmQ6IHJnYmEoMTcwLCAwLCAyNTUsIDAuNDUpfS5hY2Uta3ItdGhlbWUuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7Ym94LXNoYWRvdzogMCAwIDNweCAwcHggIzBCMEEwOTtib3JkZXItcmFkaXVzOiAycHh9LmFjZS1rci10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge2JhY2tncm91bmQ6IHJnYigxMDIsIDgyLCAwKX0uYWNlLWtyLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7bWFyZ2luOiAtMXB4IDAgMCAtMXB4O2JvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxNzcsIDExMSwgMC4zMil9LmFjZS1rci10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtiYWNrZ3JvdW5kOiAjMzg0MDNEfS5hY2Uta3ItdGhlbWUgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge2JhY2tncm91bmQtY29sb3IgOiAjMzg0MDNEfS5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE3MCwgMCwgMjU1LCAwLjQ1KX0uYWNlLWtyLXRoZW1lIC5hY2VfaW52aXNpYmxlIHtjb2xvcjogcmdiYSgyNTUsIDE3NywgMTExLCAwLjMyKX0uYWNlLWtyLXRoZW1lIC5hY2Vfa2V5d29yZCwuYWNlLWtyLXRoZW1lIC5hY2VfbWV0YSB7Y29sb3I6ICM5NDlDOEJ9LmFjZS1rci10aGVtZSAuYWNlX2NvbnN0YW50LC5hY2Uta3ItdGhlbWUgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLC5hY2Uta3ItdGhlbWUgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lc2NhcGUsLmFjZS1rci10aGVtZSAuYWNlX2NvbnN0YW50LmFjZV9vdGhlciB7Y29sb3I6IHJnYmEoMjEwLCAxMTcsIDI0LCAwLjc2KX0uYWNlLWtyLXRoZW1lIC5hY2VfaW52YWxpZCB7Y29sb3I6ICNGOEY4Rjg7YmFja2dyb3VuZC1jb2xvcjogI0E0MTMwMH0uYWNlLWtyLXRoZW1lIC5hY2Vfc3VwcG9ydCB7Y29sb3I6ICM5RkMyOEF9LmFjZS1rci10aGVtZSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtjb2xvcjogI0MyN0U2Nn0uYWNlLWtyLXRoZW1lIC5hY2VfZm9sZCB7YmFja2dyb3VuZC1jb2xvcjogIzk0OUM4Qjtib3JkZXItY29sb3I6ICNGQ0ZGRTB9LmFjZS1rci10aGVtZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtjb2xvcjogIzg1ODczQX0uYWNlLWtyLXRoZW1lIC5hY2Vfc3RvcmFnZSB7Y29sb3I6ICNGRkVFODB9LmFjZS1rci10aGVtZSAuYWNlX3N0cmluZyB7Y29sb3I6IHJnYmEoMTY0LCAxNjEsIDE4MSwgMC44KX0uYWNlLWtyLXRoZW1lIC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAge2NvbG9yOiByZ2JhKDEyNSwgMjU1LCAxOTIsIDAuNjUpfS5hY2Uta3ItdGhlbWUgLmFjZV9jb21tZW50IHtmb250LXN0eWxlOiBpdGFsaWM7Y29sb3I6ICM3MDZENUJ9LmFjZS1rci10aGVtZSAuYWNlX3ZhcmlhYmxlIHtjb2xvcjogI0QxQTc5Nn0uYWNlLWtyLXRoZW1lIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHtjb2xvcjogI0ZGODBFMX0uYWNlLWtyLXRoZW1lIC5hY2VfbWV0YS5hY2VfdGFnIHtjb2xvcjogI0JBQkQ5Q30uYWNlLWtyLXRoZW1lIC5hY2VfbGlzdCB7YmFja2dyb3VuZC1jb2xvcjogIzBGMDA0MH0uYWNlLWtyLXRoZW1lIC5hY2VfaW5kZW50LWd1aWRlIHtiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZRkJYVi84UEFBSm9BWFg0a1QyRUFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15O30iO3ZhciByPWUoIi4uL2xpYi9kb20iKTtyLmltcG9ydENzc1N0cmluZyh0LmNzc1RleHQsdC5jc3NDbGFzcyl9KQ==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-kr_theme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUva3JfdGhlbWUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2Uta3ItdGhlbWUiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1rci10aGVtZSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMWMxOTE3O1wKY29sb3I6ICNGQ0ZGRTBcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMxYzE5MTdcCn1cCi5hY2Uta3ItdGhlbWUge1wKYmFja2dyb3VuZC1jb2xvcjogIzBCMEEwOTtcCmNvbG9yOiAjRkNGRkUwXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkY5OTAwXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMTcwLCAwLCAyNTUsIDAuNDUpXAp9XAouYWNlLWtyLXRoZW1lLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggIzBCMEEwOTtcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigxMDIsIDgyLCAwKVwKfVwKLmFjZS1rci10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE3NywgMTExLCAwLjMyKVwKfVwKLmFjZS1rci10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6ICMzODQwM0RcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvciA6ICMzODQwM0RcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTcwLCAwLCAyNTUsIDAuNDUpXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiByZ2JhKDI1NSwgMTc3LCAxMTEsIDAuMzIpXAp9XAouYWNlLWtyLXRoZW1lIC5hY2Vfa2V5d29yZCxcCi5hY2Uta3ItdGhlbWUgLmFjZV9tZXRhIHtcCmNvbG9yOiAjOTQ5QzhCXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfY29uc3RhbnQsXAouYWNlLWtyLXRoZW1lIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2Uta3ItdGhlbWUgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lc2NhcGUsXAouYWNlLWtyLXRoZW1lIC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiByZ2JhKDIxMCwgMTE3LCAyNCwgMC43NilcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9pbnZhbGlkIHtcCmNvbG9yOiAjRjhGOEY4O1wKYmFja2dyb3VuZC1jb2xvcjogI0E0MTMwMFwKfVwKLmFjZS1rci10aGVtZSAuYWNlX3N1cHBvcnQge1wKY29sb3I6ICM5RkMyOEFcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCB7XApjb2xvcjogI0MyN0U2NlwKfVwKLmFjZS1rci10aGVtZSAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzk0OUM4QjtcCmJvcmRlci1jb2xvcjogI0ZDRkZFMFwKfVwKLmFjZS1rci10aGVtZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiAjODU4NzNBXAp9XAouYWNlLWtyLXRoZW1lIC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogI0ZGRUU4MFwKfVwKLmFjZS1rci10aGVtZSAuYWNlX3N0cmluZyB7XApjb2xvcjogcmdiYSgxNjQsIDE2MSwgMTgxLCAwLjgpXAp9XAouYWNlLWtyLXRoZW1lIC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAge1wKY29sb3I6IHJnYmEoMTI1LCAyNTUsIDE5MiwgMC42NSlcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9jb21tZW50IHtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCmNvbG9yOiAjNzA2RDVCXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICNEMUE3OTZcCn1cCi5hY2Uta3ItdGhlbWUgLmFjZV9saXN0LFwKLmFjZS1rci10aGVtZSAuYWNlX21hcmt1cC5hY2VfbGlzdCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMEYwMDQwXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjRkY4MEUxXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOiAjQkFCRDlDXAp9XAouYWNlLWtyLXRoZW1lIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV05nWUdCZ1lGQlhWLzhQQUFKb0FYWDRrVDJFQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2tyX3RoZW1lIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-kuroir.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUva3Vyb2lyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1rdXJvaXIiOwpleHBvcnRzLmNzc1RleHQgPSAiXAouYWNlLWt1cm9pciAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKY29sb3I6ICMzMzM7XAp9XAouYWNlLWt1cm9pciAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogI2U4ZThlODtcCn1cCi5hY2Uta3Vyb2lyIHtcCmJhY2tncm91bmQtY29sb3I6ICNFOEU5RTg7XApjb2xvcjogIzM2MzYzNjtcCn1cCi5hY2Uta3Vyb2lyIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjMjAyMDIwO1wKfVwKLmFjZS1rdXJvaXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiYSgyNDUsIDE3MCwgMCwgMC41Nyk7XAp9XAouYWNlLWt1cm9pci5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICNFOEU5RTg7XAp9XAouYWNlLWt1cm9pciAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpO1wKfVwKLmFjZS1rdXJvaXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4yOSk7XAp9XAouYWNlLWt1cm9pciAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6IHJnYmEoMjAzLCAyMjAsIDQ3LCAwLjIyKTtcCn1cCi5hY2Uta3Vyb2lyIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoMjAzLCAyMjAsIDQ3LCAwLjIyKTtcCn1cCi5hY2Uta3Vyb2lyIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI0NSwgMTcwLCAwLCAwLjU3KTtcCn1cCi5hY2Uta3Vyb2lyIC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjQkZCRkJGXAp9XAouYWNlLWt1cm9pciAuYWNlX2ZvbGQge1wKYm9yZGVyLWNvbG9yOiAjMzYzNjM2O1wKfVwKLmFjZS1rdXJvaXIgLmFjZV9jb25zdGFudHtjb2xvcjojQ0Q2ODM5O30uYWNlLWt1cm9pciAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmlje2NvbG9yOiM5QTU5MjU7fS5hY2Uta3Vyb2lyIC5hY2Vfc3VwcG9ydHtjb2xvcjojMTA0RThCO30uYWNlLWt1cm9pciAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9ue2NvbG9yOiMwMDUyNzM7fS5hY2Uta3Vyb2lyIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnR7Y29sb3I6I0NGNkE0Qzt9LmFjZS1rdXJvaXIgLmFjZV9zdG9yYWdle2NvbG9yOiNBNTJBMkE7fS5hY2Uta3Vyb2lyIC5hY2VfaW52YWxpZC5hY2VfaWxsZWdhbHtjb2xvcjojRkQxMjI0O1wKYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgNiwgMCwgMC4xNSk7fS5hY2Uta3Vyb2lyIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wKZm9udC1zdHlsZTppdGFsaWM7XApjb2xvcjojRkQxNzMyO1wKYmFja2dyb3VuZC1jb2xvcjojRThFOUU4O30uYWNlLWt1cm9pciAuYWNlX3N0cmluZ3tjb2xvcjojNjM5MzAwO30uYWNlLWt1cm9pciAuYWNlX3N0cmluZy5hY2VfcmVnZXhwe2NvbG9yOiM0MTdFMDA7XApiYWNrZ3JvdW5kLWNvbG9yOiNDOUQ0QkU7fS5hY2Uta3Vyb2lyIC5hY2VfY29tbWVudHtjb2xvcjpyZ2JhKDE0OCwgMTQ4LCAxNDgsIDAuOTEpO1wKYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIyMCwgMjIwLCAyMjAsIDAuNTYpO30uYWNlLWt1cm9pciAuYWNlX3ZhcmlhYmxle2NvbG9yOiMwMDlBQ0Q7fS5hY2Uta3Vyb2lyIC5hY2VfbWV0YS5hY2VfdGFne2NvbG9yOiMwMDUyNzM7fS5hY2Uta3Vyb2lyIC5hY2VfbWFya3VwLmFjZV9oZWFkaW5ne2NvbG9yOiNCODAxMkQ7XApiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTkxLCA5NywgNTEsIDAuMDUxKTt9LmFjZS1rdXJvaXIgLmFjZV9tYXJrdXAuYWNlX2xpc3R7Y29sb3I6IzhGNUIyNjt9XAoiOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL2t1cm9pciJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-merbivore.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbWVyYml2b3JlIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLW1lcmJpdm9yZSI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLW1lcmJpdm9yZSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMjAyMDIwO1wKY29sb3I6ICNFNkUxRENcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjNTU1NjUxXAp9XAouYWNlLW1lcmJpdm9yZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMTYxNjE2O1wKY29sb3I6ICNFNkUxRENcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjNDU0NTQ1XAp9XAouYWNlLW1lcmJpdm9yZS5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMxNjE2MTY7XAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgIzQwNDA0MFwKfVwKLmFjZS1tZXJiaXZvcmUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjMzMzNDM1XAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzNDM1XAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKYm9yZGVyOiAxcHggc29saWQgIzQ1NDU0NVwKfVwKLmFjZS1tZXJiaXZvcmUgLmFjZV9pbnZpc2libGUge1wKY29sb3I6ICM0MDQwNDBcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLW1lcmJpdm9yZSAuYWNlX2tleXdvcmQsXAouYWNlLW1lcmJpdm9yZSAuYWNlX21ldGEsXAouYWNlLW1lcmJpdm9yZSAuYWNlX21ldGEuYWNlX3RhZyxcCi5hY2UtbWVyYml2b3JlIC5hY2Vfc3RvcmFnZSxcCi5hY2UtbWVyYml2b3JlIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6ICNGQzZGMDlcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfY29uc3RhbnQsXAouYWNlLW1lcmJpdm9yZSAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLW1lcmJpdm9yZSAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIuYWNlX2VzY2FwZSxcCi5hY2UtbWVyYml2b3JlIC5hY2VfY29uc3RhbnQuYWNlX290aGVyLFwKLmFjZS1tZXJiaXZvcmUgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjMUVEQUZCXAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIuYWNlX2VzY2FwZSB7XApjb2xvcjogIzUxOUY1MFwKfVwKLmFjZS1tZXJiaXZvcmUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6ICNGREMyNTFcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnksXAouYWNlLW1lcmJpdm9yZSAuYWNlX3N0cmluZyxcCi5hY2UtbWVyYml2b3JlIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6ICM4REZGMEFcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6ICM1OEM1NTRcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfaW52YWxpZCB7XApjb2xvcjogI0ZGRkZGRjtcCmJhY2tncm91bmQtY29sb3I6ICM5OTAwMDBcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkM2RjA5O1wKYm9yZGVyLWNvbG9yOiAjRTZFMURDXAp9XAouYWNlLW1lcmJpdm9yZSAuYWNlX2NvbW1lbnQge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNBRDJFQTRcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKY29sb3I6ICNGRkZGODlcCn1cCi5hY2UtbWVyYml2b3JlIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV01RRnhmM1pYQjFkZjBQQUFkc0FtRVJUa0VIQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL21lcmJpdm9yZSJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-merbivore_soft.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbWVyYml2b3JlX3NvZnQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtbWVyYml2b3JlLXNvZnQiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMjYyNDI0O1wKY29sb3I6ICNFNkUxRENcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMyNjI0MjRcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQge1wKYmFja2dyb3VuZC1jb2xvcjogIzFDMUMxQztcCmNvbG9yOiAjRTZFMURDXAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6ICM0OTQ5NDlcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMUMxQzFDO1wKfVwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwXAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogIzMzMzQzNVwKfVwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzNDM1XAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjNDk0OTQ5XAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjNDA0MDQwXAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2Vfa2V5d29yZCxcCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9tZXRhLFwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21ldGEuYWNlX3RhZyxcCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9zdG9yYWdlIHtcCmNvbG9yOiAjRkM4MDNBXAp9XAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQsXAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lc2NhcGUsXAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfY29uc3RhbnQuYWNlX290aGVyLFwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICM2OEMxRDhcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lc2NhcGUge1wKY29sb3I6ICNCM0U1QjRcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6ICNFMUM1ODJcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSxcCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9zdHJpbmcsXAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6ICM4RUM2NUZcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogIzdGQzU3OFwKfVwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2ludmFsaWQsXAouYWNlLW1lcmJpdm9yZS1zb2Z0IC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7XApjb2xvcjogI0ZGRkZGRjtcCmJhY2tncm91bmQtY29sb3I6ICNGRTM4MzhcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICNGQzgwM0E7XApib3JkZXItY29sb3I6ICNFNkUxRENcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9jb21tZW50LFwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX21ldGEge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNBQzRCQjhcCn1cCi5hY2UtbWVyYml2b3JlLXNvZnQgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSB7XApjb2xvcjogI0VBRjFBM1wKfVwKLmFjZS1tZXJiaXZvcmUtc29mdCAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdPUWtwTHlaZkQwOVB3UEFBZllBbmFTdHBIUkFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9tZXJiaXZvcmVfc29mdCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-monokai.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbW9ub2thaSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZXhwb3J0cy5pc0RhcmsgPSB0cnVlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1tb25va2FpIjsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtbW9ub2thaSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMkYzMTI5O1wKY29sb3I6ICM4RjkwOEFcCn1cCi5hY2UtbW9ub2thaSAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogIzU1NTY1MVwKfVwKLmFjZS1tb25va2FpIHtcCmJhY2tncm91bmQtY29sb3I6ICMyNzI4MjI7XApjb2xvcjogI0Y4RjhGMlwKfVwKLmFjZS1tb25va2FpIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRjhGOEYwXAp9XAouYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogIzQ5NDgzRVwKfVwKLmFjZS1tb25va2FpLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggIzI3MjgyMjtcCn1cCi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0VcCn1cCi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6ICMyMDIwMjBcCn1cCi5hY2UtbW9ub2thaSAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMjcyNzI3XAp9XAouYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0VcCn1cCi5hY2UtbW9ub2thaSAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzUyNTI0ZFwKfVwKLmFjZS1tb25va2FpIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLW1vbm9rYWkgLmFjZV9rZXl3b3JkLFwKLmFjZS1tb25va2FpIC5hY2VfbWV0YS5hY2VfdGFnLFwKLmFjZS1tb25va2FpIC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogI0Y5MjY3MlwKfVwKLmFjZS1tb25va2FpIC5hY2VfcHVuY3R1YXRpb24sXAouYWNlLW1vbm9rYWkgLmFjZV9wdW5jdHVhdGlvbi5hY2VfdGFnIHtcCmNvbG9yOiAjZmZmXAp9XAouYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS1tb25va2FpIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlLFwKLmFjZS1tb25va2FpIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMsXAouYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICNBRTgxRkZcCn1cCi5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQge1wKY29sb3I6ICNGOEY4RjA7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRjkyNjcyXAp9XAouYWNlLW1vbm9rYWkgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHtcCmNvbG9yOiAjRjhGOEYwO1wKYmFja2dyb3VuZC1jb2xvcjogI0FFODFGRlwKfVwKLmFjZS1tb25va2FpIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQsXAouYWNlLW1vbm9rYWkgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzY2RDlFRlwKfVwKLmFjZS1tb25va2FpIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjQTZFMjJFO1wKYm9yZGVyLWNvbG9yOiAjRjhGOEYyXAp9XAouYWNlLW1vbm9rYWkgLmFjZV9zdG9yYWdlLmFjZV90eXBlLFwKLmFjZS1tb25va2FpIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MsXAouYWNlLW1vbm9rYWkgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmZvbnQtc3R5bGU6IGl0YWxpYztcCmNvbG9yOiAjNjZEOUVGXAp9XAouYWNlLW1vbm9rYWkgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uLFwKLmFjZS1tb25va2FpIC5hY2VfZW50aXR5LmFjZV9vdGhlcixcCi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lLFwKLmFjZS1tb25va2FpIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICNBNkUyMkVcCn1cCi5hY2UtbW9ub2thaSAuYWNlX3ZhcmlhYmxlLmFjZV9wYXJhbWV0ZXIge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNGRDk3MUZcCn1cCi5hY2UtbW9ub2thaSAuYWNlX3N0cmluZyB7XApjb2xvcjogI0U2REI3NFwKfVwKLmFjZS1tb25va2FpIC5hY2VfY29tbWVudCB7XApjb2xvcjogIzc1NzE1RVwKfVwKLmFjZS1tb25va2FpIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV1BRMEZEMFpYQnpkL3dQQUFqVkFveGVTZ05lQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL21vbm9rYWkiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-mono_industrial.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvbW9ub19pbmR1c3RyaWFsIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLW1vbm8taW5kdXN0cmlhbCI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMWQyNTIxO1wKY29sb3I6ICNDNUM5QzlcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjNTU1NjUxXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMjIyQzI4O1wKY29sb3I6ICNGRkZGRkZcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2JhKDE0NSwgMTUzLCAxNDgsIDAuNDApXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbC5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMyMjJDMjg7XAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMDIsIDEwOCwgMTA0LCAwLjUwKVwKfVwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiByZ2JhKDEyLCAxMywgMTIsIDAuMjUpXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEyLCAxMywgMTIsIDAuMjUpXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDUsIDE1MywgMTQ4LCAwLjQwKVwKfVwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoMTAyLCAxMDgsIDEwNCwgMC41MClcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfc3RyaW5nIHtcCmJhY2tncm91bmQtY29sb3I6ICMxNTFDMTk7XApjb2xvcjogI0ZGRkZGRlwKfVwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9rZXl3b3JkLFwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9tZXRhIHtcCmNvbG9yOiAjQTM5RTY0XAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2NvbnN0YW50LFwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lc2NhcGUsXAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljLFwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICNFOTg4MDBcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3IsXAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjQThCM0FCXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2ludmFsaWQge1wKY29sb3I6ICNGRkZGRkY7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1MywgMCwgMCwgMC42OClcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6ICNDODc1MDBcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjQThCM0FCO1wKYm9yZGVyLWNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiAjNTg4RTYwXAp9XAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX2VudGl0eS5hY2VfbmFtZSxcCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MsXAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICM1Nzc4QjZcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogI0MyM0IwMFwKfVwKLmFjZS1tb25vLWluZHVzdHJpYWwgLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2UsXAouYWNlLW1vbm8taW5kdXN0cmlhbCAuYWNlX3ZhcmlhYmxlLmFjZV9wYXJhbWV0ZXIge1wKY29sb3I6ICM2NDhCRDJcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfY29tbWVudCB7XApjb2xvcjogIzY2NkM2ODtcCmJhY2tncm91bmQtY29sb3I6ICMxNTFDMTlcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKY29sb3I6ICM5MDk5OTNcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcge1wKY29sb3I6ICNBNjVFRkZcCn1cCi5hY2UtbW9uby1pbmR1c3RyaWFsIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV05RMU5id1pmQUxELzRQQUFsVEFybEVDNHIvQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL21vbm9faW5kdXN0cmlhbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-pastel_on_dark.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvcGFzdGVsX29uX2RhcmsiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtcGFzdGVsLW9uLWRhcmsiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMzUzMDMwO1wKY29sb3I6ICM4RjkzOEZcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMzNTMwMzBcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsge1wKYmFja2dyb3VuZC1jb2xvcjogIzJDMjgyODtcCmNvbG9yOiAjOEY5MzhGXAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjQTdBN0E3XAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMClcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMkMyODI4O1wKfVwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpXAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSlcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSlcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMClcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSlcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9rZXl3b3JkLFwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX21ldGEge1wKY29sb3I6ICM3NTdhRDhcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudCxcCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIuYWNlX2VzY2FwZSxcCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICM0RkI3QzVcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XApjb2xvcjogIzc5Nzg3OFwKfVwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIge1wKY29sb3I6ICNBRkE0NzJcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6ICNERThFMzBcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogI0NDQ0NDQ1wKfVwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX2ludmFsaWQsXAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfaW52YWxpZC5hY2VfaWxsZWdhbCB7XApjb2xvcjogI0Y4RjhGODtcCmJhY2tncm91bmQtY29sb3I6IHJnYmEoODYsIDQ1LCA4NiwgMC43NSlcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHtcCnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICNEMkE4QTFcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICM3NTdhRDg7XApib3JkZXItY29sb3I6ICM4RjkzOEZcCn1cCi5hY2UtcGFzdGVsLW9uLWRhcmsgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogI0FFQjJGOFwKfVwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3N0cmluZyB7XApjb2xvcjogIzY2QTk2OFwKfVwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHtcCmNvbG9yOiAjRTlDMDYyXAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfY29tbWVudCB7XApjb2xvcjogI0E2QzZGRlwKfVwKLmFjZS1wYXN0ZWwtb24tZGFyayAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjQkVCRjU1XAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfdmFyaWFibGUuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjQzFDMTQ0XAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfeG1sLXBlIHtcCmNvbG9yOiAjNDk0OTQ5XAp9XAouYWNlLXBhc3RlbC1vbi1kYXJrIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV05nWUdCZ1lJaVBqLzhQQUFSZ0FoMk5UTWg4QUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL3Bhc3RlbF9vbl9kYXJrIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-solarized_dark.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvc29sYXJpemVkX2RhcmsiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2Utc29sYXJpemVkLWRhcmsiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMDEzMTNmO1wKY29sb3I6ICNkMGVkZjdcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMzMzU1NUVcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsge1wKYmFja2dyb3VuZC1jb2xvcjogIzAwMkIzNjtcCmNvbG9yOiAjOTNBMUExXAp9XAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUsXAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogIzkzQTFBMVwKfVwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2N1cnNvcixcCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCB7XApjb2xvcjogI0QzMDEwMlwKfVwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lLFwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSlcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMDAyQjM2O1wKfVwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0NywgMTYxLCAxNjEsIDAuNTApXAp9XAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3I6ICMwZDM0NDBcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkICMwNzM2NDJcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoMTQ3LCAxNjEsIDE2MSwgMC41MClcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9rZXl3b3JkLFwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX21ldGEsXAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2Vfc3VwcG9ydC5hY2VfY2xhc3MsXAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogIzg1OTkwMFwKfVwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjQ0I0QjE2XAp9XAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjQjU4OTAwXAp9XAouYWNlLXNvbGFyaXplZC1kYXJrIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6ICNEMzM2ODJcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICMyNjhCRDI7XApib3JkZXItY29sb3I6ICM5M0ExQTFcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uLFwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uLFwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3ZhcmlhYmxlLFwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3ZhcmlhYmxlLmFjZV9sYW5ndWFnZSB7XApjb2xvcjogIzI2OEJEMlwKfVwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX3N0cmluZyB7XApjb2xvcjogIzJBQTE5OFwKfVwKLmFjZS1zb2xhcml6ZWQtZGFyayAuYWNlX2NvbW1lbnQge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICM2NTdCODNcCn1cCi5hY2Utc29sYXJpemVkLWRhcmsgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFa2xFUVZRSW1XTmcwRGIxWlZDeGMvc1BBQWQ0QWxVSGxMZW5BQUFBQUVsRlRrU3VRbUNDKSByaWdodCByZXBlYXQteVwKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvc29sYXJpemVkX2RhcmsiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-solarized_light.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvc29sYXJpemVkX2xpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1zb2xhcml6ZWQtbGlnaHQiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2ZiZjFkMztcCmNvbG9yOiAjMzMzXAp9XAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogI2U4ZThlOFwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZERjZFMztcCmNvbG9yOiAjNTg2RTc1XAp9XAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2N1cnNvciB7XApjb2xvcjogIzAwMDAwMFwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiYSg3LCA1NCwgNjcsIDAuMDkpXAp9XAouYWNlLXNvbGFyaXplZC1saWdodC5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICNGREY2RTM7XAp9XAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAwKVwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTQ3LCAxNjEsIDE2MSwgMC41MClcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogI0VFRThENVwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvciA6ICNFREU1QzFcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjN2Y5MzkwXAp9XAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogcmdiYSgxNDcsIDE2MSwgMTYxLCAwLjUwKVwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9rZXl3b3JkLFwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9tZXRhLFwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyxcCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogIzg1OTkwMFwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICNDQjRCMTZcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlIHtcCmNvbG9yOiAjQjU4OTAwXAp9XAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljIHtcCmNvbG9yOiAjRDMzNjgyXAp9XAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzI2OEJEMjtcCmJvcmRlci1jb2xvcjogIzU4NkU3NVwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uLFwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX3RhZyxcCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24sXAouYWNlLXNvbGFyaXplZC1saWdodCAuYWNlX3ZhcmlhYmxlLFwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV92YXJpYWJsZS5hY2VfbGFuZ3VhZ2Uge1wKY29sb3I6ICMyNjhCRDJcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3RvcmFnZSB7XApjb2xvcjogIzA3MzY0MlwKfVwKLmFjZS1zb2xhcml6ZWQtbGlnaHQgLmFjZV9zdHJpbmcge1wKY29sb3I6ICMyQUExOThcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAge1wKY29sb3I6ICNEMzAxMDJcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfY29tbWVudCxcCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKY29sb3I6ICM5M0ExQTFcCn1cCi5hY2Utc29sYXJpemVkLWxpZ2h0IC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV05nWUdCZ1lIank4TkovQUFqZ0E1ZnpRVW1CQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL3NvbGFyaXplZF9saWdodCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-sqlserver.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvc3Fsc2VydmVyIixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IGZhbHNlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS1zcWxzZXJ2ZXIiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS1zcWxzZXJ2ZXIgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2ViZWJlYjtcCmNvbG9yOiAjMzMzO1wKb3ZlcmZsb3c6IGhpZGRlbjtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKfVwKLmFjZS1zcWxzZXJ2ZXIge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCmNvbG9yOiBibGFjaztcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfaWRlbnRpZmllciB7XApjb2xvcjogYmxhY2s7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX2tleXdvcmQge1wKY29sb3I6ICMwMDAwRkY7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX251bWVyaWMge1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9zdG9yYWdlIHtcCmNvbG9yOiAjMTFCN0JFO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvcixcCi5hY2Utc3Fsc2VydmVyIC5hY2VfbHBhcmVuLFwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9ycGFyZW4sXAouYWNlLXNxbHNlcnZlciAuYWNlX3B1bmN0dWF0aW9uIHtcCmNvbG9yOiAjODA4MDgwO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9zZXQuYWNlX3N0YXRlbWVudCB7XApjb2xvcjogIzAwMDBGRjtcCnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9jdXJzb3Ige1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYigxOTEsIDE5MSwgMTkxKTtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfY29uc3RhbnQuYWNlX2J1aWxkaW4ge1wKY29sb3I6IHJnYig4OCwgNzIsIDI0Nik7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogIzk3OTc5NztcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfY29uc3RhbnQuYWNlX2xpYnJhcnkge1wKY29sb3I6IHJnYig2LCAxNTAsIDE0KTtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfaW52YWxpZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTUzLCAwLCAwKTtcCmNvbG9yOiB3aGl0ZTtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24ge1wKY29sb3I6ICNGRjAwRkY7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX2NsYXNzIHtcCmNvbG9yOiAjMDA4MDgwO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9zdXBwb3J0LmFjZV9vdGhlciB7XApjb2xvcjogIzZENzlERTtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogI0ZEOTcxRjtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfY29tbWVudCB7XApjb2xvcjogIzAwODAwMDtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogcmdiKDQ5LCAxMzIsIDE0OSk7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX3htbC1wZSB7XApjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX3N1cHBvcnQuYWNlX3N0b3JlZHByb2NlZHVyZSB7XApjb2xvcjogIzgwMDAwMDtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfaGVhZGluZyB7XApjb2xvcjogcmdiKDEyLCA3LCAyNTUpO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9saXN0IHtcCmNvbG9yOiByZ2IoMTg1LCA2LCAxNDQpO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigyNTIsIDI1NSwgMCk7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0YWNrIHtcCmJhY2tncm91bmQ6IHJnYigxNjQsIDIyOSwgMTAxKTtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wNyk7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjZGNkY2RjO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJhY2tncm91bmQ6IHJnYigyNTAsIDI1MCwgMjU1KTtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYigyMDAsIDIwMCwgMjUwKTtcCn1cCi5hY2Utc3Fsc2VydmVyIC5hY2VfbWV0YS5hY2VfdGFnIHtcCmNvbG9yOiAjMDAwMEZGO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4IHtcCmNvbG9yOiAjRkYwMDAwO1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9zdHJpbmcge1wKY29sb3I6ICNGRjAwMDA7XAp9XAouYWNlLXNxbHNlcnZlciAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lIHtcCmNvbG9yOiAjOTk0NDA5O1wKfVwKLmFjZS1zcWxzZXJ2ZXIgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09XCIpIHJpZ2h0IHJlcGVhdC15O1wKfVwKIjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS9zcWxzZXJ2ZXIiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-terminal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdGVybWluYWwiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdGVybWluYWwtdGhlbWUiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMWEwMDA1O1wKY29sb3I6IHN0ZWVsYmx1ZVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogIzFhMWExYVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiBibGFjaztcCmNvbG9yOiAjREVERURFXAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjOUY5RjlGXAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6ICM0MjQyNDJcCn1cCi5hY2UtdGVybWluYWwtdGhlbWUuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCBibGFjaztcCn1cCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigwLCAwLCAwKVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKYmFja2dyb3VuZDogIzA5MDtcCn1cCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0LXN0YXJ0IHtcCmJhY2tncm91bmQ6ICMwOTA7XAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldC11bm1hdGNoZWQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgIzkwMFwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQ6ICMyQTJBMkFcCn1cCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogIzJBMTEyQVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MlwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzM0MzQzNFwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2tleXdvcmQsXAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfbWV0YSxcCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9zdG9yYWdlLFwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX3N0b3JhZ2UuYWNlX3R5cGUsXAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogdG9tYXRvXAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6IGRlZXBwaW5rXAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UsXAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMsXAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2Vfa2V5d29yZC5hY2Vfb3RoZXIuYWNlX3VuaXQsXAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQsXAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XApjb2xvcjogI0U3OEM0NVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2NvbnN0YW50LmFjZV9vdGhlciB7XApjb2xvcjogZ29sZFwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2ludmFsaWQge1wKY29sb3I6IHllbGxvdztcCmJhY2tncm91bmQtY29sb3I6IHJlZFwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQge1wKY29sb3I6ICNDRUQyQ0Y7XApiYWNrZ3JvdW5kLWNvbG9yOiAjQjc5OEJGXAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjN0FBNkRBO1wKYm9yZGVyLWNvbG9yOiAjREVERURFXAp9XAouYWNlLXRlcm1pbmFsLXRoZW1lIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbixcCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogIzdBQTZEQVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICNFN0M1NDdcCn1cCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9oZWFkaW5nLFwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX3N0cmluZyB7XApjb2xvcjogI0I5Q0E0QVwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lLFwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX21ldGEuYWNlX3RhZyxcCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV9zdHJpbmcuYWNlX3JlZ2V4cCxcCi5hY2UtdGVybWluYWwtdGhlbWUgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogI0Q1NEU1M1wKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2NvbW1lbnQge1wKY29sb3I6IG9yYW5nZXJlZFwKfVwKLmFjZS10ZXJtaW5hbC10aGVtZSAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZTEJXVi84UEFBSzRBWW5oaXEreEFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15O1wKfVwKIjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS90ZXJtaW5hbCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-textmate.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdGV4dG1hdGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pc0RhcmsgPSBmYWxzZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdG0iOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS10bSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjZjBmMGYwO1wKY29sb3I6ICMzMzM7XAp9XAouYWNlLXRtIC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKfVwKLmFjZS10bSAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzZCNzJFNjtcCn1cCi5hY2UtdG0ge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCmNvbG9yOiBibGFjaztcCn1cCi5hY2UtdG0gLmFjZV9jdXJzb3Ige1wKY29sb3I6IGJsYWNrO1wKfVwKLmFjZS10bSAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogcmdiKDE5MSwgMTkxLCAxOTEpO1wKfVwKLmFjZS10bSAuYWNlX3N0b3JhZ2UsXAouYWNlLXRtIC5hY2Vfa2V5d29yZCB7XApjb2xvcjogYmx1ZTtcCn1cCi5hY2UtdG0gLmFjZV9jb25zdGFudCB7XApjb2xvcjogcmdiKDE5NywgNiwgMTEpO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9idWlsZGluIHtcCmNvbG9yOiByZ2IoODgsIDcyLCAyNDYpO1wKfVwKLmFjZS10bSAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSB7XApjb2xvcjogcmdiKDg4LCA5MiwgMjQ2KTtcCn1cCi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbGlicmFyeSB7XApjb2xvcjogcmdiKDYsIDE1MCwgMTQpO1wKfVwKLmFjZS10bSAuYWNlX2ludmFsaWQge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDAsIDAsIDAuMSk7XApjb2xvcjogcmVkO1wKfVwKLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uIHtcCmNvbG9yOiByZ2IoNjAsIDc2LCAxMTQpO1wKfVwKLmFjZS10bSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50IHtcCmNvbG9yOiByZ2IoNiwgMTUwLCAxNCk7XAp9XAouYWNlLXRtIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSxcCi5hY2UtdG0gLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyB7XApjb2xvcjogcmdiKDEwOSwgMTIxLCAyMjIpO1wKfVwKLmFjZS10bSAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCmNvbG9yOiByZ2IoMTA0LCAxMTgsIDEzNSk7XAp9XAouYWNlLXRtIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiByZ2IoMywgMTA2LCA3KTtcCn1cCi5hY2UtdG0gLmFjZV9jb21tZW50IHtcCmNvbG9yOiByZ2IoNzYsIDEzNiwgMTA3KTtcCn1cCi5hY2UtdG0gLmFjZV9jb21tZW50LmFjZV9kb2Mge1wKY29sb3I6IHJnYigwLCAxMDIsIDI1NSk7XAp9XAouYWNlLXRtIC5hY2VfY29tbWVudC5hY2VfZG9jLmFjZV90YWcge1wKY29sb3I6IHJnYigxMjgsIDE1OSwgMTkxKTtcCn1cCi5hY2UtdG0gLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyB7XApjb2xvcjogcmdiKDAsIDAsIDIwNSk7XAp9XAouYWNlLXRtIC5hY2VfdmFyaWFibGUge1wKY29sb3I6IHJnYig0OSwgMTMyLCAxNDkpO1wKfVwKLmFjZS10bSAuYWNlX3htbC1wZSB7XApjb2xvcjogcmdiKDEwNCwgMTA0LCA5MSk7XAp9XAouYWNlLXRtIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzAwMDBBMjtcCn1cCi5hY2UtdG0gLmFjZV9oZWFkaW5nIHtcCmNvbG9yOiByZ2IoMTIsIDcsIDI1NSk7XAp9XAouYWNlLXRtIC5hY2VfbGlzdCB7XApjb2xvcjpyZ2IoMTg1LCA2LCAxNDQpO1wKfVwKLmFjZS10bSAuYWNlX21ldGEuYWNlX3RhZyB7XApjb2xvcjpyZ2IoMCwgMjIsIDE0Mik7XAp9XAouYWNlLXRtIC5hY2Vfc3RyaW5nLmFjZV9yZWdleCB7XApjb2xvcjogcmdiKDI1NSwgMCwgMClcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogcmdiKDE4MSwgMjEzLCAyNTUpO1wKfVwKLmFjZS10bS5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4IHdoaXRlO1wKfVwKLmFjZS10bSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDI1MiwgMjU1LCAwKTtcCn1cCi5hY2UtdG0gLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGFjayB7XApiYWNrZ3JvdW5kOiByZ2IoMTY0LCAyMjksIDEwMSk7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMTkyLCAxOTIsIDE5Mik7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3KTtcCn1cCi5hY2UtdG0gLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvciA6ICNkY2RjZGM7XAp9XAouYWNlLXRtIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApiYWNrZ3JvdW5kOiByZ2IoMjUwLCAyNTAsIDI1NSk7XApib3JkZXI6IDFweCBzb2xpZCByZ2IoMjAwLCAyMDAsIDI1MCk7XAp9XAouYWNlLXRtIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFMGxFUVZRSW1XUDQvLy8vZjRiTGx5Ly9Cd0FtVmdkMS93MTEvZ0FBQUFCSlJVNUVya0pnZ2c9PVwiKSByaWdodCByZXBlYXQteTtcCn1cCiI7CmV4cG9ydHMuJGlkID0gImFjZS90aGVtZS90ZXh0bWF0ZSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvdGV4dG1hdGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-tomorrow.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3ciLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gZmFsc2U7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLXRvbW9ycm93IjsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtdG9tb3Jyb3cgLmFjZV9ndXR0ZXIge1wKYmFja2dyb3VuZDogI2Y2ZjZmNjtcCmNvbG9yOiAjNEQ0RDRDXAp9XAouYWNlLXRvbW9ycm93IC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjZjZmNmY2XAp9XAouYWNlLXRvbW9ycm93IHtcCmJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XApjb2xvcjogIzRENEQ0Q1wKfVwKLmFjZS10b21vcnJvdyAuYWNlX2N1cnNvciB7XApjb2xvcjogI0FFQUZBRFwKfVwKLmFjZS10b21vcnJvdyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjRDZENkQ2XAp9XAouYWNlLXRvbW9ycm93LmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggI0ZGRkZGRjtcCn1cCi5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigyNTUsIDI1NSwgMClcCn1cCi5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9icmFja2V0IHtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJvcmRlcjogMXB4IHNvbGlkICNEMUQxRDFcCn1cCi5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjRUZFRkVGXAp9XAouYWNlLXRvbW9ycm93IC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3IgOiAjZGNkY2RjXAp9XAouYWNlLXRvbW9ycm93IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjRDZENkQ2XAp9XAouYWNlLXRvbW9ycm93IC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjRDFEMUQxXAp9XAouYWNlLXRvbW9ycm93IC5hY2Vfa2V5d29yZCxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9tZXRhLFwKLmFjZS10b21vcnJvdyAuYWNlX3N0b3JhZ2UsXAouYWNlLXRvbW9ycm93IC5hY2Vfc3RvcmFnZS5hY2VfdHlwZSxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjODk1OUE4XAp9XAouYWNlLXRvbW9ycm93IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6ICMzRTk5OUZcCn1cCi5hY2UtdG9tb3Jyb3cgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS10b21vcnJvdyAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9rZXl3b3JkLmFjZV9vdGhlci5hY2VfdW5pdCxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCxcCi5hY2UtdG9tb3Jyb3cgLmFjZV92YXJpYWJsZS5hY2VfcGFyYW1ldGVyIHtcCmNvbG9yOiAjRjU4NzFGXAp9XAouYWNlLXRvbW9ycm93IC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjNjY2OTY5XAp9XAouYWNlLXRvbW9ycm93IC5hY2VfaW52YWxpZCB7XApjb2xvcjogI0ZGRkZGRjtcCmJhY2tncm91bmQtY29sb3I6ICNDODI4MjlcCn1cCi5hY2UtdG9tb3Jyb3cgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHtcCmNvbG9yOiAjRkZGRkZGO1wKYmFja2dyb3VuZC1jb2xvcjogIzg5NTlBOFwKfVwKLmFjZS10b21vcnJvdyAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzQyNzFBRTtcCmJvcmRlci1jb2xvcjogIzRENEQ0Q1wKfVwKLmFjZS10b21vcnJvdyAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24sXAouYWNlLXRvbW9ycm93IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24sXAouYWNlLXRvbW9ycm93IC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICM0MjcxQUVcCn1cCi5hY2UtdG9tb3Jyb3cgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjQzk5RTAwXAp9XAouYWNlLXRvbW9ycm93IC5hY2VfaGVhZGluZyxcCi5hY2UtdG9tb3Jyb3cgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcsXAouYWNlLXRvbW9ycm93IC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjNzE4QzAwXAp9XAouYWNlLXRvbW9ycm93IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLXRvbW9ycm93IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUsXAouYWNlLXRvbW9ycm93IC5hY2VfbWV0YS5hY2VfdGFnLFwKLmFjZS10b21vcnJvdyAuYWNlX3N0cmluZy5hY2VfcmVnZXhwLFwKLmFjZS10b21vcnJvdyAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjQzgyODI5XAp9XAouYWNlLXRvbW9ycm93IC5hY2VfY29tbWVudCB7XApjb2xvcjogIzhFOTA4Q1wKfVwKLmFjZS10b21vcnJvdyAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJkdTNmL0J3QWxmZ2N0ZHVCODVRQUFBQUJKUlU1RXJrSmdnZz09KSByaWdodCByZXBlYXQteVwKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvdG9tb3Jyb3ciXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-tomorrow_night.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdG9tb3Jyb3ctbmlnaHQiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMjUyODJjO1wKY29sb3I6ICNDNUM4QzZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMyNTI4MmNcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQge1wKYmFja2dyb3VuZC1jb2xvcjogIzFEMUYyMTtcCmNvbG9yOiAjQzVDOEM2XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjQUVBRkFEXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6ICMzNzNCNDFcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMUQxRjIxO1wKfVwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjNEI0RTU1XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogIzI4MkEyRVwKfVwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyQTJFXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjMzczQjQxXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjNEI0RTU1XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfa2V5d29yZCxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tZXRhLFwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3N0b3JhZ2UsXAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfc3RvcmFnZS5hY2VfdHlwZSxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjQjI5NEJCXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6ICM4QUJFQjdcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9rZXl3b3JkLmFjZV9vdGhlci5hY2VfdW5pdCxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV92YXJpYWJsZS5hY2VfcGFyYW1ldGVyIHtcCmNvbG9yOiAjREU5MzVGXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjQ0VEMUNGXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfaW52YWxpZCB7XApjb2xvcjogI0NFRDJDRjtcCmJhY2tncm91bmQtY29sb3I6ICNERjVGNUZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9pbnZhbGlkLmFjZV9kZXByZWNhdGVkIHtcCmNvbG9yOiAjQ0VEMkNGO1wKYmFja2dyb3VuZC1jb2xvcjogI0I3OThCRlwKfVwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogIzgxQTJCRTtcCmJvcmRlci1jb2xvcjogI0M1QzhDNlwKfVwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24sXAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfZnVuY3Rpb24sXAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICM4MUEyQkVcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjRjBDNjc0XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfaGVhZGluZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcsXAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjQjVCRDY4XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUsXAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfbWV0YS5hY2VfdGFnLFwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3N0cmluZy5hY2VfcmVnZXhwLFwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjQ0M2NjY2XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0IC5hY2VfY29tbWVudCB7XApjb2xvcjogIzk2OTg5NlwKfVwKLmFjZS10b21vcnJvdy1uaWdodCAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZSEIzZC84UEFBT0lBZFVMdzhxTUFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS90b21vcnJvd19uaWdodCJdLCBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIHR5cGVvZiBleHBvcnRzID09ICJvYmplY3QiICYmIG1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICA=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-tomorrow_night_blue.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfYmx1ZSIsWyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImFjZS9saWIvZG9tIl0sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZXhwb3J0cy5pc0RhcmsgPSB0cnVlOwpleHBvcnRzLmNzc0NsYXNzID0gImFjZS10b21vcnJvdy1uaWdodC1ibHVlIjsKZXhwb3J0cy5jc3NUZXh0ID0gIi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMDAyMDRiO1wKY29sb3I6ICM3Mzg4YjVcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3ByaW50LW1hcmdpbiB7XAp3aWR0aDogMXB4O1wKYmFja2dyb3VuZDogIzAwMjA0YlwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIHtcCmJhY2tncm91bmQtY29sb3I6ICMwMDI0NTE7XApjb2xvcjogI0ZGRkZGRlwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfY29uc3RhbnQuYWNlX290aGVyLFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1wKYmFja2dyb3VuZDogIzAwM0Y4RVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggIzAwMjQ1MTtcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEyNywgMTExLCAxOSlcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgIzQwNEY3RFwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogIzAwMzQ2RVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3I6ICMwMjIwNDBcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGVkLXdvcmQge1wKYm9yZGVyOiAxcHggc29saWQgIzAwM0Y4RVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjNDA0RjdEXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9rZXl3b3JkLFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfbWV0YSxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N0b3JhZ2UsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9zdG9yYWdlLmFjZV90eXBlLFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogI0VCQkJGRlwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfa2V5d29yZC5hY2Vfb3BlcmF0b3Ige1wKY29sb3I6ICM5OUZGRkZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9jb25zdGFudC5hY2VfbnVtZXJpYyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2tleXdvcmQuYWNlX290aGVyLmFjZV91bml0LFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV92YXJpYWJsZS5hY2VfcGFyYW1ldGVyIHtcCmNvbG9yOiAjRkZDNThGXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9pbnZhbGlkIHtcCmNvbG9yOiAjRkZGRkZGO1wKYmFja2dyb3VuZC1jb2xvcjogI0Y5OURBNVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7XApjb2xvcjogI0ZGRkZGRjtcCmJhY2tncm91bmQtY29sb3I6ICNFQkJCRkZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogI0JCREFGRjtcCmJvcmRlci1jb2xvcjogI0ZGRkZGRlwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uLFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICNCQkRBRkZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogI0ZGRUVBRFwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfaGVhZGluZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N0cmluZyB7XApjb2xvcjogI0QxRjFBOVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJsdWUgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX21ldGEuYWNlX3RhZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX3N0cmluZy5hY2VfcmVnZXhwLFwKLmFjZS10b21vcnJvdy1uaWdodC1ibHVlIC5hY2VfdmFyaWFibGUge1wKY29sb3I6ICNGRjlEQTRcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2NvbW1lbnQge1wKY29sb3I6ICM3Mjg1QjdcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYmx1ZSAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZSkR6cWZ3UEFBTlhBZU5zaUErWkFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS90b21vcnJvd19uaWdodF9ibHVlIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-tomorrow_night_bright.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfYnJpZ2h0IixbInJlcXVpcmUiLCJleHBvcnRzIiwibW9kdWxlIiwiYWNlL2xpYi9kb20iXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpleHBvcnRzLmlzRGFyayA9IHRydWU7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCI7CmV4cG9ydHMuY3NzVGV4dCA9ICIuYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMWExYTFhO1wKY29sb3I6ICNERURFREVcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfcHJpbnQtbWFyZ2luIHtcCndpZHRoOiAxcHg7XApiYWNrZ3JvdW5kOiAjMWExYTFhXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO1wKY29sb3I6ICNERURFREVcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjOUY5RjlGXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjNDI0MjQyXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodC5hY2VfbXVsdGlzZWxlY3QgLmFjZV9zZWxlY3Rpb24uYWNlX3N0YXJ0IHtcCmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMwMDAwMDA7XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgIzg4ODg4OFwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9oaWdobGlnaHQge1wKYm9yZGVyOiAxcHggc29saWQgcmdiKDExMCwgMTE5LCAwKTtcCmJvcmRlci1ib3R0b206IDA7XApib3gtc2hhZG93OiBpbnNldCAwIC0xcHggcmdiKDExMCwgMTE5LCAwKTtcCm1hcmdpbjogLTFweCAwIDAgLTFweDtcCmJhY2tncm91bmQ6IHJnYmEoMjU1LCAyMzUsIDAsIDAuMSlcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogIzJBMkEyQVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogIzJBMkEyQVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdGFjayB7XApiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoNjYsIDkwLCA0NClcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjODg4ODg4XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogIzM0MzQzNFwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9rZXl3b3JkLFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tZXRhLFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdG9yYWdlLFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdG9yYWdlLmFjZV90eXBlLFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcCmNvbG9yOiAjQzM5N0Q4XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2tleXdvcmQuYWNlX29wZXJhdG9yIHtcCmNvbG9yOiAjNzBDMEIxXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2NvbnN0YW50LmFjZV9sYW5ndWFnZSxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2tleXdvcmQuYWNlX290aGVyLmFjZV91bml0LFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XApjb2xvcjogI0U3OEM0NVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1wKY29sb3I6ICNFRUVFRUVcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfaW52YWxpZCB7XApjb2xvcjogI0NFRDJDRjtcCmJhY2tncm91bmQtY29sb3I6ICNERjVGNUZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfaW52YWxpZC5hY2VfZGVwcmVjYXRlZCB7XApjb2xvcjogI0NFRDJDRjtcCmJhY2tncm91bmQtY29sb3I6ICNCNzk4QkZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjN0FBNkRBO1wKYm9yZGVyLWNvbG9yOiAjREVERURFXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24sXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX3N1cHBvcnQuYWNlX2Z1bmN0aW9uLFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogIzdBQTZEQVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdXBwb3J0LmFjZV9jbGFzcyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfdHlwZSB7XApjb2xvcjogI0U3QzU0N1wKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9oZWFkaW5nLFwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX3N0cmluZyB7XApjb2xvcjogI0I5Q0E0QVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX3RhZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX21ldGEuYWNlX3RhZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjRDU0RTUzXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2NvbW1lbnQge1wKY29sb3I6ICM5Njk4OTZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtYnJpZ2h0IC5hY2VfYzlzZWFyY2hyZXN1bHRzLmFjZV9rZXl3b3JkIHtcCmNvbG9yOiAjQzJDMjgwXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWJyaWdodCAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUVrbEVRVlFJbVdOZ1lHQmdZRkJYVi84UEFBSm9BWFg0a1QyRUFBQUFBRWxGVGtTdVFtQ0MpIHJpZ2h0IHJlcGVhdC15XAp9IjsKCnZhciBkb20gPSByZXF1aXJlKCIuLi9saWIvZG9tIik7CmRvbS5pbXBvcnRDc3NTdHJpbmcoZXhwb3J0cy5jc3NUZXh0LCBleHBvcnRzLmNzc0NsYXNzKTsKfSk7ICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWlyZShbImFjZS90aGVtZS90b21vcnJvd19uaWdodF9icmlnaHQiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-tomorrow_night_eighties.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXMiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMjcyNzI3O1wKY29sb3I6ICNDQ0NcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMyNzI3MjdcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMge1wKYmFja2dyb3VuZC1jb2xvcjogIzJEMkQyRDtcCmNvbG9yOiAjQ0NDQ0NDXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfY29uc3RhbnQuYWNlX290aGVyLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2N1cnNvciB7XApjb2xvcjogI0NDQ0NDQ1wKfVwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XApiYWNrZ3JvdW5kOiAjNTE1MTUxXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzLmFjZV9tdWx0aXNlbGVjdCAuYWNlX3NlbGVjdGlvbi5hY2Vfc3RhcnQge1wKYm94LXNoYWRvdzogMCAwIDNweCAwcHggIzJEMkQyRDtcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zdGVwIHtcCmJhY2tncm91bmQ6IHJnYigxMDIsIDgyLCAwKVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1wKbWFyZ2luOiAtMXB4IDAgMCAtMXB4O1wKYm9yZGVyOiAxcHggc29saWQgIzZBNkE2QVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1icmlnaHQgLmFjZV9zdGFjayB7XApiYWNrZ3JvdW5kOiByZ2IoNjYsIDkwLCA0NClcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kOiAjMzkzOTM5XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZ3V0dGVyLWFjdGl2ZS1saW5lIHtcCmJhY2tncm91bmQtY29sb3I6ICMzOTM5MzlcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkICM1MTUxNTFcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9pbnZpc2libGUge1wKY29sb3I6ICM2QTZBNkFcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9rZXl3b3JkLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21ldGEsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2Vfc3RvcmFnZSxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9zdG9yYWdlLmFjZV90eXBlLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICNDQzk5Q0NcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9rZXl3b3JkLmFjZV9vcGVyYXRvciB7XApjb2xvcjogIzY2Q0NDQ1wKfVwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfY29uc3RhbnQuYWNlX2xhbmd1YWdlLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2tleXdvcmQuYWNlX290aGVyLmFjZV91bml0LFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50LFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3ZhcmlhYmxlLmFjZV9wYXJhbWV0ZXIge1wKY29sb3I6ICNGOTkxNTdcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9pbnZhbGlkIHtcCmNvbG9yOiAjQ0RDRENEO1wKYmFja2dyb3VuZC1jb2xvcjogI0YyNzc3QVwKfVwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQge1wKY29sb3I6ICNDRENEQ0Q7XApiYWNrZ3JvdW5kLWNvbG9yOiAjQ0M5OUNDXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjNjY5OUNDO1wKYm9yZGVyLWNvbG9yOiAjQ0NDQ0NDXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbixcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogIzY2OTlDQ1wKfVwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICNGRkNDNjZcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9oZWFkaW5nLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX21hcmt1cC5hY2VfaGVhZGluZyxcCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9zdHJpbmcge1wKY29sb3I6ICM5OUNDOTlcCn1cCi5hY2UtdG9tb3Jyb3ctbmlnaHQtZWlnaHRpZXMgLmFjZV9jb21tZW50IHtcCmNvbG9yOiAjOTk5OTk5XAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV90YWcsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUsXAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfbWV0YS5hY2VfdGFnLFwKLmFjZS10b21vcnJvdy1uaWdodC1laWdodGllcyAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjRjI3NzdBXAp9XAouYWNlLXRvbW9ycm93LW5pZ2h0LWVpZ2h0aWVzIC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV1BRMDlOcllBZ01qUDRQQUF0R0F3Y2hITXlBQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL3RvbW9ycm93X25pZ2h0X2VpZ2h0aWVzIl0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-twilight.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdHdpbGlnaHQiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdHdpbGlnaHQiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS10d2lsaWdodCAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMjMyMzIzO1wKY29sb3I6ICNFMkUyRTJcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMyMzIzMjNcCn1cCi5hY2UtdHdpbGlnaHQge1wKYmFja2dyb3VuZC1jb2xvcjogIzE0MTQxNDtcCmNvbG9yOiAjRjhGOEY4XAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjQTdBN0E3XAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6IHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMClcCn1cCi5hY2UtdHdpbGlnaHQuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMTQxNDE0O1wKfVwKLmFjZS10d2lsaWdodCAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpXAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSlcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzMSlcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjIxLCAyNDAsIDI1NSwgMC4yMClcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9pbnZpc2libGUge1wKY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSlcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9rZXl3b3JkLFwKLmFjZS10d2lsaWdodCAuYWNlX21ldGEge1wKY29sb3I6ICNDREE4NjlcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9jb25zdGFudCxcCi5hY2UtdHdpbGlnaHQgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFwKLmFjZS10d2lsaWdodCAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIuYWNlX2VzY2FwZSxcCi5hY2UtdHdpbGlnaHQgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIsXAouYWNlLXR3aWxpZ2h0IC5hY2VfaGVhZGluZyxcCi5hY2UtdHdpbGlnaHQgLmFjZV9tYXJrdXAuYWNlX2hlYWRpbmcsXAouYWNlLXR3aWxpZ2h0IC5hY2Vfc3VwcG9ydC5hY2VfY29uc3RhbnQge1wKY29sb3I6ICNDRjZBNENcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9pbnZhbGlkLmFjZV9pbGxlZ2FsIHtcCmNvbG9yOiAjRjhGOEY4O1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSg4NiwgNDUsIDg2LCAwLjc1KVwKfVwKLmFjZS10d2lsaWdodCAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQge1wKdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogI0QyQThBMVwKfVwKLmFjZS10d2lsaWdodCAuYWNlX3N1cHBvcnQge1wKY29sb3I6ICM5Qjg1OURcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9mb2xkIHtcCmJhY2tncm91bmQtY29sb3I6ICNBQzg4NUI7XApib3JkZXItY29sb3I6ICNGOEY4RjhcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogI0RBRDA4NVwKfVwKLmFjZS10d2lsaWdodCAuYWNlX2xpc3QsXAouYWNlLXR3aWxpZ2h0IC5hY2VfbWFya3VwLmFjZV9saXN0LFwKLmFjZS10d2lsaWdodCAuYWNlX3N0b3JhZ2Uge1wKY29sb3I6ICNGOUVFOThcCn1cCi5hY2UtdHdpbGlnaHQgLmFjZV9lbnRpdHkuYWNlX25hbWUuYWNlX2Z1bmN0aW9uLFwKLmFjZS10d2lsaWdodCAuYWNlX21ldGEuYWNlX3RhZyxcCi5hY2UtdHdpbGlnaHQgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogI0FDODg1QlwKfVwKLmFjZS10d2lsaWdodCAuYWNlX3N0cmluZyB7XApjb2xvcjogIzhGOUQ2QVwKfVwKLmFjZS10d2lsaWdodCAuYWNlX3N0cmluZy5hY2VfcmVnZXhwIHtcCmNvbG9yOiAjRTlDMDYyXAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfY29tbWVudCB7XApmb250LXN0eWxlOiBpdGFsaWM7XApjb2xvcjogIzVGNUE2MFwKfVwKLmFjZS10d2lsaWdodCAuYWNlX3ZhcmlhYmxlIHtcCmNvbG9yOiAjNzU4N0E2XAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfeG1sLXBlIHtcCmNvbG9yOiAjNDk0OTQ5XAp9XAouYWNlLXR3aWxpZ2h0IC5hY2VfaW5kZW50LWd1aWRlIHtcCmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV01RRVJGcFlMQzF0ZjBQQUFnT0FuUG5oeHlpQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcCn0iOwoKdmFyIGRvbSA9IHJlcXVpcmUoIi4uL2xpYi9kb20iKTsKZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpOwp9KTsgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1aXJlKFsiYWNlL3RoZW1lL3R3aWxpZ2h0Il0sIGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT0gIm9iamVjdCIgJiYgdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgbW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-vibrant_ink.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUvdmlicmFudF9pbmsiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gdHJ1ZTsKZXhwb3J0cy5jc3NDbGFzcyA9ICJhY2UtdmlicmFudC1pbmsiOwpleHBvcnRzLmNzc1RleHQgPSAiLmFjZS12aWJyYW50LWluayAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjMWExYTFhO1wKY29sb3I6ICNCRUJFQkVcCn1cCi5hY2UtdmlicmFudC1pbmsgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICMxYTFhMWFcCn1cCi5hY2UtdmlicmFudC1pbmsge1wKYmFja2dyb3VuZC1jb2xvcjogIzBGMEYwRjtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6ICM2Njk5Q0NcCn1cCi5hY2UtdmlicmFudC1pbmsuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjMEYwRjBGO1wKfVwKLmFjZS12aWJyYW50LWluayAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDEwMiwgODIsIDApXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogIzMzMzMzM1wKfVwKLmFjZS12aWJyYW50LWluayAuYWNlX2d1dHRlci1hY3RpdmUtbGluZSB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzMzMzXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XApib3JkZXI6IDFweCBzb2xpZCAjNjY5OUNDXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfaW52aXNpYmxlIHtcCmNvbG9yOiAjNDA0MDQwXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2Vfa2V5d29yZCxcCi5hY2UtdmlicmFudC1pbmsgLmFjZV9tZXRhIHtcCmNvbG9yOiAjRkY2NjAwXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29uc3RhbnQsXAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29uc3RhbnQuYWNlX2NoYXJhY3RlcixcCi5hY2UtdmlicmFudC1pbmsgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLmFjZV9lc2NhcGUsXAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjMzM5OTk5XAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6ICM5OUNDOTlcCn1cCi5hY2UtdmlicmFudC1pbmsgLmFjZV9pbnZhbGlkLFwKLmFjZS12aWJyYW50LWluayAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQge1wKY29sb3I6ICNDQ0ZGMzM7XApiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfZm9sZCB7XApiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDQzAwO1wKYm9yZGVyLWNvbG9yOiAjRkZGRkZGXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfZW50aXR5LmFjZV9uYW1lLmFjZV9mdW5jdGlvbixcCi5hY2UtdmlicmFudC1pbmsgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbixcCi5hY2UtdmlicmFudC1pbmsgLmFjZV92YXJpYWJsZSB7XApjb2xvcjogI0ZGQ0MwMFwKfVwKLmFjZS12aWJyYW50LWluayAuYWNlX3ZhcmlhYmxlLmFjZV9wYXJhbWV0ZXIge1wKZm9udC1zdHlsZTogaXRhbGljXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjNjZGRjAwXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2Vfc3RyaW5nLmFjZV9yZWdleHAge1wKY29sb3I6ICM0NEI0Q0NcCn1cCi5hY2UtdmlicmFudC1pbmsgLmFjZV9jb21tZW50IHtcCmNvbG9yOiAjOTkzM0NDXAp9XAouYWNlLXZpYnJhbnQtaW5rIC5hY2VfZW50aXR5LmFjZV9vdGhlci5hY2VfYXR0cmlidXRlLW5hbWUge1wKZm9udC1zdHlsZTogaXRhbGljO1wKY29sb3I6ICM5OUNDOTlcCn1cCi5hY2UtdmlicmFudC1pbmsgLmFjZV9pbmRlbnQtZ3VpZGUge1wKYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQ0NBWUFBQUNaZ2JZbkFBQUFFa2xFUVZRSW1XTmdZR0JnWU5EVGMvb1BBQUxQQVo3aHhsYllBQUFBQUVsRlRrU3VRbUNDKSByaWdodCByZXBlYXQteVwKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUvdmlicmFudF9pbmsiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/themes/theme-xcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVmaW5lKCJhY2UvdGhlbWUveGNvZGUiLFsicmVxdWlyZSIsImV4cG9ydHMiLCJtb2R1bGUiLCJhY2UvbGliL2RvbSJdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmV4cG9ydHMuaXNEYXJrID0gZmFsc2U7CmV4cG9ydHMuY3NzQ2xhc3MgPSAiYWNlLXhjb2RlIjsKZXhwb3J0cy5jc3NUZXh0ID0gIlwKLmFjZS14Y29kZSAuYWNlX2d1dHRlciB7XApiYWNrZ3JvdW5kOiAjZThlOGU4O1wKY29sb3I6ICMzMzNcCn1cCi5hY2UteGNvZGUgLmFjZV9wcmludC1tYXJnaW4ge1wKd2lkdGg6IDFweDtcCmJhY2tncm91bmQ6ICNlOGU4ZThcCn1cCi5hY2UteGNvZGUge1wKYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjtcCmNvbG9yOiAjMDAwMDAwXAp9XAouYWNlLXhjb2RlIC5hY2VfY3Vyc29yIHtcCmNvbG9yOiAjMDAwMDAwXAp9XAouYWNlLXhjb2RlIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0aW9uIHtcCmJhY2tncm91bmQ6ICNCNUQ1RkZcCn1cCi5hY2UteGNvZGUuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XApib3gtc2hhZG93OiAwIDAgM3B4IDBweCAjRkZGRkZGO1wKfVwKLmFjZS14Y29kZSAuYWNlX21hcmtlci1sYXllciAuYWNlX3N0ZXAge1wKYmFja2dyb3VuZDogcmdiKDE5OCwgMjE5LCAxNzQpXAp9XAouYWNlLXhjb2RlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYnJhY2tldCB7XAptYXJnaW46IC0xcHggMCAwIC0xcHg7XApib3JkZXI6IDFweCBzb2xpZCAjQkZCRkJGXAp9XAouYWNlLXhjb2RlIC5hY2VfbWFya2VyLWxheWVyIC5hY2VfYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA3MSlcCn1cCi5hY2UteGNvZGUgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1wKYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA3MSlcCn1cCi5hY2UteGNvZGUgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3RlZC13b3JkIHtcCmJvcmRlcjogMXB4IHNvbGlkICNCNUQ1RkZcCn1cCi5hY2UteGNvZGUgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UsXAouYWNlLXhjb2RlIC5hY2Vfa2V5d29yZCxcCi5hY2UteGNvZGUgLmFjZV9tZXRhLFwKLmFjZS14Y29kZSAuYWNlX3ZhcmlhYmxlLmFjZV9sYW5ndWFnZSB7XApjb2xvcjogI0M4MDBBNFwKfVwKLmFjZS14Y29kZSAuYWNlX2ludmlzaWJsZSB7XApjb2xvcjogI0JGQkZCRlwKfVwKLmFjZS14Y29kZSAuYWNlX2NvbnN0YW50LmFjZV9jaGFyYWN0ZXIsXAouYWNlLXhjb2RlIC5hY2VfY29uc3RhbnQuYWNlX290aGVyIHtcCmNvbG9yOiAjMjc1QTVFXAp9XAouYWNlLXhjb2RlIC5hY2VfY29uc3RhbnQuYWNlX251bWVyaWMge1wKY29sb3I6ICMzQTAwRENcCn1cCi5hY2UteGNvZGUgLmFjZV9lbnRpdHkuYWNlX290aGVyLmFjZV9hdHRyaWJ1dGUtbmFtZSxcCi5hY2UteGNvZGUgLmFjZV9zdXBwb3J0LmFjZV9jb25zdGFudCxcCi5hY2UteGNvZGUgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XApjb2xvcjogIzQ1MDA4NFwKfVwKLmFjZS14Y29kZSAuYWNlX2ZvbGQge1wKYmFja2dyb3VuZC1jb2xvcjogI0M4MDBBNDtcCmJvcmRlci1jb2xvcjogIzAwMDAwMFwKfVwKLmFjZS14Y29kZSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFwKLmFjZS14Y29kZSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFwKLmFjZS14Y29kZSAuYWNlX3N1cHBvcnQuYWNlX3R5cGUge1wKY29sb3I6ICM3OTBFQURcCn1cCi5hY2UteGNvZGUgLmFjZV9zdG9yYWdlIHtcCmNvbG9yOiAjQzkwMEE0XAp9XAouYWNlLXhjb2RlIC5hY2Vfc3RyaW5nIHtcCmNvbG9yOiAjREYwMDAyXAp9XAouYWNlLXhjb2RlIC5hY2VfY29tbWVudCB7XApjb2xvcjogIzAwOEUwMFwKfVwKLmFjZS14Y29kZSAuYWNlX2luZGVudC1ndWlkZSB7XApiYWNrZ3JvdW5kOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFDQ0FZQUFBQ1pnYlluQUFBQUUwbEVRVlFJbVdQNC8vLy9mNGJMbHkvL0J3QW1WZ2QxL3cxMS9nQUFBQUJKUlU1RXJrSmdnZz09KSByaWdodCByZXBlYXQteVwKfSI7Cgp2YXIgZG9tID0gcmVxdWlyZSgiLi4vbGliL2RvbSIpOwpkb20uaW1wb3J0Q3NzU3RyaW5nKGV4cG9ydHMuY3NzVGV4dCwgZXhwb3J0cy5jc3NDbGFzcyk7Cn0pOyAgICAgICAgICAgICAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVpcmUoWyJhY2UvdGhlbWUveGNvZGUiXSwgZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSA9PSAib2JqZWN0IiAmJiB0eXBlb2YgZXhwb3J0cyA9PSAib2JqZWN0IiAmJiBtb2R1bGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSkoKTsKICAgICAgICAgICAg]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/ace/workers/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-coffee.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2NvZmZlZS9jb2ZmZWUiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKZnVuY3Rpb24gZGVmaW5lKGYpIHsgbW9kdWxlLmV4cG9ydHMgPSBmKCkgfTsgZGVmaW5lLmFtZCA9IHt9Owp2YXIgX3R5cGVvZj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sX2dldD1mdW5jdGlvbiBlKGEsdCxvKXtudWxsPT09YSYmKGE9RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsdCk7aWYobj09PXZvaWQgMCl7dmFyIHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO3JldHVybiBudWxsPT09cj92b2lkIDA6ZShyLHQsbyl9aWYoInZhbHVlImluIG4pcmV0dXJuIG4udmFsdWU7dmFyIGw9bi5nZXQ7cmV0dXJuIHZvaWQgMD09PWw/dm9pZCAwOmwuY2FsbChvKX0sX3NsaWNlZFRvQXJyYXk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsYSl7dmFyIHQ9W10sbz0hMCxuPSExLHI9dm9pZCAwO3RyeXtmb3IodmFyIGw9ZVtTeW1ib2wuaXRlcmF0b3JdKCksczshKG89KHM9bC5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKHMudmFsdWUpLCEoYSYmdC5sZW5ndGg9PT1hKSk7bz0hMCk7fWNhdGNoKGUpe249ITAscj1lfWZpbmFsbHl7dHJ5eyFvJiZsWyJyZXR1cm4iXSYmbFsicmV0dXJuIl0oKX1maW5hbGx5e2lmKG4pdGhyb3cgcn19cmV0dXJuIHR9cmV0dXJuIGZ1bmN0aW9uKGEsdCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gYTtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGEpKXJldHVybiBlKGEsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfX0oKSxfY3JlYXRlQ2xhc3M9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsYSl7Zm9yKHZhciB0PTAsbzt0PGEubGVuZ3RoO3QrKylvPWFbdF0sby5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLmtleSxvKX1yZXR1cm4gZnVuY3Rpb24oYSx0LG8pe3JldHVybiB0JiZlKGEucHJvdG90eXBlLHQpLG8mJmUoYSxvKSxhfX0oKTtmdW5jdGlvbiBfdG9BcnJheShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOkFycmF5LmZyb20oZSl9ZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oZSxhKXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBhJiYoIm9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYSk/YTplfWZ1bmN0aW9uIF9pbmhlcml0cyhlLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhJiZudWxsIT09YSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIGEpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYSYmYS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGEmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYSk6ZS5fX3Byb3RvX189YSl9ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGUsYSl7aWYoIShlIGluc3RhbmNlb2YgYSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcih2YXIgYT0wLHQ9QXJyYXkoZS5sZW5ndGgpO2E8ZS5sZW5ndGg7YSsrKXRbYV09ZVthXTtyZXR1cm4gdH1yZXR1cm4gQXJyYXkuZnJvbShlKX0oZnVuY3Rpb24ocm9vdCl7dmFyIENvZmZlZVNjcmlwdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHJlcXVpcmUoZSl7cmV0dXJuIHJlcXVpcmVbZV19dmFyIF9NYXRoYWJzPU1hdGguYWJzLF9TdHJpbmdmcm9tQ2hhckNvZGU9U3RyaW5nLmZyb21DaGFyQ29kZSxfTWF0aGZsb29yPU1hdGguZmxvb3I7cmV0dXJuIHJlcXVpcmVbIi4uLy4uL3BhY2thZ2UuanNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJue25hbWU6ImNvZmZlZXNjcmlwdCIsZGVzY3JpcHRpb246IlVuZmFuY3kgSmF2YVNjcmlwdCIsa2V5d29yZHM6WyJqYXZhc2NyaXB0IiwibGFuZ3VhZ2UiLCJjb2ZmZWVzY3JpcHQiLCJjb21waWxlciJdLGF1dGhvcjoiSmVyZW15IEFzaGtlbmFzIix2ZXJzaW9uOiIyLjIuMSIsbGljZW5zZToiTUlUIixlbmdpbmVzOntub2RlOiI+PTYifSxkaXJlY3Rvcmllczp7bGliOiIuL2xpYi9jb2ZmZWVzY3JpcHQifSxtYWluOiIuL2xpYi9jb2ZmZWVzY3JpcHQvaW5kZXgiLGJyb3dzZXI6Ii4vbGliL2NvZmZlZXNjcmlwdC9icm93c2VyIixiaW46e2NvZmZlZToiLi9iaW4vY29mZmVlIixjYWtlOiIuL2Jpbi9jYWtlIn0sZmlsZXM6WyJiaW4iLCJsaWIiLCJyZWdpc3Rlci5qcyIsInJlcGwuanMiXSxzY3JpcHRzOnt0ZXN0OiJub2RlIC4vYmluL2Nha2UgdGVzdCIsInRlc3QtaGFybW9ueSI6Im5vZGUgLS1oYXJtb255IC4vYmluL2Nha2UgdGVzdCJ9LGhvbWVwYWdlOiJodHRwOi8vY29mZmVlc2NyaXB0Lm9yZyIsYnVnczoiaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy9jb2ZmZWVzY3JpcHQvaXNzdWVzIixyZXBvc2l0b3J5Ont0eXBlOiJnaXQiLHVybDoiZ2l0Oi8vZ2l0aHViLmNvbS9qYXNoa2VuYXMvY29mZmVlc2NyaXB0LmdpdCJ9LGRldkRlcGVuZGVuY2llczp7ImJhYmVsLWNvcmUiOiJ+Ni4yNi4wIiwiYmFiZWwtcHJlc2V0LWJhYmlsaSI6In4wLjEuNCIsImJhYmVsLXByZXNldC1lbnYiOiJ+MS42LjEiLCJiYWJlbC1wcmVzZXQtbWluaWZ5IjoiXjAuMy4wIixjb2RlbWlycm9yOiJeNS4zMi4wIixkb2NjbzoifjAuOC4wIiwiaGlnaGxpZ2h0LmpzIjoifjkuMTIuMCIsamlzb246Ij49MC40LjE4IiwibWFya2Rvd24taXQiOiJ+OC40LjAiLHVuZGVyc2NvcmU6In4xLjguMyIsd2VicGFjazoifjMuMTAuMCJ9LGRlcGVuZGVuY2llczp7fX19KCkscmVxdWlyZVsiLi9oZWxwZXJzIl09ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx0LG8sbixyLGwscyxpO2Uuc3RhcnRzPWZ1bmN0aW9uKGUsYSx0KXtyZXR1cm4gYT09PWUuc3Vic3RyKHQsYS5sZW5ndGgpfSxlLmVuZHM9ZnVuY3Rpb24oZSxhLHQpe3ZhciBvO3JldHVybiBvPWEubGVuZ3RoLGE9PT1lLnN1YnN0cihlLmxlbmd0aC1vLSh0fHwwKSxvKX0sZS5yZXBlYXQ9cz1mdW5jdGlvbihlLGEpe3ZhciB0O2Zvcih0PSIiOzA8YTspMSZhJiYodCs9ZSksYT4+Pj0xLGUrPWU7cmV0dXJuIHR9LGUuY29tcGFjdD1mdW5jdGlvbihlKXt2YXIgYSx0LG8sbjtmb3Iobj1bXSxhPTAsbz1lLmxlbmd0aDthPG87YSsrKXQ9ZVthXSx0JiZuLnB1c2godCk7cmV0dXJuIG59LGUuY291bnQ9ZnVuY3Rpb24oZSxhKXt2YXIgdCxvO2lmKHQ9bz0wLCFhLmxlbmd0aClyZXR1cm4gMS8wO2Zvcig7bz0xK2UuaW5kZXhPZihhLG8pOyl0Kys7cmV0dXJuIHR9LGUubWVyZ2U9ZnVuY3Rpb24oZSxhKXtyZXR1cm4gbihuKHt9LGUpLGEpfSxuPWUuZXh0ZW5kPWZ1bmN0aW9uKGUsYSl7dmFyIHQsbztmb3IodCBpbiBhKW89YVt0XSxlW3RdPW87cmV0dXJuIGV9LGUuZmxhdHRlbj1yPWZ1bmN0aW9uIGZsYXR0ZW4oZSl7dmFyIGEsdCxvLG47Zm9yKHQ9W10sbz0wLG49ZS5sZW5ndGg7bzxuO28rKylhPWVbb10sIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKT90PXQuY29uY2F0KHIoYSkpOnQucHVzaChhKTtyZXR1cm4gdH0sZS5kZWw9ZnVuY3Rpb24oZSxhKXt2YXIgdDtyZXR1cm4gdD1lW2FdLGRlbGV0ZSBlW2FdLHR9LGUuc29tZT1udWxsPT0obD1BcnJheS5wcm90b3R5cGUuc29tZSk/ZnVuY3Rpb24oYSl7dmFyIHQsZSxvLG47Zm9yKG49dGhpcyxlPTAsbz1uLmxlbmd0aDtlPG87ZSsrKWlmKHQ9bltlXSxhKHQpKXJldHVybiEwO3JldHVybiExfTpsLGUuaW52ZXJ0TGl0ZXJhdGU9ZnVuY3Rpb24oZSl7dmFyIGEsdCxvLG4scixsLHMsaSxkO2ZvcihpPVtdLGE9L15ccyokLyxvPS9eW1x0IF0vLHM9L14oPzpcdD98IHswLDN9KSg/OltcKlwtXCtdfFswLTldezEsOX1cLilbIFx0XS8sbj0hMSxkPWUuc3BsaXQoIlxuIiksdD0wLHI9ZC5sZW5ndGg7dDxyO3QrKylsPWRbdF0sYS50ZXN0KGwpPyhuPSExLGkucHVzaChsKSk6bnx8cy50ZXN0KGwpPyhuPSEwLGkucHVzaCgiIyAiK2wpKTohbiYmby50ZXN0KGwpP2kucHVzaChsKToobj0hMCxpLnB1c2goIiMgIitsKSk7cmV0dXJuIGkuam9pbigiXG4iKX0sdD1mdW5jdGlvbihlLGEpe3JldHVybiBhP3tmaXJzdF9saW5lOmUuZmlyc3RfbGluZSxmaXJzdF9jb2x1bW46ZS5maXJzdF9jb2x1bW4sbGFzdF9saW5lOmEubGFzdF9saW5lLGxhc3RfY29sdW1uOmEubGFzdF9jb2x1bW59OmV9LG89ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZmlyc3RfbGluZSsieCIrZS5maXJzdF9jb2x1bW4rIi0iK2UubGFzdF9saW5lKyJ4IitlLmxhc3RfY29sdW1ufSxlLmFkZERhdGFUb05vZGU9ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgcyxpLGQsYyxwLHU7aWYobnVsbCE9KG51bGw9PWw/dm9pZCAwOmwudXBkYXRlTG9jYXRpb25EYXRhSWZNaXNzaW5nKSYmbnVsbCE9biYmbC51cGRhdGVMb2NhdGlvbkRhdGFJZk1pc3NpbmcodChuLHIpKSwhZS50b2tlbkNvbW1lbnRzKWZvcihlLnRva2VuQ29tbWVudHM9e30sYz1lLnBhcnNlci50b2tlbnMscz0wLGk9Yy5sZW5ndGg7czxpO3MrKylpZihwPWNbc10sISFwLmNvbW1lbnRzKWlmKHU9byhwWzJdKSxudWxsPT1lLnRva2VuQ29tbWVudHNbdV0pZS50b2tlbkNvbW1lbnRzW3VdPXAuY29tbWVudHM7ZWxzZXt2YXIgbTsobT1lLnRva2VuQ29tbWVudHNbdV0pLnB1c2guYXBwbHkobSxfdG9Db25zdW1hYmxlQXJyYXkocC5jb21tZW50cykpfXJldHVybiBudWxsIT1sLmxvY2F0aW9uRGF0YSYmKGQ9byhsLmxvY2F0aW9uRGF0YSksbnVsbCE9ZS50b2tlbkNvbW1lbnRzW2RdJiZhKGUudG9rZW5Db21tZW50c1tkXSxsKSksbH19LGUuYXR0YWNoQ29tbWVudHNUb05vZGU9YT1mdW5jdGlvbihlLGEpe3ZhciB0O2lmKG51bGwhPWUmJjAhPT1lLmxlbmd0aClyZXR1cm4gbnVsbD09YS5jb21tZW50cyYmKGEuY29tbWVudHM9W10pLCh0PWEuY29tbWVudHMpLnB1c2guYXBwbHkodCxfdG9Db25zdW1hYmxlQXJyYXkoZSkpfSxlLmxvY2F0aW9uRGF0YVRvU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciBhO3JldHVybiIyImluIGUmJiJmaXJzdF9saW5lImluIGVbMl0/YT1lWzJdOiJmaXJzdF9saW5lImluIGUmJihhPWUpLGE/YS5maXJzdF9saW5lKzErIjoiKyhhLmZpcnN0X2NvbHVtbisxKSsiLSIrKGEubGFzdF9saW5lKzErIjoiKyhhLmxhc3RfY29sdW1uKzEpKToiTm8gbG9jYXRpb24gZGF0YSJ9LGUuYmFzZUZpbGVOYW1lPWZ1bmN0aW9uKGUpe3ZhciBhPSEhKDE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdKSYmYXJndW1lbnRzWzFdLHQ9ISEoMjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pJiZhcmd1bWVudHNbMl0sbyxuO3JldHVybihuPXQ/L1xcfFwvLzovXC8vLG89ZS5zcGxpdChuKSxlPW9bby5sZW5ndGgtMV0sIShhJiYwPD1lLmluZGV4T2YoIi4iKSkpP2U6KG89ZS5zcGxpdCgiLiIpLG8ucG9wKCksImNvZmZlZSI9PT1vW28ubGVuZ3RoLTFdJiYxPG8ubGVuZ3RoJiZvLnBvcCgpLG8uam9pbigiLiIpKX0sZS5pc0NvZmZlZT1mdW5jdGlvbihlKXtyZXR1cm4vXC4oKGxpdCk/Y29mZmVlfGNvZmZlZVwubWQpJC8udGVzdChlKX0sZS5pc0xpdGVyYXRlPWZ1bmN0aW9uKGUpe3JldHVybi9cLihsaXRjb2ZmZWV8Y29mZmVlXC5tZCkkLy50ZXN0KGUpfSxlLnRocm93U3ludGF4RXJyb3I9ZnVuY3Rpb24oZSxhKXt2YXIgdDt0aHJvdyB0PW5ldyBTeW50YXhFcnJvcihlKSx0LmxvY2F0aW9uPWEsdC50b1N0cmluZz1pLHQuc3RhY2s9dC50b1N0cmluZygpLHR9LGUudXBkYXRlU3ludGF4RXJyb3I9ZnVuY3Rpb24oZSxhLHQpe3JldHVybiBlLnRvU3RyaW5nPT09aSYmKGUuY29kZXx8KGUuY29kZT1hKSxlLmZpbGVuYW1lfHwoZS5maWxlbmFtZT10KSxlLnN0YWNrPWUudG9TdHJpbmcoKSksZX0saT1mdW5jdGlvbigpe3ZhciBlLGEsdCxvLG4scixsLGksZCxjLHAsdSxtLGg7aWYoISh0aGlzLmNvZGUmJnRoaXMubG9jYXRpb24pKXJldHVybiBFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKTt2YXIgZz10aGlzLmxvY2F0aW9uO3JldHVybiBsPWcuZmlyc3RfbGluZSxyPWcuZmlyc3RfY29sdW1uLGQ9Zy5sYXN0X2xpbmUsaT1nLmxhc3RfY29sdW1uLG51bGw9PWQmJihkPWwpLG51bGw9PWkmJihpPXIpLG49dGhpcy5maWxlbmFtZXx8IltzdGRpbl0iLGU9dGhpcy5jb2RlLnNwbGl0KCJcbiIpW2xdLGg9cixvPWw9PT1kP2krMTplLmxlbmd0aCxjPWUuc2xpY2UoMCxoKS5yZXBsYWNlKC9bXlxzXS9nLCIgIikrcygiXiIsby1oKSwidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJm51bGwhPT1wcm9jZXNzJiYodD0obnVsbD09KHA9cHJvY2Vzcy5zdGRvdXQpP3ZvaWQgMDpwLmlzVFRZKSYmKG51bGw9PSh1PXByb2Nlc3MuZW52KXx8IXUuTk9ERV9ESVNBQkxFX0NPTE9SUykpLChudWxsPT0obT10aGlzLmNvbG9yZnVsKT90Om0pJiYoYT1mdW5jdGlvbihlKXtyZXR1cm4iG1sxOzMxbSIrZSsiG1swbSJ9LGU9ZS5zbGljZSgwLGgpK2EoZS5zbGljZShoLG8pKStlLnNsaWNlKG8pLGM9YShjKSksbisiOiIrKGwrMSkrIjoiKyhyKzEpKyI6IGVycm9yOiAiK3RoaXMubWVzc2FnZSsiXG4iK2UrIlxuIitjfSxlLm5hbWVXaGl0ZXNwYWNlQ2hhcmFjdGVyPWZ1bmN0aW9uKGUpe3JldHVybiIgIj09PWU/InNwYWNlIjoiXG4iPT09ZT8ibmV3bGluZSI6IlxyIj09PWU/ImNhcnJpYWdlIHJldHVybiI6Ilx0Ij09PWU/InRhYiI6ZX19LmNhbGwodGhpcykse2V4cG9ydHM6ZX0uZXhwb3J0c30oKSxyZXF1aXJlWyIuL3Jld3JpdGVyIl09ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1bXS5pbmRleE9mLHQ9cmVxdWlyZSgiLi9oZWxwZXJzIiksbyxuLHIsbCxzLGQsYyxwLHUsbSxoLGksZyxmLHksVCxOLHYsayxiLCQsXyxDO2ZvcihDPXQudGhyb3dTeW50YXhFcnJvciwkPWZ1bmN0aW9uKGUsYSl7dmFyIHQsbyxuLHIsbDtpZihlLmNvbW1lbnRzKXtpZihhLmNvbW1lbnRzJiYwIT09YS5jb21tZW50cy5sZW5ndGgpe2ZvcihsPVtdLHI9ZS5jb21tZW50cyxvPTAsbj1yLmxlbmd0aDtvPG47bysrKXQ9cltvXSx0LnVuc2hpZnQ/bC5wdXNoKHQpOmEuY29tbWVudHMucHVzaCh0KTthLmNvbW1lbnRzPWwuY29uY2F0KGEuY29tbWVudHMpfWVsc2UgYS5jb21tZW50cz1lLmNvbW1lbnRzO3JldHVybiBkZWxldGUgZS5jb21tZW50c319LE49ZnVuY3Rpb24oZSxhLHQsbyl7dmFyIG47cmV0dXJuIG49W2UsYV0sbi5nZW5lcmF0ZWQ9ITAsdCYmKG4ub3JpZ2luPXQpLG8mJiQobyxuKSxufSxlLlJld3JpdGVyPWY9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxlKX1yZXR1cm4gX2NyZWF0ZUNsYXNzKGUsW3trZXk6InJld3JpdGUiLHZhbHVlOmZ1bmN0aW9uIHJld3JpdGUoZSl7dmFyIGEsbyxuO3JldHVybiB0aGlzLnRva2Vucz1lLCgidW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJm51bGwhPT1wcm9jZXNzP251bGw9PShhPXByb2Nlc3MuZW52KT92b2lkIDA6YS5ERUJVR19UT0tFTl9TVFJFQU06dm9pZCAwKSYmKHByb2Nlc3MuZW52LkRFQlVHX1JFV1JJVFRFTl9UT0tFTl9TVFJFQU0mJmNvbnNvbGUubG9nKCJJbml0aWFsIHRva2VuIHN0cmVhbToiKSxjb25zb2xlLmxvZyhmdW5jdGlvbigpe3ZhciBlLGEsdCxvO2Zvcih0PXRoaXMudG9rZW5zLG89W10sZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyluPXRbZV0sby5wdXNoKG5bMF0rIi8iK25bMV0rKG4uY29tbWVudHM/IioiOiIiKSk7cmV0dXJuIG99LmNhbGwodGhpcykuam9pbigiICIpKSksdGhpcy5yZW1vdmVMZWFkaW5nTmV3bGluZXMoKSx0aGlzLmNsb3NlT3BlbkNhbGxzKCksdGhpcy5jbG9zZU9wZW5JbmRleGVzKCksdGhpcy5ub3JtYWxpemVMaW5lcygpLHRoaXMudGFnUG9zdGZpeENvbmRpdGlvbmFscygpLHRoaXMuYWRkSW1wbGljaXRCcmFjZXNBbmRQYXJlbnMoKSx0aGlzLmFkZFBhcmVuc1RvQ2hhaW5lZERvSWlmZSgpLHRoaXMucmVzY3VlU3Rvd2F3YXlDb21tZW50cygpLHRoaXMuYWRkTG9jYXRpb25EYXRhVG9HZW5lcmF0ZWRUb2tlbnMoKSx0aGlzLmVuZm9yY2VWYWxpZENTWEF0dHJpYnV0ZXMoKSx0aGlzLmZpeE91dGRlbnRMb2NhdGlvbkRhdGEoKSwoInVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiZudWxsIT09cHJvY2Vzcz9udWxsPT0obz1wcm9jZXNzLmVudik/dm9pZCAwOm8uREVCVUdfUkVXUklUVEVOX1RPS0VOX1NUUkVBTTp2b2lkIDApJiYocHJvY2Vzcy5lbnYuREVCVUdfVE9LRU5fU1RSRUFNJiZjb25zb2xlLmxvZygiUmV3cml0dGVuIHRva2VuIHN0cmVhbToiKSxjb25zb2xlLmxvZyhmdW5jdGlvbigpe3ZhciBlLGEsdCxvO2Zvcih0PXRoaXMudG9rZW5zLG89W10sZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyluPXRbZV0sby5wdXNoKG5bMF0rIi8iK25bMV0rKG4uY29tbWVudHM/IioiOiIiKSk7cmV0dXJuIG99LmNhbGwodGhpcykuam9pbigiICIpKSksdGhpcy50b2tlbnN9fSx7a2V5OiJzY2FuVG9rZW5zIix2YWx1ZTpmdW5jdGlvbiBzY2FuVG9rZW5zKGUpe3ZhciBhLHQsbztmb3Iobz10aGlzLnRva2VucyxhPTA7dD1vW2FdOylhKz1lLmNhbGwodGhpcyx0LGEsbyk7cmV0dXJuITB9fSx7a2V5OiJkZXRlY3RFbmQiLHZhbHVlOmZ1bmN0aW9uIGRldGVjdEVuZChlLHQsbyl7dmFyIG49Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9LHIsbCxzLGkscDtmb3IocD10aGlzLnRva2VucyxyPTA7aT1wW2VdOyl7aWYoMD09PXImJnQuY2FsbCh0aGlzLGksZSkpcmV0dXJuIG8uY2FsbCh0aGlzLGksZSk7aWYoKGw9aVswXSwwPD1hLmNhbGwoYyxsKSk/cis9MToocz1pWzBdLDA8PWEuY2FsbChkLHMpKSYmKHItPTEpLDA+cilyZXR1cm4gbi5yZXR1cm5Pbk5lZ2F0aXZlTGV2ZWw/dm9pZCAwOm8uY2FsbCh0aGlzLGksZSk7ZSs9MX1yZXR1cm4gZS0xfX0se2tleToicmVtb3ZlTGVhZGluZ05ld2xpbmVzIix2YWx1ZTpmdW5jdGlvbiByZW1vdmVMZWFkaW5nTmV3bGluZXMoKXt2YXIgZSxhLHQsbyxuLHIsbCxzLGk7Zm9yKGw9dGhpcy50b2tlbnMsZT1hPTAsbj1sLmxlbmd0aDthPG47ZT0rK2Epe3ZhciBkPV9zbGljZWRUb0FycmF5KGxbZV0sMSk7aWYoaT1kWzBdLCJURVJNSU5BVE9SIiE9PWkpYnJlYWt9aWYoMCE9PWUpe2ZvcihzPXRoaXMudG9rZW5zLnNsaWNlKDAsZSksdD0wLHI9cy5sZW5ndGg7dDxyO3QrKylvPXNbdF0sJChvLHRoaXMudG9rZW5zW2VdKTtyZXR1cm4gdGhpcy50b2tlbnMuc3BsaWNlKDAsZSl9fX0se2tleToiY2xvc2VPcGVuQ2FsbHMiLHZhbHVlOmZ1bmN0aW9uIGNsb3NlT3BlbkNhbGxzKCl7dmFyIGUsYTtyZXR1cm4gYT1mdW5jdGlvbihlKXt2YXIgYTtyZXR1cm4iKSI9PT0oYT1lWzBdKXx8IkNBTExfRU5EIj09PWF9LGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09IkNBTExfRU5EIn0sdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKHQsbyl7cmV0dXJuIkNBTExfU1RBUlQiPT09dFswXSYmdGhpcy5kZXRlY3RFbmQobysxLGEsZSksMX0pfX0se2tleToiY2xvc2VPcGVuSW5kZXhlcyIsdmFsdWU6ZnVuY3Rpb24gY2xvc2VPcGVuSW5kZXhlcygpe3ZhciBlLGE7cmV0dXJuIGE9ZnVuY3Rpb24oZSl7dmFyIGE7cmV0dXJuIl0iPT09KGE9ZVswXSl8fCJJTkRFWF9FTkQiPT09YX0sZT1mdW5jdGlvbihlKXtyZXR1cm4gZVswXT0iSU5ERVhfRU5EIn0sdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKHQsbyl7cmV0dXJuIklOREVYX1NUQVJUIj09PXRbMF0mJnRoaXMuZGV0ZWN0RW5kKG8rMSxhLGUpLDF9KX19LHtrZXk6ImluZGV4T2ZUYWciLHZhbHVlOmZ1bmN0aW9uIGluZGV4T2ZUYWcoZSl7dmFyIHQsbyxuLHIsbDt0PTA7Zm9yKHZhciBzPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheSgxPHM/cy0xOjApLGQ9MTtkPHM7ZCsrKWlbZC0xXT1hcmd1bWVudHNbZF07Zm9yKG89bj0wLHI9aS5sZW5ndGg7MDw9cj8wPD1uJiZuPHI6MD49biYmbj5yO289MDw9cj8rK246LS1uKWlmKG51bGwhPWlbb10mJigic3RyaW5nIj09dHlwZW9mIGlbb10mJihpW29dPVtpW29dXSksbD10aGlzLnRhZyhlK28rdCksMD5hLmNhbGwoaVtvXSxsKSkpcmV0dXJuLTE7cmV0dXJuIGUrbyt0LTF9fSx7a2V5OiJsb29rc09iamVjdGlzaCIsdmFsdWU6ZnVuY3Rpb24gbG9va3NPYmplY3Rpc2goZSl7dmFyIHQsbztyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZlRhZyhlLCJAIixudWxsLCI6Iil8fC0xIT09dGhpcy5pbmRleE9mVGFnKGUsbnVsbCwiOiIpfHwobz10aGlzLmluZGV4T2ZUYWcoZSxjKSwhISgtMSE9PW8mJih0PW51bGwsdGhpcy5kZXRlY3RFbmQobysxLGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0PWVbMF0sMDw9YS5jYWxsKGQsdCl9LGZ1bmN0aW9uKGUsYSl7cmV0dXJuIHQ9YX0pLCI6Ij09PXRoaXMudGFnKHQrMSkpKSl9fSx7a2V5OiJmaW5kVGFnc0JhY2t3YXJkcyIsdmFsdWU6ZnVuY3Rpb24gZmluZFRhZ3NCYWNrd2FyZHMoZSx0KXt2YXIgbyxuLHIsbCxzLGkscDtmb3Iobz1bXTswPD1lJiYoby5sZW5ndGh8fChsPXRoaXMudGFnKGUpLDA+YS5jYWxsKHQsbCkpJiYoKHM9dGhpcy50YWcoZSksMD5hLmNhbGwoYyxzKSl8fHRoaXMudG9rZW5zW2VdLmdlbmVyYXRlZCkmJihpPXRoaXMudGFnKGUpLDA+YS5jYWxsKGcsaSkpKTspKG49dGhpcy50YWcoZSksMDw9YS5jYWxsKGQsbikpJiZvLnB1c2godGhpcy50YWcoZSkpLChyPXRoaXMudGFnKGUpLDA8PWEuY2FsbChjLHIpKSYmby5sZW5ndGgmJm8ucG9wKCksZS09MTtyZXR1cm4gcD10aGlzLnRhZyhlKSwwPD1hLmNhbGwodCxwKX19LHtrZXk6ImFkZEltcGxpY2l0QnJhY2VzQW5kUGFyZW5zIix2YWx1ZTpmdW5jdGlvbiBhZGRJbXBsaWNpdEJyYWNlc0FuZFBhcmVucygpe3ZhciBlLHQ7cmV0dXJuIGU9W10sdD1udWxsLHRoaXMuc2NhblRva2VucyhmdW5jdGlvbihvLGwsZil7dmFyIGk9dGhpcyx5PV9zbGljZWRUb0FycmF5KG8sMSksVCx2LGIsJCxfLEMsRCxFLHgsSSxTLEEsUixrLE8sTCxGLHcsUCxqLE0sVSxWLHMsQixHLEgsVyxYLFkscSx6LEo7Sj15WzBdO3ZhciBLPVA9MDxsP2ZbbC0xXTpbXSxaPV9zbGljZWRUb0FycmF5KEssMSk7dz1aWzBdO3ZhciBRPUw9bDxmLmxlbmd0aC0xP2ZbbCsxXTpbXSxlZT1fc2xpY2VkVG9BcnJheShRLDEpO2lmKE89ZWVbMF0sVz1mdW5jdGlvbigpe3JldHVybiBlW2UubGVuZ3RoLTFdfSxYPWwsYj1mdW5jdGlvbihlKXtyZXR1cm4gbC1YK2V9LEk9ZnVuY3Rpb24oZSl7dmFyIGE7cmV0dXJuIG51bGw9PWV8fG51bGw9PShhPWVbMl0pP3ZvaWQgMDphLm91cnN9LEE9ZnVuY3Rpb24oZSl7cmV0dXJuIEkoZSkmJiJ7Ij09PShudWxsPT1lP3ZvaWQgMDplWzBdKX0sUz1mdW5jdGlvbihlKXtyZXR1cm4gSShlKSYmIigiPT09KG51bGw9PWU/dm9pZCAwOmVbMF0pfSxDPWZ1bmN0aW9uKCl7cmV0dXJuIEkoVygpKX0sRD1mdW5jdGlvbigpe3JldHVybiBTKFcoKSl9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gQShXKCkpfSxFPWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIEMoKSYmIkNPTlRST0wiPT09KG51bGw9PShlPVcoKSk/dm9pZCAwOmVbMF0pfSxZPWZ1bmN0aW9uKGEpe3JldHVybiBlLnB1c2goWyIoIixhLHtvdXJzOiEwfV0pLGYuc3BsaWNlKGEsMCxOKCJDQUxMX1NUQVJUIiwiKCIsWyIiLCJpbXBsaWNpdCBmdW5jdGlvbiBjYWxsIixvWzJdXSxQKSl9LFQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wb3AoKSxmLnNwbGljZShsLDAsTigiQ0FMTF9FTkQiLCIpIixbIiIsImVuZCBvZiBpbnB1dCIsb1syXV0sUCkpLGwrPTF9LHE9ZnVuY3Rpb24oYSl7dmFyIHQ9ISgxPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxuO3JldHVybiBlLnB1c2goWyJ7IixhLHtzYW1lTGluZTohMCxzdGFydHNMaW5lOnQsb3VyczohMH1dKSxuPW5ldyBTdHJpbmcoInsiKSxuLmdlbmVyYXRlZD0hMCxmLnNwbGljZShhLDAsTigieyIsbixvLFApKX0sdj1mdW5jdGlvbihhKXtyZXR1cm4gYT1udWxsPT1hP2w6YSxlLnBvcCgpLGYuc3BsaWNlKGEsMCxOKCJ9IiwifSIsbyxQKSksbCs9MX0sJD1mdW5jdGlvbihlKXt2YXIgYTtyZXR1cm4gYT1udWxsLGkuZGV0ZWN0RW5kKGUsZnVuY3Rpb24oZSl7cmV0dXJuIlRFUk1JTkFUT1IiPT09ZVswXX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gYT10fSx7cmV0dXJuT25OZWdhdGl2ZUxldmVsOiEwfSksbnVsbCE9YSYmaS5sb29rc09iamVjdGlzaChhKzEpfSwoRCgpfHx4KCkpJiYwPD1hLmNhbGwocixKKXx8eCgpJiYiOiI9PT13JiYiRk9SIj09PUopcmV0dXJuIGUucHVzaChbIkNPTlRST0wiLGwse291cnM6ITB9XSksYigxKTtpZigiSU5ERU5UIj09PUomJkMoKSl7aWYoIj0+IiE9PXcmJiItPiIhPT13JiYiWyIhPT13JiYiKCIhPT13JiYiLCIhPT13JiYieyIhPT13JiYiRUxTRSIhPT13JiYiPSIhPT13KWZvcig7RCgpfHx4KCkmJiI6IiE9PXc7KUQoKT9UKCk6digpO3JldHVybiBFKCkmJmUucG9wKCksZS5wdXNoKFtKLGxdKSxiKDEpfWlmKDA8PWEuY2FsbChjLEopKXJldHVybiBlLnB1c2goW0osbF0pLGIoMSk7aWYoMDw9YS5jYWxsKGQsSikpe2Zvcig7QygpOylEKCk/VCgpOngoKT92KCk6ZS5wb3AoKTt0PWUucG9wKCl9aWYoXz1mdW5jdGlvbigpe3ZhciBlLHQsbixyO3JldHVybihuPWkuZmluZFRhZ3NCYWNrd2FyZHMobCxbIkZPUiJdKSYmaS5maW5kVGFnc0JhY2t3YXJkcyhsLFsiRk9SSU4iLCJGT1JPRiIsIkZPUkZST00iXSksZT1ufHxpLmZpbmRUYWdzQmFja3dhcmRzKGwsWyJXSElMRSIsIlVOVElMIiwiTE9PUCIsIkxFQURJTkdfV0hFTiJdKSwhIWUpJiYodD0hMSxyPW9bMl0uZmlyc3RfbGluZSxpLmRldGVjdEVuZChsLGZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0PWVbMF0sMDw9YS5jYWxsKGcsdCl9LGZ1bmN0aW9uKGUsYSl7dmFyIG89ZlthLTFdfHxbXSxuPV9zbGljZWRUb0FycmF5KG8sMyksbDtyZXR1cm4gdz1uWzBdLGw9blsyXS5maXJzdF9saW5lLHQ9cj09PWwmJigiLT4iPT09d3x8Ij0+Ij09PXcpfSx7cmV0dXJuT25OZWdhdGl2ZUxldmVsOiEwfSksdCl9LCgwPD1hLmNhbGwobSxKKSYmby5zcGFjZWR8fCI/Ij09PUomJjA8bCYmIWZbbC0xXS5zcGFjZWQpJiYoMDw9YS5jYWxsKHAsTyl8fCIuLi4iPT09TyYmKGo9dGhpcy50YWcobCsyKSwwPD1hLmNhbGwocCxqKSkmJiF0aGlzLmZpbmRUYWdzQmFja3dhcmRzKGwsWyJJTkRFWF9TVEFSVCIsIlsiXSl8fDA8PWEuY2FsbChoLE8pJiYhTC5zcGFjZWQmJiFMLm5ld0xpbmUpJiYhXygpKXJldHVybiI/Ij09PUomJihKPW9bMF09IkZVTkNfRVhJU1QiKSxZKGwrMSksYigyKTtpZigwPD1hLmNhbGwobSxKKSYmLTE8dGhpcy5pbmRleE9mVGFnKGwrMSwiSU5ERU5UIikmJnRoaXMubG9va3NPYmplY3Rpc2gobCsyKSYmIXRoaXMuZmluZFRhZ3NCYWNrd2FyZHMobCxbIkNMQVNTIiwiRVhURU5EUyIsIklGIiwiQ0FUQ0giLCJTV0lUQ0giLCJMRUFESU5HX1dIRU4iLCJGT1IiLCJXSElMRSIsIlVOVElMIl0pKXJldHVybiBZKGwrMSksZS5wdXNoKFsiSU5ERU5UIixsKzJdKSxiKDMpO2lmKCI6Ij09PUope2lmKFY9ZnVuY3Rpb24oKXt2YXIgZTtzd2l0Y2goITEpe2Nhc2UgZT10aGlzLnRhZyhsLTEpLDA+YS5jYWxsKGQsZSk6cmV0dXJuIHRbMV07Y2FzZSJAIiE9PXRoaXMudGFnKGwtMik6cmV0dXJuIGwtMjtkZWZhdWx0OnJldHVybiBsLTF9fS5jYWxsKHRoaXMpLHo9MD49Vnx8KE09dGhpcy50YWcoVi0xKSwwPD1hLmNhbGwoZyxNKSl8fGZbVi0xXS5uZXdMaW5lLFcoKSl7dmFyIGFlPVcoKSx0ZT1fc2xpY2VkVG9BcnJheShhZSwyKTtpZihIPXRlWzBdLEI9dGVbMV0sKCJ7Ij09PUh8fCJJTkRFTlQiPT09SCYmInsiPT09dGhpcy50YWcoQi0xKSkmJih6fHwiLCI9PT10aGlzLnRhZyhWLTEpfHwieyI9PT10aGlzLnRhZyhWLTEpKSlyZXR1cm4gYigxKX1yZXR1cm4gcShWLCEheiksYigyKX1pZigwPD1hLmNhbGwoZyxKKSlmb3IoUj1lLmxlbmd0aC0xOzA8PVImJihHPWVbUl0sISFJKEcpKTtSKz0tMSlBKEcpJiYoR1syXS5zYW1lTGluZT0hMSk7aWYoaz0iT1VUREVOVCI9PT13fHxQLm5ld0xpbmUsMDw9YS5jYWxsKHUsSil8fDA8PWEuY2FsbChuLEopJiZrfHwoIi4uIj09PUp8fCIuLi4iPT09SikmJnRoaXMuZmluZFRhZ3NCYWNrd2FyZHMobCxbIklOREVYX1NUQVJUIl0pKWZvcig7QygpOyl7dmFyIG9lPVcoKSxuZT1fc2xpY2VkVG9BcnJheShvZSwzKTtIPW5lWzBdLEI9bmVbMV07dmFyIHJlPW5lWzJdO2lmKHM9cmUuc2FtZUxpbmUsej1yZS5zdGFydHNMaW5lLEQoKSYmIiwiIT09d3x8IiwiPT09dyYmIlRFUk1JTkFUT1IiPT09SiYmbnVsbD09TylUKCk7ZWxzZSBpZih4KCkmJnMmJiJURVJNSU5BVE9SIiE9PUomJiI6IiE9PXcmJiEoKCJQT1NUX0lGIj09PUp8fCJGT1IiPT09Snx8IldISUxFIj09PUp8fCJVTlRJTCI9PT1KKSYmeiYmJChsKzEpKSl2KCk7ZWxzZSBpZih4KCkmJiJURVJNSU5BVE9SIj09PUomJiIsIiE9PXcmJiEoeiYmdGhpcy5sb29rc09iamVjdGlzaChsKzEpKSl2KCk7ZWxzZSBicmVha31pZigiLCI9PT1KJiYhdGhpcy5sb29rc09iamVjdGlzaChsKzEpJiZ4KCkmJiJGT1JPRiIhPT0oVT10aGlzLnRhZyhsKzIpKSYmIkZPUklOIiE9PVUmJigiVEVSTUlOQVRPUiIhPT1PfHwhdGhpcy5sb29rc09iamVjdGlzaChsKzIpKSlmb3IoRj0iT1VUREVOVCI9PT1PPzE6MDt4KCk7KXYobCtGKTtyZXR1cm4gYigxKX0pfX0se2tleToiZW5mb3JjZVZhbGlkQ1NYQXR0cmlidXRlcyIsdmFsdWU6ZnVuY3Rpb24gZW5mb3JjZVZhbGlkQ1NYQXR0cmlidXRlcygpe3JldHVybiB0aGlzLnNjYW5Ub2tlbnMoZnVuY3Rpb24oZSxhLHQpe3ZhciBvLG47cmV0dXJuIGUuY3N4Q29sb24mJihvPXRbYSsxXSwiU1RSSU5HX1NUQVJUIiE9PShuPW9bMF0pJiYiU1RSSU5HIiE9PW4mJiIoIiE9PW4mJkMoImV4cGVjdGVkIHdyYXBwZWQgb3IgcXVvdGVkIEpTWCBhdHRyaWJ1dGUiLG9bMl0pKSwxfSl9fSx7a2V5OiJyZXNjdWVTdG93YXdheUNvbW1lbnRzIix2YWx1ZTpmdW5jdGlvbiByZXNjdWVTdG93YXdheUNvbW1lbnRzKCl7dmFyIGUsdCxvO3JldHVybiBlPWZ1bmN0aW9uKGUsYSx0LG8pe3JldHVybiJURVJNSU5BVE9SIiE9PXRbYV1bMF0mJnRbb10oTigiVEVSTUlOQVRPUiIsIlxuIix0W2FdKSksdFtvXShOKCJKUyIsIiIsdFthXSxlKSl9LG89ZnVuY3Rpb24odCxvLG4pe3ZhciByLHMsaSxkLGMscCx1O2ZvcihzPW87cyE9PW4ubGVuZ3RoJiYoYz1uW3NdWzBdLDA8PWEuY2FsbChsLGMpKTspcysrO2lmKCEocz09PW4ubGVuZ3RofHwocD1uW3NdWzBdLDA8PWEuY2FsbChsLHApKSkpe2Zvcih1PXQuY29tbWVudHMsaT0wLGQ9dS5sZW5ndGg7aTxkO2krKylyPXVbaV0sci51bnNoaWZ0PSEwO3JldHVybiAkKHQsbltzXSksMX1yZXR1cm4gcz1uLmxlbmd0aC0xLGUodCxzLG4sInB1c2giKSwxfSx0PWZ1bmN0aW9uKHQsbyxuKXt2YXIgcixzLGk7Zm9yKHI9bzstMSE9PXImJihzPW5bcl1bMF0sMDw9YS5jYWxsKGwscykpOylyLS07cmV0dXJuLTE9PT1yfHwoaT1uW3JdWzBdLDA8PWEuY2FsbChsLGkpKT8oZSh0LDAsbiwidW5zaGlmdCIpLDMpOigkKHQsbltyXSksMSl9LHRoaXMuc2NhblRva2VucyhmdW5jdGlvbihlLG4scil7dmFyIHMsaSxkLGMscDtpZighZS5jb21tZW50cylyZXR1cm4gMTtpZihwPTEsZD1lWzBdLDA8PWEuY2FsbChsLGQpKXtmb3Iocz17Y29tbWVudHM6W119LGk9ZS5jb21tZW50cy5sZW5ndGgtMTstMSE9PWk7KSExPT09ZS5jb21tZW50c1tpXS5uZXdMaW5lJiYhMT09PWUuY29tbWVudHNbaV0uaGVyZSYmKHMuY29tbWVudHMudW5zaGlmdChlLmNvbW1lbnRzW2ldKSxlLmNvbW1lbnRzLnNwbGljZShpLDEpKSxpLS07MCE9PXMuY29tbWVudHMubGVuZ3RoJiYocD10KHMsbi0xLHIpKSwwIT09ZS5jb21tZW50cy5sZW5ndGgmJm8oZSxuLHIpfWVsc2V7Zm9yKHM9e2NvbW1lbnRzOltdfSxpPWUuY29tbWVudHMubGVuZ3RoLTE7LTEhPT1pOykhZS5jb21tZW50c1tpXS5uZXdMaW5lfHxlLmNvbW1lbnRzW2ldLnVuc2hpZnR8fCJKUyI9PT1lWzBdJiZlLmdlbmVyYXRlZHx8KHMuY29tbWVudHMudW5zaGlmdChlLmNvbW1lbnRzW2ldKSxlLmNvbW1lbnRzLnNwbGljZShpLDEpKSxpLS07MCE9PXMuY29tbWVudHMubGVuZ3RoJiYocD1vKHMsbisxLHIpKX1yZXR1cm4gMD09PShudWxsPT0oYz1lLmNvbW1lbnRzKT92b2lkIDA6Yy5sZW5ndGgpJiZkZWxldGUgZS5jb21tZW50cyxwfSl9fSx7a2V5OiJhZGRMb2NhdGlvbkRhdGFUb0dlbmVyYXRlZFRva2VucyIsdmFsdWU6ZnVuY3Rpb24gYWRkTG9jYXRpb25EYXRhVG9HZW5lcmF0ZWRUb2tlbnMoKXtyZXR1cm4gdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKGUsYSx0KXt2YXIgbyxuLHIsbCxzLGk7aWYoZVsyXSlyZXR1cm4gMTtpZighKGUuZ2VuZXJhdGVkfHxlLmV4cGxpY2l0KSlyZXR1cm4gMTtpZigieyI9PT1lWzBdJiYocj1udWxsPT0ocz10W2ErMV0pP3ZvaWQgMDpzWzJdKSl7dmFyIGQ9cjtuPWQuZmlyc3RfbGluZSxvPWQuZmlyc3RfY29sdW1ufWVsc2UgaWYobD1udWxsPT0oaT10W2EtMV0pP3ZvaWQgMDppWzJdKXt2YXIgYz1sO249Yy5sYXN0X2xpbmUsbz1jLmxhc3RfY29sdW1ufWVsc2Ugbj1vPTA7cmV0dXJuIGVbMl09e2ZpcnN0X2xpbmU6bixmaXJzdF9jb2x1bW46byxsYXN0X2xpbmU6bixsYXN0X2NvbHVtbjpvfSwxfSl9fSx7a2V5OiJmaXhPdXRkZW50TG9jYXRpb25EYXRhIix2YWx1ZTpmdW5jdGlvbiBmaXhPdXRkZW50TG9jYXRpb25EYXRhKCl7cmV0dXJuIHRoaXMuc2NhblRva2VucyhmdW5jdGlvbihlLGEsdCl7dmFyIG87cmV0dXJuIk9VVERFTlQiPT09ZVswXXx8ZS5nZW5lcmF0ZWQmJiJDQUxMX0VORCI9PT1lWzBdfHxlLmdlbmVyYXRlZCYmIn0iPT09ZVswXT8obz10W2EtMV1bMl0sZVsyXT17Zmlyc3RfbGluZTpvLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46by5sYXN0X2NvbHVtbixsYXN0X2xpbmU6by5sYXN0X2xpbmUsbGFzdF9jb2x1bW46by5sYXN0X2NvbHVtbn0sMSk6MX0pfX0se2tleToiYWRkUGFyZW5zVG9DaGFpbmVkRG9JaWZlIix2YWx1ZTpmdW5jdGlvbiBhZGRQYXJlbnNUb0NoYWluZWREb0lpZmUoKXt2YXIgZSx0LG87cmV0dXJuIHQ9ZnVuY3Rpb24oZSxhKXtyZXR1cm4iT1VUREVOVCI9PT10aGlzLnRhZyhhLTEpfSxlPWZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYocj1lWzBdLCEoMD5hLmNhbGwobixyKSkpcmV0dXJuIHRoaXMudG9rZW5zLnNwbGljZShvLDAsTigiKCIsIigiLHRoaXMudG9rZW5zW29dKSksdGhpcy50b2tlbnMuc3BsaWNlKHQrMSwwLE4oIikiLCIpIix0aGlzLnRva2Vuc1t0XSkpfSxvPW51bGwsdGhpcy5zY2FuVG9rZW5zKGZ1bmN0aW9uKGEsbil7dmFyIHIsbDtyZXR1cm4iZG8iPT09YVsxXT8obz1uLHI9bisxLCJQQVJBTV9TVEFSVCI9PT10aGlzLnRhZyhuKzEpJiYocj1udWxsLHRoaXMuZGV0ZWN0RW5kKG4rMSxmdW5jdGlvbihlLGEpe3JldHVybiJQQVJBTV9FTkQiPT09dGhpcy50YWcoYS0xKX0sZnVuY3Rpb24oZSxhKXtyZXR1cm4gcj1hfSkpLG51bGw9PXJ8fCItPiIhPT0obD10aGlzLnRhZyhyKSkmJiI9PiIhPT1sfHwiSU5ERU5UIiE9PXRoaXMudGFnKHIrMSkpPzE6KHRoaXMuZGV0ZWN0RW5kKHIrMSx0LGUpLDIpOjF9KX19LHtrZXk6Im5vcm1hbGl6ZUxpbmVzIix2YWx1ZTpmdW5jdGlvbiBub3JtYWxpemVMaW5lcygpe3ZhciBlPXRoaXMsdCxvLHIsbCxkLGMscCx1LG07cmV0dXJuIG09ZD11PW51bGwscD1udWxsLGM9bnVsbCxsPVtdLHI9ZnVuY3Rpb24oZSx0KXt2YXIgbyxyLGwsaTtyZXR1cm4iOyIhPT1lWzFdJiYobz1lWzBdLDA8PWEuY2FsbCh5LG8pKSYmISgiVEVSTUlOQVRPUiI9PT1lWzBdJiYocj10aGlzLnRhZyh0KzEpLDA8PWEuY2FsbChzLHIpKSkmJiEoIkVMU0UiPT09ZVswXSYmKCJUSEVOIiE9PW18fGN8fHApKSYmKCJDQVRDSCIhPT0obD1lWzBdKSYmIkZJTkFMTFkiIT09bHx8Ii0+IiE9PW0mJiI9PiIhPT1tKXx8KGk9ZVswXSwwPD1hLmNhbGwobixpKSkmJih0aGlzLnRva2Vuc1t0LTFdLm5ld0xpbmV8fCJPVVRERU5UIj09PXRoaXMudG9rZW5zW3QtMV1bMF0pfSx0PWZ1bmN0aW9uKGUsYSl7cmV0dXJuIkVMU0UiPT09ZVswXSYmIlRIRU4iPT09bSYmbC5wb3AoKSx0aGlzLnRva2Vucy5zcGxpY2UoIiwiPT09dGhpcy50YWcoYS0xKT9hLTE6YSwwLHUpfSxvPWZ1bmN0aW9uKGEsdCl7dmFyIG8sbixyO2lmKHI9bC5sZW5ndGgsISgwPHIpKXJldHVybiB0O289bC5wb3AoKTt2YXIgcz1lLmluZGVudGF0aW9uKGFbb10pLGk9X3NsaWNlZFRvQXJyYXkocywyKTtyZXR1cm4gbj1pWzFdLG5bMV09MipyLGEuc3BsaWNlKHQsMCxuKSxuWzFdPTIsYS5zcGxpY2UodCsxLDAsbiksZS5kZXRlY3RFbmQodCsyLGZ1bmN0aW9uKGUpe3ZhciBhO3JldHVybiJPVVRERU5UIj09PShhPWVbMF0pfHwiVEVSTUlOQVRPUiI9PT1hfSxmdW5jdGlvbihlLHQpe2lmKCJPVVRERU5UIj09PXRoaXMudGFnKHQpJiYiT1VUREVOVCI9PT10aGlzLnRhZyh0KzEpKXJldHVybiBhLnNwbGljZSh0LDIpfSksdCsyfSx0aGlzLnNjYW5Ub2tlbnMoZnVuY3Rpb24oZSxuLGkpe3ZhciBoPV9zbGljZWRUb0FycmF5KGUsMSksZyxmLHksayxOLHY7aWYodj1oWzBdLGc9KCItPiI9PT12fHwiPT4iPT09dikmJnRoaXMuZmluZFRhZ3NCYWNrd2FyZHMobixbIklGIiwiV0hJTEUiLCJGT1IiLCJVTlRJTCIsIlNXSVRDSCIsIldIRU4iLCJMRUFESU5HX1dIRU4iLCJbIiwiSU5ERVhfU1RBUlQiXSkmJiF0aGlzLmZpbmRUYWdzQmFja3dhcmRzKG4sWyJUSEVOIiwiLi4iLCIuLi4iXSksIlRFUk1JTkFUT1IiPT09dil7aWYoIkVMU0UiPT09dGhpcy50YWcobisxKSYmIk9VVERFTlQiIT09dGhpcy50YWcobi0xKSlyZXR1cm4gaS5zcGxpY2UuYXBwbHkoaSxbbiwxXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuaW5kZW50YXRpb24oKSkpKSwxO2lmKGs9dGhpcy50YWcobisxKSwwPD1hLmNhbGwocyxrKSlyZXR1cm4gaS5zcGxpY2UobiwxKSwwfWlmKCJDQVRDSCI9PT12KWZvcihmPXk9MTsyPj15O2Y9Kyt5KWlmKCJPVVRERU5UIj09PShOPXRoaXMudGFnKG4rZikpfHwiVEVSTUlOQVRPUiI9PT1OfHwiRklOQUxMWSI9PT1OKXJldHVybiBpLnNwbGljZS5hcHBseShpLFtuK2YsMF0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0aGlzLmluZGVudGF0aW9uKCkpKSksMitmO2lmKCgiLT4iPT09dnx8Ij0+Ij09PXYpJiYoIiwiPT09dGhpcy50YWcobisxKXx8Ii4iPT09dGhpcy50YWcobisxKSYmZS5uZXdMaW5lKSl7dmFyIGI9dGhpcy5pbmRlbnRhdGlvbihpW25dKSwkPV9zbGljZWRUb0FycmF5KGIsMik7cmV0dXJuIGQ9JFswXSx1PSRbMV0saS5zcGxpY2UobisxLDAsZCx1KSwxfWlmKDA8PWEuY2FsbChULHYpJiYiSU5ERU5UIiE9PXRoaXMudGFnKG4rMSkmJigiRUxTRSIhPT12fHwiSUYiIT09dGhpcy50YWcobisxKSkmJiFnKXttPXY7dmFyIF89dGhpcy5pbmRlbnRhdGlvbihpW25dKSxDPV9zbGljZWRUb0FycmF5KF8sMik7cmV0dXJuIGQ9Q1swXSx1PUNbMV0sIlRIRU4iPT09bSYmKGQuZnJvbVRoZW49ITApLCJUSEVOIj09PXYmJihwPXRoaXMuZmluZFRhZ3NCYWNrd2FyZHMobixbIkxFQURJTkdfV0hFTiJdKSYmIklGIj09PXRoaXMudGFnKG4rMSksYz10aGlzLmZpbmRUYWdzQmFja3dhcmRzKG4sWyJJRiJdKSYmIklGIj09PXRoaXMudGFnKG4rMSkpLCJUSEVOIj09PXYmJnRoaXMuZmluZFRhZ3NCYWNrd2FyZHMobixbIklGIl0pJiZsLnB1c2gobiksIkVMU0UiPT09diYmIk9VVERFTlQiIT09dGhpcy50YWcobi0xKSYmKG49byhpLG4pKSxpLnNwbGljZShuKzEsMCxkKSx0aGlzLmRldGVjdEVuZChuKzIscix0KSwiVEhFTiI9PT12JiZpLnNwbGljZShuLDEpLDF9cmV0dXJuIDF9KX19LHtrZXk6InRhZ1Bvc3RmaXhDb25kaXRpb25hbHMiLHZhbHVlOmZ1bmN0aW9uIHRhZ1Bvc3RmaXhDb25kaXRpb25hbHMoKXt2YXIgZSx0LG87cmV0dXJuIG89bnVsbCx0PWZ1bmN0aW9uKGUsdCl7dmFyIG89X3NsaWNlZFRvQXJyYXkoZSwxKSxuLHI7cj1vWzBdO3ZhciBsPV9zbGljZWRUb0FycmF5KHRoaXMudG9rZW5zW3QtMV0sMSk7cmV0dXJuIG49bFswXSwiVEVSTUlOQVRPUiI9PT1yfHwiSU5ERU5UIj09PXImJjA+YS5jYWxsKFQsbil9LGU9ZnVuY3Rpb24oZSl7aWYoIklOREVOVCIhPT1lWzBdfHxlLmdlbmVyYXRlZCYmIWUuZnJvbVRoZW4pcmV0dXJuIG9bMF09IlBPU1RfIitvWzBdfSx0aGlzLnNjYW5Ub2tlbnMoZnVuY3Rpb24oYSxuKXtyZXR1cm4iSUYiPT09YVswXT8obz1hLHRoaXMuZGV0ZWN0RW5kKG4rMSx0LGUpLDEpOjF9KX19LHtrZXk6ImluZGVudGF0aW9uIix2YWx1ZTpmdW5jdGlvbiBpbmRlbnRhdGlvbihlKXt2YXIgYSx0O3JldHVybiBhPVsiSU5ERU5UIiwyXSx0PVsiT1VUREVOVCIsMl0sZT8oYS5nZW5lcmF0ZWQ9dC5nZW5lcmF0ZWQ9ITAsYS5vcmlnaW49dC5vcmlnaW49ZSk6YS5leHBsaWNpdD10LmV4cGxpY2l0PSEwLFthLHRdfX0se2tleToidGFnIix2YWx1ZTpmdW5jdGlvbiB0YWcoZSl7dmFyIGE7cmV0dXJuIG51bGw9PShhPXRoaXMudG9rZW5zW2VdKT92b2lkIDA6YVswXX19XSksZX0oKTtyZXR1cm4gZS5wcm90b3R5cGUuZ2VuZXJhdGU9TixlfS5jYWxsKHRoaXMpLG89W1siKCIsIikiXSxbIlsiLCJdIl0sWyJ7IiwifSJdLFsiSU5ERU5UIiwiT1VUREVOVCJdLFsiQ0FMTF9TVEFSVCIsIkNBTExfRU5EIl0sWyJQQVJBTV9TVEFSVCIsIlBBUkFNX0VORCJdLFsiSU5ERVhfU1RBUlQiLCJJTkRFWF9FTkQiXSxbIlNUUklOR19TVEFSVCIsIlNUUklOR19FTkQiXSxbIlJFR0VYX1NUQVJUIiwiUkVHRVhfRU5EIl1dLGUuSU5WRVJTRVM9aT17fSxjPVtdLGQ9W10sdj0wLGI9by5sZW5ndGg7djxiO3YrKyl7dmFyIEQ9X3NsaWNlZFRvQXJyYXkob1t2XSwyKTtrPURbMF0sXz1EWzFdLGMucHVzaChpW19dPWspLGQucHVzaChpW2tdPV8pfXM9WyJDQVRDSCIsIlRIRU4iLCJFTFNFIiwiRklOQUxMWSJdLmNvbmNhdChkKSxtPVsiSURFTlRJRklFUiIsIlBST1BFUlRZIiwiU1VQRVIiLCIpIiwiQ0FMTF9FTkQiLCJdIiwiSU5ERVhfRU5EIiwiQCIsIlRISVMiXSxwPVsiSURFTlRJRklFUiIsIkNTWF9UQUciLCJQUk9QRVJUWSIsIk5VTUJFUiIsIklORklOSVRZIiwiTkFOIiwiU1RSSU5HIiwiU1RSSU5HX1NUQVJUIiwiUkVHRVgiLCJSRUdFWF9TVEFSVCIsIkpTIiwiTkVXIiwiUEFSQU1fU1RBUlQiLCJDTEFTUyIsIklGIiwiVFJZIiwiU1dJVENIIiwiVEhJUyIsIlVOREVGSU5FRCIsIk5VTEwiLCJCT09MIiwiVU5BUlkiLCJZSUVMRCIsIkFXQUlUIiwiVU5BUllfTUFUSCIsIlNVUEVSIiwiVEhST1ciLCJAIiwiLT4iLCI9PiIsIlsiLCIoIiwieyIsIi0tIiwiKysiXSxoPVsiKyIsIi0iXSx1PVsiUE9TVF9JRiIsIkZPUiIsIldISUxFIiwiVU5USUwiLCJXSEVOIiwiQlkiLCJMT09QIiwiVEVSTUlOQVRPUiJdLFQ9WyJFTFNFIiwiLT4iLCI9PiIsIlRSWSIsIkZJTkFMTFkiLCJUSEVOIl0seT1bIlRFUk1JTkFUT1IiLCJDQVRDSCIsIkZJTkFMTFkiLCJFTFNFIiwiT1VUREVOVCIsIkxFQURJTkdfV0hFTiJdLGc9WyJURVJNSU5BVE9SIiwiSU5ERU5UIiwiT1VUREVOVCJdLG49WyIuIiwiPy4iLCI6OiIsIj86OiJdLHI9WyJJRiIsIlRSWSIsIkZJTkFMTFkiLCJDQVRDSCIsIkNMQVNTIiwiU1dJVENIIl0sbD1bIigiLCIpIiwiWyIsIl0iLCJ7IiwifSIsIi4iLCIuLiIsIi4uLiIsIiwiLCI9IiwiKysiLCItLSIsIj8iLCJBUyIsIkFXQUlUIiwiQ0FMTF9TVEFSVCIsIkNBTExfRU5EIiwiREVGQVVMVCIsIkVMU0UiLCJFWFRFTkRTIiwiRVhQT1JUIiwiRk9SSU4iLCJGT1JPRiIsIkZPUkZST00iLCJJTVBPUlQiLCJJTkRFTlQiLCJJTkRFWF9TT0FLIiwiTEVBRElOR19XSEVOIiwiT1VUREVOVCIsIlBBUkFNX0VORCIsIlJFR0VYX1NUQVJUIiwiUkVHRVhfRU5EIiwiUkVUVVJOIiwiU1RSSU5HX0VORCIsIlRIUk9XIiwiVU5BUlkiLCJZSUVMRCJdLmNvbmNhdChoLmNvbmNhdCh1LmNvbmNhdChuLmNvbmNhdChyKSkpKX0uY2FsbCh0aGlzKSx7ZXhwb3J0czplfS5leHBvcnRzfSgpLHJlcXVpcmVbIi4vbGV4ZXIiXT1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVtdLmluZGV4T2YsdD1bXS5zbGljZSxvPXJlcXVpcmUoIi4vcmV3cml0ZXIiKSxuLHIsbCxzLGksZCxjLHAsdSxtLGgsZyxmLHksayxULE4sdixiLCQsXyxDLEQsRSx4LEksUyxBLFIsTyxMLEYsdyxQLGosTSxVLFYsQixHLEgsVyxYLFkscSx6LEosSyxaLFEsZWUsYWUsdGUsb2UsbmUscmUsbGUsc2UsaWUsZGUsY2UscGUsdWUsbWUsaGUsZ2UsZmUseWUsa2UsVGUsTmUsdmUsYmUsJGU7ej1vLlJld3JpdGVyLFM9by5JTlZFUlNFUzt2YXIgX2U9cmVxdWlyZSgiLi9oZWxwZXJzIik7aGU9X2UuY291bnQsYmU9X2Uuc3RhcnRzLG1lPV9lLmNvbXBhY3QsdmU9X2UucmVwZWF0LGdlPV9lLmludmVydExpdGVyYXRlLE5lPV9lLm1lcmdlLHVlPV9lLmF0dGFjaENvbW1lbnRzVG9Ob2RlLFRlPV9lLmxvY2F0aW9uRGF0YVRvU3RyaW5nLCRlPV9lLnRocm93U3ludGF4RXJyb3IsZS5MZXhlcj13PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe19jbGFzc0NhbGxDaGVjayh0aGlzLGUpfXJldHVybiBfY3JlYXRlQ2xhc3MoZSxbe2tleToidG9rZW5pemUiLHZhbHVlOmZ1bmN0aW9uIHRva2VuaXplKGUpe3ZhciBhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx0LG8sbixyO2Zvcih0aGlzLmxpdGVyYXRlPWEubGl0ZXJhdGUsdGhpcy5pbmRlbnQ9MCx0aGlzLmJhc2VJbmRlbnQ9MCx0aGlzLmluZGVidD0wLHRoaXMub3V0ZGVidD0wLHRoaXMuaW5kZW50cz1bXSx0aGlzLmluZGVudExpdGVyYWw9IiIsdGhpcy5lbmRzPVtdLHRoaXMudG9rZW5zPVtdLHRoaXMuc2VlbkZvcj0hMSx0aGlzLnNlZW5JbXBvcnQ9ITEsdGhpcy5zZWVuRXhwb3J0PSExLHRoaXMuaW1wb3J0U3BlY2lmaWVyTGlzdD0hMSx0aGlzLmV4cG9ydFNwZWNpZmllckxpc3Q9ITEsdGhpcy5jc3hEZXB0aD0wLHRoaXMuY3N4T2JqQXR0cmlidXRlPXt9LHRoaXMuY2h1bmtMaW5lPWEubGluZXx8MCx0aGlzLmNodW5rQ29sdW1uPWEuY29sdW1ufHwwLGU9dGhpcy5jbGVhbihlKSxuPTA7dGhpcy5jaHVuaz1lLnNsaWNlKG4pOyl7dD10aGlzLmlkZW50aWZpZXJUb2tlbigpfHx0aGlzLmNvbW1lbnRUb2tlbigpfHx0aGlzLndoaXRlc3BhY2VUb2tlbigpfHx0aGlzLmxpbmVUb2tlbigpfHx0aGlzLnN0cmluZ1Rva2VuKCl8fHRoaXMubnVtYmVyVG9rZW4oKXx8dGhpcy5jc3hUb2tlbigpfHx0aGlzLnJlZ2V4VG9rZW4oKXx8dGhpcy5qc1Rva2VuKCl8fHRoaXMubGl0ZXJhbFRva2VuKCk7dmFyIGw9dGhpcy5nZXRMaW5lQW5kQ29sdW1uRnJvbUNodW5rKHQpLHM9X3NsaWNlZFRvQXJyYXkobCwyKTtpZih0aGlzLmNodW5rTGluZT1zWzBdLHRoaXMuY2h1bmtDb2x1bW49c1sxXSxuKz10LGEudW50aWxCYWxhbmNlZCYmMD09PXRoaXMuZW5kcy5sZW5ndGgpcmV0dXJue3Rva2Vuczp0aGlzLnRva2VucyxpbmRleDpufX1yZXR1cm4gdGhpcy5jbG9zZUluZGVudGF0aW9uKCksKG89dGhpcy5lbmRzLnBvcCgpKSYmdGhpcy5lcnJvcigibWlzc2luZyAiK28udGFnLChudWxsPT0ocj1vLm9yaWdpbik/bzpyKVsyXSksITE9PT1hLnJld3JpdGU/dGhpcy50b2tlbnM6KG5ldyB6KS5yZXdyaXRlKHRoaXMudG9rZW5zKX19LHtrZXk6ImNsZWFuIix2YWx1ZTpmdW5jdGlvbiBjbGVhbihlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09biYmKGU9ZS5zbGljZSgxKSksZT1lLnJlcGxhY2UoL1xyL2csIiIpLnJlcGxhY2UocmUsIiIpLHBlLnRlc3QoZSkmJihlPSJcbiIrZSx0aGlzLmNodW5rTGluZS0tKSx0aGlzLmxpdGVyYXRlJiYoZT1nZShlKSksZX19LHtrZXk6ImlkZW50aWZpZXJUb2tlbiIsdmFsdWU6ZnVuY3Rpb24gaWRlbnRpZmllclRva2VuKCl7dmFyIGUsdCxvLG4scixzLHAsdSxtLGgsZix5LGssVCxOLHYsYiwkLF8sQyxFLHgsSSxTLEEsTyxGLHc7aWYocD10aGlzLmF0Q1NYVGFnKCksQT1wP2c6RCwhKG09QS5leGVjKHRoaXMuY2h1bmspKSlyZXR1cm4gMDt2YXIgUD1tLGo9X3NsaWNlZFRvQXJyYXkoUCwzKTtpZih1PWpbMF0scj1qWzFdLHQ9alsyXSxzPXIubGVuZ3RoLGg9dm9pZCAwLCJvd24iPT09ciYmIkZPUiI9PT10aGlzLnRhZygpKXJldHVybiB0aGlzLnRva2VuKCJPV04iLHIpLHIubGVuZ3RoO2lmKCJmcm9tIj09PXImJiJZSUVMRCI9PT10aGlzLnRhZygpKXJldHVybiB0aGlzLnRva2VuKCJGUk9NIixyKSxyLmxlbmd0aDtpZigiYXMiPT09ciYmdGhpcy5zZWVuSW1wb3J0KXtpZigiKiI9PT10aGlzLnZhbHVlKCkpdGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdWzBdPSJJTVBPUlRfQUxMIjtlbHNlIGlmKGs9dGhpcy52YWx1ZSghMCksMDw9YS5jYWxsKGMsaykpe2Y9dGhpcy5wcmV2KCk7dmFyIE09WyJJREVOVElGSUVSIix0aGlzLnZhbHVlKCEwKV07ZlswXT1NWzBdLGZbMV09TVsxXX1pZigiREVGQVVMVCI9PT0oVD10aGlzLnRhZygpKXx8IklNUE9SVF9BTEwiPT09VHx8IklERU5USUZJRVIiPT09VClyZXR1cm4gdGhpcy50b2tlbigiQVMiLHIpLHIubGVuZ3RofWlmKCJhcyI9PT1yJiZ0aGlzLnNlZW5FeHBvcnQpe2lmKCJJREVOVElGSUVSIj09PSh2PXRoaXMudGFnKCkpfHwiREVGQVVMVCI9PT12KXJldHVybiB0aGlzLnRva2VuKCJBUyIsciksci5sZW5ndGg7aWYoYj10aGlzLnZhbHVlKCEwKSwwPD1hLmNhbGwoYyxiKSl7Zj10aGlzLnByZXYoKTt2YXIgVT1bIklERU5USUZJRVIiLHRoaXMudmFsdWUoITApXTtyZXR1cm4gZlswXT1VWzBdLGZbMV09VVsxXSx0aGlzLnRva2VuKCJBUyIsciksci5sZW5ndGh9fWlmKCJkZWZhdWx0Ij09PXImJnRoaXMuc2VlbkV4cG9ydCYmKCJFWFBPUlQiPT09KCQ9dGhpcy50YWcoKSl8fCJBUyI9PT0kKSlyZXR1cm4gdGhpcy50b2tlbigiREVGQVVMVCIsciksci5sZW5ndGg7aWYoImRvIj09PXImJihTPS9eKFxzKnN1cGVyKSg/IVwoXCkpLy5leGVjKHRoaXMuY2h1bmsuc2xpY2UoMykpKSl7dGhpcy50b2tlbigiU1VQRVIiLCJzdXBlciIpLHRoaXMudG9rZW4oIkNBTExfU1RBUlQiLCIoIiksdGhpcy50b2tlbigiQ0FMTF9FTkQiLCIpIik7dmFyIFY9UyxCPV9zbGljZWRUb0FycmF5KFYsMik7cmV0dXJuIHU9QlswXSxPPUJbMV0sTy5sZW5ndGgrM31pZihmPXRoaXMucHJldigpLEY9dHx8bnVsbCE9ZiYmKCIuIj09PShfPWZbMF0pfHwiPy4iPT09X3x8Ijo6Ij09PV98fCI/OjoiPT09X3x8IWYuc3BhY2VkJiYiQCI9PT1mWzBdKT8iUFJPUEVSVFkiOiJJREVOVElGSUVSIiwiSURFTlRJRklFUiI9PT1GJiYoMDw9YS5jYWxsKFIscil8fDA8PWEuY2FsbChjLHIpKSYmISh0aGlzLmV4cG9ydFNwZWNpZmllckxpc3QmJjA8PWEuY2FsbChjLHIpKT8oRj1yLnRvVXBwZXJDYXNlKCksIldIRU4iPT09RiYmKEM9dGhpcy50YWcoKSwwPD1hLmNhbGwoTCxDKSk/Rj0iTEVBRElOR19XSEVOIjoiRk9SIj09PUY/dGhpcy5zZWVuRm9yPSEwOiJVTkxFU1MiPT09Rj9GPSJJRiI6IklNUE9SVCI9PT1GP3RoaXMuc2VlbkltcG9ydD0hMDoiRVhQT1JUIj09PUY/dGhpcy5zZWVuRXhwb3J0PSEwOjA8PWEuY2FsbChsZSxGKT9GPSJVTkFSWSI6MDw9YS5jYWxsKFksRikmJigiSU5TVEFOQ0VPRiIhPT1GJiZ0aGlzLnNlZW5Gb3I/KEY9IkZPUiIrRix0aGlzLnNlZW5Gb3I9ITEpOihGPSJSRUxBVElPTiIsIiEiPT09dGhpcy52YWx1ZSgpJiYoaD10aGlzLnRva2Vucy5wb3AoKSxyPSIhIityKSkpKToiSURFTlRJRklFUiI9PT1GJiZ0aGlzLnNlZW5Gb3ImJiJmcm9tIj09PXImJmZlKGYpPyhGPSJGT1JGUk9NIix0aGlzLnNlZW5Gb3I9ITEpOiJQUk9QRVJUWSI9PT1GJiZmJiYoZi5zcGFjZWQmJihFPWZbMF0sMDw9YS5jYWxsKGwsRSkpJiYvXltnc11ldCQvLnRlc3QoZlsxXSkmJjE8dGhpcy50b2tlbnMubGVuZ3RoJiYiLiIhPT0oeD10aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMl1bMF0pJiYiPy4iIT09eCYmIkAiIT09eD90aGlzLmVycm9yKCInIitmWzFdKyInIGNhbm5vdCBiZSB1c2VkIGFzIGEga2V5d29yZCwgb3IgYXMgYSBmdW5jdGlvbiBjYWxsIHdpdGhvdXQgcGFyZW50aGVzZXMiLGZbMl0pOjI8dGhpcy50b2tlbnMubGVuZ3RoJiYoeT10aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMl0sKCJAIj09PShJPWZbMF0pfHwiVEhJUyI9PT1JKSYmeSYmeS5zcGFjZWQmJi9eW2dzXWV0JC8udGVzdCh5WzFdKSYmIi4iIT09KE49dGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTNdWzBdKSYmIj8uIiE9PU4mJiJAIiE9PU4mJnRoaXMuZXJyb3IoIiciK3lbMV0rIicgY2Fubm90IGJlIHVzZWQgYXMgYSBrZXl3b3JkLCBvciBhcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aG91dCBwYXJlbnRoZXNlcyIseVsyXSkpKSwiSURFTlRJRklFUiI9PT1GJiYwPD1hLmNhbGwocSxyKSYmdGhpcy5lcnJvcigicmVzZXJ2ZWQgd29yZCAnIityKyInIix7bGVuZ3RoOnIubGVuZ3RofSksIlBST1BFUlRZIj09PUZ8fHRoaXMuZXhwb3J0U3BlY2lmaWVyTGlzdHx8KDA8PWEuY2FsbChpLHIpJiYoZT1yLHI9ZFtyXSksRj1mdW5jdGlvbigpe3JldHVybiIhIj09PXI/IlVOQVJZIjoiPT0iPT09cnx8IiE9Ij09PXI/IkNPTVBBUkUiOiJ0cnVlIj09PXJ8fCJmYWxzZSI9PT1yPyJCT09MIjoiYnJlYWsiPT09cnx8ImNvbnRpbnVlIj09PXJ8fCJkZWJ1Z2dlciI9PT1yPyJTVEFURU1FTlQiOiImJiI9PT1yfHwifHwiPT09cj9yOkZ9KCkpLHc9dGhpcy50b2tlbihGLHIsMCxzKSxlJiYody5vcmlnaW49W0YsZSx3WzJdXSksaCl7dmFyIEc9W2hbMl0uZmlyc3RfbGluZSxoWzJdLmZpcnN0X2NvbHVtbl07d1syXS5maXJzdF9saW5lPUdbMF0sd1syXS5maXJzdF9jb2x1bW49R1sxXX1yZXR1cm4gdCYmKG89dS5sYXN0SW5kZXhPZihwPyI9IjoiOiIpLG49dGhpcy50b2tlbigiOiIsIjoiLG8sdC5sZW5ndGgpLHAmJihuLmNzeENvbG9uPSEwKSkscCYmIklERU5USUZJRVIiPT09RiYmIjoiIT09ZlswXSYmdGhpcy50b2tlbigiLCIsIiwiLDAsMCx3KSx1Lmxlbmd0aH19LHtrZXk6Im51bWJlclRva2VuIix2YWx1ZTpmdW5jdGlvbiBudW1iZXJUb2tlbigpe3ZhciBlLGEsdCxvLG4scjtpZighKHQ9VS5leGVjKHRoaXMuY2h1bmspKSlyZXR1cm4gMDtzd2l0Y2gobz10WzBdLGE9by5sZW5ndGgsITEpe2Nhc2UhL14wW0JPWF0vLnRlc3Qobyk6dGhpcy5lcnJvcigicmFkaXggcHJlZml4IGluICciK28rIicgbXVzdCBiZSBsb3dlcmNhc2UiLHtvZmZzZXQ6MX0pO2JyZWFrO2Nhc2UhL14oPyEweCkuKkUvLnRlc3Qobyk6dGhpcy5lcnJvcigiZXhwb25lbnRpYWwgbm90YXRpb24gaW4gJyIrbysiJyBtdXN0IGJlIGluZGljYXRlZCB3aXRoIGEgbG93ZXJjYXNlICdlJyIse29mZnNldDpvLmluZGV4T2YoIkUiKX0pO2JyZWFrO2Nhc2UhL14wXGQqWzg5XS8udGVzdChvKTp0aGlzLmVycm9yKCJkZWNpbWFsIGxpdGVyYWwgJyIrbysiJyBtdXN0IG5vdCBiZSBwcmVmaXhlZCB3aXRoICcwJyIse2xlbmd0aDphfSk7YnJlYWs7Y2FzZSEvXjBcZCsvLnRlc3Qobyk6dGhpcy5lcnJvcigib2N0YWwgbGl0ZXJhbCAnIitvKyInIG11c3QgYmUgcHJlZml4ZWQgd2l0aCAnMG8nIix7bGVuZ3RoOmF9KX1yZXR1cm4gZT1mdW5jdGlvbigpe3N3aXRjaChvLmNoYXJBdCgxKSl7Y2FzZSJiIjpyZXR1cm4gMjtjYXNlIm8iOnJldHVybiA4O2Nhc2UieCI6cmV0dXJuIDE2O2RlZmF1bHQ6cmV0dXJuIG51bGx9fSgpLG49bnVsbD09ZT9wYXJzZUZsb2F0KG8pOnBhcnNlSW50KG8uc2xpY2UoMiksZSkscj1JbmZpbml0eT09PW4/IklORklOSVRZIjoiTlVNQkVSIix0aGlzLnRva2VuKHIsbywwLGEpLGF9fSx7a2V5OiJzdHJpbmdUb2tlbiIsdmFsdWU6ZnVuY3Rpb24gc3RyaW5nVG9rZW4oKXt2YXIgZT10aGlzLGE9b2UuZXhlYyh0aGlzLmNodW5rKXx8W10sdD1fc2xpY2VkVG9BcnJheShhLDEpLG8sbixyLGwscyxkLGMsaSxwLHUsbSxoLGcsZix5LGs7aWYoaD10WzBdLCFoKXJldHVybiAwO209dGhpcy5wcmV2KCksbSYmImZyb20iPT09dGhpcy52YWx1ZSgpJiYodGhpcy5zZWVuSW1wb3J0fHx0aGlzLnNlZW5FeHBvcnQpJiYobVswXT0iRlJPTSIpLGY9ZnVuY3Rpb24oKXtyZXR1cm4iJyI9PT1oP3RlOiciJz09PWg/UToiJycnIj09PWg/YjonIiIiJz09PWg/Tjp2b2lkIDB9KCksZD0zPT09aC5sZW5ndGg7dmFyIFQ9dGhpcy5tYXRjaFdpdGhJbnRlcnBvbGF0aW9ucyhmLGgpO2lmKGs9VC50b2tlbnMscz1ULmluZGV4LG89ay5sZW5ndGgtMSxyPWguY2hhckF0KDApLGQpe2ZvcihpPW51bGwsbD1mdW5jdGlvbigpe3ZhciBlLGEsdDtmb3IodD1bXSxjPWU9MCxhPWsubGVuZ3RoO2U8YTtjPSsrZSl5PWtbY10sIk5FT1NUUklORyI9PT15WzBdJiZ0LnB1c2goeVsxXSk7cmV0dXJuIHR9KCkuam9pbigiI3t9Iik7dT12LmV4ZWMobCk7KW49dVsxXSwobnVsbD09PWl8fDA8KGc9bi5sZW5ndGgpJiZnPGkubGVuZ3RoKSYmKGk9bik7aSYmKHA9UmVnRXhwKCJcXG4iK2ksImciKSksdGhpcy5tZXJnZUludGVycG9sYXRpb25Ub2tlbnMoayx7ZGVsaW1pdGVyOnJ9LGZ1bmN0aW9uKGEsdCl7cmV0dXJuIGE9ZS5mb3JtYXRTdHJpbmcoYSx7ZGVsaW1pdGVyOmh9KSxwJiYoYT1hLnJlcGxhY2UocCwiXG4iKSksMD09PXQmJihhPWEucmVwbGFjZShPLCIiKSksdD09PW8mJihhPWEucmVwbGFjZShuZSwiIikpLGF9KX1lbHNlIHRoaXMubWVyZ2VJbnRlcnBvbGF0aW9uVG9rZW5zKGsse2RlbGltaXRlcjpyfSxmdW5jdGlvbihhLHQpe3JldHVybiBhPWUuZm9ybWF0U3RyaW5nKGEse2RlbGltaXRlcjpofSksYT1hLnJlcGxhY2UoSyxmdW5jdGlvbihlLG4pe3JldHVybiAwPT09dCYmMD09PW58fHQ9PT1vJiZuK2UubGVuZ3RoPT09YS5sZW5ndGg/IiI6IiAifSksYX0pO3JldHVybiB0aGlzLmF0Q1NYVGFnKCkmJnRoaXMudG9rZW4oIiwiLCIsIiwwLDAsdGhpcy5wcmV2KSxzfX0se2tleToiY29tbWVudFRva2VuIix2YWx1ZTpmdW5jdGlvbiBjb21tZW50VG9rZW4oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5jaHVuayx0LG8sbixyLGwscyxpLGQsYyx1LG07aWYoIShpPWUubWF0Y2gocCkpKXJldHVybiAwO3ZhciBoPWksZz1fc2xpY2VkVG9BcnJheShoLDIpO3JldHVybiB0PWdbMF0sbD1nWzFdLHI9bnVsbCxjPS9eXHMqXG4rXHMqIy8udGVzdCh0KSxsPyhkPVQuZXhlYyh0KSxkJiZ0aGlzLmVycm9yKCJibG9jayBjb21tZW50cyBjYW5ub3QgY29udGFpbiAiK2RbMF0se29mZnNldDpkLmluZGV4LGxlbmd0aDpkWzBdLmxlbmd0aH0pLGU9ZS5yZXBsYWNlKCIjIyMiK2wrIiMjIyIsIiIpLGU9ZS5yZXBsYWNlKC9eXG4rLywiIiksdGhpcy5saW5lVG9rZW4oZSksbj1sLDA8PWEuY2FsbChuLCJcbiIpJiYobj1uLnJlcGxhY2UoUmVnRXhwKCJcXG4iK3ZlKCIgIix0aGlzLmluZGVudCksImciKSwiXG4iKSkscj1bbl0pOihuPXQucmVwbGFjZSgvXihcbiopLywiIiksbj1uLnJlcGxhY2UoL14oWyB8XHRdKikjL2dtLCIiKSxyPW4uc3BsaXQoIlxuIikpLG89ZnVuY3Rpb24oKXt2YXIgZSxhLHQ7Zm9yKHQ9W10scz1lPTAsYT1yLmxlbmd0aDtlPGE7cz0rK2Upbj1yW3NdLHQucHVzaCh7Y29udGVudDpuLGhlcmU6bnVsbCE9bCxuZXdMaW5lOmN8fDAhPT1zfSk7cmV0dXJuIHR9KCksbT10aGlzLnByZXYoKSxtP3VlKG8sbSk6KG9bMF0ubmV3TGluZT0hMCx0aGlzLmxpbmVUb2tlbih0aGlzLmNodW5rLnNsaWNlKHQubGVuZ3RoKSksdT10aGlzLm1ha2VUb2tlbigiSlMiLCIiKSx1LmdlbmVyYXRlZD0hMCx1LmNvbW1lbnRzPW8sdGhpcy50b2tlbnMucHVzaCh1KSx0aGlzLm5ld2xpbmVUb2tlbigwKSksdC5sZW5ndGh9fSx7a2V5OiJqc1Rva2VuIix2YWx1ZTpmdW5jdGlvbiBqc1Rva2VuKCl7dmFyIGUsYTtyZXR1cm4iYCI9PT10aGlzLmNodW5rLmNoYXJBdCgwKSYmKGU9Qy5leGVjKHRoaXMuY2h1bmspfHxBLmV4ZWModGhpcy5jaHVuaykpPyhhPWVbMV0ucmVwbGFjZSgvXFwrKGB8JCkvZyxmdW5jdGlvbihlKXtyZXR1cm4gZS5zbGljZSgtTWF0aC5jZWlsKGUubGVuZ3RoLzIpKX0pLHRoaXMudG9rZW4oIkpTIixhLDAsZVswXS5sZW5ndGgpLGVbMF0ubGVuZ3RoKTowfX0se2tleToicmVnZXhUb2tlbiIsdmFsdWU6ZnVuY3Rpb24gcmVnZXhUb2tlbigpe3ZhciBlPXRoaXMsdCxvLG4scixzLGksZCxjLHAsdSxtLGgsZyxmLHksaztzd2l0Y2goITEpe2Nhc2UhKHU9Vy5leGVjKHRoaXMuY2h1bmspKTp0aGlzLmVycm9yKCJyZWd1bGFyIGV4cHJlc3Npb25zIGNhbm5vdCBiZWdpbiB3aXRoICIrdVsyXSx7b2Zmc2V0OnUuaW5kZXgrdVsxXS5sZW5ndGh9KTticmVhaztjYXNlISh1PXRoaXMubWF0Y2hXaXRoSW50ZXJwb2xhdGlvbnMoJCwiLy8vIikpOnZhciBUPXU7aWYoaz1ULnRva2VucyxkPVQuaW5kZXgscj10aGlzLmNodW5rLnNsaWNlKDAsZCkubWF0Y2goL1xzKygjKD8heykuKikvZykscilmb3IoYz0wLHA9ci5sZW5ndGg7YzxwO2MrKyluPXJbY10sdGhpcy5jb21tZW50VG9rZW4obik7YnJlYWs7Y2FzZSEodT1HLmV4ZWModGhpcy5jaHVuaykpOnZhciBOPXUsdj1fc2xpY2VkVG9BcnJheShOLDMpO2lmKHk9dlswXSx0PXZbMV0sbz12WzJdLHRoaXMudmFsaWRhdGVFc2NhcGVzKHQse2lzUmVnZXg6ITAsb2Zmc2V0SW5DaHVuazoxfSksZD15Lmxlbmd0aCxoPXRoaXMucHJldigpLGgpaWYoaC5zcGFjZWQmJihnPWhbMF0sMDw9YS5jYWxsKGwsZykpKXtpZighb3x8Qi50ZXN0KHkpKXJldHVybiAwfWVsc2UgaWYoZj1oWzBdLDA8PWEuY2FsbChNLGYpKXJldHVybiAwO298fHRoaXMuZXJyb3IoIm1pc3NpbmcgLyAodW5jbG9zZWQgcmVnZXgpIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gMH12YXIgYj1ILmV4ZWModGhpcy5jaHVuay5zbGljZShkKSksXz1fc2xpY2VkVG9BcnJheShiLDEpO3N3aXRjaChpPV9bMF0scz1kK2kubGVuZ3RoLG09dGhpcy5tYWtlVG9rZW4oIlJFR0VYIixudWxsLDAscyksITEpe2Nhc2UhIWNlLnRlc3QoaSk6dGhpcy5lcnJvcigiaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgIitpLHtvZmZzZXQ6ZCxsZW5ndGg6aS5sZW5ndGh9KTticmVhaztjYXNlISh5fHwxPT09ay5sZW5ndGgpOnQ9dD90aGlzLmZvcm1hdFJlZ2V4KHQse2ZsYWdzOmksZGVsaW1pdGVyOiIvIn0pOnRoaXMuZm9ybWF0SGVyZWdleChrWzBdWzFdLHtmbGFnczppfSksdGhpcy50b2tlbigiUkVHRVgiLCIiK3RoaXMubWFrZURlbGltaXRlZExpdGVyYWwodCx7ZGVsaW1pdGVyOiIvIn0pK2ksMCxzLG0pO2JyZWFrO2RlZmF1bHQ6dGhpcy50b2tlbigiUkVHRVhfU1RBUlQiLCIoIiwwLDAsbSksdGhpcy50b2tlbigiSURFTlRJRklFUiIsIlJlZ0V4cCIsMCwwKSx0aGlzLnRva2VuKCJDQUxMX1NUQVJUIiwiKCIsMCwwKSx0aGlzLm1lcmdlSW50ZXJwb2xhdGlvblRva2VucyhrLHtkZWxpbWl0ZXI6JyInLGRvdWJsZTohMH0sZnVuY3Rpb24oYSl7cmV0dXJuIGUuZm9ybWF0SGVyZWdleChhLHtmbGFnczppfSl9KSxpJiYodGhpcy50b2tlbigiLCIsIiwiLGQtMSwwKSx0aGlzLnRva2VuKCJTVFJJTkciLCciJytpKyciJyxkLTEsaS5sZW5ndGgpKSx0aGlzLnRva2VuKCIpIiwiKSIscy0xLDApLHRoaXMudG9rZW4oIlJFR0VYX0VORCIsIikiLHMtMSwwKX1yZXR1cm4gc319LHtrZXk6ImxpbmVUb2tlbiIsdmFsdWU6ZnVuY3Rpb24gbGluZVRva2VuKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY2h1bmssYSx0LG8sbixyLGwscyxpLGQ7aWYoIShuPWouZXhlYyhlKSkpcmV0dXJuIDA7aWYobz1uWzBdLGk9dGhpcy5wcmV2KCksYT1udWxsIT1pJiYiXFwiPT09aVswXSxhJiZ0aGlzLnNlZW5Gb3J8fCh0aGlzLnNlZW5Gb3I9ITEpLHRoaXMuaW1wb3J0U3BlY2lmaWVyTGlzdHx8KHRoaXMuc2VlbkltcG9ydD0hMSksdGhpcy5leHBvcnRTcGVjaWZpZXJMaXN0fHwodGhpcy5zZWVuRXhwb3J0PSExKSxkPW8ubGVuZ3RoLTEtby5sYXN0SW5kZXhPZigiXG4iKSxzPXRoaXMudW5maW5pc2hlZCgpLGw9MDxkP28uc2xpY2UoLWQpOiIiLCEvXiguPylcMSokLy5leGVjKGwpKXJldHVybiB0aGlzLmVycm9yKCJtaXhlZCBpbmRlbnRhdGlvbiIse29mZnNldDpvLmxlbmd0aH0pLG8ubGVuZ3RoO2lmKHI9TWF0aC5taW4obC5sZW5ndGgsdGhpcy5pbmRlbnRMaXRlcmFsLmxlbmd0aCksbC5zbGljZSgwLHIpIT09dGhpcy5pbmRlbnRMaXRlcmFsLnNsaWNlKDAscikpcmV0dXJuIHRoaXMuZXJyb3IoImluZGVudGF0aW9uIG1pc21hdGNoIix7b2Zmc2V0Om8ubGVuZ3RofSksby5sZW5ndGg7aWYoZC10aGlzLmluZGVidD09PXRoaXMuaW5kZW50KXJldHVybiBzP3RoaXMuc3VwcHJlc3NOZXdsaW5lcygpOnRoaXMubmV3bGluZVRva2VuKDApLG8ubGVuZ3RoO2lmKGQ+dGhpcy5pbmRlbnQpe2lmKHMpcmV0dXJuIHRoaXMuaW5kZWJ0PWQtdGhpcy5pbmRlbnQsdGhpcy5zdXBwcmVzc05ld2xpbmVzKCksby5sZW5ndGg7aWYoIXRoaXMudG9rZW5zLmxlbmd0aClyZXR1cm4gdGhpcy5iYXNlSW5kZW50PXRoaXMuaW5kZW50PWQsdGhpcy5pbmRlbnRMaXRlcmFsPWwsby5sZW5ndGg7dD1kLXRoaXMuaW5kZW50K3RoaXMub3V0ZGVidCx0aGlzLnRva2VuKCJJTkRFTlQiLHQsby5sZW5ndGgtZCxkKSx0aGlzLmluZGVudHMucHVzaCh0KSx0aGlzLmVuZHMucHVzaCh7dGFnOiJPVVRERU5UIn0pLHRoaXMub3V0ZGVidD10aGlzLmluZGVidD0wLHRoaXMuaW5kZW50PWQsdGhpcy5pbmRlbnRMaXRlcmFsPWx9ZWxzZSBkPHRoaXMuYmFzZUluZGVudD90aGlzLmVycm9yKCJtaXNzaW5nIGluZGVudGF0aW9uIix7b2Zmc2V0Om8ubGVuZ3RofSk6KHRoaXMuaW5kZWJ0PTAsdGhpcy5vdXRkZW50VG9rZW4odGhpcy5pbmRlbnQtZCxzLG8ubGVuZ3RoKSk7cmV0dXJuIG8ubGVuZ3RofX0se2tleToib3V0ZGVudFRva2VuIix2YWx1ZTpmdW5jdGlvbiBvdXRkZW50VG9rZW4oZSx0LG8pe3ZhciBuLHIsbCxzO2ZvcihuPXRoaXMuaW5kZW50LWU7MDxlOylsPXRoaXMuaW5kZW50c1t0aGlzLmluZGVudHMubGVuZ3RoLTFdLGw/dGhpcy5vdXRkZWJ0JiZlPD10aGlzLm91dGRlYnQ/KHRoaXMub3V0ZGVidC09ZSxlPTApOihyPXRoaXMuaW5kZW50cy5wb3AoKSt0aGlzLm91dGRlYnQsbyYmKHM9dGhpcy5jaHVua1tvXSwwPD1hLmNhbGwoRSxzKSkmJihuLT1yLWUsZT1yKSx0aGlzLm91dGRlYnQ9MCx0aGlzLnBhaXIoIk9VVERFTlQiKSx0aGlzLnRva2VuKCJPVVRERU5UIixlLDAsbyksZS09cik6dGhpcy5vdXRkZWJ0PWU9MDtyZXR1cm4gciYmKHRoaXMub3V0ZGVidC09ZSksdGhpcy5zdXBwcmVzc1NlbWljb2xvbnMoKSwiVEVSTUlOQVRPUiI9PT10aGlzLnRhZygpfHx0fHx0aGlzLnRva2VuKCJURVJNSU5BVE9SIiwiXG4iLG8sMCksdGhpcy5pbmRlbnQ9bix0aGlzLmluZGVudExpdGVyYWw9dGhpcy5pbmRlbnRMaXRlcmFsLnNsaWNlKDAsbiksdGhpc319LHtrZXk6IndoaXRlc3BhY2VUb2tlbiIsdmFsdWU6ZnVuY3Rpb24gd2hpdGVzcGFjZVRva2VuKCl7dmFyIGUsYSx0O3JldHVybihlPXBlLmV4ZWModGhpcy5jaHVuaykpfHwoYT0iXG4iPT09dGhpcy5jaHVuay5jaGFyQXQoMCkpPyh0PXRoaXMucHJldigpLHQmJih0W2U/InNwYWNlZCI6Im5ld0xpbmUiXT0hMCksZT9lWzBdLmxlbmd0aDowKTowfX0se2tleToibmV3bGluZVRva2VuIix2YWx1ZTpmdW5jdGlvbiBuZXdsaW5lVG9rZW4oZSl7cmV0dXJuIHRoaXMuc3VwcHJlc3NTZW1pY29sb25zKCksIlRFUk1JTkFUT1IiIT09dGhpcy50YWcoKSYmdGhpcy50b2tlbigiVEVSTUlOQVRPUiIsIlxuIixlLDApLHRoaXN9fSx7a2V5OiJzdXBwcmVzc05ld2xpbmVzIix2YWx1ZTpmdW5jdGlvbiBzdXBwcmVzc05ld2xpbmVzKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5wcmV2KCksIlxcIj09PWVbMV0mJihlLmNvbW1lbnRzJiYxPHRoaXMudG9rZW5zLmxlbmd0aCYmdWUoZS5jb21tZW50cyx0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGgtMl0pLHRoaXMudG9rZW5zLnBvcCgpKSx0aGlzfX0se2tleToiY3N4VG9rZW4iLHZhbHVlOmZ1bmN0aW9uIGNzeFRva2VuKCl7dmFyIGU9dGhpcyx0LG8sbixyLGwscyxpLGQsYyxwLG0saCxnLFQ7aWYobD10aGlzLmNodW5rWzBdLG09MDx0aGlzLnRva2Vucy5sZW5ndGg/dGhpcy50b2tlbnNbdGhpcy50b2tlbnMubGVuZ3RoLTFdWzBdOiIiLCI8Ij09PWwpe2lmKGQ9eS5leGVjKHRoaXMuY2h1bmsuc2xpY2UoMSkpfHxmLmV4ZWModGhpcy5jaHVuay5zbGljZSgxKSksIShkJiYoMDx0aGlzLmNzeERlcHRofHwhKHA9dGhpcy5wcmV2KCkpfHxwLnNwYWNlZHx8KGg9cFswXSwwPmEuY2FsbCh1LGgpKSkpKXJldHVybiAwO3ZhciBOPWQsdj1fc2xpY2VkVG9BcnJheShOLDMpO3JldHVybiBpPXZbMF0scz12WzFdLG89dlsyXSxjPXRoaXMudG9rZW4oIkNTWF9UQUciLHMsMSxzLmxlbmd0aCksdGhpcy50b2tlbigiQ0FMTF9TVEFSVCIsIigiKSx0aGlzLnRva2VuKCJbIiwiWyIpLHRoaXMuZW5kcy5wdXNoKHt0YWc6Ii8+IixvcmlnaW46YyxuYW1lOnN9KSx0aGlzLmNzeERlcHRoKysscy5sZW5ndGgrMX1pZihuPXRoaXMuYXRDU1hUYWcoKSl7aWYoIi8+Ij09PXRoaXMuY2h1bmsuc2xpY2UoMCwyKSlyZXR1cm4gdGhpcy5wYWlyKCIvPiIpLHRoaXMudG9rZW4oIl0iLCJdIiwwLDIpLHRoaXMudG9rZW4oIkNBTExfRU5EIiwiKSIsMCwyKSx0aGlzLmNzeERlcHRoLS0sMjtpZigieyI9PT1sKXJldHVybiI6Ij09PW0/KGc9dGhpcy50b2tlbigiKCIsIigiKSx0aGlzLmNzeE9iakF0dHJpYnV0ZVt0aGlzLmNzeERlcHRoXT0hMSk6KGc9dGhpcy50b2tlbigieyIsInsiKSx0aGlzLmNzeE9iakF0dHJpYnV0ZVt0aGlzLmNzeERlcHRoXT0hMCksdGhpcy5lbmRzLnB1c2goe3RhZzoifSIsb3JpZ2luOmd9KSwxO2lmKCI+Ij09PWwpe3RoaXMucGFpcigiLz4iKSxjPXRoaXMudG9rZW4oIl0iLCJdIiksdGhpcy50b2tlbigiLCIsIiwiKTt2YXIgYj10aGlzLm1hdGNoV2l0aEludGVycG9sYXRpb25zKEksIj4iLCI8LyIsayk7cmV0dXJuIFQ9Yi50b2tlbnMscj1iLmluZGV4LHRoaXMubWVyZ2VJbnRlcnBvbGF0aW9uVG9rZW5zKFQse2RlbGltaXRlcjonIid9LGZ1bmN0aW9uKGEpe3JldHVybiBlLmZvcm1hdFN0cmluZyhhLHtkZWxpbWl0ZXI6Ij4ifSl9KSxkPXkuZXhlYyh0aGlzLmNodW5rLnNsaWNlKHIpKXx8Zi5leGVjKHRoaXMuY2h1bmsuc2xpY2UocikpLGQmJmRbMV09PT1uLm5hbWV8fHRoaXMuZXJyb3IoImV4cGVjdGVkIGNvcnJlc3BvbmRpbmcgQ1NYIGNsb3NpbmcgdGFnIGZvciAiK24ubmFtZSxuLm9yaWdpblsyXSksdD1yK24ubmFtZS5sZW5ndGgsIj4iIT09dGhpcy5jaHVua1t0XSYmdGhpcy5lcnJvcigibWlzc2luZyBjbG9zaW5nID4gYWZ0ZXIgdGFnIG5hbWUiLHtvZmZzZXQ6dCxsZW5ndGg6MX0pLHRoaXMudG9rZW4oIkNBTExfRU5EIiwiKSIscixuLm5hbWUubGVuZ3RoKzEpLHRoaXMuY3N4RGVwdGgtLSx0KzF9cmV0dXJuIDB9cmV0dXJuIHRoaXMuYXRDU1hUYWcoMSk/In0iPT09bD8odGhpcy5wYWlyKGwpLHRoaXMuY3N4T2JqQXR0cmlidXRlW3RoaXMuY3N4RGVwdGhdPyh0aGlzLnRva2VuKCJ9IiwifSIpLHRoaXMuY3N4T2JqQXR0cmlidXRlW3RoaXMuY3N4RGVwdGhdPSExKTp0aGlzLnRva2VuKCIpIiwiKSIpLHRoaXMudG9rZW4oIiwiLCIsIiksMSk6MDowfX0se2tleToiYXRDU1hUYWciLHZhbHVlOmZ1bmN0aW9uIGF0Q1NYVGFnKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsYSx0LG87aWYoMD09PXRoaXMuY3N4RGVwdGgpcmV0dXJuITE7Zm9yKGE9dGhpcy5lbmRzLmxlbmd0aC0xOyJPVVRERU5UIj09PShudWxsPT0obz10aGlzLmVuZHNbYV0pP3ZvaWQgMDpvLnRhZyl8fDA8ZS0tOylhLS07cmV0dXJuIHQ9dGhpcy5lbmRzW2FdLCIvPiI9PT0obnVsbD09dD92b2lkIDA6dC50YWcpJiZ0fX0se2tleToibGl0ZXJhbFRva2VuIix2YWx1ZTpmdW5jdGlvbiBsaXRlcmFsVG9rZW4oKXt2YXIgZSx0LG8sbixyLGksZCxjLHAsdSxnLGYseTtpZihlPVYuZXhlYyh0aGlzLmNodW5rKSl7dmFyIGs9ZSxUPV9zbGljZWRUb0FycmF5KGssMSk7eT1UWzBdLHMudGVzdCh5KSYmdGhpcy50YWdQYXJhbWV0ZXJzKCl9ZWxzZSB5PXRoaXMuY2h1bmsuY2hhckF0KDApO2lmKGc9eSxuPXRoaXMucHJldigpLG4mJjA8PWEuY2FsbChbIj0iXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGgpKSx5KSYmKHU9ITEsIj0iIT09eXx8Inx8IiE9PShyPW5bMV0pJiYiJiYiIT09cnx8bi5zcGFjZWR8fChuWzBdPSJDT01QT1VORF9BU1NJR04iLG5bMV0rPSI9IixuPXRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aC0yXSx1PSEwKSxuJiYiUFJPUEVSVFkiIT09blswXSYmKG89bnVsbD09KGk9bi5vcmlnaW4pP246aSx0PXllKG5bMV0sb1sxXSksdCYmdGhpcy5lcnJvcih0LG9bMl0pKSx1KSlyZXR1cm4geS5sZW5ndGg7aWYoInsiPT09eSYmdGhpcy5zZWVuSW1wb3J0P3RoaXMuaW1wb3J0U3BlY2lmaWVyTGlzdD0hMDp0aGlzLmltcG9ydFNwZWNpZmllckxpc3QmJiJ9Ij09PXk/dGhpcy5pbXBvcnRTcGVjaWZpZXJMaXN0PSExOiJ7Ij09PXkmJiJFWFBPUlQiPT09KG51bGw9PW4/dm9pZCAwOm5bMF0pP3RoaXMuZXhwb3J0U3BlY2lmaWVyTGlzdD0hMDp0aGlzLmV4cG9ydFNwZWNpZmllckxpc3QmJiJ9Ij09PXkmJih0aGlzLmV4cG9ydFNwZWNpZmllckxpc3Q9ITEpLCI7Ij09PXkpKGQ9bnVsbD09bj92b2lkIDA6blswXSwwPD1hLmNhbGwoWyI9Il0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpZSkpLGQpKSYmdGhpcy5lcnJvcigidW5leHBlY3RlZCA7IiksdGhpcy5zZWVuRm9yPXRoaXMuc2VlbkltcG9ydD10aGlzLnNlZW5FeHBvcnQ9ITEsZz0iVEVSTUlOQVRPUiI7ZWxzZSBpZigiKiI9PT15JiYiRVhQT1JUIj09PShudWxsPT1uP3ZvaWQgMDpuWzBdKSlnPSJFWFBPUlRfQUxMIjtlbHNlIGlmKDA8PWEuY2FsbChQLHkpKWc9Ik1BVEgiO2Vsc2UgaWYoMDw9YS5jYWxsKG0seSkpZz0iQ09NUEFSRSI7ZWxzZSBpZigwPD1hLmNhbGwoaCx5KSlnPSJDT01QT1VORF9BU1NJR04iO2Vsc2UgaWYoMDw9YS5jYWxsKGxlLHkpKWc9IlVOQVJZIjtlbHNlIGlmKDA8PWEuY2FsbChzZSx5KSlnPSJVTkFSWV9NQVRIIjtlbHNlIGlmKDA8PWEuY2FsbChKLHkpKWc9IlNISUZUIjtlbHNlIGlmKCI/Ij09PXkmJihudWxsPT1uP3ZvaWQgMDpuLnNwYWNlZCkpZz0iQklOPyI7ZWxzZSBpZihuKWlmKCIoIj09PXkmJiFuLnNwYWNlZCYmKGM9blswXSwwPD1hLmNhbGwobCxjKSkpIj8iPT09blswXSYmKG5bMF09IkZVTkNfRVhJU1QiKSxnPSJDQUxMX1NUQVJUIjtlbHNlIGlmKCJbIj09PXkmJigocD1uWzBdLDA8PWEuY2FsbCh4LHApKSYmIW4uc3BhY2VkfHwiOjoiPT09blswXSkpc3dpdGNoKGc9IklOREVYX1NUQVJUIixuWzBdKXtjYXNlIj8iOm5bMF09IklOREVYX1NPQUsifXJldHVybiBmPXRoaXMubWFrZVRva2VuKGcseSksIigiPT09eXx8InsiPT09eXx8IlsiPT09eT90aGlzLmVuZHMucHVzaCh7dGFnOlNbeV0sb3JpZ2luOmZ9KToiKSI9PT15fHwifSI9PT15fHwiXSI9PT15P3RoaXMucGFpcih5KTp2b2lkIDAsdGhpcy50b2tlbnMucHVzaCh0aGlzLm1ha2VUb2tlbihnLHkpKSx5Lmxlbmd0aH19LHtrZXk6InRhZ1BhcmFtZXRlcnMiLHZhbHVlOmZ1bmN0aW9uIHRhZ1BhcmFtZXRlcnMoKXt2YXIgZSxhLHQsbyxuO2lmKCIpIiE9PXRoaXMudGFnKCkpcmV0dXJuIHRoaXM7Zm9yKHQ9W10sbj10aGlzLnRva2VucyxlPW4ubGVuZ3RoLGE9blstLWVdLGFbMF09IlBBUkFNX0VORCI7bz1uWy0tZV07KXN3aXRjaChvWzBdKXtjYXNlIikiOnQucHVzaChvKTticmVhaztjYXNlIigiOmNhc2UiQ0FMTF9TVEFSVCI6aWYodC5sZW5ndGgpdC5wb3AoKTtlbHNlIHJldHVybiIoIj09PW9bMF0/KG9bMF09IlBBUkFNX1NUQVJUIix0aGlzKTooYVswXT0iQ0FMTF9FTkQiLHRoaXMpfXJldHVybiB0aGlzfX0se2tleToiY2xvc2VJbmRlbnRhdGlvbiIsdmFsdWU6ZnVuY3Rpb24gY2xvc2VJbmRlbnRhdGlvbigpe3JldHVybiB0aGlzLm91dGRlbnRUb2tlbih0aGlzLmluZGVudCl9fSx7a2V5OiJtYXRjaFdpdGhJbnRlcnBvbGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24gbWF0Y2hXaXRoSW50ZXJwb2xhdGlvbnMoYSxvLG4scil7dmFyIGwscyxpLGQsYyxwLHUsbSxoLGcsZix5LGssVCxOLHYsYiwkLF8sQyxELEU7aWYobnVsbD09biYmKG49byksbnVsbD09ciYmKHI9L14jXHsvKSxFPVtdLHY9by5sZW5ndGgsdGhpcy5jaHVuay5zbGljZSgwLHYpIT09bylyZXR1cm4gbnVsbDtmb3IoQz10aGlzLmNodW5rLnNsaWNlKHYpOzspe3ZhciB4PWEuZXhlYyhDKSxJPV9zbGljZWRUb0FycmF5KHgsMSk7aWYoRD1JWzBdLHRoaXMudmFsaWRhdGVFc2NhcGVzKEQse2lzUmVnZXg6Ii8iPT09by5jaGFyQXQoMCksb2Zmc2V0SW5DaHVuazp2fSksRS5wdXNoKHRoaXMubWFrZVRva2VuKCJORU9TVFJJTkciLEQsdikpLEM9Qy5zbGljZShELmxlbmd0aCksdis9RC5sZW5ndGgsIShUPXIuZXhlYyhDKSkpYnJlYWs7dmFyIFM9VCxBPV9zbGljZWRUb0FycmF5KFMsMSk7Zj1BWzBdLGc9Zi5sZW5ndGgtMTt2YXIgUj10aGlzLmdldExpbmVBbmRDb2x1bW5Gcm9tQ2h1bmsoditnKSxPPV9zbGljZWRUb0FycmF5KFIsMik7az1PWzBdLHU9T1sxXSxfPUMuc2xpY2UoZyk7dmFyIEw9KG5ldyBlKS50b2tlbml6ZShfLHtsaW5lOmssY29sdW1uOnUsdW50aWxCYWxhbmNlZDohMH0pO2lmKE49TC50b2tlbnMsaD1MLmluZGV4LGgrPWcsYz0ifSI9PT1DW2gtMV0sYyl7dmFyIEYsdyxQLGo7Rj1OLHc9X3NsaWNlZFRvQXJyYXkoRiwxKSxiPXdbMF0sRixQPXQuY2FsbChOLC0xKSxqPV9zbGljZWRUb0FycmF5KFAsMSkscD1qWzBdLFAsYlswXT1iWzFdPSIoIixwWzBdPXBbMV09IikiLHAub3JpZ2luPVsiIiwiZW5kIG9mIGludGVycG9sYXRpb24iLHBbMl1dfSJURVJNSU5BVE9SIj09PShudWxsPT0oJD1OWzFdKT92b2lkIDA6JFswXSkmJk4uc3BsaWNlKDEsMSksY3x8KGI9dGhpcy5tYWtlVG9rZW4oIigiLCIoIix2LDApLHA9dGhpcy5tYWtlVG9rZW4oIikiLCIpIix2K2gsMCksTj1bYl0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShOKSxbcF0pKSxFLnB1c2goWyJUT0tFTlMiLE5dKSxDPUMuc2xpY2UoaCksdis9aH1yZXR1cm4gQy5zbGljZSgwLG4ubGVuZ3RoKSE9PW4mJnRoaXMuZXJyb3IoIm1pc3NpbmcgIituLHtsZW5ndGg6by5sZW5ndGh9KSxsPUUscz1fc2xpY2VkVG9BcnJheShsLDEpLG09c1swXSxsLGk9dC5jYWxsKEUsLTEpLGQ9X3NsaWNlZFRvQXJyYXkoaSwxKSx5PWRbMF0saSxtWzJdLmZpcnN0X2NvbHVtbi09by5sZW5ndGgsIlxuIj09PXlbMV0uc3Vic3RyKC0xKT8oeVsyXS5sYXN0X2xpbmUrPTEseVsyXS5sYXN0X2NvbHVtbj1uLmxlbmd0aC0xKTp5WzJdLmxhc3RfY29sdW1uKz1uLmxlbmd0aCwwPT09eVsxXS5sZW5ndGgmJih5WzJdLmxhc3RfY29sdW1uLT0xKSx7dG9rZW5zOkUsaW5kZXg6dituLmxlbmd0aH19fSx7a2V5OiJtZXJnZUludGVycG9sYXRpb25Ub2tlbnMiLHZhbHVlOmZ1bmN0aW9uIG1lcmdlSW50ZXJwb2xhdGlvblRva2VucyhlLGEsbyl7dmFyIG4scixsLHMsaSxkLGMscCx1LG0saCxnLGYseSxrLFQsTix2LGI7Zm9yKDE8ZS5sZW5ndGgmJihoPXRoaXMudG9rZW4oIlNUUklOR19TVEFSVCIsIigiLDAsMCkpLGw9dGhpcy50b2tlbnMubGVuZ3RoLHM9aT0wLHA9ZS5sZW5ndGg7aTxwO3M9KytpKXt2YXIgJDtUPWVbc107dmFyIF89VCxDPV9zbGljZWRUb0FycmF5KF8sMik7c3dpdGNoKGs9Q1swXSxiPUNbMV0sayl7Y2FzZSJUT0tFTlMiOmlmKDI9PT1iLmxlbmd0aCl7aWYoIShiWzBdLmNvbW1lbnRzfHxiWzFdLmNvbW1lbnRzKSljb250aW51ZTtmb3IoZz0wPT09dGhpcy5jc3hEZXB0aD90aGlzLm1ha2VUb2tlbigiU1RSSU5HIiwiJyciKTp0aGlzLm1ha2VUb2tlbigiSlMiLCIiKSxnWzJdPWJbMF1bMl0sZD0wLHU9Yi5sZW5ndGg7ZDx1O2QrKyl7dmFyIEQ7KHY9YltkXSwhIXYuY29tbWVudHMpJiYobnVsbD09Zy5jb21tZW50cyYmKGcuY29tbWVudHM9W10pLChEPWcuY29tbWVudHMpLnB1c2guYXBwbHkoRCxfdG9Db25zdW1hYmxlQXJyYXkodi5jb21tZW50cykpKX1iLnNwbGljZSgxLDAsZyl9bT1iWzBdLE49YjticmVhaztjYXNlIk5FT1NUUklORyI6aWYobj1vLmNhbGwodGhpcyxUWzFdLHMpLDA9PT1uLmxlbmd0aClpZigwPT09cylyPXRoaXMudG9rZW5zLmxlbmd0aDtlbHNlIGNvbnRpbnVlOzI9PT1zJiZudWxsIT1yJiZ0aGlzLnRva2Vucy5zcGxpY2UociwyKSxUWzBdPSJTVFJJTkciLFRbMV09dGhpcy5tYWtlRGVsaW1pdGVkTGl0ZXJhbChuLGEpLG09VCxOPVtUXX10aGlzLnRva2Vucy5sZW5ndGg+bCYmKGY9dGhpcy50b2tlbigiKyIsIisiKSxmWzJdPXtmaXJzdF9saW5lOm1bMl0uZmlyc3RfbGluZSxmaXJzdF9jb2x1bW46bVsyXS5maXJzdF9jb2x1bW4sbGFzdF9saW5lOm1bMl0uZmlyc3RfbGluZSxsYXN0X2NvbHVtbjptWzJdLmZpcnN0X2NvbHVtbn0pLCgkPXRoaXMudG9rZW5zKS5wdXNoLmFwcGx5KCQsX3RvQ29uc3VtYWJsZUFycmF5KE4pKX1pZihoKXt2YXIgRT10LmNhbGwoZSwtMSkseD1fc2xpY2VkVG9BcnJheShFLDEpO3JldHVybiBjPXhbMF0saC5vcmlnaW49WyJTVFJJTkciLG51bGwse2ZpcnN0X2xpbmU6aFsyXS5maXJzdF9saW5lLGZpcnN0X2NvbHVtbjpoWzJdLmZpcnN0X2NvbHVtbixsYXN0X2xpbmU6Y1syXS5sYXN0X2xpbmUsbGFzdF9jb2x1bW46Y1syXS5sYXN0X2NvbHVtbn1dLGhbMl09aC5vcmlnaW5bMl0seT10aGlzLnRva2VuKCJTVFJJTkdfRU5EIiwiKSIpLHlbMl09e2ZpcnN0X2xpbmU6Y1syXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmNbMl0ubGFzdF9jb2x1bW4sbGFzdF9saW5lOmNbMl0ubGFzdF9saW5lLGxhc3RfY29sdW1uOmNbMl0ubGFzdF9jb2x1bW59fX19LHtrZXk6InBhaXIiLHZhbHVlOmZ1bmN0aW9uIHBhaXIoZSl7dmFyIGEsbyxuLHIsbCxzLGk7aWYobD10aGlzLmVuZHMsYT10LmNhbGwobCwtMSksbz1fc2xpY2VkVG9BcnJheShhLDEpLHI9b1swXSxhLGUhPT0oaT1udWxsPT1yP3ZvaWQgMDpyLnRhZykpe3ZhciBkLGM7cmV0dXJuIk9VVERFTlQiIT09aSYmdGhpcy5lcnJvcigidW5tYXRjaGVkICIrZSkscz10aGlzLmluZGVudHMsZD10LmNhbGwocywtMSksYz1fc2xpY2VkVG9BcnJheShkLDEpLG49Y1swXSxkLHRoaXMub3V0ZGVudFRva2VuKG4sITApLHRoaXMucGFpcihlKX1yZXR1cm4gdGhpcy5lbmRzLnBvcCgpfX0se2tleToiZ2V0TGluZUFuZENvbHVtbkZyb21DaHVuayIsdmFsdWU6ZnVuY3Rpb24gZ2V0TGluZUFuZENvbHVtbkZyb21DaHVuayhlKXt2YXIgYSxvLG4scixsO2lmKDA9PT1lKXJldHVyblt0aGlzLmNodW5rTGluZSx0aGlzLmNodW5rQ29sdW1uXTtpZihsPWU+PXRoaXMuY2h1bmsubGVuZ3RoP3RoaXMuY2h1bms6dGhpcy5jaHVuay5zbGljZSgwLCsoZS0xKSsxfHw5ZTkpLG49aGUobCwiXG4iKSxhPXRoaXMuY2h1bmtDb2x1bW4sMDxuKXt2YXIgcyxpO3I9bC5zcGxpdCgiXG4iKSxzPXQuY2FsbChyLC0xKSxpPV9zbGljZWRUb0FycmF5KHMsMSksbz1pWzBdLHMsYT1vLmxlbmd0aH1lbHNlIGErPWwubGVuZ3RoO3JldHVyblt0aGlzLmNodW5rTGluZStuLGFdfX0se2tleToibWFrZVRva2VuIix2YWx1ZTpmdW5jdGlvbiBtYWtlVG9rZW4oZSxhKXt2YXIgdD0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MCxvPTM8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTphLmxlbmd0aCxuLHIsbDtyPXt9O3ZhciBzPXRoaXMuZ2V0TGluZUFuZENvbHVtbkZyb21DaHVuayh0KSxpPV9zbGljZWRUb0FycmF5KHMsMik7ci5maXJzdF9saW5lPWlbMF0sci5maXJzdF9jb2x1bW49aVsxXSxuPTA8bz9vLTE6MDt2YXIgZD10aGlzLmdldExpbmVBbmRDb2x1bW5Gcm9tQ2h1bmsodCtuKSxjPV9zbGljZWRUb0FycmF5KGQsMik7cmV0dXJuIHIubGFzdF9saW5lPWNbMF0sci5sYXN0X2NvbHVtbj1jWzFdLGw9W2UsYSxyXSxsfX0se2tleToidG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUsYSx0LG8sbil7dmFyIHI7cmV0dXJuIHI9dGhpcy5tYWtlVG9rZW4oZSxhLHQsbyksbiYmKHIub3JpZ2luPW4pLHRoaXMudG9rZW5zLnB1c2gocikscn19LHtrZXk6InRhZyIsdmFsdWU6ZnVuY3Rpb24gdGFnKCl7dmFyIGUsYSxvLG47cmV0dXJuIG89dGhpcy50b2tlbnMsZT10LmNhbGwobywtMSksYT1fc2xpY2VkVG9BcnJheShlLDEpLG49YVswXSxlLG51bGw9PW4/dm9pZCAwOm5bMF19fSx7a2V5OiJ2YWx1ZSIsdmFsdWU6ZnVuY3Rpb24gdmFsdWUoKXt2YXIgZT0hISgwPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSkmJmFyZ3VtZW50c1swXSxhLG8sbixyLGw7cmV0dXJuIG49dGhpcy50b2tlbnMsYT10LmNhbGwobiwtMSksbz1fc2xpY2VkVG9BcnJheShhLDEpLGw9b1swXSxhLGUmJm51bGwhPShudWxsPT1sP3ZvaWQgMDpsLm9yaWdpbik/bnVsbD09KHI9bC5vcmlnaW4pP3ZvaWQgMDpyWzFdOm51bGw9PWw/dm9pZCAwOmxbMV19fSx7a2V5OiJwcmV2Iix2YWx1ZTpmdW5jdGlvbiBwcmV2KCl7cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aC0xXX19LHtrZXk6InVuZmluaXNoZWQiLHZhbHVlOmZ1bmN0aW9uIHVuZmluaXNoZWQoKXt2YXIgZTtyZXR1cm4gRi50ZXN0KHRoaXMuY2h1bmspfHwoZT10aGlzLnRhZygpLDA8PWEuY2FsbChpZSxlKSl9fSx7a2V5OiJmb3JtYXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uIGZvcm1hdFN0cmluZyhlLGEpe3JldHVybiB0aGlzLnJlcGxhY2VVbmljb2RlQ29kZVBvaW50RXNjYXBlcyhlLnJlcGxhY2UoYWUsIiQxIiksYSl9fSx7a2V5OiJmb3JtYXRIZXJlZ2V4Iix2YWx1ZTpmdW5jdGlvbiBmb3JtYXRIZXJlZ2V4KGUsYSl7cmV0dXJuIHRoaXMuZm9ybWF0UmVnZXgoZS5yZXBsYWNlKF8sIiQxJDIiKSxOZShhLHtkZWxpbWl0ZXI6Ii8vLyJ9KSl9fSx7a2V5OiJmb3JtYXRSZWdleCIsdmFsdWU6ZnVuY3Rpb24gZm9ybWF0UmVnZXgoZSxhKXtyZXR1cm4gdGhpcy5yZXBsYWNlVW5pY29kZUNvZGVQb2ludEVzY2FwZXMoZSxhKX19LHtrZXk6InVuaWNvZGVDb2RlUG9pbnRUb1VuaWNvZGVFc2NhcGVzIix2YWx1ZTpmdW5jdGlvbiB1bmljb2RlQ29kZVBvaW50VG9Vbmljb2RlRXNjYXBlcyhlKXt2YXIgYSx0LG87cmV0dXJuKG89ZnVuY3Rpb24oZSl7dmFyIGE7cmV0dXJuIGE9ZS50b1N0cmluZygxNiksIlxcdSIrdmUoIjAiLDQtYS5sZW5ndGgpK2F9LDY1NTM2PmUpP28oZSk6KGE9X01hdGhmbG9vcigoZS02NTUzNikvMTAyNCkrNTUyOTYsdD0oZS02NTUzNiklMTAyNCs1NjMyMCwiIitvKGEpK28odCkpfX0se2tleToicmVwbGFjZVVuaWNvZGVDb2RlUG9pbnRFc2NhcGVzIix2YWx1ZTpmdW5jdGlvbiByZXBsYWNlVW5pY29kZUNvZGVQb2ludEVzY2FwZXMoZSx0KXt2YXIgbz10aGlzLG47cmV0dXJuIG49bnVsbCE9dC5mbGFncyYmMD5hLmNhbGwodC5mbGFncywidSIpLGUucmVwbGFjZShkZSxmdW5jdGlvbihlLGEscixsKXt2YXIgcztyZXR1cm4gYT9hOihzPXBhcnNlSW50KHIsMTYpLDExMTQxMTE8cyYmby5lcnJvcigidW5pY29kZSBjb2RlIHBvaW50IGVzY2FwZXMgZ3JlYXRlciB0aGFuIFxcdXsxMGZmZmZ9IGFyZSBub3QgYWxsb3dlZCIse29mZnNldDpsK3QuZGVsaW1pdGVyLmxlbmd0aCxsZW5ndGg6ci5sZW5ndGgrNH0pLG4/by51bmljb2RlQ29kZVBvaW50VG9Vbmljb2RlRXNjYXBlcyhzKTplKX0pfX0se2tleToidmFsaWRhdGVFc2NhcGVzIix2YWx1ZTpmdW5jdGlvbiB2YWxpZGF0ZUVzY2FwZXMoZSl7dmFyIGE9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHQsbyxuLHIsbCxzLGksZCxjLHA7aWYocj1hLmlzUmVnZXg/WDplZSxsPXIuZXhlYyhlKSwhIWwpcmV0dXJuIGxbMF0sdD1sWzFdLGk9bFsyXSxvPWxbM10scD1sWzRdLGM9bFs1XSxzPWk/Im9jdGFsIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIG5vdCBhbGxvd2VkIjoiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UiLG49IlxcIisoaXx8b3x8cHx8YyksdGhpcy5lcnJvcihzKyIgIituLHtvZmZzZXQ6KG51bGw9PShkPWEub2Zmc2V0SW5DaHVuayk/MDpkKStsLmluZGV4K3QubGVuZ3RoLGxlbmd0aDpuLmxlbmd0aH0pfX0se2tleToibWFrZURlbGltaXRlZExpdGVyYWwiLHZhbHVlOmZ1bmN0aW9uIG1ha2VEZWxpbWl0ZWRMaXRlcmFsKGUpe3ZhciBhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx0O3JldHVybiIiPT09ZSYmIi8iPT09YS5kZWxpbWl0ZXImJihlPSIoPzopIiksdD1SZWdFeHAoIihcXFxcXFxcXCl8KFxcXFwwKD89WzEtN10pKXxcXFxcPygiK2EuZGVsaW1pdGVyKyIpfFxcXFw/KD86KFxcbil8KFxccil8KFxcdTIwMjgpfChcXHUyMDI5KSl8KFxcXFwuKSIsImciKSxlPWUucmVwbGFjZSh0LGZ1bmN0aW9uKGUsdCxvLG4scixsLHMsaSxkKXtzd2l0Y2goITEpe2Nhc2UhdDpyZXR1cm4gYS5kb3VibGU/dCt0OnQ7Y2FzZSFvOnJldHVybiJcXHgwMCI7Y2FzZSFuOnJldHVybiJcXCIrbjtjYXNlIXI6cmV0dXJuIlxcbiI7Y2FzZSFsOnJldHVybiJcXHIiO2Nhc2UhczpyZXR1cm4iXFx1MjAyOCI7Y2FzZSFpOnJldHVybiJcXHUyMDI5IjtjYXNlIWQ6cmV0dXJuIGEuZG91YmxlPyJcXCIrZDpkfX0pLCIiK2EuZGVsaW1pdGVyK2UrYS5kZWxpbWl0ZXJ9fSx7a2V5OiJzdXBwcmVzc1NlbWljb2xvbnMiLHZhbHVlOmZ1bmN0aW9uIHN1cHByZXNzU2VtaWNvbG9ucygpe3ZhciBlLHQsbztmb3Iobz1bXTsiOyI9PT10aGlzLnZhbHVlKCk7KXRoaXMudG9rZW5zLnBvcCgpLChlPW51bGw9PSh0PXRoaXMucHJldigpKT92b2lkIDA6dFswXSwwPD1hLmNhbGwoWyI9Il0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShpZSkpLGUpKT9vLnB1c2godGhpcy5lcnJvcigidW5leHBlY3RlZCA7IikpOm8ucHVzaCh2b2lkIDApO3JldHVybiBvfX0se2tleToiZXJyb3IiLHZhbHVlOmZ1bmN0aW9uIGVycm9yKGUpe3ZhciBhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx0LG8sbixyLGwscyxpO3JldHVybiBsPSJmaXJzdF9saW5lImluIGE/YToodD10aGlzLmdldExpbmVBbmRDb2x1bW5Gcm9tQ2h1bmsobnVsbD09KHM9YS5vZmZzZXQpPzA6cyksbz1fc2xpY2VkVG9BcnJheSh0LDIpLHI9b1swXSxuPW9bMV0sdCx7Zmlyc3RfbGluZTpyLGZpcnN0X2NvbHVtbjpuLGxhc3RfY29sdW1uOm4rKG51bGw9PShpPWEubGVuZ3RoKT8xOmkpLTF9KSwkZShlLGwpfX1dKSxlfSgpLHllPWZ1bmN0aW9uKGUpe3ZhciB0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTplO3N3aXRjaCghMSl7Y2FzZSAwPmEuY2FsbChbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KFIpLF90b0NvbnN1bWFibGVBcnJheShjKSksZSk6cmV0dXJuImtleXdvcmQgJyIrdCsiJyBjYW4ndCBiZSBhc3NpZ25lZCI7Y2FzZSAwPmEuY2FsbChaLGUpOnJldHVybiInIit0KyInIGNhbid0IGJlIGFzc2lnbmVkIjtjYXNlIDA+YS5jYWxsKHEsZSk6cmV0dXJuInJlc2VydmVkIHdvcmQgJyIrdCsiJyBjYW4ndCBiZSBhc3NpZ25lZCI7ZGVmYXVsdDpyZXR1cm4hMX19LGUuaXNVbmFzc2lnbmFibGU9eWUsZmU9ZnVuY3Rpb24oZSl7dmFyIGE7cmV0dXJuIklERU5USUZJRVIiPT09ZVswXT8oImZyb20iPT09ZVsxXSYmKGVbMV1bMF09IklERU5USUZJRVIiLCEwKSwhMCk6IkZPUiIhPT1lWzBdJiYieyIhPT0oYT1lWzFdKSYmIlsiIT09YSYmIiwiIT09YSYmIjoiIT09YX0sUj1bInRydWUiLCJmYWxzZSIsIm51bGwiLCJ0aGlzIiwibmV3IiwiZGVsZXRlIiwidHlwZW9mIiwiaW4iLCJpbnN0YW5jZW9mIiwicmV0dXJuIiwidGhyb3ciLCJicmVhayIsImNvbnRpbnVlIiwiZGVidWdnZXIiLCJ5aWVsZCIsImF3YWl0IiwiaWYiLCJlbHNlIiwic3dpdGNoIiwiZm9yIiwid2hpbGUiLCJkbyIsInRyeSIsImNhdGNoIiwiZmluYWxseSIsImNsYXNzIiwiZXh0ZW5kcyIsInN1cGVyIiwiaW1wb3J0IiwiZXhwb3J0IiwiZGVmYXVsdCJdLGM9WyJ1bmRlZmluZWQiLCJJbmZpbml0eSIsIk5hTiIsInRoZW4iLCJ1bmxlc3MiLCJ1bnRpbCIsImxvb3AiLCJvZiIsImJ5Iiwid2hlbiJdLGQ9e2FuZDoiJiYiLG9yOiJ8fCIsaXM6Ij09Iixpc250OiIhPSIsbm90OiIhIix5ZXM6InRydWUiLG5vOiJmYWxzZSIsb246InRydWUiLG9mZjoiZmFsc2UifSxpPWZ1bmN0aW9uKCl7dmFyIGU7Zm9yKGtlIGluIGU9W10sZCllLnB1c2goa2UpO3JldHVybiBlfSgpLGM9Yy5jb25jYXQoaSkscT1bImNhc2UiLCJmdW5jdGlvbiIsInZhciIsInZvaWQiLCJ3aXRoIiwiY29uc3QiLCJsZXQiLCJlbnVtIiwibmF0aXZlIiwiaW1wbGVtZW50cyIsImludGVyZmFjZSIsInBhY2thZ2UiLCJwcml2YXRlIiwicHJvdGVjdGVkIiwicHVibGljIiwic3RhdGljIl0sWj1bImFyZ3VtZW50cyIsImV2YWwiXSxlLkpTX0ZPUkJJRERFTj1SLmNvbmNhdChxKS5jb25jYXQoWiksbj02NTI3OSxEPS9eKD8hXGQpKCg/Oig/IVxzKVskXHdceDdmLVx1ZmZmZl0pKykoW15cblxTXSo6KD8hOikpPy8seT0vXig/IVtcZDxdKSgoPzooPyFccylbXC5cLSRcd1x4N2YtXHVmZmZmXSkrKS8sZj0vXigpPi8sZz0vXig/IVxkKSgoPzooPyFccylbXC0kXHdceDdmLVx1ZmZmZl0pKykoW15cU10qPSg/IT0pKT8vLFU9L14wYlswMV0rfF4wb1swLTddK3xeMHhbXGRhLWZdK3xeXGQqXC4/XGQrKD86ZVsrLV0/XGQrKT8vaSxWPS9eKD86Wy09XT58Wy0rKlwvJTw+JnxeIT89XT18Pj4+PT98KFstKzpdKVwxfChbJnw8PipcLyVdKVwyPT98XD8oXC58OjopfFwuezIsM30pLyxwZT0vXlteXG5cU10rLyxwPS9eXHMqIyMjKFteI11bXHNcU10qPykoPzojIyNbXlxuXFNdKnwjIyMkKXxeKD86XHMqIyg/ISMjW14jXSkuKikrLyxzPS9eWy09XT4vLGo9L14oPzpcblteXG5cU10qKSsvLEE9L15gKD8hYGApKCg/OlteYFxcXXxcXFtcc1xTXSkqKWAvLEM9L15gYGAoKD86W15gXFxdfFxcW1xzXFNdfGAoPyFgYCkpKilgYGAvLG9lPS9eKD86JycnfCIiInwnfCIpLyx0ZT0vXig/OlteXFwnXXxcXFtcc1xTXSkqLyxRPS9eKD86W15cXCIjXXxcXFtcc1xTXXxcIyg/IVx7KSkqLyxiPS9eKD86W15cXCddfFxcW1xzXFNdfCcoPyEnJykpKi8sTj0vXig/OlteXFwiI118XFxbXHNcU118Iig/ISIiKXxcIyg/IVx7KSkqLyxJPS9eKD86W15cezxdKSovLGs9L14oPzpce3w8KD8hXC8pKS8sYWU9LygoPzpcXFxcKSspfFxcW15cU1xuXSpcblxzKi9nLEs9L1xzKlxuXHMqL2csdj0vXG4rKFteXG5cU10qKSg/PVxTKS9nLEc9L15cLyg/IVwvKSgoPzpbXltcL1xuXFxdfFxcW15cbl18XFsoPzpcXFteXG5dfFteXF1cblxcXSkqXF0pKikoXC8pPy8sSD0vXlx3Ki8sY2U9L14oPyEuKiguKS4qXDEpW2ltZ3V5XSokLywkPS9eKD86W15cXFwvI1xzXXxcXFtcc1xTXXxcLyg/IVwvXC8pfFwjKD8hXHspfFxzKyg/OiMoPyFceykuKik/KSovLF89LygoPzpcXFxcKSspfFxcKFxzKXxccysoPzojLiopPy9nLFc9L14oXC98XC97M31ccyopKFwqKS8sQj0vXlwvPT9ccy8sVD0vXCpcLy8sRj0vXlxzKig/Oix8XD8/XC4oPyFbLlxkXSl8OjopLyxlZT0vKCg/Ol58W15cXF0pKD86XFxcXCkqKVxcKD86KDBbMC03XXxbMS03XSl8KHgoPyFbXGRhLWZBLUZdezJ9KS57MCwyfSl8KHVceyg/IVtcZGEtZkEtRl17MSx9XH0pW159XSpcfT8pfCh1KD8hXHt8W1xkYS1mQS1GXXs0fSkuezAsNH0pKS8sWD0vKCg/Ol58W15cXF0pKD86XFxcXCkqKVxcKD86KDBbMC03XSl8KHgoPyFbXGRhLWZBLUZdezJ9KS57MCwyfSl8KHVceyg/IVtcZGEtZkEtRl17MSx9XH0pW159XSpcfT8pfCh1KD8hXHt8W1xkYS1mQS1GXXs0fSkuezAsNH0pKS8sZGU9LyhcXFxcKXxcXHVceyhbXGRhLWZBLUZdKylcfS9nLE89L15bXlxuXFNdKlxuLyxuZT0vXG5bXlxuXFNdKiQvLHJlPS9ccyskLyxoPVsiLT0iLCIrPSIsIi89IiwiKj0iLCIlPSIsInx8PSIsIiYmPSIsIj89IiwiPDw9IiwiPj49IiwiPj4+PSIsIiY9IiwiXj0iLCJ8PSIsIioqPSIsIi8vPSIsIiUlPSJdLGxlPVsiTkVXIiwiVFlQRU9GIiwiREVMRVRFIiwiRE8iXSxzZT1bIiEiLCJ+Il0sSj1bIjw8IiwiPj4iLCI+Pj4iXSxtPVsiPT0iLCIhPSIsIjwiLCI+IiwiPD0iLCI+PSJdLFA9WyIqIiwiLyIsIiUiLCIvLyIsIiUlIl0sWT1bIklOIiwiT0YiLCJJTlNUQU5DRU9GIl0scj1bIlRSVUUiLCJGQUxTRSJdLGw9WyJJREVOVElGSUVSIiwiUFJPUEVSVFkiLCIpIiwiXSIsIj8iLCJAIiwiVEhJUyIsIlNVUEVSIl0seD1sLmNvbmNhdChbIk5VTUJFUiIsIklORklOSVRZIiwiTkFOIiwiU1RSSU5HIiwiU1RSSU5HX0VORCIsIlJFR0VYIiwiUkVHRVhfRU5EIiwiQk9PTCIsIk5VTEwiLCJVTkRFRklORUQiLCJ9IiwiOjoiXSksdT1bIklERU5USUZJRVIiLCIpIiwiXSIsIk5VTUJFUiJdLE09eC5jb25jYXQoWyIrKyIsIi0tIl0pLEw9WyJJTkRFTlQiLCJPVVRERU5UIiwiVEVSTUlOQVRPUiJdLEU9WyIpIiwifSIsIl0iXSxpZT1bIlxcIiwiLiIsIj8uIiwiPzo6IiwiVU5BUlkiLCJNQVRIIiwiVU5BUllfTUFUSCIsIisiLCItIiwiKioiLCJTSElGVCIsIlJFTEFUSU9OIiwiQ09NUEFSRSIsIiYiLCJeIiwifCIsIiYmIiwifHwiLCJCSU4/IiwiRVhURU5EUyJdfS5jYWxsKHRoaXMpLHtleHBvcnRzOmV9LmV4cG9ydHN9KCkscmVxdWlyZVsiLi9wYXJzZXIiXT1mdW5jdGlvbigpe3ZhciBlPXt9LGE9e2V4cG9ydHM6ZX0sdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLnl5PXt9fXZhciBhPWZ1bmN0aW9uKGUsYSx0LG8pe2Zvcih0PXR8fHt9LG89ZS5sZW5ndGg7by0tO3RbZVtvXV09YSk7cmV0dXJuIHR9LHQ9WzEsMjRdLG89WzEsNTZdLG49WzEsOTFdLHI9WzEsOTJdLGw9WzEsODddLHM9WzEsOTNdLGk9WzEsOTRdLGQ9WzEsODldLGM9WzEsOTBdLHA9WzEsNjRdLHU9WzEsNjZdLG09WzEsNjddLGg9WzEsNjhdLGc9WzEsNjldLGY9WzEsNzBdLHk9WzEsNzJdLGs9WzEsNzNdLFQ9WzEsNThdLE49WzEsNDJdLHY9WzEsMzZdLGI9WzEsNzZdLCQ9WzEsNzddLF89WzEsODZdLEM9WzEsNTRdLEQ9WzEsNTldLEU9WzEsNjBdLHg9WzEsNzRdLEk9WzEsNzVdLFM9WzEsNDddLEE9WzEsNTVdLFI9WzEsNzFdLE89WzEsODFdLEw9WzEsODJdLEY9WzEsODNdLHc9WzEsODRdLFA9WzEsNTNdLGo9WzEsODBdLE09WzEsMzhdLFU9WzEsMzldLFY9WzEsNDBdLEI9WzEsNDFdLEc9WzEsNDNdLEg9WzEsNDRdLFc9WzEsOTVdLFg9WzEsNiwzNiw0NywxNDZdLFk9WzEsNiwzNSwzNiw0Nyw2OSw3MCw5MywxMjcsMTM1LDE0NiwxNDksMTU3XSxxPVsxLDExM10sej1bMSwxMTRdLEo9WzEsMTE1XSxLPVsxLDExMF0sWj1bMSw5OF0sUT1bMSw5N10sZWU9WzEsOTZdLGFlPVsxLDk5XSx0ZT1bMSwxMDBdLG9lPVsxLDEwMV0sbmU9WzEsMTAyXSxyZT1bMSwxMDNdLGxlPVsxLDEwNF0sc2U9WzEsMTA1XSxpZT1bMSwxMDZdLGRlPVsxLDEwN10sY2U9WzEsMTA4XSxwZT1bMSwxMDldLHVlPVsxLDExN10sbWU9WzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTc4LDE3OSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5M10saGU9WzIsMTk2XSxnZT1bMSwxMjNdLGZlPVsxLDEyOF0seWU9WzEsMTI0XSxrZT1bMSwxMjVdLFRlPVsxLDEyNl0sTmU9WzEsMTI5XSx2ZT1bMSwxMjJdLGJlPVsxLDYsMzUsMzYsNDcsNjksNzAsOTMsMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzRdLCRlPVsxLDYsMzUsMzYsNDUsNDYsNDcsNjksNzAsODAsODEsODMsODgsOTMsMTAxLDEwMiwxMDMsMTA1LDEwOSwxMjUsMTI2LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE3OCwxNzksMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLF9lPVsyLDEyMl0sQ2U9WzIsMTI2XSxEZT1bNiwzNSw4OCw5M10sRWU9WzIsOTldLHhlPVsxLDE0MV0sSWU9WzEsMTM1XSxTZT1bMSwxNDBdLEFlPVsxLDE0NF0sUmU9WzEsMTQ5XSxPZT1bMSwxNDddLExlPVsxLDE1MV0sRmU9WzEsMTU1XSx3ZT1bMSwxNTNdLFBlPVsxLDYsMzUsMzYsNDUsNDYsNDcsNjEsNjksNzAsODAsODEsODMsODgsOTMsMTAxLDEwMiwxMDMsMTA1LDEwOSwxMjUsMTI2LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE3OCwxNzksMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLGplPVsyLDExOV0sTWU9WzEsNiwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTc4LDE3OSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5M10sVWU9WzIsMzFdLFZlPVsxLDE4M10sQmU9WzIsODZdLEdlPVsxLDE4N10sSGU9WzEsMTkzXSxXZT1bMSwyMDhdLFhlPVsxLDIwM10sWWU9WzEsMjEyXSxxZT1bMSwyMDldLHplPVsxLDIxNF0sSmU9WzEsMjE1XSxLZT1bMSwyMTddLFplPVsxNCwzMiwzNSwzOCwzOSw0Myw0NSw0Niw0OSw1MCw1NCw1NSw1Niw1Nyw1OCw1OSw2OCw3Nyw4NCw4NSw4Niw5MCw5MSwxMDcsMTEwLDExMiwxMjAsMTI5LDEzMCwxNDAsMTQ0LDE0NSwxNDgsMTUwLDE1MywxNTYsMTY3LDE3MywxNzYsMTc3LDE3OCwxNzksMTgwLDE4MV0sUWU9WzEsNiwzNSwzNiw0NSw0Niw0Nyw2MSw2OSw3MCw4MCw4MSw4Myw4OCw5MywxMDEsMTAyLDEwMywxMDUsMTA5LDExMSwxMjUsMTI2LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTRdLGVhPVsxLDIyOF0sYWE9WzIsMTQyXSx0YT1bMSwyNTBdLG9hPVsxLDI0NV0sbmE9WzEsMjU2XSxyYT1bMSw2LDM1LDM2LDQ1LDQ2LDQ3LDY1LDY5LDcwLDgwLDgxLDgzLDg4LDkzLDEwMSwxMDIsMTAzLDEwNSwxMDksMTI1LDEyNiwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxsYT1bMSw2LDMzLDM1LDM2LDQ1LDQ2LDQ3LDYxLDY1LDY5LDcwLDgwLDgxLDgzLDg4LDkzLDEwMSwxMDIsMTAzLDEwNSwxMDksMTExLDExNywxMjUsMTI2LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTY0LDE2NSwxNjYsMTc0LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTRdLHNhPVsxLDYsMzUsMzYsNDUsNDYsNDcsNTIsNjUsNjksNzAsODAsODEsODMsODgsOTMsMTAxLDEwMiwxMDMsMTA1LDEwOSwxMjUsMTI2LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE3OCwxNzksMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLGlhPVsxLDI4Nl0sZGE9WzQ1LDQ2LDEyNl0sY2E9WzEsMjk3XSxwYT1bMSwyOTZdLHVhPVs2LDM1XSxtYT1bMiw5N10saGE9WzEsMzAzXSxnYT1bNiwzNSwzNiw4OCw5M10sZmE9WzYsMzUsMzYsNjEsNzAsODgsOTNdLHlhPVsxLDYsMzUsMzYsNDcsNjksNzAsODAsODEsODMsODgsOTMsMTAxLDEwMiwxMDMsMTA1LDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxrYT1bMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxNzgsMTc5LDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLFRhPVsyLDM0N10sTmE9WzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTc4LDE3OSwxODMsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLHZhPVs0NSw0Niw4MCw4MSwxMDEsMTAyLDEwMywxMDUsMTI1LDEyNl0sYmE9WzEsMzMwXSwkYT1bMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NF0sX2E9WzIsODRdLENhPVsxLDM0Nl0sRGE9WzEsMzQ4XSxFYT1bMSwzNTNdLHhhPVsxLDM1NV0sSWE9WzYsMzUsNjksOTNdLFNhPVsyLDIyMV0sQWE9WzIsMjIyXSxSYT1bMSw2LDM1LDM2LDQ1LDQ2LDQ3LDYxLDY5LDcwLDgwLDgxLDgzLDg4LDkzLDEwMSwxMDIsMTAzLDEwNSwxMDksMTI1LDEyNiwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE2NCwxNjUsMTY2LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxPYT1bMSwzNjldLExhPVs2LDE0LDMyLDM1LDM2LDM4LDM5LDQzLDQ1LDQ2LDQ5LDUwLDU0LDU1LDU2LDU3LDU4LDU5LDY4LDY5LDcwLDc3LDg0LDg1LDg2LDkwLDkxLDkzLDEwNywxMTAsMTEyLDEyMCwxMjksMTMwLDE0MCwxNDQsMTQ1LDE0OCwxNTAsMTUzLDE1NiwxNjcsMTczLDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxXSxGYT1bNiwzNSwzNiw2OSw5M10sd2E9WzYsMzUsMzYsNjksOTMsMTI3XSxQYT1bMSw2LDM1LDM2LDQ1LDQ2LDQ3LDYxLDY1LDY5LDcwLDgwLDgxLDgzLDg4LDkzLDEwMSwxMDIsMTAzLDEwNSwxMDksMTExLDEyNSwxMjYsMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNjQsMTY1LDE2NiwxNzQsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NF0samE9WzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTU3LDE3NF0sTWE9WzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ5LDE1NywxNzRdLFVhPVsyLDI3M10sVmE9WzE2NCwxNjUsMTY2XSxCYT1bOTMsMTY0LDE2NSwxNjZdLEdhPVs2LDM1LDEwOV0sSGE9WzEsMzkzXSxXYT1bNiwzNSwzNiw5MywxMDldLFhhPVs2LDM1LDM2LDY1LDkzLDEwOV0sWWE9WzEsMzk5XSxxYT1bMSw0MDBdLHphPVs2LDM1LDM2LDYxLDY1LDcwLDgwLDgxLDkzLDEwOSwxMjZdLEphPVs2LDM1LDM2LDcwLDgwLDgxLDkzLDEwOSwxMjZdLEthPVsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE3OCwxNzksMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLFphPVsyLDMzOV0sUWE9WzIsMzM4XSxldD1bMSw2LDM1LDM2LDQ1LDQ2LDQ3LDUyLDY5LDcwLDgwLDgxLDgzLDg4LDkzLDEwMSwxMDIsMTAzLDEwNSwxMDksMTI1LDEyNiwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxhdD1bMSw0MjJdLHR0PVsxNCwzMiwzOCwzOSw0Myw0NSw0Niw0OSw1MCw1NCw1NSw1Niw1Nyw1OCw1OSw2OCw3Nyw4Myw4NCw4NSw4Niw5MCw5MSwxMDcsMTEwLDExMiwxMjAsMTI5LDEzMCwxNDAsMTQ0LDE0NSwxNDgsMTUwLDE1MywxNTYsMTY3LDE3MywxNzYsMTc3LDE3OCwxNzksMTgwLDE4MV0sb3Q9WzIsMjA3XSxudD1bNiwzNSwzNl0scnQ9WzIsOThdLGx0PVsxLDQzMV0sc3Q9WzEsNDMyXSxpdD1bMSw2LDM1LDM2LDQ3LDY5LDcwLDgwLDgxLDgzLDg4LDkzLDEwMSwxMDIsMTAzLDEwNSwxMDksMTI3LDEzNSwxNDIsMTQzLDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE2OSwxNzEsMTc0LDE3OCwxNzksMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLGR0PVsxLDMxMl0sY3Q9WzM2LDE2OSwxNzFdLHB0PVsxLDYsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OSwxNTcsMTc0XSx1dD1bMSw0NjddLG10PVsxLDQ3M10saHQ9WzEsNiwzNSwzNiw0Nyw2OSw3MCw5MywxMjcsMTM1LDE0NiwxNDksMTU3LDE3NF0sZ3Q9WzIsMTEzXSxmdD1bMSw0ODZdLHl0PVsxLDQ4N10sa3Q9WzYsMzUsMzYsNjldLFR0PVsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTY5LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxOdD1bMSw2LDM1LDM2LDQ3LDY5LDcwLDkzLDEyNywxMzUsMTQ2LDE0OSwxNTcsMTY5XSx2dD1bMiwyODZdLGJ0PVsyLDI4N10sJHQ9WzIsMzAyXSxfdD1bMSw1MTBdLEN0PVsxLDUxMV0sRHQ9WzYsMzUsMzYsMTA5XSxFdD1bMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTUwLDE1NiwxNTcsMTc0XSx4dD1bMSw1MzJdLEl0PVs2LDM1LDM2LDkzLDEyN10sU3Q9WzYsMzUsMzYsOTNdLEF0PVsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQyLDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxSdD1bMzUsOTNdLE90PVsxLDU2MF0sTHQ9WzEsNTYxXSxGdD1bMSw1NjddLHd0PVsxLDU2OF0sUHQ9WzIsMjU4XSxqdD1bMiwyNjFdLE10PVsyLDI3NF0sVXQ9WzEsNjE3XSxWdD1bMSw2MThdLEJ0PVsyLDI4OF0sR3Q9WzIsMjkyXSxIdD1bMiwyODldLFd0PVsyLDI5M10sWHQ9WzIsMjkwXSxZdD1bMiwyOTFdLHF0PVsyLDMwM10senQ9WzIsMzA0XSxKdD1bMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTc0XSxLdD1bMiwyOTRdLFp0PVsyLDI5Nl0sUXQ9WzIsMjk4XSxlbz1bMiwzMDBdLGFvPVsyLDI5NV0sdG89WzIsMjk3XSxvbz1bMiwyOTldLG5vPVsyLDMwMV0scm89e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixSb290OjMsQm9keTo0LExpbmU6NSxURVJNSU5BVE9SOjYsRXhwcmVzc2lvbjo3LEV4cHJlc3Npb25MaW5lOjgsU3RhdGVtZW50OjksRnVuY0RpcmVjdGl2ZToxMCxZaWVsZFJldHVybjoxMSxBd2FpdFJldHVybjoxMixSZXR1cm46MTMsU1RBVEVNRU5UOjE0LEltcG9ydDoxNSxFeHBvcnQ6MTYsVmFsdWU6MTcsQ29kZToxOCxPcGVyYXRpb246MTksQXNzaWduOjIwLElmOjIxLFRyeToyMixXaGlsZToyMyxGb3I6MjQsU3dpdGNoOjI1LENsYXNzOjI2LFRocm93OjI3LFlpZWxkOjI4LENvZGVMaW5lOjI5LElmTGluZTozMCxPcGVyYXRpb25MaW5lOjMxLFlJRUxEOjMyLEZST006MzMsQmxvY2s6MzQsSU5ERU5UOjM1LE9VVERFTlQ6MzYsSWRlbnRpZmllcjozNyxJREVOVElGSUVSOjM4LENTWF9UQUc6MzksUHJvcGVydHk6NDAsUFJPUEVSVFk6NDEsQWxwaGFOdW1lcmljOjQyLE5VTUJFUjo0MyxTdHJpbmc6NDQsU1RSSU5HOjQ1LFNUUklOR19TVEFSVDo0NixTVFJJTkdfRU5EOjQ3LFJlZ2V4OjQ4LFJFR0VYOjQ5LFJFR0VYX1NUQVJUOjUwLEludm9jYXRpb246NTEsUkVHRVhfRU5EOjUyLExpdGVyYWw6NTMsSlM6NTQsVU5ERUZJTkVEOjU1LE5VTEw6NTYsQk9PTDo1NyxJTkZJTklUWTo1OCxOQU46NTksQXNzaWduYWJsZTo2MCwiPSI6NjEsQXNzaWduT2JqOjYyLE9iakFzc2lnbmFibGU6NjMsT2JqUmVzdFZhbHVlOjY0LCI6Ijo2NSxTaW1wbGVPYmpBc3NpZ25hYmxlOjY2LFRoaXNQcm9wZXJ0eTo2NywiWyI6NjgsIl0iOjY5LCIuLi4iOjcwLE9ialNwcmVhZEV4cHI6NzEsT2JqU3ByZWFkSWRlbnRpZmllcjo3MixPYmplY3Q6NzMsUGFyZW50aGV0aWNhbDo3NCxTdXBlcjo3NSxUaGlzOjc2LFNVUEVSOjc3LEFyZ3VtZW50czo3OCxPYmpTcHJlYWRBY2Nlc3Nvcjo3OSwiLiI6ODAsSU5ERVhfU1RBUlQ6ODEsSW5kZXhWYWx1ZTo4MixJTkRFWF9FTkQ6ODMsUkVUVVJOOjg0LEFXQUlUOjg1LFBBUkFNX1NUQVJUOjg2LFBhcmFtTGlzdDo4NyxQQVJBTV9FTkQ6ODgsRnVuY0dseXBoOjg5LCItPiI6OTAsIj0+Ijo5MSxPcHRDb21tYTo5MiwiLCI6OTMsUGFyYW06OTQsUGFyYW1WYXI6OTUsQXJyYXk6OTYsU3BsYXQ6OTcsU2ltcGxlQXNzaWduYWJsZTo5OCxBY2Nlc3Nvcjo5OSxSYW5nZToxMDAsIj8uIjoxMDEsIjo6IjoxMDIsIj86OiI6MTAzLEluZGV4OjEwNCxJTkRFWF9TT0FLOjEwNSxTbGljZToxMDYsInsiOjEwNyxBc3NpZ25MaXN0OjEwOCwifSI6MTA5LENMQVNTOjExMCxFWFRFTkRTOjExMSxJTVBPUlQ6MTEyLEltcG9ydERlZmF1bHRTcGVjaWZpZXI6MTEzLEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcjoxMTQsSW1wb3J0U3BlY2lmaWVyTGlzdDoxMTUsSW1wb3J0U3BlY2lmaWVyOjExNixBUzoxMTcsREVGQVVMVDoxMTgsSU1QT1JUX0FMTDoxMTksRVhQT1JUOjEyMCxFeHBvcnRTcGVjaWZpZXJMaXN0OjEyMSxFWFBPUlRfQUxMOjEyMixFeHBvcnRTcGVjaWZpZXI6MTIzLE9wdEZ1bmNFeGlzdDoxMjQsRlVOQ19FWElTVDoxMjUsQ0FMTF9TVEFSVDoxMjYsQ0FMTF9FTkQ6MTI3LEFyZ0xpc3Q6MTI4LFRISVM6MTI5LCJAIjoxMzAsRWxpc2lvbnM6MTMxLEFyZ0VsaXNpb25MaXN0OjEzMixPcHRFbGlzaW9uczoxMzMsUmFuZ2VEb3RzOjEzNCwiLi4iOjEzNSxBcmc6MTM2LEFyZ0VsaXNpb246MTM3LEVsaXNpb246MTM4LFNpbXBsZUFyZ3M6MTM5LFRSWToxNDAsQ2F0Y2g6MTQxLEZJTkFMTFk6MTQyLENBVENIOjE0MyxUSFJPVzoxNDQsIigiOjE0NSwiKSI6MTQ2LFdoaWxlTGluZVNvdXJjZToxNDcsV0hJTEU6MTQ4LFdIRU46MTQ5LFVOVElMOjE1MCxXaGlsZVNvdXJjZToxNTEsTG9vcDoxNTIsTE9PUDoxNTMsRm9yQm9keToxNTQsRm9yTGluZUJvZHk6MTU1LEZPUjoxNTYsQlk6MTU3LEZvclN0YXJ0OjE1OCxGb3JTb3VyY2U6MTU5LEZvckxpbmVTb3VyY2U6MTYwLEZvclZhcmlhYmxlczoxNjEsT1dOOjE2MixGb3JWYWx1ZToxNjMsRk9SSU46MTY0LEZPUk9GOjE2NSxGT1JGUk9NOjE2NixTV0lUQ0g6MTY3LFdoZW5zOjE2OCxFTFNFOjE2OSxXaGVuOjE3MCxMRUFESU5HX1dIRU46MTcxLElmQmxvY2s6MTcyLElGOjE3MyxQT1NUX0lGOjE3NCxJZkJsb2NrTGluZToxNzUsVU5BUlk6MTc2LFVOQVJZX01BVEg6MTc3LCItIjoxNzgsIisiOjE3OSwiLS0iOjE4MCwiKysiOjE4MSwiPyI6MTgyLE1BVEg6MTgzLCIqKiI6MTg0LFNISUZUOjE4NSxDT01QQVJFOjE4NiwiJiI6MTg3LCJeIjoxODgsInwiOjE4OSwiJiYiOjE5MCwifHwiOjE5MSwiQklOPyI6MTkyLFJFTEFUSU9OOjE5MyxDT01QT1VORF9BU1NJR046MTk0LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJURVJNSU5BVE9SIiwxNDoiU1RBVEVNRU5UIiwzMjoiWUlFTEQiLDMzOiJGUk9NIiwzNToiSU5ERU5UIiwzNjoiT1VUREVOVCIsMzg6IklERU5USUZJRVIiLDM5OiJDU1hfVEFHIiw0MToiUFJPUEVSVFkiLDQzOiJOVU1CRVIiLDQ1OiJTVFJJTkciLDQ2OiJTVFJJTkdfU1RBUlQiLDQ3OiJTVFJJTkdfRU5EIiw0OToiUkVHRVgiLDUwOiJSRUdFWF9TVEFSVCIsNTI6IlJFR0VYX0VORCIsNTQ6IkpTIiw1NToiVU5ERUZJTkVEIiw1NjoiTlVMTCIsNTc6IkJPT0wiLDU4OiJJTkZJTklUWSIsNTk6Ik5BTiIsNjE6Ij0iLDY1OiI6Iiw2ODoiWyIsNjk6Il0iLDcwOiIuLi4iLDc3OiJTVVBFUiIsODA6Ii4iLDgxOiJJTkRFWF9TVEFSVCIsODM6IklOREVYX0VORCIsODQ6IlJFVFVSTiIsODU6IkFXQUlUIiw4NjoiUEFSQU1fU1RBUlQiLDg4OiJQQVJBTV9FTkQiLDkwOiItPiIsOTE6Ij0+Iiw5MzoiLCIsMTAxOiI/LiIsMTAyOiI6OiIsMTAzOiI/OjoiLDEwNToiSU5ERVhfU09BSyIsMTA3OiJ7IiwxMDk6In0iLDExMDoiQ0xBU1MiLDExMToiRVhURU5EUyIsMTEyOiJJTVBPUlQiLDExNzoiQVMiLDExODoiREVGQVVMVCIsMTE5OiJJTVBPUlRfQUxMIiwxMjA6IkVYUE9SVCIsMTIyOiJFWFBPUlRfQUxMIiwxMjU6IkZVTkNfRVhJU1QiLDEyNjoiQ0FMTF9TVEFSVCIsMTI3OiJDQUxMX0VORCIsMTI5OiJUSElTIiwxMzA6IkAiLDEzNToiLi4iLDE0MDoiVFJZIiwxNDI6IkZJTkFMTFkiLDE0MzoiQ0FUQ0giLDE0NDoiVEhST1ciLDE0NToiKCIsMTQ2OiIpIiwxNDg6IldISUxFIiwxNDk6IldIRU4iLDE1MDoiVU5USUwiLDE1MzoiTE9PUCIsMTU2OiJGT1IiLDE1NzoiQlkiLDE2MjoiT1dOIiwxNjQ6IkZPUklOIiwxNjU6IkZPUk9GIiwxNjY6IkZPUkZST00iLDE2NzoiU1dJVENIIiwxNjk6IkVMU0UiLDE3MToiTEVBRElOR19XSEVOIiwxNzM6IklGIiwxNzQ6IlBPU1RfSUYiLDE3NjoiVU5BUlkiLDE3NzoiVU5BUllfTUFUSCIsMTc4OiItIiwxNzk6IisiLDE4MDoiLS0iLDE4MToiKysiLDE4MjoiPyIsMTgzOiJNQVRIIiwxODQ6IioqIiwxODU6IlNISUZUIiwxODY6IkNPTVBBUkUiLDE4NzoiJiIsMTg4OiJeIiwxODk6InwiLDE5MDoiJiYiLDE5MToifHwiLDE5MjoiQklOPyIsMTkzOiJSRUxBVElPTiIsMTk0OiJDT01QT1VORF9BU1NJR04ifSxwcm9kdWN0aW9uc186WzAsWzMsMF0sWzMsMV0sWzQsMV0sWzQsM10sWzQsMl0sWzUsMV0sWzUsMV0sWzUsMV0sWzUsMV0sWzEwLDFdLFsxMCwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbOSwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbOCwxXSxbOCwxXSxbOCwxXSxbMjgsMV0sWzI4LDJdLFsyOCwzXSxbMzQsMl0sWzM0LDNdLFszNywxXSxbMzcsMV0sWzQwLDFdLFs0MiwxXSxbNDIsMV0sWzQ0LDFdLFs0NCwzXSxbNDgsMV0sWzQ4LDNdLFs1MywxXSxbNTMsMV0sWzUzLDFdLFs1MywxXSxbNTMsMV0sWzUzLDFdLFs1MywxXSxbNTMsMV0sWzIwLDNdLFsyMCw0XSxbMjAsNV0sWzYyLDFdLFs2MiwxXSxbNjIsM10sWzYyLDVdLFs2MiwzXSxbNjIsNV0sWzY2LDFdLFs2NiwxXSxbNjYsMV0sWzY2LDNdLFs2MywxXSxbNjMsMV0sWzY0LDJdLFs2NCwyXSxbNjQsMl0sWzY0LDJdLFs3MSwxXSxbNzEsMV0sWzcxLDFdLFs3MSwxXSxbNzEsMV0sWzcxLDJdLFs3MSwyXSxbNzEsMl0sWzcyLDJdLFs3MiwyXSxbNzksMl0sWzc5LDNdLFsxMywyXSxbMTMsNF0sWzEzLDFdLFsxMSwzXSxbMTEsMl0sWzEyLDNdLFsxMiwyXSxbMTgsNV0sWzE4LDJdLFsyOSw1XSxbMjksMl0sWzg5LDFdLFs4OSwxXSxbOTIsMF0sWzkyLDFdLFs4NywwXSxbODcsMV0sWzg3LDNdLFs4Nyw0XSxbODcsNl0sWzk0LDFdLFs5NCwyXSxbOTQsMl0sWzk0LDNdLFs5NCwxXSxbOTUsMV0sWzk1LDFdLFs5NSwxXSxbOTUsMV0sWzk3LDJdLFs5NywyXSxbOTgsMV0sWzk4LDJdLFs5OCwyXSxbOTgsMV0sWzYwLDFdLFs2MCwxXSxbNjAsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFsxNywxXSxbMTcsMV0sWzE3LDFdLFs3NSwzXSxbNzUsNF0sWzk5LDJdLFs5OSwyXSxbOTksMl0sWzk5LDJdLFs5OSwxXSxbOTksMV0sWzEwNCwzXSxbMTA0LDJdLFs4MiwxXSxbODIsMV0sWzczLDRdLFsxMDgsMF0sWzEwOCwxXSxbMTA4LDNdLFsxMDgsNF0sWzEwOCw2XSxbMjYsMV0sWzI2LDJdLFsyNiwzXSxbMjYsNF0sWzI2LDJdLFsyNiwzXSxbMjYsNF0sWzI2LDVdLFsxNSwyXSxbMTUsNF0sWzE1LDRdLFsxNSw1XSxbMTUsN10sWzE1LDZdLFsxNSw5XSxbMTE1LDFdLFsxMTUsM10sWzExNSw0XSxbMTE1LDRdLFsxMTUsNl0sWzExNiwxXSxbMTE2LDNdLFsxMTYsMV0sWzExNiwzXSxbMTEzLDFdLFsxMTQsM10sWzE2LDNdLFsxNiw1XSxbMTYsMl0sWzE2LDRdLFsxNiw1XSxbMTYsNl0sWzE2LDNdLFsxNiw1XSxbMTYsNF0sWzE2LDddLFsxMjEsMV0sWzEyMSwzXSxbMTIxLDRdLFsxMjEsNF0sWzEyMSw2XSxbMTIzLDFdLFsxMjMsM10sWzEyMywzXSxbMTIzLDFdLFsxMjMsM10sWzUxLDNdLFs1MSwzXSxbNTEsM10sWzEyNCwwXSxbMTI0LDFdLFs3OCwyXSxbNzgsNF0sWzc2LDFdLFs3NiwxXSxbNjcsMl0sWzk2LDJdLFs5NiwzXSxbOTYsNF0sWzEzNCwxXSxbMTM0LDFdLFsxMDAsNV0sWzEwMCw1XSxbMTA2LDNdLFsxMDYsMl0sWzEwNiwzXSxbMTA2LDJdLFsxMDYsMl0sWzEwNiwxXSxbMTI4LDFdLFsxMjgsM10sWzEyOCw0XSxbMTI4LDRdLFsxMjgsNl0sWzEzNiwxXSxbMTM2LDFdLFsxMzYsMV0sWzEzNiwxXSxbMTMyLDFdLFsxMzIsM10sWzEzMiw0XSxbMTMyLDRdLFsxMzIsNl0sWzEzNywxXSxbMTM3LDJdLFsxMzMsMV0sWzEzMywyXSxbMTMxLDFdLFsxMzEsMl0sWzEzOCwxXSxbMTM5LDFdLFsxMzksMV0sWzEzOSwzXSxbMTM5LDNdLFsyMiwyXSxbMjIsM10sWzIyLDRdLFsyMiw1XSxbMTQxLDNdLFsxNDEsM10sWzE0MSwyXSxbMjcsMl0sWzI3LDRdLFs3NCwzXSxbNzQsNV0sWzE0NywyXSxbMTQ3LDRdLFsxNDcsMl0sWzE0Nyw0XSxbMTUxLDJdLFsxNTEsNF0sWzE1MSw0XSxbMTUxLDJdLFsxNTEsNF0sWzE1MSw0XSxbMjMsMl0sWzIzLDJdLFsyMywyXSxbMjMsMl0sWzIzLDFdLFsxNTIsMl0sWzE1MiwyXSxbMjQsMl0sWzI0LDJdLFsyNCwyXSxbMjQsMl0sWzE1NCwyXSxbMTU0LDRdLFsxNTQsMl0sWzE1NSw0XSxbMTU1LDJdLFsxNTgsMl0sWzE1OCwzXSxbMTYzLDFdLFsxNjMsMV0sWzE2MywxXSxbMTYzLDFdLFsxNjEsMV0sWzE2MSwzXSxbMTU5LDJdLFsxNTksMl0sWzE1OSw0XSxbMTU5LDRdLFsxNTksNF0sWzE1OSw0XSxbMTU5LDRdLFsxNTksNF0sWzE1OSw2XSxbMTU5LDZdLFsxNTksNl0sWzE1OSw2XSxbMTU5LDZdLFsxNTksNl0sWzE1OSw2XSxbMTU5LDZdLFsxNTksMl0sWzE1OSw0XSxbMTU5LDRdLFsxNjAsMl0sWzE2MCwyXSxbMTYwLDRdLFsxNjAsNF0sWzE2MCw0XSxbMTYwLDRdLFsxNjAsNF0sWzE2MCw0XSxbMTYwLDZdLFsxNjAsNl0sWzE2MCw2XSxbMTYwLDZdLFsxNjAsNl0sWzE2MCw2XSxbMTYwLDZdLFsxNjAsNl0sWzE2MCwyXSxbMTYwLDRdLFsxNjAsNF0sWzI1LDVdLFsyNSw1XSxbMjUsN10sWzI1LDddLFsyNSw0XSxbMjUsNl0sWzE2OCwxXSxbMTY4LDJdLFsxNzAsM10sWzE3MCw0XSxbMTcyLDNdLFsxNzIsNV0sWzIxLDFdLFsyMSwzXSxbMjEsM10sWzIxLDNdLFsxNzUsM10sWzE3NSw1XSxbMzAsMV0sWzMwLDNdLFszMCwzXSxbMzAsM10sWzMxLDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksM10sWzE5LDNdLFsxOSwzXSxbMTksM10sWzE5LDNdLFsxOSwzXSxbMTksM10sWzE5LDNdLFsxOSwzXSxbMTksM10sWzE5LDNdLFsxOSwzXSxbMTksM10sWzE5LDNdLFsxOSw1XSxbMTksNF1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24oZSxhLHQsbyxuLHIsbCl7dmFyIHM9ci5sZW5ndGgtMTtzd2l0Y2gobil7Y2FzZSAxOnJldHVybiB0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5CbG9jayk7YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLiQ9cltzXTticmVhaztjYXNlIDM6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkoby5CbG9jay53cmFwKFtyW3NdXSkpO2JyZWFrO2Nhc2UgNDp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKHJbcy0yXS5wdXNoKHJbc10pKTticmVhaztjYXNlIDU6dGhpcy4kPXJbcy0xXTticmVhaztjYXNlIDY6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6Y2FzZSAxNDpjYXNlIDE1OmNhc2UgMTY6Y2FzZSAxNzpjYXNlIDE4OmNhc2UgMTk6Y2FzZSAyMDpjYXNlIDIxOmNhc2UgMjI6Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAyNjpjYXNlIDI3OmNhc2UgMjg6Y2FzZSAyOTpjYXNlIDMwOmNhc2UgNDA6Y2FzZSA0NTpjYXNlIDQ3OmNhc2UgNTc6Y2FzZSA2MjpjYXNlIDYzOmNhc2UgNjQ6Y2FzZSA2NjpjYXNlIDY3OmNhc2UgNzI6Y2FzZSA3MzpjYXNlIDc0OmNhc2UgNzU6Y2FzZSA3NjpjYXNlIDk3OmNhc2UgOTg6Y2FzZSAxMDk6Y2FzZSAxMTA6Y2FzZSAxMTE6Y2FzZSAxMTI6Y2FzZSAxMTg6Y2FzZSAxMTk6Y2FzZSAxMjI6Y2FzZSAxMjc6Y2FzZSAxMzY6Y2FzZSAyMjE6Y2FzZSAyMjI6Y2FzZSAyMjM6Y2FzZSAyMjU6Y2FzZSAyMzc6Y2FzZSAyMzg6Y2FzZSAyODA6Y2FzZSAyODE6Y2FzZSAzMzA6Y2FzZSAzMzY6Y2FzZSAzNDI6dGhpcy4kPXJbc107YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5TdGF0ZW1lbnRMaXRlcmFsKHJbc10pKTticmVhaztjYXNlIDMxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLk9wKHJbc10sbmV3IG8uVmFsdWUobmV3IG8uTGl0ZXJhbCgiIikpKSk7YnJlYWs7Y2FzZSAzMjpjYXNlIDM0NjpjYXNlIDM0NzpjYXNlIDM0ODpjYXNlIDM1MTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLk9wKHJbcy0xXSxyW3NdKSk7YnJlYWs7Y2FzZSAzMzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLk9wKHJbcy0yXS5jb25jYXQocltzLTFdKSxyW3NdKSk7YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLkJsb2NrKTticmVhaztjYXNlIDM1OmNhc2UgODM6Y2FzZSAxMzc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShyW3MtMV0pO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uSWRlbnRpZmllckxpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uQ1NYVGFnKHJbc10pKTticmVhaztjYXNlIDM4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLlByb3BlcnR5TmFtZShyW3NdKSk7YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5OdW1iZXJMaXRlcmFsKHJbc10pKTticmVhaztjYXNlIDQxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLlN0cmluZ0xpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgNDI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5TdHJpbmdXaXRoSW50ZXJwb2xhdGlvbnMocltzLTFdKSk7YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5SZWdleExpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgNDQ6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5SZWdleFdpdGhJbnRlcnBvbGF0aW9ucyhyW3MtMV0uYXJncykpO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uUGFzc3Rocm91Z2hMaXRlcmFsKHJbc10pKTticmVhaztjYXNlIDQ4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLlVuZGVmaW5lZExpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uTnVsbExpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgNTA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uQm9vbGVhbkxpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uSW5maW5pdHlMaXRlcmFsKHJbc10pKTticmVhaztjYXNlIDUyOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLk5hTkxpdGVyYWwocltzXSkpO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5Bc3NpZ24ocltzLTJdLHJbc10pKTticmVhaztjYXNlIDU0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uQXNzaWduKHJbcy0zXSxyW3NdKSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTRdLGxbc10pKG5ldyBvLkFzc2lnbihyW3MtNF0scltzLTFdKSk7YnJlYWs7Y2FzZSA1NjpjYXNlIDExNTpjYXNlIDEyMDpjYXNlIDEyMTpjYXNlIDEyMzpjYXNlIDEyNDpjYXNlIDEyNTpjYXNlIDEyNjpjYXNlIDEyODpjYXNlIDI4MjpjYXNlIDI4Mzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5WYWx1ZShyW3NdKSk7YnJlYWs7Y2FzZSA1ODp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLkFzc2lnbihvLmFkZERhdGFUb05vZGUobyxsW3MtMl0pKG5ldyBvLlZhbHVlKHJbcy0yXSkpLHJbc10sIm9iamVjdCIse29wZXJhdG9yVG9rZW46by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdKShuZXcgby5MaXRlcmFsKHJbcy0xXSkpfSkpO2JyZWFrO2Nhc2UgNTk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy00XSxsW3NdKShuZXcgby5Bc3NpZ24oby5hZGREYXRhVG9Ob2RlKG8sbFtzLTRdKShuZXcgby5WYWx1ZShyW3MtNF0pKSxyW3MtMV0sIm9iamVjdCIse29wZXJhdG9yVG9rZW46by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdKShuZXcgby5MaXRlcmFsKHJbcy0zXSkpfSkpO2JyZWFrO2Nhc2UgNjA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5Bc3NpZ24oby5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdKShuZXcgby5WYWx1ZShyW3MtMl0pKSxyW3NdLG51bGwse29wZXJhdG9yVG9rZW46by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdKShuZXcgby5MaXRlcmFsKHJbcy0xXSkpfSkpO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy00XSxsW3NdKShuZXcgby5Bc3NpZ24oby5hZGREYXRhVG9Ob2RlKG8sbFtzLTRdKShuZXcgby5WYWx1ZShyW3MtNF0pKSxyW3MtMV0sbnVsbCx7b3BlcmF0b3JUb2tlbjpvLmFkZERhdGFUb05vZGUobyxsW3MtM10pKG5ldyBvLkxpdGVyYWwocltzLTNdKSl9KSk7YnJlYWs7Y2FzZSA2NTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLlZhbHVlKG5ldyBvLkNvbXB1dGVkUHJvcGVydHlOYW1lKHJbcy0xXSkpKTticmVhaztjYXNlIDY4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uU3BsYXQobmV3IG8uVmFsdWUocltzLTFdKSkpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5TcGxhdChuZXcgby5WYWx1ZShyW3NdKSkpO2JyZWFrO2Nhc2UgNzA6Y2FzZSAxMTM6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5TcGxhdChyW3MtMV0pKTticmVhaztjYXNlIDcxOmNhc2UgMTE0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uU3BsYXQocltzXSkpO2JyZWFrO2Nhc2UgNzc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5TdXBlckNhbGwoby5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdKShuZXcgby5TdXBlcikscltzXSwhMSxyW3MtMV0pKTticmVhaztjYXNlIDc4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uQ2FsbChuZXcgby5WYWx1ZShyW3MtMV0pLHJbc10pKTticmVhaztjYXNlIDc5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uQ2FsbChyW3MtMV0scltzXSkpO2JyZWFrO2Nhc2UgODA6Y2FzZSA4MTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLlZhbHVlKHJbcy0xXSkuYWRkKHJbc10pKTticmVhaztjYXNlIDgyOmNhc2UgMTMxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uQWNjZXNzKHJbc10pKTticmVhaztjYXNlIDg0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uUmV0dXJuKHJbc10pKTticmVhaztjYXNlIDg1OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uUmV0dXJuKG5ldyBvLlZhbHVlKHJbcy0xXSkpKTticmVhaztjYXNlIDg2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLlJldHVybik7YnJlYWs7Y2FzZSA4Nzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLllpZWxkUmV0dXJuKHJbc10pKTticmVhaztjYXNlIDg4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uWWllbGRSZXR1cm4pO2JyZWFrO2Nhc2UgODk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5Bd2FpdFJldHVybihyW3NdKSk7YnJlYWs7Y2FzZSA5MDp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLkF3YWl0UmV0dXJuKTticmVhaztjYXNlIDkxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uQ29kZShyW3MtM10scltzXSxyW3MtMV0sby5hZGREYXRhVG9Ob2RlKG8sbFtzLTRdKShuZXcgby5MaXRlcmFsKHJbcy00XSkpKSk7YnJlYWs7Y2FzZSA5Mjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLkNvZGUoW10scltzXSxyW3MtMV0pKTticmVhaztjYXNlIDkzOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uQ29kZShyW3MtM10sby5hZGREYXRhVG9Ob2RlKG8sbFtzXSkoby5CbG9jay53cmFwKFtyW3NdXSkpLHJbcy0xXSxvLmFkZERhdGFUb05vZGUobyxsW3MtNF0pKG5ldyBvLkxpdGVyYWwocltzLTRdKSkpKTticmVhaztjYXNlIDk0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uQ29kZShbXSxvLmFkZERhdGFUb05vZGUobyxsW3NdKShvLkJsb2NrLndyYXAoW3Jbc11dKSkscltzLTFdKSk7YnJlYWs7Y2FzZSA5NTpjYXNlIDk2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLkZ1bmNHbHlwaChyW3NdKSk7YnJlYWs7Y2FzZSA5OTpjYXNlIDE0MjpjYXNlIDIzMjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShbXSk7YnJlYWs7Y2FzZSAxMDA6Y2FzZSAxNDM6Y2FzZSAxNjI6Y2FzZSAxODM6Y2FzZSAyMTY6Y2FzZSAyMzA6Y2FzZSAyMzQ6Y2FzZSAyODQ6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkoW3Jbc11dKTticmVhaztjYXNlIDEwMTpjYXNlIDE0NDpjYXNlIDE2MzpjYXNlIDE4NDpjYXNlIDIxNzpjYXNlIDIyNjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKHJbcy0yXS5jb25jYXQocltzXSkpO2JyZWFrO2Nhc2UgMTAyOmNhc2UgMTQ1OmNhc2UgMTY0OmNhc2UgMTg1OmNhc2UgMjE4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkocltzLTNdLmNvbmNhdChyW3NdKSk7YnJlYWs7Y2FzZSAxMDM6Y2FzZSAxNDY6Y2FzZSAxNjY6Y2FzZSAxODc6Y2FzZSAyMjA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy01XSxsW3NdKShyW3MtNV0uY29uY2F0KHJbcy0yXSkpO2JyZWFrO2Nhc2UgMTA0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLlBhcmFtKHJbc10pKTticmVhaztjYXNlIDEwNTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLlBhcmFtKHJbcy0xXSxudWxsLCEwKSk7YnJlYWs7Y2FzZSAxMDY6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5QYXJhbShyW3NdLG51bGwsITApKTticmVhaztjYXNlIDEwNzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLlBhcmFtKHJbcy0yXSxyW3NdKSk7YnJlYWs7Y2FzZSAxMDg6Y2FzZSAyMjQ6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uRXhwYW5zaW9uKTticmVhaztjYXNlIDExNjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKHJbcy0xXS5hZGQocltzXSkpO2JyZWFrO2Nhc2UgMTE3OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uVmFsdWUocltzLTFdKS5hZGQocltzXSkpO2JyZWFrO2Nhc2UgMTI5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uU3VwZXIoby5hZGREYXRhVG9Ob2RlKG8sbFtzXSkobmV3IG8uQWNjZXNzKHJbc10pKSxbXSwhMSxyW3MtMl0pKTticmVhaztjYXNlIDEzMDp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKG5ldyBvLlN1cGVyKG8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSkobmV3IG8uSW5kZXgocltzLTFdKSksW10sITEscltzLTNdKSk7YnJlYWs7Y2FzZSAxMzI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5BY2Nlc3MocltzXSwic29hayIpKTticmVhaztjYXNlIDEzMzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKFtvLmFkZERhdGFUb05vZGUobyxsW3MtMV0pKG5ldyBvLkFjY2VzcyhuZXcgby5Qcm9wZXJ0eU5hbWUoInByb3RvdHlwZSIpKSksby5hZGREYXRhVG9Ob2RlKG8sbFtzXSkobmV3IG8uQWNjZXNzKHJbc10pKV0pO2JyZWFrO2Nhc2UgMTM0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkoW28uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSkobmV3IG8uQWNjZXNzKG5ldyBvLlByb3BlcnR5TmFtZSgicHJvdG90eXBlIiksInNvYWsiKSksby5hZGREYXRhVG9Ob2RlKG8sbFtzXSkobmV3IG8uQWNjZXNzKHJbc10pKV0pO2JyZWFrO2Nhc2UgMTM1OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLkFjY2VzcyhuZXcgby5Qcm9wZXJ0eU5hbWUoInByb3RvdHlwZSIpKSk7YnJlYWs7Y2FzZSAxMzg6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShvLmV4dGVuZChyW3NdLHtzb2FrOiEwfSkpO2JyZWFrO2Nhc2UgMTM5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLkluZGV4KHJbc10pKTticmVhaztjYXNlIDE0MDp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5TbGljZShyW3NdKSk7YnJlYWs7Y2FzZSAxNDE6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0zXSxsW3NdKShuZXcgby5PYmoocltzLTJdLHJbcy0zXS5nZW5lcmF0ZWQpKTticmVhaztjYXNlIDE0Nzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5DbGFzcyk7YnJlYWs7Y2FzZSAxNDg6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5DbGFzcyhudWxsLG51bGwscltzXSkpO2JyZWFrO2Nhc2UgMTQ5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uQ2xhc3MobnVsbCxyW3NdKSk7YnJlYWs7Y2FzZSAxNTA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0zXSxsW3NdKShuZXcgby5DbGFzcyhudWxsLHJbcy0xXSxyW3NdKSk7YnJlYWs7Y2FzZSAxNTE6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5DbGFzcyhyW3NdKSk7YnJlYWs7Y2FzZSAxNTI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5DbGFzcyhyW3MtMV0sbnVsbCxyW3NdKSk7YnJlYWs7Y2FzZSAxNTM6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0zXSxsW3NdKShuZXcgby5DbGFzcyhyW3MtMl0scltzXSkpO2JyZWFrO2Nhc2UgMTU0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uQ2xhc3MocltzLTNdLHJbcy0xXSxyW3NdKSk7YnJlYWs7Y2FzZSAxNTU6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5JbXBvcnREZWNsYXJhdGlvbihudWxsLHJbc10pKTticmVhaztjYXNlIDE1Njp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKG5ldyBvLkltcG9ydERlY2xhcmF0aW9uKG5ldyBvLkltcG9ydENsYXVzZShyW3MtMl0sbnVsbCkscltzXSkpO2JyZWFrO2Nhc2UgMTU3OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uSW1wb3J0RGVjbGFyYXRpb24obmV3IG8uSW1wb3J0Q2xhdXNlKG51bGwscltzLTJdKSxyW3NdKSk7YnJlYWs7Y2FzZSAxNTg6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy00XSxsW3NdKShuZXcgby5JbXBvcnREZWNsYXJhdGlvbihuZXcgby5JbXBvcnRDbGF1c2UobnVsbCxuZXcgby5JbXBvcnRTcGVjaWZpZXJMaXN0KFtdKSkscltzXSkpO2JyZWFrO2Nhc2UgMTU5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNl0sbFtzXSkobmV3IG8uSW1wb3J0RGVjbGFyYXRpb24obmV3IG8uSW1wb3J0Q2xhdXNlKG51bGwsbmV3IG8uSW1wb3J0U3BlY2lmaWVyTGlzdChyW3MtNF0pKSxyW3NdKSk7YnJlYWs7Y2FzZSAxNjA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy01XSxsW3NdKShuZXcgby5JbXBvcnREZWNsYXJhdGlvbihuZXcgby5JbXBvcnRDbGF1c2UocltzLTRdLHJbcy0yXSkscltzXSkpO2JyZWFrO2Nhc2UgMTYxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtOF0sbFtzXSkobmV3IG8uSW1wb3J0RGVjbGFyYXRpb24obmV3IG8uSW1wb3J0Q2xhdXNlKHJbcy03XSxuZXcgby5JbXBvcnRTcGVjaWZpZXJMaXN0KHJbcy00XSkpLHJbc10pKTticmVhaztjYXNlIDE2NTpjYXNlIDE4NjpjYXNlIDE5OTpjYXNlIDIxOTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKHJbcy0yXSk7YnJlYWs7Y2FzZSAxNjc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uSW1wb3J0U3BlY2lmaWVyKHJbc10pKTticmVhaztjYXNlIDE2ODp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLkltcG9ydFNwZWNpZmllcihyW3MtMl0scltzXSkpO2JyZWFrO2Nhc2UgMTY5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLkltcG9ydFNwZWNpZmllcihuZXcgby5MaXRlcmFsKHJbc10pKSk7YnJlYWs7Y2FzZSAxNzA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5JbXBvcnRTcGVjaWZpZXIobmV3IG8uTGl0ZXJhbChyW3MtMl0pLHJbc10pKTticmVhaztjYXNlIDE3MTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKShuZXcgby5JbXBvcnREZWZhdWx0U3BlY2lmaWVyKHJbc10pKTticmVhaztjYXNlIDE3Mjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihuZXcgby5MaXRlcmFsKHJbcy0yXSkscltzXSkpO2JyZWFrO2Nhc2UgMTczOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuZXcgby5FeHBvcnRTcGVjaWZpZXJMaXN0KFtdKSkpO2JyZWFrO2Nhc2UgMTc0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuZXcgby5FeHBvcnRTcGVjaWZpZXJMaXN0KHJbcy0yXSkpKTticmVhaztjYXNlIDE3NTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24ocltzXSkpO2JyZWFrO2Nhc2UgMTc2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuZXcgby5Bc3NpZ24ocltzLTJdLHJbc10sbnVsbCx7bW9kdWxlRGVjbGFyYXRpb246ImV4cG9ydCJ9KSkpO2JyZWFrO2Nhc2UgMTc3OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuZXcgby5Bc3NpZ24ocltzLTNdLHJbc10sbnVsbCx7bW9kdWxlRGVjbGFyYXRpb246ImV4cG9ydCJ9KSkpO2JyZWFrO2Nhc2UgMTc4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNV0sbFtzXSkobmV3IG8uRXhwb3J0TmFtZWREZWNsYXJhdGlvbihuZXcgby5Bc3NpZ24ocltzLTRdLHJbcy0xXSxudWxsLHttb2R1bGVEZWNsYXJhdGlvbjoiZXhwb3J0In0pKSk7YnJlYWs7Y2FzZSAxNzk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb24ocltzXSkpO2JyZWFrO2Nhc2UgMTgwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uKG5ldyBvLlZhbHVlKHJbcy0xXSkpKTticmVhaztjYXNlIDE4MTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKG5ldyBvLkV4cG9ydEFsbERlY2xhcmF0aW9uKG5ldyBvLkxpdGVyYWwocltzLTJdKSxyW3NdKSk7YnJlYWs7Y2FzZSAxODI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy02XSxsW3NdKShuZXcgby5FeHBvcnROYW1lZERlY2xhcmF0aW9uKG5ldyBvLkV4cG9ydFNwZWNpZmllckxpc3QocltzLTRdKSxyW3NdKSk7YnJlYWs7Y2FzZSAxODg6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uRXhwb3J0U3BlY2lmaWVyKHJbc10pKTticmVhaztjYXNlIDE4OTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLkV4cG9ydFNwZWNpZmllcihyW3MtMl0scltzXSkpO2JyZWFrO2Nhc2UgMTkwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uRXhwb3J0U3BlY2lmaWVyKHJbcy0yXSxuZXcgby5MaXRlcmFsKHJbc10pKSk7YnJlYWs7Y2FzZSAxOTE6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uRXhwb3J0U3BlY2lmaWVyKG5ldyBvLkxpdGVyYWwocltzXSkpKTticmVhaztjYXNlIDE5Mjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLkV4cG9ydFNwZWNpZmllcihuZXcgby5MaXRlcmFsKHJbcy0yXSkscltzXSkpO2JyZWFrO2Nhc2UgMTkzOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uVGFnZ2VkVGVtcGxhdGVDYWxsKHJbcy0yXSxyW3NdLHJbcy0xXSkpO2JyZWFrO2Nhc2UgMTk0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uQ2FsbChyW3MtMl0scltzXSxyW3MtMV0pKTticmVhaztjYXNlIDE5NTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLlN1cGVyQ2FsbChvLmFkZERhdGFUb05vZGUobyxsW3MtMl0pKG5ldyBvLlN1cGVyKSxyW3NdLHJbcy0xXSxyW3MtMl0pKTticmVhaztjYXNlIDE5Njp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKSghMSk7YnJlYWs7Y2FzZSAxOTc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkoITApO2JyZWFrO2Nhc2UgMTk4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkoW10pO2JyZWFrO2Nhc2UgMjAwOmNhc2UgMjAxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKG5ldyBvLlZhbHVlKG5ldyBvLlRoaXNMaXRlcmFsKHJbc10pKSk7YnJlYWs7Y2FzZSAyMDI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5WYWx1ZShvLmFkZERhdGFUb05vZGUobyxsW3MtMV0pKG5ldyBvLlRoaXNMaXRlcmFsKHJbcy0xXSkpLFtvLmFkZERhdGFUb05vZGUobyxsW3NdKShuZXcgby5BY2Nlc3MocltzXSkpXSwidGhpcyIpKTticmVhaztjYXNlIDIwMzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLkFycihbXSkpO2JyZWFrO2Nhc2UgMjA0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uQXJyKHJbcy0xXSkpO2JyZWFrO2Nhc2UgMjA1OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uQXJyKFtdLmNvbmNhdChyW3MtMl0scltzLTFdKSkpO2JyZWFrO2Nhc2UgMjA2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3NdLGxbc10pKCJpbmNsdXNpdmUiKTticmVhaztjYXNlIDIwNzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzXSxsW3NdKSgiZXhjbHVzaXZlIik7YnJlYWs7Y2FzZSAyMDg6Y2FzZSAyMDk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy00XSxsW3NdKShuZXcgby5SYW5nZShyW3MtM10scltzLTFdLHJbcy0yXSkpO2JyZWFrO2Nhc2UgMjEwOmNhc2UgMjEyOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uUmFuZ2UocltzLTJdLHJbc10scltzLTFdKSk7YnJlYWs7Y2FzZSAyMTE6Y2FzZSAyMTM6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5SYW5nZShyW3MtMV0sbnVsbCxyW3NdKSk7YnJlYWs7Y2FzZSAyMTQ6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5SYW5nZShudWxsLHJbc10scltzLTFdKSk7YnJlYWs7Y2FzZSAyMTU6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uUmFuZ2UobnVsbCxudWxsLHJbc10pKTticmVhaztjYXNlIDIyNzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKHJbcy0zXS5jb25jYXQocltzLTJdLHJbc10pKTticmVhaztjYXNlIDIyODp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKHJbcy0yXS5jb25jYXQocltzLTFdKSk7YnJlYWs7Y2FzZSAyMjk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy01XSxsW3NdKShyW3MtNV0uY29uY2F0KHJbcy00XSxyW3MtMl0scltzLTFdKSk7YnJlYWs7Y2FzZSAyMzE6Y2FzZSAyMzU6Y2FzZSAzMzE6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShyW3MtMV0uY29uY2F0KHJbc10pKTticmVhaztjYXNlIDIzMzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKFtdLmNvbmNhdChyW3NdKSk7YnJlYWs7Y2FzZSAyMzY6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkobmV3IG8uRWxpc2lvbik7YnJlYWs7Y2FzZSAyMzk6Y2FzZSAyNDA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShbXS5jb25jYXQocltzLTJdLHJbc10pKTticmVhaztjYXNlIDI0MTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLlRyeShyW3NdKSk7YnJlYWs7Y2FzZSAyNDI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5UcnkocltzLTFdLHJbc11bMF0scltzXVsxXSkpO2JyZWFrO2Nhc2UgMjQzOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uVHJ5KHJbcy0yXSxudWxsLG51bGwscltzXSkpO2JyZWFrO2Nhc2UgMjQ0OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uVHJ5KHJbcy0zXSxyW3MtMl1bMF0scltzLTJdWzFdLHJbc10pKTticmVhaztjYXNlIDI0NTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKFtyW3MtMV0scltzXV0pO2JyZWFrO2Nhc2UgMjQ2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkoW28uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSkobmV3IG8uVmFsdWUocltzLTFdKSkscltzXV0pO2JyZWFrO2Nhc2UgMjQ3OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkoW251bGwscltzXV0pO2JyZWFrO2Nhc2UgMjQ4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uVGhyb3cocltzXSkpO2JyZWFrO2Nhc2UgMjQ5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uVGhyb3cobmV3IG8uVmFsdWUocltzLTFdKSkpO2JyZWFrO2Nhc2UgMjUwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uUGFyZW5zKHJbcy0xXSkpO2JyZWFrO2Nhc2UgMjUxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uUGFyZW5zKHJbcy0yXSkpO2JyZWFrO2Nhc2UgMjUyOmNhc2UgMjU2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uV2hpbGUocltzXSkpO2JyZWFrO2Nhc2UgMjUzOmNhc2UgMjU3OmNhc2UgMjU4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uV2hpbGUocltzLTJdLHtndWFyZDpyW3NdfSkpO2JyZWFrO2Nhc2UgMjU0OmNhc2UgMjU5OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uV2hpbGUocltzXSx7aW52ZXJ0OiEwfSkpO2JyZWFrO2Nhc2UgMjU1OmNhc2UgMjYwOmNhc2UgMjYxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uV2hpbGUocltzLTJdLHtpbnZlcnQ6ITAsZ3VhcmQ6cltzXX0pKTticmVhaztjYXNlIDI2MjpjYXNlIDI2Mzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKHJbcy0xXS5hZGRCb2R5KHJbc10pKTticmVhaztjYXNlIDI2NDpjYXNlIDI2NTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKHJbc10uYWRkQm9keShvLmFkZERhdGFUb05vZGUobyxsW3MtMV0pKG8uQmxvY2sud3JhcChbcltzLTFdXSkpKSk7YnJlYWs7Y2FzZSAyNjY6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbc10sbFtzXSkocltzXSk7YnJlYWs7Y2FzZSAyNjc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5XaGlsZShvLmFkZERhdGFUb05vZGUobyxsW3MtMV0pKG5ldyBvLkJvb2xlYW5MaXRlcmFsKCJ0cnVlIikpKS5hZGRCb2R5KHJbc10pKTticmVhaztjYXNlIDI2ODp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLldoaWxlKG8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSkobmV3IG8uQm9vbGVhbkxpdGVyYWwoInRydWUiKSkpLmFkZEJvZHkoby5hZGREYXRhVG9Ob2RlKG8sbFtzXSkoby5CbG9jay53cmFwKFtyW3NdXSkpKSk7YnJlYWs7Y2FzZSAyNjk6Y2FzZSAyNzA6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5Gb3IocltzLTFdLHJbc10pKTticmVhaztjYXNlIDI3MTpjYXNlIDI3Mjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLkZvcihyW3NdLHJbcy0xXSkpO2JyZWFrO2Nhc2UgMjczOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkoe3NvdXJjZTpvLmFkZERhdGFUb05vZGUobyxsW3NdKShuZXcgby5WYWx1ZShyW3NdKSl9KTticmVhaztjYXNlIDI3NDpjYXNlIDI3Njp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKHtzb3VyY2U6by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdKShuZXcgby5WYWx1ZShyW3MtMl0pKSxzdGVwOnJbc119KTticmVhaztjYXNlIDI3NTpjYXNlIDI3Nzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKGZ1bmN0aW9uKCl7cmV0dXJuIHJbc10ub3duPXJbcy0xXS5vd24scltzXS5vd25UYWc9cltzLTFdLm93blRhZyxyW3NdLm5hbWU9cltzLTFdWzBdLHJbc10uaW5kZXg9cltzLTFdWzFdLHJbc119KCkpO2JyZWFrO2Nhc2UgMjc4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkocltzXSk7YnJlYWs7Y2FzZSAyNzk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShmdW5jdGlvbigpe3JldHVybiByW3NdLm93bj0hMCxyW3NdLm93blRhZz1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0pKG5ldyBvLkxpdGVyYWwocltzLTFdKSkscltzXX0oKSk7YnJlYWs7Y2FzZSAyODU6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShbcltzLTJdLHJbc11dKTticmVhaztjYXNlIDI4NjpjYXNlIDMwNTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKHtzb3VyY2U6cltzXX0pO2JyZWFrO2Nhc2UgMjg3OmNhc2UgMzA2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkoe3NvdXJjZTpyW3NdLG9iamVjdDohMH0pO2JyZWFrO2Nhc2UgMjg4OmNhc2UgMjg5OmNhc2UgMzA3OmNhc2UgMzA4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkoe3NvdXJjZTpyW3MtMl0sZ3VhcmQ6cltzXX0pO2JyZWFrO2Nhc2UgMjkwOmNhc2UgMjkxOmNhc2UgMzA5OmNhc2UgMzEwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkoe3NvdXJjZTpyW3MtMl0sZ3VhcmQ6cltzXSxvYmplY3Q6ITB9KTticmVhaztjYXNlIDI5MjpjYXNlIDI5MzpjYXNlIDMxMTpjYXNlIDMxMjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKHtzb3VyY2U6cltzLTJdLHN0ZXA6cltzXX0pO2JyZWFrO2Nhc2UgMjk0OmNhc2UgMjk1OmNhc2UgMjk2OmNhc2UgMjk3OmNhc2UgMzEzOmNhc2UgMzE0OmNhc2UgMzE1OmNhc2UgMzE2OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNV0sbFtzXSkoe3NvdXJjZTpyW3MtNF0sZ3VhcmQ6cltzLTJdLHN0ZXA6cltzXX0pO2JyZWFrO2Nhc2UgMjk4OmNhc2UgMjk5OmNhc2UgMzAwOmNhc2UgMzAxOmNhc2UgMzE3OmNhc2UgMzE4OmNhc2UgMzE5OmNhc2UgMzIwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNV0sbFtzXSkoe3NvdXJjZTpyW3MtNF0sc3RlcDpyW3MtMl0sZ3VhcmQ6cltzXX0pO2JyZWFrO2Nhc2UgMzAyOmNhc2UgMzIxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkoe3NvdXJjZTpyW3NdLGZyb206ITB9KTticmVhaztjYXNlIDMwMzpjYXNlIDMwNDpjYXNlIDMyMjpjYXNlIDMyMzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTNdLGxbc10pKHtzb3VyY2U6cltzLTJdLGd1YXJkOnJbc10sZnJvbTohMH0pO2JyZWFrO2Nhc2UgMzI0OmNhc2UgMzI1OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkobmV3IG8uU3dpdGNoKHJbcy0zXSxyW3MtMV0pKTticmVhaztjYXNlIDMyNjpjYXNlIDMyNzp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTZdLGxbc10pKG5ldyBvLlN3aXRjaChyW3MtNV0scltzLTNdLHJbcy0xXSkpO2JyZWFrO2Nhc2UgMzI4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uU3dpdGNoKG51bGwscltzLTFdKSk7YnJlYWs7Y2FzZSAzMjk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy01XSxsW3NdKShuZXcgby5Td2l0Y2gobnVsbCxyW3MtM10scltzLTFdKSk7YnJlYWs7Y2FzZSAzMzI6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShbW3Jbcy0xXSxyW3NdXV0pO2JyZWFrO2Nhc2UgMzMzOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkoW1tyW3MtMl0scltzLTFdXV0pO2JyZWFrO2Nhc2UgMzM0OmNhc2UgMzQwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uSWYocltzLTFdLHJbc10se3R5cGU6cltzLTJdfSkpO2JyZWFrO2Nhc2UgMzM1OmNhc2UgMzQxOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtNF0sbFtzXSkocltzLTRdLmFkZEVsc2Uoby5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLklmKHJbcy0xXSxyW3NdLHt0eXBlOnJbcy0yXX0pKSkpO2JyZWFrO2Nhc2UgMzM3OmNhc2UgMzQzOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkocltzLTJdLmFkZEVsc2UocltzXSkpO2JyZWFrO2Nhc2UgMzM4OmNhc2UgMzM5OmNhc2UgMzQ0OmNhc2UgMzQ1OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uSWYocltzXSxvLmFkZERhdGFUb05vZGUobyxsW3MtMl0pKG8uQmxvY2sud3JhcChbcltzLTJdXSkpLHt0eXBlOnJbcy0xXSxzdGF0ZW1lbnQ6ITB9KSk7YnJlYWs7Y2FzZSAzNDk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5PcCgiLSIscltzXSkpO2JyZWFrO2Nhc2UgMzUwOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uT3AoIisiLHJbc10pKTticmVhaztjYXNlIDM1Mjp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTFdLGxbc10pKG5ldyBvLk9wKCItLSIscltzXSkpO2JyZWFrO2Nhc2UgMzUzOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMV0sbFtzXSkobmV3IG8uT3AoIisrIixyW3NdKSk7YnJlYWs7Y2FzZSAzNTQ6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5PcCgiLS0iLHJbcy0xXSxudWxsLCEwKSk7YnJlYWs7Y2FzZSAzNTU6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5PcCgiKysiLHJbcy0xXSxudWxsLCEwKSk7YnJlYWs7Y2FzZSAzNTY6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0xXSxsW3NdKShuZXcgby5FeGlzdGVuY2UocltzLTFdKSk7YnJlYWs7Y2FzZSAzNTc6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShuZXcgby5PcCgiKyIscltzLTJdLHJbc10pKTticmVhaztjYXNlIDM1ODp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLk9wKCItIixyW3MtMl0scltzXSkpO2JyZWFrO2Nhc2UgMzU5OmNhc2UgMzYwOmNhc2UgMzYxOmNhc2UgMzYyOmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY1OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtMl0sbFtzXSkobmV3IG8uT3AocltzLTFdLHJbcy0yXSxyW3NdKSk7YnJlYWs7Y2FzZSAzNjk6dGhpcy4kPW8uYWRkRGF0YVRvTm9kZShvLGxbcy0yXSxsW3NdKShmdW5jdGlvbigpe3JldHVybiIhIj09PXJbcy0xXS5jaGFyQXQoMCk/bmV3IG8uT3AocltzLTFdLnNsaWNlKDEpLHJbcy0yXSxyW3NdKS5pbnZlcnQoKTpuZXcgby5PcChyW3MtMV0scltzLTJdLHJbc10pfSgpKTticmVhaztjYXNlIDM3MDp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTJdLGxbc10pKG5ldyBvLkFzc2lnbihyW3MtMl0scltzXSxyW3MtMV0pKTticmVhaztjYXNlIDM3MTp0aGlzLiQ9by5hZGREYXRhVG9Ob2RlKG8sbFtzLTRdLGxbc10pKG5ldyBvLkFzc2lnbihyW3MtNF0scltzLTFdLHJbcy0zXSkpO2JyZWFrO2Nhc2UgMzcyOnRoaXMuJD1vLmFkZERhdGFUb05vZGUobyxsW3MtM10sbFtzXSkobmV3IG8uQXNzaWduKHJbcy0zXSxyW3NdLHJbcy0yXSkpfX0sdGFibGU6W3sxOlsyLDFdLDM6MSw0OjIsNTozLDc6NCw4OjUsOTo2LDEwOjcsMTE6MjcsMTI6MjgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6bywzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok4sODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHsxOlszXX0sezE6WzIsMl0sNjpXfSxhKFgsWzIsM10pLGEoWSxbMiw2XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ4OnEsMTUwOnosMTU2OkosMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKFksWzIsN10pLGEoWSxbMiw4XSx7MTU4OjExNiwxNTE6MTE4LDE1NDoxMTksMTQ4OnEsMTUwOnosMTU2OkosMTc0OnVlfSksYShZLFsyLDldKSxhKG1lLFsyLDE2XSx7MTI0OjEyMCw5OToxMjEsMTA0OjEyNyw0NTpoZSw0NjpoZSwxMjY6aGUsODA6Z2UsODE6ZmUsMTAxOnllLDEwMjprZSwxMDM6VGUsMTA1Ok5lLDEyNTp2ZX0pLGEobWUsWzIsMTddLHsxMDQ6MTI3LDk5OjEzMCw4MDpnZSw4MTpmZSwxMDE6eWUsMTAyOmtlLDEwMzpUZSwxMDU6TmV9KSxhKG1lLFsyLDE4XSksYShtZSxbMiwxOV0pLGEobWUsWzIsMjBdKSxhKG1lLFsyLDIxXSksYShtZSxbMiwyMl0pLGEobWUsWzIsMjNdKSxhKG1lLFsyLDI0XSksYShtZSxbMiwyNV0pLGEobWUsWzIsMjZdKSxhKG1lLFsyLDI3XSksYShZLFsyLDI4XSksYShZLFsyLDI5XSksYShZLFsyLDMwXSksYShiZSxbMiwxMl0pLGEoYmUsWzIsMTNdKSxhKGJlLFsyLDE0XSksYShiZSxbMiwxNV0pLGEoWSxbMiwxMF0pLGEoWSxbMiwxMV0pLGEoJGUsX2UsezYxOlsxLDEzMV19KSxhKCRlLFsyLDEyM10pLGEoJGUsWzIsMTI0XSksYSgkZSxbMiwxMjVdKSxhKCRlLENlKSxhKCRlLFsyLDEyN10pLGEoJGUsWzIsMTI4XSksYShEZSxFZSx7ODc6MTMyLDk0OjEzMyw5NToxMzQsMzc6MTM2LDY3OjEzNyw5NjoxMzgsNzM6MTM5LDM4Om4sMzk6ciw2ODp4ZSw3MDpJZSwxMDc6XywxMzA6U2V9KSx7NToxNDMsNzo0LDg6NSw5OjYsMTA6NywxMToyNywxMjoyOCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpvLDM0OjE0MiwzNTpBZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok4sODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjE0NSw4OjE0Niw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoxNTAsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MTU2LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjE1Nyw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoxNTgsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6WzEsMTU5XSw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezE3OjE2MSwxODoxNjIsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoxNjMsNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6MTYwLDEwMDozMiwxMDc6XywxMjk6eCwxMzA6SSwxNDU6Un0sezE3OjE2MSwxODoxNjIsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoxNjMsNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6MTY0LDEwMDozMiwxMDc6XywxMjk6eCwxMzA6SSwxNDU6Un0sYShQZSxqZSx7MTgwOlsxLDE2NV0sMTgxOlsxLDE2Nl0sMTk0OlsxLDE2N119KSxhKG1lLFsyLDMzNl0sezE2OTpbMSwxNjhdfSksezM0OjE2OSwzNTpBZX0sezM0OjE3MCwzNTpBZX0sezM0OjE3MSwzNTpBZX0sYShtZSxbMiwyNjZdKSx7MzQ6MTcyLDM1OkFlfSx7MzQ6MTczLDM1OkFlfSx7NzoxNzQsODoxNzUsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzU6WzEsMTc2XSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKE1lLFsyLDE0N10sezUzOjMwLDc0OjMxLDEwMDozMiw1MTozMyw3NjozNCw3NTozNSw5Njo2MSw3Mzo2Miw0Mjo2Myw0ODo2NSwzNzo3OCw2Nzo3OSw0NDo4OCw4OToxNTIsMTc6MTYxLDE4OjE2Miw2MDoxNjMsMzQ6MTc3LDk4OjE3OSwzNTpBZSwzODpuLDM5OnIsNDM6bCw0NTpzLDQ2OmksNDk6ZCw1MDpjLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDY4OnksNzc6ayw4NjpMZSw5MDpiLDkxOiQsMTA3Ol8sMTExOlsxLDE3OF0sMTI5OngsMTMwOkksMTQ1OlJ9KSx7NzoxODAsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzU6WzEsMTgxXSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFsxLDYsMzUsMzYsNDcsNjksNzAsOTMsMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTNdLFVlLHsxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMTM6MjMsMTU6MjUsMTY6MjYsNjA6MjksNTM6MzAsNzQ6MzEsMTAwOjMyLDUxOjMzLDc2OjM0LDc1OjM1LDk4OjQ1LDE3Mjo0NiwxNTE6NDgsMTQ3OjQ5LDE1Mjo1MCwxNTQ6NTEsMTU1OjUyLDk2OjYxLDczOjYyLDQyOjYzLDQ4OjY1LDM3Ojc4LDY3Ojc5LDE1ODo4NSw0NDo4OCw4OToxNTIsOToxNTQsNzoxODIsMTQ6dCwzMjpSZSwzMzpWZSwzODpuLDM5OnIsNDM6bCw0NTpzLDQ2OmksNDk6ZCw1MDpjLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDY4OnksNzc6ayw4NDpbMSwxODRdLDg1Ok9lLDg2OkxlLDkwOmIsOTE6JCwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNTM6RiwxNjc6UCwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSksYShZLFsyLDM0Ml0sezE2OTpbMSwxODVdfSksYShbMSw2LDM2LDQ3LDY5LDcwLDkzLDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0XSxCZSx7MTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDEzOjIzLDE1OjI1LDE2OjI2LDYwOjI5LDUzOjMwLDc0OjMxLDEwMDozMiw1MTozMyw3NjozNCw3NTozNSw5ODo0NSwxNzI6NDYsMTUxOjQ4LDE0Nzo0OSwxNTI6NTAsMTU0OjUxLDE1NTo1Miw5Njo2MSw3Mzo2Miw0Mjo2Myw0ODo2NSwzNzo3OCw2Nzo3OSwxNTg6ODUsNDQ6ODgsODk6MTUyLDk6MTU0LDc6MTg2LDE0OnQsMzI6UmUsMzU6R2UsMzg6biwzOTpyLDQzOmwsNDU6cyw0NjppLDQ5OmQsNTA6Yyw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2ODp5LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw5MDpiLDkxOiQsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTUzOkYsMTY3OlAsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0pLHszNzoxOTIsMzg6biwzOTpyLDQ0OjE4OCw0NTpzLDQ2OmksMTA3OlsxLDE5MV0sMTEzOjE4OSwxMTQ6MTkwLDExOTpIZX0sezI2OjE5NSwzNzoxOTYsMzg6biwzOTpyLDEwNzpbMSwxOTRdLDExMDpDLDExODpbMSwxOTddLDEyMjpbMSwxOThdfSxhKFBlLFsyLDEyMF0pLGEoUGUsWzIsMTIxXSksYSgkZSxbMiw0NV0pLGEoJGUsWzIsNDZdKSxhKCRlLFsyLDQ3XSksYSgkZSxbMiw0OF0pLGEoJGUsWzIsNDldKSxhKCRlLFsyLDUwXSksYSgkZSxbMiw1MV0pLGEoJGUsWzIsNTJdKSx7NDoxOTksNTozLDc6NCw4OjUsOTo2LDEwOjcsMTE6MjcsMTI6MjgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6bywzNTpbMSwyMDBdLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6Tiw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MjAxLDg6MjAyLDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM1OldlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw2OTpYZSw3MDpZZSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTM6cWUsOTY6NjEsOTc6MjExLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxMzE6MjA0LDEzMjoyMDUsMTM2OjIxMCwxMzc6MjA3LDEzODoyMDYsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezgwOnplLDgxOkplLDEyNDoyMTMsMTI1OnZlLDEyNjpoZX0sYSgkZSxbMiwyMDBdKSxhKCRlLFsyLDIwMV0sezQwOjIxNiw0MTpLZX0pLGEoWmUsWzIsOTVdKSxhKFplLFsyLDk2XSksYShRZSxbMiwxMTVdKSxhKFFlLFsyLDExOF0pLHs3OjIxOCw4OjIxOSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyMjAsODoyMjEsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MjIyLDg6MjIzLDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjIyNSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNDoyMjQsMzU6QWUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezM3OjIzMCwzODpuLDM5OnIsNjc6MjMxLDY4OnksNzM6MjMzLDk2OjIzMiwxMDA6MjI2LDEwNzpfLDEzMDpTZSwxNjE6MjI3LDE2MjplYSwxNjM6MjI5fSx7MTU5OjIzNCwxNjA6MjM1LDE2NDpbMSwyMzZdLDE2NTpbMSwyMzddLDE2NjpbMSwyMzhdfSxhKFs2LDM1LDkzLDEwOV0sYWEsezQ0Ojg4LDEwODoyMzksNjI6MjQwLDYzOjI0MSw2NDoyNDIsNjY6MjQzLDQyOjI0NCw3MToyNDYsMzc6MjQ3LDQwOjI0OCw2NzoyNDksNzI6MjUxLDczOjI1Miw3NDoyNTMsNzU6MjU0LDc2OjI1NSwzODpuLDM5OnIsNDE6S2UsNDM6bCw0NTpzLDQ2OmksNjg6dGEsNzA6b2EsNzc6bmEsMTA3Ol8sMTI5OngsMTMwOkksMTQ1OlJ9KSxhKHJhLFsyLDM5XSksYShyYSxbMiw0MF0pLGEoJGUsWzIsNDNdKSx7MTc6MTYxLDE4OjE2MiwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjI1Nyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoxNjMsNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6MjU4LDEwMDozMiwxMDc6XywxMjk6eCwxMzA6SSwxNDU6Un0sYShsYSxbMiwzNl0pLGEobGEsWzIsMzddKSxhKHNhLFsyLDQxXSksezQ6MjU5LDU6Myw3OjQsODo1LDk6NiwxMDo3LDExOjI3LDEyOjI4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOm8sMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpOLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFgsWzIsNV0sezc6NCw4OjUsOTo2LDEwOjcsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDEzOjIzLDE1OjI1LDE2OjI2LDExOjI3LDEyOjI4LDYwOjI5LDUzOjMwLDc0OjMxLDEwMDozMiw1MTozMyw3NjozNCw3NTozNSw4OTozNyw5ODo0NSwxNzI6NDYsMTUxOjQ4LDE0Nzo0OSwxNTI6NTAsMTU0OjUxLDE1NTo1MiwxNzU6NTcsOTY6NjEsNzM6NjIsNDI6NjMsNDg6NjUsMzc6NzgsNjc6NzksMTU4Ojg1LDQ0Ojg4LDU6MjYwLDE0OnQsMzI6bywzODpuLDM5OnIsNDM6bCw0NTpzLDQ2OmksNDk6ZCw1MDpjLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDY4OnksNzc6ayw4NDpULDg1Ok4sODY6diw5MDpiLDkxOiQsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ4Ok8sMTUwOkwsMTUzOkYsMTU2OncsMTY3OlAsMTczOmosMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9KSxhKG1lLFsyLDM1Nl0pLHs3OjI2MSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyNjIsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MjYzLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjI2NCw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyNjUsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MjY2LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjI2Nyw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyNjgsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MjY5LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjI3MCw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyNzEsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MjcyLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjI3Myw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyNzQsODoyNzUsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShtZSxbMiwyNjVdKSxhKG1lLFsyLDI3MF0pLHs3OjIyMCw4OjI3Niw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzoyMjIsODoyNzcsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezM3OjIzMCwzODpuLDM5OnIsNjc6MjMxLDY4OnksNzM6MjMzLDk2OjIzMiwxMDA6Mjc4LDEwNzpfLDEzMDpTZSwxNjE6MjI3LDE2MjplYSwxNjM6MjI5fSx7MTU5OjIzNCwxNjQ6WzEsMjc5XSwxNjU6WzEsMjgwXSwxNjY6WzEsMjgxXX0sezc6MjgyLDg6MjgzLDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEobWUsWzIsMjY0XSksYShtZSxbMiwyNjldKSx7NDQ6Mjg0LDQ1OnMsNDY6aSw3ODoyODUsMTI2OmlhfSxhKFFlLFsyLDExNl0pLGEoZGEsWzIsMTk3XSksezQwOjI4Nyw0MTpLZX0sezQwOjI4OCw0MTpLZX0sYShRZSxbMiwxMzVdLHs0MDoyODksNDE6S2V9KSx7NDA6MjkwLDQxOktlfSxhKFFlLFsyLDEzNl0pLHs3OjI5Miw4OjI5NCw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzA6Y2EsNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4MjoyOTEsODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA2OjI5MywxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxMzQ6Mjk1LDEzNTpwYSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7ODE6ZmUsMTA0OjI5OCwxMDU6TmV9LGEoUWUsWzIsMTE3XSksezY6WzEsMzAwXSw3OjI5OSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNTpbMSwzMDFdLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEodWEsbWEsezkyOjMwNCw4ODpbMSwzMDJdLDkzOmhhfSksYShnYSxbMiwxMDBdKSxhKGdhLFsyLDEwNF0sezYxOlsxLDMwNl0sNzA6WzEsMzA1XX0pLGEoZ2EsWzIsMTA4XSx7Mzc6MTM2LDY3OjEzNyw5NjoxMzgsNzM6MTM5LDk1OjMwNywzODpuLDM5OnIsNjg6eGUsMTA3Ol8sMTMwOlNlfSksYShmYSxbMiwxMDldKSxhKGZhLFsyLDExMF0pLGEoZmEsWzIsMTExXSksYShmYSxbMiwxMTJdKSx7NDA6MjE2LDQxOktlfSx7NzozMDgsODozMDksOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzU6V2UsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDY5OlhlLDcwOlllLDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5MzpxZSw5Njo2MSw5NzoyMTEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDEzMToyMDQsMTMyOjIwNSwxMzY6MjEwLDEzNzoyMDcsMTM4OjIwNiwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKHlhLFsyLDkyXSksYShZLFsyLDk0XSksezQ6MzExLDU6Myw3OjQsODo1LDk6NiwxMDo3LDExOjI3LDEyOjI4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOm8sMzY6WzEsMzEwXSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok4sODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoa2EsVGEsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZX0pLGEoWSxbMiwzNDZdKSx7NzoxNTgsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezE0ODpxLDE1MDp6LDE1MToxMTgsMTU0OjExOSwxNTY6SiwxNTg6MTE2LDE3NDp1ZX0sYShbMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5M10sVWUsezE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwxMzoyMywxNToyNSwxNjoyNiw2MDoyOSw1MzozMCw3NDozMSwxMDA6MzIsNTE6MzMsNzY6MzQsNzU6MzUsOTg6NDUsMTcyOjQ2LDE1MTo0OCwxNDc6NDksMTUyOjUwLDE1NDo1MSwxNTU6NTIsOTY6NjEsNzM6NjIsNDI6NjMsNDg6NjUsMzc6NzgsNjc6NzksMTU4Ojg1LDQ0Ojg4LDg5OjE1Miw5OjE1NCw3OjE4MiwxNDp0LDMyOlJlLDMzOlZlLDM4Om4sMzk6ciw0MzpsLDQ1OnMsNDY6aSw0OTpkLDUwOmMsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjg6eSw3NzprLDg0OlQsODU6T2UsODY6TGUsOTA6Yiw5MTokLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE1MzpGLDE2NzpQLDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9KSxhKE5hLFsyLDM0OF0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZSwxODQ6dGV9KSxhKERlLEVlLHs5NDoxMzMsOTU6MTM0LDM3OjEzNiw2NzoxMzcsOTY6MTM4LDczOjEzOSw4NzozMTMsMzg6biwzOTpyLDY4OnhlLDcwOkllLDEwNzpfLDEzMDpTZX0pLHszNDoxNDIsMzU6QWV9LHs3OjMxNCw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7MTQ4OnEsMTUwOnosMTUxOjExOCwxNTQ6MTE5LDE1NjpKLDE1ODoxMTYsMTc0OlsxLDMxNV19LHs3OjMxNiw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKE5hLFsyLDM0OV0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZSwxODQ6dGV9KSxhKE5hLFsyLDM1MF0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZSwxODQ6dGV9KSxhKGthLFsyLDM1MV0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZX0pLGEoWSxbMiw5MF0sezE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwxMzoyMywxNToyNSwxNjoyNiw2MDoyOSw1MzozMCw3NDozMSwxMDA6MzIsNTE6MzMsNzY6MzQsNzU6MzUsOTg6NDUsMTcyOjQ2LDE1MTo0OCwxNDc6NDksMTUyOjUwLDE1NDo1MSwxNTU6NTIsOTY6NjEsNzM6NjIsNDI6NjMsNDg6NjUsMzc6NzgsNjc6NzksMTU4Ojg1LDQ0Ojg4LDg5OjE1Miw5OjE1NCw3OjMxNywxNDp0LDMyOlJlLDM4Om4sMzk6ciw0MzpsLDQ1OnMsNDY6aSw0OTpkLDUwOmMsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjg6eSw3NzprLDg0OlQsODU6T2UsODY6TGUsOTA6Yiw5MTokLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0ODpCZSwxNTA6QmUsMTU2OkJlLDE3NDpCZSwxNTM6RiwxNjc6UCwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSksYShtZSxbMiwzNTJdLHs0NTpqZSw0NjpqZSw4MDpqZSw4MTpqZSwxMDE6amUsMTAyOmplLDEwMzpqZSwxMDU6amUsMTI1OmplLDEyNjpqZX0pLGEoZGEsaGUsezEyNDoxMjAsOTk6MTIxLDEwNDoxMjcsODA6Z2UsODE6ZmUsMTAxOnllLDEwMjprZSwxMDM6VGUsMTA1Ok5lLDEyNTp2ZX0pLHs4MDpnZSw4MTpmZSw5OToxMzAsMTAxOnllLDEwMjprZSwxMDM6VGUsMTA0OjEyNywxMDU6TmV9LGEodmEsX2UpLGEobWUsWzIsMzUzXSx7NDU6amUsNDY6amUsODA6amUsODE6amUsMTAxOmplLDEwMjpqZSwxMDM6amUsMTA1OmplLDEyNTpqZSwxMjY6amV9KSxhKG1lLFsyLDM1NF0pLGEobWUsWzIsMzU1XSksezY6WzEsMzIwXSw3OjMxOCw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNTpbMSwzMTldLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHszNDozMjEsMzU6QWUsMTczOlsxLDMyMl19LGEobWUsWzIsMjQxXSx7MTQxOjMyMywxNDI6WzEsMzI0XSwxNDM6WzEsMzI1XX0pLGEobWUsWzIsMjYyXSksYShtZSxbMiwyNjNdKSxhKG1lLFsyLDI3MV0pLGEobWUsWzIsMjcyXSksezM1OlsxLDMyNl0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMSwzMjddfSx7MTY4OjMyOCwxNzA6MzI5LDE3MTpiYX0sYShtZSxbMiwxNDhdKSx7NzozMzEsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShNZSxbMiwxNTFdLHszNDozMzIsMzU6QWUsNDU6amUsNDY6amUsODA6amUsODE6amUsMTAxOmplLDEwMjpqZSwxMDM6amUsMTA1OmplLDEyNTpqZSwxMjY6amUsMTExOlsxLDMzM119KSxhKCRhLFsyLDI0OF0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezczOjMzNCwxMDc6X30sYSgkYSxbMiwzMl0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezc6MzM1LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoWzEsNiwzNiw0Nyw2OSw3MCw5MywxMjcsMTM1LDE0NiwxNDksMTU3XSxbMiw4OF0sezE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwxMzoyMywxNToyNSwxNjoyNiw2MDoyOSw1MzozMCw3NDozMSwxMDA6MzIsNTE6MzMsNzY6MzQsNzU6MzUsOTg6NDUsMTcyOjQ2LDE1MTo0OCwxNDc6NDksMTUyOjUwLDE1NDo1MSwxNTU6NTIsOTY6NjEsNzM6NjIsNDI6NjMsNDg6NjUsMzc6NzgsNjc6NzksMTU4Ojg1LDQ0Ojg4LDg5OjE1Miw5OjE1NCw3OjMzNiwxNDp0LDMyOlJlLDM1OkdlLDM4Om4sMzk6ciw0MzpsLDQ1OnMsNDY6aSw0OTpkLDUwOmMsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjg6eSw3NzprLDg0OlQsODU6T2UsODY6TGUsOTA6Yiw5MTokLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0ODpCZSwxNTA6QmUsMTU2OkJlLDE3NDpCZSwxNTM6RiwxNjc6UCwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSksezM0OjMzNywzNTpBZSwxNzM6WzEsMzM4XX0sYShiZSxfYSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSx7NzM6MzM5LDEwNzpffSxhKGJlLFsyLDE1NV0pLHszMzpbMSwzNDBdLDkzOlsxLDM0MV19LHszMzpbMSwzNDJdfSx7MzU6Q2EsMzc6MzQ3LDM4Om4sMzk6ciwxMDk6WzEsMzQzXSwxMTU6MzQ0LDExNjozNDUsMTE4OkRhfSxhKFszMyw5M10sWzIsMTcxXSksezExNzpbMSwzNDldfSx7MzU6RWEsMzc6MzU0LDM4Om4sMzk6ciwxMDk6WzEsMzUwXSwxMTg6eGEsMTIxOjM1MSwxMjM6MzUyfSxhKGJlLFsyLDE3NV0pLHs2MTpbMSwzNTZdfSx7NzozNTcsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzU6WzEsMzU4XSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7MzM6WzEsMzU5XX0sezY6VywxNDY6WzEsMzYwXX0sezQ6MzYxLDU6Myw3OjQsODo1LDk6NiwxMDo3LDExOjI3LDEyOjI4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOm8sMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpOLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKElhLFNhLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxMzQ6MzYyLDcwOlsxLDM2M10sMTM1OnBhLDE0ODpxLDE1MDp6LDE1NjpKLDE3NDpLLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShJYSxBYSx7MTM0OjM2NCw3MDpjYSwxMzU6cGF9KSxhKFJhLFsyLDIwM10pLHs3OjMwOCw4OjMwOSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNjk6WzEsMzY1XSw3MDpZZSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTM6cWUsOTY6NjEsOTc6MjExLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxMzY6MzY3LDEzODozNjYsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShbNiwzNSw2OV0sbWEsezEzMzozNjgsOTI6MzcwLDkzOk9hfSksYShMYSxbMiwyMzRdKSxhKEZhLFsyLDIyNV0pLHs3OjMwOCw4OjMwOSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNTpXZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzA6WWUsNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDkzOnFlLDk2OjYxLDk3OjIxMSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTMxOjM3MiwxMzI6MzcxLDEzNjoyMTAsMTM3OjIwNywxMzg6MjA2LDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoTGEsWzIsMjM2XSksYShGYSxbMiwyMzBdKSxhKHdhLFsyLDIyM10pLGEod2EsWzIsMjI0XSx7MTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDEzOjIzLDE1OjI1LDE2OjI2LDYwOjI5LDUzOjMwLDc0OjMxLDEwMDozMiw1MTozMyw3NjozNCw3NTozNSw5ODo0NSwxNzI6NDYsMTUxOjQ4LDE0Nzo0OSwxNTI6NTAsMTU0OjUxLDE1NTo1Miw5Njo2MSw3Mzo2Miw0Mjo2Myw0ODo2NSwzNzo3OCw2Nzo3OSwxNTg6ODUsNDQ6ODgsODk6MTUyLDk6MTU0LDc6MzczLDE0OnQsMzI6UmUsMzg6biwzOTpyLDQzOmwsNDU6cyw0NjppLDQ5OmQsNTA6Yyw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2ODp5LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw5MDpiLDkxOiQsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ4Ok8sMTUwOkwsMTUzOkYsMTU2OncsMTY3OlAsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0pLHs3ODozNzQsMTI2OmlhfSx7NDA6Mzc1LDQxOktlfSx7NzozNzYsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShQYSxbMiwyMDJdKSxhKFBhLFsyLDM4XSksezM0OjM3NywzNTpBZSwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM0OjM3OCwzNTpBZX0sYShqYSxbMiwyNTZdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNDk6WzEsMzc5XSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHszNTpbMiwyNTJdLDE0OTpbMSwzODBdfSxhKGphLFsyLDI1OV0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE0OTpbMSwzODFdLDE1MDp6LDE1NjpKLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezM1OlsyLDI1NF0sMTQ5OlsxLDM4Ml19LGEobWUsWzIsMjY3XSksYShNYSxbMiwyNjhdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHszNTpVYSwxNTc6WzEsMzgzXX0sYShWYSxbMiwyNzhdKSx7Mzc6MjMwLDM4Om4sMzk6ciw2NzoyMzEsNjg6eGUsNzM6MjMzLDk2OjIzMiwxMDc6XywxMzA6U2UsMTYxOjM4NCwxNjM6MjI5fSxhKFZhLFsyLDI4NF0sezkzOlsxLDM4NV19KSxhKEJhLFsyLDI4MF0pLGEoQmEsWzIsMjgxXSksYShCYSxbMiwyODJdKSxhKEJhLFsyLDI4M10pLGEobWUsWzIsMjc1XSksezM1OlsyLDI3N119LHs3OjM4Niw4OjM4Nyw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzozODgsODozODksOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MzkwLDg6MzkxLDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoR2EsbWEsezkyOjM5Miw5MzpIYX0pLGEoV2EsWzIsMTQzXSksYShXYSxbMiw1Nl0sezY1OlsxLDM5NF19KSxhKFdhLFsyLDU3XSksYShYYSxbMiw2Nl0sezc4OjM5Nyw3OTozOTgsNjE6WzEsMzk1XSw3MDpbMSwzOTZdLDgwOllhLDgxOnFhLDEyNjppYX0pLGEoWGEsWzIsNjddKSx7Mzc6MjQ3LDM4Om4sMzk6ciw0MDoyNDgsNDE6S2UsNjY6NDAxLDY3OjI0OSw2ODp0YSw3MTo0MDIsNzI6MjUxLDczOjI1Miw3NDoyNTMsNzU6MjU0LDc2OjI1NSw3NzpuYSwxMDc6XywxMjk6eCwxMzA6SSwxNDU6Un0sezcwOlsxLDQwM10sNzg6NDA0LDc5OjQwNSw4MDpZYSw4MTpxYSwxMjY6aWF9LGEoemEsWzIsNjJdKSxhKHphLFsyLDYzXSksYSh6YSxbMiw2NF0pLHs3OjQwNiw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKEphLFsyLDcyXSksYShKYSxbMiw3M10pLGEoSmEsWzIsNzRdKSxhKEphLFsyLDc1XSksYShKYSxbMiw3Nl0pLHs3ODo0MDcsODA6emUsODE6SmUsMTI2OmlhfSxhKHZhLENlLHs1MjpbMSw0MDhdfSksYSh2YSxqZSksezY6Vyw0NzpbMSw0MDldfSxhKFgsWzIsNF0pLGEoS2EsWzIsMzU3XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTgyOmVlLDE4MzphZSwxODQ6dGV9KSxhKEthLFsyLDM1OF0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZSwxODM6YWUsMTg0OnRlfSksYShOYSxbMiwzNTldLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxODI6ZWUsMTg0OnRlfSksYShOYSxbMiwzNjBdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxODI6ZWUsMTg0OnRlfSksYShbMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5M10sWzIsMzYxXSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGV9KSxhKFsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5Ml0sWzIsMzYyXSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE5MzpwZX0pLGEoWzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTg3LDE4OCwxODksMTkwLDE5MSwxOTJdLFsyLDM2M10sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTkzOnBlfSksYShbMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxODgsMTg5LDE5MCwxOTEsMTkyXSxbMiwzNjRdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxOTM6cGV9KSxhKFsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE4OSwxOTAsMTkxLDE5Ml0sWzIsMzY1XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE5MzpwZX0pLGEoWzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTkwLDE5MSwxOTJdLFsyLDM2Nl0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkzOnBlfSksYShbMSw2LDM1LDM2LDQ3LDY5LDcwLDgzLDg4LDkzLDEwOSwxMjcsMTM1LDE0NiwxNDgsMTQ5LDE1MCwxNTYsMTU3LDE3NCwxOTEsMTkyXSxbMiwzNjddLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTM6cGV9KSxhKFsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OCwxNDksMTUwLDE1NiwxNTcsMTc0LDE5Ml0sWzIsMzY4XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MzpwZX0pLGEoWzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE1NywxNzQsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5M10sWzIsMzY5XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lfSksYShNYSxaYSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ4OnEsMTUwOnosMTU2OkosMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKFksWzIsMzQ1XSksezE0OTpbMSw0MTBdfSx7MTQ5OlsxLDQxMV19LGEoWzEsNiwzNSwzNiw0Nyw2OSw3MCw4Myw4OCw5MywxMDksMTI3LDEzNSwxNDYsMTQ4LDE0OSwxNTAsMTU2LDE3NCwxNzgsMTc5LDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzXSxVYSx7MTU3OlsxLDQxMl19KSx7Nzo0MTMsODo0MTQsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NDE1LDg6NDE2LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjQxNyw4OjQxOCw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKE1hLFFhLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLGEoWSxbMiwzNDRdKSxhKGV0LFsyLDE5M10pLGEoZXQsWzIsMTk0XSksezc6MzA4LDg6MzA5LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM1OmF0LDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3MDpZZSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTc6MjExLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjc6WzEsNDE5XSwxMjg6NDIwLDEyOTp4LDEzMDpJLDEzNjo0MjEsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShRZSxbMiwxMzFdKSxhKFFlLFsyLDEzMl0pLGEoUWUsWzIsMTMzXSksYShRZSxbMiwxMzRdKSx7ODM6WzEsNDIzXX0sezcwOmNhLDgzOlsyLDEzOV0sMTM0OjQyNCwxMzU6cGEsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHs4MzpbMiwxNDBdfSx7NzA6Y2EsMTM0OjQyNSwxMzU6cGF9LHs3OjQyNiw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4MzpbMiwyMTVdLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEodHQsWzIsMjA2XSksYSh0dCxvdCksYShRZSxbMiwxMzhdKSxhKCRhLFsyLDUzXSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSx7Nzo0MjcsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NDI4LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs4OTo0MjksOTA6Yiw5MTokfSxhKG50LHJ0LHs5NToxMzQsMzc6MTM2LDY3OjEzNyw5NjoxMzgsNzM6MTM5LDk0OjQzMCwzODpuLDM5OnIsNjg6eGUsNzA6SWUsMTA3Ol8sMTMwOlNlfSksezY6bHQsMzU6c3R9LGEoZ2EsWzIsMTA1XSksezc6NDMzLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoZ2EsWzIsMTA2XSksYSh3YSxTYSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsNzA6WzEsNDM0XSwxNDg6cSwxNTA6eiwxNTY6SiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLGEod2EsQWEpLGEoaXQsWzIsMzRdKSx7NjpXLDM2OlsxLDQzNV19LHs3OjQzNiw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKHVhLG1hLHs5MjozMDQsODg6WzEsNDM3XSw5MzpoYX0pLGEoa2EsVGEsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE4MjplZX0pLHs3OjQzOCw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7MzQ6Mzc3LDM1OkFlLDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sYShZLFsyLDg5XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ4Ol9hLDE1MDpfYSwxNTY6X2EsMTc0Ol9hLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYSgkYSxbMiwzNzBdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHs3OjQzOSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo0NDAsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShtZSxbMiwzMzddKSx7Nzo0NDEsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShtZSxbMiwyNDJdLHsxNDI6WzEsNDQyXX0pLHszNDo0NDMsMzU6QWV9LHszNDo0NDYsMzU6QWUsMzc6NDQ0LDM4Om4sMzk6ciw3Mzo0NDUsMTA3Ol99LHsxNjg6NDQ3LDE3MDozMjksMTcxOmJhfSx7MTY4OjQ0OCwxNzA6MzI5LDE3MTpiYX0sezM2OlsxLDQ0OV0sMTY5OlsxLDQ1MF0sMTcwOjQ1MSwxNzE6YmF9LGEoY3QsWzIsMzMwXSksezc6NDUzLDg6NDU0LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDEzOTo0NTIsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShwdCxbMiwxNDldLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwzNDo0NTUsMzU6QWUsMTQ4OnEsMTUwOnosMTU2OkosMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKG1lLFsyLDE1Ml0pLHs3OjQ1Niw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7MzY6WzEsNDU3XX0sYSgkYSxbMiwzM10sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShZLFsyLDg3XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ4Ol9hLDE1MDpfYSwxNTY6X2EsMTc0Ol9hLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShZLFsyLDM0M10pLHs3OjQ1OSw4OjQ1OCw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7MzY6WzEsNDYwXX0sezQ0OjQ2MSw0NTpzLDQ2Oml9LHsxMDc6WzEsNDYzXSwxMTQ6NDYyLDExOTpIZX0sezQ0OjQ2NCw0NTpzLDQ2Oml9LHszMzpbMSw0NjVdfSxhKEdhLG1hLHs5Mjo0NjYsOTM6dXR9KSxhKFdhLFsyLDE2Ml0pLHszNTpDYSwzNzozNDcsMzg6biwzOTpyLDExNTo0NjgsMTE2OjM0NSwxMTg6RGF9LGEoV2EsWzIsMTY3XSx7MTE3OlsxLDQ2OV19KSxhKFdhLFsyLDE2OV0sezExNzpbMSw0NzBdfSksezM3OjQ3MSwzODpuLDM5OnJ9LGEoYmUsWzIsMTczXSksYShHYSxtYSx7OTI6NDcyLDkzOm10fSksYShXYSxbMiwxODNdKSx7MzU6RWEsMzc6MzU0LDM4Om4sMzk6ciwxMTg6eGEsMTIxOjQ3NCwxMjM6MzUyfSxhKFdhLFsyLDE4OF0sezExNzpbMSw0NzVdfSksYShXYSxbMiwxOTFdLHsxMTc6WzEsNDc2XX0pLHs2OlsxLDQ3OF0sNzo0NzcsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzU6WzEsNDc5XSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKGh0LFsyLDE3OV0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezczOjQ4MCwxMDc6X30sezQ0OjQ4MSw0NTpzLDQ2Oml9LGEoJGUsWzIsMjUwXSksezY6VywzNjpbMSw0ODJdfSx7Nzo0ODMsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShbMTQsMzIsMzgsMzksNDMsNDUsNDYsNDksNTAsNTQsNTUsNTYsNTcsNTgsNTksNjgsNzcsODQsODUsODYsOTAsOTEsMTA3LDExMCwxMTIsMTIwLDEyOSwxMzAsMTQwLDE0NCwxNDUsMTQ4LDE1MCwxNTMsMTU2LDE2NywxNzMsMTc2LDE3NywxNzgsMTc5LDE4MCwxODFdLG90LHs2Omd0LDM1Omd0LDY5Omd0LDkzOmd0fSksezc6NDg0LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoUmEsWzIsMjA0XSksYShMYSxbMiwyMzVdKSxhKEZhLFsyLDIzMV0pLHs2OmZ0LDM1Onl0LDY5OlsxLDQ4NV19LGEoa3QscnQsezE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwxMzoyMywxNToyNSwxNjoyNiw2MDoyOSw1MzozMCw3NDozMSwxMDA6MzIsNTE6MzMsNzY6MzQsNzU6MzUsODk6MzcsOTg6NDUsMTcyOjQ2LDE1MTo0OCwxNDc6NDksMTUyOjUwLDE1NDo1MSwxNTU6NTIsMTc1OjU3LDk2OjYxLDczOjYyLDQyOjYzLDQ4OjY1LDM3Ojc4LDY3Ojc5LDE1ODo4NSw0NDo4OCw5OjE0OCwxMzg6MjA2LDEzNjoyMTAsOTc6MjExLDc6MzA4LDg6MzA5LDEzNzo0ODgsMTMxOjQ4OSwxNDp0LDMyOlJlLDM4Om4sMzk6ciw0MzpsLDQ1OnMsNDY6aSw0OTpkLDUwOmMsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjg6eSw3MDpZZSw3NzprLDg0OlQsODU6T2UsODY6diw5MDpiLDkxOiQsOTM6cWUsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ4Ok8sMTUwOkwsMTUzOkYsMTU2OncsMTY3OlAsMTczOmosMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9KSxhKGt0LFsyLDIzMl0pLGEobnQsbWEsezkyOjM3MCwxMzM6NDkwLDkzOk9hfSksezc6MzA4LDg6MzA5LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3MDpZZSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTM6cWUsOTY6NjEsOTc6MjExLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxMzY6MzY3LDEzODozNjYsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYSh3YSxbMiwxMTRdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzQ6ZHQsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKGV0LFsyLDE5NV0pLGEoJGUsWzIsMTI5XSksezgzOlsxLDQ5MV0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSxhKFR0LFsyLDMzNF0pLGEoTnQsWzIsMzQwXSksezc6NDkyLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjQ5Myw4OjQ5NCw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo0OTUsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NDk2LDg6NDk3LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjQ5OCw4OjQ5OSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFZhLFsyLDI3OV0pLHszNzoyMzAsMzg6biwzOTpyLDY3OjIzMSw2ODp4ZSw3MzoyMzMsOTY6MjMyLDEwNzpfLDEzMDpTZSwxNjM6NTAwfSx7MzU6dnQsMTQ4OnEsMTQ5OlsxLDUwMV0sMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1NzpbMSw1MDJdLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMDVdLDE0OTpbMSw1MDNdLDE1NzpbMSw1MDRdfSx7MzU6YnQsMTQ4OnEsMTQ5OlsxLDUwNV0sMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMDZdLDE0OTpbMSw1MDZdfSx7MzU6JHQsMTQ4OnEsMTQ5OlsxLDUwN10sMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMjFdLDE0OTpbMSw1MDhdfSx7NjpfdCwzNTpDdCwxMDk6WzEsNTA5XX0sYShEdCxydCx7NDQ6ODgsNjM6MjQxLDY0OjI0Miw2NjoyNDMsNDI6MjQ0LDcxOjI0NiwzNzoyNDcsNDA6MjQ4LDY3OjI0OSw3MjoyNTEsNzM6MjUyLDc0OjI1Myw3NToyNTQsNzY6MjU1LDYyOjUxMiwzODpuLDM5OnIsNDE6S2UsNDM6bCw0NTpzLDQ2OmksNjg6dGEsNzA6b2EsNzc6bmEsMTA3Ol8sMTI5OngsMTMwOkksMTQ1OlJ9KSx7Nzo1MTMsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzU6WzEsNTE0XSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo1MTUsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzU6WzEsNTE2XSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFdhLFsyLDY4XSksYShKYSxbMiw3OF0pLGEoSmEsWzIsODBdKSx7NDA6NTE3LDQxOktlfSx7NzoyOTIsODoyOTQsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDcwOmNhLDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODI6NTE4LDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNjoyOTMsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTM0OjI5NSwxMzU6cGEsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShXYSxbMiw2OV0sezc4OjM5Nyw3OTozOTgsODA6WWEsODE6cWEsMTI2OmlhfSksYShXYSxbMiw3MV0sezc4OjQwNCw3OTo0MDUsODA6WWEsODE6cWEsMTI2OmlhfSksYShXYSxbMiw3MF0pLGEoSmEsWzIsNzldKSxhKEphLFsyLDgxXSksezY5OlsxLDUxOV0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSxhKEphLFsyLDc3XSksYSgkZSxbMiw0NF0pLGEoc2EsWzIsNDJdKSx7Nzo1MjAsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NTIxLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjUyMiw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFsxLDYsMzUsMzYsNDcsNjksNzAsODMsODgsOTMsMTA5LDEyNywxMzUsMTQ2LDE0OCwxNTAsMTU2LDE3NF0sdnQsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0OTpbMSw1MjNdLDE1NzpbMSw1MjRdLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezE0OTpbMSw1MjVdLDE1NzpbMSw1MjZdfSxhKEV0LGJ0LHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDk6WzEsNTI3XSwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHsxNDk6WzEsNTI4XX0sYShFdCwkdCx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ5OlsxLDUyOV0sMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSx7MTQ5OlsxLDUzMF19LGEoZXQsWzIsMTk4XSksYShbNiwzNSwxMjddLG1hLHs5Mjo1MzEsOTM6eHR9KSxhKEl0LFsyLDIxNl0pLHs3OjMwOCw4OjMwOSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNTphdCwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzA6WWUsNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk3OjIxMSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI4OjUzMywxMjk6eCwxMzA6SSwxMzY6NDIxLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoUWUsWzIsMTM3XSksezc6NTM0LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDgzOlsyLDIxMV0sODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NTM1LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDgzOlsyLDIxM10sODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezgzOlsyLDIxNF0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSxhKCRhLFsyLDU0XSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSx7MzY6WzEsNTM2XSwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6ZHQsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHs1OjUzOCw3OjQsODo1LDk6NiwxMDo3LDExOjI3LDEyOjI4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOm8sMzQ6NTM3LDM1OkFlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6Tiw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShnYSxbMiwxMDFdKSx7Mzc6MTM2LDM4Om4sMzk6ciw2NzoxMzcsNjg6eGUsNzA6SWUsNzM6MTM5LDk0OjUzOSw5NToxMzQsOTY6MTM4LDEwNzpfLDEzMDpTZX0sYShTdCxFZSx7OTQ6MTMzLDk1OjEzNCwzNzoxMzYsNjc6MTM3LDk2OjEzOCw3MzoxMzksODc6NTQwLDM4Om4sMzk6ciw2ODp4ZSw3MDpJZSwxMDc6XywxMzA6U2V9KSxhKGdhLFsyLDEwN10sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLGEod2EsZ3QpLGEoaXQsWzIsMzVdKSxhKE1hLFphLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHs4OTo1NDEsOTA6Yiw5MTokfSxhKE1hLFFhLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHszNjpbMSw1NDJdLDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sYSgkYSxbMiwzNzJdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHszNDo1NDMsMzU6QWUsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSx7MzQ6NTQ0LDM1OkFlfSxhKG1lLFsyLDI0M10pLHszNDo1NDUsMzU6QWV9LHszNDo1NDYsMzU6QWV9LGEoQXQsWzIsMjQ3XSksezM2OlsxLDU0N10sMTY5OlsxLDU0OF0sMTcwOjQ1MSwxNzE6YmF9LHszNjpbMSw1NDldLDE2OTpbMSw1NTBdLDE3MDo0NTEsMTcxOmJhfSxhKG1lLFsyLDMyOF0pLHszNDo1NTEsMzU6QWV9LGEoY3QsWzIsMzMxXSksezM0OjU1MiwzNTpBZSw5MzpbMSw1NTNdfSxhKFJ0LFsyLDIzN10sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3NDpLLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShSdCxbMiwyMzhdKSxhKG1lLFsyLDE1MF0pLGEocHQsWzIsMTUzXSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMzQ6NTU0LDM1OkFlLDE0ODpxLDE1MDp6LDE1NjpKLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShtZSxbMiwyNDldKSx7MzQ6NTU1LDM1OkFlfSx7MTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LGEoYmUsWzIsODVdKSxhKGJlLFsyLDE1Nl0pLHszMzpbMSw1NTZdfSx7MzU6Q2EsMzc6MzQ3LDM4Om4sMzk6ciwxMTU6NTU3LDExNjozNDUsMTE4OkRhfSxhKGJlLFsyLDE1N10pLHs0NDo1NTgsNDU6cyw0NjppfSx7NjpPdCwzNTpMdCwxMDk6WzEsNTU5XX0sYShEdCxydCx7Mzc6MzQ3LDExNjo1NjIsMzg6biwzOTpyLDExODpEYX0pLGEobnQsbWEsezkyOjU2Myw5Mzp1dH0pLHszNzo1NjQsMzg6biwzOTpyfSx7Mzc6NTY1LDM4Om4sMzk6cn0sezMzOlsyLDE3Ml19LHs2OkZ0LDM1Ond0LDEwOTpbMSw1NjZdfSxhKER0LHJ0LHszNzozNTQsMTIzOjU2OSwzODpuLDM5OnIsMTE4OnhhfSksYShudCxtYSx7OTI6NTcwLDkzOm10fSksezM3OjU3MSwzODpuLDM5OnIsMTE4OlsxLDU3Ml19LHszNzo1NzMsMzg6biwzOTpyfSxhKGh0LFsyLDE3Nl0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezc6NTc0LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjU3NSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7MzY6WzEsNTc2XX0sYShiZSxbMiwxODFdKSx7MTQ2OlsxLDU3N119LHs2OTpbMSw1NzhdLDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezY5OlsxLDU3OV0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSxhKFJhLFsyLDIwNV0pLHs3OjMwOCw4OjMwOSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzA6WWUsNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDkzOnFlLDk2OjYxLDk3OjIxMSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTMxOjM3MiwxMzY6MjEwLDEzNzo1ODAsMTM4OjIwNiwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7NzozMDgsODozMDksOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzU6V2UsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDcwOlllLDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5MzpxZSw5Njo2MSw5NzoyMTEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDEzMTozNzIsMTMyOjU4MSwxMzY6MjEwLDEzNzoyMDcsMTM4OjIwNiwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKEZhLFsyLDIyNl0pLGEoa3QsWzIsMjMzXSx7MTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDEzOjIzLDE1OjI1LDE2OjI2LDYwOjI5LDUzOjMwLDc0OjMxLDEwMDozMiw1MTozMyw3NjozNCw3NTozNSw4OTozNyw5ODo0NSwxNzI6NDYsMTUxOjQ4LDE0Nzo0OSwxNTI6NTAsMTU0OjUxLDE1NTo1MiwxNzU6NTcsOTY6NjEsNzM6NjIsNDI6NjMsNDg6NjUsMzc6NzgsNjc6NzksMTU4Ojg1LDQ0Ojg4LDk6MTQ4LDk3OjIxMSw3OjMwOCw4OjMwOSwxMzg6MzY2LDEzNjozNjcsMTQ6dCwzMjpSZSwzODpuLDM5OnIsNDM6bCw0NTpzLDQ2OmksNDk6ZCw1MDpjLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDY4OnksNzA6WWUsNzc6ayw4NDpULDg1Ok9lLDg2OnYsOTA6Yiw5MTokLDkzOnFlLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0ODpPLDE1MDpMLDE1MzpGLDE1Njp3LDE2NzpQLDE3MzpqLDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSksezY6ZnQsMzU6eXQsMzY6WzEsNTgyXX0sYSgkZSxbMiwxMzBdKSxhKE1hLFsyLDI1N10sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezM1OlB0LDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpLLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSx7MzU6WzIsMjUzXX0sYShNYSxbMiwyNjBdLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHszNTpqdCwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDI1NV19LHszNTpNdCwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDI3Nl19LGEoVmEsWzIsMjg1XSksezc6NTgzLDg6NTg0LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjU4NSw4OjU4Niw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo1ODcsODo1ODgsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NTg5LDg6NTkwLDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjU5MSw4OjU5Miw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo1OTMsODo1OTQsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NTk1LDg6NTk2LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjU5Nyw4OjU5OCw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFJhLFsyLDE0MV0pLHszNzoyNDcsMzg6biwzOTpyLDQwOjI0OCw0MTpLZSw0MjoyNDQsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNjI6NTk5LDYzOjI0MSw2NDoyNDIsNjY6MjQzLDY3OjI0OSw2ODp0YSw3MDpvYSw3MToyNDYsNzI6MjUxLDczOjI1Miw3NDoyNTMsNzU6MjU0LDc2OjI1NSw3NzpuYSwxMDc6XywxMjk6eCwxMzA6SSwxNDU6Un0sYShTdCxhYSx7NDQ6ODgsNjI6MjQwLDYzOjI0MSw2NDoyNDIsNjY6MjQzLDQyOjI0NCw3MToyNDYsMzc6MjQ3LDQwOjI0OCw2NzoyNDksNzI6MjUxLDczOjI1Miw3NDoyNTMsNzU6MjU0LDc2OjI1NSwxMDg6NjAwLDM4Om4sMzk6ciw0MTpLZSw0MzpsLDQ1OnMsNDY6aSw2ODp0YSw3MDpvYSw3NzpuYSwxMDc6XywxMjk6eCwxMzA6SSwxNDU6Un0pLGEoV2EsWzIsMTQ0XSksYShXYSxbMiw1OF0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHs3OjYwMSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKFdhLFsyLDYwXSx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ4OnEsMTUwOnosMTU2OkosMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezc6NjAyLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LGEoSmEsWzIsODJdKSx7ODM6WzEsNjAzXX0sYSh6YSxbMiw2NV0pLGEoTWEsUHQsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShNYSxqdCx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ4OnEsMTUwOnosMTU2OkosMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKE1hLE10LHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHs3OjYwNCw4OjYwNSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2MDYsODo2MDcsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NjA4LDg6NjA5LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjYxMCw4OjYxMSw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2MTIsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NjEzLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjYxNCw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2MTUsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezY6VXQsMzU6VnQsMTI3OlsxLDYxNl19LGEoWzYsMzUsMzYsMTI3XSxydCx7MTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDEzOjIzLDE1OjI1LDE2OjI2LDYwOjI5LDUzOjMwLDc0OjMxLDEwMDozMiw1MTozMyw3NjozNCw3NTozNSw4OTozNyw5ODo0NSwxNzI6NDYsMTUxOjQ4LDE0Nzo0OSwxNTI6NTAsMTU0OjUxLDE1NTo1MiwxNzU6NTcsOTY6NjEsNzM6NjIsNDI6NjMsNDg6NjUsMzc6NzgsNjc6NzksMTU4Ojg1LDQ0Ojg4LDk6MTQ4LDk3OjIxMSw3OjMwOCw4OjMwOSwxMzY6NjE5LDE0OnQsMzI6UmUsMzg6biwzOTpyLDQzOmwsNDU6cyw0NjppLDQ5OmQsNTA6Yyw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2ODp5LDcwOlllLDc3OmssODQ6VCw4NTpPZSw4Njp2LDkwOmIsOTE6JCwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDg6TywxNTA6TCwxNTM6RiwxNTY6dywxNjc6UCwxNzM6aiwxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0pLGEobnQsbWEsezkyOjYyMCw5Mzp4dH0pLHs4MzpbMiwyMTBdLDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezgzOlsyLDIxMl0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSxhKG1lLFsyLDU1XSksYSh5YSxbMiw5MV0pLGEoWSxbMiw5M10pLGEoZ2EsWzIsMTAyXSksYShudCxtYSx7OTI6NjIxLDkzOmhhfSksezM0OjUzNywzNTpBZX0sYShtZSxbMiwzNzFdKSxhKFR0LFsyLDMzNV0pLGEobWUsWzIsMjQ0XSksYShBdCxbMiwyNDVdKSxhKEF0LFsyLDI0Nl0pLGEobWUsWzIsMzI0XSksezM0OjYyMiwzNTpBZX0sYShtZSxbMiwzMjVdKSx7MzQ6NjIzLDM1OkFlfSx7MzY6WzEsNjI0XX0sYShjdCxbMiwzMzJdLHs2OlsxLDYyNV19KSx7Nzo2MjYsODo2MjcsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShtZSxbMiwxNTRdKSxhKE50LFsyLDM0MV0pLHs0NDo2MjgsNDU6cyw0NjppfSxhKEdhLG1hLHs5Mjo2MjksOTM6dXR9KSxhKGJlLFsyLDE1OF0pLHszMzpbMSw2MzBdfSx7Mzc6MzQ3LDM4Om4sMzk6ciwxMTY6NjMxLDExODpEYX0sezM1OkNhLDM3OjM0NywzODpuLDM5OnIsMTE1OjYzMiwxMTY6MzQ1LDExODpEYX0sYShXYSxbMiwxNjNdKSx7NjpPdCwzNTpMdCwzNjpbMSw2MzNdfSxhKFdhLFsyLDE2OF0pLGEoV2EsWzIsMTcwXSksYShiZSxbMiwxNzRdLHszMzpbMSw2MzRdfSksezM3OjM1NCwzODpuLDM5OnIsMTE4OnhhLDEyMzo2MzV9LHszNTpFYSwzNzozNTQsMzg6biwzOTpyLDExODp4YSwxMjE6NjM2LDEyMzozNTJ9LGEoV2EsWzIsMTg0XSksezY6RnQsMzU6d3QsMzY6WzEsNjM3XX0sYShXYSxbMiwxODldKSxhKFdhLFsyLDE5MF0pLGEoV2EsWzIsMTkyXSksYShodCxbMiwxNzddLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNDg6cSwxNTA6eiwxNTY6SiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHszNjpbMSw2MzhdLDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sYShiZSxbMiwxODBdKSxhKCRlLFsyLDI1MV0pLGEoJGUsWzIsMjA4XSksYSgkZSxbMiwyMDldKSxhKEZhLFsyLDIyN10pLGEobnQsbWEsezkyOjM3MCwxMzM6NjM5LDkzOk9hfSksYShGYSxbMiwyMjhdKSx7MzU6QnQsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1NzpbMSw2NDBdLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMDddLDE1NzpbMSw2NDFdfSx7MzU6R3QsMTQ4OnEsMTQ5OlsxLDY0Ml0sMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMTFdLDE0OTpbMSw2NDNdfSx7MzU6SHQsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1NzpbMSw2NDRdLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMDhdLDE1NzpbMSw2NDVdfSx7MzU6V3QsMTQ4OnEsMTQ5OlsxLDY0Nl0sMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMTJdLDE0OTpbMSw2NDddfSx7MzU6WHQsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMDldfSx7MzU6WXQsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMTBdfSx7MzU6cXQsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMjJdfSx7MzU6enQsMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OkssMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9LHszNTpbMiwzMjNdfSxhKFdhLFsyLDE0NV0pLGEobnQsbWEsezkyOjY0OCw5MzpIYX0pLHszNjpbMSw2NDldLDE0ODpxLDE1MDp6LDE1MToxMTEsMTU0OjExMiwxNTY6SiwxNTg6MTE2LDE3NDpkdCwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM2OlsxLDY1MF0sMTQ4OnEsMTUwOnosMTUxOjExMSwxNTQ6MTEyLDE1NjpKLDE1ODoxMTYsMTc0OmR0LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSxhKEphLFsyLDgzXSksYShKdCxCdCx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTU3OlsxLDY1MV0sMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSx7MTU3OlsxLDY1Ml19LGEoRXQsR3QsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0OTpbMSw2NTNdLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksezE0OTpbMSw2NTRdfSxhKEp0LEh0LHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNTc6WzEsNjU1XSwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHsxNTc6WzEsNjU2XX0sYShFdCxXdCx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTQ5OlsxLDY1N10sMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSx7MTQ5OlsxLDY1OF19LGEoJGEsWHQsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYSgkYSxZdCx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKCRhLHF0LHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLGEoJGEsenQsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShldCxbMiwxOTldKSx7NzozMDgsODozMDksOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDcwOlllLDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5NzoyMTEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDEzNjo2NTksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6MzA4LDg6MzA5LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM1OmF0LDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3MDpZZSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTc6MjExLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjg6NjYwLDEyOTp4LDEzMDpJLDEzNjo0MjEsMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sYShJdCxbMiwyMTddKSx7NjpVdCwzNTpWdCwzNjpbMSw2NjFdfSx7NjpsdCwzNTpzdCwzNjpbMSw2NjJdfSx7MzY6WzEsNjYzXX0sezM2OlsxLDY2NF19LGEobWUsWzIsMzI5XSksYShjdCxbMiwzMzNdKSxhKFJ0LFsyLDIzOV0sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE0ODpxLDE1MDp6LDE1NjpKLDE3NDpLLDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYShSdCxbMiwyNDBdKSxhKGJlLFsyLDE2MF0pLHs2Ok90LDM1Okx0LDEwOTpbMSw2NjVdfSx7NDQ6NjY2LDQ1OnMsNDY6aX0sYShXYSxbMiwxNjRdKSxhKG50LG1hLHs5Mjo2NjcsOTM6dXR9KSxhKFdhLFsyLDE2NV0pLHs0NDo2NjgsNDU6cyw0NjppfSxhKFdhLFsyLDE4NV0pLGEobnQsbWEsezkyOjY2OSw5MzptdH0pLGEoV2EsWzIsMTg2XSksYShiZSxbMiwxNzhdKSx7NjpmdCwzNTp5dCwzNjpbMSw2NzBdfSx7Nzo2NzEsODo2NzIsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NjczLDg6Njc0LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjY3NSw4OjY3Niw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2NzcsODo2NzgsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6Njc5LDg6NjgwLDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjY4MSw4OjY4Miw5OjE0OCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OnYsODk6MzcsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOmosMTc1OjU3LDE3NjpNLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2ODMsODo2ODQsOToxNDgsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4Njp2LDg5OjM3LDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpqLDE3NTo1NywxNzY6TSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6Njg1LDg6Njg2LDk6MTQ4LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDI5OjIwLDMwOjIxLDMxOjIyLDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6diw4OTozNyw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6aiwxNzU6NTcsMTc2Ok0sMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs2Ol90LDM1OkN0LDM2OlsxLDY4N119LGEoV2EsWzIsNTldKSxhKFdhLFsyLDYxXSksezc6Njg4LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjY4OSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2OTAsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6NjkxLDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjY5Miw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSx7Nzo2OTMsOToxNTQsMTM6MjMsMTQ6dCwxNToyNSwxNjoyNiwxNzo4LDE4OjksMTk6MTAsMjA6MTEsMjE6MTIsMjI6MTMsMjM6MTQsMjQ6MTUsMjU6MTYsMjY6MTcsMjc6MTgsMjg6MTksMzI6UmUsMzc6NzgsMzg6biwzOTpyLDQyOjYzLDQzOmwsNDQ6ODgsNDU6cyw0NjppLDQ4OjY1LDQ5OmQsNTA6Yyw1MTozMyw1MzozMCw1NDpwLDU1OnUsNTY6bSw1NzpoLDU4OmcsNTk6Ziw2MDoyOSw2Nzo3OSw2ODp5LDczOjYyLDc0OjMxLDc1OjM1LDc2OjM0LDc3OmssODQ6VCw4NTpPZSw4NjpMZSw4OToxNTIsOTA6Yiw5MTokLDk2OjYxLDk4OjQ1LDEwMDozMiwxMDc6XywxMTA6QywxMTI6RCwxMjA6RSwxMjk6eCwxMzA6SSwxNDA6UywxNDQ6QSwxNDU6UiwxNDc6NDksMTQ4Ok8sMTUwOkwsMTUxOjQ4LDE1Mjo1MCwxNTM6RiwxNTQ6NTEsMTU1OjUyLDE1Njp3LDE1ODo4NSwxNjc6UCwxNzI6NDYsMTczOkZlLDE3Njp3ZSwxNzc6VSwxNzg6ViwxNzk6QiwxODA6RywxODE6SH0sezc6Njk0LDk6MTU0LDEzOjIzLDE0OnQsMTU6MjUsMTY6MjYsMTc6OCwxODo5LDE5OjEwLDIwOjExLDIxOjEyLDIyOjEzLDIzOjE0LDI0OjE1LDI1OjE2LDI2OjE3LDI3OjE4LDI4OjE5LDMyOlJlLDM3Ojc4LDM4Om4sMzk6ciw0Mjo2Myw0MzpsLDQ0Ojg4LDQ1OnMsNDY6aSw0ODo2NSw0OTpkLDUwOmMsNTE6MzMsNTM6MzAsNTQ6cCw1NTp1LDU2Om0sNTc6aCw1ODpnLDU5OmYsNjA6MjksNjc6NzksNjg6eSw3Mzo2Miw3NDozMSw3NTozNSw3NjozNCw3NzprLDg0OlQsODU6T2UsODY6TGUsODk6MTUyLDkwOmIsOTE6JCw5Njo2MSw5ODo0NSwxMDA6MzIsMTA3Ol8sMTEwOkMsMTEyOkQsMTIwOkUsMTI5OngsMTMwOkksMTQwOlMsMTQ0OkEsMTQ1OlIsMTQ3OjQ5LDE0ODpPLDE1MDpMLDE1MTo0OCwxNTI6NTAsMTUzOkYsMTU0OjUxLDE1NTo1MiwxNTY6dywxNTg6ODUsMTY3OlAsMTcyOjQ2LDE3MzpGZSwxNzY6d2UsMTc3OlUsMTc4OlYsMTc5OkIsMTgwOkcsMTgxOkh9LHs3OjY5NSw5OjE1NCwxMzoyMywxNDp0LDE1OjI1LDE2OjI2LDE3OjgsMTg6OSwxOToxMCwyMDoxMSwyMToxMiwyMjoxMywyMzoxNCwyNDoxNSwyNToxNiwyNjoxNywyNzoxOCwyODoxOSwzMjpSZSwzNzo3OCwzODpuLDM5OnIsNDI6NjMsNDM6bCw0NDo4OCw0NTpzLDQ2OmksNDg6NjUsNDk6ZCw1MDpjLDUxOjMzLDUzOjMwLDU0OnAsNTU6dSw1NjptLDU3OmgsNTg6Zyw1OTpmLDYwOjI5LDY3Ojc5LDY4OnksNzM6NjIsNzQ6MzEsNzU6MzUsNzY6MzQsNzc6ayw4NDpULDg1Ok9lLDg2OkxlLDg5OjE1Miw5MDpiLDkxOiQsOTY6NjEsOTg6NDUsMTAwOjMyLDEwNzpfLDExMDpDLDExMjpELDEyMDpFLDEyOTp4LDEzMDpJLDE0MDpTLDE0NDpBLDE0NTpSLDE0Nzo0OSwxNDg6TywxNTA6TCwxNTE6NDgsMTUyOjUwLDE1MzpGLDE1NDo1MSwxNTU6NTIsMTU2OncsMTU4Ojg1LDE2NzpQLDE3Mjo0NiwxNzM6RmUsMTc2OndlLDE3NzpVLDE3ODpWLDE3OTpCLDE4MDpHLDE4MTpIfSxhKEl0LFsyLDIxOF0pLGEobnQsbWEsezkyOjY5Niw5Mzp4dH0pLGEoSXQsWzIsMjE5XSksYShnYSxbMiwxMDNdKSxhKG1lLFsyLDMyNl0pLGEobWUsWzIsMzI3XSksezMzOlsxLDY5N119LGEoYmUsWzIsMTU5XSksezY6T3QsMzU6THQsMzY6WzEsNjk4XX0sYShiZSxbMiwxODJdKSx7NjpGdCwzNTp3dCwzNjpbMSw2OTldfSxhKEZhLFsyLDIyOV0pLHszNTpLdCwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxM119LHszNTpadCwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxNV19LHszNTpRdCwxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxN119LHszNTplbywxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxOV19LHszNTphbywxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxNF19LHszNTp0bywxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxNl19LHszNTpvbywxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMxOF19LHszNTpubywxNDg6cSwxNTA6eiwxNTE6MTExLDE1NDoxMTIsMTU2OkosMTU4OjExNiwxNzQ6SywxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0sezM1OlsyLDMyMF19LGEoV2EsWzIsMTQ2XSksYSgkYSxLdCx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKCRhLFp0LHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLGEoJGEsUXQsezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYSgkYSxlbyx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKCRhLGFvLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLGEoJGEsdG8sezE1MToxMTEsMTU0OjExMiwxNTg6MTE2LDE3ODpaLDE3OTpRLDE4MjplZSwxODM6YWUsMTg0OnRlLDE4NTpvZSwxODY6bmUsMTg3OnJlLDE4ODpsZSwxODk6c2UsMTkwOmllLDE5MTpkZSwxOTI6Y2UsMTkzOnBlfSksYSgkYSxvbyx7MTUxOjExMSwxNTQ6MTEyLDE1ODoxMTYsMTc4OlosMTc5OlEsMTgyOmVlLDE4MzphZSwxODQ6dGUsMTg1Om9lLDE4NjpuZSwxODc6cmUsMTg4OmxlLDE4OTpzZSwxOTA6aWUsMTkxOmRlLDE5MjpjZSwxOTM6cGV9KSxhKCRhLG5vLHsxNTE6MTExLDE1NDoxMTIsMTU4OjExNiwxNzg6WiwxNzk6USwxODI6ZWUsMTgzOmFlLDE4NDp0ZSwxODU6b2UsMTg2Om5lLDE4NzpyZSwxODg6bGUsMTg5OnNlLDE5MDppZSwxOTE6ZGUsMTkyOmNlLDE5MzpwZX0pLHs2OlV0LDM1OlZ0LDM2OlsxLDcwMF19LHs0NDo3MDEsNDU6cyw0NjppfSxhKFdhLFsyLDE2Nl0pLGEoV2EsWzIsMTg3XSksYShJdCxbMiwyMjBdKSxhKGJlLFsyLDE2MV0pXSxkZWZhdWx0QWN0aW9uczp7MjM1OlsyLDI3N10sMjkzOlsyLDE0MF0sNDcxOlsyLDE3Ml0sNDk0OlsyLDI1M10sNDk3OlsyLDI1NV0sNDk5OlsyLDI3Nl0sNTkyOlsyLDMwOV0sNTk0OlsyLDMxMF0sNTk2OlsyLDMyMl0sNTk4OlsyLDMyM10sNjcyOlsyLDMxM10sNjc0OlsyLDMxNV0sNjc2OlsyLDMxN10sNjc4OlsyLDMxOV0sNjgwOlsyLDMxNF0sNjgyOlsyLDMxNl0sNjg0OlsyLDMxOF0sNjg2OlsyLDMyMF19LHBhcnNlRXJyb3I6ZnVuY3Rpb24oZSxhKXtpZihhLnJlY292ZXJhYmxlKXRoaXMudHJhY2UoZSk7ZWxzZXt2YXIgdD1uZXcgRXJyb3IoZSk7dGhyb3cgdC5oYXNoPWEsdH19LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciBhPXRoaXMsdD1bMF0sbz1bbnVsbF0sbj1bXSxsPXRoaXMudGFibGUscz0iIixpPTAsZD0wLGM9MCx1PTEsbT1uLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLGg9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSxnPXt5eTp7fX07Zm9yKHZhciBmIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZikmJihnLnl5W2ZdPXRoaXMueXlbZl0pO2guc2V0SW5wdXQoZSxnLnl5KSxnLnl5LmxleGVyPWgsZy55eS5wYXJzZXI9dGhpcywidW5kZWZpbmVkIj09dHlwZW9mIGgueXlsbG9jJiYoaC55eWxsb2M9e30pO3ZhciB5PWgueXlsbG9jO24ucHVzaCh5KTt2YXIgaz1oLm9wdGlvbnMmJmgub3B0aW9ucy5yYW5nZXM7dGhpcy5wYXJzZUVycm9yPSJmdW5jdGlvbiI9PXR5cGVvZiBnLnl5LnBhcnNlRXJyb3I/Zy55eS5wYXJzZUVycm9yOk9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO190b2tlbl9zdGFjazp2YXIgVD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPWgubGV4KCl8fHUsIm51bWJlciIhPXR5cGVvZiBlJiYoZT1hLnN5bWJvbHNfW2VdfHxlKSxlfTtmb3IodmFyIE49e30sdixiLCQsXyxDLEQscCxFLHg7Oyl7aWYoJD10W3QubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNbJF0/Xz10aGlzLmRlZmF1bHRBY3Rpb25zWyRdOigobnVsbD09PXZ8fCJ1bmRlZmluZWQiPT10eXBlb2YgdikmJih2PVQoKSksXz1sWyRdJiZsWyRdW3ZdKSwidW5kZWZpbmVkIj09dHlwZW9mIF98fCFfLmxlbmd0aHx8IV9bMF0pe3ZhciBJPSIiO2ZvcihEIGluIHg9W10sbFskXSl0aGlzLnRlcm1pbmFsc19bRF0mJkQ+MiYmeC5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRF0rIiciKTtJPWguc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGkrMSkrIjpcbiIraC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIit4LmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19bdl18fHYpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhpKzEpKyI6IFVuZXhwZWN0ZWQgIisodj09dT8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t2XXx8dikrIiciKSx0aGlzLnBhcnNlRXJyb3IoSSx7dGV4dDpoLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t2XXx8dixsaW5lOmgueXlsaW5lbm8sbG9jOnksZXhwZWN0ZWQ6eH0pfWlmKF9bMF1pbnN0YW5jZW9mIEFycmF5JiYxPF8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIrJCsiLCB0b2tlbjogIit2KTtzd2l0Y2goX1swXSl7Y2FzZSAxOnQucHVzaCh2KSxvLnB1c2goaC55eXRleHQpLG4ucHVzaChoLnl5bGxvYyksdC5wdXNoKF9bMV0pLHY9bnVsbCxiPyh2PWIsYj1udWxsKTooZD1oLnl5bGVuZyxzPWgueXl0ZXh0LGk9aC55eWxpbmVubyx5PWgueXlsbG9jLDA8YyYmYy0tKTticmVhaztjYXNlIDI6aWYocD10aGlzLnByb2R1Y3Rpb25zX1tfWzFdXVsxXSxOLiQ9b1tvLmxlbmd0aC1wXSxOLl8kPXtmaXJzdF9saW5lOm5bbi5sZW5ndGgtKHB8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTpuW24ubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46bltuLmxlbmd0aC0ocHx8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuW24ubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxrJiYoTi5fJC5yYW5nZT1bbltuLmxlbmd0aC0ocHx8MSldLnJhbmdlWzBdLG5bbi5sZW5ndGgtMV0ucmFuZ2VbMV1dKSxDPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShOLFtzLGQsaSxnLnl5LF9bMV0sbyxuXS5jb25jYXQobSkpLCJ1bmRlZmluZWQiIT10eXBlb2YgQylyZXR1cm4gQztwJiYodD10LnNsaWNlKDAsMiooLTEqcCkpLG89by5zbGljZSgwLC0xKnApLG49bi5zbGljZSgwLC0xKnApKSx0LnB1c2godGhpcy5wcm9kdWN0aW9uc19bX1sxXV1bMF0pLG8ucHVzaChOLiQpLG4ucHVzaChOLl8kKSxFPWxbdFt0Lmxlbmd0aC0yXV1bdFt0Lmxlbmd0aC0xXV0sdC5wdXNoKEUpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fTtyZXR1cm4gZS5wcm90b3R5cGU9cm8scm8uUGFyc2VyPWUsbmV3IGV9KCk7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1aXJlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUmJihlLnBhcnNlcj10LGUuUGFyc2VyPXQuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdC5wYXJzZS5hcHBseSh0LGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbigpe30scmVxdWlyZS5tYWluPT09YSYmZS5tYWluKHByb2Nlc3MuYXJndi5zbGljZSgxKSkpLGEuZXhwb3J0c30oKSxyZXF1aXJlWyIuL3Njb3BlIl09ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1bXS5pbmRleE9mLHQ7ZS5TY29wZT10PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShhLHQsbyxuKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxlKTt2YXIgcixsO3RoaXMucGFyZW50PWEsdGhpcy5leHByZXNzaW9ucz10LHRoaXMubWV0aG9kPW8sdGhpcy5yZWZlcmVuY2VkVmFycz1uLHRoaXMudmFyaWFibGVzPVt7bmFtZToiYXJndW1lbnRzIix0eXBlOiJhcmd1bWVudHMifV0sdGhpcy5jb21tZW50cz17fSx0aGlzLnBvc2l0aW9ucz17fSx0aGlzLnBhcmVudHx8KHRoaXMudXRpbGl0aWVzPXt9KSx0aGlzLnJvb3Q9bnVsbD09KHI9bnVsbD09KGw9dGhpcy5wYXJlbnQpP3ZvaWQgMDpsLnJvb3QpP3RoaXM6cn1yZXR1cm4gX2NyZWF0ZUNsYXNzKGUsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24gYWRkKGUsYSx0KXtyZXR1cm4gdGhpcy5zaGFyZWQmJiF0P3RoaXMucGFyZW50LmFkZChlLGEsdCk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucG9zaXRpb25zLGUpP3RoaXMudmFyaWFibGVzW3RoaXMucG9zaXRpb25zW2VdXS50eXBlPWE6dGhpcy5wb3NpdGlvbnNbZV09dGhpcy52YXJpYWJsZXMucHVzaCh7bmFtZTplLHR5cGU6YX0pLTF9fSx7a2V5OiJuYW1lZE1ldGhvZCIsdmFsdWU6ZnVuY3Rpb24gbmFtZWRNZXRob2QoKXt2YXIgZTtyZXR1cm4obnVsbD09KGU9dGhpcy5tZXRob2QpP3ZvaWQgMDplLm5hbWUpfHwhdGhpcy5wYXJlbnQ/dGhpcy5tZXRob2Q6dGhpcy5wYXJlbnQubmFtZWRNZXRob2QoKX19LHtrZXk6ImZpbmQiLHZhbHVlOmZ1bmN0aW9uIGZpbmQoZSl7dmFyIGE9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ2YXIiO3JldHVybiEhdGhpcy5jaGVjayhlKXx8KHRoaXMuYWRkKGUsYSksITEpfX0se2tleToicGFyYW1ldGVyIix2YWx1ZTpmdW5jdGlvbiBwYXJhbWV0ZXIoZSl7cmV0dXJuIHRoaXMuc2hhcmVkJiZ0aGlzLnBhcmVudC5jaGVjayhlLCEwKT92b2lkIDA6dGhpcy5hZGQoZSwicGFyYW0iKX19LHtrZXk6ImNoZWNrIix2YWx1ZTpmdW5jdGlvbiBjaGVjayhlKXt2YXIgYTtyZXR1cm4hISh0aGlzLnR5cGUoZSl8fChudWxsPT0oYT10aGlzLnBhcmVudCk/dm9pZCAwOmEuY2hlY2soZSkpKX19LHtrZXk6InRlbXBvcmFyeSIsdmFsdWU6ZnVuY3Rpb24gdGVtcG9yYXJ5KGUsYSl7dmFyIHQ9ISEoMjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pJiZhcmd1bWVudHNbMl0sbyxuLHIsbCxzLGk7cmV0dXJuIHQ/KGk9ZS5jaGFyQ29kZUF0KDApLG49MTIyLG89bi1pLGw9aSthJShvKzEpLHI9X1N0cmluZ2Zyb21DaGFyQ29kZShsKSxzPV9NYXRoZmxvb3IoYS8obysxKSksIiIrcisoc3x8IiIpKToiIitlKyhhfHwiIil9fSx7a2V5OiJ0eXBlIix2YWx1ZTpmdW5jdGlvbiB0eXBlKGUpe3ZhciBhLHQsbyxuO2ZvcihvPXRoaXMudmFyaWFibGVzLGE9MCx0PW8ubGVuZ3RoO2E8dDthKyspaWYobj1vW2FdLG4ubmFtZT09PWUpcmV0dXJuIG4udHlwZTtyZXR1cm4gbnVsbH19LHtrZXk6ImZyZWVWYXJpYWJsZSIsdmFsdWU6ZnVuY3Rpb24gZnJlZVZhcmlhYmxlKGUpe3ZhciB0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxvLG4scjtmb3Iobz0wO3I9dGhpcy50ZW1wb3JhcnkoZSxvLHQuc2luZ2xlKSwhISh0aGlzLmNoZWNrKHIpfHwwPD1hLmNhbGwodGhpcy5yb290LnJlZmVyZW5jZWRWYXJzLHIpKTspbysrO3JldHVybihudWxsPT0obj10LnJlc2VydmUpfHxuKSYmdGhpcy5hZGQociwidmFyIiwhMCkscn19LHtrZXk6ImFzc2lnbiIsdmFsdWU6ZnVuY3Rpb24gYXNzaWduKGUsYSl7cmV0dXJuIHRoaXMuYWRkKGUse3ZhbHVlOmEsYXNzaWduZWQ6ITB9LCEwKSx0aGlzLmhhc0Fzc2lnbm1lbnRzPSEwfX0se2tleToiaGFzRGVjbGFyYXRpb25zIix2YWx1ZTpmdW5jdGlvbiBoYXNEZWNsYXJhdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGVjbGFyZWRWYXJpYWJsZXMoKS5sZW5ndGh9fSx7a2V5OiJkZWNsYXJlZFZhcmlhYmxlcyIsdmFsdWU6ZnVuY3Rpb24gZGVjbGFyZWRWYXJpYWJsZXMoKXt2YXIgZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSx0LG8sbjtmb3Iobz10aGlzLnZhcmlhYmxlcyxuPVtdLGE9MCx0PW8ubGVuZ3RoO2E8dDthKyspZT1vW2FdLCJ2YXIiPT09ZS50eXBlJiZuLnB1c2goZS5uYW1lKTtyZXR1cm4gbn0uY2FsbCh0aGlzKS5zb3J0KCl9fSx7a2V5OiJhc3NpZ25lZFZhcmlhYmxlcyIsdmFsdWU6ZnVuY3Rpb24gYXNzaWduZWRWYXJpYWJsZXMoKXt2YXIgZSxhLHQsbyxuO2Zvcih0PXRoaXMudmFyaWFibGVzLG89W10sZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyluPXRbZV0sbi50eXBlLmFzc2lnbmVkJiZvLnB1c2gobi5uYW1lKyIgPSAiK24udHlwZS52YWx1ZSk7cmV0dXJuIG99fV0pLGV9KCl9LmNhbGwodGhpcykse2V4cG9ydHM6ZX0uZXhwb3J0c30oKSxyZXF1aXJlWyIuL25vZGVzIl09ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1bXS5pbmRleE9mLHQ9W10uc3BsaWNlLG49W10uc2xpY2UscixzLGQsbyxsLGMsaSxwLHUsbSxoLGcsZix5LGssVCxOLHYsYiwkLF8sQyxELEUseCxJLFMsQSxSLE8sTCxGLHcsUCxqLE0sVSxWLEIsRyxILFcsWCxZLHEseixKLEssWixRLGVlLGFlLHRlLG9lLG5lLHJlLGxlLHNlLGllLGRlLGNlLHBlLHVlLG1lLGhlLGdlLGZlLHllLGtlLFRlLE5lLHZlLGJlLCRlLF9lLENlLERlLEVlLHhlLEllLFNlLEFlLFJlLE9lLExlLEZlLHdlLFBlLGplLE1lLFVlLFZlLEJlLEdlLEhlLFdlLFhlLFllLHFlLHplLEplLEtlLFplLFFlLGVhLGFhLHRhLG9hLG5hLHJhLGxhLHNhO0Vycm9yLnN0YWNrVHJhY2VMaW1pdD1JbmZpbml0eTt2YXIgaWE9cmVxdWlyZSgiLi9zY29wZSIpO3llPWlhLlNjb3BlO3ZhciBkYT1yZXF1aXJlKCIuL2xleGVyIik7SmU9ZGEuaXNVbmFzc2lnbmFibGUsRz1kYS5KU19GT1JCSURERU47dmFyIGNhPXJlcXVpcmUoIi4vaGVscGVycyIpO1VlPWNhLmNvbXBhY3QsSGU9Y2EuZmxhdHRlbixHZT1jYS5leHRlbmQsWmU9Y2EubWVyZ2UsVmU9Y2EuZGVsLG9hPWNhLnN0YXJ0cyxCZT1jYS5lbmRzLHRhPWNhLnNvbWUsamU9Y2EuYWRkRGF0YVRvTm9kZSxNZT1jYS5hdHRhY2hDb21tZW50c1RvTm9kZSxLZT1jYS5sb2NhdGlvbkRhdGFUb1N0cmluZyxuYT1jYS50aHJvd1N5bnRheEVycm9yLGUuZXh0ZW5kPUdlLGUuYWRkRGF0YVRvTm9kZT1qZSx3ZT1mdW5jdGlvbigpe3JldHVybiEwfSx0ZT1mdW5jdGlvbigpe3JldHVybiExfSxFZT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0ZWQ9IXRoaXMubmVnYXRlZCx0aGlzfSxlLkNvZGVGcmFnbWVudD1nPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShhLHQpe19jbGFzc0NhbGxDaGVjayh0aGlzLGUpO3ZhciBvO3RoaXMuY29kZT0iIit0LHRoaXMudHlwZT0obnVsbD09YXx8bnVsbD09KG89YS5jb25zdHJ1Y3Rvcik/dm9pZCAwOm8ubmFtZSl8fCJ1bmtub3duIix0aGlzLmxvY2F0aW9uRGF0YT1udWxsPT1hP3ZvaWQgMDphLmxvY2F0aW9uRGF0YSx0aGlzLmNvbW1lbnRzPW51bGw9PWE/dm9pZCAwOmEuY29tbWVudHN9cmV0dXJuIF9jcmVhdGVDbGFzcyhlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24gdG9TdHJpbmcoKXtyZXR1cm4iIit0aGlzLmNvZGUrKHRoaXMubG9jYXRpb25EYXRhPyI6ICIrS2UodGhpcy5sb2NhdGlvbkRhdGEpOiIiKX19XSksZX0oKSxXZT1mdW5jdGlvbihlKXt2YXIgYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdCxvLG47Zm9yKG49W10sdD0wLG89ZS5sZW5ndGg7dDxvO3QrKylhPWVbdF0sbi5wdXNoKGEuY29kZSk7cmV0dXJuIG59KCkuam9pbigiIil9LGUuQmFzZT1sPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsZSl9cmV0dXJuIF9jcmVhdGVDbGFzcyhlLFt7a2V5OiJjb21waWxlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlKGUsYSl7cmV0dXJuIFdlKHRoaXMuY29tcGlsZVRvRnJhZ21lbnRzKGUsYSkpfX0se2tleToiY29tcGlsZVdpdGhvdXRDb21tZW50cyIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVdpdGhvdXRDb21tZW50cyhlLGEpe3ZhciB0PTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiY29tcGlsZSIsbyxuO3JldHVybiB0aGlzLmNvbW1lbnRzJiYodGhpcy5pZ25vcmVUaGVzZUNvbW1lbnRzVGVtcG9yYXJpbHk9dGhpcy5jb21tZW50cyxkZWxldGUgdGhpcy5jb21tZW50cyksbj10aGlzLnVud3JhcEFsbCgpLG4uY29tbWVudHMmJihuLmlnbm9yZVRoZXNlQ29tbWVudHNUZW1wb3JhcmlseT1uLmNvbW1lbnRzLGRlbGV0ZSBuLmNvbW1lbnRzKSxvPXRoaXNbdF0oZSxhKSx0aGlzLmlnbm9yZVRoZXNlQ29tbWVudHNUZW1wb3JhcmlseSYmKHRoaXMuY29tbWVudHM9dGhpcy5pZ25vcmVUaGVzZUNvbW1lbnRzVGVtcG9yYXJpbHksZGVsZXRlIHRoaXMuaWdub3JlVGhlc2VDb21tZW50c1RlbXBvcmFyaWx5KSxuLmlnbm9yZVRoZXNlQ29tbWVudHNUZW1wb3JhcmlseSYmKG4uY29tbWVudHM9bi5pZ25vcmVUaGVzZUNvbW1lbnRzVGVtcG9yYXJpbHksZGVsZXRlIG4uaWdub3JlVGhlc2VDb21tZW50c1RlbXBvcmFyaWx5KSxvfX0se2tleToiY29tcGlsZU5vZGVXaXRob3V0Q29tbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlV2l0aG91dENvbW1lbnRzKGUsYSl7cmV0dXJuIHRoaXMuY29tcGlsZVdpdGhvdXRDb21tZW50cyhlLGEsImNvbXBpbGVOb2RlIil9fSx7a2V5OiJjb21waWxlVG9GcmFnbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVUb0ZyYWdtZW50cyhlLGEpe3ZhciB0LG87cmV0dXJuIGU9R2Uoe30sZSksYSYmKGUubGV2ZWw9YSksbz10aGlzLnVuZm9sZFNvYWsoZSl8fHRoaXMsby50YWI9ZS5pbmRlbnQsdD1lLmxldmVsIT09eiYmby5pc1N0YXRlbWVudChlKT9vLmNvbXBpbGVDbG9zdXJlKGUpOm8uY29tcGlsZU5vZGUoZSksdGhpcy5jb21waWxlQ29tbWVudEZyYWdtZW50cyhlLG8sdCksdH19LHtrZXk6ImNvbXBpbGVUb0ZyYWdtZW50c1dpdGhvdXRDb21tZW50cyIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVRvRnJhZ21lbnRzV2l0aG91dENvbW1lbnRzKGUsYSl7cmV0dXJuIHRoaXMuY29tcGlsZVdpdGhvdXRDb21tZW50cyhlLGEsImNvbXBpbGVUb0ZyYWdtZW50cyIpfX0se2tleToiY29tcGlsZUNsb3N1cmUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVDbG9zdXJlKGUpe3ZhciBhLHQsbyxuLGwscyxpLGQ7c3dpdGNoKChuPXRoaXMuanVtcHMoKSkmJm4uZXJyb3IoImNhbm5vdCB1c2UgYSBwdXJlIHN0YXRlbWVudCBpbiBhbiBleHByZXNzaW9uIiksZS5zaGFyZWRTY29wZT0hMCxvPW5ldyBoKFtdLGMud3JhcChbdGhpc10pKSxhPVtdLHRoaXMuY29udGFpbnMoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBfZX0pP28uYm91bmQ9ITA6KCh0PXRoaXMuY29udGFpbnMocWUpKXx8dGhpcy5jb250YWlucyh6ZSkpJiYoYT1bbmV3IEllXSx0PyhsPSJhcHBseSIsYS5wdXNoKG5ldyBSKCJhcmd1bWVudHMiKSkpOmw9ImNhbGwiLG89bmV3IExlKG8sW25ldyByKG5ldyBwZShsKSldKSkscz1uZXcgdShvLGEpLmNvbXBpbGVOb2RlKGUpLCExKXtjYXNlIShvLmlzR2VuZXJhdG9yfHwobnVsbD09KGk9by5iYXNlKT92b2lkIDA6aS5pc0dlbmVyYXRvcikpOnMudW5zaGlmdCh0aGlzLm1ha2VDb2RlKCIoeWllbGQqICIpKSxzLnB1c2godGhpcy5tYWtlQ29kZSgiKSIpKTticmVhaztjYXNlIShvLmlzQXN5bmN8fChudWxsPT0oZD1vLmJhc2UpP3ZvaWQgMDpkLmlzQXN5bmMpKTpzLnVuc2hpZnQodGhpcy5tYWtlQ29kZSgiKGF3YWl0ICIpKSxzLnB1c2godGhpcy5tYWtlQ29kZSgiKSIpKX1yZXR1cm4gc319LHtrZXk6ImNvbXBpbGVDb21tZW50RnJhZ21lbnRzIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlQ29tbWVudEZyYWdtZW50cyhlLHQsbyl7dmFyIG4scixsLHMsaSxkLGMscDtpZighdC5jb21tZW50cylyZXR1cm4gbztmb3IocD1mdW5jdGlvbihlKXt2YXIgYTtyZXR1cm4gZS51bnNoaWZ0P2xhKG8sZSk6KDAhPT1vLmxlbmd0aCYmKGE9b1tvLmxlbmd0aC0xXSxlLm5ld0xpbmUmJiIiIT09YS5jb2RlJiYhL1xuXHMqJC8udGVzdChhLmNvZGUpJiYoZS5jb2RlPSJcbiIrZS5jb2RlKSksby5wdXNoKGUpKX0sYz10LmNvbW1lbnRzLGk9MCxkPWMubGVuZ3RoO2k8ZDtpKyspKGw9Y1tpXSwhISgwPmEuY2FsbCh0aGlzLmNvbXBpbGVkQ29tbWVudHMsbCkpKSYmKHRoaXMuY29tcGlsZWRDb21tZW50cy5wdXNoKGwpLHM9bC5oZXJlP25ldyBTKGwpLmNvbXBpbGVOb2RlKGUpOm5ldyBKKGwpLmNvbXBpbGVOb2RlKGUpLHMuaXNIZXJlQ29tbWVudCYmIXMubmV3TGluZXx8dC5pbmNsdWRlQ29tbWVudEZyYWdtZW50cygpP3Aocyk6KDA9PT1vLmxlbmd0aCYmby5wdXNoKHRoaXMubWFrZUNvZGUoIiIpKSxzLnVuc2hpZnQ/KG51bGw9PShuPW9bMF0pLnByZWNlZGluZ0NvbW1lbnRzJiYobi5wcmVjZWRpbmdDb21tZW50cz1bXSksb1swXS5wcmVjZWRpbmdDb21tZW50cy5wdXNoKHMpKToobnVsbD09KHI9b1tvLmxlbmd0aC0xXSkuZm9sbG93aW5nQ29tbWVudHMmJihyLmZvbGxvd2luZ0NvbW1lbnRzPVtdKSxvW28ubGVuZ3RoLTFdLmZvbGxvd2luZ0NvbW1lbnRzLnB1c2gocykpKSk7cmV0dXJuIG99fSx7a2V5OiJjYWNoZSIsdmFsdWU6ZnVuY3Rpb24gY2FjaGUoZSxhLHQpe3ZhciBvLG4scjtyZXR1cm4gbz1udWxsPT10P3RoaXMuc2hvdWxkQ2FjaGUoKTp0KHRoaXMpLG8/KG49bmV3IFIoZS5zY29wZS5mcmVlVmFyaWFibGUoInJlZiIpKSxyPW5ldyBkKG4sdGhpcyksYT9bci5jb21waWxlVG9GcmFnbWVudHMoZSxhKSxbdGhpcy5tYWtlQ29kZShuLnZhbHVlKV1dOltyLG5dKToobj1hP3RoaXMuY29tcGlsZVRvRnJhZ21lbnRzKGUsYSk6dGhpcyxbbixuXSl9fSx7a2V5OiJob2lzdCIsdmFsdWU6ZnVuY3Rpb24gaG9pc3QoKXt2YXIgZSxhLHQ7cmV0dXJuIHRoaXMuaG9pc3RlZD0hMCx0PW5ldyBBKHRoaXMpLGU9dGhpcy5jb21waWxlTm9kZSxhPXRoaXMuY29tcGlsZVRvRnJhZ21lbnRzLHRoaXMuY29tcGlsZU5vZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHQudXBkYXRlKGUsYSl9LHRoaXMuY29tcGlsZVRvRnJhZ21lbnRzPWZ1bmN0aW9uKGUpe3JldHVybiB0LnVwZGF0ZShhLGUpfSx0fX0se2tleToiY2FjaGVUb0NvZGVGcmFnbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNhY2hlVG9Db2RlRnJhZ21lbnRzKGUpe3JldHVybltXZShlWzBdKSxXZShlWzFdKV19fSx7a2V5OiJtYWtlUmV0dXJuIix2YWx1ZTpmdW5jdGlvbiBtYWtlUmV0dXJuKGUpe3ZhciBhO3JldHVybiBhPXRoaXMudW53cmFwQWxsKCksZT9uZXcgdShuZXcgSyhlKyIucHVzaCIpLFthXSk6bmV3IGdlKGEpfX0se2tleToiY29udGFpbnMiLHZhbHVlOmZ1bmN0aW9uIGNvbnRhaW5zKGUpe3ZhciBhO3JldHVybiBhPXZvaWQgMCx0aGlzLnRyYXZlcnNlQ2hpbGRyZW4oITEsZnVuY3Rpb24odCl7aWYoZSh0KSlyZXR1cm4gYT10LCExfSksYX19LHtrZXk6Imxhc3ROb2RlIix2YWx1ZTpmdW5jdGlvbiBsYXN0Tm9kZShlKXtyZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZVtlLmxlbmd0aC0xXX19LHtrZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbiB0b1N0cmluZygpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmNvbnN0cnVjdG9yLm5hbWUsdDtyZXR1cm4gdD0iXG4iK2UrYSx0aGlzLnNvYWsmJih0Kz0iPyIpLHRoaXMuZWFjaENoaWxkKGZ1bmN0aW9uKGEpe3JldHVybiB0Kz1hLnRvU3RyaW5nKGUrRGUpfSksdH19LHtrZXk6ImVhY2hDaGlsZCIsdmFsdWU6ZnVuY3Rpb24gZWFjaENoaWxkKGUpe3ZhciBhLHQsbyxuLHIsbCxzLGk7aWYoIXRoaXMuY2hpbGRyZW4pcmV0dXJuIHRoaXM7Zm9yKHM9dGhpcy5jaGlsZHJlbixvPTAscj1zLmxlbmd0aDtvPHI7bysrKWlmKGE9c1tvXSx0aGlzW2FdKWZvcihpPUhlKFt0aGlzW2FdXSksbj0wLGw9aS5sZW5ndGg7bjxsO24rKylpZih0PWlbbl0sITE9PT1lKHQpKXJldHVybiB0aGlzO3JldHVybiB0aGlzfX0se2tleToidHJhdmVyc2VDaGlsZHJlbiIsdmFsdWU6ZnVuY3Rpb24gdHJhdmVyc2VDaGlsZHJlbihlLGEpe3JldHVybiB0aGlzLmVhY2hDaGlsZChmdW5jdGlvbih0KXt2YXIgbztpZihvPWEodCksITEhPT1vKXJldHVybiB0LnRyYXZlcnNlQ2hpbGRyZW4oZSxhKX0pfX0se2tleToicmVwbGFjZUluQ29udGV4dCIsdmFsdWU6ZnVuY3Rpb24gcmVwbGFjZUluQ29udGV4dChlLGEpe3ZhciBvLG4scixsLHMsaSxkLGMscCx1O2lmKCF0aGlzLmNoaWxkcmVuKXJldHVybiExO2ZvcihwPXRoaXMuY2hpbGRyZW4scz0wLGQ9cC5sZW5ndGg7czxkO3MrKylpZihvPXBbc10scj10aGlzW29dKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGw9aT0wLGM9ci5sZW5ndGg7aTxjO2w9KytpKXtpZihuPXJbbF0sZShuKSlyZXR1cm4gdC5hcHBseShyLFtsLGwtbCsxXS5jb25jYXQodT1hKG4sdGhpcykpKSx1LCEwO2lmKG4ucmVwbGFjZUluQ29udGV4dChlLGEpKXJldHVybiEwfWVsc2V7aWYoZShyKSlyZXR1cm4gdGhpc1tvXT1hKHIsdGhpcyksITA7aWYoci5yZXBsYWNlSW5Db250ZXh0KGUsYSkpcmV0dXJuITB9fX0se2tleToiaW52ZXJ0Iix2YWx1ZTpmdW5jdGlvbiBpbnZlcnQoKXtyZXR1cm4gbmV3IHNlKCIhIix0aGlzKX19LHtrZXk6InVud3JhcEFsbCIsdmFsdWU6ZnVuY3Rpb24gdW53cmFwQWxsKCl7dmFyIGU7Zm9yKGU9dGhpcztlIT09KGU9ZS51bndyYXAoKSk7KWNvbnRpbnVlO3JldHVybiBlfX0se2tleToidXBkYXRlTG9jYXRpb25EYXRhSWZNaXNzaW5nIix2YWx1ZTpmdW5jdGlvbiB1cGRhdGVMb2NhdGlvbkRhdGFJZk1pc3NpbmcoZSl7cmV0dXJuIHRoaXMubG9jYXRpb25EYXRhJiYhdGhpcy5mb3JjZVVwZGF0ZUxvY2F0aW9uP3RoaXM6KGRlbGV0ZSB0aGlzLmZvcmNlVXBkYXRlTG9jYXRpb24sdGhpcy5sb2NhdGlvbkRhdGE9ZSx0aGlzLmVhY2hDaGlsZChmdW5jdGlvbihhKXtyZXR1cm4gYS51cGRhdGVMb2NhdGlvbkRhdGFJZk1pc3NpbmcoZSl9KSl9fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24gZXJyb3IoZSl7cmV0dXJuIG5hKGUsdGhpcy5sb2NhdGlvbkRhdGEpfX0se2tleToibWFrZUNvZGUiLHZhbHVlOmZ1bmN0aW9uIG1ha2VDb2RlKGUpe3JldHVybiBuZXcgZyh0aGlzLGUpfX0se2tleToid3JhcEluUGFyZW50aGVzZXMiLHZhbHVlOmZ1bmN0aW9uIHdyYXBJblBhcmVudGhlc2VzKGUpe3JldHVyblt0aGlzLm1ha2VDb2RlKCIoIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZSksW3RoaXMubWFrZUNvZGUoIikiKV0pfX0se2tleToid3JhcEluQnJhY2VzIix2YWx1ZTpmdW5jdGlvbiB3cmFwSW5CcmFjZXMoZSl7cmV0dXJuW3RoaXMubWFrZUNvZGUoInsiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShlKSxbdGhpcy5tYWtlQ29kZSgifSIpXSl9fSx7a2V5OiJqb2luRnJhZ21lbnRBcnJheXMiLHZhbHVlOmZ1bmN0aW9uIGpvaW5GcmFnbWVudEFycmF5cyhlLGEpe3ZhciB0LG8sbixyLGw7Zm9yKHQ9W10sbj1yPTAsbD1lLmxlbmd0aDtyPGw7bj0rK3Ipbz1lW25dLG4mJnQucHVzaCh0aGlzLm1ha2VDb2RlKGEpKSx0PXQuY29uY2F0KG8pO3JldHVybiB0fX1dKSxlfSgpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bXSxlLnByb3RvdHlwZS5pc1N0YXRlbWVudD10ZSxlLnByb3RvdHlwZS5jb21waWxlZENvbW1lbnRzPVtdLGUucHJvdG90eXBlLmluY2x1ZGVDb21tZW50RnJhZ21lbnRzPXRlLGUucHJvdG90eXBlLmp1bXBzPXRlLGUucHJvdG90eXBlLnNob3VsZENhY2hlPXdlLGUucHJvdG90eXBlLmlzQ2hhaW5hYmxlPXRlLGUucHJvdG90eXBlLmlzQXNzaWduYWJsZT10ZSxlLnByb3RvdHlwZS5pc051bWJlcj10ZSxlLnByb3RvdHlwZS51bndyYXA9RWUsZS5wcm90b3R5cGUudW5mb2xkU29haz10ZSxlLnByb3RvdHlwZS5hc3NpZ25zPXRlLGV9LmNhbGwodGhpcyksZS5Ib2lzdFRhcmdldD1BPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHQ9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQuc291cmNlPWUsdC5vcHRpb25zPXt9LHQudGFyZ2V0RnJhZ21lbnRzPXtmcmFnbWVudHM6W119LHR9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLG51bGwsW3trZXk6ImV4cGFuZCIsdmFsdWU6ZnVuY3Rpb24gZXhwYW5kKGUpe3ZhciBhLG8sbixyO2ZvcihvPW49ZS5sZW5ndGgtMTswPD1uO289bis9LTEpYT1lW29dLGEuZnJhZ21lbnRzJiYodC5hcHBseShlLFtvLG8tbysxXS5jb25jYXQocj10aGlzLmV4cGFuZChhLmZyYWdtZW50cykpKSxyKTtyZXR1cm4gZX19XSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImlzU3RhdGVtZW50Iix2YWx1ZTpmdW5jdGlvbiBpc1N0YXRlbWVudChlKXtyZXR1cm4gdGhpcy5zb3VyY2UuaXNTdGF0ZW1lbnQoZSl9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uIHVwZGF0ZShlLGEpe3JldHVybiB0aGlzLnRhcmdldEZyYWdtZW50cy5mcmFnbWVudHM9ZS5jYWxsKHRoaXMuc291cmNlLFplKGEsdGhpcy5vcHRpb25zKSl9fSx7a2V5OiJjb21waWxlVG9GcmFnbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVUb0ZyYWdtZW50cyhlLGEpe3JldHVybiB0aGlzLm9wdGlvbnMuaW5kZW50PWUuaW5kZW50LHRoaXMub3B0aW9ucy5sZXZlbD1udWxsPT1hP2UubGV2ZWw6YSxbdGhpcy50YXJnZXRGcmFnbWVudHNdfX0se2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3JldHVybiB0aGlzLmNvbXBpbGVUb0ZyYWdtZW50cyhlKX19LHtrZXk6ImNvbXBpbGVDbG9zdXJlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlQ2xvc3VyZShlKXtyZXR1cm4gdGhpcy5jb21waWxlVG9GcmFnbWVudHMoZSl9fV0pLGF9KGwpLGUuQmxvY2s9Yz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCk7dmFyIGE9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzKSk7cmV0dXJuIGEuZXhwcmVzc2lvbnM9VWUoSGUoZXx8W10pKSxhfXJldHVybiBfaW5oZXJpdHModCxlKSxfY3JlYXRlQ2xhc3ModCxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24gcHVzaChlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9ucy5wdXNoKGUpLHRoaXN9fSx7a2V5OiJwb3AiLHZhbHVlOmZ1bmN0aW9uIHBvcCgpe3JldHVybiB0aGlzLmV4cHJlc3Npb25zLnBvcCgpfX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24gdW5zaGlmdChlKXtyZXR1cm4gdGhpcy5leHByZXNzaW9ucy51bnNoaWZ0KGUpLHRoaXN9fSx7a2V5OiJ1bndyYXAiLHZhbHVlOmZ1bmN0aW9uIHVud3JhcCgpe3JldHVybiAxPT09dGhpcy5leHByZXNzaW9ucy5sZW5ndGg/dGhpcy5leHByZXNzaW9uc1swXTp0aGlzfX0se2tleToiaXNFbXB0eSIsdmFsdWU6ZnVuY3Rpb24gaXNFbXB0eSgpe3JldHVybiF0aGlzLmV4cHJlc3Npb25zLmxlbmd0aH19LHtrZXk6ImlzU3RhdGVtZW50Iix2YWx1ZTpmdW5jdGlvbiBpc1N0YXRlbWVudChlKXt2YXIgYSx0LG8sbjtmb3Iobj10aGlzLmV4cHJlc3Npb25zLHQ9MCxvPW4ubGVuZ3RoO3Q8bzt0KyspaWYoYT1uW3RdLGEuaXNTdGF0ZW1lbnQoZSkpcmV0dXJuITA7cmV0dXJuITF9fSx7a2V5OiJqdW1wcyIsdmFsdWU6ZnVuY3Rpb24ganVtcHMoZSl7dmFyIGEsdCxvLG4scjtmb3Iocj10aGlzLmV4cHJlc3Npb25zLHQ9MCxuPXIubGVuZ3RoO3Q8bjt0KyspaWYoYT1yW3RdLG89YS5qdW1wcyhlKSlyZXR1cm4gb319LHtrZXk6Im1ha2VSZXR1cm4iLHZhbHVlOmZ1bmN0aW9uIG1ha2VSZXR1cm4oZSl7dmFyIGEsdDtmb3IodD10aGlzLmV4cHJlc3Npb25zLmxlbmd0aDt0LS07KXthPXRoaXMuZXhwcmVzc2lvbnNbdF0sdGhpcy5leHByZXNzaW9uc1t0XT1hLm1ha2VSZXR1cm4oZSksYSBpbnN0YW5jZW9mIGdlJiYhYS5leHByZXNzaW9uJiZ0aGlzLmV4cHJlc3Npb25zLnNwbGljZSh0LDEpO2JyZWFrfXJldHVybiB0aGlzfX0se2tleToiY29tcGlsZVRvRnJhZ21lbnRzIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlVG9GcmFnbWVudHMoKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sYT1hcmd1bWVudHNbMV07cmV0dXJuIGUuc2NvcGU/X2dldCh0LnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSksImNvbXBpbGVUb0ZyYWdtZW50cyIsdGhpcykuY2FsbCh0aGlzLGUsYSk6dGhpcy5jb21waWxlUm9vdChlKX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSxvLHIsbCxzLGksZCxjLHAsdTtmb3IodGhpcy50YWI9ZS5pbmRlbnQsdT1lLmxldmVsPT09eixvPVtdLHA9dGhpcy5leHByZXNzaW9ucyxsPXM9MCxkPXAubGVuZ3RoO3M8ZDtsPSsrcyl7aWYoYz1wW2xdLGMuaG9pc3RlZCl7Yy5jb21waWxlVG9GcmFnbWVudHMoZSk7Y29udGludWV9aWYoYz1jLnVuZm9sZFNvYWsoZSl8fGMsYyBpbnN0YW5jZW9mIHQpby5wdXNoKGMuY29tcGlsZU5vZGUoZSkpO2Vsc2UgaWYodSl7aWYoYy5mcm9udD0hMCxyPWMuY29tcGlsZVRvRnJhZ21lbnRzKGUpLCFjLmlzU3RhdGVtZW50KGUpKXtyPVllKHIsdGhpcyk7dmFyIG09bi5jYWxsKHIsLTEpLGg9X3NsaWNlZFRvQXJyYXkobSwxKTtpPWhbMF0sIiI9PT1pLmNvZGV8fGkuaXNDb21tZW50fHxyLnB1c2godGhpcy5tYWtlQ29kZSgiOyIpKX1vLnB1c2gocil9ZWxzZSBvLnB1c2goYy5jb21waWxlVG9GcmFnbWVudHMoZSxYKSl9cmV0dXJuIHU/dGhpcy5zcGFjZWQ/W10uY29uY2F0KHRoaXMuam9pbkZyYWdtZW50QXJyYXlzKG8sIlxuXG4iKSx0aGlzLm1ha2VDb2RlKCJcbiIpKTp0aGlzLmpvaW5GcmFnbWVudEFycmF5cyhvLCJcbiIpOihhPW8ubGVuZ3RoP3RoaXMuam9pbkZyYWdtZW50QXJyYXlzKG8sIiwgIik6W3RoaXMubWFrZUNvZGUoInZvaWQgMCIpXSwxPG8ubGVuZ3RoJiZlLmxldmVsPj1YP3RoaXMud3JhcEluUGFyZW50aGVzZXMoYSk6YSl9fSx7a2V5OiJjb21waWxlUm9vdCIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVJvb3QoZSl7dmFyIGEsdCxvLG4scixsO2ZvcihlLmluZGVudD1lLmJhcmU/IiI6RGUsZS5sZXZlbD16LHRoaXMuc3BhY2VkPSEwLGUuc2NvcGU9bmV3IHllKG51bGwsdGhpcyxudWxsLG51bGw9PShyPWUucmVmZXJlbmNlZFZhcnMpP1tdOnIpLGw9ZS5sb2NhbHN8fFtdLHQ9MCxvPWwubGVuZ3RoO3Q8bzt0Kyspbj1sW3RdLGUuc2NvcGUucGFyYW1ldGVyKG4pO3JldHVybiBhPXRoaXMuY29tcGlsZVdpdGhEZWNsYXJhdGlvbnMoZSksQS5leHBhbmQoYSksYT10aGlzLmNvbXBpbGVDb21tZW50cyhhKSxlLmJhcmU/YTpbXS5jb25jYXQodGhpcy5tYWtlQ29kZSgiKGZ1bmN0aW9uKCkge1xuIiksYSx0aGlzLm1ha2VDb2RlKCJcbn0pLmNhbGwodGhpcyk7XG4iKSl9fSx7a2V5OiJjb21waWxlV2l0aERlY2xhcmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVdpdGhEZWNsYXJhdGlvbnMoZSl7dmFyIGEsdCxvLG4scixsLHMsZCxpLGMscCx1LG0saCxnLGYseTtmb3Iocz1bXSxtPVtdLGg9dGhpcy5leHByZXNzaW9ucyxkPWk9MCxwPWgubGVuZ3RoO2k8cCYmKGw9aFtkXSxsPWwudW53cmFwKCksISEobCBpbnN0YW5jZW9mIEspKTtkPSsraSk7aWYoZT1aZShlLHtsZXZlbDp6fSksZCl7Zz10aGlzLmV4cHJlc3Npb25zLnNwbGljZShkLDllOSk7dmFyIGs9W3RoaXMuc3BhY2VkLCExXTt5PWtbMF0sdGhpcy5zcGFjZWQ9a1sxXTt2YXIgVD1bdGhpcy5jb21waWxlTm9kZShlKSx5XTtzPVRbMF0sdGhpcy5zcGFjZWQ9VFsxXSx0aGlzLmV4cHJlc3Npb25zPWd9bT10aGlzLmNvbXBpbGVOb2RlKGUpO3ZhciBOPWU7aWYoZj1OLnNjb3BlLGYuZXhwcmVzc2lvbnM9PT10aGlzKWlmKHI9ZS5zY29wZS5oYXNEZWNsYXJhdGlvbnMoKSxhPWYuaGFzQXNzaWdubWVudHMscnx8YSl7aWYoZCYmcy5wdXNoKHRoaXMubWFrZUNvZGUoIlxuIikpLHMucHVzaCh0aGlzLm1ha2VDb2RlKHRoaXMudGFiKyJ2YXIgIikpLHIpZm9yKG89Zi5kZWNsYXJlZFZhcmlhYmxlcygpLG49Yz0wLHU9by5sZW5ndGg7Yzx1O249KytjKXtpZih0PW9bbl0scy5wdXNoKHRoaXMubWFrZUNvZGUodCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnNjb3BlLmNvbW1lbnRzLHQpKXt2YXIgdjsodj1zKS5wdXNoLmFwcGx5KHYsX3RvQ29uc3VtYWJsZUFycmF5KGUuc2NvcGUuY29tbWVudHNbdF0pKX1uIT09by5sZW5ndGgtMSYmcy5wdXNoKHRoaXMubWFrZUNvZGUoIiwgIikpfWEmJihyJiZzLnB1c2godGhpcy5tYWtlQ29kZSgiLFxuIisodGhpcy50YWIrRGUpKSkscy5wdXNoKHRoaXMubWFrZUNvZGUoZi5hc3NpZ25lZFZhcmlhYmxlcygpLmpvaW4oIixcbiIrKHRoaXMudGFiK0RlKSkpKSkscy5wdXNoKHRoaXMubWFrZUNvZGUoIjtcbiIrKHRoaXMuc3BhY2VkPyJcbiI6IiIpKSl9ZWxzZSBzLmxlbmd0aCYmbS5sZW5ndGgmJnMucHVzaCh0aGlzLm1ha2VDb2RlKCJcbiIpKTtyZXR1cm4gcy5jb25jYXQobSl9fSx7a2V5OiJjb21waWxlQ29tbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVDb21tZW50cyhlKXt2YXIgdCxvLG4scyxpLGQsYyxwLHUsbCxtLGgsZyxmLHksayxULE4scix2LGIsJCxfLEMsRDtmb3IoaT1jPTAsbD1lLmxlbmd0aDtjPGw7aT0rK2Mpe2lmKG49ZVtpXSxuLnByZWNlZGluZ0NvbW1lbnRzKXtmb3Iocz0iIixyPWUuc2xpY2UoMCxpKzEpLHA9ci5sZW5ndGgtMTswPD1wO3ArPS0xKWlmKHk9cltwXSxkPS9eIHsyLH0vbS5leGVjKHkuY29kZSksZCl7cz1kWzBdO2JyZWFrfWVsc2UgaWYoMDw9YS5jYWxsKHkuY29kZSwiXG4iKSlicmVhaztmb3IodD0iXG4iK3MrZnVuY3Rpb24oKXt2YXIgZSxhLHQscjtmb3IodD1uLnByZWNlZGluZ0NvbW1lbnRzLHI9W10sZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKylvPXRbZV0sby5pc0hlcmVDb21tZW50JiZvLm11bHRpbGluZT9yLnB1c2goZWEoby5jb2RlLHMsITEpKTpyLnB1c2goby5jb2RlKTtyZXR1cm4gcn0oKS5qb2luKCJcbiIrcykucmVwbGFjZSgvXihccyopJC9nbSwiIiksdj1lLnNsaWNlKDAsaSsxKSxrPXU9di5sZW5ndGgtMTswPD11O2s9dSs9LTEpe2lmKHk9dltrXSxnPXkuY29kZS5sYXN0SW5kZXhPZigiXG4iKSwtMT09PWcpaWYoMD09PWspeS5jb2RlPSJcbiIreS5jb2RlLGc9MDtlbHNlIGlmKHkuaXNTdHJpbmdXaXRoSW50ZXJwb2xhdGlvbnMmJiJ7Ij09PXkuY29kZSl0PXQuc2xpY2UoMSkrIlxuIixnPTE7ZWxzZSBjb250aW51ZTtkZWxldGUgbi5wcmVjZWRpbmdDb21tZW50cyx5LmNvZGU9eS5jb2RlLnNsaWNlKDAsZykrdCt5LmNvZGUuc2xpY2UoZyk7YnJlYWt9fWlmKG4uZm9sbG93aW5nQ29tbWVudHMpe2lmKF89bi5mb2xsb3dpbmdDb21tZW50c1swXS50cmFpbCxzPSIiLCEoXyYmMT09PW4uZm9sbG93aW5nQ29tbWVudHMubGVuZ3RoKSlmb3IoZj0hMSxiPWUuc2xpY2UoaSksVD0wLG09Yi5sZW5ndGg7VDxtO1QrKylpZihDPWJbVF0sIWYpe2lmKDA8PWEuY2FsbChDLmNvZGUsIlxuIikpZj0hMDtlbHNlIGNvbnRpbnVlfWVsc2UgaWYoZD0vXiB7Mix9L20uZXhlYyhDLmNvZGUpLGQpe3M9ZFswXTticmVha31lbHNlIGlmKDA8PWEuY2FsbChDLmNvZGUsIlxuIikpYnJlYWs7Zm9yKHQ9MT09PWkmJi9eXHMrJC8udGVzdChlWzBdLmNvZGUpPyIiOl8/IiAiOiJcbiIrcyx0Kz1mdW5jdGlvbigpe3ZhciBlLGEsdCxyO2Zvcih0PW4uZm9sbG93aW5nQ29tbWVudHMscj1bXSxhPTAsZT10Lmxlbmd0aDthPGU7YSsrKW89dFthXSxvLmlzSGVyZUNvbW1lbnQmJm8ubXVsdGlsaW5lP3IucHVzaChlYShvLmNvZGUscywhMSkpOnIucHVzaChvLmNvZGUpO3JldHVybiByfSgpLmpvaW4oIlxuIitzKS5yZXBsYWNlKC9eKFxzKikkL2dtLCIiKSwkPWUuc2xpY2UoaSksRD1OPTAsaD0kLmxlbmd0aDtOPGg7RD0rK04pe2lmKEM9JFtEXSxnPUMuY29kZS5pbmRleE9mKCJcbiIpLC0xPT09ZylpZihEPT09ZS5sZW5ndGgtMSlDLmNvZGUrPSJcbiIsZz1DLmNvZGUubGVuZ3RoO2Vsc2UgaWYoQy5pc1N0cmluZ1dpdGhJbnRlcnBvbGF0aW9ucyYmIn0iPT09Qy5jb2RlKXQrPSJcbiIsZz0wO2Vsc2UgY29udGludWU7ZGVsZXRlIG4uZm9sbG93aW5nQ29tbWVudHMsIlxuIj09PUMuY29kZSYmKHQ9dC5yZXBsYWNlKC9eXG4vLCIiKSksQy5jb2RlPUMuY29kZS5zbGljZSgwLGcpK3QrQy5jb2RlLnNsaWNlKGcpO2JyZWFrfX19cmV0dXJuIGV9fV0sW3trZXk6IndyYXAiLHZhbHVlOmZ1bmN0aW9uIHdyYXAoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgdD9lWzBdOm5ldyB0KGUpfX1dKSx0fShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJleHByZXNzaW9ucyJdLGV9LmNhbGwodGhpcyksZS5MaXRlcmFsPUs9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUpe19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciB0PV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpO3JldHVybiB0LnZhbHVlPWUsdH1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImFzc2lnbnMiLHZhbHVlOmZ1bmN0aW9uIGFzc2lnbnMoZSl7cmV0dXJuIGU9PT10aGlzLnZhbHVlfX0se2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKCl7cmV0dXJuW3RoaXMubWFrZUNvZGUodGhpcy52YWx1ZSldfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uIHRvU3RyaW5nKCl7cmV0dXJuIiAiKyh0aGlzLmlzU3RhdGVtZW50KCk/X2dldChhLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhLnByb3RvdHlwZSksInRvU3RyaW5nIix0aGlzKS5jYWxsKHRoaXMpOnRoaXMuY29uc3RydWN0b3IubmFtZSkrIjogIit0aGlzLnZhbHVlfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuc2hvdWxkQ2FjaGU9dGUsZX0uY2FsbCh0aGlzKSxlLk51bWJlckxpdGVyYWw9cmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShLKSxlLkluZmluaXR5TGl0ZXJhbD1CPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZSgpe3JldHVyblt0aGlzLm1ha2VDb2RlKCIyZTMwOCIpXX19XSksYX0ocmUpLGUuTmFOTGl0ZXJhbD1vZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcywiTmFOIikpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhO3JldHVybiBhPVt0aGlzLm1ha2VDb2RlKCIwLzAiKV0sZS5sZXZlbD49WT90aGlzLndyYXBJblBhcmVudGhlc2VzKGEpOmF9fV0pLGF9KHJlKSxlLlN0cmluZ0xpdGVyYWw9dmU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKCl7dmFyIGU7cmV0dXJuIGU9dGhpcy5jc3g/W3RoaXMubWFrZUNvZGUodGhpcy51bnF1b3RlKCEwLCEwKSldOl9nZXQoYS5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYS5wcm90b3R5cGUpLCJjb21waWxlTm9kZSIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6InVucXVvdGUiLHZhbHVlOmZ1bmN0aW9uIHVucXVvdGUoKXt2YXIgZT0hISgwPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSkmJmFyZ3VtZW50c1swXSxhPSEhKDE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdKSYmYXJndW1lbnRzWzFdLHQ7cmV0dXJuIHQ9dGhpcy52YWx1ZS5zbGljZSgxLC0xKSxlJiYodD10LnJlcGxhY2UoL1xcIi9nLCciJykpLGEmJih0PXQucmVwbGFjZSgvXFxuL2csIlxuIikpLHR9fV0pLGF9KEspLGUuUmVnZXhMaXRlcmFsPW1lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksYX0oSyksZS5QYXNzdGhyb3VnaExpdGVyYWw9Y2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShLKSxlLklkZW50aWZpZXJMaXRlcmFsPVI9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJlYWNoTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZWFjaE5hbWUoZSl7cmV0dXJuIGUodGhpcyl9fV0pLGF9KEspO3JldHVybiBlLnByb3RvdHlwZS5pc0Fzc2lnbmFibGU9d2UsZX0uY2FsbCh0aGlzKSxlLkNTWFRhZz1wPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksYX0oUiksZS5Qcm9wZXJ0eU5hbWU9cGU9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLGF9KEspO3JldHVybiBlLnByb3RvdHlwZS5pc0Fzc2lnbmFibGU9d2UsZX0uY2FsbCh0aGlzKSxlLkNvbXB1dGVkUHJvcGVydHlOYW1lPWY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3JldHVyblt0aGlzLm1ha2VDb2RlKCJbIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcy52YWx1ZS5jb21waWxlVG9GcmFnbWVudHMoZSxYKSksW3RoaXMubWFrZUNvZGUoIl0iKV0pfX1dKSxhfShwZSksZS5TdGF0ZW1lbnRMaXRlcmFsPU5lPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToianVtcHMiLHZhbHVlOmZ1bmN0aW9uIGp1bXBzKGUpe3JldHVybiJicmVhayIhPT10aGlzLnZhbHVlfHwobnVsbD09ZT92b2lkIDA6ZS5sb29wKXx8KG51bGw9PWU/dm9pZCAwOmUuYmxvY2spPyJjb250aW51ZSIhPT10aGlzLnZhbHVlfHxudWxsIT1lJiZlLmxvb3A/dm9pZCAwOnRoaXM6dGhpc319LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZSgpe3JldHVyblt0aGlzLm1ha2VDb2RlKCIiK3RoaXMudGFiK3RoaXMudmFsdWUrIjsiKV19fV0pLGF9KEspO3JldHVybiBlLnByb3RvdHlwZS5pc1N0YXRlbWVudD13ZSxlLnByb3RvdHlwZS5tYWtlUmV0dXJuPUVlLGV9LmNhbGwodGhpcyksZS5UaGlzTGl0ZXJhbD1JZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcywidGhpcyIpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0O3JldHVybiBhPShudWxsPT0odD1lLnNjb3BlLm1ldGhvZCk/dm9pZCAwOnQuYm91bmQpP2Uuc2NvcGUubWV0aG9kLmNvbnRleHQ6dGhpcy52YWx1ZSxbdGhpcy5tYWtlQ29kZShhKV19fV0pLGF9KEspLGUuVW5kZWZpbmVkTGl0ZXJhbD1PZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcywidW5kZWZpbmVkIikpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3JldHVyblt0aGlzLm1ha2VDb2RlKGUubGV2ZWw+PUg/Iih2b2lkIDApIjoidm9pZCAwIildfX1dKSxhfShLKSxlLk51bGxMaXRlcmFsPW5lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzLCJudWxsIikpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShLKSxlLkJvb2xlYW5MaXRlcmFsPWk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShLKSxlLlJldHVybj1nZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCk7dmFyIGE9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzKSk7cmV0dXJuIGEuZXhwcmVzc2lvbj1lLGF9cmV0dXJuIF9pbmhlcml0cyh0LGUpLF9jcmVhdGVDbGFzcyh0LFt7a2V5OiJjb21waWxlVG9GcmFnbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVUb0ZyYWdtZW50cyhlLGEpe3ZhciBvLG47cmV0dXJuIG89bnVsbD09KG49dGhpcy5leHByZXNzaW9uKT92b2lkIDA6bi5tYWtlUmV0dXJuKCksbyYmIShvIGluc3RhbmNlb2YgdCk/by5jb21waWxlVG9GcmFnbWVudHMoZSxhKTpfZ2V0KHQucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQucHJvdG90eXBlKSwiY29tcGlsZVRvRnJhZ21lbnRzIix0aGlzKS5jYWxsKHRoaXMsZSxhKX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgdCxvLG4scjtpZih0PVtdLHRoaXMuZXhwcmVzc2lvbil7Zm9yKHQ9dGhpcy5leHByZXNzaW9uLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHEpLGxhKHQsdGhpcy5tYWtlQ29kZSh0aGlzLnRhYisicmV0dXJuICIpKSxuPTAscj10Lmxlbmd0aDtuPHI7bisrKWlmKG89dFtuXSxvLmlzSGVyZUNvbW1lbnQmJjA8PWEuY2FsbChvLmNvZGUsIlxuIikpby5jb2RlPWVhKG8uY29kZSx0aGlzLnRhYik7ZWxzZSBpZihvLmlzTGluZUNvbW1lbnQpby5jb2RlPSIiK3RoaXMudGFiK28uY29kZTtlbHNlIGJyZWFrfWVsc2UgdC5wdXNoKHRoaXMubWFrZUNvZGUodGhpcy50YWIrInJldHVybiIpKTtyZXR1cm4gdC5wdXNoKHRoaXMubWFrZUNvZGUoIjsiKSksdH19XSksdH0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsiZXhwcmVzc2lvbiJdLGUucHJvdG90eXBlLmlzU3RhdGVtZW50PXdlLGUucHJvdG90eXBlLm1ha2VSZXR1cm49RWUsZS5wcm90b3R5cGUuanVtcHM9RWUsZX0uY2FsbCh0aGlzKSxlLllpZWxkUmV0dXJuPVBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXtyZXR1cm4gbnVsbD09ZS5zY29wZS5wYXJlbnQmJnRoaXMuZXJyb3IoInlpZWxkIGNhbiBvbmx5IG9jY3VyIGluc2lkZSBmdW5jdGlvbnMiKSxfZ2V0KGEucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEucHJvdG90eXBlKSwiY29tcGlsZU5vZGUiLHRoaXMpLmNhbGwodGhpcyxlKX19XSksYX0oZ2UpLGUuQXdhaXRSZXR1cm49bz1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7cmV0dXJuIG51bGw9PWUuc2NvcGUucGFyZW50JiZ0aGlzLmVycm9yKCJhd2FpdCBjYW4gb25seSBvY2N1ciBpbnNpZGUgZnVuY3Rpb25zIiksX2dldChhLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhLnByb3RvdHlwZSksImNvbXBpbGVOb2RlIix0aGlzKS5jYWxsKHRoaXMsZSl9fV0pLGF9KGdlKSxlLlZhbHVlPUxlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQsbyl7dmFyIG49ISEoMzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pJiZhcmd1bWVudHNbM107X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHI9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSksbCxzO2lmKCF0JiZlIGluc3RhbmNlb2YgYSl7dmFyIGk7cmV0dXJuIGk9ZSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihyLGkpfWlmKGUgaW5zdGFuY2VvZiBkZSYmZS5jb250YWlucyhmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE5lfSkpe3ZhciBkO3JldHVybiBkPWUudW53cmFwKCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4ocixkKX1yZXR1cm4gci5iYXNlPWUsci5wcm9wZXJ0aWVzPXR8fFtdLG8mJihyW29dPSEwKSxyLmlzRGVmYXVsdFZhbHVlPW4sKG51bGw9PShsPXIuYmFzZSk/dm9pZCAwOmwuY29tbWVudHMpJiZyLmJhc2UgaW5zdGFuY2VvZiBJZSYmbnVsbCE9KG51bGw9PShzPXIucHJvcGVydGllc1swXSk/dm9pZCAwOnMubmFtZSkmJlFlKHIuYmFzZSxyLnByb3BlcnRpZXNbMF0ubmFtZSkscn1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24gYWRkKGUpe3JldHVybiB0aGlzLnByb3BlcnRpZXM9dGhpcy5wcm9wZXJ0aWVzLmNvbmNhdChlKSx0aGlzLmZvcmNlVXBkYXRlTG9jYXRpb249ITAsdGhpc319LHtrZXk6Imhhc1Byb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uIGhhc1Byb3BlcnRpZXMoKXtyZXR1cm4gMCE9PXRoaXMucHJvcGVydGllcy5sZW5ndGh9fSx7a2V5OiJiYXJlTGl0ZXJhbCIsdmFsdWU6ZnVuY3Rpb24gYmFyZUxpdGVyYWwoZSl7cmV0dXJuIXRoaXMucHJvcGVydGllcy5sZW5ndGgmJnRoaXMuYmFzZSBpbnN0YW5jZW9mIGV9fSx7a2V5OiJpc0FycmF5Iix2YWx1ZTpmdW5jdGlvbiBpc0FycmF5KCl7cmV0dXJuIHRoaXMuYmFyZUxpdGVyYWwocyl9fSx7a2V5OiJpc1JhbmdlIix2YWx1ZTpmdW5jdGlvbiBpc1JhbmdlKCl7cmV0dXJuIHRoaXMuYmFyZUxpdGVyYWwodWUpfX0se2tleToic2hvdWxkQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uIHNob3VsZENhY2hlKCl7cmV0dXJuIHRoaXMuaGFzUHJvcGVydGllcygpfHx0aGlzLmJhc2Uuc2hvdWxkQ2FjaGUoKX19LHtrZXk6ImlzQXNzaWduYWJsZSIsdmFsdWU6ZnVuY3Rpb24gaXNBc3NpZ25hYmxlKCl7cmV0dXJuIHRoaXMuaGFzUHJvcGVydGllcygpfHx0aGlzLmJhc2UuaXNBc3NpZ25hYmxlKCl9fSx7a2V5OiJpc051bWJlciIsdmFsdWU6ZnVuY3Rpb24gaXNOdW1iZXIoKXtyZXR1cm4gdGhpcy5iYXJlTGl0ZXJhbChyZSl9fSx7a2V5OiJpc1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24gaXNTdHJpbmcoKXtyZXR1cm4gdGhpcy5iYXJlTGl0ZXJhbCh2ZSl9fSx7a2V5OiJpc1JlZ2V4Iix2YWx1ZTpmdW5jdGlvbiBpc1JlZ2V4KCl7cmV0dXJuIHRoaXMuYmFyZUxpdGVyYWwobWUpfX0se2tleToiaXNVbmRlZmluZWQiLHZhbHVlOmZ1bmN0aW9uIGlzVW5kZWZpbmVkKCl7cmV0dXJuIHRoaXMuYmFyZUxpdGVyYWwoT2UpfX0se2tleToiaXNOdWxsIix2YWx1ZTpmdW5jdGlvbiBpc051bGwoKXtyZXR1cm4gdGhpcy5iYXJlTGl0ZXJhbChuZSl9fSx7a2V5OiJpc0Jvb2xlYW4iLHZhbHVlOmZ1bmN0aW9uIGlzQm9vbGVhbigpe3JldHVybiB0aGlzLmJhcmVMaXRlcmFsKGkpfX0se2tleToiaXNBdG9taWMiLHZhbHVlOmZ1bmN0aW9uIGlzQXRvbWljKCl7dmFyIGUsYSx0LG87Zm9yKG89dGhpcy5wcm9wZXJ0aWVzLmNvbmNhdCh0aGlzLmJhc2UpLGU9MCxhPW8ubGVuZ3RoO2U8YTtlKyspaWYodD1vW2VdLHQuc29ha3x8dCBpbnN0YW5jZW9mIHUpcmV0dXJuITE7cmV0dXJuITB9fSx7a2V5OiJpc05vdENhbGxhYmxlIix2YWx1ZTpmdW5jdGlvbiBpc05vdENhbGxhYmxlKCl7cmV0dXJuIHRoaXMuaXNOdW1iZXIoKXx8dGhpcy5pc1N0cmluZygpfHx0aGlzLmlzUmVnZXgoKXx8dGhpcy5pc0FycmF5KCl8fHRoaXMuaXNSYW5nZSgpfHx0aGlzLmlzU3BsaWNlKCl8fHRoaXMuaXNPYmplY3QoKXx8dGhpcy5pc1VuZGVmaW5lZCgpfHx0aGlzLmlzTnVsbCgpfHx0aGlzLmlzQm9vbGVhbigpfX0se2tleToiaXNTdGF0ZW1lbnQiLHZhbHVlOmZ1bmN0aW9uIGlzU3RhdGVtZW50KGUpe3JldHVybiF0aGlzLnByb3BlcnRpZXMubGVuZ3RoJiZ0aGlzLmJhc2UuaXNTdGF0ZW1lbnQoZSl9fSx7a2V5OiJhc3NpZ25zIix2YWx1ZTpmdW5jdGlvbiBhc3NpZ25zKGUpe3JldHVybiF0aGlzLnByb3BlcnRpZXMubGVuZ3RoJiZ0aGlzLmJhc2UuYXNzaWducyhlKX19LHtrZXk6Imp1bXBzIix2YWx1ZTpmdW5jdGlvbiBqdW1wcyhlKXtyZXR1cm4hdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aCYmdGhpcy5iYXNlLmp1bXBzKGUpfX0se2tleToiaXNPYmplY3QiLHZhbHVlOmZ1bmN0aW9uIGlzT2JqZWN0KGUpe3JldHVybiF0aGlzLnByb3BlcnRpZXMubGVuZ3RoJiZ0aGlzLmJhc2UgaW5zdGFuY2VvZiBsZSYmKCFlfHx0aGlzLmJhc2UuZ2VuZXJhdGVkKX19LHtrZXk6ImlzRWxpc2lvbiIsdmFsdWU6ZnVuY3Rpb24gaXNFbGlzaW9uKCl7cmV0dXJuISEodGhpcy5iYXNlIGluc3RhbmNlb2YgcykmJnRoaXMuYmFzZS5oYXNFbGlzaW9uKCl9fSx7a2V5OiJpc1NwbGljZSIsdmFsdWU6ZnVuY3Rpb24gaXNTcGxpY2UoKXt2YXIgZSxhLHQsbztyZXR1cm4gbz10aGlzLnByb3BlcnRpZXMsZT1uLmNhbGwobywtMSksYT1fc2xpY2VkVG9BcnJheShlLDEpLHQ9YVswXSxlLHQgaW5zdGFuY2VvZiBrZX19LHtrZXk6Imxvb2tzU3RhdGljIix2YWx1ZTpmdW5jdGlvbiBsb29rc1N0YXRpYyhlKXt2YXIgYTtyZXR1cm4odGhpcy50aGlzfHx0aGlzLmJhc2UgaW5zdGFuY2VvZiBJZXx8dGhpcy5iYXNlLnZhbHVlPT09ZSkmJjE9PT10aGlzLnByb3BlcnRpZXMubGVuZ3RoJiYicHJvdG90eXBlIiE9PShudWxsPT0oYT10aGlzLnByb3BlcnRpZXNbMF0ubmFtZSk/dm9pZCAwOmEudmFsdWUpfX0se2tleToidW53cmFwIix2YWx1ZTpmdW5jdGlvbiB1bndyYXAoKXtyZXR1cm4gdGhpcy5wcm9wZXJ0aWVzLmxlbmd0aD90aGlzOnRoaXMuYmFzZX19LHtrZXk6ImNhY2hlUmVmZXJlbmNlIix2YWx1ZTpmdW5jdGlvbiBjYWNoZVJlZmVyZW5jZShlKXt2YXIgdCxvLHIsbCxzLGksYztyZXR1cm4oYz10aGlzLnByb3BlcnRpZXMsdD1uLmNhbGwoYywtMSksbz1fc2xpY2VkVG9BcnJheSh0LDEpLHM9b1swXSx0LDI+dGhpcy5wcm9wZXJ0aWVzLmxlbmd0aCYmIXRoaXMuYmFzZS5zaG91bGRDYWNoZSgpJiYobnVsbD09c3x8IXMuc2hvdWxkQ2FjaGUoKSkpP1t0aGlzLHRoaXNdOihyPW5ldyBhKHRoaXMuYmFzZSx0aGlzLnByb3BlcnRpZXMuc2xpY2UoMCwtMSkpLHIuc2hvdWxkQ2FjaGUoKSYmKGw9bmV3IFIoZS5zY29wZS5mcmVlVmFyaWFibGUoImJhc2UiKSkscj1uZXcgYShuZXcgZGUobmV3IGQobCxyKSkpKSwhcyk/W3IsbF06KHMuc2hvdWxkQ2FjaGUoKSYmKGk9bmV3IFIoZS5zY29wZS5mcmVlVmFyaWFibGUoIm5hbWUiKSkscz1uZXcgVihuZXcgZChpLHMuaW5kZXgpKSxpPW5ldyBWKGkpKSxbci5hZGQocyksbmV3IGEobHx8ci5iYXNlLFtpfHxzXSldKX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbixyO2Zvcih0aGlzLmJhc2UuZnJvbnQ9dGhpcy5mcm9udCxyPXRoaXMucHJvcGVydGllcyxhPXIubGVuZ3RoJiZudWxsIT10aGlzLmJhc2UuY2FjaGVkP3RoaXMuYmFzZS5jYWNoZWQ6dGhpcy5iYXNlLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHIubGVuZ3RoP0g6bnVsbCksci5sZW5ndGgmJmZlLnRlc3QoV2UoYSkpJiZhLnB1c2godGhpcy5tYWtlQ29kZSgiLiIpKSx0PTAsbz1yLmxlbmd0aDt0PG87dCsrKXt2YXIgbDtuPXJbdF0sKGw9YSkucHVzaC5hcHBseShsLF90b0NvbnN1bWFibGVBcnJheShuLmNvbXBpbGVUb0ZyYWdtZW50cyhlKSkpfXJldHVybiBhfX0se2tleToidW5mb2xkU29hayIsdmFsdWU6ZnVuY3Rpb24gdW5mb2xkU29hayhlKXt2YXIgdD10aGlzO3JldHVybiBudWxsPT10aGlzLnVuZm9sZGVkU29haz90aGlzLnVuZm9sZGVkU29haz1mdW5jdGlvbigpe3ZhciBvLG4scixsLHMsaSxjLHAsdTtpZihyPXQuYmFzZS51bmZvbGRTb2FrKGUpLHIpe3ZhciBtO3JldHVybihtPXIuYm9keS5wcm9wZXJ0aWVzKS5wdXNoLmFwcGx5KG0sX3RvQ29uc3VtYWJsZUFycmF5KHQucHJvcGVydGllcykpLHJ9Zm9yKHA9dC5wcm9wZXJ0aWVzLG49bD0wLHM9cC5sZW5ndGg7bDxzO249KytsKWlmKGk9cFtuXSwhIWkuc29haylyZXR1cm4gaS5zb2FrPSExLG89bmV3IGEodC5iYXNlLHQucHJvcGVydGllcy5zbGljZSgwLG4pKSx1PW5ldyBhKHQuYmFzZSx0LnByb3BlcnRpZXMuc2xpY2UobikpLG8uc2hvdWxkQ2FjaGUoKSYmKGM9bmV3IFIoZS5zY29wZS5mcmVlVmFyaWFibGUoInJlZiIpKSxvPW5ldyBkZShuZXcgZChjLG8pKSx1LmJhc2U9YyksbmV3IE8obmV3IFQobyksdSx7c29hazohMH0pO3JldHVybiExfSgpOnRoaXMudW5mb2xkZWRTb2FrfX0se2tleToiZWFjaE5hbWUiLHZhbHVlOmZ1bmN0aW9uIGVhY2hOYW1lKGUpe3JldHVybiB0aGlzLmhhc1Byb3BlcnRpZXMoKT9lKHRoaXMpOnRoaXMuYmFzZS5pc0Fzc2lnbmFibGUoKT90aGlzLmJhc2UuZWFjaE5hbWUoZSk6dGhpcy5lcnJvcigidHJpZWQgdG8gYXNzaWduIHRvIHVuYXNzaWduYWJsZSB2YWx1ZSIpfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJiYXNlIiwicHJvcGVydGllcyJdLGV9LmNhbGwodGhpcyksZS5IZXJlQ29tbWVudD1TPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIGE9ZS5jb250ZW50LG89ZS5uZXdMaW5lLG49ZS51bnNoaWZ0O19jbGFzc0NhbGxDaGVjayh0aGlzLHQpO3ZhciByPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcykpO3JldHVybiByLmNvbnRlbnQ9YSxyLm5ld0xpbmU9byxyLnVuc2hpZnQ9bixyfXJldHVybiBfaW5oZXJpdHModCxlKSxfY3JlYXRlQ2xhc3ModCxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKCl7dmFyIGUsdCxvLG4scixsLHMsaSxkO2lmKGk9MDw9YS5jYWxsKHRoaXMuY29udGVudCwiXG4iKSx0PS9cblxzKlsjfFwqXS8udGVzdCh0aGlzLmNvbnRlbnQpLHQmJih0aGlzLmNvbnRlbnQ9dGhpcy5jb250ZW50LnJlcGxhY2UoL14oWyBcdF0qKSMoPz1ccykvZ20sIiAqIikpLGkpe2ZvcihuPSIiLGQ9dGhpcy5jb250ZW50LnNwbGl0KCJcbiIpLG89MCxsPWQubGVuZ3RoO288bDtvKyspcz1kW29dLHI9L15ccyovLmV4ZWMocylbMF0sci5sZW5ndGg+bi5sZW5ndGgmJihuPXIpO3RoaXMuY29udGVudD10aGlzLmNvbnRlbnQucmVwbGFjZShSZWdFeHAoIl4oIityKyIpIiwiZ20iKSwiIil9cmV0dXJuIHRoaXMuY29udGVudD0iLyoiK3RoaXMuY29udGVudCsodD8iICI6IiIpKyIqLyIsZT10aGlzLm1ha2VDb2RlKHRoaXMuY29udGVudCksZS5uZXdMaW5lPXRoaXMubmV3TGluZSxlLnVuc2hpZnQ9dGhpcy51bnNoaWZ0LGUubXVsdGlsaW5lPWksZS5pc0NvbW1lbnQ9ZS5pc0hlcmVDb21tZW50PSEwLGV9fV0pLHR9KGwpLGUuTGluZUNvbW1lbnQ9Sj1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUpe3ZhciB0PWUuY29udGVudCxvPWUubmV3TGluZSxuPWUudW5zaGlmdDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgcj1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gci5jb250ZW50PXQsci5uZXdMaW5lPW8sci51bnNoaWZ0PW4scn1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZSgpe3ZhciBlO3JldHVybiBlPXRoaXMubWFrZUNvZGUoL15ccyokLy50ZXN0KHRoaXMuY29udGVudCk/IiI6Ii8vIit0aGlzLmNvbnRlbnQpLGUubmV3TGluZT10aGlzLm5ld0xpbmUsZS51bnNoaWZ0PXRoaXMudW5zaGlmdCxlLnRyYWlsPSF0aGlzLm5ld0xpbmUmJiF0aGlzLnVuc2hpZnQsZS5pc0NvbW1lbnQ9ZS5pc0xpbmVDb21tZW50PSEwLGV9fV0pLGF9KGwpLGUuQ2FsbD11PWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXt2YXIgdD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sbz1hcmd1bWVudHNbMl0sbj1hcmd1bWVudHNbM107X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHI9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSksbDtyZXR1cm4gci52YXJpYWJsZT1lLHIuYXJncz10LHIuc29haz1vLHIudG9rZW49bixyLmlzTmV3PSExLHIudmFyaWFibGUgaW5zdGFuY2VvZiBMZSYmci52YXJpYWJsZS5pc05vdENhbGxhYmxlKCkmJnIudmFyaWFibGUuZXJyb3IoImxpdGVyYWwgaXMgbm90IGEgZnVuY3Rpb24iKSxyLmNzeD1yLnZhcmlhYmxlLmJhc2UgaW5zdGFuY2VvZiBwLCJSZWdFeHAiPT09KG51bGw9PShsPXIudmFyaWFibGUuYmFzZSk/dm9pZCAwOmwudmFsdWUpJiYwIT09ci5hcmdzLmxlbmd0aCYmUWUoci52YXJpYWJsZSxyLmFyZ3NbMF0pLHJ9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJ1cGRhdGVMb2NhdGlvbkRhdGFJZk1pc3NpbmciLHZhbHVlOmZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uRGF0YUlmTWlzc2luZyhlKXt2YXIgdCxvO3JldHVybiB0aGlzLmxvY2F0aW9uRGF0YSYmdGhpcy5uZWVkc1VwZGF0ZWRTdGFydExvY2F0aW9uJiYodGhpcy5sb2NhdGlvbkRhdGEuZmlyc3RfbGluZT1lLmZpcnN0X2xpbmUsdGhpcy5sb2NhdGlvbkRhdGEuZmlyc3RfY29sdW1uPWUuZmlyc3RfY29sdW1uLHQ9KG51bGw9PShvPXRoaXMudmFyaWFibGUpP3ZvaWQgMDpvLmJhc2UpfHx0aGlzLnZhcmlhYmxlLHQubmVlZHNVcGRhdGVkU3RhcnRMb2NhdGlvbiYmKHRoaXMudmFyaWFibGUubG9jYXRpb25EYXRhLmZpcnN0X2xpbmU9ZS5maXJzdF9saW5lLHRoaXMudmFyaWFibGUubG9jYXRpb25EYXRhLmZpcnN0X2NvbHVtbj1lLmZpcnN0X2NvbHVtbix0LnVwZGF0ZUxvY2F0aW9uRGF0YUlmTWlzc2luZyhlKSksZGVsZXRlIHRoaXMubmVlZHNVcGRhdGVkU3RhcnRMb2NhdGlvbiksX2dldChhLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhLnByb3RvdHlwZSksInVwZGF0ZUxvY2F0aW9uRGF0YUlmTWlzc2luZyIsdGhpcykuY2FsbCh0aGlzLGUpfX0se2tleToibmV3SW5zdGFuY2UiLHZhbHVlOmZ1bmN0aW9uIG5ld0luc3RhbmNlKCl7dmFyIGUsdDtyZXR1cm4gZT0obnVsbD09KHQ9dGhpcy52YXJpYWJsZSk/dm9pZCAwOnQuYmFzZSl8fHRoaXMudmFyaWFibGUsZSBpbnN0YW5jZW9mIGEmJiFlLmlzTmV3P2UubmV3SW5zdGFuY2UoKTp0aGlzLmlzTmV3PSEwLHRoaXMubmVlZHNVcGRhdGVkU3RhcnRMb2NhdGlvbj0hMCx0aGlzfX0se2tleToidW5mb2xkU29hayIsdmFsdWU6ZnVuY3Rpb24gdW5mb2xkU29hayhlKXt2YXIgdCxvLG4scixsLHMsaSxkO2lmKHRoaXMuc29hayl7aWYodGhpcy52YXJpYWJsZSBpbnN0YW5jZW9mICRlKXI9bmV3IEsodGhpcy52YXJpYWJsZS5jb21waWxlKGUpKSxkPW5ldyBMZShyKSxudWxsPT10aGlzLnZhcmlhYmxlLmFjY2Vzc29yJiZ0aGlzLnZhcmlhYmxlLmVycm9yKCJVbnN1cHBvcnRlZCByZWZlcmVuY2UgdG8gJ3N1cGVyJyIpO2Vsc2V7aWYobz1yYShlLHRoaXMsInZhcmlhYmxlIikpcmV0dXJuIG87dmFyIGM9bmV3IExlKHRoaXMudmFyaWFibGUpLmNhY2hlUmVmZXJlbmNlKGUpLHA9X3NsaWNlZFRvQXJyYXkoYywyKTtyPXBbMF0sZD1wWzFdfXJldHVybiBkPW5ldyBhKGQsdGhpcy5hcmdzKSxkLmlzTmV3PXRoaXMuaXNOZXcscj1uZXcgSygidHlwZW9mICIrci5jb21waWxlKGUpKycgPT09ICJmdW5jdGlvbiInKSxuZXcgTyhyLG5ldyBMZShkKSx7c29hazohMH0pfWZvcih0PXRoaXMscz1bXTs7KXtpZih0LnZhcmlhYmxlIGluc3RhbmNlb2YgYSl7cy5wdXNoKHQpLHQ9dC52YXJpYWJsZTtjb250aW51ZX1pZighKHQudmFyaWFibGUgaW5zdGFuY2VvZiBMZSkpYnJlYWs7aWYocy5wdXNoKHQpLCEoKHQ9dC52YXJpYWJsZS5iYXNlKWluc3RhbmNlb2YgYSkpYnJlYWt9Zm9yKGk9cy5yZXZlcnNlKCksbj0wLGw9aS5sZW5ndGg7bjxsO24rKyl0PWlbbl0sbyYmKHQudmFyaWFibGUgaW5zdGFuY2VvZiBhP3QudmFyaWFibGU9bzp0LnZhcmlhYmxlLmJhc2U9byksbz1yYShlLHQsInZhcmlhYmxlIik7cmV0dXJuIG99fSx7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7dmFyIGEsdCxvLG4sbCxzLGksZCxjLHAsdSxtLGcsZix5O2lmKHRoaXMuY3N4KXJldHVybiB0aGlzLmNvbXBpbGVDU1goZSk7aWYobnVsbCE9KHU9dGhpcy52YXJpYWJsZSkmJih1LmZyb250PXRoaXMuZnJvbnQpLGk9W10seT0obnVsbD09KG09dGhpcy52YXJpYWJsZSl8fG51bGw9PShnPW0ucHJvcGVydGllcyk/dm9pZCAwOmdbMF0paW5zdGFuY2VvZiByLG49ZnVuY3Rpb24oKXt2YXIgZSxhLHQsbjtmb3IodD10aGlzLmFyZ3N8fFtdLG49W10sZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKylvPXRbZV0sbyBpbnN0YW5jZW9mIGgmJm4ucHVzaChvKTtyZXR1cm4gbn0uY2FsbCh0aGlzKSwwPG4ubGVuZ3RoJiZ5JiYhdGhpcy52YXJpYWJsZS5iYXNlLmNhY2hlZCl7dmFyIGs9dGhpcy52YXJpYWJsZS5iYXNlLmNhY2hlKGUsSCxmdW5jdGlvbigpe3JldHVybiExfSksVD1fc2xpY2VkVG9BcnJheShrLDEpO3M9VFswXSx0aGlzLnZhcmlhYmxlLmJhc2UuY2FjaGVkPXN9Zm9yKGY9dGhpcy5hcmdzLGw9Yz0wLHA9Zi5sZW5ndGg7YzxwO2w9KytjKXt2YXIgTjtvPWZbbF0sbCYmaS5wdXNoKHRoaXMubWFrZUNvZGUoIiwgIikpLChOPWkpLnB1c2guYXBwbHkoTixfdG9Db25zdW1hYmxlQXJyYXkoby5jb21waWxlVG9GcmFnbWVudHMoZSxYKSkpfXJldHVybiBkPVtdLHRoaXMuaXNOZXcmJih0aGlzLnZhcmlhYmxlIGluc3RhbmNlb2YgJGUmJnRoaXMudmFyaWFibGUuZXJyb3IoIlVuc3VwcG9ydGVkIHJlZmVyZW5jZSB0byAnc3VwZXInIiksZC5wdXNoKHRoaXMubWFrZUNvZGUoIm5ldyAiKSkpLChhPWQpLnB1c2guYXBwbHkoYSxfdG9Db25zdW1hYmxlQXJyYXkodGhpcy52YXJpYWJsZS5jb21waWxlVG9GcmFnbWVudHMoZSxIKSkpLCh0PWQpLnB1c2guYXBwbHkodCxbdGhpcy5tYWtlQ29kZSgiKCIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGkpLFt0aGlzLm1ha2VDb2RlKCIpIildKSksZH19LHtrZXk6ImNvbXBpbGVDU1giLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVDU1goZSl7dmFyIGE9X3NsaWNlZFRvQXJyYXkodGhpcy5hcmdzLDIpLHQsbyxuLHIsbCxpLGQsYyxwLHUsbTtpZihyPWFbMF0sbD1hWzFdLHIuYmFzZS5jc3g9ITAsbnVsbCE9bCYmKGwuYmFzZS5jc3g9ITApLGk9W3RoaXMubWFrZUNvZGUoIjwiKV0sKHQ9aSkucHVzaC5hcHBseSh0LF90b0NvbnN1bWFibGVBcnJheShtPXRoaXMudmFyaWFibGUuY29tcGlsZVRvRnJhZ21lbnRzKGUsSCkpKSxyLmJhc2UgaW5zdGFuY2VvZiBzKWZvcih1PXIuYmFzZS5vYmplY3RzLGQ9MCxjPXUubGVuZ3RoO2Q8YztkKyspe3ZhciBoO3A9dVtkXSxvPXAuYmFzZSxuPShudWxsPT1vP3ZvaWQgMDpvLnByb3BlcnRpZXMpfHxbXSwobyBpbnN0YW5jZW9mIGxlfHxvIGluc3RhbmNlb2YgUikmJighKG8gaW5zdGFuY2VvZiBsZSl8fG8uZ2VuZXJhdGVkfHwhKDE8bi5sZW5ndGgpJiZuWzBdaW5zdGFuY2VvZiBUZSl8fHAuZXJyb3IoJ1VuZXhwZWN0ZWQgdG9rZW4uIEFsbG93ZWQgQ1NYIGF0dHJpYnV0ZXMgYXJlOiBpZD0idmFsIiwgc3JjPXtzb3VyY2V9LCB7cHJvcHMuLi59IG9yIGF0dHJpYnV0ZS4nKSxwLmJhc2UgaW5zdGFuY2VvZiBsZSYmKHAuYmFzZS5jc3g9ITApLGkucHVzaCh0aGlzLm1ha2VDb2RlKCIgIikpLChoPWkpLnB1c2guYXBwbHkoaCxfdG9Db25zdW1hYmxlQXJyYXkocC5jb21waWxlVG9GcmFnbWVudHMoZSxxKSkpfWlmKGwpe3ZhciBnLGY7aS5wdXNoKHRoaXMubWFrZUNvZGUoIj4iKSksKGc9aSkucHVzaC5hcHBseShnLF90b0NvbnN1bWFibGVBcnJheShsLmNvbXBpbGVOb2RlKGUsWCkpKSwoZj1pKS5wdXNoLmFwcGx5KGYsW3RoaXMubWFrZUNvZGUoIjwvIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkobSksW3RoaXMubWFrZUNvZGUoIj4iKV0pKX1lbHNlIGkucHVzaCh0aGlzLm1ha2VDb2RlKCIgLz4iKSk7cmV0dXJuIGl9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bInZhcmlhYmxlIiwiYXJncyJdLGV9LmNhbGwodGhpcyksZS5TdXBlckNhbGw9X2U9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJpc1N0YXRlbWVudCIsdmFsdWU6ZnVuY3Rpb24gaXNTdGF0ZW1lbnQoZSl7dmFyIGE7cmV0dXJuKG51bGw9PShhPXRoaXMuZXhwcmVzc2lvbnMpP3ZvaWQgMDphLmxlbmd0aCkmJmUubGV2ZWw9PT16fX0se2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciB0LG8sbixyO2lmKG51bGw9PShvPXRoaXMuZXhwcmVzc2lvbnMpfHwhby5sZW5ndGgpcmV0dXJuIF9nZXQoYS5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYS5wcm90b3R5cGUpLCJjb21waWxlTm9kZSIsdGhpcykuY2FsbCh0aGlzLGUpO2lmKHI9bmV3IEsoV2UoX2dldChhLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhLnByb3RvdHlwZSksImNvbXBpbGVOb2RlIix0aGlzKS5jYWxsKHRoaXMsZSkpKSxuPW5ldyBjKHRoaXMuZXhwcmVzc2lvbnMuc2xpY2UoKSksZS5sZXZlbD56KXt2YXIgbD1yLmNhY2hlKGUsbnVsbCx3ZSkscz1fc2xpY2VkVG9BcnJheShsLDIpO3I9c1swXSx0PXNbMV0sbi5wdXNoKHQpfXJldHVybiBuLnVuc2hpZnQociksbi5jb21waWxlVG9GcmFnbWVudHMoZSxlLmxldmVsPT09ej9lLmxldmVsOlgpfX1dKSxhfSh1KTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49dS5wcm90b3R5cGUuY2hpbGRyZW4uY29uY2F0KFsiZXhwcmVzc2lvbnMiXSksZX0uY2FsbCh0aGlzKSxlLlN1cGVyPSRlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgdD1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5hY2Nlc3Nvcj1lLHR9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7dmFyIGEsdCxvLG4scixsLHMsaTtpZih0PWUuc2NvcGUubmFtZWRNZXRob2QoKSwobnVsbD09dD92b2lkIDA6dC5pc01ldGhvZCl8fHRoaXMuZXJyb3IoImNhbm5vdCB1c2Ugc3VwZXIgb3V0c2lkZSBvZiBhbiBpbnN0YW5jZSBtZXRob2QiKSxudWxsPT10LmN0b3ImJm51bGw9PXRoaXMuYWNjZXNzb3Ipe3ZhciBjPXQ7bz1jLm5hbWUsaT1jLnZhcmlhYmxlLChvLnNob3VsZENhY2hlKCl8fG8gaW5zdGFuY2VvZiBWJiZvLmluZGV4LmlzQXNzaWduYWJsZSgpKSYmKG49bmV3IFIoZS5zY29wZS5wYXJlbnQuZnJlZVZhcmlhYmxlKCJuYW1lIikpLG8uaW5kZXg9bmV3IGQobixvLmluZGV4KSksdGhpcy5hY2Nlc3Nvcj1udWxsPT1uP286bmV3IFYobil9cmV0dXJuKG51bGw9PShyPXRoaXMuYWNjZXNzb3IpfHxudWxsPT0obD1yLm5hbWUpP3ZvaWQgMDpsLmNvbW1lbnRzKSYmKHM9dGhpcy5hY2Nlc3Nvci5uYW1lLmNvbW1lbnRzLGRlbGV0ZSB0aGlzLmFjY2Vzc29yLm5hbWUuY29tbWVudHMpLGE9bmV3IExlKG5ldyBLKCJzdXBlciIpLHRoaXMuYWNjZXNzb3I/W3RoaXMuYWNjZXNzb3JdOltdKS5jb21waWxlVG9GcmFnbWVudHMoZSkscyYmTWUocyx0aGlzLmFjY2Vzc29yLm5hbWUpLGF9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bImFjY2Vzc29yIl0sZX0uY2FsbCh0aGlzKSxlLlJlZ2V4V2l0aEludGVycG9sYXRpb25zPWhlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcyxuZXcgTGUobmV3IFIoIlJlZ0V4cCIpKSxlLCExKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLGF9KHUpLGUuVGFnZ2VkVGVtcGxhdGVDYWxsPXhlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0LG8pe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSx0IGluc3RhbmNlb2YgdmUmJih0PW5ldyBiZShjLndyYXAoW25ldyBMZSh0KV0pKSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzLGUsW3RdLG8pKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXtyZXR1cm4gdGhpcy52YXJpYWJsZS5jb21waWxlVG9GcmFnbWVudHMoZSxIKS5jb25jYXQodGhpcy5hcmdzWzBdLmNvbXBpbGVUb0ZyYWdtZW50cyhlLFgpKX19XSksYX0odSksZS5FeHRlbmRzPUU9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUsdCl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIG89X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIG8uY2hpbGQ9ZSxvLnBhcmVudD10LG99cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlVG9GcmFnbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVUb0ZyYWdtZW50cyhlKXtyZXR1cm4gbmV3IHUobmV3IExlKG5ldyBLKHNhKCJleHRlbmQiLGUpKSksW3RoaXMuY2hpbGQsdGhpcy5wYXJlbnRdKS5jb21waWxlVG9GcmFnbWVudHMoZSl9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bImNoaWxkIiwicGFyZW50Il0sZX0uY2FsbCh0aGlzKSxlLkFjY2Vzcz1yPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQpe19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciBvPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpO3JldHVybiBvLm5hbWU9ZSxvLnNvYWs9InNvYWsiPT09dCxvfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZVRvRnJhZ21lbnRzIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlVG9GcmFnbWVudHMoZSl7dmFyIGEsdDtyZXR1cm4gYT10aGlzLm5hbWUuY29tcGlsZVRvRnJhZ21lbnRzKGUpLHQ9dGhpcy5uYW1lLnVud3JhcCgpLHQgaW5zdGFuY2VvZiBwZT9bdGhpcy5tYWtlQ29kZSgiLiIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGEpKTpbdGhpcy5tYWtlQ29kZSgiWyIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGEpLFt0aGlzLm1ha2VDb2RlKCJdIildKX19XSksYX0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsibmFtZSJdLGUucHJvdG90eXBlLnNob3VsZENhY2hlPXRlLGV9LmNhbGwodGhpcyksZS5JbmRleD1WPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgdD1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5pbmRleD1lLHR9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlVG9GcmFnbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVUb0ZyYWdtZW50cyhlKXtyZXR1cm5bXS5jb25jYXQodGhpcy5tYWtlQ29kZSgiWyIpLHRoaXMuaW5kZXguY29tcGlsZVRvRnJhZ21lbnRzKGUscSksdGhpcy5tYWtlQ29kZSgiXSIpKX19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbiBzaG91bGRDYWNoZSgpe3JldHVybiB0aGlzLmluZGV4LnNob3VsZENhY2hlKCl9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bImluZGV4Il0sZX0uY2FsbCh0aGlzKSxlLlJhbmdlPXVlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQsbyl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIG49X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIG4uZnJvbT1lLG4udG89dCxuLmV4Y2x1c2l2ZT0iZXhjbHVzaXZlIj09PW8sbi5lcXVhbHM9bi5leGNsdXNpdmU/IiI6Ij0iLG59cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlVmFyaWFibGVzIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlVmFyaWFibGVzKGUpe3ZhciBhLHQ7ZT1aZShlLHt0b3A6ITB9KSxhPVZlKGUsInNob3VsZENhY2hlIik7dmFyIG89dGhpcy5jYWNoZVRvQ29kZUZyYWdtZW50cyh0aGlzLmZyb20uY2FjaGUoZSxYLGEpKSxuPV9zbGljZWRUb0FycmF5KG8sMik7dGhpcy5mcm9tQz1uWzBdLHRoaXMuZnJvbVZhcj1uWzFdO3ZhciByPXRoaXMuY2FjaGVUb0NvZGVGcmFnbWVudHModGhpcy50by5jYWNoZShlLFgsYSkpLGw9X3NsaWNlZFRvQXJyYXkociwyKTtpZih0aGlzLnRvQz1sWzBdLHRoaXMudG9WYXI9bFsxXSx0PVZlKGUsInN0ZXAiKSl7dmFyIHM9dGhpcy5jYWNoZVRvQ29kZUZyYWdtZW50cyh0LmNhY2hlKGUsWCxhKSksaT1fc2xpY2VkVG9BcnJheShzLDIpO3RoaXMuc3RlcD1pWzBdLHRoaXMuc3RlcFZhcj1pWzFdfXJldHVybiB0aGlzLmZyb21OdW09dGhpcy5mcm9tLmlzTnVtYmVyKCk/K3RoaXMuZnJvbVZhcjpudWxsLHRoaXMudG9OdW09dGhpcy50by5pc051bWJlcigpPyt0aGlzLnRvVmFyOm51bGwsdGhpcy5zdGVwTnVtPShudWxsPT10P3ZvaWQgMDp0LmlzTnVtYmVyKCkpPyt0aGlzLnN0ZXBWYXI6bnVsbH19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbixyLGwscyxpLGQsYyxwLHUsbSxoLGc7aWYodGhpcy5mcm9tVmFyfHx0aGlzLmNvbXBpbGVWYXJpYWJsZXMoZSksIWUuaW5kZXgpcmV0dXJuIHRoaXMuY29tcGlsZUFycmF5KGUpO3M9bnVsbCE9dGhpcy5mcm9tTnVtJiZudWxsIT10aGlzLnRvTnVtLHI9VmUoZSwiaW5kZXgiKSxsPVZlKGUsIm5hbWUiKSxjPWwmJmwhPT1yLGc9cyYmIWM/InZhciAiK3IrIiA9ICIrdGhpcy5mcm9tQzpyKyIgPSAiK3RoaXMuZnJvbUMsdGhpcy50b0MhPT10aGlzLnRvVmFyJiYoZys9IiwgIit0aGlzLnRvQyksdGhpcy5zdGVwIT09dGhpcy5zdGVwVmFyJiYoZys9IiwgIit0aGlzLnN0ZXApLGQ9cisiIDwiK3RoaXMuZXF1YWxzLG49cisiID4iK3RoaXMuZXF1YWxzO3ZhciBmPVt0aGlzLmZyb21OdW0sdGhpcy50b051bV07cmV0dXJuIG89ZlswXSxtPWZbMV0scD10aGlzLnN0ZXBOdW0/dGhpcy5zdGVwTnVtKyIgIT09IDAiOnRoaXMuc3RlcFZhcisiICE9PSAwIix0PXM/bnVsbD09dGhpcy5zdGVwP288PW0/ZCsiICIrbTpuKyIgIittOihpPW8rIiA8PSAiK3IrIiAmJiAiK2QrIiAiK20saD1vKyIgPj0gIityKyIgJiYgIituKyIgIittLG88PW0/cCsiICYmICIraTpwKyIgJiYgIitoKTooaT10aGlzLmZyb21WYXIrIiA8PSAiK3IrIiAmJiAiK2QrIiAiK3RoaXMudG9WYXIsaD10aGlzLmZyb21WYXIrIiA+PSAiK3IrIiAmJiAiK24rIiAiK3RoaXMudG9WYXIscCsiICYmICgiK3RoaXMuZnJvbVZhcisiIDw9ICIrdGhpcy50b1ZhcisiID8gIitpKyIgOiAiK2grIikiKSxhPXRoaXMuc3RlcFZhcj90aGlzLnN0ZXBWYXIrIiA+IDAiOnRoaXMuZnJvbVZhcisiIDw9ICIrdGhpcy50b1Zhcix1PXRoaXMuc3RlcFZhcj9yKyIgKz0gIit0aGlzLnN0ZXBWYXI6cz9jP288PW0/IisrIityOiItLSIrcjpvPD1tP3IrIisrIjpyKyItLSI6Yz9hKyIgPyArKyIrcisiIDogLS0iK3I6YSsiID8gIityKyIrKyA6ICIrcisiLS0iLGMmJihnPWwrIiA9ICIrZyksYyYmKHU9bCsiID0gIit1KSxbdGhpcy5tYWtlQ29kZShnKyI7ICIrdCsiOyAiK3UpXX19LHtrZXk6ImNvbXBpbGVBcnJheSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZUFycmF5KGUpe3ZhciBhLHQsbyxuLHIsbCxzLGksZCxjLHAsdSxtO3JldHVybihzPW51bGwhPXRoaXMuZnJvbU51bSYmbnVsbCE9dGhpcy50b051bSxzJiYyMD49X01hdGhhYnModGhpcy5mcm9tTnVtLXRoaXMudG9OdW0pKT8oYz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxhPXA9dGhpcy5mcm9tTnVtLHQ9dGhpcy50b051bTtwPD10P2E8PXQ6YT49dDtwPD10P2ErKzphLS0pZS5wdXNoKGEpO3JldHVybiBlfS5hcHBseSh0aGlzKSx0aGlzLmV4Y2x1c2l2ZSYmYy5wb3AoKSxbdGhpcy5tYWtlQ29kZSgiWyIrYy5qb2luKCIsICIpKyJdIildKToobD10aGlzLnRhYitEZSxyPWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJpIix7c2luZ2xlOiEwLHJlc2VydmU6ITF9KSx1PWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJyZXN1bHRzIix7cmVzZXJ2ZTohMX0pLGQ9IlxuIitsKyJ2YXIgIit1KyIgPSBbXTsiLHM/KGUuaW5kZXg9cix0PVdlKHRoaXMuY29tcGlsZU5vZGUoZSkpKToobT1yKyIgPSAiK3RoaXMuZnJvbUMrKHRoaXMudG9DPT09dGhpcy50b1Zhcj8iIjoiLCAiK3RoaXMudG9DKSxvPXRoaXMuZnJvbVZhcisiIDw9ICIrdGhpcy50b1Zhcix0PSJ2YXIgIittKyI7ICIrbysiID8gIityKyIgPCIrdGhpcy5lcXVhbHMrIiAiK3RoaXMudG9WYXIrIiA6ICIrcisiID4iK3RoaXMuZXF1YWxzKyIgIit0aGlzLnRvVmFyKyI7ICIrbysiID8gIityKyIrKyA6ICIrcisiLS0iKSxpPSJ7ICIrdSsiLnB1c2goIityKyIpOyB9XG4iK2wrInJldHVybiAiK3UrIjtcbiIrZS5pbmRlbnQsbj1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZS5jb250YWlucyhxZSl9LChuKHRoaXMuZnJvbSl8fG4odGhpcy50bykpJiYoYT0iLCBhcmd1bWVudHMiKSxbdGhpcy5tYWtlQ29kZSgiKGZ1bmN0aW9uKCkgeyIrZCsiXG4iK2wrImZvciAoIit0KyIpIitpKyJ9KS5hcHBseSh0aGlzIisobnVsbD09YT8iIjphKSsiKSIpXSl9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bImZyb20iLCJ0byJdLGV9LmNhbGwodGhpcyksZS5TbGljZT1rZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHQ9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQucmFuZ2U9ZSx0fXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhPXRoaXMucmFuZ2UsdCxvLG4scixsLHM7cmV0dXJuIGw9YS50byxuPWEuZnJvbSwobnVsbD09bj92b2lkIDA6bi5zaG91bGRDYWNoZSgpKSYmKG49bmV3IExlKG5ldyBkZShuKSkpLChudWxsPT1sP3ZvaWQgMDpsLnNob3VsZENhY2hlKCkpJiYobD1uZXcgTGUobmV3IGRlKGwpKSkscj0obnVsbD09bj92b2lkIDA6bi5jb21waWxlVG9GcmFnbWVudHMoZSxxKSl8fFt0aGlzLm1ha2VDb2RlKCIwIildLGwmJih0PWwuY29tcGlsZVRvRnJhZ21lbnRzKGUscSksbz1XZSh0KSwodGhpcy5yYW5nZS5leGNsdXNpdmV8fC0xIT0rbykmJihzPSIsICIrKHRoaXMucmFuZ2UuZXhjbHVzaXZlP286bC5pc051bWJlcigpPyIiKygrbysxKToodD1sLmNvbXBpbGVUb0ZyYWdtZW50cyhlLEgpLCIrIitXZSh0KSsiICsgMSB8fCA5ZTkiKSkpKSxbdGhpcy5tYWtlQ29kZSgiLnNsaWNlKCIrV2UocikrKHN8fCIiKSsiKSIpXX19XSksYX0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsicmFuZ2UiXSxlfS5jYWxsKHRoaXMpLGUuT2JqPWxlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXt2YXIgdD0hISgxPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSkmJmFyZ3VtZW50c1sxXSxvPSEhKDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdKSYmYXJndW1lbnRzWzJdO19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciBuPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpO3JldHVybiBuLmdlbmVyYXRlZD10LG4ubGhzPW8sbi5vYmplY3RzPW4ucHJvcGVydGllcz1lfHxbXSxufXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiaXNBc3NpZ25hYmxlIix2YWx1ZTpmdW5jdGlvbiBpc0Fzc2lnbmFibGUoKXt2YXIgZSxhLHQsbyxuO2ZvcihuPXRoaXMucHJvcGVydGllcyxlPTAsYT1uLmxlbmd0aDtlPGE7ZSsrKWlmKG89bltlXSx0PUplKG8udW53cmFwQWxsKCkudmFsdWUpLHQmJm8uZXJyb3IodCksbyBpbnN0YW5jZW9mIGQmJiJvYmplY3QiPT09by5jb250ZXh0JiYobz1vLnZhbHVlKSwhby5pc0Fzc2lnbmFibGUoKSlyZXR1cm4hMTtyZXR1cm4hMH19LHtrZXk6InNob3VsZENhY2hlIix2YWx1ZTpmdW5jdGlvbiBzaG91bGRDYWNoZSgpe3JldHVybiF0aGlzLmlzQXNzaWduYWJsZSgpfX0se2tleToiaGFzU3BsYXQiLHZhbHVlOmZ1bmN0aW9uIGhhc1NwbGF0KCl7dmFyIGUsYSx0LG87Zm9yKG89dGhpcy5wcm9wZXJ0aWVzLGU9MCxhPW8ubGVuZ3RoO2U8YTtlKyspaWYodD1vW2VdLHQgaW5zdGFuY2VvZiBUZSlyZXR1cm4hMDtyZXR1cm4hMX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgdCxvLG4scixpLGMscCx1LG0saCxsLGcseSxrLFQsTix2LGIsJCxfLEMsRDtpZihiPXRoaXMucHJvcGVydGllcyx0aGlzLmdlbmVyYXRlZClmb3IoYz0wLGc9Yi5sZW5ndGg7YzxnO2MrKylOPWJbY10sTiBpbnN0YW5jZW9mIExlJiZOLmVycm9yKCJjYW5ub3QgaGF2ZSBhbiBpbXBsaWNpdCB2YWx1ZSBpbiBhbiBpbXBsaWNpdCBvYmplY3QiKTtpZih0aGlzLmhhc1NwbGF0KCkmJiF0aGlzLmNzeClyZXR1cm4gdGhpcy5jb21waWxlU3ByZWFkKGUpO2lmKG49ZS5pbmRlbnQrPURlLGw9dGhpcy5sYXN0Tm9kZSh0aGlzLnByb3BlcnRpZXMpLHRoaXMuY3N4KXJldHVybiB0aGlzLmNvbXBpbGVDU1hBdHRyaWJ1dGVzKGUpO2lmKHRoaXMubGhzKWZvcih1PTAseT1iLmxlbmd0aDt1PHk7dSsrKWlmKHY9Ylt1XSwhISh2IGluc3RhbmNlb2YgZCkpe3ZhciBFPXY7RD1FLnZhbHVlLEM9RC51bndyYXBBbGwoKSxDIGluc3RhbmNlb2Ygc3x8QyBpbnN0YW5jZW9mIGE/Qy5saHM9ITA6QyBpbnN0YW5jZW9mIGQmJihDLm5lc3RlZExocz0hMCl9Zm9yKGk9ITAsXz10aGlzLnByb3BlcnRpZXMsaD0wLGs9Xy5sZW5ndGg7aDxrO2grKyl2PV9baF0sdiBpbnN0YW5jZW9mIGQmJiJvYmplY3QiPT09di5jb250ZXh0JiYoaT0hMSk7Zm9yKHQ9W10sdC5wdXNoKHRoaXMubWFrZUNvZGUoaT8iIjoiXG4iKSksbz0kPTAsVD1iLmxlbmd0aDskPFQ7bz0rKyQpe3ZhciB4O2lmKHY9YltvXSxwPW89PT1iLmxlbmd0aC0xPyIiOmk/IiwgIjp2PT09bD8iXG4iOiIsXG4iLHI9aT8iIjpuLG09diBpbnN0YW5jZW9mIGQmJiJvYmplY3QiPT09di5jb250ZXh0P3YudmFyaWFibGU6diBpbnN0YW5jZW9mIGQ/KHRoaXMubGhzP3ZvaWQgMDp2Lm9wZXJhdG9yVG9rZW4uZXJyb3IoInVuZXhwZWN0ZWQgIit2Lm9wZXJhdG9yVG9rZW4udmFsdWUpLHYudmFyaWFibGUpOnYsbSBpbnN0YW5jZW9mIExlJiZtLmhhc1Byb3BlcnRpZXMoKSYmKCgib2JqZWN0Ij09PXYuY29udGV4dHx8IW0udGhpcykmJm0uZXJyb3IoImludmFsaWQgb2JqZWN0IGtleSIpLG09bS5wcm9wZXJ0aWVzWzBdLm5hbWUsdj1uZXcgZChtLHYsIm9iamVjdCIpKSxtPT09dilpZih2LnNob3VsZENhY2hlKCkpe3ZhciBJPXYuYmFzZS5jYWNoZShlKSxTPV9zbGljZWRUb0FycmF5KEksMik7bT1TWzBdLEQ9U1sxXSxtIGluc3RhbmNlb2YgUiYmKG09bmV3IHBlKG0udmFsdWUpKSx2PW5ldyBkKG0sRCwib2JqZWN0Iil9ZWxzZSBpZighKG0gaW5zdGFuY2VvZiBMZSYmbS5iYXNlIGluc3RhbmNlb2YgZikpImZ1bmN0aW9uIj09dHlwZW9mIHYuYmFyZUxpdGVyYWwmJnYuYmFyZUxpdGVyYWwoUil8fCh2PW5ldyBkKHYsdiwib2JqZWN0IikpO2Vsc2UgaWYodi5iYXNlLnZhbHVlLnNob3VsZENhY2hlKCkpe3ZhciBBPXYuYmFzZS52YWx1ZS5jYWNoZShlKSxPPV9zbGljZWRUb0FycmF5KEEsMik7bT1PWzBdLEQ9T1sxXSxtIGluc3RhbmNlb2YgUiYmKG09bmV3IGYobS52YWx1ZSkpLHY9bmV3IGQobSxELCJvYmplY3QiKX1lbHNlIHY9bmV3IGQobSx2LmJhc2UudmFsdWUsIm9iamVjdCIpO3ImJnQucHVzaCh0aGlzLm1ha2VDb2RlKHIpKSwoeD10KS5wdXNoLmFwcGx5KHgsX3RvQ29uc3VtYWJsZUFycmF5KHYuY29tcGlsZVRvRnJhZ21lbnRzKGUseikpKSxwJiZ0LnB1c2godGhpcy5tYWtlQ29kZShwKSl9cmV0dXJuIHQucHVzaCh0aGlzLm1ha2VDb2RlKGk/IiI6IlxuIit0aGlzLnRhYikpLHQ9dGhpcy53cmFwSW5CcmFjZXModCksdGhpcy5mcm9udD90aGlzLndyYXBJblBhcmVudGhlc2VzKHQpOnR9fSx7a2V5OiJhc3NpZ25zIix2YWx1ZTpmdW5jdGlvbiBhc3NpZ25zKGUpe3ZhciBhLHQsbyxuO2ZvcihuPXRoaXMucHJvcGVydGllcyxhPTAsdD1uLmxlbmd0aDthPHQ7YSsrKWlmKG89blthXSxvLmFzc2lnbnMoZSkpcmV0dXJuITA7cmV0dXJuITF9fSx7a2V5OiJlYWNoTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZWFjaE5hbWUoZSl7dmFyIGEsdCxvLG4scjtmb3Iobj10aGlzLnByb3BlcnRpZXMscj1bXSxhPTAsdD1uLmxlbmd0aDthPHQ7YSsrKW89blthXSxvIGluc3RhbmNlb2YgZCYmIm9iamVjdCI9PT1vLmNvbnRleHQmJihvPW8udmFsdWUpLG89by51bndyYXBBbGwoKSxudWxsPT1vLmVhY2hOYW1lP3IucHVzaCh2b2lkIDApOnIucHVzaChvLmVhY2hOYW1lKGUpKTtyZXR1cm4gcn19LHtrZXk6ImNvbXBpbGVTcHJlYWQiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVTcHJlYWQoZSl7dmFyIHQsbyxuLHIsbCxzLGksZCxjO2ZvcihpPXRoaXMucHJvcGVydGllcyxjPVtdLHM9W10sZD1bXSxvPWZ1bmN0aW9uKCl7aWYocy5sZW5ndGgmJmQucHVzaChuZXcgYShzKSksYy5sZW5ndGgpe3ZhciBlOyhlPWQpLnB1c2guYXBwbHkoZSxfdG9Db25zdW1hYmxlQXJyYXkoYykpfXJldHVybiBjPVtdLHM9W119LG49MCxyPWkubGVuZ3RoO248cjtuKyspbD1pW25dLGwgaW5zdGFuY2VvZiBUZT8oYy5wdXNoKG5ldyBMZShsLm5hbWUpKSxvKCkpOnMucHVzaChsKTtyZXR1cm4gbygpLGRbMF1pbnN0YW5jZW9mIGF8fGQudW5zaGlmdChuZXcgYSksdD1uZXcgTGUobmV3IEsoc2EoIl9leHRlbmRzIixlKSkpLG5ldyB1KHQsZCkuY29tcGlsZVRvRnJhZ21lbnRzKGUpfX0se2tleToiY29tcGlsZUNTWEF0dHJpYnV0ZXMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVDU1hBdHRyaWJ1dGVzKGUpe3ZhciBhLHQsbyxuLHIsbCxzO2ZvcihzPXRoaXMucHJvcGVydGllcyxhPVtdLHQ9bz0wLHI9cy5sZW5ndGg7bzxyO3Q9KytvKXt2YXIgaTtsPXNbdF0sbC5jc3g9ITAsbj10PT09cy5sZW5ndGgtMT8iIjoiICIsbCBpbnN0YW5jZW9mIFRlJiYobD1uZXcgSygieyIrbC5jb21waWxlKGUpKyJ9IikpLChpPWEpLnB1c2guYXBwbHkoaSxfdG9Db25zdW1hYmxlQXJyYXkobC5jb21waWxlVG9GcmFnbWVudHMoZSx6KSkpLGEucHVzaCh0aGlzLm1ha2VDb2RlKG4pKX1yZXR1cm4gdGhpcy5mcm9udD90aGlzLndyYXBJblBhcmVudGhlc2VzKGEpOmF9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bInByb3BlcnRpZXMiXSxlfS5jYWxsKHRoaXMpLGUuQXJyPXM9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciBhPSEhKDE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdKSYmYXJndW1lbnRzWzFdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpO3ZhciBvPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcykpO3JldHVybiBvLmxocz1hLG8ub2JqZWN0cz1lfHxbXSxvfXJldHVybiBfaW5oZXJpdHModCxlKSxfY3JlYXRlQ2xhc3ModCxbe2tleToiaGFzRWxpc2lvbiIsdmFsdWU6ZnVuY3Rpb24gaGFzRWxpc2lvbigpe3ZhciBlLGEsdCxvO2ZvcihvPXRoaXMub2JqZWN0cyxlPTAsYT1vLmxlbmd0aDtlPGE7ZSsrKWlmKHQ9b1tlXSx0IGluc3RhbmNlb2YgeSlyZXR1cm4hMDtyZXR1cm4hMX19LHtrZXk6ImlzQXNzaWduYWJsZSIsdmFsdWU6ZnVuY3Rpb24gaXNBc3NpZ25hYmxlKCl7dmFyIGUsYSx0LG8sbjtpZighdGhpcy5vYmplY3RzLmxlbmd0aClyZXR1cm4hMTtmb3Iobj10aGlzLm9iamVjdHMsZT1hPTAsdD1uLmxlbmd0aDthPHQ7ZT0rK2Epe2lmKG89bltlXSxvIGluc3RhbmNlb2YgVGUmJmUrMSE9PXRoaXMub2JqZWN0cy5sZW5ndGgpcmV0dXJuITE7aWYoIShvLmlzQXNzaWduYWJsZSgpJiYoIW8uaXNBdG9taWN8fG8uaXNBdG9taWMoKSkpKXJldHVybiExfXJldHVybiEwfX0se2tleToic2hvdWxkQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uIHNob3VsZENhY2hlKCl7cmV0dXJuIXRoaXMuaXNBc3NpZ25hYmxlKCl9fSx7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7dmFyIG8sbixzLGksZCxjLHAsdSxtLGgsZyxsLGYseSxrLFQsTix2LGIsJCxfLEMscixEO2lmKCF0aGlzLm9iamVjdHMubGVuZ3RoKXJldHVyblt0aGlzLm1ha2VDb2RlKCJbXSIpXTtmb3IoZS5pbmRlbnQrPURlLGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIiwiPT09V2UoZSkudHJpbSgpfSwkPSExLG89W10scj10aGlzLm9iamVjdHMsdj1tPTAsbD1yLmxlbmd0aDttPGw7dj0rK20pTj1yW3ZdLEQ9Ti51bndyYXBBbGwoKSxELmNvbW1lbnRzJiYwPT09RC5jb21tZW50cy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWUuaGVyZX0pLmxlbmd0aCYmKEQuaW5jbHVkZUNvbW1lbnRGcmFnbWVudHM9d2UpLHRoaXMubGhzJiYoRCBpbnN0YW5jZW9mIHR8fEQgaW5zdGFuY2VvZiBsZSkmJihELmxocz0hMCk7Zm9yKG49ZnVuY3Rpb24oKXt2YXIgYSx0LG8sbjtmb3Iobz10aGlzLm9iamVjdHMsbj1bXSxhPTAsdD1vLmxlbmd0aDthPHQ7YSsrKU49b1thXSxuLnB1c2goTi5jb21waWxlVG9GcmFnbWVudHMoZSxYKSk7cmV0dXJuIG59LmNhbGwodGhpcyksYj1uLmxlbmd0aCxwPSExLHU9aD0wLGY9bi5sZW5ndGg7aDxmO3U9KytoKXt2YXIgRTtmb3IoYz1uW3VdLGc9MCx5PWMubGVuZ3RoO2c8eTtnKyspcz1jW2ddLHMuaXNIZXJlQ29tbWVudD9zLmNvZGU9cy5jb2RlLnRyaW0oKTowIT09dSYmITE9PT1wJiZYZShzKSYmKHA9ITApOzAhPT11JiYkJiYoIWQoYyl8fHU9PT1iLTEpJiZvLnB1c2godGhpcy5tYWtlQ29kZSgiLCAiKSksJD0kfHwhZChjKSwoRT1vKS5wdXNoLmFwcGx5KEUsX3RvQ29uc3VtYWJsZUFycmF5KGMpKX1pZihwfHwwPD1hLmNhbGwoV2UobyksIlxuIikpe2ZvcihpPV89MCxrPW8ubGVuZ3RoO188aztpPSsrXylzPW9baV0scy5pc0hlcmVDb21tZW50P3MuY29kZT1lYShzLmNvZGUsZS5pbmRlbnQsITEpKyJcbiIrZS5pbmRlbnQ6IiwgIj09PXMuY29kZSYmKG51bGw9PXN8fCFzLmlzRWxpc2lvbikmJihzLmNvZGU9IixcbiIrZS5pbmRlbnQpO28udW5zaGlmdCh0aGlzLm1ha2VDb2RlKCJbXG4iK2UuaW5kZW50KSksby5wdXNoKHRoaXMubWFrZUNvZGUoIlxuIit0aGlzLnRhYisiXSIpKX1lbHNle2ZvcihDPTAsVD1vLmxlbmd0aDtDPFQ7QysrKXM9b1tDXSxzLmlzSGVyZUNvbW1lbnQmJihzLmNvZGUrPSIgIik7by51bnNoaWZ0KHRoaXMubWFrZUNvZGUoIlsiKSksby5wdXNoKHRoaXMubWFrZUNvZGUoIl0iKSl9cmV0dXJuIG99fSx7a2V5OiJhc3NpZ25zIix2YWx1ZTpmdW5jdGlvbiBhc3NpZ25zKGUpe3ZhciBhLHQsbyxuO2ZvcihuPXRoaXMub2JqZWN0cyxhPTAsdD1uLmxlbmd0aDthPHQ7YSsrKWlmKG89blthXSxvLmFzc2lnbnMoZSkpcmV0dXJuITA7cmV0dXJuITF9fSx7a2V5OiJlYWNoTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZWFjaE5hbWUoZSl7dmFyIGEsdCxvLG4scjtmb3Iobj10aGlzLm9iamVjdHMscj1bXSxhPTAsdD1uLmxlbmd0aDthPHQ7YSsrKW89blthXSxvPW8udW53cmFwQWxsKCksci5wdXNoKG8uZWFjaE5hbWUoZSkpO3JldHVybiByfX1dKSx0fShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJvYmplY3RzIl0sZX0uY2FsbCh0aGlzKSxlLkNsYXNzPW09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBvKGUsYSl7dmFyIHQ9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm5ldyBjO19jbGFzc0NhbGxDaGVjayh0aGlzLG8pO3ZhciBuPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKG8uX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YobykpLmNhbGwodGhpcykpO3JldHVybiBuLnZhcmlhYmxlPWUsbi5wYXJlbnQ9YSxuLmJvZHk9dCxufXJldHVybiBfaW5oZXJpdHMobyxlKSxfY3JlYXRlQ2xhc3Mobyxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhLHQsbztpZih0aGlzLm5hbWU9dGhpcy5kZXRlcm1pbmVOYW1lKCksYT10aGlzLndhbGtCb2R5KCksdGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBMZSYmIXRoaXMucGFyZW50Lmhhc1Byb3BlcnRpZXMoKSYmKG89dGhpcy5wYXJlbnQuYmFzZS52YWx1ZSksdGhpcy5oYXNOYW1lQ2xhc2g9bnVsbCE9dGhpcy5uYW1lJiZ0aGlzLm5hbWU9PT1vLHQ9dGhpcyxhfHx0aGlzLmhhc05hbWVDbGFzaD90PW5ldyBrKHQsYSk6bnVsbD09dGhpcy5uYW1lJiZlLmxldmVsPT09eiYmKHQ9bmV3IGRlKHQpKSx0aGlzLmJvdW5kTWV0aG9kcy5sZW5ndGgmJnRoaXMucGFyZW50JiYobnVsbD09dGhpcy52YXJpYWJsZSYmKHRoaXMudmFyaWFibGU9bmV3IFIoZS5zY29wZS5mcmVlVmFyaWFibGUoIl9jbGFzcyIpKSksbnVsbD09dGhpcy52YXJpYWJsZVJlZikpe3ZhciBuPXRoaXMudmFyaWFibGUuY2FjaGUoZSkscj1fc2xpY2VkVG9BcnJheShuLDIpO3RoaXMudmFyaWFibGU9clswXSx0aGlzLnZhcmlhYmxlUmVmPXJbMV19dGhpcy52YXJpYWJsZSYmKHQ9bmV3IGQodGhpcy52YXJpYWJsZSx0LG51bGwse21vZHVsZURlY2xhcmF0aW9uOnRoaXMubW9kdWxlRGVjbGFyYXRpb259KSksdGhpcy5jb21waWxlTm9kZT10aGlzLmNvbXBpbGVDbGFzc0RlY2xhcmF0aW9uO3RyeXtyZXR1cm4gdC5jb21waWxlVG9GcmFnbWVudHMoZSl9ZmluYWxseXtkZWxldGUgdGhpcy5jb21waWxlTm9kZX19fSx7a2V5OiJjb21waWxlQ2xhc3NEZWNsYXJhdGlvbiIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZUNsYXNzRGVjbGFyYXRpb24oZSl7dmFyIGEsdCxvO2lmKCh0aGlzLmV4dGVybmFsQ3Rvcnx8dGhpcy5ib3VuZE1ldGhvZHMubGVuZ3RoKSYmbnVsbD09dGhpcy5jdG9yJiYodGhpcy5jdG9yPXRoaXMubWFrZURlZmF1bHRDb25zdHJ1Y3RvcigpKSxudWxsIT0oYT10aGlzLmN0b3IpJiYoYS5ub1JldHVybj0hMCksdGhpcy5ib3VuZE1ldGhvZHMubGVuZ3RoJiZ0aGlzLnByb3h5Qm91bmRNZXRob2RzKCksZS5pbmRlbnQrPURlLG89W10sby5wdXNoKHRoaXMubWFrZUNvZGUoImNsYXNzICIpKSx0aGlzLm5hbWUmJm8ucHVzaCh0aGlzLm1ha2VDb2RlKHRoaXMubmFtZSkpLG51bGwhPShudWxsPT0odD10aGlzLnZhcmlhYmxlKT92b2lkIDA6dC5jb21tZW50cykmJnRoaXMuY29tcGlsZUNvbW1lbnRGcmFnbWVudHMoZSx0aGlzLnZhcmlhYmxlLG8pLHRoaXMubmFtZSYmby5wdXNoKHRoaXMubWFrZUNvZGUoIiAiKSksdGhpcy5wYXJlbnQpe3ZhciBuOyhuPW8pLnB1c2guYXBwbHkobixbdGhpcy5tYWtlQ29kZSgiZXh0ZW5kcyAiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh0aGlzLnBhcmVudC5jb21waWxlVG9GcmFnbWVudHMoZSkpLFt0aGlzLm1ha2VDb2RlKCIgIildKSl9aWYoby5wdXNoKHRoaXMubWFrZUNvZGUoInsiKSksIXRoaXMuYm9keS5pc0VtcHR5KCkpe3ZhciByO3RoaXMuYm9keS5zcGFjZWQ9ITAsby5wdXNoKHRoaXMubWFrZUNvZGUoIlxuIikpLChyPW8pLnB1c2guYXBwbHkocixfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5ib2R5LmNvbXBpbGVUb0ZyYWdtZW50cyhlLHopKSksby5wdXNoKHRoaXMubWFrZUNvZGUoIlxuIit0aGlzLnRhYikpfXJldHVybiBvLnB1c2godGhpcy5tYWtlQ29kZSgifSIpKSxvfX0se2tleToiZGV0ZXJtaW5lTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZGV0ZXJtaW5lTmFtZSgpe3ZhciBlLHQsbyxsLHMsaSxkO3JldHVybiB0aGlzLnZhcmlhYmxlPyhpPXRoaXMudmFyaWFibGUucHJvcGVydGllcyxlPW4uY2FsbChpLC0xKSx0PV9zbGljZWRUb0FycmF5KGUsMSksZD10WzBdLGUscz1kP2QgaW5zdGFuY2VvZiByJiZkLm5hbWU6dGhpcy52YXJpYWJsZS5iYXNlLCEocyBpbnN0YW5jZW9mIFJ8fHMgaW5zdGFuY2VvZiBwZSkpP251bGw6KGw9cy52YWx1ZSxkfHwobz1KZShsKSxvJiZ0aGlzLnZhcmlhYmxlLmVycm9yKG8pKSwwPD1hLmNhbGwoRyxsKT8iXyIrbDpsKTpudWxsfX0se2tleToid2Fsa0JvZHkiLHZhbHVlOmZ1bmN0aW9uIHdhbGtCb2R5KCl7dmFyIGUsYSxvLG4scixsLHMsaSxkLHAsdSxtLGcsZix5LGssVCxOO2Zvcih0aGlzLmN0b3I9bnVsbCx0aGlzLmJvdW5kTWV0aG9kcz1bXSxvPW51bGwsaT1bXSxyPXRoaXMuYm9keS5leHByZXNzaW9ucyxzPTAsVD1yLnNsaWNlKCkscD0wLG09VC5sZW5ndGg7cDxtO3ArKylpZihuPVRbcF0sbiBpbnN0YW5jZW9mIExlJiZuLmlzT2JqZWN0KCEwKSl7Zm9yKHk9bi5iYXNlLnByb3BlcnRpZXMsbD1bXSxhPTAsTj0wLGs9ZnVuY3Rpb24oKXtpZihhPk4pcmV0dXJuIGwucHVzaChuZXcgTGUobmV3IGxlKHkuc2xpY2UoTixhKSwhMCkpKX07ZT15W2FdOykoZD10aGlzLmFkZEluaXRpYWxpemVyRXhwcmVzc2lvbihlKSkmJihrKCksbC5wdXNoKGQpLGkucHVzaChkKSxOPWErMSksYSsrO2soKSx0LmFwcGx5KHIsW3Mscy1zKzFdLmNvbmNhdChsKSksbCxzKz1sLmxlbmd0aH1lbHNlKGQ9dGhpcy5hZGRJbml0aWFsaXplckV4cHJlc3Npb24obikpJiYoaS5wdXNoKGQpLHJbc109ZCkscys9MTtmb3IodT0wLGc9aS5sZW5ndGg7dTxnO3UrKylmPWlbdV0sZiBpbnN0YW5jZW9mIGgmJihmLmN0b3I/KHRoaXMuY3RvciYmZi5lcnJvcigiQ2Fubm90IGRlZmluZSBtb3JlIHRoYW4gb25lIGNvbnN0cnVjdG9yIGluIGEgY2xhc3MiKSx0aGlzLmN0b3I9Zik6Zi5pc1N0YXRpYyYmZi5ib3VuZD9mLmNvbnRleHQ9dGhpcy5uYW1lOmYuYm91bmQmJnRoaXMuYm91bmRNZXRob2RzLnB1c2goZikpO2lmKGkubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuIHRoaXMuYm9keS5leHByZXNzaW9ucz1mdW5jdGlvbigpe3ZhciBlLGEsdDtmb3IodD1bXSxlPTAsYT1pLmxlbmd0aDtlPGE7ZSsrKW49aVtlXSx0LnB1c2gobi5ob2lzdCgpKTtyZXR1cm4gdH0oKSxuZXcgYyhyKX19LHtrZXk6ImFkZEluaXRpYWxpemVyRXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24gYWRkSW5pdGlhbGl6ZXJFeHByZXNzaW9uKGUpe3JldHVybiBlLnVud3JhcEFsbCgpaW5zdGFuY2VvZiBjZT9lOnRoaXMudmFsaWRJbml0aWFsaXplck1ldGhvZChlKT90aGlzLmFkZEluaXRpYWxpemVyTWV0aG9kKGUpOm51bGx9fSx7a2V5OiJ2YWxpZEluaXRpYWxpemVyTWV0aG9kIix2YWx1ZTpmdW5jdGlvbiB2YWxpZEluaXRpYWxpemVyTWV0aG9kKGUpe3JldHVybiEhKGUgaW5zdGFuY2VvZiBkJiZlLnZhbHVlIGluc3RhbmNlb2YgaCkmJighKCJvYmplY3QiIT09ZS5jb250ZXh0fHxlLnZhcmlhYmxlLmhhc1Byb3BlcnRpZXMoKSl8fGUudmFyaWFibGUubG9va3NTdGF0aWModGhpcy5uYW1lKSYmKHRoaXMubmFtZXx8IWUudmFsdWUuYm91bmQpKX19LHtrZXk6ImFkZEluaXRpYWxpemVyTWV0aG9kIix2YWx1ZTpmdW5jdGlvbiBhZGRJbml0aWFsaXplck1ldGhvZChlKXt2YXIgYSx0LG87cmV0dXJuIG89ZS52YXJpYWJsZSxhPWUudmFsdWUsYS5pc01ldGhvZD0hMCxhLmlzU3RhdGljPW8ubG9va3NTdGF0aWModGhpcy5uYW1lKSxhLmlzU3RhdGljP2EubmFtZT1vLnByb3BlcnRpZXNbMF06KHQ9by5iYXNlLGEubmFtZT1uZXcodC5zaG91bGRDYWNoZSgpP1Y6cikodCksYS5uYW1lLnVwZGF0ZUxvY2F0aW9uRGF0YUlmTWlzc2luZyh0LmxvY2F0aW9uRGF0YSksImNvbnN0cnVjdG9yIj09PXQudmFsdWUmJihhLmN0b3I9dGhpcy5wYXJlbnQ/ImRlcml2ZWQiOiJiYXNlIiksYS5ib3VuZCYmYS5jdG9yJiZhLmVycm9yKCJDYW5ub3QgZGVmaW5lIGEgY29uc3RydWN0b3IgYXMgYSBib3VuZCAoZmF0IGFycm93KSBmdW5jdGlvbiIpKSxhfX0se2tleToibWFrZURlZmF1bHRDb25zdHJ1Y3RvciIsdmFsdWU6ZnVuY3Rpb24gbWFrZURlZmF1bHRDb25zdHJ1Y3Rvcigpe3ZhciBlLGEsdDtyZXR1cm4gdD10aGlzLmFkZEluaXRpYWxpemVyTWV0aG9kKG5ldyBkKG5ldyBMZShuZXcgcGUoImNvbnN0cnVjdG9yIikpLG5ldyBoKSksdGhpcy5ib2R5LnVuc2hpZnQodCksdGhpcy5wYXJlbnQmJnQuYm9keS5wdXNoKG5ldyBfZShuZXcgJGUsW25ldyBUZShuZXcgUigiYXJndW1lbnRzIikpXSkpLHRoaXMuZXh0ZXJuYWxDdG9yJiYoYT1uZXcgTGUodGhpcy5leHRlcm5hbEN0b3IsW25ldyByKG5ldyBwZSgiYXBwbHkiKSldKSxlPVtuZXcgSWUsbmV3IFIoImFyZ3VtZW50cyIpXSx0LmJvZHkucHVzaChuZXcgdShhLGUpKSx0LmJvZHkubWFrZVJldHVybigpKSx0fX0se2tleToicHJveHlCb3VuZE1ldGhvZHMiLHZhbHVlOmZ1bmN0aW9uIHByb3h5Qm91bmRNZXRob2RzKCl7dmFyIGUsYTtyZXR1cm4gdGhpcy5jdG9yLnRoaXNBc3NpZ25tZW50cz1mdW5jdGlvbigpe3ZhciB0LG8sbixsO2ZvcihuPXRoaXMuYm91bmRNZXRob2RzLGw9W10sdD0wLG89bi5sZW5ndGg7dDxvO3QrKyllPW5bdF0sdGhpcy5wYXJlbnQmJihlLmNsYXNzVmFyaWFibGU9dGhpcy52YXJpYWJsZVJlZiksYT1uZXcgTGUobmV3IEllLFtlLm5hbWVdKSxsLnB1c2gobmV3IGQoYSxuZXcgdShuZXcgTGUoYSxbbmV3IHIobmV3IHBlKCJiaW5kIikpXSksW25ldyBJZV0pKSk7cmV0dXJuIGx9LmNhbGwodGhpcyksbnVsbH19XSksb30obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsidmFyaWFibGUiLCJwYXJlbnQiLCJib2R5Il0sZX0uY2FsbCh0aGlzKSxlLkV4ZWN1dGFibGVDbGFzc0JvZHk9az1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSl7dmFyIHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm5ldyBjO19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciBvPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpO3JldHVybiBvLmNsYXNzPWUsby5ib2R5PXQsb31yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbixsLHMsaSxjLHAsbSxnLGY7cmV0dXJuKGk9dGhpcy5ib2R5Lmp1bXBzKCkpJiZpLmVycm9yKCJDbGFzcyBib2RpZXMgY2Fubm90IGNvbnRhaW4gcHVyZSBzdGF0ZW1lbnRzIiksKG89dGhpcy5ib2R5LmNvbnRhaW5zKHFlKSkmJm8uZXJyb3IoIkNsYXNzIGJvZGllcyBzaG91bGRuJ3QgcmVmZXJlbmNlIGFyZ3VtZW50cyIpLHA9W10sdD1bbmV3IEllXSxmPW5ldyBoKHAsdGhpcy5ib2R5KSxjPW5ldyBkZShuZXcgdShuZXcgTGUoZixbbmV3IHIobmV3IHBlKCJjYWxsIikpXSksdCkpLHRoaXMuYm9keS5zcGFjZWQ9ITAsZS5jbGFzc1Njb3BlPWYubWFrZVNjb3BlKGUuc2NvcGUpLHRoaXMubmFtZT1udWxsPT0oZz10aGlzLmNsYXNzLm5hbWUpP2UuY2xhc3NTY29wZS5mcmVlVmFyaWFibGUodGhpcy5kZWZhdWx0Q2xhc3NWYXJpYWJsZU5hbWUpOmcscz1uZXcgUih0aGlzLm5hbWUpLG49dGhpcy53YWxrQm9keSgpLHRoaXMuc2V0Q29udGV4dCgpLHRoaXMuY2xhc3MuaGFzTmFtZUNsYXNoJiYobT1uZXcgUihlLmNsYXNzU2NvcGUuZnJlZVZhcmlhYmxlKCJzdXBlckNsYXNzIikpLGYucGFyYW1zLnB1c2gobmV3IGllKG0pKSx0LnB1c2godGhpcy5jbGFzcy5wYXJlbnQpLHRoaXMuY2xhc3MucGFyZW50PW0pLHRoaXMuZXh0ZXJuYWxDdG9yJiYobD1uZXcgUihlLmNsYXNzU2NvcGUuZnJlZVZhcmlhYmxlKCJjdG9yIix7cmVzZXJ2ZTohMX0pKSx0aGlzLmNsYXNzLmV4dGVybmFsQ3Rvcj1sLHRoaXMuZXh0ZXJuYWxDdG9yLnZhcmlhYmxlLmJhc2U9bCksdGhpcy5uYW1lPT09dGhpcy5jbGFzcy5uYW1lP3RoaXMuYm9keS5leHByZXNzaW9ucy51bnNoaWZ0KHRoaXMuY2xhc3MpOnRoaXMuYm9keS5leHByZXNzaW9ucy51bnNoaWZ0KG5ldyBkKG5ldyBSKHRoaXMubmFtZSksdGhpcy5jbGFzcykpLChhPXRoaXMuYm9keS5leHByZXNzaW9ucykudW5zaGlmdC5hcHBseShhLF90b0NvbnN1bWFibGVBcnJheShuKSksdGhpcy5ib2R5LnB1c2gocyksYy5jb21waWxlVG9GcmFnbWVudHMoZSl9fSx7a2V5OiJ3YWxrQm9keSIsdmFsdWU6ZnVuY3Rpb24gd2Fsa0JvZHkoKXt2YXIgZT10aGlzLGEsdCxvO2ZvcihhPVtdLG89MDsodD10aGlzLmJvZHkuZXhwcmVzc2lvbnNbb10pJiYhISh0IGluc3RhbmNlb2YgTGUmJnQuaXNTdHJpbmcoKSk7KWlmKHQuaG9pc3RlZClvKys7ZWxzZXt2YXIgbjsobj1hKS5wdXNoLmFwcGx5KG4sX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuYm9keS5leHByZXNzaW9ucy5zcGxpY2UobywxKSkpfXJldHVybiB0aGlzLnRyYXZlcnNlQ2hpbGRyZW4oITEsZnVuY3Rpb24oYSl7dmFyIHQsbyxuLHIsbCxzO2lmKGEgaW5zdGFuY2VvZiBtfHxhIGluc3RhbmNlb2YgQSlyZXR1cm4hMTtpZih0PSEwLGEgaW5zdGFuY2VvZiBjKXtmb3Iocz1hLmV4cHJlc3Npb25zLG89bj0wLHI9cy5sZW5ndGg7bjxyO289KytuKWw9c1tvXSxsIGluc3RhbmNlb2YgTGUmJmwuaXNPYmplY3QoITApPyh0PSExLGEuZXhwcmVzc2lvbnNbb109ZS5hZGRQcm9wZXJ0aWVzKGwuYmFzZS5wcm9wZXJ0aWVzKSk6bCBpbnN0YW5jZW9mIGQmJmwudmFyaWFibGUubG9va3NTdGF0aWMoZS5uYW1lKSYmKGwudmFsdWUuaXNTdGF0aWM9ITApO2EuZXhwcmVzc2lvbnM9SGUoYS5leHByZXNzaW9ucyl9cmV0dXJuIHR9KSxhfX0se2tleToic2V0Q29udGV4dCIsdmFsdWU6ZnVuY3Rpb24gc2V0Q29udGV4dCgpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuYm9keS50cmF2ZXJzZUNoaWxkcmVuKCExLGZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgSWU/YS52YWx1ZT1lLm5hbWU6YSBpbnN0YW5jZW9mIGgmJmEuYm91bmQmJmEuaXNTdGF0aWM/YS5jb250ZXh0PWUubmFtZTp2b2lkIDB9KX19LHtrZXk6ImFkZFByb3BlcnRpZXMiLHZhbHVlOmZ1bmN0aW9uIGFkZFByb3BlcnRpZXMoZSl7dmFyIGEsdCxvLG4sbCxzLGk7cmV0dXJuIGw9ZnVuY3Rpb24oKXt2YXIgbCxjLHA7Zm9yKHA9W10sbD0wLGM9ZS5sZW5ndGg7bDxjO2wrKylhPWVbbF0saT1hLnZhcmlhYmxlLHQ9bnVsbD09aT92b2lkIDA6aS5iYXNlLHM9YS52YWx1ZSxkZWxldGUgYS5jb250ZXh0LCJjb25zdHJ1Y3RvciI9PT10LnZhbHVlPyhzIGluc3RhbmNlb2YgaCYmdC5lcnJvcigiY29uc3RydWN0b3JzIG11c3QgYmUgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgY2xhc3MgYm9keSIpLGE9dGhpcy5leHRlcm5hbEN0b3I9bmV3IGQobmV3IExlLHMpKTphLnZhcmlhYmxlLnRoaXM/YS52YWx1ZSBpbnN0YW5jZW9mIGgmJihhLnZhbHVlLmlzU3RhdGljPSEwKToobz1uZXcodC5zaG91bGRDYWNoZSgpP1Y6cikodCksbj1uZXcgcihuZXcgcGUoInByb3RvdHlwZSIpKSxpPW5ldyBMZShuZXcgSWUsW24sb10pLGEudmFyaWFibGU9aSkscC5wdXNoKGEpO3JldHVybiBwfS5jYWxsKHRoaXMpLFVlKGwpfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJjbGFzcyIsImJvZHkiXSxlLnByb3RvdHlwZS5kZWZhdWx0Q2xhc3NWYXJpYWJsZU5hbWU9Il9DbGFzcyIsZX0uY2FsbCh0aGlzKSxlLk1vZHVsZURlY2xhcmF0aW9uPVo9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUsdCl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIG89X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIG8uY2xhdXNlPWUsby5zb3VyY2U9dCxvLmNoZWNrU291cmNlKCksb31yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNoZWNrU291cmNlIix2YWx1ZTpmdW5jdGlvbiBjaGVja1NvdXJjZSgpe2lmKG51bGwhPXRoaXMuc291cmNlJiZ0aGlzLnNvdXJjZSBpbnN0YW5jZW9mIGJlKXJldHVybiB0aGlzLnNvdXJjZS5lcnJvcigidGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBiZSBpbXBvcnRlZCBmcm9tIG11c3QgYmUgYW4gdW5pbnRlcnBvbGF0ZWQgc3RyaW5nIil9fSx7a2V5OiJjaGVja1Njb3BlIix2YWx1ZTpmdW5jdGlvbiBjaGVja1Njb3BlKGUsYSl7aWYoMCE9PWUuaW5kZW50Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcihhKyIgc3RhdGVtZW50cyBtdXN0IGJlIGF0IHRvcC1sZXZlbCBzY29wZSIpfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJjbGF1c2UiLCJzb3VyY2UiXSxlLnByb3RvdHlwZS5pc1N0YXRlbWVudD13ZSxlLnByb3RvdHlwZS5qdW1wcz1FZSxlLnByb3RvdHlwZS5tYWtlUmV0dXJuPUVlLGV9LmNhbGwodGhpcyksZS5JbXBvcnREZWNsYXJhdGlvbj1GPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0O2lmKHRoaXMuY2hlY2tTY29wZShlLCJpbXBvcnQiKSxlLmltcG9ydGVkU3ltYm9scz1bXSxhPVtdLGEucHVzaCh0aGlzLm1ha2VDb2RlKHRoaXMudGFiKyJpbXBvcnQgIikpLG51bGwhPXRoaXMuY2xhdXNlKXt2YXIgbzsobz1hKS5wdXNoLmFwcGx5KG8sX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuY2xhdXNlLmNvbXBpbGVOb2RlKGUpKSl9cmV0dXJuIG51bGwhPShudWxsPT0odD10aGlzLnNvdXJjZSk/dm9pZCAwOnQudmFsdWUpJiYobnVsbCE9PXRoaXMuY2xhdXNlJiZhLnB1c2godGhpcy5tYWtlQ29kZSgiIGZyb20gIikpLGEucHVzaCh0aGlzLm1ha2VDb2RlKHRoaXMuc291cmNlLnZhbHVlKSkpLGEucHVzaCh0aGlzLm1ha2VDb2RlKCI7IikpLGF9fV0pLGF9KFopLGUuSW1wb3J0Q2xhdXNlPUw9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKGUsdCl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIG89X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIG8uZGVmYXVsdEJpbmRpbmc9ZSxvLm5hbWVkSW1wb3J0cz10LG99cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7dmFyIGE7aWYoYT1bXSxudWxsIT10aGlzLmRlZmF1bHRCaW5kaW5nKXt2YXIgdDsodD1hKS5wdXNoLmFwcGx5KHQsX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMuZGVmYXVsdEJpbmRpbmcuY29tcGlsZU5vZGUoZSkpKSxudWxsIT10aGlzLm5hbWVkSW1wb3J0cyYmYS5wdXNoKHRoaXMubWFrZUNvZGUoIiwgIikpfWlmKG51bGwhPXRoaXMubmFtZWRJbXBvcnRzKXt2YXIgbzsobz1hKS5wdXNoLmFwcGx5KG8sX3RvQ29uc3VtYWJsZUFycmF5KHRoaXMubmFtZWRJbXBvcnRzLmNvbXBpbGVOb2RlKGUpKSl9cmV0dXJuIGF9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bImRlZmF1bHRCaW5kaW5nIiwibmFtZWRJbXBvcnRzIl0sZX0uY2FsbCh0aGlzKSxlLkV4cG9ydERlY2xhcmF0aW9uPWI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhLHQ7cmV0dXJuIHRoaXMuY2hlY2tTY29wZShlLCJleHBvcnQiKSxhPVtdLGEucHVzaCh0aGlzLm1ha2VDb2RlKHRoaXMudGFiKyJleHBvcnQgIikpLHRoaXMgaW5zdGFuY2VvZiAkJiZhLnB1c2godGhpcy5tYWtlQ29kZSgiZGVmYXVsdCAiKSksISh0aGlzIGluc3RhbmNlb2YgJCkmJih0aGlzLmNsYXVzZSBpbnN0YW5jZW9mIGR8fHRoaXMuY2xhdXNlIGluc3RhbmNlb2YgbSkmJih0aGlzLmNsYXVzZSBpbnN0YW5jZW9mIG0mJiF0aGlzLmNsYXVzZS52YXJpYWJsZSYmdGhpcy5jbGF1c2UuZXJyb3IoImFub255bW91cyBjbGFzc2VzIGNhbm5vdCBiZSBleHBvcnRlZCIpLGEucHVzaCh0aGlzLm1ha2VDb2RlKCJ2YXIgIikpLHRoaXMuY2xhdXNlLm1vZHVsZURlY2xhcmF0aW9uPSJleHBvcnQiKSxhPW51bGwhPXRoaXMuY2xhdXNlLmJvZHkmJnRoaXMuY2xhdXNlLmJvZHkgaW5zdGFuY2VvZiBjP2EuY29uY2F0KHRoaXMuY2xhdXNlLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHopKTphLmNvbmNhdCh0aGlzLmNsYXVzZS5jb21waWxlTm9kZShlKSksbnVsbCE9KG51bGw9PSh0PXRoaXMuc291cmNlKT92b2lkIDA6dC52YWx1ZSkmJmEucHVzaCh0aGlzLm1ha2VDb2RlKCIgZnJvbSAiK3RoaXMuc291cmNlLnZhbHVlKSksYS5wdXNoKHRoaXMubWFrZUNvZGUoIjsiKSksYX19XSksYX0oWiksZS5FeHBvcnROYW1lZERlY2xhcmF0aW9uPV89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShiKSxlLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbj0kPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksYX0oYiksZS5FeHBvcnRBbGxEZWNsYXJhdGlvbj12PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksYX0oYiksZS5Nb2R1bGVTcGVjaWZpZXJMaXN0PWVlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgdD1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5zcGVjaWZpZXJzPWUsdH1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbixyLGwscztpZihhPVtdLGUuaW5kZW50Kz1EZSx0PWZ1bmN0aW9uKCl7dmFyIGEsdCxvLG47Zm9yKG89dGhpcy5zcGVjaWZpZXJzLG49W10sYT0wLHQ9by5sZW5ndGg7YTx0O2ErKylzPW9bYV0sbi5wdXNoKHMuY29tcGlsZVRvRnJhZ21lbnRzKGUsWCkpO3JldHVybiBufS5jYWxsKHRoaXMpLDAhPT10aGlzLnNwZWNpZmllcnMubGVuZ3RoKXtmb3IoYS5wdXNoKHRoaXMubWFrZUNvZGUoIntcbiIrZS5pbmRlbnQpKSxuPXI9MCxsPXQubGVuZ3RoO3I8bDtuPSsrcil7dmFyIGk7bz10W25dLG4mJmEucHVzaCh0aGlzLm1ha2VDb2RlKCIsXG4iK2UuaW5kZW50KSksKGk9YSkucHVzaC5hcHBseShpLF90b0NvbnN1bWFibGVBcnJheShvKSl9YS5wdXNoKHRoaXMubWFrZUNvZGUoIlxufSIpKX1lbHNlIGEucHVzaCh0aGlzLm1ha2VDb2RlKCJ7fSIpKTtyZXR1cm4gYX19XSksYX0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsic3BlY2lmaWVycyJdLGV9LmNhbGwodGhpcyksZS5JbXBvcnRTcGVjaWZpZXJMaXN0PU09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShlZSksZS5FeHBvcnRTcGVjaWZpZXJMaXN0PUQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYSgpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShlZSksZS5Nb2R1bGVTcGVjaWZpZXI9UT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0LG8pe19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciBuPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpLHIsbDtpZihuLm9yaWdpbmFsPWUsbi5hbGlhcz10LG4ubW9kdWxlRGVjbGFyYXRpb25UeXBlPW8sbi5vcmlnaW5hbC5jb21tZW50c3x8KG51bGw9PShyPW4uYWxpYXMpP3ZvaWQgMDpyLmNvbW1lbnRzKSl7aWYobi5jb21tZW50cz1bXSxuLm9yaWdpbmFsLmNvbW1lbnRzKXt2YXIgczsocz1uLmNvbW1lbnRzKS5wdXNoLmFwcGx5KHMsX3RvQ29uc3VtYWJsZUFycmF5KG4ub3JpZ2luYWwuY29tbWVudHMpKX1pZihudWxsPT0obD1uLmFsaWFzKT92b2lkIDA6bC5jb21tZW50cyl7dmFyIGk7KGk9bi5jb21tZW50cykucHVzaC5hcHBseShpLF90b0NvbnN1bWFibGVBcnJheShuLmFsaWFzLmNvbW1lbnRzKSl9fXJldHVybiBuLmlkZW50aWZpZXI9bnVsbD09bi5hbGlhcz9uLm9yaWdpbmFsLnZhbHVlOm4uYWxpYXMudmFsdWUsbn1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYTtyZXR1cm4gZS5zY29wZS5maW5kKHRoaXMuaWRlbnRpZmllcix0aGlzLm1vZHVsZURlY2xhcmF0aW9uVHlwZSksYT1bXSxhLnB1c2godGhpcy5tYWtlQ29kZSh0aGlzLm9yaWdpbmFsLnZhbHVlKSksbnVsbCE9dGhpcy5hbGlhcyYmYS5wdXNoKHRoaXMubWFrZUNvZGUoIiBhcyAiK3RoaXMuYWxpYXMudmFsdWUpKSxhfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJvcmlnaW5hbCIsImFsaWFzIl0sZX0uY2FsbCh0aGlzKSxlLkltcG9ydFNwZWNpZmllcj1qPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxhKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsdCksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzLGUsYSwiaW1wb3J0IikpfXJldHVybiBfaW5oZXJpdHModCxlKSxfY3JlYXRlQ2xhc3ModCxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBvO3JldHVybihvPXRoaXMuaWRlbnRpZmllciwwPD1hLmNhbGwoZS5pbXBvcnRlZFN5bWJvbHMsbykpfHxlLnNjb3BlLmNoZWNrKHRoaXMuaWRlbnRpZmllcik/dGhpcy5lcnJvcigiJyIrdGhpcy5pZGVudGlmaWVyKyInIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQiKTplLmltcG9ydGVkU3ltYm9scy5wdXNoKHRoaXMuaWRlbnRpZmllciksX2dldCh0LnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0LnByb3RvdHlwZSksImNvbXBpbGVOb2RlIix0aGlzKS5jYWxsKHRoaXMsZSl9fV0pLHR9KFEpLGUuSW1wb3J0RGVmYXVsdFNwZWNpZmllcj13PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksYX0oaiksZS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXI9UD1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLGF9KGopLGUuRXhwb3J0U3BlY2lmaWVyPUM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQpe3JldHVybiBfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMsZSx0LCJleHBvcnQiKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLGF9KFEpLGUuQXNzaWduPWQ9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKGUsYSx0KXt2YXIgbz0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307X2NsYXNzQ2FsbENoZWNrKHRoaXMsbik7dmFyIHI9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywobi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHIudmFyaWFibGU9ZSxyLnZhbHVlPWEsci5jb250ZXh0PXQsci5wYXJhbT1vLnBhcmFtLHIuc3VicGF0dGVybj1vLnN1YnBhdHRlcm4sci5vcGVyYXRvclRva2VuPW8ub3BlcmF0b3JUb2tlbixyLm1vZHVsZURlY2xhcmF0aW9uPW8ubW9kdWxlRGVjbGFyYXRpb24scn1yZXR1cm4gX2luaGVyaXRzKG4sZSksX2NyZWF0ZUNsYXNzKG4sW3trZXk6ImlzU3RhdGVtZW50Iix2YWx1ZTpmdW5jdGlvbiBpc1N0YXRlbWVudChlKXtyZXR1cm4obnVsbD09ZT92b2lkIDA6ZS5sZXZlbCk9PT16JiZudWxsIT10aGlzLmNvbnRleHQmJih0aGlzLm1vZHVsZURlY2xhcmF0aW9ufHwwPD1hLmNhbGwodGhpcy5jb250ZXh0LCI/IikpfX0se2tleToiY2hlY2tBc3NpZ25hYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbiBjaGVja0Fzc2lnbmFiaWxpdHkoZSxhKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZS5zY29wZS5wb3NpdGlvbnMsYS52YWx1ZSkmJiJpbXBvcnQiPT09ZS5zY29wZS52YXJpYWJsZXNbZS5zY29wZS5wb3NpdGlvbnNbYS52YWx1ZV1dLnR5cGUpcmV0dXJuIGEuZXJyb3IoIiciK2EudmFsdWUrIicgaXMgcmVhZC1vbmx5Iil9fSx7a2V5OiJhc3NpZ25zIix2YWx1ZTpmdW5jdGlvbiBhc3NpZ25zKGUpe3JldHVybiB0aGlzWyJvYmplY3QiPT09dGhpcy5jb250ZXh0PyJ2YWx1ZSI6InZhcmlhYmxlIl0uYXNzaWducyhlKX19LHtrZXk6InVuZm9sZFNvYWsiLHZhbHVlOmZ1bmN0aW9uIHVuZm9sZFNvYWsoZSl7cmV0dXJuIHJhKGUsdGhpcywidmFyaWFibGUiKX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYT10aGlzLG8sbixyLGwscyxpLGQsYyxwLHUsZyxmLHksayxUO2lmKGw9dGhpcy52YXJpYWJsZSBpbnN0YW5jZW9mIExlLGwpe2lmKHRoaXMudmFyaWFibGUucGFyYW09dGhpcy5wYXJhbSx0aGlzLnZhcmlhYmxlLmlzQXJyYXkoKXx8dGhpcy52YXJpYWJsZS5pc09iamVjdCgpKXtpZih0aGlzLnZhcmlhYmxlLmJhc2UubGhzPSEwLHI9dGhpcy52YXJpYWJsZS5jb250YWlucyhmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGxlJiZlLmhhc1NwbGF0KCl9KSwhdGhpcy52YXJpYWJsZS5pc0Fzc2lnbmFibGUoKXx8dGhpcy52YXJpYWJsZS5pc0FycmF5KCkmJnIpcmV0dXJuIHRoaXMuY29tcGlsZURlc3RydWN0dXJpbmcoZSk7aWYodGhpcy52YXJpYWJsZS5pc09iamVjdCgpJiZyJiYoaT10aGlzLmNvbXBpbGVPYmplY3REZXN0cnVjdChlKSksaSlyZXR1cm4gaX1pZih0aGlzLnZhcmlhYmxlLmlzU3BsaWNlKCkpcmV0dXJuIHRoaXMuY29tcGlsZVNwbGljZShlKTtpZigifHw9Ij09PShwPXRoaXMuY29udGV4dCl8fCImJj0iPT09cHx8Ij89Ij09PXApcmV0dXJuIHRoaXMuY29tcGlsZUNvbmRpdGlvbmFsKGUpO2lmKCIqKj0iPT09KHU9dGhpcy5jb250ZXh0KXx8Ii8vPSI9PT11fHwiJSU9Ij09PXUpcmV0dXJuIHRoaXMuY29tcGlsZVNwZWNpYWxNYXRoKGUpfWlmKHRoaXMuY29udGV4dHx8KFQ9dGhpcy52YXJpYWJsZS51bndyYXBBbGwoKSwhVC5pc0Fzc2lnbmFibGUoKSYmdGhpcy52YXJpYWJsZS5lcnJvcigiJyIrdGhpcy52YXJpYWJsZS5jb21waWxlKGUpKyInIGNhbid0IGJlIGFzc2lnbmVkIiksVC5lYWNoTmFtZShmdW5jdGlvbih0KXt2YXIgbyxuLHI7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuaGFzUHJvcGVydGllc3x8IXQuaGFzUHJvcGVydGllcygpKXJldHVybihyPUplKHQudmFsdWUpLHImJnQuZXJyb3IociksYS5jaGVja0Fzc2lnbmFiaWxpdHkoZSx0KSxhLm1vZHVsZURlY2xhcmF0aW9uKT9lLnNjb3BlLmFkZCh0LnZhbHVlLGEubW9kdWxlRGVjbGFyYXRpb24pOmEucGFyYW0/ZS5zY29wZS5hZGQodC52YWx1ZSwiYWx3YXlzRGVjbGFyZSI9PT1hLnBhcmFtPyJ2YXIiOiJwYXJhbSIpOihlLnNjb3BlLmZpbmQodC52YWx1ZSksdC5jb21tZW50cyYmIWUuc2NvcGUuY29tbWVudHNbdC52YWx1ZV0mJiEoYS52YWx1ZSBpbnN0YW5jZW9mIG0pJiZ0LmNvbW1lbnRzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiBlLmhlcmUmJiFlLm11bHRpbGluZX0pKT8obj1uZXcgUih0LnZhbHVlKSxuLmNvbW1lbnRzPXQuY29tbWVudHMsbz1bXSxhLmNvbXBpbGVDb21tZW50RnJhZ21lbnRzKGUsbixvKSxlLnNjb3BlLmNvbW1lbnRzW3QudmFsdWVdPW8pOnZvaWQgMH0pKSx0aGlzLnZhbHVlIGluc3RhbmNlb2YgaClpZih0aGlzLnZhbHVlLmlzU3RhdGljKXRoaXMudmFsdWUubmFtZT10aGlzLnZhcmlhYmxlLnByb3BlcnRpZXNbMF07ZWxzZSBpZigyPD0obnVsbD09KGc9dGhpcy52YXJpYWJsZS5wcm9wZXJ0aWVzKT92b2lkIDA6Zy5sZW5ndGgpKXt2YXIgTix2LGIsJDtmPXRoaXMudmFyaWFibGUucHJvcGVydGllcyxOPWYsdj1fdG9BcnJheShOKSxkPXYuc2xpY2UoMCksTixiPXQuY2FsbChkLC0yKSwkPV9zbGljZWRUb0FycmF5KGIsMiksYz0kWzBdLHM9JFsxXSxiLCJwcm90b3R5cGUiPT09KG51bGw9PSh5PWMubmFtZSk/dm9pZCAwOnkudmFsdWUpJiYodGhpcy52YWx1ZS5uYW1lPXMpfXJldHVybih0aGlzLmNzeCYmKHRoaXMudmFsdWUuYmFzZS5jc3hBdHRyaWJ1dGU9ITApLGs9dGhpcy52YWx1ZS5jb21waWxlVG9GcmFnbWVudHMoZSxYKSxuPXRoaXMudmFyaWFibGUuY29tcGlsZVRvRnJhZ21lbnRzKGUsWCksIm9iamVjdCI9PT10aGlzLmNvbnRleHQpPyh0aGlzLnZhcmlhYmxlLnNob3VsZENhY2hlKCkmJihuLnVuc2hpZnQodGhpcy5tYWtlQ29kZSgiWyIpKSxuLnB1c2godGhpcy5tYWtlQ29kZSgiXSIpKSksbi5jb25jYXQodGhpcy5tYWtlQ29kZSh0aGlzLmNzeD8iPSI6IjogIiksaykpOihvPW4uY29uY2F0KHRoaXMubWFrZUNvZGUoIiAiKyh0aGlzLmNvbnRleHR8fCI9IikrIiAiKSxrKSxlLmxldmVsPlh8fGwmJnRoaXMudmFyaWFibGUuYmFzZSBpbnN0YW5jZW9mIGxlJiYhdGhpcy5uZXN0ZWRMaHMmJiEwIT09dGhpcy5wYXJhbT90aGlzLndyYXBJblBhcmVudGhlc2VzKG8pOm8pfX0se2tleToiY29tcGlsZU9iamVjdERlc3RydWN0Iix2YWx1ZTpmdW5jdGlvbiBjb21waWxlT2JqZWN0RGVzdHJ1Y3QoZSl7dmFyIGEsdCxvLGwsaSxkLHAsbSxoLGcsZix5O2lmKHQ9ZnVuY3Rpb24oYSl7dmFyIHQ7aWYoYSBpbnN0YW5jZW9mIG4pe3ZhciBvPWEudmFyaWFibGUuY2FjaGUoZSkscj1fc2xpY2VkVG9BcnJheShvLDIpO3JldHVybiBhLnZhcmlhYmxlPXJbMF0sdD1yWzFdLHR9cmV0dXJuIGF9LG89ZnVuY3Rpb24oYSl7dmFyIG8scjtyZXR1cm4gcj10KGEpLG89YSBpbnN0YW5jZW9mIG4mJmEudmFyaWFibGUhPT1yLG98fCFyLmlzQXNzaWduYWJsZSgpP3I6bmV3IEsoIiciK3IuY29tcGlsZVdpdGhvdXRDb21tZW50cyhlKSsiJyIpfSxoPWZ1bmN0aW9uIHRyYXZlcnNlUmVzdChhLGwpe3ZhciBpLGQsYyx1LG0sZyxmLHkscCxrLFQ7Zm9yKGs9W10sVD12b2lkIDAsbnVsbD09bC5wcm9wZXJ0aWVzJiYobD1uZXcgTGUobCkpLGQ9Yz0wLHU9YS5sZW5ndGg7Yzx1O2Q9KytjKWlmKHA9YVtkXSxmPWc9bT1udWxsLHAgaW5zdGFuY2VvZiBuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YoaT1wLnZhbHVlKS5pc09iamVjdD9pLmlzT2JqZWN0KCk6dm9pZCAwKXtpZigib2JqZWN0IiE9PXAuY29udGV4dCljb250aW51ZTttPXAudmFsdWUuYmFzZS5wcm9wZXJ0aWVzfWVsc2UgaWYocC52YWx1ZSBpbnN0YW5jZW9mIG4mJnAudmFsdWUudmFyaWFibGUuaXNPYmplY3QoKSl7bT1wLnZhbHVlLnZhcmlhYmxlLmJhc2UucHJvcGVydGllczt2YXIgTj1wLnZhbHVlLnZhbHVlLmNhY2hlKGUpLHY9X3NsaWNlZFRvQXJyYXkoTiwyKTtwLnZhbHVlLnZhbHVlPXZbMF0sZj12WzFdfWlmKG0pe3ZhciBiO2c9bmV3IExlKGwuYmFzZSxsLnByb3BlcnRpZXMuY29uY2F0KFtuZXcgcih0KHApKV0pKSxmJiYoZz1uZXcgTGUobmV3IHNlKCI/IixnLGYpKSksKGI9aykucHVzaC5hcHBseShiLF90b0NvbnN1bWFibGVBcnJheShoKG0sZykpKX19ZWxzZSBwIGluc3RhbmNlb2YgVGUmJihudWxsIT1UJiZwLmVycm9yKCJtdWx0aXBsZSByZXN0IGVsZW1lbnRzIGFyZSBkaXNhbGxvd2VkIGluIG9iamVjdCBkZXN0cnVjdHVyaW5nIiksVD1kLGsucHVzaCh7bmFtZTpwLm5hbWUudW53cmFwQWxsKCksc291cmNlOmwsZXhjbHVkZVByb3BzOm5ldyBzKGZ1bmN0aW9uKCl7dmFyIGUsdCxuO2ZvcihuPVtdLGU9MCx0PWEubGVuZ3RoO2U8dDtlKyspeT1hW2VdLHkhPT1wJiZuLnB1c2gobyh5KSk7cmV0dXJuIG59KCkpfSkpO3JldHVybiBudWxsIT1UJiZhLnNwbGljZShULDEpLGt9LHk9dGhpcy52YWx1ZS5zaG91bGRDYWNoZSgpP25ldyBSKGUuc2NvcGUuZnJlZVZhcmlhYmxlKCJyZWYiLHtyZXNlcnZlOiExfSkpOnRoaXMudmFsdWUuYmFzZSxwPWgodGhpcy52YXJpYWJsZS5iYXNlLnByb3BlcnRpZXMseSksIShwJiYwPHAubGVuZ3RoKSlyZXR1cm4hMTt2YXIgaz10aGlzLnZhbHVlLmNhY2hlKGUpLFQ9X3NsaWNlZFRvQXJyYXkoaywyKTtmb3IodGhpcy52YWx1ZT1UWzBdLGY9VFsxXSxtPW5ldyBjKFt0aGlzXSksbD0wLGk9cC5sZW5ndGg7bDxpO2wrKylkPXBbbF0sZz1uZXcgdShuZXcgTGUobmV3IEsoc2EoIm9iamVjdFdpdGhvdXRLZXlzIixlKSkpLFtkLnNvdXJjZSxkLmV4Y2x1ZGVQcm9wc10pLG0ucHVzaChuZXcgbihuZXcgTGUoZC5uYW1lKSxnLG51bGwse3BhcmFtOnRoaXMucGFyYW0/ImFsd2F5c0RlY2xhcmUiOm51bGx9KSk7cmV0dXJuIGE9bS5jb21waWxlVG9GcmFnbWVudHMoZSksZS5sZXZlbD09PXomJihhLnNoaWZ0KCksYS5wb3AoKSksYX19LHtrZXk6ImNvbXBpbGVEZXN0cnVjdHVyaW5nIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlRGVzdHJ1Y3R1cmluZyhlKXt2YXIgdD10aGlzLG8sbCxkLGMscCxtLGgsZyxmLGssVCx2LGksYiwkLF8sQyxELEUseCxJLFMsQSxPLEwsRix3LFAsaixNLFUsQixHLEg7aWYoVT1lLmxldmVsPT09eixCPXRoaXMudmFsdWUsST10aGlzLnZhcmlhYmxlLmJhc2Uub2JqZWN0cyxTPUkubGVuZ3RoLDA9PT1TKXJldHVybiBkPUIuY29tcGlsZVRvRnJhZ21lbnRzKGUpLGUubGV2ZWw+PVk/dGhpcy53cmFwSW5QYXJlbnRoZXNlcyhkKTpkO3ZhciBXPUkscT1fc2xpY2VkVG9BcnJheShXLDEpO3JldHVybiBFPXFbMF0sMT09PVMmJkUgaW5zdGFuY2VvZiBOJiZFLmVycm9yKCJEZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQgaGFzIG5vIHRhcmdldCIpLGo9ZnVuY3Rpb24oKXt2YXIgZSxhLHQ7Zm9yKHQ9W10sdj1lPTAsYT1JLmxlbmd0aDtlPGE7dj0rK2UpRT1JW3ZdLEUgaW5zdGFuY2VvZiBUZSYmdC5wdXNoKHYpO3JldHVybiB0fSgpLGc9ZnVuY3Rpb24oKXt2YXIgZSxhLHQ7Zm9yKHQ9W10sdj1lPTAsYT1JLmxlbmd0aDtlPGE7dj0rK2UpRT1JW3ZdLEUgaW5zdGFuY2VvZiBOJiZ0LnB1c2godik7cmV0dXJuIHR9KCksTT1bXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGopLF90b0NvbnN1bWFibGVBcnJheShnKSksMTxNLmxlbmd0aCYmSVtNLnNvcnQoKVsxXV0uZXJyb3IoIm11bHRpcGxlIHNwbGF0cy9leHBhbnNpb25zIGFyZSBkaXNhbGxvd2VkIGluIGFuIGFzc2lnbm1lbnQiKSxfPTA8KG51bGw9PWo/dm9pZCAwOmoubGVuZ3RoKSxiPTA8KG51bGw9PWc/dm9pZCAwOmcubGVuZ3RoKSwkPXRoaXMudmFyaWFibGUuaXNPYmplY3QoKSxpPXRoaXMudmFyaWFibGUuaXNBcnJheSgpLEc9Qi5jb21waWxlVG9GcmFnbWVudHMoZSxYKSxIPVdlKEcpLGw9W10sKCEoQi51bndyYXAoKWluc3RhbmNlb2YgUil8fHRoaXMudmFyaWFibGUuYXNzaWducyhIKSkmJihPPWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJyZWYiKSxsLnB1c2goW3RoaXMubWFrZUNvZGUoTysiID0gIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoRykpKSxHPVt0aGlzLm1ha2VDb2RlKE8pXSxIPU8pLFA9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKHQsbyl7dmFyIG49ISEoMjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pJiZhcmd1bWVudHNbMl0sbCxzO3JldHVybiBsPVtuZXcgUih0KSxuZXcgcmUobyldLG4mJmwucHVzaChuZXcgcmUobikpLHM9bmV3IExlKG5ldyBSKHNhKGEsZSkpLFtuZXcgcihuZXcgcGUoImNhbGwiKSldKSxuZXcgTGUobmV3IHUocyxsKSl9fSxjPVAoInNsaWNlIikscD1QKCJzcGxpY2UiKSxUPWZ1bmN0aW9uKGUpe3ZhciBhLHQsbztmb3Iobz1bXSx2PWE9MCx0PWUubGVuZ3RoO2E8dDt2PSsrYSlFPWVbdl0sRS5iYXNlIGluc3RhbmNlb2YgbGUmJkUuYmFzZS5oYXNTcGxhdCgpJiZvLnB1c2godik7cmV0dXJuIG99LGs9ZnVuY3Rpb24oZSl7dmFyIGEsdCxvO2ZvcihvPVtdLHY9YT0wLHQ9ZS5sZW5ndGg7YTx0O3Y9KythKUU9ZVt2XSxFIGluc3RhbmNlb2YgbiYmIm9iamVjdCI9PT1FLmNvbnRleHQmJm8ucHVzaCh2KTtyZXR1cm4gb30seD1mdW5jdGlvbihlKXt2YXIgYSx0O2ZvcihhPTAsdD1lLmxlbmd0aDthPHQ7YSsrKWlmKEU9ZVthXSwhRS5pc0Fzc2lnbmFibGUoKSlyZXR1cm4hMDtyZXR1cm4hMX0sbT1mdW5jdGlvbihlKXtyZXR1cm4gVChlKS5sZW5ndGh8fGsoZSkubGVuZ3RofHx4KGUpfHwxPT09U30sRD1mdW5jdGlvbihvLHMsaSl7dmFyIGQscCx1LG0saCxnLGYsaztmb3IoZz1UKG8pLGY9W10sdj11PTAsbT1vLmxlbmd0aDt1PG07dj0rK3UpaWYoRT1vW3ZdLCEoRSBpbnN0YW5jZW9mIHkpKXtpZihFIGluc3RhbmNlb2YgbiYmIm9iamVjdCI9PT1FLmNvbnRleHQpe3ZhciBOPUU7aWYocD1OLnZhcmlhYmxlLmJhc2Uscz1OLnZhbHVlLHMgaW5zdGFuY2VvZiBuKXt2YXIgYj1zO3M9Yi52YXJpYWJsZX1wPXMudGhpcz9zLnByb3BlcnRpZXNbMF0ubmFtZTpuZXcgcGUocy51bndyYXAoKS52YWx1ZSksZD1wLnVud3JhcCgpaW5zdGFuY2VvZiBwZSxrPW5ldyBMZShCLFtuZXcoZD9yOlYpKHApXSl9ZWxzZSBzPWZ1bmN0aW9uKCl7c3dpdGNoKCExKXtjYXNlIShFIGluc3RhbmNlb2YgVGUpOnJldHVybiBuZXcgTGUoRS5uYW1lKTtjYXNlIDA+YS5jYWxsKGcsdik6cmV0dXJuIG5ldyBMZShFLmJhc2UpO2RlZmF1bHQ6cmV0dXJuIEV9fSgpLGs9ZnVuY3Rpb24oKXtzd2l0Y2goITEpe2Nhc2UhKEUgaW5zdGFuY2VvZiBUZSk6cmV0dXJuIGMoaSx2KTtkZWZhdWx0OnJldHVybiBuZXcgTGUobmV3IEsoaSksW25ldyBWKG5ldyByZSh2KSldKX19KCk7aD1KZShzLnVud3JhcCgpLnZhbHVlKSxoJiZzLmVycm9yKGgpLGYucHVzaChsLnB1c2gobmV3IG4ocyxrLG51bGwse3BhcmFtOnQucGFyYW0sc3VicGF0dGVybjohMH0pLmNvbXBpbGVUb0ZyYWdtZW50cyhlLFgpKSl9cmV0dXJuIGZ9LG89ZnVuY3Rpb24oYSxvLHIpe3ZhciBpO3JldHVybiBvPW5ldyBMZShuZXcgcyhhLCEwKSksaT1yIGluc3RhbmNlb2YgTGU/cjpuZXcgTGUobmV3IEsocikpLGwucHVzaChuZXcgbihvLGksbnVsbCx7cGFyYW06dC5wYXJhbSxzdWJwYXR0ZXJuOiEwfSkuY29tcGlsZVRvRnJhZ21lbnRzKGUsWCkpfSxBPWZ1bmN0aW9uKGUsYSx0KXtyZXR1cm4gbShlKT9EKGUsYSx0KTpvKGUsYSx0KX0sTS5sZW5ndGg/KGg9TVswXSxDPUkuc2xpY2UoMCxoKyhfPzE6MCkpLHc9SS5zbGljZShoKzEpLDAhPT1DLmxlbmd0aCYmQShDLEcsSCksMCE9PXcubGVuZ3RoJiYoTD1mdW5jdGlvbigpe3N3aXRjaCghMSl7Y2FzZSFfOnJldHVybiBwKElbaF0udW53cmFwQWxsKCkudmFsdWUsLTEqdy5sZW5ndGgpO2Nhc2UhYjpyZXR1cm4gYyhILC0xKncubGVuZ3RoKX19KCksbSh3KSYmKEY9TCxMPWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJyZWYiKSxsLnB1c2goW3RoaXMubWFrZUNvZGUoTCsiID0gIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoRi5jb21waWxlVG9GcmFnbWVudHMoZSxYKSkpKSksQSh3LEcsTCkpKTpBKEksRyxIKSxVfHx0aGlzLnN1YnBhdHRlcm58fGwucHVzaChHKSxmPXRoaXMuam9pbkZyYWdtZW50QXJyYXlzKGwsIiwgIiksZS5sZXZlbDxYP2Y6dGhpcy53cmFwSW5QYXJlbnRoZXNlcyhmKX19LHtrZXk6ImNvbXBpbGVDb25kaXRpb25hbCIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZUNvbmRpdGlvbmFsKGUpe3ZhciB0PXRoaXMudmFyaWFibGUuY2FjaGVSZWZlcmVuY2UoZSksbz1fc2xpY2VkVG9BcnJheSh0LDIpLHIsbCxzO3JldHVybiBsPW9bMF0scz1vWzFdLGwucHJvcGVydGllcy5sZW5ndGh8fCEobC5iYXNlIGluc3RhbmNlb2YgSyl8fGwuYmFzZSBpbnN0YW5jZW9mIEllfHxlLnNjb3BlLmNoZWNrKGwuYmFzZS52YWx1ZSl8fHRoaXMudmFyaWFibGUuZXJyb3IoJ3RoZSB2YXJpYWJsZSAiJytsLmJhc2UudmFsdWUrIlwiIGNhbid0IGJlIGFzc2lnbmVkIHdpdGggIit0aGlzLmNvbnRleHQrIiBiZWNhdXNlIGl0IGhhcyBub3QgYmVlbiBkZWNsYXJlZCBiZWZvcmUiKSwwPD1hLmNhbGwodGhpcy5jb250ZXh0LCI/Iik/KGUuaXNFeGlzdGVudGlhbEVxdWFscz0hMCxuZXcgTyhuZXcgVChsKSxzLHt0eXBlOiJpZiJ9KS5hZGRFbHNlKG5ldyBuKHMsdGhpcy52YWx1ZSwiPSIpKS5jb21waWxlVG9GcmFnbWVudHMoZSkpOihyPW5ldyBzZSh0aGlzLmNvbnRleHQuc2xpY2UoMCwtMSksbCxuZXcgbihzLHRoaXMudmFsdWUsIj0iKSkuY29tcGlsZVRvRnJhZ21lbnRzKGUpLGUubGV2ZWw8PVg/cjp0aGlzLndyYXBJblBhcmVudGhlc2VzKHIpKX19LHtrZXk6ImNvbXBpbGVTcGVjaWFsTWF0aCIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVNwZWNpYWxNYXRoKGUpe3ZhciBhPXRoaXMudmFyaWFibGUuY2FjaGVSZWZlcmVuY2UoZSksdD1fc2xpY2VkVG9BcnJheShhLDIpLG8scjtyZXR1cm4gbz10WzBdLHI9dFsxXSxuZXcgbihvLG5ldyBzZSh0aGlzLmNvbnRleHQuc2xpY2UoMCwtMSkscix0aGlzLnZhbHVlKSkuY29tcGlsZVRvRnJhZ21lbnRzKGUpfX0se2tleToiY29tcGlsZVNwbGljZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVNwbGljZShlKXt2YXIgYT10aGlzLnZhcmlhYmxlLnByb3BlcnRpZXMucG9wKCksdD1hLnJhbmdlLG8sbixyLGwscyxpLGQsYyxwLHU7aWYocj10LmZyb20sZD10LnRvLG49dC5leGNsdXNpdmUsYz10aGlzLnZhcmlhYmxlLnVud3JhcEFsbCgpLGMuY29tbWVudHMmJihRZShjLHRoaXMpLGRlbGV0ZSB0aGlzLnZhcmlhYmxlLmNvbW1lbnRzKSxpPXRoaXMudmFyaWFibGUuY29tcGlsZShlKSxyKXt2YXIgbT10aGlzLmNhY2hlVG9Db2RlRnJhZ21lbnRzKHIuY2FjaGUoZSxZKSksaD1fc2xpY2VkVG9BcnJheShtLDIpO2w9aFswXSxzPWhbMV19ZWxzZSBsPXM9IjAiO2Q/KG51bGw9PXI/dm9pZCAwOnIuaXNOdW1iZXIoKSkmJmQuaXNOdW1iZXIoKT8oZD1kLmNvbXBpbGUoZSktcywhbiYmKGQrPTEpKTooZD1kLmNvbXBpbGUoZSxIKSsiIC0gIitzLCFuJiYoZCs9IiArIDEiKSk6ZD0iOWU5Ijt2YXIgZz10aGlzLnZhbHVlLmNhY2hlKGUsWCksZj1fc2xpY2VkVG9BcnJheShnLDIpO3JldHVybiBwPWZbMF0sdT1mWzFdLG89W10uY29uY2F0KHRoaXMubWFrZUNvZGUoc2EoInNwbGljZSIsZSkrIi5hcHBseSgiK2krIiwgWyIrbCsiLCAiK2QrIl0uY29uY2F0KCIpLHAsdGhpcy5tYWtlQ29kZSgiKSksICIpLHUpLGUubGV2ZWw+ej90aGlzLndyYXBJblBhcmVudGhlc2VzKG8pOm99fSx7a2V5OiJlYWNoTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZWFjaE5hbWUoZSl7cmV0dXJuIHRoaXMudmFyaWFibGUudW53cmFwQWxsKCkuZWFjaE5hbWUoZSl9fV0pLG59KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bInZhcmlhYmxlIiwidmFsdWUiXSxlLnByb3RvdHlwZS5pc0Fzc2lnbmFibGU9d2UsZX0uY2FsbCh0aGlzKSxlLkZ1bmNHbHlwaD1JPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHQ9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQuZ2x5cGg9ZSx0fXJldHVybiBfaW5oZXJpdHMoYSxlKSxhfShsKSxlLkNvZGU9aD1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxhLG4scil7X2NsYXNzQ2FsbENoZWNrKHRoaXMsdCk7dmFyIGw9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywodC5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KSkuY2FsbCh0aGlzKSkscztyZXR1cm4gbC5mdW5jR2x5cGg9bixsLnBhcmFtU3RhcnQ9cixsLnBhcmFtcz1lfHxbXSxsLmJvZHk9YXx8bmV3IGMsbC5ib3VuZD0iPT4iPT09KG51bGw9PShzPWwuZnVuY0dseXBoKT92b2lkIDA6cy5nbHlwaCksbC5pc0dlbmVyYXRvcj0hMSxsLmlzQXN5bmM9ITEsbC5pc01ldGhvZD0hMSxsLmJvZHkudHJhdmVyc2VDaGlsZHJlbighMSxmdW5jdGlvbihlKXtpZigoZSBpbnN0YW5jZW9mIHNlJiZlLmlzWWllbGQoKXx8ZSBpbnN0YW5jZW9mIFBlKSYmKGwuaXNHZW5lcmF0b3I9ITApLChlIGluc3RhbmNlb2Ygc2UmJmUuaXNBd2FpdCgpfHxlIGluc3RhbmNlb2YgbykmJihsLmlzQXN5bmM9ITApLGwuaXNHZW5lcmF0b3ImJmwuaXNBc3luYylyZXR1cm4gZS5lcnJvcigiZnVuY3Rpb24gY2FuJ3QgY29udGFpbiBib3RoIHlpZWxkIGFuZCBhd2FpdCIpfSksbH1yZXR1cm4gX2luaGVyaXRzKHQsZSksX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImlzU3RhdGVtZW50Iix2YWx1ZTpmdW5jdGlvbiBpc1N0YXRlbWVudCgpe3JldHVybiB0aGlzLmlzTWV0aG9kfX0se2tleToibWFrZVNjb3BlIix2YWx1ZTpmdW5jdGlvbiBtYWtlU2NvcGUoZSl7cmV0dXJuIG5ldyB5ZShlLHRoaXMuYm9keSx0aGlzKX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgdCxvLG4scixjLHAsaCxnLGYseSxULHYsaSxiLCQsayxsLF8sQyxELG0sRSx4LEksUyxBLEwsRix3LFAsaixNLFUsVixCLFcsWCxZLHEseixKLFosUTtmb3IodGhpcy5jdG9yJiYodGhpcy5pc0FzeW5jJiZ0aGlzLm5hbWUuZXJyb3IoIkNsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYXN5bmMiKSx0aGlzLmlzR2VuZXJhdG9yJiZ0aGlzLm5hbWUuZXJyb3IoIkNsYXNzIGNvbnN0cnVjdG9yIG1heSBub3QgYmUgYSBnZW5lcmF0b3IiKSksdGhpcy5ib3VuZCYmKChudWxsPT0oUD1lLnNjb3BlLm1ldGhvZCk/dm9pZCAwOlAuYm91bmQpJiYodGhpcy5jb250ZXh0PWUuc2NvcGUubWV0aG9kLmNvbnRleHQpLCF0aGlzLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9InRoaXMiKSksZS5zY29wZT1WZShlLCJjbGFzc1Njb3BlIil8fHRoaXMubWFrZVNjb3BlKGUuc2NvcGUpLGUuc2NvcGUuc2hhcmVkPVZlKGUsInNoYXJlZFNjb3BlIiksZS5pbmRlbnQrPURlLGRlbGV0ZSBlLmJhcmUsZGVsZXRlIGUuaXNFeGlzdGVudGlhbEVxdWFscyxMPVtdLGc9W10sSj1udWxsPT0oaj1udWxsPT0oTT10aGlzLnRoaXNBc3NpZ25tZW50cyk/dm9pZCAwOk0uc2xpY2UoKSk/W106aixGPVtdLFQ9ITEseT0hMSxTPVtdLHRoaXMuZWFjaFBhcmFtTmFtZShmdW5jdGlvbih0LG8sbixyKXt2YXIgbCxzO2lmKDA8PWEuY2FsbChTLHQpJiZvLmVycm9yKCJtdWx0aXBsZSBwYXJhbWV0ZXJzIG5hbWVkICciK3QrIiciKSxTLnB1c2godCksby50aGlzKXJldHVybiB0PW8ucHJvcGVydGllc1swXS5uYW1lLnZhbHVlLDA8PWEuY2FsbChHLHQpJiYodD0iXyIrdCkscz1uZXcgUihlLnNjb3BlLmZyZWVWYXJpYWJsZSh0LHtyZXNlcnZlOiExfSkpLGw9bi5uYW1lIGluc3RhbmNlb2YgbGUmJnIgaW5zdGFuY2VvZiBkJiYiPSI9PT1yLm9wZXJhdG9yVG9rZW4udmFsdWU/bmV3IGQobmV3IFIodCkscywib2JqZWN0Iik6cyxuLnJlbmFtZVBhcmFtKG8sbCksSi5wdXNoKG5ldyBkKG8scykpfSksVT10aGlzLnBhcmFtcyx2PWI9MCxsPVUubGVuZ3RoO2I8bDt2PSsrYilJPVVbdl0sSS5zcGxhdHx8SSBpbnN0YW5jZW9mIE4/KFQ/SS5lcnJvcigib25seSBvbmUgc3BsYXQgb3IgZXhwYW5zaW9uIHBhcmFtZXRlciBpcyBhbGxvd2VkIHBlciBmdW5jdGlvbiBkZWZpbml0aW9uIik6SSBpbnN0YW5jZW9mIE4mJjE9PT10aGlzLnBhcmFtcy5sZW5ndGgmJkkuZXJyb3IoImFuIGV4cGFuc2lvbiBwYXJhbWV0ZXIgY2Fubm90IGJlIHRoZSBvbmx5IHBhcmFtZXRlciBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24iKSxUPSEwLEkuc3BsYXQ/KEkubmFtZSBpbnN0YW5jZW9mIHM/KHo9ZS5zY29wZS5mcmVlVmFyaWFibGUoImFyZyIpLEwucHVzaCh3PW5ldyBMZShuZXcgUih6KSkpLGcucHVzaChuZXcgZChuZXcgTGUoSS5uYW1lKSx3KSkpOihMLnB1c2godz1JLmFzUmVmZXJlbmNlKGUpKSx6PVdlKHcuY29tcGlsZU5vZGVXaXRob3V0Q29tbWVudHMoZSkpKSxJLnNob3VsZENhY2hlKCkmJmcucHVzaChuZXcgZChuZXcgTGUoSS5uYW1lKSx3KSkpOih6PWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJhcmdzIiksTC5wdXNoKG5ldyBMZShuZXcgUih6KSkpKSxlLnNjb3BlLnBhcmFtZXRlcih6KSk6KChJLnNob3VsZENhY2hlKCl8fHkpJiYoSS5hc3NpZ25lZEluQm9keT0hMCx5PSEwLG51bGw9PUkudmFsdWU/Zy5wdXNoKG5ldyBkKG5ldyBMZShJLm5hbWUpLEkuYXNSZWZlcmVuY2UoZSksbnVsbCx7cGFyYW06ImFsd2F5c0RlY2xhcmUifSkpOihoPW5ldyBzZSgiPT09IixJLG5ldyBPZSksaT1uZXcgZChuZXcgTGUoSS5uYW1lKSxJLnZhbHVlKSxnLnB1c2gobmV3IE8oaCxpKSkpKSxUPyhGLnB1c2goSSksbnVsbCE9SS52YWx1ZSYmIUkuc2hvdWxkQ2FjaGUoKSYmKGg9bmV3IHNlKCI9PT0iLEksbmV3IE9lKSxpPW5ldyBkKG5ldyBMZShJLm5hbWUpLEkudmFsdWUpLGcucHVzaChuZXcgTyhoLGkpKSksbnVsbCE9KG51bGw9PShWPUkubmFtZSk/dm9pZCAwOlYudmFsdWUpJiZlLnNjb3BlLmFkZChJLm5hbWUudmFsdWUsInZhciIsITApKToodz1JLnNob3VsZENhY2hlKCk/SS5hc1JlZmVyZW5jZShlKTpudWxsPT1JLnZhbHVlfHxJLmFzc2lnbmVkSW5Cb2R5P0k6bmV3IGQobmV3IExlKEkubmFtZSksSS52YWx1ZSxudWxsLHtwYXJhbTohMH0pLEkubmFtZSBpbnN0YW5jZW9mIHN8fEkubmFtZSBpbnN0YW5jZW9mIGxlPyhJLm5hbWUubGhzPSEwLEkubmFtZSBpbnN0YW5jZW9mIGxlJiZJLm5hbWUuaGFzU3BsYXQoKT8oej1lLnNjb3BlLmZyZWVWYXJpYWJsZSgiYXJnIiksZS5zY29wZS5wYXJhbWV0ZXIoeiksdz1uZXcgTGUobmV3IFIoeikpLGcucHVzaChuZXcgZChuZXcgTGUoSS5uYW1lKSx3LG51bGwse3BhcmFtOiJhbHdheXNEZWNsYXJlIn0pKSxudWxsIT1JLnZhbHVlJiYhSS5hc3NpZ25lZEluQm9keSYmKHc9bmV3IGQodyxJLnZhbHVlLG51bGwse3BhcmFtOiEwfSkpKTohSS5zaG91bGRDYWNoZSgpJiZJLm5hbWUuZWFjaE5hbWUoZnVuY3Rpb24oYSl7cmV0dXJuIGUuc2NvcGUucGFyYW1ldGVyKGEudmFsdWUpfSkpOihBPW51bGw9PUkudmFsdWU/dzpJLGUuc2NvcGUucGFyYW1ldGVyKFdlKEEuY29tcGlsZVRvRnJhZ21lbnRzV2l0aG91dENvbW1lbnRzKGUpKSkpLEwucHVzaCh3KSkpO2lmKDAhPT1GLmxlbmd0aCYmZy51bnNoaWZ0KG5ldyBkKG5ldyBMZShuZXcgcyhbbmV3IFRlKG5ldyBSKHopKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShmdW5jdGlvbigpe3ZhciBhLHQsbztmb3Iobz1bXSxhPTAsdD1GLmxlbmd0aDthPHQ7YSsrKUk9RlthXSxvLnB1c2goSS5hc1JlZmVyZW5jZShlKSk7cmV0dXJuIG99KCkpKSkpLG5ldyBMZShuZXcgUih6KSkpKSxaPXRoaXMuYm9keS5pc0VtcHR5KCksIXRoaXMuZXhwYW5kQ3RvclN1cGVyKEopKXt2YXIgZWU7KGVlPXRoaXMuYm9keS5leHByZXNzaW9ucykudW5zaGlmdC5hcHBseShlZSxfdG9Db25zdW1hYmxlQXJyYXkoSikpfWZvcigodD10aGlzLmJvZHkuZXhwcmVzc2lvbnMpLnVuc2hpZnQuYXBwbHkodCxfdG9Db25zdW1hYmxlQXJyYXkoZykpLHRoaXMuaXNNZXRob2QmJnRoaXMuYm91bmQmJiF0aGlzLmlzU3RhdGljJiZ0aGlzLmNsYXNzVmFyaWFibGUmJihjPW5ldyBMZShuZXcgSyhzYSgiYm91bmRNZXRob2RDaGVjayIsZSkpKSx0aGlzLmJvZHkuZXhwcmVzc2lvbnMudW5zaGlmdChuZXcgdShjLFtuZXcgTGUobmV3IEllKSx0aGlzLmNsYXNzVmFyaWFibGVdKSkpLFp8fHRoaXMubm9SZXR1cm58fHRoaXMuYm9keS5tYWtlUmV0dXJuKCksdGhpcy5ib3VuZCYmdGhpcy5pc0dlbmVyYXRvciYmKFE9dGhpcy5ib2R5LmNvbnRhaW5zKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2Ygc2UmJiJ5aWVsZCI9PT1lLm9wZXJhdG9yfSksKFF8fHRoaXMpLmVycm9yKCJ5aWVsZCBjYW5ub3Qgb2NjdXIgaW5zaWRlIGJvdW5kIChmYXQgYXJyb3cpIGZ1bmN0aW9ucyIpKSxFPVtdLHRoaXMuaXNNZXRob2QmJnRoaXMuaXNTdGF0aWMmJkUucHVzaCgic3RhdGljIiksdGhpcy5pc0FzeW5jJiZFLnB1c2goImFzeW5jIiksdGhpcy5pc01ldGhvZHx8dGhpcy5ib3VuZD90aGlzLmlzR2VuZXJhdG9yJiZFLnB1c2goIioiKTpFLnB1c2goImZ1bmN0aW9uIisodGhpcy5pc0dlbmVyYXRvcj8iKiI6IiIpKSxxPVt0aGlzLm1ha2VDb2RlKCIoIildLG51bGwhPShudWxsPT0oQj10aGlzLnBhcmFtU3RhcnQpP3ZvaWQgMDpCLmNvbW1lbnRzKSYmdGhpcy5jb21waWxlQ29tbWVudEZyYWdtZW50cyhlLHRoaXMucGFyYW1TdGFydCxxKSx2PSQ9MCxfPUwubGVuZ3RoOyQ8Xzt2PSsrJCl7dmFyIGFlO2lmKEk9TFt2XSwwIT09diYmcS5wdXNoKHRoaXMubWFrZUNvZGUoIiwgIikpLFQmJnY9PT1MLmxlbmd0aC0xJiZxLnB1c2godGhpcy5tYWtlQ29kZSgiLi4uIikpLFk9ZS5zY29wZS52YXJpYWJsZXMubGVuZ3RoLChhZT1xKS5wdXNoLmFwcGx5KGFlLF90b0NvbnN1bWFibGVBcnJheShJLmNvbXBpbGVUb0ZyYWdtZW50cyhlKSkpLFkhPT1lLnNjb3BlLnZhcmlhYmxlcy5sZW5ndGgpe3ZhciB0ZTtmPWUuc2NvcGUudmFyaWFibGVzLnNwbGljZShZKSwodGU9ZS5zY29wZS5wYXJlbnQudmFyaWFibGVzKS5wdXNoLmFwcGx5KHRlLF90b0NvbnN1bWFibGVBcnJheShmKSl9fWlmKHEucHVzaCh0aGlzLm1ha2VDb2RlKCIpIikpLG51bGwhPShudWxsPT0oVz10aGlzLmZ1bmNHbHlwaCk/dm9pZCAwOlcuY29tbWVudHMpKXtmb3IoWD10aGlzLmZ1bmNHbHlwaC5jb21tZW50cyxrPTAsQz1YLmxlbmd0aDtrPEM7aysrKXA9WFtrXSxwLnVuc2hpZnQ9ITE7dGhpcy5jb21waWxlQ29tbWVudEZyYWdtZW50cyhlLHRoaXMuZnVuY0dseXBoLHEpfWlmKHRoaXMuYm9keS5pc0VtcHR5KCl8fChyPXRoaXMuYm9keS5jb21waWxlV2l0aERlY2xhcmF0aW9ucyhlKSksdGhpcy5pc01ldGhvZCl7dmFyIG9lPVtlLnNjb3BlLGUuc2NvcGUucGFyZW50XTttPW9lWzBdLGUuc2NvcGU9b2VbMV0seD10aGlzLm5hbWUuY29tcGlsZVRvRnJhZ21lbnRzKGUpLCIuIj09PXhbMF0uY29kZSYmeC5zaGlmdCgpLGUuc2NvcGU9bX1pZihuPXRoaXMuam9pbkZyYWdtZW50QXJyYXlzKGZ1bmN0aW9uKCl7dmFyIGUsYSx0O2Zvcih0PVtdLGE9MCxlPUUubGVuZ3RoO2E8ZTthKyspRD1FW2FdLHQucHVzaCh0aGlzLm1ha2VDb2RlKEQpKTtyZXR1cm4gdH0uY2FsbCh0aGlzKSwiICIpLEUubGVuZ3RoJiZ4JiZuLnB1c2godGhpcy5tYWtlQ29kZSgiICIpKSx4KXt2YXIgbmU7KG5lPW4pLnB1c2guYXBwbHkobmUsX3RvQ29uc3VtYWJsZUFycmF5KHgpKX1pZigobz1uKS5wdXNoLmFwcGx5KG8sX3RvQ29uc3VtYWJsZUFycmF5KHEpKSx0aGlzLmJvdW5kJiYhdGhpcy5pc01ldGhvZCYmbi5wdXNoKHRoaXMubWFrZUNvZGUoIiA9PiIpKSxuLnB1c2godGhpcy5tYWtlQ29kZSgiIHsiKSksbnVsbD09cj92b2lkIDA6ci5sZW5ndGgpe3ZhciByZTsocmU9bikucHVzaC5hcHBseShyZSxbdGhpcy5tYWtlQ29kZSgiXG4iKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShyKSxbdGhpcy5tYWtlQ29kZSgiXG4iK3RoaXMudGFiKV0pKX1yZXR1cm4gbi5wdXNoKHRoaXMubWFrZUNvZGUoIn0iKSksdGhpcy5pc01ldGhvZD9ZZShuLHRoaXMpOnRoaXMuZnJvbnR8fGUubGV2ZWw+PUg/dGhpcy53cmFwSW5QYXJlbnRoZXNlcyhuKTpufX0se2tleToiZWFjaFBhcmFtTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZWFjaFBhcmFtTmFtZShlKXt2YXIgYSx0LG8sbixyO2ZvcihuPXRoaXMucGFyYW1zLHI9W10sYT0wLHQ9bi5sZW5ndGg7YTx0O2ErKylvPW5bYV0sci5wdXNoKG8uZWFjaE5hbWUoZSkpO3JldHVybiByfX0se2tleToidHJhdmVyc2VDaGlsZHJlbiIsdmFsdWU6ZnVuY3Rpb24gdHJhdmVyc2VDaGlsZHJlbihlLGEpe2lmKGUpcmV0dXJuIF9nZXQodC5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLCJ0cmF2ZXJzZUNoaWxkcmVuIix0aGlzKS5jYWxsKHRoaXMsZSxhKX19LHtrZXk6InJlcGxhY2VJbkNvbnRleHQiLHZhbHVlOmZ1bmN0aW9uIHJlcGxhY2VJbkNvbnRleHQoZSxhKXtyZXR1cm4hIXRoaXMuYm91bmQmJl9nZXQodC5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodC5wcm90b3R5cGUpLCJyZXBsYWNlSW5Db250ZXh0Iix0aGlzKS5jYWxsKHRoaXMsZSxhKX19LHtrZXk6ImV4cGFuZEN0b3JTdXBlciIsdmFsdWU6ZnVuY3Rpb24gZXhwYW5kQ3RvclN1cGVyKGUpe3ZhciBhPXRoaXMsdCxvLG4scjtyZXR1cm4hIXRoaXMuY3RvciYmKHRoaXMuZWFjaFN1cGVyQ2FsbChjLndyYXAodGhpcy5wYXJhbXMpLGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKCInc3VwZXInIGlzIG5vdCBhbGxvd2VkIGluIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBkZWZhdWx0cyIpfSkscj10aGlzLmVhY2hTdXBlckNhbGwodGhpcy5ib2R5LGZ1bmN0aW9uKHQpe3JldHVybiJiYXNlIj09PWEuY3RvciYmdC5lcnJvcigiJ3N1cGVyJyBpcyBvbmx5IGFsbG93ZWQgaW4gZGVyaXZlZCBjbGFzcyBjb25zdHJ1Y3RvcnMiKSx0LmV4cHJlc3Npb25zPWV9KSx0PWUubGVuZ3RoJiZlLmxlbmd0aCE9PShudWxsPT0obj10aGlzLnRoaXNBc3NpZ25tZW50cyk/dm9pZCAwOm4ubGVuZ3RoKSwiZGVyaXZlZCI9PT10aGlzLmN0b3ImJiFyJiZ0JiYobz1lWzBdLnZhcmlhYmxlLG8uZXJyb3IoIkNhbid0IHVzZSBAcGFyYW1zIGluIGRlcml2ZWQgY2xhc3MgY29uc3RydWN0b3JzIHdpdGhvdXQgY2FsbGluZyBzdXBlciIpKSxyKX19LHtrZXk6ImVhY2hTdXBlckNhbGwiLHZhbHVlOmZ1bmN0aW9uIGVhY2hTdXBlckNhbGwoZSxhKXt2YXIgbz10aGlzLG47cmV0dXJuIG49ITEsZS50cmF2ZXJzZUNoaWxkcmVuKCEwLGZ1bmN0aW9uKGUpe3ZhciByO3JldHVybiBlIGluc3RhbmNlb2YgX2U/KCFlLnZhcmlhYmxlLmFjY2Vzc29yJiYocj1lLmFyZ3MuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiEoZSBpbnN0YW5jZW9mIG0pJiYoIShlIGluc3RhbmNlb2YgdCl8fGUuYm91bmQpfSksYy53cmFwKHIpLnRyYXZlcnNlQ2hpbGRyZW4oITAsZnVuY3Rpb24oZSl7aWYoZS50aGlzKXJldHVybiBlLmVycm9yKCJDYW4ndCBjYWxsIHN1cGVyIHdpdGggQHBhcmFtcyBpbiBkZXJpdmVkIGNsYXNzIGNvbnN0cnVjdG9ycyIpfSkpLG49ITAsYShlKSk6ZSBpbnN0YW5jZW9mIEllJiYiZGVyaXZlZCI9PT1vLmN0b3ImJiFuJiZlLmVycm9yKCJDYW4ndCByZWZlcmVuY2UgJ3RoaXMnIGJlZm9yZSBjYWxsaW5nIHN1cGVyIGluIGRlcml2ZWQgY2xhc3MgY29uc3RydWN0b3JzIiksIShlIGluc3RhbmNlb2YgX2UpJiYoIShlIGluc3RhbmNlb2YgdCl8fGUuYm91bmQpfSksbn19XSksdH0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsicGFyYW1zIiwiYm9keSJdLGUucHJvdG90eXBlLmp1bXBzPXRlLGV9LmNhbGwodGhpcyksZS5QYXJhbT1pZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxhLG8pe19jbGFzc0NhbGxDaGVjayh0aGlzLHQpO3ZhciBuPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcykpLHIsbDtyZXR1cm4gbi5uYW1lPWUsbi52YWx1ZT1hLG4uc3BsYXQ9byxyPUplKG4ubmFtZS51bndyYXBBbGwoKS52YWx1ZSksciYmbi5uYW1lLmVycm9yKHIpLG4ubmFtZSBpbnN0YW5jZW9mIGxlJiZuLm5hbWUuZ2VuZXJhdGVkJiYobD1uLm5hbWUub2JqZWN0c1swXS5vcGVyYXRvclRva2VuLGwuZXJyb3IoInVuZXhwZWN0ZWQgIitsLnZhbHVlKSksbn1yZXR1cm4gX2luaGVyaXRzKHQsZSksX2NyZWF0ZUNsYXNzKHQsW3trZXk6ImNvbXBpbGVUb0ZyYWdtZW50cyIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVRvRnJhZ21lbnRzKGUpe3JldHVybiB0aGlzLm5hbWUuY29tcGlsZVRvRnJhZ21lbnRzKGUsWCl9fSx7a2V5OiJjb21waWxlVG9GcmFnbWVudHNXaXRob3V0Q29tbWVudHMiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVUb0ZyYWdtZW50c1dpdGhvdXRDb21tZW50cyhlKXtyZXR1cm4gdGhpcy5uYW1lLmNvbXBpbGVUb0ZyYWdtZW50c1dpdGhvdXRDb21tZW50cyhlLFgpfX0se2tleToiYXNSZWZlcmVuY2UiLHZhbHVlOmZ1bmN0aW9uIGFzUmVmZXJlbmNlKGUpe3ZhciB0LG87cmV0dXJuIHRoaXMucmVmZXJlbmNlP3RoaXMucmVmZXJlbmNlOihvPXRoaXMubmFtZSxvLnRoaXM/KHQ9by5wcm9wZXJ0aWVzWzBdLm5hbWUudmFsdWUsMDw9YS5jYWxsKEcsdCkmJih0PSJfIit0KSxvPW5ldyBSKGUuc2NvcGUuZnJlZVZhcmlhYmxlKHQpKSk6by5zaG91bGRDYWNoZSgpJiYobz1uZXcgUihlLnNjb3BlLmZyZWVWYXJpYWJsZSgiYXJnIikpKSxvPW5ldyBMZShvKSxvLnVwZGF0ZUxvY2F0aW9uRGF0YUlmTWlzc2luZyh0aGlzLmxvY2F0aW9uRGF0YSksdGhpcy5yZWZlcmVuY2U9byl9fSx7a2V5OiJzaG91bGRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24gc2hvdWxkQ2FjaGUoKXtyZXR1cm4gdGhpcy5uYW1lLnNob3VsZENhY2hlKCl9fSx7a2V5OiJlYWNoTmFtZSIsdmFsdWU6ZnVuY3Rpb24gZWFjaE5hbWUoZSl7dmFyIGE9dGhpcyx0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLm5hbWUsbyxuLHIsbCxzLGksYyxwO2lmKG89ZnVuY3Rpb24odCl7dmFyIG89MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7cmV0dXJuIGUoIkAiK3QucHJvcGVydGllc1swXS5uYW1lLnZhbHVlLHQsYSxvKX0sdCBpbnN0YW5jZW9mIEspcmV0dXJuIGUodC52YWx1ZSx0LHRoaXMpO2lmKHQgaW5zdGFuY2VvZiBMZSlyZXR1cm4gbyh0KTtmb3IocD1udWxsPT0oYz10Lm9iamVjdHMpP1tdOmMsbj0wLHI9cC5sZW5ndGg7bjxyO24rKylpPXBbbl0sbD1pLGkgaW5zdGFuY2VvZiBkJiZudWxsPT1pLmNvbnRleHQmJihpPWkudmFyaWFibGUpLGkgaW5zdGFuY2VvZiBkPyhpPWkudmFsdWUgaW5zdGFuY2VvZiBkP2kudmFsdWUudmFyaWFibGU6aS52YWx1ZSx0aGlzLmVhY2hOYW1lKGUsaS51bndyYXAoKSkpOmkgaW5zdGFuY2VvZiBUZT8ocz1pLm5hbWUudW53cmFwKCksZShzLnZhbHVlLHMsdGhpcykpOmkgaW5zdGFuY2VvZiBMZT9pLmlzQXJyYXkoKXx8aS5pc09iamVjdCgpP3RoaXMuZWFjaE5hbWUoZSxpLmJhc2UpOmkudGhpcz9vKGksbCk6ZShpLmJhc2UudmFsdWUsaS5iYXNlLHRoaXMpOmkgaW5zdGFuY2VvZiB5P2k6IShpIGluc3RhbmNlb2YgTikmJmkuZXJyb3IoImlsbGVnYWwgcGFyYW1ldGVyICIraS5jb21waWxlKCkpfX0se2tleToicmVuYW1lUGFyYW0iLHZhbHVlOmZ1bmN0aW9uIHJlbmFtZVBhcmFtKGUsYSl7dmFyIHQsbztyZXR1cm4gdD1mdW5jdGlvbihhKXtyZXR1cm4gYT09PWV9LG89ZnVuY3Rpb24oZSx0KXt2YXIgbztyZXR1cm4gdCBpbnN0YW5jZW9mIGxlPyhvPWUsZS50aGlzJiYobz1lLnByb3BlcnRpZXNbMF0ubmFtZSksZS50aGlzJiZvLnZhbHVlPT09YS52YWx1ZT9uZXcgTGUoYSk6bmV3IGQobmV3IExlKG8pLGEsIm9iamVjdCIpKTphfSx0aGlzLnJlcGxhY2VJbkNvbnRleHQodCxvKX19XSksdH0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsibmFtZSIsInZhbHVlIl0sZX0uY2FsbCh0aGlzKSxlLlNwbGF0PVRlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgdD1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5uYW1lPWUuY29tcGlsZT9lOm5ldyBLKGUpLHR9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJpc0Fzc2lnbmFibGUiLHZhbHVlOmZ1bmN0aW9uIGlzQXNzaWduYWJsZSgpe3JldHVybiB0aGlzLm5hbWUuaXNBc3NpZ25hYmxlKCkmJighdGhpcy5uYW1lLmlzQXRvbWljfHx0aGlzLm5hbWUuaXNBdG9taWMoKSl9fSx7a2V5OiJhc3NpZ25zIix2YWx1ZTpmdW5jdGlvbiBhc3NpZ25zKGUpe3JldHVybiB0aGlzLm5hbWUuYXNzaWducyhlKX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXtyZXR1cm5bdGhpcy5tYWtlQ29kZSgiLi4uIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5uYW1lLmNvbXBpbGVUb0ZyYWdtZW50cyhlLFkpKSl9fSx7a2V5OiJ1bndyYXAiLHZhbHVlOmZ1bmN0aW9uIHVud3JhcCgpe3JldHVybiB0aGlzLm5hbWV9fV0pLGF9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bIm5hbWUiXSxlfS5jYWxsKHRoaXMpLGUuRXhwYW5zaW9uPU49ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBhKCl7cmV0dXJuIF9jbGFzc0NhbGxDaGVjayh0aGlzLGEpLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoKXtyZXR1cm4gdGhpcy5lcnJvcigiRXhwYW5zaW9uIG11c3QgYmUgdXNlZCBpbnNpZGUgYSBkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQgb3IgcGFyYW1ldGVyIGxpc3QiKX19LHtrZXk6ImFzUmVmZXJlbmNlIix2YWx1ZTpmdW5jdGlvbiBhc1JlZmVyZW5jZSgpe3JldHVybiB0aGlzfX0se2tleToiZWFjaE5hbWUiLHZhbHVlOmZ1bmN0aW9uIGVhY2hOYW1lKCl7fX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuc2hvdWxkQ2FjaGU9dGUsZX0uY2FsbCh0aGlzKSxlLkVsaXNpb249eT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gX2NsYXNzQ2FsbENoZWNrKHRoaXMsYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVUb0ZyYWdtZW50cyIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVRvRnJhZ21lbnRzKGUsdCl7dmFyIG87cmV0dXJuIG89X2dldChhLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhLnByb3RvdHlwZSksImNvbXBpbGVUb0ZyYWdtZW50cyIsdGhpcykuY2FsbCh0aGlzLGUsdCksby5pc0VsaXNpb249ITAsb319LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZSgpe3JldHVyblt0aGlzLm1ha2VDb2RlKCIsICIpXX19LHtrZXk6ImFzUmVmZXJlbmNlIix2YWx1ZTpmdW5jdGlvbiBhc1JlZmVyZW5jZSgpe3JldHVybiB0aGlzfX0se2tleToiZWFjaE5hbWUiLHZhbHVlOmZ1bmN0aW9uIGVhY2hOYW1lKCl7fX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuaXNBc3NpZ25hYmxlPXdlLGUucHJvdG90eXBlLnNob3VsZENhY2hlPXRlLGV9LmNhbGwodGhpcyksZS5XaGlsZT1GZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0KXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgbz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gby5jb25kaXRpb249KG51bGw9PXQ/dm9pZCAwOnQuaW52ZXJ0KT9lLmludmVydCgpOmUsby5ndWFyZD1udWxsPT10P3ZvaWQgMDp0Lmd1YXJkLG99cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJtYWtlUmV0dXJuIix2YWx1ZTpmdW5jdGlvbiBtYWtlUmV0dXJuKGUpe3JldHVybiBlP19nZXQoYS5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYS5wcm90b3R5cGUpLCJtYWtlUmV0dXJuIix0aGlzKS5jYWxsKHRoaXMsZSk6KHRoaXMucmV0dXJucz0hdGhpcy5qdW1wcygpLHRoaXMpfX0se2tleToiYWRkQm9keSIsdmFsdWU6ZnVuY3Rpb24gYWRkQm9keShlKXtyZXR1cm4gdGhpcy5ib2R5PWUsdGhpc319LHtrZXk6Imp1bXBzIix2YWx1ZTpmdW5jdGlvbiBqdW1wcygpe3ZhciBlLGEsdCxvLG47aWYoZT10aGlzLmJvZHkuZXhwcmVzc2lvbnMsIWUubGVuZ3RoKXJldHVybiExO2ZvcihhPTAsbz1lLmxlbmd0aDthPG87YSsrKWlmKG49ZVthXSx0PW4uanVtcHMoe2xvb3A6ITB9KSlyZXR1cm4gdDtyZXR1cm4hMX19LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbjtyZXR1cm4gZS5pbmRlbnQrPURlLG49IiIsdD10aGlzLmJvZHksdC5pc0VtcHR5KCk/dD10aGlzLm1ha2VDb2RlKCIiKToodGhpcy5yZXR1cm5zJiYodC5tYWtlUmV0dXJuKG89ZS5zY29wZS5mcmVlVmFyaWFibGUoInJlc3VsdHMiKSksbj0iIit0aGlzLnRhYitvKyIgPSBbXTtcbiIpLHRoaXMuZ3VhcmQmJigxPHQuZXhwcmVzc2lvbnMubGVuZ3RoP3QuZXhwcmVzc2lvbnMudW5zaGlmdChuZXcgTyhuZXcgZGUodGhpcy5ndWFyZCkuaW52ZXJ0KCksbmV3IE5lKCJjb250aW51ZSIpKSk6dGhpcy5ndWFyZCYmKHQ9Yy53cmFwKFtuZXcgTyh0aGlzLmd1YXJkLHQpXSkpKSx0PVtdLmNvbmNhdCh0aGlzLm1ha2VDb2RlKCJcbiIpLHQuY29tcGlsZVRvRnJhZ21lbnRzKGUseiksdGhpcy5tYWtlQ29kZSgiXG4iK3RoaXMudGFiKSkpLGE9W10uY29uY2F0KHRoaXMubWFrZUNvZGUobit0aGlzLnRhYisid2hpbGUgKCIpLHRoaXMuY29uZGl0aW9uLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHEpLHRoaXMubWFrZUNvZGUoIikgeyIpLHQsdGhpcy5tYWtlQ29kZSgifSIpKSx0aGlzLnJldHVybnMmJmEucHVzaCh0aGlzLm1ha2VDb2RlKCJcbiIrdGhpcy50YWIrInJldHVybiAiK28rIjsiKSksYX19XSksYX0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsiY29uZGl0aW9uIiwiZ3VhcmQiLCJib2R5Il0sZS5wcm90b3R5cGUuaXNTdGF0ZW1lbnQ9d2UsZX0uY2FsbCh0aGlzKSxlLk9wPXNlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihlLGEsbyxyKXt2YXIgbDtfY2xhc3NDYWxsQ2hlY2sodGhpcyxuKTt2YXIgcz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChuLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pKS5jYWxsKHRoaXMpKSxpO2lmKCJpbiI9PT1lKXt2YXIgZDtyZXR1cm4gZD1uZXcgVShhLG8pLF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHMsZCl9aWYoImRvIj09PWUpe3ZhciBjO3JldHVybiBjPW4ucHJvdG90eXBlLmdlbmVyYXRlRG8oYSksX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4ocyxjKX1pZigibmV3Ij09PWUpe2lmKChpPWEudW53cmFwKCkpaW5zdGFuY2VvZiB1JiYhaS5kbyYmIWkuaXNOZXcpe3ZhciBwO3JldHVybiBwPWkubmV3SW5zdGFuY2UoKSxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzLHApfShhIGluc3RhbmNlb2YgaCYmYS5ib3VuZHx8YS5kbykmJihhPW5ldyBkZShhKSl9cmV0dXJuIHMub3BlcmF0b3I9dFtlXXx8ZSxzLmZpcnN0PWEscy5zZWNvbmQ9byxzLmZsaXA9ISFyLGw9cyxfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzLGwpfXJldHVybiBfaW5oZXJpdHMobixlKSxfY3JlYXRlQ2xhc3Mobixbe2tleToiaXNOdW1iZXIiLHZhbHVlOmZ1bmN0aW9uIGlzTnVtYmVyKCl7dmFyIGU7cmV0dXJuIHRoaXMuaXNVbmFyeSgpJiYoIisiPT09KGU9dGhpcy5vcGVyYXRvcil8fCItIj09PWUpJiZ0aGlzLmZpcnN0IGluc3RhbmNlb2YgTGUmJnRoaXMuZmlyc3QuaXNOdW1iZXIoKX19LHtrZXk6ImlzQXdhaXQiLHZhbHVlOmZ1bmN0aW9uIGlzQXdhaXQoKXtyZXR1cm4iYXdhaXQiPT09dGhpcy5vcGVyYXRvcn19LHtrZXk6ImlzWWllbGQiLHZhbHVlOmZ1bmN0aW9uIGlzWWllbGQoKXt2YXIgZTtyZXR1cm4ieWllbGQiPT09KGU9dGhpcy5vcGVyYXRvcil8fCJ5aWVsZCoiPT09ZX19LHtrZXk6ImlzVW5hcnkiLHZhbHVlOmZ1bmN0aW9uIGlzVW5hcnkoKXtyZXR1cm4hdGhpcy5zZWNvbmR9fSx7a2V5OiJzaG91bGRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24gc2hvdWxkQ2FjaGUoKXtyZXR1cm4hdGhpcy5pc051bWJlcigpfX0se2tleToiaXNDaGFpbmFibGUiLHZhbHVlOmZ1bmN0aW9uIGlzQ2hhaW5hYmxlKCl7dmFyIGU7cmV0dXJuIjwiPT09KGU9dGhpcy5vcGVyYXRvcil8fCI+Ij09PWV8fCI+PSI9PT1lfHwiPD0iPT09ZXx8Ij09PSI9PT1lfHwiIT09Ij09PWV9fSx7a2V5OiJpbnZlcnQiLHZhbHVlOmZ1bmN0aW9uIGludmVydCgpe3ZhciBlLGEsdCxyLGw7aWYodGhpcy5pc0NoYWluYWJsZSgpJiZ0aGlzLmZpcnN0LmlzQ2hhaW5hYmxlKCkpe2ZvcihlPSEwLGE9dGhpczthJiZhLm9wZXJhdG9yOyllJiYoZT1hLm9wZXJhdG9yIGluIG8pLGE9YS5maXJzdDtpZighZSlyZXR1cm4gbmV3IGRlKHRoaXMpLmludmVydCgpO2ZvcihhPXRoaXM7YSYmYS5vcGVyYXRvcjspYS5pbnZlcnQ9IWEuaW52ZXJ0LGEub3BlcmF0b3I9b1thLm9wZXJhdG9yXSxhPWEuZmlyc3Q7cmV0dXJuIHRoaXN9cmV0dXJuKHI9b1t0aGlzLm9wZXJhdG9yXSk/KHRoaXMub3BlcmF0b3I9cix0aGlzLmZpcnN0LnVud3JhcCgpaW5zdGFuY2VvZiBuJiZ0aGlzLmZpcnN0LmludmVydCgpLHRoaXMpOnRoaXMuc2Vjb25kP25ldyBkZSh0aGlzKS5pbnZlcnQoKToiISI9PT10aGlzLm9wZXJhdG9yJiYodD10aGlzLmZpcnN0LnVud3JhcCgpKWluc3RhbmNlb2YgbiYmKCIhIj09PShsPXQub3BlcmF0b3IpfHwiaW4iPT09bHx8Imluc3RhbmNlb2YiPT09bCk/dDpuZXcgbigiISIsdGhpcyl9fSx7a2V5OiJ1bmZvbGRTb2FrIix2YWx1ZTpmdW5jdGlvbiB1bmZvbGRTb2FrKGUpe3ZhciBhO3JldHVybigiKysiPT09KGE9dGhpcy5vcGVyYXRvcil8fCItLSI9PT1hfHwiZGVsZXRlIj09PWEpJiZyYShlLHRoaXMsImZpcnN0Iil9fSx7a2V5OiJnZW5lcmF0ZURvIix2YWx1ZTpmdW5jdGlvbiBnZW5lcmF0ZURvKGUpe3ZhciBhLHQsbyxuLHIsbCxzLGk7Zm9yKGw9W10sdD1lIGluc3RhbmNlb2YgZCYmKHM9ZS52YWx1ZS51bndyYXAoKSlpbnN0YW5jZW9mIGg/czplLGk9dC5wYXJhbXN8fFtdLG89MCxuPWkubGVuZ3RoO288bjtvKyspcj1pW29dLHIudmFsdWU/KGwucHVzaChyLnZhbHVlKSxkZWxldGUgci52YWx1ZSk6bC5wdXNoKHIpO3JldHVybiBhPW5ldyB1KGUsbCksYS5kbz0hMCxhfX0se2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhLHQsbyxuLHIsbDtpZih0PXRoaXMuaXNDaGFpbmFibGUoKSYmdGhpcy5maXJzdC5pc0NoYWluYWJsZSgpLHR8fCh0aGlzLmZpcnN0LmZyb250PXRoaXMuZnJvbnQpLCJkZWxldGUiPT09dGhpcy5vcGVyYXRvciYmZS5zY29wZS5jaGVjayh0aGlzLmZpcnN0LnVud3JhcEFsbCgpLnZhbHVlKSYmdGhpcy5lcnJvcigiZGVsZXRlIG9wZXJhbmQgbWF5IG5vdCBiZSBhcmd1bWVudCBvciB2YXIiKSwoIi0tIj09PShyPXRoaXMub3BlcmF0b3IpfHwiKysiPT09cikmJihuPUplKHRoaXMuZmlyc3QudW53cmFwQWxsKCkudmFsdWUpLG4mJnRoaXMuZmlyc3QuZXJyb3IobikpLHRoaXMuaXNZaWVsZCgpfHx0aGlzLmlzQXdhaXQoKSlyZXR1cm4gdGhpcy5jb21waWxlQ29udGludWF0aW9uKGUpO2lmKHRoaXMuaXNVbmFyeSgpKXJldHVybiB0aGlzLmNvbXBpbGVVbmFyeShlKTtpZih0KXJldHVybiB0aGlzLmNvbXBpbGVDaGFpbihlKTtzd2l0Y2godGhpcy5vcGVyYXRvcil7Y2FzZSI/IjpyZXR1cm4gdGhpcy5jb21waWxlRXhpc3RlbmNlKGUsdGhpcy5zZWNvbmQuaXNEZWZhdWx0VmFsdWUpO2Nhc2UiKioiOnJldHVybiB0aGlzLmNvbXBpbGVQb3dlcihlKTtjYXNlIi8vIjpyZXR1cm4gdGhpcy5jb21waWxlRmxvb3JEaXZpc2lvbihlKTtjYXNlIiUlIjpyZXR1cm4gdGhpcy5jb21waWxlTW9kdWxvKGUpO2RlZmF1bHQ6cmV0dXJuIG89dGhpcy5maXJzdC5jb21waWxlVG9GcmFnbWVudHMoZSxZKSxsPXRoaXMuc2Vjb25kLmNvbXBpbGVUb0ZyYWdtZW50cyhlLFkpLGE9W10uY29uY2F0KG8sdGhpcy5tYWtlQ29kZSgiICIrdGhpcy5vcGVyYXRvcisiICIpLGwpLGUubGV2ZWw8PVk/YTp0aGlzLndyYXBJblBhcmVudGhlc2VzKGEpfX19LHtrZXk6ImNvbXBpbGVDaGFpbiIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZUNoYWluKGUpe3ZhciBhPXRoaXMuZmlyc3Quc2Vjb25kLmNhY2hlKGUpLHQ9X3NsaWNlZFRvQXJyYXkoYSwyKSxvLG4scjtyZXR1cm4gdGhpcy5maXJzdC5zZWNvbmQ9dFswXSxyPXRbMV0sbj10aGlzLmZpcnN0LmNvbXBpbGVUb0ZyYWdtZW50cyhlLFkpLG89bi5jb25jYXQodGhpcy5tYWtlQ29kZSgiICIrKHRoaXMuaW52ZXJ0PyImJiI6Inx8IikrIiAiKSxyLmNvbXBpbGVUb0ZyYWdtZW50cyhlKSx0aGlzLm1ha2VDb2RlKCIgIit0aGlzLm9wZXJhdG9yKyIgIiksdGhpcy5zZWNvbmQuY29tcGlsZVRvRnJhZ21lbnRzKGUsWSkpLHRoaXMud3JhcEluUGFyZW50aGVzZXMobyl9fSx7a2V5OiJjb21waWxlRXhpc3RlbmNlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlRXhpc3RlbmNlKGUsYSl7dmFyIHQsbztyZXR1cm4gdGhpcy5maXJzdC5zaG91bGRDYWNoZSgpPyhvPW5ldyBSKGUuc2NvcGUuZnJlZVZhcmlhYmxlKCJyZWYiKSksdD1uZXcgZGUobmV3IGQobyx0aGlzLmZpcnN0KSkpOih0PXRoaXMuZmlyc3Qsbz10KSxuZXcgTyhuZXcgVCh0LGEpLG8se3R5cGU6ImlmIn0pLmFkZEVsc2UodGhpcy5zZWNvbmQpLmNvbXBpbGVUb0ZyYWdtZW50cyhlKX19LHtrZXk6ImNvbXBpbGVVbmFyeSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZVVuYXJ5KGUpe3ZhciBhLHQsbztyZXR1cm4odD1bXSxhPXRoaXMub3BlcmF0b3IsdC5wdXNoKFt0aGlzLm1ha2VDb2RlKGEpXSksIiEiPT09YSYmdGhpcy5maXJzdCBpbnN0YW5jZW9mIFQpPyh0aGlzLmZpcnN0Lm5lZ2F0ZWQ9IXRoaXMuZmlyc3QubmVnYXRlZCx0aGlzLmZpcnN0LmNvbXBpbGVUb0ZyYWdtZW50cyhlKSk6ZS5sZXZlbD49SD9uZXcgZGUodGhpcykuY29tcGlsZVRvRnJhZ21lbnRzKGUpOihvPSIrIj09PWF8fCItIj09PWEsKCJuZXciPT09YXx8InR5cGVvZiI9PT1hfHwiZGVsZXRlIj09PWF8fG8mJnRoaXMuZmlyc3QgaW5zdGFuY2VvZiBuJiZ0aGlzLmZpcnN0Lm9wZXJhdG9yPT09YSkmJnQucHVzaChbdGhpcy5tYWtlQ29kZSgiICIpXSksKG8mJnRoaXMuZmlyc3QgaW5zdGFuY2VvZiBufHwibmV3Ij09PWEmJnRoaXMuZmlyc3QuaXNTdGF0ZW1lbnQoZSkpJiYodGhpcy5maXJzdD1uZXcgZGUodGhpcy5maXJzdCkpLHQucHVzaCh0aGlzLmZpcnN0LmNvbXBpbGVUb0ZyYWdtZW50cyhlLFkpKSx0aGlzLmZsaXAmJnQucmV2ZXJzZSgpLHRoaXMuam9pbkZyYWdtZW50QXJyYXlzKHQsIiIpKX19LHtrZXk6ImNvbXBpbGVDb250aW51YXRpb24iLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVDb250aW51YXRpb24oZSl7dmFyIHQsbyxuLHI7cmV0dXJuIG89W10sdD10aGlzLm9wZXJhdG9yLG51bGw9PWUuc2NvcGUucGFyZW50JiZ0aGlzLmVycm9yKHRoaXMub3BlcmF0b3IrIiBjYW4gb25seSBvY2N1ciBpbnNpZGUgZnVuY3Rpb25zIiksKG51bGw9PShuPWUuc2NvcGUubWV0aG9kKT92b2lkIDA6bi5ib3VuZCkmJmUuc2NvcGUubWV0aG9kLmlzR2VuZXJhdG9yJiZ0aGlzLmVycm9yKCJ5aWVsZCBjYW5ub3Qgb2NjdXIgaW5zaWRlIGJvdW5kIChmYXQgYXJyb3cpIGZ1bmN0aW9ucyIpLDA8PWEuY2FsbChPYmplY3Qua2V5cyh0aGlzLmZpcnN0KSwiZXhwcmVzc2lvbiIpJiYhKHRoaXMuZmlyc3QgaW5zdGFuY2VvZiBTZSk/bnVsbCE9dGhpcy5maXJzdC5leHByZXNzaW9uJiZvLnB1c2godGhpcy5maXJzdC5leHByZXNzaW9uLmNvbXBpbGVUb0ZyYWdtZW50cyhlLFkpKTooZS5sZXZlbD49cSYmby5wdXNoKFt0aGlzLm1ha2VDb2RlKCIoIildKSxvLnB1c2goW3RoaXMubWFrZUNvZGUodCldKSwiIiE9PShudWxsPT0ocj10aGlzLmZpcnN0LmJhc2UpP3ZvaWQgMDpyLnZhbHVlKSYmby5wdXNoKFt0aGlzLm1ha2VDb2RlKCIgIildKSxvLnB1c2godGhpcy5maXJzdC5jb21waWxlVG9GcmFnbWVudHMoZSxZKSksZS5sZXZlbD49cSYmby5wdXNoKFt0aGlzLm1ha2VDb2RlKCIpIildKSksdGhpcy5qb2luRnJhZ21lbnRBcnJheXMobywiIil9fSx7a2V5OiJjb21waWxlUG93ZXIiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVQb3dlcihlKXt2YXIgYTtyZXR1cm4gYT1uZXcgTGUobmV3IFIoIk1hdGgiKSxbbmV3IHIobmV3IHBlKCJwb3ciKSldKSxuZXcgdShhLFt0aGlzLmZpcnN0LHRoaXMuc2Vjb25kXSkuY29tcGlsZVRvRnJhZ21lbnRzKGUpfX0se2tleToiY29tcGlsZUZsb29yRGl2aXNpb24iLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVGbG9vckRpdmlzaW9uKGUpe3ZhciBhLHQsbztyZXR1cm4gdD1uZXcgTGUobmV3IFIoIk1hdGgiKSxbbmV3IHIobmV3IHBlKCJmbG9vciIpKV0pLG89dGhpcy5zZWNvbmQuc2hvdWxkQ2FjaGUoKT9uZXcgZGUodGhpcy5zZWNvbmQpOnRoaXMuc2Vjb25kLGE9bmV3IG4oIi8iLHRoaXMuZmlyc3QsbyksbmV3IHUodCxbYV0pLmNvbXBpbGVUb0ZyYWdtZW50cyhlKX19LHtrZXk6ImNvbXBpbGVNb2R1bG8iLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVNb2R1bG8oZSl7dmFyIGE7cmV0dXJuIGE9bmV3IExlKG5ldyBLKHNhKCJtb2R1bG8iLGUpKSksbmV3IHUoYSxbdGhpcy5maXJzdCx0aGlzLnNlY29uZF0pLmNvbXBpbGVUb0ZyYWdtZW50cyhlKX19LHtrZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbiB0b1N0cmluZyhlKXtyZXR1cm4gX2dldChuLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSksInRvU3RyaW5nIix0aGlzKS5jYWxsKHRoaXMsZSx0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3RoaXMub3BlcmF0b3IpfX1dKSxufShsKSx0LG87cmV0dXJuIHQ9eyI9PSI6Ij09PSIsIiE9IjoiIT09IixvZjoiaW4iLHlpZWxkZnJvbToieWllbGQqIn0sbz17IiE9PSI6Ij09PSIsIj09PSI6IiE9PSJ9LGUucHJvdG90eXBlLmNoaWxkcmVuPVsiZmlyc3QiLCJzZWNvbmQiXSxlfS5jYWxsKHRoaXMpLGUuSW49VT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0KXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgbz1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gby5vYmplY3Q9ZSxvLmFycmF5PXQsb31yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbixyO2lmKHRoaXMuYXJyYXkgaW5zdGFuY2VvZiBMZSYmdGhpcy5hcnJheS5pc0FycmF5KCkmJnRoaXMuYXJyYXkuYmFzZS5vYmplY3RzLmxlbmd0aCl7Zm9yKHI9dGhpcy5hcnJheS5iYXNlLm9iamVjdHMsdD0wLG89ci5sZW5ndGg7dDxvO3QrKylpZihuPXJbdF0sISEobiBpbnN0YW5jZW9mIFRlKSl7YT0hMDticmVha31pZighYSlyZXR1cm4gdGhpcy5jb21waWxlT3JUZXN0KGUpfXJldHVybiB0aGlzLmNvbXBpbGVMb29wVGVzdChlKX19LHtrZXk6ImNvbXBpbGVPclRlc3QiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVPclRlc3QoZSl7dmFyIGE9dGhpcy5vYmplY3QuY2FjaGUoZSxZKSx0PV9zbGljZWRUb0FycmF5KGEsMiksbyxuLHIsbCxzLGksZCxjLHAsdTtwPXRbMF0sZD10WzFdO3ZhciBtPXRoaXMubmVnYXRlZD9bIiAhPT0gIiwiICYmICJdOlsiID09PSAiLCIgfHwgIl0saD1fc2xpY2VkVG9BcnJheShtLDIpO2ZvcihvPWhbMF0sbj1oWzFdLHU9W10sYz10aGlzLmFycmF5LmJhc2Uub2JqZWN0cyxyPXM9MCxpPWMubGVuZ3RoO3M8aTtyPSsrcylsPWNbcl0sciYmdS5wdXNoKHRoaXMubWFrZUNvZGUobikpLHU9dS5jb25jYXQocj9kOnAsdGhpcy5tYWtlQ29kZShvKSxsLmNvbXBpbGVUb0ZyYWdtZW50cyhlLEgpKTtyZXR1cm4gZS5sZXZlbDxZP3U6dGhpcy53cmFwSW5QYXJlbnRoZXNlcyh1KX19LHtrZXk6ImNvbXBpbGVMb29wVGVzdCIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZUxvb3BUZXN0KGUpe3ZhciBhPXRoaXMub2JqZWN0LmNhY2hlKGUsWCksdD1fc2xpY2VkVG9BcnJheShhLDIpLG8sbixyO3JldHVybihyPXRbMF0sbj10WzFdLG89W10uY29uY2F0KHRoaXMubWFrZUNvZGUoc2EoImluZGV4T2YiLGUpKyIuY2FsbCgiKSx0aGlzLmFycmF5LmNvbXBpbGVUb0ZyYWdtZW50cyhlLFgpLHRoaXMubWFrZUNvZGUoIiwgIiksbix0aGlzLm1ha2VDb2RlKCIpICIrKHRoaXMubmVnYXRlZD8iPCAwIjoiPj0gMCIpKSksV2Uocik9PT1XZShuKSk/bzoobz1yLmNvbmNhdCh0aGlzLm1ha2VDb2RlKCIsICIpLG8pLGUubGV2ZWw8WD9vOnRoaXMud3JhcEluUGFyZW50aGVzZXMobykpfX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uIHRvU3RyaW5nKGUpe3JldHVybiBfZ2V0KGEucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEucHJvdG90eXBlKSwidG9TdHJpbmciLHRoaXMpLmNhbGwodGhpcyxlLHRoaXMuY29uc3RydWN0b3IubmFtZSsodGhpcy5uZWdhdGVkPyIhIjoiIikpfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJvYmplY3QiLCJhcnJheSJdLGUucHJvdG90eXBlLmludmVydD1hZSxlfS5jYWxsKHRoaXMpLGUuVHJ5PUFlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQsbyxuKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgcj1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gci5hdHRlbXB0PWUsci5lcnJvclZhcmlhYmxlPXQsci5yZWNvdmVyeT1vLHIuZW5zdXJlPW4scn1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6Imp1bXBzIix2YWx1ZTpmdW5jdGlvbiBqdW1wcyhlKXt2YXIgYTtyZXR1cm4gdGhpcy5hdHRlbXB0Lmp1bXBzKGUpfHwobnVsbD09KGE9dGhpcy5yZWNvdmVyeSk/dm9pZCAwOmEuanVtcHMoZSkpfX0se2tleToibWFrZVJldHVybiIsdmFsdWU6ZnVuY3Rpb24gbWFrZVJldHVybihlKXtyZXR1cm4gdGhpcy5hdHRlbXB0JiYodGhpcy5hdHRlbXB0PXRoaXMuYXR0ZW1wdC5tYWtlUmV0dXJuKGUpKSx0aGlzLnJlY292ZXJ5JiYodGhpcy5yZWNvdmVyeT10aGlzLnJlY292ZXJ5Lm1ha2VSZXR1cm4oZSkpLHRoaXN9fSx7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7dmFyIGEsdCxvLG4scixsO3JldHVybiBlLmluZGVudCs9RGUsbD10aGlzLmF0dGVtcHQuY29tcGlsZVRvRnJhZ21lbnRzKGUseiksYT10aGlzLnJlY292ZXJ5PyhvPWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJlcnJvciIse3Jlc2VydmU6ITF9KSxyPW5ldyBSKG8pLHRoaXMuZXJyb3JWYXJpYWJsZT8obj1KZSh0aGlzLmVycm9yVmFyaWFibGUudW53cmFwQWxsKCkudmFsdWUpLG4/dGhpcy5lcnJvclZhcmlhYmxlLmVycm9yKG4pOnZvaWQgMCx0aGlzLnJlY292ZXJ5LnVuc2hpZnQobmV3IGQodGhpcy5lcnJvclZhcmlhYmxlLHIpKSk6dm9pZCAwLFtdLmNvbmNhdCh0aGlzLm1ha2VDb2RlKCIgY2F0Y2ggKCIpLHIuY29tcGlsZVRvRnJhZ21lbnRzKGUpLHRoaXMubWFrZUNvZGUoIikge1xuIiksdGhpcy5yZWNvdmVyeS5jb21waWxlVG9GcmFnbWVudHMoZSx6KSx0aGlzLm1ha2VDb2RlKCJcbiIrdGhpcy50YWIrIn0iKSkpOnRoaXMuZW5zdXJlfHx0aGlzLnJlY292ZXJ5P1tdOihvPWUuc2NvcGUuZnJlZVZhcmlhYmxlKCJlcnJvciIse3Jlc2VydmU6ITF9KSxbdGhpcy5tYWtlQ29kZSgiIGNhdGNoICgiK28rIikge30iKV0pLHQ9dGhpcy5lbnN1cmU/W10uY29uY2F0KHRoaXMubWFrZUNvZGUoIiBmaW5hbGx5IHtcbiIpLHRoaXMuZW5zdXJlLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHopLHRoaXMubWFrZUNvZGUoIlxuIit0aGlzLnRhYisifSIpKTpbXSxbXS5jb25jYXQodGhpcy5tYWtlQ29kZSh0aGlzLnRhYisidHJ5IHtcbiIpLGwsdGhpcy5tYWtlQ29kZSgiXG4iK3RoaXMudGFiKyJ9IiksYSx0KX19XSksYX0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsiYXR0ZW1wdCIsInJlY292ZXJ5IiwiZW5zdXJlIl0sZS5wcm90b3R5cGUuaXNTdGF0ZW1lbnQ9d2UsZX0uY2FsbCh0aGlzKSxlLlRocm93PVNlPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxhKTt2YXIgdD1fcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLChhLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5leHByZXNzaW9uPWUsdH1yZXR1cm4gX2luaGVyaXRzKGEsZSksX2NyZWF0ZUNsYXNzKGEsW3trZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYTtyZXR1cm4gYT10aGlzLmV4cHJlc3Npb24uY29tcGlsZVRvRnJhZ21lbnRzKGUsWCksbGEoYSx0aGlzLm1ha2VDb2RlKCJ0aHJvdyAiKSksYS51bnNoaWZ0KHRoaXMubWFrZUNvZGUodGhpcy50YWIpKSxhLnB1c2godGhpcy5tYWtlQ29kZSgiOyIpKSxhfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJleHByZXNzaW9uIl0sZS5wcm90b3R5cGUuaXNTdGF0ZW1lbnQ9d2UsZS5wcm90b3R5cGUuanVtcHM9dGUsZS5wcm90b3R5cGUubWFrZVJldHVybj1FZSxlfS5jYWxsKHRoaXMpLGUuRXhpc3RlbmNlPVQ9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciBvPSEhKDE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdKSYmYXJndW1lbnRzWzFdO19jbGFzc0NhbGxDaGVjayh0aGlzLHQpO3ZhciBuPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKHQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpLmNhbGwodGhpcykpLHI7cmV0dXJuIG4uZXhwcmVzc2lvbj1lLG4uY29tcGFyaXNvblRhcmdldD1vPyJ1bmRlZmluZWQiOiJudWxsIixyPVtdLG4uZXhwcmVzc2lvbi50cmF2ZXJzZUNoaWxkcmVuKCEwLGZ1bmN0aW9uKGUpe3ZhciB0LG8sbixsO2lmKGUuY29tbWVudHMpe2ZvcihsPWUuY29tbWVudHMsbz0wLG49bC5sZW5ndGg7bzxuO28rKyl0PWxbb10sMD5hLmNhbGwocix0KSYmci5wdXNoKHQpO3JldHVybiBkZWxldGUgZS5jb21tZW50c319KSxNZShyLG4pLFFlKG4uZXhwcmVzc2lvbixuKSxufXJldHVybiBfaW5oZXJpdHModCxlKSxfY3JlYXRlQ2xhc3ModCxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhLHQsbztpZih0aGlzLmV4cHJlc3Npb24uZnJvbnQ9dGhpcy5mcm9udCxvPXRoaXMuZXhwcmVzc2lvbi5jb21waWxlKGUsWSksdGhpcy5leHByZXNzaW9uLnVud3JhcCgpaW5zdGFuY2VvZiBSJiYhZS5zY29wZS5jaGVjayhvKSl7dmFyIG49dGhpcy5uZWdhdGVkP1siPT09IiwifHwiXTpbIiE9PSIsIiYmIl0scj1fc2xpY2VkVG9BcnJheShuLDIpO2E9clswXSx0PXJbMV0sbz0idHlwZW9mICIrbysiICIrYSsnICJ1bmRlZmluZWQiJysoInVuZGVmaW5lZCI9PT10aGlzLmNvbXBhcmlzb25UYXJnZXQ/IiI6IiAiK3QrIiAiK28rIiAiK2ErIiAiK3RoaXMuY29tcGFyaXNvblRhcmdldCl9ZWxzZSBhPSJudWxsIj09PXRoaXMuY29tcGFyaXNvblRhcmdldD90aGlzLm5lZ2F0ZWQ/Ij09IjoiIT0iOnRoaXMubmVnYXRlZD8iPT09IjoiIT09IixvPW8rIiAiK2ErIiAiK3RoaXMuY29tcGFyaXNvblRhcmdldDtyZXR1cm5bdGhpcy5tYWtlQ29kZShlLmxldmVsPD1XP286IigiK28rIikiKV19fV0pLHR9KGwpO3JldHVybiBlLnByb3RvdHlwZS5jaGlsZHJlbj1bImV4cHJlc3Npb24iXSxlLnByb3RvdHlwZS5pbnZlcnQ9YWUsZX0uY2FsbCh0aGlzKSxlLlBhcmVucz1kZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHQ9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQuYm9keT1lLHR9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJ1bndyYXAiLHZhbHVlOmZ1bmN0aW9uIHVud3JhcCgpe3JldHVybiB0aGlzLmJvZHl9fSx7a2V5OiJzaG91bGRDYWNoZSIsdmFsdWU6ZnVuY3Rpb24gc2hvdWxkQ2FjaGUoKXtyZXR1cm4gdGhpcy5ib2R5LnNob3VsZENhY2hlKCl9fSx7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7dmFyIGEsdCxvLG4scjtyZXR1cm4odD10aGlzLmJvZHkudW53cmFwKCkscj1udWxsPT0obj10LmNvbW1lbnRzKT92b2lkIDA6bi5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBlLmhlcmUmJiFlLnVuc2hpZnQmJiFlLm5ld0xpbmV9KSx0IGluc3RhbmNlb2YgTGUmJnQuaXNBdG9taWMoKSYmIXRoaXMuY3N4QXR0cmlidXRlJiYhcik/KHQuZnJvbnQ9dGhpcy5mcm9udCx0LmNvbXBpbGVUb0ZyYWdtZW50cyhlKSk6KG89dC5jb21waWxlVG9GcmFnbWVudHMoZSxxKSxhPWUubGV2ZWw8WSYmIXImJih0IGluc3RhbmNlb2Ygc2V8fHQudW53cmFwKClpbnN0YW5jZW9mIHV8fHQgaW5zdGFuY2VvZiB4JiZ0LnJldHVybnMpJiYoZS5sZXZlbDxXfHwzPj1vLmxlbmd0aCksdGhpcy5jc3hBdHRyaWJ1dGU/dGhpcy53cmFwSW5CcmFjZXMobyk6YT9vOnRoaXMud3JhcEluUGFyZW50aGVzZXMobykpfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJib2R5Il0sZX0uY2FsbCh0aGlzKSxlLlN0cmluZ1dpdGhJbnRlcnBvbGF0aW9ucz1iZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSl7X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIHQ9X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQuYm9keT1lLHR9cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJ1bndyYXAiLHZhbHVlOmZ1bmN0aW9uIHVud3JhcCgpe3JldHVybiB0aGlzfX0se2tleToic2hvdWxkQ2FjaGUiLHZhbHVlOmZ1bmN0aW9uIHNob3VsZENhY2hlKCl7cmV0dXJuIHRoaXMuYm9keS5zaG91bGRDYWNoZSgpfX0se2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciB0LG8sbixyLGwscyxpLGQsYztpZih0aGlzLmNzeEF0dHJpYnV0ZSlyZXR1cm4gYz1uZXcgZGUobmV3IGEodGhpcy5ib2R5KSksYy5jc3hBdHRyaWJ1dGU9ITAsYy5jb21waWxlTm9kZShlKTtmb3Iocj10aGlzLmJvZHkudW53cmFwKCksbj1bXSxkPVtdLHIudHJhdmVyc2VDaGlsZHJlbighMSxmdW5jdGlvbihlKXt2YXIgYSx0LG8scixsLHM7aWYoZSBpbnN0YW5jZW9mIHZlKXtpZihlLmNvbW1lbnRzKXt2YXIgaTsoaT1kKS5wdXNoLmFwcGx5KGksX3RvQ29uc3VtYWJsZUFycmF5KGUuY29tbWVudHMpKSxkZWxldGUgZS5jb21tZW50c31yZXR1cm4gbi5wdXNoKGUpLCEwfWlmKGUgaW5zdGFuY2VvZiBkZSl7aWYoMCE9PWQubGVuZ3RoKXtmb3IodD0wLHI9ZC5sZW5ndGg7dDxyO3QrKylhPWRbdF0sYS51bnNoaWZ0PSEwLGEubmV3TGluZT0hMDtNZShkLGUpfXJldHVybiBuLnB1c2goZSksITF9aWYoZS5jb21tZW50cyl7aWYoMCE9PW4ubGVuZ3RoJiYhKG5bbi5sZW5ndGgtMV1pbnN0YW5jZW9mIHZlKSl7Zm9yKHM9ZS5jb21tZW50cyxvPTAsbD1zLmxlbmd0aDtvPGw7bysrKWE9c1tvXSxhLnVuc2hpZnQ9ITEsYS5uZXdMaW5lPSEwO01lKGUuY29tbWVudHMsbltuLmxlbmd0aC0xXSl9ZWxzZXt2YXIgYzsoYz1kKS5wdXNoLmFwcGx5KGMsX3RvQ29uc3VtYWJsZUFycmF5KGUuY29tbWVudHMpKX1kZWxldGUgZS5jb21tZW50c31yZXR1cm4hMH0pLGw9W10sdGhpcy5jc3h8fGwucHVzaCh0aGlzLm1ha2VDb2RlKCJgIikpLHM9MCxpPW4ubGVuZ3RoO3M8aTtzKyspaWYobz1uW3NdLG8gaW5zdGFuY2VvZiB2ZSl7dmFyIHA7by52YWx1ZT1vLnVucXVvdGUoITAsdGhpcy5jc3gpLHRoaXMuY3N4fHwoby52YWx1ZT1vLnZhbHVlLnJlcGxhY2UoLyhcXCopKGB8XCRceykvZyxmdW5jdGlvbihlLGEsdCl7cmV0dXJuIDA9PWEubGVuZ3RoJTI/YSsiXFwiK3Q6ZX0pKSwocD1sKS5wdXNoLmFwcGx5KHAsX3RvQ29uc3VtYWJsZUFycmF5KG8uY29tcGlsZVRvRnJhZ21lbnRzKGUpKSl9ZWxzZXt2YXIgdTt0aGlzLmNzeHx8bC5wdXNoKHRoaXMubWFrZUNvZGUoIiQiKSksdD1vLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHEpLCghdGhpcy5pc05lc3RlZFRhZyhvKXx8dC5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lLmNvbW1lbnRzfSkpJiYodD10aGlzLndyYXBJbkJyYWNlcyh0KSx0WzBdLmlzU3RyaW5nV2l0aEludGVycG9sYXRpb25zPSEwLHRbdC5sZW5ndGgtMV0uaXNTdHJpbmdXaXRoSW50ZXJwb2xhdGlvbnM9ITApLCh1PWwpLnB1c2guYXBwbHkodSxfdG9Db25zdW1hYmxlQXJyYXkodCkpfXJldHVybiB0aGlzLmNzeHx8bC5wdXNoKHRoaXMubWFrZUNvZGUoImAiKSksbH19LHtrZXk6ImlzTmVzdGVkVGFnIix2YWx1ZTpmdW5jdGlvbiBpc05lc3RlZFRhZyhlKXt2YXIgYSx0LG87cmV0dXJuIHQ9bnVsbD09KG89ZS5ib2R5KT92b2lkIDA6by5leHByZXNzaW9ucyxhPW51bGw9PXQ/dm9pZCAwOnRbMF0udW53cmFwKCksdGhpcy5jc3gmJnQmJjE9PT10Lmxlbmd0aCYmYSBpbnN0YW5jZW9mIHUmJmEuY3N4fX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJib2R5Il0sZX0uY2FsbCh0aGlzKSxlLkZvcj14PWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gYShlLHQpe19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciBvPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpLG4scixsLHMsaSxkO2lmKG8uc291cmNlPXQuc291cmNlLG8uZ3VhcmQ9dC5ndWFyZCxvLnN0ZXA9dC5zdGVwLG8ubmFtZT10Lm5hbWUsby5pbmRleD10LmluZGV4LG8uYm9keT1jLndyYXAoW2VdKSxvLm93bj1udWxsIT10Lm93bixvLm9iamVjdD1udWxsIT10Lm9iamVjdCxvLmZyb209bnVsbCE9dC5mcm9tLG8uZnJvbSYmby5pbmRleCYmby5pbmRleC5lcnJvcigiY2Fubm90IHVzZSBpbmRleCB3aXRoIGZvci1mcm9tIiksby5vd24mJiFvLm9iamVjdCYmdC5vd25UYWcuZXJyb3IoImNhbm5vdCB1c2Ugb3duIHdpdGggZm9yLSIrKG8uZnJvbT8iZnJvbSI6ImluIikpLG8ub2JqZWN0KXt2YXIgcD1bby5pbmRleCxvLm5hbWVdO28ubmFtZT1wWzBdLG8uaW5kZXg9cFsxXX1mb3IoKChudWxsPT0ocz1vLmluZGV4KT92b2lkIDA6ImZ1bmN0aW9uIj09dHlwZW9mIHMuaXNBcnJheT9zLmlzQXJyYXkoKTp2b2lkIDApfHwobnVsbD09KGk9by5pbmRleCk/dm9pZCAwOiJmdW5jdGlvbiI9PXR5cGVvZiBpLmlzT2JqZWN0P2kuaXNPYmplY3QoKTp2b2lkIDApKSYmby5pbmRleC5lcnJvcigiaW5kZXggY2Fubm90IGJlIGEgcGF0dGVybiBtYXRjaGluZyBleHByZXNzaW9uIiksby5yYW5nZT1vLnNvdXJjZSBpbnN0YW5jZW9mIExlJiZvLnNvdXJjZS5iYXNlIGluc3RhbmNlb2YgdWUmJiFvLnNvdXJjZS5wcm9wZXJ0aWVzLmxlbmd0aCYmIW8uZnJvbSxvLnBhdHRlcm49by5uYW1lIGluc3RhbmNlb2YgTGUsby5yYW5nZSYmby5pbmRleCYmby5pbmRleC5lcnJvcigiaW5kZXhlcyBkbyBub3QgYXBwbHkgdG8gcmFuZ2UgbG9vcHMiKSxvLnJhbmdlJiZvLnBhdHRlcm4mJm8ubmFtZS5lcnJvcigiY2Fubm90IHBhdHRlcm4gbWF0Y2ggb3ZlciByYW5nZSBsb29wcyIpLG8ucmV0dXJucz0hMSxkPVsic291cmNlIiwiZ3VhcmQiLCJzdGVwIiwibmFtZSIsImluZGV4Il0scj0wLGw9ZC5sZW5ndGg7cjxsO3IrKykobj1kW3JdLCEhb1tuXSkmJihvW25dLnRyYXZlcnNlQ2hpbGRyZW4oITAsZnVuY3Rpb24oZSl7dmFyIGEsdCxyLGw7aWYoZS5jb21tZW50cyl7Zm9yKGw9ZS5jb21tZW50cyx0PTAscj1sLmxlbmd0aDt0PHI7dCsrKWE9bFt0XSxhLm5ld0xpbmU9YS51bnNoaWZ0PSEwO3JldHVybiBRZShlLG9bbl0pfX0pLFFlKG9bbl0sbykpO3JldHVybiBvfXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToiY29tcGlsZU5vZGUiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVOb2RlKGUpe3ZhciBhLHQsbyxyLGwscyxpLHAsdSxtLGgsZyxmLHksayxULE4sdixiLCQsXyxDLEQsRSx4LEksUyxBLEwsRix3LFAsaixNLFU7aWYobz1jLndyYXAoW3RoaXMuYm9keV0pLHg9by5leHByZXNzaW9ucyxhPW4uY2FsbCh4LC0xKSx0PV9zbGljZWRUb0FycmF5KGEsMSksJD10WzBdLGEsKG51bGw9PSQ/dm9pZCAwOiQuanVtcHMoKSlpbnN0YW5jZW9mIGdlJiYodGhpcy5yZXR1cm5zPSExKSxGPXRoaXMucmFuZ2U/dGhpcy5zb3VyY2UuYmFzZTp0aGlzLnNvdXJjZSxMPWUuc2NvcGUsdGhpcy5wYXR0ZXJufHwoQz10aGlzLm5hbWUmJnRoaXMubmFtZS5jb21waWxlKGUsWCkpLFQ9dGhpcy5pbmRleCYmdGhpcy5pbmRleC5jb21waWxlKGUsWCksQyYmIXRoaXMucGF0dGVybiYmTC5maW5kKEMpLFQmJiEodGhpcy5pbmRleCBpbnN0YW5jZW9mIExlKSYmTC5maW5kKFQpLHRoaXMucmV0dXJucyYmKEE9TC5mcmVlVmFyaWFibGUoInJlc3VsdHMiKSksdGhpcy5mcm9tP3RoaXMucGF0dGVybiYmKE49TC5mcmVlVmFyaWFibGUoIngiLHtzaW5nbGU6ITB9KSk6Tj10aGlzLm9iamVjdCYmVHx8TC5mcmVlVmFyaWFibGUoImkiLHtzaW5nbGU6ITB9KSx2PSh0aGlzLnJhbmdlfHx0aGlzLmZyb20pJiZDfHxUfHxOLGI9dj09PU4/IiI6disiID0gIix0aGlzLnN0ZXAmJiF0aGlzLnJhbmdlKXt2YXIgVj10aGlzLmNhY2hlVG9Db2RlRnJhZ21lbnRzKHRoaXMuc3RlcC5jYWNoZShlLFgsYWEpKSxCPV9zbGljZWRUb0FycmF5KFYsMik7dz1CWzBdLGo9QlsxXSx0aGlzLnN0ZXAuaXNOdW1iZXIoKSYmKFA9K2opfXJldHVybiB0aGlzLnBhdHRlcm4mJihDPU4pLFU9IiIsZj0iIix1PSIiLHk9dGhpcy50YWIrRGUsdGhpcy5yYW5nZT9oPUYuY29tcGlsZVRvRnJhZ21lbnRzKFplKGUse2luZGV4Ok4sbmFtZTpDLHN0ZXA6dGhpcy5zdGVwLHNob3VsZENhY2hlOmFhfSkpOihNPXRoaXMuc291cmNlLmNvbXBpbGUoZSxYKSwoQ3x8dGhpcy5vd24pJiYhKHRoaXMuc291cmNlLnVud3JhcCgpaW5zdGFuY2VvZiBSKSYmKHUrPSIiK3RoaXMudGFiKyhFPUwuZnJlZVZhcmlhYmxlKCJyZWYiKSkrIiA9ICIrTSsiO1xuIixNPUUpLEMmJiF0aGlzLnBhdHRlcm4mJiF0aGlzLmZyb20mJihEPUMrIiA9ICIrTSsiWyIrdisiXSIpLCF0aGlzLm9iamVjdCYmIXRoaXMuZnJvbSYmKHchPT1qJiYodSs9IiIrdGhpcy50YWIrdysiO1xuIiksbT0wPlAsISh0aGlzLnN0ZXAmJm51bGwhPVAmJm0pJiYoXz1MLmZyZWVWYXJpYWJsZSgibGVuIikpLGk9IiIrYitOKyIgPSAwLCAiK18rIiA9ICIrTSsiLmxlbmd0aCIscD0iIitiK04rIiA9ICIrTSsiLmxlbmd0aCAtIDEiLGw9TisiIDwgIitfLHM9TisiID49IDAiLHRoaXMuc3RlcD8obnVsbD09UD8obD1qKyIgPiAwID8gIitsKyIgOiAiK3MsaT0iKCIraisiID4gMCA/ICgiK2krIikgOiAiK3ArIikiKTptJiYobD1zLGk9cCksaz1OKyIgKz0gIitqKTprPSIiKyh2PT09Tj9OKyIrKyI6IisrIitOKSxoPVt0aGlzLm1ha2VDb2RlKGkrIjsgIitsKyI7ICIrYitrKV0pKSx0aGlzLnJldHVybnMmJihJPSIiK3RoaXMudGFiK0ErIiA9IFtdO1xuIixTPSJcbiIrdGhpcy50YWIrInJldHVybiAiK0ErIjsiLG8ubWFrZVJldHVybihBKSksdGhpcy5ndWFyZCYmKDE8by5leHByZXNzaW9ucy5sZW5ndGg/by5leHByZXNzaW9ucy51bnNoaWZ0KG5ldyBPKG5ldyBkZSh0aGlzLmd1YXJkKS5pbnZlcnQoKSxuZXcgTmUoImNvbnRpbnVlIikpKTp0aGlzLmd1YXJkJiYobz1jLndyYXAoW25ldyBPKHRoaXMuZ3VhcmQsbyldKSkpLHRoaXMucGF0dGVybiYmby5leHByZXNzaW9ucy51bnNoaWZ0KG5ldyBkKHRoaXMubmFtZSx0aGlzLmZyb20/bmV3IFIodik6bmV3IEsoTSsiWyIrdisiXSIpKSksRCYmKFU9IlxuIit5K0QrIjsiKSx0aGlzLm9iamVjdD8oaD1bdGhpcy5tYWtlQ29kZSh2KyIgaW4gIitNKV0sdGhpcy5vd24mJihmPSJcbiIreSsiaWYgKCEiK3NhKCJoYXNQcm9wIixlKSsiLmNhbGwoIitNKyIsICIrdisiKSkgY29udGludWU7IikpOnRoaXMuZnJvbSYmKGg9W3RoaXMubWFrZUNvZGUodisiIG9mICIrTSldKSxyPW8uY29tcGlsZVRvRnJhZ21lbnRzKFplKGUse2luZGVudDp5fSkseiksciYmMDxyLmxlbmd0aCYmKHI9W10uY29uY2F0KHRoaXMubWFrZUNvZGUoIlxuIikscix0aGlzLm1ha2VDb2RlKCJcbiIpKSksZz1bdGhpcy5tYWtlQ29kZSh1KV0sSSYmZy5wdXNoKHRoaXMubWFrZUNvZGUoSSkpLGc9Zy5jb25jYXQodGhpcy5tYWtlQ29kZSh0aGlzLnRhYiksdGhpcy5tYWtlQ29kZSgiZm9yICgiKSxoLHRoaXMubWFrZUNvZGUoIikgeyIrZitVKSxyLHRoaXMubWFrZUNvZGUodGhpcy50YWIpLHRoaXMubWFrZUNvZGUoIn0iKSksUyYmZy5wdXNoKHRoaXMubWFrZUNvZGUoUykpLGd9fV0pLGF9KEZlKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJib2R5Iiwic291cmNlIiwiZ3VhcmQiLCJzdGVwIl0sZX0uY2FsbCh0aGlzKSxlLlN3aXRjaD1DZT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0LG8pe19jbGFzc0NhbGxDaGVjayh0aGlzLGEpO3ZhciBuPV9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsKGEuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkpLmNhbGwodGhpcykpO3JldHVybiBuLnN1YmplY3Q9ZSxuLmNhc2VzPXQsbi5vdGhlcndpc2U9byxufXJldHVybiBfaW5oZXJpdHMoYSxlKSxfY3JlYXRlQ2xhc3MoYSxbe2tleToianVtcHMiLHZhbHVlOmZ1bmN0aW9uIGp1bXBzKCl7dmFyIGU9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntibG9jazohMH0sYSx0LG8sbixyLGwscztmb3IobD10aGlzLmNhc2VzLG89MCxyPWwubGVuZ3RoO288cjtvKyspe3ZhciBpPV9zbGljZWRUb0FycmF5KGxbb10sMik7aWYodD1pWzBdLGE9aVsxXSxuPWEuanVtcHMoZSkpcmV0dXJuIG59cmV0dXJuIG51bGw9PShzPXRoaXMub3RoZXJ3aXNlKT92b2lkIDA6cy5qdW1wcyhlKX19LHtrZXk6Im1ha2VSZXR1cm4iLHZhbHVlOmZ1bmN0aW9uIG1ha2VSZXR1cm4oZSl7dmFyIGEsdCxvLG4scjtmb3Iobj10aGlzLmNhc2VzLGE9MCx0PW4ubGVuZ3RoO2E8dDthKyspbz1uW2FdLG9bMV0ubWFrZVJldHVybihlKTtyZXR1cm4gZSYmKHRoaXMub3RoZXJ3aXNlfHwodGhpcy5vdGhlcndpc2U9bmV3IGMoW25ldyBLKCJ2b2lkIDAiKV0pKSksbnVsbCE9KHI9dGhpcy5vdGhlcndpc2UpJiZyLm1ha2VSZXR1cm4oZSksdGhpc319LHtrZXk6ImNvbXBpbGVOb2RlIix2YWx1ZTpmdW5jdGlvbiBjb21waWxlTm9kZShlKXt2YXIgYSx0LG8sbixyLGwscyxpLGQsYyxwLHUsbSxoLGc7Zm9yKGk9ZS5pbmRlbnQrRGUsZD1lLmluZGVudD1pK0RlLGw9W10uY29uY2F0KHRoaXMubWFrZUNvZGUodGhpcy50YWIrInN3aXRjaCAoIiksdGhpcy5zdWJqZWN0P3RoaXMuc3ViamVjdC5jb21waWxlVG9GcmFnbWVudHMoZSxxKTp0aGlzLm1ha2VDb2RlKCJmYWxzZSIpLHRoaXMubWFrZUNvZGUoIikge1xuIikpLGg9dGhpcy5jYXNlcyxzPWM9MCx1PWgubGVuZ3RoO2M8dTtzPSsrYyl7dmFyIGY9X3NsaWNlZFRvQXJyYXkoaFtzXSwyKTtmb3Iobj1mWzBdLGE9ZlsxXSxnPUhlKFtuXSkscD0wLG09Zy5sZW5ndGg7cDxtO3ArKylvPWdbcF0sdGhpcy5zdWJqZWN0fHwobz1vLmludmVydCgpKSxsPWwuY29uY2F0KHRoaXMubWFrZUNvZGUoaSsiY2FzZSAiKSxvLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHEpLHRoaXMubWFrZUNvZGUoIjpcbiIpKTtpZigwPCh0PWEuY29tcGlsZVRvRnJhZ21lbnRzKGUseikpLmxlbmd0aCYmKGw9bC5jb25jYXQodCx0aGlzLm1ha2VDb2RlKCJcbiIpKSkscz09PXRoaXMuY2FzZXMubGVuZ3RoLTEmJiF0aGlzLm90aGVyd2lzZSlicmVhazsocj10aGlzLmxhc3ROb2RlKGEuZXhwcmVzc2lvbnMpLCEociBpbnN0YW5jZW9mIGdlfHxyIGluc3RhbmNlb2YgU2V8fHIgaW5zdGFuY2VvZiBLJiZyLmp1bXBzKCkmJiJkZWJ1Z2dlciIhPT1yLnZhbHVlKSkmJmwucHVzaChvLm1ha2VDb2RlKGQrImJyZWFrO1xuIikpfWlmKHRoaXMub3RoZXJ3aXNlJiZ0aGlzLm90aGVyd2lzZS5leHByZXNzaW9ucy5sZW5ndGgpe3ZhciB5Oyh5PWwpLnB1c2guYXBwbHkoeSxbdGhpcy5tYWtlQ29kZShpKyJkZWZhdWx0OlxuIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGhpcy5vdGhlcndpc2UuY29tcGlsZVRvRnJhZ21lbnRzKGUseikpLFt0aGlzLm1ha2VDb2RlKCJcbiIpXSkpfXJldHVybiBsLnB1c2godGhpcy5tYWtlQ29kZSh0aGlzLnRhYisifSIpKSxsfX1dKSxhfShsKTtyZXR1cm4gZS5wcm90b3R5cGUuY2hpbGRyZW49WyJzdWJqZWN0IiwiY2FzZXMiLCJvdGhlcndpc2UiXSxlLnByb3RvdHlwZS5pc1N0YXRlbWVudD13ZSxlfS5jYWxsKHRoaXMpLGUuSWY9Tz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGEoZSx0KXt2YXIgbz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307X2NsYXNzQ2FsbENoZWNrKHRoaXMsYSk7dmFyIG49X3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywoYS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSkuY2FsbCh0aGlzKSk7cmV0dXJuIG4uYm9keT10LG4uY29uZGl0aW9uPSJ1bmxlc3MiPT09by50eXBlP2UuaW52ZXJ0KCk6ZSxuLmVsc2VCb2R5PW51bGwsbi5pc0NoYWluPSExLG4uc29haz1vLnNvYWssbi5jb25kaXRpb24uY29tbWVudHMmJlFlKG4uY29uZGl0aW9uLG4pLG59cmV0dXJuIF9pbmhlcml0cyhhLGUpLF9jcmVhdGVDbGFzcyhhLFt7a2V5OiJib2R5Tm9kZSIsdmFsdWU6ZnVuY3Rpb24gYm9keU5vZGUoKXt2YXIgZTtyZXR1cm4gbnVsbD09KGU9dGhpcy5ib2R5KT92b2lkIDA6ZS51bndyYXAoKX19LHtrZXk6ImVsc2VCb2R5Tm9kZSIsdmFsdWU6ZnVuY3Rpb24gZWxzZUJvZHlOb2RlKCl7dmFyIGU7cmV0dXJuIG51bGw9PShlPXRoaXMuZWxzZUJvZHkpP3ZvaWQgMDplLnVud3JhcCgpfX0se2tleToiYWRkRWxzZSIsdmFsdWU6ZnVuY3Rpb24gYWRkRWxzZShlKXtyZXR1cm4gdGhpcy5pc0NoYWluP3RoaXMuZWxzZUJvZHlOb2RlKCkuYWRkRWxzZShlKToodGhpcy5pc0NoYWluPWUgaW5zdGFuY2VvZiBhLHRoaXMuZWxzZUJvZHk9dGhpcy5lbnN1cmVCbG9jayhlKSx0aGlzLmVsc2VCb2R5LnVwZGF0ZUxvY2F0aW9uRGF0YUlmTWlzc2luZyhlLmxvY2F0aW9uRGF0YSkpLHRoaXN9fSx7a2V5OiJpc1N0YXRlbWVudCIsdmFsdWU6ZnVuY3Rpb24gaXNTdGF0ZW1lbnQoZSl7dmFyIGE7cmV0dXJuKG51bGw9PWU/dm9pZCAwOmUubGV2ZWwpPT09enx8dGhpcy5ib2R5Tm9kZSgpLmlzU3RhdGVtZW50KGUpfHwobnVsbD09KGE9dGhpcy5lbHNlQm9keU5vZGUoKSk/dm9pZCAwOmEuaXNTdGF0ZW1lbnQoZSkpfX0se2tleToianVtcHMiLHZhbHVlOmZ1bmN0aW9uIGp1bXBzKGUpe3ZhciBhO3JldHVybiB0aGlzLmJvZHkuanVtcHMoZSl8fChudWxsPT0oYT10aGlzLmVsc2VCb2R5KT92b2lkIDA6YS5qdW1wcyhlKSl9fSx7a2V5OiJjb21waWxlTm9kZSIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZU5vZGUoZSl7cmV0dXJuIHRoaXMuaXNTdGF0ZW1lbnQoZSk/dGhpcy5jb21waWxlU3RhdGVtZW50KGUpOnRoaXMuY29tcGlsZUV4cHJlc3Npb24oZSl9fSx7a2V5OiJtYWtlUmV0dXJuIix2YWx1ZTpmdW5jdGlvbiBtYWtlUmV0dXJuKGUpe3JldHVybiBlJiYodGhpcy5lbHNlQm9keXx8KHRoaXMuZWxzZUJvZHk9bmV3IGMoW25ldyBLKCJ2b2lkIDAiKV0pKSksdGhpcy5ib2R5JiYodGhpcy5ib2R5PW5ldyBjKFt0aGlzLmJvZHkubWFrZVJldHVybihlKV0pKSx0aGlzLmVsc2VCb2R5JiYodGhpcy5lbHNlQm9keT1uZXcgYyhbdGhpcy5lbHNlQm9keS5tYWtlUmV0dXJuKGUpXSkpLHRoaXN9fSx7a2V5OiJlbnN1cmVCbG9jayIsdmFsdWU6ZnVuY3Rpb24gZW5zdXJlQmxvY2soZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBjP2U6bmV3IGMoW2VdKX19LHtrZXk6ImNvbXBpbGVTdGF0ZW1lbnQiLHZhbHVlOmZ1bmN0aW9uIGNvbXBpbGVTdGF0ZW1lbnQoZSl7dmFyIHQsbyxuLHIsbCxzLGk7cmV0dXJuKG49VmUoZSwiY2hhaW5DaGlsZCIpLGw9VmUoZSwiaXNFeGlzdGVudGlhbEVxdWFscyIpLGwpP25ldyBhKHRoaXMuY29uZGl0aW9uLmludmVydCgpLHRoaXMuZWxzZUJvZHlOb2RlKCkse3R5cGU6ImlmIn0pLmNvbXBpbGVUb0ZyYWdtZW50cyhlKTooaT1lLmluZGVudCtEZSxyPXRoaXMuY29uZGl0aW9uLmNvbXBpbGVUb0ZyYWdtZW50cyhlLHEpLG89dGhpcy5lbnN1cmVCbG9jayh0aGlzLmJvZHkpLmNvbXBpbGVUb0ZyYWdtZW50cyhaZShlLHtpbmRlbnQ6aX0pKSxzPVtdLmNvbmNhdCh0aGlzLm1ha2VDb2RlKCJpZiAoIikscix0aGlzLm1ha2VDb2RlKCIpIHtcbiIpLG8sdGhpcy5tYWtlQ29kZSgiXG4iK3RoaXMudGFiKyJ9IikpLG58fHMudW5zaGlmdCh0aGlzLm1ha2VDb2RlKHRoaXMudGFiKSksIXRoaXMuZWxzZUJvZHkpP3M6KHQ9cy5jb25jYXQodGhpcy5tYWtlQ29kZSgiIGVsc2UgIikpLHRoaXMuaXNDaGFpbj8oZS5jaGFpbkNoaWxkPSEwLHQ9dC5jb25jYXQodGhpcy5lbHNlQm9keS51bndyYXAoKS5jb21waWxlVG9GcmFnbWVudHMoZSx6KSkpOnQ9dC5jb25jYXQodGhpcy5tYWtlQ29kZSgie1xuIiksdGhpcy5lbHNlQm9keS5jb21waWxlVG9GcmFnbWVudHMoWmUoZSx7aW5kZW50Oml9KSx6KSx0aGlzLm1ha2VDb2RlKCJcbiIrdGhpcy50YWIrIn0iKSksdCl9fSx7a2V5OiJjb21waWxlRXhwcmVzc2lvbiIsdmFsdWU6ZnVuY3Rpb24gY29tcGlsZUV4cHJlc3Npb24oZSl7dmFyIGEsdCxvLG47cmV0dXJuIG89dGhpcy5jb25kaXRpb24uY29tcGlsZVRvRnJhZ21lbnRzKGUsVyksdD10aGlzLmJvZHlOb2RlKCkuY29tcGlsZVRvRnJhZ21lbnRzKGUsWCksYT10aGlzLmVsc2VCb2R5Tm9kZSgpP3RoaXMuZWxzZUJvZHlOb2RlKCkuY29tcGlsZVRvRnJhZ21lbnRzKGUsWCk6W3RoaXMubWFrZUNvZGUoInZvaWQgMCIpXSxuPW8uY29uY2F0KHRoaXMubWFrZUNvZGUoIiA/ICIpLHQsdGhpcy5tYWtlQ29kZSgiIDogIiksYSksZS5sZXZlbD49Vz90aGlzLndyYXBJblBhcmVudGhlc2VzKG4pOm59fSx7a2V5OiJ1bmZvbGRTb2FrIix2YWx1ZTpmdW5jdGlvbiB1bmZvbGRTb2FrKCl7cmV0dXJuIHRoaXMuc29hayYmdGhpc319XSksYX0obCk7cmV0dXJuIGUucHJvdG90eXBlLmNoaWxkcmVuPVsiY29uZGl0aW9uIiwiYm9keSIsImVsc2VCb2R5Il0sZX0uY2FsbCh0aGlzKSxSZT17bW9kdWxvOmZ1bmN0aW9uIG1vZHVsbygpe3JldHVybiJmdW5jdGlvbihhLCBiKSB7IHJldHVybiAoK2EgJSAoYiA9ICtiKSArIGIpICUgYjsgfSJ9LG9iamVjdFdpdGhvdXRLZXlzOmZ1bmN0aW9uIG9iamVjdFdpdGhvdXRLZXlzKCl7cmV0dXJuImZ1bmN0aW9uKG8sIGtzKSB7IHZhciByZXMgPSB7fTsgZm9yICh2YXIgayBpbiBvKSAoW10uaW5kZXhPZi5jYWxsKGtzLCBrKSA8IDAgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgJiYgKHJlc1trXSA9IG9ba10pOyByZXR1cm4gcmVzOyB9In0sYm91bmRNZXRob2RDaGVjazpmdW5jdGlvbiBib3VuZE1ldGhvZENoZWNrKCl7cmV0dXJuImZ1bmN0aW9uKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0JvdW5kIGluc3RhbmNlIG1ldGhvZCBhY2Nlc3NlZCBiZWZvcmUgYmluZGluZycpOyB9IH0ifSxfZXh0ZW5kczpmdW5jdGlvbiBfZXh0ZW5kcygpe3JldHVybiJPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9In0saGFzUHJvcDpmdW5jdGlvbiBoYXNQcm9wKCl7cmV0dXJuInt9Lmhhc093blByb3BlcnR5In0saW5kZXhPZjpmdW5jdGlvbigpe3JldHVybiJbXS5pbmRleE9mIn0sc2xpY2U6ZnVuY3Rpb24gc2xpY2UoKXtyZXR1cm4iW10uc2xpY2UifSxzcGxpY2U6ZnVuY3Rpb24oKXtyZXR1cm4iW10uc3BsaWNlIn19LHo9MSxxPTIsWD0zLFc9NCxZPTUsSD02LERlPSIgICIsZmU9L15bKy1dP1xkKyQvLHNhPWZ1bmN0aW9uKGUsYSl7dmFyIHQsbztyZXR1cm4gbz1hLnNjb3BlLnJvb3QsZSBpbiBvLnV0aWxpdGllcz9vLnV0aWxpdGllc1tlXToodD1vLmZyZWVWYXJpYWJsZShlKSxvLmFzc2lnbih0LFJlW2VdKGEpKSxvLnV0aWxpdGllc1tlXT10KX0sZWE9ZnVuY3Rpb24oZSxhKXt2YXIgdD0hKDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG87cmV0dXJuIG89IlxuIj09PWVbZS5sZW5ndGgtMV0sZT0odD9hOiIiKStlLnJlcGxhY2UoL1xuL2csIiQmIithKSxlPWUucmVwbGFjZSgvXHMrJC8sIiIpLG8mJihlKz0iXG4iKSxlfSxZZT1mdW5jdGlvbihlLGEpe3ZhciB0LG8sbixyO2ZvcihvPW49MCxyPWUubGVuZ3RoO248cjtvPSsrbilpZih0PWVbb10sdC5pc0hlcmVDb21tZW50KXQuY29kZT1lYSh0LmNvZGUsYS50YWIpO2Vsc2V7ZS5zcGxpY2UobywwLGEubWFrZUNvZGUoIiIrYS50YWIpKTticmVha31yZXR1cm4gZX0sWGU9ZnVuY3Rpb24oZSl7dmFyIGEsdCxvLG47aWYoIWUuY29tbWVudHMpcmV0dXJuITE7Zm9yKG49ZS5jb21tZW50cyx0PTAsbz1uLmxlbmd0aDt0PG87dCsrKWlmKGE9blt0XSwhMT09PWEuaGVyZSlyZXR1cm4hMDtyZXR1cm4hMX0sUWU9ZnVuY3Rpb24oZSxhKXtpZihudWxsIT1lJiZlLmNvbW1lbnRzKXJldHVybiBNZShlLmNvbW1lbnRzLGEpLGRlbGV0ZSBlLmNvbW1lbnRzfSxsYT1mdW5jdGlvbihlLGEpe3ZhciB0LG8sbixyLGw7Zm9yKG49ITEsbz1yPTAsbD1lLmxlbmd0aDtyPGw7bz0rK3IpaWYodD1lW29dLCEhIXQuaXNDb21tZW50KXtlLnNwbGljZShvLDAsYSksbj0hMDticmVha31yZXR1cm4gbnx8ZS5wdXNoKGEpLGV9LHFlPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgUiYmImFyZ3VtZW50cyI9PT1lLnZhbHVlfSx6ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEllfHxlIGluc3RhbmNlb2YgaCYmZS5ib3VuZH0sYWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2hvdWxkQ2FjaGUoKXx8KCJmdW5jdGlvbiI9PXR5cGVvZiBlLmlzQXNzaWduYWJsZT9lLmlzQXNzaWduYWJsZSgpOnZvaWQgMCl9LHJhPWZ1bmN0aW9uKGUsYSx0KXt2YXIgbztpZihvPWFbdF0udW5mb2xkU29hayhlKSlyZXR1cm4gYVt0XT1vLmJvZHksby5ib2R5PW5ldyBMZShhKSxvfX0uY2FsbCh0aGlzKSx7ZXhwb3J0czplfS5leHBvcnRzfSgpLHJlcXVpcmVbIi4vc291cmNlbWFwIl09ZnVuY3Rpb24oKXt2YXIgZT17ZXhwb3J0czp7fX07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEsdDthPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShhKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxlKSx0aGlzLmxpbmU9YSx0aGlzLmNvbHVtbnM9W119cmV0dXJuIF9jcmVhdGVDbGFzcyhlLFt7a2V5OiJhZGQiLHZhbHVlOmZ1bmN0aW9uIGFkZChlLGEpe3ZhciB0PV9zbGljZWRUb0FycmF5KGEsMiksbz10WzBdLG49dFsxXSxyPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtyZXR1cm4gdGhpcy5jb2x1bW5zW2VdJiZyLm5vUmVwbGFjZT92b2lkIDA6dGhpcy5jb2x1bW5zW2VdPXtsaW5lOnRoaXMubGluZSxjb2x1bW46ZSxzb3VyY2VMaW5lOm8sc291cmNlQ29sdW1uOm59fX0se2tleToic291cmNlTG9jYXRpb24iLHZhbHVlOmZ1bmN0aW9uIHNvdXJjZUxvY2F0aW9uKGUpe2Zvcih2YXIgYTshKChhPXRoaXMuY29sdW1uc1tlXSl8fDA+PWUpOyllLS07cmV0dXJuIGEmJlthLnNvdXJjZUxpbmUsYS5zb3VyY2VDb2x1bW5dfX1dKSxlfSgpLHQ9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtfY2xhc3NDYWxsQ2hlY2sodGhpcyxlKSx0aGlzLmxpbmVzPVtdfXJldHVybiBfY3JlYXRlQ2xhc3MoZSxbe2tleToiYWRkIix2YWx1ZTpmdW5jdGlvbiBhZGQoZSx0KXt2YXIgbz0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30sbj1fc2xpY2VkVG9BcnJheSh0LDIpLHIsbCxzLGk7cmV0dXJuIHM9blswXSxsPW5bMV0saT0ocj10aGlzLmxpbmVzKVtzXXx8KHJbc109bmV3IGEocykpLGkuYWRkKGwsZSxvKX19LHtrZXk6InNvdXJjZUxvY2F0aW9uIix2YWx1ZTpmdW5jdGlvbiBzb3VyY2VMb2NhdGlvbihlKXtmb3IodmFyIGE9X3NsaWNlZFRvQXJyYXkoZSwyKSx0PWFbMF0sbz1hWzFdLG47ISgobj10aGlzLmxpbmVzW3RdKXx8MD49dCk7KXQtLTtyZXR1cm4gbiYmbi5zb3VyY2VMb2NhdGlvbihvKX19LHtrZXk6ImdlbmVyYXRlIix2YWx1ZTpmdW5jdGlvbiBnZW5lcmF0ZSgpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHQsbyxuLHIsbCxzLGksZCxjLHAsdSxtLGgsZyxmLHksaztmb3Ioaz0wLHI9MCxzPTAsbD0wLG09ITEsdD0iIixoPXRoaXMubGluZXMscD1vPTAsaT1oLmxlbmd0aDtvPGk7cD0rK28paWYoYz1oW3BdLGMpZm9yKGc9Yy5jb2x1bW5zLG49MCxkPWcubGVuZ3RoO248ZDtuKyspaWYodT1nW25dLCEhdSl7Zm9yKDtrPHUubGluZTspcj0wLG09ITEsdCs9IjsiLGsrKzttJiYodCs9IiwiLG09ITEpLHQrPXRoaXMuZW5jb2RlVmxxKHUuY29sdW1uLXIpLHI9dS5jb2x1bW4sdCs9dGhpcy5lbmNvZGVWbHEoMCksdCs9dGhpcy5lbmNvZGVWbHEodS5zb3VyY2VMaW5lLXMpLHM9dS5zb3VyY2VMaW5lLHQrPXRoaXMuZW5jb2RlVmxxKHUuc291cmNlQ29sdW1uLWwpLGw9dS5zb3VyY2VDb2x1bW4sbT0hMH1yZXR1cm4gZj1lLnNvdXJjZUZpbGVzP2Uuc291cmNlRmlsZXM6ZS5maWxlbmFtZT9bZS5maWxlbmFtZV06WyI8YW5vbnltb3VzPiJdLHk9e3ZlcnNpb246MyxmaWxlOmUuZ2VuZXJhdGVkRmlsZXx8IiIsc291cmNlUm9vdDplLnNvdXJjZVJvb3R8fCIiLHNvdXJjZXM6ZixuYW1lczpbXSxtYXBwaW5nczp0fSwoZS5zb3VyY2VNYXB8fGUuaW5saW5lTWFwKSYmKHkuc291cmNlc0NvbnRlbnQ9W2FdKSx5fX0se2tleToiZW5jb2RlVmxxIix2YWx1ZTpmdW5jdGlvbiBlbmNvZGVWbHEoZSl7dmFyIGEsdCxsLHM7Zm9yKGE9IiIsbD0wPmU/MTowLHM9KF9NYXRoYWJzKGUpPDwxKStsO3N8fCFhOyl0PXMmcixzPj49bixzJiYodHw9byksYSs9dGhpcy5lbmNvZGVCYXNlNjQodCk7cmV0dXJuIGF9fSx7a2V5OiJlbmNvZGVCYXNlNjQiLHZhbHVlOmZ1bmN0aW9uIGVuY29kZUJhc2U2NChlKXtyZXR1cm4gdFtlXXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBCYXNlNjQgZW5jb2RlIHZhbHVlOiAiK2UpfSgpfX1dKSxlfSgpLHQsbyxuLHI7cmV0dXJuIG49NSxvPTE8PG4scj1vLTEsdD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsZX0uY2FsbCh0aGlzKSxlLmV4cG9ydHM9dH0uY2FsbCh0aGlzKSxlLmV4cG9ydHN9KCkscmVxdWlyZVsiLi9jb2ZmZWVzY3JpcHQiXT1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVtdLmluZGV4T2YsdD1yZXF1aXJlKCIuL2xleGVyIiksbyxuLHIsbCxzLGQsYyxpLHAsdSxtLGgsZyxmLHk7bj10LkxleGVyO3ZhciBrPXJlcXVpcmUoIi4vcGFyc2VyIik7aD1rLnBhcnNlcixwPXJlcXVpcmUoIi4vaGVscGVycyIpLHI9cmVxdWlyZSgiLi9zb3VyY2VtYXAiKSxtPXJlcXVpcmUoIi4uLy4uL3BhY2thZ2UuanNvbiIpLGUuVkVSU0lPTj1tLnZlcnNpb24sZS5GSUxFX0VYVEVOU0lPTlM9bz1bIi5jb2ZmZWUiLCIubGl0Y29mZmVlIiwiLmNvZmZlZS5tZCJdLGUuaGVscGVycz1wLGw9ZnVuY3Rpb24oZSl7c3dpdGNoKCExKXtjYXNlImZ1bmN0aW9uIiE9dHlwZW9mIEJ1ZmZlcjpyZXR1cm4gQnVmZmVyLmZyb20oZSkudG9TdHJpbmcoImJhc2U2NCIpO2Nhc2UiZnVuY3Rpb24iIT10eXBlb2YgYnRvYTpyZXR1cm4gYnRvYShlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxmdW5jdGlvbihlLGEpe3JldHVybiBfU3RyaW5nZnJvbUNoYXJDb2RlKCIweCIrYSl9KSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIGlubGluZSBzb3VyY2VtYXAuIil9fSx5PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihhKXt2YXIgdD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbzt0cnl7cmV0dXJuIGUuY2FsbCh0aGlzLGEsdCl9Y2F0Y2goZSl7aWYobz1lLCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBvO3Rocm93IHAudXBkYXRlU3ludGF4RXJyb3IobyxhLHQuZmlsZW5hbWUpfX19LGY9e30sZz17fSxlLmNvbXBpbGU9ZD15KGZ1bmN0aW9uKGUpe3ZhciBhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSx0LG8sbixkLGMsbSx5LGssVCxpLE4sdixiLCQsXyxDLEQsRSx4LEksUyxBLFIsTyxMO2lmKGE9T2JqZWN0LmFzc2lnbih7fSxhKSx5PWEuc291cmNlTWFwfHxhLmlubGluZU1hcHx8bnVsbD09YS5maWxlbmFtZSxkPWEuZmlsZW5hbWV8fCI8YW5vbnltb3VzPiIscyhkLGUpLG51bGw9PWZbZF0mJihmW2RdPVtdKSxmW2RdLnB1c2goZSkseSYmKCQ9bmV3IHIpLFM9dS50b2tlbml6ZShlLGEpLGEucmVmZXJlbmNlZFZhcnM9ZnVuY3Rpb24oKXt2YXIgZSxhLHQ7Zm9yKHQ9W10sZT0wLGE9Uy5sZW5ndGg7ZTxhO2UrKylJPVNbZV0sIklERU5USUZJRVIiPT09SVswXSYmdC5wdXNoKElbMV0pO3JldHVybiB0fSgpLG51bGw9PWEuYmFyZXx8ITAhPT1hLmJhcmUpZm9yKFQ9MCx2PVMubGVuZ3RoO1Q8djtUKyspaWYoST1TW1RdLCJJTVBPUlQiPT09KEM9SVswXSl8fCJFWFBPUlQiPT09Qyl7YS5iYXJlPSEwO2JyZWFrfWZvcihtPWgucGFyc2UoUykuY29tcGlsZVRvRnJhZ21lbnRzKGEpLG89MCxhLmhlYWRlciYmKG8rPTEpLGEuc2hpZnRMaW5lJiYobys9MSksdD0wLE49IiIsaT0wLGI9bS5sZW5ndGg7aTxiO2krKyljPW1baV0seSYmKGMubG9jYXRpb25EYXRhJiYhL15bO1xzXSokLy50ZXN0KGMuY29kZSkmJiQuYWRkKFtjLmxvY2F0aW9uRGF0YS5maXJzdF9saW5lLGMubG9jYXRpb25EYXRhLmZpcnN0X2NvbHVtbl0sW28sdF0se25vUmVwbGFjZTohMH0pLF89cC5jb3VudChjLmNvZGUsIlxuIiksbys9XyxfP3Q9Yy5jb2RlLmxlbmd0aC0oYy5jb2RlLmxhc3RJbmRleE9mKCJcbiIpKzEpOnQrPWMuY29kZS5sZW5ndGgpLE4rPWMuY29kZTtpZihhLmhlYWRlciYmKGs9IkdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgIit0aGlzLlZFUlNJT04sTj0iLy8gIitrKyJcbiIrTikseSYmKEw9JC5nZW5lcmF0ZShhLGUpLG51bGw9PWdbZF0mJihnW2RdPVtdKSxnW2RdLnB1c2goJCkpLGEudHJhbnNwaWxlKXtpZigib2JqZWN0IiE9PV90eXBlb2YoYS50cmFuc3BpbGUpKXRocm93IG5ldyBFcnJvcigiVGhlIHRyYW5zcGlsZSBvcHRpb24gbXVzdCBiZSBnaXZlbiBhbiBvYmplY3Qgd2l0aCBvcHRpb25zIHRvIHBhc3MgdG8gQmFiZWwiKTtBPWEudHJhbnNwaWxlLnRyYW5zcGlsZSxkZWxldGUgYS50cmFuc3BpbGUudHJhbnNwaWxlLFI9T2JqZWN0LmFzc2lnbih7fSxhLnRyYW5zcGlsZSksTCYmbnVsbD09Ui5pbnB1dFNvdXJjZU1hcCYmKFIuaW5wdXRTb3VyY2VNYXA9TCksTz1BKE4sUiksTj1PLmNvZGUsTCYmTy5tYXAmJihMPU8ubWFwKX1yZXR1cm4gYS5pbmxpbmVNYXAmJihuPWwoSlNPTi5zdHJpbmdpZnkoTCkpLEU9Ii8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsIituLHg9Ii8vIyBzb3VyY2VVUkw9IisobnVsbD09KEQ9YS5maWxlbmFtZSk/ImNvZmZlZXNjcmlwdCI6RCksTj1OKyJcbiIrRSsiXG4iK3gpLGEuc291cmNlTWFwP3tqczpOLHNvdXJjZU1hcDokLHYzU291cmNlTWFwOkpTT04uc3RyaW5naWZ5KEwsbnVsbCwyKX06Tn0pLGUudG9rZW5zPXkoZnVuY3Rpb24oZSxhKXtyZXR1cm4gdS50b2tlbml6ZShlLGEpfSksZS5ub2Rlcz15KGZ1bmN0aW9uKGUsYSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2gucGFyc2UodS50b2tlbml6ZShlLGEpKTpoLnBhcnNlKGUpfSksZS5ydW49ZS5ldmFsPWUucmVnaXN0ZXI9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInJlcXVpcmUgaW5kZXguY29mZmVlLCBub3QgdGhpcyBmaWxlIil9LHU9bmV3IG4saC5sZXhlcj17bGV4OmZ1bmN0aW9uIGxleCgpe3ZhciBlLGE7aWYoYT1oLnRva2Vuc1t0aGlzLnBvcysrXSxhKXt2YXIgdD1hLG89X3NsaWNlZFRvQXJyYXkodCwzKTtlPW9bMF0sdGhpcy55eXRleHQ9b1sxXSx0aGlzLnl5bGxvYz1vWzJdLGguZXJyb3JUb2tlbj1hLm9yaWdpbnx8YSx0aGlzLnl5bGluZW5vPXRoaXMueXlsbG9jLmZpcnN0X2xpbmV9ZWxzZSBlPSIiO3JldHVybiBlfSxzZXRJbnB1dDpmdW5jdGlvbiBzZXRJbnB1dChlKXtyZXR1cm4gaC50b2tlbnM9ZSx0aGlzLnBvcz0wfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uIHVwY29taW5nSW5wdXQoKXtyZXR1cm4iIn19LGgueXk9cmVxdWlyZSgiLi9ub2RlcyIpLGgueXkucGFyc2VFcnJvcj1mdW5jdGlvbihlLGEpe3ZhciB0PWEudG9rZW4sbz1oLG4scixsLHMsaTtzPW8uZXJyb3JUb2tlbixpPW8udG9rZW5zO3ZhciBkPXMsYz1fc2xpY2VkVG9BcnJheShkLDMpO3JldHVybiByPWNbMF0sbD1jWzFdLG49Y1syXSxsPWZ1bmN0aW9uKCl7c3dpdGNoKCExKXtjYXNlIHMhPT1pW2kubGVuZ3RoLTFdOnJldHVybiJlbmQgb2YgaW5wdXQiO2Nhc2UiSU5ERU5UIiE9PXImJiJPVVRERU5UIiE9PXI6cmV0dXJuImluZGVudGF0aW9uIjtjYXNlIklERU5USUZJRVIiIT09ciYmIk5VTUJFUiIhPT1yJiYiSU5GSU5JVFkiIT09ciYmIlNUUklORyIhPT1yJiYiU1RSSU5HX1NUQVJUIiE9PXImJiJSRUdFWCIhPT1yJiYiUkVHRVhfU1RBUlQiIT09cjpyZXR1cm4gci5yZXBsYWNlKC9fU1RBUlQkLywiIikudG9Mb3dlckNhc2UoKTtkZWZhdWx0OnJldHVybiBwLm5hbWVXaGl0ZXNwYWNlQ2hhcmFjdGVyKGwpfX0oKSxwLnRocm93U3ludGF4RXJyb3IoInVuZXhwZWN0ZWQgIitsLG4pfSxjPWZ1bmN0aW9uKGUsYSl7dmFyIHQsbyxuLHIsbCxzLGksZCxjLHAsdSxtO3JldHVybiByPXZvaWQgMCxuPSIiLGUuaXNOYXRpdmUoKT9uPSJuYXRpdmUiOihlLmlzRXZhbCgpPyhyPWUuZ2V0U2NyaXB0TmFtZU9yU291cmNlVVJMKCksIXImJihuPWUuZ2V0RXZhbE9yaWdpbigpKyIsICIpKTpyPWUuZ2V0RmlsZU5hbWUoKSxyfHwocj0iPGFub255bW91cz4iKSxkPWUuZ2V0TGluZU51bWJlcigpLG89ZS5nZXRDb2x1bW5OdW1iZXIoKSxwPWEocixkLG8pLG49cD9yKyI6IitwWzBdKyI6IitwWzFdOnIrIjoiK2QrIjoiK28pLGw9ZS5nZXRGdW5jdGlvbk5hbWUoKSxzPWUuaXNDb25zdHJ1Y3RvcigpLGk9IShlLmlzVG9wbGV2ZWwoKXx8cyksaT8oYz1lLmdldE1ldGhvZE5hbWUoKSxtPWUuZ2V0VHlwZU5hbWUoKSxsPyh1PXQ9IiIsbSYmbC5pbmRleE9mKG0pJiYodT1tKyIuIiksYyYmbC5pbmRleE9mKCIuIitjKSE9PWwubGVuZ3RoLWMubGVuZ3RoLTEmJih0PSIgW2FzICIrYysiXSIpLCIiK3UrbCt0KyIgKCIrbisiKSIpOm0rIi4iKyhjfHwiPGFub255bW91cz4iKSsiICgiK24rIikiKTpzPyJuZXcgIisobHx8Ijxhbm9ueW1vdXM+IikrIiAoIituKyIpIjpsP2wrIiAoIituKyIpIjpufSxpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixsLHMsaSxjLHU7aWYoISgiPGFub255bW91cz4iPT09ZXx8KGk9ZS5zbGljZShlLmxhc3RJbmRleE9mKCIuIikpLDA8PWEuY2FsbChvLGkpKSkpcmV0dXJuIG51bGw7aWYoIjxhbm9ueW1vdXM+IiE9PWUmJm51bGwhPWdbZV0pcmV0dXJuIGdbZV1bZ1tlXS5sZW5ndGgtMV07aWYobnVsbCE9Z1siPGFub255bW91cz4iXSlmb3IoYz1nWyI8YW5vbnltb3VzPiJdLGw9Yy5sZW5ndGgtMTswPD1sO2wrPS0xKWlmKHM9Y1tsXSx1PXMuc291cmNlTG9jYXRpb24oW3QtMSxuLTFdKSxudWxsIT0obnVsbD09dT92b2lkIDA6dVswXSkmJm51bGwhPXVbMV0pcmV0dXJuIHM7cmV0dXJuIG51bGw9PWZbZV0/bnVsbDoocj1kKGZbZV1bZltlXS5sZW5ndGgtMV0se2ZpbGVuYW1lOmUsc291cmNlTWFwOiEwLGxpdGVyYXRlOnAuaXNMaXRlcmF0ZShlKX0pLHIuc291cmNlTWFwKX0sRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9ZnVuY3Rpb24oYSx0KXt2YXIgbyxuLHI7cmV0dXJuIHI9ZnVuY3Rpb24oZSxhLHQpe3ZhciBvLG47cmV0dXJuIG49aShlLGEsdCksbnVsbCE9biYmKG89bi5zb3VyY2VMb2NhdGlvbihbYS0xLHQtMV0pKSxudWxsPT1vP251bGw6W29bMF0rMSxvWzFdKzFdfSxuPWZ1bmN0aW9uKCl7dmFyIGEsbixsO2ZvcihsPVtdLGE9MCxuPXQubGVuZ3RoO2E8biYmKG89dFthXSxvLmdldEZ1bmN0aW9uKCkhPT1lLnJ1bik7YSsrKWwucHVzaCgiICAgIGF0ICIrYyhvLHIpKTtyZXR1cm4gbH0oKSxhLnRvU3RyaW5nKCkrIlxuIituLmpvaW4oIlxuIikrIlxuIn0scz1mdW5jdGlvbihlLGEpe3ZhciB0LG8sbixyO2lmKG89YS5zcGxpdCgvJC9tKVswXSxyPW51bGw9PW8/dm9pZCAwOm8ubWF0Y2goL14jIVxzKihbXlxzXStccyopKC4qKS8pLHQ9bnVsbD09cnx8bnVsbD09KG49clsyXSk/dm9pZCAwOm4uc3BsaXQoL1xzLykuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiIiIT09ZX0pLDE8KG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIHNjcmlwdCB0byBiZSBydW4gYmVnaW5zIHdpdGggYSBzaGViYW5nIGxpbmUgd2l0aCBtb3JlIHRoYW4gb25lXG5hcmd1bWVudC4gVGhpcyBzY3JpcHQgd2lsbCBmYWlsIG9uIHBsYXRmb3JtcyBzdWNoIGFzIExpbnV4IHdoaWNoIG9ubHlcbmFsbG93IGEgc2luZ2xlIGFyZ3VtZW50LiIpLGNvbnNvbGUuZXJyb3IoIlRoZSBzaGViYW5nIGxpbmUgd2FzOiAnIitvKyInIGluIGZpbGUgJyIrZSsiJyIpLGNvbnNvbGUuZXJyb3IoIlRoZSBhcmd1bWVudHMgd2VyZTogIitKU09OLnN0cmluZ2lmeSh0KSl9fS5jYWxsKHRoaXMpLHtleHBvcnRzOmV9LmV4cG9ydHN9KCkscmVxdWlyZVsiLi9icm93c2VyIl09ZnVuY3Rpb24oKXt2YXIgZXhwb3J0cz17fSxtb2R1bGU9e2V4cG9ydHM6ZXhwb3J0c307cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGluZGV4T2Y9W10uaW5kZXhPZixDb2ZmZWVTY3JpcHQsY29tcGlsZSxydW5TY3JpcHRzO0NvZmZlZVNjcmlwdD1yZXF1aXJlKCIuL2NvZmZlZXNjcmlwdCIpLGNvbXBpbGU9Q29mZmVlU2NyaXB0LmNvbXBpbGUsQ29mZmVlU2NyaXB0LmV2YWw9ZnVuY3Rpb24oY29kZSl7dmFyIG9wdGlvbnM9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybiBudWxsPT1vcHRpb25zLmJhcmUmJihvcHRpb25zLmJhcmU9ITApLGV2YWwoY29tcGlsZShjb2RlLG9wdGlvbnMpKX0sQ29mZmVlU2NyaXB0LnJ1bj1mdW5jdGlvbihlKXt2YXIgYT0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuIGEuYmFyZT0hMCxhLnNoaWZ0TGluZT0hMCxGdW5jdGlvbihjb21waWxlKGUsYSkpKCl9LG1vZHVsZS5leHBvcnRzPUNvZmZlZVNjcmlwdCwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8bnVsbD09PXdpbmRvd3x8KCJ1bmRlZmluZWQiIT10eXBlb2YgYnRvYSYmbnVsbCE9PWJ0b2EmJiJ1bmRlZmluZWQiIT10eXBlb2YgSlNPTiYmbnVsbCE9PUpTT04mJihjb21waWxlPWZ1bmN0aW9uKGUpe3ZhciBhPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4gYS5pbmxpbmVNYXA9ITAsQ29mZmVlU2NyaXB0LmNvbXBpbGUoZSxhKX0pLENvZmZlZVNjcmlwdC5sb2FkPWZ1bmN0aW9uKGUsYSl7dmFyIHQ9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG89ISEoMzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pJiZhcmd1bWVudHNbM10sbjtyZXR1cm4gdC5zb3VyY2VGaWxlcz1bZV0sbj13aW5kb3cuQWN0aXZlWE9iamVjdD9uZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik6bmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCxuLm9wZW4oIkdFVCIsZSwhMCksIm92ZXJyaWRlTWltZVR5cGUiaW4gbiYmbi5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluIiksbi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgcixsO2lmKDQ9PT1uLnJlYWR5U3RhdGUpe2lmKDAhPT0obD1uLnN0YXR1cykmJjIwMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAiK2UpO2Vsc2UgaWYocj1bbi5yZXNwb25zZVRleHQsdF0sIW8pe3ZhciBzOyhzPUNvZmZlZVNjcmlwdCkucnVuLmFwcGx5KHMsX3RvQ29uc3VtYWJsZUFycmF5KHIpKX1pZihhKXJldHVybiBhKHIpfX0sbi5zZW5kKG51bGwpfSxydW5TY3JpcHRzPWZ1bmN0aW9uKCl7dmFyIGUsYSx0LG8sbixyLGwsaSxzLGQ7Zm9yKGQ9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxhPVsidGV4dC9jb2ZmZWVzY3JpcHQiLCJ0ZXh0L2xpdGVyYXRlLWNvZmZlZXNjcmlwdCJdLGU9ZnVuY3Rpb24oKXt2YXIgZSx0LG8sbjtmb3Iobj1bXSxlPTAsdD1kLmxlbmd0aDtlPHQ7ZSsrKWk9ZFtlXSwobz1pLnR5cGUsMDw9aW5kZXhPZi5jYWxsKGEsbykpJiZuLnB1c2goaSk7cmV0dXJuIG59KCksbj0wLHQ9ZnVuY3Rpb24gZXhlY3V0ZSgpe3ZhciBhO2lmKGE9ZVtuXSxhIGluc3RhbmNlb2YgQXJyYXkpe3ZhciBvO3JldHVybihvPUNvZmZlZVNjcmlwdCkucnVuLmFwcGx5KG8sX3RvQ29uc3VtYWJsZUFycmF5KGEpKSxuKyssdCgpfX0sbz1yPTAsbD1lLmxlbmd0aDtyPGw7bz0rK3Ipcz1lW29dLGZ1bmN0aW9uKG8sbil7dmFyIHIsbDtyZXR1cm4gcj17bGl0ZXJhdGU6by50eXBlPT09YVsxXX0sbD1vLnNyY3x8by5nZXRBdHRyaWJ1dGUoImRhdGEtc3JjIiksbD8oci5maWxlbmFtZT1sLENvZmZlZVNjcmlwdC5sb2FkKGwsZnVuY3Rpb24oYSl7cmV0dXJuIGVbbl09YSx0KCl9LHIsITApKTooci5maWxlbmFtZT1vLmlkJiYiIiE9PW8uaWQ/by5pZDoiY29mZmVlc2NyaXB0IisoMD09PW4/IiI6biksci5zb3VyY2VGaWxlcz1bImVtYmVkZGVkIl0sZVtuXT1bby5pbm5lckhUTUwscl0pfShzLG8pO3JldHVybiB0KCl9LHdpbmRvdy5hZGRFdmVudExpc3RlbmVyP3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixydW5TY3JpcHRzLCExKTp3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIscnVuU2NyaXB0cykpfS5jYWxsKHRoaXMpLG1vZHVsZS5leHBvcnRzfSgpLHJlcXVpcmVbIi4vYnJvd3NlciJdfSgpOyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGZ1bmN0aW9uKCl7cmV0dXJuIENvZmZlZVNjcmlwdH0pOnJvb3QuQ29mZmVlU2NyaXB0PUNvZmZlZVNjcmlwdH0pKHRoaXMpOwp9KTsKCmRlZmluZSgiYWNlL21vZGUvY29mZmVlX3dvcmtlciIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgTWlycm9yID0gcmVxdWlyZSgiLi4vd29ya2VyL21pcnJvciIpLk1pcnJvcjsKdmFyIGNvZmZlZSA9IHJlcXVpcmUoIi4uL21vZGUvY29mZmVlL2NvZmZlZSIpOwoKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbigpIHt9OwoKCnZhciBXb3JrZXIgPSBleHBvcnRzLldvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgewogICAgTWlycm9yLmNhbGwodGhpcywgc2VuZGVyKTsKICAgIHRoaXMuc2V0VGltZW91dCgyNTApOwp9OwoKb29wLmluaGVyaXRzKFdvcmtlciwgTWlycm9yKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKICAgICAgICB2YXIgZXJyb3JzID0gW107CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29mZmVlLmNvbXBpbGUodmFsdWUpOwogICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICB2YXIgbG9jID0gZS5sb2NhdGlvbjsKICAgICAgICAgICAgaWYgKGxvYykgewogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgICAgIHJvdzogbG9jLmZpcnN0X2xpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsb2MuZmlyc3RfY29sdW1uLAogICAgICAgICAgICAgICAgICAgIGVuZFJvdzogbG9jLmxhc3RfbGluZSwKICAgICAgICAgICAgICAgICAgICBlbmRDb2x1bW46IGxvYy5sYXN0X2NvbHVtbiwKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlLm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLCBlcnJvcnMpOwogICAgfTsKCn0pLmNhbGwoV29ya2VyLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL2xpYi9lczUtc2hpbSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZnVuY3Rpb24gRW1wdHkoKSB7fQoKaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgewogICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsCiAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewoKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGF0LAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgICAgaWYodGFyZ2V0LnByb3RvdHlwZSkgewogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOwogICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJvdW5kOwogICAgfTsKfQp2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKdmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKdmFyIHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5zbGljZTsKdmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7CnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKdmFyIGRlZmluZUdldHRlcjsKdmFyIGRlZmluZVNldHRlcjsKdmFyIGxvb2t1cEdldHRlcjsKdmFyIGxvb2t1cFNldHRlcjsKdmFyIHN1cHBvcnRzQWNjZXNzb3JzOwppZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTsKICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRlcl9fKTsKICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKfQppZiAoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCAhPSAyKSB7CiAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4CiAgICAgICAgZnVuY3Rpb24gbWFrZUFycmF5KGwpIHsKICAgICAgICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobCsyKTsKICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwOwogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9CiAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTsKICAgICAgICAKICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksIG1ha2VBcnJheSgyMCkpOwogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7CgogICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxlbmd0aDsgLy80NgogICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCAiWFhYIik7IC8vIGFkZCBvbmUgZWxlbWVudAoKICAgICAgICBsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aAoKICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7Ly8gaGFzIHJpZ2h0IHNwbGljZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGJ1Z3MKICAgICAgICB9CiAgICB9KCkpIHsvL0lFIDYvNwogICAgICAgIHZhciBhcnJheV9zcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOwogICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIFsKICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0LAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2b2lkIDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVDb3VudAogICAgICAgICAgICAgICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSkKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2Ugey8vSUU4CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHBvcywgcmVtb3ZlQ291bnQpewogICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7CiAgICAgICAgICAgICAgICBpZiAocG9zID4gbGVuZ3RoKQogICAgICAgICAgICAgICAgICAgIHBvcyA9IGxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICBwb3MgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpCiAgICAgICAgICAgICAgICByZW1vdmVDb3VudCA9IGxlbmd0aCAtIHBvczsKCiAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7CiAgICAgICAgICAgIHZhciBpbnNlcnQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgICAgICAgIHZhciBhZGQgPSBpbnNlcnQubGVuZ3RoOyAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBNYXRoLm1pbihyZW1vdmVDb3VudCwgbGVuZ3RoIC0gcG9zKTsKICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9zICsgcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxOZXdQb3MgPSB0YWlsT2xkUG9zICsgYWRkIC0gcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxDb3VudCA9IGxlbmd0aCAtIHRhaWxPbGRQb3M7CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5ndGggLSByZW1vdmU7CgogICAgICAgICAgICAgICAgaWYgKHRhaWxOZXdQb3MgPCB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbENvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBCCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gdGFpbENvdW50OyBpLS07ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBlbHNlLCBhZGQgPT0gcmVtb3ZlIChub3RoaW5nIHRvIGRvKQoKICAgICAgICAgICAgICAgIGlmIChhZGQgJiYgcG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmU7IC8vIHRydW5jYXRlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmUgKyBhZGQ7IC8vIHJlc2VydmVzIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ldID0gaW5zZXJ0W2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICAgICB9OwogICAgfQp9CmlmICghQXJyYXkuaXNBcnJheSkgewogICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CiAgICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CiAgICB9Owp9CnZhciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAogICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVkU3RyaW5nKTsKCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwKICAgICAgICAgICAgaSA9IC0xLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7CiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsKICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgcmVzdWx0ID0gW10sCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOwogICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgewogICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewogICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7CiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIHJlc3VsdDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICAgICB9CgogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChpLS0pOwoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mIHx8IChbMCwgMV0uaW5kZXhPZigxLCAyKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CgogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOwogICAgICAgIH0KICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOwogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7CiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7CiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoCiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/CiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgOgogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdAogICAgICAgICk7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgewogICAgdmFyIEVSUl9OT05fT0JKRUNUID0gIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLW9iamVjdDogIjsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7CiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsKICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CiAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CgogICAgICAgICAgICB2YXIgZ2V0dGVyID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwoKICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChnZXR0ZXIpIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOwogICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3JpcHRvci5zZXQgPSBzZXR0ZXI7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgewogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgewogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgfTsKfQppZiAoIU9iamVjdC5jcmVhdGUpIHsKICAgIHZhciBjcmVhdGVFbXB0eTsKICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbCkgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVsbCB9OwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZW1wdHkgPSB7fTsKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBlbXB0eSkKICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDsKICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0b3IgPQogICAgICAgICAgICBlbXB0eS5oYXNPd25Qcm9wZXJ0eSA9CiAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID0KICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVPZiA9CiAgICAgICAgICAgIGVtcHR5LnRvTG9jYWxlU3RyaW5nID0KICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPQogICAgICAgICAgICBlbXB0eS52YWx1ZU9mID0KICAgICAgICAgICAgZW1wdHkuX19wcm90b19fID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5OwogICAgICAgIH0KICAgIH0KCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgewogICAgICAgIHZhciBvYmplY3Q7CiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOwogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQoKZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRpbmVsIiwge30pOwogICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgfQp9CmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsKICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICAgIH0KfQoKaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgogICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOwoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHsKICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKICAgICAgICBpZiAoKHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9ICJmdW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOwogICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CgogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJnZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgewogICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5zZWFsKSB7CiAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuZnJlZXplKSB7CiAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CnRyeSB7CiAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0pKE9iamVjdC5mcmVlemUpOwp9CmlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5pc1NlYWxlZCkgewogICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0Zyb3plbikgewogICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsKICAgIE9iamVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKICAgICAgICB9CiAgICAgICAgdmFyIG5hbWUgPSAnJzsKICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7CiAgICAgICAgICAgIG5hbWUgKz0gJz8nOwogICAgICAgIH0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOwogICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1lKTsKICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOwogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH07Cn0KaWYgKCFPYmplY3Qua2V5cykgewogICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKICAgICAgICBkb250RW51bXMgPSBbCiAgICAgICAgICAgICJ0b1N0cmluZyIsCiAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCiAgICAgICAgICAgICJ2YWx1ZU9mIiwKICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwKICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAogICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiLAogICAgICAgICAgICAiY29uc3RydWN0b3IiCiAgICAgICAgXSwKICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOwoKICAgIGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOwogICAgfQoKICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8CiAgICAgICAgICAgIG9iamVjdCA9PT0gbnVsbAogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIga2V5cyA9IFtdOwogICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7CiAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRvbnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsKICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9udEVudW0pKSB7CiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRFbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ga2V5czsKICAgIH07Cgp9CmlmICghRGF0ZS5ub3cpIHsKICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIH07Cn0KdmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKICAgICJcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgiICsKICAgICJcdTIwMjlcdUZFRkYiOwppZiAoIVN0cmluZy5wcm90b3R5cGUudHJpbSkgewogICAgd3MgPSAiWyIgKyB3cyArICJdIjsKICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAogICAgICAgIHRyaW1FbmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgIiIpOwogICAgfTsKfQoKZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKICAgIG4gPSArbjsKICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFOCiAgICAgICAgbiA9IDA7CiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CiAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTsKICAgIH0KICAgIHJldHVybiBuOwp9CgpmdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5wdXQ7CiAgICByZXR1cm4gKAogICAgICAgIGlucHV0ID09PSBudWxsIHx8CiAgICAgICAgdHlwZSA9PT0gInVuZGVmaW5lZCIgfHwKICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKICAgICAgICB0eXBlID09PSAibnVtYmVyIiB8fAogICAgICAgIHR5cGUgPT09ICJzdHJpbmciCiAgICApOwp9CgpmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHZhbCwgdmFsdWVPZiwgdG9TdHJpbmc7CiAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7CiAgICBpZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB2YWx1ZU9mLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZzsKICAgIGlmICh0eXBlb2YgdG9TdHJpbmcgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB0b1N0cmluZy5jYWxsKGlucHV0KTsKICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKfQp2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgewogICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOwogICAgfQogICAgcmV0dXJuIE9iamVjdChvKTsKfTsKCn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2Nzcy9jc3NsaW50IixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CnZhciBwYXJzZXJsaWIgPSB7fTsKKGZ1bmN0aW9uKCl7CmZ1bmN0aW9uIEV2ZW50VGFyZ2V0KCl7CiAgICB0aGlzLl9saXN0ZW5lcnMgPSB7fTsKfQoKRXZlbnRUYXJnZXQucHJvdG90eXBlID0gewogICAgY29uc3RydWN0b3I6IEV2ZW50VGFyZ2V0LAogICAgYWRkTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKXsKICAgICAgICBpZiAoIXRoaXMuX2xpc3RlbmVyc1t0eXBlXSl7CiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyc1t0eXBlXSA9IFtdOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW3R5cGVdLnB1c2gobGlzdGVuZXIpOwogICAgfSwKICAgIGZpcmU6IGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09ICJzdHJpbmciKXsKICAgICAgICAgICAgZXZlbnQgPSB7IHR5cGU6IGV2ZW50IH07CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgZXZlbnQudGFyZ2V0ICE9ICJ1bmRlZmluZWQiKXsKICAgICAgICAgICAgZXZlbnQudGFyZ2V0ID0gdGhpczsKICAgICAgICB9CgogICAgICAgIGlmICh0eXBlb2YgZXZlbnQudHlwZSA9PSAidW5kZWZpbmVkIil7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiRXZlbnQgb2JqZWN0IG1pc3NpbmcgJ3R5cGUnIHByb3BlcnR5LiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX2xpc3RlbmVyc1tldmVudC50eXBlXSl7CiAgICAgICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnNbZXZlbnQudHlwZV0uY29uY2F0KCk7CiAgICAgICAgICAgIGZvciAodmFyIGk9MCwgbGVuPWxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgICAgICAgICBsaXN0ZW5lcnNbaV0uY2FsbCh0aGlzLCBldmVudCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgcmVtb3ZlTGlzdGVuZXI6IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKXsKICAgICAgICBpZiAodGhpcy5fbGlzdGVuZXJzW3R5cGVdKXsKICAgICAgICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2xpc3RlbmVyc1t0eXBlXTsKICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsZW49bGlzdGVuZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsKICAgICAgICAgICAgICAgIGlmIChsaXN0ZW5lcnNbaV0gPT09IGxpc3RlbmVyKXsKICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKICAgICAgICB9CiAgICB9Cn07CmZ1bmN0aW9uIFN0cmluZ1JlYWRlcih0ZXh0KXsKICAgIHRoaXMuX2lucHV0ID0gdGV4dC5yZXBsYWNlKC9cblxyPy9nLCAiXG4iKTsKICAgIHRoaXMuX2xpbmUgPSAxOwogICAgdGhpcy5fY29sID0gMTsKICAgIHRoaXMuX2N1cnNvciA9IDA7Cn0KClN0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7CiAgICBjb25zdHJ1Y3RvcjogU3RyaW5nUmVhZGVyLAogICAgZ2V0Q29sOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLl9jb2w7CiAgICB9LAogICAgZ2V0TGluZTogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5fbGluZSA7CiAgICB9LAogICAgZW9mOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiAodGhpcy5fY3Vyc29yID09IHRoaXMuX2lucHV0Lmxlbmd0aCk7CiAgICB9LAogICAgcGVlazogZnVuY3Rpb24oY291bnQpewogICAgICAgIHZhciBjID0gbnVsbDsKICAgICAgICBjb3VudCA9ICh0eXBlb2YgY291bnQgPT0gInVuZGVmaW5lZCIgPyAxIDogY291bnQpOwogICAgICAgIGlmICh0aGlzLl9jdXJzb3IgPCB0aGlzLl9pbnB1dC5sZW5ndGgpewogICAgICAgICAgICBjID0gdGhpcy5faW5wdXQuY2hhckF0KHRoaXMuX2N1cnNvciArIGNvdW50IC0gMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYzsKICAgIH0sCiAgICByZWFkOiBmdW5jdGlvbigpewogICAgICAgIHZhciBjID0gbnVsbDsKICAgICAgICBpZiAodGhpcy5fY3Vyc29yIDwgdGhpcy5faW5wdXQubGVuZ3RoKXsKICAgICAgICAgICAgaWYgKHRoaXMuX2lucHV0LmNoYXJBdCh0aGlzLl9jdXJzb3IpID09ICJcbiIpewogICAgICAgICAgICAgICAgdGhpcy5fbGluZSsrOwogICAgICAgICAgICAgICAgdGhpcy5fY29sPTE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9jb2wrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjID0gdGhpcy5faW5wdXQuY2hhckF0KHRoaXMuX2N1cnNvcisrKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjOwogICAgfSwKICAgIG1hcms6IGZ1bmN0aW9uKCl7CiAgICAgICAgdGhpcy5fYm9va21hcmsgPSB7CiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5fY3Vyc29yLAogICAgICAgICAgICBsaW5lOiAgIHRoaXMuX2xpbmUsCiAgICAgICAgICAgIGNvbDogICAgdGhpcy5fY29sCiAgICAgICAgfTsKICAgIH0sCgogICAgcmVzZXQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgaWYgKHRoaXMuX2Jvb2ttYXJrKXsKICAgICAgICAgICAgdGhpcy5fY3Vyc29yID0gdGhpcy5fYm9va21hcmsuY3Vyc29yOwogICAgICAgICAgICB0aGlzLl9saW5lID0gdGhpcy5fYm9va21hcmsubGluZTsKICAgICAgICAgICAgdGhpcy5fY29sID0gdGhpcy5fYm9va21hcmsuY29sOwogICAgICAgICAgICBkZWxldGUgdGhpcy5fYm9va21hcms7CiAgICAgICAgfQogICAgfSwKICAgIHJlYWRUbzogZnVuY3Rpb24ocGF0dGVybil7CgogICAgICAgIHZhciBidWZmZXIgPSAiIiwKICAgICAgICAgICAgYzsKICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCA8IHBhdHRlcm4ubGVuZ3RoIHx8IGJ1ZmZlci5sYXN0SW5kZXhPZihwYXR0ZXJuKSAhPSBidWZmZXIubGVuZ3RoIC0gcGF0dGVybi5sZW5ndGgpewogICAgICAgICAgICBjID0gdGhpcy5yZWFkKCk7CiAgICAgICAgICAgIGlmIChjKXsKICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBcIiIgKyBwYXR0ZXJuICsgIlwiIGF0IGxpbmUgIiArIHRoaXMuX2xpbmUgICsgIiwgY29sICIgKyB0aGlzLl9jb2wgKyAiLiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYnVmZmVyOwoKICAgIH0sCiAgICByZWFkV2hpbGU6IGZ1bmN0aW9uKGZpbHRlcil7CgogICAgICAgIHZhciBidWZmZXIgPSAiIiwKICAgICAgICAgICAgYyA9IHRoaXMucmVhZCgpOwoKICAgICAgICB3aGlsZShjICE9PSBudWxsICYmIGZpbHRlcihjKSl7CiAgICAgICAgICAgIGJ1ZmZlciArPSBjOwogICAgICAgICAgICBjID0gdGhpcy5yZWFkKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYnVmZmVyOwoKICAgIH0sCiAgICByZWFkTWF0Y2g6IGZ1bmN0aW9uKG1hdGNoZXIpewoKICAgICAgICB2YXIgc291cmNlID0gdGhpcy5faW5wdXQuc3Vic3RyaW5nKHRoaXMuX2N1cnNvciksCiAgICAgICAgICAgIHZhbHVlID0gbnVsbDsKICAgICAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT0gInN0cmluZyIpewogICAgICAgICAgICBpZiAoc291cmNlLmluZGV4T2YobWF0Y2hlcikgPT09IDApewogICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJlYWRDb3VudChtYXRjaGVyLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApewogICAgICAgICAgICBpZiAobWF0Y2hlci50ZXN0KHNvdXJjZSkpewogICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJlYWRDb3VudChSZWdFeHAubGFzdE1hdGNoLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0sCiAgICByZWFkQ291bnQ6IGZ1bmN0aW9uKGNvdW50KXsKICAgICAgICB2YXIgYnVmZmVyID0gIiI7CgogICAgICAgIHdoaWxlKGNvdW50LS0pewogICAgICAgICAgICBidWZmZXIgKz0gdGhpcy5yZWFkKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYnVmZmVyOwogICAgfQoKfTsKZnVuY3Rpb24gU3ludGF4RXJyb3IobWVzc2FnZSwgbGluZSwgY29sKXsKICAgIHRoaXMuY29sID0gY29sOwogICAgdGhpcy5saW5lID0gbGluZTsKICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cgp9ClN5bnRheEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpOwpmdW5jdGlvbiBTeW50YXhVbml0KHRleHQsIGxpbmUsIGNvbCwgdHlwZSl7CiAgICB0aGlzLmNvbCA9IGNvbDsKICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICB0aGlzLnRleHQgPSB0ZXh0OwogICAgdGhpcy50eXBlID0gdHlwZTsKfQpTeW50YXhVbml0LmZyb21Ub2tlbiA9IGZ1bmN0aW9uKHRva2VuKXsKICAgIHJldHVybiBuZXcgU3ludGF4VW5pdCh0b2tlbi52YWx1ZSwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7Cn07CgpTeW50YXhVbml0LnByb3RvdHlwZSA9IHsKICAgIGNvbnN0cnVjdG9yOiBTeW50YXhVbml0LAogICAgdmFsdWVPZjogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy50ZXh0OwogICAgfSwKICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLnRleHQ7CiAgICB9Cgp9OwpmdW5jdGlvbiBUb2tlblN0cmVhbUJhc2UoaW5wdXQsIHRva2VuRGF0YSl7CiAgICB0aGlzLl9yZWFkZXIgPSBpbnB1dCA/IG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQudG9TdHJpbmcoKSkgOiBudWxsOwogICAgdGhpcy5fdG9rZW4gPSBudWxsOwogICAgdGhpcy5fdG9rZW5EYXRhID0gdG9rZW5EYXRhOwogICAgdGhpcy5fbHQgPSBbXTsKICAgIHRoaXMuX2x0SW5kZXggPSAwOwoKICAgIHRoaXMuX2x0SW5kZXhDYWNoZSA9IFtdOwp9ClRva2VuU3RyZWFtQmFzZS5jcmVhdGVUb2tlbkRhdGEgPSBmdW5jdGlvbih0b2tlbnMpewoKICAgIHZhciBuYW1lTWFwICAgICA9IFtdLAogICAgICAgIHR5cGVNYXAgICAgID0ge30sCiAgICAgICAgdG9rZW5EYXRhICAgICA9IHRva2Vucy5jb25jYXQoW10pLAogICAgICAgIGkgICAgICAgICAgICA9IDAsCiAgICAgICAgbGVuICAgICAgICAgICAgPSB0b2tlbkRhdGEubGVuZ3RoKzE7CgogICAgdG9rZW5EYXRhLlVOS05PV04gPSAtMTsKICAgIHRva2VuRGF0YS51bnNoaWZ0KHtuYW1lOiJFT0YifSk7CgogICAgZm9yICg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgbmFtZU1hcC5wdXNoKHRva2VuRGF0YVtpXS5uYW1lKTsKICAgICAgICB0b2tlbkRhdGFbdG9rZW5EYXRhW2ldLm5hbWVdID0gaTsKICAgICAgICBpZiAodG9rZW5EYXRhW2ldLnRleHQpewogICAgICAgICAgICB0eXBlTWFwW3Rva2VuRGF0YVtpXS50ZXh0XSA9IGk7CiAgICAgICAgfQogICAgfQoKICAgIHRva2VuRGF0YS5uYW1lID0gZnVuY3Rpb24odHQpewogICAgICAgIHJldHVybiBuYW1lTWFwW3R0XTsKICAgIH07CgogICAgdG9rZW5EYXRhLnR5cGUgPSBmdW5jdGlvbihjKXsKICAgICAgICByZXR1cm4gdHlwZU1hcFtjXTsKICAgIH07CgogICAgcmV0dXJuIHRva2VuRGF0YTsKfTsKClRva2VuU3RyZWFtQmFzZS5wcm90b3R5cGUgPSB7CiAgICBjb25zdHJ1Y3RvcjogVG9rZW5TdHJlYW1CYXNlLAogICAgbWF0Y2g6IGZ1bmN0aW9uKHRva2VuVHlwZXMsIGNoYW5uZWwpewogICAgICAgIGlmICghKHRva2VuVHlwZXMgaW5zdGFuY2VvZiBBcnJheSkpewogICAgICAgICAgICB0b2tlblR5cGVzID0gW3Rva2VuVHlwZXNdOwogICAgICAgIH0KCiAgICAgICAgdmFyIHR0ICA9IHRoaXMuZ2V0KGNoYW5uZWwpLAogICAgICAgICAgICBpICAgPSAwLAogICAgICAgICAgICBsZW4gPSB0b2tlblR5cGVzLmxlbmd0aDsKCiAgICAgICAgd2hpbGUoaSA8IGxlbil7CiAgICAgICAgICAgIGlmICh0dCA9PSB0b2tlblR5cGVzW2krK10pewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy51bmdldCgpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICBtdXN0TWF0Y2g6IGZ1bmN0aW9uKHRva2VuVHlwZXMsIGNoYW5uZWwpewoKICAgICAgICB2YXIgdG9rZW47CiAgICAgICAgaWYgKCEodG9rZW5UeXBlcyBpbnN0YW5jZW9mIEFycmF5KSl7CiAgICAgICAgICAgIHRva2VuVHlwZXMgPSBbdG9rZW5UeXBlc107CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRoaXMubWF0Y2guYXBwbHkodGhpcywgYXJndW1lbnRzKSl7CiAgICAgICAgICAgIHRva2VuID0gdGhpcy5MVCgxKTsKICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJFeHBlY3RlZCAiICsgdGhpcy5fdG9rZW5EYXRhW3Rva2VuVHlwZXNbMF1dLm5hbWUgKwogICAgICAgICAgICAgICAgIiBhdCBsaW5lICIgKyB0b2tlbi5zdGFydExpbmUgKyAiLCBjb2wgIiArIHRva2VuLnN0YXJ0Q29sICsgIi4iLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsKICAgICAgICB9CiAgICB9LAogICAgYWR2YW5jZTogZnVuY3Rpb24odG9rZW5UeXBlcywgY2hhbm5lbCl7CgogICAgICAgIHdoaWxlKHRoaXMuTEEoMCkgIT09IDAgJiYgIXRoaXMubWF0Y2godG9rZW5UeXBlcywgY2hhbm5lbCkpewogICAgICAgICAgICB0aGlzLmdldCgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuTEEoMCk7CiAgICB9LAogICAgZ2V0OiBmdW5jdGlvbihjaGFubmVsKXsKCiAgICAgICAgdmFyIHRva2VuSW5mbyAgID0gdGhpcy5fdG9rZW5EYXRhLAogICAgICAgICAgICByZWFkZXIgICAgICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGkgICAgICAgICAgID0wLAogICAgICAgICAgICBsZW4gICAgICAgICA9IHRva2VuSW5mby5sZW5ndGgsCiAgICAgICAgICAgIGZvdW5kICAgICAgID0gZmFsc2UsCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBpbmZvOwogICAgICAgIGlmICh0aGlzLl9sdC5sZW5ndGggJiYgdGhpcy5fbHRJbmRleCA+PSAwICYmIHRoaXMuX2x0SW5kZXggPCB0aGlzLl9sdC5sZW5ndGgpewoKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRoaXMuX2x0W3RoaXMuX2x0SW5kZXgrK107CiAgICAgICAgICAgIGluZm8gPSB0b2tlbkluZm9bdGhpcy5fdG9rZW4udHlwZV07CiAgICAgICAgICAgIHdoaWxlKChpbmZvLmNoYW5uZWwgIT09IHVuZGVmaW5lZCAmJiBjaGFubmVsICE9PSBpbmZvLmNoYW5uZWwpICYmCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbHRJbmRleCA8IHRoaXMuX2x0Lmxlbmd0aCl7CiAgICAgICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRoaXMuX2x0W3RoaXMuX2x0SW5kZXgrK107CiAgICAgICAgICAgICAgICBpbmZvID0gdG9rZW5JbmZvW3RoaXMuX3Rva2VuLnR5cGVdOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoaW5mby5jaGFubmVsID09PSB1bmRlZmluZWQgfHwgY2hhbm5lbCA9PT0gaW5mby5jaGFubmVsKSAmJgogICAgICAgICAgICAgICAgICAgIHRoaXMuX2x0SW5kZXggPD0gdGhpcy5fbHQubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHRoaXMuX2x0SW5kZXhDYWNoZS5wdXNoKGkpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuLnR5cGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9rZW4gPSB0aGlzLl9nZXRUb2tlbigpOwogICAgICAgIGlmICh0b2tlbi50eXBlID4gLTEgJiYgIXRva2VuSW5mb1t0b2tlbi50eXBlXS5oaWRlKXsKICAgICAgICAgICAgdG9rZW4uY2hhbm5lbCA9IHRva2VuSW5mb1t0b2tlbi50eXBlXS5jaGFubmVsOwogICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRva2VuOwogICAgICAgICAgICB0aGlzLl9sdC5wdXNoKHRva2VuKTsKICAgICAgICAgICAgdGhpcy5fbHRJbmRleENhY2hlLnB1c2godGhpcy5fbHQubGVuZ3RoIC0gdGhpcy5fbHRJbmRleCArIGkpOwogICAgICAgICAgICBpZiAodGhpcy5fbHQubGVuZ3RoID4gNSl7CiAgICAgICAgICAgICAgICB0aGlzLl9sdC5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh0aGlzLl9sdEluZGV4Q2FjaGUubGVuZ3RoID4gNSl7CiAgICAgICAgICAgICAgICB0aGlzLl9sdEluZGV4Q2FjaGUuc2hpZnQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLl9sdEluZGV4ID0gdGhpcy5fbHQubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpbmZvID0gdG9rZW5JbmZvW3Rva2VuLnR5cGVdOwogICAgICAgIGlmIChpbmZvICYmCiAgICAgICAgICAgICAgICAoaW5mby5oaWRlIHx8CiAgICAgICAgICAgICAgICAoaW5mby5jaGFubmVsICE9PSB1bmRlZmluZWQgJiYgY2hhbm5lbCAhPT0gaW5mby5jaGFubmVsKSkpewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXQoY2hhbm5lbCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRva2VuLnR5cGU7CiAgICAgICAgfQogICAgfSwKICAgIExBOiBmdW5jdGlvbihpbmRleCl7CiAgICAgICAgdmFyIHRvdGFsID0gaW5kZXgsCiAgICAgICAgICAgIHR0OwogICAgICAgIGlmIChpbmRleCA+IDApewogICAgICAgICAgICBpZiAoaW5kZXggPiA1KXsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVG9vIG11Y2ggbG9va2FoZWFkLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHdoaWxlKHRvdGFsKXsKICAgICAgICAgICAgICAgIHR0ID0gdGhpcy5nZXQoKTsKICAgICAgICAgICAgICAgIHRvdGFsLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUodG90YWwgPCBpbmRleCl7CiAgICAgICAgICAgICAgICB0aGlzLnVuZ2V0KCk7CiAgICAgICAgICAgICAgICB0b3RhbCsrOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IDApewoKICAgICAgICAgICAgaWYodGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleF0pewogICAgICAgICAgICAgICAgdHQgPSB0aGlzLl9sdFt0aGlzLl9sdEluZGV4K2luZGV4XS50eXBlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUb28gbXVjaCBsb29rYmVoaW5kLiIpOwogICAgICAgICAgICB9CgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHR0ID0gdGhpcy5fdG9rZW4udHlwZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0dDsKCiAgICB9LAogICAgTFQ6IGZ1bmN0aW9uKGluZGV4KXsKICAgICAgICB0aGlzLkxBKGluZGV4KTsKICAgICAgICByZXR1cm4gdGhpcy5fbHRbdGhpcy5fbHRJbmRleCtpbmRleC0xXTsKICAgIH0sCiAgICBwZWVrOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLkxBKDEpOwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLl90b2tlbjsKICAgIH0sCiAgICB0b2tlbk5hbWU6IGZ1bmN0aW9uKHRva2VuVHlwZSl7CiAgICAgICAgaWYgKHRva2VuVHlwZSA8IDAgfHwgdG9rZW5UeXBlID4gdGhpcy5fdG9rZW5EYXRhLmxlbmd0aCl7CiAgICAgICAgICAgIHJldHVybiAiVU5LTk9XTl9UT0tFTiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuRGF0YVt0b2tlblR5cGVdLm5hbWU7CiAgICAgICAgfQogICAgfSwKICAgIHRva2VuVHlwZTogZnVuY3Rpb24odG9rZW5OYW1lKXsKICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5EYXRhW3Rva2VuTmFtZV0gfHwgLTE7CiAgICB9LAogICAgdW5nZXQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgaWYgKHRoaXMuX2x0SW5kZXhDYWNoZS5sZW5ndGgpewogICAgICAgICAgICB0aGlzLl9sdEluZGV4IC09IHRoaXMuX2x0SW5kZXhDYWNoZS5wb3AoKTsvLy0tOwogICAgICAgICAgICB0aGlzLl90b2tlbiA9IHRoaXMuX2x0W3RoaXMuX2x0SW5kZXggLSAxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRvbyBtdWNoIGxvb2thaGVhZC4iKTsKICAgICAgICB9CiAgICB9Cgp9OwoKCnBhcnNlcmxpYi51dGlsID0gewpTdHJpbmdSZWFkZXI6IFN0cmluZ1JlYWRlciwKU3ludGF4RXJyb3IgOiBTeW50YXhFcnJvciwKU3ludGF4VW5pdCAgOiBTeW50YXhVbml0LApFdmVudFRhcmdldCA6IEV2ZW50VGFyZ2V0LApUb2tlblN0cmVhbUJhc2UgOiBUb2tlblN0cmVhbUJhc2UKfTsKfSkoKTsKKGZ1bmN0aW9uKCl7CnZhciBFdmVudFRhcmdldCA9IHBhcnNlcmxpYi51dGlsLkV2ZW50VGFyZ2V0LApUb2tlblN0cmVhbUJhc2UgPSBwYXJzZXJsaWIudXRpbC5Ub2tlblN0cmVhbUJhc2UsClN0cmluZ1JlYWRlciA9IHBhcnNlcmxpYi51dGlsLlN0cmluZ1JlYWRlciwKU3ludGF4RXJyb3IgPSBwYXJzZXJsaWIudXRpbC5TeW50YXhFcnJvciwKU3ludGF4VW5pdCAgPSBwYXJzZXJsaWIudXRpbC5TeW50YXhVbml0OwoKdmFyIENvbG9ycyA9IHsKICAgIGFsaWNlYmx1ZSAgICAgICA6IiNmMGY4ZmYiLAogICAgYW50aXF1ZXdoaXRlICAgIDoiI2ZhZWJkNyIsCiAgICBhcXVhICAgICAgICAgICAgOiIjMDBmZmZmIiwKICAgIGFxdWFtYXJpbmUgICAgICA6IiM3ZmZmZDQiLAogICAgYXp1cmUgICAgICAgICAgIDoiI2YwZmZmZiIsCiAgICBiZWlnZSAgICAgICAgICAgOiIjZjVmNWRjIiwKICAgIGJpc3F1ZSAgICAgICAgICA6IiNmZmU0YzQiLAogICAgYmxhY2sgICAgICAgICAgIDoiIzAwMDAwMCIsCiAgICBibGFuY2hlZGFsbW9uZCAgOiIjZmZlYmNkIiwKICAgIGJsdWUgICAgICAgICAgICA6IiMwMDAwZmYiLAogICAgYmx1ZXZpb2xldCAgICAgIDoiIzhhMmJlMiIsCiAgICBicm93biAgICAgICAgICAgOiIjYTUyYTJhIiwKICAgIGJ1cmx5d29vZCAgICAgICA6IiNkZWI4ODciLAogICAgY2FkZXRibHVlICAgICAgIDoiIzVmOWVhMCIsCiAgICBjaGFydHJldXNlICAgICAgOiIjN2ZmZjAwIiwKICAgIGNob2NvbGF0ZSAgICAgICA6IiNkMjY5MWUiLAogICAgY29yYWwgICAgICAgICAgIDoiI2ZmN2Y1MCIsCiAgICBjb3JuZmxvd2VyYmx1ZSAgOiIjNjQ5NWVkIiwKICAgIGNvcm5zaWxrICAgICAgICA6IiNmZmY4ZGMiLAogICAgY3JpbXNvbiAgICAgICAgIDoiI2RjMTQzYyIsCiAgICBjeWFuICAgICAgICAgICAgOiIjMDBmZmZmIiwKICAgIGRhcmtibHVlICAgICAgICA6IiMwMDAwOGIiLAogICAgZGFya2N5YW4gICAgICAgIDoiIzAwOGI4YiIsCiAgICBkYXJrZ29sZGVucm9kICAgOiIjYjg4NjBiIiwKICAgIGRhcmtncmF5ICAgICAgICA6IiNhOWE5YTkiLAogICAgZGFya2dyZXkgICAgICAgIDoiI2E5YTlhOSIsCiAgICBkYXJrZ3JlZW4gICAgICAgOiIjMDA2NDAwIiwKICAgIGRhcmtraGFraSAgICAgICA6IiNiZGI3NmIiLAogICAgZGFya21hZ2VudGEgICAgIDoiIzhiMDA4YiIsCiAgICBkYXJrb2xpdmVncmVlbiAgOiIjNTU2YjJmIiwKICAgIGRhcmtvcmFuZ2UgICAgICA6IiNmZjhjMDAiLAogICAgZGFya29yY2hpZCAgICAgIDoiIzk5MzJjYyIsCiAgICBkYXJrcmVkICAgICAgICAgOiIjOGIwMDAwIiwKICAgIGRhcmtzYWxtb24gICAgICA6IiNlOTk2N2EiLAogICAgZGFya3NlYWdyZWVuICAgIDoiIzhmYmM4ZiIsCiAgICBkYXJrc2xhdGVibHVlICAgOiIjNDgzZDhiIiwKICAgIGRhcmtzbGF0ZWdyYXkgICA6IiMyZjRmNGYiLAogICAgZGFya3NsYXRlZ3JleSAgIDoiIzJmNGY0ZiIsCiAgICBkYXJrdHVycXVvaXNlICAgOiIjMDBjZWQxIiwKICAgIGRhcmt2aW9sZXQgICAgICA6IiM5NDAwZDMiLAogICAgZGVlcHBpbmsgICAgICAgIDoiI2ZmMTQ5MyIsCiAgICBkZWVwc2t5Ymx1ZSAgICAgOiIjMDBiZmZmIiwKICAgIGRpbWdyYXkgICAgICAgICA6IiM2OTY5NjkiLAogICAgZGltZ3JleSAgICAgICAgIDoiIzY5Njk2OSIsCiAgICBkb2RnZXJibHVlICAgICAgOiIjMWU5MGZmIiwKICAgIGZpcmVicmljayAgICAgICA6IiNiMjIyMjIiLAogICAgZmxvcmFsd2hpdGUgICAgIDoiI2ZmZmFmMCIsCiAgICBmb3Jlc3RncmVlbiAgICAgOiIjMjI4YjIyIiwKICAgIGZ1Y2hzaWEgICAgICAgICA6IiNmZjAwZmYiLAogICAgZ2FpbnNib3JvICAgICAgIDoiI2RjZGNkYyIsCiAgICBnaG9zdHdoaXRlICAgICAgOiIjZjhmOGZmIiwKICAgIGdvbGQgICAgICAgICAgICA6IiNmZmQ3MDAiLAogICAgZ29sZGVucm9kICAgICAgIDoiI2RhYTUyMCIsCiAgICBncmF5ICAgICAgICAgICAgOiIjODA4MDgwIiwKICAgIGdyZXkgICAgICAgICAgICA6IiM4MDgwODAiLAogICAgZ3JlZW4gICAgICAgICAgIDoiIzAwODAwMCIsCiAgICBncmVlbnllbGxvdyAgICAgOiIjYWRmZjJmIiwKICAgIGhvbmV5ZGV3ICAgICAgICA6IiNmMGZmZjAiLAogICAgaG90cGluayAgICAgICAgIDoiI2ZmNjliNCIsCiAgICBpbmRpYW5yZWQgICAgICAgOiIjY2Q1YzVjIiwKICAgIGluZGlnbyAgICAgICAgICA6IiM0YjAwODIiLAogICAgaXZvcnkgICAgICAgICAgIDoiI2ZmZmZmMCIsCiAgICBraGFraSAgICAgICAgICAgOiIjZjBlNjhjIiwKICAgIGxhdmVuZGVyICAgICAgICA6IiNlNmU2ZmEiLAogICAgbGF2ZW5kZXJibHVzaCAgIDoiI2ZmZjBmNSIsCiAgICBsYXduZ3JlZW4gICAgICAgOiIjN2NmYzAwIiwKICAgIGxlbW9uY2hpZmZvbiAgICA6IiNmZmZhY2QiLAogICAgbGlnaHRibHVlICAgICAgIDoiI2FkZDhlNiIsCiAgICBsaWdodGNvcmFsICAgICAgOiIjZjA4MDgwIiwKICAgIGxpZ2h0Y3lhbiAgICAgICA6IiNlMGZmZmYiLAogICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3cgIDoiI2ZhZmFkMiIsCiAgICBsaWdodGdyYXkgICAgICAgOiIjZDNkM2QzIiwKICAgIGxpZ2h0Z3JleSAgICAgICA6IiNkM2QzZDMiLAogICAgbGlnaHRncmVlbiAgICAgIDoiIzkwZWU5MCIsCiAgICBsaWdodHBpbmsgICAgICAgOiIjZmZiNmMxIiwKICAgIGxpZ2h0c2FsbW9uICAgICA6IiNmZmEwN2EiLAogICAgbGlnaHRzZWFncmVlbiAgIDoiIzIwYjJhYSIsCiAgICBsaWdodHNreWJsdWUgICAgOiIjODdjZWZhIiwKICAgIGxpZ2h0c2xhdGVncmF5ICA6IiM3Nzg4OTkiLAogICAgbGlnaHRzbGF0ZWdyZXkgIDoiIzc3ODg5OSIsCiAgICBsaWdodHN0ZWVsYmx1ZSAgOiIjYjBjNGRlIiwKICAgIGxpZ2h0eWVsbG93ICAgICA6IiNmZmZmZTAiLAogICAgbGltZSAgICAgICAgICAgIDoiIzAwZmYwMCIsCiAgICBsaW1lZ3JlZW4gICAgICAgOiIjMzJjZDMyIiwKICAgIGxpbmVuICAgICAgICAgICA6IiNmYWYwZTYiLAogICAgbWFnZW50YSAgICAgICAgIDoiI2ZmMDBmZiIsCiAgICBtYXJvb24gICAgICAgICAgOiIjODAwMDAwIiwKICAgIG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLAogICAgbWVkaXVtYmx1ZSAgICAgIDoiIzAwMDBjZCIsCiAgICBtZWRpdW1vcmNoaWQgICAgOiIjYmE1NWQzIiwKICAgIG1lZGl1bXB1cnBsZSAgICA6IiM5MzcwZDgiLAogICAgbWVkaXVtc2VhZ3JlZW4gIDoiIzNjYjM3MSIsCiAgICBtZWRpdW1zbGF0ZWJsdWUgOiIjN2I2OGVlIiwKICAgIG1lZGl1bXNwcmluZ2dyZWVuICAgOiIjMDBmYTlhIiwKICAgIG1lZGl1bXR1cnF1b2lzZSA6IiM0OGQxY2MiLAogICAgbWVkaXVtdmlvbGV0cmVkIDoiI2M3MTU4NSIsCiAgICBtaWRuaWdodGJsdWUgICAgOiIjMTkxOTcwIiwKICAgIG1pbnRjcmVhbSAgICAgICA6IiNmNWZmZmEiLAogICAgbWlzdHlyb3NlICAgICAgIDoiI2ZmZTRlMSIsCiAgICBtb2NjYXNpbiAgICAgICAgOiIjZmZlNGI1IiwKICAgIG5hdmFqb3doaXRlICAgICA6IiNmZmRlYWQiLAogICAgbmF2eSAgICAgICAgICAgIDoiIzAwMDA4MCIsCiAgICBvbGRsYWNlICAgICAgICAgOiIjZmRmNWU2IiwKICAgIG9saXZlICAgICAgICAgICA6IiM4MDgwMDAiLAogICAgb2xpdmVkcmFiICAgICAgIDoiIzZiOGUyMyIsCiAgICBvcmFuZ2UgICAgICAgICAgOiIjZmZhNTAwIiwKICAgIG9yYW5nZXJlZCAgICAgICA6IiNmZjQ1MDAiLAogICAgb3JjaGlkICAgICAgICAgIDoiI2RhNzBkNiIsCiAgICBwYWxlZ29sZGVucm9kICAgOiIjZWVlOGFhIiwKICAgIHBhbGVncmVlbiAgICAgICA6IiM5OGZiOTgiLAogICAgcGFsZXR1cnF1b2lzZSAgIDoiI2FmZWVlZSIsCiAgICBwYWxldmlvbGV0cmVkICAgOiIjZDg3MDkzIiwKICAgIHBhcGF5YXdoaXAgICAgICA6IiNmZmVmZDUiLAogICAgcGVhY2hwdWZmICAgICAgIDoiI2ZmZGFiOSIsCiAgICBwZXJ1ICAgICAgICAgICAgOiIjY2Q4NTNmIiwKICAgIHBpbmsgICAgICAgICAgICA6IiNmZmMwY2IiLAogICAgcGx1bSAgICAgICAgICAgIDoiI2RkYTBkZCIsCiAgICBwb3dkZXJibHVlICAgICAgOiIjYjBlMGU2IiwKICAgIHB1cnBsZSAgICAgICAgICA6IiM4MDAwODAiLAogICAgcmVkICAgICAgICAgICAgIDoiI2ZmMDAwMCIsCiAgICByb3N5YnJvd24gICAgICAgOiIjYmM4ZjhmIiwKICAgIHJveWFsYmx1ZSAgICAgICA6IiM0MTY5ZTEiLAogICAgc2FkZGxlYnJvd24gICAgIDoiIzhiNDUxMyIsCiAgICBzYWxtb24gICAgICAgICAgOiIjZmE4MDcyIiwKICAgIHNhbmR5YnJvd24gICAgICA6IiNmNGE0NjAiLAogICAgc2VhZ3JlZW4gICAgICAgIDoiIzJlOGI1NyIsCiAgICBzZWFzaGVsbCAgICAgICAgOiIjZmZmNWVlIiwKICAgIHNpZW5uYSAgICAgICAgICA6IiNhMDUyMmQiLAogICAgc2lsdmVyICAgICAgICAgIDoiI2MwYzBjMCIsCiAgICBza3libHVlICAgICAgICAgOiIjODdjZWViIiwKICAgIHNsYXRlYmx1ZSAgICAgICA6IiM2YTVhY2QiLAogICAgc2xhdGVncmF5ICAgICAgIDoiIzcwODA5MCIsCiAgICBzbGF0ZWdyZXkgICAgICAgOiIjNzA4MDkwIiwKICAgIHNub3cgICAgICAgICAgICA6IiNmZmZhZmEiLAogICAgc3ByaW5nZ3JlZW4gICAgIDoiIzAwZmY3ZiIsCiAgICBzdGVlbGJsdWUgICAgICAgOiIjNDY4MmI0IiwKICAgIHRhbiAgICAgICAgICAgICA6IiNkMmI0OGMiLAogICAgdGVhbCAgICAgICAgICAgIDoiIzAwODA4MCIsCiAgICB0aGlzdGxlICAgICAgICAgOiIjZDhiZmQ4IiwKICAgIHRvbWF0byAgICAgICAgICA6IiNmZjYzNDciLAogICAgdHVycXVvaXNlICAgICAgIDoiIzQwZTBkMCIsCiAgICB2aW9sZXQgICAgICAgICAgOiIjZWU4MmVlIiwKICAgIHdoZWF0ICAgICAgICAgICA6IiNmNWRlYjMiLAogICAgd2hpdGUgICAgICAgICAgIDoiI2ZmZmZmZiIsCiAgICB3aGl0ZXNtb2tlICAgICAgOiIjZjVmNWY1IiwKICAgIHllbGxvdyAgICAgICAgICA6IiNmZmZmMDAiLAogICAgeWVsbG93Z3JlZW4gICAgIDoiIzlhY2QzMiIsCiAgICBhY3RpdmVCb3JkZXIgICAgICAgIDoiQWN0aXZlIHdpbmRvdyBib3JkZXIuIiwKICAgIGFjdGl2ZWNhcHRpb24gICAgICAgOiJBY3RpdmUgd2luZG93IGNhcHRpb24uIiwKICAgIGFwcHdvcmtzcGFjZSAgICAgICAgOiJCYWNrZ3JvdW5kIGNvbG9yIG9mIG11bHRpcGxlIGRvY3VtZW50IGludGVyZmFjZS4iLAogICAgYmFja2dyb3VuZCAgICAgICAgICA6IkRlc2t0b3AgYmFja2dyb3VuZC4iLAogICAgYnV0dG9uZmFjZSAgICAgICAgICA6IlRoZSBmYWNlIGJhY2tncm91bmQgY29sb3IgZm9yIDMtRCBlbGVtZW50cyB0aGF0IGFwcGVhciAzLUQgZHVlIHRvIG9uZSBsYXllciBvZiBzdXJyb3VuZGluZyBib3JkZXIuIiwKICAgIGJ1dHRvbmhpZ2hsaWdodCAgICAgOiJUaGUgY29sb3Igb2YgdGhlIGJvcmRlciBmYWNpbmcgdGhlIGxpZ2h0IHNvdXJjZSBmb3IgMy1EIGVsZW1lbnRzIHRoYXQgYXBwZWFyIDMtRCBkdWUgdG8gb25lIGxheWVyIG9mIHN1cnJvdW5kaW5nIGJvcmRlci4iLAogICAgYnV0dG9uc2hhZG93ICAgICAgICA6IlRoZSBjb2xvciBvZiB0aGUgYm9yZGVyIGF3YXkgZnJvbSB0aGUgbGlnaHQgc291cmNlIGZvciAzLUQgZWxlbWVudHMgdGhhdCBhcHBlYXIgMy1EIGR1ZSB0byBvbmUgbGF5ZXIgb2Ygc3Vycm91bmRpbmcgYm9yZGVyLiIsCiAgICBidXR0b250ZXh0ICAgICAgICAgIDoiVGV4dCBvbiBwdXNoIGJ1dHRvbnMuIiwKICAgIGNhcHRpb250ZXh0ICAgICAgICAgOiJUZXh0IGluIGNhcHRpb24sIHNpemUgYm94LCBhbmQgc2Nyb2xsYmFyIGFycm93IGJveC4iLAogICAgZ3JheXRleHQgICAgICAgICAgICA6IkdyYXllZCAoZGlzYWJsZWQpIHRleHQuIFRoaXMgY29sb3IgaXMgc2V0IHRvICMwMDAgaWYgdGhlIGN1cnJlbnQgZGlzcGxheSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhIHNvbGlkIGdyYXkgY29sb3IuIiwKICAgIGdyZXl0ZXh0ICAgICAgICAgICAgOiJHcmV5ZWQgKGRpc2FibGVkKSB0ZXh0LiBUaGlzIGNvbG9yIGlzIHNldCB0byAjMDAwIGlmIHRoZSBjdXJyZW50IGRpc3BsYXkgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgYSBzb2xpZCBncmV5IGNvbG9yLiIsCiAgICBoaWdobGlnaHQgICAgICAgICAgIDoiSXRlbShzKSBzZWxlY3RlZCBpbiBhIGNvbnRyb2wuIiwKICAgIGhpZ2hsaWdodHRleHQgICAgICAgOiJUZXh0IG9mIGl0ZW0ocykgc2VsZWN0ZWQgaW4gYSBjb250cm9sLiIsCiAgICBpbmFjdGl2ZWJvcmRlciAgICAgIDoiSW5hY3RpdmUgd2luZG93IGJvcmRlci4iLAogICAgaW5hY3RpdmVjYXB0aW9uICAgICA6IkluYWN0aXZlIHdpbmRvdyBjYXB0aW9uLiIsCiAgICBpbmFjdGl2ZWNhcHRpb250ZXh0IDoiQ29sb3Igb2YgdGV4dCBpbiBhbiBpbmFjdGl2ZSBjYXB0aW9uLiIsCiAgICBpbmZvYmFja2dyb3VuZCAgICAgIDoiQmFja2dyb3VuZCBjb2xvciBmb3IgdG9vbHRpcCBjb250cm9scy4iLAogICAgaW5mb3RleHQgICAgICAgICAgICA6IlRleHQgY29sb3IgZm9yIHRvb2x0aXAgY29udHJvbHMuIiwKICAgIG1lbnUgICAgICAgICAgICAgICAgOiJNZW51IGJhY2tncm91bmQuIiwKICAgIG1lbnV0ZXh0ICAgICAgICAgICAgOiJUZXh0IGluIG1lbnVzLiIsCiAgICBzY3JvbGxiYXIgICAgICAgICAgIDoiU2Nyb2xsIGJhciBncmF5IGFyZWEuIiwKICAgIHRocmVlZGRhcmtzaGFkb3cgICAgOiJUaGUgY29sb3Igb2YgdGhlIGRhcmtlciAoZ2VuZXJhbGx5IG91dGVyKSBvZiB0aGUgdHdvIGJvcmRlcnMgYXdheSBmcm9tIHRoZSBsaWdodCBzb3VyY2UgZm9yIDMtRCBlbGVtZW50cyB0aGF0IGFwcGVhciAzLUQgZHVlIHRvIHR3byBjb25jZW50cmljIGxheWVycyBvZiBzdXJyb3VuZGluZyBib3JkZXIuIiwKICAgIHRocmVlZGZhY2UgICAgICAgICAgOiJUaGUgZmFjZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciAzLUQgZWxlbWVudHMgdGhhdCBhcHBlYXIgMy1EIGR1ZSB0byB0d28gY29uY2VudHJpYyBsYXllcnMgb2Ygc3Vycm91bmRpbmcgYm9yZGVyLiIsCiAgICB0aHJlZWRoaWdobGlnaHQgICAgIDoiVGhlIGNvbG9yIG9mIHRoZSBsaWdodGVyIChnZW5lcmFsbHkgb3V0ZXIpIG9mIHRoZSB0d28gYm9yZGVycyBmYWNpbmcgdGhlIGxpZ2h0IHNvdXJjZSBmb3IgMy1EIGVsZW1lbnRzIHRoYXQgYXBwZWFyIDMtRCBkdWUgdG8gdHdvIGNvbmNlbnRyaWMgbGF5ZXJzIG9mIHN1cnJvdW5kaW5nIGJvcmRlci4iLAogICAgdGhyZWVkbGlnaHRzaGFkb3cgICA6IlRoZSBjb2xvciBvZiB0aGUgZGFya2VyIChnZW5lcmFsbHkgaW5uZXIpIG9mIHRoZSB0d28gYm9yZGVycyBmYWNpbmcgdGhlIGxpZ2h0IHNvdXJjZSBmb3IgMy1EIGVsZW1lbnRzIHRoYXQgYXBwZWFyIDMtRCBkdWUgdG8gdHdvIGNvbmNlbnRyaWMgbGF5ZXJzIG9mIHN1cnJvdW5kaW5nIGJvcmRlci4iLAogICAgdGhyZWVkc2hhZG93ICAgICAgICA6IlRoZSBjb2xvciBvZiB0aGUgbGlnaHRlciAoZ2VuZXJhbGx5IGlubmVyKSBvZiB0aGUgdHdvIGJvcmRlcnMgYXdheSBmcm9tIHRoZSBsaWdodCBzb3VyY2UgZm9yIDMtRCBlbGVtZW50cyB0aGF0IGFwcGVhciAzLUQgZHVlIHRvIHR3byBjb25jZW50cmljIGxheWVycyBvZiBzdXJyb3VuZGluZyBib3JkZXIuIiwKICAgIHdpbmRvdyAgICAgICAgICAgICAgOiJXaW5kb3cgYmFja2dyb3VuZC4iLAogICAgd2luZG93ZnJhbWUgICAgICAgICA6IldpbmRvdyBmcmFtZS4iLAogICAgd2luZG93dGV4dCAgICAgICAgICA6IlRleHQgaW4gd2luZG93cy4iCn07CmZ1bmN0aW9uIENvbWJpbmF0b3IodGV4dCwgbGluZSwgY29sKXsKCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgdGV4dCwgbGluZSwgY29sLCBQYXJzZXIuQ09NQklOQVRPUl9UWVBFKTsKICAgIHRoaXMudHlwZSA9ICJ1bmtub3duIjsKICAgIGlmICgvXlxzKyQvLnRlc3QodGV4dCkpewogICAgICAgIHRoaXMudHlwZSA9ICJkZXNjZW5kYW50IjsKICAgIH0gZWxzZSBpZiAodGV4dCA9PSAiPiIpewogICAgICAgIHRoaXMudHlwZSA9ICJjaGlsZCI7CiAgICB9IGVsc2UgaWYgKHRleHQgPT0gIisiKXsKICAgICAgICB0aGlzLnR5cGUgPSAiYWRqYWNlbnQtc2libGluZyI7CiAgICB9IGVsc2UgaWYgKHRleHQgPT0gIn4iKXsKICAgICAgICB0aGlzLnR5cGUgPSAic2libGluZyI7CiAgICB9Cgp9CgpDb21iaW5hdG9yLnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7CkNvbWJpbmF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29tYmluYXRvcjsKZnVuY3Rpb24gTWVkaWFGZWF0dXJlKG5hbWUsIHZhbHVlKXsKCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgIigiICsgbmFtZSArICh2YWx1ZSAhPT0gbnVsbCA/ICI6IiArIHZhbHVlIDogIiIpICsgIikiLCBuYW1lLnN0YXJ0TGluZSwgbmFtZS5zdGFydENvbCwgUGFyc2VyLk1FRElBX0ZFQVRVUkVfVFlQRSk7CiAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwp9CgpNZWRpYUZlYXR1cmUucHJvdG90eXBlID0gbmV3IFN5bnRheFVuaXQoKTsKTWVkaWFGZWF0dXJlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1lZGlhRmVhdHVyZTsKZnVuY3Rpb24gTWVkaWFRdWVyeShtb2RpZmllciwgbWVkaWFUeXBlLCBmZWF0dXJlcywgbGluZSwgY29sKXsKCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgKG1vZGlmaWVyID8gbW9kaWZpZXIgKyAiICI6ICIiKSArIChtZWRpYVR5cGUgPyBtZWRpYVR5cGUgOiAiIikgKyAobWVkaWFUeXBlICYmIGZlYXR1cmVzLmxlbmd0aCA+IDAgPyAiIGFuZCAiIDogIiIpICsgZmVhdHVyZXMuam9pbigiIGFuZCAiKSwgbGluZSwgY29sLCBQYXJzZXIuTUVESUFfUVVFUllfVFlQRSk7CiAgICB0aGlzLm1vZGlmaWVyID0gbW9kaWZpZXI7CiAgICB0aGlzLm1lZGlhVHlwZSA9IG1lZGlhVHlwZTsKICAgIHRoaXMuZmVhdHVyZXMgPSBmZWF0dXJlczsKCn0KCk1lZGlhUXVlcnkucHJvdG90eXBlID0gbmV3IFN5bnRheFVuaXQoKTsKTWVkaWFRdWVyeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNZWRpYVF1ZXJ5OwpmdW5jdGlvbiBQYXJzZXIob3B0aW9ucyl7CiAgICBFdmVudFRhcmdldC5jYWxsKHRoaXMpOwoKCiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbnVsbDsKfQpQYXJzZXIuREVGQVVMVF9UWVBFID0gMDsKUGFyc2VyLkNPTUJJTkFUT1JfVFlQRSA9IDE7ClBhcnNlci5NRURJQV9GRUFUVVJFX1RZUEUgPSAyOwpQYXJzZXIuTUVESUFfUVVFUllfVFlQRSA9IDM7ClBhcnNlci5QUk9QRVJUWV9OQU1FX1RZUEUgPSA0OwpQYXJzZXIuUFJPUEVSVFlfVkFMVUVfVFlQRSA9IDU7ClBhcnNlci5QUk9QRVJUWV9WQUxVRV9QQVJUX1RZUEUgPSA2OwpQYXJzZXIuU0VMRUNUT1JfVFlQRSA9IDc7ClBhcnNlci5TRUxFQ1RPUl9QQVJUX1RZUEUgPSA4OwpQYXJzZXIuU0VMRUNUT1JfU1VCX1BBUlRfVFlQRSA9IDk7CgpQYXJzZXIucHJvdG90eXBlID0gZnVuY3Rpb24oKXsKCiAgICB2YXIgcHJvdG8gPSBuZXcgRXZlbnRUYXJnZXQoKSwgIC8vbmV3IHByb3RvdHlwZQogICAgICAgIHByb3AsCiAgICAgICAgYWRkaXRpb25zID0gIHsKICAgICAgICAgICAgY29uc3RydWN0b3I6IFBhcnNlciwKICAgICAgICAgICAgREVGQVVMVF9UWVBFIDogMCwKICAgICAgICAgICAgQ09NQklOQVRPUl9UWVBFIDogMSwKICAgICAgICAgICAgTUVESUFfRkVBVFVSRV9UWVBFIDogMiwKICAgICAgICAgICAgTUVESUFfUVVFUllfVFlQRSA6IDMsCiAgICAgICAgICAgIFBST1BFUlRZX05BTUVfVFlQRSA6IDQsCiAgICAgICAgICAgIFBST1BFUlRZX1ZBTFVFX1RZUEUgOiA1LAogICAgICAgICAgICBQUk9QRVJUWV9WQUxVRV9QQVJUX1RZUEUgOiA2LAogICAgICAgICAgICBTRUxFQ1RPUl9UWVBFIDogNywKICAgICAgICAgICAgU0VMRUNUT1JfUEFSVF9UWVBFIDogOCwKICAgICAgICAgICAgU0VMRUNUT1JfU1VCX1BBUlRfVFlQRSA6IDksCgogICAgICAgICAgICBfc3R5bGVzaGVldDogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgY291bnQsCiAgICAgICAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgdHQ7CgogICAgICAgICAgICAgICAgdGhpcy5maXJlKCJzdGFydHN0eWxlc2hlZXQiKTsKICAgICAgICAgICAgICAgIHRoaXMuX2NoYXJzZXQoKTsKCiAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ3J1ZnQoKTsKICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLklNUE9SVF9TWU0pewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2ltcG9ydCgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDcnVmdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuTkFNRVNQQUNFX1NZTSl7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmFtZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcENydWZ0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0dCA9IHRva2VuU3RyZWFtLnBlZWsoKTsKICAgICAgICAgICAgICAgIHdoaWxlKHR0ID4gVG9rZW5zLkVPRil7CgogICAgICAgICAgICAgICAgICAgIHRyeSB7CgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2godHQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuTUVESUFfU1lNOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lZGlhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcENydWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2Vucy5QQUdFX1NZTToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2tpcENydWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2Vucy5GT05UX0ZBQ0VfU1lNOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvbnRfZmFjZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDcnVmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuS0VZRlJBTUVTX1NZTToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9rZXlmcmFtZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9za2lwQ3J1ZnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5zLlZJRVdQT1JUX1NZTToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWV3cG9ydCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NraXBDcnVmdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuVU5LTk9XTl9TWU06ICAvL3Vua25vd24gQCBydWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICJlcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogICAgIlVua25vd24gQCBydWxlOiAiICsgdG9rZW5TdHJlYW0uTFQoMCkudmFsdWUgKyAiLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgICAgICB0b2tlblN0cmVhbS5MVCgwKS5zdGFydExpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgICAgICB0b2tlblN0cmVhbS5MVCgwKS5zdGFydENvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9MDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuU3RyZWFtLmFkdmFuY2UoW1Rva2Vucy5MQlJBQ0UsIFRva2Vucy5SQlJBQ0VdKSA9PSBUb2tlbnMuTEJSQUNFKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgIC8va2VlcCB0cmFjayBvZiBuZXN0aW5nIGRlcHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKGNvdW50KXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLmFkdmFuY2UoW1Rva2Vucy5SQlJBQ0VdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LS07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCJVbmtub3duIEAgcnVsZS4iLCB0b2tlblN0cmVhbS5MVCgwKS5zdGFydExpbmUsIHRva2VuU3RyZWFtLkxUKDApLnN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2Vucy5TOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLl9ydWxlc2V0KCkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2godHQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuQ0hBUlNFVF9TWU06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS5MVCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFyc2V0KGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkBjaGFyc2V0IG5vdCBhbGxvd2VkIGhlcmUuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2Vucy5JTVBPUlRfU1lNOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0uTFQoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1wb3J0KGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkBpbXBvcnQgbm90IGFsbG93ZWQgaGVyZS4iLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5zLk5BTUVTUEFDRV9TWU06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS5MVCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uYW1lc3BhY2UoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcigiQG5hbWVzcGFjZSBub3QgYWxsb3dlZCBoZXJlLiIsIHRva2VuLnN0YXJ0TGluZSwgdG9rZW4uc3RhcnRDb2wpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5nZXQoKTsgIC8vZ2V0IHRoZSBsYXN0IHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgU3ludGF4RXJyb3IgJiYgIXRoaXMub3B0aW9ucy5zdHJpY3QpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiAgICAgIGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICAgIGV4Lm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgZXgubGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgICAgICBleC5jb2wKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHR0ID0gdG9rZW5TdHJlYW0ucGVlaygpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0dCAhPSBUb2tlbnMuRU9GKXsKICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5maXJlKCJlbmRzdHlsZXNoZWV0Iik7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfY2hhcnNldDogZnVuY3Rpb24oZW1pdCl7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBjaGFyc2V0LAogICAgICAgICAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ0hBUlNFVF9TWU0pKXsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlNUUklORyk7CgogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gdG9rZW4udmFsdWU7CgogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5TRU1JQ09MT04pOwoKICAgICAgICAgICAgICAgICAgICBpZiAoZW1pdCAhPT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiY2hhcnNldCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OmNoYXJzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfaW1wb3J0OiBmdW5jdGlvbihlbWl0KXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB0dCwKICAgICAgICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgICAgICAgaW1wb3J0VG9rZW4sCiAgICAgICAgICAgICAgICAgICAgbWVkaWFMaXN0ICAgPSBbXTsKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuSU1QT1JUX1NZTSk7CiAgICAgICAgICAgICAgICBpbXBvcnRUb2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChbVG9rZW5zLlNUUklORywgVG9rZW5zLlVSSV0pOwogICAgICAgICAgICAgICAgdXJpID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZS5yZXBsYWNlKC9eKD86dXJsXCgpP1siJ10/KFteIiddKz8pWyInXT9cKT8kLywgIiQxIik7CgogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICBtZWRpYUxpc3QgPSB0aGlzLl9tZWRpYV9xdWVyeV9saXN0KCk7CiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlNFTUlDT0xPTik7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIGlmIChlbWl0ICE9PSBmYWxzZSl7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiaW1wb3J0IiwKICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiAgICB1cmksCiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhOiAgbWVkaWFMaXN0LAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGltcG9ydFRva2VuLnN0YXJ0TGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICBpbXBvcnRUb2tlbi5zdGFydENvbAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF9uYW1lc3BhY2U6IGZ1bmN0aW9uKGVtaXQpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sLAogICAgICAgICAgICAgICAgICAgIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICB1cmk7CiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLk5BTUVTUEFDRV9TWU0pOwogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKSl7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChbVG9rZW5zLlNUUklORywgVG9rZW5zLlVSSV0pOwogICAgICAgICAgICAgICAgdXJpID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZS5yZXBsYWNlKC8oPzp1cmxcKCk/WyInXShbXiInXSspWyInXVwpPy8sICIkMSIpOwoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlNFTUlDT0xPTik7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIGlmIChlbWl0ICE9PSBmYWxzZSl7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAibmFtZXNwYWNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogICAgdXJpLAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX21lZGlhOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtICAgICA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sLAogICAgICAgICAgICAgICAgICAgIG1lZGlhTGlzdDsvLyAgICAgICA9IFtdOwogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5NRURJQV9TWU0pOwogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIG1lZGlhTGlzdCA9IHRoaXMuX21lZGlhX3F1ZXJ5X2xpc3QoKTsKCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkxCUkFDRSk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAic3RhcnRtZWRpYSIsCiAgICAgICAgICAgICAgICAgICAgbWVkaWE6ICBtZWRpYUxpc3QsCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuUEFHRV9TWU0pewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLkZPTlRfRkFDRV9TWU0pewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb250X2ZhY2UoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuVklFV1BPUlRfU1lNKXsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlld3BvcnQoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9ydWxlc2V0KCkpewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5SQlJBQ0UpOwogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICB0aGlzLmZpcmUoewogICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgImVuZG1lZGlhIiwKICAgICAgICAgICAgICAgICAgICBtZWRpYTogIG1lZGlhTGlzdCwKICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOiAgICBjb2wKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfbWVkaWFfcXVlcnlfbGlzdDogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIG1lZGlhTGlzdCAgID0gW107CgoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuSURFTlQgfHwgdG9rZW5TdHJlYW0ucGVlaygpID09IFRva2Vucy5MUEFSRU4pewogICAgICAgICAgICAgICAgICAgIG1lZGlhTGlzdC5wdXNoKHRoaXMuX21lZGlhX3F1ZXJ5KCkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT01NQSkpewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgbWVkaWFMaXN0LnB1c2godGhpcy5fbWVkaWFfcXVlcnkoKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG1lZGlhTGlzdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX21lZGlhX3F1ZXJ5OiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIGlkZW50ICAgICAgID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgPSBbXTsKCiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKSl7CiAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGlkZW50ICE9ICJvbmx5IiAmJiBpZGVudCAhPSAibm90Iil7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLnVuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuSURFTlQpewogICAgICAgICAgICAgICAgICAgIHR5cGUgPSB0aGlzLl9tZWRpYV90eXBlKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5TdHJlYW0ucGVlaygpID09IFRva2Vucy5MUEFSRU4pewogICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0uTFQoMSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fbWVkaWFfZXhwcmVzc2lvbigpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gbnVsbCAmJiBleHByZXNzaW9ucy5sZW5ndGggPT09IDApewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUudG9Mb3dlckNhc2UoKSAhPSAiYW5kIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fbWVkaWFfZXhwcmVzc2lvbigpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYVF1ZXJ5KGlkZW50LCB0eXBlLCBleHByZXNzaW9ucywgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9tZWRpYV90eXBlOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lZGlhX2ZlYXR1cmUoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX21lZGlhX2V4cHJlc3Npb246IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBmZWF0dXJlICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiAgPSBudWxsOwoKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTFBBUkVOKTsKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgZmVhdHVyZSA9IHRoaXMuX21lZGlhX2ZlYXR1cmUoKTsKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT0xPTikpewogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS5MVCgxKTsKICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gdGhpcy5fZXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUlBBUkVOKTsKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNZWRpYUZlYXR1cmUoZmVhdHVyZSwgKGV4cHJlc3Npb24gPyBuZXcgU3ludGF4VW5pdChleHByZXNzaW9uLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKSA6IG51bGwpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX21lZGlhX2ZlYXR1cmU6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbTsKCiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLklERU5UKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9wYWdlOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgbGluZSwKICAgICAgICAgICAgICAgICAgICBjb2wsCiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIHBzZXVkb1BhZ2UgID0gbnVsbDsKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUEFHRV9TWU0pOwogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpKXsKICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci50b0xvd2VyQ2FzZSgpID09PSAiYXV0byIpewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLnBlZWsoKSA9PSBUb2tlbnMuQ09MT04pewogICAgICAgICAgICAgICAgICAgIHBzZXVkb1BhZ2UgPSB0aGlzLl9wc2V1ZG9fcGFnZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICJzdGFydHBhZ2UiLAogICAgICAgICAgICAgICAgICAgIGlkOiAgICAgaWRlbnRpZmllciwKICAgICAgICAgICAgICAgICAgICBwc2V1ZG86IHBzZXVkb1BhZ2UsCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRGVjbGFyYXRpb25zKHRydWUsIHRydWUpOwoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiZW5kcGFnZSIsCiAgICAgICAgICAgICAgICAgICAgaWQ6ICAgICBpZGVudGlmaWVyLAogICAgICAgICAgICAgICAgICAgIHBzZXVkbzogcHNldWRvUGFnZSwKICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOiAgICBjb2wKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX21hcmdpbjogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sLAogICAgICAgICAgICAgICAgICAgIG1hcmdpblN5bSAgID0gdGhpcy5fbWFyZ2luX3N5bSgpOwoKICAgICAgICAgICAgICAgIGlmIChtYXJnaW5TeW0pewogICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0TGluZTsKICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic3RhcnRwYWdlbWFyZ2luIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBtYXJnaW5TeW0sCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICBjb2wKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZERlY2xhcmF0aW9ucyh0cnVlKTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogImVuZHBhZ2VtYXJnaW4iLAogICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG1hcmdpblN5bSwKICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9tYXJnaW5fc3ltOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtOwoKICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuVE9QTEVGVENPUk5FUl9TWU0sIFRva2Vucy5UT1BMRUZUX1NZTSwKICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLlRPUENFTlRFUl9TWU0sIFRva2Vucy5UT1BSSUdIVF9TWU0sIFRva2Vucy5UT1BSSUdIVENPUk5FUl9TWU0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vucy5CT1RUT01MRUZUQ09STkVSX1NZTSwgVG9rZW5zLkJPVFRPTUxFRlRfU1lNLAogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuQk9UVE9NQ0VOVEVSX1NZTSwgVG9rZW5zLkJPVFRPTVJJR0hUX1NZTSwKICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLkJPVFRPTVJJR0hUQ09STkVSX1NZTSwgVG9rZW5zLkxFRlRUT1BfU1lNLAogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuTEVGVE1JRERMRV9TWU0sIFRva2Vucy5MRUZUQk9UVE9NX1NZTSwgVG9rZW5zLlJJR0hUVE9QX1NZTSwKICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLlJJR0hUTUlERExFX1NZTSwgVG9rZW5zLlJJR0hUQk9UVE9NX1NZTV0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBTeW50YXhVbml0LmZyb21Ub2tlbih0b2tlblN0cmVhbS50b2tlbigpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX3BzZXVkb19wYWdlOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtOwoKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuQ09MT04pOwogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5JREVOVCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfZm9udF9mYWNlOiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgbGluZSwKICAgICAgICAgICAgICAgICAgICBjb2w7CiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkZPTlRfRkFDRV9TWU0pOwogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAic3RhcnRmb250ZmFjZSIsCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRGVjbGFyYXRpb25zKHRydWUpOwoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiZW5kZm9udGZhY2UiLAogICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbGluZSwKICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGNvbAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfdmlld3BvcnQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgbGluZSwKICAgICAgICAgICAgICAgICAgICBjb2w7CgogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuVklFV1BPUlRfU1lNKTsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAic3RhcnR2aWV3cG9ydCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICBjb2wKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZERlY2xhcmF0aW9ucyh0cnVlKTsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiZW5kdmlld3BvcnQiLAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgY29sCiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX29wZXJhdG9yOiBmdW5jdGlvbihpbkZ1bmN0aW9uKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICAgICA9IG51bGw7CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuU0xBU0gsIFRva2Vucy5DT01NQV0pIHx8CiAgICAgICAgICAgICAgICAgICAgKGluRnVuY3Rpb24gJiYgdG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5QTFVTLCBUb2tlbnMuU1RBUiwgVG9rZW5zLk1JTlVTXSkpKXsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICB0b2tlblN0cmVhbS50b2tlbigpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPyBQcm9wZXJ0eVZhbHVlUGFydC5mcm9tVG9rZW4odG9rZW4pIDogbnVsbDsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfY29tYmluYXRvcjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgdG9rZW47CgogICAgICAgICAgICAgICAgaWYodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5QTFVTLCBUb2tlbnMuR1JFQVRFUiwgVG9rZW5zLlRJTERFXSkpewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG5ldyBDb21iaW5hdG9yKHRva2VuLnZhbHVlLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF91bmFyeV9vcGVyYXRvcjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbTsKCiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5NSU5VUywgVG9rZW5zLlBMVVNdKSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX3Byb3BlcnR5OiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICBoYWNrICAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgdG9rZW5WYWx1ZSwKICAgICAgICAgICAgICAgICAgICB0b2tlbiwKICAgICAgICAgICAgICAgICAgICBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNvbDsKICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLlNUQVIgJiYgdGhpcy5vcHRpb25zLnN0YXJIYWNrKXsKICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5nZXQoKTsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgaGFjayA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlbi5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgY29sID0gdG9rZW4uc3RhcnRDb2w7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKSl7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOwogICAgICAgICAgICAgICAgICAgIHRva2VuVmFsdWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5WYWx1ZS5jaGFyQXQoMCkgPT0gIl8iICYmIHRoaXMub3B0aW9ucy51bmRlcnNjb3JlSGFjayl7CiAgICAgICAgICAgICAgICAgICAgICAgIGhhY2sgPSAiXyI7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuVmFsdWUgPSB0b2tlblZhbHVlLnN1YnN0cmluZygxKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IFByb3BlcnR5TmFtZSh0b2tlblZhbHVlLCBoYWNrLCAobGluZXx8dG9rZW4uc3RhcnRMaW5lKSwgKGNvbHx8dG9rZW4uc3RhcnRDb2wpKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3J1bGVzZXQ6IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdHQsCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMgPSB0aGlzLl9zZWxlY3RvcnNfZ3JvdXAoKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KXsKICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBTeW50YXhFcnJvciAmJiAhdGhpcy5vcHRpb25zLnN0cmljdCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICAgICAgZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAgICBleC5tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgZXgubGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgICAgIGV4LmNvbAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgdHQgPSB0b2tlblN0cmVhbS5hZHZhbmNlKFtUb2tlbnMuUkJSQUNFXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dCA9PSBUb2tlbnMuUkJSQUNFKXsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMpewoKICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAic3RhcnRydWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzOiAgc2VsZWN0b3JzLAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgICAgICBzZWxlY3RvcnNbMF0ubGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29sOiAgICAgICAgc2VsZWN0b3JzWzBdLmNvbAogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRGVjbGFyYXRpb25zKHRydWUpOwoKICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmUoewogICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZW5kcnVsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yczogIHNlbGVjdG9ycywKICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgc2VsZWN0b3JzWzBdLmxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgICAgIHNlbGVjdG9yc1swXS5jb2wKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yczsKCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9zZWxlY3RvcnNfZ3JvdXA6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMgICA9IFtdLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOwoKICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdGhpcy5fc2VsZWN0b3IoKTsKICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCl7CgogICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5wdXNoKHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09NTUEpKXsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSB0aGlzLl9zZWxlY3RvcigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLnB1c2goc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLkxUKDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3JzLmxlbmd0aCA/IHNlbGVjdG9ycyA6IG51bGw7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9zZWxlY3RvcjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3RvciAgICA9IFtdLAogICAgICAgICAgICAgICAgICAgIG5leHRTZWxlY3RvciA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgY29tYmluYXRvciAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIHdzICAgICAgICAgID0gbnVsbDsKICAgICAgICAgICAgICAgIG5leHRTZWxlY3RvciA9IHRoaXMuX3NpbXBsZV9zZWxlY3Rvcl9zZXF1ZW5jZSgpOwogICAgICAgICAgICAgICAgaWYgKG5leHRTZWxlY3RvciA9PT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2VsZWN0b3IucHVzaChuZXh0U2VsZWN0b3IpOwoKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICBjb21iaW5hdG9yID0gdGhpcy5fY29tYmluYXRvcigpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoY29tYmluYXRvciAhPT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goY29tYmluYXRvcik7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTZWxlY3RvciA9IHRoaXMuX3NpbXBsZV9zZWxlY3Rvcl9zZXF1ZW5jZSgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFNlbGVjdG9yID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5wdXNoKG5leHRTZWxlY3Rvcik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZFdoaXRlc3BhY2UoKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cyA9IG5ldyBDb21iaW5hdG9yKHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLCB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3IgPSB0aGlzLl9jb21iaW5hdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2VsZWN0b3IgPSB0aGlzLl9zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U2VsZWN0b3IgPT09IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5hdG9yICE9PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLkxUKDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tYmluYXRvciAhPT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnB1c2goY29tYmluYXRvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucHVzaCh3cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5wdXNoKG5leHRTZWxlY3Rvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IHdoaWxlKHRydWUpOwoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3Ioc2VsZWN0b3IsIHNlbGVjdG9yWzBdLmxpbmUsIHNlbGVjdG9yWzBdLmNvbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9zaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2U6IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIG1vZGlmaWVycyAgID0gW10sCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JUZXh0PSAiIiwKICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSEFTSCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2VsZWN0b3JTdWJQYXJ0KHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWUsICJpZCIsIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lLCB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdHRyaWIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BzZXVkbywKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmVnYXRpb24KICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgIGkgICAgICAgICAgID0gMCwKICAgICAgICAgICAgICAgICAgICBsZW4gICAgICAgICA9IGNvbXBvbmVudHMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCAgID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICBmb3VuZCAgICAgICA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOwogICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0TGluZTsKICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0Q29sOwoKICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5fdHlwZV9zZWxlY3RvcigpOwogICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50TmFtZSl7CiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB0aGlzLl91bml2ZXJzYWwoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudE5hbWUgIT09IG51bGwpewogICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yVGV4dCArPSBlbGVtZW50TmFtZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB3aGlsZSh0cnVlKXsKICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ucGVlaygpID09PSBUb2tlbnMuUyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB3aGlsZShpIDwgbGVuICYmIGNvbXBvbmVudCA9PT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaSsrXS5jYWxsKHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudCA9PT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvclRleHQgPT09ICIiKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goY29tcG9uZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JUZXh0ICs9IGNvbXBvbmVudC50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yVGV4dCAhPT0gIiIgPwogICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2VsZWN0b3JQYXJ0KGVsZW1lbnROYW1lLCBtb2RpZmllcnMsIHNlbGVjdG9yVGV4dCwgbGluZSwgY29sKSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF90eXBlX3NlbGVjdG9yOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIG5zICAgICAgICAgID0gdGhpcy5fbmFtZXNwYWNlX3ByZWZpeCgpLAogICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lID0gdGhpcy5fZWxlbWVudF9uYW1lKCk7CgogICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50TmFtZSl7CiAgICAgICAgICAgICAgICAgICAgaWYgKG5zKXsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0udW5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5zLmxlbmd0aCA+IDEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0udW5nZXQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChucyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lLnRleHQgPSBucyArIGVsZW1lbnROYW1lLnRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnROYW1lLmNvbCAtPSBucy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50TmFtZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2NsYXNzOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHRva2VuOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuRE9UKSl7CiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5JREVOVCk7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3JTdWJQYXJ0KCIuIiArIHRva2VuLnZhbHVlLCAiY2xhc3MiLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sIC0gMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX2VsZW1lbnRfbmFtZTogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB0b2tlbjsKCiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklERU5UKSl7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblN0cmVhbS50b2tlbigpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3JTdWJQYXJ0KHRva2VuLnZhbHVlLCAiZWxlbWVudE5hbWUiLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsKCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfbmFtZXNwYWNlX3ByZWZpeDogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHZhbHVlICAgICAgID0gIiI7CiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0uTEEoMSkgPT09IFRva2Vucy5QSVBFIHx8IHRva2VuU3RyZWFtLkxBKDIpID09PSBUb2tlbnMuUElQRSl7CgogICAgICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuSURFTlQsIFRva2Vucy5TVEFSXSkpewogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5QSVBFKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAifCI7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPyB2YWx1ZSA6IG51bGw7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF91bml2ZXJzYWw6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9ICIiLAogICAgICAgICAgICAgICAgICAgIG5zOwoKICAgICAgICAgICAgICAgIG5zID0gdGhpcy5fbmFtZXNwYWNlX3ByZWZpeCgpOwogICAgICAgICAgICAgICAgaWYobnMpewogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IG5zOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TVEFSKSl7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gIioiOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGggPyB2YWx1ZSA6IG51bGw7CgogICAgICAgICAgIH0sCiAgICAgICAgICAgIF9hdHRyaWI6IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIG5zLAogICAgICAgICAgICAgICAgICAgIHRva2VuOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuTEJSQUNLRVQpKXsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgICAgICBucyA9IHRoaXMuX25hbWVzcGFjZV9wcmVmaXgoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG5zKXsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gbnM7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLklERU5UKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuUFJFRklYTUFUQ0gsIFRva2Vucy5TVUZGSVhNQVRDSCwgVG9rZW5zLlNVQlNUUklOR01BVENILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLkVRVUFMUywgVG9rZW5zLklOQ0xVREVTLCBUb2tlbnMuREFTSE1BVENIXSkpewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChbVG9rZW5zLklERU5ULCBUb2tlbnMuU1RSSU5HXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLlJCUkFDS0VUKTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RvclN1YlBhcnQodmFsdWUgKyAiXSIsICJhdHRyaWJ1dGUiLCB0b2tlbi5zdGFydExpbmUsIHRva2VuLnN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9wc2V1ZG86IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgcHNldWRvICAgICAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIGNvbG9ucyAgICAgID0gIjoiLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOwoKICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09MT04pKXsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5DT0xPTikpewogICAgICAgICAgICAgICAgICAgICAgICBjb2xvbnMgKz0gIjoiOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCkpewogICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8gPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wgLSBjb2xvbnMubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5TdHJlYW0ucGVlaygpID09IFRva2Vucy5GVU5DVElPTil7CiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLkxUKDEpLnN0YXJ0Q29sIC0gY29sb25zLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvID0gdGhpcy5fZnVuY3Rpb25hbF9wc2V1ZG8oKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmIChwc2V1ZG8pewogICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8gPSBuZXcgU2VsZWN0b3JTdWJQYXJ0KGNvbG9ucyArIHBzZXVkbywgInBzZXVkbyIsIGxpbmUsIGNvbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBwc2V1ZG87CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9mdW5jdGlvbmFsX3BzZXVkbzogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7CgogICAgICAgICAgICAgICAgaWYodG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkZVTkNUSU9OKSl7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fZXhwcmVzc2lvbigpOwogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUlBBUkVOKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiKSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfZXhwcmVzc2lvbjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9ICIiOwoKICAgICAgICAgICAgICAgIHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuUExVUywgVG9rZW5zLk1JTlVTLCBUb2tlbnMuRElNRU5TSU9OLAogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuTlVNQkVSLCBUb2tlbnMuU1RSSU5HLCBUb2tlbnMuSURFTlQsIFRva2Vucy5MRU5HVEgsCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vucy5GUkVRLCBUb2tlbnMuQU5HTEUsIFRva2Vucy5USU1FLAogICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuUkVTT0xVVElPTiwgVG9rZW5zLlNMQVNIXSkpewoKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCA/IHZhbHVlIDogbnVsbDsKCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9uZWdhdGlvbjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNvbCwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9ICIiLAogICAgICAgICAgICAgICAgICAgIGFyZywKICAgICAgICAgICAgICAgICAgICBzdWJwYXJ0ICAgICA9IG51bGw7CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5OT1QpKXsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2w7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICBhcmcgPSB0aGlzLl9uZWdhdGlvbl9hcmcoKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuUlBBUkVOKTsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwoKICAgICAgICAgICAgICAgICAgICBzdWJwYXJ0ID0gbmV3IFNlbGVjdG9yU3ViUGFydCh2YWx1ZSwgIm5vdCIsIGxpbmUsIGNvbCk7CiAgICAgICAgICAgICAgICAgICAgc3VicGFydC5hcmdzLnB1c2goYXJnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gc3VicGFydDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgX25lZ2F0aW9uX2FyZzogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICBhcmdzICAgICAgICA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZV9zZWxlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5pdmVyc2FsLAogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5IQVNIKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTZWxlY3RvclN1YlBhcnQodG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZSwgImlkIiwgdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmUsIHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2wpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dHJpYiwKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHNldWRvCiAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICBhcmcgICAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgaSAgICAgICAgICAgPSAwLAogICAgICAgICAgICAgICAgICAgIGxlbiAgICAgICAgID0gYXJncy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudE5hbWUsCiAgICAgICAgICAgICAgICAgICAgbGluZSwKICAgICAgICAgICAgICAgICAgICBjb2wsCiAgICAgICAgICAgICAgICAgICAgcGFydDsKCiAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0uTFQoMSkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0uTFQoMSkuc3RhcnRDb2w7CgogICAgICAgICAgICAgICAgd2hpbGUoaSA8IGxlbiAmJiBhcmcgPT09IG51bGwpewoKICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmdzW2ldLmNhbGwodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGFyZyA9PT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRva2VuU3RyZWFtLkxUKDEpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChhcmcudHlwZSA9PSAiZWxlbWVudE5hbWUiKXsKICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gbmV3IFNlbGVjdG9yUGFydChhcmcsIFtdLCBhcmcudG9TdHJpbmcoKSwgbGluZSwgY29sKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcGFydCA9IG5ldyBTZWxlY3RvclBhcnQobnVsbCwgW2FyZ10sIGFyZy50b1N0cmluZygpLCBsaW5lLCBjb2wpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0OwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX2RlY2xhcmF0aW9uOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ICAgID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICBleHByICAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgcHJpbyAgICAgICAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIGVycm9yICAgICAgID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICBpbnZhbGlkICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lPSAiIjsKCiAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IHRoaXMuX3Byb3BlcnR5KCk7CiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IG51bGwpewoKICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkNPTE9OKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcigpOwogICAgICAgICAgICAgICAgICAgIGlmICghZXhwciB8fCBleHByLmxlbmd0aCA9PT0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZXhwZWN0ZWRUb2tlbih0b2tlblN0cmVhbS5MVCgxKSk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBwcmlvID0gdGhpcy5fcHJpbygpOwogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LnRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGFySGFjayAmJiBwcm9wZXJ0eS5oYWNrID09ICIqIiB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLnVuZGVyc2NvcmVIYWNrICYmIHByb3BlcnR5LmhhY2sgPT0gIl8iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS50ZXh0OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsaWRhdGVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGV4cHIpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQgPSBleDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICJwcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAgIHByb3BlcnR5LAogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogICAgICBleHByLAogICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRhbnQ6ICBwcmlvLAogICAgICAgICAgICAgICAgICAgICAgICBsaW5lOiAgICAgICBwcm9wZXJ0eS5saW5lLAogICAgICAgICAgICAgICAgICAgICAgICBjb2w6ICAgICAgICBwcm9wZXJ0eS5jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6ICAgIGludmFsaWQKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF9wcmlvOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHJlc3VsdCAgICAgID0gdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLklNUE9SVEFOVF9TWU0pOwoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX2V4cHI6IGZ1bmN0aW9uKGluRnVuY3Rpb24pewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHZhbHVlcyAgICAgID0gW10sCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgICAgICAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yICAgID0gbnVsbDsKCiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX3Rlcm0oaW5GdW5jdGlvbik7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpewoKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7CgogICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSB0aGlzLl9vcGVyYXRvcihpbkZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG9wZXJhdG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSAvKmVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2gobmV3IFByb3BlcnR5VmFsdWUodmFsdWVQYXJ0cywgdmFsdWVQYXJ0c1swXS5saW5lLCB2YWx1ZVBhcnRzWzBdLmNvbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQYXJ0cyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICB9Ki8KCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fdGVybShpbkZ1bmN0aW9uKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gd2hpbGUodHJ1ZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPiAwID8gbmV3IFByb3BlcnR5VmFsdWUodmFsdWVzLCB2YWx1ZXNbMF0ubGluZSwgdmFsdWVzWzBdLmNvbCkgOiBudWxsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX3Rlcm06IGZ1bmN0aW9uKGluRnVuY3Rpb24pewoKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHVuYXJ5ICAgICAgID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgZW5kQ2hhciAgICAgPSBudWxsLAogICAgICAgICAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgICAgICAgIGxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOwogICAgICAgICAgICAgICAgdW5hcnkgPSB0aGlzLl91bmFyeV9vcGVyYXRvcigpOwogICAgICAgICAgICAgICAgaWYgKHVuYXJ5ICE9PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgY29sID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydENvbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLklFX0ZVTkNUSU9OICYmIHRoaXMub3B0aW9ucy5pZUZpbHRlcnMpewoKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2llX2Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHVuYXJ5ID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5GdW5jdGlvbiAmJiB0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLkxQQVJFTiwgVG9rZW5zLkxCUkFDRSwgVG9rZW5zLkxCUkFDS0VUXSkpewoKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgZW5kQ2hhciA9IHRva2VuLmVuZENoYXI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZSArIHRoaXMuX2V4cHIoaW5GdW5jdGlvbikudGV4dDsKICAgICAgICAgICAgICAgICAgICBpZiAodW5hcnkgPT09IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG9rZW5TdHJlYW0udG9rZW4oKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRDb2w7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMudHlwZShlbmRDaGFyKSk7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gZW5kQ2hhcjsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLk5VTUJFUiwgVG9rZW5zLlBFUkNFTlRBR0UsIFRva2Vucy5MRU5HVEgsCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vucy5BTkdMRSwgVG9rZW5zLlRJTUUsCiAgICAgICAgICAgICAgICAgICAgICAgIFRva2Vucy5GUkVRLCBUb2tlbnMuU1RSSU5HLCBUb2tlbnMuSURFTlQsIFRva2Vucy5VUkksIFRva2Vucy5VTklDT0RFX1JBTkdFXSkpewoKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKHVuYXJ5ID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHRva2VuU3RyZWFtLnRva2VuKCkuc3RhcnRMaW5lOwogICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS50b2tlbigpLnN0YXJ0Q29sOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuX2hleGNvbG9yKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuYXJ5ID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlblN0cmVhbS5MVCgxKS5zdGFydENvbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLkxBKDMpID09IFRva2Vucy5FUVVBTFMgJiYgdGhpcy5vcHRpb25zLmllRmlsdGVycyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9pZV9mdW5jdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuYXJ5ID09PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0b2tlbi5zdGFydExpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSB0b2tlbi5zdGFydENvbDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICE9PSBudWxsID8KICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFByb3BlcnR5VmFsdWVQYXJ0KHVuYXJ5ICE9PSBudWxsID8gdW5hcnkgKyB2YWx1ZSA6IHZhbHVlLCBsaW5lLCBjb2wpIDoKICAgICAgICAgICAgICAgICAgICAgICAgbnVsbDsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfZnVuY3Rpb246IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICBleHByICAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgbHQ7CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5GVU5DVElPTikpewogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgICAgICBleHByID0gdGhpcy5fZXhwcih0cnVlKTsKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgKz0gZXhwcjsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmllRmlsdGVycyAmJiB0b2tlblN0cmVhbS5wZWVrKCkgPT0gVG9rZW5zLkVRVUFMUyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZFdoaXRlc3BhY2UoKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0uTEEoMCkgPT0gVG9rZW5zLkNPTU1BKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkVRVUFMUyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0ID0gdG9rZW5TdHJlYW0ucGVlaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobHQgIT0gVG9rZW5zLkNPTU1BICYmIGx0ICE9IFRva2Vucy5TICYmIGx0ICE9IFRva2Vucy5SUEFSRU4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLmdldCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0ID0gdG9rZW5TdHJlYW0ucGVlaygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFtUb2tlbnMuQ09NTUEsIFRva2Vucy5TXSkpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLlJQQVJFTik7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9ICIpIjsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvblRleHQ7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfaWVfZnVuY3Rpb246IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ID0gbnVsbCwKICAgICAgICAgICAgICAgICAgICBleHByICAgICAgICA9IG51bGwsCiAgICAgICAgICAgICAgICAgICAgbHQ7CiAgICAgICAgICAgICAgICBpZiAodG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5JRV9GVU5DVElPTiwgVG9rZW5zLkZVTkNUSU9OXSkpewogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCA9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CgogICAgICAgICAgICAgICAgICAgIGRvIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkV2hpdGVzcGFjZSgpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblN0cmVhbS5MQSgwKSA9PSBUb2tlbnMuQ09NTUEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9IHRva2VuU3RyZWFtLnRva2VuKCkudmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5JREVOVCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLkVRVUFMUyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uVGV4dCArPSB0b2tlblN0cmVhbS50b2tlbigpLnZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBsdCA9IHRva2VuU3RyZWFtLnBlZWsoKTsKICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobHQgIT0gVG9rZW5zLkNPTU1BICYmIGx0ICE9IFRva2Vucy5TICYmIGx0ICE9IFRva2Vucy5SUEFSRU4pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0uZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvblRleHQgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0ID0gdG9rZW5TdHJlYW0ucGVlaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSh0b2tlblN0cmVhbS5tYXRjaChbVG9rZW5zLkNPTU1BLCBUb2tlbnMuU10pKTsKCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubWF0Y2goVG9rZW5zLlJQQVJFTik7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UZXh0ICs9ICIpIjsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvblRleHQ7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfaGV4Y29sb3I6IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBudWxsLAogICAgICAgICAgICAgICAgICAgIGNvbG9yOwoKICAgICAgICAgICAgICAgIGlmKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5IQVNIKSl7CgogICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICBjb2xvciA9IHRva2VuLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIGlmICghLyNbYS1mMC05XXszLDZ9L2kudGVzdChjb2xvcikpewogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoIkV4cGVjdGVkIGEgaGV4IGNvbG9yIGJ1dCBmb3VuZCAnIiArIGNvbG9yICsgIicgYXQgbGluZSAiICsgdG9rZW4uc3RhcnRMaW5lICsgIiwgY29sICIgKyB0b2tlbi5zdGFydENvbCArICIuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX2tleWZyYW1lczogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgICAgICAgIHR0LAogICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gIiI7CgogICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5LRVlGUkFNRVNfU1lNKTsKICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5TdHJlYW0udG9rZW4oKTsKICAgICAgICAgICAgICAgIGlmICgvXkBcLShbXlwtXSspXC0vLnRlc3QodG9rZW4udmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gUmVnRXhwLiQxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICBuYW1lID0gdGhpcy5fa2V5ZnJhbWVfbmFtZSgpOwoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB0b2tlblN0cmVhbS5tdXN0TWF0Y2goVG9rZW5zLkxCUkFDRSk7CgogICAgICAgICAgICAgICAgdGhpcy5maXJlKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICJzdGFydGtleWZyYW1lcyIsCiAgICAgICAgICAgICAgICAgICAgbmFtZTogICBuYW1lLAogICAgICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgdG9rZW4uc3RhcnRMaW5lLAogICAgICAgICAgICAgICAgICAgIGNvbDogICAgdG9rZW4uc3RhcnRDb2wKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB0dCA9IHRva2VuU3RyZWFtLnBlZWsoKTsKICAgICAgICAgICAgICAgIHdoaWxlKHR0ID09IFRva2Vucy5JREVOVCB8fCB0dCA9PSBUb2tlbnMuUEVSQ0VOVEFHRSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuX2tleWZyYW1lX3J1bGUoKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgICAgIHR0ID0gdG9rZW5TdHJlYW0ucGVlaygpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiZW5ka2V5ZnJhbWVzIiwKICAgICAgICAgICAgICAgICAgICBuYW1lOiAgIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgbGluZTogICB0b2tlbi5zdGFydExpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOiAgICB0b2tlbi5zdGFydENvbAogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuUkJSQUNFKTsKCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfa2V5ZnJhbWVfbmFtZTogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHRva2VuOwoKICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChbVG9rZW5zLklERU5ULCBUb2tlbnMuU1RSSU5HXSk7CiAgICAgICAgICAgICAgICByZXR1cm4gU3ludGF4VW5pdC5mcm9tVG9rZW4odG9rZW5TdHJlYW0udG9rZW4oKSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBfa2V5ZnJhbWVfcnVsZTogZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciB0b2tlblN0cmVhbSA9IHRoaXMuX3Rva2VuU3RyZWFtLAogICAgICAgICAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgICAgICAgIGtleUxpc3QgPSB0aGlzLl9rZXlfbGlzdCgpOwoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAic3RhcnRrZXlmcmFtZXJ1bGUiLAogICAgICAgICAgICAgICAgICAgIGtleXM6ICAga2V5TGlzdCwKICAgICAgICAgICAgICAgICAgICBsaW5lOiAgIGtleUxpc3RbMF0ubGluZSwKICAgICAgICAgICAgICAgICAgICBjb2w6ICAgIGtleUxpc3RbMF0uY29sCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRGVjbGFyYXRpb25zKHRydWUpOwoKICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogICAiZW5ka2V5ZnJhbWVydWxlIiwKICAgICAgICAgICAgICAgICAgICBrZXlzOiAgIGtleUxpc3QsCiAgICAgICAgICAgICAgICAgICAgbGluZTogICBrZXlMaXN0WzBdLmxpbmUsCiAgICAgICAgICAgICAgICAgICAgY29sOiAgICBrZXlMaXN0WzBdLmNvbAogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9LAoKICAgICAgICAgICAgX2tleV9saXN0OiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAga2V5LAogICAgICAgICAgICAgICAgICAgIGtleUxpc3QgPSBbXTsKICAgICAgICAgICAgICAgIGtleUxpc3QucHVzaCh0aGlzLl9rZXkoKSk7CgogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuQ09NTUEpKXsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgICAgIGtleUxpc3QucHVzaCh0aGlzLl9rZXkoKSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4ga2V5TGlzdDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIF9rZXk6IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdG9rZW47CgogICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5QRVJDRU5UQUdFKSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN5bnRheFVuaXQuZnJvbVRva2VuKHRva2VuU3RyZWFtLnRva2VuKCkpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuSURFTlQpKXsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuU3RyZWFtLnRva2VuKCk7CgogICAgICAgICAgICAgICAgICAgIGlmICgvZnJvbXx0by9pLnRlc3QodG9rZW4udmFsdWUpKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN5bnRheFVuaXQuZnJvbVRva2VuKHRva2VuKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLnVuZ2V0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLl91bmV4cGVjdGVkVG9rZW4odG9rZW5TdHJlYW0uTFQoMSkpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBfc2tpcENydWZ0OiBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgd2hpbGUodGhpcy5fdG9rZW5TdHJlYW0ubWF0Y2goW1Rva2Vucy5TLCBUb2tlbnMuQ0RPLCBUb2tlbnMuQ0RDXSkpewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBfcmVhZERlY2xhcmF0aW9uczogZnVuY3Rpb24oY2hlY2tTdGFydCwgcmVhZE1hcmdpbnMpewogICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyZWFtID0gdGhpcy5fdG9rZW5TdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgdHQ7CgoKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgaWYgKGNoZWNrU3RhcnQpewogICAgICAgICAgICAgICAgICAgIHRva2VuU3RyZWFtLm11c3RNYXRjaChUb2tlbnMuTEJSQUNFKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIHRyeSB7CgogICAgICAgICAgICAgICAgICAgIHdoaWxlKHRydWUpewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TRU1JQ09MT04pIHx8IChyZWFkTWFyZ2lucyAmJiB0aGlzLl9tYXJnaW4oKSkpewogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RlY2xhcmF0aW9uKCkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2tlblN0cmVhbS5tYXRjaChUb2tlbnMuU0VNSUNPTE9OKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgdG9rZW5TdHJlYW0ubXVzdE1hdGNoKFRva2Vucy5SQlJBQ0UpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CgogICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBTeW50YXhFcnJvciAmJiAhdGhpcy5vcHRpb25zLnN0cmljdCl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAgICAgICAiZXJyb3IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICAgICAgZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAgICBleC5tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICAgICAgZXgubGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbDogICAgICAgIGV4LmNvbAogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgdHQgPSB0b2tlblN0cmVhbS5hZHZhbmNlKFtUb2tlbnMuU0VNSUNPTE9OLCBUb2tlbnMuUkJSQUNFXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dCA9PSBUb2tlbnMuU0VNSUNPTE9OKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWREZWNsYXJhdGlvbnMoZmFsc2UsIHJlYWRNYXJnaW5zKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0dCAhPSBUb2tlbnMuUkJSQUNFKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9yZWFkV2hpdGVzcGFjZTogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgICAgICB2YXIgdG9rZW5TdHJlYW0gPSB0aGlzLl90b2tlblN0cmVhbSwKICAgICAgICAgICAgICAgICAgICB3cyA9ICIiOwoKICAgICAgICAgICAgICAgIHdoaWxlKHRva2VuU3RyZWFtLm1hdGNoKFRva2Vucy5TKSl7CiAgICAgICAgICAgICAgICAgICAgd3MgKz0gdG9rZW5TdHJlYW0udG9rZW4oKS52YWx1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gd3M7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF91bmV4cGVjdGVkVG9rZW46IGZ1bmN0aW9uKHRva2VuKXsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcigiVW5leHBlY3RlZCB0b2tlbiAnIiArIHRva2VuLnZhbHVlICsgIicgYXQgbGluZSAiICsgdG9rZW4uc3RhcnRMaW5lICsgIiwgY29sICIgKyB0b2tlbi5zdGFydENvbCArICIuIiwgdG9rZW4uc3RhcnRMaW5lLCB0b2tlbi5zdGFydENvbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF92ZXJpZnlFbmQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdG9rZW5TdHJlYW0uTEEoMSkgIT0gVG9rZW5zLkVPRil7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5leHBlY3RlZFRva2VuKHRoaXMuX3Rva2VuU3RyZWFtLkxUKDEpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgX3ZhbGlkYXRlUHJvcGVydHk6IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSl7CiAgICAgICAgICAgICAgICBWYWxpZGF0aW9uLnZhbGlkYXRlKHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24oaW5wdXQpewogICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5TdHJlYW0gPSBuZXcgVG9rZW5TdHJlYW0oaW5wdXQsIFRva2Vucyk7CiAgICAgICAgICAgICAgICB0aGlzLl9zdHlsZXNoZWV0KCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBwYXJzZVN0eWxlU2hlZXQ6IGZ1bmN0aW9uKGlucHV0KXsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKGlucHV0KTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHBhcnNlTWVkaWFRdWVyeTogZnVuY3Rpb24oaW5wdXQpewogICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5TdHJlYW0gPSBuZXcgVG9rZW5TdHJlYW0oaW5wdXQsIFRva2Vucyk7CiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fbWVkaWFfcXVlcnkoKTsKICAgICAgICAgICAgICAgIHRoaXMuX3ZlcmlmeUVuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGFyc2VQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbihpbnB1dCl7CgogICAgICAgICAgICAgICAgdGhpcy5fdG9rZW5TdHJlYW0gPSBuZXcgVG9rZW5TdHJlYW0oaW5wdXQsIFRva2Vucyk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwoKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9leHByKCk7CiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkV2hpdGVzcGFjZSgpOwogICAgICAgICAgICAgICAgdGhpcy5fdmVyaWZ5RW5kKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICB9LAogICAgICAgICAgICBwYXJzZVJ1bGU6IGZ1bmN0aW9uKGlucHV0KXsKICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOwogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcnVsZXNldCgpOwogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICAgICAgICAgIHRoaXMuX3ZlcmlmeUVuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcGFyc2VTZWxlY3RvcjogZnVuY3Rpb24oaW5wdXQpewoKICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOwogICAgICAgICAgICAgICAgdGhpcy5fcmVhZFdoaXRlc3BhY2UoKTsKCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fc2VsZWN0b3IoKTsKICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgICAgICB0aGlzLl92ZXJpZnlFbmQoKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHBhcnNlU3R5bGVBdHRyaWJ1dGU6IGZ1bmN0aW9uKGlucHV0KXsKICAgICAgICAgICAgICAgIGlucHV0ICs9ICJ9IjsgLy8gZm9yIGVycm9yIHJlY292ZXJ5IGluIF9yZWFkRGVjbGFyYXRpb25zKCkKICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuU3RyZWFtID0gbmV3IFRva2VuU3RyZWFtKGlucHV0LCBUb2tlbnMpOwogICAgICAgICAgICAgICAgdGhpcy5fcmVhZERlY2xhcmF0aW9ucygpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIGZvciAocHJvcCBpbiBhZGRpdGlvbnMpewogICAgICAgIGlmIChhZGRpdGlvbnMuaGFzT3duUHJvcGVydHkocHJvcCkpewogICAgICAgICAgICBwcm90b1twcm9wXSA9IGFkZGl0aW9uc1twcm9wXTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHByb3RvOwp9KCk7CnZhciBQcm9wZXJ0aWVzID0gewogICAgImFsaWduLWl0ZW1zIiAgICAgICAgICAgICAgICAgICA6ICJmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2giLAogICAgImFsaWduLWNvbnRlbnQiICAgICAgICAgICAgICAgICA6ICJmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBzcGFjZS1iZXR3ZWVuIHwgc3BhY2UtYXJvdW5kIHwgc3RyZXRjaCIsCiAgICAiYWxpZ24tc2VsZiIgICAgICAgICAgICAgICAgICAgIDogImF1dG8gfCBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2giLAogICAgIi13ZWJraXQtYWxpZ24taXRlbXMiICAgICAgICAgICA6ICJmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2giLAogICAgIi13ZWJraXQtYWxpZ24tY29udGVudCIgICAgICAgICA6ICJmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBzcGFjZS1iZXR3ZWVuIHwgc3BhY2UtYXJvdW5kIHwgc3RyZXRjaCIsCiAgICAiLXdlYmtpdC1hbGlnbi1zZWxmIiAgICAgICAgICAgIDogImF1dG8gfCBmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBiYXNlbGluZSB8IHN0cmV0Y2giLAogICAgImFsaWdubWVudC1hZGp1c3QiICAgICAgICAgICAgICA6ICJhdXRvIHwgYmFzZWxpbmUgfCBiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVkZ2UgfCBtaWRkbGUgfCBjZW50cmFsIHwgYWZ0ZXItZWRnZSB8IHRleHQtYWZ0ZXItZWRnZSB8IGlkZW9ncmFwaGljIHwgYWxwaGFiZXRpYyB8IGhhbmdpbmcgfCBtYXRoZW1hdGljYWwgfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsCiAgICAiYWxpZ25tZW50LWJhc2VsaW5lIiAgICAgICAgICAgIDogImJhc2VsaW5lIHwgdXNlLXNjcmlwdCB8IGJlZm9yZS1lZGdlIHwgdGV4dC1iZWZvcmUtZWRnZSB8IGFmdGVyLWVkZ2UgfCB0ZXh0LWFmdGVyLWVkZ2UgfCBjZW50cmFsIHwgbWlkZGxlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwgaGFuZ2luZyB8IG1hdGhlbWF0aWNhbCIsCiAgICAiYW5pbWF0aW9uIiAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJhbmltYXRpb24tZGVsYXkiICAgICAgICAgICAgICAgOiB7IG11bHRpOiAiPHRpbWU+IiwgY29tbWE6IHRydWUgfSwKICAgICJhbmltYXRpb24tZGlyZWN0aW9uIiAgICAgICAgICAgOiB7IG11bHRpOiAibm9ybWFsIHwgcmV2ZXJzZSB8IGFsdGVybmF0ZSB8IGFsdGVybmF0ZS1yZXZlcnNlIiwgY29tbWE6IHRydWUgfSwKICAgICJhbmltYXRpb24tZHVyYXRpb24iICAgICAgICAgICAgOiB7IG11bHRpOiAiPHRpbWU+IiwgY29tbWE6IHRydWUgfSwKICAgICJhbmltYXRpb24tZmlsbC1tb2RlIiAgICAgICAgICAgOiB7IG11bHRpOiAibm9uZSB8IGZvcndhcmRzIHwgYmFja3dhcmRzIHwgYm90aCIsIGNvbW1hOiB0cnVlIH0sCiAgICAiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIgICAgIDogeyBtdWx0aTogIjxudW1iZXI+IHwgaW5maW5pdGUiLCBjb21tYTogdHJ1ZSB9LAogICAgImFuaW1hdGlvbi1uYW1lIiAgICAgICAgICAgICAgICA6IHsgbXVsdGk6ICJub25lIHwgPGlkZW50PiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiYW5pbWF0aW9uLXBsYXktc3RhdGUiICAgICAgICAgIDogeyBtdWx0aTogInJ1bm5pbmcgfCBwYXVzZWQiLCBjb21tYTogdHJ1ZSB9LAogICAgImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24iICAgICA6IDEsCiAgICAiLW1vei1hbmltYXRpb24tZGVsYXkiICAgICAgICAgICAgICAgOiB7IG11bHRpOiAiPHRpbWU+IiwgY29tbWE6IHRydWUgfSwKICAgICItbW96LWFuaW1hdGlvbi1kaXJlY3Rpb24iICAgICAgICAgICA6IHsgbXVsdGk6ICJub3JtYWwgfCByZXZlcnNlIHwgYWx0ZXJuYXRlIHwgYWx0ZXJuYXRlLXJldmVyc2UiLCBjb21tYTogdHJ1ZSB9LAogICAgIi1tb3otYW5pbWF0aW9uLWR1cmF0aW9uIiAgICAgICAgICAgIDogeyBtdWx0aTogIjx0aW1lPiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW1vei1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50IiAgICAgOiB7IG11bHRpOiAiPG51bWJlcj4gfCBpbmZpbml0ZSIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW1vei1hbmltYXRpb24tbmFtZSIgICAgICAgICAgICAgICAgOiB7IG11bHRpOiAibm9uZSB8IDxpZGVudD4iLCBjb21tYTogdHJ1ZSB9LAogICAgIi1tb3otYW5pbWF0aW9uLXBsYXktc3RhdGUiICAgICAgICAgIDogeyBtdWx0aTogInJ1bm5pbmcgfCBwYXVzZWQiLCBjb21tYTogdHJ1ZSB9LAoKICAgICItbXMtYW5pbWF0aW9uLWRlbGF5IiAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjx0aW1lPiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW1zLWFuaW1hdGlvbi1kaXJlY3Rpb24iICAgICAgICAgICA6IHsgbXVsdGk6ICJub3JtYWwgfCByZXZlcnNlIHwgYWx0ZXJuYXRlIHwgYWx0ZXJuYXRlLXJldmVyc2UiLCBjb21tYTogdHJ1ZSB9LAogICAgIi1tcy1hbmltYXRpb24tZHVyYXRpb24iICAgICAgICAgICAgOiB7IG11bHRpOiAiPHRpbWU+IiwgY29tbWE6IHRydWUgfSwKICAgICItbXMtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIgICAgIDogeyBtdWx0aTogIjxudW1iZXI+IHwgaW5maW5pdGUiLCBjb21tYTogdHJ1ZSB9LAogICAgIi1tcy1hbmltYXRpb24tbmFtZSIgICAgICAgICAgICAgICAgOiB7IG11bHRpOiAibm9uZSB8IDxpZGVudD4iLCBjb21tYTogdHJ1ZSB9LAogICAgIi1tcy1hbmltYXRpb24tcGxheS1zdGF0ZSIgICAgICAgICAgOiB7IG11bHRpOiAicnVubmluZyB8IHBhdXNlZCIsIGNvbW1hOiB0cnVlIH0sCgogICAgIi13ZWJraXQtYW5pbWF0aW9uLWRlbGF5IiAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjx0aW1lPiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uIiAgICAgICAgICAgOiB7IG11bHRpOiAibm9ybWFsIHwgcmV2ZXJzZSB8IGFsdGVybmF0ZSB8IGFsdGVybmF0ZS1yZXZlcnNlIiwgY29tbWE6IHRydWUgfSwKICAgICItd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbiIgICAgICAgICAgICA6IHsgbXVsdGk6ICI8dGltZT4iLCBjb21tYTogdHJ1ZSB9LAogICAgIi13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZSIgICAgICAgICAgIDogeyBtdWx0aTogIm5vbmUgfCBmb3J3YXJkcyB8IGJhY2t3YXJkcyB8IGJvdGgiLCBjb21tYTogdHJ1ZSB9LAogICAgIi13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIgICAgIDogeyBtdWx0aTogIjxudW1iZXI+IHwgaW5maW5pdGUiLCBjb21tYTogdHJ1ZSB9LAogICAgIi13ZWJraXQtYW5pbWF0aW9uLW5hbWUiICAgICAgICAgICAgICAgIDogeyBtdWx0aTogIm5vbmUgfCA8aWRlbnQ+IiwgY29tbWE6IHRydWUgfSwKICAgICItd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlIiAgICAgICAgICA6IHsgbXVsdGk6ICJydW5uaW5nIHwgcGF1c2VkIiwgY29tbWE6IHRydWUgfSwKCiAgICAiLW8tYW5pbWF0aW9uLWRlbGF5IiAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjx0aW1lPiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW8tYW5pbWF0aW9uLWRpcmVjdGlvbiIgICAgICAgICAgIDogeyBtdWx0aTogIm5vcm1hbCB8IHJldmVyc2UgfCBhbHRlcm5hdGUgfCBhbHRlcm5hdGUtcmV2ZXJzZSIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW8tYW5pbWF0aW9uLWR1cmF0aW9uIiAgICAgICAgICAgIDogeyBtdWx0aTogIjx0aW1lPiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW8tYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIgICAgIDogeyBtdWx0aTogIjxudW1iZXI+IHwgaW5maW5pdGUiLCBjb21tYTogdHJ1ZSB9LAogICAgIi1vLWFuaW1hdGlvbi1uYW1lIiAgICAgICAgICAgICAgICA6IHsgbXVsdGk6ICJub25lIHwgPGlkZW50PiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiLW8tYW5pbWF0aW9uLXBsYXktc3RhdGUiICAgICAgICAgIDogeyBtdWx0aTogInJ1bm5pbmcgfCBwYXVzZWQiLCBjb21tYTogdHJ1ZSB9LAoKICAgICJhcHBlYXJhbmNlIiAgICAgICAgICAgICAgICAgICAgOiAiaWNvbiB8IHdpbmRvdyB8IGRlc2t0b3AgfCB3b3Jrc3BhY2UgfCBkb2N1bWVudCB8IHRvb2x0aXAgfCBkaWFsb2cgfCBidXR0b24gfCBwdXNoLWJ1dHRvbiB8IGh5cGVybGluayB8IHJhZGlvLWJ1dHRvbiB8IGNoZWNrYm94IHwgbWVudS1pdGVtIHwgdGFiIHwgbWVudSB8IG1lbnViYXIgfCBwdWxsLWRvd24tbWVudSB8IHBvcC11cC1tZW51IHwgbGlzdC1tZW51IHwgcmFkaW8tZ3JvdXAgfCBjaGVja2JveC1ncm91cCB8IG91dGxpbmUtdHJlZSB8IHJhbmdlIHwgZmllbGQgfCBjb21iby1ib3ggfCBzaWduYXR1cmUgfCBwYXNzd29yZCB8IG5vcm1hbCB8IG5vbmUgfCBpbmhlcml0IiwKICAgICJhemltdXRoIiAgICAgICAgICAgICAgICAgICAgICAgOiBmdW5jdGlvbiAoZXhwcmVzc2lvbikgewogICAgICAgIHZhciBzaW1wbGUgICAgICA9ICI8YW5nbGU+IHwgbGVmdHdhcmRzIHwgcmlnaHR3YXJkcyB8IGluaGVyaXQiLAogICAgICAgICAgICBkaXJlY3Rpb24gICA9ICJsZWZ0LXNpZGUgfCBmYXItbGVmdCB8IGxlZnQgfCBjZW50ZXItbGVmdCB8IGNlbnRlciB8IGNlbnRlci1yaWdodCB8IHJpZ2h0IHwgZmFyLXJpZ2h0IHwgcmlnaHQtc2lkZSIsCiAgICAgICAgICAgIGJlaGluZCAgICAgID0gZmFsc2UsCiAgICAgICAgICAgIHZhbGlkICAgICAgID0gZmFsc2UsCiAgICAgICAgICAgIHBhcnQ7CgogICAgICAgIGlmICghVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHNpbXBsZSkpIHsKICAgICAgICAgICAgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCAiYmVoaW5kIikpIHsKICAgICAgICAgICAgICAgIGJlaGluZCA9IHRydWU7CiAgICAgICAgICAgICAgICB2YWxpZCA9IHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgZGlyZWN0aW9uKSkgewogICAgICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKCFiZWhpbmQpIHsKICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgImJlaGluZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgcGFydCA9IGV4cHJlc3Npb24ubmV4dCgpOwogICAgICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgJyIgKyBwYXJ0ICsgIicuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCAoPCdhemltdXRoJz4pIGJ1dCBmb3VuZCAnIiArIHBhcnQgKyAiJy4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAiYmFja2ZhY2UtdmlzaWJpbGl0eSIgICAgICAgICAgIDogInZpc2libGUgfCBoaWRkZW4iLAogICAgImJhY2tncm91bmQiICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiYmFja2dyb3VuZC1hdHRhY2htZW50IiAgICAgICAgIDogeyBtdWx0aTogIjxhdHRhY2htZW50PiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiYmFja2dyb3VuZC1jbGlwIiAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjxib3g+IiwgY29tbWE6IHRydWUgfSwKICAgICJiYWNrZ3JvdW5kLWNvbG9yIiAgICAgICAgICAgICAgOiAiPGNvbG9yPiB8IGluaGVyaXQiLAogICAgImJhY2tncm91bmQtaW1hZ2UiICAgICAgICAgICAgICA6IHsgbXVsdGk6ICI8YmctaW1hZ2U+IiwgY29tbWE6IHRydWUgfSwKICAgICJiYWNrZ3JvdW5kLW9yaWdpbiIgICAgICAgICAgICAgOiB7IG11bHRpOiAiPGJveD4iLCBjb21tYTogdHJ1ZSB9LAogICAgImJhY2tncm91bmQtcG9zaXRpb24iICAgICAgICAgICA6IHsgbXVsdGk6ICI8YmctcG9zaXRpb24+IiwgY29tbWE6IHRydWUgfSwKICAgICJiYWNrZ3JvdW5kLXJlcGVhdCIgICAgICAgICAgICAgOiB7IG11bHRpOiAiPHJlcGVhdC1zdHlsZT4iIH0sCiAgICAiYmFja2dyb3VuZC1zaXplIiAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjxiZy1zaXplPiIsIGNvbW1hOiB0cnVlIH0sCiAgICAiYmFzZWxpbmUtc2hpZnQiICAgICAgICAgICAgICAgIDogImJhc2VsaW5lIHwgc3ViIHwgc3VwZXIgfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsCiAgICAiYmVoYXZpb3IiICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJiaW5kaW5nIiAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImJsZWVkIiAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8bGVuZ3RoPiIsCiAgICAiYm9va21hcmstbGFiZWwiICAgICAgICAgICAgICAgIDogIjxjb250ZW50PiB8IDxhdHRyPiB8IDxzdHJpbmc+IiwKICAgICJib29rbWFyay1sZXZlbCIgICAgICAgICAgICAgICAgOiAibm9uZSB8IDxpbnRlZ2VyPiIsCiAgICAiYm9va21hcmstc3RhdGUiICAgICAgICAgICAgICAgIDogIm9wZW4gfCBjbG9zZWQiLAogICAgImJvb2ttYXJrLXRhcmdldCIgICAgICAgICAgICAgICA6ICJub25lIHwgPHVyaT4gfCA8YXR0cj4iLAogICAgImJvcmRlciIgICAgICAgICAgICAgICAgICAgICAgICA6ICI8Ym9yZGVyLXdpZHRoPiB8fCA8Ym9yZGVyLXN0eWxlPiB8fCA8Y29sb3I+IiwKICAgICJib3JkZXItYm90dG9tIiAgICAgICAgICAgICAgICAgOiAiPGJvcmRlci13aWR0aD4gfHwgPGJvcmRlci1zdHlsZT4gfHwgPGNvbG9yPiIsCiAgICAiYm9yZGVyLWJvdHRvbS1jb2xvciIgICAgICAgICAgIDogIjxjb2xvcj4gfCBpbmhlcml0IiwKICAgICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiAgICAgOiAgIjx4LW9uZS1yYWRpdXM+IiwKICAgICJib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1cyIgICAgOiAgIjx4LW9uZS1yYWRpdXM+IiwKICAgICJib3JkZXItYm90dG9tLXN0eWxlIiAgICAgICAgICAgOiAiPGJvcmRlci1zdHlsZT4iLAogICAgImJvcmRlci1ib3R0b20td2lkdGgiICAgICAgICAgICA6ICI8Ym9yZGVyLXdpZHRoPiIsCiAgICAiYm9yZGVyLWNvbGxhcHNlIiAgICAgICAgICAgICAgIDogImNvbGxhcHNlIHwgc2VwYXJhdGUgfCBpbmhlcml0IiwKICAgICJib3JkZXItY29sb3IiICAgICAgICAgICAgICAgICAgOiB7IG11bHRpOiAiPGNvbG9yPiB8IGluaGVyaXQiLCBtYXg6IDQgfSwKICAgICJib3JkZXItaW1hZ2UiICAgICAgICAgICAgICAgICAgOiAxLAogICAgImJvcmRlci1pbWFnZS1vdXRzZXQiICAgICAgICAgICA6IHsgbXVsdGk6ICI8bGVuZ3RoPiB8IDxudW1iZXI+IiwgbWF4OiA0IH0sCiAgICAiYm9yZGVyLWltYWdlLXJlcGVhdCIgICAgICAgICAgIDogeyBtdWx0aTogInN0cmV0Y2ggfCByZXBlYXQgfCByb3VuZCIsIG1heDogMiB9LAogICAgImJvcmRlci1pbWFnZS1zbGljZSIgICAgICAgICAgICA6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKCiAgICAgICAgdmFyIHZhbGlkICAgPSBmYWxzZSwKICAgICAgICAgICAgbnVtZXJpYyA9ICI8bnVtYmVyPiB8IDxwZXJjZW50YWdlPiIsCiAgICAgICAgICAgIGZpbGwgICAgPSBmYWxzZSwKICAgICAgICAgICAgY291bnQgICA9IDAsCiAgICAgICAgICAgIG1heCAgICAgPSA0LAogICAgICAgICAgICBwYXJ0OwoKICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sICJmaWxsIikpIHsKICAgICAgICAgICAgZmlsbCA9IHRydWU7CiAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHdoaWxlIChleHByZXNzaW9uLmhhc05leHQoKSAmJiBjb3VudCA8IG1heCkgewogICAgICAgICAgICB2YWxpZCA9IFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCBudW1lcmljKTsKICAgICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291bnQrKzsKICAgICAgICB9CgoKICAgICAgICBpZiAoIWZpbGwpIHsKICAgICAgICAgICAgVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sICJmaWxsIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGV4cHJlc3Npb24uaGFzTmV4dCgpKSB7CiAgICAgICAgICAgIHBhcnQgPSBleHByZXNzaW9uLm5leHQoKTsKICAgICAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kICciICsgcGFydCArICInLiIsIHBhcnQubGluZSwgcGFydC5jb2wpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKFs8bnVtYmVyPiB8IDxwZXJjZW50YWdlPl17MSw0fSAmJiBmaWxsPykgYnV0IGZvdW5kICciICsgcGFydCArICInLiIsIHBhcnQubGluZSwgcGFydC5jb2wpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgICJib3JkZXItaW1hZ2Utc291cmNlIiAgICAgICAgICAgOiAiPGltYWdlPiB8IG5vbmUiLAogICAgImJvcmRlci1pbWFnZS13aWR0aCIgICAgICAgICAgICA6IHsgbXVsdGk6ICI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IDxudW1iZXI+IHwgYXV0byIsIG1heDogNCB9LAogICAgImJvcmRlci1sZWZ0IiAgICAgICAgICAgICAgICAgICA6ICI8Ym9yZGVyLXdpZHRoPiB8fCA8Ym9yZGVyLXN0eWxlPiB8fCA8Y29sb3I+IiwKICAgICJib3JkZXItbGVmdC1jb2xvciIgICAgICAgICAgICAgOiAiPGNvbG9yPiB8IGluaGVyaXQiLAogICAgImJvcmRlci1sZWZ0LXN0eWxlIiAgICAgICAgICAgICA6ICI8Ym9yZGVyLXN0eWxlPiIsCiAgICAiYm9yZGVyLWxlZnQtd2lkdGgiICAgICAgICAgICAgIDogIjxib3JkZXItd2lkdGg+IiwKICAgICJib3JkZXItcmFkaXVzIiAgICAgICAgICAgICAgICAgOiBmdW5jdGlvbihleHByZXNzaW9uKSB7CgogICAgICAgIHZhciB2YWxpZCAgID0gZmFsc2UsCiAgICAgICAgICAgIHNpbXBsZSA9ICI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQiLAogICAgICAgICAgICBzbGFzaCAgID0gZmFsc2UsCiAgICAgICAgICAgIGZpbGwgICAgPSBmYWxzZSwKICAgICAgICAgICAgY291bnQgICA9IDAsCiAgICAgICAgICAgIG1heCAgICAgPSA4LAogICAgICAgICAgICBwYXJ0OwoKICAgICAgICB3aGlsZSAoZXhwcmVzc2lvbi5oYXNOZXh0KCkgJiYgY291bnQgPCBtYXgpIHsKICAgICAgICAgICAgdmFsaWQgPSBWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgc2ltcGxlKTsKICAgICAgICAgICAgaWYgKCF2YWxpZCkgewoKICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnBlZWsoKSA9PSAiLyIgJiYgY291bnQgPiAwICYmICFzbGFzaCkgewogICAgICAgICAgICAgICAgICAgIHNsYXNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBtYXggPSBjb3VudCArIDU7CiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5uZXh0KCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgfQoKICAgICAgICBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgcGFydCA9IGV4cHJlc3Npb24ubmV4dCgpOwogICAgICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgJyIgKyBwYXJ0ICsgIicuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCAoPCdib3JkZXItcmFkaXVzJz4pIGJ1dCBmb3VuZCAnIiArIHBhcnQgKyAiJy4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAiYm9yZGVyLXJpZ2h0IiAgICAgICAgICAgICAgICAgIDogIjxib3JkZXItd2lkdGg+IHx8IDxib3JkZXItc3R5bGU+IHx8IDxjb2xvcj4iLAogICAgImJvcmRlci1yaWdodC1jb2xvciIgICAgICAgICAgICA6ICI8Y29sb3I+IHwgaW5oZXJpdCIsCiAgICAiYm9yZGVyLXJpZ2h0LXN0eWxlIiAgICAgICAgICAgIDogIjxib3JkZXItc3R5bGU+IiwKICAgICJib3JkZXItcmlnaHQtd2lkdGgiICAgICAgICAgICAgOiAiPGJvcmRlci13aWR0aD4iLAogICAgImJvcmRlci1zcGFjaW5nIiAgICAgICAgICAgICAgICA6IHsgbXVsdGk6ICI8bGVuZ3RoPiB8IGluaGVyaXQiLCBtYXg6IDIgfSwKICAgICJib3JkZXItc3R5bGUiICAgICAgICAgICAgICAgICAgOiB7IG11bHRpOiAiPGJvcmRlci1zdHlsZT4iLCBtYXg6IDQgfSwKICAgICJib3JkZXItdG9wIiAgICAgICAgICAgICAgICAgICAgOiAiPGJvcmRlci13aWR0aD4gfHwgPGJvcmRlci1zdHlsZT4gfHwgPGNvbG9yPiIsCiAgICAiYm9yZGVyLXRvcC1jb2xvciIgICAgICAgICAgICAgIDogIjxjb2xvcj4gfCBpbmhlcml0IiwKICAgICJib3JkZXItdG9wLWxlZnQtcmFkaXVzIiAgICAgICAgOiAiPHgtb25lLXJhZGl1cz4iLAogICAgImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiAgICAgICA6ICI8eC1vbmUtcmFkaXVzPiIsCiAgICAiYm9yZGVyLXRvcC1zdHlsZSIgICAgICAgICAgICAgIDogIjxib3JkZXItc3R5bGU+IiwKICAgICJib3JkZXItdG9wLXdpZHRoIiAgICAgICAgICAgICAgOiAiPGJvcmRlci13aWR0aD4iLAogICAgImJvcmRlci13aWR0aCIgICAgICAgICAgICAgICAgICA6IHsgbXVsdGk6ICI8Ym9yZGVyLXdpZHRoPiIsIG1heDogNCB9LAogICAgImJvdHRvbSIgICAgICAgICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgIi1tb3otYm94LWFsaWduIiAgICAgICAgICAgICAgICA6ICJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsCiAgICAiLW1vei1ib3gtZGVjb3JhdGlvbi1icmVhayIgICAgIDogInNsaWNlIHxjbG9uZSIsCiAgICAiLW1vei1ib3gtZGlyZWN0aW9uIiAgICAgICAgICAgIDogIm5vcm1hbCB8IHJldmVyc2UgfCBpbmhlcml0IiwKICAgICItbW96LWJveC1mbGV4IiAgICAgICAgICAgICAgICAgOiAiPG51bWJlcj4iLAogICAgIi1tb3otYm94LWZsZXgtZ3JvdXAiICAgICAgICAgICA6ICI8aW50ZWdlcj4iLAogICAgIi1tb3otYm94LWxpbmVzIiAgICAgICAgICAgICAgICA6ICJzaW5nbGUgfCBtdWx0aXBsZSIsCiAgICAiLW1vei1ib3gtb3JkaW5hbC1ncm91cCIgICAgICAgIDogIjxpbnRlZ2VyPiIsCiAgICAiLW1vei1ib3gtb3JpZW50IiAgICAgICAgICAgICAgIDogImhvcml6b250YWwgfCB2ZXJ0aWNhbCB8IGlubGluZS1heGlzIHwgYmxvY2stYXhpcyB8IGluaGVyaXQiLAogICAgIi1tb3otYm94LXBhY2siICAgICAgICAgICAgICAgICA6ICJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGp1c3RpZnkiLAogICAgIi13ZWJraXQtYm94LWFsaWduIiAgICAgICAgICAgICA6ICJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGJhc2VsaW5lIHwgc3RyZXRjaCIsCiAgICAiLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhayIgIDogInNsaWNlIHxjbG9uZSIsCiAgICAiLXdlYmtpdC1ib3gtZGlyZWN0aW9uIiAgICAgICAgIDogIm5vcm1hbCB8IHJldmVyc2UgfCBpbmhlcml0IiwKICAgICItd2Via2l0LWJveC1mbGV4IiAgICAgICAgICAgICAgOiAiPG51bWJlcj4iLAogICAgIi13ZWJraXQtYm94LWZsZXgtZ3JvdXAiICAgICAgICA6ICI8aW50ZWdlcj4iLAogICAgIi13ZWJraXQtYm94LWxpbmVzIiAgICAgICAgICAgICA6ICJzaW5nbGUgfCBtdWx0aXBsZSIsCiAgICAiLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cCIgICAgIDogIjxpbnRlZ2VyPiIsCiAgICAiLXdlYmtpdC1ib3gtb3JpZW50IiAgICAgICAgICAgIDogImhvcml6b250YWwgfCB2ZXJ0aWNhbCB8IGlubGluZS1heGlzIHwgYmxvY2stYXhpcyB8IGluaGVyaXQiLAogICAgIi13ZWJraXQtYm94LXBhY2siICAgICAgICAgICAgICA6ICJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGp1c3RpZnkiLAogICAgImJveC1zaGFkb3ciICAgICAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7CiAgICAgICAgdmFyIHJlc3VsdCAgICAgID0gZmFsc2UsCiAgICAgICAgICAgIHBhcnQ7CgogICAgICAgIGlmICghVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sICJub25lIikpIHsKICAgICAgICAgICAgVmFsaWRhdGlvbi5tdWx0aVByb3BlcnR5KCI8c2hhZG93PiIsIGV4cHJlc3Npb24sIHRydWUsIEluZmluaXR5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBleHByZXNzaW9uLm5leHQoKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgJyIgKyBwYXJ0ICsgIicuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgImJveC1zaXppbmciICAgICAgICAgICAgICAgICAgICA6ICJjb250ZW50LWJveCB8IGJvcmRlci1ib3ggfCBpbmhlcml0IiwKICAgICJicmVhay1hZnRlciIgICAgICAgICAgICAgICAgICAgOiAiYXV0byB8IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgcGFnZSB8IGNvbHVtbiB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4iLAogICAgImJyZWFrLWJlZm9yZSIgICAgICAgICAgICAgICAgICA6ICJhdXRvIHwgYWx3YXlzIHwgYXZvaWQgfCBsZWZ0IHwgcmlnaHQgfCBwYWdlIHwgY29sdW1uIHwgYXZvaWQtcGFnZSB8IGF2b2lkLWNvbHVtbiIsCiAgICAiYnJlYWstaW5zaWRlIiAgICAgICAgICAgICAgICAgIDogImF1dG8gfCBhdm9pZCB8IGF2b2lkLXBhZ2UgfCBhdm9pZC1jb2x1bW4iLAogICAgImNhcHRpb24tc2lkZSIgICAgICAgICAgICAgICAgICA6ICJ0b3AgfCBib3R0b20gfCBpbmhlcml0IiwKICAgICJjbGVhciIgICAgICAgICAgICAgICAgICAgICAgICAgOiAibm9uZSB8IHJpZ2h0IHwgbGVmdCB8IGJvdGggfCBpbmhlcml0IiwKICAgICJjbGlwIiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImNvbG9yIiAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8Y29sb3I+IHwgaW5oZXJpdCIsCiAgICAiY29sb3ItcHJvZmlsZSIgICAgICAgICAgICAgICAgIDogMSwKICAgICJjb2x1bW4tY291bnQiICAgICAgICAgICAgICAgICAgOiAiPGludGVnZXI+IHwgYXV0byIsICAgICAgICAgICAgICAgICAgICAgIC8vaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1tdWx0aWNvbC8KICAgICJjb2x1bW4tZmlsbCIgICAgICAgICAgICAgICAgICAgOiAiYXV0byB8IGJhbGFuY2UiLAogICAgImNvbHVtbi1nYXAiICAgICAgICAgICAgICAgICAgICA6ICI8bGVuZ3RoPiB8IG5vcm1hbCIsCiAgICAiY29sdW1uLXJ1bGUiICAgICAgICAgICAgICAgICAgIDogIjxib3JkZXItd2lkdGg+IHx8IDxib3JkZXItc3R5bGU+IHx8IDxjb2xvcj4iLAogICAgImNvbHVtbi1ydWxlLWNvbG9yIiAgICAgICAgICAgICA6ICI8Y29sb3I+IiwKICAgICJjb2x1bW4tcnVsZS1zdHlsZSIgICAgICAgICAgICAgOiAiPGJvcmRlci1zdHlsZT4iLAogICAgImNvbHVtbi1ydWxlLXdpZHRoIiAgICAgICAgICAgICA6ICI8Ym9yZGVyLXdpZHRoPiIsCiAgICAiY29sdW1uLXNwYW4iICAgICAgICAgICAgICAgICAgIDogIm5vbmUgfCBhbGwiLAogICAgImNvbHVtbi13aWR0aCIgICAgICAgICAgICAgICAgICA6ICI8bGVuZ3RoPiB8IGF1dG8iLAogICAgImNvbHVtbnMiICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiY29udGVudCIgICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJjb3VudGVyLWluY3JlbWVudCIgICAgICAgICAgICAgOiAxLAogICAgImNvdW50ZXItcmVzZXQiICAgICAgICAgICAgICAgICA6IDEsCiAgICAiY3JvcCIgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjxzaGFwZT4gfCBhdXRvIiwKICAgICJjdWUiICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiY3VlLWFmdGVyIHwgY3VlLWJlZm9yZSB8IGluaGVyaXQiLAogICAgImN1ZS1hZnRlciIgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiY3VlLWJlZm9yZSIgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJjdXJzb3IiICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImRpcmVjdGlvbiIgICAgICAgICAgICAgICAgICAgICA6ICJsdHIgfCBydGwgfCBpbmhlcml0IiwKICAgICJkaXNwbGF5IiAgICAgICAgICAgICAgICAgICAgICAgOiAiaW5saW5lIHwgYmxvY2sgfCBsaXN0LWl0ZW0gfCBpbmxpbmUtYmxvY2sgfCB0YWJsZSB8IGlubGluZS10YWJsZSB8IHRhYmxlLXJvdy1ncm91cCB8IHRhYmxlLWhlYWRlci1ncm91cCB8IHRhYmxlLWZvb3Rlci1ncm91cCB8IHRhYmxlLXJvdyB8IHRhYmxlLWNvbHVtbi1ncm91cCB8IHRhYmxlLWNvbHVtbiB8IHRhYmxlLWNlbGwgfCB0YWJsZS1jYXB0aW9uIHwgZ3JpZCB8IGlubGluZS1ncmlkIHwgbm9uZSB8IGluaGVyaXQgfCAtbW96LWJveCB8IC1tb3otaW5saW5lLWJsb2NrIHwgLW1vei1pbmxpbmUtYm94IHwgLW1vei1pbmxpbmUtZ3JpZCB8IC1tb3otaW5saW5lLXN0YWNrIHwgLW1vei1pbmxpbmUtdGFibGUgfCAtbW96LWdyaWQgfCAtbW96LWdyaWQtZ3JvdXAgfCAtbW96LWdyaWQtbGluZSB8IC1tb3otZ3JvdXBib3ggfCAtbW96LWRlY2sgfCAtbW96LXBvcHVwIHwgLW1vei1zdGFjayB8IC1tb3otbWFya2VyIHwgLXdlYmtpdC1ib3ggfCAtd2Via2l0LWlubGluZS1ib3ggfCAtbXMtZmxleGJveCB8IC1tcy1pbmxpbmUtZmxleGJveCB8IGZsZXggfCAtd2Via2l0LWZsZXggfCBpbmxpbmUtZmxleCB8IC13ZWJraXQtaW5saW5lLWZsZXgiLAogICAgImRvbWluYW50LWJhc2VsaW5lIiAgICAgICAgICAgICA6IDEsCiAgICAiZHJvcC1pbml0aWFsLWFmdGVyLWFkanVzdCIgICAgIDogImNlbnRyYWwgfCBtaWRkbGUgfCBhZnRlci1lZGdlIHwgdGV4dC1hZnRlci1lZGdlIHwgaWRlb2dyYXBoaWMgfCBhbHBoYWJldGljIHwgbWF0aGVtYXRpY2FsIHwgPHBlcmNlbnRhZ2U+IHwgPGxlbmd0aD4iLAogICAgImRyb3AtaW5pdGlhbC1hZnRlci1hbGlnbiIgICAgICA6ICJiYXNlbGluZSB8IHVzZS1zY3JpcHQgfCBiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVkZ2UgfCBhZnRlci1lZGdlIHwgdGV4dC1hZnRlci1lZGdlIHwgY2VudHJhbCB8IG1pZGRsZSB8IGlkZW9ncmFwaGljIHwgYWxwaGFiZXRpYyB8IGhhbmdpbmcgfCBtYXRoZW1hdGljYWwiLAogICAgImRyb3AtaW5pdGlhbC1iZWZvcmUtYWRqdXN0IiAgICA6ICJiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVkZ2UgfCBjZW50cmFsIHwgbWlkZGxlIHwgaGFuZ2luZyB8IG1hdGhlbWF0aWNhbCB8IDxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IiwKICAgICJkcm9wLWluaXRpYWwtYmVmb3JlLWFsaWduIiAgICAgOiAiY2Fwcy1oZWlnaHQgfCBiYXNlbGluZSB8IHVzZS1zY3JpcHQgfCBiZWZvcmUtZWRnZSB8IHRleHQtYmVmb3JlLWVkZ2UgfCBhZnRlci1lZGdlIHwgdGV4dC1hZnRlci1lZGdlIHwgY2VudHJhbCB8IG1pZGRsZSB8IGlkZW9ncmFwaGljIHwgYWxwaGFiZXRpYyB8IGhhbmdpbmcgfCBtYXRoZW1hdGljYWwiLAogICAgImRyb3AtaW5pdGlhbC1zaXplIiAgICAgICAgICAgICA6ICJhdXRvIHwgbGluZSB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IiwKICAgICJkcm9wLWluaXRpYWwtdmFsdWUiICAgICAgICAgICAgOiAiaW5pdGlhbCB8IDxpbnRlZ2VyPiIsCiAgICAiZWxldmF0aW9uIiAgICAgICAgICAgICAgICAgICAgIDogIjxhbmdsZT4gfCBiZWxvdyB8IGxldmVsIHwgYWJvdmUgfCBoaWdoZXIgfCBsb3dlciB8IGluaGVyaXQiLAogICAgImVtcHR5LWNlbGxzIiAgICAgICAgICAgICAgICAgICA6ICJzaG93IHwgaGlkZSB8IGluaGVyaXQiLAogICAgImZpbHRlciIgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiZml0IiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImZpbGwgfCBoaWRkZW4gfCBtZWV0IHwgc2xpY2UiLAogICAgImZpdC1wb3NpdGlvbiIgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiZmxleCIgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjxmbGV4PiIsCiAgICAiZmxleC1iYXNpcyIgICAgICAgICAgICAgICAgICAgIDogIjx3aWR0aD4iLAogICAgImZsZXgtZGlyZWN0aW9uIiAgICAgICAgICAgICAgICA6ICJyb3cgfCByb3ctcmV2ZXJzZSB8IGNvbHVtbiB8IGNvbHVtbi1yZXZlcnNlIiwKICAgICJmbGV4LWZsb3ciICAgICAgICAgICAgICAgICAgICAgOiAiPGZsZXgtZGlyZWN0aW9uPiB8fCA8ZmxleC13cmFwPiIsCiAgICAiZmxleC1ncm93IiAgICAgICAgICAgICAgICAgICAgIDogIjxudW1iZXI+IiwKICAgICJmbGV4LXNocmluayIgICAgICAgICAgICAgICAgICAgOiAiPG51bWJlcj4iLAogICAgImZsZXgtd3JhcCIgICAgICAgICAgICAgICAgICAgICA6ICJub3dyYXAgfCB3cmFwIHwgd3JhcC1yZXZlcnNlIiwKICAgICItd2Via2l0LWZsZXgiICAgICAgICAgICAgICAgICAgOiAiPGZsZXg+IiwKICAgICItd2Via2l0LWZsZXgtYmFzaXMiICAgICAgICAgICAgOiAiPHdpZHRoPiIsCiAgICAiLXdlYmtpdC1mbGV4LWRpcmVjdGlvbiIgICAgICAgIDogInJvdyB8IHJvdy1yZXZlcnNlIHwgY29sdW1uIHwgY29sdW1uLXJldmVyc2UiLAogICAgIi13ZWJraXQtZmxleC1mbG93IiAgICAgICAgICAgICA6ICI8ZmxleC1kaXJlY3Rpb24+IHx8IDxmbGV4LXdyYXA+IiwKICAgICItd2Via2l0LWZsZXgtZ3JvdyIgICAgICAgICAgICAgOiAiPG51bWJlcj4iLAogICAgIi13ZWJraXQtZmxleC1zaHJpbmsiICAgICAgICAgICA6ICI8bnVtYmVyPiIsCiAgICAiLXdlYmtpdC1mbGV4LXdyYXAiICAgICAgICAgICAgIDogIm5vd3JhcCB8IHdyYXAgfCB3cmFwLXJldmVyc2UiLAogICAgIi1tcy1mbGV4IiAgICAgICAgICAgICAgICAgICAgICA6ICI8ZmxleD4iLAogICAgIi1tcy1mbGV4LWFsaWduIiAgICAgICAgICAgICAgICA6ICJzdGFydCB8IGVuZCB8IGNlbnRlciB8IHN0cmV0Y2ggfCBiYXNlbGluZSIsCiAgICAiLW1zLWZsZXgtZGlyZWN0aW9uIiAgICAgICAgICAgIDogInJvdyB8IHJvdy1yZXZlcnNlIHwgY29sdW1uIHwgY29sdW1uLXJldmVyc2UgfCBpbmhlcml0IiwKICAgICItbXMtZmxleC1vcmRlciIgICAgICAgICAgICAgICAgOiAiPG51bWJlcj4iLAogICAgIi1tcy1mbGV4LXBhY2siICAgICAgICAgICAgICAgICA6ICJzdGFydCB8IGVuZCB8IGNlbnRlciB8IGp1c3RpZnkiLAogICAgIi1tcy1mbGV4LXdyYXAiICAgICAgICAgICAgICAgICA6ICJub3dyYXAgfCB3cmFwIHwgd3JhcC1yZXZlcnNlIiwKICAgICJmbG9hdCIgICAgICAgICAgICAgICAgICAgICAgICAgOiAibGVmdCB8IHJpZ2h0IHwgbm9uZSB8IGluaGVyaXQiLAogICAgImZsb2F0LW9mZnNldCIgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiZm9udCIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJmb250LWZhbWlseSIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImZvbnQtc2l6ZSIgICAgICAgICAgICAgICAgICAgICA6ICI8YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4gfCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQiLAogICAgImZvbnQtc2l6ZS1hZGp1c3QiICAgICAgICAgICAgICA6ICI8bnVtYmVyPiB8IG5vbmUgfCBpbmhlcml0IiwKICAgICJmb250LXN0cmV0Y2giICAgICAgICAgICAgICAgICAgOiAibm9ybWFsIHwgdWx0cmEtY29uZGVuc2VkIHwgZXh0cmEtY29uZGVuc2VkIHwgY29uZGVuc2VkIHwgc2VtaS1jb25kZW5zZWQgfCBzZW1pLWV4cGFuZGVkIHwgZXhwYW5kZWQgfCBleHRyYS1leHBhbmRlZCB8IHVsdHJhLWV4cGFuZGVkIHwgaW5oZXJpdCIsCiAgICAiZm9udC1zdHlsZSIgICAgICAgICAgICAgICAgICAgIDogIm5vcm1hbCB8IGl0YWxpYyB8IG9ibGlxdWUgfCBpbmhlcml0IiwKICAgICJmb250LXZhcmlhbnQiICAgICAgICAgICAgICAgICAgOiAibm9ybWFsIHwgc21hbGwtY2FwcyB8IGluaGVyaXQiLAogICAgImZvbnQtd2VpZ2h0IiAgICAgICAgICAgICAgICAgICA6ICJub3JtYWwgfCBib2xkIHwgYm9sZGVyIHwgbGlnaHRlciB8IDEwMCB8IDIwMCB8IDMwMCB8IDQwMCB8IDUwMCB8IDYwMCB8IDcwMCB8IDgwMCB8IDkwMCB8IGluaGVyaXQiLAogICAgImdyaWQtY2VsbC1zdGFja2luZyIgICAgICAgICAgICA6ICJjb2x1bW5zIHwgcm93cyB8IGxheWVyIiwKICAgICJncmlkLWNvbHVtbiIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImdyaWQtY29sdW1ucyIgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiZ3JpZC1jb2x1bW4tYWxpZ24iICAgICAgICAgICAgIDogInN0YXJ0IHwgZW5kIHwgY2VudGVyIHwgc3RyZXRjaCIsCiAgICAiZ3JpZC1jb2x1bW4tc2l6aW5nIiAgICAgICAgICAgIDogMSwKICAgICJncmlkLWNvbHVtbi1zcGFuIiAgICAgICAgICAgICAgOiAiPGludGVnZXI+IiwKICAgICJncmlkLWZsb3ciICAgICAgICAgICAgICAgICAgICAgOiAibm9uZSB8IHJvd3MgfCBjb2x1bW5zIiwKICAgICJncmlkLWxheWVyIiAgICAgICAgICAgICAgICAgICAgOiAiPGludGVnZXI+IiwKICAgICJncmlkLXJvdyIgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImdyaWQtcm93cyIgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAiZ3JpZC1yb3ctYWxpZ24iICAgICAgICAgICAgICAgIDogInN0YXJ0IHwgZW5kIHwgY2VudGVyIHwgc3RyZXRjaCIsCiAgICAiZ3JpZC1yb3ctZ2FwIiAgICAgICAgICAgICAgICAgIDogMSwKICAgICJncmlkLXJvdy1zcGFuIiAgICAgICAgICAgICAgICAgOiAiPGludGVnZXI+IiwKICAgICJncmlkLXJvdy1zaXppbmciICAgICAgICAgICAgICAgOiAxLAogICAgImdyaWQtdGVtcGxhdGUiICAgICAgICAgICAgICAgICA6IDEsCiAgICAiZ3JpZC10ZW1wbGF0ZS1hcmVhcyIgICAgICAgICAgIDogMSwKICAgICJncmlkLXRlbXBsYXRlLWNvbHVtbnMiICAgICAgICAgOiAxLAogICAgImdyaWQtdGVtcGxhdGUtcm93cyIgICAgICAgICAgICA6IDEsCiAgICAiaGFuZ2luZy1wdW5jdHVhdGlvbiIgICAgICAgICAgIDogMSwKICAgICJoZWlnaHQiICAgICAgICAgICAgICAgICAgICAgICAgOiAiPG1hcmdpbi13aWR0aD4gfCA8Y29udGVudC1zaXppbmc+IHwgaW5oZXJpdCIsCiAgICAiaHlwaGVuYXRlLWFmdGVyIiAgICAgICAgICAgICAgIDogIjxpbnRlZ2VyPiB8IGF1dG8iLAogICAgImh5cGhlbmF0ZS1iZWZvcmUiICAgICAgICAgICAgICA6ICI8aW50ZWdlcj4gfCBhdXRvIiwKICAgICJoeXBoZW5hdGUtY2hhcmFjdGVyIiAgICAgICAgICAgOiAiPHN0cmluZz4gfCBhdXRvIiwKICAgICJoeXBoZW5hdGUtbGluZXMiICAgICAgICAgICAgICAgOiAibm8tbGltaXQgfCA8aW50ZWdlcj4iLAogICAgImh5cGhlbmF0ZS1yZXNvdXJjZSIgICAgICAgICAgICA6IDEsCiAgICAiaHlwaGVucyIgICAgICAgICAgICAgICAgICAgICAgIDogIm5vbmUgfCBtYW51YWwgfCBhdXRvIiwKICAgICJpY29uIiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgImltYWdlLW9yaWVudGF0aW9uIiAgICAgICAgICAgICA6ICJhbmdsZSB8IGF1dG8iLAogICAgImltYWdlLXJlbmRlcmluZyIgICAgICAgICAgICAgICA6IDEsCiAgICAiaW1hZ2UtcmVzb2x1dGlvbiIgICAgICAgICAgICAgIDogMSwKICAgICJpbmxpbmUtYm94LWFsaWduIiAgICAgICAgICAgICAgOiAiaW5pdGlhbCB8IGxhc3QgfCA8aW50ZWdlcj4iLAogICAgImp1c3RpZnktY29udGVudCIgICAgICAgICAgICAgICA6ICJmbGV4LXN0YXJ0IHwgZmxleC1lbmQgfCBjZW50ZXIgfCBzcGFjZS1iZXR3ZWVuIHwgc3BhY2UtYXJvdW5kIiwKICAgICItd2Via2l0LWp1c3RpZnktY29udGVudCIgICAgICAgOiAiZmxleC1zdGFydCB8IGZsZXgtZW5kIHwgY2VudGVyIHwgc3BhY2UtYmV0d2VlbiB8IHNwYWNlLWFyb3VuZCIsCiAgICAibGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgIDogIjxtYXJnaW4td2lkdGg+IHwgaW5oZXJpdCIsCiAgICAibGV0dGVyLXNwYWNpbmciICAgICAgICAgICAgICAgIDogIjxsZW5ndGg+IHwgbm9ybWFsIHwgaW5oZXJpdCIsCiAgICAibGluZS1oZWlnaHQiICAgICAgICAgICAgICAgICAgIDogIjxudW1iZXI+IHwgPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCBub3JtYWwgfCBpbmhlcml0IiwKICAgICJsaW5lLWJyZWFrIiAgICAgICAgICAgICAgICAgICAgOiAiYXV0byB8IGxvb3NlIHwgbm9ybWFsIHwgc3RyaWN0IiwKICAgICJsaW5lLXN0YWNraW5nIiAgICAgICAgICAgICAgICAgOiAxLAogICAgImxpbmUtc3RhY2tpbmctcnVieSIgICAgICAgICAgICA6ICJleGNsdWRlLXJ1YnkgfCBpbmNsdWRlLXJ1YnkiLAogICAgImxpbmUtc3RhY2tpbmctc2hpZnQiICAgICAgICAgICA6ICJjb25zaWRlci1zaGlmdHMgfCBkaXNyZWdhcmQtc2hpZnRzIiwKICAgICJsaW5lLXN0YWNraW5nLXN0cmF0ZWd5IiAgICAgICAgOiAiaW5saW5lLWxpbmUtaGVpZ2h0IHwgYmxvY2stbGluZS1oZWlnaHQgfCBtYXgtaGVpZ2h0IHwgZ3JpZC1oZWlnaHQiLAogICAgImxpc3Qtc3R5bGUiICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAibGlzdC1zdHlsZS1pbWFnZSIgICAgICAgICAgICAgIDogIjx1cmk+IHwgbm9uZSB8IGluaGVyaXQiLAogICAgImxpc3Qtc3R5bGUtcG9zaXRpb24iICAgICAgICAgICA6ICJpbnNpZGUgfCBvdXRzaWRlIHwgaW5oZXJpdCIsCiAgICAibGlzdC1zdHlsZS10eXBlIiAgICAgICAgICAgICAgIDogImRpc2MgfCBjaXJjbGUgfCBzcXVhcmUgfCBkZWNpbWFsIHwgZGVjaW1hbC1sZWFkaW5nLXplcm8gfCBsb3dlci1yb21hbiB8IHVwcGVyLXJvbWFuIHwgbG93ZXItZ3JlZWsgfCBsb3dlci1sYXRpbiB8IHVwcGVyLWxhdGluIHwgYXJtZW5pYW4gfCBnZW9yZ2lhbiB8IGxvd2VyLWFscGhhIHwgdXBwZXItYWxwaGEgfCBub25lIHwgaW5oZXJpdCIsCiAgICAibWFyZ2luIiAgICAgICAgICAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjxtYXJnaW4td2lkdGg+IHwgaW5oZXJpdCIsIG1heDogNCB9LAogICAgIm1hcmdpbi1ib3R0b20iICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgIm1hcmdpbi1sZWZ0IiAgICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgIm1hcmdpbi1yaWdodCIgICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgIm1hcmdpbi10b3AiICAgICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgIm1hcmsiICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAibWFyay1hZnRlciIgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJtYXJrLWJlZm9yZSIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgIm1hcmtzIiAgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAibWFycXVlZS1kaXJlY3Rpb24iICAgICAgICAgICAgIDogMSwKICAgICJtYXJxdWVlLXBsYXktY291bnQiICAgICAgICAgICAgOiAxLAogICAgIm1hcnF1ZWUtc3BlZWQiICAgICAgICAgICAgICAgICA6IDEsCiAgICAibWFycXVlZS1zdHlsZSIgICAgICAgICAgICAgICAgIDogMSwKICAgICJtYXgtaGVpZ2h0IiAgICAgICAgICAgICAgICAgICAgOiAiPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCA8Y29udGVudC1zaXppbmc+IHwgbm9uZSB8IGluaGVyaXQiLAogICAgIm1heC13aWR0aCIgICAgICAgICAgICAgICAgICAgICA6ICI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IDxjb250ZW50LXNpemluZz4gfCBub25lIHwgaW5oZXJpdCIsCiAgICAibWF4LXpvb20iICAgICAgICAgICAgICAgICAgICAgIDogIjxudW1iZXI+IHwgPHBlcmNlbnRhZ2U+IHwgYXV0byIsCiAgICAibWluLWhlaWdodCIgICAgICAgICAgICAgICAgICAgIDogIjxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgPGNvbnRlbnQtc2l6aW5nPiB8IGNvbnRhaW4tZmxvYXRzIHwgLW1vei1jb250YWluLWZsb2F0cyB8IC13ZWJraXQtY29udGFpbi1mbG9hdHMgfCBpbmhlcml0IiwKICAgICJtaW4td2lkdGgiICAgICAgICAgICAgICAgICAgICAgOiAiPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCA8Y29udGVudC1zaXppbmc+IHwgY29udGFpbi1mbG9hdHMgfCAtbW96LWNvbnRhaW4tZmxvYXRzIHwgLXdlYmtpdC1jb250YWluLWZsb2F0cyB8IGluaGVyaXQiLAogICAgIm1pbi16b29tIiAgICAgICAgICAgICAgICAgICAgICA6ICI8bnVtYmVyPiB8IDxwZXJjZW50YWdlPiB8IGF1dG8iLAogICAgIm1vdmUtdG8iICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAibmF2LWRvd24iICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJuYXYtaW5kZXgiICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgIm5hdi1sZWZ0IiAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAibmF2LXJpZ2h0IiAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJuYXYtdXAiICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgIm9wYWNpdHkiICAgICAgICAgICAgICAgICAgICAgICA6ICI8bnVtYmVyPiB8IGluaGVyaXQiLAogICAgIm9yZGVyIiAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8aW50ZWdlcj4iLAogICAgIi13ZWJraXQtb3JkZXIiICAgICAgICAgICAgICAgICA6ICI8aW50ZWdlcj4iLAogICAgIm9ycGhhbnMiICAgICAgICAgICAgICAgICAgICAgICA6ICI8aW50ZWdlcj4gfCBpbmhlcml0IiwKICAgICJvdXRsaW5lIiAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgIm91dGxpbmUtY29sb3IiICAgICAgICAgICAgICAgICA6ICI8Y29sb3I+IHwgaW52ZXJ0IHwgaW5oZXJpdCIsCiAgICAib3V0bGluZS1vZmZzZXQiICAgICAgICAgICAgICAgIDogMSwKICAgICJvdXRsaW5lLXN0eWxlIiAgICAgICAgICAgICAgICAgOiAiPGJvcmRlci1zdHlsZT4gfCBpbmhlcml0IiwKICAgICJvdXRsaW5lLXdpZHRoIiAgICAgICAgICAgICAgICAgOiAiPGJvcmRlci13aWR0aD4gfCBpbmhlcml0IiwKICAgICJvdmVyZmxvdyIgICAgICAgICAgICAgICAgICAgICAgOiAidmlzaWJsZSB8IGhpZGRlbiB8IHNjcm9sbCB8IGF1dG8gfCBpbmhlcml0IiwKICAgICJvdmVyZmxvdy1zdHlsZSIgICAgICAgICAgICAgICAgOiAxLAogICAgIm92ZXJmbG93LXdyYXAiICAgICAgICAgICAgICAgICA6ICJub3JtYWwgfCBicmVhay13b3JkIiwKICAgICJvdmVyZmxvdy14IiAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgIm92ZXJmbG93LXkiICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAicGFkZGluZyIgICAgICAgICAgICAgICAgICAgICAgIDogeyBtdWx0aTogIjxwYWRkaW5nLXdpZHRoPiB8IGluaGVyaXQiLCBtYXg6IDQgfSwKICAgICJwYWRkaW5nLWJvdHRvbSIgICAgICAgICAgICAgICAgOiAiPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdCIsCiAgICAicGFkZGluZy1sZWZ0IiAgICAgICAgICAgICAgICAgIDogIjxwYWRkaW5nLXdpZHRoPiB8IGluaGVyaXQiLAogICAgInBhZGRpbmctcmlnaHQiICAgICAgICAgICAgICAgICA6ICI8cGFkZGluZy13aWR0aD4gfCBpbmhlcml0IiwKICAgICJwYWRkaW5nLXRvcCIgICAgICAgICAgICAgICAgICAgOiAiPHBhZGRpbmctd2lkdGg+IHwgaW5oZXJpdCIsCiAgICAicGFnZSIgICAgICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJwYWdlLWJyZWFrLWFmdGVyIiAgICAgICAgICAgICAgOiAiYXV0byB8IGFsd2F5cyB8IGF2b2lkIHwgbGVmdCB8IHJpZ2h0IHwgaW5oZXJpdCIsCiAgICAicGFnZS1icmVhay1iZWZvcmUiICAgICAgICAgICAgIDogImF1dG8gfCBhbHdheXMgfCBhdm9pZCB8IGxlZnQgfCByaWdodCB8IGluaGVyaXQiLAogICAgInBhZ2UtYnJlYWstaW5zaWRlIiAgICAgICAgICAgICA6ICJhdXRvIHwgYXZvaWQgfCBpbmhlcml0IiwKICAgICJwYWdlLXBvbGljeSIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInBhdXNlIiAgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAicGF1c2UtYWZ0ZXIiICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJwYXVzZS1iZWZvcmUiICAgICAgICAgICAgICAgICAgOiAxLAogICAgInBlcnNwZWN0aXZlIiAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAicGVyc3BlY3RpdmUtb3JpZ2luIiAgICAgICAgICAgIDogMSwKICAgICJwaG9uZW1lcyIgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInBpdGNoIiAgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAicGl0Y2gtcmFuZ2UiICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJwbGF5LWR1cmluZyIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInBvaW50ZXItZXZlbnRzIiAgICAgICAgICAgICAgICA6ICJhdXRvIHwgbm9uZSB8IHZpc2libGVQYWludGVkIHwgdmlzaWJsZUZpbGwgfCB2aXNpYmxlU3Ryb2tlIHwgdmlzaWJsZSB8IHBhaW50ZWQgfCBmaWxsIHwgc3Ryb2tlIHwgYWxsIHwgaW5oZXJpdCIsCiAgICAicG9zaXRpb24iICAgICAgICAgICAgICAgICAgICAgIDogInN0YXRpYyB8IHJlbGF0aXZlIHwgYWJzb2x1dGUgfCBmaXhlZCB8IGluaGVyaXQiLAogICAgInByZXNlbnRhdGlvbi1sZXZlbCIgICAgICAgICAgICA6IDEsCiAgICAicHVuY3R1YXRpb24tdHJpbSIgICAgICAgICAgICAgIDogMSwKICAgICJxdW90ZXMiICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInJlbmRlcmluZy1pbnRlbnQiICAgICAgICAgICAgICA6IDEsCiAgICAicmVzaXplIiAgICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJyZXN0IiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInJlc3QtYWZ0ZXIiICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAicmVzdC1iZWZvcmUiICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJyaWNobmVzcyIgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgInJvdGF0aW9uIiAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAicm90YXRpb24tcG9pbnQiICAgICAgICAgICAgICAgIDogMSwKICAgICJydWJ5LWFsaWduIiAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInJ1Ynktb3ZlcmhhbmciICAgICAgICAgICAgICAgICA6IDEsCiAgICAicnVieS1wb3NpdGlvbiIgICAgICAgICAgICAgICAgIDogMSwKICAgICJydWJ5LXNwYW4iICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInNpemUiICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAic3BlYWsiICAgICAgICAgICAgICAgICAgICAgICAgIDogIm5vcm1hbCB8IG5vbmUgfCBzcGVsbC1vdXQgfCBpbmhlcml0IiwKICAgICJzcGVhay1oZWFkZXIiICAgICAgICAgICAgICAgICAgOiAib25jZSB8IGFsd2F5cyB8IGluaGVyaXQiLAogICAgInNwZWFrLW51bWVyYWwiICAgICAgICAgICAgICAgICA6ICJkaWdpdHMgfCBjb250aW51b3VzIHwgaW5oZXJpdCIsCiAgICAic3BlYWstcHVuY3R1YXRpb24iICAgICAgICAgICAgIDogImNvZGUgfCBub25lIHwgaW5oZXJpdCIsCiAgICAic3BlZWNoLXJhdGUiICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJzcmMiICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInN0cmVzcyIgICAgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAic3RyaW5nLXNldCIgICAgICAgICAgICAgICAgICAgIDogMSwKCiAgICAidGFibGUtbGF5b3V0IiAgICAgICAgICAgICAgICAgIDogImF1dG8gfCBmaXhlZCB8IGluaGVyaXQiLAogICAgInRhYi1zaXplIiAgICAgICAgICAgICAgICAgICAgICA6ICI8aW50ZWdlcj4gfCA8bGVuZ3RoPiIsCiAgICAidGFyZ2V0IiAgICAgICAgICAgICAgICAgICAgICAgIDogMSwKICAgICJ0YXJnZXQtbmFtZSIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInRhcmdldC1uZXciICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAidGFyZ2V0LXBvc2l0aW9uIiAgICAgICAgICAgICAgIDogMSwKICAgICJ0ZXh0LWFsaWduIiAgICAgICAgICAgICAgICAgICAgOiAibGVmdCB8IHJpZ2h0IHwgY2VudGVyIHwganVzdGlmeSB8IGluaGVyaXQiICwKICAgICJ0ZXh0LWFsaWduLWxhc3QiICAgICAgICAgICAgICAgOiAxLAogICAgInRleHQtZGVjb3JhdGlvbiIgICAgICAgICAgICAgICA6IDEsCiAgICAidGV4dC1lbXBoYXNpcyIgICAgICAgICAgICAgICAgIDogMSwKICAgICJ0ZXh0LWhlaWdodCIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInRleHQtaW5kZW50IiAgICAgICAgICAgICAgICAgICA6ICI8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQiLAogICAgInRleHQtanVzdGlmeSIgICAgICAgICAgICAgICAgICA6ICJhdXRvIHwgbm9uZSB8IGludGVyLXdvcmQgfCBpbnRlci1pZGVvZ3JhcGggfCBpbnRlci1jbHVzdGVyIHwgZGlzdHJpYnV0ZSB8IGthc2hpZGEiLAogICAgInRleHQtb3V0bGluZSIgICAgICAgICAgICAgICAgICA6IDEsCiAgICAidGV4dC1vdmVyZmxvdyIgICAgICAgICAgICAgICAgIDogMSwKICAgICJ0ZXh0LXJlbmRlcmluZyIgICAgICAgICAgICAgICAgOiAiYXV0byB8IG9wdGltaXplU3BlZWQgfCBvcHRpbWl6ZUxlZ2liaWxpdHkgfCBnZW9tZXRyaWNQcmVjaXNpb24gfCBpbmhlcml0IiwKICAgICJ0ZXh0LXNoYWRvdyIgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInRleHQtdHJhbnNmb3JtIiAgICAgICAgICAgICAgICA6ICJjYXBpdGFsaXplIHwgdXBwZXJjYXNlIHwgbG93ZXJjYXNlIHwgbm9uZSB8IGluaGVyaXQiLAogICAgInRleHQtd3JhcCIgICAgICAgICAgICAgICAgICAgICA6ICJub3JtYWwgfCBub25lIHwgYXZvaWQiLAogICAgInRvcCIgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8bWFyZ2luLXdpZHRoPiB8IGluaGVyaXQiLAogICAgIi1tcy10b3VjaC1hY3Rpb24iICAgICAgICAgICAgICA6ICJhdXRvIHwgbm9uZSB8IHBhbi14IHwgcGFuLXkiLAogICAgInRvdWNoLWFjdGlvbiIgICAgICAgICAgICAgICAgICA6ICJhdXRvIHwgbm9uZSB8IHBhbi14IHwgcGFuLXkiLAogICAgInRyYW5zZm9ybSIgICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAidHJhbnNmb3JtLW9yaWdpbiIgICAgICAgICAgICAgIDogMSwKICAgICJ0cmFuc2Zvcm0tc3R5bGUiICAgICAgICAgICAgICAgOiAxLAogICAgInRyYW5zaXRpb24iICAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAidHJhbnNpdGlvbi1kZWxheSIgICAgICAgICAgICAgIDogMSwKICAgICJ0cmFuc2l0aW9uLWR1cmF0aW9uIiAgICAgICAgICAgOiAxLAogICAgInRyYW5zaXRpb24tcHJvcGVydHkiICAgICAgICAgICA6IDEsCiAgICAidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iICAgIDogMSwKICAgICJ1bmljb2RlLWJpZGkiICAgICAgICAgICAgICAgICAgOiAibm9ybWFsIHwgZW1iZWQgfCBpc29sYXRlIHwgYmlkaS1vdmVycmlkZSB8IGlzb2xhdGUtb3ZlcnJpZGUgfCBwbGFpbnRleHQgfCBpbmhlcml0IiwKICAgICJ1c2VyLW1vZGlmeSIgICAgICAgICAgICAgICAgICAgOiAicmVhZC1vbmx5IHwgcmVhZC13cml0ZSB8IHdyaXRlLW9ubHkgfCBpbmhlcml0IiwKICAgICJ1c2VyLXNlbGVjdCIgICAgICAgICAgICAgICAgICAgOiAibm9uZSB8IHRleHQgfCB0b2dnbGUgfCBlbGVtZW50IHwgZWxlbWVudHMgfCBhbGwgfCBpbmhlcml0IiwKICAgICJ1c2VyLXpvb20iICAgICAgICAgICAgICAgICAgICAgOiAiem9vbSB8IGZpeGVkIiwKICAgICJ2ZXJ0aWNhbC1hbGlnbiIgICAgICAgICAgICAgICAgOiAiYXV0byB8IHVzZS1zY3JpcHQgfCBiYXNlbGluZSB8IHN1YiB8IHN1cGVyIHwgdG9wIHwgdGV4dC10b3AgfCBjZW50cmFsIHwgbWlkZGxlIHwgYm90dG9tIHwgdGV4dC1ib3R0b20gfCA8cGVyY2VudGFnZT4gfCA8bGVuZ3RoPiIsCiAgICAidmlzaWJpbGl0eSIgICAgICAgICAgICAgICAgICAgIDogInZpc2libGUgfCBoaWRkZW4gfCBjb2xsYXBzZSB8IGluaGVyaXQiLAogICAgInZvaWNlLWJhbGFuY2UiICAgICAgICAgICAgICAgICA6IDEsCiAgICAidm9pY2UtZHVyYXRpb24iICAgICAgICAgICAgICAgIDogMSwKICAgICJ2b2ljZS1mYW1pbHkiICAgICAgICAgICAgICAgICAgOiAxLAogICAgInZvaWNlLXBpdGNoIiAgICAgICAgICAgICAgICAgICA6IDEsCiAgICAidm9pY2UtcGl0Y2gtcmFuZ2UiICAgICAgICAgICAgIDogMSwKICAgICJ2b2ljZS1yYXRlIiAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgInZvaWNlLXN0cmVzcyIgICAgICAgICAgICAgICAgICA6IDEsCiAgICAidm9pY2Utdm9sdW1lIiAgICAgICAgICAgICAgICAgIDogMSwKICAgICJ2b2x1bWUiICAgICAgICAgICAgICAgICAgICAgICAgOiAxLAogICAgIndoaXRlLXNwYWNlIiAgICAgICAgICAgICAgICAgICA6ICJub3JtYWwgfCBwcmUgfCBub3dyYXAgfCBwcmUtd3JhcCB8IHByZS1saW5lIHwgaW5oZXJpdCB8IC1wcmUtd3JhcCB8IC1vLXByZS13cmFwIHwgLW1vei1wcmUtd3JhcCB8IC1ocC1wcmUtd3JhcCIsIC8vaHR0cDovL3BlcmlzaGFibGVwcmVzcy5jb20vd3JhcHBpbmctY29udGVudC8KICAgICJ3aGl0ZS1zcGFjZS1jb2xsYXBzZSIgICAgICAgICAgOiAxLAogICAgIndpZG93cyIgICAgICAgICAgICAgICAgICAgICAgICA6ICI8aW50ZWdlcj4gfCBpbmhlcml0IiwKICAgICJ3aWR0aCIgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPGxlbmd0aD4gfCA8cGVyY2VudGFnZT4gfCA8Y29udGVudC1zaXppbmc+IHwgYXV0byB8IGluaGVyaXQiLAogICAgIndvcmQtYnJlYWsiICAgICAgICAgICAgICAgICAgICA6ICJub3JtYWwgfCBrZWVwLWFsbCB8IGJyZWFrLWFsbCIsCiAgICAid29yZC1zcGFjaW5nIiAgICAgICAgICAgICAgICAgIDogIjxsZW5ndGg+IHwgbm9ybWFsIHwgaW5oZXJpdCIsCiAgICAid29yZC13cmFwIiAgICAgICAgICAgICAgICAgICAgIDogIm5vcm1hbCB8IGJyZWFrLXdvcmQiLAogICAgIndyaXRpbmctbW9kZSIgICAgICAgICAgICAgICAgICA6ICJob3Jpem9udGFsLXRiIHwgdmVydGljYWwtcmwgfCB2ZXJ0aWNhbC1sciB8IGxyLXRiIHwgcmwtdGIgfCB0Yi1ybCB8IGJ0LXJsIHwgdGItbHIgfCBidC1sciB8IGxyLWJ0IHwgcmwtYnQgfCBsciB8IHJsIHwgdGIgfCBpbmhlcml0IiwKICAgICJ6LWluZGV4IiAgICAgICAgICAgICAgICAgICAgICAgOiAiPGludGVnZXI+IHwgYXV0byB8IGluaGVyaXQiLAogICAgInpvb20iICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI8bnVtYmVyPiB8IDxwZXJjZW50YWdlPiB8IG5vcm1hbCIKfTsKZnVuY3Rpb24gUHJvcGVydHlOYW1lKHRleHQsIGhhY2ssIGxpbmUsIGNvbCl7CgogICAgU3ludGF4VW5pdC5jYWxsKHRoaXMsIHRleHQsIGxpbmUsIGNvbCwgUGFyc2VyLlBST1BFUlRZX05BTUVfVFlQRSk7CiAgICB0aGlzLmhhY2sgPSBoYWNrOwoKfQoKUHJvcGVydHlOYW1lLnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7ClByb3BlcnR5TmFtZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm9wZXJ0eU5hbWU7ClByb3BlcnR5TmFtZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpewogICAgcmV0dXJuICh0aGlzLmhhY2sgPyB0aGlzLmhhY2sgOiAiIikgKyB0aGlzLnRleHQ7Cn07CmZ1bmN0aW9uIFByb3BlcnR5VmFsdWUocGFydHMsIGxpbmUsIGNvbCl7CgogICAgU3ludGF4VW5pdC5jYWxsKHRoaXMsIHBhcnRzLmpvaW4oIiAiKSwgbGluZSwgY29sLCBQYXJzZXIuUFJPUEVSVFlfVkFMVUVfVFlQRSk7CiAgICB0aGlzLnBhcnRzID0gcGFydHM7Cgp9CgpQcm9wZXJ0eVZhbHVlLnByb3RvdHlwZSA9IG5ldyBTeW50YXhVbml0KCk7ClByb3BlcnR5VmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJvcGVydHlWYWx1ZTsKZnVuY3Rpb24gUHJvcGVydHlWYWx1ZUl0ZXJhdG9yKHZhbHVlKXsKICAgIHRoaXMuX2kgPSAwOwogICAgdGhpcy5fcGFydHMgPSB2YWx1ZS5wYXJ0czsKICAgIHRoaXMuX21hcmtzID0gW107CiAgICB0aGlzLnZhbHVlID0gdmFsdWU7Cgp9ClByb3BlcnR5VmFsdWVJdGVyYXRvci5wcm90b3R5cGUuY291bnQgPSBmdW5jdGlvbigpewogICAgcmV0dXJuIHRoaXMuX3BhcnRzLmxlbmd0aDsKfTsKUHJvcGVydHlWYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5pc0ZpcnN0ID0gZnVuY3Rpb24oKXsKICAgIHJldHVybiB0aGlzLl9pID09PSAwOwp9OwpQcm9wZXJ0eVZhbHVlSXRlcmF0b3IucHJvdG90eXBlLmhhc05leHQgPSBmdW5jdGlvbigpewogICAgcmV0dXJuICh0aGlzLl9pIDwgdGhpcy5fcGFydHMubGVuZ3RoKTsKfTsKUHJvcGVydHlWYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5tYXJrID0gZnVuY3Rpb24oKXsKICAgIHRoaXMuX21hcmtzLnB1c2godGhpcy5faSk7Cn07ClByb3BlcnR5VmFsdWVJdGVyYXRvci5wcm90b3R5cGUucGVlayA9IGZ1bmN0aW9uKGNvdW50KXsKICAgIHJldHVybiB0aGlzLmhhc05leHQoKSA/IHRoaXMuX3BhcnRzW3RoaXMuX2kgKyAoY291bnQgfHwgMCldIDogbnVsbDsKfTsKUHJvcGVydHlWYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKXsKICAgIHJldHVybiB0aGlzLmhhc05leHQoKSA/IHRoaXMuX3BhcnRzW3RoaXMuX2krK10gOiBudWxsOwp9OwpQcm9wZXJ0eVZhbHVlSXRlcmF0b3IucHJvdG90eXBlLnByZXZpb3VzID0gZnVuY3Rpb24oKXsKICAgIHJldHVybiB0aGlzLl9pID4gMCA/IHRoaXMuX3BhcnRzWy0tdGhpcy5faV0gOiBudWxsOwp9OwpQcm9wZXJ0eVZhbHVlSXRlcmF0b3IucHJvdG90eXBlLnJlc3RvcmUgPSBmdW5jdGlvbigpewogICAgaWYgKHRoaXMuX21hcmtzLmxlbmd0aCl7CiAgICAgICAgdGhpcy5faSA9IHRoaXMuX21hcmtzLnBvcCgpOwogICAgfQp9OwpmdW5jdGlvbiBQcm9wZXJ0eVZhbHVlUGFydCh0ZXh0LCBsaW5lLCBjb2wpewoKICAgIFN5bnRheFVuaXQuY2FsbCh0aGlzLCB0ZXh0LCBsaW5lLCBjb2wsIFBhcnNlci5QUk9QRVJUWV9WQUxVRV9QQVJUX1RZUEUpOwogICAgdGhpcy50eXBlID0gInVua25vd24iOwoKICAgIHZhciB0ZW1wOwogICAgaWYgKC9eKFsrXC1dP1tcZFwuXSspKFthLXpdKykkL2kudGVzdCh0ZXh0KSl7ICAvL2RpbWVuc2lvbgogICAgICAgIHRoaXMudHlwZSA9ICJkaW1lbnNpb24iOwogICAgICAgIHRoaXMudmFsdWUgPSArUmVnRXhwLiQxOwogICAgICAgIHRoaXMudW5pdHMgPSBSZWdFeHAuJDI7CiAgICAgICAgc3dpdGNoKHRoaXMudW5pdHMudG9Mb3dlckNhc2UoKSl7CgogICAgICAgICAgICBjYXNlICJlbSI6CiAgICAgICAgICAgIGNhc2UgInJlbSI6CiAgICAgICAgICAgIGNhc2UgImV4IjoKICAgICAgICAgICAgY2FzZSAicHgiOgogICAgICAgICAgICBjYXNlICJjbSI6CiAgICAgICAgICAgIGNhc2UgIm1tIjoKICAgICAgICAgICAgY2FzZSAiaW4iOgogICAgICAgICAgICBjYXNlICJwdCI6CiAgICAgICAgICAgIGNhc2UgInBjIjoKICAgICAgICAgICAgY2FzZSAiY2giOgogICAgICAgICAgICBjYXNlICJ2aCI6CiAgICAgICAgICAgIGNhc2UgInZ3IjoKICAgICAgICAgICAgY2FzZSAiZnIiOgogICAgICAgICAgICBjYXNlICJ2bWF4IjoKICAgICAgICAgICAgY2FzZSAidm1pbiI6CiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAibGVuZ3RoIjsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAiZGVnIjoKICAgICAgICAgICAgY2FzZSAicmFkIjoKICAgICAgICAgICAgY2FzZSAiZ3JhZCI6CiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAiYW5nbGUiOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICJtcyI6CiAgICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICAgICAgdGhpcy50eXBlID0gInRpbWUiOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICJoeiI6CiAgICAgICAgICAgIGNhc2UgImtoeiI6CiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAiZnJlcXVlbmN5IjsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAiZHBpIjoKICAgICAgICAgICAgY2FzZSAiZHBjbSI6CiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAicmVzb2x1dGlvbiI7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgfQoKICAgIH0gZWxzZSBpZiAoL14oWytcLV0/W1xkXC5dKyklJC9pLnRlc3QodGV4dCkpeyAgLy9wZXJjZW50YWdlCiAgICAgICAgdGhpcy50eXBlID0gInBlcmNlbnRhZ2UiOwogICAgICAgIHRoaXMudmFsdWUgPSArUmVnRXhwLiQxOwogICAgfSBlbHNlIGlmICgvXihbK1wtXT9cZCspJC9pLnRlc3QodGV4dCkpeyAgLy9pbnRlZ2VyCiAgICAgICAgdGhpcy50eXBlID0gImludGVnZXIiOwogICAgICAgIHRoaXMudmFsdWUgPSArUmVnRXhwLiQxOwogICAgfSBlbHNlIGlmICgvXihbK1wtXT9bXGRcLl0rKSQvaS50ZXN0KHRleHQpKXsgIC8vbnVtYmVyCiAgICAgICAgdGhpcy50eXBlID0gIm51bWJlciI7CiAgICAgICAgdGhpcy52YWx1ZSA9ICtSZWdFeHAuJDE7CgogICAgfSBlbHNlIGlmICgvXiMoW2EtZjAtOV17Myw2fSkvaS50ZXN0KHRleHQpKXsgIC8vaGV4Y29sb3IKICAgICAgICB0aGlzLnR5cGUgPSAiY29sb3IiOwogICAgICAgIHRlbXAgPSBSZWdFeHAuJDE7CiAgICAgICAgaWYgKHRlbXAubGVuZ3RoID09IDMpewogICAgICAgICAgICB0aGlzLnJlZCAgICA9IHBhcnNlSW50KHRlbXAuY2hhckF0KDApK3RlbXAuY2hhckF0KDApLDE2KTsKICAgICAgICAgICAgdGhpcy5ncmVlbiAgPSBwYXJzZUludCh0ZW1wLmNoYXJBdCgxKSt0ZW1wLmNoYXJBdCgxKSwxNik7CiAgICAgICAgICAgIHRoaXMuYmx1ZSAgID0gcGFyc2VJbnQodGVtcC5jaGFyQXQoMikrdGVtcC5jaGFyQXQoMiksMTYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMucmVkICAgID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoMCwyKSwxNik7CiAgICAgICAgICAgIHRoaXMuZ3JlZW4gID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoMiw0KSwxNik7CiAgICAgICAgICAgIHRoaXMuYmx1ZSAgID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoNCw2KSwxNik7CiAgICAgICAgfQogICAgfSBlbHNlIGlmICgvXnJnYlwoXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccypcKS9pLnRlc3QodGV4dCkpeyAvL3JnYigpIGNvbG9yIHdpdGggYWJzb2x1dGUgbnVtYmVycwogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsKICAgICAgICB0aGlzLnJlZCAgICA9ICtSZWdFeHAuJDE7CiAgICAgICAgdGhpcy5ncmVlbiAgPSArUmVnRXhwLiQyOwogICAgICAgIHRoaXMuYmx1ZSAgID0gK1JlZ0V4cC4kMzsKICAgIH0gZWxzZSBpZiAoL15yZ2JcKFxzKihcZCspJVxzKixccyooXGQrKSVccyosXHMqKFxkKyklXHMqXCkvaS50ZXN0KHRleHQpKXsgLy9yZ2IoKSBjb2xvciB3aXRoIHBlcmNlbnRhZ2VzCiAgICAgICAgdGhpcy50eXBlICAgPSAiY29sb3IiOwogICAgICAgIHRoaXMucmVkICAgID0gK1JlZ0V4cC4kMSAqIDI1NSAvIDEwMDsKICAgICAgICB0aGlzLmdyZWVuICA9ICtSZWdFeHAuJDIgKiAyNTUgLyAxMDA7CiAgICAgICAgdGhpcy5ibHVlICAgPSArUmVnRXhwLiQzICogMjU1IC8gMTAwOwogICAgfSBlbHNlIGlmICgvXnJnYmFcKFxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihcZCspXHMqLFxzKihbXGRcLl0rKVxzKlwpL2kudGVzdCh0ZXh0KSl7IC8vcmdiYSgpIGNvbG9yIHdpdGggYWJzb2x1dGUgbnVtYmVycwogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsKICAgICAgICB0aGlzLnJlZCAgICA9ICtSZWdFeHAuJDE7CiAgICAgICAgdGhpcy5ncmVlbiAgPSArUmVnRXhwLiQyOwogICAgICAgIHRoaXMuYmx1ZSAgID0gK1JlZ0V4cC4kMzsKICAgICAgICB0aGlzLmFscGhhICA9ICtSZWdFeHAuJDQ7CiAgICB9IGVsc2UgaWYgKC9ecmdiYVwoXHMqKFxkKyklXHMqLFxzKihcZCspJVxzKixccyooXGQrKSVccyosXHMqKFtcZFwuXSspXHMqXCkvaS50ZXN0KHRleHQpKXsgLy9yZ2JhKCkgY29sb3Igd2l0aCBwZXJjZW50YWdlcwogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsKICAgICAgICB0aGlzLnJlZCAgICA9ICtSZWdFeHAuJDEgKiAyNTUgLyAxMDA7CiAgICAgICAgdGhpcy5ncmVlbiAgPSArUmVnRXhwLiQyICogMjU1IC8gMTAwOwogICAgICAgIHRoaXMuYmx1ZSAgID0gK1JlZ0V4cC4kMyAqIDI1NSAvIDEwMDsKICAgICAgICB0aGlzLmFscGhhICA9ICtSZWdFeHAuJDQ7CiAgICB9IGVsc2UgaWYgKC9eaHNsXChccyooXGQrKVxzKixccyooXGQrKSVccyosXHMqKFxkKyklXHMqXCkvaS50ZXN0KHRleHQpKXsgLy9oc2woKQogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsKICAgICAgICB0aGlzLmh1ZSAgICA9ICtSZWdFeHAuJDE7CiAgICAgICAgdGhpcy5zYXR1cmF0aW9uID0gK1JlZ0V4cC4kMiAvIDEwMDsKICAgICAgICB0aGlzLmxpZ2h0bmVzcyAgPSArUmVnRXhwLiQzIC8gMTAwOwogICAgfSBlbHNlIGlmICgvXmhzbGFcKFxzKihcZCspXHMqLFxzKihcZCspJVxzKixccyooXGQrKSVccyosXHMqKFtcZFwuXSspXHMqXCkvaS50ZXN0KHRleHQpKXsgLy9oc2xhKCkgY29sb3Igd2l0aCBwZXJjZW50YWdlcwogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsKICAgICAgICB0aGlzLmh1ZSAgICA9ICtSZWdFeHAuJDE7CiAgICAgICAgdGhpcy5zYXR1cmF0aW9uID0gK1JlZ0V4cC4kMiAvIDEwMDsKICAgICAgICB0aGlzLmxpZ2h0bmVzcyAgPSArUmVnRXhwLiQzIC8gMTAwOwogICAgICAgIHRoaXMuYWxwaGEgID0gK1JlZ0V4cC4kNDsKICAgIH0gZWxzZSBpZiAoL151cmxcKFsiJ10/KFteXCkiJ10rKVsiJ10/XCkvaS50ZXN0KHRleHQpKXsgLy9VUkkKICAgICAgICB0aGlzLnR5cGUgICA9ICJ1cmkiOwogICAgICAgIHRoaXMudXJpICAgID0gUmVnRXhwLiQxOwogICAgfSBlbHNlIGlmICgvXihbXlwoXSspXCgvaS50ZXN0KHRleHQpKXsKICAgICAgICB0aGlzLnR5cGUgICA9ICJmdW5jdGlvbiI7CiAgICAgICAgdGhpcy5uYW1lICAgPSBSZWdFeHAuJDE7CiAgICAgICAgdGhpcy52YWx1ZSAgPSB0ZXh0OwogICAgfSBlbHNlIGlmICgvXlsiJ11bXiInXSpbIiddLy50ZXN0KHRleHQpKXsgICAgLy9zdHJpbmcKICAgICAgICB0aGlzLnR5cGUgICA9ICJzdHJpbmciOwogICAgICAgIHRoaXMudmFsdWUgID0gZXZhbCh0ZXh0KTsKICAgIH0gZWxzZSBpZiAoQ29sb3JzW3RleHQudG9Mb3dlckNhc2UoKV0peyAgLy9uYW1lZCBjb2xvcgogICAgICAgIHRoaXMudHlwZSAgID0gImNvbG9yIjsKICAgICAgICB0ZW1wICAgICAgICA9IENvbG9yc1t0ZXh0LnRvTG93ZXJDYXNlKCldLnN1YnN0cmluZygxKTsKICAgICAgICB0aGlzLnJlZCAgICA9IHBhcnNlSW50KHRlbXAuc3Vic3RyaW5nKDAsMiksMTYpOwogICAgICAgIHRoaXMuZ3JlZW4gID0gcGFyc2VJbnQodGVtcC5zdWJzdHJpbmcoMiw0KSwxNik7CiAgICAgICAgdGhpcy5ibHVlICAgPSBwYXJzZUludCh0ZW1wLnN1YnN0cmluZyg0LDYpLDE2KTsKICAgIH0gZWxzZSBpZiAoL15bXCxcL10kLy50ZXN0KHRleHQpKXsKICAgICAgICB0aGlzLnR5cGUgICA9ICJvcGVyYXRvciI7CiAgICAgICAgdGhpcy52YWx1ZSAgPSB0ZXh0OwogICAgfSBlbHNlIGlmICgvXlthLXpcLV9cdTAwODAtXHVGRkZGXVthLXowLTlcLV9cdTAwODAtXHVGRkZGXSokL2kudGVzdCh0ZXh0KSl7CiAgICAgICAgdGhpcy50eXBlICAgPSAiaWRlbnRpZmllciI7CiAgICAgICAgdGhpcy52YWx1ZSAgPSB0ZXh0OwogICAgfQoKfQoKUHJvcGVydHlWYWx1ZVBhcnQucHJvdG90eXBlID0gbmV3IFN5bnRheFVuaXQoKTsKUHJvcGVydHlWYWx1ZVBhcnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJvcGVydHlWYWx1ZVBhcnQ7ClByb3BlcnR5VmFsdWVQYXJ0LmZyb21Ub2tlbiA9IGZ1bmN0aW9uKHRva2VuKXsKICAgIHJldHVybiBuZXcgUHJvcGVydHlWYWx1ZVBhcnQodG9rZW4udmFsdWUsIHRva2VuLnN0YXJ0TGluZSwgdG9rZW4uc3RhcnRDb2wpOwp9Owp2YXIgUHNldWRvcyA9IHsKICAgICI6Zmlyc3QtbGV0dGVyIjogMSwKICAgICI6Zmlyc3QtbGluZSI6ICAgMSwKICAgICI6YmVmb3JlIjogICAgICAgMSwKICAgICI6YWZ0ZXIiOiAgICAgICAgMQp9OwoKUHNldWRvcy5FTEVNRU5UID0gMTsKUHNldWRvcy5DTEFTUyA9IDI7CgpQc2V1ZG9zLmlzRWxlbWVudCA9IGZ1bmN0aW9uKHBzZXVkbyl7CiAgICByZXR1cm4gcHNldWRvLmluZGV4T2YoIjo6IikgPT09IDAgfHwgUHNldWRvc1twc2V1ZG8udG9Mb3dlckNhc2UoKV0gPT0gUHNldWRvcy5FTEVNRU5UOwp9OwpmdW5jdGlvbiBTZWxlY3RvcihwYXJ0cywgbGluZSwgY29sKXsKCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgcGFydHMuam9pbigiICIpLCBsaW5lLCBjb2wsIFBhcnNlci5TRUxFQ1RPUl9UWVBFKTsKICAgIHRoaXMucGFydHMgPSBwYXJ0czsKICAgIHRoaXMuc3BlY2lmaWNpdHkgPSBTcGVjaWZpY2l0eS5jYWxjdWxhdGUodGhpcyk7Cgp9CgpTZWxlY3Rvci5wcm90b3R5cGUgPSBuZXcgU3ludGF4VW5pdCgpOwpTZWxlY3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZWxlY3RvcjsKZnVuY3Rpb24gU2VsZWN0b3JQYXJ0KGVsZW1lbnROYW1lLCBtb2RpZmllcnMsIHRleHQsIGxpbmUsIGNvbCl7CgogICAgU3ludGF4VW5pdC5jYWxsKHRoaXMsIHRleHQsIGxpbmUsIGNvbCwgUGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRSk7CiAgICB0aGlzLmVsZW1lbnROYW1lID0gZWxlbWVudE5hbWU7CiAgICB0aGlzLm1vZGlmaWVycyA9IG1vZGlmaWVyczsKCn0KClNlbGVjdG9yUGFydC5wcm90b3R5cGUgPSBuZXcgU3ludGF4VW5pdCgpOwpTZWxlY3RvclBhcnQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU2VsZWN0b3JQYXJ0OwpmdW5jdGlvbiBTZWxlY3RvclN1YlBhcnQodGV4dCwgdHlwZSwgbGluZSwgY29sKXsKCiAgICBTeW50YXhVbml0LmNhbGwodGhpcywgdGV4dCwgbGluZSwgY29sLCBQYXJzZXIuU0VMRUNUT1JfU1VCX1BBUlRfVFlQRSk7CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5hcmdzID0gW107Cgp9CgpTZWxlY3RvclN1YlBhcnQucHJvdG90eXBlID0gbmV3IFN5bnRheFVuaXQoKTsKU2VsZWN0b3JTdWJQYXJ0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNlbGVjdG9yU3ViUGFydDsKZnVuY3Rpb24gU3BlY2lmaWNpdHkoYSwgYiwgYywgZCl7CiAgICB0aGlzLmEgPSBhOwogICAgdGhpcy5iID0gYjsKICAgIHRoaXMuYyA9IGM7CiAgICB0aGlzLmQgPSBkOwp9CgpTcGVjaWZpY2l0eS5wcm90b3R5cGUgPSB7CiAgICBjb25zdHJ1Y3RvcjogU3BlY2lmaWNpdHksCiAgICBjb21wYXJlOiBmdW5jdGlvbihvdGhlcil7CiAgICAgICAgdmFyIGNvbXBzID0gWyJhIiwgImIiLCAiYyIsICJkIl0sCiAgICAgICAgICAgIGksIGxlbjsKCiAgICAgICAgZm9yIChpPTAsIGxlbj1jb21wcy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgICAgIGlmICh0aGlzW2NvbXBzW2ldXSA8IG90aGVyW2NvbXBzW2ldXSl7CiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpc1tjb21wc1tpXV0gPiBvdGhlcltjb21wc1tpXV0pewogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAwOwogICAgfSwKICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuICh0aGlzLmEgKiAxMDAwKSArICh0aGlzLmIgKiAxMDApICsgKHRoaXMuYyAqIDEwKSArIHRoaXMuZDsKICAgIH0sCiAgICB0b1N0cmluZzogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5hICsgIiwiICsgdGhpcy5iICsgIiwiICsgdGhpcy5jICsgIiwiICsgdGhpcy5kOwogICAgfQoKfTsKU3BlY2lmaWNpdHkuY2FsY3VsYXRlID0gZnVuY3Rpb24oc2VsZWN0b3IpewoKICAgIHZhciBpLCBsZW4sCiAgICAgICAgcGFydCwKICAgICAgICBiPTAsIGM9MCwgZD0wOwoKICAgIGZ1bmN0aW9uIHVwZGF0ZVZhbHVlcyhwYXJ0KXsKCiAgICAgICAgdmFyIGksIGosIGxlbiwgbnVtLAogICAgICAgICAgICBlbGVtZW50TmFtZSA9IHBhcnQuZWxlbWVudE5hbWUgPyBwYXJ0LmVsZW1lbnROYW1lLnRleHQgOiAiIiwKICAgICAgICAgICAgbW9kaWZpZXI7CgogICAgICAgIGlmIChlbGVtZW50TmFtZSAmJiBlbGVtZW50TmFtZS5jaGFyQXQoZWxlbWVudE5hbWUubGVuZ3RoLTEpICE9ICIqIikgewogICAgICAgICAgICBkKys7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGk9MCwgbGVuPXBhcnQubW9kaWZpZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsKICAgICAgICAgICAgbW9kaWZpZXIgPSBwYXJ0Lm1vZGlmaWVyc1tpXTsKICAgICAgICAgICAgc3dpdGNoKG1vZGlmaWVyLnR5cGUpewogICAgICAgICAgICAgICAgY2FzZSAiY2xhc3MiOgogICAgICAgICAgICAgICAgY2FzZSAiYXR0cmlidXRlIjoKICAgICAgICAgICAgICAgICAgICBjKys7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAiaWQiOgogICAgICAgICAgICAgICAgICAgIGIrKzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICJwc2V1ZG8iOgogICAgICAgICAgICAgICAgICAgIGlmIChQc2V1ZG9zLmlzRWxlbWVudChtb2RpZmllci50ZXh0KSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGQrKzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgIm5vdCI6CiAgICAgICAgICAgICAgICAgICAgZm9yIChqPTAsIG51bT1tb2RpZmllci5hcmdzLmxlbmd0aDsgaiA8IG51bTsgaisrKXsKICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWVzKG1vZGlmaWVyLmFyZ3Nbal0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICB9CiAgICB9CgogICAgZm9yIChpPTAsIGxlbj1zZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgcGFydCA9IHNlbGVjdG9yLnBhcnRzW2ldOwoKICAgICAgICBpZiAocGFydCBpbnN0YW5jZW9mIFNlbGVjdG9yUGFydCl7CiAgICAgICAgICAgIHVwZGF0ZVZhbHVlcyhwYXJ0KTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBTcGVjaWZpY2l0eSgwLCBiLCBjLCBkKTsKfTsKCnZhciBoID0gL15bMC05YS1mQS1GXSQvLAogICAgbm9uYXNjaWkgPSAvXltcdTAwODAtXHVGRkZGXSQvLAogICAgbmwgPSAvXG58XHJcbnxccnxcZi87CgoKZnVuY3Rpb24gaXNIZXhEaWdpdChjKXsKICAgIHJldHVybiBjICE9PSBudWxsICYmIGgudGVzdChjKTsKfQoKZnVuY3Rpb24gaXNEaWdpdChjKXsKICAgIHJldHVybiBjICE9PSBudWxsICYmIC9cZC8udGVzdChjKTsKfQoKZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpewogICAgcmV0dXJuIGMgIT09IG51bGwgJiYgL1xzLy50ZXN0KGMpOwp9CgpmdW5jdGlvbiBpc05ld0xpbmUoYyl7CiAgICByZXR1cm4gYyAhPT0gbnVsbCAmJiBubC50ZXN0KGMpOwp9CgpmdW5jdGlvbiBpc05hbWVTdGFydChjKXsKICAgIHJldHVybiBjICE9PSBudWxsICYmICgvW2Etel9cdTAwODAtXHVGRkZGXFxdL2kudGVzdChjKSk7Cn0KCmZ1bmN0aW9uIGlzTmFtZUNoYXIoYyl7CiAgICByZXR1cm4gYyAhPT0gbnVsbCAmJiAoaXNOYW1lU3RhcnQoYykgfHwgL1swLTlcLVxcXS8udGVzdChjKSk7Cn0KCmZ1bmN0aW9uIGlzSWRlbnRTdGFydChjKXsKICAgIHJldHVybiBjICE9PSBudWxsICYmIChpc05hbWVTdGFydChjKSB8fCAvXC1cXC8udGVzdChjKSk7Cn0KCmZ1bmN0aW9uIG1peChyZWNlaXZlciwgc3VwcGxpZXIpewogICAgZm9yICh2YXIgcHJvcCBpbiBzdXBwbGllcil7CiAgICAgICAgaWYgKHN1cHBsaWVyLmhhc093blByb3BlcnR5KHByb3ApKXsKICAgICAgICAgICAgcmVjZWl2ZXJbcHJvcF0gPSBzdXBwbGllcltwcm9wXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVjZWl2ZXI7Cn0KZnVuY3Rpb24gVG9rZW5TdHJlYW0oaW5wdXQpewogICAgVG9rZW5TdHJlYW1CYXNlLmNhbGwodGhpcywgaW5wdXQsIFRva2Vucyk7Cn0KClRva2VuU3RyZWFtLnByb3RvdHlwZSA9IG1peChuZXcgVG9rZW5TdHJlYW1CYXNlKCksIHsKICAgIF9nZXRUb2tlbjogZnVuY3Rpb24oY2hhbm5lbCl7CgogICAgICAgIHZhciBjLAogICAgICAgICAgICByZWFkZXIgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIHRva2VuICAgPSBudWxsLAogICAgICAgICAgICBzdGFydExpbmUgICA9IHJlYWRlci5nZXRMaW5lKCksCiAgICAgICAgICAgIHN0YXJ0Q29sICAgID0gcmVhZGVyLmdldENvbCgpOwoKICAgICAgICBjID0gcmVhZGVyLnJlYWQoKTsKCgogICAgICAgIHdoaWxlKGMpewogICAgICAgICAgICBzd2l0Y2goYyl7CiAgICAgICAgICAgICAgICBjYXNlICIvIjoKCiAgICAgICAgICAgICAgICAgICAgaWYocmVhZGVyLnBlZWsoKSA9PSAiKiIpewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuY29tbWVudFRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5jaGFyVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAifCI6CiAgICAgICAgICAgICAgICBjYXNlICJ+IjoKICAgICAgICAgICAgICAgIGNhc2UgIl4iOgogICAgICAgICAgICAgICAgY2FzZSAiJCI6CiAgICAgICAgICAgICAgICBjYXNlICIqIjoKICAgICAgICAgICAgICAgICAgICBpZihyZWFkZXIucGVlaygpID09ICI9Iil7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5jb21wYXJpc29uVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNoYXJUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJcIiI6CiAgICAgICAgICAgICAgICBjYXNlICInIjoKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuc3RyaW5nVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICIjIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYW1lQ2hhcihyZWFkZXIucGVlaygpKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5oYXNoVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNoYXJUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICIuIjoKICAgICAgICAgICAgICAgICAgICBpZiAoaXNEaWdpdChyZWFkZXIucGVlaygpKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5udW1iZXJUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuY2hhclRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgIi0iOgogICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIucGVlaygpID09ICItIil7ICAvL2NvdWxkIGJlIGNsb3NpbmcgSFRNTC1zdHlsZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5odG1sQ29tbWVudEVuZFRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOYW1lU3RhcnQocmVhZGVyLnBlZWsoKSkpewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuaWRlbnRPckZ1bmN0aW9uVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNoYXJUb2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICIhIjoKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuaW1wb3J0YW50VG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJAIjoKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuYXRSdWxlVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICI6IjoKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubm90VG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICI8IjoKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuaHRtbENvbW1lbnRTdGFydFRva2VuKGMsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAiVSI6CiAgICAgICAgICAgICAgICBjYXNlICJ1IjoKICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLnBlZWsoKSA9PSAiKyIpewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMudW5pY29kZVJhbmdlVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGlnaXQoYykpewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMubnVtYmVyVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVzcGFjZShjKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy53aGl0ZXNwYWNlVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSWRlbnRTdGFydChjKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5pZGVudE9yRnVuY3Rpb25Ub2tlbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5jaGFyVG9rZW4oYywgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKCgoKCgogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0b2tlbiAmJiBjID09PSBudWxsKXsKICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5FT0YsbnVsbCxzdGFydExpbmUsc3RhcnRDb2wpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgfSwKICAgIGNyZWF0ZVRva2VuOiBmdW5jdGlvbih0dCwgdmFsdWUsIHN0YXJ0TGluZSwgc3RhcnRDb2wsIG9wdGlvbnMpewogICAgICAgIHZhciByZWFkZXIgPSB0aGlzLl9yZWFkZXI7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHZhbHVlOiAgICAgIHZhbHVlLAogICAgICAgICAgICB0eXBlOiAgICAgICB0dCwKICAgICAgICAgICAgY2hhbm5lbDogICAgb3B0aW9ucy5jaGFubmVsLAogICAgICAgICAgICBlbmRDaGFyOiAgICBvcHRpb25zLmVuZENoYXIsCiAgICAgICAgICAgIGhpZGU6ICAgICAgIG9wdGlvbnMuaGlkZSB8fCBmYWxzZSwKICAgICAgICAgICAgc3RhcnRMaW5lOiAgc3RhcnRMaW5lLAogICAgICAgICAgICBzdGFydENvbDogICBzdGFydENvbCwKICAgICAgICAgICAgZW5kTGluZTogICAgcmVhZGVyLmdldExpbmUoKSwKICAgICAgICAgICAgZW5kQ29sOiAgICAgcmVhZGVyLmdldENvbCgpCiAgICAgICAgfTsKICAgIH0sCiAgICBhdFJ1bGVUb2tlbjogZnVuY3Rpb24oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpewogICAgICAgIHZhciBydWxlICAgID0gZmlyc3QsCiAgICAgICAgICAgIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIHR0ICAgICAgPSBUb2tlbnMuQ0hBUiwKICAgICAgICAgICAgdmFsaWQgICA9IGZhbHNlLAogICAgICAgICAgICBpZGVudCwKICAgICAgICAgICAgYzsKICAgICAgICByZWFkZXIubWFyaygpOwogICAgICAgIGlkZW50ID0gdGhpcy5yZWFkTmFtZSgpOwogICAgICAgIHJ1bGUgPSBmaXJzdCArIGlkZW50OwogICAgICAgIHR0ID0gVG9rZW5zLnR5cGUocnVsZS50b0xvd2VyQ2FzZSgpKTsKICAgICAgICBpZiAodHQgPT0gVG9rZW5zLkNIQVIgfHwgdHQgPT0gVG9rZW5zLlVOS05PV04pewogICAgICAgICAgICBpZiAocnVsZS5sZW5ndGggPiAxKXsKICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLlVOS05PV05fU1lNOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuQ0hBUjsKICAgICAgICAgICAgICAgIHJ1bGUgPSBmaXJzdDsKICAgICAgICAgICAgICAgIHJlYWRlci5yZXNldCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbih0dCwgcnVsZSwgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICB9LAogICAgY2hhclRva2VuOiBmdW5jdGlvbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgdHQgPSBUb2tlbnMudHlwZShjKTsKICAgICAgICB2YXIgb3B0cyA9IHt9OwoKICAgICAgICBpZiAodHQgPT0gLTEpewogICAgICAgICAgICB0dCA9IFRva2Vucy5DSEFSOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9wdHMuZW5kQ2hhciA9IFRva2Vuc1t0dF0uZW5kQ2hhcjsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCBjLCBzdGFydExpbmUsIHN0YXJ0Q29sLCBvcHRzKTsKICAgIH0sCiAgICBjb21tZW50VG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgY29tbWVudCA9IHRoaXMucmVhZENvbW1lbnQoZmlyc3QpOwoKICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbihUb2tlbnMuQ09NTUVOVCwgY29tbWVudCwgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICB9LAogICAgY29tcGFyaXNvblRva2VuOiBmdW5jdGlvbihjLCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgY29tcGFyaXNvbiAgPSBjICsgcmVhZGVyLnJlYWQoKSwKICAgICAgICAgICAgdHQgICAgICA9IFRva2Vucy50eXBlKGNvbXBhcmlzb24pIHx8IFRva2Vucy5DSEFSOwoKICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbih0dCwgY29tcGFyaXNvbiwgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICB9LAogICAgaGFzaFRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7CiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIG5hbWUgICAgPSB0aGlzLnJlYWROYW1lKGZpcnN0KTsKCiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVG9rZW4oVG9rZW5zLkhBU0gsIG5hbWUsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgfSwKICAgIGh0bWxDb21tZW50U3RhcnRUb2tlbjogZnVuY3Rpb24oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpewogICAgICAgIHZhciByZWFkZXIgICAgICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgdGV4dCAgICAgICAgPSBmaXJzdDsKCiAgICAgICAgcmVhZGVyLm1hcmsoKTsKICAgICAgICB0ZXh0ICs9IHJlYWRlci5yZWFkQ291bnQoMyk7CgogICAgICAgIGlmICh0ZXh0ID09ICI8IS0tIil7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5DRE8sIHRleHQsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlYWRlci5yZXNldCgpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFyVG9rZW4oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgIH0KICAgIH0sCiAgICBodG1sQ29tbWVudEVuZFRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7CiAgICAgICAgdmFyIHJlYWRlciAgICAgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICB0ZXh0ICAgICAgICA9IGZpcnN0OwoKICAgICAgICByZWFkZXIubWFyaygpOwogICAgICAgIHRleHQgKz0gcmVhZGVyLnJlYWRDb3VudCgyKTsKCiAgICAgICAgaWYgKHRleHQgPT0gIi0tPiIpewogICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbihUb2tlbnMuQ0RDLCB0ZXh0LCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZWFkZXIucmVzZXQoKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhclRva2VuKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICB9CiAgICB9LAogICAgaWRlbnRPckZ1bmN0aW9uVG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgaWRlbnQgICA9IHRoaXMucmVhZE5hbWUoZmlyc3QpLAogICAgICAgICAgICB0dCAgICAgID0gVG9rZW5zLklERU5UOwogICAgICAgIGlmIChyZWFkZXIucGVlaygpID09ICIoIil7CiAgICAgICAgICAgIGlkZW50ICs9IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICAgIGlmIChpZGVudC50b0xvd2VyQ2FzZSgpID09ICJ1cmwoIil7CiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5VUkk7CiAgICAgICAgICAgICAgICBpZGVudCA9IHRoaXMucmVhZFVSSShpZGVudCk7CiAgICAgICAgICAgICAgICBpZiAoaWRlbnQudG9Mb3dlckNhc2UoKSA9PSAidXJsKCIpewogICAgICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLkZVTkNUSU9OOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuRlVOQ1RJT047CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHJlYWRlci5wZWVrKCkgPT0gIjoiKXsgIC8vbWlnaHQgYmUgYW4gSUUgZnVuY3Rpb24KICAgICAgICAgICAgaWYgKGlkZW50LnRvTG93ZXJDYXNlKCkgPT0gInByb2dpZCIpewogICAgICAgICAgICAgICAgaWRlbnQgKz0gcmVhZGVyLnJlYWRUbygiKCIpOwogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuSUVfRlVOQ1RJT047CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCBpZGVudCwgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICB9LAogICAgaW1wb3J0YW50VG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgcmVhZGVyICAgICAgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIGltcG9ydGFudCAgID0gZmlyc3QsCiAgICAgICAgICAgIHR0ICAgICAgICAgID0gVG9rZW5zLkNIQVIsCiAgICAgICAgICAgIHRlbXAsCiAgICAgICAgICAgIGM7CgogICAgICAgIHJlYWRlci5tYXJrKCk7CiAgICAgICAgYyA9IHJlYWRlci5yZWFkKCk7CgogICAgICAgIHdoaWxlKGMpewogICAgICAgICAgICBpZiAoYyA9PSAiLyIpewogICAgICAgICAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgIT0gIioiKXsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRoaXMucmVhZENvbW1lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT09ICIiKXsgICAgLy9icm9rZW4hCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoYykpewogICAgICAgICAgICAgICAgaW1wb3J0YW50ICs9IGMgKyB0aGlzLnJlYWRXaGl0ZXNwYWNlKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoL2kvaS50ZXN0KGMpKXsKICAgICAgICAgICAgICAgIHRlbXAgPSByZWFkZXIucmVhZENvdW50KDgpOwogICAgICAgICAgICAgICAgaWYgKC9tcG9ydGFudC9pLnRlc3QodGVtcCkpewogICAgICAgICAgICAgICAgICAgIGltcG9ydGFudCArPSBjICsgdGVtcDsKICAgICAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5JTVBPUlRBTlRfU1lNOwoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOyAgLy93ZSdyZSBkb25lCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYyA9IHJlYWRlci5yZWFkKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAodHQgPT0gVG9rZW5zLkNIQVIpewogICAgICAgICAgICByZWFkZXIucmVzZXQoKTsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhclRva2VuKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbih0dCwgaW1wb3J0YW50LCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgICAgICB9CgoKICAgIH0sCiAgICBub3RUb2tlbjogZnVuY3Rpb24oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpewogICAgICAgIHZhciByZWFkZXIgICAgICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgdGV4dCAgICAgICAgPSBmaXJzdDsKCiAgICAgICAgcmVhZGVyLm1hcmsoKTsKICAgICAgICB0ZXh0ICs9IHJlYWRlci5yZWFkQ291bnQoNCk7CgogICAgICAgIGlmICh0ZXh0LnRvTG93ZXJDYXNlKCkgPT0gIjpub3QoIil7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKFRva2Vucy5OT1QsIHRleHQsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlYWRlci5yZXNldCgpOwogICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFyVG9rZW4oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgICAgIH0KICAgIH0sCiAgICBudW1iZXJUb2tlbjogZnVuY3Rpb24oZmlyc3QsIHN0YXJ0TGluZSwgc3RhcnRDb2wpewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICB2YWx1ZSAgID0gdGhpcy5yZWFkTnVtYmVyKGZpcnN0KSwKICAgICAgICAgICAgaWRlbnQsCiAgICAgICAgICAgIHR0ICAgICAgPSBUb2tlbnMuTlVNQkVSLAogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnBlZWsoKTsKCiAgICAgICAgaWYgKGlzSWRlbnRTdGFydChjKSl7CiAgICAgICAgICAgIGlkZW50ID0gdGhpcy5yZWFkTmFtZShyZWFkZXIucmVhZCgpKTsKICAgICAgICAgICAgdmFsdWUgKz0gaWRlbnQ7CgogICAgICAgICAgICBpZiAoL15lbSR8XmV4JHxecHgkfF5nZCR8XnJlbSR8XnZ3JHxedmgkfF5mciR8XnZtYXgkfF52bWluJHxeY2gkfF5jbSR8Xm1tJHxeaW4kfF5wdCR8XnBjJC9pLnRlc3QoaWRlbnQpKXsKICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLkxFTkdUSDsKICAgICAgICAgICAgfSBlbHNlIGlmICgvXmRlZ3xecmFkJHxeZ3JhZCQvaS50ZXN0KGlkZW50KSl7CiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5BTkdMRTsKICAgICAgICAgICAgfSBlbHNlIGlmICgvXm1zJHxecyQvaS50ZXN0KGlkZW50KSl7CiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5USU1FOwogICAgICAgICAgICB9IGVsc2UgaWYgKC9eaHokfF5raHokL2kudGVzdChpZGVudCkpewogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuRlJFUTsKICAgICAgICAgICAgfSBlbHNlIGlmICgvXmRwaSR8XmRwY20kL2kudGVzdChpZGVudCkpewogICAgICAgICAgICAgICAgdHQgPSBUb2tlbnMuUkVTT0xVVElPTjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLkRJTUVOU0lPTjsKICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgaWYgKGMgPT0gIiUiKXsKICAgICAgICAgICAgdmFsdWUgKz0gcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgdHQgPSBUb2tlbnMuUEVSQ0VOVEFHRTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCB2YWx1ZSwgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICB9LAogICAgc3RyaW5nVG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgZGVsaW0gICA9IGZpcnN0LAogICAgICAgICAgICBzdHJpbmcgID0gZmlyc3QsCiAgICAgICAgICAgIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIHByZXYgICAgPSBmaXJzdCwKICAgICAgICAgICAgdHQgICAgICA9IFRva2Vucy5TVFJJTkcsCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucmVhZCgpOwoKICAgICAgICB3aGlsZShjKXsKICAgICAgICAgICAgc3RyaW5nICs9IGM7CiAgICAgICAgICAgIGlmIChjID09IGRlbGltICYmIHByZXYgIT0gIlxcIil7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNOZXdMaW5lKHJlYWRlci5wZWVrKCkpICYmIGMgIT0gIlxcIil7CiAgICAgICAgICAgICAgICB0dCA9IFRva2Vucy5JTlZBTElEOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJldiA9IGM7CiAgICAgICAgICAgIGMgPSByZWFkZXIucmVhZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoYyA9PT0gbnVsbCl7CiAgICAgICAgICAgIHR0ID0gVG9rZW5zLklOVkFMSUQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbih0dCwgc3RyaW5nLCBzdGFydExpbmUsIHN0YXJ0Q29sKTsKICAgIH0sCgogICAgdW5pY29kZVJhbmdlVG9rZW46IGZ1bmN0aW9uKGZpcnN0LCBzdGFydExpbmUsIHN0YXJ0Q29sKXsKICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgdmFsdWUgICA9IGZpcnN0LAogICAgICAgICAgICB0ZW1wLAogICAgICAgICAgICB0dCAgICAgID0gVG9rZW5zLkNIQVI7CiAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgPT0gIisiKXsKICAgICAgICAgICAgcmVhZGVyLm1hcmsoKTsKICAgICAgICAgICAgdmFsdWUgKz0gcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgdmFsdWUgKz0gdGhpcy5yZWFkVW5pY29kZVJhbmdlUGFydCh0cnVlKTsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PSAyKXsKICAgICAgICAgICAgICAgIHJlYWRlci5yZXNldCgpOwogICAgICAgICAgICB9IGVsc2UgewoKICAgICAgICAgICAgICAgIHR0ID0gVG9rZW5zLlVOSUNPREVfUkFOR0U7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiPyIpID09IC0xKXsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5wZWVrKCkgPT0gIi0iKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm1hcmsoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKz0gdGhpcy5yZWFkVW5pY29kZVJhbmdlUGFydChmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLmxlbmd0aCA9PSAxKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZXNldCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGVtcDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRva2VuKHR0LCB2YWx1ZSwgc3RhcnRMaW5lLCBzdGFydENvbCk7CiAgICB9LAogICAgd2hpdGVzcGFjZVRva2VuOiBmdW5jdGlvbihmaXJzdCwgc3RhcnRMaW5lLCBzdGFydENvbCl7CiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIHZhbHVlICAgPSBmaXJzdCArIHRoaXMucmVhZFdoaXRlc3BhY2UoKTsKICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUb2tlbihUb2tlbnMuUywgdmFsdWUsIHN0YXJ0TGluZSwgc3RhcnRDb2wpOwogICAgfSwKCiAgICByZWFkVW5pY29kZVJhbmdlUGFydDogZnVuY3Rpb24oYWxsb3dRdWVzdGlvbk1hcmspewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICBwYXJ0ID0gIiIsCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucGVlaygpOwogICAgICAgIHdoaWxlKGlzSGV4RGlnaXQoYykgJiYgcGFydC5sZW5ndGggPCA2KXsKICAgICAgICAgICAgcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgcGFydCArPSBjOwogICAgICAgICAgICBjID0gcmVhZGVyLnBlZWsoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFsbG93UXVlc3Rpb25NYXJrKXsKICAgICAgICAgICAgd2hpbGUoYyA9PSAiPyIgJiYgcGFydC5sZW5ndGggPCA2KXsKICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkKCk7CiAgICAgICAgICAgICAgICBwYXJ0ICs9IGM7CiAgICAgICAgICAgICAgICBjID0gcmVhZGVyLnBlZWsoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHBhcnQ7CiAgICB9LAoKICAgIHJlYWRXaGl0ZXNwYWNlOiBmdW5jdGlvbigpewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICB3aGl0ZXNwYWNlID0gIiIsCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucGVlaygpOwoKICAgICAgICB3aGlsZShpc1doaXRlc3BhY2UoYykpewogICAgICAgICAgICByZWFkZXIucmVhZCgpOwogICAgICAgICAgICB3aGl0ZXNwYWNlICs9IGM7CiAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHdoaXRlc3BhY2U7CiAgICB9LAogICAgcmVhZE51bWJlcjogZnVuY3Rpb24oZmlyc3QpewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICBudW1iZXIgID0gZmlyc3QsCiAgICAgICAgICAgIGhhc0RvdCAgPSAoZmlyc3QgPT0gIi4iKSwKICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5wZWVrKCk7CgoKICAgICAgICB3aGlsZShjKXsKICAgICAgICAgICAgaWYgKGlzRGlnaXQoYykpewogICAgICAgICAgICAgICAgbnVtYmVyICs9IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAiLiIpewogICAgICAgICAgICAgICAgaWYgKGhhc0RvdCl7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGhhc0RvdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICs9IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVtYmVyOwogICAgfSwKICAgIHJlYWRTdHJpbmc6IGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHJlYWRlciAgPSB0aGlzLl9yZWFkZXIsCiAgICAgICAgICAgIGRlbGltICAgPSByZWFkZXIucmVhZCgpLAogICAgICAgICAgICBzdHJpbmcgID0gZGVsaW0sCiAgICAgICAgICAgIHByZXYgICAgPSBkZWxpbSwKICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5wZWVrKCk7CgogICAgICAgIHdoaWxlKGMpewogICAgICAgICAgICBjID0gcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgc3RyaW5nICs9IGM7CiAgICAgICAgICAgIGlmIChjID09IGRlbGltICYmIHByZXYgIT0gIlxcIil7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXNOZXdMaW5lKHJlYWRlci5wZWVrKCkpICYmIGMgIT0gIlxcIil7CiAgICAgICAgICAgICAgICBzdHJpbmcgPSAiIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZXYgPSBjOwogICAgICAgICAgICBjID0gcmVhZGVyLnBlZWsoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGMgPT09IG51bGwpewogICAgICAgICAgICBzdHJpbmcgPSAiIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJpbmc7CiAgICB9LAogICAgcmVhZFVSSTogZnVuY3Rpb24oZmlyc3QpewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICB1cmkgICAgID0gZmlyc3QsCiAgICAgICAgICAgIGlubmVyICAgPSAiIiwKICAgICAgICAgICAgYyAgICAgICA9IHJlYWRlci5wZWVrKCk7CgogICAgICAgIHJlYWRlci5tYXJrKCk7CiAgICAgICAgd2hpbGUoYyAmJiBpc1doaXRlc3BhY2UoYykpewogICAgICAgICAgICByZWFkZXIucmVhZCgpOwogICAgICAgICAgICBjID0gcmVhZGVyLnBlZWsoKTsKICAgICAgICB9CiAgICAgICAgaWYgKGMgPT0gIiciIHx8IGMgPT0gIlwiIil7CiAgICAgICAgICAgIGlubmVyID0gdGhpcy5yZWFkU3RyaW5nKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaW5uZXIgPSB0aGlzLnJlYWRVUkwoKTsKICAgICAgICB9CgogICAgICAgIGMgPSByZWFkZXIucGVlaygpOwogICAgICAgIHdoaWxlKGMgJiYgaXNXaGl0ZXNwYWNlKGMpKXsKICAgICAgICAgICAgcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7CiAgICAgICAgfQogICAgICAgIGlmIChpbm5lciA9PT0gIiIgfHwgYyAhPSAiKSIpewogICAgICAgICAgICB1cmkgPSBmaXJzdDsKICAgICAgICAgICAgcmVhZGVyLnJlc2V0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXJpICs9IGlubmVyICsgcmVhZGVyLnJlYWQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB1cmk7CiAgICB9LAogICAgcmVhZFVSTDogZnVuY3Rpb24oKXsKICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgdXJsICAgICA9ICIiLAogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnBlZWsoKTsKICAgICAgICB3aGlsZSAoL15bISMkJSZcXCotfl0kLy50ZXN0KGMpKXsKICAgICAgICAgICAgdXJsICs9IHJlYWRlci5yZWFkKCk7CiAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHVybDsKCiAgICB9LAogICAgcmVhZE5hbWU6IGZ1bmN0aW9uKGZpcnN0KXsKICAgICAgICB2YXIgcmVhZGVyICA9IHRoaXMuX3JlYWRlciwKICAgICAgICAgICAgaWRlbnQgICA9IGZpcnN0IHx8ICIiLAogICAgICAgICAgICBjICAgICAgID0gcmVhZGVyLnBlZWsoKTsKCiAgICAgICAgd2hpbGUodHJ1ZSl7CiAgICAgICAgICAgIGlmIChjID09ICJcXCIpewogICAgICAgICAgICAgICAgaWRlbnQgKz0gdGhpcy5yZWFkRXNjYXBlKHJlYWRlci5yZWFkKCkpOwogICAgICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZihjICYmIGlzTmFtZUNoYXIoYykpewogICAgICAgICAgICAgICAgaWRlbnQgKz0gcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgICAgIGMgPSByZWFkZXIucGVlaygpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpZGVudDsKICAgIH0sCgogICAgcmVhZEVzY2FwZTogZnVuY3Rpb24oZmlyc3QpewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICBjc3NFc2NhcGUgPSBmaXJzdCB8fCAiIiwKICAgICAgICAgICAgaSAgICAgICA9IDAsCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucGVlaygpOwoKICAgICAgICBpZiAoaXNIZXhEaWdpdChjKSl7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGNzc0VzY2FwZSArPSByZWFkZXIucmVhZCgpOwogICAgICAgICAgICAgICAgYyA9IHJlYWRlci5wZWVrKCk7CiAgICAgICAgICAgIH0gd2hpbGUoYyAmJiBpc0hleERpZ2l0KGMpICYmICsraSA8IDYpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNzc0VzY2FwZS5sZW5ndGggPT0gMyAmJiAvXHMvLnRlc3QoYykgfHwKICAgICAgICAgICAgY3NzRXNjYXBlLmxlbmd0aCA9PSA3IHx8IGNzc0VzY2FwZS5sZW5ndGggPT0gMSl7CiAgICAgICAgICAgICAgICByZWFkZXIucmVhZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGMgPSAiIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjc3NFc2NhcGUgKyBjOwogICAgfSwKCiAgICByZWFkQ29tbWVudDogZnVuY3Rpb24oZmlyc3QpewogICAgICAgIHZhciByZWFkZXIgID0gdGhpcy5fcmVhZGVyLAogICAgICAgICAgICBjb21tZW50ID0gZmlyc3QgfHwgIiIsCiAgICAgICAgICAgIGMgICAgICAgPSByZWFkZXIucmVhZCgpOwoKICAgICAgICBpZiAoYyA9PSAiKiIpewogICAgICAgICAgICB3aGlsZShjKXsKICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gYzsKICAgICAgICAgICAgICAgIGlmIChjb21tZW50Lmxlbmd0aCA+IDIgJiYgYyA9PSAiKiIgJiYgcmVhZGVyLnBlZWsoKSA9PSAiLyIpewogICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgKz0gcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjID0gcmVhZGVyLnJlYWQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KCiAgICB9Cn0pOwoKdmFyIFRva2VucyAgPSBbCiAgICB7IG5hbWU6ICJDRE8ifSwKICAgIHsgbmFtZTogIkNEQyJ9LAogICAgeyBuYW1lOiAiUyIsIHdoaXRlc3BhY2U6IHRydWUvKiwgY2hhbm5lbDogIndzIiovfSwKICAgIHsgbmFtZTogIkNPTU1FTlQiLCBjb21tZW50OiB0cnVlLCBoaWRlOiB0cnVlLCBjaGFubmVsOiAiY29tbWVudCIgfSwKICAgIHsgbmFtZTogIklOQ0xVREVTIiwgdGV4dDogIn49In0sCiAgICB7IG5hbWU6ICJEQVNITUFUQ0giLCB0ZXh0OiAifD0ifSwKICAgIHsgbmFtZTogIlBSRUZJWE1BVENIIiwgdGV4dDogIl49In0sCiAgICB7IG5hbWU6ICJTVUZGSVhNQVRDSCIsIHRleHQ6ICIkPSJ9LAogICAgeyBuYW1lOiAiU1VCU1RSSU5HTUFUQ0giLCB0ZXh0OiAiKj0ifSwKICAgIHsgbmFtZTogIlNUUklORyJ9LAogICAgeyBuYW1lOiAiSURFTlQifSwKICAgIHsgbmFtZTogIkhBU0gifSwKICAgIHsgbmFtZTogIklNUE9SVF9TWU0iLCB0ZXh0OiAiQGltcG9ydCJ9LAogICAgeyBuYW1lOiAiUEFHRV9TWU0iLCB0ZXh0OiAiQHBhZ2UifSwKICAgIHsgbmFtZTogIk1FRElBX1NZTSIsIHRleHQ6ICJAbWVkaWEifSwKICAgIHsgbmFtZTogIkZPTlRfRkFDRV9TWU0iLCB0ZXh0OiAiQGZvbnQtZmFjZSJ9LAogICAgeyBuYW1lOiAiQ0hBUlNFVF9TWU0iLCB0ZXh0OiAiQGNoYXJzZXQifSwKICAgIHsgbmFtZTogIk5BTUVTUEFDRV9TWU0iLCB0ZXh0OiAiQG5hbWVzcGFjZSJ9LAogICAgeyBuYW1lOiAiVklFV1BPUlRfU1lNIiwgdGV4dDogWyJAdmlld3BvcnQiLCAiQC1tcy12aWV3cG9ydCJdfSwKICAgIHsgbmFtZTogIlVOS05PV05fU1lNIiB9LAogICAgeyBuYW1lOiAiS0VZRlJBTUVTX1NZTSIsIHRleHQ6IFsgIkBrZXlmcmFtZXMiLCAiQC13ZWJraXQta2V5ZnJhbWVzIiwgIkAtbW96LWtleWZyYW1lcyIsICJALW8ta2V5ZnJhbWVzIiBdIH0sCiAgICB7IG5hbWU6ICJJTVBPUlRBTlRfU1lNIn0sCiAgICB7IG5hbWU6ICJMRU5HVEgifSwKICAgIHsgbmFtZTogIkFOR0xFIn0sCiAgICB7IG5hbWU6ICJUSU1FIn0sCiAgICB7IG5hbWU6ICJGUkVRIn0sCiAgICB7IG5hbWU6ICJESU1FTlNJT04ifSwKICAgIHsgbmFtZTogIlBFUkNFTlRBR0UifSwKICAgIHsgbmFtZTogIk5VTUJFUiJ9LAogICAgeyBuYW1lOiAiVVJJIn0sCiAgICB7IG5hbWU6ICJGVU5DVElPTiJ9LAogICAgeyBuYW1lOiAiVU5JQ09ERV9SQU5HRSJ9LAogICAgeyBuYW1lOiAiSU5WQUxJRCJ9LAogICAgeyBuYW1lOiAiUExVUyIsIHRleHQ6ICIrIiB9LAogICAgeyBuYW1lOiAiR1JFQVRFUiIsIHRleHQ6ICI+In0sCiAgICB7IG5hbWU6ICJDT01NQSIsIHRleHQ6ICIsIn0sCiAgICB7IG5hbWU6ICJUSUxERSIsIHRleHQ6ICJ+In0sCiAgICB7IG5hbWU6ICJOT1QifSwKICAgIHsgbmFtZTogIlRPUExFRlRDT1JORVJfU1lNIiwgdGV4dDogIkB0b3AtbGVmdC1jb3JuZXIifSwKICAgIHsgbmFtZTogIlRPUExFRlRfU1lNIiwgdGV4dDogIkB0b3AtbGVmdCJ9LAogICAgeyBuYW1lOiAiVE9QQ0VOVEVSX1NZTSIsIHRleHQ6ICJAdG9wLWNlbnRlciJ9LAogICAgeyBuYW1lOiAiVE9QUklHSFRfU1lNIiwgdGV4dDogIkB0b3AtcmlnaHQifSwKICAgIHsgbmFtZTogIlRPUFJJR0hUQ09STkVSX1NZTSIsIHRleHQ6ICJAdG9wLXJpZ2h0LWNvcm5lciJ9LAogICAgeyBuYW1lOiAiQk9UVE9NTEVGVENPUk5FUl9TWU0iLCB0ZXh0OiAiQGJvdHRvbS1sZWZ0LWNvcm5lciJ9LAogICAgeyBuYW1lOiAiQk9UVE9NTEVGVF9TWU0iLCB0ZXh0OiAiQGJvdHRvbS1sZWZ0In0sCiAgICB7IG5hbWU6ICJCT1RUT01DRU5URVJfU1lNIiwgdGV4dDogIkBib3R0b20tY2VudGVyIn0sCiAgICB7IG5hbWU6ICJCT1RUT01SSUdIVF9TWU0iLCB0ZXh0OiAiQGJvdHRvbS1yaWdodCJ9LAogICAgeyBuYW1lOiAiQk9UVE9NUklHSFRDT1JORVJfU1lNIiwgdGV4dDogIkBib3R0b20tcmlnaHQtY29ybmVyIn0sCiAgICB7IG5hbWU6ICJMRUZUVE9QX1NZTSIsIHRleHQ6ICJAbGVmdC10b3AifSwKICAgIHsgbmFtZTogIkxFRlRNSURETEVfU1lNIiwgdGV4dDogIkBsZWZ0LW1pZGRsZSJ9LAogICAgeyBuYW1lOiAiTEVGVEJPVFRPTV9TWU0iLCB0ZXh0OiAiQGxlZnQtYm90dG9tIn0sCiAgICB7IG5hbWU6ICJSSUdIVFRPUF9TWU0iLCB0ZXh0OiAiQHJpZ2h0LXRvcCJ9LAogICAgeyBuYW1lOiAiUklHSFRNSURETEVfU1lNIiwgdGV4dDogIkByaWdodC1taWRkbGUifSwKICAgIHsgbmFtZTogIlJJR0hUQk9UVE9NX1NZTSIsIHRleHQ6ICJAcmlnaHQtYm90dG9tIn0sCiAgICB7IG5hbWU6ICJSRVNPTFVUSU9OIiwgc3RhdGU6ICJtZWRpYSJ9LAogICAgeyBuYW1lOiAiSUVfRlVOQ1RJT04iIH0sCiAgICB7IG5hbWU6ICJDSEFSIiB9LAogICAgewogICAgICAgIG5hbWU6ICJQSVBFIiwKICAgICAgICB0ZXh0OiAifCIKICAgIH0sCiAgICB7CiAgICAgICAgbmFtZTogIlNMQVNIIiwKICAgICAgICB0ZXh0OiAiLyIKICAgIH0sCiAgICB7CiAgICAgICAgbmFtZTogIk1JTlVTIiwKICAgICAgICB0ZXh0OiAiLSIKICAgIH0sCiAgICB7CiAgICAgICAgbmFtZTogIlNUQVIiLAogICAgICAgIHRleHQ6ICIqIgogICAgfSwKCiAgICB7CiAgICAgICAgbmFtZTogIkxCUkFDRSIsCiAgICAgICAgZW5kQ2hhcjogIn0iLAogICAgICAgIHRleHQ6ICJ7IgogICAgfSwKICAgIHsKICAgICAgICBuYW1lOiAiUkJSQUNFIiwKICAgICAgICB0ZXh0OiAifSIKICAgIH0sCiAgICB7CiAgICAgICAgbmFtZTogIkxCUkFDS0VUIiwKICAgICAgICBlbmRDaGFyOiAiXSIsCiAgICAgICAgdGV4dDogIlsiCiAgICB9LAogICAgewogICAgICAgIG5hbWU6ICJSQlJBQ0tFVCIsCiAgICAgICAgdGV4dDogIl0iCiAgICB9LAogICAgewogICAgICAgIG5hbWU6ICJFUVVBTFMiLAogICAgICAgIHRleHQ6ICI9IgogICAgfSwKICAgIHsKICAgICAgICBuYW1lOiAiQ09MT04iLAogICAgICAgIHRleHQ6ICI6IgogICAgfSwKICAgIHsKICAgICAgICBuYW1lOiAiU0VNSUNPTE9OIiwKICAgICAgICB0ZXh0OiAiOyIKICAgIH0sCgogICAgewogICAgICAgIG5hbWU6ICJMUEFSRU4iLAogICAgICAgIGVuZENoYXI6ICIpIiwKICAgICAgICB0ZXh0OiAiKCIKICAgIH0sCiAgICB7CiAgICAgICAgbmFtZTogIlJQQVJFTiIsCiAgICAgICAgdGV4dDogIikiCiAgICB9LAogICAgewogICAgICAgIG5hbWU6ICJET1QiLAogICAgICAgIHRleHQ6ICIuIgogICAgfQpdOwoKKGZ1bmN0aW9uKCl7CgogICAgdmFyIG5hbWVNYXAgPSBbXSwKICAgICAgICB0eXBlTWFwID0ge307CgogICAgVG9rZW5zLlVOS05PV04gPSAtMTsKICAgIFRva2Vucy51bnNoaWZ0KHtuYW1lOiJFT0YifSk7CiAgICBmb3IgKHZhciBpPTAsIGxlbiA9IFRva2Vucy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgbmFtZU1hcC5wdXNoKFRva2Vuc1tpXS5uYW1lKTsKICAgICAgICBUb2tlbnNbVG9rZW5zW2ldLm5hbWVdID0gaTsKICAgICAgICBpZiAoVG9rZW5zW2ldLnRleHQpewogICAgICAgICAgICBpZiAoVG9rZW5zW2ldLnRleHQgaW5zdGFuY2VvZiBBcnJheSl7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGogPCBUb2tlbnNbaV0udGV4dC5sZW5ndGg7IGorKyl7CiAgICAgICAgICAgICAgICAgICAgdHlwZU1hcFtUb2tlbnNbaV0udGV4dFtqXV0gPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHlwZU1hcFtUb2tlbnNbaV0udGV4dF0gPSBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIFRva2Vucy5uYW1lID0gZnVuY3Rpb24odHQpewogICAgICAgIHJldHVybiBuYW1lTWFwW3R0XTsKICAgIH07CgogICAgVG9rZW5zLnR5cGUgPSBmdW5jdGlvbihjKXsKICAgICAgICByZXR1cm4gdHlwZU1hcFtjXSB8fCAtMTsKICAgIH07Cgp9KSgpOwp2YXIgVmFsaWRhdGlvbiA9IHsKCiAgICB2YWxpZGF0ZTogZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKXsKICAgICAgICB2YXIgbmFtZSAgICAgICAgPSBwcm9wZXJ0eS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgIHBhcnRzICAgICAgID0gdmFsdWUucGFydHMsCiAgICAgICAgICAgIGV4cHJlc3Npb24gID0gbmV3IFByb3BlcnR5VmFsdWVJdGVyYXRvcih2YWx1ZSksCiAgICAgICAgICAgIHNwZWMgICAgICAgID0gUHJvcGVydGllc1tuYW1lXSwKICAgICAgICAgICAgcGFydCwKICAgICAgICAgICAgdmFsaWQsCiAgICAgICAgICAgIGosIGNvdW50LAogICAgICAgICAgICBtc2csCiAgICAgICAgICAgIHR5cGVzLAogICAgICAgICAgICBsYXN0LAogICAgICAgICAgICBsaXRlcmFscywKICAgICAgICAgICAgbWF4LCBtdWx0aSwgZ3JvdXA7CgogICAgICAgIGlmICghc3BlYykgewogICAgICAgICAgICBpZiAobmFtZS5pbmRleE9mKCItIikgIT09IDApeyAgICAvL3ZlbmRvciBwcmVmaXhlZCBhcmUgb2sKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoIlVua25vd24gcHJvcGVydHkgJyIgKyBwcm9wZXJ0eSArICInLiIsIHByb3BlcnR5LmxpbmUsIHByb3BlcnR5LmNvbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGVjICE9ICJudW1iZXIiKXsKICAgICAgICAgICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciKXsKICAgICAgICAgICAgICAgIGlmIChzcGVjLmluZGV4T2YoInx8IikgPiAtMSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBQcm9wZXJ0eShzcGVjLCBleHByZXNzaW9uKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5nbGVQcm9wZXJ0eShzcGVjLCBleHByZXNzaW9uLCAxKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlYy5tdWx0aSkgewogICAgICAgICAgICAgICAgdGhpcy5tdWx0aVByb3BlcnR5KHNwZWMubXVsdGksIGV4cHJlc3Npb24sIHNwZWMuY29tbWEsIHNwZWMubWF4IHx8IEluZmluaXR5KTsKICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICBzcGVjKGV4cHJlc3Npb24pOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9LAoKICAgIHNpbmdsZVByb3BlcnR5OiBmdW5jdGlvbih0eXBlcywgZXhwcmVzc2lvbiwgbWF4LCBwYXJ0aWFsKSB7CgogICAgICAgIHZhciByZXN1bHQgICAgICA9IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSAgICAgICA9IGV4cHJlc3Npb24udmFsdWUsCiAgICAgICAgICAgIGNvdW50ICAgICAgID0gMCwKICAgICAgICAgICAgcGFydDsKCiAgICAgICAgd2hpbGUgKGV4cHJlc3Npb24uaGFzTmV4dCgpICYmIGNvdW50IDwgbWF4KSB7CiAgICAgICAgICAgIHJlc3VsdCA9IFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCB0eXBlcyk7CiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgaWYgKGV4cHJlc3Npb24uaGFzTmV4dCgpICYmICFleHByZXNzaW9uLmlzRmlyc3QoKSkgewogICAgICAgICAgICAgICAgcGFydCA9IGV4cHJlc3Npb24ucGVlaygpOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgZW5kIG9mIHZhbHVlIGJ1dCBmb3VuZCAnIiArIHBhcnQgKyAiJy4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCAoIiArIHR5cGVzICsgIikgYnV0IGZvdW5kICciICsgdmFsdWUgKyAiJy4iLCB2YWx1ZS5saW5lLCB2YWx1ZS5jb2wpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmhhc05leHQoKSkgewogICAgICAgICAgICBwYXJ0ID0gZXhwcmVzc2lvbi5uZXh0KCk7CiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgJyIgKyBwYXJ0ICsgIicuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCk7CiAgICAgICAgfQoKICAgIH0sCgogICAgbXVsdGlQcm9wZXJ0eTogZnVuY3Rpb24gKHR5cGVzLCBleHByZXNzaW9uLCBjb21tYSwgbWF4KSB7CgogICAgICAgIHZhciByZXN1bHQgICAgICA9IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSAgICAgICA9IGV4cHJlc3Npb24udmFsdWUsCiAgICAgICAgICAgIGNvdW50ICAgICAgID0gMCwKICAgICAgICAgICAgc2VwICAgICAgICAgPSBmYWxzZSwKICAgICAgICAgICAgcGFydDsKCiAgICAgICAgd2hpbGUoZXhwcmVzc2lvbi5oYXNOZXh0KCkgJiYgIXJlc3VsdCAmJiBjb3VudCA8IG1heCkgewogICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHR5cGVzKSkgewogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvbi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5wZWVrKCkgPT0gIiwiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBleHByZXNzaW9uLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmhhc05leHQoKSAmJiAhZXhwcmVzc2lvbi5pc0ZpcnN0KCkpIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBleHByZXNzaW9uLnBlZWsoKTsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoIkV4cGVjdGVkIGVuZCBvZiB2YWx1ZSBidXQgZm91bmQgJyIgKyBwYXJ0ICsgIicuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gZXhwcmVzc2lvbi5wcmV2aW91cygpOwogICAgICAgICAgICAgICAgaWYgKGNvbW1hICYmIHBhcnQgPT0gIiwiKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgZW5kIG9mIHZhbHVlIGJ1dCBmb3VuZCAnIiArIHBhcnQgKyAiJy4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKCIgKyB0eXBlcyArICIpIGJ1dCBmb3VuZCAnIiArIHZhbHVlICsgIicuIiwgdmFsdWUubGluZSwgdmFsdWUuY29sKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaGFzTmV4dCgpKSB7CiAgICAgICAgICAgIHBhcnQgPSBleHByZXNzaW9uLm5leHQoKTsKICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgZW5kIG9mIHZhbHVlIGJ1dCBmb3VuZCAnIiArIHBhcnQgKyAiJy4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sKTsKICAgICAgICB9CgogICAgfSwKCiAgICBncm91cFByb3BlcnR5OiBmdW5jdGlvbiAodHlwZXMsIGV4cHJlc3Npb24sIGNvbW1hKSB7CgogICAgICAgIHZhciByZXN1bHQgICAgICA9IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSAgICAgICA9IGV4cHJlc3Npb24udmFsdWUsCiAgICAgICAgICAgIHR5cGVDb3VudCAgID0gdHlwZXMuc3BsaXQoInx8IikubGVuZ3RoLAogICAgICAgICAgICBncm91cHMgICAgICA9IHsgY291bnQ6IDAgfSwKICAgICAgICAgICAgcGFydGlhbCAgICAgPSBmYWxzZSwKICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgcGFydDsKCiAgICAgICAgd2hpbGUoZXhwcmVzc2lvbi5oYXNOZXh0KCkgJiYgIXJlc3VsdCkgewogICAgICAgICAgICBuYW1lID0gVmFsaWRhdGlvblR5cGVzLmlzQW55T2ZHcm91cChleHByZXNzaW9uLCB0eXBlcyk7CiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBzW25hbWVdKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGdyb3Vwc1tuYW1lXSA9IDE7CiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLmNvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgcGFydGlhbCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGlmIChncm91cHMuY291bnQgPT0gdHlwZUNvdW50IHx8ICFleHByZXNzaW9uLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICBpZiAocGFydGlhbCAmJiBleHByZXNzaW9uLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBleHByZXNzaW9uLnBlZWsoKTsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kICciICsgcGFydCArICInLiIsIHBhcnQubGluZSwgcGFydC5jb2wpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKCIgKyB0eXBlcyArICIpIGJ1dCBmb3VuZCAnIiArIHZhbHVlICsgIicuIiwgdmFsdWUubGluZSwgdmFsdWUuY29sKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgcGFydCA9IGV4cHJlc3Npb24ubmV4dCgpOwogICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCJFeHBlY3RlZCBlbmQgb2YgdmFsdWUgYnV0IGZvdW5kICciICsgcGFydCArICInLiIsIHBhcnQubGluZSwgcGFydC5jb2wpOwogICAgICAgIH0KICAgIH0KCgoKfTsKZnVuY3Rpb24gVmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGxpbmUsIGNvbCl7CiAgICB0aGlzLmNvbCA9IGNvbDsKICAgIHRoaXMubGluZSA9IGxpbmU7CiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwoKfQpWYWxpZGF0aW9uRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7CnZhciBWYWxpZGF0aW9uVHlwZXMgPSB7CgogICAgaXNMaXRlcmFsOiBmdW5jdGlvbiAocGFydCwgbGl0ZXJhbHMpIHsKICAgICAgICB2YXIgdGV4dCA9IHBhcnQudGV4dC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgIGFyZ3MgPSBsaXRlcmFscy5zcGxpdCgiIHwgIiksCiAgICAgICAgICAgIGksIGxlbiwgZm91bmQgPSBmYWxzZTsKCiAgICAgICAgZm9yIChpPTAsbGVuPWFyZ3MubGVuZ3RoOyBpIDwgbGVuICYmICFmb3VuZDsgaSsrKXsKICAgICAgICAgICAgaWYgKHRleHQgPT0gYXJnc1tpXS50b0xvd2VyQ2FzZSgpKXsKICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZvdW5kOwogICAgfSwKCiAgICBpc1NpbXBsZTogZnVuY3Rpb24odHlwZSkgewogICAgICAgIHJldHVybiAhIXRoaXMuc2ltcGxlW3R5cGVdOwogICAgfSwKCiAgICBpc0NvbXBsZXg6IGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICByZXR1cm4gISF0aGlzLmNvbXBsZXhbdHlwZV07CiAgICB9LAogICAgaXNBbnk6IGZ1bmN0aW9uIChleHByZXNzaW9uLCB0eXBlcykgewogICAgICAgIHZhciBhcmdzID0gdHlwZXMuc3BsaXQoIiB8ICIpLAogICAgICAgICAgICBpLCBsZW4sIGZvdW5kID0gZmFsc2U7CgogICAgICAgIGZvciAoaT0wLGxlbj1hcmdzLmxlbmd0aDsgaSA8IGxlbiAmJiAhZm91bmQgJiYgZXhwcmVzc2lvbi5oYXNOZXh0KCk7IGkrKyl7CiAgICAgICAgICAgIGZvdW5kID0gdGhpcy5pc1R5cGUoZXhwcmVzc2lvbiwgYXJnc1tpXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZm91bmQ7CiAgICB9LAogICAgaXNBbnlPZkdyb3VwOiBmdW5jdGlvbihleHByZXNzaW9uLCB0eXBlcykgewogICAgICAgIHZhciBhcmdzID0gdHlwZXMuc3BsaXQoIiB8fCAiKSwKICAgICAgICAgICAgaSwgbGVuLCBmb3VuZCA9IGZhbHNlOwoKICAgICAgICBmb3IgKGk9MCxsZW49YXJncy5sZW5ndGg7IGkgPCBsZW4gJiYgIWZvdW5kOyBpKyspewogICAgICAgICAgICBmb3VuZCA9IHRoaXMuaXNUeXBlKGV4cHJlc3Npb24sIGFyZ3NbaV0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZvdW5kID8gYXJnc1tpLTFdIDogZmFsc2U7CiAgICB9LAogICAgaXNUeXBlOiBmdW5jdGlvbiAoZXhwcmVzc2lvbiwgdHlwZSkgewogICAgICAgIHZhciBwYXJ0ID0gZXhwcmVzc2lvbi5wZWVrKCksCiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwoKICAgICAgICBpZiAodHlwZS5jaGFyQXQoMCkgIT0gIjwiKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuaXNMaXRlcmFsKHBhcnQsIHR5cGUpOwogICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICBleHByZXNzaW9uLm5leHQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaW1wbGVbdHlwZV0pIHsKICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5zaW1wbGVbdHlwZV0ocGFydCk7CiAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgIGV4cHJlc3Npb24ubmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5jb21wbGV4W3R5cGVdKGV4cHJlc3Npb24pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0sCgoKCiAgICBzaW1wbGU6IHsKCiAgICAgICAgIjxhYnNvbHV0ZS1zaXplPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChwYXJ0LCAieHgtc21hbGwgfCB4LXNtYWxsIHwgc21hbGwgfCBtZWRpdW0gfCBsYXJnZSB8IHgtbGFyZ2UgfCB4eC1sYXJnZSIpOwogICAgICAgIH0sCgogICAgICAgICI8YXR0YWNobWVudD4iOiBmdW5jdGlvbihwYXJ0KXsKICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwgInNjcm9sbCB8IGZpeGVkIHwgbG9jYWwiKTsKICAgICAgICB9LAoKICAgICAgICAiPGF0dHI+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gImZ1bmN0aW9uIiAmJiBwYXJ0Lm5hbWUgPT0gImF0dHIiOwogICAgICAgIH0sCgogICAgICAgICI8YmctaW1hZ2U+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiB0aGlzWyI8aW1hZ2U+Il0ocGFydCkgfHwgdGhpc1siPGdyYWRpZW50PiJdKHBhcnQpIHx8ICBwYXJ0ID09ICJub25lIjsKICAgICAgICB9LAoKICAgICAgICAiPGdyYWRpZW50PiI6IGZ1bmN0aW9uKHBhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIHBhcnQudHlwZSA9PSAiZnVuY3Rpb24iICYmIC9eKD86XC0oPzptc3xtb3p8b3x3ZWJraXQpXC0pPyg/OnJlcGVhdGluZ1wtKT8oPzpyYWRpYWxcLXxsaW5lYXJcLSk/Z3JhZGllbnQvaS50ZXN0KHBhcnQpOwogICAgICAgIH0sCgogICAgICAgICI8Ym94PiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChwYXJ0LCAicGFkZGluZy1ib3ggfCBib3JkZXItYm94IHwgY29udGVudC1ib3giKTsKICAgICAgICB9LAoKICAgICAgICAiPGNvbnRlbnQ+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gImZ1bmN0aW9uIiAmJiBwYXJ0Lm5hbWUgPT0gImNvbnRlbnQiOwogICAgICAgIH0sCgogICAgICAgICI8cmVsYXRpdmUtc2l6ZT4iOiBmdW5jdGlvbihwYXJ0KXsKICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwgInNtYWxsZXIgfCBsYXJnZXIiKTsKICAgICAgICB9LAogICAgICAgICI8aWRlbnQ+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gImlkZW50aWZpZXIiOwogICAgICAgIH0sCgogICAgICAgICI8bGVuZ3RoPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICBpZiAocGFydC50eXBlID09ICJmdW5jdGlvbiIgJiYgL14oPzpcLSg/Om1zfG1venxvfHdlYmtpdClcLSk/Y2FsYy9pLnRlc3QocGFydCkpewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQudHlwZSA9PSAibGVuZ3RoIiB8fCBwYXJ0LnR5cGUgPT0gIm51bWJlciIgfHwgcGFydC50eXBlID09ICJpbnRlZ2VyIiB8fCBwYXJ0ID09ICIwIjsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgICI8Y29sb3I+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gImNvbG9yIiB8fCBwYXJ0ID09ICJ0cmFuc3BhcmVudCI7CiAgICAgICAgfSwKCiAgICAgICAgIjxudW1iZXI+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gIm51bWJlciIgfHwgdGhpc1siPGludGVnZXI+Il0ocGFydCk7CiAgICAgICAgfSwKCiAgICAgICAgIjxpbnRlZ2VyPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gcGFydC50eXBlID09ICJpbnRlZ2VyIjsKICAgICAgICB9LAoKICAgICAgICAiPGxpbmU+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gImludGVnZXIiOwogICAgICAgIH0sCgogICAgICAgICI8YW5nbGU+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gImFuZ2xlIjsKICAgICAgICB9LAoKICAgICAgICAiPHVyaT4iOiBmdW5jdGlvbihwYXJ0KXsKICAgICAgICAgICAgcmV0dXJuIHBhcnQudHlwZSA9PSAidXJpIjsKICAgICAgICB9LAoKICAgICAgICAiPGltYWdlPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gdGhpc1siPHVyaT4iXShwYXJ0KTsKICAgICAgICB9LAoKICAgICAgICAiPHBlcmNlbnRhZ2U+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiBwYXJ0LnR5cGUgPT0gInBlcmNlbnRhZ2UiIHx8IHBhcnQgPT0gIjAiOwogICAgICAgIH0sCgogICAgICAgICI8Ym9yZGVyLXdpZHRoPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gdGhpc1siPGxlbmd0aD4iXShwYXJ0KSB8fCBWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKHBhcnQsICJ0aGluIHwgbWVkaXVtIHwgdGhpY2siKTsKICAgICAgICB9LAoKICAgICAgICAiPGJvcmRlci1zdHlsZT4iOiBmdW5jdGlvbihwYXJ0KXsKICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRpb25UeXBlcy5pc0xpdGVyYWwocGFydCwgIm5vbmUgfCBoaWRkZW4gfCBkb3R0ZWQgfCBkYXNoZWQgfCBzb2xpZCB8IGRvdWJsZSB8IGdyb292ZSB8IHJpZGdlIHwgaW5zZXQgfCBvdXRzZXQiKTsKICAgICAgICB9LAoKICAgICAgICAiPGNvbnRlbnQtc2l6aW5nPiI6IGZ1bmN0aW9uKHBhcnQpeyAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNpemluZy8jd2lkdGgtaGVpZ2h0LWtleXdvcmRzCiAgICAgICAgICAgIHJldHVybiBWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKHBhcnQsICJmaWxsLWF2YWlsYWJsZSB8IC1tb3otYXZhaWxhYmxlIHwgLXdlYmtpdC1maWxsLWF2YWlsYWJsZSB8IG1heC1jb250ZW50IHwgLW1vei1tYXgtY29udGVudCB8IC13ZWJraXQtbWF4LWNvbnRlbnQgfCBtaW4tY29udGVudCB8IC1tb3otbWluLWNvbnRlbnQgfCAtd2Via2l0LW1pbi1jb250ZW50IHwgZml0LWNvbnRlbnQgfCAtbW96LWZpdC1jb250ZW50IHwgLXdlYmtpdC1maXQtY29udGVudCIpOwogICAgICAgIH0sCgogICAgICAgICI8bWFyZ2luLXdpZHRoPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gdGhpc1siPGxlbmd0aD4iXShwYXJ0KSB8fCB0aGlzWyI8cGVyY2VudGFnZT4iXShwYXJ0KSB8fCBWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKHBhcnQsICJhdXRvIik7CiAgICAgICAgfSwKCiAgICAgICAgIjxwYWRkaW5nLXdpZHRoPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gdGhpc1siPGxlbmd0aD4iXShwYXJ0KSB8fCB0aGlzWyI8cGVyY2VudGFnZT4iXShwYXJ0KTsKICAgICAgICB9LAoKICAgICAgICAiPHNoYXBlPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gcGFydC50eXBlID09ICJmdW5jdGlvbiIgJiYgKHBhcnQubmFtZSA9PSAicmVjdCIgfHwgcGFydC5uYW1lID09ICJpbnNldC1yZWN0Iik7CiAgICAgICAgfSwKCiAgICAgICAgIjx0aW1lPiI6IGZ1bmN0aW9uKHBhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIHBhcnQudHlwZSA9PSAidGltZSI7CiAgICAgICAgfSwKCiAgICAgICAgIjxmbGV4LWdyb3c+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiB0aGlzWyI8bnVtYmVyPiJdKHBhcnQpOwogICAgICAgIH0sCgogICAgICAgICI8ZmxleC1zaHJpbms+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiB0aGlzWyI8bnVtYmVyPiJdKHBhcnQpOwogICAgICAgIH0sCgogICAgICAgICI8d2lkdGg+IjogZnVuY3Rpb24ocGFydCl7CiAgICAgICAgICAgIHJldHVybiB0aGlzWyI8bWFyZ2luLXdpZHRoPiJdKHBhcnQpOwogICAgICAgIH0sCgogICAgICAgICI8ZmxleC1iYXNpcz4iOiBmdW5jdGlvbihwYXJ0KXsKICAgICAgICAgICAgcmV0dXJuIHRoaXNbIjx3aWR0aD4iXShwYXJ0KTsKICAgICAgICB9LAoKICAgICAgICAiPGZsZXgtZGlyZWN0aW9uPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChwYXJ0LCAicm93IHwgcm93LXJldmVyc2UgfCBjb2x1bW4gfCBjb2x1bW4tcmV2ZXJzZSIpOwogICAgICAgIH0sCgogICAgICAgICI8ZmxleC13cmFwPiI6IGZ1bmN0aW9uKHBhcnQpewogICAgICAgICAgICByZXR1cm4gVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChwYXJ0LCAibm93cmFwIHwgd3JhcCB8IHdyYXAtcmV2ZXJzZSIpOwogICAgICAgIH0KICAgIH0sCgogICAgY29tcGxleDogewoKICAgICAgICAiPGJnLXBvc2l0aW9uPiI6IGZ1bmN0aW9uKGV4cHJlc3Npb24pewogICAgICAgICAgICB2YXIgdHlwZXMgICA9IHRoaXMsCiAgICAgICAgICAgICAgICByZXN1bHQgID0gZmFsc2UsCiAgICAgICAgICAgICAgICBudW1lcmljID0gIjxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IiwKICAgICAgICAgICAgICAgIHhEaXIgICAgPSAibGVmdCB8IHJpZ2h0IiwKICAgICAgICAgICAgICAgIHlEaXIgICAgPSAidG9wIHwgYm90dG9tIiwKICAgICAgICAgICAgICAgIGNvdW50ID0gMCwKICAgICAgICAgICAgICAgIGhhc05leHQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwcmVzc2lvbi5oYXNOZXh0KCkgJiYgZXhwcmVzc2lvbi5wZWVrKCkgIT0gIiwiOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHdoaWxlIChleHByZXNzaW9uLnBlZWsoY291bnQpICYmIGV4cHJlc3Npb24ucGVlayhjb3VudCkgIT0gIiwiKSB7CiAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY291bnQgPCAzKSB7CiAgICAgICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHhEaXIgKyAiIHwgY2VudGVyIHwgIiArIG51bWVyaWMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCB5RGlyICsgIiB8IGNlbnRlciB8ICIgKyBudW1lcmljKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHlEaXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCB4RGlyICsgIiB8IGNlbnRlciIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCB4RGlyKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgeURpcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIG51bWVyaWMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIG51bWVyaWMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgeURpcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgbnVtZXJpYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sICJjZW50ZXIiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHlEaXIpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCB4RGlyKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgbnVtZXJpYyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgbnVtZXJpYykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCB4RGlyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIG51bWVyaWMpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCAiY2VudGVyIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCAiY2VudGVyIikpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHhEaXIgKyAiIHwgIiArIHlEaXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCBudW1lcmljKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgIjxiZy1zaXplPiI6IGZ1bmN0aW9uKGV4cHJlc3Npb24pewogICAgICAgICAgICB2YXIgdHlwZXMgICA9IHRoaXMsCiAgICAgICAgICAgICAgICByZXN1bHQgID0gZmFsc2UsCiAgICAgICAgICAgICAgICBudW1lcmljID0gIjxwZXJjZW50YWdlPiB8IDxsZW5ndGg+IHwgYXV0byIsCiAgICAgICAgICAgICAgICBwYXJ0LAogICAgICAgICAgICAgICAgaSwgbGVuOwoKICAgICAgICAgICAgaWYgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCAiY292ZXIgfCBjb250YWluIikpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIG51bWVyaWMpKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIG51bWVyaWMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0sCgogICAgICAgICI8cmVwZWF0LXN0eWxlPiI6IGZ1bmN0aW9uKGV4cHJlc3Npb24pewogICAgICAgICAgICB2YXIgcmVzdWx0ICA9IGZhbHNlLAogICAgICAgICAgICAgICAgdmFsdWVzICA9ICJyZXBlYXQgfCBzcGFjZSB8IHJvdW5kIHwgbm8tcmVwZWF0IiwKICAgICAgICAgICAgICAgIHBhcnQ7CgogICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkpewogICAgICAgICAgICAgICAgcGFydCA9IGV4cHJlc3Npb24ubmV4dCgpOwoKICAgICAgICAgICAgICAgIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKHBhcnQsICJyZXBlYXQteCB8IHJlcGVhdC15IikpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNMaXRlcmFsKHBhcnQsIHZhbHVlcykpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkgJiYgVmFsaWRhdGlvblR5cGVzLmlzTGl0ZXJhbChleHByZXNzaW9uLnBlZWsoKSwgdmFsdWVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CgogICAgICAgIH0sCgogICAgICAgICI8c2hhZG93PiI6IGZ1bmN0aW9uKGV4cHJlc3Npb24pIHsKICAgICAgICAgICAgdmFyIHJlc3VsdCAgPSBmYWxzZSwKICAgICAgICAgICAgICAgIGNvdW50ICAgPSAwLAogICAgICAgICAgICAgICAgaW5zZXQgICA9IGZhbHNlLAogICAgICAgICAgICAgICAgY29sb3IgICA9IGZhbHNlLAogICAgICAgICAgICAgICAgcGFydDsKCiAgICAgICAgICAgIGlmIChleHByZXNzaW9uLmhhc05leHQoKSkgewoKICAgICAgICAgICAgICAgIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgImluc2V0IikpewogICAgICAgICAgICAgICAgICAgIGluc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sICI8Y29sb3I+IikpIHsKICAgICAgICAgICAgICAgICAgICBjb2xvciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgd2hpbGUgKFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCAiPGxlbmd0aD4iKSAmJiBjb3VudCA8IDQpIHsKICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCAiPGNvbG9yPiIpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnNldCkgewogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgImluc2V0Iik7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXN1bHQgPSAoY291bnQgPj0gMiAmJiBjb3VudCA8PSA0KTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgIjx4LW9uZS1yYWRpdXM+IjogZnVuY3Rpb24oZXhwcmVzc2lvbikgewogICAgICAgICAgICB2YXIgcmVzdWx0ICA9IGZhbHNlLAogICAgICAgICAgICAgICAgc2ltcGxlID0gIjxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdCI7CgogICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzQW55KGV4cHJlc3Npb24sIHNpbXBsZSkpewogICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIFZhbGlkYXRpb25UeXBlcy5pc0FueShleHByZXNzaW9uLCBzaW1wbGUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0sCgogICAgICAgICI8ZmxleD4iOiBmdW5jdGlvbihleHByZXNzaW9uKSB7CiAgICAgICAgICAgIHZhciBwYXJ0LAogICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNBbnkoZXhwcmVzc2lvbiwgIm5vbmUgfCBpbmhlcml0IikpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzVHlwZShleHByZXNzaW9uLCAiPGZsZXgtZ3Jvdz4iKSkgewogICAgICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uLnBlZWsoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmFsaWRhdGlvblR5cGVzLmlzVHlwZShleHByZXNzaW9uLCAiPGZsZXgtc2hyaW5rPiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5wZWVrKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBWYWxpZGF0aW9uVHlwZXMuaXNUeXBlKGV4cHJlc3Npb24sICI8ZmxleC1iYXNpcz4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChWYWxpZGF0aW9uVHlwZXMuaXNUeXBlKGV4cHJlc3Npb24sICI8ZmxleC1iYXNpcz4iKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXhwcmVzc2lvbi5wZWVrKCkgPT09IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVmFsaWRhdGlvblR5cGVzLmlzVHlwZShleHByZXNzaW9uLCAiPGZsZXgtYmFzaXM+IikpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgcGFydCA9IGV4cHJlc3Npb24ucGVlaygpOwogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcigiRXhwZWN0ZWQgKG5vbmUgfCBbIDxmbGV4LWdyb3c+IDxmbGV4LXNocmluaz4/IHx8IDxmbGV4LWJhc2lzPiBdKSBidXQgZm91bmQgJyIgKyBleHByZXNzaW9uLnZhbHVlLnRleHQgKyAiJy4iLCBwYXJ0LmxpbmUsIHBhcnQuY29sKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICB9Cn07CgpwYXJzZXJsaWIuY3NzID0gewpDb2xvcnMgICAgICAgICAgICAgIDpDb2xvcnMsCkNvbWJpbmF0b3IgICAgICAgICAgOkNvbWJpbmF0b3IsClBhcnNlciAgICAgICAgICAgICAgOlBhcnNlciwKUHJvcGVydHlOYW1lICAgICAgICA6UHJvcGVydHlOYW1lLApQcm9wZXJ0eVZhbHVlICAgICAgIDpQcm9wZXJ0eVZhbHVlLApQcm9wZXJ0eVZhbHVlUGFydCAgIDpQcm9wZXJ0eVZhbHVlUGFydCwKTWVkaWFGZWF0dXJlICAgICAgICA6TWVkaWFGZWF0dXJlLApNZWRpYVF1ZXJ5ICAgICAgICAgIDpNZWRpYVF1ZXJ5LApTZWxlY3RvciAgICAgICAgICAgIDpTZWxlY3RvciwKU2VsZWN0b3JQYXJ0ICAgICAgICA6U2VsZWN0b3JQYXJ0LApTZWxlY3RvclN1YlBhcnQgICAgIDpTZWxlY3RvclN1YlBhcnQsClNwZWNpZmljaXR5ICAgICAgICAgOlNwZWNpZmljaXR5LApUb2tlblN0cmVhbSAgICAgICAgIDpUb2tlblN0cmVhbSwKVG9rZW5zICAgICAgICAgICAgICA6VG9rZW5zLApWYWxpZGF0aW9uRXJyb3IgICAgIDpWYWxpZGF0aW9uRXJyb3IKfTsKfSkoKTsKCihmdW5jdGlvbigpewpmb3IodmFyIHByb3AgaW4gcGFyc2VybGliKXsKZXhwb3J0c1twcm9wXSA9IHBhcnNlcmxpYltwcm9wXTsKfQp9KSgpOwoKCmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHsKICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pOwp9CnZhciB1dGlsID0gewogIGlzQXJyYXk6IGZ1bmN0aW9uIChhcikgewogICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpIHx8ICh0eXBlb2YgYXIgPT09ICdvYmplY3QnICYmIG9iamVjdFRvU3RyaW5nKGFyKSA9PT0gJ1tvYmplY3QgQXJyYXldJyk7CiAgfSwKICBpc0RhdGU6IGZ1bmN0aW9uIChkKSB7CiAgICByZXR1cm4gdHlwZW9mIGQgPT09ICdvYmplY3QnICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7CiAgfSwKICBpc1JlZ0V4cDogZnVuY3Rpb24gKHJlKSB7CiAgICByZXR1cm4gdHlwZW9mIHJlID09PSAnb2JqZWN0JyAmJiBvYmplY3RUb1N0cmluZyhyZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nOwogIH0sCiAgZ2V0UmVnRXhwRmxhZ3M6IGZ1bmN0aW9uIChyZSkgewogICAgdmFyIGZsYWdzID0gJyc7CiAgICByZS5nbG9iYWwgJiYgKGZsYWdzICs9ICdnJyk7CiAgICByZS5pZ25vcmVDYXNlICYmIChmbGFncyArPSAnaScpOwogICAgcmUubXVsdGlsaW5lICYmIChmbGFncyArPSAnbScpOwogICAgcmV0dXJuIGZsYWdzOwogIH0KfTsKCgppZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpCiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTsKCmZ1bmN0aW9uIGNsb25lKHBhcmVudCwgY2lyY3VsYXIsIGRlcHRoLCBwcm90b3R5cGUpIHsKICB2YXIgYWxsUGFyZW50cyA9IFtdOwogIHZhciBhbGxDaGlsZHJlbiA9IFtdOwoKICB2YXIgdXNlQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciAhPSAndW5kZWZpbmVkJzsKCiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PSAndW5kZWZpbmVkJykKICAgIGNpcmN1bGFyID0gdHJ1ZTsKCiAgaWYgKHR5cGVvZiBkZXB0aCA9PSAndW5kZWZpbmVkJykKICAgIGRlcHRoID0gSW5maW5pdHk7CiAgZnVuY3Rpb24gX2Nsb25lKHBhcmVudCwgZGVwdGgpIHsKICAgIGlmIChwYXJlbnQgPT09IG51bGwpCiAgICAgIHJldHVybiBudWxsOwoKICAgIGlmIChkZXB0aCA9PSAwKQogICAgICByZXR1cm4gcGFyZW50OwoKICAgIHZhciBjaGlsZDsKICAgIGlmICh0eXBlb2YgcGFyZW50ICE9ICdvYmplY3QnKSB7CiAgICAgIHJldHVybiBwYXJlbnQ7CiAgICB9CgogICAgaWYgKHV0aWwuaXNBcnJheShwYXJlbnQpKSB7CiAgICAgIGNoaWxkID0gW107CiAgICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAocGFyZW50KSkgewogICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgdXRpbC5nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTsKICAgICAgaWYgKHBhcmVudC5sYXN0SW5kZXgpIGNoaWxkLmxhc3RJbmRleCA9IHBhcmVudC5sYXN0SW5kZXg7CiAgICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKHBhcmVudCkpIHsKICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTsKICAgIH0gZWxzZSBpZiAodXNlQnVmZmVyICYmIEJ1ZmZlci5pc0J1ZmZlcihwYXJlbnQpKSB7CiAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTsKICAgICAgcGFyZW50LmNvcHkoY2hpbGQpOwogICAgICByZXR1cm4gY2hpbGQ7CiAgICB9IGVsc2UgewogICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykgY2hpbGQgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpKTsKICAgICAgZWxzZSBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTsKICAgIH0KCiAgICBpZiAoY2lyY3VsYXIpIHsKICAgICAgdmFyIGluZGV4ID0gYWxsUGFyZW50cy5pbmRleE9mKHBhcmVudCk7CgogICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICByZXR1cm4gYWxsQ2hpbGRyZW5baW5kZXhdOwogICAgICB9CiAgICAgIGFsbFBhcmVudHMucHVzaChwYXJlbnQpOwogICAgICBhbGxDaGlsZHJlbi5wdXNoKGNoaWxkKTsKICAgIH0KCiAgICBmb3IgKHZhciBpIGluIHBhcmVudCkgewogICAgICBjaGlsZFtpXSA9IF9jbG9uZShwYXJlbnRbaV0sIGRlcHRoIC0gMSk7CiAgICB9CgogICAgcmV0dXJuIGNoaWxkOwogIH0KCiAgcmV0dXJuIF9jbG9uZShwYXJlbnQsIGRlcHRoKTsKfQpjbG9uZS5jbG9uZVByb3RvdHlwZSA9IGZ1bmN0aW9uKHBhcmVudCkgewogIGlmIChwYXJlbnQgPT09IG51bGwpCiAgICByZXR1cm4gbnVsbDsKCiAgdmFyIGMgPSBmdW5jdGlvbiAoKSB7fTsKICBjLnByb3RvdHlwZSA9IHBhcmVudDsKICByZXR1cm4gbmV3IGMoKTsKfTsKCnZhciBDU1NMaW50ID0gKGZ1bmN0aW9uKCl7CgogICAgdmFyIHJ1bGVzICAgICAgICAgICA9IFtdLAogICAgICAgIGZvcm1hdHRlcnMgICAgICA9IFtdLAogICAgICAgIGVtYmVkZGVkUnVsZXNldCA9IC9cL1wqY3NzbGludChbXlwqXSopXCpcLy8sCiAgICAgICAgYXBpICAgICAgICAgICAgID0gbmV3IHBhcnNlcmxpYi51dGlsLkV2ZW50VGFyZ2V0KCk7CgogICAgYXBpLnZlcnNpb24gPSAiQFZFUlNJT05AIjsKICAgIGFwaS5hZGRSdWxlID0gZnVuY3Rpb24ocnVsZSl7CiAgICAgICAgcnVsZXMucHVzaChydWxlKTsKICAgICAgICBydWxlc1tydWxlLmlkXSA9IHJ1bGU7CiAgICB9OwogICAgYXBpLmNsZWFyUnVsZXMgPSBmdW5jdGlvbigpewogICAgICAgIHJ1bGVzID0gW107CiAgICB9OwogICAgYXBpLmdldFJ1bGVzID0gZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gW10uY29uY2F0KHJ1bGVzKS5zb3J0KGZ1bmN0aW9uKGEsYil7CiAgICAgICAgICAgIHJldHVybiBhLmlkID4gYi5pZCA/IDEgOiAwOwogICAgICAgIH0pOwogICAgfTsKICAgIGFwaS5nZXRSdWxlc2V0ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJ1bGVzZXQgPSB7fSwKICAgICAgICAgICAgaSA9IDAsCiAgICAgICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aDsKCiAgICAgICAgd2hpbGUgKGkgPCBsZW4pewogICAgICAgICAgICBydWxlc2V0W3J1bGVzW2krK10uaWRdID0gMTsgICAgLy9ieSBkZWZhdWx0LCBldmVyeXRoaW5nIGlzIGEgd2FybmluZwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJ1bGVzZXQ7CiAgICB9OwogICAgZnVuY3Rpb24gYXBwbHlFbWJlZGRlZFJ1bGVzZXQodGV4dCwgcnVsZXNldCl7CiAgICAgICAgdmFyIHZhbHVlTWFwLAogICAgICAgICAgICBlbWJlZGRlZCA9IHRleHQgJiYgdGV4dC5tYXRjaChlbWJlZGRlZFJ1bGVzZXQpLAogICAgICAgICAgICBydWxlcyA9IGVtYmVkZGVkICYmIGVtYmVkZGVkWzFdOwoKICAgICAgICBpZiAocnVsZXMpIHsKICAgICAgICAgICAgdmFsdWVNYXAgPSB7CiAgICAgICAgICAgICAgICAidHJ1ZSI6IDIsICAvLyB0cnVlIGlzIGVycm9yCiAgICAgICAgICAgICAgICAiIjogMSwgICAgICAvLyBibGFuayBpcyB3YXJuaW5nCiAgICAgICAgICAgICAgICAiZmFsc2UiOiAwLCAvLyBmYWxzZSBpcyBpZ25vcmUKCiAgICAgICAgICAgICAgICAiMiI6IDIsICAgICAvLyBleHBsaWNpdCBlcnJvcgogICAgICAgICAgICAgICAgIjEiOiAxLCAgICAgLy8gZXhwbGljaXQgd2FybmluZwogICAgICAgICAgICAgICAgIjAiOiAwICAgICAgLy8gZXhwbGljaXQgaWdub3JlCiAgICAgICAgICAgIH07CgogICAgICAgICAgICBydWxlcy50b0xvd2VyQ2FzZSgpLnNwbGl0KCIsIikuZm9yRWFjaChmdW5jdGlvbihydWxlKXsKICAgICAgICAgICAgICAgIHZhciBwYWlyID0gcnVsZS5zcGxpdCgiOiIpLAogICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gcGFpclswXSB8fCAiIiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhaXJbMV0gfHwgIiI7CgogICAgICAgICAgICAgICAgcnVsZXNldFtwcm9wZXJ0eS50cmltKCldID0gdmFsdWVNYXBbdmFsdWUudHJpbSgpXTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcnVsZXNldDsKICAgIH0KICAgIGFwaS5hZGRGb3JtYXR0ZXIgPSBmdW5jdGlvbihmb3JtYXR0ZXIpIHsKICAgICAgICBmb3JtYXR0ZXJzW2Zvcm1hdHRlci5pZF0gPSBmb3JtYXR0ZXI7CiAgICB9OwogICAgYXBpLmdldEZvcm1hdHRlciA9IGZ1bmN0aW9uKGZvcm1hdElkKXsKICAgICAgICByZXR1cm4gZm9ybWF0dGVyc1tmb3JtYXRJZF07CiAgICB9OwogICAgYXBpLmZvcm1hdCA9IGZ1bmN0aW9uKHJlc3VsdHMsIGZpbGVuYW1lLCBmb3JtYXRJZCwgb3B0aW9ucykgewogICAgICAgIHZhciBmb3JtYXR0ZXIgPSB0aGlzLmdldEZvcm1hdHRlcihmb3JtYXRJZCksCiAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7CgogICAgICAgIGlmIChmb3JtYXR0ZXIpewogICAgICAgICAgICByZXN1bHQgPSBmb3JtYXR0ZXIuc3RhcnRGb3JtYXQoKTsKICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdHRlci5mb3JtYXRSZXN1bHRzKHJlc3VsdHMsIGZpbGVuYW1lLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgICAgcmVzdWx0ICs9IGZvcm1hdHRlci5lbmRGb3JtYXQoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgYXBpLmhhc0Zvcm1hdCA9IGZ1bmN0aW9uKGZvcm1hdElkKXsKICAgICAgICByZXR1cm4gZm9ybWF0dGVycy5oYXNPd25Qcm9wZXJ0eShmb3JtYXRJZCk7CiAgICB9OwogICAgYXBpLnZlcmlmeSA9IGZ1bmN0aW9uKHRleHQsIHJ1bGVzZXQpewoKICAgICAgICB2YXIgaSA9IDAsCiAgICAgICAgICAgIHJlcG9ydGVyLAogICAgICAgICAgICBsaW5lcywKICAgICAgICAgICAgcmVwb3J0LAogICAgICAgICAgICBwYXJzZXIgPSBuZXcgcGFyc2VybGliLmNzcy5QYXJzZXIoeyBzdGFySGFjazogdHJ1ZSwgaWVGaWx0ZXJzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcnNjb3JlSGFjazogdHJ1ZSwgc3RyaWN0OiBmYWxzZSB9KTsKICAgICAgICBsaW5lcyA9IHRleHQucmVwbGFjZSgvXG5ccj8vZywgIiRzcGxpdCQiKS5zcGxpdCgiJHNwbGl0JCIpOwoKICAgICAgICBpZiAoIXJ1bGVzZXQpewogICAgICAgICAgICBydWxlc2V0ID0gdGhpcy5nZXRSdWxlc2V0KCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1iZWRkZWRSdWxlc2V0LnRlc3QodGV4dCkpewogICAgICAgICAgICBydWxlc2V0ID0gY2xvbmUocnVsZXNldCk7CiAgICAgICAgICAgIHJ1bGVzZXQgPSBhcHBseUVtYmVkZGVkUnVsZXNldCh0ZXh0LCBydWxlc2V0KTsKICAgICAgICB9CgogICAgICAgIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyKGxpbmVzLCBydWxlc2V0KTsKCiAgICAgICAgcnVsZXNldC5lcnJvcnMgPSAyOyAgICAgICAvL2Fsd2F5cyByZXBvcnQgcGFyc2luZyBlcnJvcnMgYXMgZXJyb3JzCiAgICAgICAgZm9yIChpIGluIHJ1bGVzZXQpewogICAgICAgICAgICBpZihydWxlc2V0Lmhhc093blByb3BlcnR5KGkpICYmIHJ1bGVzZXRbaV0pewogICAgICAgICAgICAgICAgaWYgKHJ1bGVzW2ldKXsKICAgICAgICAgICAgICAgICAgICBydWxlc1tpXS5pbml0KHBhcnNlciwgcmVwb3J0ZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnNlci5wYXJzZSh0ZXh0KTsKICAgICAgICB9IGNhdGNoIChleCkgewogICAgICAgICAgICByZXBvcnRlci5lcnJvcigiRmF0YWwgZXJyb3IsIGNhbm5vdCBjb250aW51ZTogIiArIGV4Lm1lc3NhZ2UsIGV4LmxpbmUsIGV4LmNvbCwge30pOwogICAgICAgIH0KCiAgICAgICAgcmVwb3J0ID0gewogICAgICAgICAgICBtZXNzYWdlcyAgICA6IHJlcG9ydGVyLm1lc3NhZ2VzLAogICAgICAgICAgICBzdGF0cyAgICAgICA6IHJlcG9ydGVyLnN0YXRzLAogICAgICAgICAgICBydWxlc2V0ICAgICA6IHJlcG9ydGVyLnJ1bGVzZXQKICAgICAgICB9OwogICAgICAgIHJlcG9ydC5tZXNzYWdlcy5zb3J0KGZ1bmN0aW9uIChhLCBiKXsKICAgICAgICAgICAgaWYgKGEucm9sbHVwICYmICFiLnJvbGx1cCl7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfSBlbHNlIGlmICghYS5yb2xsdXAgJiYgYi5yb2xsdXApewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGEubGluZSAtIGIubGluZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gcmVwb3J0OwogICAgfTsKCiAgICByZXR1cm4gYXBpOwoKfSkoKTsKZnVuY3Rpb24gUmVwb3J0ZXIobGluZXMsIHJ1bGVzZXQpewogICAgdGhpcy5tZXNzYWdlcyA9IFtdOwogICAgdGhpcy5zdGF0cyA9IFtdOwogICAgdGhpcy5saW5lcyA9IGxpbmVzOwogICAgdGhpcy5ydWxlc2V0ID0gcnVsZXNldDsKfQoKUmVwb3J0ZXIucHJvdG90eXBlID0gewogICAgY29uc3RydWN0b3I6IFJlcG9ydGVyLAogICAgZXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIGxpbmUsIGNvbCwgcnVsZSl7CiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKHsKICAgICAgICAgICAgdHlwZSAgICA6ICJlcnJvciIsCiAgICAgICAgICAgIGxpbmUgICAgOiBsaW5lLAogICAgICAgICAgICBjb2wgICAgIDogY29sLAogICAgICAgICAgICBtZXNzYWdlIDogbWVzc2FnZSwKICAgICAgICAgICAgZXZpZGVuY2U6IHRoaXMubGluZXNbbGluZS0xXSwKICAgICAgICAgICAgcnVsZSAgICA6IHJ1bGUgfHwge30KICAgICAgICB9KTsKICAgIH0sCiAgICB3YXJuOiBmdW5jdGlvbihtZXNzYWdlLCBsaW5lLCBjb2wsIHJ1bGUpewogICAgICAgIHRoaXMucmVwb3J0KG1lc3NhZ2UsIGxpbmUsIGNvbCwgcnVsZSk7CiAgICB9LAogICAgcmVwb3J0OiBmdW5jdGlvbihtZXNzYWdlLCBsaW5lLCBjb2wsIHJ1bGUpewogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7CiAgICAgICAgICAgIHR5cGUgICAgOiB0aGlzLnJ1bGVzZXRbcnVsZS5pZF0gPT09IDIgPyAiZXJyb3IiIDogIndhcm5pbmciLAogICAgICAgICAgICBsaW5lICAgIDogbGluZSwKICAgICAgICAgICAgY29sICAgICA6IGNvbCwKICAgICAgICAgICAgbWVzc2FnZSA6IG1lc3NhZ2UsCiAgICAgICAgICAgIGV2aWRlbmNlOiB0aGlzLmxpbmVzW2xpbmUtMV0sCiAgICAgICAgICAgIHJ1bGUgICAgOiBydWxlCiAgICAgICAgfSk7CiAgICB9LAogICAgaW5mbzogZnVuY3Rpb24obWVzc2FnZSwgbGluZSwgY29sLCBydWxlKXsKICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goewogICAgICAgICAgICB0eXBlICAgIDogImluZm8iLAogICAgICAgICAgICBsaW5lICAgIDogbGluZSwKICAgICAgICAgICAgY29sICAgICA6IGNvbCwKICAgICAgICAgICAgbWVzc2FnZSA6IG1lc3NhZ2UsCiAgICAgICAgICAgIGV2aWRlbmNlOiB0aGlzLmxpbmVzW2xpbmUtMV0sCiAgICAgICAgICAgIHJ1bGUgICAgOiBydWxlCiAgICAgICAgfSk7CiAgICB9LAogICAgcm9sbHVwRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UsIHJ1bGUpewogICAgICAgIHRoaXMubWVzc2FnZXMucHVzaCh7CiAgICAgICAgICAgIHR5cGUgICAgOiAiZXJyb3IiLAogICAgICAgICAgICByb2xsdXAgIDogdHJ1ZSwKICAgICAgICAgICAgbWVzc2FnZSA6IG1lc3NhZ2UsCiAgICAgICAgICAgIHJ1bGUgICAgOiBydWxlCiAgICAgICAgfSk7CiAgICB9LAogICAgcm9sbHVwV2FybjogZnVuY3Rpb24obWVzc2FnZSwgcnVsZSl7CiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKHsKICAgICAgICAgICAgdHlwZSAgICA6ICJ3YXJuaW5nIiwKICAgICAgICAgICAgcm9sbHVwICA6IHRydWUsCiAgICAgICAgICAgIG1lc3NhZ2UgOiBtZXNzYWdlLAogICAgICAgICAgICBydWxlICAgIDogcnVsZQogICAgICAgIH0pOwogICAgfSwKICAgIHN0YXQ6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXsKICAgICAgICB0aGlzLnN0YXRzW25hbWVdID0gdmFsdWU7CiAgICB9Cn07CkNTU0xpbnQuX1JlcG9ydGVyID0gUmVwb3J0ZXI7CkNTU0xpbnQuVXRpbCA9IHsKICAgIG1peDogZnVuY3Rpb24ocmVjZWl2ZXIsIHN1cHBsaWVyKXsKICAgICAgICB2YXIgcHJvcDsKCiAgICAgICAgZm9yIChwcm9wIGluIHN1cHBsaWVyKXsKICAgICAgICAgICAgaWYgKHN1cHBsaWVyLmhhc093blByb3BlcnR5KHByb3ApKXsKICAgICAgICAgICAgICAgIHJlY2VpdmVyW3Byb3BdID0gc3VwcGxpZXJbcHJvcF07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBwcm9wOwogICAgfSwKICAgIGluZGV4T2Y6IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWUpewogICAgICAgIGlmICh2YWx1ZXMuaW5kZXhPZil7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wLCBsZW49dmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKXsKICAgICAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gPT09IHZhbHVlKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgfSwKICAgIGZvckVhY2g6IGZ1bmN0aW9uKHZhbHVlcywgZnVuYykgewogICAgICAgIGlmICh2YWx1ZXMuZm9yRWFjaCl7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuZm9yRWFjaChmdW5jKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpPTAsIGxlbj12YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspewogICAgICAgICAgICAgICAgZnVuYyh2YWx1ZXNbaV0sIGksIHZhbHVlcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn07CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJhZGpvaW5pbmctY2xhc3NlcyIsCiAgICBuYW1lOiAiRGlzYWxsb3cgYWRqb2luaW5nIGNsYXNzZXMiLAogICAgZGVzYzogIkRvbid0IHVzZSBhZGpvaW5pbmcgY2xhc3Nlcy4iLAogICAgYnJvd3NlcnM6ICJJRTYiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gZXZlbnQuc2VsZWN0b3JzLAogICAgICAgICAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgICAgICAgICBwYXJ0LAogICAgICAgICAgICAgICAgbW9kaWZpZXIsCiAgICAgICAgICAgICAgICBjbGFzc0NvdW50LAogICAgICAgICAgICAgICAgaSwgaiwgazsKCiAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOwogICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBzZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGorKyl7CiAgICAgICAgICAgICAgICAgICAgcGFydCA9IHNlbGVjdG9yLnBhcnRzW2pdOwogICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09IHBhcnNlci5TRUxFQ1RPUl9QQVJUX1RZUEUpewogICAgICAgICAgICAgICAgICAgICAgICBjbGFzc0NvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrPTA7IGsgPCBwYXJ0Lm1vZGlmaWVycy5sZW5ndGg7IGsrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllciA9IHBhcnQubW9kaWZpZXJzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyLnR5cGUgPT09ICJjbGFzcyIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzQ291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc0NvdW50ID4gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJEb24ndCB1c2UgYWRqb2luaW5nIGNsYXNzZXMuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJib3gtbW9kZWwiLAogICAgbmFtZTogIkJld2FyZSBvZiBicm9rZW4gYm94IHNpemUiLAogICAgZGVzYzogIkRvbid0IHVzZSB3aWR0aCBvciBoZWlnaHQgd2hlbiB1c2luZyBwYWRkaW5nIG9yIGJvcmRlci4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLAogICAgICAgICAgICB3aWR0aFByb3BlcnRpZXMgPSB7CiAgICAgICAgICAgICAgICBib3JkZXI6IDEsCiAgICAgICAgICAgICAgICAiYm9yZGVyLWxlZnQiOiAxLAogICAgICAgICAgICAgICAgImJvcmRlci1yaWdodCI6IDEsCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLAogICAgICAgICAgICAgICAgInBhZGRpbmctbGVmdCI6IDEsCiAgICAgICAgICAgICAgICAicGFkZGluZy1yaWdodCI6IDEKICAgICAgICAgICAgfSwKICAgICAgICAgICAgaGVpZ2h0UHJvcGVydGllcyA9IHsKICAgICAgICAgICAgICAgIGJvcmRlcjogMSwKICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tIjogMSwKICAgICAgICAgICAgICAgICJib3JkZXItdG9wIjogMSwKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEsCiAgICAgICAgICAgICAgICAicGFkZGluZy1ib3R0b20iOiAxLAogICAgICAgICAgICAgICAgInBhZGRpbmctdG9wIjogMQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9wZXJ0aWVzLAogICAgICAgICAgICBib3hTaXppbmcgPSBmYWxzZTsKCiAgICAgICAgZnVuY3Rpb24gc3RhcnRSdWxlKCl7CiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTsKICAgICAgICAgICAgYm94U2l6aW5nID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBlbmRSdWxlKCl7CiAgICAgICAgICAgIHZhciBwcm9wLCB2YWx1ZTsKCiAgICAgICAgICAgIGlmICghYm94U2l6aW5nKSB7CiAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oZWlnaHQpewogICAgICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiBoZWlnaHRQcm9wZXJ0aWVzKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodFByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcHJvcGVydGllc1twcm9wXSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb3BlcnRpZXNbcHJvcF0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShwcm9wID09PSAicGFkZGluZyIgJiYgdmFsdWUucGFydHMubGVuZ3RoID09PSAyICYmIHZhbHVlLnBhcnRzWzBdLnZhbHVlID09PSAwKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJVc2luZyBoZWlnaHQgd2l0aCAiICsgcHJvcCArICIgY2FuIHNvbWV0aW1lcyBtYWtlIGVsZW1lbnRzIGxhcmdlciB0aGFuIHlvdSBleHBlY3QuIiwgcHJvcGVydGllc1twcm9wXS5saW5lLCBwcm9wZXJ0aWVzW3Byb3BdLmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMud2lkdGgpewogICAgICAgICAgICAgICAgICAgIGZvciAocHJvcCBpbiB3aWR0aFByb3BlcnRpZXMpewogICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3ApICYmIHByb3BlcnRpZXNbcHJvcF0pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBwcm9wZXJ0aWVzW3Byb3BdLnZhbHVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHByb3AgPT09ICJwYWRkaW5nIiAmJiB2YWx1ZS5wYXJ0cy5sZW5ndGggPT09IDIgJiYgdmFsdWUucGFydHNbMV0udmFsdWUgPT09IDApKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIlVzaW5nIHdpZHRoIHdpdGggIiArIHByb3AgKyAiIGNhbiBzb21ldGltZXMgbWFrZSBlbGVtZW50cyBsYXJnZXIgdGhhbiB5b3UgZXhwZWN0LiIsIHByb3BlcnRpZXNbcHJvcF0ubGluZSwgcHJvcGVydGllc1twcm9wXS5jb2wsIHJ1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGZvbnRmYWNlIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cGFnZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2VtYXJnaW4iLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRrZXlmcmFtZXJ1bGUiLCBzdGFydFJ1bGUpOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICB2YXIgbmFtZSA9IGV2ZW50LnByb3BlcnR5LnRleHQudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgICAgIGlmIChoZWlnaHRQcm9wZXJ0aWVzW25hbWVdIHx8IHdpZHRoUHJvcGVydGllc1tuYW1lXSl7CiAgICAgICAgICAgICAgICBpZiAoIS9eMFxTKiQvLnRlc3QoZXZlbnQudmFsdWUpICYmICEobmFtZSA9PT0gImJvcmRlciIgJiYgZXZlbnQudmFsdWUudG9TdHJpbmcoKSA9PT0gIm5vbmUiKSl7CiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IHsgbGluZTogZXZlbnQucHJvcGVydHkubGluZSwgY29sOiBldmVudC5wcm9wZXJ0eS5jb2wsIHZhbHVlOiBldmVudC52YWx1ZSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKC9eKHdpZHRofGhlaWdodCkvaS50ZXN0KG5hbWUpICYmIC9eKGxlbmd0aHxwZXJjZW50YWdlKS8udGVzdChldmVudC52YWx1ZS5wYXJ0c1swXS50eXBlKSl7CiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICJib3gtc2l6aW5nIikgewogICAgICAgICAgICAgICAgICAgIGJveFNpemluZyA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsIGVuZFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kZm9udGZhY2UiLCBlbmRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHBhZ2UiLCBlbmRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHBhZ2VtYXJnaW4iLCBlbmRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZGtleWZyYW1lcnVsZSIsIGVuZFJ1bGUpOwogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJib3gtc2l6aW5nIiwKICAgIG5hbWU6ICJEaXNhbGxvdyB1c2Ugb2YgYm94LXNpemluZyIsCiAgICBkZXNjOiAiVGhlIGJveC1zaXppbmcgcHJvcGVydGllcyBpc24ndCBzdXBwb3J0ZWQgaW4gSUU2IGFuZCBJRTcuIiwKICAgIGJyb3dzZXJzOiAiSUU2LCBJRTciLAogICAgdGFnczogWyJDb21wYXRpYmlsaXR5Il0sCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXM7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQucHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgaWYgKG5hbWUgPT09ICJib3gtc2l6aW5nIil7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIlRoZSBib3gtc2l6aW5nIHByb3BlcnR5IGlzbid0IHN1cHBvcnRlZCBpbiBJRTYgYW5kIElFNy4iLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogImJ1bGxldHByb29mLWZvbnQtZmFjZSIsCiAgICBuYW1lOiAiVXNlIHRoZSBidWxsZXRwcm9vZiBAZm9udC1mYWNlIHN5bnRheCIsCiAgICBkZXNjOiAiVXNlIHRoZSBidWxsZXRwcm9vZiBAZm9udC1mYWNlIHN5bnRheCB0byBhdm9pZCA0MDQncyBpbiBvbGQgSUUgKGh0dHA6Ly93d3cuZm9udHNwcmluZy5jb20vYmxvZy90aGUtbmV3LWJ1bGxldHByb29mLWZvbnQtZmFjZS1zeW50YXgpLiIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXMsCiAgICAgICAgICAgIGZvbnRGYWNlUnVsZSA9IGZhbHNlLAogICAgICAgICAgICBmaXJzdFNyYyAgICAgPSB0cnVlLAogICAgICAgICAgICBydWxlRmFpbGVkICAgID0gZmFsc2UsCiAgICAgICAgICAgIGxpbmUsIGNvbDsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLCBmdW5jdGlvbigpewogICAgICAgICAgICBmb250RmFjZVJ1bGUgPSB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICBpZiAoIWZvbnRGYWNlUnVsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gZXZlbnQucHJvcGVydHkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLAogICAgICAgICAgICAgICAgdmFsdWUgICAgICAgID0gZXZlbnQudmFsdWUudG9TdHJpbmcoKTsKICAgICAgICAgICAgbGluZSA9IGV2ZW50LmxpbmU7CiAgICAgICAgICAgIGNvbCAgPSBldmVudC5jb2w7CiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICJzcmMiKSB7CiAgICAgICAgICAgICAgICB2YXIgcmVnZXggPSAvXlxzP3VybFwoWyciXS4rXC5lb3RcPy4qWyciXVwpXHMqZm9ybWF0XChbJyJdZW1iZWRkZWQtb3BlbnR5cGVbJyJdXCkuKiQvaTsKICAgICAgICAgICAgICAgIGlmICghdmFsdWUubWF0Y2gocmVnZXgpICYmIGZpcnN0U3JjKSB7CiAgICAgICAgICAgICAgICAgICAgcnVsZUZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgZmlyc3RTcmMgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2gocmVnZXgpICYmICFmaXJzdFNyYykgewogICAgICAgICAgICAgICAgICAgIHJ1bGVGYWlsZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgfSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGZvbnRGYWNlUnVsZSA9IGZhbHNlOwoKICAgICAgICAgICAgaWYgKHJ1bGVGYWlsZWQpIHsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiQGZvbnQtZmFjZSBkZWNsYXJhdGlvbiBkb2Vzbid0IGZvbGxvdyB0aGUgZm9udHNwcmluZyBidWxsZXRwcm9vZiBzeW50YXguIiwgbGluZSwgY29sLCBydWxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogImNvbXBhdGlibGUtdmVuZG9yLXByZWZpeGVzIiwKICAgIG5hbWU6ICJSZXF1aXJlIGNvbXBhdGlibGUgdmVuZG9yIHByZWZpeGVzIiwKICAgIGRlc2M6ICJJbmNsdWRlIGFsbCBjb21wYXRpYmxlIHZlbmRvciBwcmVmaXhlcyB0byByZWFjaCBhIHdpZGVyIHJhbmdlIG9mIHVzZXJzLiIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbiAocGFyc2VyLCByZXBvcnRlcikgewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgY29tcGF0aWJsZVByZWZpeGVzLAogICAgICAgICAgICBwcm9wZXJ0aWVzLAogICAgICAgICAgICBwcm9wLAogICAgICAgICAgICB2YXJpYXRpb25zLAogICAgICAgICAgICBwcmVmaXhlZCwKICAgICAgICAgICAgaSwKICAgICAgICAgICAgbGVuLAogICAgICAgICAgICBpbktleUZyYW1lID0gZmFsc2UsCiAgICAgICAgICAgIGFycmF5UHVzaCA9IEFycmF5LnByb3RvdHlwZS5wdXNoLAogICAgICAgICAgICBhcHBseVRvID0gW107CiAgICAgICAgY29tcGF0aWJsZVByZWZpeGVzID0gewogICAgICAgICAgICAiYW5pbWF0aW9uIiAgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLWRlbGF5IiAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLWRpcmVjdGlvbiIgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLWR1cmF0aW9uIiAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLWZpbGwtbW9kZSIgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCIgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLW5hbWUiICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLXBsYXktc3RhdGUiICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbiIgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYXBwZWFyYW5jZSIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYm9yZGVyLWVuZCIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYm9yZGVyLWVuZC1jb2xvciIgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYm9yZGVyLWVuZC1zdHlsZSIgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYm9yZGVyLWVuZC13aWR0aCIgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYm9yZGVyLWltYWdlIiAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbyIsCiAgICAgICAgICAgICJib3JkZXItcmFkaXVzIiAgICAgICAgICAgICAgOiAid2Via2l0IiwKICAgICAgICAgICAgImJvcmRlci1zdGFydCIgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IiwKICAgICAgICAgICAgImJvcmRlci1zdGFydC1jb2xvciIgICAgICAgICA6ICJ3ZWJraXQgbW96IiwKICAgICAgICAgICAgImJvcmRlci1zdGFydC1zdHlsZSIgICAgICAgICA6ICJ3ZWJraXQgbW96IiwKICAgICAgICAgICAgImJvcmRlci1zdGFydC13aWR0aCIgICAgICAgICA6ICJ3ZWJraXQgbW96IiwKICAgICAgICAgICAgImJveC1hbGlnbiIgICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIiwKICAgICAgICAgICAgImJveC1kaXJlY3Rpb24iICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIiwKICAgICAgICAgICAgImJveC1mbGV4IiAgICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG1zIiwKICAgICAgICAgICAgImJveC1saW5lcyIgICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbXMiLAogICAgICAgICAgICAiYm94LW9yZGluYWwtZ3JvdXAiICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiYm94LW9yaWVudCIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiYm94LXBhY2siICAgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiYm94LXNpemluZyIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiYm94LXNoYWRvdyIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAiY29sdW1uLWNvdW50IiAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiY29sdW1uLWdhcCIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiY29sdW1uLXJ1bGUiICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiY29sdW1uLXJ1bGUtY29sb3IiICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiY29sdW1uLXJ1bGUtc3R5bGUiICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiY29sdW1uLXJ1bGUtd2lkdGgiICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiY29sdW1uLXdpZHRoIiAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMiLAogICAgICAgICAgICAiaHlwaGVucyIgICAgICAgICAgICAgICAgICAgIDogImVwdWIgbW96IiwKICAgICAgICAgICAgImxpbmUtYnJlYWsiICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbXMiLAogICAgICAgICAgICAibWFyZ2luLWVuZCIgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAibWFyZ2luLXN0YXJ0IiAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAibWFycXVlZS1zcGVlZCIgICAgICAgICAgICAgIDogIndlYmtpdCB3YXAiLAogICAgICAgICAgICAibWFycXVlZS1zdHlsZSIgICAgICAgICAgICAgIDogIndlYmtpdCB3YXAiLAogICAgICAgICAgICAicGFkZGluZy1lbmQiICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAicGFkZGluZy1zdGFydCIgICAgICAgICAgICAgIDogIndlYmtpdCBtb3oiLAogICAgICAgICAgICAidGFiLXNpemUiICAgICAgICAgICAgICAgICAgIDogIm1veiBvIiwKICAgICAgICAgICAgInRleHQtc2l6ZS1hZGp1c3QiICAgICAgICAgICA6ICJ3ZWJraXQgbXMiLAogICAgICAgICAgICAidHJhbnNmb3JtIiAgICAgICAgICAgICAgICAgIDogIndlYmtpdCBtb3ogbXMgbyIsCiAgICAgICAgICAgICJ0cmFuc2Zvcm0tb3JpZ2luIiAgICAgICAgICAgOiAid2Via2l0IG1veiBtcyBvIiwKICAgICAgICAgICAgInRyYW5zaXRpb24iICAgICAgICAgICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLAogICAgICAgICAgICAidHJhbnNpdGlvbi1kZWxheSIgICAgICAgICAgIDogIndlYmtpdCBtb3ogbyIsCiAgICAgICAgICAgICJ0cmFuc2l0aW9uLWR1cmF0aW9uIiAgICAgICAgOiAid2Via2l0IG1veiBvIiwKICAgICAgICAgICAgInRyYW5zaXRpb24tcHJvcGVydHkiICAgICAgICA6ICJ3ZWJraXQgbW96IG8iLAogICAgICAgICAgICAidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24iIDogIndlYmtpdCBtb3ogbyIsCiAgICAgICAgICAgICJ1c2VyLW1vZGlmeSIgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiIsCiAgICAgICAgICAgICJ1c2VyLXNlbGVjdCIgICAgICAgICAgICAgICAgOiAid2Via2l0IG1veiBtcyIsCiAgICAgICAgICAgICJ3b3JkLWJyZWFrIiAgICAgICAgICAgICAgICAgOiAiZXB1YiBtcyIsCiAgICAgICAgICAgICJ3cml0aW5nLW1vZGUiICAgICAgICAgICAgICAgOiAiZXB1YiBtcyIKICAgICAgICB9OwoKCiAgICAgICAgZm9yIChwcm9wIGluIGNvbXBhdGlibGVQcmVmaXhlcykgewogICAgICAgICAgICBpZiAoY29tcGF0aWJsZVByZWZpeGVzLmhhc093blByb3BlcnR5KHByb3ApKSB7CiAgICAgICAgICAgICAgICB2YXJpYXRpb25zID0gW107CiAgICAgICAgICAgICAgICBwcmVmaXhlZCA9IGNvbXBhdGlibGVQcmVmaXhlc1twcm9wXS5zcGxpdCgiICIpOwogICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJlZml4ZWQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb25zLnB1c2goIi0iICsgcHJlZml4ZWRbaV0gKyAiLSIgKyBwcm9wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbXBhdGlibGVQcmVmaXhlc1twcm9wXSA9IHZhcmlhdGlvbnM7CiAgICAgICAgICAgICAgICBhcnJheVB1c2guYXBwbHkoYXBwbHlUbywgdmFyaWF0aW9ucyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBwcm9wZXJ0aWVzID0gW107CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRrZXlmcmFtZXMiLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgICAgICAgaW5LZXlGcmFtZSA9IGV2ZW50LnByZWZpeCB8fCB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZGtleWZyYW1lcyIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaW5LZXlGcmFtZSA9IGZhbHNlOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQucHJvcGVydHk7CiAgICAgICAgICAgIGlmIChDU1NMaW50LlV0aWwuaW5kZXhPZihhcHBseVRvLCBuYW1lLnRleHQpID4gLTEpIHsKICAgICAgICAgICAgICAgIGlmICghaW5LZXlGcmFtZSB8fCB0eXBlb2YgaW5LZXlGcmFtZSAhPT0gInN0cmluZyIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS50ZXh0LmluZGV4T2YoIi0iICsgaW5LZXlGcmFtZSArICItIikgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gobmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBwcm9wZXJ0eUdyb3VwcyA9IHt9LAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICBwcm9wLAogICAgICAgICAgICAgICAgdmFyaWF0aW9ucywKICAgICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgICAgZnVsbCwKICAgICAgICAgICAgICAgIGFjdHVhbCwKICAgICAgICAgICAgICAgIGl0ZW0sCiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzU3BlY2lmaWVkOwoKICAgICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnRpZXNbaV07CgogICAgICAgICAgICAgICAgZm9yIChwcm9wIGluIGNvbXBhdGlibGVQcmVmaXhlcykgewogICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXRpYmxlUHJlZml4ZXMuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9ucyA9IGNvbXBhdGlibGVQcmVmaXhlc1twcm9wXTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENTU0xpbnQuVXRpbC5pbmRleE9mKHZhcmlhdGlvbnMsIG5hbWUudGV4dCkgPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUdyb3Vwc1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXBzW3Byb3BdID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsIDogdmFyaWF0aW9ucy5zbGljZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsIDogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbE5vZGVzOiBbXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ1NTTGludC5VdGlsLmluZGV4T2YocHJvcGVydHlHcm91cHNbcHJvcF0uYWN0dWFsLCBuYW1lLnRleHQpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXBzW3Byb3BdLmFjdHVhbC5wdXNoKG5hbWUudGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlHcm91cHNbcHJvcF0uYWN0dWFsTm9kZXMucHVzaChuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChwcm9wIGluIHByb3BlcnR5R3JvdXBzKSB7CiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlHcm91cHMuaGFzT3duUHJvcGVydHkocHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHByb3BlcnR5R3JvdXBzW3Byb3BdOwogICAgICAgICAgICAgICAgICAgIGZ1bGwgPSB2YWx1ZS5mdWxsOwogICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IHZhbHVlLmFjdHVhbDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bGwubGVuZ3RoID4gYWN0dWFsLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBmdWxsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gZnVsbFtpXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDU1NMaW50LlV0aWwuaW5kZXhPZihhY3R1YWwsIGl0ZW0pID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNTcGVjaWZpZWQgPSAoYWN0dWFsLmxlbmd0aCA9PT0gMSkgPyBhY3R1YWxbMF0gOiAoYWN0dWFsLmxlbmd0aCA9PT0gMikgPyBhY3R1YWwuam9pbigiIGFuZCAiKSA6IGFjdHVhbC5qb2luKCIsICIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiVGhlIHByb3BlcnR5ICIgKyBpdGVtICsgIiBpcyBjb21wYXRpYmxlIHdpdGggIiArIHByb3BlcnRpZXNTcGVjaWZpZWQgKyAiIGFuZCBzaG91bGQgYmUgaW5jbHVkZWQgYXMgd2VsbC4iLCB2YWx1ZS5hY3R1YWxOb2Rlc1swXS5saW5lLCB2YWx1ZS5hY3R1YWxOb2Rlc1swXS5jb2wsIHJ1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogImRpc3BsYXktcHJvcGVydHktZ3JvdXBpbmciLAogICAgbmFtZTogIlJlcXVpcmUgcHJvcGVydGllcyBhcHByb3ByaWF0ZSBmb3IgZGlzcGxheSIsCiAgICBkZXNjOiAiQ2VydGFpbiBwcm9wZXJ0aWVzIHNob3VsZG4ndCBiZSB1c2VkIHdpdGggY2VydGFpbiBkaXNwbGF5IHByb3BlcnR5IHZhbHVlcy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICB2YXIgcHJvcGVydGllc1RvQ2hlY2sgPSB7CiAgICAgICAgICAgICAgICBkaXNwbGF5OiAxLAogICAgICAgICAgICAgICAgImZsb2F0IjogIm5vbmUiLAogICAgICAgICAgICAgICAgaGVpZ2h0OiAxLAogICAgICAgICAgICAgICAgd2lkdGg6IDEsCiAgICAgICAgICAgICAgICBtYXJnaW46IDEsCiAgICAgICAgICAgICAgICAibWFyZ2luLWxlZnQiOiAxLAogICAgICAgICAgICAgICAgIm1hcmdpbi1yaWdodCI6IDEsCiAgICAgICAgICAgICAgICAibWFyZ2luLWJvdHRvbSI6IDEsCiAgICAgICAgICAgICAgICAibWFyZ2luLXRvcCI6IDEsCiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxLAogICAgICAgICAgICAgICAgInBhZGRpbmctbGVmdCI6IDEsCiAgICAgICAgICAgICAgICAicGFkZGluZy1yaWdodCI6IDEsCiAgICAgICAgICAgICAgICAicGFkZGluZy1ib3R0b20iOiAxLAogICAgICAgICAgICAgICAgInBhZGRpbmctdG9wIjogMSwKICAgICAgICAgICAgICAgICJ2ZXJ0aWNhbC1hbGlnbiI6IDEKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcHJvcGVydGllczsKCiAgICAgICAgZnVuY3Rpb24gcmVwb3J0UHJvcGVydHkobmFtZSwgZGlzcGxheSwgbXNnKXsKICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbbmFtZV0pewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSAhPT0gInN0cmluZyIgfHwgcHJvcGVydGllc1tuYW1lXS52YWx1ZS50b0xvd2VyQ2FzZSgpICE9PSBwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSl7CiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KG1zZyB8fCBuYW1lICsgIiBjYW4ndCBiZSB1c2VkIHdpdGggZGlzcGxheTogIiArIGRpc3BsYXkgKyAiLiIsIHByb3BlcnRpZXNbbmFtZV0ubGluZSwgcHJvcGVydGllc1tuYW1lXS5jb2wsIHJ1bGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBzdGFydFJ1bGUoKXsKICAgICAgICAgICAgcHJvcGVydGllcyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZW5kUnVsZSgpewoKICAgICAgICAgICAgdmFyIGRpc3BsYXkgPSBwcm9wZXJ0aWVzLmRpc3BsYXkgPyBwcm9wZXJ0aWVzLmRpc3BsYXkudmFsdWUgOiBudWxsOwogICAgICAgICAgICBpZiAoZGlzcGxheSl7CiAgICAgICAgICAgICAgICBzd2l0Y2goZGlzcGxheSl7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgImlubGluZSI6CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJoZWlnaHQiLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIndpZHRoIiwgZGlzcGxheSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJtYXJnaW4iLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi10b3AiLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi1ib3R0b20iLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoImZsb2F0IiwgZGlzcGxheSwgImRpc3BsYXk6aW5saW5lIGhhcyBubyBlZmZlY3Qgb24gZmxvYXRlZCBlbGVtZW50cyAoYnV0IG1heSBiZSB1c2VkIHRvIGZpeCB0aGUgSUU2IGRvdWJsZS1tYXJnaW4gYnVnKS4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgImJsb2NrIjoKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoInZlcnRpY2FsLWFsaWduIiwgZGlzcGxheSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICJpbmxpbmUtYmxvY2siOgogICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9wZXJ0eSgiZmxvYXQiLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNwbGF5LmluZGV4T2YoInRhYmxlLSIpID09PSAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJtYXJnaW4iLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tbGVmdCIsIGRpc3BsYXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi1yaWdodCIsIGRpc3BsYXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UHJvcGVydHkoIm1hcmdpbi10b3AiLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb3BlcnR5KCJtYXJnaW4tYm90dG9tIiwgZGlzcGxheSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9wZXJ0eSgiZmxvYXQiLCBkaXNwbGF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGtleWZyYW1lcnVsZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2VtYXJnaW4iLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlIiwgc3RhcnRSdWxlKTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICBpZiAocHJvcGVydGllc1RvQ2hlY2tbbmFtZV0pewogICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IHsgdmFsdWU6IGV2ZW50LnZhbHVlLnRleHQsIGxpbmU6IGV2ZW50LnByb3BlcnR5LmxpbmUsIGNvbDogZXZlbnQucHJvcGVydHkuY29sIH07CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsIGVuZFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5ka2V5ZnJhbWVydWxlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlbWFyZ2luIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlIiwgZW5kUnVsZSk7CgogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJkdXBsaWNhdGUtYmFja2dyb3VuZC1pbWFnZXMiLAogICAgbmFtZTogIkRpc2FsbG93IGR1cGxpY2F0ZSBiYWNrZ3JvdW5kIGltYWdlcyIsCiAgICBkZXNjOiAiRXZlcnkgYmFja2dyb3VuZC1pbWFnZSBzaG91bGQgYmUgdW5pcXVlLiBVc2UgYSBjb21tb24gY2xhc3MgZm9yIGUuZy4gc3ByaXRlcy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLAogICAgICAgICAgICBzdGFjayA9IHt9OwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICB2YXIgbmFtZSA9IGV2ZW50LnByb3BlcnR5LnRleHQsCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnZhbHVlLAogICAgICAgICAgICAgICAgaSwgbGVuOwoKICAgICAgICAgICAgaWYgKG5hbWUubWF0Y2goL2JhY2tncm91bmQvaSkpIHsKICAgICAgICAgICAgICAgIGZvciAoaT0wLCBsZW49dmFsdWUucGFydHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUucGFydHNbaV0udHlwZSA9PT0gInVyaSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGFja1t2YWx1ZS5wYXJ0c1tpXS51cmldID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbdmFsdWUucGFydHNbaV0udXJpXSA9IGV2ZW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJCYWNrZ3JvdW5kIGltYWdlICciICsgdmFsdWUucGFydHNbaV0udXJpICsgIicgd2FzIHVzZWQgbXVsdGlwbGUgdGltZXMsIGZpcnN0IGRlY2xhcmVkIGF0IGxpbmUgIiArIHN0YWNrW3ZhbHVlLnBhcnRzW2ldLnVyaV0ubGluZSArICIsIGNvbCAiICsgc3RhY2tbdmFsdWUucGFydHNbaV0udXJpXS5jb2wgKyAiLiIsIGV2ZW50LmxpbmUsIGV2ZW50LmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJkdXBsaWNhdGUtcHJvcGVydGllcyIsCiAgICBuYW1lOiAiRGlzYWxsb3cgZHVwbGljYXRlIHByb3BlcnRpZXMiLAogICAgZGVzYzogIkR1cGxpY2F0ZSBwcm9wZXJ0aWVzIG11c3QgYXBwZWFyIG9uZSBhZnRlciB0aGUgb3RoZXIuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgcHJvcGVydGllcywKICAgICAgICAgICAgbGFzdFByb3BlcnR5OwoKICAgICAgICBmdW5jdGlvbiBzdGFydFJ1bGUoKXsKICAgICAgICAgICAgcHJvcGVydGllcyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlbWFyZ2luIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIiwgc3RhcnRSdWxlKTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gZXZlbnQucHJvcGVydHksCiAgICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbbmFtZV0gJiYgKGxhc3RQcm9wZXJ0eSAhPT0gbmFtZSB8fCBwcm9wZXJ0aWVzW25hbWVdID09PSBldmVudC52YWx1ZS50ZXh0KSl7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIkR1cGxpY2F0ZSBwcm9wZXJ0eSAnIiArIGV2ZW50LnByb3BlcnR5ICsgIicgZm91bmQuIiwgZXZlbnQubGluZSwgZXZlbnQuY29sLCBydWxlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IGV2ZW50LnZhbHVlLnRleHQ7CiAgICAgICAgICAgIGxhc3RQcm9wZXJ0eSA9IG5hbWU7CgogICAgICAgIH0pOwoKCiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogImVtcHR5LXJ1bGVzIiwKICAgIG5hbWU6ICJEaXNhbGxvdyBlbXB0eSBydWxlcyIsCiAgICBkZXNjOiAiUnVsZXMgd2l0aG91dCBhbnkgcHJvcGVydGllcyBzcGVjaWZpZWQgc2hvdWxkIGJlIHJlbW92ZWQuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgY291bnQgPSAwOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGNvdW50PTA7CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbigpewogICAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBldmVudC5zZWxlY3RvcnM7CiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCl7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIlJ1bGUgaXMgZW1wdHkuIiwgc2VsZWN0b3JzWzBdLmxpbmUsIHNlbGVjdG9yc1swXS5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogImVycm9ycyIsCiAgICBuYW1lOiAiUGFyc2luZyBFcnJvcnMiLAogICAgZGVzYzogIlRoaXMgcnVsZSBsb29rcyBmb3IgcmVjb3ZlcmFibGUgc3ludGF4IGVycm9ycy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVycm9yIiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICByZXBvcnRlci5lcnJvcihldmVudC5tZXNzYWdlLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOwogICAgICAgIH0pOwoKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAiZmFsbGJhY2stY29sb3JzIiwKICAgIG5hbWU6ICJSZXF1aXJlIGZhbGxiYWNrIGNvbG9ycyIsCiAgICBkZXNjOiAiRm9yIG9sZGVyIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBSR0JBLCBIU0wsIG9yIEhTTEEsIHByb3ZpZGUgYSBmYWxsYmFjayBjb2xvci4iLAogICAgYnJvd3NlcnM6ICJJRTYsSUU3LElFOCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXMsCiAgICAgICAgICAgIGxhc3RQcm9wZXJ0eSwKICAgICAgICAgICAgcHJvcGVydGllc1RvQ2hlY2sgPSB7CiAgICAgICAgICAgICAgICBjb2xvcjogMSwKICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IDEsCiAgICAgICAgICAgICAgICAiYm9yZGVyLWNvbG9yIjogMSwKICAgICAgICAgICAgICAgICJib3JkZXItdG9wLWNvbG9yIjogMSwKICAgICAgICAgICAgICAgICJib3JkZXItcmlnaHQtY29sb3IiOiAxLAogICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b20tY29sb3IiOiAxLAogICAgICAgICAgICAgICAgImJvcmRlci1sZWZ0LWNvbG9yIjogMSwKICAgICAgICAgICAgICAgIGJvcmRlcjogMSwKICAgICAgICAgICAgICAgICJib3JkZXItdG9wIjogMSwKICAgICAgICAgICAgICAgICJib3JkZXItcmlnaHQiOiAxLAogICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b20iOiAxLAogICAgICAgICAgICAgICAgImJvcmRlci1sZWZ0IjogMSwKICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kLWNvbG9yIjogMQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9wZXJ0aWVzOwoKICAgICAgICBmdW5jdGlvbiBzdGFydFJ1bGUoKXsKICAgICAgICAgICAgcHJvcGVydGllcyA9IHt9OwogICAgICAgICAgICBsYXN0UHJvcGVydHkgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlbWFyZ2luIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIiwgc3RhcnRSdWxlKTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gZXZlbnQucHJvcGVydHksCiAgICAgICAgICAgICAgICBuYW1lID0gcHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpLAogICAgICAgICAgICAgICAgcGFydHMgPSBldmVudC52YWx1ZS5wYXJ0cywKICAgICAgICAgICAgICAgIGkgPSAwLAogICAgICAgICAgICAgICAgY29sb3JUeXBlID0gIiIsCiAgICAgICAgICAgICAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7CgogICAgICAgICAgICBpZihwcm9wZXJ0aWVzVG9DaGVja1tuYW1lXSl7CiAgICAgICAgICAgICAgICB3aGlsZShpIDwgbGVuKXsKICAgICAgICAgICAgICAgICAgICBpZiAocGFydHNbaV0udHlwZSA9PT0gImNvbG9yIil7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgiYWxwaGEiIGluIHBhcnRzW2ldIHx8ICJodWUiIGluIHBhcnRzW2ldKXsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLyhbXlwpXSspXCgvLnRlc3QocGFydHNbaV0pKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclR5cGUgPSBSZWdFeHAuJDEudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RQcm9wZXJ0eSB8fCAobGFzdFByb3BlcnR5LnByb3BlcnR5LnRleHQudG9Mb3dlckNhc2UoKSAhPT0gbmFtZSB8fCBsYXN0UHJvcGVydHkuY29sb3JUeXBlICE9PSAiY29tcGF0IikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiRmFsbGJhY2sgIiArIG5hbWUgKyAiIChoZXggb3IgUkdCKSBzaG91bGQgcHJlY2VkZSAiICsgY29sb3JUeXBlICsgIiAiICsgbmFtZSArICIuIiwgZXZlbnQubGluZSwgZXZlbnQuY29sLCBydWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmNvbG9yVHlwZSA9ICJjb21wYXQiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxhc3RQcm9wZXJ0eSA9IGV2ZW50OwogICAgICAgIH0pOwoKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAiZmxvYXRzIiwKICAgIG5hbWU6ICJEaXNhbGxvdyB0b28gbWFueSBmbG9hdHMiLAogICAgZGVzYzogIlRoaXMgcnVsZSB0ZXN0cyBpZiB0aGUgZmxvYXQgcHJvcGVydHkgaXMgdXNlZCB0b28gbWFueSB0aW1lcyIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXM7CiAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICBpZiAoZXZlbnQucHJvcGVydHkudGV4dC50b0xvd2VyQ2FzZSgpID09PSAiZmxvYXQiICYmCiAgICAgICAgICAgICAgICAgICAgZXZlbnQudmFsdWUudGV4dC50b0xvd2VyQ2FzZSgpICE9PSAibm9uZSIpewogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kc3R5bGVzaGVldCIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHJlcG9ydGVyLnN0YXQoImZsb2F0cyIsIGNvdW50KTsKICAgICAgICAgICAgaWYgKGNvdW50ID49IDEwKXsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJvbGx1cFdhcm4oIlRvbyBtYW55IGZsb2F0cyAoIiArIGNvdW50ICsgIiksIHlvdSdyZSBwcm9iYWJseSB1c2luZyB0aGVtIGZvciBsYXlvdXQuIENvbnNpZGVyIHVzaW5nIGEgZ3JpZCBzeXN0ZW0gaW5zdGVhZC4iLCBydWxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJmb250LWZhY2VzIiwKICAgIG5hbWU6ICJEb24ndCB1c2UgdG9vIG1hbnkgd2ViIGZvbnRzIiwKICAgIGRlc2M6ICJUb28gbWFueSBkaWZmZXJlbnQgd2ViIGZvbnRzIGluIHRoZSBzYW1lIHN0eWxlc2hlZXQuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgY291bnQgPSAwOwoKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGZvbnRmYWNlIiwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgY291bnQrKzsKICAgICAgICB9KTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IiwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgaWYgKGNvdW50ID4gNSl7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yb2xsdXBXYXJuKCJUb28gbWFueSBAZm9udC1mYWNlIGRlY2xhcmF0aW9ucyAoIiArIGNvdW50ICsgIikuIiwgcnVsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAiZm9udC1zaXplcyIsCiAgICBuYW1lOiAiRGlzYWxsb3cgdG9vIG1hbnkgZm9udCBzaXplcyIsCiAgICBkZXNjOiAiQ2hlY2tzIHRoZSBudW1iZXIgb2YgZm9udC1zaXplIGRlY2xhcmF0aW9ucy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLAogICAgICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgaWYgKGV2ZW50LnByb3BlcnR5LnRvU3RyaW5nKCkgPT09ICJmb250LXNpemUiKXsKICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpewogICAgICAgICAgICByZXBvcnRlci5zdGF0KCJmb250LXNpemVzIiwgY291bnQpOwogICAgICAgICAgICBpZiAoY291bnQgPj0gMTApewogICAgICAgICAgICAgICAgcmVwb3J0ZXIucm9sbHVwV2FybigiVG9vIG1hbnkgZm9udC1zaXplIGRlY2xhcmF0aW9ucyAoIiArIGNvdW50ICsgIiksIGFic3RyYWN0aW9uIG5lZWRlZC4iLCBydWxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJncmFkaWVudHMiLAogICAgbmFtZTogIlJlcXVpcmUgYWxsIGdyYWRpZW50IGRlZmluaXRpb25zIiwKICAgIGRlc2M6ICJXaGVuIHVzaW5nIGEgdmVuZG9yLXByZWZpeGVkIGdyYWRpZW50LCBtYWtlIHN1cmUgdG8gdXNlIHRoZW0gYWxsLiIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXMsCiAgICAgICAgICAgIGdyYWRpZW50czsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbigpewogICAgICAgICAgICBncmFkaWVudHMgPSB7CiAgICAgICAgICAgICAgICBtb3o6IDAsCiAgICAgICAgICAgICAgICB3ZWJraXQ6IDAsCiAgICAgICAgICAgICAgICBvbGRXZWJraXQ6IDAsCiAgICAgICAgICAgICAgICBvOiAwCiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CgogICAgICAgICAgICBpZiAoL1wtKG1venxvfHdlYmtpdCkoPzpcLSg/OmxpbmVhcnxyYWRpYWwpKVwtZ3JhZGllbnQvaS50ZXN0KGV2ZW50LnZhbHVlKSl7CiAgICAgICAgICAgICAgICBncmFkaWVudHNbUmVnRXhwLiQxXSA9IDE7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoL1wtd2Via2l0XC1ncmFkaWVudC9pLnRlc3QoZXZlbnQudmFsdWUpKXsKICAgICAgICAgICAgICAgIGdyYWRpZW50cy5vbGRXZWJraXQgPSAxOwogICAgICAgICAgICB9CgogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBtaXNzaW5nID0gW107CgogICAgICAgICAgICBpZiAoIWdyYWRpZW50cy5tb3opewogICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKCJGaXJlZm94IDMuNisiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFncmFkaWVudHMud2Via2l0KXsKICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaCgiV2Via2l0IChTYWZhcmkgNSssIENocm9tZSkiKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCFncmFkaWVudHMub2xkV2Via2l0KXsKICAgICAgICAgICAgICAgIG1pc3NpbmcucHVzaCgiT2xkIFdlYmtpdCAoU2FmYXJpIDQrLCBDaHJvbWUpIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghZ3JhZGllbnRzLm8pewogICAgICAgICAgICAgICAgbWlzc2luZy5wdXNoKCJPcGVyYSAxMS4xKyIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWlzc2luZy5sZW5ndGggJiYgbWlzc2luZy5sZW5ndGggPCA0KXsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiTWlzc2luZyB2ZW5kb3ItcHJlZml4ZWQgQ1NTIGdyYWRpZW50cyBmb3IgIiArIG1pc3Npbmcuam9pbigiLCAiKSArICIuIiwgZXZlbnQuc2VsZWN0b3JzWzBdLmxpbmUsIGV2ZW50LnNlbGVjdG9yc1swXS5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CgogICAgICAgIH0pOwoKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAiaWRzIiwKICAgIG5hbWU6ICJEaXNhbGxvdyBJRHMgaW4gc2VsZWN0b3JzIiwKICAgIGRlc2M6ICJTZWxlY3RvcnMgc2hvdWxkIG5vdCBjb250YWluIElEcy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICB2YXIgc2VsZWN0b3JzID0gZXZlbnQuc2VsZWN0b3JzLAogICAgICAgICAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgICAgICAgICBwYXJ0LAogICAgICAgICAgICAgICAgbW9kaWZpZXIsCiAgICAgICAgICAgICAgICBpZENvdW50LAogICAgICAgICAgICAgICAgaSwgaiwgazsKCiAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOwogICAgICAgICAgICAgICAgaWRDb3VudCA9IDA7CgogICAgICAgICAgICAgICAgZm9yIChqPTA7IGogPCBzZWxlY3Rvci5wYXJ0cy5sZW5ndGg7IGorKyl7CiAgICAgICAgICAgICAgICAgICAgcGFydCA9IHNlbGVjdG9yLnBhcnRzW2pdOwogICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LnR5cGUgPT09IHBhcnNlci5TRUxFQ1RPUl9QQVJUX1RZUEUpewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGs9MDsgayA8IHBhcnQubW9kaWZpZXJzLmxlbmd0aDsgaysrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gcGFydC5tb2RpZmllcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZXIudHlwZSA9PT0gImlkIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChpZENvdW50ID09PSAxKXsKICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIkRvbid0IHVzZSBJRHMgaW4gc2VsZWN0b3JzLiIsIHNlbGVjdG9yLmxpbmUsIHNlbGVjdG9yLmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlkQ291bnQgPiAxKXsKICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoaWRDb3VudCArICIgSURzIGluIHRoZSBzZWxlY3RvciwgcmVhbGx5PyIsIHNlbGVjdG9yLmxpbmUsIHNlbGVjdG9yLmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSk7CiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogImltcG9ydCIsCiAgICBuYW1lOiAiRGlzYWxsb3cgQGltcG9ydCIsCiAgICBkZXNjOiAiRG9uJ3QgdXNlIEBpbXBvcnQsIHVzZSA8bGluaz4gaW5zdGVhZC4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImltcG9ydCIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJAaW1wb3J0IHByZXZlbnRzIHBhcmFsbGVsIGRvd25sb2FkcywgdXNlIDxsaW5rPiBpbnN0ZWFkLiIsIGV2ZW50LmxpbmUsIGV2ZW50LmNvbCwgcnVsZSk7CiAgICAgICAgfSk7CgogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJpbXBvcnRhbnQiLAogICAgbmFtZTogIkRpc2FsbG93ICFpbXBvcnRhbnQiLAogICAgZGVzYzogIkJlIGNhcmVmdWwgd2hlbiB1c2luZyAhaW1wb3J0YW50IGRlY2xhcmF0aW9uIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgY291bnQgPSAwOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIGlmIChldmVudC5pbXBvcnRhbnQgPT09IHRydWUpewogICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiVXNlIG9mICFpbXBvcnRhbnQiLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRzdHlsZXNoZWV0IiwgZnVuY3Rpb24oKXsKICAgICAgICAgICAgcmVwb3J0ZXIuc3RhdCgiaW1wb3J0YW50IiwgY291bnQpOwogICAgICAgICAgICBpZiAoY291bnQgPj0gMTApewogICAgICAgICAgICAgICAgcmVwb3J0ZXIucm9sbHVwV2FybigiVG9vIG1hbnkgIWltcG9ydGFudCBkZWNsYXJhdGlvbnMgKCIgKyBjb3VudCArICIpLCB0cnkgdG8gdXNlIGxlc3MgdGhhbiAxMCB0byBhdm9pZCBzcGVjaWZpY2l0eSBpc3N1ZXMuIiwgcnVsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAia25vd24tcHJvcGVydGllcyIsCiAgICBuYW1lOiAiUmVxdWlyZSB1c2Ugb2Yga25vd24gcHJvcGVydGllcyIsCiAgICBkZXNjOiAiUHJvcGVydGllcyBzaG91bGQgYmUga25vd24gKGxpc3RlZCBpbiBDU1MzIHNwZWNpZmljYXRpb24pIG9yIGJlIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5LiIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXM7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIGlmIChldmVudC5pbnZhbGlkKSB7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoZXZlbnQuaW52YWxpZC5tZXNzYWdlLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CgogICAgICAgIH0pOwogICAgfQoKfSk7CkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogIm9yZGVyLWFscGhhYmV0aWNhbCIsCiAgICBuYW1lOiAiQWxwaGFiZXRpY2FsIG9yZGVyIiwKICAgIGRlc2M6ICJBc3N1cmUgcHJvcGVydGllcyBhcmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgcHJvcGVydGllczsKCiAgICAgICAgdmFyIHN0YXJ0UnVsZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcHJvcGVydGllcyA9IFtdOwogICAgICAgIH07CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cGFnZW1hcmdpbiIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGtleWZyYW1lcnVsZSIsIHN0YXJ0UnVsZSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQucHJvcGVydHkudGV4dCwKICAgICAgICAgICAgICAgIGxvd2VyQ2FzZVByZWZpeExlc3NOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL14tLio/LS8sICIiKTsKCiAgICAgICAgICAgIHByb3BlcnRpZXMucHVzaChsb3dlckNhc2VQcmVmaXhMZXNzTmFtZSk7CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIGN1cnJlbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5qb2luKCIsIiksCiAgICAgICAgICAgICAgICBleHBlY3RlZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnNvcnQoKS5qb2luKCIsIik7CgogICAgICAgICAgICBpZiAoY3VycmVudFByb3BlcnRpZXMgIT09IGV4cGVjdGVkUHJvcGVydGllcyl7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIlJ1bGUgZG9lc24ndCBoYXZlIGFsbCBpdHMgcHJvcGVydGllcyBpbiBhbHBoYWJldGljYWwgb3JkZXJlZC4iLCBldmVudC5saW5lLCBldmVudC5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogIm91dGxpbmUtbm9uZSIsCiAgICBuYW1lOiAiRGlzYWxsb3cgb3V0bGluZTogbm9uZSIsCiAgICBkZXNjOiAiVXNlIG9mIG91dGxpbmU6IG5vbmUgb3Igb3V0bGluZTogMCBzaG91bGQgYmUgbGltaXRlZCB0byA6Zm9jdXMgcnVsZXMuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIHRhZ3M6IFsiQWNjZXNzaWJpbGl0eSJdLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzLAogICAgICAgICAgICBsYXN0UnVsZTsKCiAgICAgICAgZnVuY3Rpb24gc3RhcnRSdWxlKGV2ZW50KXsKICAgICAgICAgICAgaWYgKGV2ZW50LnNlbGVjdG9ycyl7CiAgICAgICAgICAgICAgICBsYXN0UnVsZSA9IHsKICAgICAgICAgICAgICAgICAgICBsaW5lOiBldmVudC5saW5lLAogICAgICAgICAgICAgICAgICAgIGNvbDogZXZlbnQuY29sLAogICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yczogZXZlbnQuc2VsZWN0b3JzLAogICAgICAgICAgICAgICAgICAgIHByb3BDb3VudDogMCwKICAgICAgICAgICAgICAgICAgICBvdXRsaW5lOiBmYWxzZQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGxhc3RSdWxlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZW5kUnVsZSgpewogICAgICAgICAgICBpZiAobGFzdFJ1bGUpewogICAgICAgICAgICAgICAgaWYgKGxhc3RSdWxlLm91dGxpbmUpewogICAgICAgICAgICAgICAgICAgIGlmIChsYXN0UnVsZS5zZWxlY3RvcnMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIjpmb2N1cyIpID09PSAtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiT3V0bGluZXMgc2hvdWxkIG9ubHkgYmUgbW9kaWZpZWQgdXNpbmcgOmZvY3VzLiIsIGxhc3RSdWxlLmxpbmUsIGxhc3RSdWxlLmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0UnVsZS5wcm9wQ291bnQgPT09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJPdXRsaW5lcyBzaG91bGRuJ3QgYmUgaGlkZGVuIHVubGVzcyBvdGhlciB2aXN1YWwgY2hhbmdlcyBhcmUgbWFkZS4iLCBsYXN0UnVsZS5saW5lLCBsYXN0UnVsZS5jb2wsIHJ1bGUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlbWFyZ2luIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIiwgc3RhcnRSdWxlKTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCksCiAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnZhbHVlOwoKICAgICAgICAgICAgaWYgKGxhc3RSdWxlKXsKICAgICAgICAgICAgICAgIGxhc3RSdWxlLnByb3BDb3VudCsrOwogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICJvdXRsaW5lIiAmJiAodmFsdWUudG9TdHJpbmcoKSA9PT0gIm5vbmUiIHx8IHZhbHVlLnRvU3RyaW5nKCkgPT09ICIwIikpewogICAgICAgICAgICAgICAgICAgIGxhc3RSdWxlLm91dGxpbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLCBlbmRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZGZvbnRmYWNlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlbWFyZ2luIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRrZXlmcmFtZXJ1bGUiLCBlbmRSdWxlKTsKCiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogIm92ZXJxdWFsaWZpZWQtZWxlbWVudHMiLAogICAgbmFtZTogIkRpc2FsbG93IG92ZXJxdWFsaWZpZWQgZWxlbWVudHMiLAogICAgZGVzYzogIkRvbid0IHVzZSBjbGFzc2VzIG9yIElEcyB3aXRoIGVsZW1lbnRzIChhLmZvbyBvciBhI2ZvbykuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgY2xhc3NlcyA9IHt9OwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV2ZW50LnNlbGVjdG9ycywKICAgICAgICAgICAgICAgIHNlbGVjdG9yLAogICAgICAgICAgICAgICAgcGFydCwKICAgICAgICAgICAgICAgIG1vZGlmaWVyLAogICAgICAgICAgICAgICAgaSwgaiwgazsKCiAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOwoKICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgc2VsZWN0b3IucGFydHMubGVuZ3RoOyBqKyspewogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1tqXTsKICAgICAgICAgICAgICAgICAgICBpZiAocGFydC50eXBlID09PSBwYXJzZXIuU0VMRUNUT1JfUEFSVF9UWVBFKXsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrPTA7IGsgPCBwYXJ0Lm1vZGlmaWVycy5sZW5ndGg7IGsrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllciA9IHBhcnQubW9kaWZpZXJzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQuZWxlbWVudE5hbWUgJiYgbW9kaWZpZXIudHlwZSA9PT0gImlkIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJFbGVtZW50ICgiICsgcGFydCArICIpIGlzIG92ZXJxdWFsaWZpZWQsIGp1c3QgdXNlICIgKyBtb2RpZmllciArICIgd2l0aG91dCBlbGVtZW50IG5hbWUuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1vZGlmaWVyLnR5cGUgPT09ICJjbGFzcyIpewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNsYXNzZXNbbW9kaWZpZXJdKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1ttb2RpZmllcl0gPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1ttb2RpZmllcl0ucHVzaCh7IG1vZGlmaWVyOiBtb2RpZmllciwgcGFydDogcGFydCB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpewoKICAgICAgICAgICAgdmFyIHByb3A7CiAgICAgICAgICAgIGZvciAocHJvcCBpbiBjbGFzc2VzKXsKICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzLmhhc093blByb3BlcnR5KHByb3ApKXsKICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3Nlc1twcm9wXS5sZW5ndGggPT09IDEgJiYgY2xhc3Nlc1twcm9wXVswXS5wYXJ0LmVsZW1lbnROYW1lKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJFbGVtZW50ICgiICsgY2xhc3Nlc1twcm9wXVswXS5wYXJ0ICsgIikgaXMgb3ZlcnF1YWxpZmllZCwganVzdCB1c2UgIiArIGNsYXNzZXNbcHJvcF1bMF0ubW9kaWZpZXIgKyAiIHdpdGhvdXQgZWxlbWVudCBuYW1lLiIsIGNsYXNzZXNbcHJvcF1bMF0ucGFydC5saW5lLCBjbGFzc2VzW3Byb3BdWzBdLnBhcnQuY29sLCBydWxlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAicXVhbGlmaWVkLWhlYWRpbmdzIiwKICAgIG5hbWU6ICJEaXNhbGxvdyBxdWFsaWZpZWQgaGVhZGluZ3MiLAogICAgZGVzYzogIkhlYWRpbmdzIHNob3VsZCBub3QgYmUgcXVhbGlmaWVkIChuYW1lc3BhY2VkKS4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV2ZW50LnNlbGVjdG9ycywKICAgICAgICAgICAgICAgIHNlbGVjdG9yLAogICAgICAgICAgICAgICAgcGFydCwKICAgICAgICAgICAgICAgIGksIGo7CgogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKCiAgICAgICAgICAgICAgICBmb3IgKGo9MDsgaiA8IHNlbGVjdG9yLnBhcnRzLmxlbmd0aDsgaisrKXsKICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZWN0b3IucGFydHNbal07CiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gcGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0LmVsZW1lbnROYW1lICYmIC9oWzEtNl0vLnRlc3QocGFydC5lbGVtZW50TmFtZS50b1N0cmluZygpKSAmJiBqID4gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIkhlYWRpbmcgKCIgKyBwYXJ0LmVsZW1lbnROYW1lICsgIikgc2hvdWxkIG5vdCBiZSBxdWFsaWZpZWQuIiwgcGFydC5saW5lLCBwYXJ0LmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAicmVnZXgtc2VsZWN0b3JzIiwKICAgIG5hbWU6ICJEaXNhbGxvdyBzZWxlY3RvcnMgdGhhdCBsb29rIGxpa2UgcmVnZXhzIiwKICAgIGRlc2M6ICJTZWxlY3RvcnMgdGhhdCBsb29rIGxpa2UgcmVndWxhciBleHByZXNzaW9ucyBhcmUgc2xvdyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpczsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBldmVudC5zZWxlY3RvcnMsCiAgICAgICAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgICAgICAgIHBhcnQsCiAgICAgICAgICAgICAgICBtb2RpZmllciwKICAgICAgICAgICAgICAgIGksIGosIGs7CgogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgc2VsZWN0b3IucGFydHMubGVuZ3RoOyBqKyspewogICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1tqXTsKICAgICAgICAgICAgICAgICAgICBpZiAocGFydC50eXBlID09PSBwYXJzZXIuU0VMRUNUT1JfUEFSVF9UWVBFKXsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrPTA7IGsgPCBwYXJ0Lm1vZGlmaWVycy5sZW5ndGg7IGsrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllciA9IHBhcnQubW9kaWZpZXJzW2tdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyLnR5cGUgPT09ICJhdHRyaWJ1dGUiKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLyhbXH5cfFxeXCRcKl09KS8udGVzdChtb2RpZmllcikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIkF0dHJpYnV0ZSBzZWxlY3RvcnMgd2l0aCAiICsgUmVnRXhwLiQxICsgIiBhcmUgc2xvdyEiLCBtb2RpZmllci5saW5lLCBtb2RpZmllci5jb2wsIHJ1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAicnVsZXMtY291bnQiLAogICAgbmFtZTogIlJ1bGVzIENvdW50IiwKICAgIGRlc2M6ICJUcmFjayBob3cgbWFueSBydWxlcyB0aGVyZSBhcmUuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbigpewogICAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpewogICAgICAgICAgICByZXBvcnRlci5zdGF0KCJydWxlLWNvdW50IiwgY291bnQpOwogICAgICAgIH0pOwogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJzZWxlY3Rvci1tYXgtYXBwcm9hY2hpbmciLAogICAgbmFtZTogIldhcm4gd2hlbiBhcHByb2FjaGluZyB0aGUgNDA5NSBzZWxlY3RvciBsaW1pdCBmb3IgSUUiLAogICAgZGVzYzogIldpbGwgd2FybiB3aGVuIHNlbGVjdG9yIGNvdW50IGlzID49IDM4MDAgc2VsZWN0b3JzLiIsCiAgICBicm93c2VyczogIklFIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpIHsKICAgICAgICB2YXIgcnVsZSA9IHRoaXMsIGNvdW50ID0gMDsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICBjb3VudCArPSBldmVudC5zZWxlY3RvcnMubGVuZ3RoOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHN0eWxlc2hlZXQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGNvdW50ID49IDM4MDApIHsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiWW91IGhhdmUgIiArIGNvdW50ICsgIiBzZWxlY3RvcnMuIEludGVybmV0IEV4cGxvcmVyIHN1cHBvcnRzIGEgbWF4aW11bSBvZiA0MDk1IHNlbGVjdG9ycyBwZXIgc3R5bGVzaGVldC4gQ29uc2lkZXIgcmVmYWN0b3JpbmcuIiwwLDAscnVsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAic2VsZWN0b3ItbWF4IiwKICAgIG5hbWU6ICJFcnJvciB3aGVuIHBhc3QgdGhlIDQwOTUgc2VsZWN0b3IgbGltaXQgZm9yIElFIiwKICAgIGRlc2M6ICJXaWxsIGVycm9yIHdoZW4gc2VsZWN0b3IgY291bnQgaXMgPiA0MDk1LiIsCiAgICBicm93c2VyczogIklFIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywgY291bnQgPSAwOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICAgICAgIGNvdW50ICs9IGV2ZW50LnNlbGVjdG9ycy5sZW5ndGg7CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kc3R5bGVzaGVldCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoY291bnQgPiA0MDk1KSB7CiAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIllvdSBoYXZlICIgKyBjb3VudCArICIgc2VsZWN0b3JzLiBJbnRlcm5ldCBFeHBsb3JlciBzdXBwb3J0cyBhIG1heGltdW0gb2YgNDA5NSBzZWxlY3RvcnMgcGVyIHN0eWxlc2hlZXQuIENvbnNpZGVyIHJlZmFjdG9yaW5nLiIsMCwwLHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogInNlbGVjdG9yLW5ld2xpbmUiLAogICAgbmFtZTogIkRpc2FsbG93IG5ldy1saW5lIGNoYXJhY3RlcnMgaW4gc2VsZWN0b3JzIiwKICAgIGRlc2M6ICJOZXctbGluZSBjaGFyYWN0ZXJzIGluIHNlbGVjdG9ycyBhcmUgdXN1YWxseSBhIGZvcmdvdHRlbiBjb21tYSBhbmQgbm90IGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLiIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKSB7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICBmdW5jdGlvbiBzdGFydFJ1bGUoZXZlbnQpIHsKICAgICAgICAgICAgdmFyIGksIGxlbiwgc2VsZWN0b3IsIHAsIG4sIHBMZW4sIHBhcnQsIHBhcnQyLCB0eXBlLCBjdXJyZW50TGluZSwgbmV4dExpbmUsCiAgICAgICAgICAgICAgICBzZWxlY3RvcnMgPSBldmVudC5zZWxlY3RvcnM7CgogICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzZWxlY3RvcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzW2ldOwogICAgICAgICAgICAgICAgZm9yIChwID0gMCwgcExlbiA9IHNlbGVjdG9yLnBhcnRzLmxlbmd0aDsgcCA8IHBMZW47IHArKykgewogICAgICAgICAgICAgICAgICAgIGZvciAobiA9IHAgKyAxOyBuIDwgcExlbjsgbisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxlY3Rvci5wYXJ0c1twXTsKICAgICAgICAgICAgICAgICAgICAgICAgcGFydDIgPSBzZWxlY3Rvci5wYXJ0c1tuXTsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnQudHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExpbmUgPSBwYXJ0LmxpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMaW5lID0gcGFydDIubGluZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAiZGVzY2VuZGFudCIgJiYgbmV4dExpbmUgPiBjdXJyZW50TGluZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJuZXdsaW5lIGNoYXJhY3RlciBmb3VuZCBpbiBzZWxlY3RvciAoZm9yZ290IGEgY29tbWE/KSIsIGN1cnJlbnRMaW5lLCBzZWxlY3RvcnNbaV0ucGFydHNbMF0uY29sLCBydWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgc3RhcnRSdWxlKTsKCiAgICB9Cn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAic2hvcnRoYW5kIiwKICAgIG5hbWU6ICJSZXF1aXJlIHNob3J0aGFuZCBwcm9wZXJ0aWVzIiwKICAgIGRlc2M6ICJVc2Ugc2hvcnRoYW5kIHByb3BlcnRpZXMgd2hlcmUgcG9zc2libGUuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgcHJvcCwgaSwgbGVuLAogICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IHt9LAogICAgICAgICAgICBwcm9wZXJ0aWVzLAogICAgICAgICAgICBtYXBwaW5nID0gewogICAgICAgICAgICAgICAgIm1hcmdpbiI6IFsKICAgICAgICAgICAgICAgICAgICAibWFyZ2luLXRvcCIsCiAgICAgICAgICAgICAgICAgICAgIm1hcmdpbi1ib3R0b20iLAogICAgICAgICAgICAgICAgICAgICJtYXJnaW4tbGVmdCIsCiAgICAgICAgICAgICAgICAgICAgIm1hcmdpbi1yaWdodCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicGFkZGluZyI6IFsKICAgICAgICAgICAgICAgICAgICAicGFkZGluZy10b3AiLAogICAgICAgICAgICAgICAgICAgICJwYWRkaW5nLWJvdHRvbSIsCiAgICAgICAgICAgICAgICAgICAgInBhZGRpbmctbGVmdCIsCiAgICAgICAgICAgICAgICAgICAgInBhZGRpbmctcmlnaHQiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH07CiAgICAgICAgZm9yIChwcm9wIGluIG1hcHBpbmcpewogICAgICAgICAgICBpZiAobWFwcGluZy5oYXNPd25Qcm9wZXJ0eShwcm9wKSl7CiAgICAgICAgICAgICAgICBmb3IgKGk9MCwgbGVuPW1hcHBpbmdbcHJvcF0ubGVuZ3RoOyBpIDwgbGVuOyBpKyspewogICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNUb0NoZWNrW21hcHBpbmdbcHJvcF1baV1dID0gcHJvcDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gc3RhcnRSdWxlKCl7CiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7fTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gZW5kUnVsZShldmVudCl7CgogICAgICAgICAgICB2YXIgcHJvcCwgaSwgbGVuLCB0b3RhbDsKICAgICAgICAgICAgZm9yIChwcm9wIGluIG1hcHBpbmcpewogICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuaGFzT3duUHJvcGVydHkocHJvcCkpewogICAgICAgICAgICAgICAgICAgIHRvdGFsPTA7CgogICAgICAgICAgICAgICAgICAgIGZvciAoaT0wLCBsZW49bWFwcGluZ1twcm9wXS5sZW5ndGg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHByb3BlcnRpZXNbbWFwcGluZ1twcm9wXVtpXV0gPyAxIDogMDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PT0gbWFwcGluZ1twcm9wXS5sZW5ndGgpewogICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIlRoZSBwcm9wZXJ0aWVzICIgKyBtYXBwaW5nW3Byb3BdLmpvaW4oIiwgIikgKyAiIGNhbiBiZSByZXBsYWNlZCBieSAiICsgcHJvcCArICIuIiwgZXZlbnQubGluZSwgZXZlbnQuY29sLCBydWxlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRydWxlIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0Zm9udGZhY2UiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBuYW1lID0gZXZlbnQucHJvcGVydHkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNUb0NoZWNrW25hbWVdKXsKICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbbmFtZV0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kcnVsZSIsIGVuZFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kZm9udGZhY2UiLCBlbmRSdWxlKTsKCiAgICB9Cgp9KTsKCkNTU0xpbnQuYWRkUnVsZSh7CiAgICBpZDogInN0YXItcHJvcGVydHktaGFjayIsCiAgICBuYW1lOiAiRGlzYWxsb3cgcHJvcGVydGllcyB3aXRoIGEgc3RhciBwcmVmaXgiLAogICAgZGVzYzogIkNoZWNrcyBmb3IgdGhlIHN0YXIgcHJvcGVydHkgaGFjayAodGFyZ2V0cyBJRTYvNykiLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigicHJvcGVydHkiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGV2ZW50LnByb3BlcnR5OwoKICAgICAgICAgICAgaWYgKHByb3BlcnR5LmhhY2sgPT09ICIqIikgewogICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJQcm9wZXJ0eSB3aXRoIHN0YXIgcHJlZml4IGZvdW5kLiIsIGV2ZW50LnByb3BlcnR5LmxpbmUsIGV2ZW50LnByb3BlcnR5LmNvbCwgcnVsZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJ0ZXh0LWluZGVudCIsCiAgICBuYW1lOiAiRGlzYWxsb3cgbmVnYXRpdmUgdGV4dC1pbmRlbnQiLAogICAgZGVzYzogIkNoZWNrcyBmb3IgdGV4dCBpbmRlbnQgbGVzcyB0aGFuIC05OXB4IiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgdGV4dEluZGVudCwKICAgICAgICAgICAgZGlyZWN0aW9uOwoKCiAgICAgICAgZnVuY3Rpb24gc3RhcnRSdWxlKCl7CiAgICAgICAgICAgIHRleHRJbmRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgZGlyZWN0aW9uID0gImluaGVyaXQiOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBlbmRSdWxlKCl7CiAgICAgICAgICAgIGlmICh0ZXh0SW5kZW50ICYmIGRpcmVjdGlvbiAhPT0gImx0ciIpewogICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJOZWdhdGl2ZSB0ZXh0LWluZGVudCBkb2Vzbid0IHdvcmsgd2VsbCB3aXRoIFJUTC4gSWYgeW91IHVzZSB0ZXh0LWluZGVudCBmb3IgaW1hZ2UgcmVwbGFjZW1lbnQgZXhwbGljaXRseSBzZXQgZGlyZWN0aW9uIGZvciB0aGF0IGl0ZW0gdG8gbHRyLiIsIHRleHRJbmRlbnQubGluZSwgdGV4dEluZGVudC5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydGZvbnRmYWNlIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICB2YXIgbmFtZSA9IGV2ZW50LnByb3BlcnR5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSwKICAgICAgICAgICAgICAgIHZhbHVlID0gZXZlbnQudmFsdWU7CgogICAgICAgICAgICBpZiAobmFtZSA9PT0gInRleHQtaW5kZW50IiAmJiB2YWx1ZS5wYXJ0c1swXS52YWx1ZSA8IC05OSl7CiAgICAgICAgICAgICAgICB0ZXh0SW5kZW50ID0gZXZlbnQucHJvcGVydHk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gImRpcmVjdGlvbiIgJiYgdmFsdWUudG9TdHJpbmcoKSA9PT0gImx0ciIpewogICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gImx0ciI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRydWxlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRmb250ZmFjZSIsIGVuZFJ1bGUpOwoKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAidW5kZXJzY29yZS1wcm9wZXJ0eS1oYWNrIiwKICAgIG5hbWU6ICJEaXNhbGxvdyBwcm9wZXJ0aWVzIHdpdGggYW4gdW5kZXJzY29yZSBwcmVmaXgiLAogICAgZGVzYzogIkNoZWNrcyBmb3IgdGhlIHVuZGVyc2NvcmUgcHJvcGVydHkgaGFjayAodGFyZ2V0cyBJRTYpIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpczsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInByb3BlcnR5IiwgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBldmVudC5wcm9wZXJ0eTsKCiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5oYWNrID09PSAiXyIpIHsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydCgiUHJvcGVydHkgd2l0aCB1bmRlcnNjb3JlIHByZWZpeCBmb3VuZC4iLCBldmVudC5wcm9wZXJ0eS5saW5lLCBldmVudC5wcm9wZXJ0eS5jb2wsIHJ1bGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAidW5pcXVlLWhlYWRpbmdzIiwKICAgIG5hbWU6ICJIZWFkaW5ncyBzaG91bGQgb25seSBiZSBkZWZpbmVkIG9uY2UiLAogICAgZGVzYzogIkhlYWRpbmdzIHNob3VsZCBiZSBkZWZpbmVkIG9ubHkgb25jZS4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICB2YXIgaGVhZGluZ3MgPSB7CiAgICAgICAgICAgICAgICBoMTogMCwKICAgICAgICAgICAgICAgIGgyOiAwLAogICAgICAgICAgICAgICAgaDM6IDAsCiAgICAgICAgICAgICAgICBoNDogMCwKICAgICAgICAgICAgICAgIGg1OiAwLAogICAgICAgICAgICAgICAgaDY6IDAKICAgICAgICAgICAgfTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBmdW5jdGlvbihldmVudCl7CiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBldmVudC5zZWxlY3RvcnMsCiAgICAgICAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgICAgICAgIHBhcnQsCiAgICAgICAgICAgICAgICBwc2V1ZG8sCiAgICAgICAgICAgICAgICBpLCBqOwoKICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBzZWxlY3RvcnMubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnNbaV07CiAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZWN0b3IucGFydHNbc2VsZWN0b3IucGFydHMubGVuZ3RoLTFdOwoKICAgICAgICAgICAgICAgIGlmIChwYXJ0LmVsZW1lbnROYW1lICYmIC8oaFsxLTZdKS9pLnRlc3QocGFydC5lbGVtZW50TmFtZS50b1N0cmluZygpKSl7CgogICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqIDwgcGFydC5tb2RpZmllcnMubGVuZ3RoOyBqKyspewogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydC5tb2RpZmllcnNbal0udHlwZSA9PT0gInBzZXVkbyIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoIXBzZXVkbyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRpbmdzW1JlZ0V4cC4kMV0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRpbmdzW1JlZ0V4cC4kMV0gPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIkhlYWRpbmcgKCIgKyBwYXJ0LmVsZW1lbnROYW1lICsgIikgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiIsIHBhcnQubGluZSwgcGFydC5jb2wsIHJ1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigiZW5kc3R5bGVzaGVldCIsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciBwcm9wLAogICAgICAgICAgICAgICAgbWVzc2FnZXMgPSBbXTsKCiAgICAgICAgICAgIGZvciAocHJvcCBpbiBoZWFkaW5ncyl7CiAgICAgICAgICAgICAgICBpZiAoaGVhZGluZ3MuaGFzT3duUHJvcGVydHkocHJvcCkpewogICAgICAgICAgICAgICAgICAgIGlmIChoZWFkaW5nc1twcm9wXSA+IDEpewogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKGhlYWRpbmdzW3Byb3BdICsgIiAiICsgcHJvcCArICJzIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoKXsKICAgICAgICAgICAgICAgIHJlcG9ydGVyLnJvbGx1cFdhcm4oIllvdSBoYXZlICIgKyBtZXNzYWdlcy5qb2luKCIsICIpICsgIiBkZWZpbmVkIGluIHRoaXMgc3R5bGVzaGVldC4iLCBydWxlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKfSk7CgpDU1NMaW50LmFkZFJ1bGUoewogICAgaWQ6ICJ1bml2ZXJzYWwtc2VsZWN0b3IiLAogICAgbmFtZTogIkRpc2FsbG93IHVuaXZlcnNhbCBzZWxlY3RvciIsCiAgICBkZXNjOiAiVGhlIHVuaXZlcnNhbCBzZWxlY3RvciAoKikgaXMga25vd24gdG8gYmUgc2xvdy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIHNlbGVjdG9ycyA9IGV2ZW50LnNlbGVjdG9ycywKICAgICAgICAgICAgICAgIHNlbGVjdG9yLAogICAgICAgICAgICAgICAgcGFydCwKICAgICAgICAgICAgICAgIGk7CgogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKCiAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZWN0b3IucGFydHNbc2VsZWN0b3IucGFydHMubGVuZ3RoLTFdOwogICAgICAgICAgICAgICAgaWYgKHBhcnQuZWxlbWVudE5hbWUgPT09ICIqIil7CiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KHJ1bGUuZGVzYywgcGFydC5saW5lLCBwYXJ0LmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAidW5xdWFsaWZpZWQtYXR0cmlidXRlcyIsCiAgICBuYW1lOiAiRGlzYWxsb3cgdW5xdWFsaWZpZWQgYXR0cmlidXRlIHNlbGVjdG9ycyIsCiAgICBkZXNjOiAiVW5xdWFsaWZpZWQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUga25vd24gdG8gYmUgc2xvdy4iLAogICAgYnJvd3NlcnM6ICJBbGwiLAogICAgaW5pdDogZnVuY3Rpb24ocGFyc2VyLCByZXBvcnRlcil7CiAgICAgICAgdmFyIHJ1bGUgPSB0aGlzOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0cnVsZSIsIGZ1bmN0aW9uKGV2ZW50KXsKCiAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBldmVudC5zZWxlY3RvcnMsCiAgICAgICAgICAgICAgICBzZWxlY3RvciwKICAgICAgICAgICAgICAgIHBhcnQsCiAgICAgICAgICAgICAgICBtb2RpZmllciwKICAgICAgICAgICAgICAgIGksIGs7CgogICAgICAgICAgICBmb3IgKGk9MDsgaSA8IHNlbGVjdG9ycy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9yc1tpXTsKCiAgICAgICAgICAgICAgICBwYXJ0ID0gc2VsZWN0b3IucGFydHNbc2VsZWN0b3IucGFydHMubGVuZ3RoLTFdOwogICAgICAgICAgICAgICAgaWYgKHBhcnQudHlwZSA9PT0gcGFyc2VyLlNFTEVDVE9SX1BBUlRfVFlQRSl7CiAgICAgICAgICAgICAgICAgICAgZm9yIChrPTA7IGsgPCBwYXJ0Lm1vZGlmaWVycy5sZW5ndGg7IGsrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gcGFydC5tb2RpZmllcnNba107CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RpZmllci50eXBlID09PSAiYXR0cmlidXRlIiAmJiAoIXBhcnQuZWxlbWVudE5hbWUgfHwgcGFydC5lbGVtZW50TmFtZSA9PT0gIioiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQocnVsZS5kZXNjLCBwYXJ0LmxpbmUsIHBhcnQuY29sLCBydWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAidmVuZG9yLXByZWZpeCIsCiAgICBuYW1lOiAiUmVxdWlyZSBzdGFuZGFyZCBwcm9wZXJ0eSB3aXRoIHZlbmRvciBwcmVmaXgiLAogICAgZGVzYzogIldoZW4gdXNpbmcgYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHksIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRoZSBzdGFuZGFyZCBvbmUuIiwKICAgIGJyb3dzZXJzOiAiQWxsIiwKICAgIGluaXQ6IGZ1bmN0aW9uKHBhcnNlciwgcmVwb3J0ZXIpewogICAgICAgIHZhciBydWxlID0gdGhpcywKICAgICAgICAgICAgcHJvcGVydGllcywKICAgICAgICAgICAgbnVtLAogICAgICAgICAgICBwcm9wZXJ0aWVzVG9DaGVjayA9IHsKICAgICAgICAgICAgICAgICItd2Via2l0LWJvcmRlci1yYWRpdXMiOiAiYm9yZGVyLXJhZGl1cyIsCiAgICAgICAgICAgICAgICAiLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLAogICAgICAgICAgICAgICAgIi13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiOiAiYm9yZGVyLXRvcC1yaWdodC1yYWRpdXMiLAogICAgICAgICAgICAgICAgIi13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyI6ICJib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIiwKICAgICAgICAgICAgICAgICItd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwKCiAgICAgICAgICAgICAgICAiLW8tYm9yZGVyLXJhZGl1cyI6ICJib3JkZXItcmFkaXVzIiwKICAgICAgICAgICAgICAgICItby1ib3JkZXItdG9wLWxlZnQtcmFkaXVzIjogImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLAogICAgICAgICAgICAgICAgIi1vLWJvcmRlci10b3AtcmlnaHQtcmFkaXVzIjogImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwKICAgICAgICAgICAgICAgICItby1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzIjogImJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXMiLAogICAgICAgICAgICAgICAgIi1vLWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIjogImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwKCiAgICAgICAgICAgICAgICAiLW1vei1ib3JkZXItcmFkaXVzIjogImJvcmRlci1yYWRpdXMiLAogICAgICAgICAgICAgICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0IjogImJvcmRlci10b3AtbGVmdC1yYWRpdXMiLAogICAgICAgICAgICAgICAgIi1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodCI6ICJib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyIsCiAgICAgICAgICAgICAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQiOiAiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsCiAgICAgICAgICAgICAgICAiLW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0IjogImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwKCiAgICAgICAgICAgICAgICAiLW1vei1jb2x1bW4tY291bnQiOiAiY29sdW1uLWNvdW50IiwKICAgICAgICAgICAgICAgICItd2Via2l0LWNvbHVtbi1jb3VudCI6ICJjb2x1bW4tY291bnQiLAoKICAgICAgICAgICAgICAgICItbW96LWNvbHVtbi1nYXAiOiAiY29sdW1uLWdhcCIsCiAgICAgICAgICAgICAgICAiLXdlYmtpdC1jb2x1bW4tZ2FwIjogImNvbHVtbi1nYXAiLAoKICAgICAgICAgICAgICAgICItbW96LWNvbHVtbi1ydWxlIjogImNvbHVtbi1ydWxlIiwKICAgICAgICAgICAgICAgICItd2Via2l0LWNvbHVtbi1ydWxlIjogImNvbHVtbi1ydWxlIiwKCiAgICAgICAgICAgICAgICAiLW1vei1jb2x1bW4tcnVsZS1zdHlsZSI6ICJjb2x1bW4tcnVsZS1zdHlsZSIsCiAgICAgICAgICAgICAgICAiLXdlYmtpdC1jb2x1bW4tcnVsZS1zdHlsZSI6ICJjb2x1bW4tcnVsZS1zdHlsZSIsCgogICAgICAgICAgICAgICAgIi1tb3otY29sdW1uLXJ1bGUtY29sb3IiOiAiY29sdW1uLXJ1bGUtY29sb3IiLAogICAgICAgICAgICAgICAgIi13ZWJraXQtY29sdW1uLXJ1bGUtY29sb3IiOiAiY29sdW1uLXJ1bGUtY29sb3IiLAoKICAgICAgICAgICAgICAgICItbW96LWNvbHVtbi1ydWxlLXdpZHRoIjogImNvbHVtbi1ydWxlLXdpZHRoIiwKICAgICAgICAgICAgICAgICItd2Via2l0LWNvbHVtbi1ydWxlLXdpZHRoIjogImNvbHVtbi1ydWxlLXdpZHRoIiwKCiAgICAgICAgICAgICAgICAiLW1vei1jb2x1bW4td2lkdGgiOiAiY29sdW1uLXdpZHRoIiwKICAgICAgICAgICAgICAgICItd2Via2l0LWNvbHVtbi13aWR0aCI6ICJjb2x1bW4td2lkdGgiLAoKICAgICAgICAgICAgICAgICItd2Via2l0LWNvbHVtbi1zcGFuIjogImNvbHVtbi1zcGFuIiwKICAgICAgICAgICAgICAgICItd2Via2l0LWNvbHVtbnMiOiAiY29sdW1ucyIsCgogICAgICAgICAgICAgICAgIi1tb3otYm94LXNoYWRvdyI6ICJib3gtc2hhZG93IiwKICAgICAgICAgICAgICAgICItd2Via2l0LWJveC1zaGFkb3ciOiAiYm94LXNoYWRvdyIsCgogICAgICAgICAgICAgICAgIi1tb3otdHJhbnNmb3JtIiA6ICJ0cmFuc2Zvcm0iLAogICAgICAgICAgICAgICAgIi13ZWJraXQtdHJhbnNmb3JtIiA6ICJ0cmFuc2Zvcm0iLAogICAgICAgICAgICAgICAgIi1vLXRyYW5zZm9ybSIgOiAidHJhbnNmb3JtIiwKICAgICAgICAgICAgICAgICItbXMtdHJhbnNmb3JtIiA6ICJ0cmFuc2Zvcm0iLAoKICAgICAgICAgICAgICAgICItbW96LXRyYW5zZm9ybS1vcmlnaW4iIDogInRyYW5zZm9ybS1vcmlnaW4iLAogICAgICAgICAgICAgICAgIi13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbiIgOiAidHJhbnNmb3JtLW9yaWdpbiIsCiAgICAgICAgICAgICAgICAiLW8tdHJhbnNmb3JtLW9yaWdpbiIgOiAidHJhbnNmb3JtLW9yaWdpbiIsCiAgICAgICAgICAgICAgICAiLW1zLXRyYW5zZm9ybS1vcmlnaW4iIDogInRyYW5zZm9ybS1vcmlnaW4iLAoKICAgICAgICAgICAgICAgICItbW96LWJveC1zaXppbmciIDogImJveC1zaXppbmciLAogICAgICAgICAgICAgICAgIi13ZWJraXQtYm94LXNpemluZyIgOiAiYm94LXNpemluZyIKICAgICAgICAgICAgfTsKICAgICAgICBmdW5jdGlvbiBzdGFydFJ1bGUoKXsKICAgICAgICAgICAgcHJvcGVydGllcyA9IHt9OwogICAgICAgICAgICBudW0gPSAxOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBlbmRSdWxlKCl7CiAgICAgICAgICAgIHZhciBwcm9wLAogICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgIG5lZWRlZCwKICAgICAgICAgICAgICAgIGFjdHVhbCwKICAgICAgICAgICAgICAgIG5lZWRzU3RhbmRhcmQgPSBbXTsKCiAgICAgICAgICAgIGZvciAocHJvcCBpbiBwcm9wZXJ0aWVzKXsKICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzVG9DaGVja1twcm9wXSl7CiAgICAgICAgICAgICAgICAgICAgbmVlZHNTdGFuZGFyZC5wdXNoKHsgYWN0dWFsOiBwcm9wLCBuZWVkZWQ6IHByb3BlcnRpZXNUb0NoZWNrW3Byb3BdfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaT0wLCBsZW49bmVlZHNTdGFuZGFyZC5sZW5ndGg7IGkgPCBsZW47IGkrKyl7CiAgICAgICAgICAgICAgICBuZWVkZWQgPSBuZWVkc1N0YW5kYXJkW2ldLm5lZWRlZDsKICAgICAgICAgICAgICAgIGFjdHVhbCA9IG5lZWRzU3RhbmRhcmRbaV0uYWN0dWFsOwoKICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllc1tuZWVkZWRdKXsKICAgICAgICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnQoIk1pc3Npbmcgc3RhbmRhcmQgcHJvcGVydHkgJyIgKyBuZWVkZWQgKyAiJyB0byBnbyBhbG9uZyB3aXRoICciICsgYWN0dWFsICsgIicuIiwgcHJvcGVydGllc1thY3R1YWxdWzBdLm5hbWUubGluZSwgcHJvcGVydGllc1thY3R1YWxdWzBdLm5hbWUuY29sLCBydWxlKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbbmVlZGVkXVswXS5wb3MgPCBwcm9wZXJ0aWVzW2FjdHVhbF1bMF0ucG9zKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJTdGFuZGFyZCBwcm9wZXJ0eSAnIiArIG5lZWRlZCArICInIHNob3VsZCBjb21lIGFmdGVyIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSAnIiArIGFjdHVhbCArICInLiIsIHByb3BlcnRpZXNbYWN0dWFsXVswXS5uYW1lLmxpbmUsIHByb3BlcnRpZXNbYWN0dWFsXVswXS5uYW1lLmNvbCwgcnVsZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHJ1bGUiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRmb250ZmFjZSIsIHN0YXJ0UnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJzdGFydHBhZ2UiLCBzdGFydFJ1bGUpOwogICAgICAgIHBhcnNlci5hZGRMaXN0ZW5lcigic3RhcnRwYWdlbWFyZ2luIiwgc3RhcnRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoInN0YXJ0a2V5ZnJhbWVydWxlIiwgc3RhcnRSdWxlKTsKCiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIG5hbWUgPSBldmVudC5wcm9wZXJ0eS50ZXh0LnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICBpZiAoIXByb3BlcnRpZXNbbmFtZV0pewogICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IFtdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcm9wZXJ0aWVzW25hbWVdLnB1c2goeyBuYW1lOiBldmVudC5wcm9wZXJ0eSwgdmFsdWUgOiBldmVudC52YWx1ZSwgcG9zOm51bSsrIH0pOwogICAgICAgIH0pOwoKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZHJ1bGUiLCBlbmRSdWxlKTsKICAgICAgICBwYXJzZXIuYWRkTGlzdGVuZXIoImVuZGZvbnRmYWNlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRwYWdlbWFyZ2luIiwgZW5kUnVsZSk7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJlbmRrZXlmcmFtZXJ1bGUiLCBlbmRSdWxlKTsKICAgIH0KCn0pOwoKQ1NTTGludC5hZGRSdWxlKHsKICAgIGlkOiAiemVyby11bml0cyIsCiAgICBuYW1lOiAiRGlzYWxsb3cgdW5pdHMgZm9yIDAgdmFsdWVzIiwKICAgIGRlc2M6ICJZb3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IHVuaXRzIHdoZW4gYSB2YWx1ZSBpcyAwLiIsCiAgICBicm93c2VyczogIkFsbCIsCiAgICBpbml0OiBmdW5jdGlvbihwYXJzZXIsIHJlcG9ydGVyKXsKICAgICAgICB2YXIgcnVsZSA9IHRoaXM7CiAgICAgICAgcGFyc2VyLmFkZExpc3RlbmVyKCJwcm9wZXJ0eSIsIGZ1bmN0aW9uKGV2ZW50KXsKICAgICAgICAgICAgdmFyIHBhcnRzID0gZXZlbnQudmFsdWUucGFydHMsCiAgICAgICAgICAgICAgICBpID0gMCwKICAgICAgICAgICAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aDsKCiAgICAgICAgICAgIHdoaWxlKGkgPCBsZW4pewogICAgICAgICAgICAgICAgaWYgKChwYXJ0c1tpXS51bml0cyB8fCBwYXJ0c1tpXS50eXBlID09PSAicGVyY2VudGFnZSIpICYmIHBhcnRzW2ldLnZhbHVlID09PSAwICYmIHBhcnRzW2ldLnR5cGUgIT09ICJ0aW1lIil7CiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0KCJWYWx1ZXMgb2YgMCBzaG91bGRuJ3QgaGF2ZSB1bml0cyBzcGVjaWZpZWQuIiwgcGFydHNbaV0ubGluZSwgcGFydHNbaV0uY29sLCBydWxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgfQoKICAgICAgICB9KTsKCiAgICB9Cgp9KTsKCihmdW5jdGlvbigpIHsKICAgIHZhciB4bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICBpZiAoIXN0ciB8fCBzdHIuY29uc3RydWN0b3IgIT09IFN0cmluZykgewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1tcIiY+PF0vZywgZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgICAgICAgc3dpdGNoIChtYXRjaCkgewogICAgICAgICAgICAgICAgY2FzZSAiXCIiOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAiJnF1b3Q7IjsKICAgICAgICAgICAgICAgIGNhc2UgIiYiOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAiJmFtcDsiOwogICAgICAgICAgICAgICAgY2FzZSAiPCI6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICImbHQ7IjsKICAgICAgICAgICAgICAgIGNhc2UgIj4iOgogICAgICAgICAgICAgICAgICAgIHJldHVybiAiJmd0OyI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CgogICAgQ1NTTGludC5hZGRGb3JtYXR0ZXIoewogICAgICAgIGlkOiAiY2hlY2tzdHlsZS14bWwiLAogICAgICAgIG5hbWU6ICJDaGVja3N0eWxlIFhNTCBmb3JtYXQiLAogICAgICAgIHN0YXJ0Rm9ybWF0OiBmdW5jdGlvbigpewogICAgICAgICAgICByZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCI/PjxjaGVja3N0eWxlPiI7CiAgICAgICAgfSwKICAgICAgICBlbmRGb3JtYXQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHJldHVybiAiPC9jaGVja3N0eWxlPiI7CiAgICAgICAgfSwKICAgICAgICByZWFkRXJyb3I6IGZ1bmN0aW9uKGZpbGVuYW1lLCBtZXNzYWdlKSB7CiAgICAgICAgICAgIHJldHVybiAiPGZpbGUgbmFtZT1cIiIgKyB4bWxFc2NhcGUoZmlsZW5hbWUpICsgIlwiPjxlcnJvciBsaW5lPVwiMFwiIGNvbHVtbj1cIjBcIiBzZXZlcnR5PVwiZXJyb3JcIiBtZXNzYWdlPVwiIiArIHhtbEVzY2FwZShtZXNzYWdlKSArICJcIj48L2Vycm9yPjwvZmlsZT4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0UmVzdWx0czogZnVuY3Rpb24ocmVzdWx0cywgZmlsZW5hbWUvKiwgb3B0aW9ucyovKSB7CiAgICAgICAgICAgIHZhciBtZXNzYWdlcyA9IHJlc3VsdHMubWVzc2FnZXMsCiAgICAgICAgICAgICAgICBvdXRwdXQgPSBbXTsKICAgICAgICAgICAgdmFyIGdlbmVyYXRlU291cmNlID0gZnVuY3Rpb24ocnVsZSkgewogICAgICAgICAgICAgICAgaWYgKCFydWxlIHx8ICEoIm5hbWUiIGluIHJ1bGUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICJuZXQuY3NzbGludC4iICsgcnVsZS5uYW1lLnJlcGxhY2UoL1xzL2csIiIpOwogICAgICAgICAgICB9OwoKCgogICAgICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIjxmaWxlIG5hbWU9XCIiK2ZpbGVuYW1lKyJcIj4iKTsKICAgICAgICAgICAgICAgIENTU0xpbnQuVXRpbC5mb3JFYWNoKG1lc3NhZ2VzLCBmdW5jdGlvbiAobWVzc2FnZSkgewogICAgICAgICAgICAgICAgICAgIGlmICghbWVzc2FnZS5yb2xsdXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIjxlcnJvciBsaW5lPVwiIiArIG1lc3NhZ2UubGluZSArICJcIiBjb2x1bW49XCIiICsgbWVzc2FnZS5jb2wgKyAiXCIgc2V2ZXJpdHk9XCIiICsgbWVzc2FnZS50eXBlICsgIlwiIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtZXNzYWdlPVwiIiArIHhtbEVzY2FwZShtZXNzYWdlLm1lc3NhZ2UpICsgIlwiIHNvdXJjZT1cIiIgKyBnZW5lcmF0ZVNvdXJjZShtZXNzYWdlLnJ1bGUpICsiXCIvPiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIjwvZmlsZT4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5qb2luKCIiKTsKICAgICAgICB9CiAgICB9KTsKCn0oKSk7CgpDU1NMaW50LmFkZEZvcm1hdHRlcih7CiAgICBpZDogImNvbXBhY3QiLAogICAgbmFtZTogIkNvbXBhY3QsICdwb3JjZWxhaW4nIGZvcm1hdCIsCiAgICBzdGFydEZvcm1hdDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfSwKICAgIGVuZEZvcm1hdDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfSwKICAgIGZvcm1hdFJlc3VsdHM6IGZ1bmN0aW9uKHJlc3VsdHMsIGZpbGVuYW1lLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIG1lc3NhZ2VzID0gcmVzdWx0cy5tZXNzYWdlcywKICAgICAgICAgICAgb3V0cHV0ID0gIiI7CiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgICAgICAgdmFyIGNhcGl0YWxpemUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKTsKICAgICAgICB9OwoKICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucXVpZXQgPyAiIiA6IGZpbGVuYW1lICsgIjogTGludCBGcmVlISI7CiAgICAgICAgfQoKICAgICAgICBDU1NMaW50LlV0aWwuZm9yRWFjaChtZXNzYWdlcywgZnVuY3Rpb24obWVzc2FnZSkgewogICAgICAgICAgICBpZiAobWVzc2FnZS5yb2xsdXApIHsKICAgICAgICAgICAgICAgIG91dHB1dCArPSBmaWxlbmFtZSArICI6ICIgKyBjYXBpdGFsaXplKG1lc3NhZ2UudHlwZSkgKyAiIC0gIiArIG1lc3NhZ2UubWVzc2FnZSArICJcbiI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gZmlsZW5hbWUgKyAiOiAiICsgImxpbmUgIiArIG1lc3NhZ2UubGluZSArCiAgICAgICAgICAgICAgICAgICAgIiwgY29sICIgKyBtZXNzYWdlLmNvbCArICIsICIgKyBjYXBpdGFsaXplKG1lc3NhZ2UudHlwZSkgKyAiIC0gIiArIG1lc3NhZ2UubWVzc2FnZSArICIgKCIgKyBtZXNzYWdlLnJ1bGUuaWQgKyAiKVxuIjsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gb3V0cHV0OwogICAgfQp9KTsKCkNTU0xpbnQuYWRkRm9ybWF0dGVyKHsKICAgIGlkOiAiY3NzbGludC14bWwiLAogICAgbmFtZTogIkNTU0xpbnQgWE1MIGZvcm1hdCIsCiAgICBzdGFydEZvcm1hdDogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCI/Pjxjc3NsaW50PiI7CiAgICB9LAogICAgZW5kRm9ybWF0OiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiAiPC9jc3NsaW50PiI7CiAgICB9LAogICAgZm9ybWF0UmVzdWx0czogZnVuY3Rpb24ocmVzdWx0cywgZmlsZW5hbWUvKiwgb3B0aW9ucyovKSB7CiAgICAgICAgdmFyIG1lc3NhZ2VzID0gcmVzdWx0cy5tZXNzYWdlcywKICAgICAgICAgICAgb3V0cHV0ID0gW107CiAgICAgICAgdmFyIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgICAgIGlmICghc3RyIHx8IHN0ci5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cIi9nLCAiJyIpLnJlcGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpLnJlcGxhY2UoLz4vZywgIiZndDsiKTsKICAgICAgICB9OwoKICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBvdXRwdXQucHVzaCgiPGZpbGUgbmFtZT1cIiIrZmlsZW5hbWUrIlwiPiIpOwogICAgICAgICAgICBDU1NMaW50LlV0aWwuZm9yRWFjaChtZXNzYWdlcywgZnVuY3Rpb24gKG1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLnJvbGx1cCkgewogICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCI8aXNzdWUgc2V2ZXJpdHk9XCIiICsgbWVzc2FnZS50eXBlICsgIlwiIHJlYXNvbj1cIiIgKyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLm1lc3NhZ2UpICsgIlwiIGV2aWRlbmNlPVwiIiArIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UuZXZpZGVuY2UpICsgIlwiLz4iKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIjxpc3N1ZSBsaW5lPVwiIiArIG1lc3NhZ2UubGluZSArICJcIiBjaGFyPVwiIiArIG1lc3NhZ2UuY29sICsgIlwiIHNldmVyaXR5PVwiIiArIG1lc3NhZ2UudHlwZSArICJcIiIgKwogICAgICAgICAgICAgICAgICAgICAgICAiIHJlYXNvbj1cIiIgKyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLm1lc3NhZ2UpICsgIlwiIGV2aWRlbmNlPVwiIiArIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UuZXZpZGVuY2UpICsgIlwiLz4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKCI8L2ZpbGU+Iik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oIiIpOwogICAgfQp9KTsKCkNTU0xpbnQuYWRkRm9ybWF0dGVyKHsKICAgIGlkOiAianVuaXQteG1sIiwKICAgIG5hbWU6ICJKVU5JVCBYTUwgZm9ybWF0IiwKICAgIHN0YXJ0Rm9ybWF0OiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+PHRlc3RzdWl0ZXM+IjsKICAgIH0sCiAgICBlbmRGb3JtYXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAiPC90ZXN0c3VpdGVzPiI7CiAgICB9LAogICAgZm9ybWF0UmVzdWx0czogZnVuY3Rpb24ocmVzdWx0cywgZmlsZW5hbWUvKiwgb3B0aW9ucyovKSB7CgogICAgICAgIHZhciBtZXNzYWdlcyA9IHJlc3VsdHMubWVzc2FnZXMsCiAgICAgICAgICAgIG91dHB1dCA9IFtdLAogICAgICAgICAgICB0ZXN0cyA9IHsKICAgICAgICAgICAgICAgICJlcnJvciI6IDAsCiAgICAgICAgICAgICAgICAiZmFpbHVyZSI6IDAKICAgICAgICAgICAgfTsKICAgICAgICB2YXIgZ2VuZXJhdGVTb3VyY2UgPSBmdW5jdGlvbihydWxlKSB7CiAgICAgICAgICAgIGlmICghcnVsZSB8fCAhKCJuYW1lIiBpbiBydWxlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAibmV0LmNzc2xpbnQuIiArIHJ1bGUubmFtZS5yZXBsYWNlKC9ccy9nLCIiKTsKICAgICAgICB9OwogICAgICAgIHZhciBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHN0cikgewoKICAgICAgICAgICAgaWYgKCFzdHIgfHwgc3RyLmNvbnN0cnVjdG9yICE9PSBTdHJpbmcpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cIi9nLCAiJyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKS5yZXBsYWNlKC8+L2csICImZ3Q7Iik7CgogICAgICAgIH07CgogICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7CgogICAgICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChtZXNzYWdlKSB7CiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG1lc3NhZ2UudHlwZSA9PT0gIndhcm5pbmciID8gImVycm9yIiA6IG1lc3NhZ2UudHlwZTsKICAgICAgICAgICAgICAgIGlmICghbWVzc2FnZS5yb2xsdXApIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgiPHRlc3RjYXNlIHRpbWU9XCIwXCIgbmFtZT1cIiIgKyBnZW5lcmF0ZVNvdXJjZShtZXNzYWdlLnJ1bGUpICsgIlwiPiIpOwogICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKCI8IiArIHR5cGUgKyAiIG1lc3NhZ2U9XCIiICsgZXNjYXBlU3BlY2lhbENoYXJhY3RlcnMobWVzc2FnZS5tZXNzYWdlKSArICJcIj48IVtDREFUQVsiICsgbWVzc2FnZS5saW5lICsgIjoiICsgbWVzc2FnZS5jb2wgKyAiOiIgKyBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyhtZXNzYWdlLmV2aWRlbmNlKSAgKyAiXV0+PC8iICsgdHlwZSArICI+Iik7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIjwvdGVzdGNhc2U+Iik7CgogICAgICAgICAgICAgICAgICAgIHRlc3RzW3R5cGVdICs9IDE7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBvdXRwdXQudW5zaGlmdCgiPHRlc3RzdWl0ZSB0aW1lPVwiMFwiIHRlc3RzPVwiIiArIG1lc3NhZ2VzLmxlbmd0aCArICJcIiBza2lwcGVkPVwiMFwiIGVycm9ycz1cIiIgKyB0ZXN0cy5lcnJvciArICJcIiBmYWlsdXJlcz1cIiIgKyB0ZXN0cy5mYWlsdXJlICsgIlwiIHBhY2thZ2U9XCJuZXQuY3NzbGludFwiIG5hbWU9XCIiICsgZmlsZW5hbWUgKyAiXCI+Iik7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKCI8L3Rlc3RzdWl0ZT4iKTsKCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oIiIpOwoKICAgIH0KfSk7CgpDU1NMaW50LmFkZEZvcm1hdHRlcih7CiAgICBpZDogImxpbnQteG1sIiwKICAgIG5hbWU6ICJMaW50IFhNTCBmb3JtYXQiLAogICAgc3RhcnRGb3JtYXQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiPz48bGludD4iOwogICAgfSwKICAgIGVuZEZvcm1hdDogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gIjwvbGludD4iOwogICAgfSwKICAgIGZvcm1hdFJlc3VsdHM6IGZ1bmN0aW9uKHJlc3VsdHMsIGZpbGVuYW1lLyosIG9wdGlvbnMqLykgewogICAgICAgIHZhciBtZXNzYWdlcyA9IHJlc3VsdHMubWVzc2FnZXMsCiAgICAgICAgICAgIG91dHB1dCA9IFtdOwogICAgICAgIHZhciBlc2NhcGVTcGVjaWFsQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgICAgICBpZiAoIXN0ciB8fCBzdHIuY29uc3RydWN0b3IgIT09IFN0cmluZykgewogICAgICAgICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvXCIvZywgIiciKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKS5yZXBsYWNlKC8+L2csICImZ3Q7Iik7CiAgICAgICAgfTsKCiAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDApIHsKCiAgICAgICAgICAgIG91dHB1dC5wdXNoKCI8ZmlsZSBuYW1lPVwiIitmaWxlbmFtZSsiXCI+Iik7CiAgICAgICAgICAgIENTU0xpbnQuVXRpbC5mb3JFYWNoKG1lc3NhZ2VzLCBmdW5jdGlvbiAobWVzc2FnZSkgewogICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uucm9sbHVwKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goIjxpc3N1ZSBzZXZlcml0eT1cIiIgKyBtZXNzYWdlLnR5cGUgKyAiXCIgcmVhc29uPVwiIiArIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UubWVzc2FnZSkgKyAiXCIgZXZpZGVuY2U9XCIiICsgZXNjYXBlU3BlY2lhbENoYXJhY3RlcnMobWVzc2FnZS5ldmlkZW5jZSkgKyAiXCIvPiIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHVzaCgiPGlzc3VlIGxpbmU9XCIiICsgbWVzc2FnZS5saW5lICsgIlwiIGNoYXI9XCIiICsgbWVzc2FnZS5jb2wgKyAiXCIgc2V2ZXJpdHk9XCIiICsgbWVzc2FnZS50eXBlICsgIlwiIiArCiAgICAgICAgICAgICAgICAgICAgICAgICIgcmVhc29uPVwiIiArIGVzY2FwZVNwZWNpYWxDaGFyYWN0ZXJzKG1lc3NhZ2UubWVzc2FnZSkgKyAiXCIgZXZpZGVuY2U9XCIiICsgZXNjYXBlU3BlY2lhbENoYXJhY3RlcnMobWVzc2FnZS5ldmlkZW5jZSkgKyAiXCIvPiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgb3V0cHV0LnB1c2goIjwvZmlsZT4iKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBvdXRwdXQuam9pbigiIik7CiAgICB9Cn0pOwoKQ1NTTGludC5hZGRGb3JtYXR0ZXIoewogICAgaWQ6ICJ0ZXh0IiwKICAgIG5hbWU6ICJQbGFpbiBUZXh0IiwKICAgIHN0YXJ0Rm9ybWF0OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gIiI7CiAgICB9LAogICAgZW5kRm9ybWF0OiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gIiI7CiAgICB9LAogICAgZm9ybWF0UmVzdWx0czogZnVuY3Rpb24ocmVzdWx0cywgZmlsZW5hbWUsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgbWVzc2FnZXMgPSByZXN1bHRzLm1lc3NhZ2VzLAogICAgICAgICAgICBvdXRwdXQgPSAiIjsKICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5xdWlldCA/ICIiIDogIlxuXG5jc3NsaW50OiBObyBlcnJvcnMgaW4gIiArIGZpbGVuYW1lICsgIi4iOwogICAgICAgIH0KCiAgICAgICAgb3V0cHV0ID0gIlxuXG5jc3NsaW50OiBUaGVyZSAiOwogICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgICAgb3V0cHV0ICs9ICJpcyAxIHByb2JsZW0iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG91dHB1dCArPSAiYXJlICIgKyBtZXNzYWdlcy5sZW5ndGggICsgICIgcHJvYmxlbXMiOwogICAgICAgIH0KICAgICAgICBvdXRwdXQgKz0gIiBpbiAiICsgZmlsZW5hbWUgKyAiLiI7CgogICAgICAgIHZhciBwb3MgPSBmaWxlbmFtZS5sYXN0SW5kZXhPZigiLyIpLAogICAgICAgICAgICBzaG9ydEZpbGVuYW1lID0gZmlsZW5hbWU7CgogICAgICAgIGlmIChwb3MgPT09IC0xKXsKICAgICAgICAgICAgcG9zID0gZmlsZW5hbWUubGFzdEluZGV4T2YoIlxcIik7CiAgICAgICAgfQogICAgICAgIGlmIChwb3MgPiAtMSl7CiAgICAgICAgICAgIHNob3J0RmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcocG9zKzEpOwogICAgICAgIH0KCiAgICAgICAgQ1NTTGludC5VdGlsLmZvckVhY2gobWVzc2FnZXMsIGZ1bmN0aW9uIChtZXNzYWdlLCBpKSB7CiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dCArICJcblxuIiArIHNob3J0RmlsZW5hbWU7CiAgICAgICAgICAgIGlmIChtZXNzYWdlLnJvbGx1cCkgewogICAgICAgICAgICAgICAgb3V0cHV0ICs9ICJcbiIgKyAoaSsxKSArICI6ICIgKyBtZXNzYWdlLnR5cGU7CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gIlxuIiArIG1lc3NhZ2UubWVzc2FnZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG91dHB1dCArPSAiXG4iICsgKGkrMSkgKyAiOiAiICsgbWVzc2FnZS50eXBlICsgIiBhdCBsaW5lICIgKyBtZXNzYWdlLmxpbmUgKyAiLCBjb2wgIiArIG1lc3NhZ2UuY29sOwogICAgICAgICAgICAgICAgb3V0cHV0ICs9ICJcbiIgKyBtZXNzYWdlLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gIlxuIiArIG1lc3NhZ2UuZXZpZGVuY2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIG91dHB1dDsKICAgIH0KfSk7Cgptb2R1bGUuZXhwb3J0cy5DU1NMaW50ID0gQ1NTTGludDsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9jc3Nfd29ya2VyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7CnZhciBDU1NMaW50ID0gcmVxdWlyZSgiLi9jc3MvY3NzbGludCIpLkNTU0xpbnQ7Cgp2YXIgV29ya2VyID0gZXhwb3J0cy5Xb3JrZXIgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIE1pcnJvci5jYWxsKHRoaXMsIHNlbmRlcik7CiAgICB0aGlzLnNldFRpbWVvdXQoNDAwKTsKICAgIHRoaXMucnVsZXNldCA9IG51bGw7CiAgICB0aGlzLnNldERpc2FibGVkUnVsZXMoImlkc3xvcmRlci1hbHBoYWJldGljYWwiKTsKICAgIHRoaXMuc2V0SW5mb1J1bGVzKAogICAgICAiYWRqb2luaW5nLWNsYXNzZXN8cXVhbGlmaWVkLWhlYWRpbmdzfHplcm8tdW5pdHN8Z3JhZGllbnRzfCIgKwogICAgICAiaW1wb3J0fG91dGxpbmUtbm9uZXx2ZW5kb3ItcHJlZml4IgogICAgKTsKfTsKCm9vcC5pbmhlcml0cyhXb3JrZXIsIE1pcnJvcik7CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLnNldEluZm9SdWxlcyA9IGZ1bmN0aW9uKHJ1bGVOYW1lcykgewogICAgICAgIGlmICh0eXBlb2YgcnVsZU5hbWVzID09ICJzdHJpbmciKQogICAgICAgICAgICBydWxlTmFtZXMgPSBydWxlTmFtZXMuc3BsaXQoInwiKTsKICAgICAgICB0aGlzLmluZm9SdWxlcyA9IGxhbmcuYXJyYXlUb01hcChydWxlTmFtZXMpOwogICAgICAgIHRoaXMuZG9jLmdldFZhbHVlKCkgJiYgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSgxMDApOwogICAgfTsKCiAgICB0aGlzLnNldERpc2FibGVkUnVsZXMgPSBmdW5jdGlvbihydWxlTmFtZXMpIHsKICAgICAgICBpZiAoIXJ1bGVOYW1lcykgewogICAgICAgICAgICB0aGlzLnJ1bGVzZXQgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcnVsZU5hbWVzID09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgcnVsZU5hbWVzID0gcnVsZU5hbWVzLnNwbGl0KCJ8Iik7CiAgICAgICAgICAgIHZhciBhbGwgPSB7fTsKCiAgICAgICAgICAgIENTU0xpbnQuZ2V0UnVsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKHgpewogICAgICAgICAgICAgICAgYWxsW3guaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJ1bGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHgpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxbeF07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5ydWxlc2V0ID0gYWxsOwogICAgICAgIH0KICAgICAgICB0aGlzLmRvYy5nZXRWYWx1ZSgpICYmIHRoaXMuZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUoMTAwKTsKICAgIH07CgogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZG9jLmdldFZhbHVlKCk7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZGVyLmVtaXQoImFubm90YXRlIiwgW10pOwogICAgICAgIHZhciBpbmZvUnVsZXMgPSB0aGlzLmluZm9SdWxlczsKCiAgICAgICAgdmFyIHJlc3VsdCA9IENTU0xpbnQudmVyaWZ5KHZhbHVlLCB0aGlzLnJ1bGVzZXQpOwogICAgICAgIHRoaXMuc2VuZGVyLmVtaXQoImFubm90YXRlIiwgcmVzdWx0Lm1lc3NhZ2VzLm1hcChmdW5jdGlvbihtc2cpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogbXNnLmxpbmUgLSAxLAogICAgICAgICAgICAgICAgY29sdW1uOiBtc2cuY29sIC0gMSwKICAgICAgICAgICAgICAgIHRleHQ6IG1zZy5tZXNzYWdlLAogICAgICAgICAgICAgICAgdHlwZTogaW5mb1J1bGVzW21zZy5ydWxlLmlkXSA/ICJpbmZvIiA6IG1zZy50eXBlLAogICAgICAgICAgICAgICAgcnVsZTogbXNnLnJ1bGUubmFtZQogICAgICAgICAgICB9OwogICAgICAgIH0pKTsKICAgIH07Cgp9KS5jYWxsKFdvcmtlci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9saWIvZXM1LXNoaW0iLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmZ1bmN0aW9uIEVtcHR5KCkge30KCmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMQogICAgICAgIHZhciB0YXJnZXQgPSB0aGlzOwogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiICsgdGFyZ2V0KTsKICAgICAgICB9CiAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGZvciBub3JtYWwgY2FsbAogICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsKCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgdGhhdCwKICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQoKICAgICAgICB9OwogICAgICAgIGlmKHRhcmdldC5wcm90b3R5cGUpIHsKICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTsKICAgICAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7CiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBib3VuZDsKICAgIH07Cn0KdmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKdmFyIHByb3RvdHlwZU9mQXJyYXkgPSBBcnJheS5wcm90b3R5cGU7CnZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7CnZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7CnZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpOwp2YXIgb3ducyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSk7CnZhciBkZWZpbmVHZXR0ZXI7CnZhciBkZWZpbmVTZXR0ZXI7CnZhciBsb29rdXBHZXR0ZXI7CnZhciBsb29rdXBTZXR0ZXI7CnZhciBzdXBwb3J0c0FjY2Vzc29yczsKaWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7CiAgICBkZWZpbmVHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7CiAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7CiAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7CiAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXyk7Cn0KaWYgKFsxLDJdLnNwbGljZSgwKS5sZW5ndGggIT0gMikgewogICAgaWYoZnVuY3Rpb24oKSB7IC8vIHRlc3QgSUUgPCA5IHRvIHNwbGljZSBidWcgLSBzZWUgaXNzdWUgIzEzOAogICAgICAgIGZ1bmN0aW9uIG1ha2VBcnJheShsKSB7CiAgICAgICAgICAgIHZhciBhID0gbmV3IEFycmF5KGwrMik7CiAgICAgICAgICAgIGFbMF0gPSBhWzFdID0gMDsKICAgICAgICAgICAgcmV0dXJuIGE7CiAgICAgICAgfQogICAgICAgIHZhciBhcnJheSA9IFtdLCBsZW5ndGhCZWZvcmU7CiAgICAgICAgCiAgICAgICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjApKTsKICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksIG1ha2VBcnJheSgyNikpOwoKICAgICAgICBsZW5ndGhCZWZvcmUgPSBhcnJheS5sZW5ndGg7IC8vNDYKICAgICAgICBhcnJheS5zcGxpY2UoNSwgMCwgIlhYWCIpOyAvLyBhZGQgb25lIGVsZW1lbnQKCiAgICAgICAgbGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgKCiAgICAgICAgaWYgKGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOy8vIGhhcyByaWdodCBzcGxpY2UgaW1wbGVtZW50YXRpb24gd2l0aG91dCBidWdzCiAgICAgICAgfQogICAgfSgpKSB7Ly9JRSA2LzcKICAgICAgICB2YXIgYXJyYXlfc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsKICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGRlbGV0ZUNvdW50KSB7CiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5X3NwbGljZS5hcHBseSh0aGlzLCBbCiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPT09IHZvaWQgMCA/IDAgOiBzdGFydCwKICAgICAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9PT0gdm9pZCAwID8gKHRoaXMubGVuZ3RoIC0gc3RhcnQpIDogZGVsZXRlQ291bnQKICAgICAgICAgICAgICAgIF0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSkpCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSBlbHNlIHsvL0lFOAogICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihwb3MsIHJlbW92ZUNvdW50KXsKICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgICBpZiAocG9zID4gMCkgewogICAgICAgICAgICAgICAgaWYgKHBvcyA+IGxlbmd0aCkKICAgICAgICAgICAgICAgICAgICBwb3MgPSBsZW5ndGg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zID09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgcG9zID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPCAwKSB7CiAgICAgICAgICAgICAgICBwb3MgPSBNYXRoLm1heChsZW5ndGggKyBwb3MsIDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIShwb3MrcmVtb3ZlQ291bnQgPCBsZW5ndGgpKQogICAgICAgICAgICAgICAgcmVtb3ZlQ291bnQgPSBsZW5ndGggLSBwb3M7CgogICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuc2xpY2UocG9zLCBwb3MrcmVtb3ZlQ291bnQpOwogICAgICAgICAgICB2YXIgaW5zZXJ0ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwogICAgICAgICAgICB2YXIgYWRkID0gaW5zZXJ0Lmxlbmd0aDsgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHBvcyA9PT0gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoYWRkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlID0gTWF0aC5taW4ocmVtb3ZlQ291bnQsIGxlbmd0aCAtIHBvcyk7CiAgICAgICAgICAgICAgICB2YXIgdGFpbE9sZFBvcyA9IHBvcyArIHJlbW92ZTsKICAgICAgICAgICAgICAgIHZhciB0YWlsTmV3UG9zID0gdGFpbE9sZFBvcyArIGFkZCAtIHJlbW92ZTsKICAgICAgICAgICAgICAgIHZhciB0YWlsQ291bnQgPSBsZW5ndGggLSB0YWlsT2xkUG9zOwogICAgICAgICAgICAgICAgdmFyIGxlbmd0aEFmdGVyUmVtb3ZlID0gbGVuZ3RoIC0gcmVtb3ZlOwoKICAgICAgICAgICAgICAgIGlmICh0YWlsTmV3UG9zIDwgdGFpbE9sZFBvcykgeyAvLyBjYXNlIEEKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhaWxDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxOZXdQb3MgPiB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQgogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHRhaWxDb3VudDsgaS0tOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gLy8gZWxzZSwgYWRkID09IHJlbW92ZSAobm90aGluZyB0byBkbykKCiAgICAgICAgICAgICAgICBpZiAoYWRkICYmIHBvcyA9PT0gbGVuZ3RoQWZ0ZXJSZW1vdmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlOyAvLyB0cnVuY2F0ZSBhcnJheQogICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlICsgYWRkOyAvLyByZXNlcnZlcyBzcGFjZQogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3BvcytpXSA9IGluc2VydFtpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgICAgfTsKICAgIH0KfQppZiAoIUFycmF5LmlzQXJyYXkpIHsKICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KG9iaikgewogICAgICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSAiW29iamVjdCBBcnJheV0iOwogICAgfTsKfQp2YXIgYm94ZWRTdHJpbmcgPSBPYmplY3QoImEiKSwKICAgIHNwbGl0U3RyaW5nID0gYm94ZWRTdHJpbmdbMF0gIT0gImEiIHx8ICEoMCBpbiBib3hlZFN0cmluZyk7CgppZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7CiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV0sCiAgICAgICAgICAgIGkgPSAtMSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKICAgICAgICB9CgogICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLm1hcCkgewogICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW4gLyosIHRoaXNwKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpCiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CiAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHJlc3VsdCA9IFtdLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKICAgICAgICAgICAgICAgIGlmIChmdW4uY2FsbCh0aGlzcCwgdmFsdWUsIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgIWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLnNvbWUpIHsKICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZSkgewogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHZhciByZXN1bHQ7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaSsrXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICAgICB9CgogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7CiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC0taSA8IDApIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChpIGluIHRoaXMpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoaS0tKTsKCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCAoWzAsIDFdLmluZGV4T2YoMSwgMikgIT0gLTEpKSB7CiAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7CiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwoKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0gc291Z2h0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mIHx8IChbMCwgMV0ubGFzdEluZGV4T2YoMCwgLTMpICE9IC0xKSkgewogICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHsKICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CgogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSBsZW5ndGggLSAxOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpOwogICAgICAgIH0KICAgICAgICBpID0gaSA+PSAwID8gaSA6IGxlbmd0aCAtIE1hdGguYWJzKGkpOwogICAgICAgIGZvciAoOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgewogICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3RvX18gfHwgKAogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IgPwogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlIDoKICAgICAgICAgICAgcHJvdG90eXBlT2ZPYmplY3QKICAgICAgICApOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHsKICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1vYmplY3Q6ICI7CiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1QgKyBvYmplY3QpOwogICAgICAgIGlmICghb3ducyhvYmplY3QsIHByb3BlcnR5KSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgZGVzY3JpcHRvciwgZ2V0dGVyLCBzZXR0ZXI7CiAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OwogICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykgewogICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwoKICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsKICAgICAgICAgICAgdmFyIHNldHRlciA9IGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KTsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKCiAgICAgICAgICAgIGlmIChnZXR0ZXIgfHwgc2V0dGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsKICAgICAgICAgICAgICAgIGlmIChzZXR0ZXIpIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOwogICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07CiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgIH07Cn0KaWYgKCFPYmplY3QuY3JlYXRlKSB7CiAgICB2YXIgY3JlYXRlRW1wdHk7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX18gPT09IG51bGwpIHsKICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHsgIl9fcHJvdG9fXyI6IG51bGwgfTsKICAgICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGVtcHR5ID0ge307CiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZW1wdHkpCiAgICAgICAgICAgICAgICBlbXB0eVtpXSA9IG51bGw7CiAgICAgICAgICAgIGVtcHR5LmNvbnN0cnVjdG9yID0KICAgICAgICAgICAgZW1wdHkuaGFzT3duUHJvcGVydHkgPQogICAgICAgICAgICBlbXB0eS5wcm9wZXJ0eUlzRW51bWVyYWJsZSA9CiAgICAgICAgICAgIGVtcHR5LmlzUHJvdG90eXBlT2YgPQogICAgICAgICAgICBlbXB0eS50b0xvY2FsZVN0cmluZyA9CiAgICAgICAgICAgIGVtcHR5LnRvU3RyaW5nID0KICAgICAgICAgICAgZW1wdHkudmFsdWVPZiA9CiAgICAgICAgICAgIGVtcHR5Ll9fcHJvdG9fXyA9IG51bGw7CiAgICAgICAgICAgIHJldHVybiBlbXB0eTsKICAgICAgICB9CiAgICB9CgogICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHsKICAgICAgICB2YXIgb2JqZWN0OwogICAgICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsKICAgICAgICAgICAgb2JqZWN0ID0gY3JlYXRlRW1wdHkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPSAib2JqZWN0IikKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIisodHlwZW9mIHByb3RvdHlwZSkrIl0gIT0gJ29iamVjdCciKTsKICAgICAgICAgICAgdmFyIFR5cGUgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CiAgICAgICAgICAgIG9iamVjdCA9IG5ldyBUeXBlKCk7CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgfQogICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApCiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcyk7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KCmZ1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7CiAgICB0cnkgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsKICAgICAgICByZXR1cm4gInNlbnRpbmVsIiBpbiBvYmplY3Q7CiAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKICAgIH0KfQppZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7CiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8CiAgICAgICAgZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CiAgICBpZiAoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKSB7CiAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICB9Cn0KCmlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SID0gIlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiOwogICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIKICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQgPSAiZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7CiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7CiAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAmJiB0eXBlb2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgKyBkZXNjcmlwdG9yKTsKICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOwogICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgewoKICAgICAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOwogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXN1cHBvcnRzQWNjZXNzb3JzKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpOwogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAiZ2V0IikpCiAgICAgICAgICAgICAgICBkZWZpbmVHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpOwogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0IikpCiAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5zZXQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgewogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcykgewogICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsKICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHByb3BlcnRpZXNbcHJvcGVydHldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3Quc2VhbCkgewogICAgT2JqZWN0LnNlYWwgPSBmdW5jdGlvbiBzZWFsKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmZyZWV6ZSkgewogICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQp0cnkgewogICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7Cn0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgT2JqZWN0LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9KShPYmplY3QuZnJlZXplKTsKfQppZiAoIU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucykgewogICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuaXNTZWFsZWQpIHsKICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1bmN0aW9uIGlzU2VhbGVkKG9iamVjdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFPYmplY3QuaXNGcm96ZW4pIHsKICAgIE9iamVjdC5pc0Zyb3plbiA9IGZ1bmN0aW9uIGlzRnJvemVuKG9iamVjdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7CiAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkgewogICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSA9PT0gb2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCiAgICAgICAgfQogICAgICAgIHZhciBuYW1lID0gJyc7CiAgICAgICAgd2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgewogICAgICAgICAgICBuYW1lICs9ICc/JzsKICAgICAgICB9CiAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7CiAgICAgICAgZGVsZXRlIG9iamVjdFtuYW1lXTsKICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICB9Owp9CmlmICghT2JqZWN0LmtleXMpIHsKICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsCiAgICAgICAgZG9udEVudW1zID0gWwogICAgICAgICAgICAidG9TdHJpbmciLAogICAgICAgICAgICAidG9Mb2NhbGVTdHJpbmciLAogICAgICAgICAgICAidmFsdWVPZiIsCiAgICAgICAgICAgICJoYXNPd25Qcm9wZXJ0eSIsCiAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwKICAgICAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwKICAgICAgICAgICAgImNvbnN0cnVjdG9yIgogICAgICAgIF0sCiAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKCiAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KSB7CiAgICAgICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsKICAgIH0KCiAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CgogICAgICAgIGlmICgKICAgICAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fAogICAgICAgICAgICBvYmplY3QgPT09IG51bGwKICAgICAgICApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGtleXMgPSBbXTsKICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgewogICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5hbWUpKSB7CiAgICAgICAgICAgICAgICBrZXlzLnB1c2gobmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChoYXNEb250RW51bUJ1ZykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkb250RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgZG9udEVudW0gPSBkb250RW51bXNbaV07CiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgewogICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkb250RW51bSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGtleXM7CiAgICB9OwoKfQppZiAoIURhdGUubm93KSB7CiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICB9Owp9CnZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArCiAgICAiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUyMDI4IiArCiAgICAiXHUyMDI5XHVGRUZGIjsKaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0pIHsKICAgIHdzID0gIlsiICsgd3MgKyAiXSI7CiAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwKICAgICAgICB0cmltRW5kUmVnZXhwID0gbmV3IFJlZ0V4cCh3cyArIHdzICsgIiokIik7CiAgICBTdHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltKCkgewogICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsKICAgIH07Cn0KCmZ1bmN0aW9uIHRvSW50ZWdlcihuKSB7CiAgICBuID0gK247CiAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTgogICAgICAgIG4gPSAwOwogICAgfSBlbHNlIGlmIChuICE9PSAwICYmIG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgewogICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7CiAgICB9CiAgICByZXR1cm4gbjsKfQoKZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIGlucHV0OwogICAgcmV0dXJuICgKICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAogICAgICAgIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8CiAgICAgICAgdHlwZSA9PT0gImJvb2xlYW4iIHx8CiAgICAgICAgdHlwZSA9PT0gIm51bWJlciIgfHwKICAgICAgICB0eXBlID09PSAic3RyaW5nIgogICAgKTsKfQoKZnVuY3Rpb24gdG9QcmltaXRpdmUoaW5wdXQpIHsKICAgIHZhciB2YWwsIHZhbHVlT2YsIHRvU3RyaW5nOwogICAgaWYgKGlzUHJpbWl0aXZlKGlucHV0KSkgewogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIHZhbHVlT2YgPSBpbnB1dC52YWx1ZU9mOwogICAgaWYgKHR5cGVvZiB2YWx1ZU9mID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdmFsID0gdmFsdWVPZi5jYWxsKGlucHV0KTsKICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgIH0KICAgIHRvU3RyaW5nID0gaW5wdXQudG9TdHJpbmc7CiAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdmFsID0gdG9TdHJpbmcuY2FsbChpbnB1dCk7CiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAgICB9CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7Cn0KdmFyIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkCiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK28rIiB0byBvYmplY3QiKTsKICAgIH0KICAgIHJldHVybiBPYmplY3Qobyk7Cn07Cgp9KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-html.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2h0bWwvc2F4cGFyc2VyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT0iZnVuY3Rpb24iJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbysiJyIpfXZhciBmPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChmLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGYsZi5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PSJmdW5jdGlvbiImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsKMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CmZ1bmN0aW9uIGlzU2NvcGVNYXJrZXIobm9kZSkgewoJaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpIHsKCQlyZXR1cm4gbm9kZS5sb2NhbE5hbWUgPT09ICJhcHBsZXQiCgkJCXx8IG5vZGUubG9jYWxOYW1lID09PSAiY2FwdGlvbiIKCQkJfHwgbm9kZS5sb2NhbE5hbWUgPT09ICJtYXJxdWVlIgoJCQl8fCBub2RlLmxvY2FsTmFtZSA9PT0gIm9iamVjdCIKCQkJfHwgbm9kZS5sb2NhbE5hbWUgPT09ICJ0YWJsZSIKCQkJfHwgbm9kZS5sb2NhbE5hbWUgPT09ICJ0ZCIKCQkJfHwgbm9kZS5sb2NhbE5hbWUgPT09ICJ0aCI7Cgl9CglpZiAobm9kZS5uYW1lc3BhY2VVUkkgPT09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIikgewoJCXJldHVybiBub2RlLmxvY2FsTmFtZSA9PT0gIm1pIgoJCQl8fCBub2RlLmxvY2FsTmFtZSA9PT0gIm1vIgoJCQl8fCBub2RlLmxvY2FsTmFtZSA9PT0gIm1uIgoJCQl8fCBub2RlLmxvY2FsTmFtZSA9PT0gIm1zIgoJCQl8fCBub2RlLmxvY2FsTmFtZSA9PT0gIm10ZXh0IgoJCQl8fCBub2RlLmxvY2FsTmFtZSA9PT0gImFubm90YXRpb24teG1sIjsKCX0KCWlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikgewoJCXJldHVybiBub2RlLmxvY2FsTmFtZSA9PT0gImZvcmVpZ25PYmplY3QiCgkJCXx8IG5vZGUubG9jYWxOYW1lID09PSAiZGVzYyIKCQkJfHwgbm9kZS5sb2NhbE5hbWUgPT09ICJ0aXRsZSI7Cgl9Cn0KCmZ1bmN0aW9uIGlzTGlzdEl0ZW1TY29wZU1hcmtlcihub2RlKSB7CglyZXR1cm4gaXNTY29wZU1hcmtlcihub2RlKQoJCXx8IChub2RlLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiICYmIG5vZGUubG9jYWxOYW1lID09PSAnb2wnKQoJCXx8IChub2RlLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiICYmIG5vZGUubG9jYWxOYW1lID09PSAndWwnKTsKfQoKZnVuY3Rpb24gaXNUYWJsZVNjb3BlTWFya2VyKG5vZGUpIHsKCXJldHVybiAobm9kZS5uYW1lc3BhY2VVUkkgPT09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiAmJiBub2RlLmxvY2FsTmFtZSA9PT0gJ3RhYmxlJykKCQl8fCAobm9kZS5uYW1lc3BhY2VVUkkgPT09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiAmJiBub2RlLmxvY2FsTmFtZSA9PT0gJ2h0bWwnKTsKfQoKZnVuY3Rpb24gaXNUYWJsZUJvZHlTY29wZU1hcmtlcihub2RlKSB7CglyZXR1cm4gKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICd0Ym9keScpCgkJfHwgKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICd0Zm9vdCcpCgkJfHwgKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICd0aGVhZCcpCgkJfHwgKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICdodG1sJyk7Cn0KCmZ1bmN0aW9uIGlzVGFibGVSb3dTY29wZU1hcmtlcihub2RlKSB7CglyZXR1cm4gKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICd0cicpCgkJfHwgKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICdodG1sJyk7Cn0KCmZ1bmN0aW9uIGlzQnV0dG9uU2NvcGVNYXJrZXIobm9kZSkgewoJcmV0dXJuIGlzU2NvcGVNYXJrZXIobm9kZSkKCQl8fCAobm9kZS5uYW1lc3BhY2VVUkkgPT09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiAmJiBub2RlLmxvY2FsTmFtZSA9PT0gJ2J1dHRvbicpOwp9CgpmdW5jdGlvbiBpc1NlbGVjdFNjb3BlTWFya2VyKG5vZGUpIHsKCXJldHVybiAhKG5vZGUubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgJiYgbm9kZS5sb2NhbE5hbWUgPT09ICdvcHRncm91cCcpCgkJJiYgIShub2RlLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiICYmIG5vZGUubG9jYWxOYW1lID09PSAnb3B0aW9uJyk7Cn0KZnVuY3Rpb24gRWxlbWVudFN0YWNrKCkgewoJdGhpcy5lbGVtZW50cyA9IFtdOwoJdGhpcy5yb290Tm9kZSA9IG51bGw7Cgl0aGlzLmhlYWRFbGVtZW50ID0gbnVsbDsKCXRoaXMuYm9keUVsZW1lbnQgPSBudWxsOwp9CkVsZW1lbnRTdGFjay5wcm90b3R5cGUuX2luU2NvcGUgPSBmdW5jdGlvbihsb2NhbE5hbWUsIGlzTWFya2VyKSB7Cglmb3IgKHZhciBpID0gdGhpcy5lbGVtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewoJCXZhciBub2RlID0gdGhpcy5lbGVtZW50c1tpXTsKCQlpZiAobm9kZS5sb2NhbE5hbWUgPT09IGxvY2FsTmFtZSkKCQkJcmV0dXJuIHRydWU7CgkJaWYgKGlzTWFya2VyKG5vZGUpKQoJCQlyZXR1cm4gZmFsc2U7Cgl9Cn07CkVsZW1lbnRTdGFjay5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uKGl0ZW0pIHsKCXRoaXMuZWxlbWVudHMucHVzaChpdGVtKTsKfTsKRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wdXNoSHRtbEVsZW1lbnQgPSBmdW5jdGlvbihpdGVtKSB7Cgl0aGlzLnJvb3ROb2RlID0gaXRlbS5ub2RlOwoJdGhpcy5wdXNoKGl0ZW0pOwp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLnB1c2hIZWFkRWxlbWVudCA9IGZ1bmN0aW9uKGl0ZW0pIHsKCXRoaXMuaGVhZEVsZW1lbnQgPSBpdGVtLm5vZGU7Cgl0aGlzLnB1c2goaXRlbSk7Cn07CkVsZW1lbnRTdGFjay5wcm90b3R5cGUucHVzaEJvZHlFbGVtZW50ID0gZnVuY3Rpb24oaXRlbSkgewoJdGhpcy5ib2R5RWxlbWVudCA9IGl0ZW0ubm9kZTsKCXRoaXMucHVzaChpdGVtKTsKfTsKRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLmVsZW1lbnRzLnBvcCgpOwp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKGl0ZW0pIHsKCXRoaXMuZWxlbWVudHMuc3BsaWNlKHRoaXMuZWxlbWVudHMuaW5kZXhPZihpdGVtKSwgMSk7Cn07CkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxQb3BwZWQgPSBmdW5jdGlvbihsb2NhbE5hbWUpIHsKCXZhciBlbGVtZW50OwoJZG8gewoJCWVsZW1lbnQgPSB0aGlzLnBvcCgpOwoJfSB3aGlsZSAoZWxlbWVudC5sb2NhbE5hbWUgIT0gbG9jYWxOYW1lKTsKfTsKCkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxUYWJsZVNjb3BlTWFya2VyID0gZnVuY3Rpb24oKSB7Cgl3aGlsZSAoIWlzVGFibGVTY29wZU1hcmtlcih0aGlzLnRvcCkpCgkJdGhpcy5wb3AoKTsKfTsKCkVsZW1lbnRTdGFjay5wcm90b3R5cGUucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlciA9IGZ1bmN0aW9uKCkgewoJd2hpbGUgKCFpc1RhYmxlQm9keVNjb3BlTWFya2VyKHRoaXMudG9wKSkKCQl0aGlzLnBvcCgpOwp9OwoKRWxlbWVudFN0YWNrLnByb3RvdHlwZS5wb3BVbnRpbFRhYmxlUm93U2NvcGVNYXJrZXIgPSBmdW5jdGlvbigpIHsKCXdoaWxlICghaXNUYWJsZVJvd1Njb3BlTWFya2VyKHRoaXMudG9wKSkKCQl0aGlzLnBvcCgpOwp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLml0ZW0gPSBmdW5jdGlvbihpbmRleCkgewoJcmV0dXJuIHRoaXMuZWxlbWVudHNbaW5kZXhdOwp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oZWxlbWVudCkgewoJcmV0dXJuIHRoaXMuZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KSAhPT0gLTE7Cn07CkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaW5TY29wZSA9IGZ1bmN0aW9uKGxvY2FsTmFtZSkgewoJcmV0dXJuIHRoaXMuX2luU2NvcGUobG9jYWxOYW1lLCBpc1Njb3BlTWFya2VyKTsKfTsKRWxlbWVudFN0YWNrLnByb3RvdHlwZS5pbkxpc3RJdGVtU2NvcGUgPSBmdW5jdGlvbihsb2NhbE5hbWUpIHsKCXJldHVybiB0aGlzLl9pblNjb3BlKGxvY2FsTmFtZSwgaXNMaXN0SXRlbVNjb3BlTWFya2VyKTsKfTsKRWxlbWVudFN0YWNrLnByb3RvdHlwZS5pblRhYmxlU2NvcGUgPSBmdW5jdGlvbihsb2NhbE5hbWUpIHsKCXJldHVybiB0aGlzLl9pblNjb3BlKGxvY2FsTmFtZSwgaXNUYWJsZVNjb3BlTWFya2VyKTsKfTsKRWxlbWVudFN0YWNrLnByb3RvdHlwZS5pbkJ1dHRvblNjb3BlID0gZnVuY3Rpb24obG9jYWxOYW1lKSB7CglyZXR1cm4gdGhpcy5faW5TY29wZShsb2NhbE5hbWUsIGlzQnV0dG9uU2NvcGVNYXJrZXIpOwp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLmluU2VsZWN0U2NvcGUgPSBmdW5jdGlvbihsb2NhbE5hbWUpIHsKCXJldHVybiB0aGlzLl9pblNjb3BlKGxvY2FsTmFtZSwgaXNTZWxlY3RTY29wZU1hcmtlcik7Cn07CkVsZW1lbnRTdGFjay5wcm90b3R5cGUuaGFzTnVtYmVyZWRIZWFkZXJFbGVtZW50SW5TY29wZSA9IGZ1bmN0aW9uKCkgewoJZm9yICh2YXIgaSA9IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCQl2YXIgbm9kZSA9IHRoaXMuZWxlbWVudHNbaV07CgkJaWYgKG5vZGUuaXNOdW1iZXJlZEhlYWRlcigpKQoJCQlyZXR1cm4gdHJ1ZTsKCQlpZiAoaXNTY29wZU1hcmtlcihub2RlKSkKCQkJcmV0dXJuIGZhbHNlOwoJfQp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKCXZhciBmdXJ0aGVzdEJsb2NrID0gbnVsbDsKCWZvciAodmFyIGkgPSB0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CgkJdmFyIG5vZGUgPSB0aGlzLmVsZW1lbnRzW2ldOwoJCWlmIChub2RlLm5vZGUgPT09IGVsZW1lbnQpCgkJCWJyZWFrOwoJCWlmIChub2RlLmlzU3BlY2lhbCgpKQoJCQlmdXJ0aGVzdEJsb2NrID0gbm9kZTsKCX0KICAgIHJldHVybiBmdXJ0aGVzdEJsb2NrOwp9OwpFbGVtZW50U3RhY2sucHJvdG90eXBlLmZpbmRJbmRleCA9IGZ1bmN0aW9uKGxvY2FsTmFtZSkgewoJZm9yICh2YXIgaSA9IHRoaXMuZWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCQlpZiAodGhpcy5lbGVtZW50c1tpXS5sb2NhbE5hbWUgPT0gbG9jYWxOYW1lKQoJCQlyZXR1cm4gaTsKCX0KICAgIHJldHVybiAtMTsKfTsKCkVsZW1lbnRTdGFjay5wcm90b3R5cGUucmVtb3ZlX29wZW5FbGVtZW50c191bnRpbCA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7Cgl2YXIgZmluaXNoZWQgPSBmYWxzZTsKCXZhciBlbGVtZW50OwoJd2hpbGUgKCFmaW5pc2hlZCkgewoJCWVsZW1lbnQgPSB0aGlzLmVsZW1lbnRzLnBvcCgpOwoJCWZpbmlzaGVkID0gY2FsbGJhY2soZWxlbWVudCk7Cgl9CglyZXR1cm4gZWxlbWVudDsKfTsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50U3RhY2sucHJvdG90eXBlLCAndG9wJywgewoJZ2V0OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5lbGVtZW50c1t0aGlzLmVsZW1lbnRzLmxlbmd0aCAtIDFdOwoJfQp9KTsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFbGVtZW50U3RhY2sucHJvdG90eXBlLCAnbGVuZ3RoJywgewoJZ2V0OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGg7Cgl9Cn0pOwoKZXhwb3J0cy5FbGVtZW50U3RhY2sgPSBFbGVtZW50U3RhY2s7Cgp9LAp7fV0sCjI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewp2YXIgZW50aXRpZXMgID0gX2RlcmVxXygnaHRtbDUtZW50aXRpZXMnKTsKdmFyIElucHV0U3RyZWFtID0gX2RlcmVxXygnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtOwoKdmFyIG5hbWVkRW50aXR5UHJlZml4ZXMgPSB7fTsKT2JqZWN0LmtleXMoZW50aXRpZXMpLmZvckVhY2goZnVuY3Rpb24gKGVudGl0eUtleSkgewoJZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRpdHlLZXkubGVuZ3RoOyBpKyspIHsKCQluYW1lZEVudGl0eVByZWZpeGVzW2VudGl0eUtleS5zdWJzdHJpbmcoMCwgaSArIDEpXSA9IHRydWU7Cgl9Cn0pOwoKZnVuY3Rpb24gaXNBbHBoYU51bWVyaWMoYykgewoJcmV0dXJuIChjID49ICcwJyAmJiBjIDw9ICc5JykgfHwgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpOwp9CgpmdW5jdGlvbiBpc0hleERpZ2l0KGMpIHsKCXJldHVybiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IChjID49ICdhJyAmJiBjIDw9ICdmJykgfHwgKGMgPj0gJ0EnICYmIGMgPD0gJ0YnKTsKfQoKZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoYykgewoJcmV0dXJuIChjID49ICcwJyAmJiBjIDw9ICc5Jyk7Cn0KCnZhciBFbnRpdHlQYXJzZXIgPSB7fTsKCkVudGl0eVBhcnNlci5jb25zdW1lRW50aXR5ID0gZnVuY3Rpb24oYnVmZmVyLCB0b2tlbml6ZXIsIGFkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyKSB7Cgl2YXIgZGVjb2RlZENoYXJhY3RlciA9ICcnOwoJdmFyIGNvbnN1bWVkQ2hhcmFjdGVycyA9ICcnOwoJdmFyIGNoID0gYnVmZmVyLmNoYXIoKTsKCWlmIChjaCA9PT0gSW5wdXRTdHJlYW0uRU9GKQoJCXJldHVybiBmYWxzZTsKCWNvbnN1bWVkQ2hhcmFjdGVycyArPSBjaDsKCWlmIChjaCA9PSAnXHQnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1x2JyB8fCBjaCA9PSAnICcgfHwgY2ggPT0gJzwnIHx8IGNoID09ICcmJykgewoJCWJ1ZmZlci51bmdldChjb25zdW1lZENoYXJhY3RlcnMpOwoJCXJldHVybiBmYWxzZTsKCX0KCWlmIChhZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PT0gY2gpIHsKCQlidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKTsKCQlyZXR1cm4gZmFsc2U7Cgl9CglpZiAoY2ggPT0gJyMnKSB7CgkJY2ggPSBidWZmZXIuc2hpZnQoMSk7CgkJaWYgKGNoID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC1udW1lcmljLWVudGl0eS1idXQtZ290LWVvZiIpOwoJCQlidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQljb25zdW1lZENoYXJhY3RlcnMgKz0gY2g7CgkJdmFyIHJhZGl4ID0gMTA7CgkJdmFyIGlzRGlnaXQgPSBpc0RlY2ltYWxEaWdpdDsKCQlpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgewoJCQlyYWRpeCA9IDE2OwoJCQlpc0RpZ2l0ID0gaXNIZXhEaWdpdDsKCQkJY2ggPSBidWZmZXIuc2hpZnQoMSk7CgkJCWlmIChjaCA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLW51bWVyaWMtZW50aXR5LWJ1dC1nb3QtZW9mIik7CgkJCQlidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQljb25zdW1lZENoYXJhY3RlcnMgKz0gY2g7CgkJfQoJCWlmIChpc0RpZ2l0KGNoKSkgewoJCQl2YXIgY29kZSA9ICcnOwoJCQl3aGlsZSAoY2ggIT09IElucHV0U3RyZWFtLkVPRiAmJiBpc0RpZ2l0KGNoKSkgewoJCQkJY29kZSArPSBjaDsKCQkJCWNoID0gYnVmZmVyLmNoYXIoKTsKCQkJfQoJCQljb2RlID0gcGFyc2VJbnQoY29kZSwgcmFkaXgpOwoJCQl2YXIgcmVwbGFjZW1lbnQgPSB0aGlzLnJlcGxhY2VFbnRpdHlOdW1iZXJzKGNvZGUpOwoJCQlpZiAocmVwbGFjZW1lbnQpIHsKCQkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1udW1lcmljLWVudGl0eS1yZXBsYWNlZCIpOwoJCQkJY29kZSA9IHJlcGxhY2VtZW50OwoJCQl9CgkJCWlmIChjb2RlID4gMHhGRkZGICYmIGNvZGUgPD0gMHgxMEZGRkYpIHsKCQkgICAgICAgIGNvZGUgLT0gMHgxMDAwMDsKCQkgICAgICAgIHZhciBmaXJzdCA9ICgoMHhmZmMwMCAmIGNvZGUpID4+IDEwKSArIDB4RDgwMDsKCQkgICAgICAgIHZhciBzZWNvbmQgPSAoMHgzZmYgJiBjb2RlKSArIDB4REMwMDsKCQkJCWRlY29kZWRDaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZpcnN0LCBzZWNvbmQpOwoJCQl9IGVsc2UKCQkJCWRlY29kZWRDaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwoJCQlpZiAoY2ggIT09ICc7JykgewoJCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJudW1lcmljLWVudGl0eS13aXRob3V0LXNlbWljb2xvbiIpOwoJCQkJYnVmZmVyLnVuZ2V0KGNoKTsKCQkJfQoJCQlyZXR1cm4gZGVjb2RlZENoYXJhY3RlcjsKCQl9CgkJYnVmZmVyLnVuZ2V0KGNvbnN1bWVkQ2hhcmFjdGVycyk7CgkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC1udW1lcmljLWVudGl0eSIpOwoJCXJldHVybiBmYWxzZTsKCX0KCWlmICgoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpKSB7CgkJdmFyIG1vc3RSZWNlbnRNYXRjaCA9ICcnOwoJCXdoaWxlIChuYW1lZEVudGl0eVByZWZpeGVzW2NvbnN1bWVkQ2hhcmFjdGVyc10pIHsKCQkJaWYgKGVudGl0aWVzW2NvbnN1bWVkQ2hhcmFjdGVyc10pIHsKCQkJCW1vc3RSZWNlbnRNYXRjaCA9IGNvbnN1bWVkQ2hhcmFjdGVyczsKCQkJfQoJCQlpZiAoY2ggPT0gJzsnKQoJCQkJYnJlYWs7CgkJCWNoID0gYnVmZmVyLmNoYXIoKTsKCQkJaWYgKGNoID09PSBJbnB1dFN0cmVhbS5FT0YpCgkJCQlicmVhazsKCQkJY29uc3VtZWRDaGFyYWN0ZXJzICs9IGNoOwoJCX0KCQlpZiAoIW1vc3RSZWNlbnRNYXRjaCkgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLW5hbWVkLWVudGl0eSIpOwoJCQlidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlkZWNvZGVkQ2hhcmFjdGVyID0gZW50aXRpZXNbbW9zdFJlY2VudE1hdGNoXTsKCQlpZiAoY2ggPT09ICc7JyB8fCAhYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgfHwgIShpc0FscGhhTnVtZXJpYyhjaCkgfHwgY2ggPT09ICc9JykpIHsKCQkJaWYgKGNvbnN1bWVkQ2hhcmFjdGVycy5sZW5ndGggPiBtb3N0UmVjZW50TWF0Y2gubGVuZ3RoKSB7CgkJCQlidWZmZXIudW5nZXQoY29uc3VtZWRDaGFyYWN0ZXJzLnN1YnN0cmluZyhtb3N0UmVjZW50TWF0Y2gubGVuZ3RoKSk7CgkJCX0KCQkJaWYgKGNoICE9PSAnOycpIHsKCQkJCXRva2VuaXplci5fcGFyc2VFcnJvcigibmFtZWQtZW50aXR5LXdpdGhvdXQtc2VtaWNvbG9uIik7CgkJCX0KCQkJcmV0dXJuIGRlY29kZWRDaGFyYWN0ZXI7CgkJfQoJCWJ1ZmZlci51bmdldChjb25zdW1lZENoYXJhY3RlcnMpOwoJCXJldHVybiBmYWxzZTsKCX0KfTsKCkVudGl0eVBhcnNlci5yZXBsYWNlRW50aXR5TnVtYmVycyA9IGZ1bmN0aW9uKGMpIHsKCXN3aXRjaChjKSB7CgkJY2FzZSAweDAwOiByZXR1cm4gMHhGRkZEOyAvLyBSRVBMQUNFTUVOVCBDSEFSQUNURVIKCQljYXNlIDB4MTM6IHJldHVybiAweDAwMTA7IC8vIENhcnJpYWdlIHJldHVybgoJCWNhc2UgMHg4MDogcmV0dXJuIDB4MjBBQzsgLy8gRVVSTyBTSUdOCgkJY2FzZSAweDgxOiByZXR1cm4gMHgwMDgxOyAvLyA8Y29udHJvbD4KCQljYXNlIDB4ODI6IHJldHVybiAweDIwMUE7IC8vIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSwoJCWNhc2UgMHg4MzogcmV0dXJuIDB4MDE5MjsgLy8gTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCgkJY2FzZSAweDg0OiByZXR1cm4gMHgyMDFFOyAvLyBET1VCTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKCQljYXNlIDB4ODU6IHJldHVybiAweDIwMjY7IC8vIEhPUklaT05UQUwgRUxMSVBTSVMKCQljYXNlIDB4ODY6IHJldHVybiAweDIwMjA7IC8vIERBR0dFUgoJCWNhc2UgMHg4NzogcmV0dXJuIDB4MjAyMTsgLy8gRE9VQkxFIERBR0dFUgoJCWNhc2UgMHg4ODogcmV0dXJuIDB4MDJDNjsgLy8gTU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UCgkJY2FzZSAweDg5OiByZXR1cm4gMHgyMDMwOyAvLyBQRVIgTUlMTEUgU0lHTgoJCWNhc2UgMHg4QTogcmV0dXJuIDB4MDE2MDsgLy8gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUyBXSVRIIENBUk9OCgkJY2FzZSAweDhCOiByZXR1cm4gMHgyMDM5OyAvLyBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSwoJCWNhc2UgMHg4QzogcmV0dXJuIDB4MDE1MjsgLy8gTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRQoJCWNhc2UgMHg4RDogcmV0dXJuIDB4MDA4RDsgLy8gPGNvbnRyb2w+CgkJY2FzZSAweDhFOiByZXR1cm4gMHgwMTdEOyAvLyBMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST04KCQljYXNlIDB4OEY6IHJldHVybiAweDAwOEY7IC8vIDxjb250cm9sPgoJCWNhc2UgMHg5MDogcmV0dXJuIDB4MDA5MDsgLy8gPGNvbnRyb2w+CgkJY2FzZSAweDkxOiByZXR1cm4gMHgyMDE4OyAvLyBMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSwoJCWNhc2UgMHg5MjogcmV0dXJuIDB4MjAxOTsgLy8gUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCgkJY2FzZSAweDkzOiByZXR1cm4gMHgyMDFDOyAvLyBMRUZUIERPVUJMRSBRVU9UQVRJT04gTUFSSwoJCWNhc2UgMHg5NDogcmV0dXJuIDB4MjAxRDsgLy8gUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCgkJY2FzZSAweDk1OiByZXR1cm4gMHgyMDIyOyAvLyBCVUxMRVQKCQljYXNlIDB4OTY6IHJldHVybiAweDIwMTM7IC8vIEVOIERBU0gKCQljYXNlIDB4OTc6IHJldHVybiAweDIwMTQ7IC8vIEVNIERBU0gKCQljYXNlIDB4OTg6IHJldHVybiAweDAyREM7IC8vIFNNQUxMIFRJTERFCgkJY2FzZSAweDk5OiByZXR1cm4gMHgyMTIyOyAvLyBUUkFERSBNQVJLIFNJR04KCQljYXNlIDB4OUE6IHJldHVybiAweDAxNjE7IC8vIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST04KCQljYXNlIDB4OUI6IHJldHVybiAweDIwM0E7IC8vIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSwoJCWNhc2UgMHg5QzogcmV0dXJuIDB4MDE1MzsgLy8gTEFUSU4gU01BTEwgTElHQVRVUkUgT0UKCQljYXNlIDB4OUQ6IHJldHVybiAweDAwOUQ7IC8vIDxjb250cm9sPgoJCWNhc2UgMHg5RTogcmV0dXJuIDB4MDE3RTsgLy8gTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgoJCWNhc2UgMHg5RjogcmV0dXJuIDB4MDE3ODsgLy8gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUwoJCWRlZmF1bHQ6CgkJCWlmICgoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHx8IGMgPiAweDEwRkZGRikgewoJCQkJcmV0dXJuIDB4RkZGRDsKCQkJfSBlbHNlIGlmICgoYyA+PSAweDAwMDEgJiYgYyA8PSAweDAwMDgpIHx8IChjID49IDB4MDAwRSAmJiBjIDw9IDB4MDAxRikgfHwKCQkJCShjID49IDB4MDA3RiAmJiBjIDw9IDB4MDA5RikgfHwgKGMgPj0gMHhGREQwICYmIGMgPD0gMHhGREVGKSB8fAoJCQkJYyA9PSAweDAwMEIgfHwgYyA9PSAweEZGRkUgfHwgYyA9PSAweDFGRkZFIHx8IGMgPT0gMHgyRkZGRkUgfHwKCQkJCWMgPT0gMHgyRkZGRiB8fCBjID09IDB4M0ZGRkUgfHwgYyA9PSAweDNGRkZGIHx8IGMgPT0gMHg0RkZGRSB8fAoJCQkJYyA9PSAweDRGRkZGIHx8IGMgPT0gMHg1RkZGRSB8fCBjID09IDB4NUZGRkYgfHwgYyA9PSAweDZGRkZFIHx8CgkJCQljID09IDB4NkZGRkYgfHwgYyA9PSAweDdGRkZFIHx8IGMgPT0gMHg3RkZGRiB8fCBjID09IDB4OEZGRkUgfHwKCQkJCWMgPT0gMHg4RkZGRiB8fCBjID09IDB4OUZGRkUgfHwgYyA9PSAweDlGRkZGIHx8IGMgPT0gMHhBRkZGRSB8fAoJCQkJYyA9PSAweEFGRkZGIHx8IGMgPT0gMHhCRkZGRSB8fCBjID09IDB4QkZGRkYgfHwgYyA9PSAweENGRkZFIHx8CgkJCQljID09IDB4Q0ZGRkYgfHwgYyA9PSAweERGRkZFIHx8IGMgPT0gMHhERkZGRiB8fCBjID09IDB4RUZGRkUgfHwKCQkJCWMgPT0gMHhFRkZGRiB8fCBjID09IDB4RkZGRkUgfHwgYyA9PSAweEZGRkZGIHx8IGMgPT0gMHgxMEZGRkUgfHwKCQkJCWMgPT0gMHgxMEZGRkYpIHsKCQkJCXJldHVybiBjOwoJCQl9Cgl9Cn07CgpleHBvcnRzLkVudGl0eVBhcnNlciA9IEVudGl0eVBhcnNlcjsKCn0sCnsiLi9JbnB1dFN0cmVhbSI6MywiaHRtbDUtZW50aXRpZXMiOjEyfV0sCjM6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewpmdW5jdGlvbiBJbnB1dFN0cmVhbSgpIHsKCXRoaXMuZGF0YSA9ICcnOwoJdGhpcy5zdGFydCA9IDA7Cgl0aGlzLmNvbW1pdHRlZCA9IDA7Cgl0aGlzLmVvZiA9IGZhbHNlOwoJdGhpcy5sYXN0TG9jYXRpb24gPSB7bGluZTogMCwgY29sdW1uOiAwfTsKfQoKSW5wdXRTdHJlYW0uRU9GID0gLTE7CgpJbnB1dFN0cmVhbS5EUkFJTiA9IC0yOwoKSW5wdXRTdHJlYW0ucHJvdG90eXBlID0gewoJc2xpY2U6IGZ1bmN0aW9uKCkgewoJCWlmKHRoaXMuc3RhcnQgPj0gdGhpcy5kYXRhLmxlbmd0aCkgewoJCQlpZighdGhpcy5lb2YpIHRocm93IElucHV0U3RyZWFtLkRSQUlOOwoJCQlyZXR1cm4gSW5wdXRTdHJlYW0uRU9GOwoJCX0KCQlyZXR1cm4gdGhpcy5kYXRhLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZGF0YS5sZW5ndGgpOwoJfSwKCWNoYXI6IGZ1bmN0aW9uKCkgewoJCWlmKCF0aGlzLmVvZiAmJiB0aGlzLnN0YXJ0ID49IHRoaXMuZGF0YS5sZW5ndGggLSAxKSB0aHJvdyBJbnB1dFN0cmVhbS5EUkFJTjsKCQlpZih0aGlzLnN0YXJ0ID49IHRoaXMuZGF0YS5sZW5ndGgpIHsKCQkJcmV0dXJuIElucHV0U3RyZWFtLkVPRjsKCQl9CgkJdmFyIGNoID0gdGhpcy5kYXRhW3RoaXMuc3RhcnQrK107CgkJaWYgKGNoID09PSAnXHInKQoJCQljaCA9ICdcbic7CgkJcmV0dXJuIGNoOwoJfSwKCWFkdmFuY2U6IGZ1bmN0aW9uKGFtb3VudCkgewoJCXRoaXMuc3RhcnQgKz0gYW1vdW50OwoJCWlmKHRoaXMuc3RhcnQgPj0gdGhpcy5kYXRhLmxlbmd0aCkgewoJCQlpZighdGhpcy5lb2YpIHRocm93IElucHV0U3RyZWFtLkRSQUlOOwoJCQlyZXR1cm4gSW5wdXRTdHJlYW0uRU9GOwoJCX0gZWxzZSB7CgkJCWlmKHRoaXMuY29tbWl0dGVkID4gdGhpcy5kYXRhLmxlbmd0aCAvIDIpIHsKCQkJCXRoaXMubGFzdExvY2F0aW9uID0gdGhpcy5sb2NhdGlvbigpOwoJCQkJdGhpcy5kYXRhID0gdGhpcy5kYXRhLnNsaWNlKHRoaXMuY29tbWl0dGVkKTsKCQkJCXRoaXMuc3RhcnQgPSB0aGlzLnN0YXJ0IC0gdGhpcy5jb21taXR0ZWQ7CgkJCQl0aGlzLmNvbW1pdHRlZCA9IDA7CgkJCX0KCQl9Cgl9LAoJbWF0Y2hXaGlsZTogZnVuY3Rpb24ocmUpIHsKCQlpZih0aGlzLmVvZiAmJiB0aGlzLnN0YXJ0ID49IHRoaXMuZGF0YS5sZW5ndGggKSByZXR1cm4gJyc7CgkJdmFyIHIgPSBuZXcgUmVnRXhwKCJeIityZSsiKyIpOwoJCXZhciBtID0gci5leGVjKHRoaXMuc2xpY2UoKSk7CgkJaWYobSkgewoJCQlpZighdGhpcy5lb2YgJiYgbVswXS5sZW5ndGggPT0gdGhpcy5kYXRhLmxlbmd0aCAtIHRoaXMuc3RhcnQpIHRocm93IElucHV0U3RyZWFtLkRSQUlOOwoJCQl0aGlzLmFkdmFuY2UobVswXS5sZW5ndGgpOwoJCQlyZXR1cm4gbVswXTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gJyc7CgkJfQoJfSwKCW1hdGNoVW50aWw6IGZ1bmN0aW9uKHJlKSB7CgkJdmFyIG0sIHM7CgkJcyA9IHRoaXMuc2xpY2UoKTsKCQlpZihzID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJcmV0dXJuICcnOwoJCX0gZWxzZSBpZihtID0gbmV3IFJlZ0V4cChyZSArICh0aGlzLmVvZiA/ICJ8JCIgOiAiIikpLmV4ZWMocykpIHsKCQkJdmFyIHQgPSB0aGlzLmRhdGEuc2xpY2UodGhpcy5zdGFydCwgdGhpcy5zdGFydCArIG0uaW5kZXgpOwoJCQl0aGlzLmFkdmFuY2UobS5pbmRleCk7CgkJCXJldHVybiB0LnJlcGxhY2UoL1xyL2csICdcbicpLnJlcGxhY2UoL1xuezIsfS9nLCAnXG4nKTsKCQl9IGVsc2UgewoJCQl0aHJvdyBJbnB1dFN0cmVhbS5EUkFJTjsKCQl9Cgl9LAoJYXBwZW5kOiBmdW5jdGlvbihkYXRhKSB7CgkJdGhpcy5kYXRhICs9IGRhdGE7Cgl9LAoJc2hpZnQ6IGZ1bmN0aW9uKG4pIHsKCQlpZighdGhpcy5lb2YgJiYgdGhpcy5zdGFydCArIG4gPj0gdGhpcy5kYXRhLmxlbmd0aCkgdGhyb3cgSW5wdXRTdHJlYW0uRFJBSU47CgkJaWYodGhpcy5lb2YgJiYgdGhpcy5zdGFydCA+PSB0aGlzLmRhdGEubGVuZ3RoKSByZXR1cm4gSW5wdXRTdHJlYW0uRU9GOwoJCXZhciBkID0gdGhpcy5kYXRhLnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuc3RhcnQgKyBuKS50b1N0cmluZygpOwoJCXRoaXMuYWR2YW5jZShNYXRoLm1pbihuLCB0aGlzLmRhdGEubGVuZ3RoIC0gdGhpcy5zdGFydCkpOwoJCXJldHVybiBkOwoJfSwKCXBlZWs6IGZ1bmN0aW9uKG4pIHsKCQlpZighdGhpcy5lb2YgJiYgdGhpcy5zdGFydCArIG4gPj0gdGhpcy5kYXRhLmxlbmd0aCkgdGhyb3cgSW5wdXRTdHJlYW0uRFJBSU47CgkJaWYodGhpcy5lb2YgJiYgdGhpcy5zdGFydCA+PSB0aGlzLmRhdGEubGVuZ3RoKSByZXR1cm4gSW5wdXRTdHJlYW0uRU9GOwoJCXJldHVybiB0aGlzLmRhdGEuc2xpY2UodGhpcy5zdGFydCwgTWF0aC5taW4odGhpcy5zdGFydCArIG4sIHRoaXMuZGF0YS5sZW5ndGgpKS50b1N0cmluZygpOwoJfSwKCWxlbmd0aDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggLSB0aGlzLnN0YXJ0IC0gMTsKCX0sCgl1bmdldDogZnVuY3Rpb24oZCkgewoJCWlmKGQgPT09IElucHV0U3RyZWFtLkVPRikgcmV0dXJuOwoJCXRoaXMuc3RhcnQgLT0gKGQubGVuZ3RoKTsKCX0sCgl1bmRvOiBmdW5jdGlvbigpIHsKCQl0aGlzLnN0YXJ0ID0gdGhpcy5jb21taXR0ZWQ7Cgl9LAoJY29tbWl0OiBmdW5jdGlvbigpIHsKCQl0aGlzLmNvbW1pdHRlZCA9IHRoaXMuc3RhcnQ7Cgl9LAoJbG9jYXRpb246IGZ1bmN0aW9uKCkgewoJCXZhciBsYXN0TGluZSA9IHRoaXMubGFzdExvY2F0aW9uLmxpbmU7CgkJdmFyIGxhc3RDb2x1bW4gPSB0aGlzLmxhc3RMb2NhdGlvbi5jb2x1bW47CgkJdmFyIHJlYWQgPSB0aGlzLmRhdGEuc2xpY2UoMCwgdGhpcy5jb21taXR0ZWQpOwoJCXZhciBuZXdsaW5lcyA9IHJlYWQubWF0Y2goL1xuL2cpOwoJCXZhciBsaW5lID0gbmV3bGluZXMgPyBsYXN0TGluZSArIG5ld2xpbmVzLmxlbmd0aCA6IGxhc3RMaW5lOwoJCXZhciBjb2x1bW4gPSBuZXdsaW5lcyA/IHJlYWQubGVuZ3RoIC0gcmVhZC5sYXN0SW5kZXhPZignXG4nKSAtIDEgOiBsYXN0Q29sdW1uICsgcmVhZC5sZW5ndGg7CgkJcmV0dXJuIHtsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbn07Cgl9Cn07CgpleHBvcnRzLklucHV0U3RyZWFtID0gSW5wdXRTdHJlYW07Cgp9LAp7fV0sCjQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewp2YXIgU3BlY2lhbEVsZW1lbnRzID0gewoJImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOiBbCgkJJ2FkZHJlc3MnLAoJCSdhcHBsZXQnLAoJCSdhcmVhJywKCQknYXJ0aWNsZScsCgkJJ2FzaWRlJywKCQknYmFzZScsCgkJJ2Jhc2Vmb250JywKCQknYmdzb3VuZCcsCgkJJ2Jsb2NrcXVvdGUnLAoJCSdib2R5JywKCQknYnInLAoJCSdidXR0b24nLAoJCSdjYXB0aW9uJywKCQknY2VudGVyJywKCQknY29sJywKCQknY29sZ3JvdXAnLAoJCSdkZCcsCgkJJ2RldGFpbHMnLAoJCSdkaXInLAoJCSdkaXYnLAoJCSdkbCcsCgkJJ2R0JywKCQknZW1iZWQnLAoJCSdmaWVsZHNldCcsCgkJJ2ZpZ2NhcHRpb24nLAoJCSdmaWd1cmUnLAoJCSdmb290ZXInLAoJCSdmb3JtJywKCQknZnJhbWUnLAoJCSdmcmFtZXNldCcsCgkJJ2gxJywKCQknaDInLAoJCSdoMycsCgkJJ2g0JywKCQknaDUnLAoJCSdoNicsCgkJJ2hlYWQnLAoJCSdoZWFkZXInLAoJCSdoZ3JvdXAnLAoJCSdocicsCgkJJ2h0bWwnLAoJCSdpZnJhbWUnLAoJCSdpbWcnLAoJCSdpbnB1dCcsCgkJJ2lzaW5kZXgnLAoJCSdsaScsCgkJJ2xpbmsnLAoJCSdsaXN0aW5nJywKCQknbWFpbicsCgkJJ21hcnF1ZWUnLAoJCSdtZW51JywKCQknbWVudWl0ZW0nLAoJCSdtZXRhJywKCQknbmF2JywKCQknbm9lbWJlZCcsCgkJJ25vZnJhbWVzJywKCQknbm9zY3JpcHQnLAoJCSdvYmplY3QnLAoJCSdvbCcsCgkJJ3AnLAoJCSdwYXJhbScsCgkJJ3BsYWludGV4dCcsCgkJJ3ByZScsCgkJJ3NjcmlwdCcsCgkJJ3NlY3Rpb24nLAoJCSdzZWxlY3QnLAoJCSdzb3VyY2UnLAoJCSdzdHlsZScsCgkJJ3N1bW1hcnknLAoJCSd0YWJsZScsCgkJJ3Rib2R5JywKCQkndGQnLAoJCSd0ZXh0YXJlYScsCgkJJ3Rmb290JywKCQkndGgnLAoJCSd0aGVhZCcsCgkJJ3RpdGxlJywKCQkndHInLAoJCSd0cmFjaycsCgkJJ3VsJywKCQknd2JyJywKCQkneG1wJwoJXSwKCSJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjogWwoJCSdtaScsCgkJJ21vJywKCQknbW4nLAoJCSdtcycsCgkJJ210ZXh0JywKCQknYW5ub3RhdGlvbi14bWwnCgldLAoJImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjogWwoJCSdmb3JlaWduT2JqZWN0JywKCQknZGVzYycsCgkJJ3RpdGxlJwoJXQp9OwoKCmZ1bmN0aW9uIFN0YWNrSXRlbShuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgYXR0cmlidXRlcywgbm9kZSkgewoJdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Cgl0aGlzLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKCXRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7Cgl0aGlzLm5vZGUgPSBub2RlOwp9ClN0YWNrSXRlbS5wcm90b3R5cGUuaXNTcGVjaWFsID0gZnVuY3Rpb24oKSB7CglyZXR1cm4gdGhpcy5uYW1lc3BhY2VVUkkgaW4gU3BlY2lhbEVsZW1lbnRzICYmCgkJU3BlY2lhbEVsZW1lbnRzW3RoaXMubmFtZXNwYWNlVVJJXS5pbmRleE9mKHRoaXMubG9jYWxOYW1lKSA+IC0xOwp9OwoKU3RhY2tJdGVtLnByb3RvdHlwZS5pc0Zvc3RlclBhcmVudGluZyA9IGZ1bmN0aW9uKCkgewoJaWYgKHRoaXMubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpIHsKCQlyZXR1cm4gdGhpcy5sb2NhbE5hbWUgPT09ICd0YWJsZScgfHwKCQkJdGhpcy5sb2NhbE5hbWUgPT09ICd0Ym9keScgfHwKCQkJdGhpcy5sb2NhbE5hbWUgPT09ICd0Zm9vdCcgfHwKCQkJdGhpcy5sb2NhbE5hbWUgPT09ICd0aGVhZCcgfHwKCQkJdGhpcy5sb2NhbE5hbWUgPT09ICd0cic7Cgl9CglyZXR1cm4gZmFsc2U7Cn07CgpTdGFja0l0ZW0ucHJvdG90eXBlLmlzTnVtYmVyZWRIZWFkZXIgPSBmdW5jdGlvbigpIHsKCWlmICh0aGlzLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKSB7CgkJcmV0dXJuIHRoaXMubG9jYWxOYW1lID09PSAnaDEnIHx8CgkJCXRoaXMubG9jYWxOYW1lID09PSAnaDInIHx8CgkJCXRoaXMubG9jYWxOYW1lID09PSAnaDMnIHx8CgkJCXRoaXMubG9jYWxOYW1lID09PSAnaDQnIHx8CgkJCXRoaXMubG9jYWxOYW1lID09PSAnaDUnIHx8CgkJCXRoaXMubG9jYWxOYW1lID09PSAnaDYnOwoJfQoJcmV0dXJuIGZhbHNlOwp9OwoKU3RhY2tJdGVtLnByb3RvdHlwZS5pc0ZvcmVpZ24gPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLm5hbWVzcGFjZVVSSSAhPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Cn07CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoaXRlbSwgbmFtZSkgewoJZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsKCQlpZiAoaXRlbS5hdHRyaWJ1dGVzW2ldLm5vZGVOYW1lID09IG5hbWUpCgkJCXJldHVybiBpdGVtLmF0dHJpYnV0ZXNbaV0ubm9kZVZhbHVlOwoJfQoJcmV0dXJuIG51bGw7Cn0KClN0YWNrSXRlbS5wcm90b3R5cGUuaXNIdG1sSW50ZWdyYXRpb25Qb2ludCA9IGZ1bmN0aW9uKCkgewoJaWYgKHRoaXMubmFtZXNwYWNlVVJJID09PSAiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIpIHsKCQlpZiAodGhpcy5sb2NhbE5hbWUgIT09ICJhbm5vdGF0aW9uLXhtbCIpCgkJCXJldHVybiBmYWxzZTsKCQl2YXIgZW5jb2RpbmcgPSBnZXRBdHRyaWJ1dGUodGhpcywgJ2VuY29kaW5nJyk7CgkJaWYgKCFlbmNvZGluZykKCQkJcmV0dXJuIGZhbHNlOwoJCWVuY29kaW5nID0gZW5jb2RpbmcudG9Mb3dlckNhc2UoKTsKCQlyZXR1cm4gZW5jb2RpbmcgPT09ICJ0ZXh0L2h0bWwiIHx8IGVuY29kaW5nID09PSAiYXBwbGljYXRpb24veGh0bWwreG1sIjsKCX0KCWlmICh0aGlzLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikgewoJCXJldHVybiB0aGlzLmxvY2FsTmFtZSA9PT0gImZvcmVpZ25PYmplY3QiCgkJCXx8IHRoaXMubG9jYWxOYW1lID09PSAiZGVzYyIKCQkJfHwgdGhpcy5sb2NhbE5hbWUgPT09ICJ0aXRsZSI7Cgl9CglyZXR1cm4gZmFsc2U7Cn07CgpTdGFja0l0ZW0ucHJvdG90eXBlLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQgPSBmdW5jdGlvbigpIHsKCWlmICh0aGlzLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiKSB7CgkJcmV0dXJuIHRoaXMubG9jYWxOYW1lID09PSAibWkiCgkJCXx8IHRoaXMubG9jYWxOYW1lID09PSAibW8iCgkJCXx8IHRoaXMubG9jYWxOYW1lID09PSAibW4iCgkJCXx8IHRoaXMubG9jYWxOYW1lID09PSAibXMiCgkJCXx8IHRoaXMubG9jYWxOYW1lID09PSAibXRleHQiOwoJfQoJcmV0dXJuIGZhbHNlOwp9OwoKZXhwb3J0cy5TdGFja0l0ZW0gPSBTdGFja0l0ZW07Cgp9LAp7fV0sCjU6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewp2YXIgSW5wdXRTdHJlYW0gPSBfZGVyZXFfKCcuL0lucHV0U3RyZWFtJykuSW5wdXRTdHJlYW07CnZhciBFbnRpdHlQYXJzZXIgPSBfZGVyZXFfKCcuL0VudGl0eVBhcnNlcicpLkVudGl0eVBhcnNlcjsKCmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjKXsKCXJldHVybiBjID09PSAiICIgfHwgYyA9PT0gIlxuIiB8fCBjID09PSAiXHQiIHx8IGMgPT09ICJcciIgfHwgYyA9PT0gIlxmIjsKfQoKZnVuY3Rpb24gaXNBbHBoYShjKSB7CglyZXR1cm4gKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpOwp9CmZ1bmN0aW9uIFRva2VuaXplcih0b2tlbkhhbmRsZXIpIHsKCXRoaXMuX3Rva2VuSGFuZGxlciA9IHRva2VuSGFuZGxlcjsKCXRoaXMuX3N0YXRlID0gVG9rZW5pemVyLkRBVEE7Cgl0aGlzLl9pbnB1dFN0cmVhbSA9IG5ldyBJbnB1dFN0cmVhbSgpOwoJdGhpcy5fY3VycmVudFRva2VuID0gbnVsbDsKCXRoaXMuX3RlbXBvcmFyeUJ1ZmZlciA9ICcnOwoJdGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnJzsKfQoKVG9rZW5pemVyLnByb3RvdHlwZS5fcGFyc2VFcnJvciA9IGZ1bmN0aW9uKGNvZGUsIGFyZ3MpIHsKCXRoaXMuX3Rva2VuSGFuZGxlci5wYXJzZUVycm9yKGNvZGUsIGFyZ3MpOwp9OwoKVG9rZW5pemVyLnByb3RvdHlwZS5fZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHsKCWlmICh0b2tlbi50eXBlID09PSAnU3RhcnRUYWcnKSB7CgkJZm9yICh2YXIgaSA9IDE7IGkgPCB0b2tlbi5kYXRhLmxlbmd0aDsgaSsrKSB7CgkJCWlmICghdG9rZW4uZGF0YVtpXS5ub2RlTmFtZSkKCQkJCXRva2VuLmRhdGEuc3BsaWNlKGktLSwgMSk7CgkJfQoJfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnRW5kVGFnJykgewoJCWlmICh0b2tlbi5zZWxmQ2xvc2luZykgewoJCQl0aGlzLl9wYXJzZUVycm9yKCdzZWxmLWNsb3NpbmctZmxhZy1vbi1lbmQtdGFnJyk7CgkJfQoJCWlmICh0b2tlbi5kYXRhLmxlbmd0aCAhPT0gMCkgewoJCQl0aGlzLl9wYXJzZUVycm9yKCdhdHRyaWJ1dGVzLWluLWVuZC10YWcnKTsKCQl9Cgl9Cgl0aGlzLl90b2tlbkhhbmRsZXIucHJvY2Vzc1Rva2VuKHRva2VuKTsKCWlmICh0b2tlbi50eXBlID09PSAnU3RhcnRUYWcnICYmIHRva2VuLnNlbGZDbG9zaW5nICYmICF0aGlzLl90b2tlbkhhbmRsZXIuaXNTZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQoKSkgewoJCXRoaXMuX3BhcnNlRXJyb3IoJ25vbi12b2lkLWVsZW1lbnQtd2l0aC10cmFpbGluZy1zb2xpZHVzJywge25hbWU6IHRva2VuLm5hbWV9KTsKCX0KfTsKClRva2VuaXplci5wcm90b3R5cGUuX2VtaXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbigpIHsKCXRoaXMuX3N0YXRlID0gVG9rZW5pemVyLkRBVEE7Cgl0aGlzLl9lbWl0VG9rZW4odGhpcy5fY3VycmVudFRva2VuKTsKfTsKClRva2VuaXplci5wcm90b3R5cGUuX2N1cnJlbnRBdHRyaWJ1dGUgPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLl9jdXJyZW50VG9rZW4uZGF0YVt0aGlzLl9jdXJyZW50VG9rZW4uZGF0YS5sZW5ndGggLSAxXTsKfTsKClRva2VuaXplci5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkgewoJdGhpcy5fc3RhdGUgPSBzdGF0ZTsKfTsKClRva2VuaXplci5wcm90b3R5cGUudG9rZW5pemUgPSBmdW5jdGlvbihzb3VyY2UpIHsKCVRva2VuaXplci5EQVRBID0gZGF0YV9zdGF0ZTsKCVRva2VuaXplci5SQ0RBVEEgPSByY2RhdGFfc3RhdGU7CglUb2tlbml6ZXIuUkFXVEVYVCA9IHJhd3RleHRfc3RhdGU7CglUb2tlbml6ZXIuU0NSSVBUX0RBVEEgPSBzY3JpcHRfZGF0YV9zdGF0ZTsKCVRva2VuaXplci5QTEFJTlRFWFQgPSBwbGFpbnRleHRfc3RhdGU7CgoKCXRoaXMuX3N0YXRlID0gVG9rZW5pemVyLkRBVEE7CgoJdGhpcy5faW5wdXRTdHJlYW0uYXBwZW5kKHNvdXJjZSk7CgoJdGhpcy5fdG9rZW5IYW5kbGVyLnN0YXJ0VG9rZW5pemF0aW9uKHRoaXMpOwoKCXRoaXMuX2lucHV0U3RyZWFtLmVvZiA9IHRydWU7CgoJdmFyIHRva2VuaXplciA9IHRoaXM7CgoJd2hpbGUgKHRoaXMuX3N0YXRlLmNhbGwodGhpcywgdGhpcy5faW5wdXRTdHJlYW0pKTsKCgoJZnVuY3Rpb24gZGF0YV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0VPRicsIGRhdGE6IG51bGx9KTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJyYnKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX2RhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZSh0YWdfb3Blbl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhfSk7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9IGVsc2UgewoJCQl2YXIgY2hhcnMgPSBidWZmZXIubWF0Y2hVbnRpbCgiJnw8fFx1MDAwMCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhICsgY2hhcnN9KTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX2RhdGFfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGNoYXJhY3RlciA9IEVudGl0eVBhcnNlci5jb25zdW1lRW50aXR5KGJ1ZmZlciwgdG9rZW5pemVyKTsKCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogY2hhcmFjdGVyIHx8ICcmJ30pOwoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHJjZGF0YV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0VPRicsIGRhdGE6IG51bGx9KTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJyYnKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX3JjZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPCcpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJjZGF0YV9sZXNzX3RoYW5fc2lnbl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAiXHUwMDAwIikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICdcdUZGRkQnfSk7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9IGVsc2UgewoJCQl2YXIgY2hhcnMgPSBidWZmZXIubWF0Y2hVbnRpbCgiJnw8fFx1MDAwMCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhICsgY2hhcnN9KTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX3JjZGF0YV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgY2hhcmFjdGVyID0gRW50aXR5UGFyc2VyLmNvbnN1bWVFbnRpdHkoYnVmZmVyLCB0b2tlbml6ZXIpOwoJCXRva2VuaXplci5zZXRTdGF0ZShyY2RhdGFfc3RhdGUpOwoJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGNoYXJhY3RlciB8fCAnJid9KTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiByYXd0ZXh0X3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnRU9GJywgZGF0YTogbnVsbH0pOwoJCQlyZXR1cm4gZmFsc2U7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPCcpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfbGVzc190aGFuX3NpZ25fc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIlx1MDAwMCIpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnXHVGRkZEJ30pOwoJCQlidWZmZXIuY29tbWl0KCk7CgkJfSBlbHNlIHsKCQkJdmFyIGNoYXJzID0gYnVmZmVyLm1hdGNoVW50aWwoIjx8XHUwMDAwIik7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGEgKyBjaGFyc30pOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBwbGFpbnRleHRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdFT0YnLCBkYXRhOiBudWxsfSk7CgkJCXJldHVybiBmYWxzZTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICJcdTAwMDAiKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJ1x1RkZGRCd9KTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0gZWxzZSB7CgkJCXZhciBjaGFycyA9IGJ1ZmZlci5tYXRjaFVudGlsKCJcdTAwMDAiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogZGF0YSArIGNoYXJzfSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCglmdW5jdGlvbiBzY3JpcHRfZGF0YV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0VPRicsIGRhdGE6IG51bGx9KTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9sZXNzX3RoYW5fc2lnbl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICdcdUZGRkQnfSk7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9IGVsc2UgewoJCQl2YXIgY2hhcnMgPSBidWZmZXIubWF0Y2hVbnRpbCgiPHxcdTAwMDAiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogZGF0YSArIGNoYXJzfSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHJjZGF0YV9sZXNzX3RoYW5fc2lnbl9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09ICIvIikgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgPSAnJzsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJjZGF0YV9lbmRfdGFnX29wZW5fc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8J30pOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShyY2RhdGFfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiByY2RhdGFfZW5kX3RhZ19vcGVuX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgKz0gZGF0YTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJjZGF0YV9lbmRfdGFnX25hbWVfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8Lyd9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUocmNkYXRhX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gcmNkYXRhX2VuZF90YWdfbmFtZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgYXBwcm9wcmlhdGUgPSB0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiAmJiAodG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZSA9PT0gdGhpcy5fdGVtcG9yYXJ5QnVmZmVyLnRvTG93ZXJDYXNlKCkpOwoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoaXNXaGl0ZXNwYWNlKGRhdGEpICYmIGFwcHJvcHJpYXRlKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuID0ge3R5cGU6ICdFbmRUYWcnLCBuYW1lOiB0aGlzLl90ZW1wb3JhcnlCdWZmZXIsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICcvJyAmJiBhcHByb3ByaWF0ZSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiA9IHt0eXBlOiAnRW5kVGFnJywgbmFtZTogdGhpcy5fdGVtcG9yYXJ5QnVmZmVyLCBkYXRhOiBbXSwgc2VsZkNsb3Npbmc6IGZhbHNlfTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nICYmIGFwcHJvcHJpYXRlKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuID0ge3R5cGU6ICdFbmRUYWcnLCBuYW1lOiB0aGlzLl90ZW1wb3JhcnlCdWZmZXIsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgKz0gZGF0YTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8LycgKyB0aGlzLl90ZW1wb3JhcnlCdWZmZXJ9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUocmNkYXRhX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gcmF3dGV4dF9sZXNzX3RoYW5fc2lnbl9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09ICIvIikgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgPSAnJzsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfZW5kX3RhZ19vcGVuX3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnPCd9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUocmF3dGV4dF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHJhd3RleHRfZW5kX3RhZ19vcGVuX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgKz0gZGF0YTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfZW5kX3RhZ19uYW1lX3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnPC8nfSk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHJhd3RleHRfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiByYXd0ZXh0X2VuZF90YWdfbmFtZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgYXBwcm9wcmlhdGUgPSB0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiAmJiAodG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZSA9PT0gdGhpcy5fdGVtcG9yYXJ5QnVmZmVyLnRvTG93ZXJDYXNlKCkpOwoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoaXNXaGl0ZXNwYWNlKGRhdGEpICYmIGFwcHJvcHJpYXRlKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuID0ge3R5cGU6ICdFbmRUYWcnLCBuYW1lOiB0aGlzLl90ZW1wb3JhcnlCdWZmZXIsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICcvJyAmJiBhcHByb3ByaWF0ZSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiA9IHt0eXBlOiAnRW5kVGFnJywgbmFtZTogdGhpcy5fdGVtcG9yYXJ5QnVmZmVyLCBkYXRhOiBbXSwgc2VsZkNsb3Npbmc6IGZhbHNlfTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nICYmIGFwcHJvcHJpYXRlKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuID0ge3R5cGU6ICdFbmRUYWcnLCBuYW1lOiB0aGlzLl90ZW1wb3JhcnlCdWZmZXIsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgKz0gZGF0YTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8LycgKyB0aGlzLl90ZW1wb3JhcnlCdWZmZXJ9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUocmF3dGV4dF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2xlc3NfdGhhbl9zaWduX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gIi8iKSB7CgkJCXRoaXMuX3RlbXBvcmFyeUJ1ZmZlciA9ICcnOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZW5kX3RhZ19vcGVuX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICchJykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnPCEnfSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVfc3RhcnRfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8J30pOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VuZF90YWdfb3Blbl9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGlzQWxwaGEoZGF0YSkpIHsKCQkJdGhpcy5fdGVtcG9yYXJ5QnVmZmVyICs9IGRhdGE7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lbmRfdGFnX25hbWVfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8Lyd9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBzY3JpcHRfZGF0YV9lbmRfdGFnX25hbWVfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGFwcHJvcHJpYXRlID0gdG9rZW5pemVyLl9jdXJyZW50VG9rZW4gJiYgKHRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWUgPT09IHRoaXMuX3RlbXBvcmFyeUJ1ZmZlci50b0xvd2VyQ2FzZSgpKTsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGlzV2hpdGVzcGFjZShkYXRhKSAmJiBhcHByb3ByaWF0ZSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiA9IHt0eXBlOiAnRW5kVGFnJywgbmFtZTogJ3NjcmlwdCcsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICcvJyAmJiBhcHByb3ByaWF0ZSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiA9IHt0eXBlOiAnRW5kVGFnJywgbmFtZTogJ3NjcmlwdCcsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicgJiYgYXBwcm9wcmlhdGUpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4gPSB7dHlwZTogJ0VuZFRhZycsIG5hbWU6ICdzY3JpcHQnLCBkYXRhOiBbXSwgc2VsZkNsb3Npbmc6IGZhbHNlfTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIGlmIChpc0FscGhhKGRhdGEpKSB7CgkJCXRoaXMuX3RlbXBvcmFyeUJ1ZmZlciArPSBkYXRhOwoJCQlidWZmZXIuY29tbWl0KCk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJzwvJyArIHRoaXMuX3RlbXBvcmFyeUJ1ZmZlcn0pOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VzY2FwZV9zdGFydF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09ICctJykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnLSd9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZV9zdGFydF9kYXNoX3N0YXRlKTsKCQl9IGVsc2UgewoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VzY2FwZV9zdGFydF9kYXNoX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gJy0nKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICctJ30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9kYXNoX2Rhc2hfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICctJykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnLSd9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfZGFzaF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPCcpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfbGVzc190aGVuX3NpZ25fc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnXHVGRkZEJ30pOwoJCQlidWZmZXIuY29tbWl0KCk7CgkJfSBlbHNlIHsKCQkJdmFyIGNoYXJzID0gYnVmZmVyLm1hdGNoVW50aWwoJzx8LXxcdTAwMDAnKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogZGF0YSArIGNoYXJzfSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VzY2FwZWRfZGFzaF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICctJykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnLSd9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfZGFzaF9kYXNoX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc8JykgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9sZXNzX3RoZW5fc2lnbl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICdcdUZGRkQnfSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhfSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZXNjYXBlZF9kYXNoX2Rhc2hfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCdlb2YtaW4tc2NyaXB0Jyk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX2xlc3NfdGhlbl9zaWduX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnPid9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICdcdTAwMDAnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJ1x1RkZGRCd9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGF9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2VzY2FwZWRfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBzY3JpcHRfZGF0YV9lc2NhcGVkX2xlc3NfdGhlbl9zaWduX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gJy8nKSB7CgkJCXRoaXMuX3RlbXBvcmFyeUJ1ZmZlciA9ICcnOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9lbmRfdGFnX29wZW5fc3RhdGUpOwoJCX0gZWxzZSBpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnPCcgKyBkYXRhfSk7CgkJCXRoaXMuX3RlbXBvcmFyeUJ1ZmZlciA9IGRhdGE7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlX3N0YXJ0X3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnPCd9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VzY2FwZWRfZW5kX3RhZ19vcGVuX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgPSBkYXRhOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9lbmRfdGFnX25hbWVfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8Lyd9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2VzY2FwZWRfZW5kX3RhZ19uYW1lX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBhcHByb3ByaWF0ZSA9IHRva2VuaXplci5fY3VycmVudFRva2VuICYmICh0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5uYW1lID09PSB0aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKSk7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChpc1doaXRlc3BhY2UoZGF0YSkgJiYgYXBwcm9wcmlhdGUpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4gPSB7dHlwZTogJ0VuZFRhZycsIG5hbWU6ICdzY3JpcHQnLCBkYXRhOiBbXSwgc2VsZkNsb3Npbmc6IGZhbHNlfTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnLycgJiYgYXBwcm9wcmlhdGUpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4gPSB7dHlwZTogJ0VuZFRhZycsIG5hbWU6ICdzY3JpcHQnLCBkYXRhOiBbXSwgc2VsZkNsb3Npbmc6IGZhbHNlfTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nICYmICBhcHByb3ByaWF0ZSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiA9IHt0eXBlOiAnRW5kVGFnJywgbmFtZTogJ3NjcmlwdCcsIGRhdGE6IFtdLCBzZWxmQ2xvc2luZzogZmFsc2V9OwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCX0gZWxzZSBpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0aGlzLl90ZW1wb3JhcnlCdWZmZXIgKz0gZGF0YTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8LycgKyB0aGlzLl90ZW1wb3JhcnlCdWZmZXJ9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVfc3RhcnRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChpc1doaXRlc3BhY2UoZGF0YSkgfHwgZGF0YSA9PT0gJy8nIHx8IGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhfSk7CgkJCWlmICh0aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3NjcmlwdCcpCgkJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpOwoJCQllbHNlCgkJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc0FscGhhKGRhdGEpKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGF9KTsKCQkJdGhpcy5fdGVtcG9yYXJ5QnVmZmVyICs9IGRhdGE7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9IGVsc2UgewoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9lc2NhcGVkX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCdlb2YtaW4tc2NyaXB0Jyk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJy0nKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICctJ30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfZGFzaF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPCcpIHsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJzwnfSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9sZXNzX3RoYW5fc2lnbl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoJ2ludmFsaWQtY29kZXBvaW50Jyk7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICdcdUZGRkQnfSk7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhfSk7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfZGFzaF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoJ2VvZi1pbi1zY3JpcHQnKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnLScpIHsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJy0nfSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9kYXNoX2Rhc2hfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8J30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfbGVzc190aGFuX3NpZ25fc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCdpbnZhbGlkLWNvZGVwb2ludCcpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnXHVGRkZEJ30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGF9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfZGFzaF9kYXNoX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcignZW9mLWluLXNjcmlwdCcpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICctJykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnLSd9KTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc8J30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfbGVzc190aGFuX3NpZ25fc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6ICc+J30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCdpbnZhbGlkLWNvZGVwb2ludCcpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAnXHVGRkZEJ30pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGF9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZWRfbGVzc190aGFuX3NpZ25fc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSAnLycpIHsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJy8nfSk7CgkJCXRoaXMuX3RlbXBvcmFyeUJ1ZmZlciA9ICcnOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZV9lbmRfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNjcmlwdF9kYXRhX2RvdWJsZV9lc2NhcGVkX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2NyaXB0X2RhdGFfZG91YmxlX2VzY2FwZV9lbmRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChpc1doaXRlc3BhY2UoZGF0YSkgfHwgZGF0YSA9PT0gJy8nIHx8IGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiBkYXRhfSk7CgkJCWlmICh0aGlzLl90ZW1wb3JhcnlCdWZmZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3NjcmlwdCcpCgkJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2NyaXB0X2RhdGFfZXNjYXBlZF9zdGF0ZSk7CgkJCWVsc2UKCQkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc0FscGhhKGRhdGEpKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGF9KTsKCQkJdGhpcy5fdGVtcG9yYXJ5QnVmZmVyICs9IGRhdGE7CgkJCWJ1ZmZlci5jb21taXQoKTsKCQl9IGVsc2UgewoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShzY3JpcHRfZGF0YV9kb3VibGVfZXNjYXBlZF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIHRhZ19vcGVuX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiYmFyZS1sZXNzLXRoYW4tc2lnbi1hdC1lb2YiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJzwnfSk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbiA9IHt0eXBlOiAnU3RhcnRUYWcnLCBuYW1lOiBkYXRhLnRvTG93ZXJDYXNlKCksIGRhdGE6IFtdfTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHRhZ19uYW1lX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICchJykgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUobWFya3VwX2RlY2xhcmF0aW9uX29wZW5fc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJy8nKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjbG9zZV90YWdfb3Blbl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC10YWctbmFtZS1idXQtZ290LXJpZ2h0LWJyYWNrZXQiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogIjw+In0pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPycpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC10YWctbmFtZS1idXQtZ290LXF1ZXN0aW9uLW1hcmsiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfY29tbWVudF9zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC10YWctbmFtZSIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NoYXJhY3RlcnMnLCBkYXRhOiAiPCJ9KTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNsb3NlX3RhZ19vcGVuX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtY2xvc2luZy10YWctYnV0LWdvdC1lb2YiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4oe3R5cGU6ICdDaGFyYWN0ZXJzJywgZGF0YTogJzwvJ30pOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzQWxwaGEoZGF0YSkpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4gPSB7dHlwZTogJ0VuZFRhZycsIG5hbWU6IGRhdGEudG9Mb3dlckNhc2UoKSwgZGF0YTogW119OwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUodGFnX25hbWVfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtY2xvc2luZy10YWctYnV0LWdvdC1yaWdodC1icmFja2V0Iik7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWNsb3NpbmctdGFnLWJ1dC1nb3QtY2hhciIsIHtkYXRhOiBkYXRhfSk7IC8vIHBhcmFtIDEgaXMgZGF0YXZhcnM6CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJvZ3VzX2NvbW1lbnRfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiB0YWdfbmFtZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoJ2VvZi1pbi10YWctbmFtZScpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShkYXRhKSkgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzQWxwaGEoZGF0YSkpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4ubmFtZSArPSBkYXRhLnRvTG93ZXJDYXNlKCk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnLycpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5uYW1lICs9ICJcdUZGRkQiOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWUgKz0gZGF0YTsKCQl9CgkJYnVmZmVyLmNvbW1pdCgpOwoKCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBiZWZvcmVfYXR0cmlidXRlX25hbWVfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJleHBlY3RlZC1hdHRyaWJ1dGUtbmFtZS1idXQtZ290LWVvZiIpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShkYXRhKSkgewoJCQlyZXR1cm4gdHJ1ZTsKCQl9IGVsc2UgaWYgKGlzQWxwaGEoZGF0YSkpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YS5wdXNoKHtub2RlTmFtZTogZGF0YS50b0xvd2VyQ2FzZSgpLCBub2RlVmFsdWU6ICIifSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnLycpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIiciIHx8IGRhdGEgPT09ICciJyB8fCBkYXRhID09PSAnPScgfHwgZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jaGFyYWN0ZXItaW4tYXR0cmlidXRlLW5hbWUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YS5wdXNoKHtub2RlTmFtZTogZGF0YSwgbm9kZVZhbHVlOiAiIn0pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX25hbWVfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOiAiXHVGRkZEIiwgbm9kZVZhbHVlOiAiIn0pOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEucHVzaCh7bm9kZU5hbWU6IGRhdGEsIG5vZGVWYWx1ZTogIiJ9KTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gYXR0cmlidXRlX25hbWVfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCXZhciBsZWF2aW5nVGhpc1N0YXRlID0gdHJ1ZTsKCQl2YXIgc2hvdWxkRW1pdCA9IGZhbHNlOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tYXR0cmlidXRlLW5hbWUiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJCXNob3VsZEVtaXQgPSB0cnVlOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz0nKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfYXR0cmlidXRlX3ZhbHVlX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzQWxwaGEoZGF0YSkpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZU5hbWUgKz0gZGF0YS50b0xvd2VyQ2FzZSgpOwoJCQlsZWF2aW5nVGhpc1N0YXRlID0gZmFsc2U7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJc2hvdWxkRW1pdCA9IHRydWU7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICcvJykgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAiJyIgfHwgZGF0YSA9PT0gJyInKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jaGFyYWN0ZXItaW4tYXR0cmlidXRlLW5hbWUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZU5hbWUgKz0gZGF0YTsKCQkJbGVhdmluZ1RoaXNTdGF0ZSA9IGZhbHNlOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlTmFtZSArPSAiXHVGRkZEIjsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlTmFtZSArPSBkYXRhOwoJCQlsZWF2aW5nVGhpc1N0YXRlID0gZmFsc2U7CgkJfQoKCQlpZiAobGVhdmluZ1RoaXNTdGF0ZSkgewoJCQl2YXIgYXR0cmlidXRlcyA9IHRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGE7CgkJCXZhciBjdXJyZW50QXR0cmlidXRlID0gYXR0cmlidXRlc1thdHRyaWJ1dGVzLmxlbmd0aCAtIDFdOwoJCQlmb3IgKHZhciBpID0gYXR0cmlidXRlcy5sZW5ndGggLSAyOyBpID49IDA7IGktLSkgewoJCQkJaWYgKGN1cnJlbnRBdHRyaWJ1dGUubm9kZU5hbWUgPT09IGF0dHJpYnV0ZXNbaV0ubm9kZU5hbWUpIHsKCQkJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImR1cGxpY2F0ZS1hdHRyaWJ1dGUiLCB7bmFtZTogY3VycmVudEF0dHJpYnV0ZS5ub2RlTmFtZX0pOwoJCQkJCWN1cnJlbnRBdHRyaWJ1dGUubm9kZU5hbWUgPSBudWxsOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmIChzaG91bGRFbWl0KQoJCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIHsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBhZnRlcl9hdHRyaWJ1dGVfbmFtZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWVuZC1vZi10YWctYnV0LWdvdC1lb2YiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJcmV0dXJuIHRydWU7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPScpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfdmFsdWVfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCX0gZWxzZSBpZiAoaXNBbHBoYShkYXRhKSkgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOiBkYXRhLCBub2RlVmFsdWU6ICIifSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnLycpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKHNlbGZfY2xvc2luZ190YWdfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIiciIHx8IGRhdGEgPT09ICciJyB8fCBkYXRhID09PSAnPCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNoYXJhY3Rlci1hZnRlci1hdHRyaWJ1dGUtbmFtZSIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhLnB1c2goe25vZGVOYW1lOiBkYXRhLCBub2RlVmFsdWU6ICIifSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEucHVzaCh7bm9kZU5hbWU6ICJcdUZGRkQiLCBub2RlVmFsdWU6ICIifSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YS5wdXNoKHtub2RlTmFtZTogZGF0YSwgbm9kZVZhbHVlOiAiIn0pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX25hbWVfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBiZWZvcmVfYXR0cmlidXRlX3ZhbHVlX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtYXR0cmlidXRlLXZhbHVlLWJ1dC1nb3QtZW9mIik7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKGRhdGEpKSB7CgkJCXJldHVybiB0cnVlOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJyInKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfdmFsdWVfZG91YmxlX3F1b3RlZF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnJicpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGF0dHJpYnV0ZV92YWx1ZV91bnF1b3RlZF9zdGF0ZSk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICInIikgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX3ZhbHVlX3NpbmdsZV9xdW90ZWRfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtYXR0cmlidXRlLXZhbHVlLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc9JyB8fCBkYXRhID09PSAnPCcgfHwgZGF0YSA9PT0gJ2AnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tdW5xdW90ZWQtYXR0cmlidXRlLXZhbHVlIik7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSBkYXRhOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX3ZhbHVlX3VucXVvdGVkX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICdcdTAwMDAnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZVZhbHVlICs9ICJcdUZGRkQiOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSBkYXRhOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX3ZhbHVlX3VucXVvdGVkX3N0YXRlKTsKCQl9CgoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGF0dHJpYnV0ZV92YWx1ZV9kb3VibGVfcXVvdGVkX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWF0dHJpYnV0ZS12YWx1ZS1kb3VibGUtcXVvdGUiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnIicpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnJicpIHsKCQkJdGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAnIic7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSAiXHVGRkZEIjsKCQl9IGVsc2UgewoJCQl2YXIgcyA9IGJ1ZmZlci5tYXRjaFVudGlsKCdbXDAiJl0nKTsKCQkJZGF0YSA9IGRhdGEgKyBzOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRBdHRyaWJ1dGUoKS5ub2RlVmFsdWUgKz0gZGF0YTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gYXR0cmlidXRlX3ZhbHVlX3NpbmdsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tYXR0cmlidXRlLXZhbHVlLXNpbmdsZS1xdW90ZSIpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICInIikgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYWZ0ZXJfYXR0cmlidXRlX3ZhbHVlX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICcmJykgewoJCQl0aGlzLl9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9ICInIjsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGNoYXJhY3Rlcl9yZWZlcmVuY2VfaW5fYXR0cmlidXRlX3ZhbHVlX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICdcdTAwMDAnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50QXR0cmlidXRlKCkubm9kZVZhbHVlICs9ICJcdUZGRkQiOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSBkYXRhICsgYnVmZmVyLm1hdGNoVW50aWwoIlx1MDAwMHxbJyZdIik7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGF0dHJpYnV0ZV92YWx1ZV91bnF1b3RlZF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1hZnRlci1hdHRyaWJ1dGUtdmFsdWUiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnJicpIHsKCQkJdGhpcy5fYWRkaXRpb25hbEFsbG93ZWRDaGFyYWN0ZXIgPSAiPiI7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjaGFyYWN0ZXJfcmVmZXJlbmNlX2luX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnIicgfHwgZGF0YSA9PT0gIiciIHx8IGRhdGEgPT09ICc9JyB8fCBkYXRhID09PSAnYCcgfHwgZGF0YSA9PT0gJzwnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tdW5xdW90ZWQtYXR0cmlidXRlLXZhbHVlIik7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSBkYXRhOwoJCQlidWZmZXIuY29tbWl0KCk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSAiXHVGRkZEIjsKCQl9IGVsc2UgewoJCQl2YXIgbyA9IGJ1ZmZlci5tYXRjaFVudGlsKCJcdTAwMDB8WyIrICJcdFxuXHZcZlx4MjBcciIgKyAiJjw+XCInPWAiICsiXSIpOwoJCQlpZiAobyA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1hdHRyaWJ1dGUtdmFsdWUtbm8tcXVvdGVzIik7CgkJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJfQoJCQlidWZmZXIuY29tbWl0KCk7CgkJCXRva2VuaXplci5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSBkYXRhICsgbzsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gY2hhcmFjdGVyX3JlZmVyZW5jZV9pbl9hdHRyaWJ1dGVfdmFsdWVfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGNoYXJhY3RlciA9IEVudGl0eVBhcnNlci5jb25zdW1lRW50aXR5KGJ1ZmZlciwgdG9rZW5pemVyLCB0aGlzLl9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3Rlcik7CgkJdGhpcy5fY3VycmVudEF0dHJpYnV0ZSgpLm5vZGVWYWx1ZSArPSBjaGFyYWN0ZXIgfHwgJyYnOwoJCWlmICh0aGlzLl9hZGRpdGlvbmFsQWxsb3dlZENoYXJhY3RlciA9PT0gJyInKQoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX3ZhbHVlX2RvdWJsZV9xdW90ZWRfc3RhdGUpOwoJCWVsc2UgaWYgKHRoaXMuX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09PSAnXCcnKQoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYXR0cmlidXRlX3ZhbHVlX3NpbmdsZV9xdW90ZWRfc3RhdGUpOwoJCWVsc2UgaWYgKHRoaXMuX2FkZGl0aW9uYWxBbGxvd2VkQ2hhcmFjdGVyID09PSAnPicpCgkJCXRva2VuaXplci5zZXRTdGF0ZShhdHRyaWJ1dGVfdmFsdWVfdW5xdW90ZWRfc3RhdGUpOwoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGFmdGVyX2F0dHJpYnV0ZV92YWx1ZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1hZnRlci1hdHRyaWJ1dGUtdmFsdWUiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICcvJykgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXJhY3Rlci1hZnRlci1hdHRyaWJ1dGUtdmFsdWUiKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2F0dHJpYnV0ZV9uYW1lX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gc2VsZl9jbG9zaW5nX3RhZ19zdGF0ZShidWZmZXIpIHsKCQl2YXIgYyA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGMgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW9mLWFmdGVyLXNvbGlkdXMtaW4tdGFnIik7CgkJCWJ1ZmZlci51bmdldChjKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoYyA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLnNlbGZDbG9zaW5nID0gdHJ1ZTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWFmdGVyLXNvbGlkdXMtaW4tdGFnIik7CgkJCWJ1ZmZlci51bmdldChjKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9hdHRyaWJ1dGVfbmFtZV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGJvZ3VzX2NvbW1lbnRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIubWF0Y2hVbnRpbCgnPicpOwoJCWRhdGEgPSBkYXRhLnJlcGxhY2UoL1x1MDAwMC9nLCAiXHVGRkZEIik7CgkJYnVmZmVyLmNoYXIoKTsKCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih7dHlwZTogJ0NvbW1lbnQnLCBkYXRhOiBkYXRhfSk7CgkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIG1hcmt1cF9kZWNsYXJhdGlvbl9vcGVuX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBjaGFycyA9IGJ1ZmZlci5zaGlmdCgyKTsKCQlpZiAoY2hhcnMgPT09ICctLScpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4gPSB7dHlwZTogJ0NvbW1lbnQnLCBkYXRhOiAnJ307CgkJCXRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X3N0YXJ0X3N0YXRlKTsKCQl9IGVsc2UgewoJCQl2YXIgbmV3Y2hhcnMgPSBidWZmZXIuc2hpZnQoNSk7CgkJCWlmIChuZXdjaGFycyA9PT0gSW5wdXRTdHJlYW0uRU9GIHx8IGNoYXJzID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtZGFzaGVzLW9yLWRvY3R5cGUiKTsKCQkJCXRva2VuaXplci5zZXRTdGF0ZShib2d1c19jb21tZW50X3N0YXRlKTsKCQkJCWJ1ZmZlci51bmdldChjaGFycyk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoKCQkJY2hhcnMgKz0gbmV3Y2hhcnM7CgkJCWlmIChjaGFycy50b1VwcGVyQ2FzZSgpID09PSAnRE9DVFlQRScpIHsKCQkJCXRva2VuaXplci5fY3VycmVudFRva2VuID0ge3R5cGU6ICdEb2N0eXBlJywgbmFtZTogJycsIHB1YmxpY0lkOiBudWxsLCBzeXN0ZW1JZDogbnVsbCwgZm9yY2VRdWlya3M6IGZhbHNlfTsKCQkJCXRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX3N0YXRlKTsKCQkJfSBlbHNlIGlmICh0b2tlbml6ZXIuX3Rva2VuSGFuZGxlci5pc0NkYXRhU2VjdGlvbkFsbG93ZWQoKSAmJiBjaGFycyA9PT0gJ1tDREFUQVsnKSB7CgkJCQl0b2tlbml6ZXIuc2V0U3RhdGUoY2RhdGFfc2VjdGlvbl9zdGF0ZSk7CgkJCX0gZWxzZSB7CgkJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWRhc2hlcy1vci1kb2N0eXBlIik7CgkJCQlidWZmZXIudW5nZXQoY2hhcnMpOwoJCQkJdG9rZW5pemVyLnNldFN0YXRlKGJvZ3VzX2NvbW1lbnRfc3RhdGUpOwoJCQl9CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNkYXRhX3NlY3Rpb25fc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIubWF0Y2hVbnRpbCgnXV0+Jyk7CgkJYnVmZmVyLnNoaWZ0KDMpOwoJCWlmIChkYXRhKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHt0eXBlOiAnQ2hhcmFjdGVycycsIGRhdGE6IGRhdGF9KTsKCQl9CgkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNvbW1lbnRfc3RhcnRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tY29tbWVudCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbik7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJy0nKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X3N0YXJ0X2Rhc2hfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW5jb3JyZWN0LWNvbW1lbnQiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4odG9rZW5pemVyLl9jdXJyZW50VG9rZW4pOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEgKz0gIlx1RkZGRCI7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YSArPSBkYXRhOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNvbW1lbnRfc3RhcnRfZGFzaF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1jb21tZW50Iik7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHRva2VuaXplci5fY3VycmVudFRva2VuKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnLScpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGNvbW1lbnRfZW5kX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImluY29ycmVjdC1jb21tZW50Iik7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHRva2VuaXplci5fY3VycmVudFRva2VuKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJ1x1MDAwMCcpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJpbnZhbGlkLWNvZGVwb2ludCIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhICs9ICJcdUZGRkQiOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEgKz0gJy0nICsgZGF0YTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGNvbW1lbnRfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBjb21tZW50X3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWNvbW1lbnQiKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4odG9rZW5pemVyLl9jdXJyZW50VG9rZW4pOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICctJykgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9lbmRfZGFzaF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEgKz0gIlx1RkZGRCI7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YSArPSBkYXRhOwoJCQlidWZmZXIuY29tbWl0KCk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNvbW1lbnRfZW5kX2Rhc2hfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tY29tbWVudC1lbmQtZGFzaCIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbik7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJy0nKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X2VuZF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnXHUwMDAwJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImludmFsaWQtY29kZXBvaW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEgKz0gIi1cdUZGRkQiOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YSArPSAnLScgKyBkYXRhICsgYnVmZmVyLm1hdGNoVW50aWwoJ1x1MDAwMHwtJyk7CgkJCWJ1ZmZlci5jaGFyKCk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNvbW1lbnRfZW5kX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWNvbW1lbnQtZG91YmxlLWRhc2giKTsKCQkJdG9rZW5pemVyLl9lbWl0VG9rZW4odG9rZW5pemVyLl9jdXJyZW50VG9rZW4pOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbik7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICchJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtYmFuZy1hZnRlci1kb3VibGUtZGFzaC1pbi1jb21tZW50Iik7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X2VuZF9iYW5nX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICctJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZGFzaC1hZnRlci1kb3VibGUtZGFzaC1pbi1jb21tZW50Iik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEgKz0gZGF0YTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICdcdTAwMDAnKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZGF0YSArPSAiLS1cdUZGRkQiOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItaW4tY29tbWVudCIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhICs9ICctLScgKyBkYXRhOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoY29tbWVudF9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGNvbW1lbnRfZW5kX2Jhbmdfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tY29tbWVudC1lbmQtYmFuZy1zdGF0ZSIpOwoJCQl0b2tlbml6ZXIuX2VtaXRUb2tlbih0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbik7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fZW1pdFRva2VuKHRva2VuaXplci5fY3VycmVudFRva2VuKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJy0nKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmRhdGEgKz0gJy0tISc7CgkJCXRva2VuaXplci5zZXRTdGF0ZShjb21tZW50X2VuZF9kYXNoX3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5kYXRhICs9ICctLSEnICsgZGF0YTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGNvbW1lbnRfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBkb2N0eXBlX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtZG9jdHlwZS1uYW1lLWJ1dC1nb3QtZW9mIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCX0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKGRhdGEpKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfZG9jdHlwZV9uYW1lX3N0YXRlKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoIm5lZWQtc3BhY2UtYWZ0ZXItZG9jdHlwZSIpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfZG9jdHlwZV9uYW1lX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gYmVmb3JlX2RvY3R5cGVfbmFtZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImV4cGVjdGVkLWRvY3R5cGUtbmFtZS1idXQtZ290LWVvZiIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShkYXRhKSkgewoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtZG9jdHlwZS1uYW1lLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIHsKCQkJaWYgKGlzQWxwaGEoZGF0YSkpCgkJCQlkYXRhID0gZGF0YS50b0xvd2VyQ2FzZSgpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5uYW1lID0gZGF0YTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfbmFtZV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGRvY3R5cGVfbmFtZV9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZS1uYW1lIik7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGFmdGVyX2RvY3R5cGVfbmFtZV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgewoJCQlpZiAoaXNBbHBoYShkYXRhKSkKCQkJCWRhdGEgPSBkYXRhLnRvTG93ZXJDYXNlKCk7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLm5hbWUgKz0gZGF0YTsKCQkJYnVmZmVyLmNvbW1pdCgpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBhZnRlcl9kb2N0eXBlX25hbWVfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShkYXRhKSkgewoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIHsKCQkJaWYgKFsncCcsICdQJ10uaW5kZXhPZihkYXRhKSA+IC0xKSB7CgkJCQl2YXIgZXhwZWN0ZWQgPSBbWyd1JywgJ1UnXSwgWydiJywgJ0InXSwgWydsJywgJ0wnXSwgWydpJywgJ0knXSwgWydjJywgJ0MnXV07CgkJCQl2YXIgbWF0Y2hlZCA9IGV4cGVjdGVkLmV2ZXJ5KGZ1bmN0aW9uKGV4cGVjdGVkKXsKCQkJCQlkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQkJCQlyZXR1cm4gZXhwZWN0ZWQuaW5kZXhPZihkYXRhKSA+IC0xOwoJCQkJfSk7CgkJCQlpZiAobWF0Y2hlZCkgewoJCQkJCXRva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX3B1YmxpY19rZXl3b3JkX3N0YXRlKTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJfSBlbHNlIGlmIChbJ3MnLCAnUyddLmluZGV4T2YoZGF0YSkgPiAtMSkgewoJCQkJdmFyIGV4cGVjdGVkID0gW1sneScsICdZJ10sIFsncycsICdTJ10sIFsndCcsICdUJ10sIFsnZScsICdFJ10sIFsnbScsICdNJ11dOwoJCQkJdmFyIG1hdGNoZWQgPSBleHBlY3RlZC5ldmVyeShmdW5jdGlvbihleHBlY3RlZCl7CgkJCQkJZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJCQkJcmV0dXJuIGV4cGVjdGVkLmluZGV4T2YoZGF0YSkgPiAtMTsKCQkJCX0pOwoJCQkJaWYgKG1hdGNoZWQpIHsKCQkJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYWZ0ZXJfZG9jdHlwZV9zeXN0ZW1fa2V5d29yZF9zdGF0ZSk7CgkJCQkJcmV0dXJuIHRydWU7CgkJCQl9CgkJCX0KCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgoJCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIik7CgkJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJfSBlbHNlIHsKCQkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZXhwZWN0ZWQtc3BhY2Utb3ItcmlnaHQtYnJhY2tldC1pbi1kb2N0eXBlIiwge2RhdGE6IGRhdGF9KTsKCQkJCXRva2VuaXplci5zZXRTdGF0ZShib2d1c19kb2N0eXBlX3N0YXRlKTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBhZnRlcl9kb2N0eXBlX3B1YmxpY19rZXl3b3JkX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9kb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICInIiB8fCBkYXRhID09PSAnIicpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItaW4tZG9jdHlwZSIpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2RvY3R5cGVfcHVibGljX2lkZW50aWZpZXJfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBiZWZvcmVfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCX0gZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKGRhdGEpKSB7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnIicpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJzsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfcHVibGljX2lkZW50aWZpZXJfZG91YmxlX3F1b3RlZF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAiJyIpIHsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4ucHVibGljSWQgPSAnJzsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfcHVibGljX2lkZW50aWZpZXJfc2luZ2xlX3F1b3RlZF9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC1vZi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1pbi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJvZ3VzX2RvY3R5cGVfc3RhdGUpOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBkb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX2RvdWJsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICciJykgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYWZ0ZXJfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC1vZi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSBkYXRhOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBkb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3NpbmdsZV9xdW90ZWRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICInIikgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYWZ0ZXJfZG9jdHlwZV9wdWJsaWNfaWRlbnRpZmllcl9zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC1vZi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5wdWJsaWNJZCArPSBkYXRhOwoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBhZnRlcl9kb2N0eXBlX3B1YmxpY19pZGVudGlmaWVyX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJldHdlZW5fZG9jdHlwZV9wdWJsaWNfYW5kX3N5c3RlbV9pZGVudGlmaWVyc19zdGF0ZSk7CgkJfSBlbHNlIGlmIChkYXRhID09PSAnPicpIHsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICciJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1pbi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX2RvdWJsZV9xdW90ZWRfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIiciKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uc3lzdGVtSWQgPSAnJzsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc2luZ2xlX3F1b3RlZF9zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItaW4tZG9jdHlwZSIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCXRva2VuaXplci5zZXRTdGF0ZShib2d1c19kb2N0eXBlX3N0YXRlKTsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJZnVuY3Rpb24gYmV0d2Vlbl9kb2N0eXBlX3B1YmxpY19hbmRfc3lzdGVtX2lkZW50aWZpZXJzX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJyInKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX2RvdWJsZV9xdW90ZWRfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIiciKSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkID0gJyc7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3NpbmdsZV9xdW90ZWRfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGFmdGVyX2RvY3R5cGVfc3lzdGVtX2tleXdvcmRfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShkYXRhKSkgewoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYmVmb3JlX2RvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIiciIHx8IGRhdGEgPT09ICciJykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1pbi1kb2N0eXBlIik7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGJlZm9yZV9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKTsKCQl9IGVsc2UgewoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShiZWZvcmVfZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGJlZm9yZV9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKGJ1ZmZlcikgewoJCXZhciBkYXRhID0gYnVmZmVyLmNoYXIoKTsKCQlpZiAoZGF0YSA9PT0gSW5wdXRTdHJlYW0uRU9GKSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigiZW9mLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIGlmIChpc1doaXRlc3BhY2UoZGF0YSkpIHsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICciJykgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9kb3VibGVfcXVvdGVkX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICInIikgewoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5zeXN0ZW1JZCA9ICcnOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZG9jdHlwZV9zeXN0ZW1faWRlbnRpZmllcl9zaW5nbGVfcXVvdGVkX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLW9mLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fcGFyc2VFcnJvcigidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGRvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfZG91YmxlX3F1b3RlZF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJyInKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLW9mLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkICs9IGRhdGE7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGRvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc2luZ2xlX3F1b3RlZF9zdGF0ZShidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci5jaGFyKCk7CgkJaWYgKGRhdGEgPT09IElucHV0U3RyZWFtLkVPRikgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoImVvZi1pbi1kb2N0eXBlIik7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTsKCQkJdG9rZW5pemVyLl9lbWl0Q3VycmVudFRva2VuKCk7CgkJCWJ1ZmZlci51bmdldChkYXRhKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gIiciKSB7CgkJCXRva2VuaXplci5zZXRTdGF0ZShhZnRlcl9kb2N0eXBlX3N5c3RlbV9pZGVudGlmaWVyX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGRhdGEgPT09ICc+JykgewoJCQl0b2tlbml6ZXIuX3BhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLW9mLWRvY3R5cGUiKTsKCQkJdG9rZW5pemVyLl9jdXJyZW50VG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSB7CgkJCXRva2VuaXplci5fY3VycmVudFRva2VuLnN5c3RlbUlkICs9IGRhdGE7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGFmdGVyX2RvY3R5cGVfc3lzdGVtX2lkZW50aWZpZXJfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJlb2YtaW4tZG9jdHlwZSIpOwoJCQl0b2tlbml6ZXIuX2N1cnJlbnRUb2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCQlidWZmZXIudW5nZXQoZGF0YSk7CgkJCXRva2VuaXplci5zZXRTdGF0ZShkYXRhX3N0YXRlKTsKCQl9IGVsc2UgaWYgKGlzV2hpdGVzcGFjZShkYXRhKSkgewoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfSBlbHNlIHsKCQkJdG9rZW5pemVyLl9wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItaW4tZG9jdHlwZSIpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoYm9ndXNfZG9jdHlwZV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCWZ1bmN0aW9uIGJvZ3VzX2RvY3R5cGVfc3RhdGUoYnVmZmVyKSB7CgkJdmFyIGRhdGEgPSBidWZmZXIuY2hhcigpOwoJCWlmIChkYXRhID09PSBJbnB1dFN0cmVhbS5FT0YpIHsKCQkJYnVmZmVyLnVuZ2V0KGRhdGEpOwoJCQl0b2tlbml6ZXIuX2VtaXRDdXJyZW50VG9rZW4oKTsKCQkJdG9rZW5pemVyLnNldFN0YXRlKGRhdGFfc3RhdGUpOwoJCX0gZWxzZSBpZiAoZGF0YSA9PT0gJz4nKSB7CgkJCXRva2VuaXplci5fZW1pdEN1cnJlbnRUb2tlbigpOwoJCQl0b2tlbml6ZXIuc2V0U3RhdGUoZGF0YV9zdGF0ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQp9OwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KFRva2VuaXplci5wcm90b3R5cGUsICdsaW5lTnVtYmVyJywgewoJZ2V0OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5faW5wdXRTdHJlYW0ubG9jYXRpb24oKS5saW5lOwoJfQp9KTsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbml6ZXIucHJvdG90eXBlLCAnY29sdW1uTnVtYmVyJywgewoJZ2V0OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5faW5wdXRTdHJlYW0ubG9jYXRpb24oKS5jb2x1bW47Cgl9Cn0pOwoKZXhwb3J0cy5Ub2tlbml6ZXIgPSBUb2tlbml6ZXI7Cgp9LAp7Ii4vRW50aXR5UGFyc2VyIjoyLCIuL0lucHV0U3RyZWFtIjozfV0sCjY6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewp2YXIgYXNzZXJ0ID0gX2RlcmVxXygnYXNzZXJ0Jyk7Cgp2YXIgbWVzc2FnZXMgPSBfZGVyZXFfKCcuL21lc3NhZ2VzLmpzb24nKTsKdmFyIGNvbnN0YW50cyA9IF9kZXJlcV8oJy4vY29uc3RhbnRzJyk7Cgp2YXIgRXZlbnRFbWl0dGVyID0gX2RlcmVxXygnZXZlbnRzJykuRXZlbnRFbWl0dGVyOwoKdmFyIFRva2VuaXplciA9IF9kZXJlcV8oJy4vVG9rZW5pemVyJykuVG9rZW5pemVyOwp2YXIgRWxlbWVudFN0YWNrID0gX2RlcmVxXygnLi9FbGVtZW50U3RhY2snKS5FbGVtZW50U3RhY2s7CnZhciBTdGFja0l0ZW0gPSBfZGVyZXFfKCcuL1N0YWNrSXRlbScpLlN0YWNrSXRlbTsKCnZhciBNYXJrZXIgPSB7fTsKCmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjaCkgewoJcmV0dXJuIGNoID09PSAiICIgfHwgY2ggPT09ICJcbiIgfHwgY2ggPT09ICJcdCIgfHwgY2ggPT09ICJcciIgfHwgY2ggPT09ICJcZiI7Cn0KCmZ1bmN0aW9uIGlzV2hpdGVzcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXIoY2gpIHsKCXJldHVybiBpc1doaXRlc3BhY2UoY2gpIHx8IGNoID09PSAnXHVGRkZEJzsKfQoKZnVuY3Rpb24gaXNBbGxXaGl0ZXNwYWNlKGNoYXJhY3RlcnMpIHsKCWZvciAodmFyIGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7IGkrKykgewoJCXZhciBjaCA9IGNoYXJhY3RlcnNbaV07CgkJaWYgKCFpc1doaXRlc3BhY2UoY2gpKQoJCQlyZXR1cm4gZmFsc2U7Cgl9CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gaXNBbGxXaGl0ZXNwYWNlT3JSZXBsYWNlbWVudENoYXJhY3RlcnMoY2hhcmFjdGVycykgewoJZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFyYWN0ZXJzLmxlbmd0aDsgaSsrKSB7CgkJdmFyIGNoID0gY2hhcmFjdGVyc1tpXTsKCQlpZiAoIWlzV2hpdGVzcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXIoY2gpKQoJCQlyZXR1cm4gZmFsc2U7Cgl9CglyZXR1cm4gdHJ1ZTsKfQoKZnVuY3Rpb24gZ2V0QXR0cmlidXRlKG5vZGUsIG5hbWUpIHsKCWZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7CgkJdmFyIGF0dHJpYnV0ZSA9IG5vZGUuYXR0cmlidXRlc1tpXTsKCQlpZiAoYXR0cmlidXRlLm5vZGVOYW1lID09PSBuYW1lKSB7CgkJCXJldHVybiBhdHRyaWJ1dGU7CgkJfQoJfQoJcmV0dXJuIG51bGw7Cn0KCmZ1bmN0aW9uIENoYXJhY3RlckJ1ZmZlcihjaGFyYWN0ZXJzKSB7Cgl0aGlzLmNoYXJhY3RlcnMgPSBjaGFyYWN0ZXJzOwoJdGhpcy5jdXJyZW50ID0gMDsKCXRoaXMuZW5kID0gdGhpcy5jaGFyYWN0ZXJzLmxlbmd0aDsKfQoKQ2hhcmFjdGVyQnVmZmVyLnByb3RvdHlwZS5za2lwQXRNb3N0T25lTGVhZGluZ05ld2xpbmUgPSBmdW5jdGlvbigpIHsKCWlmICh0aGlzLmNoYXJhY3RlcnNbdGhpcy5jdXJyZW50XSA9PT0gJ1xuJykKCQl0aGlzLmN1cnJlbnQrKzsKfTsKCkNoYXJhY3RlckJ1ZmZlci5wcm90b3R5cGUuc2tpcExlYWRpbmdXaGl0ZXNwYWNlID0gZnVuY3Rpb24oKSB7Cgl3aGlsZSAoaXNXaGl0ZXNwYWNlKHRoaXMuY2hhcmFjdGVyc1t0aGlzLmN1cnJlbnRdKSkgewoJCWlmICgrK3RoaXMuY3VycmVudCA9PSB0aGlzLmVuZCkKCQkJcmV0dXJuOwoJfQp9OwoKQ2hhcmFjdGVyQnVmZmVyLnByb3RvdHlwZS5za2lwTGVhZGluZ05vbldoaXRlc3BhY2UgPSBmdW5jdGlvbigpIHsKCXdoaWxlICghaXNXaGl0ZXNwYWNlKHRoaXMuY2hhcmFjdGVyc1t0aGlzLmN1cnJlbnRdKSkgewoJCWlmICgrK3RoaXMuY3VycmVudCA9PSB0aGlzLmVuZCkKCQkJcmV0dXJuOwoJfQp9OwoKQ2hhcmFjdGVyQnVmZmVyLnByb3RvdHlwZS50YWtlUmVtYWluaW5nID0gZnVuY3Rpb24oKSB7CglyZXR1cm4gdGhpcy5jaGFyYWN0ZXJzLnN1YnN0cmluZyh0aGlzLmN1cnJlbnQpOwp9OwoKQ2hhcmFjdGVyQnVmZmVyLnByb3RvdHlwZS50YWtlTGVhZGluZ1doaXRlc3BhY2UgPSBmdW5jdGlvbigpIHsKCXZhciBzdGFydCA9IHRoaXMuY3VycmVudDsKCXRoaXMuc2tpcExlYWRpbmdXaGl0ZXNwYWNlKCk7CglpZiAoc3RhcnQgPT09IHRoaXMuY3VycmVudCkKCQlyZXR1cm4gIiI7CglyZXR1cm4gdGhpcy5jaGFyYWN0ZXJzLnN1YnN0cmluZyhzdGFydCwgdGhpcy5jdXJyZW50IC0gc3RhcnQpOwp9OwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KENoYXJhY3RlckJ1ZmZlci5wcm90b3R5cGUsICdsZW5ndGgnLCB7CglnZXQ6IGZ1bmN0aW9uKCl7CgkJcmV0dXJuIHRoaXMuZW5kIC0gdGhpcy5jdXJyZW50OwoJfQp9KTsKZnVuY3Rpb24gVHJlZUJ1aWxkZXIoKSB7Cgl0aGlzLnRva2VuaXplciA9IG51bGw7Cgl0aGlzLmVycm9ySGFuZGxlciA9IG51bGw7Cgl0aGlzLnNjcmlwdGluZ0VuYWJsZWQgPSBmYWxzZTsKCXRoaXMuZG9jdW1lbnQgPSBudWxsOwoJdGhpcy5oZWFkID0gbnVsbDsKCXRoaXMuZm9ybSA9IG51bGw7Cgl0aGlzLm9wZW5FbGVtZW50cyA9IG5ldyBFbGVtZW50U3RhY2soKTsKCXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gW107Cgl0aGlzLmluc2VydGlvbk1vZGUgPSBudWxsOwoJdGhpcy5pbnNlcnRpb25Nb2RlTmFtZSA9ICIiOwoJdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSAiIjsKCXRoaXMuaW5RdWlya3NNb2RlID0gZmFsc2U7IC8vIFRPRE8gcXVpcmtzIG1vZGUKCXRoaXMuY29tcGF0TW9kZSA9ICJubyBxdWlya3MiOwoJdGhpcy5mcmFtZXNldE9rID0gdHJ1ZTsKCXRoaXMucmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudCA9IGZhbHNlOwoJdGhpcy5zZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQgPSBmYWxzZTsKCXRoaXMuY29udGV4dCA9ICIiOwoJdGhpcy5wZW5kaW5nVGFibGVDaGFyYWN0ZXJzID0gW107Cgl0aGlzLnNob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IGZhbHNlOwoKCXZhciB0cmVlID0gdGhpczsKCXZhciBtb2RlcyA9IHRoaXMuaW5zZXJ0aW9uTW9kZXMgPSB7fTsKCW1vZGVzLmJhc2UgPSB7CgkJZW5kX3RhZ19oYW5kbGVyczogeyItZGVmYXVsdCI6ICdlbmRUYWdPdGhlcid9LAoJCXN0YXJ0X3RhZ19oYW5kbGVyczogeyItZGVmYXVsdCI6ICdzdGFydFRhZ090aGVyJ30sCgkJcHJvY2Vzc0VPRjogZnVuY3Rpb24oKSB7CgkJCXRyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwoJCQlpZiAodHJlZS5vcGVuRWxlbWVudHMubGVuZ3RoID4gMikgewoJCQkJdHJlZS5wYXJzZUVycm9yKCdleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LWVvZicpOwoJCQl9IGVsc2UgaWYgKHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aCA9PSAyICYmCgkJCQl0cmVlLm9wZW5FbGVtZW50cy5pdGVtKDEpLmxvY2FsTmFtZSAhPSAnYm9keScpIHsKCQkJCXRyZWUucGFyc2VFcnJvcignZXhwZWN0ZWQtY2xvc2luZy10YWctYnV0LWdvdC1lb2YnKTsKCQkJfSBlbHNlIGlmICh0cmVlLmNvbnRleHQgJiYgdHJlZS5vcGVuRWxlbWVudHMubGVuZ3RoID4gMSkgewoJCQl9CgkJfSwKCQlwcm9jZXNzQ29tbWVudDogZnVuY3Rpb24oZGF0YSkgewoJCQl0cmVlLmluc2VydENvbW1lbnQoZGF0YSwgdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubm9kZSk7CgkJfSwKCQlwcm9jZXNzRG9jdHlwZTogZnVuY3Rpb24obmFtZSwgcHVibGljSWQsIHN5c3RlbUlkLCBmb3JjZVF1aXJrcykgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZG9jdHlwZScpOwoJCX0sCgkJcHJvY2Vzc1N0YXJ0VGFnOiBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCQlpZiAodGhpc1t0aGlzLnN0YXJ0X3RhZ19oYW5kbGVyc1tuYW1lXV0pIHsKCQkJCXRoaXNbdGhpcy5zdGFydF90YWdfaGFuZGxlcnNbbmFtZV1dKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKTsKCQkJfSBlbHNlIGlmICh0aGlzW3RoaXMuc3RhcnRfdGFnX2hhbmRsZXJzWyItZGVmYXVsdCJdXSkgewoJCQkJdGhpc1t0aGlzLnN0YXJ0X3RhZ19oYW5kbGVyc1siLWRlZmF1bHQiXV0obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJCQl9IGVsc2UgewoJCQkJdGhyb3cobmV3IEVycm9yKCJObyBoYW5kbGVyIGZvdW5kIGZvciAiK25hbWUpKTsKCQkJfQoJCX0sCgkJcHJvY2Vzc0VuZFRhZzogZnVuY3Rpb24obmFtZSkgewoJCQlpZiAodGhpc1t0aGlzLmVuZF90YWdfaGFuZGxlcnNbbmFtZV1dKSB7CgkJCQl0aGlzW3RoaXMuZW5kX3RhZ19oYW5kbGVyc1tuYW1lXV0obmFtZSk7CgkJCX0gZWxzZSBpZiAodGhpc1t0aGlzLmVuZF90YWdfaGFuZGxlcnNbIi1kZWZhdWx0Il1dKSB7CgkJCQl0aGlzW3RoaXMuZW5kX3RhZ19oYW5kbGVyc1siLWRlZmF1bHQiXV0obmFtZSk7CgkJCX0gZWxzZSB7CgkJCQl0aHJvdyhuZXcgRXJyb3IoIk5vIGhhbmRsZXIgZm91bmQgZm9yICIrbmFtZSkpOwoJCQl9CgkJfSwKCQlzdGFydFRhZ0h0bWw6IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQkJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnSHRtbChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl9Cgl9OwoKCW1vZGVzLmluaXRpYWwgPSBPYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpOwoKCW1vZGVzLmluaXRpYWwucHJvY2Vzc0VPRiA9IGZ1bmN0aW9uKCkgewoJCXRyZWUucGFyc2VFcnJvcigiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LWVvZiIpOwoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKTsKCX07CgoJbW9kZXMuaW5pdGlhbC5wcm9jZXNzQ29tbWVudCA9IGZ1bmN0aW9uKGRhdGEpIHsKCQl0cmVlLmluc2VydENvbW1lbnQoZGF0YSwgdHJlZS5kb2N1bWVudCk7Cgl9OwoKCW1vZGVzLmluaXRpYWwucHJvY2Vzc0RvY3R5cGUgPSBmdW5jdGlvbihuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQsIGZvcmNlUXVpcmtzKSB7CgkJdHJlZS5pbnNlcnREb2N0eXBlKG5hbWUgfHwgJycsIHB1YmxpY0lkIHx8ICcnLCBzeXN0ZW1JZCB8fCAnJyk7CgoJCWlmIChmb3JjZVF1aXJrcyB8fCBuYW1lICE9ICdodG1sJyB8fCAocHVibGljSWQgIT0gbnVsbCAmJiAoWwoJCQkJCSIrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy8iLAoJCQkJCSItLy9hZHZhc29mdCBsdGQvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vIiwKCQkJCQkiLS8vYXMvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAyLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdC8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCAzLjAvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIDMuMC8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgMy4yIGZpbmFsLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCAzLjIvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIDMvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDAvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDEvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDIvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIGxldmVsIDMvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAwLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAxLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMi8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDIvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAzLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sIHN0cmljdC8vIiwKCQkJCQkiLS8vaWV0Zi8vZHRkIGh0bWwvLyIsCgkJCQkJIi0vL2lldGYvL2R0ZCBodG1sLy8iLAoJCQkJCSItLy9pZXRmLy9kdGQgaHRtbC8vIiwKCQkJCQkiLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvLyIsCgkJCQkJIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vIiwKCQkJCQkiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvLyIsCgkJCQkJIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvLyIsCgkJCQkJIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vIiwKCQkJCQkiLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvLyIsCgkJCQkJIi0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvLyIsCgkJCQkJIi0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vIiwKCQkJCQkiLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vIiwKCQkJCQkiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIDIuMC8vIiwKCQkJCQkiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vIiwKCQkJCQkiLS8vc3B5Z2xhc3MvL2R0ZCBodG1sIDIuMCBleHRlbmRlZC8vIiwKCQkJCQkiLS8vc3EvL2R0ZCBodG1sIDIuMCBob3RtZXRhbCArIGV4dGVuc2lvbnMvLyIsCgkJCQkJIi0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIGh0bWwvLyIsCgkJCQkJIi0vL3N1biBtaWNyb3N5c3RlbXMgY29ycC4vL2R0ZCBob3RqYXZhIHN0cmljdCBodG1sLy8iLAoJCQkJCSItLy93M2MvL2R0ZCBodG1sIDMgMTk5NS0wMy0yNC8vIiwKCQkJCQkiLS8vdzNjLy9kdGQgaHRtbCAzLjIgZHJhZnQvLyIsCgkJCQkJIi0vL3czYy8vZHRkIGh0bWwgMy4yIGZpbmFsLy8iLAoJCQkJCSItLy93M2MvL2R0ZCBodG1sIDMuMi8vIiwKCQkJCQkiLS8vdzNjLy9kdGQgaHRtbCAzLjJzIGRyYWZ0Ly8iLAoJCQkJCSItLy93M2MvL2R0ZCBodG1sIDQuMCBmcmFtZXNldC8vIiwKCQkJCQkiLS8vdzNjLy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsLy8iLAoJCQkJCSItLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCAxOTk2MDcxMi8vIiwKCQkJCQkiLS8vdzNjLy9kdGQgaHRtbCBleHBlcmltZW50YWwgOTcwNDIxLy8iLAoJCQkJCSItLy93M2MvL2R0ZCB3MyBodG1sLy8iLAoJCQkJCSItLy93M28vL2R0ZCB3MyBodG1sIDMuMC8vIiwKCQkJCQkiLS8vd2VidGVjaHMvL2R0ZCBtb3ppbGxhIGh0bWwgMi4wLy8iLAoJCQkJCSItLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbC8vIiwKCQkJCQkiaHRtbCIKCQkJCV0uc29tZShwdWJsaWNJZFN0YXJ0c1dpdGgpCgkJCQl8fCBbCgkJCQkJIi0vL3czby8vZHRkIHczIGh0bWwgc3RyaWN0IDMuMC8vZW4vLyIsCgkJCQkJIi0vdzNjL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvZW4iLAoJCQkJCSJodG1sIgoJCQkJXS5pbmRleE9mKHB1YmxpY0lkLnRvTG93ZXJDYXNlKCkpID4gLTEKCQkJCXx8IChzeXN0ZW1JZCA9PSBudWxsICYmIFsKCQkJCQkiLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vIiwKCQkJCQkiLS8vdzNjLy9kdGQgaHRtbCA0LjAxIGZyYW1lc2V0Ly8iCgkJCQldLnNvbWUocHVibGljSWRTdGFydHNXaXRoKSkpCgkJCSkKCQkJfHwgKHN5c3RlbUlkICE9IG51bGwgJiYgKHN5c3RlbUlkLnRvTG93ZXJDYXNlKCkgPT0gImh0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiKSkKCQkpIHsKCQkJdHJlZS5jb21wYXRNb2RlID0gInF1aXJrcyI7CgkJCXRyZWUucGFyc2VFcnJvcigicXVpcmt5LWRvY3R5cGUiKTsKCQl9IGVsc2UgaWYgKHB1YmxpY0lkICE9IG51bGwgJiYgKFsKCQkJCSItLy93M2MvL2R0ZCB4aHRtbCAxLjAgdHJhbnNpdGlvbmFsLy8iLAoJCQkJIi0vL3czYy8vZHRkIHhodG1sIDEuMCBmcmFtZXNldC8vIgoJCQldLnNvbWUocHVibGljSWRTdGFydHNXaXRoKQoJCQl8fCAoc3lzdGVtSWQgIT0gbnVsbCAmJiBbCgkJCQkiLS8vdzNjLy9kdGQgaHRtbCA0LjAxIHRyYW5zaXRpb25hbC8vIiwKCQkJCSItLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLyIKCQkJXS5pbmRleE9mKHB1YmxpY0lkLnRvTG93ZXJDYXNlKCkpID4gLTEpKQoJCSkgewoJCQl0cmVlLmNvbXBhdE1vZGUgPSAibGltaXRlZCBxdWlya3MiOwoJCQl0cmVlLnBhcnNlRXJyb3IoImFsbW9zdC1zdGFuZGFyZHMtZG9jdHlwZSIpOwoJCX0gZWxzZSB7CgkJCWlmICgocHVibGljSWQgPT0gIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiIgJiYgKHN5c3RlbUlkID09IG51bGwgfHwgc3lzdGVtSWQgPT0gImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvc3RyaWN0LmR0ZCIpKQoJCQkJfHwgKHB1YmxpY0lkID09ICItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIiAmJiAoc3lzdGVtSWQgPT0gbnVsbCB8fCBzeXN0ZW1JZCA9PSAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCIpKQoJCQkJfHwgKHB1YmxpY0lkID09ICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgJiYgKHN5c3RlbUlkID09ICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIikpCgkJCQl8fCAocHVibGljSWQgPT0gIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICYmIChzeXN0ZW1JZCA9PSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiKSkKCQkJKSB7CgkJCX0gZWxzZSBpZiAoISgoc3lzdGVtSWQgPT0gbnVsbCB8fCBzeXN0ZW1JZCA9PSAiYWJvdXQ6bGVnYWN5LWNvbXBhdCIpICYmIHB1YmxpY0lkID09IG51bGwpKSB7CgkJCQl0cmVlLnBhcnNlRXJyb3IoInVua25vd24tZG9jdHlwZSIpOwoJCQl9CgkJfQoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnYmVmb3JlSFRNTCcpOwoJCWZ1bmN0aW9uIHB1YmxpY0lkU3RhcnRzV2l0aChzdHJpbmcpIHsKCQkJcmV0dXJuIHB1YmxpY0lkLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzdHJpbmcpID09PSAwOwoJCX0KCX07CgoJbW9kZXMuaW5pdGlhbC5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGJ1ZmZlcikgewoJCWJ1ZmZlci5za2lwTGVhZGluZ1doaXRlc3BhY2UoKTsKCQlpZiAoIWJ1ZmZlci5sZW5ndGgpCgkJCXJldHVybjsKCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1jaGFycycpOwoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcik7Cgl9OwoKCW1vZGVzLmluaXRpYWwucHJvY2Vzc1N0YXJ0VGFnID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1zdGFydC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmluaXRpYWwucHJvY2Vzc0VuZFRhZyA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJfTsKCgltb2Rlcy5pbml0aWFsLmFueXRoaW5nRWxzZSA9IGZ1bmN0aW9uKCkgewoJCXRyZWUuY29tcGF0TW9kZSA9ICdxdWlya3MnOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnYmVmb3JlSFRNTCcpOwoJfTsKCgltb2Rlcy5iZWZvcmVIVE1MID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5iZWZvcmVIVE1MLnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQlodG1sOiAnc3RhcnRUYWdIdG1sJywKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuYmVmb3JlSFRNTC5wcm9jZXNzRU9GID0gZnVuY3Rpb24oKSB7CgkJdGhpcy5hbnl0aGluZ0Vsc2UoKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VPRigpOwoJfTsKCgltb2Rlcy5iZWZvcmVIVE1MLnByb2Nlc3NDb21tZW50ID0gZnVuY3Rpb24oZGF0YSkgewoJCXRyZWUuaW5zZXJ0Q29tbWVudChkYXRhLCB0cmVlLmRvY3VtZW50KTsKCX07CgoJbW9kZXMuYmVmb3JlSFRNTC5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGJ1ZmZlcikgewoJCWJ1ZmZlci5za2lwTGVhZGluZ1doaXRlc3BhY2UoKTsKCQlpZiAoIWJ1ZmZlci5sZW5ndGgpCgkJCXJldHVybjsKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzQ2hhcmFjdGVycyhidWZmZXIpOwoJfTsKCgltb2Rlcy5iZWZvcmVIVE1MLnN0YXJ0VGFnSHRtbCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJdHJlZS5pbnNlcnRIdG1sRWxlbWVudChhdHRyaWJ1dGVzKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2JlZm9yZUhlYWQnKTsKCX07CgoJbW9kZXMuYmVmb3JlSFRNTC5zdGFydFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJfTsKCgltb2Rlcy5iZWZvcmVIVE1MLnByb2Nlc3NFbmRUYWcgPSBmdW5jdGlvbihuYW1lKSB7CgkJdGhpcy5hbnl0aGluZ0Vsc2UoKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuYmVmb3JlSFRNTC5hbnl0aGluZ0Vsc2UgPSBmdW5jdGlvbigpIHsKCQl0cmVlLmluc2VydEh0bWxFbGVtZW50KCk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdiZWZvcmVIZWFkJyk7Cgl9OwoKCW1vZGVzLmFmdGVyQWZ0ZXJCb2R5ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5hZnRlckFmdGVyQm9keS5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJJy1kZWZhdWx0JzogJ3N0YXJ0VGFnT3RoZXInCgl9OwoKCW1vZGVzLmFmdGVyQWZ0ZXJCb2R5LnByb2Nlc3NDb21tZW50ID0gZnVuY3Rpb24oZGF0YSkgewoJCXRyZWUuaW5zZXJ0Q29tbWVudChkYXRhLCB0cmVlLmRvY3VtZW50KTsKCX07CgoJbW9kZXMuYWZ0ZXJBZnRlckJvZHkucHJvY2Vzc0RvY3R5cGUgPSBmdW5jdGlvbihkYXRhKSB7CgkJbW9kZXMuaW5Cb2R5LnByb2Nlc3NEb2N0eXBlKGRhdGEpOwoJfTsKCgltb2Rlcy5hZnRlckFmdGVyQm9keS5zdGFydFRhZ0h0bWwgPSBmdW5jdGlvbihkYXRhLCBhdHRyaWJ1dGVzKSB7CgkJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnSHRtbChkYXRhLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuYWZ0ZXJBZnRlckJvZHkuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLXN0YXJ0LXRhZycsIHtuYW1lOiBuYW1lfSk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkJvZHknKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKTsKCX07CgoJbW9kZXMuYWZ0ZXJBZnRlckJvZHkuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnaW5Cb2R5Jyk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSk7Cgl9OwoKCW1vZGVzLmFmdGVyQWZ0ZXJCb2R5LnByb2Nlc3NDaGFyYWN0ZXJzID0gZnVuY3Rpb24oZGF0YSkgewoJCWlmICghaXNBbGxXaGl0ZXNwYWNlKGRhdGEuY2hhcmFjdGVycykpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWNoYXItYWZ0ZXItYm9keScpOwoJCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luQm9keScpOwoJCQlyZXR1cm4gdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpOwoJCX0KCQltb2Rlcy5pbkJvZHkucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSk7Cgl9OwoKCW1vZGVzLmFmdGVyQm9keSA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuYWZ0ZXJCb2R5LmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ2VuZFRhZ0h0bWwnLAoJCSctZGVmYXVsdCc6ICdlbmRUYWdPdGhlcicKCX07CgoJbW9kZXMuYWZ0ZXJCb2R5LnByb2Nlc3NDb21tZW50ID0gZnVuY3Rpb24oZGF0YSkgewoJCXRyZWUuaW5zZXJ0Q29tbWVudChkYXRhLCB0cmVlLm9wZW5FbGVtZW50cy5yb290Tm9kZSk7Cgl9OwoKCW1vZGVzLmFmdGVyQm9keS5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGRhdGEpIHsKCQlpZiAoIWlzQWxsV2hpdGVzcGFjZShkYXRhLmNoYXJhY3RlcnMpKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1jaGFyLWFmdGVyLWJvZHknKTsKCQkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkJvZHknKTsKCQkJcmV0dXJuIHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzQ2hhcmFjdGVycyhkYXRhKTsKCQl9CgkJbW9kZXMuaW5Cb2R5LnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpOwoJfTsKCgltb2Rlcy5hZnRlckJvZHkucHJvY2Vzc1N0YXJ0VGFnID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtc3RhcnQtdGFnLWFmdGVyLWJvZHknLCB7bmFtZTogbmFtZX0pOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnaW5Cb2R5Jyk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmFmdGVyQm9keS5lbmRUYWdIdG1sID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICh0cmVlLmNvbnRleHQpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCdlbmQtaHRtbC1pbi1pbm5lcmh0bWwnKTsKCQl9IGVsc2UgewoJCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2FmdGVyQWZ0ZXJCb2R5Jyk7CgkJfQoJfTsKCgltb2Rlcy5hZnRlckJvZHkuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWctYWZ0ZXItYm9keScsIHtuYW1lOiBuYW1lfSk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkJvZHknKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuYWZ0ZXJGcmFtZXNldCA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuYWZ0ZXJGcmFtZXNldC5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJbm9mcmFtZXM6ICdzdGFydFRhZ05vZnJhbWVzJywKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuYWZ0ZXJGcmFtZXNldC5lbmRfdGFnX2hhbmRsZXJzID0gewoJCWh0bWw6ICdlbmRUYWdIdG1sJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmFmdGVyRnJhbWVzZXQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQl2YXIgY2hhcmFjdGVycyA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7CgkJdmFyIHdoaXRlc3BhY2UgPSAiIjsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIGNoID0gY2hhcmFjdGVyc1tpXTsKCQkJaWYgKGlzV2hpdGVzcGFjZShjaCkpCgkJCQl3aGl0ZXNwYWNlICs9IGNoOwoJCX0KCQlpZiAod2hpdGVzcGFjZSkgewoJCQl0cmVlLmluc2VydFRleHQod2hpdGVzcGFjZSk7CgkJfQoJCWlmICh3aGl0ZXNwYWNlLmxlbmd0aCA8IGNoYXJhY3RlcnMubGVuZ3RoKQoJCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLWVvZi1idXQtZ290LWNoYXInKTsKCX07CgoJbW9kZXMuYWZ0ZXJGcmFtZXNldC5zdGFydFRhZ05vZnJhbWVzID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCW1vZGVzLmluSGVhZC5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmFmdGVyRnJhbWVzZXQuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWFmdGVyLWZyYW1lc2V0Iiwge25hbWU6IG5hbWV9KTsKCX07CgoJbW9kZXMuYWZ0ZXJGcmFtZXNldC5lbmRUYWdIdG1sID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnYWZ0ZXJBZnRlckZyYW1lc2V0Jyk7Cgl9OwoKCW1vZGVzLmFmdGVyRnJhbWVzZXQuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctYWZ0ZXItZnJhbWVzZXQiLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5iZWZvcmVIZWFkID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5iZWZvcmVIZWFkLnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQlodG1sOiAnc3RhcnRUYWdIdG1sJywKCQloZWFkOiAnc3RhcnRUYWdIZWFkJywKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuYmVmb3JlSGVhZC5lbmRfdGFnX2hhbmRsZXJzID0gewoJCWh0bWw6ICdlbmRUYWdJbXBseUhlYWQnLAoJCWhlYWQ6ICdlbmRUYWdJbXBseUhlYWQnLAoJCWJvZHk6ICdlbmRUYWdJbXBseUhlYWQnLAoJCWJyOiAnZW5kVGFnSW1wbHlIZWFkJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmJlZm9yZUhlYWQucHJvY2Vzc0VPRiA9IGZ1bmN0aW9uKCkgewoJCXRoaXMuc3RhcnRUYWdIZWFkKCdoZWFkJywgW10pOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRU9GKCk7Cgl9OwoKCW1vZGVzLmJlZm9yZUhlYWQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQlidWZmZXIuc2tpcExlYWRpbmdXaGl0ZXNwYWNlKCk7CgkJaWYgKCFidWZmZXIubGVuZ3RoKQoJCQlyZXR1cm47CgkJdGhpcy5zdGFydFRhZ0hlYWQoJ2hlYWQnLCBbXSk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcik7Cgl9OwoKCW1vZGVzLmJlZm9yZUhlYWQuc3RhcnRUYWdIZWFkID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUuaW5zZXJ0SGVhZEVsZW1lbnQoYXR0cmlidXRlcyk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkhlYWQnKTsKCX07CgoJbW9kZXMuYmVmb3JlSGVhZC5zdGFydFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl0aGlzLnN0YXJ0VGFnSGVhZCgnaGVhZCcsIFtdKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKTsKCX07CgoJbW9kZXMuYmVmb3JlSGVhZC5lbmRUYWdJbXBseUhlYWQgPSBmdW5jdGlvbihuYW1lKSB7CgkJdGhpcy5zdGFydFRhZ0hlYWQoJ2hlYWQnLCBbXSk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSk7Cgl9OwoKCW1vZGVzLmJlZm9yZUhlYWQuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCdlbmQtdGFnLWFmdGVyLWltcGxpZWQtcm9vdCcsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluSGVhZCA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuaW5IZWFkLnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQlodG1sOiAnc3RhcnRUYWdIdG1sJywKCQloZWFkOiAnc3RhcnRUYWdIZWFkJywKCQl0aXRsZTogJ3N0YXJ0VGFnVGl0bGUnLAoJCXNjcmlwdDogJ3N0YXJ0VGFnU2NyaXB0JywKCQlzdHlsZTogJ3N0YXJ0VGFnTm9GcmFtZXNTdHlsZScsCgkJbm9zY3JpcHQ6ICdzdGFydFRhZ05vU2NyaXB0JywKCQlub2ZyYW1lczogJ3N0YXJ0VGFnTm9GcmFtZXNTdHlsZScsCgkJYmFzZTogJ3N0YXJ0VGFnQmFzZUJhc2Vmb250Qmdzb3VuZExpbmsnLAoJCWJhc2Vmb250OiAnc3RhcnRUYWdCYXNlQmFzZWZvbnRCZ3NvdW5kTGluaycsCgkJYmdzb3VuZDogJ3N0YXJ0VGFnQmFzZUJhc2Vmb250Qmdzb3VuZExpbmsnLAoJCWxpbms6ICdzdGFydFRhZ0Jhc2VCYXNlZm9udEJnc291bmRMaW5rJywKCQltZXRhOiAnc3RhcnRUYWdNZXRhJywKCQkiLWRlZmF1bHQiOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5IZWFkLmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJaGVhZDogJ2VuZFRhZ0hlYWQnLAoJCWh0bWw6ICdlbmRUYWdIdG1sQm9keUJyJywKCQlib2R5OiAnZW5kVGFnSHRtbEJvZHlCcicsCgkJYnI6ICdlbmRUYWdIdG1sQm9keUJyJywKCQkiLWRlZmF1bHQiOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluSGVhZC5wcm9jZXNzRU9GID0gZnVuY3Rpb24oKSB7CgkJdmFyIG5hbWUgPSB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWU7CgkJaWYgKFsndGl0bGUnLCAnc3R5bGUnLCAnc2NyaXB0J10uaW5kZXhPZihuYW1lKSAhPSAtMSkgewoJCQl0cmVlLnBhcnNlRXJyb3IoImV4cGVjdGVkLW5hbWVkLWNsb3NpbmctdGFnLWJ1dC1nb3QtZW9mIiwge25hbWU6IG5hbWV9KTsKCQkJdHJlZS5wb3BFbGVtZW50KCk7CgkJfQoKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VPRigpOwoJfTsKCgltb2Rlcy5pbkhlYWQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQl2YXIgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CgkJaWYgKGxlYWRpbmdXaGl0ZXNwYWNlKQoJCQl0cmVlLmluc2VydFRleHQobGVhZGluZ1doaXRlc3BhY2UpOwoJCWlmICghYnVmZmVyLmxlbmd0aCkKCQkJcmV0dXJuOwoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcik7Cgl9OwoKCW1vZGVzLmluSGVhZC5zdGFydFRhZ0h0bWwgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJbW9kZXMuaW5Cb2R5LnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5IZWFkLnN0YXJ0VGFnSGVhZCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ3R3by1oZWFkcy1hcmUtbm90LWJldHRlci10aGFuLW9uZScpOwoJfTsKCgltb2Rlcy5pbkhlYWQuc3RhcnRUYWdUaXRsZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluSGVhZC5zdGFydFRhZ05vU2NyaXB0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCWlmICh0cmVlLnNjcmlwdGluZ0VuYWJsZWQpCgkJCXJldHVybiB0cmVlLnByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luSGVhZE5vc2NyaXB0Jyk7Cgl9OwoKCW1vZGVzLmluSGVhZC5zdGFydFRhZ05vRnJhbWVzU3R5bGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5IZWFkLnN0YXJ0VGFnU2NyaXB0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLnRva2VuaXplci5zZXRTdGF0ZShUb2tlbml6ZXIuU0NSSVBUX0RBVEEpOwoJCXRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gdHJlZS5pbnNlcnRpb25Nb2RlTmFtZTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ3RleHQnKTsKCX07CgoJbW9kZXMuaW5IZWFkLnN0YXJ0VGFnQmFzZUJhc2Vmb250Qmdzb3VuZExpbmsgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluSGVhZC5zdGFydFRhZ01ldGEgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluSGVhZC5zdGFydFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJfTsKCgltb2Rlcy5pbkhlYWQuZW5kVGFnSGVhZCA9IGZ1bmN0aW9uKG5hbWUpIHsKCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaXRlbSh0cmVlLm9wZW5FbGVtZW50cy5sZW5ndGggLSAxKS5sb2NhbE5hbWUgPT0gJ2hlYWQnKSB7CgkJCXRyZWUub3BlbkVsZW1lbnRzLnBvcCgpOwoJCX0gZWxzZSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6ICdoZWFkJ30pOwoJCX0KCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2FmdGVySGVhZCcpOwoJfTsKCgltb2Rlcy5pbkhlYWQuZW5kVGFnSHRtbEJvZHlCciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJfTsKCgltb2Rlcy5pbkhlYWQuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5pbkhlYWQuYW55dGhpbmdFbHNlID0gZnVuY3Rpb24oKSB7CgkJdGhpcy5lbmRUYWdIZWFkKCdoZWFkJyk7Cgl9OwoKCW1vZGVzLmFmdGVySGVhZCA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuYWZ0ZXJIZWFkLnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQlodG1sOiAnc3RhcnRUYWdIdG1sJywKCQloZWFkOiAnc3RhcnRUYWdIZWFkJywKCQlib2R5OiAnc3RhcnRUYWdCb2R5JywKCQlmcmFtZXNldDogJ3N0YXJ0VGFnRnJhbWVzZXQnLAoJCWJhc2U6ICdzdGFydFRhZ0Zyb21IZWFkJywKCQlsaW5rOiAnc3RhcnRUYWdGcm9tSGVhZCcsCgkJbWV0YTogJ3N0YXJ0VGFnRnJvbUhlYWQnLAoJCXNjcmlwdDogJ3N0YXJ0VGFnRnJvbUhlYWQnLAoJCXN0eWxlOiAnc3RhcnRUYWdGcm9tSGVhZCcsCgkJdGl0bGU6ICdzdGFydFRhZ0Zyb21IZWFkJywKCQkiLWRlZmF1bHQiOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuYWZ0ZXJIZWFkLmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJYm9keTogJ2VuZFRhZ0JvZHlIdG1sQnInLAoJCWh0bWw6ICdlbmRUYWdCb2R5SHRtbEJyJywKCQlicjogJ2VuZFRhZ0JvZHlIdG1sQnInLAoJCSItZGVmYXVsdCI6ICdlbmRUYWdPdGhlcicKCX07CgoJbW9kZXMuYWZ0ZXJIZWFkLnByb2Nlc3NFT0YgPSBmdW5jdGlvbigpIHsKCQl0aGlzLmFueXRoaW5nRWxzZSgpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRU9GKCk7Cgl9OwoKCW1vZGVzLmFmdGVySGVhZC5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGJ1ZmZlcikgewoJCXZhciBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTsKCQlpZiAobGVhZGluZ1doaXRlc3BhY2UpCgkJCXRyZWUuaW5zZXJ0VGV4dChsZWFkaW5nV2hpdGVzcGFjZSk7CgkJaWYgKCFidWZmZXIubGVuZ3RoKQoJCQlyZXR1cm47CgkJdGhpcy5hbnl0aGluZ0Vsc2UoKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKTsKCX07CgoJbW9kZXMuYWZ0ZXJIZWFkLnN0YXJ0VGFnSHRtbCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQltb2Rlcy5pbkJvZHkucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5hZnRlckhlYWQuc3RhcnRUYWdCb2R5ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUuZnJhbWVzZXRPayA9IGZhbHNlOwoJCXRyZWUuaW5zZXJ0Qm9keUVsZW1lbnQoYXR0cmlidXRlcyk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkJvZHknKTsKCX07CgoJbW9kZXMuYWZ0ZXJIZWFkLnN0YXJ0VGFnRnJhbWVzZXQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnaW5GcmFtZXNldCcpOwoJfTsKCgltb2Rlcy5hZnRlckhlYWQuc3RhcnRUYWdGcm9tSGVhZCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1vdXQtb2YtbXktaGVhZCIsIHtuYW1lOiBuYW1lfSk7CgkJdHJlZS5vcGVuRWxlbWVudHMucHVzaCh0cmVlLmhlYWQpOwoJCW1vZGVzLmluSGVhZC5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJCXRyZWUub3BlbkVsZW1lbnRzLnJlbW92ZSh0cmVlLmhlYWQpOwoJfTsKCgltb2Rlcy5hZnRlckhlYWQuc3RhcnRUYWdIZWFkID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtc3RhcnQtdGFnJywge25hbWU6IG5hbWV9KTsKCX07CgoJbW9kZXMuYWZ0ZXJIZWFkLnN0YXJ0VGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmFmdGVySGVhZC5lbmRUYWdCb2R5SHRtbEJyID0gZnVuY3Rpb24obmFtZSkgewoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSk7Cgl9OwoKCW1vZGVzLmFmdGVySGVhZC5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZycsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmFmdGVySGVhZC5hbnl0aGluZ0Vsc2UgPSBmdW5jdGlvbigpIHsKCQl0cmVlLmluc2VydEJvZHlFbGVtZW50KFtdKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luQm9keScpOwoJCXRyZWUuZnJhbWVzZXRPayA9IHRydWU7Cgl9CgoJbW9kZXMuaW5Cb2R5ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRfdGFnX2hhbmRsZXJzID0gewoJCWh0bWw6ICdzdGFydFRhZ0h0bWwnLAoJCWhlYWQ6ICdzdGFydFRhZ01pc3BsYWNlZCcsCgkJYmFzZTogJ3N0YXJ0VGFnUHJvY2Vzc0luSGVhZCcsCgkJYmFzZWZvbnQ6ICdzdGFydFRhZ1Byb2Nlc3NJbkhlYWQnLAoJCWJnc291bmQ6ICdzdGFydFRhZ1Byb2Nlc3NJbkhlYWQnLAoJCWxpbms6ICdzdGFydFRhZ1Byb2Nlc3NJbkhlYWQnLAoJCW1ldGE6ICdzdGFydFRhZ1Byb2Nlc3NJbkhlYWQnLAoJCW5vZnJhbWVzOiAnc3RhcnRUYWdQcm9jZXNzSW5IZWFkJywKCQlzY3JpcHQ6ICdzdGFydFRhZ1Byb2Nlc3NJbkhlYWQnLAoJCXN0eWxlOiAnc3RhcnRUYWdQcm9jZXNzSW5IZWFkJywKCQl0aXRsZTogJ3N0YXJ0VGFnUHJvY2Vzc0luSGVhZCcsCgkJYm9keTogJ3N0YXJ0VGFnQm9keScsCgkJZm9ybTogJ3N0YXJ0VGFnRm9ybScsCgkJcGxhaW50ZXh0OiAnc3RhcnRUYWdQbGFpbnRleHQnLAoJCWE6ICdzdGFydFRhZ0EnLAoJCWJ1dHRvbjogJ3N0YXJ0VGFnQnV0dG9uJywKCQl4bXA6ICdzdGFydFRhZ1htcCcsCgkJdGFibGU6ICdzdGFydFRhZ1RhYmxlJywKCQlocjogJ3N0YXJ0VGFnSHInLAoJCWltYWdlOiAnc3RhcnRUYWdJbWFnZScsCgkJaW5wdXQ6ICdzdGFydFRhZ0lucHV0JywKCQl0ZXh0YXJlYTogJ3N0YXJ0VGFnVGV4dGFyZWEnLAoJCXNlbGVjdDogJ3N0YXJ0VGFnU2VsZWN0JywKCQlpc2luZGV4OiAnc3RhcnRUYWdJc2luZGV4JywKCQlhcHBsZXQ6CSdzdGFydFRhZ0FwcGxldE1hcnF1ZWVPYmplY3QnLAoJCW1hcnF1ZWU6CSdzdGFydFRhZ0FwcGxldE1hcnF1ZWVPYmplY3QnLAoJCW9iamVjdDoJJ3N0YXJ0VGFnQXBwbGV0TWFycXVlZU9iamVjdCcsCgkJbGk6ICdzdGFydFRhZ0xpc3RJdGVtJywKCQlkZDogJ3N0YXJ0VGFnTGlzdEl0ZW0nLAoJCWR0OiAnc3RhcnRUYWdMaXN0SXRlbScsCgkJYWRkcmVzczogJ3N0YXJ0VGFnQ2xvc2VQJywKCQlhcnRpY2xlOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWFzaWRlOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWJsb2NrcXVvdGU6ICdzdGFydFRhZ0Nsb3NlUCcsCgkJY2VudGVyOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWRldGFpbHM6ICdzdGFydFRhZ0Nsb3NlUCcsCgkJZGlyOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWRpdjogJ3N0YXJ0VGFnQ2xvc2VQJywKCQlkbDogJ3N0YXJ0VGFnQ2xvc2VQJywKCQlmaWVsZHNldDogJ3N0YXJ0VGFnQ2xvc2VQJywKCQlmaWdjYXB0aW9uOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWZpZ3VyZTogJ3N0YXJ0VGFnQ2xvc2VQJywKCQlmb290ZXI6ICdzdGFydFRhZ0Nsb3NlUCcsCgkJaGVhZGVyOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWhncm91cDogJ3N0YXJ0VGFnQ2xvc2VQJywKCQltYWluOiAnc3RhcnRUYWdDbG9zZVAnLAoJCW1lbnU6ICdzdGFydFRhZ0Nsb3NlUCcsCgkJbmF2OiAnc3RhcnRUYWdDbG9zZVAnLAoJCW9sOiAnc3RhcnRUYWdDbG9zZVAnLAoJCXA6ICdzdGFydFRhZ0Nsb3NlUCcsCgkJc2VjdGlvbjogJ3N0YXJ0VGFnQ2xvc2VQJywKCQlzdW1tYXJ5OiAnc3RhcnRUYWdDbG9zZVAnLAoJCXVsOiAnc3RhcnRUYWdDbG9zZVAnLAoJCWxpc3Rpbmc6ICdzdGFydFRhZ1ByZUxpc3RpbmcnLAoJCXByZTogJ3N0YXJ0VGFnUHJlTGlzdGluZycsCgkJYjogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJYmlnOiAnc3RhcnRUYWdGb3JtYXR0aW5nJywKCQljb2RlOiAnc3RhcnRUYWdGb3JtYXR0aW5nJywKCQllbTogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJZm9udDogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJaTogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJczogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJc21hbGw6ICdzdGFydFRhZ0Zvcm1hdHRpbmcnLAoJCXN0cmlrZTogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJc3Ryb25nOiAnc3RhcnRUYWdGb3JtYXR0aW5nJywKCQl0dDogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJdTogJ3N0YXJ0VGFnRm9ybWF0dGluZycsCgkJbm9icjogJ3N0YXJ0VGFnTm9icicsCgkJYXJlYTogJ3N0YXJ0VGFnVm9pZEZvcm1hdHRpbmcnLAoJCWJyOiAnc3RhcnRUYWdWb2lkRm9ybWF0dGluZycsCgkJZW1iZWQ6ICdzdGFydFRhZ1ZvaWRGb3JtYXR0aW5nJywKCQlpbWc6ICdzdGFydFRhZ1ZvaWRGb3JtYXR0aW5nJywKCQlrZXlnZW46ICdzdGFydFRhZ1ZvaWRGb3JtYXR0aW5nJywKCQl3YnI6ICdzdGFydFRhZ1ZvaWRGb3JtYXR0aW5nJywKCQlwYXJhbTogJ3N0YXJ0VGFnUGFyYW1Tb3VyY2VUcmFjaycsCgkJc291cmNlOiAnc3RhcnRUYWdQYXJhbVNvdXJjZVRyYWNrJywKCQl0cmFjazogJ3N0YXJ0VGFnUGFyYW1Tb3VyY2VUcmFjaycsCgkJaWZyYW1lOiAnc3RhcnRUYWdJRnJhbWUnLAoJCW5vZW1iZWQ6ICdzdGFydFRhZ1Jhd1RleHQnLAoJCW5vc2NyaXB0OiAnc3RhcnRUYWdSYXdUZXh0JywKCQloMTogJ3N0YXJ0VGFnSGVhZGluZycsCgkJaDI6ICdzdGFydFRhZ0hlYWRpbmcnLAoJCWgzOiAnc3RhcnRUYWdIZWFkaW5nJywKCQloNDogJ3N0YXJ0VGFnSGVhZGluZycsCgkJaDU6ICdzdGFydFRhZ0hlYWRpbmcnLAoJCWg2OiAnc3RhcnRUYWdIZWFkaW5nJywKCQljYXB0aW9uOiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCWNvbDogJ3N0YXJ0VGFnTWlzcGxhY2VkJywKCQljb2xncm91cDogJ3N0YXJ0VGFnTWlzcGxhY2VkJywKCQlmcmFtZTogJ3N0YXJ0VGFnTWlzcGxhY2VkJywKCQlmcmFtZXNldDogJ3N0YXJ0VGFnRnJhbWVzZXQnLAoJCXRib2R5OiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCXRkOiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCXRmb290OiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCXRoOiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCXRoZWFkOiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCXRyOiAnc3RhcnRUYWdNaXNwbGFjZWQnLAoJCW9wdGlvbjogJ3N0YXJ0VGFnT3B0aW9uT3B0Z3JvdXAnLAoJCW9wdGdyb3VwOiAnc3RhcnRUYWdPcHRpb25PcHRncm91cCcsCgkJbWF0aDogJ3N0YXJ0VGFnTWF0aCcsCgkJc3ZnOiAnc3RhcnRUYWdTVkcnLAoJCXJ0OiAnc3RhcnRUYWdScFJ0JywKCQlycDogJ3N0YXJ0VGFnUnBSdCcsCgkJIi1kZWZhdWx0IjogJ3N0YXJ0VGFnT3RoZXInCgl9OwoKCW1vZGVzLmluQm9keS5lbmRfdGFnX2hhbmRsZXJzID0gewoJCXA6ICdlbmRUYWdQJywKCQlib2R5OiAnZW5kVGFnQm9keScsCgkJaHRtbDogJ2VuZFRhZ0h0bWwnLAoJCWFkZHJlc3M6ICdlbmRUYWdCbG9jaycsCgkJYXJ0aWNsZTogJ2VuZFRhZ0Jsb2NrJywKCQlhc2lkZTogJ2VuZFRhZ0Jsb2NrJywKCQlibG9ja3F1b3RlOiAnZW5kVGFnQmxvY2snLAoJCWJ1dHRvbjogJ2VuZFRhZ0Jsb2NrJywKCQljZW50ZXI6ICdlbmRUYWdCbG9jaycsCgkJZGV0YWlsczogJ2VuZFRhZ0Jsb2NrJywKCQlkaXI6ICdlbmRUYWdCbG9jaycsCgkJZGl2OiAnZW5kVGFnQmxvY2snLAoJCWRsOiAnZW5kVGFnQmxvY2snLAoJCWZpZWxkc2V0OiAnZW5kVGFnQmxvY2snLAoJCWZpZ2NhcHRpb246ICdlbmRUYWdCbG9jaycsCgkJZmlndXJlOiAnZW5kVGFnQmxvY2snLAoJCWZvb3RlcjogJ2VuZFRhZ0Jsb2NrJywKCQloZWFkZXI6ICdlbmRUYWdCbG9jaycsCgkJaGdyb3VwOiAnZW5kVGFnQmxvY2snLAoJCWxpc3Rpbmc6ICdlbmRUYWdCbG9jaycsCgkJbWFpbjogJ2VuZFRhZ0Jsb2NrJywKCQltZW51OiAnZW5kVGFnQmxvY2snLAoJCW5hdjogJ2VuZFRhZ0Jsb2NrJywKCQlvbDogJ2VuZFRhZ0Jsb2NrJywKCQlwcmU6ICdlbmRUYWdCbG9jaycsCgkJc2VjdGlvbjogJ2VuZFRhZ0Jsb2NrJywKCQlzdW1tYXJ5OiAnZW5kVGFnQmxvY2snLAoJCXVsOiAnZW5kVGFnQmxvY2snLAoJCWZvcm06ICdlbmRUYWdGb3JtJywKCQlhcHBsZXQ6ICdlbmRUYWdBcHBsZXRNYXJxdWVlT2JqZWN0JywKCQltYXJxdWVlOiAnZW5kVGFnQXBwbGV0TWFycXVlZU9iamVjdCcsCgkJb2JqZWN0OiAnZW5kVGFnQXBwbGV0TWFycXVlZU9iamVjdCcsCgkJZGQ6ICdlbmRUYWdMaXN0SXRlbScsCgkJZHQ6ICdlbmRUYWdMaXN0SXRlbScsCgkJbGk6ICdlbmRUYWdMaXN0SXRlbScsCgkJaDE6ICdlbmRUYWdIZWFkaW5nJywKCQloMjogJ2VuZFRhZ0hlYWRpbmcnLAoJCWgzOiAnZW5kVGFnSGVhZGluZycsCgkJaDQ6ICdlbmRUYWdIZWFkaW5nJywKCQloNTogJ2VuZFRhZ0hlYWRpbmcnLAoJCWg2OiAnZW5kVGFnSGVhZGluZycsCgkJYTogJ2VuZFRhZ0Zvcm1hdHRpbmcnLAoJCWI6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQliaWc6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQljb2RlOiAnZW5kVGFnRm9ybWF0dGluZycsCgkJZW06ICdlbmRUYWdGb3JtYXR0aW5nJywKCQlmb250OiAnZW5kVGFnRm9ybWF0dGluZycsCgkJaTogJ2VuZFRhZ0Zvcm1hdHRpbmcnLAoJCW5vYnI6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQlzOiAnZW5kVGFnRm9ybWF0dGluZycsCgkJc21hbGw6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQlzdHJpa2U6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQlzdHJvbmc6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQl0dDogJ2VuZFRhZ0Zvcm1hdHRpbmcnLAoJCXU6ICdlbmRUYWdGb3JtYXR0aW5nJywKCQlicjogJ2VuZFRhZ0JyJywKCQkiLWRlZmF1bHQiOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluQm9keS5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGJ1ZmZlcikgewoJCWlmICh0cmVlLnNob3VsZFNraXBMZWFkaW5nTmV3bGluZSkgewoJCQl0cmVlLnNob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IGZhbHNlOwoJCQlidWZmZXIuc2tpcEF0TW9zdE9uZUxlYWRpbmdOZXdsaW5lKCk7CgkJfQoJCXRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQl2YXIgY2hhcmFjdGVycyA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7CgkJY2hhcmFjdGVycyA9IGNoYXJhY3RlcnMucmVwbGFjZSgvXHUwMDAwL2csIGZ1bmN0aW9uKG1hdGNoLCBpbmRleCl7CgkJCXRyZWUucGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJcmV0dXJuICcnOwoJCX0pOwoJCWlmICghY2hhcmFjdGVycykKCQkJcmV0dXJuOwoJCXRyZWUuaW5zZXJ0VGV4dChjaGFyYWN0ZXJzKTsKCQlpZiAodHJlZS5mcmFtZXNldE9rICYmICFpc0FsbFdoaXRlc3BhY2VPclJlcGxhY2VtZW50Q2hhcmFjdGVycyhjaGFyYWN0ZXJzKSkKCQkJdHJlZS5mcmFtZXNldE9rID0gZmFsc2U7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0h0bWwgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCdub24taHRtbC1yb290Jyk7CgkJdHJlZS5hZGRBdHRyaWJ1dGVzVG9FbGVtZW50KHRyZWUub3BlbkVsZW1lbnRzLnJvb3ROb2RlLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnUHJvY2Vzc0luSGVhZCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQltb2Rlcy5pbkhlYWQucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRUYWdCb2R5ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1zdGFydC10YWcnLCB7bmFtZTogJ2JvZHknfSk7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aCA9PSAxIHx8CgkJCXRyZWUub3BlbkVsZW1lbnRzLml0ZW0oMSkubG9jYWxOYW1lICE9ICdib2R5JykgewoJCQlhc3NlcnQub2sodHJlZS5jb250ZXh0KTsKCQl9IGVsc2UgewoJCQl0cmVlLmZyYW1lc2V0T2sgPSBmYWxzZTsKCQkJdHJlZS5hZGRBdHRyaWJ1dGVzVG9FbGVtZW50KHRyZWUub3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50LCBhdHRyaWJ1dGVzKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0ZyYW1lc2V0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1zdGFydC10YWcnLCB7bmFtZTogJ2ZyYW1lc2V0J30pOwoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5sZW5ndGggPT0gMSB8fAoJCQl0cmVlLm9wZW5FbGVtZW50cy5pdGVtKDEpLmxvY2FsTmFtZSAhPSAnYm9keScpIHsKCQkJYXNzZXJ0Lm9rKHRyZWUuY29udGV4dCk7CgkJfSBlbHNlIGlmICh0cmVlLmZyYW1lc2V0T2spIHsKCQkJdHJlZS5kZXRhY2hGcm9tUGFyZW50KHRyZWUub3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KTsKCQkJd2hpbGUgKHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aCA+IDEpCgkJCQl0cmVlLm9wZW5FbGVtZW50cy5wb3AoKTsKCQkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luRnJhbWVzZXQnKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0Nsb3NlUCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgncCcpKQoJCQl0aGlzLmVuZFRhZ1AoJ3AnKTsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1ByZUxpc3RpbmcgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoJ3AnKSkKCQkJdGhpcy5lbmRUYWdQKCdwJyk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCXRyZWUuZnJhbWVzZXRPayA9IGZhbHNlOwoJCXRyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lID0gdHJ1ZTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnRm9ybSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQlpZiAodHJlZS5mb3JtKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1zdGFydC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCX0gZWxzZSB7CgkJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pbkJ1dHRvblNjb3BlKCdwJykpCgkJCQl0aGlzLmVuZFRhZ1AoJ3AnKTsKCQkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCQl0cmVlLmZvcm0gPSB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1JwUnQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluU2NvcGUoJ3J1YnknKSkgewoJCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKCQkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSAhPSAncnVieScpIHsKCQkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1zdGFydC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCQl9CgkJfQoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnTGlzdEl0ZW0gPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdmFyIHN0b3BOYW1lcyA9IHtsaTogWydsaSddLCBkZDogWydkZCcsICdkdCddLCBkdDogWydkZCcsICdkdCddfTsKCQl2YXIgc3RvcE5hbWUgPSBzdG9wTmFtZXNbbmFtZV07CgoJCXZhciBlbHMgPSB0cmVlLm9wZW5FbGVtZW50czsKCQlmb3IgKHZhciBpID0gZWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CgkJCXZhciBub2RlID0gZWxzLml0ZW0oaSk7CgkJCWlmIChzdG9wTmFtZS5pbmRleE9mKG5vZGUubG9jYWxOYW1lKSAhPSAtMSkgewoJCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobm9kZS5sb2NhbE5hbWUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJaWYgKG5vZGUuaXNTcGVjaWFsKCkgJiYgbm9kZS5sb2NhbE5hbWUgIT09ICdwJyAmJiBub2RlLmxvY2FsTmFtZSAhPT0gJ2FkZHJlc3MnICYmIG5vZGUubG9jYWxOYW1lICE9PSAnZGl2JykKCQkJCWJyZWFrOwoJCX0KCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgncCcpKQoJCQl0aGlzLmVuZFRhZ1AoJ3AnKTsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJdHJlZS5mcmFtZXNldE9rID0gZmFsc2U7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1BsYWludGV4dCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgncCcpKQoJCQl0aGlzLmVuZFRhZ1AoJ3AnKTsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJdHJlZS50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlBMQUlOVEVYVCk7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0hlYWRpbmcgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoJ3AnKSkKCQkJdGhpcy5lbmRUYWdQKCdwJyk7CgkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmlzTnVtYmVyZWRIZWFkZXIoKSkgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtc3RhcnQtdGFnJywge25hbWU6IG5hbWV9KTsKCQkJdHJlZS5wb3BFbGVtZW50KCk7CgkJfQoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnQSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl2YXIgYWN0aXZlQSA9IHRyZWUuZWxlbWVudEluQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCdhJyk7CgkJaWYgKGFjdGl2ZUEpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLWVuZC10YWciLCB7c3RhcnROYW1lOiAiYSIsIGVuZE5hbWU6ICJhIn0pOwoJCQl0cmVlLmFkb3B0aW9uQWdlbmN5RW5kVGFnKCdhJyk7CgkJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5jb250YWlucyhhY3RpdmVBKSkKCQkJCXRyZWUub3BlbkVsZW1lbnRzLnJlbW92ZShhY3RpdmVBKTsKCQkJdHJlZS5yZW1vdmVFbGVtZW50RnJvbUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyhhY3RpdmVBKTsKCQl9CgkJdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwoJCXRyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0Zvcm1hdHRpbmcgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwoJCXRyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ05vYnIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblNjb3BlKCdub2JyJykpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLWVuZC10YWciLCB7c3RhcnROYW1lOiAnbm9icicsIGVuZE5hbWU6ICdub2JyJ30pOwoJCQl0aGlzLnByb2Nlc3NFbmRUYWcoJ25vYnInKTsKCQkJCXRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQl9CgkJdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnQnV0dG9uID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblNjb3BlKCdidXR0b24nKSkgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtc3RhcnQtdGFnLWltcGxpZXMtZW5kLXRhZycsIHtzdGFydE5hbWU6ICdidXR0b24nLCBlbmROYW1lOiAnYnV0dG9uJ30pOwoJCQl0aGlzLnByb2Nlc3NFbmRUYWcoJ2J1dHRvbicpOwoJCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJCX0gZWxzZSB7CgkJCXRyZWUuZnJhbWVzZXRPayA9IGZhbHNlOwoJCQl0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CgkJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0FwcGxldE1hcnF1ZWVPYmplY3QgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoKE1hcmtlcik7CgkJdHJlZS5mcmFtZXNldE9rID0gZmFsc2U7Cgl9OwoKCW1vZGVzLmluQm9keS5lbmRUYWdBcHBsZXRNYXJxdWVlT2JqZWN0ID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICghdHJlZS5vcGVuRWxlbWVudHMuaW5TY29wZShuYW1lKSkgewoJCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIsIHtuYW1lOiBuYW1lfSk7CgkJfSBlbHNlIHsKCQkJdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CgkJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgIT0gbmFtZSkgewoJCQkJdHJlZS5wYXJzZUVycm9yKCdlbmQtdGFnLXRvby1lYXJseScsIHtuYW1lOiBuYW1lfSk7CgkJCX0KCQkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxQb3BwZWQobmFtZSk7CgkJCXRyZWUuY2xlYXJBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1htcCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgncCcpKQoJCQl0aGlzLnByb2Nlc3NFbmRUYWcoJ3AnKTsKCQl0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CgkJdHJlZS5wcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLmZyYW1lc2V0T2sgPSBmYWxzZTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnVGFibGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJaWYgKHRyZWUuY29tcGF0TW9kZSAhPT0gInF1aXJrcyIpCgkJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pbkJ1dHRvblNjb3BlKCdwJykpCgkJCQl0aGlzLnByb2Nlc3NFbmRUYWcoJ3AnKTsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpblRhYmxlJyk7CgkJdHJlZS5mcmFtZXNldE9rID0gZmFsc2U7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1ZvaWRGb3JtYXR0aW5nID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQl0cmVlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLmZyYW1lc2V0T2sgPSBmYWxzZTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnUGFyYW1Tb3VyY2VUcmFjayA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnSHIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluQnV0dG9uU2NvcGUoJ3AnKSkKCQkJdGhpcy5lbmRUYWdQKCdwJyk7CgkJdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJdHJlZS5mcmFtZXNldE9rID0gZmFsc2U7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0ltYWdlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1zdGFydC10YWctdHJlYXRlZC1hcycsIHtvcmlnaW5hbE5hbWU6ICdpbWFnZScsIG5ld05hbWU6ICdpbWcnfSk7CgkJdGhpcy5wcm9jZXNzU3RhcnRUYWcoJ2ltZycsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRUYWdJbnB1dCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl2YXIgY3VycmVudEZyYW1lc2V0T2sgPSB0cmVlLmZyYW1lc2V0T2s7CgkJdGhpcy5zdGFydFRhZ1ZvaWRGb3JtYXR0aW5nKG5hbWUsIGF0dHJpYnV0ZXMpOwoJCWZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7CgkJCWlmIChhdHRyaWJ1dGVzW2tleV0ubm9kZU5hbWUgPT0gJ3R5cGUnKSB7CgkJCQlpZiAoYXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZS50b0xvd2VyQ2FzZSgpID09ICdoaWRkZW4nKQoJCQkJCXRyZWUuZnJhbWVzZXRPayA9IGN1cnJlbnRGcmFtZXNldE9rOwoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ0lzaW5kZXggPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCdkZXByZWNhdGVkLXRhZycsIHtuYW1lOiAnaXNpbmRleCd9KTsKCQl0cmVlLnNlbGZDbG9zaW5nRmxhZ0Fja25vd2xlZGdlZCA9IHRydWU7CgkJaWYgKHRyZWUuZm9ybSkKCQkJcmV0dXJuOwoJCXZhciBmb3JtQXR0cmlidXRlcyA9IFtdOwoJCXZhciBpbnB1dEF0dHJpYnV0ZXMgPSBbXTsKCQl2YXIgcHJvbXB0ID0gIlRoaXMgaXMgYSBzZWFyY2hhYmxlIGluZGV4LiBFbnRlciBzZWFyY2gga2V5d29yZHM6ICI7CgkJZm9yICh2YXIga2V5IGluIGF0dHJpYnV0ZXMpIHsKCQkJc3dpdGNoIChhdHRyaWJ1dGVzW2tleV0ubm9kZU5hbWUpIHsKCQkJCWNhc2UgJ2FjdGlvbic6CgkJCQkJZm9ybUF0dHJpYnV0ZXMucHVzaCh7bm9kZU5hbWU6ICdhY3Rpb24nLAoJCQkJCQlub2RlVmFsdWU6IGF0dHJpYnV0ZXNba2V5XS5ub2RlVmFsdWV9KTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ3Byb21wdCc6CgkJCQkJcHJvbXB0ID0gYXR0cmlidXRlc1trZXldLm5vZGVWYWx1ZTsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ25hbWUnOgoJCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQlpbnB1dEF0dHJpYnV0ZXMucHVzaCh7bm9kZU5hbWU6IGF0dHJpYnV0ZXNba2V5XS5ub2RlTmFtZSwKCQkJCQkJbm9kZVZhbHVlOiBhdHRyaWJ1dGVzW2tleV0ubm9kZVZhbHVlfSk7CgkJCX0KCQl9CgkJaW5wdXRBdHRyaWJ1dGVzLnB1c2goe25vZGVOYW1lOiAnbmFtZScsIG5vZGVWYWx1ZTogJ2lzaW5kZXgnfSk7CgkJdGhpcy5wcm9jZXNzU3RhcnRUYWcoJ2Zvcm0nLCBmb3JtQXR0cmlidXRlcyk7CgkJdGhpcy5wcm9jZXNzU3RhcnRUYWcoJ2hyJyk7CgkJdGhpcy5wcm9jZXNzU3RhcnRUYWcoJ2xhYmVsJyk7CgkJdGhpcy5wcm9jZXNzQ2hhcmFjdGVycyhuZXcgQ2hhcmFjdGVyQnVmZmVyKHByb21wdCkpOwoJCXRoaXMucHJvY2Vzc1N0YXJ0VGFnKCdpbnB1dCcsIGlucHV0QXR0cmlidXRlcyk7CgkJdGhpcy5wcm9jZXNzRW5kVGFnKCdsYWJlbCcpOwoJCXRoaXMucHJvY2Vzc1N0YXJ0VGFnKCdocicpOwoJCXRoaXMucHJvY2Vzc0VuZFRhZygnZm9ybScpOwoJfTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRUYWdUZXh0YXJlYSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJdHJlZS50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlJDREFUQSk7CgkJdHJlZS5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0cmVlLmluc2VydGlvbk1vZGVOYW1lOwoJCXRyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lID0gdHJ1ZTsKCQl0cmVlLmZyYW1lc2V0T2sgPSBmYWxzZTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ3RleHQnKTsKCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnSUZyYW1lID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUuZnJhbWVzZXRPayA9IGZhbHNlOwoJCXRoaXMuc3RhcnRUYWdSYXdUZXh0KG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRUYWdSYXdUZXh0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1NlbGVjdCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCXRyZWUuZnJhbWVzZXRPayA9IGZhbHNlOwoJCXZhciBpbnNlcnRpb25Nb2RlTmFtZSA9IHRyZWUuaW5zZXJ0aW9uTW9kZU5hbWU7CgkJaWYgKGluc2VydGlvbk1vZGVOYW1lID09ICdpblRhYmxlJyB8fAoJCQlpbnNlcnRpb25Nb2RlTmFtZSA9PSAnaW5DYXB0aW9uJyB8fAoJCQlpbnNlcnRpb25Nb2RlTmFtZSA9PSAnaW5Db2x1bW5Hcm91cCcgfHwKCQkJaW5zZXJ0aW9uTW9kZU5hbWUgPT0gJ2luVGFibGVCb2R5JyB8fAoJCQlpbnNlcnRpb25Nb2RlTmFtZSA9PSAnaW5Sb3cnIHx8CgkJCWluc2VydGlvbk1vZGVOYW1lID09ICdpbkNlbGwnKSB7CgkJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnaW5TZWxlY3RJblRhYmxlJyk7CgkJfSBlbHNlIHsKCQkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpblNlbGVjdCcpOwoJCX0KCX07CgoJbW9kZXMuaW5Cb2R5LnN0YXJ0VGFnTWlzcGxhY2VkID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1zdGFydC10YWctaWdub3JlZCcsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluQm9keS5lbmRUYWdNaXNwbGFjZWQgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWciLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5pbkJvZHkuZW5kVGFnQnIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctdHJlYXRlZC1hcyIsIHtvcmlnaW5hbE5hbWU6ICJiciIsIG5ld05hbWU6ICJiciBlbGVtZW50In0pOwoJCXRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgW10pOwoJCXRyZWUucG9wRWxlbWVudCgpOwoJfTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRUYWdPcHRpb25PcHRncm91cCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lID09ICdvcHRpb24nKQoJCQl0cmVlLnBvcEVsZW1lbnQoKTsKCQl0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkJvZHkuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkJvZHkuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJdmFyIG5vZGU7CgkJZm9yICh2YXIgaSA9IHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHsKCQkJbm9kZSA9IHRyZWUub3BlbkVsZW1lbnRzLml0ZW0oaSk7CgkJCWlmIChub2RlLmxvY2FsTmFtZSA9PSBuYW1lKSB7CgkJCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MobmFtZSk7CgkJCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lICE9IG5hbWUpCgkJCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCQkJdHJlZS5vcGVuRWxlbWVudHMucmVtb3ZlX29wZW5FbGVtZW50c191bnRpbChmdW5jdGlvbih4KSB7cmV0dXJuIHggPT09IG5vZGU7fSk7CgkJCQlicmVhazsKCQkJfQoJCQlpZiAobm9kZS5pc1NwZWNpYWwoKSkgewoJCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ01hdGggPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCXRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQlhdHRyaWJ1dGVzID0gdHJlZS5hZGp1c3RNYXRoTUxBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwoJCWF0dHJpYnV0ZXMgPSB0cmVlLmFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwoJCXRyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmluQm9keS5zdGFydFRhZ1NWRyA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJdHJlZS5yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwoJCWF0dHJpYnV0ZXMgPSB0cmVlLmFkanVzdFNWR0F0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CgkJYXR0cmlidXRlcyA9IHRyZWUuYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CgkJdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmluQm9keS5lbmRUYWdQID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICghdHJlZS5vcGVuRWxlbWVudHMuaW5CdXR0b25TY29wZSgncCcpKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6ICdwJ30pOwoJCQl0aGlzLnN0YXJ0VGFnQ2xvc2VQKCdwJywgW10pOwoJCQl0aGlzLmVuZFRhZ1AoJ3AnKTsKCQl9IGVsc2UgewoJCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoJ3AnKTsKCQkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSAhPSAncCcpCgkJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtaW1wbGllZC1lbmQtdGFnJywge25hbWU6ICdwJ30pOwoJCQl0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFBvcHBlZChuYW1lKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5lbmRUYWdCb2R5ID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICghdHJlZS5vcGVuRWxlbWVudHMuaW5TY29wZSgnYm9keScpKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lICE9ICdib2R5JykgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLW9uZS1lbmQtdGFnLWJ1dC1nb3QtYW5vdGhlcicsIHsKCQkJCWV4cGVjdGVkTmFtZTogdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lLAoJCQkJZ290TmFtZTogbmFtZQoJCQl9KTsKCQl9CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdhZnRlckJvZHknKTsKCX07CgoJbW9kZXMuaW5Cb2R5LmVuZFRhZ0h0bWwgPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKCF0cmVlLm9wZW5FbGVtZW50cy5pblNjb3BlKCdib2R5JykpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCQlyZXR1cm47CgkJfQoJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgIT0gJ2JvZHknKSB7CgkJCXRyZWUucGFyc2VFcnJvcignZXhwZWN0ZWQtb25lLWVuZC10YWctYnV0LWdvdC1hbm90aGVyJywgewoJCQkJZXhwZWN0ZWROYW1lOiB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUsCgkJCQlnb3ROYW1lOiBuYW1lCgkJCX0pOwoJCX0KCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2FmdGVyQm9keScpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJfTsKCgltb2Rlcy5pbkJvZHkuZW5kVGFnQmxvY2sgPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKCF0cmVlLm9wZW5FbGVtZW50cy5pblNjb3BlKG5hbWUpKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9IGVsc2UgewoJCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKCQkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSAhPSBuYW1lKSB7CgkJCQl0cmVlLnBhcnNlRXJyb3IoJ2VuZC10YWctdG9vLWVhcmx5Jywge25hbWU6IG5hbWV9KTsKCQkJfQoJCQl0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFBvcHBlZChuYW1lKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5lbmRUYWdGb3JtID0gZnVuY3Rpb24obmFtZSkgIHsKCQl2YXIgbm9kZSA9IHRyZWUuZm9ybTsKCQl0cmVlLmZvcm0gPSBudWxsOwoJCWlmICghbm9kZSB8fCAhdHJlZS5vcGVuRWxlbWVudHMuaW5TY29wZShuYW1lKSkgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZycsIHtuYW1lOiBuYW1lfSk7CgkJfSBlbHNlIHsKCQkJdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CgkJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKSAhPSBub2RlKSB7CgkJCQl0cmVlLnBhcnNlRXJyb3IoJ2VuZC10YWctdG9vLWVhcmx5LWlnbm9yZWQnLCB7bmFtZTogJ2Zvcm0nfSk7CgkJCX0KCQkJdHJlZS5vcGVuRWxlbWVudHMucmVtb3ZlKG5vZGUpOwoJCX0KCX07CgoJbW9kZXMuaW5Cb2R5LmVuZFRhZ0xpc3RJdGVtID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICghdHJlZS5vcGVuRWxlbWVudHMuaW5MaXN0SXRlbVNjb3BlKG5hbWUpKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9IGVsc2UgewoJCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MobmFtZSk7CgkJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgIT0gbmFtZSkKCQkJCXRyZWUucGFyc2VFcnJvcignZW5kLXRhZy10b28tZWFybHknLCB7bmFtZTogbmFtZX0pOwoJCQl0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFBvcHBlZChuYW1lKTsKCQl9Cgl9OwoKCW1vZGVzLmluQm9keS5lbmRUYWdIZWFkaW5nID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICghdHJlZS5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJFbGVtZW50SW5TY29wZSgpKSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQkJcmV0dXJuOwoJCX0KCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lICE9IG5hbWUpCgkJCXRyZWUucGFyc2VFcnJvcignZW5kLXRhZy10b28tZWFybHknLCB7bmFtZTogbmFtZX0pOwoKCQl0cmVlLm9wZW5FbGVtZW50cy5yZW1vdmVfb3BlbkVsZW1lbnRzX3VudGlsKGZ1bmN0aW9uKGUpIHsKCQkJcmV0dXJuIGUuaXNOdW1iZXJlZEhlYWRlcigpOwoJCX0pOwoJfTsKCgltb2Rlcy5pbkJvZHkuZW5kVGFnRm9ybWF0dGluZyA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQlpZiAoIXRyZWUuYWRvcHRpb25BZ2VuY3lFbmRUYWcobmFtZSkpCgkJCXRoaXMuZW5kVGFnT3RoZXIobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluQ2FwdGlvbiA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuaW5DYXB0aW9uLnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQlodG1sOiAnc3RhcnRUYWdIdG1sJywKCQljYXB0aW9uOiAnc3RhcnRUYWdUYWJsZUVsZW1lbnQnLAoJCWNvbDogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQljb2xncm91cDogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQl0Ym9keTogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQl0ZDogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQl0Zm9vdDogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQl0aGVhZDogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQl0cjogJ3N0YXJ0VGFnVGFibGVFbGVtZW50JywKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5DYXB0aW9uLmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJY2FwdGlvbjogJ2VuZFRhZ0NhcHRpb24nLAoJCXRhYmxlOiAnZW5kVGFnVGFibGUnLAoJCWJvZHk6ICdlbmRUYWdJZ25vcmUnLAoJCWNvbDogJ2VuZFRhZ0lnbm9yZScsCgkJY29sZ3JvdXA6ICdlbmRUYWdJZ25vcmUnLAoJCWh0bWw6ICdlbmRUYWdJZ25vcmUnLAoJCXRib2R5OiAnZW5kVGFnSWdub3JlJywKCQl0ZDogJ2VuZFRhZ0lnbm9yZScsCgkJdGZvb2Q6ICdlbmRUYWdJZ25vcmUnLAoJCXRoZWFkOiAnZW5kVGFnSWdub3JlJywKCQl0cjogJ2VuZFRhZ0lnbm9yZScsCgkJJy1kZWZhdWx0JzogJ2VuZFRhZ090aGVyJwoJfTsKCgltb2Rlcy5pbkNhcHRpb24ucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihkYXRhKSB7CgkJbW9kZXMuaW5Cb2R5LnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpOwoJfTsKCgltb2Rlcy5pbkNhcHRpb24uc3RhcnRUYWdUYWJsZUVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCXZhciBpZ25vcmVFbmRUYWcgPSAhdHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKCdjYXB0aW9uJyk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcoJ2NhcHRpb24nKTsKCQlpZiAoIWlnbm9yZUVuZFRhZykgdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5DYXB0aW9uLnN0YXJ0VGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCW1vZGVzLmluQm9keS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJfTsKCgltb2Rlcy5pbkNhcHRpb24uZW5kVGFnQ2FwdGlvbiA9IGZ1bmN0aW9uKG5hbWUpIHsKCQlpZiAoIXRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgnY2FwdGlvbicpKSB7CgkJCWFzc2VydC5vayh0cmVlLmNvbnRleHQpOwoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZycsIHtuYW1lOiBuYW1lfSk7CgkJfSBlbHNlIHsKCQkJdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CgkJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgIT0gJ2NhcHRpb24nKSB7CgkJCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLW9uZS1lbmQtdGFnLWJ1dC1nb3QtYW5vdGhlcicsIHsKCQkJCQlnb3ROYW1lOiAiY2FwdGlvbiIsCgkJCQkJZXhwZWN0ZWROYW1lOiB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUKCQkJCX0pOwoJCQl9CgkJCXRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsUG9wcGVkKCdjYXB0aW9uJyk7CgkJCXRyZWUuY2xlYXJBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpblRhYmxlJyk7CgkJfQoJfTsKCgltb2Rlcy5pbkNhcHRpb24uZW5kVGFnVGFibGUgPSBmdW5jdGlvbihuYW1lKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWJsZS1pbi1jYXB0aW9uIik7CgkJdmFyIGlnbm9yZUVuZFRhZyA9ICF0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ2NhcHRpb24nKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZygnY2FwdGlvbicpOwoJCWlmICghaWdub3JlRW5kVGFnKSB0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuaW5DYXB0aW9uLmVuZFRhZ0lnbm9yZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZycsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluQ2FwdGlvbi5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQltb2Rlcy5pbkJvZHkucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuaW5DZWxsID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5pbkNlbGwuc3RhcnRfdGFnX2hhbmRsZXJzID0gewoJCWh0bWw6ICdzdGFydFRhZ0h0bWwnLAoJCWNhcHRpb246ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCWNvbDogJ3N0YXJ0VGFnVGFibGVPdGhlcicsCgkJY29sZ3JvdXA6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCXRib2R5OiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQl0ZDogJ3N0YXJ0VGFnVGFibGVPdGhlcicsCgkJdGZvb3Q6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCXRoOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQl0aGVhZDogJ3N0YXJ0VGFnVGFibGVPdGhlcicsCgkJdHI6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCSctZGVmYXVsdCc6ICdzdGFydFRhZ090aGVyJwoJfTsKCgltb2Rlcy5pbkNlbGwuZW5kX3RhZ19oYW5kbGVycyA9IHsKCQl0ZDogJ2VuZFRhZ1RhYmxlQ2VsbCcsCgkJdGg6ICdlbmRUYWdUYWJsZUNlbGwnLAoJCWJvZHk6ICdlbmRUYWdJZ25vcmUnLAoJCWNhcHRpb246ICdlbmRUYWdJZ25vcmUnLAoJCWNvbDogJ2VuZFRhZ0lnbm9yZScsCgkJY29sZ3JvdXA6ICdlbmRUYWdJZ25vcmUnLAoJCWh0bWw6ICdlbmRUYWdJZ25vcmUnLAoJCXRhYmxlOiAnZW5kVGFnSW1wbHknLAoJCXRib2R5OiAnZW5kVGFnSW1wbHknLAoJCXRmb290OiAnZW5kVGFnSW1wbHknLAoJCXRoZWFkOiAnZW5kVGFnSW1wbHknLAoJCXRyOiAnZW5kVGFnSW1wbHknLAoJCSctZGVmYXVsdCc6ICdlbmRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5DZWxsLnByb2Nlc3NDaGFyYWN0ZXJzID0gZnVuY3Rpb24oZGF0YSkgewoJCW1vZGVzLmluQm9keS5wcm9jZXNzQ2hhcmFjdGVycyhkYXRhKTsKCX07CgoJbW9kZXMuaW5DZWxsLnN0YXJ0VGFnVGFibGVPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgndGQnKSB8fCB0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3RoJykpIHsKCQkJdGhpcy5jbG9zZUNlbGwoKTsKCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZyk7CgkJfSBlbHNlIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLXN0YXJ0LXRhZycsIHtuYW1lOiBuYW1lfSk7CgkJfQoJfTsKCgltb2Rlcy5pbkNlbGwuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJbW9kZXMuaW5Cb2R5LnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmluQ2VsbC5lbmRUYWdUYWJsZUNlbGwgPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKSkgewoJCQl0cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MobmFtZSk7CgkJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgIT0gbmFtZS50b0xvd2VyQ2FzZSgpKSB7CgkJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtY2VsbC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQkJCXRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsUG9wcGVkKG5hbWUpOwoJCQl9IGVsc2UgewoJCQkJdHJlZS5wb3BFbGVtZW50KCk7CgkJCX0KCQkJdHJlZS5jbGVhckFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwoJCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luUm93Jyk7CgkJfSBlbHNlIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCX0KCX07CgoJbW9kZXMuaW5DZWxsLmVuZFRhZ0lnbm9yZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZycsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluQ2VsbC5lbmRUYWdJbXBseSA9IGZ1bmN0aW9uKG5hbWUpIHsKCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKG5hbWUpKSB7CgkJCXRoaXMuY2xvc2VDZWxsKCk7CgkJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJCX0gZWxzZSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9Cgl9OwoKCW1vZGVzLmluQ2VsbC5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQltb2Rlcy5pbkJvZHkucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuaW5DZWxsLmNsb3NlQ2VsbCA9IGZ1bmN0aW9uKCkgewoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3RkJykpIHsKCQkJdGhpcy5lbmRUYWdUYWJsZUNlbGwoJ3RkJyk7CgkJfSBlbHNlIGlmICh0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3RoJykpIHsKCQkJdGhpcy5lbmRUYWdUYWJsZUNlbGwoJ3RoJyk7CgkJfQoJfTsKCgoJbW9kZXMuaW5Db2x1bW5Hcm91cCA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuaW5Db2x1bW5Hcm91cC5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJY29sOiAnc3RhcnRUYWdDb2wnLAoJCSctZGVmYXVsdCc6ICdzdGFydFRhZ090aGVyJwoJfTsKCgltb2Rlcy5pbkNvbHVtbkdyb3VwLmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJY29sZ3JvdXA6ICdlbmRUYWdDb2xncm91cCcsCgkJY29sOiAnZW5kVGFnQ29sJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluQ29sdW1uR3JvdXAuaWdub3JlRW5kVGFnQ29sZ3JvdXAgPSBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lID09ICdodG1sJzsKCX07CgoJbW9kZXMuaW5Db2x1bW5Hcm91cC5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGJ1ZmZlcikgewoJCXZhciBsZWFkaW5nV2hpdGVzcGFjZSA9IGJ1ZmZlci50YWtlTGVhZGluZ1doaXRlc3BhY2UoKTsKCQlpZiAobGVhZGluZ1doaXRlc3BhY2UpCgkJCXRyZWUuaW5zZXJ0VGV4dChsZWFkaW5nV2hpdGVzcGFjZSk7CgkJaWYgKCFidWZmZXIubGVuZ3RoKQoJCQlyZXR1cm47CgkJdmFyIGlnbm9yZUVuZFRhZyA9IHRoaXMuaWdub3JlRW5kVGFnQ29sZ3JvdXAoKTsKCQl0aGlzLmVuZFRhZ0NvbGdyb3VwKCdjb2xncm91cCcpOwoJCWlmICghaWdub3JlRW5kVGFnKSB0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKTsKCX07CgoJbW9kZXMuaW5Db2x1bW5Hcm91cC5zdGFydFRhZ0NvbCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Db2x1bW5Hcm91cC5zdGFydFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpIHsKCQl2YXIgaWdub3JlRW5kVGFnID0gdGhpcy5pZ25vcmVFbmRUYWdDb2xncm91cCgpOwoJCXRoaXMuZW5kVGFnQ29sZ3JvdXAoJ2NvbGdyb3VwJyk7CgkJaWYgKCFpZ25vcmVFbmRUYWcpIHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJfTsKCgltb2Rlcy5pbkNvbHVtbkdyb3VwLmVuZFRhZ0NvbGdyb3VwID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICh0aGlzLmlnbm9yZUVuZFRhZ0NvbGdyb3VwKCkpIHsKCQkJYXNzZXJ0Lm9rKHRyZWUuY29udGV4dCk7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9IGVsc2UgewoJCQl0cmVlLnBvcEVsZW1lbnQoKTsKCQkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpblRhYmxlJyk7CgkJfQoJfTsKCgltb2Rlcy5pbkNvbHVtbkdyb3VwLmVuZFRhZ0NvbCA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoIm5vLWVuZC10YWciLCB7bmFtZTogJ2NvbCd9KTsKCX07CgoJbW9kZXMuaW5Db2x1bW5Hcm91cC5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl2YXIgaWdub3JlRW5kVGFnID0gdGhpcy5pZ25vcmVFbmRUYWdDb2xncm91cCgpOwoJCXRoaXMuZW5kVGFnQ29sZ3JvdXAoJ2NvbGdyb3VwJyk7CgkJaWYgKCFpZ25vcmVFbmRUYWcpIHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpIDsKCX07CgoJbW9kZXMuaW5Gb3JlaWduQ29udGVudCA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuaW5Gb3JlaWduQ29udGVudC5wcm9jZXNzU3RhcnRUYWcgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCWlmIChbJ2InLCAnYmlnJywgJ2Jsb2NrcXVvdGUnLCAnYm9keScsICdicicsICdjZW50ZXInLCAnY29kZScsICdkZCcsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW0nLCAnZW1iZWQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdocicsICdpJywgJ2ltZycsICdsaScsICdsaXN0aW5nJywgJ21lbnUnLCAnbWV0YScsICdub2JyJywgJ29sJywgJ3AnLCAncHJlJywgJ3J1YnknLCAncycsICdzbWFsbCcsICdzcGFuJywgJ3N0cm9uZycsICdzdHJpa2UnLCAnc3ViJywgJ3N1cCcsICd0YWJsZScsICd0dCcsICd1JywgJ3VsJywgJ3ZhciddLmluZGV4T2YobmFtZSkgIT0gLTEKCQkJCXx8IChuYW1lID09ICdmb250JyAmJiBhdHRyaWJ1dGVzLnNvbWUoZnVuY3Rpb24oYXR0cil7IHJldHVybiBbJ2NvbG9yJywgJ2ZhY2UnLCAnc2l6ZSddLmluZGV4T2YoYXR0ci5ub2RlTmFtZSkgPj0gMCB9KSkpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWh0bWwtZWxlbWVudC1pbi1mb3JlaWduLWNvbnRlbnQnLCB7bmFtZTogbmFtZX0pOwoJCQl3aGlsZSAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkuaXNGb3JlaWduKCkKCQkJCSYmICF0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KCkKCQkJCSYmICF0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5pc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KCkpIHsKCQkJCXRyZWUub3BlbkVsZW1lbnRzLnBvcCgpOwoJCQl9CgkJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJCQlyZXR1cm47CgkJfQoJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5uYW1lc3BhY2VVUkkgPT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiKSB7CgkJCWF0dHJpYnV0ZXMgPSB0cmVlLmFkanVzdE1hdGhNTEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CgkJfQoJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5uYW1lc3BhY2VVUkkgPT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikgewoJCQluYW1lID0gdHJlZS5hZGp1c3RTVkdUYWdOYW1lQ2FzZShuYW1lKTsKCQkJYXR0cmlidXRlcyA9IHRyZWUuYWRqdXN0U1ZHQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKCQl9CgkJYXR0cmlidXRlcyA9IHRyZWUuYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CgkJdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5uYW1lc3BhY2VVUkksIHNlbGZDbG9zaW5nKTsKCX07CgoJbW9kZXMuaW5Gb3JlaWduQ29udGVudC5wcm9jZXNzRW5kVGFnID0gZnVuY3Rpb24obmFtZSkgewoJCXZhciBub2RlID0gdHJlZS5jdXJyZW50U3RhY2tJdGVtKCk7CgkJdmFyIGluZGV4ID0gdHJlZS5vcGVuRWxlbWVudHMubGVuZ3RoIC0gMTsKCQlpZiAobm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSAhPSBuYW1lKQoJCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZyIsIHtuYW1lOiBuYW1lfSk7CgoJCXdoaWxlICh0cnVlKSB7CgkJCWlmIChpbmRleCA9PT0gMCkKCQkJCWJyZWFrOwoJCQlpZiAobm9kZS5sb2NhbE5hbWUudG9Mb3dlckNhc2UoKSA9PSBuYW1lKSB7CgkJCQl3aGlsZSAodHJlZS5vcGVuRWxlbWVudHMucG9wKCkgIT0gbm9kZSk7CgkJCQlicmVhazsKCQkJfQoJCQlpbmRleCAtPSAxOwoJCQlub2RlID0gdHJlZS5vcGVuRWxlbWVudHMuaXRlbShpbmRleCk7CgkJCWlmIChub2RlLmlzRm9yZWlnbigpKSB7CgkJCQljb250aW51ZTsKCQkJfSBlbHNlIHsKCQkJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9OwoKCW1vZGVzLmluRm9yZWlnbkNvbnRlbnQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQl2YXIgY2hhcmFjdGVycyA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7CgkJY2hhcmFjdGVycyA9IGNoYXJhY3RlcnMucmVwbGFjZSgvXHUwMDAwL2csIGZ1bmN0aW9uKG1hdGNoLCBpbmRleCl7CgkJCXRyZWUucGFyc2VFcnJvcignaW52YWxpZC1jb2RlcG9pbnQnKTsKCQkJcmV0dXJuICdcdUZGRkQnOwoJCX0pOwoJCWlmICh0cmVlLmZyYW1lc2V0T2sgJiYgIWlzQWxsV2hpdGVzcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXJzKGNoYXJhY3RlcnMpKQoJCQl0cmVlLmZyYW1lc2V0T2sgPSBmYWxzZTsKCQl0cmVlLmluc2VydFRleHQoY2hhcmFjdGVycyk7Cgl9OwoKCW1vZGVzLmluSGVhZE5vc2NyaXB0ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5pbkhlYWROb3NjcmlwdC5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJYmFzZWZvbnQ6ICdzdGFydFRhZ0Jhc2Vmb250Qmdzb3VuZExpbmtNZXRhTm9mcmFtZXNTdHlsZScsCgkJYmdzb3VuZDogJ3N0YXJ0VGFnQmFzZWZvbnRCZ3NvdW5kTGlua01ldGFOb2ZyYW1lc1N0eWxlJywKCQlsaW5rOiAnc3RhcnRUYWdCYXNlZm9udEJnc291bmRMaW5rTWV0YU5vZnJhbWVzU3R5bGUnLAoJCW1ldGE6ICdzdGFydFRhZ0Jhc2Vmb250Qmdzb3VuZExpbmtNZXRhTm9mcmFtZXNTdHlsZScsCgkJbm9mcmFtZXM6ICdzdGFydFRhZ0Jhc2Vmb250Qmdzb3VuZExpbmtNZXRhTm9mcmFtZXNTdHlsZScsCgkJc3R5bGU6ICdzdGFydFRhZ0Jhc2Vmb250Qmdzb3VuZExpbmtNZXRhTm9mcmFtZXNTdHlsZScsCgkJaGVhZDogJ3N0YXJ0VGFnSGVhZE5vc2NyaXB0JywKCQlub3NjcmlwdDogJ3N0YXJ0VGFnSGVhZE5vc2NyaXB0JywKCQkiLWRlZmF1bHQiOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5IZWFkTm9zY3JpcHQuZW5kX3RhZ19oYW5kbGVycyA9IHsKCQlub3NjcmlwdDogJ2VuZFRhZ05vc2NyaXB0JywKCQlicjogJ2VuZFRhZ0JyJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluSGVhZE5vc2NyaXB0LnByb2Nlc3NDaGFyYWN0ZXJzID0gZnVuY3Rpb24oYnVmZmVyKSB7CgkJdmFyIGxlYWRpbmdXaGl0ZXNwYWNlID0gYnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpOwoJCWlmIChsZWFkaW5nV2hpdGVzcGFjZSkKCQkJdHJlZS5pbnNlcnRUZXh0KGxlYWRpbmdXaGl0ZXNwYWNlKTsKCQlpZiAoIWJ1ZmZlci5sZW5ndGgpCgkJCXJldHVybjsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtY2hhci1pbi1mcmFtZXNldCIpOwoJCXRoaXMuYW55dGhpbmdFbHNlKCk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGJ1ZmZlcik7Cgl9OwoKCW1vZGVzLmluSGVhZE5vc2NyaXB0LnByb2Nlc3NDb21tZW50ID0gZnVuY3Rpb24oZGF0YSkgewoJCW1vZGVzLmluSGVhZC5wcm9jZXNzQ29tbWVudChkYXRhKTsKCX07CgoJbW9kZXMuaW5IZWFkTm9zY3JpcHQuc3RhcnRUYWdCYXNlZm9udEJnc291bmRMaW5rTWV0YU5vZnJhbWVzU3R5bGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJbW9kZXMuaW5IZWFkLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5IZWFkTm9zY3JpcHQuc3RhcnRUYWdIZWFkTm9zY3JpcHQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbi1mcmFtZXNldCIsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluSGVhZE5vc2NyaXB0LnN0YXJ0VGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbi1mcmFtZXNldCIsIHtuYW1lOiBuYW1lfSk7CgkJdGhpcy5hbnl0aGluZ0Vsc2UoKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkhlYWROb3NjcmlwdC5lbmRUYWdCciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi1mcmFtZXNldCIsIHtuYW1lOiBuYW1lfSk7CgkJdGhpcy5hbnl0aGluZ0Vsc2UoKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc0VuZFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5IZWFkTm9zY3JpcHQuZW5kVGFnTm9zY3JpcHQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wb3BFbGVtZW50KCk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkhlYWQnKTsKCX07CgoJbW9kZXMuaW5IZWFkTm9zY3JpcHQuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWVuZC10YWctaW4tZnJhbWVzZXQiLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5pbkhlYWROb3NjcmlwdC5hbnl0aGluZ0Vsc2UgPSBmdW5jdGlvbigpIHsKCQl0cmVlLnBvcEVsZW1lbnQoKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luSGVhZCcpOwoJfTsKCgoJbW9kZXMuaW5GcmFtZXNldCA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuaW5GcmFtZXNldC5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJZnJhbWVzZXQ6ICdzdGFydFRhZ0ZyYW1lc2V0JywKCQlmcmFtZTogJ3N0YXJ0VGFnRnJhbWUnLAoJCW5vZnJhbWVzOiAnc3RhcnRUYWdOb2ZyYW1lcycsCgkJIi1kZWZhdWx0IjogJ3N0YXJ0VGFnT3RoZXInCgl9OwoKCW1vZGVzLmluRnJhbWVzZXQuZW5kX3RhZ19oYW5kbGVycyA9IHsKCQlmcmFtZXNldDogJ2VuZFRhZ0ZyYW1lc2V0JywKCQlub2ZyYW1lczogJ2VuZFRhZ05vZnJhbWVzJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluRnJhbWVzZXQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihkYXRhKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWNoYXItaW4tZnJhbWVzZXQiKTsKCX07CgoJbW9kZXMuaW5GcmFtZXNldC5zdGFydFRhZ0ZyYW1lc2V0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5GcmFtZXNldC5zdGFydFRhZ0ZyYW1lID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUuaW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pbkZyYW1lc2V0LnN0YXJ0VGFnTm9mcmFtZXMgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJbW9kZXMuaW5Cb2R5LnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5GcmFtZXNldC5zdGFydFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zdGFydC10YWctaW4tZnJhbWVzZXQiLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5pbkZyYW1lc2V0LmVuZFRhZ0ZyYW1lc2V0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgPT0gJ2h0bWwnKSB7CgkJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1mcmFtZXNldC1pbi1mcmFtZXNldC1pbm5lcmh0bWwiKTsKCQl9IGVsc2UgewoJCQl0cmVlLnBvcEVsZW1lbnQoKTsKCQl9CgoJCWlmICghdHJlZS5jb250ZXh0ICYmIHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSAhPSAnZnJhbWVzZXQnKSB7CgkJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnYWZ0ZXJGcmFtZXNldCcpOwoJCX0KCX07CgoJbW9kZXMuaW5GcmFtZXNldC5lbmRUYWdOb2ZyYW1lcyA9IGZ1bmN0aW9uKG5hbWUpIHsKCQltb2Rlcy5pbkJvZHkucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuaW5GcmFtZXNldC5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi1mcmFtZXNldCIsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluVGFibGUgPSBPYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpOwoKCW1vZGVzLmluVGFibGUuc3RhcnRfdGFnX2hhbmRsZXJzID0gewoJCWh0bWw6ICdzdGFydFRhZ0h0bWwnLAoJCWNhcHRpb246ICdzdGFydFRhZ0NhcHRpb24nLAoJCWNvbGdyb3VwOiAnc3RhcnRUYWdDb2xncm91cCcsCgkJY29sOiAnc3RhcnRUYWdDb2wnLAoJCXRhYmxlOiAnc3RhcnRUYWdUYWJsZScsCgkJdGJvZHk6ICdzdGFydFRhZ1Jvd0dyb3VwJywKCQl0Zm9vdDogJ3N0YXJ0VGFnUm93R3JvdXAnLAoJCXRoZWFkOiAnc3RhcnRUYWdSb3dHcm91cCcsCgkJdGQ6ICdzdGFydFRhZ0ltcGx5VGJvZHknLAoJCXRoOiAnc3RhcnRUYWdJbXBseVRib2R5JywKCQl0cjogJ3N0YXJ0VGFnSW1wbHlUYm9keScsCgkJc3R5bGU6ICdzdGFydFRhZ1N0eWxlU2NyaXB0JywKCQlzY3JpcHQ6ICdzdGFydFRhZ1N0eWxlU2NyaXB0JywKCQlpbnB1dDogJ3N0YXJ0VGFnSW5wdXQnLAoJCWZvcm06ICdzdGFydFRhZ0Zvcm0nLAoJCSctZGVmYXVsdCc6ICdzdGFydFRhZ090aGVyJwoJfTsKCgltb2Rlcy5pblRhYmxlLmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJdGFibGU6ICdlbmRUYWdUYWJsZScsCgkJYm9keTogJ2VuZFRhZ0lnbm9yZScsCgkJY2FwdGlvbjogJ2VuZFRhZ0lnbm9yZScsCgkJY29sOiAnZW5kVGFnSWdub3JlJywKCQljb2xncm91cDogJ2VuZFRhZ0lnbm9yZScsCgkJaHRtbDogJ2VuZFRhZ0lnbm9yZScsCgkJdGJvZHk6ICdlbmRUYWdJZ25vcmUnLAoJCXRkOiAnZW5kVGFnSWdub3JlJywKCQl0Zm9vdDogJ2VuZFRhZ0lnbm9yZScsCgkJdGg6ICdlbmRUYWdJZ25vcmUnLAoJCXRoZWFkOiAnZW5kVGFnSWdub3JlJywKCQl0cjogJ2VuZFRhZ0lnbm9yZScsCgkJJy1kZWZhdWx0JzogJ2VuZFRhZ090aGVyJwoJfTsKCgltb2Rlcy5pblRhYmxlLnByb2Nlc3NDaGFyYWN0ZXJzID0gIGZ1bmN0aW9uKGRhdGEpIHsKCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkuaXNGb3N0ZXJQYXJlbnRpbmcoKSkgewoJCQl2YXIgb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gdHJlZS5pbnNlcnRpb25Nb2RlTmFtZTsKCQkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpblRhYmxlVGV4dCcpOwoJCQl0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG9yaWdpbmFsSW5zZXJ0aW9uTW9kZTsKCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NDaGFyYWN0ZXJzKGRhdGEpOwoJCX0gZWxzZSB7CgkJCXRyZWUucmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudCA9IHRydWU7CgkJCW1vZGVzLmluQm9keS5wcm9jZXNzQ2hhcmFjdGVycyhkYXRhKTsKCQkJdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50ID0gZmFsc2U7CgkJfQoJfTsKCgltb2Rlcy5pblRhYmxlLnN0YXJ0VGFnQ2FwdGlvbiA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKCQl0cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoKE1hcmtlcik7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnaW5DYXB0aW9uJyk7Cgl9OwoKCW1vZGVzLmluVGFibGUuc3RhcnRUYWdDb2xncm91cCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKCdpbkNvbHVtbkdyb3VwJyk7Cgl9OwoKCW1vZGVzLmluVGFibGUuc3RhcnRUYWdDb2wgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdGhpcy5zdGFydFRhZ0NvbGdyb3VwKCdjb2xncm91cCcsIFtdKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pblRhYmxlLnN0YXJ0VGFnUm93R3JvdXAgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSgnaW5UYWJsZUJvZHknKTsKCX07CgoJbW9kZXMuaW5UYWJsZS5zdGFydFRhZ0ltcGx5VGJvZHkgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdGhpcy5zdGFydFRhZ1Jvd0dyb3VwKCd0Ym9keScsIFtdKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pblRhYmxlLnN0YXJ0VGFnVGFibGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLWVuZC10YWciLAoJCQkJe3N0YXJ0TmFtZTogInRhYmxlIiwgZW5kTmFtZTogInRhYmxlIn0pOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKCd0YWJsZScpOwoJCWlmICghdHJlZS5jb250ZXh0KSB0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pblRhYmxlLnN0YXJ0VGFnU3R5bGVTY3JpcHQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJbW9kZXMuaW5IZWFkLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5UYWJsZS5zdGFydFRhZ0lucHV0ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCWZvciAodmFyIGtleSBpbiBhdHRyaWJ1dGVzKSB7CgkJCWlmIChhdHRyaWJ1dGVzW2tleV0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PSAndHlwZScpIHsKCQkJCWlmIChhdHRyaWJ1dGVzW2tleV0ubm9kZVZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gJ2hpZGRlbicpIHsKCQkJCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtaGlkZGVuLWlucHV0LWluLXRhYmxlIik7CgkJCQkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJCQkJCXRyZWUub3BlbkVsZW1lbnRzLnBvcCgpOwoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXRoaXMuc3RhcnRUYWdPdGhlcihuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5UYWJsZS5zdGFydFRhZ0Zvcm0gPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWZvcm0taW4tdGFibGUiKTsKCQlpZiAoIXRyZWUuZm9ybSkgewoJCQl0cmVlLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7CgkJCXRyZWUuZm9ybSA9IHRyZWUuY3VycmVudFN0YWNrSXRlbSgpOwoJCQl0cmVlLm9wZW5FbGVtZW50cy5wb3AoKTsKCQl9Cgl9OwoKCW1vZGVzLmluVGFibGUuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbXBsaWVzLXRhYmxlLXZvb2RvbyIsIHtuYW1lOiBuYW1lfSk7CgkJdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50ID0gdHJ1ZTsKCQltb2Rlcy5pbkJvZHkucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKTsKCQl0cmVlLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgPSBmYWxzZTsKCX07CgoJbW9kZXMuaW5UYWJsZS5lbmRUYWdUYWJsZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCQlpZiAodHJlZS5vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKG5hbWUpKSB7CgkJCXRyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwoJCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lICE9IG5hbWUpIHsKCQkJCXRyZWUucGFyc2VFcnJvcigiZW5kLXRhZy10b28tZWFybHktbmFtZWQiLCB7Z290TmFtZTogJ3RhYmxlJywgZXhwZWN0ZWROYW1lOiB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWV9KTsKCQkJfQoKCQkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxQb3BwZWQoJ3RhYmxlJyk7CgkJCXRyZWUucmVzZXRJbnNlcnRpb25Nb2RlKCk7CgkJfSBlbHNlIHsKCQkJYXNzZXJ0Lm9rKHRyZWUuY29udGV4dCk7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9Cgl9OwoKCW1vZGVzLmluVGFibGUuZW5kVGFnSWdub3JlID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnIiwge25hbWU6IG5hbWV9KTsKCX07CgoJbW9kZXMuaW5UYWJsZS5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtZW5kLXRhZy1pbXBsaWVzLXRhYmxlLXZvb2RvbyIsIHtuYW1lOiBuYW1lfSk7CgkJdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50ID0gdHJ1ZTsKCQltb2Rlcy5pbkJvZHkucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCQl0cmVlLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgPSBmYWxzZTsKCX07CgoJbW9kZXMuaW5UYWJsZVRleHQgPSBPYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpOwoKCW1vZGVzLmluVGFibGVUZXh0LmZsdXNoQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKCkgewoJCXZhciBjaGFyYWN0ZXJzID0gdHJlZS5wZW5kaW5nVGFibGVDaGFyYWN0ZXJzLmpvaW4oJycpOwoJCWlmICghaXNBbGxXaGl0ZXNwYWNlKGNoYXJhY3RlcnMpKSB7CgkJCXRyZWUucmVkaXJlY3RBdHRhY2hUb0Zvc3RlclBhcmVudCA9IHRydWU7CgkJCXRyZWUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKCQkJdHJlZS5pbnNlcnRUZXh0KGNoYXJhY3RlcnMpOwoJCQl0cmVlLmZyYW1lc2V0T2sgPSBmYWxzZTsKCQkJdHJlZS5yZWRpcmVjdEF0dGFjaFRvRm9zdGVyUGFyZW50ID0gZmFsc2U7CgkJfSBlbHNlIHsKCQkJdHJlZS5pbnNlcnRUZXh0KGNoYXJhY3RlcnMpOwoJCX0KCQl0cmVlLnBlbmRpbmdUYWJsZUNoYXJhY3RlcnMgPSBbXTsKCX07CgoJbW9kZXMuaW5UYWJsZVRleHQucHJvY2Vzc0NvbW1lbnQgPSBmdW5jdGlvbihkYXRhKSB7CgkJdGhpcy5mbHVzaENoYXJhY3RlcnMoKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUodHJlZS5vcmlnaW5hbEluc2VydGlvbk1vZGUpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzQ29tbWVudChkYXRhKTsKCX07CgoJbW9kZXMuaW5UYWJsZVRleHQucHJvY2Vzc0VPRiA9IGZ1bmN0aW9uKGRhdGEpIHsKCQl0aGlzLmZsdXNoQ2hhcmFjdGVycygpOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSh0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKTsKCX07CgoJbW9kZXMuaW5UYWJsZVRleHQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQl2YXIgY2hhcmFjdGVycyA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7CgkJY2hhcmFjdGVycyA9IGNoYXJhY3RlcnMucmVwbGFjZSgvXHUwMDAwL2csIGZ1bmN0aW9uKG1hdGNoLCBpbmRleCl7CgkJCXRyZWUucGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJcmV0dXJuICcnOwoJCX0pOwoJCWlmICghY2hhcmFjdGVycykKCQkJcmV0dXJuOwoJCXRyZWUucGVuZGluZ1RhYmxlQ2hhcmFjdGVycy5wdXNoKGNoYXJhY3RlcnMpOwoJfTsKCgltb2Rlcy5pblRhYmxlVGV4dC5wcm9jZXNzU3RhcnRUYWcgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCXRoaXMuZmx1c2hDaGFyYWN0ZXJzKCk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKHRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlKTsKCQl0cmVlLmluc2VydGlvbk1vZGUucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKTsKCX07CgoJbW9kZXMuaW5UYWJsZVRleHQucHJvY2Vzc0VuZFRhZyA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0aGlzLmZsdXNoQ2hhcmFjdGVycygpOwoJCXRyZWUuc2V0SW5zZXJ0aW9uTW9kZSh0cmVlLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluVGFibGVCb2R5ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5pblRhYmxlQm9keS5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJdHI6ICdzdGFydFRhZ1RyJywKCQl0ZDogJ3N0YXJ0VGFnVGFibGVDZWxsJywKCQl0aDogJ3N0YXJ0VGFnVGFibGVDZWxsJywKCQljYXB0aW9uOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQljb2w6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCWNvbGdyb3VwOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQl0Ym9keTogJ3N0YXJ0VGFnVGFibGVPdGhlcicsCgkJdGZvb3Q6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCXRoZWFkOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5UYWJsZUJvZHkuZW5kX3RhZ19oYW5kbGVycyA9IHsKCQl0YWJsZTogJ2VuZFRhZ1RhYmxlJywKCQl0Ym9keTogJ2VuZFRhZ1RhYmxlUm93R3JvdXAnLAoJCXRmb290OiAnZW5kVGFnVGFibGVSb3dHcm91cCcsCgkJdGhlYWQ6ICdlbmRUYWdUYWJsZVJvd0dyb3VwJywKCQlib2R5OiAnZW5kVGFnSWdub3JlJywKCQljYXB0aW9uOiAnZW5kVGFnSWdub3JlJywKCQljb2w6ICdlbmRUYWdJZ25vcmUnLAoJCWNvbGdyb3VwOiAnZW5kVGFnSWdub3JlJywKCQlodG1sOiAnZW5kVGFnSWdub3JlJywKCQl0ZDogJ2VuZFRhZ0lnbm9yZScsCgkJdGg6ICdlbmRUYWdJZ25vcmUnLAoJCXRyOiAnZW5kVGFnSWdub3JlJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluVGFibGVCb2R5LnByb2Nlc3NDaGFyYWN0ZXJzID0gZnVuY3Rpb24oZGF0YSkgewoJCW1vZGVzLmluVGFibGUucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSk7Cgl9OwoKCW1vZGVzLmluVGFibGVCb2R5LnN0YXJ0VGFnVHIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOwoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luUm93Jyk7Cgl9OwoKCW1vZGVzLmluVGFibGVCb2R5LnN0YXJ0VGFnVGFibGVDZWxsID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1jZWxsLWluLXRhYmxlLWJvZHkiLCB7bmFtZTogbmFtZX0pOwoJCXRoaXMuc3RhcnRUYWdUcigndHInLCBbXSk7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5UYWJsZUJvZHkuc3RhcnRUYWdUYWJsZU90aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3Rib2R5JykgfHwgIHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgndGhlYWQnKSB8fCB0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3Rmb290JykpIHsKCQkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOwoJCQl0aGlzLmVuZFRhZ1RhYmxlUm93R3JvdXAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lKTsKCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCQl9IGVsc2UgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtc3RhcnQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9Cgl9OwoKCW1vZGVzLmluVGFibGVCb2R5LnN0YXJ0VGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJbW9kZXMuaW5UYWJsZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcyk7Cgl9OwoKCW1vZGVzLmluVGFibGVCb2R5LmVuZFRhZ1RhYmxlUm93R3JvdXAgPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKSkgewoJCQl0cmVlLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2VyKCk7CgkJCXRyZWUucG9wRWxlbWVudCgpOwoJCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luVGFibGUnKTsKCQl9IGVsc2UgewoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZy1pbi10YWJsZS1ib2R5Jywge25hbWU6IG5hbWV9KTsKCQl9Cgl9OwoKCW1vZGVzLmluVGFibGVCb2R5LmVuZFRhZ1RhYmxlID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3Rib2R5JykgfHwgIHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgndGhlYWQnKSB8fCB0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoJ3Rmb290JykpIHsKCQkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOwoJCQl0aGlzLmVuZFRhZ1RhYmxlUm93R3JvdXAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lKTsKCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSk7CgkJfSBlbHNlIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCX0KCX07CgoJbW9kZXMuaW5UYWJsZUJvZHkuZW5kVGFnSWdub3JlID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnLWluLXRhYmxlLWJvZHkiLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5pblRhYmxlQm9keS5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQltb2Rlcy5pblRhYmxlLnByb2Nlc3NFbmRUYWcobmFtZSk7Cgl9OwoKCW1vZGVzLmluU2VsZWN0ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5pblNlbGVjdC5zdGFydF90YWdfaGFuZGxlcnMgPSB7CgkJaHRtbDogJ3N0YXJ0VGFnSHRtbCcsCgkJb3B0aW9uOiAnc3RhcnRUYWdPcHRpb24nLAoJCW9wdGdyb3VwOiAnc3RhcnRUYWdPcHRncm91cCcsCgkJc2VsZWN0OiAnc3RhcnRUYWdTZWxlY3QnLAoJCWlucHV0OiAnc3RhcnRUYWdJbnB1dCcsCgkJa2V5Z2VuOiAnc3RhcnRUYWdJbnB1dCcsCgkJdGV4dGFyZWE6ICdzdGFydFRhZ0lucHV0JywKCQlzY3JpcHQ6ICdzdGFydFRhZ1NjcmlwdCcsCgkJJy1kZWZhdWx0JzogJ3N0YXJ0VGFnT3RoZXInCgl9OwoKCW1vZGVzLmluU2VsZWN0LmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJb3B0aW9uOiAnZW5kVGFnT3B0aW9uJywKCQlvcHRncm91cDogJ2VuZFRhZ09wdGdyb3VwJywKCQlzZWxlY3Q6ICdlbmRUYWdTZWxlY3QnLAoJCWNhcHRpb246ICdlbmRUYWdUYWJsZUVsZW1lbnRzJywKCQl0YWJsZTogJ2VuZFRhZ1RhYmxlRWxlbWVudHMnLAoJCXRib2R5OiAnZW5kVGFnVGFibGVFbGVtZW50cycsCgkJdGZvb3Q6ICdlbmRUYWdUYWJsZUVsZW1lbnRzJywKCQl0aGVhZDogJ2VuZFRhZ1RhYmxlRWxlbWVudHMnLAoJCXRyOiAnZW5kVGFnVGFibGVFbGVtZW50cycsCgkJdGQ6ICdlbmRUYWdUYWJsZUVsZW1lbnRzJywKCQl0aDogJ2VuZFRhZ1RhYmxlRWxlbWVudHMnLAoJCSctZGVmYXVsdCc6ICdlbmRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5TZWxlY3QucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQl2YXIgZGF0YSA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7CgkJZGF0YSA9IGRhdGEucmVwbGFjZSgvXHUwMDAwL2csIGZ1bmN0aW9uKG1hdGNoLCBpbmRleCl7CgkJCXRyZWUucGFyc2VFcnJvcigiaW52YWxpZC1jb2RlcG9pbnQiKTsKCQkJcmV0dXJuICcnOwoJCX0pOwoJCWlmICghZGF0YSkKCQkJcmV0dXJuOwoJCXRyZWUuaW5zZXJ0VGV4dChkYXRhKTsKCX07CgoJbW9kZXMuaW5TZWxlY3Quc3RhcnRUYWdPcHRpb24gPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSA9PSAnb3B0aW9uJykKCQkJdHJlZS5wb3BFbGVtZW50KCk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pblNlbGVjdC5zdGFydFRhZ09wdGdyb3VwID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgPT0gJ29wdGlvbicpCgkJCXRyZWUucG9wRWxlbWVudCgpOwoJCWlmICh0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWUgPT0gJ29wdGdyb3VwJykKCQkJdHJlZS5wb3BFbGVtZW50KCk7CgkJdHJlZS5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pblNlbGVjdC5lbmRUYWdPcHRpb24gPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSAhPT0gJ29wdGlvbicpIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWctaW4tc2VsZWN0Jywge25hbWU6IG5hbWV9KTsKCQkJcmV0dXJuOwoJCX0KCQl0cmVlLnBvcEVsZW1lbnQoKTsKCX07CgoJbW9kZXMuaW5TZWxlY3QuZW5kVGFnT3B0Z3JvdXAgPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKHRyZWUuY3VycmVudFN0YWNrSXRlbSgpLmxvY2FsTmFtZSA9PSAnb3B0aW9uJyAmJiB0cmVlLm9wZW5FbGVtZW50cy5pdGVtKHRyZWUub3BlbkVsZW1lbnRzLmxlbmd0aCAtIDIpLmxvY2FsTmFtZSA9PSAnb3B0Z3JvdXAnKSB7CgkJCXRyZWUucG9wRWxlbWVudCgpOwoJCX0KCQlpZiAodHJlZS5jdXJyZW50U3RhY2tJdGVtKCkubG9jYWxOYW1lID09ICdvcHRncm91cCcpIHsKCQkJdHJlZS5wb3BFbGVtZW50KCk7CgkJfSBlbHNlIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWctaW4tc2VsZWN0Jywge25hbWU6ICdvcHRncm91cCd9KTsKCQl9Cgl9OwoKCW1vZGVzLmluU2VsZWN0LnN0YXJ0VGFnU2VsZWN0ID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1zZWxlY3QtaW4tc2VsZWN0Iik7CgkJdGhpcy5lbmRUYWdTZWxlY3QoJ3NlbGVjdCcpOwoJfTsKCgltb2Rlcy5pblNlbGVjdC5lbmRUYWdTZWxlY3QgPSBmdW5jdGlvbihuYW1lKSB7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgnc2VsZWN0JykpIHsKCQkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxQb3BwZWQoJ3NlbGVjdCcpOwoJCQl0cmVlLnJlc2V0SW5zZXJ0aW9uTW9kZSgpOwoJCX0gZWxzZSB7CgkJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnJywge25hbWU6IG5hbWV9KTsKCQl9Cgl9OwoKCW1vZGVzLmluU2VsZWN0LnN0YXJ0VGFnSW5wdXQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLWlucHV0LWluLXNlbGVjdCIpOwoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblNlbGVjdFNjb3BlKCdzZWxlY3QnKSkgewoJCQl0aGlzLmVuZFRhZ1NlbGVjdCgnc2VsZWN0Jyk7CgkJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcyk7CgkJfQoJfTsKCgltb2Rlcy5pblNlbGVjdC5zdGFydFRhZ1NjcmlwdCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQltb2Rlcy5pbkhlYWQucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5pblNlbGVjdC5lbmRUYWdUYWJsZUVsZW1lbnRzID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnLWluLXNlbGVjdCcsIHtuYW1lOiBuYW1lfSk7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKSkgewoJCQl0aGlzLmVuZFRhZ1NlbGVjdCgnc2VsZWN0Jyk7CgkJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJCX0KCX07CgoJbW9kZXMuaW5TZWxlY3Quc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWluLXNlbGVjdCIsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluU2VsZWN0LmVuZFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUucGFyc2VFcnJvcigndW5leHBlY3RlZC1lbmQtdGFnLWluLXNlbGVjdCcsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluU2VsZWN0SW5UYWJsZSA9IE9iamVjdC5jcmVhdGUobW9kZXMuYmFzZSk7CgoJbW9kZXMuaW5TZWxlY3RJblRhYmxlLnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQljYXB0aW9uOiAnc3RhcnRUYWdUYWJsZScsCgkJdGFibGU6ICdzdGFydFRhZ1RhYmxlJywKCQl0Ym9keTogJ3N0YXJ0VGFnVGFibGUnLAoJCXRmb290OiAnc3RhcnRUYWdUYWJsZScsCgkJdGhlYWQ6ICdzdGFydFRhZ1RhYmxlJywKCQl0cjogJ3N0YXJ0VGFnVGFibGUnLAoJCXRkOiAnc3RhcnRUYWdUYWJsZScsCgkJdGg6ICdzdGFydFRhZ1RhYmxlJywKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMuaW5TZWxlY3RJblRhYmxlLmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJY2FwdGlvbjogJ2VuZFRhZ1RhYmxlJywKCQl0YWJsZTogJ2VuZFRhZ1RhYmxlJywKCQl0Ym9keTogJ2VuZFRhZ1RhYmxlJywKCQl0Zm9vdDogJ2VuZFRhZ1RhYmxlJywKCQl0aGVhZDogJ2VuZFRhZ1RhYmxlJywKCQl0cjogJ2VuZFRhZ1RhYmxlJywKCQl0ZDogJ2VuZFRhZ1RhYmxlJywKCQl0aDogJ2VuZFRhZ1RhYmxlJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluU2VsZWN0SW5UYWJsZS5wcm9jZXNzQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKGRhdGEpIHsKCQltb2Rlcy5pblNlbGVjdC5wcm9jZXNzQ2hhcmFjdGVycyhkYXRhKTsKCX07CgoJbW9kZXMuaW5TZWxlY3RJblRhYmxlLnN0YXJ0VGFnVGFibGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJ1bmV4cGVjdGVkLXRhYmxlLWVsZW1lbnQtc3RhcnQtdGFnLWluLXNlbGVjdC1pbi10YWJsZSIsIHtuYW1lOiBuYW1lfSk7CgkJdGhpcy5lbmRUYWdPdGhlcigic2VsZWN0Iik7CgkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5TZWxlY3RJblRhYmxlLnN0YXJ0VGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZykgewoJCW1vZGVzLmluU2VsZWN0LnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzLCBzZWxmQ2xvc2luZyk7Cgl9OwoKCW1vZGVzLmluU2VsZWN0SW5UYWJsZS5lbmRUYWdUYWJsZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLnBhcnNlRXJyb3IoInVuZXhwZWN0ZWQtdGFibGUtZWxlbWVudC1lbmQtdGFnLWluLXNlbGVjdC1pbi10YWJsZSIsIHtuYW1lOiBuYW1lfSk7CgkJaWYgKHRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZShuYW1lKSkgewoJCQl0aGlzLmVuZFRhZ090aGVyKCJzZWxlY3QiKTsKCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSk7CgkJfQoJfTsKCgltb2Rlcy5pblNlbGVjdEluVGFibGUuZW5kVGFnT3RoZXIgPSBmdW5jdGlvbihuYW1lKSB7CgkJbW9kZXMuaW5TZWxlY3QucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuaW5Sb3cgPSBPYmplY3QuY3JlYXRlKG1vZGVzLmJhc2UpOwoKCW1vZGVzLmluUm93LnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQlodG1sOiAnc3RhcnRUYWdIdG1sJywKCQl0ZDogJ3N0YXJ0VGFnVGFibGVDZWxsJywKCQl0aDogJ3N0YXJ0VGFnVGFibGVDZWxsJywKCQljYXB0aW9uOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQljb2w6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCWNvbGdyb3VwOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQl0Ym9keTogJ3N0YXJ0VGFnVGFibGVPdGhlcicsCgkJdGZvb3Q6ICdzdGFydFRhZ1RhYmxlT3RoZXInLAoJCXRoZWFkOiAnc3RhcnRUYWdUYWJsZU90aGVyJywKCQl0cjogJ3N0YXJ0VGFnVGFibGVPdGhlcicsCgkJJy1kZWZhdWx0JzogJ3N0YXJ0VGFnT3RoZXInCgl9OwoKCW1vZGVzLmluUm93LmVuZF90YWdfaGFuZGxlcnMgPSB7CgkJdHI6ICdlbmRUYWdUcicsCgkJdGFibGU6ICdlbmRUYWdUYWJsZScsCgkJdGJvZHk6ICdlbmRUYWdUYWJsZVJvd0dyb3VwJywKCQl0Zm9vdDogJ2VuZFRhZ1RhYmxlUm93R3JvdXAnLAoJCXRoZWFkOiAnZW5kVGFnVGFibGVSb3dHcm91cCcsCgkJYm9keTogJ2VuZFRhZ0lnbm9yZScsCgkJY2FwdGlvbjogJ2VuZFRhZ0lnbm9yZScsCgkJY29sOiAnZW5kVGFnSWdub3JlJywKCQljb2xncm91cDogJ2VuZFRhZ0lnbm9yZScsCgkJaHRtbDogJ2VuZFRhZ0lnbm9yZScsCgkJdGQ6ICdlbmRUYWdJZ25vcmUnLAoJCXRoOiAnZW5kVGFnSWdub3JlJywKCQknLWRlZmF1bHQnOiAnZW5kVGFnT3RoZXInCgl9OwoKCW1vZGVzLmluUm93LnByb2Nlc3NDaGFyYWN0ZXJzID0gZnVuY3Rpb24oZGF0YSkgewoJCW1vZGVzLmluVGFibGUucHJvY2Vzc0NoYXJhY3RlcnMoZGF0YSk7Cgl9OwoKCW1vZGVzLmluUm93LnN0YXJ0VGFnVGFibGVDZWxsID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXRyZWUub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFibGVSb3dTY29wZU1hcmtlcigpOwoJCXRyZWUuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luQ2VsbCcpOwoJCXRyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2goTWFya2VyKTsKCX07CgoJbW9kZXMuaW5Sb3cuc3RhcnRUYWdUYWJsZU90aGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJCXZhciBpZ25vcmVFbmRUYWcgPSB0aGlzLmlnbm9yZUVuZFRhZ1RyKCk7CgkJdGhpcy5lbmRUYWdUcigndHInKTsKCQlpZiAoIWlnbm9yZUVuZFRhZykgdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NTdGFydFRhZyhuYW1lLCBhdHRyaWJ1dGVzKTsKCX07CgoJbW9kZXMuaW5Sb3cuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJbW9kZXMuaW5UYWJsZS5wcm9jZXNzU3RhcnRUYWcobmFtZSwgYXR0cmlidXRlcywgc2VsZkNsb3NpbmcpOwoJfTsKCgltb2Rlcy5pblJvdy5lbmRUYWdUciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQlpZiAodGhpcy5pZ25vcmVFbmRUYWdUcigpKSB7CgkJCWFzc2VydC5vayh0cmVlLmNvbnRleHQpOwoJCQl0cmVlLnBhcnNlRXJyb3IoJ3VuZXhwZWN0ZWQtZW5kLXRhZycsIHtuYW1lOiBuYW1lfSk7CgkJfSBlbHNlIHsKCQkJdHJlZS5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVJvd1Njb3BlTWFya2VyKCk7CgkJCXRyZWUucG9wRWxlbWVudCgpOwoJCQl0cmVlLnNldEluc2VydGlvbk1vZGUoJ2luVGFibGVCb2R5Jyk7CgkJfQoJfTsKCgltb2Rlcy5pblJvdy5lbmRUYWdUYWJsZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl2YXIgaWdub3JlRW5kVGFnID0gdGhpcy5pZ25vcmVFbmRUYWdUcigpOwoJCXRoaXMuZW5kVGFnVHIoJ3RyJyk7CgkJaWYgKCFpZ25vcmVFbmRUYWcpIHRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRW5kVGFnKG5hbWUpOwoJfTsKCgltb2Rlcy5pblJvdy5lbmRUYWdUYWJsZVJvd0dyb3VwID0gZnVuY3Rpb24obmFtZSkgewoJCWlmICh0cmVlLm9wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUobmFtZSkpIHsKCQkJdGhpcy5lbmRUYWdUcigndHInKTsKCQkJdHJlZS5pbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcobmFtZSk7CgkJfSBlbHNlIHsKCQkJdHJlZS5wYXJzZUVycm9yKCd1bmV4cGVjdGVkLWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJCX0KCX07CgoJbW9kZXMuaW5Sb3cuZW5kVGFnSWdub3JlID0gZnVuY3Rpb24obmFtZSkgewoJCXRyZWUucGFyc2VFcnJvcigidW5leHBlY3RlZC1lbmQtdGFnLWluLXRhYmxlLXJvdyIsIHtuYW1lOiBuYW1lfSk7Cgl9OwoKCW1vZGVzLmluUm93LmVuZFRhZ090aGVyID0gZnVuY3Rpb24obmFtZSkgewoJCW1vZGVzLmluVGFibGUucHJvY2Vzc0VuZFRhZyhuYW1lKTsKCX07CgoJbW9kZXMuaW5Sb3cuaWdub3JlRW5kVGFnVHIgPSBmdW5jdGlvbigpIHsKCQlyZXR1cm4gIXRyZWUub3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSgndHInKTsKCX07CgoJbW9kZXMuYWZ0ZXJBZnRlckZyYW1lc2V0ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQuc3RhcnRfdGFnX2hhbmRsZXJzID0gewoJCWh0bWw6ICdzdGFydFRhZ0h0bWwnLAoJCW5vZnJhbWVzOiAnc3RhcnRUYWdOb0ZyYW1lcycsCgkJJy1kZWZhdWx0JzogJ3N0YXJ0VGFnT3RoZXInCgl9OwoKCW1vZGVzLmFmdGVyQWZ0ZXJGcmFtZXNldC5wcm9jZXNzRU9GID0gZnVuY3Rpb24oKSB7fTsKCgltb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQucHJvY2Vzc0NvbW1lbnQgPSBmdW5jdGlvbihkYXRhKSB7CgkJdHJlZS5pbnNlcnRDb21tZW50KGRhdGEsIHRyZWUuZG9jdW1lbnQpOwoJfTsKCgltb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQucHJvY2Vzc0NoYXJhY3RlcnMgPSBmdW5jdGlvbihidWZmZXIpIHsKCQl2YXIgY2hhcmFjdGVycyA9IGJ1ZmZlci50YWtlUmVtYWluaW5nKCk7CgkJdmFyIHdoaXRlc3BhY2UgPSAiIjsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJhY3RlcnMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIGNoID0gY2hhcmFjdGVyc1tpXTsKCQkJaWYgKGlzV2hpdGVzcGFjZShjaCkpCgkJCQl3aGl0ZXNwYWNlICs9IGNoOwoJCX0KCQlpZiAod2hpdGVzcGFjZSkgewoJCQl0cmVlLnJlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CgkJCXRyZWUuaW5zZXJ0VGV4dCh3aGl0ZXNwYWNlKTsKCQl9CgkJaWYgKHdoaXRlc3BhY2UubGVuZ3RoIDwgY2hhcmFjdGVycy5sZW5ndGgpCgkJCXRyZWUucGFyc2VFcnJvcignZXhwZWN0ZWQtZW9mLWJ1dC1nb3QtY2hhcicpOwoJfTsKCgltb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQuc3RhcnRUYWdOb0ZyYW1lcyA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQltb2Rlcy5pbkhlYWQucHJvY2Vzc1N0YXJ0VGFnKG5hbWUsIGF0dHJpYnV0ZXMpOwoJfTsKCgltb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHNlbGZDbG9zaW5nKSB7CgkJdHJlZS5wYXJzZUVycm9yKCdleHBlY3RlZC1lb2YtYnV0LWdvdC1zdGFydC10YWcnLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy5hZnRlckFmdGVyRnJhbWVzZXQucHJvY2Vzc0VuZFRhZyA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCQl0cmVlLnBhcnNlRXJyb3IoJ2V4cGVjdGVkLWVvZi1idXQtZ290LWVuZC10YWcnLCB7bmFtZTogbmFtZX0pOwoJfTsKCgltb2Rlcy50ZXh0ID0gT2JqZWN0LmNyZWF0ZShtb2Rlcy5iYXNlKTsKCgltb2Rlcy50ZXh0LnN0YXJ0X3RhZ19oYW5kbGVycyA9IHsKCQknLWRlZmF1bHQnOiAnc3RhcnRUYWdPdGhlcicKCX07CgoJbW9kZXMudGV4dC5lbmRfdGFnX2hhbmRsZXJzID0gewoJCXNjcmlwdDogJ2VuZFRhZ1NjcmlwdCcsCgkJJy1kZWZhdWx0JzogJ2VuZFRhZ090aGVyJwoJfTsKCgltb2Rlcy50ZXh0LnByb2Nlc3NDaGFyYWN0ZXJzID0gZnVuY3Rpb24oYnVmZmVyKSB7CgkJaWYgKHRyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKSB7CgkJCXRyZWUuc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lID0gZmFsc2U7CgkJCWJ1ZmZlci5za2lwQXRNb3N0T25lTGVhZGluZ05ld2xpbmUoKTsKCQl9CgkJdmFyIGRhdGEgPSBidWZmZXIudGFrZVJlbWFpbmluZygpOwoJCWlmICghZGF0YSkKCQkJcmV0dXJuOwoJCXRyZWUuaW5zZXJ0VGV4dChkYXRhKTsKCX07CgoJbW9kZXMudGV4dC5wcm9jZXNzRU9GID0gZnVuY3Rpb24oKSB7CgkJdHJlZS5wYXJzZUVycm9yKCJleHBlY3RlZC1uYW1lZC1jbG9zaW5nLXRhZy1idXQtZ290LWVvZiIsCgkJCXtuYW1lOiB0cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS5sb2NhbE5hbWV9KTsKCQl0cmVlLm9wZW5FbGVtZW50cy5wb3AoKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUodHJlZS5vcmlnaW5hbEluc2VydGlvbk1vZGUpOwoJCXRyZWUuaW5zZXJ0aW9uTW9kZS5wcm9jZXNzRU9GKCk7Cgl9OwoKCW1vZGVzLnRleHQuc3RhcnRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0aHJvdyAiVHJpZWQgdG8gcHJvY2VzcyBzdGFydCB0YWcgIiArIG5hbWUgKyAiIGluIFJDREFUQS9SQVdURVhUIG1vZGUiOwoJfTsKCgltb2Rlcy50ZXh0LmVuZFRhZ1NjcmlwdCA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl2YXIgbm9kZSA9IHRyZWUub3BlbkVsZW1lbnRzLnBvcCgpOwoJCWFzc2VydC5vayhub2RlLmxvY2FsTmFtZSA9PSAnc2NyaXB0Jyk7CgkJdHJlZS5zZXRJbnNlcnRpb25Nb2RlKHRyZWUub3JpZ2luYWxJbnNlcnRpb25Nb2RlKTsKCX07CgoJbW9kZXMudGV4dC5lbmRUYWdPdGhlciA9IGZ1bmN0aW9uKG5hbWUpIHsKCQl0cmVlLm9wZW5FbGVtZW50cy5wb3AoKTsKCQl0cmVlLnNldEluc2VydGlvbk1vZGUodHJlZS5vcmlnaW5hbEluc2VydGlvbk1vZGUpOwoJfTsKfQoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLnNldEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbihuYW1lKSB7Cgl0aGlzLmluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGVzW25hbWVdOwoJdGhpcy5pbnNlcnRpb25Nb2RlTmFtZSA9IG5hbWU7Cn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZG9wdGlvbkFnZW5jeUVuZFRhZyA9IGZ1bmN0aW9uKG5hbWUpIHsKCXZhciBvdXRlckl0ZXJhdGlvbkxpbWl0ID0gODsKCXZhciBpbm5lckl0ZXJhdGlvbkxpbWl0ID0gMzsKCXZhciBmb3JtYXR0aW5nRWxlbWVudDsKCglmdW5jdGlvbiBpc0FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50KGVsKSB7CgkJcmV0dXJuIGVsID09PSBmb3JtYXR0aW5nRWxlbWVudDsKCX0KCgl2YXIgb3V0ZXJMb29wQ291bnRlciA9IDA7CgoJd2hpbGUgKG91dGVyTG9vcENvdW50ZXIrKyA8IG91dGVySXRlcmF0aW9uTGltaXQpIHsKCQlmb3JtYXR0aW5nRWxlbWVudCA9IHRoaXMuZWxlbWVudEluQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKG5hbWUpOwoKCQlpZiAoIWZvcm1hdHRpbmdFbGVtZW50IHx8ICh0aGlzLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudCkgJiYgIXRoaXMub3BlbkVsZW1lbnRzLmluU2NvcGUoZm9ybWF0dGluZ0VsZW1lbnQubG9jYWxOYW1lKSkpIHsKCQkJdGhpcy5wYXJzZUVycm9yKCdhZG9wdGlvbi1hZ2VuY3ktMS4xJywge25hbWU6IG5hbWV9KTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiAoIXRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGZvcm1hdHRpbmdFbGVtZW50KSkgewoJCQl0aGlzLnBhcnNlRXJyb3IoJ2Fkb3B0aW9uLWFnZW5jeS0xLjInLCB7bmFtZTogbmFtZX0pOwoJCQl0aGlzLnJlbW92ZUVsZW1lbnRGcm9tQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKGZvcm1hdHRpbmdFbGVtZW50KTsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCWlmICghdGhpcy5vcGVuRWxlbWVudHMuaW5TY29wZShmb3JtYXR0aW5nRWxlbWVudC5sb2NhbE5hbWUpKSB7CgkJCXRoaXMucGFyc2VFcnJvcignYWRvcHRpb24tYWdlbmN5LTQuNCcsIHtuYW1lOiBuYW1lfSk7CgkJfQoKCQlpZiAoZm9ybWF0dGluZ0VsZW1lbnQgIT0gdGhpcy5jdXJyZW50U3RhY2tJdGVtKCkpIHsKCQkJdGhpcy5wYXJzZUVycm9yKCdhZG9wdGlvbi1hZ2VuY3ktMS4zJywge25hbWU6IG5hbWV9KTsKCQl9CgkJdmFyIGZ1cnRoZXN0QmxvY2sgPSB0aGlzLm9wZW5FbGVtZW50cy5mdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQoZm9ybWF0dGluZ0VsZW1lbnQubm9kZSk7CgoJCWlmICghZnVydGhlc3RCbG9jaykgewoJCQl0aGlzLm9wZW5FbGVtZW50cy5yZW1vdmVfb3BlbkVsZW1lbnRzX3VudGlsKGlzQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnQpOwoJCQl0aGlzLnJlbW92ZUVsZW1lbnRGcm9tQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKGZvcm1hdHRpbmdFbGVtZW50KTsKCQkJcmV0dXJuIHRydWU7CgkJfQoKCQl2YXIgYWZlSW5kZXggPSB0aGlzLm9wZW5FbGVtZW50cy5lbGVtZW50cy5pbmRleE9mKGZvcm1hdHRpbmdFbGVtZW50KTsKCQl2YXIgY29tbW9uQW5jZXN0b3IgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtKGFmZUluZGV4IC0gMSk7CgoJCXZhciBib29rbWFyayA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluZGV4T2YoZm9ybWF0dGluZ0VsZW1lbnQpOwoKCQl2YXIgbm9kZSA9IGZ1cnRoZXN0QmxvY2s7CgkJdmFyIGxhc3ROb2RlID0gZnVydGhlc3RCbG9jazsKCQl2YXIgaW5kZXggPSB0aGlzLm9wZW5FbGVtZW50cy5lbGVtZW50cy5pbmRleE9mKG5vZGUpOwoKCQl2YXIgaW5uZXJMb29wQ291bnRlciA9IDA7CgkJd2hpbGUgKGlubmVyTG9vcENvdW50ZXIrKyA8IGlubmVySXRlcmF0aW9uTGltaXQpIHsKCQkJaW5kZXggLT0gMTsKCQkJbm9kZSA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW0oaW5kZXgpOwoJCQlpZiAodGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5kZXhPZihub2RlKSA8IDApIHsKCQkJCXRoaXMub3BlbkVsZW1lbnRzLmVsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7CgkJCQljb250aW51ZTsKCQkJfQoJCQlpZiAobm9kZSA9PSBmb3JtYXR0aW5nRWxlbWVudCkKCQkJCWJyZWFrOwoKCQkJaWYgKGxhc3ROb2RlID09IGZ1cnRoZXN0QmxvY2spCgkJCQlib29rbWFyayA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluZGV4T2Yobm9kZSkgKyAxOwoKCQkJdmFyIGNsb25lID0gdGhpcy5jcmVhdGVFbGVtZW50KG5vZGUubmFtZXNwYWNlVVJJLCBub2RlLmxvY2FsTmFtZSwgbm9kZS5hdHRyaWJ1dGVzKTsKCQkJdmFyIG5ld05vZGUgPSBuZXcgU3RhY2tJdGVtKG5vZGUubmFtZXNwYWNlVVJJLCBub2RlLmxvY2FsTmFtZSwgbm9kZS5hdHRyaWJ1dGVzLCBjbG9uZSk7CgoJCQl0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50c1t0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbmRleE9mKG5vZGUpXSA9IG5ld05vZGU7CgkJCXRoaXMub3BlbkVsZW1lbnRzLmVsZW1lbnRzW3RoaXMub3BlbkVsZW1lbnRzLmVsZW1lbnRzLmluZGV4T2Yobm9kZSldID0gbmV3Tm9kZTsKCgkJCW5vZGUgPSBuZXdOb2RlOwoJCQl0aGlzLmRldGFjaEZyb21QYXJlbnQobGFzdE5vZGUubm9kZSk7CgkJCXRoaXMuYXR0YWNoTm9kZShsYXN0Tm9kZS5ub2RlLCBub2RlLm5vZGUpOwoJCQlsYXN0Tm9kZSA9IG5vZGU7CgkJfQoKCQl0aGlzLmRldGFjaEZyb21QYXJlbnQobGFzdE5vZGUubm9kZSk7CgkJaWYgKGNvbW1vbkFuY2VzdG9yLmlzRm9zdGVyUGFyZW50aW5nKCkpIHsKCQkJdGhpcy5pbnNlcnRJbnRvRm9zdGVyUGFyZW50KGxhc3ROb2RlLm5vZGUpOwoJCX0gZWxzZSB7CgkJCXRoaXMuYXR0YWNoTm9kZShsYXN0Tm9kZS5ub2RlLCBjb21tb25BbmNlc3Rvci5ub2RlKTsKCQl9CgoJCXZhciBjbG9uZSA9IHRoaXMuY3JlYXRlRWxlbWVudCgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsIGZvcm1hdHRpbmdFbGVtZW50LmxvY2FsTmFtZSwgZm9ybWF0dGluZ0VsZW1lbnQuYXR0cmlidXRlcyk7CgkJdmFyIGZvcm1hdHRpbmdDbG9uZSA9IG5ldyBTdGFja0l0ZW0oZm9ybWF0dGluZ0VsZW1lbnQubmFtZXNwYWNlVVJJLCBmb3JtYXR0aW5nRWxlbWVudC5sb2NhbE5hbWUsIGZvcm1hdHRpbmdFbGVtZW50LmF0dHJpYnV0ZXMsIGNsb25lKTsKCgkJdGhpcy5yZXBhcmVudENoaWxkcmVuKGZ1cnRoZXN0QmxvY2subm9kZSwgY2xvbmUpOwoJCXRoaXMuYXR0YWNoTm9kZShjbG9uZSwgZnVydGhlc3RCbG9jay5ub2RlKTsKCgkJdGhpcy5yZW1vdmVFbGVtZW50RnJvbUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyhmb3JtYXR0aW5nRWxlbWVudCk7CgkJdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc3BsaWNlKE1hdGgubWluKGJvb2ttYXJrLCB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGgpLCAwLCBmb3JtYXR0aW5nQ2xvbmUpOwoKCQl0aGlzLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOwoJCXRoaXMub3BlbkVsZW1lbnRzLmVsZW1lbnRzLnNwbGljZSh0aGlzLm9wZW5FbGVtZW50cy5lbGVtZW50cy5pbmRleE9mKGZ1cnRoZXN0QmxvY2spICsgMSwgMCwgZm9ybWF0dGluZ0Nsb25lKTsKCX0KCglyZXR1cm4gdHJ1ZTsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKCkgewoJdGhyb3cgIk5vdCBtcGxlbWVudGVkIjsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5zdGFydFRva2VuaXphdGlvbiA9IGZ1bmN0aW9uKHRva2VuaXplcikgewoJdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXI7Cgl0aGlzLmNvbXBhdE1vZGUgPSAibm8gcXVpcmtzIjsKCXRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gImluaXRpYWwiOwoJdGhpcy5mcmFtZXNldE9rID0gdHJ1ZTsKCXRoaXMub3BlbkVsZW1lbnRzID0gbmV3IEVsZW1lbnRTdGFjaygpOwoJdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBbXTsKCXRoaXMuc3RhcnQoKTsKCWlmICh0aGlzLmNvbnRleHQpIHsKCQlzd2l0Y2godGhpcy5jb250ZXh0KSB7CgkJY2FzZSAndGl0bGUnOgoJCWNhc2UgJ3RleHRhcmVhJzoKCQkJdGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlJDREFUQSk7CgkJCWJyZWFrOwoJCWNhc2UgJ3N0eWxlJzoKCQljYXNlICd4bXAnOgoJCWNhc2UgJ2lmcmFtZSc6CgkJY2FzZSAnbm9lbWJlZCc6CgkJY2FzZSAnbm9mcmFtZXMnOgoJCQl0aGlzLnRva2VuaXplci5zZXRTdGF0ZShUb2tlbml6ZXIuUkFXVEVYVCk7CgkJCWJyZWFrOwoJCWNhc2UgJ3NjcmlwdCc6CgkJCXRoaXMudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5TQ1JJUFRfREFUQSk7CgkJCWJyZWFrOwoJCWNhc2UgJ25vc2NyaXB0JzoKCQkJaWYgKHRoaXMuc2NyaXB0aW5nRW5hYmxlZCkKCQkJCXRoaXMudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5SQVdURVhUKTsKCQkJYnJlYWs7CgkJY2FzZSAncGxhaW50ZXh0JzoKCQkJdGhpcy50b2tlbml6ZXIuc2V0U3RhdGUoVG9rZW5pemVyLlBMQUlOVEVYVCk7CgkJCWJyZWFrOwoJCX0KCQl0aGlzLmluc2VydEh0bWxFbGVtZW50KCk7CgkJdGhpcy5yZXNldEluc2VydGlvbk1vZGUoKTsKCX0gZWxzZSB7CgkJdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCdpbml0aWFsJyk7Cgl9Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc1Rva2VuID0gZnVuY3Rpb24odG9rZW4pIHsKCXRoaXMuc2VsZkNsb3NpbmdGbGFnQWNrbm93bGVkZ2VkID0gZmFsc2U7CgoJdmFyIGN1cnJlbnROb2RlID0gdGhpcy5vcGVuRWxlbWVudHMudG9wIHx8IG51bGw7Cgl2YXIgaW5zZXJ0aW9uTW9kZTsKCWlmICghY3VycmVudE5vZGUgfHwgIWN1cnJlbnROb2RlLmlzRm9yZWlnbigpIHx8CgkJKGN1cnJlbnROb2RlLmlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQoKSAmJgoJCQkoKHRva2VuLnR5cGUgPT0gJ1N0YXJ0VGFnJyAmJgoJCQkJCSEodG9rZW4ubmFtZSBpbiB7bWdseXBoOjAsIG1hbGlnbm1hcms6MH0pKSB8fAoJCQkJKHRva2VuLnR5cGUgPT09ICdDaGFyYWN0ZXJzJykpCgkJKSB8fAoJCShjdXJyZW50Tm9kZS5uYW1lc3BhY2VVUkkgPT0gImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiICYmCgkJCWN1cnJlbnROb2RlLmxvY2FsTmFtZSA9PSAnYW5ub3RhdGlvbi14bWwnICYmCgkJCXRva2VuLnR5cGUgPT0gJ1N0YXJ0VGFnJyAmJiB0b2tlbi5uYW1lID09ICdzdmcnCgkJKSB8fAoJCShjdXJyZW50Tm9kZS5pc0h0bWxJbnRlZ3JhdGlvblBvaW50KCkgJiYKCQkJdG9rZW4udHlwZSBpbiB7U3RhcnRUYWc6MCwgQ2hhcmFjdGVyczowfQoJCSkgfHwKCQl0b2tlbi50eXBlID09ICdFT0YnCgkpIHsKCQlpbnNlcnRpb25Nb2RlID0gdGhpcy5pbnNlcnRpb25Nb2RlOwoJfSBlbHNlIHsKCQlpbnNlcnRpb25Nb2RlID0gdGhpcy5pbnNlcnRpb25Nb2Rlcy5pbkZvcmVpZ25Db250ZW50OwoJfQoJc3dpdGNoKHRva2VuLnR5cGUpIHsKCWNhc2UgJ0NoYXJhY3RlcnMnOgoJCXZhciBidWZmZXIgPSBuZXcgQ2hhcmFjdGVyQnVmZmVyKHRva2VuLmRhdGEpOwoJCWluc2VydGlvbk1vZGUucHJvY2Vzc0NoYXJhY3RlcnMoYnVmZmVyKTsKCQlicmVhazsKCWNhc2UgJ0NvbW1lbnQnOgoJCWluc2VydGlvbk1vZGUucHJvY2Vzc0NvbW1lbnQodG9rZW4uZGF0YSk7CgkJYnJlYWs7CgljYXNlICdTdGFydFRhZyc6CgkJaW5zZXJ0aW9uTW9kZS5wcm9jZXNzU3RhcnRUYWcodG9rZW4ubmFtZSwgdG9rZW4uZGF0YSwgdG9rZW4uc2VsZkNsb3NpbmcpOwoJCWJyZWFrOwoJY2FzZSAnRW5kVGFnJzoKCQlpbnNlcnRpb25Nb2RlLnByb2Nlc3NFbmRUYWcodG9rZW4ubmFtZSk7CgkJYnJlYWs7CgljYXNlICdEb2N0eXBlJzoKCQlpbnNlcnRpb25Nb2RlLnByb2Nlc3NEb2N0eXBlKHRva2VuLm5hbWUsIHRva2VuLnB1YmxpY0lkLCB0b2tlbi5zeXN0ZW1JZCwgdG9rZW4uZm9yY2VRdWlya3MpOwoJCWJyZWFrOwoJY2FzZSAnRU9GJzoKCQlpbnNlcnRpb25Nb2RlLnByb2Nlc3NFT0YoKTsKCQlicmVhazsKCX0KfTsKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmlzQ2RhdGFTZWN0aW9uQWxsb3dlZCA9IGZ1bmN0aW9uKCkgewoJcmV0dXJuIHRoaXMub3BlbkVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgdGhpcy5jdXJyZW50U3RhY2tJdGVtKCkuaXNGb3JlaWduKCk7Cn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5pc1NlbGZDbG9zaW5nRmxhZ0Fja25vd2xlZGdlZCA9IGZ1bmN0aW9uKCkgewoJcmV0dXJuIHRoaXMuc2VsZkNsb3NpbmdGbGFnQWNrbm93bGVkZ2VkOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgYXR0cmlidXRlcykgewoJdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKTsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hdHRhY2hOb2RlID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgewoJdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKTsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hdHRhY2hOb2RlVG9Gb3N0ZXJQYXJlbnQgPSBmdW5jdGlvbihjaGlsZCwgdGFibGUsIHN0YWNrUGFyZW50KSB7Cgl0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmRldGFjaEZyb21QYXJlbnQgPSBmdW5jdGlvbihub2RlKSB7Cgl0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZXNUb0VsZW1lbnQgPSBmdW5jdGlvbihlbGVtZW50LCBhdHRyaWJ1dGVzKSB7Cgl0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydEh0bWxFbGVtZW50ID0gZnVuY3Rpb24oYXR0cmlidXRlcykgewoJdmFyIHJvb3QgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCAnaHRtbCcsIGF0dHJpYnV0ZXMpOwoJdGhpcy5hdHRhY2hOb2RlKHJvb3QsIHRoaXMuZG9jdW1lbnQpOwoJdGhpcy5vcGVuRWxlbWVudHMucHVzaEh0bWxFbGVtZW50KG5ldyBTdGFja0l0ZW0oImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCAnaHRtbCcsIGF0dHJpYnV0ZXMsIHJvb3QpKTsKCXJldHVybiByb290Owp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydEhlYWRFbGVtZW50ID0gZnVuY3Rpb24oYXR0cmlidXRlcykgewoJdmFyIGVsZW1lbnQgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCAiaGVhZCIsIGF0dHJpYnV0ZXMpOwoJdGhpcy5oZWFkID0gbmV3IFN0YWNrSXRlbSgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJoZWFkIiwgYXR0cmlidXRlcywgZWxlbWVudCk7Cgl0aGlzLmF0dGFjaE5vZGUoZWxlbWVudCwgdGhpcy5vcGVuRWxlbWVudHMudG9wLm5vZGUpOwoJdGhpcy5vcGVuRWxlbWVudHMucHVzaEhlYWRFbGVtZW50KHRoaXMuaGVhZCk7CglyZXR1cm4gZWxlbWVudDsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnRCb2R5RWxlbWVudCA9IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpIHsKCXZhciBlbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgImJvZHkiLCBhdHRyaWJ1dGVzKTsKCXRoaXMuYXR0YWNoTm9kZShlbGVtZW50LCB0aGlzLm9wZW5FbGVtZW50cy50b3Aubm9kZSk7Cgl0aGlzLm9wZW5FbGVtZW50cy5wdXNoQm9keUVsZW1lbnQobmV3IFN0YWNrSXRlbSgiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsICJib2R5IiwgYXR0cmlidXRlcywgZWxlbWVudCkpOwoJcmV0dXJuIGVsZW1lbnQ7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0SW50b0Zvc3RlclBhcmVudCA9IGZ1bmN0aW9uKG5vZGUpIHsKCXZhciB0YWJsZUluZGV4ID0gdGhpcy5vcGVuRWxlbWVudHMuZmluZEluZGV4KCd0YWJsZScpOwoJdmFyIHRhYmxlRWxlbWVudCA9IHRoaXMub3BlbkVsZW1lbnRzLml0ZW0odGFibGVJbmRleCkubm9kZTsKCWlmICh0YWJsZUluZGV4ID09PSAwKQoJCXJldHVybiB0aGlzLmF0dGFjaE5vZGUobm9kZSwgdGFibGVFbGVtZW50KTsKCXRoaXMuYXR0YWNoTm9kZVRvRm9zdGVyUGFyZW50KG5vZGUsIHRhYmxlRWxlbWVudCwgdGhpcy5vcGVuRWxlbWVudHMuaXRlbSh0YWJsZUluZGV4IC0gMSkubm9kZSk7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0RWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIG5hbWVzcGFjZVVSSSwgc2VsZkNsb3NpbmcpIHsKCWlmICghbmFtZXNwYWNlVVJJKQoJCW5hbWVzcGFjZVVSSSA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjsKCXZhciBlbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KG5hbWVzcGFjZVVSSSwgbmFtZSwgYXR0cmlidXRlcyk7CglpZiAodGhpcy5zaG91bGRGb3N0ZXJQYXJlbnQoKSkKCQl0aGlzLmluc2VydEludG9Gb3N0ZXJQYXJlbnQoZWxlbWVudCk7CgllbHNlCgkJdGhpcy5hdHRhY2hOb2RlKGVsZW1lbnQsIHRoaXMub3BlbkVsZW1lbnRzLnRvcC5ub2RlKTsKCWlmICghc2VsZkNsb3NpbmcpCgkJdGhpcy5vcGVuRWxlbWVudHMucHVzaChuZXcgU3RhY2tJdGVtKG5hbWVzcGFjZVVSSSwgbmFtZSwgYXR0cmlidXRlcywgZWxlbWVudCkpOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJdGhpcy5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7Cgl0aGlzLmFwcGVuZEVsZW1lbnRUb0FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyh0aGlzLmN1cnJlbnRTdGFja0l0ZW0oKSk7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcykgewoJdGhpcy5zZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQgPSB0cnVlOwoJdGhpcy5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgdHJ1ZSk7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCBuYW1lc3BhY2VVUkksIHNlbGZDbG9zaW5nKSB7CglpZiAoc2VsZkNsb3NpbmcpCgkJdGhpcy5zZWxmQ2xvc2luZ0ZsYWdBY2tub3dsZWRnZWQgPSB0cnVlOwoJdGhpcy5pbnNlcnRFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIG5hbWVzcGFjZVVSSSwgc2VsZkNsb3NpbmcpOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydENvbW1lbnQgPSBmdW5jdGlvbihkYXRhLCBwYXJlbnQpIHsKCXRocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIik7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0RG9jdHlwZSA9IGZ1bmN0aW9uKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkgewoJdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKTsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnRUZXh0ID0gZnVuY3Rpb24oZGF0YSkgewoJdGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKTsKfTsKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmN1cnJlbnRTdGFja0l0ZW0gPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLm9wZW5FbGVtZW50cy50b3A7Cn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5wb3BFbGVtZW50ID0gZnVuY3Rpb24oKSB7CglyZXR1cm4gdGhpcy5vcGVuRWxlbWVudHMucG9wKCk7Cn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5zaG91bGRGb3N0ZXJQYXJlbnQgPSBmdW5jdGlvbigpIHsKCXJldHVybiB0aGlzLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgJiYgdGhpcy5jdXJyZW50U3RhY2tJdGVtKCkuaXNGb3N0ZXJQYXJlbnRpbmcoKTsKfTsKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MgPSBmdW5jdGlvbihleGNsdWRlKSB7Cgl2YXIgbmFtZSA9IHRoaXMub3BlbkVsZW1lbnRzLnRvcC5sb2NhbE5hbWU7CglpZiAoWydkZCcsICdkdCcsICdsaScsICdvcHRpb24nLCAnb3B0Z3JvdXAnLCAncCcsICdycCcsICdydCddLmluZGV4T2YobmFtZSkgIT0gLTEgJiYgbmFtZSAhPSBleGNsdWRlKSB7CgkJdGhpcy5wb3BFbGVtZW50KCk7CgkJdGhpcy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKGV4Y2x1ZGUpOwoJfQp9OwpUcmVlQnVpbGRlci5wcm90b3R5cGUucmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBmdW5jdGlvbigpIHsKCWlmICh0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGggPT09IDApCgkJcmV0dXJuOwoJdmFyIGkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGggLSAxOwoJdmFyIGVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHNbaV07CglpZiAoZW50cnkgPT0gTWFya2VyIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5KSkKCQlyZXR1cm47CgoJd2hpbGUgKGVudHJ5ICE9IE1hcmtlciAmJiAhdGhpcy5vcGVuRWxlbWVudHMuY29udGFpbnMoZW50cnkpKSB7CgkJaSAtPSAxOwoJCWVudHJ5ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHNbaV07CgkJaWYgKCFlbnRyeSkKCQkJYnJlYWs7Cgl9CgoJd2hpbGUgKHRydWUpIHsKCQlpICs9IDE7CgkJZW50cnkgPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50c1tpXTsKCQl0aGlzLmluc2VydEVsZW1lbnQoZW50cnkubG9jYWxOYW1lLCBlbnRyeS5hdHRyaWJ1dGVzKTsKCQl2YXIgZWxlbWVudCA9IHRoaXMuY3VycmVudFN0YWNrSXRlbSgpOwoJCXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzW2ldID0gZWxlbWVudDsKCQlpZiAoZWxlbWVudCA9PSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50c1t0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGggLTFdKQoJCQlicmVhazsKCX0KCn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5lbnN1cmVOb2Foc0Fya0NvbmRpdGlvbiA9IGZ1bmN0aW9uKGl0ZW0pIHsKCXZhciBrTm9haHNBcmtDYXBhY2l0eSA9IDM7CglpZiAodGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMubGVuZ3RoIDwga05vYWhzQXJrQ2FwYWNpdHkpCgkJcmV0dXJuOwoJdmFyIGNhbmRpZGF0ZXMgPSBbXTsKCXZhciBuZXdJdGVtQXR0cmlidXRlQ291bnQgPSBpdGVtLmF0dHJpYnV0ZXMubGVuZ3RoOwoJZm9yICh2YXIgaSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CgkJdmFyIGNhbmRpZGF0ZSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzW2ldOwoJCWlmIChjYW5kaWRhdGUgPT09IE1hcmtlcikKCQkJYnJlYWs7CgkJaWYgKGl0ZW0ubG9jYWxOYW1lICE9PSBjYW5kaWRhdGUubG9jYWxOYW1lIHx8IGl0ZW0ubmFtZXNwYWNlVVJJICE9PSBjYW5kaWRhdGUubmFtZXNwYWNlVVJJKQoJCQljb250aW51ZTsKCQlpZiAoY2FuZGlkYXRlLmF0dHJpYnV0ZXMubGVuZ3RoICE9IG5ld0l0ZW1BdHRyaWJ1dGVDb3VudCkKCQkJY29udGludWU7CgkJY2FuZGlkYXRlcy5wdXNoKGNhbmRpZGF0ZSk7Cgl9CglpZiAoY2FuZGlkYXRlcy5sZW5ndGggPCBrTm9haHNBcmtDYXBhY2l0eSkKCQlyZXR1cm47CgoJdmFyIHJlbWFpbmluZ0NhbmRpZGF0ZXMgPSBbXTsKCXZhciBhdHRyaWJ1dGVzID0gaXRlbS5hdHRyaWJ1dGVzOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7CgkJdmFyIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07CgoJCWZvciAodmFyIGogPSAwOyBqIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGorKykgewoJCQl2YXIgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tqXTsKCQkJdmFyIGNhbmRpZGF0ZUF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZShjYW5kaWRhdGUsIGF0dHJpYnV0ZS5ub2RlTmFtZSk7CgkJCWlmIChjYW5kaWRhdGVBdHRyaWJ1dGUgJiYgY2FuZGlkYXRlQXR0cmlidXRlLm5vZGVWYWx1ZSA9PT0gYXR0cmlidXRlLm5vZGVWYWx1ZSkKCQkJCXJlbWFpbmluZ0NhbmRpZGF0ZXMucHVzaChjYW5kaWRhdGUpOwoJCX0KCQlpZiAocmVtYWluaW5nQ2FuZGlkYXRlcy5sZW5ndGggPCBrTm9haHNBcmtDYXBhY2l0eSkKCQkJcmV0dXJuOwoJCWNhbmRpZGF0ZXMgPSByZW1haW5pbmdDYW5kaWRhdGVzOwoJCXJlbWFpbmluZ0NhbmRpZGF0ZXMgPSBbXTsKCX0KCWZvciAodmFyIGkgPSBrTm9haHNBcmtDYXBhY2l0eSAtIDE7IGkgPCBjYW5kaWRhdGVzLmxlbmd0aDsgaSsrKQoJCXRoaXMucmVtb3ZlRWxlbWVudEZyb21BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoY2FuZGlkYXRlc1tpXSk7Cn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hcHBlbmRFbGVtZW50VG9BY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBmdW5jdGlvbihpdGVtKSB7Cgl0aGlzLmVuc3VyZU5vYWhzQXJrQ29uZGl0aW9uKGl0ZW0pOwoJdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaChpdGVtKTsKfTsKVHJlZUJ1aWxkZXIucHJvdG90eXBlLnJlbW92ZUVsZW1lbnRGcm9tQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gZnVuY3Rpb24oaXRlbSkgewoJdmFyIGluZGV4ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5kZXhPZihpdGVtKTsKCWlmIChpbmRleCA+PSAwKQoJCXRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNwbGljZShpbmRleCwgMSk7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUuZWxlbWVudEluQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gZnVuY3Rpb24obmFtZSkgewoJdmFyIGVscyA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzOwoJZm9yICh2YXIgaSA9IGVscy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewoJCWlmIChlbHNbaV0gPT0gTWFya2VyKSBicmVhazsKCQlpZiAoZWxzW2ldLmxvY2FsTmFtZSA9PSBuYW1lKSByZXR1cm4gZWxzW2ldOwoJfQoJcmV0dXJuIGZhbHNlOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmNsZWFyQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzID0gZnVuY3Rpb24oKSB7CiAgICB3aGlsZSAoISh0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5sZW5ndGggPT09IDAgfHwgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucG9wKCkgPT0gTWFya2VyKSk7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUucmVwYXJlbnRDaGlsZHJlbiA9IGZ1bmN0aW9uKG9sZFBhcmVudCwgbmV3UGFyZW50KSB7Cgl0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpOwp9OwpUcmVlQnVpbGRlci5wcm90b3R5cGUuc2V0RnJhZ21lbnRDb250ZXh0ID0gZnVuY3Rpb24oY29udGV4dCkgewoJdGhpcy5jb250ZXh0ID0gY29udGV4dDsKfTsKVHJlZUJ1aWxkZXIucHJvdG90eXBlLnBhcnNlRXJyb3IgPSBmdW5jdGlvbihjb2RlLCBhcmdzKSB7CglpZiAoIXRoaXMuZXJyb3JIYW5kbGVyKQoJCXJldHVybjsKCXZhciBtZXNzYWdlID0gZm9ybWF0TWVzc2FnZShtZXNzYWdlc1tjb2RlXSwgYXJncyk7Cgl0aGlzLmVycm9ySGFuZGxlci5lcnJvcihtZXNzYWdlLCB0aGlzLnRva2VuaXplci5faW5wdXRTdHJlYW0ubG9jYXRpb24oKSwgY29kZSk7Cn07ClRyZWVCdWlsZGVyLnByb3RvdHlwZS5yZXNldEluc2VydGlvbk1vZGUgPSBmdW5jdGlvbigpIHsKCXZhciBsYXN0ID0gZmFsc2U7Cgl2YXIgbm9kZSA9IG51bGw7Cglmb3IgKHZhciBpID0gdGhpcy5vcGVuRWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCQlub2RlID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbShpKTsKCQlpZiAoaSA9PT0gMCkgewoJCQlhc3NlcnQub2sodGhpcy5jb250ZXh0KTsKCQkJbGFzdCA9IHRydWU7CgkJCW5vZGUgPSBuZXcgU3RhY2tJdGVtKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwgdGhpcy5jb250ZXh0LCBbXSwgbnVsbCk7CgkJfQoKCQlpZiAobm9kZS5uYW1lc3BhY2VVUkkgPT09ICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIikgewoJCQlpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdzZWxlY3QnKQoJCQkJcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgnaW5TZWxlY3QnKTsKCQkJaWYgKG5vZGUubG9jYWxOYW1lID09PSAndGQnIHx8IG5vZGUubG9jYWxOYW1lID09PSAndGgnKQoJCQkJcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgnaW5DZWxsJyk7CgkJCWlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ3RyJykKCQkJCXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoJ2luUm93Jyk7CgkJCWlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ3Rib2R5JyB8fCBub2RlLmxvY2FsTmFtZSA9PT0gJ3RoZWFkJyB8fCBub2RlLmxvY2FsTmFtZSA9PT0gJ3Rmb290JykKCQkJCXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoJ2luVGFibGVCb2R5Jyk7CgkJCWlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2NhcHRpb24nKQoJCQkJcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgnaW5DYXB0aW9uJyk7CgkJCWlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2NvbGdyb3VwJykKCQkJCXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoJ2luQ29sdW1uR3JvdXAnKTsKCQkJaWYgKG5vZGUubG9jYWxOYW1lID09PSAndGFibGUnKQoJCQkJcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgnaW5UYWJsZScpOwoJCQlpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdoZWFkJyAmJiAhbGFzdCkKCQkJCXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoJ2luSGVhZCcpOwoJCQlpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdib2R5JykKCQkJCXJldHVybiB0aGlzLnNldEluc2VydGlvbk1vZGUoJ2luQm9keScpOwoJCQlpZiAobm9kZS5sb2NhbE5hbWUgPT09ICdmcmFtZXNldCcpCgkJCQlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCdpbkZyYW1lc2V0Jyk7CgkJCWlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2h0bWwnKQoJCQkJaWYgKCF0aGlzLm9wZW5FbGVtZW50cy5oZWFkRWxlbWVudCkKCQkJCQlyZXR1cm4gdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCdiZWZvcmVIZWFkJyk7CgkJCQllbHNlCgkJCQkJcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgnYWZ0ZXJIZWFkJyk7CgkJfQoKCQlpZiAobGFzdCkKCQkJcmV0dXJuIHRoaXMuc2V0SW5zZXJ0aW9uTW9kZSgnaW5Cb2R5Jyk7Cgl9Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMpIHsKCXRoaXMuaW5zZXJ0RWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzKTsKCXRoaXMudG9rZW5pemVyLnNldFN0YXRlKFRva2VuaXplci5SQ0RBVEEpOwoJdGhpcy5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSB0aGlzLmluc2VydGlvbk1vZGVOYW1lOwoJdGhpcy5zZXRJbnNlcnRpb25Nb2RlKCd0ZXh0Jyk7Cn07CgpUcmVlQnVpbGRlci5wcm90b3R5cGUucHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzKSB7Cgl0aGlzLmluc2VydEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcyk7Cgl0aGlzLnRva2VuaXplci5zZXRTdGF0ZShUb2tlbml6ZXIuUkFXVEVYVCk7Cgl0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHRoaXMuaW5zZXJ0aW9uTW9kZU5hbWU7Cgl0aGlzLnNldEluc2VydGlvbk1vZGUoJ3RleHQnKTsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZGp1c3RNYXRoTUxBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cmlidXRlcykgewoJYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKCQlhLm5hbWVzcGFjZVVSSSA9ICJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjsKCQlpZiAoY29uc3RhbnRzLk1BVEhNTEF0dHJpYnV0ZU1hcFthLm5vZGVOYW1lXSkKCQkJYS5ub2RlTmFtZSA9IGNvbnN0YW50cy5NQVRITUxBdHRyaWJ1dGVNYXBbYS5ub2RlTmFtZV07Cgl9KTsKCXJldHVybiBhdHRyaWJ1dGVzOwp9OwoKVHJlZUJ1aWxkZXIucHJvdG90eXBlLmFkanVzdFNWR1RhZ05hbWVDYXNlID0gZnVuY3Rpb24obmFtZSkgewoJcmV0dXJuIGNvbnN0YW50cy5TVkdUYWdNYXBbbmFtZV0gfHwgbmFtZTsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZGp1c3RTVkdBdHRyaWJ1dGVzID0gZnVuY3Rpb24oYXR0cmlidXRlcykgewoJYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKCQlhLm5hbWVzcGFjZVVSSSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7CgkJaWYgKGNvbnN0YW50cy5TVkdBdHRyaWJ1dGVNYXBbYS5ub2RlTmFtZV0pCgkJCWEubm9kZU5hbWUgPSBjb25zdGFudHMuU1ZHQXR0cmlidXRlTWFwW2Eubm9kZU5hbWVdOwoJfSk7CglyZXR1cm4gYXR0cmlidXRlczsKfTsKClRyZWVCdWlsZGVyLnByb3RvdHlwZS5hZGp1c3RGb3JlaWduQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGF0dHJpYnV0ZXMpIHsKCWZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgewoJCXZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOwoJCXZhciBhZGp1c3RlZCA9IGNvbnN0YW50cy5Gb3JlaWduQXR0cmlidXRlTWFwW2F0dHJpYnV0ZS5ub2RlTmFtZV07CgkJaWYgKGFkanVzdGVkKSB7CgkJCWF0dHJpYnV0ZS5ub2RlTmFtZSA9IGFkanVzdGVkLmxvY2FsTmFtZTsKCQkJYXR0cmlidXRlLnByZWZpeCA9IGFkanVzdGVkLnByZWZpeDsKCQkJYXR0cmlidXRlLm5hbWVzcGFjZVVSSSA9IGFkanVzdGVkLm5hbWVzcGFjZVVSSTsKCQl9Cgl9CglyZXR1cm4gYXR0cmlidXRlczsKfTsKCmZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2UoZm9ybWF0LCBhcmdzKSB7CglyZXR1cm4gZm9ybWF0LnJlcGxhY2UobmV3IFJlZ0V4cCgne1swLTlhLXotXSt9JywgJ2dpJyksIGZ1bmN0aW9uKG1hdGNoKSB7CgkJcmV0dXJuIGFyZ3NbbWF0Y2guc2xpY2UoMSwgLTEpXSB8fCBtYXRjaDsKCX0pOwp9CgpleHBvcnRzLlRyZWVCdWlsZGVyID0gVHJlZUJ1aWxkZXI7Cgp9LAp7Ii4vRWxlbWVudFN0YWNrIjoxLCIuL1N0YWNrSXRlbSI6NCwiLi9Ub2tlbml6ZXIiOjUsIi4vY29uc3RhbnRzIjo3LCIuL21lc3NhZ2VzLmpzb24iOjgsImFzc2VydCI6MTMsImV2ZW50cyI6MTZ9XSwKNzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CmV4cG9ydHMuU1ZHVGFnTWFwID0gewoJImFsdGdseXBoIjogImFsdEdseXBoIiwKCSJhbHRnbHlwaGRlZiI6ICJhbHRHbHlwaERlZiIsCgkiYWx0Z2x5cGhpdGVtIjogImFsdEdseXBoSXRlbSIsCgkiYW5pbWF0ZWNvbG9yIjogImFuaW1hdGVDb2xvciIsCgkiYW5pbWF0ZW1vdGlvbiI6ICJhbmltYXRlTW90aW9uIiwKCSJhbmltYXRldHJhbnNmb3JtIjogImFuaW1hdGVUcmFuc2Zvcm0iLAoJImNsaXBwYXRoIjogImNsaXBQYXRoIiwKCSJmZWJsZW5kIjogImZlQmxlbmQiLAoJImZlY29sb3JtYXRyaXgiOiAiZmVDb2xvck1hdHJpeCIsCgkiZmVjb21wb25lbnR0cmFuc2ZlciI6ICJmZUNvbXBvbmVudFRyYW5zZmVyIiwKCSJmZWNvbXBvc2l0ZSI6ICJmZUNvbXBvc2l0ZSIsCgkiZmVjb252b2x2ZW1hdHJpeCI6ICJmZUNvbnZvbHZlTWF0cml4IiwKCSJmZWRpZmZ1c2VsaWdodGluZyI6ICJmZURpZmZ1c2VMaWdodGluZyIsCgkiZmVkaXNwbGFjZW1lbnRtYXAiOiAiZmVEaXNwbGFjZW1lbnRNYXAiLAoJImZlZGlzdGFudGxpZ2h0IjogImZlRGlzdGFudExpZ2h0IiwKCSJmZWZsb29kIjogImZlRmxvb2QiLAoJImZlZnVuY2EiOiAiZmVGdW5jQSIsCgkiZmVmdW5jYiI6ICJmZUZ1bmNCIiwKCSJmZWZ1bmNnIjogImZlRnVuY0ciLAoJImZlZnVuY3IiOiAiZmVGdW5jUiIsCgkiZmVnYXVzc2lhbmJsdXIiOiAiZmVHYXVzc2lhbkJsdXIiLAoJImZlaW1hZ2UiOiAiZmVJbWFnZSIsCgkiZmVtZXJnZSI6ICJmZU1lcmdlIiwKCSJmZW1lcmdlbm9kZSI6ICJmZU1lcmdlTm9kZSIsCgkiZmVtb3JwaG9sb2d5IjogImZlTW9ycGhvbG9neSIsCgkiZmVvZmZzZXQiOiAiZmVPZmZzZXQiLAoJImZlcG9pbnRsaWdodCI6ICJmZVBvaW50TGlnaHQiLAoJImZlc3BlY3VsYXJsaWdodGluZyI6ICJmZVNwZWN1bGFyTGlnaHRpbmciLAoJImZlc3BvdGxpZ2h0IjogImZlU3BvdExpZ2h0IiwKCSJmZXRpbGUiOiAiZmVUaWxlIiwKCSJmZXR1cmJ1bGVuY2UiOiAiZmVUdXJidWxlbmNlIiwKCSJmb3JlaWdub2JqZWN0IjogImZvcmVpZ25PYmplY3QiLAoJImdseXBocmVmIjogImdseXBoUmVmIiwKCSJsaW5lYXJncmFkaWVudCI6ICJsaW5lYXJHcmFkaWVudCIsCgkicmFkaWFsZ3JhZGllbnQiOiAicmFkaWFsR3JhZGllbnQiLAoJInRleHRwYXRoIjogInRleHRQYXRoIgp9OwoKZXhwb3J0cy5NQVRITUxBdHRyaWJ1dGVNYXAgPSB7CglkZWZpbml0aW9udXJsOiAnZGVmaW5pdGlvblVSTCcKfTsKCmV4cG9ydHMuU1ZHQXR0cmlidXRlTWFwID0gewoJYXR0cmlidXRlbmFtZToJJ2F0dHJpYnV0ZU5hbWUnLAoJYXR0cmlidXRldHlwZToJJ2F0dHJpYnV0ZVR5cGUnLAoJYmFzZWZyZXF1ZW5jeToJJ2Jhc2VGcmVxdWVuY3knLAoJYmFzZXByb2ZpbGU6CSdiYXNlUHJvZmlsZScsCgljYWxjbW9kZToJJ2NhbGNNb2RlJywKCWNsaXBwYXRodW5pdHM6CSdjbGlwUGF0aFVuaXRzJywKCWNvbnRlbnRzY3JpcHR0eXBlOgknY29udGVudFNjcmlwdFR5cGUnLAoJY29udGVudHN0eWxldHlwZToJJ2NvbnRlbnRTdHlsZVR5cGUnLAoJZGlmZnVzZWNvbnN0YW50OgknZGlmZnVzZUNvbnN0YW50JywKCWVkZ2Vtb2RlOgknZWRnZU1vZGUnLAoJZXh0ZXJuYWxyZXNvdXJjZXNyZXF1aXJlZDoJJ2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnLAoJZmlsdGVycmVzOgknZmlsdGVyUmVzJywKCWZpbHRlcnVuaXRzOgknZmlsdGVyVW5pdHMnLAoJZ2x5cGhyZWY6CSdnbHlwaFJlZicsCglncmFkaWVudHRyYW5zZm9ybToJJ2dyYWRpZW50VHJhbnNmb3JtJywKCWdyYWRpZW50dW5pdHM6CSdncmFkaWVudFVuaXRzJywKCWtlcm5lbG1hdHJpeDoJJ2tlcm5lbE1hdHJpeCcsCglrZXJuZWx1bml0bGVuZ3RoOgkna2VybmVsVW5pdExlbmd0aCcsCglrZXlwb2ludHM6CSdrZXlQb2ludHMnLAoJa2V5c3BsaW5lczoJJ2tleVNwbGluZXMnLAoJa2V5dGltZXM6CSdrZXlUaW1lcycsCglsZW5ndGhhZGp1c3Q6CSdsZW5ndGhBZGp1c3QnLAoJbGltaXRpbmdjb25lYW5nbGU6CSdsaW1pdGluZ0NvbmVBbmdsZScsCgltYXJrZXJoZWlnaHQ6CSdtYXJrZXJIZWlnaHQnLAoJbWFya2VydW5pdHM6CSdtYXJrZXJVbml0cycsCgltYXJrZXJ3aWR0aDoJJ21hcmtlcldpZHRoJywKCW1hc2tjb250ZW50dW5pdHM6CSdtYXNrQ29udGVudFVuaXRzJywKCW1hc2t1bml0czoJJ21hc2tVbml0cycsCgludW1vY3RhdmVzOgknbnVtT2N0YXZlcycsCglwYXRobGVuZ3RoOgkncGF0aExlbmd0aCcsCglwYXR0ZXJuY29udGVudHVuaXRzOgkncGF0dGVybkNvbnRlbnRVbml0cycsCglwYXR0ZXJudHJhbnNmb3JtOgkncGF0dGVyblRyYW5zZm9ybScsCglwYXR0ZXJudW5pdHM6CSdwYXR0ZXJuVW5pdHMnLAoJcG9pbnRzYXR4OgkncG9pbnRzQXRYJywKCXBvaW50c2F0eToJJ3BvaW50c0F0WScsCglwb2ludHNhdHo6CSdwb2ludHNBdFonLAoJcHJlc2VydmVhbHBoYToJJ3ByZXNlcnZlQWxwaGEnLAoJcHJlc2VydmVhc3BlY3RyYXRpbzoJJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLAoJcHJpbWl0aXZldW5pdHM6CSdwcmltaXRpdmVVbml0cycsCglyZWZ4OgkncmVmWCcsCglyZWZ5OgkncmVmWScsCglyZXBlYXRjb3VudDoJJ3JlcGVhdENvdW50JywKCXJlcGVhdGR1cjoJJ3JlcGVhdER1cicsCglyZXF1aXJlZGV4dGVuc2lvbnM6CSdyZXF1aXJlZEV4dGVuc2lvbnMnLAoJcmVxdWlyZWRmZWF0dXJlczoJJ3JlcXVpcmVkRmVhdHVyZXMnLAoJc3BlY3VsYXJjb25zdGFudDoJJ3NwZWN1bGFyQ29uc3RhbnQnLAoJc3BlY3VsYXJleHBvbmVudDoJJ3NwZWN1bGFyRXhwb25lbnQnLAoJc3ByZWFkbWV0aG9kOgknc3ByZWFkTWV0aG9kJywKCXN0YXJ0b2Zmc2V0Ogknc3RhcnRPZmZzZXQnLAoJc3RkZGV2aWF0aW9uOgknc3RkRGV2aWF0aW9uJywKCXN0aXRjaHRpbGVzOgknc3RpdGNoVGlsZXMnLAoJc3VyZmFjZXNjYWxlOgknc3VyZmFjZVNjYWxlJywKCXN5c3RlbWxhbmd1YWdlOgknc3lzdGVtTGFuZ3VhZ2UnLAoJdGFibGV2YWx1ZXM6CSd0YWJsZVZhbHVlcycsCgl0YXJnZXR4OgkndGFyZ2V0WCcsCgl0YXJnZXR5OgkndGFyZ2V0WScsCgl0ZXh0bGVuZ3RoOgkndGV4dExlbmd0aCcsCgl2aWV3Ym94Ogkndmlld0JveCcsCgl2aWV3dGFyZ2V0Ogkndmlld1RhcmdldCcsCgl4Y2hhbm5lbHNlbGVjdG9yOgkneENoYW5uZWxTZWxlY3RvcicsCgl5Y2hhbm5lbHNlbGVjdG9yOgkneUNoYW5uZWxTZWxlY3RvcicsCgl6b29tYW5kcGFuOgknem9vbUFuZFBhbicKfTsKCmV4cG9ydHMuRm9yZWlnbkF0dHJpYnV0ZU1hcCA9IHsKCSJ4bGluazphY3R1YXRlIjoge3ByZWZpeDogInhsaW5rIiwgbG9jYWxOYW1lOiAiYWN0dWF0ZSIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwKCSJ4bGluazphcmNyb2xlIjoge3ByZWZpeDogInhsaW5rIiwgbG9jYWxOYW1lOiAiYXJjcm9sZSIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwKCSJ4bGluazpocmVmIjoge3ByZWZpeDogInhsaW5rIiwgbG9jYWxOYW1lOiAiaHJlZiIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwKCSJ4bGluazpyb2xlIjoge3ByZWZpeDogInhsaW5rIiwgbG9jYWxOYW1lOiAicm9sZSIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwKCSJ4bGluazpzaG93Ijoge3ByZWZpeDogInhsaW5rIiwgbG9jYWxOYW1lOiAic2hvdyIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwKCSJ4bGluazp0aXRsZSI6IHtwcmVmaXg6ICJ4bGluayIsIGxvY2FsTmFtZTogInRpdGxlIiwgbmFtZXNwYWNlVVJJOiAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayJ9LAoJInhsaW5rOnR5cGUiOiB7cHJlZml4OiAieGxpbmsiLCBsb2NhbE5hbWU6ICJ0aXRsZSIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsifSwKCSJ4bWw6YmFzZSI6IHtwcmVmaXg6ICJ4bWwiLCBsb2NhbE5hbWU6ICJiYXNlIiwgbmFtZXNwYWNlVVJJOiAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIn0sCgkieG1sOmxhbmciOiB7cHJlZml4OiAieG1sIiwgbG9jYWxOYW1lOiAibGFuZyIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LAoJInhtbDpzcGFjZSI6IHtwcmVmaXg6ICJ4bWwiLCBsb2NhbE5hbWU6ICJzcGFjZSIsIG5hbWVzcGFjZVVSSTogImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSJ9LAoJInhtbG5zIjoge3ByZWZpeDogbnVsbCwgbG9jYWxOYW1lOiAieG1sbnMiLCBuYW1lc3BhY2VVUkk6ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LAoJInhtbG5zOnhsaW5rIjoge3ByZWZpeDogInhtbG5zIiwgbG9jYWxOYW1lOiAieGxpbmsiLCBuYW1lc3BhY2VVUkk6ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LAp9Owp9LAp7fV0sCjg6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewptb2R1bGUuZXhwb3J0cz17CgkibnVsbC1jaGFyYWN0ZXIiOgoJCSJOdWxsIGNoYXJhY3RlciBpbiBpbnB1dCBzdHJlYW0sIHJlcGxhY2VkIHdpdGggVStGRkZELiIsCgkiaW52YWxpZC1jb2RlcG9pbnQiOgoJCSJJbnZhbGlkIGNvZGVwb2ludCBpbiBzdHJlYW0iLAoJImluY29ycmVjdGx5LXBsYWNlZC1zb2xpZHVzIjoKCQkiU29saWR1cyAoLykgaW5jb3JyZWN0bHkgcGxhY2VkIGluIHRhZy4iLAoJImluY29ycmVjdC1jci1uZXdsaW5lLWVudGl0eSI6CgkJIkluY29ycmVjdCBDUiBuZXdsaW5lIGVudGl0eSwgcmVwbGFjZWQgd2l0aCBMRi4iLAoJImlsbGVnYWwtd2luZG93cy0xMjUyLWVudGl0eSI6CgkJIkVudGl0eSB1c2VkIHdpdGggaWxsZWdhbCBudW1iZXIgKHdpbmRvd3MtMTI1MiByZWZlcmVuY2UpLiIsCgkiY2FudC1jb252ZXJ0LW51bWVyaWMtZW50aXR5IjoKCQkiTnVtZXJpYyBlbnRpdHkgY291bGRuJ3QgYmUgY29udmVydGVkIHRvIGNoYXJhY3RlciAoY29kZXBvaW50IFUre2NoYXJBc0ludH0pLiIsCgkiaW52YWxpZC1udW1lcmljLWVudGl0eS1yZXBsYWNlZCI6CgkJIk51bWVyaWMgZW50aXR5IHJlcHJlc2VudHMgYW4gaWxsZWdhbCBjb2RlcG9pbnQuIEV4cGFuZGVkIHRvIHRoZSBDMSBjb250cm9scyByYW5nZS4iLAoJIm51bWVyaWMtZW50aXR5LXdpdGhvdXQtc2VtaWNvbG9uIjoKCQkiTnVtZXJpYyBlbnRpdHkgZGlkbid0IGVuZCB3aXRoICc7Jy4iLAoJImV4cGVjdGVkLW51bWVyaWMtZW50aXR5LWJ1dC1nb3QtZW9mIjoKCQkiTnVtZXJpYyBlbnRpdHkgZXhwZWN0ZWQuIEdvdCBlbmQgb2YgZmlsZSBpbnN0ZWFkLiIsCgkiZXhwZWN0ZWQtbnVtZXJpYy1lbnRpdHkiOgoJCSJOdW1lcmljIGVudGl0eSBleHBlY3RlZCBidXQgbm9uZSBmb3VuZC4iLAoJIm5hbWVkLWVudGl0eS13aXRob3V0LXNlbWljb2xvbiI6CgkJIk5hbWVkIGVudGl0eSBkaWRuJ3QgZW5kIHdpdGggJzsnLiIsCgkiZXhwZWN0ZWQtbmFtZWQtZW50aXR5IjoKCQkiTmFtZWQgZW50aXR5IGV4cGVjdGVkLiBHb3Qgbm9uZS4iLAoJImF0dHJpYnV0ZXMtaW4tZW5kLXRhZyI6CgkJIkVuZCB0YWcgY29udGFpbnMgdW5leHBlY3RlZCBhdHRyaWJ1dGVzLiIsCgkic2VsZi1jbG9zaW5nLWZsYWctb24tZW5kLXRhZyI6CgkJIkVuZCB0YWcgY29udGFpbnMgdW5leHBlY3RlZCBzZWxmLWNsb3NpbmcgZmxhZy4iLAoJImJhcmUtbGVzcy10aGFuLXNpZ24tYXQtZW9mIjoKCQkiRW5kIG9mIGZpbGUgYWZ0ZXIgPC4iLAoJImV4cGVjdGVkLXRhZy1uYW1lLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCI6CgkJIkV4cGVjdGVkIHRhZyBuYW1lLiBHb3QgJz4nIGluc3RlYWQuIiwKCSJleHBlY3RlZC10YWctbmFtZS1idXQtZ290LXF1ZXN0aW9uLW1hcmsiOgoJCSJFeHBlY3RlZCB0YWcgbmFtZS4gR290ICc/JyBpbnN0ZWFkLiAoSFRNTCBkb2Vzbid0IHN1cHBvcnQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMuKSIsCgkiZXhwZWN0ZWQtdGFnLW5hbWUiOgoJCSJFeHBlY3RlZCB0YWcgbmFtZS4gR290IHNvbWV0aGluZyBlbHNlIGluc3RlYWQuIiwKCSJleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LXJpZ2h0LWJyYWNrZXQiOgoJCSJFeHBlY3RlZCBjbG9zaW5nIHRhZy4gR290ICc+JyBpbnN0ZWFkLiBJZ25vcmluZyAnPC8+Jy4iLAoJImV4cGVjdGVkLWNsb3NpbmctdGFnLWJ1dC1nb3QtZW9mIjoKCQkiRXhwZWN0ZWQgY2xvc2luZyB0YWcuIFVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwKCSJleHBlY3RlZC1jbG9zaW5nLXRhZy1idXQtZ290LWNoYXIiOgoJCSJFeHBlY3RlZCBjbG9zaW5nIHRhZy4gVW5leHBlY3RlZCBjaGFyYWN0ZXIgJ3tkYXRhfScgZm91bmQuIiwKCSJlb2YtaW4tdGFnLW5hbWUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIHRoZSB0YWcgbmFtZS4iLAoJImV4cGVjdGVkLWF0dHJpYnV0ZS1uYW1lLWJ1dC1nb3QtZW9mIjoKCQkiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgYXR0cmlidXRlIG5hbWUgaW5zdGVhZC4iLAoJImVvZi1pbi1hdHRyaWJ1dGUtbmFtZSI6CgkJIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gYXR0cmlidXRlIG5hbWUuIiwKCSJpbnZhbGlkLWNoYXJhY3Rlci1pbi1hdHRyaWJ1dGUtbmFtZSI6CgkJIkludmFsaWQgY2hhcmFjdGVyIGluIGF0dHJpYnV0ZSBuYW1lLiIsCgkiZHVwbGljYXRlLWF0dHJpYnV0ZSI6CgkJIkRyb3BwZWQgZHVwbGljYXRlIGF0dHJpYnV0ZSAne25hbWV9JyBvbiB0YWcuIiwKCSJleHBlY3RlZC1lbmQtb2YtdGFnLWJ1dC1nb3QtZW9mIjoKCQkiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgPSBvciBlbmQgb2YgdGFnLiIsCgkiZXhwZWN0ZWQtYXR0cmlidXRlLXZhbHVlLWJ1dC1nb3QtZW9mIjoKCQkiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgYXR0cmlidXRlIHZhbHVlLiIsCgkiZXhwZWN0ZWQtYXR0cmlidXRlLXZhbHVlLWJ1dC1nb3QtcmlnaHQtYnJhY2tldCI6CgkJIkV4cGVjdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gR290ICc+JyBpbnN0ZWFkLiIsCgkidW5leHBlY3RlZC1jaGFyYWN0ZXItaW4tdW5xdW90ZWQtYXR0cmlidXRlLXZhbHVlIjoKCQkiVW5leHBlY3RlZCBjaGFyYWN0ZXIgaW4gdW5xdW90ZWQgYXR0cmlidXRlIiwKCSJpbnZhbGlkLWNoYXJhY3Rlci1hZnRlci1hdHRyaWJ1dGUtbmFtZSI6CgkJIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIGF0dHJpYnV0ZSBuYW1lLiIsCgkidW5leHBlY3RlZC1jaGFyYWN0ZXItYWZ0ZXItYXR0cmlidXRlLXZhbHVlIjoKCQkiVW5leHBlY3RlZCBjaGFyYWN0ZXIgYWZ0ZXIgYXR0cmlidXRlIHZhbHVlLiIsCgkiZW9mLWluLWF0dHJpYnV0ZS12YWx1ZS1kb3VibGUtcXVvdGUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGF0dHJpYnV0ZSB2YWx1ZSAoXCIpLiIsCgkiZW9mLWluLWF0dHJpYnV0ZS12YWx1ZS1zaW5nbGUtcXVvdGUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGF0dHJpYnV0ZSB2YWx1ZSAoJykuIiwKCSJlb2YtaW4tYXR0cmlidXRlLXZhbHVlLW5vLXF1b3RlcyI6CgkJIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gYXR0cmlidXRlIHZhbHVlLiIsCgkiZW9mLWFmdGVyLWF0dHJpYnV0ZS12YWx1ZSI6CgkJIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgYWZ0ZXIgYXR0cmlidXRlIHZhbHVlLiIsCgkidW5leHBlY3RlZC1lb2YtYWZ0ZXItc29saWR1cy1pbi10YWciOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIHRhZy4gRXhwZWN0ZWQgPi4iLAoJInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWFmdGVyLXNvbGlkdXMtaW4tdGFnIjoKCQkiVW5leHBlY3RlZCBjaGFyYWN0ZXIgYWZ0ZXIgLyBpbiB0YWcuIEV4cGVjdGVkID4uIiwKCSJleHBlY3RlZC1kYXNoZXMtb3ItZG9jdHlwZSI6CgkJIkV4cGVjdGVkICctLScgb3IgJ0RPQ1RZUEUnLiBOb3QgZm91bmQuIiwKCSJ1bmV4cGVjdGVkLWJhbmctYWZ0ZXItZG91YmxlLWRhc2gtaW4tY29tbWVudCI6CgkJIlVuZXhwZWN0ZWQgISBhZnRlciAtLSBpbiBjb21tZW50LiIsCgkiaW5jb3JyZWN0LWNvbW1lbnQiOgoJCSJJbmNvcnJlY3QgY29tbWVudC4iLAoJImVvZi1pbi1jb21tZW50IjoKCQkiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBjb21tZW50LiIsCgkiZW9mLWluLWNvbW1lbnQtZW5kLWRhc2giOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGNvbW1lbnQgKC0pLiIsCgkidW5leHBlY3RlZC1kYXNoLWFmdGVyLWRvdWJsZS1kYXNoLWluLWNvbW1lbnQiOgoJCSJVbmV4cGVjdGVkICctJyBhZnRlciAnLS0nIGZvdW5kIGluIGNvbW1lbnQuIiwKCSJlb2YtaW4tY29tbWVudC1kb3VibGUtZGFzaCI6CgkJIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gY29tbWVudCAoLS0pLiIsCgkiZW9mLWluLWNvbW1lbnQtZW5kLWJhbmctc3RhdGUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGNvbW1lbnQuIiwKCSJ1bmV4cGVjdGVkLWNoYXItaW4tY29tbWVudCI6CgkJIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGNvbW1lbnQgZm91bmQuIiwKCSJuZWVkLXNwYWNlLWFmdGVyLWRvY3R5cGUiOgoJCSJObyBzcGFjZSBhZnRlciBsaXRlcmFsIHN0cmluZyAnRE9DVFlQRScuIiwKCSJleHBlY3RlZC1kb2N0eXBlLW5hbWUtYnV0LWdvdC1yaWdodC1icmFja2V0IjoKCQkiVW5leHBlY3RlZCA+IGNoYXJhY3Rlci4gRXhwZWN0ZWQgRE9DVFlQRSBuYW1lLiIsCgkiZXhwZWN0ZWQtZG9jdHlwZS1uYW1lLWJ1dC1nb3QtZW9mIjoKCQkiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgRE9DVFlQRSBuYW1lLiIsCgkiZW9mLWluLWRvY3R5cGUtbmFtZSI6CgkJIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gRE9DVFlQRSBuYW1lLiIsCgkiZW9mLWluLWRvY3R5cGUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIERPQ1RZUEUuIiwKCSJleHBlY3RlZC1zcGFjZS1vci1yaWdodC1icmFja2V0LWluLWRvY3R5cGUiOgoJCSJFeHBlY3RlZCBzcGFjZSBvciAnPicuIEdvdCAne2RhdGF9Jy4iLAoJInVuZXhwZWN0ZWQtZW5kLW9mLWRvY3R5cGUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBET0NUWVBFLiIsCgkidW5leHBlY3RlZC1jaGFyLWluLWRvY3R5cGUiOgoJCSJVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiBET0NUWVBFLiIsCgkiZW9mLWluLWJvZ3VzLWRvY3R5cGUiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGJvZ3VzIGRvY3R5cGUuIiwKCSJlb2YtaW4taW5uZXJodG1sIjoKCQkiVW5leHBlY3RlZCBFT0YgaW4gaW5uZXIgaHRtbCBtb2RlLiIsCgkidW5leHBlY3RlZC1kb2N0eXBlIjoKCQkiVW5leHBlY3RlZCBET0NUWVBFLiBJZ25vcmVkLiIsCgkibm9uLWh0bWwtcm9vdCI6CgkJImh0bWwgbmVlZHMgdG8gYmUgdGhlIGZpcnN0IHN0YXJ0IHRhZy4iLAoJImV4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1lb2YiOgoJCSJVbmV4cGVjdGVkIEVuZCBvZiBmaWxlLiBFeHBlY3RlZCBET0NUWVBFLiIsCgkidW5rbm93bi1kb2N0eXBlIjoKCQkiRXJyb25lb3VzIERPQ1RZUEUuIEV4cGVjdGVkIDwhRE9DVFlQRSBodG1sPi4iLAoJInF1aXJreS1kb2N0eXBlIjoKCQkiUXVpcmt5IGRvY3R5cGUuIEV4cGVjdGVkIDwhRE9DVFlQRSBodG1sPi4iLAoJImFsbW9zdC1zdGFuZGFyZHMtZG9jdHlwZSI6CgkJIkFsbW9zdCBzdGFuZGFyZHMgbW9kZSBkb2N0eXBlLiBFeHBlY3RlZCA8IURPQ1RZUEUgaHRtbD4uIiwKCSJvYnNvbGV0ZS1kb2N0eXBlIjoKCQkiT2Jzb2xldGUgZG9jdHlwZS4gRXhwZWN0ZWQgPCFET0NUWVBFIGh0bWw+LiIsCgkiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LWNoYXJzIjoKCQkiTm9uLXNwYWNlIGNoYXJhY3RlcnMgZm91bmQgd2l0aG91dCBzZWVpbmcgYSBkb2N0eXBlIGZpcnN0LiBFeHBlY3RlZCBlLmcuIDwhRE9DVFlQRSBodG1sPi4iLAoJImV4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1zdGFydC10YWciOgoJCSJTdGFydCB0YWcgc2VlbiB3aXRob3V0IHNlZWluZyBhIGRvY3R5cGUgZmlyc3QuIEV4cGVjdGVkIGUuZy4gPCFET0NUWVBFIGh0bWw+LiIsCgkiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LWVuZC10YWciOgoJCSJFbmQgdGFnIHNlZW4gd2l0aG91dCBzZWVpbmcgYSBkb2N0eXBlIGZpcnN0LiBFeHBlY3RlZCBlLmcuIDwhRE9DVFlQRSBodG1sPi4iLAoJImVuZC10YWctYWZ0ZXItaW1wbGllZC1yb290IjoKCQkiVW5leHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pIGFmdGVyIHRoZSAoaW1wbGllZCkgcm9vdCBlbGVtZW50LiIsCgkiZXhwZWN0ZWQtbmFtZWQtY2xvc2luZy10YWctYnV0LWdvdC1lb2YiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiBFeHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pLiIsCgkidHdvLWhlYWRzLWFyZS1ub3QtYmV0dGVyLXRoYW4tb25lIjoKCQkiVW5leHBlY3RlZCBzdGFydCB0YWcgaGVhZCBpbiBleGlzdGluZyBoZWFkLiBJZ25vcmVkLiIsCgkidW5leHBlY3RlZC1lbmQtdGFnIjoKCQkiVW5leHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pLiBJZ25vcmVkLiIsCgkidW5leHBlY3RlZC1pbXBsaWVkLWVuZC10YWciOgoJCSJFbmQgdGFnIHtuYW1lfSBpbXBsaWVkLCBidXQgdGhlcmUgd2VyZSBvcGVuIGVsZW1lbnRzLiIsCgkidW5leHBlY3RlZC1zdGFydC10YWctb3V0LW9mLW15LWhlYWQiOgoJCSJVbmV4cGVjdGVkIHN0YXJ0IHRhZyAoe25hbWV9KSB0aGF0IGNhbiBiZSBpbiBoZWFkLiBNb3ZlZC4iLAoJInVuZXhwZWN0ZWQtc3RhcnQtdGFnIjoKCQkiVW5leHBlY3RlZCBzdGFydCB0YWcgKHtuYW1lfSkuIiwKCSJtaXNzaW5nLWVuZC10YWciOgoJCSJNaXNzaW5nIGVuZCB0YWcgKHtuYW1lfSkuIiwKCSJtaXNzaW5nLWVuZC10YWdzIjoKCQkiTWlzc2luZyBlbmQgdGFncyAoe25hbWV9KS4iLAoJInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWltcGxpZXMtZW5kLXRhZyI6CgkJIlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7c3RhcnROYW1lfSkgaW1wbGllcyBlbmQgdGFnICh7ZW5kTmFtZX0pLiIsCgkidW5leHBlY3RlZC1zdGFydC10YWctdHJlYXRlZC1hcyI6CgkJIlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7b3JpZ2luYWxOYW1lfSkuIFRyZWF0ZWQgYXMge25ld05hbWV9LiIsCgkiZGVwcmVjYXRlZC10YWciOgoJCSJVbmV4cGVjdGVkIHN0YXJ0IHRhZyB7bmFtZX0uIERvbid0IHVzZSBpdCEiLAoJInVuZXhwZWN0ZWQtc3RhcnQtdGFnLWlnbm9yZWQiOgoJCSJVbmV4cGVjdGVkIHN0YXJ0IHRhZyB7bmFtZX0uIElnbm9yZWQuIiwKCSJleHBlY3RlZC1vbmUtZW5kLXRhZy1idXQtZ290LWFub3RoZXIiOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWcgKHtnb3ROYW1lfSkuIE1pc3NpbmcgZW5kIHRhZyAoe2V4cGVjdGVkTmFtZX0pLiIsCgkiZW5kLXRhZy10b28tZWFybHkiOgoJCSJFbmQgdGFnICh7bmFtZX0pIHNlZW4gdG9vIGVhcmx5LiBFeHBlY3RlZCBvdGhlciBlbmQgdGFnLiIsCgkiZW5kLXRhZy10b28tZWFybHktbmFtZWQiOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWcgKHtnb3ROYW1lfSkuIEV4cGVjdGVkIGVuZCB0YWcgKHtleHBlY3RlZE5hbWV9LiIsCgkiZW5kLXRhZy10b28tZWFybHktaWdub3JlZCI6CgkJIkVuZCB0YWcgKHtuYW1lfSkgc2VlbiB0b28gZWFybHkuIElnbm9yZWQuIiwKCSJhZG9wdGlvbi1hZ2VuY3ktMS4xIjoKCQkiRW5kIHRhZyAoe25hbWV9KSB2aW9sYXRlcyBzdGVwIDEsIHBhcmFncmFwaCAxIG9mIHRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtLiIsCgkiYWRvcHRpb24tYWdlbmN5LTEuMiI6CgkJIkVuZCB0YWcgKHtuYW1lfSkgdmlvbGF0ZXMgc3RlcCAxLCBwYXJhZ3JhcGggMiBvZiB0aGUgYWRvcHRpb24gYWdlbmN5IGFsZ29yaXRobS4iLAoJImFkb3B0aW9uLWFnZW5jeS0xLjMiOgoJCSJFbmQgdGFnICh7bmFtZX0pIHZpb2xhdGVzIHN0ZXAgMSwgcGFyYWdyYXBoIDMgb2YgdGhlIGFkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG0uIiwKCSJhZG9wdGlvbi1hZ2VuY3ktNC40IjoKCQkiRW5kIHRhZyAoe25hbWV9KSB2aW9sYXRlcyBzdGVwIDQsIHBhcmFncmFwaCA0IG9mIHRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtLiIsCgkidW5leHBlY3RlZC1lbmQtdGFnLXRyZWF0ZWQtYXMiOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWcgKHtvcmlnaW5hbE5hbWV9KS4gVHJlYXRlZCBhcyB7bmV3TmFtZX0uIiwKCSJuby1lbmQtdGFnIjoKCQkiVGhpcyBlbGVtZW50ICh7bmFtZX0pIGhhcyBubyBlbmQgdGFnLiIsCgkidW5leHBlY3RlZC1pbXBsaWVkLWVuZC10YWctaW4tdGFibGUiOgoJCSJVbmV4cGVjdGVkIGltcGxpZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgdGFibGUgcGhhc2UuIiwKCSJ1bmV4cGVjdGVkLWltcGxpZWQtZW5kLXRhZy1pbi10YWJsZS1ib2R5IjoKCQkiVW5leHBlY3RlZCBpbXBsaWVkIGVuZCB0YWcgKHtuYW1lfSkgaW4gdGhlIHRhYmxlIGJvZHkgcGhhc2UuIiwKCSJ1bmV4cGVjdGVkLWNoYXItaW1wbGllcy10YWJsZS12b29kb28iOgoJCSJVbmV4cGVjdGVkIG5vbi1zcGFjZSBjaGFyYWN0ZXJzIGluIHRhYmxlIGNvbnRleHQgY2F1c2VkIHZvb2RvbyBtb2RlLiIsCgkidW5leHBlY3RlZC1oaWRkZW4taW5wdXQtaW4tdGFibGUiOgoJCSJVbmV4cGVjdGVkIGlucHV0IHdpdGggdHlwZSBoaWRkZW4gaW4gdGFibGUgY29udGV4dC4iLAoJInVuZXhwZWN0ZWQtZm9ybS1pbi10YWJsZSI6CgkJIlVuZXhwZWN0ZWQgZm9ybSBpbiB0YWJsZSBjb250ZXh0LiIsCgkidW5leHBlY3RlZC1zdGFydC10YWctaW1wbGllcy10YWJsZS12b29kb28iOgoJCSJVbmV4cGVjdGVkIHN0YXJ0IHRhZyAoe25hbWV9KSBpbiB0YWJsZSBjb250ZXh0IGNhdXNlZCB2b29kb28gbW9kZS4iLAoJInVuZXhwZWN0ZWQtZW5kLXRhZy1pbXBsaWVzLXRhYmxlLXZvb2RvbyI6CgkJIlVuZXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0YWJsZSBjb250ZXh0IGNhdXNlZCB2b29kb28gbW9kZS4iLAoJInVuZXhwZWN0ZWQtY2VsbC1pbi10YWJsZS1ib2R5IjoKCQkiVW5leHBlY3RlZCB0YWJsZSBjZWxsIHN0YXJ0IHRhZyAoe25hbWV9KSBpbiB0aGUgdGFibGUgYm9keSBwaGFzZS4iLAoJInVuZXhwZWN0ZWQtY2VsbC1lbmQtdGFnIjoKCQkiR290IHRhYmxlIGNlbGwgZW5kIHRhZyAoe25hbWV9KSB3aGlsZSByZXF1aXJlZCBlbmQgdGFncyBhcmUgbWlzc2luZy4iLAoJInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi10YWJsZS1ib2R5IjoKCQkiVW5leHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pIGluIHRoZSB0YWJsZSBib2R5IHBoYXNlLiBJZ25vcmVkLiIsCgkidW5leHBlY3RlZC1pbXBsaWVkLWVuZC10YWctaW4tdGFibGUtcm93IjoKCQkiVW5leHBlY3RlZCBpbXBsaWVkIGVuZCB0YWcgKHtuYW1lfSkgaW4gdGhlIHRhYmxlIHJvdyBwaGFzZS4iLAoJInVuZXhwZWN0ZWQtZW5kLXRhZy1pbi10YWJsZS1yb3ciOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWcgKHtuYW1lfSkgaW4gdGhlIHRhYmxlIHJvdyBwaGFzZS4gSWdub3JlZC4iLAoJInVuZXhwZWN0ZWQtc2VsZWN0LWluLXNlbGVjdCI6CgkJIlVuZXhwZWN0ZWQgc2VsZWN0IHN0YXJ0IHRhZyBpbiB0aGUgc2VsZWN0IHBoYXNlIHRyZWF0ZWQgYXMgc2VsZWN0IGVuZCB0YWcuIiwKCSJ1bmV4cGVjdGVkLWlucHV0LWluLXNlbGVjdCI6CgkJIlVuZXhwZWN0ZWQgaW5wdXQgc3RhcnQgdGFnIGluIHRoZSBzZWxlY3QgcGhhc2UuIiwKCSJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbi1zZWxlY3QiOgoJCSJVbmV4cGVjdGVkIHN0YXJ0IHRhZyB0b2tlbiAoe25hbWV9KSBpbiB0aGUgc2VsZWN0IHBoYXNlLiBJZ25vcmVkLiIsCgkidW5leHBlY3RlZC1lbmQtdGFnLWluLXNlbGVjdCI6CgkJIlVuZXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgc2VsZWN0IHBoYXNlLiBJZ25vcmVkLiIsCgkidW5leHBlY3RlZC10YWJsZS1lbGVtZW50LXN0YXJ0LXRhZy1pbi1zZWxlY3QtaW4tdGFibGUiOgoJCSJVbmV4cGVjdGVkIHRhYmxlIGVsZW1lbnQgc3RhcnQgdGFnICh7bmFtZX0pIGluIHRoZSBzZWxlY3QgaW4gdGFibGUgcGhhc2UuIiwKCSJ1bmV4cGVjdGVkLXRhYmxlLWVsZW1lbnQtZW5kLXRhZy1pbi1zZWxlY3QtaW4tdGFibGUiOgoJCSJVbmV4cGVjdGVkIHRhYmxlIGVsZW1lbnQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgc2VsZWN0IGluIHRhYmxlIHBoYXNlLiIsCgkidW5leHBlY3RlZC1jaGFyLWFmdGVyLWJvZHkiOgoJCSJVbmV4cGVjdGVkIG5vbi1zcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBhZnRlciBib2R5IHBoYXNlLiIsCgkidW5leHBlY3RlZC1zdGFydC10YWctYWZ0ZXItYm9keSI6CgkJIlVuZXhwZWN0ZWQgc3RhcnQgdGFnIHRva2VuICh7bmFtZX0pIGluIHRoZSBhZnRlciBib2R5IHBoYXNlLiIsCgkidW5leHBlY3RlZC1lbmQtdGFnLWFmdGVyLWJvZHkiOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWcgdG9rZW4gKHtuYW1lfSkgaW4gdGhlIGFmdGVyIGJvZHkgcGhhc2UuIiwKCSJ1bmV4cGVjdGVkLWNoYXItaW4tZnJhbWVzZXQiOgoJCSJVbmVweGVjdGVkIGNoYXJhY3RlcnMgaW4gdGhlIGZyYW1lc2V0IHBoYXNlLiBDaGFyYWN0ZXJzIGlnbm9yZWQuIiwKCSJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1pbi1mcmFtZXNldCI6CgkJIlVuZXhwZWN0ZWQgc3RhcnQgdGFnIHRva2VuICh7bmFtZX0pIGluIHRoZSBmcmFtZXNldCBwaGFzZS4gSWdub3JlZC4iLAoJInVuZXhwZWN0ZWQtZnJhbWVzZXQtaW4tZnJhbWVzZXQtaW5uZXJodG1sIjoKCQkiVW5leHBlY3RlZCBlbmQgdGFnIHRva2VuIChmcmFtZXNldCBpbiB0aGUgZnJhbWVzZXQgcGhhc2UgKGlubmVySFRNTCkuIiwKCSJ1bmV4cGVjdGVkLWVuZC10YWctaW4tZnJhbWVzZXQiOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWcgdG9rZW4gKHtuYW1lfSkgaW4gdGhlIGZyYW1lc2V0IHBoYXNlLiBJZ25vcmVkLiIsCgkidW5leHBlY3RlZC1jaGFyLWFmdGVyLWZyYW1lc2V0IjoKCQkiVW5leHBlY3RlZCBub24tc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgYWZ0ZXIgZnJhbWVzZXQgcGhhc2UuIElnbm9yZWQuIiwKCSJ1bmV4cGVjdGVkLXN0YXJ0LXRhZy1hZnRlci1mcmFtZXNldCI6CgkJIlVuZXhwZWN0ZWQgc3RhcnQgdGFnICh7bmFtZX0pIGluIHRoZSBhZnRlciBmcmFtZXNldCBwaGFzZS4gSWdub3JlZC4iLAoJInVuZXhwZWN0ZWQtZW5kLXRhZy1hZnRlci1mcmFtZXNldCI6CgkJIlVuZXhwZWN0ZWQgZW5kIHRhZyAoe25hbWV9KSBpbiB0aGUgYWZ0ZXIgZnJhbWVzZXQgcGhhc2UuIElnbm9yZWQuIiwKCSJleHBlY3RlZC1lb2YtYnV0LWdvdC1jaGFyIjoKCQkiVW5leHBlY3RlZCBub24tc3BhY2UgY2hhcmFjdGVycy4gRXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwKCSJleHBlY3RlZC1lb2YtYnV0LWdvdC1zdGFydC10YWciOgoJCSJVbmV4cGVjdGVkIHN0YXJ0IHRhZyAoe25hbWV9KS4gRXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwKCSJleHBlY3RlZC1lb2YtYnV0LWdvdC1lbmQtdGFnIjoKCQkiVW5leHBlY3RlZCBlbmQgdGFnICh7bmFtZX0pLiBFeHBlY3RlZCBlbmQgb2YgZmlsZS4iLAoJInVuZXhwZWN0ZWQtZW5kLXRhYmxlLWluLWNhcHRpb24iOgoJCSJVbmV4cGVjdGVkIGVuZCB0YWJsZSB0YWcgaW4gY2FwdGlvbi4gR2VuZXJhdGVzIGltcGxpZWQgZW5kIGNhcHRpb24uIiwKCSJlbmQtaHRtbC1pbi1pbm5lcmh0bWwiOiAKCQkiVW5leHBlY3RlZCBodG1sIGVuZCB0YWcgaW4gaW5uZXIgaHRtbCBtb2RlLiIsCgkiZW9mLWluLXRhYmxlIjoKCQkiVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgdGFibGUgY29udGVudC4iLAoJImVvZi1pbi1zY3JpcHQiOgoJCSJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiBFeHBlY3RlZCBzY3JpcHQgY29udGVudC4iLAoJIm5vbi12b2lkLWVsZW1lbnQtd2l0aC10cmFpbGluZy1zb2xpZHVzIjoKCQkiVHJhaWxpbmcgc29saWR1cyBub3QgYWxsb3dlZCBvbiBlbGVtZW50IHtuYW1lfS4iLAoJInVuZXhwZWN0ZWQtaHRtbC1lbGVtZW50LWluLWZvcmVpZ24tY29udGVudCI6CgkJIkhUTUwgc3RhcnQgdGFnIFwie25hbWV9XCIgaW4gYSBmb3JlaWduIG5hbWVzcGFjZSBjb250ZXh0LiIsCgkidW5leHBlY3RlZC1zdGFydC10YWctaW4tdGFibGUiOgoJCSJVbmV4cGVjdGVkIHtuYW1lfS4gRXhwZWN0ZWQgdGFibGUgY29udGVudC4iCn0KfSwKe31dLAo5OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKdmFyIFNBWFRyZWVCdWlsZGVyID0gX2RlcmVxXygnLi9TQVhUcmVlQnVpbGRlcicpLlNBWFRyZWVCdWlsZGVyOwp2YXIgVG9rZW5pemVyID0gX2RlcmVxXygnLi4vVG9rZW5pemVyJykuVG9rZW5pemVyOwp2YXIgVHJlZVBhcnNlciA9IF9kZXJlcV8oJy4vVHJlZVBhcnNlcicpLlRyZWVQYXJzZXI7CgpmdW5jdGlvbiBTQVhQYXJzZXIoKSB7Cgl0aGlzLmNvbnRlbnRIYW5kbGVyID0gbnVsbDsKCXRoaXMuX2Vycm9ySGFuZGxlciA9IG51bGw7Cgl0aGlzLl90cmVlQnVpbGRlciA9IG5ldyBTQVhUcmVlQnVpbGRlcigpOwoJdGhpcy5fdG9rZW5pemVyID0gbmV3IFRva2VuaXplcih0aGlzLl90cmVlQnVpbGRlcik7Cgl0aGlzLl9zY3JpcHRpbmdFbmFibGVkID0gZmFsc2U7Cn0KClNBWFBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbihzb3VyY2UpIHsKCXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShzb3VyY2UpOwoJdmFyIGRvY3VtZW50ID0gdGhpcy5fdHJlZUJ1aWxkZXIuZG9jdW1lbnQ7CglpZiAoZG9jdW1lbnQpIHsKCQluZXcgVHJlZVBhcnNlcih0aGlzLmNvbnRlbnRIYW5kbGVyKS5wYXJzZShkb2N1bWVudCk7Cgl9Cn07CgpTQVhQYXJzZXIucHJvdG90eXBlLnBhcnNlRnJhZ21lbnQgPSBmdW5jdGlvbihzb3VyY2UsIGNvbnRleHQpIHsKCXRoaXMuX3RyZWVCdWlsZGVyLnNldEZyYWdtZW50Q29udGV4dChjb250ZXh0KTsKCXRoaXMuX3Rva2VuaXplci50b2tlbml6ZShzb3VyY2UpOwoJdmFyIGZyYWdtZW50ID0gdGhpcy5fdHJlZUJ1aWxkZXIuZ2V0RnJhZ21lbnQoKTsKCWlmIChmcmFnbWVudCkgewoJCW5ldyBUcmVlUGFyc2VyKHRoaXMuY29udGVudEhhbmRsZXIpLnBhcnNlKGZyYWdtZW50KTsKCX0KfTsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTQVhQYXJzZXIucHJvdG90eXBlLCAnc2NyaXB0aW5nRW5hYmxlZCcsIHsKCWdldDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuX3NjcmlwdGluZ0VuYWJsZWQ7Cgl9LAoJc2V0OiBmdW5jdGlvbih2YWx1ZSkgewoJCXRoaXMuX3NjcmlwdGluZ0VuYWJsZWQgPSB2YWx1ZTsKCQl0aGlzLl90cmVlQnVpbGRlci5zY3JpcHRpbmdFbmFibGVkID0gdmFsdWU7Cgl9Cn0pOwoKT2JqZWN0LmRlZmluZVByb3BlcnR5KFNBWFBhcnNlci5wcm90b3R5cGUsICdlcnJvckhhbmRsZXInLCB7CglnZXQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLl9lcnJvckhhbmRsZXI7Cgl9LAoJc2V0OiBmdW5jdGlvbih2YWx1ZSkgewoJCXRoaXMuX2Vycm9ySGFuZGxlciA9IHZhbHVlOwoJCXRoaXMuX3RyZWVCdWlsZGVyLmVycm9ySGFuZGxlciA9IHZhbHVlOwoJfQp9KTsKCmV4cG9ydHMuU0FYUGFyc2VyID0gU0FYUGFyc2VyOwoKfSwKeyIuLi9Ub2tlbml6ZXIiOjUsIi4vU0FYVHJlZUJ1aWxkZXIiOjEwLCIuL1RyZWVQYXJzZXIiOjExfV0sCjEwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKdmFyIHV0aWwgPSBfZGVyZXFfKCd1dGlsJyk7CnZhciBUcmVlQnVpbGRlciA9IF9kZXJlcV8oJy4uL1RyZWVCdWlsZGVyJykuVHJlZUJ1aWxkZXI7CgpmdW5jdGlvbiBTQVhUcmVlQnVpbGRlcigpIHsKCVRyZWVCdWlsZGVyLmNhbGwodGhpcyk7Cn0KCnV0aWwuaW5oZXJpdHMoU0FYVHJlZUJ1aWxkZXIsIFRyZWVCdWlsZGVyKTsKClNBWFRyZWVCdWlsZGVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKHRva2VuaXplcikgewoJdGhpcy5kb2N1bWVudCA9IG5ldyBEb2N1bWVudCh0aGlzLnRva2VuaXplcik7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7Cgl0aGlzLmRvY3VtZW50LmVuZExvY2F0b3IgPSB0aGlzLnRva2VuaXplcjsKfTsKClNBWFRyZWVCdWlsZGVyLnByb3RvdHlwZS5pbnNlcnREb2N0eXBlID0gZnVuY3Rpb24obmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7Cgl2YXIgZG9jdHlwZSA9IG5ldyBEVEQodGhpcy50b2tlbml6ZXIsIG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Cglkb2N0eXBlLmVuZExvY2F0b3IgPSB0aGlzLnRva2VuaXplcjsKCXRoaXMuZG9jdW1lbnQuYXBwZW5kQ2hpbGQoZG9jdHlwZSk7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBhdHRyaWJ1dGVzKSB7Cgl2YXIgZWxlbWVudCA9IG5ldyBFbGVtZW50KHRoaXMudG9rZW5pemVyLCBuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgbG9jYWxOYW1lLCBhdHRyaWJ1dGVzIHx8IFtdKTsKCXJldHVybiBlbGVtZW50Owp9OwoKU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmluc2VydENvbW1lbnQgPSBmdW5jdGlvbihkYXRhLCBwYXJlbnQpIHsKCWlmICghcGFyZW50KQoJCXBhcmVudCA9IHRoaXMuY3VycmVudFN0YWNrSXRlbSgpOwoJdmFyIGNvbW1lbnQgPSBuZXcgQ29tbWVudCh0aGlzLnRva2VuaXplciwgZGF0YSk7CglwYXJlbnQuYXBwZW5kQ2hpbGQoY29tbWVudCk7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuYXBwZW5kQ2hhcmFjdGVycyA9IGZ1bmN0aW9uKHBhcmVudCwgZGF0YSkgewoJdmFyIHRleHQgPSBuZXcgQ2hhcmFjdGVycyh0aGlzLnRva2VuaXplciwgZGF0YSk7CglwYXJlbnQuYXBwZW5kQ2hpbGQodGV4dCk7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuaW5zZXJ0VGV4dCA9IGZ1bmN0aW9uKGRhdGEpIHsKCWlmICh0aGlzLnJlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJlbnQgJiYgdGhpcy5vcGVuRWxlbWVudHMudG9wLmlzRm9zdGVyUGFyZW50aW5nKCkpIHsKCQl2YXIgdGFibGVJbmRleCA9IHRoaXMub3BlbkVsZW1lbnRzLmZpbmRJbmRleCgndGFibGUnKTsKCQl2YXIgdGFibGVJdGVtID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbSh0YWJsZUluZGV4KTsKCQl2YXIgdGFibGUgPSB0YWJsZUl0ZW0ubm9kZTsKCQlpZiAodGFibGVJbmRleCA9PT0gMCkgewoJCQlyZXR1cm4gdGhpcy5hcHBlbmRDaGFyYWN0ZXJzKHRhYmxlLCBkYXRhKTsKCQl9CgkJdmFyIHRleHQgPSBuZXcgQ2hhcmFjdGVycyh0aGlzLnRva2VuaXplciwgZGF0YSk7CgkJdmFyIHBhcmVudCA9IHRhYmxlLnBhcmVudE5vZGU7CgkJaWYgKHBhcmVudCkgewoJCQlwYXJlbnQuaW5zZXJ0QmV0d2Vlbih0ZXh0LCB0YWJsZS5wcmV2aW91c1NpYmxpbmcsIHRhYmxlKTsKCQkJcmV0dXJuOwoJCX0KCQl2YXIgc3RhY2tQYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtKHRhYmxlSW5kZXggLSAxKS5ub2RlOwoJCXN0YWNrUGFyZW50LmFwcGVuZENoaWxkKHRleHQpOwoJCXJldHVybjsKCX0KCXRoaXMuYXBwZW5kQ2hhcmFjdGVycyh0aGlzLmN1cnJlbnRTdGFja0l0ZW0oKS5ub2RlLCBkYXRhKTsKfTsKClNBWFRyZWVCdWlsZGVyLnByb3RvdHlwZS5hdHRhY2hOb2RlID0gZnVuY3Rpb24obm9kZSwgcGFyZW50KSB7CglwYXJlbnQuYXBwZW5kQ2hpbGQobm9kZSk7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuYXR0YWNoTm9kZVRvRm9zdGVyUGFyZW50ID0gZnVuY3Rpb24oY2hpbGQsIHRhYmxlLCBzdGFja1BhcmVudCkgewoJdmFyIHBhcmVudCA9IHRhYmxlLnBhcmVudE5vZGU7CglpZiAocGFyZW50KQoJCXBhcmVudC5pbnNlcnRCZXR3ZWVuKGNoaWxkLCB0YWJsZS5wcmV2aW91c1NpYmxpbmcsIHRhYmxlKTsKCWVsc2UKCQlzdGFja1BhcmVudC5hcHBlbmRDaGlsZChjaGlsZCk7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuZGV0YWNoRnJvbVBhcmVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKCWVsZW1lbnQuZGV0YWNoKCk7Cn07CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUucmVwYXJlbnRDaGlsZHJlbiA9IGZ1bmN0aW9uKG9sZFBhcmVudCwgbmV3UGFyZW50KSB7CgluZXdQYXJlbnQuYXBwZW5kQ2hpbGRyZW4ob2xkUGFyZW50LmZpcnN0Q2hpbGQpOwp9OwoKU0FYVHJlZUJ1aWxkZXIucHJvdG90eXBlLmdldEZyYWdtZW50ID0gZnVuY3Rpb24oKSB7Cgl2YXIgZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudCgpOwoJdGhpcy5yZXBhcmVudENoaWxkcmVuKHRoaXMub3BlbkVsZW1lbnRzLnJvb3ROb2RlLCBmcmFnbWVudCk7CglyZXR1cm4gZnJhZ21lbnQ7Cn07CgpmdW5jdGlvbiBnZXRBdHRyaWJ1dGUobm9kZSwgbmFtZSkgewoJZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsKCQl2YXIgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzW2ldOwoJCWlmIChhdHRyaWJ1dGUubm9kZU5hbWUgPT09IG5hbWUpCgkJCXJldHVybiBhdHRyaWJ1dGUubm9kZVZhbHVlOwoJfQp9CgpTQVhUcmVlQnVpbGRlci5wcm90b3R5cGUuYWRkQXR0cmlidXRlc1RvRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHsKCWZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykgewoJCXZhciBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2ldOwoJCWlmICghZ2V0QXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZS5ub2RlTmFtZSkpCgkJCWVsZW1lbnQuYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZSk7Cgl9Cn07Cgp2YXIgTm9kZVR5cGUgPSB7CglDREFUQTogMSwKCUNIQVJBQ1RFUlM6IDIsCglDT01NRU5UOiAzLAoJRE9DVU1FTlQ6IDQsCglET0NVTUVOVF9GUkFHTUVOVDogNSwKCURURDogNiwKCUVMRU1FTlQ6IDcsCglFTlRJVFk6IDgsCglJR05PUkFCTEVfV0hJVEVTUEFDRTogOSwKCVBST0NFU1NJTkdfSU5TVFJVQ1RJT046IDEwLAoJU0tJUFBFRF9FTlRJVFk6IDExCn07CmZ1bmN0aW9uIE5vZGUobG9jYXRvcikgewoJaWYgKCFsb2NhdG9yKSB7CgkJdGhpcy5jb2x1bW5OdW1iZXIgPSAtMTsKCQl0aGlzLmxpbmVOdW1iZXIgPSAtMTsKCX0gZWxzZSB7CgkJdGhpcy5jb2x1bW5OdW1iZXIgPSBsb2NhdG9yLmNvbHVtbk51bWJlcjsKCQl0aGlzLmxpbmVOdW1iZXIgPSBsb2NhdG9yLmxpbmVOdW1iZXI7Cgl9Cgl0aGlzLnBhcmVudE5vZGUgPSBudWxsOwoJdGhpcy5uZXh0U2libGluZyA9IG51bGw7Cgl0aGlzLmZpcnN0Q2hpbGQgPSBudWxsOwp9Ck5vZGUucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24odHJlZVBhcnNlcikgewoJdGhyb3cgbmV3IEVycm9yKCJOb3QgSW1wbGVtZW50ZWQiKTsKfTsKTm9kZS5wcm90b3R5cGUucmV2aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXJldHVybjsKfTsKTm9kZS5wcm90b3R5cGUuZGV0YWNoID0gZnVuY3Rpb24oKSB7CglpZiAodGhpcy5wYXJlbnROb2RlICE9PSBudWxsKSB7CgkJdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpOwoJCXRoaXMucGFyZW50Tm9kZSA9IG51bGw7Cgl9Cn07CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoTm9kZS5wcm90b3R5cGUsICdwcmV2aW91c1NpYmxpbmcnLCB7CglnZXQ6IGZ1bmN0aW9uKCkgewoJCXZhciBwcmV2ID0gbnVsbDsKCQl2YXIgbmV4dCA9IHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkOwoJCWZvcig7OykgewoJCQlpZiAodGhpcyA9PSBuZXh0KSB7CgkJCQlyZXR1cm4gcHJldjsKCQkJfQoJCQlwcmV2ID0gbmV4dDsKCQkJbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7CgkJfQoJfQp9KTsKCgpmdW5jdGlvbiBQYXJlbnROb2RlKGxvY2F0b3IpIHsKCU5vZGUuY2FsbCh0aGlzLCBsb2NhdG9yKTsKCXRoaXMubGFzdENoaWxkID0gbnVsbDsKCXRoaXMuX2VuZExvY2F0b3IgPSBudWxsOwp9CgpQYXJlbnROb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpOwpQYXJlbnROb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbihjaGlsZCwgc2libGluZykgewoJaWYgKCFzaWJsaW5nKSB7CgkJcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY2hpbGQpOwoJfQoJY2hpbGQuZGV0YWNoKCk7CgljaGlsZC5wYXJlbnROb2RlID0gdGhpczsKCWlmICh0aGlzLmZpcnN0Q2hpbGQgPT0gc2libGluZykgewoJCWNoaWxkLm5leHRTaWJsaW5nID0gc2libGluZzsKCQl0aGlzLmZpcnN0Q2hpbGQgPSBjaGlsZDsKCX0gZWxzZSB7CgkJdmFyIHByZXYgPSB0aGlzLmZpcnN0Q2hpbGQ7CgkJdmFyIG5leHQgPSB0aGlzLmZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7CgkJd2hpbGUgKG5leHQgIT0gc2libGluZykgewoJCQlwcmV2ID0gbmV4dDsKCQkJbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7CgkJfQoJCXByZXYubmV4dFNpYmxpbmcgPSBjaGlsZDsKCQljaGlsZC5uZXh0U2libGluZyA9IG5leHQ7Cgl9CglyZXR1cm4gY2hpbGQ7Cn07CgpQYXJlbnROb2RlLnByb3RvdHlwZS5pbnNlcnRCZXR3ZWVuID0gZnVuY3Rpb24oY2hpbGQsIHByZXYsIG5leHQpIHsKCWlmICghbmV4dCkgewoJCXJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNoaWxkKTsKCX0KCWNoaWxkLmRldGFjaCgpOwoJY2hpbGQucGFyZW50Tm9kZSA9IHRoaXM7CgljaGlsZC5uZXh0U2libGluZyA9IG5leHQ7CglpZiAoIXByZXYpIHsKCQlmaXJzdENoaWxkID0gY2hpbGQ7Cgl9IGVsc2UgewoJCXByZXYubmV4dFNpYmxpbmcgPSBjaGlsZDsKCX0KCXJldHVybiBjaGlsZDsKfTsKUGFyZW50Tm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkgewoJY2hpbGQuZGV0YWNoKCk7CgljaGlsZC5wYXJlbnROb2RlID0gdGhpczsKCWlmICghdGhpcy5maXJzdENoaWxkKSB7CgkJdGhpcy5maXJzdENoaWxkID0gY2hpbGQ7Cgl9IGVsc2UgewoJCXRoaXMubGFzdENoaWxkLm5leHRTaWJsaW5nID0gY2hpbGQ7Cgl9Cgl0aGlzLmxhc3RDaGlsZCA9IGNoaWxkOwoJcmV0dXJuIGNoaWxkOwp9OwpQYXJlbnROb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZHJlbiA9IGZ1bmN0aW9uKHBhcmVudCkgewoJdmFyIGNoaWxkID0gcGFyZW50LmZpcnN0Q2hpbGQ7CglpZiAoIWNoaWxkKSB7CgkJcmV0dXJuOwoJfQoJdmFyIGFub3RoZXIgPSBwYXJlbnQ7CglpZiAoIXRoaXMuZmlyc3RDaGlsZCkgewoJCXRoaXMuZmlyc3RDaGlsZCA9IGNoaWxkOwoJfSBlbHNlIHsKCQl0aGlzLmxhc3RDaGlsZC5uZXh0U2libGluZyA9IGNoaWxkOwoJfQoJdGhpcy5sYXN0Q2hpbGQgPSBhbm90aGVyLmxhc3RDaGlsZDsKCWRvIHsKCQljaGlsZC5wYXJlbnROb2RlID0gdGhpczsKCX0gd2hpbGUgKChjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKSk7Cglhbm90aGVyLmZpcnN0Q2hpbGQgPSBudWxsOwoJYW5vdGhlci5sYXN0Q2hpbGQgPSBudWxsOwp9OwpQYXJlbnROb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKG5vZGUpIHsKCWlmICh0aGlzLmZpcnN0Q2hpbGQgPT0gbm9kZSkgewoJCXRoaXMuZmlyc3RDaGlsZCA9IG5vZGUubmV4dFNpYmxpbmc7CgkJaWYgKHRoaXMubGFzdENoaWxkID09IG5vZGUpIHsKCQkJdGhpcy5sYXN0Q2hpbGQgPSBudWxsOwoJCX0KCX0gZWxzZSB7CgkJdmFyIHByZXYgPSB0aGlzLmZpcnN0Q2hpbGQ7CgkJdmFyIG5leHQgPSB0aGlzLmZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7CgkJd2hpbGUgKG5leHQgIT0gbm9kZSkgewoJCQlwcmV2ID0gbmV4dDsKCQkJbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7CgkJfQoJCXByZXYubmV4dFNpYmxpbmcgPSBub2RlLm5leHRTaWJsaW5nOwoJCWlmICh0aGlzLmxhc3RDaGlsZCA9PSBub2RlKSB7CgkJCXRoaXMubGFzdENoaWxkID0gcHJldjsKCQl9Cgl9Cglub2RlLnBhcmVudE5vZGUgPSBudWxsOwoJcmV0dXJuIG5vZGU7Cn07CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoUGFyZW50Tm9kZS5wcm90b3R5cGUsICdlbmRMb2NhdG9yJywgewoJZ2V0OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5fZW5kTG9jYXRvcjsKCX0sCglzZXQ6IGZ1bmN0aW9uKGVuZExvY2F0b3IpIHsKCQl0aGlzLl9lbmRMb2NhdG9yID0gewoJCQlsaW5lTnVtYmVyOiBlbmRMb2NhdG9yLmxpbmVOdW1iZXIsCgkJCWNvbHVtbk51bWJlcjogZW5kTG9jYXRvci5jb2x1bW5OdW1iZXIKCQl9OwoJfQp9KTsKZnVuY3Rpb24gRG9jdW1lbnQgKGxvY2F0b3IpIHsKCVBhcmVudE5vZGUuY2FsbCh0aGlzLCBsb2NhdG9yKTsKCXRoaXMubm9kZVR5cGUgPSBOb2RlVHlwZS5ET0NVTUVOVDsKfQoKRG9jdW1lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSk7CkRvY3VtZW50LnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIuc3RhcnREb2N1bWVudCh0aGlzKTsKfTsKRG9jdW1lbnQucHJvdG90eXBlLnJldmlzaXQgPSBmdW5jdGlvbih0cmVlUGFyc2VyKSB7Cgl0cmVlUGFyc2VyLmVuZERvY3VtZW50KHRoaXMuZW5kTG9jYXRvcik7Cn07CmZ1bmN0aW9uIERvY3VtZW50RnJhZ21lbnQoKSB7CglQYXJlbnROb2RlLmNhbGwodGhpcywgbmV3IExvY2F0b3IoKSk7Cgl0aGlzLm5vZGVUeXBlID0gTm9kZVR5cGUuRE9DVU1FTlRfRlJBR01FTlQ7Cn0KCkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSk7CkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24odHJlZVBhcnNlcikgewp9OwpmdW5jdGlvbiBFbGVtZW50KGxvY2F0b3IsIHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgYXR0cywgcHJlZml4TWFwcGluZ3MpIHsKCVBhcmVudE5vZGUuY2FsbCh0aGlzLCBsb2NhdG9yKTsKCXRoaXMudXJpID0gdXJpOwoJdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Cgl0aGlzLnFOYW1lID0gcU5hbWU7Cgl0aGlzLmF0dHJpYnV0ZXMgPSBhdHRzOwoJdGhpcy5wcmVmaXhNYXBwaW5ncyA9IHByZWZpeE1hcHBpbmdzOwoJdGhpcy5ub2RlVHlwZSA9IE5vZGVUeXBlLkVMRU1FTlQ7Cn0KCkVsZW1lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSk7CkVsZW1lbnQucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24odHJlZVBhcnNlcikgewoJaWYgKHRoaXMucHJlZml4TWFwcGluZ3MpIHsKCQlmb3IgKHZhciBrZXkgaW4gcHJlZml4TWFwcGluZ3MpIHsKCQkJdmFyIG1hcHBpbmcgPSBwcmVmaXhNYXBwaW5nc1trZXldOwoJCQl0cmVlUGFyc2VyLnN0YXJ0UHJlZml4TWFwcGluZyhtYXBwaW5nLmdldFByZWZpeCgpLAoJCQkJCW1hcHBpbmcuZ2V0VXJpKCksIHRoaXMpOwoJCX0KCX0KCXRyZWVQYXJzZXIuc3RhcnRFbGVtZW50KHRoaXMudXJpLCB0aGlzLmxvY2FsTmFtZSwgdGhpcy5xTmFtZSwgdGhpcy5hdHRyaWJ1dGVzLCB0aGlzKTsKfTsKRWxlbWVudC5wcm90b3R5cGUucmV2aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIuZW5kRWxlbWVudCh0aGlzLnVyaSwgdGhpcy5sb2NhbE5hbWUsIHRoaXMucU5hbWUsIHRoaXMuZW5kTG9jYXRvcik7CglpZiAodGhpcy5wcmVmaXhNYXBwaW5ncykgewoJCWZvciAodmFyIGtleSBpbiBwcmVmaXhNYXBwaW5ncykgewoJCQl2YXIgbWFwcGluZyA9IHByZWZpeE1hcHBpbmdzW2tleV07CgkJCXRyZWVQYXJzZXIuZW5kUHJlZml4TWFwcGluZyhtYXBwaW5nLmdldFByZWZpeCgpLCB0aGlzLmVuZExvY2F0b3IpOwoJCX0KCX0KfTsKZnVuY3Rpb24gQ2hhcmFjdGVycyhsb2NhdG9yLCBkYXRhKXsKCU5vZGUuY2FsbCh0aGlzLCBsb2NhdG9yKTsKCXRoaXMuZGF0YSA9IGRhdGE7Cgl0aGlzLm5vZGVUeXBlID0gTm9kZVR5cGUuQ0hBUkFDVEVSUzsKfQoKQ2hhcmFjdGVycy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKTsKQ2hhcmFjdGVycy5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodHJlZVBhcnNlcikgewoJdHJlZVBhcnNlci5jaGFyYWN0ZXJzKHRoaXMuZGF0YSwgMCwgdGhpcy5kYXRhLmxlbmd0aCwgdGhpcyk7Cn07CmZ1bmN0aW9uIElnbm9yYWJsZVdoaXRlc3BhY2UobG9jYXRvciwgZGF0YSkgewoJTm9kZS5jYWxsKHRoaXMsIGxvY2F0b3IpOwoJdGhpcy5kYXRhID0gZGF0YTsKCXRoaXMubm9kZVR5cGUgPSBOb2RlVHlwZS5JR05PUkFCTEVfV0hJVEVTUEFDRTsKfQoKSWdub3JhYmxlV2hpdGVzcGFjZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKTsKSWdub3JhYmxlV2hpdGVzcGFjZS5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbih0cmVlUGFyc2VyKSB7Cgl0cmVlUGFyc2VyLmlnbm9yYWJsZVdoaXRlc3BhY2UodGhpcy5kYXRhLCAwLCB0aGlzLmRhdGEubGVuZ3RoLCB0aGlzKTsKfTsKZnVuY3Rpb24gQ29tbWVudChsb2NhdG9yLCBkYXRhKSB7CglOb2RlLmNhbGwodGhpcywgbG9jYXRvcik7Cgl0aGlzLmRhdGEgPSBkYXRhOwoJdGhpcy5ub2RlVHlwZSA9IE5vZGVUeXBlLkNPTU1FTlQ7Cn0KCkNvbW1lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShOb2RlLnByb3RvdHlwZSk7CkNvbW1lbnQucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24odHJlZVBhcnNlcikgewoJdHJlZVBhcnNlci5jb21tZW50KHRoaXMuZGF0YSwgMCwgdGhpcy5kYXRhLmxlbmd0aCwgdGhpcyk7Cn07CmZ1bmN0aW9uIENEQVRBKGxvY2F0b3IpIHsKCVBhcmVudE5vZGUuY2FsbCh0aGlzLCBsb2NhdG9yKTsKCXRoaXMubm9kZVR5cGUgPSBOb2RlVHlwZS5DREFUQTsKfQoKQ0RBVEEucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJlbnROb2RlLnByb3RvdHlwZSk7CkNEQVRBLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIuc3RhcnRDREFUQSh0aGlzKTsKfTsKQ0RBVEEucHJvdG90eXBlLnJldmlzaXQgPSBmdW5jdGlvbih0cmVlUGFyc2VyKSB7Cgl0cmVlUGFyc2VyLmVuZENEQVRBKHRoaXMuZW5kTG9jYXRvcik7Cn07CmZ1bmN0aW9uIEVudGl0eShuYW1lKSB7CglQYXJlbnROb2RlLmNhbGwodGhpcyk7Cgl0aGlzLm5hbWUgPSBuYW1lOwoJdGhpcy5ub2RlVHlwZSA9IE5vZGVUeXBlLkVOVElUWTsKfQoKRW50aXR5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyZW50Tm9kZS5wcm90b3R5cGUpOwpFbnRpdHkucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24odHJlZVBhcnNlcikgewoJdHJlZVBhcnNlci5zdGFydEVudGl0eSh0aGlzLm5hbWUsIHRoaXMpOwp9OwpFbnRpdHkucHJvdG90eXBlLnJldmlzaXQgPSBmdW5jdGlvbih0cmVlUGFyc2VyKSB7Cgl0cmVlUGFyc2VyLmVuZEVudGl0eSh0aGlzLm5hbWUpOwp9OwoKZnVuY3Rpb24gU2tpcHBlZEVudGl0eShuYW1lKSB7CglOb2RlLmNhbGwodGhpcyk7Cgl0aGlzLm5hbWUgPSBuYW1lOwoJdGhpcy5ub2RlVHlwZSA9IE5vZGVUeXBlLlNLSVBQRURfRU5USVRZOwp9CgpTa2lwcGVkRW50aXR5LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpOwpTa2lwcGVkRW50aXR5LnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIuc2tpcHBlZEVudGl0eSh0aGlzLm5hbWUsIHRoaXMpOwp9OwpmdW5jdGlvbiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKSB7CglOb2RlLmNhbGwodGhpcyk7Cgl0aGlzLnRhcmdldCA9IHRhcmdldDsKCXRoaXMuZGF0YSA9IGRhdGE7Cn0KClByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE5vZGUucHJvdG90eXBlKTsKUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIucHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMudGFyZ2V0LCB0aGlzLmRhdGEsIHRoaXMpOwp9OwpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmdldE5vZGVUeXBlID0gZnVuY3Rpb24oKSB7CglyZXR1cm4gTm9kZVR5cGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTjsKfTsKZnVuY3Rpb24gRFREKG5hbWUsIHB1YmxpY0lkZW50aWZpZXIsIHN5c3RlbUlkZW50aWZpZXIpIHsKCVBhcmVudE5vZGUuY2FsbCh0aGlzKTsKCXRoaXMubmFtZSA9IG5hbWU7Cgl0aGlzLnB1YmxpY0lkZW50aWZpZXIgPSBwdWJsaWNJZGVudGlmaWVyOwoJdGhpcy5zeXN0ZW1JZGVudGlmaWVyID0gc3lzdGVtSWRlbnRpZmllcjsKCXRoaXMubm9kZVR5cGUgPSBOb2RlVHlwZS5EVEQ7Cn0KCkRURC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcmVudE5vZGUucHJvdG90eXBlKTsKRFRELnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIuc3RhcnREVEQodGhpcy5uYW1lLCB0aGlzLnB1YmxpY0lkZW50aWZpZXIsIHRoaXMuc3lzdGVtSWRlbnRpZmllciwgdGhpcyk7Cn07CkRURC5wcm90b3R5cGUucmV2aXNpdCA9IGZ1bmN0aW9uKHRyZWVQYXJzZXIpIHsKCXRyZWVQYXJzZXIuZW5kRFREKCk7Cn07CgpleHBvcnRzLlNBWFRyZWVCdWlsZGVyID0gU0FYVHJlZUJ1aWxkZXI7Cgp9LAp7Ii4uL1RyZWVCdWlsZGVyIjo2LCJ1dGlsIjoyMH1dLAoxMTpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CmZ1bmN0aW9uIFRyZWVQYXJzZXIoY29udGVudEhhbmRsZXIsIGxleGljYWxIYW5kbGVyKXsKCXRoaXMuY29udGVudEhhbmRsZXI7Cgl0aGlzLmxleGljYWxIYW5kbGVyOwoJdGhpcy5sb2NhdG9yRGVsZWdhdGU7CgoJaWYgKCFjb250ZW50SGFuZGxlcikgewoJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbnRlbnRIYW5kbGVyIHdhcyBudWxsLiIpOwoJfQoJdGhpcy5jb250ZW50SGFuZGxlciA9IGNvbnRlbnRIYW5kbGVyOwoJaWYgKCFsZXhpY2FsSGFuZGxlcikgewoJCXRoaXMubGV4aWNhbEhhbmRsZXIgPSBuZXcgTnVsbExleGljYWxIYW5kbGVyKCk7Cgl9IGVsc2UgewoJCXRoaXMubGV4aWNhbEhhbmRsZXIgPSBsZXhpY2FsSGFuZGxlcjsKCX0KfQpUcmVlUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKG5vZGUpIHsKCXRoaXMuY29udGVudEhhbmRsZXIuZG9jdW1lbnRMb2NhdG9yID0gdGhpczsKCXZhciBjdXJyZW50ID0gbm9kZTsKCXZhciBuZXh0OwoJZm9yICg7OykgewoJCWN1cnJlbnQudmlzaXQodGhpcyk7CgkJaWYgKG5leHQgPSBjdXJyZW50LmZpcnN0Q2hpbGQpIHsKCQkJY3VycmVudCA9IG5leHQ7CgkJCWNvbnRpbnVlOwoJCX0KCQlmb3IgKDs7KSB7CgkJCWN1cnJlbnQucmV2aXNpdCh0aGlzKTsKCQkJaWYgKGN1cnJlbnQgPT0gbm9kZSkgewoJCQkJcmV0dXJuOwoJCQl9CgkJCWlmIChuZXh0ID0gY3VycmVudC5uZXh0U2libGluZykgewoJCQkJY3VycmVudCA9IG5leHQ7CgkJCQlicmVhazsKCQkJfQoJCQljdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlOwoJCX0KCX0KfTsKVHJlZVBhcnNlci5wcm90b3R5cGUuY2hhcmFjdGVycyA9IGZ1bmN0aW9uKGNoLCBzdGFydCwgbGVuZ3RoLCBsb2NhdG9yKSB7Cgl0aGlzLmxvY2F0b3JEZWxlZ2F0ZSA9IGxvY2F0b3I7Cgl0aGlzLmNvbnRlbnRIYW5kbGVyLmNoYXJhY3RlcnMoY2gsIHN0YXJ0LCBsZW5ndGgpOwp9OwpUcmVlUGFyc2VyLnByb3RvdHlwZS5lbmREb2N1bWVudCA9IGZ1bmN0aW9uKGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMuY29udGVudEhhbmRsZXIuZW5kRG9jdW1lbnQoKTsKfTsKVHJlZVBhcnNlci5wcm90b3R5cGUuZW5kRWxlbWVudCA9IGZ1bmN0aW9uKHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgbG9jYXRvcikgewoJdGhpcy5sb2NhdG9yRGVsZWdhdGUgPSBsb2NhdG9yOwoJdGhpcy5jb250ZW50SGFuZGxlci5lbmRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLmVuZFByZWZpeE1hcHBpbmcgPSBmdW5jdGlvbihwcmVmaXgsIGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMuY29udGVudEhhbmRsZXIuZW5kUHJlZml4TWFwcGluZyhwcmVmaXgpOwp9OwpUcmVlUGFyc2VyLnByb3RvdHlwZS5pZ25vcmFibGVXaGl0ZXNwYWNlID0gZnVuY3Rpb24oY2gsIHN0YXJ0LCBsZW5ndGgsIGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMuY29udGVudEhhbmRsZXIuaWdub3JhYmxlV2hpdGVzcGFjZShjaCwgc3RhcnQsIGxlbmd0aCk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLnByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKHRhcmdldCwgZGF0YSwgbG9jYXRvcikgewoJdGhpcy5sb2NhdG9yRGVsZWdhdGUgPSBsb2NhdG9yOwoJdGhpcy5jb250ZW50SGFuZGxlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTsKfTsKVHJlZVBhcnNlci5wcm90b3R5cGUuc2tpcHBlZEVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMuY29udGVudEhhbmRsZXIuc2tpcHBlZEVudGl0eShuYW1lKTsKfTsKVHJlZVBhcnNlci5wcm90b3R5cGUuc3RhcnREb2N1bWVudCA9IGZ1bmN0aW9uKGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMuY29udGVudEhhbmRsZXIuc3RhcnREb2N1bWVudCgpOwp9OwpUcmVlUGFyc2VyLnByb3RvdHlwZS5zdGFydEVsZW1lbnQgPSBmdW5jdGlvbih1cmksIGxvY2FsTmFtZSwgcU5hbWUsIGF0dHMsIGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMuY29udGVudEhhbmRsZXIuc3RhcnRFbGVtZW50KHVyaSwgbG9jYWxOYW1lLCBxTmFtZSwgYXR0cyk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLnN0YXJ0UHJlZml4TWFwcGluZyA9IGZ1bmN0aW9uKHByZWZpeCwgdXJpLCBsb2NhdG9yKSB7Cgl0aGlzLmxvY2F0b3JEZWxlZ2F0ZSA9IGxvY2F0b3I7Cgl0aGlzLmNvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZyhwcmVmaXgsIHVyaSk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbihjaCwgc3RhcnQsIGxlbmd0aCwgbG9jYXRvcikgewoJdGhpcy5sb2NhdG9yRGVsZWdhdGUgPSBsb2NhdG9yOwoJdGhpcy5sZXhpY2FsSGFuZGxlci5jb21tZW50KGNoLCBzdGFydCwgbGVuZ3RoKTsKfTsKVHJlZVBhcnNlci5wcm90b3R5cGUuZW5kQ0RBVEEgPSBmdW5jdGlvbihsb2NhdG9yKSB7Cgl0aGlzLmxvY2F0b3JEZWxlZ2F0ZSA9IGxvY2F0b3I7Cgl0aGlzLmxleGljYWxIYW5kbGVyLmVuZENEQVRBKCk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLmVuZERURCA9IGZ1bmN0aW9uKGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMubGV4aWNhbEhhbmRsZXIuZW5kRFREKCk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLmVuZEVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIGxvY2F0b3IpIHsKCXRoaXMubG9jYXRvckRlbGVnYXRlID0gbG9jYXRvcjsKCXRoaXMubGV4aWNhbEhhbmRsZXIuZW5kRW50aXR5KG5hbWUpOwp9OwpUcmVlUGFyc2VyLnByb3RvdHlwZS5zdGFydENEQVRBID0gZnVuY3Rpb24obG9jYXRvcikgewoJdGhpcy5sb2NhdG9yRGVsZWdhdGUgPSBsb2NhdG9yOwoJdGhpcy5sZXhpY2FsSGFuZGxlci5zdGFydENEQVRBKCk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLnN0YXJ0RFREID0gZnVuY3Rpb24obmFtZSwgcHVibGljSWQsIHN5c3RlbUlkLCBsb2NhdG9yKSB7Cgl0aGlzLmxvY2F0b3JEZWxlZ2F0ZSA9IGxvY2F0b3I7Cgl0aGlzLmxleGljYWxIYW5kbGVyLnN0YXJ0RFREKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7Cn07ClRyZWVQYXJzZXIucHJvdG90eXBlLnN0YXJ0RW50aXR5ID0gZnVuY3Rpb24obmFtZSwgbG9jYXRvcikgewoJdGhpcy5sb2NhdG9yRGVsZWdhdGUgPSBsb2NhdG9yOwoJdGhpcy5sZXhpY2FsSGFuZGxlci5zdGFydEVudGl0eShuYW1lKTsKfTsKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUcmVlUGFyc2VyLnByb3RvdHlwZSwgJ2NvbHVtbk51bWJlcicsIHsKCWdldDogZnVuY3Rpb24oKSB7CgkJaWYgKCF0aGlzLmxvY2F0b3JEZWxlZ2F0ZSkKCQkJcmV0dXJuIC0xOwoJCWVsc2UKCQkJcmV0dXJuIHRoaXMubG9jYXRvckRlbGVnYXRlLmNvbHVtbk51bWJlcjsKCX0KfSk7CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZVBhcnNlci5wcm90b3R5cGUsICdsaW5lTnVtYmVyJywgewoJZ2V0OiBmdW5jdGlvbigpIHsKCQlpZiAoIXRoaXMubG9jYXRvckRlbGVnYXRlKQoJCQlyZXR1cm4gLTE7CgkJZWxzZQoJCQlyZXR1cm4gdGhpcy5sb2NhdG9yRGVsZWdhdGUubGluZU51bWJlcjsKCX0KfSk7CmZ1bmN0aW9uIE51bGxMZXhpY2FsSGFuZGxlcigpIHsKCn0KCk51bGxMZXhpY2FsSGFuZGxlci5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKCkge307Ck51bGxMZXhpY2FsSGFuZGxlci5wcm90b3R5cGUuZW5kQ0RBVEEgPSBmdW5jdGlvbigpIHt9OwpOdWxsTGV4aWNhbEhhbmRsZXIucHJvdG90eXBlLmVuZERURCA9IGZ1bmN0aW9uKCkge307Ck51bGxMZXhpY2FsSGFuZGxlci5wcm90b3R5cGUuZW5kRW50aXR5ID0gZnVuY3Rpb24oKSB7fTsKTnVsbExleGljYWxIYW5kbGVyLnByb3RvdHlwZS5zdGFydENEQVRBID0gZnVuY3Rpb24oKSB7fTsKTnVsbExleGljYWxIYW5kbGVyLnByb3RvdHlwZS5zdGFydERURCA9IGZ1bmN0aW9uKCkge307Ck51bGxMZXhpY2FsSGFuZGxlci5wcm90b3R5cGUuc3RhcnRFbnRpdHkgPSBmdW5jdGlvbigpIHt9OwoKZXhwb3J0cy5UcmVlUGFyc2VyID0gVHJlZVBhcnNlcjsKCn0sCnt9XSwKMTI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewptb2R1bGUuZXhwb3J0cyA9IHsKCSJBYWN1dGU7IjogIlx1MDBDMSIsCgkiQWFjdXRlIjogIlx1MDBDMSIsCgkiYWFjdXRlOyI6ICJcdTAwRTEiLAoJImFhY3V0ZSI6ICJcdTAwRTEiLAoJIkFicmV2ZTsiOiAiXHUwMTAyIiwKCSJhYnJldmU7IjogIlx1MDEwMyIsCgkiYWM7IjogIlx1MjIzRSIsCgkiYWNkOyI6ICJcdTIyM0YiLAoJImFjRTsiOiAiXHUyMjNFXHUwMzMzIiwKCSJBY2lyYzsiOiAiXHUwMEMyIiwKCSJBY2lyYyI6ICJcdTAwQzIiLAoJImFjaXJjOyI6ICJcdTAwRTIiLAoJImFjaXJjIjogIlx1MDBFMiIsCgkiYWN1dGU7IjogIlx1MDBCNCIsCgkiYWN1dGUiOiAiXHUwMEI0IiwKCSJBY3k7IjogIlx1MDQxMCIsCgkiYWN5OyI6ICJcdTA0MzAiLAoJIkFFbGlnOyI6ICJcdTAwQzYiLAoJIkFFbGlnIjogIlx1MDBDNiIsCgkiYWVsaWc7IjogIlx1MDBFNiIsCgkiYWVsaWciOiAiXHUwMEU2IiwKCSJhZjsiOiAiXHUyMDYxIiwKCSJBZnI7IjogIlx1RDgzNVx1REQwNCIsCgkiYWZyOyI6ICJcdUQ4MzVcdUREMUUiLAoJIkFncmF2ZTsiOiAiXHUwMEMwIiwKCSJBZ3JhdmUiOiAiXHUwMEMwIiwKCSJhZ3JhdmU7IjogIlx1MDBFMCIsCgkiYWdyYXZlIjogIlx1MDBFMCIsCgkiYWxlZnN5bTsiOiAiXHUyMTM1IiwKCSJhbGVwaDsiOiAiXHUyMTM1IiwKCSJBbHBoYTsiOiAiXHUwMzkxIiwKCSJhbHBoYTsiOiAiXHUwM0IxIiwKCSJBbWFjcjsiOiAiXHUwMTAwIiwKCSJhbWFjcjsiOiAiXHUwMTAxIiwKCSJhbWFsZzsiOiAiXHUyQTNGIiwKCSJhbXA7IjogIlx1MDAyNiIsCgkiYW1wIjogIlx1MDAyNiIsCgkiQU1QOyI6ICJcdTAwMjYiLAoJIkFNUCI6ICJcdTAwMjYiLAoJImFuZGFuZDsiOiAiXHUyQTU1IiwKCSJBbmQ7IjogIlx1MkE1MyIsCgkiYW5kOyI6ICJcdTIyMjciLAoJImFuZGQ7IjogIlx1MkE1QyIsCgkiYW5kc2xvcGU7IjogIlx1MkE1OCIsCgkiYW5kdjsiOiAiXHUyQTVBIiwKCSJhbmc7IjogIlx1MjIyMCIsCgkiYW5nZTsiOiAiXHUyOUE0IiwKCSJhbmdsZTsiOiAiXHUyMjIwIiwKCSJhbmdtc2RhYTsiOiAiXHUyOUE4IiwKCSJhbmdtc2RhYjsiOiAiXHUyOUE5IiwKCSJhbmdtc2RhYzsiOiAiXHUyOUFBIiwKCSJhbmdtc2RhZDsiOiAiXHUyOUFCIiwKCSJhbmdtc2RhZTsiOiAiXHUyOUFDIiwKCSJhbmdtc2RhZjsiOiAiXHUyOUFEIiwKCSJhbmdtc2RhZzsiOiAiXHUyOUFFIiwKCSJhbmdtc2RhaDsiOiAiXHUyOUFGIiwKCSJhbmdtc2Q7IjogIlx1MjIyMSIsCgkiYW5ncnQ7IjogIlx1MjIxRiIsCgkiYW5ncnR2YjsiOiAiXHUyMkJFIiwKCSJhbmdydHZiZDsiOiAiXHUyOTlEIiwKCSJhbmdzcGg7IjogIlx1MjIyMiIsCgkiYW5nc3Q7IjogIlx1MDBDNSIsCgkiYW5nemFycjsiOiAiXHUyMzdDIiwKCSJBb2dvbjsiOiAiXHUwMTA0IiwKCSJhb2dvbjsiOiAiXHUwMTA1IiwKCSJBb3BmOyI6ICJcdUQ4MzVcdUREMzgiLAoJImFvcGY7IjogIlx1RDgzNVx1REQ1MiIsCgkiYXBhY2lyOyI6ICJcdTJBNkYiLAoJImFwOyI6ICJcdTIyNDgiLAoJImFwRTsiOiAiXHUyQTcwIiwKCSJhcGU7IjogIlx1MjI0QSIsCgkiYXBpZDsiOiAiXHUyMjRCIiwKCSJhcG9zOyI6ICJcdTAwMjciLAoJIkFwcGx5RnVuY3Rpb247IjogIlx1MjA2MSIsCgkiYXBwcm94OyI6ICJcdTIyNDgiLAoJImFwcHJveGVxOyI6ICJcdTIyNEEiLAoJIkFyaW5nOyI6ICJcdTAwQzUiLAoJIkFyaW5nIjogIlx1MDBDNSIsCgkiYXJpbmc7IjogIlx1MDBFNSIsCgkiYXJpbmciOiAiXHUwMEU1IiwKCSJBc2NyOyI6ICJcdUQ4MzVcdURDOUMiLAoJImFzY3I7IjogIlx1RDgzNVx1RENCNiIsCgkiQXNzaWduOyI6ICJcdTIyNTQiLAoJImFzdDsiOiAiXHUwMDJBIiwKCSJhc3ltcDsiOiAiXHUyMjQ4IiwKCSJhc3ltcGVxOyI6ICJcdTIyNEQiLAoJIkF0aWxkZTsiOiAiXHUwMEMzIiwKCSJBdGlsZGUiOiAiXHUwMEMzIiwKCSJhdGlsZGU7IjogIlx1MDBFMyIsCgkiYXRpbGRlIjogIlx1MDBFMyIsCgkiQXVtbDsiOiAiXHUwMEM0IiwKCSJBdW1sIjogIlx1MDBDNCIsCgkiYXVtbDsiOiAiXHUwMEU0IiwKCSJhdW1sIjogIlx1MDBFNCIsCgkiYXdjb25pbnQ7IjogIlx1MjIzMyIsCgkiYXdpbnQ7IjogIlx1MkExMSIsCgkiYmFja2Nvbmc7IjogIlx1MjI0QyIsCgkiYmFja2Vwc2lsb247IjogIlx1MDNGNiIsCgkiYmFja3ByaW1lOyI6ICJcdTIwMzUiLAoJImJhY2tzaW07IjogIlx1MjIzRCIsCgkiYmFja3NpbWVxOyI6ICJcdTIyQ0QiLAoJIkJhY2tzbGFzaDsiOiAiXHUyMjE2IiwKCSJCYXJ2OyI6ICJcdTJBRTciLAoJImJhcnZlZTsiOiAiXHUyMkJEIiwKCSJiYXJ3ZWQ7IjogIlx1MjMwNSIsCgkiQmFyd2VkOyI6ICJcdTIzMDYiLAoJImJhcndlZGdlOyI6ICJcdTIzMDUiLAoJImJicms7IjogIlx1MjNCNSIsCgkiYmJya3Ricms7IjogIlx1MjNCNiIsCgkiYmNvbmc7IjogIlx1MjI0QyIsCgkiQmN5OyI6ICJcdTA0MTEiLAoJImJjeTsiOiAiXHUwNDMxIiwKCSJiZHF1bzsiOiAiXHUyMDFFIiwKCSJiZWNhdXM7IjogIlx1MjIzNSIsCgkiYmVjYXVzZTsiOiAiXHUyMjM1IiwKCSJCZWNhdXNlOyI6ICJcdTIyMzUiLAoJImJlbXB0eXY7IjogIlx1MjlCMCIsCgkiYmVwc2k7IjogIlx1MDNGNiIsCgkiYmVybm91OyI6ICJcdTIxMkMiLAoJIkJlcm5vdWxsaXM7IjogIlx1MjEyQyIsCgkiQmV0YTsiOiAiXHUwMzkyIiwKCSJiZXRhOyI6ICJcdTAzQjIiLAoJImJldGg7IjogIlx1MjEzNiIsCgkiYmV0d2VlbjsiOiAiXHUyMjZDIiwKCSJCZnI7IjogIlx1RDgzNVx1REQwNSIsCgkiYmZyOyI6ICJcdUQ4MzVcdUREMUYiLAoJImJpZ2NhcDsiOiAiXHUyMkMyIiwKCSJiaWdjaXJjOyI6ICJcdTI1RUYiLAoJImJpZ2N1cDsiOiAiXHUyMkMzIiwKCSJiaWdvZG90OyI6ICJcdTJBMDAiLAoJImJpZ29wbHVzOyI6ICJcdTJBMDEiLAoJImJpZ290aW1lczsiOiAiXHUyQTAyIiwKCSJiaWdzcWN1cDsiOiAiXHUyQTA2IiwKCSJiaWdzdGFyOyI6ICJcdTI2MDUiLAoJImJpZ3RyaWFuZ2xlZG93bjsiOiAiXHUyNUJEIiwKCSJiaWd0cmlhbmdsZXVwOyI6ICJcdTI1QjMiLAoJImJpZ3VwbHVzOyI6ICJcdTJBMDQiLAoJImJpZ3ZlZTsiOiAiXHUyMkMxIiwKCSJiaWd3ZWRnZTsiOiAiXHUyMkMwIiwKCSJia2Fyb3c7IjogIlx1MjkwRCIsCgkiYmxhY2tsb3plbmdlOyI6ICJcdTI5RUIiLAoJImJsYWNrc3F1YXJlOyI6ICJcdTI1QUEiLAoJImJsYWNrdHJpYW5nbGU7IjogIlx1MjVCNCIsCgkiYmxhY2t0cmlhbmdsZWRvd247IjogIlx1MjVCRSIsCgkiYmxhY2t0cmlhbmdsZWxlZnQ7IjogIlx1MjVDMiIsCgkiYmxhY2t0cmlhbmdsZXJpZ2h0OyI6ICJcdTI1QjgiLAoJImJsYW5rOyI6ICJcdTI0MjMiLAoJImJsazEyOyI6ICJcdTI1OTIiLAoJImJsazE0OyI6ICJcdTI1OTEiLAoJImJsazM0OyI6ICJcdTI1OTMiLAoJImJsb2NrOyI6ICJcdTI1ODgiLAoJImJuZTsiOiAiXHUwMDNEXHUyMEU1IiwKCSJibmVxdWl2OyI6ICJcdTIyNjFcdTIwRTUiLAoJImJOb3Q7IjogIlx1MkFFRCIsCgkiYm5vdDsiOiAiXHUyMzEwIiwKCSJCb3BmOyI6ICJcdUQ4MzVcdUREMzkiLAoJImJvcGY7IjogIlx1RDgzNVx1REQ1MyIsCgkiYm90OyI6ICJcdTIyQTUiLAoJImJvdHRvbTsiOiAiXHUyMkE1IiwKCSJib3d0aWU7IjogIlx1MjJDOCIsCgkiYm94Ym94OyI6ICJcdTI5QzkiLAoJImJveGRsOyI6ICJcdTI1MTAiLAoJImJveGRMOyI6ICJcdTI1NTUiLAoJImJveERsOyI6ICJcdTI1NTYiLAoJImJveERMOyI6ICJcdTI1NTciLAoJImJveGRyOyI6ICJcdTI1MEMiLAoJImJveGRSOyI6ICJcdTI1NTIiLAoJImJveERyOyI6ICJcdTI1NTMiLAoJImJveERSOyI6ICJcdTI1NTQiLAoJImJveGg7IjogIlx1MjUwMCIsCgkiYm94SDsiOiAiXHUyNTUwIiwKCSJib3hoZDsiOiAiXHUyNTJDIiwKCSJib3hIZDsiOiAiXHUyNTY0IiwKCSJib3hoRDsiOiAiXHUyNTY1IiwKCSJib3hIRDsiOiAiXHUyNTY2IiwKCSJib3hodTsiOiAiXHUyNTM0IiwKCSJib3hIdTsiOiAiXHUyNTY3IiwKCSJib3hoVTsiOiAiXHUyNTY4IiwKCSJib3hIVTsiOiAiXHUyNTY5IiwKCSJib3htaW51czsiOiAiXHUyMjlGIiwKCSJib3hwbHVzOyI6ICJcdTIyOUUiLAoJImJveHRpbWVzOyI6ICJcdTIyQTAiLAoJImJveHVsOyI6ICJcdTI1MTgiLAoJImJveHVMOyI6ICJcdTI1NUIiLAoJImJveFVsOyI6ICJcdTI1NUMiLAoJImJveFVMOyI6ICJcdTI1NUQiLAoJImJveHVyOyI6ICJcdTI1MTQiLAoJImJveHVSOyI6ICJcdTI1NTgiLAoJImJveFVyOyI6ICJcdTI1NTkiLAoJImJveFVSOyI6ICJcdTI1NUEiLAoJImJveHY7IjogIlx1MjUwMiIsCgkiYm94VjsiOiAiXHUyNTUxIiwKCSJib3h2aDsiOiAiXHUyNTNDIiwKCSJib3h2SDsiOiAiXHUyNTZBIiwKCSJib3hWaDsiOiAiXHUyNTZCIiwKCSJib3hWSDsiOiAiXHUyNTZDIiwKCSJib3h2bDsiOiAiXHUyNTI0IiwKCSJib3h2TDsiOiAiXHUyNTYxIiwKCSJib3hWbDsiOiAiXHUyNTYyIiwKCSJib3hWTDsiOiAiXHUyNTYzIiwKCSJib3h2cjsiOiAiXHUyNTFDIiwKCSJib3h2UjsiOiAiXHUyNTVFIiwKCSJib3hWcjsiOiAiXHUyNTVGIiwKCSJib3hWUjsiOiAiXHUyNTYwIiwKCSJicHJpbWU7IjogIlx1MjAzNSIsCgkiYnJldmU7IjogIlx1MDJEOCIsCgkiQnJldmU7IjogIlx1MDJEOCIsCgkiYnJ2YmFyOyI6ICJcdTAwQTYiLAoJImJydmJhciI6ICJcdTAwQTYiLAoJImJzY3I7IjogIlx1RDgzNVx1RENCNyIsCgkiQnNjcjsiOiAiXHUyMTJDIiwKCSJic2VtaTsiOiAiXHUyMDRGIiwKCSJic2ltOyI6ICJcdTIyM0QiLAoJImJzaW1lOyI6ICJcdTIyQ0QiLAoJImJzb2xiOyI6ICJcdTI5QzUiLAoJImJzb2w7IjogIlx1MDA1QyIsCgkiYnNvbGhzdWI7IjogIlx1MjdDOCIsCgkiYnVsbDsiOiAiXHUyMDIyIiwKCSJidWxsZXQ7IjogIlx1MjAyMiIsCgkiYnVtcDsiOiAiXHUyMjRFIiwKCSJidW1wRTsiOiAiXHUyQUFFIiwKCSJidW1wZTsiOiAiXHUyMjRGIiwKCSJCdW1wZXE7IjogIlx1MjI0RSIsCgkiYnVtcGVxOyI6ICJcdTIyNEYiLAoJIkNhY3V0ZTsiOiAiXHUwMTA2IiwKCSJjYWN1dGU7IjogIlx1MDEwNyIsCgkiY2FwYW5kOyI6ICJcdTJBNDQiLAoJImNhcGJyY3VwOyI6ICJcdTJBNDkiLAoJImNhcGNhcDsiOiAiXHUyQTRCIiwKCSJjYXA7IjogIlx1MjIyOSIsCgkiQ2FwOyI6ICJcdTIyRDIiLAoJImNhcGN1cDsiOiAiXHUyQTQ3IiwKCSJjYXBkb3Q7IjogIlx1MkE0MCIsCgkiQ2FwaXRhbERpZmZlcmVudGlhbEQ7IjogIlx1MjE0NSIsCgkiY2FwczsiOiAiXHUyMjI5XHVGRTAwIiwKCSJjYXJldDsiOiAiXHUyMDQxIiwKCSJjYXJvbjsiOiAiXHUwMkM3IiwKCSJDYXlsZXlzOyI6ICJcdTIxMkQiLAoJImNjYXBzOyI6ICJcdTJBNEQiLAoJIkNjYXJvbjsiOiAiXHUwMTBDIiwKCSJjY2Fyb247IjogIlx1MDEwRCIsCgkiQ2NlZGlsOyI6ICJcdTAwQzciLAoJIkNjZWRpbCI6ICJcdTAwQzciLAoJImNjZWRpbDsiOiAiXHUwMEU3IiwKCSJjY2VkaWwiOiAiXHUwMEU3IiwKCSJDY2lyYzsiOiAiXHUwMTA4IiwKCSJjY2lyYzsiOiAiXHUwMTA5IiwKCSJDY29uaW50OyI6ICJcdTIyMzAiLAoJImNjdXBzOyI6ICJcdTJBNEMiLAoJImNjdXBzc207IjogIlx1MkE1MCIsCgkiQ2RvdDsiOiAiXHUwMTBBIiwKCSJjZG90OyI6ICJcdTAxMEIiLAoJImNlZGlsOyI6ICJcdTAwQjgiLAoJImNlZGlsIjogIlx1MDBCOCIsCgkiQ2VkaWxsYTsiOiAiXHUwMEI4IiwKCSJjZW1wdHl2OyI6ICJcdTI5QjIiLAoJImNlbnQ7IjogIlx1MDBBMiIsCgkiY2VudCI6ICJcdTAwQTIiLAoJImNlbnRlcmRvdDsiOiAiXHUwMEI3IiwKCSJDZW50ZXJEb3Q7IjogIlx1MDBCNyIsCgkiY2ZyOyI6ICJcdUQ4MzVcdUREMjAiLAoJIkNmcjsiOiAiXHUyMTJEIiwKCSJDSGN5OyI6ICJcdTA0MjciLAoJImNoY3k7IjogIlx1MDQ0NyIsCgkiY2hlY2s7IjogIlx1MjcxMyIsCgkiY2hlY2ttYXJrOyI6ICJcdTI3MTMiLAoJIkNoaTsiOiAiXHUwM0E3IiwKCSJjaGk7IjogIlx1MDNDNyIsCgkiY2lyYzsiOiAiXHUwMkM2IiwKCSJjaXJjZXE7IjogIlx1MjI1NyIsCgkiY2lyY2xlYXJyb3dsZWZ0OyI6ICJcdTIxQkEiLAoJImNpcmNsZWFycm93cmlnaHQ7IjogIlx1MjFCQiIsCgkiY2lyY2xlZGFzdDsiOiAiXHUyMjlCIiwKCSJjaXJjbGVkY2lyYzsiOiAiXHUyMjlBIiwKCSJjaXJjbGVkZGFzaDsiOiAiXHUyMjlEIiwKCSJDaXJjbGVEb3Q7IjogIlx1MjI5OSIsCgkiY2lyY2xlZFI7IjogIlx1MDBBRSIsCgkiY2lyY2xlZFM7IjogIlx1MjRDOCIsCgkiQ2lyY2xlTWludXM7IjogIlx1MjI5NiIsCgkiQ2lyY2xlUGx1czsiOiAiXHUyMjk1IiwKCSJDaXJjbGVUaW1lczsiOiAiXHUyMjk3IiwKCSJjaXI7IjogIlx1MjVDQiIsCgkiY2lyRTsiOiAiXHUyOUMzIiwKCSJjaXJlOyI6ICJcdTIyNTciLAoJImNpcmZuaW50OyI6ICJcdTJBMTAiLAoJImNpcm1pZDsiOiAiXHUyQUVGIiwKCSJjaXJzY2lyOyI6ICJcdTI5QzIiLAoJIkNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsiOiAiXHUyMjMyIiwKCSJDbG9zZUN1cmx5RG91YmxlUXVvdGU7IjogIlx1MjAxRCIsCgkiQ2xvc2VDdXJseVF1b3RlOyI6ICJcdTIwMTkiLAoJImNsdWJzOyI6ICJcdTI2NjMiLAoJImNsdWJzdWl0OyI6ICJcdTI2NjMiLAoJImNvbG9uOyI6ICJcdTAwM0EiLAoJIkNvbG9uOyI6ICJcdTIyMzciLAoJIkNvbG9uZTsiOiAiXHUyQTc0IiwKCSJjb2xvbmU7IjogIlx1MjI1NCIsCgkiY29sb25lcTsiOiAiXHUyMjU0IiwKCSJjb21tYTsiOiAiXHUwMDJDIiwKCSJjb21tYXQ7IjogIlx1MDA0MCIsCgkiY29tcDsiOiAiXHUyMjAxIiwKCSJjb21wZm47IjogIlx1MjIxOCIsCgkiY29tcGxlbWVudDsiOiAiXHUyMjAxIiwKCSJjb21wbGV4ZXM7IjogIlx1MjEwMiIsCgkiY29uZzsiOiAiXHUyMjQ1IiwKCSJjb25nZG90OyI6ICJcdTJBNkQiLAoJIkNvbmdydWVudDsiOiAiXHUyMjYxIiwKCSJjb25pbnQ7IjogIlx1MjIyRSIsCgkiQ29uaW50OyI6ICJcdTIyMkYiLAoJIkNvbnRvdXJJbnRlZ3JhbDsiOiAiXHUyMjJFIiwKCSJjb3BmOyI6ICJcdUQ4MzVcdURENTQiLAoJIkNvcGY7IjogIlx1MjEwMiIsCgkiY29wcm9kOyI6ICJcdTIyMTAiLAoJIkNvcHJvZHVjdDsiOiAiXHUyMjEwIiwKCSJjb3B5OyI6ICJcdTAwQTkiLAoJImNvcHkiOiAiXHUwMEE5IiwKCSJDT1BZOyI6ICJcdTAwQTkiLAoJIkNPUFkiOiAiXHUwMEE5IiwKCSJjb3B5c3I7IjogIlx1MjExNyIsCgkiQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsiOiAiXHUyMjMzIiwKCSJjcmFycjsiOiAiXHUyMUI1IiwKCSJjcm9zczsiOiAiXHUyNzE3IiwKCSJDcm9zczsiOiAiXHUyQTJGIiwKCSJDc2NyOyI6ICJcdUQ4MzVcdURDOUUiLAoJImNzY3I7IjogIlx1RDgzNVx1RENCOCIsCgkiY3N1YjsiOiAiXHUyQUNGIiwKCSJjc3ViZTsiOiAiXHUyQUQxIiwKCSJjc3VwOyI6ICJcdTJBRDAiLAoJImNzdXBlOyI6ICJcdTJBRDIiLAoJImN0ZG90OyI6ICJcdTIyRUYiLAoJImN1ZGFycmw7IjogIlx1MjkzOCIsCgkiY3VkYXJycjsiOiAiXHUyOTM1IiwKCSJjdWVwcjsiOiAiXHUyMkRFIiwKCSJjdWVzYzsiOiAiXHUyMkRGIiwKCSJjdWxhcnI7IjogIlx1MjFCNiIsCgkiY3VsYXJycDsiOiAiXHUyOTNEIiwKCSJjdXBicmNhcDsiOiAiXHUyQTQ4IiwKCSJjdXBjYXA7IjogIlx1MkE0NiIsCgkiQ3VwQ2FwOyI6ICJcdTIyNEQiLAoJImN1cDsiOiAiXHUyMjJBIiwKCSJDdXA7IjogIlx1MjJEMyIsCgkiY3VwY3VwOyI6ICJcdTJBNEEiLAoJImN1cGRvdDsiOiAiXHUyMjhEIiwKCSJjdXBvcjsiOiAiXHUyQTQ1IiwKCSJjdXBzOyI6ICJcdTIyMkFcdUZFMDAiLAoJImN1cmFycjsiOiAiXHUyMUI3IiwKCSJjdXJhcnJtOyI6ICJcdTI5M0MiLAoJImN1cmx5ZXFwcmVjOyI6ICJcdTIyREUiLAoJImN1cmx5ZXFzdWNjOyI6ICJcdTIyREYiLAoJImN1cmx5dmVlOyI6ICJcdTIyQ0UiLAoJImN1cmx5d2VkZ2U7IjogIlx1MjJDRiIsCgkiY3VycmVuOyI6ICJcdTAwQTQiLAoJImN1cnJlbiI6ICJcdTAwQTQiLAoJImN1cnZlYXJyb3dsZWZ0OyI6ICJcdTIxQjYiLAoJImN1cnZlYXJyb3dyaWdodDsiOiAiXHUyMUI3IiwKCSJjdXZlZTsiOiAiXHUyMkNFIiwKCSJjdXdlZDsiOiAiXHUyMkNGIiwKCSJjd2NvbmludDsiOiAiXHUyMjMyIiwKCSJjd2ludDsiOiAiXHUyMjMxIiwKCSJjeWxjdHk7IjogIlx1MjMyRCIsCgkiZGFnZ2VyOyI6ICJcdTIwMjAiLAoJIkRhZ2dlcjsiOiAiXHUyMDIxIiwKCSJkYWxldGg7IjogIlx1MjEzOCIsCgkiZGFycjsiOiAiXHUyMTkzIiwKCSJEYXJyOyI6ICJcdTIxQTEiLAoJImRBcnI7IjogIlx1MjFEMyIsCgkiZGFzaDsiOiAiXHUyMDEwIiwKCSJEYXNodjsiOiAiXHUyQUU0IiwKCSJkYXNodjsiOiAiXHUyMkEzIiwKCSJkYmthcm93OyI6ICJcdTI5MEYiLAoJImRibGFjOyI6ICJcdTAyREQiLAoJIkRjYXJvbjsiOiAiXHUwMTBFIiwKCSJkY2Fyb247IjogIlx1MDEwRiIsCgkiRGN5OyI6ICJcdTA0MTQiLAoJImRjeTsiOiAiXHUwNDM0IiwKCSJkZGFnZ2VyOyI6ICJcdTIwMjEiLAoJImRkYXJyOyI6ICJcdTIxQ0EiLAoJIkREOyI6ICJcdTIxNDUiLAoJImRkOyI6ICJcdTIxNDYiLAoJIkREb3RyYWhkOyI6ICJcdTI5MTEiLAoJImRkb3RzZXE7IjogIlx1MkE3NyIsCgkiZGVnOyI6ICJcdTAwQjAiLAoJImRlZyI6ICJcdTAwQjAiLAoJIkRlbDsiOiAiXHUyMjA3IiwKCSJEZWx0YTsiOiAiXHUwMzk0IiwKCSJkZWx0YTsiOiAiXHUwM0I0IiwKCSJkZW1wdHl2OyI6ICJcdTI5QjEiLAoJImRmaXNodDsiOiAiXHUyOTdGIiwKCSJEZnI7IjogIlx1RDgzNVx1REQwNyIsCgkiZGZyOyI6ICJcdUQ4MzVcdUREMjEiLAoJImRIYXI7IjogIlx1Mjk2NSIsCgkiZGhhcmw7IjogIlx1MjFDMyIsCgkiZGhhcnI7IjogIlx1MjFDMiIsCgkiRGlhY3JpdGljYWxBY3V0ZTsiOiAiXHUwMEI0IiwKCSJEaWFjcml0aWNhbERvdDsiOiAiXHUwMkQ5IiwKCSJEaWFjcml0aWNhbERvdWJsZUFjdXRlOyI6ICJcdTAyREQiLAoJIkRpYWNyaXRpY2FsR3JhdmU7IjogIlx1MDA2MCIsCgkiRGlhY3JpdGljYWxUaWxkZTsiOiAiXHUwMkRDIiwKCSJkaWFtOyI6ICJcdTIyQzQiLAoJImRpYW1vbmQ7IjogIlx1MjJDNCIsCgkiRGlhbW9uZDsiOiAiXHUyMkM0IiwKCSJkaWFtb25kc3VpdDsiOiAiXHUyNjY2IiwKCSJkaWFtczsiOiAiXHUyNjY2IiwKCSJkaWU7IjogIlx1MDBBOCIsCgkiRGlmZmVyZW50aWFsRDsiOiAiXHUyMTQ2IiwKCSJkaWdhbW1hOyI6ICJcdTAzREQiLAoJImRpc2luOyI6ICJcdTIyRjIiLAoJImRpdjsiOiAiXHUwMEY3IiwKCSJkaXZpZGU7IjogIlx1MDBGNyIsCgkiZGl2aWRlIjogIlx1MDBGNyIsCgkiZGl2aWRlb250aW1lczsiOiAiXHUyMkM3IiwKCSJkaXZvbng7IjogIlx1MjJDNyIsCgkiREpjeTsiOiAiXHUwNDAyIiwKCSJkamN5OyI6ICJcdTA0NTIiLAoJImRsY29ybjsiOiAiXHUyMzFFIiwKCSJkbGNyb3A7IjogIlx1MjMwRCIsCgkiZG9sbGFyOyI6ICJcdTAwMjQiLAoJIkRvcGY7IjogIlx1RDgzNVx1REQzQiIsCgkiZG9wZjsiOiAiXHVEODM1XHVERDU1IiwKCSJEb3Q7IjogIlx1MDBBOCIsCgkiZG90OyI6ICJcdTAyRDkiLAoJIkRvdERvdDsiOiAiXHUyMERDIiwKCSJkb3RlcTsiOiAiXHUyMjUwIiwKCSJkb3RlcWRvdDsiOiAiXHUyMjUxIiwKCSJEb3RFcXVhbDsiOiAiXHUyMjUwIiwKCSJkb3RtaW51czsiOiAiXHUyMjM4IiwKCSJkb3RwbHVzOyI6ICJcdTIyMTQiLAoJImRvdHNxdWFyZTsiOiAiXHUyMkExIiwKCSJkb3VibGViYXJ3ZWRnZTsiOiAiXHUyMzA2IiwKCSJEb3VibGVDb250b3VySW50ZWdyYWw7IjogIlx1MjIyRiIsCgkiRG91YmxlRG90OyI6ICJcdTAwQTgiLAoJIkRvdWJsZURvd25BcnJvdzsiOiAiXHUyMUQzIiwKCSJEb3VibGVMZWZ0QXJyb3c7IjogIlx1MjFEMCIsCgkiRG91YmxlTGVmdFJpZ2h0QXJyb3c7IjogIlx1MjFENCIsCgkiRG91YmxlTGVmdFRlZTsiOiAiXHUyQUU0IiwKCSJEb3VibGVMb25nTGVmdEFycm93OyI6ICJcdTI3RjgiLAoJIkRvdWJsZUxvbmdMZWZ0UmlnaHRBcnJvdzsiOiAiXHUyN0ZBIiwKCSJEb3VibGVMb25nUmlnaHRBcnJvdzsiOiAiXHUyN0Y5IiwKCSJEb3VibGVSaWdodEFycm93OyI6ICJcdTIxRDIiLAoJIkRvdWJsZVJpZ2h0VGVlOyI6ICJcdTIyQTgiLAoJIkRvdWJsZVVwQXJyb3c7IjogIlx1MjFEMSIsCgkiRG91YmxlVXBEb3duQXJyb3c7IjogIlx1MjFENSIsCgkiRG91YmxlVmVydGljYWxCYXI7IjogIlx1MjIyNSIsCgkiRG93bkFycm93QmFyOyI6ICJcdTI5MTMiLAoJImRvd25hcnJvdzsiOiAiXHUyMTkzIiwKCSJEb3duQXJyb3c7IjogIlx1MjE5MyIsCgkiRG93bmFycm93OyI6ICJcdTIxRDMiLAoJIkRvd25BcnJvd1VwQXJyb3c7IjogIlx1MjFGNSIsCgkiRG93bkJyZXZlOyI6ICJcdTAzMTEiLAoJImRvd25kb3duYXJyb3dzOyI6ICJcdTIxQ0EiLAoJImRvd25oYXJwb29ubGVmdDsiOiAiXHUyMUMzIiwKCSJkb3duaGFycG9vbnJpZ2h0OyI6ICJcdTIxQzIiLAoJIkRvd25MZWZ0UmlnaHRWZWN0b3I7IjogIlx1Mjk1MCIsCgkiRG93bkxlZnRUZWVWZWN0b3I7IjogIlx1Mjk1RSIsCgkiRG93bkxlZnRWZWN0b3JCYXI7IjogIlx1Mjk1NiIsCgkiRG93bkxlZnRWZWN0b3I7IjogIlx1MjFCRCIsCgkiRG93blJpZ2h0VGVlVmVjdG9yOyI6ICJcdTI5NUYiLAoJIkRvd25SaWdodFZlY3RvckJhcjsiOiAiXHUyOTU3IiwKCSJEb3duUmlnaHRWZWN0b3I7IjogIlx1MjFDMSIsCgkiRG93blRlZUFycm93OyI6ICJcdTIxQTciLAoJIkRvd25UZWU7IjogIlx1MjJBNCIsCgkiZHJia2Fyb3c7IjogIlx1MjkxMCIsCgkiZHJjb3JuOyI6ICJcdTIzMUYiLAoJImRyY3JvcDsiOiAiXHUyMzBDIiwKCSJEc2NyOyI6ICJcdUQ4MzVcdURDOUYiLAoJImRzY3I7IjogIlx1RDgzNVx1RENCOSIsCgkiRFNjeTsiOiAiXHUwNDA1IiwKCSJkc2N5OyI6ICJcdTA0NTUiLAoJImRzb2w7IjogIlx1MjlGNiIsCgkiRHN0cm9rOyI6ICJcdTAxMTAiLAoJImRzdHJvazsiOiAiXHUwMTExIiwKCSJkdGRvdDsiOiAiXHUyMkYxIiwKCSJkdHJpOyI6ICJcdTI1QkYiLAoJImR0cmlmOyI6ICJcdTI1QkUiLAoJImR1YXJyOyI6ICJcdTIxRjUiLAoJImR1aGFyOyI6ICJcdTI5NkYiLAoJImR3YW5nbGU7IjogIlx1MjlBNiIsCgkiRFpjeTsiOiAiXHUwNDBGIiwKCSJkemN5OyI6ICJcdTA0NUYiLAoJImR6aWdyYXJyOyI6ICJcdTI3RkYiLAoJIkVhY3V0ZTsiOiAiXHUwMEM5IiwKCSJFYWN1dGUiOiAiXHUwMEM5IiwKCSJlYWN1dGU7IjogIlx1MDBFOSIsCgkiZWFjdXRlIjogIlx1MDBFOSIsCgkiZWFzdGVyOyI6ICJcdTJBNkUiLAoJIkVjYXJvbjsiOiAiXHUwMTFBIiwKCSJlY2Fyb247IjogIlx1MDExQiIsCgkiRWNpcmM7IjogIlx1MDBDQSIsCgkiRWNpcmMiOiAiXHUwMENBIiwKCSJlY2lyYzsiOiAiXHUwMEVBIiwKCSJlY2lyYyI6ICJcdTAwRUEiLAoJImVjaXI7IjogIlx1MjI1NiIsCgkiZWNvbG9uOyI6ICJcdTIyNTUiLAoJIkVjeTsiOiAiXHUwNDJEIiwKCSJlY3k7IjogIlx1MDQ0RCIsCgkiZUREb3Q7IjogIlx1MkE3NyIsCgkiRWRvdDsiOiAiXHUwMTE2IiwKCSJlZG90OyI6ICJcdTAxMTciLAoJImVEb3Q7IjogIlx1MjI1MSIsCgkiZWU7IjogIlx1MjE0NyIsCgkiZWZEb3Q7IjogIlx1MjI1MiIsCgkiRWZyOyI6ICJcdUQ4MzVcdUREMDgiLAoJImVmcjsiOiAiXHVEODM1XHVERDIyIiwKCSJlZzsiOiAiXHUyQTlBIiwKCSJFZ3JhdmU7IjogIlx1MDBDOCIsCgkiRWdyYXZlIjogIlx1MDBDOCIsCgkiZWdyYXZlOyI6ICJcdTAwRTgiLAoJImVncmF2ZSI6ICJcdTAwRTgiLAoJImVnczsiOiAiXHUyQTk2IiwKCSJlZ3Nkb3Q7IjogIlx1MkE5OCIsCgkiZWw7IjogIlx1MkE5OSIsCgkiRWxlbWVudDsiOiAiXHUyMjA4IiwKCSJlbGludGVyczsiOiAiXHUyM0U3IiwKCSJlbGw7IjogIlx1MjExMyIsCgkiZWxzOyI6ICJcdTJBOTUiLAoJImVsc2RvdDsiOiAiXHUyQTk3IiwKCSJFbWFjcjsiOiAiXHUwMTEyIiwKCSJlbWFjcjsiOiAiXHUwMTEzIiwKCSJlbXB0eTsiOiAiXHUyMjA1IiwKCSJlbXB0eXNldDsiOiAiXHUyMjA1IiwKCSJFbXB0eVNtYWxsU3F1YXJlOyI6ICJcdTI1RkIiLAoJImVtcHR5djsiOiAiXHUyMjA1IiwKCSJFbXB0eVZlcnlTbWFsbFNxdWFyZTsiOiAiXHUyNUFCIiwKCSJlbXNwMTM7IjogIlx1MjAwNCIsCgkiZW1zcDE0OyI6ICJcdTIwMDUiLAoJImVtc3A7IjogIlx1MjAwMyIsCgkiRU5HOyI6ICJcdTAxNEEiLAoJImVuZzsiOiAiXHUwMTRCIiwKCSJlbnNwOyI6ICJcdTIwMDIiLAoJIkVvZ29uOyI6ICJcdTAxMTgiLAoJImVvZ29uOyI6ICJcdTAxMTkiLAoJIkVvcGY7IjogIlx1RDgzNVx1REQzQyIsCgkiZW9wZjsiOiAiXHVEODM1XHVERDU2IiwKCSJlcGFyOyI6ICJcdTIyRDUiLAoJImVwYXJzbDsiOiAiXHUyOUUzIiwKCSJlcGx1czsiOiAiXHUyQTcxIiwKCSJlcHNpOyI6ICJcdTAzQjUiLAoJIkVwc2lsb247IjogIlx1MDM5NSIsCgkiZXBzaWxvbjsiOiAiXHUwM0I1IiwKCSJlcHNpdjsiOiAiXHUwM0Y1IiwKCSJlcWNpcmM7IjogIlx1MjI1NiIsCgkiZXFjb2xvbjsiOiAiXHUyMjU1IiwKCSJlcXNpbTsiOiAiXHUyMjQyIiwKCSJlcXNsYW50Z3RyOyI6ICJcdTJBOTYiLAoJImVxc2xhbnRsZXNzOyI6ICJcdTJBOTUiLAoJIkVxdWFsOyI6ICJcdTJBNzUiLAoJImVxdWFsczsiOiAiXHUwMDNEIiwKCSJFcXVhbFRpbGRlOyI6ICJcdTIyNDIiLAoJImVxdWVzdDsiOiAiXHUyMjVGIiwKCSJFcXVpbGlicml1bTsiOiAiXHUyMUNDIiwKCSJlcXVpdjsiOiAiXHUyMjYxIiwKCSJlcXVpdkREOyI6ICJcdTJBNzgiLAoJImVxdnBhcnNsOyI6ICJcdTI5RTUiLAoJImVyYXJyOyI6ICJcdTI5NzEiLAoJImVyRG90OyI6ICJcdTIyNTMiLAoJImVzY3I7IjogIlx1MjEyRiIsCgkiRXNjcjsiOiAiXHUyMTMwIiwKCSJlc2RvdDsiOiAiXHUyMjUwIiwKCSJFc2ltOyI6ICJcdTJBNzMiLAoJImVzaW07IjogIlx1MjI0MiIsCgkiRXRhOyI6ICJcdTAzOTciLAoJImV0YTsiOiAiXHUwM0I3IiwKCSJFVEg7IjogIlx1MDBEMCIsCgkiRVRIIjogIlx1MDBEMCIsCgkiZXRoOyI6ICJcdTAwRjAiLAoJImV0aCI6ICJcdTAwRjAiLAoJIkV1bWw7IjogIlx1MDBDQiIsCgkiRXVtbCI6ICJcdTAwQ0IiLAoJImV1bWw7IjogIlx1MDBFQiIsCgkiZXVtbCI6ICJcdTAwRUIiLAoJImV1cm87IjogIlx1MjBBQyIsCgkiZXhjbDsiOiAiXHUwMDIxIiwKCSJleGlzdDsiOiAiXHUyMjAzIiwKCSJFeGlzdHM7IjogIlx1MjIwMyIsCgkiZXhwZWN0YXRpb247IjogIlx1MjEzMCIsCgkiZXhwb25lbnRpYWxlOyI6ICJcdTIxNDciLAoJIkV4cG9uZW50aWFsRTsiOiAiXHUyMTQ3IiwKCSJmYWxsaW5nZG90c2VxOyI6ICJcdTIyNTIiLAoJIkZjeTsiOiAiXHUwNDI0IiwKCSJmY3k7IjogIlx1MDQ0NCIsCgkiZmVtYWxlOyI6ICJcdTI2NDAiLAoJImZmaWxpZzsiOiAiXHVGQjAzIiwKCSJmZmxpZzsiOiAiXHVGQjAwIiwKCSJmZmxsaWc7IjogIlx1RkIwNCIsCgkiRmZyOyI6ICJcdUQ4MzVcdUREMDkiLAoJImZmcjsiOiAiXHVEODM1XHVERDIzIiwKCSJmaWxpZzsiOiAiXHVGQjAxIiwKCSJGaWxsZWRTbWFsbFNxdWFyZTsiOiAiXHUyNUZDIiwKCSJGaWxsZWRWZXJ5U21hbGxTcXVhcmU7IjogIlx1MjVBQSIsCgkiZmpsaWc7IjogIlx1MDA2Nlx1MDA2QSIsCgkiZmxhdDsiOiAiXHUyNjZEIiwKCSJmbGxpZzsiOiAiXHVGQjAyIiwKCSJmbHRuczsiOiAiXHUyNUIxIiwKCSJmbm9mOyI6ICJcdTAxOTIiLAoJIkZvcGY7IjogIlx1RDgzNVx1REQzRCIsCgkiZm9wZjsiOiAiXHVEODM1XHVERDU3IiwKCSJmb3JhbGw7IjogIlx1MjIwMCIsCgkiRm9yQWxsOyI6ICJcdTIyMDAiLAoJImZvcms7IjogIlx1MjJENCIsCgkiZm9ya3Y7IjogIlx1MkFEOSIsCgkiRm91cmllcnRyZjsiOiAiXHUyMTMxIiwKCSJmcGFydGludDsiOiAiXHUyQTBEIiwKCSJmcmFjMTI7IjogIlx1MDBCRCIsCgkiZnJhYzEyIjogIlx1MDBCRCIsCgkiZnJhYzEzOyI6ICJcdTIxNTMiLAoJImZyYWMxNDsiOiAiXHUwMEJDIiwKCSJmcmFjMTQiOiAiXHUwMEJDIiwKCSJmcmFjMTU7IjogIlx1MjE1NSIsCgkiZnJhYzE2OyI6ICJcdTIxNTkiLAoJImZyYWMxODsiOiAiXHUyMTVCIiwKCSJmcmFjMjM7IjogIlx1MjE1NCIsCgkiZnJhYzI1OyI6ICJcdTIxNTYiLAoJImZyYWMzNDsiOiAiXHUwMEJFIiwKCSJmcmFjMzQiOiAiXHUwMEJFIiwKCSJmcmFjMzU7IjogIlx1MjE1NyIsCgkiZnJhYzM4OyI6ICJcdTIxNUMiLAoJImZyYWM0NTsiOiAiXHUyMTU4IiwKCSJmcmFjNTY7IjogIlx1MjE1QSIsCgkiZnJhYzU4OyI6ICJcdTIxNUQiLAoJImZyYWM3ODsiOiAiXHUyMTVFIiwKCSJmcmFzbDsiOiAiXHUyMDQ0IiwKCSJmcm93bjsiOiAiXHUyMzIyIiwKCSJmc2NyOyI6ICJcdUQ4MzVcdURDQkIiLAoJIkZzY3I7IjogIlx1MjEzMSIsCgkiZ2FjdXRlOyI6ICJcdTAxRjUiLAoJIkdhbW1hOyI6ICJcdTAzOTMiLAoJImdhbW1hOyI6ICJcdTAzQjMiLAoJIkdhbW1hZDsiOiAiXHUwM0RDIiwKCSJnYW1tYWQ7IjogIlx1MDNERCIsCgkiZ2FwOyI6ICJcdTJBODYiLAoJIkdicmV2ZTsiOiAiXHUwMTFFIiwKCSJnYnJldmU7IjogIlx1MDExRiIsCgkiR2NlZGlsOyI6ICJcdTAxMjIiLAoJIkdjaXJjOyI6ICJcdTAxMUMiLAoJImdjaXJjOyI6ICJcdTAxMUQiLAoJIkdjeTsiOiAiXHUwNDEzIiwKCSJnY3k7IjogIlx1MDQzMyIsCgkiR2RvdDsiOiAiXHUwMTIwIiwKCSJnZG90OyI6ICJcdTAxMjEiLAoJImdlOyI6ICJcdTIyNjUiLAoJImdFOyI6ICJcdTIyNjciLAoJImdFbDsiOiAiXHUyQThDIiwKCSJnZWw7IjogIlx1MjJEQiIsCgkiZ2VxOyI6ICJcdTIyNjUiLAoJImdlcXE7IjogIlx1MjI2NyIsCgkiZ2Vxc2xhbnQ7IjogIlx1MkE3RSIsCgkiZ2VzY2M7IjogIlx1MkFBOSIsCgkiZ2VzOyI6ICJcdTJBN0UiLAoJImdlc2RvdDsiOiAiXHUyQTgwIiwKCSJnZXNkb3RvOyI6ICJcdTJBODIiLAoJImdlc2RvdG9sOyI6ICJcdTJBODQiLAoJImdlc2w7IjogIlx1MjJEQlx1RkUwMCIsCgkiZ2VzbGVzOyI6ICJcdTJBOTQiLAoJIkdmcjsiOiAiXHVEODM1XHVERDBBIiwKCSJnZnI7IjogIlx1RDgzNVx1REQyNCIsCgkiZ2c7IjogIlx1MjI2QiIsCgkiR2c7IjogIlx1MjJEOSIsCgkiZ2dnOyI6ICJcdTIyRDkiLAoJImdpbWVsOyI6ICJcdTIxMzciLAoJIkdKY3k7IjogIlx1MDQwMyIsCgkiZ2pjeTsiOiAiXHUwNDUzIiwKCSJnbGE7IjogIlx1MkFBNSIsCgkiZ2w7IjogIlx1MjI3NyIsCgkiZ2xFOyI6ICJcdTJBOTIiLAoJImdsajsiOiAiXHUyQUE0IiwKCSJnbmFwOyI6ICJcdTJBOEEiLAoJImduYXBwcm94OyI6ICJcdTJBOEEiLAoJImduZTsiOiAiXHUyQTg4IiwKCSJnbkU7IjogIlx1MjI2OSIsCgkiZ25lcTsiOiAiXHUyQTg4IiwKCSJnbmVxcTsiOiAiXHUyMjY5IiwKCSJnbnNpbTsiOiAiXHUyMkU3IiwKCSJHb3BmOyI6ICJcdUQ4MzVcdUREM0UiLAoJImdvcGY7IjogIlx1RDgzNVx1REQ1OCIsCgkiZ3JhdmU7IjogIlx1MDA2MCIsCgkiR3JlYXRlckVxdWFsOyI6ICJcdTIyNjUiLAoJIkdyZWF0ZXJFcXVhbExlc3M7IjogIlx1MjJEQiIsCgkiR3JlYXRlckZ1bGxFcXVhbDsiOiAiXHUyMjY3IiwKCSJHcmVhdGVyR3JlYXRlcjsiOiAiXHUyQUEyIiwKCSJHcmVhdGVyTGVzczsiOiAiXHUyMjc3IiwKCSJHcmVhdGVyU2xhbnRFcXVhbDsiOiAiXHUyQTdFIiwKCSJHcmVhdGVyVGlsZGU7IjogIlx1MjI3MyIsCgkiR3NjcjsiOiAiXHVEODM1XHVEQ0EyIiwKCSJnc2NyOyI6ICJcdTIxMEEiLAoJImdzaW07IjogIlx1MjI3MyIsCgkiZ3NpbWU7IjogIlx1MkE4RSIsCgkiZ3NpbWw7IjogIlx1MkE5MCIsCgkiZ3RjYzsiOiAiXHUyQUE3IiwKCSJndGNpcjsiOiAiXHUyQTdBIiwKCSJndDsiOiAiXHUwMDNFIiwKCSJndCI6ICJcdTAwM0UiLAoJIkdUOyI6ICJcdTAwM0UiLAoJIkdUIjogIlx1MDAzRSIsCgkiR3Q7IjogIlx1MjI2QiIsCgkiZ3Rkb3Q7IjogIlx1MjJENyIsCgkiZ3RsUGFyOyI6ICJcdTI5OTUiLAoJImd0cXVlc3Q7IjogIlx1MkE3QyIsCgkiZ3RyYXBwcm94OyI6ICJcdTJBODYiLAoJImd0cmFycjsiOiAiXHUyOTc4IiwKCSJndHJkb3Q7IjogIlx1MjJENyIsCgkiZ3RyZXFsZXNzOyI6ICJcdTIyREIiLAoJImd0cmVxcWxlc3M7IjogIlx1MkE4QyIsCgkiZ3RybGVzczsiOiAiXHUyMjc3IiwKCSJndHJzaW07IjogIlx1MjI3MyIsCgkiZ3ZlcnRuZXFxOyI6ICJcdTIyNjlcdUZFMDAiLAoJImd2bkU7IjogIlx1MjI2OVx1RkUwMCIsCgkiSGFjZWs7IjogIlx1MDJDNyIsCgkiaGFpcnNwOyI6ICJcdTIwMEEiLAoJImhhbGY7IjogIlx1MDBCRCIsCgkiaGFtaWx0OyI6ICJcdTIxMEIiLAoJIkhBUkRjeTsiOiAiXHUwNDJBIiwKCSJoYXJkY3k7IjogIlx1MDQ0QSIsCgkiaGFycmNpcjsiOiAiXHUyOTQ4IiwKCSJoYXJyOyI6ICJcdTIxOTQiLAoJImhBcnI7IjogIlx1MjFENCIsCgkiaGFycnc7IjogIlx1MjFBRCIsCgkiSGF0OyI6ICJcdTAwNUUiLAoJImhiYXI7IjogIlx1MjEwRiIsCgkiSGNpcmM7IjogIlx1MDEyNCIsCgkiaGNpcmM7IjogIlx1MDEyNSIsCgkiaGVhcnRzOyI6ICJcdTI2NjUiLAoJImhlYXJ0c3VpdDsiOiAiXHUyNjY1IiwKCSJoZWxsaXA7IjogIlx1MjAyNiIsCgkiaGVyY29uOyI6ICJcdTIyQjkiLAoJImhmcjsiOiAiXHVEODM1XHVERDI1IiwKCSJIZnI7IjogIlx1MjEwQyIsCgkiSGlsYmVydFNwYWNlOyI6ICJcdTIxMEIiLAoJImhrc2Vhcm93OyI6ICJcdTI5MjUiLAoJImhrc3dhcm93OyI6ICJcdTI5MjYiLAoJImhvYXJyOyI6ICJcdTIxRkYiLAoJImhvbXRodDsiOiAiXHUyMjNCIiwKCSJob29rbGVmdGFycm93OyI6ICJcdTIxQTkiLAoJImhvb2tyaWdodGFycm93OyI6ICJcdTIxQUEiLAoJImhvcGY7IjogIlx1RDgzNVx1REQ1OSIsCgkiSG9wZjsiOiAiXHUyMTBEIiwKCSJob3JiYXI7IjogIlx1MjAxNSIsCgkiSG9yaXpvbnRhbExpbmU7IjogIlx1MjUwMCIsCgkiaHNjcjsiOiAiXHVEODM1XHVEQ0JEIiwKCSJIc2NyOyI6ICJcdTIxMEIiLAoJImhzbGFzaDsiOiAiXHUyMTBGIiwKCSJIc3Ryb2s7IjogIlx1MDEyNiIsCgkiaHN0cm9rOyI6ICJcdTAxMjciLAoJIkh1bXBEb3duSHVtcDsiOiAiXHUyMjRFIiwKCSJIdW1wRXF1YWw7IjogIlx1MjI0RiIsCgkiaHlidWxsOyI6ICJcdTIwNDMiLAoJImh5cGhlbjsiOiAiXHUyMDEwIiwKCSJJYWN1dGU7IjogIlx1MDBDRCIsCgkiSWFjdXRlIjogIlx1MDBDRCIsCgkiaWFjdXRlOyI6ICJcdTAwRUQiLAoJImlhY3V0ZSI6ICJcdTAwRUQiLAoJImljOyI6ICJcdTIwNjMiLAoJIkljaXJjOyI6ICJcdTAwQ0UiLAoJIkljaXJjIjogIlx1MDBDRSIsCgkiaWNpcmM7IjogIlx1MDBFRSIsCgkiaWNpcmMiOiAiXHUwMEVFIiwKCSJJY3k7IjogIlx1MDQxOCIsCgkiaWN5OyI6ICJcdTA0MzgiLAoJIklkb3Q7IjogIlx1MDEzMCIsCgkiSUVjeTsiOiAiXHUwNDE1IiwKCSJpZWN5OyI6ICJcdTA0MzUiLAoJImlleGNsOyI6ICJcdTAwQTEiLAoJImlleGNsIjogIlx1MDBBMSIsCgkiaWZmOyI6ICJcdTIxRDQiLAoJImlmcjsiOiAiXHVEODM1XHVERDI2IiwKCSJJZnI7IjogIlx1MjExMSIsCgkiSWdyYXZlOyI6ICJcdTAwQ0MiLAoJIklncmF2ZSI6ICJcdTAwQ0MiLAoJImlncmF2ZTsiOiAiXHUwMEVDIiwKCSJpZ3JhdmUiOiAiXHUwMEVDIiwKCSJpaTsiOiAiXHUyMTQ4IiwKCSJpaWlpbnQ7IjogIlx1MkEwQyIsCgkiaWlpbnQ7IjogIlx1MjIyRCIsCgkiaWluZmluOyI6ICJcdTI5REMiLAoJImlpb3RhOyI6ICJcdTIxMjkiLAoJIklKbGlnOyI6ICJcdTAxMzIiLAoJImlqbGlnOyI6ICJcdTAxMzMiLAoJIkltYWNyOyI6ICJcdTAxMkEiLAoJImltYWNyOyI6ICJcdTAxMkIiLAoJImltYWdlOyI6ICJcdTIxMTEiLAoJIkltYWdpbmFyeUk7IjogIlx1MjE0OCIsCgkiaW1hZ2xpbmU7IjogIlx1MjExMCIsCgkiaW1hZ3BhcnQ7IjogIlx1MjExMSIsCgkiaW1hdGg7IjogIlx1MDEzMSIsCgkiSW07IjogIlx1MjExMSIsCgkiaW1vZjsiOiAiXHUyMkI3IiwKCSJpbXBlZDsiOiAiXHUwMUI1IiwKCSJJbXBsaWVzOyI6ICJcdTIxRDIiLAoJImluY2FyZTsiOiAiXHUyMTA1IiwKCSJpbjsiOiAiXHUyMjA4IiwKCSJpbmZpbjsiOiAiXHUyMjFFIiwKCSJpbmZpbnRpZTsiOiAiXHUyOUREIiwKCSJpbm9kb3Q7IjogIlx1MDEzMSIsCgkiaW50Y2FsOyI6ICJcdTIyQkEiLAoJImludDsiOiAiXHUyMjJCIiwKCSJJbnQ7IjogIlx1MjIyQyIsCgkiaW50ZWdlcnM7IjogIlx1MjEyNCIsCgkiSW50ZWdyYWw7IjogIlx1MjIyQiIsCgkiaW50ZXJjYWw7IjogIlx1MjJCQSIsCgkiSW50ZXJzZWN0aW9uOyI6ICJcdTIyQzIiLAoJImludGxhcmhrOyI6ICJcdTJBMTciLAoJImludHByb2Q7IjogIlx1MkEzQyIsCgkiSW52aXNpYmxlQ29tbWE7IjogIlx1MjA2MyIsCgkiSW52aXNpYmxlVGltZXM7IjogIlx1MjA2MiIsCgkiSU9jeTsiOiAiXHUwNDAxIiwKCSJpb2N5OyI6ICJcdTA0NTEiLAoJIklvZ29uOyI6ICJcdTAxMkUiLAoJImlvZ29uOyI6ICJcdTAxMkYiLAoJIklvcGY7IjogIlx1RDgzNVx1REQ0MCIsCgkiaW9wZjsiOiAiXHVEODM1XHVERDVBIiwKCSJJb3RhOyI6ICJcdTAzOTkiLAoJImlvdGE7IjogIlx1MDNCOSIsCgkiaXByb2Q7IjogIlx1MkEzQyIsCgkiaXF1ZXN0OyI6ICJcdTAwQkYiLAoJImlxdWVzdCI6ICJcdTAwQkYiLAoJImlzY3I7IjogIlx1RDgzNVx1RENCRSIsCgkiSXNjcjsiOiAiXHUyMTEwIiwKCSJpc2luOyI6ICJcdTIyMDgiLAoJImlzaW5kb3Q7IjogIlx1MjJGNSIsCgkiaXNpbkU7IjogIlx1MjJGOSIsCgkiaXNpbnM7IjogIlx1MjJGNCIsCgkiaXNpbnN2OyI6ICJcdTIyRjMiLAoJImlzaW52OyI6ICJcdTIyMDgiLAoJIml0OyI6ICJcdTIwNjIiLAoJIkl0aWxkZTsiOiAiXHUwMTI4IiwKCSJpdGlsZGU7IjogIlx1MDEyOSIsCgkiSXVrY3k7IjogIlx1MDQwNiIsCgkiaXVrY3k7IjogIlx1MDQ1NiIsCgkiSXVtbDsiOiAiXHUwMENGIiwKCSJJdW1sIjogIlx1MDBDRiIsCgkiaXVtbDsiOiAiXHUwMEVGIiwKCSJpdW1sIjogIlx1MDBFRiIsCgkiSmNpcmM7IjogIlx1MDEzNCIsCgkiamNpcmM7IjogIlx1MDEzNSIsCgkiSmN5OyI6ICJcdTA0MTkiLAoJImpjeTsiOiAiXHUwNDM5IiwKCSJKZnI7IjogIlx1RDgzNVx1REQwRCIsCgkiamZyOyI6ICJcdUQ4MzVcdUREMjciLAoJImptYXRoOyI6ICJcdTAyMzciLAoJIkpvcGY7IjogIlx1RDgzNVx1REQ0MSIsCgkiam9wZjsiOiAiXHVEODM1XHVERDVCIiwKCSJKc2NyOyI6ICJcdUQ4MzVcdURDQTUiLAoJImpzY3I7IjogIlx1RDgzNVx1RENCRiIsCgkiSnNlcmN5OyI6ICJcdTA0MDgiLAoJImpzZXJjeTsiOiAiXHUwNDU4IiwKCSJKdWtjeTsiOiAiXHUwNDA0IiwKCSJqdWtjeTsiOiAiXHUwNDU0IiwKCSJLYXBwYTsiOiAiXHUwMzlBIiwKCSJrYXBwYTsiOiAiXHUwM0JBIiwKCSJrYXBwYXY7IjogIlx1MDNGMCIsCgkiS2NlZGlsOyI6ICJcdTAxMzYiLAoJImtjZWRpbDsiOiAiXHUwMTM3IiwKCSJLY3k7IjogIlx1MDQxQSIsCgkia2N5OyI6ICJcdTA0M0EiLAoJIktmcjsiOiAiXHVEODM1XHVERDBFIiwKCSJrZnI7IjogIlx1RDgzNVx1REQyOCIsCgkia2dyZWVuOyI6ICJcdTAxMzgiLAoJIktIY3k7IjogIlx1MDQyNSIsCgkia2hjeTsiOiAiXHUwNDQ1IiwKCSJLSmN5OyI6ICJcdTA0MEMiLAoJImtqY3k7IjogIlx1MDQ1QyIsCgkiS29wZjsiOiAiXHVEODM1XHVERDQyIiwKCSJrb3BmOyI6ICJcdUQ4MzVcdURENUMiLAoJIktzY3I7IjogIlx1RDgzNVx1RENBNiIsCgkia3NjcjsiOiAiXHVEODM1XHVEQ0MwIiwKCSJsQWFycjsiOiAiXHUyMURBIiwKCSJMYWN1dGU7IjogIlx1MDEzOSIsCgkibGFjdXRlOyI6ICJcdTAxM0EiLAoJImxhZW1wdHl2OyI6ICJcdTI5QjQiLAoJImxhZ3JhbjsiOiAiXHUyMTEyIiwKCSJMYW1iZGE7IjogIlx1MDM5QiIsCgkibGFtYmRhOyI6ICJcdTAzQkIiLAoJImxhbmc7IjogIlx1MjdFOCIsCgkiTGFuZzsiOiAiXHUyN0VBIiwKCSJsYW5nZDsiOiAiXHUyOTkxIiwKCSJsYW5nbGU7IjogIlx1MjdFOCIsCgkibGFwOyI6ICJcdTJBODUiLAoJIkxhcGxhY2V0cmY7IjogIlx1MjExMiIsCgkibGFxdW87IjogIlx1MDBBQiIsCgkibGFxdW8iOiAiXHUwMEFCIiwKCSJsYXJyYjsiOiAiXHUyMUU0IiwKCSJsYXJyYmZzOyI6ICJcdTI5MUYiLAoJImxhcnI7IjogIlx1MjE5MCIsCgkiTGFycjsiOiAiXHUyMTlFIiwKCSJsQXJyOyI6ICJcdTIxRDAiLAoJImxhcnJmczsiOiAiXHUyOTFEIiwKCSJsYXJyaGs7IjogIlx1MjFBOSIsCgkibGFycmxwOyI6ICJcdTIxQUIiLAoJImxhcnJwbDsiOiAiXHUyOTM5IiwKCSJsYXJyc2ltOyI6ICJcdTI5NzMiLAoJImxhcnJ0bDsiOiAiXHUyMUEyIiwKCSJsYXRhaWw7IjogIlx1MjkxOSIsCgkibEF0YWlsOyI6ICJcdTI5MUIiLAoJImxhdDsiOiAiXHUyQUFCIiwKCSJsYXRlOyI6ICJcdTJBQUQiLAoJImxhdGVzOyI6ICJcdTJBQURcdUZFMDAiLAoJImxiYXJyOyI6ICJcdTI5MEMiLAoJImxCYXJyOyI6ICJcdTI5MEUiLAoJImxiYnJrOyI6ICJcdTI3NzIiLAoJImxicmFjZTsiOiAiXHUwMDdCIiwKCSJsYnJhY2s7IjogIlx1MDA1QiIsCgkibGJya2U7IjogIlx1Mjk4QiIsCgkibGJya3NsZDsiOiAiXHUyOThGIiwKCSJsYnJrc2x1OyI6ICJcdTI5OEQiLAoJIkxjYXJvbjsiOiAiXHUwMTNEIiwKCSJsY2Fyb247IjogIlx1MDEzRSIsCgkiTGNlZGlsOyI6ICJcdTAxM0IiLAoJImxjZWRpbDsiOiAiXHUwMTNDIiwKCSJsY2VpbDsiOiAiXHUyMzA4IiwKCSJsY3ViOyI6ICJcdTAwN0IiLAoJIkxjeTsiOiAiXHUwNDFCIiwKCSJsY3k7IjogIlx1MDQzQiIsCgkibGRjYTsiOiAiXHUyOTM2IiwKCSJsZHF1bzsiOiAiXHUyMDFDIiwKCSJsZHF1b3I7IjogIlx1MjAxRSIsCgkibGRyZGhhcjsiOiAiXHUyOTY3IiwKCSJsZHJ1c2hhcjsiOiAiXHUyOTRCIiwKCSJsZHNoOyI6ICJcdTIxQjIiLAoJImxlOyI6ICJcdTIyNjQiLAoJImxFOyI6ICJcdTIyNjYiLAoJIkxlZnRBbmdsZUJyYWNrZXQ7IjogIlx1MjdFOCIsCgkiTGVmdEFycm93QmFyOyI6ICJcdTIxRTQiLAoJImxlZnRhcnJvdzsiOiAiXHUyMTkwIiwKCSJMZWZ0QXJyb3c7IjogIlx1MjE5MCIsCgkiTGVmdGFycm93OyI6ICJcdTIxRDAiLAoJIkxlZnRBcnJvd1JpZ2h0QXJyb3c7IjogIlx1MjFDNiIsCgkibGVmdGFycm93dGFpbDsiOiAiXHUyMUEyIiwKCSJMZWZ0Q2VpbGluZzsiOiAiXHUyMzA4IiwKCSJMZWZ0RG91YmxlQnJhY2tldDsiOiAiXHUyN0U2IiwKCSJMZWZ0RG93blRlZVZlY3RvcjsiOiAiXHUyOTYxIiwKCSJMZWZ0RG93blZlY3RvckJhcjsiOiAiXHUyOTU5IiwKCSJMZWZ0RG93blZlY3RvcjsiOiAiXHUyMUMzIiwKCSJMZWZ0Rmxvb3I7IjogIlx1MjMwQSIsCgkibGVmdGhhcnBvb25kb3duOyI6ICJcdTIxQkQiLAoJImxlZnRoYXJwb29udXA7IjogIlx1MjFCQyIsCgkibGVmdGxlZnRhcnJvd3M7IjogIlx1MjFDNyIsCgkibGVmdHJpZ2h0YXJyb3c7IjogIlx1MjE5NCIsCgkiTGVmdFJpZ2h0QXJyb3c7IjogIlx1MjE5NCIsCgkiTGVmdHJpZ2h0YXJyb3c7IjogIlx1MjFENCIsCgkibGVmdHJpZ2h0YXJyb3dzOyI6ICJcdTIxQzYiLAoJImxlZnRyaWdodGhhcnBvb25zOyI6ICJcdTIxQ0IiLAoJImxlZnRyaWdodHNxdWlnYXJyb3c7IjogIlx1MjFBRCIsCgkiTGVmdFJpZ2h0VmVjdG9yOyI6ICJcdTI5NEUiLAoJIkxlZnRUZWVBcnJvdzsiOiAiXHUyMUE0IiwKCSJMZWZ0VGVlOyI6ICJcdTIyQTMiLAoJIkxlZnRUZWVWZWN0b3I7IjogIlx1Mjk1QSIsCgkibGVmdHRocmVldGltZXM7IjogIlx1MjJDQiIsCgkiTGVmdFRyaWFuZ2xlQmFyOyI6ICJcdTI5Q0YiLAoJIkxlZnRUcmlhbmdsZTsiOiAiXHUyMkIyIiwKCSJMZWZ0VHJpYW5nbGVFcXVhbDsiOiAiXHUyMkI0IiwKCSJMZWZ0VXBEb3duVmVjdG9yOyI6ICJcdTI5NTEiLAoJIkxlZnRVcFRlZVZlY3RvcjsiOiAiXHUyOTYwIiwKCSJMZWZ0VXBWZWN0b3JCYXI7IjogIlx1Mjk1OCIsCgkiTGVmdFVwVmVjdG9yOyI6ICJcdTIxQkYiLAoJIkxlZnRWZWN0b3JCYXI7IjogIlx1Mjk1MiIsCgkiTGVmdFZlY3RvcjsiOiAiXHUyMUJDIiwKCSJsRWc7IjogIlx1MkE4QiIsCgkibGVnOyI6ICJcdTIyREEiLAoJImxlcTsiOiAiXHUyMjY0IiwKCSJsZXFxOyI6ICJcdTIyNjYiLAoJImxlcXNsYW50OyI6ICJcdTJBN0QiLAoJImxlc2NjOyI6ICJcdTJBQTgiLAoJImxlczsiOiAiXHUyQTdEIiwKCSJsZXNkb3Q7IjogIlx1MkE3RiIsCgkibGVzZG90bzsiOiAiXHUyQTgxIiwKCSJsZXNkb3RvcjsiOiAiXHUyQTgzIiwKCSJsZXNnOyI6ICJcdTIyREFcdUZFMDAiLAoJImxlc2dlczsiOiAiXHUyQTkzIiwKCSJsZXNzYXBwcm94OyI6ICJcdTJBODUiLAoJImxlc3Nkb3Q7IjogIlx1MjJENiIsCgkibGVzc2VxZ3RyOyI6ICJcdTIyREEiLAoJImxlc3NlcXFndHI7IjogIlx1MkE4QiIsCgkiTGVzc0VxdWFsR3JlYXRlcjsiOiAiXHUyMkRBIiwKCSJMZXNzRnVsbEVxdWFsOyI6ICJcdTIyNjYiLAoJIkxlc3NHcmVhdGVyOyI6ICJcdTIyNzYiLAoJImxlc3NndHI7IjogIlx1MjI3NiIsCgkiTGVzc0xlc3M7IjogIlx1MkFBMSIsCgkibGVzc3NpbTsiOiAiXHUyMjcyIiwKCSJMZXNzU2xhbnRFcXVhbDsiOiAiXHUyQTdEIiwKCSJMZXNzVGlsZGU7IjogIlx1MjI3MiIsCgkibGZpc2h0OyI6ICJcdTI5N0MiLAoJImxmbG9vcjsiOiAiXHUyMzBBIiwKCSJMZnI7IjogIlx1RDgzNVx1REQwRiIsCgkibGZyOyI6ICJcdUQ4MzVcdUREMjkiLAoJImxnOyI6ICJcdTIyNzYiLAoJImxnRTsiOiAiXHUyQTkxIiwKCSJsSGFyOyI6ICJcdTI5NjIiLAoJImxoYXJkOyI6ICJcdTIxQkQiLAoJImxoYXJ1OyI6ICJcdTIxQkMiLAoJImxoYXJ1bDsiOiAiXHUyOTZBIiwKCSJsaGJsazsiOiAiXHUyNTg0IiwKCSJMSmN5OyI6ICJcdTA0MDkiLAoJImxqY3k7IjogIlx1MDQ1OSIsCgkibGxhcnI7IjogIlx1MjFDNyIsCgkibGw7IjogIlx1MjI2QSIsCgkiTGw7IjogIlx1MjJEOCIsCgkibGxjb3JuZXI7IjogIlx1MjMxRSIsCgkiTGxlZnRhcnJvdzsiOiAiXHUyMURBIiwKCSJsbGhhcmQ7IjogIlx1Mjk2QiIsCgkibGx0cmk7IjogIlx1MjVGQSIsCgkiTG1pZG90OyI6ICJcdTAxM0YiLAoJImxtaWRvdDsiOiAiXHUwMTQwIiwKCSJsbW91c3RhY2hlOyI6ICJcdTIzQjAiLAoJImxtb3VzdDsiOiAiXHUyM0IwIiwKCSJsbmFwOyI6ICJcdTJBODkiLAoJImxuYXBwcm94OyI6ICJcdTJBODkiLAoJImxuZTsiOiAiXHUyQTg3IiwKCSJsbkU7IjogIlx1MjI2OCIsCgkibG5lcTsiOiAiXHUyQTg3IiwKCSJsbmVxcTsiOiAiXHUyMjY4IiwKCSJsbnNpbTsiOiAiXHUyMkU2IiwKCSJsb2FuZzsiOiAiXHUyN0VDIiwKCSJsb2FycjsiOiAiXHUyMUZEIiwKCSJsb2JyazsiOiAiXHUyN0U2IiwKCSJsb25nbGVmdGFycm93OyI6ICJcdTI3RjUiLAoJIkxvbmdMZWZ0QXJyb3c7IjogIlx1MjdGNSIsCgkiTG9uZ2xlZnRhcnJvdzsiOiAiXHUyN0Y4IiwKCSJsb25nbGVmdHJpZ2h0YXJyb3c7IjogIlx1MjdGNyIsCgkiTG9uZ0xlZnRSaWdodEFycm93OyI6ICJcdTI3RjciLAoJIkxvbmdsZWZ0cmlnaHRhcnJvdzsiOiAiXHUyN0ZBIiwKCSJsb25nbWFwc3RvOyI6ICJcdTI3RkMiLAoJImxvbmdyaWdodGFycm93OyI6ICJcdTI3RjYiLAoJIkxvbmdSaWdodEFycm93OyI6ICJcdTI3RjYiLAoJIkxvbmdyaWdodGFycm93OyI6ICJcdTI3RjkiLAoJImxvb3BhcnJvd2xlZnQ7IjogIlx1MjFBQiIsCgkibG9vcGFycm93cmlnaHQ7IjogIlx1MjFBQyIsCgkibG9wYXI7IjogIlx1Mjk4NSIsCgkiTG9wZjsiOiAiXHVEODM1XHVERDQzIiwKCSJsb3BmOyI6ICJcdUQ4MzVcdURENUQiLAoJImxvcGx1czsiOiAiXHUyQTJEIiwKCSJsb3RpbWVzOyI6ICJcdTJBMzQiLAoJImxvd2FzdDsiOiAiXHUyMjE3IiwKCSJsb3diYXI7IjogIlx1MDA1RiIsCgkiTG93ZXJMZWZ0QXJyb3c7IjogIlx1MjE5OSIsCgkiTG93ZXJSaWdodEFycm93OyI6ICJcdTIxOTgiLAoJImxvejsiOiAiXHUyNUNBIiwKCSJsb3plbmdlOyI6ICJcdTI1Q0EiLAoJImxvemY7IjogIlx1MjlFQiIsCgkibHBhcjsiOiAiXHUwMDI4IiwKCSJscGFybHQ7IjogIlx1Mjk5MyIsCgkibHJhcnI7IjogIlx1MjFDNiIsCgkibHJjb3JuZXI7IjogIlx1MjMxRiIsCgkibHJoYXI7IjogIlx1MjFDQiIsCgkibHJoYXJkOyI6ICJcdTI5NkQiLAoJImxybTsiOiAiXHUyMDBFIiwKCSJscnRyaTsiOiAiXHUyMkJGIiwKCSJsc2FxdW87IjogIlx1MjAzOSIsCgkibHNjcjsiOiAiXHVEODM1XHVEQ0MxIiwKCSJMc2NyOyI6ICJcdTIxMTIiLAoJImxzaDsiOiAiXHUyMUIwIiwKCSJMc2g7IjogIlx1MjFCMCIsCgkibHNpbTsiOiAiXHUyMjcyIiwKCSJsc2ltZTsiOiAiXHUyQThEIiwKCSJsc2ltZzsiOiAiXHUyQThGIiwKCSJsc3FiOyI6ICJcdTAwNUIiLAoJImxzcXVvOyI6ICJcdTIwMTgiLAoJImxzcXVvcjsiOiAiXHUyMDFBIiwKCSJMc3Ryb2s7IjogIlx1MDE0MSIsCgkibHN0cm9rOyI6ICJcdTAxNDIiLAoJImx0Y2M7IjogIlx1MkFBNiIsCgkibHRjaXI7IjogIlx1MkE3OSIsCgkibHQ7IjogIlx1MDAzQyIsCgkibHQiOiAiXHUwMDNDIiwKCSJMVDsiOiAiXHUwMDNDIiwKCSJMVCI6ICJcdTAwM0MiLAoJIkx0OyI6ICJcdTIyNkEiLAoJImx0ZG90OyI6ICJcdTIyRDYiLAoJImx0aHJlZTsiOiAiXHUyMkNCIiwKCSJsdGltZXM7IjogIlx1MjJDOSIsCgkibHRsYXJyOyI6ICJcdTI5NzYiLAoJImx0cXVlc3Q7IjogIlx1MkE3QiIsCgkibHRyaTsiOiAiXHUyNUMzIiwKCSJsdHJpZTsiOiAiXHUyMkI0IiwKCSJsdHJpZjsiOiAiXHUyNUMyIiwKCSJsdHJQYXI7IjogIlx1Mjk5NiIsCgkibHVyZHNoYXI7IjogIlx1Mjk0QSIsCgkibHVydWhhcjsiOiAiXHUyOTY2IiwKCSJsdmVydG5lcXE7IjogIlx1MjI2OFx1RkUwMCIsCgkibHZuRTsiOiAiXHUyMjY4XHVGRTAwIiwKCSJtYWNyOyI6ICJcdTAwQUYiLAoJIm1hY3IiOiAiXHUwMEFGIiwKCSJtYWxlOyI6ICJcdTI2NDIiLAoJIm1hbHQ7IjogIlx1MjcyMCIsCgkibWFsdGVzZTsiOiAiXHUyNzIwIiwKCSJNYXA7IjogIlx1MjkwNSIsCgkibWFwOyI6ICJcdTIxQTYiLAoJIm1hcHN0bzsiOiAiXHUyMUE2IiwKCSJtYXBzdG9kb3duOyI6ICJcdTIxQTciLAoJIm1hcHN0b2xlZnQ7IjogIlx1MjFBNCIsCgkibWFwc3RvdXA7IjogIlx1MjFBNSIsCgkibWFya2VyOyI6ICJcdTI1QUUiLAoJIm1jb21tYTsiOiAiXHUyQTI5IiwKCSJNY3k7IjogIlx1MDQxQyIsCgkibWN5OyI6ICJcdTA0M0MiLAoJIm1kYXNoOyI6ICJcdTIwMTQiLAoJIm1ERG90OyI6ICJcdTIyM0EiLAoJIm1lYXN1cmVkYW5nbGU7IjogIlx1MjIyMSIsCgkiTWVkaXVtU3BhY2U7IjogIlx1MjA1RiIsCgkiTWVsbGludHJmOyI6ICJcdTIxMzMiLAoJIk1mcjsiOiAiXHVEODM1XHVERDEwIiwKCSJtZnI7IjogIlx1RDgzNVx1REQyQSIsCgkibWhvOyI6ICJcdTIxMjciLAoJIm1pY3JvOyI6ICJcdTAwQjUiLAoJIm1pY3JvIjogIlx1MDBCNSIsCgkibWlkYXN0OyI6ICJcdTAwMkEiLAoJIm1pZGNpcjsiOiAiXHUyQUYwIiwKCSJtaWQ7IjogIlx1MjIyMyIsCgkibWlkZG90OyI6ICJcdTAwQjciLAoJIm1pZGRvdCI6ICJcdTAwQjciLAoJIm1pbnVzYjsiOiAiXHUyMjlGIiwKCSJtaW51czsiOiAiXHUyMjEyIiwKCSJtaW51c2Q7IjogIlx1MjIzOCIsCgkibWludXNkdTsiOiAiXHUyQTJBIiwKCSJNaW51c1BsdXM7IjogIlx1MjIxMyIsCgkibWxjcDsiOiAiXHUyQURCIiwKCSJtbGRyOyI6ICJcdTIwMjYiLAoJIm1ucGx1czsiOiAiXHUyMjEzIiwKCSJtb2RlbHM7IjogIlx1MjJBNyIsCgkiTW9wZjsiOiAiXHVEODM1XHVERDQ0IiwKCSJtb3BmOyI6ICJcdUQ4MzVcdURENUUiLAoJIm1wOyI6ICJcdTIyMTMiLAoJIm1zY3I7IjogIlx1RDgzNVx1RENDMiIsCgkiTXNjcjsiOiAiXHUyMTMzIiwKCSJtc3Rwb3M7IjogIlx1MjIzRSIsCgkiTXU7IjogIlx1MDM5QyIsCgkibXU7IjogIlx1MDNCQyIsCgkibXVsdGltYXA7IjogIlx1MjJCOCIsCgkibXVtYXA7IjogIlx1MjJCOCIsCgkibmFibGE7IjogIlx1MjIwNyIsCgkiTmFjdXRlOyI6ICJcdTAxNDMiLAoJIm5hY3V0ZTsiOiAiXHUwMTQ0IiwKCSJuYW5nOyI6ICJcdTIyMjBcdTIwRDIiLAoJIm5hcDsiOiAiXHUyMjQ5IiwKCSJuYXBFOyI6ICJcdTJBNzBcdTAzMzgiLAoJIm5hcGlkOyI6ICJcdTIyNEJcdTAzMzgiLAoJIm5hcG9zOyI6ICJcdTAxNDkiLAoJIm5hcHByb3g7IjogIlx1MjI0OSIsCgkibmF0dXJhbDsiOiAiXHUyNjZFIiwKCSJuYXR1cmFsczsiOiAiXHUyMTE1IiwKCSJuYXR1cjsiOiAiXHUyNjZFIiwKCSJuYnNwOyI6ICJcdTAwQTAiLAoJIm5ic3AiOiAiXHUwMEEwIiwKCSJuYnVtcDsiOiAiXHUyMjRFXHUwMzM4IiwKCSJuYnVtcGU7IjogIlx1MjI0Rlx1MDMzOCIsCgkibmNhcDsiOiAiXHUyQTQzIiwKCSJOY2Fyb247IjogIlx1MDE0NyIsCgkibmNhcm9uOyI6ICJcdTAxNDgiLAoJIk5jZWRpbDsiOiAiXHUwMTQ1IiwKCSJuY2VkaWw7IjogIlx1MDE0NiIsCgkibmNvbmc7IjogIlx1MjI0NyIsCgkibmNvbmdkb3Q7IjogIlx1MkE2RFx1MDMzOCIsCgkibmN1cDsiOiAiXHUyQTQyIiwKCSJOY3k7IjogIlx1MDQxRCIsCgkibmN5OyI6ICJcdTA0M0QiLAoJIm5kYXNoOyI6ICJcdTIwMTMiLAoJIm5lYXJoazsiOiAiXHUyOTI0IiwKCSJuZWFycjsiOiAiXHUyMTk3IiwKCSJuZUFycjsiOiAiXHUyMUQ3IiwKCSJuZWFycm93OyI6ICJcdTIxOTciLAoJIm5lOyI6ICJcdTIyNjAiLAoJIm5lZG90OyI6ICJcdTIyNTBcdTAzMzgiLAoJIk5lZ2F0aXZlTWVkaXVtU3BhY2U7IjogIlx1MjAwQiIsCgkiTmVnYXRpdmVUaGlja1NwYWNlOyI6ICJcdTIwMEIiLAoJIk5lZ2F0aXZlVGhpblNwYWNlOyI6ICJcdTIwMEIiLAoJIk5lZ2F0aXZlVmVyeVRoaW5TcGFjZTsiOiAiXHUyMDBCIiwKCSJuZXF1aXY7IjogIlx1MjI2MiIsCgkibmVzZWFyOyI6ICJcdTI5MjgiLAoJIm5lc2ltOyI6ICJcdTIyNDJcdTAzMzgiLAoJIk5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6ICJcdTIyNkIiLAoJIk5lc3RlZExlc3NMZXNzOyI6ICJcdTIyNkEiLAoJIk5ld0xpbmU7IjogIlx1MDAwQSIsCgkibmV4aXN0OyI6ICJcdTIyMDQiLAoJIm5leGlzdHM7IjogIlx1MjIwNCIsCgkiTmZyOyI6ICJcdUQ4MzVcdUREMTEiLAoJIm5mcjsiOiAiXHVEODM1XHVERDJCIiwKCSJuZ0U7IjogIlx1MjI2N1x1MDMzOCIsCgkibmdlOyI6ICJcdTIyNzEiLAoJIm5nZXE7IjogIlx1MjI3MSIsCgkibmdlcXE7IjogIlx1MjI2N1x1MDMzOCIsCgkibmdlcXNsYW50OyI6ICJcdTJBN0VcdTAzMzgiLAoJIm5nZXM7IjogIlx1MkE3RVx1MDMzOCIsCgkibkdnOyI6ICJcdTIyRDlcdTAzMzgiLAoJIm5nc2ltOyI6ICJcdTIyNzUiLAoJIm5HdDsiOiAiXHUyMjZCXHUyMEQyIiwKCSJuZ3Q7IjogIlx1MjI2RiIsCgkibmd0cjsiOiAiXHUyMjZGIiwKCSJuR3R2OyI6ICJcdTIyNkJcdTAzMzgiLAoJIm5oYXJyOyI6ICJcdTIxQUUiLAoJIm5oQXJyOyI6ICJcdTIxQ0UiLAoJIm5ocGFyOyI6ICJcdTJBRjIiLAoJIm5pOyI6ICJcdTIyMEIiLAoJIm5pczsiOiAiXHUyMkZDIiwKCSJuaXNkOyI6ICJcdTIyRkEiLAoJIm5pdjsiOiAiXHUyMjBCIiwKCSJOSmN5OyI6ICJcdTA0MEEiLAoJIm5qY3k7IjogIlx1MDQ1QSIsCgkibmxhcnI7IjogIlx1MjE5QSIsCgkibmxBcnI7IjogIlx1MjFDRCIsCgkibmxkcjsiOiAiXHUyMDI1IiwKCSJubEU7IjogIlx1MjI2Nlx1MDMzOCIsCgkibmxlOyI6ICJcdTIyNzAiLAoJIm5sZWZ0YXJyb3c7IjogIlx1MjE5QSIsCgkibkxlZnRhcnJvdzsiOiAiXHUyMUNEIiwKCSJubGVmdHJpZ2h0YXJyb3c7IjogIlx1MjFBRSIsCgkibkxlZnRyaWdodGFycm93OyI6ICJcdTIxQ0UiLAoJIm5sZXE7IjogIlx1MjI3MCIsCgkibmxlcXE7IjogIlx1MjI2Nlx1MDMzOCIsCgkibmxlcXNsYW50OyI6ICJcdTJBN0RcdTAzMzgiLAoJIm5sZXM7IjogIlx1MkE3RFx1MDMzOCIsCgkibmxlc3M7IjogIlx1MjI2RSIsCgkibkxsOyI6ICJcdTIyRDhcdTAzMzgiLAoJIm5sc2ltOyI6ICJcdTIyNzQiLAoJIm5MdDsiOiAiXHUyMjZBXHUyMEQyIiwKCSJubHQ7IjogIlx1MjI2RSIsCgkibmx0cmk7IjogIlx1MjJFQSIsCgkibmx0cmllOyI6ICJcdTIyRUMiLAoJIm5MdHY7IjogIlx1MjI2QVx1MDMzOCIsCgkibm1pZDsiOiAiXHUyMjI0IiwKCSJOb0JyZWFrOyI6ICJcdTIwNjAiLAoJIk5vbkJyZWFraW5nU3BhY2U7IjogIlx1MDBBMCIsCgkibm9wZjsiOiAiXHVEODM1XHVERDVGIiwKCSJOb3BmOyI6ICJcdTIxMTUiLAoJIk5vdDsiOiAiXHUyQUVDIiwKCSJub3Q7IjogIlx1MDBBQyIsCgkibm90IjogIlx1MDBBQyIsCgkiTm90Q29uZ3J1ZW50OyI6ICJcdTIyNjIiLAoJIk5vdEN1cENhcDsiOiAiXHUyMjZEIiwKCSJOb3REb3VibGVWZXJ0aWNhbEJhcjsiOiAiXHUyMjI2IiwKCSJOb3RFbGVtZW50OyI6ICJcdTIyMDkiLAoJIk5vdEVxdWFsOyI6ICJcdTIyNjAiLAoJIk5vdEVxdWFsVGlsZGU7IjogIlx1MjI0Mlx1MDMzOCIsCgkiTm90RXhpc3RzOyI6ICJcdTIyMDQiLAoJIk5vdEdyZWF0ZXI7IjogIlx1MjI2RiIsCgkiTm90R3JlYXRlckVxdWFsOyI6ICJcdTIyNzEiLAoJIk5vdEdyZWF0ZXJGdWxsRXF1YWw7IjogIlx1MjI2N1x1MDMzOCIsCgkiTm90R3JlYXRlckdyZWF0ZXI7IjogIlx1MjI2Qlx1MDMzOCIsCgkiTm90R3JlYXRlckxlc3M7IjogIlx1MjI3OSIsCgkiTm90R3JlYXRlclNsYW50RXF1YWw7IjogIlx1MkE3RVx1MDMzOCIsCgkiTm90R3JlYXRlclRpbGRlOyI6ICJcdTIyNzUiLAoJIk5vdEh1bXBEb3duSHVtcDsiOiAiXHUyMjRFXHUwMzM4IiwKCSJOb3RIdW1wRXF1YWw7IjogIlx1MjI0Rlx1MDMzOCIsCgkibm90aW47IjogIlx1MjIwOSIsCgkibm90aW5kb3Q7IjogIlx1MjJGNVx1MDMzOCIsCgkibm90aW5FOyI6ICJcdTIyRjlcdTAzMzgiLAoJIm5vdGludmE7IjogIlx1MjIwOSIsCgkibm90aW52YjsiOiAiXHUyMkY3IiwKCSJub3RpbnZjOyI6ICJcdTIyRjYiLAoJIk5vdExlZnRUcmlhbmdsZUJhcjsiOiAiXHUyOUNGXHUwMzM4IiwKCSJOb3RMZWZ0VHJpYW5nbGU7IjogIlx1MjJFQSIsCgkiTm90TGVmdFRyaWFuZ2xlRXF1YWw7IjogIlx1MjJFQyIsCgkiTm90TGVzczsiOiAiXHUyMjZFIiwKCSJOb3RMZXNzRXF1YWw7IjogIlx1MjI3MCIsCgkiTm90TGVzc0dyZWF0ZXI7IjogIlx1MjI3OCIsCgkiTm90TGVzc0xlc3M7IjogIlx1MjI2QVx1MDMzOCIsCgkiTm90TGVzc1NsYW50RXF1YWw7IjogIlx1MkE3RFx1MDMzOCIsCgkiTm90TGVzc1RpbGRlOyI6ICJcdTIyNzQiLAoJIk5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOyI6ICJcdTJBQTJcdTAzMzgiLAoJIk5vdE5lc3RlZExlc3NMZXNzOyI6ICJcdTJBQTFcdTAzMzgiLAoJIm5vdG5pOyI6ICJcdTIyMEMiLAoJIm5vdG5pdmE7IjogIlx1MjIwQyIsCgkibm90bml2YjsiOiAiXHUyMkZFIiwKCSJub3RuaXZjOyI6ICJcdTIyRkQiLAoJIk5vdFByZWNlZGVzOyI6ICJcdTIyODAiLAoJIk5vdFByZWNlZGVzRXF1YWw7IjogIlx1MkFBRlx1MDMzOCIsCgkiTm90UHJlY2VkZXNTbGFudEVxdWFsOyI6ICJcdTIyRTAiLAoJIk5vdFJldmVyc2VFbGVtZW50OyI6ICJcdTIyMEMiLAoJIk5vdFJpZ2h0VHJpYW5nbGVCYXI7IjogIlx1MjlEMFx1MDMzOCIsCgkiTm90UmlnaHRUcmlhbmdsZTsiOiAiXHUyMkVCIiwKCSJOb3RSaWdodFRyaWFuZ2xlRXF1YWw7IjogIlx1MjJFRCIsCgkiTm90U3F1YXJlU3Vic2V0OyI6ICJcdTIyOEZcdTAzMzgiLAoJIk5vdFNxdWFyZVN1YnNldEVxdWFsOyI6ICJcdTIyRTIiLAoJIk5vdFNxdWFyZVN1cGVyc2V0OyI6ICJcdTIyOTBcdTAzMzgiLAoJIk5vdFNxdWFyZVN1cGVyc2V0RXF1YWw7IjogIlx1MjJFMyIsCgkiTm90U3Vic2V0OyI6ICJcdTIyODJcdTIwRDIiLAoJIk5vdFN1YnNldEVxdWFsOyI6ICJcdTIyODgiLAoJIk5vdFN1Y2NlZWRzOyI6ICJcdTIyODEiLAoJIk5vdFN1Y2NlZWRzRXF1YWw7IjogIlx1MkFCMFx1MDMzOCIsCgkiTm90U3VjY2VlZHNTbGFudEVxdWFsOyI6ICJcdTIyRTEiLAoJIk5vdFN1Y2NlZWRzVGlsZGU7IjogIlx1MjI3Rlx1MDMzOCIsCgkiTm90U3VwZXJzZXQ7IjogIlx1MjI4M1x1MjBEMiIsCgkiTm90U3VwZXJzZXRFcXVhbDsiOiAiXHUyMjg5IiwKCSJOb3RUaWxkZTsiOiAiXHUyMjQxIiwKCSJOb3RUaWxkZUVxdWFsOyI6ICJcdTIyNDQiLAoJIk5vdFRpbGRlRnVsbEVxdWFsOyI6ICJcdTIyNDciLAoJIk5vdFRpbGRlVGlsZGU7IjogIlx1MjI0OSIsCgkiTm90VmVydGljYWxCYXI7IjogIlx1MjIyNCIsCgkibnBhcmFsbGVsOyI6ICJcdTIyMjYiLAoJIm5wYXI7IjogIlx1MjIyNiIsCgkibnBhcnNsOyI6ICJcdTJBRkRcdTIwRTUiLAoJIm5wYXJ0OyI6ICJcdTIyMDJcdTAzMzgiLAoJIm5wb2xpbnQ7IjogIlx1MkExNCIsCgkibnByOyI6ICJcdTIyODAiLAoJIm5wcmN1ZTsiOiAiXHUyMkUwIiwKCSJucHJlYzsiOiAiXHUyMjgwIiwKCSJucHJlY2VxOyI6ICJcdTJBQUZcdTAzMzgiLAoJIm5wcmU7IjogIlx1MkFBRlx1MDMzOCIsCgkibnJhcnJjOyI6ICJcdTI5MzNcdTAzMzgiLAoJIm5yYXJyOyI6ICJcdTIxOUIiLAoJIm5yQXJyOyI6ICJcdTIxQ0YiLAoJIm5yYXJydzsiOiAiXHUyMTlEXHUwMzM4IiwKCSJucmlnaHRhcnJvdzsiOiAiXHUyMTlCIiwKCSJuUmlnaHRhcnJvdzsiOiAiXHUyMUNGIiwKCSJucnRyaTsiOiAiXHUyMkVCIiwKCSJucnRyaWU7IjogIlx1MjJFRCIsCgkibnNjOyI6ICJcdTIyODEiLAoJIm5zY2N1ZTsiOiAiXHUyMkUxIiwKCSJuc2NlOyI6ICJcdTJBQjBcdTAzMzgiLAoJIk5zY3I7IjogIlx1RDgzNVx1RENBOSIsCgkibnNjcjsiOiAiXHVEODM1XHVEQ0MzIiwKCSJuc2hvcnRtaWQ7IjogIlx1MjIyNCIsCgkibnNob3J0cGFyYWxsZWw7IjogIlx1MjIyNiIsCgkibnNpbTsiOiAiXHUyMjQxIiwKCSJuc2ltZTsiOiAiXHUyMjQ0IiwKCSJuc2ltZXE7IjogIlx1MjI0NCIsCgkibnNtaWQ7IjogIlx1MjIyNCIsCgkibnNwYXI7IjogIlx1MjIyNiIsCgkibnNxc3ViZTsiOiAiXHUyMkUyIiwKCSJuc3FzdXBlOyI6ICJcdTIyRTMiLAoJIm5zdWI7IjogIlx1MjI4NCIsCgkibnN1YkU7IjogIlx1MkFDNVx1MDMzOCIsCgkibnN1YmU7IjogIlx1MjI4OCIsCgkibnN1YnNldDsiOiAiXHUyMjgyXHUyMEQyIiwKCSJuc3Vic2V0ZXE7IjogIlx1MjI4OCIsCgkibnN1YnNldGVxcTsiOiAiXHUyQUM1XHUwMzM4IiwKCSJuc3VjYzsiOiAiXHUyMjgxIiwKCSJuc3VjY2VxOyI6ICJcdTJBQjBcdTAzMzgiLAoJIm5zdXA7IjogIlx1MjI4NSIsCgkibnN1cEU7IjogIlx1MkFDNlx1MDMzOCIsCgkibnN1cGU7IjogIlx1MjI4OSIsCgkibnN1cHNldDsiOiAiXHUyMjgzXHUyMEQyIiwKCSJuc3Vwc2V0ZXE7IjogIlx1MjI4OSIsCgkibnN1cHNldGVxcTsiOiAiXHUyQUM2XHUwMzM4IiwKCSJudGdsOyI6ICJcdTIyNzkiLAoJIk50aWxkZTsiOiAiXHUwMEQxIiwKCSJOdGlsZGUiOiAiXHUwMEQxIiwKCSJudGlsZGU7IjogIlx1MDBGMSIsCgkibnRpbGRlIjogIlx1MDBGMSIsCgkibnRsZzsiOiAiXHUyMjc4IiwKCSJudHJpYW5nbGVsZWZ0OyI6ICJcdTIyRUEiLAoJIm50cmlhbmdsZWxlZnRlcTsiOiAiXHUyMkVDIiwKCSJudHJpYW5nbGVyaWdodDsiOiAiXHUyMkVCIiwKCSJudHJpYW5nbGVyaWdodGVxOyI6ICJcdTIyRUQiLAoJIk51OyI6ICJcdTAzOUQiLAoJIm51OyI6ICJcdTAzQkQiLAoJIm51bTsiOiAiXHUwMDIzIiwKCSJudW1lcm87IjogIlx1MjExNiIsCgkibnVtc3A7IjogIlx1MjAwNyIsCgkibnZhcDsiOiAiXHUyMjREXHUyMEQyIiwKCSJudmRhc2g7IjogIlx1MjJBQyIsCgkibnZEYXNoOyI6ICJcdTIyQUQiLAoJIm5WZGFzaDsiOiAiXHUyMkFFIiwKCSJuVkRhc2g7IjogIlx1MjJBRiIsCgkibnZnZTsiOiAiXHUyMjY1XHUyMEQyIiwKCSJudmd0OyI6ICJcdTAwM0VcdTIwRDIiLAoJIm52SGFycjsiOiAiXHUyOTA0IiwKCSJudmluZmluOyI6ICJcdTI5REUiLAoJIm52bEFycjsiOiAiXHUyOTAyIiwKCSJudmxlOyI6ICJcdTIyNjRcdTIwRDIiLAoJIm52bHQ7IjogIlx1MDAzQ1x1MjBEMiIsCgkibnZsdHJpZTsiOiAiXHUyMkI0XHUyMEQyIiwKCSJudnJBcnI7IjogIlx1MjkwMyIsCgkibnZydHJpZTsiOiAiXHUyMkI1XHUyMEQyIiwKCSJudnNpbTsiOiAiXHUyMjNDXHUyMEQyIiwKCSJud2FyaGs7IjogIlx1MjkyMyIsCgkibndhcnI7IjogIlx1MjE5NiIsCgkibndBcnI7IjogIlx1MjFENiIsCgkibndhcnJvdzsiOiAiXHUyMTk2IiwKCSJud25lYXI7IjogIlx1MjkyNyIsCgkiT2FjdXRlOyI6ICJcdTAwRDMiLAoJIk9hY3V0ZSI6ICJcdTAwRDMiLAoJIm9hY3V0ZTsiOiAiXHUwMEYzIiwKCSJvYWN1dGUiOiAiXHUwMEYzIiwKCSJvYXN0OyI6ICJcdTIyOUIiLAoJIk9jaXJjOyI6ICJcdTAwRDQiLAoJIk9jaXJjIjogIlx1MDBENCIsCgkib2NpcmM7IjogIlx1MDBGNCIsCgkib2NpcmMiOiAiXHUwMEY0IiwKCSJvY2lyOyI6ICJcdTIyOUEiLAoJIk9jeTsiOiAiXHUwNDFFIiwKCSJvY3k7IjogIlx1MDQzRSIsCgkib2Rhc2g7IjogIlx1MjI5RCIsCgkiT2RibGFjOyI6ICJcdTAxNTAiLAoJIm9kYmxhYzsiOiAiXHUwMTUxIiwKCSJvZGl2OyI6ICJcdTJBMzgiLAoJIm9kb3Q7IjogIlx1MjI5OSIsCgkib2Rzb2xkOyI6ICJcdTI5QkMiLAoJIk9FbGlnOyI6ICJcdTAxNTIiLAoJIm9lbGlnOyI6ICJcdTAxNTMiLAoJIm9mY2lyOyI6ICJcdTI5QkYiLAoJIk9mcjsiOiAiXHVEODM1XHVERDEyIiwKCSJvZnI7IjogIlx1RDgzNVx1REQyQyIsCgkib2dvbjsiOiAiXHUwMkRCIiwKCSJPZ3JhdmU7IjogIlx1MDBEMiIsCgkiT2dyYXZlIjogIlx1MDBEMiIsCgkib2dyYXZlOyI6ICJcdTAwRjIiLAoJIm9ncmF2ZSI6ICJcdTAwRjIiLAoJIm9ndDsiOiAiXHUyOUMxIiwKCSJvaGJhcjsiOiAiXHUyOUI1IiwKCSJvaG07IjogIlx1MDNBOSIsCgkib2ludDsiOiAiXHUyMjJFIiwKCSJvbGFycjsiOiAiXHUyMUJBIiwKCSJvbGNpcjsiOiAiXHUyOUJFIiwKCSJvbGNyb3NzOyI6ICJcdTI5QkIiLAoJIm9saW5lOyI6ICJcdTIwM0UiLAoJIm9sdDsiOiAiXHUyOUMwIiwKCSJPbWFjcjsiOiAiXHUwMTRDIiwKCSJvbWFjcjsiOiAiXHUwMTREIiwKCSJPbWVnYTsiOiAiXHUwM0E5IiwKCSJvbWVnYTsiOiAiXHUwM0M5IiwKCSJPbWljcm9uOyI6ICJcdTAzOUYiLAoJIm9taWNyb247IjogIlx1MDNCRiIsCgkib21pZDsiOiAiXHUyOUI2IiwKCSJvbWludXM7IjogIlx1MjI5NiIsCgkiT29wZjsiOiAiXHVEODM1XHVERDQ2IiwKCSJvb3BmOyI6ICJcdUQ4MzVcdURENjAiLAoJIm9wYXI7IjogIlx1MjlCNyIsCgkiT3BlbkN1cmx5RG91YmxlUXVvdGU7IjogIlx1MjAxQyIsCgkiT3BlbkN1cmx5UXVvdGU7IjogIlx1MjAxOCIsCgkib3BlcnA7IjogIlx1MjlCOSIsCgkib3BsdXM7IjogIlx1MjI5NSIsCgkib3JhcnI7IjogIlx1MjFCQiIsCgkiT3I7IjogIlx1MkE1NCIsCgkib3I7IjogIlx1MjIyOCIsCgkib3JkOyI6ICJcdTJBNUQiLAoJIm9yZGVyOyI6ICJcdTIxMzQiLAoJIm9yZGVyb2Y7IjogIlx1MjEzNCIsCgkib3JkZjsiOiAiXHUwMEFBIiwKCSJvcmRmIjogIlx1MDBBQSIsCgkib3JkbTsiOiAiXHUwMEJBIiwKCSJvcmRtIjogIlx1MDBCQSIsCgkib3JpZ29mOyI6ICJcdTIyQjYiLAoJIm9yb3I7IjogIlx1MkE1NiIsCgkib3JzbG9wZTsiOiAiXHUyQTU3IiwKCSJvcnY7IjogIlx1MkE1QiIsCgkib1M7IjogIlx1MjRDOCIsCgkiT3NjcjsiOiAiXHVEODM1XHVEQ0FBIiwKCSJvc2NyOyI6ICJcdTIxMzQiLAoJIk9zbGFzaDsiOiAiXHUwMEQ4IiwKCSJPc2xhc2giOiAiXHUwMEQ4IiwKCSJvc2xhc2g7IjogIlx1MDBGOCIsCgkib3NsYXNoIjogIlx1MDBGOCIsCgkib3NvbDsiOiAiXHUyMjk4IiwKCSJPdGlsZGU7IjogIlx1MDBENSIsCgkiT3RpbGRlIjogIlx1MDBENSIsCgkib3RpbGRlOyI6ICJcdTAwRjUiLAoJIm90aWxkZSI6ICJcdTAwRjUiLAoJIm90aW1lc2FzOyI6ICJcdTJBMzYiLAoJIk90aW1lczsiOiAiXHUyQTM3IiwKCSJvdGltZXM7IjogIlx1MjI5NyIsCgkiT3VtbDsiOiAiXHUwMEQ2IiwKCSJPdW1sIjogIlx1MDBENiIsCgkib3VtbDsiOiAiXHUwMEY2IiwKCSJvdW1sIjogIlx1MDBGNiIsCgkib3ZiYXI7IjogIlx1MjMzRCIsCgkiT3ZlckJhcjsiOiAiXHUyMDNFIiwKCSJPdmVyQnJhY2U7IjogIlx1MjNERSIsCgkiT3ZlckJyYWNrZXQ7IjogIlx1MjNCNCIsCgkiT3ZlclBhcmVudGhlc2lzOyI6ICJcdTIzREMiLAoJInBhcmE7IjogIlx1MDBCNiIsCgkicGFyYSI6ICJcdTAwQjYiLAoJInBhcmFsbGVsOyI6ICJcdTIyMjUiLAoJInBhcjsiOiAiXHUyMjI1IiwKCSJwYXJzaW07IjogIlx1MkFGMyIsCgkicGFyc2w7IjogIlx1MkFGRCIsCgkicGFydDsiOiAiXHUyMjAyIiwKCSJQYXJ0aWFsRDsiOiAiXHUyMjAyIiwKCSJQY3k7IjogIlx1MDQxRiIsCgkicGN5OyI6ICJcdTA0M0YiLAoJInBlcmNudDsiOiAiXHUwMDI1IiwKCSJwZXJpb2Q7IjogIlx1MDAyRSIsCgkicGVybWlsOyI6ICJcdTIwMzAiLAoJInBlcnA7IjogIlx1MjJBNSIsCgkicGVydGVuazsiOiAiXHUyMDMxIiwKCSJQZnI7IjogIlx1RDgzNVx1REQxMyIsCgkicGZyOyI6ICJcdUQ4MzVcdUREMkQiLAoJIlBoaTsiOiAiXHUwM0E2IiwKCSJwaGk7IjogIlx1MDNDNiIsCgkicGhpdjsiOiAiXHUwM0Q1IiwKCSJwaG1tYXQ7IjogIlx1MjEzMyIsCgkicGhvbmU7IjogIlx1MjYwRSIsCgkiUGk7IjogIlx1MDNBMCIsCgkicGk7IjogIlx1MDNDMCIsCgkicGl0Y2hmb3JrOyI6ICJcdTIyRDQiLAoJInBpdjsiOiAiXHUwM0Q2IiwKCSJwbGFuY2s7IjogIlx1MjEwRiIsCgkicGxhbmNraDsiOiAiXHUyMTBFIiwKCSJwbGFua3Y7IjogIlx1MjEwRiIsCgkicGx1c2FjaXI7IjogIlx1MkEyMyIsCgkicGx1c2I7IjogIlx1MjI5RSIsCgkicGx1c2NpcjsiOiAiXHUyQTIyIiwKCSJwbHVzOyI6ICJcdTAwMkIiLAoJInBsdXNkbzsiOiAiXHUyMjE0IiwKCSJwbHVzZHU7IjogIlx1MkEyNSIsCgkicGx1c2U7IjogIlx1MkE3MiIsCgkiUGx1c01pbnVzOyI6ICJcdTAwQjEiLAoJInBsdXNtbjsiOiAiXHUwMEIxIiwKCSJwbHVzbW4iOiAiXHUwMEIxIiwKCSJwbHVzc2ltOyI6ICJcdTJBMjYiLAoJInBsdXN0d287IjogIlx1MkEyNyIsCgkicG07IjogIlx1MDBCMSIsCgkiUG9pbmNhcmVwbGFuZTsiOiAiXHUyMTBDIiwKCSJwb2ludGludDsiOiAiXHUyQTE1IiwKCSJwb3BmOyI6ICJcdUQ4MzVcdURENjEiLAoJIlBvcGY7IjogIlx1MjExOSIsCgkicG91bmQ7IjogIlx1MDBBMyIsCgkicG91bmQiOiAiXHUwMEEzIiwKCSJwcmFwOyI6ICJcdTJBQjciLAoJIlByOyI6ICJcdTJBQkIiLAoJInByOyI6ICJcdTIyN0EiLAoJInByY3VlOyI6ICJcdTIyN0MiLAoJInByZWNhcHByb3g7IjogIlx1MkFCNyIsCgkicHJlYzsiOiAiXHUyMjdBIiwKCSJwcmVjY3VybHllcTsiOiAiXHUyMjdDIiwKCSJQcmVjZWRlczsiOiAiXHUyMjdBIiwKCSJQcmVjZWRlc0VxdWFsOyI6ICJcdTJBQUYiLAoJIlByZWNlZGVzU2xhbnRFcXVhbDsiOiAiXHUyMjdDIiwKCSJQcmVjZWRlc1RpbGRlOyI6ICJcdTIyN0UiLAoJInByZWNlcTsiOiAiXHUyQUFGIiwKCSJwcmVjbmFwcHJveDsiOiAiXHUyQUI5IiwKCSJwcmVjbmVxcTsiOiAiXHUyQUI1IiwKCSJwcmVjbnNpbTsiOiAiXHUyMkU4IiwKCSJwcmU7IjogIlx1MkFBRiIsCgkicHJFOyI6ICJcdTJBQjMiLAoJInByZWNzaW07IjogIlx1MjI3RSIsCgkicHJpbWU7IjogIlx1MjAzMiIsCgkiUHJpbWU7IjogIlx1MjAzMyIsCgkicHJpbWVzOyI6ICJcdTIxMTkiLAoJInBybmFwOyI6ICJcdTJBQjkiLAoJInBybkU7IjogIlx1MkFCNSIsCgkicHJuc2ltOyI6ICJcdTIyRTgiLAoJInByb2Q7IjogIlx1MjIwRiIsCgkiUHJvZHVjdDsiOiAiXHUyMjBGIiwKCSJwcm9mYWxhcjsiOiAiXHUyMzJFIiwKCSJwcm9mbGluZTsiOiAiXHUyMzEyIiwKCSJwcm9mc3VyZjsiOiAiXHUyMzEzIiwKCSJwcm9wOyI6ICJcdTIyMUQiLAoJIlByb3BvcnRpb25hbDsiOiAiXHUyMjFEIiwKCSJQcm9wb3J0aW9uOyI6ICJcdTIyMzciLAoJInByb3B0bzsiOiAiXHUyMjFEIiwKCSJwcnNpbTsiOiAiXHUyMjdFIiwKCSJwcnVyZWw7IjogIlx1MjJCMCIsCgkiUHNjcjsiOiAiXHVEODM1XHVEQ0FCIiwKCSJwc2NyOyI6ICJcdUQ4MzVcdURDQzUiLAoJIlBzaTsiOiAiXHUwM0E4IiwKCSJwc2k7IjogIlx1MDNDOCIsCgkicHVuY3NwOyI6ICJcdTIwMDgiLAoJIlFmcjsiOiAiXHVEODM1XHVERDE0IiwKCSJxZnI7IjogIlx1RDgzNVx1REQyRSIsCgkicWludDsiOiAiXHUyQTBDIiwKCSJxb3BmOyI6ICJcdUQ4MzVcdURENjIiLAoJIlFvcGY7IjogIlx1MjExQSIsCgkicXByaW1lOyI6ICJcdTIwNTciLAoJIlFzY3I7IjogIlx1RDgzNVx1RENBQyIsCgkicXNjcjsiOiAiXHVEODM1XHVEQ0M2IiwKCSJxdWF0ZXJuaW9uczsiOiAiXHUyMTBEIiwKCSJxdWF0aW50OyI6ICJcdTJBMTYiLAoJInF1ZXN0OyI6ICJcdTAwM0YiLAoJInF1ZXN0ZXE7IjogIlx1MjI1RiIsCgkicXVvdDsiOiAiXHUwMDIyIiwKCSJxdW90IjogIlx1MDAyMiIsCgkiUVVPVDsiOiAiXHUwMDIyIiwKCSJRVU9UIjogIlx1MDAyMiIsCgkickFhcnI7IjogIlx1MjFEQiIsCgkicmFjZTsiOiAiXHUyMjNEXHUwMzMxIiwKCSJSYWN1dGU7IjogIlx1MDE1NCIsCgkicmFjdXRlOyI6ICJcdTAxNTUiLAoJInJhZGljOyI6ICJcdTIyMUEiLAoJInJhZW1wdHl2OyI6ICJcdTI5QjMiLAoJInJhbmc7IjogIlx1MjdFOSIsCgkiUmFuZzsiOiAiXHUyN0VCIiwKCSJyYW5nZDsiOiAiXHUyOTkyIiwKCSJyYW5nZTsiOiAiXHUyOUE1IiwKCSJyYW5nbGU7IjogIlx1MjdFOSIsCgkicmFxdW87IjogIlx1MDBCQiIsCgkicmFxdW8iOiAiXHUwMEJCIiwKCSJyYXJyYXA7IjogIlx1Mjk3NSIsCgkicmFycmI7IjogIlx1MjFFNSIsCgkicmFycmJmczsiOiAiXHUyOTIwIiwKCSJyYXJyYzsiOiAiXHUyOTMzIiwKCSJyYXJyOyI6ICJcdTIxOTIiLAoJIlJhcnI7IjogIlx1MjFBMCIsCgkickFycjsiOiAiXHUyMUQyIiwKCSJyYXJyZnM7IjogIlx1MjkxRSIsCgkicmFycmhrOyI6ICJcdTIxQUEiLAoJInJhcnJscDsiOiAiXHUyMUFDIiwKCSJyYXJycGw7IjogIlx1Mjk0NSIsCgkicmFycnNpbTsiOiAiXHUyOTc0IiwKCSJSYXJydGw7IjogIlx1MjkxNiIsCgkicmFycnRsOyI6ICJcdTIxQTMiLAoJInJhcnJ3OyI6ICJcdTIxOUQiLAoJInJhdGFpbDsiOiAiXHUyOTFBIiwKCSJyQXRhaWw7IjogIlx1MjkxQyIsCgkicmF0aW87IjogIlx1MjIzNiIsCgkicmF0aW9uYWxzOyI6ICJcdTIxMUEiLAoJInJiYXJyOyI6ICJcdTI5MEQiLAoJInJCYXJyOyI6ICJcdTI5MEYiLAoJIlJCYXJyOyI6ICJcdTI5MTAiLAoJInJiYnJrOyI6ICJcdTI3NzMiLAoJInJicmFjZTsiOiAiXHUwMDdEIiwKCSJyYnJhY2s7IjogIlx1MDA1RCIsCgkicmJya2U7IjogIlx1Mjk4QyIsCgkicmJya3NsZDsiOiAiXHUyOThFIiwKCSJyYnJrc2x1OyI6ICJcdTI5OTAiLAoJIlJjYXJvbjsiOiAiXHUwMTU4IiwKCSJyY2Fyb247IjogIlx1MDE1OSIsCgkiUmNlZGlsOyI6ICJcdTAxNTYiLAoJInJjZWRpbDsiOiAiXHUwMTU3IiwKCSJyY2VpbDsiOiAiXHUyMzA5IiwKCSJyY3ViOyI6ICJcdTAwN0QiLAoJIlJjeTsiOiAiXHUwNDIwIiwKCSJyY3k7IjogIlx1MDQ0MCIsCgkicmRjYTsiOiAiXHUyOTM3IiwKCSJyZGxkaGFyOyI6ICJcdTI5NjkiLAoJInJkcXVvOyI6ICJcdTIwMUQiLAoJInJkcXVvcjsiOiAiXHUyMDFEIiwKCSJyZHNoOyI6ICJcdTIxQjMiLAoJInJlYWw7IjogIlx1MjExQyIsCgkicmVhbGluZTsiOiAiXHUyMTFCIiwKCSJyZWFscGFydDsiOiAiXHUyMTFDIiwKCSJyZWFsczsiOiAiXHUyMTFEIiwKCSJSZTsiOiAiXHUyMTFDIiwKCSJyZWN0OyI6ICJcdTI1QUQiLAoJInJlZzsiOiAiXHUwMEFFIiwKCSJyZWciOiAiXHUwMEFFIiwKCSJSRUc7IjogIlx1MDBBRSIsCgkiUkVHIjogIlx1MDBBRSIsCgkiUmV2ZXJzZUVsZW1lbnQ7IjogIlx1MjIwQiIsCgkiUmV2ZXJzZUVxdWlsaWJyaXVtOyI6ICJcdTIxQ0IiLAoJIlJldmVyc2VVcEVxdWlsaWJyaXVtOyI6ICJcdTI5NkYiLAoJInJmaXNodDsiOiAiXHUyOTdEIiwKCSJyZmxvb3I7IjogIlx1MjMwQiIsCgkicmZyOyI6ICJcdUQ4MzVcdUREMkYiLAoJIlJmcjsiOiAiXHUyMTFDIiwKCSJySGFyOyI6ICJcdTI5NjQiLAoJInJoYXJkOyI6ICJcdTIxQzEiLAoJInJoYXJ1OyI6ICJcdTIxQzAiLAoJInJoYXJ1bDsiOiAiXHUyOTZDIiwKCSJSaG87IjogIlx1MDNBMSIsCgkicmhvOyI6ICJcdTAzQzEiLAoJInJob3Y7IjogIlx1MDNGMSIsCgkiUmlnaHRBbmdsZUJyYWNrZXQ7IjogIlx1MjdFOSIsCgkiUmlnaHRBcnJvd0JhcjsiOiAiXHUyMUU1IiwKCSJyaWdodGFycm93OyI6ICJcdTIxOTIiLAoJIlJpZ2h0QXJyb3c7IjogIlx1MjE5MiIsCgkiUmlnaHRhcnJvdzsiOiAiXHUyMUQyIiwKCSJSaWdodEFycm93TGVmdEFycm93OyI6ICJcdTIxQzQiLAoJInJpZ2h0YXJyb3d0YWlsOyI6ICJcdTIxQTMiLAoJIlJpZ2h0Q2VpbGluZzsiOiAiXHUyMzA5IiwKCSJSaWdodERvdWJsZUJyYWNrZXQ7IjogIlx1MjdFNyIsCgkiUmlnaHREb3duVGVlVmVjdG9yOyI6ICJcdTI5NUQiLAoJIlJpZ2h0RG93blZlY3RvckJhcjsiOiAiXHUyOTU1IiwKCSJSaWdodERvd25WZWN0b3I7IjogIlx1MjFDMiIsCgkiUmlnaHRGbG9vcjsiOiAiXHUyMzBCIiwKCSJyaWdodGhhcnBvb25kb3duOyI6ICJcdTIxQzEiLAoJInJpZ2h0aGFycG9vbnVwOyI6ICJcdTIxQzAiLAoJInJpZ2h0bGVmdGFycm93czsiOiAiXHUyMUM0IiwKCSJyaWdodGxlZnRoYXJwb29uczsiOiAiXHUyMUNDIiwKCSJyaWdodHJpZ2h0YXJyb3dzOyI6ICJcdTIxQzkiLAoJInJpZ2h0c3F1aWdhcnJvdzsiOiAiXHUyMTlEIiwKCSJSaWdodFRlZUFycm93OyI6ICJcdTIxQTYiLAoJIlJpZ2h0VGVlOyI6ICJcdTIyQTIiLAoJIlJpZ2h0VGVlVmVjdG9yOyI6ICJcdTI5NUIiLAoJInJpZ2h0dGhyZWV0aW1lczsiOiAiXHUyMkNDIiwKCSJSaWdodFRyaWFuZ2xlQmFyOyI6ICJcdTI5RDAiLAoJIlJpZ2h0VHJpYW5nbGU7IjogIlx1MjJCMyIsCgkiUmlnaHRUcmlhbmdsZUVxdWFsOyI6ICJcdTIyQjUiLAoJIlJpZ2h0VXBEb3duVmVjdG9yOyI6ICJcdTI5NEYiLAoJIlJpZ2h0VXBUZWVWZWN0b3I7IjogIlx1Mjk1QyIsCgkiUmlnaHRVcFZlY3RvckJhcjsiOiAiXHUyOTU0IiwKCSJSaWdodFVwVmVjdG9yOyI6ICJcdTIxQkUiLAoJIlJpZ2h0VmVjdG9yQmFyOyI6ICJcdTI5NTMiLAoJIlJpZ2h0VmVjdG9yOyI6ICJcdTIxQzAiLAoJInJpbmc7IjogIlx1MDJEQSIsCgkicmlzaW5nZG90c2VxOyI6ICJcdTIyNTMiLAoJInJsYXJyOyI6ICJcdTIxQzQiLAoJInJsaGFyOyI6ICJcdTIxQ0MiLAoJInJsbTsiOiAiXHUyMDBGIiwKCSJybW91c3RhY2hlOyI6ICJcdTIzQjEiLAoJInJtb3VzdDsiOiAiXHUyM0IxIiwKCSJybm1pZDsiOiAiXHUyQUVFIiwKCSJyb2FuZzsiOiAiXHUyN0VEIiwKCSJyb2FycjsiOiAiXHUyMUZFIiwKCSJyb2JyazsiOiAiXHUyN0U3IiwKCSJyb3BhcjsiOiAiXHUyOTg2IiwKCSJyb3BmOyI6ICJcdUQ4MzVcdURENjMiLAoJIlJvcGY7IjogIlx1MjExRCIsCgkicm9wbHVzOyI6ICJcdTJBMkUiLAoJInJvdGltZXM7IjogIlx1MkEzNSIsCgkiUm91bmRJbXBsaWVzOyI6ICJcdTI5NzAiLAoJInJwYXI7IjogIlx1MDAyOSIsCgkicnBhcmd0OyI6ICJcdTI5OTQiLAoJInJwcG9saW50OyI6ICJcdTJBMTIiLAoJInJyYXJyOyI6ICJcdTIxQzkiLAoJIlJyaWdodGFycm93OyI6ICJcdTIxREIiLAoJInJzYXF1bzsiOiAiXHUyMDNBIiwKCSJyc2NyOyI6ICJcdUQ4MzVcdURDQzciLAoJIlJzY3I7IjogIlx1MjExQiIsCgkicnNoOyI6ICJcdTIxQjEiLAoJIlJzaDsiOiAiXHUyMUIxIiwKCSJyc3FiOyI6ICJcdTAwNUQiLAoJInJzcXVvOyI6ICJcdTIwMTkiLAoJInJzcXVvcjsiOiAiXHUyMDE5IiwKCSJydGhyZWU7IjogIlx1MjJDQyIsCgkicnRpbWVzOyI6ICJcdTIyQ0EiLAoJInJ0cmk7IjogIlx1MjVCOSIsCgkicnRyaWU7IjogIlx1MjJCNSIsCgkicnRyaWY7IjogIlx1MjVCOCIsCgkicnRyaWx0cmk7IjogIlx1MjlDRSIsCgkiUnVsZURlbGF5ZWQ7IjogIlx1MjlGNCIsCgkicnVsdWhhcjsiOiAiXHUyOTY4IiwKCSJyeDsiOiAiXHUyMTFFIiwKCSJTYWN1dGU7IjogIlx1MDE1QSIsCgkic2FjdXRlOyI6ICJcdTAxNUIiLAoJInNicXVvOyI6ICJcdTIwMUEiLAoJInNjYXA7IjogIlx1MkFCOCIsCgkiU2Nhcm9uOyI6ICJcdTAxNjAiLAoJInNjYXJvbjsiOiAiXHUwMTYxIiwKCSJTYzsiOiAiXHUyQUJDIiwKCSJzYzsiOiAiXHUyMjdCIiwKCSJzY2N1ZTsiOiAiXHUyMjdEIiwKCSJzY2U7IjogIlx1MkFCMCIsCgkic2NFOyI6ICJcdTJBQjQiLAoJIlNjZWRpbDsiOiAiXHUwMTVFIiwKCSJzY2VkaWw7IjogIlx1MDE1RiIsCgkiU2NpcmM7IjogIlx1MDE1QyIsCgkic2NpcmM7IjogIlx1MDE1RCIsCgkic2NuYXA7IjogIlx1MkFCQSIsCgkic2NuRTsiOiAiXHUyQUI2IiwKCSJzY25zaW07IjogIlx1MjJFOSIsCgkic2Nwb2xpbnQ7IjogIlx1MkExMyIsCgkic2NzaW07IjogIlx1MjI3RiIsCgkiU2N5OyI6ICJcdTA0MjEiLAoJInNjeTsiOiAiXHUwNDQxIiwKCSJzZG90YjsiOiAiXHUyMkExIiwKCSJzZG90OyI6ICJcdTIyQzUiLAoJInNkb3RlOyI6ICJcdTJBNjYiLAoJInNlYXJoazsiOiAiXHUyOTI1IiwKCSJzZWFycjsiOiAiXHUyMTk4IiwKCSJzZUFycjsiOiAiXHUyMUQ4IiwKCSJzZWFycm93OyI6ICJcdTIxOTgiLAoJInNlY3Q7IjogIlx1MDBBNyIsCgkic2VjdCI6ICJcdTAwQTciLAoJInNlbWk7IjogIlx1MDAzQiIsCgkic2Vzd2FyOyI6ICJcdTI5MjkiLAoJInNldG1pbnVzOyI6ICJcdTIyMTYiLAoJInNldG1uOyI6ICJcdTIyMTYiLAoJInNleHQ7IjogIlx1MjczNiIsCgkiU2ZyOyI6ICJcdUQ4MzVcdUREMTYiLAoJInNmcjsiOiAiXHVEODM1XHVERDMwIiwKCSJzZnJvd247IjogIlx1MjMyMiIsCgkic2hhcnA7IjogIlx1MjY2RiIsCgkiU0hDSGN5OyI6ICJcdTA0MjkiLAoJInNoY2hjeTsiOiAiXHUwNDQ5IiwKCSJTSGN5OyI6ICJcdTA0MjgiLAoJInNoY3k7IjogIlx1MDQ0OCIsCgkiU2hvcnREb3duQXJyb3c7IjogIlx1MjE5MyIsCgkiU2hvcnRMZWZ0QXJyb3c7IjogIlx1MjE5MCIsCgkic2hvcnRtaWQ7IjogIlx1MjIyMyIsCgkic2hvcnRwYXJhbGxlbDsiOiAiXHUyMjI1IiwKCSJTaG9ydFJpZ2h0QXJyb3c7IjogIlx1MjE5MiIsCgkiU2hvcnRVcEFycm93OyI6ICJcdTIxOTEiLAoJInNoeTsiOiAiXHUwMEFEIiwKCSJzaHkiOiAiXHUwMEFEIiwKCSJTaWdtYTsiOiAiXHUwM0EzIiwKCSJzaWdtYTsiOiAiXHUwM0MzIiwKCSJzaWdtYWY7IjogIlx1MDNDMiIsCgkic2lnbWF2OyI6ICJcdTAzQzIiLAoJInNpbTsiOiAiXHUyMjNDIiwKCSJzaW1kb3Q7IjogIlx1MkE2QSIsCgkic2ltZTsiOiAiXHUyMjQzIiwKCSJzaW1lcTsiOiAiXHUyMjQzIiwKCSJzaW1nOyI6ICJcdTJBOUUiLAoJInNpbWdFOyI6ICJcdTJBQTAiLAoJInNpbWw7IjogIlx1MkE5RCIsCgkic2ltbEU7IjogIlx1MkE5RiIsCgkic2ltbmU7IjogIlx1MjI0NiIsCgkic2ltcGx1czsiOiAiXHUyQTI0IiwKCSJzaW1yYXJyOyI6ICJcdTI5NzIiLAoJInNsYXJyOyI6ICJcdTIxOTAiLAoJIlNtYWxsQ2lyY2xlOyI6ICJcdTIyMTgiLAoJInNtYWxsc2V0bWludXM7IjogIlx1MjIxNiIsCgkic21hc2hwOyI6ICJcdTJBMzMiLAoJInNtZXBhcnNsOyI6ICJcdTI5RTQiLAoJInNtaWQ7IjogIlx1MjIyMyIsCgkic21pbGU7IjogIlx1MjMyMyIsCgkic210OyI6ICJcdTJBQUEiLAoJInNtdGU7IjogIlx1MkFBQyIsCgkic210ZXM7IjogIlx1MkFBQ1x1RkUwMCIsCgkiU09GVGN5OyI6ICJcdTA0MkMiLAoJInNvZnRjeTsiOiAiXHUwNDRDIiwKCSJzb2xiYXI7IjogIlx1MjMzRiIsCgkic29sYjsiOiAiXHUyOUM0IiwKCSJzb2w7IjogIlx1MDAyRiIsCgkiU29wZjsiOiAiXHVEODM1XHVERDRBIiwKCSJzb3BmOyI6ICJcdUQ4MzVcdURENjQiLAoJInNwYWRlczsiOiAiXHUyNjYwIiwKCSJzcGFkZXN1aXQ7IjogIlx1MjY2MCIsCgkic3BhcjsiOiAiXHUyMjI1IiwKCSJzcWNhcDsiOiAiXHUyMjkzIiwKCSJzcWNhcHM7IjogIlx1MjI5M1x1RkUwMCIsCgkic3FjdXA7IjogIlx1MjI5NCIsCgkic3FjdXBzOyI6ICJcdTIyOTRcdUZFMDAiLAoJIlNxcnQ7IjogIlx1MjIxQSIsCgkic3FzdWI7IjogIlx1MjI4RiIsCgkic3FzdWJlOyI6ICJcdTIyOTEiLAoJInNxc3Vic2V0OyI6ICJcdTIyOEYiLAoJInNxc3Vic2V0ZXE7IjogIlx1MjI5MSIsCgkic3FzdXA7IjogIlx1MjI5MCIsCgkic3FzdXBlOyI6ICJcdTIyOTIiLAoJInNxc3Vwc2V0OyI6ICJcdTIyOTAiLAoJInNxc3Vwc2V0ZXE7IjogIlx1MjI5MiIsCgkic3F1YXJlOyI6ICJcdTI1QTEiLAoJIlNxdWFyZTsiOiAiXHUyNUExIiwKCSJTcXVhcmVJbnRlcnNlY3Rpb247IjogIlx1MjI5MyIsCgkiU3F1YXJlU3Vic2V0OyI6ICJcdTIyOEYiLAoJIlNxdWFyZVN1YnNldEVxdWFsOyI6ICJcdTIyOTEiLAoJIlNxdWFyZVN1cGVyc2V0OyI6ICJcdTIyOTAiLAoJIlNxdWFyZVN1cGVyc2V0RXF1YWw7IjogIlx1MjI5MiIsCgkiU3F1YXJlVW5pb247IjogIlx1MjI5NCIsCgkic3F1YXJmOyI6ICJcdTI1QUEiLAoJInNxdTsiOiAiXHUyNUExIiwKCSJzcXVmOyI6ICJcdTI1QUEiLAoJInNyYXJyOyI6ICJcdTIxOTIiLAoJIlNzY3I7IjogIlx1RDgzNVx1RENBRSIsCgkic3NjcjsiOiAiXHVEODM1XHVEQ0M4IiwKCSJzc2V0bW47IjogIlx1MjIxNiIsCgkic3NtaWxlOyI6ICJcdTIzMjMiLAoJInNzdGFyZjsiOiAiXHUyMkM2IiwKCSJTdGFyOyI6ICJcdTIyQzYiLAoJInN0YXI7IjogIlx1MjYwNiIsCgkic3RhcmY7IjogIlx1MjYwNSIsCgkic3RyYWlnaHRlcHNpbG9uOyI6ICJcdTAzRjUiLAoJInN0cmFpZ2h0cGhpOyI6ICJcdTAzRDUiLAoJInN0cm5zOyI6ICJcdTAwQUYiLAoJInN1YjsiOiAiXHUyMjgyIiwKCSJTdWI7IjogIlx1MjJEMCIsCgkic3ViZG90OyI6ICJcdTJBQkQiLAoJInN1YkU7IjogIlx1MkFDNSIsCgkic3ViZTsiOiAiXHUyMjg2IiwKCSJzdWJlZG90OyI6ICJcdTJBQzMiLAoJInN1Ym11bHQ7IjogIlx1MkFDMSIsCgkic3VibkU7IjogIlx1MkFDQiIsCgkic3VibmU7IjogIlx1MjI4QSIsCgkic3VicGx1czsiOiAiXHUyQUJGIiwKCSJzdWJyYXJyOyI6ICJcdTI5NzkiLAoJInN1YnNldDsiOiAiXHUyMjgyIiwKCSJTdWJzZXQ7IjogIlx1MjJEMCIsCgkic3Vic2V0ZXE7IjogIlx1MjI4NiIsCgkic3Vic2V0ZXFxOyI6ICJcdTJBQzUiLAoJIlN1YnNldEVxdWFsOyI6ICJcdTIyODYiLAoJInN1YnNldG5lcTsiOiAiXHUyMjhBIiwKCSJzdWJzZXRuZXFxOyI6ICJcdTJBQ0IiLAoJInN1YnNpbTsiOiAiXHUyQUM3IiwKCSJzdWJzdWI7IjogIlx1MkFENSIsCgkic3Vic3VwOyI6ICJcdTJBRDMiLAoJInN1Y2NhcHByb3g7IjogIlx1MkFCOCIsCgkic3VjYzsiOiAiXHUyMjdCIiwKCSJzdWNjY3VybHllcTsiOiAiXHUyMjdEIiwKCSJTdWNjZWVkczsiOiAiXHUyMjdCIiwKCSJTdWNjZWVkc0VxdWFsOyI6ICJcdTJBQjAiLAoJIlN1Y2NlZWRzU2xhbnRFcXVhbDsiOiAiXHUyMjdEIiwKCSJTdWNjZWVkc1RpbGRlOyI6ICJcdTIyN0YiLAoJInN1Y2NlcTsiOiAiXHUyQUIwIiwKCSJzdWNjbmFwcHJveDsiOiAiXHUyQUJBIiwKCSJzdWNjbmVxcTsiOiAiXHUyQUI2IiwKCSJzdWNjbnNpbTsiOiAiXHUyMkU5IiwKCSJzdWNjc2ltOyI6ICJcdTIyN0YiLAoJIlN1Y2hUaGF0OyI6ICJcdTIyMEIiLAoJInN1bTsiOiAiXHUyMjExIiwKCSJTdW07IjogIlx1MjIxMSIsCgkic3VuZzsiOiAiXHUyNjZBIiwKCSJzdXAxOyI6ICJcdTAwQjkiLAoJInN1cDEiOiAiXHUwMEI5IiwKCSJzdXAyOyI6ICJcdTAwQjIiLAoJInN1cDIiOiAiXHUwMEIyIiwKCSJzdXAzOyI6ICJcdTAwQjMiLAoJInN1cDMiOiAiXHUwMEIzIiwKCSJzdXA7IjogIlx1MjI4MyIsCgkiU3VwOyI6ICJcdTIyRDEiLAoJInN1cGRvdDsiOiAiXHUyQUJFIiwKCSJzdXBkc3ViOyI6ICJcdTJBRDgiLAoJInN1cEU7IjogIlx1MkFDNiIsCgkic3VwZTsiOiAiXHUyMjg3IiwKCSJzdXBlZG90OyI6ICJcdTJBQzQiLAoJIlN1cGVyc2V0OyI6ICJcdTIyODMiLAoJIlN1cGVyc2V0RXF1YWw7IjogIlx1MjI4NyIsCgkic3VwaHNvbDsiOiAiXHUyN0M5IiwKCSJzdXBoc3ViOyI6ICJcdTJBRDciLAoJInN1cGxhcnI7IjogIlx1Mjk3QiIsCgkic3VwbXVsdDsiOiAiXHUyQUMyIiwKCSJzdXBuRTsiOiAiXHUyQUNDIiwKCSJzdXBuZTsiOiAiXHUyMjhCIiwKCSJzdXBwbHVzOyI6ICJcdTJBQzAiLAoJInN1cHNldDsiOiAiXHUyMjgzIiwKCSJTdXBzZXQ7IjogIlx1MjJEMSIsCgkic3Vwc2V0ZXE7IjogIlx1MjI4NyIsCgkic3Vwc2V0ZXFxOyI6ICJcdTJBQzYiLAoJInN1cHNldG5lcTsiOiAiXHUyMjhCIiwKCSJzdXBzZXRuZXFxOyI6ICJcdTJBQ0MiLAoJInN1cHNpbTsiOiAiXHUyQUM4IiwKCSJzdXBzdWI7IjogIlx1MkFENCIsCgkic3Vwc3VwOyI6ICJcdTJBRDYiLAoJInN3YXJoazsiOiAiXHUyOTI2IiwKCSJzd2FycjsiOiAiXHUyMTk5IiwKCSJzd0FycjsiOiAiXHUyMUQ5IiwKCSJzd2Fycm93OyI6ICJcdTIxOTkiLAoJInN3bndhcjsiOiAiXHUyOTJBIiwKCSJzemxpZzsiOiAiXHUwMERGIiwKCSJzemxpZyI6ICJcdTAwREYiLAoJIlRhYjsiOiAiXHUwMDA5IiwKCSJ0YXJnZXQ7IjogIlx1MjMxNiIsCgkiVGF1OyI6ICJcdTAzQTQiLAoJInRhdTsiOiAiXHUwM0M0IiwKCSJ0YnJrOyI6ICJcdTIzQjQiLAoJIlRjYXJvbjsiOiAiXHUwMTY0IiwKCSJ0Y2Fyb247IjogIlx1MDE2NSIsCgkiVGNlZGlsOyI6ICJcdTAxNjIiLAoJInRjZWRpbDsiOiAiXHUwMTYzIiwKCSJUY3k7IjogIlx1MDQyMiIsCgkidGN5OyI6ICJcdTA0NDIiLAoJInRkb3Q7IjogIlx1MjBEQiIsCgkidGVscmVjOyI6ICJcdTIzMTUiLAoJIlRmcjsiOiAiXHVEODM1XHVERDE3IiwKCSJ0ZnI7IjogIlx1RDgzNVx1REQzMSIsCgkidGhlcmU0OyI6ICJcdTIyMzQiLAoJInRoZXJlZm9yZTsiOiAiXHUyMjM0IiwKCSJUaGVyZWZvcmU7IjogIlx1MjIzNCIsCgkiVGhldGE7IjogIlx1MDM5OCIsCgkidGhldGE7IjogIlx1MDNCOCIsCgkidGhldGFzeW07IjogIlx1MDNEMSIsCgkidGhldGF2OyI6ICJcdTAzRDEiLAoJInRoaWNrYXBwcm94OyI6ICJcdTIyNDgiLAoJInRoaWNrc2ltOyI6ICJcdTIyM0MiLAoJIlRoaWNrU3BhY2U7IjogIlx1MjA1Rlx1MjAwQSIsCgkiVGhpblNwYWNlOyI6ICJcdTIwMDkiLAoJInRoaW5zcDsiOiAiXHUyMDA5IiwKCSJ0aGthcDsiOiAiXHUyMjQ4IiwKCSJ0aGtzaW07IjogIlx1MjIzQyIsCgkiVEhPUk47IjogIlx1MDBERSIsCgkiVEhPUk4iOiAiXHUwMERFIiwKCSJ0aG9ybjsiOiAiXHUwMEZFIiwKCSJ0aG9ybiI6ICJcdTAwRkUiLAoJInRpbGRlOyI6ICJcdTAyREMiLAoJIlRpbGRlOyI6ICJcdTIyM0MiLAoJIlRpbGRlRXF1YWw7IjogIlx1MjI0MyIsCgkiVGlsZGVGdWxsRXF1YWw7IjogIlx1MjI0NSIsCgkiVGlsZGVUaWxkZTsiOiAiXHUyMjQ4IiwKCSJ0aW1lc2JhcjsiOiAiXHUyQTMxIiwKCSJ0aW1lc2I7IjogIlx1MjJBMCIsCgkidGltZXM7IjogIlx1MDBENyIsCgkidGltZXMiOiAiXHUwMEQ3IiwKCSJ0aW1lc2Q7IjogIlx1MkEzMCIsCgkidGludDsiOiAiXHUyMjJEIiwKCSJ0b2VhOyI6ICJcdTI5MjgiLAoJInRvcGJvdDsiOiAiXHUyMzM2IiwKCSJ0b3BjaXI7IjogIlx1MkFGMSIsCgkidG9wOyI6ICJcdTIyQTQiLAoJIlRvcGY7IjogIlx1RDgzNVx1REQ0QiIsCgkidG9wZjsiOiAiXHVEODM1XHVERDY1IiwKCSJ0b3Bmb3JrOyI6ICJcdTJBREEiLAoJInRvc2E7IjogIlx1MjkyOSIsCgkidHByaW1lOyI6ICJcdTIwMzQiLAoJInRyYWRlOyI6ICJcdTIxMjIiLAoJIlRSQURFOyI6ICJcdTIxMjIiLAoJInRyaWFuZ2xlOyI6ICJcdTI1QjUiLAoJInRyaWFuZ2xlZG93bjsiOiAiXHUyNUJGIiwKCSJ0cmlhbmdsZWxlZnQ7IjogIlx1MjVDMyIsCgkidHJpYW5nbGVsZWZ0ZXE7IjogIlx1MjJCNCIsCgkidHJpYW5nbGVxOyI6ICJcdTIyNUMiLAoJInRyaWFuZ2xlcmlnaHQ7IjogIlx1MjVCOSIsCgkidHJpYW5nbGVyaWdodGVxOyI6ICJcdTIyQjUiLAoJInRyaWRvdDsiOiAiXHUyNUVDIiwKCSJ0cmllOyI6ICJcdTIyNUMiLAoJInRyaW1pbnVzOyI6ICJcdTJBM0EiLAoJIlRyaXBsZURvdDsiOiAiXHUyMERCIiwKCSJ0cmlwbHVzOyI6ICJcdTJBMzkiLAoJInRyaXNiOyI6ICJcdTI5Q0QiLAoJInRyaXRpbWU7IjogIlx1MkEzQiIsCgkidHJwZXppdW07IjogIlx1MjNFMiIsCgkiVHNjcjsiOiAiXHVEODM1XHVEQ0FGIiwKCSJ0c2NyOyI6ICJcdUQ4MzVcdURDQzkiLAoJIlRTY3k7IjogIlx1MDQyNiIsCgkidHNjeTsiOiAiXHUwNDQ2IiwKCSJUU0hjeTsiOiAiXHUwNDBCIiwKCSJ0c2hjeTsiOiAiXHUwNDVCIiwKCSJUc3Ryb2s7IjogIlx1MDE2NiIsCgkidHN0cm9rOyI6ICJcdTAxNjciLAoJInR3aXh0OyI6ICJcdTIyNkMiLAoJInR3b2hlYWRsZWZ0YXJyb3c7IjogIlx1MjE5RSIsCgkidHdvaGVhZHJpZ2h0YXJyb3c7IjogIlx1MjFBMCIsCgkiVWFjdXRlOyI6ICJcdTAwREEiLAoJIlVhY3V0ZSI6ICJcdTAwREEiLAoJInVhY3V0ZTsiOiAiXHUwMEZBIiwKCSJ1YWN1dGUiOiAiXHUwMEZBIiwKCSJ1YXJyOyI6ICJcdTIxOTEiLAoJIlVhcnI7IjogIlx1MjE5RiIsCgkidUFycjsiOiAiXHUyMUQxIiwKCSJVYXJyb2NpcjsiOiAiXHUyOTQ5IiwKCSJVYnJjeTsiOiAiXHUwNDBFIiwKCSJ1YnJjeTsiOiAiXHUwNDVFIiwKCSJVYnJldmU7IjogIlx1MDE2QyIsCgkidWJyZXZlOyI6ICJcdTAxNkQiLAoJIlVjaXJjOyI6ICJcdTAwREIiLAoJIlVjaXJjIjogIlx1MDBEQiIsCgkidWNpcmM7IjogIlx1MDBGQiIsCgkidWNpcmMiOiAiXHUwMEZCIiwKCSJVY3k7IjogIlx1MDQyMyIsCgkidWN5OyI6ICJcdTA0NDMiLAoJInVkYXJyOyI6ICJcdTIxQzUiLAoJIlVkYmxhYzsiOiAiXHUwMTcwIiwKCSJ1ZGJsYWM7IjogIlx1MDE3MSIsCgkidWRoYXI7IjogIlx1Mjk2RSIsCgkidWZpc2h0OyI6ICJcdTI5N0UiLAoJIlVmcjsiOiAiXHVEODM1XHVERDE4IiwKCSJ1ZnI7IjogIlx1RDgzNVx1REQzMiIsCgkiVWdyYXZlOyI6ICJcdTAwRDkiLAoJIlVncmF2ZSI6ICJcdTAwRDkiLAoJInVncmF2ZTsiOiAiXHUwMEY5IiwKCSJ1Z3JhdmUiOiAiXHUwMEY5IiwKCSJ1SGFyOyI6ICJcdTI5NjMiLAoJInVoYXJsOyI6ICJcdTIxQkYiLAoJInVoYXJyOyI6ICJcdTIxQkUiLAoJInVoYmxrOyI6ICJcdTI1ODAiLAoJInVsY29ybjsiOiAiXHUyMzFDIiwKCSJ1bGNvcm5lcjsiOiAiXHUyMzFDIiwKCSJ1bGNyb3A7IjogIlx1MjMwRiIsCgkidWx0cmk7IjogIlx1MjVGOCIsCgkiVW1hY3I7IjogIlx1MDE2QSIsCgkidW1hY3I7IjogIlx1MDE2QiIsCgkidW1sOyI6ICJcdTAwQTgiLAoJInVtbCI6ICJcdTAwQTgiLAoJIlVuZGVyQmFyOyI6ICJcdTAwNUYiLAoJIlVuZGVyQnJhY2U7IjogIlx1MjNERiIsCgkiVW5kZXJCcmFja2V0OyI6ICJcdTIzQjUiLAoJIlVuZGVyUGFyZW50aGVzaXM7IjogIlx1MjNERCIsCgkiVW5pb247IjogIlx1MjJDMyIsCgkiVW5pb25QbHVzOyI6ICJcdTIyOEUiLAoJIlVvZ29uOyI6ICJcdTAxNzIiLAoJInVvZ29uOyI6ICJcdTAxNzMiLAoJIlVvcGY7IjogIlx1RDgzNVx1REQ0QyIsCgkidW9wZjsiOiAiXHVEODM1XHVERDY2IiwKCSJVcEFycm93QmFyOyI6ICJcdTI5MTIiLAoJInVwYXJyb3c7IjogIlx1MjE5MSIsCgkiVXBBcnJvdzsiOiAiXHUyMTkxIiwKCSJVcGFycm93OyI6ICJcdTIxRDEiLAoJIlVwQXJyb3dEb3duQXJyb3c7IjogIlx1MjFDNSIsCgkidXBkb3duYXJyb3c7IjogIlx1MjE5NSIsCgkiVXBEb3duQXJyb3c7IjogIlx1MjE5NSIsCgkiVXBkb3duYXJyb3c7IjogIlx1MjFENSIsCgkiVXBFcXVpbGlicml1bTsiOiAiXHUyOTZFIiwKCSJ1cGhhcnBvb25sZWZ0OyI6ICJcdTIxQkYiLAoJInVwaGFycG9vbnJpZ2h0OyI6ICJcdTIxQkUiLAoJInVwbHVzOyI6ICJcdTIyOEUiLAoJIlVwcGVyTGVmdEFycm93OyI6ICJcdTIxOTYiLAoJIlVwcGVyUmlnaHRBcnJvdzsiOiAiXHUyMTk3IiwKCSJ1cHNpOyI6ICJcdTAzQzUiLAoJIlVwc2k7IjogIlx1MDNEMiIsCgkidXBzaWg7IjogIlx1MDNEMiIsCgkiVXBzaWxvbjsiOiAiXHUwM0E1IiwKCSJ1cHNpbG9uOyI6ICJcdTAzQzUiLAoJIlVwVGVlQXJyb3c7IjogIlx1MjFBNSIsCgkiVXBUZWU7IjogIlx1MjJBNSIsCgkidXB1cGFycm93czsiOiAiXHUyMUM4IiwKCSJ1cmNvcm47IjogIlx1MjMxRCIsCgkidXJjb3JuZXI7IjogIlx1MjMxRCIsCgkidXJjcm9wOyI6ICJcdTIzMEUiLAoJIlVyaW5nOyI6ICJcdTAxNkUiLAoJInVyaW5nOyI6ICJcdTAxNkYiLAoJInVydHJpOyI6ICJcdTI1RjkiLAoJIlVzY3I7IjogIlx1RDgzNVx1RENCMCIsCgkidXNjcjsiOiAiXHVEODM1XHVEQ0NBIiwKCSJ1dGRvdDsiOiAiXHUyMkYwIiwKCSJVdGlsZGU7IjogIlx1MDE2OCIsCgkidXRpbGRlOyI6ICJcdTAxNjkiLAoJInV0cmk7IjogIlx1MjVCNSIsCgkidXRyaWY7IjogIlx1MjVCNCIsCgkidXVhcnI7IjogIlx1MjFDOCIsCgkiVXVtbDsiOiAiXHUwMERDIiwKCSJVdW1sIjogIlx1MDBEQyIsCgkidXVtbDsiOiAiXHUwMEZDIiwKCSJ1dW1sIjogIlx1MDBGQyIsCgkidXdhbmdsZTsiOiAiXHUyOUE3IiwKCSJ2YW5ncnQ7IjogIlx1Mjk5QyIsCgkidmFyZXBzaWxvbjsiOiAiXHUwM0Y1IiwKCSJ2YXJrYXBwYTsiOiAiXHUwM0YwIiwKCSJ2YXJub3RoaW5nOyI6ICJcdTIyMDUiLAoJInZhcnBoaTsiOiAiXHUwM0Q1IiwKCSJ2YXJwaTsiOiAiXHUwM0Q2IiwKCSJ2YXJwcm9wdG87IjogIlx1MjIxRCIsCgkidmFycjsiOiAiXHUyMTk1IiwKCSJ2QXJyOyI6ICJcdTIxRDUiLAoJInZhcnJobzsiOiAiXHUwM0YxIiwKCSJ2YXJzaWdtYTsiOiAiXHUwM0MyIiwKCSJ2YXJzdWJzZXRuZXE7IjogIlx1MjI4QVx1RkUwMCIsCgkidmFyc3Vic2V0bmVxcTsiOiAiXHUyQUNCXHVGRTAwIiwKCSJ2YXJzdXBzZXRuZXE7IjogIlx1MjI4Qlx1RkUwMCIsCgkidmFyc3Vwc2V0bmVxcTsiOiAiXHUyQUNDXHVGRTAwIiwKCSJ2YXJ0aGV0YTsiOiAiXHUwM0QxIiwKCSJ2YXJ0cmlhbmdsZWxlZnQ7IjogIlx1MjJCMiIsCgkidmFydHJpYW5nbGVyaWdodDsiOiAiXHUyMkIzIiwKCSJ2QmFyOyI6ICJcdTJBRTgiLAoJIlZiYXI7IjogIlx1MkFFQiIsCgkidkJhcnY7IjogIlx1MkFFOSIsCgkiVmN5OyI6ICJcdTA0MTIiLAoJInZjeTsiOiAiXHUwNDMyIiwKCSJ2ZGFzaDsiOiAiXHUyMkEyIiwKCSJ2RGFzaDsiOiAiXHUyMkE4IiwKCSJWZGFzaDsiOiAiXHUyMkE5IiwKCSJWRGFzaDsiOiAiXHUyMkFCIiwKCSJWZGFzaGw7IjogIlx1MkFFNiIsCgkidmVlYmFyOyI6ICJcdTIyQkIiLAoJInZlZTsiOiAiXHUyMjI4IiwKCSJWZWU7IjogIlx1MjJDMSIsCgkidmVlZXE7IjogIlx1MjI1QSIsCgkidmVsbGlwOyI6ICJcdTIyRUUiLAoJInZlcmJhcjsiOiAiXHUwMDdDIiwKCSJWZXJiYXI7IjogIlx1MjAxNiIsCgkidmVydDsiOiAiXHUwMDdDIiwKCSJWZXJ0OyI6ICJcdTIwMTYiLAoJIlZlcnRpY2FsQmFyOyI6ICJcdTIyMjMiLAoJIlZlcnRpY2FsTGluZTsiOiAiXHUwMDdDIiwKCSJWZXJ0aWNhbFNlcGFyYXRvcjsiOiAiXHUyNzU4IiwKCSJWZXJ0aWNhbFRpbGRlOyI6ICJcdTIyNDAiLAoJIlZlcnlUaGluU3BhY2U7IjogIlx1MjAwQSIsCgkiVmZyOyI6ICJcdUQ4MzVcdUREMTkiLAoJInZmcjsiOiAiXHVEODM1XHVERDMzIiwKCSJ2bHRyaTsiOiAiXHUyMkIyIiwKCSJ2bnN1YjsiOiAiXHUyMjgyXHUyMEQyIiwKCSJ2bnN1cDsiOiAiXHUyMjgzXHUyMEQyIiwKCSJWb3BmOyI6ICJcdUQ4MzVcdURENEQiLAoJInZvcGY7IjogIlx1RDgzNVx1REQ2NyIsCgkidnByb3A7IjogIlx1MjIxRCIsCgkidnJ0cmk7IjogIlx1MjJCMyIsCgkiVnNjcjsiOiAiXHVEODM1XHVEQ0IxIiwKCSJ2c2NyOyI6ICJcdUQ4MzVcdURDQ0IiLAoJInZzdWJuRTsiOiAiXHUyQUNCXHVGRTAwIiwKCSJ2c3VibmU7IjogIlx1MjI4QVx1RkUwMCIsCgkidnN1cG5FOyI6ICJcdTJBQ0NcdUZFMDAiLAoJInZzdXBuZTsiOiAiXHUyMjhCXHVGRTAwIiwKCSJWdmRhc2g7IjogIlx1MjJBQSIsCgkidnppZ3phZzsiOiAiXHUyOTlBIiwKCSJXY2lyYzsiOiAiXHUwMTc0IiwKCSJ3Y2lyYzsiOiAiXHUwMTc1IiwKCSJ3ZWRiYXI7IjogIlx1MkE1RiIsCgkid2VkZ2U7IjogIlx1MjIyNyIsCgkiV2VkZ2U7IjogIlx1MjJDMCIsCgkid2VkZ2VxOyI6ICJcdTIyNTkiLAoJIndlaWVycDsiOiAiXHUyMTE4IiwKCSJXZnI7IjogIlx1RDgzNVx1REQxQSIsCgkid2ZyOyI6ICJcdUQ4MzVcdUREMzQiLAoJIldvcGY7IjogIlx1RDgzNVx1REQ0RSIsCgkid29wZjsiOiAiXHVEODM1XHVERDY4IiwKCSJ3cDsiOiAiXHUyMTE4IiwKCSJ3cjsiOiAiXHUyMjQwIiwKCSJ3cmVhdGg7IjogIlx1MjI0MCIsCgkiV3NjcjsiOiAiXHVEODM1XHVEQ0IyIiwKCSJ3c2NyOyI6ICJcdUQ4MzVcdURDQ0MiLAoJInhjYXA7IjogIlx1MjJDMiIsCgkieGNpcmM7IjogIlx1MjVFRiIsCgkieGN1cDsiOiAiXHUyMkMzIiwKCSJ4ZHRyaTsiOiAiXHUyNUJEIiwKCSJYZnI7IjogIlx1RDgzNVx1REQxQiIsCgkieGZyOyI6ICJcdUQ4MzVcdUREMzUiLAoJInhoYXJyOyI6ICJcdTI3RjciLAoJInhoQXJyOyI6ICJcdTI3RkEiLAoJIlhpOyI6ICJcdTAzOUUiLAoJInhpOyI6ICJcdTAzQkUiLAoJInhsYXJyOyI6ICJcdTI3RjUiLAoJInhsQXJyOyI6ICJcdTI3RjgiLAoJInhtYXA7IjogIlx1MjdGQyIsCgkieG5pczsiOiAiXHUyMkZCIiwKCSJ4b2RvdDsiOiAiXHUyQTAwIiwKCSJYb3BmOyI6ICJcdUQ4MzVcdURENEYiLAoJInhvcGY7IjogIlx1RDgzNVx1REQ2OSIsCgkieG9wbHVzOyI6ICJcdTJBMDEiLAoJInhvdGltZTsiOiAiXHUyQTAyIiwKCSJ4cmFycjsiOiAiXHUyN0Y2IiwKCSJ4ckFycjsiOiAiXHUyN0Y5IiwKCSJYc2NyOyI6ICJcdUQ4MzVcdURDQjMiLAoJInhzY3I7IjogIlx1RDgzNVx1RENDRCIsCgkieHNxY3VwOyI6ICJcdTJBMDYiLAoJInh1cGx1czsiOiAiXHUyQTA0IiwKCSJ4dXRyaTsiOiAiXHUyNUIzIiwKCSJ4dmVlOyI6ICJcdTIyQzEiLAoJInh3ZWRnZTsiOiAiXHUyMkMwIiwKCSJZYWN1dGU7IjogIlx1MDBERCIsCgkiWWFjdXRlIjogIlx1MDBERCIsCgkieWFjdXRlOyI6ICJcdTAwRkQiLAoJInlhY3V0ZSI6ICJcdTAwRkQiLAoJIllBY3k7IjogIlx1MDQyRiIsCgkieWFjeTsiOiAiXHUwNDRGIiwKCSJZY2lyYzsiOiAiXHUwMTc2IiwKCSJ5Y2lyYzsiOiAiXHUwMTc3IiwKCSJZY3k7IjogIlx1MDQyQiIsCgkieWN5OyI6ICJcdTA0NEIiLAoJInllbjsiOiAiXHUwMEE1IiwKCSJ5ZW4iOiAiXHUwMEE1IiwKCSJZZnI7IjogIlx1RDgzNVx1REQxQyIsCgkieWZyOyI6ICJcdUQ4MzVcdUREMzYiLAoJIllJY3k7IjogIlx1MDQwNyIsCgkieWljeTsiOiAiXHUwNDU3IiwKCSJZb3BmOyI6ICJcdUQ4MzVcdURENTAiLAoJInlvcGY7IjogIlx1RDgzNVx1REQ2QSIsCgkiWXNjcjsiOiAiXHVEODM1XHVEQ0I0IiwKCSJ5c2NyOyI6ICJcdUQ4MzVcdURDQ0UiLAoJIllVY3k7IjogIlx1MDQyRSIsCgkieXVjeTsiOiAiXHUwNDRFIiwKCSJ5dW1sOyI6ICJcdTAwRkYiLAoJInl1bWwiOiAiXHUwMEZGIiwKCSJZdW1sOyI6ICJcdTAxNzgiLAoJIlphY3V0ZTsiOiAiXHUwMTc5IiwKCSJ6YWN1dGU7IjogIlx1MDE3QSIsCgkiWmNhcm9uOyI6ICJcdTAxN0QiLAoJInpjYXJvbjsiOiAiXHUwMTdFIiwKCSJaY3k7IjogIlx1MDQxNyIsCgkiemN5OyI6ICJcdTA0MzciLAoJIlpkb3Q7IjogIlx1MDE3QiIsCgkiemRvdDsiOiAiXHUwMTdDIiwKCSJ6ZWV0cmY7IjogIlx1MjEyOCIsCgkiWmVyb1dpZHRoU3BhY2U7IjogIlx1MjAwQiIsCgkiWmV0YTsiOiAiXHUwMzk2IiwKCSJ6ZXRhOyI6ICJcdTAzQjYiLAoJInpmcjsiOiAiXHVEODM1XHVERDM3IiwKCSJaZnI7IjogIlx1MjEyOCIsCgkiWkhjeTsiOiAiXHUwNDE2IiwKCSJ6aGN5OyI6ICJcdTA0MzYiLAoJInppZ3JhcnI7IjogIlx1MjFERCIsCgkiem9wZjsiOiAiXHVEODM1XHVERDZCIiwKCSJab3BmOyI6ICJcdTIxMjQiLAoJIlpzY3I7IjogIlx1RDgzNVx1RENCNSIsCgkienNjcjsiOiAiXHVEODM1XHVEQ0NGIiwKCSJ6d2o7IjogIlx1MjAwRCIsCgkienduajsiOiAiXHUyMDBDIgp9OwoKfSwKe31dLAoxMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CnZhciB1dGlsID0gX2RlcmVxXygndXRpbC8nKTsKCnZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7CnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwoKdmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7Cgphc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7CiAgdGhpcy5uYW1lID0gJ0Fzc2VydGlvbkVycm9yJzsKICB0aGlzLmFjdHVhbCA9IG9wdGlvbnMuYWN0dWFsOwogIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkOwogIHRoaXMub3BlcmF0b3IgPSBvcHRpb25zLm9wZXJhdG9yOwogIGlmIChvcHRpb25zLm1lc3NhZ2UpIHsKICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTsKICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IGZhbHNlOwogIH0gZWxzZSB7CiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpOwogICAgdGhpcy5nZW5lcmF0ZWRNZXNzYWdlID0gdHJ1ZTsKICB9CiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7CgogIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgewogICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgc3RhY2tTdGFydEZ1bmN0aW9uKTsKICB9CiAgZWxzZSB7CiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7CiAgICBpZiAoZXJyLnN0YWNrKSB7CiAgICAgIHZhciBvdXQgPSBlcnIuc3RhY2s7CiAgICAgIHZhciBmbl9uYW1lID0gc3RhY2tTdGFydEZ1bmN0aW9uLm5hbWU7CiAgICAgIHZhciBpZHggPSBvdXQuaW5kZXhPZignXG4nICsgZm5fbmFtZSk7CiAgICAgIGlmIChpZHggPj0gMCkgewogICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXG4nLCBpZHggKyAxKTsKICAgICAgICBvdXQgPSBvdXQuc3Vic3RyaW5nKG5leHRfbGluZSArIDEpOwogICAgICB9CgogICAgICB0aGlzLnN0YWNrID0gb3V0OwogICAgfQogIH0KfTsKdXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTsKCmZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHsKICBpZiAodXRpbC5pc1VuZGVmaW5lZCh2YWx1ZSkpIHsKICAgIHJldHVybiAnJyArIHZhbHVlOwogIH0KICBpZiAodXRpbC5pc051bWJlcih2YWx1ZSkgJiYgKGlzTmFOKHZhbHVlKSB8fCAhaXNGaW5pdGUodmFsdWUpKSkgewogICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CiAgfQogIGlmICh1dGlsLmlzRnVuY3Rpb24odmFsdWUpIHx8IHV0aWwuaXNSZWdFeHAodmFsdWUpKSB7CiAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKICB9CiAgcmV0dXJuIHZhbHVlOwp9CgpmdW5jdGlvbiB0cnVuY2F0ZShzLCBuKSB7CiAgaWYgKHV0aWwuaXNTdHJpbmcocykpIHsKICAgIHJldHVybiBzLmxlbmd0aCA8IG4gPyBzIDogcy5zbGljZSgwLCBuKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHM7CiAgfQp9CgpmdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHsKICByZXR1cm4gdHJ1bmNhdGUoSlNPTi5zdHJpbmdpZnkoc2VsZi5hY3R1YWwsIHJlcGxhY2VyKSwgMTI4KSArICcgJyArCiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgKwogICAgICAgICB0cnVuY2F0ZShKU09OLnN0cmluZ2lmeShzZWxmLmV4cGVjdGVkLCByZXBsYWNlciksIDEyOCk7Cn0KCmZ1bmN0aW9uIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IsIHN0YWNrU3RhcnRGdW5jdGlvbikgewogIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoewogICAgbWVzc2FnZTogbWVzc2FnZSwKICAgIGFjdHVhbDogYWN0dWFsLAogICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLAogICAgb3BlcmF0b3I6IG9wZXJhdG9yLAogICAgc3RhY2tTdGFydEZ1bmN0aW9uOiBzdGFja1N0YXJ0RnVuY3Rpb24KICB9KTsKfQphc3NlcnQuZmFpbCA9IGZhaWw7CgpmdW5jdGlvbiBvayh2YWx1ZSwgbWVzc2FnZSkgewogIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7Cn0KYXNzZXJ0Lm9rID0gb2s7Cgphc3NlcnQuZXF1YWwgPSBmdW5jdGlvbiBlcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7CiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpOwp9OwoKYXNzZXJ0Lm5vdEVxdWFsID0gZnVuY3Rpb24gbm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkgewogIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHsKICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9JywgYXNzZXJ0Lm5vdEVxdWFsKTsKICB9Cn07Cgphc3NlcnQuZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHsKICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCkpIHsKICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ2RlZXBFcXVhbCcsIGFzc2VydC5kZWVwRXF1YWwpOwogIH0KfTsKCmZ1bmN0aW9uIF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCkgewogIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7CiAgICByZXR1cm4gdHJ1ZTsKCiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGFjdHVhbCkgJiYgdXRpbC5pc0J1ZmZlcihleHBlY3RlZCkpIHsKICAgIGlmIChhY3R1YWwubGVuZ3RoICE9IGV4cGVjdGVkLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChhY3R1YWxbaV0gIT09IGV4cGVjdGVkW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmICh1dGlsLmlzRGF0ZShhY3R1YWwpICYmIHV0aWwuaXNEYXRlKGV4cGVjdGVkKSkgewogICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTsKICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkgewogICAgcmV0dXJuIGFjdHVhbC5zb3VyY2UgPT09IGV4cGVjdGVkLnNvdXJjZSAmJgogICAgICAgICAgIGFjdHVhbC5nbG9iYWwgPT09IGV4cGVjdGVkLmdsb2JhbCAmJgogICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJgogICAgICAgICAgIGFjdHVhbC5sYXN0SW5kZXggPT09IGV4cGVjdGVkLmxhc3RJbmRleCAmJgogICAgICAgICAgIGFjdHVhbC5pZ25vcmVDYXNlID09PSBleHBlY3RlZC5pZ25vcmVDYXNlOwogIH0gZWxzZSBpZiAoIXV0aWwuaXNPYmplY3QoYWN0dWFsKSAmJiAhdXRpbC5pc09iamVjdChleHBlY3RlZCkpIHsKICAgIHJldHVybiBhY3R1YWwgPT0gZXhwZWN0ZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkKTsKICB9Cn0KCmZ1bmN0aW9uIGlzQXJndW1lbnRzKG9iamVjdCkgewogIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJzsKfQoKZnVuY3Rpb24gb2JqRXF1aXYoYSwgYikgewogIGlmICh1dGlsLmlzTnVsbE9yVW5kZWZpbmVkKGEpIHx8IHV0aWwuaXNOdWxsT3JVbmRlZmluZWQoYikpCiAgICByZXR1cm4gZmFsc2U7CiAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkgcmV0dXJuIGZhbHNlOwogIGlmIChpc0FyZ3VtZW50cyhhKSkgewogICAgaWYgKCFpc0FyZ3VtZW50cyhiKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBhID0gcFNsaWNlLmNhbGwoYSk7CiAgICBiID0gcFNsaWNlLmNhbGwoYik7CiAgICByZXR1cm4gX2RlZXBFcXVhbChhLCBiKTsKICB9CiAgdHJ5IHsKICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksCiAgICAgICAga2IgPSBvYmplY3RLZXlzKGIpLAogICAgICAgIGtleSwgaTsKICB9IGNhdGNoIChlKSB7Ly9oYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndAogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoa2EubGVuZ3RoICE9IGtiLmxlbmd0aCkKICAgIHJldHVybiBmYWxzZTsKICBrYS5zb3J0KCk7CiAga2Iuc29ydCgpOwogIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICBpZiAoa2FbaV0gIT0ga2JbaV0pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgIGtleSA9IGthW2ldOwogICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldKSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7CiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCkpIHsKICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpOwogIH0KfTsKCmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHsKICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkgewogICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT09JywgYXNzZXJ0LnN0cmljdEVxdWFsKTsKICB9Cn07Cgphc3NlcnQubm90U3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7CiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHsKICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7CiAgfQp9OwoKZnVuY3Rpb24gZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkgewogIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHsKICAgIHJldHVybiBleHBlY3RlZC50ZXN0KGFjdHVhbCk7CiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBleHBlY3RlZCkgewogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIGlmIChleHBlY3RlZC5jYWxsKHt9LCBhY3R1YWwpID09PSB0cnVlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gX3Rocm93cyhzaG91bGRUaHJvdywgYmxvY2ssIGV4cGVjdGVkLCBtZXNzYWdlKSB7CiAgdmFyIGFjdHVhbDsKCiAgaWYgKHV0aWwuaXNTdHJpbmcoZXhwZWN0ZWQpKSB7CiAgICBtZXNzYWdlID0gZXhwZWN0ZWQ7CiAgICBleHBlY3RlZCA9IG51bGw7CiAgfQoKICB0cnkgewogICAgYmxvY2soKTsKICB9IGNhdGNoIChlKSB7CiAgICBhY3R1YWwgPSBlOwogIH0KCiAgbWVzc2FnZSA9IChleHBlY3RlZCAmJiBleHBlY3RlZC5uYW1lID8gJyAoJyArIGV4cGVjdGVkLm5hbWUgKyAnKS4nIDogJy4nKSArCiAgICAgICAgICAgIChtZXNzYWdlID8gJyAnICsgbWVzc2FnZSA6ICcuJyk7CgogIGlmIChzaG91bGRUaHJvdyAmJiAhYWN0dWFsKSB7CiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsICdNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbicgKyBtZXNzYWdlKTsKICB9CgogIGlmICghc2hvdWxkVGhyb3cgJiYgZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHsKICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7CiAgfQoKICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJgogICAgICAhZXhwZWN0ZWRFeGNlcHRpb24oYWN0dWFsLCBleHBlY3RlZCkpIHx8ICghc2hvdWxkVGhyb3cgJiYgYWN0dWFsKSkgewogICAgdGhyb3cgYWN0dWFsOwogIH0KfQoKYXNzZXJ0LnRocm93cyA9IGZ1bmN0aW9uKGJsb2NrLCAvKm9wdGlvbmFsKi9lcnJvciwgLypvcHRpb25hbCovbWVzc2FnZSkgewogIF90aHJvd3MuYXBwbHkodGhpcywgW3RydWVdLmNvbmNhdChwU2xpY2UuY2FsbChhcmd1bWVudHMpKSk7Cn07CmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovbWVzc2FnZSkgewogIF90aHJvd3MuYXBwbHkodGhpcywgW2ZhbHNlXS5jb25jYXQocFNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOwp9OwoKYXNzZXJ0LmlmRXJyb3IgPSBmdW5jdGlvbihlcnIpIHsgaWYgKGVycikge3Rocm93IGVycjt9fTsKCnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikgewogIHZhciBrZXlzID0gW107CiAgZm9yICh2YXIga2V5IGluIG9iaikgewogICAgaWYgKGhhc093bi5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7CiAgfQogIHJldHVybiBrZXlzOwp9OwoKfSwKeyJ1dGlsLyI6MTV9XSwKMTQ6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewptb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykgewogIHJldHVybiBhcmcgJiYgdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcKICAgICYmIHR5cGVvZiBhcmcuY29weSA9PT0gJ2Z1bmN0aW9uJwogICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nCiAgICAmJiB0eXBlb2YgYXJnLnJlYWRVSW50OCA9PT0gJ2Z1bmN0aW9uJzsKfQp9LAp7fV0sCjE1OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7Cgp2YXIgZm9ybWF0UmVnRXhwID0gLyVbc2RqJV0vZzsKZXhwb3J0cy5mb3JtYXQgPSBmdW5jdGlvbihmKSB7CiAgaWYgKCFpc1N0cmluZyhmKSkgewogICAgdmFyIG9iamVjdHMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpOwogICAgfQogICAgcmV0dXJuIG9iamVjdHMuam9pbignICcpOwogIH0KCiAgdmFyIGkgPSAxOwogIHZhciBhcmdzID0gYXJndW1lbnRzOwogIHZhciBsZW4gPSBhcmdzLmxlbmd0aDsKICB2YXIgc3RyID0gU3RyaW5nKGYpLnJlcGxhY2UoZm9ybWF0UmVnRXhwLCBmdW5jdGlvbih4KSB7CiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJzsKICAgIGlmIChpID49IGxlbikgcmV0dXJuIHg7CiAgICBzd2l0Y2ggKHgpIHsKICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7CiAgICAgIGNhc2UgJyVkJzogcmV0dXJuIE51bWJlcihhcmdzW2krK10pOwogICAgICBjYXNlICclaic6CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShhcmdzW2krK10pOwogICAgICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7CiAgICAgICAgfQogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiB4OwogICAgfQogIH0pOwogIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7CiAgICBpZiAoaXNOdWxsKHgpIHx8ICFpc09iamVjdCh4KSkgewogICAgICBzdHIgKz0gJyAnICsgeDsKICAgIH0gZWxzZSB7CiAgICAgIHN0ciArPSAnICcgKyBpbnNwZWN0KHgpOwogICAgfQogIH0KICByZXR1cm4gc3RyOwp9OwpleHBvcnRzLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKGZuLCBtc2cpIHsKICBpZiAoaXNVbmRlZmluZWQoZ2xvYmFsLnByb2Nlc3MpKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBleHBvcnRzLmRlcHJlY2F0ZShmbiwgbXNnKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfTsKICB9CgogIGlmIChwcm9jZXNzLm5vRGVwcmVjYXRpb24gPT09IHRydWUpIHsKICAgIHJldHVybiBmbjsKICB9CgogIHZhciB3YXJuZWQgPSBmYWxzZTsKICBmdW5jdGlvbiBkZXByZWNhdGVkKCkgewogICAgaWYgKCF3YXJuZWQpIHsKICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikgewogICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpOwogICAgICB9IGVsc2UgaWYgKHByb2Nlc3MudHJhY2VEZXByZWNhdGlvbikgewogICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zb2xlLmVycm9yKG1zZyk7CiAgICAgIH0KICAgICAgd2FybmVkID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogIH0KCiAgcmV0dXJuIGRlcHJlY2F0ZWQ7Cn07CgoKdmFyIGRlYnVncyA9IHt9Owp2YXIgZGVidWdFbnZpcm9uOwpleHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7CiAgaWYgKGlzVW5kZWZpbmVkKGRlYnVnRW52aXJvbikpCiAgICBkZWJ1Z0Vudmlyb24gPSBwcm9jZXNzLmVudi5OT0RFX0RFQlVHIHx8ICcnOwogIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpOwogIGlmICghZGVidWdzW3NldF0pIHsKICAgIGlmIChuZXcgUmVnRXhwKCdcXGInICsgc2V0ICsgJ1xcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7CiAgICAgIHZhciBwaWQgPSBwcm9jZXNzLnBpZDsKICAgICAgZGVidWdzW3NldF0gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTsKICAgICAgICBjb25zb2xlLmVycm9yKCclcyAlZDogJXMnLCBzZXQsIHBpZCwgbXNnKTsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIGRlYnVnc1tzZXRdID0gZnVuY3Rpb24oKSB7fTsKICAgIH0KICB9CiAgcmV0dXJuIGRlYnVnc1tzZXRdOwp9OwpmdW5jdGlvbiBpbnNwZWN0KG9iaiwgb3B0cykgewogIHZhciBjdHggPSB7CiAgICBzZWVuOiBbXSwKICAgIHN0eWxpemU6IHN0eWxpemVOb0NvbG9yCiAgfTsKICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAzKSBjdHguZGVwdGggPSBhcmd1bWVudHNbMl07CiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTsKICBpZiAoaXNCb29sZWFuKG9wdHMpKSB7CiAgICBjdHguc2hvd0hpZGRlbiA9IG9wdHM7CiAgfSBlbHNlIGlmIChvcHRzKSB7CiAgICBleHBvcnRzLl9leHRlbmQoY3R4LCBvcHRzKTsKICB9CiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTsKICBpZiAoaXNVbmRlZmluZWQoY3R4LmRlcHRoKSkgY3R4LmRlcHRoID0gMjsKICBpZiAoaXNVbmRlZmluZWQoY3R4LmNvbG9ycykpIGN0eC5jb2xvcnMgPSBmYWxzZTsKICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7CiAgaWYgKGN0eC5jb2xvcnMpIGN0eC5zdHlsaXplID0gc3R5bGl6ZVdpdGhDb2xvcjsKICByZXR1cm4gZm9ybWF0VmFsdWUoY3R4LCBvYmosIGN0eC5kZXB0aCk7Cn0KZXhwb3J0cy5pbnNwZWN0ID0gaW5zcGVjdDsKaW5zcGVjdC5jb2xvcnMgPSB7CiAgJ2JvbGQnIDogWzEsIDIyXSwKICAnaXRhbGljJyA6IFszLCAyM10sCiAgJ3VuZGVybGluZScgOiBbNCwgMjRdLAogICdpbnZlcnNlJyA6IFs3LCAyN10sCiAgJ3doaXRlJyA6IFszNywgMzldLAogICdncmV5JyA6IFs5MCwgMzldLAogICdibGFjaycgOiBbMzAsIDM5XSwKICAnYmx1ZScgOiBbMzQsIDM5XSwKICAnY3lhbicgOiBbMzYsIDM5XSwKICAnZ3JlZW4nIDogWzMyLCAzOV0sCiAgJ21hZ2VudGEnIDogWzM1LCAzOV0sCiAgJ3JlZCcgOiBbMzEsIDM5XSwKICAneWVsbG93JyA6IFszMywgMzldCn07Cmluc3BlY3Quc3R5bGVzID0gewogICdzcGVjaWFsJzogJ2N5YW4nLAogICdudW1iZXInOiAneWVsbG93JywKICAnYm9vbGVhbic6ICd5ZWxsb3cnLAogICd1bmRlZmluZWQnOiAnZ3JleScsCiAgJ251bGwnOiAnYm9sZCcsCiAgJ3N0cmluZyc6ICdncmVlbicsCiAgJ2RhdGUnOiAnbWFnZW50YScsCiAgJ3JlZ2V4cCc6ICdyZWQnCn07CgoKZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkgewogIHZhciBzdHlsZSA9IGluc3BlY3Quc3R5bGVzW3N0eWxlVHlwZV07CgogIGlmIChzdHlsZSkgewogICAgcmV0dXJuICdcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVswXSArICdtJyArIHN0ciArCiAgICAgICAgICAgJ1x1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzFdICsgJ20nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gc3RyOwogIH0KfQoKCmZ1bmN0aW9uIHN0eWxpemVOb0NvbG9yKHN0ciwgc3R5bGVUeXBlKSB7CiAgcmV0dXJuIHN0cjsKfQoKCmZ1bmN0aW9uIGFycmF5VG9IYXNoKGFycmF5KSB7CiAgdmFyIGhhc2ggPSB7fTsKCiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbih2YWwsIGlkeCkgewogICAgaGFzaFt2YWxdID0gdHJ1ZTsKICB9KTsKCiAgcmV0dXJuIGhhc2g7Cn0KCgpmdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHsKICBpZiAoY3R4LmN1c3RvbUluc3BlY3QgJiYKICAgICAgdmFsdWUgJiYKICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJgogICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiYKICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkgewogICAgdmFyIHJldCA9IHZhbHVlLmluc3BlY3QocmVjdXJzZVRpbWVzLCBjdHgpOwogICAgaWYgKCFpc1N0cmluZyhyZXQpKSB7CiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpOwogICAgfQogICAgcmV0dXJuIHJldDsKICB9CiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTsKICBpZiAocHJpbWl0aXZlKSB7CiAgICByZXR1cm4gcHJpbWl0aXZlOwogIH0KICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKTsKICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTsKCiAgaWYgKGN0eC5zaG93SGlkZGVuKSB7CiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpOwogIH0KICBpZiAoaXNFcnJvcih2YWx1ZSkKICAgICAgJiYgKGtleXMuaW5kZXhPZignbWVzc2FnZScpID49IDAgfHwga2V5cy5pbmRleE9mKCdkZXNjcmlwdGlvbicpID49IDApKSB7CiAgICByZXR1cm4gZm9ybWF0RXJyb3IodmFsdWUpOwogIH0KICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHsKICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkgewogICAgICB2YXIgbmFtZSA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnOwogICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tGdW5jdGlvbicgKyBuYW1lICsgJ10nLCAnc3BlY2lhbCcpOwogICAgfQogICAgaWYgKGlzUmVnRXhwKHZhbHVlKSkgewogICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpOwogICAgfQogICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAnZGF0ZScpOwogICAgfQogICAgaWYgKGlzRXJyb3IodmFsdWUpKSB7CiAgICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7CiAgICB9CiAgfQoKICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddOwogIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgYXJyYXkgPSB0cnVlOwogICAgYnJhY2VzID0gWydbJywgJ10nXTsKICB9CiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7CiAgICB2YXIgbiA9IHZhbHVlLm5hbWUgPyAnOiAnICsgdmFsdWUubmFtZSA6ICcnOwogICAgYmFzZSA9ICcgW0Z1bmN0aW9uJyArIG4gKyAnXSc7CiAgfQogIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHsKICAgIGJhc2UgPSAnICcgKyBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpOwogIH0KICBpZiAoaXNEYXRlKHZhbHVlKSkgewogICAgYmFzZSA9ICcgJyArIERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodmFsdWUpOwogIH0KICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIGJhc2UgPSAnICcgKyBmb3JtYXRFcnJvcih2YWx1ZSk7CiAgfQoKICBpZiAoa2V5cy5sZW5ndGggPT09IDAgJiYgKCFhcnJheSB8fCB2YWx1ZS5sZW5ndGggPT0gMCkpIHsKICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdOwogIH0KCiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHsKICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIGN0eC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdyZWdleHAnKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW09iamVjdF0nLCAnc3BlY2lhbCcpOwogICAgfQogIH0KCiAgY3R4LnNlZW4ucHVzaCh2YWx1ZSk7CgogIHZhciBvdXRwdXQ7CiAgaWYgKGFycmF5KSB7CiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTsKICB9IGVsc2UgewogICAgb3V0cHV0ID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7CiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTsKICAgIH0pOwogIH0KCiAgY3R4LnNlZW4ucG9wKCk7CgogIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7Cn0KCgpmdW5jdGlvbiBmb3JtYXRQcmltaXRpdmUoY3R4LCB2YWx1ZSkgewogIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpCiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTsKICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7CiAgICB2YXIgc2ltcGxlID0gJ1wnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eInwiJC9nLCAnJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgIlxcJyIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCIvZywgJyInKSArICdcJyc7CiAgICByZXR1cm4gY3R4LnN0eWxpemUoc2ltcGxlLCAnc3RyaW5nJyk7CiAgfQogIGlmIChpc051bWJlcih2YWx1ZSkpCiAgICByZXR1cm4gY3R4LnN0eWxpemUoJycgKyB2YWx1ZSwgJ251bWJlcicpOwogIGlmIChpc0Jvb2xlYW4odmFsdWUpKQogICAgcmV0dXJuIGN0eC5zdHlsaXplKCcnICsgdmFsdWUsICdib29sZWFuJyk7CiAgaWYgKGlzTnVsbCh2YWx1ZSkpCiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ251bGwnLCAnbnVsbCcpOwp9CgoKZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHsKICByZXR1cm4gJ1snICsgRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICsgJ10nOwp9CgoKZnVuY3Rpb24gZm9ybWF0QXJyYXkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywga2V5cykgewogIHZhciBvdXRwdXQgPSBbXTsKICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7ICsraSkgewogICAgaWYgKGhhc093blByb3BlcnR5KHZhbHVlLCBTdHJpbmcoaSkpKSB7CiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsCiAgICAgICAgICBTdHJpbmcoaSksIHRydWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dHB1dC5wdXNoKCcnKTsKICAgIH0KICB9CiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkgewogICAgaWYgKCFrZXkubWF0Y2goL15cZCskLykpIHsKICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cywKICAgICAgICAgIGtleSwgdHJ1ZSkpOwogICAgfQogIH0pOwogIHJldHVybiBvdXRwdXQ7Cn0KCgpmdW5jdGlvbiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KSB7CiAgdmFyIG5hbWUsIHN0ciwgZGVzYzsKICBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KSB8fCB7IHZhbHVlOiB2YWx1ZVtrZXldIH07CiAgaWYgKGRlc2MuZ2V0KSB7CiAgICBpZiAoZGVzYy5zZXQpIHsKICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tHZXR0ZXIvU2V0dGVyXScsICdzcGVjaWFsJyk7CiAgICB9IGVsc2UgewogICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpOwogICAgfQogIH0gZWxzZSB7CiAgICBpZiAoZGVzYy5zZXQpIHsKICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tTZXR0ZXJdJywgJ3NwZWNpYWwnKTsKICAgIH0KICB9CiAgaWYgKCFoYXNPd25Qcm9wZXJ0eSh2aXNpYmxlS2V5cywga2V5KSkgewogICAgbmFtZSA9ICdbJyArIGtleSArICddJzsKICB9CiAgaWYgKCFzdHIpIHsKICAgIGlmIChjdHguc2Vlbi5pbmRleE9mKGRlc2MudmFsdWUpIDwgMCkgewogICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHsKICAgICAgICBzdHIgPSBmb3JtYXRWYWx1ZShjdHgsIGRlc2MudmFsdWUsIG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7CiAgICAgIH0KICAgICAgaWYgKHN0ci5pbmRleE9mKCdcbicpID4gLTEpIHsKICAgICAgICBpZiAoYXJyYXkpIHsKICAgICAgICAgIHN0ciA9IHN0ci5zcGxpdCgnXG4nKS5tYXAoZnVuY3Rpb24obGluZSkgewogICAgICAgICAgICByZXR1cm4gJyAgJyArIGxpbmU7CiAgICAgICAgICB9KS5qb2luKCdcbicpLnN1YnN0cigyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RyID0gJ1xuJyArIHN0ci5zcGxpdCgnXG4nKS5tYXAoZnVuY3Rpb24obGluZSkgewogICAgICAgICAgICByZXR1cm4gJyAgICcgKyBsaW5lOwogICAgICAgICAgfSkuam9pbignXG4nKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbQ2lyY3VsYXJdJywgJ3NwZWNpYWwnKTsKICAgIH0KICB9CiAgaWYgKGlzVW5kZWZpbmVkKG5hbWUpKSB7CiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXGQrJC8pKSB7CiAgICAgIHJldHVybiBzdHI7CiAgICB9CiAgICBuYW1lID0gSlNPTi5zdHJpbmdpZnkoJycgKyBrZXkpOwogICAgaWYgKG5hbWUubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKSkgewogICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5sZW5ndGggLSAyKTsKICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7CiAgICB9IGVsc2UgewogICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC8nL2csICJcXCciKQogICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXCIvZywgJyInKQogICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXiJ8IiQpL2csICInIik7CiAgICAgIG5hbWUgPSBjdHguc3R5bGl6ZShuYW1lLCAnc3RyaW5nJyk7CiAgICB9CiAgfQoKICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7Cn0KCgpmdW5jdGlvbiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcykgewogIHZhciBudW1MaW5lc0VzdCA9IDA7CiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7CiAgICBudW1MaW5lc0VzdCsrOwogICAgaWYgKGN1ci5pbmRleE9mKCdcbicpID49IDApIG51bUxpbmVzRXN0Kys7CiAgICByZXR1cm4gcHJldiArIGN1ci5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCAnJykubGVuZ3RoICsgMTsKICB9LCAwKTsKCiAgaWYgKGxlbmd0aCA+IDYwKSB7CiAgICByZXR1cm4gYnJhY2VzWzBdICsKICAgICAgICAgICAoYmFzZSA9PT0gJycgPyAnJyA6IGJhc2UgKyAnXG4gJykgKwogICAgICAgICAgICcgJyArCiAgICAgICAgICAgb3V0cHV0LmpvaW4oJyxcbiAgJykgKwogICAgICAgICAgICcgJyArCiAgICAgICAgICAgYnJhY2VzWzFdOwogIH0KCiAgcmV0dXJuIGJyYWNlc1swXSArIGJhc2UgKyAnICcgKyBvdXRwdXQuam9pbignLCAnKSArICcgJyArIGJyYWNlc1sxXTsKfQpmdW5jdGlvbiBpc0FycmF5KGFyKSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpOwp9CmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7CgpmdW5jdGlvbiBpc0Jvb2xlYW4oYXJnKSB7CiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJzsKfQpleHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjsKCmZ1bmN0aW9uIGlzTnVsbChhcmcpIHsKICByZXR1cm4gYXJnID09PSBudWxsOwp9CmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsOwoKZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQoYXJnKSB7CiAgcmV0dXJuIGFyZyA9PSBudWxsOwp9CmV4cG9ydHMuaXNOdWxsT3JVbmRlZmluZWQgPSBpc051bGxPclVuZGVmaW5lZDsKCmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykgewogIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJzsKfQpleHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7CgpmdW5jdGlvbiBpc1N0cmluZyhhcmcpIHsKICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7Cn0KZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nOwoKZnVuY3Rpb24gaXNTeW1ib2woYXJnKSB7CiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnOwp9CmV4cG9ydHMuaXNTeW1ib2wgPSBpc1N5bWJvbDsKCmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykgewogIHJldHVybiBhcmcgPT09IHZvaWQgMDsKfQpleHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7CgpmdW5jdGlvbiBpc1JlZ0V4cChyZSkgewogIHJldHVybiBpc09iamVjdChyZSkgJiYgb2JqZWN0VG9TdHJpbmcocmUpID09PSAnW29iamVjdCBSZWdFeHBdJzsKfQpleHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7CgpmdW5jdGlvbiBpc09iamVjdChhcmcpIHsKICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsOwp9CmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDsKCmZ1bmN0aW9uIGlzRGF0ZShkKSB7CiAgcmV0dXJuIGlzT2JqZWN0KGQpICYmIG9iamVjdFRvU3RyaW5nKGQpID09PSAnW29iamVjdCBEYXRlXSc7Cn0KZXhwb3J0cy5pc0RhdGUgPSBpc0RhdGU7CgpmdW5jdGlvbiBpc0Vycm9yKGUpIHsKICByZXR1cm4gaXNPYmplY3QoZSkgJiYKICAgICAgKG9iamVjdFRvU3RyaW5nKGUpID09PSAnW29iamVjdCBFcnJvcl0nIHx8IGUgaW5zdGFuY2VvZiBFcnJvcik7Cn0KZXhwb3J0cy5pc0Vycm9yID0gaXNFcnJvcjsKCmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7CiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7Cn0KZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjsKCmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGFyZykgewogIHJldHVybiBhcmcgPT09IG51bGwgfHwKICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nIHx8CiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdudW1iZXInIHx8CiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8CiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnIHx8ICAvLyBFUzYgc3ltYm9sCiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnOwp9CmV4cG9ydHMuaXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTsKCmV4cG9ydHMuaXNCdWZmZXIgPSBfZGVyZXFfKCcuL3N1cHBvcnQvaXNCdWZmZXInKTsKCmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKG8pIHsKICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pOwp9CgoKZnVuY3Rpb24gcGFkKG4pIHsKICByZXR1cm4gbiA8IDEwID8gJzAnICsgbi50b1N0cmluZygxMCkgOiBuLnRvU3RyaW5nKDEwKTsKfQoKCnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywKICAgICAgICAgICAgICAnT2N0JywgJ05vdicsICdEZWMnXTsKZnVuY3Rpb24gdGltZXN0YW1wKCkgewogIHZhciBkID0gbmV3IERhdGUoKTsKICB2YXIgdGltZSA9IFtwYWQoZC5nZXRIb3VycygpKSwKICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLAogICAgICAgICAgICAgIHBhZChkLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTsKICByZXR1cm4gW2QuZ2V0RGF0ZSgpLCBtb250aHNbZC5nZXRNb250aCgpXSwgdGltZV0uam9pbignICcpOwp9CmV4cG9ydHMubG9nID0gZnVuY3Rpb24oKSB7CiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7Cn07CmV4cG9ydHMuaW5oZXJpdHMgPSBfZGVyZXFfKCdpbmhlcml0cycpOwoKZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHsKICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjsKCiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhZGQpOwogIHZhciBpID0ga2V5cy5sZW5ndGg7CiAgd2hpbGUgKGktLSkgewogICAgb3JpZ2luW2tleXNbaV1dID0gYWRkW2tleXNbaV1dOwogIH0KICByZXR1cm4gb3JpZ2luOwp9OwoKZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7CiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOwp9Cgp9KS5jYWxsKHRoaXMsX2RlcmVxXygiL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2luc2VydC1tb2R1bGUtZ2xvYmFscy9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiksdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiID8gc2VsZiA6IHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiID8gd2luZG93IDoge30pCn0sCnsiLi9zdXBwb3J0L2lzQnVmZmVyIjoxNCwiL3Vzci9sb2NhbC9saWIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2luc2VydC1tb2R1bGUtZ2xvYmFscy9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIjoxOCwiaW5oZXJpdHMiOjE3fV0sCjE2OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKCmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHsKICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307CiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDsKfQptb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjsKRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjsKCkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDsKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkOwpFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycyA9IDEwOwpFdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHsKICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKQogICAgdGhyb3cgVHlwZUVycm9yKCduIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTsKICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuOwogIHJldHVybiB0aGlzOwp9OwoKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkgewogIHZhciBlciwgaGFuZGxlciwgbGVuLCBhcmdzLCBpLCBsaXN0ZW5lcnM7CgogIGlmICghdGhpcy5fZXZlbnRzKQogICAgdGhpcy5fZXZlbnRzID0ge307CiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHsKICAgIGlmICghdGhpcy5fZXZlbnRzLmVycm9yIHx8CiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7CiAgICAgIGVyID0gYXJndW1lbnRzWzFdOwogICAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudAogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IFR5cGVFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkICJlcnJvciIgZXZlbnQuJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKCiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKQogICAgcmV0dXJuIGZhbHNlOwoKICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkgewogICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIGNhc2UgMToKICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzOgogICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwogICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkgewogICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7CiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwoKICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTsKICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7CiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTsKICB9CgogIHJldHVybiB0cnVlOwp9OwoKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7CiAgdmFyIG07CgogIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpCiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOwoKICBpZiAoIXRoaXMuX2V2ZW50cykKICAgIHRoaXMuX2V2ZW50cyA9IHt9OwogIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpCiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSwKICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/CiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7CgogIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKQogICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7CiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSkKICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTsKICBlbHNlCiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07CiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHsKICAgIHZhciBtOwogICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7CiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7CiAgICB9IGVsc2UgewogICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7CiAgICB9CgogICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHsKICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7CiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgKwogICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgKwogICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLAogICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpOwogICAgICBjb25zb2xlLnRyYWNlKCk7CiAgICB9CiAgfQoKICByZXR1cm4gdGhpczsKfTsKCkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyOwoKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKQogICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTsKCiAgdmFyIGZpcmVkID0gZmFsc2U7CgogIGZ1bmN0aW9uIGcoKSB7CiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpOwoKICAgIGlmICghZmlyZWQpIHsKICAgICAgZmlyZWQgPSB0cnVlOwogICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfQogIH0KCiAgZy5saXN0ZW5lciA9IGxpc3RlbmVyOwogIHRoaXMub24odHlwZSwgZyk7CgogIHJldHVybiB0aGlzOwp9OwpFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHsKICB2YXIgbGlzdCwgcG9zaXRpb24sIGxlbmd0aCwgaTsKCiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSkKICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7CgogIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pCiAgICByZXR1cm4gdGhpczsKCiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKICBsZW5ndGggPSBsaXN0Lmxlbmd0aDsKICBwb3NpdGlvbiA9IC0xOwoKICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwKICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7CiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOwogICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikKICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTsKCiAgfSBlbHNlIGlmIChpc09iamVjdChsaXN0KSkgewogICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykgewogICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwKICAgICAgICAgIChsaXN0W2ldLmxpc3RlbmVyICYmIGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSkgewogICAgICAgIHBvc2l0aW9uID0gaTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGlmIChwb3NpdGlvbiA8IDApCiAgICAgIHJldHVybiB0aGlzOwoKICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSkgewogICAgICBsaXN0Lmxlbmd0aCA9IDA7CiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07CiAgICB9IGVsc2UgewogICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7CiAgICB9CgogICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikKICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTsKICB9CgogIHJldHVybiB0aGlzOwp9OwoKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7CiAgdmFyIGtleSwgbGlzdGVuZXJzOwoKICBpZiAoIXRoaXMuX2V2ZW50cykKICAgIHJldHVybiB0aGlzOwogIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkKICAgICAgdGhpcy5fZXZlbnRzID0ge307CiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pCiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07CiAgICByZXR1cm4gdGhpczsKICB9CiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykgewogICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTsKICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTsKICAgIH0KICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpOwogICAgdGhpcy5fZXZlbnRzID0ge307CiAgICByZXR1cm4gdGhpczsKICB9CgogIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKCiAgaWYgKGlzRnVuY3Rpb24obGlzdGVuZXJzKSkgewogICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpOwogIH0gZWxzZSB7CiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aCkKICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTsKICB9CiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKCiAgcmV0dXJuIHRoaXM7Cn07CgpFdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHsKICB2YXIgcmV0OwogIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pCiAgICByZXQgPSBbXTsKICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpCiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTsKICBlbHNlCiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTsKICByZXR1cm4gcmV0Owp9OwoKRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7CiAgdmFyIHJldDsKICBpZiAoIWVtaXR0ZXIuX2V2ZW50cyB8fCAhZW1pdHRlci5fZXZlbnRzW3R5cGVdKQogICAgcmV0ID0gMDsKICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVtaXR0ZXIuX2V2ZW50c1t0eXBlXSkpCiAgICByZXQgPSAxOwogIGVsc2UKICAgIHJldCA9IGVtaXR0ZXIuX2V2ZW50c1t0eXBlXS5sZW5ndGg7CiAgcmV0dXJuIHJldDsKfTsKCmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7CiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbic7Cn0KCmZ1bmN0aW9uIGlzTnVtYmVyKGFyZykgewogIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJzsKfQoKZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7CiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDsKfQoKZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7CiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwOwp9Cgp9LAp7fV0sCjE3OltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7CiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHsKICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yCiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICBjb25zdHJ1Y3RvcjogewogICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICB9CiAgICB9KTsKICB9Owp9IGVsc2UgewogIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7CiAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcgogICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge30KICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGUKICAgIGN0b3IucHJvdG90eXBlID0gbmV3IFRlbXBDdG9yKCkKICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvcgogIH0KfQoKfSwKe31dLAoxODpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cgp2YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307Cgpwcm9jZXNzLm5leHRUaWNrID0gKGZ1bmN0aW9uICgpIHsKICAgIHZhciBjYW5TZXRJbW1lZGlhdGUgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJwogICAgJiYgd2luZG93LnNldEltbWVkaWF0ZTsKICAgIHZhciBjYW5Qb3N0ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcKICAgICYmIHdpbmRvdy5wb3N0TWVzc2FnZSAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgOwoKICAgIGlmIChjYW5TZXRJbW1lZGlhdGUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIHdpbmRvdy5zZXRJbW1lZGlhdGUoZikgfTsKICAgIH0KCiAgICBpZiAoY2FuUG9zdCkgewogICAgICAgIHZhciBxdWV1ZSA9IFtdOwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2KSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBldi5zb3VyY2U7CiAgICAgICAgICAgIGlmICgoc291cmNlID09PSB3aW5kb3cgfHwgc291cmNlID09PSBudWxsKSAmJiBldi5kYXRhID09PSAncHJvY2Vzcy10aWNrJykgewogICAgICAgICAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgZm4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sIHRydWUpOwoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dFRpY2soZm4pIHsKICAgICAgICAgICAgcXVldWUucHVzaChmbik7CiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSgncHJvY2Vzcy10aWNrJywgJyonKTsKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBmdW5jdGlvbiBuZXh0VGljayhmbikgewogICAgICAgIHNldFRpbWVvdXQoZm4sIDApOwogICAgfTsKfSkoKTsKCnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7CnByb2Nlc3MuYnJvd3NlciA9IHRydWU7CnByb2Nlc3MuZW52ID0ge307CnByb2Nlc3MuYXJndiA9IFtdOwoKZnVuY3Rpb24gbm9vcCgpIHt9Cgpwcm9jZXNzLm9uID0gbm9vcDsKcHJvY2Vzcy5vbmNlID0gbm9vcDsKcHJvY2Vzcy5vZmYgPSBub29wOwpwcm9jZXNzLmVtaXQgPSBub29wOwoKcHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHsKICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTsKfQpwcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9Owpwcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikgewogICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTsKfTsKCn0sCnt9XSwKMTk6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewptb2R1bGUuZXhwb3J0cz1fZGVyZXFfKDE0KQp9LAp7fV0sCjIwOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKbW9kdWxlLmV4cG9ydHM9X2RlcmVxXygxNSkKfSwKeyIuL3N1cHBvcnQvaXNCdWZmZXIiOjE5LCIvdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvaW5zZXJ0LW1vZHVsZS1nbG9iYWxzL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiOjE4LCJpbmhlcml0cyI6MTd9XX0se30sWzldKQooOSkKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9odG1sX3dvcmtlciIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi4vbGliL29vcCIpOwp2YXIgbGFuZyA9IHJlcXVpcmUoIi4uL2xpYi9sYW5nIik7CnZhciBNaXJyb3IgPSByZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yOwp2YXIgU0FYUGFyc2VyID0gcmVxdWlyZSgiLi9odG1sL3NheHBhcnNlciIpLlNBWFBhcnNlcjsKCnZhciBlcnJvclR5cGVzID0gewogICAgImV4cGVjdGVkLWRvY3R5cGUtYnV0LWdvdC1zdGFydC10YWciOiAiaW5mbyIsCiAgICAiZXhwZWN0ZWQtZG9jdHlwZS1idXQtZ290LWNoYXJzIjogImluZm8iLAogICAgIm5vbi1odG1sLXJvb3QiOiAiaW5mbyIKfTsKCnZhciBXb3JrZXIgPSBleHBvcnRzLldvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgewogICAgTWlycm9yLmNhbGwodGhpcywgc2VuZGVyKTsKICAgIHRoaXMuc2V0VGltZW91dCg0MDApOwogICAgdGhpcy5jb250ZXh0ID0gbnVsbDsKfTsKCm9vcC5pbmhlcml0cyhXb3JrZXIsIE1pcnJvcik7CgooZnVuY3Rpb24oKSB7CgogICAgdGhpcy5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHRoaXMuY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDsKICAgIH07CgogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZG9jLmdldFZhbHVlKCk7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHZhciBwYXJzZXIgPSBuZXcgU0FYUGFyc2VyKCk7CiAgICAgICAgdmFyIGVycm9ycyA9IFtdOwogICAgICAgIHZhciBub29wID0gZnVuY3Rpb24oKXt9OwogICAgICAgIHBhcnNlci5jb250ZW50SGFuZGxlciA9IHsKICAgICAgICAgICBzdGFydERvY3VtZW50OiBub29wLAogICAgICAgICAgIGVuZERvY3VtZW50OiBub29wLAogICAgICAgICAgIHN0YXJ0RWxlbWVudDogbm9vcCwKICAgICAgICAgICBlbmRFbGVtZW50OiBub29wLAogICAgICAgICAgIGNoYXJhY3RlcnM6IG5vb3AKICAgICAgICB9OwogICAgICAgIHBhcnNlci5lcnJvckhhbmRsZXIgPSB7CiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihtZXNzYWdlLCBsb2NhdGlvbiwgY29kZSkgewogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgICAgIHJvdzogbG9jYXRpb24ubGluZSwKICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGxvY2F0aW9uLmNvbHVtbiwKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yVHlwZXNbY29kZV0gfHwgImVycm9yIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIGlmICh0aGlzLmNvbnRleHQpCiAgICAgICAgICAgIHBhcnNlci5wYXJzZUZyYWdtZW50KHZhbHVlLCB0aGlzLmNvbnRleHQpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcGFyc2VyLnBhcnNlKHZhbHVlKTsKICAgICAgICB0aGlzLnNlbmRlci5lbWl0KCJlcnJvciIsIGVycm9ycyk7CiAgICB9OwoKfSkuY2FsbChXb3JrZXIucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpmdW5jdGlvbiBFbXB0eSgpIHt9CgppZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7CiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiArIHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICAgIHRoYXQsCiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7CiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CiAgICAgICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpOwogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYm91bmQ7CiAgICB9Owp9CnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7CnZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlOwp2YXIgcHJvdG90eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOwp2YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKdmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOwp2YXIgZGVmaW5lR2V0dGVyOwp2YXIgZGVmaW5lU2V0dGVyOwp2YXIgbG9va3VwR2V0dGVyOwp2YXIgbG9va3VwU2V0dGVyOwp2YXIgc3VwcG9ydHNBY2Nlc3NvcnM7CmlmICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgewogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOwogICAgZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwogICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOwogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOwp9CmlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKICAgIGlmKGZ1bmN0aW9uKCkgeyAvLyB0ZXN0IElFIDwgOSB0byBzcGxpY2UgYnVnIC0gc2VlIGlzc3VlICMxMzgKICAgICAgICBmdW5jdGlvbiBtYWtlQXJyYXkobCkgewogICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpOwogICAgICAgICAgICBhWzBdID0gYVsxXSA9IDA7CiAgICAgICAgICAgIHJldHVybiBhOwogICAgICAgIH0KICAgICAgICB2YXIgYXJyYXkgPSBbXSwgbGVuZ3RoQmVmb3JlOwogICAgICAgIAogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7CiAgICAgICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjYpKTsKCiAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2CiAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJYWFgiKTsgLy8gYWRkIG9uZSBlbGVtZW50CgogICAgICAgIGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoCgogICAgICAgIGlmIChsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYnVncwogICAgICAgIH0KICAgIH0oKSkgey8vSUUgNi83CiAgICAgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkgewogICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywgWwogICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2b2lkIDAgPyAwIDogc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZvaWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50CiAgICAgICAgICAgICAgICBdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMikpKQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7Ly9JRTgKICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7CiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKICAgICAgICAgICAgICAgIGlmIChwb3MgPiBsZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkgewogICAgICAgICAgICAgICAgcG9zID0gTWF0aC5tYXgobGVuZ3RoICsgcG9zLCAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEocG9zK3JlbW92ZUNvdW50IDwgbGVuZ3RoKSkKICAgICAgICAgICAgICAgIHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOwoKICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnNsaWNlKHBvcywgcG9zK3JlbW92ZUNvdW50KTsKICAgICAgICAgICAgdmFyIGluc2VydCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgICAgICAgICAgdmFyIGFkZCA9IGluc2VydC5sZW5ndGg7ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChwb3MgPT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKGFkZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNvdW50LCBsZW5ndGggLSBwb3MpOwogICAgICAgICAgICAgICAgdmFyIHRhaWxPbGRQb3MgPSBwb3MgKyByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbE5ld1BvcyA9IHRhaWxPbGRQb3MgKyBhZGQgLSByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0gdGFpbE9sZFBvczsKICAgICAgICAgICAgICAgIHZhciBsZW5ndGhBZnRlclJlbW92ZSA9IGxlbmd0aCAtIHJlbW92ZTsKCiAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBBCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWlsTmV3UG9zID4gdGFpbE9sZFBvcykgeyAvLyBjYXNlIEIKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291bnQ7IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGFkZCA9PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCgogICAgICAgICAgICAgICAgaWYgKGFkZCAmJiBwb3MgPT09IGxlbmd0aEFmdGVyUmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRkOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twb3MraV0gPSBpbnNlcnRbaV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgICAgIH07CiAgICB9Cn0KaWYgKCFBcnJheS5pc0FycmF5KSB7CiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07Cn0KdmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiksCiAgICBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9ICJhIiB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpOwoKaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgewogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAogICAgICAgICAgICBpID0gLTEsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKICAgIEFycmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikgewogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbaV07CiAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7CiAgICBBcnJheS5wcm90b3R5cGUuc29tZSA9IGZ1bmN0aW9uIHNvbWUoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2krK107CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgewogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaS0tXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGktLSk7CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgewogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7CiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiB8fCAoWzAsIDFdLmxhc3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovKSB7CiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwoKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHsKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yID8KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6CiAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0CiAgICAgICAgKTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOwogICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwgc2V0dGVyOwogICAgICAgIGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMpIHsKICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKCiAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CgogICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikgewogICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVzY3JpcHRvci5nZXQgPSBnZXR0ZXI7CiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsKICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOwogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7CiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CiAgICB9Owp9CmlmICghT2JqZWN0LmNyZWF0ZSkgewogICAgdmFyIGNyZWF0ZUVtcHR5OwogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7ICJfX3Byb3RvX18iOiBudWxsIH07CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlbXB0eSA9IHt9OwogICAgICAgICAgICBmb3IgKHZhciBpIGluIGVtcHR5KQogICAgICAgICAgICAgICAgZW1wdHlbaV0gPSBudWxsOwogICAgICAgICAgICBlbXB0eS5jb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID0KICAgICAgICAgICAgZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGUgPQogICAgICAgICAgICBlbXB0eS5pc1Byb3RvdHlwZU9mID0KICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPQogICAgICAgICAgICBlbXB0eS50b1N0cmluZyA9CiAgICAgICAgICAgIGVtcHR5LnZhbHVlT2YgPQogICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsOwogICAgICAgICAgICByZXR1cm4gZW1wdHk7CiAgICAgICAgfQogICAgfQoKICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgdmFyIG9iamVjdDsKICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7CiAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZUVtcHR5KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7CiAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOwogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOwogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CgpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgewogICAgdHJ5IHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0OwogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICB9Cn0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgewogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkgewogICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgfQp9CgppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQgKyBvYmplY3QpOwogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7CiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInZhbHVlIikpIHsKCiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CiAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInNldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGlmIChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSkKICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LnNlYWwpIHsKICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5mcmVlemUpIHsKICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KdHJ5IHsKICAgIE9iamVjdC5mcmVlemUoZnVuY3Rpb24gKCkge30pOwp9IGNhdGNoIChleGNlcHRpb24pIHsKICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cn0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsKICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzU2VhbGVkKSB7CiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRnJvemVuKSB7CiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgewogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KICAgICAgICB2YXIgbmFtZSA9ICcnOwogICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgbmFtZSArPSAnPyc7CiAgICAgICAgfQogICAgICAgIG9iamVjdFtuYW1lXSA9IHRydWU7CiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOwogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgfTsKfQppZiAoIU9iamVjdC5rZXlzKSB7CiAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAogICAgICAgIGRvbnRFbnVtcyA9IFsKICAgICAgICAgICAgInRvU3RyaW5nIiwKICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKICAgICAgICAgICAgInZhbHVlT2YiLAogICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAogICAgICAgICAgICAiaXNQcm90b3R5cGVPZiIsCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCiAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKICAgICAgICBdLAogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CgogICAgZm9yICh2YXIga2V5IGluIHsidG9TdHJpbmciOiBudWxsfSkgewogICAgICAgIGhhc0RvbnRFbnVtQnVnID0gZmFsc2U7CiAgICB9CgogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewoKICAgICAgICBpZiAoCiAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwKICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsCiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKICAgICAgICB9CgogICAgICAgIHZhciBrZXlzID0gW107CiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgewogICAgICAgICAgICAgICAga2V5cy5wdXNoKG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGRvbnRFbnVtID0gZG9udEVudW1zW2ldOwogICAgICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBkb250RW51bSkpIHsKICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzOwogICAgfTsKCn0KaWYgKCFEYXRlLm5vdykgewogICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgfTsKfQp2YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKwogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKwogICAgIlx1MjAyOVx1RkVGRiI7CmlmICghU3RyaW5nLnByb3RvdHlwZS50cmltKSB7CiAgICB3cyA9ICJbIiArIHdzICsgIl0iOwogICAgdmFyIHRyaW1CZWdpblJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOwogICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CiAgICB9Owp9CgpmdW5jdGlvbiB0b0ludGVnZXIobikgewogICAgbiA9ICtuOwogICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KICAgICAgICBuID0gMDsKICAgIH0gZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpIHsKICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOwogICAgfQogICAgcmV0dXJuIG47Cn0KCmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbnB1dDsKICAgIHJldHVybiAoCiAgICAgICAgaW5wdXQgPT09IG51bGwgfHwKICAgICAgICB0eXBlID09PSAidW5kZWZpbmVkIiB8fAogICAgICAgIHR5cGUgPT09ICJib29sZWFuIiB8fAogICAgICAgIHR5cGUgPT09ICJudW1iZXIiIHx8CiAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKICAgICk7Cn0KCmZ1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZzsKICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKICAgIGlmICh0eXBlb2YgdmFsdWVPZiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHZhbHVlT2YuY2FsbChpbnB1dCk7CiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAgICB9CiAgICB0b1N0cmluZyA9IGlucHV0LnRvU3RyaW5nOwogICAgaWYgKHR5cGVvZiB0b1N0cmluZyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwp9CnZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7CiAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iik7CiAgICB9CiAgICByZXR1cm4gT2JqZWN0KG8pOwp9OwoKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2phdmFzY3JpcHQvanNoaW50IixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7Cm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uIG91dGVyIChtb2R1bGVzLCBjYWNoZSwgZW50cnkpIHsKICAgIHZhciBwcmV2aW91c1JlcXVpcmUgPSB0eXBlb2YgcmVxdWlyZSA9PSAiZnVuY3Rpb24iICYmIHJlcXVpcmU7CiAgICBmdW5jdGlvbiBuZXdSZXF1aXJlKG5hbWUsIGp1bXBlZCl7CiAgICAgICAgaWYoIWNhY2hlW25hbWVdKSB7CiAgICAgICAgICAgIGlmKCFtb2R1bGVzW25hbWVdKSB7CiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFJlcXVpcmUgPSB0eXBlb2YgcmVxdWlyZSA9PSAiZnVuY3Rpb24iICYmIHJlcXVpcmU7CiAgICAgICAgICAgICAgICBpZiAoIWp1bXBlZCAmJiBjdXJyZW50UmVxdWlyZSkgcmV0dXJuIGN1cnJlbnRSZXF1aXJlKG5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUmVxdWlyZSkgcmV0dXJuIHByZXZpb3VzUmVxdWlyZShuYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIG1vZHVsZSBcJycgKyBuYW1lICsgJ1wnJyk7CiAgICAgICAgICAgICAgICBlcnIuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJzsKICAgICAgICAgICAgICAgIHRocm93IGVycjsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgbSA9IGNhY2hlW25hbWVdID0ge2V4cG9ydHM6e319OwogICAgICAgICAgICBtb2R1bGVzW25hbWVdWzBdLmNhbGwobS5leHBvcnRzLCBmdW5jdGlvbih4KXsKICAgICAgICAgICAgICAgIHZhciBpZCA9IG1vZHVsZXNbbmFtZV1bMV1beF07CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3UmVxdWlyZShpZCA/IGlkIDogeCk7CiAgICAgICAgICAgIH0sbSxtLmV4cG9ydHMsb3V0ZXIsbW9kdWxlcyxjYWNoZSxlbnRyeSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYWNoZVtuYW1lXS5leHBvcnRzOwogICAgfQogICAgZm9yKHZhciBpPTA7aTxlbnRyeS5sZW5ndGg7aSsrKSBuZXdSZXF1aXJlKGVudHJ5W2ldKTsKICAgIHJldHVybiBuZXdSZXF1aXJlKGVudHJ5WzBdKTsKfSkKKHsiL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CgpmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7CiAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9OwogIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7Cn0KbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7CkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7CgpFdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7CkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDsKRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDsKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbihuKSB7CiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSkKICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7CiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjsKICByZXR1cm4gdGhpczsKfTsKCkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHsKICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzOwoKICBpZiAoIXRoaXMuX2V2ZW50cykKICAgIHRoaXMuX2V2ZW50cyA9IHt9OwogIGlmICh0eXBlID09PSAnZXJyb3InKSB7CiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fAogICAgICAgIChpc09iamVjdCh0aGlzLl9ldmVudHMuZXJyb3IpICYmICF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSkgewogICAgICBlciA9IGFyZ3VtZW50c1sxXTsKICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnQKICAgICAgfQogICAgICB0aHJvdyBUeXBlRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCAiZXJyb3IiIGV2ZW50LicpOwogICAgfQogIH0KCiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTsKCiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKQogICAgcmV0dXJuIGZhbHNlOwoKICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkgewogICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIGNhc2UgMToKICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjoKICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzOgogICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKICAgICAgICBhcmdzID0gbmV3IEFycmF5KGxlbiAtIDEpOwogICAgICAgIGZvciAoaSA9IDE7IGkgPCBsZW47IGkrKykKICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwogICAgICAgIGhhbmRsZXIuYXBwbHkodGhpcywgYXJncyk7CiAgICB9CiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkgewogICAgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsKICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gMSk7CiAgICBmb3IgKGkgPSAxOyBpIDwgbGVuOyBpKyspCiAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldOwoKICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTsKICAgIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7CiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTsKICB9CgogIHJldHVybiB0cnVlOwp9OwoKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7CiAgdmFyIG07CgogIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpCiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOwoKICBpZiAoIXRoaXMuX2V2ZW50cykKICAgIHRoaXMuX2V2ZW50cyA9IHt9OwogIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpCiAgICB0aGlzLmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSwKICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/CiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7CgogIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKQogICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7CiAgZWxzZSBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSkKICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTsKICBlbHNlCiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07CiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHsKICAgIHZhciBtOwogICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9tYXhMaXN0ZW5lcnMpKSB7CiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7CiAgICB9IGVsc2UgewogICAgICBtID0gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7CiAgICB9CgogICAgaWYgKG0gJiYgbSA+IDAgJiYgdGhpcy5fZXZlbnRzW3R5cGVdLmxlbmd0aCA+IG0pIHsKICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7CiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgKwogICAgICAgICAgICAgICAgICAgICdsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuICcgKwogICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLAogICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpOwogICAgICBpZiAodHlwZW9mIGNvbnNvbGUudHJhY2UgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICBjb25zb2xlLnRyYWNlKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiB0aGlzOwp9OwoKRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7CgpFdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgewogIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpCiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpOwoKICB2YXIgZmlyZWQgPSBmYWxzZTsKCiAgZnVuY3Rpb24gZygpIHsKICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7CgogICAgaWYgKCFmaXJlZCkgewogICAgICBmaXJlZCA9IHRydWU7CiAgICAgIGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7CiAgdGhpcy5vbih0eXBlLCBnKTsKCiAgcmV0dXJuIHRoaXM7Cn07CkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikgewogIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpOwoKICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKQogICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTsKCiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSkKICAgIHJldHVybiB0aGlzOwoKICBsaXN0ID0gdGhpcy5fZXZlbnRzW3R5cGVdOwogIGxlbmd0aCA9IGxpc3QubGVuZ3RoOwogIHBvc2l0aW9uID0gLTE7CgogIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fAogICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHsKICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07CiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQogICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpOwoKICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7CiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7CiAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fAogICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7CiAgICAgICAgcG9zaXRpb24gPSBpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgaWYgKHBvc2l0aW9uIDwgMCkKICAgICAgcmV0dXJuIHRoaXM7CgogICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7CiAgICAgIGxpc3QubGVuZ3RoID0gMDsKICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTsKICAgIH0KCiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKQogICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpOwogIH0KCiAgcmV0dXJuIHRoaXM7Cn07CgpFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uKHR5cGUpIHsKICB2YXIga2V5LCBsaXN0ZW5lcnM7CgogIGlmICghdGhpcy5fZXZlbnRzKQogICAgcmV0dXJuIHRoaXM7CiAgaWYgKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKQogICAgICB0aGlzLl9ldmVudHMgPSB7fTsKICAgIGVsc2UgaWYgKHRoaXMuX2V2ZW50c1t0eXBlXSkKICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTsKICAgIHJldHVybiB0aGlzOwogIH0KICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7CiAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlOwogICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpOwogICAgfQogICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7CiAgICB0aGlzLl9ldmVudHMgPSB7fTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdOwoKICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7CiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7CiAgfSBlbHNlIHsKICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKQogICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tsaXN0ZW5lcnMubGVuZ3RoIC0gMV0pOwogIH0KICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdOwoKICByZXR1cm4gdGhpczsKfTsKCkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkgewogIHZhciByZXQ7CiAgaWYgKCF0aGlzLl9ldmVudHMgfHwgIXRoaXMuX2V2ZW50c1t0eXBlXSkKICAgIHJldCA9IFtdOwogIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSkKICAgIHJldCA9IFt0aGlzLl9ldmVudHNbdHlwZV1dOwogIGVsc2UKICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpOwogIHJldHVybiByZXQ7Cn07CgpFdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHsKICB2YXIgcmV0OwogIGlmICghZW1pdHRlci5fZXZlbnRzIHx8ICFlbWl0dGVyLl9ldmVudHNbdHlwZV0pCiAgICByZXQgPSAwOwogIGVsc2UgaWYgKGlzRnVuY3Rpb24oZW1pdHRlci5fZXZlbnRzW3R5cGVdKSkKICAgIHJldCA9IDE7CiAgZWxzZQogICAgcmV0ID0gZW1pdHRlci5fZXZlbnRzW3R5cGVdLmxlbmd0aDsKICByZXR1cm4gcmV0Owp9OwoKZnVuY3Rpb24gaXNGdW5jdGlvbihhcmcpIHsKICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJzsKfQoKZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7CiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInOwp9CgpmdW5jdGlvbiBpc09iamVjdChhcmcpIHsKICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsOwp9CgpmdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHsKICByZXR1cm4gYXJnID09PSB2b2lkIDA7Cn0KCn0se31dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9kYXRhL2FzY2lpLWlkZW50aWZpZXItZGF0YS5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewp2YXIgaWRlbnRpZmllclN0YXJ0VGFibGUgPSBbXTsKCmZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKICBpZGVudGlmaWVyU3RhcnRUYWJsZVtpXSA9CiAgICBpID09PSAzNiB8fCAgICAgICAgICAgLy8gJAogICAgaSA+PSA2NSAmJiBpIDw9IDkwIHx8IC8vIEEtWgogICAgaSA9PT0gOTUgfHwgICAgICAgICAgIC8vIF8KICAgIGkgPj0gOTcgJiYgaSA8PSAxMjI7ICAvLyBhLXoKfQoKdmFyIGlkZW50aWZpZXJQYXJ0VGFibGUgPSBbXTsKCmZvciAodmFyIGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKICBpZGVudGlmaWVyUGFydFRhYmxlW2ldID0KICAgIGlkZW50aWZpZXJTdGFydFRhYmxlW2ldIHx8IC8vICQsIF8sIEEtWiwgYS16CiAgICBpID49IDQ4ICYmIGkgPD0gNTc7ICAgICAgICAvLyAwLTkKfQoKbW9kdWxlLmV4cG9ydHMgPSB7CiAgYXNjaWlJZGVudGlmaWVyU3RhcnRUYWJsZTogaWRlbnRpZmllclN0YXJ0VGFibGUsCiAgYXNjaWlJZGVudGlmaWVyUGFydFRhYmxlOiBpZGVudGlmaWVyUGFydFRhYmxlCn07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy9qc2hpbnQvbG9kYXNoLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKOyhmdW5jdGlvbigpIHsKCiAgdmFyIHVuZGVmaW5lZDsKCiAgdmFyIFZFUlNJT04gPSAnMy43LjAnOwoKICB2YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nOwoKICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLAogICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsCiAgICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsCiAgICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsCiAgICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJywKICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsCiAgICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLAogICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJywKICAgICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsCiAgICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLAogICAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJywKICAgICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsCiAgICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7CgogIHZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsCiAgICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJywKICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLAogICAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsCiAgICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLAogICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJywKICAgICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsCiAgICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsCiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsCiAgICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7CgogIHZhciByZUlzRGVlcFByb3AgPSAvXC58XFsoPzpbXltcXV0rfChbIiddKSg/Oig/IVwxKVteXG5cXF18XFwuKSo/KVwxXF0vLAogICAgICByZUlzUGxhaW5Qcm9wID0gL15cdyokLywKICAgICAgcmVQcm9wTmFtZSA9IC9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxuXFxdfFxcLikqPylcMilcXS9nOwoKICB2YXIgcmVSZWdFeHBDaGFycyA9IC9bLiorP14ke30oKXxbXF1cL1xcXS9nLAogICAgICByZUhhc1JlZ0V4cENoYXJzID0gUmVnRXhwKHJlUmVnRXhwQ2hhcnMuc291cmNlKTsKCiAgdmFyIHJlRXNjYXBlQ2hhciA9IC9cXChcXCk/L2c7CgogIHZhciByZUZsYWdzID0gL1x3KiQvOwoKICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87CgogIHZhciB0eXBlZEFycmF5VGFncyA9IHt9OwogIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID0KICB0eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID0KICB0eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTsKICB0eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9CiAgdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID0gdHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0KICB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9IHR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0KICB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID0gdHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9CiAgdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7CgogIHZhciBjbG9uZWFibGVUYWdzID0ge307CiAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID0KICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPQogIGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPSBjbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0KICBjbG9uZWFibGVUYWdzW2Zsb2F0NjRUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9CiAgY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9CiAgY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID0KICBjbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3N0cmluZ1RhZ10gPQogIGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID0KICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlOwogIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9CiAgY2xvbmVhYmxlVGFnc1ttYXBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID0KICBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7CgogIHZhciBvYmplY3RUeXBlcyA9IHsKICAgICdmdW5jdGlvbic6IHRydWUsCiAgICAnb2JqZWN0JzogdHJ1ZQogIH07CgogIHZhciBmcmVlRXhwb3J0cyA9IG9iamVjdFR5cGVzW3R5cGVvZiBleHBvcnRzXSAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7CgogIHZhciBmcmVlTW9kdWxlID0gb2JqZWN0VHlwZXNbdHlwZW9mIG1vZHVsZV0gJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlOwoKICB2YXIgZnJlZUdsb2JhbCA9IGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUgJiYgdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCAmJiBnbG9iYWw7CgogIHZhciBmcmVlU2VsZiA9IG9iamVjdFR5cGVzW3R5cGVvZiBzZWxmXSAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ICYmIHNlbGY7CgogIHZhciBmcmVlV2luZG93ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93ICYmIHdpbmRvdy5PYmplY3QgJiYgd2luZG93OwoKICB2YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cyAmJiBmcmVlRXhwb3J0czsKCiAgdmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8ICgoZnJlZVdpbmRvdyAhPT0gKHRoaXMgJiYgdGhpcy53aW5kb3cpKSAmJiBmcmVlV2luZG93KSB8fCBmcmVlU2VsZiB8fCB0aGlzOwoKICBmdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21SaWdodCkgewogICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xOwoKICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7CiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBmdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkgewogICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgewogICAgICByZXR1cm4gaW5kZXhPZk5hTihhcnJheSwgZnJvbUluZGV4KTsKICAgIH0KICAgIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsCiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBmdW5jdGlvbiBiYXNlSXNGdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiAodmFsdWUgKyAnJyk7CiAgfQoKICBmdW5jdGlvbiBpbmRleE9mTmFOKGFycmF5LCBmcm9tSW5kZXgsIGZyb21SaWdodCkgewogICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAwIDogLTEpOwoKICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7CiAgICAgIHZhciBvdGhlciA9IGFycmF5W2luZGV4XTsKICAgICAgaWYgKG90aGVyICE9PSBvdGhlcikgewogICAgICAgIHJldHVybiBpbmRleDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7CiAgICByZXR1cm4gISF2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7CiAgfQoKICB2YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZSwKICAgICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlOwoKICB2YXIgZm5Ub1N0cmluZyA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZzsKCiAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7CgogIHZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nOwoKICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKwogICAgZXNjYXBlUmVnRXhwKG9ialRvU3RyaW5nKQogICAgLnJlcGxhY2UoL3RvU3RyaW5nfChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICckMS4qPycpICsgJyQnCiAgKTsKCiAgdmFyIEFycmF5QnVmZmVyID0gaXNOYXRpdmUoQXJyYXlCdWZmZXIgPSByb290LkFycmF5QnVmZmVyKSAmJiBBcnJheUJ1ZmZlciwKICAgICAgYnVmZmVyU2xpY2UgPSBpc05hdGl2ZShidWZmZXJTbGljZSA9IEFycmF5QnVmZmVyICYmIG5ldyBBcnJheUJ1ZmZlcigwKS5zbGljZSkgJiYgYnVmZmVyU2xpY2UsCiAgICAgIGZsb29yID0gTWF0aC5mbG9vciwKICAgICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gaXNOYXRpdmUoZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgJiYgZ2V0T3duUHJvcGVydHlTeW1ib2xzLAogICAgICBnZXRQcm90b3R5cGVPZiA9IGlzTmF0aXZlKGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKSAmJiBnZXRQcm90b3R5cGVPZiwKICAgICAgcHVzaCA9IGFycmF5UHJvdG8ucHVzaCwKICAgICAgcHJldmVudEV4dGVuc2lvbnMgPSBpc05hdGl2ZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMpICYmIHByZXZlbnRFeHRlbnNpb25zLAogICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLAogICAgICBVaW50OEFycmF5ID0gaXNOYXRpdmUoVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheSkgJiYgVWludDhBcnJheTsKCiAgdmFyIEZsb2F0NjRBcnJheSA9IChmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHZhciBmdW5jID0gaXNOYXRpdmUoZnVuYyA9IHJvb3QuRmxvYXQ2NEFycmF5KSAmJiBmdW5jLAogICAgICAgICAgcmVzdWx0ID0gbmV3IGZ1bmMobmV3IEFycmF5QnVmZmVyKDEwKSwgMCwgMSkgJiYgZnVuYzsKICAgIH0gY2F0Y2goZSkge30KICAgIHJldHVybiByZXN1bHQ7CiAgfSgpKTsKCiAgdmFyIG5hdGl2ZUFzc2lnbiA9IChmdW5jdGlvbigpIHsKICAgIHZhciBvYmplY3QgPSB7ICcxJzogMCB9LAogICAgICAgIGZ1bmMgPSBwcmV2ZW50RXh0ZW5zaW9ucyAmJiBpc05hdGl2ZShmdW5jID0gT2JqZWN0LmFzc2lnbikgJiYgZnVuYzsKCiAgICB0cnkgeyBmdW5jKHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCksICd4bycpOyB9IGNhdGNoKGUpIHt9CiAgICByZXR1cm4gIW9iamVjdFsxXSAmJiBmdW5jOwogIH0oKSk7CgogIHZhciBuYXRpdmVJc0FycmF5ID0gaXNOYXRpdmUobmF0aXZlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkpICYmIG5hdGl2ZUlzQXJyYXksCiAgICAgIG5hdGl2ZUtleXMgPSBpc05hdGl2ZShuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMpICYmIG5hdGl2ZUtleXMsCiAgICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4LAogICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjsKCiAgdmFyIE5FR0FUSVZFX0lORklOSVRZID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOwoKICB2YXIgTUFYX0FSUkFZX0xFTkdUSCA9IE1hdGgucG93KDIsIDMyKSAtIDEsCiAgICAgIE1BWF9BUlJBWV9JTkRFWCA9ICBNQVhfQVJSQVlfTEVOR1RIIC0gMSwKICAgICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTsKCiAgdmFyIEZMT0FUNjRfQllURVNfUEVSX0VMRU1FTlQgPSBGbG9hdDY0QXJyYXkgPyBGbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgOiAwOwoKICB2YXIgTUFYX1NBRkVfSU5URUdFUiA9IE1hdGgucG93KDIsIDUzKSAtIDE7CgogIGZ1bmN0aW9uIGxvZGFzaCgpIHsKICB9CgogIHZhciBzdXBwb3J0ID0gbG9kYXNoLnN1cHBvcnQgPSB7fTsKCiAgKGZ1bmN0aW9uKHgpIHsKICAgIHZhciBDdG9yID0gZnVuY3Rpb24oKSB7IHRoaXMueCA9IHg7IH0sCiAgICAgICAgb2JqZWN0ID0geyAnMCc6IHgsICdsZW5ndGgnOiB4IH0sCiAgICAgICAgcHJvcHMgPSBbXTsKCiAgICBDdG9yLnByb3RvdHlwZSA9IHsgJ3ZhbHVlT2YnOiB4LCAneSc6IHggfTsKICAgIGZvciAodmFyIGtleSBpbiBuZXcgQ3RvcikgeyBwcm9wcy5wdXNoKGtleSk7IH0KCiAgICBzdXBwb3J0LmZ1bmNEZWNvbXAgPSAvXGJ0aGlzXGIvLnRlc3QoZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KTsKCiAgICBzdXBwb3J0LmZ1bmNOYW1lcyA9IHR5cGVvZiBGdW5jdGlvbi5uYW1lID09ICdzdHJpbmcnOwoKICAgIHRyeSB7CiAgICAgIHN1cHBvcnQubm9uRW51bUFyZ3MgPSAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChhcmd1bWVudHMsIDEpOwogICAgfSBjYXRjaChlKSB7CiAgICAgIHN1cHBvcnQubm9uRW51bUFyZ3MgPSB0cnVlOwogICAgfQogIH0oMSwgMCkpOwoKICBmdW5jdGlvbiBhcnJheUNvcHkoc291cmNlLCBhcnJheSkgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKCiAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07CiAgICB9CiAgICByZXR1cm4gYXJyYXk7CiAgfQoKICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7CiAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGFycmF5OwogIH0KCiAgZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIHJlc0luZGV4ID0gLTEsCiAgICAgICAgcmVzdWx0ID0gW107CgogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdOwogICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7CiAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBhcnJheU1hcChhcnJheSwgaXRlcmF0ZWUpIHsKICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpOwoKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gYXJyYXlNYXgoYXJyYXkpIHsKICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICByZXN1bHQgPSBORUdBVElWRV9JTkZJTklUWTsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07CiAgICAgIGlmICh2YWx1ZSA+IHJlc3VsdCkgewogICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHsKICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBhc3NpZ25XaXRoKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKSB7CiAgICB2YXIgcHJvcHMgPSBrZXlzKHNvdXJjZSk7CiAgICBwdXNoLmFwcGx5KHByb3BzLCBnZXRTeW1ib2xzKHNvdXJjZSkpOwoKICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLAogICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XSwKICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIodmFsdWUsIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKTsKCiAgICAgIGlmICgocmVzdWx0ID09PSByZXN1bHQgPyAocmVzdWx0ICE9PSB2YWx1ZSkgOiAodmFsdWUgPT09IHZhbHVlKSkgfHwKICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7CiAgICAgICAgb2JqZWN0W2tleV0gPSByZXN1bHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvYmplY3Q7CiAgfQoKICB2YXIgYmFzZUFzc2lnbiA9IG5hdGl2ZUFzc2lnbiB8fCBmdW5jdGlvbihvYmplY3QsIHNvdXJjZSkgewogICAgcmV0dXJuIHNvdXJjZSA9PSBudWxsCiAgICAgID8gb2JqZWN0CiAgICAgIDogYmFzZUNvcHkoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIGJhc2VDb3B5KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QpKTsKICB9OwoKICBmdW5jdGlvbiBiYXNlQ29weShzb3VyY2UsIHByb3BzLCBvYmplY3QpIHsKICAgIG9iamVjdCB8fCAob2JqZWN0ID0ge30pOwoKICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdOwogICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldOwogICAgfQogICAgcmV0dXJuIG9iamVjdDsKICB9CgogIGZ1bmN0aW9uIGJhc2VDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgZnVuYzsKICAgIGlmICh0eXBlID09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZAogICAgICAgID8gZnVuYwogICAgICAgIDogYmluZENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KTsKICAgIH0KICAgIGlmIChmdW5jID09IG51bGwpIHsKICAgICAgcmV0dXJuIGlkZW50aXR5OwogICAgfQogICAgaWYgKHR5cGUgPT0gJ29iamVjdCcpIHsKICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGZ1bmMpOwogICAgfQogICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZAogICAgICA/IHByb3BlcnR5KGZ1bmMpCiAgICAgIDogYmFzZU1hdGNoZXNQcm9wZXJ0eShmdW5jLCB0aGlzQXJnKTsKICB9CgogIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgaXNEZWVwLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2tBLCBzdGFja0IpIHsKICAgIHZhciByZXN1bHQ7CiAgICBpZiAoY3VzdG9taXplcikgewogICAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCkgOiBjdXN0b21pemVyKHZhbHVlKTsKICAgIH0KICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgdmFyIGlzQXJyID0gaXNBcnJheSh2YWx1ZSk7CiAgICBpZiAoaXNBcnIpIHsKICAgICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpOwogICAgICBpZiAoIWlzRGVlcCkgewogICAgICAgIHJldHVybiBhcnJheUNvcHkodmFsdWUsIHJlc3VsdCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciB0YWcgPSBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSwKICAgICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnOwoKICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkgewogICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlKTsKICAgICAgICBpZiAoIWlzRGVlcCkgewogICAgICAgICAgcmV0dXJuIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjbG9uZWFibGVUYWdzW3RhZ10KICAgICAgICAgID8gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKQogICAgICAgICAgOiAob2JqZWN0ID8gdmFsdWUgOiB7fSk7CiAgICAgIH0KICAgIH0KICAgIHN0YWNrQSB8fCAoc3RhY2tBID0gW10pOwogICAgc3RhY2tCIHx8IChzdGFja0IgPSBbXSk7CgogICAgdmFyIGxlbmd0aCA9IHN0YWNrQS5sZW5ndGg7CiAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgaWYgKHN0YWNrQVtsZW5ndGhdID09IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHN0YWNrQltsZW5ndGhdOwogICAgICB9CiAgICB9CiAgICBzdGFja0EucHVzaCh2YWx1ZSk7CiAgICBzdGFja0IucHVzaChyZXN1bHQpOwoKICAgIChpc0FyciA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7CiAgICAgIHJlc3VsdFtrZXldID0gYmFzZUNsb25lKHN1YlZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrQSwgc3RhY2tCKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pOwoKICBmdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkgewogICAgdmFyIHJlc3VsdCA9IFtdOwogICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkgewogICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7CgogIGZ1bmN0aW9uIGJhc2VGb3JJbihvYmplY3QsIGl0ZXJhdGVlKSB7CiAgICByZXR1cm4gYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzSW4pOwogIH0KCiAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7CiAgICByZXR1cm4gYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTsKICB9CgogIGZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoLCBwYXRoS2V5KSB7CiAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHBhdGhLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXRoS2V5IGluIHRvT2JqZWN0KG9iamVjdCkpIHsKICAgICAgcGF0aCA9IFtwYXRoS2V5XTsKICAgIH0KICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoOwoKICAgIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiArK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIHZhciByZXN1bHQgPSBvYmplY3QgPSBvYmplY3RbcGF0aFtpbmRleF1dOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgY3VzdG9taXplciwgaXNMb29zZSwgc3RhY2tBLCBzdGFja0IpIHsKICAgIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHsKICAgICAgcmV0dXJuIHZhbHVlICE9PSAwIHx8ICgxIC8gdmFsdWUgPT0gMSAvIG90aGVyKTsKICAgIH0KICAgIHZhciB2YWxUeXBlID0gdHlwZW9mIHZhbHVlLAogICAgICAgIG90aFR5cGUgPSB0eXBlb2Ygb3RoZXI7CgogICAgaWYgKCh2YWxUeXBlICE9ICdmdW5jdGlvbicgJiYgdmFsVHlwZSAhPSAnb2JqZWN0JyAmJiBvdGhUeXBlICE9ICdmdW5jdGlvbicgJiYgb3RoVHlwZSAhPSAnb2JqZWN0JykgfHwKICAgICAgICB2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwpIHsKICAgICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7CiAgICB9CiAgICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYmFzZUlzRXF1YWwsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTsKICB9CgogIGZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7CiAgICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksCiAgICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSwKICAgICAgICBvYmpUYWcgPSBhcnJheVRhZywKICAgICAgICBvdGhUYWcgPSBhcnJheVRhZzsKCiAgICBpZiAoIW9iaklzQXJyKSB7CiAgICAgIG9ialRhZyA9IG9ialRvU3RyaW5nLmNhbGwob2JqZWN0KTsKICAgICAgaWYgKG9ialRhZyA9PSBhcmdzVGFnKSB7CiAgICAgICAgb2JqVGFnID0gb2JqZWN0VGFnOwogICAgICB9IGVsc2UgaWYgKG9ialRhZyAhPSBvYmplY3RUYWcpIHsKICAgICAgICBvYmpJc0FyciA9IGlzVHlwZWRBcnJheShvYmplY3QpOwogICAgICB9CiAgICB9CiAgICBpZiAoIW90aElzQXJyKSB7CiAgICAgIG90aFRhZyA9IG9ialRvU3RyaW5nLmNhbGwob3RoZXIpOwogICAgICBpZiAob3RoVGFnID09IGFyZ3NUYWcpIHsKICAgICAgICBvdGhUYWcgPSBvYmplY3RUYWc7CiAgICAgIH0gZWxzZSBpZiAob3RoVGFnICE9IG9iamVjdFRhZykgewogICAgICAgIG90aElzQXJyID0gaXNUeXBlZEFycmF5KG90aGVyKTsKICAgICAgfQogICAgfQogICAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZywKICAgICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsCiAgICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZzsKCiAgICBpZiAoaXNTYW1lVGFnICYmICEob2JqSXNBcnIgfHwgb2JqSXNPYmopKSB7CiAgICAgIHJldHVybiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZyk7CiAgICB9CiAgICBpZiAoIWlzTG9vc2UpIHsKICAgICAgdmFyIHZhbFdyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksCiAgICAgICAgICBvdGhXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7CgogICAgICBpZiAodmFsV3JhcHBlZCB8fCBvdGhXcmFwcGVkKSB7CiAgICAgICAgcmV0dXJuIGVxdWFsRnVuYyh2YWxXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsIG90aFdyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXIsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTsKICAgICAgfQogICAgfQogICAgaWYgKCFpc1NhbWVUYWcpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgc3RhY2tBIHx8IChzdGFja0EgPSBbXSk7CiAgICBzdGFja0IgfHwgKHN0YWNrQiA9IFtdKTsKCiAgICB2YXIgbGVuZ3RoID0gc3RhY2tBLmxlbmd0aDsKICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gb2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHN0YWNrQltsZW5ndGhdID09IG90aGVyOwogICAgICB9CiAgICB9CiAgICBzdGFja0EucHVzaChvYmplY3QpOwogICAgc3RhY2tCLnB1c2gob3RoZXIpOwoKICAgIHZhciByZXN1bHQgPSAob2JqSXNBcnIgPyBlcXVhbEFycmF5cyA6IGVxdWFsT2JqZWN0cykob2JqZWN0LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQik7CgogICAgc3RhY2tBLnBvcCgpOwogICAgc3RhY2tCLnBvcCgpOwoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHByb3BzLCB2YWx1ZXMsIHN0cmljdENvbXBhcmVGbGFncywgY3VzdG9taXplcikgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLAogICAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyOwoKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGlmICgobm9DdXN0b21pemVyICYmIHN0cmljdENvbXBhcmVGbGFnc1tpbmRleF0pCiAgICAgICAgICAgID8gdmFsdWVzW2luZGV4XSAhPT0gb2JqZWN0W3Byb3BzW2luZGV4XV0KICAgICAgICAgICAgOiAhKHByb3BzW2luZGV4XSBpbiBvYmplY3QpCiAgICAgICAgICApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGluZGV4ID0gLTE7CiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLAogICAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSwKICAgICAgICAgIHNyY1ZhbHVlID0gdmFsdWVzW2luZGV4XTsKCiAgICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgc3RyaWN0Q29tcGFyZUZsYWdzW2luZGV4XSkgewogICAgICAgIHZhciByZXN1bHQgPSBvYmpWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gb2JqZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSkgOiB1bmRlZmluZWQ7CiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICByZXN1bHQgPSBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIGN1c3RvbWl6ZXIsIHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHsKICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKSwKICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7CgogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50KHRydWUpOwogICAgfQogICAgaWYgKGxlbmd0aCA9PSAxKSB7CiAgICAgIHZhciBrZXkgPSBwcm9wc1swXSwKICAgICAgICAgIHZhbHVlID0gc291cmNlW2tleV07CgogICAgICBpZiAoaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHZhbHVlICYmICh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gdG9PYmplY3Qob2JqZWN0KSkpOwogICAgICAgIH07CiAgICAgIH0KICAgIH0KICAgIHZhciB2YWx1ZXMgPSBBcnJheShsZW5ndGgpLAogICAgICAgIHN0cmljdENvbXBhcmVGbGFncyA9IEFycmF5KGxlbmd0aCk7CgogICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgIHZhbHVlID0gc291cmNlW3Byb3BzW2xlbmd0aF1dOwogICAgICB2YWx1ZXNbbGVuZ3RoXSA9IHZhbHVlOwogICAgICBzdHJpY3RDb21wYXJlRmxhZ3NbbGVuZ3RoXSA9IGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBiYXNlSXNNYXRjaCh0b09iamVjdChvYmplY3QpLCBwcm9wcywgdmFsdWVzLCBzdHJpY3RDb21wYXJlRmxhZ3MpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgdmFsdWUpIHsKICAgIHZhciBpc0FyciA9IGlzQXJyYXkocGF0aCksCiAgICAgICAgaXNDb21tb24gPSBpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpLAogICAgICAgIHBhdGhLZXkgPSAocGF0aCArICcnKTsKCiAgICBwYXRoID0gdG9QYXRoKHBhdGgpOwogICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewogICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGtleSA9IHBhdGhLZXk7CiAgICAgIG9iamVjdCA9IHRvT2JqZWN0KG9iamVjdCk7CiAgICAgIGlmICgoaXNBcnIgfHwgIWlzQ29tbW9uKSAmJiAhKGtleSBpbiBvYmplY3QpKSB7CiAgICAgICAgb2JqZWN0ID0gcGF0aC5sZW5ndGggPT0gMSA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTsKICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAga2V5ID0gbGFzdChwYXRoKTsKICAgICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpOwogICAgICB9CiAgICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gdmFsdWUKICAgICAgICA/ICh2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gb2JqZWN0KSkKICAgICAgICA6IGJhc2VJc0VxdWFsKHZhbHVlLCBvYmplY3Rba2V5XSwgbnVsbCwgdHJ1ZSk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQikgewogICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7CiAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9CiAgICB2YXIgaXNTcmNBcnIgPSBpc0xlbmd0aChzb3VyY2UubGVuZ3RoKSAmJiAoaXNBcnJheShzb3VyY2UpIHx8IGlzVHlwZWRBcnJheShzb3VyY2UpKTsKICAgIGlmICghaXNTcmNBcnIpIHsKICAgICAgdmFyIHByb3BzID0ga2V5cyhzb3VyY2UpOwogICAgICBwdXNoLmFwcGx5KHByb3BzLCBnZXRTeW1ib2xzKHNvdXJjZSkpOwogICAgfQogICAgYXJyYXlFYWNoKHByb3BzIHx8IHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkgewogICAgICBpZiAocHJvcHMpIHsKICAgICAgICBrZXkgPSBzcmNWYWx1ZTsKICAgICAgICBzcmNWYWx1ZSA9IHNvdXJjZVtrZXldOwogICAgICB9CiAgICAgIGlmIChpc09iamVjdExpa2Uoc3JjVmFsdWUpKSB7CiAgICAgICAgc3RhY2tBIHx8IChzdGFja0EgPSBbXSk7CiAgICAgICAgc3RhY2tCIHx8IChzdGFja0IgPSBbXSk7CiAgICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrQSwgc3RhY2tCKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XSwKICAgICAgICAgICAgcmVzdWx0ID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIodmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKSA6IHVuZGVmaW5lZCwKICAgICAgICAgICAgaXNDb21tb24gPSByZXN1bHQgPT09IHVuZGVmaW5lZDsKCiAgICAgICAgaWYgKGlzQ29tbW9uKSB7CiAgICAgICAgICByZXN1bHQgPSBzcmNWYWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKChpc1NyY0FyciB8fCByZXN1bHQgIT09IHVuZGVmaW5lZCkgJiYKICAgICAgICAgICAgKGlzQ29tbW9uIHx8IChyZXN1bHQgPT09IHJlc3VsdCA/IChyZXN1bHQgIT09IHZhbHVlKSA6ICh2YWx1ZSA9PT0gdmFsdWUpKSkpIHsKICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0OwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gb2JqZWN0OwogIH0KCiAgZnVuY3Rpb24gYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrQSwgc3RhY2tCKSB7CiAgICB2YXIgbGVuZ3RoID0gc3RhY2tBLmxlbmd0aCwKICAgICAgICBzcmNWYWx1ZSA9IHNvdXJjZVtrZXldOwoKICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gc3JjVmFsdWUpIHsKICAgICAgICBvYmplY3Rba2V5XSA9IHN0YWNrQltsZW5ndGhdOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV0sCiAgICAgICAgcmVzdWx0ID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIodmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKSA6IHVuZGVmaW5lZCwKICAgICAgICBpc0NvbW1vbiA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkOwoKICAgIGlmIChpc0NvbW1vbikgewogICAgICByZXN1bHQgPSBzcmNWYWx1ZTsKICAgICAgaWYgKGlzTGVuZ3RoKHNyY1ZhbHVlLmxlbmd0aCkgJiYgKGlzQXJyYXkoc3JjVmFsdWUpIHx8IGlzVHlwZWRBcnJheShzcmNWYWx1ZSkpKSB7CiAgICAgICAgcmVzdWx0ID0gaXNBcnJheSh2YWx1ZSkKICAgICAgICAgID8gdmFsdWUKICAgICAgICAgIDogKGdldExlbmd0aCh2YWx1ZSkgPyBhcnJheUNvcHkodmFsdWUpIDogW10pOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpIHx8IGlzQXJndW1lbnRzKHNyY1ZhbHVlKSkgewogICAgICAgIHJlc3VsdCA9IGlzQXJndW1lbnRzKHZhbHVlKQogICAgICAgICAgPyB0b1BsYWluT2JqZWN0KHZhbHVlKQogICAgICAgICAgOiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHt9KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpc0NvbW1vbiA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzdGFja0EucHVzaChzcmNWYWx1ZSk7CiAgICBzdGFja0IucHVzaChyZXN1bHQpOwoKICAgIGlmIChpc0NvbW1vbikgewogICAgICBvYmplY3Rba2V5XSA9IG1lcmdlRnVuYyhyZXN1bHQsIHNyY1ZhbHVlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQik7CiAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlc3VsdCAhPT0gdmFsdWUpIDogKHZhbHVlID09PSB2YWx1ZSkpIHsKICAgICAgb2JqZWN0W2tleV0gPSByZXN1bHQ7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkgewogICAgdmFyIHBhdGhLZXkgPSAocGF0aCArICcnKTsKICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7CiAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgogICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6ICgrc3RhcnQgfHwgMCk7CiAgICBpZiAoc3RhcnQgPCAwKSB7CiAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7CiAgICB9CiAgICBlbmQgPSAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gbGVuZ3RoKSA/IGxlbmd0aCA6ICgrZW5kIHx8IDApOwogICAgaWYgKGVuZCA8IDApIHsKICAgICAgZW5kICs9IGxlbmd0aDsKICAgIH0KICAgIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTsKICAgIHN0YXJ0ID4+Pj0gMDsKCiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmdW5jdGlvbiBiYXNlU29tZShjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHsKICAgIHZhciByZXN1bHQ7CgogICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOwogICAgICByZXR1cm4gIXJlc3VsdDsKICAgIH0pOwogICAgcmV0dXJuICEhcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7CiAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsCiAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICByZXN1bHRbaW5kZXhdID0gb2JqZWN0W3Byb3BzW2luZGV4XV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gYmluYXJ5SW5kZXgoYXJyYXksIHZhbHVlLCByZXRIaWdoZXN0KSB7CiAgICB2YXIgbG93ID0gMCwKICAgICAgICBoaWdoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiBsb3c7CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PT0gdmFsdWUgJiYgaGlnaCA8PSBIQUxGX01BWF9BUlJBWV9MRU5HVEgpIHsKICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAgICB2YXIgbWlkID0gKGxvdyArIGhpZ2gpID4+PiAxLAogICAgICAgICAgICBjb21wdXRlZCA9IGFycmF5W21pZF07CgogICAgICAgIGlmIChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkgewogICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGhpZ2g7CiAgICB9CiAgICByZXR1cm4gYmluYXJ5SW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTsKICB9CgogIGZ1bmN0aW9uIGJpbmFyeUluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkgewogICAgdmFsdWUgPSBpdGVyYXRlZSh2YWx1ZSk7CgogICAgdmFyIGxvdyA9IDAsCiAgICAgICAgaGlnaCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCwKICAgICAgICB2YWxJc05hTiA9IHZhbHVlICE9PSB2YWx1ZSwKICAgICAgICB2YWxJc1VuZGVmID0gdmFsdWUgPT09IHVuZGVmaW5lZDsKCiAgICB3aGlsZSAobG93IDwgaGlnaCkgewogICAgICB2YXIgbWlkID0gZmxvb3IoKGxvdyArIGhpZ2gpIC8gMiksCiAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLAogICAgICAgICAgaXNSZWZsZXhpdmUgPSBjb21wdXRlZCA9PT0gY29tcHV0ZWQ7CgogICAgICBpZiAodmFsSXNOYU4pIHsKICAgICAgICB2YXIgc2V0TG93ID0gaXNSZWZsZXhpdmUgfHwgcmV0SGlnaGVzdDsKICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmKSB7CiAgICAgICAgc2V0TG93ID0gaXNSZWZsZXhpdmUgJiYgKHJldEhpZ2hlc3QgfHwgY29tcHV0ZWQgIT09IHVuZGVmaW5lZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0TG93ID0gcmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSk7CiAgICAgIH0KICAgICAgaWYgKHNldExvdykgewogICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpOwogIH0KCiAgZnVuY3Rpb24gYmluZENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KSB7CiAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewogICAgICByZXR1cm4gaWRlbnRpdHk7CiAgICB9CiAgICBpZiAodGhpc0FyZyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHJldHVybiBmdW5jOwogICAgfQogICAgc3dpdGNoIChhcmdDb3VudCkgewogICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgdmFsdWUpOwogICAgICB9OwogICAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICAgIH07CiAgICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOwogICAgICB9OwogICAgICBjYXNlIDU6IHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3RoZXIsIGtleSwgb2JqZWN0LCBzb3VyY2UpIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlLCBvdGhlciwga2V5LCBvYmplY3QsIHNvdXJjZSk7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gYnVmZmVyQ2xvbmUoYnVmZmVyKSB7CiAgICByZXR1cm4gYnVmZmVyU2xpY2UuY2FsbChidWZmZXIsIDApOwogIH0KICBpZiAoIWJ1ZmZlclNsaWNlKSB7CiAgICBidWZmZXJDbG9uZSA9ICEoQXJyYXlCdWZmZXIgJiYgVWludDhBcnJheSkgPyBjb25zdGFudChudWxsKSA6IGZ1bmN0aW9uKGJ1ZmZlcikgewogICAgICB2YXIgYnl0ZUxlbmd0aCA9IGJ1ZmZlci5ieXRlTGVuZ3RoLAogICAgICAgICAgZmxvYXRMZW5ndGggPSBGbG9hdDY0QXJyYXkgPyBmbG9vcihieXRlTGVuZ3RoIC8gRkxPQVQ2NF9CWVRFU19QRVJfRUxFTUVOVCkgOiAwLAogICAgICAgICAgb2Zmc2V0ID0gZmxvYXRMZW5ndGggKiBGTE9BVDY0X0JZVEVTX1BFUl9FTEVNRU5ULAogICAgICAgICAgcmVzdWx0ID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpOwoKICAgICAgaWYgKGZsb2F0TGVuZ3RoKSB7CiAgICAgICAgdmFyIHZpZXcgPSBuZXcgRmxvYXQ2NEFycmF5KHJlc3VsdCwgMCwgZmxvYXRMZW5ndGgpOwogICAgICAgIHZpZXcuc2V0KG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVyLCAwLCBmbG9hdExlbmd0aCkpOwogICAgICB9CiAgICAgIGlmIChieXRlTGVuZ3RoICE9IG9mZnNldCkgewogICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShyZXN1bHQsIG9mZnNldCk7CiAgICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBvZmZzZXQpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7CiAgICByZXR1cm4gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoLAogICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDIgJiYgc291cmNlc1tsZW5ndGggLSAyXSwKICAgICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiAmJiBzb3VyY2VzWzJdLAogICAgICAgICAgdGhpc0FyZyA9IGxlbmd0aCA+IDEgJiYgc291cmNlc1tsZW5ndGggLSAxXTsKCiAgICAgIGlmICh0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgY3VzdG9taXplciA9IGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCA1KTsKICAgICAgICBsZW5ndGggLT0gMjsKICAgICAgfSBlbHNlIHsKICAgICAgICBjdXN0b21pemVyID0gdHlwZW9mIHRoaXNBcmcgPT0gJ2Z1bmN0aW9uJyA/IHRoaXNBcmcgOiBudWxsOwogICAgICAgIGxlbmd0aCAtPSAoY3VzdG9taXplciA/IDEgOiAwKTsKICAgICAgfQogICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7CiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyBudWxsIDogY3VzdG9taXplcjsKICAgICAgICBsZW5ndGggPSAxOwogICAgICB9CiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdOwogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uID8gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pIDogMDsKICAgICAgaWYgKCFpc0xlbmd0aChsZW5ndGgpKSB7CiAgICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTsKICAgICAgfQogICAgICB2YXIgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSwKICAgICAgICAgIGl0ZXJhYmxlID0gdG9PYmplY3QoY29sbGVjdGlvbik7CgogICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkgewogICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbGxlY3Rpb247CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHsKICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykgewogICAgICB2YXIgaXRlcmFibGUgPSB0b09iamVjdChvYmplY3QpLAogICAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLAogICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoLAogICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTsKCiAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7CiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTsKICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVGaW5kSW5kZXgoZnJvbVJpZ2h0KSB7CiAgICByZXR1cm4gZnVuY3Rpb24oYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykgewogICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7CiAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21SaWdodCk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY3JlYXRlRm9yRWFjaChhcnJheUZ1bmMsIGVhY2hGdW5jKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgcmV0dXJuICh0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzQXJnID09PSB1bmRlZmluZWQgJiYgaXNBcnJheShjb2xsZWN0aW9uKSkKICAgICAgICA/IGFycmF5RnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSkKICAgICAgICA6IGVhY2hGdW5jKGNvbGxlY3Rpb24sIGJpbmRDYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMykpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQikgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aCwKICAgICAgICByZXN1bHQgPSB0cnVlOwoKICAgIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNMb29zZSAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHdoaWxlIChyZXN1bHQgJiYgKytpbmRleCA8IGFyckxlbmd0aCkgewogICAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sCiAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTsKCiAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDsKICAgICAgaWYgKGN1c3RvbWl6ZXIpIHsKICAgICAgICByZXN1bHQgPSBpc0xvb3NlCiAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCkKICAgICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4KTsKICAgICAgfQogICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHsKICAgICAgICBpZiAoaXNMb29zZSkgewogICAgICAgICAgdmFyIG90aEluZGV4ID0gb3RoTGVuZ3RoOwogICAgICAgICAgd2hpbGUgKG90aEluZGV4LS0pIHsKICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltvdGhJbmRleF07CiAgICAgICAgICAgIHJlc3VsdCA9IChhcnJWYWx1ZSAmJiBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUpIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTsKICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IChhcnJWYWx1ZSAmJiBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUpIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAhIXJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnKSB7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIGJvb2xUYWc6CiAgICAgIGNhc2UgZGF0ZVRhZzoKICAgICAgICByZXR1cm4gK29iamVjdCA9PSArb3RoZXI7CgogICAgICBjYXNlIGVycm9yVGFnOgogICAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7CgogICAgICBjYXNlIG51bWJlclRhZzoKICAgICAgICByZXR1cm4gKG9iamVjdCAhPSArb2JqZWN0KQogICAgICAgICAgPyBvdGhlciAhPSArb3RoZXIKICAgICAgICAgIDogKG9iamVjdCA9PSAwID8gKCgxIC8gb2JqZWN0KSA9PSAoMSAvIG90aGVyKSkgOiBvYmplY3QgPT0gK290aGVyKTsKCiAgICAgIGNhc2UgcmVnZXhwVGFnOgogICAgICBjYXNlIHN0cmluZ1RhZzoKICAgICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7CiAgICB2YXIgb2JqUHJvcHMgPSBrZXlzKG9iamVjdCksCiAgICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLAogICAgICAgIG90aFByb3BzID0ga2V5cyhvdGhlciksCiAgICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoOwoKICAgIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc0xvb3NlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciBza2lwQ3RvciA9IGlzTG9vc2UsCiAgICAgICAgaW5kZXggPSAtMTsKCiAgICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkgewogICAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdLAogICAgICAgICAgcmVzdWx0ID0gaXNMb29zZSA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSk7CgogICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sCiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTsKCiAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkOwogICAgICAgIGlmIChjdXN0b21pemVyKSB7CiAgICAgICAgICByZXN1bHQgPSBpc0xvb3NlCiAgICAgICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSkKICAgICAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5KTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICByZXN1bHQgPSAob2JqVmFsdWUgJiYgb2JqVmFsdWUgPT09IG90aFZhbHVlKSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTsKICAgIH0KICAgIGlmICghc2tpcEN0b3IpIHsKICAgICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsCiAgICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7CgogICAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmCiAgICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiYKICAgICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJgogICAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBnZXRDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkgewogICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5jYWxsYmFjayB8fCBjYWxsYmFjazsKICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gY2FsbGJhY2sgPyBiYXNlQ2FsbGJhY2sgOiByZXN1bHQ7CiAgICByZXR1cm4gYXJnQ291bnQgPyByZXN1bHQoZnVuYywgdGhpc0FyZywgYXJnQ291bnQpIDogcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gZ2V0SW5kZXhPZihjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCkgewogICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pbmRleE9mIHx8IGluZGV4T2Y7CiAgICByZXN1bHQgPSByZXN1bHQgPT09IGluZGV4T2YgPyBiYXNlSW5kZXhPZiA6IHJlc3VsdDsKICAgIHJldHVybiBjb2xsZWN0aW9uID8gcmVzdWx0KGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4KSA6IHJlc3VsdDsKICB9CgogIHZhciBnZXRMZW5ndGggPSBiYXNlUHJvcGVydHkoJ2xlbmd0aCcpOwoKICB2YXIgZ2V0U3ltYm9scyA9ICFnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25zdGFudChbXSkgOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3Qob2JqZWN0KSk7CiAgfTsKCiAgZnVuY3Rpb24gaW5pdENsb25lQXJyYXkoYXJyYXkpIHsKICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgcmVzdWx0ID0gbmV3IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7CgogICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHsKICAgICAgcmVzdWx0LmluZGV4ID0gYXJyYXkuaW5kZXg7CiAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHsKICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yOwogICAgaWYgKCEodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvcikpIHsKICAgICAgQ3RvciA9IE9iamVjdDsKICAgIH0KICAgIHJldHVybiBuZXcgQ3RvcjsKICB9CgogIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHsKICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yOwogICAgc3dpdGNoICh0YWcpIHsKICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzoKICAgICAgICByZXR1cm4gYnVmZmVyQ2xvbmUob2JqZWN0KTsKCiAgICAgIGNhc2UgYm9vbFRhZzoKICAgICAgY2FzZSBkYXRlVGFnOgogICAgICAgIHJldHVybiBuZXcgQ3Rvcigrb2JqZWN0KTsKCiAgICAgIGNhc2UgZmxvYXQzMlRhZzogY2FzZSBmbG9hdDY0VGFnOgogICAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6CiAgICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6CiAgICAgICAgdmFyIGJ1ZmZlciA9IG9iamVjdC5idWZmZXI7CiAgICAgICAgcmV0dXJuIG5ldyBDdG9yKGlzRGVlcCA/IGJ1ZmZlckNsb25lKGJ1ZmZlcikgOiBidWZmZXIsIG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QubGVuZ3RoKTsKCiAgICAgIGNhc2UgbnVtYmVyVGFnOgogICAgICBjYXNlIHN0cmluZ1RhZzoKICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTsKCiAgICAgIGNhc2UgcmVnZXhwVGFnOgogICAgICAgIHZhciByZXN1bHQgPSBuZXcgQ3RvcihvYmplY3Quc291cmNlLCByZUZsYWdzLmV4ZWMob2JqZWN0KSk7CiAgICAgICAgcmVzdWx0Lmxhc3RJbmRleCA9IG9iamVjdC5sYXN0SW5kZXg7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7CiAgICB2YWx1ZSA9ICt2YWx1ZTsKICAgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDsKICAgIHJldHVybiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoOwogIH0KCiAgZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHsKICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbmRleDsKICAgIGlmICh0eXBlID09ICdudW1iZXInKSB7CiAgICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgob2JqZWN0KSwKICAgICAgICAgIHByZXJlcSA9IGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChpbmRleCwgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHByZXJlcSA9IHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0OwogICAgfQogICAgaWYgKHByZXJlcSkgewogICAgICB2YXIgb3RoZXIgPSBvYmplY3RbaW5kZXhdOwogICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gKHZhbHVlID09PSBvdGhlcikgOiAob3RoZXIgIT09IG90aGVyKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgaWYgKCh0eXBlID09ICdzdHJpbmcnICYmIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkpIHx8IHR5cGUgPT0gJ251bWJlcicpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHJlc3VsdCA9ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSk7CiAgICByZXR1cm4gcmVzdWx0IHx8IChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiB0b09iamVjdChvYmplY3QpKTsKICB9CgogIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7CiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjsKICB9CgogIGZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAodmFsdWUgPT09IDAgPyAoKDEgLyB2YWx1ZSkgPiAwKSA6ICFpc09iamVjdCh2YWx1ZSkpOwogIH0KCiAgZnVuY3Rpb24gc2hpbUlzUGxhaW5PYmplY3QodmFsdWUpIHsKICAgIHZhciBDdG9yLAogICAgICAgIHN1cHBvcnQgPSBsb2Rhc2guc3VwcG9ydDsKCiAgICBpZiAoIShpc09iamVjdExpa2UodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IG9iamVjdFRhZykgfHwKICAgICAgICAoIWhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjb25zdHJ1Y3RvcicpICYmCiAgICAgICAgICAoQ3RvciA9IHZhbHVlLmNvbnN0cnVjdG9yLCB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmICEoQ3RvciBpbnN0YW5jZW9mIEN0b3IpKSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHJlc3VsdDsKICAgIGJhc2VGb3JJbih2YWx1ZSwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkgewogICAgICByZXN1bHQgPSBrZXk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCByZXN1bHQpOwogIH0KCiAgZnVuY3Rpb24gc2hpbUtleXMob2JqZWN0KSB7CiAgICB2YXIgcHJvcHMgPSBrZXlzSW4ob2JqZWN0KSwKICAgICAgICBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aCwKICAgICAgICBsZW5ndGggPSBwcm9wc0xlbmd0aCAmJiBvYmplY3QubGVuZ3RoLAogICAgICAgIHN1cHBvcnQgPSBsb2Rhc2guc3VwcG9ydDsKCiAgICB2YXIgYWxsb3dJbmRleGVzID0gbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYKICAgICAgKGlzQXJyYXkob2JqZWN0KSB8fCAoc3VwcG9ydC5ub25FbnVtQXJncyAmJiBpc0FyZ3VtZW50cyhvYmplY3QpKSk7CgogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgcmVzdWx0ID0gW107CgogICAgd2hpbGUgKCsraW5kZXggPCBwcm9wc0xlbmd0aCkgewogICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdOwogICAgICBpZiAoKGFsbG93SW5kZXhlcyAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSkgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHsKICAgICAgICByZXN1bHQucHVzaChrZXkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZnVuY3Rpb24gdG9PYmplY3QodmFsdWUpIHsKICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdCh2YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiB0b1BhdGgodmFsdWUpIHsKICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gW107CiAgICBiYXNlVG9TdHJpbmcodmFsdWUpLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN0cmluZykgewogICAgICByZXN1bHQucHVzaChxdW90ZSA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2YXIgZmluZExhc3RJbmRleCA9IGNyZWF0ZUZpbmRJbmRleCh0cnVlKTsKCiAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkgewogICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgIGlmICghbGVuZ3RoKSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ID09ICdudW1iZXInKSB7CiAgICAgIGZyb21JbmRleCA9IGZyb21JbmRleCA8IDAgPyBuYXRpdmVNYXgobGVuZ3RoICsgZnJvbUluZGV4LCAwKSA6IGZyb21JbmRleDsKICAgIH0gZWxzZSBpZiAoZnJvbUluZGV4KSB7CiAgICAgIHZhciBpbmRleCA9IGJpbmFyeUluZGV4KGFycmF5LCB2YWx1ZSksCiAgICAgICAgICBvdGhlciA9IGFycmF5W2luZGV4XTsKCiAgICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUgPyAodmFsdWUgPT09IG90aGVyKSA6IChvdGhlciAhPT0gb3RoZXIpKSB7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCB8fCAwKTsKICB9CgogIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsKICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7CiAgfQoKICBmdW5jdGlvbiBzbGljZShhcnJheSwgc3RhcnQsIGVuZCkgewogICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgIGlmICghbGVuZ3RoKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIGlmIChlbmQgJiYgdHlwZW9mIGVuZCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc3RhcnQsIGVuZCkpIHsKICAgICAgc3RhcnQgPSAwOwogICAgICBlbmQgPSBsZW5ndGg7CiAgICB9CiAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTsKICB9CgogIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7CiAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICBsZW5ndGggPSAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIGFycmF5TWF4KGFycmF5TWFwKGFycmF5LCBnZXRMZW5ndGgpKSkgPj4+IDAsCiAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlNYXAoYXJyYXksIGJhc2VQcm9wZXJ0eShpbmRleCkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZhciB6aXAgPSByZXN0UGFyYW0odW56aXApOwoKICB2YXIgZm9yRWFjaCA9IGNyZWF0ZUZvckVhY2goYXJyYXlFYWNoLCBiYXNlRWFjaCk7CgogIGZ1bmN0aW9uIGluY2x1ZGVzKGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4LCBndWFyZCkgewogICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24gPyBnZXRMZW5ndGgoY29sbGVjdGlvbikgOiAwOwogICAgaWYgKCFpc0xlbmd0aChsZW5ndGgpKSB7CiAgICAgIGNvbGxlY3Rpb24gPSB2YWx1ZXMoY29sbGVjdGlvbik7CiAgICAgIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOwogICAgfQogICAgaWYgKCFsZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHRhcmdldCwgZnJvbUluZGV4LCBndWFyZCkpKSB7CiAgICAgIGZyb21JbmRleCA9IDA7CiAgICB9IGVsc2UgewogICAgICBmcm9tSW5kZXggPSBmcm9tSW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCkgOiAoZnJvbUluZGV4IHx8IDApOwogICAgfQogICAgcmV0dXJuICh0eXBlb2YgY29sbGVjdGlvbiA9PSAnc3RyaW5nJyB8fCAhaXNBcnJheShjb2xsZWN0aW9uKSAmJiBpc1N0cmluZyhjb2xsZWN0aW9uKSkKICAgICAgPyAoZnJvbUluZGV4IDwgbGVuZ3RoICYmIGNvbGxlY3Rpb24uaW5kZXhPZih0YXJnZXQsIGZyb21JbmRleCkgPiAtMSkKICAgICAgOiAoZ2V0SW5kZXhPZihjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCkgPiAtMSk7CiAgfQoKICBmdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7CiAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpOwogICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgIHJldHVybiAhcHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTsKICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgdGhpc0FyZykpIHsKICAgICAgcHJlZGljYXRlID0gbnVsbDsKICAgIH0KICAgIGlmICh0eXBlb2YgcHJlZGljYXRlICE9ICdmdW5jdGlvbicgfHwgdGhpc0FyZyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7CiAgICB9CiAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUpOwogIH0KCiAgZnVuY3Rpb24gcmVzdFBhcmFtKGZ1bmMsIHN0YXJ0KSB7CiAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICB9CiAgICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiAoK3N0YXJ0IHx8IDApLCAwKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCiAgICAgICAgICBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLAogICAgICAgICAgcmVzdCA9IEFycmF5KGxlbmd0aCk7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHJlc3RbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTsKICAgICAgfQogICAgICBzd2l0Y2ggKHN0YXJ0KSB7CiAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpOwogICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmdzWzBdLCByZXN0KTsKICAgICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSwgcmVzdCk7CiAgICAgIH0KICAgICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7CiAgICAgIGluZGV4ID0gLTE7CiAgICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHsKICAgICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07CiAgICAgIH0KICAgICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHJlc3Q7CiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIG90aGVyQXJncyk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gY2xvbmUodmFsdWUsIGlzRGVlcCwgY3VzdG9taXplciwgdGhpc0FyZykgewogICAgaWYgKGlzRGVlcCAmJiB0eXBlb2YgaXNEZWVwICE9ICdib29sZWFuJyAmJiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaXNEZWVwLCBjdXN0b21pemVyKSkgewogICAgICBpc0RlZXAgPSBmYWxzZTsKICAgIH0KICAgIGVsc2UgaWYgKHR5cGVvZiBpc0RlZXAgPT0gJ2Z1bmN0aW9uJykgewogICAgICB0aGlzQXJnID0gY3VzdG9taXplcjsKICAgICAgY3VzdG9taXplciA9IGlzRGVlcDsKICAgICAgaXNEZWVwID0gZmFsc2U7CiAgICB9CiAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyAmJiBiaW5kQ2FsbGJhY2soY3VzdG9taXplciwgdGhpc0FyZywgMSk7CiAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIpOwogIH0KCiAgZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHsKICAgIHZhciBsZW5ndGggPSBpc09iamVjdExpa2UodmFsdWUpID8gdmFsdWUubGVuZ3RoIDogdW5kZWZpbmVkOwogICAgcmV0dXJuIGlzTGVuZ3RoKGxlbmd0aCkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gYXJnc1RhZzsKICB9CgogIHZhciBpc0FycmF5ID0gbmF0aXZlSXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBhcnJheVRhZzsKICB9OwoKICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgodmFsdWUpOwogICAgaWYgKGlzTGVuZ3RoKGxlbmd0aCkgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHwKICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnNwbGljZSkpKSkgewogICAgICByZXR1cm4gIWxlbmd0aDsKICAgIH0KICAgIHJldHVybiAha2V5cyh2YWx1ZSkubGVuZ3RoOwogIH0KCiAgdmFyIGlzRnVuY3Rpb24gPSAhKGJhc2VJc0Z1bmN0aW9uKC94LykgfHwgKFVpbnQ4QXJyYXkgJiYgIWJhc2VJc0Z1bmN0aW9uKFVpbnQ4QXJyYXkpKSkgPyBiYXNlSXNGdW5jdGlvbiA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZzsKICB9OwoKICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7CiAgICByZXR1cm4gdHlwZSA9PSAnZnVuY3Rpb24nIHx8ICghIXZhbHVlICYmIHR5cGUgPT0gJ29iamVjdCcpOwogIH0KCiAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBmdW5jVGFnKSB7CiAgICAgIHJldHVybiByZUlzTmF0aXZlLnRlc3QoZm5Ub1N0cmluZy5jYWxsKHZhbHVlKSk7CiAgICB9CiAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiByZUlzSG9zdEN0b3IudGVzdCh2YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkgewogICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fCAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBudW1iZXJUYWcpOwogIH0KCiAgdmFyIGlzUGxhaW5PYmplY3QgPSAhZ2V0UHJvdG90eXBlT2YgPyBzaGltSXNQbGFpbk9iamVjdCA6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICBpZiAoISh2YWx1ZSAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBvYmplY3RUYWcpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiwKICAgICAgICBvYmpQcm90byA9IGlzTmF0aXZlKHZhbHVlT2YpICYmIChvYmpQcm90byA9IGdldFByb3RvdHlwZU9mKHZhbHVlT2YpKSAmJiBnZXRQcm90b3R5cGVPZihvYmpQcm90byk7CgogICAgcmV0dXJuIG9ialByb3RvCiAgICAgID8gKHZhbHVlID09IG9ialByb3RvIHx8IGdldFByb3RvdHlwZU9mKHZhbHVlKSA9PSBvYmpQcm90bykKICAgICAgOiBzaGltSXNQbGFpbk9iamVjdCh2YWx1ZSk7CiAgfTsKCiAgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHsKICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3RyaW5nVGFnKTsKICB9CgogIGZ1bmN0aW9uIGlzVHlwZWRBcnJheSh2YWx1ZSkgewogICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW29ialRvU3RyaW5nLmNhbGwodmFsdWUpXTsKICB9CgogIGZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHsKICAgIHJldHVybiBiYXNlQ29weSh2YWx1ZSwga2V5c0luKHZhbHVlKSk7CiAgfQoKICB2YXIgYXNzaWduID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpIHsKICAgIHJldHVybiBjdXN0b21pemVyCiAgICAgID8gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikKICAgICAgOiBiYXNlQXNzaWduKG9iamVjdCwgc291cmNlKTsKICB9KTsKCiAgZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkgewogICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcGF0aCk7CiAgICBpZiAoIXJlc3VsdCAmJiAhaXNLZXkocGF0aCkpIHsKICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTsKICAgICAgb2JqZWN0ID0gcGF0aC5sZW5ndGggPT0gMSA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTsKICAgICAgcGF0aCA9IGxhc3QocGF0aCk7CiAgICAgIHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwYXRoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2YXIga2V5cyA9ICFuYXRpdmVLZXlzID8gc2hpbUtleXMgOiBmdW5jdGlvbihvYmplY3QpIHsKICAgIGlmIChvYmplY3QpIHsKICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsCiAgICAgICAgICBsZW5ndGggPSBvYmplY3QubGVuZ3RoOwogICAgfQogICAgaWYgKCh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlID09PSBvYmplY3QpIHx8CiAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0gJ2Z1bmN0aW9uJyAmJiBpc0xlbmd0aChsZW5ndGgpKSkgewogICAgICByZXR1cm4gc2hpbUtleXMob2JqZWN0KTsKICAgIH0KICAgIHJldHVybiBpc09iamVjdChvYmplY3QpID8gbmF0aXZlS2V5cyhvYmplY3QpIDogW107CiAgfTsKCiAgZnVuY3Rpb24ga2V5c0luKG9iamVjdCkgewogICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBbXTsKICAgIH0KICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkgewogICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTsKICAgIH0KICAgIHZhciBsZW5ndGggPSBvYmplY3QubGVuZ3RoOwogICAgbGVuZ3RoID0gKGxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmCiAgICAgIChpc0FycmF5KG9iamVjdCkgfHwgKHN1cHBvcnQubm9uRW51bUFyZ3MgJiYgaXNBcmd1bWVudHMob2JqZWN0KSkpICYmIGxlbmd0aCkgfHwgMDsKCiAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvciwKICAgICAgICBpbmRleCA9IC0xLAogICAgICAgIGlzUHJvdG8gPSB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlID09PSBvYmplY3QsCiAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSwKICAgICAgICBza2lwSW5kZXhlcyA9IGxlbmd0aCA+IDA7CgogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgcmVzdWx0W2luZGV4XSA9IChpbmRleCArICcnKTsKICAgIH0KICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHsKICAgICAgaWYgKCEoc2tpcEluZGV4ZXMgJiYgaXNJbmRleChrZXksIGxlbmd0aCkpICYmCiAgICAgICAgICAhKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7CiAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGJhc2VNZXJnZSk7CgogIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHsKICAgIHJldHVybiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTsKICB9CgogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHsKICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpOwogICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFycy50ZXN0KHN0cmluZykpCiAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFycywgJ1xcJCYnKQogICAgICA6IHN0cmluZzsKICB9CgogIGZ1bmN0aW9uIGNhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGd1YXJkKSB7CiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoZnVuYywgdGhpc0FyZywgZ3VhcmQpKSB7CiAgICAgIHRoaXNBcmcgPSBudWxsOwogICAgfQogICAgcmV0dXJuIGJhc2VDYWxsYmFjayhmdW5jLCB0aGlzQXJnKTsKICB9CgogIGZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgZnVuY3Rpb24gcHJvcGVydHkocGF0aCkgewogICAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHBhdGgpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTsKICB9CiAgbG9kYXNoLmFzc2lnbiA9IGFzc2lnbjsKICBsb2Rhc2guY2FsbGJhY2sgPSBjYWxsYmFjazsKICBsb2Rhc2guY29uc3RhbnQgPSBjb25zdGFudDsKICBsb2Rhc2guZm9yRWFjaCA9IGZvckVhY2g7CiAgbG9kYXNoLmtleXMgPSBrZXlzOwogIGxvZGFzaC5rZXlzSW4gPSBrZXlzSW47CiAgbG9kYXNoLm1lcmdlID0gbWVyZ2U7CiAgbG9kYXNoLnByb3BlcnR5ID0gcHJvcGVydHk7CiAgbG9kYXNoLnJlamVjdCA9IHJlamVjdDsKICBsb2Rhc2gucmVzdFBhcmFtID0gcmVzdFBhcmFtOwogIGxvZGFzaC5zbGljZSA9IHNsaWNlOwogIGxvZGFzaC50b1BsYWluT2JqZWN0ID0gdG9QbGFpbk9iamVjdDsKICBsb2Rhc2gudW56aXAgPSB1bnppcDsKICBsb2Rhc2gudmFsdWVzID0gdmFsdWVzOwogIGxvZGFzaC56aXAgPSB6aXA7CgogIGxvZGFzaC5lYWNoID0gZm9yRWFjaDsKICBsb2Rhc2guZXh0ZW5kID0gYXNzaWduOwogIGxvZGFzaC5pdGVyYXRlZSA9IGNhbGxiYWNrOwogIGxvZGFzaC5jbG9uZSA9IGNsb25lOwogIGxvZGFzaC5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7CiAgbG9kYXNoLmZpbmRMYXN0SW5kZXggPSBmaW5kTGFzdEluZGV4OwogIGxvZGFzaC5oYXMgPSBoYXM7CiAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7CiAgbG9kYXNoLmluY2x1ZGVzID0gaW5jbHVkZXM7CiAgbG9kYXNoLmluZGV4T2YgPSBpbmRleE9mOwogIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzOwogIGxvZGFzaC5pc0FycmF5ID0gaXNBcnJheTsKICBsb2Rhc2guaXNFbXB0eSA9IGlzRW1wdHk7CiAgbG9kYXNoLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uOwogIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlOwogIGxvZGFzaC5pc051bWJlciA9IGlzTnVtYmVyOwogIGxvZGFzaC5pc09iamVjdCA9IGlzT2JqZWN0OwogIGxvZGFzaC5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDsKICBsb2Rhc2guaXNTdHJpbmcgPSBpc1N0cmluZzsKICBsb2Rhc2guaXNUeXBlZEFycmF5ID0gaXNUeXBlZEFycmF5OwogIGxvZGFzaC5sYXN0ID0gbGFzdDsKICBsb2Rhc2guc29tZSA9IHNvbWU7CgogIGxvZGFzaC5hbnkgPSBzb21lOwogIGxvZGFzaC5jb250YWlucyA9IGluY2x1ZGVzOwogIGxvZGFzaC5pbmNsdWRlID0gaW5jbHVkZXM7CgogIGxvZGFzaC5WRVJTSU9OID0gVkVSU0lPTjsKICBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkgewogICAgaWYgKG1vZHVsZUV4cG9ydHMpIHsKICAgICAgKGZyZWVNb2R1bGUuZXhwb3J0cyA9IGxvZGFzaCkuXyA9IGxvZGFzaDsKICAgIH0KICAgIGVsc2UgewogICAgICBmcmVlRXhwb3J0cy5fID0gbG9kYXNoOwogICAgfQogIH0KICBlbHNlIHsKICAgIHJvb3QuXyA9IGxvZGFzaDsKICB9Cn0uY2FsbCh0aGlzKSk7Cgp9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbCAhPT0gInVuZGVmaW5lZCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gInVuZGVmaW5lZCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgPyB3aW5kb3cgOiB7fSkKfSx7fV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9qc2hpbnQuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKCnZhciBfICAgICAgICAgICAgPSBfZGVyZXFfKCIuLi9sb2Rhc2giKTsKdmFyIGV2ZW50cyAgICAgICA9IF9kZXJlcV8oImV2ZW50cyIpOwp2YXIgdmFycyAgICAgICAgID0gX2RlcmVxXygiLi92YXJzLmpzIik7CnZhciBtZXNzYWdlcyAgICAgPSBfZGVyZXFfKCIuL21lc3NhZ2VzLmpzIik7CnZhciBMZXhlciAgICAgICAgPSBfZGVyZXFfKCIuL2xleC5qcyIpLkxleGVyOwp2YXIgcmVnICAgICAgICAgID0gX2RlcmVxXygiLi9yZWcuanMiKTsKdmFyIHN0YXRlICAgICAgICA9IF9kZXJlcV8oIi4vc3RhdGUuanMiKS5zdGF0ZTsKdmFyIHN0eWxlICAgICAgICA9IF9kZXJlcV8oIi4vc3R5bGUuanMiKTsKdmFyIG9wdGlvbnMgICAgICA9IF9kZXJlcV8oIi4vb3B0aW9ucy5qcyIpOwp2YXIgc2NvcGVNYW5hZ2VyID0gX2RlcmVxXygiLi9zY29wZS1tYW5hZ2VyLmpzIik7Cgp2YXIgSlNISU5UID0gKGZ1bmN0aW9uKCkgewogICJ1c2Ugc3RyaWN0IjsKCiAgdmFyIGFwaSwgLy8gRXh0ZW5zaW9uIEFQSQogICAgYmFuZyA9IHsKICAgICAgIjwiICA6IHRydWUsCiAgICAgICI8PSIgOiB0cnVlLAogICAgICAiPT0iIDogdHJ1ZSwKICAgICAgIj09PSI6IHRydWUsCiAgICAgICIhPT0iOiB0cnVlLAogICAgICAiIT0iIDogdHJ1ZSwKICAgICAgIj4iICA6IHRydWUsCiAgICAgICI+PSIgOiB0cnVlLAogICAgICAiKyIgIDogdHJ1ZSwKICAgICAgIi0iICA6IHRydWUsCiAgICAgICIqIiAgOiB0cnVlLAogICAgICAiLyIgIDogdHJ1ZSwKICAgICAgIiUiICA6IHRydWUKICAgIH0sCgogICAgZGVjbGFyZWQsIC8vIEdsb2JhbHMgdGhhdCB3ZXJlIGRlY2xhcmVkIHVzaW5nIC8qZ2xvYmFsIC4uLiAqLyBzeW50YXguCgogICAgZnVuY3Rpb25pY2l0eSA9IFsKICAgICAgImNsb3N1cmUiLCAiZXhjZXB0aW9uIiwgImdsb2JhbCIsICJsYWJlbCIsCiAgICAgICJvdXRlciIsICJ1bnVzZWQiLCAidmFyIgogICAgXSwKCiAgICBmdW5jdGlvbnMsIC8vIEFsbCBvZiB0aGUgZnVuY3Rpb25zCgogICAgaW5ibG9jaywKICAgIGluZGVudCwKICAgIGxvb2thaGVhZCwKICAgIGxleCwKICAgIG1lbWJlciwKICAgIG1lbWJlcnNPbmx5LAogICAgcHJlZGVmaW5lZCwgICAgLy8gR2xvYmFsIHZhcmlhYmxlcyBkZWZpbmVkIGJ5IG9wdGlvbgoKICAgIHN0YWNrLAogICAgdXJscywKCiAgICBleHRyYU1vZHVsZXMgPSBbXSwKICAgIGVtaXR0ZXIgPSBuZXcgZXZlbnRzLkV2ZW50RW1pdHRlcigpOwoKICBmdW5jdGlvbiBjaGVja09wdGlvbihuYW1lLCB0KSB7CiAgICBuYW1lID0gbmFtZS50cmltKCk7CgogICAgaWYgKC9eWystXVdcZHszfSQvZy50ZXN0KG5hbWUpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmIChvcHRpb25zLnZhbGlkTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHsKICAgICAgaWYgKHQudHlwZSAhPT0gImpzbGludCIgJiYgIV8uaGFzKG9wdGlvbnMucmVtb3ZlZCwgbmFtZSkpIHsKICAgICAgICBlcnJvcigiRTAwMSIsIHQsIG5hbWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7CiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICJbb2JqZWN0IFN0cmluZ10iOwogIH0KCiAgZnVuY3Rpb24gaXNJZGVudGlmaWVyKHRrbiwgdmFsdWUpIHsKICAgIGlmICghdGtuKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKCF0a24uaWRlbnRpZmllciB8fCB0a24udmFsdWUgIT09IHZhbHVlKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBpc1Jlc2VydmVkKHRva2VuKSB7CiAgICBpZiAoIXRva2VuLnJlc2VydmVkKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHZhciBtZXRhID0gdG9rZW4ubWV0YTsKCiAgICBpZiAobWV0YSAmJiBtZXRhLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkICYmIHN0YXRlLmluRVM1KCkpIHsKICAgICAgaWYgKCFtZXRhLmVzNSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAobWV0YS5zdHJpY3RPbmx5KSB7CiAgICAgICAgaWYgKCFzdGF0ZS5vcHRpb24uc3RyaWN0ICYmICFzdGF0ZS5pc1N0cmljdCgpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAodG9rZW4uaXNQcm9wZXJ0eSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gc3VwcGxhbnQoc3RyLCBkYXRhKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1x7KFtee31dKilcfS9nLCBmdW5jdGlvbihhLCBiKSB7CiAgICAgIHZhciByID0gZGF0YVtiXTsKICAgICAgcmV0dXJuIHR5cGVvZiByID09PSAic3RyaW5nIiB8fCB0eXBlb2YgciA9PT0gIm51bWJlciIgPyByIDogYTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gY29tYmluZShkZXN0LCBzcmMpIHsKICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgIGlmIChfLmhhcyhKU0hJTlQuYmxhY2tsaXN0LCBuYW1lKSkgcmV0dXJuOwogICAgICBkZXN0W25hbWVdID0gc3JjW25hbWVdOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBwcm9jZXNzZW5mb3JjZWFsbCgpIHsKICAgIGlmIChzdGF0ZS5vcHRpb24uZW5mb3JjZWFsbCkgewogICAgICBmb3IgKHZhciBlbmZvcmNlb3B0IGluIG9wdGlvbnMuYm9vbC5lbmZvcmNpbmcpIHsKICAgICAgICBpZiAoc3RhdGUub3B0aW9uW2VuZm9yY2VvcHRdID09PSB1bmRlZmluZWQgJiYKICAgICAgICAgICAgIW9wdGlvbnMubm9lbmZvcmNlYWxsW2VuZm9yY2VvcHRdKSB7CiAgICAgICAgICBzdGF0ZS5vcHRpb25bZW5mb3JjZW9wdF0gPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHZhciByZWxheG9wdCBpbiBvcHRpb25zLmJvb2wucmVsYXhpbmcpIHsKICAgICAgICBpZiAoc3RhdGUub3B0aW9uW3JlbGF4b3B0XSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBzdGF0ZS5vcHRpb25bcmVsYXhvcHRdID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc3N1bWUoKSB7CiAgICBwcm9jZXNzZW5mb3JjZWFsbCgpOwogICAgaWYgKCFzdGF0ZS5vcHRpb24uZXN2ZXJzaW9uICYmICFzdGF0ZS5vcHRpb24ubW96KSB7CiAgICAgIGlmIChzdGF0ZS5vcHRpb24uZXMzKSB7CiAgICAgICAgc3RhdGUub3B0aW9uLmVzdmVyc2lvbiA9IDM7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGUub3B0aW9uLmVzbmV4dCkgewogICAgICAgIHN0YXRlLm9wdGlvbi5lc3ZlcnNpb24gPSA2OwogICAgICB9IGVsc2UgewogICAgICAgIHN0YXRlLm9wdGlvbi5lc3ZlcnNpb24gPSA1OwogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXRlLmluRVM1KCkpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLmVjbWFJZGVudGlmaWVyc1s1XSk7CiAgICB9CgogICAgaWYgKHN0YXRlLmluRVM2KCkpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLmVjbWFJZGVudGlmaWVyc1s2XSk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5tb2R1bGUpIHsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5zdHJpY3QgPT09IHRydWUpIHsKICAgICAgICBzdGF0ZS5vcHRpb24uc3RyaWN0ID0gImdsb2JhbCI7CiAgICAgIH0KICAgICAgaWYgKCFzdGF0ZS5pbkVTNigpKSB7CiAgICAgICAgd2FybmluZygiVzEzNCIsIHN0YXRlLnRva2Vucy5uZXh0LCAibW9kdWxlIiwgNik7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLmNvdWNoKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5jb3VjaCk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5xdW5pdCkgewogICAgICBjb21iaW5lKHByZWRlZmluZWQsIHZhcnMucXVuaXQpOwogICAgfQoKICAgIGlmIChzdGF0ZS5vcHRpb24ucmhpbm8pIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLnJoaW5vKTsKICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLnNoZWxsanMpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLnNoZWxsanMpOwogICAgICBjb21iaW5lKHByZWRlZmluZWQsIHZhcnMubm9kZSk7CiAgICB9CiAgICBpZiAoc3RhdGUub3B0aW9uLnR5cGVkKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy50eXBlZCk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5waGFudG9tKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5waGFudG9tKTsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5zdHJpY3QgPT09IHRydWUpIHsKICAgICAgICBzdGF0ZS5vcHRpb24uc3RyaWN0ID0gImdsb2JhbCI7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLnByb3RvdHlwZWpzKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5wcm90b3R5cGVqcyk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5ub2RlKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5ub2RlKTsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLnR5cGVkKTsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5zdHJpY3QgPT09IHRydWUpIHsKICAgICAgICBzdGF0ZS5vcHRpb24uc3RyaWN0ID0gImdsb2JhbCI7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLmRldmVsKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5kZXZlbCk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5kb2pvKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5kb2pvKTsKICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLmJyb3dzZXIpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLmJyb3dzZXIpOwogICAgICBjb21iaW5lKHByZWRlZmluZWQsIHZhcnMudHlwZWQpOwogICAgfQoKICAgIGlmIChzdGF0ZS5vcHRpb24uYnJvd3NlcmlmeSkgewogICAgICBjb21iaW5lKHByZWRlZmluZWQsIHZhcnMuYnJvd3Nlcik7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy50eXBlZCk7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5icm93c2VyaWZ5KTsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5zdHJpY3QgPT09IHRydWUpIHsKICAgICAgICBzdGF0ZS5vcHRpb24uc3RyaWN0ID0gImdsb2JhbCI7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLm5vbnN0YW5kYXJkKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5ub25zdGFuZGFyZCk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5qYXNtaW5lKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5qYXNtaW5lKTsKICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLmpxdWVyeSkgewogICAgICBjb21iaW5lKHByZWRlZmluZWQsIHZhcnMuanF1ZXJ5KTsKICAgIH0KCiAgICBpZiAoc3RhdGUub3B0aW9uLm1vb3Rvb2xzKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5tb290b29scyk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi53b3JrZXIpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLndvcmtlcik7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi53c2gpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLndzaCk7CiAgICB9CgogICAgaWYgKHN0YXRlLm9wdGlvbi5nbG9iYWxzdHJpY3QgJiYgc3RhdGUub3B0aW9uLnN0cmljdCAhPT0gZmFsc2UpIHsKICAgICAgc3RhdGUub3B0aW9uLnN0cmljdCA9ICJnbG9iYWwiOwogICAgfQoKICAgIGlmIChzdGF0ZS5vcHRpb24ueXVpKSB7CiAgICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy55dWkpOwogICAgfQoKICAgIGlmIChzdGF0ZS5vcHRpb24ubW9jaGEpIHsKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCB2YXJzLm1vY2hhKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gcXVpdChjb2RlLCBsaW5lLCBjaHIpIHsKICAgIHZhciBwZXJjZW50YWdlID0gTWF0aC5mbG9vcigobGluZSAvIHN0YXRlLmxpbmVzLmxlbmd0aCkgKiAxMDApOwogICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlcy5lcnJvcnNbY29kZV0uZGVzYzsKCiAgICB0aHJvdyB7CiAgICAgIG5hbWU6ICJKU0hpbnRFcnJvciIsCiAgICAgIGxpbmU6IGxpbmUsCiAgICAgIGNoYXJhY3RlcjogY2hyLAogICAgICBtZXNzYWdlOiBtZXNzYWdlICsgIiAoIiArIHBlcmNlbnRhZ2UgKyAiJSBzY2FubmVkKS4iLAogICAgICByYXc6IG1lc3NhZ2UsCiAgICAgIGNvZGU6IGNvZGUKICAgIH07CiAgfQoKICBmdW5jdGlvbiByZW1vdmVJZ25vcmVkTWVzc2FnZXMoKSB7CiAgICB2YXIgaWdub3JlZCA9IHN0YXRlLmlnbm9yZWRMaW5lczsKCiAgICBpZiAoXy5pc0VtcHR5KGlnbm9yZWQpKSByZXR1cm47CiAgICBKU0hJTlQuZXJyb3JzID0gXy5yZWplY3QoSlNISU5ULmVycm9ycywgZnVuY3Rpb24oZXJyKSB7IHJldHVybiBpZ25vcmVkW2Vyci5saW5lXSB9KTsKICB9CgogIGZ1bmN0aW9uIHdhcm5pbmcoY29kZSwgdCwgYSwgYiwgYywgZCkgewogICAgdmFyIGNoLCBsLCB3LCBtc2c7CgogICAgaWYgKC9eV1xkezN9JC8udGVzdChjb2RlKSkgewogICAgICBpZiAoc3RhdGUuaWdub3JlZFtjb2RlXSkKICAgICAgICByZXR1cm47CgogICAgICBtc2cgPSBtZXNzYWdlcy53YXJuaW5nc1tjb2RlXTsKICAgIH0gZWxzZSBpZiAoL0VcZHszfS8udGVzdChjb2RlKSkgewogICAgICBtc2cgPSBtZXNzYWdlcy5lcnJvcnNbY29kZV07CiAgICB9IGVsc2UgaWYgKC9JXGR7M30vLnRlc3QoY29kZSkpIHsKICAgICAgbXNnID0gbWVzc2FnZXMuaW5mb1tjb2RlXTsKICAgIH0KCiAgICB0ID0gdCB8fCBzdGF0ZS50b2tlbnMubmV4dCB8fCB7fTsKICAgIGlmICh0LmlkID09PSAiKGVuZCkiKSB7ICAvLyBgfgogICAgICB0ID0gc3RhdGUudG9rZW5zLmN1cnI7CiAgICB9CgogICAgbCA9IHQubGluZSB8fCAwOwogICAgY2ggPSB0LmZyb20gfHwgMDsKCiAgICB3ID0gewogICAgICBpZDogIihlcnJvcikiLAogICAgICByYXc6IG1zZy5kZXNjLAogICAgICBjb2RlOiBtc2cuY29kZSwKICAgICAgZXZpZGVuY2U6IHN0YXRlLmxpbmVzW2wgLSAxXSB8fCAiIiwKICAgICAgbGluZTogbCwKICAgICAgY2hhcmFjdGVyOiBjaCwKICAgICAgc2NvcGU6IEpTSElOVC5zY29wZSwKICAgICAgYTogYSwKICAgICAgYjogYiwKICAgICAgYzogYywKICAgICAgZDogZAogICAgfTsKCiAgICB3LnJlYXNvbiA9IHN1cHBsYW50KG1zZy5kZXNjLCB3KTsKICAgIEpTSElOVC5lcnJvcnMucHVzaCh3KTsKCiAgICByZW1vdmVJZ25vcmVkTWVzc2FnZXMoKTsKCiAgICBpZiAoSlNISU5ULmVycm9ycy5sZW5ndGggPj0gc3RhdGUub3B0aW9uLm1heGVycikKICAgICAgcXVpdCgiRTA0MyIsIGwsIGNoKTsKCiAgICByZXR1cm4gdzsKICB9CgogIGZ1bmN0aW9uIHdhcm5pbmdBdChtLCBsLCBjaCwgYSwgYiwgYywgZCkgewogICAgcmV0dXJuIHdhcm5pbmcobSwgewogICAgICBsaW5lOiBsLAogICAgICBmcm9tOiBjaAogICAgfSwgYSwgYiwgYywgZCk7CiAgfQoKICBmdW5jdGlvbiBlcnJvcihtLCB0LCBhLCBiLCBjLCBkKSB7CiAgICB3YXJuaW5nKG0sIHQsIGEsIGIsIGMsIGQpOwogIH0KCiAgZnVuY3Rpb24gZXJyb3JBdChtLCBsLCBjaCwgYSwgYiwgYywgZCkgewogICAgcmV0dXJuIGVycm9yKG0sIHsKICAgICAgbGluZTogbCwKICAgICAgZnJvbTogY2gKICAgIH0sIGEsIGIsIGMsIGQpOwogIH0KICBmdW5jdGlvbiBhZGRJbnRlcm5hbFNyYyhlbGVtLCBzcmMpIHsKICAgIHZhciBpOwogICAgaSA9IHsKICAgICAgaWQ6ICIoaW50ZXJuYWwpIiwKICAgICAgZWxlbTogZWxlbSwKICAgICAgdmFsdWU6IHNyYwogICAgfTsKICAgIEpTSElOVC5pbnRlcm5hbHMucHVzaChpKTsKICAgIHJldHVybiBpOwogIH0KCiAgZnVuY3Rpb24gZG9PcHRpb24oKSB7CiAgICB2YXIgbnQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgIHZhciBib2R5ID0gbnQuYm9keS5tYXRjaCgvKC1ccyspP1teXHMsOl0rKD86XHMqOlxzKigtXHMrKT9bXlxzLF0rKT8vZykgfHwgW107CgogICAgdmFyIHByZWRlZiA9IHt9OwogICAgaWYgKG50LnR5cGUgPT09ICJnbG9iYWxzIikgewogICAgICBib2R5LmZvckVhY2goZnVuY3Rpb24oZywgaWR4KSB7CiAgICAgICAgZyA9IGcuc3BsaXQoIjoiKTsKICAgICAgICB2YXIga2V5ID0gKGdbMF0gfHwgIiIpLnRyaW0oKTsKICAgICAgICB2YXIgdmFsID0gKGdbMV0gfHwgIiIpLnRyaW0oKTsKCiAgICAgICAgaWYgKGtleSA9PT0gIi0iIHx8ICFrZXkubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoaWR4ID4gMCAmJiBpZHggPT09IGJvZHkubGVuZ3RoIC0gMSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBlcnJvcigiRTAwMiIsIG50KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChrZXkuY2hhckF0KDApID09PSAiLSIpIHsKICAgICAgICAgIGtleSA9IGtleS5zbGljZSgxKTsKICAgICAgICAgIHZhbCA9IGZhbHNlOwoKICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rba2V5XSA9IGtleTsKICAgICAgICAgIGRlbGV0ZSBwcmVkZWZpbmVkW2tleV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZWRlZltrZXldID0gKHZhbCA9PT0gInRydWUiKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgY29tYmluZShwcmVkZWZpbmVkLCBwcmVkZWYpOwoKICAgICAgZm9yICh2YXIga2V5IGluIHByZWRlZikgewogICAgICAgIGlmIChfLmhhcyhwcmVkZWYsIGtleSkpIHsKICAgICAgICAgIGRlY2xhcmVkW2tleV0gPSBudDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAobnQudHlwZSA9PT0gImV4cG9ydGVkIikgewogICAgICBib2R5LmZvckVhY2goZnVuY3Rpb24oZSwgaWR4KSB7CiAgICAgICAgaWYgKCFlLmxlbmd0aCkgewogICAgICAgICAgaWYgKGlkeCA+IDAgJiYgaWR4ID09PSBib2R5Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZEV4cG9ydGVkKGUpOwogICAgICB9KTsKICAgIH0KCiAgICBpZiAobnQudHlwZSA9PT0gIm1lbWJlcnMiKSB7CiAgICAgIG1lbWJlcnNPbmx5ID0gbWVtYmVyc09ubHkgfHwge307CgogICAgICBib2R5LmZvckVhY2goZnVuY3Rpb24obSkgewogICAgICAgIHZhciBjaDEgPSBtLmNoYXJBdCgwKTsKICAgICAgICB2YXIgY2gyID0gbS5jaGFyQXQobS5sZW5ndGggLSAxKTsKCiAgICAgICAgaWYgKGNoMSA9PT0gY2gyICYmIChjaDEgPT09ICJcIiIgfHwgY2gxID09PSAiJyIpKSB7CiAgICAgICAgICBtID0gbQogICAgICAgICAgICAuc3Vic3RyKDEsIG0ubGVuZ3RoIC0gMikKICAgICAgICAgICAgLnJlcGxhY2UoIlxcXCIiLCAiXCIiKTsKICAgICAgICB9CgogICAgICAgIG1lbWJlcnNPbmx5W21dID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQoKICAgIHZhciBudW12YWxzID0gWwogICAgICAibWF4c3RhdGVtZW50cyIsCiAgICAgICJtYXhwYXJhbXMiLAogICAgICAibWF4ZGVwdGgiLAogICAgICAibWF4Y29tcGxleGl0eSIsCiAgICAgICJtYXhlcnIiLAogICAgICAibWF4bGVuIiwKICAgICAgImluZGVudCIKICAgIF07CgogICAgaWYgKG50LnR5cGUgPT09ICJqc2hpbnQiIHx8IG50LnR5cGUgPT09ICJqc2xpbnQiKSB7CiAgICAgIGJvZHkuZm9yRWFjaChmdW5jdGlvbihnKSB7CiAgICAgICAgZyA9IGcuc3BsaXQoIjoiKTsKICAgICAgICB2YXIga2V5ID0gKGdbMF0gfHwgIiIpLnRyaW0oKTsKICAgICAgICB2YXIgdmFsID0gKGdbMV0gfHwgIiIpLnRyaW0oKTsKCiAgICAgICAgaWYgKCFjaGVja09wdGlvbihrZXksIG50KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bXZhbHMuaW5kZXhPZihrZXkpID49IDApIHsKICAgICAgICAgIGlmICh2YWwgIT09ICJmYWxzZSIpIHsKICAgICAgICAgICAgdmFsID0gK3ZhbDsKCiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAibnVtYmVyIiB8fCAhaXNGaW5pdGUodmFsKSB8fCB2YWwgPD0gMCB8fCBNYXRoLmZsb29yKHZhbCkgIT09IHZhbCkgewogICAgICAgICAgICAgIGVycm9yKCJFMDMyIiwgbnQsIGdbMV0udHJpbSgpKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRlLm9wdGlvbltrZXldID0gdmFsOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUub3B0aW9uW2tleV0gPSBrZXkgPT09ICJpbmRlbnQiID8gNCA6IGZhbHNlOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChrZXkgPT09ICJ2YWxpZHRoaXMiKSB7CgogICAgICAgICAgaWYgKHN0YXRlLmZ1bmN0WyIoZ2xvYmFsKSJdKQogICAgICAgICAgICByZXR1cm4gdm9pZCBlcnJvcigiRTAwOSIpOwoKICAgICAgICAgIGlmICh2YWwgIT09ICJ0cnVlIiAmJiB2YWwgIT09ICJmYWxzZSIpCiAgICAgICAgICAgIHJldHVybiB2b2lkIGVycm9yKCJFMDAyIiwgbnQpOwoKICAgICAgICAgIHN0YXRlLm9wdGlvbi52YWxpZHRoaXMgPSAodmFsID09PSAidHJ1ZSIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGtleSA9PT0gInF1b3RtYXJrIikgewogICAgICAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgIGNhc2UgInRydWUiOgogICAgICAgICAgY2FzZSAiZmFsc2UiOgogICAgICAgICAgICBzdGF0ZS5vcHRpb24ucXVvdG1hcmsgPSAodmFsID09PSAidHJ1ZSIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImRvdWJsZSI6CiAgICAgICAgICBjYXNlICJzaW5nbGUiOgogICAgICAgICAgICBzdGF0ZS5vcHRpb24ucXVvdG1hcmsgPSB2YWw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoa2V5ID09PSAic2hhZG93IikgewogICAgICAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgIGNhc2UgInRydWUiOgogICAgICAgICAgICBzdGF0ZS5vcHRpb24uc2hhZG93ID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJvdXRlciI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi5zaGFkb3cgPSAib3V0ZXIiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImZhbHNlIjoKICAgICAgICAgIGNhc2UgImlubmVyIjoKICAgICAgICAgICAgc3RhdGUub3B0aW9uLnNoYWRvdyA9ICJpbm5lciI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoa2V5ID09PSAidW51c2VkIikgewogICAgICAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgIGNhc2UgInRydWUiOgogICAgICAgICAgICBzdGF0ZS5vcHRpb24udW51c2VkID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJmYWxzZSI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi51bnVzZWQgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ2YXJzIjoKICAgICAgICAgIGNhc2UgInN0cmljdCI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi51bnVzZWQgPSB2YWw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoa2V5ID09PSAibGF0ZWRlZiIpIHsKICAgICAgICAgIHN3aXRjaCAodmFsKSB7CiAgICAgICAgICBjYXNlICJ0cnVlIjoKICAgICAgICAgICAgc3RhdGUub3B0aW9uLmxhdGVkZWYgPSB0cnVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImZhbHNlIjoKICAgICAgICAgICAgc3RhdGUub3B0aW9uLmxhdGVkZWYgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJub2Z1bmMiOgogICAgICAgICAgICBzdGF0ZS5vcHRpb24ubGF0ZWRlZiA9ICJub2Z1bmMiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGVycm9yKCJFMDAyIiwgbnQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGtleSA9PT0gImlnbm9yZSIpIHsKICAgICAgICAgIHN3aXRjaCAodmFsKSB7CiAgICAgICAgICBjYXNlICJsaW5lIjoKICAgICAgICAgICAgc3RhdGUuaWdub3JlZExpbmVzW250LmxpbmVdID0gdHJ1ZTsKICAgICAgICAgICAgcmVtb3ZlSWdub3JlZE1lc3NhZ2VzKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoa2V5ID09PSAic3RyaWN0IikgewogICAgICAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgIGNhc2UgInRydWUiOgogICAgICAgICAgICBzdGF0ZS5vcHRpb24uc3RyaWN0ID0gdHJ1ZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJmYWxzZSI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi5zdHJpY3QgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJmdW5jIjoKICAgICAgICAgIGNhc2UgImdsb2JhbCI6CiAgICAgICAgICBjYXNlICJpbXBsaWVkIjoKICAgICAgICAgICAgc3RhdGUub3B0aW9uLnN0cmljdCA9IHZhbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBlcnJvcigiRTAwMiIsIG50KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChrZXkgPT09ICJtb2R1bGUiKSB7CiAgICAgICAgICBpZiAoIWhhc1BhcnNlZENvZGUoc3RhdGUuZnVuY3QpKSB7CiAgICAgICAgICAgIGVycm9yKCJFMDU1Iiwgc3RhdGUudG9rZW5zLm5leHQsICJtb2R1bGUiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGVzdmVyc2lvbnMgPSB7CiAgICAgICAgICBlczMgICA6IDMsCiAgICAgICAgICBlczUgICA6IDUsCiAgICAgICAgICBlc25leHQ6IDYKICAgICAgICB9OwogICAgICAgIGlmIChfLmhhcyhlc3ZlcnNpb25zLCBrZXkpKSB7CiAgICAgICAgICBzd2l0Y2ggKHZhbCkgewogICAgICAgICAgY2FzZSAidHJ1ZSI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi5tb3ogPSBmYWxzZTsKICAgICAgICAgICAgc3RhdGUub3B0aW9uLmVzdmVyc2lvbiA9IGVzdmVyc2lvbnNba2V5XTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJmYWxzZSI6CiAgICAgICAgICAgIGlmICghc3RhdGUub3B0aW9uLm1veikgewogICAgICAgICAgICAgIHN0YXRlLm9wdGlvbi5lc3ZlcnNpb24gPSA1OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoa2V5ID09PSAiZXN2ZXJzaW9uIikgewogICAgICAgICAgc3dpdGNoICh2YWwpIHsKICAgICAgICAgIGNhc2UgIjUiOgogICAgICAgICAgICBpZiAoc3RhdGUuaW5FUzUodHJ1ZSkpIHsKICAgICAgICAgICAgICB3YXJuaW5nKCJJMDAzIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgIjMiOgogICAgICAgICAgY2FzZSAiNiI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi5tb3ogPSBmYWxzZTsKICAgICAgICAgICAgc3RhdGUub3B0aW9uLmVzdmVyc2lvbiA9ICt2YWw7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiMjAxNSI6CiAgICAgICAgICAgIHN0YXRlLm9wdGlvbi5tb3ogPSBmYWxzZTsKICAgICAgICAgICAgc3RhdGUub3B0aW9uLmVzdmVyc2lvbiA9IDY7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIWhhc1BhcnNlZENvZGUoc3RhdGUuZnVuY3QpKSB7CiAgICAgICAgICAgIGVycm9yKCJFMDU1Iiwgc3RhdGUudG9rZW5zLm5leHQsICJlc3ZlcnNpb24iKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHZhciBtYXRjaCA9IC9eKFsrLV0pKFdcZHszfSkkL2cuZXhlYyhrZXkpOwogICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgc3RhdGUuaWdub3JlZFttYXRjaFsyXV0gPSAobWF0Y2hbMV0gPT09ICItIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB2YXIgdG47CiAgICAgICAgaWYgKHZhbCA9PT0gInRydWUiIHx8IHZhbCA9PT0gImZhbHNlIikgewogICAgICAgICAgaWYgKG50LnR5cGUgPT09ICJqc2xpbnQiKSB7CiAgICAgICAgICAgIHRuID0gb3B0aW9ucy5yZW5hbWVkW2tleV0gfHwga2V5OwogICAgICAgICAgICBzdGF0ZS5vcHRpb25bdG5dID0gKHZhbCA9PT0gInRydWUiKTsKCiAgICAgICAgICAgIGlmIChvcHRpb25zLmludmVydGVkW3RuXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgc3RhdGUub3B0aW9uW3RuXSA9ICFzdGF0ZS5vcHRpb25bdG5dOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS5vcHRpb25ba2V5XSA9ICh2YWwgPT09ICJ0cnVlIik7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGtleSA9PT0gIm5ld2NhcCIpIHsKICAgICAgICAgICAgc3RhdGUub3B0aW9uWyIoZXhwbGljaXROZXdjYXApIl0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgZXJyb3IoIkUwMDIiLCBudCk7CiAgICAgIH0pOwoKICAgICAgYXNzdW1lKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwZWVrKHApIHsKICAgIHZhciBpID0gcCB8fCAwLCBqID0gbG9va2FoZWFkLmxlbmd0aCwgdDsKCiAgICBpZiAoaSA8IGopIHsKICAgICAgcmV0dXJuIGxvb2thaGVhZFtpXTsKICAgIH0KCiAgICB3aGlsZSAoaiA8PSBpKSB7CiAgICAgIHQgPSBsb29rYWhlYWRbal07CiAgICAgIGlmICghdCkgewogICAgICAgIHQgPSBsb29rYWhlYWRbal0gPSBsZXgudG9rZW4oKTsKICAgICAgfQogICAgICBqICs9IDE7CiAgICB9CiAgICBpZiAoIXQgJiYgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIoZW5kKSIpIHsKICAgICAgcmV0dXJuIHN0YXRlLnRva2Vucy5uZXh0OwogICAgfQoKICAgIHJldHVybiB0OwogIH0KCiAgZnVuY3Rpb24gcGVla0lnbm9yZUVPTCgpIHsKICAgIHZhciBpID0gMDsKICAgIHZhciB0OwogICAgZG8gewogICAgICB0ID0gcGVlayhpKyspOwogICAgfSB3aGlsZSAodC5pZCA9PT0gIihlbmRsaW5lKSIpOwogICAgcmV0dXJuIHQ7CiAgfQoKICBmdW5jdGlvbiBhZHZhbmNlKGlkLCB0KSB7CgogICAgc3dpdGNoIChzdGF0ZS50b2tlbnMuY3Vyci5pZCkgewogICAgY2FzZSAiKG51bWJlcikiOgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIuIikgewogICAgICAgIHdhcm5pbmcoIlcwMDUiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlICItIjoKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiLSIgfHwgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICItLSIpIHsKICAgICAgICB3YXJuaW5nKCJXMDA2Iik7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlICIrIjoKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKyIgfHwgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIrKyIpIHsKICAgICAgICB3YXJuaW5nKCJXMDA3Iik7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CgogICAgaWYgKGlkICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSBpZCkgewogICAgICBpZiAodCkgewogICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIihlbmQpIikgewogICAgICAgICAgZXJyb3IoIkUwMTkiLCB0LCB0LmlkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXJyb3IoIkUwMjAiLCBzdGF0ZS50b2tlbnMubmV4dCwgaWQsIHQuaWQsIHQubGluZSwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC50eXBlICE9PSAiKGlkZW50aWZpZXIpIiB8fCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSAhPT0gaWQpIHsKICAgICAgICB3YXJuaW5nKCJXMTE2Iiwgc3RhdGUudG9rZW5zLm5leHQsIGlkLCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk7CiAgICAgIH0KICAgIH0KCiAgICBzdGF0ZS50b2tlbnMucHJldiA9IHN0YXRlLnRva2Vucy5jdXJyOwogICAgc3RhdGUudG9rZW5zLmN1cnIgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgIGZvciAoOzspIHsKICAgICAgc3RhdGUudG9rZW5zLm5leHQgPSBsb29rYWhlYWQuc2hpZnQoKSB8fCBsZXgudG9rZW4oKTsKCiAgICAgIGlmICghc3RhdGUudG9rZW5zLm5leHQpIHsgLy8gTm8gbW9yZSB0b2tlbnMgbGVmdCwgZ2l2ZSB1cAogICAgICAgIHF1aXQoIkUwNDEiLCBzdGF0ZS50b2tlbnMuY3Vyci5saW5lKTsKICAgICAgfQoKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKGVuZCkiIHx8IHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKGVycm9yKSIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5jaGVjaykgewogICAgICAgIHN0YXRlLnRva2Vucy5uZXh0LmNoZWNrKCk7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pc1NwZWNpYWwpIHsKICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudHlwZSA9PT0gImZhbGxzIHRocm91Z2giKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbnMuY3Vyci5jYXNlRmFsbHNUaHJvdWdoID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZG9PcHRpb24oKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKGVuZGxpbmUpIikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpc0luZml4KHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW4uaW5maXggfHwgKCF0b2tlbi5pZGVudGlmaWVyICYmICF0b2tlbi50ZW1wbGF0ZSAmJiAhIXRva2VuLmxlZCk7CiAgfQoKICBmdW5jdGlvbiBpc0VuZE9mRXhwcigpIHsKICAgIHZhciBjdXJyID0gc3RhdGUudG9rZW5zLmN1cnI7CiAgICB2YXIgbmV4dCA9IHN0YXRlLnRva2Vucy5uZXh0OwogICAgaWYgKG5leHQuaWQgPT09ICI7IiB8fCBuZXh0LmlkID09PSAifSIgfHwgbmV4dC5pZCA9PT0gIjoiKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGlzSW5maXgobmV4dCkgPT09IGlzSW5maXgoY3VycikgfHwgKGN1cnIuaWQgPT09ICJ5aWVsZCIgJiYgc3RhdGUuaW5Nb3ooKSkpIHsKICAgICAgcmV0dXJuIGN1cnIubGluZSAhPT0gc3RhcnRMaW5lKG5leHQpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gaXNCZWdpbk9mRXhwcihwcmV2KSB7CiAgICByZXR1cm4gIXByZXYubGVmdCAmJiBwcmV2LmFyaXR5ICE9PSAidW5hcnkiOwogIH0KCiAgZnVuY3Rpb24gZXhwcmVzc2lvbihyYnAsIGluaXRpYWwpIHsKICAgIHZhciBsZWZ0LCBpc0FycmF5ID0gZmFsc2UsIGlzT2JqZWN0ID0gZmFsc2UsIGlzTGV0RXhwciA9IGZhbHNlOwoKICAgIHN0YXRlLm5hbWVTdGFjay5wdXNoKCk7CiAgICBpZiAoIWluaXRpYWwgJiYgc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICJsZXQiICYmIHBlZWsoMCkudmFsdWUgPT09ICIoIikgewogICAgICBpZiAoIXN0YXRlLmluTW96KCkpIHsKICAgICAgICB3YXJuaW5nKCJXMTE4Iiwgc3RhdGUudG9rZW5zLm5leHQsICJsZXQgZXhwcmVzc2lvbnMiKTsKICAgICAgfQogICAgICBpc0xldEV4cHIgPSB0cnVlOwogICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCk7CiAgICAgIGFkdmFuY2UoImxldCIpOwogICAgICBhZHZhbmNlKCIoIik7CiAgICAgIHN0YXRlLnRva2Vucy5wcmV2LmZ1ZCgpOwogICAgICBhZHZhbmNlKCIpIik7CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKGVuZCkiKQogICAgICBlcnJvcigiRTAwNiIsIHN0YXRlLnRva2Vucy5jdXJyKTsKCiAgICB2YXIgaXNEYW5nZXJvdXMgPQogICAgICBzdGF0ZS5vcHRpb24uYXNpICYmCiAgICAgIHN0YXRlLnRva2Vucy5wcmV2LmxpbmUgIT09IHN0YXJ0TGluZShzdGF0ZS50b2tlbnMuY3VycikgJiYKICAgICAgXy5jb250YWlucyhbIl0iLCAiKSJdLCBzdGF0ZS50b2tlbnMucHJldi5pZCkgJiYKICAgICAgXy5jb250YWlucyhbIlsiLCAiKCJdLCBzdGF0ZS50b2tlbnMuY3Vyci5pZCk7CgogICAgaWYgKGlzRGFuZ2Vyb3VzKQogICAgICB3YXJuaW5nKCJXMDE0Iiwgc3RhdGUudG9rZW5zLmN1cnIsIHN0YXRlLnRva2Vucy5jdXJyLmlkKTsKCiAgICBhZHZhbmNlKCk7CgogICAgaWYgKGluaXRpYWwpIHsKICAgICAgc3RhdGUuZnVuY3RbIih2ZXJiKSJdID0gc3RhdGUudG9rZW5zLmN1cnIudmFsdWU7CiAgICAgIHN0YXRlLnRva2Vucy5jdXJyLmJlZ2luc1N0bXQgPSB0cnVlOwogICAgfQoKICAgIGlmIChpbml0aWFsID09PSB0cnVlICYmIHN0YXRlLnRva2Vucy5jdXJyLmZ1ZCkgewogICAgICBsZWZ0ID0gc3RhdGUudG9rZW5zLmN1cnIuZnVkKCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoc3RhdGUudG9rZW5zLmN1cnIubnVkKSB7CiAgICAgICAgbGVmdCA9IHN0YXRlLnRva2Vucy5jdXJyLm51ZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIGVycm9yKCJFMDMwIiwgc3RhdGUudG9rZW5zLmN1cnIsIHN0YXRlLnRva2Vucy5jdXJyLmlkKTsKICAgICAgfQogICAgICB3aGlsZSAoKHJicCA8IHN0YXRlLnRva2Vucy5uZXh0LmxicCB8fCBzdGF0ZS50b2tlbnMubmV4dC50eXBlID09PSAiKHRlbXBsYXRlKSIpICYmCiAgICAgICAgICAgICAgIWlzRW5kT2ZFeHByKCkpIHsKICAgICAgICBpc0FycmF5ID0gc3RhdGUudG9rZW5zLmN1cnIudmFsdWUgPT09ICJBcnJheSI7CiAgICAgICAgaXNPYmplY3QgPSBzdGF0ZS50b2tlbnMuY3Vyci52YWx1ZSA9PT0gIk9iamVjdCI7CiAgICAgICAgaWYgKGxlZnQgJiYgKGxlZnQudmFsdWUgfHwgKGxlZnQuZmlyc3QgJiYgbGVmdC5maXJzdC52YWx1ZSkpKSB7CiAgICAgICAgICBpZiAobGVmdC52YWx1ZSAhPT0gIm5ldyIgfHwKICAgICAgICAgICAgKGxlZnQuZmlyc3QgJiYgbGVmdC5maXJzdC52YWx1ZSAmJiBsZWZ0LmZpcnN0LnZhbHVlID09PSAiLiIpKSB7CiAgICAgICAgICAgIGlzQXJyYXkgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKGxlZnQudmFsdWUgIT09IHN0YXRlLnRva2Vucy5jdXJyLnZhbHVlKSB7CiAgICAgICAgICAgICAgaXNPYmplY3QgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYWR2YW5jZSgpOwoKICAgICAgICBpZiAoaXNBcnJheSAmJiBzdGF0ZS50b2tlbnMuY3Vyci5pZCA9PT0gIigiICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKSIpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwMDkiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNPYmplY3QgJiYgc3RhdGUudG9rZW5zLmN1cnIuaWQgPT09ICIoIiAmJiBzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIikiKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDEwIiwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGxlZnQgJiYgc3RhdGUudG9rZW5zLmN1cnIubGVkKSB7CiAgICAgICAgICBsZWZ0ID0gc3RhdGUudG9rZW5zLmN1cnIubGVkKGxlZnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlcnJvcigiRTAzMyIsIHN0YXRlLnRva2Vucy5jdXJyLCBzdGF0ZS50b2tlbnMuY3Vyci5pZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaXNMZXRFeHByKSB7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpOwogICAgfQoKICAgIHN0YXRlLm5hbWVTdGFjay5wb3AoKTsKCiAgICByZXR1cm4gbGVmdDsKICB9CgogIGZ1bmN0aW9uIHN0YXJ0TGluZSh0b2tlbikgewogICAgcmV0dXJuIHRva2VuLnN0YXJ0TGluZSB8fCB0b2tlbi5saW5lOwogIH0KCiAgZnVuY3Rpb24gbm9icmVha25vbmFkamFjZW50KGxlZnQsIHJpZ2h0KSB7CiAgICBsZWZ0ID0gbGVmdCB8fCBzdGF0ZS50b2tlbnMuY3VycjsKICAgIHJpZ2h0ID0gcmlnaHQgfHwgc3RhdGUudG9rZW5zLm5leHQ7CiAgICBpZiAoIXN0YXRlLm9wdGlvbi5sYXhicmVhayAmJiBsZWZ0LmxpbmUgIT09IHN0YXJ0TGluZShyaWdodCkpIHsKICAgICAgd2FybmluZygiVzAxNCIsIHJpZ2h0LCByaWdodC52YWx1ZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBub2xpbmVicmVhayh0KSB7CiAgICB0ID0gdCB8fCBzdGF0ZS50b2tlbnMuY3VycjsKICAgIGlmICh0LmxpbmUgIT09IHN0YXJ0TGluZShzdGF0ZS50b2tlbnMubmV4dCkpIHsKICAgICAgd2FybmluZygiRTAyMiIsIHQsIHQudmFsdWUpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbm9icmVha2NvbW1hKGxlZnQsIHJpZ2h0KSB7CiAgICBpZiAobGVmdC5saW5lICE9PSBzdGFydExpbmUocmlnaHQpKSB7CiAgICAgIGlmICghc3RhdGUub3B0aW9uLmxheGNvbW1hKSB7CiAgICAgICAgaWYgKGNvbW1hLmZpcnN0KSB7CiAgICAgICAgICB3YXJuaW5nKCJJMDAxIik7CiAgICAgICAgICBjb21tYS5maXJzdCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB3YXJuaW5nKCJXMDE0IiwgbGVmdCwgcmlnaHQudmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBjb21tYShvcHRzKSB7CiAgICBvcHRzID0gb3B0cyB8fCB7fTsKCiAgICBpZiAoIW9wdHMucGVlaykgewogICAgICBub2JyZWFrY29tbWEoc3RhdGUudG9rZW5zLmN1cnIsIHN0YXRlLnRva2Vucy5uZXh0KTsKICAgICAgYWR2YW5jZSgiLCIpOwogICAgfSBlbHNlIHsKICAgICAgbm9icmVha2NvbW1hKHN0YXRlLnRva2Vucy5wcmV2LCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXIgJiYgIShvcHRzLnByb3BlcnR5ICYmIHN0YXRlLmluRVM1KCkpKSB7CiAgICAgIHN3aXRjaCAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUpIHsKICAgICAgY2FzZSAiYnJlYWsiOgogICAgICBjYXNlICJjYXNlIjoKICAgICAgY2FzZSAiY2F0Y2giOgogICAgICBjYXNlICJjb250aW51ZSI6CiAgICAgIGNhc2UgImRlZmF1bHQiOgogICAgICBjYXNlICJkbyI6CiAgICAgIGNhc2UgImVsc2UiOgogICAgICBjYXNlICJmaW5hbGx5IjoKICAgICAgY2FzZSAiZm9yIjoKICAgICAgY2FzZSAiaWYiOgogICAgICBjYXNlICJpbiI6CiAgICAgIGNhc2UgImluc3RhbmNlb2YiOgogICAgICBjYXNlICJyZXR1cm4iOgogICAgICBjYXNlICJzd2l0Y2giOgogICAgICBjYXNlICJ0aHJvdyI6CiAgICAgIGNhc2UgInRyeSI6CiAgICAgIGNhc2UgInZhciI6CiAgICAgIGNhc2UgImxldCI6CiAgICAgIGNhc2UgIndoaWxlIjoKICAgICAgY2FzZSAid2l0aCI6CiAgICAgICAgZXJyb3IoIkUwMjQiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC50eXBlID09PSAiKHB1bmN0dWF0b3IpIikgewogICAgICBzd2l0Y2ggKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSB7CiAgICAgIGNhc2UgIn0iOgogICAgICBjYXNlICJdIjoKICAgICAgY2FzZSAiLCI6CiAgICAgICAgaWYgKG9wdHMuYWxsb3dUcmFpbGluZykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICBjYXNlICIpIjoKICAgICAgICBlcnJvcigiRTAyNCIsIHN0YXRlLnRva2Vucy5uZXh0LCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIHN5bWJvbChzLCBwKSB7CiAgICB2YXIgeCA9IHN0YXRlLnN5bnRheFtzXTsKICAgIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gIm9iamVjdCIpIHsKICAgICAgc3RhdGUuc3ludGF4W3NdID0geCA9IHsKICAgICAgICBpZDogcywKICAgICAgICBsYnA6IHAsCiAgICAgICAgdmFsdWU6IHMKICAgICAgfTsKICAgIH0KICAgIHJldHVybiB4OwogIH0KCiAgZnVuY3Rpb24gZGVsaW0ocykgewogICAgdmFyIHggPSBzeW1ib2wocywgMCk7CiAgICB4LmRlbGltID0gdHJ1ZTsKICAgIHJldHVybiB4OwogIH0KCiAgZnVuY3Rpb24gc3RtdChzLCBmKSB7CiAgICB2YXIgeCA9IGRlbGltKHMpOwogICAgeC5pZGVudGlmaWVyID0geC5yZXNlcnZlZCA9IHRydWU7CiAgICB4LmZ1ZCA9IGY7CiAgICByZXR1cm4geDsKICB9CgogIGZ1bmN0aW9uIGJsb2Nrc3RtdChzLCBmKSB7CiAgICB2YXIgeCA9IHN0bXQocywgZik7CiAgICB4LmJsb2NrID0gdHJ1ZTsKICAgIHJldHVybiB4OwogIH0KCiAgZnVuY3Rpb24gcmVzZXJ2ZU5hbWUoeCkgewogICAgdmFyIGMgPSB4LmlkLmNoYXJBdCgwKTsKICAgIGlmICgoYyA+PSAiYSIgJiYgYyA8PSAieiIpIHx8IChjID49ICJBIiAmJiBjIDw9ICJaIikpIHsKICAgICAgeC5pZGVudGlmaWVyID0geC5yZXNlcnZlZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4geDsKICB9CgogIGZ1bmN0aW9uIHByZWZpeChzLCBmKSB7CiAgICB2YXIgeCA9IHN5bWJvbChzLCAxNTApOwogICAgcmVzZXJ2ZU5hbWUoeCk7CgogICAgeC5udWQgPSAodHlwZW9mIGYgPT09ICJmdW5jdGlvbiIpID8gZiA6IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLmFyaXR5ID0gInVuYXJ5IjsKICAgICAgdGhpcy5yaWdodCA9IGV4cHJlc3Npb24oMTUwKTsKCiAgICAgIGlmICh0aGlzLmlkID09PSAiKysiIHx8IHRoaXMuaWQgPT09ICItLSIpIHsKICAgICAgICBpZiAoc3RhdGUub3B0aW9uLnBsdXNwbHVzKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDE2IiwgdGhpcywgdGhpcy5pZCk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICYmICghdGhpcy5yaWdodC5pZGVudGlmaWVyIHx8IGlzUmVzZXJ2ZWQodGhpcy5yaWdodCkpICYmCiAgICAgICAgICAgIHRoaXMucmlnaHQuaWQgIT09ICIuIiAmJiB0aGlzLnJpZ2h0LmlkICE9PSAiWyIpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwMTciLCB0aGlzKTsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaXNNZXRhUHJvcGVydHkpIHsKICAgICAgICAgIGVycm9yKCJFMDMxIiwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJpZ2h0ICYmIHRoaXMucmlnaHQuaWRlbnRpZmllcikgewogICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay5tb2RpZnkodGhpcy5yaWdodC52YWx1ZSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdGhpczsKICAgIH07CgogICAgcmV0dXJuIHg7CiAgfQoKICBmdW5jdGlvbiB0eXBlKHMsIGYpIHsKICAgIHZhciB4ID0gZGVsaW0ocyk7CiAgICB4LnR5cGUgPSBzOwogICAgeC5udWQgPSBmOwogICAgcmV0dXJuIHg7CiAgfQoKICBmdW5jdGlvbiByZXNlcnZlKG5hbWUsIGZ1bmMpIHsKICAgIHZhciB4ID0gdHlwZShuYW1lLCBmdW5jKTsKICAgIHguaWRlbnRpZmllciA9IHRydWU7CiAgICB4LnJlc2VydmVkID0gdHJ1ZTsKICAgIHJldHVybiB4OwogIH0KCiAgZnVuY3Rpb24gRnV0dXJlUmVzZXJ2ZWRXb3JkKG5hbWUsIG1ldGEpIHsKICAgIHZhciB4ID0gdHlwZShuYW1lLCAobWV0YSAmJiBtZXRhLm51ZCkgfHwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CgogICAgbWV0YSA9IG1ldGEgfHwge307CiAgICBtZXRhLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkID0gdHJ1ZTsKCiAgICB4LnZhbHVlID0gbmFtZTsKICAgIHguaWRlbnRpZmllciA9IHRydWU7CiAgICB4LnJlc2VydmVkID0gdHJ1ZTsKICAgIHgubWV0YSA9IG1ldGE7CgogICAgcmV0dXJuIHg7CiAgfQoKICBmdW5jdGlvbiByZXNlcnZldmFyKHMsIHYpIHsKICAgIHJldHVybiByZXNlcnZlKHMsIGZ1bmN0aW9uKCkgewogICAgICBpZiAodHlwZW9mIHYgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2KHRoaXMpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBpbmZpeChzLCBmLCBwLCB3KSB7CiAgICB2YXIgeCA9IHN5bWJvbChzLCBwKTsKICAgIHJlc2VydmVOYW1lKHgpOwogICAgeC5pbmZpeCA9IHRydWU7CiAgICB4LmxlZCA9IGZ1bmN0aW9uKGxlZnQpIHsKICAgICAgaWYgKCF3KSB7CiAgICAgICAgbm9icmVha25vbmFkamFjZW50KHN0YXRlLnRva2Vucy5wcmV2LCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgIH0KICAgICAgaWYgKChzID09PSAiaW4iIHx8IHMgPT09ICJpbnN0YW5jZW9mIikgJiYgbGVmdC5pZCA9PT0gIiEiKSB7CiAgICAgICAgd2FybmluZygiVzAxOCIsIGxlZnQsICIhIik7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBmID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIGYobGVmdCwgdGhpcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgICB0aGlzLnJpZ2h0ID0gZXhwcmVzc2lvbihwKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfTsKICAgIHJldHVybiB4OwogIH0KCiAgZnVuY3Rpb24gYXBwbGljYXRpb24ocykgewogICAgdmFyIHggPSBzeW1ib2wocywgNDIpOwoKICAgIHgubGVkID0gZnVuY3Rpb24obGVmdCkgewogICAgICBub2JyZWFrbm9uYWRqYWNlbnQoc3RhdGUudG9rZW5zLnByZXYsIHN0YXRlLnRva2Vucy5jdXJyKTsKCiAgICAgIHRoaXMubGVmdCA9IGxlZnQ7CiAgICAgIHRoaXMucmlnaHQgPSBkb0Z1bmN0aW9uKHsgdHlwZTogImFycm93IiwgbG9uZUFyZzogbGVmdCB9KTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgcmV0dXJuIHg7CiAgfQoKICBmdW5jdGlvbiByZWxhdGlvbihzLCBmKSB7CiAgICB2YXIgeCA9IHN5bWJvbChzLCAxMDApOwoKICAgIHgubGVkID0gZnVuY3Rpb24obGVmdCkgewogICAgICBub2JyZWFrbm9uYWRqYWNlbnQoc3RhdGUudG9rZW5zLnByZXYsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5yaWdodCA9IGV4cHJlc3Npb24oMTAwKTsKCiAgICAgIGlmIChpc0lkZW50aWZpZXIobGVmdCwgIk5hTiIpIHx8IGlzSWRlbnRpZmllcihyaWdodCwgIk5hTiIpKSB7CiAgICAgICAgd2FybmluZygiVzAxOSIsIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKGYpIHsKICAgICAgICBmLmFwcGx5KHRoaXMsIFtsZWZ0LCByaWdodF0pOwogICAgICB9CgogICAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0KSB7CiAgICAgICAgcXVpdCgiRTA0MSIsIHN0YXRlLnRva2Vucy5jdXJyLmxpbmUpOwogICAgICB9CgogICAgICBpZiAobGVmdC5pZCA9PT0gIiEiKSB7CiAgICAgICAgd2FybmluZygiVzAxOCIsIGxlZnQsICIhIik7CiAgICAgIH0KCiAgICAgIGlmIChyaWdodC5pZCA9PT0gIiEiKSB7CiAgICAgICAgd2FybmluZygiVzAxOCIsIHJpZ2h0LCAiISIpOwogICAgICB9CgogICAgICByZXR1cm4gdGhpczsKICAgIH07CiAgICByZXR1cm4geDsKICB9CgogIGZ1bmN0aW9uIGlzUG9vclJlbGF0aW9uKG5vZGUpIHsKICAgIHJldHVybiBub2RlICYmCiAgICAgICAgKChub2RlLnR5cGUgPT09ICIobnVtYmVyKSIgJiYgK25vZGUudmFsdWUgPT09IDApIHx8CiAgICAgICAgIChub2RlLnR5cGUgPT09ICIoc3RyaW5nKSIgJiYgbm9kZS52YWx1ZSA9PT0gIiIpIHx8CiAgICAgICAgIChub2RlLnR5cGUgPT09ICJudWxsIiAmJiAhc3RhdGUub3B0aW9uLmVxbnVsbCkgfHwKICAgICAgICBub2RlLnR5cGUgPT09ICJ0cnVlIiB8fAogICAgICAgIG5vZGUudHlwZSA9PT0gImZhbHNlIiB8fAogICAgICAgIG5vZGUudHlwZSA9PT0gInVuZGVmaW5lZCIpOwogIH0KCiAgdmFyIHR5cGVvZlZhbHVlcyA9IHt9OwogIHR5cGVvZlZhbHVlcy5sZWdhY3kgPSBbCiAgICAieG1sIiwKICAgICJ1bmtub3duIgogIF07CiAgdHlwZW9mVmFsdWVzLmVzMyA9IFsKICAgICJ1bmRlZmluZWQiLCAiYm9vbGVhbiIsICJudW1iZXIiLCAic3RyaW5nIiwgImZ1bmN0aW9uIiwgIm9iamVjdCIsCiAgXTsKICB0eXBlb2ZWYWx1ZXMuZXMzID0gdHlwZW9mVmFsdWVzLmVzMy5jb25jYXQodHlwZW9mVmFsdWVzLmxlZ2FjeSk7CiAgdHlwZW9mVmFsdWVzLmVzNiA9IHR5cGVvZlZhbHVlcy5lczMuY29uY2F0KCJzeW1ib2wiKTsKICBmdW5jdGlvbiBpc1R5cG9UeXBlb2YobGVmdCwgcmlnaHQsIHN0YXRlKSB7CiAgICB2YXIgdmFsdWVzOwoKICAgIGlmIChzdGF0ZS5vcHRpb24ubm90eXBlb2YpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0KQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdmFsdWVzID0gc3RhdGUuaW5FUzYoKSA/IHR5cGVvZlZhbHVlcy5lczYgOiB0eXBlb2ZWYWx1ZXMuZXMzOwoKICAgIGlmIChyaWdodC50eXBlID09PSAiKGlkZW50aWZpZXIpIiAmJiByaWdodC52YWx1ZSA9PT0gInR5cGVvZiIgJiYgbGVmdC50eXBlID09PSAiKHN0cmluZykiKQogICAgICByZXR1cm4gIV8uY29udGFpbnModmFsdWVzLCBsZWZ0LnZhbHVlKTsKCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBpc0dsb2JhbEV2YWwobGVmdCwgc3RhdGUpIHsKICAgIHZhciBpc0dsb2JhbCA9IGZhbHNlOwogICAgaWYgKGxlZnQudHlwZSA9PT0gInRoaXMiICYmIHN0YXRlLmZ1bmN0WyIoY29udGV4dCkiXSA9PT0gbnVsbCkgewogICAgICBpc0dsb2JhbCA9IHRydWU7CiAgICB9CiAgICBlbHNlIGlmIChsZWZ0LnR5cGUgPT09ICIoaWRlbnRpZmllcikiKSB7CiAgICAgIGlmIChzdGF0ZS5vcHRpb24ubm9kZSAmJiBsZWZ0LnZhbHVlID09PSAiZ2xvYmFsIikgewogICAgICAgIGlzR2xvYmFsID0gdHJ1ZTsKICAgICAgfQoKICAgICAgZWxzZSBpZiAoc3RhdGUub3B0aW9uLmJyb3dzZXIgJiYgKGxlZnQudmFsdWUgPT09ICJ3aW5kb3ciIHx8IGxlZnQudmFsdWUgPT09ICJkb2N1bWVudCIpKSB7CiAgICAgICAgaXNHbG9iYWwgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGlzR2xvYmFsOwogIH0KCiAgZnVuY3Rpb24gZmluZE5hdGl2ZVByb3RvdHlwZShsZWZ0KSB7CiAgICB2YXIgbmF0aXZlcyA9IFsKICAgICAgIkFycmF5IiwgIkFycmF5QnVmZmVyIiwgIkJvb2xlYW4iLCAiQ29sbGF0b3IiLCAiRGF0YVZpZXciLCAiRGF0ZSIsCiAgICAgICJEYXRlVGltZUZvcm1hdCIsICJFcnJvciIsICJFdmFsRXJyb3IiLCAiRmxvYXQzMkFycmF5IiwgIkZsb2F0NjRBcnJheSIsCiAgICAgICJGdW5jdGlvbiIsICJJbmZpbml0eSIsICJJbnRsIiwgIkludDE2QXJyYXkiLCAiSW50MzJBcnJheSIsICJJbnQ4QXJyYXkiLAogICAgICAiSXRlcmF0b3IiLCAiTnVtYmVyIiwgIk51bWJlckZvcm1hdCIsICJPYmplY3QiLCAiUmFuZ2VFcnJvciIsCiAgICAgICJSZWZlcmVuY2VFcnJvciIsICJSZWdFeHAiLCAiU3RvcEl0ZXJhdGlvbiIsICJTdHJpbmciLCAiU3ludGF4RXJyb3IiLAogICAgICAiVHlwZUVycm9yIiwgIlVpbnQxNkFycmF5IiwgIlVpbnQzMkFycmF5IiwgIlVpbnQ4QXJyYXkiLCAiVWludDhDbGFtcGVkQXJyYXkiLAogICAgICAiVVJJRXJyb3IiCiAgICBdOwoKICAgIGZ1bmN0aW9uIHdhbGtQcm90b3R5cGUob2JqKSB7CiAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSAib2JqZWN0IikgcmV0dXJuOwogICAgICByZXR1cm4gb2JqLnJpZ2h0ID09PSAicHJvdG90eXBlIiA/IG9iaiA6IHdhbGtQcm90b3R5cGUob2JqLmxlZnQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHdhbGtOYXRpdmUob2JqKSB7CiAgICAgIHdoaWxlICghb2JqLmlkZW50aWZpZXIgJiYgdHlwZW9mIG9iai5sZWZ0ID09PSAib2JqZWN0IikKICAgICAgICBvYmogPSBvYmoubGVmdDsKCiAgICAgIGlmIChvYmouaWRlbnRpZmllciAmJiBuYXRpdmVzLmluZGV4T2Yob2JqLnZhbHVlKSA+PSAwKQogICAgICAgIHJldHVybiBvYmoudmFsdWU7CiAgICB9CgogICAgdmFyIHByb3RvdHlwZSA9IHdhbGtQcm90b3R5cGUobGVmdCk7CiAgICBpZiAocHJvdG90eXBlKSByZXR1cm4gd2Fsa05hdGl2ZShwcm90b3R5cGUpOwogIH0KICBmdW5jdGlvbiBjaGVja0xlZnRTaWRlQXNzaWduKGxlZnQsIGFzc2lnblRva2VuLCBvcHRpb25zKSB7CgogICAgdmFyIGFsbG93RGVzdHJ1Y3R1cmluZyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hbGxvd0Rlc3RydWN0dXJpbmc7CgogICAgYXNzaWduVG9rZW4gPSBhc3NpZ25Ub2tlbiB8fCBsZWZ0OwoKICAgIGlmIChzdGF0ZS5vcHRpb24uZnJlZXplKSB7CiAgICAgIHZhciBuYXRpdmVPYmplY3QgPSBmaW5kTmF0aXZlUHJvdG90eXBlKGxlZnQpOwogICAgICBpZiAobmF0aXZlT2JqZWN0KQogICAgICAgIHdhcm5pbmcoIlcxMjEiLCBsZWZ0LCBuYXRpdmVPYmplY3QpOwogICAgfQoKICAgIGlmIChsZWZ0LmlkZW50aWZpZXIgJiYgIWxlZnQuaXNNZXRhUHJvcGVydHkpIHsKICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay5yZWFzc2lnbihsZWZ0LnZhbHVlLCBsZWZ0KTsKICAgIH0KCiAgICBpZiAobGVmdC5pZCA9PT0gIi4iKSB7CiAgICAgIGlmICghbGVmdC5sZWZ0IHx8IGxlZnQubGVmdC52YWx1ZSA9PT0gImFyZ3VtZW50cyIgJiYgIXN0YXRlLmlzU3RyaWN0KCkpIHsKICAgICAgICB3YXJuaW5nKCJFMDMxIiwgYXNzaWduVG9rZW4pOwogICAgICB9CgogICAgICBzdGF0ZS5uYW1lU3RhY2suc2V0KHN0YXRlLnRva2Vucy5wcmV2KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGxlZnQuaWQgPT09ICJ7IiB8fCBsZWZ0LmlkID09PSAiWyIpIHsKICAgICAgaWYgKGFsbG93RGVzdHJ1Y3R1cmluZyAmJiBzdGF0ZS50b2tlbnMuY3Vyci5sZWZ0LmRlc3RydWN0QXNzaWduKSB7CiAgICAgICAgc3RhdGUudG9rZW5zLmN1cnIubGVmdC5kZXN0cnVjdEFzc2lnbi5mb3JFYWNoKGZ1bmN0aW9uKHQpIHsKICAgICAgICAgIGlmICh0LmlkKSB7CiAgICAgICAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2subW9kaWZ5KHQuaWQsIHQudG9rZW4pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChsZWZ0LmlkID09PSAieyIgfHwgIWxlZnQubGVmdCkgewogICAgICAgICAgd2FybmluZygiRTAzMSIsIGFzc2lnblRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGxlZnQubGVmdC52YWx1ZSA9PT0gImFyZ3VtZW50cyIgJiYgIXN0YXRlLmlzU3RyaWN0KCkpIHsKICAgICAgICAgIHdhcm5pbmcoIkUwMzEiLCBhc3NpZ25Ub2tlbik7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAobGVmdC5pZCA9PT0gIlsiKSB7CiAgICAgICAgc3RhdGUubmFtZVN0YWNrLnNldChsZWZ0LnJpZ2h0KTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKGxlZnQuaXNNZXRhUHJvcGVydHkpIHsKICAgICAgZXJyb3IoIkUwMzEiLCBhc3NpZ25Ub2tlbik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChsZWZ0LmlkZW50aWZpZXIgJiYgIWlzUmVzZXJ2ZWQobGVmdCkpIHsKICAgICAgaWYgKHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0ubGFiZWx0eXBlKGxlZnQudmFsdWUpID09PSAiZXhjZXB0aW9uIikgewogICAgICAgIHdhcm5pbmcoIlcwMjIiLCBsZWZ0KTsKICAgICAgfQogICAgICBzdGF0ZS5uYW1lU3RhY2suc2V0KGxlZnQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBpZiAobGVmdCA9PT0gc3RhdGUuc3ludGF4WyJmdW5jdGlvbiJdKSB7CiAgICAgIHdhcm5pbmcoIlcwMjMiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gYXNzaWdub3AocywgZiwgcCkgewogICAgdmFyIHggPSBpbmZpeChzLCB0eXBlb2YgZiA9PT0gImZ1bmN0aW9uIiA/IGYgOiBmdW5jdGlvbihsZWZ0LCB0aGF0KSB7CiAgICAgIHRoYXQubGVmdCA9IGxlZnQ7CgogICAgICBpZiAobGVmdCAmJiBjaGVja0xlZnRTaWRlQXNzaWduKGxlZnQsIHRoYXQsIHsgYWxsb3dEZXN0cnVjdHVyaW5nOiB0cnVlIH0pKSB7CiAgICAgICAgdGhhdC5yaWdodCA9IGV4cHJlc3Npb24oMTApOwogICAgICAgIHJldHVybiB0aGF0OwogICAgICB9CgogICAgICBlcnJvcigiRTAzMSIsIHRoYXQpOwogICAgfSwgcCk7CgogICAgeC5leHBzID0gdHJ1ZTsKICAgIHguYXNzaWduID0gdHJ1ZTsKICAgIHJldHVybiB4OwogIH0KCgogIGZ1bmN0aW9uIGJpdHdpc2UocywgZiwgcCkgewogICAgdmFyIHggPSBzeW1ib2wocywgcCk7CiAgICByZXNlcnZlTmFtZSh4KTsKICAgIHgubGVkID0gKHR5cGVvZiBmID09PSAiZnVuY3Rpb24iKSA/IGYgOiBmdW5jdGlvbihsZWZ0KSB7CiAgICAgIGlmIChzdGF0ZS5vcHRpb24uYml0d2lzZSkgewogICAgICAgIHdhcm5pbmcoIlcwMTYiLCB0aGlzLCB0aGlzLmlkKTsKICAgICAgfQogICAgICB0aGlzLmxlZnQgPSBsZWZ0OwogICAgICB0aGlzLnJpZ2h0ID0gZXhwcmVzc2lvbihwKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgcmV0dXJuIHg7CiAgfQoKICBmdW5jdGlvbiBiaXR3aXNlYXNzaWdub3AocykgewogICAgcmV0dXJuIGFzc2lnbm9wKHMsIGZ1bmN0aW9uKGxlZnQsIHRoYXQpIHsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5iaXR3aXNlKSB7CiAgICAgICAgd2FybmluZygiVzAxNiIsIHRoYXQsIHRoYXQuaWQpOwogICAgICB9CgogICAgICBpZiAobGVmdCAmJiBjaGVja0xlZnRTaWRlQXNzaWduKGxlZnQsIHRoYXQpKSB7CiAgICAgICAgdGhhdC5yaWdodCA9IGV4cHJlc3Npb24oMTApOwogICAgICAgIHJldHVybiB0aGF0OwogICAgICB9CiAgICAgIGVycm9yKCJFMDMxIiwgdGhhdCk7CiAgICB9LCAyMCk7CiAgfQoKICBmdW5jdGlvbiBzdWZmaXgocykgewogICAgdmFyIHggPSBzeW1ib2wocywgMTUwKTsKCiAgICB4LmxlZCA9IGZ1bmN0aW9uKGxlZnQpIHsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5wbHVzcGx1cykgewogICAgICAgIHdhcm5pbmcoIlcwMTYiLCB0aGlzLCB0aGlzLmlkKTsKICAgICAgfSBlbHNlIGlmICgoIWxlZnQuaWRlbnRpZmllciB8fCBpc1Jlc2VydmVkKGxlZnQpKSAmJiBsZWZ0LmlkICE9PSAiLiIgJiYgbGVmdC5pZCAhPT0gIlsiKSB7CiAgICAgICAgd2FybmluZygiVzAxNyIsIHRoaXMpOwogICAgICB9CgogICAgICBpZiAobGVmdC5pc01ldGFQcm9wZXJ0eSkgewogICAgICAgIGVycm9yKCJFMDMxIiwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAobGVmdCAmJiBsZWZ0LmlkZW50aWZpZXIpIHsKICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLm1vZGlmeShsZWZ0LnZhbHVlLCBsZWZ0KTsKICAgICAgfQoKICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwogICAgcmV0dXJuIHg7CiAgfQoKICBmdW5jdGlvbiBvcHRpb25hbGlkZW50aWZpZXIoZm5wYXJhbSwgcHJvcCwgcHJlc2VydmUpIHsKICAgIGlmICghc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcikgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFwcmVzZXJ2ZSkgewogICAgICBhZHZhbmNlKCk7CiAgICB9CgogICAgdmFyIGN1cnIgPSBzdGF0ZS50b2tlbnMuY3VycjsKICAgIHZhciB2YWwgID0gc3RhdGUudG9rZW5zLmN1cnIudmFsdWU7CgogICAgaWYgKCFpc1Jlc2VydmVkKGN1cnIpKSB7CiAgICAgIHJldHVybiB2YWw7CiAgICB9CgogICAgaWYgKHByb3ApIHsKICAgICAgaWYgKHN0YXRlLmluRVM1KCkpIHsKICAgICAgICByZXR1cm4gdmFsOwogICAgICB9CiAgICB9CgogICAgaWYgKGZucGFyYW0gJiYgdmFsID09PSAidW5kZWZpbmVkIikgewogICAgICByZXR1cm4gdmFsOwogICAgfQoKICAgIHdhcm5pbmcoIlcwMjQiLCBzdGF0ZS50b2tlbnMuY3Vyciwgc3RhdGUudG9rZW5zLmN1cnIuaWQpOwogICAgcmV0dXJuIHZhbDsKICB9CiAgZnVuY3Rpb24gaWRlbnRpZmllcihmbnBhcmFtLCBwcm9wKSB7CiAgICB2YXIgaSA9IG9wdGlvbmFsaWRlbnRpZmllcihmbnBhcmFtLCBwcm9wLCBmYWxzZSk7CiAgICBpZiAoaSkgewogICAgICByZXR1cm4gaTsKICAgIH0KICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIi4uLiIpIHsKICAgICAgaWYgKCFzdGF0ZS5pbkVTNih0cnVlKSkgewogICAgICAgIHdhcm5pbmcoIlcxMTkiLCBzdGF0ZS50b2tlbnMubmV4dCwgInNwcmVhZC9yZXN0IG9wZXJhdG9yIiwgIjYiKTsKICAgICAgfQogICAgICBhZHZhbmNlKCk7CgogICAgICBpZiAoY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAiLi4uIikpIHsKICAgICAgICB3YXJuaW5nKCJFMDI0Iiwgc3RhdGUudG9rZW5zLm5leHQsICIuLi4iKTsKICAgICAgICB3aGlsZSAoY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAiLi4uIikpIHsKICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmICghc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcikgewogICAgICAgIHdhcm5pbmcoIkUwMjQiLCBzdGF0ZS50b2tlbnMuY3VyciwgIi4uLiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgcmV0dXJuIGlkZW50aWZpZXIoZm5wYXJhbSwgcHJvcCk7CiAgICB9IGVsc2UgewogICAgICBlcnJvcigiRTAzMCIsIHN0YXRlLnRva2Vucy5uZXh0LCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIjsiKSB7CiAgICAgICAgYWR2YW5jZSgpOwogICAgICB9CiAgICB9CiAgfQoKCiAgZnVuY3Rpb24gcmVhY2hhYmxlKGNvbnRyb2xUb2tlbikgewogICAgdmFyIGkgPSAwLCB0OwogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiOyIgfHwgY29udHJvbFRva2VuLmluQnJhY2VsZXNzQmxvY2spIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yICg7OykgewogICAgICBkbyB7CiAgICAgICAgdCA9IHBlZWsoaSk7CiAgICAgICAgaSArPSAxOwogICAgICB9IHdoaWxlICh0LmlkICE9PSAiKGVuZCkiICYmIHQuaWQgPT09ICIoY29tbWVudCkiKTsKCiAgICAgIGlmICh0LnJlYWNoKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0LmlkICE9PSAiKGVuZGxpbmUpIikgewogICAgICAgIGlmICh0LmlkID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBpZiAoc3RhdGUub3B0aW9uLmxhdGVkZWYgPT09IHRydWUpIHsKICAgICAgICAgICAgd2FybmluZygiVzAyNiIsIHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICB3YXJuaW5nKCJXMDI3IiwgdCwgdC52YWx1ZSwgY29udHJvbFRva2VuLnZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VGaW5hbFNlbWljb2xvbigpIHsKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIjsiKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pc1VuY2xvc2VkKSByZXR1cm4gYWR2YW5jZSgpOwoKICAgICAgdmFyIHNhbWVMaW5lID0gc3RhcnRMaW5lKHN0YXRlLnRva2Vucy5uZXh0KSA9PT0gc3RhdGUudG9rZW5zLmN1cnIubGluZSAmJgogICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIihlbmQpIjsKICAgICAgdmFyIGJsb2NrRW5kID0gY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAifSIpOwoKICAgICAgaWYgKHNhbWVMaW5lICYmICFibG9ja0VuZCkgewogICAgICAgIGVycm9yQXQoIkUwNTgiLCBzdGF0ZS50b2tlbnMuY3Vyci5saW5lLCBzdGF0ZS50b2tlbnMuY3Vyci5jaGFyYWN0ZXIpOwogICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5vcHRpb24uYXNpKSB7CiAgICAgICAgaWYgKChibG9ja0VuZCAmJiAhc3RhdGUub3B0aW9uLmxhc3RzZW1pYykgfHwgIXNhbWVMaW5lKSB7CiAgICAgICAgICB3YXJuaW5nQXQoIlcwMzMiLCBzdGF0ZS50b2tlbnMuY3Vyci5saW5lLCBzdGF0ZS50b2tlbnMuY3Vyci5jaGFyYWN0ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYWR2YW5jZSgiOyIpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc3RhdGVtZW50KCkgewogICAgdmFyIGkgPSBpbmRlbnQsIHIsIHQgPSBzdGF0ZS50b2tlbnMubmV4dCwgaGFzT3duU2NvcGUgPSBmYWxzZTsKCiAgICBpZiAodC5pZCA9PT0gIjsiKSB7CiAgICAgIGFkdmFuY2UoIjsiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHJlcyA9IGlzUmVzZXJ2ZWQodCk7CgogICAgaWYgKHJlcyAmJiB0Lm1ldGEgJiYgdC5tZXRhLmlzRnV0dXJlUmVzZXJ2ZWRXb3JkICYmIHBlZWsoKS5pZCA9PT0gIjoiKSB7CiAgICAgIHdhcm5pbmcoIlcwMjQiLCB0LCB0LmlkKTsKICAgICAgcmVzID0gZmFsc2U7CiAgICB9CgogICAgaWYgKHQuaWRlbnRpZmllciAmJiAhcmVzICYmIHBlZWsoKS5pZCA9PT0gIjoiKSB7CiAgICAgIGFkdmFuY2UoKTsKICAgICAgYWR2YW5jZSgiOiIpOwoKICAgICAgaGFzT3duU2NvcGUgPSB0cnVlOwogICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCk7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2suYWRkQnJlYWtMYWJlbCh0LnZhbHVlLCB7IHRva2VuOiBzdGF0ZS50b2tlbnMuY3VyciB9KTsKCiAgICAgIGlmICghc3RhdGUudG9rZW5zLm5leHQubGFiZWxsZWQgJiYgc3RhdGUudG9rZW5zLm5leHQudmFsdWUgIT09ICJ7IikgewogICAgICAgIHdhcm5pbmcoIlcwMjgiLCBzdGF0ZS50b2tlbnMubmV4dCwgdC52YWx1ZSwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICB9CgogICAgICBzdGF0ZS50b2tlbnMubmV4dC5sYWJlbCA9IHQudmFsdWU7CiAgICAgIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgIH0KCiAgICBpZiAodC5pZCA9PT0gInsiKSB7CiAgICAgIHZhciBpc2Nhc2UgPSAoc3RhdGUuZnVuY3RbIih2ZXJiKSJdID09PSAiY2FzZSIgJiYgc3RhdGUudG9rZW5zLmN1cnIudmFsdWUgPT09ICI6Iik7CiAgICAgIGJsb2NrKHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgaXNjYXNlKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHIgPSBleHByZXNzaW9uKDAsIHRydWUpOwoKICAgIGlmIChyICYmICEoci5pZGVudGlmaWVyICYmIHIudmFsdWUgPT09ICJmdW5jdGlvbiIpICYmCiAgICAgICAgIShyLnR5cGUgPT09ICIocHVuY3R1YXRvcikiICYmIHIubGVmdCAmJgogICAgICAgICAgci5sZWZ0LmlkZW50aWZpZXIgJiYgci5sZWZ0LnZhbHVlID09PSAiZnVuY3Rpb24iKSkgewogICAgICBpZiAoIXN0YXRlLmlzU3RyaWN0KCkgJiYKICAgICAgICAgIHN0YXRlLm9wdGlvbi5zdHJpY3QgPT09ICJnbG9iYWwiKSB7CiAgICAgICAgd2FybmluZygiRTAwNyIpOwogICAgICB9CiAgICB9CgogICAgaWYgKCF0LmJsb2NrKSB7CiAgICAgIGlmICghc3RhdGUub3B0aW9uLmV4cHIgJiYgKCFyIHx8ICFyLmV4cHMpKSB7CiAgICAgICAgd2FybmluZygiVzAzMCIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS5vcHRpb24ubm9uZXcgJiYgciAmJiByLmxlZnQgJiYgci5pZCA9PT0gIigiICYmIHIubGVmdC5pZCA9PT0gIm5ldyIpIHsKICAgICAgICB3YXJuaW5nKCJXMDMxIiwgdCk7CiAgICAgIH0KICAgICAgcGFyc2VGaW5hbFNlbWljb2xvbigpOwogICAgfQoKICAgIGluZGVudCA9IGk7CiAgICBpZiAoaGFzT3duU2NvcGUpIHsKICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS51bnN0YWNrKCk7CiAgICB9CiAgICByZXR1cm4gcjsKICB9CgoKICBmdW5jdGlvbiBzdGF0ZW1lbnRzKCkgewogICAgdmFyIGEgPSBbXSwgcDsKCiAgICB3aGlsZSAoIXN0YXRlLnRva2Vucy5uZXh0LnJlYWNoICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKGVuZCkiKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIjsiKSB7CiAgICAgICAgcCA9IHBlZWsoKTsKCiAgICAgICAgaWYgKCFwIHx8IChwLmlkICE9PSAiKCIgJiYgcC5pZCAhPT0gIlsiKSkgewogICAgICAgICAgd2FybmluZygiVzAzMiIpOwogICAgICAgIH0KCiAgICAgICAgYWR2YW5jZSgiOyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGEucHVzaChzdGF0ZW1lbnQoKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhOwogIH0KICBmdW5jdGlvbiBkaXJlY3RpdmVzKCkgewogICAgdmFyIGksIHAsIHBuOwoKICAgIHdoaWxlIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIihzdHJpbmcpIikgewogICAgICBwID0gcGVlaygwKTsKICAgICAgaWYgKHAuaWQgPT09ICIoZW5kbGluZSkiKSB7CiAgICAgICAgaSA9IDE7CiAgICAgICAgZG8gewogICAgICAgICAgcG4gPSBwZWVrKGkrKyk7CiAgICAgICAgfSB3aGlsZSAocG4uaWQgPT09ICIoZW5kbGluZSkiKTsKICAgICAgICBpZiAocG4uaWQgPT09ICI7IikgewogICAgICAgICAgcCA9IHBuOwogICAgICAgIH0gZWxzZSBpZiAocG4udmFsdWUgPT09ICJbIiB8fCBwbi52YWx1ZSA9PT0gIi4iKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZS5vcHRpb24uYXNpIHx8IHBuLnZhbHVlID09PSAiKCIpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwMzMiLCBzdGF0ZS50b2tlbnMubmV4dCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHAuaWQgPT09ICIuIiB8fCBwLmlkID09PSAiWyIpIHsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChwLmlkICE9PSAiOyIpIHsKICAgICAgICB3YXJuaW5nKCJXMDMzIiwgcCk7CiAgICAgIH0KCiAgICAgIGFkdmFuY2UoKTsKICAgICAgdmFyIGRpcmVjdGl2ZSA9IHN0YXRlLnRva2Vucy5jdXJyLnZhbHVlOwogICAgICBpZiAoc3RhdGUuZGlyZWN0aXZlW2RpcmVjdGl2ZV0gfHwKICAgICAgICAgIChkaXJlY3RpdmUgPT09ICJ1c2Ugc3RyaWN0IiAmJiBzdGF0ZS5vcHRpb24uc3RyaWN0ID09PSAiaW1wbGllZCIpKSB7CiAgICAgICAgd2FybmluZygiVzAzNCIsIHN0YXRlLnRva2Vucy5jdXJyLCBkaXJlY3RpdmUpOwogICAgICB9CiAgICAgIHN0YXRlLmRpcmVjdGl2ZVtkaXJlY3RpdmVdID0gdHJ1ZTsKCiAgICAgIGlmIChwLmlkID09PSAiOyIpIHsKICAgICAgICBhZHZhbmNlKCI7Iik7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoc3RhdGUuaXNTdHJpY3QoKSkgewogICAgICBpZiAoIXN0YXRlLm9wdGlvblsiKGV4cGxpY2l0TmV3Y2FwKSJdKSB7CiAgICAgICAgc3RhdGUub3B0aW9uLm5ld2NhcCA9IHRydWU7CiAgICAgIH0KICAgICAgc3RhdGUub3B0aW9uLnVuZGVmID0gdHJ1ZTsKICAgIH0KICB9CiAgZnVuY3Rpb24gYmxvY2sob3JkaW5hcnksIHN0bXQsIGlzZnVuYywgaXNmYXRhcnJvdywgaXNjYXNlKSB7CiAgICB2YXIgYSwKICAgICAgYiA9IGluYmxvY2ssCiAgICAgIG9sZF9pbmRlbnQgPSBpbmRlbnQsCiAgICAgIG0sCiAgICAgIHQsCiAgICAgIGxpbmUsCiAgICAgIGQ7CgogICAgaW5ibG9jayA9IG9yZGluYXJ5OwoKICAgIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKCiAgICB2YXIgbWV0cmljcyA9IHN0YXRlLmZ1bmN0WyIobWV0cmljcykiXTsKICAgIG1ldHJpY3MubmVzdGVkQmxvY2tEZXB0aCArPSAxOwogICAgbWV0cmljcy52ZXJpZnlNYXhOZXN0ZWRCbG9ja0RlcHRoUGVyRnVuY3Rpb24oKTsKCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJ7IikgewogICAgICBhZHZhbmNlKCJ7Iik7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soKTsKCiAgICAgIGxpbmUgPSBzdGF0ZS50b2tlbnMuY3Vyci5saW5lOwogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICJ9IikgewogICAgICAgIGluZGVudCArPSBzdGF0ZS5vcHRpb24uaW5kZW50OwogICAgICAgIHdoaWxlICghb3JkaW5hcnkgJiYgc3RhdGUudG9rZW5zLm5leHQuZnJvbSA+IGluZGVudCkgewogICAgICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNmdW5jKSB7CiAgICAgICAgICBtID0ge307CiAgICAgICAgICBmb3IgKGQgaW4gc3RhdGUuZGlyZWN0aXZlKSB7CiAgICAgICAgICAgIGlmIChfLmhhcyhzdGF0ZS5kaXJlY3RpdmUsIGQpKSB7CiAgICAgICAgICAgICAgbVtkXSA9IHN0YXRlLmRpcmVjdGl2ZVtkXTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZGlyZWN0aXZlcygpOwoKICAgICAgICAgIGlmIChzdGF0ZS5vcHRpb24uc3RyaWN0ICYmIHN0YXRlLmZ1bmN0WyIoY29udGV4dCkiXVsiKGdsb2JhbCkiXSkgewogICAgICAgICAgICBpZiAoIW1bInVzZSBzdHJpY3QiXSAmJiAhc3RhdGUuaXNTdHJpY3QoKSkgewogICAgICAgICAgICAgIHdhcm5pbmcoIkUwMDciKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYSA9IHN0YXRlbWVudHMoKTsKCiAgICAgICAgbWV0cmljcy5zdGF0ZW1lbnRDb3VudCArPSBhLmxlbmd0aDsKCiAgICAgICAgaW5kZW50IC09IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgIH0KCiAgICAgIGFkdmFuY2UoIn0iLCB0KTsKCiAgICAgIGlmIChpc2Z1bmMpIHsKICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnZhbGlkYXRlUGFyYW1zKCk7CiAgICAgICAgaWYgKG0pIHsKICAgICAgICAgIHN0YXRlLmRpcmVjdGl2ZSA9IG07CiAgICAgICAgfQogICAgICB9CgogICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKTsKCiAgICAgIGluZGVudCA9IG9sZF9pbmRlbnQ7CiAgICB9IGVsc2UgaWYgKCFvcmRpbmFyeSkgewogICAgICBpZiAoaXNmdW5jKSB7CiAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygpOwoKICAgICAgICBtID0ge307CiAgICAgICAgaWYgKHN0bXQgJiYgIWlzZmF0YXJyb3cgJiYgIXN0YXRlLmluTW96KCkpIHsKICAgICAgICAgIGVycm9yKCJXMTE4Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJmdW5jdGlvbiBjbG9zdXJlIGV4cHJlc3Npb25zIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXN0bXQpIHsKICAgICAgICAgIGZvciAoZCBpbiBzdGF0ZS5kaXJlY3RpdmUpIHsKICAgICAgICAgICAgaWYgKF8uaGFzKHN0YXRlLmRpcmVjdGl2ZSwgZCkpIHsKICAgICAgICAgICAgICBtW2RdID0gc3RhdGUuZGlyZWN0aXZlW2RdOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGV4cHJlc3Npb24oMTApOwoKICAgICAgICBpZiAoc3RhdGUub3B0aW9uLnN0cmljdCAmJiBzdGF0ZS5mdW5jdFsiKGNvbnRleHQpIl1bIihnbG9iYWwpIl0pIHsKICAgICAgICAgIGlmICghbVsidXNlIHN0cmljdCJdICYmICFzdGF0ZS5pc1N0cmljdCgpKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIkUwMDciKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpOwogICAgICB9IGVsc2UgewogICAgICAgIGVycm9yKCJFMDIxIiwgc3RhdGUudG9rZW5zLm5leHQsICJ7Iiwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzdGF0ZS5mdW5jdFsiKG5vYmxvY2tzY29wZWR2YXIpIl0gPSBzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gImZvciI7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soKTsKCiAgICAgIGlmICghc3RtdCB8fCBzdGF0ZS5vcHRpb24uY3VybHkpIHsKICAgICAgICB3YXJuaW5nKCJXMTE2Iiwgc3RhdGUudG9rZW5zLm5leHQsICJ7Iiwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICB9CgogICAgICBzdGF0ZS50b2tlbnMubmV4dC5pbkJyYWNlbGVzc0Jsb2NrID0gdHJ1ZTsKICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgIGEgPSBbc3RhdGVtZW50KCldOwogICAgICBpbmRlbnQgLT0gc3RhdGUub3B0aW9uLmluZGVudDsKCiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpOwogICAgICBkZWxldGUgc3RhdGUuZnVuY3RbIihub2Jsb2Nrc2NvcGVkdmFyKSJdOwogICAgfQogICAgc3dpdGNoIChzdGF0ZS5mdW5jdFsiKHZlcmIpIl0pIHsKICAgIGNhc2UgImJyZWFrIjoKICAgIGNhc2UgImNvbnRpbnVlIjoKICAgIGNhc2UgInJldHVybiI6CiAgICBjYXNlICJ0aHJvdyI6CiAgICAgIGlmIChpc2Nhc2UpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgZGVmYXVsdDoKICAgICAgc3RhdGUuZnVuY3RbIih2ZXJiKSJdID0gbnVsbDsKICAgIH0KCiAgICBpbmJsb2NrID0gYjsKICAgIGlmIChvcmRpbmFyeSAmJiBzdGF0ZS5vcHRpb24ubm9lbXB0eSAmJiAoIWEgfHwgYS5sZW5ndGggPT09IDApKSB7CiAgICAgIHdhcm5pbmcoIlcwMzUiLCBzdGF0ZS50b2tlbnMucHJldik7CiAgICB9CiAgICBtZXRyaWNzLm5lc3RlZEJsb2NrRGVwdGggLT0gMTsKICAgIHJldHVybiBhOwogIH0KCgogIGZ1bmN0aW9uIGNvdW50TWVtYmVyKG0pIHsKICAgIGlmIChtZW1iZXJzT25seSAmJiB0eXBlb2YgbWVtYmVyc09ubHlbbV0gIT09ICJib29sZWFuIikgewogICAgICB3YXJuaW5nKCJXMDM2Iiwgc3RhdGUudG9rZW5zLmN1cnIsIG0pOwogICAgfQogICAgaWYgKHR5cGVvZiBtZW1iZXJbbV0gPT09ICJudW1iZXIiKSB7CiAgICAgIG1lbWJlclttXSArPSAxOwogICAgfSBlbHNlIHsKICAgICAgbWVtYmVyW21dID0gMTsKICAgIH0KICB9CgogIHR5cGUoIihudW1iZXIpIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9KTsKCiAgdHlwZSgiKHN0cmluZykiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzOwogIH0pOwoKICBzdGF0ZS5zeW50YXhbIihpZGVudGlmaWVyKSJdID0gewogICAgdHlwZTogIihpZGVudGlmaWVyKSIsCiAgICBsYnA6IDAsCiAgICBpZGVudGlmaWVyOiB0cnVlLAoKICAgIG51ZDogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB2ID0gdGhpcy52YWx1ZTsKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiPT4iKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KCiAgICAgIGlmICghc3RhdGUuZnVuY3RbIihjb21wYXJyYXkpIl0uY2hlY2sodikpIHsKICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLnVzZSh2LCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9LAoKICAgIGxlZDogZnVuY3Rpb24oKSB7CiAgICAgIGVycm9yKCJFMDMzIiwgc3RhdGUudG9rZW5zLm5leHQsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgIH0KICB9OwoKICB2YXIgYmFzZVRlbXBsYXRlU3ludGF4ID0gewogICAgbGJwOiAwLAogICAgaWRlbnRpZmllcjogZmFsc2UsCiAgICB0ZW1wbGF0ZTogdHJ1ZSwKICB9OwogIHN0YXRlLnN5bnRheFsiKHRlbXBsYXRlKSJdID0gXy5leHRlbmQoewogICAgdHlwZTogIih0ZW1wbGF0ZSkiLAogICAgbnVkOiBkb1RlbXBsYXRlTGl0ZXJhbCwKICAgIGxlZDogZG9UZW1wbGF0ZUxpdGVyYWwsCiAgICBub1N1YnN0OiBmYWxzZQogIH0sIGJhc2VUZW1wbGF0ZVN5bnRheCk7CgogIHN0YXRlLnN5bnRheFsiKHRlbXBsYXRlIG1pZGRsZSkiXSA9IF8uZXh0ZW5kKHsKICAgIHR5cGU6ICIodGVtcGxhdGUgbWlkZGxlKSIsCiAgICBtaWRkbGU6IHRydWUsCiAgICBub1N1YnN0OiBmYWxzZQogIH0sIGJhc2VUZW1wbGF0ZVN5bnRheCk7CgogIHN0YXRlLnN5bnRheFsiKHRlbXBsYXRlIHRhaWwpIl0gPSBfLmV4dGVuZCh7CiAgICB0eXBlOiAiKHRlbXBsYXRlIHRhaWwpIiwKICAgIHRhaWw6IHRydWUsCiAgICBub1N1YnN0OiBmYWxzZQogIH0sIGJhc2VUZW1wbGF0ZVN5bnRheCk7CgogIHN0YXRlLnN5bnRheFsiKG5vIHN1YnN0IHRlbXBsYXRlKSJdID0gXy5leHRlbmQoewogICAgdHlwZTogIih0ZW1wbGF0ZSkiLAogICAgbnVkOiBkb1RlbXBsYXRlTGl0ZXJhbCwKICAgIGxlZDogZG9UZW1wbGF0ZUxpdGVyYWwsCiAgICBub1N1YnN0OiB0cnVlLAogICAgdGFpbDogdHJ1ZSAvLyBtYXJrIGFzIHRhaWwsIHNpbmNlIGl0J3MgYWx3YXlzIHRoZSBsYXN0IGNvbXBvbmVudAogIH0sIGJhc2VUZW1wbGF0ZVN5bnRheCk7CgogIHR5cGUoIihyZWdleHApIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9KTsKCiAgZGVsaW0oIihlbmRsaW5lKSIpOwogIGRlbGltKCIoYmVnaW4pIik7CiAgZGVsaW0oIihlbmQpIikucmVhY2ggPSB0cnVlOwogIGRlbGltKCIoZXJyb3IpIikucmVhY2ggPSB0cnVlOwogIGRlbGltKCJ9IikucmVhY2ggPSB0cnVlOwogIGRlbGltKCIpIik7CiAgZGVsaW0oIl0iKTsKICBkZWxpbSgiXCIiKS5yZWFjaCA9IHRydWU7CiAgZGVsaW0oIiciKS5yZWFjaCA9IHRydWU7CiAgZGVsaW0oIjsiKTsKICBkZWxpbSgiOiIpLnJlYWNoID0gdHJ1ZTsKICBkZWxpbSgiIyIpOwoKICByZXNlcnZlKCJlbHNlIik7CiAgcmVzZXJ2ZSgiY2FzZSIpLnJlYWNoID0gdHJ1ZTsKICByZXNlcnZlKCJjYXRjaCIpOwogIHJlc2VydmUoImRlZmF1bHQiKS5yZWFjaCA9IHRydWU7CiAgcmVzZXJ2ZSgiZmluYWxseSIpOwogIHJlc2VydmV2YXIoImFyZ3VtZW50cyIsIGZ1bmN0aW9uKHgpIHsKICAgIGlmIChzdGF0ZS5pc1N0cmljdCgpICYmIHN0YXRlLmZ1bmN0WyIoZ2xvYmFsKSJdKSB7CiAgICAgIHdhcm5pbmcoIkUwMDgiLCB4KTsKICAgIH0KICB9KTsKICByZXNlcnZldmFyKCJldmFsIik7CiAgcmVzZXJ2ZXZhcigiZmFsc2UiKTsKICByZXNlcnZldmFyKCJJbmZpbml0eSIpOwogIHJlc2VydmV2YXIoIm51bGwiKTsKICByZXNlcnZldmFyKCJ0aGlzIiwgZnVuY3Rpb24oeCkgewogICAgaWYgKHN0YXRlLmlzU3RyaWN0KCkgJiYgIWlzTWV0aG9kKCkgJiYKICAgICAgICAhc3RhdGUub3B0aW9uLnZhbGlkdGhpcyAmJiAoKHN0YXRlLmZ1bmN0WyIoc3RhdGVtZW50KSJdICYmCiAgICAgICAgc3RhdGUuZnVuY3RbIihuYW1lKSJdLmNoYXJBdCgwKSA+ICJaIikgfHwgc3RhdGUuZnVuY3RbIihnbG9iYWwpIl0pKSB7CiAgICAgIHdhcm5pbmcoIlcwNDAiLCB4KTsKICAgIH0KICB9KTsKICByZXNlcnZldmFyKCJ0cnVlIik7CiAgcmVzZXJ2ZXZhcigidW5kZWZpbmVkIik7CgogIGFzc2lnbm9wKCI9IiwgImFzc2lnbiIsIDIwKTsKICBhc3NpZ25vcCgiKz0iLCAiYXNzaWduYWRkIiwgMjApOwogIGFzc2lnbm9wKCItPSIsICJhc3NpZ25zdWIiLCAyMCk7CiAgYXNzaWdub3AoIio9IiwgImFzc2lnbm11bHQiLCAyMCk7CiAgYXNzaWdub3AoIi89IiwgImFzc2lnbmRpdiIsIDIwKS5udWQgPSBmdW5jdGlvbigpIHsKICAgIGVycm9yKCJFMDE0Iik7CiAgfTsKICBhc3NpZ25vcCgiJT0iLCAiYXNzaWdubW9kIiwgMjApOwoKICBiaXR3aXNlYXNzaWdub3AoIiY9Iik7CiAgYml0d2lzZWFzc2lnbm9wKCJ8PSIpOwogIGJpdHdpc2Vhc3NpZ25vcCgiXj0iKTsKICBiaXR3aXNlYXNzaWdub3AoIjw8PSIpOwogIGJpdHdpc2Vhc3NpZ25vcCgiPj49Iik7CiAgYml0d2lzZWFzc2lnbm9wKCI+Pj49Iik7CiAgaW5maXgoIiwiLCBmdW5jdGlvbihsZWZ0LCB0aGF0KSB7CiAgICB2YXIgZXhwcjsKICAgIHRoYXQuZXhwcnMgPSBbbGVmdF07CgogICAgaWYgKHN0YXRlLm9wdGlvbi5ub2NvbW1hKSB7CiAgICAgIHdhcm5pbmcoIlcxMjciKTsKICAgIH0KCiAgICBpZiAoIWNvbW1hKHsgcGVlazogdHJ1ZSB9KSkgewogICAgICByZXR1cm4gdGhhdDsKICAgIH0KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmICghKGV4cHIgPSBleHByZXNzaW9uKDEwKSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0aGF0LmV4cHJzLnB1c2goZXhwcik7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSAhPT0gIiwiIHx8ICFjb21tYSgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGF0OwogIH0sIDEwLCB0cnVlKTsKCiAgaW5maXgoIj8iLCBmdW5jdGlvbihsZWZ0LCB0aGF0KSB7CiAgICBpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpOwogICAgdGhhdC5sZWZ0ID0gbGVmdDsKICAgIHRoYXQucmlnaHQgPSBleHByZXNzaW9uKDEwKTsKICAgIGFkdmFuY2UoIjoiKTsKICAgIHRoYXRbImVsc2UiXSA9IGV4cHJlc3Npb24oMTApOwogICAgcmV0dXJuIHRoYXQ7CiAgfSwgMzApOwoKICB2YXIgb3JQcmVjZW5kZW5jZSA9IDQwOwogIGluZml4KCJ8fCIsIGZ1bmN0aW9uKGxlZnQsIHRoYXQpIHsKICAgIGluY3JlYXNlQ29tcGxleGl0eUNvdW50KCk7CiAgICB0aGF0LmxlZnQgPSBsZWZ0OwogICAgdGhhdC5yaWdodCA9IGV4cHJlc3Npb24ob3JQcmVjZW5kZW5jZSk7CiAgICByZXR1cm4gdGhhdDsKICB9LCBvclByZWNlbmRlbmNlKTsKICBpbmZpeCgiJiYiLCAiYW5kIiwgNTApOwogIGJpdHdpc2UoInwiLCAiYml0b3IiLCA3MCk7CiAgYml0d2lzZSgiXiIsICJiaXR4b3IiLCA4MCk7CiAgYml0d2lzZSgiJiIsICJiaXRhbmQiLCA5MCk7CiAgcmVsYXRpb24oIj09IiwgZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKICAgIHZhciBlcW51bGwgPSBzdGF0ZS5vcHRpb24uZXFudWxsICYmCiAgICAgICgobGVmdCAmJiBsZWZ0LnZhbHVlKSA9PT0gIm51bGwiIHx8IChyaWdodCAmJiByaWdodC52YWx1ZSkgPT09ICJudWxsIik7CgogICAgc3dpdGNoICh0cnVlKSB7CiAgICAgIGNhc2UgIWVxbnVsbCAmJiBzdGF0ZS5vcHRpb24uZXFlcWVxOgogICAgICAgIHRoaXMuZnJvbSA9IHRoaXMuY2hhcmFjdGVyOwogICAgICAgIHdhcm5pbmcoIlcxMTYiLCB0aGlzLCAiPT09IiwgIj09Iik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaXNQb29yUmVsYXRpb24obGVmdCk6CiAgICAgICAgd2FybmluZygiVzA0MSIsIHRoaXMsICI9PT0iLCBsZWZ0LnZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpc1Bvb3JSZWxhdGlvbihyaWdodCk6CiAgICAgICAgd2FybmluZygiVzA0MSIsIHRoaXMsICI9PT0iLCByaWdodC52YWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaXNUeXBvVHlwZW9mKHJpZ2h0LCBsZWZ0LCBzdGF0ZSk6CiAgICAgICAgd2FybmluZygiVzEyMiIsIHRoaXMsIHJpZ2h0LnZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpc1R5cG9UeXBlb2YobGVmdCwgcmlnaHQsIHN0YXRlKToKICAgICAgICB3YXJuaW5nKCJXMTIyIiwgdGhpcywgbGVmdC52YWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgcmVsYXRpb24oIj09PSIsIGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7CiAgICBpZiAoaXNUeXBvVHlwZW9mKHJpZ2h0LCBsZWZ0LCBzdGF0ZSkpIHsKICAgICAgd2FybmluZygiVzEyMiIsIHRoaXMsIHJpZ2h0LnZhbHVlKTsKICAgIH0gZWxzZSBpZiAoaXNUeXBvVHlwZW9mKGxlZnQsIHJpZ2h0LCBzdGF0ZSkpIHsKICAgICAgd2FybmluZygiVzEyMiIsIHRoaXMsIGxlZnQudmFsdWUpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgcmVsYXRpb24oIiE9IiwgZnVuY3Rpb24obGVmdCwgcmlnaHQpIHsKICAgIHZhciBlcW51bGwgPSBzdGF0ZS5vcHRpb24uZXFudWxsICYmCiAgICAgICAgKChsZWZ0ICYmIGxlZnQudmFsdWUpID09PSAibnVsbCIgfHwgKHJpZ2h0ICYmIHJpZ2h0LnZhbHVlKSA9PT0gIm51bGwiKTsKCiAgICBpZiAoIWVxbnVsbCAmJiBzdGF0ZS5vcHRpb24uZXFlcWVxKSB7CiAgICAgIHRoaXMuZnJvbSA9IHRoaXMuY2hhcmFjdGVyOwogICAgICB3YXJuaW5nKCJXMTE2IiwgdGhpcywgIiE9PSIsICIhPSIpOwogICAgfSBlbHNlIGlmIChpc1Bvb3JSZWxhdGlvbihsZWZ0KSkgewogICAgICB3YXJuaW5nKCJXMDQxIiwgdGhpcywgIiE9PSIsIGxlZnQudmFsdWUpOwogICAgfSBlbHNlIGlmIChpc1Bvb3JSZWxhdGlvbihyaWdodCkpIHsKICAgICAgd2FybmluZygiVzA0MSIsIHRoaXMsICIhPT0iLCByaWdodC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGlzVHlwb1R5cGVvZihyaWdodCwgbGVmdCwgc3RhdGUpKSB7CiAgICAgIHdhcm5pbmcoIlcxMjIiLCB0aGlzLCByaWdodC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGlzVHlwb1R5cGVvZihsZWZ0LCByaWdodCwgc3RhdGUpKSB7CiAgICAgIHdhcm5pbmcoIlcxMjIiLCB0aGlzLCBsZWZ0LnZhbHVlKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0pOwogIHJlbGF0aW9uKCIhPT0iLCBmdW5jdGlvbihsZWZ0LCByaWdodCkgewogICAgaWYgKGlzVHlwb1R5cGVvZihyaWdodCwgbGVmdCwgc3RhdGUpKSB7CiAgICAgIHdhcm5pbmcoIlcxMjIiLCB0aGlzLCByaWdodC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGlzVHlwb1R5cGVvZihsZWZ0LCByaWdodCwgc3RhdGUpKSB7CiAgICAgIHdhcm5pbmcoIlcxMjIiLCB0aGlzLCBsZWZ0LnZhbHVlKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0pOwogIHJlbGF0aW9uKCI8Iik7CiAgcmVsYXRpb24oIj4iKTsKICByZWxhdGlvbigiPD0iKTsKICByZWxhdGlvbigiPj0iKTsKICBiaXR3aXNlKCI8PCIsICJzaGlmdGxlZnQiLCAxMjApOwogIGJpdHdpc2UoIj4+IiwgInNoaWZ0cmlnaHQiLCAxMjApOwogIGJpdHdpc2UoIj4+PiIsICJzaGlmdHJpZ2h0dW5zaWduZWQiLCAxMjApOwogIGluZml4KCJpbiIsICJpbiIsIDEyMCk7CiAgaW5maXgoImluc3RhbmNlb2YiLCAiaW5zdGFuY2VvZiIsIDEyMCk7CiAgaW5maXgoIisiLCBmdW5jdGlvbihsZWZ0LCB0aGF0KSB7CiAgICB2YXIgcmlnaHQ7CiAgICB0aGF0LmxlZnQgPSBsZWZ0OwogICAgdGhhdC5yaWdodCA9IHJpZ2h0ID0gZXhwcmVzc2lvbigxMzApOwoKICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaWQgPT09ICIoc3RyaW5nKSIgJiYgcmlnaHQuaWQgPT09ICIoc3RyaW5nKSIpIHsKICAgICAgbGVmdC52YWx1ZSArPSByaWdodC52YWx1ZTsKICAgICAgbGVmdC5jaGFyYWN0ZXIgPSByaWdodC5jaGFyYWN0ZXI7CiAgICAgIGlmICghc3RhdGUub3B0aW9uLnNjcmlwdHVybCAmJiByZWcuamF2YXNjcmlwdFVSTC50ZXN0KGxlZnQudmFsdWUpKSB7CiAgICAgICAgd2FybmluZygiVzA1MCIsIGxlZnQpOwogICAgICB9CiAgICAgIHJldHVybiBsZWZ0OwogICAgfQoKICAgIHJldHVybiB0aGF0OwogIH0sIDEzMCk7CiAgcHJlZml4KCIrIiwgIm51bSIpOwogIHByZWZpeCgiKysrIiwgZnVuY3Rpb24oKSB7CiAgICB3YXJuaW5nKCJXMDA3Iik7CiAgICB0aGlzLmFyaXR5ID0gInVuYXJ5IjsKICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDE1MCk7CiAgICByZXR1cm4gdGhpczsKICB9KTsKICBpbmZpeCgiKysrIiwgZnVuY3Rpb24obGVmdCkgewogICAgd2FybmluZygiVzAwNyIpOwogICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDEzMCk7CiAgICByZXR1cm4gdGhpczsKICB9LCAxMzApOwogIGluZml4KCItIiwgInN1YiIsIDEzMCk7CiAgcHJlZml4KCItIiwgIm5lZyIpOwogIHByZWZpeCgiLS0tIiwgZnVuY3Rpb24oKSB7CiAgICB3YXJuaW5nKCJXMDA2Iik7CiAgICB0aGlzLmFyaXR5ID0gInVuYXJ5IjsKICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDE1MCk7CiAgICByZXR1cm4gdGhpczsKICB9KTsKICBpbmZpeCgiLS0tIiwgZnVuY3Rpb24obGVmdCkgewogICAgd2FybmluZygiVzAwNiIpOwogICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgIHRoaXMucmlnaHQgPSBleHByZXNzaW9uKDEzMCk7CiAgICByZXR1cm4gdGhpczsKICB9LCAxMzApOwogIGluZml4KCIqIiwgIm11bHQiLCAxNDApOwogIGluZml4KCIvIiwgImRpdiIsIDE0MCk7CiAgaW5maXgoIiUiLCAibW9kIiwgMTQwKTsKCiAgc3VmZml4KCIrKyIpOwogIHByZWZpeCgiKysiLCAicHJlaW5jIik7CiAgc3RhdGUuc3ludGF4WyIrKyJdLmV4cHMgPSB0cnVlOwoKICBzdWZmaXgoIi0tIik7CiAgcHJlZml4KCItLSIsICJwcmVkZWMiKTsKICBzdGF0ZS5zeW50YXhbIi0tIl0uZXhwcyA9IHRydWU7CiAgcHJlZml4KCJkZWxldGUiLCBmdW5jdGlvbigpIHsKICAgIHZhciBwID0gZXhwcmVzc2lvbigxMCk7CiAgICBpZiAoIXApIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogICAgaWYgKHAuaWQgIT09ICIuIiAmJiBwLmlkICE9PSAiWyIpIHsKICAgICAgd2FybmluZygiVzA1MSIpOwogICAgfQogICAgdGhpcy5maXJzdCA9IHA7CiAgICBpZiAocC5pZGVudGlmaWVyICYmICFzdGF0ZS5pc1N0cmljdCgpKSB7CiAgICAgIHAuZm9yZ2l2ZVVuZGVmID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0pLmV4cHMgPSB0cnVlOwoKICBwcmVmaXgoIn4iLCBmdW5jdGlvbigpIHsKICAgIGlmIChzdGF0ZS5vcHRpb24uYml0d2lzZSkgewogICAgICB3YXJuaW5nKCJXMDE2IiwgdGhpcywgIn4iKTsKICAgIH0KICAgIHRoaXMuYXJpdHkgPSAidW5hcnkiOwogICAgdGhpcy5yaWdodCA9IGV4cHJlc3Npb24oMTUwKTsKICAgIHJldHVybiB0aGlzOwogIH0pOwoKICBwcmVmaXgoIi4uLiIsIGZ1bmN0aW9uKCkgewogICAgaWYgKCFzdGF0ZS5pbkVTNih0cnVlKSkgewogICAgICB3YXJuaW5nKCJXMTE5IiwgdGhpcywgInNwcmVhZC9yZXN0IG9wZXJhdG9yIiwgIjYiKTsKICAgIH0KICAgIGlmICghc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllciAmJgogICAgICAgIHN0YXRlLnRva2Vucy5uZXh0LnR5cGUgIT09ICIoc3RyaW5nKSIgJiYKICAgICAgICAgICFjaGVja1B1bmN0dWF0b3JzKHN0YXRlLnRva2Vucy5uZXh0LCBbIlsiLCAiKCJdKSkgewoKICAgICAgZXJyb3IoIkUwMzAiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgfQogICAgZXhwcmVzc2lvbigxNTApOwogICAgcmV0dXJuIHRoaXM7CiAgfSk7CgogIHByZWZpeCgiISIsIGZ1bmN0aW9uKCkgewogICAgdGhpcy5hcml0eSA9ICJ1bmFyeSI7CiAgICB0aGlzLnJpZ2h0ID0gZXhwcmVzc2lvbigxNTApOwoKICAgIGlmICghdGhpcy5yaWdodCkgeyAvLyAnIScgZm9sbG93ZWQgYnkgbm90aGluZz8gR2l2ZSB1cC4KICAgICAgcXVpdCgiRTA0MSIsIHRoaXMubGluZSB8fCAwKTsKICAgIH0KCiAgICBpZiAoYmFuZ1t0aGlzLnJpZ2h0LmlkXSA9PT0gdHJ1ZSkgewogICAgICB3YXJuaW5nKCJXMDE4IiwgdGhpcywgIiEiKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0pOwoKICBwcmVmaXgoInR5cGVvZiIsIChmdW5jdGlvbigpIHsKICAgIHZhciBwID0gZXhwcmVzc2lvbigxNTApOwogICAgdGhpcy5maXJzdCA9IHRoaXMucmlnaHQgPSBwOwoKICAgIGlmICghcCkgeyAvLyAndHlwZW9mJyBmb2xsb3dlZCBieSBub3RoaW5nPyBHaXZlIHVwLgogICAgICBxdWl0KCJFMDQxIiwgdGhpcy5saW5lIHx8IDAsIHRoaXMuY2hhcmFjdGVyIHx8IDApOwogICAgfQogICAgaWYgKHAuaWRlbnRpZmllcikgewogICAgICBwLmZvcmdpdmVVbmRlZiA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9KSk7CiAgcHJlZml4KCJuZXciLCBmdW5jdGlvbigpIHsKICAgIHZhciBtcCA9IG1ldGFQcm9wZXJ0eSgidGFyZ2V0IiwgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghc3RhdGUuaW5FUzYodHJ1ZSkpIHsKICAgICAgICB3YXJuaW5nKCJXMTE5Iiwgc3RhdGUudG9rZW5zLnByZXYsICJuZXcudGFyZ2V0IiwgIjYiKTsKICAgICAgfQogICAgICB2YXIgaW5GdW5jdGlvbiwgYyA9IHN0YXRlLmZ1bmN0OwogICAgICB3aGlsZSAoYykgewogICAgICAgIGluRnVuY3Rpb24gPSAhY1siKGdsb2JhbCkiXTsKICAgICAgICBpZiAoIWNbIihhcnJvdykiXSkgeyBicmVhazsgfQogICAgICAgIGMgPSBjWyIoY29udGV4dCkiXTsKICAgICAgfQogICAgICBpZiAoIWluRnVuY3Rpb24pIHsKICAgICAgICB3YXJuaW5nKCJXMTM2Iiwgc3RhdGUudG9rZW5zLnByZXYsICJuZXcudGFyZ2V0Iik7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKG1wKSB7IHJldHVybiBtcDsgfQoKICAgIHZhciBjID0gZXhwcmVzc2lvbigxNTUpLCBpOwogICAgaWYgKGMgJiYgYy5pZCAhPT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoYy5pZGVudGlmaWVyKSB7CiAgICAgICAgY1sibmV3Il0gPSB0cnVlOwogICAgICAgIHN3aXRjaCAoYy52YWx1ZSkgewogICAgICAgIGNhc2UgIk51bWJlciI6CiAgICAgICAgY2FzZSAiU3RyaW5nIjoKICAgICAgICBjYXNlICJCb29sZWFuIjoKICAgICAgICBjYXNlICJNYXRoIjoKICAgICAgICBjYXNlICJKU09OIjoKICAgICAgICAgIHdhcm5pbmcoIlcwNTMiLCBzdGF0ZS50b2tlbnMucHJldiwgYy52YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTeW1ib2wiOgogICAgICAgICAgaWYgKHN0YXRlLmluRVM2KCkpIHsKICAgICAgICAgICAgd2FybmluZygiVzA1MyIsIHN0YXRlLnRva2Vucy5wcmV2LCBjLnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkZ1bmN0aW9uIjoKICAgICAgICAgIGlmICghc3RhdGUub3B0aW9uLmV2aWwpIHsKICAgICAgICAgICAgd2FybmluZygiVzA1NCIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiRGF0ZSI6CiAgICAgICAgY2FzZSAiUmVnRXhwIjoKICAgICAgICBjYXNlICJ0aGlzIjoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoYy5pZCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBpID0gYy52YWx1ZS5zdWJzdHIoMCwgMSk7CiAgICAgICAgICAgIGlmIChzdGF0ZS5vcHRpb24ubmV3Y2FwICYmIChpIDwgIkEiIHx8IGkgPiAiWiIpICYmCiAgICAgICAgICAgICAgIXN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uaXNQcmVkZWZpbmVkKGMudmFsdWUpKSB7CiAgICAgICAgICAgICAgd2FybmluZygiVzA1NSIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoYy5pZCAhPT0gIi4iICYmIGMuaWQgIT09ICJbIiAmJiBjLmlkICE9PSAiKCIpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwNTYiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoIXN0YXRlLm9wdGlvbi5zdXBlcm5ldykKICAgICAgICB3YXJuaW5nKCJXMDU3IiwgdGhpcyk7CiAgICB9CiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIoIiAmJiAhc3RhdGUub3B0aW9uLnN1cGVybmV3KSB7CiAgICAgIHdhcm5pbmcoIlcwNTgiLCBzdGF0ZS50b2tlbnMuY3Vyciwgc3RhdGUudG9rZW5zLmN1cnIudmFsdWUpOwogICAgfQogICAgdGhpcy5maXJzdCA9IHRoaXMucmlnaHQgPSBjOwogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgc3RhdGUuc3ludGF4WyJuZXciXS5leHBzID0gdHJ1ZTsKCiAgcHJlZml4KCJ2b2lkIikuZXhwcyA9IHRydWU7CgogIGluZml4KCIuIiwgZnVuY3Rpb24obGVmdCwgdGhhdCkgewogICAgdmFyIG0gPSBpZGVudGlmaWVyKGZhbHNlLCB0cnVlKTsKCiAgICBpZiAodHlwZW9mIG0gPT09ICJzdHJpbmciKSB7CiAgICAgIGNvdW50TWVtYmVyKG0pOwogICAgfQoKICAgIHRoYXQubGVmdCA9IGxlZnQ7CiAgICB0aGF0LnJpZ2h0ID0gbTsKCiAgICBpZiAobSAmJiBtID09PSAiaGFzT3duUHJvcGVydHkiICYmIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlID09PSAiPSIpIHsKICAgICAgd2FybmluZygiVzAwMSIpOwogICAgfQoKICAgIGlmIChsZWZ0ICYmIGxlZnQudmFsdWUgPT09ICJhcmd1bWVudHMiICYmIChtID09PSAiY2FsbGVlIiB8fCBtID09PSAiY2FsbGVyIikpIHsKICAgICAgaWYgKHN0YXRlLm9wdGlvbi5ub2FyZykKICAgICAgICB3YXJuaW5nKCJXMDU5IiwgbGVmdCwgbSk7CiAgICAgIGVsc2UgaWYgKHN0YXRlLmlzU3RyaWN0KCkpCiAgICAgICAgZXJyb3IoIkUwMDgiKTsKICAgIH0gZWxzZSBpZiAoIXN0YXRlLm9wdGlvbi5ldmlsICYmIGxlZnQgJiYgbGVmdC52YWx1ZSA9PT0gImRvY3VtZW50IiAmJgogICAgICAgIChtID09PSAid3JpdGUiIHx8IG0gPT09ICJ3cml0ZWxuIikpIHsKICAgICAgd2FybmluZygiVzA2MCIsIGxlZnQpOwogICAgfQoKICAgIGlmICghc3RhdGUub3B0aW9uLmV2aWwgJiYgKG0gPT09ICJldmFsIiB8fCBtID09PSAiZXhlY1NjcmlwdCIpKSB7CiAgICAgIGlmIChpc0dsb2JhbEV2YWwobGVmdCwgc3RhdGUpKSB7CiAgICAgICAgd2FybmluZygiVzA2MSIpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRoYXQ7CiAgfSwgMTYwLCB0cnVlKTsKCiAgaW5maXgoIigiLCBmdW5jdGlvbihsZWZ0LCB0aGF0KSB7CiAgICBpZiAoc3RhdGUub3B0aW9uLmltbWVkICYmIGxlZnQgJiYgIWxlZnQuaW1tZWQgJiYgbGVmdC5pZCA9PT0gImZ1bmN0aW9uIikgewogICAgICB3YXJuaW5nKCJXMDYyIik7CiAgICB9CgogICAgdmFyIG4gPSAwOwogICAgdmFyIHAgPSBbXTsKCiAgICBpZiAobGVmdCkgewogICAgICBpZiAobGVmdC50eXBlID09PSAiKGlkZW50aWZpZXIpIikgewogICAgICAgIGlmIChsZWZ0LnZhbHVlLm1hdGNoKC9eW0EtWl0oW0EtWjAtOV8kXSpbYS16XVtBLVphLXowLTlfJF0qKT8kLykpIHsKICAgICAgICAgIGlmICgiQXJyYXkgTnVtYmVyIFN0cmluZyBCb29sZWFuIERhdGUgT2JqZWN0IEVycm9yIFN5bWJvbCIuaW5kZXhPZihsZWZ0LnZhbHVlKSA9PT0gLTEpIHsKICAgICAgICAgICAgaWYgKGxlZnQudmFsdWUgPT09ICJNYXRoIikgewogICAgICAgICAgICAgIHdhcm5pbmcoIlcwNjMiLCBsZWZ0KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5vcHRpb24ubmV3Y2FwKSB7CiAgICAgICAgICAgICAgd2FybmluZygiVzA2NCIsIGxlZnQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKSIpIHsKICAgICAgZm9yICg7OykgewogICAgICAgIHBbcC5sZW5ndGhdID0gZXhwcmVzc2lvbigxMCk7CiAgICAgICAgbiArPSAxOwogICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIiwiKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY29tbWEoKTsKICAgICAgfQogICAgfQoKICAgIGFkdmFuY2UoIikiKTsKCiAgICBpZiAodHlwZW9mIGxlZnQgPT09ICJvYmplY3QiKSB7CiAgICAgIGlmICghc3RhdGUuaW5FUzUoKSAmJiBsZWZ0LnZhbHVlID09PSAicGFyc2VJbnQiICYmIG4gPT09IDEpIHsKICAgICAgICB3YXJuaW5nKCJXMDY1Iiwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgICB9CiAgICAgIGlmICghc3RhdGUub3B0aW9uLmV2aWwpIHsKICAgICAgICBpZiAobGVmdC52YWx1ZSA9PT0gImV2YWwiIHx8IGxlZnQudmFsdWUgPT09ICJGdW5jdGlvbiIgfHwKICAgICAgICAgICAgbGVmdC52YWx1ZSA9PT0gImV4ZWNTY3JpcHQiKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDYxIiwgbGVmdCk7CgogICAgICAgICAgaWYgKHBbMF0gJiYgWzBdLmlkID09PSAiKHN0cmluZykiKSB7CiAgICAgICAgICAgIGFkZEludGVybmFsU3JjKGxlZnQsIHBbMF0udmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAocFswXSAmJiBwWzBdLmlkID09PSAiKHN0cmluZykiICYmCiAgICAgICAgICAgICAobGVmdC52YWx1ZSA9PT0gInNldFRpbWVvdXQiIHx8CiAgICAgICAgICAgIGxlZnQudmFsdWUgPT09ICJzZXRJbnRlcnZhbCIpKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDY2IiwgbGVmdCk7CiAgICAgICAgICBhZGRJbnRlcm5hbFNyYyhsZWZ0LCBwWzBdLnZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKHBbMF0gJiYgcFswXS5pZCA9PT0gIihzdHJpbmcpIiAmJgogICAgICAgICAgICAgbGVmdC52YWx1ZSA9PT0gIi4iICYmCiAgICAgICAgICAgICBsZWZ0LmxlZnQudmFsdWUgPT09ICJ3aW5kb3ciICYmCiAgICAgICAgICAgICAobGVmdC5yaWdodCA9PT0gInNldFRpbWVvdXQiIHx8CiAgICAgICAgICAgIGxlZnQucmlnaHQgPT09ICJzZXRJbnRlcnZhbCIpKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDY2IiwgbGVmdCk7CiAgICAgICAgICBhZGRJbnRlcm5hbFNyYyhsZWZ0LCBwWzBdLnZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFsZWZ0LmlkZW50aWZpZXIgJiYgbGVmdC5pZCAhPT0gIi4iICYmIGxlZnQuaWQgIT09ICJbIiAmJiBsZWZ0LmlkICE9PSAiPT4iICYmCiAgICAgICAgICBsZWZ0LmlkICE9PSAiKCIgJiYgbGVmdC5pZCAhPT0gIiYmIiAmJiBsZWZ0LmlkICE9PSAifHwiICYmIGxlZnQuaWQgIT09ICI/IiAmJgogICAgICAgICAgIShzdGF0ZS5pbkVTNigpICYmIGxlZnRbIihuYW1lKSJdKSkgewogICAgICAgIHdhcm5pbmcoIlcwNjciLCB0aGF0KTsKICAgICAgfQogICAgfQoKICAgIHRoYXQubGVmdCA9IGxlZnQ7CiAgICByZXR1cm4gdGhhdDsKICB9LCAxNTUsIHRydWUpLmV4cHMgPSB0cnVlOwoKICBwcmVmaXgoIigiLCBmdW5jdGlvbigpIHsKICAgIHZhciBwbiA9IHN0YXRlLnRva2Vucy5uZXh0LCBwbjEsIGkgPSAtMTsKICAgIHZhciByZXQsIHRyaWdnZXJGbkV4cHIsIGZpcnN0LCBsYXN0OwogICAgdmFyIHBhcmVucyA9IDE7CiAgICB2YXIgb3BlbmluZyA9IHN0YXRlLnRva2Vucy5jdXJyOwogICAgdmFyIHByZWNlZWRpbmcgPSBzdGF0ZS50b2tlbnMucHJldjsKICAgIHZhciBpc05lY2Vzc2FyeSA9ICFzdGF0ZS5vcHRpb24uc2luZ2xlR3JvdXBzOwoKICAgIGRvIHsKICAgICAgaWYgKHBuLnZhbHVlID09PSAiKCIpIHsKICAgICAgICBwYXJlbnMgKz0gMTsKICAgICAgfSBlbHNlIGlmIChwbi52YWx1ZSA9PT0gIikiKSB7CiAgICAgICAgcGFyZW5zIC09IDE7CiAgICAgIH0KCiAgICAgIGkgKz0gMTsKICAgICAgcG4xID0gcG47CiAgICAgIHBuID0gcGVlayhpKTsKICAgIH0gd2hpbGUgKCEocGFyZW5zID09PSAwICYmIHBuMS52YWx1ZSA9PT0gIikiKSAmJiBwbi52YWx1ZSAhPT0gIjsiICYmIHBuLnR5cGUgIT09ICIoZW5kKSIpOwoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gImZ1bmN0aW9uIikgewogICAgICB0cmlnZ2VyRm5FeHByID0gc3RhdGUudG9rZW5zLm5leHQuaW1tZWQgPSB0cnVlOwogICAgfQogICAgaWYgKHBuLnZhbHVlID09PSAiPT4iKSB7CiAgICAgIHJldHVybiBkb0Z1bmN0aW9uKHsgdHlwZTogImFycm93IiwgcGFyc2VkT3BlbmluZzogdHJ1ZSB9KTsKICAgIH0KCiAgICB2YXIgZXhwcnMgPSBbXTsKCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIpIikgewogICAgICBmb3IgKDs7KSB7CiAgICAgICAgZXhwcnMucHVzaChleHByZXNzaW9uKDEwKSk7CgogICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIiwiKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZS5vcHRpb24ubm9jb21tYSkgewogICAgICAgICAgd2FybmluZygiVzEyNyIpOwogICAgICAgIH0KCiAgICAgICAgY29tbWEoKTsKICAgICAgfQogICAgfQoKICAgIGFkdmFuY2UoIikiLCB0aGlzKTsKICAgIGlmIChzdGF0ZS5vcHRpb24uaW1tZWQgJiYgZXhwcnNbMF0gJiYgZXhwcnNbMF0uaWQgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKCIgJiYKICAgICAgICBzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIi4iICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiWyIpIHsKICAgICAgICB3YXJuaW5nKCJXMDY4IiwgdGhpcyk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIWV4cHJzLmxlbmd0aCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZXhwcnMubGVuZ3RoID4gMSkgewogICAgICByZXQgPSBPYmplY3QuY3JlYXRlKHN0YXRlLnN5bnRheFsiLCJdKTsKICAgICAgcmV0LmV4cHJzID0gZXhwcnM7CgogICAgICBmaXJzdCA9IGV4cHJzWzBdOwogICAgICBsYXN0ID0gZXhwcnNbZXhwcnMubGVuZ3RoIC0gMV07CgogICAgICBpZiAoIWlzTmVjZXNzYXJ5KSB7CiAgICAgICAgaXNOZWNlc3NhcnkgPSBwcmVjZWVkaW5nLmFzc2lnbiB8fCBwcmVjZWVkaW5nLmRlbGltOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXQgPSBmaXJzdCA9IGxhc3QgPSBleHByc1swXTsKCiAgICAgIGlmICghaXNOZWNlc3NhcnkpIHsKICAgICAgICBpc05lY2Vzc2FyeSA9CiAgICAgICAgICAob3BlbmluZy5iZWdpbnNTdG10ICYmIChyZXQuaWQgPT09ICJ7IiB8fCB0cmlnZ2VyRm5FeHByIHx8IGlzRnVuY3RvcihyZXQpKSkgfHwKICAgICAgICAgICh0cmlnZ2VyRm5FeHByICYmCiAgICAgICAgICAgICghaXNFbmRPZkV4cHIoKSB8fCBzdGF0ZS50b2tlbnMucHJldi5pZCAhPT0gIn0iKSkgfHwKICAgICAgICAgIChpc0Z1bmN0b3IocmV0KSAmJiAhaXNFbmRPZkV4cHIoKSkgfHwKICAgICAgICAgIChyZXQuaWQgPT09ICJ7IiAmJiBwcmVjZWVkaW5nLmlkID09PSAiPT4iKSB8fAogICAgICAgICAgKHJldC50eXBlID09PSAiKG51bWJlcikiICYmCiAgICAgICAgICAgIGNoZWNrUHVuY3R1YXRvcihwbiwgIi4iKSAmJiAvXlxkKyQvLnRlc3QocmV0LnZhbHVlKSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocmV0KSB7CiAgICAgIGlmICghaXNOZWNlc3NhcnkgJiYgKGZpcnN0LmxlZnQgfHwgZmlyc3QucmlnaHQgfHwgcmV0LmV4cHJzKSkgewogICAgICAgIGlzTmVjZXNzYXJ5ID0KICAgICAgICAgICghaXNCZWdpbk9mRXhwcihwcmVjZWVkaW5nKSAmJiBmaXJzdC5sYnAgPD0gcHJlY2VlZGluZy5sYnApIHx8CiAgICAgICAgICAoIWlzRW5kT2ZFeHByKCkgJiYgbGFzdC5sYnAgPCBzdGF0ZS50b2tlbnMubmV4dC5sYnApOwogICAgICB9CgogICAgICBpZiAoIWlzTmVjZXNzYXJ5KSB7CiAgICAgICAgd2FybmluZygiVzEyNiIsIG9wZW5pbmcpOwogICAgICB9CgogICAgICByZXQucGFyZW4gPSB0cnVlOwogICAgfQoKICAgIHJldHVybiByZXQ7CiAgfSk7CgogIGFwcGxpY2F0aW9uKCI9PiIpOwoKICBpbmZpeCgiWyIsIGZ1bmN0aW9uKGxlZnQsIHRoYXQpIHsKICAgIHZhciBlID0gZXhwcmVzc2lvbigxMCksIHM7CiAgICBpZiAoZSAmJiBlLnR5cGUgPT09ICIoc3RyaW5nKSIpIHsKICAgICAgaWYgKCFzdGF0ZS5vcHRpb24uZXZpbCAmJiAoZS52YWx1ZSA9PT0gImV2YWwiIHx8IGUudmFsdWUgPT09ICJleGVjU2NyaXB0IikpIHsKICAgICAgICBpZiAoaXNHbG9iYWxFdmFsKGxlZnQsIHN0YXRlKSkgewogICAgICAgICAgd2FybmluZygiVzA2MSIpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY291bnRNZW1iZXIoZS52YWx1ZSk7CiAgICAgIGlmICghc3RhdGUub3B0aW9uLnN1YiAmJiByZWcuaWRlbnRpZmllci50ZXN0KGUudmFsdWUpKSB7CiAgICAgICAgcyA9IHN0YXRlLnN5bnRheFtlLnZhbHVlXTsKICAgICAgICBpZiAoIXMgfHwgIWlzUmVzZXJ2ZWQocykpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwNjkiLCBzdGF0ZS50b2tlbnMucHJldiwgZS52YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhZHZhbmNlKCJdIiwgdGhhdCk7CgogICAgaWYgKGUgJiYgZS52YWx1ZSA9PT0gImhhc093blByb3BlcnR5IiAmJiBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIj0iKSB7CiAgICAgIHdhcm5pbmcoIlcwMDEiKTsKICAgIH0KCiAgICB0aGF0LmxlZnQgPSBsZWZ0OwogICAgdGhhdC5yaWdodCA9IGU7CiAgICByZXR1cm4gdGhhdDsKICB9LCAxNjAsIHRydWUpOwoKICBmdW5jdGlvbiBjb21wcmVoZW5zaXZlQXJyYXlFeHByZXNzaW9uKCkgewogICAgdmFyIHJlcyA9IHt9OwogICAgcmVzLmV4cHMgPSB0cnVlOwogICAgc3RhdGUuZnVuY3RbIihjb21wYXJyYXkpIl0uc3RhY2soKTsKICAgIHZhciByZXZlcnNlZCA9IGZhbHNlOwogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlICE9PSAiZm9yIikgewogICAgICByZXZlcnNlZCA9IHRydWU7CiAgICAgIGlmICghc3RhdGUuaW5Nb3ooKSkgewogICAgICAgIHdhcm5pbmcoIlcxMTYiLCBzdGF0ZS50b2tlbnMubmV4dCwgImZvciIsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgfQogICAgICBzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS5zZXRTdGF0ZSgidXNlIik7CiAgICAgIHJlcy5yaWdodCA9IGV4cHJlc3Npb24oMTApOwogICAgfQoKICAgIGFkdmFuY2UoImZvciIpOwogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlID09PSAiZWFjaCIpIHsKICAgICAgYWR2YW5jZSgiZWFjaCIpOwogICAgICBpZiAoIXN0YXRlLmluTW96KCkpIHsKICAgICAgICB3YXJuaW5nKCJXMTE4Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJmb3IgZWFjaCIpOwogICAgICB9CiAgICB9CiAgICBhZHZhbmNlKCIoIik7CiAgICBzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS5zZXRTdGF0ZSgiZGVmaW5lIik7CiAgICByZXMubGVmdCA9IGV4cHJlc3Npb24oMTMwKTsKICAgIGlmIChfLmNvbnRhaW5zKFsiaW4iLCAib2YiXSwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpKSB7CiAgICAgIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGVycm9yKCJFMDQ1Iiwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgfQogICAgc3RhdGUuZnVuY3RbIihjb21wYXJyYXkpIl0uc2V0U3RhdGUoImdlbmVyYXRlIik7CiAgICBleHByZXNzaW9uKDEwKTsKCiAgICBhZHZhbmNlKCIpIik7CiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICJpZiIpIHsKICAgICAgYWR2YW5jZSgiaWYiKTsKICAgICAgYWR2YW5jZSgiKCIpOwogICAgICBzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS5zZXRTdGF0ZSgiZmlsdGVyIik7CiAgICAgIHJlcy5maWx0ZXIgPSBleHByZXNzaW9uKDEwKTsKICAgICAgYWR2YW5jZSgiKSIpOwogICAgfQoKICAgIGlmICghcmV2ZXJzZWQpIHsKICAgICAgc3RhdGUuZnVuY3RbIihjb21wYXJyYXkpIl0uc2V0U3RhdGUoInVzZSIpOwogICAgICByZXMucmlnaHQgPSBleHByZXNzaW9uKDEwKTsKICAgIH0KCiAgICBhZHZhbmNlKCJdIik7CiAgICBzdGF0ZS5mdW5jdFsiKGNvbXBhcnJheSkiXS51bnN0YWNrKCk7CiAgICByZXR1cm4gcmVzOwogIH0KCiAgcHJlZml4KCJbIiwgZnVuY3Rpb24oKSB7CiAgICB2YXIgYmxvY2t0eXBlID0gbG9va3VwQmxvY2tUeXBlKCk7CiAgICBpZiAoYmxvY2t0eXBlLmlzQ29tcEFycmF5KSB7CiAgICAgIGlmICghc3RhdGUub3B0aW9uLmVzbmV4dCAmJiAhc3RhdGUuaW5Nb3ooKSkgewogICAgICAgIHdhcm5pbmcoIlcxMTgiLCBzdGF0ZS50b2tlbnMuY3VyciwgImFycmF5IGNvbXByZWhlbnNpb24iKTsKICAgICAgfQogICAgICByZXR1cm4gY29tcHJlaGVuc2l2ZUFycmF5RXhwcmVzc2lvbigpOwogICAgfSBlbHNlIGlmIChibG9ja3R5cGUuaXNEZXN0QXNzaWduKSB7CiAgICAgIHRoaXMuZGVzdHJ1Y3RBc3NpZ24gPSBkZXN0cnVjdHVyaW5nUGF0dGVybih7IG9wZW5pbmdQYXJzZWQ6IHRydWUsIGFzc2lnbm1lbnQ6IHRydWUgfSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgdmFyIGIgPSBzdGF0ZS50b2tlbnMuY3Vyci5saW5lICE9PSBzdGFydExpbmUoc3RhdGUudG9rZW5zLm5leHQpOwogICAgdGhpcy5maXJzdCA9IFtdOwogICAgaWYgKGIpIHsKICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5mcm9tID09PSBpbmRlbnQgKyBzdGF0ZS5vcHRpb24uaW5kZW50KSB7CiAgICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgIH0KICAgIH0KICAgIHdoaWxlIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIihlbmQpIikgewogICAgICB3aGlsZSAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIsIikgewogICAgICAgIGlmICghc3RhdGUub3B0aW9uLmVsaXNpb24pIHsKICAgICAgICAgIGlmICghc3RhdGUuaW5FUzUoKSkgewogICAgICAgICAgICB3YXJuaW5nKCJXMDcwIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3YXJuaW5nKCJXMTI4Iik7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBhZHZhbmNlKCIsIik7CiAgICAgICAgICAgIH0gd2hpbGUgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiLCIpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYWR2YW5jZSgiLCIpOwogICAgICB9CgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJdIikgewogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICB0aGlzLmZpcnN0LnB1c2goZXhwcmVzc2lvbigxMCkpOwogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIsIikgewogICAgICAgIGNvbW1hKHsgYWxsb3dUcmFpbGluZzogdHJ1ZSB9KTsKICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJdIiAmJiAhc3RhdGUuaW5FUzUoKSkgewogICAgICAgICAgd2FybmluZygiVzA3MCIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGIpIHsKICAgICAgaW5kZW50IC09IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICB9CiAgICBhZHZhbmNlKCJdIiwgdGhpcyk7CiAgICByZXR1cm4gdGhpczsKICB9KTsKCgogIGZ1bmN0aW9uIGlzTWV0aG9kKCkgewogICAgcmV0dXJuIHN0YXRlLmZ1bmN0WyIoc3RhdGVtZW50KSJdICYmIHN0YXRlLmZ1bmN0WyIoc3RhdGVtZW50KSJdLnR5cGUgPT09ICJjbGFzcyIgfHwKICAgICAgICAgICBzdGF0ZS5mdW5jdFsiKGNvbnRleHQpIl0gJiYgc3RhdGUuZnVuY3RbIihjb250ZXh0KSJdWyIodmVyYikiXSA9PT0gImNsYXNzIjsKICB9CgoKICBmdW5jdGlvbiBpc1Byb3BlcnR5TmFtZSh0b2tlbikgewogICAgcmV0dXJuIHRva2VuLmlkZW50aWZpZXIgfHwgdG9rZW4uaWQgPT09ICIoc3RyaW5nKSIgfHwgdG9rZW4uaWQgPT09ICIobnVtYmVyKSI7CiAgfQoKCiAgZnVuY3Rpb24gcHJvcGVydHlOYW1lKHByZXNlcnZlT3JUb2tlbikgewogICAgdmFyIGlkOwogICAgdmFyIHByZXNlcnZlID0gdHJ1ZTsKICAgIGlmICh0eXBlb2YgcHJlc2VydmVPclRva2VuID09PSAib2JqZWN0IikgewogICAgICBpZCA9IHByZXNlcnZlT3JUb2tlbjsKICAgIH0gZWxzZSB7CiAgICAgIHByZXNlcnZlID0gcHJlc2VydmVPclRva2VuOwogICAgICBpZCA9IG9wdGlvbmFsaWRlbnRpZmllcihmYWxzZSwgdHJ1ZSwgcHJlc2VydmUpOwogICAgfQoKICAgIGlmICghaWQpIHsKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKHN0cmluZykiKSB7CiAgICAgICAgaWQgPSBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZTsKICAgICAgICBpZiAoIXByZXNlcnZlKSB7CiAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKG51bWJlcikiKSB7CiAgICAgICAgaWQgPSBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZS50b1N0cmluZygpOwogICAgICAgIGlmICghcHJlc2VydmUpIHsKICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZW9mIGlkID09PSAib2JqZWN0IikgewogICAgICBpZiAoaWQuaWQgPT09ICIoc3RyaW5nKSIgfHwgaWQuaWQgPT09ICIoaWRlbnRpZmllcikiKSBpZCA9IGlkLnZhbHVlOwogICAgICBlbHNlIGlmIChpZC5pZCA9PT0gIihudW1iZXIpIikgaWQgPSBpZC52YWx1ZS50b1N0cmluZygpOwogICAgfQoKICAgIGlmIChpZCA9PT0gImhhc093blByb3BlcnR5IikgewogICAgICB3YXJuaW5nKCJXMDAxIik7CiAgICB9CgogICAgcmV0dXJuIGlkOwogIH0KICBmdW5jdGlvbiBmdW5jdGlvbnBhcmFtcyhvcHRpb25zKSB7CiAgICB2YXIgbmV4dDsKICAgIHZhciBwYXJhbXNJZHMgPSBbXTsKICAgIHZhciBpZGVudDsKICAgIHZhciB0b2tlbnMgPSBbXTsKICAgIHZhciB0OwogICAgdmFyIHBhc3REZWZhdWx0ID0gZmFsc2U7CiAgICB2YXIgcGFzdFJlc3QgPSBmYWxzZTsKICAgIHZhciBhcml0eSA9IDA7CiAgICB2YXIgbG9uZUFyZyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5sb25lQXJnOwoKICAgIGlmIChsb25lQXJnICYmIGxvbmVBcmcuaWRlbnRpZmllciA9PT0gdHJ1ZSkgewogICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmFkZFBhcmFtKGxvbmVBcmcudmFsdWUsIGxvbmVBcmcpOwogICAgICByZXR1cm4geyBhcml0eTogMSwgcGFyYW1zOiBbIGxvbmVBcmcudmFsdWUgXSB9OwogICAgfQoKICAgIG5leHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKCiAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucGFyc2VkT3BlbmluZykgewogICAgICBhZHZhbmNlKCIoIik7CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKSIpIHsKICAgICAgYWR2YW5jZSgiKSIpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZnVuY3Rpb24gYWRkUGFyYW0oYWRkUGFyYW1BcmdzKSB7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkUGFyYW0uYXBwbHkoc3RhdGUuZnVuY3RbIihzY29wZSkiXSwgYWRkUGFyYW1BcmdzKTsKICAgIH0KCiAgICBmb3IgKDs7KSB7CiAgICAgIGFyaXR5Kys7CiAgICAgIHZhciBjdXJyZW50UGFyYW1zID0gW107CgogICAgICBpZiAoXy5jb250YWlucyhbInsiLCAiWyJdLCBzdGF0ZS50b2tlbnMubmV4dC5pZCkpIHsKICAgICAgICB0b2tlbnMgPSBkZXN0cnVjdHVyaW5nUGF0dGVybigpOwogICAgICAgIGZvciAodCBpbiB0b2tlbnMpIHsKICAgICAgICAgIHQgPSB0b2tlbnNbdF07CiAgICAgICAgICBpZiAodC5pZCkgewogICAgICAgICAgICBwYXJhbXNJZHMucHVzaCh0LmlkKTsKICAgICAgICAgICAgY3VycmVudFBhcmFtcy5wdXNoKFt0LmlkLCB0LnRva2VuXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsICIuLi4iKSkgcGFzdFJlc3QgPSB0cnVlOwogICAgICAgIGlkZW50ID0gaWRlbnRpZmllcih0cnVlKTsKICAgICAgICBpZiAoaWRlbnQpIHsKICAgICAgICAgIHBhcmFtc0lkcy5wdXNoKGlkZW50KTsKICAgICAgICAgIGN1cnJlbnRQYXJhbXMucHVzaChbaWRlbnQsIHN0YXRlLnRva2Vucy5jdXJyXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHdoaWxlICghY2hlY2tQdW5jdHVhdG9ycyhzdGF0ZS50b2tlbnMubmV4dCwgWyIsIiwgIikiXSkpIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHBhc3REZWZhdWx0KSB7CiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiPSIpIHsKICAgICAgICAgIGVycm9yKCJXMTM4Iiwgc3RhdGUudG9rZW5zLmN1cnJlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICI9IikgewogICAgICAgIGlmICghc3RhdGUuaW5FUzYoKSkgewogICAgICAgICAgd2FybmluZygiVzExOSIsIHN0YXRlLnRva2Vucy5uZXh0LCAiZGVmYXVsdCBwYXJhbWV0ZXJzIiwgIjYiKTsKICAgICAgICB9CiAgICAgICAgYWR2YW5jZSgiPSIpOwogICAgICAgIHBhc3REZWZhdWx0ID0gdHJ1ZTsKICAgICAgICBleHByZXNzaW9uKDEwKTsKICAgICAgfQogICAgICBjdXJyZW50UGFyYW1zLmZvckVhY2goYWRkUGFyYW0pOwoKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiLCIpIHsKICAgICAgICBpZiAocGFzdFJlc3QpIHsKICAgICAgICAgIHdhcm5pbmcoIlcxMzEiLCBzdGF0ZS50b2tlbnMubmV4dCk7CiAgICAgICAgfQogICAgICAgIGNvbW1hKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWR2YW5jZSgiKSIsIG5leHQpOwogICAgICAgIHJldHVybiB7IGFyaXR5OiBhcml0eSwgcGFyYW1zOiBwYXJhbXNJZHMgfTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gZnVuY3RvcihuYW1lLCB0b2tlbiwgb3ZlcndyaXRlcykgewogICAgdmFyIGZ1bmN0ID0gewogICAgICAiKG5hbWUpIiAgICAgIDogbmFtZSwKICAgICAgIihicmVha2FnZSkiICA6IDAsCiAgICAgICIobG9vcGFnZSkiICAgOiAwLAogICAgICAiKHRva2VucykiICAgIDoge30sCiAgICAgICIocHJvcGVydGllcykiOiB7fSwKCiAgICAgICIoY2F0Y2gpIiAgICAgOiBmYWxzZSwKICAgICAgIihnbG9iYWwpIiAgICA6IGZhbHNlLAoKICAgICAgIihsaW5lKSIgICAgICA6IG51bGwsCiAgICAgICIoY2hhcmFjdGVyKSIgOiBudWxsLAogICAgICAiKG1ldHJpY3MpIiAgIDogbnVsbCwKICAgICAgIihzdGF0ZW1lbnQpIiA6IG51bGwsCiAgICAgICIoY29udGV4dCkiICAgOiBudWxsLAogICAgICAiKHNjb3BlKSIgICAgIDogbnVsbCwKICAgICAgIihjb21wYXJyYXkpIiA6IG51bGwsCiAgICAgICIoZ2VuZXJhdG9yKSIgOiBudWxsLAogICAgICAiKGFycm93KSIgICAgIDogbnVsbCwKICAgICAgIihwYXJhbXMpIiAgICA6IG51bGwKICAgIH07CgogICAgaWYgKHRva2VuKSB7CiAgICAgIF8uZXh0ZW5kKGZ1bmN0LCB7CiAgICAgICAgIihsaW5lKSIgICAgIDogdG9rZW4ubGluZSwKICAgICAgICAiKGNoYXJhY3RlcikiOiB0b2tlbi5jaGFyYWN0ZXIsCiAgICAgICAgIihtZXRyaWNzKSIgIDogY3JlYXRlTWV0cmljcyh0b2tlbikKICAgICAgfSk7CiAgICB9CgogICAgXy5leHRlbmQoZnVuY3QsIG92ZXJ3cml0ZXMpOwoKICAgIGlmIChmdW5jdFsiKGNvbnRleHQpIl0pIHsKICAgICAgZnVuY3RbIihzY29wZSkiXSA9IGZ1bmN0WyIoY29udGV4dCkiXVsiKHNjb3BlKSJdOwogICAgICBmdW5jdFsiKGNvbXBhcnJheSkiXSAgPSBmdW5jdFsiKGNvbnRleHQpIl1bIihjb21wYXJyYXkpIl07CiAgICB9CgogICAgcmV0dXJuIGZ1bmN0OwogIH0KCiAgZnVuY3Rpb24gaXNGdW5jdG9yKHRva2VuKSB7CiAgICByZXR1cm4gIihzY29wZSkiIGluIHRva2VuOwogIH0KICBmdW5jdGlvbiBoYXNQYXJzZWRDb2RlKGZ1bmN0KSB7CiAgICByZXR1cm4gZnVuY3RbIihnbG9iYWwpIl0gJiYgIWZ1bmN0WyIodmVyYikiXTsKICB9CgogIGZ1bmN0aW9uIGRvVGVtcGxhdGVMaXRlcmFsKGxlZnQpIHsKICAgIHZhciBjdHggPSB0aGlzLmNvbnRleHQ7CiAgICB2YXIgbm9TdWJzdCA9IHRoaXMubm9TdWJzdDsKICAgIHZhciBkZXB0aCA9IHRoaXMuZGVwdGg7CgogICAgaWYgKCFub1N1YnN0KSB7CiAgICAgIHdoaWxlICghZW5kKCkpIHsKICAgICAgICBpZiAoIXN0YXRlLnRva2Vucy5uZXh0LnRlbXBsYXRlIHx8IHN0YXRlLnRva2Vucy5uZXh0LmRlcHRoID4gZGVwdGgpIHsKICAgICAgICAgIGV4cHJlc3Npb24oMCk7IC8vIHNob3VsZCBwcm9iYWJseSBoYXZlIGRpZmZlcmVudCByYnA/CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICBpZDogIih0ZW1wbGF0ZSkiLAogICAgICB0eXBlOiAiKHRlbXBsYXRlKSIsCiAgICAgIHRhZzogbGVmdAogICAgfTsKCiAgICBmdW5jdGlvbiBlbmQoKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMuY3Vyci50ZW1wbGF0ZSAmJiBzdGF0ZS50b2tlbnMuY3Vyci50YWlsICYmCiAgICAgICAgICBzdGF0ZS50b2tlbnMuY3Vyci5jb250ZXh0ID09PSBjdHgpIHJldHVybiB0cnVlOwogICAgICB2YXIgY29tcGxldGUgPSAoc3RhdGUudG9rZW5zLm5leHQudGVtcGxhdGUgJiYgc3RhdGUudG9rZW5zLm5leHQudGFpbCAmJgogICAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5zLm5leHQuY29udGV4dCA9PT0gY3R4KTsKICAgICAgaWYgKGNvbXBsZXRlKSBhZHZhbmNlKCk7CiAgICAgIHJldHVybiBjb21wbGV0ZSB8fCBzdGF0ZS50b2tlbnMubmV4dC5pc1VuY2xvc2VkOwogICAgfQogIH0KICBmdW5jdGlvbiBkb0Z1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHZhciBmLCB0b2tlbiwgbmFtZSwgc3RhdGVtZW50LCBjbGFzc0V4cHJCaW5kaW5nLCBpc0dlbmVyYXRvciwgaXNBcnJvdywgaWdub3JlTG9vcEZ1bmM7CiAgICB2YXIgb2xkT3B0aW9uID0gc3RhdGUub3B0aW9uOwogICAgdmFyIG9sZElnbm9yZWQgPSBzdGF0ZS5pZ25vcmVkOwoKICAgIGlmIChvcHRpb25zKSB7CiAgICAgIG5hbWUgPSBvcHRpb25zLm5hbWU7CiAgICAgIHN0YXRlbWVudCA9IG9wdGlvbnMuc3RhdGVtZW50OwogICAgICBjbGFzc0V4cHJCaW5kaW5nID0gb3B0aW9ucy5jbGFzc0V4cHJCaW5kaW5nOwogICAgICBpc0dlbmVyYXRvciA9IG9wdGlvbnMudHlwZSA9PT0gImdlbmVyYXRvciI7CiAgICAgIGlzQXJyb3cgPSBvcHRpb25zLnR5cGUgPT09ICJhcnJvdyI7CiAgICAgIGlnbm9yZUxvb3BGdW5jID0gb3B0aW9ucy5pZ25vcmVMb29wRnVuYzsKICAgIH0KCiAgICBzdGF0ZS5vcHRpb24gPSBPYmplY3QuY3JlYXRlKHN0YXRlLm9wdGlvbik7CiAgICBzdGF0ZS5pZ25vcmVkID0gT2JqZWN0LmNyZWF0ZShzdGF0ZS5pZ25vcmVkKTsKCiAgICBzdGF0ZS5mdW5jdCA9IGZ1bmN0b3IobmFtZSB8fCBzdGF0ZS5uYW1lU3RhY2suaW5mZXIoKSwgc3RhdGUudG9rZW5zLm5leHQsIHsKICAgICAgIihzdGF0ZW1lbnQpIjogc3RhdGVtZW50LAogICAgICAiKGNvbnRleHQpIjogICBzdGF0ZS5mdW5jdCwKICAgICAgIihhcnJvdykiOiAgICAgaXNBcnJvdywKICAgICAgIihnZW5lcmF0b3IpIjogaXNHZW5lcmF0b3IKICAgIH0pOwoKICAgIGYgPSBzdGF0ZS5mdW5jdDsKICAgIHRva2VuID0gc3RhdGUudG9rZW5zLmN1cnI7CiAgICB0b2tlbi5mdW5jdCA9IHN0YXRlLmZ1bmN0OwoKICAgIGZ1bmN0aW9ucy5wdXNoKHN0YXRlLmZ1bmN0KTsKICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soImZ1bmN0aW9ub3V0ZXIiKTsKICAgIHZhciBpbnRlcm5hbGx5QWNjZXNzaWJsZU5hbWUgPSBuYW1lIHx8IGNsYXNzRXhwckJpbmRpbmc7CiAgICBpZiAoaW50ZXJuYWxseUFjY2Vzc2libGVOYW1lKSB7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2suYWRkKGludGVybmFsbHlBY2Nlc3NpYmxlTmFtZSwKICAgICAgICBjbGFzc0V4cHJCaW5kaW5nID8gImNsYXNzIiA6ICJmdW5jdGlvbiIsIHN0YXRlLnRva2Vucy5jdXJyLCBmYWxzZSk7CiAgICB9CiAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCJmdW5jdGlvbnBhcmFtcyIpOwoKICAgIHZhciBwYXJhbXNJbmZvID0gZnVuY3Rpb25wYXJhbXMob3B0aW9ucyk7CgogICAgaWYgKHBhcmFtc0luZm8pIHsKICAgICAgc3RhdGUuZnVuY3RbIihwYXJhbXMpIl0gPSBwYXJhbXNJbmZvLnBhcmFtczsKICAgICAgc3RhdGUuZnVuY3RbIihtZXRyaWNzKSJdLmFyaXR5ID0gcGFyYW1zSW5mby5hcml0eTsKICAgICAgc3RhdGUuZnVuY3RbIihtZXRyaWNzKSJdLnZlcmlmeU1heFBhcmFtZXRlcnNQZXJGdW5jdGlvbigpOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGUuZnVuY3RbIihtZXRyaWNzKSJdLmFyaXR5ID0gMDsKICAgIH0KCiAgICBpZiAoaXNBcnJvdykgewogICAgICBpZiAoIXN0YXRlLmluRVM2KHRydWUpKSB7CiAgICAgICAgd2FybmluZygiVzExOSIsIHN0YXRlLnRva2Vucy5jdXJyLCAiYXJyb3cgZnVuY3Rpb24gc3ludGF4ICg9PikiLCAiNiIpOwogICAgICB9CgogICAgICBpZiAoIW9wdGlvbnMubG9uZUFyZykgewogICAgICAgIGFkdmFuY2UoIj0+Iik7CiAgICAgIH0KICAgIH0KCiAgICBibG9jayhmYWxzZSwgdHJ1ZSwgdHJ1ZSwgaXNBcnJvdyk7CgogICAgaWYgKCFzdGF0ZS5vcHRpb24ubm95aWVsZCAmJiBpc0dlbmVyYXRvciAmJgogICAgICAgIHN0YXRlLmZ1bmN0WyIoZ2VuZXJhdG9yKSJdICE9PSAieWllbGRlZCIpIHsKICAgICAgd2FybmluZygiVzEyNCIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgIH0KCiAgICBzdGF0ZS5mdW5jdFsiKG1ldHJpY3MpIl0udmVyaWZ5TWF4U3RhdGVtZW50c1BlckZ1bmN0aW9uKCk7CiAgICBzdGF0ZS5mdW5jdFsiKG1ldHJpY3MpIl0udmVyaWZ5TWF4Q29tcGxleGl0eVBlckZ1bmN0aW9uKCk7CiAgICBzdGF0ZS5mdW5jdFsiKHVudXNlZE9wdGlvbikiXSA9IHN0YXRlLm9wdGlvbi51bnVzZWQ7CiAgICBzdGF0ZS5vcHRpb24gPSBvbGRPcHRpb247CiAgICBzdGF0ZS5pZ25vcmVkID0gb2xkSWdub3JlZDsKICAgIHN0YXRlLmZ1bmN0WyIobGFzdCkiXSA9IHN0YXRlLnRva2Vucy5jdXJyLmxpbmU7CiAgICBzdGF0ZS5mdW5jdFsiKGxhc3RjaGFyYWN0ZXIpIl0gPSBzdGF0ZS50b2tlbnMuY3Vyci5jaGFyYWN0ZXI7CiAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKTsgLy8gYWxzbyBkb2VzIHVzYWdlIGFuZCBsYWJlbCBjaGVja3MKICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpOwoKICAgIHN0YXRlLmZ1bmN0ID0gc3RhdGUuZnVuY3RbIihjb250ZXh0KSJdOwoKICAgIGlmICghaWdub3JlTG9vcEZ1bmMgJiYgIXN0YXRlLm9wdGlvbi5sb29wZnVuYyAmJiBzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl0pIHsKICAgICAgaWYgKGZbIihpc0NhcHR1cmluZykiXSkgewogICAgICAgIHdhcm5pbmcoIlcwODMiLCB0b2tlbik7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZjsKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZU1ldHJpY3MoZnVuY3Rpb25TdGFydFRva2VuKSB7CiAgICByZXR1cm4gewogICAgICBzdGF0ZW1lbnRDb3VudDogMCwKICAgICAgbmVzdGVkQmxvY2tEZXB0aDogLTEsCiAgICAgIENvbXBsZXhpdHlDb3VudDogMSwKICAgICAgYXJpdHk6IDAsCgogICAgICB2ZXJpZnlNYXhTdGF0ZW1lbnRzUGVyRnVuY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChzdGF0ZS5vcHRpb24ubWF4c3RhdGVtZW50cyAmJgogICAgICAgICAgdGhpcy5zdGF0ZW1lbnRDb3VudCA+IHN0YXRlLm9wdGlvbi5tYXhzdGF0ZW1lbnRzKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDcxIiwgZnVuY3Rpb25TdGFydFRva2VuLCB0aGlzLnN0YXRlbWVudENvdW50KTsKICAgICAgICB9CiAgICAgIH0sCgogICAgICB2ZXJpZnlNYXhQYXJhbWV0ZXJzUGVyRnVuY3Rpb246IGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChfLmlzTnVtYmVyKHN0YXRlLm9wdGlvbi5tYXhwYXJhbXMpICYmCiAgICAgICAgICB0aGlzLmFyaXR5ID4gc3RhdGUub3B0aW9uLm1heHBhcmFtcykgewogICAgICAgICAgd2FybmluZygiVzA3MiIsIGZ1bmN0aW9uU3RhcnRUb2tlbiwgdGhpcy5hcml0eSk7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgdmVyaWZ5TWF4TmVzdGVkQmxvY2tEZXB0aFBlckZ1bmN0aW9uOiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoc3RhdGUub3B0aW9uLm1heGRlcHRoICYmCiAgICAgICAgICB0aGlzLm5lc3RlZEJsb2NrRGVwdGggPiAwICYmCiAgICAgICAgICB0aGlzLm5lc3RlZEJsb2NrRGVwdGggPT09IHN0YXRlLm9wdGlvbi5tYXhkZXB0aCArIDEpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwNzMiLCBudWxsLCB0aGlzLm5lc3RlZEJsb2NrRGVwdGgpOwogICAgICAgIH0KICAgICAgfSwKCiAgICAgIHZlcmlmeU1heENvbXBsZXhpdHlQZXJGdW5jdGlvbjogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1heCA9IHN0YXRlLm9wdGlvbi5tYXhjb21wbGV4aXR5OwogICAgICAgIHZhciBjYyA9IHRoaXMuQ29tcGxleGl0eUNvdW50OwogICAgICAgIGlmIChtYXggJiYgY2MgPiBtYXgpIHsKICAgICAgICAgIHdhcm5pbmcoIlcwNzQiLCBmdW5jdGlvblN0YXJ0VG9rZW4sIGNjKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpIHsKICAgIHN0YXRlLmZ1bmN0WyIobWV0cmljcykiXS5Db21wbGV4aXR5Q291bnQgKz0gMTsKICB9CgogIGZ1bmN0aW9uIGNoZWNrQ29uZEFzc2lnbm1lbnQoZXhwcikgewogICAgdmFyIGlkLCBwYXJlbjsKICAgIGlmIChleHByKSB7CiAgICAgIGlkID0gZXhwci5pZDsKICAgICAgcGFyZW4gPSBleHByLnBhcmVuOwogICAgICBpZiAoaWQgPT09ICIsIiAmJiAoZXhwciA9IGV4cHIuZXhwcnNbZXhwci5leHBycy5sZW5ndGggLSAxXSkpIHsKICAgICAgICBpZCA9IGV4cHIuaWQ7CiAgICAgICAgcGFyZW4gPSBwYXJlbiB8fCBleHByLnBhcmVuOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGlkKSB7CiAgICBjYXNlICI9IjoKICAgIGNhc2UgIis9IjoKICAgIGNhc2UgIi09IjoKICAgIGNhc2UgIio9IjoKICAgIGNhc2UgIiU9IjoKICAgIGNhc2UgIiY9IjoKICAgIGNhc2UgInw9IjoKICAgIGNhc2UgIl49IjoKICAgIGNhc2UgIi89IjoKICAgICAgaWYgKCFwYXJlbiAmJiAhc3RhdGUub3B0aW9uLmJvc3MpIHsKICAgICAgICB3YXJuaW5nKCJXMDg0Iik7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gY2hlY2tQcm9wZXJ0aWVzKHByb3BzKSB7CiAgICBpZiAoc3RhdGUuaW5FUzUoKSkgewogICAgICBmb3IgKHZhciBuYW1lIGluIHByb3BzKSB7CiAgICAgICAgaWYgKHByb3BzW25hbWVdICYmIHByb3BzW25hbWVdLnNldHRlclRva2VuICYmICFwcm9wc1tuYW1lXS5nZXR0ZXJUb2tlbikgewogICAgICAgICAgd2FybmluZygiVzA3OCIsIHByb3BzW25hbWVdLnNldHRlclRva2VuKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIG1ldGFQcm9wZXJ0eShuYW1lLCBjKSB7CiAgICBpZiAoY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAiLiIpKSB7CiAgICAgIHZhciBsZWZ0ID0gc3RhdGUudG9rZW5zLmN1cnIuaWQ7CiAgICAgIGFkdmFuY2UoIi4iKTsKICAgICAgdmFyIGlkID0gaWRlbnRpZmllcigpOwogICAgICBzdGF0ZS50b2tlbnMuY3Vyci5pc01ldGFQcm9wZXJ0eSA9IHRydWU7CiAgICAgIGlmIChuYW1lICE9PSBpZCkgewogICAgICAgIGVycm9yKCJFMDU3Iiwgc3RhdGUudG9rZW5zLnByZXYsIGxlZnQsIGlkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlLnRva2Vucy5jdXJyOwogICAgfQogIH0KCiAgKGZ1bmN0aW9uKHgpIHsKICAgIHgubnVkID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiLCBmLCBpLCBwLCB0LCBpc0dlbmVyYXRvck1ldGhvZCA9IGZhbHNlLCBuZXh0VmFsOwogICAgICB2YXIgcHJvcHMgPSBPYmplY3QuY3JlYXRlKG51bGwpOyAvLyBBbGwgcHJvcGVydGllcywgaW5jbHVkaW5nIGFjY2Vzc29ycwoKICAgICAgYiA9IHN0YXRlLnRva2Vucy5jdXJyLmxpbmUgIT09IHN0YXJ0TGluZShzdGF0ZS50b2tlbnMubmV4dCk7CiAgICAgIGlmIChiKSB7CiAgICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmZyb20gPT09IGluZGVudCArIHN0YXRlLm9wdGlvbi5pbmRlbnQpIHsKICAgICAgICAgIGluZGVudCArPSBzdGF0ZS5vcHRpb24uaW5kZW50OwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGJsb2NrdHlwZSA9IGxvb2t1cEJsb2NrVHlwZSgpOwogICAgICBpZiAoYmxvY2t0eXBlLmlzRGVzdEFzc2lnbikgewogICAgICAgIHRoaXMuZGVzdHJ1Y3RBc3NpZ24gPSBkZXN0cnVjdHVyaW5nUGF0dGVybih7IG9wZW5pbmdQYXJzZWQ6IHRydWUsIGFzc2lnbm1lbnQ6IHRydWUgfSk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KCiAgICAgIGZvciAoOzspIHsKICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJ9IikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBuZXh0VmFsID0gc3RhdGUudG9rZW5zLm5leHQudmFsdWU7CiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXIgJiYKICAgICAgICAgICAgKHBlZWtJZ25vcmVFT0woKS5pZCA9PT0gIiwiIHx8IHBlZWtJZ25vcmVFT0woKS5pZCA9PT0gIn0iKSkgewogICAgICAgICAgaWYgKCFzdGF0ZS5pbkVTNigpKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcxMDQiLCBzdGF0ZS50b2tlbnMubmV4dCwgIm9iamVjdCBzaG9ydCBub3RhdGlvbiIsICI2Iik7CiAgICAgICAgICB9CiAgICAgICAgICBpID0gcHJvcGVydHlOYW1lKHRydWUpOwogICAgICAgICAgc2F2ZVByb3BlcnR5KHByb3BzLCBpLCBzdGF0ZS50b2tlbnMubmV4dCk7CgogICAgICAgICAgZXhwcmVzc2lvbigxMCk7CgogICAgICAgIH0gZWxzZSBpZiAocGVlaygpLmlkICE9PSAiOiIgJiYgKG5leHRWYWwgPT09ICJnZXQiIHx8IG5leHRWYWwgPT09ICJzZXQiKSkgewogICAgICAgICAgYWR2YW5jZShuZXh0VmFsKTsKCiAgICAgICAgICBpZiAoIXN0YXRlLmluRVM1KCkpIHsKICAgICAgICAgICAgZXJyb3IoIkUwMzQiKTsKICAgICAgICAgIH0KCiAgICAgICAgICBpID0gcHJvcGVydHlOYW1lKCk7CiAgICAgICAgICBpZiAoIWkgJiYgIXN0YXRlLmluRVM2KCkpIHsKICAgICAgICAgICAgZXJyb3IoIkUwMzUiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpKSB7CiAgICAgICAgICAgIHNhdmVBY2Nlc3NvcihuZXh0VmFsLCBwcm9wcywgaSwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgICAgICAgfQoKICAgICAgICAgIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgICAgIGYgPSBkb0Z1bmN0aW9uKCk7CiAgICAgICAgICBwID0gZlsiKHBhcmFtcykiXTsKICAgICAgICAgIGlmIChuZXh0VmFsID09PSAiZ2V0IiAmJiBpICYmIHApIHsKICAgICAgICAgICAgd2FybmluZygiVzA3NiIsIHQsIHBbMF0sIGkpOwogICAgICAgICAgfSBlbHNlIGlmIChuZXh0VmFsID09PSAic2V0IiAmJiBpICYmICghcCB8fCBwLmxlbmd0aCAhPT0gMSkpIHsKICAgICAgICAgICAgd2FybmluZygiVzA3NyIsIHQsIGkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICIqIiAmJiBzdGF0ZS50b2tlbnMubmV4dC50eXBlID09PSAiKHB1bmN0dWF0b3IpIikgewogICAgICAgICAgICBpZiAoIXN0YXRlLmluRVM2KCkpIHsKICAgICAgICAgICAgICB3YXJuaW5nKCJXMTA0Iiwgc3RhdGUudG9rZW5zLm5leHQsICJnZW5lcmF0b3IgZnVuY3Rpb25zIiwgIjYiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZHZhbmNlKCIqIik7CiAgICAgICAgICAgIGlzR2VuZXJhdG9yTWV0aG9kID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlzR2VuZXJhdG9yTWV0aG9kID0gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiWyIpIHsKICAgICAgICAgICAgaSA9IGNvbXB1dGVkUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAgIHN0YXRlLm5hbWVTdGFjay5zZXQoaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZS5uYW1lU3RhY2suc2V0KHN0YXRlLnRva2Vucy5uZXh0KTsKICAgICAgICAgICAgaSA9IHByb3BlcnR5TmFtZSgpOwogICAgICAgICAgICBzYXZlUHJvcGVydHkocHJvcHMsIGksIHN0YXRlLnRva2Vucy5uZXh0KTsKCiAgICAgICAgICAgIGlmICh0eXBlb2YgaSAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIigiKSB7CiAgICAgICAgICAgIGlmICghc3RhdGUuaW5FUzYoKSkgewogICAgICAgICAgICAgIHdhcm5pbmcoIlcxMDQiLCBzdGF0ZS50b2tlbnMuY3VyciwgImNvbmNpc2UgbWV0aG9kcyIsICI2Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9GdW5jdGlvbih7IHR5cGU6IGlzR2VuZXJhdG9yTWV0aG9kID8gImdlbmVyYXRvciIgOiBudWxsIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWR2YW5jZSgiOiIpOwogICAgICAgICAgICBleHByZXNzaW9uKDEwKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvdW50TWVtYmVyKGkpOwoKICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIsIikgewogICAgICAgICAgY29tbWEoeyBhbGxvd1RyYWlsaW5nOiB0cnVlLCBwcm9wZXJ0eTogdHJ1ZSB9KTsKICAgICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIiwiKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwNzAiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAifSIgJiYgIXN0YXRlLmluRVM1KCkpIHsKICAgICAgICAgICAgd2FybmluZygiVzA3MCIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChiKSB7CiAgICAgICAgaW5kZW50IC09IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgIH0KICAgICAgYWR2YW5jZSgifSIsIHRoaXMpOwoKICAgICAgY2hlY2tQcm9wZXJ0aWVzKHByb3BzKTsKCiAgICAgIHJldHVybiB0aGlzOwogICAgfTsKICAgIHguZnVkID0gZnVuY3Rpb24oKSB7CiAgICAgIGVycm9yKCJFMDM2Iiwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgfTsKICB9KGRlbGltKCJ7IikpKTsKCiAgZnVuY3Rpb24gZGVzdHJ1Y3R1cmluZ1BhdHRlcm4ob3B0aW9ucykgewogICAgdmFyIGlzQXNzaWdubWVudCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hc3NpZ25tZW50OwoKICAgIGlmICghc3RhdGUuaW5FUzYoKSkgewogICAgICB3YXJuaW5nKCJXMTA0Iiwgc3RhdGUudG9rZW5zLmN1cnIsCiAgICAgICAgaXNBc3NpZ25tZW50ID8gImRlc3RydWN0dXJpbmcgYXNzaWdubWVudCIgOiAiZGVzdHJ1Y3R1cmluZyBiaW5kaW5nIiwgIjYiKTsKICAgIH0KCiAgICByZXR1cm4gZGVzdHJ1Y3R1cmluZ1BhdHRlcm5SZWN1cnNpdmUob3B0aW9ucyk7CiAgfQoKICBmdW5jdGlvbiBkZXN0cnVjdHVyaW5nUGF0dGVyblJlY3Vyc2l2ZShvcHRpb25zKSB7CiAgICB2YXIgaWRzOwogICAgdmFyIGlkZW50aWZpZXJzID0gW107CiAgICB2YXIgb3BlbmluZ1BhcnNlZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5vcGVuaW5nUGFyc2VkOwogICAgdmFyIGlzQXNzaWdubWVudCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hc3NpZ25tZW50OwogICAgdmFyIHJlY3Vyc2l2ZU9wdGlvbnMgPSBpc0Fzc2lnbm1lbnQgPyB7IGFzc2lnbm1lbnQ6IGlzQXNzaWdubWVudCB9IDogbnVsbDsKICAgIHZhciBmaXJzdFRva2VuID0gb3BlbmluZ1BhcnNlZCA/IHN0YXRlLnRva2Vucy5jdXJyIDogc3RhdGUudG9rZW5zLm5leHQ7CgogICAgdmFyIG5leHRJbm5lckRFID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBpZGVudDsKICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcnMoc3RhdGUudG9rZW5zLm5leHQsIFsiWyIsICJ7Il0pKSB7CiAgICAgICAgaWRzID0gZGVzdHJ1Y3R1cmluZ1BhdHRlcm5SZWN1cnNpdmUocmVjdXJzaXZlT3B0aW9ucyk7CiAgICAgICAgZm9yICh2YXIgaWQgaW4gaWRzKSB7CiAgICAgICAgICBpZCA9IGlkc1tpZF07CiAgICAgICAgICBpZGVudGlmaWVycy5wdXNoKHsgaWQ6IGlkLmlkLCB0b2tlbjogaWQudG9rZW4gfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIiwiKSkgewogICAgICAgIGlkZW50aWZpZXJzLnB1c2goeyBpZDogbnVsbCwgdG9rZW46IHN0YXRlLnRva2Vucy5jdXJyIH0pOwogICAgICB9IGVsc2UgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIigiKSkgewogICAgICAgIGFkdmFuY2UoIigiKTsKICAgICAgICBuZXh0SW5uZXJERSgpOwogICAgICAgIGFkdmFuY2UoIikiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgaXNfcmVzdCA9IGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIi4uLiIpOwoKICAgICAgICBpZiAoaXNBc3NpZ25tZW50KSB7CiAgICAgICAgICB2YXIgaWRlbnRpZmllclRva2VuID0gaXNfcmVzdCA/IHBlZWsoMCkgOiBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgICAgIGlmICghaWRlbnRpZmllclRva2VuLmlkZW50aWZpZXIpIHsKICAgICAgICAgICAgd2FybmluZygiRTAzMCIsIGlkZW50aWZpZXJUb2tlbiwgaWRlbnRpZmllclRva2VuLnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBhc3NpZ25UYXJnZXQgPSBleHByZXNzaW9uKDE1NSk7CiAgICAgICAgICBpZiAoYXNzaWduVGFyZ2V0KSB7CiAgICAgICAgICAgIGNoZWNrTGVmdFNpZGVBc3NpZ24oYXNzaWduVGFyZ2V0KTsKICAgICAgICAgICAgaWYgKGFzc2lnblRhcmdldC5pZGVudGlmaWVyKSB7CiAgICAgICAgICAgICAgaWRlbnQgPSBhc3NpZ25UYXJnZXQudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWRlbnQgPSBpZGVudGlmaWVyKCk7CiAgICAgICAgfQogICAgICAgIGlmIChpZGVudCkgewogICAgICAgICAgaWRlbnRpZmllcnMucHVzaCh7IGlkOiBpZGVudCwgdG9rZW46IHN0YXRlLnRva2Vucy5jdXJyIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaXNfcmVzdDsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdmFyIGFzc2lnbm1lbnRQcm9wZXJ0eSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgaWQ7CiAgICAgIGlmIChjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsICJbIikpIHsKICAgICAgICBhZHZhbmNlKCJbIik7CiAgICAgICAgZXhwcmVzc2lvbigxMCk7CiAgICAgICAgYWR2YW5jZSgiXSIpOwogICAgICAgIGFkdmFuY2UoIjoiKTsKICAgICAgICBuZXh0SW5uZXJERSgpOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKHN0cmluZykiIHx8CiAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIobnVtYmVyKSIpIHsKICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgYWR2YW5jZSgiOiIpOwogICAgICAgIG5leHRJbm5lckRFKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWQgPSBpZGVudGlmaWVyKCk7CiAgICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIjoiKSkgewogICAgICAgICAgYWR2YW5jZSgiOiIpOwogICAgICAgICAgbmV4dElubmVyREUoKTsKICAgICAgICB9IGVsc2UgaWYgKGlkKSB7CiAgICAgICAgICBpZiAoaXNBc3NpZ25tZW50KSB7CiAgICAgICAgICAgIGNoZWNrTGVmdFNpZGVBc3NpZ24oc3RhdGUudG9rZW5zLmN1cnIpOwogICAgICAgICAgfQogICAgICAgICAgaWRlbnRpZmllcnMucHVzaCh7IGlkOiBpZCwgdG9rZW46IHN0YXRlLnRva2Vucy5jdXJyIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGlmIChjaGVja1B1bmN0dWF0b3IoZmlyc3RUb2tlbiwgIlsiKSkgewogICAgICBpZiAoIW9wZW5pbmdQYXJzZWQpIHsKICAgICAgICBhZHZhbmNlKCJbIik7CiAgICAgIH0KICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIl0iKSkgewogICAgICAgIHdhcm5pbmcoIlcxMzciLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgIH0KICAgICAgdmFyIGVsZW1lbnRfYWZ0ZXJfcmVzdCA9IGZhbHNlOwogICAgICB3aGlsZSAoIWNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIl0iKSkgewogICAgICAgIGlmIChuZXh0SW5uZXJERSgpICYmICFlbGVtZW50X2FmdGVyX3Jlc3QgJiYKICAgICAgICAgICAgY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAiLCIpKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMTMwIiwgc3RhdGUudG9rZW5zLm5leHQpOwogICAgICAgICAgZWxlbWVudF9hZnRlcl9yZXN0ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIj0iKSkgewogICAgICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMucHJldiwgIi4uLiIpKSB7CiAgICAgICAgICAgIGFkdmFuY2UoIl0iKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFkdmFuY2UoIj0iKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgd2FybmluZygiVzA4MCIsIHN0YXRlLnRva2Vucy5wcmV2LCBzdGF0ZS50b2tlbnMucHJldi52YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBleHByZXNzaW9uKDEwKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsICJdIikpIHsKICAgICAgICAgIGFkdmFuY2UoIiwiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWR2YW5jZSgiXSIpOwogICAgfSBlbHNlIGlmIChjaGVja1B1bmN0dWF0b3IoZmlyc3RUb2tlbiwgInsiKSkgewoKICAgICAgaWYgKCFvcGVuaW5nUGFyc2VkKSB7CiAgICAgICAgYWR2YW5jZSgieyIpOwogICAgICB9CiAgICAgIGlmIChjaGVja1B1bmN0dWF0b3Ioc3RhdGUudG9rZW5zLm5leHQsICJ9IikpIHsKICAgICAgICB3YXJuaW5nKCJXMTM3Iiwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgICB9CiAgICAgIHdoaWxlICghY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAifSIpKSB7CiAgICAgICAgYXNzaWdubWVudFByb3BlcnR5KCk7CiAgICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIj0iKSkgewogICAgICAgICAgYWR2YW5jZSgiPSIpOwogICAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICB3YXJuaW5nKCJXMDgwIiwgc3RhdGUudG9rZW5zLnByZXYsIHN0YXRlLnRva2Vucy5wcmV2LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGV4cHJlc3Npb24oMTApOwogICAgICAgIH0KICAgICAgICBpZiAoIWNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIn0iKSkgewogICAgICAgICAgYWR2YW5jZSgiLCIpOwogICAgICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIn0iKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgYWR2YW5jZSgifSIpOwogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXJzOwogIH0KCiAgZnVuY3Rpb24gZGVzdHJ1Y3R1cmluZ1BhdHRlcm5NYXRjaCh0b2tlbnMsIHZhbHVlKSB7CiAgICB2YXIgZmlyc3QgPSB2YWx1ZS5maXJzdDsKCiAgICBpZiAoIWZpcnN0KQogICAgICByZXR1cm47CgogICAgXy56aXAodG9rZW5zLCBBcnJheS5pc0FycmF5KGZpcnN0KSA/IGZpcnN0IDogWyBmaXJzdCBdKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbCkgewogICAgICB2YXIgdG9rZW4gPSB2YWxbMF07CiAgICAgIHZhciB2YWx1ZSA9IHZhbFsxXTsKCiAgICAgIGlmICh0b2tlbiAmJiB2YWx1ZSkKICAgICAgICB0b2tlbi5maXJzdCA9IHZhbHVlOwogICAgICBlbHNlIGlmICh0b2tlbiAmJiB0b2tlbi5maXJzdCAmJiAhdmFsdWUpCiAgICAgICAgd2FybmluZygiVzA4MCIsIHRva2VuLmZpcnN0LCB0b2tlbi5maXJzdC52YWx1ZSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGJsb2NrVmFyaWFibGVTdGF0ZW1lbnQodHlwZSwgc3RhdGVtZW50LCBjb250ZXh0KSB7CgogICAgdmFyIHByZWZpeCA9IGNvbnRleHQgJiYgY29udGV4dC5wcmVmaXg7CiAgICB2YXIgaW5leHBvcnQgPSBjb250ZXh0ICYmIGNvbnRleHQuaW5leHBvcnQ7CiAgICB2YXIgaXNMZXQgPSB0eXBlID09PSAibGV0IjsKICAgIHZhciBpc0NvbnN0ID0gdHlwZSA9PT0gImNvbnN0IjsKICAgIHZhciB0b2tlbnMsIGxvbmUsIHZhbHVlLCBsZXRibG9jazsKCiAgICBpZiAoIXN0YXRlLmluRVM2KCkpIHsKICAgICAgd2FybmluZygiVzEwNCIsIHN0YXRlLnRva2Vucy5jdXJyLCB0eXBlLCAiNiIpOwogICAgfQoKICAgIGlmIChpc0xldCAmJiBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIigiKSB7CiAgICAgIGlmICghc3RhdGUuaW5Nb3ooKSkgewogICAgICAgIHdhcm5pbmcoIlcxMTgiLCBzdGF0ZS50b2tlbnMubmV4dCwgImxldCBibG9jayIpOwogICAgICB9CiAgICAgIGFkdmFuY2UoIigiKTsKICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygpOwogICAgICBsZXRibG9jayA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHN0YXRlLmZ1bmN0WyIobm9ibG9ja3Njb3BlZHZhcikiXSkgewogICAgICBlcnJvcigiRTA0OCIsIHN0YXRlLnRva2Vucy5jdXJyLCBpc0NvbnN0ID8gIkNvbnN0IiA6ICJMZXQiKTsKICAgIH0KCiAgICBzdGF0ZW1lbnQuZmlyc3QgPSBbXTsKICAgIGZvciAoOzspIHsKICAgICAgdmFyIG5hbWVzID0gW107CiAgICAgIGlmIChfLmNvbnRhaW5zKFsieyIsICJbIl0sIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSkgewogICAgICAgIHRva2VucyA9IGRlc3RydWN0dXJpbmdQYXR0ZXJuKCk7CiAgICAgICAgbG9uZSA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHRva2VucyA9IFsgeyBpZDogaWRlbnRpZmllcigpLCB0b2tlbjogc3RhdGUudG9rZW5zLmN1cnIgfSBdOwogICAgICAgIGxvbmUgPSB0cnVlOwogICAgICB9CgogICAgICBpZiAoIXByZWZpeCAmJiBpc0NvbnN0ICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiPSIpIHsKICAgICAgICB3YXJuaW5nKCJFMDEyIiwgc3RhdGUudG9rZW5zLmN1cnIsIHN0YXRlLnRva2Vucy5jdXJyLnZhbHVlKTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgdCBpbiB0b2tlbnMpIHsKICAgICAgICBpZiAodG9rZW5zLmhhc093blByb3BlcnR5KHQpKSB7CiAgICAgICAgICB0ID0gdG9rZW5zW3RdOwogICAgICAgICAgaWYgKHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2suaXNHbG9iYWwoKSkgewogICAgICAgICAgICBpZiAocHJlZGVmaW5lZFt0LmlkXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICB3YXJuaW5nKCJXMDc5IiwgdC50b2tlbiwgdC5pZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh0LmlkICYmICFzdGF0ZS5mdW5jdFsiKG5vYmxvY2tzY29wZWR2YXIpIl0pIHsKICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbCh0LmlkLCB7CiAgICAgICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgICAgICB0b2tlbjogdC50b2tlbiB9KTsKICAgICAgICAgICAgbmFtZXMucHVzaCh0LnRva2VuKTsKCiAgICAgICAgICAgIGlmIChsb25lICYmIGluZXhwb3J0KSB7CiAgICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zZXRFeHBvcnRlZCh0LnRva2VuLnZhbHVlLCB0LnRva2VuKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiPSIpIHsKICAgICAgICBhZHZhbmNlKCI9Iik7CiAgICAgICAgaWYgKCFwcmVmaXggJiYgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDgwIiwgc3RhdGUudG9rZW5zLnByZXYsIHN0YXRlLnRva2Vucy5wcmV2LnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFwcmVmaXggJiYgcGVlaygwKS5pZCA9PT0gIj0iICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXIpIHsKICAgICAgICAgIHdhcm5pbmcoIlcxMjAiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICAgIH0KICAgICAgICB2YWx1ZSA9IGV4cHJlc3Npb24ocHJlZml4ID8gMTIwIDogMTApOwogICAgICAgIGlmIChsb25lKSB7CiAgICAgICAgICB0b2tlbnNbMF0uZmlyc3QgPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVzdHJ1Y3R1cmluZ1BhdHRlcm5NYXRjaChuYW1lcywgdmFsdWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgc3RhdGVtZW50LmZpcnN0ID0gc3RhdGVtZW50LmZpcnN0LmNvbmNhdChuYW1lcyk7CgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIsIikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbW1hKCk7CiAgICB9CiAgICBpZiAobGV0YmxvY2spIHsKICAgICAgYWR2YW5jZSgiKSIpOwogICAgICBibG9jayh0cnVlLCB0cnVlKTsKICAgICAgc3RhdGVtZW50LmJsb2NrID0gdHJ1ZTsKICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS51bnN0YWNrKCk7CiAgICB9CgogICAgcmV0dXJuIHN0YXRlbWVudDsKICB9CgogIHZhciBjb25zdHN0YXRlbWVudCA9IHN0bXQoImNvbnN0IiwgZnVuY3Rpb24oY29udGV4dCkgewogICAgcmV0dXJuIGJsb2NrVmFyaWFibGVTdGF0ZW1lbnQoImNvbnN0IiwgdGhpcywgY29udGV4dCk7CiAgfSk7CiAgY29uc3RzdGF0ZW1lbnQuZXhwcyA9IHRydWU7CgogIHZhciBsZXRzdGF0ZW1lbnQgPSBzdG10KCJsZXQiLCBmdW5jdGlvbihjb250ZXh0KSB7CiAgICByZXR1cm4gYmxvY2tWYXJpYWJsZVN0YXRlbWVudCgibGV0IiwgdGhpcywgY29udGV4dCk7CiAgfSk7CiAgbGV0c3RhdGVtZW50LmV4cHMgPSB0cnVlOwoKICB2YXIgdmFyc3RhdGVtZW50ID0gc3RtdCgidmFyIiwgZnVuY3Rpb24oY29udGV4dCkgewogICAgdmFyIHByZWZpeCA9IGNvbnRleHQgJiYgY29udGV4dC5wcmVmaXg7CiAgICB2YXIgaW5leHBvcnQgPSBjb250ZXh0ICYmIGNvbnRleHQuaW5leHBvcnQ7CiAgICB2YXIgdG9rZW5zLCBsb25lLCB2YWx1ZTsKICAgIHZhciBpbXBsaWVkID0gY29udGV4dCAmJiBjb250ZXh0LmltcGxpZWQ7CiAgICB2YXIgcmVwb3J0ID0gIShjb250ZXh0ICYmIGNvbnRleHQuaWdub3JlKTsKCiAgICB0aGlzLmZpcnN0ID0gW107CiAgICBmb3IgKDs7KSB7CiAgICAgIHZhciBuYW1lcyA9IFtdOwogICAgICBpZiAoXy5jb250YWlucyhbInsiLCAiWyJdLCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSkpIHsKICAgICAgICB0b2tlbnMgPSBkZXN0cnVjdHVyaW5nUGF0dGVybigpOwogICAgICAgIGxvbmUgPSBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0b2tlbnMgPSBbIHsgaWQ6IGlkZW50aWZpZXIoKSwgdG9rZW46IHN0YXRlLnRva2Vucy5jdXJyIH0gXTsKICAgICAgICBsb25lID0gdHJ1ZTsKICAgICAgfQoKICAgICAgaWYgKCEocHJlZml4ICYmIGltcGxpZWQpICYmIHJlcG9ydCAmJiBzdGF0ZS5vcHRpb24udmFyc3RtdCkgewogICAgICAgIHdhcm5pbmcoIlcxMzIiLCB0aGlzKTsKICAgICAgfQoKICAgICAgdGhpcy5maXJzdCA9IHRoaXMuZmlyc3QuY29uY2F0KG5hbWVzKTsKCiAgICAgIGZvciAodmFyIHQgaW4gdG9rZW5zKSB7CiAgICAgICAgaWYgKHRva2Vucy5oYXNPd25Qcm9wZXJ0eSh0KSkgewogICAgICAgICAgdCA9IHRva2Vuc1t0XTsKICAgICAgICAgIGlmICghaW1wbGllZCAmJiBzdGF0ZS5mdW5jdFsiKGdsb2JhbCkiXSkgewogICAgICAgICAgICBpZiAocHJlZGVmaW5lZFt0LmlkXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICB3YXJuaW5nKCJXMDc5IiwgdC50b2tlbiwgdC5pZCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUub3B0aW9uLmZ1dHVyZWhvc3RpbGUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgaWYgKCghc3RhdGUuaW5FUzUoKSAmJiB2YXJzLmVjbWFJZGVudGlmaWVyc1s1XVt0LmlkXSA9PT0gZmFsc2UpIHx8CiAgICAgICAgICAgICAgICAoIXN0YXRlLmluRVM2KCkgJiYgdmFycy5lY21hSWRlbnRpZmllcnNbNl1bdC5pZF0gPT09IGZhbHNlKSkgewogICAgICAgICAgICAgICAgd2FybmluZygiVzEyOSIsIHQudG9rZW4sIHQuaWQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHQuaWQpIHsKICAgICAgICAgICAgaWYgKGltcGxpZWQgPT09ICJmb3IiKSB7CgogICAgICAgICAgICAgIGlmICghc3RhdGUuZnVuY3RbIihzY29wZSkiXS5oYXModC5pZCkpIHsKICAgICAgICAgICAgICAgIGlmIChyZXBvcnQpIHdhcm5pbmcoIlcwODgiLCB0LnRva2VuLCB0LmlkKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay51c2UodC5pZCwgdC50b2tlbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbCh0LmlkLCB7CiAgICAgICAgICAgICAgICB0eXBlOiAidmFyIiwKICAgICAgICAgICAgICAgIHRva2VuOiB0LnRva2VuIH0pOwoKICAgICAgICAgICAgICBpZiAobG9uZSAmJiBpbmV4cG9ydCkgewogICAgICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zZXRFeHBvcnRlZCh0LmlkLCB0LnRva2VuKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmFtZXMucHVzaCh0LnRva2VuKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIj0iKSB7CiAgICAgICAgc3RhdGUubmFtZVN0YWNrLnNldChzdGF0ZS50b2tlbnMuY3Vycik7CgogICAgICAgIGFkdmFuY2UoIj0iKTsKICAgICAgICBpZiAoIXByZWZpeCAmJiByZXBvcnQgJiYgIXN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXSAmJgogICAgICAgICAgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDgwIiwgc3RhdGUudG9rZW5zLnByZXYsIHN0YXRlLnRva2Vucy5wcmV2LnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBlZWsoMCkuaWQgPT09ICI9IiAmJiBzdGF0ZS50b2tlbnMubmV4dC5pZGVudGlmaWVyKSB7CiAgICAgICAgICBpZiAoIXByZWZpeCAmJiByZXBvcnQgJiYKICAgICAgICAgICAgICAhc3RhdGUuZnVuY3RbIihwYXJhbXMpIl0gfHwKICAgICAgICAgICAgICBzdGF0ZS5mdW5jdFsiKHBhcmFtcykiXS5pbmRleE9mKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKSA9PT0gLTEpIHsKICAgICAgICAgICAgd2FybmluZygiVzEyMCIsIHN0YXRlLnRva2Vucy5uZXh0LCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhbHVlID0gZXhwcmVzc2lvbihwcmVmaXggPyAxMjAgOiAxMCk7CiAgICAgICAgaWYgKGxvbmUpIHsKICAgICAgICAgIHRva2Vuc1swXS5maXJzdCA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZXN0cnVjdHVyaW5nUGF0dGVybk1hdGNoKG5hbWVzLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIsIikgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNvbW1hKCk7CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSk7CiAgdmFyc3RhdGVtZW50LmV4cHMgPSB0cnVlOwoKICBibG9ja3N0bXQoImNsYXNzIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gY2xhc3NkZWYuY2FsbCh0aGlzLCB0cnVlKTsKICB9KTsKCiAgZnVuY3Rpb24gY2xhc3NkZWYoaXNTdGF0ZW1lbnQpIHsKICAgIGlmICghc3RhdGUuaW5FUzYoKSkgewogICAgICB3YXJuaW5nKCJXMTA0Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJjbGFzcyIsICI2Iik7CiAgICB9CiAgICBpZiAoaXNTdGF0ZW1lbnQpIHsKICAgICAgdGhpcy5uYW1lID0gaWRlbnRpZmllcigpOwoKICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbCh0aGlzLm5hbWUsIHsKICAgICAgICB0eXBlOiAiY2xhc3MiLAogICAgICAgIHRva2VuOiBzdGF0ZS50b2tlbnMuY3VyciB9KTsKICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllciAmJiBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSAhPT0gImV4dGVuZHMiKSB7CiAgICAgIHRoaXMubmFtZSA9IGlkZW50aWZpZXIoKTsKICAgICAgdGhpcy5uYW1lZEV4cHIgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5uYW1lID0gc3RhdGUubmFtZVN0YWNrLmluZmVyKCk7CiAgICB9CiAgICBjbGFzc3RhaWwodGhpcyk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGZ1bmN0aW9uIGNsYXNzdGFpbChjKSB7CiAgICB2YXIgd2FzSW5DbGFzc0JvZHkgPSBzdGF0ZS5pbkNsYXNzQm9keTsKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gImV4dGVuZHMiKSB7CiAgICAgIGFkdmFuY2UoImV4dGVuZHMiKTsKICAgICAgYy5oZXJpdGFnZSA9IGV4cHJlc3Npb24oMTApOwogICAgfQoKICAgIHN0YXRlLmluQ2xhc3NCb2R5ID0gdHJ1ZTsKICAgIGFkdmFuY2UoInsiKTsKICAgIGMuYm9keSA9IGNsYXNzYm9keShjKTsKICAgIGFkdmFuY2UoIn0iKTsKICAgIHN0YXRlLmluQ2xhc3NCb2R5ID0gd2FzSW5DbGFzc0JvZHk7CiAgfQoKICBmdW5jdGlvbiBjbGFzc2JvZHkoYykgewogICAgdmFyIG5hbWU7CiAgICB2YXIgaXNTdGF0aWM7CiAgICB2YXIgaXNHZW5lcmF0b3I7CiAgICB2YXIgZ2V0c2V0OwogICAgdmFyIHByb3BzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIHZhciBzdGF0aWNQcm9wcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB2YXIgY29tcHV0ZWQ7CiAgICBmb3IgKHZhciBpID0gMDsgc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICJ9IjsgKytpKSB7CiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgaXNTdGF0aWMgPSBmYWxzZTsKICAgICAgaXNHZW5lcmF0b3IgPSBmYWxzZTsKICAgICAgZ2V0c2V0ID0gbnVsbDsKICAgICAgaWYgKG5hbWUuaWQgPT09ICI7IikgewogICAgICAgIHdhcm5pbmcoIlcwMzIiKTsKICAgICAgICBhZHZhbmNlKCI7Iik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGlmIChuYW1lLmlkID09PSAiKiIpIHsKICAgICAgICBpc0dlbmVyYXRvciA9IHRydWU7CiAgICAgICAgYWR2YW5jZSgiKiIpOwogICAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgfQogICAgICBpZiAobmFtZS5pZCA9PT0gIlsiKSB7CiAgICAgICAgbmFtZSA9IGNvbXB1dGVkUHJvcGVydHlOYW1lKCk7CiAgICAgICAgY29tcHV0ZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGlzUHJvcGVydHlOYW1lKG5hbWUpKSB7CiAgICAgICAgYWR2YW5jZSgpOwogICAgICAgIGNvbXB1dGVkID0gZmFsc2U7CiAgICAgICAgaWYgKG5hbWUuaWRlbnRpZmllciAmJiBuYW1lLnZhbHVlID09PSAic3RhdGljIikgewogICAgICAgICAgaWYgKGNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIioiKSkgewogICAgICAgICAgICBpc0dlbmVyYXRvciA9IHRydWU7CiAgICAgICAgICAgIGFkdmFuY2UoIioiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpc1Byb3BlcnR5TmFtZShzdGF0ZS50b2tlbnMubmV4dCkgfHwgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJbIikgewogICAgICAgICAgICBjb21wdXRlZCA9IHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiWyI7CiAgICAgICAgICAgIGlzU3RhdGljID0gdHJ1ZTsKICAgICAgICAgICAgbmFtZSA9IHN0YXRlLnRva2Vucy5uZXh0OwogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJbIikgewogICAgICAgICAgICAgIG5hbWUgPSBjb21wdXRlZFByb3BlcnR5TmFtZSgpOwogICAgICAgICAgICB9IGVsc2UgYWR2YW5jZSgpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG5hbWUuaWRlbnRpZmllciAmJiAobmFtZS52YWx1ZSA9PT0gImdldCIgfHwgbmFtZS52YWx1ZSA9PT0gInNldCIpKSB7CiAgICAgICAgICBpZiAoaXNQcm9wZXJ0eU5hbWUoc3RhdGUudG9rZW5zLm5leHQpIHx8IHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiWyIpIHsKICAgICAgICAgICAgY29tcHV0ZWQgPSBzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIlsiOwogICAgICAgICAgICBnZXRzZXQgPSBuYW1lOwogICAgICAgICAgICBuYW1lID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICAgICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIlsiKSB7CiAgICAgICAgICAgICAgbmFtZSA9IGNvbXB1dGVkUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAgIH0gZWxzZSBhZHZhbmNlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdhcm5pbmcoIlcwNTIiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUgfHwgc3RhdGUudG9rZW5zLm5leHQudHlwZSk7CiAgICAgICAgYWR2YW5jZSgpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpZiAoIWNoZWNrUHVuY3R1YXRvcihzdGF0ZS50b2tlbnMubmV4dCwgIigiKSkgewogICAgICAgIGVycm9yKCJFMDU0Iiwgc3RhdGUudG9rZW5zLm5leHQsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICJ9IiAmJgogICAgICAgICAgICAgICAhY2hlY2tQdW5jdHVhdG9yKHN0YXRlLnRva2Vucy5uZXh0LCAiKCIpKSB7CiAgICAgICAgICBhZHZhbmNlKCk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSAhPT0gIigiKSB7CiAgICAgICAgICBkb0Z1bmN0aW9uKHsgc3RhdGVtZW50OiBjIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKCFjb21wdXRlZCkgewogICAgICAgIGlmIChnZXRzZXQpIHsKICAgICAgICAgIHNhdmVBY2Nlc3NvcigKICAgICAgICAgICAgZ2V0c2V0LnZhbHVlLCBpc1N0YXRpYyA/IHN0YXRpY1Byb3BzIDogcHJvcHMsIG5hbWUudmFsdWUsIG5hbWUsIHRydWUsIGlzU3RhdGljKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG5hbWUudmFsdWUgPT09ICJjb25zdHJ1Y3RvciIpIHsKICAgICAgICAgICAgc3RhdGUubmFtZVN0YWNrLnNldChjKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLm5hbWVTdGFjay5zZXQobmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBzYXZlUHJvcGVydHkoaXNTdGF0aWMgPyBzdGF0aWNQcm9wcyA6IHByb3BzLCBuYW1lLnZhbHVlLCBuYW1lLCB0cnVlLCBpc1N0YXRpYyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoZ2V0c2V0ICYmIG5hbWUudmFsdWUgPT09ICJjb25zdHJ1Y3RvciIpIHsKICAgICAgICB2YXIgcHJvcERlc2MgPSBnZXRzZXQudmFsdWUgPT09ICJnZXQiID8gImNsYXNzIGdldHRlciBtZXRob2QiIDogImNsYXNzIHNldHRlciBtZXRob2QiOwogICAgICAgIGVycm9yKCJFMDQ5IiwgbmFtZSwgcHJvcERlc2MsICJjb25zdHJ1Y3RvciIpOwogICAgICB9IGVsc2UgaWYgKG5hbWUudmFsdWUgPT09ICJwcm90b3R5cGUiKSB7CiAgICAgICAgZXJyb3IoIkUwNDkiLCBuYW1lLCAiY2xhc3MgbWV0aG9kIiwgInByb3RvdHlwZSIpOwogICAgICB9CgogICAgICBwcm9wZXJ0eU5hbWUobmFtZSk7CgogICAgICBkb0Z1bmN0aW9uKHsKICAgICAgICBzdGF0ZW1lbnQ6IGMsCiAgICAgICAgdHlwZTogaXNHZW5lcmF0b3IgPyAiZ2VuZXJhdG9yIiA6IG51bGwsCiAgICAgICAgY2xhc3NFeHByQmluZGluZzogYy5uYW1lZEV4cHIgPyBjLm5hbWUgOiBudWxsCiAgICAgIH0pOwogICAgfQoKICAgIGNoZWNrUHJvcGVydGllcyhwcm9wcyk7CiAgfQoKICBibG9ja3N0bXQoImZ1bmN0aW9uIiwgZnVuY3Rpb24oY29udGV4dCkgewogICAgdmFyIGluZXhwb3J0ID0gY29udGV4dCAmJiBjb250ZXh0LmluZXhwb3J0OwogICAgdmFyIGdlbmVyYXRvciA9IGZhbHNlOwogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlID09PSAiKiIpIHsKICAgICAgYWR2YW5jZSgiKiIpOwogICAgICBpZiAoc3RhdGUuaW5FUzYoeyBzdHJpY3Q6IHRydWUgfSkpIHsKICAgICAgICBnZW5lcmF0b3IgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHdhcm5pbmcoIlcxMTkiLCBzdGF0ZS50b2tlbnMuY3VyciwgImZ1bmN0aW9uKiIsICI2Iik7CiAgICAgIH0KICAgIH0KICAgIGlmIChpbmJsb2NrKSB7CiAgICAgIHdhcm5pbmcoIlcwODIiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICB9CiAgICB2YXIgaSA9IG9wdGlvbmFsaWRlbnRpZmllcigpOwoKICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkbGFiZWwoaSwgewogICAgICB0eXBlOiAiZnVuY3Rpb24iLAogICAgICB0b2tlbjogc3RhdGUudG9rZW5zLmN1cnIgfSk7CgogICAgaWYgKGkgPT09IHVuZGVmaW5lZCkgewogICAgICB3YXJuaW5nKCJXMDI1Iik7CiAgICB9IGVsc2UgaWYgKGluZXhwb3J0KSB7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc2V0RXhwb3J0ZWQoaSwgc3RhdGUudG9rZW5zLnByZXYpOwogICAgfQoKICAgIGRvRnVuY3Rpb24oewogICAgICBuYW1lOiBpLAogICAgICBzdGF0ZW1lbnQ6IHRoaXMsCiAgICAgIHR5cGU6IGdlbmVyYXRvciA/ICJnZW5lcmF0b3IiIDogbnVsbCwKICAgICAgaWdub3JlTG9vcEZ1bmM6IGluYmxvY2sgLy8gYSBkZWNsYXJhdGlvbiBtYXkgYWxyZWFkeSBoYXZlIHdhcm5lZAogICAgfSk7CiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICIoIiAmJiBzdGF0ZS50b2tlbnMubmV4dC5saW5lID09PSBzdGF0ZS50b2tlbnMuY3Vyci5saW5lKSB7CiAgICAgIGVycm9yKCJFMDM5Iik7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9KTsKCiAgcHJlZml4KCJmdW5jdGlvbiIsIGZ1bmN0aW9uKCkgewogICAgdmFyIGdlbmVyYXRvciA9IGZhbHNlOwoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIioiKSB7CiAgICAgIGlmICghc3RhdGUuaW5FUzYoKSkgewogICAgICAgIHdhcm5pbmcoIlcxMTkiLCBzdGF0ZS50b2tlbnMuY3VyciwgImZ1bmN0aW9uKiIsICI2Iik7CiAgICAgIH0KICAgICAgYWR2YW5jZSgiKiIpOwogICAgICBnZW5lcmF0b3IgPSB0cnVlOwogICAgfQoKICAgIHZhciBpID0gb3B0aW9uYWxpZGVudGlmaWVyKCk7CiAgICBkb0Z1bmN0aW9uKHsgbmFtZTogaSwgdHlwZTogZ2VuZXJhdG9yID8gImdlbmVyYXRvciIgOiBudWxsIH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfSk7CgogIGJsb2Nrc3RtdCgiaWYiLCBmdW5jdGlvbigpIHsKICAgIHZhciB0ID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICBpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpOwogICAgc3RhdGUuY29uZGl0aW9uID0gdHJ1ZTsKICAgIGFkdmFuY2UoIigiKTsKICAgIHZhciBleHByID0gZXhwcmVzc2lvbigwKTsKICAgIGNoZWNrQ29uZEFzc2lnbm1lbnQoZXhwcik7CiAgICB2YXIgZm9yaW5pZmNoZWNrID0gbnVsbDsKICAgIGlmIChzdGF0ZS5vcHRpb24uZm9yaW4gJiYgc3RhdGUuZm9yaW5pZmNoZWNrbmVlZGVkKSB7CiAgICAgIHN0YXRlLmZvcmluaWZjaGVja25lZWRlZCA9IGZhbHNlOyAvLyBXZSBvbmx5IG5lZWQgdG8gYW5hbHl6ZSB0aGUgZmlyc3QgaWYgaW5zaWRlIHRoZSBsb29wCiAgICAgIGZvcmluaWZjaGVjayA9IHN0YXRlLmZvcmluaWZjaGVja3Nbc3RhdGUuZm9yaW5pZmNoZWNrcy5sZW5ndGggLSAxXTsKICAgICAgaWYgKGV4cHIudHlwZSA9PT0gIihwdW5jdHVhdG9yKSIgJiYgZXhwci52YWx1ZSA9PT0gIiEiKSB7CiAgICAgICAgZm9yaW5pZmNoZWNrLnR5cGUgPSAiKG5lZ2F0aXZlKSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yaW5pZmNoZWNrLnR5cGUgPSAiKHBvc2l0aXZlKSI7CiAgICAgIH0KICAgIH0KCiAgICBhZHZhbmNlKCIpIiwgdCk7CiAgICBzdGF0ZS5jb25kaXRpb24gPSBmYWxzZTsKICAgIHZhciBzID0gYmxvY2sodHJ1ZSwgdHJ1ZSk7CiAgICBpZiAoZm9yaW5pZmNoZWNrICYmIGZvcmluaWZjaGVjay50eXBlID09PSAiKG5lZ2F0aXZlKSIpIHsKICAgICAgaWYgKHMgJiYgc1swXSAmJiBzWzBdLnR5cGUgPT09ICIoaWRlbnRpZmllcikiICYmIHNbMF0udmFsdWUgPT09ICJjb250aW51ZSIpIHsKICAgICAgICBmb3JpbmlmY2hlY2sudHlwZSA9ICIobmVnYXRpdmUtd2l0aC1jb250aW51ZSkiOwogICAgICB9CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiZWxzZSIpIHsKICAgICAgYWR2YW5jZSgiZWxzZSIpOwogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJpZiIgfHwgc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJzd2l0Y2giKSB7CiAgICAgICAgc3RhdGVtZW50KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2sodHJ1ZSwgdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0pOwoKICBibG9ja3N0bXQoInRyeSIsIGZ1bmN0aW9uKCkgewogICAgdmFyIGI7CgogICAgZnVuY3Rpb24gZG9DYXRjaCgpIHsKICAgICAgYWR2YW5jZSgiY2F0Y2giKTsKICAgICAgYWR2YW5jZSgiKCIpOwoKICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zdGFjaygiY2F0Y2hwYXJhbXMiKTsKCiAgICAgIGlmIChjaGVja1B1bmN0dWF0b3JzKHN0YXRlLnRva2Vucy5uZXh0LCBbIlsiLCAieyJdKSkgewogICAgICAgIHZhciB0b2tlbnMgPSBkZXN0cnVjdHVyaW5nUGF0dGVybigpOwogICAgICAgIF8uZWFjaCh0b2tlbnMsIGZ1bmN0aW9uKHRva2VuKSB7CiAgICAgICAgICBpZiAodG9rZW4uaWQpIHsKICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRQYXJhbSh0b2tlbi5pZCwgdG9rZW4sICJleGNlcHRpb24iKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC50eXBlICE9PSAiKGlkZW50aWZpZXIpIikgewogICAgICAgIHdhcm5pbmcoIkUwMzAiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkUGFyYW0oaWRlbnRpZmllcigpLCBzdGF0ZS50b2tlbnMuY3VyciwgImV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICJpZiIpIHsKICAgICAgICBpZiAoIXN0YXRlLmluTW96KCkpIHsKICAgICAgICAgIHdhcm5pbmcoIlcxMTgiLCBzdGF0ZS50b2tlbnMuY3VyciwgImNhdGNoIGZpbHRlciIpOwogICAgICAgIH0KICAgICAgICBhZHZhbmNlKCJpZiIpOwogICAgICAgIGV4cHJlc3Npb24oMCk7CiAgICAgIH0KCiAgICAgIGFkdmFuY2UoIikiKTsKCiAgICAgIGJsb2NrKGZhbHNlKTsKCiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpOwogICAgfQoKICAgIGJsb2NrKHRydWUpOwoKICAgIHdoaWxlIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gImNhdGNoIikgewogICAgICBpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpOwogICAgICBpZiAoYiAmJiAoIXN0YXRlLmluTW96KCkpKSB7CiAgICAgICAgd2FybmluZygiVzExOCIsIHN0YXRlLnRva2Vucy5uZXh0LCAibXVsdGlwbGUgY2F0Y2ggYmxvY2tzIik7CiAgICAgIH0KICAgICAgZG9DYXRjaCgpOwogICAgICBiID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJmaW5hbGx5IikgewogICAgICBhZHZhbmNlKCJmaW5hbGx5Iik7CiAgICAgIGJsb2NrKHRydWUpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFiKSB7CiAgICAgIGVycm9yKCJFMDIxIiwgc3RhdGUudG9rZW5zLm5leHQsICJjYXRjaCIsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgIH0KCiAgICByZXR1cm4gdGhpczsKICB9KTsKCiAgYmxvY2tzdG10KCJ3aGlsZSIsIGZ1bmN0aW9uKCkgewogICAgdmFyIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gKz0gMTsKICAgIHN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXSArPSAxOwogICAgaW5jcmVhc2VDb21wbGV4aXR5Q291bnQoKTsKICAgIGFkdmFuY2UoIigiKTsKICAgIGNoZWNrQ29uZEFzc2lnbm1lbnQoZXhwcmVzc2lvbigwKSk7CiAgICBhZHZhbmNlKCIpIiwgdCk7CiAgICBibG9jayh0cnVlLCB0cnVlKTsKICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gLT0gMTsKICAgIHN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXSAtPSAxOwogICAgcmV0dXJuIHRoaXM7CiAgfSkubGFiZWxsZWQgPSB0cnVlOwoKICBibG9ja3N0bXQoIndpdGgiLCBmdW5jdGlvbigpIHsKICAgIHZhciB0ID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICBpZiAoc3RhdGUuaXNTdHJpY3QoKSkgewogICAgICBlcnJvcigiRTAxMCIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgIH0gZWxzZSBpZiAoIXN0YXRlLm9wdGlvbi53aXRoc3RtdCkgewogICAgICB3YXJuaW5nKCJXMDg1Iiwgc3RhdGUudG9rZW5zLmN1cnIpOwogICAgfQoKICAgIGFkdmFuY2UoIigiKTsKICAgIGV4cHJlc3Npb24oMCk7CiAgICBhZHZhbmNlKCIpIiwgdCk7CiAgICBibG9jayh0cnVlLCB0cnVlKTsKCiAgICByZXR1cm4gdGhpczsKICB9KTsKCiAgYmxvY2tzdG10KCJzd2l0Y2giLCBmdW5jdGlvbigpIHsKICAgIHZhciB0ID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICB2YXIgZyA9IGZhbHNlOwogICAgdmFyIG5vaW5kZW50ID0gZmFsc2U7CgogICAgc3RhdGUuZnVuY3RbIihicmVha2FnZSkiXSArPSAxOwogICAgYWR2YW5jZSgiKCIpOwogICAgY2hlY2tDb25kQXNzaWdubWVudChleHByZXNzaW9uKDApKTsKICAgIGFkdmFuY2UoIikiLCB0KTsKICAgIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgIGFkdmFuY2UoInsiKTsKCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuZnJvbSA9PT0gaW5kZW50KQogICAgICBub2luZGVudCA9IHRydWU7CgogICAgaWYgKCFub2luZGVudCkKICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CgogICAgdGhpcy5jYXNlcyA9IFtdOwoKICAgIGZvciAoOzspIHsKICAgICAgc3dpdGNoIChzdGF0ZS50b2tlbnMubmV4dC5pZCkgewogICAgICBjYXNlICJjYXNlIjoKICAgICAgICBzd2l0Y2ggKHN0YXRlLmZ1bmN0WyIodmVyYikiXSkgewogICAgICAgIGNhc2UgInlpZWxkIjoKICAgICAgICBjYXNlICJicmVhayI6CiAgICAgICAgY2FzZSAiY2FzZSI6CiAgICAgICAgY2FzZSAiY29udGludWUiOgogICAgICAgIGNhc2UgInJldHVybiI6CiAgICAgICAgY2FzZSAic3dpdGNoIjoKICAgICAgICBjYXNlICJ0aHJvdyI6CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKCFzdGF0ZS50b2tlbnMuY3Vyci5jYXNlRmFsbHNUaHJvdWdoKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwODYiLCBzdGF0ZS50b2tlbnMuY3VyciwgImNhc2UiKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGFkdmFuY2UoImNhc2UiKTsKICAgICAgICB0aGlzLmNhc2VzLnB1c2goZXhwcmVzc2lvbigwKSk7CiAgICAgICAgaW5jcmVhc2VDb21wbGV4aXR5Q291bnQoKTsKICAgICAgICBnID0gdHJ1ZTsKICAgICAgICBhZHZhbmNlKCI6Iik7CiAgICAgICAgc3RhdGUuZnVuY3RbIih2ZXJiKSJdID0gImNhc2UiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJkZWZhdWx0IjoKICAgICAgICBzd2l0Y2ggKHN0YXRlLmZ1bmN0WyIodmVyYikiXSkgewogICAgICAgIGNhc2UgInlpZWxkIjoKICAgICAgICBjYXNlICJicmVhayI6CiAgICAgICAgY2FzZSAiY29udGludWUiOgogICAgICAgIGNhc2UgInJldHVybiI6CiAgICAgICAgY2FzZSAidGhyb3ciOgogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICh0aGlzLmNhc2VzLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoIXN0YXRlLnRva2Vucy5jdXJyLmNhc2VGYWxsc1Rocm91Z2gpIHsKICAgICAgICAgICAgICB3YXJuaW5nKCJXMDg2Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJkZWZhdWx0Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGFkdmFuY2UoImRlZmF1bHQiKTsKICAgICAgICBnID0gdHJ1ZTsKICAgICAgICBhZHZhbmNlKCI6Iik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIn0iOgogICAgICAgIGlmICghbm9pbmRlbnQpCiAgICAgICAgICBpbmRlbnQgLT0gc3RhdGUub3B0aW9uLmluZGVudDsKCiAgICAgICAgYWR2YW5jZSgifSIsIHQpOwogICAgICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gLT0gMTsKICAgICAgICBzdGF0ZS5mdW5jdFsiKHZlcmIpIl0gPSB1bmRlZmluZWQ7CiAgICAgICAgcmV0dXJuOwogICAgICBjYXNlICIoZW5kKSI6CiAgICAgICAgZXJyb3IoIkUwMjMiLCBzdGF0ZS50b2tlbnMubmV4dCwgIn0iKTsKICAgICAgICByZXR1cm47CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgaW5kZW50ICs9IHN0YXRlLm9wdGlvbi5pbmRlbnQ7CiAgICAgICAgaWYgKGcpIHsKICAgICAgICAgIHN3aXRjaCAoc3RhdGUudG9rZW5zLmN1cnIuaWQpIHsKICAgICAgICAgIGNhc2UgIiwiOgogICAgICAgICAgICBlcnJvcigiRTA0MCIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjYXNlICI6IjoKICAgICAgICAgICAgZyA9IGZhbHNlOwogICAgICAgICAgICBzdGF0ZW1lbnRzKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZXJyb3IoIkUwMjUiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5jdXJyLmlkID09PSAiOiIpIHsKICAgICAgICAgICAgYWR2YW5jZSgiOiIpOwogICAgICAgICAgICBlcnJvcigiRTAyNCIsIHN0YXRlLnRva2Vucy5jdXJyLCAiOiIpOwogICAgICAgICAgICBzdGF0ZW1lbnRzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlcnJvcigiRTAyMSIsIHN0YXRlLnRva2Vucy5uZXh0LCAiY2FzZSIsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbmRlbnQgLT0gc3RhdGUub3B0aW9uLmluZGVudDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfSkubGFiZWxsZWQgPSB0cnVlOwoKICBzdG10KCJkZWJ1Z2dlciIsIGZ1bmN0aW9uKCkgewogICAgaWYgKCFzdGF0ZS5vcHRpb24uZGVidWcpIHsKICAgICAgd2FybmluZygiVzA4NyIsIHRoaXMpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfSkuZXhwcyA9IHRydWU7CgogIChmdW5jdGlvbigpIHsKICAgIHZhciB4ID0gc3RtdCgiZG8iLCBmdW5jdGlvbigpIHsKICAgICAgc3RhdGUuZnVuY3RbIihicmVha2FnZSkiXSArPSAxOwogICAgICBzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl0gKz0gMTsKICAgICAgaW5jcmVhc2VDb21wbGV4aXR5Q291bnQoKTsKCiAgICAgIHRoaXMuZmlyc3QgPSBibG9jayh0cnVlLCB0cnVlKTsKICAgICAgYWR2YW5jZSgid2hpbGUiKTsKICAgICAgdmFyIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgYWR2YW5jZSgiKCIpOwogICAgICBjaGVja0NvbmRBc3NpZ25tZW50KGV4cHJlc3Npb24oMCkpOwogICAgICBhZHZhbmNlKCIpIiwgdCk7CiAgICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gLT0gMTsKICAgICAgc3RhdGUuZnVuY3RbIihsb29wYWdlKSJdIC09IDE7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgICB4LmxhYmVsbGVkID0gdHJ1ZTsKICAgIHguZXhwcyA9IHRydWU7CiAgfSgpKTsKCiAgYmxvY2tzdG10KCJmb3IiLCBmdW5jdGlvbigpIHsKICAgIHZhciBzLCB0ID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICB2YXIgbGV0c2NvcGUgPSBmYWxzZTsKICAgIHZhciBmb3JlYWNodG9rID0gbnVsbDsKCiAgICBpZiAodC52YWx1ZSA9PT0gImVhY2giKSB7CiAgICAgIGZvcmVhY2h0b2sgPSB0OwogICAgICBhZHZhbmNlKCJlYWNoIik7CiAgICAgIGlmICghc3RhdGUuaW5Nb3ooKSkgewogICAgICAgIHdhcm5pbmcoIlcxMTgiLCBzdGF0ZS50b2tlbnMuY3VyciwgImZvciBlYWNoIik7CiAgICAgIH0KICAgIH0KCiAgICBpbmNyZWFzZUNvbXBsZXhpdHlDb3VudCgpOwogICAgYWR2YW5jZSgiKCIpOwogICAgdmFyIG5leHRvcDsgLy8gY29udGFpbnMgdGhlIHRva2VuIG9mIHRoZSAiaW4iIG9yICJvZiIgb3BlcmF0b3IKICAgIHZhciBpID0gMDsKICAgIHZhciBpbm9mID0gWyJpbiIsICJvZiJdOwogICAgdmFyIGxldmVsID0gMDsgLy8gQmluZGluZ1BhdHRlcm4gImxldmVsIiAtLS0gbGV2ZWwgMCA9PT0gbm8gQmluZGluZ1BhdHRlcm4KICAgIHZhciBjb21tYTsgLy8gRmlyc3QgY29tbWEgcHVuY3R1YXRvciBhdCBsZXZlbCAwCiAgICB2YXIgaW5pdGlhbGl6ZXI7IC8vIEZpcnN0IGluaXRpYWxpemVyIGF0IGxldmVsIDAKICAgIGlmIChjaGVja1B1bmN0dWF0b3JzKHN0YXRlLnRva2Vucy5uZXh0LCBbInsiLCAiWyJdKSkgKytsZXZlbDsKICAgIGRvIHsKICAgICAgbmV4dG9wID0gcGVlayhpKTsKICAgICAgKytpOwogICAgICBpZiAoY2hlY2tQdW5jdHVhdG9ycyhuZXh0b3AsIFsieyIsICJbIl0pKSArK2xldmVsOwogICAgICBlbHNlIGlmIChjaGVja1B1bmN0dWF0b3JzKG5leHRvcCwgWyJ9IiwgIl0iXSkpIC0tbGV2ZWw7CiAgICAgIGlmIChsZXZlbCA8IDApIGJyZWFrOwogICAgICBpZiAobGV2ZWwgPT09IDApIHsKICAgICAgICBpZiAoIWNvbW1hICYmIGNoZWNrUHVuY3R1YXRvcihuZXh0b3AsICIsIikpIGNvbW1hID0gbmV4dG9wOwogICAgICAgIGVsc2UgaWYgKCFpbml0aWFsaXplciAmJiBjaGVja1B1bmN0dWF0b3IobmV4dG9wLCAiPSIpKSBpbml0aWFsaXplciA9IG5leHRvcDsKICAgICAgfQogICAgfSB3aGlsZSAobGV2ZWwgPiAwIHx8ICFfLmNvbnRhaW5zKGlub2YsIG5leHRvcC52YWx1ZSkgJiYgbmV4dG9wLnZhbHVlICE9PSAiOyIgJiYKICAgIG5leHRvcC50eXBlICE9PSAiKGVuZCkiKTsgLy8gSXMgdGhpcyBhIEpTQ1MgYnVnPyBUaGlzIGxvb2tzIHJlYWxseSB3ZWlyZC4KICAgIGlmIChfLmNvbnRhaW5zKGlub2YsIG5leHRvcC52YWx1ZSkpIHsKICAgICAgaWYgKCFzdGF0ZS5pbkVTNigpICYmIG5leHRvcC52YWx1ZSA9PT0gIm9mIikgewogICAgICAgIHdhcm5pbmcoIlcxMDQiLCBuZXh0b3AsICJmb3Igb2YiLCAiNiIpOwogICAgICB9CgogICAgICB2YXIgb2sgPSAhKGluaXRpYWxpemVyIHx8IGNvbW1hKTsKICAgICAgaWYgKGluaXRpYWxpemVyKSB7CiAgICAgICAgZXJyb3IoIlcxMzMiLCBjb21tYSwgbmV4dG9wLnZhbHVlLCAiaW5pdGlhbGl6ZXIgaXMgZm9yYmlkZGVuIik7CiAgICAgIH0KCiAgICAgIGlmIChjb21tYSkgewogICAgICAgIGVycm9yKCJXMTMzIiwgY29tbWEsIG5leHRvcC52YWx1ZSwgIm1vcmUgdGhhbiBvbmUgRm9yQmluZGluZyIpOwogICAgICB9CgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJ2YXIiKSB7CiAgICAgICAgYWR2YW5jZSgidmFyIik7CiAgICAgICAgc3RhdGUudG9rZW5zLmN1cnIuZnVkKHsgcHJlZml4OiB0cnVlIH0pOwogICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAibGV0IiB8fCBzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gImNvbnN0IikgewogICAgICAgIGFkdmFuY2Uoc3RhdGUudG9rZW5zLm5leHQuaWQpOwogICAgICAgIGxldHNjb3BlID0gdHJ1ZTsKICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnN0YWNrKCk7CiAgICAgICAgc3RhdGUudG9rZW5zLmN1cnIuZnVkKHsgcHJlZml4OiB0cnVlIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIE9iamVjdC5jcmVhdGUodmFyc3RhdGVtZW50KS5mdWQoeyBwcmVmaXg6IHRydWUsIGltcGxpZWQ6ICJmb3IiLCBpZ25vcmU6ICFvayB9KTsKICAgICAgfQogICAgICBhZHZhbmNlKG5leHRvcC52YWx1ZSk7CiAgICAgIGV4cHJlc3Npb24oMjApOwogICAgICBhZHZhbmNlKCIpIiwgdCk7CgogICAgICBpZiAobmV4dG9wLnZhbHVlID09PSAiaW4iICYmIHN0YXRlLm9wdGlvbi5mb3JpbikgewogICAgICAgIHN0YXRlLmZvcmluaWZjaGVja25lZWRlZCA9IHRydWU7CgogICAgICAgIGlmIChzdGF0ZS5mb3JpbmlmY2hlY2tzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgIHN0YXRlLmZvcmluaWZjaGVja3MgPSBbXTsKICAgICAgICB9CiAgICAgICAgc3RhdGUuZm9yaW5pZmNoZWNrcy5wdXNoKHsKICAgICAgICAgIHR5cGU6ICIobm9uZSkiCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gKz0gMTsKICAgICAgc3RhdGUuZnVuY3RbIihsb29wYWdlKSJdICs9IDE7CgogICAgICBzID0gYmxvY2sodHJ1ZSwgdHJ1ZSk7CgogICAgICBpZiAobmV4dG9wLnZhbHVlID09PSAiaW4iICYmIHN0YXRlLm9wdGlvbi5mb3JpbikgewogICAgICAgIGlmIChzdGF0ZS5mb3JpbmlmY2hlY2tzICYmIHN0YXRlLmZvcmluaWZjaGVja3MubGVuZ3RoID4gMCkgewogICAgICAgICAgdmFyIGNoZWNrID0gc3RhdGUuZm9yaW5pZmNoZWNrcy5wb3AoKTsKCiAgICAgICAgICBpZiAoLy8gTm8gaWYgc3RhdGVtZW50IG9yIG5vdCB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIGxvb3AgYm9keQogICAgICAgICAgICAgIHMgJiYgcy5sZW5ndGggPiAwICYmICh0eXBlb2Ygc1swXSAhPT0gIm9iamVjdCIgfHwgc1swXS52YWx1ZSAhPT0gImlmIikgfHwKICAgICAgICAgICAgICBjaGVjay50eXBlID09PSAiKHBvc2l0aXZlKSIgJiYgcy5sZW5ndGggPiAxIHx8CiAgICAgICAgICAgICAgY2hlY2sudHlwZSA9PT0gIihuZWdhdGl2ZSkiKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwODkiLCB0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGUuZm9yaW5pZmNoZWNrbmVlZGVkID0gZmFsc2U7CiAgICAgIH0KCiAgICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gLT0gMTsKICAgICAgc3RhdGUuZnVuY3RbIihsb29wYWdlKSJdIC09IDE7CiAgICB9IGVsc2UgewogICAgICBpZiAoZm9yZWFjaHRvaykgewogICAgICAgIGVycm9yKCJFMDQ1IiwgZm9yZWFjaHRvayk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiOyIpIHsKICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJ2YXIiKSB7CiAgICAgICAgICBhZHZhbmNlKCJ2YXIiKTsKICAgICAgICAgIHN0YXRlLnRva2Vucy5jdXJyLmZ1ZCgpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJsZXQiKSB7CiAgICAgICAgICBhZHZhbmNlKCJsZXQiKTsKICAgICAgICAgIGxldHNjb3BlID0gdHJ1ZTsKICAgICAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uc3RhY2soKTsKICAgICAgICAgIHN0YXRlLnRva2Vucy5jdXJyLmZ1ZCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIGV4cHJlc3Npb24oMCwgImZvciIpOwogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIsIikgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvbW1hKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIG5vbGluZWJyZWFrKHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgYWR2YW5jZSgiOyIpOwogICAgICBzdGF0ZS5mdW5jdFsiKGxvb3BhZ2UpIl0gKz0gMTsKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiOyIpIHsKICAgICAgICBjaGVja0NvbmRBc3NpZ25tZW50KGV4cHJlc3Npb24oMCkpOwogICAgICB9CiAgICAgIG5vbGluZWJyZWFrKHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgYWR2YW5jZSgiOyIpOwogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICI7IikgewogICAgICAgIGVycm9yKCJFMDIxIiwgc3RhdGUudG9rZW5zLm5leHQsICIpIiwgIjsiKTsKICAgICAgfQogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIpIikgewogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGV4cHJlc3Npb24oMCwgImZvciIpOwogICAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiLCIpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb21tYSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBhZHZhbmNlKCIpIiwgdCk7CiAgICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gKz0gMTsKICAgICAgYmxvY2sodHJ1ZSwgdHJ1ZSk7CiAgICAgIHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gLT0gMTsKICAgICAgc3RhdGUuZnVuY3RbIihsb29wYWdlKSJdIC09IDE7CgogICAgfQogICAgaWYgKGxldHNjb3BlKSB7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0udW5zdGFjaygpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfSkubGFiZWxsZWQgPSB0cnVlOwoKCiAgc3RtdCgiYnJlYWsiLCBmdW5jdGlvbigpIHsKICAgIHZhciB2ID0gc3RhdGUudG9rZW5zLm5leHQudmFsdWU7CgogICAgaWYgKCFzdGF0ZS5vcHRpb24uYXNpKQogICAgICBub2xpbmVicmVhayh0aGlzKTsKCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICI7IiAmJiAhc3RhdGUudG9rZW5zLm5leHQucmVhY2ggJiYKICAgICAgICBzdGF0ZS50b2tlbnMuY3Vyci5saW5lID09PSBzdGFydExpbmUoc3RhdGUudG9rZW5zLm5leHQpKSB7CiAgICAgIGlmICghc3RhdGUuZnVuY3RbIihzY29wZSkiXS5mdW5jdC5oYXNCcmVha0xhYmVsKHYpKSB7CiAgICAgICAgd2FybmluZygiVzA5MCIsIHN0YXRlLnRva2Vucy5uZXh0LCB2KTsKICAgICAgfQogICAgICB0aGlzLmZpcnN0ID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICAgIGFkdmFuY2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChzdGF0ZS5mdW5jdFsiKGJyZWFrYWdlKSJdID09PSAwKQogICAgICAgIHdhcm5pbmcoIlcwNTIiLCBzdGF0ZS50b2tlbnMubmV4dCwgdGhpcy52YWx1ZSk7CiAgICB9CgogICAgcmVhY2hhYmxlKHRoaXMpOwoKICAgIHJldHVybiB0aGlzOwogIH0pLmV4cHMgPSB0cnVlOwoKCiAgc3RtdCgiY29udGludWUiLCBmdW5jdGlvbigpIHsKICAgIHZhciB2ID0gc3RhdGUudG9rZW5zLm5leHQudmFsdWU7CgogICAgaWYgKHN0YXRlLmZ1bmN0WyIoYnJlYWthZ2UpIl0gPT09IDApCiAgICAgIHdhcm5pbmcoIlcwNTIiLCBzdGF0ZS50b2tlbnMubmV4dCwgdGhpcy52YWx1ZSk7CiAgICBpZiAoIXN0YXRlLmZ1bmN0WyIobG9vcGFnZSkiXSkKICAgICAgd2FybmluZygiVzA1MiIsIHN0YXRlLnRva2Vucy5uZXh0LCB0aGlzLnZhbHVlKTsKCiAgICBpZiAoIXN0YXRlLm9wdGlvbi5hc2kpCiAgICAgIG5vbGluZWJyZWFrKHRoaXMpOwoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIjsiICYmICFzdGF0ZS50b2tlbnMubmV4dC5yZWFjaCkgewogICAgICBpZiAoc3RhdGUudG9rZW5zLmN1cnIubGluZSA9PT0gc3RhcnRMaW5lKHN0YXRlLnRva2Vucy5uZXh0KSkgewogICAgICAgIGlmICghc3RhdGUuZnVuY3RbIihzY29wZSkiXS5mdW5jdC5oYXNCcmVha0xhYmVsKHYpKSB7CiAgICAgICAgICB3YXJuaW5nKCJXMDkwIiwgc3RhdGUudG9rZW5zLm5leHQsIHYpOwogICAgICAgIH0KICAgICAgICB0aGlzLmZpcnN0ID0gc3RhdGUudG9rZW5zLm5leHQ7CiAgICAgICAgYWR2YW5jZSgpOwogICAgICB9CiAgICB9CgogICAgcmVhY2hhYmxlKHRoaXMpOwoKICAgIHJldHVybiB0aGlzOwogIH0pLmV4cHMgPSB0cnVlOwoKCiAgc3RtdCgicmV0dXJuIiwgZnVuY3Rpb24oKSB7CiAgICBpZiAodGhpcy5saW5lID09PSBzdGFydExpbmUoc3RhdGUudG9rZW5zLm5leHQpKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIjsiICYmICFzdGF0ZS50b2tlbnMubmV4dC5yZWFjaCkgewogICAgICAgIHRoaXMuZmlyc3QgPSBleHByZXNzaW9uKDApOwoKICAgICAgICBpZiAodGhpcy5maXJzdCAmJgogICAgICAgICAgICB0aGlzLmZpcnN0LnR5cGUgPT09ICIocHVuY3R1YXRvcikiICYmIHRoaXMuZmlyc3QudmFsdWUgPT09ICI9IiAmJgogICAgICAgICAgICAhdGhpcy5maXJzdC5wYXJlbiAmJiAhc3RhdGUub3B0aW9uLmJvc3MpIHsKICAgICAgICAgIHdhcm5pbmdBdCgiVzA5MyIsIHRoaXMuZmlyc3QubGluZSwgdGhpcy5maXJzdC5jaGFyYWN0ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnR5cGUgPT09ICIocHVuY3R1YXRvcikiICYmCiAgICAgICAgWyJbIiwgInsiLCAiKyIsICItIl0uaW5kZXhPZihzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSkgPiAtMSkgewogICAgICAgIG5vbGluZWJyZWFrKHRoaXMpOyAvLyBhbHdheXMgd2FybiAoTGluZSBicmVha2luZyBlcnJvcikKICAgICAgfQogICAgfQoKICAgIHJlYWNoYWJsZSh0aGlzKTsKCiAgICByZXR1cm4gdGhpczsKICB9KS5leHBzID0gdHJ1ZTsKCiAgKGZ1bmN0aW9uKHgpIHsKICAgIHguZXhwcyA9IHRydWU7CiAgICB4LmxicCA9IDI1OwogIH0ocHJlZml4KCJ5aWVsZCIsIGZ1bmN0aW9uKCkgewogICAgdmFyIHByZXYgPSBzdGF0ZS50b2tlbnMucHJldjsKICAgIGlmIChzdGF0ZS5pbkVTNih0cnVlKSAmJiAhc3RhdGUuZnVuY3RbIihnZW5lcmF0b3IpIl0pIHsKICAgICAgaWYgKCEoIihjYXRjaCkiID09PSBzdGF0ZS5mdW5jdFsiKG5hbWUpIl0gJiYgc3RhdGUuZnVuY3RbIihjb250ZXh0KSJdWyIoZ2VuZXJhdG9yKSJdKSkgewogICAgICAgIGVycm9yKCJFMDQ2Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJ5aWVsZCIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCFzdGF0ZS5pbkVTNigpKSB7CiAgICAgIHdhcm5pbmcoIlcxMDQiLCBzdGF0ZS50b2tlbnMuY3VyciwgInlpZWxkIiwgIjYiKTsKICAgIH0KICAgIHN0YXRlLmZ1bmN0WyIoZ2VuZXJhdG9yKSJdID0gInlpZWxkZWQiOwogICAgdmFyIGRlbGVnYXRpbmdZaWVsZCA9IGZhbHNlOwoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIioiKSB7CiAgICAgIGRlbGVnYXRpbmdZaWVsZCA9IHRydWU7CiAgICAgIGFkdmFuY2UoIioiKTsKICAgIH0KCiAgICBpZiAodGhpcy5saW5lID09PSBzdGFydExpbmUoc3RhdGUudG9rZW5zLm5leHQpIHx8ICFzdGF0ZS5pbk1veigpKSB7CiAgICAgIGlmIChkZWxlZ2F0aW5nWWllbGQgfHwKICAgICAgICAgIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIjsiICYmICFzdGF0ZS5vcHRpb24uYXNpICYmCiAgICAgICAgICAgIXN0YXRlLnRva2Vucy5uZXh0LnJlYWNoICYmIHN0YXRlLnRva2Vucy5uZXh0Lm51ZCkpIHsKCiAgICAgICAgbm9icmVha25vbmFkamFjZW50KHN0YXRlLnRva2Vucy5jdXJyLCBzdGF0ZS50b2tlbnMubmV4dCk7CiAgICAgICAgdGhpcy5maXJzdCA9IGV4cHJlc3Npb24oMTApOwoKICAgICAgICBpZiAodGhpcy5maXJzdC50eXBlID09PSAiKHB1bmN0dWF0b3IpIiAmJiB0aGlzLmZpcnN0LnZhbHVlID09PSAiPSIgJiYKICAgICAgICAgICAgIXRoaXMuZmlyc3QucGFyZW4gJiYgIXN0YXRlLm9wdGlvbi5ib3NzKSB7CiAgICAgICAgICB3YXJuaW5nQXQoIlcwOTMiLCB0aGlzLmZpcnN0LmxpbmUsIHRoaXMuZmlyc3QuY2hhcmFjdGVyKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5pbk1veigpICYmIHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKSIgJiYKICAgICAgICAgIChwcmV2LmxicCA+IDMwIHx8ICghcHJldi5hc3NpZ24gJiYgIWlzRW5kT2ZFeHByKCkpIHx8IHByZXYuaWQgPT09ICJ5aWVsZCIpKSB7CiAgICAgICAgZXJyb3IoIkUwNTAiLCB0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghc3RhdGUub3B0aW9uLmFzaSkgewogICAgICBub2xpbmVicmVhayh0aGlzKTsgLy8gYWx3YXlzIHdhcm4gKExpbmUgYnJlYWtpbmcgZXJyb3IpCiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9KSkpOwoKCiAgc3RtdCgidGhyb3ciLCBmdW5jdGlvbigpIHsKICAgIG5vbGluZWJyZWFrKHRoaXMpOwogICAgdGhpcy5maXJzdCA9IGV4cHJlc3Npb24oMjApOwoKICAgIHJlYWNoYWJsZSh0aGlzKTsKCiAgICByZXR1cm4gdGhpczsKICB9KS5leHBzID0gdHJ1ZTsKCiAgc3RtdCgiaW1wb3J0IiwgZnVuY3Rpb24oKSB7CiAgICBpZiAoIXN0YXRlLmluRVM2KCkpIHsKICAgICAgd2FybmluZygiVzExOSIsIHN0YXRlLnRva2Vucy5jdXJyLCAiaW1wb3J0IiwgIjYiKTsKICAgIH0KCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudHlwZSA9PT0gIihzdHJpbmcpIikgewogICAgICBhZHZhbmNlKCIoc3RyaW5nKSIpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWRlbnRpZmllcikgewogICAgICB0aGlzLm5hbWUgPSBpZGVudGlmaWVyKCk7CiAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkbGFiZWwodGhpcy5uYW1lLCB7CiAgICAgICAgdHlwZTogImNvbnN0IiwKICAgICAgICB0b2tlbjogc3RhdGUudG9rZW5zLmN1cnIgfSk7CgogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICIsIikgewogICAgICAgIGFkdmFuY2UoIiwiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZHZhbmNlKCJmcm9tIik7CiAgICAgICAgYWR2YW5jZSgiKHN0cmluZykiKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfQoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIioiKSB7CiAgICAgIGFkdmFuY2UoIioiKTsKICAgICAgYWR2YW5jZSgiYXMiKTsKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXIpIHsKICAgICAgICB0aGlzLm5hbWUgPSBpZGVudGlmaWVyKCk7CiAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbCh0aGlzLm5hbWUsIHsKICAgICAgICAgIHR5cGU6ICJjb25zdCIsCiAgICAgICAgICB0b2tlbjogc3RhdGUudG9rZW5zLmN1cnIgfSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFkdmFuY2UoInsiKTsKICAgICAgZm9yICg7OykgewogICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIn0iKSB7CiAgICAgICAgICBhZHZhbmNlKCJ9Iik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdmFyIGltcG9ydE5hbWU7CiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnR5cGUgPT09ICJkZWZhdWx0IikgewogICAgICAgICAgaW1wb3J0TmFtZSA9ICJkZWZhdWx0IjsKICAgICAgICAgIGFkdmFuY2UoImRlZmF1bHQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW1wb3J0TmFtZSA9IGlkZW50aWZpZXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlID09PSAiYXMiKSB7CiAgICAgICAgICBhZHZhbmNlKCJhcyIpOwogICAgICAgICAgaW1wb3J0TmFtZSA9IGlkZW50aWZpZXIoKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5hZGRsYWJlbChpbXBvcnROYW1lLCB7CiAgICAgICAgICB0eXBlOiAiY29uc3QiLAogICAgICAgICAgdG9rZW46IHN0YXRlLnRva2Vucy5jdXJyIH0pOwoKICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICIsIikgewogICAgICAgICAgYWR2YW5jZSgiLCIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICJ9IikgewogICAgICAgICAgYWR2YW5jZSgifSIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVycm9yKCJFMDI0Iiwgc3RhdGUudG9rZW5zLm5leHQsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYWR2YW5jZSgiZnJvbSIpOwogICAgYWR2YW5jZSgiKHN0cmluZykiKTsKICAgIHJldHVybiB0aGlzOwogIH0pLmV4cHMgPSB0cnVlOwoKICBzdG10KCJleHBvcnQiLCBmdW5jdGlvbigpIHsKICAgIHZhciBvayA9IHRydWU7CiAgICB2YXIgdG9rZW47CiAgICB2YXIgaWRlbnRpZmllcjsKCiAgICBpZiAoIXN0YXRlLmluRVM2KCkpIHsKICAgICAgd2FybmluZygiVzExOSIsIHN0YXRlLnRva2Vucy5jdXJyLCAiZXhwb3J0IiwgIjYiKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAoIXN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2suaXNHbG9iYWwoKSkgewogICAgICBlcnJvcigiRTA1MyIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgb2sgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICIqIikgewogICAgICBhZHZhbmNlKCIqIik7CiAgICAgIGFkdmFuY2UoImZyb20iKTsKICAgICAgYWR2YW5jZSgiKHN0cmluZykiKTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnR5cGUgPT09ICJkZWZhdWx0IikgewogICAgICBzdGF0ZS5uYW1lU3RhY2suc2V0KHN0YXRlLnRva2Vucy5uZXh0KTsKICAgICAgYWR2YW5jZSgiZGVmYXVsdCIpOwogICAgICB2YXIgZXhwb3J0VHlwZSA9IHN0YXRlLnRva2Vucy5uZXh0LmlkOwogICAgICBpZiAoZXhwb3J0VHlwZSA9PT0gImZ1bmN0aW9uIiB8fCBleHBvcnRUeXBlID09PSAiY2xhc3MiKSB7CiAgICAgICAgdGhpcy5ibG9jayA9IHRydWU7CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGVlaygpOwoKICAgICAgZXhwcmVzc2lvbigxMCk7CgogICAgICBpZGVudGlmaWVyID0gdG9rZW4udmFsdWU7CgogICAgICBpZiAodGhpcy5ibG9jaykgewogICAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYWRkbGFiZWwoaWRlbnRpZmllciwgewogICAgICAgICAgdHlwZTogZXhwb3J0VHlwZSwKICAgICAgICAgIHRva2VuOiB0b2tlbiB9KTsKCiAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5zZXRFeHBvcnRlZChpZGVudGlmaWVyLCB0b2tlbik7CiAgICAgIH0KCiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gInsiKSB7CiAgICAgIGFkdmFuY2UoInsiKTsKICAgICAgdmFyIGV4cG9ydGVkVG9rZW5zID0gW107CiAgICAgIGZvciAoOzspIHsKICAgICAgICBpZiAoIXN0YXRlLnRva2Vucy5uZXh0LmlkZW50aWZpZXIpIHsKICAgICAgICAgIGVycm9yKCJFMDMwIiwgc3RhdGUudG9rZW5zLm5leHQsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgICB9CiAgICAgICAgYWR2YW5jZSgpOwoKICAgICAgICBleHBvcnRlZFRva2Vucy5wdXNoKHN0YXRlLnRva2Vucy5jdXJyKTsKCiAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlID09PSAiYXMiKSB7CiAgICAgICAgICBhZHZhbmNlKCJhcyIpOwogICAgICAgICAgaWYgKCFzdGF0ZS50b2tlbnMubmV4dC5pZGVudGlmaWVyKSB7CiAgICAgICAgICAgIGVycm9yKCJFMDMwIiwgc3RhdGUudG9rZW5zLm5leHQsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIiwiKSB7CiAgICAgICAgICBhZHZhbmNlKCIsIik7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gIn0iKSB7CiAgICAgICAgICBhZHZhbmNlKCJ9Iik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZXJyb3IoIkUwMjQiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSA9PT0gImZyb20iKSB7CiAgICAgICAgYWR2YW5jZSgiZnJvbSIpOwogICAgICAgIGFkdmFuY2UoIihzdHJpbmcpIik7CiAgICAgIH0gZWxzZSBpZiAob2spIHsKICAgICAgICBleHBvcnRlZFRva2Vucy5mb3JFYWNoKGZ1bmN0aW9uKHRva2VuKSB7CiAgICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnNldEV4cG9ydGVkKHRva2VuLnZhbHVlLCB0b2tlbik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAidmFyIikgewogICAgICBhZHZhbmNlKCJ2YXIiKTsKICAgICAgc3RhdGUudG9rZW5zLmN1cnIuZnVkKHsgaW5leHBvcnQ6dHJ1ZSB9KTsKICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgPT09ICJsZXQiKSB7CiAgICAgIGFkdmFuY2UoImxldCIpOwogICAgICBzdGF0ZS50b2tlbnMuY3Vyci5mdWQoeyBpbmV4cG9ydDp0cnVlIH0pOwogICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gImNvbnN0IikgewogICAgICBhZHZhbmNlKCJjb25zdCIpOwogICAgICBzdGF0ZS50b2tlbnMuY3Vyci5mdWQoeyBpbmV4cG9ydDp0cnVlIH0pOwogICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gImZ1bmN0aW9uIikgewogICAgICB0aGlzLmJsb2NrID0gdHJ1ZTsKICAgICAgYWR2YW5jZSgiZnVuY3Rpb24iKTsKICAgICAgc3RhdGUuc3ludGF4WyJmdW5jdGlvbiJdLmZ1ZCh7IGluZXhwb3J0OnRydWUgfSk7CiAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiY2xhc3MiKSB7CiAgICAgIHRoaXMuYmxvY2sgPSB0cnVlOwogICAgICBhZHZhbmNlKCJjbGFzcyIpOwogICAgICB2YXIgY2xhc3NOYW1lVG9rZW4gPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgc3RhdGUuc3ludGF4WyJjbGFzcyJdLmZ1ZCgpOwogICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnNldEV4cG9ydGVkKGNsYXNzTmFtZVRva2VuLnZhbHVlLCBjbGFzc05hbWVUb2tlbik7CiAgICB9IGVsc2UgewogICAgICBlcnJvcigiRTAyNCIsIHN0YXRlLnRva2Vucy5uZXh0LCBzdGF0ZS50b2tlbnMubmV4dC52YWx1ZSk7CiAgICB9CgogICAgcmV0dXJuIHRoaXM7CiAgfSkuZXhwcyA9IHRydWU7CgogIEZ1dHVyZVJlc2VydmVkV29yZCgiYWJzdHJhY3QiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImJvb2xlYW4iKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImJ5dGUiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImNoYXIiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImNsYXNzIiwgeyBlczU6IHRydWUsIG51ZDogY2xhc3NkZWYgfSk7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJkb3VibGUiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImVudW0iLCB7IGVzNTogdHJ1ZSB9KTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImV4cG9ydCIsIHsgZXM1OiB0cnVlIH0pOwogIEZ1dHVyZVJlc2VydmVkV29yZCgiZXh0ZW5kcyIsIHsgZXM1OiB0cnVlIH0pOwogIEZ1dHVyZVJlc2VydmVkV29yZCgiZmluYWwiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImZsb2F0Iik7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJnb3RvIik7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJpbXBsZW1lbnRzIiwgeyBlczU6IHRydWUsIHN0cmljdE9ubHk6IHRydWUgfSk7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJpbXBvcnQiLCB7IGVzNTogdHJ1ZSB9KTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoImludCIpOwogIEZ1dHVyZVJlc2VydmVkV29yZCgiaW50ZXJmYWNlIiwgeyBlczU6IHRydWUsIHN0cmljdE9ubHk6IHRydWUgfSk7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJsb25nIik7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJuYXRpdmUiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoInBhY2thZ2UiLCB7IGVzNTogdHJ1ZSwgc3RyaWN0T25seTogdHJ1ZSB9KTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoInByaXZhdGUiLCB7IGVzNTogdHJ1ZSwgc3RyaWN0T25seTogdHJ1ZSB9KTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoInByb3RlY3RlZCIsIHsgZXM1OiB0cnVlLCBzdHJpY3RPbmx5OiB0cnVlIH0pOwogIEZ1dHVyZVJlc2VydmVkV29yZCgicHVibGljIiwgeyBlczU6IHRydWUsIHN0cmljdE9ubHk6IHRydWUgfSk7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJzaG9ydCIpOwogIEZ1dHVyZVJlc2VydmVkV29yZCgic3RhdGljIiwgeyBlczU6IHRydWUsIHN0cmljdE9ubHk6IHRydWUgfSk7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJzdXBlciIsIHsgZXM1OiB0cnVlIH0pOwogIEZ1dHVyZVJlc2VydmVkV29yZCgic3luY2hyb25pemVkIik7CiAgRnV0dXJlUmVzZXJ2ZWRXb3JkKCJ0cmFuc2llbnQiKTsKICBGdXR1cmVSZXNlcnZlZFdvcmQoInZvbGF0aWxlIik7CgogIHZhciBsb29rdXBCbG9ja1R5cGUgPSBmdW5jdGlvbigpIHsKICAgIHZhciBwbiwgcG4xLCBwcmV2OwogICAgdmFyIGkgPSAtMTsKICAgIHZhciBicmFja2V0U3RhY2sgPSAwOwogICAgdmFyIHJldCA9IHt9OwogICAgaWYgKGNoZWNrUHVuY3R1YXRvcnMoc3RhdGUudG9rZW5zLmN1cnIsIFsiWyIsICJ7Il0pKSB7CiAgICAgIGJyYWNrZXRTdGFjayArPSAxOwogICAgfQogICAgZG8gewogICAgICBwcmV2ID0gaSA9PT0gLTEgPyBzdGF0ZS50b2tlbnMuY3VyciA6IHBuOwogICAgICBwbiA9IGkgPT09IC0xID8gc3RhdGUudG9rZW5zLm5leHQgOiBwZWVrKGkpOwogICAgICBwbjEgPSBwZWVrKGkgKyAxKTsKICAgICAgaSA9IGkgKyAxOwogICAgICBpZiAoY2hlY2tQdW5jdHVhdG9ycyhwbiwgWyJbIiwgInsiXSkpIHsKICAgICAgICBicmFja2V0U3RhY2sgKz0gMTsKICAgICAgfSBlbHNlIGlmIChjaGVja1B1bmN0dWF0b3JzKHBuLCBbIl0iLCAifSJdKSkgewogICAgICAgIGJyYWNrZXRTdGFjayAtPSAxOwogICAgICB9CiAgICAgIGlmIChicmFja2V0U3RhY2sgPT09IDEgJiYgcG4uaWRlbnRpZmllciAmJiBwbi52YWx1ZSA9PT0gImZvciIgJiYKICAgICAgICAgICFjaGVja1B1bmN0dWF0b3IocHJldiwgIi4iKSkgewogICAgICAgIHJldC5pc0NvbXBBcnJheSA9IHRydWU7CiAgICAgICAgcmV0Lm5vdEpzb24gPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChicmFja2V0U3RhY2sgPT09IDAgJiYgY2hlY2tQdW5jdHVhdG9ycyhwbiwgWyJ9IiwgIl0iXSkpIHsKICAgICAgICBpZiAocG4xLnZhbHVlID09PSAiPSIpIHsKICAgICAgICAgIHJldC5pc0Rlc3RBc3NpZ24gPSB0cnVlOwogICAgICAgICAgcmV0Lm5vdEpzb24gPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChwbjEudmFsdWUgPT09ICIuIikgewogICAgICAgICAgcmV0Lm5vdEpzb24gPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGVja1B1bmN0dWF0b3IocG4sICI7IikpIHsKICAgICAgICByZXQuaXNCbG9jayA9IHRydWU7CiAgICAgICAgcmV0Lm5vdEpzb24gPSB0cnVlOwogICAgICB9CiAgICB9IHdoaWxlIChicmFja2V0U3RhY2sgPiAwICYmIHBuLmlkICE9PSAiKGVuZCkiKTsKICAgIHJldHVybiByZXQ7CiAgfTsKCiAgZnVuY3Rpb24gc2F2ZVByb3BlcnR5KHByb3BzLCBuYW1lLCB0a24sIGlzQ2xhc3MsIGlzU3RhdGljKSB7CiAgICB2YXIgbXNnID0gWyJrZXkiLCAiY2xhc3MgbWV0aG9kIiwgInN0YXRpYyBjbGFzcyBtZXRob2QiXTsKICAgIG1zZyA9IG1zZ1soaXNDbGFzcyB8fCBmYWxzZSkgKyAoaXNTdGF0aWMgfHwgZmFsc2UpXTsKICAgIGlmICh0a24uaWRlbnRpZmllcikgewogICAgICBuYW1lID0gdGtuLnZhbHVlOwogICAgfQoKICAgIGlmIChwcm9wc1tuYW1lXSAmJiBuYW1lICE9PSAiX19wcm90b19fIikgewogICAgICB3YXJuaW5nKCJXMDc1Iiwgc3RhdGUudG9rZW5zLm5leHQsIG1zZywgbmFtZSk7CiAgICB9IGVsc2UgewogICAgICBwcm9wc1tuYW1lXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICB9CgogICAgcHJvcHNbbmFtZV0uYmFzaWMgPSB0cnVlOwogICAgcHJvcHNbbmFtZV0uYmFzaWN0a24gPSB0a247CiAgfQogIGZ1bmN0aW9uIHNhdmVBY2Nlc3NvcihhY2Nlc3NvclR5cGUsIHByb3BzLCBuYW1lLCB0a24sIGlzQ2xhc3MsIGlzU3RhdGljKSB7CiAgICB2YXIgZmxhZ05hbWUgPSBhY2Nlc3NvclR5cGUgPT09ICJnZXQiID8gImdldHRlclRva2VuIiA6ICJzZXR0ZXJUb2tlbiI7CiAgICB2YXIgbXNnID0gIiI7CgogICAgaWYgKGlzQ2xhc3MpIHsKICAgICAgaWYgKGlzU3RhdGljKSB7CiAgICAgICAgbXNnICs9ICJzdGF0aWMgIjsKICAgICAgfQogICAgICBtc2cgKz0gYWNjZXNzb3JUeXBlICsgInRlciBtZXRob2QiOwogICAgfSBlbHNlIHsKICAgICAgbXNnID0gImtleSI7CiAgICB9CgogICAgc3RhdGUudG9rZW5zLmN1cnIuYWNjZXNzb3JUeXBlID0gYWNjZXNzb3JUeXBlOwogICAgc3RhdGUubmFtZVN0YWNrLnNldCh0a24pOwoKICAgIGlmIChwcm9wc1tuYW1lXSkgewogICAgICBpZiAoKHByb3BzW25hbWVdLmJhc2ljIHx8IHByb3BzW25hbWVdW2ZsYWdOYW1lXSkgJiYgbmFtZSAhPT0gIl9fcHJvdG9fXyIpIHsKICAgICAgICB3YXJuaW5nKCJXMDc1Iiwgc3RhdGUudG9rZW5zLm5leHQsIG1zZywgbmFtZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHByb3BzW25hbWVdID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICAgIH0KCiAgICBwcm9wc1tuYW1lXVtmbGFnTmFtZV0gPSB0a247CiAgfQoKICBmdW5jdGlvbiBjb21wdXRlZFByb3BlcnR5TmFtZSgpIHsKICAgIGFkdmFuY2UoIlsiKTsKICAgIGlmICghc3RhdGUuaW5FUzYoKSkgewogICAgICB3YXJuaW5nKCJXMTE5Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJjb21wdXRlZCBwcm9wZXJ0eSBuYW1lcyIsICI2Iik7CiAgICB9CiAgICB2YXIgdmFsdWUgPSBleHByZXNzaW9uKDEwKTsKICAgIGFkdmFuY2UoIl0iKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CiAgZnVuY3Rpb24gY2hlY2tQdW5jdHVhdG9ycyh0b2tlbiwgdmFsdWVzKSB7CiAgICBpZiAodG9rZW4udHlwZSA9PT0gIihwdW5jdHVhdG9yKSIpIHsKICAgICAgcmV0dXJuIF8uY29udGFpbnModmFsdWVzLCB0b2tlbi52YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGNoZWNrUHVuY3R1YXRvcih0b2tlbiwgdmFsdWUpIHsKICAgIHJldHVybiB0b2tlbi50eXBlID09PSAiKHB1bmN0dWF0b3IpIiAmJiB0b2tlbi52YWx1ZSA9PT0gdmFsdWU7CiAgfQogIGZ1bmN0aW9uIGRlc3RydWN0dXJpbmdBc3NpZ25Pckpzb25WYWx1ZSgpIHsKCiAgICB2YXIgYmxvY2sgPSBsb29rdXBCbG9ja1R5cGUoKTsKICAgIGlmIChibG9jay5ub3RKc29uKSB7CiAgICAgIGlmICghc3RhdGUuaW5FUzYoKSAmJiBibG9jay5pc0Rlc3RBc3NpZ24pIHsKICAgICAgICB3YXJuaW5nKCJXMTA0Iiwgc3RhdGUudG9rZW5zLmN1cnIsICJkZXN0cnVjdHVyaW5nIGFzc2lnbm1lbnQiLCAiNiIpOwogICAgICB9CiAgICAgIHN0YXRlbWVudHMoKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0YXRlLm9wdGlvbi5sYXhicmVhayA9IHRydWU7CiAgICAgIHN0YXRlLmpzb25Nb2RlID0gdHJ1ZTsKICAgICAganNvblZhbHVlKCk7CiAgICB9CiAgfQoKICB2YXIgYXJyYXlDb21wcmVoZW5zaW9uID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgQ29tcEFycmF5ID0gZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMubW9kZSA9ICJ1c2UiOwogICAgICB0aGlzLnZhcmlhYmxlcyA9IFtdOwogICAgfTsKICAgIHZhciBfY2FycmF5cyA9IFtdOwogICAgdmFyIF9jdXJyZW50OwogICAgZnVuY3Rpb24gZGVjbGFyZSh2KSB7CiAgICAgIHZhciBsID0gX2N1cnJlbnQudmFyaWFibGVzLmZpbHRlcihmdW5jdGlvbihlbHQpIHsKICAgICAgICBpZiAoZWx0LnZhbHVlID09PSB2KSB7CiAgICAgICAgICBlbHQudW5kZWYgPSBmYWxzZTsKICAgICAgICAgIHJldHVybiB2OwogICAgICAgIH0KICAgICAgfSkubGVuZ3RoOwogICAgICByZXR1cm4gbCAhPT0gMDsKICAgIH0KICAgIGZ1bmN0aW9uIHVzZSh2KSB7CiAgICAgIHZhciBsID0gX2N1cnJlbnQudmFyaWFibGVzLmZpbHRlcihmdW5jdGlvbihlbHQpIHsKICAgICAgICBpZiAoZWx0LnZhbHVlID09PSB2ICYmICFlbHQudW5kZWYpIHsKICAgICAgICAgIGlmIChlbHQudW51c2VkID09PSB0cnVlKSB7CiAgICAgICAgICAgIGVsdC51bnVzZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB2OwogICAgICAgIH0KICAgICAgfSkubGVuZ3RoOwogICAgICByZXR1cm4gKGwgPT09IDApOwogICAgfQogICAgcmV0dXJuIHsgc3RhY2s6IGZ1bmN0aW9uKCkgewogICAgICAgICAgX2N1cnJlbnQgPSBuZXcgQ29tcEFycmF5KCk7CiAgICAgICAgICBfY2FycmF5cy5wdXNoKF9jdXJyZW50KTsKICAgICAgICB9LAogICAgICAgIHVuc3RhY2s6IGZ1bmN0aW9uKCkgewogICAgICAgICAgX2N1cnJlbnQudmFyaWFibGVzLmZpbHRlcihmdW5jdGlvbih2KSB7CiAgICAgICAgICAgIGlmICh2LnVudXNlZCkKICAgICAgICAgICAgICB3YXJuaW5nKCJXMDk4Iiwgdi50b2tlbiwgdi5yYXdfdGV4dCB8fCB2LnZhbHVlKTsKICAgICAgICAgICAgaWYgKHYudW5kZWYpCiAgICAgICAgICAgICAgc3RhdGUuZnVuY3RbIihzY29wZSkiXS5ibG9jay51c2Uodi52YWx1ZSwgdi50b2tlbik7CiAgICAgICAgICB9KTsKICAgICAgICAgIF9jYXJyYXlzLnNwbGljZSgtMSwgMSk7CiAgICAgICAgICBfY3VycmVudCA9IF9jYXJyYXlzW19jYXJyYXlzLmxlbmd0aCAtIDFdOwogICAgICAgIH0sCiAgICAgICAgc2V0U3RhdGU6IGZ1bmN0aW9uKHMpIHsKICAgICAgICAgIGlmIChfLmNvbnRhaW5zKFsidXNlIiwgImRlZmluZSIsICJnZW5lcmF0ZSIsICJmaWx0ZXIiXSwgcykpCiAgICAgICAgICAgIF9jdXJyZW50Lm1vZGUgPSBzOwogICAgICAgIH0sCiAgICAgICAgY2hlY2s6IGZ1bmN0aW9uKHYpIHsKICAgICAgICAgIGlmICghX2N1cnJlbnQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9jdXJyZW50ICYmIF9jdXJyZW50Lm1vZGUgPT09ICJ1c2UiKSB7CiAgICAgICAgICAgIGlmICh1c2UodikpIHsKICAgICAgICAgICAgICBfY3VycmVudC52YXJpYWJsZXMucHVzaCh7CiAgICAgICAgICAgICAgICBmdW5jdDogc3RhdGUuZnVuY3QsCiAgICAgICAgICAgICAgICB0b2tlbjogc3RhdGUudG9rZW5zLmN1cnIsCiAgICAgICAgICAgICAgICB2YWx1ZTogdiwKICAgICAgICAgICAgICAgIHVuZGVmOiB0cnVlLAogICAgICAgICAgICAgICAgdW51c2VkOiBmYWxzZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmIChfY3VycmVudCAmJiBfY3VycmVudC5tb2RlID09PSAiZGVmaW5lIikgewogICAgICAgICAgICBpZiAoIWRlY2xhcmUodikpIHsKICAgICAgICAgICAgICBfY3VycmVudC52YXJpYWJsZXMucHVzaCh7CiAgICAgICAgICAgICAgICBmdW5jdDogc3RhdGUuZnVuY3QsCiAgICAgICAgICAgICAgICB0b2tlbjogc3RhdGUudG9rZW5zLmN1cnIsCiAgICAgICAgICAgICAgICB2YWx1ZTogdiwKICAgICAgICAgICAgICAgIHVuZGVmOiBmYWxzZSwKICAgICAgICAgICAgICAgIHVudXNlZDogdHJ1ZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmIChfY3VycmVudCAmJiBfY3VycmVudC5tb2RlID09PSAiZ2VuZXJhdGUiKSB7CiAgICAgICAgICAgIHN0YXRlLmZ1bmN0WyIoc2NvcGUpIl0uYmxvY2sudXNlKHYsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgaWYgKF9jdXJyZW50ICYmIF9jdXJyZW50Lm1vZGUgPT09ICJmaWx0ZXIiKSB7CiAgICAgICAgICAgIGlmICh1c2UodikpIHsKICAgICAgICAgICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmJsb2NrLnVzZSh2LCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIH07CiAgfTsKCiAgZnVuY3Rpb24ganNvblZhbHVlKCkgewogICAgZnVuY3Rpb24ganNvbk9iamVjdCgpIHsKICAgICAgdmFyIG8gPSB7fSwgdCA9IHN0YXRlLnRva2Vucy5uZXh0OwogICAgICBhZHZhbmNlKCJ7Iik7CiAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCAhPT0gIn0iKSB7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiKGVuZCkiKSB7CiAgICAgICAgICAgIGVycm9yKCJFMDI2Iiwgc3RhdGUudG9rZW5zLm5leHQsIHQubGluZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAifSIpIHsKICAgICAgICAgICAgd2FybmluZygiVzA5NCIsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkID09PSAiLCIpIHsKICAgICAgICAgICAgZXJyb3IoIkUwMjgiLCBzdGF0ZS50b2tlbnMubmV4dCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKHN0cmluZykiKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwOTUiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9bc3RhdGUudG9rZW5zLm5leHQudmFsdWVdID09PSB0cnVlKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwNzUiLCBzdGF0ZS50b2tlbnMubmV4dCwgImtleSIsIHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlKTsKICAgICAgICAgIH0gZWxzZSBpZiAoKHN0YXRlLnRva2Vucy5uZXh0LnZhbHVlID09PSAiX19wcm90b19fIiAmJgogICAgICAgICAgICAhc3RhdGUub3B0aW9uLnByb3RvKSB8fCAoc3RhdGUudG9rZW5zLm5leHQudmFsdWUgPT09ICJfX2l0ZXJhdG9yX18iICYmCiAgICAgICAgICAgICFzdGF0ZS5vcHRpb24uaXRlcmF0b3IpKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwOTYiLCBzdGF0ZS50b2tlbnMubmV4dCwgc3RhdGUudG9rZW5zLm5leHQudmFsdWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb1tzdGF0ZS50b2tlbnMubmV4dC52YWx1ZV0gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgYWR2YW5jZSgpOwogICAgICAgICAgYWR2YW5jZSgiOiIpOwogICAgICAgICAganNvblZhbHVlKCk7CiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIsIikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGFkdmFuY2UoIiwiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWR2YW5jZSgifSIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGpzb25BcnJheSgpIHsKICAgICAgdmFyIHQgPSBzdGF0ZS50b2tlbnMubmV4dDsKICAgICAgYWR2YW5jZSgiWyIpOwogICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICJdIikgewogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIihlbmQpIikgewogICAgICAgICAgICBlcnJvcigiRTAyNyIsIHN0YXRlLnRva2Vucy5uZXh0LCB0LmxpbmUpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIl0iKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwOTQiLCBzdGF0ZS50b2tlbnMuY3Vycik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbnMubmV4dC5pZCA9PT0gIiwiKSB7CiAgICAgICAgICAgIGVycm9yKCJFMDI4Iiwgc3RhdGUudG9rZW5zLm5leHQpOwogICAgICAgICAgfQogICAgICAgICAganNvblZhbHVlKCk7CiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5zLm5leHQuaWQgIT09ICIsIikgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGFkdmFuY2UoIiwiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWR2YW5jZSgiXSIpOwogICAgfQoKICAgIHN3aXRjaCAoc3RhdGUudG9rZW5zLm5leHQuaWQpIHsKICAgIGNhc2UgInsiOgogICAgICBqc29uT2JqZWN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiWyI6CiAgICAgIGpzb25BcnJheSgpOwogICAgICBicmVhazsKICAgIGNhc2UgInRydWUiOgogICAgY2FzZSAiZmFsc2UiOgogICAgY2FzZSAibnVsbCI6CiAgICBjYXNlICIobnVtYmVyKSI6CiAgICBjYXNlICIoc3RyaW5nKSI6CiAgICAgIGFkdmFuY2UoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlICItIjoKICAgICAgYWR2YW5jZSgiLSIpOwogICAgICBhZHZhbmNlKCIobnVtYmVyKSIpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGVycm9yKCJFMDAzIiwgc3RhdGUudG9rZW5zLm5leHQpOwogICAgfQogIH0KCiAgdmFyIGVzY2FwZVJlZ2V4ID0gZnVuY3Rpb24oc3RyKSB7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCAiXFwkJiIpOwogIH07CiAgdmFyIGl0c2VsZiA9IGZ1bmN0aW9uKHMsIG8sIGcpIHsKICAgIHZhciBpLCBrLCB4LCByZUlnbm9yZVN0ciwgcmVJZ25vcmU7CiAgICB2YXIgb3B0aW9uS2V5czsKICAgIHZhciBuZXdPcHRpb25PYmogPSB7fTsKICAgIHZhciBuZXdJZ25vcmVkT2JqID0ge307CgogICAgbyA9IF8uY2xvbmUobyk7CiAgICBzdGF0ZS5yZXNldCgpOwoKICAgIGlmIChvICYmIG8uc2NvcGUpIHsKICAgICAgSlNISU5ULnNjb3BlID0gby5zY29wZTsKICAgIH0gZWxzZSB7CiAgICAgIEpTSElOVC5lcnJvcnMgPSBbXTsKICAgICAgSlNISU5ULnVuZGVmcyA9IFtdOwogICAgICBKU0hJTlQuaW50ZXJuYWxzID0gW107CiAgICAgIEpTSElOVC5ibGFja2xpc3QgPSB7fTsKICAgICAgSlNISU5ULnNjb3BlID0gIihtYWluKSI7CiAgICB9CgogICAgcHJlZGVmaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICBjb21iaW5lKHByZWRlZmluZWQsIHZhcnMuZWNtYUlkZW50aWZpZXJzWzNdKTsKICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgdmFycy5yZXNlcnZlZFZhcnMpOwoKICAgIGNvbWJpbmUocHJlZGVmaW5lZCwgZyB8fCB7fSk7CgogICAgZGVjbGFyZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgdmFyIGV4cG9ydGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTsgLy8gVmFyaWFibGVzIHRoYXQgbGl2ZSBvdXRzaWRlIHRoZSBjdXJyZW50IGZpbGUKCiAgICBmdW5jdGlvbiBlYWNoKG9iaiwgY2IpIHsKICAgICAgaWYgKCFvYmopCiAgICAgICAgcmV0dXJuOwoKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iaikgJiYgdHlwZW9mIG9iaiA9PT0gIm9iamVjdCIpCiAgICAgICAgb2JqID0gT2JqZWN0LmtleXMob2JqKTsKCiAgICAgIG9iai5mb3JFYWNoKGNiKTsKICAgIH0KCiAgICBpZiAobykgewogICAgICBlYWNoKG8ucHJlZGVmIHx8IG51bGwsIGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICB2YXIgc2xpY2UsIHByb3A7CgogICAgICAgIGlmIChpdGVtWzBdID09PSAiLSIpIHsKICAgICAgICAgIHNsaWNlID0gaXRlbS5zbGljZSgxKTsKICAgICAgICAgIEpTSElOVC5ibGFja2xpc3Rbc2xpY2VdID0gc2xpY2U7CiAgICAgICAgICBkZWxldGUgcHJlZGVmaW5lZFtzbGljZV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByb3AgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8ucHJlZGVmLCBpdGVtKTsKICAgICAgICAgIHByZWRlZmluZWRbaXRlbV0gPSBwcm9wID8gcHJvcC52YWx1ZSA6IGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICBlYWNoKG8uZXhwb3J0ZWQgfHwgbnVsbCwgZnVuY3Rpb24oaXRlbSkgewogICAgICAgIGV4cG9ydGVkW2l0ZW1dID0gdHJ1ZTsKICAgICAgfSk7CgogICAgICBkZWxldGUgby5wcmVkZWY7CiAgICAgIGRlbGV0ZSBvLmV4cG9ydGVkOwoKICAgICAgb3B0aW9uS2V5cyA9IE9iamVjdC5rZXlzKG8pOwogICAgICBmb3IgKHggPSAwOyB4IDwgb3B0aW9uS2V5cy5sZW5ndGg7IHgrKykgewogICAgICAgIGlmICgvXi1XXGR7M30kL2cudGVzdChvcHRpb25LZXlzW3hdKSkgewogICAgICAgICAgbmV3SWdub3JlZE9ialtvcHRpb25LZXlzW3hdLnNsaWNlKDEpXSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBvcHRpb25LZXkgPSBvcHRpb25LZXlzW3hdOwogICAgICAgICAgbmV3T3B0aW9uT2JqW29wdGlvbktleV0gPSBvW29wdGlvbktleV07CiAgICAgICAgICBpZiAoKG9wdGlvbktleSA9PT0gImVzdmVyc2lvbiIgJiYgb1tvcHRpb25LZXldID09PSA1KSB8fAogICAgICAgICAgICAgIChvcHRpb25LZXkgPT09ICJlczUiICYmIG9bb3B0aW9uS2V5XSkpIHsKICAgICAgICAgICAgd2FybmluZygiSTAwMyIpOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChvcHRpb25LZXlzW3hdID09PSAibmV3Y2FwIiAmJiBvW29wdGlvbktleV0gPT09IGZhbHNlKQogICAgICAgICAgICBuZXdPcHRpb25PYmpbIihleHBsaWNpdE5ld2NhcCkiXSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgc3RhdGUub3B0aW9uID0gbmV3T3B0aW9uT2JqOwogICAgc3RhdGUuaWdub3JlZCA9IG5ld0lnbm9yZWRPYmo7CgogICAgc3RhdGUub3B0aW9uLmluZGVudCA9IHN0YXRlLm9wdGlvbi5pbmRlbnQgfHwgNDsKICAgIHN0YXRlLm9wdGlvbi5tYXhlcnIgPSBzdGF0ZS5vcHRpb24ubWF4ZXJyIHx8IDUwOwoKICAgIGluZGVudCA9IDE7CgogICAgdmFyIHNjb3BlTWFuYWdlckluc3QgPSBzY29wZU1hbmFnZXIoc3RhdGUsIHByZWRlZmluZWQsIGV4cG9ydGVkLCBkZWNsYXJlZCk7CiAgICBzY29wZU1hbmFnZXJJbnN0Lm9uKCJ3YXJuaW5nIiwgZnVuY3Rpb24oZXYpIHsKICAgICAgd2FybmluZy5hcHBseShudWxsLCBbIGV2LmNvZGUsIGV2LnRva2VuXS5jb25jYXQoZXYuZGF0YSkpOwogICAgfSk7CgogICAgc2NvcGVNYW5hZ2VySW5zdC5vbigiZXJyb3IiLCBmdW5jdGlvbihldikgewogICAgICBlcnJvci5hcHBseShudWxsLCBbIGV2LmNvZGUsIGV2LnRva2VuIF0uY29uY2F0KGV2LmRhdGEpKTsKICAgIH0pOwoKICAgIHN0YXRlLmZ1bmN0ID0gZnVuY3RvcigiKGdsb2JhbCkiLCBudWxsLCB7CiAgICAgICIoZ2xvYmFsKSIgICAgOiB0cnVlLAogICAgICAiKHNjb3BlKSIgICAgIDogc2NvcGVNYW5hZ2VySW5zdCwKICAgICAgIihjb21wYXJyYXkpIiA6IGFycmF5Q29tcHJlaGVuc2lvbigpLAogICAgICAiKG1ldHJpY3MpIiAgIDogY3JlYXRlTWV0cmljcyhzdGF0ZS50b2tlbnMubmV4dCkKICAgIH0pOwoKICAgIGZ1bmN0aW9ucyA9IFtzdGF0ZS5mdW5jdF07CiAgICB1cmxzID0gW107CiAgICBzdGFjayA9IG51bGw7CiAgICBtZW1iZXIgPSB7fTsKICAgIG1lbWJlcnNPbmx5ID0gbnVsbDsKICAgIGluYmxvY2sgPSBmYWxzZTsKICAgIGxvb2thaGVhZCA9IFtdOwoKICAgIGlmICghaXNTdHJpbmcocykgJiYgIUFycmF5LmlzQXJyYXkocykpIHsKICAgICAgZXJyb3JBdCgiRTAwNCIsIDApOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYXBpID0gewogICAgICBnZXQgaXNKU09OKCkgewogICAgICAgIHJldHVybiBzdGF0ZS5qc29uTW9kZTsKICAgICAgfSwKCiAgICAgIGdldE9wdGlvbjogZnVuY3Rpb24obmFtZSkgewogICAgICAgIHJldHVybiBzdGF0ZS5vcHRpb25bbmFtZV0gfHwgbnVsbDsKICAgICAgfSwKCiAgICAgIGdldENhY2hlOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgcmV0dXJuIHN0YXRlLmNhY2hlW25hbWVdOwogICAgICB9LAoKICAgICAgc2V0Q2FjaGU6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgc3RhdGUuY2FjaGVbbmFtZV0gPSB2YWx1ZTsKICAgICAgfSwKCiAgICAgIHdhcm46IGZ1bmN0aW9uKGNvZGUsIGRhdGEpIHsKICAgICAgICB3YXJuaW5nQXQuYXBwbHkobnVsbCwgWyBjb2RlLCBkYXRhLmxpbmUsIGRhdGEuY2hhciBdLmNvbmNhdChkYXRhLmRhdGEpKTsKICAgICAgfSwKCiAgICAgIG9uOiBmdW5jdGlvbihuYW1lcywgbGlzdGVuZXIpIHsKICAgICAgICBuYW1lcy5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7CiAgICAgICAgfS5iaW5kKHRoaXMpKTsKICAgICAgfQogICAgfTsKCiAgICBlbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpOwogICAgKGV4dHJhTW9kdWxlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihmdW5jKSB7CiAgICAgIGZ1bmMoYXBpKTsKICAgIH0pOwoKICAgIHN0YXRlLnRva2Vucy5wcmV2ID0gc3RhdGUudG9rZW5zLmN1cnIgPSBzdGF0ZS50b2tlbnMubmV4dCA9IHN0YXRlLnN5bnRheFsiKGJlZ2luKSJdOwoKICAgIGlmIChvICYmIG8uaWdub3JlRGVsaW1pdGVycykgewoKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG8uaWdub3JlRGVsaW1pdGVycykpIHsKICAgICAgICBvLmlnbm9yZURlbGltaXRlcnMgPSBbby5pZ25vcmVEZWxpbWl0ZXJzXTsKICAgICAgfQoKICAgICAgby5pZ25vcmVEZWxpbWl0ZXJzLmZvckVhY2goZnVuY3Rpb24oZGVsaW1pdGVyUGFpcikgewogICAgICAgIGlmICghZGVsaW1pdGVyUGFpci5zdGFydCB8fCAhZGVsaW1pdGVyUGFpci5lbmQpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgcmVJZ25vcmVTdHIgPSBlc2NhcGVSZWdleChkZWxpbWl0ZXJQYWlyLnN0YXJ0KSArCiAgICAgICAgICAgICAgICAgICAgICAiW1xcc1xcU10qPyIgKwogICAgICAgICAgICAgICAgICAgICAgZXNjYXBlUmVnZXgoZGVsaW1pdGVyUGFpci5lbmQpOwoKICAgICAgICByZUlnbm9yZSA9IG5ldyBSZWdFeHAocmVJZ25vcmVTdHIsICJpZyIpOwoKICAgICAgICBzID0gcy5yZXBsYWNlKHJlSWdub3JlLCBmdW5jdGlvbihtYXRjaCkgewogICAgICAgICAgcmV0dXJuIG1hdGNoLnJlcGxhY2UoLy4vZywgIiAiKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CgogICAgbGV4ID0gbmV3IExleGVyKHMpOwoKICAgIGxleC5vbigid2FybmluZyIsIGZ1bmN0aW9uKGV2KSB7CiAgICAgIHdhcm5pbmdBdC5hcHBseShudWxsLCBbIGV2LmNvZGUsIGV2LmxpbmUsIGV2LmNoYXJhY3Rlcl0uY29uY2F0KGV2LmRhdGEpKTsKICAgIH0pOwoKICAgIGxleC5vbigiZXJyb3IiLCBmdW5jdGlvbihldikgewogICAgICBlcnJvckF0LmFwcGx5KG51bGwsIFsgZXYuY29kZSwgZXYubGluZSwgZXYuY2hhcmFjdGVyIF0uY29uY2F0KGV2LmRhdGEpKTsKICAgIH0pOwoKICAgIGxleC5vbigiZmF0YWwiLCBmdW5jdGlvbihldikgewogICAgICBxdWl0KCJFMDQxIiwgZXYubGluZSwgZXYuZnJvbSk7CiAgICB9KTsKCiAgICBsZXgub24oIklkZW50aWZpZXIiLCBmdW5jdGlvbihldikgewogICAgICBlbWl0dGVyLmVtaXQoIklkZW50aWZpZXIiLCBldik7CiAgICB9KTsKCiAgICBsZXgub24oIlN0cmluZyIsIGZ1bmN0aW9uKGV2KSB7CiAgICAgIGVtaXR0ZXIuZW1pdCgiU3RyaW5nIiwgZXYpOwogICAgfSk7CgogICAgbGV4Lm9uKCJOdW1iZXIiLCBmdW5jdGlvbihldikgewogICAgICBlbWl0dGVyLmVtaXQoIk51bWJlciIsIGV2KTsKICAgIH0pOwoKICAgIGxleC5zdGFydCgpOwogICAgZm9yICh2YXIgbmFtZSBpbiBvKSB7CiAgICAgIGlmIChfLmhhcyhvLCBuYW1lKSkgewogICAgICAgIGNoZWNrT3B0aW9uKG5hbWUsIHN0YXRlLnRva2Vucy5jdXJyKTsKICAgICAgfQogICAgfQoKICAgIGFzc3VtZSgpOwogICAgY29tYmluZShwcmVkZWZpbmVkLCBnIHx8IHt9KTsKICAgIGNvbW1hLmZpcnN0ID0gdHJ1ZTsKCiAgICB0cnkgewogICAgICBhZHZhbmNlKCk7CiAgICAgIHN3aXRjaCAoc3RhdGUudG9rZW5zLm5leHQuaWQpIHsKICAgICAgY2FzZSAieyI6CiAgICAgIGNhc2UgIlsiOgogICAgICAgIGRlc3RydWN0dXJpbmdBc3NpZ25Pckpzb25WYWx1ZSgpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGRpcmVjdGl2ZXMoKTsKCiAgICAgICAgaWYgKHN0YXRlLmRpcmVjdGl2ZVsidXNlIHN0cmljdCJdKSB7CiAgICAgICAgICBpZiAoc3RhdGUub3B0aW9uLnN0cmljdCAhPT0gImdsb2JhbCIpIHsKICAgICAgICAgICAgd2FybmluZygiVzA5NyIsIHN0YXRlLnRva2Vucy5wcmV2KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHN0YXRlbWVudHMoKTsKICAgICAgfQoKICAgICAgaWYgKHN0YXRlLnRva2Vucy5uZXh0LmlkICE9PSAiKGVuZCkiKSB7CiAgICAgICAgcXVpdCgiRTA0MSIsIHN0YXRlLnRva2Vucy5jdXJyLmxpbmUpOwogICAgICB9CgogICAgICBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLnVuc3RhY2soKTsKCiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gIkpTSGludEVycm9yIikgewogICAgICAgIHZhciBudCA9IHN0YXRlLnRva2Vucy5uZXh0IHx8IHt9OwogICAgICAgIEpTSElOVC5lcnJvcnMucHVzaCh7CiAgICAgICAgICBzY29wZSAgICAgOiAiKG1haW4pIiwKICAgICAgICAgIHJhdyAgICAgICA6IGVyci5yYXcsCiAgICAgICAgICBjb2RlICAgICAgOiBlcnIuY29kZSwKICAgICAgICAgIHJlYXNvbiAgICA6IGVyci5tZXNzYWdlLAogICAgICAgICAgbGluZSAgICAgIDogZXJyLmxpbmUgfHwgbnQubGluZSwKICAgICAgICAgIGNoYXJhY3RlciA6IGVyci5jaGFyYWN0ZXIgfHwgbnQuZnJvbQogICAgICAgIH0sIG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IGVycjsKICAgICAgfQogICAgfQoKICAgIGlmIChKU0hJTlQuc2NvcGUgPT09ICIobWFpbikiKSB7CiAgICAgIG8gPSBvIHx8IHt9OwoKICAgICAgZm9yIChpID0gMDsgaSA8IEpTSElOVC5pbnRlcm5hbHMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICBrID0gSlNISU5ULmludGVybmFsc1tpXTsKICAgICAgICBvLnNjb3BlID0gay5lbGVtOwogICAgICAgIGl0c2VsZihrLnZhbHVlLCBvLCBnKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBKU0hJTlQuZXJyb3JzLmxlbmd0aCA9PT0gMDsKICB9OwogIGl0c2VsZi5hZGRNb2R1bGUgPSBmdW5jdGlvbihmdW5jKSB7CiAgICBleHRyYU1vZHVsZXMucHVzaChmdW5jKTsKICB9OwoKICBpdHNlbGYuYWRkTW9kdWxlKHN0eWxlLnJlZ2lzdGVyKTsKICBpdHNlbGYuZGF0YSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGRhdGEgPSB7CiAgICAgIGZ1bmN0aW9uczogW10sCiAgICAgIG9wdGlvbnM6IHN0YXRlLm9wdGlvbgogICAgfTsKCiAgICB2YXIgZnUsIGYsIGksIGosIG4sIGdsb2JhbHM7CgogICAgaWYgKGl0c2VsZi5lcnJvcnMubGVuZ3RoKSB7CiAgICAgIGRhdGEuZXJyb3JzID0gaXRzZWxmLmVycm9yczsKICAgIH0KCiAgICBpZiAoc3RhdGUuanNvbk1vZGUpIHsKICAgICAgZGF0YS5qc29uID0gdHJ1ZTsKICAgIH0KCiAgICB2YXIgaW1wbGllZEdsb2JhbHMgPSBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmdldEltcGxpZWRHbG9iYWxzKCk7CiAgICBpZiAoaW1wbGllZEdsb2JhbHMubGVuZ3RoID4gMCkgewogICAgICBkYXRhLmltcGxpZWRzID0gaW1wbGllZEdsb2JhbHM7CiAgICB9CgogICAgaWYgKHVybHMubGVuZ3RoID4gMCkgewogICAgICBkYXRhLnVybHMgPSB1cmxzOwogICAgfQoKICAgIGdsb2JhbHMgPSBzdGF0ZS5mdW5jdFsiKHNjb3BlKSJdLmdldFVzZWRPckRlZmluZWRHbG9iYWxzKCk7CiAgICBpZiAoZ2xvYmFscy5sZW5ndGggPiAwKSB7CiAgICAgIGRhdGEuZ2xvYmFscyA9IGdsb2JhbHM7CiAgICB9CgogICAgZm9yIChpID0gMTsgaSA8IGZ1bmN0aW9ucy5sZW5ndGg7IGkgKz0gMSkgewogICAgICBmID0gZnVuY3Rpb25zW2ldOwogICAgICBmdSA9IHt9OwoKICAgICAgZm9yIChqID0gMDsgaiA8IGZ1bmN0aW9uaWNpdHkubGVuZ3RoOyBqICs9IDEpIHsKICAgICAgICBmdVtmdW5jdGlvbmljaXR5W2pdXSA9IFtdOwogICAgICB9CgogICAgICBmb3IgKGogPSAwOyBqIDwgZnVuY3Rpb25pY2l0eS5sZW5ndGg7IGogKz0gMSkgewogICAgICAgIGlmIChmdVtmdW5jdGlvbmljaXR5W2pdXS5sZW5ndGggPT09IDApIHsKICAgICAgICAgIGRlbGV0ZSBmdVtmdW5jdGlvbmljaXR5W2pdXTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1Lm5hbWUgPSBmWyIobmFtZSkiXTsKICAgICAgZnUucGFyYW0gPSBmWyIocGFyYW1zKSJdOwogICAgICBmdS5saW5lID0gZlsiKGxpbmUpIl07CiAgICAgIGZ1LmNoYXJhY3RlciA9IGZbIihjaGFyYWN0ZXIpIl07CiAgICAgIGZ1Lmxhc3QgPSBmWyIobGFzdCkiXTsKICAgICAgZnUubGFzdGNoYXJhY3RlciA9IGZbIihsYXN0Y2hhcmFjdGVyKSJdOwoKICAgICAgZnUubWV0cmljcyA9IHsKICAgICAgICBjb21wbGV4aXR5OiBmWyIobWV0cmljcykiXS5Db21wbGV4aXR5Q291bnQsCiAgICAgICAgcGFyYW1ldGVyczogZlsiKG1ldHJpY3MpIl0uYXJpdHksCiAgICAgICAgc3RhdGVtZW50czogZlsiKG1ldHJpY3MpIl0uc3RhdGVtZW50Q291bnQKICAgICAgfTsKCiAgICAgIGRhdGEuZnVuY3Rpb25zLnB1c2goZnUpOwogICAgfQoKICAgIHZhciB1bnVzZWRzID0gc3RhdGUuZnVuY3RbIihzY29wZSkiXS5nZXRVbnVzZWRzKCk7CiAgICBpZiAodW51c2Vkcy5sZW5ndGggPiAwKSB7CiAgICAgIGRhdGEudW51c2VkID0gdW51c2VkczsKICAgIH0KCiAgICBmb3IgKG4gaW4gbWVtYmVyKSB7CiAgICAgIGlmICh0eXBlb2YgbWVtYmVyW25dID09PSAibnVtYmVyIikgewogICAgICAgIGRhdGEubWVtYmVyID0gbWVtYmVyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRhdGE7CiAgfTsKCiAgaXRzZWxmLmpzaGludCA9IGl0c2VsZjsKCiAgcmV0dXJuIGl0c2VsZjsKfSgpKTsKaWYgKHR5cGVvZiBleHBvcnRzID09PSAib2JqZWN0IiAmJiBleHBvcnRzKSB7CiAgZXhwb3J0cy5KU0hJTlQgPSBKU0hJTlQ7Cn0KCn0seyIuLi9sb2Rhc2giOiIvbm9kZV9tb2R1bGVzL2pzaGludC9sb2Rhc2guanMiLCIuL2xleC5qcyI6Ii9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9sZXguanMiLCIuL21lc3NhZ2VzLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL21lc3NhZ2VzLmpzIiwiLi9vcHRpb25zLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL29wdGlvbnMuanMiLCIuL3JlZy5qcyI6Ii9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9yZWcuanMiLCIuL3Njb3BlLW1hbmFnZXIuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc2NvcGUtbWFuYWdlci5qcyIsIi4vc3RhdGUuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc3RhdGUuanMiLCIuL3N0eWxlLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3N0eWxlLmpzIiwiLi92YXJzLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3ZhcnMuanMiLCJldmVudHMiOiIvbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMifV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9sZXguanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKCiJ1c2Ugc3RyaWN0IjsKCnZhciBfICAgICAgPSBfZGVyZXFfKCIuLi9sb2Rhc2giKTsKdmFyIGV2ZW50cyA9IF9kZXJlcV8oImV2ZW50cyIpOwp2YXIgcmVnICAgID0gX2RlcmVxXygiLi9yZWcuanMiKTsKdmFyIHN0YXRlICA9IF9kZXJlcV8oIi4vc3RhdGUuanMiKS5zdGF0ZTsKCnZhciB1bmljb2RlRGF0YSA9IF9kZXJlcV8oIi4uL2RhdGEvYXNjaWktaWRlbnRpZmllci1kYXRhLmpzIik7CnZhciBhc2NpaUlkZW50aWZpZXJTdGFydFRhYmxlID0gdW5pY29kZURhdGEuYXNjaWlJZGVudGlmaWVyU3RhcnRUYWJsZTsKdmFyIGFzY2lpSWRlbnRpZmllclBhcnRUYWJsZSA9IHVuaWNvZGVEYXRhLmFzY2lpSWRlbnRpZmllclBhcnRUYWJsZTsKCnZhciBUb2tlbiA9IHsKICBJZGVudGlmaWVyOiAxLAogIFB1bmN0dWF0b3I6IDIsCiAgTnVtZXJpY0xpdGVyYWw6IDMsCiAgU3RyaW5nTGl0ZXJhbDogNCwKICBDb21tZW50OiA1LAogIEtleXdvcmQ6IDYsCiAgTnVsbExpdGVyYWw6IDcsCiAgQm9vbGVhbkxpdGVyYWw6IDgsCiAgUmVnRXhwOiA5LAogIFRlbXBsYXRlSGVhZDogMTAsCiAgVGVtcGxhdGVNaWRkbGU6IDExLAogIFRlbXBsYXRlVGFpbDogMTIsCiAgTm9TdWJzdFRlbXBsYXRlOiAxMwp9OwoKdmFyIENvbnRleHQgPSB7CiAgQmxvY2s6IDEsCiAgVGVtcGxhdGU6IDIKfTsKCmZ1bmN0aW9uIGFzeW5jVHJpZ2dlcigpIHsKICB2YXIgX2NoZWNrcyA9IFtdOwoKICByZXR1cm4gewogICAgcHVzaDogZnVuY3Rpb24oZm4pIHsKICAgICAgX2NoZWNrcy5wdXNoKGZuKTsKICAgIH0sCgogICAgY2hlY2s6IGZ1bmN0aW9uKCkgewogICAgICBmb3IgKHZhciBjaGVjayA9IDA7IGNoZWNrIDwgX2NoZWNrcy5sZW5ndGg7ICsrY2hlY2spIHsKICAgICAgICBfY2hlY2tzW2NoZWNrXSgpOwogICAgICB9CgogICAgICBfY2hlY2tzLnNwbGljZSgwLCBfY2hlY2tzLmxlbmd0aCk7CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBMZXhlcihzb3VyY2UpIHsKICB2YXIgbGluZXMgPSBzb3VyY2U7CgogIGlmICh0eXBlb2YgbGluZXMgPT09ICJzdHJpbmciKSB7CiAgICBsaW5lcyA9IGxpbmVzCiAgICAgIC5yZXBsYWNlKC9cclxuL2csICJcbiIpCiAgICAgIC5yZXBsYWNlKC9cci9nLCAiXG4iKQogICAgICAuc3BsaXQoIlxuIik7CiAgfQoKICBpZiAobGluZXNbMF0gJiYgbGluZXNbMF0uc3Vic3RyKDAsIDIpID09PSAiIyEiKSB7CiAgICBpZiAobGluZXNbMF0uaW5kZXhPZigibm9kZSIpICE9PSAtMSkgewogICAgICBzdGF0ZS5vcHRpb24ubm9kZSA9IHRydWU7CiAgICB9CiAgICBsaW5lc1swXSA9ICIiOwogIH0KCiAgdGhpcy5lbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTsKICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKICB0aGlzLnNldExpbmVzKGxpbmVzKTsKICB0aGlzLnByZXJlZyA9IHRydWU7CgogIHRoaXMubGluZSA9IDA7CiAgdGhpcy5jaGFyID0gMTsKICB0aGlzLmZyb20gPSAxOwogIHRoaXMuaW5wdXQgPSAiIjsKICB0aGlzLmluQ29tbWVudCA9IGZhbHNlOwogIHRoaXMuY29udGV4dCA9IFtdOwogIHRoaXMudGVtcGxhdGVTdGFydHMgPSBbXTsKCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5vcHRpb24uaW5kZW50OyBpICs9IDEpIHsKICAgIHN0YXRlLnRhYiArPSAiICI7CiAgfQogIHRoaXMuaWdub3JlTGludGVyRXJyb3JzID0gZmFsc2U7Cn0KCkxleGVyLnByb3RvdHlwZSA9IHsKICBfbGluZXM6IFtdLAoKICBpbkNvbnRleHQ6IGZ1bmN0aW9uKGN0eFR5cGUpIHsKICAgIHJldHVybiB0aGlzLmNvbnRleHQubGVuZ3RoID4gMCAmJiB0aGlzLmNvbnRleHRbdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDFdLnR5cGUgPT09IGN0eFR5cGU7CiAgfSwKCiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKGN0eFR5cGUpIHsKICAgIHRoaXMuY29udGV4dC5wdXNoKHsgdHlwZTogY3R4VHlwZSB9KTsKICB9LAoKICBwb3BDb250ZXh0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmNvbnRleHQucG9wKCk7CiAgfSwKCiAgaXNDb250ZXh0OiBmdW5jdGlvbihjb250ZXh0KSB7CiAgICByZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5sZW5ndGggLSAxXSA9PT0gY29udGV4dDsKICB9LAoKICBjdXJyZW50Q29udGV4dDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5jb250ZXh0Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb250ZXh0W3RoaXMuY29udGV4dC5sZW5ndGggLSAxXTsKICB9LAoKICBnZXRMaW5lczogZnVuY3Rpb24oKSB7CiAgICB0aGlzLl9saW5lcyA9IHN0YXRlLmxpbmVzOwogICAgcmV0dXJuIHRoaXMuX2xpbmVzOwogIH0sCgogIHNldExpbmVzOiBmdW5jdGlvbih2YWwpIHsKICAgIHRoaXMuX2xpbmVzID0gdmFsOwogICAgc3RhdGUubGluZXMgPSB0aGlzLl9saW5lczsKICB9LAogIHBlZWs6IGZ1bmN0aW9uKGkpIHsKICAgIHJldHVybiB0aGlzLmlucHV0LmNoYXJBdChpIHx8IDApOwogIH0sCiAgc2tpcDogZnVuY3Rpb24oaSkgewogICAgaSA9IGkgfHwgMTsKICAgIHRoaXMuY2hhciArPSBpOwogICAgdGhpcy5pbnB1dCA9IHRoaXMuaW5wdXQuc2xpY2UoaSk7CiAgfSwKICBvbjogZnVuY3Rpb24obmFtZXMsIGxpc3RlbmVyKSB7CiAgICBuYW1lcy5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24obmFtZSkgewogICAgICB0aGlzLmVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpOwogICAgfS5iaW5kKHRoaXMpKTsKICB9LAogIHRyaWdnZXI6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5lbWl0dGVyLmVtaXQuYXBwbHkodGhpcy5lbWl0dGVyLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTsKICB9LAogIHRyaWdnZXJBc3luYzogZnVuY3Rpb24odHlwZSwgYXJncywgY2hlY2tzLCBmbikgewogICAgY2hlY2tzLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgIGlmIChmbigpKSB7CiAgICAgICAgdGhpcy50cmlnZ2VyKHR5cGUsIGFyZ3MpOwogICAgICB9CiAgICB9LmJpbmQodGhpcykpOwogIH0sCiAgc2NhblB1bmN0dWF0b3I6IGZ1bmN0aW9uKCkgewogICAgdmFyIGNoMSA9IHRoaXMucGVlaygpOwogICAgdmFyIGNoMiwgY2gzLCBjaDQ7CgogICAgc3dpdGNoIChjaDEpIHsKICAgIGNhc2UgIi4iOgogICAgICBpZiAoKC9eWzAtOV0kLykudGVzdCh0aGlzLnBlZWsoMSkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMucGVlaygxKSA9PT0gIi4iICYmIHRoaXMucGVlaygyKSA9PT0gIi4iKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCiAgICAgICAgICB2YWx1ZTogIi4uLiIKICAgICAgICB9OwogICAgICB9CiAgICBjYXNlICIoIjoKICAgIGNhc2UgIikiOgogICAgY2FzZSAiOyI6CiAgICBjYXNlICIsIjoKICAgIGNhc2UgIlsiOgogICAgY2FzZSAiXSI6CiAgICBjYXNlICI6IjoKICAgIGNhc2UgIn4iOgogICAgY2FzZSAiPyI6CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogY2gxCiAgICAgIH07CiAgICBjYXNlICJ7IjoKICAgICAgdGhpcy5wdXNoQ29udGV4dChDb250ZXh0LkJsb2NrKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAogICAgICAgIHZhbHVlOiBjaDEKICAgICAgfTsKICAgIGNhc2UgIn0iOgogICAgICBpZiAodGhpcy5pbkNvbnRleHQoQ29udGV4dC5CbG9jaykpIHsKICAgICAgICB0aGlzLnBvcENvbnRleHQoKTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCiAgICAgICAgdmFsdWU6IGNoMQogICAgICB9OwogICAgY2FzZSAiIyI6CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogY2gxCiAgICAgIH07CiAgICBjYXNlICIiOgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBjaDIgPSB0aGlzLnBlZWsoMSk7CiAgICBjaDMgPSB0aGlzLnBlZWsoMik7CiAgICBjaDQgPSB0aGlzLnBlZWsoMyk7CgogICAgaWYgKGNoMSA9PT0gIj4iICYmIGNoMiA9PT0gIj4iICYmIGNoMyA9PT0gIj4iICYmIGNoNCA9PT0gIj0iKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogIj4+Pj0iCiAgICAgIH07CiAgICB9CgogICAgaWYgKGNoMSA9PT0gIj0iICYmIGNoMiA9PT0gIj0iICYmIGNoMyA9PT0gIj0iKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogIj09PSIKICAgICAgfTsKICAgIH0KCiAgICBpZiAoY2gxID09PSAiISIgJiYgY2gyID09PSAiPSIgJiYgY2gzID09PSAiPSIpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAogICAgICAgIHZhbHVlOiAiIT09IgogICAgICB9OwogICAgfQoKICAgIGlmIChjaDEgPT09ICI+IiAmJiBjaDIgPT09ICI+IiAmJiBjaDMgPT09ICI+IikgewogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCiAgICAgICAgdmFsdWU6ICI+Pj4iCiAgICAgIH07CiAgICB9CgogICAgaWYgKGNoMSA9PT0gIjwiICYmIGNoMiA9PT0gIjwiICYmIGNoMyA9PT0gIj0iKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogIjw8PSIKICAgICAgfTsKICAgIH0KCiAgICBpZiAoY2gxID09PSAiPiIgJiYgY2gyID09PSAiPiIgJiYgY2gzID09PSAiPSIpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAogICAgICAgIHZhbHVlOiAiPj49IgogICAgICB9OwogICAgfQogICAgaWYgKGNoMSA9PT0gIj0iICYmIGNoMiA9PT0gIj4iKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogY2gxICsgY2gyCiAgICAgIH07CiAgICB9CiAgICBpZiAoY2gxID09PSBjaDIgJiYgKCIrLTw+JnwiLmluZGV4T2YoY2gxKSA+PSAwKSkgewogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCiAgICAgICAgdmFsdWU6IGNoMSArIGNoMgogICAgICB9OwogICAgfQoKICAgIGlmICgiPD49ISstKiUmfF4iLmluZGV4T2YoY2gxKSA+PSAwKSB7CiAgICAgIGlmIChjaDIgPT09ICI9IikgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAogICAgICAgICAgdmFsdWU6IGNoMSArIGNoMgogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKICAgICAgICB2YWx1ZTogY2gxCiAgICAgIH07CiAgICB9CgogICAgaWYgKGNoMSA9PT0gIi8iKSB7CiAgICAgIGlmIChjaDIgPT09ICI9IikgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAogICAgICAgICAgdmFsdWU6ICIvPSIKICAgICAgICB9OwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCiAgICAgICAgdmFsdWU6ICIvIgogICAgICB9OwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0sCiAgc2NhbkNvbW1lbnRzOiBmdW5jdGlvbigpIHsKICAgIHZhciBjaDEgPSB0aGlzLnBlZWsoKTsKICAgIHZhciBjaDIgPSB0aGlzLnBlZWsoMSk7CiAgICB2YXIgcmVzdCA9IHRoaXMuaW5wdXQuc3Vic3RyKDIpOwogICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMubGluZTsKICAgIHZhciBzdGFydENoYXIgPSB0aGlzLmNoYXI7CiAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgZnVuY3Rpb24gY29tbWVudFRva2VuKGxhYmVsLCBib2R5LCBvcHQpIHsKICAgICAgdmFyIHNwZWNpYWwgPSBbImpzaGludCIsICJqc2xpbnQiLCAibWVtYmVycyIsICJtZW1iZXIiLCAiZ2xvYmFscyIsICJnbG9iYWwiLCAiZXhwb3J0ZWQiXTsKICAgICAgdmFyIGlzU3BlY2lhbCA9IGZhbHNlOwogICAgICB2YXIgdmFsdWUgPSBsYWJlbCArIGJvZHk7CiAgICAgIHZhciBjb21tZW50VHlwZSA9ICJwbGFpbiI7CiAgICAgIG9wdCA9IG9wdCB8fCB7fTsKCiAgICAgIGlmIChvcHQuaXNNdWx0aWxpbmUpIHsKICAgICAgICB2YWx1ZSArPSAiKi8iOwogICAgICB9CgogICAgICBib2R5ID0gYm9keS5yZXBsYWNlKC9cbi9nLCAiICIpOwoKICAgICAgaWYgKGxhYmVsID09PSAiLyoiICYmIHJlZy5mYWxsc1Rocm91Z2gudGVzdChib2R5KSkgewogICAgICAgIGlzU3BlY2lhbCA9IHRydWU7CiAgICAgICAgY29tbWVudFR5cGUgPSAiZmFsbHMgdGhyb3VnaCI7CiAgICAgIH0KCiAgICAgIHNwZWNpYWwuZm9yRWFjaChmdW5jdGlvbihzdHIpIHsKICAgICAgICBpZiAoaXNTcGVjaWFsKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChsYWJlbCA9PT0gIi8vIiAmJiBzdHIgIT09ICJqc2hpbnQiKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoYm9keS5jaGFyQXQoc3RyLmxlbmd0aCkgPT09ICIgIiAmJiBib2R5LnN1YnN0cigwLCBzdHIubGVuZ3RoKSA9PT0gc3RyKSB7CiAgICAgICAgICBpc1NwZWNpYWwgPSB0cnVlOwogICAgICAgICAgbGFiZWwgPSBsYWJlbCArIHN0cjsKICAgICAgICAgIGJvZHkgPSBib2R5LnN1YnN0cihzdHIubGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNTcGVjaWFsICYmIGJvZHkuY2hhckF0KDApID09PSAiICIgJiYgYm9keS5jaGFyQXQoc3RyLmxlbmd0aCArIDEpID09PSAiICIgJiYKICAgICAgICAgIGJvZHkuc3Vic3RyKDEsIHN0ci5sZW5ndGgpID09PSBzdHIpIHsKICAgICAgICAgIGlzU3BlY2lhbCA9IHRydWU7CiAgICAgICAgICBsYWJlbCA9IGxhYmVsICsgIiAiICsgc3RyOwogICAgICAgICAgYm9keSA9IGJvZHkuc3Vic3RyKHN0ci5sZW5ndGggKyAxKTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNTcGVjaWFsKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKHN0cikgewogICAgICAgIGNhc2UgIm1lbWJlciI6CiAgICAgICAgICBjb21tZW50VHlwZSA9ICJtZW1iZXJzIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImdsb2JhbCI6CiAgICAgICAgICBjb21tZW50VHlwZSA9ICJnbG9iYWxzIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB2YXIgb3B0aW9ucyA9IGJvZHkuc3BsaXQoIjoiKS5tYXAoZnVuY3Rpb24odikgewogICAgICAgICAgICByZXR1cm4gdi5yZXBsYWNlKC9eXHMrLywgIiIpLnJlcGxhY2UoL1xzKyQvLCAiIik7CiAgICAgICAgICB9KTsKCiAgICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPT09IDIpIHsKICAgICAgICAgICAgc3dpdGNoIChvcHRpb25zWzBdKSB7CiAgICAgICAgICAgIGNhc2UgImlnbm9yZSI6CiAgICAgICAgICAgICAgc3dpdGNoIChvcHRpb25zWzFdKSB7CiAgICAgICAgICAgICAgY2FzZSAic3RhcnQiOgogICAgICAgICAgICAgICAgc2VsZi5pZ25vcmluZ0xpbnRlckVycm9ycyA9IHRydWU7CiAgICAgICAgICAgICAgICBpc1NwZWNpYWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICBzZWxmLmlnbm9yaW5nTGludGVyRXJyb3JzID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpc1NwZWNpYWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGNvbW1lbnRUeXBlID0gc3RyOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICByZXR1cm4gewogICAgICAgIHR5cGU6IFRva2VuLkNvbW1lbnQsCiAgICAgICAgY29tbWVudFR5cGU6IGNvbW1lbnRUeXBlLAogICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIGlzU3BlY2lhbDogaXNTcGVjaWFsLAogICAgICAgIGlzTXVsdGlsaW5lOiBvcHQuaXNNdWx0aWxpbmUgfHwgZmFsc2UsCiAgICAgICAgaXNNYWxmb3JtZWQ6IG9wdC5pc01hbGZvcm1lZCB8fCBmYWxzZQogICAgICB9OwogICAgfQogICAgaWYgKGNoMSA9PT0gIioiICYmIGNoMiA9PT0gIi8iKSB7CiAgICAgIHRoaXMudHJpZ2dlcigiZXJyb3IiLCB7CiAgICAgICAgY29kZTogIkUwMTgiLAogICAgICAgIGxpbmU6IHN0YXJ0TGluZSwKICAgICAgICBjaGFyYWN0ZXI6IHN0YXJ0Q2hhcgogICAgICB9KTsKCiAgICAgIHRoaXMuc2tpcCgyKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoY2gxICE9PSAiLyIgfHwgKGNoMiAhPT0gIioiICYmIGNoMiAhPT0gIi8iKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChjaDIgPT09ICIvIikgewogICAgICB0aGlzLnNraXAodGhpcy5pbnB1dC5sZW5ndGgpOyAvLyBTa2lwIHRvIHRoZSBFT0wuCiAgICAgIHJldHVybiBjb21tZW50VG9rZW4oIi8vIiwgcmVzdCk7CiAgICB9CgogICAgdmFyIGJvZHkgPSAiIjsKICAgIGlmIChjaDIgPT09ICIqIikgewogICAgICB0aGlzLmluQ29tbWVudCA9IHRydWU7CiAgICAgIHRoaXMuc2tpcCgyKTsKCiAgICAgIHdoaWxlICh0aGlzLnBlZWsoKSAhPT0gIioiIHx8IHRoaXMucGVlaygxKSAhPT0gIi8iKSB7CiAgICAgICAgaWYgKHRoaXMucGVlaygpID09PSAiIikgeyAvLyBFbmQgb2YgTGluZQogICAgICAgICAgYm9keSArPSAiXG4iOwogICAgICAgICAgaWYgKCF0aGlzLm5leHRMaW5lKCkpIHsKICAgICAgICAgICAgdGhpcy50cmlnZ2VyKCJlcnJvciIsIHsKICAgICAgICAgICAgICBjb2RlOiAiRTAxNyIsCiAgICAgICAgICAgICAgbGluZTogc3RhcnRMaW5lLAogICAgICAgICAgICAgIGNoYXJhY3Rlcjogc3RhcnRDaGFyCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdGhpcy5pbkNvbW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRUb2tlbigiLyoiLCBib2R5LCB7CiAgICAgICAgICAgICAgaXNNdWx0aWxpbmU6IHRydWUsCiAgICAgICAgICAgICAgaXNNYWxmb3JtZWQ6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJvZHkgKz0gdGhpcy5wZWVrKCk7CiAgICAgICAgICB0aGlzLnNraXAoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRoaXMuc2tpcCgyKTsKICAgICAgdGhpcy5pbkNvbW1lbnQgPSBmYWxzZTsKICAgICAgcmV0dXJuIGNvbW1lbnRUb2tlbigiLyoiLCBib2R5LCB7IGlzTXVsdGlsaW5lOiB0cnVlIH0pOwogICAgfQogIH0sCiAgc2NhbktleXdvcmQ6IGZ1bmN0aW9uKCkgewogICAgdmFyIHJlc3VsdCA9IC9eW2EtekEtWl8kXVthLXpBLVowLTlfJF0qLy5leGVjKHRoaXMuaW5wdXQpOwogICAgdmFyIGtleXdvcmRzID0gWwogICAgICAiaWYiLCAiaW4iLCAiZG8iLCAidmFyIiwgImZvciIsICJuZXciLAogICAgICAidHJ5IiwgImxldCIsICJ0aGlzIiwgImVsc2UiLCAiY2FzZSIsCiAgICAgICJ2b2lkIiwgIndpdGgiLCAiZW51bSIsICJ3aGlsZSIsICJicmVhayIsCiAgICAgICJjYXRjaCIsICJ0aHJvdyIsICJjb25zdCIsICJ5aWVsZCIsICJjbGFzcyIsCiAgICAgICJzdXBlciIsICJyZXR1cm4iLCAidHlwZW9mIiwgImRlbGV0ZSIsCiAgICAgICJzd2l0Y2giLCAiZXhwb3J0IiwgImltcG9ydCIsICJkZWZhdWx0IiwKICAgICAgImZpbmFsbHkiLCAiZXh0ZW5kcyIsICJmdW5jdGlvbiIsICJjb250aW51ZSIsCiAgICAgICJkZWJ1Z2dlciIsICJpbnN0YW5jZW9mIgogICAgXTsKCiAgICBpZiAocmVzdWx0ICYmIGtleXdvcmRzLmluZGV4T2YocmVzdWx0WzBdKSA+PSAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogVG9rZW4uS2V5d29yZCwKICAgICAgICB2YWx1ZTogcmVzdWx0WzBdCiAgICAgIH07CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfSwKICBzY2FuSWRlbnRpZmllcjogZnVuY3Rpb24oKSB7CiAgICB2YXIgaWQgPSAiIjsKICAgIHZhciBpbmRleCA9IDA7CiAgICB2YXIgdHlwZSwgY2hhcjsKCiAgICBmdW5jdGlvbiBpc05vbkFzY2lpSWRlbnRpZmllclN0YXJ0KGNvZGUpIHsKICAgICAgcmV0dXJuIGNvZGUgPiAyNTY7CiAgICB9CgogICAgZnVuY3Rpb24gaXNOb25Bc2NpaUlkZW50aWZpZXJQYXJ0KGNvZGUpIHsKICAgICAgcmV0dXJuIGNvZGUgPiAyNTY7CiAgICB9CgogICAgZnVuY3Rpb24gaXNIZXhEaWdpdChzdHIpIHsKICAgICAgcmV0dXJuICgvXlswLTlhLWZBLUZdJC8pLnRlc3Qoc3RyKTsKICAgIH0KCiAgICB2YXIgcmVhZFVuaWNvZGVFc2NhcGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKCkgewogICAgICBpbmRleCArPSAxOwoKICAgICAgaWYgKHRoaXMucGVlayhpbmRleCkgIT09ICJ1IikgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICB2YXIgY2gxID0gdGhpcy5wZWVrKGluZGV4ICsgMSk7CiAgICAgIHZhciBjaDIgPSB0aGlzLnBlZWsoaW5kZXggKyAyKTsKICAgICAgdmFyIGNoMyA9IHRoaXMucGVlayhpbmRleCArIDMpOwogICAgICB2YXIgY2g0ID0gdGhpcy5wZWVrKGluZGV4ICsgNCk7CiAgICAgIHZhciBjb2RlOwoKICAgICAgaWYgKGlzSGV4RGlnaXQoY2gxKSAmJiBpc0hleERpZ2l0KGNoMikgJiYgaXNIZXhEaWdpdChjaDMpICYmIGlzSGV4RGlnaXQoY2g0KSkgewogICAgICAgIGNvZGUgPSBwYXJzZUludChjaDEgKyBjaDIgKyBjaDMgKyBjaDQsIDE2KTsKCiAgICAgICAgaWYgKGFzY2lpSWRlbnRpZmllclBhcnRUYWJsZVtjb2RlXSB8fCBpc05vbkFzY2lpSWRlbnRpZmllclBhcnQoY29kZSkpIHsKICAgICAgICAgIGluZGV4ICs9IDU7CiAgICAgICAgICByZXR1cm4gIlxcdSIgKyBjaDEgKyBjaDIgKyBjaDMgKyBjaDQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgcmV0dXJuIG51bGw7CiAgICB9LmJpbmQodGhpcyk7CgogICAgdmFyIGdldElkZW50aWZpZXJTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2hyID0gdGhpcy5wZWVrKGluZGV4KTsKICAgICAgdmFyIGNvZGUgPSBjaHIuY2hhckNvZGVBdCgwKTsKCiAgICAgIGlmIChjb2RlID09PSA5MikgewogICAgICAgIHJldHVybiByZWFkVW5pY29kZUVzY2FwZVNlcXVlbmNlKCk7CiAgICAgIH0KCiAgICAgIGlmIChjb2RlIDwgMTI4KSB7CiAgICAgICAgaWYgKGFzY2lpSWRlbnRpZmllclN0YXJ0VGFibGVbY29kZV0pIHsKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICByZXR1cm4gY2hyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGlmIChpc05vbkFzY2lpSWRlbnRpZmllclN0YXJ0KGNvZGUpKSB7CiAgICAgICAgaW5kZXggKz0gMTsKICAgICAgICByZXR1cm4gY2hyOwogICAgICB9CgogICAgICByZXR1cm4gbnVsbDsKICAgIH0uYmluZCh0aGlzKTsKCiAgICB2YXIgZ2V0SWRlbnRpZmllclBhcnQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGNociA9IHRoaXMucGVlayhpbmRleCk7CiAgICAgIHZhciBjb2RlID0gY2hyLmNoYXJDb2RlQXQoMCk7CgogICAgICBpZiAoY29kZSA9PT0gOTIpIHsKICAgICAgICByZXR1cm4gcmVhZFVuaWNvZGVFc2NhcGVTZXF1ZW5jZSgpOwogICAgICB9CgogICAgICBpZiAoY29kZSA8IDEyOCkgewogICAgICAgIGlmIChhc2NpaUlkZW50aWZpZXJQYXJ0VGFibGVbY29kZV0pIHsKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICByZXR1cm4gY2hyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGlmIChpc05vbkFzY2lpSWRlbnRpZmllclBhcnQoY29kZSkpIHsKICAgICAgICBpbmRleCArPSAxOwogICAgICAgIHJldHVybiBjaHI7CiAgICAgIH0KCiAgICAgIHJldHVybiBudWxsOwogICAgfS5iaW5kKHRoaXMpOwoKICAgIGZ1bmN0aW9uIHJlbW92ZUVzY2FwZVNlcXVlbmNlcyhpZCkgewogICAgICByZXR1cm4gaWQucmVwbGFjZSgvXFx1KFswLTlhLWZBLUZdezR9KS9nLCBmdW5jdGlvbihtMCwgY29kZXBvaW50KSB7CiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoY29kZXBvaW50LCAxNikpOwogICAgICB9KTsKICAgIH0KCiAgICBjaGFyID0gZ2V0SWRlbnRpZmllclN0YXJ0KCk7CiAgICBpZiAoY2hhciA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZCA9IGNoYXI7CiAgICBmb3IgKDs7KSB7CiAgICAgIGNoYXIgPSBnZXRJZGVudGlmaWVyUGFydCgpOwoKICAgICAgaWYgKGNoYXIgPT09IG51bGwpIHsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgaWQgKz0gY2hhcjsKICAgIH0KCiAgICBzd2l0Y2ggKGlkKSB7CiAgICBjYXNlICJ0cnVlIjoKICAgIGNhc2UgImZhbHNlIjoKICAgICAgdHlwZSA9IFRva2VuLkJvb2xlYW5MaXRlcmFsOwogICAgICBicmVhazsKICAgIGNhc2UgIm51bGwiOgogICAgICB0eXBlID0gVG9rZW4uTnVsbExpdGVyYWw7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHlwZSA9IFRva2VuLklkZW50aWZpZXI7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgdHlwZTogdHlwZSwKICAgICAgdmFsdWU6IHJlbW92ZUVzY2FwZVNlcXVlbmNlcyhpZCksCiAgICAgIHRleHQ6IGlkLAogICAgICB0b2tlbkxlbmd0aDogaWQubGVuZ3RoCiAgICB9OwogIH0sCiAgc2Nhbk51bWVyaWNMaXRlcmFsOiBmdW5jdGlvbigpIHsKICAgIHZhciBpbmRleCA9IDA7CiAgICB2YXIgdmFsdWUgPSAiIjsKICAgIHZhciBsZW5ndGggPSB0aGlzLmlucHV0Lmxlbmd0aDsKICAgIHZhciBjaGFyID0gdGhpcy5wZWVrKGluZGV4KTsKICAgIHZhciBiYWQ7CiAgICB2YXIgaXNBbGxvd2VkRGlnaXQgPSBpc0RlY2ltYWxEaWdpdDsKICAgIHZhciBiYXNlID0gMTA7CiAgICB2YXIgaXNMZWdhY3kgPSBmYWxzZTsKCiAgICBmdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChzdHIpIHsKICAgICAgcmV0dXJuICgvXlswLTldJC8pLnRlc3Qoc3RyKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpc09jdGFsRGlnaXQoc3RyKSB7CiAgICAgIHJldHVybiAoL15bMC03XSQvKS50ZXN0KHN0cik7CiAgICB9CgogICAgZnVuY3Rpb24gaXNCaW5hcnlEaWdpdChzdHIpIHsKICAgICAgcmV0dXJuICgvXlswMV0kLykudGVzdChzdHIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoc3RyKSB7CiAgICAgIHJldHVybiAoL15bMC05YS1mQS1GXSQvKS50ZXN0KHN0cik7CiAgICB9CgogICAgZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY2gpIHsKICAgICAgcmV0dXJuIChjaCA9PT0gIiQiKSB8fCAoY2ggPT09ICJfIikgfHwgKGNoID09PSAiXFwiKSB8fAogICAgICAgIChjaCA+PSAiYSIgJiYgY2ggPD0gInoiKSB8fCAoY2ggPj0gIkEiICYmIGNoIDw9ICJaIik7CiAgICB9CgogICAgaWYgKGNoYXIgIT09ICIuIiAmJiAhaXNEZWNpbWFsRGlnaXQoY2hhcikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKGNoYXIgIT09ICIuIikgewogICAgICB2YWx1ZSA9IHRoaXMucGVlayhpbmRleCk7CiAgICAgIGluZGV4ICs9IDE7CiAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwoKICAgICAgaWYgKHZhbHVlID09PSAiMCIpIHsKICAgICAgICBpZiAoY2hhciA9PT0gIngiIHx8IGNoYXIgPT09ICJYIikgewogICAgICAgICAgaXNBbGxvd2VkRGlnaXQgPSBpc0hleERpZ2l0OwogICAgICAgICAgYmFzZSA9IDE2OwoKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICB2YWx1ZSArPSBjaGFyOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhciA9PT0gIm8iIHx8IGNoYXIgPT09ICJPIikgewogICAgICAgICAgaXNBbGxvd2VkRGlnaXQgPSBpc09jdGFsRGlnaXQ7CiAgICAgICAgICBiYXNlID0gODsKCiAgICAgICAgICBpZiAoIXN0YXRlLmluRVM2KHRydWUpKSB7CiAgICAgICAgICAgIHRoaXMudHJpZ2dlcigid2FybmluZyIsIHsKICAgICAgICAgICAgICBjb2RlOiAiVzExOSIsCiAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyLAogICAgICAgICAgICAgIGRhdGE6IFsgIk9jdGFsIGludGVnZXIgbGl0ZXJhbCIsICI2IiBdCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQoKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICB2YWx1ZSArPSBjaGFyOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhciA9PT0gImIiIHx8IGNoYXIgPT09ICJCIikgewogICAgICAgICAgaXNBbGxvd2VkRGlnaXQgPSBpc0JpbmFyeURpZ2l0OwogICAgICAgICAgYmFzZSA9IDI7CgogICAgICAgICAgaWYgKCFzdGF0ZS5pbkVTNih0cnVlKSkgewogICAgICAgICAgICB0aGlzLnRyaWdnZXIoIndhcm5pbmciLCB7CiAgICAgICAgICAgICAgY29kZTogIlcxMTkiLAogICAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICAgICAgICBkYXRhOiBbICJCaW5hcnkgaW50ZWdlciBsaXRlcmFsIiwgIjYiIF0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CgogICAgICAgICAgaW5kZXggKz0gMTsKICAgICAgICAgIHZhbHVlICs9IGNoYXI7CiAgICAgICAgfQogICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2hhcikpIHsKICAgICAgICAgIGlzQWxsb3dlZERpZ2l0ID0gaXNPY3RhbERpZ2l0OwogICAgICAgICAgYmFzZSA9IDg7CiAgICAgICAgICBpc0xlZ2FjeSA9IHRydWU7CiAgICAgICAgICBiYWQgPSBmYWxzZTsKCiAgICAgICAgICBpbmRleCArPSAxOwogICAgICAgICAgdmFsdWUgKz0gY2hhcjsKICAgICAgICB9CgogICAgICAgIGlmICghaXNPY3RhbERpZ2l0KGNoYXIpICYmIGlzRGVjaW1hbERpZ2l0KGNoYXIpKSB7CiAgICAgICAgICBpbmRleCArPSAxOwogICAgICAgICAgdmFsdWUgKz0gY2hhcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewogICAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwoKICAgICAgICBpZiAoaXNMZWdhY3kgJiYgaXNEZWNpbWFsRGlnaXQoY2hhcikpIHsKICAgICAgICAgIGJhZCA9IHRydWU7CiAgICAgICAgfSBlbHNlIGlmICghaXNBbGxvd2VkRGlnaXQoY2hhcikpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YWx1ZSArPSBjaGFyOwogICAgICAgIGluZGV4ICs9IDE7CiAgICAgIH0KCiAgICAgIGlmIChpc0FsbG93ZWREaWdpdCAhPT0gaXNEZWNpbWFsRGlnaXQpIHsKICAgICAgICBpZiAoIWlzTGVnYWN5ICYmIHZhbHVlLmxlbmd0aCA8PSAyKSB7IC8vIDB4CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAogICAgICAgICAgICBpc01hbGZvcm1lZDogdHJ1ZQogICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewogICAgICAgICAgY2hhciA9IHRoaXMucGVlayhpbmRleCk7CiAgICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2hhcikpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogVG9rZW4uTnVtZXJpY0xpdGVyYWwsCiAgICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgICBiYXNlOiBiYXNlLAogICAgICAgICAgaXNMZWdhY3k6IGlzTGVnYWN5LAogICAgICAgICAgaXNNYWxmb3JtZWQ6IGZhbHNlCiAgICAgICAgfTsKICAgICAgfQogICAgfQoKICAgIGlmIChjaGFyID09PSAiLiIpIHsKICAgICAgdmFsdWUgKz0gY2hhcjsKICAgICAgaW5kZXggKz0gMTsKCiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewogICAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwogICAgICAgIGlmICghaXNEZWNpbWFsRGlnaXQoY2hhcikpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YWx1ZSArPSBjaGFyOwogICAgICAgIGluZGV4ICs9IDE7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoY2hhciA9PT0gImUiIHx8IGNoYXIgPT09ICJFIikgewogICAgICB2YWx1ZSArPSBjaGFyOwogICAgICBpbmRleCArPSAxOwogICAgICBjaGFyID0gdGhpcy5wZWVrKGluZGV4KTsKCiAgICAgIGlmIChjaGFyID09PSAiKyIgfHwgY2hhciA9PT0gIi0iKSB7CiAgICAgICAgdmFsdWUgKz0gdGhpcy5wZWVrKGluZGV4KTsKICAgICAgICBpbmRleCArPSAxOwogICAgICB9CgogICAgICBjaGFyID0gdGhpcy5wZWVrKGluZGV4KTsKICAgICAgaWYgKGlzRGVjaW1hbERpZ2l0KGNoYXIpKSB7CiAgICAgICAgdmFsdWUgKz0gY2hhcjsKICAgICAgICBpbmRleCArPSAxOwoKICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwogICAgICAgICAgaWYgKCFpc0RlY2ltYWxEaWdpdChjaGFyKSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHZhbHVlICs9IGNoYXI7CiAgICAgICAgICBpbmRleCArPSAxOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQoKICAgIGlmIChpbmRleCA8IGxlbmd0aCkgewogICAgICBjaGFyID0gdGhpcy5wZWVrKGluZGV4KTsKICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoYXIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKICAgICAgdmFsdWU6IHZhbHVlLAogICAgICBiYXNlOiBiYXNlLAogICAgICBpc01hbGZvcm1lZDogIWlzRmluaXRlKHZhbHVlKQogICAgfTsKICB9LAogIHNjYW5Fc2NhcGVTZXF1ZW5jZTogZnVuY3Rpb24oY2hlY2tzKSB7CiAgICB2YXIgYWxsb3dOZXdMaW5lID0gZmFsc2U7CiAgICB2YXIganVtcCA9IDE7CiAgICB0aGlzLnNraXAoKTsKICAgIHZhciBjaGFyID0gdGhpcy5wZWVrKCk7CgogICAgc3dpdGNoIChjaGFyKSB7CiAgICBjYXNlICInIjoKICAgICAgdGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLCB7CiAgICAgICAgY29kZTogIlcxMTQiLAogICAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICBkYXRhOiBbICJcXCciIF0KICAgICAgfSwgY2hlY2tzLCBmdW5jdGlvbigpIHtyZXR1cm4gc3RhdGUuanNvbk1vZGU7IH0pOwogICAgICBicmVhazsKICAgIGNhc2UgImIiOgogICAgICBjaGFyID0gIlxcYiI7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiZiI6CiAgICAgIGNoYXIgPSAiXFxmIjsKICAgICAgYnJlYWs7CiAgICBjYXNlICJuIjoKICAgICAgY2hhciA9ICJcXG4iOwogICAgICBicmVhazsKICAgIGNhc2UgInIiOgogICAgICBjaGFyID0gIlxcciI7CiAgICAgIGJyZWFrOwogICAgY2FzZSAidCI6CiAgICAgIGNoYXIgPSAiXFx0IjsKICAgICAgYnJlYWs7CiAgICBjYXNlICIwIjoKICAgICAgY2hhciA9ICJcXDAiOwogICAgICB2YXIgbiA9IHBhcnNlSW50KHRoaXMucGVlaygxKSwgMTApOwogICAgICB0aGlzLnRyaWdnZXJBc3luYygid2FybmluZyIsIHsKICAgICAgICBjb2RlOiAiVzExNSIsCiAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyCiAgICAgIH0sIGNoZWNrcywKICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiBuID49IDAgJiYgbiA8PSA3ICYmIHN0YXRlLmlzU3RyaWN0KCk7IH0pOwogICAgICBicmVhazsKICAgIGNhc2UgInUiOgogICAgICB2YXIgaGV4Q29kZSA9IHRoaXMuaW5wdXQuc3Vic3RyKDEsIDQpOwogICAgICB2YXIgY29kZSA9IHBhcnNlSW50KGhleENvZGUsIDE2KTsKICAgICAgaWYgKGlzTmFOKGNvZGUpKSB7CiAgICAgICAgdGhpcy50cmlnZ2VyKCJ3YXJuaW5nIiwgewogICAgICAgICAgY29kZTogIlcwNTIiLAogICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgY2hhcmFjdGVyOiB0aGlzLmNoYXIsCiAgICAgICAgICBkYXRhOiBbICJ1IiArIGhleENvZGUgXQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGNoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpOwogICAgICBqdW1wID0gNTsKICAgICAgYnJlYWs7CiAgICBjYXNlICJ2IjoKICAgICAgdGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLCB7CiAgICAgICAgY29kZTogIlcxMTQiLAogICAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICBkYXRhOiBbICJcXHYiIF0KICAgICAgfSwgY2hlY2tzLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXRlLmpzb25Nb2RlOyB9KTsKCiAgICAgIGNoYXIgPSAiXHYiOwogICAgICBicmVhazsKICAgIGNhc2UgIngiOgogICAgICB2YXIgIHggPSBwYXJzZUludCh0aGlzLmlucHV0LnN1YnN0cigxLCAyKSwgMTYpOwoKICAgICAgdGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLCB7CiAgICAgICAgY29kZTogIlcxMTQiLAogICAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICBkYXRhOiBbICJcXHgtIiBdCiAgICAgIH0sIGNoZWNrcywgZnVuY3Rpb24oKSB7IHJldHVybiBzdGF0ZS5qc29uTW9kZTsgfSk7CgogICAgICBjaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZSh4KTsKICAgICAganVtcCA9IDM7CiAgICAgIGJyZWFrOwogICAgY2FzZSAiXFwiOgogICAgICBjaGFyID0gIlxcXFwiOwogICAgICBicmVhazsKICAgIGNhc2UgIlwiIjoKICAgICAgY2hhciA9ICJcXFwiIjsKICAgICAgYnJlYWs7CiAgICBjYXNlICIvIjoKICAgICAgYnJlYWs7CiAgICBjYXNlICIiOgogICAgICBhbGxvd05ld0xpbmUgPSB0cnVlOwogICAgICBjaGFyID0gIiI7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIHJldHVybiB7IGNoYXI6IGNoYXIsIGp1bXA6IGp1bXAsIGFsbG93TmV3TGluZTogYWxsb3dOZXdMaW5lIH07CiAgfSwKICBzY2FuVGVtcGxhdGVMaXRlcmFsOiBmdW5jdGlvbihjaGVja3MpIHsKICAgIHZhciB0b2tlblR5cGU7CiAgICB2YXIgdmFsdWUgPSAiIjsKICAgIHZhciBjaDsKICAgIHZhciBzdGFydExpbmUgPSB0aGlzLmxpbmU7CiAgICB2YXIgc3RhcnRDaGFyID0gdGhpcy5jaGFyOwogICAgdmFyIGRlcHRoID0gdGhpcy50ZW1wbGF0ZVN0YXJ0cy5sZW5ndGg7CgogICAgaWYgKCFzdGF0ZS5pbkVTNih0cnVlKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAodGhpcy5wZWVrKCkgPT09ICJgIikgewogICAgICB0b2tlblR5cGUgPSBUb2tlbi5UZW1wbGF0ZUhlYWQ7CiAgICAgIHRoaXMudGVtcGxhdGVTdGFydHMucHVzaCh7IGxpbmU6IHRoaXMubGluZSwgY2hhcjogdGhpcy5jaGFyIH0pOwogICAgICBkZXB0aCA9IHRoaXMudGVtcGxhdGVTdGFydHMubGVuZ3RoOwogICAgICB0aGlzLnNraXAoMSk7CiAgICAgIHRoaXMucHVzaENvbnRleHQoQ29udGV4dC5UZW1wbGF0ZSk7CiAgICB9IGVsc2UgaWYgKHRoaXMuaW5Db250ZXh0KENvbnRleHQuVGVtcGxhdGUpICYmIHRoaXMucGVlaygpID09PSAifSIpIHsKICAgICAgdG9rZW5UeXBlID0gVG9rZW4uVGVtcGxhdGVNaWRkbGU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICB3aGlsZSAodGhpcy5wZWVrKCkgIT09ICJgIikgewogICAgICB3aGlsZSAoKGNoID0gdGhpcy5wZWVrKCkpID09PSAiIikgewogICAgICAgIHZhbHVlICs9ICJcbiI7CiAgICAgICAgaWYgKCF0aGlzLm5leHRMaW5lKCkpIHsKICAgICAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMudGVtcGxhdGVTdGFydHMucG9wKCk7CiAgICAgICAgICB0aGlzLnRyaWdnZXIoImVycm9yIiwgewogICAgICAgICAgICBjb2RlOiAiRTA1MiIsCiAgICAgICAgICAgIGxpbmU6IHN0YXJ0UG9zLmxpbmUsCiAgICAgICAgICAgIGNoYXJhY3Rlcjogc3RhcnRQb3MuY2hhcgogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICB0eXBlOiB0b2tlblR5cGUsCiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgICAgc3RhcnRMaW5lOiBzdGFydExpbmUsCiAgICAgICAgICAgIHN0YXJ0Q2hhcjogc3RhcnRDaGFyLAogICAgICAgICAgICBpc1VuY2xvc2VkOiB0cnVlLAogICAgICAgICAgICBkZXB0aDogZGVwdGgsCiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMucG9wQ29udGV4dCgpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGNoID09PSAnJCcgJiYgdGhpcy5wZWVrKDEpID09PSAneycpIHsKICAgICAgICB2YWx1ZSArPSAnJHsnOwogICAgICAgIHRoaXMuc2tpcCgyKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogdG9rZW5UeXBlLAogICAgICAgICAgdmFsdWU6IHZhbHVlLAogICAgICAgICAgc3RhcnRMaW5lOiBzdGFydExpbmUsCiAgICAgICAgICBzdGFydENoYXI6IHN0YXJ0Q2hhciwKICAgICAgICAgIGlzVW5jbG9zZWQ6IGZhbHNlLAogICAgICAgICAgZGVwdGg6IGRlcHRoLAogICAgICAgICAgY29udGV4dDogdGhpcy5jdXJyZW50Q29udGV4dCgpCiAgICAgICAgfTsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gJ1xcJykgewogICAgICAgIHZhciBlc2NhcGUgPSB0aGlzLnNjYW5Fc2NhcGVTZXF1ZW5jZShjaGVja3MpOwogICAgICAgIHZhbHVlICs9IGVzY2FwZS5jaGFyOwogICAgICAgIHRoaXMuc2tpcChlc2NhcGUuanVtcCk7CiAgICAgIH0gZWxzZSBpZiAoY2ggIT09ICdgJykgewogICAgICAgIHZhbHVlICs9IGNoOwogICAgICAgIHRoaXMuc2tpcCgxKTsKICAgICAgfQogICAgfQogICAgdG9rZW5UeXBlID0gdG9rZW5UeXBlID09PSBUb2tlbi5UZW1wbGF0ZUhlYWQgPyBUb2tlbi5Ob1N1YnN0VGVtcGxhdGUgOiBUb2tlbi5UZW1wbGF0ZVRhaWw7CiAgICB0aGlzLnNraXAoMSk7CiAgICB0aGlzLnRlbXBsYXRlU3RhcnRzLnBvcCgpOwoKICAgIHJldHVybiB7CiAgICAgIHR5cGU6IHRva2VuVHlwZSwKICAgICAgdmFsdWU6IHZhbHVlLAogICAgICBzdGFydExpbmU6IHN0YXJ0TGluZSwKICAgICAgc3RhcnRDaGFyOiBzdGFydENoYXIsCiAgICAgIGlzVW5jbG9zZWQ6IGZhbHNlLAogICAgICBkZXB0aDogZGVwdGgsCiAgICAgIGNvbnRleHQ6IHRoaXMucG9wQ29udGV4dCgpCiAgICB9OwogIH0sCiAgc2NhblN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKGNoZWNrcykgewogICAgdmFyIHF1b3RlID0gdGhpcy5wZWVrKCk7CiAgICBpZiAocXVvdGUgIT09ICJcIiIgJiYgcXVvdGUgIT09ICInIikgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIiwgewogICAgICBjb2RlOiAiVzEwOCIsCiAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgY2hhcmFjdGVyOiB0aGlzLmNoYXIgLy8gKzE/CiAgICB9LCBjaGVja3MsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGUuanNvbk1vZGUgJiYgcXVvdGUgIT09ICJcIiI7IH0pOwoKICAgIHZhciB2YWx1ZSA9ICIiOwogICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMubGluZTsKICAgIHZhciBzdGFydENoYXIgPSB0aGlzLmNoYXI7CiAgICB2YXIgYWxsb3dOZXdMaW5lID0gZmFsc2U7CgogICAgdGhpcy5za2lwKCk7CgogICAgd2hpbGUgKHRoaXMucGVlaygpICE9PSBxdW90ZSkgewogICAgICBpZiAodGhpcy5wZWVrKCkgPT09ICIiKSB7IC8vIEVuZCBPZiBMaW5lCgogICAgICAgIGlmICghYWxsb3dOZXdMaW5lKSB7CiAgICAgICAgICB0aGlzLnRyaWdnZXIoIndhcm5pbmciLCB7CiAgICAgICAgICAgIGNvZGU6ICJXMTEyIiwKICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhcgogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFsbG93TmV3TGluZSA9IGZhbHNlOwoKICAgICAgICAgIHRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIiwgewogICAgICAgICAgICBjb2RlOiAiVzA0MyIsCiAgICAgICAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgICAgICAgY2hhcmFjdGVyOiB0aGlzLmNoYXIKICAgICAgICAgIH0sIGNoZWNrcywgZnVuY3Rpb24oKSB7IHJldHVybiAhc3RhdGUub3B0aW9uLm11bHRpc3RyOyB9KTsKCiAgICAgICAgICB0aGlzLnRyaWdnZXJBc3luYygid2FybmluZyIsIHsKICAgICAgICAgICAgY29kZTogIlcwNDIiLAogICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyCiAgICAgICAgICB9LCBjaGVja3MsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhdGUuanNvbk1vZGUgJiYgc3RhdGUub3B0aW9uLm11bHRpc3RyOyB9KTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5uZXh0TGluZSgpKSB7CiAgICAgICAgICB0aGlzLnRyaWdnZXIoImVycm9yIiwgewogICAgICAgICAgICBjb2RlOiAiRTAyOSIsCiAgICAgICAgICAgIGxpbmU6IHN0YXJ0TGluZSwKICAgICAgICAgICAgY2hhcmFjdGVyOiBzdGFydENoYXIKICAgICAgICAgIH0pOwoKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsCiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgICAgc3RhcnRMaW5lOiBzdGFydExpbmUsCiAgICAgICAgICAgIHN0YXJ0Q2hhcjogc3RhcnRDaGFyLAogICAgICAgICAgICBpc1VuY2xvc2VkOiB0cnVlLAogICAgICAgICAgICBxdW90ZTogcXVvdGUKICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgfSBlbHNlIHsgLy8gQW55IGNoYXJhY3RlciBvdGhlciB0aGFuIEVuZCBPZiBMaW5lCgogICAgICAgIGFsbG93TmV3TGluZSA9IGZhbHNlOwogICAgICAgIHZhciBjaGFyID0gdGhpcy5wZWVrKCk7CiAgICAgICAgdmFyIGp1bXAgPSAxOyAvLyBBIGxlbmd0aCBvZiBhIGp1bXAsIGFmdGVyIHdlJ3JlIGRvbmUKCiAgICAgICAgaWYgKGNoYXIgPCAiICIpIHsKICAgICAgICAgIHRoaXMudHJpZ2dlcigid2FybmluZyIsIHsKICAgICAgICAgICAgY29kZTogIlcxMTMiLAogICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyLAogICAgICAgICAgICBkYXRhOiBbICI8bm9uLXByaW50YWJsZT4iIF0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhciA9PT0gIlxcIikgewogICAgICAgICAgdmFyIHBhcnNlZCA9IHRoaXMuc2NhbkVzY2FwZVNlcXVlbmNlKGNoZWNrcyk7CiAgICAgICAgICBjaGFyID0gcGFyc2VkLmNoYXI7CiAgICAgICAgICBqdW1wID0gcGFyc2VkLmp1bXA7CiAgICAgICAgICBhbGxvd05ld0xpbmUgPSBwYXJzZWQuYWxsb3dOZXdMaW5lOwogICAgICAgIH0KCiAgICAgICAgdmFsdWUgKz0gY2hhcjsKICAgICAgICB0aGlzLnNraXAoanVtcCk7CiAgICAgIH0KICAgIH0KCiAgICB0aGlzLnNraXAoKTsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWwsCiAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgc3RhcnRMaW5lOiBzdGFydExpbmUsCiAgICAgIHN0YXJ0Q2hhcjogc3RhcnRDaGFyLAogICAgICBpc1VuY2xvc2VkOiBmYWxzZSwKICAgICAgcXVvdGU6IHF1b3RlCiAgICB9OwogIH0sCiAgc2NhblJlZ0V4cDogZnVuY3Rpb24oKSB7CiAgICB2YXIgaW5kZXggPSAwOwogICAgdmFyIGxlbmd0aCA9IHRoaXMuaW5wdXQubGVuZ3RoOwogICAgdmFyIGNoYXIgPSB0aGlzLnBlZWsoKTsKICAgIHZhciB2YWx1ZSA9IGNoYXI7CiAgICB2YXIgYm9keSA9ICIiOwogICAgdmFyIGZsYWdzID0gW107CiAgICB2YXIgbWFsZm9ybWVkID0gZmFsc2U7CiAgICB2YXIgaXNDaGFyU2V0ID0gZmFsc2U7CiAgICB2YXIgdGVybWluYXRlZDsKCiAgICB2YXIgc2NhblVuZXhwZWN0ZWRDaGFycyA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoY2hhciA8ICIgIikgewogICAgICAgIG1hbGZvcm1lZCA9IHRydWU7CiAgICAgICAgdGhpcy50cmlnZ2VyKCJ3YXJuaW5nIiwgewogICAgICAgICAgY29kZTogIlcwNDgiLAogICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgY2hhcmFjdGVyOiB0aGlzLmNoYXIKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PT0gIjwiKSB7CiAgICAgICAgbWFsZm9ybWVkID0gdHJ1ZTsKICAgICAgICB0aGlzLnRyaWdnZXIoIndhcm5pbmciLCB7CiAgICAgICAgICBjb2RlOiAiVzA0OSIsCiAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICAgIGRhdGE6IFsgY2hhciBdCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0uYmluZCh0aGlzKTsKICAgIGlmICghdGhpcy5wcmVyZWcgfHwgY2hhciAhPT0gIi8iKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGluZGV4ICs9IDE7CiAgICB0ZXJtaW5hdGVkID0gZmFsc2U7CgogICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwogICAgICB2YWx1ZSArPSBjaGFyOwogICAgICBib2R5ICs9IGNoYXI7CgogICAgICBpZiAoaXNDaGFyU2V0KSB7CiAgICAgICAgaWYgKGNoYXIgPT09ICJdIikgewogICAgICAgICAgaWYgKHRoaXMucGVlayhpbmRleCAtIDEpICE9PSAiXFwiIHx8IHRoaXMucGVlayhpbmRleCAtIDIpID09PSAiXFwiKSB7CiAgICAgICAgICAgIGlzQ2hhclNldCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGNoYXIgPT09ICJcXCIpIHsKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICBjaGFyID0gdGhpcy5wZWVrKGluZGV4KTsKICAgICAgICAgIGJvZHkgKz0gY2hhcjsKICAgICAgICAgIHZhbHVlICs9IGNoYXI7CgogICAgICAgICAgc2NhblVuZXhwZWN0ZWRDaGFycygpOwogICAgICAgIH0KCiAgICAgICAgaW5kZXggKz0gMTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgaWYgKGNoYXIgPT09ICJcXCIpIHsKICAgICAgICBpbmRleCArPSAxOwogICAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwogICAgICAgIGJvZHkgKz0gY2hhcjsKICAgICAgICB2YWx1ZSArPSBjaGFyOwoKICAgICAgICBzY2FuVW5leHBlY3RlZENoYXJzKCk7CgogICAgICAgIGlmIChjaGFyID09PSAiLyIpIHsKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChjaGFyID09PSAiWyIpIHsKICAgICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChjaGFyID09PSAiWyIpIHsKICAgICAgICBpc0NoYXJTZXQgPSB0cnVlOwogICAgICAgIGluZGV4ICs9IDE7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGlmIChjaGFyID09PSAiLyIpIHsKICAgICAgICBib2R5ID0gYm9keS5zdWJzdHIoMCwgYm9keS5sZW5ndGggLSAxKTsKICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTsKICAgICAgICBpbmRleCArPSAxOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpbmRleCArPSAxOwogICAgfQoKICAgIGlmICghdGVybWluYXRlZCkgewogICAgICB0aGlzLnRyaWdnZXIoImVycm9yIiwgewogICAgICAgIGNvZGU6ICJFMDE1IiwKICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgY2hhcmFjdGVyOiB0aGlzLmZyb20KICAgICAgfSk7CgogICAgICByZXR1cm4gdm9pZCB0aGlzLnRyaWdnZXIoImZhdGFsIiwgewogICAgICAgIGxpbmU6IHRoaXMubGluZSwKICAgICAgICBmcm9tOiB0aGlzLmZyb20KICAgICAgfSk7CiAgICB9CgogICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGNoYXIgPSB0aGlzLnBlZWsoaW5kZXgpOwogICAgICBpZiAoIS9bZ2ltXS8udGVzdChjaGFyKSkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGZsYWdzLnB1c2goY2hhcik7CiAgICAgIHZhbHVlICs9IGNoYXI7CiAgICAgIGluZGV4ICs9IDE7CiAgICB9CgogICAgdHJ5IHsKICAgICAgbmV3IFJlZ0V4cChib2R5LCBmbGFncy5qb2luKCIiKSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgbWFsZm9ybWVkID0gdHJ1ZTsKICAgICAgdGhpcy50cmlnZ2VyKCJlcnJvciIsIHsKICAgICAgICBjb2RlOiAiRTAxNiIsCiAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyLAogICAgICAgIGRhdGE6IFsgZXJyLm1lc3NhZ2UgXSAvLyBQbGF0Zm9ybSBkZXBlbmRlbnQhCiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgIHR5cGU6IFRva2VuLlJlZ0V4cCwKICAgICAgdmFsdWU6IHZhbHVlLAogICAgICBmbGFnczogZmxhZ3MsCiAgICAgIGlzTWFsZm9ybWVkOiBtYWxmb3JtZWQKICAgIH07CiAgfSwKICBzY2FuTm9uQnJlYWtpbmdTcGFjZXM6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHN0YXRlLm9wdGlvbi5ub25ic3AgPwogICAgICB0aGlzLmlucHV0LnNlYXJjaCgvKFx1MDBBMCkvKSA6IC0xOwogIH0sCiAgc2NhblVuc2FmZUNoYXJzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmlucHV0LnNlYXJjaChyZWcudW5zYWZlQ2hhcnMpOwogIH0sCiAgbmV4dDogZnVuY3Rpb24oY2hlY2tzKSB7CiAgICB0aGlzLmZyb20gPSB0aGlzLmNoYXI7CiAgICB2YXIgc3RhcnQ7CiAgICBpZiAoL1xzLy50ZXN0KHRoaXMucGVlaygpKSkgewogICAgICBzdGFydCA9IHRoaXMuY2hhcjsKCiAgICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5wZWVrKCkpKSB7CiAgICAgICAgdGhpcy5mcm9tICs9IDE7CiAgICAgICAgdGhpcy5za2lwKCk7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgbWF0Y2ggPSB0aGlzLnNjYW5Db21tZW50cygpIHx8CiAgICAgIHRoaXMuc2NhblN0cmluZ0xpdGVyYWwoY2hlY2tzKSB8fAogICAgICB0aGlzLnNjYW5UZW1wbGF0ZUxpdGVyYWwoY2hlY2tzKTsKCiAgICBpZiAobWF0Y2gpIHsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQoKICAgIG1hdGNoID0KICAgICAgdGhpcy5zY2FuUmVnRXhwKCkgfHwKICAgICAgdGhpcy5zY2FuUHVuY3R1YXRvcigpIHx8CiAgICAgIHRoaXMuc2NhbktleXdvcmQoKSB8fAogICAgICB0aGlzLnNjYW5JZGVudGlmaWVyKCkgfHwKICAgICAgdGhpcy5zY2FuTnVtZXJpY0xpdGVyYWwoKTsKCiAgICBpZiAobWF0Y2gpIHsKICAgICAgdGhpcy5za2lwKG1hdGNoLnRva2VuTGVuZ3RoIHx8IG1hdGNoLnZhbHVlLmxlbmd0aCk7CiAgICAgIHJldHVybiBtYXRjaDsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9LAogIG5leHRMaW5lOiBmdW5jdGlvbigpIHsKICAgIHZhciBjaGFyOwoKICAgIGlmICh0aGlzLmxpbmUgPj0gdGhpcy5nZXRMaW5lcygpLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgdGhpcy5pbnB1dCA9IHRoaXMuZ2V0TGluZXMoKVt0aGlzLmxpbmVdOwogICAgdGhpcy5saW5lICs9IDE7CiAgICB0aGlzLmNoYXIgPSAxOwogICAgdGhpcy5mcm9tID0gMTsKCiAgICB2YXIgaW5wdXRUcmltbWVkID0gdGhpcy5pbnB1dC50cmltKCk7CgogICAgdmFyIHN0YXJ0c1dpdGggPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIF8uc29tZShhcmd1bWVudHMsIGZ1bmN0aW9uKHByZWZpeCkgewogICAgICAgIHJldHVybiBpbnB1dFRyaW1tZWQuaW5kZXhPZihwcmVmaXgpID09PSAwOwogICAgICB9KTsKICAgIH07CgogICAgdmFyIGVuZHNXaXRoID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBfLnNvbWUoYXJndW1lbnRzLCBmdW5jdGlvbihzdWZmaXgpIHsKICAgICAgICByZXR1cm4gaW5wdXRUcmltbWVkLmluZGV4T2Yoc3VmZml4LCBpbnB1dFRyaW1tZWQubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aCkgIT09IC0xOwogICAgICB9KTsKICAgIH07CiAgICBpZiAodGhpcy5pZ25vcmluZ0xpbnRlckVycm9ycyA9PT0gdHJ1ZSkgewogICAgICBpZiAoIXN0YXJ0c1dpdGgoIi8qIiwgIi8vIikgJiYgISh0aGlzLmluQ29tbWVudCAmJiBlbmRzV2l0aCgiKi8iKSkpIHsKICAgICAgICB0aGlzLmlucHV0ID0gIiI7CiAgICAgIH0KICAgIH0KCiAgICBjaGFyID0gdGhpcy5zY2FuTm9uQnJlYWtpbmdTcGFjZXMoKTsKICAgIGlmIChjaGFyID49IDApIHsKICAgICAgdGhpcy50cmlnZ2VyKCJ3YXJuaW5nIiwgeyBjb2RlOiAiVzEyNSIsIGxpbmU6IHRoaXMubGluZSwgY2hhcmFjdGVyOiBjaGFyICsgMSB9KTsKICAgIH0KCiAgICB0aGlzLmlucHV0ID0gdGhpcy5pbnB1dC5yZXBsYWNlKC9cdC9nLCBzdGF0ZS50YWIpOwogICAgY2hhciA9IHRoaXMuc2NhblVuc2FmZUNoYXJzKCk7CgogICAgaWYgKGNoYXIgPj0gMCkgewogICAgICB0aGlzLnRyaWdnZXIoIndhcm5pbmciLCB7IGNvZGU6ICJXMTAwIiwgbGluZTogdGhpcy5saW5lLCBjaGFyYWN0ZXI6IGNoYXIgfSk7CiAgICB9CgogICAgaWYgKCF0aGlzLmlnbm9yaW5nTGludGVyRXJyb3JzICYmIHN0YXRlLm9wdGlvbi5tYXhsZW4gJiYKICAgICAgc3RhdGUub3B0aW9uLm1heGxlbiA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7CiAgICAgIHZhciBpbkNvbW1lbnQgPSB0aGlzLmluQ29tbWVudCB8fAogICAgICAgIHN0YXJ0c1dpdGguY2FsbChpbnB1dFRyaW1tZWQsICIvLyIpIHx8CiAgICAgICAgc3RhcnRzV2l0aC5jYWxsKGlucHV0VHJpbW1lZCwgIi8qIik7CgogICAgICB2YXIgc2hvdWxkVHJpZ2dlckVycm9yID0gIWluQ29tbWVudCB8fCAhcmVnLm1heGxlbkV4Y2VwdGlvbi50ZXN0KGlucHV0VHJpbW1lZCk7CgogICAgICBpZiAoc2hvdWxkVHJpZ2dlckVycm9yKSB7CiAgICAgICAgdGhpcy50cmlnZ2VyKCJ3YXJuaW5nIiwgeyBjb2RlOiAiVzEwMSIsIGxpbmU6IHRoaXMubGluZSwgY2hhcmFjdGVyOiB0aGlzLmlucHV0Lmxlbmd0aCB9KTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB0cnVlOwogIH0sCiAgc3RhcnQ6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5uZXh0TGluZSgpOwogIH0sCiAgdG9rZW46IGZ1bmN0aW9uKCkgewogICAgdmFyIGNoZWNrcyA9IGFzeW5jVHJpZ2dlcigpOwogICAgdmFyIHRva2VuOwoKCiAgICBmdW5jdGlvbiBpc1Jlc2VydmVkKHRva2VuLCBpc1Byb3BlcnR5KSB7CiAgICAgIGlmICghdG9rZW4ucmVzZXJ2ZWQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIG1ldGEgPSB0b2tlbi5tZXRhOwoKICAgICAgaWYgKG1ldGEgJiYgbWV0YS5pc0Z1dHVyZVJlc2VydmVkV29yZCAmJiBzdGF0ZS5pbkVTNSgpKSB7CiAgICAgICAgaWYgKCFtZXRhLmVzNSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAobWV0YS5zdHJpY3RPbmx5KSB7CiAgICAgICAgICBpZiAoIXN0YXRlLm9wdGlvbi5zdHJpY3QgJiYgIXN0YXRlLmlzU3RyaWN0KCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzUHJvcGVydHkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdmFyIGNyZWF0ZSA9IGZ1bmN0aW9uKHR5cGUsIHZhbHVlLCBpc1Byb3BlcnR5LCB0b2tlbikgewogICAgICB2YXIgb2JqOwoKICAgICAgaWYgKHR5cGUgIT09ICIoZW5kbGluZSkiICYmIHR5cGUgIT09ICIoZW5kKSIpIHsKICAgICAgICB0aGlzLnByZXJlZyA9IGZhbHNlOwogICAgICB9CgogICAgICBpZiAodHlwZSA9PT0gIihwdW5jdHVhdG9yKSIpIHsKICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgICAgY2FzZSAiLiI6CiAgICAgICAgY2FzZSAiKSI6CiAgICAgICAgY2FzZSAifiI6CiAgICAgICAgY2FzZSAiIyI6CiAgICAgICAgY2FzZSAiXSI6CiAgICAgICAgY2FzZSAiKysiOgogICAgICAgIGNhc2UgIi0tIjoKICAgICAgICAgIHRoaXMucHJlcmVnID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhpcy5wcmVyZWcgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgb2JqID0gT2JqZWN0LmNyZWF0ZShzdGF0ZS5zeW50YXhbdmFsdWVdIHx8IHN0YXRlLnN5bnRheFsiKGVycm9yKSJdKTsKICAgICAgfQoKICAgICAgaWYgKHR5cGUgPT09ICIoaWRlbnRpZmllcikiKSB7CiAgICAgICAgaWYgKHZhbHVlID09PSAicmV0dXJuIiB8fCB2YWx1ZSA9PT0gImNhc2UiIHx8IHZhbHVlID09PSAidHlwZW9mIikgewogICAgICAgICAgdGhpcy5wcmVyZWcgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKF8uaGFzKHN0YXRlLnN5bnRheCwgdmFsdWUpKSB7CiAgICAgICAgICBvYmogPSBPYmplY3QuY3JlYXRlKHN0YXRlLnN5bnRheFt2YWx1ZV0gfHwgc3RhdGUuc3ludGF4WyIoZXJyb3IpIl0pOwogICAgICAgICAgaWYgKCFpc1Jlc2VydmVkKG9iaiwgaXNQcm9wZXJ0eSAmJiB0eXBlID09PSAiKGlkZW50aWZpZXIpIikpIHsKICAgICAgICAgICAgb2JqID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmICghb2JqKSB7CiAgICAgICAgb2JqID0gT2JqZWN0LmNyZWF0ZShzdGF0ZS5zeW50YXhbdHlwZV0pOwogICAgICB9CgogICAgICBvYmouaWRlbnRpZmllciA9ICh0eXBlID09PSAiKGlkZW50aWZpZXIpIik7CiAgICAgIG9iai50eXBlID0gb2JqLnR5cGUgfHwgdHlwZTsKICAgICAgb2JqLnZhbHVlID0gdmFsdWU7CiAgICAgIG9iai5saW5lID0gdGhpcy5saW5lOwogICAgICBvYmouY2hhcmFjdGVyID0gdGhpcy5jaGFyOwogICAgICBvYmouZnJvbSA9IHRoaXMuZnJvbTsKICAgICAgaWYgKG9iai5pZGVudGlmaWVyICYmIHRva2VuKSBvYmoucmF3X3RleHQgPSB0b2tlbi50ZXh0IHx8IHRva2VuLnZhbHVlOwogICAgICBpZiAodG9rZW4gJiYgdG9rZW4uc3RhcnRMaW5lICYmIHRva2VuLnN0YXJ0TGluZSAhPT0gdGhpcy5saW5lKSB7CiAgICAgICAgb2JqLnN0YXJ0TGluZSA9IHRva2VuLnN0YXJ0TGluZTsKICAgICAgfQogICAgICBpZiAodG9rZW4gJiYgdG9rZW4uY29udGV4dCkgewogICAgICAgIG9iai5jb250ZXh0ID0gdG9rZW4uY29udGV4dDsKICAgICAgfQogICAgICBpZiAodG9rZW4gJiYgdG9rZW4uZGVwdGgpIHsKICAgICAgICBvYmouZGVwdGggPSB0b2tlbi5kZXB0aDsKICAgICAgfQogICAgICBpZiAodG9rZW4gJiYgdG9rZW4uaXNVbmNsb3NlZCkgewogICAgICAgIG9iai5pc1VuY2xvc2VkID0gdG9rZW4uaXNVbmNsb3NlZDsKICAgICAgfQoKICAgICAgaWYgKGlzUHJvcGVydHkgJiYgb2JqLmlkZW50aWZpZXIpIHsKICAgICAgICBvYmouaXNQcm9wZXJ0eSA9IGlzUHJvcGVydHk7CiAgICAgIH0KCiAgICAgIG9iai5jaGVjayA9IGNoZWNrcy5jaGVjazsKCiAgICAgIHJldHVybiBvYmo7CiAgICB9LmJpbmQodGhpcyk7CgogICAgZm9yICg7OykgewogICAgICBpZiAoIXRoaXMuaW5wdXQubGVuZ3RoKSB7CiAgICAgICAgaWYgKHRoaXMubmV4dExpbmUoKSkgewogICAgICAgICAgcmV0dXJuIGNyZWF0ZSgiKGVuZGxpbmUpIiwgIiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuZXhoYXVzdGVkKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHRoaXMuZXhoYXVzdGVkID0gdHJ1ZTsKICAgICAgICByZXR1cm4gY3JlYXRlKCIoZW5kKSIsICIiKTsKICAgICAgfQoKICAgICAgdG9rZW4gPSB0aGlzLm5leHQoY2hlY2tzKTsKCiAgICAgIGlmICghdG9rZW4pIHsKICAgICAgICBpZiAodGhpcy5pbnB1dC5sZW5ndGgpIHsKICAgICAgICAgIHRoaXMudHJpZ2dlcigiZXJyb3IiLCB7CiAgICAgICAgICAgIGNvZGU6ICJFMDI0IiwKICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICAgICAgZGF0YTogWyB0aGlzLnBlZWsoKSBdCiAgICAgICAgICB9KTsKCiAgICAgICAgICB0aGlzLmlucHV0ID0gIiI7CiAgICAgICAgfQoKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CiAgICAgIGNhc2UgVG9rZW4uU3RyaW5nTGl0ZXJhbDoKICAgICAgICB0aGlzLnRyaWdnZXJBc3luYygiU3RyaW5nIiwgewogICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgY2hhcjogdGhpcy5jaGFyLAogICAgICAgICAgZnJvbTogdGhpcy5mcm9tLAogICAgICAgICAgc3RhcnRMaW5lOiB0b2tlbi5zdGFydExpbmUsCiAgICAgICAgICBzdGFydENoYXI6IHRva2VuLnN0YXJ0Q2hhciwKICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwKICAgICAgICAgIHF1b3RlOiB0b2tlbi5xdW90ZQogICAgICAgIH0sIGNoZWNrcywgZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9KTsKCiAgICAgICAgcmV0dXJuIGNyZWF0ZSgiKHN0cmluZykiLCB0b2tlbi52YWx1ZSwgbnVsbCwgdG9rZW4pOwoKICAgICAgY2FzZSBUb2tlbi5UZW1wbGF0ZUhlYWQ6CiAgICAgICAgdGhpcy50cmlnZ2VyKCJUZW1wbGF0ZUhlYWQiLCB7CiAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICBjaGFyOiB0aGlzLmNoYXIsCiAgICAgICAgICBmcm9tOiB0aGlzLmZyb20sCiAgICAgICAgICBzdGFydExpbmU6IHRva2VuLnN0YXJ0TGluZSwKICAgICAgICAgIHN0YXJ0Q2hhcjogdG9rZW4uc3RhcnRDaGFyLAogICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNyZWF0ZSgiKHRlbXBsYXRlKSIsIHRva2VuLnZhbHVlLCBudWxsLCB0b2tlbik7CgogICAgICBjYXNlIFRva2VuLlRlbXBsYXRlTWlkZGxlOgogICAgICAgIHRoaXMudHJpZ2dlcigiVGVtcGxhdGVNaWRkbGUiLCB7CiAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICBjaGFyOiB0aGlzLmNoYXIsCiAgICAgICAgICBmcm9tOiB0aGlzLmZyb20sCiAgICAgICAgICBzdGFydExpbmU6IHRva2VuLnN0YXJ0TGluZSwKICAgICAgICAgIHN0YXJ0Q2hhcjogdG9rZW4uc3RhcnRDaGFyLAogICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNyZWF0ZSgiKHRlbXBsYXRlIG1pZGRsZSkiLCB0b2tlbi52YWx1ZSwgbnVsbCwgdG9rZW4pOwoKICAgICAgY2FzZSBUb2tlbi5UZW1wbGF0ZVRhaWw6CiAgICAgICAgdGhpcy50cmlnZ2VyKCJUZW1wbGF0ZVRhaWwiLCB7CiAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICBjaGFyOiB0aGlzLmNoYXIsCiAgICAgICAgICBmcm9tOiB0aGlzLmZyb20sCiAgICAgICAgICBzdGFydExpbmU6IHRva2VuLnN0YXJ0TGluZSwKICAgICAgICAgIHN0YXJ0Q2hhcjogdG9rZW4uc3RhcnRDaGFyLAogICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNyZWF0ZSgiKHRlbXBsYXRlIHRhaWwpIiwgdG9rZW4udmFsdWUsIG51bGwsIHRva2VuKTsKCiAgICAgIGNhc2UgVG9rZW4uTm9TdWJzdFRlbXBsYXRlOgogICAgICAgIHRoaXMudHJpZ2dlcigiTm9TdWJzdFRlbXBsYXRlIiwgewogICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgY2hhcjogdGhpcy5jaGFyLAogICAgICAgICAgZnJvbTogdGhpcy5mcm9tLAogICAgICAgICAgc3RhcnRMaW5lOiB0b2tlbi5zdGFydExpbmUsCiAgICAgICAgICBzdGFydENoYXI6IHRva2VuLnN0YXJ0Q2hhciwKICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBjcmVhdGUoIihubyBzdWJzdCB0ZW1wbGF0ZSkiLCB0b2tlbi52YWx1ZSwgbnVsbCwgdG9rZW4pOwoKICAgICAgY2FzZSBUb2tlbi5JZGVudGlmaWVyOgogICAgICAgIHRoaXMudHJpZ2dlckFzeW5jKCJJZGVudGlmaWVyIiwgewogICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgY2hhcjogdGhpcy5jaGFyLAogICAgICAgICAgZnJvbTogdGhpcy5mb3JtLAogICAgICAgICAgbmFtZTogdG9rZW4udmFsdWUsCiAgICAgICAgICByYXdfbmFtZTogdG9rZW4udGV4dCwKICAgICAgICAgIGlzUHJvcGVydHk6IHN0YXRlLnRva2Vucy5jdXJyLmlkID09PSAiLiIKICAgICAgICB9LCBjaGVja3MsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfSk7CiAgICAgIGNhc2UgVG9rZW4uS2V5d29yZDoKICAgICAgY2FzZSBUb2tlbi5OdWxsTGl0ZXJhbDoKICAgICAgY2FzZSBUb2tlbi5Cb29sZWFuTGl0ZXJhbDoKICAgICAgICByZXR1cm4gY3JlYXRlKCIoaWRlbnRpZmllcikiLCB0b2tlbi52YWx1ZSwgc3RhdGUudG9rZW5zLmN1cnIuaWQgPT09ICIuIiwgdG9rZW4pOwoKICAgICAgY2FzZSBUb2tlbi5OdW1lcmljTGl0ZXJhbDoKICAgICAgICBpZiAodG9rZW4uaXNNYWxmb3JtZWQpIHsKICAgICAgICAgIHRoaXMudHJpZ2dlcigid2FybmluZyIsIHsKICAgICAgICAgICAgY29kZTogIlcwNDUiLAogICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyLAogICAgICAgICAgICBkYXRhOiBbIHRva2VuLnZhbHVlIF0KICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdGhpcy50cmlnZ2VyQXN5bmMoIndhcm5pbmciLCB7CiAgICAgICAgICBjb2RlOiAiVzExNCIsCiAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICBjaGFyYWN0ZXI6IHRoaXMuY2hhciwKICAgICAgICAgIGRhdGE6IFsgIjB4LSIgXQogICAgICAgIH0sIGNoZWNrcywgZnVuY3Rpb24oKSB7IHJldHVybiB0b2tlbi5iYXNlID09PSAxNiAmJiBzdGF0ZS5qc29uTW9kZTsgfSk7CgogICAgICAgIHRoaXMudHJpZ2dlckFzeW5jKCJ3YXJuaW5nIiwgewogICAgICAgICAgY29kZTogIlcxMTUiLAogICAgICAgICAgbGluZTogdGhpcy5saW5lLAogICAgICAgICAgY2hhcmFjdGVyOiB0aGlzLmNoYXIKICAgICAgICB9LCBjaGVja3MsIGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHN0YXRlLmlzU3RyaWN0KCkgJiYgdG9rZW4uYmFzZSA9PT0gOCAmJiB0b2tlbi5pc0xlZ2FjeTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy50cmlnZ2VyKCJOdW1iZXIiLCB7CiAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICBjaGFyOiB0aGlzLmNoYXIsCiAgICAgICAgICBmcm9tOiB0aGlzLmZyb20sCiAgICAgICAgICB2YWx1ZTogdG9rZW4udmFsdWUsCiAgICAgICAgICBiYXNlOiB0b2tlbi5iYXNlLAogICAgICAgICAgaXNNYWxmb3JtZWQ6IHRva2VuLm1hbGZvcm1lZAogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gY3JlYXRlKCIobnVtYmVyKSIsIHRva2VuLnZhbHVlKTsKCiAgICAgIGNhc2UgVG9rZW4uUmVnRXhwOgogICAgICAgIHJldHVybiBjcmVhdGUoIihyZWdleHApIiwgdG9rZW4udmFsdWUpOwoKICAgICAgY2FzZSBUb2tlbi5Db21tZW50OgogICAgICAgIHN0YXRlLnRva2Vucy5jdXJyLmNvbW1lbnQgPSB0cnVlOwoKICAgICAgICBpZiAodG9rZW4uaXNTcGVjaWFsKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBpZDogJyhjb21tZW50KScsCiAgICAgICAgICAgIHZhbHVlOiB0b2tlbi52YWx1ZSwKICAgICAgICAgICAgYm9keTogdG9rZW4uYm9keSwKICAgICAgICAgICAgdHlwZTogdG9rZW4uY29tbWVudFR5cGUsCiAgICAgICAgICAgIGlzU3BlY2lhbDogdG9rZW4uaXNTcGVjaWFsLAogICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsCiAgICAgICAgICAgIGNoYXJhY3RlcjogdGhpcy5jaGFyLAogICAgICAgICAgICBmcm9tOiB0aGlzLmZyb20KICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgIiI6CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBjcmVhdGUoIihwdW5jdHVhdG9yKSIsIHRva2VuLnZhbHVlKTsKICAgICAgfQogICAgfQogIH0KfTsKCmV4cG9ydHMuTGV4ZXIgPSBMZXhlcjsKZXhwb3J0cy5Db250ZXh0ID0gQ29udGV4dDsKCn0seyIuLi9kYXRhL2FzY2lpLWlkZW50aWZpZXItZGF0YS5qcyI6Ii9ub2RlX21vZHVsZXMvanNoaW50L2RhdGEvYXNjaWktaWRlbnRpZmllci1kYXRhLmpzIiwiLi4vbG9kYXNoIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvbG9kYXNoLmpzIiwiLi9yZWcuanMiOiIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvcmVnLmpzIiwiLi9zdGF0ZS5qcyI6Ii9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9zdGF0ZS5qcyIsImV2ZW50cyI6Ii9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyJ9XSwiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL21lc3NhZ2VzLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCnZhciBfID0gX2RlcmVxXygiLi4vbG9kYXNoIik7Cgp2YXIgZXJyb3JzID0gewogIEUwMDE6ICJCYWQgb3B0aW9uOiAne2F9Jy4iLAogIEUwMDI6ICJCYWQgb3B0aW9uIHZhbHVlLiIsCiAgRTAwMzogIkV4cGVjdGVkIGEgSlNPTiB2YWx1ZS4iLAogIEUwMDQ6ICJJbnB1dCBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhbiBhcnJheSBvZiBzdHJpbmdzLiIsCiAgRTAwNTogIklucHV0IGlzIGVtcHR5LiIsCiAgRTAwNjogIlVuZXhwZWN0ZWQgZWFybHkgZW5kIG9mIHByb2dyYW0uIiwKICBFMDA3OiAiTWlzc2luZyBcInVzZSBzdHJpY3RcIiBzdGF0ZW1lbnQuIiwKICBFMDA4OiAiU3RyaWN0IHZpb2xhdGlvbi4iLAogIEUwMDk6ICJPcHRpb24gJ3ZhbGlkdGhpcycgY2FuJ3QgYmUgdXNlZCBpbiBhIGdsb2JhbCBzY29wZS4iLAogIEUwMTA6ICInd2l0aCcgaXMgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuIiwKICBFMDExOiAiJ3thfScgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZC4iLAogIEUwMTI6ICJjb25zdCAne2F9JyBpcyBpbml0aWFsaXplZCB0byAndW5kZWZpbmVkJy4iLAogIEUwMTM6ICJBdHRlbXB0aW5nIHRvIG92ZXJyaWRlICd7YX0nIHdoaWNoIGlzIGEgY29uc3RhbnQuIiwKICBFMDE0OiAiQSByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbCBjYW4gYmUgY29uZnVzZWQgd2l0aCAnLz0nLiIsCiAgRTAxNTogIlVuY2xvc2VkIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLAogIEUwMTY6ICJJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLAogIEUwMTc6ICJVbmNsb3NlZCBjb21tZW50LiIsCiAgRTAxODogIlVuYmVndW4gY29tbWVudC4iLAogIEUwMTk6ICJVbm1hdGNoZWQgJ3thfScuIiwKICBFMDIwOiAiRXhwZWN0ZWQgJ3thfScgdG8gbWF0Y2ggJ3tifScgZnJvbSBsaW5lIHtjfSBhbmQgaW5zdGVhZCBzYXcgJ3tkfScuIiwKICBFMDIxOiAiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsCiAgRTAyMjogIkxpbmUgYnJlYWtpbmcgZXJyb3IgJ3thfScuIiwKICBFMDIzOiAiTWlzc2luZyAne2F9Jy4iLAogIEUwMjQ6ICJVbmV4cGVjdGVkICd7YX0nLiIsCiAgRTAyNTogIk1pc3NpbmcgJzonIG9uIGEgY2FzZSBjbGF1c2UuIiwKICBFMDI2OiAiTWlzc2luZyAnfScgdG8gbWF0Y2ggJ3snIGZyb20gbGluZSB7YX0uIiwKICBFMDI3OiAiTWlzc2luZyAnXScgdG8gbWF0Y2ggJ1snIGZyb20gbGluZSB7YX0uIiwKICBFMDI4OiAiSWxsZWdhbCBjb21tYS4iLAogIEUwMjk6ICJVbmNsb3NlZCBzdHJpbmcuIiwKICBFMDMwOiAiRXhwZWN0ZWQgYW4gaWRlbnRpZmllciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIiwKICBFMDMxOiAiQmFkIGFzc2lnbm1lbnQuIiwgLy8gRklYTUU6IFJlcGhyYXNlCiAgRTAzMjogIkV4cGVjdGVkIGEgc21hbGwgaW50ZWdlciBvciAnZmFsc2UnIGFuZCBpbnN0ZWFkIHNhdyAne2F9Jy4iLAogIEUwMzM6ICJFeHBlY3RlZCBhbiBvcGVyYXRvciBhbmQgaW5zdGVhZCBzYXcgJ3thfScuIiwKICBFMDM0OiAiZ2V0L3NldCBhcmUgRVM1IGZlYXR1cmVzLiIsCiAgRTAzNTogIk1pc3NpbmcgcHJvcGVydHkgbmFtZS4iLAogIEUwMzY6ICJFeHBlY3RlZCB0byBzZWUgYSBzdGF0ZW1lbnQgYW5kIGluc3RlYWQgc2F3IGEgYmxvY2suIiwKICBFMDM3OiBudWxsLAogIEUwMzg6IG51bGwsCiAgRTAzOTogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhcmUgbm90IGludm9jYWJsZS4gV3JhcCB0aGUgd2hvbGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiBwYXJlbnMuIiwKICBFMDQwOiAiRWFjaCB2YWx1ZSBzaG91bGQgaGF2ZSBpdHMgb3duIGNhc2UgbGFiZWwuIiwKICBFMDQxOiAiVW5yZWNvdmVyYWJsZSBzeW50YXggZXJyb3IuIiwKICBFMDQyOiAiU3RvcHBpbmcuIiwKICBFMDQzOiAiVG9vIG1hbnkgZXJyb3JzLiIsCiAgRTA0NDogbnVsbCwKICBFMDQ1OiAiSW52YWxpZCBmb3IgZWFjaCBsb29wLiIsCiAgRTA0NjogIkEgeWllbGQgc3RhdGVtZW50IHNoYWxsIGJlIHdpdGhpbiBhIGdlbmVyYXRvciBmdW5jdGlvbiAod2l0aCBzeW50YXg6IGBmdW5jdGlvbipgKSIsCiAgRTA0NzogbnVsbCwKICBFMDQ4OiAie2F9IGRlY2xhcmF0aW9uIG5vdCBkaXJlY3RseSB3aXRoaW4gYmxvY2suIiwKICBFMDQ5OiAiQSB7YX0gY2Fubm90IGJlIG5hbWVkICd7Yn0nLiIsCiAgRTA1MDogIk1vemlsbGEgcmVxdWlyZXMgdGhlIHlpZWxkIGV4cHJlc3Npb24gdG8gYmUgcGFyZW50aGVzaXplZCBoZXJlLiIsCiAgRTA1MTogbnVsbCwKICBFMDUyOiAiVW5jbG9zZWQgdGVtcGxhdGUgbGl0ZXJhbC4iLAogIEUwNTM6ICJFeHBvcnQgZGVjbGFyYXRpb24gbXVzdCBiZSBpbiBnbG9iYWwgc2NvcGUuIiwKICBFMDU0OiAiQ2xhc3MgcHJvcGVydGllcyBtdXN0IGJlIG1ldGhvZHMuIEV4cGVjdGVkICcoJyBidXQgaW5zdGVhZCBzYXcgJ3thfScuIiwKICBFMDU1OiAiVGhlICd7YX0nIG9wdGlvbiBjYW5ub3QgYmUgc2V0IGFmdGVyIGFueSBleGVjdXRhYmxlIGNvZGUuIiwKICBFMDU2OiAiJ3thfScgd2FzIHVzZWQgYmVmb3JlIGl0IHdhcyBkZWNsYXJlZCwgd2hpY2ggaXMgaWxsZWdhbCBmb3IgJ3tifScgdmFyaWFibGVzLiIsCiAgRTA1NzogIkludmFsaWQgbWV0YSBwcm9wZXJ0eTogJ3thfS57Yn0nLiIsCiAgRTA1ODogIk1pc3Npbmcgc2VtaWNvbG9uLiIKfTsKCnZhciB3YXJuaW5ncyA9IHsKICBXMDAxOiAiJ2hhc093blByb3BlcnR5JyBpcyBhIHJlYWxseSBiYWQgbmFtZS4iLAogIFcwMDI6ICJWYWx1ZSBvZiAne2F9JyBtYXkgYmUgb3ZlcndyaXR0ZW4gaW4gSUUgOCBhbmQgZWFybGllci4iLAogIFcwMDM6ICIne2F9JyB3YXMgdXNlZCBiZWZvcmUgaXQgd2FzIGRlZmluZWQuIiwKICBXMDA0OiAiJ3thfScgaXMgYWxyZWFkeSBkZWZpbmVkLiIsCiAgVzAwNTogIkEgZG90IGZvbGxvd2luZyBhIG51bWJlciBjYW4gYmUgY29uZnVzZWQgd2l0aCBhIGRlY2ltYWwgcG9pbnQuIiwKICBXMDA2OiAiQ29uZnVzaW5nIG1pbnVzZXMuIiwKICBXMDA3OiAiQ29uZnVzaW5nIHBsdXNzZXMuIiwKICBXMDA4OiAiQSBsZWFkaW5nIGRlY2ltYWwgcG9pbnQgY2FuIGJlIGNvbmZ1c2VkIHdpdGggYSBkb3Q6ICd7YX0nLiIsCiAgVzAwOTogIlRoZSBhcnJheSBsaXRlcmFsIG5vdGF0aW9uIFtdIGlzIHByZWZlcmFibGUuIiwKICBXMDEwOiAiVGhlIG9iamVjdCBsaXRlcmFsIG5vdGF0aW9uIHt9IGlzIHByZWZlcmFibGUuIiwKICBXMDExOiBudWxsLAogIFcwMTI6IG51bGwsCiAgVzAxMzogbnVsbCwKICBXMDE0OiAiQmFkIGxpbmUgYnJlYWtpbmcgYmVmb3JlICd7YX0nLiIsCiAgVzAxNTogbnVsbCwKICBXMDE2OiAiVW5leHBlY3RlZCB1c2Ugb2YgJ3thfScuIiwKICBXMDE3OiAiQmFkIG9wZXJhbmQuIiwKICBXMDE4OiAiQ29uZnVzaW5nIHVzZSBvZiAne2F9Jy4iLAogIFcwMTk6ICJVc2UgdGhlIGlzTmFOIGZ1bmN0aW9uIHRvIGNvbXBhcmUgd2l0aCBOYU4uIiwKICBXMDIwOiAiUmVhZCBvbmx5LiIsCiAgVzAyMTogIlJlYXNzaWdubWVudCBvZiAne2F9Jywgd2hpY2ggaXMgaXMgYSB7Yn0uICIgKwogICAgIlVzZSAndmFyJyBvciAnbGV0JyB0byBkZWNsYXJlIGJpbmRpbmdzIHRoYXQgbWF5IGNoYW5nZS4iLAogIFcwMjI6ICJEbyBub3QgYXNzaWduIHRvIHRoZSBleGNlcHRpb24gcGFyYW1ldGVyLiIsCiAgVzAyMzogIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgaW4gYW4gYXNzaWdubWVudCBhbmQgaW5zdGVhZCBzYXcgYSBmdW5jdGlvbiBpbnZvY2F0aW9uLiIsCiAgVzAyNDogIkV4cGVjdGVkIGFuIGlkZW50aWZpZXIgYW5kIGluc3RlYWQgc2F3ICd7YX0nIChhIHJlc2VydmVkIHdvcmQpLiIsCiAgVzAyNTogIk1pc3NpbmcgbmFtZSBpbiBmdW5jdGlvbiBkZWNsYXJhdGlvbi4iLAogIFcwMjY6ICJJbm5lciBmdW5jdGlvbnMgc2hvdWxkIGJlIGxpc3RlZCBhdCB0aGUgdG9wIG9mIHRoZSBvdXRlciBmdW5jdGlvbi4iLAogIFcwMjc6ICJVbnJlYWNoYWJsZSAne2F9JyBhZnRlciAne2J9Jy4iLAogIFcwMjg6ICJMYWJlbCAne2F9JyBvbiB7Yn0gc3RhdGVtZW50LiIsCiAgVzAzMDogIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQgb3IgZnVuY3Rpb24gY2FsbCBhbmQgaW5zdGVhZCBzYXcgYW4gZXhwcmVzc2lvbi4iLAogIFcwMzE6ICJEbyBub3QgdXNlICduZXcnIGZvciBzaWRlIGVmZmVjdHMuIiwKICBXMDMyOiAiVW5uZWNlc3Nhcnkgc2VtaWNvbG9uLiIsCiAgVzAzMzogIk1pc3Npbmcgc2VtaWNvbG9uLiIsCiAgVzAzNDogIlVubmVjZXNzYXJ5IGRpcmVjdGl2ZSBcInthfVwiLiIsCiAgVzAzNTogIkVtcHR5IGJsb2NrLiIsCiAgVzAzNjogIlVuZXhwZWN0ZWQgLyptZW1iZXIgJ3thfScuIiwKICBXMDM3OiAiJ3thfScgaXMgYSBzdGF0ZW1lbnQgbGFiZWwuIiwKICBXMDM4OiAiJ3thfScgdXNlZCBvdXQgb2Ygc2NvcGUuIiwKICBXMDM5OiAiJ3thfScgaXMgbm90IGFsbG93ZWQuIiwKICBXMDQwOiAiUG9zc2libGUgc3RyaWN0IHZpb2xhdGlvbi4iLAogIFcwNDE6ICJVc2UgJ3thfScgdG8gY29tcGFyZSB3aXRoICd7Yn0nLiIsCiAgVzA0MjogIkF2b2lkIEVPTCBlc2NhcGluZy4iLAogIFcwNDM6ICJCYWQgZXNjYXBpbmcgb2YgRU9MLiBVc2Ugb3B0aW9uIG11bHRpc3RyIGlmIG5lZWRlZC4iLAogIFcwNDQ6ICJCYWQgb3IgdW5uZWNlc3NhcnkgZXNjYXBpbmcuIiwgLyogVE9ETyhjYWl0cCk6IHJlbW92ZSBXMDQ0ICovCiAgVzA0NTogIkJhZCBudW1iZXIgJ3thfScuIiwKICBXMDQ2OiAiRG9uJ3QgdXNlIGV4dHJhIGxlYWRpbmcgemVyb3MgJ3thfScuIiwKICBXMDQ3OiAiQSB0cmFpbGluZyBkZWNpbWFsIHBvaW50IGNhbiBiZSBjb25mdXNlZCB3aXRoIGEgZG90OiAne2F9Jy4iLAogIFcwNDg6ICJVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLAogIFcwNDk6ICJVbmV4cGVjdGVkIGVzY2FwZWQgY2hhcmFjdGVyICd7YX0nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbi4iLAogIFcwNTA6ICJKYXZhU2NyaXB0IFVSTC4iLAogIFcwNTE6ICJWYXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiIsCiAgVzA1MjogIlVuZXhwZWN0ZWQgJ3thfScuIiwKICBXMDUzOiAiRG8gbm90IHVzZSB7YX0gYXMgYSBjb25zdHJ1Y3Rvci4iLAogIFcwNTQ6ICJUaGUgRnVuY3Rpb24gY29uc3RydWN0b3IgaXMgYSBmb3JtIG9mIGV2YWwuIiwKICBXMDU1OiAiQSBjb25zdHJ1Y3RvciBuYW1lIHNob3VsZCBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuIiwKICBXMDU2OiAiQmFkIGNvbnN0cnVjdG9yLiIsCiAgVzA1NzogIldlaXJkIGNvbnN0cnVjdGlvbi4gSXMgJ25ldycgbmVjZXNzYXJ5PyIsCiAgVzA1ODogIk1pc3NpbmcgJygpJyBpbnZva2luZyBhIGNvbnN0cnVjdG9yLiIsCiAgVzA1OTogIkF2b2lkIGFyZ3VtZW50cy57YX0uIiwKICBXMDYwOiAiZG9jdW1lbnQud3JpdGUgY2FuIGJlIGEgZm9ybSBvZiBldmFsLiIsCiAgVzA2MTogImV2YWwgY2FuIGJlIGhhcm1mdWwuIiwKICBXMDYyOiAiV3JhcCBhbiBpbW1lZGlhdGUgZnVuY3Rpb24gaW52b2NhdGlvbiBpbiBwYXJlbnMgIiArCiAgICAidG8gYXNzaXN0IHRoZSByZWFkZXIgaW4gdW5kZXJzdGFuZGluZyB0aGF0IHRoZSBleHByZXNzaW9uICIgKwogICAgImlzIHRoZSByZXN1bHQgb2YgYSBmdW5jdGlvbiwgYW5kIG5vdCB0aGUgZnVuY3Rpb24gaXRzZWxmLiIsCiAgVzA2MzogIk1hdGggaXMgbm90IGEgZnVuY3Rpb24uIiwKICBXMDY0OiAiTWlzc2luZyAnbmV3JyBwcmVmaXggd2hlbiBpbnZva2luZyBhIGNvbnN0cnVjdG9yLiIsCiAgVzA2NTogIk1pc3NpbmcgcmFkaXggcGFyYW1ldGVyLiIsCiAgVzA2NjogIkltcGxpZWQgZXZhbC4gQ29uc2lkZXIgcGFzc2luZyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBzdHJpbmcuIiwKICBXMDY3OiAiQmFkIGludm9jYXRpb24uIiwKICBXMDY4OiAiV3JhcHBpbmcgbm9uLUlJRkUgZnVuY3Rpb24gbGl0ZXJhbHMgaW4gcGFyZW5zIGlzIHVubmVjZXNzYXJ5LiIsCiAgVzA2OTogIlsne2F9J10gaXMgYmV0dGVyIHdyaXR0ZW4gaW4gZG90IG5vdGF0aW9uLiIsCiAgVzA3MDogIkV4dHJhIGNvbW1hLiAoaXQgYnJlYWtzIG9sZGVyIHZlcnNpb25zIG9mIElFKSIsCiAgVzA3MTogIlRoaXMgZnVuY3Rpb24gaGFzIHRvbyBtYW55IHN0YXRlbWVudHMuICh7YX0pIiwKICBXMDcyOiAiVGhpcyBmdW5jdGlvbiBoYXMgdG9vIG1hbnkgcGFyYW1ldGVycy4gKHthfSkiLAogIFcwNzM6ICJCbG9ja3MgYXJlIG5lc3RlZCB0b28gZGVlcGx5LiAoe2F9KSIsCiAgVzA3NDogIlRoaXMgZnVuY3Rpb24ncyBjeWNsb21hdGljIGNvbXBsZXhpdHkgaXMgdG9vIGhpZ2guICh7YX0pIiwKICBXMDc1OiAiRHVwbGljYXRlIHthfSAne2J9Jy4iLAogIFcwNzY6ICJVbmV4cGVjdGVkIHBhcmFtZXRlciAne2F9JyBpbiBnZXQge2J9IGZ1bmN0aW9uLiIsCiAgVzA3NzogIkV4cGVjdGVkIGEgc2luZ2xlIHBhcmFtZXRlciBpbiBzZXQge2F9IGZ1bmN0aW9uLiIsCiAgVzA3ODogIlNldHRlciBpcyBkZWZpbmVkIHdpdGhvdXQgZ2V0dGVyLiIsCiAgVzA3OTogIlJlZGVmaW5pdGlvbiBvZiAne2F9Jy4iLAogIFcwODA6ICJJdCdzIG5vdCBuZWNlc3NhcnkgdG8gaW5pdGlhbGl6ZSAne2F9JyB0byAndW5kZWZpbmVkJy4iLAogIFcwODE6IG51bGwsCiAgVzA4MjogIkZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiBibG9ja3MuICIgKwogICAgIlVzZSBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gb3IgbW92ZSB0aGUgc3RhdGVtZW50IHRvIHRoZSB0b3Agb2YgIiArCiAgICAidGhlIG91dGVyIGZ1bmN0aW9uLiIsCiAgVzA4MzogIkRvbid0IG1ha2UgZnVuY3Rpb25zIHdpdGhpbiBhIGxvb3AuIiwKICBXMDg0OiAiQXNzaWdubWVudCBpbiBjb25kaXRpb25hbCBleHByZXNzaW9uIiwKICBXMDg1OiAiRG9uJ3QgdXNlICd3aXRoJy4iLAogIFcwODY6ICJFeHBlY3RlZCBhICdicmVhaycgc3RhdGVtZW50IGJlZm9yZSAne2F9Jy4iLAogIFcwODc6ICJGb3Jnb3R0ZW4gJ2RlYnVnZ2VyJyBzdGF0ZW1lbnQ/IiwKICBXMDg4OiAiQ3JlYXRpbmcgZ2xvYmFsICdmb3InIHZhcmlhYmxlLiBTaG91bGQgYmUgJ2ZvciAodmFyIHthfSAuLi4nLiIsCiAgVzA4OTogIlRoZSBib2R5IG9mIGEgZm9yIGluIHNob3VsZCBiZSB3cmFwcGVkIGluIGFuIGlmIHN0YXRlbWVudCB0byBmaWx0ZXIgIiArCiAgICAidW53YW50ZWQgcHJvcGVydGllcyBmcm9tIHRoZSBwcm90b3R5cGUuIiwKICBXMDkwOiAiJ3thfScgaXMgbm90IGEgc3RhdGVtZW50IGxhYmVsLiIsCiAgVzA5MTogbnVsbCwKICBXMDkzOiAiRGlkIHlvdSBtZWFuIHRvIHJldHVybiBhIGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgYW4gYXNzaWdubWVudD8iLAogIFcwOTQ6ICJVbmV4cGVjdGVkIGNvbW1hLiIsCiAgVzA5NTogIkV4cGVjdGVkIGEgc3RyaW5nIGFuZCBpbnN0ZWFkIHNhdyB7YX0uIiwKICBXMDk2OiAiVGhlICd7YX0nIGtleSBtYXkgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMuIiwKICBXMDk3OiAiVXNlIHRoZSBmdW5jdGlvbiBmb3JtIG9mIFwidXNlIHN0cmljdFwiLiIsCiAgVzA5ODogIid7YX0nIGlzIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQuIiwKICBXMDk5OiBudWxsLAogIFcxMDA6ICJUaGlzIGNoYXJhY3RlciBtYXkgZ2V0IHNpbGVudGx5IGRlbGV0ZWQgYnkgb25lIG9yIG1vcmUgYnJvd3NlcnMuIiwKICBXMTAxOiAiTGluZSBpcyB0b28gbG9uZy4iLAogIFcxMDI6IG51bGwsCiAgVzEwMzogIlRoZSAne2F9JyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLiIsCiAgVzEwNDogIid7YX0nIGlzIGF2YWlsYWJsZSBpbiBFU3tifSAodXNlICdlc3ZlcnNpb246IHtifScpIG9yIE1vemlsbGEgSlMgZXh0ZW5zaW9ucyAodXNlIG1veikuIiwKICBXMTA1OiAiVW5leHBlY3RlZCB7YX0gaW4gJ3tifScuIiwKICBXMTA2OiAiSWRlbnRpZmllciAne2F9JyBpcyBub3QgaW4gY2FtZWwgY2FzZS4iLAogIFcxMDc6ICJTY3JpcHQgVVJMLiIsCiAgVzEwODogIlN0cmluZ3MgbXVzdCB1c2UgZG91YmxlcXVvdGUuIiwKICBXMTA5OiAiU3RyaW5ncyBtdXN0IHVzZSBzaW5nbGVxdW90ZS4iLAogIFcxMTA6ICJNaXhlZCBkb3VibGUgYW5kIHNpbmdsZSBxdW90ZXMuIiwKICBXMTEyOiAiVW5jbG9zZWQgc3RyaW5nLiIsCiAgVzExMzogIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZzoge2F9LiIsCiAgVzExNDogIkF2b2lkIHthfS4iLAogIFcxMTU6ICJPY3RhbCBsaXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuIiwKICBXMTE2OiAiRXhwZWN0ZWQgJ3thfScgYW5kIGluc3RlYWQgc2F3ICd7Yn0nLiIsCiAgVzExNzogIid7YX0nIGlzIG5vdCBkZWZpbmVkLiIsCiAgVzExODogIid7YX0nIGlzIG9ubHkgYXZhaWxhYmxlIGluIE1vemlsbGEgSmF2YVNjcmlwdCBleHRlbnNpb25zICh1c2UgbW96IG9wdGlvbikuIiwKICBXMTE5OiAiJ3thfScgaXMgb25seSBhdmFpbGFibGUgaW4gRVN7Yn0gKHVzZSAnZXN2ZXJzaW9uOiB7Yn0nKS4iLAogIFcxMjA6ICJZb3UgbWlnaHQgYmUgbGVha2luZyBhIHZhcmlhYmxlICh7YX0pIGhlcmUuIiwKICBXMTIxOiAiRXh0ZW5kaW5nIHByb3RvdHlwZSBvZiBuYXRpdmUgb2JqZWN0OiAne2F9Jy4iLAogIFcxMjI6ICJJbnZhbGlkIHR5cGVvZiB2YWx1ZSAne2F9JyIsCiAgVzEyMzogIid7YX0nIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBvdXRlciBzY29wZS4iLAogIFcxMjQ6ICJBIGdlbmVyYXRvciBmdW5jdGlvbiBzaGFsbCBjb250YWluIGEgeWllbGQgc3RhdGVtZW50LiIsCiAgVzEyNTogIlRoaXMgbGluZSBjb250YWlucyBub24tYnJlYWtpbmcgc3BhY2VzOiBodHRwOi8vanNoaW50LmNvbS9kb2Mvb3B0aW9ucy8jbm9uYnNwIiwKICBXMTI2OiAiVW5uZWNlc3NhcnkgZ3JvdXBpbmcgb3BlcmF0b3IuIiwKICBXMTI3OiAiVW5leHBlY3RlZCB1c2Ugb2YgYSBjb21tYSBvcGVyYXRvci4iLAogIFcxMjg6ICJFbXB0eSBhcnJheSBlbGVtZW50cyByZXF1aXJlIGVsaXNpb249dHJ1ZS4iLAogIFcxMjk6ICIne2F9JyBpcyBkZWZpbmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgSmF2YVNjcmlwdC4gVXNlIGEgIiArCiAgICAiZGlmZmVyZW50IHZhcmlhYmxlIG5hbWUgdG8gYXZvaWQgbWlncmF0aW9uIGlzc3Vlcy4iLAogIFcxMzA6ICJJbnZhbGlkIGVsZW1lbnQgYWZ0ZXIgcmVzdCBlbGVtZW50LiIsCiAgVzEzMTogIkludmFsaWQgcGFyYW1ldGVyIGFmdGVyIHJlc3QgcGFyYW1ldGVyLiIsCiAgVzEzMjogImB2YXJgIGRlY2xhcmF0aW9ucyBhcmUgZm9yYmlkZGVuLiBVc2UgYGxldGAgb3IgYGNvbnN0YCBpbnN0ZWFkLiIsCiAgVzEzMzogIkludmFsaWQgZm9yLXthfSBsb29wIGxlZnQtaGFuZC1zaWRlOiB7Yn0uIiwKICBXMTM0OiAiVGhlICd7YX0nIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSB3aGVuIGxpbnRpbmcgRUNNQVNjcmlwdCB7Yn0gY29kZS4iLAogIFcxMzU6ICJ7YX0gbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRzLiIsCiAgVzEzNjogIid7YX0nIG11c3QgYmUgaW4gZnVuY3Rpb24gc2NvcGUuIiwKICBXMTM3OiAiRW1wdHkgZGVzdHJ1Y3R1cmluZy4iLAogIFcxMzg6ICJSZWd1bGFyIHBhcmFtZXRlcnMgc2hvdWxkIG5vdCBjb21lIGFmdGVyIGRlZmF1bHQgcGFyYW1ldGVycy4iCn07Cgp2YXIgaW5mbyA9IHsKICBJMDAxOiAiQ29tbWEgd2FybmluZ3MgY2FuIGJlIHR1cm5lZCBvZmYgd2l0aCAnbGF4Y29tbWEnLiIsCiAgSTAwMjogbnVsbCwKICBJMDAzOiAiRVM1IG9wdGlvbiBpcyBub3cgc2V0IHBlciBkZWZhdWx0Igp9OwoKZXhwb3J0cy5lcnJvcnMgPSB7fTsKZXhwb3J0cy53YXJuaW5ncyA9IHt9OwpleHBvcnRzLmluZm8gPSB7fTsKCl8uZWFjaChlcnJvcnMsIGZ1bmN0aW9uKGRlc2MsIGNvZGUpIHsKICBleHBvcnRzLmVycm9yc1tjb2RlXSA9IHsgY29kZTogY29kZSwgZGVzYzogZGVzYyB9Owp9KTsKCl8uZWFjaCh3YXJuaW5ncywgZnVuY3Rpb24oZGVzYywgY29kZSkgewogIGV4cG9ydHMud2FybmluZ3NbY29kZV0gPSB7IGNvZGU6IGNvZGUsIGRlc2M6IGRlc2MgfTsKfSk7CgpfLmVhY2goaW5mbywgZnVuY3Rpb24oZGVzYywgY29kZSkgewogIGV4cG9ydHMuaW5mb1tjb2RlXSA9IHsgY29kZTogY29kZSwgZGVzYzogZGVzYyB9Owp9KTsKCn0seyIuLi9sb2Rhc2giOiIvbm9kZV9tb2R1bGVzL2pzaGludC9sb2Rhc2guanMifV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9uYW1lLXN0YWNrLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKCmZ1bmN0aW9uIE5hbWVTdGFjaygpIHsKICB0aGlzLl9zdGFjayA9IFtdOwp9CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoTmFtZVN0YWNrLnByb3RvdHlwZSwgImxlbmd0aCIsIHsKICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aDsKICB9Cn0pOwpOYW1lU3RhY2sucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbigpIHsKICB0aGlzLl9zdGFjay5wdXNoKG51bGwpOwp9OwpOYW1lU3RhY2sucHJvdG90eXBlLnBvcCA9IGZ1bmN0aW9uKCkgewogIHRoaXMuX3N0YWNrLnBvcCgpOwp9OwpOYW1lU3RhY2sucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKHRva2VuKSB7CiAgdGhpcy5fc3RhY2tbdGhpcy5sZW5ndGggLSAxXSA9IHRva2VuOwp9OwpOYW1lU3RhY2sucHJvdG90eXBlLmluZmVyID0gZnVuY3Rpb24oKSB7CiAgdmFyIG5hbWVUb2tlbiA9IHRoaXMuX3N0YWNrW3RoaXMubGVuZ3RoIC0gMV07CiAgdmFyIHByZWZpeCA9ICIiOwogIHZhciB0eXBlOwogIGlmICghbmFtZVRva2VuIHx8IG5hbWVUb2tlbi50eXBlID09PSAiY2xhc3MiKSB7CiAgICBuYW1lVG9rZW4gPSB0aGlzLl9zdGFja1t0aGlzLmxlbmd0aCAtIDJdOwogIH0KCiAgaWYgKCFuYW1lVG9rZW4pIHsKICAgIHJldHVybiAiKGVtcHR5KSI7CiAgfQoKICB0eXBlID0gbmFtZVRva2VuLnR5cGU7CgogIGlmICh0eXBlICE9PSAiKHN0cmluZykiICYmIHR5cGUgIT09ICIobnVtYmVyKSIgJiYgdHlwZSAhPT0gIihpZGVudGlmaWVyKSIgJiYgdHlwZSAhPT0gImRlZmF1bHQiKSB7CiAgICByZXR1cm4gIihleHByZXNzaW9uKSI7CiAgfQoKICBpZiAobmFtZVRva2VuLmFjY2Vzc29yVHlwZSkgewogICAgcHJlZml4ID0gbmFtZVRva2VuLmFjY2Vzc29yVHlwZSArICIgIjsKICB9CgogIHJldHVybiBwcmVmaXggKyBuYW1lVG9rZW4udmFsdWU7Cn07Cgptb2R1bGUuZXhwb3J0cyA9IE5hbWVTdGFjazsKCn0se31dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvb3B0aW9ucy5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CmV4cG9ydHMuYm9vbCA9IHsKICBlbmZvcmNpbmc6IHsKICAgIGJpdHdpc2UgICAgIDogdHJ1ZSwKICAgIGZyZWV6ZSAgICAgIDogdHJ1ZSwKICAgIGNhbWVsY2FzZSAgIDogdHJ1ZSwKICAgIGN1cmx5ICAgICAgIDogdHJ1ZSwKICAgIGVxZXFlcSAgICAgIDogdHJ1ZSwKICAgIGZ1dHVyZWhvc3RpbGU6IHRydWUsCiAgICBub3R5cGVvZiAgICA6IHRydWUsCiAgICBlczMgICAgICAgICA6IHRydWUsCiAgICBlczUgICAgICAgICA6IHRydWUsCiAgICBmb3JpbiAgICAgICA6IHRydWUsCiAgICBmdW5jc2NvcGUgICA6IHRydWUsCiAgICBpbW1lZCAgICAgICA6IHRydWUsCiAgICBpdGVyYXRvciAgICA6IHRydWUsCiAgICBuZXdjYXAgICAgICA6IHRydWUsCiAgICBub2FyZyAgICAgICA6IHRydWUsCiAgICBub2NvbW1hICAgICA6IHRydWUsCiAgICBub2VtcHR5ICAgICA6IHRydWUsCiAgICBub25ic3AgICAgICA6IHRydWUsCiAgICBub25ldyAgICAgICA6IHRydWUsCiAgICB1bmRlZiAgICAgICA6IHRydWUsCiAgICBzaW5nbGVHcm91cHM6IGZhbHNlLAogICAgdmFyc3RtdDogZmFsc2UsCiAgICBlbmZvcmNlYWxsIDogZmFsc2UKICB9LAogIHJlbGF4aW5nOiB7CiAgICBhc2kgICAgICAgICA6IHRydWUsCiAgICBtdWx0aXN0ciAgICA6IHRydWUsCiAgICBkZWJ1ZyAgICAgICA6IHRydWUsCiAgICBib3NzICAgICAgICA6IHRydWUsCiAgICBldmlsICAgICAgICA6IHRydWUsCiAgICBnbG9iYWxzdHJpY3Q6IHRydWUsCiAgICBwbHVzcGx1cyAgICA6IHRydWUsCiAgICBwcm90byAgICAgICA6IHRydWUsCiAgICBzY3JpcHR1cmwgICA6IHRydWUsCiAgICBzdWIgICAgICAgICA6IHRydWUsCiAgICBzdXBlcm5ldyAgICA6IHRydWUsCiAgICBsYXhicmVhayAgICA6IHRydWUsCiAgICBsYXhjb21tYSAgICA6IHRydWUsCiAgICB2YWxpZHRoaXMgICA6IHRydWUsCiAgICB3aXRoc3RtdCAgICA6IHRydWUsCiAgICBtb3ogICAgICAgICA6IHRydWUsCiAgICBub3lpZWxkICAgICA6IHRydWUsCiAgICBlcW51bGwgICAgICA6IHRydWUsCiAgICBsYXN0c2VtaWMgICA6IHRydWUsCiAgICBsb29wZnVuYyAgICA6IHRydWUsCiAgICBleHByICAgICAgICA6IHRydWUsCiAgICBlc25leHQgICAgICA6IHRydWUsCiAgICBlbGlzaW9uICAgICA6IHRydWUsCiAgfSwKICBlbnZpcm9ubWVudHM6IHsKICAgIG1vb3Rvb2xzICAgIDogdHJ1ZSwKICAgIGNvdWNoICAgICAgIDogdHJ1ZSwKICAgIGphc21pbmUgICAgIDogdHJ1ZSwKICAgIGpxdWVyeSAgICAgIDogdHJ1ZSwKICAgIG5vZGUgICAgICAgIDogdHJ1ZSwKICAgIHF1bml0ICAgICAgIDogdHJ1ZSwKICAgIHJoaW5vICAgICAgIDogdHJ1ZSwKICAgIHNoZWxsanMgICAgIDogdHJ1ZSwKICAgIHByb3RvdHlwZWpzIDogdHJ1ZSwKICAgIHl1aSAgICAgICAgIDogdHJ1ZSwKICAgIG1vY2hhICAgICAgIDogdHJ1ZSwKICAgIG1vZHVsZSAgICAgIDogdHJ1ZSwKICAgIHdzaCAgICAgICAgIDogdHJ1ZSwKICAgIHdvcmtlciAgICAgIDogdHJ1ZSwKICAgIG5vbnN0YW5kYXJkIDogdHJ1ZSwKICAgIGJyb3dzZXIgICAgIDogdHJ1ZSwKICAgIGJyb3dzZXJpZnkgIDogdHJ1ZSwKICAgIGRldmVsICAgICAgIDogdHJ1ZSwKICAgIGRvam8gICAgICAgIDogdHJ1ZSwKICAgIHR5cGVkICAgICAgIDogdHJ1ZSwKICAgIHBoYW50b20gICAgIDogdHJ1ZQogIH0sCiAgb2Jzb2xldGU6IHsKICAgIG9uZWNhc2UgICAgIDogdHJ1ZSwgLy8gaWYgb25lIGNhc2Ugc3dpdGNoIHN0YXRlbWVudHMgc2hvdWxkIGJlIGFsbG93ZWQKICAgIHJlZ2V4cCAgICAgIDogdHJ1ZSwgLy8gaWYgdGhlIC4gc2hvdWxkIG5vdCBiZSBhbGxvd2VkIGluIHJlZ2V4cCBsaXRlcmFscwogICAgcmVnZXhkYXNoICAgOiB0cnVlICAvLyBpZiB1bmVzY2FwZWQgZmlyc3QvbGFzdCBkYXNoICgtKSBpbnNpZGUgYnJhY2tldHMKICB9Cn07CmV4cG9ydHMudmFsID0gewogIG1heGxlbiAgICAgICA6IGZhbHNlLAogIGluZGVudCAgICAgICA6IGZhbHNlLAogIG1heGVyciAgICAgICA6IGZhbHNlLAogIHByZWRlZiAgICAgICA6IGZhbHNlLAogIGdsb2JhbHMgICAgICA6IGZhbHNlLAogIHF1b3RtYXJrICAgICA6IGZhbHNlLAoKICBzY29wZSAgICAgICAgOiBmYWxzZSwKICBtYXhzdGF0ZW1lbnRzOiBmYWxzZSwKICBtYXhkZXB0aCAgICAgOiBmYWxzZSwKICBtYXhwYXJhbXMgICAgOiBmYWxzZSwKICBtYXhjb21wbGV4aXR5OiBmYWxzZSwKICBzaGFkb3cgICAgICAgOiBmYWxzZSwKICBzdHJpY3QgICAgICA6IHRydWUsCiAgdW51c2VkICAgICAgIDogdHJ1ZSwKICBsYXRlZGVmICAgICAgOiBmYWxzZSwKCiAgaWdub3JlICAgICAgIDogZmFsc2UsIC8vIHN0YXJ0L2VuZCBpZ25vcmluZyBsaW5lcyBvZiBjb2RlLCBieXBhc3NpbmcgdGhlIGxleGVyCgogIGlnbm9yZURlbGltaXRlcnM6IGZhbHNlLCAvLyBhcnJheSBvZiBzdGFydC9lbmQgZGVsaW1pdGVycyB1c2VkIHRvIGlnbm9yZQogIGVzdmVyc2lvbjogNQp9OwpleHBvcnRzLmludmVydGVkID0gewogIGJpdHdpc2UgOiB0cnVlLAogIGZvcmluICAgOiB0cnVlLAogIG5ld2NhcCAgOiB0cnVlLAogIHBsdXNwbHVzOiB0cnVlLAogIHJlZ2V4cCAgOiB0cnVlLAogIHVuZGVmICAgOiB0cnVlLAogIGVxZXFlcSAgOiB0cnVlLAogIHN0cmljdCAgOiB0cnVlCn07CgpleHBvcnRzLnZhbGlkTmFtZXMgPSBPYmplY3Qua2V5cyhleHBvcnRzLnZhbCkKICAuY29uY2F0KE9iamVjdC5rZXlzKGV4cG9ydHMuYm9vbC5yZWxheGluZykpCiAgLmNvbmNhdChPYmplY3Qua2V5cyhleHBvcnRzLmJvb2wuZW5mb3JjaW5nKSkKICAuY29uY2F0KE9iamVjdC5rZXlzKGV4cG9ydHMuYm9vbC5vYnNvbGV0ZSkpCiAgLmNvbmNhdChPYmplY3Qua2V5cyhleHBvcnRzLmJvb2wuZW52aXJvbm1lbnRzKSk7CmV4cG9ydHMucmVuYW1lZCA9IHsKICBlcWVxICAgOiAiZXFlcWVxIiwKICB3aW5kb3dzOiAid3NoIiwKICBzbG9wcHkgOiAic3RyaWN0Igp9OwoKZXhwb3J0cy5yZW1vdmVkID0gewogIG5vbWVuOiB0cnVlLAogIG9uZXZhcjogdHJ1ZSwKICBwYXNzZmFpbDogdHJ1ZSwKICB3aGl0ZTogdHJ1ZSwKICBnY2w6IHRydWUsCiAgc21hcnR0YWJzOiB0cnVlLAogIHRyYWlsaW5nOiB0cnVlCn07CmV4cG9ydHMubm9lbmZvcmNlYWxsID0gewogIHZhcnN0bXQ6IHRydWUsCiAgc3RyaWN0OiB0cnVlCn07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3JlZy5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewoKInVzZSBzdHJpY3QiOwpleHBvcnRzLnVuc2FmZVN0cmluZyA9CiAgL0BjY3w8XC8/fHNjcmlwdHxcXVxzKlxdfDxccyohfCZsdC9pOwpleHBvcnRzLnVuc2FmZUNoYXJzID0KICAvW1x1MDAwMC1cdTAwMWZcdTAwN2YtXHUwMDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdLzsKZXhwb3J0cy5uZWVkRXNjID0KICAvW1x1MDAwMC1cdTAwMWYmPCJcL1xcXHUwMDdmLVx1MDA5Zlx1MDBhZFx1MDYwMC1cdTA2MDRcdTA3MGZcdTE3YjRcdTE3YjVcdTIwMGMtXHUyMDBmXHUyMDI4LVx1MjAyZlx1MjA2MC1cdTIwNmZcdWZlZmZcdWZmZjAtXHVmZmZmXS87CgpleHBvcnRzLm5lZWRFc2NHbG9iYWwgPQogIC9bXHUwMDAwLVx1MDAxZiY8IlwvXFxcdTAwN2YtXHUwMDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2c7CmV4cG9ydHMuc3RhclNsYXNoID0gL1wqXC8vOwpleHBvcnRzLmlkZW50aWZpZXIgPSAvXihbYS16QS1aXyRdW2EtekEtWjAtOV8kXSopJC87CmV4cG9ydHMuamF2YXNjcmlwdFVSTCA9IC9eKD86amF2YXNjcmlwdHxqc2NyaXB0fGVjbWFzY3JpcHR8dmJzY3JpcHR8bGl2ZXNjcmlwdClccyo6L2k7CmV4cG9ydHMuZmFsbHNUaHJvdWdoID0gL15ccypmYWxscz9cc3Rocm91Z2hccyokLzsKZXhwb3J0cy5tYXhsZW5FeGNlcHRpb24gPSAvXig/Oig/OlwvXC98XC9cKnxcKikgPyk/W14gXSskLzsKCn0se31dLCIvbm9kZV9tb2R1bGVzL2pzaGludC9zcmMvc2NvcGUtbWFuYWdlci5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7Cgp2YXIgXyAgICAgID0gX2RlcmVxXygiLi4vbG9kYXNoIik7CnZhciBldmVudHMgPSBfZGVyZXFfKCJldmVudHMiKTsKdmFyIG1hcmtlciA9IHt9Owp2YXIgc2NvcGVNYW5hZ2VyID0gZnVuY3Rpb24oc3RhdGUsIHByZWRlZmluZWQsIGV4cG9ydGVkLCBkZWNsYXJlZCkgewoKICB2YXIgX2N1cnJlbnQ7CiAgdmFyIF9zY29wZVN0YWNrID0gW107CgogIGZ1bmN0aW9uIF9uZXdTY29wZSh0eXBlKSB7CiAgICBfY3VycmVudCA9IHsKICAgICAgIihsYWJlbHMpIjogT2JqZWN0LmNyZWF0ZShudWxsKSwKICAgICAgIih1c2FnZXMpIjogT2JqZWN0LmNyZWF0ZShudWxsKSwKICAgICAgIihicmVha0xhYmVscykiOiBPYmplY3QuY3JlYXRlKG51bGwpLAogICAgICAiKHBhcmVudCkiOiBfY3VycmVudCwKICAgICAgIih0eXBlKSI6IHR5cGUsCiAgICAgICIocGFyYW1zKSI6ICh0eXBlID09PSAiZnVuY3Rpb25wYXJhbXMiIHx8IHR5cGUgPT09ICJjYXRjaHBhcmFtcyIpID8gW10gOiBudWxsCiAgICB9OwogICAgX3Njb3BlU3RhY2sucHVzaChfY3VycmVudCk7CiAgfQoKICBfbmV3U2NvcGUoImdsb2JhbCIpOwogIF9jdXJyZW50WyIocHJlZGVmaW5lZCkiXSA9IHByZWRlZmluZWQ7CgogIHZhciBfY3VycmVudEZ1bmN0Qm9keSA9IF9jdXJyZW50OyAvLyB0aGlzIGlzIHRoZSBibG9jayBhZnRlciB0aGUgcGFyYW1zID0gZnVuY3Rpb24KCiAgdmFyIHVzZWRQcmVkZWZpbmVkQW5kR2xvYmFscyA9IE9iamVjdC5jcmVhdGUobnVsbCk7CiAgdmFyIGltcGxpZWRHbG9iYWxzID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKICB2YXIgdW51c2VkcyA9IFtdOwogIHZhciBlbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTsKCiAgZnVuY3Rpb24gd2FybmluZyhjb2RlLCB0b2tlbikgewogICAgZW1pdHRlci5lbWl0KCJ3YXJuaW5nIiwgewogICAgICBjb2RlOiBjb2RlLAogICAgICB0b2tlbjogdG9rZW4sCiAgICAgIGRhdGE6IF8uc2xpY2UoYXJndW1lbnRzLCAyKQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBlcnJvcihjb2RlLCB0b2tlbikgewogICAgZW1pdHRlci5lbWl0KCJ3YXJuaW5nIiwgewogICAgICBjb2RlOiBjb2RlLAogICAgICB0b2tlbjogdG9rZW4sCiAgICAgIGRhdGE6IF8uc2xpY2UoYXJndW1lbnRzLCAyKQogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBfc2V0dXBVc2FnZXMobGFiZWxOYW1lKSB7CiAgICBpZiAoIV9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV0pIHsKICAgICAgX2N1cnJlbnRbIih1c2FnZXMpIl1bbGFiZWxOYW1lXSA9IHsKICAgICAgICAiKG1vZGlmaWVkKSI6IFtdLAogICAgICAgICIocmVhc3NpZ25lZCkiOiBbXSwKICAgICAgICAiKHRva2VucykiOiBbXQogICAgICB9OwogICAgfQogIH0KCiAgdmFyIF9nZXRVbnVzZWRPcHRpb24gPSBmdW5jdGlvbih1bnVzZWRfb3B0KSB7CiAgICBpZiAodW51c2VkX29wdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgIHVudXNlZF9vcHQgPSBzdGF0ZS5vcHRpb24udW51c2VkOwogICAgfQoKICAgIGlmICh1bnVzZWRfb3B0ID09PSB0cnVlKSB7CiAgICAgIHVudXNlZF9vcHQgPSAibGFzdC1wYXJhbSI7CiAgICB9CgogICAgcmV0dXJuIHVudXNlZF9vcHQ7CiAgfTsKCiAgdmFyIF93YXJuVW51c2VkID0gZnVuY3Rpb24obmFtZSwgdGtuLCB0eXBlLCB1bnVzZWRfb3B0KSB7CiAgICB2YXIgbGluZSA9IHRrbi5saW5lOwogICAgdmFyIGNociAgPSB0a24uZnJvbTsKICAgIHZhciByYXdfbmFtZSA9IHRrbi5yYXdfdGV4dCB8fCBuYW1lOwoKICAgIHVudXNlZF9vcHQgPSBfZ2V0VW51c2VkT3B0aW9uKHVudXNlZF9vcHQpOwoKICAgIHZhciB3YXJuYWJsZV90eXBlcyA9IHsKICAgICAgInZhcnMiOiBbInZhciJdLAogICAgICAibGFzdC1wYXJhbSI6IFsidmFyIiwgInBhcmFtIl0sCiAgICAgICJzdHJpY3QiOiBbInZhciIsICJwYXJhbSIsICJsYXN0LXBhcmFtIl0KICAgIH07CgogICAgaWYgKHVudXNlZF9vcHQpIHsKICAgICAgaWYgKHdhcm5hYmxlX3R5cGVzW3VudXNlZF9vcHRdICYmIHdhcm5hYmxlX3R5cGVzW3VudXNlZF9vcHRdLmluZGV4T2YodHlwZSkgIT09IC0xKSB7CiAgICAgICAgd2FybmluZygiVzA5OCIsIHsgbGluZTogbGluZSwgZnJvbTogY2hyIH0sIHJhd19uYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKHVudXNlZF9vcHQgfHwgdHlwZSA9PT0gInZhciIpIHsKICAgICAgdW51c2Vkcy5wdXNoKHsKICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgIGxpbmU6IGxpbmUsCiAgICAgICAgY2hhcmFjdGVyOiBjaHIKICAgICAgfSk7CiAgICB9CiAgfTsKICBmdW5jdGlvbiBfY2hlY2tGb3JVbnVzZWQoKSB7CiAgICBpZiAoX2N1cnJlbnRbIih0eXBlKSJdID09PSAiZnVuY3Rpb25wYXJhbXMiKSB7CiAgICAgIF9jaGVja1BhcmFtcygpOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgY3VyZW50TGFiZWxzID0gX2N1cnJlbnRbIihsYWJlbHMpIl07CiAgICBmb3IgKHZhciBsYWJlbE5hbWUgaW4gY3VyZW50TGFiZWxzKSB7CiAgICAgIGlmIChjdXJlbnRMYWJlbHNbbGFiZWxOYW1lXSkgewogICAgICAgIGlmIChjdXJlbnRMYWJlbHNbbGFiZWxOYW1lXVsiKHR5cGUpIl0gIT09ICJleGNlcHRpb24iICYmCiAgICAgICAgICBjdXJlbnRMYWJlbHNbbGFiZWxOYW1lXVsiKHVudXNlZCkiXSkgewogICAgICAgICAgX3dhcm5VbnVzZWQobGFiZWxOYW1lLCBjdXJlbnRMYWJlbHNbbGFiZWxOYW1lXVsiKHRva2VuKSJdLCAidmFyIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIF9jaGVja1BhcmFtcygpIHsKICAgIHZhciBwYXJhbXMgPSBfY3VycmVudFsiKHBhcmFtcykiXTsKCiAgICBpZiAoIXBhcmFtcykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIHBhcmFtID0gcGFyYW1zLnBvcCgpOwogICAgdmFyIHVudXNlZF9vcHQ7CgogICAgd2hpbGUgKHBhcmFtKSB7CiAgICAgIHZhciBsYWJlbCA9IF9jdXJyZW50WyIobGFiZWxzKSJdW3BhcmFtXTsKCiAgICAgIHVudXNlZF9vcHQgPSBfZ2V0VW51c2VkT3B0aW9uKHN0YXRlLmZ1bmN0WyIodW51c2VkT3B0aW9uKSJdKTsKICAgICAgaWYgKHBhcmFtID09PSAidW5kZWZpbmVkIikKICAgICAgICByZXR1cm47CgogICAgICBpZiAobGFiZWxbIih1bnVzZWQpIl0pIHsKICAgICAgICBfd2FyblVudXNlZChwYXJhbSwgbGFiZWxbIih0b2tlbikiXSwgInBhcmFtIiwgc3RhdGUuZnVuY3RbIih1bnVzZWRPcHRpb24pIl0pOwogICAgICB9IGVsc2UgaWYgKHVudXNlZF9vcHQgPT09ICJsYXN0LXBhcmFtIikgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgcGFyYW0gPSBwYXJhbXMucG9wKCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIF9nZXRMYWJlbChsYWJlbE5hbWUpIHsKICAgIGZvciAodmFyIGkgPSBfc2NvcGVTdGFjay5sZW5ndGggLSAxIDsgaSA+PSAwOyAtLWkpIHsKICAgICAgdmFyIHNjb3BlTGFiZWxzID0gX3Njb3BlU3RhY2tbaV1bIihsYWJlbHMpIl07CiAgICAgIGlmIChzY29wZUxhYmVsc1tsYWJlbE5hbWVdKSB7CiAgICAgICAgcmV0dXJuIHNjb3BlTGFiZWxzOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiB1c2VkU29GYXJJbkN1cnJlbnRGdW5jdGlvbihsYWJlbE5hbWUpIHsKICAgIGZvciAodmFyIGkgPSBfc2NvcGVTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICB2YXIgY3VycmVudCA9IF9zY29wZVN0YWNrW2ldOwogICAgICBpZiAoY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdKSB7CiAgICAgICAgcmV0dXJuIGN1cnJlbnRbIih1c2FnZXMpIl1bbGFiZWxOYW1lXTsKICAgICAgfQogICAgICBpZiAoY3VycmVudCA9PT0gX2N1cnJlbnRGdW5jdEJvZHkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gX2NoZWNrT3V0ZXJTaGFkb3cobGFiZWxOYW1lLCB0b2tlbikgewogICAgaWYgKHN0YXRlLm9wdGlvbi5zaGFkb3cgIT09ICJvdXRlciIpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZhciBpc0dsb2JhbCA9IF9jdXJyZW50RnVuY3RCb2R5WyIodHlwZSkiXSA9PT0gImdsb2JhbCIsCiAgICAgIGlzTmV3RnVuY3Rpb24gPSBfY3VycmVudFsiKHR5cGUpIl0gPT09ICJmdW5jdGlvbnBhcmFtcyI7CgogICAgdmFyIG91dHNpZGVDdXJyZW50RnVuY3Rpb24gPSAhaXNHbG9iYWw7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9zY29wZVN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzdGFja0l0ZW0gPSBfc2NvcGVTdGFja1tpXTsKCiAgICAgIGlmICghaXNOZXdGdW5jdGlvbiAmJiBfc2NvcGVTdGFja1tpICsgMV0gPT09IF9jdXJyZW50RnVuY3RCb2R5KSB7CiAgICAgICAgb3V0c2lkZUN1cnJlbnRGdW5jdGlvbiA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChvdXRzaWRlQ3VycmVudEZ1bmN0aW9uICYmIHN0YWNrSXRlbVsiKGxhYmVscykiXVtsYWJlbE5hbWVdKSB7CiAgICAgICAgd2FybmluZygiVzEyMyIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICB9CiAgICAgIGlmIChzdGFja0l0ZW1bIihicmVha0xhYmVscykiXVtsYWJlbE5hbWVdKSB7CiAgICAgICAgd2FybmluZygiVzEyMyIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBfbGF0ZWRlZldhcm5pbmcodHlwZSwgbGFiZWxOYW1lLCB0b2tlbikgewogICAgaWYgKHN0YXRlLm9wdGlvbi5sYXRlZGVmKSB7CiAgICAgIGlmICgoc3RhdGUub3B0aW9uLmxhdGVkZWYgPT09IHRydWUgJiYgdHlwZSA9PT0gImZ1bmN0aW9uIikgfHwKICAgICAgICB0eXBlICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgd2FybmluZygiVzAwMyIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICB9CiAgICB9CiAgfQoKICB2YXIgc2NvcGVNYW5hZ2VySW5zdCA9IHsKCiAgICBvbjogZnVuY3Rpb24obmFtZXMsIGxpc3RlbmVyKSB7CiAgICAgIG5hbWVzLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7CiAgICAgIH0pOwogICAgfSwKCiAgICBpc1ByZWRlZmluZWQ6IGZ1bmN0aW9uKGxhYmVsTmFtZSkgewogICAgICByZXR1cm4gIXRoaXMuaGFzKGxhYmVsTmFtZSkgJiYgXy5oYXMoX3Njb3BlU3RhY2tbMF1bIihwcmVkZWZpbmVkKSJdLCBsYWJlbE5hbWUpOwogICAgfSwKICAgIHN0YWNrOiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIHZhciBwcmV2aW91c1Njb3BlID0gX2N1cnJlbnQ7CiAgICAgIF9uZXdTY29wZSh0eXBlKTsKCiAgICAgIGlmICghdHlwZSAmJiBwcmV2aW91c1Njb3BlWyIodHlwZSkiXSA9PT0gImZ1bmN0aW9ucGFyYW1zIikgewoKICAgICAgICBfY3VycmVudFsiKGlzRnVuY0JvZHkpIl0gPSB0cnVlOwogICAgICAgIF9jdXJyZW50WyIoY29udGV4dCkiXSA9IF9jdXJyZW50RnVuY3RCb2R5OwogICAgICAgIF9jdXJyZW50RnVuY3RCb2R5ID0gX2N1cnJlbnQ7CiAgICAgIH0KICAgIH0sCgogICAgdW5zdGFjazogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdWJTY29wZSA9IF9zY29wZVN0YWNrLmxlbmd0aCA+IDEgPyBfc2NvcGVTdGFja1tfc2NvcGVTdGFjay5sZW5ndGggLSAyXSA6IG51bGw7CiAgICAgIHZhciBpc1Vuc3RhY2tpbmdGdW5jdGlvbkJvZHkgPSBfY3VycmVudCA9PT0gX2N1cnJlbnRGdW5jdEJvZHksCiAgICAgICAgaXNVbnN0YWNraW5nRnVuY3Rpb25QYXJhbXMgPSBfY3VycmVudFsiKHR5cGUpIl0gPT09ICJmdW5jdGlvbnBhcmFtcyIsCiAgICAgICAgaXNVbnN0YWNraW5nRnVuY3Rpb25PdXRlciA9IF9jdXJyZW50WyIodHlwZSkiXSA9PT0gImZ1bmN0aW9ub3V0ZXIiOwoKICAgICAgdmFyIGksIGo7CiAgICAgIHZhciBjdXJyZW50VXNhZ2VzID0gX2N1cnJlbnRbIih1c2FnZXMpIl07CiAgICAgIHZhciBjdXJyZW50TGFiZWxzID0gX2N1cnJlbnRbIihsYWJlbHMpIl07CiAgICAgIHZhciB1c2VkTGFiZWxOYW1lTGlzdCA9IE9iamVjdC5rZXlzKGN1cnJlbnRVc2FnZXMpOwoKICAgICAgaWYgKGN1cnJlbnRVc2FnZXMuX19wcm90b19fICYmIHVzZWRMYWJlbE5hbWVMaXN0LmluZGV4T2YoIl9fcHJvdG9fXyIpID09PSAtMSkgewogICAgICAgIHVzZWRMYWJlbE5hbWVMaXN0LnB1c2goIl9fcHJvdG9fXyIpOwogICAgICB9CgogICAgICBmb3IgKGkgPSAwOyBpIDwgdXNlZExhYmVsTmFtZUxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICB2YXIgdXNlZExhYmVsTmFtZSA9IHVzZWRMYWJlbE5hbWVMaXN0W2ldOwoKICAgICAgICB2YXIgdXNhZ2UgPSBjdXJyZW50VXNhZ2VzW3VzZWRMYWJlbE5hbWVdOwogICAgICAgIHZhciB1c2VkTGFiZWwgPSBjdXJyZW50TGFiZWxzW3VzZWRMYWJlbE5hbWVdOwogICAgICAgIGlmICh1c2VkTGFiZWwpIHsKICAgICAgICAgIHZhciB1c2VkTGFiZWxUeXBlID0gdXNlZExhYmVsWyIodHlwZSkiXTsKCiAgICAgICAgICBpZiAodXNlZExhYmVsWyIodXNlT3V0c2lkZU9mU2NvcGUpIl0gJiYgIXN0YXRlLm9wdGlvbi5mdW5jc2NvcGUpIHsKICAgICAgICAgICAgdmFyIHVzZWRUb2tlbnMgPSB1c2FnZVsiKHRva2VucykiXTsKICAgICAgICAgICAgaWYgKHVzZWRUb2tlbnMpIHsKICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdXNlZFRva2Vucy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgaWYgKHVzZWRMYWJlbFsiKGZ1bmN0aW9uKSJdID09PSB1c2VkVG9rZW5zW2pdWyIoZnVuY3Rpb24pIl0pIHsKICAgICAgICAgICAgICAgICAgZXJyb3IoIlcwMzgiLCB1c2VkVG9rZW5zW2pdLCB1c2VkTGFiZWxOYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9jdXJyZW50WyIobGFiZWxzKSJdW3VzZWRMYWJlbE5hbWVdWyIodW51c2VkKSJdID0gZmFsc2U7CiAgICAgICAgICBpZiAodXNlZExhYmVsVHlwZSA9PT0gImNvbnN0IiAmJiB1c2FnZVsiKG1vZGlmaWVkKSJdKSB7CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2FnZVsiKG1vZGlmaWVkKSJdLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgZXJyb3IoIkUwMTMiLCB1c2FnZVsiKG1vZGlmaWVkKSJdW2pdLCB1c2VkTGFiZWxOYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCh1c2VkTGFiZWxUeXBlID09PSAiZnVuY3Rpb24iIHx8IHVzZWRMYWJlbFR5cGUgPT09ICJjbGFzcyIpICYmCiAgICAgICAgICAgICAgdXNhZ2VbIihyZWFzc2lnbmVkKSJdKSB7CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2FnZVsiKHJlYXNzaWduZWQpIl0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICBlcnJvcigiVzAyMSIsIHVzYWdlWyIocmVhc3NpZ25lZCkiXVtqXSwgdXNlZExhYmVsTmFtZSwgdXNlZExhYmVsVHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzVW5zdGFja2luZ0Z1bmN0aW9uT3V0ZXIpIHsKICAgICAgICAgIHN0YXRlLmZ1bmN0WyIoaXNDYXB0dXJpbmcpIl0gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN1YlNjb3BlKSB7CiAgICAgICAgICBpZiAoIXN1YlNjb3BlWyIodXNhZ2VzKSJdW3VzZWRMYWJlbE5hbWVdKSB7CiAgICAgICAgICAgIHN1YlNjb3BlWyIodXNhZ2VzKSJdW3VzZWRMYWJlbE5hbWVdID0gdXNhZ2U7CiAgICAgICAgICAgIGlmIChpc1Vuc3RhY2tpbmdGdW5jdGlvbkJvZHkpIHsKICAgICAgICAgICAgICBzdWJTY29wZVsiKHVzYWdlcykiXVt1c2VkTGFiZWxOYW1lXVsiKG9ubHlVc2VkU3ViRnVuY3Rpb24pIl0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgc3ViU2NvcGVVc2FnZSA9IHN1YlNjb3BlWyIodXNhZ2VzKSJdW3VzZWRMYWJlbE5hbWVdOwogICAgICAgICAgICBzdWJTY29wZVVzYWdlWyIobW9kaWZpZWQpIl0gPSBzdWJTY29wZVVzYWdlWyIobW9kaWZpZWQpIl0uY29uY2F0KHVzYWdlWyIobW9kaWZpZWQpIl0pOwogICAgICAgICAgICBzdWJTY29wZVVzYWdlWyIodG9rZW5zKSJdID0gc3ViU2NvcGVVc2FnZVsiKHRva2VucykiXS5jb25jYXQodXNhZ2VbIih0b2tlbnMpIl0pOwogICAgICAgICAgICBzdWJTY29wZVVzYWdlWyIocmVhc3NpZ25lZCkiXSA9CiAgICAgICAgICAgICAgc3ViU2NvcGVVc2FnZVsiKHJlYXNzaWduZWQpIl0uY29uY2F0KHVzYWdlWyIocmVhc3NpZ25lZCkiXSk7CiAgICAgICAgICAgIHN1YlNjb3BlVXNhZ2VbIihvbmx5VXNlZFN1YkZ1bmN0aW9uKSJdID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICh0eXBlb2YgX2N1cnJlbnRbIihwcmVkZWZpbmVkKSJdW3VzZWRMYWJlbE5hbWVdID09PSAiYm9vbGVhbiIpIHsKICAgICAgICAgICAgZGVsZXRlIGRlY2xhcmVkW3VzZWRMYWJlbE5hbWVdOwogICAgICAgICAgICB1c2VkUHJlZGVmaW5lZEFuZEdsb2JhbHNbdXNlZExhYmVsTmFtZV0gPSBtYXJrZXI7CiAgICAgICAgICAgIGlmIChfY3VycmVudFsiKHByZWRlZmluZWQpIl1bdXNlZExhYmVsTmFtZV0gPT09IGZhbHNlICYmIHVzYWdlWyIocmVhc3NpZ25lZCkiXSkgewogICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2FnZVsiKHJlYXNzaWduZWQpIl0ubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgIHdhcm5pbmcoIlcwMjAiLCB1c2FnZVsiKHJlYXNzaWduZWQpIl1bal0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICh1c2FnZVsiKHRva2VucykiXSkgewogICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2FnZVsiKHRva2VucykiXS5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgdmFyIHVuZGVmaW5lZFRva2VuID0gdXNhZ2VbIih0b2tlbnMpIl1bal07CiAgICAgICAgICAgICAgICBpZiAoIXVuZGVmaW5lZFRva2VuLmZvcmdpdmVVbmRlZikgewogICAgICAgICAgICAgICAgICBpZiAoc3RhdGUub3B0aW9uLnVuZGVmICYmICF1bmRlZmluZWRUb2tlbi5pZ25vcmVVbmRlZikgewogICAgICAgICAgICAgICAgICAgIHdhcm5pbmcoIlcxMTciLCB1bmRlZmluZWRUb2tlbiwgdXNlZExhYmVsTmFtZSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKGltcGxpZWRHbG9iYWxzW3VzZWRMYWJlbE5hbWVdKSB7CiAgICAgICAgICAgICAgICAgICAgaW1wbGllZEdsb2JhbHNbdXNlZExhYmVsTmFtZV0ubGluZS5wdXNoKHVuZGVmaW5lZFRva2VuLmxpbmUpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGltcGxpZWRHbG9iYWxzW3VzZWRMYWJlbE5hbWVdID0gewogICAgICAgICAgICAgICAgICAgICAgbmFtZTogdXNlZExhYmVsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGxpbmU6IFt1bmRlZmluZWRUb2tlbi5saW5lXQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFzdWJTY29wZSkgewogICAgICAgIE9iamVjdC5rZXlzKGRlY2xhcmVkKQogICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24obGFiZWxOb3RVc2VkKSB7CiAgICAgICAgICAgIF93YXJuVW51c2VkKGxhYmVsTm90VXNlZCwgZGVjbGFyZWRbbGFiZWxOb3RVc2VkXSwgInZhciIpOwogICAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKHN1YlNjb3BlICYmICFpc1Vuc3RhY2tpbmdGdW5jdGlvbkJvZHkgJiYKICAgICAgICAhaXNVbnN0YWNraW5nRnVuY3Rpb25QYXJhbXMgJiYgIWlzVW5zdGFja2luZ0Z1bmN0aW9uT3V0ZXIpIHsKICAgICAgICB2YXIgbGFiZWxOYW1lcyA9IE9iamVjdC5rZXlzKGN1cnJlbnRMYWJlbHMpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsYWJlbE5hbWVzLmxlbmd0aDsgaSsrKSB7CgogICAgICAgICAgdmFyIGRlZkxhYmVsTmFtZSA9IGxhYmVsTmFtZXNbaV07CiAgICAgICAgICBpZiAoIWN1cnJlbnRMYWJlbHNbZGVmTGFiZWxOYW1lXVsiKGJsb2Nrc2NvcGVkKSJdICYmCiAgICAgICAgICAgIGN1cnJlbnRMYWJlbHNbZGVmTGFiZWxOYW1lXVsiKHR5cGUpIl0gIT09ICJleGNlcHRpb24iICYmCiAgICAgICAgICAgICF0aGlzLmZ1bmN0LmhhcyhkZWZMYWJlbE5hbWUsIHsgZXhjbHVkZUN1cnJlbnQ6IHRydWUgfSkpIHsKICAgICAgICAgICAgc3ViU2NvcGVbIihsYWJlbHMpIl1bZGVmTGFiZWxOYW1lXSA9IGN1cnJlbnRMYWJlbHNbZGVmTGFiZWxOYW1lXTsKICAgICAgICAgICAgaWYgKF9jdXJyZW50RnVuY3RCb2R5WyIodHlwZSkiXSAhPT0gImdsb2JhbCIpIHsKICAgICAgICAgICAgICBzdWJTY29wZVsiKGxhYmVscykiXVtkZWZMYWJlbE5hbWVdWyIodXNlT3V0c2lkZU9mU2NvcGUpIl0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50TGFiZWxzW2RlZkxhYmVsTmFtZV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBfY2hlY2tGb3JVbnVzZWQoKTsKCiAgICAgIF9zY29wZVN0YWNrLnBvcCgpOwogICAgICBpZiAoaXNVbnN0YWNraW5nRnVuY3Rpb25Cb2R5KSB7CiAgICAgICAgX2N1cnJlbnRGdW5jdEJvZHkgPSBfc2NvcGVTdGFja1tfLmZpbmRMYXN0SW5kZXgoX3Njb3BlU3RhY2ssIGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgICByZXR1cm4gc2NvcGVbIihpc0Z1bmNCb2R5KSJdIHx8IHNjb3BlWyIodHlwZSkiXSA9PT0gImdsb2JhbCI7CiAgICAgICAgfSldOwogICAgICB9CgogICAgICBfY3VycmVudCA9IHN1YlNjb3BlOwogICAgfSwKICAgIGFkZFBhcmFtOiBmdW5jdGlvbihsYWJlbE5hbWUsIHRva2VuLCB0eXBlKSB7CiAgICAgIHR5cGUgPSB0eXBlIHx8ICJwYXJhbSI7CgogICAgICBpZiAodHlwZSA9PT0gImV4Y2VwdGlvbiIpIHsKICAgICAgICB2YXIgcHJldmlvdXNseURlZmluZWRMYWJlbFR5cGUgPSB0aGlzLmZ1bmN0LmxhYmVsdHlwZShsYWJlbE5hbWUpOwogICAgICAgIGlmIChwcmV2aW91c2x5RGVmaW5lZExhYmVsVHlwZSAmJiBwcmV2aW91c2x5RGVmaW5lZExhYmVsVHlwZSAhPT0gImV4Y2VwdGlvbiIpIHsKICAgICAgICAgIGlmICghc3RhdGUub3B0aW9uLm5vZGUpIHsKICAgICAgICAgICAgd2FybmluZygiVzAwMiIsIHN0YXRlLnRva2Vucy5uZXh0LCBsYWJlbE5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoXy5oYXMoX2N1cnJlbnRbIihsYWJlbHMpIl0sIGxhYmVsTmFtZSkpIHsKICAgICAgICBfY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdLmR1cGxpY2F0ZWQgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIF9jaGVja091dGVyU2hhZG93KGxhYmVsTmFtZSwgdG9rZW4sIHR5cGUpOwoKICAgICAgICBfY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdID0gewogICAgICAgICAgIih0eXBlKSIgOiB0eXBlLAogICAgICAgICAgIih0b2tlbikiOiB0b2tlbiwKICAgICAgICAgICIodW51c2VkKSI6IHRydWUgfTsKCiAgICAgICAgX2N1cnJlbnRbIihwYXJhbXMpIl0ucHVzaChsYWJlbE5hbWUpOwogICAgICB9CgogICAgICBpZiAoXy5oYXMoX2N1cnJlbnRbIih1c2FnZXMpIl0sIGxhYmVsTmFtZSkpIHsKICAgICAgICB2YXIgdXNhZ2UgPSBfY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdOwogICAgICAgIGlmICh1c2FnZVsiKG9ubHlVc2VkU3ViRnVuY3Rpb24pIl0pIHsKICAgICAgICAgIF9sYXRlZGVmV2FybmluZyh0eXBlLCBsYWJlbE5hbWUsIHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgd2FybmluZygiRTA1NiIsIHRva2VuLCBsYWJlbE5hbWUsIHR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfSwKCiAgICB2YWxpZGF0ZVBhcmFtczogZnVuY3Rpb24oKSB7CiAgICAgIGlmIChfY3VycmVudEZ1bmN0Qm9keVsiKHR5cGUpIl0gPT09ICJnbG9iYWwiKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgaXNTdHJpY3QgPSBzdGF0ZS5pc1N0cmljdCgpOwogICAgICB2YXIgY3VycmVudEZ1bmN0UGFyYW1TY29wZSA9IF9jdXJyZW50RnVuY3RCb2R5WyIocGFyZW50KSJdOwoKICAgICAgaWYgKCFjdXJyZW50RnVuY3RQYXJhbVNjb3BlWyIocGFyYW1zKSJdKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjdXJyZW50RnVuY3RQYXJhbVNjb3BlWyIocGFyYW1zKSJdLmZvckVhY2goZnVuY3Rpb24obGFiZWxOYW1lKSB7CiAgICAgICAgdmFyIGxhYmVsID0gY3VycmVudEZ1bmN0UGFyYW1TY29wZVsiKGxhYmVscykiXVtsYWJlbE5hbWVdOwoKICAgICAgICBpZiAobGFiZWwgJiYgbGFiZWwuZHVwbGljYXRlZCkgewogICAgICAgICAgaWYgKGlzU3RyaWN0KSB7CiAgICAgICAgICAgIHdhcm5pbmcoIkUwMTEiLCBsYWJlbFsiKHRva2VuKSJdLCBsYWJlbE5hbWUpOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5vcHRpb24uc2hhZG93ICE9PSB0cnVlKSB7CiAgICAgICAgICAgIHdhcm5pbmcoIlcwMDQiLCBsYWJlbFsiKHRva2VuKSJdLCBsYWJlbE5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAoKICAgIGdldFVzZWRPckRlZmluZWRHbG9iYWxzOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIGxpc3QgPSBPYmplY3Qua2V5cyh1c2VkUHJlZGVmaW5lZEFuZEdsb2JhbHMpOwogICAgICBpZiAodXNlZFByZWRlZmluZWRBbmRHbG9iYWxzLl9fcHJvdG9fXyA9PT0gbWFya2VyICYmCiAgICAgICAgbGlzdC5pbmRleE9mKCJfX3Byb3RvX18iKSA9PT0gLTEpIHsKICAgICAgICBsaXN0LnB1c2goIl9fcHJvdG9fXyIpOwogICAgICB9CgogICAgICByZXR1cm4gbGlzdDsKICAgIH0sCiAgICBnZXRJbXBsaWVkR2xvYmFsczogZnVuY3Rpb24oKSB7CiAgICAgIHZhciB2YWx1ZXMgPSBfLnZhbHVlcyhpbXBsaWVkR2xvYmFscyk7CiAgICAgIHZhciBoYXNQcm90byA9IGZhbHNlOwogICAgICBpZiAoaW1wbGllZEdsb2JhbHMuX19wcm90b19fKSB7CiAgICAgICAgaGFzUHJvdG8gPSB2YWx1ZXMuc29tZShmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHZhbHVlLm5hbWUgPT09ICJfX3Byb3RvX18iOwogICAgICAgIH0pOwoKICAgICAgICBpZiAoIWhhc1Byb3RvKSB7CiAgICAgICAgICB2YWx1ZXMucHVzaChpbXBsaWVkR2xvYmFscy5fX3Byb3RvX18pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHZhbHVlczsKICAgIH0sCiAgICBnZXRVbnVzZWRzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHVudXNlZHM7CiAgICB9LAoKICAgIGhhczogZnVuY3Rpb24obGFiZWxOYW1lKSB7CiAgICAgIHJldHVybiBCb29sZWFuKF9nZXRMYWJlbChsYWJlbE5hbWUpKTsKICAgIH0sCgogICAgbGFiZWx0eXBlOiBmdW5jdGlvbihsYWJlbE5hbWUpIHsKICAgICAgdmFyIHNjb3BlTGFiZWxzID0gX2dldExhYmVsKGxhYmVsTmFtZSk7CiAgICAgIGlmIChzY29wZUxhYmVscykgewogICAgICAgIHJldHVybiBzY29wZUxhYmVsc1tsYWJlbE5hbWVdWyIodHlwZSkiXTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0sCiAgICBhZGRFeHBvcnRlZDogZnVuY3Rpb24obGFiZWxOYW1lKSB7CiAgICAgIHZhciBnbG9iYWxMYWJlbHMgPSBfc2NvcGVTdGFja1swXVsiKGxhYmVscykiXTsKICAgICAgaWYgKF8uaGFzKGRlY2xhcmVkLCBsYWJlbE5hbWUpKSB7CiAgICAgICAgZGVsZXRlIGRlY2xhcmVkW2xhYmVsTmFtZV07CiAgICAgIH0gZWxzZSBpZiAoXy5oYXMoZ2xvYmFsTGFiZWxzLCBsYWJlbE5hbWUpKSB7CiAgICAgICAgZ2xvYmFsTGFiZWxzW2xhYmVsTmFtZV1bIih1bnVzZWQpIl0gPSBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9zY29wZVN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgc2NvcGUgPSBfc2NvcGVTdGFja1tpXTsKICAgICAgICAgIGlmICghc2NvcGVbIih0eXBlKSJdKSB7CiAgICAgICAgICAgIGlmIChfLmhhcyhzY29wZVsiKGxhYmVscykiXSwgbGFiZWxOYW1lKSAmJgogICAgICAgICAgICAgICAgIXNjb3BlWyIobGFiZWxzKSJdW2xhYmVsTmFtZV1bIihibG9ja3Njb3BlZCkiXSkgewogICAgICAgICAgICAgIHNjb3BlWyIobGFiZWxzKSJdW2xhYmVsTmFtZV1bIih1bnVzZWQpIl0gPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBleHBvcnRlZFtsYWJlbE5hbWVdID0gdHJ1ZTsKICAgICAgfQogICAgfSwKICAgIHNldEV4cG9ydGVkOiBmdW5jdGlvbihsYWJlbE5hbWUsIHRva2VuKSB7CiAgICAgIHRoaXMuYmxvY2sudXNlKGxhYmVsTmFtZSwgdG9rZW4pOwogICAgfSwKICAgIGFkZGxhYmVsOiBmdW5jdGlvbihsYWJlbE5hbWUsIG9wdHMpIHsKCiAgICAgIHZhciB0eXBlICA9IG9wdHMudHlwZTsKICAgICAgdmFyIHRva2VuID0gb3B0cy50b2tlbjsKICAgICAgdmFyIGlzYmxvY2tzY29wZWQgPSB0eXBlID09PSAibGV0IiB8fCB0eXBlID09PSAiY29uc3QiIHx8IHR5cGUgPT09ICJjbGFzcyI7CiAgICAgIHZhciBpc2V4cG9ydGVkICAgID0gKGlzYmxvY2tzY29wZWQgPyBfY3VycmVudCA6IF9jdXJyZW50RnVuY3RCb2R5KVsiKHR5cGUpIl0gPT09ICJnbG9iYWwiICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgXy5oYXMoZXhwb3J0ZWQsIGxhYmVsTmFtZSk7CiAgICAgIF9jaGVja091dGVyU2hhZG93KGxhYmVsTmFtZSwgdG9rZW4sIHR5cGUpOwogICAgICBpZiAoaXNibG9ja3Njb3BlZCkgewoKICAgICAgICB2YXIgZGVjbGFyZWRJbkN1cnJlbnRTY29wZSA9IF9jdXJyZW50WyIobGFiZWxzKSJdW2xhYmVsTmFtZV07CiAgICAgICAgaWYgKCFkZWNsYXJlZEluQ3VycmVudFNjb3BlICYmIF9jdXJyZW50ID09PSBfY3VycmVudEZ1bmN0Qm9keSAmJgogICAgICAgICAgX2N1cnJlbnRbIih0eXBlKSJdICE9PSAiZ2xvYmFsIikgewogICAgICAgICAgZGVjbGFyZWRJbkN1cnJlbnRTY29wZSA9ICEhX2N1cnJlbnRGdW5jdEJvZHlbIihwYXJlbnQpIl1bIihsYWJlbHMpIl1bbGFiZWxOYW1lXTsKICAgICAgICB9CiAgICAgICAgaWYgKCFkZWNsYXJlZEluQ3VycmVudFNjb3BlICYmIF9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV0pIHsKICAgICAgICAgIHZhciB1c2FnZSA9IF9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV07CiAgICAgICAgICBpZiAodXNhZ2VbIihvbmx5VXNlZFN1YkZ1bmN0aW9uKSJdKSB7CiAgICAgICAgICAgIF9sYXRlZGVmV2FybmluZyh0eXBlLCBsYWJlbE5hbWUsIHRva2VuKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdhcm5pbmcoIkUwNTYiLCB0b2tlbiwgbGFiZWxOYW1lLCB0eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGRlY2xhcmVkSW5DdXJyZW50U2NvcGUpIHsKICAgICAgICAgIHdhcm5pbmcoIkUwMTEiLCB0b2tlbiwgbGFiZWxOYW1lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3RhdGUub3B0aW9uLnNoYWRvdyA9PT0gIm91dGVyIikgewogICAgICAgICAgaWYgKHNjb3BlTWFuYWdlckluc3QuZnVuY3QuaGFzKGxhYmVsTmFtZSkpIHsKICAgICAgICAgICAgd2FybmluZygiVzAwNCIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc2NvcGVNYW5hZ2VySW5zdC5ibG9jay5hZGQobGFiZWxOYW1lLCB0eXBlLCB0b2tlbiwgIWlzZXhwb3J0ZWQpOwoKICAgICAgfSBlbHNlIHsKCiAgICAgICAgdmFyIGRlY2xhcmVkSW5DdXJyZW50RnVuY3Rpb25TY29wZSA9IHNjb3BlTWFuYWdlckluc3QuZnVuY3QuaGFzKGxhYmVsTmFtZSk7CiAgICAgICAgaWYgKCFkZWNsYXJlZEluQ3VycmVudEZ1bmN0aW9uU2NvcGUgJiYgdXNlZFNvRmFySW5DdXJyZW50RnVuY3Rpb24obGFiZWxOYW1lKSkgewogICAgICAgICAgX2xhdGVkZWZXYXJuaW5nKHR5cGUsIGxhYmVsTmFtZSwgdG9rZW4pOwogICAgICAgIH0KICAgICAgICBpZiAoc2NvcGVNYW5hZ2VySW5zdC5mdW5jdC5oYXMobGFiZWxOYW1lLCB7IG9ubHlCbG9ja3Njb3BlZDogdHJ1ZSB9KSkgewogICAgICAgICAgd2FybmluZygiRTAxMSIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUub3B0aW9uLnNoYWRvdyAhPT0gdHJ1ZSkgewogICAgICAgICAgaWYgKGRlY2xhcmVkSW5DdXJyZW50RnVuY3Rpb25TY29wZSAmJiBsYWJlbE5hbWUgIT09ICJfX3Byb3RvX18iKSB7CiAgICAgICAgICAgIGlmIChfY3VycmVudEZ1bmN0Qm9keVsiKHR5cGUpIl0gIT09ICJnbG9iYWwiKSB7CiAgICAgICAgICAgICAgd2FybmluZygiVzAwNCIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzY29wZU1hbmFnZXJJbnN0LmZ1bmN0LmFkZChsYWJlbE5hbWUsIHR5cGUsIHRva2VuLCAhaXNleHBvcnRlZCk7CgogICAgICAgIGlmIChfY3VycmVudEZ1bmN0Qm9keVsiKHR5cGUpIl0gPT09ICJnbG9iYWwiKSB7CiAgICAgICAgICB1c2VkUHJlZGVmaW5lZEFuZEdsb2JhbHNbbGFiZWxOYW1lXSA9IG1hcmtlcjsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCgogICAgZnVuY3Q6IHsKICAgICAgbGFiZWx0eXBlOiBmdW5jdGlvbihsYWJlbE5hbWUsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgb25seUJsb2Nrc2NvcGVkID0gb3B0aW9ucyAmJiBvcHRpb25zLm9ubHlCbG9ja3Njb3BlZDsKICAgICAgICB2YXIgZXhjbHVkZVBhcmFtcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlUGFyYW1zOwogICAgICAgIHZhciBjdXJyZW50U2NvcGVJbmRleCA9IF9zY29wZVN0YWNrLmxlbmd0aCAtIChvcHRpb25zICYmIG9wdGlvbnMuZXhjbHVkZUN1cnJlbnQgPyAyIDogMSk7CiAgICAgICAgZm9yICh2YXIgaSA9IGN1cnJlbnRTY29wZUluZGV4OyBpID49IDA7IGktLSkgewogICAgICAgICAgdmFyIGN1cnJlbnQgPSBfc2NvcGVTdGFja1tpXTsKICAgICAgICAgIGlmIChjdXJyZW50WyIobGFiZWxzKSJdW2xhYmVsTmFtZV0gJiYKICAgICAgICAgICAgKCFvbmx5QmxvY2tzY29wZWQgfHwgY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdWyIoYmxvY2tzY29wZWQpIl0pKSB7CiAgICAgICAgICAgIHJldHVybiBjdXJyZW50WyIobGFiZWxzKSJdW2xhYmVsTmFtZV1bIih0eXBlKSJdOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHNjb3BlQ2hlY2sgPSBleGNsdWRlUGFyYW1zID8gX3Njb3BlU3RhY2tbIGkgLSAxIF0gOiBjdXJyZW50OwogICAgICAgICAgaWYgKHNjb3BlQ2hlY2sgJiYgc2NvcGVDaGVja1siKHR5cGUpIl0gPT09ICJmdW5jdGlvbnBhcmFtcyIpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9LAogICAgICBoYXNCcmVha0xhYmVsOiBmdW5jdGlvbihsYWJlbE5hbWUpIHsKICAgICAgICBmb3IgKHZhciBpID0gX3Njb3BlU3RhY2subGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgIHZhciBjdXJyZW50ID0gX3Njb3BlU3RhY2tbaV07CgogICAgICAgICAgaWYgKGN1cnJlbnRbIihicmVha0xhYmVscykiXVtsYWJlbE5hbWVdKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGN1cnJlbnRbIih0eXBlKSJdID09PSAiZnVuY3Rpb25wYXJhbXMiKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9LAogICAgICBoYXM6IGZ1bmN0aW9uKGxhYmVsTmFtZSwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMubGFiZWx0eXBlKGxhYmVsTmFtZSwgb3B0aW9ucykpOwogICAgICB9LAogICAgICBhZGQ6IGZ1bmN0aW9uKGxhYmVsTmFtZSwgdHlwZSwgdG9rLCB1bnVzZWQpIHsKICAgICAgICBfY3VycmVudFsiKGxhYmVscykiXVtsYWJlbE5hbWVdID0gewogICAgICAgICAgIih0eXBlKSIgOiB0eXBlLAogICAgICAgICAgIih0b2tlbikiOiB0b2ssCiAgICAgICAgICAiKGJsb2Nrc2NvcGVkKSI6IGZhbHNlLAogICAgICAgICAgIihmdW5jdGlvbikiOiBfY3VycmVudEZ1bmN0Qm9keSwKICAgICAgICAgICIodW51c2VkKSI6IHVudXNlZCB9OwogICAgICB9CiAgICB9LAoKICAgIGJsb2NrOiB7CiAgICAgIGlzR2xvYmFsOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gX2N1cnJlbnRbIih0eXBlKSJdID09PSAiZ2xvYmFsIjsKICAgICAgfSwKCiAgICAgIHVzZTogZnVuY3Rpb24obGFiZWxOYW1lLCB0b2tlbikgewogICAgICAgIHZhciBwYXJhbVNjb3BlID0gX2N1cnJlbnRGdW5jdEJvZHlbIihwYXJlbnQpIl07CiAgICAgICAgaWYgKHBhcmFtU2NvcGUgJiYgcGFyYW1TY29wZVsiKGxhYmVscykiXVtsYWJlbE5hbWVdICYmCiAgICAgICAgICBwYXJhbVNjb3BlWyIobGFiZWxzKSJdW2xhYmVsTmFtZV1bIih0eXBlKSJdID09PSAicGFyYW0iKSB7CiAgICAgICAgICBpZiAoIXNjb3BlTWFuYWdlckluc3QuZnVuY3QuaGFzKGxhYmVsTmFtZSwKICAgICAgICAgICAgICAgIHsgZXhjbHVkZVBhcmFtczogdHJ1ZSwgb25seUJsb2Nrc2NvcGVkOiB0cnVlIH0pKSB7CiAgICAgICAgICAgIHBhcmFtU2NvcGVbIihsYWJlbHMpIl1bbGFiZWxOYW1lXVsiKHVudXNlZCkiXSA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHRva2VuICYmIChzdGF0ZS5pZ25vcmVkLlcxMTcgfHwgc3RhdGUub3B0aW9uLnVuZGVmID09PSBmYWxzZSkpIHsKICAgICAgICAgIHRva2VuLmlnbm9yZVVuZGVmID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIF9zZXR1cFVzYWdlcyhsYWJlbE5hbWUpOwoKICAgICAgICBpZiAodG9rZW4pIHsKICAgICAgICAgIHRva2VuWyIoZnVuY3Rpb24pIl0gPSBfY3VycmVudEZ1bmN0Qm9keTsKICAgICAgICAgIF9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV1bIih0b2tlbnMpIl0ucHVzaCh0b2tlbik7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgcmVhc3NpZ246IGZ1bmN0aW9uKGxhYmVsTmFtZSwgdG9rZW4pIHsKCiAgICAgICAgdGhpcy5tb2RpZnkobGFiZWxOYW1lLCB0b2tlbik7CgogICAgICAgIF9jdXJyZW50WyIodXNhZ2VzKSJdW2xhYmVsTmFtZV1bIihyZWFzc2lnbmVkKSJdLnB1c2godG9rZW4pOwogICAgICB9LAoKICAgICAgbW9kaWZ5OiBmdW5jdGlvbihsYWJlbE5hbWUsIHRva2VuKSB7CgogICAgICAgIF9zZXR1cFVzYWdlcyhsYWJlbE5hbWUpOwoKICAgICAgICBfY3VycmVudFsiKHVzYWdlcykiXVtsYWJlbE5hbWVdWyIobW9kaWZpZWQpIl0ucHVzaCh0b2tlbik7CiAgICAgIH0sCiAgICAgIGFkZDogZnVuY3Rpb24obGFiZWxOYW1lLCB0eXBlLCB0b2ssIHVudXNlZCkgewogICAgICAgIF9jdXJyZW50WyIobGFiZWxzKSJdW2xhYmVsTmFtZV0gPSB7CiAgICAgICAgICAiKHR5cGUpIiA6IHR5cGUsCiAgICAgICAgICAiKHRva2VuKSI6IHRvaywKICAgICAgICAgICIoYmxvY2tzY29wZWQpIjogdHJ1ZSwKICAgICAgICAgICIodW51c2VkKSI6IHVudXNlZCB9OwogICAgICB9LAoKICAgICAgYWRkQnJlYWtMYWJlbDogZnVuY3Rpb24obGFiZWxOYW1lLCBvcHRzKSB7CiAgICAgICAgdmFyIHRva2VuID0gb3B0cy50b2tlbjsKICAgICAgICBpZiAoc2NvcGVNYW5hZ2VySW5zdC5mdW5jdC5oYXNCcmVha0xhYmVsKGxhYmVsTmFtZSkpIHsKICAgICAgICAgIHdhcm5pbmcoIkUwMTEiLCB0b2tlbiwgbGFiZWxOYW1lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3RhdGUub3B0aW9uLnNoYWRvdyA9PT0gIm91dGVyIikgewogICAgICAgICAgaWYgKHNjb3BlTWFuYWdlckluc3QuZnVuY3QuaGFzKGxhYmVsTmFtZSkpIHsKICAgICAgICAgICAgd2FybmluZygiVzAwNCIsIHRva2VuLCBsYWJlbE5hbWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2NoZWNrT3V0ZXJTaGFkb3cobGFiZWxOYW1lLCB0b2tlbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9jdXJyZW50WyIoYnJlYWtMYWJlbHMpIl1bbGFiZWxOYW1lXSA9IHRva2VuOwogICAgICB9CiAgICB9CiAgfTsKICByZXR1cm4gc2NvcGVNYW5hZ2VySW5zdDsKfTsKCm1vZHVsZS5leHBvcnRzID0gc2NvcGVNYW5hZ2VyOwoKfSx7Ii4uL2xvZGFzaCI6Ii9ub2RlX21vZHVsZXMvanNoaW50L2xvZGFzaC5qcyIsImV2ZW50cyI6Ii9ub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyJ9XSwiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3N0YXRlLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CiJ1c2Ugc3RyaWN0IjsKdmFyIE5hbWVTdGFjayA9IF9kZXJlcV8oIi4vbmFtZS1zdGFjay5qcyIpOwoKdmFyIHN0YXRlID0gewogIHN5bnRheDoge30sCiAgaXNTdHJpY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMuZGlyZWN0aXZlWyJ1c2Ugc3RyaWN0Il0gfHwgdGhpcy5pbkNsYXNzQm9keSB8fAogICAgICB0aGlzLm9wdGlvbi5tb2R1bGUgfHwgdGhpcy5vcHRpb24uc3RyaWN0ID09PSAiaW1wbGllZCI7CiAgfSwKCiAgaW5Nb3o6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMub3B0aW9uLm1vejsKICB9LAogIGluRVM2OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLm9wdGlvbi5tb3ogfHwgdGhpcy5vcHRpb24uZXN2ZXJzaW9uID49IDY7CiAgfSwKICBpbkVTNTogZnVuY3Rpb24oc3RyaWN0KSB7CiAgICBpZiAoc3RyaWN0KSB7CiAgICAgIHJldHVybiAoIXRoaXMub3B0aW9uLmVzdmVyc2lvbiB8fCB0aGlzLm9wdGlvbi5lc3ZlcnNpb24gPT09IDUpICYmICF0aGlzLm9wdGlvbi5tb3o7CiAgICB9CiAgICByZXR1cm4gIXRoaXMub3B0aW9uLmVzdmVyc2lvbiB8fCB0aGlzLm9wdGlvbi5lc3ZlcnNpb24gPj0gNSB8fCB0aGlzLm9wdGlvbi5tb3o7CiAgfSwKCgogIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgIHRoaXMudG9rZW5zID0gewogICAgICBwcmV2OiBudWxsLAogICAgICBuZXh0OiBudWxsLAogICAgICBjdXJyOiBudWxsCiAgICB9OwoKICAgIHRoaXMub3B0aW9uID0ge307CiAgICB0aGlzLmZ1bmN0ID0gbnVsbDsKICAgIHRoaXMuaWdub3JlZCA9IHt9OwogICAgdGhpcy5kaXJlY3RpdmUgPSB7fTsKICAgIHRoaXMuanNvbk1vZGUgPSBmYWxzZTsKICAgIHRoaXMuanNvbldhcm5pbmdzID0gW107CiAgICB0aGlzLmxpbmVzID0gW107CiAgICB0aGlzLnRhYiA9ICIiOwogICAgdGhpcy5jYWNoZSA9IHt9OyAvLyBOb2RlLkpTIGRvZXNuJ3QgaGF2ZSBNYXAuIFNuaWZmLgogICAgdGhpcy5pZ25vcmVkTGluZXMgPSB7fTsKICAgIHRoaXMuZm9yaW5pZmNoZWNrbmVlZGVkID0gZmFsc2U7CiAgICB0aGlzLm5hbWVTdGFjayA9IG5ldyBOYW1lU3RhY2soKTsKICAgIHRoaXMuaW5DbGFzc0JvZHkgPSBmYWxzZTsKICB9Cn07CgpleHBvcnRzLnN0YXRlID0gc3RhdGU7Cgp9LHsiLi9uYW1lLXN0YWNrLmpzIjoiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL25hbWUtc3RhY2suanMifV0sIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9zdHlsZS5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewoidXNlIHN0cmljdCI7CgpleHBvcnRzLnJlZ2lzdGVyID0gZnVuY3Rpb24obGludGVyKSB7CgogIGxpbnRlci5vbigiSWRlbnRpZmllciIsIGZ1bmN0aW9uIHN0eWxlX3NjYW5Qcm90byhkYXRhKSB7CiAgICBpZiAobGludGVyLmdldE9wdGlvbigicHJvdG8iKSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGRhdGEubmFtZSA9PT0gIl9fcHJvdG9fXyIpIHsKICAgICAgbGludGVyLndhcm4oIlcxMDMiLCB7CiAgICAgICAgbGluZTogZGF0YS5saW5lLAogICAgICAgIGNoYXI6IGRhdGEuY2hhciwKICAgICAgICBkYXRhOiBbIGRhdGEubmFtZSwgIjYiIF0KICAgICAgfSk7CiAgICB9CiAgfSk7CgogIGxpbnRlci5vbigiSWRlbnRpZmllciIsIGZ1bmN0aW9uIHN0eWxlX3NjYW5JdGVyYXRvcihkYXRhKSB7CiAgICBpZiAobGludGVyLmdldE9wdGlvbigiaXRlcmF0b3IiKSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKGRhdGEubmFtZSA9PT0gIl9faXRlcmF0b3JfXyIpIHsKICAgICAgbGludGVyLndhcm4oIlcxMDMiLCB7CiAgICAgICAgbGluZTogZGF0YS5saW5lLAogICAgICAgIGNoYXI6IGRhdGEuY2hhciwKICAgICAgICBkYXRhOiBbIGRhdGEubmFtZSBdCiAgICAgIH0pOwogICAgfQogIH0pOwoKICBsaW50ZXIub24oIklkZW50aWZpZXIiLCBmdW5jdGlvbiBzdHlsZV9zY2FuQ2FtZWxDYXNlKGRhdGEpIHsKICAgIGlmICghbGludGVyLmdldE9wdGlvbigiY2FtZWxjYXNlIikpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChkYXRhLm5hbWUucmVwbGFjZSgvXl8rfF8rJC9nLCAiIikuaW5kZXhPZigiXyIpID4gLTEgJiYgIWRhdGEubmFtZS5tYXRjaCgvXltBLVowLTlfXSokLykpIHsKICAgICAgbGludGVyLndhcm4oIlcxMDYiLCB7CiAgICAgICAgbGluZTogZGF0YS5saW5lLAogICAgICAgIGNoYXI6IGRhdGEuZnJvbSwKICAgICAgICBkYXRhOiBbIGRhdGEubmFtZSBdCiAgICAgIH0pOwogICAgfQogIH0pOwoKICBsaW50ZXIub24oIlN0cmluZyIsIGZ1bmN0aW9uIHN0eWxlX3NjYW5RdW90ZXMoZGF0YSkgewogICAgdmFyIHF1b3RtYXJrID0gbGludGVyLmdldE9wdGlvbigicXVvdG1hcmsiKTsKICAgIHZhciBjb2RlOwoKICAgIGlmICghcXVvdG1hcmspIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChxdW90bWFyayA9PT0gInNpbmdsZSIgJiYgZGF0YS5xdW90ZSAhPT0gIiciKSB7CiAgICAgIGNvZGUgPSAiVzEwOSI7CiAgICB9CgogICAgaWYgKHF1b3RtYXJrID09PSAiZG91YmxlIiAmJiBkYXRhLnF1b3RlICE9PSAiXCIiKSB7CiAgICAgIGNvZGUgPSAiVzEwOCI7CiAgICB9CgogICAgaWYgKHF1b3RtYXJrID09PSB0cnVlKSB7CiAgICAgIGlmICghbGludGVyLmdldENhY2hlKCJxdW90bWFyayIpKSB7CiAgICAgICAgbGludGVyLnNldENhY2hlKCJxdW90bWFyayIsIGRhdGEucXVvdGUpOwogICAgICB9CgogICAgICBpZiAobGludGVyLmdldENhY2hlKCJxdW90bWFyayIpICE9PSBkYXRhLnF1b3RlKSB7CiAgICAgICAgY29kZSA9ICJXMTEwIjsKICAgICAgfQogICAgfQoKICAgIGlmIChjb2RlKSB7CiAgICAgIGxpbnRlci53YXJuKGNvZGUsIHsKICAgICAgICBsaW5lOiBkYXRhLmxpbmUsCiAgICAgICAgY2hhcjogZGF0YS5jaGFyLAogICAgICB9KTsKICAgIH0KICB9KTsKCiAgbGludGVyLm9uKCJOdW1iZXIiLCBmdW5jdGlvbiBzdHlsZV9zY2FuTnVtYmVycyhkYXRhKSB7CiAgICBpZiAoZGF0YS52YWx1ZS5jaGFyQXQoMCkgPT09ICIuIikgewogICAgICBsaW50ZXIud2FybigiVzAwOCIsIHsKICAgICAgICBsaW5lOiBkYXRhLmxpbmUsCiAgICAgICAgY2hhcjogZGF0YS5jaGFyLAogICAgICAgIGRhdGE6IFsgZGF0YS52YWx1ZSBdCiAgICAgIH0pOwogICAgfQoKICAgIGlmIChkYXRhLnZhbHVlLnN1YnN0cihkYXRhLnZhbHVlLmxlbmd0aCAtIDEpID09PSAiLiIpIHsKICAgICAgbGludGVyLndhcm4oIlcwNDciLCB7CiAgICAgICAgbGluZTogZGF0YS5saW5lLAogICAgICAgIGNoYXI6IGRhdGEuY2hhciwKICAgICAgICBkYXRhOiBbIGRhdGEudmFsdWUgXQogICAgICB9KTsKICAgIH0KCiAgICBpZiAoL14wMCsvLnRlc3QoZGF0YS52YWx1ZSkpIHsKICAgICAgbGludGVyLndhcm4oIlcwNDYiLCB7CiAgICAgICAgbGluZTogZGF0YS5saW5lLAogICAgICAgIGNoYXI6IGRhdGEuY2hhciwKICAgICAgICBkYXRhOiBbIGRhdGEudmFsdWUgXQogICAgICB9KTsKICAgIH0KICB9KTsKCiAgbGludGVyLm9uKCJTdHJpbmciLCBmdW5jdGlvbiBzdHlsZV9zY2FuSmF2YVNjcmlwdFVSTHMoZGF0YSkgewogICAgdmFyIHJlID0gL14oPzpqYXZhc2NyaXB0fGpzY3JpcHR8ZWNtYXNjcmlwdHx2YnNjcmlwdHxsaXZlc2NyaXB0KVxzKjovaTsKCiAgICBpZiAobGludGVyLmdldE9wdGlvbigic2NyaXB0dXJsIikpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChyZS50ZXN0KGRhdGEudmFsdWUpKSB7CiAgICAgIGxpbnRlci53YXJuKCJXMTA3IiwgewogICAgICAgIGxpbmU6IGRhdGEubGluZSwKICAgICAgICBjaGFyOiBkYXRhLmNoYXIKICAgICAgfSk7CiAgICB9CiAgfSk7Cn07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy9qc2hpbnQvc3JjL3ZhcnMuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKCiJ1c2Ugc3RyaWN0IjsKCmV4cG9ydHMucmVzZXJ2ZWRWYXJzID0gewogIGFyZ3VtZW50cyA6IGZhbHNlLAogIE5hTiAgICAgICA6IGZhbHNlCn07CgpleHBvcnRzLmVjbWFJZGVudGlmaWVycyA9IHsKICAzOiB7CiAgICBBcnJheSAgICAgICAgICAgICAgOiBmYWxzZSwKICAgIEJvb2xlYW4gICAgICAgICAgICA6IGZhbHNlLAogICAgRGF0ZSAgICAgICAgICAgICAgIDogZmFsc2UsCiAgICBkZWNvZGVVUkkgICAgICAgICAgOiBmYWxzZSwKICAgIGRlY29kZVVSSUNvbXBvbmVudCA6IGZhbHNlLAogICAgZW5jb2RlVVJJICAgICAgICAgIDogZmFsc2UsCiAgICBlbmNvZGVVUklDb21wb25lbnQgOiBmYWxzZSwKICAgIEVycm9yICAgICAgICAgICAgICA6IGZhbHNlLAogICAgImV2YWwiICAgICAgICAgICAgIDogZmFsc2UsCiAgICBFdmFsRXJyb3IgICAgICAgICAgOiBmYWxzZSwKICAgIEZ1bmN0aW9uICAgICAgICAgICA6IGZhbHNlLAogICAgaGFzT3duUHJvcGVydHkgICAgIDogZmFsc2UsCiAgICBpc0Zpbml0ZSAgICAgICAgICAgOiBmYWxzZSwKICAgIGlzTmFOICAgICAgICAgICAgICA6IGZhbHNlLAogICAgTWF0aCAgICAgICAgICAgICAgIDogZmFsc2UsCiAgICBOdW1iZXIgICAgICAgICAgICAgOiBmYWxzZSwKICAgIE9iamVjdCAgICAgICAgICAgICA6IGZhbHNlLAogICAgcGFyc2VJbnQgICAgICAgICAgIDogZmFsc2UsCiAgICBwYXJzZUZsb2F0ICAgICAgICAgOiBmYWxzZSwKICAgIFJhbmdlRXJyb3IgICAgICAgICA6IGZhbHNlLAogICAgUmVmZXJlbmNlRXJyb3IgICAgIDogZmFsc2UsCiAgICBSZWdFeHAgICAgICAgICAgICAgOiBmYWxzZSwKICAgIFN0cmluZyAgICAgICAgICAgICA6IGZhbHNlLAogICAgU3ludGF4RXJyb3IgICAgICAgIDogZmFsc2UsCiAgICBUeXBlRXJyb3IgICAgICAgICAgOiBmYWxzZSwKICAgIFVSSUVycm9yICAgICAgICAgICA6IGZhbHNlCiAgfSwKICA1OiB7CiAgICBKU09OICAgICAgICAgICAgICAgOiBmYWxzZQogIH0sCiAgNjogewogICAgTWFwICAgICAgICAgICAgICAgIDogZmFsc2UsCiAgICBQcm9taXNlICAgICAgICAgICAgOiBmYWxzZSwKICAgIFByb3h5ICAgICAgICAgICAgICA6IGZhbHNlLAogICAgUmVmbGVjdCAgICAgICAgICAgIDogZmFsc2UsCiAgICBTZXQgICAgICAgICAgICAgICAgOiBmYWxzZSwKICAgIFN5bWJvbCAgICAgICAgICAgICA6IGZhbHNlLAogICAgV2Vha01hcCAgICAgICAgICAgIDogZmFsc2UsCiAgICBXZWFrU2V0ICAgICAgICAgICAgOiBmYWxzZQogIH0KfTsKCmV4cG9ydHMuYnJvd3NlciA9IHsKICBBdWRpbyAgICAgICAgICAgICAgICA6IGZhbHNlLAogIEJsb2IgICAgICAgICAgICAgICAgIDogZmFsc2UsCiAgYWRkRXZlbnRMaXN0ZW5lciAgICAgOiBmYWxzZSwKICBhcHBsaWNhdGlvbkNhY2hlICAgICA6IGZhbHNlLAogIGF0b2IgICAgICAgICAgICAgICAgIDogZmFsc2UsCiAgYmx1ciAgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBidG9hICAgICAgICAgICAgICAgICA6IGZhbHNlLAogIGNhbmNlbEFuaW1hdGlvbkZyYW1lIDogZmFsc2UsCiAgQ2FudmFzR3JhZGllbnQgICAgICAgOiBmYWxzZSwKICBDYW52YXNQYXR0ZXJuICAgICAgICA6IGZhbHNlLAogIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDogZmFsc2UsCiAgQ1NTICAgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBjbGVhckludGVydmFsICAgICAgICA6IGZhbHNlLAogIGNsZWFyVGltZW91dCAgICAgICAgIDogZmFsc2UsCiAgY2xvc2UgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBjbG9zZWQgICAgICAgICAgICAgICA6IGZhbHNlLAogIENvbW1lbnQgICAgICAgICAgICAgIDogZmFsc2UsCiAgQ3VzdG9tRXZlbnQgICAgICAgICAgOiBmYWxzZSwKICBET01QYXJzZXIgICAgICAgICAgICA6IGZhbHNlLAogIGRlZmF1bHRTdGF0dXMgICAgICAgIDogZmFsc2UsCiAgRG9jdW1lbnQgICAgICAgICAgICAgOiBmYWxzZSwKICBkb2N1bWVudCAgICAgICAgICAgICA6IGZhbHNlLAogIERvY3VtZW50RnJhZ21lbnQgICAgIDogZmFsc2UsCiAgRWxlbWVudCAgICAgICAgICAgICAgOiBmYWxzZSwKICBFbGVtZW50VGltZUNvbnRyb2wgICA6IGZhbHNlLAogIEV2ZW50ICAgICAgICAgICAgICAgIDogZmFsc2UsCiAgZXZlbnQgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBmZXRjaCAgICAgICAgICAgICAgICA6IGZhbHNlLAogIEZpbGVSZWFkZXIgICAgICAgICAgIDogZmFsc2UsCiAgRm9ybURhdGEgICAgICAgICAgICAgOiBmYWxzZSwKICBmb2N1cyAgICAgICAgICAgICAgICA6IGZhbHNlLAogIGZyYW1lcyAgICAgICAgICAgICAgIDogZmFsc2UsCiAgZ2V0Q29tcHV0ZWRTdHlsZSAgICAgOiBmYWxzZSwKICBIVE1MRWxlbWVudCAgICAgICAgICA6IGZhbHNlLAogIEhUTUxBbmNob3JFbGVtZW50ICAgIDogZmFsc2UsCiAgSFRNTEJhc2VFbGVtZW50ICAgICAgOiBmYWxzZSwKICBIVE1MQmxvY2txdW90ZUVsZW1lbnQ6IGZhbHNlLAogIEhUTUxCb2R5RWxlbWVudCAgICAgIDogZmFsc2UsCiAgSFRNTEJSRWxlbWVudCAgICAgICAgOiBmYWxzZSwKICBIVE1MQnV0dG9uRWxlbWVudCAgICA6IGZhbHNlLAogIEhUTUxDYW52YXNFbGVtZW50ICAgIDogZmFsc2UsCiAgSFRNTENvbGxlY3Rpb24gICAgICAgOiBmYWxzZSwKICBIVE1MRGlyZWN0b3J5RWxlbWVudCA6IGZhbHNlLAogIEhUTUxEaXZFbGVtZW50ICAgICAgIDogZmFsc2UsCiAgSFRNTERMaXN0RWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MRmllbGRTZXRFbGVtZW50ICA6IGZhbHNlLAogIEhUTUxGb250RWxlbWVudCAgICAgIDogZmFsc2UsCiAgSFRNTEZvcm1FbGVtZW50ICAgICAgOiBmYWxzZSwKICBIVE1MRnJhbWVFbGVtZW50ICAgICA6IGZhbHNlLAogIEhUTUxGcmFtZVNldEVsZW1lbnQgIDogZmFsc2UsCiAgSFRNTEhlYWRFbGVtZW50ICAgICAgOiBmYWxzZSwKICBIVE1MSGVhZGluZ0VsZW1lbnQgICA6IGZhbHNlLAogIEhUTUxIUkVsZW1lbnQgICAgICAgIDogZmFsc2UsCiAgSFRNTEh0bWxFbGVtZW50ICAgICAgOiBmYWxzZSwKICBIVE1MSUZyYW1lRWxlbWVudCAgICA6IGZhbHNlLAogIEhUTUxJbWFnZUVsZW1lbnQgICAgIDogZmFsc2UsCiAgSFRNTElucHV0RWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MSXNJbmRleEVsZW1lbnQgICA6IGZhbHNlLAogIEhUTUxMYWJlbEVsZW1lbnQgICAgIDogZmFsc2UsCiAgSFRNTExheWVyRWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MTGVnZW5kRWxlbWVudCAgICA6IGZhbHNlLAogIEhUTUxMSUVsZW1lbnQgICAgICAgIDogZmFsc2UsCiAgSFRNTExpbmtFbGVtZW50ICAgICAgOiBmYWxzZSwKICBIVE1MTWFwRWxlbWVudCAgICAgICA6IGZhbHNlLAogIEhUTUxNZW51RWxlbWVudCAgICAgIDogZmFsc2UsCiAgSFRNTE1ldGFFbGVtZW50ICAgICAgOiBmYWxzZSwKICBIVE1MTW9kRWxlbWVudCAgICAgICA6IGZhbHNlLAogIEhUTUxPYmplY3RFbGVtZW50ICAgIDogZmFsc2UsCiAgSFRNTE9MaXN0RWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MT3B0R3JvdXBFbGVtZW50ICA6IGZhbHNlLAogIEhUTUxPcHRpb25FbGVtZW50ICAgIDogZmFsc2UsCiAgSFRNTFBhcmFncmFwaEVsZW1lbnQgOiBmYWxzZSwKICBIVE1MUGFyYW1FbGVtZW50ICAgICA6IGZhbHNlLAogIEhUTUxQcmVFbGVtZW50ICAgICAgIDogZmFsc2UsCiAgSFRNTFF1b3RlRWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MU2NyaXB0RWxlbWVudCAgICA6IGZhbHNlLAogIEhUTUxTZWxlY3RFbGVtZW50ICAgIDogZmFsc2UsCiAgSFRNTFN0eWxlRWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDogZmFsc2UsCiAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQgOiBmYWxzZSwKICBIVE1MVGFibGVDb2xFbGVtZW50ICA6IGZhbHNlLAogIEhUTUxUYWJsZUVsZW1lbnQgICAgIDogZmFsc2UsCiAgSFRNTFRhYmxlUm93RWxlbWVudCAgOiBmYWxzZSwKICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDogZmFsc2UsCiAgSFRNTFRlbXBsYXRlRWxlbWVudCAgOiBmYWxzZSwKICBIVE1MVGV4dEFyZWFFbGVtZW50ICA6IGZhbHNlLAogIEhUTUxUaXRsZUVsZW1lbnQgICAgIDogZmFsc2UsCiAgSFRNTFVMaXN0RWxlbWVudCAgICAgOiBmYWxzZSwKICBIVE1MVmlkZW9FbGVtZW50ICAgICA6IGZhbHNlLAogIGhpc3RvcnkgICAgICAgICAgICAgIDogZmFsc2UsCiAgSW1hZ2UgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBJbnRsICAgICAgICAgICAgICAgICA6IGZhbHNlLAogIGxlbmd0aCAgICAgICAgICAgICAgIDogZmFsc2UsCiAgbG9jYWxTdG9yYWdlICAgICAgICAgOiBmYWxzZSwKICBsb2NhdGlvbiAgICAgICAgICAgICA6IGZhbHNlLAogIG1hdGNoTWVkaWEgICAgICAgICAgIDogZmFsc2UsCiAgTWVzc2FnZUNoYW5uZWwgICAgICAgOiBmYWxzZSwKICBNZXNzYWdlRXZlbnQgICAgICAgICA6IGZhbHNlLAogIE1lc3NhZ2VQb3J0ICAgICAgICAgIDogZmFsc2UsCiAgTW91c2VFdmVudCAgICAgICAgICAgOiBmYWxzZSwKICBtb3ZlQnkgICAgICAgICAgICAgICA6IGZhbHNlLAogIG1vdmVUbyAgICAgICAgICAgICAgIDogZmFsc2UsCiAgTXV0YXRpb25PYnNlcnZlciAgICAgOiBmYWxzZSwKICBuYW1lICAgICAgICAgICAgICAgICA6IGZhbHNlLAogIE5vZGUgICAgICAgICAgICAgICAgIDogZmFsc2UsCiAgTm9kZUZpbHRlciAgICAgICAgICAgOiBmYWxzZSwKICBOb2RlTGlzdCAgICAgICAgICAgICA6IGZhbHNlLAogIE5vdGlmaWNhdGlvbiAgICAgICAgIDogZmFsc2UsCiAgbmF2aWdhdG9yICAgICAgICAgICAgOiBmYWxzZSwKICBvbmJlZm9yZXVubG9hZCAgICAgICA6IHRydWUsCiAgb25ibHVyICAgICAgICAgICAgICAgOiB0cnVlLAogIG9uZXJyb3IgICAgICAgICAgICAgIDogdHJ1ZSwKICBvbmZvY3VzICAgICAgICAgICAgICA6IHRydWUsCiAgb25sb2FkICAgICAgICAgICAgICAgOiB0cnVlLAogIG9ucmVzaXplICAgICAgICAgICAgIDogdHJ1ZSwKICBvbnVubG9hZCAgICAgICAgICAgICA6IHRydWUsCiAgb3BlbiAgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBvcGVuRGF0YWJhc2UgICAgICAgICA6IGZhbHNlLAogIG9wZW5lciAgICAgICAgICAgICAgIDogZmFsc2UsCiAgT3B0aW9uICAgICAgICAgICAgICAgOiBmYWxzZSwKICBwYXJlbnQgICAgICAgICAgICAgICA6IGZhbHNlLAogIHBlcmZvcm1hbmNlICAgICAgICAgIDogZmFsc2UsCiAgcHJpbnQgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBSYW5nZSAgICAgICAgICAgICAgICA6IGZhbHNlLAogIHJlcXVlc3RBbmltYXRpb25GcmFtZSA6IGZhbHNlLAogIHJlbW92ZUV2ZW50TGlzdGVuZXIgIDogZmFsc2UsCiAgcmVzaXplQnkgICAgICAgICAgICAgOiBmYWxzZSwKICByZXNpemVUbyAgICAgICAgICAgICA6IGZhbHNlLAogIHNjcmVlbiAgICAgICAgICAgICAgIDogZmFsc2UsCiAgc2Nyb2xsICAgICAgICAgICAgICAgOiBmYWxzZSwKICBzY3JvbGxCeSAgICAgICAgICAgICA6IGZhbHNlLAogIHNjcm9sbFRvICAgICAgICAgICAgIDogZmFsc2UsCiAgc2Vzc2lvblN0b3JhZ2UgICAgICAgOiBmYWxzZSwKICBzZXRJbnRlcnZhbCAgICAgICAgICA6IGZhbHNlLAogIHNldFRpbWVvdXQgICAgICAgICAgIDogZmFsc2UsCiAgU2hhcmVkV29ya2VyICAgICAgICAgOiBmYWxzZSwKICBzdGF0dXMgICAgICAgICAgICAgICA6IGZhbHNlLAogIFNWR0FFbGVtZW50ICAgICAgICAgIDogZmFsc2UsCiAgU1ZHQWx0R2x5cGhEZWZFbGVtZW50OiBmYWxzZSwKICBTVkdBbHRHbHlwaEVsZW1lbnQgICA6IGZhbHNlLAogIFNWR0FsdEdseXBoSXRlbUVsZW1lbnQ6IGZhbHNlLAogIFNWR0FuZ2xlICAgICAgICAgICAgIDogZmFsc2UsCiAgU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDogZmFsc2UsCiAgU1ZHQW5pbWF0ZUVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdBbmltYXRlTW90aW9uRWxlbWVudDogZmFsc2UsCiAgU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6IGZhbHNlLAogIFNWR0FuaW1hdGVkQW5nbGUgICAgIDogZmFsc2UsCiAgU1ZHQW5pbWF0ZWRCb29sZWFuICAgOiBmYWxzZSwKICBTVkdBbmltYXRlZEVudW1lcmF0aW9uOiBmYWxzZSwKICBTVkdBbmltYXRlZEludGVnZXIgICA6IGZhbHNlLAogIFNWR0FuaW1hdGVkTGVuZ3RoICAgIDogZmFsc2UsCiAgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OiBmYWxzZSwKICBTVkdBbmltYXRlZE51bWJlciAgICA6IGZhbHNlLAogIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDogZmFsc2UsCiAgU1ZHQW5pbWF0ZWRQYXRoRGF0YSAgOiBmYWxzZSwKICBTVkdBbmltYXRlZFBvaW50cyAgICA6IGZhbHNlLAogIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbzogZmFsc2UsCiAgU1ZHQW5pbWF0ZWRSZWN0ICAgICAgOiBmYWxzZSwKICBTVkdBbmltYXRlZFN0cmluZyAgICA6IGZhbHNlLAogIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDogZmFsc2UsCiAgU1ZHQW5pbWF0aW9uRWxlbWVudCAgOiBmYWxzZSwKICBTVkdDU1NSdWxlICAgICAgICAgICA6IGZhbHNlLAogIFNWR0NpcmNsZUVsZW1lbnQgICAgIDogZmFsc2UsCiAgU1ZHQ2xpcFBhdGhFbGVtZW50ICAgOiBmYWxzZSwKICBTVkdDb2xvciAgICAgICAgICAgICA6IGZhbHNlLAogIFNWR0NvbG9yUHJvZmlsZUVsZW1lbnQ6IGZhbHNlLAogIFNWR0NvbG9yUHJvZmlsZVJ1bGUgIDogZmFsc2UsCiAgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6IGZhbHNlLAogIFNWR0N1cnNvckVsZW1lbnQgICAgIDogZmFsc2UsCiAgU1ZHRGVmc0VsZW1lbnQgICAgICAgOiBmYWxzZSwKICBTVkdEZXNjRWxlbWVudCAgICAgICA6IGZhbHNlLAogIFNWR0RvY3VtZW50ICAgICAgICAgIDogZmFsc2UsCiAgU1ZHRWxlbWVudCAgICAgICAgICAgOiBmYWxzZSwKICBTVkdFbGVtZW50SW5zdGFuY2UgICA6IGZhbHNlLAogIFNWR0VsZW1lbnRJbnN0YW5jZUxpc3Q6IGZhbHNlLAogIFNWR0VsbGlwc2VFbGVtZW50ICAgIDogZmFsc2UsCiAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDogZmFsc2UsCiAgU1ZHRkVCbGVuZEVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDogZmFsc2UsCiAgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZFQ29tcG9zaXRlRWxlbWVudDogZmFsc2UsCiAgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDogZmFsc2UsCiAgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OiBmYWxzZSwKICBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZFRmxvb2RFbGVtZW50ICAgIDogZmFsc2UsCiAgU1ZHRkVGdW5jQUVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdGRUZ1bmNCRWxlbWVudCAgICA6IGZhbHNlLAogIFNWR0ZFRnVuY0dFbGVtZW50ICAgIDogZmFsc2UsCiAgU1ZHRkVGdW5jUkVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZFSW1hZ2VFbGVtZW50ICAgIDogZmFsc2UsCiAgU1ZHRkVNZXJnZUVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZFT2Zmc2V0RWxlbWVudCAgIDogZmFsc2UsCiAgU1ZHRkVQb2ludExpZ2h0RWxlbWVudDogZmFsc2UsCiAgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDogZmFsc2UsCiAgU1ZHRkVTcG90TGlnaHRFbGVtZW50OiBmYWxzZSwKICBTVkdGRVRpbGVFbGVtZW50ICAgICA6IGZhbHNlLAogIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZpbHRlckVsZW1lbnQgICAgIDogZmFsc2UsCiAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOiBmYWxzZSwKICBTVkdGaXRUb1ZpZXdCb3ggICAgICA6IGZhbHNlLAogIFNWR0ZvbnRFbGVtZW50ICAgICAgIDogZmFsc2UsCiAgU1ZHRm9udEZhY2VFbGVtZW50ICAgOiBmYWxzZSwKICBTVkdGb250RmFjZUZvcm1hdEVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQ6IGZhbHNlLAogIFNWR0ZvbnRGYWNlU3JjRWxlbWVudDogZmFsc2UsCiAgU1ZHRm9udEZhY2VVcmlFbGVtZW50OiBmYWxzZSwKICBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDogZmFsc2UsCiAgU1ZHR0VsZW1lbnQgICAgICAgICAgOiBmYWxzZSwKICBTVkdHbHlwaEVsZW1lbnQgICAgICA6IGZhbHNlLAogIFNWR0dseXBoUmVmRWxlbWVudCAgIDogZmFsc2UsCiAgU1ZHR3JhZGllbnRFbGVtZW50ICAgOiBmYWxzZSwKICBTVkdIS2VybkVsZW1lbnQgICAgICA6IGZhbHNlLAogIFNWR0lDQ0NvbG9yICAgICAgICAgIDogZmFsc2UsCiAgU1ZHSW1hZ2VFbGVtZW50ICAgICAgOiBmYWxzZSwKICBTVkdMYW5nU3BhY2UgICAgICAgICA6IGZhbHNlLAogIFNWR0xlbmd0aCAgICAgICAgICAgIDogZmFsc2UsCiAgU1ZHTGVuZ3RoTGlzdCAgICAgICAgOiBmYWxzZSwKICBTVkdMaW5lRWxlbWVudCAgICAgICA6IGZhbHNlLAogIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDogZmFsc2UsCiAgU1ZHTG9jYXRhYmxlICAgICAgICAgOiBmYWxzZSwKICBTVkdNUGF0aEVsZW1lbnQgICAgICA6IGZhbHNlLAogIFNWR01hcmtlckVsZW1lbnQgICAgIDogZmFsc2UsCiAgU1ZHTWFza0VsZW1lbnQgICAgICAgOiBmYWxzZSwKICBTVkdNYXRyaXggICAgICAgICAgICA6IGZhbHNlLAogIFNWR01ldGFkYXRhRWxlbWVudCAgIDogZmFsc2UsCiAgU1ZHTWlzc2luZ0dseXBoRWxlbWVudDogZmFsc2UsCiAgU1ZHTnVtYmVyICAgICAgICAgICAgOiBmYWxzZSwKICBTVkdOdW1iZXJMaXN0ICAgICAgICA6IGZhbHNlLAogIFNWR1BhaW50ICAgICAgICAgICAgIDogZmFsc2UsCiAgU1ZHUGF0aEVsZW1lbnQgICAgICAgOiBmYWxzZSwKICBTVkdQYXRoU2VnICAgICAgICAgICA6IGZhbHNlLAogIFNWR1BhdGhTZWdBcmNBYnMgICAgIDogZmFsc2UsCiAgU1ZHUGF0aFNlZ0FyY1JlbCAgICAgOiBmYWxzZSwKICBTVkdQYXRoU2VnQ2xvc2VQYXRoICA6IGZhbHNlLAogIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnM6IGZhbHNlLAogIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWw6IGZhbHNlLAogIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhBYnM6IGZhbHNlLAogIFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWw6IGZhbHNlLAogIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzOiBmYWxzZSwKICBTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1JlbDogZmFsc2UsCiAgU1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNTbW9vdGhBYnM6IGZhbHNlLAogIFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsOiBmYWxzZSwKICBTVkdQYXRoU2VnTGluZXRvQWJzICA6IGZhbHNlLAogIFNWR1BhdGhTZWdMaW5ldG9Ib3Jpem9udGFsQWJzOiBmYWxzZSwKICBTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbDogZmFsc2UsCiAgU1ZHUGF0aFNlZ0xpbmV0b1JlbCAgOiBmYWxzZSwKICBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnM6IGZhbHNlLAogIFNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbFJlbDogZmFsc2UsCiAgU1ZHUGF0aFNlZ0xpc3QgICAgICAgOiBmYWxzZSwKICBTVkdQYXRoU2VnTW92ZXRvQWJzICA6IGZhbHNlLAogIFNWR1BhdGhTZWdNb3ZldG9SZWwgIDogZmFsc2UsCiAgU1ZHUGF0dGVybkVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdQb2ludCAgICAgICAgICAgICA6IGZhbHNlLAogIFNWR1BvaW50TGlzdCAgICAgICAgIDogZmFsc2UsCiAgU1ZHUG9seWdvbkVsZW1lbnQgICAgOiBmYWxzZSwKICBTVkdQb2x5bGluZUVsZW1lbnQgICA6IGZhbHNlLAogIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW86IGZhbHNlLAogIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDogZmFsc2UsCiAgU1ZHUmVjdCAgICAgICAgICAgICAgOiBmYWxzZSwKICBTVkdSZWN0RWxlbWVudCAgICAgICA6IGZhbHNlLAogIFNWR1JlbmRlcmluZ0ludGVudCAgIDogZmFsc2UsCiAgU1ZHU1ZHRWxlbWVudCAgICAgICAgOiBmYWxzZSwKICBTVkdTY3JpcHRFbGVtZW50ICAgICA6IGZhbHNlLAogIFNWR1NldEVsZW1lbnQgICAgICAgIDogZmFsc2UsCiAgU1ZHU3RvcEVsZW1lbnQgICAgICAgOiBmYWxzZSwKICBTVkdTdHJpbmdMaXN0ICAgICAgICA6IGZhbHNlLAogIFNWR1N0eWxhYmxlICAgICAgICAgIDogZmFsc2UsCiAgU1ZHU3R5bGVFbGVtZW50ICAgICAgOiBmYWxzZSwKICBTVkdTd2l0Y2hFbGVtZW50ICAgICA6IGZhbHNlLAogIFNWR1N5bWJvbEVsZW1lbnQgICAgIDogZmFsc2UsCiAgU1ZHVFJlZkVsZW1lbnQgICAgICAgOiBmYWxzZSwKICBTVkdUU3BhbkVsZW1lbnQgICAgICA6IGZhbHNlLAogIFNWR1Rlc3RzICAgICAgICAgICAgIDogZmFsc2UsCiAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OiBmYWxzZSwKICBTVkdUZXh0RWxlbWVudCAgICAgICA6IGZhbHNlLAogIFNWR1RleHRQYXRoRWxlbWVudCAgIDogZmFsc2UsCiAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDogZmFsc2UsCiAgU1ZHVGl0bGVFbGVtZW50ICAgICAgOiBmYWxzZSwKICBTVkdUcmFuc2Zvcm0gICAgICAgICA6IGZhbHNlLAogIFNWR1RyYW5zZm9ybUxpc3QgICAgIDogZmFsc2UsCiAgU1ZHVHJhbnNmb3JtYWJsZSAgICAgOiBmYWxzZSwKICBTVkdVUklSZWZlcmVuY2UgICAgICA6IGZhbHNlLAogIFNWR1VuaXRUeXBlcyAgICAgICAgIDogZmFsc2UsCiAgU1ZHVXNlRWxlbWVudCAgICAgICAgOiBmYWxzZSwKICBTVkdWS2VybkVsZW1lbnQgICAgICA6IGZhbHNlLAogIFNWR1ZpZXdFbGVtZW50ICAgICAgIDogZmFsc2UsCiAgU1ZHVmlld1NwZWMgICAgICAgICAgOiBmYWxzZSwKICBTVkdab29tQW5kUGFuICAgICAgICA6IGZhbHNlLAogIFRleHQgICAgICAgICAgICAgICAgIDogZmFsc2UsCiAgVGV4dERlY29kZXIgICAgICAgICAgOiBmYWxzZSwKICBUZXh0RW5jb2RlciAgICAgICAgICA6IGZhbHNlLAogIFRpbWVFdmVudCAgICAgICAgICAgIDogZmFsc2UsCiAgdG9wICAgICAgICAgICAgICAgICAgOiBmYWxzZSwKICBVUkwgICAgICAgICAgICAgICAgICA6IGZhbHNlLAogIFdlYkdMQWN0aXZlSW5mbyAgICAgIDogZmFsc2UsCiAgV2ViR0xCdWZmZXIgICAgICAgICAgOiBmYWxzZSwKICBXZWJHTENvbnRleHRFdmVudCAgICA6IGZhbHNlLAogIFdlYkdMRnJhbWVidWZmZXIgICAgIDogZmFsc2UsCiAgV2ViR0xQcm9ncmFtICAgICAgICAgOiBmYWxzZSwKICBXZWJHTFJlbmRlcmJ1ZmZlciAgICA6IGZhbHNlLAogIFdlYkdMUmVuZGVyaW5nQ29udGV4dDogZmFsc2UsCiAgV2ViR0xTaGFkZXIgICAgICAgICAgOiBmYWxzZSwKICBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDogZmFsc2UsCiAgV2ViR0xUZXh0dXJlICAgICAgICAgOiBmYWxzZSwKICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiA6IGZhbHNlLAogIFdlYlNvY2tldCAgICAgICAgICAgIDogZmFsc2UsCiAgd2luZG93ICAgICAgICAgICAgICAgOiBmYWxzZSwKICBXaW5kb3cgICAgICAgICAgICAgICA6IGZhbHNlLAogIFdvcmtlciAgICAgICAgICAgICAgIDogZmFsc2UsCiAgWERvbWFpblJlcXVlc3QgICAgICAgOiBmYWxzZSwKICBYTUxIdHRwUmVxdWVzdCAgICAgICA6IGZhbHNlLAogIFhNTFNlcmlhbGl6ZXIgICAgICAgIDogZmFsc2UsCiAgWFBhdGhFdmFsdWF0b3IgICAgICAgOiBmYWxzZSwKICBYUGF0aEV4Y2VwdGlvbiAgICAgICA6IGZhbHNlLAogIFhQYXRoRXhwcmVzc2lvbiAgICAgIDogZmFsc2UsCiAgWFBhdGhOYW1lc3BhY2UgICAgICAgOiBmYWxzZSwKICBYUGF0aE5TUmVzb2x2ZXIgICAgICA6IGZhbHNlLAogIFhQYXRoUmVzdWx0ICAgICAgICAgIDogZmFsc2UKfTsKCmV4cG9ydHMuZGV2ZWwgPSB7CiAgYWxlcnQgIDogZmFsc2UsCiAgY29uZmlybTogZmFsc2UsCiAgY29uc29sZTogZmFsc2UsCiAgRGVidWcgIDogZmFsc2UsCiAgb3BlcmEgIDogZmFsc2UsCiAgcHJvbXB0IDogZmFsc2UKfTsKCmV4cG9ydHMud29ya2VyID0gewogIGltcG9ydFNjcmlwdHMgIDogdHJ1ZSwKICBwb3N0TWVzc2FnZSAgICA6IHRydWUsCiAgc2VsZiAgICAgICAgICAgOiB0cnVlLAogIEZpbGVSZWFkZXJTeW5jIDogdHJ1ZQp9OwpleHBvcnRzLm5vbnN0YW5kYXJkID0gewogIGVzY2FwZSAgOiBmYWxzZSwKICB1bmVzY2FwZTogZmFsc2UKfTsKCmV4cG9ydHMuY291Y2ggPSB7CiAgInJlcXVpcmUiIDogZmFsc2UsCiAgcmVzcG9uZCAgIDogZmFsc2UsCiAgZ2V0Um93ICAgIDogZmFsc2UsCiAgZW1pdCAgICAgIDogZmFsc2UsCiAgc2VuZCAgICAgIDogZmFsc2UsCiAgc3RhcnQgICAgIDogZmFsc2UsCiAgc3VtICAgICAgIDogZmFsc2UsCiAgbG9nICAgICAgIDogZmFsc2UsCiAgZXhwb3J0cyAgIDogZmFsc2UsCiAgbW9kdWxlICAgIDogZmFsc2UsCiAgcHJvdmlkZXMgIDogZmFsc2UKfTsKCmV4cG9ydHMubm9kZSA9IHsKICBfX2ZpbGVuYW1lICAgIDogZmFsc2UsCiAgX19kaXJuYW1lICAgICA6IGZhbHNlLAogIEdMT0JBTCAgICAgICAgOiBmYWxzZSwKICBnbG9iYWwgICAgICAgIDogZmFsc2UsCiAgbW9kdWxlICAgICAgICA6IGZhbHNlLAogIHJlcXVpcmUgICAgICAgOiBmYWxzZSwKCiAgQnVmZmVyICAgICAgICA6IHRydWUsCiAgY29uc29sZSAgICAgICA6IHRydWUsCiAgZXhwb3J0cyAgICAgICA6IHRydWUsCiAgcHJvY2VzcyAgICAgICA6IHRydWUsCiAgc2V0VGltZW91dCAgICA6IHRydWUsCiAgY2xlYXJUaW1lb3V0ICA6IHRydWUsCiAgc2V0SW50ZXJ2YWwgICA6IHRydWUsCiAgY2xlYXJJbnRlcnZhbCA6IHRydWUsCiAgc2V0SW1tZWRpYXRlICA6IHRydWUsIC8vIHYwLjkuMSsKICBjbGVhckltbWVkaWF0ZTogdHJ1ZSAgLy8gdjAuOS4xKwp9OwoKZXhwb3J0cy5icm93c2VyaWZ5ID0gewogIF9fZmlsZW5hbWUgICAgOiBmYWxzZSwKICBfX2Rpcm5hbWUgICAgIDogZmFsc2UsCiAgZ2xvYmFsICAgICAgICA6IGZhbHNlLAogIG1vZHVsZSAgICAgICAgOiBmYWxzZSwKICByZXF1aXJlICAgICAgIDogZmFsc2UsCiAgQnVmZmVyICAgICAgICA6IHRydWUsCiAgZXhwb3J0cyAgICAgICA6IHRydWUsCiAgcHJvY2VzcyAgICAgICA6IHRydWUKfTsKCmV4cG9ydHMucGhhbnRvbSA9IHsKICBwaGFudG9tICAgICAgOiB0cnVlLAogIHJlcXVpcmUgICAgICA6IHRydWUsCiAgV2ViUGFnZSAgICAgIDogdHJ1ZSwKICBjb25zb2xlICAgICAgOiB0cnVlLCAvLyBpbiBleGFtcGxlcywgYnV0IHVuZG9jdW1lbnRlZAogIGV4cG9ydHMgICAgICA6IHRydWUgIC8vIHYxLjcrCn07CgpleHBvcnRzLnF1bml0ID0gewogIGFzeW5jVGVzdCAgICAgIDogZmFsc2UsCiAgZGVlcEVxdWFsICAgICAgOiBmYWxzZSwKICBlcXVhbCAgICAgICAgICA6IGZhbHNlLAogIGV4cGVjdCAgICAgICAgIDogZmFsc2UsCiAgbW9kdWxlICAgICAgICAgOiBmYWxzZSwKICBub3REZWVwRXF1YWwgICA6IGZhbHNlLAogIG5vdEVxdWFsICAgICAgIDogZmFsc2UsCiAgbm90UHJvcEVxdWFsICAgOiBmYWxzZSwKICBub3RTdHJpY3RFcXVhbCA6IGZhbHNlLAogIG9rICAgICAgICAgICAgIDogZmFsc2UsCiAgcHJvcEVxdWFsICAgICAgOiBmYWxzZSwKICBRVW5pdCAgICAgICAgICA6IGZhbHNlLAogIHJhaXNlcyAgICAgICAgIDogZmFsc2UsCiAgc3RhcnQgICAgICAgICAgOiBmYWxzZSwKICBzdG9wICAgICAgICAgICA6IGZhbHNlLAogIHN0cmljdEVxdWFsICAgIDogZmFsc2UsCiAgdGVzdCAgICAgICAgICAgOiBmYWxzZSwKICAidGhyb3dzIiAgICAgICA6IGZhbHNlCn07CgpleHBvcnRzLnJoaW5vID0gewogIGRlZmluZUNsYXNzICA6IGZhbHNlLAogIGRlc2VyaWFsaXplICA6IGZhbHNlLAogIGdjICAgICAgICAgICA6IGZhbHNlLAogIGhlbHAgICAgICAgICA6IGZhbHNlLAogIGltcG9ydENsYXNzICA6IGZhbHNlLAogIGltcG9ydFBhY2thZ2U6IGZhbHNlLAogICJqYXZhIiAgICAgICA6IGZhbHNlLAogIGxvYWQgICAgICAgICA6IGZhbHNlLAogIGxvYWRDbGFzcyAgICA6IGZhbHNlLAogIFBhY2thZ2VzICAgICA6IGZhbHNlLAogIHByaW50ICAgICAgICA6IGZhbHNlLAogIHF1aXQgICAgICAgICA6IGZhbHNlLAogIHJlYWRGaWxlICAgICA6IGZhbHNlLAogIHJlYWRVcmwgICAgICA6IGZhbHNlLAogIHJ1bkNvbW1hbmQgICA6IGZhbHNlLAogIHNlYWwgICAgICAgICA6IGZhbHNlLAogIHNlcmlhbGl6ZSAgICA6IGZhbHNlLAogIHNwYXduICAgICAgICA6IGZhbHNlLAogIHN5bmMgICAgICAgICA6IGZhbHNlLAogIHRvaW50MzIgICAgICA6IGZhbHNlLAogIHZlcnNpb24gICAgICA6IGZhbHNlCn07CgpleHBvcnRzLnNoZWxsanMgPSB7CiAgdGFyZ2V0ICAgICAgIDogZmFsc2UsCiAgZWNobyAgICAgICAgIDogZmFsc2UsCiAgZXhpdCAgICAgICAgIDogZmFsc2UsCiAgY2QgICAgICAgICAgIDogZmFsc2UsCiAgcHdkICAgICAgICAgIDogZmFsc2UsCiAgbHMgICAgICAgICAgIDogZmFsc2UsCiAgZmluZCAgICAgICAgIDogZmFsc2UsCiAgY3AgICAgICAgICAgIDogZmFsc2UsCiAgcm0gICAgICAgICAgIDogZmFsc2UsCiAgbXYgICAgICAgICAgIDogZmFsc2UsCiAgbWtkaXIgICAgICAgIDogZmFsc2UsCiAgdGVzdCAgICAgICAgIDogZmFsc2UsCiAgY2F0ICAgICAgICAgIDogZmFsc2UsCiAgc2VkICAgICAgICAgIDogZmFsc2UsCiAgZ3JlcCAgICAgICAgIDogZmFsc2UsCiAgd2hpY2ggICAgICAgIDogZmFsc2UsCiAgZGlycyAgICAgICAgIDogZmFsc2UsCiAgcHVzaGQgICAgICAgIDogZmFsc2UsCiAgcG9wZCAgICAgICAgIDogZmFsc2UsCiAgZW52ICAgICAgICAgIDogZmFsc2UsCiAgZXhlYyAgICAgICAgIDogZmFsc2UsCiAgY2htb2QgICAgICAgIDogZmFsc2UsCiAgY29uZmlnICAgICAgIDogZmFsc2UsCiAgZXJyb3IgICAgICAgIDogZmFsc2UsCiAgdGVtcGRpciAgICAgIDogZmFsc2UKfTsKCmV4cG9ydHMudHlwZWQgPSB7CiAgQXJyYXlCdWZmZXIgICAgICAgICA6IGZhbHNlLAogIEFycmF5QnVmZmVyVmlldyAgICAgOiBmYWxzZSwKICBEYXRhVmlldyAgICAgICAgICAgIDogZmFsc2UsCiAgRmxvYXQzMkFycmF5ICAgICAgICA6IGZhbHNlLAogIEZsb2F0NjRBcnJheSAgICAgICAgOiBmYWxzZSwKICBJbnQxNkFycmF5ICAgICAgICAgIDogZmFsc2UsCiAgSW50MzJBcnJheSAgICAgICAgICA6IGZhbHNlLAogIEludDhBcnJheSAgICAgICAgICAgOiBmYWxzZSwKICBVaW50MTZBcnJheSAgICAgICAgIDogZmFsc2UsCiAgVWludDMyQXJyYXkgICAgICAgICA6IGZhbHNlLAogIFVpbnQ4QXJyYXkgICAgICAgICAgOiBmYWxzZSwKICBVaW50OENsYW1wZWRBcnJheSAgIDogZmFsc2UKfTsKCmV4cG9ydHMud3NoID0gewogIEFjdGl2ZVhPYmplY3QgICAgICAgICAgICA6IHRydWUsCiAgRW51bWVyYXRvciAgICAgICAgICAgICAgIDogdHJ1ZSwKICBHZXRPYmplY3QgICAgICAgICAgICAgICAgOiB0cnVlLAogIFNjcmlwdEVuZ2luZSAgICAgICAgICAgICA6IHRydWUsCiAgU2NyaXB0RW5naW5lQnVpbGRWZXJzaW9uIDogdHJ1ZSwKICBTY3JpcHRFbmdpbmVNYWpvclZlcnNpb24gOiB0cnVlLAogIFNjcmlwdEVuZ2luZU1pbm9yVmVyc2lvbiA6IHRydWUsCiAgVkJBcnJheSAgICAgICAgICAgICAgICAgIDogdHJ1ZSwKICBXU0ggICAgICAgICAgICAgICAgICAgICAgOiB0cnVlLAogIFdTY3JpcHQgICAgICAgICAgICAgICAgICA6IHRydWUsCiAgWERvbWFpblJlcXVlc3QgICAgICAgICAgIDogdHJ1ZQp9OwoKZXhwb3J0cy5kb2pvID0gewogIGRvam8gICAgIDogZmFsc2UsCiAgZGlqaXQgICAgOiBmYWxzZSwKICBkb2pveCAgICA6IGZhbHNlLAogIGRlZmluZSAgIDogZmFsc2UsCiAgInJlcXVpcmUiOiBmYWxzZQp9OwoKZXhwb3J0cy5qcXVlcnkgPSB7CiAgIiQiICAgIDogZmFsc2UsCiAgalF1ZXJ5IDogZmFsc2UKfTsKCmV4cG9ydHMubW9vdG9vbHMgPSB7CiAgIiQiICAgICAgICAgICA6IGZhbHNlLAogICIkJCIgICAgICAgICAgOiBmYWxzZSwKICBBc3NldCAgICAgICAgIDogZmFsc2UsCiAgQnJvd3NlciAgICAgICA6IGZhbHNlLAogIENoYWluICAgICAgICAgOiBmYWxzZSwKICBDbGFzcyAgICAgICAgIDogZmFsc2UsCiAgQ29sb3IgICAgICAgICA6IGZhbHNlLAogIENvb2tpZSAgICAgICAgOiBmYWxzZSwKICBDb3JlICAgICAgICAgIDogZmFsc2UsCiAgRG9jdW1lbnQgICAgICA6IGZhbHNlLAogIERvbVJlYWR5ICAgICAgOiBmYWxzZSwKICBET01FdmVudCAgICAgIDogZmFsc2UsCiAgRE9NUmVhZHkgICAgICA6IGZhbHNlLAogIERyYWcgICAgICAgICAgOiBmYWxzZSwKICBFbGVtZW50ICAgICAgIDogZmFsc2UsCiAgRWxlbWVudHMgICAgICA6IGZhbHNlLAogIEV2ZW50ICAgICAgICAgOiBmYWxzZSwKICBFdmVudHMgICAgICAgIDogZmFsc2UsCiAgRnggICAgICAgICAgICA6IGZhbHNlLAogIEdyb3VwICAgICAgICAgOiBmYWxzZSwKICBIYXNoICAgICAgICAgIDogZmFsc2UsCiAgSHRtbFRhYmxlICAgICA6IGZhbHNlLAogIElGcmFtZSAgICAgICAgOiBmYWxzZSwKICBJZnJhbWVTaGltICAgIDogZmFsc2UsCiAgSW5wdXRWYWxpZGF0b3I6IGZhbHNlLAogIGluc3RhbmNlT2YgICAgOiBmYWxzZSwKICBLZXlib2FyZCAgICAgIDogZmFsc2UsCiAgTG9jYWxlICAgICAgICA6IGZhbHNlLAogIE1hc2sgICAgICAgICAgOiBmYWxzZSwKICBNb29Ub29scyAgICAgIDogZmFsc2UsCiAgTmF0aXZlICAgICAgICA6IGZhbHNlLAogIE9wdGlvbnMgICAgICAgOiBmYWxzZSwKICBPdmVyVGV4dCAgICAgIDogZmFsc2UsCiAgUmVxdWVzdCAgICAgICA6IGZhbHNlLAogIFNjcm9sbGVyICAgICAgOiBmYWxzZSwKICBTbGljayAgICAgICAgIDogZmFsc2UsCiAgU2xpZGVyICAgICAgICA6IGZhbHNlLAogIFNvcnRhYmxlcyAgICAgOiBmYWxzZSwKICBTcGlubmVyICAgICAgIDogZmFsc2UsCiAgU3dpZmYgICAgICAgICA6IGZhbHNlLAogIFRpcHMgICAgICAgICAgOiBmYWxzZSwKICBUeXBlICAgICAgICAgIDogZmFsc2UsCiAgdHlwZU9mICAgICAgICA6IGZhbHNlLAogIFVSSSAgICAgICAgICAgOiBmYWxzZSwKICBXaW5kb3cgICAgICAgIDogZmFsc2UKfTsKCmV4cG9ydHMucHJvdG90eXBlanMgPSB7CiAgIiQiICAgICAgICAgICAgICAgOiBmYWxzZSwKICAiJCQiICAgICAgICAgICAgICA6IGZhbHNlLAogICIkQSIgICAgICAgICAgICAgIDogZmFsc2UsCiAgIiRGIiAgICAgICAgICAgICAgOiBmYWxzZSwKICAiJEgiICAgICAgICAgICAgICA6IGZhbHNlLAogICIkUiIgICAgICAgICAgICAgIDogZmFsc2UsCiAgIiRicmVhayIgICAgICAgICAgOiBmYWxzZSwKICAiJGNvbnRpbnVlIiAgICAgICA6IGZhbHNlLAogICIkdyIgICAgICAgICAgICAgIDogZmFsc2UsCiAgQWJzdHJhY3QgICAgICAgICAgOiBmYWxzZSwKICBBamF4ICAgICAgICAgICAgICA6IGZhbHNlLAogIENsYXNzICAgICAgICAgICAgIDogZmFsc2UsCiAgRW51bWVyYWJsZSAgICAgICAgOiBmYWxzZSwKICBFbGVtZW50ICAgICAgICAgICA6IGZhbHNlLAogIEV2ZW50ICAgICAgICAgICAgIDogZmFsc2UsCiAgRmllbGQgICAgICAgICAgICAgOiBmYWxzZSwKICBGb3JtICAgICAgICAgICAgICA6IGZhbHNlLAogIEhhc2ggICAgICAgICAgICAgIDogZmFsc2UsCiAgSW5zZXJ0aW9uICAgICAgICAgOiBmYWxzZSwKICBPYmplY3RSYW5nZSAgICAgICA6IGZhbHNlLAogIFBlcmlvZGljYWxFeGVjdXRlcjogZmFsc2UsCiAgUG9zaXRpb24gICAgICAgICAgOiBmYWxzZSwKICBQcm90b3R5cGUgICAgICAgICA6IGZhbHNlLAogIFNlbGVjdG9yICAgICAgICAgIDogZmFsc2UsCiAgVGVtcGxhdGUgICAgICAgICAgOiBmYWxzZSwKICBUb2dnbGUgICAgICAgICAgICA6IGZhbHNlLAogIFRyeSAgICAgICAgICAgICAgIDogZmFsc2UsCiAgQXV0b2NvbXBsZXRlciAgICAgOiBmYWxzZSwKICBCdWlsZGVyICAgICAgICAgICA6IGZhbHNlLAogIENvbnRyb2wgICAgICAgICAgIDogZmFsc2UsCiAgRHJhZ2dhYmxlICAgICAgICAgOiBmYWxzZSwKICBEcmFnZ2FibGVzICAgICAgICA6IGZhbHNlLAogIERyb3BwYWJsZXMgICAgICAgIDogZmFsc2UsCiAgRWZmZWN0ICAgICAgICAgICAgOiBmYWxzZSwKICBTb3J0YWJsZSAgICAgICAgICA6IGZhbHNlLAogIFNvcnRhYmxlT2JzZXJ2ZXIgIDogZmFsc2UsCiAgU291bmQgICAgICAgICAgICAgOiBmYWxzZSwKICBTY3JpcHRhY3Vsb3VzICAgICA6IGZhbHNlCn07CgpleHBvcnRzLnl1aSA9IHsKICBZVUkgICAgICAgOiBmYWxzZSwKICBZICAgICAgICAgOiBmYWxzZSwKICBZVUlfY29uZmlnOiBmYWxzZQp9OwoKZXhwb3J0cy5tb2NoYSA9IHsKICBtb2NoYSAgICAgICA6IGZhbHNlLAogIGRlc2NyaWJlICAgIDogZmFsc2UsCiAgeGRlc2NyaWJlICAgOiBmYWxzZSwKICBpdCAgICAgICAgICA6IGZhbHNlLAogIHhpdCAgICAgICAgIDogZmFsc2UsCiAgY29udGV4dCAgICAgOiBmYWxzZSwKICB4Y29udGV4dCAgICA6IGZhbHNlLAogIGJlZm9yZSAgICAgIDogZmFsc2UsCiAgYWZ0ZXIgICAgICAgOiBmYWxzZSwKICBiZWZvcmVFYWNoICA6IGZhbHNlLAogIGFmdGVyRWFjaCAgIDogZmFsc2UsCiAgc3VpdGUgICAgICAgICA6IGZhbHNlLAogIHRlc3QgICAgICAgICAgOiBmYWxzZSwKICBzZXR1cCAgICAgICAgIDogZmFsc2UsCiAgdGVhcmRvd24gICAgICA6IGZhbHNlLAogIHN1aXRlU2V0dXAgICAgOiBmYWxzZSwKICBzdWl0ZVRlYXJkb3duIDogZmFsc2UKfTsKCmV4cG9ydHMuamFzbWluZSA9IHsKICBqYXNtaW5lICAgICA6IGZhbHNlLAogIGRlc2NyaWJlICAgIDogZmFsc2UsCiAgeGRlc2NyaWJlICAgOiBmYWxzZSwKICBpdCAgICAgICAgICA6IGZhbHNlLAogIHhpdCAgICAgICAgIDogZmFsc2UsCiAgYmVmb3JlRWFjaCAgOiBmYWxzZSwKICBhZnRlckVhY2ggICA6IGZhbHNlLAogIHNldEZpeHR1cmVzIDogZmFsc2UsCiAgbG9hZEZpeHR1cmVzOiBmYWxzZSwKICBzcHlPbiAgICAgICA6IGZhbHNlLAogIGV4cGVjdCAgICAgIDogZmFsc2UsCiAgcnVucyAgICAgICAgOiBmYWxzZSwKICB3YWl0c0ZvciAgICA6IGZhbHNlLAogIHdhaXRzICAgICAgIDogZmFsc2UsCiAgYmVmb3JlQWxsICAgOiBmYWxzZSwKICBhZnRlckFsbCAgICA6IGZhbHNlLAogIGZhaWwgICAgICAgIDogZmFsc2UsCiAgZmRlc2NyaWJlICAgOiBmYWxzZSwKICBmaXQgICAgICAgICA6IGZhbHNlLAogIHBlbmRpbmcgICAgIDogZmFsc2UKfTsKCn0se31dfSx7fSxbIi9ub2RlX21vZHVsZXMvanNoaW50L3NyYy9qc2hpbnQuanMiXSk7Cgp9KTsKCmRlZmluZSgiYWNlL21vZGUvamF2YXNjcmlwdF93b3JrZXIiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4uL2xpYi9vb3AiKTsKdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7CnZhciBsaW50ID0gcmVxdWlyZSgiLi9qYXZhc2NyaXB0L2pzaGludCIpLkpTSElOVDsKCmZ1bmN0aW9uIHN0YXJ0UmVnZXgoYXJyKSB7CiAgICByZXR1cm4gUmVnRXhwKCJeKCIgKyBhcnIuam9pbigifCIpICsgIikiKTsKfQoKdmFyIGRpc2FibGVkV2FybmluZ3NSZSA9IHN0YXJ0UmVnZXgoWwogICAgIkJhZCBmb3IgaW4gdmFyaWFibGUgJyguKyknLiIsCiAgICAnTWlzc2luZyAidXNlIHN0cmljdCInCl0pOwp2YXIgZXJyb3JzUmUgPSBzdGFydFJlZ2V4KFsKICAgICJVbmV4cGVjdGVkIiwKICAgICJFeHBlY3RlZCAiLAogICAgIkNvbmZ1c2luZyAocGx1c3xtaW51cykiLAogICAgIlxce2FcXH0gdW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiIsCiAgICAiVW5jbG9zZWQgIiwKICAgICJVbm1hdGNoZWQgIiwKICAgICJVbmJlZ3VuIGNvbW1lbnQiLAogICAgIkJhZCBpbnZvY2F0aW9uIiwKICAgICJNaXNzaW5nIHNwYWNlIGFmdGVyIiwKICAgICJNaXNzaW5nIG9wZXJhdG9yIGF0IgpdKTsKdmFyIGluZm9SZSA9IHN0YXJ0UmVnZXgoWwogICAgIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQiLAogICAgIkJhZCBlc2NhcGVtZW50IG9mIEVPTCIsCiAgICAiVW5leHBlY3RlZCBjb21tYSIsCiAgICAiVW5leHBlY3RlZCBzcGFjZSIsCiAgICAiTWlzc2luZyByYWRpeCBwYXJhbWV0ZXIuIiwKICAgICJBIGxlYWRpbmcgZGVjaW1hbCBwb2ludCBjYW4iLAogICAgIlxcWyd7YX0nXFxdIGlzIGJldHRlciB3cml0dGVuIGluIGRvdCBub3RhdGlvbi4iLAogICAgIid7YX0nIHVzZWQgb3V0IG9mIHNjb3BlIgpdKTsKCnZhciBKYXZhU2NyaXB0V29ya2VyID0gZXhwb3J0cy5KYXZhU2NyaXB0V29ya2VyID0gZnVuY3Rpb24oc2VuZGVyKSB7CiAgICBNaXJyb3IuY2FsbCh0aGlzLCBzZW5kZXIpOwogICAgdGhpcy5zZXRUaW1lb3V0KDUwMCk7CiAgICB0aGlzLnNldE9wdGlvbnMoKTsKfTsKCm9vcC5pbmhlcml0cyhKYXZhU2NyaXB0V29ya2VyLCBNaXJyb3IpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgewogICAgICAgICAgICBlc25leHQ6IHRydWUsCiAgICAgICAgICAgIG1vejogdHJ1ZSwKICAgICAgICAgICAgZGV2ZWw6IHRydWUsCiAgICAgICAgICAgIGJyb3dzZXI6IHRydWUsCiAgICAgICAgICAgIG5vZGU6IHRydWUsCiAgICAgICAgICAgIGxheGNvbW1hOiB0cnVlLAogICAgICAgICAgICBsYXhicmVhazogdHJ1ZSwKICAgICAgICAgICAgbGFzdHNlbWljOiB0cnVlLAogICAgICAgICAgICBvbmV2YXI6IGZhbHNlLAogICAgICAgICAgICBwYXNzZmFpbDogZmFsc2UsCiAgICAgICAgICAgIG1heGVycjogMTAwLAogICAgICAgICAgICBleHByOiB0cnVlLAogICAgICAgICAgICBtdWx0aXN0cjogdHJ1ZSwKICAgICAgICAgICAgZ2xvYmFsc3RyaWN0OiB0cnVlCiAgICAgICAgfTsKICAgICAgICB0aGlzLmRvYy5nZXRWYWx1ZSgpICYmIHRoaXMuZGVmZXJyZWRVcGRhdGUuc2NoZWR1bGUoMTAwKTsKICAgIH07CgogICAgdGhpcy5jaGFuZ2VPcHRpb25zID0gZnVuY3Rpb24obmV3T3B0aW9ucykgewogICAgICAgIG9vcC5taXhpbih0aGlzLm9wdGlvbnMsIG5ld09wdGlvbnMpOwogICAgICAgIHRoaXMuZG9jLmdldFZhbHVlKCkgJiYgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSgxMDApOwogICAgfTsKCiAgICB0aGlzLmlzVmFsaWRKUyA9IGZ1bmN0aW9uKHN0cikgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGV2YWwoInRocm93IDA7IiArIHN0cik7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIGlmIChlID09PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZG9jLmdldFZhbHVlKCk7CiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eIyEuKlxuLywgIlxuIik7CiAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VuZGVyLmVtaXQoImFubm90YXRlIiwgW10pOwoKICAgICAgICB2YXIgZXJyb3JzID0gW107CiAgICAgICAgdmFyIG1heEVycm9yTGV2ZWwgPSB0aGlzLmlzVmFsaWRKUyh2YWx1ZSkgPyAid2FybmluZyIgOiAiZXJyb3IiOwogICAgICAgIGxpbnQodmFsdWUsIHRoaXMub3B0aW9ucywgdGhpcy5vcHRpb25zLmdsb2JhbHMpOwogICAgICAgIHZhciByZXN1bHRzID0gbGludC5lcnJvcnM7CgogICAgICAgIHZhciBlcnJvckFkZGVkID0gZmFsc2U7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBlcnJvciA9IHJlc3VsdHNbaV07CiAgICAgICAgICAgIGlmICghZXJyb3IpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgdmFyIHJhdyA9IGVycm9yLnJhdzsKICAgICAgICAgICAgdmFyIHR5cGUgPSAid2FybmluZyI7CgogICAgICAgICAgICBpZiAocmF3ID09ICJNaXNzaW5nIHNlbWljb2xvbi4iKSB7CiAgICAgICAgICAgICAgICB2YXIgc3RyID0gZXJyb3IuZXZpZGVuY2Uuc3Vic3RyKGVycm9yLmNoYXJhY3Rlcik7CiAgICAgICAgICAgICAgICBzdHIgPSBzdHIuY2hhckF0KHN0ci5zZWFyY2goL1xTLykpOwogICAgICAgICAgICAgICAgaWYgKG1heEVycm9yTGV2ZWwgPT0gImVycm9yIiAmJiBzdHIgJiYgL1tcd1xkeyhbJyJdLy50ZXN0KHN0cikpIHsKICAgICAgICAgICAgICAgICAgICBlcnJvci5yZWFzb24gPSAnTWlzc2luZyAiOyIgYmVmb3JlIHN0YXRlbWVudCc7CiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICJlcnJvciI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiaW5mbyI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoZGlzYWJsZWRXYXJuaW5nc1JlLnRlc3QocmF3KSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoaW5mb1JlLnRlc3QocmF3KSkgewogICAgICAgICAgICAgICAgdHlwZSA9ICJpbmZvIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChlcnJvcnNSZS50ZXN0KHJhdykpIHsKICAgICAgICAgICAgICAgIGVycm9yQWRkZWQgID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHR5cGUgPSBtYXhFcnJvckxldmVsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHJhdyA9PSAiJ3thfScgaXMgbm90IGRlZmluZWQuIikgewogICAgICAgICAgICAgICAgdHlwZSA9ICJ3YXJuaW5nIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChyYXcgPT0gIid7YX0nIGlzIGRlZmluZWQgYnV0IG5ldmVyIHVzZWQuIikgewogICAgICAgICAgICAgICAgdHlwZSA9ICJpbmZvIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgcm93OiBlcnJvci5saW5lLTEsCiAgICAgICAgICAgICAgICBjb2x1bW46IGVycm9yLmNoYXJhY3Rlci0xLAogICAgICAgICAgICAgICAgdGV4dDogZXJyb3IucmVhc29uLAogICAgICAgICAgICAgICAgdHlwZTogdHlwZSwKICAgICAgICAgICAgICAgIHJhdzogcmF3CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGVycm9yQWRkZWQpIHsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLCBlcnJvcnMpOwogICAgfTsKCn0pLmNhbGwoSmF2YVNjcmlwdFdvcmtlci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9saWIvZXM1LXNoaW0iLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmZ1bmN0aW9uIEVtcHR5KCkge30KCmlmICghRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQpIHsKICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7IC8vIC5sZW5ndGggaXMgMQogICAgICAgIHZhciB0YXJnZXQgPSB0aGlzOwogICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAiICsgdGFyZ2V0KTsKICAgICAgICB9CiAgICAgICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7IC8vIGZvciBub3JtYWwgY2FsbAogICAgICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHsKCiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICAgIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgdGhhdCwKICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQoKICAgICAgICB9OwogICAgICAgIGlmKHRhcmdldC5wcm90b3R5cGUpIHsKICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTsKICAgICAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7CiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiBib3VuZDsKICAgIH07Cn0KdmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDsKdmFyIHByb3RvdHlwZU9mQXJyYXkgPSBBcnJheS5wcm90b3R5cGU7CnZhciBwcm90b3R5cGVPZk9iamVjdCA9IE9iamVjdC5wcm90b3R5cGU7CnZhciBzbGljZSA9IHByb3RvdHlwZU9mQXJyYXkuc2xpY2U7CnZhciBfdG9TdHJpbmcgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QudG9TdHJpbmcpOwp2YXIgb3ducyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSk7CnZhciBkZWZpbmVHZXR0ZXI7CnZhciBkZWZpbmVTZXR0ZXI7CnZhciBsb29rdXBHZXR0ZXI7CnZhciBsb29rdXBTZXR0ZXI7CnZhciBzdXBwb3J0c0FjY2Vzc29yczsKaWYgKChzdXBwb3J0c0FjY2Vzc29ycyA9IG93bnMocHJvdG90eXBlT2ZPYmplY3QsICJfX2RlZmluZUdldHRlcl9fIikpKSB7CiAgICBkZWZpbmVHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVHZXR0ZXJfXyk7CiAgICBkZWZpbmVTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19kZWZpbmVTZXR0ZXJfXyk7CiAgICBsb29rdXBHZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBHZXR0ZXJfXyk7CiAgICBsb29rdXBTZXR0ZXIgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuX19sb29rdXBTZXR0ZXJfXyk7Cn0KaWYgKFsxLDJdLnNwbGljZSgwKS5sZW5ndGggIT0gMikgewogICAgaWYoZnVuY3Rpb24oKSB7IC8vIHRlc3QgSUUgPCA5IHRvIHNwbGljZSBidWcgLSBzZWUgaXNzdWUgIzEzOAogICAgICAgIGZ1bmN0aW9uIG1ha2VBcnJheShsKSB7CiAgICAgICAgICAgIHZhciBhID0gbmV3IEFycmF5KGwrMik7CiAgICAgICAgICAgIGFbMF0gPSBhWzFdID0gMDsKICAgICAgICAgICAgcmV0dXJuIGE7CiAgICAgICAgfQogICAgICAgIHZhciBhcnJheSA9IFtdLCBsZW5ndGhCZWZvcmU7CiAgICAgICAgCiAgICAgICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjApKTsKICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksIG1ha2VBcnJheSgyNikpOwoKICAgICAgICBsZW5ndGhCZWZvcmUgPSBhcnJheS5sZW5ndGg7IC8vNDYKICAgICAgICBhcnJheS5zcGxpY2UoNSwgMCwgIlhYWCIpOyAvLyBhZGQgb25lIGVsZW1lbnQKCiAgICAgICAgbGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgKCiAgICAgICAgaWYgKGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOy8vIGhhcyByaWdodCBzcGxpY2UgaW1wbGVtZW50YXRpb24gd2l0aG91dCBidWdzCiAgICAgICAgfQogICAgfSgpKSB7Ly9JRSA2LzcKICAgICAgICB2YXIgYXJyYXlfc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTsKICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGRlbGV0ZUNvdW50KSB7CiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5X3NwbGljZS5hcHBseSh0aGlzLCBbCiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPT09IHZvaWQgMCA/IDAgOiBzdGFydCwKICAgICAgICAgICAgICAgICAgICBkZWxldGVDb3VudCA9PT0gdm9pZCAwID8gKHRoaXMubGVuZ3RoIC0gc3RhcnQpIDogZGVsZXRlQ291bnQKICAgICAgICAgICAgICAgIF0uY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSkpCiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSBlbHNlIHsvL0lFOAogICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihwb3MsIHJlbW92ZUNvdW50KXsKICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgICBpZiAocG9zID4gMCkgewogICAgICAgICAgICAgICAgaWYgKHBvcyA+IGxlbmd0aCkKICAgICAgICAgICAgICAgICAgICBwb3MgPSBsZW5ndGg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zID09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgcG9zID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPCAwKSB7CiAgICAgICAgICAgICAgICBwb3MgPSBNYXRoLm1heChsZW5ndGggKyBwb3MsIDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIShwb3MrcmVtb3ZlQ291bnQgPCBsZW5ndGgpKQogICAgICAgICAgICAgICAgcmVtb3ZlQ291bnQgPSBsZW5ndGggLSBwb3M7CgogICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IHRoaXMuc2xpY2UocG9zLCBwb3MrcmVtb3ZlQ291bnQpOwogICAgICAgICAgICB2YXIgaW5zZXJ0ID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpOwogICAgICAgICAgICB2YXIgYWRkID0gaW5zZXJ0Lmxlbmd0aDsgICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHBvcyA9PT0gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoYWRkKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlID0gTWF0aC5taW4ocmVtb3ZlQ291bnQsIGxlbmd0aCAtIHBvcyk7CiAgICAgICAgICAgICAgICB2YXIgdGFpbE9sZFBvcyA9IHBvcyArIHJlbW92ZTsKICAgICAgICAgICAgICAgIHZhciB0YWlsTmV3UG9zID0gdGFpbE9sZFBvcyArIGFkZCAtIHJlbW92ZTsKICAgICAgICAgICAgICAgIHZhciB0YWlsQ291bnQgPSBsZW5ndGggLSB0YWlsT2xkUG9zOwogICAgICAgICAgICAgICAgdmFyIGxlbmd0aEFmdGVyUmVtb3ZlID0gbGVuZ3RoIC0gcmVtb3ZlOwoKICAgICAgICAgICAgICAgIGlmICh0YWlsTmV3UG9zIDwgdGFpbE9sZFBvcykgeyAvLyBjYXNlIEEKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhaWxDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhaWxOZXdQb3MgPiB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQgogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHRhaWxDb3VudDsgaS0tOyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gLy8gZWxzZSwgYWRkID09IHJlbW92ZSAobm90aGluZyB0byBkbykKCiAgICAgICAgICAgICAgICBpZiAoYWRkICYmIHBvcyA9PT0gbGVuZ3RoQWZ0ZXJSZW1vdmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlOyAvLyB0cnVuY2F0ZSBhcnJheQogICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aEFmdGVyUmVtb3ZlICsgYWRkOyAvLyByZXNlcnZlcyBzcGFjZQogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhZGQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3BvcytpXSA9IGluc2VydFtpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlbW92ZWQ7CiAgICAgICAgfTsKICAgIH0KfQppZiAoIUFycmF5LmlzQXJyYXkpIHsKICAgIEFycmF5LmlzQXJyYXkgPSBmdW5jdGlvbiBpc0FycmF5KG9iaikgewogICAgICAgIHJldHVybiBfdG9TdHJpbmcob2JqKSA9PSAiW29iamVjdCBBcnJheV0iOwogICAgfTsKfQp2YXIgYm94ZWRTdHJpbmcgPSBPYmplY3QoImEiKSwKICAgIHNwbGl0U3RyaW5nID0gYm94ZWRTdHJpbmdbMF0gIT0gImEiIHx8ICEoMCBpbiBib3hlZFN0cmluZyk7CgppZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7CiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZnVuIC8qLCB0aGlzcCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV0sCiAgICAgICAgICAgIGkgPSAtMSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKICAgICAgICB9CgogICAgICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLm1hcCkgewogICAgQXJyYXkucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIG1hcChmdW4gLyosIHRoaXNwKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKSwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpCiAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuZmlsdGVyKSB7CiAgICBBcnJheS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHJlc3VsdCA9IFtdLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltpXTsKICAgICAgICAgICAgICAgIGlmIChmdW4uY2FsbCh0aGlzcCwgdmFsdWUsIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuZXZlcnkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5ldmVyeSA9IGZ1bmN0aW9uIGV2ZXJ5KGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgIWZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLnNvbWUpIHsKICAgIEFycmF5LnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gc29tZShmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZSkgewogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZSA9IGZ1bmN0aW9uIHJlZHVjZShmdW4gLyosIGluaXRpYWwqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHZhciByZXN1bHQ7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaSsrXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICAgICB9CgogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KSB7CiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQgPSBmdW5jdGlvbiByZWR1Y2VSaWdodChmdW4gLyosIGluaXRpYWwqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KICAgICAgICBpZiAoIWxlbmd0aCAmJiBhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgcmVzdWx0LCBpID0gbGVuZ3RoIC0gMTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpLS1dOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKC0taSA8IDApIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBkbyB7CiAgICAgICAgICAgIGlmIChpIGluIHRoaXMpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoaS0tKTsKCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuaW5kZXhPZiB8fCAoWzAsIDFdLmluZGV4T2YoMSwgMikgIT0gLTEpKSB7CiAgICBBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8gKSB7CiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwoKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGkgPSB0b0ludGVnZXIoYXJndW1lbnRzWzFdKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBNYXRoLm1heCgwLCBsZW5ndGggKyBpKTsKICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc2VsZltpXSA9PT0gc291Z2h0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mIHx8IChbMCwgMV0ubGFzdEluZGV4T2YoMCwgLTMpICE9IC0xKSkgewogICAgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc291Z2h0IC8qLCBmcm9tSW5kZXggKi8pIHsKICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CgogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSBsZW5ndGggLSAxOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpID0gTWF0aC5taW4oaSwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpOwogICAgICAgIH0KICAgICAgICBpID0gaSA+PSAwID8gaSA6IGxlbmd0aCAtIE1hdGguYWJzKGkpOwogICAgICAgIGZvciAoOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNvdWdodCA9PT0gc2VsZltpXSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRQcm90b3R5cGVPZikgewogICAgT2JqZWN0LmdldFByb3RvdHlwZU9mID0gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdC5fX3Byb3RvX18gfHwgKAogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IgPwogICAgICAgICAgICBvYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlIDoKICAgICAgICAgICAgcHJvdG90eXBlT2ZPYmplY3QKICAgICAgICApOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpIHsKICAgIHZhciBFUlJfTk9OX09CSkVDVCA9ICJPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIGNhbGxlZCBvbiBhICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1vYmplY3Q6ICI7CiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcGVydHkpIHsKICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1QgKyBvYmplY3QpOwogICAgICAgIGlmICghb3ducyhvYmplY3QsIHByb3BlcnR5KSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB2YXIgZGVzY3JpcHRvciwgZ2V0dGVyLCBzZXR0ZXI7CiAgICAgICAgZGVzY3JpcHRvciA9ICB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9OwogICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycykgewogICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwoKICAgICAgICAgICAgdmFyIGdldHRlciA9IGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KTsKICAgICAgICAgICAgdmFyIHNldHRlciA9IGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KTsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKCiAgICAgICAgICAgIGlmIChnZXR0ZXIgfHwgc2V0dGVyKSB7CiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyKSBkZXNjcmlwdG9yLmdldCA9IGdldHRlcjsKICAgICAgICAgICAgICAgIGlmIChzZXR0ZXIpIGRlc2NyaXB0b3Iuc2V0ID0gc2V0dGVyOwogICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGVzY3JpcHRvci52YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV07CiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KTsKICAgIH07Cn0KaWYgKCFPYmplY3QuY3JlYXRlKSB7CiAgICB2YXIgY3JlYXRlRW1wdHk7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5fX3Byb3RvX18gPT09IG51bGwpIHsKICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHsgIl9fcHJvdG9fXyI6IG51bGwgfTsKICAgICAgICB9OwogICAgfSBlbHNlIHsKICAgICAgICBjcmVhdGVFbXB0eSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGVtcHR5ID0ge307CiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gZW1wdHkpCiAgICAgICAgICAgICAgICBlbXB0eVtpXSA9IG51bGw7CiAgICAgICAgICAgIGVtcHR5LmNvbnN0cnVjdG9yID0KICAgICAgICAgICAgZW1wdHkuaGFzT3duUHJvcGVydHkgPQogICAgICAgICAgICBlbXB0eS5wcm9wZXJ0eUlzRW51bWVyYWJsZSA9CiAgICAgICAgICAgIGVtcHR5LmlzUHJvdG90eXBlT2YgPQogICAgICAgICAgICBlbXB0eS50b0xvY2FsZVN0cmluZyA9CiAgICAgICAgICAgIGVtcHR5LnRvU3RyaW5nID0KICAgICAgICAgICAgZW1wdHkudmFsdWVPZiA9CiAgICAgICAgICAgIGVtcHR5Ll9fcHJvdG9fXyA9IG51bGw7CiAgICAgICAgICAgIHJldHVybiBlbXB0eTsKICAgICAgICB9CiAgICB9CgogICAgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShwcm90b3R5cGUsIHByb3BlcnRpZXMpIHsKICAgICAgICB2YXIgb2JqZWN0OwogICAgICAgIGlmIChwcm90b3R5cGUgPT09IG51bGwpIHsKICAgICAgICAgICAgb2JqZWN0ID0gY3JlYXRlRW1wdHkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSAhPSAib2JqZWN0IikKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInR5cGVvZiBwcm90b3R5cGVbIisodHlwZW9mIHByb3RvdHlwZSkrIl0gIT0gJ29iamVjdCciKTsKICAgICAgICAgICAgdmFyIFR5cGUgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgICAgVHlwZS5wcm90b3R5cGUgPSBwcm90b3R5cGU7CiAgICAgICAgICAgIG9iamVjdCA9IG5ldyBUeXBlKCk7CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgfQogICAgICAgIGlmIChwcm9wZXJ0aWVzICE9PSB2b2lkIDApCiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcyk7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KCmZ1bmN0aW9uIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsob2JqZWN0KSB7CiAgICB0cnkgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICJzZW50aW5lbCIsIHt9KTsKICAgICAgICByZXR1cm4gInNlbnRpbmVsIiBpbiBvYmplY3Q7CiAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKICAgIH0KfQppZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0ID0gZG9lc0RlZmluZVByb3BlcnR5V29yayh7fSk7CiAgICB2YXIgZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tID0gdHlwZW9mIGRvY3VtZW50ID09ICJ1bmRlZmluZWQiIHx8CiAgICAgICAgZG9lc0RlZmluZVByb3BlcnR5V29yayhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CiAgICBpZiAoIWRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCB8fCAhZGVmaW5lUHJvcGVydHlXb3Jrc09uRG9tKSB7CiAgICAgICAgdmFyIGRlZmluZVByb3BlcnR5RmFsbGJhY2sgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICB9Cn0KCmlmICghT2JqZWN0LmRlZmluZVByb3BlcnR5IHx8IGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKICAgIHZhciBFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SID0gIlByb3BlcnR5IGRlc2NyaXB0aW9uIG11c3QgYmUgYW4gb2JqZWN0OiAiOwogICAgdmFyIEVSUl9OT05fT0JKRUNUX1RBUkdFVCA9ICJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3Q6ICIKICAgIHZhciBFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQgPSAiZ2V0dGVycyAmIHNldHRlcnMgY2FuIG5vdCBiZSBkZWZpbmVkICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiB0aGlzIGphdmFzY3JpcHQgZW5naW5lIjsKCiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKSB7CiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX1RBUkdFVCArIG9iamVjdCk7CiAgICAgICAgaWYgKCh0eXBlb2YgZGVzY3JpcHRvciAhPSAib2JqZWN0IiAmJiB0eXBlb2YgZGVzY3JpcHRvciAhPSAiZnVuY3Rpb24iKSB8fCBkZXNjcmlwdG9yID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgKyBkZXNjcmlwdG9yKTsKICAgICAgICBpZiAoZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5RmFsbGJhY2suY2FsbChPYmplY3QsIG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpOwogICAgICAgICAgICB9IGNhdGNoIChleGNlcHRpb24pIHsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAidmFsdWUiKSkgewoKICAgICAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzICYmIChsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgcHJvdG90eXBlID0gb2JqZWN0Ll9fcHJvdG9fXzsKICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcGVydHldOwogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5XSA9IGRlc2NyaXB0b3IudmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIXN1cHBvcnRzQWNjZXNzb3JzKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfQUNDRVNTT1JTX05PVF9TVVBQT1JURUQpOwogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAiZ2V0IikpCiAgICAgICAgICAgICAgICBkZWZpbmVHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5nZXQpOwogICAgICAgICAgICBpZiAob3ducyhkZXNjcmlwdG9yLCAic2V0IikpCiAgICAgICAgICAgICAgICBkZWZpbmVTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvci5zZXQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydGllcykgewogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKG9iamVjdCwgcHJvcGVydGllcykgewogICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHsKICAgICAgICAgICAgaWYgKG93bnMocHJvcGVydGllcywgcHJvcGVydHkpKQogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIHByb3BlcnRpZXNbcHJvcGVydHldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3Quc2VhbCkgewogICAgT2JqZWN0LnNlYWwgPSBmdW5jdGlvbiBzZWFsKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmZyZWV6ZSkgewogICAgT2JqZWN0LmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQp0cnkgewogICAgT2JqZWN0LmZyZWV6ZShmdW5jdGlvbiAoKSB7fSk7Cn0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgT2JqZWN0LmZyZWV6ZSA9IChmdW5jdGlvbiBmcmVlemUoZnJlZXplT2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShvYmplY3QpIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmplY3QgPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBmcmVlemVPYmplY3Qob2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9KShPYmplY3QuZnJlZXplKTsKfQppZiAoIU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucykgewogICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zID0gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuaXNTZWFsZWQpIHsKICAgIE9iamVjdC5pc1NlYWxlZCA9IGZ1bmN0aW9uIGlzU2VhbGVkKG9iamVjdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFPYmplY3QuaXNGcm96ZW4pIHsKICAgIE9iamVjdC5pc0Zyb3plbiA9IGZ1bmN0aW9uIGlzRnJvemVuKG9iamVjdCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFPYmplY3QuaXNFeHRlbnNpYmxlKSB7CiAgICBPYmplY3QuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKG9iamVjdCkgewogICAgICAgIGlmIChPYmplY3Qob2JqZWN0KSA9PT0gb2JqZWN0KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCiAgICAgICAgfQogICAgICAgIHZhciBuYW1lID0gJyc7CiAgICAgICAgd2hpbGUgKG93bnMob2JqZWN0LCBuYW1lKSkgewogICAgICAgICAgICBuYW1lICs9ICc/JzsKICAgICAgICB9CiAgICAgICAgb2JqZWN0W25hbWVdID0gdHJ1ZTsKICAgICAgICB2YXIgcmV0dXJuVmFsdWUgPSBvd25zKG9iamVjdCwgbmFtZSk7CiAgICAgICAgZGVsZXRlIG9iamVjdFtuYW1lXTsKICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAgICB9Owp9CmlmICghT2JqZWN0LmtleXMpIHsKICAgIHZhciBoYXNEb250RW51bUJ1ZyA9IHRydWUsCiAgICAgICAgZG9udEVudW1zID0gWwogICAgICAgICAgICAidG9TdHJpbmciLAogICAgICAgICAgICAidG9Mb2NhbGVTdHJpbmciLAogICAgICAgICAgICAidmFsdWVPZiIsCiAgICAgICAgICAgICJoYXNPd25Qcm9wZXJ0eSIsCiAgICAgICAgICAgICJpc1Byb3RvdHlwZU9mIiwKICAgICAgICAgICAgInByb3BlcnR5SXNFbnVtZXJhYmxlIiwKICAgICAgICAgICAgImNvbnN0cnVjdG9yIgogICAgICAgIF0sCiAgICAgICAgZG9udEVudW1zTGVuZ3RoID0gZG9udEVudW1zLmxlbmd0aDsKCiAgICBmb3IgKHZhciBrZXkgaW4geyJ0b1N0cmluZyI6IG51bGx9KSB7CiAgICAgICAgaGFzRG9udEVudW1CdWcgPSBmYWxzZTsKICAgIH0KCiAgICBPYmplY3Qua2V5cyA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7CgogICAgICAgIGlmICgKICAgICAgICAgICAgKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fAogICAgICAgICAgICBvYmplY3QgPT09IG51bGwKICAgICAgICApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGtleXMgPSBbXTsKICAgICAgICBmb3IgKHZhciBuYW1lIGluIG9iamVjdCkgewogICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIG5hbWUpKSB7CiAgICAgICAgICAgICAgICBrZXlzLnB1c2gobmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChoYXNEb250RW51bUJ1ZykgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkb250RW51bXNMZW5ndGg7IGkgPCBpaTsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgZG9udEVudW0gPSBkb250RW51bXNbaV07CiAgICAgICAgICAgICAgICBpZiAob3ducyhvYmplY3QsIGRvbnRFbnVtKSkgewogICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChkb250RW51bSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGtleXM7CiAgICB9OwoKfQppZiAoIURhdGUubm93KSB7CiAgICBEYXRlLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICB9Owp9CnZhciB3cyA9ICJceDA5XHgwQVx4MEJceDBDXHgwRFx4MjBceEEwXHUxNjgwXHUyMDAwXHUyMDAxXHUyMDAyXHUyMDAzIiArCiAgICAiXHUyMDA0XHUyMDA1XHUyMDA2XHUyMDA3XHUyMDA4XHUyMDA5XHUyMDBBXHUyMDJGXHUyMDVGXHUzMDAwXHUyMDI4IiArCiAgICAiXHUyMDI5XHVGRUZGIjsKaWYgKCFTdHJpbmcucHJvdG90eXBlLnRyaW0pIHsKICAgIHdzID0gIlsiICsgd3MgKyAiXSI7CiAgICB2YXIgdHJpbUJlZ2luUmVnZXhwID0gbmV3IFJlZ0V4cCgiXiIgKyB3cyArIHdzICsgIioiKSwKICAgICAgICB0cmltRW5kUmVnZXhwID0gbmV3IFJlZ0V4cCh3cyArIHdzICsgIiokIik7CiAgICBTdHJpbmcucHJvdG90eXBlLnRyaW0gPSBmdW5jdGlvbiB0cmltKCkgewogICAgICAgIHJldHVybiBTdHJpbmcodGhpcykucmVwbGFjZSh0cmltQmVnaW5SZWdleHAsICIiKS5yZXBsYWNlKHRyaW1FbmRSZWdleHAsICIiKTsKICAgIH07Cn0KCmZ1bmN0aW9uIHRvSW50ZWdlcihuKSB7CiAgICBuID0gK247CiAgICBpZiAobiAhPT0gbikgeyAvLyBpc05hTgogICAgICAgIG4gPSAwOwogICAgfSBlbHNlIGlmIChuICE9PSAwICYmIG4gIT09ICgxLzApICYmIG4gIT09IC0oMS8wKSkgewogICAgICAgIG4gPSAobiA+IDAgfHwgLTEpICogTWF0aC5mbG9vcihNYXRoLmFicyhuKSk7CiAgICB9CiAgICByZXR1cm4gbjsKfQoKZnVuY3Rpb24gaXNQcmltaXRpdmUoaW5wdXQpIHsKICAgIHZhciB0eXBlID0gdHlwZW9mIGlucHV0OwogICAgcmV0dXJuICgKICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fAogICAgICAgIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8CiAgICAgICAgdHlwZSA9PT0gImJvb2xlYW4iIHx8CiAgICAgICAgdHlwZSA9PT0gIm51bWJlciIgfHwKICAgICAgICB0eXBlID09PSAic3RyaW5nIgogICAgKTsKfQoKZnVuY3Rpb24gdG9QcmltaXRpdmUoaW5wdXQpIHsKICAgIHZhciB2YWwsIHZhbHVlT2YsIHRvU3RyaW5nOwogICAgaWYgKGlzUHJpbWl0aXZlKGlucHV0KSkgewogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KICAgIHZhbHVlT2YgPSBpbnB1dC52YWx1ZU9mOwogICAgaWYgKHR5cGVvZiB2YWx1ZU9mID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdmFsID0gdmFsdWVPZi5jYWxsKGlucHV0KTsKICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgIH0KICAgIHRvU3RyaW5nID0gaW5wdXQudG9TdHJpbmc7CiAgICBpZiAodHlwZW9mIHRvU3RyaW5nID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgdmFsID0gdG9TdHJpbmcuY2FsbChpbnB1dCk7CiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAgICB9CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7Cn0KdmFyIHRvT2JqZWN0ID0gZnVuY3Rpb24gKG8pIHsKICAgIGlmIChvID09IG51bGwpIHsgLy8gdGhpcyBtYXRjaGVzIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkCiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FuJ3QgY29udmVydCAiK28rIiB0byBvYmplY3QiKTsKICAgIH0KICAgIHJldHVybiBPYmplY3Qobyk7Cn07Cgp9KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-json.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2pzb24vanNvbl9wYXJzZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgogICAgdmFyIGF0LCAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlcgogICAgICAgIGNoLCAgICAgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyCiAgICAgICAgZXNjYXBlZSA9IHsKICAgICAgICAgICAgJyInOiAgJyInLAogICAgICAgICAgICAnXFwnOiAnXFwnLAogICAgICAgICAgICAnLyc6ICAnLycsCiAgICAgICAgICAgIGI6ICAgICdcYicsCiAgICAgICAgICAgIGY6ICAgICdcZicsCiAgICAgICAgICAgIG46ICAgICdcbicsCiAgICAgICAgICAgIHI6ICAgICdccicsCiAgICAgICAgICAgIHQ6ICAgICdcdCcKICAgICAgICB9LAogICAgICAgIHRleHQsCgogICAgICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHsKCiAgICAgICAgICAgIHRocm93IHsKICAgICAgICAgICAgICAgIG5hbWU6ICAgICdTeW50YXhFcnJvcicsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtLAogICAgICAgICAgICAgICAgYXQ6ICAgICAgYXQsCiAgICAgICAgICAgICAgICB0ZXh0OiAgICB0ZXh0CiAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7CgogICAgICAgICAgICBpZiAoYyAmJiBjICE9PSBjaCkgewogICAgICAgICAgICAgICAgZXJyb3IoIkV4cGVjdGVkICciICsgYyArICInIGluc3RlYWQgb2YgJyIgKyBjaCArICInIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNoID0gdGV4dC5jaGFyQXQoYXQpOwogICAgICAgICAgICBhdCArPSAxOwogICAgICAgICAgICByZXR1cm4gY2g7CiAgICAgICAgfSwKCiAgICAgICAgbnVtYmVyID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIG51bWJlciwKICAgICAgICAgICAgICAgIHN0cmluZyA9ICcnOwoKICAgICAgICAgICAgaWYgKGNoID09PSAnLScpIHsKICAgICAgICAgICAgICAgIHN0cmluZyA9ICctJzsKICAgICAgICAgICAgICAgIG5leHQoJy0nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewogICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaCA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gJy4nOwogICAgICAgICAgICAgICAgd2hpbGUgKG5leHQoKSAmJiBjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsKICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDsKICAgICAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHsKICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CiAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKICAgICAgICAgICAgICAgICAgICBzdHJpbmcgKz0gY2g7CiAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIG51bWJlciA9ICtzdHJpbmc7CiAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7CiAgICAgICAgICAgICAgICBlcnJvcigiQmFkIG51bWJlciIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHZhciBoZXgsCiAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgICAgc3RyaW5nID0gJycsCiAgICAgICAgICAgICAgICB1ZmZmZjsKCiAgICAgICAgICAgIGlmIChjaCA9PT0gJyInKSB7CiAgICAgICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnIicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICdcXCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiXG4iIHx8IGNoID09ICJcciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvcigiQmFkIHN0cmluZyIpOwogICAgICAgIH0sCgogICAgICAgIHdoaXRlID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykgewogICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgd29yZCA9IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAgICBuZXh0KCd0Jyk7CiAgICAgICAgICAgICAgICBuZXh0KCdyJyk7CiAgICAgICAgICAgICAgICBuZXh0KCd1Jyk7CiAgICAgICAgICAgICAgICBuZXh0KCdlJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgY2FzZSAnZic6CiAgICAgICAgICAgICAgICBuZXh0KCdmJyk7CiAgICAgICAgICAgICAgICBuZXh0KCdhJyk7CiAgICAgICAgICAgICAgICBuZXh0KCdsJyk7CiAgICAgICAgICAgICAgICBuZXh0KCdzJyk7CiAgICAgICAgICAgICAgICBuZXh0KCdlJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgbmV4dCgnbicpOwogICAgICAgICAgICAgICAgbmV4dCgndScpOwogICAgICAgICAgICAgICAgbmV4dCgnbCcpOwogICAgICAgICAgICAgICAgbmV4dCgnbCcpOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3IoIlVuZXhwZWN0ZWQgJyIgKyBjaCArICInIik7CiAgICAgICAgfSwKCiAgICAgICAgdmFsdWUsICAvLyBQbGFjZSBob2xkZXIgZm9yIHRoZSB2YWx1ZSBmdW5jdGlvbi4KCiAgICAgICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTsKCiAgICAgICAgICAgIGlmIChjaCA9PT0gJ1snKSB7CiAgICAgICAgICAgICAgICBuZXh0KCdbJyk7CiAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKICAgICAgICAgICAgICAgICAgICBuZXh0KCddJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoY2gpIHsKICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgIHdoaXRlKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG5leHQoJywnKTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVycm9yKCJCYWQgYXJyYXkiKTsKICAgICAgICB9LAoKICAgICAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICB2YXIga2V5LAogICAgICAgICAgICAgICAgb2JqZWN0ID0ge307CgogICAgICAgICAgICBpZiAoY2ggPT09ICd7JykgewogICAgICAgICAgICAgICAgbmV4dCgneycpOwogICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gJ30nKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7ICAgLy8gZW1wdHkgb2JqZWN0CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB3aGlsZSAoY2gpIHsKICAgICAgICAgICAgICAgICAgICBrZXkgPSBzdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICB3aGl0ZSgpOwogICAgICAgICAgICAgICAgICAgIG5leHQoJzonKTsKICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCdEdXBsaWNhdGUga2V5ICInICsga2V5ICsgJyInKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgIHdoaXRlKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBuZXh0KCcsJyk7CiAgICAgICAgICAgICAgICAgICAgd2hpdGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlcnJvcigiQmFkIG9iamVjdCIpOwogICAgICAgIH07CgogICAgdmFsdWUgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgIHdoaXRlKCk7CiAgICAgICAgc3dpdGNoIChjaCkgewogICAgICAgIGNhc2UgJ3snOgogICAgICAgICAgICByZXR1cm4gb2JqZWN0KCk7CiAgICAgICAgY2FzZSAnWyc6CiAgICAgICAgICAgIHJldHVybiBhcnJheSgpOwogICAgICAgIGNhc2UgJyInOgogICAgICAgICAgICByZXR1cm4gc3RyaW5nKCk7CiAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgIHJldHVybiBudW1iZXIoKTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpOwogICAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UsIHJldml2ZXIpIHsKICAgICAgICB2YXIgcmVzdWx0OwoKICAgICAgICB0ZXh0ID0gc291cmNlOwogICAgICAgIGF0ID0gMDsKICAgICAgICBjaCA9ICcgJzsKICAgICAgICByZXN1bHQgPSB2YWx1ZSgpOwogICAgICAgIHdoaXRlKCk7CiAgICAgICAgaWYgKGNoKSB7CiAgICAgICAgICAgIGVycm9yKCJTeW50YXggZXJyb3IiKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uIHdhbGsoaG9sZGVyLCBrZXkpIHsKICAgICAgICAgICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tleV07CiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7CiAgICAgICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2OwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTsKICAgICAgICB9KHsnJzogcmVzdWx0fSwgJycpIDogcmVzdWx0OwogICAgfTsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2pzb25fd29ya2VyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBNaXJyb3IgPSByZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yOwp2YXIgcGFyc2UgPSByZXF1aXJlKCIuL2pzb24vanNvbl9wYXJzZSIpOwoKdmFyIEpzb25Xb3JrZXIgPSBleHBvcnRzLkpzb25Xb3JrZXIgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIE1pcnJvci5jYWxsKHRoaXMsIHNlbmRlcik7CiAgICB0aGlzLnNldFRpbWVvdXQoMjAwKTsKfTsKCm9vcC5pbmhlcml0cyhKc29uV29ya2VyLCBNaXJyb3IpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRvYy5nZXRWYWx1ZSgpOwogICAgICAgIHZhciBlcnJvcnMgPSBbXTsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICAgICBwYXJzZSh2YWx1ZSk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5kb2MuaW5kZXhUb1Bvc2l0aW9uKGUuYXQtMSk7CiAgICAgICAgICAgIGVycm9ycy5wdXNoKHsKICAgICAgICAgICAgICAgIHJvdzogcG9zLnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9zLmNvbHVtbiwKICAgICAgICAgICAgICAgIHRleHQ6IGUubWVzc2FnZSwKICAgICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2VuZGVyLmVtaXQoImFubm90YXRlIiwgZXJyb3JzKTsKICAgIH07Cgp9KS5jYWxsKEpzb25Xb3JrZXIucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpmdW5jdGlvbiBFbXB0eSgpIHt9CgppZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7CiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiArIHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICAgIHRoYXQsCiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7CiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CiAgICAgICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpOwogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYm91bmQ7CiAgICB9Owp9CnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7CnZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlOwp2YXIgcHJvdG90eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOwp2YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKdmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOwp2YXIgZGVmaW5lR2V0dGVyOwp2YXIgZGVmaW5lU2V0dGVyOwp2YXIgbG9va3VwR2V0dGVyOwp2YXIgbG9va3VwU2V0dGVyOwp2YXIgc3VwcG9ydHNBY2Nlc3NvcnM7CmlmICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgewogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOwogICAgZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwogICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOwogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOwp9CmlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKICAgIGlmKGZ1bmN0aW9uKCkgeyAvLyB0ZXN0IElFIDwgOSB0byBzcGxpY2UgYnVnIC0gc2VlIGlzc3VlICMxMzgKICAgICAgICBmdW5jdGlvbiBtYWtlQXJyYXkobCkgewogICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpOwogICAgICAgICAgICBhWzBdID0gYVsxXSA9IDA7CiAgICAgICAgICAgIHJldHVybiBhOwogICAgICAgIH0KICAgICAgICB2YXIgYXJyYXkgPSBbXSwgbGVuZ3RoQmVmb3JlOwogICAgICAgIAogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7CiAgICAgICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjYpKTsKCiAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2CiAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJYWFgiKTsgLy8gYWRkIG9uZSBlbGVtZW50CgogICAgICAgIGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoCgogICAgICAgIGlmIChsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYnVncwogICAgICAgIH0KICAgIH0oKSkgey8vSUUgNi83CiAgICAgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkgewogICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywgWwogICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2b2lkIDAgPyAwIDogc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZvaWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50CiAgICAgICAgICAgICAgICBdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMikpKQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7Ly9JRTgKICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7CiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKICAgICAgICAgICAgICAgIGlmIChwb3MgPiBsZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkgewogICAgICAgICAgICAgICAgcG9zID0gTWF0aC5tYXgobGVuZ3RoICsgcG9zLCAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEocG9zK3JlbW92ZUNvdW50IDwgbGVuZ3RoKSkKICAgICAgICAgICAgICAgIHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOwoKICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnNsaWNlKHBvcywgcG9zK3JlbW92ZUNvdW50KTsKICAgICAgICAgICAgdmFyIGluc2VydCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgICAgICAgICAgdmFyIGFkZCA9IGluc2VydC5sZW5ndGg7ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChwb3MgPT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKGFkZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNvdW50LCBsZW5ndGggLSBwb3MpOwogICAgICAgICAgICAgICAgdmFyIHRhaWxPbGRQb3MgPSBwb3MgKyByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbE5ld1BvcyA9IHRhaWxPbGRQb3MgKyBhZGQgLSByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0gdGFpbE9sZFBvczsKICAgICAgICAgICAgICAgIHZhciBsZW5ndGhBZnRlclJlbW92ZSA9IGxlbmd0aCAtIHJlbW92ZTsKCiAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBBCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWlsTmV3UG9zID4gdGFpbE9sZFBvcykgeyAvLyBjYXNlIEIKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291bnQ7IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGFkZCA9PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCgogICAgICAgICAgICAgICAgaWYgKGFkZCAmJiBwb3MgPT09IGxlbmd0aEFmdGVyUmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRkOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twb3MraV0gPSBpbnNlcnRbaV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgICAgIH07CiAgICB9Cn0KaWYgKCFBcnJheS5pc0FycmF5KSB7CiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07Cn0KdmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiksCiAgICBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9ICJhIiB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpOwoKaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgewogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAogICAgICAgICAgICBpID0gLTEsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKICAgIEFycmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikgewogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbaV07CiAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7CiAgICBBcnJheS5wcm90b3R5cGUuc29tZSA9IGZ1bmN0aW9uIHNvbWUoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2krK107CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgewogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaS0tXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGktLSk7CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgewogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7CiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiB8fCAoWzAsIDFdLmxhc3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovKSB7CiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwoKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHsKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yID8KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6CiAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0CiAgICAgICAgKTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOwogICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwgc2V0dGVyOwogICAgICAgIGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMpIHsKICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKCiAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CgogICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikgewogICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVzY3JpcHRvci5nZXQgPSBnZXR0ZXI7CiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsKICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOwogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7CiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CiAgICB9Owp9CmlmICghT2JqZWN0LmNyZWF0ZSkgewogICAgdmFyIGNyZWF0ZUVtcHR5OwogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7ICJfX3Byb3RvX18iOiBudWxsIH07CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlbXB0eSA9IHt9OwogICAgICAgICAgICBmb3IgKHZhciBpIGluIGVtcHR5KQogICAgICAgICAgICAgICAgZW1wdHlbaV0gPSBudWxsOwogICAgICAgICAgICBlbXB0eS5jb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID0KICAgICAgICAgICAgZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGUgPQogICAgICAgICAgICBlbXB0eS5pc1Byb3RvdHlwZU9mID0KICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPQogICAgICAgICAgICBlbXB0eS50b1N0cmluZyA9CiAgICAgICAgICAgIGVtcHR5LnZhbHVlT2YgPQogICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsOwogICAgICAgICAgICByZXR1cm4gZW1wdHk7CiAgICAgICAgfQogICAgfQoKICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgdmFyIG9iamVjdDsKICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7CiAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZUVtcHR5KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7CiAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOwogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOwogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CgpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgewogICAgdHJ5IHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0OwogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICB9Cn0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgewogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkgewogICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgfQp9CgppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQgKyBvYmplY3QpOwogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7CiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInZhbHVlIikpIHsKCiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CiAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInNldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGlmIChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSkKICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LnNlYWwpIHsKICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5mcmVlemUpIHsKICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KdHJ5IHsKICAgIE9iamVjdC5mcmVlemUoZnVuY3Rpb24gKCkge30pOwp9IGNhdGNoIChleGNlcHRpb24pIHsKICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cn0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsKICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzU2VhbGVkKSB7CiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRnJvemVuKSB7CiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgewogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KICAgICAgICB2YXIgbmFtZSA9ICcnOwogICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgbmFtZSArPSAnPyc7CiAgICAgICAgfQogICAgICAgIG9iamVjdFtuYW1lXSA9IHRydWU7CiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOwogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgfTsKfQppZiAoIU9iamVjdC5rZXlzKSB7CiAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAogICAgICAgIGRvbnRFbnVtcyA9IFsKICAgICAgICAgICAgInRvU3RyaW5nIiwKICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKICAgICAgICAgICAgInZhbHVlT2YiLAogICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAogICAgICAgICAgICAiaXNQcm90b3R5cGVPZiIsCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCiAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKICAgICAgICBdLAogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CgogICAgZm9yICh2YXIga2V5IGluIHsidG9TdHJpbmciOiBudWxsfSkgewogICAgICAgIGhhc0RvbnRFbnVtQnVnID0gZmFsc2U7CiAgICB9CgogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewoKICAgICAgICBpZiAoCiAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwKICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsCiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKICAgICAgICB9CgogICAgICAgIHZhciBrZXlzID0gW107CiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgewogICAgICAgICAgICAgICAga2V5cy5wdXNoKG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGRvbnRFbnVtID0gZG9udEVudW1zW2ldOwogICAgICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBkb250RW51bSkpIHsKICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzOwogICAgfTsKCn0KaWYgKCFEYXRlLm5vdykgewogICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgfTsKfQp2YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKwogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKwogICAgIlx1MjAyOVx1RkVGRiI7CmlmICghU3RyaW5nLnByb3RvdHlwZS50cmltKSB7CiAgICB3cyA9ICJbIiArIHdzICsgIl0iOwogICAgdmFyIHRyaW1CZWdpblJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOwogICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CiAgICB9Owp9CgpmdW5jdGlvbiB0b0ludGVnZXIobikgewogICAgbiA9ICtuOwogICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KICAgICAgICBuID0gMDsKICAgIH0gZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpIHsKICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOwogICAgfQogICAgcmV0dXJuIG47Cn0KCmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbnB1dDsKICAgIHJldHVybiAoCiAgICAgICAgaW5wdXQgPT09IG51bGwgfHwKICAgICAgICB0eXBlID09PSAidW5kZWZpbmVkIiB8fAogICAgICAgIHR5cGUgPT09ICJib29sZWFuIiB8fAogICAgICAgIHR5cGUgPT09ICJudW1iZXIiIHx8CiAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKICAgICk7Cn0KCmZ1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZzsKICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKICAgIGlmICh0eXBlb2YgdmFsdWVPZiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHZhbHVlT2YuY2FsbChpbnB1dCk7CiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAgICB9CiAgICB0b1N0cmluZyA9IGlucHV0LnRvU3RyaW5nOwogICAgaWYgKHR5cGVvZiB0b1N0cmluZyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwp9CnZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7CiAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iik7CiAgICB9CiAgICByZXR1cm4gT2JqZWN0KG8pOwp9OwoKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL2x1YS9sdWFwYXJzZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKKGZ1bmN0aW9uIChyb290LCBuYW1lLCBmYWN0b3J5KSB7CiAgIGZhY3RvcnkoZXhwb3J0cykKfSh0aGlzLCAnbHVhcGFyc2UnLCBmdW5jdGlvbiAoZXhwb3J0cykgewogICd1c2Ugc3RyaWN0JzsKCiAgZXhwb3J0cy52ZXJzaW9uID0gJzAuMS40JzsKCiAgdmFyIGlucHV0LCBvcHRpb25zLCBsZW5ndGg7CiAgdmFyIGRlZmF1bHRPcHRpb25zID0gZXhwb3J0cy5kZWZhdWx0T3B0aW9ucyA9IHsKICAgICAgd2FpdDogZmFsc2UKICAgICwgY29tbWVudHM6IHRydWUKICAgICwgc2NvcGU6IGZhbHNlCiAgICAsIGxvY2F0aW9uczogZmFsc2UKICAgICwgcmFuZ2VzOiBmYWxzZQogIH07CgogIHZhciBFT0YgPSAxLCBTdHJpbmdMaXRlcmFsID0gMiwgS2V5d29yZCA9IDQsIElkZW50aWZpZXIgPSA4CiAgICAsIE51bWVyaWNMaXRlcmFsID0gMTYsIFB1bmN0dWF0b3IgPSAzMiwgQm9vbGVhbkxpdGVyYWwgPSA2NAogICAgLCBOaWxMaXRlcmFsID0gMTI4LCBWYXJhcmdMaXRlcmFsID0gMjU2OwoKICBleHBvcnRzLnRva2VuVHlwZXMgPSB7IEVPRjogRU9GLCBTdHJpbmdMaXRlcmFsOiBTdHJpbmdMaXRlcmFsCiAgICAsIEtleXdvcmQ6IEtleXdvcmQsIElkZW50aWZpZXI6IElkZW50aWZpZXIsIE51bWVyaWNMaXRlcmFsOiBOdW1lcmljTGl0ZXJhbAogICAgLCBQdW5jdHVhdG9yOiBQdW5jdHVhdG9yLCBCb29sZWFuTGl0ZXJhbDogQm9vbGVhbkxpdGVyYWwKICAgICwgTmlsTGl0ZXJhbDogTmlsTGl0ZXJhbCwgVmFyYXJnTGl0ZXJhbDogVmFyYXJnTGl0ZXJhbAogIH07CgogIHZhciBlcnJvcnMgPSBleHBvcnRzLmVycm9ycyA9IHsKICAgICAgdW5leHBlY3RlZDogJ1VuZXhwZWN0ZWQgJTEgXCclMlwnIG5lYXIgXCclM1wnJwogICAgLCBleHBlY3RlZDogJ1wnJTFcJyBleHBlY3RlZCBuZWFyIFwnJTJcJycKICAgICwgZXhwZWN0ZWRUb2tlbjogJyUxIGV4cGVjdGVkIG5lYXIgXCclMlwnJwogICAgLCB1bmZpbmlzaGVkU3RyaW5nOiAndW5maW5pc2hlZCBzdHJpbmcgbmVhciBcJyUxXCcnCiAgICAsIG1hbGZvcm1lZE51bWJlcjogJ21hbGZvcm1lZCBudW1iZXIgbmVhciBcJyUxXCcnCiAgfTsKCiAgdmFyIGFzdCA9IGV4cG9ydHMuYXN0ID0gewogICAgICBsYWJlbFN0YXRlbWVudDogZnVuY3Rpb24obGFiZWwpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdMYWJlbFN0YXRlbWVudCcKICAgICAgICAsIGxhYmVsOiBsYWJlbAogICAgICB9OwogICAgfQoKICAgICwgYnJlYWtTdGF0ZW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0JyZWFrU3RhdGVtZW50JwogICAgICB9OwogICAgfQoKICAgICwgZ290b1N0YXRlbWVudDogZnVuY3Rpb24obGFiZWwpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdHb3RvU3RhdGVtZW50JwogICAgICAgICwgbGFiZWw6IGxhYmVsCiAgICAgIH07CiAgICB9CgogICAgLCByZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKGFyZ3MpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdSZXR1cm5TdGF0ZW1lbnQnCiAgICAgICAgLCAnYXJndW1lbnRzJzogYXJncwogICAgICB9OwogICAgfQoKICAgICwgaWZTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGNsYXVzZXMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdJZlN0YXRlbWVudCcKICAgICAgICAsIGNsYXVzZXM6IGNsYXVzZXMKICAgICAgfTsKICAgIH0KICAgICwgaWZDbGF1c2U6IGZ1bmN0aW9uKGNvbmRpdGlvbiwgYm9keSkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0lmQ2xhdXNlJwogICAgICAgICwgY29uZGl0aW9uOiBjb25kaXRpb24KICAgICAgICAsIGJvZHk6IGJvZHkKICAgICAgfTsKICAgIH0KICAgICwgZWxzZWlmQ2xhdXNlOiBmdW5jdGlvbihjb25kaXRpb24sIGJvZHkpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdFbHNlaWZDbGF1c2UnCiAgICAgICAgLCBjb25kaXRpb246IGNvbmRpdGlvbgogICAgICAgICwgYm9keTogYm9keQogICAgICB9OwogICAgfQogICAgLCBlbHNlQ2xhdXNlOiBmdW5jdGlvbihib2R5KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnRWxzZUNsYXVzZScKICAgICAgICAsIGJvZHk6IGJvZHkKICAgICAgfTsKICAgIH0KCiAgICAsIHdoaWxlU3RhdGVtZW50OiBmdW5jdGlvbihjb25kaXRpb24sIGJvZHkpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdXaGlsZVN0YXRlbWVudCcKICAgICAgICAsIGNvbmRpdGlvbjogY29uZGl0aW9uCiAgICAgICAgLCBib2R5OiBib2R5CiAgICAgIH07CiAgICB9CgogICAgLCBkb1N0YXRlbWVudDogZnVuY3Rpb24oYm9keSkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0RvU3RhdGVtZW50JwogICAgICAgICwgYm9keTogYm9keQogICAgICB9OwogICAgfQoKICAgICwgcmVwZWF0U3RhdGVtZW50OiBmdW5jdGlvbihjb25kaXRpb24sIGJvZHkpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdSZXBlYXRTdGF0ZW1lbnQnCiAgICAgICAgLCBjb25kaXRpb246IGNvbmRpdGlvbgogICAgICAgICwgYm9keTogYm9keQogICAgICB9OwogICAgfQoKICAgICwgbG9jYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHZhcmlhYmxlcywgaW5pdCkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0xvY2FsU3RhdGVtZW50JwogICAgICAgICwgdmFyaWFibGVzOiB2YXJpYWJsZXMKICAgICAgICAsIGluaXQ6IGluaXQKICAgICAgfTsKICAgIH0KCiAgICAsIGFzc2lnbm1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHZhcmlhYmxlcywgaW5pdCkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0Fzc2lnbm1lbnRTdGF0ZW1lbnQnCiAgICAgICAgLCB2YXJpYWJsZXM6IHZhcmlhYmxlcwogICAgICAgICwgaW5pdDogaW5pdAogICAgICB9OwogICAgfQoKICAgICwgY2FsbFN0YXRlbWVudDogZnVuY3Rpb24oZXhwcmVzc2lvbikgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0NhbGxTdGF0ZW1lbnQnCiAgICAgICAgLCBleHByZXNzaW9uOiBleHByZXNzaW9uCiAgICAgIH07CiAgICB9CgogICAgLCBmdW5jdGlvblN0YXRlbWVudDogZnVuY3Rpb24oaWRlbnRpZmllciwgcGFyYW1ldGVycywgaXNMb2NhbCwgYm9keSkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nCiAgICAgICAgLCBpZGVudGlmaWVyOiBpZGVudGlmaWVyCiAgICAgICAgLCBpc0xvY2FsOiBpc0xvY2FsCiAgICAgICAgLCBwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJzCiAgICAgICAgLCBib2R5OiBib2R5CiAgICAgIH07CiAgICB9CgogICAgLCBmb3JOdW1lcmljU3RhdGVtZW50OiBmdW5jdGlvbih2YXJpYWJsZSwgc3RhcnQsIGVuZCwgc3RlcCwgYm9keSkgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ0Zvck51bWVyaWNTdGF0ZW1lbnQnCiAgICAgICAgLCB2YXJpYWJsZTogdmFyaWFibGUKICAgICAgICAsIHN0YXJ0OiBzdGFydAogICAgICAgICwgZW5kOiBlbmQKICAgICAgICAsIHN0ZXA6IHN0ZXAKICAgICAgICAsIGJvZHk6IGJvZHkKICAgICAgfTsKICAgIH0KCiAgICAsIGZvckdlbmVyaWNTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHZhcmlhYmxlcywgaXRlcmF0b3JzLCBib2R5KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnRm9yR2VuZXJpY1N0YXRlbWVudCcKICAgICAgICAsIHZhcmlhYmxlczogdmFyaWFibGVzCiAgICAgICAgLCBpdGVyYXRvcnM6IGl0ZXJhdG9ycwogICAgICAgICwgYm9keTogYm9keQogICAgICB9OwogICAgfQoKICAgICwgY2h1bms6IGZ1bmN0aW9uKGJvZHkpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdDaHVuaycKICAgICAgICAsIGJvZHk6IGJvZHkKICAgICAgfTsKICAgIH0KCiAgICAsIGlkZW50aWZpZXI6IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdJZGVudGlmaWVyJwogICAgICAgICwgbmFtZTogbmFtZQogICAgICB9OwogICAgfQoKICAgICwgbGl0ZXJhbDogZnVuY3Rpb24odHlwZSwgdmFsdWUsIHJhdykgewogICAgICB0eXBlID0gKHR5cGUgPT09IFN0cmluZ0xpdGVyYWwpID8gJ1N0cmluZ0xpdGVyYWwnCiAgICAgICAgOiAodHlwZSA9PT0gTnVtZXJpY0xpdGVyYWwpID8gJ051bWVyaWNMaXRlcmFsJwogICAgICAgIDogKHR5cGUgPT09IEJvb2xlYW5MaXRlcmFsKSA/ICdCb29sZWFuTGl0ZXJhbCcKICAgICAgICA6ICh0eXBlID09PSBOaWxMaXRlcmFsKSA/ICdOaWxMaXRlcmFsJwogICAgICAgIDogJ1ZhcmFyZ0xpdGVyYWwnOwoKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAsIHZhbHVlOiB2YWx1ZQogICAgICAgICwgcmF3OiByYXcKICAgICAgfTsKICAgIH0KCiAgICAsIHRhYmxlS2V5OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnVGFibGVLZXknCiAgICAgICAgLCBrZXk6IGtleQogICAgICAgICwgdmFsdWU6IHZhbHVlCiAgICAgIH07CiAgICB9CiAgICAsIHRhYmxlS2V5U3RyaW5nOiBmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnVGFibGVLZXlTdHJpbmcnCiAgICAgICAgLCBrZXk6IGtleQogICAgICAgICwgdmFsdWU6IHZhbHVlCiAgICAgIH07CiAgICB9CiAgICAsIHRhYmxlVmFsdWU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnVGFibGVWYWx1ZScKICAgICAgICAsIHZhbHVlOiB2YWx1ZQogICAgICB9OwogICAgfQoKCiAgICAsIHRhYmxlQ29uc3RydWN0b3JFeHByZXNzaW9uOiBmdW5jdGlvbihmaWVsZHMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdUYWJsZUNvbnN0cnVjdG9yRXhwcmVzc2lvbicKICAgICAgICAsIGZpZWxkczogZmllbGRzCiAgICAgIH07CiAgICB9CiAgICAsIGJpbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgewogICAgICB2YXIgdHlwZSA9ICgnYW5kJyA9PT0gb3BlcmF0b3IgfHwgJ29yJyA9PT0gb3BlcmF0b3IpID8KICAgICAgICAnTG9naWNhbEV4cHJlc3Npb24nIDoKICAgICAgICAnQmluYXJ5RXhwcmVzc2lvbic7CgogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogdHlwZQogICAgICAgICwgb3BlcmF0b3I6IG9wZXJhdG9yCiAgICAgICAgLCBsZWZ0OiBsZWZ0CiAgICAgICAgLCByaWdodDogcmlnaHQKICAgICAgfTsKICAgIH0KICAgICwgdW5hcnlFeHByZXNzaW9uOiBmdW5jdGlvbihvcGVyYXRvciwgYXJndW1lbnQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdVbmFyeUV4cHJlc3Npb24nCiAgICAgICAgLCBvcGVyYXRvcjogb3BlcmF0b3IKICAgICAgICAsIGFyZ3VtZW50OiBhcmd1bWVudAogICAgICB9OwogICAgfQogICAgLCBtZW1iZXJFeHByZXNzaW9uOiBmdW5jdGlvbihiYXNlLCBpbmRleGVyLCBpZGVudGlmaWVyKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnTWVtYmVyRXhwcmVzc2lvbicKICAgICAgICAsIGluZGV4ZXI6IGluZGV4ZXIKICAgICAgICAsIGlkZW50aWZpZXI6IGlkZW50aWZpZXIKICAgICAgICAsIGJhc2U6IGJhc2UKICAgICAgfTsKICAgIH0KCiAgICAsIGluZGV4RXhwcmVzc2lvbjogZnVuY3Rpb24oYmFzZSwgaW5kZXgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdJbmRleEV4cHJlc3Npb24nCiAgICAgICAgLCBiYXNlOiBiYXNlCiAgICAgICAgLCBpbmRleDogaW5kZXgKICAgICAgfTsKICAgIH0KCiAgICAsIGNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbihiYXNlLCBhcmdzKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnQ2FsbEV4cHJlc3Npb24nCiAgICAgICAgLCBiYXNlOiBiYXNlCiAgICAgICAgLCAnYXJndW1lbnRzJzogYXJncwogICAgICB9OwogICAgfQoKICAgICwgdGFibGVDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24oYmFzZSwgYXJncykgewogICAgICByZXR1cm4gewogICAgICAgICAgdHlwZTogJ1RhYmxlQ2FsbEV4cHJlc3Npb24nCiAgICAgICAgLCBiYXNlOiBiYXNlCiAgICAgICAgLCAnYXJndW1lbnRzJzogYXJncwogICAgICB9OwogICAgfQoKICAgICwgc3RyaW5nQ2FsbEV4cHJlc3Npb246IGZ1bmN0aW9uKGJhc2UsIGFyZ3VtZW50KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgICB0eXBlOiAnU3RyaW5nQ2FsbEV4cHJlc3Npb24nCiAgICAgICAgLCBiYXNlOiBiYXNlCiAgICAgICAgLCBhcmd1bWVudDogYXJndW1lbnQKICAgICAgfTsKICAgIH0KCiAgICAsIGNvbW1lbnQ6IGZ1bmN0aW9uKHZhbHVlLCByYXcpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICdDb21tZW50JwogICAgICAgICwgdmFsdWU6IHZhbHVlCiAgICAgICAgLCByYXc6IHJhdwogICAgICB9OwogICAgfQogIH07CgogIGZ1bmN0aW9uIGZpbmlzaE5vZGUobm9kZSkgewogICAgaWYgKHRyYWNrTG9jYXRpb25zKSB7CiAgICAgIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9ucy5wb3AoKTsKICAgICAgbG9jYXRpb24uY29tcGxldGUoKTsKICAgICAgaWYgKG9wdGlvbnMubG9jYXRpb25zKSBub2RlLmxvYyA9IGxvY2F0aW9uLmxvYzsKICAgICAgaWYgKG9wdGlvbnMucmFuZ2VzKSBub2RlLnJhbmdlID0gbG9jYXRpb24ucmFuZ2U7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZQogICAgLCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcKICAgICwgaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIGVsZW1lbnQpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldID09PSBlbGVtZW50KSByZXR1cm4gaTsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9OwoKICBmdW5jdGlvbiBpbmRleE9mT2JqZWN0KGFycmF5LCBwcm9wZXJ0eSwgZWxlbWVudCkgewogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChhcnJheVtpXVtwcm9wZXJ0eV0gPT09IGVsZW1lbnQpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgZnVuY3Rpb24gc3ByaW50Zihmb3JtYXQpIHsKICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoLyUoXGQpL2csIGZ1bmN0aW9uIChtYXRjaCwgaW5kZXgpIHsKICAgICAgcmV0dXJuICcnICsgYXJnc1tpbmRleCAtIDFdIHx8ICcnOwogICAgfSk7CiAgICByZXR1cm4gZm9ybWF0OwogIH0KCiAgZnVuY3Rpb24gZXh0ZW5kKCkgewogICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cykKICAgICAgLCBkZXN0ID0ge30KICAgICAgLCBzcmMsIHByb3A7CgogICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGFyZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgc3JjID0gYXJnc1tpXTsKICAgICAgZm9yIChwcm9wIGluIHNyYykgaWYgKHNyYy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgIGRlc3RbcHJvcF0gPSBzcmNbcHJvcF07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZXN0OwogIH0KCiAgZnVuY3Rpb24gcmFpc2UodG9rZW4pIHsKICAgIHZhciBtZXNzYWdlID0gc3ByaW50Zi5hcHBseShudWxsLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpCiAgICAgICwgZXJyb3IsIGNvbDsKCiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB0b2tlbi5saW5lKSB7CiAgICAgIGNvbCA9IHRva2VuLnJhbmdlWzBdIC0gdG9rZW4ubGluZVN0YXJ0OwogICAgICBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihzcHJpbnRmKCdbJTE6JTJdICUzJywgdG9rZW4ubGluZSwgY29sLCBtZXNzYWdlKSk7CiAgICAgIGVycm9yLmxpbmUgPSB0b2tlbi5saW5lOwogICAgICBlcnJvci5pbmRleCA9IHRva2VuLnJhbmdlWzBdOwogICAgICBlcnJvci5jb2x1bW4gPSBjb2w7CiAgICB9IGVsc2UgewogICAgICBjb2wgPSBpbmRleCAtIGxpbmVTdGFydCArIDE7CiAgICAgIGVycm9yID0gbmV3IFN5bnRheEVycm9yKHNwcmludGYoJ1slMTolMl0gJTMnLCBsaW5lLCBjb2wsIG1lc3NhZ2UpKTsKICAgICAgZXJyb3IuaW5kZXggPSBpbmRleDsKICAgICAgZXJyb3IubGluZSA9IGxpbmU7CiAgICAgIGVycm9yLmNvbHVtbiA9IGNvbDsKICAgIH0KICAgIHRocm93IGVycm9yOwogIH0KCiAgZnVuY3Rpb24gcmFpc2VVbmV4cGVjdGVkVG9rZW4odHlwZSwgdG9rZW4pIHsKICAgIHJhaXNlKHRva2VuLCBlcnJvcnMuZXhwZWN0ZWRUb2tlbiwgdHlwZSwgdG9rZW4udmFsdWUpOwogIH0KCiAgZnVuY3Rpb24gdW5leHBlY3RlZChmb3VuZCwgbmVhcikgewogICAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2YgbmVhcikgbmVhciA9IGxvb2thaGVhZC52YWx1ZTsKICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIGZvdW5kLnR5cGUpIHsKICAgICAgdmFyIHR5cGU7CiAgICAgIHN3aXRjaCAoZm91bmQudHlwZSkgewogICAgICAgIGNhc2UgU3RyaW5nTGl0ZXJhbDogICB0eXBlID0gJ3N0cmluZyc7ICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBLZXl3b3JkOiAgICAgICAgIHR5cGUgPSAna2V5d29yZCc7ICAgICBicmVhazsKICAgICAgICBjYXNlIElkZW50aWZpZXI6ICAgICAgdHlwZSA9ICdpZGVudGlmaWVyJzsgIGJyZWFrOwogICAgICAgIGNhc2UgTnVtZXJpY0xpdGVyYWw6ICB0eXBlID0gJ251bWJlcic7ICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBQdW5jdHVhdG9yOiAgICAgIHR5cGUgPSAnc3ltYm9sJzsgICAgICBicmVhazsKICAgICAgICBjYXNlIEJvb2xlYW5MaXRlcmFsOiAgdHlwZSA9ICdib29sZWFuJzsgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTmlsTGl0ZXJhbDoKICAgICAgICAgIHJldHVybiByYWlzZShmb3VuZCwgZXJyb3JzLnVuZXhwZWN0ZWQsICdzeW1ib2wnLCAnbmlsJywgbmVhcik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJhaXNlKGZvdW5kLCBlcnJvcnMudW5leHBlY3RlZCwgdHlwZSwgZm91bmQudmFsdWUsIG5lYXIpOwogICAgfQogICAgcmV0dXJuIHJhaXNlKGZvdW5kLCBlcnJvcnMudW5leHBlY3RlZCwgJ3N5bWJvbCcsIGZvdW5kLCBuZWFyKTsKICB9CgogIHZhciBpbmRleAogICAgLCB0b2tlbgogICAgLCBwcmV2aW91c1Rva2VuCiAgICAsIGxvb2thaGVhZAogICAgLCBjb21tZW50cwogICAgLCB0b2tlblN0YXJ0CiAgICAsIGxpbmUKICAgICwgbGluZVN0YXJ0OwoKICBleHBvcnRzLmxleCA9IGxleDsKCiAgZnVuY3Rpb24gbGV4KCkgewogICAgc2tpcFdoaXRlU3BhY2UoKTsKICAgIHdoaWxlICg0NSA9PT0gaW5wdXQuY2hhckNvZGVBdChpbmRleCkgJiYKICAgICAgICAgICA0NSA9PT0gaW5wdXQuY2hhckNvZGVBdChpbmRleCArIDEpKSB7CiAgICAgIHNjYW5Db21tZW50KCk7CiAgICAgIHNraXBXaGl0ZVNwYWNlKCk7CiAgICB9CiAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSByZXR1cm4gewogICAgICAgIHR5cGUgOiBFT0YKICAgICAgLCB2YWx1ZTogJzxlb2Y+JwogICAgICAsIGxpbmU6IGxpbmUKICAgICAgLCBsaW5lU3RhcnQ6IGxpbmVTdGFydAogICAgICAsIHJhbmdlOiBbaW5kZXgsIGluZGV4XQogICAgfTsKCiAgICB2YXIgY2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGluZGV4KQogICAgICAsIG5leHQgPSBpbnB1dC5jaGFyQ29kZUF0KGluZGV4ICsgMSk7CiAgICB0b2tlblN0YXJ0ID0gaW5kZXg7CiAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoY2hhckNvZGUpKSByZXR1cm4gc2NhbklkZW50aWZpZXJPcktleXdvcmQoKTsKCiAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgIGNhc2UgMzk6IGNhc2UgMzQ6IC8vICciCiAgICAgICAgcmV0dXJuIHNjYW5TdHJpbmdMaXRlcmFsKCk7CiAgICAgIGNhc2UgNDg6IGNhc2UgNDk6IGNhc2UgNTA6IGNhc2UgNTE6IGNhc2UgNTI6IGNhc2UgNTM6CiAgICAgIGNhc2UgNTQ6IGNhc2UgNTU6IGNhc2UgNTY6IGNhc2UgNTc6CiAgICAgICAgcmV0dXJuIHNjYW5OdW1lcmljTGl0ZXJhbCgpOwoKICAgICAgY2FzZSA0NjogLy8gLgogICAgICAgIGlmIChpc0RlY0RpZ2l0KG5leHQpKSByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFsKCk7CiAgICAgICAgaWYgKDQ2ID09PSBuZXh0KSB7CiAgICAgICAgICBpZiAoNDYgPT09IGlucHV0LmNoYXJDb2RlQXQoaW5kZXggKyAyKSkgcmV0dXJuIHNjYW5WYXJhcmdMaXRlcmFsKCk7CiAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoJy4uJyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcignLicpOwoKICAgICAgY2FzZSA2MTogLy8gPQogICAgICAgIGlmICg2MSA9PT0gbmV4dCkgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCc9PScpOwogICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcignPScpOwoKICAgICAgY2FzZSA2MjogLy8gPgogICAgICAgIGlmICg2MSA9PT0gbmV4dCkgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCc+PScpOwogICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcignPicpOwoKICAgICAgY2FzZSA2MDogLy8gPAogICAgICAgIGlmICg2MSA9PT0gbmV4dCkgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCc8PScpOwogICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcignPCcpOwoKICAgICAgY2FzZSAxMjY6IC8vIH4KICAgICAgICBpZiAoNjEgPT09IG5leHQpIHJldHVybiBzY2FuUHVuY3R1YXRvcignfj0nKTsKICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoJ34nKTsKCiAgICAgIGNhc2UgNTg6IC8vIDoKICAgICAgICBpZiAoNTggPT09IG5leHQpIHJldHVybiBzY2FuUHVuY3R1YXRvcignOjonKTsKICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoJzonKTsKCiAgICAgIGNhc2UgOTE6IC8vIFsKICAgICAgICBpZiAoOTEgPT09IG5leHQgfHwgNjEgPT09IG5leHQpIHJldHVybiBzY2FuTG9uZ1N0cmluZ0xpdGVyYWwoKTsKICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoJ1snKTsKICAgICAgY2FzZSA0MjogY2FzZSA0NzogY2FzZSA5NDogY2FzZSAzNzogY2FzZSA0NDogY2FzZSAxMjM6IGNhc2UgMTI1OgogICAgICBjYXNlIDkzOiBjYXNlIDQwOiBjYXNlIDQxOiBjYXNlIDU5OiBjYXNlIDM1OiBjYXNlIDQ1OiBjYXNlIDQzOiBjYXNlIDM4OiBjYXNlIDEyNDoKICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoaW5wdXQuY2hhckF0KGluZGV4KSk7CiAgICB9CgogICAgcmV0dXJuIHVuZXhwZWN0ZWQoaW5wdXQuY2hhckF0KGluZGV4KSk7CiAgfQoKICBmdW5jdGlvbiBza2lwV2hpdGVTcGFjZSgpIHsKICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewogICAgICB2YXIgY2hhckNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGluZGV4KTsKICAgICAgaWYgKGlzV2hpdGVTcGFjZShjaGFyQ29kZSkpIHsKICAgICAgICBpbmRleCsrOwogICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2hhckNvZGUpKSB7CiAgICAgICAgbGluZSsrOwogICAgICAgIGxpbmVTdGFydCA9ICsraW5kZXg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHNjYW5JZGVudGlmaWVyT3JLZXl3b3JkKCkgewogICAgdmFyIHZhbHVlLCB0eXBlOwogICAgd2hpbGUgKGlzSWRlbnRpZmllclBhcnQoaW5wdXQuY2hhckNvZGVBdCgrK2luZGV4KSkpOwogICAgdmFsdWUgPSBpbnB1dC5zbGljZSh0b2tlblN0YXJ0LCBpbmRleCk7CiAgICBpZiAoaXNLZXl3b3JkKHZhbHVlKSkgewogICAgICB0eXBlID0gS2V5d29yZDsKICAgIH0gZWxzZSBpZiAoJ3RydWUnID09PSB2YWx1ZSB8fCAnZmFsc2UnID09PSB2YWx1ZSkgewogICAgICB0eXBlID0gQm9vbGVhbkxpdGVyYWw7CiAgICAgIHZhbHVlID0gKCd0cnVlJyA9PT0gdmFsdWUpOwogICAgfSBlbHNlIGlmICgnbmlsJyA9PT0gdmFsdWUpIHsKICAgICAgdHlwZSA9IE5pbExpdGVyYWw7CiAgICAgIHZhbHVlID0gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGUgPSBJZGVudGlmaWVyOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogdHlwZQogICAgICAsIHZhbHVlOiB2YWx1ZQogICAgICAsIGxpbmU6IGxpbmUKICAgICAgLCBsaW5lU3RhcnQ6IGxpbmVTdGFydAogICAgICAsIHJhbmdlOiBbdG9rZW5TdGFydCwgaW5kZXhdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gc2NhblB1bmN0dWF0b3IodmFsdWUpIHsKICAgIGluZGV4ICs9IHZhbHVlLmxlbmd0aDsKICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogUHVuY3R1YXRvcgogICAgICAsIHZhbHVlOiB2YWx1ZQogICAgICAsIGxpbmU6IGxpbmUKICAgICAgLCBsaW5lU3RhcnQ6IGxpbmVTdGFydAogICAgICAsIHJhbmdlOiBbdG9rZW5TdGFydCwgaW5kZXhdCiAgICB9OwogIH0KCiAgZnVuY3Rpb24gc2NhblZhcmFyZ0xpdGVyYWwoKSB7CiAgICBpbmRleCArPSAzOwogICAgcmV0dXJuIHsKICAgICAgICB0eXBlOiBWYXJhcmdMaXRlcmFsCiAgICAgICwgdmFsdWU6ICcuLi4nCiAgICAgICwgbGluZTogbGluZQogICAgICAsIGxpbmVTdGFydDogbGluZVN0YXJ0CiAgICAgICwgcmFuZ2U6IFt0b2tlblN0YXJ0LCBpbmRleF0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBzY2FuU3RyaW5nTGl0ZXJhbCgpIHsKICAgIHZhciBkZWxpbWl0ZXIgPSBpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspCiAgICAgICwgc3RyaW5nU3RhcnQgPSBpbmRleAogICAgICAsIHN0cmluZyA9ICcnCiAgICAgICwgY2hhckNvZGU7CgogICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgIGNoYXJDb2RlID0gaW5wdXQuY2hhckNvZGVBdChpbmRleCsrKTsKICAgICAgaWYgKGRlbGltaXRlciA9PT0gY2hhckNvZGUpIGJyZWFrOwogICAgICBpZiAoOTIgPT09IGNoYXJDb2RlKSB7IC8vIFwKICAgICAgICBzdHJpbmcgKz0gaW5wdXQuc2xpY2Uoc3RyaW5nU3RhcnQsIGluZGV4IC0gMSkgKyByZWFkRXNjYXBlU2VxdWVuY2UoKTsKICAgICAgICBzdHJpbmdTdGFydCA9IGluZGV4OwogICAgICB9CiAgICAgIGVsc2UgaWYgKGluZGV4ID49IGxlbmd0aCB8fCBpc0xpbmVUZXJtaW5hdG9yKGNoYXJDb2RlKSkgewogICAgICAgIHN0cmluZyArPSBpbnB1dC5zbGljZShzdHJpbmdTdGFydCwgaW5kZXggLSAxKTsKICAgICAgICByYWlzZSh7fSwgZXJyb3JzLnVuZmluaXNoZWRTdHJpbmcsIHN0cmluZyArIFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKTsKICAgICAgfQogICAgfQogICAgc3RyaW5nICs9IGlucHV0LnNsaWNlKHN0cmluZ1N0YXJ0LCBpbmRleCAtIDEpOwoKICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogU3RyaW5nTGl0ZXJhbAogICAgICAsIHZhbHVlOiBzdHJpbmcKICAgICAgLCBsaW5lOiBsaW5lCiAgICAgICwgbGluZVN0YXJ0OiBsaW5lU3RhcnQKICAgICAgLCByYW5nZTogW3Rva2VuU3RhcnQsIGluZGV4XQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHNjYW5Mb25nU3RyaW5nTGl0ZXJhbCgpIHsKICAgIHZhciBzdHJpbmcgPSByZWFkTG9uZ1N0cmluZygpOwogICAgaWYgKGZhbHNlID09PSBzdHJpbmcpIHJhaXNlKHRva2VuLCBlcnJvcnMuZXhwZWN0ZWQsICdbJywgdG9rZW4udmFsdWUpOwoKICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogU3RyaW5nTGl0ZXJhbAogICAgICAsIHZhbHVlOiBzdHJpbmcKICAgICAgLCBsaW5lOiBsaW5lCiAgICAgICwgbGluZVN0YXJ0OiBsaW5lU3RhcnQKICAgICAgLCByYW5nZTogW3Rva2VuU3RhcnQsIGluZGV4XQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHNjYW5OdW1lcmljTGl0ZXJhbCgpIHsKICAgIHZhciBjaGFyYWN0ZXIgPSBpbnB1dC5jaGFyQXQoaW5kZXgpCiAgICAgICwgbmV4dCA9IGlucHV0LmNoYXJBdChpbmRleCArIDEpOwoKICAgIHZhciB2YWx1ZSA9ICgnMCcgPT09IGNoYXJhY3RlciAmJiAneFgnLmluZGV4T2YobmV4dCB8fCBudWxsKSA+PSAwKSA/CiAgICAgIHJlYWRIZXhMaXRlcmFsKCkgOiByZWFkRGVjTGl0ZXJhbCgpOwoKICAgIHJldHVybiB7CiAgICAgICAgdHlwZTogTnVtZXJpY0xpdGVyYWwKICAgICAgLCB2YWx1ZTogdmFsdWUKICAgICAgLCBsaW5lOiBsaW5lCiAgICAgICwgbGluZVN0YXJ0OiBsaW5lU3RhcnQKICAgICAgLCByYW5nZTogW3Rva2VuU3RhcnQsIGluZGV4XQogICAgfTsKICB9CgogIGZ1bmN0aW9uIHJlYWRIZXhMaXRlcmFsKCkgewogICAgdmFyIGZyYWN0aW9uID0gMCAvLyBkZWZhdWx0cyB0byAwIGFzIGl0IGdldHMgc3VtbWVkCiAgICAgICwgYmluYXJ5RXhwb25lbnQgPSAxIC8vIGRlZmF1bHRzIHRvIDEgYXMgaXQgZ2V0cyBtdWx0aXBsaWVkCiAgICAgICwgYmluYXJ5U2lnbiA9IDEgLy8gcG9zaXRpdmUKICAgICAgLCBkaWdpdCwgZnJhY3Rpb25TdGFydCwgZXhwb25lbnRTdGFydCwgZGlnaXRTdGFydDsKCiAgICBkaWdpdFN0YXJ0ID0gaW5kZXggKz0gMjsgLy8gU2tpcCAweCBwYXJ0CiAgICBpZiAoIWlzSGV4RGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCkpKQogICAgICByYWlzZSh7fSwgZXJyb3JzLm1hbGZvcm1lZE51bWJlciwgaW5wdXQuc2xpY2UodG9rZW5TdGFydCwgaW5kZXgpKTsKCiAgICB3aGlsZSAoaXNIZXhEaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KSkpIGluZGV4Kys7CiAgICBkaWdpdCA9IHBhcnNlSW50KGlucHV0LnNsaWNlKGRpZ2l0U3RhcnQsIGluZGV4KSwgMTYpOwogICAgaWYgKCcuJyA9PT0gaW5wdXQuY2hhckF0KGluZGV4KSkgewogICAgICBmcmFjdGlvblN0YXJ0ID0gKytpbmRleDsKCiAgICAgIHdoaWxlIChpc0hleERpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgpKSkgaW5kZXgrKzsKICAgICAgZnJhY3Rpb24gPSBpbnB1dC5zbGljZShmcmFjdGlvblN0YXJ0LCBpbmRleCk7CiAgICAgIGZyYWN0aW9uID0gKGZyYWN0aW9uU3RhcnQgPT09IGluZGV4KSA/IDAKICAgICAgICA6IHBhcnNlSW50KGZyYWN0aW9uLCAxNikgLyBNYXRoLnBvdygxNiwgaW5kZXggLSBmcmFjdGlvblN0YXJ0KTsKICAgIH0KICAgIGlmICgncFAnLmluZGV4T2YoaW5wdXQuY2hhckF0KGluZGV4KSB8fCBudWxsKSA+PSAwKSB7CiAgICAgIGluZGV4Kys7CiAgICAgIGlmICgnKy0nLmluZGV4T2YoaW5wdXQuY2hhckF0KGluZGV4KSB8fCBudWxsKSA+PSAwKQogICAgICAgIGJpbmFyeVNpZ24gPSAoJysnID09PSBpbnB1dC5jaGFyQXQoaW5kZXgrKykpID8gMSA6IC0xOwoKICAgICAgZXhwb25lbnRTdGFydCA9IGluZGV4OwogICAgICBpZiAoIWlzRGVjRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCkpKQogICAgICAgIHJhaXNlKHt9LCBlcnJvcnMubWFsZm9ybWVkTnVtYmVyLCBpbnB1dC5zbGljZSh0b2tlblN0YXJ0LCBpbmRleCkpOwoKICAgICAgd2hpbGUgKGlzRGVjRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCkpKSBpbmRleCsrOwogICAgICBiaW5hcnlFeHBvbmVudCA9IGlucHV0LnNsaWNlKGV4cG9uZW50U3RhcnQsIGluZGV4KTsKICAgICAgYmluYXJ5RXhwb25lbnQgPSBNYXRoLnBvdygyLCBiaW5hcnlFeHBvbmVudCAqIGJpbmFyeVNpZ24pOwogICAgfQoKICAgIHJldHVybiAoZGlnaXQgKyBmcmFjdGlvbikgKiBiaW5hcnlFeHBvbmVudDsKICB9CgogIGZ1bmN0aW9uIHJlYWREZWNMaXRlcmFsKCkgewogICAgd2hpbGUgKGlzRGVjRGlnaXQoaW5wdXQuY2hhckNvZGVBdChpbmRleCkpKSBpbmRleCsrOwogICAgaWYgKCcuJyA9PT0gaW5wdXQuY2hhckF0KGluZGV4KSkgewogICAgICBpbmRleCsrOwogICAgICB3aGlsZSAoaXNEZWNEaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KSkpIGluZGV4Kys7CiAgICB9CiAgICBpZiAoJ2VFJy5pbmRleE9mKGlucHV0LmNoYXJBdChpbmRleCkgfHwgbnVsbCkgPj0gMCkgewogICAgICBpbmRleCsrOwogICAgICBpZiAoJystJy5pbmRleE9mKGlucHV0LmNoYXJBdChpbmRleCkgfHwgbnVsbCkgPj0gMCkgaW5kZXgrKzsKICAgICAgaWYgKCFpc0RlY0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgpKSkKICAgICAgICByYWlzZSh7fSwgZXJyb3JzLm1hbGZvcm1lZE51bWJlciwgaW5wdXQuc2xpY2UodG9rZW5TdGFydCwgaW5kZXgpKTsKCiAgICAgIHdoaWxlIChpc0RlY0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgpKSkgaW5kZXgrKzsKICAgIH0KCiAgICByZXR1cm4gcGFyc2VGbG9hdChpbnB1dC5zbGljZSh0b2tlblN0YXJ0LCBpbmRleCkpOwogIH0KCiAgZnVuY3Rpb24gcmVhZEVzY2FwZVNlcXVlbmNlKCkgewogICAgdmFyIHNlcXVlbmNlU3RhcnQgPSBpbmRleDsKICAgIHN3aXRjaCAoaW5wdXQuY2hhckF0KGluZGV4KSkgewogICAgICBjYXNlICduJzogaW5kZXgrKzsgcmV0dXJuICdcbic7CiAgICAgIGNhc2UgJ3InOiBpbmRleCsrOyByZXR1cm4gJ1xyJzsKICAgICAgY2FzZSAndCc6IGluZGV4Kys7IHJldHVybiAnXHQnOwogICAgICBjYXNlICd2JzogaW5kZXgrKzsgcmV0dXJuICdceDBCJzsKICAgICAgY2FzZSAnYic6IGluZGV4Kys7IHJldHVybiAnXGInOwogICAgICBjYXNlICdmJzogaW5kZXgrKzsgcmV0dXJuICdcZic7CiAgICAgIGNhc2UgJ3onOiBpbmRleCsrOyBza2lwV2hpdGVTcGFjZSgpOyByZXR1cm4gJyc7CiAgICAgIGNhc2UgJ3gnOgogICAgICAgIGlmIChpc0hleERpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXggKyAxKSkgJiYKICAgICAgICAgICAgaXNIZXhEaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4ICsgMikpKSB7CiAgICAgICAgICBpbmRleCArPSAzOwogICAgICAgICAgcmV0dXJuICdcXCcgKyBpbnB1dC5zbGljZShzZXF1ZW5jZVN0YXJ0LCBpbmRleCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnXFwnICsgaW5wdXQuY2hhckF0KGluZGV4KyspOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChpc0RlY0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgpKSkgewogICAgICAgICAgd2hpbGUgKGlzRGVjRGlnaXQoaW5wdXQuY2hhckNvZGVBdCgrK2luZGV4KSkpOwogICAgICAgICAgcmV0dXJuICdcXCcgKyBpbnB1dC5zbGljZShzZXF1ZW5jZVN0YXJ0LCBpbmRleCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoaW5kZXgrKyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzY2FuQ29tbWVudCgpIHsKICAgIHRva2VuU3RhcnQgPSBpbmRleDsKICAgIGluZGV4ICs9IDI7IC8vIC0tCgogICAgdmFyIGNoYXJhY3RlciA9IGlucHV0LmNoYXJBdChpbmRleCkKICAgICAgLCBjb250ZW50ID0gJycKICAgICAgLCBpc0xvbmcgPSBmYWxzZQogICAgICAsIGNvbW1lbnRTdGFydCA9IGluZGV4CiAgICAgICwgbGluZVN0YXJ0Q29tbWVudCA9IGxpbmVTdGFydAogICAgICAsIGxpbmVDb21tZW50ID0gbGluZTsKCiAgICBpZiAoJ1snID09PSBjaGFyYWN0ZXIpIHsKICAgICAgY29udGVudCA9IHJlYWRMb25nU3RyaW5nKCk7CiAgICAgIGlmIChmYWxzZSA9PT0gY29udGVudCkgY29udGVudCA9IGNoYXJhY3RlcjsKICAgICAgZWxzZSBpc0xvbmcgPSB0cnVlOwogICAgfQogICAgaWYgKCFpc0xvbmcpIHsKICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoaW5wdXQuY2hhckNvZGVBdChpbmRleCkpKSBicmVhazsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmNvbW1lbnRzKSBjb250ZW50ID0gaW5wdXQuc2xpY2UoY29tbWVudFN0YXJ0LCBpbmRleCk7CiAgICB9CgogICAgaWYgKG9wdGlvbnMuY29tbWVudHMpIHsKICAgICAgdmFyIG5vZGUgPSBhc3QuY29tbWVudChjb250ZW50LCBpbnB1dC5zbGljZSh0b2tlblN0YXJ0LCBpbmRleCkpOwogICAgICBpZiAob3B0aW9ucy5sb2NhdGlvbnMpIHsKICAgICAgICBub2RlLmxvYyA9IHsKICAgICAgICAgICAgc3RhcnQ6IHsgbGluZTogbGluZUNvbW1lbnQsIGNvbHVtbjogdG9rZW5TdGFydCAtIGxpbmVTdGFydENvbW1lbnQgfQogICAgICAgICAgLCBlbmQ6IHsgbGluZTogbGluZSwgY29sdW1uOiBpbmRleCAtIGxpbmVTdGFydCB9CiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAob3B0aW9ucy5yYW5nZXMpIHsKICAgICAgICBub2RlLnJhbmdlID0gW3Rva2VuU3RhcnQsIGluZGV4XTsKICAgICAgfQogICAgICBjb21tZW50cy5wdXNoKG5vZGUpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVhZExvbmdTdHJpbmcoKSB7CiAgICB2YXIgbGV2ZWwgPSAwCiAgICAgICwgY29udGVudCA9ICcnCiAgICAgICwgdGVybWluYXRvciA9IGZhbHNlCiAgICAgICwgY2hhcmFjdGVyLCBzdHJpbmdTdGFydDsKCiAgICBpbmRleCsrOyAvLyBbCiAgICB3aGlsZSAoJz0nID09PSBpbnB1dC5jaGFyQXQoaW5kZXggKyBsZXZlbCkpIGxldmVsKys7CiAgICBpZiAoJ1snICE9PSBpbnB1dC5jaGFyQXQoaW5kZXggKyBsZXZlbCkpIHJldHVybiBmYWxzZTsKCiAgICBpbmRleCArPSBsZXZlbCArIDE7CiAgICBpZiAoaXNMaW5lVGVybWluYXRvcihpbnB1dC5jaGFyQ29kZUF0KGluZGV4KSkpIHsKICAgICAgbGluZSsrOwogICAgICBsaW5lU3RhcnQgPSBpbmRleCsrOwogICAgfQoKICAgIHN0cmluZ1N0YXJ0ID0gaW5kZXg7CiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgY2hhcmFjdGVyID0gaW5wdXQuY2hhckF0KGluZGV4KyspOwogICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaGFyYWN0ZXIuY2hhckNvZGVBdCgwKSkpIHsKICAgICAgICBsaW5lKys7CiAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CiAgICAgIH0KICAgICAgaWYgKCddJyA9PT0gY2hhcmFjdGVyKSB7CiAgICAgICAgdGVybWluYXRvciA9IHRydWU7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbDsgaSsrKSB7CiAgICAgICAgICBpZiAoJz0nICE9PSBpbnB1dC5jaGFyQXQoaW5kZXggKyBpKSkgdGVybWluYXRvciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoJ10nICE9PSBpbnB1dC5jaGFyQXQoaW5kZXggKyBsZXZlbCkpIHRlcm1pbmF0b3IgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGVybWluYXRvcikgYnJlYWs7CiAgICB9CiAgICBjb250ZW50ICs9IGlucHV0LnNsaWNlKHN0cmluZ1N0YXJ0LCBpbmRleCAtIDEpOwogICAgaW5kZXggKz0gbGV2ZWwgKyAxOwoKICAgIHJldHVybiBjb250ZW50OwogIH0KCiAgZnVuY3Rpb24gbmV4dCgpIHsKICAgIHByZXZpb3VzVG9rZW4gPSB0b2tlbjsKICAgIHRva2VuID0gbG9va2FoZWFkOwogICAgbG9va2FoZWFkID0gbGV4KCk7CiAgfQoKICBmdW5jdGlvbiBjb25zdW1lKHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IHRva2VuLnZhbHVlKSB7CiAgICAgIG5leHQoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBleHBlY3QodmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PT0gdG9rZW4udmFsdWUpIG5leHQoKTsKICAgIGVsc2UgcmFpc2UodG9rZW4sIGVycm9ycy5leHBlY3RlZCwgdmFsdWUsIHRva2VuLnZhbHVlKTsKICB9CgogIGZ1bmN0aW9uIGlzV2hpdGVTcGFjZShjaGFyQ29kZSkgewogICAgcmV0dXJuIDkgPT09IGNoYXJDb2RlIHx8IDMyID09PSBjaGFyQ29kZSB8fCAweEIgPT09IGNoYXJDb2RlIHx8IDB4QyA9PT0gY2hhckNvZGU7CiAgfQoKICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoYXJDb2RlKSB7CiAgICByZXR1cm4gMTAgPT09IGNoYXJDb2RlIHx8IDEzID09PSBjaGFyQ29kZTsKICB9CgogIGZ1bmN0aW9uIGlzRGVjRGlnaXQoY2hhckNvZGUpIHsKICAgIHJldHVybiBjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NzsKICB9CgogIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2hhckNvZGUpIHsKICAgIHJldHVybiAoY2hhckNvZGUgPj0gNDggJiYgY2hhckNvZGUgPD0gNTcpIHx8IChjaGFyQ29kZSA+PSA5NyAmJiBjaGFyQ29kZSA8PSAxMDIpIHx8IChjaGFyQ29kZSA+PSA2NSAmJiBjaGFyQ29kZSA8PSA3MCk7CiAgfQoKICBmdW5jdGlvbiBpc0lkZW50aWZpZXJTdGFydChjaGFyQ29kZSkgewogICAgcmV0dXJuIChjaGFyQ29kZSA+PSA2NSAmJiBjaGFyQ29kZSA8PSA5MCkgfHwgKGNoYXJDb2RlID49IDk3ICYmIGNoYXJDb2RlIDw9IDEyMikgfHwgOTUgPT09IGNoYXJDb2RlOwogIH0KCiAgZnVuY3Rpb24gaXNJZGVudGlmaWVyUGFydChjaGFyQ29kZSkgewogICAgcmV0dXJuIChjaGFyQ29kZSA+PSA2NSAmJiBjaGFyQ29kZSA8PSA5MCkgfHwgKGNoYXJDb2RlID49IDk3ICYmIGNoYXJDb2RlIDw9IDEyMikgfHwgOTUgPT09IGNoYXJDb2RlIHx8IChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1Nyk7CiAgfQoKICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHsKICAgIHN3aXRjaCAoaWQubGVuZ3RoKSB7CiAgICAgIGNhc2UgMjoKICAgICAgICByZXR1cm4gJ2RvJyA9PT0gaWQgfHwgJ2lmJyA9PT0gaWQgfHwgJ2luJyA9PT0gaWQgfHwgJ29yJyA9PT0gaWQ7CiAgICAgIGNhc2UgMzoKICAgICAgICByZXR1cm4gJ2FuZCcgPT09IGlkIHx8ICdlbmQnID09PSBpZCB8fCAnZm9yJyA9PT0gaWQgfHwgJ25vdCcgPT09IGlkOwogICAgICBjYXNlIDQ6CiAgICAgICAgcmV0dXJuICdlbHNlJyA9PT0gaWQgfHwgJ2dvdG8nID09PSBpZCB8fCAndGhlbicgPT09IGlkOwogICAgICBjYXNlIDU6CiAgICAgICAgcmV0dXJuICdicmVhaycgPT09IGlkIHx8ICdsb2NhbCcgPT09IGlkIHx8ICd1bnRpbCcgPT09IGlkIHx8ICd3aGlsZScgPT09IGlkOwogICAgICBjYXNlIDY6CiAgICAgICAgcmV0dXJuICdlbHNlaWYnID09PSBpZCB8fCAncmVwZWF0JyA9PT0gaWQgfHwgJ3JldHVybicgPT09IGlkOwogICAgICBjYXNlIDg6CiAgICAgICAgcmV0dXJuICdmdW5jdGlvbicgPT09IGlkOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gaXNVbmFyeSh0b2tlbikgewogICAgaWYgKFB1bmN0dWF0b3IgPT09IHRva2VuLnR5cGUpIHJldHVybiAnIy1+Jy5pbmRleE9mKHRva2VuLnZhbHVlKSA+PSAwOwogICAgaWYgKEtleXdvcmQgPT09IHRva2VuLnR5cGUpIHJldHVybiAnbm90JyA9PT0gdG9rZW4udmFsdWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGlzQ2FsbEV4cHJlc3Npb24oZXhwcmVzc2lvbikgewogICAgc3dpdGNoIChleHByZXNzaW9uLnR5cGUpIHsKICAgICAgY2FzZSAnQ2FsbEV4cHJlc3Npb24nOgogICAgICBjYXNlICdUYWJsZUNhbGxFeHByZXNzaW9uJzoKICAgICAgY2FzZSAnU3RyaW5nQ2FsbEV4cHJlc3Npb24nOgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gaXNCbG9ja0ZvbGxvdyh0b2tlbikgewogICAgaWYgKEVPRiA9PT0gdG9rZW4udHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAoS2V5d29yZCAhPT0gdG9rZW4udHlwZSkgcmV0dXJuIGZhbHNlOwogICAgc3dpdGNoICh0b2tlbi52YWx1ZSkgewogICAgICBjYXNlICdlbHNlJzogY2FzZSAnZWxzZWlmJzoKICAgICAgY2FzZSAnZW5kJzogY2FzZSAndW50aWwnOgogICAgICAgIHJldHVybiB0cnVlOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyIHNjb3BlcwogICAgLCBzY29wZURlcHRoCiAgICAsIGdsb2JhbHM7CiAgZnVuY3Rpb24gY3JlYXRlU2NvcGUoKSB7CiAgICBzY29wZXMucHVzaChBcnJheS5hcHBseShudWxsLCBzY29wZXNbc2NvcGVEZXB0aCsrXSkpOwogIH0KICBmdW5jdGlvbiBleGl0U2NvcGUoKSB7CiAgICBzY29wZXMucG9wKCk7CiAgICBzY29wZURlcHRoLS07CiAgfQogIGZ1bmN0aW9uIHNjb3BlSWRlbnRpZmllck5hbWUobmFtZSkgewogICAgaWYgKC0xICE9PSBpbmRleE9mKHNjb3Blc1tzY29wZURlcHRoXSwgbmFtZSkpIHJldHVybjsKICAgIHNjb3Blc1tzY29wZURlcHRoXS5wdXNoKG5hbWUpOwogIH0KICBmdW5jdGlvbiBzY29wZUlkZW50aWZpZXIobm9kZSkgewogICAgc2NvcGVJZGVudGlmaWVyTmFtZShub2RlLm5hbWUpOwogICAgYXR0YWNoU2NvcGUobm9kZSwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIGF0dGFjaFNjb3BlKG5vZGUsIGlzTG9jYWwpIHsKICAgIGlmICghaXNMb2NhbCAmJiAtMSA9PT0gaW5kZXhPZk9iamVjdChnbG9iYWxzLCAnbmFtZScsIG5vZGUubmFtZSkpCiAgICAgIGdsb2JhbHMucHVzaChub2RlKTsKCiAgICBub2RlLmlzTG9jYWwgPSBpc0xvY2FsOwogIH0KICBmdW5jdGlvbiBzY29wZUhhc05hbWUobmFtZSkgewogICAgcmV0dXJuICgtMSAhPT0gaW5kZXhPZihzY29wZXNbc2NvcGVEZXB0aF0sIG5hbWUpKTsKICB9CgogIHZhciBsb2NhdGlvbnMgPSBbXQogICAgLCB0cmFja0xvY2F0aW9uczsKCiAgZnVuY3Rpb24gY3JlYXRlTG9jYXRpb25NYXJrZXIoKSB7CiAgICByZXR1cm4gbmV3IE1hcmtlcih0b2tlbik7CiAgfQoKICBmdW5jdGlvbiBNYXJrZXIodG9rZW4pIHsKICAgIGlmIChvcHRpb25zLmxvY2F0aW9ucykgewogICAgICB0aGlzLmxvYyA9IHsKICAgICAgICAgIHN0YXJ0OiB7CiAgICAgICAgICAgIGxpbmU6IHRva2VuLmxpbmUKICAgICAgICAgICwgY29sdW1uOiB0b2tlbi5yYW5nZVswXSAtIHRva2VuLmxpbmVTdGFydAogICAgICAgIH0KICAgICAgICAsIGVuZDogewogICAgICAgICAgICBsaW5lOiAwCiAgICAgICAgICAsIGNvbHVtbjogMAogICAgICAgIH0KICAgICAgfTsKICAgIH0KICAgIGlmIChvcHRpb25zLnJhbmdlcykgdGhpcy5yYW5nZSA9IFt0b2tlbi5yYW5nZVswXSwgMF07CiAgfQogIE1hcmtlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIGlmIChvcHRpb25zLmxvY2F0aW9ucykgewogICAgICB0aGlzLmxvYy5lbmQubGluZSA9IHByZXZpb3VzVG9rZW4ubGluZTsKICAgICAgdGhpcy5sb2MuZW5kLmNvbHVtbiA9IHByZXZpb3VzVG9rZW4ucmFuZ2VbMV0gLSBwcmV2aW91c1Rva2VuLmxpbmVTdGFydDsKICAgIH0KICAgIGlmIChvcHRpb25zLnJhbmdlcykgewogICAgICB0aGlzLnJhbmdlWzFdID0gcHJldmlvdXNUb2tlbi5yYW5nZVsxXTsKICAgIH0KICB9OwogIGZ1bmN0aW9uIG1hcmtMb2NhdGlvbigpIHsKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbG9jYXRpb25zLnB1c2goY3JlYXRlTG9jYXRpb25NYXJrZXIoKSk7CiAgfQogIGZ1bmN0aW9uIHB1c2hMb2NhdGlvbihtYXJrZXIpIHsKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbG9jYXRpb25zLnB1c2gobWFya2VyKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlQ2h1bmsoKSB7CiAgICBuZXh0KCk7CiAgICBtYXJrTG9jYXRpb24oKTsKICAgIHZhciBib2R5ID0gcGFyc2VCbG9jaygpOwogICAgaWYgKEVPRiAhPT0gdG9rZW4udHlwZSkgdW5leHBlY3RlZCh0b2tlbik7CiAgICBpZiAodHJhY2tMb2NhdGlvbnMgJiYgIWJvZHkubGVuZ3RoKSBwcmV2aW91c1Rva2VuID0gdG9rZW47CiAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuY2h1bmsoYm9keSkpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VCbG9jayh0ZXJtaW5hdG9yKSB7CiAgICB2YXIgYmxvY2sgPSBbXQogICAgICAsIHN0YXRlbWVudDsKICAgIGlmIChvcHRpb25zLnNjb3BlKSBjcmVhdGVTY29wZSgpOwoKICAgIHdoaWxlICghaXNCbG9ja0ZvbGxvdyh0b2tlbikpIHsKICAgICAgaWYgKCdyZXR1cm4nID09PSB0b2tlbi52YWx1ZSkgewogICAgICAgIGJsb2NrLnB1c2gocGFyc2VTdGF0ZW1lbnQoKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgaWYgKHN0YXRlbWVudCkgYmxvY2sucHVzaChzdGF0ZW1lbnQpOwogICAgfQoKICAgIGlmIChvcHRpb25zLnNjb3BlKSBleGl0U2NvcGUoKTsKICAgIHJldHVybiBibG9jazsKICB9CgogIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkgewogICAgbWFya0xvY2F0aW9uKCk7CiAgICBpZiAoS2V5d29yZCA9PT0gdG9rZW4udHlwZSkgewogICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7CiAgICAgICAgY2FzZSAnbG9jYWwnOiAgICBuZXh0KCk7IHJldHVybiBwYXJzZUxvY2FsU3RhdGVtZW50KCk7CiAgICAgICAgY2FzZSAnaWYnOiAgICAgICBuZXh0KCk7IHJldHVybiBwYXJzZUlmU3RhdGVtZW50KCk7CiAgICAgICAgY2FzZSAncmV0dXJuJzogICBuZXh0KCk7IHJldHVybiBwYXJzZVJldHVyblN0YXRlbWVudCgpOwogICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzogbmV4dCgpOwogICAgICAgICAgdmFyIG5hbWUgPSBwYXJzZUZ1bmN0aW9uTmFtZSgpOwogICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihuYW1lKTsKICAgICAgICBjYXNlICd3aGlsZSc6ICAgIG5leHQoKTsgcmV0dXJuIHBhcnNlV2hpbGVTdGF0ZW1lbnQoKTsKICAgICAgICBjYXNlICdmb3InOiAgICAgIG5leHQoKTsgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KCk7CiAgICAgICAgY2FzZSAncmVwZWF0JzogICBuZXh0KCk7IHJldHVybiBwYXJzZVJlcGVhdFN0YXRlbWVudCgpOwogICAgICAgIGNhc2UgJ2JyZWFrJzogICAgbmV4dCgpOyByZXR1cm4gcGFyc2VCcmVha1N0YXRlbWVudCgpOwogICAgICAgIGNhc2UgJ2RvJzogICAgICAgbmV4dCgpOyByZXR1cm4gcGFyc2VEb1N0YXRlbWVudCgpOwogICAgICAgIGNhc2UgJ2dvdG8nOiAgICAgbmV4dCgpOyByZXR1cm4gcGFyc2VHb3RvU3RhdGVtZW50KCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoUHVuY3R1YXRvciA9PT0gdG9rZW4udHlwZSkgewogICAgICBpZiAoY29uc3VtZSgnOjonKSkgcmV0dXJuIHBhcnNlTGFiZWxTdGF0ZW1lbnQoKTsKICAgIH0KICAgIGlmICh0cmFja0xvY2F0aW9ucykgbG9jYXRpb25zLnBvcCgpOwogICAgaWYgKGNvbnN1bWUoJzsnKSkgcmV0dXJuOwoKICAgIHJldHVybiBwYXJzZUFzc2lnbm1lbnRPckNhbGxTdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlTGFiZWxTdGF0ZW1lbnQoKSB7CiAgICB2YXIgbmFtZSA9IHRva2VuLnZhbHVlCiAgICAgICwgbGFiZWwgPSBwYXJzZUlkZW50aWZpZXIoKTsKCiAgICBpZiAob3B0aW9ucy5zY29wZSkgewogICAgICBzY29wZUlkZW50aWZpZXJOYW1lKCc6OicgKyBuYW1lICsgJzo6Jyk7CiAgICAgIGF0dGFjaFNjb3BlKGxhYmVsLCB0cnVlKTsKICAgIH0KCiAgICBleHBlY3QoJzo6Jyk7CiAgICByZXR1cm4gZmluaXNoTm9kZShhc3QubGFiZWxTdGF0ZW1lbnQobGFiZWwpKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlQnJlYWtTdGF0ZW1lbnQoKSB7CiAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuYnJlYWtTdGF0ZW1lbnQoKSk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUdvdG9TdGF0ZW1lbnQoKSB7CiAgICB2YXIgbmFtZSA9IHRva2VuLnZhbHVlCiAgICAgICwgbGFiZWwgPSBwYXJzZUlkZW50aWZpZXIoKTsKCiAgICBpZiAob3B0aW9ucy5zY29wZSkgbGFiZWwuaXNMYWJlbCA9IHNjb3BlSGFzTmFtZSgnOjonICsgbmFtZSArICc6OicpOwogICAgcmV0dXJuIGZpbmlzaE5vZGUoYXN0LmdvdG9TdGF0ZW1lbnQobGFiZWwpKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlRG9TdGF0ZW1lbnQoKSB7CiAgICB2YXIgYm9keSA9IHBhcnNlQmxvY2soKTsKICAgIGV4cGVjdCgnZW5kJyk7CiAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuZG9TdGF0ZW1lbnQoYm9keSkpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VXaGlsZVN0YXRlbWVudCgpIHsKICAgIHZhciBjb25kaXRpb24gPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgZXhwZWN0KCdkbycpOwogICAgdmFyIGJvZHkgPSBwYXJzZUJsb2NrKCk7CiAgICBleHBlY3QoJ2VuZCcpOwogICAgcmV0dXJuIGZpbmlzaE5vZGUoYXN0LndoaWxlU3RhdGVtZW50KGNvbmRpdGlvbiwgYm9keSkpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VSZXBlYXRTdGF0ZW1lbnQoKSB7CiAgICB2YXIgYm9keSA9IHBhcnNlQmxvY2soKTsKICAgIGV4cGVjdCgndW50aWwnKTsKICAgIHZhciBjb25kaXRpb24gPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgcmV0dXJuIGZpbmlzaE5vZGUoYXN0LnJlcGVhdFN0YXRlbWVudChjb25kaXRpb24sIGJvZHkpKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlUmV0dXJuU3RhdGVtZW50KCkgewogICAgdmFyIGV4cHJlc3Npb25zID0gW107CgogICAgaWYgKCdlbmQnICE9PSB0b2tlbi52YWx1ZSkgewogICAgICB2YXIgZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICBpZiAobnVsbCAhPSBleHByZXNzaW9uKSBleHByZXNzaW9ucy5wdXNoKGV4cHJlc3Npb24pOwogICAgICB3aGlsZSAoY29uc3VtZSgnLCcpKSB7CiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlRXhwZWN0ZWRFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwcmVzc2lvbnMucHVzaChleHByZXNzaW9uKTsKICAgICAgfQogICAgICBjb25zdW1lKCc7Jyk7IC8vIGdyYW1tYXIgdGVsbHMgdXMgOyBpcyBvcHRpb25hbCBoZXJlLgogICAgfQogICAgcmV0dXJuIGZpbmlzaE5vZGUoYXN0LnJldHVyblN0YXRlbWVudChleHByZXNzaW9ucykpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VJZlN0YXRlbWVudCgpIHsKICAgIHZhciBjbGF1c2VzID0gW10KICAgICAgLCBjb25kaXRpb24KICAgICAgLCBib2R5CiAgICAgICwgbWFya2VyOwogICAgaWYgKHRyYWNrTG9jYXRpb25zKSB7CiAgICAgIG1hcmtlciA9IGxvY2F0aW9uc1tsb2NhdGlvbnMubGVuZ3RoIC0gMV07CiAgICAgIGxvY2F0aW9ucy5wdXNoKG1hcmtlcik7CiAgICB9CiAgICBjb25kaXRpb24gPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgZXhwZWN0KCd0aGVuJyk7CiAgICBib2R5ID0gcGFyc2VCbG9jaygpOwogICAgY2xhdXNlcy5wdXNoKGZpbmlzaE5vZGUoYXN0LmlmQ2xhdXNlKGNvbmRpdGlvbiwgYm9keSkpKTsKCiAgICBpZiAodHJhY2tMb2NhdGlvbnMpIG1hcmtlciA9IGNyZWF0ZUxvY2F0aW9uTWFya2VyKCk7CiAgICB3aGlsZSAoY29uc3VtZSgnZWxzZWlmJykpIHsKICAgICAgcHVzaExvY2F0aW9uKG1hcmtlcik7CiAgICAgIGNvbmRpdGlvbiA9IHBhcnNlRXhwZWN0ZWRFeHByZXNzaW9uKCk7CiAgICAgIGV4cGVjdCgndGhlbicpOwogICAgICBib2R5ID0gcGFyc2VCbG9jaygpOwogICAgICBjbGF1c2VzLnB1c2goZmluaXNoTm9kZShhc3QuZWxzZWlmQ2xhdXNlKGNvbmRpdGlvbiwgYm9keSkpKTsKICAgICAgaWYgKHRyYWNrTG9jYXRpb25zKSBtYXJrZXIgPSBjcmVhdGVMb2NhdGlvbk1hcmtlcigpOwogICAgfQoKICAgIGlmIChjb25zdW1lKCdlbHNlJykpIHsKICAgICAgaWYgKHRyYWNrTG9jYXRpb25zKSB7CiAgICAgICAgbWFya2VyID0gbmV3IE1hcmtlcihwcmV2aW91c1Rva2VuKTsKICAgICAgICBsb2NhdGlvbnMucHVzaChtYXJrZXIpOwogICAgICB9CiAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7CiAgICAgIGNsYXVzZXMucHVzaChmaW5pc2hOb2RlKGFzdC5lbHNlQ2xhdXNlKGJvZHkpKSk7CiAgICB9CgogICAgZXhwZWN0KCdlbmQnKTsKICAgIHJldHVybiBmaW5pc2hOb2RlKGFzdC5pZlN0YXRlbWVudChjbGF1c2VzKSk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUZvclN0YXRlbWVudCgpIHsKICAgIHZhciB2YXJpYWJsZSA9IHBhcnNlSWRlbnRpZmllcigpCiAgICAgICwgYm9keTsKICAgIGlmIChvcHRpb25zLnNjb3BlKSBzY29wZUlkZW50aWZpZXIodmFyaWFibGUpOwogICAgaWYgKGNvbnN1bWUoJz0nKSkgewogICAgICB2YXIgc3RhcnQgPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgICBleHBlY3QoJywnKTsKICAgICAgdmFyIGVuZCA9IHBhcnNlRXhwZWN0ZWRFeHByZXNzaW9uKCk7CiAgICAgIHZhciBzdGVwID0gY29uc3VtZSgnLCcpID8gcGFyc2VFeHBlY3RlZEV4cHJlc3Npb24oKSA6IG51bGw7CgogICAgICBleHBlY3QoJ2RvJyk7CiAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7CiAgICAgIGV4cGVjdCgnZW5kJyk7CgogICAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuZm9yTnVtZXJpY1N0YXRlbWVudCh2YXJpYWJsZSwgc3RhcnQsIGVuZCwgc3RlcCwgYm9keSkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciB2YXJpYWJsZXMgPSBbdmFyaWFibGVdOwogICAgICB3aGlsZSAoY29uc3VtZSgnLCcpKSB7CiAgICAgICAgdmFyaWFibGUgPSBwYXJzZUlkZW50aWZpZXIoKTsKICAgICAgICBpZiAob3B0aW9ucy5zY29wZSkgc2NvcGVJZGVudGlmaWVyKHZhcmlhYmxlKTsKICAgICAgICB2YXJpYWJsZXMucHVzaCh2YXJpYWJsZSk7CiAgICAgIH0KICAgICAgZXhwZWN0KCdpbicpOwogICAgICB2YXIgaXRlcmF0b3JzID0gW107CiAgICAgIGRvIHsKICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHBhcnNlRXhwZWN0ZWRFeHByZXNzaW9uKCk7CiAgICAgICAgaXRlcmF0b3JzLnB1c2goZXhwcmVzc2lvbik7CiAgICAgIH0gd2hpbGUgKGNvbnN1bWUoJywnKSk7CgogICAgICBleHBlY3QoJ2RvJyk7CiAgICAgIGJvZHkgPSBwYXJzZUJsb2NrKCk7CiAgICAgIGV4cGVjdCgnZW5kJyk7CgogICAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuZm9yR2VuZXJpY1N0YXRlbWVudCh2YXJpYWJsZXMsIGl0ZXJhdG9ycywgYm9keSkpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VMb2NhbFN0YXRlbWVudCgpIHsKICAgIHZhciBuYW1lOwoKICAgIGlmIChJZGVudGlmaWVyID09PSB0b2tlbi50eXBlKSB7CiAgICAgIHZhciB2YXJpYWJsZXMgPSBbXQogICAgICAgICwgaW5pdCA9IFtdOwoKICAgICAgZG8gewogICAgICAgIG5hbWUgPSBwYXJzZUlkZW50aWZpZXIoKTsKCiAgICAgICAgdmFyaWFibGVzLnB1c2gobmFtZSk7CiAgICAgIH0gd2hpbGUgKGNvbnN1bWUoJywnKSk7CgogICAgICBpZiAoY29uc3VtZSgnPScpKSB7CiAgICAgICAgZG8gewogICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgICAgICAgaW5pdC5wdXNoKGV4cHJlc3Npb24pOwogICAgICAgIH0gd2hpbGUgKGNvbnN1bWUoJywnKSk7CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMuc2NvcGUpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHZhcmlhYmxlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgIHNjb3BlSWRlbnRpZmllcih2YXJpYWJsZXNbaV0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIGZpbmlzaE5vZGUoYXN0LmxvY2FsU3RhdGVtZW50KHZhcmlhYmxlcywgaW5pdCkpOwogICAgfQogICAgaWYgKGNvbnN1bWUoJ2Z1bmN0aW9uJykpIHsKICAgICAgbmFtZSA9IHBhcnNlSWRlbnRpZmllcigpOwogICAgICBpZiAob3B0aW9ucy5zY29wZSkgc2NvcGVJZGVudGlmaWVyKG5hbWUpOwogICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKG5hbWUsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgcmFpc2VVbmV4cGVjdGVkVG9rZW4oJzxuYW1lPicsIHRva2VuKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlQXNzaWdubWVudE9yQ2FsbFN0YXRlbWVudCgpIHsKICAgIHZhciBwcmV2aW91cyA9IHRva2VuCiAgICAgICwgZXhwcmVzc2lvbiwgbWFya2VyOwoKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbWFya2VyID0gY3JlYXRlTG9jYXRpb25NYXJrZXIoKTsKICAgIGV4cHJlc3Npb24gPSBwYXJzZVByZWZpeEV4cHJlc3Npb24oKTsKCiAgICBpZiAobnVsbCA9PSBleHByZXNzaW9uKSByZXR1cm4gdW5leHBlY3RlZCh0b2tlbik7CiAgICBpZiAoJyw9Jy5pbmRleE9mKHRva2VuLnZhbHVlKSA+PSAwKSB7CiAgICAgIHZhciB2YXJpYWJsZXMgPSBbZXhwcmVzc2lvbl0KICAgICAgICAsIGluaXQgPSBbXQogICAgICAgICwgZXhwOwoKICAgICAgd2hpbGUgKGNvbnN1bWUoJywnKSkgewogICAgICAgIGV4cCA9IHBhcnNlUHJlZml4RXhwcmVzc2lvbigpOwogICAgICAgIGlmIChudWxsID09IGV4cCkgcmFpc2VVbmV4cGVjdGVkVG9rZW4oJzxleHByZXNzaW9uPicsIHRva2VuKTsKICAgICAgICB2YXJpYWJsZXMucHVzaChleHApOwogICAgICB9CiAgICAgIGV4cGVjdCgnPScpOwogICAgICBkbyB7CiAgICAgICAgZXhwID0gcGFyc2VFeHBlY3RlZEV4cHJlc3Npb24oKTsKICAgICAgICBpbml0LnB1c2goZXhwKTsKICAgICAgfSB3aGlsZSAoY29uc3VtZSgnLCcpKTsKCiAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuYXNzaWdubWVudFN0YXRlbWVudCh2YXJpYWJsZXMsIGluaXQpKTsKICAgIH0KICAgIGlmIChpc0NhbGxFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7CiAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuY2FsbFN0YXRlbWVudChleHByZXNzaW9uKSk7CiAgICB9CiAgICByZXR1cm4gdW5leHBlY3RlZChwcmV2aW91cyk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUlkZW50aWZpZXIoKSB7CiAgICBtYXJrTG9jYXRpb24oKTsKICAgIHZhciBpZGVudGlmaWVyID0gdG9rZW4udmFsdWU7CiAgICBpZiAoSWRlbnRpZmllciAhPT0gdG9rZW4udHlwZSkgcmFpc2VVbmV4cGVjdGVkVG9rZW4oJzxuYW1lPicsIHRva2VuKTsKICAgIG5leHQoKTsKICAgIHJldHVybiBmaW5pc2hOb2RlKGFzdC5pZGVudGlmaWVyKGlkZW50aWZpZXIpKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihuYW1lLCBpc0xvY2FsKSB7CiAgICB2YXIgcGFyYW1ldGVycyA9IFtdOwogICAgZXhwZWN0KCcoJyk7CiAgICBpZiAoIWNvbnN1bWUoJyknKSkgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmIChJZGVudGlmaWVyID09PSB0b2tlbi50eXBlKSB7CiAgICAgICAgICB2YXIgcGFyYW1ldGVyID0gcGFyc2VJZGVudGlmaWVyKCk7CiAgICAgICAgICBpZiAob3B0aW9ucy5zY29wZSkgc2NvcGVJZGVudGlmaWVyKHBhcmFtZXRlcik7CgogICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7CgogICAgICAgICAgaWYgKGNvbnN1bWUoJywnKSkgY29udGludWU7CiAgICAgICAgICBlbHNlIGlmIChjb25zdW1lKCcpJykpIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChWYXJhcmdMaXRlcmFsID09PSB0b2tlbi50eXBlKSB7CiAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2gocGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpKTsKICAgICAgICAgIGV4cGVjdCgnKScpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJhaXNlVW5leHBlY3RlZFRva2VuKCc8bmFtZT4gb3IgXCcuLi5cJycsIHRva2VuKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB2YXIgYm9keSA9IHBhcnNlQmxvY2soKTsKICAgIGV4cGVjdCgnZW5kJyk7CgogICAgaXNMb2NhbCA9IGlzTG9jYWwgfHwgZmFsc2U7CiAgICByZXR1cm4gZmluaXNoTm9kZShhc3QuZnVuY3Rpb25TdGF0ZW1lbnQobmFtZSwgcGFyYW1ldGVycywgaXNMb2NhbCwgYm9keSkpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbk5hbWUoKSB7CiAgICB2YXIgYmFzZSwgbmFtZSwgbWFya2VyOwoKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbWFya2VyID0gY3JlYXRlTG9jYXRpb25NYXJrZXIoKTsKICAgIGJhc2UgPSBwYXJzZUlkZW50aWZpZXIoKTsKCiAgICBpZiAob3B0aW9ucy5zY29wZSkgYXR0YWNoU2NvcGUoYmFzZSwgZmFsc2UpOwoKICAgIHdoaWxlIChjb25zdW1lKCcuJykpIHsKICAgICAgcHVzaExvY2F0aW9uKG1hcmtlcik7CiAgICAgIG5hbWUgPSBwYXJzZUlkZW50aWZpZXIoKTsKICAgICAgaWYgKG9wdGlvbnMuc2NvcGUpIGF0dGFjaFNjb3BlKG5hbWUsIGZhbHNlKTsKICAgICAgYmFzZSA9IGZpbmlzaE5vZGUoYXN0Lm1lbWJlckV4cHJlc3Npb24oYmFzZSwgJy4nLCBuYW1lKSk7CiAgICB9CgogICAgaWYgKGNvbnN1bWUoJzonKSkgewogICAgICBwdXNoTG9jYXRpb24obWFya2VyKTsKICAgICAgbmFtZSA9IHBhcnNlSWRlbnRpZmllcigpOwogICAgICBpZiAob3B0aW9ucy5zY29wZSkgYXR0YWNoU2NvcGUobmFtZSwgZmFsc2UpOwogICAgICBiYXNlID0gZmluaXNoTm9kZShhc3QubWVtYmVyRXhwcmVzc2lvbihiYXNlLCAnOicsIG5hbWUpKTsKICAgIH0KCiAgICByZXR1cm4gYmFzZTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlVGFibGVDb25zdHJ1Y3RvcigpIHsKICAgIHZhciBmaWVsZHMgPSBbXQogICAgICAsIGtleSwgdmFsdWU7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgbWFya0xvY2F0aW9uKCk7CiAgICAgIGlmIChQdW5jdHVhdG9yID09PSB0b2tlbi50eXBlICYmIGNvbnN1bWUoJ1snKSkgewogICAgICAgIGtleSA9IHBhcnNlRXhwZWN0ZWRFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwZWN0KCddJyk7CiAgICAgICAgZXhwZWN0KCc9Jyk7CiAgICAgICAgdmFsdWUgPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgICAgIGZpZWxkcy5wdXNoKGZpbmlzaE5vZGUoYXN0LnRhYmxlS2V5KGtleSwgdmFsdWUpKSk7CiAgICAgIH0gZWxzZSBpZiAoSWRlbnRpZmllciA9PT0gdG9rZW4udHlwZSkgewogICAgICAgIGtleSA9IHBhcnNlRXhwZWN0ZWRFeHByZXNzaW9uKCk7CiAgICAgICAgaWYgKGNvbnN1bWUoJz0nKSkgewogICAgICAgICAgdmFsdWUgPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgICAgICAgZmllbGRzLnB1c2goZmluaXNoTm9kZShhc3QudGFibGVLZXlTdHJpbmcoa2V5LCB2YWx1ZSkpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmllbGRzLnB1c2goZmluaXNoTm9kZShhc3QudGFibGVWYWx1ZShrZXkpKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChudWxsID09ICh2YWx1ZSA9IHBhcnNlRXhwcmVzc2lvbigpKSkgewogICAgICAgICAgbG9jYXRpb25zLnBvcCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGZpZWxkcy5wdXNoKGZpbmlzaE5vZGUoYXN0LnRhYmxlVmFsdWUodmFsdWUpKSk7CiAgICAgIH0KICAgICAgaWYgKCcsOycuaW5kZXhPZih0b2tlbi52YWx1ZSkgPj0gMCkgewogICAgICAgIG5leHQoKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoJ30nID09PSB0b2tlbi52YWx1ZSkgYnJlYWs7CiAgICB9CiAgICBleHBlY3QoJ30nKTsKICAgIHJldHVybiBmaW5pc2hOb2RlKGFzdC50YWJsZUNvbnN0cnVjdG9yRXhwcmVzc2lvbihmaWVsZHMpKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigpIHsKICAgIHZhciBleHByZXNzaW9uID0gcGFyc2VTdWJFeHByZXNzaW9uKDApOwogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBmdW5jdGlvbiBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpIHsKICAgIHZhciBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBpZiAobnVsbCA9PSBleHByZXNzaW9uKSByYWlzZVVuZXhwZWN0ZWRUb2tlbignPGV4cHJlc3Npb24+JywgdG9rZW4pOwogICAgZWxzZSByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIGZ1bmN0aW9uIGJpbmFyeVByZWNlZGVuY2Uob3BlcmF0b3IpIHsKICAgIHZhciBjaGFyQ29kZSA9IG9wZXJhdG9yLmNoYXJDb2RlQXQoMCkKICAgICAgLCBsZW5ndGggPSBvcGVyYXRvci5sZW5ndGg7CgogICAgaWYgKDEgPT09IGxlbmd0aCkgewogICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgICAgY2FzZSA5NDogcmV0dXJuIDEwOyAvLyBeCiAgICAgICAgY2FzZSA0MjogY2FzZSA0NzogY2FzZSAzNzogcmV0dXJuIDc7IC8vICogLyAlCiAgICAgICAgY2FzZSA0MzogY2FzZSA0NTogcmV0dXJuIDY7IC8vICsgLQogICAgICAgIGNhc2UgNjA6IGNhc2UgNjI6IHJldHVybiAzOyAvLyA8ID4KICAgICAgICBjYXNlIDM4OiBjYXNlIDEyNDogcmV0dXJuIDc7IC8vICYgfAogICAgICB9CiAgICB9IGVsc2UgaWYgKDIgPT09IGxlbmd0aCkgewogICAgICBzd2l0Y2ggKGNoYXJDb2RlKSB7CiAgICAgICAgY2FzZSA0NjogcmV0dXJuIDU7IC8vIC4uCiAgICAgICAgY2FzZSA2MDogY2FzZSA2MjogY2FzZSA2MTogY2FzZSAxMjY6IHJldHVybiAzOyAvLyA8PSA+PSA9PSB+PQogICAgICAgIGNhc2UgMTExOiByZXR1cm4gMTsgLy8gb3IKICAgICAgfQogICAgfSBlbHNlIGlmICg5NyA9PT0gY2hhckNvZGUgJiYgJ2FuZCcgPT09IG9wZXJhdG9yKSByZXR1cm4gMjsKICAgIHJldHVybiAwOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VTdWJFeHByZXNzaW9uKG1pblByZWNlZGVuY2UpIHsKICAgIHZhciBvcGVyYXRvciA9IHRva2VuLnZhbHVlCiAgICAgICwgZXhwcmVzc2lvbiwgbWFya2VyOwoKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbWFya2VyID0gY3JlYXRlTG9jYXRpb25NYXJrZXIoKTsKICAgIGlmIChpc1VuYXJ5KHRva2VuKSkgewogICAgICBtYXJrTG9jYXRpb24oKTsKICAgICAgbmV4dCgpOwogICAgICB2YXIgYXJndW1lbnQgPSBwYXJzZVN1YkV4cHJlc3Npb24oOCk7CiAgICAgIGlmIChhcmd1bWVudCA9PSBudWxsKSByYWlzZVVuZXhwZWN0ZWRUb2tlbignPGV4cHJlc3Npb24+JywgdG9rZW4pOwogICAgICBleHByZXNzaW9uID0gZmluaXNoTm9kZShhc3QudW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBhcmd1bWVudCkpOwogICAgfQogICAgaWYgKG51bGwgPT0gZXhwcmVzc2lvbikgewogICAgICBleHByZXNzaW9uID0gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpOwogICAgICBpZiAobnVsbCA9PSBleHByZXNzaW9uKSB7CiAgICAgICAgZXhwcmVzc2lvbiA9IHBhcnNlUHJlZml4RXhwcmVzc2lvbigpOwogICAgICB9CiAgICB9CiAgICBpZiAobnVsbCA9PSBleHByZXNzaW9uKSByZXR1cm4gbnVsbDsKCiAgICB2YXIgcHJlY2VkZW5jZTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIG9wZXJhdG9yID0gdG9rZW4udmFsdWU7CgogICAgICBwcmVjZWRlbmNlID0gKFB1bmN0dWF0b3IgPT09IHRva2VuLnR5cGUgfHwgS2V5d29yZCA9PT0gdG9rZW4udHlwZSkgPwogICAgICAgIGJpbmFyeVByZWNlZGVuY2Uob3BlcmF0b3IpIDogMDsKCiAgICAgIGlmIChwcmVjZWRlbmNlID09PSAwIHx8IHByZWNlZGVuY2UgPD0gbWluUHJlY2VkZW5jZSkgYnJlYWs7CiAgICAgIGlmICgnXicgPT09IG9wZXJhdG9yIHx8ICcuLicgPT09IG9wZXJhdG9yKSBwcmVjZWRlbmNlLS07CiAgICAgIG5leHQoKTsKICAgICAgdmFyIHJpZ2h0ID0gcGFyc2VTdWJFeHByZXNzaW9uKHByZWNlZGVuY2UpOwogICAgICBpZiAobnVsbCA9PSByaWdodCkgcmFpc2VVbmV4cGVjdGVkVG9rZW4oJzxleHByZXNzaW9uPicsIHRva2VuKTsKICAgICAgaWYgKHRyYWNrTG9jYXRpb25zKSBsb2NhdGlvbnMucHVzaChtYXJrZXIpOwogICAgICBleHByZXNzaW9uID0gZmluaXNoTm9kZShhc3QuYmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvciwgZXhwcmVzc2lvbiwgcmlnaHQpKTsKCiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIGZ1bmN0aW9uIHBhcnNlUHJlZml4RXhwcmVzc2lvbigpIHsKICAgIHZhciBiYXNlLCBuYW1lLCBtYXJrZXIKICAgICAgLCBpc0xvY2FsOwoKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbWFya2VyID0gY3JlYXRlTG9jYXRpb25NYXJrZXIoKTsKICAgIGlmIChJZGVudGlmaWVyID09PSB0b2tlbi50eXBlKSB7CiAgICAgIG5hbWUgPSB0b2tlbi52YWx1ZTsKICAgICAgYmFzZSA9IHBhcnNlSWRlbnRpZmllcigpOwogICAgICBpZiAob3B0aW9ucy5zY29wZSkgYXR0YWNoU2NvcGUoYmFzZSwgaXNMb2NhbCA9IHNjb3BlSGFzTmFtZShuYW1lKSk7CiAgICB9IGVsc2UgaWYgKGNvbnN1bWUoJygnKSkgewogICAgICBiYXNlID0gcGFyc2VFeHBlY3RlZEV4cHJlc3Npb24oKTsKICAgICAgZXhwZWN0KCcpJyk7CiAgICAgIGlmIChvcHRpb25zLnNjb3BlKSBpc0xvY2FsID0gYmFzZS5pc0xvY2FsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgZXhwcmVzc2lvbiwgaWRlbnRpZmllcjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChQdW5jdHVhdG9yID09PSB0b2tlbi50eXBlKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkgewogICAgICAgICAgY2FzZSAnWyc6CiAgICAgICAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgICAgICAgICBiYXNlID0gZmluaXNoTm9kZShhc3QuaW5kZXhFeHByZXNzaW9uKGJhc2UsIGV4cHJlc3Npb24pKTsKICAgICAgICAgICAgZXhwZWN0KCddJyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnLic6CiAgICAgICAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZUlkZW50aWZpZXIoKTsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2NvcGUpIGF0dGFjaFNjb3BlKGlkZW50aWZpZXIsIGlzTG9jYWwpOwogICAgICAgICAgICBiYXNlID0gZmluaXNoTm9kZShhc3QubWVtYmVyRXhwcmVzc2lvbihiYXNlLCAnLicsIGlkZW50aWZpZXIpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICc6JzoKICAgICAgICAgICAgcHVzaExvY2F0aW9uKG1hcmtlcik7CiAgICAgICAgICAgIG5leHQoKTsKICAgICAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlSWRlbnRpZmllcigpOwogICAgICAgICAgICBpZiAob3B0aW9ucy5zY29wZSkgYXR0YWNoU2NvcGUoaWRlbnRpZmllciwgaXNMb2NhbCk7CiAgICAgICAgICAgIGJhc2UgPSBmaW5pc2hOb2RlKGFzdC5tZW1iZXJFeHByZXNzaW9uKGJhc2UsICc6JywgaWRlbnRpZmllcikpOwogICAgICAgICAgICBwdXNoTG9jYXRpb24obWFya2VyKTsKICAgICAgICAgICAgYmFzZSA9IHBhcnNlQ2FsbEV4cHJlc3Npb24oYmFzZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnKCc6IGNhc2UgJ3snOiAvLyBhcmdzCiAgICAgICAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICAgICAgICBiYXNlID0gcGFyc2VDYWxsRXhwcmVzc2lvbihiYXNlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gYmFzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoU3RyaW5nTGl0ZXJhbCA9PT0gdG9rZW4udHlwZSkgewogICAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICAgIGJhc2UgPSBwYXJzZUNhbGxFeHByZXNzaW9uKGJhc2UpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGJhc2U7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUNhbGxFeHByZXNzaW9uKGJhc2UpIHsKICAgIGlmIChQdW5jdHVhdG9yID09PSB0b2tlbi50eXBlKSB7CiAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUpIHsKICAgICAgICBjYXNlICcoJzoKICAgICAgICAgIG5leHQoKTsKICAgICAgICAgIHZhciBleHByZXNzaW9ucyA9IFtdOwogICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICAgIGlmIChudWxsICE9IGV4cHJlc3Npb24pIGV4cHJlc3Npb25zLnB1c2goZXhwcmVzc2lvbik7CiAgICAgICAgICB3aGlsZSAoY29uc3VtZSgnLCcpKSB7CiAgICAgICAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cGVjdGVkRXhwcmVzc2lvbigpOwogICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKGV4cHJlc3Npb24pOwogICAgICAgICAgfQoKICAgICAgICAgIGV4cGVjdCgnKScpOwogICAgICAgICAgcmV0dXJuIGZpbmlzaE5vZGUoYXN0LmNhbGxFeHByZXNzaW9uKGJhc2UsIGV4cHJlc3Npb25zKSk7CgogICAgICAgIGNhc2UgJ3snOgogICAgICAgICAgbWFya0xvY2F0aW9uKCk7CiAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICB2YXIgdGFibGUgPSBwYXJzZVRhYmxlQ29uc3RydWN0b3IoKTsKICAgICAgICAgIHJldHVybiBmaW5pc2hOb2RlKGFzdC50YWJsZUNhbGxFeHByZXNzaW9uKGJhc2UsIHRhYmxlKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoU3RyaW5nTGl0ZXJhbCA9PT0gdG9rZW4udHlwZSkgewogICAgICByZXR1cm4gZmluaXNoTm9kZShhc3Quc3RyaW5nQ2FsbEV4cHJlc3Npb24oYmFzZSwgcGFyc2VQcmltYXJ5RXhwcmVzc2lvbigpKSk7CiAgICB9CgogICAgcmFpc2VVbmV4cGVjdGVkVG9rZW4oJ2Z1bmN0aW9uIGFyZ3VtZW50cycsIHRva2VuKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24oKSB7CiAgICB2YXIgbGl0ZXJhbHMgPSBTdHJpbmdMaXRlcmFsIHwgTnVtZXJpY0xpdGVyYWwgfCBCb29sZWFuTGl0ZXJhbCB8IE5pbExpdGVyYWwgfCBWYXJhcmdMaXRlcmFsCiAgICAgICwgdmFsdWUgPSB0b2tlbi52YWx1ZQogICAgICAsIHR5cGUgPSB0b2tlbi50eXBlCiAgICAgICwgbWFya2VyOwoKICAgIGlmICh0cmFja0xvY2F0aW9ucykgbWFya2VyID0gY3JlYXRlTG9jYXRpb25NYXJrZXIoKTsKCiAgICBpZiAodHlwZSAmIGxpdGVyYWxzKSB7CiAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICB2YXIgcmF3ID0gaW5wdXQuc2xpY2UodG9rZW4ucmFuZ2VbMF0sIHRva2VuLnJhbmdlWzFdKTsKICAgICAgbmV4dCgpOwogICAgICByZXR1cm4gZmluaXNoTm9kZShhc3QubGl0ZXJhbCh0eXBlLCB2YWx1ZSwgcmF3KSk7CiAgICB9IGVsc2UgaWYgKEtleXdvcmQgPT09IHR5cGUgJiYgJ2Z1bmN0aW9uJyA9PT0gdmFsdWUpIHsKICAgICAgcHVzaExvY2F0aW9uKG1hcmtlcik7CiAgICAgIG5leHQoKTsKICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbihudWxsKTsKICAgIH0gZWxzZSBpZiAoY29uc3VtZSgneycpKSB7CiAgICAgIHB1c2hMb2NhdGlvbihtYXJrZXIpOwogICAgICByZXR1cm4gcGFyc2VUYWJsZUNvbnN0cnVjdG9yKCk7CiAgICB9CiAgfQoKICBleHBvcnRzLnBhcnNlID0gcGFyc2U7CgogIGZ1bmN0aW9uIHBhcnNlKF9pbnB1dCwgX29wdGlvbnMpIHsKICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIF9vcHRpb25zICYmICdvYmplY3QnID09PSB0eXBlb2YgX2lucHV0KSB7CiAgICAgIF9vcHRpb25zID0gX2lucHV0OwogICAgICBfaW5wdXQgPSB1bmRlZmluZWQ7CiAgICB9CiAgICBpZiAoIV9vcHRpb25zKSBfb3B0aW9ucyA9IHt9OwoKICAgIGlucHV0ID0gX2lucHV0IHx8ICcnOwogICAgb3B0aW9ucyA9IGV4dGVuZChkZWZhdWx0T3B0aW9ucywgX29wdGlvbnMpOwogICAgaW5kZXggPSAwOwogICAgbGluZSA9IDE7CiAgICBsaW5lU3RhcnQgPSAwOwogICAgbGVuZ3RoID0gaW5wdXQubGVuZ3RoOwogICAgc2NvcGVzID0gW1tdXTsKICAgIHNjb3BlRGVwdGggPSAwOwogICAgZ2xvYmFscyA9IFtdOwogICAgbG9jYXRpb25zID0gW107CgogICAgaWYgKG9wdGlvbnMuY29tbWVudHMpIGNvbW1lbnRzID0gW107CiAgICBpZiAoIW9wdGlvbnMud2FpdCkgcmV0dXJuIGVuZCgpOwogICAgcmV0dXJuIGV4cG9ydHM7CiAgfQogIGV4cG9ydHMud3JpdGUgPSB3cml0ZTsKCiAgZnVuY3Rpb24gd3JpdGUoX2lucHV0KSB7CiAgICBpbnB1dCArPSBTdHJpbmcoX2lucHV0KTsKICAgIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDsKICAgIHJldHVybiBleHBvcnRzOwogIH0KICBleHBvcnRzLmVuZCA9IGVuZDsKCiAgZnVuY3Rpb24gZW5kKF9pbnB1dCkgewogICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgX2lucHV0KSB3cml0ZShfaW5wdXQpOwoKICAgIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDsKICAgIHRyYWNrTG9jYXRpb25zID0gb3B0aW9ucy5sb2NhdGlvbnMgfHwgb3B0aW9ucy5yYW5nZXM7CiAgICBsb29rYWhlYWQgPSBsZXgoKTsKCiAgICB2YXIgY2h1bmsgPSBwYXJzZUNodW5rKCk7CiAgICBpZiAob3B0aW9ucy5jb21tZW50cykgY2h1bmsuY29tbWVudHMgPSBjb21tZW50czsKICAgIGlmIChvcHRpb25zLnNjb3BlKSBjaHVuay5nbG9iYWxzID0gZ2xvYmFsczsKCiAgICBpZiAobG9jYXRpb25zLmxlbmd0aCA+IDApCiAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYXRpb24gdHJhY2tpbmcgZmFpbGVkLiBUaGlzIGlzIG1vc3QgbGlrZWx5IGEgYnVnIGluIGx1YXBhcnNlJyk7CgogICAgcmV0dXJuIGNodW5rOwogIH0KCn0pKTsKCn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9sdWFfd29ya2VyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBNaXJyb3IgPSByZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yOwp2YXIgbHVhcGFyc2UgPSByZXF1aXJlKCIuLi9tb2RlL2x1YS9sdWFwYXJzZSIpOwoKdmFyIFdvcmtlciA9IGV4cG9ydHMuV29ya2VyID0gZnVuY3Rpb24oc2VuZGVyKSB7CiAgICBNaXJyb3IuY2FsbCh0aGlzLCBzZW5kZXIpOwogICAgdGhpcy5zZXRUaW1lb3V0KDUwMCk7Cn07Cgpvb3AuaW5oZXJpdHMoV29ya2VyLCBNaXJyb3IpOwoKKGZ1bmN0aW9uKCkgewoKICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRvYy5nZXRWYWx1ZSgpOwogICAgICAgIHZhciBlcnJvcnMgPSBbXTsKICAgICAgICB0cnkgewogICAgICAgICAgICBsdWFwYXJzZS5wYXJzZSh2YWx1ZSk7CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICByb3c6IGUubGluZSAtIDEsCiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBlLmNvbHVtbiwKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlLm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5zZW5kZXIuZW1pdCgiYW5ub3RhdGUiLCBlcnJvcnMpOwogICAgfTsKCn0pLmNhbGwoV29ya2VyLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL2xpYi9lczUtc2hpbSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZnVuY3Rpb24gRW1wdHkoKSB7fQoKaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgewogICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsCiAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewoKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGF0LAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgICAgaWYodGFyZ2V0LnByb3RvdHlwZSkgewogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOwogICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJvdW5kOwogICAgfTsKfQp2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKdmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKdmFyIHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5zbGljZTsKdmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7CnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKdmFyIGRlZmluZUdldHRlcjsKdmFyIGRlZmluZVNldHRlcjsKdmFyIGxvb2t1cEdldHRlcjsKdmFyIGxvb2t1cFNldHRlcjsKdmFyIHN1cHBvcnRzQWNjZXNzb3JzOwppZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTsKICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRlcl9fKTsKICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKfQppZiAoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCAhPSAyKSB7CiAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4CiAgICAgICAgZnVuY3Rpb24gbWFrZUFycmF5KGwpIHsKICAgICAgICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobCsyKTsKICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwOwogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9CiAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTsKICAgICAgICAKICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksIG1ha2VBcnJheSgyMCkpOwogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7CgogICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxlbmd0aDsgLy80NgogICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCAiWFhYIik7IC8vIGFkZCBvbmUgZWxlbWVudAoKICAgICAgICBsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aAoKICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7Ly8gaGFzIHJpZ2h0IHNwbGljZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGJ1Z3MKICAgICAgICB9CiAgICB9KCkpIHsvL0lFIDYvNwogICAgICAgIHZhciBhcnJheV9zcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOwogICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIFsKICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0LAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2b2lkIDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVDb3VudAogICAgICAgICAgICAgICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSkKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2Ugey8vSUU4CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHBvcywgcmVtb3ZlQ291bnQpewogICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7CiAgICAgICAgICAgICAgICBpZiAocG9zID4gbGVuZ3RoKQogICAgICAgICAgICAgICAgICAgIHBvcyA9IGxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICBwb3MgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpCiAgICAgICAgICAgICAgICByZW1vdmVDb3VudCA9IGxlbmd0aCAtIHBvczsKCiAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7CiAgICAgICAgICAgIHZhciBpbnNlcnQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgICAgICAgIHZhciBhZGQgPSBpbnNlcnQubGVuZ3RoOyAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBNYXRoLm1pbihyZW1vdmVDb3VudCwgbGVuZ3RoIC0gcG9zKTsKICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9zICsgcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxOZXdQb3MgPSB0YWlsT2xkUG9zICsgYWRkIC0gcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxDb3VudCA9IGxlbmd0aCAtIHRhaWxPbGRQb3M7CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5ndGggLSByZW1vdmU7CgogICAgICAgICAgICAgICAgaWYgKHRhaWxOZXdQb3MgPCB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbENvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBCCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gdGFpbENvdW50OyBpLS07ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBlbHNlLCBhZGQgPT0gcmVtb3ZlIChub3RoaW5nIHRvIGRvKQoKICAgICAgICAgICAgICAgIGlmIChhZGQgJiYgcG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmU7IC8vIHRydW5jYXRlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmUgKyBhZGQ7IC8vIHJlc2VydmVzIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ldID0gaW5zZXJ0W2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICAgICB9OwogICAgfQp9CmlmICghQXJyYXkuaXNBcnJheSkgewogICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CiAgICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CiAgICB9Owp9CnZhciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAogICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVkU3RyaW5nKTsKCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwKICAgICAgICAgICAgaSA9IC0xLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7CiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsKICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgcmVzdWx0ID0gW10sCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOwogICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgewogICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewogICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7CiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIHJlc3VsdDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICAgICB9CgogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChpLS0pOwoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mIHx8IChbMCwgMV0uaW5kZXhPZigxLCAyKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CgogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOwogICAgICAgIH0KICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOwogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7CiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7CiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoCiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/CiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgOgogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdAogICAgICAgICk7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgewogICAgdmFyIEVSUl9OT05fT0JKRUNUID0gIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLW9iamVjdDogIjsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7CiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsKICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CiAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CgogICAgICAgICAgICB2YXIgZ2V0dGVyID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwoKICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChnZXR0ZXIpIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOwogICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3JpcHRvci5zZXQgPSBzZXR0ZXI7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgewogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgewogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgfTsKfQppZiAoIU9iamVjdC5jcmVhdGUpIHsKICAgIHZhciBjcmVhdGVFbXB0eTsKICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbCkgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVsbCB9OwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZW1wdHkgPSB7fTsKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBlbXB0eSkKICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDsKICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0b3IgPQogICAgICAgICAgICBlbXB0eS5oYXNPd25Qcm9wZXJ0eSA9CiAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID0KICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVPZiA9CiAgICAgICAgICAgIGVtcHR5LnRvTG9jYWxlU3RyaW5nID0KICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPQogICAgICAgICAgICBlbXB0eS52YWx1ZU9mID0KICAgICAgICAgICAgZW1wdHkuX19wcm90b19fID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5OwogICAgICAgIH0KICAgIH0KCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgewogICAgICAgIHZhciBvYmplY3Q7CiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOwogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQoKZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRpbmVsIiwge30pOwogICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgfQp9CmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsKICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICAgIH0KfQoKaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgogICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOwoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHsKICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKICAgICAgICBpZiAoKHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9ICJmdW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOwogICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CgogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJnZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgewogICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5zZWFsKSB7CiAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuZnJlZXplKSB7CiAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CnRyeSB7CiAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0pKE9iamVjdC5mcmVlemUpOwp9CmlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5pc1NlYWxlZCkgewogICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0Zyb3plbikgewogICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsKICAgIE9iamVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKICAgICAgICB9CiAgICAgICAgdmFyIG5hbWUgPSAnJzsKICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7CiAgICAgICAgICAgIG5hbWUgKz0gJz8nOwogICAgICAgIH0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOwogICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1lKTsKICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOwogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH07Cn0KaWYgKCFPYmplY3Qua2V5cykgewogICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKICAgICAgICBkb250RW51bXMgPSBbCiAgICAgICAgICAgICJ0b1N0cmluZyIsCiAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCiAgICAgICAgICAgICJ2YWx1ZU9mIiwKICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwKICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAogICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiLAogICAgICAgICAgICAiY29uc3RydWN0b3IiCiAgICAgICAgXSwKICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOwoKICAgIGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOwogICAgfQoKICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8CiAgICAgICAgICAgIG9iamVjdCA9PT0gbnVsbAogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIga2V5cyA9IFtdOwogICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7CiAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRvbnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsKICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9udEVudW0pKSB7CiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRFbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ga2V5czsKICAgIH07Cgp9CmlmICghRGF0ZS5ub3cpIHsKICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIH07Cn0KdmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKICAgICJcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgiICsKICAgICJcdTIwMjlcdUZFRkYiOwppZiAoIVN0cmluZy5wcm90b3R5cGUudHJpbSkgewogICAgd3MgPSAiWyIgKyB3cyArICJdIjsKICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAogICAgICAgIHRyaW1FbmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgIiIpOwogICAgfTsKfQoKZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKICAgIG4gPSArbjsKICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFOCiAgICAgICAgbiA9IDA7CiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CiAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTsKICAgIH0KICAgIHJldHVybiBuOwp9CgpmdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5wdXQ7CiAgICByZXR1cm4gKAogICAgICAgIGlucHV0ID09PSBudWxsIHx8CiAgICAgICAgdHlwZSA9PT0gInVuZGVmaW5lZCIgfHwKICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKICAgICAgICB0eXBlID09PSAibnVtYmVyIiB8fAogICAgICAgIHR5cGUgPT09ICJzdHJpbmciCiAgICApOwp9CgpmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHZhbCwgdmFsdWVPZiwgdG9TdHJpbmc7CiAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7CiAgICBpZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB2YWx1ZU9mLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZzsKICAgIGlmICh0eXBlb2YgdG9TdHJpbmcgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB0b1N0cmluZy5jYWxsKGlucHV0KTsKICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKfQp2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgewogICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOwogICAgfQogICAgcmV0dXJuIE9iamVjdChvKTsKfTsKCn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3BocC9waHAiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCnZhciBQSFAgPSB7Q29uc3RhbnRzOnt9fTsKClBIUC5Db25zdGFudHMuVF9JTkNMVURFID0gMjU3OwpQSFAuQ29uc3RhbnRzLlRfSU5DTFVERV9PTkNFID0gMjU4OwpQSFAuQ29uc3RhbnRzLlRfRVZBTCA9IDI1OTsKUEhQLkNvbnN0YW50cy5UX1JFUVVJUkUgPSAyNjA7ClBIUC5Db25zdGFudHMuVF9SRVFVSVJFX09OQ0UgPSAyNjE7ClBIUC5Db25zdGFudHMuVF9MT0dJQ0FMX09SID0gMjYyOwpQSFAuQ29uc3RhbnRzLlRfTE9HSUNBTF9YT1IgPSAyNjM7ClBIUC5Db25zdGFudHMuVF9MT0dJQ0FMX0FORCA9IDI2NDsKUEhQLkNvbnN0YW50cy5UX1BSSU5UID0gMjY1OwpQSFAuQ29uc3RhbnRzLlRfWUlFTEQgPSAyNjY7ClBIUC5Db25zdGFudHMuVF9ET1VCTEVfQVJST1cgPSAyNjc7ClBIUC5Db25zdGFudHMuVF9ZSUVMRF9GUk9NID0gMjY4OwpQSFAuQ29uc3RhbnRzLlRfUExVU19FUVVBTCA9IDI2OTsKUEhQLkNvbnN0YW50cy5UX01JTlVTX0VRVUFMID0gMjcwOwpQSFAuQ29uc3RhbnRzLlRfTVVMX0VRVUFMID0gMjcxOwpQSFAuQ29uc3RhbnRzLlRfRElWX0VRVUFMID0gMjcyOwpQSFAuQ29uc3RhbnRzLlRfQ09OQ0FUX0VRVUFMID0gMjczOwpQSFAuQ29uc3RhbnRzLlRfTU9EX0VRVUFMID0gMjc0OwpQSFAuQ29uc3RhbnRzLlRfQU5EX0VRVUFMID0gMjc1OwpQSFAuQ29uc3RhbnRzLlRfT1JfRVFVQUwgPSAyNzY7ClBIUC5Db25zdGFudHMuVF9YT1JfRVFVQUwgPSAyNzc7ClBIUC5Db25zdGFudHMuVF9TTF9FUVVBTCA9IDI3ODsKUEhQLkNvbnN0YW50cy5UX1NSX0VRVUFMID0gMjc5OwpQSFAuQ29uc3RhbnRzLlRfUE9XX0VRVUFMID0gMjgwOwpQSFAuQ29uc3RhbnRzLlRfQ09BTEVTQ0UgPSAyODE7ClBIUC5Db25zdGFudHMuVF9CT09MRUFOX09SID0gMjgyOwpQSFAuQ29uc3RhbnRzLlRfQk9PTEVBTl9BTkQgPSAyODM7ClBIUC5Db25zdGFudHMuVF9JU19FUVVBTCA9IDI4NDsKUEhQLkNvbnN0YW50cy5UX0lTX05PVF9FUVVBTCA9IDI4NTsKUEhQLkNvbnN0YW50cy5UX0lTX0lERU5USUNBTCA9IDI4NjsKUEhQLkNvbnN0YW50cy5UX0lTX05PVF9JREVOVElDQUwgPSAyODc7ClBIUC5Db25zdGFudHMuVF9TUEFDRVNISVAgPSAyODg7ClBIUC5Db25zdGFudHMuVF9JU19TTUFMTEVSX09SX0VRVUFMID0gMjg5OwpQSFAuQ29uc3RhbnRzLlRfSVNfR1JFQVRFUl9PUl9FUVVBTCA9IDI5MDsKUEhQLkNvbnN0YW50cy5UX1NMID0gMjkxOwpQSFAuQ29uc3RhbnRzLlRfU1IgPSAyOTI7ClBIUC5Db25zdGFudHMuVF9JTlNUQU5DRU9GID0gMjkzOwpQSFAuQ29uc3RhbnRzLlRfSU5DID0gMjk0OwpQSFAuQ29uc3RhbnRzLlRfREVDID0gMjk1OwpQSFAuQ29uc3RhbnRzLlRfSU5UX0NBU1QgPSAyOTY7ClBIUC5Db25zdGFudHMuVF9ET1VCTEVfQ0FTVCA9IDI5NzsKUEhQLkNvbnN0YW50cy5UX1NUUklOR19DQVNUID0gMjk4OwpQSFAuQ29uc3RhbnRzLlRfQVJSQVlfQ0FTVCA9IDI5OTsKUEhQLkNvbnN0YW50cy5UX09CSkVDVF9DQVNUID0gMzAwOwpQSFAuQ29uc3RhbnRzLlRfQk9PTF9DQVNUID0gMzAxOwpQSFAuQ29uc3RhbnRzLlRfVU5TRVRfQ0FTVCA9IDMwMjsKUEhQLkNvbnN0YW50cy5UX1BPVyA9IDMwMzsKUEhQLkNvbnN0YW50cy5UX05FVyA9IDMwNDsKUEhQLkNvbnN0YW50cy5UX0NMT05FID0gMzA1OwpQSFAuQ29uc3RhbnRzLlRfRVhJVCA9IDMwNjsKUEhQLkNvbnN0YW50cy5UX0lGID0gMzA3OwpQSFAuQ29uc3RhbnRzLlRfRUxTRUlGID0gMzA4OwpQSFAuQ29uc3RhbnRzLlRfRUxTRSA9IDMwOTsKUEhQLkNvbnN0YW50cy5UX0VORElGID0gMzEwOwpQSFAuQ29uc3RhbnRzLlRfTE5VTUJFUiA9IDMxMTsKUEhQLkNvbnN0YW50cy5UX0ROVU1CRVIgPSAzMTI7ClBIUC5Db25zdGFudHMuVF9TVFJJTkcgPSAzMTM7ClBIUC5Db25zdGFudHMuVF9TVFJJTkdfVkFSTkFNRSA9IDMxNDsKUEhQLkNvbnN0YW50cy5UX1ZBUklBQkxFID0gMzE1OwpQSFAuQ29uc3RhbnRzLlRfTlVNX1NUUklORyA9IDMxNjsKUEhQLkNvbnN0YW50cy5UX0lOTElORV9IVE1MID0gMzE3OwpQSFAuQ29uc3RhbnRzLlRfQ0hBUkFDVEVSID0gMzE4OwpQSFAuQ29uc3RhbnRzLlRfQkFEX0NIQVJBQ1RFUiA9IDMxOTsKUEhQLkNvbnN0YW50cy5UX0VOQ0FQU0VEX0FORF9XSElURVNQQUNFID0gMzIwOwpQSFAuQ29uc3RhbnRzLlRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HID0gMzIxOwpQSFAuQ29uc3RhbnRzLlRfRUNITyA9IDMyMjsKUEhQLkNvbnN0YW50cy5UX0RPID0gMzIzOwpQSFAuQ29uc3RhbnRzLlRfV0hJTEUgPSAzMjQ7ClBIUC5Db25zdGFudHMuVF9FTkRXSElMRSA9IDMyNTsKUEhQLkNvbnN0YW50cy5UX0ZPUiA9IDMyNjsKUEhQLkNvbnN0YW50cy5UX0VOREZPUiA9IDMyNzsKUEhQLkNvbnN0YW50cy5UX0ZPUkVBQ0ggPSAzMjg7ClBIUC5Db25zdGFudHMuVF9FTkRGT1JFQUNIID0gMzI5OwpQSFAuQ29uc3RhbnRzLlRfREVDTEFSRSA9IDMzMDsKUEhQLkNvbnN0YW50cy5UX0VORERFQ0xBUkUgPSAzMzE7ClBIUC5Db25zdGFudHMuVF9BUyA9IDMzMjsKUEhQLkNvbnN0YW50cy5UX1NXSVRDSCA9IDMzMzsKUEhQLkNvbnN0YW50cy5UX0VORFNXSVRDSCA9IDMzNDsKUEhQLkNvbnN0YW50cy5UX0NBU0UgPSAzMzU7ClBIUC5Db25zdGFudHMuVF9ERUZBVUxUID0gMzM2OwpQSFAuQ29uc3RhbnRzLlRfQlJFQUsgPSAzMzc7ClBIUC5Db25zdGFudHMuVF9DT05USU5VRSA9IDMzODsKUEhQLkNvbnN0YW50cy5UX0dPVE8gPSAzMzk7ClBIUC5Db25zdGFudHMuVF9GVU5DVElPTiA9IDM0MDsKUEhQLkNvbnN0YW50cy5UX0NPTlNUID0gMzQxOwpQSFAuQ29uc3RhbnRzLlRfUkVUVVJOID0gMzQyOwpQSFAuQ29uc3RhbnRzLlRfVFJZID0gMzQzOwpQSFAuQ29uc3RhbnRzLlRfQ0FUQ0ggPSAzNDQ7ClBIUC5Db25zdGFudHMuVF9GSU5BTExZID0gMzQ1OwpQSFAuQ29uc3RhbnRzLlRfVEhST1cgPSAzNDY7ClBIUC5Db25zdGFudHMuVF9VU0UgPSAzNDc7ClBIUC5Db25zdGFudHMuVF9JTlNURUFET0YgPSAzNDg7ClBIUC5Db25zdGFudHMuVF9HTE9CQUwgPSAzNDk7ClBIUC5Db25zdGFudHMuVF9TVEFUSUMgPSAzNTA7ClBIUC5Db25zdGFudHMuVF9BQlNUUkFDVCA9IDM1MTsKUEhQLkNvbnN0YW50cy5UX0ZJTkFMID0gMzUyOwpQSFAuQ29uc3RhbnRzLlRfUFJJVkFURSA9IDM1MzsKUEhQLkNvbnN0YW50cy5UX1BST1RFQ1RFRCA9IDM1NDsKUEhQLkNvbnN0YW50cy5UX1BVQkxJQyA9IDM1NTsKUEhQLkNvbnN0YW50cy5UX1ZBUiA9IDM1NjsKUEhQLkNvbnN0YW50cy5UX1VOU0VUID0gMzU3OwpQSFAuQ29uc3RhbnRzLlRfSVNTRVQgPSAzNTg7ClBIUC5Db25zdGFudHMuVF9FTVBUWSA9IDM1OTsKUEhQLkNvbnN0YW50cy5UX0hBTFRfQ09NUElMRVIgPSAzNjA7ClBIUC5Db25zdGFudHMuVF9DTEFTUyA9IDM2MTsKUEhQLkNvbnN0YW50cy5UX1RSQUlUID0gMzYyOwpQSFAuQ29uc3RhbnRzLlRfSU5URVJGQUNFID0gMzYzOwpQSFAuQ29uc3RhbnRzLlRfRVhURU5EUyA9IDM2NDsKUEhQLkNvbnN0YW50cy5UX0lNUExFTUVOVFMgPSAzNjU7ClBIUC5Db25zdGFudHMuVF9PQkpFQ1RfT1BFUkFUT1IgPSAzNjY7ClBIUC5Db25zdGFudHMuVF9MSVNUID0gMzY3OwpQSFAuQ29uc3RhbnRzLlRfQVJSQVkgPSAzNjg7ClBIUC5Db25zdGFudHMuVF9DQUxMQUJMRSA9IDM2OTsKUEhQLkNvbnN0YW50cy5UX0NMQVNTX0MgPSAzNzA7ClBIUC5Db25zdGFudHMuVF9UUkFJVF9DID0gMzcxOwpQSFAuQ29uc3RhbnRzLlRfTUVUSE9EX0MgPSAzNzI7ClBIUC5Db25zdGFudHMuVF9GVU5DX0MgPSAzNzM7ClBIUC5Db25zdGFudHMuVF9MSU5FID0gMzc0OwpQSFAuQ29uc3RhbnRzLlRfRklMRSA9IDM3NTsKUEhQLkNvbnN0YW50cy5UX0NPTU1FTlQgPSAzNzY7ClBIUC5Db25zdGFudHMuVF9ET0NfQ09NTUVOVCA9IDM3NzsKUEhQLkNvbnN0YW50cy5UX09QRU5fVEFHID0gMzc4OwpQSFAuQ29uc3RhbnRzLlRfT1BFTl9UQUdfV0lUSF9FQ0hPID0gMzc5OwpQSFAuQ29uc3RhbnRzLlRfQ0xPU0VfVEFHID0gMzgwOwpQSFAuQ29uc3RhbnRzLlRfV0hJVEVTUEFDRSA9IDM4MTsKUEhQLkNvbnN0YW50cy5UX1NUQVJUX0hFUkVET0MgPSAzODI7ClBIUC5Db25zdGFudHMuVF9FTkRfSEVSRURPQyA9IDM4MzsKUEhQLkNvbnN0YW50cy5UX0RPTExBUl9PUEVOX0NVUkxZX0JSQUNFUyA9IDM4NDsKUEhQLkNvbnN0YW50cy5UX0NVUkxZX09QRU4gPSAzODU7ClBIUC5Db25zdGFudHMuVF9QQUFNQVlJTV9ORUtVRE9UQVlJTSA9IDM4NjsKUEhQLkNvbnN0YW50cy5UX05BTUVTUEFDRSA9IDM4NzsKUEhQLkNvbnN0YW50cy5UX05TX0MgPSAzODg7ClBIUC5Db25zdGFudHMuVF9ESVIgPSAzODk7ClBIUC5Db25zdGFudHMuVF9OU19TRVBBUkFUT1IgPSAzOTA7ClBIUC5Db25zdGFudHMuVF9FTExJUFNJUyA9IDM5MTsKClBIUC5MZXhlciA9IGZ1bmN0aW9uKHNyYywgaW5pKSB7CiAgICB2YXIgaGVyZWRvYywgaGVyZWRvY0VuZEFsbG93ZWQsCgogICAgc3RhdGVTdGFjayA9IFsnSU5JVElBTCddLCBzdGFja1BvcyA9IDAsCiAgICBzd2FwU3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgIHN0YXRlU3RhY2tbc3RhY2tQb3NdID0gc3RhdGU7CiAgICB9LAogICAgcHVzaFN0YXRlID0gZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICBzdGF0ZVN0YWNrWysrc3RhY2tQb3NdID0gc3RhdGU7CiAgICB9LAogICAgcG9wU3RhdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAtLXN0YWNrUG9zOwogICAgfSwKCiAgICBzaG9ydE9wZW5UYWcgPSBpbmkgPT09IHVuZGVmaW5lZCB8fCAvXihvbnx0cnVlfDEpJC9pLnRlc3QoaW5pLnNob3J0X29wZW5fdGFnKSwKICAgIG9wZW5UYWcgPSBzaG9ydE9wZW5UYWcKICAgICAgICA/IC9eKFw8XD9waHAoPzpcclxufFsgXHRcclxuXSl8PFw/fFw8c2NyaXB0IGxhbmd1YWdlXD0oJ3wiKT9waHAoJ3wiKT9cPikvaQogICAgICAgIDogL14oXDxcP3BocCg/OlxyXG58WyBcdFxyXG5dKXxcPHNjcmlwdCBsYW5ndWFnZVw9KCd8Iik/cGhwKCd8Iik/XD4pL2ksCiAgICBpbmxpbmVIdG1sID0gc2hvcnRPcGVuVGFnCiAgICAgICAgPyAvW148XSooPzo8KD8hXD98c2NyaXB0IGxhbmd1YWdlXD0oJ3wiKT9waHAoJ3wiKT9cPilbXjxdKikqL2kKICAgICAgICA6IC9bXjxdKig/OjwoPyFcPz18XD9waHBbIFx0XHJcbl18c2NyaXB0IGxhbmd1YWdlXD0oJ3wiKT9waHAoJ3wiKT9cPilbXjxdKikqL2ksCiAgICBsYWJlbFJlZ2V4UGFydCA9ICdbYS16QS1aX1xceDdmLVxcdWZmZmZdW2EtekEtWjAtOV9cXHg3Zi1cXHVmZmZmXSonLAogICAgc3RyaW5nUmVnZXhQYXJ0ID0gZnVuY3Rpb24ocXVvdGUpIHsKICAgICAgICByZXR1cm4gJ1teJyArIHF1b3RlICsgJ1xcXFwke10qKD86KD86XFxcXFtcXHNcXFNdfFxcJCg/IVxce3xbYS16QS1aX1xceDdmLVxcdWZmZmZdKXxcXHsoPyFcXCQpKVteJyArIHF1b3RlICsgJ1xcXFwke10qKSonOwogICAgfSwKCiAgICBzaGFyZWRTdHJpbmdUb2tlbnMgPSBbCiAgICAgICAgewogICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1ZBUklBQkxFLAogICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXlxcJCcgKyBsYWJlbFJlZ2V4UGFydCArICcoPz1cXFspJyksCiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcHVzaFN0YXRlKCdWQVJfT0ZGU0VUJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9WQVJJQUJMRSwKICAgICAgICAgICAgcmU6IG5ldyBSZWdFeHAoJ15cXCQnICsgbGFiZWxSZWdleFBhcnQgKyAnKD89LT4nICsgbGFiZWxSZWdleFBhcnQgKyAnKScpLAogICAgICAgICAgICBmdW5jOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHB1c2hTdGF0ZSgnTE9PS0lOR19GT1JfUFJPUEVSVFknKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0RPTExBUl9PUEVOX0NVUkxZX0JSQUNFUywKICAgICAgICAgICAgcmU6IG5ldyBSZWdFeHAoJ15cXCRcXHsoPz0nICsgbGFiZWxSZWdleFBhcnQgKyAnW1xcW31dKScpLAogICAgICAgICAgICBmdW5jOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHB1c2hTdGF0ZSgnTE9PS0lOR19GT1JfVkFSTkFNRScpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVkFSSUFCTEUsCiAgICAgICAgICAgIHJlOiBuZXcgUmVnRXhwKCdeXFwkJyArIGxhYmVsUmVnZXhQYXJ0KQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0RPTExBUl9PUEVOX0NVUkxZX0JSQUNFUywKICAgICAgICAgICAgcmU6IC9eXCRcey8sCiAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcHVzaFN0YXRlKCdJTl9TQ1JJUFRJTkcnKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0NVUkxZX09QRU4sCiAgICAgICAgICAgIHJlOiAvXlx7KD89XCQpLywKICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBwdXNoU3RhdGUoJ0lOX1NDUklQVElORycpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgXSwKICAgIGRhdGEgPSB7CiAgICAgICAgJ0lOSVRJQUwnOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfT1BFTl9UQUdfV0lUSF9FQ0hPLAogICAgICAgICAgICAgICAgcmU6IC9ePFw/PS9pLAogICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc3dhcFN0YXRlKCdJTl9TQ1JJUFRJTkcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9PUEVOX1RBRywKICAgICAgICAgICAgICAgIHJlOiBvcGVuVGFnLAogICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc3dhcFN0YXRlKCdJTl9TQ1JJUFRJTkcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JTkxJTkVfSFRNTCwKICAgICAgICAgICAgICAgIHJlOiBpbmxpbmVIdG1sCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICAgICAnSU5fU0NSSVBUSU5HJzogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1dISVRFU1BBQ0UsCiAgICAgICAgICAgICAgICByZTogL15bIFxuXHJcdF0rLwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0FCU1RSQUNULAogICAgICAgICAgICAgICAgcmU6IC9eYWJzdHJhY3RcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTE9HSUNBTF9BTkQsCiAgICAgICAgICAgICAgICByZTogL15hbmRcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfQVJSQVksCiAgICAgICAgICAgICAgICByZTogL15hcnJheVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9BUywKICAgICAgICAgICAgICAgIHJlOiAvXmFzXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0JSRUFLLAogICAgICAgICAgICAgICAgcmU6IC9eYnJlYWtcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfQ0FMTEFCTEUsCiAgICAgICAgICAgICAgICByZTogL15jYWxsYWJsZVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DQVNFLAogICAgICAgICAgICAgICAgcmU6IC9eY2FzZVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DQVRDSCwKICAgICAgICAgICAgICAgIHJlOiAvXmNhdGNoXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0NMQVNTLAogICAgICAgICAgICAgICAgcmU6IC9eY2xhc3NcYi9pLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0NMT05FLAogICAgICAgICAgICAgICAgcmU6IC9eY2xvbmVcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfQ09OU1QsCiAgICAgICAgICAgICAgICByZTogL15jb25zdFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DT05USU5VRSwKICAgICAgICAgICAgICAgIHJlOiAvXmNvbnRpbnVlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0RFQ0xBUkUsCiAgICAgICAgICAgICAgICByZTogL15kZWNsYXJlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0RFRkFVTFQsCiAgICAgICAgICAgICAgICByZTogL15kZWZhdWx0XGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0RPLAogICAgICAgICAgICAgICAgcmU6IC9eZG9cYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRUNITywKICAgICAgICAgICAgICAgIHJlOiAvXmVjaG9cYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRUxTRSwKICAgICAgICAgICAgICAgIHJlOiAvXmVsc2VcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRUxTRUlGLAogICAgICAgICAgICAgICAgcmU6IC9eZWxzZWlmXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0VORERFQ0xBUkUsCiAgICAgICAgICAgICAgICByZTogL15lbmRkZWNsYXJlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0VOREZPUiwKICAgICAgICAgICAgICAgIHJlOiAvXmVuZGZvclxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FTkRGT1JFQUNILAogICAgICAgICAgICAgICAgcmU6IC9eZW5kZm9yZWFjaFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FTkRJRiwKICAgICAgICAgICAgICAgIHJlOiAvXmVuZGlmXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0VORFNXSVRDSCwKICAgICAgICAgICAgICAgIHJlOiAvXmVuZHN3aXRjaFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FTkRXSElMRSwKICAgICAgICAgICAgICAgIHJlOiAvXmVuZHdoaWxlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0VNUFRZLAogICAgICAgICAgICAgICAgcmU6IC9eZW1wdHlcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRVZBTCwKICAgICAgICAgICAgICAgIHJlOiAvXmV2YWxcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRVhJVCwKICAgICAgICAgICAgICAgIHJlOiAvXig/OmV4aXR8ZGllKVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FWFRFTkRTLAogICAgICAgICAgICAgICAgcmU6IC9eZXh0ZW5kc1xiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9GSU5BTCwKICAgICAgICAgICAgICAgIHJlOiAvXmZpbmFsXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0ZJTkFMTFksCiAgICAgICAgICAgICAgICByZTogL15maW5hbGx5XGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0ZPUiwKICAgICAgICAgICAgICAgIHJlOiAvXmZvclxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9GT1JFQUNILAogICAgICAgICAgICAgICAgcmU6IC9eZm9yZWFjaFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9GVU5DVElPTiwKICAgICAgICAgICAgICAgIHJlOiAvXmZ1bmN0aW9uXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0dMT0JBTCwKICAgICAgICAgICAgICAgIHJlOiAvXmdsb2JhbFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9HT1RPLAogICAgICAgICAgICAgICAgcmU6IC9eZ290b1xiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JRiwKICAgICAgICAgICAgICAgIHJlOiAvXmlmXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lNUExFTUVOVFMsCiAgICAgICAgICAgICAgICByZTogL15pbXBsZW1lbnRzXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lOQ0xVREUsCiAgICAgICAgICAgICAgICByZTogL15pbmNsdWRlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lOQ0xVREVfT05DRSwKICAgICAgICAgICAgICAgIHJlOiAvXmluY2x1ZGVfb25jZVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JTlNUQU5DRU9GLAogICAgICAgICAgICAgICAgcmU6IC9eaW5zdGFuY2VvZlxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JTlNURUFET0YsCiAgICAgICAgICAgICAgICByZTogL15pbnN0ZWFkb2ZcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfSU5URVJGQUNFLAogICAgICAgICAgICAgICAgcmU6IC9eaW50ZXJmYWNlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lTU0VULAogICAgICAgICAgICAgICAgcmU6IC9eaXNzZXRcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTElTVCwKICAgICAgICAgICAgICAgIHJlOiAvXmxpc3RcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTkFNRVNQQUNFLAogICAgICAgICAgICAgICAgcmU6IC9ebmFtZXNwYWNlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX05FVywKICAgICAgICAgICAgICAgIHJlOiAvXm5ld1xiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9MT0dJQ0FMX09SLAogICAgICAgICAgICAgICAgcmU6IC9eb3JcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfUFJJTlQsCiAgICAgICAgICAgICAgICByZTogL15wcmludFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9QUklWQVRFLAogICAgICAgICAgICAgICAgcmU6IC9ecHJpdmF0ZVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9QUk9URUNURUQsCiAgICAgICAgICAgICAgICByZTogL15wcm90ZWN0ZWRcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfUFVCTElDLAogICAgICAgICAgICAgICAgcmU6IC9ecHVibGljXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1JFUVVJUkUsCiAgICAgICAgICAgICAgICByZTogL15yZXF1aXJlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1JFUVVJUkVfT05DRSwKICAgICAgICAgICAgICAgIHJlOiAvXnJlcXVpcmVfb25jZVxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9TVEFUSUMsCiAgICAgICAgICAgICAgICByZTogL15zdGF0aWNcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfU1dJVENILAogICAgICAgICAgICAgICAgcmU6IC9ec3dpdGNoXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1RIUk9XLAogICAgICAgICAgICAgICAgcmU6IC9edGhyb3dcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVFJBSVQsCiAgICAgICAgICAgICAgICByZTogL150cmFpdFxiL2ksCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVFJZLAogICAgICAgICAgICAgICAgcmU6IC9edHJ5XGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1VOU0VULAogICAgICAgICAgICAgICAgcmU6IC9edW5zZXRcYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVVNFLAogICAgICAgICAgICAgICAgcmU6IC9edXNlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1ZBUiwKICAgICAgICAgICAgICAgIHJlOiAvXnZhclxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9XSElMRSwKICAgICAgICAgICAgICAgIHJlOiAvXndoaWxlXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0xPR0lDQUxfWE9SLAogICAgICAgICAgICAgICAgcmU6IC9eeG9yXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1lJRUxEX0ZST00sCiAgICAgICAgICAgICAgICByZTogL155aWVsZFxzK2Zyb21cYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfWUlFTEQsCiAgICAgICAgICAgICAgICByZTogL155aWVsZFxiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9SRVRVUk4sCiAgICAgICAgICAgICAgICByZTogL15yZXR1cm5cYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTUVUSE9EX0MsCiAgICAgICAgICAgICAgICByZTogL15fX01FVEhPRF9fXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0xJTkUsCiAgICAgICAgICAgICAgICByZTogL15fX0xJTkVfX1xiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9GSUxFLAogICAgICAgICAgICAgICAgcmU6IC9eX19GSUxFX19cYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRlVOQ19DLAogICAgICAgICAgICAgICAgcmU6IC9eX19GVU5DVElPTl9fXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX05TX0MsCiAgICAgICAgICAgICAgICByZTogL15fX05BTUVTUEFDRV9fXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1RSQUlUX0MsCiAgICAgICAgICAgICAgICByZTogL15fX1RSQUlUX19cYi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRElSLAogICAgICAgICAgICAgICAgcmU6IC9eX19ESVJfX1xiL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DTEFTU19DLAogICAgICAgICAgICAgICAgcmU6IC9eX19DTEFTU19fXGIvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0FORF9FUVVBTCwKICAgICAgICAgICAgICAgIHJlOiAvXiY9LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0FSUkFZX0NBU1QsCiAgICAgICAgICAgICAgICByZTogL15cKFsgXHRdKmFycmF5WyBcdF0qXCkvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0JPT0xfQ0FTVCwKICAgICAgICAgICAgICAgIHJlOiAvXlwoWyBcdF0qKD86Ym9vbHxib29sZWFuKVsgXHRdKlwpL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9ET1VCTEVfQ0FTVCwKICAgICAgICAgICAgICAgIHJlOiAvXlwoWyBcdF0qKD86cmVhbHxmbG9hdHxkb3VibGUpWyBcdF0qXCkvaQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lOVF9DQVNULAogICAgICAgICAgICAgICAgcmU6IC9eXChbIFx0XSooPzppbnR8aW50ZWdlcilbIFx0XSpcKS9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfT0JKRUNUX0NBU1QsCiAgICAgICAgICAgICAgICByZTogL15cKFsgXHRdKm9iamVjdFsgXHRdKlwpL2kKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9TVFJJTkdfQ0FTVCwKICAgICAgICAgICAgICAgIHJlOiAvXlwoWyBcdF0qKD86YmluYXJ5fHN0cmluZylbIFx0XSpcKS9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVU5TRVRfQ0FTVCwKICAgICAgICAgICAgICAgIHJlOiAvXlwoWyBcdF0qdW5zZXRbIFx0XSpcKS9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfQk9PTEVBTl9BTkQsCiAgICAgICAgICAgICAgICByZTogL14mJi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9CT09MRUFOX09SLAogICAgICAgICAgICAgICAgcmU6IC9eXHxcfC8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DTE9TRV9UQUcsCiAgICAgICAgICAgICAgICByZTogL14oPzpcPz58PFwvc2NyaXB0PikoXHJcbnxccnxcbik/L2ksCiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBzd2FwU3RhdGUoJ0lOSVRJQUwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9ET1VCTEVfQVJST1csCiAgICAgICAgICAgICAgICByZTogL149Pi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9QQUFNQVlJTV9ORUtVRE9UQVlJTSwKICAgICAgICAgICAgICAgIHJlOiAvXjo6LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lOQywKICAgICAgICAgICAgICAgIHJlOiAvXlwrXCsvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfREVDLAogICAgICAgICAgICAgICAgcmU6IC9eLS0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfQ09OQ0FUX0VRVUFMLAogICAgICAgICAgICAgICAgcmU6IC9eXC49LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0RJVl9FUVVBTCwKICAgICAgICAgICAgICAgIHJlOiAvXlwvPS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9YT1JfRVFVQUwsCiAgICAgICAgICAgICAgICByZTogL15cXj0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTVVMX0VRVUFMLAogICAgICAgICAgICAgICAgcmU6IC9eXCo9LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX01PRF9FUVVBTCwKICAgICAgICAgICAgICAgIHJlOiAvXiU9LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1NMX0VRVUFMLAogICAgICAgICAgICAgICAgcmU6IC9ePDw9LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1NUQVJUX0hFUkVET0MsCiAgICAgICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXltiQl0/PDw8WyBcXHRdKlwnKCcgKyBsYWJlbFJlZ2V4UGFydCArICcpXCcoPzpcXHJcXG58XFxyfFxcbiknKSwKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIGhlcmVkb2MgPSByZXN1bHRbMV07CiAgICAgICAgICAgICAgICAgICAgc3dhcFN0YXRlKCdOT1dET0MnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9TVEFSVF9IRVJFRE9DLAogICAgICAgICAgICAgICAgcmU6IG5ldyBSZWdFeHAoJ15bYkJdPzw8PFsgXFx0XSooIj8pKCcgKyBsYWJlbFJlZ2V4UGFydCArICcpXFwxKD86XFxyXFxufFxccnxcXG4pJyksCiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICBoZXJlZG9jID0gcmVzdWx0WzJdOwogICAgICAgICAgICAgICAgICAgIGhlcmVkb2NFbmRBbGxvd2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBzd2FwU3RhdGUoJ0hFUkVET0MnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9TTCwKICAgICAgICAgICAgICAgIHJlOiAvXjw8LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX1NQQUNFU0hJUCwKICAgICAgICAgICAgICAgIHJlOiAvXjw9Pi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JU19TTUFMTEVSX09SX0VRVUFMLAogICAgICAgICAgICAgICAgcmU6IC9ePD0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfU1JfRVFVQUwsCiAgICAgICAgICAgICAgICByZTogL14+Pj0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfU1IsCiAgICAgICAgICAgICAgICByZTogL14+Pi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JU19HUkVBVEVSX09SX0VRVUFMLAogICAgICAgICAgICAgICAgcmU6IC9ePj0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfT1JfRVFVQUwsCiAgICAgICAgICAgICAgICByZTogL15cfD0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfUExVU19FUVVBTCwKICAgICAgICAgICAgICAgIHJlOiAvXlwrPS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9NSU5VU19FUVVBTCwKICAgICAgICAgICAgICAgIHJlOiAvXi09LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX09CSkVDVF9PUEVSQVRPUiwKICAgICAgICAgICAgICAgIHJlOiBuZXcgUmVnRXhwKCdeLT4oPz1bIFxuXHJcdF0qJyArIGxhYmVsUmVnZXhQYXJ0ICsgJyknKSwKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHB1c2hTdGF0ZSgnTE9PS0lOR19GT1JfUFJPUEVSVFknKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9PQkpFQ1RfT1BFUkFUT1IsCiAgICAgICAgICAgICAgICByZTogL14tPi9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRUxMSVBTSVMsCiAgICAgICAgICAgICAgICByZTogL15cLlwuXC4vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfUE9XX0VRVUFMLAogICAgICAgICAgICAgICAgcmU6IC9eXCpcKj0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfUE9XLAogICAgICAgICAgICAgICAgcmU6IC9eXCpcKi8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DT0FMRVNDRSwKICAgICAgICAgICAgICAgIHJlOiAvXlw/XD8vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfQ09NTUVOVCwKICAgICAgICAgICAgICAgIHJlOiAvXlwvXCooW1xTXHNdKj8pKD86XCpcL3wkKS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DT01NRU5ULAogICAgICAgICAgICAgICAgcmU6IC9eKD86XC9cL3wjKVteXHJcbj9dKig/Olw/KD8hPilbXlxyXG4/XSopKig/OlxyXG58XHJ8XG4pPy8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JU19JREVOVElDQUwsCiAgICAgICAgICAgICAgICByZTogL149PT0vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfSVNfRVFVQUwsCiAgICAgICAgICAgICAgICByZTogL149PS8KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9JU19OT1RfSURFTlRJQ0FMLAogICAgICAgICAgICAgICAgcmU6IC9eIT09LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0lTX05PVF9FUVVBTCwKICAgICAgICAgICAgICAgIHJlOiAvXighPXw8PikvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRE5VTUJFUiwKICAgICAgICAgICAgICAgIHJlOiAvXig/OlswLTldK1wuWzAtOV0qfFwuWzAtOV0rKSg/OltlRV1bKy1dP1swLTldKyk/LwogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0ROVU1CRVIsCiAgICAgICAgICAgICAgICByZTogL15bMC05XStbZUVdWystXT9bMC05XSsvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTE5VTUJFUiwKICAgICAgICAgICAgICAgIHJlOiAvXig/OjB4WzAtOUEtRl0rfDBiWzAxXSt8WzAtOV0rKS9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVkFSSUFCTEUsCiAgICAgICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXlxcJCcgKyBsYWJlbFJlZ2V4UGFydCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DT05TVEFOVF9FTkNBUFNFRF9TVFJJTkcsCiAgICAgICAgICAgICAgICByZTogL15bYkJdPydbXidcXF0qKD86XFxbXHNcU11bXidcXF0qKSonLywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9DT05TVEFOVF9FTkNBUFNFRF9TVFJJTkcsCiAgICAgICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXltiQl0/IicgKyBzdHJpbmdSZWdleFBhcnQoJyInKSArICciJykKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IC0xLAogICAgICAgICAgICAgICAgcmU6IC9eW2JCXT8iLywKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHN3YXBTdGF0ZSgnRE9VQkxFX1FVT1RFUycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogLTEsCiAgICAgICAgICAgICAgICByZTogL15gLywKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHN3YXBTdGF0ZSgnQkFDS1RJQ0tTJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTlNfU0VQQVJBVE9SLAogICAgICAgICAgICAgICAgcmU6IC9eXFwvCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfU1RSSU5HLAogICAgICAgICAgICAgICAgcmU6IC9eW2EtekEtWl9ceDdmLVx1ZmZmZl1bYS16QS1aMC05X1x4N2YtXHVmZmZmXSovCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiAtMSwKICAgICAgICAgICAgICAgIHJlOiAvXlx7LywKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHB1c2hTdGF0ZSgnSU5fU0NSSVBUSU5HJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiAtMSwKICAgICAgICAgICAgICAgIHJlOiAvXlx9LywKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1BvcyA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcG9wU3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiAtMSwKICAgICAgICAgICAgICAgIHJlOiAvXltcW1xdOzo/KCkhLiw+PD0rLS8qfCZAXiUiJyR+XS8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgJ0RPVUJMRV9RVU9URVMnOiBzaGFyZWRTdHJpbmdUb2tlbnMuY29uY2F0KFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IC0xLAogICAgICAgICAgICAgICAgcmU6IC9eIi8sCiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBzd2FwU3RhdGUoJ0lOX1NDUklQVElORycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0VOQ0FQU0VEX0FORF9XSElURVNQQUNFLAogICAgICAgICAgICAgICAgcmU6IG5ldyBSZWdFeHAoJ14nICsgc3RyaW5nUmVnZXhQYXJ0KCciJykpCiAgICAgICAgICAgIH0KICAgICAgICBdKSwKICAgICAgICAnQkFDS1RJQ0tTJzogc2hhcmVkU3RyaW5nVG9rZW5zLmNvbmNhdChbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiAtMSwKICAgICAgICAgICAgICAgIHJlOiAvXmAvLAogICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc3dhcFN0YXRlKCdJTl9TQ1JJUFRJTkcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FTkNBUFNFRF9BTkRfV0hJVEVTUEFDRSwKICAgICAgICAgICAgICAgIHJlOiBuZXcgUmVnRXhwKCdeJyArIHN0cmluZ1JlZ2V4UGFydCgnYCcpKQogICAgICAgICAgICB9CiAgICAgICAgXSksCiAgICAgICAgJ1ZBUl9PRkZTRVQnOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiAtMSwKICAgICAgICAgICAgICAgIHJlOiAvXlxdLywKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHBvcFN0YXRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfTlVNX1NUUklORywKICAgICAgICAgICAgICAgIHJlOiAvXig/OjB4WzAtOUEtRl0rfDBiWzAxXSt8WzAtOV0rKS9pCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfVkFSSUFCTEUsCiAgICAgICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXlxcJCcgKyBsYWJlbFJlZ2V4UGFydCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9TVFJJTkcsCiAgICAgICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXicgKyBsYWJlbFJlZ2V4UGFydCkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IC0xLAogICAgICAgICAgICAgICAgcmU6IC9eWzs6LC5cWygpfF4mKy0vKj0lIX4kPD4/QHt9ImBdLwogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAnTE9PS0lOR19GT1JfUFJPUEVSVFknOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfT0JKRUNUX09QRVJBVE9SLAogICAgICAgICAgICAgICAgcmU6IC9eLT4vCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfU1RSSU5HLAogICAgICAgICAgICAgICAgcmU6IG5ldyBSZWdFeHAoJ14nICsgbGFiZWxSZWdleFBhcnQpLAogICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcG9wU3RhdGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9XSElURVNQQUNFLAogICAgICAgICAgICAgICAgcmU6IC9eWyBcblxyXHRdKy8KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgJ0xPT0tJTkdfRk9SX1ZBUk5BTUUnOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfU1RSSU5HX1ZBUk5BTUUsCiAgICAgICAgICAgICAgICByZTogbmV3IFJlZ0V4cCgnXicgKyBsYWJlbFJlZ2V4UGFydCArICcoPz1bXFxbfV0pJyksCiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICBzd2FwU3RhdGUoJ0lOX1NDUklQVElORycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAnTk9XRE9DJzogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YWx1ZTogUEhQLkNvbnN0YW50cy5UX0VORF9IRVJFRE9DLAogICAgICAgICAgICAgICAgbWF0Y2hGdW5jOiBmdW5jdGlvbihzcmMpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCdeJyArIGhlcmVkb2MgKyAnKD89Oz9bXFxyXFxuXSknKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3JjLm1hdGNoKHJlKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NyYy5zdWJzdHIoMCwgaGVyZWRvYy5sZW5ndGgpXTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgc3dhcFN0YXRlKCdJTl9TQ1JJUFRJTkcnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FTkNBUFNFRF9BTkRfV0hJVEVTUEFDRSwKICAgICAgICAgICAgICAgIG1hdGNoRnVuYzogZnVuY3Rpb24oc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnW1xcclxcbl0nICsgaGVyZWRvYyArICcoPz07P1tcXHJcXG5dKScpOwogICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZS5leGVjKHNyYyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHJlc3VsdCA/IHJlc3VsdC5pbmRleCArIDEgOiBzcmMubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBbc3JjLnN1YnN0cmluZygwLCBlbmQpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgJ0hFUkVET0MnOiBzaGFyZWRTdHJpbmdUb2tlbnMuY29uY2F0KFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFsdWU6IFBIUC5Db25zdGFudHMuVF9FTkRfSEVSRURPQywKICAgICAgICAgICAgICAgIG1hdGNoRnVuYzogZnVuY3Rpb24oc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFoZXJlZG9jRW5kQWxsb3dlZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgnXicgKyBoZXJlZG9jICsgJyg/PTs/W1xcclxcbl0pJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNyYy5tYXRjaChyZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzcmMuc3Vic3RyKDAsIGhlcmVkb2MubGVuZ3RoKV07CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHN3YXBTdGF0ZSgnSU5fU0NSSVBUSU5HJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhbHVlOiBQSFAuQ29uc3RhbnRzLlRfRU5DQVBTRURfQU5EX1dISVRFU1BBQ0UsCiAgICAgICAgICAgICAgICBtYXRjaEZ1bmM6IGZ1bmN0aW9uKHNyYykgewogICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzcmMubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJ14nICsgc3RyaW5nUmVnZXhQYXJ0KCcnKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlLmV4ZWMoc3JjKTsKICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHJlc3VsdFswXS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJlID0gbmV3IFJlZ0V4cCgnKFtcXHJcXG5dKScgKyBoZXJlZG9jICsgJyg/PTs/W1xcclxcbl0pJyk7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmUuZXhlYyhzcmMuc3Vic3RyaW5nKDAsIGVuZCkpOwogICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcmVzdWx0LmluZGV4ICsgMTsKICAgICAgICAgICAgICAgICAgICAgICAgaGVyZWRvY0VuZEFsbG93ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlcmVkb2NFbmRBbGxvd2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzcmMuc3Vic3RyaW5nKDAsIGVuZCldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgXSkKICAgIH07CgogICAgdmFyIHJlc3VsdHMgPSBbXSwKICAgIGxpbmUgPSAxLAogICAgY2FuY2VsID0gdHJ1ZTsKCiAgICBpZiAoc3JjID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICB9CgogICAgaWYgKHR5cGVvZiBzcmMgIT09ICJzdHJpbmciKSB7CiAgICAgICAgc3JjID0gc3JjLnRvU3RyaW5nKCk7CiAgICB9CgogICAgd2hpbGUgKHNyYy5sZW5ndGggPiAwICYmIGNhbmNlbCA9PT0gdHJ1ZSkgewogICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlU3RhY2tbc3RhY2tQb3NdOwogICAgICAgIHZhciB0b2tlbnMgPSBkYXRhW3N0YXRlXTsKICAgICAgICBjYW5jZWwgPSB0b2tlbnMuc29tZShmdW5jdGlvbih0b2tlbil7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0b2tlbi5tYXRjaEZ1bmMgIT09IHVuZGVmaW5lZAogICAgICAgICAgICAgICAgPyB0b2tlbi5tYXRjaEZ1bmMoc3JjKQogICAgICAgICAgICAgICAgOiBzcmMubWF0Y2godG9rZW4ucmUpOwogICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAocmVzdWx0WzBdLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBtYXRjaCIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0b2tlbi5mdW5jICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbi5mdW5jKHJlc3VsdCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRva2VuLnZhbHVlID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHRbMF0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0U3RyaW5nID0gcmVzdWx0WzBdOwogICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChbCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KHRva2VuLnZhbHVlLCAxMCksCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgbGluZQogICAgICAgICAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgICAgICAgICAgICBsaW5lICs9IHJlc3VsdFN0cmluZy5zcGxpdCgnXG4nKS5sZW5ndGggLSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNyYyA9IHNyYy5zdWJzdHJpbmcocmVzdWx0WzBdLmxlbmd0aCk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiByZXN1bHRzOwp9OwoKClBIUC5QYXJzZXIgPSBmdW5jdGlvbiAoIHByZXByb2Nlc3NlZFRva2VucywgZXZhbHVhdGUgKSB7CgogICAgdmFyIHl5YmFzZSA9IHRoaXMueXliYXNlLAogICAgeXlkZWZhdWx0ID0gdGhpcy55eWRlZmF1bHQsCiAgICB5eWNoZWNrID0gdGhpcy55eWNoZWNrLAogICAgeXlhY3Rpb24gPSB0aGlzLnl5YWN0aW9uLAogICAgeXlsZW4gPSB0aGlzLnl5bGVuLAogICAgeXlnYmFzZSA9IHRoaXMueXlnYmFzZSwKICAgIHl5Z2NoZWNrID0gdGhpcy55eWdjaGVjaywKICAgIHl5cCA9IHRoaXMueXlwLAogICAgeXlnb3RvID0gdGhpcy55eWdvdG8sCiAgICB5eWxocyA9IHRoaXMueXlsaHMsCiAgICB0ZXJtaW5hbHMgPSB0aGlzLnRlcm1pbmFscywKICAgIHRyYW5zbGF0ZSA9IHRoaXMudHJhbnNsYXRlLAogICAgeXlnZGVmYXVsdCA9IHRoaXMueXlnZGVmYXVsdDsKCgogICAgdGhpcy5wb3MgPSAtMTsKICAgIHRoaXMubGluZSA9IDE7CgogICAgdGhpcy50b2tlbk1hcCA9IHRoaXMuY3JlYXRlVG9rZW5NYXAoICk7CgogICAgdGhpcy5kcm9wVG9rZW5zID0ge307CiAgICB0aGlzLmRyb3BUb2tlbnNbIFBIUC5Db25zdGFudHMuVF9XSElURVNQQUNFIF0gPSAxOwogICAgdGhpcy5kcm9wVG9rZW5zWyBQSFAuQ29uc3RhbnRzLlRfT1BFTl9UQUcgXSA9IDE7CiAgICB2YXIgdG9rZW5zID0gW107CiAgICBwcmVwcm9jZXNzZWRUb2tlbnMuZm9yRWFjaCggZnVuY3Rpb24oIHRva2VuLCBpbmRleCApIHsKICAgICAgICBpZiAoIHR5cGVvZiB0b2tlbiA9PT0gIm9iamVjdCIgJiYgdG9rZW5bIDAgXSA9PT0gUEhQLkNvbnN0YW50cy5UX09QRU5fVEFHX1dJVEhfRUNITykgewogICAgICAgICAgICB0b2tlbnMucHVzaChbCiAgICAgICAgICAgICAgICBQSFAuQ29uc3RhbnRzLlRfT1BFTl9UQUcsCiAgICAgICAgICAgICAgICB0b2tlblsgMSBdLAogICAgICAgICAgICAgICAgdG9rZW5bIDIgXQogICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRva2Vucy5wdXNoKFsKICAgICAgICAgICAgICAgIFBIUC5Db25zdGFudHMuVF9FQ0hPLAogICAgICAgICAgICAgICAgdG9rZW5bIDEgXSwKICAgICAgICAgICAgICAgIHRva2VuWyAyIF0KICAgICAgICAgICAgICAgIF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRva2Vucy5wdXNoKCB0b2tlbiApOwogICAgICAgIH0KICAgIH0pOwogICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7CiAgICB2YXIgdG9rZW5JZCA9IHRoaXMuVE9LRU5fTk9ORTsKICAgIHRoaXMuc3RhcnRBdHRyaWJ1dGVzID0gewogICAgICAgICdzdGFydExpbmUnOiAxCiAgICB9OwoKICAgIHRoaXMuZW5kQXR0cmlidXRlcyA9IHt9OwogICAgdmFyIGF0dHJpYnV0ZVN0YWNrID0gWyB0aGlzLnN0YXJ0QXR0cmlidXRlcyBdOwogICAgdmFyIHN0YXRlID0gMDsKICAgIHZhciBzdGF0ZVN0YWNrID0gWyBzdGF0ZSBdOwogICAgdGhpcy55eWFzdGsgPSBbXTsKICAgIHRoaXMuc3RhY2tQb3MgID0gMDsKCiAgICB2YXIgeXluOwoKICAgIHZhciBvcmlnVG9rZW5JZDsKCgogICAgZm9yICg7OykgewoKICAgICAgICBpZiAoIHl5YmFzZVsgc3RhdGUgXSA9PT0gMCApIHsKICAgICAgICAgICAgeXluID0geXlkZWZhdWx0WyBzdGF0ZSBdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0b2tlbklkID09PSB0aGlzLlRPS0VOX05PTkUgKSB7CiAgICAgICAgICAgICAgICBvcmlnVG9rZW5JZCA9IHRoaXMuZ2V0TmV4dFRva2VuKCApOwogICAgICAgICAgICAgICAgdG9rZW5JZCA9IChvcmlnVG9rZW5JZCA+PSAwICYmIG9yaWdUb2tlbklkIDwgdGhpcy5UT0tFTl9NQVBfU0laRSkgPyB0cmFuc2xhdGVbIG9yaWdUb2tlbklkIF0gOiB0aGlzLlRPS0VOX0lOVkFMSUQ7CgogICAgICAgICAgICAgICAgYXR0cmlidXRlU3RhY2tbIHRoaXMuc3RhY2tQb3MgXSA9IHRoaXMuc3RhcnRBdHRyaWJ1dGVzOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoKCh5eW4gPSB5eWJhc2VbIHN0YXRlIF0gKyB0b2tlbklkKSA+PSAwCiAgICAgICAgICAgICAgICAmJiB5eW4gPCB0aGlzLllZTEFTVCAmJiB5eWNoZWNrWyB5eW4gXSA9PT0gdG9rZW5JZAogICAgICAgICAgICAgICAgfHwgKHN0YXRlIDwgdGhpcy5ZWTJUQkxTVEFURQogICAgICAgICAgICAgICAgICAgICYmICh5eW4gPSB5eWJhc2Vbc3RhdGUgKyB0aGlzLllZTkxTVEFURVNdICsgdG9rZW5JZCkgPj0gMAogICAgICAgICAgICAgICAgICAgICYmIHl5biA8IHRoaXMuWVlMQVNUCiAgICAgICAgICAgICAgICAgICAgJiYgeXljaGVja1sgeXluIF0gPT09IHRva2VuSWQpKQogICAgICAgICAgICAmJiAoeXluID0geXlhY3Rpb25bIHl5biBdKSAhPT0gdGhpcy5ZWURFRkFVTFQgKSB7CiAgICAgICAgICAgICAgICBpZiAoeXluID4gMCkgewogICAgICAgICAgICAgICAgICAgICsrdGhpcy5zdGFja1BvczsKCiAgICAgICAgICAgICAgICAgICAgc3RhdGVTdGFja1sgdGhpcy5zdGFja1BvcyBdID0gc3RhdGUgPSB5eW47CiAgICAgICAgICAgICAgICAgICAgdGhpcy55eWFzdGtbIHRoaXMuc3RhY2tQb3MgXSA9IHRoaXMudG9rZW5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVTdGFja1sgdGhpcy5zdGFja1BvcyBdID0gdGhpcy5zdGFydEF0dHJpYnV0ZXM7CiAgICAgICAgICAgICAgICAgICAgdG9rZW5JZCA9IHRoaXMuVE9LRU5fTk9ORTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHl5biA8IHRoaXMuWVlOTFNUQVRFUykKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgeXluIC09IHRoaXMuWVlOTFNUQVRFUzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgeXluID0gLXl5bjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHl5biA9IHl5ZGVmYXVsdFsgc3RhdGUgXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yICg7OykgewoKICAgICAgICAgICAgaWYgKCB5eW4gPT09IDAgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy55eXZhbDsKICAgICAgICAgICAgfSBlbHNlIGlmICh5eW4gIT09IHRoaXMuWVlVTkVYUEVDVEVEICkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBpbiB0aGlzLmVuZEF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVTdGFja1sgdGhpcy5zdGFja1BvcyAtIHl5bGVuWyB5eW4gXSBdWyBhdHRyIF0gPSB0aGlzLmVuZEF0dHJpYnV0ZXNbIGF0dHIgXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuc3RhY2tQb3MgLT0geXlsZW5bIHl5biBdOwogICAgICAgICAgICAgICAgeXluID0geXlsaHNbIHl5biBdOwogICAgICAgICAgICAgICAgaWYgKCh5eXAgPSB5eWdiYXNlWyB5eW4gXSArIHN0YXRlU3RhY2tbIHRoaXMuc3RhY2tQb3MgXSkgPj0gMAogICAgICAgICAgICAgICAgICAgICYmIHl5cCA8IHRoaXMuWVlHTEFTVAogICAgICAgICAgICAgICAgICAgICYmIHl5Z2NoZWNrWyB5eXAgXSA9PT0geXluKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSB5eWdvdG9bIHl5cCBdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHl5Z2RlZmF1bHRbIHl5biBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICsrdGhpcy5zdGFja1BvczsKCiAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrWyB0aGlzLnN0YWNrUG9zIF0gPSBzdGF0ZTsKICAgICAgICAgICAgICAgIHRoaXMueXlhc3RrWyB0aGlzLnN0YWNrUG9zIF0gPSB0aGlzLnl5dmFsOwogICAgICAgICAgICAgICAgYXR0cmlidXRlU3RhY2tbIHRoaXMuc3RhY2tQb3MgXSA9IHRoaXMuc3RhcnRBdHRyaWJ1dGVzOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlICE9PSB0cnVlKSB7CgogICAgICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFtdOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuVE9LRU5fTUFQX1NJWkU7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5biA9IHl5YmFzZVsgc3RhdGUgXSArIGkpID49IDAgJiYgeXluIDwgdGhpcy5ZWUxBU1QgJiYgeXljaGVja1sgeXluIF0gPT0gaQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdGUgPCB0aGlzLllZMlRCTFNUQVRFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoeXluID0geXliYXNlWyBzdGF0ZSArIHRoaXMuWVlOTFNUQVRFU10gKyBpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXluIDwgdGhpcy5ZWUxBU1QgJiYgeXljaGVja1sgeXluIF0gPT0gaQogICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWFjdGlvblsgeXluIF0gIT0gdGhpcy5ZWVVORVhQRUNURUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09IDQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKCB0aGlzLnRlcm1pbmFsc1sgaSBdICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZFN0cmluZyA9ICcnOwogICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRTdHJpbmcgPSAnLCBleHBlY3RpbmcgJyArIGV4cGVjdGVkLmpvaW4oJyBvciAnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBIUC5QYXJzZUVycm9yKCdzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJyArIHRlcm1pbmFsc1sgdG9rZW5JZCBdICsgZXhwZWN0ZWRTdHJpbmcsIHRoaXMuc3RhcnRBdHRyaWJ1dGVzWydzdGFydExpbmUnXSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0QXR0cmlidXRlc1snc3RhcnRMaW5lJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc3RhdGUgPCB0aGlzLllZTkxTVEFURVMpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgeXluID0gc3RhdGUgLSB0aGlzLllZTkxTVEFURVM7CiAgICAgICAgfQogICAgfQp9OwoKUEhQLlBhcnNlRXJyb3IgPSBmdW5jdGlvbiggbXNnLCBsaW5lICkgewogICAgdGhpcy5tZXNzYWdlID0gbXNnOwogICAgdGhpcy5saW5lID0gbGluZTsKfTsKClBIUC5QYXJzZXIucHJvdG90eXBlLmdldE5leHRUb2tlbiA9IGZ1bmN0aW9uKCApIHsKCiAgICB0aGlzLnN0YXJ0QXR0cmlidXRlcyA9IHt9OwogICAgdGhpcy5lbmRBdHRyaWJ1dGVzID0ge307CgogICAgdmFyIHRva2VuLAogICAgdG1wOwoKICAgIHdoaWxlICh0aGlzLnRva2Vuc1srK3RoaXMucG9zXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgdG9rZW4gPSB0aGlzLnRva2Vuc1t0aGlzLnBvc107CgogICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnRBdHRyaWJ1dGVzWydzdGFydExpbmUnXSA9IHRoaXMubGluZTsKICAgICAgICAgICAgdGhpcy5lbmRBdHRyaWJ1dGVzWydlbmRMaW5lJ10gPSB0aGlzLmxpbmU7CiAgICAgICAgICAgIGlmICgnYiInID09PSB0b2tlbikgewogICAgICAgICAgICAgICAgdGhpcy50b2tlblZhbHVlID0gJ2IiJzsKICAgICAgICAgICAgICAgIHJldHVybiAnIicuY2hhckNvZGVBdCgwKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMudG9rZW5WYWx1ZSA9IHRva2VuOwogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuLmNoYXJDb2RlQXQoMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewoKCgogICAgICAgICAgICB0aGlzLmxpbmUgKz0gKCh0bXAgPSB0b2tlblsgMSBdLm1hdGNoKC9cbi9nKSkgPT09IG51bGwpID8gMCA6IHRtcC5sZW5ndGg7CgogICAgICAgICAgICBpZiAoUEhQLkNvbnN0YW50cy5UX0NPTU1FTlQgPT09IHRva2VuWzBdKSB7CgogICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc3RhcnRBdHRyaWJ1dGVzWydjb21tZW50cyddKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdHRyaWJ1dGVzWydjb21tZW50cyddID0gW107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5zdGFydEF0dHJpYnV0ZXNbJ2NvbW1lbnRzJ10ucHVzaCggewogICAgICAgICAgICAgICAgICAgIHR5cGU6ICJjb21tZW50IiwKICAgICAgICAgICAgICAgICAgICBjb21tZW50OiB0b2tlblsxXSwKICAgICAgICAgICAgICAgICAgICBsaW5lOiB0b2tlblsyXQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9IGVsc2UgaWYgKFBIUC5Db25zdGFudHMuVF9ET0NfQ09NTUVOVCA9PT0gdG9rZW5bMF0pIHsKICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdHRyaWJ1dGVzWydjb21tZW50cyddLnB1c2goIG5ldyBQSFBQYXJzZXJfQ29tbWVudF9Eb2ModG9rZW5bMV0sIHRva2VuWzJdKSApOwogICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJvcFRva2Vuc1t0b2tlblswXV0gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdGhpcy50b2tlblZhbHVlID0gdG9rZW5bMV07CiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QXR0cmlidXRlc1snc3RhcnRMaW5lJ10gPSB0b2tlblsyXTsKICAgICAgICAgICAgICAgIHRoaXMuZW5kQXR0cmlidXRlc1snZW5kTGluZSddID0gdGhpcy5saW5lOwoKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRva2VuTWFwW3Rva2VuWzBdXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICB0aGlzLnN0YXJ0QXR0cmlidXRlc1snc3RhcnRMaW5lJ10gPSB0aGlzLmxpbmU7CiAgICByZXR1cm4gMDsKfTsKClBIUC5QYXJzZXIucHJvdG90eXBlLnRva2VuTmFtZSA9IGZ1bmN0aW9uKCB0b2tlbiApIHsKICAgIHZhciBjb25zdGFudHMgPSBbIlRfSU5DTFVERSIsIlRfSU5DTFVERV9PTkNFIiwiVF9FVkFMIiwiVF9SRVFVSVJFIiwiVF9SRVFVSVJFX09OQ0UiLCJUX0xPR0lDQUxfT1IiLCJUX0xPR0lDQUxfWE9SIiwiVF9MT0dJQ0FMX0FORCIsIlRfUFJJTlQiLCJUX1lJRUxEIiwiVF9ET1VCTEVfQVJST1ciLCJUX1lJRUxEX0ZST00iLCJUX1BMVVNfRVFVQUwiLCJUX01JTlVTX0VRVUFMIiwiVF9NVUxfRVFVQUwiLCJUX0RJVl9FUVVBTCIsIlRfQ09OQ0FUX0VRVUFMIiwiVF9NT0RfRVFVQUwiLCJUX0FORF9FUVVBTCIsIlRfT1JfRVFVQUwiLCJUX1hPUl9FUVVBTCIsIlRfU0xfRVFVQUwiLCJUX1NSX0VRVUFMIiwiVF9QT1dfRVFVQUwiLCJUX0NPQUxFU0NFIiwiVF9CT09MRUFOX09SIiwiVF9CT09MRUFOX0FORCIsIlRfSVNfRVFVQUwiLCJUX0lTX05PVF9FUVVBTCIsIlRfSVNfSURFTlRJQ0FMIiwiVF9JU19OT1RfSURFTlRJQ0FMIiwiVF9TUEFDRVNISVAiLCJUX0lTX1NNQUxMRVJfT1JfRVFVQUwiLCJUX0lTX0dSRUFURVJfT1JfRVFVQUwiLCJUX1NMIiwiVF9TUiIsIlRfSU5TVEFOQ0VPRiIsIlRfSU5DIiwiVF9ERUMiLCJUX0lOVF9DQVNUIiwiVF9ET1VCTEVfQ0FTVCIsIlRfU1RSSU5HX0NBU1QiLCJUX0FSUkFZX0NBU1QiLCJUX09CSkVDVF9DQVNUIiwiVF9CT09MX0NBU1QiLCJUX1VOU0VUX0NBU1QiLCJUX1BPVyIsIlRfTkVXIiwiVF9DTE9ORSIsIlRfRVhJVCIsIlRfSUYiLCJUX0VMU0VJRiIsIlRfRUxTRSIsIlRfRU5ESUYiLCJUX0xOVU1CRVIiLCJUX0ROVU1CRVIiLCJUX1NUUklORyIsIlRfU1RSSU5HX1ZBUk5BTUUiLCJUX1ZBUklBQkxFIiwiVF9OVU1fU1RSSU5HIiwiVF9JTkxJTkVfSFRNTCIsIlRfQ0hBUkFDVEVSIiwiVF9CQURfQ0hBUkFDVEVSIiwiVF9FTkNBUFNFRF9BTkRfV0hJVEVTUEFDRSIsIlRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HIiwiVF9FQ0hPIiwiVF9ETyIsIlRfV0hJTEUiLCJUX0VORFdISUxFIiwiVF9GT1IiLCJUX0VOREZPUiIsIlRfRk9SRUFDSCIsIlRfRU5ERk9SRUFDSCIsIlRfREVDTEFSRSIsIlRfRU5EREVDTEFSRSIsIlRfQVMiLCJUX1NXSVRDSCIsIlRfRU5EU1dJVENIIiwiVF9DQVNFIiwiVF9ERUZBVUxUIiwiVF9CUkVBSyIsIlRfQ09OVElOVUUiLCJUX0dPVE8iLCJUX0ZVTkNUSU9OIiwiVF9DT05TVCIsIlRfUkVUVVJOIiwiVF9UUlkiLCJUX0NBVENIIiwiVF9GSU5BTExZIiwiVF9USFJPVyIsIlRfVVNFIiwiVF9JTlNURUFET0YiLCJUX0dMT0JBTCIsIlRfU1RBVElDIiwiVF9BQlNUUkFDVCIsIlRfRklOQUwiLCJUX1BSSVZBVEUiLCJUX1BST1RFQ1RFRCIsIlRfUFVCTElDIiwiVF9WQVIiLCJUX1VOU0VUIiwiVF9JU1NFVCIsIlRfRU1QVFkiLCJUX0hBTFRfQ09NUElMRVIiLCJUX0NMQVNTIiwiVF9UUkFJVCIsIlRfSU5URVJGQUNFIiwiVF9FWFRFTkRTIiwiVF9JTVBMRU1FTlRTIiwiVF9PQkpFQ1RfT1BFUkFUT1IiLCJUX0RPVUJMRV9BUlJPVyIsIlRfTElTVCIsIlRfQVJSQVkiLCJUX0NBTExBQkxFIiwiVF9DTEFTU19DIiwiVF9UUkFJVF9DIiwiVF9NRVRIT0RfQyIsIlRfRlVOQ19DIiwiVF9MSU5FIiwiVF9GSUxFIiwiVF9DT01NRU5UIiwiVF9ET0NfQ09NTUVOVCIsIlRfT1BFTl9UQUciLCJUX09QRU5fVEFHX1dJVEhfRUNITyIsIlRfQ0xPU0VfVEFHIiwiVF9XSElURVNQQUNFIiwiVF9TVEFSVF9IRVJFRE9DIiwiVF9FTkRfSEVSRURPQyIsIlRfRE9MTEFSX09QRU5fQ1VSTFlfQlJBQ0VTIiwiVF9DVVJMWV9PUEVOIiwiVF9QQUFNQVlJTV9ORUtVRE9UQVlJTSIsIlRfTkFNRVNQQUNFIiwiVF9OU19DIiwiVF9ESVIiLCJUX05TX1NFUEFSQVRPUiIsIlRfRUxMSVBTSVMiXTsKICAgIHZhciBjdXJyZW50ID0gIlVOS05PV04iOwogICAgY29uc3RhbnRzLnNvbWUoZnVuY3Rpb24oIGNvbnN0YW50ICkgewogICAgICAgIGlmIChQSFAuQ29uc3RhbnRzWyBjb25zdGFudCBdID09PSB0b2tlbikgewogICAgICAgICAgICBjdXJyZW50ID0gY29uc3RhbnQ7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gY3VycmVudDsKfTsKClBIUC5QYXJzZXIucHJvdG90eXBlLmNyZWF0ZVRva2VuTWFwID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgdG9rZW5NYXAgPSB7fSwKICAgIG5hbWUsCiAgICBpOwogICAgZm9yICggaSA9IDI1NjsgaSA8IDEwMDA7ICsraSApIHsKICAgICAgICBpZiggUEhQLkNvbnN0YW50cy5UX09QRU5fVEFHX1dJVEhfRUNITyA9PT0gaSApIHsKICAgICAgICAgICAgdG9rZW5NYXBbIGkgXSA9IFBIUC5Db25zdGFudHMuVF9FQ0hPOwogICAgICAgIH0gZWxzZSBpZiggUEhQLkNvbnN0YW50cy5UX0NMT1NFX1RBRyA9PT0gaSApIHsKICAgICAgICAgICAgdG9rZW5NYXBbIGkgXSA9IDU5OwogICAgICAgIH0gZWxzZSBpZiAoICdVTktOT1dOJyAhPT0gKG5hbWUgPSB0aGlzLnRva2VuTmFtZSggaSApICkgKSB7IAogICAgICAgICAgICB0b2tlbk1hcFsgaSBdID0gIHRoaXNbbmFtZV07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHRva2VuTWFwOwp9OwoKUEhQLlBhcnNlci5wcm90b3R5cGUuVE9LRU5fTk9ORSAgICA9IC0xOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UT0tFTl9JTlZBTElEID0gMTU3OwoKUEhQLlBhcnNlci5wcm90b3R5cGUuVE9LRU5fTUFQX1NJWkUgPSAzOTI7CgpQSFAuUGFyc2VyLnByb3RvdHlwZS5ZWUxBU1QgICAgICAgPSA4ODk7ClBIUC5QYXJzZXIucHJvdG90eXBlLllZMlRCTFNUQVRFICA9IDMzNzsKUEhQLlBhcnNlci5wcm90b3R5cGUuWVlHTEFTVCAgICAgID0gNDEwOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5ZWU5MU1RBVEVTICAgPSA1NjQ7ClBIUC5QYXJzZXIucHJvdG90eXBlLllZVU5FWFBFQ1RFRCA9IDMyNzY3OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5ZWURFRkFVTFQgICAgPSAtMzI3NjY7ClBIUC5QYXJzZXIucHJvdG90eXBlLllZRVJSVE9LID0gMjU2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0lOQ0xVREUgPSAyNTc7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSU5DTFVERV9PTkNFID0gMjU4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VWQUwgPSAyNTk7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfUkVRVUlSRSA9IDI2MDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9SRVFVSVJFX09OQ0UgPSAyNjE7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfTE9HSUNBTF9PUiA9IDI2MjsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9MT0dJQ0FMX1hPUiA9IDI2MzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9MT0dJQ0FMX0FORCA9IDI2NDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9QUklOVCA9IDI2NTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9ZSUVMRCA9IDI2NjsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9ET1VCTEVfQVJST1cgPSAyNjc7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfWUlFTERfRlJPTSA9IDI2ODsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9QTFVTX0VRVUFMID0gMjY5OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX01JTlVTX0VRVUFMID0gMjcwOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX01VTF9FUVVBTCA9IDI3MTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9ESVZfRVFVQUwgPSAyNzI7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ09OQ0FUX0VRVUFMID0gMjczOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX01PRF9FUVVBTCA9IDI3NDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9BTkRfRVFVQUwgPSAyNzU7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfT1JfRVFVQUwgPSAyNzY7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfWE9SX0VRVUFMID0gMjc3OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NMX0VRVUFMID0gMjc4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NSX0VRVUFMID0gMjc5OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1BPV19FUVVBTCA9IDI4MDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DT0FMRVNDRSA9IDI4MTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9CT09MRUFOX09SID0gMjgyOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0JPT0xFQU5fQU5EID0gMjgzOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0lTX0VRVUFMID0gMjg0OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0lTX05PVF9FUVVBTCA9IDI4NTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9JU19JREVOVElDQUwgPSAyODY7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSVNfTk9UX0lERU5USUNBTCA9IDI4NzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9TUEFDRVNISVAgPSAyODg7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSVNfU01BTExFUl9PUl9FUVVBTCA9IDI4OTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9JU19HUkVBVEVSX09SX0VRVUFMID0gMjkwOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NMID0gMjkxOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NSID0gMjkyOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0lOU1RBTkNFT0YgPSAyOTM7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSU5DID0gMjk0OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0RFQyA9IDI5NTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9JTlRfQ0FTVCA9IDI5NjsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9ET1VCTEVfQ0FTVCA9IDI5NzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9TVFJJTkdfQ0FTVCA9IDI5ODsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9BUlJBWV9DQVNUID0gMjk5OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX09CSkVDVF9DQVNUID0gMzAwOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0JPT0xfQ0FTVCA9IDMwMTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9VTlNFVF9DQVNUID0gMzAyOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1BPVyA9IDMwMzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9ORVcgPSAzMDQ7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ0xPTkUgPSAzMDU7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRVhJVCA9IDMwNjsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9JRiA9IDMwNzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9FTFNFSUYgPSAzMDg7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRUxTRSA9IDMwOTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9FTkRJRiA9IDMxMDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9MTlVNQkVSID0gMzExOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0ROVU1CRVIgPSAzMTI7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfU1RSSU5HID0gMzEzOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NUUklOR19WQVJOQU1FID0gMzE0OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1ZBUklBQkxFID0gMzE1OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX05VTV9TVFJJTkcgPSAzMTY7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSU5MSU5FX0hUTUwgPSAzMTc7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ0hBUkFDVEVSID0gMzE4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0JBRF9DSEFSQUNURVIgPSAzMTk7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRU5DQVBTRURfQU5EX1dISVRFU1BBQ0UgPSAzMjA7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HID0gMzIxOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VDSE8gPSAzMjI7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRE8gPSAzMjM7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfV0hJTEUgPSAzMjQ7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRU5EV0hJTEUgPSAzMjU7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRk9SID0gMzI2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VOREZPUiA9IDMyNzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9GT1JFQUNIID0gMzI4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VOREZPUkVBQ0ggPSAzMjk7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfREVDTEFSRSA9IDMzMDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9FTkRERUNMQVJFID0gMzMxOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0FTID0gMzMyOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NXSVRDSCA9IDMzMzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9FTkRTV0lUQ0ggPSAzMzQ7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ0FTRSA9IDMzNTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9ERUZBVUxUID0gMzM2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0JSRUFLID0gMzM3OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0NPTlRJTlVFID0gMzM4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0dPVE8gPSAzMzk7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRlVOQ1RJT04gPSAzNDA7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ09OU1QgPSAzNDE7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfUkVUVVJOID0gMzQyOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1RSWSA9IDM0MzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DQVRDSCA9IDM0NDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9GSU5BTExZID0gMzQ1OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1RIUk9XID0gMzQ2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1VTRSA9IDM0NzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9JTlNURUFET0YgPSAzNDg7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfR0xPQkFMID0gMzQ5OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1NUQVRJQyA9IDM1MDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9BQlNUUkFDVCA9IDM1MTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9GSU5BTCA9IDM1MjsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9QUklWQVRFID0gMzUzOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1BST1RFQ1RFRCA9IDM1NDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9QVUJMSUMgPSAzNTU7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfVkFSID0gMzU2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1VOU0VUID0gMzU3OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0lTU0VUID0gMzU4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VNUFRZID0gMzU5OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0hBTFRfQ09NUElMRVIgPSAzNjA7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfQ0xBU1MgPSAzNjE7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfVFJBSVQgPSAzNjI7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSU5URVJGQUNFID0gMzYzOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VYVEVORFMgPSAzNjQ7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfSU1QTEVNRU5UUyA9IDM2NTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9PQkpFQ1RfT1BFUkFUT1IgPSAzNjY7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfTElTVCA9IDM2NzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9BUlJBWSA9IDM2ODsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DQUxMQUJMRSA9IDM2OTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DTEFTU19DID0gMzcwOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1RSQUlUX0MgPSAzNzE7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfTUVUSE9EX0MgPSAzNzI7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRlVOQ19DID0gMzczOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0xJTkUgPSAzNzQ7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRklMRSA9IDM3NTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DT01NRU5UID0gMzc2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0RPQ19DT01NRU5UID0gMzc3OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX09QRU5fVEFHID0gMzc4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX09QRU5fVEFHX1dJVEhfRUNITyA9IDM3OTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DTE9TRV9UQUcgPSAzODA7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfV0hJVEVTUEFDRSA9IDM4MTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9TVEFSVF9IRVJFRE9DID0gMzgyOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0VORF9IRVJFRE9DID0gMzgzOwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0RPTExBUl9PUEVOX0NVUkxZX0JSQUNFUyA9IDM4NDsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9DVVJMWV9PUEVOID0gMzg1OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX1BBQU1BWUlNX05FS1VET1RBWUlNID0gMzg2OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX05BTUVTUEFDRSA9IDM4NzsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9OU19DID0gMzg4OwpQSFAuUGFyc2VyLnByb3RvdHlwZS5UX0RJUiA9IDM4OTsKUEhQLlBhcnNlci5wcm90b3R5cGUuVF9OU19TRVBBUkFUT1IgPSAzOTA7ClBIUC5QYXJzZXIucHJvdG90eXBlLlRfRUxMSVBTSVMgPSAzOTE7ClBIUC5QYXJzZXIucHJvdG90eXBlLnRlcm1pbmFscyA9IFsKICAgICIkRU9GIiwKICAgICJlcnJvciIsCiAgICAiVF9JTkNMVURFIiwKICAgICJUX0lOQ0xVREVfT05DRSIsCiAgICAiVF9FVkFMIiwKICAgICJUX1JFUVVJUkUiLAogICAgIlRfUkVRVUlSRV9PTkNFIiwKICAgICInLCciLAogICAgIlRfTE9HSUNBTF9PUiIsCiAgICAiVF9MT0dJQ0FMX1hPUiIsCiAgICAiVF9MT0dJQ0FMX0FORCIsCiAgICAiVF9QUklOVCIsCiAgICAiVF9ZSUVMRCIsCiAgICAiVF9ET1VCTEVfQVJST1ciLAogICAgIlRfWUlFTERfRlJPTSIsCiAgICAiJz0nIiwKICAgICJUX1BMVVNfRVFVQUwiLAogICAgIlRfTUlOVVNfRVFVQUwiLAogICAgIlRfTVVMX0VRVUFMIiwKICAgICJUX0RJVl9FUVVBTCIsCiAgICAiVF9DT05DQVRfRVFVQUwiLAogICAgIlRfTU9EX0VRVUFMIiwKICAgICJUX0FORF9FUVVBTCIsCiAgICAiVF9PUl9FUVVBTCIsCiAgICAiVF9YT1JfRVFVQUwiLAogICAgIlRfU0xfRVFVQUwiLAogICAgIlRfU1JfRVFVQUwiLAogICAgIlRfUE9XX0VRVUFMIiwKICAgICInPyciLAogICAgIic6JyIsCiAgICAiVF9DT0FMRVNDRSIsCiAgICAiVF9CT09MRUFOX09SIiwKICAgICJUX0JPT0xFQU5fQU5EIiwKICAgICInfCciLAogICAgIideJyIsCiAgICAiJyYnIiwKICAgICJUX0lTX0VRVUFMIiwKICAgICJUX0lTX05PVF9FUVVBTCIsCiAgICAiVF9JU19JREVOVElDQUwiLAogICAgIlRfSVNfTk9UX0lERU5USUNBTCIsCiAgICAiVF9TUEFDRVNISVAiLAogICAgIic8JyIsCiAgICAiVF9JU19TTUFMTEVSX09SX0VRVUFMIiwKICAgICInPiciLAogICAgIlRfSVNfR1JFQVRFUl9PUl9FUVVBTCIsCiAgICAiVF9TTCIsCiAgICAiVF9TUiIsCiAgICAiJysnIiwKICAgICInLSciLAogICAgIicuJyIsCiAgICAiJyonIiwKICAgICInLyciLAogICAgIiclJyIsCiAgICAiJyEnIiwKICAgICJUX0lOU1RBTkNFT0YiLAogICAgIid+JyIsCiAgICAiVF9JTkMiLAogICAgIlRfREVDIiwKICAgICJUX0lOVF9DQVNUIiwKICAgICJUX0RPVUJMRV9DQVNUIiwKICAgICJUX1NUUklOR19DQVNUIiwKICAgICJUX0FSUkFZX0NBU1QiLAogICAgIlRfT0JKRUNUX0NBU1QiLAogICAgIlRfQk9PTF9DQVNUIiwKICAgICJUX1VOU0VUX0NBU1QiLAogICAgIidAJyIsCiAgICAiVF9QT1ciLAogICAgIidbJyIsCiAgICAiVF9ORVciLAogICAgIlRfQ0xPTkUiLAogICAgIlRfRVhJVCIsCiAgICAiVF9JRiIsCiAgICAiVF9FTFNFSUYiLAogICAgIlRfRUxTRSIsCiAgICAiVF9FTkRJRiIsCiAgICAiVF9MTlVNQkVSIiwKICAgICJUX0ROVU1CRVIiLAogICAgIlRfU1RSSU5HIiwKICAgICJUX1NUUklOR19WQVJOQU1FIiwKICAgICJUX1ZBUklBQkxFIiwKICAgICJUX05VTV9TVFJJTkciLAogICAgIlRfSU5MSU5FX0hUTUwiLAogICAgIlRfRU5DQVBTRURfQU5EX1dISVRFU1BBQ0UiLAogICAgIlRfQ09OU1RBTlRfRU5DQVBTRURfU1RSSU5HIiwKICAgICJUX0VDSE8iLAogICAgIlRfRE8iLAogICAgIlRfV0hJTEUiLAogICAgIlRfRU5EV0hJTEUiLAogICAgIlRfRk9SIiwKICAgICJUX0VOREZPUiIsCiAgICAiVF9GT1JFQUNIIiwKICAgICJUX0VOREZPUkVBQ0giLAogICAgIlRfREVDTEFSRSIsCiAgICAiVF9FTkRERUNMQVJFIiwKICAgICJUX0FTIiwKICAgICJUX1NXSVRDSCIsCiAgICAiVF9FTkRTV0lUQ0giLAogICAgIlRfQ0FTRSIsCiAgICAiVF9ERUZBVUxUIiwKICAgICJUX0JSRUFLIiwKICAgICJUX0NPTlRJTlVFIiwKICAgICJUX0dPVE8iLAogICAgIlRfRlVOQ1RJT04iLAogICAgIlRfQ09OU1QiLAogICAgIlRfUkVUVVJOIiwKICAgICJUX1RSWSIsCiAgICAiVF9DQVRDSCIsCiAgICAiVF9GSU5BTExZIiwKICAgICJUX1RIUk9XIiwKICAgICJUX1VTRSIsCiAgICAiVF9JTlNURUFET0YiLAogICAgIlRfR0xPQkFMIiwKICAgICJUX1NUQVRJQyIsCiAgICAiVF9BQlNUUkFDVCIsCiAgICAiVF9GSU5BTCIsCiAgICAiVF9QUklWQVRFIiwKICAgICJUX1BST1RFQ1RFRCIsCiAgICAiVF9QVUJMSUMiLAogICAgIlRfVkFSIiwKICAgICJUX1VOU0VUIiwKICAgICJUX0lTU0VUIiwKICAgICJUX0VNUFRZIiwKICAgICJUX0hBTFRfQ09NUElMRVIiLAogICAgIlRfQ0xBU1MiLAogICAgIlRfVFJBSVQiLAogICAgIlRfSU5URVJGQUNFIiwKICAgICJUX0VYVEVORFMiLAogICAgIlRfSU1QTEVNRU5UUyIsCiAgICAiVF9PQkpFQ1RfT1BFUkFUT1IiLAogICAgIlRfTElTVCIsCiAgICAiVF9BUlJBWSIsCiAgICAiVF9DQUxMQUJMRSIsCiAgICAiVF9DTEFTU19DIiwKICAgICJUX1RSQUlUX0MiLAogICAgIlRfTUVUSE9EX0MiLAogICAgIlRfRlVOQ19DIiwKICAgICJUX0xJTkUiLAogICAgIlRfRklMRSIsCiAgICAiVF9TVEFSVF9IRVJFRE9DIiwKICAgICJUX0VORF9IRVJFRE9DIiwKICAgICJUX0RPTExBUl9PUEVOX0NVUkxZX0JSQUNFUyIsCiAgICAiVF9DVVJMWV9PUEVOIiwKICAgICJUX1BBQU1BWUlNX05FS1VET1RBWUlNIiwKICAgICJUX05BTUVTUEFDRSIsCiAgICAiVF9OU19DIiwKICAgICJUX0RJUiIsCiAgICAiVF9OU19TRVBBUkFUT1IiLAogICAgIlRfRUxMSVBTSVMiLAogICAgIic7JyIsCiAgICAiJ3snIiwKICAgICInfSciLAogICAgIicoJyIsCiAgICAiJyknIiwKICAgICInYCciLAogICAgIiddJyIsCiAgICAiJ1wiJyIsCiAgICAiJyQnIgogICAgLCAiPz8/IgpdOwpQSFAuUGFyc2VyLnByb3RvdHlwZS50cmFuc2xhdGUgPSBbCiAgICAgICAgMCwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgIDE1NywgIDE1NywgICA1MywgIDE1NSwgIDE1NywgIDE1NiwgICA1MiwgICAzNSwgIDE1NywKICAgICAgMTUxLCAgMTUyLCAgIDUwLCAgIDQ3LCAgICA3LCAgIDQ4LCAgIDQ5LCAgIDUxLCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAgMjksICAxNDgsCiAgICAgICA0MSwgICAxNSwgICA0MywgICAyOCwgICA2NSwgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgICA2NywgIDE1NywgIDE1NCwgICAzNCwgIDE1NywgIDE1MywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgIDE1NywgIDE1NywgIDE0OSwgICAzMywgIDE1MCwgICA1NSwgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsICAxNTcsCiAgICAgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywgIDE1NywKICAgICAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LCAgICAxLCAgICAyLCAgICAzLCAgICA0LAogICAgICAgIDUsICAgIDYsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTYsCiAgICAgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAyMywgICAyNCwgICAyNSwgICAyNiwKICAgICAgIDI3LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQyLAogICAgICAgNDQsICAgNDUsICAgNDYsICAgNTQsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCiAgICAgICA2MiwgICA2MywgICA2NCwgICA2NiwgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICA3MywKICAgICAgIDc0LCAgIDc1LCAgIDc2LCAgIDc3LCAgIDc4LCAgIDc5LCAgIDgwLCAgIDgxLCAgMTU3LCAgMTU3LAogICAgICAgODIsICAgODMsICAgODQsICAgODUsICAgODYsICAgODcsICAgODgsICAgODksICAgOTAsICAgOTEsCiAgICAgICA5MiwgICA5MywgICA5NCwgICA5NSwgICA5NiwgICA5NywgICA5OCwgICA5OSwgIDEwMCwgIDEwMSwKICAgICAgMTAyLCAgMTAzLCAgMTA0LCAgMTA1LCAgMTA2LCAgMTA3LCAgMTA4LCAgMTA5LCAgMTEwLCAgMTExLAogICAgICAxMTIsICAxMTMsICAxMTQsICAxMTUsICAxMTYsICAxMTcsICAxMTgsICAxMTksICAxMjAsICAxMjEsCiAgICAgIDEyMiwgIDEyMywgIDEyNCwgIDEyNSwgIDEyNiwgIDEyNywgIDEyOCwgIDEyOSwgIDEzMCwgIDEzMSwKICAgICAgMTMyLCAgMTMzLCAgMTM0LCAgMTM1LCAgMTM2LCAgMTM3LCAgMTU3LCAgMTU3LCAgMTU3LCAgMTU3LAogICAgICAxNTcsICAxNTcsICAxMzgsICAxMzksICAxNDAsICAxNDEsICAxNDIsICAxNDMsICAxNDQsICAxNDUsCiAgICAgIDE0NiwgIDE0NwpdOwoKUEhQLlBhcnNlci5wcm90b3R5cGUueXlhY3Rpb24gPSBbCiAgICAgIDU2OSwgIDU3MCwgIDU3MSwgIDU3MiwgIDU3MywgIDIxNSwgIDU3NCwgIDU3NSwgIDU3NiwgIDYxMiwKICAgICAgNjEzLCAgICAwLCAgIDI3LCAgIDk5LCAgMTAwLCAgMTAxLCAgMTAyLCAgMTAzLCAgMTA0LCAgMTA1LAogICAgICAxMDYsICAxMDcsICAxMDgsICAxMDksICAxMTAsLTMyNzY2LC0zMjc2NiwtMzI3NjYsICAgOTUsICAgOTYsCiAgICAgICA5NywgICAyNCwgIDI0MCwgIDIyNiwgLTI2NywtMzI3NjYsLTMyNzY2LC0zMjc2NiwtMzI3NjYsLTMyNzY2LAogICAgLTMyNzY2LCAgNTMwLCAgMzQ0LCAgMTE0LCAgIDk4LC0zMjc2NiwgIDI4NiwtMzI3NjYsLTMyNzY2LC0zMjc2NiwKICAgIC0zMjc2NiwtMzI3NjYsICA1NzcsICA4NzAsICA4NzIsLTMyNzY2LC0zMjc2NiwtMzI3NjYsLTMyNzY2LC0zMjc2NiwKICAgIC0zMjc2NiwtMzI3NjYsLTMyNzY2LCAgMjI0LC0zMjc2NiwgIDcxNCwgIDU3OCwgIDU3OSwgIDU4MCwgIDU4MSwKICAgICAgNTgyLCAgNTgzLCAgNTg0LC0zMjc2NiwgIDI2NCwgIDY0NCwgIDg0MCwgIDg0MSwgIDg0MiwgIDgzOSwKICAgICAgODM4LCAgODM3LCAgNTg1LCAgNTg2LCAgNTg3LCAgNTg4LCAgNTg5LCAgNTkwLCAgNTkxLCAgNTkyLAogICAgICA1OTMsICA1OTQsICA1OTUsICA2MTUsICA2MTYsICA2MTcsICA2MTgsICA2MTksICA2MDcsICA2MDgsCiAgICAgIDYwOSwgIDYxMCwgIDYxMSwgIDU5NiwgIDU5NywgIDU5OCwgIDU5OSwgIDYwMCwgIDYwMSwgIDYwMiwKICAgICAgNjM4LCAgNjM5LCAgNjQwLCAgNjQxLCAgNjQyLCAgNjQzLCAgNjAzLCAgNjA0LCAgNjA1LCAgNjA2LAogICAgICA2MzYsICA2MjcsICA2MjUsICA2MjYsICA2MjIsICA2MjMsICAxMTYsICA2MTQsICA2MjAsICA2MjEsCiAgICAgIDYyOCwgIDYyOSwgIDYzMSwgIDYzMCwgIDYzMiwgIDYzMywgICA0MiwgICA0MywgIDM4MSwgICA0NCwKICAgICAgIDQ1LCAgNjI0LCAgNjM1LCAgNjM0LCAtMjE0LCAgIDQ2LCAgIDQ3LCAgMjg5LCAgIDQ4LC0zMjc2NywKICAgIC0zMjc2NywtMzI3NjcsLTMyNzY3LCAgIDkwLCAgIDkxLCAgIDkyLCAgIDkzLCAgIDk0LCAgMjY3LCAgMjQxLAogICAgICAgMjIsICA4NDAsICA4NDEsICA4NDIsICA4MzksICA4MzgsICA4MzcsICA4MzIsLTMyNzY2LC0zMjc2NiwKICAgIC0zMjc2NiwgIDMwNiwgMTAwMCwgMTAwMCwgMTAzNywgIDEyMCwgIDk2NiwgIDQzNiwgLTQyMywgIDI0NCwKICAgICAgNzk3LCAgIDQ5LCAgIDUwLCAgNjYwLCAgNjYxLCAgMjcyLCAgMzYyLCAgIDUxLC0zMjc2NiwgICA1MiwKICAgICAgMjE5LCAgMjIwLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LCAgIDU4LCAgIDU5LCAgIDYwLAogICAgIDEwMTYsICAgMjIsICAyMzgsICAgNjEsICAzNTEsICA5NDUsLTMyNzY2LC0zMjc2NiwtMzI3NjYsICA5NjcsCiAgICAgIDk2OCwgIDY0NiwgIDcwNSwgMTAwMCwgICAyOCwgLTQ1NiwgIDEyNSwgIDk2NiwtMzI3NjYsLTMyNzY2LAogICAgLTMyNzY2LCAgNzE1LCAgMzk4LCAgMzk5LCAgMjE2LCAxMDAwLC0zMjc2NiwgIDMzOSwtMzI3NjYsLTMyNzY2LAogICAgLTMyNzY2LC0zMjc2NiwgICAyNSwgIDIyMiwgIDk4MCwgIDU1MiwgIDM1NSwgIDM3OCwtMzI3NjYsIC00MjMsCiAgICAtMzI3NjYsLTMyNzY2LC0zMjc2NiwgIDEyMSwgICA2NSwgMTA0NSwgIDQwOCwgMTA0NywgMTA0NiwgIDI3NCwKICAgICAgMjc0LCAgMTMxLCAgMjQ0LCAtNDIzLCAgMzk0LCAgMzk1LCAgMzU4LCAgNTE5LCAgOTQ1LCAgNTM3LAogICAgIC00MjMsICAxMTEsIC00MjYsICAzOTgsICAzOTksICAxMzAsICA5NzIsICA5NzMsICA5NzQsICA5NzUsCiAgICAgIDk2OSwgIDk3MCwgIDI0MywgIDEyOCwgLTQyMiwgLTQyMSwgMTAxMywgIDQwOSwgIDk3NiwgIDk3MSwKICAgICAgMzUzLCAgNzkxLCAgNzkyLCAgICA3LCAtMTYyLCAgIDYzLCAgMTI0LCAgMjU1LCAgNzAxLCAgMjU2LAogICAgICAyNzQsICAzODIsIC0xMjIsIC0xMjIsIC0xMjIsICAgLTQsICA3MTUsICAzODMsICA2NDYsIDEwNDIsCiAgICAgLTQyMSwgIDcwNCwgIDI3NCwgLTIxOSwgICAzMywgICAxNywgIDM4NCwgLTEyMiwgIDM4NSwgLTEyMiwKICAgICAgMzg2LCAtMTIyLCAgMzg3LCAtMTIyLCAgMzY5LCAgMzg4LCAtMTIyLCAtMTIyLCAtMTIyLCAgIDM0LAogICAgICAgMzUsICAzODksICAzNTIsICA1MjAsICAgMzYsICAzOTAsICAzNTMsICA3MDIsICAgNjIsICAxMTIsCiAgICAgIDgxOCwgIDI4NywgIDI4OCwgIDM5MSwgIDM5MiwgLTQyMiwgLTQyMSwgLTE2MSwgIDM1MCwgIDM5MywKICAgICAgIDQwLCAgIDM4LCAgNjkwLCAgNzM1LCAgMzk2LCAgMzk3LCAgMzYxLCAgIDIyLCAgMTIyLCAtNDIyLAogICAgIC00MjEsLTMyNzY2LC0zMjc2NiwtMzI3NjYsICA3OTEsICA3OTIsIC00MjIsIC00MjEsIC00MjUsIDEwMDAsCiAgICAgLTQ1NiwgLTQyMSwgLTIzOCwgIDk2NiwgIDQwOSwgICA0MSwgIDM4MiwgIDM1MywgIDcxNywgIDUzNSwKICAgICAtMTIyLC0zMjc2NiwgIDM4MywtMzI3NjYsLTMyNzY2LCAtNDIxLCAgNzA0LCAgIDIxLCAgODEzLCAgIDMzLAogICAgICAgMTcsICAzODQsIC00MjEsICAzODUsIC00NjYsICAzODYsICAyMjQsICAzODcsIC00NjcsICAyNzMsCiAgICAgIDM4OCwgIDM2NywgIDk0NSwgLTQ1OCwgICAzNCwgICAzNSwgIDM4OSwgIDM1MiwgIDM0NSwgICAzNiwKICAgICAgMzkwLCAgMjQ4LCAgMjQ3LCAgIDYyLCAgMjU0LCAgNzE1LCAgMjg3LCAgMjg4LCAgMzkxLCAgMzkyLAogICAgICAzOTksLTMyNzY2LC0zMjc2NiwtMzI3NjYsICAzOTMsICAyOTUsIDEwMDAsICA2NTIsICA3MzUsICAzOTYsCiAgICAgIDM5NywgIDExNywgIDExNSwgIDExMywgIDgxNCwgIDExOSwgICA3MiwgICA3MywgICA3NCwgLTE2MiwKICAgICAgNzY0LCAgIDY1LCAgMjQwLCAgNTQxLCAgMzcwLCAgNTE4LCAgMjc0LCAgMTE4LCAgMjcwLCAgIDkyLAogICAgICAgOTMsICAgOTQsICAyNDIsICA3MTcsICA1MzUsICAgLTQsICAgMjYsIDEwMDAsICAgNzUsICAgNzYsCiAgICAgICA3NywgICA3OCwgICA3OSwgICA4MCwgICA4MSwgICA4MiwgICA4MywgICA4NCwgICA4NSwgICA4NiwKICAgICAgIDg3LCAgIDg4LCAgIDg5LCAgIDkwLCAgIDkxLCAgIDkyLCAgIDkzLCAgIDk0LCAgIDk1LCAgIDk2LAogICAgICAgOTcsICA1NDcsICAyNDAsICA3MTMsICA3MTUsICAzODIsICAyNzYsLTMyNzY2LC0zMjc2NiwgIDEyNiwKICAgICAgOTQ1LCAgMzgzLCAtMTYxLCAgOTM4LCAgIDk4LCAgNzA0LCAgMjI1LCAgNjU5LCAgIDMzLCAgIDE3LAogICAgICAzODQsICAzNDYsICAzODUsICAyNzQsICAzODYsICA3MjgsICAzODcsICAyMjEsICAxMjAsICAzODgsCiAgICAgIDUwNSwgIDUwNiwgIDU0MCwgICAzNCwgICAzNSwgIDM4OSwgIDcxNSwgLTIzOCwgICAzNiwgIDM5MCwKICAgICAxMDE3LCAgMjIzLCAgIDYyLCAgNDk0LCAgIDE4LCAgMjg3LCAgMjg4LCAgMTI3LCAgMjk3LCAgMzc2LAogICAgICAgIDYsICAgOTgsICA3OTgsICAzOTMsICAyNzQsICA2NjAsICA2NjEsICA0OTAsICA0OTEsIC00NjYsCiAgICAgICAzOSwgLTQ2NiwgIDUxNCwgLTQ2NywgIDUzOSwgLTQ2NywgICAxNiwgIDQ1OCwgLTQ1OCwgIDMxNSwKICAgICAgNzkxLCAgNzkyLCAgODI5LCAgNTUzLCAgMzgyLCAgODE3LCAgNTYzLCAgNjUzLCAgNTM4LCAgNzY1LAogICAgICAzODMsICA0NDksICA3NTEsICA1MzUsICA3MDQsICA0NDgsICA0MzUsICAgMzMsICAgMTcsICAzODQsCiAgICAgIDQzMCwgIDM4NSwgIDY0NiwgIDM4NiwgIDM1OSwgIDM4NywgIDM1NywgIDY0NywgIDM4OCwgIDY3MywKICAgICAgNDI5LCAxMDQwLCAgIDM0LCAgIDM1LCAgMzg5LCAgNzE1LCAgMzgyLCAgIDM2LCAgMzkwLCAgOTQxLAogICAgICA0OTIsICAgNjIsICAzODMsICA1MDMsICAyODcsICAyODgsICA3MDQsICA0MzQsICA0NDAsICAgMzMsCiAgICAgICAxNywgIDM4NCwgIDM5MywgIDM4NSwtMzI3NjYsICAzODYsICA0NDUsICAzODcsICA0OTUsICA1MDksCiAgICAgIDM4OCwgICAxMCwgIDUyOSwgIDU0MiwgICAzNCwgICAzNSwgIDM4OSwgIDcxNSwgIDUxNSwgICAzNiwKICAgICAgMzkwLCAgNDk5LCAgNTAwLCAgIDYyLCAgMjE0LCAgLTgwLCAgMjg3LCAgMjg4LCAgNDUyLCAgMjY5LAogICAgICA3MzYsICA3MTcsICA1MzUsICA0ODgsICAzOTMsICAzNTYsICAyNjYsICA5NzksICAyNjUsICA3MzAsCiAgICAgIDk4MiwgIDcyMiwgIDM1OCwgIDMzOCwgIDQ5MywgIDU0OCwgICAgMCwgIDI5NCwgIDczNywgICAgMCwKICAgICAgICAzLCAgICAwLCAgMzA5LCAgICAwLCAgICAwLCAgMzgyLCAgICAwLCAgICAwLCAgMjcxLCAgICAwLAogICAgICAgIDAsICAzODMsICAgIDAsICA3MTcsICA1MzUsICA3MDQsICAyMjcsICAgIDAsICAgMzMsICAgMTcsCiAgICAgIDM4NCwgICAgOSwgIDM4NSwgICAgMCwgIDM4NiwgICAgMCwgIDM4NywgLTM4MiwgICAgMCwgIDM4OCwKICAgICAgICAwLCAgICAwLCAgMzI1LCAgIDM0LCAgIDM1LCAgMzg5LCAgNzE1LCAgMzgyLCAgIDM2LCAgMzkwLAogICAgICAzMjEsICAzNDEsICAgNjIsICAzODMsICAzNDAsICAyODcsICAyODgsICA3MDQsICAgMjIsICAzMjAsCiAgICAgICAzMywgICAxNywgIDM4NCwgIDM5MywgIDM4NSwgIDQ0MiwgIDM4NiwgIDMzNywgIDM4NywgIDU2MiwKICAgICAxMDAwLCAgMzg4LCAgIDMyLCAgIDMxLCAgOTY2LCAgIDM0LCAgIDM1LCAgMzg5LCAgODIzLCAgNjU3LAogICAgICAgMzYsICAzOTAsICA2NTYsICA4MjEsICAgNjIsICA3MDMsICA3MTEsICAyODcsICAyODgsICA1NjEsCiAgICAgIDgyMiwgIDgyNSwgIDcxNywgIDUzNSwgIDY5NSwgIDM5MywgIDc0NywgIDc0OSwgIDY5MywgIDc1OSwKICAgICAgNzU4LCAgNzUyLCAgNzY3LCAgOTQ1LCAgODI0LCAgNzA2LCAgNzAwLCAgNzEyLCAgNjk5LCAgNjk4LAogICAgICA2NTgsICAgIDAsICAyNjMsICAyNjIsICA1NTksICA1NTgsICAzODIsICA1NTYsICA1NTQsICA1NTEsCiAgICAgIDM5OCwgIDM5OSwgIDM4MywgIDU1MCwgIDcxNywgIDUzNSwgIDcwNCwgIDU0NiwgIDU0NSwgICAzMywKICAgICAgIDE3LCAgMzg0LCAgNTQzLCAgMzg1LCAgNTM2LCAgMzg2LCAgIDcxLCAgMzg3LCAgOTMzLCAgOTMyLAogICAgICAzODgsICAgMzAsICAgNjUsICA3MzEsICAgMzQsICAgMzUsICAzODksICAyNzQsICA3MjQsICAgMzYsCiAgICAgIDM5MCwgIDgzMCwgIDczNCwgICA2MiwgIDY2MywgIDY2MiwgIDI4NywgIDI4OCwtMzI3NjYsLTMyNzY2LAogICAgLTMyNzY2LCAgNzMzLCAgNzMyLCAgOTM0LCAgMzkzLCAgNjY1LCAgNjY0LCAgNzU2LCAgNTU1LCAgNjkxLAogICAgIDEwNDEsIDEwMDEsICA5OTQsIDEwMDYsIDEwMTEsIDEwMTQsICA3NTcsIDEwNDMsLTMyNzY2LCAgNjU0LAogICAgLTMyNzY2LC0zMjc2NiwtMzI3NjYsLTMyNzY2LC0zMjc2NiwtMzI3NjYsLTMyNzY3LC0zMjc2NywtMzI3NjcsLTMyNzY3LAogICAgLTMyNzY3LCAgNjU1LCAxMDQ0LCAgNzE3LCAgNTM1LCAtNDQ2LCAgOTI2LCAgMzQ4LCAgMzQzLCAgMjY4LAogICAgICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAyMTgsICAyMTcsICAxMzIsICAxMjksIC00MjYsIC00MjUsCiAgICAgLTQyNCwgIDEyMywgICAyMCwgICAyMywgICA3MCwgICA2OSwgICAyOSwgICAzNywgICA2NCwgICA2OCwKICAgICAgIDY2LCAgIDY3LCAtNDQ4LCAgICAwLCAgIDE1LCAgIDE5LCAgMjUwLCAgOTEwLCAgMjk2LCAtMjE3LAogICAgICA0NjcsICA0ODQsICA5MDksICA0NzIsICA1MjgsICA5MTMsICAgMTEsICA5NjQsICA5NTUsIC0yMTUsCiAgICAgIDUyNSwgIDM3OSwgIDM3NSwgIDM3MywgIDM3MSwgICAxNCwgICAxMywgICAxMiwgLTIxNCwgICAgMCwKICAgICAtMzkzLCAgICAwLCAxMDA1LCAxMDM5LCAgOTkyLCAgOTkzLCAgOTYzLCAgICAwLCAgOTgxCl07CgpQSFAuUGFyc2VyLnByb3RvdHlwZS55eWNoZWNrID0gWwogICAgICAgIDIsICAgIDMsICAgIDQsICAgIDUsICAgIDYsICAgMTMsICAgIDgsICAgIDksICAgMTAsICAgMTEsCiAgICAgICAxMiwgICAgMCwgICAxNSwgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMiwKICAgICAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgICA4LCAgICA5LCAgIDEwLCAgIDUwLCAgIDUxLAogICAgICAgNTIsICAgIDcsICAgNTQsICAgIDcsICAgNzksICAgIDgsICAgIDksICAgMTAsICAgIDgsICAgIDksCiAgICAgICAxMCwgICA3NywgICAgNywgICAxMywgICA2NiwgICAyOCwgICAgNywgICAzMCwgICAzMSwgICAzMiwKICAgICAgIDMzLCAgIDM0LCAgIDU0LCAgIDU2LCAgIDU3LCAgIDI4LCAgICA4LCAgIDMwLCAgIDMxLCAgIDMyLAogICAgICAgMzMsICAgMzQsICAgMzUsICAgMzUsICAxMDksICAgIDEsICAgNjgsICAgNjksICAgNzAsICAgNzEsCiAgICAgICA3MiwgICA3MywgICA3NCwgIDExOCwgICAgNywgICA3NywgIDExMiwgIDExMywgIDExNCwgIDExNSwKICAgICAgMTE2LCAgMTE3LCAgIDg0LCAgIDg1LCAgIDg2LCAgIDg3LCAgIDg4LCAgIDg5LCAgIDkwLCAgIDkxLAogICAgICAgOTIsICAgOTMsICAgOTQsICAgOTUsICAgOTYsICAgOTcsICAgOTgsICAgOTksICAxMDAsICAxMDEsCiAgICAgIDEwMiwgIDEwMywgIDEwNCwgIDEwNSwgIDEwNiwgIDEwNywgIDEwOCwgIDEwOSwgIDExMCwgIDExMSwKICAgICAgMTEyLCAgMTEzLCAgMTE0LCAgMTE1LCAgMTE2LCAgMTE3LCAgMTE4LCAgMTE5LCAgMTIwLCAgMTIxLAogICAgICAxMjIsICAxMjMsICAxMjQsICAxMjUsICAxMjYsICAxMjcsICAgIDcsICAxMjksICAxMzAsICAxMzEsCiAgICAgIDEzMiwgIDEzMywgIDEzNCwgIDEzNSwgIDEzNiwgIDEzNywgICAgMiwgICAgMywgICAgNCwgICAgNSwKICAgICAgICA2LCAgMTQzLCAgMTQ0LCAgMTQ1LCAgMTUyLCAgIDExLCAgIDEyLCAgICA3LCAgIDE0LCAgIDQxLAogICAgICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAxMDksICAgIDcsCiAgICAgICA2NywgIDExMiwgIDExMywgIDExNCwgIDExNSwgIDExNiwgIDExNywgIDExOCwgICAgOCwgICAgOSwKICAgICAgIDEwLCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgyLCAgMTQ3LCAgIDgzLCAgIDgyLCAgIDY3LCAgIDI4LAogICAgICAxNTIsICAgNDcsICAgNDgsICAxMDIsICAxMDMsICAgIDcsICAgIDcsICAgNTMsICAgMjgsICAgNTUsCiAgICAgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwKICAgICAgICAxLCAgIDY3LCAgIDY4LCAgIDY5LCAgIDcwLCAgMTEyLCAgICA4LCAgICA5LCAgIDEwLCAgIDc1LAogICAgICAgNzYsICAgNzcsICAxNDgsICAgNzksICAgMTMsICAgIDcsICAgNjcsICAgODMsICAgIDgsICAgIDksCiAgICAgICAxMCwgICAgMSwgIDEyOSwgIDEzMCwgICAxMywgICA3OSwgICAyOCwgIDE0NiwgICAzMCwgICAzMSwKICAgICAgIDMyLCAgIDMzLCAgMTQwLCAgMTQxLCAgMTM5LCAgIDI5LCAgMTAyLCAgICA3LCAgIDI4LCAgMTI4LAogICAgICAgMzAsICAgMzEsICAgMzIsICAxNDksICAxNTEsICAgNzcsICAxMTIsICAgNzksICAgODAsICAxNTYsCiAgICAgIDE1NiwgICAxNSwgICAyOCwgIDE0MiwgIDEyMCwgIDEyMSwgIDE0NiwgICA3NywgIDExMiwgIDE0OSwKICAgICAgMTQ5LCAgIDE1LCAgMTUxLCAgMTI5LCAgMTMwLCAgIDE1LCAgMTMyLCAgMTMzLCAgMTM0LCAgMTM1LAogICAgICAxMzYsICAxMzcsICAxMzgsICAgMTUsICAgNjcsICAgNjcsICAgNzcsICAxNDMsICAxNDQsICAxNDUsCiAgICAgIDE0NiwgIDEzMCwgIDEzMSwgICAgNywgICAgNywgIDE1MSwgICAxNSwgIDE1MywgIDE0OCwgIDE1NSwKICAgICAgMTU2LCAgIDcxLCAgIDcyLCAgIDczLCAgIDc0LCAgICAwLCAgICAxLCAgIDc3LCAgIDc3LCAgMTUwLAogICAgICAgNjcsICAgODEsICAxNTYsICAxNTIsICAgODQsICAgODUsICAgODYsICAgODcsICAgODgsICAgODksCiAgICAgICA5MCwgICA5MSwgICA5MiwgICA5MywgICAyOSwgICA5NSwgICA5NiwgICA5NywgICA5OCwgICA5OSwKICAgICAgMTAwLCAgMTAxLCAgMTAyLCAgMTQzLCAgMTA0LCAgMTA1LCAgMTQ2LCAgMTQ4LCAgMTA4LCAgIDE1LAogICAgICAxNTAsICAxMTEsICAxMTIsICAxMTMsICAxMTQsICAxMjgsICAxMjgsICAgIDcsICAgIDcsICAxMTksCiAgICAgICA2NywgICA2NywgIDEyMiwgIDEyMywgIDEyNCwgIDEyNSwgICAgNywgICA2NywgIDE0OSwgIDE0MiwKICAgICAgMTQyLCAgICA4LCAgICA5LCAgIDEwLCAgMTMwLCAgMTMxLCAgMTQ5LCAgMTQ5LCAgMTUxLCAgIDc5LAogICAgICAxNTIsICAxMjgsICAgIDcsICAgODMsICAxNDMsICAgIDcsICAgNzEsICAxNDYsICAxNDgsICAxNDksCiAgICAgIDE1MCwgICAyOCwgICA3NywgICAzMCwgICAzMSwgIDE0MiwgICA4MSwgICAgNywgIDE0OCwgICA4NCwKICAgICAgIDg1LCAgIDg2LCAgMTQ5LCAgIDg4LCAgICA3LCAgIDkwLCAgIDM1LCAgIDkyLCAgICA3LCAgIDMzLAogICAgICAgOTUsICAgIDcsICAxMTIsICAgIDcsICAgOTksICAxMDAsICAxMDEsICAxMDIsICAxMDMsICAxMDQsCiAgICAgIDEwNSwgIDEyOCwgIDEyOCwgIDEwOCwgIDEwOSwgICAgMSwgIDExMSwgIDExMiwgIDExMywgIDExNCwKICAgICAgMTMwLCAgICA4LCAgICA5LCAgIDEwLCAgMTE5LCAgMTQyLCAgIDc5LCAgMTIyLCAgMTIzLCAgMTI0LAogICAgICAxMjUsICAgMTUsICAxNDksICAxNDksICAxNDgsICAgMjksICAgIDgsICAgIDksICAgMTAsICAxNTIsCiAgICAgICAyOSwgIDE1MSwgICA1NCwgICAyOSwgIDE0OSwgICA3OSwgIDE1NiwgICAxNSwgIDE0MywgICA0NywKICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAgMTQ4LCAgMTQ5LCAgMTUwLCAgIDI4LCAgIDc5LCAgIDMwLCAgIDMxLAogICAgICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsCiAgICAgICA0MiwgICA0MywgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICA1MCwgICA1MSwKICAgICAgIDUyLCAgIDI5LCAgIDU0LCAgIDI5LCAgICAxLCAgIDcxLCAgIDY3LCAgICA4LCAgICA5LCAgIDI5LAogICAgICAxMTIsICAgNzcsICAxNTIsICAxNTIsICAgNjYsICAgODEsICAgMzUsICAxNDgsICAgODQsICAgODUsCiAgICAgICA4NiwgIDEyMywgICA4OCwgIDE1NiwgICA5MCwgICAzNSwgICA5MiwgICAzNSwgIDE0NywgICA5NSwKICAgICAgIDcyLCAgIDczLCAgIDI5LCAgIDk5LCAgMTAwLCAgMTAxLCAgICAxLCAgMTUyLCAgMTA0LCAgMTA1LAogICAgICAxNTIsICAgMzUsICAxMDgsICAgNzIsICAgNzMsICAxMTEsICAxMTIsICAgOTcsICAgOTgsICAxMDIsCiAgICAgIDEwMywgICA2NiwgIDE1MiwgIDExOSwgIDE1NiwgIDEwMiwgIDEwMywgIDEwNiwgIDEwNywgIDE1MiwKICAgICAgIDY3LCAgMTU0LCAgIDc0LCAgMTUyLCAgIDI5LCAgMTU0LCAgMTUyLCAgMTI4LCAgMTUyLCAgIDc4LAogICAgICAxMzAsICAxMzEsICAxNDgsICAxNDksICAgNzEsICAxNDgsICAxNDksICAxNDgsICAxNDksICAxNDgsCiAgICAgICA3NywgICA3NywgIDE0OCwgIDE0OSwgICA4MSwgICA3NywgICA3NywgICA4NCwgICA4NSwgICA4NiwKICAgICAgIDc3LCAgIDg4LCAgIDc3LCAgIDkwLCAgIDc3LCAgIDkyLCAgIDc3LCAgIDc3LCAgIDk1LCAgIDc3LAogICAgICAgNzcsICAgNzcsICAgOTksICAxMDAsICAxMDEsICAgIDEsICAgNzEsICAxMDQsICAxMDUsICAgNzksCiAgICAgICA3OSwgIDEwOCwgICA3NywgICA3OSwgIDExMSwgIDExMiwgICA4MSwgICA3OSwgICA4MiwgICA4NCwKICAgICAgIDg1LCAgIDg2LCAgMTE5LCAgIDg4LCAgIDgyLCAgIDkwLCAgIDg2LCAgIDkyLCAgIDg3LCAgIDk2LAogICAgICAgOTUsICAgOTQsICAgODksICAgMjksICAgOTksICAxMDAsICAxMDEsICAgIDEsICAgOTEsICAxMDQsCiAgICAgIDEwNSwgICA5MywgICA5NiwgIDEwOCwgICA5NCwgICA5NCwgIDExMSwgIDExMiwgICA5NCwgIDExMCwKICAgICAgMTIzLCAgMTQ4LCAgMTQ5LCAgMTA5LCAgMTE5LCAgMTAyLCAgMTI3LCAgMTM5LCAgMTI2LCAgMTQ3LAogICAgICAxMzksICAxNTAsICAxNDYsICAxNDksICAxNTQsICAgMjksICAgLTEsICAxNDIsICAxMjMsICAgLTEsCiAgICAgIDE0MiwgICAtMSwgIDE0NiwgICAtMSwgICAtMSwgICA3MSwgICAtMSwgICAtMSwgIDEyNiwgICAtMSwKICAgICAgIC0xLCAgIDc3LCAgIC0xLCAgMTQ4LCAgMTQ5LCAgIDgxLCAgIDM1LCAgIC0xLCAgIDg0LCAgIDg1LAogICAgICAgODYsICAxNDIsICAgODgsICAgLTEsICAgOTAsICAgLTEsICAgOTIsICAxNDIsICAgLTEsICAgOTUsCiAgICAgICAtMSwgICAtMSwgIDE0NiwgICA5OSwgIDEwMCwgIDEwMSwgICAgMSwgICA3MSwgIDEwNCwgIDEwNSwKICAgICAgMTQ2LCAgMTQ2LCAgMTA4LCAgIDc3LCAgMTQ2LCAgMTExLCAgMTEyLCAgIDgxLCAgIDY3LCAgMTQ2LAogICAgICAgODQsICAgODUsICAgODYsICAxMTksICAgODgsICAxNDYsICAgOTAsICAxNDksICAgOTIsICAxNDgsCiAgICAgICA3OSwgICA5NSwgIDE0OCwgIDE0OCwgICA4MywgICA5OSwgIDEwMCwgIDEwMSwgIDE0OCwgIDE0OCwKICAgICAgMTA0LCAgMTA1LCAgMTQ4LCAgMTQ4LCAgMTA4LCAgMTQ4LCAgMTQ4LCAgMTExLCAgMTEyLCAgMTQ4LAogICAgICAxNDgsICAxNDgsICAxNDgsICAxNDksICAxNDgsICAxMTksICAxNDgsICAxNDgsICAxNDgsICAxNDgsCiAgICAgIDE0OCwgIDE0OCwgIDE0OCwgIDExMiwgIDE0OCwgIDE0OCwgIDE0OCwgIDE0OCwgIDE0OCwgIDE0OCwKICAgICAgMTQ4LCAgIC0xLCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgMTQ5LCAgIDcxLCAgMTQ5LCAgMTQ5LCAgMTQ5LAogICAgICAxMjksICAxMzAsICAgNzcsICAxNDksICAxNDgsICAxNDksICAgODEsICAxNDksICAxNDksICAgODQsCiAgICAgICA4NSwgICA4NiwgIDE0OSwgICA4OCwgIDE0OSwgICA5MCwgIDE0OSwgICA5MiwgIDE1MCwgIDE1MCwKICAgICAgIDk1LCAgMTUxLCAgMTUxLCAgMTUwLCAgIDk5LCAgMTAwLCAgMTAxLCAgMTU2LCAgMTUwLCAgMTA0LAogICAgICAxMDUsICAxNTAsICAxNTAsICAxMDgsICAxNTAsICAxNTAsICAxMTEsICAxMTIsICAgIDgsICAgIDksCiAgICAgICAxMCwgIDE1MCwgIDE1MCwgIDE1MCwgIDExOSwgIDE1MCwgIDE1MCwgIDE1MCwgIDE1MCwgIDE1MCwKICAgICAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAgMTUwLCAgIDI4LCAgMTUwLAogICAgICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksCiAgICAgICA0MCwgIDE1MCwgIDE1MCwgIDE0OCwgIDE0OSwgIDE1MSwgIDE1MywgIDE1MSwgIDE1MSwgIDE1MSwKICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLAogICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsCiAgICAgIDE1MSwgIDE1MSwgIDE1MSwgICAtMSwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwgIDE1MiwKICAgICAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLCAgMTUyLAogICAgICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAxNTIsICAgLTEsCiAgICAgIDE1MywgICAtMSwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwgICAtMSwgIDE1NQpdOwoKUEhQLlBhcnNlci5wcm90b3R5cGUueXliYXNlID0gWwogICAgICAgIDAsICAyMjAsICAyOTUsICAgOTQsICAxODAsICA1NjAsICAgLTIsICAgLTIsICAgLTIsICAgLTIsCiAgICAgIC0zNiwgIDQ3MywgIDU3NCwgIDYwNiwgIDU3NCwgIDUwNSwgIDQwNCwgIDY3NSwgIDY3NSwgIDY3NSwKICAgICAgIDI4LCAgMzUxLCAgNDYyLCAgNDYyLCAgNDYyLCAgNDYxLCAgMzk2LCAgNDc2LCAgNDUxLCAgMTM0LAogICAgICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsCiAgICAgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwKICAgICAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LAogICAgICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsCiAgICAgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwKICAgICAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LAogICAgICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsCiAgICAgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwKICAgICAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LCAgMTM0LAogICAgICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsCiAgICAgIDEzNCwgIDEzNCwgIDEzNCwgIDQwMSwgICA2NCwgIDIwMSwgIDU2OCwgIDcwNCwgIDcxMywgIDcwOCwKICAgICAgNzAyLCAgNzE0LCAgNTIwLCAgNzA2LCAgNzA1LCAgMjExLCAgNjUwLCAgNjUxLCAgNDUwLCAgNjUyLAogICAgICA2NTMsICA2NTQsICA2NTUsICA3MDksICA0ODAsICA3MDMsICA3MTIsICA0MTgsICA0MTgsICA0MTgsCiAgICAgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwKICAgICAgNDE4LCAgNDE4LCAgNDE4LCAgIDQ4LCAgIDMwLCAgNDY5LCAgNDAzLCAgNDAzLCAgNDAzLCAgNDAzLAogICAgICA0MDMsICA0MDMsICA0MDMsICA0MDMsICA0MDMsICA0MDMsICA0MDMsICA0MDMsICA0MDMsICA0MDMsCiAgICAgIDQwMywgIDQwMywgIDQwMywgIDQwMywgIDQwMywgIDE2MCwgIDE2MCwgIDE2MCwgIDM0MywgIDIxMCwKICAgICAgMjA4LCAgMTk4LCAgIDE3LCAgMjMzLCAgIDI3LCAgNzgwLCAgNzgwLCAgNzgwLCAgNzgwLCAgNzgwLAogICAgICAxMDgsICAxMDgsICAxMDgsICAxMDgsICA2MjEsICA2MjEsICAgOTMsICAyODAsICAyODAsICAyODAsCiAgICAgIDI4MCwgIDI4MCwgIDI4MCwgIDI4MCwgIDI4MCwgIDI4MCwgIDI4MCwgIDI4MCwgIDYzMiwgIDY0MSwKICAgICAgNjQyLCAgNjQzLCAgMzkyLCAgMzkyLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMzY4LCAgLTQ1LAogICAgICAxNDYsICAyMjQsICAyMjQsICAgOTUsICA0MTAsICA0OTEsICA3MzMsICAxOTksICAxOTksICAxMTEsCiAgICAgIDIwNywgIC0yMiwgIC0yMiwgIC0yMiwgICA4MSwgIDUwNiwgICA5MiwgICA5MiwgIDIzMywgIDIzMywKICAgICAgMjczLCAgMjMzLCAgNDIzLCAgNDIzLCAgNDIzLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLCAgMjIxLAogICAgICAxMTAsICAyMjEsICAyMjEsICAyMjEsICA2MTcsICA1MTIsICAxNjgsICA1MTYsICA2NDcsICAzOTcsCiAgICAgIDUwMywgIDY1NiwgIDI3NCwgIDM4MSwgIDM3NywgIDUzOCwgIDUzNSwgIDMzNywgIDUyMywgIDMzNywKICAgICAgNDIxLCAgNDQxLCAgNDI4LCAgNTI1LCAgMzM3LCAgMzM3LCAgMjg1LCAgNDAxLCAgMzk0LCAgMzc4LAogICAgICA1NjcsICA0NzQsICAzMzksICA1NjQsICAxNDAsICAxNzksICA0MDksICAzOTksICAzODQsICA1OTQsCiAgICAgIDU2MSwgIDcxMSwgIDMzMCwgIDcxMCwgIDM1OCwgIDE0OSwgIDM3OCwgIDM3OCwgIDM3OCwgIDM3MCwKICAgICAgNTkzLCAgNTQ4LCAgMzU1LCAgIC04LCAgNjQ2LCAgNDg0LCAgMjc3LCAgNDE3LCAgMzg2LCAgNjQ1LAogICAgICA2MzUsICAyMzAsICA2MzQsICAyNzYsICAzMzEsICAzNTYsICA1NjUsICA0ODUsICA0ODUsICA0ODUsCiAgICAgIDQ4NSwgIDQ4NSwgIDQ4NSwgIDQ2MCwgIDQ4NSwgIDQ4MywgIDY5MSwgIDY5MSwgIDQ3OCwgIDUwMSwKICAgICAgNDYwLCAgNjk2LCAgNDYwLCAgNDg1LCAgNjkxLCAgNDYwLCAgNDYwLCAgNTAyLCAgNDg1LCAgNTIyLAogICAgICA1MjIsICA0ODMsICA1MDgsICA0OTksICA2OTEsICA2OTEsICA0OTksICA0NzgsICA0NjAsICA1NzEsCiAgICAgIDU1MSwgIDUxNCwgIDQ4MiwgIDQxMywgIDQxMywgIDUxNCwgIDQ2MCwgIDQxMywgIDUwMSwgIDQxMywKICAgICAgIDExLCAgNjk3LCAgNjk5LCAgNDQ0LCAgNzAwLCAgNjk1LCAgNjk4LCAgNjc2LCAgNjk0LCAgNDkzLAogICAgICA2MTUsICA0OTcsICA1MTUsICA2ODQsICA2ODMsICA2OTMsICA0NzksICA0ODksICA2MjAsICA2OTIsCiAgICAgIDU0OSwgIDU5MiwgIDQ4NywgIDI0NiwgIDMxNCwgIDQ5OCwgIDQ2MywgIDY4OSwgIDUyMywgIDQ4NiwKICAgICAgNDU1LCAgNDU1LCAgNDU1LCAgNDYzLCAgNjg3LCAgNDU1LCAgNDU1LCAgNDU1LCAgNDU1LCAgNDU1LAogICAgICA0NTUsICA0NTUsICA0NTUsICA3MzIsICAgMjQsICA0OTUsICA1MTAsICA1OTEsICA1OTAsICA1ODksCiAgICAgIDQwNiwgIDU4OCwgIDQ5NiwgIDUyNCwgIDQyMiwgIDU5OSwgIDQ4OCwgIDU0OSwgIDU0OSwgIDY0OSwKICAgICAgNzI3LCAgNjczLCAgNDkwLCAgNjgyLCAgNzE2LCAgNjkwLCAgNTU1LCAgMTE5LCAgMjcxLCAgNjgxLAogICAgICA2NDgsICA1NDMsICA0OTIsICA1MzQsICA2ODAsICA1OTgsICAyNDYsICA3MTUsICA0OTQsICA2NzIsCiAgICAgIDU0OSwgIDY3MSwgIDQ1NSwgIDY3NCwgIDcwMSwgIDczMCwgIDczMSwgIDY4OCwgIDcyOCwgIDcyMiwKICAgICAgMTUyLCAgNTI2LCAgNTg3LCAgMTc4LCAgNzI5LCAgNjU5LCAgNTk2LCAgNTk1LCAgNTU0LCAgNzI1LAogICAgICA3MDcsICA3MjEsICA3MjAsICAxNzgsICA1NzYsICA1MTEsICA3MTcsICA1MTgsICA2NzcsICA1MDQsCiAgICAgIDY3OCwgIDYxMywgIDI1OCwgIDY1NywgIDY4NiwgIDU4NCwgIDcyNCwgIDcyMywgIDcyNiwgIDU4MywKICAgICAgNTgyLCAgNjA5LCAgNjA4LCAgMjUwLCAgMjM2LCAgNjg1LCAgNDQyLCAgNDU4LCAgNTE3LCAgNTgxLAogICAgICA1MDAsICA2MjgsICA2MDQsICA2NzksICA1ODAsICA1NzksICA2MjMsICA2MTksICA3MTgsICA1MjEsCiAgICAgIDQ4NiwgIDUxOSwgIDUwOSwgIDUwNywgIDUxMywgIDYwMCwgIDYxOCwgIDcxOSwgIDIwNiwgIDU3OCwKICAgICAgNTg2LCAgNTczLCAgNDgxLCAgNTcyLCAgNjMxLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTM0LCAgMTM0LCAgIC0yLCAgIC0yLCAgIC0yLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgLTIsICAxMzQsICAxMzQsICAxMzQsICAxMzQsICAxMzQsCiAgICAgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwgIDEzNCwKICAgICAgMTM0LCAgMTM0LCAgMTM0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0MTgsICA0MTgsICA0MTgsCiAgICAgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwKICAgICAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LAogICAgICA0MTgsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQxOCwgIDQxOCwgIDQxOCwKICAgICAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LAogICAgICA0MTgsICA0MTgsICA0MTgsICA0MTgsICA0MTgsICA0MTgsICA0MTgsICA0MTgsICA0MTgsICA0MTgsCiAgICAgIDQxOCwgIDQxOCwgIDQxOCwgIDQxOCwgICAtMywgIDQxOCwgIDQxOCwgICAtMywgIDQxOCwgIDQxOCwKICAgICAgNDE4LCAgNDE4LCAgNDE4LCAgNDE4LCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgMjIxLCAgMjIxLAogICAgICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEsCiAgICAgIDIyMSwgIDIyMSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgIC0yMiwgIC0yMiwgIDIyMSwgIDIyMSwKICAgICAgMjIxLCAgMjIxLCAgMjIxLCAgIDQ5LCAgMjIxLCAgMjIxLCAgMjIxLCAgIDkyLCAgMjIxLCAgIDkyLAogICAgICAgOTIsICAzMzcsICAzMzcsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA0ODUsICAgOTIsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDQ4NSwgIDQ4NSwgIDQ4NSwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNDg1LCAgICAwLCAgICAwLCAgICAwLCAgMzM3LCAgIDkyLAogICAgICAgIDAsICA0MjAsICA0MjAsICAxNzgsICA0MjAsICA0MjAsICAgIDAsICAgIDAsICAgIDAsICA0ODUsCiAgICAgIDQ4NSwgICAgMCwgIDUwOCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDY5MSwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgNDU1LCAgMTE5LCAgNjgyLCAgICAwLCAgIDM5LCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICA0OTAsICAgMzksICAgMjYsICAgIDAsICAgMjYsICAgIDAsICAgIDAsCiAgICAgIDQ1NSwgIDQ1NSwgIDQ1NSwgICAgMCwgIDQ5MCwgIDQ5MCwgICAgMCwgICAgMCwgICA2NywgIDQ5MCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgIDY3LCAgIDM1LCAgICAwLCAgIDM1LCAgICAwLCAgICAwLCAgICAwLAogICAgICAxNzgKXTsKClBIUC5QYXJzZXIucHJvdG90eXBlLnl5ZGVmYXVsdCA9IFsKICAgICAgICAzLDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsCiAgICAzMjc2NywzMjc2NywgIDQ2OCwgIDQ2OCwgIDQ2OCwzMjc2NywzMjc2NywzMjc2NywzMjc2NywgIDI4NSwKICAgICAgNDYwLCAgMjg1LCAgMjg1LDMyNzY3LCAgNDE5LCAgNDE5LCAgNDE5LCAgNDE5LCAgNDE5LCAgNDE5LAogICAgICA0MTksICA0NjAsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsICAzNjQsMzI3NjcsMzI3NjcsCiAgICAzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsCiAgICAzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsCiAgICAzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsICA0NjUsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsCiAgICAzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LCAgMzQ3LCAgMzQ4LCAgMzUwLAogICAgICAzNTEsICAyODQsICA0MjAsICAyMzcsICA0NjQsICAyODMsICAxMTYsICAyNDYsICAyMzksICAxOTEsCiAgICAgIDI4MiwgIDIyMywgIDExOSwgIDMxMiwgIDM2NSwgIDMxNCwgIDM2MywgIDM2NywgIDMxMywgIDI5MCwKICAgICAgMjk0LCAgMjk1LCAgMjk2LCAgMjk3LCAgMjk4LCAgMjk5LCAgMzAwLCAgMzAxLCAgMzAyLCAgMzAzLAogICAgICAzMDQsICAzMDUsICAyODgsICAyODksICAzNjYsICAzNDQsICAzNDMsICAzNDIsICAzMTAsICAzMTEsCiAgICAgIDI4NywgIDMxNSwgIDMxNywgIDI4NywgIDMxNiwgIDMzMywgIDMzNCwgIDMzMSwgIDMzMiwgIDMzNSwKICAgICAgMzM2LCAgMzM3LCAgMzM4LCAgMzM5LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsICAyNjksICAyNjksCiAgICAgIDI2OSwgIDI2OSwgIDMyNCwgIDMyNSwgIDIyOSwgIDIyOSwgIDIyOSwgIDIyOSwzMjc2NywgIDI3MCwKICAgIDMyNzY3LCAgMjI5LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LCAgNDEzLAogICAgICAzNDEsICAzMTksICAzMjAsICAzMTgsMzI3NjcsICAzOTIsMzI3NjcsICAzOTQsICAzMDcsICAzMDksCiAgICAgIDM4NywgIDI5MSwzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsICAzODksICA0MjEsICA0MjEsMzI3NjcsMzI3NjcsMzI3NjcsICAzODEsMzI3NjcsCiAgICAgIDE1OSwgIDIxMCwgIDIxMiwgIDM5NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywgIDMyOSwKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LCAgNDc0LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsICA0MjEsMzI3NjcsMzI3NjcsMzI3NjcsICAzMjEsICAzMjIsICAzMjMsMzI3NjcsCiAgICAzMjc2NywzMjc2NywgIDQyMSwgIDQyMSwzMjc2NywzMjc2NywgIDQyMSwzMjc2NywgIDQyMSwzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsMzI3NjcsICAxNjMsMzI3NjcsMzI3NjcsICAzOTUsICAzOTUsMzI3NjcsMzI3NjcsCiAgICAgIDE2MywgIDM5MCwgIDE2MywzMjc2NywzMjc2NywgIDE2MywgIDE2MywgIDE3NiwzMjc2NywgIDE3NCwKICAgICAgMTc0LDMyNzY3LDMyNzY3LCAgMTc4LDMyNzY3LCAgNDM1LCAgMTc4LDMyNzY3LCAgMTYzLCAgMTk2LAogICAgICAxOTYsICAzNzMsICAxNjUsICAyMzEsICAyMzEsICAzNzMsICAxNjMsICAyMzEsMzI3NjcsICAyMzEsCiAgICAzMjc2NywzMjc2NywzMjc2NywgICA4MiwzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgICAzODMsMzI3NjcsMzI3NjcsMzI3NjcsICA0MDEsMzI3NjcsICA0MTQsICA0MzMsICAzODEsMzI3NjcsCiAgICAgIDMyNywgIDMyOCwgIDMzMCwzMjc2NywgIDQyMywgIDM1MiwgIDM1MywgIDM1NCwgIDM1NSwgIDM1NiwKICAgICAgMzU3LCAgMzU4LCAgMzYwLDMyNzY3LCAgNDYxLCAgMzg2LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsICAgODQsICAxMDgsICAyNDUsMzI3NjcsICA0NzMsICAgODQsICAzODQsMzI3NjcsCiAgICAgIDQ3MywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywgIDI4NiwzMjc2NywzMjc2NywKICAgIDMyNzY3LCAgIDg0LDMyNzY3LCAgIDg0LDMyNzY3LDMyNzY3LCAgNDU3LDMyNzY3LDMyNzY3LCAgNDIxLAogICAgICAzODUsMzI3NjcsICAzMjYsICAzOTgsICA0MzksMzI3NjcsMzI3NjcsICA0MjIsMzI3NjcsMzI3NjcsCiAgICAgIDIxOCwgICA4NCwzMjc2NywgIDE3NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgICAgNDAxLDMyNzY3LDMyNzY3LCAgMTc5LDMyNzY3LDMyNzY3LCAgNDIxLDMyNzY3LDMyNzY3LDMyNzY3LAogICAgMzI3NjcsMzI3NjcsICAyODEsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsICA0MjEsMzI3NjcsCiAgICAzMjc2NywzMjc2NywzMjc2NywgIDIyMiwzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywKICAgIDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LDMyNzY3LCAgIDgyLAogICAgICAgNjAsMzI3NjcsICAyNjMsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsMzI3NjcsCiAgICAzMjc2NywzMjc2NywzMjc2NywzMjc2NywzMjc2NywgIDEyMSwgIDEyMSwgICAgMywgICAgMywgIDEyMSwKICAgICAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLCAgMTIxLAogICAgICAxMjEsICAxMjEsICAxMjEsICAxMjEsICAyNDgsICAxNTQsICAyNDgsICAyMDQsICAyNDgsICAyNDgsCiAgICAgIDIwNywgIDE5NiwgIDE5NiwgIDI1NQpdOwoKUEhQLlBhcnNlci5wcm90b3R5cGUueXlnb3RvID0gWwogICAgICAxNjMsICAxNjMsICAxMzUsICAxMzUsICAxMzUsICAxNDYsICAxNDgsICAxNzksICAxNjQsICAxNjEsCiAgICAgIDE0NSwgIDE2MSwgIDE2MSwgIDE2MSwgIDE2MiwgIDE2MiwgIDE2MiwgIDE2MiwgIDE2MiwgIDE2MiwKICAgICAgMTYyLCAgMTQ1LCAgMTU3LCAgMTU4LCAgMTU5LCAgMTYwLCAgMTc2LCAgMTc0LCAgMTc3LCAgNDEwLAogICAgICA0MTEsICAyOTksICA0MTIsICA0MTUsICA0MTYsICA0MTcsICA0MTgsICA0MTksICA0MjAsICA0MjEsCiAgICAgIDQyMiwgIDg1NywgIDEzNiwgIDEzNywgIDEzOCwgIDEzOSwgIDE0MCwgIDE0MSwgIDE0MiwgIDE0MywKICAgICAgMTQ0LCAgMTQ3LCAgMTczLCAgMTc1LCAgMTc4LCAgMTk1LCAgMTk4LCAgMTk5LCAgMjAxLCAgMjAyLAogICAgICAyMDQsICAyMDUsICAyMDYsICAyMDcsICAyMDgsICAyMDksICAyMTAsICAyMTEsICAyMTIsICAyMTMsCiAgICAgIDIzMiwgIDIzMywgIDI1MSwgIDI1MiwgIDI1MywgIDMxNiwgIDMxNywgIDMxOCwgIDQ2MiwgIDE4MCwKICAgICAgMTgxLCAgMTgyLCAgMTgzLCAgMTg0LCAgMTg1LCAgMTg2LCAgMTg3LCAgMTg4LCAgMTg5LCAgMTkwLAogICAgICAxOTEsICAxOTIsICAxOTMsICAxNDksICAxOTQsICAxNTAsICAxNjUsICAxNjYsICAxNjcsICAxOTYsCiAgICAgIDE2OCwgIDE1MSwgIDE1MiwgIDE1MywgIDE2OSwgIDE1NCwgIDE5NywgIDEzMywgIDE3MCwgIDE1NSwKICAgICAgMTcxLCAgMTcyLCAgMTU2LCAgNTIxLCAgMjAwLCAgMjU3LCAgMjQ2LCAgNDY0LCAgNDMyLCAgNjg3LAogICAgICA2NDksICAyNzgsICA0ODEsICA0ODIsICA1MjcsICAyMDAsICA0MzcsICA0MzcsICA0MzcsICA3NjYsCiAgICAgICAgNSwgIDc0NiwgIDY1MCwgIDU1NywgIDQzNywgIDQyNiwgIDc3NSwgIDc3MCwgIDQyOCwgIDQzMSwKICAgICAgNDQ0LCAgNDY1LCAgNDY2LCAgNDY4LCAgNDgzLCAgMjc5LCAgNjUxLCAgMzM2LCAgNDUwLCAgNDUzLAogICAgICA0MzcsICA1NjAsICA0ODUsICA0ODcsICA1MDgsICA1MTEsICA3NjMsICA1MTYsICA1MTcsICA3NzcsCiAgICAgIDUyNCwgIDc2MiwgIDUyNiwgIDUzMiwgIDc3MywgIDUzNCwgIDQ4MCwgIDQ4MCwgIDk2NSwgIDk2NSwKICAgICAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LCAgOTY1LAogICAgICA0MTMsICA0MTMsICA0MTMsICA0MTMsICA0MTMsICA0MTMsICA0MTMsICA0MTMsICA0MTMsICA0MTMsCiAgICAgIDQxMywgIDQxMywgIDQxMywgIDQxMywgIDk0MiwgIDUwMiwgIDQ3OCwgIDQ5NiwgIDUxMiwgIDQ1NiwKICAgICAgMjk4LCAgNDM3LCAgNDM3LCAgNDUxLCAgNDcxLCAgNDM3LCAgNDM3LCAgNjc0LCAgNDM3LCAgMjI5LAogICAgICA0NTYsICAyMzAsICAyMzEsICA0NjMsICA4MjgsICA1MzMsICA2ODEsICA0MzgsICA1MTMsICA4MjYsCiAgICAgIDQ2MSwgIDQ3NSwgIDQ2MCwgIDQxNCwgIDQxNCwgIDQxNCwgIDQxNCwgIDQxNCwgIDQxNCwgIDQxNCwKICAgICAgNDE0LCAgNDE0LCAgNDE0LCAgNDE0LCAgNDE0LCAgNDE0LCAgNDE0LCAgMzAxLCAgNjc0LCAgNjc0LAogICAgICA0NDMsICA0NTQsIDEwMzMsIDEwMzMsIDEwMzQsIDEwMzQsICA0MjUsICA1MzEsICA0MjUsICA3MDgsCiAgICAgIDc1MCwgIDgwMCwgIDQ1NywgIDM3MiwgMTAzMywgIDk0MywgMTAzNCwgMTAyNiwgIDMwMCwgMTAxOCwKICAgICAgNDk3LCAgICA4LCAgMzEzLCAgOTA0LCAgNzk2LCAgOTQ0LCAgOTk2LCAgNzg1LCAgNzg5LCAxMDA3LAogICAgICAyODUsICA2NzAsIDEwMzYsICAzMjksICAzMDcsICAzMTAsICA4MDQsICA2NjgsICA1NDQsICAzMzIsCiAgICAgIDkzNSwgIDk0MCwgIDM2NiwgIDgwNywgIDY3OCwgIDQ3NywgIDM3NywgIDc1NCwgIDg0NCwgICAgMCwKICAgICAgNjY3LCAgNjY3LCAgNjc1LCAgNjc1LCAgNjc1LCAgNjc3LCAgICAwLCAgNjY2LCAgMzIzLCAgNDk4LAogICAgICAzMjgsICAzMTIsICAzMTIsICAyNTgsICAyNTksICAyODMsICA0NTksICAyNjEsICAzMjIsICAyODQsCiAgICAgIDMyNiwgIDQ4NiwgIDI4MCwgIDI4MSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgIDc5MCwgIDc5MCwgIDc5MCwgIDc5MCwgIDk0NiwgICAgMCwgIDk0NiwKICAgICAgNzkwLCAgNzkwLCAxMDA0LCAgNzkwLCAxMDA0LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgODM2LAogICAgICAgIDAsIDEwMTUsIDEwMTUsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDc0NCwgIDc0NCwgIDc0NCwgIDcyMCwgIDc0NCwgICAgMCwKICAgICAgNzM5LCAgNzQ1LCAgNzIxLCAgNzgwLCAgNzgwLCAxMDIzLCAgICAwLCAgICAwLCAxMDAyLCAgICAwLAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCiAgICAgICAgMCwgIDgwNiwgICAgMCwgIDgwNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgMTAwOCwgMTAwOQpdOwoKUEhQLlBhcnNlci5wcm90b3R5cGUueXlnY2hlY2sgPSBbCiAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCiAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCiAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCiAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgNTIsICAgNDUsICAxMTIsICAxMTIsICAgODAsICAgIDgsICAgMTAsCiAgICAgICAxMCwgICA2NCwgICA1NSwgICA1NSwgICA1NSwgICA0NSwgICAgOCwgICAgOCwgICAgOCwgICAxMCwKICAgICAgIDkyLCAgIDEwLCAgIDExLCAgIDEwLCAgICA4LCAgIDEwLCAgIDEwLCAgIDEwLCAgIDM4LCAgIDM4LAogICAgICAgMzgsICAgMzgsICAgMzgsICAgMzgsICAgNjIsICAgNjIsICAgMTIsICAgNjIsICAgMjgsICAgIDgsCiAgICAgICAgOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwgICAyOCwKICAgICAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDI4LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLAogICAgICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsCiAgICAgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywgIDExMywKICAgICAgMTEzLCAgMTEzLCAgMTEzLCAgMTEzLCAgIDc2LCAgIDU2LCAgIDM1LCAgIDM1LCAgIDU2LCAgIDY5LAogICAgICAgNTYsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgMTksICAgIDgsICAgNjAsCiAgICAgICA2OSwgICA2MCwgICA2MCwgICAgNywgICAgNywgICAgNywgICAyNSwgICAgOCwgICAgNywgICAgNywKICAgICAgICAyLCAgICAyLCAgICA4LCAgMTE1LCAgMTE1LCAgMTE1LCAgMTE1LCAgMTE1LCAgMTE1LCAgMTE1LAogICAgICAxMTUsICAxMTUsICAxMTUsICAxMTUsICAxMTUsICAxMTUsICAxMTUsICAgNTMsICAgMTksICAgMTksCiAgICAgICA1MywgICA1MywgIDEyMywgIDEyMywgIDEyNCwgIDEyNCwgIDEwOSwgICAgNSwgIDEwOSwgICA0NCwKICAgICAgIDI5LCAgIDc4LCAgMTE0LCAgIDUzLCAgMTIzLCAgIDc2LCAgMTI0LCAgMTIyLCAgIDQxLCAgMTIwLAogICAgICAgNDMsICAgNTMsICAgNDIsICAgOTYsICAgNzQsICAgNzYsICAgNzYsICAgNzIsICAgNzUsICAxMTcsCiAgICAgICAxNCwgICAyMSwgIDEyMywgICAxOCwgICAgOSwgICAxMywgICA3OSwgICAyMCwgICA2NiwgICAxNywKICAgICAgMTAyLCAgMTA0LCAgIDU4LCAgIDgxLCAgIDIyLCAgIDU5LCAgMTAwLCAgIDYzLCAgIDk0LCAgIC0xLAogICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgLTEsICAgMTksICAgNDUsICAgNDUsCiAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwKICAgICAgIDQ1LCAgIDQ1LCAgIDY0LCAgIDY0LCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLAogICAgICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgLTEsCiAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIC0xLCAgIDUyLAogICAgICAgNTIsICAgNTIsICAgODAsICAgNTIsICAgODAsICAgLTEsICAgLTEsICAgLTEsICAgLTEsICAgOTIsCiAgICAgICAtMSwgICA4MCwgICA4MCwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIC0xLAogICAgICAgNTIsICAgNTIsICAgNTIsICAgNjksICAgNjksICAgNjksICAgLTEsICAgLTEsICAgODAsICAgLTEsCiAgICAgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwgICAtMSwKICAgICAgIC0xLCAgIDgwLCAgIC0xLCAgIDgwLCAgIC0xLCAgIC0xLCAgIC0xLCAgIC0xLCAgIDgwLCAgIDgwCl07CgpQSFAuUGFyc2VyLnByb3RvdHlwZS55eWdiYXNlID0gWwogICAgICAgIDAsICAgIDAsIC0zMTcsICAgIDAsICAgIDAsICAyMzcsICAgIDAsICAyMTAsIC0xMzYsICAgIDQsCiAgICAgIDExOCwgIDEzMCwgIDE0NCwgIC0xMCwgICAxNiwgICAgMCwgICAgMCwgIC01OSwgICAxMCwgIC00NywKICAgICAgIC05LCAgICA3LCAgLTc3LCAgLTIwLCAgICAwLCAgMjA5LCAgICAwLCAgICAwLCAtMzg4LCAgMjM0LAogICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxNjUsICAgIDAsICAgIDAsICAxMDMsICAgIDAsCiAgICAgICAgMCwgIDIyNSwgICA0NCwgICA0NSwgIDIzNSwgICA4NCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKICAgICAgICAwLCAgICAwLCAgMTA5LCAtMTE1LCAgICAwLCAtMTEzLCAtMTc5LCAgICAwLCAgLTc4LCAgLTgxLAogICAgIC0zNDcsICAgIDAsIC0xMjIsICAtODAsIC0yNDksICAgIDAsICAtMTksICAgIDAsICAgIDAsICAxNjksCiAgICAgIC00OCwgICAgMCwgICAyNiwgICAgMCwgICAyMiwgICAyNCwgIC05OSwgICAgMCwgIDIzMCwgIC0xMywKICAgICAgMTE0LCAgLTc5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAogICAgICAgIDAsICAgIDAsICAxMjAsICAgIDAsICAtOTAsICAgIDAsICAgMjMsICAgIDAsICAgIDAsICAgIDAsCiAgICAgIC04OSwgICAgMCwgIC02NywgICAgMCwgIC02OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgOCwKICAgICAgICAwLCAgICAwLCAtMTQwLCAgLTM0LCAgMjI5LCAgICA5LCAgICAwLCAgIDIxLCAgICAwLCAgICAwLAogICAgICAyMTgsICAgIDAsICAyMzMsICAgLTMsICAgLTEsICAgIDAKXTsKClBIUC5QYXJzZXIucHJvdG90eXBlLnl5Z2RlZmF1bHQgPSBbCiAgICAtMzI3NjgsICAzODAsICA1NjUsICAgIDIsICA1NjYsICA2MzcsICA2NDUsICA1MDQsICA0MDAsICA0MzMsCiAgICAgIDc0OCwgIDY4OCwgIDY4OSwgIDMwMywgIDM0MiwgIDQwMSwgIDMwMiwgIDMzMCwgIDMyNCwgIDY3NiwKICAgICAgNjY5LCAgNjcxLCAgNjc5LCAgMTM0LCAgMzMzLCAgNjgyLCAgICAxLCAgNjg0LCAgNDM5LCAgNzE2LAogICAgICAyOTEsICA2OTIsICAyOTIsICA1MDcsICA2OTQsICA0NDYsICA2OTYsICA2OTcsICA0MjcsICAzMDQsCiAgICAgIDMwNSwgIDQ0NywgIDMxMSwgIDQ3OSwgIDcwNywgIDIwMywgIDMwOCwgIDcwOSwgIDI5MCwgIDcxMCwKICAgICAgNzE5LCAgMzM1LCAgMjkzLCAgNTEwLCAgNDg5LCAgNDY5LCAgNTAxLCAgNDAyLCAgMzYzLCAgNDc2LAogICAgICAyMjgsICA0NTUsICA0NzMsICA3NTMsICAyNzcsICA3NjEsICA1NDksICA3NjksICA3NzIsICA0MDMsCiAgICAgIDQwNCwgIDQ3MCwgIDc4NCwgIDM2OCwgIDc5NCwgIDc4OCwgIDk2MCwgIDMxOSwgIDc5OSwgIDgwNSwKICAgICAgOTkxLCAgODA4LCAgODExLCAgMzQ5LCAgMzMxLCAgMzI3LCAgODE1LCAgODE2LCAgICA0LCAgODIwLAogICAgICA1MjIsICA1MjMsICA4MzUsICAyMzksICA4NDMsICA4NTYsICAzNDcsICA5MjMsICA5MjUsICA0NDEsCiAgICAgIDM3NCwgIDkzNiwgIDM2MCwgIDMzNCwgIDkzOSwgIDk5NSwgIDM1NCwgIDQwNSwgIDM2NCwgIDk1MiwKICAgICAgMjYwLCAgMjgyLCAgMjQ1LCAgNDA2LCAgNDIzLCAgMjQ5LCAgNDA3LCAgMzY1LCAgOTk4LCAgMzE0LAogICAgIDEwMTksICA0MjQsIDEwMjcsIDEwMzUsICAyNzUsICA0NzQKXTsKClBIUC5QYXJzZXIucHJvdG90eXBlLnl5bGhzID0gWwogICAgICAgIDAsICAgIDEsICAgIDMsICAgIDMsICAgIDIsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAogICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCiAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwgICAgNiwKICAgICAgICA3LCAgICA3LCAgICA4LCAgICA4LCAgICA5LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAogICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgMTQsICAgMTQsICAgMTUsICAgMTUsCiAgICAgICAxNSwgICAxNSwgICAxNywgICAxNywgICAxMywgICAxMywgICAxOCwgICAxOCwgICAxOSwgICAxOSwKICAgICAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDE2LCAgIDE2LCAgIDIyLCAgIDI0LCAgIDI0LCAgIDI1LAogICAgICAgMjYsICAgMjYsICAgMjgsICAgMjcsICAgMjcsICAgMjcsICAgMjcsICAgMjksICAgMjksICAgMjksCiAgICAgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwKICAgICAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LAogICAgICAgMjksICAgMjksICAgMTAsICAgMTAsICAgNDgsICAgNDgsICAgNTEsICAgNTEsICAgNTAsICAgNDksCiAgICAgICA0OSwgICA0MiwgICA0MiwgICA1MywgICA1MywgICA1NCwgICA1NCwgICAxMSwgICAxMiwgICAxMiwKICAgICAgIDEyLCAgIDU3LCAgIDU3LCAgIDU3LCAgIDU4LCAgIDU4LCAgIDYxLCAgIDYxLCAgIDU5LCAgIDU5LAogICAgICAgNjIsICAgNjIsICAgMzYsICAgMzYsICAgNDQsICAgNDQsICAgNDcsICAgNDcsICAgNDcsICAgNDYsCiAgICAgICA0NiwgICA2MywgICAzNywgICAzNywgICAzNywgICAzNywgICA2NCwgICA2NCwgICA2NSwgICA2NSwKICAgICAgIDY2LCAgIDY2LCAgIDM0LCAgIDM0LCAgIDMwLCAgIDMwLCAgIDY3LCAgIDMyLCAgIDMyLCAgIDY4LAogICAgICAgMzEsICAgMzEsICAgMzMsICAgMzMsICAgNDMsICAgNDMsICAgNDMsICAgNDMsICAgNTUsICAgNTUsCiAgICAgICA3MSwgICA3MSwgICA3MiwgICA3MiwgICA3NCwgICA3NCwgICA3NSwgICA3NSwgICA3NSwgICA3MywKICAgICAgIDczLCAgIDU2LCAgIDU2LCAgIDc2LCAgIDc2LCAgIDc3LCAgIDc3LCAgIDc4LCAgIDc4LCAgIDc4LAogICAgICAgMzksICAgMzksICAgNzksICAgNDAsICAgNDAsICAgODEsICAgODEsICAgNjAsICAgNjAsICAgODIsCiAgICAgICA4MiwgICA4MiwgICA4MiwgICA4NywgICA4NywgICA4OCwgICA4OCwgICA4OSwgICA4OSwgICA4OSwKICAgICAgIDg5LCAgIDg5LCAgIDkwLCAgIDkxLCAgIDkxLCAgIDg2LCAgIDg2LCAgIDgzLCAgIDgzLCAgIDg1LAogICAgICAgODUsICAgOTMsICAgOTMsICAgOTIsICAgOTIsICAgOTIsICAgOTIsICAgOTIsICAgOTIsICAgODQsCiAgICAgICA4NCwgICA5NCwgICA5NCwgICA0MSwgICA0MSwgICAzNSwgICAzNSwgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCiAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCiAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKICAgICAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAogICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCiAgICAgIDEwMSwgICA5NSwgICA5NSwgIDEwMCwgIDEwMCwgIDEwMywgIDEwMywgIDEwNCwgIDEwNSwgIDEwNSwKICAgICAgMTA1LCAgMTA5LCAgMTA5LCAgIDUyLCAgIDUyLCAgIDUyLCAgIDk2LCAgIDk2LCAgMTA3LCAgMTA3LAogICAgICAgOTcsICAgOTcsICAgOTksICAgOTksICAgOTksICAxMDIsICAxMDIsICAxMTMsICAxMTMsICAgNzAsCiAgICAgIDExNSwgIDExNSwgIDExNSwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwgICA5OCwKICAgICAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDk4LCAgIDM4LAogICAgICAgMzgsICAxMTEsICAxMTEsICAxMTEsICAxMDYsICAxMDYsICAxMDYsICAxMTYsICAxMTYsICAxMTYsCiAgICAgIDExNiwgIDExNiwgIDExNiwgICA0NSwgICA0NSwgICA0NSwgICA4MCwgICA4MCwgICA4MCwgIDExOCwKICAgICAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTEwLCAgMTA4LCAgMTA4LCAgMTA4LCAgMTE3LAogICAgICAxMTcsICAxMTcsICAxMTcsICAgNjksICAxMTksICAxMTksICAxMjAsICAxMjAsICAxMjAsICAxMjAsCiAgICAgIDEyMCwgIDExNCwgIDEyMSwgIDEyMSwgIDEyMiwgIDEyMiwgIDEyMiwgIDEyMiwgIDEyMiwgIDExMiwKICAgICAgMTEyLCAgMTEyLCAgMTEyLCAgMTI0LCAgMTIzLCAgMTIzLCAgMTIzLCAgMTIzLCAgMTIzLCAgMTIzLAogICAgICAxMjMsICAxMjUsICAxMjUsICAxMjUKXTsKClBIUC5QYXJzZXIucHJvdG90eXBlLnl5bGVuID0gWwogICAgICAgIDEsICAgIDEsICAgIDIsICAgIDAsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAogICAgICAgIDUsICAgIDQsICAgIDMsICAgIDQsICAgIDIsICAgIDMsICAgIDEsICAgIDEsICAgIDcsICAgIDgsCiAgICAgICAgNiwgICAgNywgICAgMywgICAgMSwgICAgMywgICAgMSwgICAgMywgICAgMSwgICAgMSwgICAgMywKICAgICAgICAxLCAgICAyLCAgICAxLCAgICAyLCAgICAzLCAgICAxLCAgICAzLCAgICAzLCAgICAxLCAgICAzLAogICAgICAgIDIsICAgIDAsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDcsICAgMTAsCiAgICAgICAgNSwgICAgNywgICAgOSwgICAgNSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKICAgICAgICAxLCAgICAyLCAgICA1LCAgICA3LCAgICA5LCAgICA1LCAgICA2LCAgICAzLCAgICAzLCAgICAyLAogICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDAsICAgIDIsICAgIDEsICAgIDMsICAgIDgsICAgIDAsCiAgICAgICAgNCwgICAgMSwgICAgMywgICAgMCwgICAgMSwgICAgMCwgICAgMSwgICAxMCwgICAgNywgICAgNiwKICAgICAgICA1LCAgICAxLCAgICAyLCAgICAyLCAgICAwLCAgICAyLCAgICAwLCAgICAyLCAgICAwLCAgICAyLAogICAgICAgIDEsICAgIDMsICAgIDEsICAgIDQsICAgIDEsICAgIDQsICAgIDEsICAgIDEsICAgIDQsICAgIDEsCiAgICAgICAgMywgICAgMywgICAgMywgICAgNCwgICAgNCwgICAgNSwgICAgMCwgICAgMiwgICAgNCwgICAgMywKICAgICAgICAxLCAgICAxLCAgICAxLCAgICA0LCAgICAwLCAgICAyLCAgICA1LCAgICAwLCAgICAyLCAgICA2LAogICAgICAgIDAsICAgIDIsICAgIDAsICAgIDMsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDAsCiAgICAgICAgMSwgICAgMywgICAgNCwgICAgNiwgICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMCwKICAgICAgICAxLCAgICAwLCAgICAyLCAgICAyLCAgICAzLCAgICAxLCAgICAzLCAgICAxLCAgICAyLCAgICAyLAogICAgICAgIDMsICAgIDEsICAgIDEsICAgIDMsICAgIDEsICAgIDEsICAgIDMsICAgIDIsICAgIDAsICAgIDMsCiAgICAgICAgNCwgICAgOSwgICAgMywgICAgMSwgICAgMywgICAgMCwgICAgMiwgICAgNCwgICAgNSwgICAgNCwKICAgICAgICA0LCAgICA0LCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAxLCAgICAxLCAgICAwLAogICAgICAgIDEsICAgIDEsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgMywgICAgMSwgICAgMywgICAgMywgICAgMSwgICAgMCwgICAgMSwgICAgMSwgICAgMywgICAgMywKICAgICAgICAzLCAgICA0LCAgICAxLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAogICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCiAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywKICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAyLCAgICAyLCAgICAyLAogICAgICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCiAgICAgICAgMywgICAgMywgICAgNSwgICAgNCwgICAgMywgICAgNCwgICAgNCwgICAgMiwgICAgMiwgICAgNCwKICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAogICAgICAgIDIsICAgIDEsICAgIDMsICAgIDIsICAgIDEsICAgIDIsICAgIDQsICAgIDIsICAgMTAsICAgMTEsCiAgICAgICAgNywgICAgMywgICAgMiwgICAgMCwgICAgNCwgICAgMSwgICAgMywgICAgMiwgICAgMiwgICAgMiwKICAgICAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgIDAsICAgIDMsICAgIDAsICAgIDEsICAgIDEsICAgIDAsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCiAgICAgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAyLCAgICAzLCAgICAzLCAgICAwLAogICAgICAgIDEsICAgIDEsICAgIDMsICAgIDEsICAgIDEsICAgIDMsICAgIDEsICAgIDEsICAgIDQsICAgIDQsCiAgICAgICAgNCwgICAgMSwgICAgNCwgICAgMSwgICAgMSwgICAgMywgICAgMSwgICAgNCwgICAgMiwgICAgMywKICAgICAgICAxLCAgICA0LCAgICA0LCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAzLCAgICAxLCAgICAxLAogICAgICAgIDMsICAgIDEsICAgIDEsICAgIDQsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsCiAgICAgICAgMCwgICAgMSwgICAgMywgICAgMSwgICAgMywgICAgMSwgICAgNCwgICAgMiwgICAgMCwgICAgMiwKICAgICAgICAyLCAgICAxLCAgICAyLCAgICAxLCAgICAxLCAgICA0LCAgICAzLCAgICAzLCAgICAzLCAgICA2LAogICAgICAgIDMsICAgIDEsICAgIDEsICAgIDEKXTsKCgoKZXhwb3J0cy5QSFAgPSBQSFA7Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS9waHBfd29ya2VyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBNaXJyb3IgPSByZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yOwp2YXIgUEhQID0gcmVxdWlyZSgiLi9waHAvcGhwIikuUEhQOwoKdmFyIFBocFdvcmtlciA9IGV4cG9ydHMuUGhwV29ya2VyID0gZnVuY3Rpb24oc2VuZGVyKSB7CiAgICBNaXJyb3IuY2FsbCh0aGlzLCBzZW5kZXIpOwogICAgdGhpcy5zZXRUaW1lb3V0KDUwMCk7Cn07Cgpvb3AuaW5oZXJpdHMoUGhwV29ya2VyLCBNaXJyb3IpOwoKKGZ1bmN0aW9uKCkgewogICAgdGhpcy5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0cykgewogICAgICAgIHRoaXMuaW5saW5lUGhwID0gb3B0cyAmJiBvcHRzLmlubGluZTsKICAgIH07CiAgICAKICAgIHRoaXMub25VcGRhdGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRvYy5nZXRWYWx1ZSgpOwogICAgICAgIHZhciBlcnJvcnMgPSBbXTsKICAgICAgICBpZiAodGhpcy5pbmxpbmVQaHApCiAgICAgICAgICAgIHZhbHVlID0gIjw/IiArIHZhbHVlICsgIj8+IjsKCiAgICAgICAgdmFyIHRva2VucyA9IFBIUC5MZXhlcih2YWx1ZSwge3Nob3J0X29wZW5fdGFnOiAxfSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgbmV3IFBIUC5QYXJzZXIodG9rZW5zKTsKICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgcm93OiBlLmxpbmUgLSAxLAogICAgICAgICAgICAgICAgY29sdW1uOiBudWxsLAogICAgICAgICAgICAgICAgdGV4dDogZS5tZXNzYWdlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZS5tZXNzYWdlLnN1YnN0cmluZygxKSwKICAgICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICB0aGlzLnNlbmRlci5lbWl0KCJhbm5vdGF0ZSIsIGVycm9ycyk7CiAgICB9OwoKfSkuY2FsbChQaHBXb3JrZXIucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpmdW5jdGlvbiBFbXB0eSgpIHt9CgppZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7CiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiArIHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICAgIHRoYXQsCiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7CiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CiAgICAgICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpOwogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYm91bmQ7CiAgICB9Owp9CnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7CnZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlOwp2YXIgcHJvdG90eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOwp2YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKdmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOwp2YXIgZGVmaW5lR2V0dGVyOwp2YXIgZGVmaW5lU2V0dGVyOwp2YXIgbG9va3VwR2V0dGVyOwp2YXIgbG9va3VwU2V0dGVyOwp2YXIgc3VwcG9ydHNBY2Nlc3NvcnM7CmlmICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgewogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOwogICAgZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwogICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOwogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOwp9CmlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKICAgIGlmKGZ1bmN0aW9uKCkgeyAvLyB0ZXN0IElFIDwgOSB0byBzcGxpY2UgYnVnIC0gc2VlIGlzc3VlICMxMzgKICAgICAgICBmdW5jdGlvbiBtYWtlQXJyYXkobCkgewogICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpOwogICAgICAgICAgICBhWzBdID0gYVsxXSA9IDA7CiAgICAgICAgICAgIHJldHVybiBhOwogICAgICAgIH0KICAgICAgICB2YXIgYXJyYXkgPSBbXSwgbGVuZ3RoQmVmb3JlOwogICAgICAgIAogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7CiAgICAgICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjYpKTsKCiAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2CiAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJYWFgiKTsgLy8gYWRkIG9uZSBlbGVtZW50CgogICAgICAgIGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoCgogICAgICAgIGlmIChsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYnVncwogICAgICAgIH0KICAgIH0oKSkgey8vSUUgNi83CiAgICAgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkgewogICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywgWwogICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2b2lkIDAgPyAwIDogc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZvaWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50CiAgICAgICAgICAgICAgICBdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMikpKQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7Ly9JRTgKICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7CiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKICAgICAgICAgICAgICAgIGlmIChwb3MgPiBsZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkgewogICAgICAgICAgICAgICAgcG9zID0gTWF0aC5tYXgobGVuZ3RoICsgcG9zLCAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEocG9zK3JlbW92ZUNvdW50IDwgbGVuZ3RoKSkKICAgICAgICAgICAgICAgIHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOwoKICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnNsaWNlKHBvcywgcG9zK3JlbW92ZUNvdW50KTsKICAgICAgICAgICAgdmFyIGluc2VydCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgICAgICAgICAgdmFyIGFkZCA9IGluc2VydC5sZW5ndGg7ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChwb3MgPT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKGFkZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNvdW50LCBsZW5ndGggLSBwb3MpOwogICAgICAgICAgICAgICAgdmFyIHRhaWxPbGRQb3MgPSBwb3MgKyByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbE5ld1BvcyA9IHRhaWxPbGRQb3MgKyBhZGQgLSByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0gdGFpbE9sZFBvczsKICAgICAgICAgICAgICAgIHZhciBsZW5ndGhBZnRlclJlbW92ZSA9IGxlbmd0aCAtIHJlbW92ZTsKCiAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBBCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWlsTmV3UG9zID4gdGFpbE9sZFBvcykgeyAvLyBjYXNlIEIKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291bnQ7IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGFkZCA9PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCgogICAgICAgICAgICAgICAgaWYgKGFkZCAmJiBwb3MgPT09IGxlbmd0aEFmdGVyUmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRkOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twb3MraV0gPSBpbnNlcnRbaV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgICAgIH07CiAgICB9Cn0KaWYgKCFBcnJheS5pc0FycmF5KSB7CiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07Cn0KdmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiksCiAgICBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9ICJhIiB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpOwoKaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgewogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAogICAgICAgICAgICBpID0gLTEsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKICAgIEFycmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikgewogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbaV07CiAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7CiAgICBBcnJheS5wcm90b3R5cGUuc29tZSA9IGZ1bmN0aW9uIHNvbWUoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2krK107CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgewogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaS0tXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGktLSk7CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgewogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7CiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiB8fCAoWzAsIDFdLmxhc3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovKSB7CiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwoKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHsKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yID8KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6CiAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0CiAgICAgICAgKTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOwogICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwgc2V0dGVyOwogICAgICAgIGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMpIHsKICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKCiAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CgogICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikgewogICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVzY3JpcHRvci5nZXQgPSBnZXR0ZXI7CiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsKICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOwogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7CiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CiAgICB9Owp9CmlmICghT2JqZWN0LmNyZWF0ZSkgewogICAgdmFyIGNyZWF0ZUVtcHR5OwogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7ICJfX3Byb3RvX18iOiBudWxsIH07CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlbXB0eSA9IHt9OwogICAgICAgICAgICBmb3IgKHZhciBpIGluIGVtcHR5KQogICAgICAgICAgICAgICAgZW1wdHlbaV0gPSBudWxsOwogICAgICAgICAgICBlbXB0eS5jb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID0KICAgICAgICAgICAgZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGUgPQogICAgICAgICAgICBlbXB0eS5pc1Byb3RvdHlwZU9mID0KICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPQogICAgICAgICAgICBlbXB0eS50b1N0cmluZyA9CiAgICAgICAgICAgIGVtcHR5LnZhbHVlT2YgPQogICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsOwogICAgICAgICAgICByZXR1cm4gZW1wdHk7CiAgICAgICAgfQogICAgfQoKICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgdmFyIG9iamVjdDsKICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7CiAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZUVtcHR5KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7CiAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOwogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOwogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CgpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgewogICAgdHJ5IHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0OwogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICB9Cn0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgewogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkgewogICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgfQp9CgppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQgKyBvYmplY3QpOwogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7CiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInZhbHVlIikpIHsKCiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CiAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInNldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGlmIChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSkKICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LnNlYWwpIHsKICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5mcmVlemUpIHsKICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KdHJ5IHsKICAgIE9iamVjdC5mcmVlemUoZnVuY3Rpb24gKCkge30pOwp9IGNhdGNoIChleGNlcHRpb24pIHsKICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cn0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsKICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzU2VhbGVkKSB7CiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRnJvemVuKSB7CiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgewogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KICAgICAgICB2YXIgbmFtZSA9ICcnOwogICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgbmFtZSArPSAnPyc7CiAgICAgICAgfQogICAgICAgIG9iamVjdFtuYW1lXSA9IHRydWU7CiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOwogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgfTsKfQppZiAoIU9iamVjdC5rZXlzKSB7CiAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAogICAgICAgIGRvbnRFbnVtcyA9IFsKICAgICAgICAgICAgInRvU3RyaW5nIiwKICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKICAgICAgICAgICAgInZhbHVlT2YiLAogICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAogICAgICAgICAgICAiaXNQcm90b3R5cGVPZiIsCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCiAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKICAgICAgICBdLAogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CgogICAgZm9yICh2YXIga2V5IGluIHsidG9TdHJpbmciOiBudWxsfSkgewogICAgICAgIGhhc0RvbnRFbnVtQnVnID0gZmFsc2U7CiAgICB9CgogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewoKICAgICAgICBpZiAoCiAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwKICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsCiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKICAgICAgICB9CgogICAgICAgIHZhciBrZXlzID0gW107CiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgewogICAgICAgICAgICAgICAga2V5cy5wdXNoKG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGRvbnRFbnVtID0gZG9udEVudW1zW2ldOwogICAgICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBkb250RW51bSkpIHsKICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzOwogICAgfTsKCn0KaWYgKCFEYXRlLm5vdykgewogICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgfTsKfQp2YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKwogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKwogICAgIlx1MjAyOVx1RkVGRiI7CmlmICghU3RyaW5nLnByb3RvdHlwZS50cmltKSB7CiAgICB3cyA9ICJbIiArIHdzICsgIl0iOwogICAgdmFyIHRyaW1CZWdpblJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOwogICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CiAgICB9Owp9CgpmdW5jdGlvbiB0b0ludGVnZXIobikgewogICAgbiA9ICtuOwogICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KICAgICAgICBuID0gMDsKICAgIH0gZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpIHsKICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOwogICAgfQogICAgcmV0dXJuIG47Cn0KCmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbnB1dDsKICAgIHJldHVybiAoCiAgICAgICAgaW5wdXQgPT09IG51bGwgfHwKICAgICAgICB0eXBlID09PSAidW5kZWZpbmVkIiB8fAogICAgICAgIHR5cGUgPT09ICJib29sZWFuIiB8fAogICAgICAgIHR5cGUgPT09ICJudW1iZXIiIHx8CiAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKICAgICk7Cn0KCmZ1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZzsKICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKICAgIGlmICh0eXBlb2YgdmFsdWVPZiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHZhbHVlT2YuY2FsbChpbnB1dCk7CiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAgICB9CiAgICB0b1N0cmluZyA9IGlucHV0LnRvU3RyaW5nOwogICAgaWYgKHR5cGVvZiB0b1N0cmluZyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwp9CnZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7CiAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iik7CiAgICB9CiAgICByZXR1cm4gT2JqZWN0KG8pOwp9OwoKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbC9zYXgiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKdmFyIG5hbWVTdGFydENoYXIgPSAvW0EtWl9hLXpceEMwLVx4RDZceEQ4LVx4RjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdLy8vXHUxMDAwMC1cdUVGRkZGCnZhciBuYW1lQ2hhciA9IG5ldyBSZWdFeHAoIltcXC1cXC4wLTkiK25hbWVTdGFydENoYXIuc291cmNlLnNsaWNlKDEsLTEpKyJcdTAwQjdcdTAzMDAtXHUwMzZGXFx1eDIwM0YtXHUyMDQwXSIpOwp2YXIgdGFnTmFtZVBhdHRlcm4gPSBuZXcgUmVnRXhwKCdeJytuYW1lU3RhcnRDaGFyLnNvdXJjZStuYW1lQ2hhci5zb3VyY2UrJyooPzpcOicrbmFtZVN0YXJ0Q2hhci5zb3VyY2UrbmFtZUNoYXIuc291cmNlKycqKT8kJyk7CnZhciBTX1RBRyA9IDA7Ly90YWcgbmFtZSBvZmZlcnJpbmcKdmFyIFNfQVRUUiA9IDE7Ly9hdHRyIG5hbWUgb2ZmZXJyaW5nIAp2YXIgU19BVFRSX1M9MjsvL2F0dHIgbmFtZSBlbmQgYW5kIHNwYWNlIG9mZmVyCnZhciBTX0VRID0gMzsvLz1zcGFjZT8KdmFyIFNfViA9IDQ7Ly9hdHRyIHZhbHVlKG5vIHF1b3QgdmFsdWUgb25seSkKdmFyIFNfRSA9IDU7Ly9hdHRyIHZhbHVlIGVuZCBhbmQgbm8gc3BhY2UocXVvdCBlbmQpCnZhciBTX1MgPSA2Oy8vKGF0dHIgdmFsdWUgZW5kIHx8IHRhZyBlbmQgKSAmJiAoc3BhY2Ugb2ZmZXIpCnZhciBTX0MgPSA3Oy8vY2xvc2VkIGVsPGVsIC8+CgpmdW5jdGlvbiBYTUxSZWFkZXIoKXsKCQp9CgpYTUxSZWFkZXIucHJvdG90eXBlID0gewoJcGFyc2U6ZnVuY3Rpb24oc291cmNlLGRlZmF1bHROU01hcCxlbnRpdHlNYXApewoJCXZhciBkb21CdWlsZGVyID0gdGhpcy5kb21CdWlsZGVyOwoJCWRvbUJ1aWxkZXIuc3RhcnREb2N1bWVudCgpOwoJCV9jb3B5KGRlZmF1bHROU01hcCAsZGVmYXVsdE5TTWFwID0ge30pCgkJcGFyc2Uoc291cmNlLGRlZmF1bHROU01hcCxlbnRpdHlNYXAsCgkJCQlkb21CdWlsZGVyLHRoaXMuZXJyb3JIYW5kbGVyKTsKCQlkb21CdWlsZGVyLmVuZERvY3VtZW50KCk7Cgl9Cn0KZnVuY3Rpb24gcGFyc2Uoc291cmNlLGRlZmF1bHROU01hcENvcHksZW50aXR5TWFwLGRvbUJ1aWxkZXIsZXJyb3JIYW5kbGVyKXsKICBmdW5jdGlvbiBmaXhlZEZyb21DaGFyQ29kZShjb2RlKSB7CgkJaWYgKGNvZGUgPiAweGZmZmYpIHsKCQkJY29kZSAtPSAweDEwMDAwOwoJCQl2YXIgc3Vycm9nYXRlMSA9IDB4ZDgwMCArIChjb2RlID4+IDEwKQoJCQkJLCBzdXJyb2dhdGUyID0gMHhkYzAwICsgKGNvZGUgJiAweDNmZik7CgoJCQlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShzdXJyb2dhdGUxLCBzdXJyb2dhdGUyKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKCQl9Cgl9CglmdW5jdGlvbiBlbnRpdHlSZXBsYWNlcihhKXsKCQl2YXIgayA9IGEuc2xpY2UoMSwtMSk7CgkJaWYoayBpbiBlbnRpdHlNYXApewoJCQlyZXR1cm4gZW50aXR5TWFwW2tdOyAKCQl9ZWxzZSBpZihrLmNoYXJBdCgwKSA9PT0gJyMnKXsKCQkJcmV0dXJuIGZpeGVkRnJvbUNoYXJDb2RlKHBhcnNlSW50KGsuc3Vic3RyKDEpLnJlcGxhY2UoJ3gnLCcweCcpKSkKCQl9ZWxzZXsKCQkJZXJyb3JIYW5kbGVyLmVycm9yKCdlbnRpdHkgbm90IGZvdW5kOicrYSk7CgkJCXJldHVybiBhOwoJCX0KCX0KCWZ1bmN0aW9uIGFwcGVuZFRleHQoZW5kKXsvL2hhcyBzb21lIGJ1Z3MKCQl2YXIgeHQgPSBzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LGVuZCkucmVwbGFjZSgvJiM/XHcrOy9nLGVudGl0eVJlcGxhY2VyKTsKCQlsb2NhdG9yJiZwb3NpdGlvbihzdGFydCk7CgkJZG9tQnVpbGRlci5jaGFyYWN0ZXJzKHh0LDAsZW5kLXN0YXJ0KTsKCQlzdGFydCA9IGVuZAoJfQoJZnVuY3Rpb24gcG9zaXRpb24oc3RhcnQsbSl7CgkJd2hpbGUoc3RhcnQ+PWVuZFBvcyAmJiAobSA9IGxpbmVQYXR0ZXJuLmV4ZWMoc291cmNlKSkpewoJCQlzdGFydFBvcyA9IG0uaW5kZXg7CgkJCWVuZFBvcyA9IHN0YXJ0UG9zICsgbVswXS5sZW5ndGg7CgkJCWxvY2F0b3IubGluZU51bWJlcisrOwoJCX0KCQlsb2NhdG9yLmNvbHVtbk51bWJlciA9IHN0YXJ0LXN0YXJ0UG9zKzE7Cgl9Cgl2YXIgc3RhcnRQb3MgPSAwOwoJdmFyIGVuZFBvcyA9IDA7Cgl2YXIgbGluZVBhdHRlcm4gPSAvLisoPzpcclxuP3xcbil8LiokL2cKCXZhciBsb2NhdG9yID0gZG9tQnVpbGRlci5sb2NhdG9yOwoJCgl2YXIgcGFyc2VTdGFjayA9IFt7Y3VycmVudE5TTWFwOmRlZmF1bHROU01hcENvcHl9XQoJdmFyIGNsb3NlTWFwID0ge307Cgl2YXIgc3RhcnQgPSAwOwoJd2hpbGUodHJ1ZSl7CgkJdmFyIGkgPSBzb3VyY2UuaW5kZXhPZignPCcsc3RhcnQpOwoJCWlmKGk8MCl7CgkJCWlmKCFzb3VyY2Uuc3Vic3RyKHN0YXJ0KS5tYXRjaCgvXlxzKiQvKSl7CgkJCQl2YXIgZG9jID0gZG9tQnVpbGRlci5kb2N1bWVudDsKICAgIAkJCXZhciB0ZXh0ID0gZG9jLmNyZWF0ZVRleHROb2RlKHNvdXJjZS5zdWJzdHIoc3RhcnQpKTsKICAgIAkJCWRvYy5hcHBlbmRDaGlsZCh0ZXh0KTsKICAgIAkJCWRvbUJ1aWxkZXIuY3VycmVudEVsZW1lbnQgPSB0ZXh0OwoJCQl9CgkJCXJldHVybjsKCQl9CgkJaWYoaT5zdGFydCl7CgkJCWFwcGVuZFRleHQoaSk7CgkJfQoJCXN3aXRjaChzb3VyY2UuY2hhckF0KGkrMSkpewoJCWNhc2UgJy8nOgoJCQl2YXIgZW5kID0gc291cmNlLmluZGV4T2YoJz4nLGkrMyk7CgkJCXZhciB0YWdOYW1lID0gc291cmNlLnN1YnN0cmluZyhpKzIsZW5kKTsKCQkJdmFyIGNvbmZpZzsKCQkJaWYgKHBhcnNlU3RhY2subGVuZ3RoID4gMSkgewoJCQkJY29uZmlnID0gcGFyc2VTdGFjay5wb3AoKTsKCQkJfSBlbHNlIHsKCQkJCWVycm9ySGFuZGxlci5mYXRhbEVycm9yKCJlbmQgdGFnIG5hbWUgbm90IGZvdW5kIGZvcjogIit0YWdOYW1lKTsKCQkJCWJyZWFrOwoJCQl9CgkJCXZhciBsb2NhbE5TTWFwID0gY29uZmlnLmxvY2FsTlNNYXA7CgkJCQoJICAgICAgICBpZihjb25maWcudGFnTmFtZSAhPSB0YWdOYW1lKXsKCSAgICAgICAgICAgIGVycm9ySGFuZGxlci5mYXRhbEVycm9yKCJlbmQgdGFnIG5hbWU6ICIgKyB0YWdOYW1lICsgIiBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCBzdGFydCB0YWdOYW1lOiAiK2NvbmZpZy50YWdOYW1lICk7CgkgICAgICAgIH0KCQkJZG9tQnVpbGRlci5lbmRFbGVtZW50KGNvbmZpZy51cmksY29uZmlnLmxvY2FsTmFtZSx0YWdOYW1lKTsKCQkJaWYobG9jYWxOU01hcCl7CgkJCQlmb3IodmFyIHByZWZpeCBpbiBsb2NhbE5TTWFwKXsKCQkJCQlkb21CdWlsZGVyLmVuZFByZWZpeE1hcHBpbmcocHJlZml4KSA7CgkJCQl9CgkJCX0KCQkJZW5kKys7CgkJCWJyZWFrOwoJCWNhc2UgJz8nOi8vIDw/Li4uPz4KCQkJbG9jYXRvciYmcG9zaXRpb24oaSk7CgkJCWVuZCA9IHBhcnNlSW5zdHJ1Y3Rpb24oc291cmNlLGksZG9tQnVpbGRlcik7CgkJCWJyZWFrOwoJCWNhc2UgJyEnOi8vIDwhZG9jdHlwZSw8IVtDREFUQSw8IS0tCgkJCWxvY2F0b3ImJnBvc2l0aW9uKGkpOwoJCQllbmQgPSBwYXJzZURDQyhzb3VyY2UsaSxkb21CdWlsZGVyLGVycm9ySGFuZGxlcik7CgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXRyeXsKCQkJCWxvY2F0b3ImJnBvc2l0aW9uKGkpOwoJCQkJCgkJCQl2YXIgZWwgPSBuZXcgRWxlbWVudEF0dHJpYnV0ZXMoKTsKCQkJCXZhciBlbmQgPSBwYXJzZUVsZW1lbnRTdGFydFBhcnQoc291cmNlLGksZWwsZW50aXR5UmVwbGFjZXIsZXJyb3JIYW5kbGVyKTsKCQkJCXZhciBsZW4gPSBlbC5sZW5ndGg7CgkJCQlpZihsZW4gJiYgbG9jYXRvcil7CgkJCQkJdmFyIGJhY2t1cCA9IGNvcHlMb2NhdG9yKGxvY2F0b3Ise30pOwoJCQkJCWZvcih2YXIgaSA9IDA7aTxsZW47aSsrKXsKCQkJCQkJdmFyIGEgPSBlbFtpXTsKCQkJCQkJcG9zaXRpb24oYS5vZmZzZXQpOwoJCQkJCQlhLm9mZnNldCA9IGNvcHlMb2NhdG9yKGxvY2F0b3Ise30pOwoJCQkJCX0KCQkJCQljb3B5TG9jYXRvcihiYWNrdXAsbG9jYXRvcik7CgkJCQl9CgkJCQlpZighZWwuY2xvc2VkICYmIGZpeFNlbGZDbG9zZWQoc291cmNlLGVuZCxlbC50YWdOYW1lLGNsb3NlTWFwKSl7CgkJCQkJZWwuY2xvc2VkID0gdHJ1ZTsKCQkJCQlpZighZW50aXR5TWFwLm5ic3ApewoJCQkJCQllcnJvckhhbmRsZXIud2FybmluZygndW5jbG9zZWQgeG1sIGF0dHJpYnV0ZScpOwoJCQkJCX0KCQkJCX0KCQkJCWFwcGVuZEVsZW1lbnQoZWwsZG9tQnVpbGRlcixwYXJzZVN0YWNrKTsKCQkJCQoJCQkJCgkJCQlpZihlbC51cmkgPT09ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyAmJiAhZWwuY2xvc2VkKXsKCQkJCQllbmQgPSBwYXJzZUh0bWxTcGVjaWFsQ29udGVudChzb3VyY2UsZW5kLGVsLnRhZ05hbWUsZW50aXR5UmVwbGFjZXIsZG9tQnVpbGRlcikKCQkJCX1lbHNlewoJCQkJCWVuZCsrOwoJCQkJfQoJCQl9Y2F0Y2goZSl7CgkJCQllcnJvckhhbmRsZXIuZXJyb3IoJ2VsZW1lbnQgcGFyc2UgZXJyb3I6ICcrZSk7CgkJCQllbmQgPSAtMTsKCQkJfQoKCQl9CgkJaWYoZW5kPDApewoJCQlhcHBlbmRUZXh0KGkrMSk7CgkJfWVsc2V7CgkJCXN0YXJ0ID0gZW5kOwoJCX0KCX0KfQpmdW5jdGlvbiBjb3B5TG9jYXRvcihmLHQpewoJdC5saW5lTnVtYmVyID0gZi5saW5lTnVtYmVyOwoJdC5jb2x1bW5OdW1iZXIgPSBmLmNvbHVtbk51bWJlcjsKCXJldHVybiB0OwoJCn0KZnVuY3Rpb24gcGFyc2VFbGVtZW50U3RhcnRQYXJ0KHNvdXJjZSxzdGFydCxlbCxlbnRpdHlSZXBsYWNlcixlcnJvckhhbmRsZXIpewoJdmFyIGF0dHJOYW1lOwoJdmFyIHZhbHVlOwoJdmFyIHAgPSArK3N0YXJ0OwoJdmFyIHMgPSBTX1RBRzsvL3N0YXR1cwoJd2hpbGUodHJ1ZSl7CgkJdmFyIGMgPSBzb3VyY2UuY2hhckF0KHApOwoJCXN3aXRjaChjKXsKCQljYXNlICc9JzoKCQkJaWYocyA9PT0gU19BVFRSKXsvL2F0dHJOYW1lCgkJCQlhdHRyTmFtZSA9IHNvdXJjZS5zbGljZShzdGFydCxwKTsKCQkJCXMgPSBTX0VROwoJCQl9ZWxzZSBpZihzID09PSBTX0FUVFJfUyl7CgkJCQlzID0gU19FUTsKCQkJfWVsc2V7CgkJCQl0aHJvdyBuZXcgRXJyb3IoJ2F0dHJpYnV0ZSBlcXVhbCBtdXN0IGFmdGVyIGF0dHJOYW1lJyk7CgkJCX0KCQkJYnJlYWs7CgkJY2FzZSAnXCcnOgoJCWNhc2UgJyInOgoJCQlpZihzID09PSBTX0VRKXsvL2VxdWFsCgkJCQlzdGFydCA9IHArMTsKCQkJCXAgPSBzb3VyY2UuaW5kZXhPZihjLHN0YXJ0KQoJCQkJaWYocD4wKXsKCQkJCQl2YWx1ZSA9IHNvdXJjZS5zbGljZShzdGFydCxwKS5yZXBsYWNlKC8mIz9cdys7L2csZW50aXR5UmVwbGFjZXIpOwoJCQkJCWVsLmFkZChhdHRyTmFtZSx2YWx1ZSxzdGFydC0xKTsKCQkJCQlzID0gU19FOwoJCQkJfWVsc2V7CgkJCQkJdGhyb3cgbmV3IEVycm9yKCdhdHRyaWJ1dGUgdmFsdWUgbm8gZW5kIFwnJytjKydcJyBtYXRjaCcpOwoJCQkJfQoJCQl9ZWxzZSBpZihzID09IFNfVil7CgkJCQl2YWx1ZSA9IHNvdXJjZS5zbGljZShzdGFydCxwKS5yZXBsYWNlKC8mIz9cdys7L2csZW50aXR5UmVwbGFjZXIpOwoJCQkJZWwuYWRkKGF0dHJOYW1lLHZhbHVlLHN0YXJ0KTsKCQkJCWVycm9ySGFuZGxlci53YXJuaW5nKCdhdHRyaWJ1dGUgIicrYXR0ck5hbWUrJyIgbWlzc2VkIHN0YXJ0IHF1b3QoJytjKycpISEnKTsKCQkJCXN0YXJ0ID0gcCsxOwoJCQkJcyA9IFNfRQoJCQl9ZWxzZXsKCQkJCXRocm93IG5ldyBFcnJvcignYXR0cmlidXRlIHZhbHVlIG11c3QgYWZ0ZXIgIj0iJyk7CgkJCX0KCQkJYnJlYWs7CgkJY2FzZSAnLyc6CgkJCXN3aXRjaChzKXsKCQkJY2FzZSBTX1RBRzoKCQkJCWVsLnNldFRhZ05hbWUoc291cmNlLnNsaWNlKHN0YXJ0LHApKTsKCQkJY2FzZSBTX0U6CgkJCWNhc2UgU19TOgoJCQljYXNlIFNfQzoKCQkJCXMgPSBTX0M7CgkJCQllbC5jbG9zZWQgPSB0cnVlOwoJCQljYXNlIFNfVjoKCQkJY2FzZSBTX0FUVFI6CgkJCWNhc2UgU19BVFRSX1M6CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlIGludmFsaWQgY2xvc2UgY2hhcignLycpIikKCQkJfQoJCQlicmVhazsKCQljYXNlICcnOi8vZW5kIGRvY3VtZW50CgkJCWVycm9ySGFuZGxlci5lcnJvcigndW5leHBlY3RlZCBlbmQgb2YgaW5wdXQnKTsKCQljYXNlICc+JzoKCQkJc3dpdGNoKHMpewoJCQljYXNlIFNfVEFHOgoJCQkJZWwuc2V0VGFnTmFtZShzb3VyY2Uuc2xpY2Uoc3RhcnQscCkpOwoJCQljYXNlIFNfRToKCQkJY2FzZSBTX1M6CgkJCWNhc2UgU19DOgoJCQkJYnJlYWs7Ly9ub3JtYWwKCQkJY2FzZSBTX1Y6Ly9Db21wYXRpYmxlIHN0YXRlCgkJCWNhc2UgU19BVFRSOgoJCQkJdmFsdWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQscCk7CgkJCQlpZih2YWx1ZS5zbGljZSgtMSkgPT09ICcvJyl7CgkJCQkJZWwuY2xvc2VkICA9IHRydWU7CgkJCQkJdmFsdWUgPSB2YWx1ZS5zbGljZSgwLC0xKQoJCQkJfQoJCQljYXNlIFNfQVRUUl9TOgoJCQkJaWYocyA9PT0gU19BVFRSX1MpewoJCQkJCXZhbHVlID0gYXR0ck5hbWU7CgkJCQl9CgkJCQlpZihzID09IFNfVil7CgkJCQkJZXJyb3JIYW5kbGVyLndhcm5pbmcoJ2F0dHJpYnV0ZSAiJyt2YWx1ZSsnIiBtaXNzZWQgcXVvdCgiKSEhJyk7CgkJCQkJZWwuYWRkKGF0dHJOYW1lLHZhbHVlLnJlcGxhY2UoLyYjP1x3KzsvZyxlbnRpdHlSZXBsYWNlciksc3RhcnQpCgkJCQl9ZWxzZXsKCQkJCQllcnJvckhhbmRsZXIud2FybmluZygnYXR0cmlidXRlICInK3ZhbHVlKyciIG1pc3NlZCB2YWx1ZSEhICInK3ZhbHVlKyciIGluc3RlYWQhIScpCgkJCQkJZWwuYWRkKHZhbHVlLHZhbHVlLHN0YXJ0KQoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgU19FUToKCQkJCXRocm93IG5ldyBFcnJvcignYXR0cmlidXRlIHZhbHVlIG1pc3NlZCEhJyk7CgkJCX0KCQkJcmV0dXJuIHA7CgkJY2FzZSAnXHUwMDgwJzoKCQkJYyA9ICcgJzsKCQlkZWZhdWx0OgoJCQlpZihjPD0gJyAnKXsvL3NwYWNlCgkJCQlzd2l0Y2gocyl7CgkJCQljYXNlIFNfVEFHOgoJCQkJCWVsLnNldFRhZ05hbWUoc291cmNlLnNsaWNlKHN0YXJ0LHApKTsvL3RhZ05hbWUKCQkJCQlzID0gU19TOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTX0FUVFI6CgkJCQkJYXR0ck5hbWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQscCkKCQkJCQlzID0gU19BVFRSX1M7CgkJCQkJYnJlYWs7CgkJCQljYXNlIFNfVjoKCQkJCQl2YXIgdmFsdWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQscCkucmVwbGFjZSgvJiM/XHcrOy9nLGVudGl0eVJlcGxhY2VyKTsKCQkJCQllcnJvckhhbmRsZXIud2FybmluZygnYXR0cmlidXRlICInK3ZhbHVlKyciIG1pc3NlZCBxdW90KCIpISEnKTsKCQkJCQllbC5hZGQoYXR0ck5hbWUsdmFsdWUsc3RhcnQpCgkJCQljYXNlIFNfRToKCQkJCQlzID0gU19TOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9ZWxzZXsvL25vdCBzcGFjZQoJCQkJc3dpdGNoKHMpewoJCQkJY2FzZSBTX0FUVFJfUzoKCQkJCQllcnJvckhhbmRsZXIud2FybmluZygnYXR0cmlidXRlICInK2F0dHJOYW1lKyciIG1pc3NlZCB2YWx1ZSEhICInK2F0dHJOYW1lKyciIGluc3RlYWQhIScpCgkJCQkJZWwuYWRkKGF0dHJOYW1lLGF0dHJOYW1lLHN0YXJ0KTsKCQkJCQlzdGFydCA9IHA7CgkJCQkJcyA9IFNfQVRUUjsKCQkJCQlicmVhazsKCQkJCWNhc2UgU19FOgoJCQkJCWVycm9ySGFuZGxlci53YXJuaW5nKCdhdHRyaWJ1dGUgc3BhY2UgaXMgcmVxdWlyZWQiJythdHRyTmFtZSsnIiEhJykKCQkJCWNhc2UgU19TOgoJCQkJCXMgPSBTX0FUVFI7CgkJCQkJc3RhcnQgPSBwOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTX0VROgoJCQkJCXMgPSBTX1Y7CgkJCQkJc3RhcnQgPSBwOwoJCQkJCWJyZWFrOwoJCQkJY2FzZSBTX0M6CgkJCQkJdGhyb3cgbmV3IEVycm9yKCJlbGVtZW50cyBjbG9zZWQgY2hhcmFjdGVyICcvJyBhbmQgJz4nIG11c3QgYmUgY29ubmVjdGVkIHRvIik7CgkJCQl9CgkJCX0KCQl9CgkJcCsrOwoJfQp9CmZ1bmN0aW9uIGFwcGVuZEVsZW1lbnQoZWwsZG9tQnVpbGRlcixwYXJzZVN0YWNrKXsKCXZhciB0YWdOYW1lID0gZWwudGFnTmFtZTsKCXZhciBsb2NhbE5TTWFwID0gbnVsbDsKCXZhciBjdXJyZW50TlNNYXAgPSBwYXJzZVN0YWNrW3BhcnNlU3RhY2subGVuZ3RoLTFdLmN1cnJlbnROU01hcDsKCXZhciBpID0gZWwubGVuZ3RoOwoJd2hpbGUoaS0tKXsKCQl2YXIgYSA9IGVsW2ldOwoJCXZhciBxTmFtZSA9IGEucU5hbWU7CgkJdmFyIHZhbHVlID0gYS52YWx1ZTsKCQl2YXIgbnNwID0gcU5hbWUuaW5kZXhPZignOicpOwoJCWlmKG5zcD4wKXsKCQkJdmFyIHByZWZpeCA9IGEucHJlZml4ID0gcU5hbWUuc2xpY2UoMCxuc3ApOwoJCQl2YXIgbG9jYWxOYW1lID0gcU5hbWUuc2xpY2UobnNwKzEpOwoJCQl2YXIgbnNQcmVmaXggPSBwcmVmaXggPT09ICd4bWxucycgJiYgbG9jYWxOYW1lCgkJfWVsc2V7CgkJCWxvY2FsTmFtZSA9IHFOYW1lOwoJCQlwcmVmaXggPSBudWxsCgkJCW5zUHJlZml4ID0gcU5hbWUgPT09ICd4bWxucycgJiYgJycKCQl9CgkJYS5sb2NhbE5hbWUgPSBsb2NhbE5hbWUgOwoJCWlmKG5zUHJlZml4ICE9PSBmYWxzZSl7Ly9oYWNrISEKCQkJaWYobG9jYWxOU01hcCA9PSBudWxsKXsKCQkJCWxvY2FsTlNNYXAgPSB7fQoJCQkJX2NvcHkoY3VycmVudE5TTWFwLGN1cnJlbnROU01hcD17fSkKCQkJfQoJCQljdXJyZW50TlNNYXBbbnNQcmVmaXhdID0gbG9jYWxOU01hcFtuc1ByZWZpeF0gPSB2YWx1ZTsKCQkJYS51cmkgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nCgkJCWRvbUJ1aWxkZXIuc3RhcnRQcmVmaXhNYXBwaW5nKG5zUHJlZml4LCB2YWx1ZSkgCgkJfQoJfQoJdmFyIGkgPSBlbC5sZW5ndGg7Cgl3aGlsZShpLS0pewoJCWEgPSBlbFtpXTsKCQl2YXIgcHJlZml4ID0gYS5wcmVmaXg7CgkJaWYocHJlZml4KXsvL25vIHByZWZpeCBhdHRyaWJ1dGUgaGFzIG5vIG5hbWVzcGFjZQoJCQlpZihwcmVmaXggPT09ICd4bWwnKXsKCQkJCWEudXJpID0gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc7CgkJCX1pZihwcmVmaXggIT09ICd4bWxucycpewoJCQkJYS51cmkgPSBjdXJyZW50TlNNYXBbcHJlZml4XQoJCQl9CgkJfQoJfQoJdmFyIG5zcCA9IHRhZ05hbWUuaW5kZXhPZignOicpOwoJaWYobnNwPjApewoJCXByZWZpeCA9IGVsLnByZWZpeCA9IHRhZ05hbWUuc2xpY2UoMCxuc3ApOwoJCWxvY2FsTmFtZSA9IGVsLmxvY2FsTmFtZSA9IHRhZ05hbWUuc2xpY2UobnNwKzEpOwoJfWVsc2V7CgkJcHJlZml4ID0gbnVsbDsvL2ltcG9ydGFudCEhCgkJbG9jYWxOYW1lID0gZWwubG9jYWxOYW1lID0gdGFnTmFtZTsKCX0KCXZhciBucyA9IGVsLnVyaSA9IGN1cnJlbnROU01hcFtwcmVmaXggfHwgJyddOwoJZG9tQnVpbGRlci5zdGFydEVsZW1lbnQobnMsbG9jYWxOYW1lLHRhZ05hbWUsZWwpOwoJaWYoZWwuY2xvc2VkKXsKCQlkb21CdWlsZGVyLmVuZEVsZW1lbnQobnMsbG9jYWxOYW1lLHRhZ05hbWUpOwoJCWlmKGxvY2FsTlNNYXApewoJCQlmb3IocHJlZml4IGluIGxvY2FsTlNNYXApewoJCQkJZG9tQnVpbGRlci5lbmRQcmVmaXhNYXBwaW5nKHByZWZpeCkgCgkJCX0KCQl9Cgl9ZWxzZXsKCQllbC5jdXJyZW50TlNNYXAgPSBjdXJyZW50TlNNYXA7CgkJZWwubG9jYWxOU01hcCA9IGxvY2FsTlNNYXA7CgkJcGFyc2VTdGFjay5wdXNoKGVsKTsKCX0KfQpmdW5jdGlvbiBwYXJzZUh0bWxTcGVjaWFsQ29udGVudChzb3VyY2UsZWxTdGFydEVuZCx0YWdOYW1lLGVudGl0eVJlcGxhY2VyLGRvbUJ1aWxkZXIpewoJaWYoL14oPzpzY3JpcHR8dGV4dGFyZWEpJC9pLnRlc3QodGFnTmFtZSkpewoJCXZhciBlbEVuZFN0YXJ0ID0gIHNvdXJjZS5pbmRleE9mKCc8LycrdGFnTmFtZSsnPicsZWxTdGFydEVuZCk7CgkJdmFyIHRleHQgPSBzb3VyY2Uuc3Vic3RyaW5nKGVsU3RhcnRFbmQrMSxlbEVuZFN0YXJ0KTsKCQlpZigvWyY8XS8udGVzdCh0ZXh0KSl7CgkJCWlmKC9ec2NyaXB0JC9pLnRlc3QodGFnTmFtZSkpewoJCQkJCWRvbUJ1aWxkZXIuY2hhcmFjdGVycyh0ZXh0LDAsdGV4dC5sZW5ndGgpOwoJCQkJCXJldHVybiBlbEVuZFN0YXJ0OwoJCQl9Ly99ZWxzZXsvL3RleHQgYXJlYQoJCQkJdGV4dCA9IHRleHQucmVwbGFjZSgvJiM/XHcrOy9nLGVudGl0eVJlcGxhY2VyKTsKCQkJCWRvbUJ1aWxkZXIuY2hhcmFjdGVycyh0ZXh0LDAsdGV4dC5sZW5ndGgpOwoJCQkJcmV0dXJuIGVsRW5kU3RhcnQ7CgkJCQoJCX0KCX0KCXJldHVybiBlbFN0YXJ0RW5kKzE7Cn0KZnVuY3Rpb24gZml4U2VsZkNsb3NlZChzb3VyY2UsZWxTdGFydEVuZCx0YWdOYW1lLGNsb3NlTWFwKXsKCXZhciBwb3MgPSBjbG9zZU1hcFt0YWdOYW1lXTsKCWlmKHBvcyA9PSBudWxsKXsKCQlwb3MgPSBjbG9zZU1hcFt0YWdOYW1lXSA9IHNvdXJjZS5sYXN0SW5kZXhPZignPC8nK3RhZ05hbWUrJz4nKQoJfQoJcmV0dXJuIHBvczxlbFN0YXJ0RW5kOwp9CmZ1bmN0aW9uIF9jb3B5KHNvdXJjZSx0YXJnZXQpewoJZm9yKHZhciBuIGluIHNvdXJjZSl7dGFyZ2V0W25dID0gc291cmNlW25dfQp9CmZ1bmN0aW9uIHBhcnNlRENDKHNvdXJjZSxzdGFydCxkb21CdWlsZGVyLGVycm9ySGFuZGxlcil7Ly9zdXJlIHN0YXJ0IHdpdGggJzwhJwoJdmFyIG5leHQ9IHNvdXJjZS5jaGFyQXQoc3RhcnQrMikKCXN3aXRjaChuZXh0KXsKCWNhc2UgJy0nOgoJCWlmKHNvdXJjZS5jaGFyQXQoc3RhcnQgKyAzKSA9PT0gJy0nKXsKCQkJdmFyIGVuZCA9IHNvdXJjZS5pbmRleE9mKCctLT4nLHN0YXJ0KzQpOwoJCQlpZihlbmQ+c3RhcnQpewoJCQkJZG9tQnVpbGRlci5jb21tZW50KHNvdXJjZSxzdGFydCs0LGVuZC1zdGFydC00KTsKCQkJCXJldHVybiBlbmQrMzsKCQkJfWVsc2V7CgkJCQllcnJvckhhbmRsZXIuZXJyb3IoIlVuY2xvc2VkIGNvbW1lbnQiKTsKCQkJCXJldHVybiAtMTsKCQkJfQoJCX1lbHNlewoJCQlyZXR1cm4gLTE7CgkJfQoJZGVmYXVsdDoKCQlpZihzb3VyY2Uuc3Vic3RyKHN0YXJ0KzMsNikgPT0gJ0NEQVRBWycpewoJCQl2YXIgZW5kID0gc291cmNlLmluZGV4T2YoJ11dPicsc3RhcnQrOSk7CgkJCWRvbUJ1aWxkZXIuc3RhcnRDREFUQSgpOwoJCQlkb21CdWlsZGVyLmNoYXJhY3RlcnMoc291cmNlLHN0YXJ0KzksZW5kLXN0YXJ0LTkpOwoJCQlkb21CdWlsZGVyLmVuZENEQVRBKCkgCgkJCXJldHVybiBlbmQrMzsKCQl9CgkJdmFyIG1hdGNocyA9IHNwbGl0KHNvdXJjZSxzdGFydCk7CgkJdmFyIGxlbiA9IG1hdGNocy5sZW5ndGg7CgkJaWYobGVuPjEgJiYgLyFkb2N0eXBlL2kudGVzdChtYXRjaHNbMF1bMF0pKXsKCQkJdmFyIG5hbWUgPSBtYXRjaHNbMV1bMF07CgkJCXZhciBwdWJpZCA9IGxlbj4zICYmIC9ecHVibGljJC9pLnRlc3QobWF0Y2hzWzJdWzBdKSAmJiBtYXRjaHNbM11bMF0KCQkJdmFyIHN5c2lkID0gbGVuPjQgJiYgbWF0Y2hzWzRdWzBdOwoJCQl2YXIgbGFzdE1hdGNoID0gbWF0Y2hzW2xlbi0xXQoJCQlkb21CdWlsZGVyLnN0YXJ0RFREKG5hbWUscHViaWQgJiYgcHViaWQucmVwbGFjZSgvXihbJyJdKSguKj8pXDEkLywnJDInKSwKCQkJCQlzeXNpZCAmJiBzeXNpZC5yZXBsYWNlKC9eKFsnIl0pKC4qPylcMSQvLCckMicpKTsKCQkJZG9tQnVpbGRlci5lbmREVEQoKTsKCQkJCgkJCXJldHVybiBsYXN0TWF0Y2guaW5kZXgrbGFzdE1hdGNoWzBdLmxlbmd0aAoJCX0KCX0KCXJldHVybiAtMTsKfQoKCgpmdW5jdGlvbiBwYXJzZUluc3RydWN0aW9uKHNvdXJjZSxzdGFydCxkb21CdWlsZGVyKXsKCXZhciBlbmQgPSBzb3VyY2UuaW5kZXhPZignPz4nLHN0YXJ0KTsKCWlmKGVuZCl7CgkJdmFyIG1hdGNoID0gc291cmNlLnN1YnN0cmluZyhzdGFydCxlbmQpLm1hdGNoKC9ePFw/KFxTKilccyooW1xzXFNdKj8pXHMqJC8pOwoJCWlmKG1hdGNoKXsKCQkJdmFyIGxlbiA9IG1hdGNoWzBdLmxlbmd0aDsKCQkJZG9tQnVpbGRlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obWF0Y2hbMV0sIG1hdGNoWzJdKSA7CgkJCXJldHVybiBlbmQrMjsKCQl9ZWxzZXsvL2Vycm9yCgkJCXJldHVybiAtMTsKCQl9Cgl9CglyZXR1cm4gLTE7Cn0KZnVuY3Rpb24gRWxlbWVudEF0dHJpYnV0ZXMoc291cmNlKXsKCQp9CkVsZW1lbnRBdHRyaWJ1dGVzLnByb3RvdHlwZSA9IHsKCXNldFRhZ05hbWU6ZnVuY3Rpb24odGFnTmFtZSl7CgkJaWYoIXRhZ05hbWVQYXR0ZXJuLnRlc3QodGFnTmFtZSkpewoJCQl0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdGFnTmFtZTonK3RhZ05hbWUpCgkJfQoJCXRoaXMudGFnTmFtZSA9IHRhZ05hbWUKCX0sCglhZGQ6ZnVuY3Rpb24ocU5hbWUsdmFsdWUsb2Zmc2V0KXsKCQlpZighdGFnTmFtZVBhdHRlcm4udGVzdChxTmFtZSkpewoJCQl0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYXR0cmlidXRlOicrcU5hbWUpCgkJfQoJCXRoaXNbdGhpcy5sZW5ndGgrK10gPSB7cU5hbWU6cU5hbWUsdmFsdWU6dmFsdWUsb2Zmc2V0Om9mZnNldH0KCX0sCglsZW5ndGg6MCwKCWdldExvY2FsTmFtZTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpc1tpXS5sb2NhbE5hbWV9LAoJZ2V0T2Zmc2V0OmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzW2ldLm9mZnNldH0sCglnZXRRTmFtZTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpc1tpXS5xTmFtZX0sCglnZXRVUkk6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXNbaV0udXJpfSwKCWdldFZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzW2ldLnZhbHVlfQp9CgoKCgpmdW5jdGlvbiBfc2V0X3Byb3RvXyh0aGl6LHBhcmVudCl7Cgl0aGl6Ll9fcHJvdG9fXyA9IHBhcmVudDsKCXJldHVybiB0aGl6Owp9CmlmKCEoX3NldF9wcm90b18oe30sX3NldF9wcm90b18ucHJvdG90eXBlKSBpbnN0YW5jZW9mIF9zZXRfcHJvdG9fKSl7Cglfc2V0X3Byb3RvXyA9IGZ1bmN0aW9uKHRoaXoscGFyZW50KXsKCQlmdW5jdGlvbiBwKCl7fTsKCQlwLnByb3RvdHlwZSA9IHBhcmVudDsKCQlwID0gbmV3IHAoKTsKCQlmb3IocGFyZW50IGluIHRoaXopewoJCQlwW3BhcmVudF0gPSB0aGl6W3BhcmVudF07CgkJfQoJCXJldHVybiBwOwoJfQp9CgpmdW5jdGlvbiBzcGxpdChzb3VyY2Usc3RhcnQpewoJdmFyIG1hdGNoOwoJdmFyIGJ1ZiA9IFtdOwoJdmFyIHJlZyA9IC8nW14nXSsnfCJbXiJdKyJ8W15cczw+XC89XSs9P3woXC8/XHMqPnw8KS9nOwoJcmVnLmxhc3RJbmRleCA9IHN0YXJ0OwoJcmVnLmV4ZWMoc291cmNlKTsvL3NraXAgPAoJd2hpbGUobWF0Y2ggPSByZWcuZXhlYyhzb3VyY2UpKXsKCQlidWYucHVzaChtYXRjaCk7CgkJaWYobWF0Y2hbMV0pcmV0dXJuIGJ1ZjsKCX0KfQoKcmV0dXJuIFhNTFJlYWRlcjsKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3htbC9kb20iLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKCmZ1bmN0aW9uIGNvcHkoc3JjLGRlc3QpewoJZm9yKHZhciBwIGluIHNyYyl7CgkJZGVzdFtwXSA9IHNyY1twXTsKCX0KfQpmdW5jdGlvbiBfZXh0ZW5kcyhDbGFzcyxTdXBlcil7Cgl2YXIgdCA9IGZ1bmN0aW9uKCl7fTsKCXZhciBwdCA9IENsYXNzLnByb3RvdHlwZTsKCWlmKE9iamVjdC5jcmVhdGUpewoJCXZhciBwcHQgPSBPYmplY3QuY3JlYXRlKFN1cGVyLnByb3RvdHlwZSk7CgkJcHQuX19wcm90b19fID0gcHB0OwoJfQoJaWYoIShwdCBpbnN0YW5jZW9mIFN1cGVyKSl7CgkJdC5wcm90b3R5cGUgPSBTdXBlci5wcm90b3R5cGU7CgkJdCA9IG5ldyB0KCk7CgkJY29weShwdCx0KTsKCQlDbGFzcy5wcm90b3R5cGUgPSBwdCA9IHQ7Cgl9CglpZihwdC5jb25zdHJ1Y3RvciAhPSBDbGFzcyl7CgkJaWYodHlwZW9mIENsYXNzICE9ICdmdW5jdGlvbicpewoJCQljb25zb2xlLmVycm9yKCJ1bmtub3duIENsYXNzOiIrQ2xhc3MpOwoJCX0KCQlwdC5jb25zdHJ1Y3RvciA9IENsYXNzOwoJfQp9CnZhciBodG1sbnMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcgOwp2YXIgTm9kZVR5cGUgPSB7fTsKdmFyIEVMRU1FTlRfTk9ERSAgICAgICAgICAgICAgICA9IE5vZGVUeXBlLkVMRU1FTlRfTk9ERSAgICAgICAgICAgICAgICA9IDE7CnZhciBBVFRSSUJVVEVfTk9ERSAgICAgICAgICAgICAgPSBOb2RlVHlwZS5BVFRSSUJVVEVfTk9ERSAgICAgICAgICAgICAgPSAyOwp2YXIgVEVYVF9OT0RFICAgICAgICAgICAgICAgICAgID0gTm9kZVR5cGUuVEVYVF9OT0RFICAgICAgICAgICAgICAgICAgID0gMzsKdmFyIENEQVRBX1NFQ1RJT05fTk9ERSAgICAgICAgICA9IE5vZGVUeXBlLkNEQVRBX1NFQ1RJT05fTk9ERSAgICAgICAgICA9IDQ7CnZhciBFTlRJVFlfUkVGRVJFTkNFX05PREUgICAgICAgPSBOb2RlVHlwZS5FTlRJVFlfUkVGRVJFTkNFX05PREUgICAgICAgPSA1Owp2YXIgRU5USVRZX05PREUgICAgICAgICAgICAgICAgID0gTm9kZVR5cGUuRU5USVRZX05PREUgICAgICAgICAgICAgICAgID0gNjsKdmFyIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IE5vZGVUeXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IDc7CnZhciBDT01NRU5UX05PREUgICAgICAgICAgICAgICAgPSBOb2RlVHlwZS5DT01NRU5UX05PREUgICAgICAgICAgICAgICAgPSA4Owp2YXIgRE9DVU1FTlRfTk9ERSAgICAgICAgICAgICAgID0gTm9kZVR5cGUuRE9DVU1FTlRfTk9ERSAgICAgICAgICAgICAgID0gOTsKdmFyIERPQ1VNRU5UX1RZUEVfTk9ERSAgICAgICAgICA9IE5vZGVUeXBlLkRPQ1VNRU5UX1RZUEVfTk9ERSAgICAgICAgICA9IDEwOwp2YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAgICAgID0gTm9kZVR5cGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSAgICAgID0gMTE7CnZhciBOT1RBVElPTl9OT0RFICAgICAgICAgICAgICAgPSBOb2RlVHlwZS5OT1RBVElPTl9OT0RFICAgICAgICAgICAgICAgPSAxMjsKdmFyIEV4Y2VwdGlvbkNvZGUgPSB7fTsKdmFyIEV4Y2VwdGlvbk1lc3NhZ2UgPSB7fTsKdmFyIElOREVYX1NJWkVfRVJSICAgICAgICAgICAgICA9IEV4Y2VwdGlvbkNvZGUuSU5ERVhfU0laRV9FUlIgICAgICAgICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzFdPSJJbmRleCBzaXplIGVycm9yIiksMSk7CnZhciBET01TVFJJTkdfU0laRV9FUlIgICAgICAgICAgPSBFeGNlcHRpb25Db2RlLkRPTVNUUklOR19TSVpFX0VSUiAgICAgICAgICA9ICgoRXhjZXB0aW9uTWVzc2FnZVsyXT0iRE9NU3RyaW5nIHNpemUgZXJyb3IiKSwyKTsKdmFyIEhJRVJBUkNIWV9SRVFVRVNUX0VSUiAgICAgICA9IEV4Y2VwdGlvbkNvZGUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzNdPSJIaWVyYXJjaHkgcmVxdWVzdCBlcnJvciIpLDMpOwp2YXIgV1JPTkdfRE9DVU1FTlRfRVJSICAgICAgICAgID0gRXhjZXB0aW9uQ29kZS5XUk9OR19ET0NVTUVOVF9FUlIgICAgICAgICAgPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbNF09Ildyb25nIGRvY3VtZW50IiksNCk7CnZhciBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgICAgICAgPSBFeGNlcHRpb25Db2RlLklOVkFMSURfQ0hBUkFDVEVSX0VSUiAgICAgICA9ICgoRXhjZXB0aW9uTWVzc2FnZVs1XT0iSW52YWxpZCBjaGFyYWN0ZXIiKSw1KTsKdmFyIE5PX0RBVEFfQUxMT1dFRF9FUlIgICAgICAgICA9IEV4Y2VwdGlvbkNvZGUuTk9fREFUQV9BTExPV0VEX0VSUiAgICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzZdPSJObyBkYXRhIGFsbG93ZWQiKSw2KTsKdmFyIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiA9IEV4Y2VwdGlvbkNvZGUuTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSID0gKChFeGNlcHRpb25NZXNzYWdlWzddPSJObyBtb2RpZmljYXRpb24gYWxsb3dlZCIpLDcpOwp2YXIgTk9UX0ZPVU5EX0VSUiAgICAgICAgICAgICAgID0gRXhjZXB0aW9uQ29kZS5OT1RfRk9VTkRfRVJSICAgICAgICAgICAgICAgPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbOF09Ik5vdCBmb3VuZCIpLDgpOwp2YXIgTk9UX1NVUFBPUlRFRF9FUlIgICAgICAgICAgID0gRXhjZXB0aW9uQ29kZS5OT1RfU1VQUE9SVEVEX0VSUiAgICAgICAgICAgPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbOV09Ik5vdCBzdXBwb3J0ZWQiKSw5KTsKdmFyIElOVVNFX0FUVFJJQlVURV9FUlIgICAgICAgICA9IEV4Y2VwdGlvbkNvZGUuSU5VU0VfQVRUUklCVVRFX0VSUiAgICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzEwXT0iQXR0cmlidXRlIGluIHVzZSIpLDEwKTsKdmFyIElOVkFMSURfU1RBVEVfRVJSICAgICAgICAJPSBFeGNlcHRpb25Db2RlLklOVkFMSURfU1RBVEVfRVJSICAgICAgICAJPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbMTFdPSJJbnZhbGlkIHN0YXRlIiksMTEpOwp2YXIgU1lOVEFYX0VSUiAgICAgICAgICAgICAgIAk9IEV4Y2VwdGlvbkNvZGUuU1lOVEFYX0VSUiAgICAgICAgICAgICAgIAk9ICgoRXhjZXB0aW9uTWVzc2FnZVsxMl09IlN5bnRheCBlcnJvciIpLDEyKTsKdmFyIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiAJPSBFeGNlcHRpb25Db2RlLklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiAJPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbMTNdPSJJbnZhbGlkIG1vZGlmaWNhdGlvbiIpLDEzKTsKdmFyIE5BTUVTUEFDRV9FUlIgICAgICAgICAgICAJPSBFeGNlcHRpb25Db2RlLk5BTUVTUEFDRV9FUlIgICAgICAgICAgIAk9ICgoRXhjZXB0aW9uTWVzc2FnZVsxNF09IkludmFsaWQgbmFtZXNwYWNlIiksMTQpOwp2YXIgSU5WQUxJRF9BQ0NFU1NfRVJSICAgICAgIAk9IEV4Y2VwdGlvbkNvZGUuSU5WQUxJRF9BQ0NFU1NfRVJSICAgICAgCT0gKChFeGNlcHRpb25NZXNzYWdlWzE1XT0iSW52YWxpZCBhY2Nlc3MiKSwxNSk7CgoKZnVuY3Rpb24gRE9NRXhjZXB0aW9uKGNvZGUsIG1lc3NhZ2UpIHsKCWlmKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcil7CgkJdmFyIGVycm9yID0gbWVzc2FnZTsKCX1lbHNlewoJCWVycm9yID0gdGhpczsKCQlFcnJvci5jYWxsKHRoaXMsIEV4Y2VwdGlvbk1lc3NhZ2VbY29kZV0pOwoJCXRoaXMubWVzc2FnZSA9IEV4Y2VwdGlvbk1lc3NhZ2VbY29kZV07CgkJaWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIERPTUV4Y2VwdGlvbik7Cgl9CgllcnJvci5jb2RlID0gY29kZTsKCWlmKG1lc3NhZ2UpIHRoaXMubWVzc2FnZSA9IHRoaXMubWVzc2FnZSArICI6ICIgKyBtZXNzYWdlOwoJcmV0dXJuIGVycm9yOwp9OwpET01FeGNlcHRpb24ucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlOwpjb3B5KEV4Y2VwdGlvbkNvZGUsRE9NRXhjZXB0aW9uKQpmdW5jdGlvbiBOb2RlTGlzdCgpIHsKfTsKTm9kZUxpc3QucHJvdG90eXBlID0gewoJbGVuZ3RoOjAsCglpdGVtOiBmdW5jdGlvbihpbmRleCkgewoJCXJldHVybiB0aGlzW2luZGV4XSB8fCBudWxsOwoJfQp9OwpmdW5jdGlvbiBMaXZlTm9kZUxpc3Qobm9kZSxyZWZyZXNoKXsKCXRoaXMuX25vZGUgPSBub2RlOwoJdGhpcy5fcmVmcmVzaCA9IHJlZnJlc2g7CglfdXBkYXRlTGl2ZUxpc3QodGhpcyk7Cn0KZnVuY3Rpb24gX3VwZGF0ZUxpdmVMaXN0KGxpc3QpewoJdmFyIGluYyA9IGxpc3QuX25vZGUuX2luYyB8fCBsaXN0Ll9ub2RlLm93bmVyRG9jdW1lbnQuX2luYzsKCWlmKGxpc3QuX2luYyAhPSBpbmMpewoJCXZhciBscyA9IGxpc3QuX3JlZnJlc2gobGlzdC5fbm9kZSk7CgkJX19zZXRfXyhsaXN0LCdsZW5ndGgnLGxzLmxlbmd0aCk7CgkJY29weShscyxsaXN0KTsKCQlsaXN0Ll9pbmMgPSBpbmM7Cgl9Cn0KTGl2ZU5vZGVMaXN0LnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaSl7CglfdXBkYXRlTGl2ZUxpc3QodGhpcyk7CglyZXR1cm4gdGhpc1tpXTsKfQoKX2V4dGVuZHMoTGl2ZU5vZGVMaXN0LE5vZGVMaXN0KTsKZnVuY3Rpb24gTmFtZWROb2RlTWFwKCkgewp9OwoKZnVuY3Rpb24gX2ZpbmROb2RlSW5kZXgobGlzdCxub2RlKXsKCXZhciBpID0gbGlzdC5sZW5ndGg7Cgl3aGlsZShpLS0pewoJCWlmKGxpc3RbaV0gPT09IG5vZGUpe3JldHVybiBpfQoJfQp9CgpmdW5jdGlvbiBfYWRkTmFtZWROb2RlKGVsLGxpc3QsbmV3QXR0cixvbGRBdHRyKXsKCWlmKG9sZEF0dHIpewoJCWxpc3RbX2ZpbmROb2RlSW5kZXgobGlzdCxvbGRBdHRyKV0gPSBuZXdBdHRyOwoJfWVsc2V7CgkJbGlzdFtsaXN0Lmxlbmd0aCsrXSA9IG5ld0F0dHI7Cgl9CglpZihlbCl7CgkJbmV3QXR0ci5vd25lckVsZW1lbnQgPSBlbDsKCQl2YXIgZG9jID0gZWwub3duZXJEb2N1bWVudDsKCQlpZihkb2MpewoJCQlvbGRBdHRyICYmIF9vblJlbW92ZUF0dHJpYnV0ZShkb2MsZWwsb2xkQXR0cik7CgkJCV9vbkFkZEF0dHJpYnV0ZShkb2MsZWwsbmV3QXR0cik7CgkJfQoJfQp9CmZ1bmN0aW9uIF9yZW1vdmVOYW1lZE5vZGUoZWwsbGlzdCxhdHRyKXsKCXZhciBpID0gX2ZpbmROb2RlSW5kZXgobGlzdCxhdHRyKTsKCWlmKGk+PTApewoJCXZhciBsYXN0SW5kZXggPSBsaXN0Lmxlbmd0aC0xOwoJCXdoaWxlKGk8bGFzdEluZGV4KXsKCQkJbGlzdFtpXSA9IGxpc3RbKytpXTsKCQl9CgkJbGlzdC5sZW5ndGggPSBsYXN0SW5kZXg7CgkJaWYoZWwpewoJCQl2YXIgZG9jID0gZWwub3duZXJEb2N1bWVudDsKCQkJaWYoZG9jKXsKCQkJCV9vblJlbW92ZUF0dHJpYnV0ZShkb2MsZWwsYXR0cik7CgkJCQlhdHRyLm93bmVyRWxlbWVudCA9IG51bGw7CgkJCX0KCQl9Cgl9ZWxzZXsKCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKE5PVF9GT1VORF9FUlIsbmV3IEVycm9yKCkpOwoJfQp9Ck5hbWVkTm9kZU1hcC5wcm90b3R5cGUgPSB7CglsZW5ndGg6MCwKCWl0ZW06Tm9kZUxpc3QucHJvdG90eXBlLml0ZW0sCglnZXROYW1lZEl0ZW06IGZ1bmN0aW9uKGtleSkgewoJCXZhciBpID0gdGhpcy5sZW5ndGg7CgkJd2hpbGUoaS0tKXsKCQkJdmFyIGF0dHIgPSB0aGlzW2ldOwoJCQlpZihhdHRyLm5vZGVOYW1lID09IGtleSl7CgkJCQlyZXR1cm4gYXR0cjsKCQkJfQoJCX0KCX0sCglzZXROYW1lZEl0ZW06IGZ1bmN0aW9uKGF0dHIpIHsKCQl2YXIgZWwgPSBhdHRyLm93bmVyRWxlbWVudDsKCQlpZihlbCAmJiBlbCE9dGhpcy5fb3duZXJFbGVtZW50KXsKCQkJdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihJTlVTRV9BVFRSSUJVVEVfRVJSKTsKCQl9CgkJdmFyIG9sZEF0dHIgPSB0aGlzLmdldE5hbWVkSXRlbShhdHRyLm5vZGVOYW1lKTsKCQlfYWRkTmFtZWROb2RlKHRoaXMuX293bmVyRWxlbWVudCx0aGlzLGF0dHIsb2xkQXR0cik7CgkJcmV0dXJuIG9sZEF0dHI7Cgl9LAoJc2V0TmFtZWRJdGVtTlM6IGZ1bmN0aW9uKGF0dHIpIHsvLyByYWlzZXM6IFdST05HX0RPQ1VNRU5UX0VSUixOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsSU5VU0VfQVRUUklCVVRFX0VSUgoJCXZhciBlbCA9IGF0dHIub3duZXJFbGVtZW50LCBvbGRBdHRyOwoJCWlmKGVsICYmIGVsIT10aGlzLl9vd25lckVsZW1lbnQpewoJCQl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKElOVVNFX0FUVFJJQlVURV9FUlIpOwoJCX0KCQlvbGRBdHRyID0gdGhpcy5nZXROYW1lZEl0ZW1OUyhhdHRyLm5hbWVzcGFjZVVSSSxhdHRyLmxvY2FsTmFtZSk7CgkJX2FkZE5hbWVkTm9kZSh0aGlzLl9vd25lckVsZW1lbnQsdGhpcyxhdHRyLG9sZEF0dHIpOwoJCXJldHVybiBvbGRBdHRyOwoJfSwKCXJlbW92ZU5hbWVkSXRlbTogZnVuY3Rpb24oa2V5KSB7CgkJdmFyIGF0dHIgPSB0aGlzLmdldE5hbWVkSXRlbShrZXkpOwoJCV9yZW1vdmVOYW1lZE5vZGUodGhpcy5fb3duZXJFbGVtZW50LHRoaXMsYXR0cik7CgkJcmV0dXJuIGF0dHI7CgoKCX0sLy8gcmFpc2VzOiBOT1RfRk9VTkRfRVJSLE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUgoJcmVtb3ZlTmFtZWRJdGVtTlM6ZnVuY3Rpb24obmFtZXNwYWNlVVJJLGxvY2FsTmFtZSl7CgkJdmFyIGF0dHIgPSB0aGlzLmdldE5hbWVkSXRlbU5TKG5hbWVzcGFjZVVSSSxsb2NhbE5hbWUpOwoJCV9yZW1vdmVOYW1lZE5vZGUodGhpcy5fb3duZXJFbGVtZW50LHRoaXMsYXR0cik7CgkJcmV0dXJuIGF0dHI7Cgl9LAoJZ2V0TmFtZWRJdGVtTlM6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7CgkJdmFyIGkgPSB0aGlzLmxlbmd0aDsKCQl3aGlsZShpLS0pewoJCQl2YXIgbm9kZSA9IHRoaXNbaV07CgkJCWlmKG5vZGUubG9jYWxOYW1lID09IGxvY2FsTmFtZSAmJiBub2RlLm5hbWVzcGFjZVVSSSA9PSBuYW1lc3BhY2VVUkkpewoJCQkJcmV0dXJuIG5vZGU7CgkJCX0KCQl9CgkJcmV0dXJuIG51bGw7Cgl9Cn07CmZ1bmN0aW9uIERPTUltcGxlbWVudGF0aW9uKC8qIE9iamVjdCAqLyBmZWF0dXJlcykgewoJdGhpcy5fZmVhdHVyZXMgPSB7fTsKCWlmIChmZWF0dXJlcykgewoJCWZvciAodmFyIGZlYXR1cmUgaW4gZmVhdHVyZXMpIHsKCQkJIHRoaXMuX2ZlYXR1cmVzID0gZmVhdHVyZXNbZmVhdHVyZV07CgkJfQoJfQp9OwoKRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlID0gewoJaGFzRmVhdHVyZTogZnVuY3Rpb24oLyogc3RyaW5nICovIGZlYXR1cmUsIC8qIHN0cmluZyAqLyB2ZXJzaW9uKSB7CgkJdmFyIHZlcnNpb25zID0gdGhpcy5fZmVhdHVyZXNbZmVhdHVyZS50b0xvd2VyQ2FzZSgpXTsKCQlpZiAodmVyc2lvbnMgJiYgKCF2ZXJzaW9uIHx8IHZlcnNpb24gaW4gdmVyc2lvbnMpKSB7CgkJCXJldHVybiB0cnVlOwoJCX0gZWxzZSB7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9LAoJY3JlYXRlRG9jdW1lbnQ6ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCAgcXVhbGlmaWVkTmFtZSwgZG9jdHlwZSl7Ly8gcmFpc2VzOklOVkFMSURfQ0hBUkFDVEVSX0VSUixOQU1FU1BBQ0VfRVJSLFdST05HX0RPQ1VNRU5UX0VSUgoJCXZhciBkb2MgPSBuZXcgRG9jdW1lbnQoKTsKCQlkb2MuaW1wbGVtZW50YXRpb24gPSB0aGlzOwoJCWRvYy5jaGlsZE5vZGVzID0gbmV3IE5vZGVMaXN0KCk7CgkJZG9jLmRvY3R5cGUgPSBkb2N0eXBlOwoJCWlmKGRvY3R5cGUpewoJCQlkb2MuYXBwZW5kQ2hpbGQoZG9jdHlwZSk7CgkJfQoJCWlmKHF1YWxpZmllZE5hbWUpewoJCQl2YXIgcm9vdCA9IGRvYy5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLHF1YWxpZmllZE5hbWUpOwoJCQlkb2MuYXBwZW5kQ2hpbGQocm9vdCk7CgkJfQoJCXJldHVybiBkb2M7Cgl9LAoJY3JlYXRlRG9jdW1lbnRUeXBlOmZ1bmN0aW9uKHF1YWxpZmllZE5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCl7Ly8gcmFpc2VzOklOVkFMSURfQ0hBUkFDVEVSX0VSUixOQU1FU1BBQ0VfRVJSCgkJdmFyIG5vZGUgPSBuZXcgRG9jdW1lbnRUeXBlKCk7CgkJbm9kZS5uYW1lID0gcXVhbGlmaWVkTmFtZTsKCQlub2RlLm5vZGVOYW1lID0gcXVhbGlmaWVkTmFtZTsKCQlub2RlLnB1YmxpY0lkID0gcHVibGljSWQ7CgkJbm9kZS5zeXN0ZW1JZCA9IHN5c3RlbUlkOwoJCXJldHVybiBub2RlOwoJfQp9OwoKZnVuY3Rpb24gTm9kZSgpIHsKfTsKCk5vZGUucHJvdG90eXBlID0gewoJZmlyc3RDaGlsZCA6IG51bGwsCglsYXN0Q2hpbGQgOiBudWxsLAoJcHJldmlvdXNTaWJsaW5nIDogbnVsbCwKCW5leHRTaWJsaW5nIDogbnVsbCwKCWF0dHJpYnV0ZXMgOiBudWxsLAoJcGFyZW50Tm9kZSA6IG51bGwsCgljaGlsZE5vZGVzIDogbnVsbCwKCW93bmVyRG9jdW1lbnQgOiBudWxsLAoJbm9kZVZhbHVlIDogbnVsbCwKCW5hbWVzcGFjZVVSSSA6IG51bGwsCglwcmVmaXggOiBudWxsLAoJbG9jYWxOYW1lIDogbnVsbCwKCWluc2VydEJlZm9yZTpmdW5jdGlvbihuZXdDaGlsZCwgcmVmQ2hpbGQpey8vcmFpc2VzCgkJcmV0dXJuIF9pbnNlcnRCZWZvcmUodGhpcyxuZXdDaGlsZCxyZWZDaGlsZCk7Cgl9LAoJcmVwbGFjZUNoaWxkOmZ1bmN0aW9uKG5ld0NoaWxkLCBvbGRDaGlsZCl7Ly9yYWlzZXMKCQl0aGlzLmluc2VydEJlZm9yZShuZXdDaGlsZCxvbGRDaGlsZCk7CgkJaWYob2xkQ2hpbGQpewoJCQl0aGlzLnJlbW92ZUNoaWxkKG9sZENoaWxkKTsKCQl9Cgl9LAoJcmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24ob2xkQ2hpbGQpewoJCXJldHVybiBfcmVtb3ZlQ2hpbGQodGhpcyxvbGRDaGlsZCk7Cgl9LAoJYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obmV3Q2hpbGQpewoJCXJldHVybiB0aGlzLmluc2VydEJlZm9yZShuZXdDaGlsZCxudWxsKTsKCX0sCgloYXNDaGlsZE5vZGVzOmZ1bmN0aW9uKCl7CgkJcmV0dXJuIHRoaXMuZmlyc3RDaGlsZCAhPSBudWxsOwoJfSwKCWNsb25lTm9kZTpmdW5jdGlvbihkZWVwKXsKCQlyZXR1cm4gY2xvbmVOb2RlKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcyx0aGlzLGRlZXApOwoJfSwKCW5vcm1hbGl6ZTpmdW5jdGlvbigpewoJCXZhciBjaGlsZCA9IHRoaXMuZmlyc3RDaGlsZDsKCQl3aGlsZShjaGlsZCl7CgkJCXZhciBuZXh0ID0gY2hpbGQubmV4dFNpYmxpbmc7CgkJCWlmKG5leHQgJiYgbmV4dC5ub2RlVHlwZSA9PSBURVhUX05PREUgJiYgY2hpbGQubm9kZVR5cGUgPT0gVEVYVF9OT0RFKXsKCQkJCXRoaXMucmVtb3ZlQ2hpbGQobmV4dCk7CgkJCQljaGlsZC5hcHBlbmREYXRhKG5leHQuZGF0YSk7CgkJCX1lbHNlewoJCQkJY2hpbGQubm9ybWFsaXplKCk7CgkJCQljaGlsZCA9IG5leHQ7CgkJCX0KCQl9Cgl9LAoJaXNTdXBwb3J0ZWQ6ZnVuY3Rpb24oZmVhdHVyZSwgdmVyc2lvbil7CgkJcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKGZlYXR1cmUsdmVyc2lvbik7Cgl9LAogICAgaGFzQXR0cmlidXRlczpmdW5jdGlvbigpewogICAgCXJldHVybiB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoPjA7CiAgICB9LAogICAgbG9va3VwUHJlZml4OmZ1bmN0aW9uKG5hbWVzcGFjZVVSSSl7CiAgICAJdmFyIGVsID0gdGhpczsKICAgIAl3aGlsZShlbCl7CiAgICAJCXZhciBtYXAgPSBlbC5fbnNNYXA7CiAgICAJCWlmKG1hcCl7CiAgICAJCQlmb3IodmFyIG4gaW4gbWFwKXsKICAgIAkJCQlpZihtYXBbbl0gPT0gbmFtZXNwYWNlVVJJKXsKICAgIAkJCQkJcmV0dXJuIG47CiAgICAJCQkJfQogICAgCQkJfQogICAgCQl9CiAgICAJCWVsID0gZWwubm9kZVR5cGUgPT0gMj9lbC5vd25lckRvY3VtZW50IDogZWwucGFyZW50Tm9kZTsKICAgIAl9CiAgICAJcmV0dXJuIG51bGw7CiAgICB9LAogICAgbG9va3VwTmFtZXNwYWNlVVJJOmZ1bmN0aW9uKHByZWZpeCl7CiAgICAJdmFyIGVsID0gdGhpczsKICAgIAl3aGlsZShlbCl7CiAgICAJCXZhciBtYXAgPSBlbC5fbnNNYXA7CiAgICAJCWlmKG1hcCl7CiAgICAJCQlpZihwcmVmaXggaW4gbWFwKXsKICAgIAkJCQlyZXR1cm4gbWFwW3ByZWZpeF0gOwogICAgCQkJfQogICAgCQl9CiAgICAJCWVsID0gZWwubm9kZVR5cGUgPT0gMj9lbC5vd25lckRvY3VtZW50IDogZWwucGFyZW50Tm9kZTsKICAgIAl9CiAgICAJcmV0dXJuIG51bGw7CiAgICB9LAogICAgaXNEZWZhdWx0TmFtZXNwYWNlOmZ1bmN0aW9uKG5hbWVzcGFjZVVSSSl7CiAgICAJdmFyIHByZWZpeCA9IHRoaXMubG9va3VwUHJlZml4KG5hbWVzcGFjZVVSSSk7CiAgICAJcmV0dXJuIHByZWZpeCA9PSBudWxsOwogICAgfQp9OwoKCmZ1bmN0aW9uIF94bWxFbmNvZGVyKGMpewoJcmV0dXJuIGMgPT0gJzwnICYmICcmbHQ7JyB8fAogICAgICAgICBjID09ICc+JyAmJiAnJmd0OycgfHwKICAgICAgICAgYyA9PSAnJicgJiYgJyZhbXA7JyB8fAogICAgICAgICBjID09ICciJyAmJiAnJnF1b3Q7JyB8fAogICAgICAgICAnJiMnK2MuY2hhckNvZGVBdCgpKyc7JzsKfQoKCmNvcHkoTm9kZVR5cGUsTm9kZSk7CmNvcHkoTm9kZVR5cGUsTm9kZS5wcm90b3R5cGUpOwpmdW5jdGlvbiBfdmlzaXROb2RlKG5vZGUsY2FsbGJhY2spewoJaWYoY2FsbGJhY2sobm9kZSkpewoJCXJldHVybiB0cnVlOwoJfQoJaWYobm9kZSA9IG5vZGUuZmlyc3RDaGlsZCl7CgkJZG97CgkJCWlmKF92aXNpdE5vZGUobm9kZSxjYWxsYmFjaykpe3JldHVybiB0cnVlfQogICAgICAgIH13aGlsZShub2RlPW5vZGUubmV4dFNpYmxpbmcpCiAgICB9Cn0KCgoKZnVuY3Rpb24gRG9jdW1lbnQoKXsKfQpmdW5jdGlvbiBfb25BZGRBdHRyaWJ1dGUoZG9jLGVsLG5ld0F0dHIpewoJZG9jICYmIGRvYy5faW5jKys7Cgl2YXIgbnMgPSBuZXdBdHRyLm5hbWVzcGFjZVVSSSA7CglpZihucyA9PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nKXsKCQllbC5fbnNNYXBbbmV3QXR0ci5wcmVmaXg/bmV3QXR0ci5sb2NhbE5hbWU6JyddID0gbmV3QXR0ci52YWx1ZQoJfQp9CmZ1bmN0aW9uIF9vblJlbW92ZUF0dHJpYnV0ZShkb2MsZWwsbmV3QXR0cixyZW1vdmUpewoJZG9jICYmIGRvYy5faW5jKys7Cgl2YXIgbnMgPSBuZXdBdHRyLm5hbWVzcGFjZVVSSSA7CglpZihucyA9PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nKXsKCQlkZWxldGUgZWwuX25zTWFwW25ld0F0dHIucHJlZml4P25ld0F0dHIubG9jYWxOYW1lOicnXTsKCX0KfQpmdW5jdGlvbiBfb25VcGRhdGVDaGlsZChkb2MsZWwsbmV3Q2hpbGQpewoJaWYoZG9jICYmIGRvYy5faW5jKXsKCQlkb2MuX2luYysrOwoJCXZhciBjcyA9IGVsLmNoaWxkTm9kZXM7CgkJaWYobmV3Q2hpbGQpewoJCQljc1tjcy5sZW5ndGgrK10gPSBuZXdDaGlsZDsKCQl9ZWxzZXsKCQkJdmFyIGNoaWxkID0gZWwuZmlyc3RDaGlsZDsKCQkJdmFyIGkgPSAwOwoJCQl3aGlsZShjaGlsZCl7CgkJCQljc1tpKytdID0gY2hpbGQ7CgkJCQljaGlsZCA9Y2hpbGQubmV4dFNpYmxpbmc7CgkJCX0KCQkJY3MubGVuZ3RoID0gaTsKCQl9Cgl9Cn0KZnVuY3Rpb24gX3JlbW92ZUNoaWxkKHBhcmVudE5vZGUsY2hpbGQpewoJdmFyIHByZXZpb3VzID0gY2hpbGQucHJldmlvdXNTaWJsaW5nOwoJdmFyIG5leHQgPSBjaGlsZC5uZXh0U2libGluZzsKCWlmKHByZXZpb3VzKXsKCQlwcmV2aW91cy5uZXh0U2libGluZyA9IG5leHQ7Cgl9ZWxzZXsKCQlwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSBuZXh0Cgl9CglpZihuZXh0KXsKCQluZXh0LnByZXZpb3VzU2libGluZyA9IHByZXZpb3VzOwoJfWVsc2V7CgkJcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBwcmV2aW91czsKCX0KCV9vblVwZGF0ZUNoaWxkKHBhcmVudE5vZGUub3duZXJEb2N1bWVudCxwYXJlbnROb2RlKTsKCXJldHVybiBjaGlsZDsKfQpmdW5jdGlvbiBfaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsbmV3Q2hpbGQsbmV4dENoaWxkKXsKCXZhciBjcCA9IG5ld0NoaWxkLnBhcmVudE5vZGU7CglpZihjcCl7CgkJY3AucmVtb3ZlQ2hpbGQobmV3Q2hpbGQpOy8vcmVtb3ZlIGFuZCB1cGRhdGUKCX0KCWlmKG5ld0NoaWxkLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXsKCQl2YXIgbmV3Rmlyc3QgPSBuZXdDaGlsZC5maXJzdENoaWxkOwoJCWlmIChuZXdGaXJzdCA9PSBudWxsKSB7CgkJCXJldHVybiBuZXdDaGlsZDsKCQl9CgkJdmFyIG5ld0xhc3QgPSBuZXdDaGlsZC5sYXN0Q2hpbGQ7Cgl9ZWxzZXsKCQluZXdGaXJzdCA9IG5ld0xhc3QgPSBuZXdDaGlsZDsKCX0KCXZhciBwcmUgPSBuZXh0Q2hpbGQgPyBuZXh0Q2hpbGQucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Tm9kZS5sYXN0Q2hpbGQ7CgoJbmV3Rmlyc3QucHJldmlvdXNTaWJsaW5nID0gcHJlOwoJbmV3TGFzdC5uZXh0U2libGluZyA9IG5leHRDaGlsZDsKCgoJaWYocHJlKXsKCQlwcmUubmV4dFNpYmxpbmcgPSBuZXdGaXJzdDsKCX1lbHNlewoJCXBhcmVudE5vZGUuZmlyc3RDaGlsZCA9IG5ld0ZpcnN0OwoJfQoJaWYobmV4dENoaWxkID09IG51bGwpewoJCXBhcmVudE5vZGUubGFzdENoaWxkID0gbmV3TGFzdDsKCX1lbHNlewoJCW5leHRDaGlsZC5wcmV2aW91c1NpYmxpbmcgPSBuZXdMYXN0OwoJfQoJZG97CgkJbmV3Rmlyc3QucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7Cgl9d2hpbGUobmV3Rmlyc3QgIT09IG5ld0xhc3QgJiYgKG5ld0ZpcnN0PSBuZXdGaXJzdC5uZXh0U2libGluZykpCglfb25VcGRhdGVDaGlsZChwYXJlbnROb2RlLm93bmVyRG9jdW1lbnR8fHBhcmVudE5vZGUscGFyZW50Tm9kZSk7CglpZiAobmV3Q2hpbGQubm9kZVR5cGUgPT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgewoJCW5ld0NoaWxkLmZpcnN0Q2hpbGQgPSBuZXdDaGlsZC5sYXN0Q2hpbGQgPSBudWxsOwoJfQoJcmV0dXJuIG5ld0NoaWxkOwp9CmZ1bmN0aW9uIF9hcHBlbmRTaW5nbGVDaGlsZChwYXJlbnROb2RlLG5ld0NoaWxkKXsKCXZhciBjcCA9IG5ld0NoaWxkLnBhcmVudE5vZGU7CglpZihjcCl7CgkJdmFyIHByZSA9IHBhcmVudE5vZGUubGFzdENoaWxkOwoJCWNwLnJlbW92ZUNoaWxkKG5ld0NoaWxkKTsvL3JlbW92ZSBhbmQgdXBkYXRlCgkJdmFyIHByZSA9IHBhcmVudE5vZGUubGFzdENoaWxkOwoJfQoJdmFyIHByZSA9IHBhcmVudE5vZGUubGFzdENoaWxkOwoJbmV3Q2hpbGQucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7CgluZXdDaGlsZC5wcmV2aW91c1NpYmxpbmcgPSBwcmU7CgluZXdDaGlsZC5uZXh0U2libGluZyA9IG51bGw7CglpZihwcmUpewoJCXByZS5uZXh0U2libGluZyA9IG5ld0NoaWxkOwoJfWVsc2V7CgkJcGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV3Q2hpbGQ7Cgl9CglwYXJlbnROb2RlLmxhc3RDaGlsZCA9IG5ld0NoaWxkOwoJX29uVXBkYXRlQ2hpbGQocGFyZW50Tm9kZS5vd25lckRvY3VtZW50LHBhcmVudE5vZGUsbmV3Q2hpbGQpOwoJcmV0dXJuIG5ld0NoaWxkOwp9CkRvY3VtZW50LnByb3RvdHlwZSA9IHsKCW5vZGVOYW1lIDogICcjZG9jdW1lbnQnLAoJbm9kZVR5cGUgOiAgRE9DVU1FTlRfTk9ERSwKCWRvY3R5cGUgOiAgbnVsbCwKCWRvY3VtZW50RWxlbWVudCA6ICBudWxsLAoJX2luYyA6IDEsCgoJaW5zZXJ0QmVmb3JlIDogIGZ1bmN0aW9uKG5ld0NoaWxkLCByZWZDaGlsZCl7Ly9yYWlzZXMKCQlpZihuZXdDaGlsZC5ub2RlVHlwZSA9PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXsKCQkJdmFyIGNoaWxkID0gbmV3Q2hpbGQuZmlyc3RDaGlsZDsKCQkJd2hpbGUoY2hpbGQpewoJCQkJdmFyIG5leHQgPSBjaGlsZC5uZXh0U2libGluZzsKCQkJCXRoaXMuaW5zZXJ0QmVmb3JlKGNoaWxkLHJlZkNoaWxkKTsKCQkJCWNoaWxkID0gbmV4dDsKCQkJfQoJCQlyZXR1cm4gbmV3Q2hpbGQ7CgkJfQoJCWlmKHRoaXMuZG9jdW1lbnRFbGVtZW50ID09IG51bGwgJiYgbmV3Q2hpbGQubm9kZVR5cGUgPT0gMSl7CgkJCXRoaXMuZG9jdW1lbnRFbGVtZW50ID0gbmV3Q2hpbGQ7CgkJfQoKCQlyZXR1cm4gX2luc2VydEJlZm9yZSh0aGlzLG5ld0NoaWxkLHJlZkNoaWxkKSwobmV3Q2hpbGQub3duZXJEb2N1bWVudCA9IHRoaXMpLG5ld0NoaWxkOwoJfSwKCXJlbW92ZUNoaWxkIDogIGZ1bmN0aW9uKG9sZENoaWxkKXsKCQlpZih0aGlzLmRvY3VtZW50RWxlbWVudCA9PSBvbGRDaGlsZCl7CgkJCXRoaXMuZG9jdW1lbnRFbGVtZW50ID0gbnVsbDsKCQl9CgkJcmV0dXJuIF9yZW1vdmVDaGlsZCh0aGlzLG9sZENoaWxkKTsKCX0sCglpbXBvcnROb2RlIDogZnVuY3Rpb24oaW1wb3J0ZWROb2RlLGRlZXApewoJCXJldHVybiBpbXBvcnROb2RlKHRoaXMsaW1wb3J0ZWROb2RlLGRlZXApOwoJfSwKCWdldEVsZW1lbnRCeUlkIDoJZnVuY3Rpb24oaWQpewoJCXZhciBydHYgPSBudWxsOwoJCV92aXNpdE5vZGUodGhpcy5kb2N1bWVudEVsZW1lbnQsZnVuY3Rpb24obm9kZSl7CgkJCWlmKG5vZGUubm9kZVR5cGUgPT0gMSl7CgkJCQlpZihub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSA9PSBpZCl7CgkJCQkJcnR2ID0gbm9kZTsKCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0pOwoJCXJldHVybiBydHY7Cgl9LAoJY3JlYXRlRWxlbWVudCA6CWZ1bmN0aW9uKHRhZ05hbWUpewoJCXZhciBub2RlID0gbmV3IEVsZW1lbnQoKTsKCQlub2RlLm93bmVyRG9jdW1lbnQgPSB0aGlzOwoJCW5vZGUubm9kZU5hbWUgPSB0YWdOYW1lOwoJCW5vZGUudGFnTmFtZSA9IHRhZ05hbWU7CgkJbm9kZS5jaGlsZE5vZGVzID0gbmV3IE5vZGVMaXN0KCk7CgkJdmFyIGF0dHJzCT0gbm9kZS5hdHRyaWJ1dGVzID0gbmV3IE5hbWVkTm9kZU1hcCgpOwoJCWF0dHJzLl9vd25lckVsZW1lbnQgPSBub2RlOwoJCXJldHVybiBub2RlOwoJfSwKCWNyZWF0ZURvY3VtZW50RnJhZ21lbnQgOglmdW5jdGlvbigpewoJCXZhciBub2RlID0gbmV3IERvY3VtZW50RnJhZ21lbnQoKTsKCQlub2RlLm93bmVyRG9jdW1lbnQgPSB0aGlzOwoJCW5vZGUuY2hpbGROb2RlcyA9IG5ldyBOb2RlTGlzdCgpOwoJCXJldHVybiBub2RlOwoJfSwKCWNyZWF0ZVRleHROb2RlIDoJZnVuY3Rpb24oZGF0YSl7CgkJdmFyIG5vZGUgPSBuZXcgVGV4dCgpOwoJCW5vZGUub3duZXJEb2N1bWVudCA9IHRoaXM7CgkJbm9kZS5hcHBlbmREYXRhKGRhdGEpOwoJCXJldHVybiBub2RlOwoJfSwKCWNyZWF0ZUNvbW1lbnQgOglmdW5jdGlvbihkYXRhKXsKCQl2YXIgbm9kZSA9IG5ldyBDb21tZW50KCk7CgkJbm9kZS5vd25lckRvY3VtZW50ID0gdGhpczsKCQlub2RlLmFwcGVuZERhdGEoZGF0YSk7CgkJcmV0dXJuIG5vZGU7Cgl9LAoJY3JlYXRlQ0RBVEFTZWN0aW9uIDoJZnVuY3Rpb24oZGF0YSl7CgkJdmFyIG5vZGUgPSBuZXcgQ0RBVEFTZWN0aW9uKCk7CgkJbm9kZS5vd25lckRvY3VtZW50ID0gdGhpczsKCQlub2RlLmFwcGVuZERhdGEoZGF0YSk7CgkJcmV0dXJuIG5vZGU7Cgl9LAoJY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uIDoJZnVuY3Rpb24odGFyZ2V0LGRhdGEpewoJCXZhciBub2RlID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpOwoJCW5vZGUub3duZXJEb2N1bWVudCA9IHRoaXM7CgkJbm9kZS50YWdOYW1lID0gbm9kZS50YXJnZXQgPSB0YXJnZXQ7CgkJbm9kZS5ub2RlVmFsdWU9IG5vZGUuZGF0YSA9IGRhdGE7CgkJcmV0dXJuIG5vZGU7Cgl9LAoJY3JlYXRlQXR0cmlidXRlIDoJZnVuY3Rpb24obmFtZSl7CgkJdmFyIG5vZGUgPSBuZXcgQXR0cigpOwoJCW5vZGUub3duZXJEb2N1bWVudAk9IHRoaXM7CgkJbm9kZS5uYW1lID0gbmFtZTsKCQlub2RlLm5vZGVOYW1lCT0gbmFtZTsKCQlub2RlLmxvY2FsTmFtZSA9IG5hbWU7CgkJbm9kZS5zcGVjaWZpZWQgPSB0cnVlOwoJCXJldHVybiBub2RlOwoJfSwKCWNyZWF0ZUVudGl0eVJlZmVyZW5jZSA6CWZ1bmN0aW9uKG5hbWUpewoJCXZhciBub2RlID0gbmV3IEVudGl0eVJlZmVyZW5jZSgpOwoJCW5vZGUub3duZXJEb2N1bWVudAk9IHRoaXM7CgkJbm9kZS5ub2RlTmFtZQk9IG5hbWU7CgkJcmV0dXJuIG5vZGU7Cgl9LAoJY3JlYXRlRWxlbWVudE5TIDoJZnVuY3Rpb24obmFtZXNwYWNlVVJJLHF1YWxpZmllZE5hbWUpewoJCXZhciBub2RlID0gbmV3IEVsZW1lbnQoKTsKCQl2YXIgcGwgPSBxdWFsaWZpZWROYW1lLnNwbGl0KCc6Jyk7CgkJdmFyIGF0dHJzCT0gbm9kZS5hdHRyaWJ1dGVzID0gbmV3IE5hbWVkTm9kZU1hcCgpOwoJCW5vZGUuY2hpbGROb2RlcyA9IG5ldyBOb2RlTGlzdCgpOwoJCW5vZGUub3duZXJEb2N1bWVudCA9IHRoaXM7CgkJbm9kZS5ub2RlTmFtZSA9IHF1YWxpZmllZE5hbWU7CgkJbm9kZS50YWdOYW1lID0gcXVhbGlmaWVkTmFtZTsKCQlub2RlLm5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSTsKCQlpZihwbC5sZW5ndGggPT0gMil7CgkJCW5vZGUucHJlZml4ID0gcGxbMF07CgkJCW5vZGUubG9jYWxOYW1lID0gcGxbMV07CgkJfWVsc2V7CgkJCW5vZGUubG9jYWxOYW1lID0gcXVhbGlmaWVkTmFtZTsKCQl9CgkJYXR0cnMuX293bmVyRWxlbWVudCA9IG5vZGU7CgkJcmV0dXJuIG5vZGU7Cgl9LAoJY3JlYXRlQXR0cmlidXRlTlMgOglmdW5jdGlvbihuYW1lc3BhY2VVUkkscXVhbGlmaWVkTmFtZSl7CgkJdmFyIG5vZGUgPSBuZXcgQXR0cigpOwoJCXZhciBwbCA9IHF1YWxpZmllZE5hbWUuc3BsaXQoJzonKTsKCQlub2RlLm93bmVyRG9jdW1lbnQgPSB0aGlzOwoJCW5vZGUubm9kZU5hbWUgPSBxdWFsaWZpZWROYW1lOwoJCW5vZGUubmFtZSA9IHF1YWxpZmllZE5hbWU7CgkJbm9kZS5uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7CgkJbm9kZS5zcGVjaWZpZWQgPSB0cnVlOwoJCWlmKHBsLmxlbmd0aCA9PSAyKXsKCQkJbm9kZS5wcmVmaXggPSBwbFswXTsKCQkJbm9kZS5sb2NhbE5hbWUgPSBwbFsxXTsKCQl9ZWxzZXsKCQkJbm9kZS5sb2NhbE5hbWUgPSBxdWFsaWZpZWROYW1lOwoJCX0KCQlyZXR1cm4gbm9kZTsKCX0KfTsKX2V4dGVuZHMoRG9jdW1lbnQsTm9kZSk7CgoKZnVuY3Rpb24gRWxlbWVudCgpIHsKCXRoaXMuX25zTWFwID0ge307Cn07CkVsZW1lbnQucHJvdG90eXBlID0gewoJbm9kZVR5cGUgOiBFTEVNRU5UX05PREUsCgloYXNBdHRyaWJ1dGUgOiBmdW5jdGlvbihuYW1lKXsKCQlyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpIT1udWxsOwoJfSwKCWdldEF0dHJpYnV0ZSA6IGZ1bmN0aW9uKG5hbWUpewoJCXZhciBhdHRyID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpOwoJCXJldHVybiBhdHRyICYmIGF0dHIudmFsdWUgfHwgJyc7Cgl9LAoJZ2V0QXR0cmlidXRlTm9kZSA6IGZ1bmN0aW9uKG5hbWUpewoJCXJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5hbWUpOwoJfSwKCXNldEF0dHJpYnV0ZSA6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKXsKCQl2YXIgYXR0ciA9IHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUobmFtZSk7CgkJYXR0ci52YWx1ZSA9IGF0dHIubm9kZVZhbHVlID0gIiIgKyB2YWx1ZTsKCQl0aGlzLnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7Cgl9LAoJcmVtb3ZlQXR0cmlidXRlIDogZnVuY3Rpb24obmFtZSl7CgkJdmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7CgkJYXR0ciAmJiB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0cik7Cgl9LAoJYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obmV3Q2hpbGQpewoJCWlmKG5ld0NoaWxkLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXsKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLG51bGwpOwoJCX1lbHNlewoJCQlyZXR1cm4gX2FwcGVuZFNpbmdsZUNoaWxkKHRoaXMsbmV3Q2hpbGQpOwoJCX0KCX0sCglzZXRBdHRyaWJ1dGVOb2RlIDogZnVuY3Rpb24obmV3QXR0cil7CgkJcmV0dXJuIHRoaXMuYXR0cmlidXRlcy5zZXROYW1lZEl0ZW0obmV3QXR0cik7Cgl9LAoJc2V0QXR0cmlidXRlTm9kZU5TIDogZnVuY3Rpb24obmV3QXR0cil7CgkJcmV0dXJuIHRoaXMuYXR0cmlidXRlcy5zZXROYW1lZEl0ZW1OUyhuZXdBdHRyKTsKCX0sCglyZW1vdmVBdHRyaWJ1dGVOb2RlIDogZnVuY3Rpb24ob2xkQXR0cil7CgkJcmV0dXJuIHRoaXMuYXR0cmlidXRlcy5yZW1vdmVOYW1lZEl0ZW0ob2xkQXR0ci5ub2RlTmFtZSk7Cgl9LAoJcmVtb3ZlQXR0cmlidXRlTlMgOiBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7CgkJdmFyIG9sZCA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTsKCQlvbGQgJiYgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOb2RlKG9sZCk7Cgl9LAoKCWhhc0F0dHJpYnV0ZU5TIDogZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpewoJCXJldHVybiB0aGlzLmdldEF0dHJpYnV0ZU5vZGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkhPW51bGw7Cgl9LAoJZ2V0QXR0cmlidXRlTlMgOiBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7CgkJdmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGVOUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7CgkJcmV0dXJuIGF0dHIgJiYgYXR0ci52YWx1ZSB8fCAnJzsKCX0sCglzZXRBdHRyaWJ1dGVOUyA6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpewoJCXZhciBhdHRyID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSk7CgkJYXR0ci52YWx1ZSA9IGF0dHIubm9kZVZhbHVlID0gIiIgKyB2YWx1ZTsKCQl0aGlzLnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7Cgl9LAoJZ2V0QXR0cmlidXRlTm9kZU5TIDogZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpewoJCXJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpOwoJfSwKCglnZXRFbGVtZW50c0J5VGFnTmFtZSA6IGZ1bmN0aW9uKHRhZ05hbWUpewoJCXJldHVybiBuZXcgTGl2ZU5vZGVMaXN0KHRoaXMsZnVuY3Rpb24oYmFzZSl7CgkJCXZhciBscyA9IFtdOwoJCQlfdmlzaXROb2RlKGJhc2UsZnVuY3Rpb24obm9kZSl7CgkJCQlpZihub2RlICE9PSBiYXNlICYmIG5vZGUubm9kZVR5cGUgPT0gRUxFTUVOVF9OT0RFICYmICh0YWdOYW1lID09PSAnKicgfHwgbm9kZS50YWdOYW1lID09IHRhZ05hbWUpKXsKCQkJCQlscy5wdXNoKG5vZGUpOwoJCQkJfQoJCQl9KTsKCQkJcmV0dXJuIGxzOwoJCX0pOwoJfSwKCWdldEVsZW1lbnRzQnlUYWdOYW1lTlMgOiBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7CgkJcmV0dXJuIG5ldyBMaXZlTm9kZUxpc3QodGhpcyxmdW5jdGlvbihiYXNlKXsKCQkJdmFyIGxzID0gW107CgkJCV92aXNpdE5vZGUoYmFzZSxmdW5jdGlvbihub2RlKXsKCQkJCWlmKG5vZGUgIT09IGJhc2UgJiYgbm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIChuYW1lc3BhY2VVUkkgPT09ICcqJyB8fCBub2RlLm5hbWVzcGFjZVVSSSA9PT0gbmFtZXNwYWNlVVJJKSAmJiAobG9jYWxOYW1lID09PSAnKicgfHwgbm9kZS5sb2NhbE5hbWUgPT0gbG9jYWxOYW1lKSl7CgkJCQkJbHMucHVzaChub2RlKTsKCQkJCX0KCQkJfSk7CgkJCXJldHVybiBsczsKCQl9KTsKCX0KfTsKRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWU7CkRvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUzsKCgpfZXh0ZW5kcyhFbGVtZW50LE5vZGUpOwpmdW5jdGlvbiBBdHRyKCkgewp9OwpBdHRyLnByb3RvdHlwZS5ub2RlVHlwZSA9IEFUVFJJQlVURV9OT0RFOwpfZXh0ZW5kcyhBdHRyLE5vZGUpOwoKCmZ1bmN0aW9uIENoYXJhY3RlckRhdGEoKSB7Cn07CkNoYXJhY3RlckRhdGEucHJvdG90eXBlID0gewoJZGF0YSA6ICcnLAoJc3Vic3RyaW5nRGF0YSA6IGZ1bmN0aW9uKG9mZnNldCwgY291bnQpIHsKCQlyZXR1cm4gdGhpcy5kYXRhLnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCtjb3VudCk7Cgl9LAoJYXBwZW5kRGF0YTogZnVuY3Rpb24odGV4dCkgewoJCXRleHQgPSB0aGlzLmRhdGErdGV4dDsKCQl0aGlzLm5vZGVWYWx1ZSA9IHRoaXMuZGF0YSA9IHRleHQ7CgkJdGhpcy5sZW5ndGggPSB0ZXh0Lmxlbmd0aDsKCX0sCglpbnNlcnREYXRhOiBmdW5jdGlvbihvZmZzZXQsdGV4dCkgewoJCXRoaXMucmVwbGFjZURhdGEob2Zmc2V0LDAsdGV4dCk7Cgl9LAoJYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obmV3Q2hpbGQpewoJCQl0aHJvdyBuZXcgRXJyb3IoRXhjZXB0aW9uTWVzc2FnZVszXSk7CgkJcmV0dXJuIE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsKCX0sCglkZWxldGVEYXRhOiBmdW5jdGlvbihvZmZzZXQsIGNvdW50KSB7CgkJdGhpcy5yZXBsYWNlRGF0YShvZmZzZXQsY291bnQsIiIpOwoJfSwKCXJlcGxhY2VEYXRhOiBmdW5jdGlvbihvZmZzZXQsIGNvdW50LCB0ZXh0KSB7CgkJdmFyIHN0YXJ0ID0gdGhpcy5kYXRhLnN1YnN0cmluZygwLG9mZnNldCk7CgkJdmFyIGVuZCA9IHRoaXMuZGF0YS5zdWJzdHJpbmcob2Zmc2V0K2NvdW50KTsKCQl0ZXh0ID0gc3RhcnQgKyB0ZXh0ICsgZW5kOwoJCXRoaXMubm9kZVZhbHVlID0gdGhpcy5kYXRhID0gdGV4dDsKCQl0aGlzLmxlbmd0aCA9IHRleHQubGVuZ3RoOwoJfQp9Cl9leHRlbmRzKENoYXJhY3RlckRhdGEsTm9kZSk7CmZ1bmN0aW9uIFRleHQoKSB7Cn07ClRleHQucHJvdG90eXBlID0gewoJbm9kZU5hbWUgOiAiI3RleHQiLAoJbm9kZVR5cGUgOiBURVhUX05PREUsCglzcGxpdFRleHQgOiBmdW5jdGlvbihvZmZzZXQpIHsKCQl2YXIgdGV4dCA9IHRoaXMuZGF0YTsKCQl2YXIgbmV3VGV4dCA9IHRleHQuc3Vic3RyaW5nKG9mZnNldCk7CgkJdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG9mZnNldCk7CgkJdGhpcy5kYXRhID0gdGhpcy5ub2RlVmFsdWUgPSB0ZXh0OwoJCXRoaXMubGVuZ3RoID0gdGV4dC5sZW5ndGg7CgkJdmFyIG5ld05vZGUgPSB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3VGV4dCk7CgkJaWYodGhpcy5wYXJlbnROb2RlKXsKCQkJdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCB0aGlzLm5leHRTaWJsaW5nKTsKCQl9CgkJcmV0dXJuIG5ld05vZGU7Cgl9Cn0KX2V4dGVuZHMoVGV4dCxDaGFyYWN0ZXJEYXRhKTsKZnVuY3Rpb24gQ29tbWVudCgpIHsKfTsKQ29tbWVudC5wcm90b3R5cGUgPSB7Cglub2RlTmFtZSA6ICIjY29tbWVudCIsCglub2RlVHlwZSA6IENPTU1FTlRfTk9ERQp9Cl9leHRlbmRzKENvbW1lbnQsQ2hhcmFjdGVyRGF0YSk7CgpmdW5jdGlvbiBDREFUQVNlY3Rpb24oKSB7Cn07CkNEQVRBU2VjdGlvbi5wcm90b3R5cGUgPSB7Cglub2RlTmFtZSA6ICIjY2RhdGEtc2VjdGlvbiIsCglub2RlVHlwZSA6IENEQVRBX1NFQ1RJT05fTk9ERQp9Cl9leHRlbmRzKENEQVRBU2VjdGlvbixDaGFyYWN0ZXJEYXRhKTsKCgpmdW5jdGlvbiBEb2N1bWVudFR5cGUoKSB7Cn0KRG9jdW1lbnRUeXBlLnByb3RvdHlwZS5ub2RlVHlwZSA9IERPQ1VNRU5UX1RZUEVfTk9ERTsKX2V4dGVuZHMoRG9jdW1lbnRUeXBlLE5vZGUpOwoKZnVuY3Rpb24gTm90YXRpb24oKSB7Cn0KTm90YXRpb24ucHJvdG90eXBlLm5vZGVUeXBlID0gTk9UQVRJT05fTk9ERTsKX2V4dGVuZHMoTm90YXRpb24sTm9kZSk7CgpmdW5jdGlvbiBFbnRpdHkoKSB7Cn0KRW50aXR5LnByb3RvdHlwZS5ub2RlVHlwZSA9IEVOVElUWV9OT0RFOwpfZXh0ZW5kcyhFbnRpdHksTm9kZSk7CgpmdW5jdGlvbiBFbnRpdHlSZWZlcmVuY2UoKSB7Cn0KRW50aXR5UmVmZXJlbmNlLnByb3RvdHlwZS5ub2RlVHlwZSA9IEVOVElUWV9SRUZFUkVOQ0VfTk9ERTsKX2V4dGVuZHMoRW50aXR5UmVmZXJlbmNlLE5vZGUpOwoKZnVuY3Rpb24gRG9jdW1lbnRGcmFnbWVudCgpIHsKfQpEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5ub2RlTmFtZSA9CSIjZG9jdW1lbnQtZnJhZ21lbnQiOwpEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5ub2RlVHlwZSA9CURPQ1VNRU5UX0ZSQUdNRU5UX05PREU7Cl9leHRlbmRzKERvY3VtZW50RnJhZ21lbnQsTm9kZSk7CgoKZnVuY3Rpb24gUHJvY2Vzc2luZ0luc3RydWN0aW9uKCkgewp9ClByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUubm9kZVR5cGUgPSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7Cl9leHRlbmRzKFByb2Nlc3NpbmdJbnN0cnVjdGlvbixOb2RlKTsKZnVuY3Rpb24gWE1MU2VyaWFsaXplcigpe30KWE1MU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG9TdHJpbmcgPSBmdW5jdGlvbihub2RlKXsKCXZhciBidWYgPSBbXTsKCXNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUsYnVmKTsKCXJldHVybiBidWYuam9pbignJyk7Cn0KTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPWZ1bmN0aW9uKCl7CglyZXR1cm4gWE1MU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG9TdHJpbmcodGhpcyk7Cn0KZnVuY3Rpb24gc2VyaWFsaXplVG9TdHJpbmcobm9kZSxidWYpewoJc3dpdGNoKG5vZGUubm9kZVR5cGUpewoJY2FzZSBFTEVNRU5UX05PREU6CgkJdmFyIGF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzOwoJCXZhciBsZW4gPSBhdHRycy5sZW5ndGg7CgkJdmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkOwoJCXZhciBub2RlTmFtZSA9IG5vZGUudGFnTmFtZTsKCQl2YXIgaXNIVE1MID0gaHRtbG5zID09PSBub2RlLm5hbWVzcGFjZVVSSTsKCQlidWYucHVzaCgnPCcsbm9kZU5hbWUpOwoJCWZvcih2YXIgaT0wO2k8bGVuO2krKyl7CgkJCXNlcmlhbGl6ZVRvU3RyaW5nKGF0dHJzLml0ZW0oaSksYnVmKTsKCQl9CgkJaWYoY2hpbGQgfHwgaXNIVE1MICYmICEvXig/Om1ldGF8bGlua3xpbWd8YnJ8aHJ8aW5wdXR8YnV0dG9uKSQvaS50ZXN0KG5vZGVOYW1lKSl7CgkJCWJ1Zi5wdXNoKCc+Jyk7CgkJCWlmKGlzSFRNTCAmJiAvXnNjcmlwdCQvaS50ZXN0KG5vZGVOYW1lKSl7CgkJCQlpZihjaGlsZCl7CgkJCQkJYnVmLnB1c2goY2hpbGQuZGF0YSk7CgkJCQl9CgkJCX1lbHNlewoJCQkJd2hpbGUoY2hpbGQpewoJCQkJCXNlcmlhbGl6ZVRvU3RyaW5nKGNoaWxkLGJ1Zik7CgkJCQkJY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsKCQkJCX0KCQkJfQoJCQlidWYucHVzaCgnPC8nLG5vZGVOYW1lLCc+Jyk7CgkJfWVsc2V7CgkJCWJ1Zi5wdXNoKCcvPicpOwoJCX0KCQlyZXR1cm47CgljYXNlIERPQ1VNRU5UX05PREU6CgljYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6CgkJdmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkOwoJCXdoaWxlKGNoaWxkKXsKCQkJc2VyaWFsaXplVG9TdHJpbmcoY2hpbGQsYnVmKTsKCQkJY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsKCQl9CgkJcmV0dXJuOwoJY2FzZSBBVFRSSUJVVEVfTk9ERToKCQlyZXR1cm4gYnVmLnB1c2goJyAnLG5vZGUubmFtZSwnPSInLG5vZGUudmFsdWUucmVwbGFjZSgvWzwmIl0vZyxfeG1sRW5jb2RlciksJyInKTsKCWNhc2UgVEVYVF9OT0RFOgoJCXJldHVybiBidWYucHVzaChub2RlLmRhdGEucmVwbGFjZSgvWzwmXS9nLF94bWxFbmNvZGVyKSk7CgljYXNlIENEQVRBX1NFQ1RJT05fTk9ERToKCQlyZXR1cm4gYnVmLnB1c2goICc8IVtDREFUQVsnLG5vZGUuZGF0YSwnXV0+Jyk7CgljYXNlIENPTU1FTlRfTk9ERToKCQlyZXR1cm4gYnVmLnB1c2goICI8IS0tIixub2RlLmRhdGEsIi0tPiIpOwoJY2FzZSBET0NVTUVOVF9UWVBFX05PREU6CgkJdmFyIHB1YmlkID0gbm9kZS5wdWJsaWNJZDsKCQl2YXIgc3lzaWQgPSBub2RlLnN5c3RlbUlkOwoJCWJ1Zi5wdXNoKCc8IURPQ1RZUEUgJyxub2RlLm5hbWUpOwoJCWlmKHB1YmlkKXsKCQkJYnVmLnB1c2goJyBQVUJMSUMgIicscHViaWQpOwoJCQlpZiAoc3lzaWQgJiYgc3lzaWQhPScuJykgewoJCQkJYnVmLnB1c2goICciICInLHN5c2lkKTsKCQkJfQoJCQlidWYucHVzaCgnIj4nKTsKCQl9ZWxzZSBpZihzeXNpZCAmJiBzeXNpZCE9Jy4nKXsKCQkJYnVmLnB1c2goJyBTWVNURU0gIicsc3lzaWQsJyI+Jyk7CgkJfWVsc2V7CgkJCXZhciBzdWIgPSBub2RlLmludGVybmFsU3Vic2V0OwoJCQlpZihzdWIpewoJCQkJYnVmLnB1c2goIiBbIixzdWIsIl0iKTsKCQkJfQoJCQlidWYucHVzaCgiPiIpOwoJCX0KCQlyZXR1cm47CgljYXNlIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKCQlyZXR1cm4gYnVmLnB1c2goICI8PyIsbm9kZS50YXJnZXQsIiAiLG5vZGUuZGF0YSwiPz4iKTsKCWNhc2UgRU5USVRZX1JFRkVSRU5DRV9OT0RFOgoJCXJldHVybiBidWYucHVzaCggJyYnLG5vZGUubm9kZU5hbWUsJzsnKTsKCWRlZmF1bHQ6CgkJYnVmLnB1c2goJz8/Jyxub2RlLm5vZGVOYW1lKTsKCX0KfQpmdW5jdGlvbiBpbXBvcnROb2RlKGRvYyxub2RlLGRlZXApewoJdmFyIG5vZGUyOwoJc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7CgljYXNlIEVMRU1FTlRfTk9ERToKCQlub2RlMiA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKTsKCQlub2RlMi5vd25lckRvY3VtZW50ID0gZG9jOwoJY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgoJCWJyZWFrOwoJY2FzZSBBVFRSSUJVVEVfTk9ERToKCQlkZWVwID0gdHJ1ZTsKCQlicmVhazsKCX0KCWlmKCFub2RlMil7CgkJbm9kZTIgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7Ly9mYWxzZQoJfQoJbm9kZTIub3duZXJEb2N1bWVudCA9IGRvYzsKCW5vZGUyLnBhcmVudE5vZGUgPSBudWxsOwoJaWYoZGVlcCl7CgkJdmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkOwoJCXdoaWxlKGNoaWxkKXsKCQkJbm9kZTIuYXBwZW5kQ2hpbGQoaW1wb3J0Tm9kZShkb2MsY2hpbGQsZGVlcCkpOwoJCQljaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOwoJCX0KCX0KCXJldHVybiBub2RlMjsKfQpmdW5jdGlvbiBjbG9uZU5vZGUoZG9jLG5vZGUsZGVlcCl7Cgl2YXIgbm9kZTIgPSBuZXcgbm9kZS5jb25zdHJ1Y3RvcigpOwoJZm9yKHZhciBuIGluIG5vZGUpewoJCXZhciB2ID0gbm9kZVtuXTsKCQlpZih0eXBlb2YgdiAhPSAnb2JqZWN0JyApewoJCQlpZih2ICE9IG5vZGUyW25dKXsKCQkJCW5vZGUyW25dID0gdjsKCQkJfQoJCX0KCX0KCWlmKG5vZGUuY2hpbGROb2Rlcyl7CgkJbm9kZTIuY2hpbGROb2RlcyA9IG5ldyBOb2RlTGlzdCgpOwoJfQoJbm9kZTIub3duZXJEb2N1bWVudCA9IGRvYzsKCXN3aXRjaCAobm9kZTIubm9kZVR5cGUpIHsKCWNhc2UgRUxFTUVOVF9OT0RFOgoJCXZhciBhdHRycwk9IG5vZGUuYXR0cmlidXRlczsKCQl2YXIgYXR0cnMyCT0gbm9kZTIuYXR0cmlidXRlcyA9IG5ldyBOYW1lZE5vZGVNYXAoKTsKCQl2YXIgbGVuID0gYXR0cnMubGVuZ3RoOwoJCWF0dHJzMi5fb3duZXJFbGVtZW50ID0gbm9kZTI7CgkJZm9yKHZhciBpPTA7aTxsZW47aSsrKXsKCQkJbm9kZTIuc2V0QXR0cmlidXRlTm9kZShjbG9uZU5vZGUoZG9jLGF0dHJzLml0ZW0oaSksdHJ1ZSkpOwoJCX0KCQlicmVhazsKCWNhc2UgQVRUUklCVVRFX05PREU6CgkJZGVlcCA9IHRydWU7Cgl9CglpZihkZWVwKXsKCQl2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7CgkJd2hpbGUoY2hpbGQpewoJCQlub2RlMi5hcHBlbmRDaGlsZChjbG9uZU5vZGUoZG9jLGNoaWxkLGRlZXApKTsKCQkJY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsKCQl9Cgl9CglyZXR1cm4gbm9kZTI7Cn0KCmZ1bmN0aW9uIF9fc2V0X18ob2JqZWN0LGtleSx2YWx1ZSl7CglvYmplY3Rba2V5XSA9IHZhbHVlOwp9CmZ1bmN0aW9uIGdldFRleHRDb250ZW50KG5vZGUpewoJc3dpdGNoKG5vZGUubm9kZVR5cGUpewoJY2FzZSAxOgoJY2FzZSAxMToKCQl2YXIgYnVmID0gW107CgkJbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDsKCQl3aGlsZShub2RlKXsKCQkJaWYobm9kZS5ub2RlVHlwZSE9PTcgJiYgbm9kZS5ub2RlVHlwZSAhPT04KXsKCQkJCWJ1Zi5wdXNoKGdldFRleHRDb250ZW50KG5vZGUpKTsKCQkJfQoJCQlub2RlID0gbm9kZS5uZXh0U2libGluZzsKCQl9CgkJcmV0dXJuIGJ1Zi5qb2luKCcnKTsKCWRlZmF1bHQ6CgkJcmV0dXJuIG5vZGUubm9kZVZhbHVlOwoJfQp9CnRyeXsKCWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl7CgkJT2JqZWN0LmRlZmluZVByb3BlcnR5KExpdmVOb2RlTGlzdC5wcm90b3R5cGUsJ2xlbmd0aCcsewoJCQlnZXQ6ZnVuY3Rpb24oKXsKCQkJCV91cGRhdGVMaXZlTGlzdCh0aGlzKTsKCQkJCXJldHVybiB0aGlzLiQkbGVuZ3RoOwoJCQl9CgkJfSk7CgkJT2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCd0ZXh0Q29udGVudCcsewoJCQlnZXQ6ZnVuY3Rpb24oKXsKCQkJCXJldHVybiBnZXRUZXh0Q29udGVudCh0aGlzKTsKCQkJfSwKCQkJc2V0OmZ1bmN0aW9uKGRhdGEpewoJCQkJc3dpdGNoKHRoaXMubm9kZVR5cGUpewoJCQkJY2FzZSAxOgoJCQkJY2FzZSAxMToKCQkJCQl3aGlsZSh0aGlzLmZpcnN0Q2hpbGQpewoJCQkJCQl0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCk7CgkJCQkJfQoJCQkJCWlmKGRhdGEgfHwgU3RyaW5nKGRhdGEpKXsKCQkJCQkJdGhpcy5hcHBlbmRDaGlsZCh0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGF0YSkpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJdGhpcy5kYXRhID0gZGF0YTsKCQkJCQl0aGlzLnZhbHVlID0gdmFsdWU7CgkJCQkJdGhpcy5ub2RlVmFsdWUgPSBkYXRhOwoJCQkJfQoJCQl9CgkJfSk7CgoJCV9fc2V0X18gPSBmdW5jdGlvbihvYmplY3Qsa2V5LHZhbHVlKXsKCQkJb2JqZWN0WyckJCcra2V5XSA9IHZhbHVlOwoJCX07Cgl9Cn1jYXRjaChlKXsvL2llOAp9CgpyZXR1cm4gRE9NSW1wbGVtZW50YXRpb247Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS94bWwvZG9tLXBhcnNlciIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoJJ3VzZSBzdHJpY3QnOwoKCXZhciBYTUxSZWFkZXIgPSByZXF1aXJlKCcuL3NheCcpLAoJCURPTUltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9kb20nKTsKCmZ1bmN0aW9uIERPTVBhcnNlcihvcHRpb25zKXsKCXRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHx7bG9jYXRvcjp7fX07CgkKfQpET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uKHNvdXJjZSxtaW1lVHlwZSl7CQoJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7Cgl2YXIgc2F4ID0gIG5ldyBYTUxSZWFkZXIoKTsKCXZhciBkb21CdWlsZGVyID0gb3B0aW9ucy5kb21CdWlsZGVyIHx8IG5ldyBET01IYW5kbGVyKCk7Ly9jb250ZW50SGFuZGxlciBhbmQgTGV4aWNhbEhhbmRsZXIKCXZhciBlcnJvckhhbmRsZXIgPSBvcHRpb25zLmVycm9ySGFuZGxlcjsKCXZhciBsb2NhdG9yID0gb3B0aW9ucy5sb2NhdG9yOwoJdmFyIGRlZmF1bHROU01hcCA9IG9wdGlvbnMueG1sbnN8fHt9OwoJdmFyIGVudGl0eU1hcCA9IHsnbHQnOic8JywnZ3QnOic+JywnYW1wJzonJicsJ3F1b3QnOiciJywnYXBvcyc6IicifQoJaWYobG9jYXRvcil7CgkJZG9tQnVpbGRlci5zZXREb2N1bWVudExvY2F0b3IobG9jYXRvcikKCX0KCQoJc2F4LmVycm9ySGFuZGxlciA9IGJ1aWxkRXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlcixkb21CdWlsZGVyLGxvY2F0b3IpOwoJc2F4LmRvbUJ1aWxkZXIgPSBvcHRpb25zLmRvbUJ1aWxkZXIgfHwgZG9tQnVpbGRlcjsKCWlmKC9cL3g/aHRtbD8kLy50ZXN0KG1pbWVUeXBlKSl7CgkJZW50aXR5TWFwLm5ic3AgPSAnXHhhMCc7CgkJZW50aXR5TWFwLmNvcHkgPSAnXHhhOSc7CgkJZGVmYXVsdE5TTWFwWycnXT0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnOwoJfQoJaWYoc291cmNlKXsKCQlzYXgucGFyc2Uoc291cmNlLGRlZmF1bHROU01hcCxlbnRpdHlNYXApOwoJfWVsc2V7CgkJc2F4LmVycm9ySGFuZGxlci5lcnJvcigiaW52YWxpZCBkb2N1bWVudCBzb3VyY2UiKTsKCX0KCXJldHVybiBkb21CdWlsZGVyLmRvY3VtZW50Owp9CmZ1bmN0aW9uIGJ1aWxkRXJyb3JIYW5kbGVyKGVycm9ySW1wbCxkb21CdWlsZGVyLGxvY2F0b3IpewoJaWYoIWVycm9ySW1wbCl7CgkJaWYoZG9tQnVpbGRlciBpbnN0YW5jZW9mIERPTUhhbmRsZXIpewoJCQlyZXR1cm4gZG9tQnVpbGRlcjsKCQl9CgkJZXJyb3JJbXBsID0gZG9tQnVpbGRlciA7Cgl9Cgl2YXIgZXJyb3JIYW5kbGVyID0ge30KCXZhciBpc0NhbGxiYWNrID0gZXJyb3JJbXBsIGluc3RhbmNlb2YgRnVuY3Rpb247Cglsb2NhdG9yID0gbG9jYXRvcnx8e30KCWZ1bmN0aW9uIGJ1aWxkKGtleSl7CgkJdmFyIGZuID0gZXJyb3JJbXBsW2tleV07CgkJaWYoIWZuKXsKCQkJaWYoaXNDYWxsYmFjayl7CgkJCQlmbiA9IGVycm9ySW1wbC5sZW5ndGggPT0gMj9mdW5jdGlvbihtc2cpe2Vycm9ySW1wbChrZXksbXNnKX06ZXJyb3JJbXBsOwoJCQl9ZWxzZXsKCQkJCXZhciBpPWFyZ3VtZW50cy5sZW5ndGg7CgkJCQl3aGlsZSgtLWkpewoJCQkJCWlmKGZuID0gZXJyb3JJbXBsW2FyZ3VtZW50c1tpXV0pewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJZXJyb3JIYW5kbGVyW2tleV0gPSBmbiAmJiBmdW5jdGlvbihtc2cpewoJCQlmbihtc2crX2xvY2F0b3IobG9jYXRvciksIG1zZywgbG9jYXRvcik7CgkJfXx8ZnVuY3Rpb24oKXt9OwoJfQoJYnVpbGQoJ3dhcm5pbmcnLCd3YXJuJyk7CglidWlsZCgnZXJyb3InLCd3YXJuJywnd2FybmluZycpOwoJYnVpbGQoJ2ZhdGFsRXJyb3InLCd3YXJuJywnd2FybmluZycsJ2Vycm9yJyk7CglyZXR1cm4gZXJyb3JIYW5kbGVyOwp9CmZ1bmN0aW9uIERPTUhhbmRsZXIoKSB7CiAgICB0aGlzLmNkYXRhID0gZmFsc2U7Cn0KZnVuY3Rpb24gcG9zaXRpb24obG9jYXRvcixub2RlKXsKCW5vZGUubGluZU51bWJlciA9IGxvY2F0b3IubGluZU51bWJlcjsKCW5vZGUuY29sdW1uTnVtYmVyID0gbG9jYXRvci5jb2x1bW5OdW1iZXI7Cn0gCkRPTUhhbmRsZXIucHJvdG90eXBlID0gewoJc3RhcnREb2N1bWVudCA6IGZ1bmN0aW9uKCkgewogICAgCXRoaXMuZG9jdW1lbnQgPSBuZXcgRE9NSW1wbGVtZW50YXRpb24oKS5jcmVhdGVEb2N1bWVudChudWxsLCBudWxsLCBudWxsKTsKICAgIAlpZiAodGhpcy5sb2NhdG9yKSB7CiAgICAgICAgCXRoaXMuZG9jdW1lbnQuZG9jdW1lbnRVUkkgPSB0aGlzLmxvY2F0b3Iuc3lzdGVtSWQ7CiAgICAJfQoJfSwKCXN0YXJ0RWxlbWVudDpmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgcU5hbWUsIGF0dHJzKSB7CgkJdmFyIGRvYyA9IHRoaXMuZG9jdW1lbnQ7CgkgICAgdmFyIGVsID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHFOYW1lfHxsb2NhbE5hbWUpOwoJICAgIHZhciBsZW4gPSBhdHRycy5sZW5ndGg7CgkgICAgYXBwZW5kRWxlbWVudCh0aGlzLCBlbCk7CgkgICAgdGhpcy5jdXJyZW50RWxlbWVudCA9IGVsOwoJICAgIAoJCXRoaXMubG9jYXRvciAmJiBwb3NpdGlvbih0aGlzLmxvY2F0b3IsZWwpCgkgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbGVuOyBpKyspIHsKCSAgICAgICAgdmFyIG5hbWVzcGFjZVVSSSA9IGF0dHJzLmdldFVSSShpKTsKCSAgICAgICAgdmFyIHZhbHVlID0gYXR0cnMuZ2V0VmFsdWUoaSk7CgkgICAgICAgIHZhciBxTmFtZSA9IGF0dHJzLmdldFFOYW1lKGkpOwoJCQl2YXIgYXR0ciA9IGRvYy5jcmVhdGVBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIHFOYW1lKTsKCQkJaWYoIGF0dHIuZ2V0T2Zmc2V0KXsKCQkJCXBvc2l0aW9uKGF0dHIuZ2V0T2Zmc2V0KDEpLGF0dHIpCgkJCX0KCQkJYXR0ci52YWx1ZSA9IGF0dHIubm9kZVZhbHVlID0gdmFsdWU7CgkJCWVsLnNldEF0dHJpYnV0ZU5vZGUoYXR0cikKCSAgICB9Cgl9LAoJZW5kRWxlbWVudDpmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgcU5hbWUpIHsKCQl2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudEVsZW1lbnQKCSAgICB2YXIgdGFnTmFtZSA9IGN1cnJlbnQudGFnTmFtZTsKCSAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gY3VycmVudC5wYXJlbnROb2RlOwoJfSwKCXN0YXJ0UHJlZml4TWFwcGluZzpmdW5jdGlvbihwcmVmaXgsIHVyaSkgewoJfSwKCWVuZFByZWZpeE1hcHBpbmc6ZnVuY3Rpb24ocHJlZml4KSB7Cgl9LAoJcHJvY2Vzc2luZ0luc3RydWN0aW9uOmZ1bmN0aW9uKHRhcmdldCwgZGF0YSkgewoJICAgIHZhciBpbnMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIGRhdGEpOwoJICAgIHRoaXMubG9jYXRvciAmJiBwb3NpdGlvbih0aGlzLmxvY2F0b3IsaW5zKQoJICAgIGFwcGVuZEVsZW1lbnQodGhpcywgaW5zKTsKCX0sCglpZ25vcmFibGVXaGl0ZXNwYWNlOmZ1bmN0aW9uKGNoLCBzdGFydCwgbGVuZ3RoKSB7Cgl9LAoJY2hhcmFjdGVyczpmdW5jdGlvbihjaGFycywgc3RhcnQsIGxlbmd0aCkgewoJCWNoYXJzID0gX3RvU3RyaW5nLmFwcGx5KHRoaXMsYXJndW1lbnRzKQoJCWlmKHRoaXMuY3VycmVudEVsZW1lbnQgJiYgY2hhcnMpewoJCQlpZiAodGhpcy5jZGF0YSkgewoJCQkJdmFyIGNoYXJOb2RlID0gdGhpcy5kb2N1bWVudC5jcmVhdGVDREFUQVNlY3Rpb24oY2hhcnMpOwoJCQkJdGhpcy5jdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjaGFyTm9kZSk7CgkJCX0gZWxzZSB7CgkJCQl2YXIgY2hhck5vZGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoYXJzKTsKCQkJCXRoaXMuY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2hhck5vZGUpOwoJCQl9CgkJCXRoaXMubG9jYXRvciAmJiBwb3NpdGlvbih0aGlzLmxvY2F0b3IsY2hhck5vZGUpCgkJfQoJfSwKCXNraXBwZWRFbnRpdHk6ZnVuY3Rpb24obmFtZSkgewoJfSwKCWVuZERvY3VtZW50OmZ1bmN0aW9uKCkgewoJCXRoaXMuZG9jdW1lbnQubm9ybWFsaXplKCk7Cgl9LAoJc2V0RG9jdW1lbnRMb2NhdG9yOmZ1bmN0aW9uIChsb2NhdG9yKSB7CgkgICAgaWYodGhpcy5sb2NhdG9yID0gbG9jYXRvcil7Ly8gJiYgISgnbGluZU51bWJlcicgaW4gbG9jYXRvcikpewoJICAgIAlsb2NhdG9yLmxpbmVOdW1iZXIgPSAwOwoJICAgIH0KCX0sCgljb21tZW50OmZ1bmN0aW9uKGNoYXJzLCBzdGFydCwgbGVuZ3RoKSB7CgkJY2hhcnMgPSBfdG9TdHJpbmcuYXBwbHkodGhpcyxhcmd1bWVudHMpCgkgICAgdmFyIGNvbW0gPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoY2hhcnMpOwoJICAgIHRoaXMubG9jYXRvciAmJiBwb3NpdGlvbih0aGlzLmxvY2F0b3IsY29tbSkKCSAgICBhcHBlbmRFbGVtZW50KHRoaXMsIGNvbW0pOwoJfSwKCQoJc3RhcnRDREFUQTpmdW5jdGlvbigpIHsKCSAgICB0aGlzLmNkYXRhID0gdHJ1ZTsKCX0sCgllbmRDREFUQTpmdW5jdGlvbigpIHsKCSAgICB0aGlzLmNkYXRhID0gZmFsc2U7Cgl9LAoJCglzdGFydERURDpmdW5jdGlvbihuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHsKCQl2YXIgaW1wbCA9IHRoaXMuZG9jdW1lbnQuaW1wbGVtZW50YXRpb247CgkgICAgaWYgKGltcGwgJiYgaW1wbC5jcmVhdGVEb2N1bWVudFR5cGUpIHsKCSAgICAgICAgdmFyIGR0ID0gaW1wbC5jcmVhdGVEb2N1bWVudFR5cGUobmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKTsKCSAgICAgICAgdGhpcy5sb2NhdG9yICYmIHBvc2l0aW9uKHRoaXMubG9jYXRvcixkdCkKCSAgICAgICAgYXBwZW5kRWxlbWVudCh0aGlzLCBkdCk7CgkgICAgfQoJfSwKCXdhcm5pbmc6ZnVuY3Rpb24oZXJyb3IpIHsKCQljb25zb2xlLndhcm4oZXJyb3IsX2xvY2F0b3IodGhpcy5sb2NhdG9yKSk7Cgl9LAoJZXJyb3I6ZnVuY3Rpb24oZXJyb3IpIHsKCQljb25zb2xlLmVycm9yKGVycm9yLF9sb2NhdG9yKHRoaXMubG9jYXRvcikpOwoJfSwKCWZhdGFsRXJyb3I6ZnVuY3Rpb24oZXJyb3IpIHsKCQljb25zb2xlLmVycm9yKGVycm9yLF9sb2NhdG9yKHRoaXMubG9jYXRvcikpOwoJICAgIHRocm93IGVycm9yOwoJfQp9CmZ1bmN0aW9uIF9sb2NhdG9yKGwpewoJaWYobCl7CgkJcmV0dXJuICdcbkAnKyhsLnN5c3RlbUlkIHx8JycpKycjW2xpbmU6JytsLmxpbmVOdW1iZXIrJyxjb2w6JytsLmNvbHVtbk51bWJlcisnXScKCX0KfQpmdW5jdGlvbiBfdG9TdHJpbmcoY2hhcnMsc3RhcnQsbGVuZ3RoKXsKCWlmKHR5cGVvZiBjaGFycyA9PSAnc3RyaW5nJyl7CgkJcmV0dXJuIGNoYXJzLnN1YnN0cihzdGFydCxsZW5ndGgpCgl9ZWxzZXsvL2phdmEgc2F4IGNvbm5lY3Qgd2lkdGggeG1sZG9tIG9uIHJoaW5vKHdoYXQgYWJvdXQ6ICI/ICYmICEoY2hhcnMgaW5zdGFuY2VvZiBTdHJpbmcpIikKCQlpZihjaGFycy5sZW5ndGggPj0gc3RhcnQrbGVuZ3RoIHx8IHN0YXJ0KXsKCQkJcmV0dXJuIG5ldyBqYXZhLmxhbmcuU3RyaW5nKGNoYXJzLHN0YXJ0LGxlbmd0aCkrJyc7CgkJfQoJCXJldHVybiBjaGFyczsKCX0KfQoiZW5kRFRELHN0YXJ0RW50aXR5LGVuZEVudGl0eSxhdHRyaWJ1dGVEZWNsLGVsZW1lbnREZWNsLGV4dGVybmFsRW50aXR5RGVjbCxpbnRlcm5hbEVudGl0eURlY2wscmVzb2x2ZUVudGl0eSxnZXRFeHRlcm5hbFN1YnNldCxub3RhdGlvbkRlY2wsdW5wYXJzZWRFbnRpdHlEZWNsIi5yZXBsYWNlKC9cdysvZyxmdW5jdGlvbihrZXkpewoJRE9NSGFuZGxlci5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9Cn0pCmZ1bmN0aW9uIGFwcGVuZEVsZW1lbnQgKGhhbmRlcixub2RlKSB7CiAgICBpZiAoIWhhbmRlci5jdXJyZW50RWxlbWVudCkgewogICAgICAgIGhhbmRlci5kb2N1bWVudC5hcHBlbmRDaGlsZChub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGVyLmN1cnJlbnRFbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpOwogICAgfQp9Ly9hcHBlbmRDaGlsZCBhbmQgc2V0QXR0cmlidXRlTlMgYXJlIHByZWZvcm1hbmNlIGtleQoKcmV0dXJuIHsKCQlET01QYXJzZXI6IERPTVBhcnNlcgoJIH07Cn0pOwoKZGVmaW5lKCJhY2UvbW9kZS94bWxfd29ya2VyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKdmFyIE1pcnJvciA9IHJlcXVpcmUoIi4uL3dvcmtlci9taXJyb3IiKS5NaXJyb3I7CnZhciBET01QYXJzZXIgPSByZXF1aXJlKCIuL3htbC9kb20tcGFyc2VyIikuRE9NUGFyc2VyOwoKdmFyIFdvcmtlciA9IGV4cG9ydHMuV29ya2VyID0gZnVuY3Rpb24oc2VuZGVyKSB7CiAgICBNaXJyb3IuY2FsbCh0aGlzLCBzZW5kZXIpOwogICAgdGhpcy5zZXRUaW1lb3V0KDQwMCk7CiAgICB0aGlzLmNvbnRleHQgPSBudWxsOwp9OwoKb29wLmluaGVyaXRzKFdvcmtlciwgTWlycm9yKTsKCihmdW5jdGlvbigpIHsKCiAgICB0aGlzLnNldE9wdGlvbnMgPSBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdGhpcy5jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0OwogICAgfTsKCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKICAgICAgICB2YXIgZXJyb3JzID0gW107CiAgICAgICAgcGFyc2VyLm9wdGlvbnMuZXJyb3JIYW5kbGVyID0gewogICAgICAgICAgICBmYXRhbEVycm9yOiBmdW5jdGlvbihmdWxsTXNnLCBlcnJvck1zZywgbG9jYXRvcikgewogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgICAgIHJvdzogbG9jYXRvci5saW5lTnVtYmVyLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbG9jYXRvci5jb2x1bW5OdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgdGV4dDogZXJyb3JNc2csCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihmdWxsTXNnLCBlcnJvck1zZywgbG9jYXRvcikgewogICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goewogICAgICAgICAgICAgICAgICAgIHJvdzogbG9jYXRvci5saW5lTnVtYmVyLAogICAgICAgICAgICAgICAgICAgIGNvbHVtbjogbG9jYXRvci5jb2x1bW5OdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgdGV4dDogZXJyb3JNc2csCiAgICAgICAgICAgICAgICAgICAgdHlwZTogImVycm9yIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHdhcm5pbmc6IGZ1bmN0aW9uKGZ1bGxNc2csIGVycm9yTXNnLCBsb2NhdG9yKSB7CiAgICAgICAgICAgICAgICBlcnJvcnMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgcm93OiBsb2NhdG9yLmxpbmVOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBsb2NhdG9yLmNvbHVtbk51bWJlciwKICAgICAgICAgICAgICAgICAgICB0ZXh0OiBlcnJvck1zZywKICAgICAgICAgICAgICAgICAgICB0eXBlOiAid2FybmluZyIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICAKICAgICAgICBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHZhbHVlKTsKICAgICAgICB0aGlzLnNlbmRlci5lbWl0KCJlcnJvciIsIGVycm9ycyk7CiAgICB9OwoKfSkuY2FsbChXb3JrZXIucHJvdG90eXBlKTsKCn0pOwoKZGVmaW5lKCJhY2UvbGliL2VzNS1zaGltIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CgpmdW5jdGlvbiBFbXB0eSgpIHt9CgppZiAoIUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKSB7CiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uIGJpbmQodGhhdCkgeyAvLyAubGVuZ3RoIGlzIDEKICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpczsKICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIiArIHRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOyAvLyBmb3Igbm9ybWFsIGNhbGwKICAgICAgICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7CgogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KAogICAgICAgICAgICAgICAgICAgIHRoYXQsCiAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfTsKICAgICAgICBpZih0YXJnZXQucHJvdG90eXBlKSB7CiAgICAgICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7CiAgICAgICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpOwogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYm91bmQ7CiAgICB9Owp9CnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7CnZhciBwcm90b3R5cGVPZkFycmF5ID0gQXJyYXkucHJvdG90eXBlOwp2YXIgcHJvdG90eXBlT2ZPYmplY3QgPSBPYmplY3QucHJvdG90eXBlOwp2YXIgc2xpY2UgPSBwcm90b3R5cGVPZkFycmF5LnNsaWNlOwp2YXIgX3RvU3RyaW5nID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0LnRvU3RyaW5nKTsKdmFyIG93bnMgPSBjYWxsLmJpbmQocHJvdG90eXBlT2ZPYmplY3QuaGFzT3duUHJvcGVydHkpOwp2YXIgZGVmaW5lR2V0dGVyOwp2YXIgZGVmaW5lU2V0dGVyOwp2YXIgbG9va3VwR2V0dGVyOwp2YXIgbG9va3VwU2V0dGVyOwp2YXIgc3VwcG9ydHNBY2Nlc3NvcnM7CmlmICgoc3VwcG9ydHNBY2Nlc3NvcnMgPSBvd25zKHByb3RvdHlwZU9mT2JqZWN0LCAiX19kZWZpbmVHZXR0ZXJfXyIpKSkgewogICAgZGVmaW5lR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18pOwogICAgZGVmaW5lU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fZGVmaW5lU2V0dGVyX18pOwogICAgbG9va3VwR2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwR2V0dGVyX18pOwogICAgbG9va3VwU2V0dGVyID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Ll9fbG9va3VwU2V0dGVyX18pOwp9CmlmIChbMSwyXS5zcGxpY2UoMCkubGVuZ3RoICE9IDIpIHsKICAgIGlmKGZ1bmN0aW9uKCkgeyAvLyB0ZXN0IElFIDwgOSB0byBzcGxpY2UgYnVnIC0gc2VlIGlzc3VlICMxMzgKICAgICAgICBmdW5jdGlvbiBtYWtlQXJyYXkobCkgewogICAgICAgICAgICB2YXIgYSA9IG5ldyBBcnJheShsKzIpOwogICAgICAgICAgICBhWzBdID0gYVsxXSA9IDA7CiAgICAgICAgICAgIHJldHVybiBhOwogICAgICAgIH0KICAgICAgICB2YXIgYXJyYXkgPSBbXSwgbGVuZ3RoQmVmb3JlOwogICAgICAgIAogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDIwKSk7CiAgICAgICAgYXJyYXkuc3BsaWNlLmFwcGx5KGFycmF5LCBtYWtlQXJyYXkoMjYpKTsKCiAgICAgICAgbGVuZ3RoQmVmb3JlID0gYXJyYXkubGVuZ3RoOyAvLzQ2CiAgICAgICAgYXJyYXkuc3BsaWNlKDUsIDAsICJYWFgiKTsgLy8gYWRkIG9uZSBlbGVtZW50CgogICAgICAgIGxlbmd0aEJlZm9yZSArIDEgPT0gYXJyYXkubGVuZ3RoCgogICAgICAgIGlmIChsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsvLyBoYXMgcmlnaHQgc3BsaWNlIGltcGxlbWVudGF0aW9uIHdpdGhvdXQgYnVncwogICAgICAgIH0KICAgIH0oKSkgey8vSUUgNi83CiAgICAgICAgdmFyIGFycmF5X3NwbGljZSA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2U7CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHN0YXJ0LCBkZWxldGVDb3VudCkgewogICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBbXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBhcnJheV9zcGxpY2UuYXBwbHkodGhpcywgWwogICAgICAgICAgICAgICAgICAgIHN0YXJ0ID09PSB2b2lkIDAgPyAwIDogc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPT09IHZvaWQgMCA/ICh0aGlzLmxlbmd0aCAtIHN0YXJ0KSA6IGRlbGV0ZUNvdW50CiAgICAgICAgICAgICAgICBdLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cywgMikpKQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0gZWxzZSB7Ly9JRTgKICAgICAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlID0gZnVuY3Rpb24ocG9zLCByZW1vdmVDb3VudCl7CiAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKHBvcyA+IDApIHsKICAgICAgICAgICAgICAgIGlmIChwb3MgPiBsZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgcG9zID0gbGVuZ3RoOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PSB2b2lkIDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zIDwgMCkgewogICAgICAgICAgICAgICAgcG9zID0gTWF0aC5tYXgobGVuZ3RoICsgcG9zLCAwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCEocG9zK3JlbW92ZUNvdW50IDwgbGVuZ3RoKSkKICAgICAgICAgICAgICAgIHJlbW92ZUNvdW50ID0gbGVuZ3RoIC0gcG9zOwoKICAgICAgICAgICAgdmFyIHJlbW92ZWQgPSB0aGlzLnNsaWNlKHBvcywgcG9zK3JlbW92ZUNvdW50KTsKICAgICAgICAgICAgdmFyIGluc2VydCA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKTsKICAgICAgICAgICAgdmFyIGFkZCA9IGluc2VydC5sZW5ndGg7ICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChwb3MgPT09IGxlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKGFkZCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaC5hcHBseSh0aGlzLCBpbnNlcnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHJlbW92ZSA9IE1hdGgubWluKHJlbW92ZUNvdW50LCBsZW5ndGggLSBwb3MpOwogICAgICAgICAgICAgICAgdmFyIHRhaWxPbGRQb3MgPSBwb3MgKyByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbE5ld1BvcyA9IHRhaWxPbGRQb3MgKyBhZGQgLSByZW1vdmU7CiAgICAgICAgICAgICAgICB2YXIgdGFpbENvdW50ID0gbGVuZ3RoIC0gdGFpbE9sZFBvczsKICAgICAgICAgICAgICAgIHZhciBsZW5ndGhBZnRlclJlbW92ZSA9IGxlbmd0aCAtIHJlbW92ZTsKCiAgICAgICAgICAgICAgICBpZiAodGFpbE5ld1BvcyA8IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBBCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWlsTmV3UG9zID4gdGFpbE9sZFBvcykgeyAvLyBjYXNlIEIKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSB0YWlsQ291bnQ7IGktLTsgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbdGFpbE5ld1BvcytpXSA9IHRoaXNbdGFpbE9sZFBvcytpXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IC8vIGVsc2UsIGFkZCA9PSByZW1vdmUgKG5vdGhpbmcgdG8gZG8pCgogICAgICAgICAgICAgICAgaWYgKGFkZCAmJiBwb3MgPT09IGxlbmd0aEFmdGVyUmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZTsgLy8gdHJ1bmNhdGUgYXJyYXkKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGhBZnRlclJlbW92ZSArIGFkZDsgLy8gcmVzZXJ2ZXMgc3BhY2UKICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYWRkOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twb3MraV0gPSBpbnNlcnRbaV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZW1vdmVkOwogICAgICAgIH07CiAgICB9Cn0KaWYgKCFBcnJheS5pc0FycmF5KSB7CiAgICBBcnJheS5pc0FycmF5ID0gZnVuY3Rpb24gaXNBcnJheShvYmopIHsKICAgICAgICByZXR1cm4gX3RvU3RyaW5nKG9iaikgPT0gIltvYmplY3QgQXJyYXldIjsKICAgIH07Cn0KdmFyIGJveGVkU3RyaW5nID0gT2JqZWN0KCJhIiksCiAgICBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9ICJhIiB8fCAhKDAgaW4gYm94ZWRTdHJpbmcpOwoKaWYgKCFBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkgewogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdLAogICAgICAgICAgICBpID0gLTEsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsgLy8gVE9ETyBtZXNzYWdlCiAgICAgICAgfQoKICAgICAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5tYXApIHsKICAgIEFycmF5LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiBtYXAoZnVuIC8qLCB0aGlzcCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKQogICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmZpbHRlcikgewogICAgQXJyYXkucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIGZpbHRlcihmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBbXSwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZbaV07CiAgICAgICAgICAgICAgICBpZiAoZnVuLmNhbGwodGhpc3AsIHZhbHVlLCBpLCBvYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmV2ZXJ5KSB7CiAgICBBcnJheS5wcm90b3R5cGUuZXZlcnkgPSBmdW5jdGlvbiBldmVyeShmdW4gLyosIHRoaXNwICovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDAsCiAgICAgICAgICAgIHRoaXNwID0gYXJndW1lbnRzWzFdOwogICAgICAgIGlmIChfdG9TdHJpbmcoZnVuKSAhPSAiW29iamVjdCBGdW5jdGlvbl0iKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZnVuICsgIiBpcyBub3QgYSBmdW5jdGlvbiIpOwogICAgICAgIH0KCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmICFmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5zb21lKSB7CiAgICBBcnJheS5wcm90b3R5cGUuc29tZSA9IGZ1bmN0aW9uIHNvbWUoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2UpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbiByZWR1Y2UoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2krK107CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bi5jYWxsKHZvaWQgMCwgcmVzdWx0LCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCkgewogICAgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0ID0gZnVuY3Rpb24gcmVkdWNlUmlnaHQoZnVuIC8qLCBpbml0aWFsKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsZW5ndGggJiYgYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlc3VsdCwgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikgewogICAgICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGZbaS0tXTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgtLWkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicmVkdWNlUmlnaHQgb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZG8gewogICAgICAgICAgICBpZiAoaSBpbiB0aGlzKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKGktLSk7CgogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Owp9CmlmICghQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKFswLCAxXS5pbmRleE9mKDEsIDIpICE9IC0xKSkgewogICAgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovICkgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBpID0gdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogTWF0aC5tYXgoMCwgbGVuZ3RoICsgaSk7CiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmICYmIHNlbGZbaV0gPT09IHNvdWdodCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIC0xOwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiB8fCAoWzAsIDFdLmxhc3RJbmRleE9mKDAsIC0zKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNvdWdodCAvKiwgZnJvbUluZGV4ICovKSB7CiAgICAgICAgdmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwOwoKICAgICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIHZhciBpID0gbGVuZ3RoIC0gMTsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IE1hdGgubWluKGksIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTsKICAgICAgICB9CiAgICAgICAgaSA9IGkgPj0gMCA/IGkgOiBsZW5ndGggLSBNYXRoLmFicyhpKTsKICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzb3VnaHQgPT09IHNlbGZbaV0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0UHJvdG90eXBlT2YpIHsKICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZiA9IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3QuX19wcm90b19fIHx8ICgKICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yID8KICAgICAgICAgICAgb2JqZWN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSA6CiAgICAgICAgICAgIHByb3RvdHlwZU9mT2JqZWN0CiAgICAgICAgKTsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1QgPSAiT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciBjYWxsZWQgb24gYSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICJub24tb2JqZWN0OiAiOwogICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KSB7CiAgICAgICAgaWYgKCh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwgb2JqZWN0ID09PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9OT05fT0JKRUNUICsgb2JqZWN0KTsKICAgICAgICBpZiAoIW93bnMob2JqZWN0LCBwcm9wZXJ0eSkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgdmFyIGRlc2NyaXB0b3IsIGdldHRlciwgc2V0dGVyOwogICAgICAgIGRlc2NyaXB0b3IgPSAgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfTsKICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMpIHsKICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGVPZk9iamVjdDsKCiAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIHZhciBzZXR0ZXIgPSBsb29rdXBTZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSk7CiAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CgogICAgICAgICAgICBpZiAoZ2V0dGVyIHx8IHNldHRlcikgewogICAgICAgICAgICAgICAgaWYgKGdldHRlcikgZGVzY3JpcHRvci5nZXQgPSBnZXR0ZXI7CiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyKSBkZXNjcmlwdG9yLnNldCA9IHNldHRlcjsKICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlc2NyaXB0b3IudmFsdWUgPSBvYmplY3RbcHJvcGVydHldOwogICAgICAgIHJldHVybiBkZXNjcmlwdG9yOwogICAgfTsKfQppZiAoIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7CiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7CiAgICB9Owp9CmlmICghT2JqZWN0LmNyZWF0ZSkgewogICAgdmFyIGNyZWF0ZUVtcHR5OwogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuX19wcm90b19fID09PSBudWxsKSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7ICJfX3Byb3RvX18iOiBudWxsIH07CiAgICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgICAgY3JlYXRlRW1wdHkgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBlbXB0eSA9IHt9OwogICAgICAgICAgICBmb3IgKHZhciBpIGluIGVtcHR5KQogICAgICAgICAgICAgICAgZW1wdHlbaV0gPSBudWxsOwogICAgICAgICAgICBlbXB0eS5jb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIGVtcHR5Lmhhc093blByb3BlcnR5ID0KICAgICAgICAgICAgZW1wdHkucHJvcGVydHlJc0VudW1lcmFibGUgPQogICAgICAgICAgICBlbXB0eS5pc1Byb3RvdHlwZU9mID0KICAgICAgICAgICAgZW1wdHkudG9Mb2NhbGVTdHJpbmcgPQogICAgICAgICAgICBlbXB0eS50b1N0cmluZyA9CiAgICAgICAgICAgIGVtcHR5LnZhbHVlT2YgPQogICAgICAgICAgICBlbXB0eS5fX3Byb3RvX18gPSBudWxsOwogICAgICAgICAgICByZXR1cm4gZW1wdHk7CiAgICAgICAgfQogICAgfQoKICAgIE9iamVjdC5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgdmFyIG9iamVjdDsKICAgICAgICBpZiAocHJvdG90eXBlID09PSBudWxsKSB7CiAgICAgICAgICAgIG9iamVjdCA9IGNyZWF0ZUVtcHR5KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgIT0gIm9iamVjdCIpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ0eXBlb2YgcHJvdG90eXBlWyIrKHR5cGVvZiBwcm90b3R5cGUpKyJdICE9ICdvYmplY3QnIik7CiAgICAgICAgICAgIHZhciBUeXBlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICAgIFR5cGUucHJvdG90eXBlID0gcHJvdG90eXBlOwogICAgICAgICAgICBvYmplY3QgPSBuZXcgVHlwZSgpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwogICAgICAgIH0KICAgICAgICBpZiAocHJvcGVydGllcyAhPT0gdm9pZCAwKQogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpOwogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CgpmdW5jdGlvbiBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKG9iamVjdCkgewogICAgdHJ5IHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAic2VudGluZWwiLCB7fSk7CiAgICAgICAgcmV0dXJuICJzZW50aW5lbCIgaW4gb2JqZWN0OwogICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICB9Cn0KaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgewogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbk9iamVjdCA9IGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoe30pOwogICAgdmFyIGRlZmluZVByb3BlcnR5V29ya3NPbkRvbSA9IHR5cGVvZiBkb2N1bWVudCA9PSAidW5kZWZpbmVkIiB8fAogICAgICAgIGRvZXNEZWZpbmVQcm9wZXJ0eVdvcmsoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgaWYgKCFkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgfHwgIWRlZmluZVByb3BlcnR5V29ya3NPbkRvbSkgewogICAgICAgIHZhciBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgfQp9CgppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiA9ICJQcm9wZXJ0eSBkZXNjcmlwdGlvbiBtdXN0IGJlIGFuIG9iamVjdDogIjsKICAgIHZhciBFUlJfTk9OX09CSkVDVF9UQVJHRVQgPSAiT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxlZCBvbiBub24tb2JqZWN0OiAiCiAgICB2YXIgRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEID0gImdldHRlcnMgJiBzZXR0ZXJzIGNhbiBub3QgYmUgZGVmaW5lZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBqYXZhc2NyaXB0IGVuZ2luZSI7CgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcikgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9UQVJHRVQgKyBvYmplY3QpOwogICAgICAgIGlmICgodHlwZW9mIGRlc2NyaXB0b3IgIT0gIm9iamVjdCIgJiYgdHlwZW9mIGRlc2NyaXB0b3IgIT0gImZ1bmN0aW9uIikgfHwgZGVzY3JpcHRvciA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVF9ERVNDUklQVE9SICsgZGVzY3JpcHRvcik7CiAgICAgICAgaWYgKGRlZmluZVByb3BlcnR5RmFsbGJhY2spIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrLmNhbGwoT2JqZWN0LCBvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInZhbHVlIikpIHsKCiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FjY2Vzc29ycyAmJiAobG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHByb3RvdHlwZSA9IG9iamVjdC5fX3Byb3RvX187CiAgICAgICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CiAgICAgICAgICAgICAgICBkZWxldGUgb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV0gPSBkZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFzdXBwb3J0c0FjY2Vzc29ycykKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX0FDQ0VTU09SU19OT1RfU1VQUE9SVEVEKTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgImdldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lR2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IuZ2V0KTsKICAgICAgICAgICAgaWYgKG93bnMoZGVzY3JpcHRvciwgInNldCIpKQogICAgICAgICAgICAgICAgZGVmaW5lU2V0dGVyKG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3Iuc2V0KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhvYmplY3QsIHByb3BlcnRpZXMpIHsKICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgIGlmIChvd25zKHByb3BlcnRpZXMsIHByb3BlcnR5KSkKICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCBwcm9wZXJ0aWVzW3Byb3BlcnR5XSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LnNlYWwpIHsKICAgIE9iamVjdC5zZWFsID0gZnVuY3Rpb24gc2VhbChvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5mcmVlemUpIHsKICAgIE9iamVjdC5mcmVlemUgPSBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KdHJ5IHsKICAgIE9iamVjdC5mcmVlemUoZnVuY3Rpb24gKCkge30pOwp9IGNhdGNoIChleGNlcHRpb24pIHsKICAgIE9iamVjdC5mcmVlemUgPSAoZnVuY3Rpb24gZnJlZXplKGZyZWV6ZU9iamVjdCkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiBmcmVlemUob2JqZWN0KSB7CiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnJlZXplT2JqZWN0KG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfSkoT2JqZWN0LmZyZWV6ZSk7Cn0KaWYgKCFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHsKICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzU2VhbGVkKSB7CiAgICBPYmplY3QuaXNTZWFsZWQgPSBmdW5jdGlvbiBpc1NlYWxlZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRnJvemVuKSB7CiAgICBPYmplY3QuaXNGcm96ZW4gPSBmdW5jdGlvbiBpc0Zyb3plbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Owp9CmlmICghT2JqZWN0LmlzRXh0ZW5zaWJsZSkgewogICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSA9IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShvYmplY3QpIHsKICAgICAgICBpZiAoT2JqZWN0KG9iamVjdCkgPT09IG9iamVjdCkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KICAgICAgICB2YXIgbmFtZSA9ICcnOwogICAgICAgIHdoaWxlIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgbmFtZSArPSAnPyc7CiAgICAgICAgfQogICAgICAgIG9iamVjdFtuYW1lXSA9IHRydWU7CiAgICAgICAgdmFyIHJldHVyblZhbHVlID0gb3ducyhvYmplY3QsIG5hbWUpOwogICAgICAgIGRlbGV0ZSBvYmplY3RbbmFtZV07CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgfTsKfQppZiAoIU9iamVjdC5rZXlzKSB7CiAgICB2YXIgaGFzRG9udEVudW1CdWcgPSB0cnVlLAogICAgICAgIGRvbnRFbnVtcyA9IFsKICAgICAgICAgICAgInRvU3RyaW5nIiwKICAgICAgICAgICAgInRvTG9jYWxlU3RyaW5nIiwKICAgICAgICAgICAgInZhbHVlT2YiLAogICAgICAgICAgICAiaGFzT3duUHJvcGVydHkiLAogICAgICAgICAgICAiaXNQcm90b3R5cGVPZiIsCiAgICAgICAgICAgICJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsCiAgICAgICAgICAgICJjb25zdHJ1Y3RvciIKICAgICAgICBdLAogICAgICAgIGRvbnRFbnVtc0xlbmd0aCA9IGRvbnRFbnVtcy5sZW5ndGg7CgogICAgZm9yICh2YXIga2V5IGluIHsidG9TdHJpbmciOiBudWxsfSkgewogICAgICAgIGhhc0RvbnRFbnVtQnVnID0gZmFsc2U7CiAgICB9CgogICAgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgewoKICAgICAgICBpZiAoCiAgICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9ICJvYmplY3QiICYmIHR5cGVvZiBvYmplY3QgIT0gImZ1bmN0aW9uIikgfHwKICAgICAgICAgICAgb2JqZWN0ID09PSBudWxsCiAgICAgICAgKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTsKICAgICAgICB9CgogICAgICAgIHZhciBrZXlzID0gW107CiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHsKICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBuYW1lKSkgewogICAgICAgICAgICAgICAga2V5cy5wdXNoKG5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGFzRG9udEVudW1CdWcpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZG9udEVudW1zTGVuZ3RoOyBpIDwgaWk7IGkrKykgewogICAgICAgICAgICAgICAgdmFyIGRvbnRFbnVtID0gZG9udEVudW1zW2ldOwogICAgICAgICAgICAgICAgaWYgKG93bnMob2JqZWN0LCBkb250RW51bSkpIHsKICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goZG9udEVudW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzOwogICAgfTsKCn0KaWYgKCFEYXRlLm5vdykgewogICAgRGF0ZS5ub3cgPSBmdW5jdGlvbiBub3coKSB7CiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgfTsKfQp2YXIgd3MgPSAiXHgwOVx4MEFceDBCXHgwQ1x4MERceDIwXHhBMFx1MTY4MFx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwMyIgKwogICAgIlx1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1MjAwQVx1MjAyRlx1MjA1Rlx1MzAwMFx1MjAyOCIgKwogICAgIlx1MjAyOVx1RkVGRiI7CmlmICghU3RyaW5nLnByb3RvdHlwZS50cmltKSB7CiAgICB3cyA9ICJbIiArIHdzICsgIl0iOwogICAgdmFyIHRyaW1CZWdpblJlZ2V4cCA9IG5ldyBSZWdFeHAoIl4iICsgd3MgKyB3cyArICIqIiksCiAgICAgICAgdHJpbUVuZFJlZ2V4cCA9IG5ldyBSZWdFeHAod3MgKyB3cyArICIqJCIpOwogICAgU3RyaW5nLnByb3RvdHlwZS50cmltID0gZnVuY3Rpb24gdHJpbSgpIHsKICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMpLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAiIikucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAiIik7CiAgICB9Owp9CgpmdW5jdGlvbiB0b0ludGVnZXIobikgewogICAgbiA9ICtuOwogICAgaWYgKG4gIT09IG4pIHsgLy8gaXNOYU4KICAgICAgICBuID0gMDsKICAgIH0gZWxzZSBpZiAobiAhPT0gMCAmJiBuICE9PSAoMS8wKSAmJiBuICE9PSAtKDEvMCkpIHsKICAgICAgICBuID0gKG4gPiAwIHx8IC0xKSAqIE1hdGguZmxvb3IoTWF0aC5hYnMobikpOwogICAgfQogICAgcmV0dXJuIG47Cn0KCmZ1bmN0aW9uIGlzUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdHlwZSA9IHR5cGVvZiBpbnB1dDsKICAgIHJldHVybiAoCiAgICAgICAgaW5wdXQgPT09IG51bGwgfHwKICAgICAgICB0eXBlID09PSAidW5kZWZpbmVkIiB8fAogICAgICAgIHR5cGUgPT09ICJib29sZWFuIiB8fAogICAgICAgIHR5cGUgPT09ICJudW1iZXIiIHx8CiAgICAgICAgdHlwZSA9PT0gInN0cmluZyIKICAgICk7Cn0KCmZ1bmN0aW9uIHRvUHJpbWl0aXZlKGlucHV0KSB7CiAgICB2YXIgdmFsLCB2YWx1ZU9mLCB0b1N0cmluZzsKICAgIGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CiAgICB2YWx1ZU9mID0gaW5wdXQudmFsdWVPZjsKICAgIGlmICh0eXBlb2YgdmFsdWVPZiA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHZhbHVlT2YuY2FsbChpbnB1dCk7CiAgICAgICAgaWYgKGlzUHJpbWl0aXZlKHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbDsKICAgICAgICB9CiAgICB9CiAgICB0b1N0cmluZyA9IGlucHV0LnRvU3RyaW5nOwogICAgaWYgKHR5cGVvZiB0b1N0cmluZyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhbCA9IHRvU3RyaW5nLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOwp9CnZhciB0b09iamVjdCA9IGZ1bmN0aW9uIChvKSB7CiAgICBpZiAobyA9PSBudWxsKSB7IC8vIHRoaXMgbWF0Y2hlcyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZAogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbid0IGNvbnZlcnQgIitvKyIgdG8gb2JqZWN0Iik7CiAgICB9CiAgICByZXR1cm4gT2JqZWN0KG8pOwp9OwoKfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/ace/workers/worker-xquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Im5vIHVzZSBzdHJpY3QiOwohKGZ1bmN0aW9uKHdpbmRvdykgewppZiAodHlwZW9mIHdpbmRvdy53aW5kb3cgIT0gInVuZGVmaW5lZCIgJiYgd2luZG93LmRvY3VtZW50KQogICAgcmV0dXJuOwppZiAod2luZG93LnJlcXVpcmUgJiYgd2luZG93LmRlZmluZSkKICAgIHJldHVybjsKCmlmICghd2luZG93LmNvbnNvbGUpIHsKICAgIHdpbmRvdy5jb25zb2xlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG1zZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwogICAgICAgIHBvc3RNZXNzYWdlKHt0eXBlOiAibG9nIiwgZGF0YTogbXNnc30pOwogICAgfTsKICAgIHdpbmRvdy5jb25zb2xlLmVycm9yID0KICAgIHdpbmRvdy5jb25zb2xlLndhcm4gPSAKICAgIHdpbmRvdy5jb25zb2xlLmxvZyA9CiAgICB3aW5kb3cuY29uc29sZS50cmFjZSA9IHdpbmRvdy5jb25zb2xlOwp9CndpbmRvdy53aW5kb3cgPSB3aW5kb3c7CndpbmRvdy5hY2UgPSB3aW5kb3c7Cgp3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGZpbGUsIGxpbmUsIGNvbCwgZXJyKSB7CiAgICBwb3N0TWVzc2FnZSh7dHlwZTogImVycm9yIiwgZGF0YTogewogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgZGF0YTogZXJyLmRhdGEsCiAgICAgICAgZmlsZTogZmlsZSwKICAgICAgICBsaW5lOiBsaW5lLCAKICAgICAgICBjb2w6IGNvbCwKICAgICAgICBzdGFjazogZXJyLnN0YWNrCiAgICB9fSk7Cn07Cgp3aW5kb3cubm9ybWFsaXplTW9kdWxlID0gZnVuY3Rpb24ocGFyZW50SWQsIG1vZHVsZU5hbWUpIHsKICAgIC8vIG5vcm1hbGl6ZSBwbHVnaW4gcmVxdWlyZXMKICAgIGlmIChtb2R1bGVOYW1lLmluZGV4T2YoIiEiKSAhPT0gLTEpIHsKICAgICAgICB2YXIgY2h1bmtzID0gbW9kdWxlTmFtZS5zcGxpdCgiISIpOwogICAgICAgIHJldHVybiB3aW5kb3cubm9ybWFsaXplTW9kdWxlKHBhcmVudElkLCBjaHVua3NbMF0pICsgIiEiICsgd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgY2h1bmtzWzFdKTsKICAgIH0KICAgIC8vIG5vcm1hbGl6ZSByZWxhdGl2ZSByZXF1aXJlcwogICAgaWYgKG1vZHVsZU5hbWUuY2hhckF0KDApID09ICIuIikgewogICAgICAgIHZhciBiYXNlID0gcGFyZW50SWQuc3BsaXQoIi8iKS5zbGljZSgwLCAtMSkuam9pbigiLyIpOwogICAgICAgIG1vZHVsZU5hbWUgPSAoYmFzZSA/IGJhc2UgKyAiLyIgOiAiIikgKyBtb2R1bGVOYW1lOwogICAgICAgIAogICAgICAgIHdoaWxlIChtb2R1bGVOYW1lLmluZGV4T2YoIi4iKSAhPT0gLTEgJiYgcHJldmlvdXMgIT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICB2YXIgcHJldmlvdXMgPSBtb2R1bGVOYW1lOwogICAgICAgICAgICBtb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9eXC5cLy8sICIiKS5yZXBsYWNlKC9cL1wuXC8vLCAiLyIpLnJlcGxhY2UoL1teXC9dK1wvXC5cLlwvLywgIiIpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcmV0dXJuIG1vZHVsZU5hbWU7Cn07Cgp3aW5kb3cucmVxdWlyZSA9IGZ1bmN0aW9uIHJlcXVpcmUocGFyZW50SWQsIGlkKSB7CiAgICBpZiAoIWlkKSB7CiAgICAgICAgaWQgPSBwYXJlbnRJZDsKICAgICAgICBwYXJlbnRJZCA9IG51bGw7CiAgICB9CiAgICBpZiAoIWlkLmNoYXJBdCkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIndvcmtlci5qcyByZXF1aXJlKCkgYWNjZXB0cyBvbmx5IChwYXJlbnRJZCwgaWQpIGFzIGFyZ3VtZW50cyIpOwoKICAgIGlkID0gd2luZG93Lm5vcm1hbGl6ZU1vZHVsZShwYXJlbnRJZCwgaWQpOwoKICAgIHZhciBtb2R1bGUgPSB3aW5kb3cucmVxdWlyZS5tb2R1bGVzW2lkXTsKICAgIGlmIChtb2R1bGUpIHsKICAgICAgICBpZiAoIW1vZHVsZS5pbml0aWFsaXplZCkgewogICAgICAgICAgICBtb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG1vZHVsZS5mYWN0b3J5KCkuZXhwb3J0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogICAgfQogICAKICAgIGlmICghd2luZG93LnJlcXVpcmUudGxucykKICAgICAgICByZXR1cm4gY29uc29sZS5sb2coInVuYWJsZSB0byBsb2FkICIgKyBpZCk7CiAgICAKICAgIHZhciBwYXRoID0gcmVzb2x2ZU1vZHVsZUlkKGlkLCB3aW5kb3cucmVxdWlyZS50bG5zKTsKICAgIGlmIChwYXRoLnNsaWNlKC0zKSAhPSAiLmpzIikgcGF0aCArPSAiLmpzIjsKICAgIAogICAgd2luZG93LnJlcXVpcmUuaWQgPSBpZDsKICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0ge307IC8vIHByZXZlbnQgaW5maW5pdGUgbG9vcCBvbiBicm9rZW4gbW9kdWxlcwogICAgaW1wb3J0U2NyaXB0cyhwYXRoKTsKICAgIHJldHVybiB3aW5kb3cucmVxdWlyZShwYXJlbnRJZCwgaWQpOwp9OwpmdW5jdGlvbiByZXNvbHZlTW9kdWxlSWQoaWQsIHBhdGhzKSB7CiAgICB2YXIgdGVzdFBhdGggPSBpZCwgdGFpbCA9ICIiOwogICAgd2hpbGUgKHRlc3RQYXRoKSB7CiAgICAgICAgdmFyIGFsaWFzID0gcGF0aHNbdGVzdFBhdGhdOwogICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgcmV0dXJuIGFsaWFzICsgdGFpbDsKICAgICAgICB9IGVsc2UgaWYgKGFsaWFzKSB7CiAgICAgICAgICAgIHJldHVybiAgYWxpYXMubG9jYXRpb24ucmVwbGFjZSgvXC8qJC8sICIvIikgKyAodGFpbCB8fCBhbGlhcy5tYWluIHx8IGFsaWFzLm5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoYWxpYXMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgdmFyIGkgPSB0ZXN0UGF0aC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgIGlmIChpID09PSAtMSkgYnJlYWs7CiAgICAgICAgdGFpbCA9IHRlc3RQYXRoLnN1YnN0cihpKSArIHRhaWw7CiAgICAgICAgdGVzdFBhdGggPSB0ZXN0UGF0aC5zbGljZSgwLCBpKTsKICAgIH0KICAgIHJldHVybiBpZDsKfQp3aW5kb3cucmVxdWlyZS5tb2R1bGVzID0ge307CndpbmRvdy5yZXF1aXJlLnRsbnMgPSB7fTsKCndpbmRvdy5kZWZpbmUgPSBmdW5jdGlvbihpZCwgZGVwcywgZmFjdG9yeSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICAgIGZhY3RvcnkgPSBkZXBzOwogICAgICAgIGlmICh0eXBlb2YgaWQgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgZGVwcyA9IGlkOwogICAgICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgZmFjdG9yeSA9IGlkOwogICAgICAgIGRlcHMgPSBbXTsKICAgICAgICBpZCA9IHdpbmRvdy5yZXF1aXJlLmlkOwogICAgfQogICAgCiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHdpbmRvdy5yZXF1aXJlLm1vZHVsZXNbaWRdID0gewogICAgICAgICAgICBleHBvcnRzOiBmYWN0b3J5LAogICAgICAgICAgICBpbml0aWFsaXplZDogdHJ1ZQogICAgICAgIH07CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghZGVwcy5sZW5ndGgpCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGVwZW5kZW5jaWVzLCB3ZSBpbmplY3QgInJlcXVpcmUiLCAiZXhwb3J0cyIgYW5kCiAgICAgICAgLy8gIm1vZHVsZSIgYXMgZGVwZW5kZW5jaWVzLCB0byBwcm92aWRlIENvbW1vbkpTIGNvbXBhdGliaWxpdHkuCiAgICAgICAgZGVwcyA9IFsicmVxdWlyZSIsICJleHBvcnRzIiwgIm1vZHVsZSJdOwoKICAgIHZhciByZXEgPSBmdW5jdGlvbihjaGlsZElkKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5yZXF1aXJlKGlkLCBjaGlsZElkKTsKICAgIH07CgogICAgd2luZG93LnJlcXVpcmUubW9kdWxlc1tpZF0gPSB7CiAgICAgICAgZXhwb3J0czoge30sCiAgICAgICAgZmFjdG9yeTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBtb2R1bGUgPSB0aGlzOwogICAgICAgICAgICB2YXIgcmV0dXJuRXhwb3J0cyA9IGZhY3RvcnkuYXBwbHkodGhpcywgZGVwcy5zbGljZSgwLCBmYWN0b3J5Lmxlbmd0aCkubWFwKGZ1bmN0aW9uKGRlcCkgewogICAgICAgICAgICAgICAgc3dpdGNoIChkZXApIHsKICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlICJyZXF1aXJlIiwgImV4cG9ydHMiIGFuZCAibW9kdWxlIiBhcmVuJ3QgYWN0dWFsCiAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzLCB3ZSBtdXN0IGhhbmRsZSB0aGVtIHNlcGVyYXRlbHkuCiAgICAgICAgICAgICAgICAgICAgY2FzZSAicmVxdWlyZSI6IHJldHVybiByZXE7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAiZXhwb3J0cyI6IHJldHVybiBtb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICBjYXNlICJtb2R1bGUiOiAgcmV0dXJuIG1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAvLyBCdXQgZm9yIGFsbCBvdGhlciBkZXBlbmRlbmNpZXMsIHdlIGNhbiBqdXN0IGdvIGFoZWFkIGFuZAogICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmUgdGhlbS4KICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgcmV0dXJuIHJlcShkZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIGlmIChyZXR1cm5FeHBvcnRzKQogICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSByZXR1cm5FeHBvcnRzOwogICAgICAgICAgICByZXR1cm4gbW9kdWxlOwogICAgICAgIH0KICAgIH07Cn07CndpbmRvdy5kZWZpbmUuYW1kID0ge307CnJlcXVpcmUudGxucyA9IHt9Owp3aW5kb3cuaW5pdEJhc2VVcmxzICA9IGZ1bmN0aW9uIGluaXRCYXNlVXJscyh0b3BMZXZlbE5hbWVzcGFjZXMpIHsKICAgIGZvciAodmFyIGkgaW4gdG9wTGV2ZWxOYW1lc3BhY2VzKQogICAgICAgIHJlcXVpcmUudGxuc1tpXSA9IHRvcExldmVsTmFtZXNwYWNlc1tpXTsKfTsKCndpbmRvdy5pbml0U2VuZGVyID0gZnVuY3Rpb24gaW5pdFNlbmRlcigpIHsKCiAgICB2YXIgRXZlbnRFbWl0dGVyID0gd2luZG93LnJlcXVpcmUoImFjZS9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKICAgIHZhciBvb3AgPSB3aW5kb3cucmVxdWlyZSgiYWNlL2xpYi9vb3AiKTsKICAgIAogICAgdmFyIFNlbmRlciA9IGZ1bmN0aW9uKCkge307CiAgICAKICAgIChmdW5jdGlvbigpIHsKICAgICAgICAKICAgICAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICAgICAgICAgICAgICAKICAgICAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZGF0YSwgY2FsbGJhY2tJZCkgewogICAgICAgICAgICBwb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICB0eXBlOiAiY2FsbCIsCiAgICAgICAgICAgICAgICBpZDogY2FsbGJhY2tJZCwKICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEKICAgICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgIAogICAgICAgIHRoaXMuZW1pdCA9IGZ1bmN0aW9uKG5hbWUsIGRhdGEpIHsKICAgICAgICAgICAgcG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgdHlwZTogImV2ZW50IiwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhCiAgICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgCiAgICB9KS5jYWxsKFNlbmRlci5wcm90b3R5cGUpOwogICAgCiAgICByZXR1cm4gbmV3IFNlbmRlcigpOwp9OwoKdmFyIG1haW4gPSB3aW5kb3cubWFpbiA9IG51bGw7CnZhciBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gbnVsbDsKCndpbmRvdy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7CiAgICB2YXIgbXNnID0gZS5kYXRhOwogICAgaWYgKG1zZy5ldmVudCAmJiBzZW5kZXIpIHsKICAgICAgICBzZW5kZXIuX3NpZ25hbChtc2cuZXZlbnQsIG1zZy5kYXRhKTsKICAgIH0KICAgIGVsc2UgaWYgKG1zZy5jb21tYW5kKSB7CiAgICAgICAgaWYgKG1haW5bbXNnLmNvbW1hbmRdKQogICAgICAgICAgICBtYWluW21zZy5jb21tYW5kXS5hcHBseShtYWluLCBtc2cuYXJncyk7CiAgICAgICAgZWxzZSBpZiAod2luZG93W21zZy5jb21tYW5kXSkKICAgICAgICAgICAgd2luZG93W21zZy5jb21tYW5kXS5hcHBseSh3aW5kb3csIG1zZy5hcmdzKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb21tYW5kOiIgKyBtc2cuY29tbWFuZCk7CiAgICB9CiAgICBlbHNlIGlmIChtc2cuaW5pdCkgewogICAgICAgIHdpbmRvdy5pbml0QmFzZVVybHMobXNnLnRsbnMpOwogICAgICAgIHJlcXVpcmUoImFjZS9saWIvZXM1LXNoaW0iKTsKICAgICAgICBzZW5kZXIgPSB3aW5kb3cuc2VuZGVyID0gd2luZG93LmluaXRTZW5kZXIoKTsKICAgICAgICB2YXIgY2xhenogPSByZXF1aXJlKG1zZy5tb2R1bGUpW21zZy5jbGFzc25hbWVdOwogICAgICAgIG1haW4gPSB3aW5kb3cubWFpbiA9IG5ldyBjbGF6eihzZW5kZXIpOwogICAgfQp9Owp9KSh0aGlzKTsKCmRlZmluZSgiYWNlL2xpYi9vb3AiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKZXhwb3J0cy5pbmhlcml0cyA9IGZ1bmN0aW9uKGN0b3IsIHN1cGVyQ3RvcikgewogICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3I7CiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwgewogICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBjdG9yLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIH0KICAgIH0pOwp9OwoKZXhwb3J0cy5taXhpbiA9IGZ1bmN0aW9uKG9iaiwgbWl4aW4pIHsKICAgIGZvciAodmFyIGtleSBpbiBtaXhpbikgewogICAgICAgIG9ialtrZXldID0gbWl4aW5ba2V5XTsKICAgIH0KICAgIHJldHVybiBvYmo7Cn07CgpleHBvcnRzLmltcGxlbWVudCA9IGZ1bmN0aW9uKHByb3RvLCBtaXhpbikgewogICAgZXhwb3J0cy5taXhpbihwcm90bywgbWl4aW4pOwp9OwoKfSk7CgpkZWZpbmUoImFjZS9yYW5nZSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CnZhciBjb21wYXJlUG9pbnRzID0gZnVuY3Rpb24ocDEsIHAyKSB7CiAgICByZXR1cm4gcDEucm93IC0gcDIucm93IHx8IHAxLmNvbHVtbiAtIHAyLmNvbHVtbjsKfTsKdmFyIFJhbmdlID0gZnVuY3Rpb24oc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikgewogICAgdGhpcy5zdGFydCA9IHsKICAgICAgICByb3c6IHN0YXJ0Um93LAogICAgICAgIGNvbHVtbjogc3RhcnRDb2x1bW4KICAgIH07CgogICAgdGhpcy5lbmQgPSB7CiAgICAgICAgcm93OiBlbmRSb3csCiAgICAgICAgY29sdW1uOiBlbmRDb2x1bW4KICAgIH07Cn07CgooZnVuY3Rpb24oKSB7CiAgICB0aGlzLmlzRXF1YWwgPSBmdW5jdGlvbihyYW5nZSkgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PT0gcmFuZ2Uuc3RhcnQucm93ICYmCiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyAmJgogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9PT0gcmFuZ2Uuc3RhcnQuY29sdW1uICYmCiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9PT0gcmFuZ2UuZW5kLmNvbHVtbjsKICAgIH07CiAgICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICgiUmFuZ2U6IFsiICsgdGhpcy5zdGFydC5yb3cgKyAiLyIgKyB0aGlzLnN0YXJ0LmNvbHVtbiArCiAgICAgICAgICAgICJdIC0+IFsiICsgdGhpcy5lbmQucm93ICsgIi8iICsgdGhpcy5lbmQuY29sdW1uICsgIl0iKTsKICAgIH07CgogICAgdGhpcy5jb250YWlucyA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCwKICAgICAgICAgICAgZW5kID0gcmFuZ2UuZW5kLAogICAgICAgICAgICBzdGFydCA9IHJhbmdlLnN0YXJ0OwoKICAgICAgICBjbXAgPSB0aGlzLmNvbXBhcmUoZW5kLnJvdywgZW5kLmNvbHVtbik7CiAgICAgICAgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgIGNtcCA9IHRoaXMuY29tcGFyZShzdGFydC5yb3csIHN0YXJ0LmNvbHVtbik7CiAgICAgICAgICAgIGlmIChjbXAgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gLTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY21wID0gdGhpcy5jb21wYXJlKHN0YXJ0LnJvdywgc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gNDI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVQb2ludCA9IGZ1bmN0aW9uKHApIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKHAucm93LCBwLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5jb250YWluc1JhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlUG9pbnQocmFuZ2Uuc3RhcnQpID09IDAgJiYgdGhpcy5jb21wYXJlUG9pbnQocmFuZ2UuZW5kKSA9PSAwOwogICAgfTsKICAgIHRoaXMuaW50ZXJzZWN0cyA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIGNtcCA9IHRoaXMuY29tcGFyZVJhbmdlKHJhbmdlKTsKICAgICAgICByZXR1cm4gKGNtcCA9PSAtMSB8fCBjbXAgPT0gMCB8fCBjbXAgPT0gMSk7CiAgICB9OwogICAgdGhpcy5pc0VuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbjsKICAgIH07CiAgICB0aGlzLmlzU3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHJldHVybiB0aGlzLnN0YXJ0LnJvdyA9PSByb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT0gY29sdW1uOwogICAgfTsKICAgIHRoaXMuc2V0U3RhcnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQuY29sdW1uID0gcm93LmNvbHVtbjsKICAgICAgICAgICAgdGhpcy5zdGFydC5yb3cgPSByb3cucm93OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuc3RhcnQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB9CiAgICB9OwogICAgdGhpcy5zZXRFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0eXBlb2Ygcm93ID09ICJvYmplY3QiKSB7CiAgICAgICAgICAgIHRoaXMuZW5kLmNvbHVtbiA9IHJvdy5jb2x1bW47CiAgICAgICAgICAgIHRoaXMuZW5kLnJvdyA9IHJvdy5yb3c7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5lbmQucm93ID0gcm93OwogICAgICAgICAgICB0aGlzLmVuZC5jb2x1bW4gPSBjb2x1bW47CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuaW5zaWRlID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICBpZiAodGhpcy5jb21wYXJlKHJvdywgY29sdW1uKSA9PSAwKSB7CiAgICAgICAgICAgIGlmICh0aGlzLmlzRW5kKHJvdywgY29sdW1uKSB8fCB0aGlzLmlzU3RhcnQocm93LCBjb2x1bW4pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwogICAgdGhpcy5pbnNpZGVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc0VuZChyb3csIGNvbHVtbikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICB0aGlzLmluc2lkZUVuZCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuY29tcGFyZShyb3csIGNvbHVtbikgPT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5pc1N0YXJ0KHJvdywgY29sdW1uKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKICAgIHRoaXMuY29tcGFyZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlMaW5lKCkpIHsKICAgICAgICAgICAgaWYgKHJvdyA9PT0gdGhpcy5zdGFydC5yb3cpIHsKICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLnN0YXJ0LmNvbHVtbiA/IC0xIDogKGNvbHVtbiA+IHRoaXMuZW5kLmNvbHVtbiA/IDEgOiAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHJvdyA8IHRoaXMuc3RhcnQucm93KQogICAgICAgICAgICByZXR1cm4gLTE7CgogICAgICAgIGlmIChyb3cgPiB0aGlzLmVuZC5yb3cpCiAgICAgICAgICAgIHJldHVybiAxOwoKICAgICAgICBpZiAodGhpcy5zdGFydC5yb3cgPT09IHJvdykKICAgICAgICAgICAgcmV0dXJuIGNvbHVtbiA+PSB0aGlzLnN0YXJ0LmNvbHVtbiA/IDAgOiAtMTsKCiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PT0gcm93KQogICAgICAgICAgICByZXR1cm4gY29sdW1uIDw9IHRoaXMuZW5kLmNvbHVtbiA/IDAgOiAxOwoKICAgICAgICByZXR1cm4gMDsKICAgIH07CiAgICB0aGlzLmNvbXBhcmVTdGFydCA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNvbXBhcmVFbmQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIGlmICh0aGlzLmVuZC5yb3cgPT0gcm93ICYmIHRoaXMuZW5kLmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZShyb3csIGNvbHVtbik7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuY29tcGFyZUluc2lkZSA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgaWYgKHRoaXMuZW5kLnJvdyA9PSByb3cgJiYgdGhpcy5lbmQuY29sdW1uID09IGNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhcnQucm93ID09IHJvdyAmJiB0aGlzLnN0YXJ0LmNvbHVtbiA9PSBjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUocm93LCBjb2x1bW4pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLmNsaXBSb3dzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBpZiAodGhpcy5lbmQucm93ID4gbGFzdFJvdykKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuZW5kLnJvdyA8IGZpcnN0Um93KQogICAgICAgICAgICB2YXIgZW5kID0ge3JvdzogZmlyc3RSb3csIGNvbHVtbjogMH07CgogICAgICAgIGlmICh0aGlzLnN0YXJ0LnJvdyA+IGxhc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGxhc3RSb3cgKyAxLCBjb2x1bW46IDB9OwogICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnQucm93IDwgZmlyc3RSb3cpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IGZpcnN0Um93LCBjb2x1bW46IDB9OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKICAgIHRoaXMuZXh0ZW5kID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICB2YXIgY21wID0gdGhpcy5jb21wYXJlKHJvdywgY29sdW1uKTsKCiAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICBlbHNlIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgIHZhciBzdGFydCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwogICAgICAgIGVsc2UKICAgICAgICAgICAgdmFyIGVuZCA9IHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59OwoKICAgICAgICByZXR1cm4gUmFuZ2UuZnJvbVBvaW50cyhzdGFydCB8fCB0aGlzLnN0YXJ0LCBlbmQgfHwgdGhpcy5lbmQpOwogICAgfTsKCiAgICB0aGlzLmlzRW1wdHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnQucm93ID09PSB0aGlzLmVuZC5yb3cgJiYgdGhpcy5zdGFydC5jb2x1bW4gPT09IHRoaXMuZW5kLmNvbHVtbik7CiAgICB9OwogICAgdGhpcy5pc011bHRpTGluZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiAodGhpcy5zdGFydC5yb3cgIT09IHRoaXMuZW5kLnJvdyk7CiAgICB9OwogICAgdGhpcy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBSYW5nZS5mcm9tUG9pbnRzKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKICAgIH07CiAgICB0aGlzLmNvbGxhcHNlUm93cyA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLmVuZC5jb2x1bW4gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIG5ldyBSYW5nZSh0aGlzLnN0YXJ0LnJvdywgMCwgTWF0aC5tYXgodGhpcy5zdGFydC5yb3csIHRoaXMuZW5kLnJvdy0xKSwgMCk7CiAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQucm93LCAwLCB0aGlzLmVuZC5yb3csIDApOwogICAgfTsKICAgIHRoaXMudG9TY3JlZW5SYW5nZSA9IGZ1bmN0aW9uKHNlc3Npb24pIHsKICAgICAgICB2YXIgc2NyZWVuUG9zU3RhcnQgPSBzZXNzaW9uLmRvY3VtZW50VG9TY3JlZW5Qb3NpdGlvbih0aGlzLnN0YXJ0KTsKICAgICAgICB2YXIgc2NyZWVuUG9zRW5kID0gc2Vzc2lvbi5kb2N1bWVudFRvU2NyZWVuUG9zaXRpb24odGhpcy5lbmQpOwoKICAgICAgICByZXR1cm4gbmV3IFJhbmdlKAogICAgICAgICAgICBzY3JlZW5Qb3NTdGFydC5yb3csIHNjcmVlblBvc1N0YXJ0LmNvbHVtbiwKICAgICAgICAgICAgc2NyZWVuUG9zRW5kLnJvdywgc2NyZWVuUG9zRW5kLmNvbHVtbgogICAgICAgICk7CiAgICB9OwogICAgdGhpcy5tb3ZlQnkgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHRoaXMuc3RhcnQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLnN0YXJ0LmNvbHVtbiArPSBjb2x1bW47CiAgICAgICAgdGhpcy5lbmQucm93ICs9IHJvdzsKICAgICAgICB0aGlzLmVuZC5jb2x1bW4gKz0gY29sdW1uOwogICAgfTsKCn0pLmNhbGwoUmFuZ2UucHJvdG90eXBlKTsKUmFuZ2UuZnJvbVBvaW50cyA9IGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHsKICAgIHJldHVybiBuZXcgUmFuZ2Uoc3RhcnQucm93LCBzdGFydC5jb2x1bW4sIGVuZC5yb3csIGVuZC5jb2x1bW4pOwp9OwpSYW5nZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50czsKClJhbmdlLmNvbXBhcmVQb2ludHMgPSBmdW5jdGlvbihwMSwgcDIpIHsKICAgIHJldHVybiBwMS5yb3cgLSBwMi5yb3cgfHwgcDEuY29sdW1uIC0gcDIuY29sdW1uOwp9OwoKCmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTsKfSk7CgpkZWZpbmUoImFjZS9hcHBseV9kZWx0YSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpmdW5jdGlvbiB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsIGVycm9yVGV4dCl7CiAgICBjb25zb2xlLmxvZygiSW52YWxpZCBEZWx0YToiLCBkZWx0YSk7CiAgICB0aHJvdyAiSW52YWxpZCBEZWx0YTogIiArIGVycm9yVGV4dDsKfQoKZnVuY3Rpb24gcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBwb3NpdGlvbikgewogICAgcmV0dXJuIHBvc2l0aW9uLnJvdyAgICA+PSAwICYmIHBvc2l0aW9uLnJvdyAgICA8ICBkb2NMaW5lcy5sZW5ndGggJiYKICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPj0gMCAmJiBwb3NpdGlvbi5jb2x1bW4gPD0gZG9jTGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGg7Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlRGVsdGEoZG9jTGluZXMsIGRlbHRhKSB7CiAgICBpZiAoZGVsdGEuYWN0aW9uICE9ICJpbnNlcnQiICYmIGRlbHRhLmFjdGlvbiAhPSAicmVtb3ZlIikKICAgICAgICB0aHJvd0RlbHRhRXJyb3IoZGVsdGEsICJkZWx0YS5hY3Rpb24gbXVzdCBiZSAnaW5zZXJ0JyBvciAncmVtb3ZlJyIpOwogICAgaWYgKCEoZGVsdGEubGluZXMgaW5zdGFuY2VvZiBBcnJheSkpCiAgICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEubGluZXMgbXVzdCBiZSBhbiBBcnJheSIpOwogICAgaWYgKCFkZWx0YS5zdGFydCB8fCAhZGVsdGEuZW5kKQogICAgICAgdGhyb3dEZWx0YUVycm9yKGRlbHRhLCAiZGVsdGEuc3RhcnQvZW5kIG11c3QgYmUgYW4gcHJlc2VudCIpOwogICAgdmFyIHN0YXJ0ID0gZGVsdGEuc3RhcnQ7CiAgICBpZiAoIXBvc2l0aW9uSW5Eb2N1bWVudChkb2NMaW5lcywgZGVsdGEuc3RhcnQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnN0YXJ0IG11c3QgYmUgY29udGFpbmVkIGluIGRvY3VtZW50Iik7CiAgICB2YXIgZW5kID0gZGVsdGEuZW5kOwogICAgaWYgKGRlbHRhLmFjdGlvbiA9PSAicmVtb3ZlIiAmJiAhcG9zaXRpb25JbkRvY3VtZW50KGRvY0xpbmVzLCBlbmQpKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLmVuZCBtdXN0IGNvbnRhaW5lZCBpbiBkb2N1bWVudCBmb3IgJ3JlbW92ZScgYWN0aW9ucyIpOwogICAgdmFyIG51bVJhbmdlUm93cyA9IGVuZC5yb3cgLSBzdGFydC5yb3c7CiAgICB2YXIgbnVtUmFuZ2VMYXN0TGluZUNoYXJzID0gKGVuZC5jb2x1bW4gLSAobnVtUmFuZ2VSb3dzID09IDAgPyBzdGFydC5jb2x1bW4gOiAwKSk7CiAgICBpZiAobnVtUmFuZ2VSb3dzICE9IGRlbHRhLmxpbmVzLmxlbmd0aCAtIDEgfHwgZGVsdGEubGluZXNbbnVtUmFuZ2VSb3dzXS5sZW5ndGggIT0gbnVtUmFuZ2VMYXN0TGluZUNoYXJzKQogICAgICAgIHRocm93RGVsdGFFcnJvcihkZWx0YSwgImRlbHRhLnJhbmdlIG11c3QgbWF0Y2ggZGVsdGEgbGluZXMiKTsKfQoKZXhwb3J0cy5hcHBseURlbHRhID0gZnVuY3Rpb24oZG9jTGluZXMsIGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAKICAgIHZhciByb3cgPSBkZWx0YS5zdGFydC5yb3c7CiAgICB2YXIgc3RhcnRDb2x1bW4gPSBkZWx0YS5zdGFydC5jb2x1bW47CiAgICB2YXIgbGluZSA9IGRvY0xpbmVzW3Jvd10gfHwgIiI7CiAgICBzd2l0Y2ggKGRlbHRhLmFjdGlvbikgewogICAgICAgIGNhc2UgImluc2VydCI6CiAgICAgICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3ddID0gbGluZS5zdWJzdHJpbmcoMCwgc3RhcnRDb2x1bW4pICsgZGVsdGEubGluZXNbMF0gKyBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtyb3csIDFdLmNvbmNhdChkZWx0YS5saW5lcyk7CiAgICAgICAgICAgICAgICBkb2NMaW5lcy5zcGxpY2UuYXBwbHkoZG9jTGluZXMsIGFyZ3MpOwogICAgICAgICAgICAgICAgZG9jTGluZXNbcm93XSA9IGxpbmUuc3Vic3RyaW5nKDAsIHN0YXJ0Q29sdW1uKSArIGRvY0xpbmVzW3Jvd107CiAgICAgICAgICAgICAgICBkb2NMaW5lc1tyb3cgKyBkZWx0YS5saW5lcy5sZW5ndGggLSAxXSArPSBsaW5lLnN1YnN0cmluZyhzdGFydENvbHVtbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAicmVtb3ZlIjoKICAgICAgICAgICAgdmFyIGVuZENvbHVtbiA9IGRlbHRhLmVuZC5jb2x1bW47CiAgICAgICAgICAgIHZhciBlbmRSb3cgPSBkZWx0YS5lbmQucm93OwogICAgICAgICAgICBpZiAocm93ID09PSBlbmRSb3cpIHsKICAgICAgICAgICAgICAgIGRvY0xpbmVzW3Jvd10gPSBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBsaW5lLnN1YnN0cmluZyhlbmRDb2x1bW4pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZG9jTGluZXMuc3BsaWNlKAogICAgICAgICAgICAgICAgICAgIHJvdywgZW5kUm93IC0gcm93ICsgMSwKICAgICAgICAgICAgICAgICAgICBsaW5lLnN1YnN0cmluZygwLCBzdGFydENvbHVtbikgKyBkb2NMaW5lc1tlbmRSb3ddLnN1YnN0cmluZyhlbmRDb2x1bW4pCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Owp9KTsKCmRlZmluZSgiYWNlL2xpYi9ldmVudF9lbWl0dGVyIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBFdmVudEVtaXR0ZXIgPSB7fTsKdmFyIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uKCkgeyB0aGlzLnByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7IH07CnZhciBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKCkgeyB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlOyB9OwoKRXZlbnRFbWl0dGVyLl9lbWl0ID0KRXZlbnRFbWl0dGVyLl9kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8ICh0aGlzLl9ldmVudFJlZ2lzdHJ5ID0ge30pOwogICAgdGhpcy5fZGVmYXVsdEhhbmRsZXJzIHx8ICh0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7fSk7CgogICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50UmVnaXN0cnlbZXZlbnROYW1lXSB8fCBbXTsKICAgIHZhciBkZWZhdWx0SGFuZGxlciA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyc1tldmVudE5hbWVdOwogICAgaWYgKCFsaXN0ZW5lcnMubGVuZ3RoICYmICFkZWZhdWx0SGFuZGxlcikKICAgICAgICByZXR1cm47CgogICAgaWYgKHR5cGVvZiBlICE9ICJvYmplY3QiIHx8ICFlKQogICAgICAgIGUgPSB7fTsKCiAgICBpZiAoIWUudHlwZSkKICAgICAgICBlLnR5cGUgPSBldmVudE5hbWU7CiAgICBpZiAoIWUuc3RvcFByb3BhZ2F0aW9uKQogICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uID0gc3RvcFByb3BhZ2F0aW9uOwogICAgaWYgKCFlLnByZXZlbnREZWZhdWx0KQogICAgICAgIGUucHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdDsKCiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBsaXN0ZW5lcnNbaV0oZSwgdGhpcyk7CiAgICAgICAgaWYgKGUucHJvcGFnYXRpb25TdG9wcGVkKQogICAgICAgICAgICBicmVhazsKICAgIH0KICAgIAogICAgaWYgKGRlZmF1bHRIYW5kbGVyICYmICFlLmRlZmF1bHRQcmV2ZW50ZWQpCiAgICAgICAgcmV0dXJuIGRlZmF1bHRIYW5kbGVyKGUsIHRoaXMpOwp9OwoKCkV2ZW50RW1pdHRlci5fc2lnbmFsID0gZnVuY3Rpb24oZXZlbnROYW1lLCBlKSB7CiAgICB2YXIgbGlzdGVuZXJzID0gKHRoaXMuX2V2ZW50UmVnaXN0cnkgfHwge30pW2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTsKICAgIGZvciAodmFyIGk9MDsgaTxsaXN0ZW5lcnMubGVuZ3RoOyBpKyspCiAgICAgICAgbGlzdGVuZXJzW2ldKGUsIHRoaXMpOwp9OwoKRXZlbnRFbWl0dGVyLm9uY2UgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgX3NlbGYgPSB0aGlzOwogICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24gbmV3Q2FsbGJhY2soKSB7CiAgICAgICAgX3NlbGYucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG5ld0NhbGxiYWNrKTsKICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgfSk7CiAgICBpZiAoIWNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSByZXNvbHZlOwogICAgICAgIH0pOwogICAgfQp9OwoKCkV2ZW50RW1pdHRlci5zZXREZWZhdWx0SGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHZhciBoYW5kbGVycyA9IHRoaXMuX2RlZmF1bHRIYW5kbGVyczsKICAgIGlmICghaGFuZGxlcnMpCiAgICAgICAgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnMgPSB7X2Rpc2FibGVkXzoge319OwogICAgCiAgICBpZiAoaGFuZGxlcnNbZXZlbnROYW1lXSkgewogICAgICAgIHZhciBvbGQgPSBoYW5kbGVyc1tldmVudE5hbWVdOwogICAgICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgICAgICBpZiAoIWRpc2FibGVkKQogICAgICAgICAgICBoYW5kbGVycy5fZGlzYWJsZWRfW2V2ZW50TmFtZV0gPSBkaXNhYmxlZCA9IFtdOwogICAgICAgIGRpc2FibGVkLnB1c2gob2xkKTsKICAgICAgICB2YXIgaSA9IGRpc2FibGVkLmluZGV4T2YoY2FsbGJhY2spOwogICAgICAgIGlmIChpICE9IC0xKSAKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQogICAgaGFuZGxlcnNbZXZlbnROYW1lXSA9IGNhbGxiYWNrOwp9OwpFdmVudEVtaXR0ZXIucmVtb3ZlRGVmYXVsdEhhbmRsZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrKSB7CiAgICB2YXIgaGFuZGxlcnMgPSB0aGlzLl9kZWZhdWx0SGFuZGxlcnM7CiAgICBpZiAoIWhhbmRsZXJzKQogICAgICAgIHJldHVybjsKICAgIHZhciBkaXNhYmxlZCA9IGhhbmRsZXJzLl9kaXNhYmxlZF9bZXZlbnROYW1lXTsKICAgIAogICAgaWYgKGhhbmRsZXJzW2V2ZW50TmFtZV0gPT0gY2FsbGJhY2spIHsKICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEhhbmRsZXIoZXZlbnROYW1lLCBkaXNhYmxlZC5wb3AoKSk7CiAgICB9IGVsc2UgaWYgKGRpc2FibGVkKSB7CiAgICAgICAgdmFyIGkgPSBkaXNhYmxlZC5pbmRleE9mKGNhbGxiYWNrKTsKICAgICAgICBpZiAoaSAhPSAtMSkKICAgICAgICAgICAgZGlzYWJsZWQuc3BsaWNlKGksIDEpOwogICAgfQp9OwoKRXZlbnRFbWl0dGVyLm9uID0KRXZlbnRFbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihldmVudE5hbWUsIGNhbGxiYWNrLCBjYXB0dXJpbmcpIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKCiAgICBpZiAobGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spID09IC0xKQogICAgICAgIGxpc3RlbmVyc1tjYXB0dXJpbmcgPyAidW5zaGlmdCIgOiAicHVzaCJdKGNhbGxiYWNrKTsKICAgIHJldHVybiBjYWxsYmFjazsKfTsKCkV2ZW50RW1pdHRlci5vZmYgPQpFdmVudEVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPQpFdmVudEVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKGV2ZW50TmFtZSwgY2FsbGJhY2spIHsKICAgIHRoaXMuX2V2ZW50UmVnaXN0cnkgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5IHx8IHt9OwoKICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV07CiAgICBpZiAoIWxpc3RlbmVycykKICAgICAgICByZXR1cm47CgogICAgdmFyIGluZGV4ID0gbGlzdGVuZXJzLmluZGV4T2YoY2FsbGJhY2spOwogICAgaWYgKGluZGV4ICE9PSAtMSkKICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTsKfTsKCkV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbihldmVudE5hbWUpIHsKICAgIGlmICh0aGlzLl9ldmVudFJlZ2lzdHJ5KSB0aGlzLl9ldmVudFJlZ2lzdHJ5W2V2ZW50TmFtZV0gPSBbXTsKfTsKCmV4cG9ydHMuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyOwoKfSk7CgpkZWZpbmUoImFjZS9hbmNob3IiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwoKdmFyIG9vcCA9IHJlcXVpcmUoIi4vbGliL29vcCIpOwp2YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgiLi9saWIvZXZlbnRfZW1pdHRlciIpLkV2ZW50RW1pdHRlcjsKCnZhciBBbmNob3IgPSBleHBvcnRzLkFuY2hvciA9IGZ1bmN0aW9uKGRvYywgcm93LCBjb2x1bW4pIHsKICAgIHRoaXMuJG9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpOwogICAgdGhpcy5hdHRhY2goZG9jKTsKICAgIAogICAgaWYgKHR5cGVvZiBjb2x1bW4gPT0gInVuZGVmaW5lZCIpCiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbihyb3cucm93LCByb3cuY29sdW1uKTsKICAgIGVsc2UKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHJvdywgY29sdW1uKTsKfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLmdldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQodGhpcy5yb3csIHRoaXMuY29sdW1uKTsKICAgIH07CiAgICB0aGlzLmdldERvY3VtZW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQ7CiAgICB9OwogICAgdGhpcy4kaW5zZXJ0UmlnaHQgPSBmYWxzZTsKICAgIHRoaXMub25DaGFuZ2UgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIGlmIChkZWx0YS5zdGFydC5yb3cgPT0gZGVsdGEuZW5kLnJvdyAmJiBkZWx0YS5zdGFydC5yb3cgIT0gdGhpcy5yb3cpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKGRlbHRhLnN0YXJ0LnJvdyA+IHRoaXMucm93KQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIAogICAgICAgIHZhciBwb2ludCA9ICRnZXRUcmFuc2Zvcm1lZFBvaW50KGRlbHRhLCB7cm93OiB0aGlzLnJvdywgY29sdW1uOiB0aGlzLmNvbHVtbn0sIHRoaXMuJGluc2VydFJpZ2h0KTsKICAgICAgICB0aGlzLnNldFBvc2l0aW9uKHBvaW50LnJvdywgcG9pbnQuY29sdW1uLCB0cnVlKTsKICAgIH07CiAgICAKICAgIGZ1bmN0aW9uICRwb2ludHNJbk9yZGVyKHBvaW50MSwgcG9pbnQyLCBlcXVhbFBvaW50c0luT3JkZXIpIHsKICAgICAgICB2YXIgYkNvbElzQWZ0ZXIgPSBlcXVhbFBvaW50c0luT3JkZXIgPyBwb2ludDEuY29sdW1uIDw9IHBvaW50Mi5jb2x1bW4gOiBwb2ludDEuY29sdW1uIDwgcG9pbnQyLmNvbHVtbjsKICAgICAgICByZXR1cm4gKHBvaW50MS5yb3cgPCBwb2ludDIucm93KSB8fCAocG9pbnQxLnJvdyA9PSBwb2ludDIucm93ICYmIGJDb2xJc0FmdGVyKTsKICAgIH0KICAgICAgICAgICAgCiAgICBmdW5jdGlvbiAkZ2V0VHJhbnNmb3JtZWRQb2ludChkZWx0YSwgcG9pbnQsIG1vdmVJZkVxdWFsKSB7CiAgICAgICAgdmFyIGRlbHRhSXNJbnNlcnQgPSBkZWx0YS5hY3Rpb24gPT0gImluc2VydCI7CiAgICAgICAgdmFyIGRlbHRhUm93U2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLnJvdyAgICAtIGRlbHRhLnN0YXJ0LnJvdyk7CiAgICAgICAgdmFyIGRlbHRhQ29sU2hpZnQgPSAoZGVsdGFJc0luc2VydCA/IDEgOiAtMSkgKiAoZGVsdGEuZW5kLmNvbHVtbiAtIGRlbHRhLnN0YXJ0LmNvbHVtbik7CiAgICAgICAgdmFyIGRlbHRhU3RhcnQgPSBkZWx0YS5zdGFydDsKICAgICAgICB2YXIgZGVsdGFFbmQgPSBkZWx0YUlzSW5zZXJ0ID8gZGVsdGFTdGFydCA6IGRlbHRhLmVuZDsgLy8gQ29sbGFwc2UgaW5zZXJ0IHJhbmdlLgogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihwb2ludCwgZGVsdGFTdGFydCwgbW92ZUlmRXF1YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICByb3c6IHBvaW50LnJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmICgkcG9pbnRzSW5PcmRlcihkZWx0YUVuZCwgcG9pbnQsICFtb3ZlSWZFcXVhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHJvdzogcG9pbnQucm93ICsgZGVsdGFSb3dTaGlmdCwKICAgICAgICAgICAgICAgIGNvbHVtbjogcG9pbnQuY29sdW1uICsgKHBvaW50LnJvdyA9PSBkZWx0YUVuZC5yb3cgPyBkZWx0YUNvbFNoaWZ0IDogMCkKICAgICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcm93OiBkZWx0YVN0YXJ0LnJvdywKICAgICAgICAgICAgY29sdW1uOiBkZWx0YVN0YXJ0LmNvbHVtbgogICAgICAgIH07CiAgICB9CiAgICB0aGlzLnNldFBvc2l0aW9uID0gZnVuY3Rpb24ocm93LCBjb2x1bW4sIG5vQ2xpcCkgewogICAgICAgIHZhciBwb3M7CiAgICAgICAgaWYgKG5vQ2xpcCkgewogICAgICAgICAgICBwb3MgPSB7CiAgICAgICAgICAgICAgICByb3c6IHJvdywKICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uCiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcG9zID0gdGhpcy4kY2xpcFBvc2l0aW9uVG9Eb2N1bWVudChyb3csIGNvbHVtbik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5yb3cgPT0gcG9zLnJvdyAmJiB0aGlzLmNvbHVtbiA9PSBwb3MuY29sdW1uKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBvbGQgPSB7CiAgICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4KICAgICAgICB9OwoKICAgICAgICB0aGlzLnJvdyA9IHBvcy5yb3c7CiAgICAgICAgdGhpcy5jb2x1bW4gPSBwb3MuY29sdW1uOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgewogICAgICAgICAgICBvbGQ6IG9sZCwKICAgICAgICAgICAgdmFsdWU6IHBvcwogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuZGV0YWNoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCB0aGlzLiRvbkNoYW5nZSk7CiAgICB9OwogICAgdGhpcy5hdHRhY2ggPSBmdW5jdGlvbihkb2MpIHsKICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jIHx8IHRoaXMuZG9jdW1lbnQ7CiAgICAgICAgdGhpcy5kb2N1bWVudC5vbigiY2hhbmdlIiwgdGhpcy4kb25DaGFuZ2UpOwogICAgfTsKICAgIHRoaXMuJGNsaXBQb3NpdGlvblRvRG9jdW1lbnQgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBwb3MgPSB7fTsKCiAgICAgICAgaWYgKHJvdyA+PSB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSBNYXRoLm1heCgwLCB0aGlzLmRvY3VtZW50LmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSB0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSAwOwogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHBvcy5yb3cgPSByb3c7CiAgICAgICAgICAgIHBvcy5jb2x1bW4gPSBNYXRoLm1pbih0aGlzLmRvY3VtZW50LmdldExpbmUocG9zLnJvdykubGVuZ3RoLCBNYXRoLm1heCgwLCBjb2x1bW4pKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb2x1bW4gPCAwKQogICAgICAgICAgICBwb3MuY29sdW1uID0gMDsKCiAgICAgICAgcmV0dXJuIHBvczsKICAgIH07Cgp9KS5jYWxsKEFuY2hvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9kb2N1bWVudCIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7Cgp2YXIgb29wID0gcmVxdWlyZSgiLi9saWIvb29wIik7CnZhciBhcHBseURlbHRhID0gcmVxdWlyZSgiLi9hcHBseV9kZWx0YSIpLmFwcGx5RGVsdGE7CnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCIuL2xpYi9ldmVudF9lbWl0dGVyIikuRXZlbnRFbWl0dGVyOwp2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7CnZhciBBbmNob3IgPSByZXF1aXJlKCIuL2FuY2hvciIpLkFuY2hvcjsKCnZhciBEb2N1bWVudCA9IGZ1bmN0aW9uKHRleHRPckxpbmVzKSB7CiAgICB0aGlzLiRsaW5lcyA9IFsiIl07CiAgICBpZiAodGV4dE9yTGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy4kbGluZXMgPSBbIiJdOwogICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRleHRPckxpbmVzKSkgewogICAgICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMoe3JvdzogMCwgY29sdW1uOiAwfSwgdGV4dE9yTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46MH0sIHRleHRPckxpbmVzKTsKICAgIH0KfTsKCihmdW5jdGlvbigpIHsKCiAgICBvb3AuaW1wbGVtZW50KHRoaXMsIEV2ZW50RW1pdHRlcik7CiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHZhciBsZW4gPSB0aGlzLmdldExlbmd0aCgpIC0gMTsKICAgICAgICB0aGlzLnJlbW92ZShuZXcgUmFuZ2UoMCwgMCwgbGVuLCB0aGlzLmdldExpbmUobGVuKS5sZW5ndGgpKTsKICAgICAgICB0aGlzLmluc2VydCh7cm93OiAwLCBjb2x1bW46IDB9LCB0ZXh0KTsKICAgIH07CiAgICB0aGlzLmdldFZhbHVlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsTGluZXMoKS5qb2luKHRoaXMuZ2V0TmV3TGluZUNoYXJhY3RlcigpKTsKICAgIH07CiAgICB0aGlzLmNyZWF0ZUFuY2hvciA9IGZ1bmN0aW9uKHJvdywgY29sdW1uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbmNob3IodGhpcywgcm93LCBjb2x1bW4pOwogICAgfTsKICAgIGlmICgiYWFhIi5zcGxpdCgvYS8pLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cclxufFxyL2csICJcbiIpLnNwbGl0KCJcbiIpOwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIHRoaXMuJHNwbGl0ID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdCgvXHJcbnxccnxcbi8pOwogICAgICAgIH07CiAgICB9CgoKICAgIHRoaXMuJGRldGVjdE5ld0xpbmUgPSBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgdmFyIG1hdGNoID0gdGV4dC5tYXRjaCgvXi4qPyhcclxufFxyfFxuKS9tKTsKICAgICAgICB0aGlzLiRhdXRvTmV3TGluZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiAiXG4iOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICBzd2l0Y2ggKHRoaXMuJG5ld0xpbmVNb2RlKSB7CiAgICAgICAgICBjYXNlICJ3aW5kb3dzIjoKICAgICAgICAgICAgcmV0dXJuICJcclxuIjsKICAgICAgICAgIGNhc2UgInVuaXgiOgogICAgICAgICAgICByZXR1cm4gIlxuIjsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiB0aGlzLiRhdXRvTmV3TGluZSB8fCAiXG4iOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy4kYXV0b05ld0xpbmUgPSAiIjsKICAgIHRoaXMuJG5ld0xpbmVNb2RlID0gImF1dG8iOwogICAgdGhpcy5zZXROZXdMaW5lTW9kZSA9IGZ1bmN0aW9uKG5ld0xpbmVNb2RlKSB7CiAgICAgICAgaWYgKHRoaXMuJG5ld0xpbmVNb2RlID09PSBuZXdMaW5lTW9kZSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICB0aGlzLiRuZXdMaW5lTW9kZSA9IG5ld0xpbmVNb2RlOwogICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlTmV3TGluZU1vZGUiKTsKICAgIH07CiAgICB0aGlzLmdldE5ld0xpbmVNb2RlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJG5ld0xpbmVNb2RlOwogICAgfTsKICAgIHRoaXMuaXNOZXdMaW5lID0gZnVuY3Rpb24odGV4dCkgewogICAgICAgIHJldHVybiAodGV4dCA9PSAiXHJcbiIgfHwgdGV4dCA9PSAiXHIiIHx8IHRleHQgPT0gIlxuIik7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lID0gZnVuY3Rpb24ocm93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzW3Jvd10gfHwgIiI7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lcyA9IGZ1bmN0aW9uKGZpcnN0Um93LCBsYXN0Um93KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICB9OwogICAgdGhpcy5nZXRBbGxMaW5lcyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmdldExpbmVzKDAsIHRoaXMuZ2V0TGVuZ3RoKCkpOwogICAgfTsKICAgIHRoaXMuZ2V0TGVuZ3RoID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuJGxpbmVzLmxlbmd0aDsKICAgIH07CiAgICB0aGlzLmdldFRleHRSYW5nZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkuam9pbih0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKSk7CiAgICB9OwogICAgdGhpcy5nZXRMaW5lc0ZvclJhbmdlID0gZnVuY3Rpb24ocmFuZ2UpIHsKICAgICAgICB2YXIgbGluZXM7CiAgICAgICAgaWYgKHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdykgewogICAgICAgICAgICBsaW5lcyA9IFt0aGlzLmdldExpbmUocmFuZ2Uuc3RhcnQucm93KS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQuY29sdW1uKV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGluZXMgPSB0aGlzLmdldExpbmVzKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2UuZW5kLnJvdyk7CiAgICAgICAgICAgIGxpbmVzWzBdID0gKGxpbmVzWzBdIHx8ICIiKS5zdWJzdHJpbmcocmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICAgICAgdmFyIGwgPSBsaW5lcy5sZW5ndGggLSAxOwogICAgICAgICAgICBpZiAocmFuZ2UuZW5kLnJvdyAtIHJhbmdlLnN0YXJ0LnJvdyA9PSBsKQogICAgICAgICAgICAgICAgbGluZXNbbF0gPSBsaW5lc1tsXS5zdWJzdHJpbmcoMCwgcmFuZ2UuZW5kLmNvbHVtbik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lczsKICAgIH07CiAgICB0aGlzLmluc2VydExpbmVzID0gZnVuY3Rpb24ocm93LCBsaW5lcykgewogICAgICAgIGNvbnNvbGUud2FybigiVXNlIG9mIGRvY3VtZW50Lmluc2VydExpbmVzIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgaW5zZXJ0RnVsbExpbmVzIG1ldGhvZCBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydEZ1bGxMaW5lcyhyb3csIGxpbmVzKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUxpbmVzID0gZnVuY3Rpb24oZmlyc3RSb3csIGxhc3RSb3cpIHsKICAgICAgICBjb25zb2xlLndhcm4oIlVzZSBvZiBkb2N1bWVudC5yZW1vdmVMaW5lcyBpcyBkZXByZWNhdGVkLiBVc2UgdGhlIHJlbW92ZUZ1bGxMaW5lcyBtZXRob2QgaW5zdGVhZC4iKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVGdWxsTGluZXMoZmlyc3RSb3csIGxhc3RSb3cpOwogICAgfTsKICAgIHRoaXMuaW5zZXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJVc2Ugb2YgZG9jdW1lbnQuaW5zZXJ0TmV3TGluZSBpcyBkZXByZWNhdGVkLiBVc2UgaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIFsnJywgJyddKSBpbnN0ZWFkLiIpOwogICAgICAgIHJldHVybiB0aGlzLmluc2VydE1lcmdlZExpbmVzKHBvc2l0aW9uLCBbIiIsICIiXSk7CiAgICB9OwogICAgdGhpcy5pbnNlcnQgPSBmdW5jdGlvbihwb3NpdGlvbiwgdGV4dCkgewogICAgICAgIGlmICh0aGlzLmdldExlbmd0aCgpIDw9IDEpCiAgICAgICAgICAgIHRoaXMuJGRldGVjdE5ld0xpbmUodGV4dCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMocG9zaXRpb24sIHRoaXMuJHNwbGl0KHRleHQpKTsKICAgIH07CiAgICB0aGlzLmluc2VydEluTGluZSA9IGZ1bmN0aW9uKHBvc2l0aW9uLCB0ZXh0KSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5wb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4gKyB0ZXh0Lmxlbmd0aCk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IFt0ZXh0XQogICAgICAgIH0sIHRydWUpOwogICAgICAgIAogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKGVuZCk7CiAgICB9OwogICAgCiAgICB0aGlzLmNsaXBwZWRQb3MgPSBmdW5jdGlvbihyb3csIGNvbHVtbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByb3cgPSBsZW5ndGg7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPCAwKSB7CiAgICAgICAgICAgIHJvdyA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChyb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHJvdyA9IGxlbmd0aCAtIDE7CiAgICAgICAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgdmFyIGxpbmUgPSB0aGlzLmdldExpbmUocm93KTsKICAgICAgICBpZiAoY29sdW1uID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgY29sdW1uID0gbGluZS5sZW5ndGg7CiAgICAgICAgY29sdW1uID0gTWF0aC5taW4oTWF0aC5tYXgoY29sdW1uLCAwKSwgbGluZS5sZW5ndGgpOwogICAgICAgIHJldHVybiB7cm93OiByb3csIGNvbHVtbjogY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMuY2xvbmVQb3MgPSBmdW5jdGlvbihwb3MpIHsKICAgICAgICByZXR1cm4ge3JvdzogcG9zLnJvdywgY29sdW1uOiBwb3MuY29sdW1ufTsKICAgIH07CiAgICAKICAgIHRoaXMucG9zID0gZnVuY3Rpb24ocm93LCBjb2x1bW4pIHsKICAgICAgICByZXR1cm4ge3Jvdzogcm93LCBjb2x1bW46IGNvbHVtbn07CiAgICB9OwogICAgCiAgICB0aGlzLiRjbGlwUG9zaXRpb24gPSBmdW5jdGlvbihwb3NpdGlvbikgewogICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmdldExlbmd0aCgpOwogICAgICAgIGlmIChwb3NpdGlvbi5yb3cgPj0gbGVuZ3RoKSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIGxlbmd0aCAtIDEpOwogICAgICAgICAgICBwb3NpdGlvbi5jb2x1bW4gPSB0aGlzLmdldExpbmUobGVuZ3RoIC0gMSkubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBvc2l0aW9uLnJvdyA9IE1hdGgubWF4KDAsIHBvc2l0aW9uLnJvdyk7CiAgICAgICAgICAgIHBvc2l0aW9uLmNvbHVtbiA9IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLmNvbHVtbiwgMCksIHRoaXMuZ2V0TGluZShwb3NpdGlvbi5yb3cpLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH07CiAgICB0aGlzLmluc2VydEZ1bGxMaW5lcyA9IGZ1bmN0aW9uKHJvdywgbGluZXMpIHsKICAgICAgICByb3cgPSBNYXRoLm1pbihNYXRoLm1heChyb3csIDApLCB0aGlzLmdldExlbmd0aCgpKTsKICAgICAgICB2YXIgY29sdW1uID0gMDsKICAgICAgICBpZiAocm93IDwgdGhpcy5nZXRMZW5ndGgoKSkgewogICAgICAgICAgICBsaW5lcyA9IGxpbmVzLmNvbmNhdChbIiJdKTsKICAgICAgICAgICAgY29sdW1uID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaW5lcyA9IFsiIl0uY29uY2F0KGxpbmVzKTsKICAgICAgICAgICAgcm93LS07CiAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuJGxpbmVzW3Jvd10ubGVuZ3RoOwogICAgICAgIH0KICAgICAgICB0aGlzLmluc2VydE1lcmdlZExpbmVzKHtyb3c6IHJvdywgY29sdW1uOiBjb2x1bW59LCBsaW5lcyk7CiAgICB9OyAgICAKICAgIHRoaXMuaW5zZXJ0TWVyZ2VkTGluZXMgPSBmdW5jdGlvbihwb3NpdGlvbiwgbGluZXMpIHsKICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLmNsaXBwZWRQb3MocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pOwogICAgICAgIHZhciBlbmQgPSB7CiAgICAgICAgICAgIHJvdzogc3RhcnQucm93ICsgbGluZXMubGVuZ3RoIC0gMSwKICAgICAgICAgICAgY29sdW1uOiAobGluZXMubGVuZ3RoID09IDEgPyBzdGFydC5jb2x1bW4gOiAwKSArIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aAogICAgICAgIH07CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAogICAgICAgICAgICBlbmQ6IGVuZCwKICAgICAgICAgICAgYWN0aW9uOiAiaW5zZXJ0IiwKICAgICAgICAgICAgbGluZXM6IGxpbmVzCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVQb3MoZW5kKTsKICAgIH07CiAgICB0aGlzLnJlbW92ZSA9IGZ1bmN0aW9uKHJhbmdlKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pOwogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKICAgICAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgICAgIGFjdGlvbjogInJlbW92ZSIsCiAgICAgICAgICAgIGxpbmVzOiB0aGlzLmdldExpbmVzRm9yUmFuZ2Uoe3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9KQogICAgICAgIH0pOwogICAgICAgIHJldHVybiB0aGlzLmNsb25lUG9zKHN0YXJ0KTsKICAgIH07CiAgICB0aGlzLnJlbW92ZUluTGluZSA9IGZ1bmN0aW9uKHJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbikgewogICAgICAgIHZhciBzdGFydCA9IHRoaXMuY2xpcHBlZFBvcyhyb3csIHN0YXJ0Q29sdW1uKTsKICAgICAgICB2YXIgZW5kID0gdGhpcy5jbGlwcGVkUG9zKHJvdywgZW5kQ29sdW1uKTsKICAgICAgICAKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgICAgIGVuZDogZW5kLAogICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICBsaW5lczogdGhpcy5nZXRMaW5lc0ZvclJhbmdlKHtzdGFydDogc3RhcnQsIGVuZDogZW5kfSkKICAgICAgICB9LCB0cnVlKTsKICAgICAgICAKICAgICAgICByZXR1cm4gdGhpcy5jbG9uZVBvcyhzdGFydCk7CiAgICB9OwogICAgdGhpcy5yZW1vdmVGdWxsTGluZXMgPSBmdW5jdGlvbihmaXJzdFJvdywgbGFzdFJvdykgewogICAgICAgIGZpcnN0Um93ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgZmlyc3RSb3cpLCB0aGlzLmdldExlbmd0aCgpIC0gMSk7CiAgICAgICAgbGFzdFJvdyAgPSBNYXRoLm1pbihNYXRoLm1heCgwLCBsYXN0Um93ICksIHRoaXMuZ2V0TGVuZ3RoKCkgLSAxKTsKICAgICAgICB2YXIgZGVsZXRlRmlyc3ROZXdMaW5lID0gbGFzdFJvdyA9PSB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiBmaXJzdFJvdyA+IDA7CiAgICAgICAgdmFyIGRlbGV0ZUxhc3ROZXdMaW5lICA9IGxhc3RSb3cgIDwgdGhpcy5nZXRMZW5ndGgoKSAtIDE7CiAgICAgICAgdmFyIHN0YXJ0Um93ID0gKCBkZWxldGVGaXJzdE5ld0xpbmUgPyBmaXJzdFJvdyAtIDEgICAgICAgICAgICAgICAgICA6IGZpcnN0Um93ICAgICAgICAgICAgICAgICAgICApOwogICAgICAgIHZhciBzdGFydENvbCA9ICggZGVsZXRlRmlyc3ROZXdMaW5lID8gdGhpcy5nZXRMaW5lKHN0YXJ0Um93KS5sZW5ndGggOiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICB2YXIgZW5kUm93ICAgPSAoIGRlbGV0ZUxhc3ROZXdMaW5lICA/IGxhc3RSb3cgKyAxICAgICAgICAgICAgICAgICAgIDogbGFzdFJvdyAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgdmFyIGVuZENvbCAgID0gKCBkZWxldGVMYXN0TmV3TGluZSAgPyAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0TGluZShlbmRSb3cpLmxlbmd0aCApOyAKICAgICAgICB2YXIgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCk7CiAgICAgICAgdmFyIGRlbGV0ZWRMaW5lcyA9IHRoaXMuJGxpbmVzLnNsaWNlKGZpcnN0Um93LCBsYXN0Um93ICsgMSk7CiAgICAgICAgCiAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgc3RhcnQ6IHJhbmdlLnN0YXJ0LAogICAgICAgICAgICBlbmQ6IHJhbmdlLmVuZCwKICAgICAgICAgICAgYWN0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgbGluZXM6IHRoaXMuZ2V0TGluZXNGb3JSYW5nZShyYW5nZSkKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZGVsZXRlZExpbmVzOwogICAgfTsKICAgIHRoaXMucmVtb3ZlTmV3TGluZSA9IGZ1bmN0aW9uKHJvdykgewogICAgICAgIGlmIChyb3cgPCB0aGlzLmdldExlbmd0aCgpIC0gMSAmJiByb3cgPj0gMCkgewogICAgICAgICAgICB0aGlzLmFwcGx5RGVsdGEoewogICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMucG9zKHJvdywgdGhpcy5nZXRMaW5lKHJvdykubGVuZ3RoKSwKICAgICAgICAgICAgICAgIGVuZDogdGhpcy5wb3Mocm93ICsgMSwgMCksCiAgICAgICAgICAgICAgICBhY3Rpb246ICJyZW1vdmUiLAogICAgICAgICAgICAgICAgbGluZXM6IFsiIiwgIiJdCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB0aGlzLnJlcGxhY2UgPSBmdW5jdGlvbihyYW5nZSwgdGV4dCkgewogICAgICAgIGlmICghKHJhbmdlIGluc3RhbmNlb2YgUmFuZ2UpKQogICAgICAgICAgICByYW5nZSA9IFJhbmdlLmZyb21Qb2ludHMocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CiAgICAgICAgaWYgKHRleHQubGVuZ3RoID09PSAwICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0OwogICAgICAgIGlmICh0ZXh0ID09IHRoaXMuZ2V0VGV4dFJhbmdlKHJhbmdlKSkKICAgICAgICAgICAgcmV0dXJuIHJhbmdlLmVuZDsKCiAgICAgICAgdGhpcy5yZW1vdmUocmFuZ2UpOwogICAgICAgIHZhciBlbmQ7CiAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgZW5kID0gdGhpcy5pbnNlcnQocmFuZ2Uuc3RhcnQsIHRleHQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZW5kID0gcmFuZ2Uuc3RhcnQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBlbmQ7CiAgICB9OwogICAgdGhpcy5hcHBseURlbHRhcyA9IGZ1bmN0aW9uKGRlbHRhcykgewogICAgICAgIGZvciAodmFyIGk9MDsgaTxkZWx0YXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGFzID0gZnVuY3Rpb24oZGVsdGFzKSB7CiAgICAgICAgZm9yICh2YXIgaT1kZWx0YXMubGVuZ3RoLTE7IGk+PTA7IGktLSkgewogICAgICAgICAgICB0aGlzLnJldmVydERlbHRhKGRlbHRhc1tpXSk7CiAgICAgICAgfQogICAgfTsKICAgIHRoaXMuYXBwbHlEZWx0YSA9IGZ1bmN0aW9uKGRlbHRhLCBkb05vdFZhbGlkYXRlKSB7CiAgICAgICAgdmFyIGlzSW5zZXJ0ID0gZGVsdGEuYWN0aW9uID09ICJpbnNlcnQiOwogICAgICAgIGlmIChpc0luc2VydCA/IGRlbHRhLmxpbmVzLmxlbmd0aCA8PSAxICYmICFkZWx0YS5saW5lc1swXQogICAgICAgICAgICA6ICFSYW5nZS5jb21wYXJlUG9pbnRzKGRlbHRhLnN0YXJ0LCBkZWx0YS5lbmQpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKGlzSW5zZXJ0ICYmIGRlbHRhLmxpbmVzLmxlbmd0aCA+IDIwMDAwKSB7CiAgICAgICAgICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhKGRlbHRhLCAyMDAwMCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhcHBseURlbHRhKHRoaXMuJGxpbmVzLCBkZWx0YSwgZG9Ob3RWYWxpZGF0ZSk7CiAgICAgICAgICAgIHRoaXMuX3NpZ25hbCgiY2hhbmdlIiwgZGVsdGEpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuJHNwbGl0QW5kYXBwbHlMYXJnZURlbHRhID0gZnVuY3Rpb24oZGVsdGEsIE1BWCkgewogICAgICAgIHZhciBsaW5lcyA9IGRlbHRhLmxpbmVzOwogICAgICAgIHZhciBsID0gbGluZXMubGVuZ3RoIC0gTUFYICsgMTsKICAgICAgICB2YXIgcm93ID0gZGVsdGEuc3RhcnQucm93OyAKICAgICAgICB2YXIgY29sdW1uID0gZGVsdGEuc3RhcnQuY29sdW1uOwogICAgICAgIGZvciAodmFyIGZyb20gPSAwLCB0byA9IDA7IGZyb20gPCBsOyBmcm9tID0gdG8pIHsKICAgICAgICAgICAgdG8gKz0gTUFYIC0gMTsKICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZXMuc2xpY2UoZnJvbSwgdG8pOwogICAgICAgICAgICBjaHVuay5wdXNoKCIiKTsKICAgICAgICAgICAgdGhpcy5hcHBseURlbHRhKHsKICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnBvcyhyb3cgKyBmcm9tLCBjb2x1bW4pLAogICAgICAgICAgICAgICAgZW5kOiB0aGlzLnBvcyhyb3cgKyB0bywgY29sdW1uID0gMCksCiAgICAgICAgICAgICAgICBhY3Rpb246IGRlbHRhLmFjdGlvbiwKICAgICAgICAgICAgICAgIGxpbmVzOiBjaHVuawogICAgICAgICAgICB9LCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZGVsdGEubGluZXMgPSBsaW5lcy5zbGljZShmcm9tKTsKICAgICAgICBkZWx0YS5zdGFydC5yb3cgPSByb3cgKyBmcm9tOwogICAgICAgIGRlbHRhLnN0YXJ0LmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICB0aGlzLmFwcGx5RGVsdGEoZGVsdGEsIHRydWUpOwogICAgfTsKICAgIHRoaXMucmV2ZXJ0RGVsdGEgPSBmdW5jdGlvbihkZWx0YSkgewogICAgICAgIHRoaXMuYXBwbHlEZWx0YSh7CiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmNsb25lUG9zKGRlbHRhLnN0YXJ0KSwKICAgICAgICAgICAgZW5kOiB0aGlzLmNsb25lUG9zKGRlbHRhLmVuZCksCiAgICAgICAgICAgIGFjdGlvbjogKGRlbHRhLmFjdGlvbiA9PSAiaW5zZXJ0IiA/ICJyZW1vdmUiIDogImluc2VydCIpLAogICAgICAgICAgICBsaW5lczogZGVsdGEubGluZXMuc2xpY2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIHRoaXMuaW5kZXhUb1Bvc2l0aW9uID0gZnVuY3Rpb24oaW5kZXgsIHN0YXJ0Um93KSB7CiAgICAgICAgdmFyIGxpbmVzID0gdGhpcy4kbGluZXMgfHwgdGhpcy5nZXRBbGxMaW5lcygpOwogICAgICAgIHZhciBuZXdsaW5lTGVuZ3RoID0gdGhpcy5nZXROZXdMaW5lQ2hhcmFjdGVyKCkubGVuZ3RoOwogICAgICAgIGZvciAodmFyIGkgPSBzdGFydFJvdyB8fCAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgIGluZGV4IC09IGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGg7CiAgICAgICAgICAgIGlmIChpbmRleCA8IDApCiAgICAgICAgICAgICAgICByZXR1cm4ge3JvdzogaSwgY29sdW1uOiBpbmRleCArIGxpbmVzW2ldLmxlbmd0aCArIG5ld2xpbmVMZW5ndGh9OwogICAgICAgIH0KICAgICAgICByZXR1cm4ge3JvdzogbC0xLCBjb2x1bW46IGluZGV4ICsgbGluZXNbbC0xXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RofTsKICAgIH07CiAgICB0aGlzLnBvc2l0aW9uVG9JbmRleCA9IGZ1bmN0aW9uKHBvcywgc3RhcnRSb3cpIHsKICAgICAgICB2YXIgbGluZXMgPSB0aGlzLiRsaW5lcyB8fCB0aGlzLmdldEFsbExpbmVzKCk7CiAgICAgICAgdmFyIG5ld2xpbmVMZW5ndGggPSB0aGlzLmdldE5ld0xpbmVDaGFyYWN0ZXIoKS5sZW5ndGg7CiAgICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgICB2YXIgcm93ID0gTWF0aC5taW4ocG9zLnJvdywgbGluZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRSb3cgfHwgMDsgaSA8IHJvdzsgKytpKQogICAgICAgICAgICBpbmRleCArPSBsaW5lc1tpXS5sZW5ndGggKyBuZXdsaW5lTGVuZ3RoOwoKICAgICAgICByZXR1cm4gaW5kZXggKyBwb3MuY29sdW1uOwogICAgfTsKCn0pLmNhbGwoRG9jdW1lbnQucHJvdG90eXBlKTsKCmV4cG9ydHMuRG9jdW1lbnQgPSBEb2N1bWVudDsKfSk7CgpkZWZpbmUoImFjZS9saWIvbGFuZyIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoidXNlIHN0cmljdCI7CgpleHBvcnRzLmxhc3QgPSBmdW5jdGlvbihhKSB7CiAgICByZXR1cm4gYVthLmxlbmd0aCAtIDFdOwp9OwoKZXhwb3J0cy5zdHJpbmdSZXZlcnNlID0gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIik7Cn07CgpleHBvcnRzLnN0cmluZ1JlcGVhdCA9IGZ1bmN0aW9uIChzdHJpbmcsIGNvdW50KSB7CiAgICB2YXIgcmVzdWx0ID0gJyc7CiAgICB3aGlsZSAoY291bnQgPiAwKSB7CiAgICAgICAgaWYgKGNvdW50ICYgMSkKICAgICAgICAgICAgcmVzdWx0ICs9IHN0cmluZzsKCiAgICAgICAgaWYgKGNvdW50ID4+PSAxKQogICAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfTsKCnZhciB0cmltQmVnaW5SZWdleHAgPSAvXlxzXHMqLzsKdmFyIHRyaW1FbmRSZWdleHAgPSAvXHNccyokLzsKCmV4cG9ydHMuc3RyaW5nVHJpbUxlZnQgPSBmdW5jdGlvbiAoc3RyaW5nKSB7CiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodHJpbUJlZ2luUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLnN0cmluZ1RyaW1SaWdodCA9IGZ1bmN0aW9uIChzdHJpbmcpIHsKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSh0cmltRW5kUmVnZXhwLCAnJyk7Cn07CgpleHBvcnRzLmNvcHlPYmplY3QgPSBmdW5jdGlvbihvYmopIHsKICAgIHZhciBjb3B5ID0ge307CiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CiAgICAgICAgY29weVtrZXldID0gb2JqW2tleV07CiAgICB9CiAgICByZXR1cm4gY29weTsKfTsKCmV4cG9ydHMuY29weUFycmF5ID0gZnVuY3Rpb24oYXJyYXkpewogICAgdmFyIGNvcHkgPSBbXTsKICAgIGZvciAodmFyIGk9MCwgbD1hcnJheS5sZW5ndGg7IGk8bDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldICYmIHR5cGVvZiBhcnJheVtpXSA9PSAib2JqZWN0IikKICAgICAgICAgICAgY29weVtpXSA9IHRoaXMuY29weU9iamVjdChhcnJheVtpXSk7CiAgICAgICAgZWxzZSAKICAgICAgICAgICAgY29weVtpXSA9IGFycmF5W2ldOwogICAgfQogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmRlZXBDb3B5ID0gZnVuY3Rpb24gZGVlcENvcHkob2JqKSB7CiAgICBpZiAodHlwZW9mIG9iaiAhPT0gIm9iamVjdCIgfHwgIW9iaikKICAgICAgICByZXR1cm4gb2JqOwogICAgdmFyIGNvcHk7CiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7CiAgICAgICAgY29weSA9IFtdOwogICAgICAgIGZvciAodmFyIGtleSA9IDA7IGtleSA8IG9iai5sZW5ndGg7IGtleSsrKSB7CiAgICAgICAgICAgIGNvcHlba2V5XSA9IGRlZXBDb3B5KG9ialtrZXldKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKQogICAgICAgIHJldHVybiBvYmo7CiAgICAKICAgIGNvcHkgPSB7fTsKICAgIGZvciAodmFyIGtleSBpbiBvYmopCiAgICAgICAgY29weVtrZXldID0gZGVlcENvcHkob2JqW2tleV0pOwogICAgcmV0dXJuIGNvcHk7Cn07CgpleHBvcnRzLmFycmF5VG9NYXAgPSBmdW5jdGlvbihhcnIpIHsKICAgIHZhciBtYXAgPSB7fTsKICAgIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICBtYXBbYXJyW2ldXSA9IDE7CiAgICB9CiAgICByZXR1cm4gbWFwOwoKfTsKCmV4cG9ydHMuY3JlYXRlTWFwID0gZnVuY3Rpb24ocHJvcHMpIHsKICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZm9yICh2YXIgaSBpbiBwcm9wcykgewogICAgICAgIG1hcFtpXSA9IHByb3BzW2ldOwogICAgfQogICAgcmV0dXJuIG1hcDsKfTsKZXhwb3J0cy5hcnJheVJlbW92ZSA9IGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogIGZvciAodmFyIGkgPSAwOyBpIDw9IGFycmF5Lmxlbmd0aDsgaSsrKSB7CiAgICBpZiAodmFsdWUgPT09IGFycmF5W2ldKSB7CiAgICAgIGFycmF5LnNwbGljZShpLCAxKTsKICAgIH0KICB9Cn07CgpleHBvcnRzLmVzY2FwZVJlZ0V4cCA9IGZ1bmN0aW9uKHN0cikgewogICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4qKz9eJHt9KCl8W1xdXC9cXF0pL2csICdcXCQxJyk7Cn07CgpleHBvcnRzLmVzY2FwZUhUTUwgPSBmdW5jdGlvbihzdHIpIHsKICAgIHJldHVybiAoIiIgKyBzdHIpLnJlcGxhY2UoLyYvZywgIiYjMzg7IikucmVwbGFjZSgvIi9nLCAiJiMzNDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiYjNjA7Iik7Cn07CgpleHBvcnRzLmdldE1hdGNoT2Zmc2V0cyA9IGZ1bmN0aW9uKHN0cmluZywgcmVnRXhwKSB7CiAgICB2YXIgbWF0Y2hlcyA9IFtdOwoKICAgIHN0cmluZy5yZXBsYWNlKHJlZ0V4cCwgZnVuY3Rpb24oc3RyKSB7CiAgICAgICAgbWF0Y2hlcy5wdXNoKHsKICAgICAgICAgICAgb2Zmc2V0OiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0yXSwKICAgICAgICAgICAgbGVuZ3RoOiBzdHIubGVuZ3RoCiAgICAgICAgfSk7CiAgICB9KTsKCiAgICByZXR1cm4gbWF0Y2hlczsKfTsKZXhwb3J0cy5kZWZlcnJlZENhbGwgPSBmdW5jdGlvbihmY24pIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBkZWZlcnJlZCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBkZWZlcnJlZC5jYW5jZWwoKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgMCk7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKCiAgICBkZWZlcnJlZC5zY2hlZHVsZSA9IGRlZmVycmVkOwoKICAgIGRlZmVycmVkLmNhbGwgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmNhbmNlbCgpOwogICAgICAgIGZjbigpOwogICAgICAgIHJldHVybiBkZWZlcnJlZDsKICAgIH07CgogICAgZGVmZXJyZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgcmV0dXJuIGRlZmVycmVkOwogICAgfTsKICAgIAogICAgZGVmZXJyZWQuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRpbWVyOwogICAgfTsKCiAgICByZXR1cm4gZGVmZXJyZWQ7Cn07CgoKZXhwb3J0cy5kZWxheWVkQ2FsbCA9IGZ1bmN0aW9uKGZjbiwgZGVmYXVsdFRpbWVvdXQpIHsKICAgIHZhciB0aW1lciA9IG51bGw7CiAgICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIHZhciBfc2VsZiA9IGZ1bmN0aW9uKHRpbWVvdXQpIHsKICAgICAgICBpZiAodGltZXIgPT0gbnVsbCkKICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCB0aW1lb3V0IHx8IGRlZmF1bHRUaW1lb3V0KTsKICAgIH07CgogICAgX3NlbGYuZGVsYXkgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTsKICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHRpbWVvdXQgfHwgZGVmYXVsdFRpbWVvdXQpOwogICAgfTsKICAgIF9zZWxmLnNjaGVkdWxlID0gX3NlbGY7CgogICAgX3NlbGYuY2FsbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuY2FuY2VsKCk7CiAgICAgICAgZmNuKCk7CiAgICB9OwoKICAgIF9zZWxmLmNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgdGltZXIgPSBudWxsOwogICAgfTsKCiAgICBfc2VsZi5pc1BlbmRpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGltZXI7CiAgICB9OwoKICAgIHJldHVybiBfc2VsZjsKfTsKfSk7CgpkZWZpbmUoImFjZS93b3JrZXIvbWlycm9yIixbXSwgZnVuY3Rpb24ocmVxdWlyZSwgZXhwb3J0cywgbW9kdWxlKSB7CiJ1c2Ugc3RyaWN0IjsKCnZhciBSYW5nZSA9IHJlcXVpcmUoIi4uL3JhbmdlIikuUmFuZ2U7CnZhciBEb2N1bWVudCA9IHJlcXVpcmUoIi4uL2RvY3VtZW50IikuRG9jdW1lbnQ7CnZhciBsYW5nID0gcmVxdWlyZSgiLi4vbGliL2xhbmciKTsKICAgIAp2YXIgTWlycm9yID0gZXhwb3J0cy5NaXJyb3IgPSBmdW5jdGlvbihzZW5kZXIpIHsKICAgIHRoaXMuc2VuZGVyID0gc2VuZGVyOwogICAgdmFyIGRvYyA9IHRoaXMuZG9jID0gbmV3IERvY3VtZW50KCIiKTsKICAgIAogICAgdmFyIGRlZmVycmVkVXBkYXRlID0gdGhpcy5kZWZlcnJlZFVwZGF0ZSA9IGxhbmcuZGVsYXllZENhbGwodGhpcy5vblVwZGF0ZS5iaW5kKHRoaXMpKTsKICAgIAogICAgdmFyIF9zZWxmID0gdGhpczsKICAgIHNlbmRlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oZSkgewogICAgICAgIHZhciBkYXRhID0gZS5kYXRhOwogICAgICAgIGlmIChkYXRhWzBdLnN0YXJ0KSB7CiAgICAgICAgICAgIGRvYy5hcHBseURlbHRhcyhkYXRhKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFbaSsxXSkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHthY3Rpb246ICJpbnNlcnQiLCBzdGFydDogZGF0YVtpXSwgbGluZXM6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhciBkID0ge2FjdGlvbjogInJlbW92ZSIsIHN0YXJ0OiBkYXRhW2ldLCBlbmQ6IGRhdGFbaSsxXX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb2MuYXBwbHlEZWx0YShkLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX3NlbGYuJHRpbWVvdXQpCiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZShfc2VsZi4kdGltZW91dCk7CiAgICAgICAgX3NlbGYub25VcGRhdGUoKTsKICAgIH0pOwp9OwoKKGZ1bmN0aW9uKCkgewogICAgCiAgICB0aGlzLiR0aW1lb3V0ID0gNTAwOwogICAgCiAgICB0aGlzLnNldFRpbWVvdXQgPSBmdW5jdGlvbih0aW1lb3V0KSB7CiAgICAgICAgdGhpcy4kdGltZW91dCA9IHRpbWVvdXQ7CiAgICB9OwogICAgCiAgICB0aGlzLnNldFZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICB0aGlzLmRvYy5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgdGhpcy5kZWZlcnJlZFVwZGF0ZS5zY2hlZHVsZSh0aGlzLiR0aW1lb3V0KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbihjYWxsYmFja0lkKSB7CiAgICAgICAgdGhpcy5zZW5kZXIuY2FsbGJhY2sodGhpcy5kb2MuZ2V0VmFsdWUoKSwgY2FsbGJhY2tJZCk7CiAgICB9OwogICAgCiAgICB0aGlzLm9uVXBkYXRlID0gZnVuY3Rpb24oKSB7CiAgICB9OwogICAgCiAgICB0aGlzLmlzUGVuZGluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0aGlzLmRlZmVycmVkVXBkYXRlLmlzUGVuZGluZygpOwogICAgfTsKICAgIAp9KS5jYWxsKE1pcnJvci5wcm90b3R5cGUpOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3hxdWVyeS94cWxpbnQiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKbW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gb3V0ZXIgKG1vZHVsZXMsIGNhY2hlLCBlbnRyeSkgewogICAgdmFyIHByZXZpb3VzUmVxdWlyZSA9IHR5cGVvZiByZXF1aXJlID09ICJmdW5jdGlvbiIgJiYgcmVxdWlyZTsKICAgIGZ1bmN0aW9uIG5ld1JlcXVpcmUobmFtZSwganVtcGVkKXsKICAgICAgICBpZighY2FjaGVbbmFtZV0pIHsKICAgICAgICAgICAgaWYoIW1vZHVsZXNbbmFtZV0pIHsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UmVxdWlyZSA9IHR5cGVvZiByZXF1aXJlID09ICJmdW5jdGlvbiIgJiYgcmVxdWlyZTsKICAgICAgICAgICAgICAgIGlmICghanVtcGVkICYmIGN1cnJlbnRSZXF1aXJlKSByZXR1cm4gY3VycmVudFJlcXVpcmUobmFtZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSZXF1aXJlKSByZXR1cm4gcHJldmlvdXNSZXF1aXJlKG5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlIFwnJyArIG5hbWUgKyAnXCcnKTsKICAgICAgICAgICAgICAgIGVyci5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOwogICAgICAgICAgICAgICAgdGhyb3cgZXJyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBtID0gY2FjaGVbbmFtZV0gPSB7ZXhwb3J0czp7fX07CiAgICAgICAgICAgIG1vZHVsZXNbbmFtZV1bMF0uY2FsbChtLmV4cG9ydHMsIGZ1bmN0aW9uKHgpewogICAgICAgICAgICAgICAgdmFyIGlkID0gbW9kdWxlc1tuYW1lXVsxXVt4XTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXdSZXF1aXJlKGlkID8gaWQgOiB4KTsKICAgICAgICAgICAgfSxtLG0uZXhwb3J0cyxvdXRlcixtb2R1bGVzLGNhY2hlLGVudHJ5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNhY2hlW25hbWVdLmV4cG9ydHM7CiAgICB9CiAgICBmb3IodmFyIGk9MDtpPGVudHJ5Lmxlbmd0aDtpKyspIG5ld1JlcXVpcmUoZW50cnlbaV0pOwogICAgcmV0dXJuIG5ld1JlcXVpcmUoZW50cnlbMF0pOwp9KQooeyIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvY29tcGlsZXIvZXJyb3JzLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciBpbml0ID0gZnVuY3Rpb24odGhhdCwgY29kZSwgbWVzc2FnZSwgcG9zLCB0eXBlKXsKICAgIGlmKCFjb2RlKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHR5cGUgKyAnIGNvZGUgaXMgbWlzc2luZy4nKTsKICAgIH0KICAgIAogICAgaWYoIW1lc3NhZ2UpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IodHlwZSArICcgbWVzc2FnZSBpcyBtaXNzaW5nLicpOwogICAgfQogICAgCiAgICBpZighcG9zKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHR5cGUgKyAnIHBvc2l0aW9uIGlzIG1pc3NpbmcuJyk7CiAgICB9CgogICAgdGhhdC5nZXRDb2RlID0gZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gY29kZTsKICAgIH07CiAgICAKICAgIHRoYXQuZ2V0TWVzc2FnZSA9IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CiAgICB9OwoKICAgIHRoYXQuZ2V0UG9zID0gZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gcG9zOwogICAgfTsKfTsKCnZhciBTdGF0aWNFcnJvciA9IHt9Owp2YXIgU3RhdGljV2FybmluZyA9IHt9OwpTdGF0aWNFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTsKU3RhdGljV2FybmluZy5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTsKCmV4cG9ydHMuU3RhdGljRXJyb3IgPSBTdGF0aWNFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBmdW5jdGlvbihjb2RlLCBtZXNzYWdlLCBwb3MpIHsKICAgIGluaXQodGhpcywgY29kZSwgbWVzc2FnZSwgcG9zLCAnRXJyb3InKTsKfTsKCmV4cG9ydHMuU3RhdGljV2FybmluZyA9IFN0YXRpY1dhcm5pbmcucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24oY29kZSwgbWVzc2FnZSwgcG9zKSB7CiAgICBpbml0KHRoaXMsIGNvZGUsIG1lc3NhZ2UsIHBvcywgJ1dhcm5pbmcnKTsKfTsKfSx7fV0sIi9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci9oYW5kbGVycy5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgVHJlZU9wcyA9IF9kZXJlcV8oJy4uL3RyZWVfb3BzJykuVHJlZU9wczsKdmFyIEVycm9ycyA9IF9kZXJlcV8oJy4vZXJyb3JzJyk7CnZhciBTdGF0aWNXYXJuaW5nID0gRXJyb3JzLlN0YXRpY1dhcm5pbmc7CmV4cG9ydHMuTW9kdWxlRGVjbCA9IGZ1bmN0aW9uKHRyYW5zbGF0b3IsIHJvb3RTY3R4LCBub2RlKXsKICAgIHZhciBwcmVmaXggPSAnJzsKICAgIHJldHVybiB7CiAgICAgICAgTkNOYW1lOiBmdW5jdGlvbihuY25hbWUpewogICAgICAgICAgICBwcmVmaXggPSBUcmVlT3BzLmZsYXR0ZW4obmNuYW1lKTsKICAgICAgICB9LAoKICAgICAgICBVUklMaXRlcmFsOiBmdW5jdGlvbih1cmkpIHsKICAgICAgICAgICAgdXJpID0gVHJlZU9wcy5mbGF0dGVuKHVyaSk7CiAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMSwgdXJpLmxlbmd0aCAtIDEpOwogICAgICAgICAgICB0cmFuc2xhdG9yLmFwcGx5KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICByb290U2N0eC5tb2R1bGVOYW1lc3BhY2UgPSB1cmk7CiAgICAgICAgICAgICAgICByb290U2N0eC5hZGROYW1lc3BhY2UodXJpLCBwcmVmaXgsIG5vZGUucG9zLCAnbW9kdWxlRGVjbCcpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9Owp9OwoKZXhwb3J0cy5Nb2R1bGVJbXBvcnQgPSBmdW5jdGlvbih0cmFuc2xhdG9yLCByb290U2N0eCwgbm9kZSkgewogICAgdmFyIHByZWZpeCA9ICcnOwogICAgdmFyIG1vZHVsZVVSSTsKCiAgICByZXR1cm4gewogICAgICAgIE5DTmFtZTogZnVuY3Rpb24obmNuYW1lKXsKICAgICAgICAgICAgcHJlZml4ID0gVHJlZU9wcy5mbGF0dGVuKG5jbmFtZSk7CiAgICAgICAgfSwKCiAgICAgICAgVVJJTGl0ZXJhbDogZnVuY3Rpb24odXJpKSB7CiAgICAgICAgICAgIGlmKG1vZHVsZVVSSSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXJpID0gVHJlZU9wcy5mbGF0dGVuKHVyaSk7CiAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMSwgdXJpLmxlbmd0aCAtIDEpOwogICAgICAgICAgICBtb2R1bGVVUkkgPSB1cmk7CiAgICAgICAgICAgIHRyYW5zbGF0b3IuYXBwbHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHJvb3RTY3R4LmltcG9ydE1vZHVsZSh1cmksIHByZWZpeCwgbm9kZS5wb3MpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9Owp9OwoKZXhwb3J0cy5TY2hlbWFJbXBvcnQgPSBmdW5jdGlvbih0cmFuc2xhdG9yLCByb290U2N0eCwgbm9kZSkgewogICAgdmFyIHByZWZpeCA9ICcnOwogICAgdmFyIHNjaGVtYVVSSTsKICAgIAogICAgcmV0dXJuIHsKICAgICAgICBTY2hlbWFQcmVmaXg6IGZ1bmN0aW9uKHNjaGVtYVByZWZpeCkgewogICAgICAgICAgICB2YXIgU2NoZW1hUHJlZml4SGFuZGxlciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHRoaXMuTkNOYW1lID0gZnVuY3Rpb24gKG5jbmFtZSkgewogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IFRyZWVPcHMuZmxhdHRlbihuY25hbWUpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdHJhbnNsYXRvci52aXNpdENoaWxkcmVuKHNjaGVtYVByZWZpeCwgbmV3IFNjaGVtYVByZWZpeEhhbmRsZXIoKSk7CiAgICAgICAgfSwKCiAgICAgICAgVVJJTGl0ZXJhbDogZnVuY3Rpb24odXJpKSB7CiAgICAgICAgICAgIGlmKHNjaGVtYVVSSSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdXJpID0gVHJlZU9wcy5mbGF0dGVuKHVyaSk7CiAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMSwgdXJpLmxlbmd0aCAtIDEpOwogICAgICAgICAgICBzY2hlbWFVUkkgPSB1cmk7CiAgICAgICAgICAgIHRyYW5zbGF0b3IuYXBwbHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHJvb3RTY3R4LmFkZE5hbWVzcGFjZSh1cmksIHByZWZpeCwgbm9kZS5wb3MsICdzY2hlbWEnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKfTsKCmV4cG9ydHMuRGVmYXVsdE5hbWVzcGFjZURlY2wgPSBmdW5jdGlvbih0cmFuc2xhdG9yLCByb290U2N0eCwgbm9kZSkgewogICAgdmFyIGZuID0gZmFsc2U7CiAgICB2YXIgbnMgPSAnJzsKCiAgICByZXR1cm4gewogICAgICAgIFRPS0VOOiBmdW5jdGlvbih0b2tlbil7CiAgICAgICAgICAgIGZuID0gZm4gPyB0cnVlIDogKHRva2VuLnZhbHVlID09PSAnZnVuY3Rpb24nKTsKICAgICAgICB9LAogICAgICAgIFVSSUxpdGVyYWw6IGZ1bmN0aW9uKHVyaSl7CiAgICAgICAgICAgIG5zID0gVHJlZU9wcy5mbGF0dGVuKHVyaSk7CiAgICAgICAgICAgIG5zID0gbnMuc3Vic3RyaW5nKDEsIG5zLmxlbmd0aCAtIDEpOwogICAgICAgICAgICBpZighZm4pIHsKICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IuYXBwbHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RhdGljV2FybmluZygnVzA2JywgJ0F2b2lkIGRlZmF1bHQgZWxlbWVudCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLicsIG5vZGUucG9zKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcm9vdFNjdHguZGVmYXVsdEVsZW1lbnROYW1lc3BhY2UgPSBuczsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJvb3RTY3R4LmRlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZSA9IG5zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKfTsKCmV4cG9ydHMuTmFtZXNwYWNlRGVjbCA9IGZ1bmN0aW9uKHRyYW5zbGF0b3IsIHJvb3RTY3R4LCBub2RlKSB7CiAgICB2YXIgcHJlZml4ID0gJyc7CiAgICByZXR1cm4gewogICAgICAgIE5DTmFtZTogZnVuY3Rpb24obmNuYW1lKSB7CiAgICAgICAgICAgIHByZWZpeCA9IFRyZWVPcHMuZmxhdHRlbihuY25hbWUpOwogICAgICAgIH0sCiAgICAgICAgVVJJTGl0ZXJhbDogZnVuY3Rpb24odXJpKSB7CiAgICAgICAgICAgIHVyaSA9IFRyZWVPcHMuZmxhdHRlbih1cmkpOwogICAgICAgICAgICB1cmkgPSB1cmkuc3Vic3RyaW5nKDEsIHVyaS5sZW5ndGggLSAxKTsKICAgICAgICAgICAgdHJhbnNsYXRvci5hcHBseShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgcm9vdFNjdHguYWRkTmFtZXNwYWNlKHVyaSwgcHJlZml4LCBub2RlLnBvcywgJ2RlY2xhcmUnKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKfTsKZXhwb3J0cy5WYXJIYW5kbGVyID0gZnVuY3Rpb24odHJhbnNsYXRvciwgc2N0eCwgbm9kZSl7CiAgICB2YXIgRVFOYW1lSGFuZGxlciA9IGZ1bmN0aW9uKGVxbmFtZSl7CiAgICAgICAgdmFyIHZhbHVlID0gVHJlZU9wcy5mbGF0dGVuKGVxbmFtZSk7CiAgICAgICAgdHJhbnNsYXRvci5hcHBseShmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgcW5hbWUgPSBzY3R4LnJlc29sdmVRTmFtZSh2YWx1ZSwgZXFuYW1lLnBvcyk7CiAgICAgICAgICAgIHNjdHguYWRkVmFyaWFibGUocW5hbWUsIG5vZGUubmFtZSwgZXFuYW1lLnBvcyk7CiAgICAgICAgfSk7CiAgICB9OwogICAgcmV0dXJuIHsKICAgICAgICBFeHByU2luZ2xlOiBmdW5jdGlvbigpeyByZXR1cm4gdHJ1ZTsgfSwKICAgICAgICBWYXJWYWx1ZTogZnVuY3Rpb24oKXsgcmV0dXJuIHRydWU7IH0sCiAgICAgICAgVmFyRGVmYXVsdFZhbHVlOiBmdW5jdGlvbigpeyByZXR1cm4gdHJ1ZTsgfSwKICAgICAgICBWYXJOYW1lOiBFUU5hbWVIYW5kbGVyLAogICAgICAgIEVRTmFtZTogRVFOYW1lSGFuZGxlcgogICAgfTsKfTsKCmV4cG9ydHMuVmFyUmVmSGFuZGxlciA9IGZ1bmN0aW9uKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpewogICAgcmV0dXJuIHsKICAgICAgICBWYXJOYW1lOiBmdW5jdGlvbihlcW5hbWUpewogICAgICAgICAgICB2YXIgdmFsdWUgPSBUcmVlT3BzLmZsYXR0ZW4oZXFuYW1lKTsKICAgICAgICAgICAgdHJhbnNsYXRvci5hcHBseShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIHFuYW1lID0gc2N0eC5yZXNvbHZlUU5hbWUodmFsdWUsIG5vZGUucG9zKTsKICAgICAgICAgICAgICAgIGlmKHFuYW1lLnVyaSAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBzY3R4LnJvb3QubmFtZXNwYWNlc1txbmFtZS51cmldLnVzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2N0eC5hZGRWYXJSZWYocW5hbWUsIGVxbmFtZS5wb3MpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9Owp9Owp9LHsiLi4vdHJlZV9vcHMiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvdHJlZV9vcHMuanMiLCIuL2Vycm9ycyI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci9lcnJvcnMuanMifV0sIi9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci9zY2hlbWFfYnVpbHQtaW5fdHlwZXMuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwpleHBvcnRzLmdldFNjaGVtYUJ1aWx0aW5UeXBlcyA9IGZ1bmN0aW9uKCl7CiAgICB2YXIgbnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnOwogICAgdmFyIFNjaGVtYUJ1aWx0aW5UeXBlcyA9IHt9OwogICAgU2NoZW1hQnVpbHRpblR5cGVzW25zXSA9IHsKICAgICAgICB2YXJpYWJsZXM6IHt9LAogICAgICAgIGZ1bmN0aW9uczoge30KICAgIH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjc3RyaW5nIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnc3RyaW5nJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnc3RyaW5nJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjYm9vbGVhbiMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2Jvb2xlYW4nLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdib29sZWFuJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZGVjaW1hbCMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2RlY2ltYWwnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdkZWNpbWFsJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZmxvYXQjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdmbG9hdCcsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ2Zsb2F0JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZG91YmxlIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnZG91YmxlJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnZG91YmxlJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZHVyYXRpb24jMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdkdXJhdGlvbicsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ2R1cmF0aW9uJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZGF0ZVRpbWUjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdkYXRlVGltZScsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ2RhdGVUaW1lJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdGltZSMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ3RpbWUnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICd0aW1lJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZGF0ZSMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2RhdGUnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdkYXRlJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZ1llYXJNb250aCMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2dZZWFyTW9udGgnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdnWWVhck1vbnRoJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZ1llYXIjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdnWWVhcicsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ2dZZWFyJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZ01vbnRoRGF5IzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnZ01vbnRoRGF5JywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnZ01vbnRoRGF5JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZ0RheSMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2dEYXknLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdnRGF5JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZ01vbnRoIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnZ01vbnRoJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnZ01vbnRoJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjaGV4QmluYXJ5IzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnaGV4QmluYXJ5JywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnaGV4QmluYXJ5JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjYmFzZTY0QmluYXJ5IzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnYmFzZTY0QmluYXJ5JywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnYmFzZTY0QmluYXJ5JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjYW55VVJJIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnYW55VVJJJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnYW55VVJJJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjUU5hbWUjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdRTmFtZScsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ1FOYW1lJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjbm9ybWFsaXplZFN0cmluZyMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ25vcm1hbGl6ZWRTdHJpbmcnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdub3JtYWxpemVkU3RyaW5nJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdG9rZW4jMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICd0b2tlbicsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ3Rva2VuJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjbGFuZ3VhZ2UjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdsYW5ndWFnZScsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ2xhbmd1YWdlJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjTk1UT0tFTiMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ05NVE9LRU4nLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdOTVRPS0VOJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjTmFtZSMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ05hbWUnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdOYW1lJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjTkNOYW1lIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnTkNOYW1lJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnTkNOYW1lJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjSUQjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdJRCcsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ0lEJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjSURSRUYjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdJRFJFRicsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ0lEUkVGJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjRU5USVRZIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnRU5USVRZJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnRU5USVRZJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjaW50ZWdlciMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2ludGVnZXInLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdpbnRlZ2VyJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjbm9uUG9zaXRpdmVJbnRlZ2VyIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnbm9uUG9zaXRpdmVJbnRlZ2VyJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnbm9uUG9zaXRpdmVJbnRlZ2VyJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjbmVnYXRpdmVJbnRlZ2VyIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnbmVnYXRpdmVJbnRlZ2VyJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnbmVnYXRpdmVJbnRlZ2VyJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjbG9uZyMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2xvbmcnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdsb25nJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjaW50IzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnaW50JywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnaW50JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjc2hvcnQjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICdzaG9ydCcsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ3Nob3J0JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjYnl0ZSMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ2J5dGUnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICdieXRlJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjbm9uTmVnYXRpdmVJbnRlZ2VyIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnbm9uTmVnYXRpdmVJbnRlZ2VyJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnbm9uTmVnYXRpdmVJbnRlZ2VyJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdW5zaWduZWRMb25nIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAndW5zaWduZWRMb25nJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAndW5zaWduZWRMb25nJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdW5zaWduZWRJbnQjMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICd1bnNpZ25lZEludCcsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ3Vuc2lnbmVkSW50JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdW5zaWduZWRTaG9ydCMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ3Vuc2lnbmVkU2hvcnQnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICd1bnNpZ25lZFNob3J0JyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdW5zaWduZWRCeXRlIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAndW5zaWduZWRCeXRlJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAndW5zaWduZWRCeXRlJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjcG9zaXRpdmVJbnRlZ2VyIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAncG9zaXRpdmVJbnRlZ2VyJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAncG9zaXRpdmVJbnRlZ2VyJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjeWVhck1vbnRoRHVyYXRpb24jMSddID0geyBwYXJhbXM6IFsnJGFyZyBhcyB4czphbnlBdG9taWNUeXBlPyddLCBhbm5vdGF0aW9uczogW10sIG5hbWU6ICd5ZWFyTW9udGhEdXJhdGlvbicsIGFyaXR5OiAxLCBlcW5hbWU6IHsgdXJpOiBucywgbmFtZTogJ3llYXJNb250aER1cmF0aW9uJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjZGF5VGltZUR1cmF0aW9uIzEnXSA9IHsgcGFyYW1zOiBbJyRhcmcgYXMgeHM6YW55QXRvbWljVHlwZT8nXSwgYW5ub3RhdGlvbnM6IFtdLCBuYW1lOiAnZGF5VGltZUR1cmF0aW9uJywgYXJpdHk6IDEsIGVxbmFtZTogeyB1cmk6IG5zLCBuYW1lOiAnZGF5VGltZUR1cmF0aW9uJyB9IH07CiAgICBTY2hlbWFCdWlsdGluVHlwZXNbbnNdLmZ1bmN0aW9uc1tucyArICcjdW50eXBlZEF0b21pYyMxJ10gPSB7IHBhcmFtczogWyckYXJnIGFzIHhzOmFueUF0b21pY1R5cGU/J10sIGFubm90YXRpb25zOiBbXSwgbmFtZTogJ3VudHlwZWRBdG9taWMnLCBhcml0eTogMSwgZXFuYW1lOiB7IHVyaTogbnMsIG5hbWU6ICd1bnR5cGVkQXRvbWljJyB9IH07CiAgICByZXR1cm4gU2NoZW1hQnVpbHRpblR5cGVzOwp9Owp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2NvbXBpbGVyL3N0YXRpY19jb250ZXh0LmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CmV4cG9ydHMuU3RhdGljQ29udGV4dCA9IGZ1bmN0aW9uIChwYXJlbnQsIHBvcykgewogICAgJ3VzZSBzdHJpY3QnOwogICAgCiAgICB2YXIgVHJlZU9wcyA9IF9kZXJlcV8oJy4uL3RyZWVfb3BzJykuVHJlZU9wczsKICAgIAogICAgdmFyIEVycm9ycyA9IF9kZXJlcV8oJy4vZXJyb3JzJyk7CiAgICB2YXIgU3RhdGljRXJyb3IgPSBFcnJvcnMuU3RhdGljRXJyb3I7CiAgICB2YXIgU3RhdGljV2FybmluZyA9IEVycm9ycy5TdGF0aWNXYXJuaW5nOwogICAgCiAgICB2YXIgZ2V0U2NoZW1hQnVpbHRpblR5cGVzID0gX2RlcmVxXygnLi9zY2hlbWFfYnVpbHQtaW5fdHlwZXMnKS5nZXRTY2hlbWFCdWlsdGluVHlwZXM7CiAgICAKICAgIHZhciBlbXB0eVBvcyA9IHsgc2w6MCwgc2M6IDAsIGVsOiAwLCBlYzogMCB9OwogICAgdmFyIG5hbWVzcGFjZXMgPSB7fTsKICAgIAogICAgdmFyIGdldFZhcktleSA9IGZ1bmN0aW9uKHFuYW1lKSB7CiAgICAgICAgcmV0dXJuIHFuYW1lLnVyaSArICcjJyArIHFuYW1lLm5hbWU7CiAgICB9OwoKICAgIHZhciBnZXRGbktleSA9IGZ1bmN0aW9uKHFuYW1lLCBhcml0eSkgewogICAgICAgIHJldHVybiBnZXRWYXJLZXkocW5hbWUpICsgJyMnICsgYXJpdHk7CiAgICB9OwoKICAgIGlmKCFwYXJlbnQpIHsKICAgICAgICBuYW1lc3BhY2VzWydodHRwOi8vanNvbmlxLm9yZy9mdW5jdGlvbnMnXSA9IHsKICAgICAgICAgICAgcHJlZml4ZXM6IFsnam4nXSwKICAgICAgICAgICAgcG9zOiBlbXB0eVBvcywKICAgICAgICAgICAgdHlwZTogJ21vZHVsZScsCiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlCiAgICAgICAgfTsKICAgICAgICBuYW1lc3BhY2VzWydodHRwOi8vd3d3LjI4bXNlYy5jb20vbW9kdWxlcy9jb2xsZWN0aW9ucyddID0gewogICAgICAgICAgICBwcmVmaXhlczogWydkYiddLAogICAgICAgICAgICBwb3M6IGVtcHR5UG9zLAogICAgICAgICAgICB0eXBlOiAnbW9kdWxlJywKICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUKICAgICAgICB9OwogICAgICAgIG5hbWVzcGFjZXNbJ2h0dHA6Ly93d3cuMjhtc2VjLmNvbS9tb2R1bGVzL3N0b3JlJ10gPSB7CiAgICAgICAgICAgIHByZWZpeGVzOiBbJ3N0b3JlJ10sCiAgICAgICAgICAgIHBvczogZW1wdHlQb3MsCiAgICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLAogICAgICAgICAgICBvdmVycmlkZTogdHJ1ZQogICAgICAgIH07CiAgICAgICAgbmFtZXNwYWNlc1snaHR0cDovL2pzb25pcS5vcmcvZnVuY3Rpb24tbGlicmFyeSddID0gewogICAgICAgICAgICBwcmVmaXhlczogWydsaWJqbiddLAogICAgICAgICAgICBwb3M6IGVtcHR5UG9zLAogICAgICAgICAgICB0eXBlOiAnbW9kdWxlJywKICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUKICAgICAgICB9OwogICAgICAgIG5hbWVzcGFjZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zJ10gPSB7CiAgICAgICAgICAgIHByZWZpeGVzOiBbJ2ZuJ10sCiAgICAgICAgICAgIHBvczogZW1wdHlQb3MsCiAgICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLAogICAgICAgICAgICBvdmVycmlkZTogdHJ1ZQogICAgICAgIH07CiAgICAgICAgbmFtZXNwYWNlc1snaHR0cDovL3d3dy53My5vcmcvMjAwNS94cXVlcnktbG9jYWwtZnVuY3Rpb25zJ10gPSB7CiAgICAgICAgICAgIHByZWZpeGVzOiBbJ2xvY2FsJ10sCiAgICAgICAgICAgIHBvczogZW1wdHlQb3MsCiAgICAgICAgICAgIHR5cGU6ICdkZWNsYXJlJywKICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUKICAgICAgICB9OwogICAgICAgIG5hbWVzcGFjZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJ10gPSB7CiAgICAgICAgICAgIHByZWZpeGVzOiBbJ3hzaSddLAogICAgICAgICAgICBwb3M6IGVtcHR5UG9zLAogICAgICAgICAgICB0eXBlOiAnZGVjbGFyZScKICAgICAgICB9OwogICAgICAgIG5hbWVzcGFjZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJ10gPSB7CiAgICAgICAgICAgIHByZWZpeGVzOiBbJ3hzJ10sCiAgICAgICAgICAgIHBvczogZW1wdHlQb3MsCiAgICAgICAgICAgIHR5cGU6ICdkZWNsYXJlJwogICAgICAgIH07CiAgICAgICAgbmFtZXNwYWNlc1snaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJ10gPSB7CiAgICAgICAgICAgIHByZWZpeGVzOiBbJ3htbCddLAogICAgICAgICAgICBwb3M6IGVtcHR5UG9zLAogICAgICAgICAgICB0eXBlOiAnZGVjbGFyZScKICAgICAgICB9OwogICAgICAgIG5hbWVzcGFjZXNbJ2h0dHA6Ly96b3JiYS5pby9hbm5vdGF0aW9ucyddID0gewogICAgICAgICAgICBwcmVmaXhlczogWydhbiddLAogICAgICAgICAgICBwb3M6IGVtcHR5UG9zLAogICAgICAgICAgICB0eXBlOiAnZGVjbGFyZScsCiAgICAgICAgICAgIG92ZXJyaWRlOiB0cnVlCiAgICAgICAgfTsKICAgICAgICBuYW1lc3BhY2VzWydodHRwOi8vd3d3LjI4bXNlYy5jb20vYW5ub3RhdGlvbnMvcmVzdCddID0gewogICAgICAgICAgICBwcmVmaXhlczogWydyZXN0J10sCiAgICAgICAgICAgIHBvczogZW1wdHlQb3MsCiAgICAgICAgICAgIHR5cGU6ICdkZWNsYXJlJywKICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUKICAgICAgICB9OwogICAgICAgIG5hbWVzcGFjZXNbJ2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHF0LWVycm9ycyddID0gewogICAgICAgICAgICBwcmVmaXhlczogWydlcnInXSwKICAgICAgICAgICAgcG9zOiBlbXB0eVBvcywKICAgICAgICAgICAgdHlwZTogJ2RlY2xhcmUnLAogICAgICAgICAgICBvdmVycmlkZTogdHJ1ZQogICAgICAgIH07CiAgICAgICAgbmFtZXNwYWNlc1snaHR0cDovL3pvcmJhLmlvL2Vycm9ycyddID0gewogICAgICAgICAgICBwcmVmaXhlczogWyd6ZXJyJ10sCiAgICAgICAgICAgIHBvczogZW1wdHlQb3MsCiAgICAgICAgICAgIHR5cGU6ICdkZWNsYXJlJywKICAgICAgICAgICAgb3ZlcnJpZGU6IHRydWUKICAgICAgICB9OwogICAgfQoKICAgIHZhciBzID0gewogICAgICAgIHBhcmVudDogcGFyZW50LAogICAgICAgIGNoaWxkcmVuOiBbXSwKICAgICAgICBwb3M6IHBvcywKICAgICAgICBzZXRNb2R1bGVSZXNvbHZlcjogZnVuY3Rpb24ocmVzb2x2ZXIpewogICAgICAgICAgICB0aGlzLnJvb3QubW9kdWxlUmVzb2x2ZXIgPSByZXNvbHZlcjsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKICAgICAgICBzZXRNb2R1bGVzOiBmdW5jdGlvbihpbmRleCl7CiAgICAgICAgICAgIGlmKHRoaXMgIT09IHRoaXMucm9vdCl7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldE1vZHVsZXMoKSBub3QgaW52b2tlZCBmcm9tIHRoZSByb290IHN0YXRpYyBjb250ZXh0LicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMubW9kdWxlUmVzb2x2ZXIgPSBmdW5jdGlvbih1cmkpewogICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4W3VyaV07CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5uYW1lc3BhY2VzKS5mb3JFYWNoKGZ1bmN0aW9uKHVyaSl7CiAgICAgICAgICAgICAgICB2YXIgbnMgPSB0aGF0Lm5hbWVzcGFjZXNbdXJpXTsKICAgICAgICAgICAgICAgIGlmKG5zLnR5cGUgPT09ICdtb2R1bGUnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IHRoYXQubW9kdWxlUmVzb2x2ZXIodXJpKTsKICAgICAgICAgICAgICAgICAgICBpZihtb2QudmFyaWFibGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVPcHMuY29uY2F0KHRoYXQudmFyaWFibGVzLCBtb2QudmFyaWFibGVzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYobW9kLmZ1bmN0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICBUcmVlT3BzLmNvbmNhdCh0aGF0LmZ1bmN0aW9ucywgbW9kLmZ1bmN0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKICAgICAgICBzZXRNb2R1bGVzRnJvbVhRRG9jOiBmdW5jdGlvbih4cWRvYyl7CiAgICAgICAgICAgIGlmKHRoaXMgIT09IHRoaXMucm9vdCl7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldE1vZHVsZXNGcm9tWFFEb2MoKSBub3QgaW52b2tlZCBmcm9tIHRoZSByb290IHN0YXRpYyBjb250ZXh0LicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBpbmRleCA9IHt9OwogICAgICAgICAgICBPYmplY3Qua2V5cyh4cWRvYykuZm9yRWFjaChmdW5jdGlvbih1cmkpIHsKICAgICAgICAgICAgICAgIHZhciBtb2QgPSB4cWRvY1t1cmldOwogICAgICAgICAgICAgICAgdmFyIHZhcmlhYmxlcyA9IHt9OwogICAgICAgICAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IHt9OwogICAgICAgICAgICAgICAgbW9kLmZ1bmN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGZuKXsKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNbdXJpICsgJyMnICsgZm4ubmFtZSArICcjJyArIGZuLmFyaXR5XSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IFtdLAogICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmbi5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBhcml0eTogZm4uYXJpdHksCiAgICAgICAgICAgICAgICAgICAgICAgIGVxbmFtZTogeyB1cmk6IHVyaSwgbmFtZTogZm4ubmFtZSB9CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBmbi5wYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24ocGFyYW0pewogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNbdXJpICsgJyMnICsgZm4ubmFtZSArICcjJyArIGZuLmFyaXR5XS5wYXJhbXMucHVzaCgnJCcgKyBwYXJhbS5uYW1lKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbW9kLnZhcmlhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHZhcmlhYmxlKXsKICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHZhcmlhYmxlLm5hbWUuc3Vic3RyaW5nKHZhcmlhYmxlLm5hbWUuaW5kZXhPZignOicpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW3VyaSArICcjJyArIG5hbWVdID0geyB0eXBlOiAnVmFyRGVjbCcsIGFubm90YXRpb25zOiBbXSwgZXFuYW1lOiB7IHVyaTogdXJpLCBuYW1lOiBuYW1lIH0gfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaW5kZXhbdXJpXSA9IHsKICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcywKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHRoaXMucm9vdC5tb2R1bGVSZXNvbHZlciA9IGZ1bmN0aW9uKHVyaSl7CiAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXhbdXJpXTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm5hbWVzcGFjZXMpLmZvckVhY2goZnVuY3Rpb24odXJpKXsKICAgICAgICAgICAgICAgIHZhciBucyA9IHRoYXQubmFtZXNwYWNlc1t1cmldOwogICAgICAgICAgICAgICAgaWYobnMudHlwZSA9PT0gJ21vZHVsZScpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gdGhhdC5tb2R1bGVSZXNvbHZlcih1cmkpOwogICAgICAgICAgICAgICAgICAgIGlmKG1vZC52YXJpYWJsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHJlZU9wcy5jb25jYXQodGhhdC52YXJpYWJsZXMsIG1vZC52YXJpYWJsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihtb2QuZnVuY3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVPcHMuY29uY2F0KHRoYXQuZnVuY3Rpb25zLCBtb2QuZnVuY3Rpb25zKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAogICAgICAgIG1vZHVsZU5hbWVzcGFjZTogJycsCiAgICAgICAgZGVzY3JpcHRpb246ICcnLAogICAgICAgIGRlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZTogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zJywKICAgICAgICBkZWZhdWx0RnVuY3Rpb25OYW1lc3BhY2VzOiBbCiAgICAgICAgICAgICdodHRwOi8vd3d3LjI4bXNlYy5jb20vbW9kdWxlcy9jb2xsZWN0aW9ucycsCiAgICAgICAgICAgICdodHRwOi8vd3d3LjI4bXNlYy5jb20vbW9kdWxlcy9zdG9yZScsCiAgICAgICAgICAgICdodHRwOi8vanNvbmlxLm9yZy9mdW5jdGlvbnMnLAogICAgICAgICAgICAnaHR0cDovL2pzb25pcS5vcmcvZnVuY3Rpb24tbGlicmFyeScsCiAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScgLy9CdWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9ycwogICAgICAgIF0sCiAgICAgICAgZGVmYXVsdEVsZW1lbnROYW1lc3BhY2U6ICcnLAogICAgICAgIG5hbWVzcGFjZXM6IG5hbWVzcGFjZXMsCiAgICAgICAgYXZhaWxhYmxlTW9kdWxlTmFtZXNwYWNlczogW10sCiAgICAgICAgaW1wb3J0TW9kdWxlOiBmdW5jdGlvbih1cmksIHByZWZpeCwgcG9zKSB7CiAgICAgICAgICAgIGlmKHRoaXMgIT09IHRoaXMucm9vdCl7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG5vdCBpbnZva2VkIGZyb20gdGhlIHJvb3Qgc3RhdGljIGNvbnRleHQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5hZGROYW1lc3BhY2UodXJpLCBwcmVmaXgsIHBvcywgJ21vZHVsZScpOwogICAgICAgICAgICBpZih0aGlzLm1vZHVsZVJlc29sdmVyKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSB0aGlzLm1vZHVsZVJlc29sdmVyKHVyaSwgW10pOwogICAgICAgICAgICAgICAgICAgIGlmKG1vZC52YXJpYWJsZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgVHJlZU9wcy5jb25jYXQodGhpcy52YXJpYWJsZXMsIG1vZC52YXJpYWJsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZihtb2QuZnVuY3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFRyZWVPcHMuY29uY2F0KHRoaXMuZnVuY3Rpb25zLCBtb2QuZnVuY3Rpb25zKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RhdGljRXJyb3IoJ1hRU1QwMDU5JywgJ21vZHVsZSAiJyArIHVyaSArICciIG5vdCBmb3VuZCcsIHBvcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgZ2V0QXZhaWxhYmxlTW9kdWxlTmFtZXNwYWNlczogZnVuY3Rpb24oKXsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5hdmFpbGFibGVNb2R1bGVOYW1lc3BhY2VzOwogICAgICAgIH0sCgogICAgICAgIGdldFByZWZpeGVzQnlOYW1lc3BhY2U6IGZ1bmN0aW9uKHVyaSl7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3QubmFtZXNwYWNlc1t1cmldLnByZWZpeGVzOwogICAgICAgIH0sCgogICAgICAgIGFkZE5hbWVzcGFjZTogZnVuY3Rpb24gKHVyaSwgcHJlZml4LCBwb3MsIHR5cGUpIHsKICAgICAgICAgICAgaWYocHJlZml4ID09PSAnJyAmJiB0eXBlID09PSAnbW9kdWxlJykgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN0YXRpY1dhcm5pbmcoJ1cwMScsICdBdm9pZCB0aGlzIHR5cGUgb2YgaW1wb3J0LiBVc2UgaW1wb3J0IG1vZHVsZSBuYW1lc3BhY2UgaW5zdGVhZCcsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHVyaSA9PT0gJycpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNFcnJvcignWFFTVDAwODgnLCAnZW1wdHkgdGFyZ2V0IG5hbWVzcGFjZSBpbiBtb2R1bGUgaW1wb3J0IG9yIG1vZHVsZSBkZWNsYXJhdGlvbicsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHRoaXMuZ2V0TmFtZXNwYWNlKHVyaSk7CiAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgJiYgbmFtZXNwYWNlLnR5cGUgPT09IHR5cGUgJiYgdHlwZSAhPT0gJ2RlY2xhcmUnICYmICFuYW1lc3BhY2Uub3ZlcnJpZGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNFcnJvcignWFFTVDAwNDcnLCAnIicgKyB1cmkgKyAnIjogZHVwbGljYXRlIHRhcmdldCBuYW1lc3BhY2UnLCBwb3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5hbWVzcGFjZSA9IHRoaXMuZ2V0TmFtZXNwYWNlQnlQcmVmaXgocHJlZml4KTsKICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSAmJiAhbmFtZXNwYWNlLm92ZXJyaWRlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RhdGljRXJyb3IoJ1hRU1QwMDMzJywgJyInICsgcHJlZml4ICsgJyI6IG5hbWVzcGFjZSBwcmVmaXggYWxyZWFkeSBib3VuZCB0byAiJyArIG5hbWVzcGFjZS51cmkgKyAnIicsIHBvcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlc1t1cmldOwogICAgICAgICAgICB2YXIgcHJlZml4ZXMgPSBbcHJlZml4XTsKICAgICAgICAgICAgaWYobmFtZXNwYWNlKSB7CiAgICAgICAgICAgICAgICBwcmVmaXhlcyA9IHByZWZpeGVzLmNvbmNhdCh0aGlzLm5hbWVzcGFjZXNbdXJpXS5wcmVmaXhlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2VzW3VyaV0gPSB7CiAgICAgICAgICAgICAgICBwcmVmaXhlczogcHJlZml4ZXMsCiAgICAgICAgICAgICAgICBwb3M6IHBvcywKICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlmIChuYW1lc3BhY2UpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNXYXJuaW5nKCdXMDInLCAnIicgKyB1cmkgKyAnIiBhbHJlYWR5IGJvdW5kIHRvIHRoZSAiJyArIG5hbWVzcGFjZS5wcmVmaXhlcy5qb2luKCcsICcpICsgJyIgcHJlZml4JywgcG9zKTsKICAgICAgICAgICAgfQoKICAgICAgICB9LAoKICAgICAgICBnZXROYW1lc3BhY2VzOiBmdW5jdGlvbigpewogICAgICAgICAgICByZXR1cm4gdGhpcy5yb290Lm5hbWVzcGFjZXM7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBnZXROYW1lc3BhY2U6IGZ1bmN0aW9uICh1cmkpIHsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB3aGlsZSAodGhhdCkgewogICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHRoYXQubmFtZXNwYWNlc1t1cmldOwogICAgICAgICAgICAgICAgaWYgKG5hbWVzcGFjZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGF0ID0gdGhhdC5wYXJlbnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgZ2V0TmFtZXNwYWNlQnlQcmVmaXg6IGZ1bmN0aW9uIChwcmVmaXgpIHsKICAgICAgICAgICAgdmFyIGZvdW5kID0gW107CiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKHVyaSkgewogICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHRoYXQubmFtZXNwYWNlc1t1cmldOwogICAgICAgICAgICAgICAgaWYgKG5hbWVzcGFjZS5wcmVmaXhlcy5pbmRleE9mKHByZWZpeCkgIT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlLnVyaSA9IHVyaTsKICAgICAgICAgICAgICAgICAgICBmb3VuZC5wdXNoKG5hbWVzcGFjZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgd2hpbGUgKHRoYXQpIHsKICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoYXQubmFtZXNwYWNlcykuZm9yRWFjaChoYW5kbGVyKTsKICAgICAgICAgICAgICAgIHRoYXQgPSB0aGF0LnBhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgICAgICBmb3VuZC5mb3JFYWNoKGZ1bmN0aW9uKG5zKXsKICAgICAgICAgICAgICAgIGlmKG5zLnR5cGUgPT09ICdtb2R1bGVEZWNsJykgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYocmVzdWx0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICByZXNvbHZlUU5hbWU6IGZ1bmN0aW9uKHZhbHVlLCBwb3MpewogICAgICAgICAgICB2YXIgcW5hbWUgPSB7CiAgICAgICAgICAgICAgICB1cmk6ICcnLAogICAgICAgICAgICAgICAgcHJlZml4OiAnJywKICAgICAgICAgICAgICAgIG5hbWU6ICcnCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHZhciBpZHg7CiAgICAgICAgICAgIGlmICh2YWx1ZS5zdWJzdHJpbmcoMCwgMikgPT09ICdReycpIHsKICAgICAgICAgICAgICAgIGlkeCA9IHZhbHVlLmluZGV4T2YoJ30nKTsKICAgICAgICAgICAgICAgIHFuYW1lLnVyaSA9IHZhbHVlLnN1YnN0cmluZygyLCBpZHgpOwogICAgICAgICAgICAgICAgcW5hbWUubmFtZSA9IHZhbHVlLnN1YnN0cmluZyhpZHggKyAxKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlkeCA9IHZhbHVlLmluZGV4T2YoJzonKTsKICAgICAgICAgICAgICAgIHFuYW1lLnByZWZpeCA9IHZhbHVlLnN1YnN0cmluZygwLCBpZHgpOwogICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IHRoaXMuZ2V0TmFtZXNwYWNlQnlQcmVmaXgocW5hbWUucHJlZml4KTsKICAgICAgICAgICAgICAgIGlmKCFuYW1lc3BhY2UgJiYgcW5hbWUucHJlZml4ICE9PSAnJyAmJiBbJ2ZuJywgJ2puJ10uaW5kZXhPZihxbmFtZS5wcmVmaXgpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNFcnJvcignWFBTVDAwODEnLCAnIicgKyBxbmFtZS5wcmVmaXggKyAnIjogY2FuIG5vdCBleHBhbmQgcHJlZml4IG9mIGxleGljYWwgUU5hbWUgdG8gbmFtZXNwYWNlIFVSSScsIHBvcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihuYW1lc3BhY2UpIHsKICAgICAgICAgICAgICAgICAgICBxbmFtZS51cmkgPSBuYW1lc3BhY2UudXJpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcW5hbWUubmFtZSA9IHZhbHVlLnN1YnN0cmluZyhpZHggKyAxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcW5hbWU7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB2YXJpYWJsZXM6IHt9LAogICAgICAgIHZhclJlZnM6IHt9LAogICAgICAgIGZ1bmN0aW9uQ2FsbHM6IHt9LAogICAgCiAgICAgICAgYWRkVmFyaWFibGU6IGZ1bmN0aW9uKHFuYW1lLCB0eXBlLCBwb3MpewogICAgICAgICAgICBpZigKICAgICAgICAgICAgICAgIHR5cGUgPT09ICdWYXJEZWNsJyAmJiB0aGlzLm1vZHVsZU5hbWVzcGFjZSAhPT0gJycgJiYKICAgICAgICAgICAgICAgICEodGhpcy5tb2R1bGVOYW1lc3BhY2UgPT09IHFuYW1lLnVyaSB8fCBxbmFtZS51cmkgPT09ICcnKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNFcnJvcignWFFTVDAwNDgnLCAnIicgKyBxbmFtZS5wcmVmaXggKyAnOicgKyBxbmFtZS5uYW1lICsgJyI6IFFuYW1lIG5vdCBsaWJyYXJ5IG5hbWVzcGFjZScsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGtleSA9IGdldFZhcktleShxbmFtZSk7CiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdWYXJEZWNsJyAmJiB0aGlzLnZhcmlhYmxlc1trZXldKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3RhdGljRXJyb3IoJ1hRU1QwMDQ5JywgJyInICsgcW5hbWUubmFtZSArICciOiBkdXBsaWNhdGUgdmFyaWFibGUgZGVjbGFyYXRpb24nLCBwb3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzW2tleV0gPSB7CiAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgcG9zOiBwb3MsCiAgICAgICAgICAgICAgICBxbmFtZTogcW5hbWUsCiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge30KICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBnZXRWYXJpYWJsZXM6IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHZhciB2YXJpYWJsZXMgPSB7fTsKICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGtleSl7CiAgICAgICAgICAgICAgICBpZighdmFyaWFibGVzW2tleV0pewogICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trZXldID0gdGhhdC52YXJpYWJsZXNba2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgd2hpbGUodGhhdCl7CiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGF0LnZhcmlhYmxlcykuZm9yRWFjaChoYW5kbGVyKTsKICAgICAgICAgICAgICAgIHRoYXQgPSB0aGF0LnBhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdmFyaWFibGVzOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgZ2V0VmFyaWFibGU6IGZ1bmN0aW9uKHFuYW1lKSB7CiAgICAgICAgICAgIHZhciBrZXkgPSBnZXRWYXJLZXkocW5hbWUpOwogICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgICAgICAgIHdoaWxlKHRoYXQpIHsKICAgICAgICAgICAgICAgIGlmKHRoYXQudmFyaWFibGVzW2tleV0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdC52YXJpYWJsZXNba2V5XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoYXQgPSB0aGF0LnBhcmVudDsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYWRkVmFyUmVmOiBmdW5jdGlvbihxbmFtZSwgcG9zKXsKICAgICAgICAgICAgdmFyIHZhckRlY2wgPSB0aGlzLmdldFZhcmlhYmxlKHFuYW1lKTsKICAgICAgICAgICAgaWYoIXZhckRlY2wgJiYgKHFuYW1lLnVyaSA9PT0gJycgfHwgdGhpcy5yb290Lm1vZHVsZVJlc29sdmVyKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN0YXRpY0Vycm9yKCdYUFNUMDAwOCcsICciJyArIHFuYW1lLm5hbWUgKyAnIjogdW5kZWNsYXJlZCB2YXJpYWJsZScsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGtleSA9IGdldFZhcktleShxbmFtZSk7CiAgICAgICAgICAgIHRoaXMudmFyUmVmc1trZXldID0gdHJ1ZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGFkZEZ1bmN0aW9uQ2FsbDogZnVuY3Rpb24ocW5hbWUsIGFyaXR5LCBwb3MpewogICAgICAgICAgICB2YXIgZm4gPSB0aGlzLmdldEZ1bmN0aW9uKHFuYW1lLCBhcml0eSk7CiAgICAgICAgICAgIGlmKCFmbiAmJiAocW5hbWUudXJpID09PSAnaHR0cDovL3d3dy53My5vcmcvMjAwNS94cXVlcnktbG9jYWwtZnVuY3Rpb25zJyB8fCB0aGlzLnJvb3QubW9kdWxlUmVzb2x2ZXIpKXsKICAgICAgICAgICAgICAgIGlmKChxbmFtZS51cmkgPT09ICdodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucycgfHwKICAgICAgICAgICAgICAgICAgICAocW5hbWUudXJpID09PSAnJyAmJiB0aGlzLnJvb3QuZGVmYXVsdEZ1bmN0aW9uTmFtZXNwYWNlcy5jb25jYXQodGhpcy5yb290LmRlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZSkuaW5kZXhPZignaHR0cDovL3d3dy53My5vcmcvMjAwNS94cGF0aC1mdW5jdGlvbnMnKSAhPT0gLTEpKSAmJiBxbmFtZS5uYW1lID09PSAnY29uY2F0JykgewogICAgICAgICAgICAgICAgfSBlbHNlIGlmKCFmbil7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN0YXRpY0Vycm9yKCdYUFNUMDAwOCcsICciJyArIHFuYW1lLm5hbWUgKyAnIycgKyBhcml0eSArICciOiB1bmRlY2xhcmVkIGZ1bmN0aW9uJywgcG9zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIga2V5ID0gZ2V0Rm5LZXkocW5hbWUsIGFyaXR5KTsKICAgICAgICAgICAgdGhpcy5mdW5jdGlvbkNhbGxzW2tleV0gPSB0cnVlOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgZnVuY3Rpb25zOiBnZXRTY2hlbWFCdWlsdGluVHlwZXMoKVsnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnXS5mdW5jdGlvbnMsCgogICAgICAgIGdldEZ1bmN0aW9uczogZnVuY3Rpb24oKXsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5mdW5jdGlvbnM7CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICBnZXRGdW5jdGlvbjogZnVuY3Rpb24ocW5hbWUsIGFyaXR5KXsKICAgICAgICAgICAgdmFyIGtleSA9IGdldEZuS2V5KHFuYW1lLCBhcml0eSk7CiAgICAgICAgICAgIHZhciBmbjsKICAgICAgICAgICAgaWYocW5hbWUudXJpID09PSAnJykgewogICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5yb290LmRlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZXMuY29uY2F0KFt0aGlzLnJvb3QuZGVmYXVsdEZ1bmN0aW9uTmFtZXNwYWNlXSkuZm9yRWFjaChmdW5jdGlvbihkZWZhdWx0RnVuY3Rpb25OYW1lc3BhY2UpewogICAgICAgICAgICAgICAgICAgIGlmKCFmbil7CiAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gdGhhdC5nZXRGdW5jdGlvbih7IHVyaTogZGVmYXVsdEZ1bmN0aW9uTmFtZXNwYWNlLCBwcmVmaXg6IHFuYW1lLnByZWZpeCwgbmFtZTogcW5hbWUubmFtZSB9LCBhcml0eSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5mdW5jdGlvbnNba2V5XTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYWRkRnVuY3Rpb246IGZ1bmN0aW9uKHFuYW1lLCBwb3MsIHBhcmFtcykgewogICAgICAgICAgICBpZih0aGlzICE9PSB0aGlzLnJvb3QpewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhZGRGdW5jdGlvbigpIG5vdCBpbnZva2VkIGZyb20gdGhlIHJvb3Qgc3RhdGljIGNvbnRleHQuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGFyaXR5ID0gcGFyYW1zLmxlbmd0aDsKICAgICAgICAgICAgaWYoCiAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWVzcGFjZSAhPT0gJycgJiYKICAgICAgICAgICAgICAgICEodGhpcy5tb2R1bGVOYW1lc3BhY2UgPT09IHFuYW1lLnVyaSB8fCAocW5hbWUudXJpID09PSAnJyAmJiB0aGlzLmRlZmF1bHRGdW5jdGlvbk5hbWVzcGFjZSA9PT0gdGhpcy5tb2R1bGVOYW1lc3BhY2UpKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNFcnJvcignWFFTVDAwNDgnLCAnIicgKyBxbmFtZS5wcmVmaXggKyAnOicgKyBxbmFtZS5uYW1lICsgJyI6IFFuYW1lIG5vdCBsaWJyYXJ5IG5hbWVzcGFjZScsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGtleSA9IGdldEZuS2V5KHFuYW1lLCBhcml0eSk7CiAgICAgICAgICAgIGlmKHRoaXMuZnVuY3Rpb25zW2tleV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTdGF0aWNFcnJvcignWFFTVDAwMzQnLCAnIicgKyBxbmFtZS5uYW1lICsgJyI6IGR1cGxpY2F0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbicsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5mdW5jdGlvbnNba2V5XSA9IHsKICAgICAgICAgICAgICAgIHBvczogcG9zLAogICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHMucm9vdCA9IHBhcmVudCA/IHBhcmVudC5yb290IDogczsKICAgIHJldHVybiBzOwp9OwoKfSx7Ii4uL3RyZWVfb3BzIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3RyZWVfb3BzLmpzIiwiLi9lcnJvcnMiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvY29tcGlsZXIvZXJyb3JzLmpzIiwiLi9zY2hlbWFfYnVpbHQtaW5fdHlwZXMiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvY29tcGlsZXIvc2NoZW1hX2J1aWx0LWluX3R5cGVzLmpzIn1dLCIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvY29tcGlsZXIvdHJhbnNsYXRvci5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewpleHBvcnRzLlRyYW5zbGF0b3IgPSBmdW5jdGlvbihyb290U3RjeCwgYXN0KXsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgRXJyb3JzID0gX2RlcmVxXygnLi9lcnJvcnMnKTsKICAgIHZhciBTdGF0aWNFcnJvciA9IEVycm9ycy5TdGF0aWNFcnJvcjsKICAgIHZhciBTdGF0aWNXYXJuaW5nID0gRXJyb3JzLlN0YXRpY1dhcm5pbmc7CiAgICAKICAgIHZhciBUcmVlT3BzID0gX2RlcmVxXygnLi4vdHJlZV9vcHMnKS5UcmVlT3BzOwogICAgdmFyIFN0YXRpY0NvbnRleHQgPSBfZGVyZXFfKCcuL3N0YXRpY19jb250ZXh0JykuU3RhdGljQ29udGV4dDsKICAgIHZhciBIYW5kbGVycyA9IF9kZXJlcV8oJy4vaGFuZGxlcnMnKTsKICAgIAogICAgdmFyIGdldCA9IGZ1bmN0aW9uKG5vZGUsIHBhdGgpewogICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICBpZihwYXRoLmxlbmd0aCA9PT0gMCl7CiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0KICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpewogICAgICAgICAgICBpZihjaGlsZC5uYW1lID09PSBwYXRoWzBdICYmIHBhdGgubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0KGNoaWxkLCBwYXRoLnNsaWNlKDEpKTsKICAgICAgICAgICAgfSBlbHNlIGlmKGNoaWxkLm5hbWUgPT09IHBhdGhbMF0pIHsKICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgCiAgICB2YXIgbWFya2VycyA9IFtdOwogICAgdGhpcy5hcHBseSA9IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm4oKTsKICAgICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgICAgaWYoZSBpbnN0YW5jZW9mIFN0YXRpY0Vycm9yKSB7CiAgICAgICAgICAgICAgICBhZGRTdGF0aWNFcnJvcihlKTsKICAgICAgICAgICAgfSBlbHNlIGlmKGUgaW5zdGFuY2VvZiBTdGF0aWNXYXJuaW5nKSB7CiAgICAgICAgICAgICAgICBhZGRXYXJuaW5nKGUuZ2V0Q29kZSgpLCBlLmdldE1lc3NhZ2UoKSwgZS5nZXRQb3MoKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgYWRkU3RhdGljRXJyb3IgPSBmdW5jdGlvbihlKXsKICAgICAgICBtYXJrZXJzLnB1c2goewogICAgICAgICAgICBwb3M6IGUuZ2V0UG9zKCksCiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsCiAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLAogICAgICAgICAgICBtZXNzYWdlOiAnWycgKyBlLmdldENvZGUoKSArICddICcgKyBlLmdldE1lc3NhZ2UoKQogICAgICAgIH0pOwogICAgfTsKICAgIAogICAgdmFyIGFkZFdhcm5pbmcgPSBmdW5jdGlvbihjb2RlLCBtZXNzYWdlLCBwb3MpIHsKICAgICAgICBtYXJrZXJzLnB1c2goewogICAgICAgICAgICBwb3M6IHBvcywKICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgICBsZXZlbDogJ3dhcm5pbmcnLAogICAgICAgICAgICBtZXNzYWdlOiAnWycgKyBjb2RlICsgJ10gJyArIG1lc3NhZ2UKICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuIG1hcmtlcnM7CiAgICB9OwoKICAgIHZhciB0cmFuc2xhdG9yID0gdGhpczsKCiAgICByb290U3RjeC5wb3MgPSBhc3QucG9zOwogICAgdmFyIHNjdHggPSByb290U3RjeDsKICAgIHZhciBwdXNoU2N0eCA9IGZ1bmN0aW9uKHBvcyl7CiAgICAgICAgc2N0eCA9IG5ldyBTdGF0aWNDb250ZXh0KHNjdHgsIHBvcyk7CiAgICAgICAgc2N0eC5wYXJlbnQuY2hpbGRyZW4ucHVzaChzY3R4KTsKICAgIH07CiAgICAKICAgIHZhciBwb3BTY3R4ID0gZnVuY3Rpb24ocG9zKXsKICAgICAgICBpZiAocG9zICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgc2N0eC5wb3MuZWwgPSBwb3MuZWw7CiAgICAgICAgICAgIHNjdHgucG9zLmVjID0gcG9zLmVjOwogICAgICAgIH0KCiAgICAgICAgT2JqZWN0LmtleXMoc2N0eC52YXJSZWZzKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7CiAgICAgICAgICAgIGlmKCFzY3R4LnZhcmlhYmxlc1trZXldKSB7CiAgICAgICAgICAgICAgICBzY3R4LnBhcmVudC52YXJSZWZzW2tleV0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgT2JqZWN0LmtleXMoc2N0eC52YXJpYWJsZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KXsKICAgICAgICAgICAgaWYoIXNjdHgudmFyUmVmc1trZXldICYmIHNjdHgudmFyaWFibGVzW2tleV0udHlwZSAhPT0gJ0dyb3VwaW5nVmFyaWFibGUnICYmIHNjdHgudmFyaWFibGVzW2tleV0udHlwZSAhPT0gJ0NhdGNoVmFyJykgewogICAgICAgICAgICAgICAgYWRkV2FybmluZygnVzAzJywgJ1VudXNlZCB2YXJpYWJsZSAiJCcgKyBzY3R4LnZhcmlhYmxlc1trZXldLnFuYW1lLm5hbWUgKyAnIicsIHNjdHgudmFyaWFibGVzW2tleV0ucG9zKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIHNjdHggPSBzY3R4LnBhcmVudDsKICAgIH07CiAgICAKICAgIHRoaXMudmlzaXRPbmx5ID0gZnVuY3Rpb24obm9kZSwgbmFtZXMpIHsKICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpewogICAgICAgICAgICBpZiAobmFtZXMuaW5kZXhPZihjaGlsZC5uYW1lKSAhPT0gLTEpewogICAgICAgICAgICAgICAgdHJhbnNsYXRvci52aXNpdChjaGlsZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH07CiAgICAKICAgIHRoaXMuZ2V0Rmlyc3RDaGlsZCA9IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHsKICAgICAgICB2YXIgcmVzdWx0OwogICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCl7CiAgICAgICAgICAgIGlmKGNoaWxkLm5hbWUgPT09IG5hbWUgJiYgcmVzdWx0ID09PSB1bmRlZmluZWQpewogICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hpbGQ7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKCiAgICB0aGlzLlhRdWVyeSA9IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICByb290U3RjeC5kZXNjcmlwdGlvbiA9IG5vZGUuY29tbWVudCA/IG5vZGUuY29tbWVudC5kZXNjcmlwdGlvbiA6IHVuZGVmaW5lZDsKICAgIH07CiAgICAKICAgIHRoaXMuTW9kdWxlRGVjbCA9IGZ1bmN0aW9uKG5vZGUpewogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5Nb2R1bGVEZWNsKHRyYW5zbGF0b3IsIHJvb3RTdGN4LCBub2RlKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLlByb2xvZyA9IGZ1bmN0aW9uKG5vZGUpewogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnRGVmYXVsdE5hbWVzcGFjZURlY2wnLCAnU2V0dGVyJywgJ05hbWVzcGFjZURlY2wnLCAnSW1wb3J0J10pOwogICAgICAgIGFzdC5pbmRleC5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpewogICAgICAgICAgICBpZihub2RlLm5hbWUgPT09ICdWYXJEZWNsJykgewogICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXsKICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC5uYW1lID09PSAnVmFyTmFtZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRvci5hcHBseShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gVHJlZU9wcy5mbGF0dGVuKGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxbmFtZSA9IHJvb3RTdGN4LnJlc29sdmVRTmFtZSh2YWx1ZSwgY2hpbGQucG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RTdGN4LmFkZFZhcmlhYmxlKHFuYW1lLCBub2RlLm5hbWUsIGNoaWxkLnBvcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgaWYobm9kZS5uYW1lID09PSAnRnVuY3Rpb25EZWNsJykgewogICAgICAgICAgICAgICAgdmFyIHFuYW1lLCBwb3MsIHBhcmFtcyA9IFtdOwogICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXsKICAgICAgICAgICAgICAgICAgICBpZihjaGlsZC5uYW1lID09PSAnRVFOYW1lJykgewogICAgICAgICAgICAgICAgICAgICAgICBxbmFtZSA9IGNoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBjaGlsZC5wb3M7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGNoaWxkLm5hbWUgPT09ICdQYXJhbUxpc3QnKXsKICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGMubmFtZSA9PT0gJ1BhcmFtJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKFRyZWVPcHMuZmxhdHRlbihjKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdHJhbnNsYXRvci5hcHBseShmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgIHFuYW1lID0gVHJlZU9wcy5mbGF0dGVuKHFuYW1lKTsKICAgICAgICAgICAgICAgICAgICBxbmFtZSA9IHJvb3RTdGN4LnJlc29sdmVRTmFtZShxbmFtZSwgcG9zKTsKICAgICAgICAgICAgICAgICAgICByb290U3RjeC5hZGRGdW5jdGlvbihxbmFtZSwgcG9zLCBwYXJhbXMpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLnZpc2l0T25seShub2RlLCBbJ0NvbnRleHRJdGVtRGVjbCcsICdBbm5vdGF0ZWREZWNsJywgJ09wdGlvbkRlY2wnXSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLk1vZHVsZUltcG9ydCA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLk1vZHVsZUltcG9ydCh0cmFuc2xhdG9yLCByb290U3RjeCwgbm9kZSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIAogICAgdGhpcy5TY2hlbWFJbXBvcnQgPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5TY2hlbWFJbXBvcnQodHJhbnNsYXRvciwgcm9vdFN0Y3gsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuRGVmYXVsdE5hbWVzcGFjZURlY2wgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSwgSGFuZGxlcnMuRGVmYXVsdE5hbWVzcGFjZURlY2wodHJhbnNsYXRvciwgcm9vdFN0Y3gsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuTmFtZXNwYWNlRGVjbCA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLk5hbWVzcGFjZURlY2wodHJhbnNsYXRvciwgcm9vdFN0Y3gsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHZhciBhbm5vdGF0aW9ucyA9IHt9OwogICAgdGhpcy5Bbm5vdGF0ZWREZWNsID0gZnVuY3Rpb24obm9kZSkgewogICAgICAgIGFubm90YXRpb25zID0ge307CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLk5hbWVzcGFjZURlY2wodHJhbnNsYXRvciwgcm9vdFN0Y3gsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuQ29tcGF0aWJpbGl0eUFubm90YXRpb24gPSBmdW5jdGlvbigpewogICAgICAgIGFubm90YXRpb25zWydodHRwOi8vd3d3LnczLm9yZy8yMDEyL3hxdWVyeSN1cGRhdGluZyddID0gW107CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLkFubm90YXRpb24gPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSwgewogICAgICAgICAgICBFUU5hbWU6IGZ1bmN0aW9uKGVxbmFtZSl7CiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBUcmVlT3BzLmZsYXR0ZW4oZXFuYW1lKTsKICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IuYXBwbHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgICAgICB2YXIgcW5hbWUgPSBzY3R4LnJlc29sdmVRTmFtZSh2YWx1ZSwgZXFuYW1lLnBvcyk7CiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNbcW5hbWUudXJpICsgJyMnICsgcW5hbWUubmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLlZhckRlY2wgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB0cnkgewogICAgICAgICAgICB2YXIgdmFybmFtZSA9IHRyYW5zbGF0b3IuZ2V0Rmlyc3RDaGlsZChub2RlLCAnVmFyTmFtZScpOwogICAgICAgICAgICB2YXIgdmFsdWUgPSBUcmVlT3BzLmZsYXR0ZW4odmFybmFtZSk7CiAgICAgICAgICAgIHZhciBxbmFtZSA9IHNjdHgucmVzb2x2ZVFOYW1lKHZhbHVlLCB2YXJuYW1lLnBvcyk7CiAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9IHJvb3RTdGN4LmdldFZhcmlhYmxlKHFuYW1lKTsKICAgICAgICAgICAgaWYodmFyaWFibGUpIHsKICAgICAgICAgICAgICAgIHZhcmlhYmxlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICAgICAgICAgICAgICB2YXJpYWJsZS5kZXNjcmlwdGlvbiA9IG5vZGUuZ2V0UGFyZW50LmNvbW1lbnQgPyBub2RlLmdldFBhcmVudC5jb21tZW50LmRlc2NyaXB0aW9uIDogdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgdmFyaWFibGUudHlwZSA9IFRyZWVPcHMuZmxhdHRlbihnZXQobm9kZSwgWydUeXBlRGVjbGFyYXRpb24nXSlbMF0pLnN1YnN0cmluZygyKS50cmltKCk7CiAgICAgICAgICAgICAgICB2YXIgbGFzdCA9IHZhcmlhYmxlLnR5cGUuc3Vic3RyaW5nKHZhcmlhYmxlLnR5cGUubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICBpZihsYXN0ID09PSAnPycpIHsKICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5vY2N1cnJlbmNlID0gMDsKICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS50eXBlID0gdmFyaWFibGUudHlwZS5zdWJzdHJpbmcoMCwgdmFyaWFibGUudHlwZS5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZihsYXN0ID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5vY2N1cnJlbmNlID0gLTE7CiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUudHlwZSA9IHZhcmlhYmxlLnR5cGUuc3Vic3RyaW5nKDAsIHZhcmlhYmxlLnR5cGUubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobGFzdCA9PT0gJysnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUub2NjdXJyZW5jZSA9IDI7CiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUudHlwZSA9IHZhcmlhYmxlLnR5cGUuc3Vic3RyaW5nKDAsIHZhcmlhYmxlLnR5cGUubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm9jY3VycmVuY2UgPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgfQogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnRXhwclNpbmdsZScsICdWYXJWYWx1ZScsICdWYXJEZWZhdWx0VmFsdWUnXSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLkZ1bmN0aW9uRGVjbCA9IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICB2YXIgaXNVcGRhdGluZyA9IGFubm90YXRpb25zWydodHRwOi8vd3d3LnczLm9yZy8yMDEyL3hxdWVyeSN1cGRhdGluZyddICE9PSB1bmRlZmluZWQ7CiAgICAgICAgdmFyIHR5cGVEZWNsID0gZ2V0KG5vZGUsIFsnUmV0dXJuVHlwZSddKVswXTsKICAgICAgICB2YXIgbmFtZSA9IGdldChub2RlLCBbJ0VRTmFtZSddKVswXTsKICAgICAgICBpZighdHlwZURlY2wgJiYgIWlzVXBkYXRpbmcpewogICAgICAgICAgICBhZGRXYXJuaW5nKCdXMDUnLCAnVW50eXBlZCByZXR1cm4gdmFsdWUnLCBuYW1lLnBvcyk7CiAgICAgICAgfQogICAgICAgIHZhciBpc0V4dGVybmFsID0gZmFsc2U7CiAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXsKICAgICAgICAgICAgaWYoY2hpbGQubmFtZSA9PT0gJ1RPS0VOJyAmJiBjaGlsZC52YWx1ZSA9PT0gJ2V4dGVybmFsJykgewogICAgICAgICAgICAgICAgaXNFeHRlcm5hbCA9IHRydWU7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZighaXNFeHRlcm5hbCkgewogICAgICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTsKICAgICAgICAgICAgcG9wU2N0eCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuVmFyUmVmID0gZnVuY3Rpb24obm9kZSkgewogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJSZWZIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuUGFyYW0gPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB2YXIgdHlwZURlY2wgPSBnZXQobm9kZSwgWydUeXBlRGVjbGFyYXRpb24nXSlbMF07CiAgICAgICAgaWYoIXR5cGVEZWNsKXsKICAgICAgICAgICAgYWRkV2FybmluZygnVzA1JywgJ1VudHlwZWQgZnVuY3Rpb24gcGFyYW1ldGVyJywgbm9kZS5wb3MpOwogICAgICAgIH0KICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSwgSGFuZGxlcnMuVmFySGFuZGxlcih0cmFuc2xhdG9yLCBzY3R4LCBub2RlKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLklubGluZUZ1bmN0aW9uRXhwcgk9IGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUpOwogICAgICAgIHBvcFNjdHgoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICB2YXIgc3RhdGVtZW50Q291bnQgPSBbXTsKICAgIHZhciBoYW5kbGVTdGF0ZW1lbnRzID0gZnVuY3Rpb24obm9kZSkgewogICAgICAgIHB1c2hTY3R4KG5vZGUucG9zKTsKICAgICAgICBzdGF0ZW1lbnRDb3VudC5wdXNoKDApOwogICAgICAgIHRyYW5zbGF0b3IudmlzaXRDaGlsZHJlbihub2RlKTsKICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBzdGF0ZW1lbnRDb3VudFtzdGF0ZW1lbnRDb3VudC5sZW5ndGggLSAxXTsgaSsrKSB7CiAgICAgICAgICAgIHBvcFNjdHgobm9kZS5wb3MpOwogICAgICAgIH0KICAgICAgICBzdGF0ZW1lbnRDb3VudC5wb3AoKTsKICAgICAgICBwb3BTY3R4KCk7CiAgICB9OwoKICAgIHRoaXMuU3RhdGVtZW50c0FuZE9wdGlvbmFsRXhwciA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgaGFuZGxlU3RhdGVtZW50cyhub2RlKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5TdGF0ZW1lbnRzQW5kRXhwciA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgaGFuZGxlU3RhdGVtZW50cyhub2RlKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5CbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgaGFuZGxlU3RhdGVtZW50cyhub2RlKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuVmFyRGVjbFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpewogICAgICAgIHB1c2hTY3R4KG5vZGUucG9zKTsKICAgICAgICBzdGF0ZW1lbnRDb3VudFtzdGF0ZW1lbnRDb3VudC5sZW5ndGggLSAxXSsrOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgIH07CiAgICB2YXIgY2xhdXNlcyA9IFtdOwogICAgdGhpcy5GTFdPUkV4cHIgPSB0aGlzLkZMV09SU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgY2xhdXNlcy5wdXNoKDApOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTsKICAgICAgICBmb3IodmFyIGk9MTsgaSA8PSBjbGF1c2VzW2NsYXVzZXMubGVuZ3RoIC0gMV07IGkrKykgewogICAgICAgICAgICBwb3BTY3R4KG5vZGUucG9zKTsKICAgICAgICB9CiAgICAgICAgY2xhdXNlcy5wb3AoKTsKICAgICAgICBwb3BTY3R4KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLkZvckJpbmRpbmcgPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnRXhwclNpbmdsZScsICdWYXJWYWx1ZScsICdWYXJEZWZhdWx0VmFsdWUnXSk7CiAgICAgICAgcHVzaFNjdHgobm9kZS5wb3MpOwogICAgICAgIGNsYXVzZXNbY2xhdXNlcy5sZW5ndGggLSAxXSsrOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuTGV0QmluZGluZyA9IGZ1bmN0aW9uKG5vZGUpewogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnRXhwclNpbmdsZScsICdWYXJWYWx1ZScsICdWYXJEZWZhdWx0VmFsdWUnXSk7CiAgICAgICAgcHVzaFNjdHgobm9kZS5wb3MpOwogICAgICAgIGNsYXVzZXNbY2xhdXNlcy5sZW5ndGggLSAxXSsrOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5Hcm91cGluZ1NwZWMgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB2YXIgaXNWYXJEZWNsID0gZmFsc2U7CiAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXsKICAgICAgICAgICAgaWYoY2hpbGQudmFsdWUgPT09ICc6PScpIHsKICAgICAgICAgICAgICAgIGlzVmFyRGVjbCA9IHRydWU7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZihpc1ZhckRlY2wpIHsKICAgICAgICAgICAgdmFyIGdyb3VwaW5nVmFyaWFibGUgPSBub2RlLmNoaWxkcmVuWzBdOwogICAgICAgICAgICB0aGlzLnZpc2l0T25seShub2RlLCBbJ0V4cHJTaW5nbGUnLCAnVmFyVmFsdWUnLCAnVmFyRGVmYXVsdFZhbHVlJ10pOwogICAgICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgICAgIGNsYXVzZXNbY2xhdXNlcy5sZW5ndGggLSAxXSsrOwogICAgICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4oZ3JvdXBpbmdWYXJpYWJsZSwgSGFuZGxlcnMuVmFySGFuZGxlcih0cmFuc2xhdG9yLCBzY3R4LCBncm91cGluZ1ZhcmlhYmxlKSk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIAogICAgICAgIH0KICAgIH07CiAgICAKICAgIHRoaXMuVHVtYmxpbmdXaW5kb3dDbGF1c2UgPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnRXhwclNpbmdsZSddKTsKICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgY2xhdXNlc1tjbGF1c2VzLmxlbmd0aCAtIDFdKys7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLlZhckhhbmRsZXIodHJhbnNsYXRvciwgc2N0eCwgbm9kZSkpOwogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnV2luZG93U3RhcnRDb25kaXRpb24nLCAnV2luZG93RW5kQ29uZGl0aW9uJ10pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLldpbmRvd1ZhcnMgPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHB1c2hTY3R4KG5vZGUucG9zKTsKICAgICAgICBjbGF1c2VzW2NsYXVzZXMubGVuZ3RoIC0gMV0rKzsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSwgSGFuZGxlcnMuVmFySGFuZGxlcih0cmFuc2xhdG9yLCBzY3R4LCBub2RlKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwoKICAgIHRoaXMuU2xpZGluZ1dpbmRvd0NsYXVzZSA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgdGhpcy52aXNpdE9ubHkobm9kZSwgWydFeHByU2luZ2xlJywgJ1ZhclZhbHVlJywgJ1ZhckRlZmF1bHRWYWx1ZSddKTsKICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgY2xhdXNlc1tjbGF1c2VzLmxlbmd0aCAtIDFdKys7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLlZhckhhbmRsZXIodHJhbnNsYXRvciwgc2N0eCwgbm9kZSkpOwogICAgICAgIHRoaXMudmlzaXRPbmx5KG5vZGUsIFsnV2luZG93U3RhcnRDb25kaXRpb24nLCAnV2luZG93RW5kQ29uZGl0aW9uJ10pOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLlBvc2l0aW9uYWxWYXIgPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5Qb3NpdGlvbmFsVmFyID0gZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSwgSGFuZGxlcnMuVmFySGFuZGxlcih0cmFuc2xhdG9yLCBzY3R4LCBub2RlKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwoKICAgIHRoaXMuQ3VycmVudEl0ZW0gPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5QcmV2aW91c0l0ZW0gPSBmdW5jdGlvbiAobm9kZSkgewogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CgogICAgdGhpcy5OZXh0SXRlbSA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLlZhckhhbmRsZXIodHJhbnNsYXRvciwgc2N0eCwgbm9kZSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLkNvdW50Q2xhdXNlID0gZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgY2xhdXNlc1tjbGF1c2VzLmxlbmd0aCAtIDFdKys7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLlZhckhhbmRsZXIodHJhbnNsYXRvciwgc2N0eCwgbm9kZSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLkNhc2VDbGF1c2UgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgcHVzaFNjdHgobm9kZS5wb3MpOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICB0aGlzLnZpc2l0T25seShub2RlLCBbJ0V4cHJTaW5nbGUnXSk7CiAgICAgICAgcG9wU2N0eCgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIHZhciBjb3BpZXMgPSBbXTsKICAgIHRoaXMuVHJhbnNmb3JtRXhwciA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgcHVzaFNjdHgobm9kZS5wb3MpOwogICAgICAgIGNvcGllcy5wdXNoKDApOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTsKICAgICAgICBmb3IodmFyIGk9MTsgaSA8PSBjb3BpZXNbY29waWVzLmxlbmd0aCAtIDFdOyBpKyspIHsKICAgICAgICAgICAgcG9wU2N0eChub2RlLnBvcyk7CiAgICAgICAgfQogICAgICAgIGNvcGllcy5wb3AoKTsKICAgICAgICBwb3BTY3R4KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLlRyYW5zZm9ybVNwZWMgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgdGhpcy52aXNpdE9ubHkobm9kZSwgWydFeHByU2luZ2xlJ10pOwogICAgICAgIHB1c2hTY3R4KG5vZGUucG9zKTsKICAgICAgICBjb3BpZXNbY29waWVzLmxlbmd0aC0xXSArPSAxOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlLCBIYW5kbGVycy5WYXJIYW5kbGVyKHRyYW5zbGF0b3IsIHNjdHgsIG5vZGUpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICB2YXIgcXVhbnRpZmllZERlY2xzID0gW107CiAgICB0aGlzLlF1YW50aWZpZWRFeHByID0gZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgcXVhbnRpZmllZERlY2xzLnB1c2goMCk7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUpOwogICAgICAgIGZvcih2YXIgaT0xOyBpIDw9IHF1YW50aWZpZWREZWNsc1txdWFudGlmaWVkRGVjbHMubGVuZ3RoIC0gMV07IGkrKykgewogICAgICAgICAgICBwb3BTY3R4KG5vZGUucG9zKTsKICAgICAgICB9CiAgICAgICAgcXVhbnRpZmllZERlY2xzLnBvcCgpOwogICAgICAgIHBvcFNjdHgoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuUXVhbnRpZmllZFZhckRlY2wgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgdGhpcy52aXNpdE9ubHkobm9kZSwgWydFeHByU2luZ2xlJ10pOwogICAgICAgIHB1c2hTY3R4KG5vZGUucG9zKTsKICAgICAgICBxdWFudGlmaWVkRGVjbHNbcXVhbnRpZmllZERlY2xzLmxlbmd0aCAtIDFdKys7CiAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUsIEhhbmRsZXJzLlZhckhhbmRsZXIodHJhbnNsYXRvciwgc2N0eCwgbm9kZSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIAogICAgdGhpcy5GdW5jdGlvbkNhbGwgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB0aGlzLnZpc2l0T25seShub2RlLCBbJ0FyZ3VtZW50TGlzdCddKTsKICAgICAgICB2YXIgbmFtZSA9IHRyYW5zbGF0b3IuZ2V0Rmlyc3RDaGlsZChub2RlLCAnRVFOYW1lJyk7CiAgICAgICAgdmFyIGVxbmFtZSA9IFRyZWVPcHMuZmxhdHRlbihuYW1lKTsKICAgICAgICB2YXIgYXJpdHkgPSBnZXQobm9kZSwgWydBcmd1bWVudExpc3QnLCAnQXJndW1lbnQnXSkubGVuZ3RoOwogICAgICAgIHRyYW5zbGF0b3IuYXBwbHkoZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIHFuYW1lID0gc2N0eC5yZXNvbHZlUU5hbWUoZXFuYW1lLCBub2RlLnBvcyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZihxbmFtZS51cmkgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgc2N0eC5yb290Lm5hbWVzcGFjZXNbcW5hbWUudXJpXS51c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaChlKXsKICAgICAgICAgICAgfQogICAgICAgICAgICBzY3R4LmFkZEZ1bmN0aW9uQ2FsbChxbmFtZSwgYXJpdHksIG5hbWUucG9zKTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07CiAgICAKICAgIHRoaXMuVHJ5Q2xhdXNlID0gZnVuY3Rpb24obm9kZSl7CiAgICAgICAgcHVzaFNjdHgobm9kZS5wb3MpOwogICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTsKICAgICAgICBwb3BTY3R4KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLkNhdGNoQ2xhdXNlID0gZnVuY3Rpb24obm9kZSl7CiAgICAgICAgcHVzaFNjdHgobm9kZS5wb3MpOwogICAgICAgIHZhciBwcmVmaXggPSAnZXJyJzsKICAgICAgICB2YXIgdXJpID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHF0LWVycm9ycyc7CiAgICAgICAgdmFyIGVtcHR5UG9zID0geyBzbDogMCwgc2M6IDAsIGVsOiAwLCBlYzogMCB9OwogICAgICAgIHNjdHguYWRkVmFyaWFibGUoeyBwcmVmaXg6IHByZWZpeCwgdXJpOiB1cmksIG5hbWU6ICdjb2RlJyB9LCAnQ2F0Y2hWYXInLCBlbXB0eVBvcyk7CiAgICAgICAgc2N0eC5hZGRWYXJpYWJsZSh7IHByZWZpeDogcHJlZml4LCB1cmk6IHVyaSwgbmFtZTogJ2Rlc2NyaXB0aW9uJyB9LCAnQ2F0Y2hWYXInLCBlbXB0eVBvcyk7CiAgICAgICAgc2N0eC5hZGRWYXJpYWJsZSh7IHByZWZpeDogcHJlZml4LCB1cmk6IHVyaSwgbmFtZTogJ3ZhbHVlJyB9LCAnQ2F0Y2hWYXInLCBlbXB0eVBvcyk7CiAgICAgICAgc2N0eC5hZGRWYXJpYWJsZSh7IHByZWZpeDogcHJlZml4LCB1cmk6IHVyaSwgbmFtZTogJ21vZHVsZScgfSwgJ0NhdGNoVmFyJywgZW1wdHlQb3MpOwogICAgICAgIHNjdHguYWRkVmFyaWFibGUoeyBwcmVmaXg6IHByZWZpeCwgdXJpOiB1cmksIG5hbWU6ICdsaW5lLW51bWJlcicgfSwgJ0NhdGNoVmFyJywgZW1wdHlQb3MpOwogICAgICAgIHNjdHguYWRkVmFyaWFibGUoeyBwcmVmaXg6IHByZWZpeCwgdXJpOiB1cmksIG5hbWU6ICdjb2x1bW4tbnVtYmVyJyB9LCAnQ2F0Y2hWYXInLCBlbXB0eVBvcyk7CiAgICAgICAgc2N0eC5hZGRWYXJpYWJsZSh7IHByZWZpeDogcHJlZml4LCB1cmk6IHVyaSwgbmFtZTogJ2FkZGl0aW9uYWwnIH0sICdDYXRjaFZhcicsIGVtcHR5UG9zKTsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICAgICAgcG9wU2N0eCgpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB0aGlzLlByYWdtYSA9IGZ1bmN0aW9uKG5vZGUpewogICAgICAgIHZhciBxbmFtZSA9IFRyZWVPcHMuZmxhdHRlbihnZXQobm9kZSwgWydFUU5hbWUnXSlbMF0pOwogICAgICAgIHFuYW1lID0gcm9vdFN0Y3gucmVzb2x2ZVFOYW1lKHFuYW1lLCBub2RlKTsKICAgICAgICB2YXIgdmFsdWUgPSBUcmVlT3BzLmZsYXR0ZW4oZ2V0KG5vZGUsIFsnUHJhZ21hQ29udGVudHMnXSlbMF0pOwogICAgICAgIGlmIChxbmFtZS5uYW1lID09PSAneHFsaW50JyAmJiBxbmFtZS51cmkgPT09ICdodHRwOi8veHFsaW50LmlvJykgewogICAgICAgICAgICBwdXNoU2N0eChub2RlLnBvcyk7CiAgICAgICAgICAgIHZhciBjb21tYW5kcyA9IHZhbHVlLm1hdGNoKC9bYS16QS1aXStcKChbXildKylcKS9nKTsKICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChmdW5jdGlvbiAoY29tbWFuZCkgewogICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBjb21tYW5kLnN1YnN0cmluZygwLCBjb21tYW5kLmluZGV4T2YoJygnKSk7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IGNvbW1hbmQuc3Vic3RyaW5nKDAsIGNvbW1hbmQubGVuZ3RoIC0gMSkuc3Vic3RyaW5nKGNvbW1hbmQuaW5kZXhPZignKCcpICsgMSkuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHZhbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwudHJpbSgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3ZhcnJlZnMnKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFuYW1lID0gc2N0eC5yZXNvbHZlUU5hbWUoYXJnLnN1YnN0cmluZygxKSwgbm9kZS5wb3MpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocW5hbWUudXJpICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0eC5yb290Lm5hbWVzcGFjZXNbcW5hbWUudXJpXS51c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzY3R4LmFkZFZhclJlZihxbmFtZSwgbm9kZS5wb3MpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICBwb3BTY3R4KCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy52aXNpdCA9IGZ1bmN0aW9uIChub2RlKSB7CiAgICAgICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgICAgdmFyIHNraXAgPSBmYWxzZTsKCiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW25hbWVdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgIHNraXAgPSB0aGlzW25hbWVdKG5vZGUpID09PSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFza2lwKSB7CiAgICAgICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihub2RlKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMudmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uIChub2RlLCBoYW5kbGVyKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV07CiAgICAgICAgICAgIGlmIChoYW5kbGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGhhbmRsZXJbY2hpbGQubmFtZV0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgIGhhbmRsZXJbY2hpbGQubmFtZV0oY2hpbGQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy52aXNpdChjaGlsZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIHRoaXMudmlzaXQoYXN0KTsKICAgIE9iamVjdC5rZXlzKHJvb3RTdGN4LnZhcmlhYmxlcykuZm9yRWFjaChmdW5jdGlvbihrZXkpewogICAgICAgIGlmKCFyb290U3RjeC52YXJSZWZzW2tleV0gJiYgKHJvb3RTdGN4LnZhcmlhYmxlc1trZXldLmFubm90YXRpb25zWydodHRwOi8vd3d3LnczLm9yZy8yMDA1L3hwYXRoLWZ1bmN0aW9ucyNwcml2YXRlJ10gfHwgcm9vdFN0Y3gubW9kdWxlTmFtZXNwYWNlID09PSAnJykgJiYgcm9vdFN0Y3gudmFyaWFibGVzW2tleV0ucG9zKSB7CiAgICAgICAgICAgIGFkZFdhcm5pbmcoJ1cwMycsICdVbnVzZWQgdmFyaWFibGUgIicgKyByb290U3RjeC52YXJpYWJsZXNba2V5XS5xbmFtZS5uYW1lICsgJyInLCByb290U3RjeC52YXJpYWJsZXNba2V5XS5wb3MpOwogICAgICAgIH0KICAgIH0pOwogICAgT2JqZWN0LmtleXMocm9vdFN0Y3gubmFtZXNwYWNlcykuZm9yRWFjaChmdW5jdGlvbih1cmkpewogICAgICAgIHZhciBuYW1lc3BhY2UgPSByb290U3RjeC5uYW1lc3BhY2VzW3VyaV07CiAgICAgICAgaWYobmFtZXNwYWNlLnVzZWQgPT09IHVuZGVmaW5lZCAmJiAhbmFtZXNwYWNlLm92ZXJyaWRlICYmIG5hbWVzcGFjZS50eXBlID09PSAnbW9kdWxlJykgewogICAgICAgICAgICBhZGRXYXJuaW5nKCdXMDQnLCAnVW51c2VkIG1vZHVsZSAiJyArIHVyaSArICciJywgbmFtZXNwYWNlLnBvcyk7CiAgICAgICAgfQogICAgfSk7Cn07Cgp9LHsiLi4vdHJlZV9vcHMiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvdHJlZV9vcHMuanMiLCIuL2Vycm9ycyI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci9lcnJvcnMuanMiLCIuL2hhbmRsZXJzIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2NvbXBpbGVyL2hhbmRsZXJzLmpzIiwiLi9zdGF0aWNfY29udGV4dCI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci9zdGF0aWNfY29udGV4dC5qcyJ9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2NvbXBsZXRpb24vY29tcGxldGVyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciBUcmVlT3BzID0gX2RlcmVxXygnLi4vdHJlZV9vcHMnKS5UcmVlT3BzOwoKdmFyIElEX1JFR0VYID0gL1thLXpBLVpfMC05XCRdLzsKCmZ1bmN0aW9uIHJldHJpZXZlUHJlY2VkaW5nSWRlbnRpZmllcih0ZXh0LCBwb3MsIHJlZ2V4KSB7CiAgICByZWdleCA9IHJlZ2V4IHx8IElEX1JFR0VYOwogICAgdmFyIGJ1ZiA9IFtdOwogICAgZm9yICh2YXIgaSA9IHBvcy0xOyBpID49IDA7IGktLSkgewogICAgICAgIGlmIChyZWdleC50ZXN0KHRleHRbaV0pKSB7CiAgICAgICAgICAgIGJ1Zi5wdXNoKHRleHRbaV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWYucmV2ZXJzZSgpLmpvaW4oJycpOwp9CgpmdW5jdGlvbiBwcmVmaXhCaW5hcnlTZWFyY2goaXRlbXMsIHByZWZpeCkgewogICAgdmFyIHN0YXJ0SW5kZXggPSAwOwogICAgdmFyIHN0b3BJbmRleCA9IGl0ZW1zLmxlbmd0aCAtIDE7CiAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcigoc3RvcEluZGV4ICsgc3RhcnRJbmRleCkgLyAyKTsKICAgIAogICAgd2hpbGUgKHN0b3BJbmRleCA+IHN0YXJ0SW5kZXggJiYgbWlkZGxlID49IDAgJiYgaXRlbXNbbWlkZGxlXS5pbmRleE9mKHByZWZpeCkgIT09IDApIHsKICAgICAgICBpZiAocHJlZml4IDwgaXRlbXNbbWlkZGxlXSkgewogICAgICAgICAgICBzdG9wSW5kZXggPSBtaWRkbGUgLSAxOwogICAgICAgIH0gZWxzZSBpZiAocHJlZml4ID4gaXRlbXNbbWlkZGxlXSkgewogICAgICAgICAgICBzdGFydEluZGV4ID0gbWlkZGxlICsgMTsKICAgICAgICB9CiAgICAgICAgbWlkZGxlID0gTWF0aC5mbG9vcigoc3RvcEluZGV4ICsgc3RhcnRJbmRleCkgLyAyKTsKICAgIH0KICAgIHdoaWxlIChtaWRkbGUgPiAwICYmIGl0ZW1zW21pZGRsZS0xXS5pbmRleE9mKHByZWZpeCkgPT09IDApIHsKICAgICAgICBtaWRkbGUtLTsKICAgIH0KICAgIHJldHVybiBtaWRkbGUgPj0gMCA/IG1pZGRsZSA6IDA7IC8vIGVuc3VyZSB3ZSdyZSBub3QgcmV0dXJuaW5nIGEgbmVnYXRpdmUgaW5kZXgKfQoKdmFyIHVyaVJlZ2V4ID0gL1thLXpBLVpfMC05XC9cLjpcLSNdLzsKdmFyIGNoYXIgPSAnLS5fQS1aYS16MC05Olx1MDBCN1x1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJmZlx1MDMwMC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDXHUyMDBEXHUyMDNmXHUyMDQwXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkQnOwp2YXIgbmFtZUNoYXIgPSAnWycgKyBjaGFyICsgJ10nOwp2YXIgdmFyQ2hhciA9ICdbJyArIGNoYXIgKyAnXFwkXSc7CnZhciBuYW1lQ2hhclJlZ0V4cCA9IG5ldyBSZWdFeHAobmFtZUNoYXIpOwp2YXIgdmFyQ2hhclJlZ0V4cCA9IG5ldyBSZWdFeHAodmFyQ2hhcik7Cgp2YXIgdmFyRGVjbExhYmVscyA9IHsKICAgICdMZXRCaW5kaW5nJzogJ0xldCBiaW5kaW5nJywKICAgICdQYXJhbSc6ICdGdW5jdGlvbiBwYXJhbWV0ZXInLAogICAgJ1F1YW50aWZpZWRFeHByJzogJ1F1YW50aWZpZWQgZXhwcmVzc2lvbiBiaW5kaW5nJywKICAgICdWYXJEZWNsU3RhdGVtZW50JzogJ0xvY2FsIHZhcmlhYmxlJywKICAgICdGb3JCaW5kaW5nJzogJ0ZvciBiaW5kaW5nJywKICAgICdUdW1ibGluZ1dpbmRvd0NsYXVzZSc6ICdUdW1ibGluZyB3aW5kb3cgYmluZGluZycsCiAgICAnV2luZG93VmFycyc6ICdXaW5kb3cgdmFyaWFibGUnLAogICAgJ1NsaWRpbmdXaW5kb3dDbGF1c2UnOiAnU2xpZGluZyB3aW5kb3cgYmluZGluZycsCiAgICAnUG9zaXRpb25hbFZhcic6ICdQb3NpdGlvbmFsIHZhcmlhYmxlJywKICAgICdDdXJyZW50SXRlbSc6ICdDdXJyZW50IGl0ZW0nLAogICAgJ1ByZXZpb3VzSXRlbSc6ICdQcmV2aW91cyBpdGVtJywKICAgICdOZXh0SXRlbSc6ICdOZXh0IGl0ZW0nLAogICAgJ0NvdW50Q2xhdXNlJzogJ0NvdW50IGJpbmRpbmcnLAogICAgJ0dyb3VwaW5nVmFyaWFibGUnOiAnR3JvdXBpbmcgdmFyaWFibGUnLAogICAgJ1ZhckRlY2wnOiAnTW9kdWxlIHZhcmlhYmxlJwp9OwoKdmFyIGZpbmRDb21wbGV0aW9ucyA9IGZ1bmN0aW9uKHByZWZpeCwgYWxsSWRlbnRpZmllcnMpIHsKICAgIGFsbElkZW50aWZpZXJzLnNvcnQoKTsKICAgIHZhciBzdGFydElkeCA9IHByZWZpeEJpbmFyeVNlYXJjaChhbGxJZGVudGlmaWVycywgcHJlZml4KTsKICAgIHZhciBtYXRjaGVzID0gW107CiAgICBmb3IgKHZhciBpID0gc3RhcnRJZHg7IGkgPCBhbGxJZGVudGlmaWVycy5sZW5ndGggJiYgYWxsSWRlbnRpZmllcnNbaV0uaW5kZXhPZihwcmVmaXgpID09PSAwOyBpKyspIHsKICAgICAgICBtYXRjaGVzLnB1c2goYWxsSWRlbnRpZmllcnNbaV0pOwogICAgfQogICAgcmV0dXJuIG1hdGNoZXM7Cn07CgoKdmFyIGNvbXBsZXRlUHJlZml4ID0gZnVuY3Rpb24oaWRlbnRpZmllciwgcG9zLCBzY3R4KXsKICAgIHZhciBpZHggPSBpZGVudGlmaWVyLmluZGV4T2YoJzonKTsKICAgIGlmKGlkeCA9PT0gLTEpIHsKICAgICAgICB2YXIgcHJlZml4ZXMgPSBbXTsKICAgICAgICB2YXIgbmFtZXNwYWNlcyA9IHNjdHguZ2V0TmFtZXNwYWNlcygpOwogICAgICAgIE9iamVjdC5rZXlzKG5hbWVzcGFjZXMpLmZvckVhY2goZnVuY3Rpb24oa2V5KXsKICAgICAgICAgICAgaWYobmFtZXNwYWNlc1trZXldLnR5cGUgPT09ICdtb2R1bGUnIHx8IGtleSA9PT0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHF1ZXJ5LWxvY2FsLWZ1bmN0aW9ucycpIHsKICAgICAgICAgICAgICAgIHByZWZpeGVzLnB1c2gobmFtZXNwYWNlc1trZXldLnByZWZpeGVzWzBdKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZENvbXBsZXRpb25zKGlkZW50aWZpZXIsIHByZWZpeGVzKTsKICAgICAgICB2YXIgbWF0Y2ggPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lICsgJzonLAogICAgICAgICAgICAgICAgdmFsdWU6IG5hbWUgKyAnOicsCiAgICAgICAgICAgICAgICBtZXRhOiAncHJlZml4JwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIG1hdGNoZXMubWFwKG1hdGNoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgfQp9OwoKdmFyIGNvbXBsZXRlRnVuY3Rpb24gPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwb3MsIHNjdHgpewogICAgdmFyIG5hbWVzID0gW107CiAgICB2YXIgc25pcHBldHMgPSB7fTsKICAgIHZhciBmdW5jdGlvbnMgPSBzY3R4LmdldEZ1bmN0aW9ucygpOwogICAgdmFyIHVyaSA9ICcnOwogICAgdmFyIHByZWZpeCA9ICcnOwogICAgdmFyIG5hbWUgPSBpZGVudGlmaWVyOwogICAgdmFyIGlkeCA9IGlkZW50aWZpZXIuaW5kZXhPZignOicpOwogICAgdmFyIGRlZmF1bHROYW1lc3BhY2UgPSBmYWxzZTsKICAgIGlmKGlkeCAhPT0gLTEpewogICAgICAgIHByZWZpeCA9IGlkZW50aWZpZXIuc3Vic3RyaW5nKDAsIGlkeCk7CiAgICAgICAgbmFtZSA9IGlkZW50aWZpZXIuc3Vic3RyaW5nKGlkeCArIDEpOwogICAgICAgIHZhciBucyA9IHNjdHguZ2V0TmFtZXNwYWNlQnlQcmVmaXgocHJlZml4KTsKICAgICAgICBpZihucyl7CiAgICAgICAgICAgIHVyaSA9IHNjdHguZ2V0TmFtZXNwYWNlQnlQcmVmaXgocHJlZml4KS51cmk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBkZWZhdWx0TmFtZXNwYWNlID0gdHJ1ZTsKICAgICAgICB1cmkgPSBzY3R4LnJvb3QuZGVmYXVsdEZ1bmN0aW9uTmFtZXNwYWNlOwogICAgfQogICAgT2JqZWN0LmtleXMoZnVuY3Rpb25zKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7CiAgICAgICAgdmFyIGZuID0gZnVuY3Rpb25zW2tleV07CiAgICAgICAgdmFyIG5zID0ga2V5LnN1YnN0cmluZygwLCBrZXkuaW5kZXhPZignIycpKTsKICAgICAgICB2YXIgbmFtZSA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoJyMnKSArIDEpOwogICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmluZGV4T2YoJyMnKSk7CiAgICAgICAgaWYobnMgIT09IHVyaSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmKCFkZWZhdWx0TmFtZXNwYWNlKXsKICAgICAgICAgICAgbmFtZSA9IHNjdHguZ2V0TmFtZXNwYWNlcygpW25zXS5wcmVmaXhlc1swXSArICc6JyArIG5hbWU7CiAgICAgICAgfQogICAgICAgIG5hbWUgKz0gJygnOwogICAgICAgIHZhciBzbmlwcGV0ID0gbmFtZTsKICAgICAgICBzbmlwcGV0ICs9IGZuLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW0sIGluZGV4KXsKICAgICAgICAgICAgcmV0dXJuICckeycgKyAoaW5kZXggKyAxKSArICc6XFwnICsgcGFyYW0uc3BsaXQoJyAnKVswXSArICd9JzsKICAgICAgICB9KS5qb2luKCcsICcpOwogICAgICAgIG5hbWUgKz0gZm4ucGFyYW1zLmpvaW4oJywgJyk7CiAgICAgICAgbmFtZSArPSAnKSc7CiAgICAgICAgc25pcHBldCArPSAnKSc7CiAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICBzbmlwcGV0c1tuYW1lXSA9IHNuaXBwZXQ7CiAgICB9KTsKICAgIHZhciBtYXRjaGVzID0gZmluZENvbXBsZXRpb25zKGlkZW50aWZpZXIsIG5hbWVzKTsKICAgIHZhciBtYXRjaCA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBuYW1lOiBuYW1lLAogICAgICAgICAgICB2YWx1ZTogbmFtZSwKICAgICAgICAgICAgbWV0YTogJ2Z1bmN0aW9uJywKICAgICAgICAgICAgcHJpb3JpdHk6IDQsCiAgICAgICAgICAgIGlkZW50aWZpZXJSZWdleDogbmFtZUNoYXJSZWdFeHAsCiAgICAgICAgICAgIHNuaXBwZXQ6IHNuaXBwZXRzW25hbWVdCiAgICAgICAgfTsKICAgIH07CiAgICByZXR1cm4gbWF0Y2hlcy5tYXAobWF0Y2gpOwp9OwoKdmFyIGNvbXBsZXRlVmFyaWFibGUgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBwb3MsIHNjdHgpewogICAgdmFyIHVyaSA9ICcnOwogICAgdmFyIHByZWZpeCA9ICcnOwogICAgdmFyIGlkeCA9IGlkZW50aWZpZXIuaW5kZXhPZignOicpOwogICAgaWYoaWR4ICE9PSAtMSl7CiAgICAgICAgcHJlZml4ID0gaWRlbnRpZmllci5zdWJzdHJpbmcoMCwgaWR4KTsKICAgICAgICB1cmkgPSBzY3R4LmdldE5hbWVzcGFjZUJ5UHJlZml4KHByZWZpeCkudXJpOwogICAgfQogICAgdmFyIGRlY2xzID0gc2N0eC5nZXRWYXJpYWJsZXMoKTsKICAgIHZhciBuYW1lcyA9IFtdOwogICAgdmFyIHR5cGVzID0ge307CiAgICBPYmplY3Qua2V5cyhkZWNscykuZm9yRWFjaChmdW5jdGlvbihrZXkpewogICAgICAgIHZhciBpID0ga2V5LmluZGV4T2YoJyMnKTsKICAgICAgICB2YXIgbnMgPSBrZXkuc3Vic3RyaW5nKDAsIGkpOwogICAgICAgIHZhciBuYW1lID0ga2V5LnN1YnN0cmluZyhpKzEpOwogICAgICAgIGlmKG5zICE9PSAnJyl7CiAgICAgICAgICAgIG5hbWVzLnB1c2goc2N0eC5nZXRQcmVmaXhlc0J5TmFtZXNwYWNlKG5zKVswXSArICc6JyArIG5hbWUpOwogICAgICAgICAgICB0eXBlc1tzY3R4LmdldFByZWZpeGVzQnlOYW1lc3BhY2UobnMpWzBdICsgJzonICsgbmFtZV0gPSBkZWNsc1trZXldLnR5cGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmFtZXMucHVzaChuYW1lKTsKICAgICAgICAgICAgdHlwZXNbbmFtZV0gPSBkZWNsc1trZXldLnR5cGU7CiAgICAgICAgfQogICAgfSk7CiAgICAKICAgIHZhciBtYXRjaGVzID0gZmluZENvbXBsZXRpb25zKGlkZW50aWZpZXIsIG5hbWVzKTsKICAgIHZhciBtYXRjaCA9IGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBuYW1lOiAnJCcgKyBuYW1lLAogICAgICAgICAgICB2YWx1ZTogJyQnICsgbmFtZSwKICAgICAgICAgICAgbWV0YTogdmFyRGVjbExhYmVsc1t0eXBlc1tuYW1lXV0sCiAgICAgICAgICAgIHByaW9yaXR5OiA0LAogICAgICAgICAgICBpZGVudGlmaWVyUmVnZXg6IHZhckNoYXJSZWdFeHAKICAgICAgICB9OwogICAgfTsKICAgIHJldHVybiBtYXRjaGVzLm1hcChtYXRjaCk7Cn07Cgp2YXIgY29tcGxldGVFeHByID0gZnVuY3Rpb24obGluZSwgcG9zLCBzY3R4KXsKICAgIHZhciBpZGVudGlmaWVyID0gcmV0cmlldmVQcmVjZWRpbmdJZGVudGlmaWVyKGxpbmUsIHBvcy5jb2wsIG5hbWVDaGFyUmVnRXhwKTsKICAgIHZhciBiZWZvcmUgPSBsaW5lLnN1YnN0cmluZygwLCBwb3MuY29sIC0gKGlkZW50aWZpZXIubGVuZ3RoID09PSAwID8gMCA6IGlkZW50aWZpZXIubGVuZ3RoKSk7CiAgICB2YXIgaXNWYXIgPSBiZWZvcmVbYmVmb3JlLmxlbmd0aCAtIDFdID09PSAnJCc7CiAgICBpZihpc1ZhcikgewogICAgICAgIHJldHVybiBjb21wbGV0ZVZhcmlhYmxlKGlkZW50aWZpZXIsIHBvcywgc2N0eCk7CiAgICB9IGVsc2UgaWYoaWRlbnRpZmllciAhPT0gJycpIHsKICAgICAgICByZXR1cm4gY29tcGxldGVGdW5jdGlvbihpZGVudGlmaWVyLCBwb3MsIHNjdHgpLmNvbmNhdChjb21wbGV0ZVByZWZpeChpZGVudGlmaWVyLCBwb3MsIHNjdHgpKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGNvbXBsZXRlVmFyaWFibGUoaWRlbnRpZmllciwgcG9zLCBzY3R4KS5jb25jYXQoY29tcGxldGVGdW5jdGlvbihpZGVudGlmaWVyLCBwb3MsIHNjdHgpKS5jb25jYXQoY29tcGxldGVQcmVmaXgoaWRlbnRpZmllciwgcG9zLCBzY3R4KSk7CiAgICB9Cn07Cgp2YXIgY29tcGxldGVNb2R1bGVVcmkgPSBmdW5jdGlvbihsaW5lLCBwb3MsIHNjdHgpewogICAgdmFyIGlkZW50aWZpZXIgPSByZXRyaWV2ZVByZWNlZGluZ0lkZW50aWZpZXIobGluZSwgcG9zLmNvbCwgdXJpUmVnZXgpOwogICAgdmFyIG1hdGNoZXMgPSBmaW5kQ29tcGxldGlvbnMoaWRlbnRpZmllciwgc2N0eC5nZXRBdmFpbGFibGVNb2R1bGVOYW1lc3BhY2VzKCkpOwogICAgdmFyIG1hdGNoID0gZnVuY3Rpb24odXJpKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbmFtZTogdXJpLAogICAgICAgICAgICB2YWx1ZTogdXJpLAogICAgICAgICAgICBtZXRhOiAnbW9kdWxlJywKICAgICAgICAgICAgcHJpb3JpdHk6IDQsCiAgICAgICAgICAgIGlkZW50aWZpZXJSZWdleDogdXJpUmVnZXgKICAgICAgICB9OwogICAgfTsKICAgIHJldHVybiBtYXRjaGVzLm1hcChtYXRjaCk7Cn07CgpleHBvcnRzLmNvbXBsZXRlID0gZnVuY3Rpb24oc291cmNlLCBhc3QsIHJvb3RTY3R4LCBwb3MpewogICAgdmFyIGxpbmUgPSBzb3VyY2Uuc3BsaXQoJ1xuJylbcG9zLmxpbmVdOwogICAgdmFyIG5vZGUgPSBUcmVlT3BzLmZpbmROb2RlKGFzdCwgcG9zKTsKICAgIHZhciBzY3R4ID0gVHJlZU9wcy5maW5kTm9kZShyb290U2N0eCwgcG9zKTsKICAgIHNjdHggPSBzY3R4ID8gc2N0eCA6IHJvb3RTY3R4OwogICAgaWYobm9kZSAmJiBub2RlLm5hbWUgPT09ICdVUklMaXRlcmFsJyAmJiBub2RlLmdldFBhcmVudCAmJiBub2RlLmdldFBhcmVudC5uYW1lID09PSAnTW9kdWxlSW1wb3J0Jyl7CiAgICAgICAgcmV0dXJuIGNvbXBsZXRlTW9kdWxlVXJpKGxpbmUsIHBvcywgc2N0eCk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjb21wbGV0ZUV4cHIobGluZSwgcG9zLCBzY3R4KTsKICAgIH0KfTsKCn0seyIuLi90cmVlX29wcyI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi90cmVlX29wcy5qcyJ9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2Zvcm1hdHRlci9zdHlsZV9jaGVja2VyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CmV4cG9ydHMuU3R5bGVDaGVja2VyID0gZnVuY3Rpb24gKGFzdCwgc291cmNlKSB7CiAgICAndXNlIHN0cmljdCc7CgogICAgdmFyIHRhYiA9ICcgICAgJzsKICAgIHZhciBtYXJrZXJzID0gW107CiAgICAKICAgIHRoaXMuZ2V0TWFya2VycyA9IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuIG1hcmtlcnM7CiAgICB9OwoKICAgIHRoaXMuV1MgPSBmdW5jdGlvbihub2RlKSB7CiAgICAgICAgdmFyIGxpbmVzID0gbm9kZS52YWx1ZS5zcGxpdCgnXG4nKTsKICAgICAgICBsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uKGxpbmUsIGluZGV4KXsKICAgICAgICAgICAgdmFyIGlzRmlyc3QgPSBpbmRleCA9PT0gMDsKICAgICAgICAgICAgdmFyIGlzTGFzdCAgPSBpbmRleCA9PT0gKGxpbmVzLmxlbmd0aCAtIDEpOwoKICAgICAgICAgICAgaWYoL1xyJC8udGVzdChsaW5lKSkgewogICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBwb3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2w6IG5vZGUucG9zLnNsICsgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgIGVsOiBub2RlLnBvcy5zbCArIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICBzYzogbGluZS5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAgICAgICAgICBlYzogbGluZS5sZW5ndGgKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdbU1cwMV0gRGV0ZWN0ZWQgQ1JMRicKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2ggPSBsaW5lLm1hdGNoKC9cdCsvKTsKICAgICAgICAgICAgaWYobWF0Y2ggIT09IG51bGwpewogICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBwb3M6IHsKICAgICAgICAgICAgICAgICAgICAgICAgc2w6IG5vZGUucG9zLnNsICsgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgIGVsOiBub2RlLnBvcy5zbCArIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICBzYzogbWF0Y2guaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgIGVjOiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICAgIGxldmVsOiAnd2FybmluZycsCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1tTVzAyXSBUYWJzIGRldGVjdGVkJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKCghaXNGaXJzdCkgJiYgaXNMYXN0KXsKICAgICAgICAgICAgICAgIG1hdGNoID0gbGluZS5tYXRjaCgvXlwgKy8pOwogICAgICAgICAgICAgICAgaWYobWF0Y2ggIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgbW9kID0gbWF0Y2hbMF0ubGVuZ3RoICUgdGFiLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICBpZihtb2QgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2Vycy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsOiBub2RlLnBvcy5zbCArIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsOiBub2RlLnBvcy5zbCArIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjOiBtYXRjaC5pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYzogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogJ3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1tTVzAzXSBVbmV4Y2VwdGVkIGluZGVudGF0aW9uIG9mICcgKyBtYXRjaFswXS5sZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9OwogICAgCiAgICB0aGlzLnZpc2l0ID0gZnVuY3Rpb24gKG5vZGUsIGluZGV4KSB7CiAgICAgICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgICAgdmFyIHNraXAgPSBmYWxzZTsKCiAgICAgICAgaWYgKHR5cGVvZiB0aGlzW25hbWVdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgIHNraXAgPSB0aGlzW25hbWVdKG5vZGUsIGluZGV4KSA9PT0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGlmICghc2tpcCkgewogICAgICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLnZpc2l0Q2hpbGRyZW4gPSBmdW5jdGlvbiAobm9kZSwgaGFuZGxlcikgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldOwogICAgICAgICAgICBpZiAoaGFuZGxlciAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBoYW5kbGVyW2NoaWxkLm5hbWVdID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICAgICAgICBoYW5kbGVyW2NoaWxkLm5hbWVdKGNoaWxkKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoY2hpbGQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBzb3VyY2Uuc3BsaXQoJ1xuJykuZm9yRWFjaChmdW5jdGlvbihsaW5lLCBpbmRleCl7CiAgICAgICAgdmFyIG1hdGNoID0gbGluZS5tYXRjaCgvXCArJC8pOwogICAgICAgIGlmKG1hdGNoKXsKICAgICAgICAgICAgbWFya2Vycy5wdXNoKHsKICAgICAgICAgICAgICAgIHBvczogewogICAgICAgICAgICAgICAgICAgIHNsOiBpbmRleCwKICAgICAgICAgICAgICAgICAgICBlbDogaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgc2M6IG1hdGNoLmluZGV4LAogICAgICAgICAgICAgICAgICAgIGVjOiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJywKICAgICAgICAgICAgICAgIGxldmVsOiAnd2FybmluZycsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnW1NXMDRdIFRyYWlsaW5nIHdoaXRlc3BhY2UnCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0pOwogICAgdGhpcy52aXNpdChhc3QpOwp9Owp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9KU09OaXFUb2tlbml6ZXIuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEpTT05pcVRva2VuaXplciA9IGV4cG9ydHMuSlNPTmlxVG9rZW5pemVyID0gZnVuY3Rpb24gSlNPTmlxVG9rZW5pemVyKHN0cmluZywgcGFyc2luZ0V2ZW50SGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQoc3RyaW5nLCBwYXJzaW5nRXZlbnRIYW5kbGVyKTsKICB2YXIgc2VsZiA9IHRoaXM7CgogIHRoaXMuUGFyc2VFeGNlcHRpb24gPSBmdW5jdGlvbihiLCBlLCBzLCBvLCB4KQogIHsKICAgIHZhcgogICAgICBiZWdpbiA9IGIsCiAgICAgIGVuZCA9IGUsCiAgICAgIHN0YXRlID0gcywKICAgICAgb2ZmZW5kaW5nID0gbywKICAgICAgZXhwZWN0ZWQgPSB4OwoKICAgIHRoaXMuZ2V0QmVnaW4gPSBmdW5jdGlvbigpIHtyZXR1cm4gYmVnaW47fTsKICAgIHRoaXMuZ2V0RW5kID0gZnVuY3Rpb24oKSB7cmV0dXJuIGVuZDt9OwogICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge3JldHVybiBzdGF0ZTt9OwogICAgdGhpcy5nZXRFeHBlY3RlZCA9IGZ1bmN0aW9uKCkge3JldHVybiBleHBlY3RlZDt9OwogICAgdGhpcy5nZXRPZmZlbmRpbmcgPSBmdW5jdGlvbigpIHtyZXR1cm4gb2ZmZW5kaW5nO307CgogICAgdGhpcy5nZXRNZXNzYWdlID0gZnVuY3Rpb24oKQogICAgewogICAgICByZXR1cm4gb2ZmZW5kaW5nIDwgMCA/ICJsZXhpY2FsIGFuYWx5c2lzIGZhaWxlZCIgOiAic3ludGF4IGVycm9yIjsKICAgIH07CiAgfTsKCiAgZnVuY3Rpb24gaW5pdChzdHJpbmcsIHBhcnNpbmdFdmVudEhhbmRsZXIpCiAgewogICAgZXZlbnRIYW5kbGVyID0gcGFyc2luZ0V2ZW50SGFuZGxlcjsKICAgIGlucHV0ID0gc3RyaW5nOwogICAgc2l6ZSA9IHN0cmluZy5sZW5ndGg7CiAgICByZXNldCgwLCAwLCAwKTsKICB9CgogIHRoaXMuZ2V0SW5wdXQgPSBmdW5jdGlvbigpCiAgewogICAgcmV0dXJuIGlucHV0OwogIH07CgogIGZ1bmN0aW9uIHJlc2V0KGwsIGIsIGUpCiAgewogICAgICAgICAgICBiMCA9IGI7IGUwID0gYjsKICAgIGwxID0gbDsgYjEgPSBiOyBlMSA9IGU7CiAgICBlbmQgPSBlOwogICAgZXZlbnRIYW5kbGVyLnJlc2V0KGlucHV0KTsKICB9CgogIHRoaXMuZ2V0T2ZmZW5kaW5nVG9rZW4gPSBmdW5jdGlvbihlKQogIHsKICAgIHZhciBvID0gZS5nZXRPZmZlbmRpbmcoKTsKICAgIHJldHVybiBvID49IDAgPyBKU09OaXFUb2tlbml6ZXIuVE9LRU5bb10gOiBudWxsOwogIH07CgogIHRoaXMuZ2V0RXhwZWN0ZWRUb2tlblNldCA9IGZ1bmN0aW9uKGUpCiAgewogICAgdmFyIGV4cGVjdGVkOwogICAgaWYgKGUuZ2V0RXhwZWN0ZWQoKSA8IDApCiAgICB7CiAgICAgIGV4cGVjdGVkID0gSlNPTmlxVG9rZW5pemVyLmdldFRva2VuU2V0KC0gZS5nZXRTdGF0ZSgpKTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgZXhwZWN0ZWQgPSBbSlNPTmlxVG9rZW5pemVyLlRPS0VOW2UuZ2V0RXhwZWN0ZWQoKV1dOwogICAgfQogICAgcmV0dXJuIGV4cGVjdGVkOwogIH07CgogIHRoaXMuZ2V0RXJyb3JNZXNzYWdlID0gZnVuY3Rpb24oZSkKICB7CiAgICB2YXIgdG9rZW5TZXQgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5TZXQoZSk7CiAgICB2YXIgZm91bmQgPSB0aGlzLmdldE9mZmVuZGluZ1Rva2VuKGUpOwogICAgdmFyIHByZWZpeCA9IGlucHV0LnN1YnN0cmluZygwLCBlLmdldEJlZ2luKCkpOwogICAgdmFyIGxpbmVzID0gcHJlZml4LnNwbGl0KCJcbiIpOwogICAgdmFyIGxpbmUgPSBsaW5lcy5sZW5ndGg7CiAgICB2YXIgY29sdW1uID0gbGluZXNbbGluZSAtIDFdLmxlbmd0aCArIDE7CiAgICB2YXIgc2l6ZSA9IGUuZ2V0RW5kKCkgLSBlLmdldEJlZ2luKCk7CiAgICByZXR1cm4gZS5nZXRNZXNzYWdlKCkKICAgICAgICAgKyAoZm91bmQgPT0gbnVsbCA/ICIiIDogIiwgZm91bmQgIiArIGZvdW5kKQogICAgICAgICArICJcbndoaWxlIGV4cGVjdGluZyAiCiAgICAgICAgICsgKHRva2VuU2V0Lmxlbmd0aCA9PSAxID8gdG9rZW5TZXRbMF0gOiAoIlsiICsgdG9rZW5TZXQuam9pbigiLCAiKSArICJdIikpCiAgICAgICAgICsgIlxuIgogICAgICAgICArIChzaXplID09IDAgfHwgZm91bmQgIT0gbnVsbCA/ICIiIDogImFmdGVyIHN1Y2Nlc3NmdWxseSBzY2FubmluZyAiICsgc2l6ZSArICIgY2hhcmFjdGVycyBiZWdpbm5pbmcgIikKICAgICAgICAgKyAiYXQgbGluZSAiICsgbGluZSArICIsIGNvbHVtbiAiICsgY29sdW1uICsgIjpcbi4uLiIKICAgICAgICAgKyBpbnB1dC5zdWJzdHJpbmcoZS5nZXRCZWdpbigpLCBNYXRoLm1pbihpbnB1dC5sZW5ndGgsIGUuZ2V0QmVnaW4oKSArIDY0KSkKICAgICAgICAgKyAiLi4uIjsKICB9OwoKICB0aGlzLnBhcnNlX3N0YXJ0ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJzdGFydCIsIGUwKTsKICAgIGxvb2thaGVhZDFXKDE0KTsgICAgICAgICAgICAgICAgLy8gTW9kdWxlRGVjbCB8IEFubm90YXRpb24gfCBPcHRpb25EZWNsIHwgT3BlcmF0b3IgfCBWYXJpYWJsZSB8IFRhZyB8IEF0dHJUZXN0IHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IVtDREFUQVsnCiAgICAgIHNoaWZ0KDU4KTsgICAgICAgICAgICAgICAgICAgIC8vICc8IVtDREFUQVsnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgICAgc2hpZnQoNTcpOyAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIGJyZWFrOwogICAgY2FzZSA1OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIHNoaWZ0KDU5KTsgICAgICAgICAgICAgICAgICAgIC8vICc8PycKICAgICAgYnJlYWs7CiAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgc2hpZnQoNDMpOyAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICBicmVhazsKICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyg6ficKICAgICAgc2hpZnQoNDUpOyAgICAgICAgICAgICAgICAgICAgLy8gJyg6ficKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgc2hpZnQoNDQpOyAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBicmVhazsKICAgIGNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBicmVhazsKICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBicmVhazsKICAgIGNhc2UgMjc3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIHNoaWZ0KDI3Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBicmVhazsKICAgIGNhc2UgNDI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBicmVhazsKICAgIGNhc2UgNDY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgIHNoaWZ0KDQ2KTsgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBicmVhazsKICAgIGNhc2UgNTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICBicmVhazsKICAgIGNhc2UgNjU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgIHNoaWZ0KDY1KTsgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICBicmVhazsKICAgIGNhc2UgNjY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICAgIHNoaWZ0KDY2KTsgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgICBicmVhazsKICAgIGNhc2UgNDk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHNoaWZ0KDQ5KTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBicmVhazsKICAgIGNhc2UgNTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy4nCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICBicmVhazsKICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgIHNoaWZ0KDU2KTsgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICBicmVhazsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzonCiAgICAgIHNoaWZ0KDU0KTsgICAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICBicmVhazsKICAgIGNhc2UgMzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgIHNoaWZ0KDM2KTsgICAgICAgICAgICAgICAgICAgIC8vICchJwogICAgICBicmVhazsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBicmVhazsKICAgIGNhc2UgNDA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQkJwogICAgICBzaGlmdCg0MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbm5vdGF0aW9uCiAgICAgIHNoaWZ0KDUpOyAgICAgICAgICAgICAgICAgICAgIC8vIEFubm90YXRpb24KICAgICAgYnJlYWs7CiAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vZHVsZURlY2wKICAgICAgc2hpZnQoNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gTW9kdWxlRGVjbAogICAgICBicmVhazsKICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uRGVjbAogICAgICBzaGlmdCg2KTsgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25EZWNsCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTogICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRyVGVzdAogICAgICBzaGlmdCgxNSk7ICAgICAgICAgICAgICAgICAgICAvLyBBdHRyVGVzdAogICAgICBicmVhazsKICAgIGNhc2UgMTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQKICAgICAgc2hpZnQoMTYpOyAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIHNoaWZ0KDE4KTsgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBzaGlmdCgxOSk7ICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBicmVhazsKICAgIGNhc2UgMjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbAogICAgICBzaGlmdCgyMCk7ICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYXJpYWJsZQogICAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAvLyBWYXJpYWJsZQogICAgICBicmVhazsKICAgIGNhc2UgOTogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFnCiAgICAgIHNoaWZ0KDkpOyAgICAgICAgICAgICAgICAgICAgIC8vIFRhZwogICAgICBicmVhazsKICAgIGNhc2UgNzogICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmF0b3IKICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmF0b3IKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9FUU5hbWUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgic3RhcnQiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9TdGFydFRhZyA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3RhcnRUYWciLCBlMCk7CiAgICBsb29rYWhlYWQxVyg4KTsgICAgICAgICAgICAgICAgIC8vIFFOYW1lIHwgU15XUyB8IEVPRiB8ICciJyB8ICInIiB8ICcvPicgfCAnPScgfCAnPicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDYxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBzaGlmdCg2MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgYnJlYWs7CiAgICBjYXNlIDUzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgLy8gJy8+JwogICAgICBicmVhazsKICAgIGNhc2UgMjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgc2hpZnQoMjkpOyAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgYnJlYWs7CiAgICBjYXNlIDYwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBzaGlmdCg2MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgYnJlYWs7CiAgICBjYXNlIDM3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RhcnRUYWciLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9UYWdDb250ZW50ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUYWdDb250ZW50IiwgZTApOwogICAgbG9va2FoZWFkMSgxMSk7ICAgICAgICAgICAgICAgICAvLyBUYWcgfCBFbmRUYWcgfCBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRWxlbWVudENvbnRlbnRDaGFyIHwgQ2hhclJlZiB8IEVPRiB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNTogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50Q29udGVudENoYXIKICAgICAgc2hpZnQoMjUpOyAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWcKICAgICAgc2hpZnQoOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmRUYWcKICAgICAgc2hpZnQoMTApOyAgICAgICAgICAgICAgICAgICAgLy8gRW5kVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBzaGlmdCg1OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBicmVhazsKICAgIGNhc2UgNTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIHNoaWZ0KDU3KTsgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBicmVhazsKICAgIGNhc2UgMjE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRhZ0NvbnRlbnQiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9BcG9zQXR0ciA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXBvc0F0dHIiLCBlMCk7CiAgICBsb29rYWhlYWQxKDEwKTsgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYgfCBFc2NhcGVBcG9zIHwgQXBvc0F0dHJDb250ZW50Q2hhciB8IENoYXJSZWYgfCBFT0YgfCAiJyIgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICBzaGlmdCgyMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzogICAgICAgICAgICAgICAgICAgICAgICAvLyBBcG9zQXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0KDI3KTsgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIHNoaWZ0KDI3NSk7ICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgc2hpZnQoMjc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBicmVhazsKICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBicmVhazsKICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcG9zQXR0ciIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1F1b3RBdHRyID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJRdW90QXR0ciIsIGUwKTsKICAgIGxvb2thaGVhZDEoOSk7ICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZVF1b3QgfCBRdW90QXR0ckNvbnRlbnRDaGFyIHwgQ2hhclJlZiB8IEVPRiB8ICciJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgIHNoaWZ0KDIyKTsgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnQoMjYpOyAgICAgICAgICAgICAgICAgICAgLy8gUXVvdEF0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGNhc2UgMjE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1b3RBdHRyIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfQ0RhdGEgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNEYXRhIiwgZTApOwogICAgbG9va2FoZWFkMSgxKTsgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb25Db250ZW50cyB8IEVPRiB8ICddXT4nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNDogICAgICAgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb25Db250ZW50cwogICAgICBzaGlmdCgxNCk7ICAgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb25Db250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNjc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ11dPicKICAgICAgc2hpZnQoNjcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ11dPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ0RhdGEiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9YTUxDb21tZW50ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJYTUxDb21tZW50IiwgZTApOwogICAgbG9va2FoZWFkMSgwKTsgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMgfCBFT0YgfCAnLS0+JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzCiAgICAgIHNoaWZ0KDEyKTsgICAgICAgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICAgICAgc2hpZnQoNTApOyAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiWE1MQ29tbWVudCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1BJID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQSSIsIGUwKTsKICAgIGxvb2thaGVhZDEoMyk7ICAgICAgICAgICAgICAgICAgLy8gRGlyUElDb250ZW50cyB8IEVPRiB8ICc/JyB8ICc/PicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgICAgc2hpZnQoMTMpOyAgICAgICAgICAgICAgICAgICAgLy8gRGlyUElDb250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNjI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIHNoaWZ0KDYyKTsgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBicmVhazsKICAgIGNhc2UgNjM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgICBzaGlmdCg2Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBJIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUHJhZ21hID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmFnbWEiLCBlMCk7CiAgICBsb29rYWhlYWQxKDIpOyAgICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzIHwgRU9GIHwgJyMnIHwgJyMpJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMKICAgICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMKICAgICAgYnJlYWs7CiAgICBjYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcjJwogICAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnIycKICAgICAgYnJlYWs7CiAgICBjYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcjKScKICAgICAgc2hpZnQoMzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJyMpJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmFnbWEiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9Db21tZW50ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21tZW50IiwgZTApOwogICAgbG9va2FoZWFkMSg0KTsgICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMgfCBFT0YgfCAnKDonIHwgJzopJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzopJwogICAgICBzaGlmdCg1NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIGJyZWFrOwogICAgY2FzZSA0NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIHNoaWZ0KDQ0KTsgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRDb250ZW50cwogICAgICBzaGlmdCgzMik7ICAgICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tbWVudCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX0NvbW1lbnREb2MgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbW1lbnREb2MiLCBlMCk7CiAgICBsb29rYWhlYWQxKDYpOyAgICAgICAgICAgICAgICAgIC8vIERvY1RhZyB8IERvY0NvbW1lbnRDb250ZW50cyB8IEVPRiB8ICcoOicgfCAnOiknCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2NUYWcKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRG9jVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2NDb21tZW50Q29udGVudHMKICAgICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgLy8gRG9jQ29tbWVudENvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIHNoaWZ0KDU1KTsgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgc2hpZnQoNDQpOyAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21tZW50RG9jIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUXVvdFN0cmluZyA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUXVvdFN0cmluZyIsIGUwKTsKICAgIGxvb2thaGVhZDEoNSk7ICAgICAgICAgICAgICAgICAgLy8gSlNPTkNoYXIgfCBKU09OQ2hhclJlZiB8IEpTT05QcmVkZWZpbmVkQ2hhclJlZiB8IEVPRiB8ICciJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSlNPTlByZWRlZmluZWRDaGFyUmVmCiAgICAgIHNoaWZ0KDMpOyAgICAgICAgICAgICAgICAgICAgIC8vIEpTT05QcmVkZWZpbmVkQ2hhclJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSlNPTkNoYXJSZWYKICAgICAgc2hpZnQoMik7ICAgICAgICAgICAgICAgICAgICAgLy8gSlNPTkNoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpTT05DaGFyCiAgICAgIHNoaWZ0KDEpOyAgICAgICAgICAgICAgICAgICAgIC8vIEpTT05DaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1b3RTdHJpbmciLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9BcG9zU3RyaW5nID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcG9zU3RyaW5nIiwgZTApOwogICAgbG9va2FoZWFkMSg3KTsgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlQXBvcyB8IEFwb3NDaGFyIHwgQ2hhclJlZiB8IEVPRiB8ICInIgogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgc2hpZnQoMjMpOyAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICBicmVhazsKICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0NoYXIKICAgICAgc2hpZnQoMjQpOyAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0NoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXBvc1N0cmluZyIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1ByZWZpeCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJlZml4IiwgZTApOwogICAgbG9va2FoZWFkMVcoMTMpOyAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05DTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmVmaXgiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9fRVFOYW1lID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJfRVFOYW1lIiwgZTApOwogICAgbG9va2FoZWFkMVcoMTIpOyAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJfRVFOYW1lIiwgZTApOwogIH07CgogIGZ1bmN0aW9uIHBhcnNlX0VRTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkVRTmFtZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgc2hpZnQoOTQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgc2hpZnQoMTE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHNoaWZ0KDEyMik7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnQoMTQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdCgxNTApOyAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHNoaWZ0KDE4Myk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdCgxODkpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBzaGlmdCgyMTQpOyAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnQoMjI1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnQoMjQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdCgyNDIpOyAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBzaGlmdCgyNTEpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9GdW5jdGlvbk5hbWUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRVFOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25OYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25OYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIHNoaWZ0KDE3KTsgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBicmVhazsKICAgIGNhc2UgNjg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdCg2OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDcxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDcyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdCg3Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0KDczKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0KDc3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDc4KTsgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0KDg2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0KDg3KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDkxKTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgc2hpZnQoMTAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwMyk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDExMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgc2hpZnQoMTE2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgc2hpZnQoMTE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0KDEyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdCgxMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdCgxMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIHNoaWZ0KDEyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEzMik7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzMyk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIHNoaWZ0KDEzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIHNoaWZ0KDE0NCk7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgc2hpZnQoMTQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBzaGlmdCgxNDgpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgc2hpZnQoMTQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnQoMTU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnQoMTYwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnQoMTYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIHNoaWZ0KDE2OCk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdCgxNzApOyAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdCgxNzIpOyAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdCgxNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTc5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnQoMTc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxODIpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMTk2KTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDE5OCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMTk5KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjAwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0KDIwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnQoMjA0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIxMCk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIxMSk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnQoMjE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBzaGlmdCgyMTgpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgc2hpZnQoMjIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIHNoaWZ0KDIzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIHNoaWZ0KDIzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgc2hpZnQoMjQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBzaGlmdCgyNDcpOyAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdCgyNDgpOyAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNTIpOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNTQpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNTgpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI2NCk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNjgpOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0KDI3Mik7ICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDcwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg4OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDk5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCgxMDApOyAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMzApOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTMxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTM5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTMpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNTkpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTY5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTkwKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMTk3KTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMjAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIyNik7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDIzOCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI0OSk7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNTApOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjU1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNTkpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI2MCk7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBzaGlmdCgyNjEpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgc2hpZnQoMjY1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIHNoaWZ0KDk1KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIHNoaWZ0KDE3NCk7ICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIxOSk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZ1bmN0aW9uTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX05DTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5DTmFtZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgICBzaGlmdCgyOCk7ICAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgYnJlYWs7CiAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnQoNjgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnQoNzMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnQoNzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnQoNzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0KDgyKTsgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnQoODYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnQoODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0KDg4KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwMyk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBzaGlmdCgxMTEpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIHNoaWZ0KDExNik7ICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnQoMTIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0KDEyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0KDEyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBzaGlmdCgxMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBzaGlmdCgxNDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHNoaWZ0KDE0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnQoMTQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIHNoaWZ0KDE0OSk7ICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdCgxNTgpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdCgxNjApOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0KDE2MSk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdCgxNjIpOyAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0KDE3MCk7ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0KDE3Mik7ICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0KDE3Nik7ICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0KDE3OCk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdCgxNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMTk2KTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDE5OCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMTk5KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgc2hpZnQoMjE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIHNoaWZ0KDIyMik7ICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBzaGlmdCgyMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBzaGlmdCgyMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIHNoaWZ0KDI0Nik7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgc2hpZnQoMjQ3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMjUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNTIpOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI2NCk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNjgpOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDcxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnQoNzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNzI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0KDcyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnQoOTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0KDEwNik7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnQoMTA4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0KDExMCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIHNoaWZ0KDExNyk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBzaGlmdCgxMTgpOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdCgxMTkpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgc2hpZnQoMTIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEzMik7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzMyk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnQoMTQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdCgxNTApOyAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBzaGlmdCgxNjMpOyAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBzaGlmdCgxNjgpOyAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxODIpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdCgxODMpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnQoMjAwKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdCgyMDQpOyAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnQoMjEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnQoMjExKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0KDIxNCk7ICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnQoMjE2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdCgyMTcpOyAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnQoMjI1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0KDIyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0KDIzMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnQoMjQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdCgyNDIpOyAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0KDI0OCk7ICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnQoMjUxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNTQpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNTgpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI2MCk7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0KDI3Mik7ICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDcwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg4OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDk5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCgxMDApOyAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMzApOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTMxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTM5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTMpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNTkpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTY5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTkwKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMTk3KTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMjAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIyNik7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDIzOCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI0OSk7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNTApOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjU1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNTkpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgc2hpZnQoMjYxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIHNoaWZ0KDI2NSk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBzaGlmdCgxNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyMTkpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOQ05hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBzaGlmdCh0KQogIHsKICAgIGlmIChsMSA9PSB0KQogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIGV2ZW50SGFuZGxlci50ZXJtaW5hbChKU09OaXFUb2tlbml6ZXIuVE9LRU5bbDFdLCBiMSwgZTEgPiBzaXplID8gc2l6ZSA6IGUxKTsKICAgICAgYjAgPSBiMTsgZTAgPSBlMTsgbDEgPSAwOwogICAgfQogICAgZWxzZQogICAgewogICAgICBlcnJvcihiMSwgZTEsIDAsIGwxLCB0KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHdoaXRlc3BhY2UoKQogIHsKICAgIGlmIChlMCAhPSBiMSkKICAgIHsKICAgICAgYjAgPSBlMDsKICAgICAgZTAgPSBiMTsKICAgICAgZXZlbnRIYW5kbGVyLndoaXRlc3BhY2UoYjAsIGUwKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIG1hdGNoVyhzZXQpCiAgewogICAgdmFyIGNvZGU7CiAgICBmb3IgKDs7KQogICAgewogICAgICBjb2RlID0gbWF0Y2goc2V0KTsKICAgICAgaWYgKGNvZGUgIT0gMzApICAgICAgICAgICAgICAgLy8gU15XUwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb2RlOwogIH0KCiAgZnVuY3Rpb24gbG9va2FoZWFkMVcoc2V0KQogIHsKICAgIGlmIChsMSA9PSAwKQogICAgewogICAgICBsMSA9IG1hdGNoVyhzZXQpOwogICAgICBiMSA9IGJlZ2luOwogICAgICBlMSA9IGVuZDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGxvb2thaGVhZDEoc2V0KQogIHsKICAgIGlmIChsMSA9PSAwKQogICAgewogICAgICBsMSA9IG1hdGNoKHNldCk7CiAgICAgIGIxID0gYmVnaW47CiAgICAgIGUxID0gZW5kOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZXJyb3IoYiwgZSwgcywgbCwgdCkKICB7CiAgICB0aHJvdyBuZXcgc2VsZi5QYXJzZUV4Y2VwdGlvbihiLCBlLCBzLCBsLCB0KTsKICB9CgogIHZhciBsaywgYjAsIGUwOwogIHZhciBsMSwgYjEsIGUxOwogIHZhciBldmVudEhhbmRsZXI7CgogIHZhciBpbnB1dDsKICB2YXIgc2l6ZTsKICB2YXIgYmVnaW47CiAgdmFyIGVuZDsKCiAgZnVuY3Rpb24gbWF0Y2godG9rZW5TZXRJZCkKICB7CiAgICB2YXIgbm9uYm1wID0gZmFsc2U7CiAgICBiZWdpbiA9IGVuZDsKICAgIHZhciBjdXJyZW50ID0gZW5kOwogICAgdmFyIHJlc3VsdCA9IEpTT05pcVRva2VuaXplci5JTklUSUFMW3Rva2VuU2V0SWRdOwogICAgdmFyIHN0YXRlID0gMDsKCiAgICBmb3IgKHZhciBjb2RlID0gcmVzdWx0ICYgNDA5NTsgY29kZSAhPSAwOyApCiAgICB7CiAgICAgIHZhciBjaGFyY2xhc3M7CiAgICAgIHZhciBjMCA9IGN1cnJlbnQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChjdXJyZW50KSA6IDA7CiAgICAgICsrY3VycmVudDsKICAgICAgaWYgKGMwIDwgMHg4MCkKICAgICAgewogICAgICAgIGNoYXJjbGFzcyA9IEpTT05pcVRva2VuaXplci5NQVAwW2MwXTsKICAgICAgfQogICAgICBlbHNlIGlmIChjMCA8IDB4ZDgwMCkKICAgICAgewogICAgICAgIHZhciBjMSA9IGMwID4+IDQ7CiAgICAgICAgY2hhcmNsYXNzID0gSlNPTmlxVG9rZW5pemVyLk1BUDFbKGMwICYgMTUpICsgSlNPTmlxVG9rZW5pemVyLk1BUDFbKGMxICYgMzEpICsgSlNPTmlxVG9rZW5pemVyLk1BUDFbYzEgPj4gNV1dXTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBpZiAoYzAgPCAweGRjMDApCiAgICAgICAgewogICAgICAgICAgdmFyIGMxID0gY3VycmVudCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGN1cnJlbnQpIDogMDsKICAgICAgICAgIGlmIChjMSA+PSAweGRjMDAgJiYgYzEgPCAweGUwMDApCiAgICAgICAgICB7CiAgICAgICAgICAgICsrY3VycmVudDsKICAgICAgICAgICAgYzAgPSAoKGMwICYgMHgzZmYpIDw8IDEwKSArIChjMSAmIDB4M2ZmKSArIDB4MTAwMDA7CiAgICAgICAgICAgIG5vbmJtcCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBsbyA9IDAsIGhpID0gNTsKICAgICAgICBmb3IgKHZhciBtID0gMzsgOyBtID0gKGhpICsgbG8pID4+IDEpCiAgICAgICAgewogICAgICAgICAgaWYgKEpTT05pcVRva2VuaXplci5NQVAyW21dID4gYzApIGhpID0gbSAtIDE7CiAgICAgICAgICBlbHNlIGlmIChKU09OaXFUb2tlbml6ZXIuTUFQMls2ICsgbV0gPCBjMCkgbG8gPSBtICsgMTsKICAgICAgICAgIGVsc2Uge2NoYXJjbGFzcyA9IEpTT05pcVRva2VuaXplci5NQVAyWzEyICsgbV07IGJyZWFrO30KICAgICAgICAgIGlmIChsbyA+IGhpKSB7Y2hhcmNsYXNzID0gMDsgYnJlYWs7fQogICAgICAgIH0KICAgICAgfQoKICAgICAgc3RhdGUgPSBjb2RlOwogICAgICB2YXIgaTAgPSAoY2hhcmNsYXNzIDw8IDEyKSArIGNvZGUgLSAxOwogICAgICBjb2RlID0gSlNPTmlxVG9rZW5pemVyLlRSQU5TSVRJT05bKGkwICYgMTUpICsgSlNPTmlxVG9rZW5pemVyLlRSQU5TSVRJT05baTAgPj4gNF1dOwoKICAgICAgaWYgKGNvZGUgPiA0MDk1KQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gY29kZTsKICAgICAgICBjb2RlICY9IDQwOTU7CiAgICAgICAgZW5kID0gY3VycmVudDsKICAgICAgfQogICAgfQoKICAgIHJlc3VsdCA+Pj0gMTI7CiAgICBpZiAocmVzdWx0ID09IDApCiAgICB7CiAgICAgIGVuZCA9IGN1cnJlbnQgLSAxOwogICAgICB2YXIgYzEgPSBlbmQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChlbmQpIDogMDsKICAgICAgaWYgKGMxID49IDB4ZGMwMCAmJiBjMSA8IDB4ZTAwMCkgLS1lbmQ7CiAgICAgIHJldHVybiBlcnJvcihiZWdpbiwgZW5kLCBzdGF0ZSwgLTEsIC0xKTsKICAgIH0KCiAgICBpZiAobm9uYm1wKQogICAgewogICAgICBmb3IgKHZhciBpID0gcmVzdWx0ID4+IDk7IGkgPiAwOyAtLWkpCiAgICAgIHsKICAgICAgICAtLWVuZDsKICAgICAgICB2YXIgYzEgPSBlbmQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChlbmQpIDogMDsKICAgICAgICBpZiAoYzEgPj0gMHhkYzAwICYmIGMxIDwgMHhlMDAwKSAtLWVuZDsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBlbmQgLT0gcmVzdWx0ID4+IDk7CiAgICB9CgogICAgcmV0dXJuIChyZXN1bHQgJiA1MTEpIC0gMTsKICB9Cn0KCkpTT05pcVRva2VuaXplci5nZXRUb2tlblNldCA9IGZ1bmN0aW9uKHRva2VuU2V0SWQpCnsKICB2YXIgc2V0ID0gW107CiAgdmFyIHMgPSB0b2tlblNldElkIDwgMCA/IC0gdG9rZW5TZXRJZCA6IElOSVRJQUxbdG9rZW5TZXRJZF0gJiA0MDk1OwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjc5OyBpICs9IDMyKQogIHsKICAgIHZhciBqID0gaTsKICAgIHZhciBpMCA9IChpID4+IDUpICogMjA2NiArIHMgLSAxOwogICAgdmFyIGkxID0gaTAgPj4gMjsKICAgIHZhciBpMiA9IGkxID4+IDI7CiAgICB2YXIgZiA9IEpTT05pcVRva2VuaXplci5FWFBFQ1RFRFsoaTAgJiAzKSArIEpTT05pcVRva2VuaXplci5FWFBFQ1RFRFsoaTEgJiAzKSArIEpTT05pcVRva2VuaXplci5FWFBFQ1RFRFsoaTIgJiAzKSArIEpTT05pcVRva2VuaXplci5FWFBFQ1RFRFtpMiA+PiAyXV1dXTsKICAgIGZvciAoIDsgZiAhPSAwOyBmID4+Pj0gMSwgKytqKQogICAgewogICAgICBpZiAoKGYgJiAxKSAhPSAwKQogICAgICB7CiAgICAgICAgc2V0LnB1c2goSlNPTmlxVG9rZW5pemVyLlRPS0VOW2pdKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gc2V0Owp9OwoKSlNPTmlxVG9rZW5pemVyLk1BUDAgPQpbIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAyNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMzLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzNCwgMzUsIDM2LCAzNywgMzEsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCAzMSwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgMzEsIDYyLCA2MywgNjQsIDY1LCAzNwpdOwoKSlNPTmlxVG9rZW5pemVyLk1BUDEgPQpbIDEwOCwgMTI0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMTU2LCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMjE0LCAyMTUsIDIxMywgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDI0NywgMjYxLCAyNzcsIDI5MywgMzA5LCAzNDcsIDM2MywgMzc5LCA0MTYsIDQxNiwgNDE2LCA0MDgsIDMzMSwgMzIzLCAzMzEsIDMyMywgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCA0MzMsIDQzMywgNDMzLCA0MzMsIDQzMywgNDMzLCA0MzMsIDMxNiwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDM5NCwgNDE2LCA0MTYsIDQxNywgNDE1LCA0MTYsIDQxNiwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDMzMCwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDQxNiwgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDI3LCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDM3LCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMzLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzNCwgMzUsIDM2LCAzNywgMzEsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCAzMSwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgMzEsIDYyLCA2MywgNjQsIDY1LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzMSwgMzEsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCA2NiwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NiwgNjYsIDY2LCA2NgpdOwoKSlNPTmlxVG9rZW5pemVyLk1BUDIgPQpbIDU3MzQ0LCA2Mzc0NCwgNjQ5NzYsIDY1MDA4LCA2NTUzNiwgOTgzMDQwLCA2Mzc0MywgNjQ5NzUsIDY1MDA3LCA2NTUzMywgOTgzMDM5LCAxMTE0MTExLCAzNywgMzEsIDM3LCAzMSwgMzEsIDM3Cl07CgpKU09OaXFUb2tlbml6ZXIuSU5JVElBTCA9ClsgMSwgMiwgNDkxNTUsIDU3MzQ4LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1Cl07CgpKU09OaXFUb2tlbml6ZXIuVFJBTlNJVElPTiA9ClsgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE3NDA4LCAxOTI4OCwgMTc0MzksIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAyMjEyNiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzY3MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDE5NDY5LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDM2OTE5LCAxODIzNCwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4NDE5LCAxODQzMiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTg1OTksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxODgyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTg5NDQsIDE4OTYwLCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA3NCwgMzYxNjksIDE3NDM5LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjIzMTQsIDE5MTA1LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMjIxMjYsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc2NzIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAxOTQ2OSwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAzNjkxOSwgMTgyMzQsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODQxOSwgMTg0MzIsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE4NTk5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTg4MjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE4OTQ0LCAxODk2MCwgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIxODIsIDE5Mjg4LCAxOTEyMSwgMzY4NjYsIDE3NDY2LCAxODM0NSwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MjczLCAxOTU1MiwgMTkzMDQsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTMzMiwgMTc0MjMsIDE5MzYzLCAzNjg2NiwgMTc0NjYsIDE3NTM3LCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE4NjE0LCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMTkzOTEsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxOTQyNywgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYxNTQsIDE5Mjg4LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAxNzc0MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyNzgwLCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjM3NSwgMjIxOTcsIDE4NDY5LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDI0MDE4LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDIxMzMxLCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxOTQ4NSwgMTk1MDEsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTk1MzcsIDIyMzkwLCAxOTU2OCwgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5NTk2LCAxOTYxMSwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAxODI0NiwgMTk2MjcsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjI0MiwgMjA1NTMsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMTg2NDgsIDMwNDc3LCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzY0NzIsIDE5Mjg4LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAxNzgwOSwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAyMTc3MCwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDE5NjQzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTk2NzIsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIwNTM4LCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTc5NzUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjM0NSwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTk3MjYsIDE5NzQyLCAyMTUyOSwgMjQwMzUsIDIzMTEyLCAyNjIyNSwgMjM1MTEsIDI3NzQ5LCAyNzM5NywgMjQwMzUsIDM0MzYwLCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAzNTE2NiwgMjMxMTQsIDIzMTE0LCAxOTc1OCwgMjM1MTEsIDM1MjQ3LCAyMzUxMSwgMjM1MTEsIDI4NDQ3LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjQyNTQsIDE5ODIxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDE5NDQxLCAzNjUzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDE5ODQ2LCAxOTg2OSwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDMyMTg3LCAxOTg5MiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAzNjY0NywgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDMzNzU3LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDI3MDcwLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI5Mjc0LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAzMTExOCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDMyNDMxLCAyMzYzNCwgMzA4MjEsIDI0MDM1LCAyMzExMCwgMTk5MTMsIDIzMTE0LCAyMzQ2NywgMzEyNjEsIDIzMjYxLCAzNDI5OSwgMTk5MzIsIDI0MDM1LCAzMjYwOSwgMTk5NjUsIDM1Mzg5LCAxOTk4NCwgMjc2ODksIDE5ODMwLCAyOTM5MSwgMjkzMzcsIDIwMDQxLCAyMjY0MywgMzU2MTksIDMzNzI4LCAyMDA2MiwgMjAxMjEsIDIwMTY2LCAzNTEwMCwgMjYxNDUsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMDIyNywgMjU2NzAsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyMDI0MywgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDk0LCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMjE3MjQsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjczNSwgMTk1NTIsIDIwMjg3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjI3NTAsIDE5Mjg4LCAyMTUyOSwgMjQwMzUsIDIzMTEyLCAyODA1NiwgMjM1MTEsIDI5NDgzLCAyODc1NiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMDMyNywgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMxMTU2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjQyNTQsIDIwMzcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjc0NDMsIDIwMzk1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjk0NTcsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzM0NDQsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4MzUwLCAyMDQyMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI1NjQ1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjA0NDcsIDIwNDc1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIwNTIzLCAyMjI1NywgMjA1NjksIDIwNzgzLCAyMTcxNSwgMTc2MDMsIDIwNjk5LCAyMDgzNywgMjA2MTQsIDIwNjMwLCAyMTE0OSwgMjA2NzAsIDIxNDA1LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTkxNzksIDIwNjk1LCAyMDcxNiwgMjA3MzIsIDIwNzU1LCAxOTE5NCwgMTgwNDIsIDIxNjQxLCAyMDU5MiwgMjA3NzksIDIwNTk4LCAyMTQxMiwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMDc5OSwgMjA3MDAsIDIxMDMxLCAyMDc0NCwgMjA2OTksIDIwODI4LCAxODA3NSwgMjEyNTksIDIwNTgxLCAyMDg1MywgMTgwNDgsIDIwODY4LCAyMDg4NCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAyMTE3MSwgMjEyMDAsIDIwOTMxLCAyMDk0NywgMjEzNzgsIDIwOTU1LCAyMDk3MSwgMTgwODYsIDIwNjQ1LCAyMTAwMiwgMjA5ODYsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMjkxNzYsIDIxMDQ0LCAyMTQzOCwgMjEwMTgsIDIxMTIyLCAyMTM5MywgMjEwNjAsIDIxODQ0LCAyMTA5NCwgMjA2NTQsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTk2NywgMjA3NjMsIDIxNzk5LCAyMTExMCwgMjE4MzAsIDIxMTM4LCAyMTI0NiwgMjEzMDEsIDE4MzM2LCAxODM2MSwgMjExNjUsIDIxMTg3LCAyMDgxMiwgMjEyMTYsIDIxMjMyLCAyMTI4NywgMjEzMTcsIDE4NTUzLCAyMTM0NywgMjEzNjMsIDIxNDI4LCAyMTQ1NCwgMjEyNzEsIDIxNDgzLCAyMTQ5OSwgMjE1MTUsIDIxNTc1LCAyMTQ2NywgMTg3MTIsIDIxNTkxLCAyMTYzMywgMjEwNzgsIDE4MTg5LCAxODE5OCwgMjA2NzksIDIxNjU3LCAyMTcwMSwgMjEwNzQsIDIxNjg3LCAyMTc0MCwgMjE3NTYsIDIxNzg2LCAyMTgxNSwgMjE4NjAsIDIxODc2LCAyMTg5MiwgMjE5NDYsIDIxOTYyLCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjQ1NywgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMzY4MTMsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMjE5ODEsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAyMjE1MSwgMjIwMDcsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDI3ODk4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMjIwNDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAyMjA3MCwgMjIxMTIsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDIyMTQyLCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYxMDksIDE5Mjg4LCAxODQ2OSwgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyMTY3LCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMTc3NjgsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjIyNywgMzY0ODcsIDIyMjczLCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMTkzMTYsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg3NDksIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMjIzMDQsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAxOTU4MCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjIzMzAsIDE5MDg5LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAxODcyMSwgMzY4NjYsIDIxOTkxLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyNzY1LCAxOTM0NywgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAxODExNCwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDIxNjA1LCAyNDAzNSwgMjMxMTIsIDMyNjE4LCAyMzUxMSwgMjk0ODMsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjkxMTYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNzQ0MywgMjI0OTMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU0MSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIyODM5LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjU2NDUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMjY4MywgMjI1MTYsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIyNTQwLCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIwNDk5LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDI5NDgzLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI5MTE2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjc0NDMsIDIyNDkzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1NjQsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMjgzOSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI1NjQ1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzI2ODMsIDIyNTE2LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDI0MDM1LCAyMzExMiwgMzI2MTgsIDIzNTExLCAyOTQ4MywgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyOTkwOCwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI3NDQzLCAyMjQ5MywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTY0LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjI4MzksIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNTY0NSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMyNjgzLCAyMjUxNiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjA0OTksIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDIxNjA1LCAyNDAzNSwgMjMxMTIsIDMyNjE4LCAyMzUxMSwgMjk0ODMsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjkxMTYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNzQ0MywgMjI1NjEsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU2NCwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIyODM5LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjU2NDUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMjY4MywgMjI1MTYsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIwNDk5LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAyMzgzNywgMjM1MTEsIDI5NDgzLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjU4NCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI5MTE2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjc0NDMsIDIyNDkzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1NjQsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMjgzOSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI1NjQ1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzI2ODMsIDIyNTE2LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDI0MDM1LCAyMzExMiwgMzI2MTgsIDIzNTExLCAzMTUwNywgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyODMwNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTEyLCAyNDY5NCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjQ0MiwgMTkyODgsIDIxNjA1LCAyNDAzNSwgMjMxMTIsIDI4MTM3LCAyMzUxMSwgMzE1MDcsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgzMDYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDMxNTA3LCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MzA2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDI0Njk0LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMxNTY4LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDIyNjkwLCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjc1ODQsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMjI2NTksIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjM2MCwgMTk1NTIsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4ODU1LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjI2NzUsIDIyODExLCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDE5MTMzLCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDIyODI3LCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MTM5LCAxOTI4OCwgMTk0NTcsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI5NzEsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg4NTUsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDE3NjE5LCAyMjA4MywgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA2NCwgMTkyODgsIDIyODY1LCAyMjg4MSwgMzIwMzEsIDIyODk3LCAyMjkxMywgMjI5NTYsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzAwMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzA1MiwgMjkxMTYsIDIzMDczLCAyOTI2OCwgMjQwMzUsIDI1NTYzLCAyNjkxNSwgMjMxMDYsIDIzMTMxLCAyMzExNCwgMjMxMTQsIDIzMTU5LCAyMzE4MSwgMjMxOTcsIDIzMjQ4LCAyMzUxMSwgMjM1MTEsIDIzMjgyLCAyMzMwNSwgMjI0OTMsIDMyMzY0LCAyNDAzNSwgMzM0NzIsIDMwMTM4LCAyNjMyNSwgMzE3NzAsIDMzNTA4LCAyNzM0NSwgMzM2NjcsIDIzMTE0LCAyMzMyMSwgMjM0NzMsIDIzMzUxLCAzNTc5MywgMzY1NzYsIDIzNTExLCAyMzM3NSwgMjI1MDAsIDI0MTQ1LCAyNDAzNSwgMjkxOTcsIDIwMTkyLCAyNDUzMywgMjM0NDAsIDIzMTE0LCAxOTAxNywgMjM0NTksIDIyODM5LCAyMzQ4OSwgMjM1MTAsIDIzNTExLCAzMzU2MywgMjM1MjgsIDMyMDc2LCAyNTM4OSwgMjQwMzUsIDI2NTc2LCAyMzU2MSwgMjM1ODMsIDIzMTE0LCAzMjY4MywgMjI1MTYsIDIzNjIyLCAyMzY1NSwgMjM1MTEsIDIzNjM0LCAzNTQ1NiwgMzcxNDQsIDIzMTEwLCAyMzY4MywgMzQxNTMsIDIwNDk5LCAzMjUxMywgMjU4MjQsIDIzNzA1LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAzMzI2MywgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMjA1MDcsIDMyMjQxLCAyMDE1MCwgMzE4NjIsIDI3NDY0LCAzNTEwOCwgMjM3MjcsIDIzMDA3LCAzNTg5NSwgMzQ5NTMsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDMzOTY3LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzY0MjcsIDE5NTUyLCAyMTYwNSwgMjQwMzUsIDIzMTEyLCAzMjYxOCwgMjM1MTEsIDI5NDgzLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI5MTE2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjcwMjcsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMTQ3MSwgMjM3NTYsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDY4NywgMjM3NzIsIDIyNDkzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1NjQsIDIzNzg4LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMTU1OSwgMjM4MjgsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI1MDg2LCAyMjgzOSwgMjM4NTMsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzODc2LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzI2ODMsIDIyNTE2LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMDQ5OSwgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAzMTc2MSwgMjM5MDksIDIzOTUzLCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDQ5LCAxOTI4OCwgMjE2MDUsIDMwODI1LCAyMzExMiwgMjM5ODcsIDIzNTExLCAyNDAwMywgMzEwMDEsIDI3NjE3LCAyNDAzNCwgMjQwMzUsIDI0MDM2LCAyNDA1MiwgMjQwODksIDIzMTE0LCAyMzExNCwgMjI0MjAsIDI0MTA5LCAyNDE2OCwgMjM1MTEsIDIzNTExLCAyOTExNiwgMjQxODgsIDI3NjA5LCAyMDAxNywgMjk1MTYsIDI0MDM1LCAyNjU3NiwgMjQyMjIsIDE5OTY4LCAyMzExNCwgMjQyNTIsIDMzODExLCAyMjQ2OCwgMjQyNzAsIDMzNTg3LCAyMzUxMSwgMjQzMjAsIDI3NDQzLCAyMjQ5MywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MzM5LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjgxMjgsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgyNzYsIDM0NTY0LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAzMjkyOSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI0MzU3LCAyMzAyOSwgMjI4MzksIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI0Mzc3LCAyNTY0NSwgMjQwMzUsIDM0MTEyLCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyNjY0MywgMjMxMTQsIDMyNjgzLCAyMjUxNiwgMjM1MTEsIDI1NjM4LCAyMzUxMSwgMjM3MTEsIDI0MDM1LCAyNDM5NSwgMjc4MDksIDIzMTE0LCAyNDQxNCwgMjA0OTksIDI0NDMyLCAzMDkxNywgMjM2MjgsIDI0MDM1LCAzMDY4MCwgMjMxMTEsIDIzMTE0LCAzMDIzMywgMjcwNzgsIDI1NzQ4LCAyNDQ1MiwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDI0NDc1LCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyNjE1NCwgMjQ1MTksIDI0NTU2LCAyNDU5NiwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI0NjM0LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAyNDY3OSwgMjQ3MjcsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjQxMiwgMTkyODgsIDIxNjA1LCAxOTk0MywgMzQ4NjEsIDMyNjE4LCAyNjAyNywgMjk0ODMsIDMyMDE2LCAzMjA1MCwgMzYyMzMsIDI0Nzc2LCAzNTU3NCwgMjQ4MDEsIDI0ODE5LCAzMjY3MSwgMzEyODksIDIyNDIwLCAyNDg2OCwgMjQ4ODYsIDIwMDg3LCAyNjg0OSwgMjkxMTYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAzNjIyOCwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI0OTgxLCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI5MDI4LCAyNzQ0MywgMjI0OTMsIDI0OTIzLCAyNzk2NSwgMjQwMzUsIDI0MDM1LCAzMjc5NywgMjQ5NDYsIDIzNDQzLCAyMzExNCwgMjMxMTQsIDI5NjM2LCAyNDk5NywgMjI4NDksIDI4MjUyLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyNTA0MiwgMjUxMTAsIDI0MDM1LCAyNDAzNSwgMzQwODUsIDI0MDM2LCAyNTEzMywgMjMxMTQsIDIzMTE0LCAyNTE1MiwgMjMwMjksIDIyODM5LCAyNTE2OSwgMjM1MTEsIDM2NzY0LCAyMzUxMSwgMjU2NDUsIDMwNDAzLCAyNDAzNSwgMjUxODYsIDI2NTc2LCAzMTgwNiwgMjQwOTMsIDI1MjEyLCAzMjY4MywgMjI1MTYsIDMyNzEzLCAyNjI0NSwgMzQyOTMsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIwNDk5LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMzI0MDYsIDIzMTExLCAyMzExNCwgMjg2NzYsIDMwOTQ0LCAyNzY4OSwgMjUyMzQsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDM3MDYzLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMjAzNzksIDI2MTAwLCAyOTIxOCwgMjAyMTEsIDMwMTA1LCAyNTI1NywgMjUyODQsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAyNDgzNCwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwMzQsIDE5Mjg4LCAyMTY3MSwgMjUzMTQsIDI1MDcyLCAyNTMzMCwgMjUzNDYsIDI1MzYyLCAyOTkzOSwgMjk5NTEsIDM1Mjg4LCAyOTk4NCwgMjM4MTIsIDI3MjE2LCAyNTQwNSwgMjU0MjQsIDMwNDU2LCAyMjU4NCwgMjYyOTIsIDI1NDYxLCAyNTQ4MCwgMzE1OTIsIDI5MTE2LCAyNTUxNiwgMzQ5NjMsIDI1NTQ1LCAyNzAwNywgMjU1NzksIDMzOTM3LCAyNTYxNCwgMjU2NjEsIDI1Njg2LCAzNDg3MiwgMjU3MDIsIDI1NzE4LCAyNTczNCwgMjU3NjksIDI1Nzk1LCAyNTgxMSwgMjU4NDAsIDIyNDkzLCAyNjUzMywgMjU4NTYsIDI0MDM1LCAyNTg3NiwgMzA3NjMsIDI3NDgxLCAyNTkwOSwgMjMxMTQsIDI4OTg3LCAyNTkzNiwgMjU5NTQsIDI5NzAwLCAyNTk4MywgMjM1MTEsIDMxNDEyLCAyNjA0MywgMjYwNjMsIDIyNTY4LCAyOTI0MSwgMjk1OTIsIDI2MTE2LCAzMTIxNiwgMzUzODMsIDI2MTcwLCAzNDc4MywgMjYxOTQsIDI2MjIxLCAyMjgzOSwgMjYyNDEsIDI2MjYxLCAyMjQ3NywgMjYyODMsIDI2MzA4LCAyNzMwNiwgMzEwMzUsIDI0NjU1LCAyNjU3NiwgMjk4NTQsIDMzMzg2LCAyNjM0MSwgMzI2ODMsIDIyNTE2LCAzMjE1MywgMzA5MjYsIDI2MzYxLCAxOTk5NiwgMjYzODEsIDM1NDYzLCAyNjM5NywgMjY0MjQsIDM0NjQ2LCAyNjQ3OCwgMzU2MDUsIDMxMzg2LCAyNjQ5NCwgMzU1NjcsIDMxOTY0LCAyMjk0MCwgMjM2ODksIDI1MjE4LCAzMDMwOSwgMzIyODksIDE5ODMwLCAzMzYwNSwgMjMxMTIsIDMyMTA5LCAyNzczMywgMjcwODQsIDI0NDk2LCAzNTg4NiwgMzUyMjEsIDI2NTI1LCAzNjYwMiwgMjY1NDksIDI2NTU4LCAyNjU3NCwgMjY1OTQsIDI2NjEzLCAyNjYyOSwgMjY2NjYsIDI2NzAwLCAyNjU3OCwgMjc2ODUsIDIzNzQwLCAyNDI4NSwgMzE2OTEsIDI2NzMzLCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2Mzk3LCAxOTU1MiwgMTg5OTEsIDI1ODg3LCAyODExNywgMzI2MTgsIDI2Nzc2LCAyOTQ4MywgMjk5MzksIDI2ODAyLCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyODY2NCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjI0MjAsIDMwMjk3LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyOTExNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI1NTU5LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzA1MjUsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjg3MjUsIDI3NDQzLCAyMjQ5MywgMjQwMzUsIDI0MDM1LCAyNzI0OSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyNjgyNywgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyNjg0NSwgMjM1MTEsIDM0NTY0LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNjk3OSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI0OTc0LCAyMzAyOSwgMjI4MzksIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI2ODY1LCAyNTY0NSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMyNjgzLCAyMjUxNiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjA0OTksIDIzNTExLCAyMzI2MSwgMjM2MjgsIDMzMzA1LCAyNDAzNSwgMjU1OTgsIDIzMTE0LCAxOTg3NCwgMzQyNTMsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDI2ODg2LCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyNjkzMSwgMjQ1NjksIDI2NDM5LCAyNjk0NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjAxOSwgMTkyODgsIDI2OTk1LCAyNDAzNSwgMjMxMTIsIDMyNjE4LCAyMzUxMSwgMzE1MDcsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgzMDYsIDI3MDQzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjcwNjEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI0MDM1LCAyNDAzNSwgMjk5NzgsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAzMzExNCwgMjMxMTQsIDIzMTE0LCAzMDAxMCwgMjk3MDAsIDIzNTExLCAzNTkxMywgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjcxNTUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDMwNDQ3LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMzA5MzUsIDIwMDk5LCAyNDE1MiwgMjU1MjksIDI3MTAwLCAzNDQ2MSwgMjcxMjEsIDIyNjI1LCAyOTE1NiwgMjYwMDksIDI3MTM3LCAzMDQyMiwgMzE5MDMsIDMxNjU1LCAyODg3MCwgMjcxNzEsIDMyNDM5LCAzMTczMSwgMTk4MzAsIDI3MjMyLCAyMjYxMiwgMjcyNjUsIDI2Nzg2LCAyNTQ5NCwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDIwMzQyLCAyNzI4OCwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwNzksIDE5Mjg4LCAyMTYwNSwgMjczMjIsIDI3MzM5LCAyODAyMCwgMjczNjEsIDI3MzgyLCAyOTkzOSwgMjQwMzUsIDI0MDM1LCAzMjU4MSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI3NDI1LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjc0NDIsIDI4MzA2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NzEwLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzIyNjEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzU3MTksIDI0Njk0LCAyOTUxMCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NzE3LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDMyMjE3LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNzQ1OSwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzYyNTIsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjg4NDAsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjc0ODAsIDM0NDgzLCAyODQwMSwgMjk3NjEsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MzgyLCAxOTI4OCwgMjE2MDUsIDI3NDk3LCAyNzUxNywgMjg1MDQsIDI4ODk4LCAyNzU2OSwgMjk5MzksIDI5NDAxLCAyNzYwMCwgMjczMjMsIDI3NjMzLCAxOTAyNSwgMjc2NjIsIDIzMTE0LCAyNzcwNSwgMjI0MjAsIDIwNDgzLCAyNzcyMSwgMjM1MTEsIDI3NzY1LCAyODMwNiwgMTk4MDMsIDIzNTQwLCAyNDAzNSwgMjQ2MTAsIDI3NzgxLCAyNzgwNSwgMjY2NTAsIDIzMTE0LCAyODU3MywgMzI5OTAsIDI1OTIwLCAyMjQ2OCwgMjY4NzAsIDIzNTExLCAyNjY4NCwgMzQyNjIsIDM0NzM3LCAyNTA1NywgMzQ2MjIsIDI0MDM1LCAyNDAzNSwgMjM5NzEsIDI0MjA2LCAyNzgyNSwgMjc4NDcsIDIzMTE0LCAyMzExNCwgMjc4NjUsIDI3ODg1LCAzNTc2NiwgMjc5MTQsIDIzNTExLCAyMzUxMSwgMzI3NjYsIDMyODQ0LCAyNzkzNCwgMjg3OTUsIDI2OTA5LCAyNzk1NSwgMjYwOTIsIDI3OTg4LCAyNTQ0NSwgMjgwMDUsIDI4MDM2LCAyODA1MiwgMjE5NjUsIDIzNTExLCAzMjE5NiwgMTk4OTcsIDI4MDcyLCAyODEwMiwgMzY1MzQsIDIxNTQxLCAyMzgwMSwgMjgxNTMsIDI4MTgwLCAyODE5NywgMjgyMjEsIDIzMDM2LCAzMjY5NSwgMjgyNTEsIDI4MjY4LCAyODI5MiwgMjM2NjcsIDM0ODI1LCAyMzkzMCwgMjQ1ODAsIDI4MzIyLCAyODM0NCwgMzE2MjcsIDI4MzY2LCAyNTk5NiwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAzNTYyNSwgMzM0NzcsIDMzMzU5LCAyNzY3NCwgMjgzOTMsIDMzOTkyLCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjg0MTcsIDI4NDMzLCAyODQ2MywgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjg0ODksIDI4NTIwLCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjg1NTAsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDIxNjA1LCAyNDAzNSwgMjMxMTIsIDMyNjE4LCAyMzUxMSwgMzE1MDcsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgzMDYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI4NTg5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjg2MDgsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjA0MzEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYwMDQsIDE5Mjg4LCAyODYzNCwgMzE5NTEsIDI4NTY1LCAyODcwMiwgMjg3MTgsIDI4NzQxLCAzMjU0NCwgMjAxNzUsIDI4NzkyLCAzMjA4NiwgMjAxMDUsIDI4ODExLCAyOTA1OSwgMjk4NjIsIDI4ODU2LCAyMjQyMCwgMjg4ODYsIDMwMzU0LCAyMzM1OSwgMjg5MjIsIDI4MzA2LCAyODk1MiwgMjM4ODgsIDI2MzIwLCAzNjUwNiwgMjQwMzUsIDI5MzMxLCAyODk2OCwgMzY2MDksIDIzMTE0LCAyOTAwMywgMzE2NjEsIDI3MDYxLCAzMDY0OSwgMjczNjYsIDIzNTExLCAyOTAyMywgMjc5MTgsIDI0Njk0LCAyNDAzNSwgMjQwMzUsIDIzODkzLCAzMzA5NCwgMzA4NjcsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDI5MDQ0LCAzNDE4NCwgMzAwMTAsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDI5MDgxLCAyOTEwMiwgMzQ1ODUsIDIwNDAyLCAyNzc4OSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDI5MTMyLCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDI5MTUzLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAzMDE3NCwgMjQwMzUsIDI0MDM1LCAyNzQwOSwgMjU0MzgsIDIzMTE0LCAyMzExNCwgMjkxNzIsIDM2NjY4LCAzMTMzMiwgMjM1MTEsIDIzNTExLCAyOTE5MiwgMzAxNDQsIDI0MDM1LCAyMzExMCwgMzAyMDMsIDIzMTE0LCAyMzQ2NywgMzE1NDQsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDIyNTQ1LCAyMzExMSwgMjMxMTQsIDI5MjEzLCAyNzA3OCwgMjc2ODksIDI5MjM0LCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDI5MjU3LCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyODc2OCwgMjkyOTAsIDI5MzIwLCAzNDc3NiwgMjkzNTMsIDIwMTQxLCAyMjQzNSwgMjkzNzgsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MzY3LCAxOTI4OCwgMjE2MDUsIDM0NjE2LCAxOTAwNiwgMzI2MTgsIDMxNDk3LCAzMTUwNywgMzYyMTYsIDIwMTg0LCAyNDAzNSwgMzQzOTMsIDI5NDI0LCAzNDY2OCwgMjMxMTQsIDM0OTAwLCAyOTQ0NywgMjI0MjAsIDMwMzYwLCAyMzUxMSwgMzcwODksIDI5NDczLCAyODMwNiwgMTk4MDMsIDI5NDk5LCAyNDM5OCwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMzE3OTksIDI5NTMyLCAyOTU1MCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMzIyOTgsIDI5NTcxLCAzMTE4NCwgMjM1MTEsIDIzNTEyLCAzNzEyNywgMzY2MjgsIDI5NTg5LCAyNDAzNSwgMjQxMzUsIDI0MDM1LCAyMzExMywgMjk2MDgsIDIzMTE0LCAyNzgzMSwgMjk2MzQsIDI4NjE4LCAyOTY1MiwgMzAwMzcsIDIzNTExLCAyNDE3MiwgMjk2NzEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyOTU1NSwgMjk2OTAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI5NzE5LCAyNDAzNSwgMjMxMTAsIDI5NzM4LCAyMzExNCwgMjM0NjcsIDM0MDM1LCAyOTc1NiwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDI5Nzc3LCAzNDM2NCwgMjgxODEsIDMwMjQzLCAyOTc5OSwgMzE5MjAsIDI3MjcyLCAyNzE4NSwgMjMwMDgsIDMxMTI2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjk4MjgsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNTk4OSwgMTk1NTIsIDE5Njg3LCAzNTEzOSwgMjg2NDksIDI5ODc4LCAyOTg5NCwgMjk5MjQsIDI5OTM5LCAyMzIyNCwgMjMwODUsIDMxOTY5LCAyNDAzNiwgMzUxNzMsIDI0NzUyLCAyNDgwMywgMjMxMTQsIDIyNDIwLCAzMTE5MCwgMzAzMTgsIDI0ODcwLCAyMzUxMSwgMjgzMDYsIDI5OTY3LCAyMzk2NywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDMwMDAwLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDMwMDI2LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjYwNzgsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDMwMDUzLCAzNzEzNywgMzAwNzEsIDIzMTE0LCAyMzExNCwgMzMzNjgsIDI1MTM2LCAyODYxOCwgMzA3MjMsIDIzNTExLCAyMzUxMSwgMzcwOTYsIDMxMzU2LCAzNDU4NSwgMjA0MDIsIDMwMDkyLCAzMDEyNywgMzAxNjAsIDI0MDM2LCAzNTc0MCwgMzAyMTksIDI0OTYwLCAzMDI1OSwgMjMwMjksIDIwMjcxLCAzNDA0MiwgMzAyODUsIDMwMzQyLCAzMDM3NiwgMjMyODksIDMwMDU1LCAzMDQwMCwgMzA0MTksIDMwNDM4LCAzMjY0MCwgMzM1MzIsIDMzNTE0LCAzMDQ3MiwgMTg3OTIsIDI2MjY3LCAyNDMyMywgMjMwNTcsIDMwNDkzLCAyMzYzOSwgMjAwMDgsIDMwMTk2LCAzMzE4OCwgMzA1MTcsIDIwMDc1LCAyMzUxMSwgMzA1NDEsIDIzNjI4LCAzMDU3OCwgMzM5MjgsIDI4Nzc2LCAzMDU5NCwgMTk4NzQsIDMwNjEwLCAzMDYzNywgMTk4MzAsIDMwNjc3LCAyNzY0NiwgMTk4NzIsIDI1Nzc5LCAyMzI2NiwgMjMyMzIsIDM1MDE2LCAzMDI0MywgMzA2OTYsIDI5ODEyLCAzMDcxMiwgMzA3NDYsIDI3MjA2LCAzMDc3OSwgMzA4MDcsIDIzMDA3LCAzMzM5NSwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMzE3MDMsIDIyOTI4LCAzMTY5MSwgMTk3ODcsIDMxMDc5LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYzNTIsIDE5Mjg4LCAyMzMzNSwgMzA4NDEsIDI2MTMxLCAzMDg4OCwgMzA5MDQsIDMwOTg2LCAyOTkzOSwgMjQwMzUsIDI0NzA0LCAzMTAxNywgMjAwMjUsIDIzMTE0LCAyNjE3OCwgMzEwNTEsIDMxMDk1LCAyMjQyMCwgMjM1MTEsIDIyNTI0LCAzMTE0MiwgMzExNzIsIDI4NTM0LCAzMTIwNiwgMzU0OTcsIDI1MTk2LCAyNDAzNSwgMjg1OTIsIDI0NTAzLCAyMzExNCwgMzEyMzksIDMxMjg1LCAyMzExNCwgMzEzMDUsIDMxMzIxLCAzMTM1NSwgMzEzNzIsIDMxNDA3LCAyMzUxMSwgMzA1NTYsIDI0Njk0LCAyNDAzNSwgMjc1MDEsIDE5ODA1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMzE0MjgsIDI0MDY2LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMzE4MzcsIDE4ODA5LCAyMzUxMSwgMzQ1ODUsIDMxNDQ4LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzA5MCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDMxNjE5LCAzNTAzOCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMzNzE0LCAyNDAzNSwgMzMwODUsIDI0MDM1LCAyOTQzMSwgMjMxMTQsIDMxNDY3LCAyMzExNCwgMjMxNDMsIDMxNDg3LCAyMzUxMSwgMzE1MjMsIDIzNTExLCAzNTE5NSwgMzY3ODMsIDI0MDM1LCAzMDExMSwgMjM1NjcsIDIzMTE0LCAyMzQ2NywgMzE1NDMsIDMxNTYwLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAzMDk1MywgMzE1ODQsIDM0NTA4LCAyNDAzNSwgMzE2MDgsIDI2MzQ1LCAzNzA1NSwgMjMyNjYsIDMxNjQzLCAzMTY3NywgMzE3MTksIDMxNzQ3LCAzMTc4NiwgMzE4MjIsIDI2ODk4LCAyMzAwOCwgMTk4NzYsIDMxODU5LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDMxODc4LCAzMTkzNiwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM1OTc0LCAxOTI4OCwgMjE2MDUsIDI3OTcyLCAzNTY2MywgMzE5ODUsIDI5NjU1LCAzMjAwMSwgMzY3MTUsIDI0Nzg1LCAyNTg5MywgMjM1NDUsIDMxOTEyLCAxOTg1MywgMTk5MTYsIDI1OTM4LCAyNDU0MCwgMjI0MjAsIDMxODQzLCAyOTY3NCwgMjk1NzMsIDMyNzM1LCAyODkzNiwgMTk4MDMsIDI0MDM1LCAyNDAzNSwgMzIwNDcsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyNzU0NCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAzMjE2MSwgMjM1MTEsIDIzNTEyLCAzMjA2NiwgMjQwMzUsIDMzMzEzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjc0MjYsIDMyMTAyLCAyMzExNCwgMjMxMTQsIDI4NjE4LCAzMjEyNSwgMjM1MTEsIDMyMTQ0LCAyMzUxMSwgMjM1MTEsIDMzNTY5LCAyMDQwMiwgMjQwMzUsIDI3MDQ1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjgzMjgsIDIzMTE0LCAzMDA3NiwgMzIxNzcsIDIzNTExLCAyMzUxMSwgMzAzODQsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzNTk1LCAzMjIxMiwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjI2MzUsIDI1NzUzLCAzMjIzMywgMzIyNTcsIDMyMjc3LCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAzMjMyMiwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjA3OSwgMTkyODgsIDMyMzUyLCAzNTI4NSwgMzIzODAsIDM0MTk2LCAzMzAxNiwgMzA2NjEsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgzMDYsIDMyNDA0LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMzI0MjIsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjQ2OTQsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjMxMTMsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMDI2OSwgMjk3MDAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMjksIDIwMjcxLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAxOTk0OSwgMjQwMzUsIDIzMTExLCAzMjQ1NSwgMTk4NzQsIDMxMjY5LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYzMzcsIDE5NTUyLCAxOTIwOSwgMjE2MTcsIDI2NTA5LCAzMjQ3NSwgMzI0OTEsIDMyNTI5LCAyOTkzOSwgMjQwMzUsIDMyNTc4LCAyNTI0MSwgMzI1OTcsIDIzMTE0LCAzMjYzNCwgMjkwMDcsIDMyNjU2LCAyMjQyMCwgMjM1MTEsIDMyNzI5LCAyNjM2NSwgMzI3NTEsIDI4MzA2LCAzMjc4OCwgMzI4ODIsIDI0MDM1LCAyNDAzNSwgMzI4MTMsIDM2NzI3LCAyMzExNCwgMzMxODIsIDIzMTE0LCAyNzU1MywgMzMyMzUsIDMyODI5LCAyMzUxMSwgMzI3MDYsIDIzNTExLCAyODkwNiwgMjgzNzcsIDI2OTYyLCAzMjg4MSwgMzI5MDQsIDMyODk4LCAzMjkyMCwgMjQwMzUsIDMyOTUzLCAyMzExNCwgMzI5NzcsIDI2NDA4LCAyMzExNCwgMjgxNjQsIDMzMDA2LCAyMzUxMSwgMzMwMzksIDM1Nzc0LCAyMzUxMSwgMzIzMDYsIDIwNDAyLCAzMzA3NiwgMzA4NzIsIDI0MDM1LCAyNDAzNiwgMjU0MDgsIDMzMTEwLCAyODk3OSwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMzU4MzUsIDMzMTMwLCAzMzA1NCwgMjM1MTEsIDMwNTYyLCAzMzE0OCwgMjQwMzUsIDI0MDM1LCAzMzE2NywgMjMxMTQsIDIzMTE0LCAzMzc3NSwgMjMwMzYsIDIwNDU5LCAyMzUxMSwgMjM1MTEsIDI1NDY0LCAyNDY0NiwgMjQwMzUsIDI0MDM1LCAyMjQ0NiwgMjMxMTQsIDIzMTE0LCAyNTYyNywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMzEzOTEsIDMzMjA0LCAzMzIyMCwgMzMyNTEsIDMzMjg3LCAyNjU3NywgMjY1OTcsIDIwMjExLCAzMzMyOSwgMTk4NzYsIDMzMzQ1LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDI4NDczLCAyMjU5OSwgMzE2OTEsIDMzNDExLCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM1OTU5LCAxOTI4OCwgMjE5MDcsIDI3MjQzLCAyOTg0MywgMzI2MTgsIDMzNDI3LCAzMTUwNywgMjk5MzksIDMzNDYwLCAzNDA5MCwgMjQwMzUsIDI0MDM2LCAzMzQ5MywgMjQ0MTYsIDMzNTMwLCAyMzExNCwgMjI0MjAsIDMzNTQ4LCAyNDM3OSwgMzM1ODUsIDIzNTExLCAyODMwNiwgMTk4MDMsIDMzNjAzLCAyNDIwMiwgMjQwMzUsIDI0MDM1LCAyNTU5MywgMzM3NDksIDI4MjA1LCAyMzExNCwgMjMxMTQsIDMyMzg4LCAyMjQ2OCwgMzM4NTMsIDMzMDYwLCAyMzUxMSwgMjM1MTEsIDMxMzM5LCAzMzYyMSwgMjQwMzUsIDI0MDM1LCAzNDM5NywgMjQ2MTgsIDMwNzU3LCAzMzY2MywgMjMxMTQsIDIzMTE0LCAzMzY4MywgMzU2ODQsIDI4NjE4LCAyNjY3OCwgMjM1MTEsIDIzNTExLCAzMjUwNiwgMzM2OTksIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDMyNTYyLCAyNjk3MywgMjQwMzYsIDIzMTE0LCAyMzExNCwgMzMzNzcsIDMzNzczLCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyMzUxMSwgMzA2MjEsIDIzNTExLCAyMzg2MCwgMjQwMzUsIDMzNzkxLCAyMTU1MywgMjY1NzYsIDM2NTU4LCAyMzExNCwgMzM4MDksIDIzMDM2LCAzMjg1NywgMjYwNDcsIDIzNTExLCAzMzgyNywgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMzEyNTIsIDIzNTExLCAzMzg0NSwgMjM2MjgsIDI0MDM1LCAyNDQ1OSwgMjMxMTEsIDIzMTE0LCAzMzg2OSwgMjcwNzgsIDMwNzkxLCAyOTc4MywgMjQwMzUsIDI0NzQyLCAxOTg3MiwgMzM4OTUsIDIzMjY2LCAyNjQ2MiwgMTk3MTAsIDMzODc5LCAzMzkxOSwgMjY1NzcsIDI2NTk3LCAyNDEyMywgMjQ5MzAsIDIxOTMwLCAyMDIwOCwgMzA1MDEsIDMzOTUzLCAyNTI2OCwgMjAyNTIsIDMzOTgzLCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjMyMiwgMTk1NTIsIDIzMzkwLCAzMzYzNCwgMzUxNTQsIDM0MDA4LCAzNDAyNCwgMzQwNTgsIDM1NTQ0LCAzNDEwNiwgMzQxMjgsIDI2ODExLCAzMzE1MSwgMzQxNDQsIDM0MTY5LCAzNDIxMiwgMjMxMTQsIDM0MjI4LCAzNDI0NCwgMzQyNzgsIDM0MzE1LCAyMzUxMSwgMzQzMzEsIDM0MzQ3LCAzNDM4MCwgMzQ0MTMsIDI0MDM1LCAyNDY2MywgMjY1NzYsIDM0NDI5LCAzNDQ1MywgMzQ0NzcsIDI5NTM0LCAzMzgxMSwgMjI0NjgsIDM0NDk5LCAzNDUyNCwgMzQ1NTcsIDI1MTcwLCAzNDU4MCwgMzU0MzYsIDIzOTM3LCAzNDYwMSwgMjQwMzUsIDI0MzQxLCAyNjQ1MywgMjMxMTMsIDM0NjM4LCAzNDY2MiwgMjMxMTQsIDI0MjM2LCAyODYxOCwgMzQ2ODQsIDM0NzAzLCAzNDcyOSwgMjM1MTEsIDM1MzUyLCAzNDc1MywgMzQ3OTksIDI0MDM1LCAzNDgxNSwgMzI1NTgsIDM0ODQ4LCAzNDg4OCwgMzU4MTQsIDM0OTIzLCAyMzE2NSwgMjkxMzcsIDIzNjA2LCAzMDMyNiwgMzA3MzAsIDM0OTM5LCAzMzAyMywgMzA1NjIsIDM2ODQ4LCAzNDk3OSwgMjQwMzUsIDI0ODQ3LCAzNDk5NiwgMjMxMTQsIDIzMTE0LCAzNTAzMiwgMjk2OTUsIDM1MDU0LCAyMzUxMSwgMjM1MTEsIDM1MDkxLCAzMzI5NiwgMzUxMjQsIDI0Mjk2LCAyODIzNSwgMjQzNjEsIDM2Mjc2LCAzMjc3MiwgMzUwNjcsIDM1MTg5LCAyNzMwMSwgMzA4NTUsIDI0ODUyLCAyMjQ1MiwgMzUyMTEsIDM1MjM3LCAzNTMxNiwgMjU1MDAsIDM1MjcwLCAyMzQwNSwgMjQzMDQsIDM1MzA0LCAyOTM2MiwgMjQwMzYsIDIzMTE0LCAzNTMzMiwgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDM1MzY4LCAyODgyMywgMjM5MjAsIDMyMzM2LCAzNTQwNSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMzU0MjEsIDM1NDc5LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzU5NDQsIDIyNzk1LCAyMTYwNSwgMzM2NDcsIDM1ODc3LCAzNTUxMywgMzA5NjIsIDM1NTI5LCAzNDA3MywgMzU1NTcsIDI0MDM1LCAyNDAzNSwgMjA0MDUsIDMxMTA3LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzNTU5MCwgMzQ3MTMsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM1NjQxLCAxOTgwMywgMjk0MDgsIDMyOTM3LCAyNTI5OCwgMjQwMzUsIDM1NjU3LCAyMzExNSwgMjc4NDksIDI0NzYwLCAzNTY3OSwgMjYyMDUsIDIyNDY4LCAyMzUxMSwgMzU3MDAsIDI0OTA3LCAyNDkwMSwgMzUwNzUsIDMxODkzLCAzNDk4MCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAzNTAwOSwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDM1NzE2LCAzMDk3MCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIzMjE1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMzU3MzUsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI3MTA1LCAzNTc1NiwgMzU3OTAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM1MjU0LCAzNTQ0NiwgMjQwMzUsIDI0MDM1LCAzMTIyMywgMzU4MDksIDIzMTE0LCAyMzExNCwgMjMwMzYsIDM2ODI1LCAzNTgzMCwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAzMTAzMSwgMjAzNTUsIDE5ODcyLCAzMzkwMywgMjMyNjYsIDI0MDM2LCAyMzExNCwgMjg2ODYsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMjM0MjQsIDIwMjA4LCAyNDcxMSwgMzEwNjUsIDI0NDg2LCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAxOTc3MywgMzU4NTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MzA3LCAxOTI4OCwgMjE2MDUsIDM1NDk0LCAxOTcwMiwgMzI2MTgsIDMzNDM3LCAzMTUwNywgMjk5MzksIDI1MTE3LCAyNDAzNSwgMjc5MzksIDI0MDM2LCAyNzg2OSwgMjMxMTQsIDI2ODI5LCAyMzExNCwgMjI0MjAsIDIzNDk0LCAyMzUxMSwgMzMxMzIsIDIzNTExLCAyODMwNiwgMTk4MDMsIDI0MDM1LCAzNDgzMiwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDI1MTUzLCAyMzExNCwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMjM1MTEsIDIzNTExLCAzNTkxMSwgMjM1MTEsIDIzNTEyLCAyNDY5NCwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAyOSwgMjAyNzEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzMDU2MiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM2MzQsIDI0MDM1LCAyNDAzNSwgMjMxMTAsIDIzMTE0LCAyMzExNCwgMjM0NjcsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAyNDAzNSwgMjMxMTEsIDIzMTE0LCAxOTg3NCwgMjcwNzgsIDI3Njg5LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNTkyOSwgMTkyODgsIDIxNjA1LCAyNTg2MCwgMjMxMTIsIDM2MTg1LCAyMzUxMSwgMzYyMDEsIDI5OTM5LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIyNDIwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjgzMDYsIDE5ODAzLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzMzgxMSwgMjI0NjgsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMiwgMjY3NDgsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMzYyNDksIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyODYxOCwgMjg4MzUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAzNDU4NSwgMjA0MDIsIDI0MDM1LCAyNzE1MSwgMjQwMzUsIDI2NzYwLCAyMzExNCwgMjc5ODksIDIzMTE0LCAyMzExNCwgMzYyNjgsIDIwMjcxLCAyMzUxMSwgMjQ0MzYsIDIzNTExLCAyOTcwMywgMzA1NjIsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzAzNiwgMjk2OTUsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDIzNjM0LCAyNDAzNSwgMjQwMzUsIDIzMTEwLCAyMzExNCwgMjMxMTQsIDIzNDY3LCAyMzUxMSwgMjMyNjEsIDIzNjI4LCAyNDAzNSwgMjQwMzUsIDIzMTExLCAyMzExNCwgMTk4NzQsIDI3MDc4LCAyNzY4OSwgMTk4MzAsIDI0MDM1LCAyMzExMiwgMTk4NzIsIDI3NzQxLCAyMzI2NiwgMjQwMzYsIDIzMTE0LCAzMDI0MywgMTk4MjksIDI2NTc3LCAyNjU5NywgMjAyMTEsIDIzMDA4LCAxOTg3NiwgMjAyMDgsIDIzMDA3LCAyMDA0NiwgMjAxMzIsIDI2NTc4LCAyNzY4NSwgMjAxNDEsIDI0NTY5LCAzMTY5MSwgMTk3ODcsIDI5MzA0LCAyMDI2OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYyOTIsIDE5Mjg4LCAyMTYwNSwgMzY1MDMsIDIxOTIyLCAzMjYxOCwgMzQ1MzQsIDMxNTA3LCAzNjUyMiwgMjQwMzUsIDMzNzkzLCAyNDAzNSwgMzU4NjQsIDIzMTE0LCAyMzExNCwgMzY1NTUsIDIzNDE3LCAyMjQyMCwgMjM1MTEsIDIzNTExLCAzNjU3NCwgMjYwMjAsIDI4MzA2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMzM4MTEsIDIyNDY4LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDM2NTkyLCAyNDAzNSwgMjQwMzUsIDM2NjI1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMzI5NjEsIDIzMTE0LCAyMzExNCwgMjk2MTgsIDI5NzAwLCAyMzUxMSwgMjkwODYsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAzNjY0NCwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjk3NDAsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI5MDY1LCAzNjY2MywgMzE1MjcsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MDc5LCAxOTI4OCwgMjE2MDUsIDMxNDUxLCAyMzExMiwgMzY2ODQsIDIzNTExLCAzNjcwMCwgMjk5MzksIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDMwMTg1LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyNzUyNiwgMjI0MjAsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMyODY1LCAyODMwNiwgMTk4MDMsIDM2NzQzLCAyNDAzNSwgMjcwMTcsIDI0MDM1LCAyNjU3NiwgMjc1MzUsIDIzMTE0LCAzMTQzMiwgMjMxMTQsIDMzODExLCAyMjQ2OCwgMzMyNzEsIDIzNTExLCAzMjEyOCwgMjM1MTEsIDIzNTEyLCAyNDY5NCwgMjQwMzUsIDI3MTk2LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyMzExMywgMzI0NTksIDIzMTE0LCAyMzExNCwgMjMxMTQsIDI4NjE4LCAyOTcwMCwgMzM4MjksIDM2NzYyLCAyMzUxMSwgMjM1MTEsIDM0NTg1LCAyMDQwMiwgMjQwMzUsIDM2NzQ2LCAyNDAzNSwgMjk3MjIsIDIzMTE0LCAyMzExNCwgMzQ0MzcsIDIzMTE0LCAzNDkwNywgMjAyNzEsIDIzNTExLCAyMzUxMSwgMTg4MDEsIDIzNTExLCAyMzIwNiwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjY1NzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDM2LCAyOTY5NSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzY4MzcsIDI0MDM1LCAyNDAzNSwgMzM3MzksIDIzMTE0LCAyMzExNCwgMjUwOTQsIDIzNTExLCAyMzI2MSwgMjM2MjgsIDI0MDM1LCAzNjc4MCwgMjMxMTEsIDI0MDczLCAxOTg3NCwgMjcwNzgsIDM1MzQ0LCAxOTgzMCwgMjQwMzUsIDIzMTEyLCAxOTg3MiwgMjc3NDEsIDIzMjY2LCAyNDAzNiwgMjMxMTQsIDMwMjQzLCAxOTgyOSwgMjY1NzcsIDI2NTk3LCAyMDIxMSwgMjMwMDgsIDE5ODc2LCAyMDIwOCwgMjMwMDcsIDIwMDQ2LCAyMDEzMiwgMjY1NzgsIDI3Njg1LCAyMDE0MSwgMjQ1NjksIDMxNjkxLCAxOTc4NywgMjkzMDQsIDIwMjY4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAyMjcyMCwgMTkyODgsIDM2Nzk5LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NCwgMjE5OTEsIDIyMjExLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE3NjMxLCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAzNjg4MywgMzY5MDYsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMjI3MDUsIDE5Mjg4LCAxOTQ1NywgMzY4NjYsIDE3NDY2LCAzNjg5MCwgMzY4NjYsIDE5Mzc1LCAyMjk3MSwgMjI5ODcsIDE3NTU2LCAxNzU3NSwgMjIyODgsIDE3NDg2LCAxNzUwOSwgMTc1MjUsIDE4MzczLCAxODg1NSwgMjI5ODQsIDE3NTUzLCAxNzU3MiwgMjIyODUsIDE4NDYyLCAxNzk5MCwgMTg2MjIsIDE5NDExLCAyMDMwNiwgMTc5OTYsIDE3Njg5LCAxNzQ3MCwgMTc1OTEsIDIwODk2LCAxNzQ2OCwgMTc2MTksIDIyMDgzLCAzNjg2NywgMTk0MDQsIDIwMjk5LCAzNjg2NiwgMTc2NDcsIDE3ODYyLCAxODkyMSwgMTk1MTQsIDE3NzA1LCAyMDMxMSwgMzcwMTcsIDE3NzI4LCAxNzc1NiwgMTc3ODQsIDE3ODAwLCAxNzgyNSwgMTc4NTQsIDE4NDAzLCAxODkyOCwgMTk1MjEsIDE3NzEyLCAzNzAwOCwgMzcwMjQsIDE3ODc4LCAxODg4NCwgMTc5MDAsIDE3OTIyLCAxNzk0NCwgMTgxNzgsIDE3OTYwLCAxODAxMiwgMTgzODEsIDE4MDY0LCAxODIxOCwgMTc4ODQsIDE4ODkwLCAxNzkwNiwgMTc5MjgsIDE4MTAyLCAyNTAyMiwgMTgxMzAsIDM2OTMxLCAzNjk2MywgMTc0OTMsIDE4MTUwLCAxODE2NiwgMTgyMTQsIDI1MDEwLCAyNTAyNiwgMTgxMzQsIDM2OTM1LCAxODI2MiwgMTgyNzgsIDE4Mjk0LCAxODMyMCwgMTgzMzYsIDE4MzYxLCAxODM5NywgMTgyNzQsIDIyMDk2LCAxODMwNCwgMTg0NDgsIDE4NDg1LCAxODUyMywgMTg1NTMsIDE4NTgzLCAxOTE0OSwgMTg2MzgsIDE4NDk3LCAxOTY1NiwgMTg2NjQsIDE4NjgwLCAxODUwNywgMTg2OTYsIDE5MTY0LCAxODcxMiwgMTg3MzcsIDE3NjgxLCAyMjAyNiwgMjA5MDYsIDIwOTE1LCAyMjA1NCwgMTc4MzgsIDE3NDUwLCAyMjAyMiwgMTg3NjUsIDE5MjI1LCAxODg0MSwgMTg4NzEsIDE4OTA2LCAxOTI0MSwgMTkyNTcsIDE4OTc2LCAxOTA0MSwgMTkwNTYsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM2MTI0LCAxOTI4OCwgMzY5NTEsIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAyMTk5MSwgMjI0MDQsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg1NjcsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODQ2MiwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDM2OTc5LCAzNjk5NSwgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAzNjEzOSwgMTkyODgsIDE5NDU3LCAzNjg2NiwgMTc0NjYsIDM2ODkwLCAzNjg2NiwgMjE5OTEsIDIyOTcxLCAyMjk4NywgMTc1NTYsIDE3NTc1LCAyMjI4OCwgMTc0ODYsIDE3NTA5LCAxNzUyNSwgMTgzNzMsIDE4MDI3LCAyMjk4NCwgMTc1NTMsIDE3NTcyLCAyMjI4NSwgMTg0NjIsIDE3OTkwLCAxODYyMiwgMTk0MTEsIDIwMzA2LCAxNzk5NiwgMTc2ODksIDE3NDcwLCAxNzU5MSwgMjA4OTYsIDE3NDY4LCAxNzYxOSwgMjIwODMsIDM2ODY3LCAxOTQwNCwgMjAyOTksIDM2ODY2LCAxNzY0NywgMTc4NjIsIDE4OTIxLCAxOTUxNCwgMTc3MDUsIDIwMzExLCAzNzAxNywgMTc3MjgsIDE3NzU2LCAxNzc4NCwgMTc4MDAsIDE3ODI1LCAxNzg1NCwgMTg0MDMsIDE4OTI4LCAxOTUyMSwgMTc3MTIsIDM3MDA4LCAzNzAyNCwgMTc4NzgsIDE4ODg0LCAxNzkwMCwgMTc5MjIsIDE3OTQ0LCAxODE3OCwgMTc5NjAsIDE4MDEyLCAxODM4MSwgMTgwNjQsIDE4MjE4LCAxNzg4NCwgMTg4OTAsIDE3OTA2LCAxNzkyOCwgMTgxMDIsIDI1MDIyLCAxODEzMCwgMzY5MzEsIDM2OTYzLCAxNzQ5MywgMTgxNTAsIDE4MTY2LCAxODIxNCwgMjUwMTAsIDI1MDI2LCAxODEzNCwgMzY5MzUsIDE4MjYyLCAxODI3OCwgMTgyOTQsIDE4MzIwLCAxODMzNiwgMTgzNjEsIDE4Mzk3LCAxODI3NCwgMjIwOTYsIDE4MzA0LCAxODQ0OCwgMTg0ODUsIDE4NTIzLCAxODU1MywgMTg1ODMsIDE5MTQ5LCAxODYzOCwgMTg0OTcsIDE5NjU2LCAxODY2NCwgMTg2ODAsIDE4NTA3LCAxODY5NiwgMTkxNjQsIDE4NzEyLCAxODczNywgMTc2ODEsIDIyMDI2LCAyMDkwNiwgMjA5MTUsIDIyMDU0LCAxNzgzOCwgMTc0NTAsIDIyMDIyLCAxODc2NSwgMTkyMjUsIDE4ODQxLCAxODg3MSwgMTg5MDYsIDE5MjQxLCAxOTI1NywgMTg5NzYsIDE5MDQxLCAxOTA1NiwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMzYxMzksIDE5Mjg4LCAyMTUyOSwgMjQwMzUsIDIzMTEyLCAyMzAzMywgMjM1MTEsIDMxNTA3LCAyNTM3NywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzYsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAzNzA0MCwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDI4MDg2LCAxOTgwMywgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDI2NTc2LCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjQyNTQsIDM3MDc5LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTIsIDM0NzY2LCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNSwgMjQwMzUsIDIzMTEzLCAyMzExNCwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjg2MTgsIDI5NzAwLCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMzQ1ODUsIDIwNDAyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNDAzNiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMxMTQsIDIzMDI5LCAyMDI3MSwgMjM1MTEsIDIzNTExLCAyMzUxMSwgMjM1MTEsIDMwNTYyLCAyNDAzNSwgMjQwMzUsIDI0MDM1LCAyNjU3NiwgMjMxMTQsIDIzMTE0LCAyMzExNCwgMjMwMzYsIDI5Njk1LCAyMzUxMSwgMjM1MTEsIDIzNTExLCAyMzYzNCwgMjQwMzUsIDI0MDM1LCAyMzExMCwgMjMxMTQsIDIzMTE0LCAyMzQ2NywgMjM1MTEsIDIzMjYxLCAyMzYyOCwgMjQwMzUsIDI0MDM1LCAyMzExMSwgMjMxMTQsIDE5ODc0LCAyNzA3OCwgMjc2ODksIDE5ODMwLCAyNDAzNSwgMjMxMTIsIDE5ODcyLCAyNzc0MSwgMjMyNjYsIDI0MDM2LCAyMzExNCwgMzAyNDMsIDE5ODI5LCAyNjU3NywgMjY1OTcsIDIwMjExLCAyMzAwOCwgMTk4NzYsIDIwMjA4LCAyMzAwNywgMjAwNDYsIDIwMTMyLCAyNjU3OCwgMjc2ODUsIDIwMTQxLCAyNDU2OSwgMzE2OTEsIDE5Nzg3LCAyOTMwNCwgMjAyNjgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDM3MTEyLCAzNzE2MCwgMTg0NjksIDM2ODY2LCAxNzQ2NiwgMzY4OTAsIDM2ODY2LCAxNzY1NiwgMzcxNzQsIDIyOTg3LCAxNzU1NiwgMTc1NzUsIDIyMjg4LCAxNzQ4NiwgMTc1MDksIDE3NTI1LCAxODM3MywgMTg1MzcsIDIyOTg0LCAxNzU1MywgMTc1NzIsIDIyMjg1LCAxODc4MCwgMTc5OTAsIDE4NjIyLCAxOTQxMSwgMjAzMDYsIDE3OTk2LCAxNzY4OSwgMTc0NzAsIDE3NTkxLCAyMDg5NiwgMTc0NjgsIDM2ODgzLCAzNjkwNiwgMzY4NjcsIDE5NDA0LCAyMDI5OSwgMzY4NjYsIDE3NjQ3LCAxNzg2MiwgMTg5MjEsIDE5NTE0LCAxNzcwNSwgMjAzMTEsIDM3MDE3LCAxNzcyOCwgMTc3NTYsIDE3Nzg0LCAxNzgwMCwgMTc4MjUsIDE3ODU0LCAxODQwMywgMTg5MjgsIDE5NTIxLCAxNzcxMiwgMzcwMDgsIDM3MDI0LCAxNzg3OCwgMTg4ODQsIDE3OTAwLCAxNzkyMiwgMTc5NDQsIDE4MTc4LCAxNzk2MCwgMTgwMTIsIDE4MzgxLCAxODA2NCwgMTgyMTgsIDE3ODg0LCAxODg5MCwgMTc5MDYsIDE3OTI4LCAxODEwMiwgMjUwMjIsIDE4MTMwLCAzNjkzMSwgMzY5NjMsIDE3NDkzLCAxODE1MCwgMTgxNjYsIDE4MjE0LCAyNTAxMCwgMjUwMjYsIDE4MTM0LCAzNjkzNSwgMTgyNjIsIDE4Mjc4LCAxODI5NCwgMTgzMjAsIDE4MzM2LCAxODM2MSwgMTgzOTcsIDE4Mjc0LCAyMjA5NiwgMTgzMDQsIDE4NDQ4LCAxODQ4NSwgMTg1MjMsIDE4NTUzLCAxODU4MywgMTkxNDksIDE4NjM4LCAxODQ5NywgMTk2NTYsIDE4NjY0LCAxODY4MCwgMTg1MDcsIDE4Njk2LCAxOTE2NCwgMTg3MTIsIDE4NzM3LCAxNzY4MSwgMjIwMjYsIDIwOTA2LCAyMDkxNSwgMjIwNTQsIDE3ODM4LCAxNzQ1MCwgMjIwMjIsIDE4NzY1LCAxOTIyNSwgMTg4NDEsIDE4ODcxLCAxODkwNiwgMTkyNDEsIDE5MjU3LCAxODk3NiwgMTkwNDEsIDE5MDU2LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCAxOTA1OCwgMTkwNTgsIDE5MDU4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDEyNzAxMSwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMTI3MDExLCAxMjcwMTEsIDEyNzAxMSwgNTMyNjQsIDE4LCAxOCwgMCwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDAsIDI4LCAyOCwgMjgsIDI4LCAxMDI0MzIsIDAsIDAsIDEyNzAxMSwgMCwgMjIyMDAzMiwgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzAwMjM2OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjU3NjM4NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQxNjY0MCwgMjQyNDgzMiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjU0MzYxNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjYyOTYzMiwgMjIxNTkzNiwgMjYxNzM0NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjY5MTA3MiwgMjIxNTkzNiwgMjcwNzQ1NiwgMjIxNTkzNiwgMjcxNTY0OCwgMjIxNTkzNiwgMjcyMzg0MCwgMjc2NDgwMCwgMjIxNTkzNiwgMjIxNTkzNiwgMjc5NzU2OCwgMjIxNTkzNiwgMjgyMjE0NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjg1NDkxMiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjkxMjI1NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMTgwMjI0LCAwLCAwLCAyMTc0OTc2LCAwLCAwLCAyMTcwODgwLCAyNjE3MzQ0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNjkxMDcyLCAyMTcwODgwLCAyNzA3NDU2LCAyMTcwODgwLCAyNzE1NjQ4LCAyMTcwODgwLCAyNzIzODQwLCAyNzY0ODAwLCAyMTcwODgwLCAyMTcwODgwLCAyNzk3NTY4LCAyMTcwODgwLCAyMTcwODgwLCAyNzk3NTY4LCAyMTcwODgwLCAyODIyMTQ0LCAyMTcwODgwLCAyMTcwODgwLCAyODU0OTEyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyOTEyMjU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNjA5MTUyLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNjU0MjA4LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAxODQ1OTksIDI4MCwgMCwgMjE3NDk3NiwgMCwgMCwgMjIxNTkzNiwgMzExNzA1NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgNTQ0LCAwLCA1NDYsIDAsIDAsIDIxNzkwNzIsIDAsIDAsIDAsIDU1MiwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzExNzA1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjIzMjMyMCwgMjIzMjMyMCwgMCwgMjI0MDUxMiwgMjI0MDUxMiwgMCwgMCwgMCwgNjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTI5MzQ0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDAwMjU2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNzExNTUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNzYwNzA0LCAyNzY4ODk2LCAyNzg5Mzc2LCAyODEzOTUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyODc1MzkyLCAyOTA0MDY0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDUzNTA0LCAyNDU3NjAwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAxNjc5MzYsIDAsIDAsIDAsIDAsIDIxNzQ5NzYsIDAsIDAsIDIyMTU5MzYsIDIyMTU5MzYsIDI1MTQ5NDQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI1OTI3NjgsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMyNzY4LCAwLCAwLCAwLCAwLCAwLCAyMTc0OTc2LCAzMjc2OCwgMCwgMjYzMzcyOCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjcxMTU1MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjc2MDcwNCwgMjc2ODg5NiwgMjc4OTM3NiwgMjgxMzk1MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjg3NTM5MiwgMjkwNDA2NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3NDk3NiwgMCwgNjU4MTksIDIyMTU5MzYsIDIyMTU5MzYsIDMwMzEwNDAsIDIyMTU5MzYsIDMwNTU2MTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwOTI0ODAsIDIyMTU5MzYsIDIyMTU5MzYsIDMxMjUyNDgsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMDIzNjgsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzA4ODAsIDIxNzA4ODAsIDI0OTQ0NjQsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxOTg5NzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDAsIDIzNzk3NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NDUzMTIsIDIxNzA4ODAsIDI0NjU3OTIsIDI0NzM5ODQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MjMxMzYsIDIxNzA4ODAsIDIxNzA4ODAsIDI2NDE5MjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2OTkyNjQsIDIxNzA4ODAsIDI3Mjc5MzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI4Nzk0ODgsIDIxNzA4ODAsIDI5MTYzNTIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI4Nzk0ODgsIDIxNzA4ODAsIDI5MTYzNTIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMjY5NDQsIDIxNzA4ODAsIDIxNzA4ODAsIDMwNjM4MDgsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMTI5NjAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMzM0NDAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMTI5NjAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMzM0NDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxNjIxMTIsIDIxNzA4ODAsIDIxNzA4ODAsIDMxODI1OTIsIDMxODY2ODgsIDIxNzA4ODAsIDIzNzk3NzYsIDIyMTU5MzYsIDI1MjMxMzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI1OTY4NjQsIDIyMTU5MzYsIDI2MjE0NDAsIDIyMTU5MzYsIDIyMTU5MzYsIDI2NDE5MjAsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDU0OCwgMCwgMCwgMCwgMCwgMjg3LCAyMTcwODgwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDAwMjU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTE3MDU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyNjk5MjY0LCAyMjE1OTM2LCAyNzI3OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyODc5NDg4LCAyMjE1OTM2LCAyOTE2MzUyLCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAxODg0MTYsIDAsIDIxNzkwNzIsIDAsIDAsIDAsIDAsIDAsIDI4NywgMjE3MDg4MCwgMCwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjQwMDM5NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzAzMTE3OSwgMjE3MTAxOSwgMzA1NTc1NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjIxNTkzNiwgMzEzMzQ0MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE2MjExMiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE4MjU5MiwgMzE4NjY4OCwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjUyMzI3NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU5NzAwMywgMjE3MTAxOSwgMjYyMTU3OSwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE2MjExMiwgMjE3MDg4MCwgMjE3MDg4MCwgMzE4MjU5MiwgMzE4NjY4OCwgMjE3MDg4MCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCA0MzM3NjY0LCAyOCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjYyOTYzMiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjcxOTc0NCwgMjc0NDMyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjgzNDQzMiwgMjgzODUyOCwgMjE3MDg4MCwgMjkwODE2MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjkzNjgzMiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjcxOTc0NCwgMjc0NDMyMCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjgzNDQzMiwgMjgzODUyOCwgMjIxNTkzNiwgMjkwODE2MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjkzNjgzMiwgMjIxNTkzNiwgMjIxNTkzNiwgMjk4NTk4NCwgMjIxNTkzNiwgMjk5NDE3NiwgMjIxNTkzNiwgMjIxNTkzNiwgMzAxNDY1NiwgMjIxNTkzNiwgMzA1OTcxMiwgMzA3NjA5NiwgMzA4ODM4NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ0NTMxMiwgMjIxNTkzNiwgMjQ2NTc5MiwgMjQ3Mzk4NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMCwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTAxOSwgMjE3MTAxOSwgMjQ5NDYwMywgMjE3MTAxOSwgMjE3MTAxOSwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzIxNTM2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3OTc3NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjk4NTk4NCwgMjE3MDg4MCwgMjk5NDE3NiwgMjE3MDg4MCwgMjE3MDg4MCwgMzAxNjE2OCwgMjE3MDg4MCwgMzA1OTcxMiwgMzA3NjA5NiwgMzA4ODM4NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMTI0LCAxMjQsIDAsIDEyOCwgMTI4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMjE1MzYwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDg2MjcyLCAyMTcwODgwLCAyMTcwODgwLCAyNTA2NzUyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTM1NDI0LCAyNTM5NTIwLCAyMTcwODgwLCAyMTcwODgwLCAyNTg4NjcyLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyOTIwNDQ4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyOTkwMDgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDUxNTIwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTcwMzA0LCAwLCAyMzg3OTY4LCAyMzkyMDY0LCAyMTcwODgwLCAyMTcwODgwLCAyNDMzMDI0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTcwMzA0LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDg2MjcyLCAyMjE1OTM2LCAyMjE1OTM2LCAyNTA2NzUyLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNTM1NDI0LCAyNTM5NTIwLCAyMjE1OTM2LCAyMjE1OTM2LCAyNTg4NjcyLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc0OTc2LCAxMzYsIDAsIDIyMTU5MzYsIDIyMTU5MzYsIDI5MjA0NDgsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI5OTAwODAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwNTE1MjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxMDg4NjQsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMjY5NDQsIDIyMTU5MzYsIDIyMTU5MzYsIDMwNjM4MDgsIDIyMTU5MzYsIDIyMTU5MzYsIDMxMTI5NjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxNzAzMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NTM1MDQsIDI0NTc2MDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0ODYyNzIsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MDY3NTIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MzcwNDksIDI1Mzk1MjAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1ODg2NzIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDE1MDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDE1MTIsIDIxNzA4ODAsIDI5MjA0NDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI5OTAwODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NjE2OTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MTA4NDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1ODA0ODAsIDIxNzA4ODAsIDI2MDUwNTYsIDI2Mzc4MjQsIDIxNzA4ODAsIDIxNzA4ODAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNjg2OTc2LCAyNzQ4NDE2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyOTI0NTQ0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTIxMTUyLCAyMTcwODgwLCAyMTcwODgwLCAzMTQ1NzI4LCAzMTU4MDE2LCAzMTY2MjA4LCAyMTcwODgwLCAyNDIwNzM2LCAyNDI4OTI4LCAyMTcwODgwLCAyNDc4MDgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNjQ2MDE2LCAyNjcwNTkyLCAwLCAwLCAzMTQ1NzI4LCAzMTU4MDE2LCAzMTY2MjA4LCAyMzg3OTY4LCAyMzkyMDY0LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDMzMDI0LCAyMjE1OTM2LCAyNDYxNjk2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNTEwODQ4LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyNTgwNDgwLCAyMjE1OTM2LCAyNjA1MDU2LCAyNjM3ODI0LCAyMjE1OTM2LCAyMjE1OTM2LCAyNjg2OTc2LCAyNzQ4NDE2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyOTI0NTQ0LCAyMjE1OTM2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAwLCAyODYsIDIxNzA4ODAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxMjExNTIsIDIyMTU5MzYsIDIyMTU5MzYsIDMxNDU3MjgsIDMxNTgwMTYsIDMxNjYyMDgsIDIzODc5NjgsIDIzOTIwNjQsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MzMwMjQsIDIxNzA4ODAsIDI0NjE2OTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1MTA4NDgsIDIxNzA4ODAsIDIxNzA4ODAsIDE2MjUsIDIxNzA4ODAsIDIxNzA4ODAsIDI1ODA0ODAsIDIxNzA4ODAsIDI2MDUwNTYsIDI2Mzc4MjQsIDIxNzA4ODAsIDY0NywgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQwMDI1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU3NjM4NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjYwOTE1MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjY4Njk3NiwgMCwgMCwgMjc0ODQxNiwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMjE3MDg4MCwgMjkyNDU0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDAsIDAsIDI4LCAyOCwgMjE3MDg4MCwgMzE0MTYzMiwgMjIxNTkzNiwgMjQyMDczNiwgMjQyODkyOCwgMjIxNTkzNiwgMjQ3ODA4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjY0NjAxNiwgMjY3MDU5MiwgMjc1MjUxMiwgMjc1NjYwOCwgMjg0NjcyMCwgMjk2MTQwOCwgMjIxNTkzNiwgMjk5ODI3MiwgMjIxNTkzNiwgMzAxMDU2MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE0MTYzMiwgMjE3MDg4MCwgMjQyMDczNiwgMjQyODkyOCwgMjc1MjUxMiwgMjc1NjYwOCwgMCwgMjg0NjcyMCwgMjk2MTQwOCwgMjE3MDg4MCwgMjk5ODI3MiwgMjE3MDg4MCwgMzAxMDU2MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE0MTYzMiwgMjE3MDg4MCwgMjE3MDg4MCwgMjQ5MDM2OCwgMjIxNTkzNiwgMjQ5MDM2OCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjU0NzcxMiwgMjU1NTkwNCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3NDk3NiwgMjQ1NzYwLCAwLCAzMTI5MzQ0LCAyMTcwODgwLCAyMTcwODgwLCAyNDkwMzY4LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAyNTQ3NzEyLCAyNTU1OTA0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCA0NTA1NiwgMCwgMjU4NDU3NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE1ODU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyMDAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDI1ODQ1NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDE1MTIsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NDEyMTYsIDIxNzA4ODAsIDI1MjcyMzIsIDIxNzA4ODAsIDI2MDA5NjAsIDIxNzA4ODAsIDI4NTA4MTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMjI4NDgsIDIyMTU5MzYsIDI0NDEyMTYsIDIyMTU5MzYsIDI1MjcyMzIsIDIyMTU5MzYsIDI2MDA5NjAsIDIyMTU5MzYsIDI4NTA4MTYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDAsIDAsIDAsIDAsIDAsIDI4NywgMjE3MDg4MCwgMjIxNTkzNiwgMzAyMjg0OCwgMjE3MDg4MCwgMjQ0MTIxNiwgMjE3MDg4MCwgMjUyNzIzMiwgMCwgMCwgMjE3MDg4MCwgMjYwMDk2MCwgMjE3MDg4MCwgMCwgMjg1MDgxNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjUyMzEzNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU5Njg2NCwgMjE3MDg4MCwgMjYyMTQ0MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjY0MTkyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzAyMjg0OCwgMjE3MDg4MCwgMjUxOTA0MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjUxOTA0MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQ1MzUwNCwgMjQ1NzYwMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjUxNDk0NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU5Mjc2OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjUxOTA0MCwgMCwgMjAyNCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjM5NjE2MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzAxODc1MiwgMjM5NjE2MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzAxODc1MiwgMjM5NjE2MCwgMCwgMjAyNCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzAxODc1MiwgMjE3MDg4MCwgMjY1MDExMiwgMjk2NTUwNCwgMjE3MDg4MCwgMjIxNTkzNiwgMjY1MDExMiwgMjk2NTUwNCwgMjIxNTkzNiwgMCwgMCwgMjE3MDg4MCwgMjY1MDExMiwgMjk2NTUwNCwgMjE3MDg4MCwgMjU1MTgwOCwgMjE3MDg4MCwgMjU1MTgwOCwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDQxMDk4LCA0NSwgNDUsIDE0MSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDIyNCwgNjcsIDY3LCAyMzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjg4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI1NTE4MDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIyMTU5MzYsIDAsIDIxNzA4ODAsIDI5Nzc3OTIsIDI5Nzc3OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjksIDEwMjQzMiwgMTI3MDExLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAxMjcwMTEsIDEyNzAxMSwgMTI3MDExLCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgMCwgMCwgMjQsIDI0LCAyNCwgMCwgMjgsIDI4LCAyOCwgMjgsIDEwMjQzMiwgMTI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MTY2NDAsIDAsIDAsIDAsIDAsIDIyMjAwMzIsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDEzNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgNTMyNjQsIDAsIDQyNTYwOTksIDQyNTYwOTksIDI0LCAyNCwgMCwgMjgsIDI4LCAyMTcwODgwLCAyNDYxNjk2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTEwODQ4LCAyMTcwODgwLCAyMTcwODgwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyNTgwNDgwLCAyMTcwODgwLCAyNjA1MDU2LCAyNjM3ODI0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNTQ3NzEyLCAyNTU1OTA0LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTI5MzQ0LCAyMjE1OTM2LCAyMjE1OTM2LCA1NDMsIDU0MywgNTQ1LCA1NDUsIDAsIDAsIDIxNzkwNzIsIDAsIDU1MCwgNTUxLCA1NTEsIDAsIDI4NywgMjE3MTE2NiwgMjE3MTE2NiwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMjAwMzIsIDAsIDAsIDY0NSwgMCwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDQxMDk4LCA0NSwgNDUsIDQ1LCAxNDksIDI1ODQ1NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0NDEyMTYsIDIxNzA4ODAsIDI1MjcyMzIsIDIxNzA4ODAsIDI2MDA5NjAsIDI1MTkwNDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIzOTYxNjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMTg3NTIsIDIzOTYxNjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMTg3NTIsIDIzOTYxNjAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMTg3NTIsIDIxNzA4ODAsIDI2NTAxMTIsIDI5NjU1MDQsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgMTU1NjQ4LCAyOCwgMTAyNDMyLCAxNTU2NDgsIDE1NTY4NywgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDE1NTY0OCwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAwLCAyOCwgMjgsIDI4LCAyOCwgMTAyNDMyLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCA5NDIwOCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAyMDg4OTYsIDE4LCAyNzg1MjgsIDI0LCAyNCwgMCwgMjgsIDI4LCA1MzI2NCwgMTgsIDE1OTc2NSwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAwLCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDAsIDI4LCAxMzkzOTQsIDI4LCAyOCwgMTAyNDMyLCAxMzEsIDAsIDAsIDAsIDIyMjAwMzIsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMyNzY4LCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMCwgNTQ2LCAwLCAwLCAyMTgzMTY4LCAwLCAwLCA1NTIsIDgzMiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQwMDI1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjYwOTE1MiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjY1NDIwOCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzE5ODk3NiwgMjIxNTkzNiwgMCwgMTA4NCwgMCwgMTA4OCwgMCwgMTA5MiwgMCwgMCwgMCwgMCwgMCwgNDE2MDYsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTM3LCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTk4OTc2LCAyMTcwODgwLCAwLCAwLCA2NDQsIDAsIDAsIDAsIDIyMTU5MzYsIDMxMTcwNTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDgyNiwgMCwgODI4LCAwLCAwLCAyMTgzMTY4LCAwLCAwLCA4MzAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MDAyNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1OTI3NjgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI2MzM3MjgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI3MTE1NTIsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI3NjA3MDQsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDE3MjA2NiwgMTcyMDMyLCAxMTA2MzAsIDE3MjA2NiwgMTA2NTM5LCAwLCAwLCAxNzIwMzIsIDUzMjY0LCAxOCwgMTgsIDQ5MTcyLCAwLCA1NzM2NiwgMCwgMjQsIDI0LCAyNCwgMTYzODQsIDI4LCAyOCwgMjgsIDI4LCAxMDI0MzIsIDAsIDk4MzA0LCAwLCAwLCAyMjIwMDMyLCAxMTA2MzAsIDAsIDAsIDAsIDAsIDEwNjUzOSwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE5ODk3NiwgMjE3MDg4MCwgMCwgMCwgNDUwNTYsIDAsIDAsIDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNSwgODE5MiwgMzAsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMTc2MjE5LCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDEyNCwgMTI0LCAxMjQsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTAyNDMyLCAxMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MCwgMCwgNTQ2LCAwLCAwLCAyMTgzMTY4LCAwLCA2NTUzNiwgNTUyLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDAwMjU2LCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNjQ2MDE2LCAyNjcwNTkyLCAyNzUyNTEyLCAyNzU2NjA4LCAyODQ2NzIwLCAyOTYxNDA4LCAyMTcwODgwLCAyOTk4MjcyLCAyMTcwODgwLCAzMDEwNTYwLCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTk4OTc2LCAyMjE1OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDQxMDk4LCA0NSwgNDUsIDE0MywgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDIyNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyNCwgNjcsIDE4MjYsIDY3LCA2NywgNjcsIDY3LCAxNywgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDMyNzY4LCAxMjAsIDEyMSwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDAsIDI4LCAyOCwgMjgsIDI4LCAxMDI0MzIsIDY3LCA2NywgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDAsIDIxNzkwNzIsIDU0OCwgMCwgNjU4MjAsIDY1ODIwLCAwLCAyODcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCAyMDMzLCA0NSwgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMCwgMzY5LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzgsIDAsIDU0NiwgNzAxNzksIDAsIDIxODMxNjgsIDAsIDAsIDU1MiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzMsIDY3LCA2NywgNjcsIDY3LCA0ODMsIDY3LCA2NywgMTAyNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDExMTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTksIDk3LCA5NywgOTcsIDY3LCA2NywgMTU4NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NywgNjcsIDY3LCAxNjU5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjY3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjY4LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxNjk0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzc0LCA2NywgNjcsIDE3MTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDE3MjMsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NTksIDQ1LCA0NSwgMTU2MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY4NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxNzcxLCAxNzcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODIxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODI3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDE2MTQsIDk3LCA5NywgOTcsIDk3LCA5NywgNjAzLCA5NywgOTcsIDYwNSwgOTcsIDk3LCA2MDgsIDk3LCA5NywgOTcsIDk3LCAwLCAxNTMyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUwLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAxODM5LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAxODgzLCA5NywgMTg4NSwgOTcsIDAsIDE4ODgsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCAxODQ4LCA5NywgOTcsIDk3LCA5NywgMTg1MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4NCwgMzkxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzg1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAwLCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE5NjMsIDk3LCAyMDIzLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTk5NCwgNjcsIDE5OTUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCAxMzcsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI3OTM0NzIsIDI4MDU3NjAsIDIxNzA4ODAsIDI4MzAzMzYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMzEwNDAsIDIxNzA4ODAsIDMwNTU2MTYsIDIxNzA4ODAsIDIxNzA4ODAsIDY3LCA2NywgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDAsIDI4MSwgNTQ5LCAwLCA2NTgyMCwgNjU4MjAsIDAsIDI4NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgNDUsIDQ1LCAyMDMxLCAyMDMyLCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjksIDY3LCAwLCA1NDYsIDcwMTc5LCA1NDksIDU0OSwgMCwgMCwgNTUyLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg1OCwgNDUsIDY0MSwgMCwgMCwgMCwgMCwgNDE2MDYsIDkyNiwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NTYsIDY3LCAwLCAwLCAwLCAxMzEzLCAwLCAwLCAwLCAxMDk2LCAxMzE5LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMTAsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgMTMwMSwgMTQ3NiwgMCwgMCwgMCwgMCwgMTMwNywgMTQ3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE0ODYsIDk3LCAxNDg3LCA5NywgMTMxMywgMTQ4MCwgMCwgMCwgMCwgMCwgMTMxOSwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCAxNDc2LCAwLCAxNDc4LCAwLCAxNDgwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDE4NTMsIDQ1LCAxODU1LCA0NSwgNDUsIDQ1LCA0NSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI2LCA4MTkyLCAzMSwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAyMjUzNjgsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMzI3NjgsIDUzMjY0LCAxOCwgMTgsIDQ5MTcyLCAxNjM4NDAsIDU3MzY2LCAwLCAyNCwgMjQsIDIyOTM3NiwgMCwgMjgsIDI4LCAyOCwgMjI5Mzc2LCAxMDI0MzIsIDAsIDAsIDAsIDAsIDIyMjAxNjcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDAsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI1OTI5MDcsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI2MzM4NjcsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI2NTQzNDcsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMxMTcxOTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIyNDA2NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2OCwgMCwgMTQwLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNDE2Nzc5LCAyNDI0OTcxLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNjE3NDgzLCAyMTcxMDE5LCAyMTcxMDE5LCAyNjQyMDU5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNjk5NDAzLCAyMTcxMDE5LCAyNzI4MDc1LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMjE1NDk5LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDM3MTIwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMTcxMDE5LCAyODIyMjgzLCAyMTcxMDE5LCAyMTcxMDE5LCAyODU1MDUxLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyOTEyMzk1LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMDAyNTA3LCAyMTcxMDE5LCAyMTcxMDE5LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDk0NDY0LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNDE2OTI2LCAyNDI1MTE4LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNTc2NjcwLCAyMTcxMTY2LCAyNjE3NjMwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNjkxMzU4LCAyMTcxMTY2LCAyNzA3NzQyLCAyMTcxMTY2LCAyNzE1OTM0LCAyMTcxMTY2LCAyNzI0MTI2LCAyNzY1MDg2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNzk3ODU0LCAyMTcxMTY2LCAyODIyNDMwLCAyMTcxMTY2LCAyMTcxMTY2LCAyODU1MTk4LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyOTEyNTQyLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNzkzNzU4LCAyODA2MDQ2LCAyMTcxMTY2LCAyODMwNjIyLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTA5MTUwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNTQzOTAyLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNjI5OTE4LCAyNzkzNjExLCAyODA1ODk5LCAyMTcxMDE5LCAyODMwNDc1LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAwLCA1NDYsIDAsIDAsIDIxODMxNjgsIDAsIDAsIDU1MiwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjQwMDU0MiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMjE3MTE2NiwgMjkyMDczNCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjk5MDM2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzExNzM0MiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgNTMyNjQsIDAsIDE4LCAxOCwgNDMyOTQ3MiwgMjIzMjQ0NSwgMCwgMjI0MDY0MSwgNDMzNzY2NCwgMjcxMTY5MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjc2MDg0MywgMjc2OTAzNSwgMjc4OTUxNSwgMjgxNDA5MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjg3NTUzMSwgMjkwNDIwMywgMjE3MTAxOSwgMjE3MTAxOSwgMzA5MjYxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzEyNTM4NywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzE5OTExNSwgMjE3MTAxOSwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ1MzUwNCwgMjQ1NzYwMCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjc5MzQ3MiwgMjgwNTc2MCwgMjIxNTkzNiwgMjgzMDMzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQ5NDQ2NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjYzNDAxNCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjcxMTgzOCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjc2MDk5MCwgMjc2OTE4MiwgMjc4OTY2MiwgMjgxNDIzOCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjg3NTY3OCwgMjkwNDM1MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzE5OTI2MiwgMjE3MTE2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3OTkxNSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjQ0NTQ1MSwgMjE3MTAxOSwgMjQ2NTkzMSwgMjQ3NDEyMywgMjE3MTAxOSwgMjE3MTAxOSwgMzExMzA5OSwgMjE3MTAxOSwgMjE3MTAxOSwgMzEzMzU3OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzE2MjI1MSwgMjE3MTAxOSwgMjE3MTAxOSwgMzE4MjczMSwgMzE4NjgyNywgMjE3MTAxOSwgMjM3OTc3NiwgMjg3OTYyNywgMjE3MTAxOSwgMjkxNjQ5MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzAyNzA4MywgMjE3MTAxOSwgMjE3MTAxOSwgMzA2Mzk0NywgMjY5OTU1MCwgMjE3MTE2NiwgMjcyODIyMiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjg3OTc3NCwgMjE3MTE2NiwgMjkxNjYzOCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjYwOTQzOCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjY1NDQ5NCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjQ0NTU5OCwgMjE3MTE2NiwgMjQ2NjA3OCwgMjQ3NDI3MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjUyMzQyMiwgMjE3MTAxOSwgMjQzNzI1OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU0Mzc1NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU4NDcxNSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjkwODI5OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjkzNjk3MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjk4NjEyMywgMjE3MTAxOSwgMjk5NDMxNSwgMjE3MTAxOSwgMjE3MTAxOSwgMzAxNDc5NSwgMjE3MTAxOSwgMzA1OTg1MSwgMzA3NjIzNSwgMzA4ODUyMywgMjE3MTE2NiwgMjE3MTE2NiwgMjk4NjI3MCwgMjE3MTE2NiwgMjk5NDQ2MiwgMjE3MTE2NiwgMjE3MTE2NiwgMzAxNDk0MiwgMjE3MTE2NiwgMzA1OTk5OCwgMzA3NjM4MiwgMzA4ODY3MCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzAyNzIzMCwgMjE3MTE2NiwgMjE3MTE2NiwgMzA2NDA5NCwgMjE3MTE2NiwgMjE3MTE2NiwgMzExMzI0NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzEzMzcyNiwgMjUwNjg5MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjUzNTU2MywgMjUzOTY1OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU4ODgxMSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjY5MTIxMSwgMjE3MTAxOSwgMjcwNzU5NSwgMjE3MTAxOSwgMjcxNTc4NywgMjE3MTAxOSwgMjcyMzk3OSwgMjc2NDkzOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjc5NzcwNywgMjIxNTkzNiwgMjIxNTkzNiwgMzE3MDMwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjQ1Mzc5MCwgMjQ1Nzg4NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjQ4NjU1OCwgMjE3MTE2NiwgMjE3MTE2NiwgMjUwNzAzOCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjUzNTcxMCwgMjUzOTgwNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjU4ODk1OCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjUxNTIzMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjU5MzA1NCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzA1MTgwNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzE3MDU5MCwgMCwgMjM4ODEwNywgMjM5MjIwMywgMjE3MTAxOSwgMjE3MTAxOSwgMjQzMzE2MywgMjE3MTAxOSwgMjQ2MTgzNSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjUxMDk4NywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU4MDYxOSwgMjE3MTAxOSwgMjYwNTE5NSwgMjYzNzk2MywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjkyMDU4NywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjk5MDIxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzA1MTY1OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjQ1MzY0MywgMjQ1NzczOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjUxNTA4MywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjY0NjE1NSwgMjY3MDczMSwgMjc1MjY1MSwgMjc1Njc0NywgMjg0Njg1OSwgMjk2MTU0NywgMjE3MTAxOSwgMjk5ODQxMSwgMjE3MTAxOSwgMzAxMDY5OSwgMjE3MTAxOSwgMjE3MTAxOSwgMjY4NzExNSwgMjc0ODU1NSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjkyNDY4MywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzEyMTI5MSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMzE3MDQ0MywgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjQ4NjI3MiwgMjIxNTkzNiwgMjIxNTkzNiwgMjUwNjc1MiwgMzE0NTg2NywgMzE1ODE1NSwgMzE2NjM0NywgMjM4Nzk2OCwgMjM5MjA2NCwgMjIxNTkzNiwgMjIxNTkzNiwgMjQzMzAyNCwgMjIxNTkzNiwgMjQ2MTY5NiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjUxMDg0OCwgMjIxNTkzNiwgMjIxNTkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3OTA3MiwgMCwgMCwgMCwgMCwgMCwgNTUzLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTIxMTUyLCAyMjE1OTM2LCAyMjE1OTM2LCAzMTQ1NzI4LCAzMTU4MDE2LCAzMTY2MjA4LCAyMzg4MjU0LCAyMzkyMzUwLCAyMTcxMTY2LCAyMTcxMTY2LCAyNDMzMzEwLCAyMTcxMTY2LCAyNDYxOTgyLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNTExMTM0LCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyNTgwNzY2LCAyMTcxMTY2LCAyNjA1MzQyLCAyNjM4MTEwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMDMxMzI2LCAyMTcxMTY2LCAzMDU1OTAyLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMDkyNzY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTI1NTM0LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTYyMzk4LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTgyODc4LCAzMTg2OTc0LCAyMTcxMTY2LCAwLCAwLCAwLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMTA5MDAzLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNDAwMjU2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMTcxMTY2LCAyNjg3MjYyLCAwLCAwLCAyNzQ4NzAyLCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAyMTcxMTY2LCAyOTI0ODMwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNTk3MTUwLCAyMTcxMTY2LCAyNjIxNzI2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNjQyMjA2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTIxNDM4LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTQ2MDE0LCAzMTU4MzAyLCAzMTY2NDk0LCAyMTcxMDE5LCAyNDIwODc1LCAyNDI5MDY3LCAyMTcxMDE5LCAyNDc4MjE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyNTQ3ODUxLCAyNTU2MDQzLCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAyMTcxMDE5LCAzMTI5NDgzLCAyMjE1OTM2LCAyMTcxMDE5LCAzMTQxNzcxLCAyMjE1OTM2LCAyNDIwNzM2LCAyNDI4OTI4LCAyMjE1OTM2LCAyNDc4MDgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyNjQ2MDE2LCAyNjcwNTkyLCAyNzUyNTEyLCAyNzU2NjA4LCAyODQ2NzIwLCAyOTYxNDA4LCAyMjE1OTM2LCAyOTk4MjcyLCAyMjE1OTM2LCAzMDEwNTYwLCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMTQxNjMyLCAyMTcxMTY2LCAyNDIxMDIyLCAyNDI5MjE0LCAyMTcxMTY2LCAyNDc4MzY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAyNjQ2MzAyLCAyNjcwODc4LCAwLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA1LCAxNDA2LCA0NSwgNDUsIDQ1LCA0NSwgMTQwOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDE1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIzOCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAyNzUyNzk4LCAyNzU2ODk0LCAwLCAyODQ3MDA2LCAyOTYxNjk0LCAyMTcxMTY2LCAyOTk4NTU4LCAyMTcxMTY2LCAzMDEwODQ2LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAzMTQxOTE4LCAyMTcxMDE5LCAyMTcxMDE5LCAyNDkwNTA3LCAzMTI5MzQ0LCAyMTcxMTY2LCAyMTcxMTY2LCAyNDkwNjU0LCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAwLCAyNTQ3OTk4LCAyNTU2MTkwLCAyMTcxMTY2LCAyMTcxMTY2LCAyMTcxMTY2LCAwLCAwLCAwLCAwLCAzNywgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgNDEwOTgsIDQ1LCA0NSwgNDUsIDQ1LCAxNjcsIDQ1LCA0NSwgNDUsIDQ1LCAxODUsIDE4NywgNDUsIDQ1LCAxOTgsIDQ1LCA0NSwgMCwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMjE3MTE2NiwgMzEyOTYzMCwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjU3NjUyMywgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjE3MTAxOSwgMjYwOTI5MSwgMjE3MTAxOSwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMzAwMjM2OCwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MTE2NiwgMjE3MTE2NiwgMjQ5NDc1MCwgMjE3MTE2NiwgMjE3MTE2NiwgMCwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDQxMDk4LCA0NSwgNDUsIDQ1LCAxNDcsIDI1ODQ1NzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDAsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDAsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMwMDI2NTQsIDIxNzExNjYsIDIxNzExNjYsIDIxNzEwMTksIDIxNzEwMTksIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzUyNTcsIDAsIDAsIDI1ODQ4NjIsIDIxNzExNjYsIDIxNzExNjYsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzEwMTksIDI0NDEzNTUsIDIxNzEwMTksIDI1MjczNzEsIDIxNzEwMTksIDI2MDEwOTksIDIxNzEwMTksIDI4NTA5NTUsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMwMjI5ODcsIDIyMTU5MzYsIDI0NDEyMTYsIDIyMTU5MzYsIDI1MjcyMzIsIDIyMTU5MzYsIDI2MDA5NjAsIDIyMTU5MzYsIDI4NTA4MTYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDAsIDAsIDAsIDAsIDY5NjMyLCAyODcsIDIxNzA4ODAsIDIyMTU5MzYsIDMwMjI4NDgsIDIxNzExNjYsIDI0NDE1MDIsIDIxNzExNjYsIDI1Mjc1MTgsIDAsIDAsIDIxNzExNjYsIDI2MDEyNDYsIDIxNzExNjYsIDAsIDI4NTExMDIsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI3MjAwMzAsIDI3NDQ2MDYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI4MzQ3MTgsIDI4Mzg4MTQsIDIxNzExNjYsIDI5MDg0NDYsIDIxNzExNjYsIDIxNzExNjYsIDI5MzcxMTgsIDMwMjMxMzQsIDIxNzEwMTksIDI1MTkxNzksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIyMTU5MzYsIDI1MTkwNDAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMyMTU2NDYsIDAsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI0ODY0MTEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI2Mjk3NzEsIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI3MTk4ODMsIDI3NDQ0NTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDI4MzQ1NzEsIDI4Mzg2NjcsIDIxNzEwMTksIDI1MTkzMjYsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIzOTYyOTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDIxNzEwMTksIDMwMTg4OTEsIDIzOTYxNjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMwMTg3NTIsIDIzOTY0NDYsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDMwMTkwMzgsIDIxNzEwMTksIDI2NTAyNTEsIDI5NjU2NDMsIDIxNzEwMTksIDIyMTU5MzYsIDI2NTAxMTIsIDI5NjU1MDQsIDIyMTU5MzYsIDAsIDAsIDIxNzExNjYsIDI2NTAzOTgsIDI5NjU3OTAsIDIxNzExNjYsIDI1NTE5NDcsIDIxNzEwMTksIDI1NTE4MDgsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCAxNDQsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MjksIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAyNTUyMDk0LCAyMTcxMTY2LCAyMTcxMDE5LCAyMjE1OTM2LCAwLCAyMTcxMTY2LCAyMTcxMDE5LCAyMjE1OTM2LCAwLCAyMTcxMTY2LCAyMTcxMDE5LCAyMjE1OTM2LCAwLCAyMTcxMTY2LCAyOTc3OTMxLCAyOTc3NzkyLCAyOTc4MDc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgMTMyMSwgOTcsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDAsIDE0MCwgMCwgMjM3OTc3NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQ0NTMxMiwgMjE3MDg4MCwgMjQ2NTc5MiwgMjQ3Mzk4NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU4NDU3NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjIxNTkzNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE2MjExMiwgMjE3MDg4MCwgMjE3MDg4MCwgMzE4MjU5MiwgMzE4NjY4OCwgMjE3MDg4MCwgMCwgMTQwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMDAyMzY4LCAyMTcwODgwLCAyMTcwODgwLCAyMjE1OTM2LCAyMjE1OTM2LCAyNDk0NDY0LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAyMjE1OTM2LCAzMjE1MzYwLCA1NDQsIDAsIDAsIDAsIDU0NCwgMCwgNTQ2LCAwLCAwLCAwLCA1NDYsIDAsIDAsIDIxODMxNjgsIDAsIDAsIDU1MiwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQwMDI1NiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMCwgMjE3MDg4MCwgMjkyMDQ0OCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjk5MDA4MCwgMjE3MDg4MCwgMjE3MDg4MCwgNTUyLCAwLCAwLCAwLCA1NTIsIDAsIDI4NywgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQzNzEyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMjAwMzIsIDAsIDAsIDY0NCwgMCwgMjIxNTkzNiwgMjIxNTkzNiwgMzE3MDMwNCwgNTQ0LCAwLCA1NDYsIDAsIDU1MiwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzE5ODk3NiwgMjE3MDg4MCwgMCwgMCwgMCwgMTQwLCAwLCAwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDI0OTg1NiwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMzI3NjgsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMTUxNjQwLCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDI0LCAyNCwgMjQsIDAsIDI4LCAyOCwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDE2NjQwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDI1Mzk1MiwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMzI4NTYsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMTkyNTEyLCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDAsIDIyMzI0NDUsIDE4NDMyMCwgMjIzMjQ0NSwgMCwgMjI0MDY0MSwgMjI0MDY0MSwgMTg0MzIwLCAyMjQwNjQxLCAxMDI0MzIsIDAsIDAsIDAsIDIyMTE4NCwgMjIyMDAzMiwgMTEwNjMwLCAwLCAwLCAwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMzEwODg2NCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjIxNTkzNiwgMCwgMCwgMCwgNDUwNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMTI3LCAxMjcsIDUzMjY0LCAxOCwgNDkxNzIsIDI1ODA3MSwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDMyNzY4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDIwNDgwMCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCAyNywgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMzMsIDAsIDMzLCAzMywgMzMsIDAsIDAsIDAsIDUzMjY0LCAxOCwgMTgsIDQ5MTcyLCAwLCA1NzM2NiwgMCwgMjQsIDI0LCAyNCwgMTYzODQsIDI4LCAyOCwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzksIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MTY2NDAsIDY3LCA2NywgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDcwMTc5LCAwLCAwLCAwLCA2NTgyMCwgNjU4MjAsIDM2OSwgMjg3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA0NSwgMjAzMCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxNTczLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTksIDY3LCA2NywgNjcsIDY3LCAyNTQwMywgNTQ2LCA3MDE3OSwgMCwgMCwgNjYzNjUsIDY2MzY1LCA1NTIsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1NSwgOTcsIDk3LCA5NywgMTM1OCwgOTcsIDk3LCA5NywgNjQxLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAwLCAxNDgwLCAwLCAwLCAwLCAwLCAxMzE5LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTMxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjgwLCA0NSwgNDUsIDQ1LCA2NDEsIDAsIDkyNCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAzNzEzOSwgMzcxMzksIDI0ODUzLCAyNDg1MywgMCwgNzAxNzksIDI4MiwgMCwgMCwgNjU4MjAsIDY1ODIwLCAzNjksIDI4NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDIwMjgsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTc4NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE3OTAsIDk3LCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAzMDUxNTIwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAzMTcwMzA0LCAyNDE2NjQsIDIzODc5NjgsIDIzOTIwNjQsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MzMwMjQsIDUzMjY0LCAxOSwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMjc0NDMyLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDI3MDMzNiwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAxMTM0NzExLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMjY0NDAsIDExMjY0NDAsIDExMjY0NDAsIDAsIDAsIDExMjY0MDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzYsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDIxNzA4OCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCA5NCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCA5NiwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCAwLCAwLCAyNDY2NiwgNTMyNjQsIDE4LCAxOCwgNDkxNzIsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAxMjYsIDI4LCAyOCwgMjgsIDI4LCAxMDI0MzIsIDUzMjY0LCAxMjIsIDEyMywgNDkxNzIsIDAsIDU3MzY2LCAwLCAyNCwgMjQsIDI0LCAwLCAyOCwgMjgsIDI4LCAyOCwgMTAyNDMyLCAyMTcwODgwLCAyMTcwODgwLCA0MjU2MDk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzE5LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwOSwgOTcsIDk3LCA5NywgOTcsIDExMTMsIDEzMiwgMCwgMCwgMCwgMzcsIDExMDYzMCwgMCwgMCwgMCwgMTE0NzMwLCAxMDY1MzksIDQxMDk4LCA0NSwgNDUsIDQ1LCAxNDYsIDE1MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzUsIDQ1LCAxODAsIDQ1LCAxODYsIDQ1LCAxODksIDQ1LCA0NSwgMjAzLCA2NywgMjU2LCA2NywgNjcsIDI3MCwgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgOTcsIDk3LCA5NywgMjkzLCAyOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzIyLCA5NywgMzI3LCA5NywgMzMzLCA5NywgMCwgMCwgOTcsIDIwMjYsIDAsIDIwMjcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTY4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTAsIDY3LCAzMzYsIDk3LCA5NywgMzUwLCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMzU2LCAyOCwgMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MCwgMjQyNDgzMiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjYxNzM0NCwgMjE3MDg4MCwgNDUsIDQzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDYyMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUyNCwgOTcsIDk3LCAxNTI3LCAzNjksIDY0OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU5LCA0NSwgNDUsIDQ1LCA0NSwgNDA4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzksIDQ1LCA0NSwgNDUsIDY3LCA3MjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzYyLCA2NywgNzQ2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTksIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAxNDc3LCAwLCAxMDg2LCAwLCAwLCAwLCAxNDc5LCAwLCAxMDkwLCA2NywgNjcsIDc5NiwgNjcsIDY3LCA3OTksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTEsIDY3LCA2NywgNjcsIDgxMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA4MTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgNTQ0LCAyNTQwMywgNTQ2LCA3MDE3OSwgMCwgMCwgNjYzNjUsIDY2MzY1LCA1NTIsIDgzMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzgwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgxMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDk3LCA5NywgODQ0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDk3LCA4OTQsIDk3LCA5NywgODk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxMzgyLCA0NSwgNDUsIDQ1LCA5NywgOTA5LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkyMywgNjcsIDY3LCAxMDc5LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAxMDg1LCAyNTQwMywgMTA4OSwgNjYzNjUsIDEwOTMsIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCA0NSwgMTQ4LCAxMTE0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MDYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTczLCA5NywgOTcsIDk3LCA5NywgOTcsIDEyMjg4LCAwLCA5MjUsIDAsIDExNzksIDAsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCAxNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzYyLCA2NywgNjcsIDY3LCAxNzY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTkzNCwgNjcsIDY3LCAxMjU1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAzNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMzMzQ0LCA5NywgOTcsIDk3LCAxMzM1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxMzc3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxMTc5LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNjcwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQzMCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTQzOCwgNjcsIDY3LCAxNDQyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTkyLCA2NywgNjcsIDY3LCAxNDUxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1OCwgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDEzMDUsIDAsIDAsIDAsIDAsIDAsIDEzMTEsIDAsIDAsIDAsIDEzMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgMTMyMiwgOTcsIDk3LCAxNDkxLCA5NywgOTcsIDE0OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTUxLCA0NSwgMTU1MywgNDUsIDE1MDQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTEzLCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDE1MzYsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQwLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzAwLCA2NywgNjcsIDY3LCA5NywgMTY0OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0MSwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDE5NDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgMjAxMSwgNDUsIDQ1LCA0NSwgMjAxNSwgNjcsIDY3LCAyMDE3LCA2NywgNjcsIDY3LCAyMDIxLCA5NywgNjcsIDY3LCA4MTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgOTcsIDk3LCA5NywgOTEwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkyMywgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDExODQsIDQ1LCA0NSwgNDUsIDQ1LCAxMTg4LCA0NSwgNDUsIDQ1LCA0NSwgMTQxNCwgNDUsIDQ1LCA0NSwgMTQxNywgNDUsIDE0MTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDQzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NTMsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDEyNDQsIDY3LCA2NywgNjcsIDY3LCAxMjQ4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAyODIsIDQxMDk4LCA2NTgyMCwgOTcsIDEzMjQsIDk3LCA5NywgOTcsIDk3LCAxMzI4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5MzAsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDk3LCA5NywgMTM3OCwgOTcsIDk3LCA5NywgOTcsIDAsIDExNzksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA2NzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTc1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxOTIzLCA2NywgMTkyNSwgNjcsIDY3LCAxOTI3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTk4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTQ2LCA0NSwgNDUsIDk1MCwgNDUsIDQ1LCA0NSwgMCwgOTcsIDk3LCA5NywgMTkzOSwgMCwgMCwgMCwgOTcsIDE5NDMsIDk3LCA5NywgMTk0NSwgOTcsIDQ1LCA0NSwgNDUsIDY2OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTkwLCA0NSwgNDUsIDQ1LCA2NywgMjU3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCAzMzcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAzNTYsIDI4LCAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzcwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDE2NjQwLCA0MDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDQ1OSwgNDYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3NSwgNjcsIDQ4MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNDg0LCA2NywgNjcsIDQ4NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTksIDY3LCA2NywgOTcsIDU1NiwgNTU4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU3MiwgOTcsIDU3NywgOTcsIDk3LCAwLCAwLCAxODk2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxOTAzLCA0NSwgNDUsIDQ1LCA0NSwgOTgzLCA0NSwgNDUsIDQ1LCA0NSwgOTg4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTk1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA1ODEsIDk3LCA5NywgNTg0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1MywgOTcsIDk3LCAzNjksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjYyLCA0NSwgNDUsIDQ1LCA2ODQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEwMDQsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDc0OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDY4LCA2NywgNjcsIDY3LCAxMDcxLCA2NywgNjcsIDY3LCA2NywgMTA3NiwgNzk0LCA3OTUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgNTQ0LCA5NywgOTcsIDk3LCA5NywgODQ3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTksIDk3LCAwLCAwLCAyMDI1LCA5NywgMjA0ODAsIDk3LCA5NywgMjAyOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTU3NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3NSwgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDg5MiwgODkzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTUsIDk3LCA5OTMsIDk5NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTkyLCA2NywgNjcsIDY3LCAxMjg0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYwNywgNjcsIDY3LCA5NywgMTM2NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTYsIDk3LCA0NSwgMTU1NiwgMTU1NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2OTYsIDQ1LCAxNTk2LCAxNTk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5OSwgNjcsIDk3LCA5NywgOTcsIDE2MjEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzQ2LCA5NywgOTcsIDk3LCA5NywgMTc0MCwgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjc4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxODM2LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDE5ODQsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODA4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA3MzksIDY3LCA2NywgNjcsIDY3LCA2NywgNzQ0LCA0NSwgNDUsIDE5MDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTkxNywgNjcsIDE5MTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMTkzMCwgOTcsIDE5MzEsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxNTc2LCA2NywgNjcsIDY3LCA2NywgMTU4MCwgNjcsIDY3LCAwLCA5NywgOTcsIDE5MzgsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA2OTksIDQ1LCA0NSwgNDUsIDcwNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAyMDA2LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDE1MzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzIyLCA3MjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDIwNDUsIDY3LCA2NywgNjcsIDIwNDcsIDAsIDAsIDk3LCA5NywgOTcsIDIwNTEsIDQ1LCA0NSwgNjcsIDY3LCAwLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NTcsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MzYsIDk3LCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDQ1LCA2NywgNjcsIDY3LCAxNzYxLCA2NywgNjcsIDY3LCAxNzY0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDk0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3ODcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ1LCA0NSwgNDIwLCA0NSwgNDUsIDQyMiwgNDUsIDQ1LCA0MjUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODcsIDQ1LCA0NSwgNDUsIDQ1LCAzOTcsIDQ1LCA0NSwgNDUsIDY3LCA0NjAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTE1LCA2NywgNDg1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDk4LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAwLCAyMDM5LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCAxNDI2LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjg5LCA2NywgNjcsIDY3LCA5NywgNTU3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYxMiwgOTcsIDU4MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA4OTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODUsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDkzOSwgNDUsIDQ1LCA0NSwgNDUsIDk0MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDE1LCA2NywgNjcsIDY3LCA2NywgMTAxOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwNCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDc3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDAsIDI1NDAzLCAwLCA2NjM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQzNzEyMCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjU0MzYxNiwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjYyOTYzMiwgMTE2OSwgOTcsIDExNzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMjI4OCwgMCwgOTI1LCAwLCAxMTc5LCAwLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgOTM2LCA0NSwgNDUsIDY3LCA2NywgMjE0LCA2NywgMjIwLCA2NywgNjcsIDIzMywgNjcsIDI0MywgNjcsIDI0OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5OCwgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYxNywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDExODMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM5MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxMjQzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3NCwgNjcsIDY3LCAxMjgxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NzYsIDEzMjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwNywgNDUsIDE0MTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDE4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODYsIDQ1LCA0NSwgNDUsIDY5MCwgNDUsIDQ1LCA2OTUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDY1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDE3MTIsIDk3LCA5NywgOTcsIDk3LCAxNzQxLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE5MjQsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDE5ODMsIDk3LCA5NywgNDUsIDQ1LCAxOTg3LCA0NSwgMTk4OCwgNDUsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxOTQyLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDcwMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcxMSwgNDUsIDQ1LCAxNTMsIDQ1LCA0NSwgMTY2LCA0NSwgMTc2LCA0NSwgMTgxLCA0NSwgNDUsIDE4OCwgMTkxLCAxOTYsIDQ1LCAyMDQsIDI1NSwgMjU4LCAyNjMsIDY3LCAyNzEsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAyODIsIDQxMDk4LCA2NTgyMCwgOTcsIDk3LCA5NywgMjk0LCA5NywgMzAwLCA5NywgOTcsIDMxMywgOTcsIDMyMywgOTcsIDMyOCwgOTcsIDk3LCAzMzUsIDMzOCwgMzQzLCA5NywgMzUxLCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMzU2LCAyOCwgMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMDk4LCAwLCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxMSwgNjcsIDY3LCA0ODYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjUxLCA2NywgNjcsIDUwMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTEzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI2MywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDU4MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTI2LCA5NywgNTk4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTAsIDk3LCA5NywgMCwgOTcsIDk3LCAxNzk2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzQ0LCA0NSwgNDUsIDQ1LCAzNjksIDAsIDY1MSwgNDUsIDY1MywgNDUsIDY1NCwgNDUsIDY1NiwgNDUsIDQ1LCA0NSwgNjYwLCA0NSwgNDUsIDQ1LCA0NSwgMTU1OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTY2LCA0NSwgNDUsIDY4MSwgNDUsIDY4MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2OTEsIDY5MiwgNjk0LCA0NSwgNDUsIDQ1LCA3MTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcwOSwgNDUsIDQ1LCA3MTIsIDQ1LCA3MTQsIDQ1LCA0NSwgNDUsIDcxOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyNiwgNDUsIDQ1LCA0NSwgNzMzLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY5MSwgNjcsIDY3LCA3NDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2MCwgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDE2MTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MDksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDExNzksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNzY0LCA2NywgNjcsIDY3LCA2NywgNzY4LCA2NywgNzcwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxOTc3LCA2NywgNzc4LCA3NzksIDc4MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzg4LCA3ODksIDY3LCA2NywgNzkyLCA3OTMsIDY3LCA2NywgNjcsIDgxMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODI0LCAzNzY4OSwgNTQ0LCAyNTQwMywgNTQ2LCA3MDE3OSwgMCwgMCwgNjYzNjUsIDY2MzY1LCA1NTIsIDAsIDgzNiwgOTcsIDgzOCwgOTcsIDgzOSwgOTcsIDg0MSwgOTcsIDk3LCA5NywgODQ1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTgsIDk3LCA5NywgMCwgMTcyOCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCAxODAyLCA0NSwgOTcsIDk3LCA4NjIsIDk3LCA5NywgOTcsIDk3LCA4NjYsIDk3LCA4NjgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMTc4OCwgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA4NzYsIDg3NywgODc5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODYsIDg4NywgOTcsIDk3LCA4OTAsIDg5MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg5OSwgOTcsIDk3LCA5NywgOTAzLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTY0NiwgOTcsIDk3LCA5NywgOTcsIDkxMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTIyLCA5MjMsIDQ1LCA5NTUsIDQ1LCA5NTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODEsIDk4MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTg5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTAyMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAzMSwgNjcsIDEwMzMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MTcsIDgxOSwgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgNTQ0LCA2NywgMTA2NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTYsIDY3LCA2NywgMTA3OCwgNjcsIDY3LCAxMDgxLCAxMDgyLCA2NywgNjcsIDM3Njg5LCAwLCAyNTQwMywgMCwgNjYzNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDIxNzExNjYsIDI0Mzc0MDYsIDIxNzExNjYsIDIxNzExNjYsIDk3LCAxMTE1LCA5NywgMTExNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyNSwgOTcsIDExMjcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCAxNjQ0LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDE2NDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTU5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUwMiwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTcyLCA5NywgOTcsIDExNzUsIDExNzYsIDk3LCA5NywgMTIyODgsIDAsIDkyNSwgMCwgMTE3OSwgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgOTM1LCA0NSwgNDUsIDQ1LCAxMjMzLCA0NSwgNDUsIDQ1LCAxMjM2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg3MywgNjcsIDY3LCA0NSwgNDUsIDEyMTgsIDQ1LCA0NSwgNDUsIDEyMjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjMwLCA0NSwgNDUsIDY3LCA2NywgMjE1LCAyMTksIDIyMiwgNjcsIDIzMCwgNjcsIDY3LCAyNDQsIDI0NiwgMjQ5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODgyLCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDE5MDQsIDQ1LCAxOTA1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjU4LCA2NywgMTI2MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyODMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjkwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODE4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgNTQ0LCA2NywgNjcsIDEyOTUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMjE3NDk3NiwgMCwgMCwgOTcsIDk3LCA5NywgMTMyNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTQsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMzOCwgOTcsIDEzNDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUwMCwgOTcsIDk3LCAxNTAzLCA5NywgMTM2MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU3OCwgOTcsIDEzNzUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTE3OSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDY4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMDAzLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTQ2MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzgsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUxOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA5LCA5NywgOTcsIDk3LCA0NSwgMTU0MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU1NCwgNDUsIDE1NzAsIDE1NzEsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTc4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDYxLCA2NywgNjcsIDE1ODIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg4LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1OTQsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDIwMzgsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMjA0NCwgNDUsIDQ1LCA0NSwgOTk1LCA0NSwgNDUsIDQ1LCA0NSwgMTAwMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MDksIDQ1LCAxODExLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxNjEwLCAxNjExLCA2NywgMTQ3NiwgMCwgMTQ3OCwgMCwgMTQ4MCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYxOCwgMTY0NywgMTY0OSwgOTcsIDk3LCA5NywgMTY1MiwgOTcsIDE2NTQsIDE2NTUsIDk3LCAwLCA0NSwgNDUsIDQ1LCAxNjU4LCA0NSwgNDUsIDY3LCA2NywgMjE2LCA2NywgNjcsIDY3LCA2NywgMjM0LCA2NywgNjcsIDY3LCA2NywgMjUyLCAyNTQsIDE4NDUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0NSwgNDUsIDk0NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4ODEsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxOTAyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTA4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTIxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAwLCA5NywgMTkzNywgOTcsIDk3LCAxOTQwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxOTQ3LCAxOTQ4LCAxOTQ5LCA0NSwgNDUsIDQ1LCAxOTUyLCA0NSwgMTk1NCwgNDUsIDQ1LCA0NSwgNDUsIDE5NTksIDE5NjAsIDE5NjEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5NjQsIDY3LCAxOTY2LCA2NywgNjcsIDY3LCA2NywgMTk3MSwgMTk3MiwgMTk3MywgOTcsIDAsIDAsIDAsIDk3LCA5NywgMTEwNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg4NCwgOTcsIDk3LCA5NywgODg5LCA5NywgOTcsIDE5NzgsIDk3LCAwLCAwLCAxOTgxLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzM2LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDE4LCA2NywgNjcsIDY3LCA0NSwgNjcsIDY3LCA2NywgNjcsIDAsIDIwNDksIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgMCwgNDUsIDkzMywgNDUsIDQ1LCA0NSwgNDUsIDEyMzQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgOTcsIDk3LCAyODgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMxNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDE3ODcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA0NSwgNDUsIDM3OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzOTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjQsIDQ1LCA0NSwgNDUsIDQzMSwgNDMzLCA0NSwgNDUsIDQ1LCA2NywgMTA1MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTgsIDY3LCA5NywgOTcsIDk3LCAxMTQ0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1NSwgOTcsIDk3LCA5NywgOTcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxODM3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDE4OTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjA4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3LCAyMDEwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAyMDE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMDIyLCA0NSwgMjA0NiwgNjcsIDY3LCA2NywgMCwgMCwgMjA1MCwgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDAsIDAsIDAsIDAsIDkzMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjIyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzMsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCA0NSwgNDUsIDcwMSwgNzAyLCA0NSwgNDUsIDcwNSwgNzA2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcxOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjUsIDQ1LCA0NSwgNDUsIDM2OSwgNjQ5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjE2LCAyNTQwMywgNTQ2LCA3MDE3OSwgMCwgMCwgNjYzNjUsIDY2MzY1LCA1NTIsIDgzNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3OTksIDk3LCA5NywgNDUsIDQ1LCA0NSwgMTU2OSwgNDUsIDQ1LCA0NSwgMTU3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAxMzA2LCAwLCA2NywgNjcsIDY3LCAxNTk4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2MDYsIDY3LCA2NywgMTYwOSwgOTcsIDk3LCA5NywgMTY1MCwgOTcsIDk3LCAxNjUzLCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDE2NTcsIDQ1LCA0NSwgNDUsIDEyMDYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MjEsIDQ1LCA0NSwgNDUsIDE3MDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDE3MTEsIDk3LCA5NywgMCwgMTg5NSwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NTgsIDQ1LCA5NjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkxMywgNDUsIDQ1LCAxOTE1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0ODEsIDY3LCA0NSwgMTc0OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMTg4NiwgMCwgMCwgMCwgOTcsIDk3LCA2NywgMjAzNSwgMjAzNiwgNjcsIDY3LCA5NywgMCwgMCwgOTcsIDIwNDEsIDIwNDIsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDE2NjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5NywgNDUsIDQ1LCA0NSwgNDUsIDE1MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDM3LCAyMDUsIDQ1LCA2NywgNjcsIDY3LCAyMTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAyOTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODcwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDM1MiwgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjUsIDAsIDQxMDk4LCAwLCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQyNywgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQzNSwgNTIwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDM3LCA2MTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkyMywgNDUsIDEyMzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTkxOSwgNjcsIDE3NTksIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMjEsIDQ1LCAxNTQsIDQ1LCAxNjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk2NCwgNDUsIDQ1LCA0NSwgMjA2LCA0NSwgNjcsIDY3LCA2NywgNjcsIDIyMSwgNjcsIDIyOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDIsIDY3LCA2NywgNjcsIDgwNywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDM1MywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjYsIDAsIDAsIDAsIDE0MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjE3MDg4MCwgMjQxNjY0MCwgNDAyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDEwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjc0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4OSwgNDUsIDM5NCwgNDUsIDQ1LCAzOTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDQ3LCA0NSwgNDUsIDQ1LCA0NTQsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ4OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzQsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCA1MjMsIDY3LCA2NywgNTI3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzMywgNjcsIDY3LCA2NywgNTQwLCA5NywgOTcsIDk3LCA1ODUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1OTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3ODQsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDk3LCA5NywgNjIwLCA5NywgOTcsIDYyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzAsIDk3LCA5NywgOTcsIDYzNywgNzEzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MzAsIDczMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4MSwgNjcsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTAxMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzc1LCA2NywgNjcsIDY3LCA2NywgMTA2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDc5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDgwLCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDAsIDI1NDAzLCAwLCA2NjM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg3LCAwLCAwLCAwLCAyODcsIDAsIDIzNzk3NzYsIDIxNzA4ODAsIDIxNzA4ODAsIDk3LCA5NywgOTcsIDExMTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkyMCwgOTcsIDk3LCAwLCAwLCAwLCAwLCA0NSwgMTE4MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk1OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg0LCA0NSwgNDUsIDQ1LCA0NSwgMjAyLCA0NSwgMTI0MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI2NiwgNjcsIDEyNjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzksIDY3LCA2NywgNjcsIDY3LCA2NywgMjcyLCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5MywgNjcsIDY3LCA2NywgMTI5NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDI4MSwgOTQsIDAsIDAsIDk3LCA5NywgOTcsIDEzNjYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzMsIDk3LCA5NywgMTgsIDAsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAzNjcsIDAsIDk3LCAxMzc2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgNDUsIDQ1LCAxMzg0LCA0NSwgNDUsIDY3LCAyMDgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIzNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjksIDEwNzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAzNzE0MCwgMjQ4NTQsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMSwgNDUsIDE0MjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTQzMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwODMsIDM3Njg5LCAwLCAyNTQwMywgMCwgNjYzNjUsIDAsIDAsIDAsIDE0MzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MzAsIDY3LCAxNDUyLCAxNDUzLCA2NywgNjcsIDY3LCA2NywgMTQ1NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzcxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDYxLCA2NywgNjcsIDY3LCAxNDY0LCA2NywgMTQ2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTk1LCAxNDg5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTI5LCA5NywgMTUwNSwgMTUwNiwgOTcsIDk3LCA5NywgOTcsIDE1MTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjMsIDExNjQsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUxNiwgOTcsIDk3LCA5NywgMTUxOSwgOTcsIDE1MjEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjUsIDk3LCA5NywgMTgsIDAsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAzNjcsIDQxNjA2LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYwMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMzAxLCAwLCAwLCAwLCAxMzA3LCA5NywgOTcsIDE2MjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTMsIDk3LCA5NywgOTcsIDk3LCA5MTksIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDE3ODEsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTc5MiwgMTg2MCwgNDUsIDE4NjIsIDE4NjMsIDQ1LCAxODY1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODc1LCA2NywgMTg3NywgMTg3OCwgNjcsIDE4ODAsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE4ODcsIDAsIDE4ODksIDk3LCA5NywgMTgsIDAsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAyMzc1NjgsIDAsIDM2NywgMCwgOTcsIDE4OTMsIDAsIDAsIDAsIDk3LCAxODk4LCAxODk5LCA5NywgMTkwMSwgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMjAxNCwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjAyMCwgNjcsIDk3LCAxOTg5LCA0NSwgMTk5MCwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk5NiwgNjcsIDE5OTcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjczLCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMjAwNSwgMCwgOTcsIDIwMDcsIDk3LCA5NywgMTgsIDAsIDEzOTYyMSwgMCwgMCwgMCwgNjQyLCAwLCAxMzMsIDM2NCwgMCwgMCwgMzY3LCA0MTYwNiwgMCwgOTcsIDk3LCAyMDU2LCAyMDU3LCAwLCAyMDU5LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNDUsIDY3LCAyMDksIDY3LCA2NywgNjcsIDIyMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzg2LCA2NywgNjcsIDY3LCA3OTEsIDY3LCA2NywgNDUsIDQ1LCA5NDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI3LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAxNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgMCwgMjU0MDMsIDAsIDY2MzY1LCAwLCAwLCAwLCAxMzMsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCAxNDIsIDQ1LCA0NSwgNjcsIDIxMCwgNjcsIDY3LCA2NywgMjI1LCA2NywgNjcsIDIzOSwgNjcsIDY3LCA2NywgMjUwLCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzA5LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE4NDMsIDAsIDY3LCAyNTksIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDk3LCA5NywgMjg5LCA5NywgOTcsIDk3LCAzMDMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDEsIDk3LCA5NywgOTcsIDk3LCA5NywgMzM5LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAwLCAzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMDk4LCAwLCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk1MywgNDUsIDE5NTUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjg3LCAxNjg4LCA2NywgNjcsIDY3LCA2NywgNDUsIDQ1LCA0MDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIwMywgNDUsIDQ1OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDcwLCA0NzcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTcwLCA5NywgOTcsIDk3LCAxOTc0LCAwLCAwLCAwLCA5NywgMTEwMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzcyLCA5NywgOTcsIDk3LCA5NywgNjcsIDUyMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzAxLCA2NywgNTU1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjcsIDU3NCwgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDEsIDk3LCAzMDksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwMCwgOTcsIDk3LCA5NywgOTA1LCA5NywgOTcsIDk3LCA2MTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMzLCA5NywgOTcsIDE4LCAwLCAxMzk2MjEsIDAsIDAsIDM2MiwgMCwgMCwgMCwgMzY0LCAwLCAwLCAzNjcsIDQxNjA2LCAzNjksIDY0OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjYzLCA2NjQsIDY3LCA2NywgNjcsIDY3LCA3NTAsIDc1MSwgNjcsIDY3LCA2NywgNjcsIDc1OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTcsIDEwNTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTIsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA4OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTAyLCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCAxMDUxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNDkxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEzMDIsIDAsIDAsIDAsIDEzMDgsIDk3LCA5NywgOTcsIDk3LCAxMTQ1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMzksIDk3LCA5NywgOTcsIDk3LCAxMTU2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTYxLCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjYsIDk3LCA5NywgMTgsIDY0MCwgMTM5NjIxLCAwLCA2NDEsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMzY3LCA0MTYwNiwgNjcsIDY3LCA2NywgNjcsIDEyNTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMTMwNSwgMCwgMCwgOTcsIDk3LCAxMzM3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MzAsIDk3LCA2NywgMTQ3NCwgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzgwMDYyLCAyMTcxMTY2LCAyMTcxMTY2LCA5NywgMTUyOSwgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjgsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTcwNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgMTg5MSwgMTczOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5OCwgNDUsIDEyMDAsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDE4OTQsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MjAsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE5NjUsIDY3LCAxOTY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMTk3NiwgMCwgOTcsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgOTcsIDk3LCAxOTc5LCAwLCAwLCA5NywgMTk4MiwgOTcsIDk3LCA5NywgMTk4NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MzUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzAsIDY3LCA2NywgMjAwMCwgOTcsIDk3LCA5NywgMjAwMiwgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc5OCwgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgMjAzNCwgNjcsIDY3LCA2NywgNjcsIDk3LCAwLCAwLCAyMDQwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDE3NTIsIDQ1LCA0NSwgNDUsIDE3NTMsIDE3NTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjc1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxNDMwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNTMxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCAwLCAyNTQwMywgMCwgNjYzNjUsIDAsIDAsIDEwOTYsIDk3LCA5NywgOTcsIDYyMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMzU2LCAyOCwgMjgsIDY2NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjc2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcwNywgNzA4LCA0NSwgNDUsIDQ1LCA0NSwgNzYzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDksIDgxMCwgNjcsIDY3LCA2NywgNjcsIDc4MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAxMzAzLCAwLCAwLCAwLCA5NywgODYxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYxMywgOTcsIDQ1LCA0NSwgOTU2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTAyNywgNjcsIDY3LCA2NywgNjcsIDEwMzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDAsIDI1NDAzLCAwLCA2NjM2NSwgMCwgMCwgMTA5NywgMTA2NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3NSwgNjcsIDEwOTgsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMzEsIDk3LCA5NywgOTcsIDk3LCAxMTU4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTk0LCA5NywgOTcsIDEzMDksIDAsIDAsIDAsIDEzMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3NCwgOTcsIDQ1LCA0NSwgMTU0MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjQwLCA2NywgNjcsIDE1ODMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1MiwgNjcsIDk3LCA5NywgOTcsIDE2MzUsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTgwMCwgOTcsIDQ1LCA0NSwgNDUsIDk3LCA5NywgMTc5MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDE3NDMsIDQ1LCA0NSwgNDUsIDE3NDYsIDQ1LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE4NTEsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTg1NiwgNDUsIDQ1LCA0NSwgNDUsIDE4NjQsIDQ1LCA0NSwgNjcsIDY3LCAxODY5LCA2NywgNjcsIDY3LCA2NywgMTg3NCwgNjcsIDAsIDk3LCA5NywgNDUsIDY3LCAyMDU4LCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDQ1LCA2NywgMjExLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQ0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI2OCwgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDk3LCA5NywgMjkwLCA5NywgOTcsIDk3LCAzMDUsIDk3LCA5NywgMzE5LCA5NywgOTcsIDk3LCAzMzAsIDk3LCA5NywgMTgsIDY0MCwgMTM5NjIxLCAwLCA2NDEsIDAsIDAsIDAsIDAsIDM2NCwgMCwgNjQzLCAzNjcsIDQxNjA2LCA5NywgOTcsIDM0OCwgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMzY0LCAwLCAzNjcsIDQxMDk4LCAzNjksIDE0MCwgNDUsIDQ1LCA0NSwgNDUsIDM4MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzk1LCA0NSwgNDUsIDQ1LCA0MDAsIDM2OSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDc0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDEwODYsIDI1NDAzLCAxMDkwLCA2NjM2NSwgMTA5NCwgMCwgMCwgOTcsIDg0MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjEsIDk3LCA5NywgOTcsIDk3LCAxMTI2LCA5NywgOTcsIDk3LCA5NywgNDUsIDk4MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwMCwgNDUsIDY3LCA2NywgNjcsIDEwMTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMTMwNCwgMCwgMCwgMCwgMTE5MCwgNDUsIDQ1LCAxMTkzLCAxMTk0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExOTksIDQ1LCAxMjAxLCA0NSwgNDUsIDQ1LCA0NSwgMTkxMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3OSwgNjcsIDY3LCA2NywgNjcsIDQ1LCAxMjA1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTg0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyNSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjksIDQ1LCA0NSwgNDUsIDEzODgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE1NzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTkwLCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNTQsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1OSwgNjcsIDEyNjEsIDY3LCA2NywgNjcsIDY3LCAxMjY1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzA4LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA2NywgNjcsIDY3LCA2NywgMTI4NSwgNjcsIDY3LCA2NywgNjcsIDEyODksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDEwODcsIDI1NDAzLCAxMDkxLCA2NjM2NSwgMTA5NSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDEzMzksIDk3LCAxMzQxLCA5NywgOTcsIDk3LCA5NywgMTM0NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjEsIDk3LCA5NywgOTcsIDk3LCA5NywgNTczLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzE3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMyOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTg4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2NSwgOTcsIDk3LCA5NywgOTcsIDEzNjksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgMTQwMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzk5LCA0NSwgNDUsIDQ1LCAxNDEzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjksIDQ1LCAxNDIyLCA0NSwgNDUsIDE0MjUsIDQ1LCA0NSwgMTQyOCwgNDUsIDE0MjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzOSwgNjcsIDY3LCAxNDc1LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDE2NjQwLCA5NywgOTcsIDE1MzAsIDk3LCAwLCA0NSwgNDUsIDE1MzQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk1NiwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTk5LCA2NywgNjcsIDE2MDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYzMiwgOTcsIDE2MzQsIDAsIDk3LCA5NywgOTcsIDE2NDAsIDk3LCA5NywgOTcsIDE2NDMsIDk3LCA5NywgMTY0NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjAsIDE2NjEsIDQ1LCA0NSwgNDUsIDQ1LCAxNjY1LCAxNjY2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NzAsIDE2OTIsIDE2OTMsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY5NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3MDIsIDk3LCA5NywgMTcxNCwgMTcxNSwgOTcsIDk3LCA5NywgOTcsIDAsIDE3MjEsIDE3MjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2MiwgMTcyNiwgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDE3MzQsIDk3LCA5NywgOTcsIDk3LCA5NywgODQ4LCA4NDksIDk3LCA5NywgOTcsIDk3LCA4NTYsIDk3LCA5NywgOTcsIDk3LCA5NywgMzU0LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgNDUsIDQ1LCAxNzUwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2ODEsIDQ1LCAwLCAxODQ2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDE4NTQsIDQ1LCA0NSwgNDUsIDQ1LCAxODU5LCA2NywgNjcsIDY3LCAxODc5LCA2NywgNjcsIDk3LCA5NywgMTg4NCwgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxMTA1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM0NCwgOTcsIDk3LCA5NywgMTM0NywgOTcsIDE4OTIsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxOTAwLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTAwMiwgNDUsIDQ1LCAxMDA1LCAxMDA2LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTI2LCA2NywgNjcsIDE5MjgsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTczNywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDE5NDQsIDk3LCA5NywgMTk0NiwgNDUsIDQ1LCA0NSwgMTU0NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwLCA0NSwgNDUsIDQ1LCAxNTIsIDE1NSwgNDUsIDE2MywgNDUsIDQ1LCAxNzcsIDE3OSwgMTgyLCA0NSwgNDUsIDQ1LCAxOTMsIDE5NywgNDUsIDQ1LCA0NSwgMTY3MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjc3LCA0NSwgMTY3OSwgNDUsIDQ1LCA0NSwgNDUsIDk5NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjEyLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDI2MCwgMjY0LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDk3LCA5NywgOTcsIDI5NSwgMjk5LCAzMDIsIDk3LCAzMTAsIDk3LCA5NywgMzI0LCAzMjYsIDMyOSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxNjM5LCAwLCAxNjQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUyMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDM0MCwgMzQ0LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMzY0LCAwLCAzNjcsIDQxMDk4LCAzNjksIDE0MCwgNDUsIDQ1LCAzNzMsIDM3NSwgNDE5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjgsIDQ1LCA0NSwgNDM1LCA0NSwgNDUsIDQ1LCAxNzUxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDEwLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA1MDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxNCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk2OSwgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDIwNjQsIDIwNjUsIDAsIDIwNjYsIDQ1LCA1MjEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2NSwgNjcsIDY3LCA2NywgNDc0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxOTMzLCAwLCA5NywgOTcsIDk3LCA2MDIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYxMSwgOTcsIDk3LCAxOCwgNjQwLCAxMzk2MjEsIDM1OCwgNjQxLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDM2NywgMCwgNjE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMxLCA5NywgOTcsIDk3LCA5NywgOTcsIDg4MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2OSwgOTcsIDk3LCA5NywgOTcsIDk3LCAzNjksIDAsIDQ1LCA2NTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjM1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE0MzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzczLCA2NywgNjcsIDY3LCAwLCAxMzA1LCAwLCAxMzExLCAwLCAxMzE3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCAxNzI0LCA5NywgOTcsIDk3LCA3NzcsIDY3LCA2NywgNzgyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDM3Njg5LCA1NDQsIDI1NDAzLCA1NDYsIDcwMTc5LCAwLCAwLCA2NjM2NSwgNjYzNjUsIDU1MiwgMCwgOTcsIDgzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ5NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxOCwgOTcsIDk3LCA5NywgOTcsIDAsIDg0MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE2OCwgOTcsIDk3LCA5NywgOTcsIDg2NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NzEsIDk3LCA5NywgOTcsIDAsIDE2MzcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE4MDEsIDQ1LCA0NSwgOTcsIDg3NSwgOTcsIDk3LCA4ODAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1MSwgMTE1MiwgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgMTA0MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzkwLCA2NywgNjcsIDY3LCAxMTgwLCAwLCA2NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAyMDAsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMTQ1NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODA2LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAxNDgxLCAwLCAxMDk0LCAwLCAwLCA5NywgMTQ4MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzA0LCA5NywgOTcsIDMxOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDk3LCA5NywgOTcsIDE1MDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzIsIDk3LCA5NywgOTcsIDE2MTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MzEsIDk3LCAxNjMzLCA5NywgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM4MSwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDk3LCA5NywgMTcyNywgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzNiwgNDUsIDQ1LCAxNzYwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc2NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTksIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxNjE2LCA5NywgOTcsIDE4MDMsIDQ1LCA0NSwgNDUsIDQ1LCAxODA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MTMsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTY4NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MjIsIDY3LCA2NywgMzc2ODksIDU0NCwgNjcsIDY3LCAxODE4LCA2NywgNjcsIDY3LCA2NywgMTgyMiwgNjcsIDY3LCA2NywgNjcsIDY3LCAxODI4LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDIwMTIsIDIwMTMsIDQ1LCA0NSwgNjcsIDY3LCA2NywgMjAxOCwgMjAxOSwgNjcsIDY3LCA5NywgNjcsIDk3LCA5NywgOTcsIDE4MzMsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAxODQwLCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgMTczMywgOTcsIDE3MzUsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDE4NDksIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg1NywgNDUsIDQ1LCA0NSwgMTkxMCwgNDUsIDE5MTIsIDQ1LCA0NSwgMTkxNCwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDE3LCA2NywgNjcsIDEwMjAsIDY3LCA0NSwgMTg2MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4NzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDYsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg3NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDE4OTAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU3MCwgOTcsIDk3LCA5NywgOTcsIDU4MCwgMTkzNSwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCAxOTA2LCA0NSwgNjcsIDY3LCA2NywgNjcsIDIwNDgsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgMCwgMCwgMCwgOTMxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjc0LCA0NSwgMTY3NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxODcxLCA2NywgNjcsIDY3LCA2NywgMCwgOTcsIDk3LCA0NSwgNjcsIDAsIDk3LCAyMDYwLCAyMDYxLCAwLCAyMDYzLCA0NSwgNjcsIDAsIDk3LCA0NSwgNDUsIDE1NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkyLCA0NSwgNDUsIDQ1LCA0NSwgMTY3MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjksIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCAyNjksIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgOTcsIDM0OSwgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMCwgMCwgMCwgMzY0LCAwLCAzNjcsIDQxMDk4LCAzNjksIDE0MCwgNDUsIDQ1LCAzNzQsIDQ1LCA0NSwgNjcsIDY3LCAyMTMsIDIxNywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNDIsIDY3LCAyNDcsIDY3LCAyNTMsIDQ1LCA0NSwgNjk4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzk5LCA0NSwgNDUsIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDAsIDkyOSwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5MSwgNDUsIDQ1LCAxMzk1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MzYsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTA0MSwgNjcsIDEwNDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzc2LCA2NywgNjcsIDk3LCA5NywgOTcsIDEwOTksIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODgsIDk3LCA5NywgOTcsIDExMzEsIDk3LCA5NywgOTcsIDk3LCAxMTM1LCA5NywgMTEzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0OTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg4MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMxMCwgMCwgMCwgMCwgMTMxNiwgMCwgMCwgMCwgMCwgMTEwMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTA3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDgsIDAsIDAsIDEzMTcsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTExMiwgOTcsIDQ1LCAxODA0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDE4NjgsIDY3LCAxODcwLCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MTcsIDY3LCA2NywgMTgxOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODIzLCA2NywgMzc2ODksIDU0NCwgNjcsIDk3LCAxODMyLCA5NywgOTcsIDE4MzQsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDE3MzIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNzcsIDAsIDAsIDkyNSwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDE5NDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDE5OTEsIDE5OTIsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTk4LCAxMzQsIDAsIDAsIDAsIDM3LCAxMTA2MzAsIDAsIDAsIDAsIDExNDczMCwgMTA2NTM5LCA0MTA5OCwgNDUsIDQ1LCA0NSwgNDUsIDk0MSwgNDUsIDQ1LCA5NDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk1MiwgNDUsIDQ1LCAyMDcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjI2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MjAsIDY3LCA2NywgNjcsIDY3LCAzNzY4OSwgNTQ0LCAzNjksIDY1MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY4MiwgMjU0MDMsIDU0NiwgNzAxNzksIDAsIDAsIDY2MzY1LCA2NjM2NSwgNTUyLCA4MzUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MjUsIDY3LCA2NywgNjcsIDE2OTUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMzQsIDY3LCAxMDM2LCA2NywgNjcsIDY3LCAyNjUsIDY3LCA2NywgNjcsIDY3LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgOTcsIDk3LCA5NywgMjk2LCA5NywgOTcsIDk3LCA5NywgMzE0LCA5NywgOTcsIDk3LCA5NywgMzMyLCAzMzQsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0NiwgMTE0NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDM0NSwgOTcsIDk3LCA5NywgOTcsIDAsIDUzMjY0LCAwLCAxOCwgMTgsIDI0LCAyNCwgMCwgMjgsIDI4LCAxMzk2MjEsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCAzNzIsIDQ1LCA0NSwgNDUsIDEyMjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTMsIDQ1LCA0NSwgNDUsIDQ1LCA0MDQsIDQwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQzNCwgNDUsIDQ1LCA0NSwgNDQwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1MSwgNDUyLCA0NSwgNDUsIDQ1LCA2NywgMTY4MywgNjcsIDY3LCA2NywgMTY4NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA2NywgNjcsIDY3LCA2NywgNDkwLCA0OTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ0NywgNjcsIDY3LCAxNDUwLCA2NywgNjcsIDY3LCA2NywgNjcsIDUyNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzcsIDUzOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA1MDYsIDY3LCA2NywgNTA4LCA2NywgNjcsIDUxMSwgNjcsIDY3LCA2NywgNjcsIDAsIDE0NzYsIDAsIDAsIDAsIDAsIDAsIDE0NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgMTQ4NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODY1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ5OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTg3LCA1ODksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzQsIDYzNSwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTYwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjgsIDk3LCA5NywgOTcsIDk3LCAzNjksIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk5OSwgNDUsIDEwMDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzE1LCA0NSwgNDUsIDQ1LCA3MjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI4LCAyNTQwMywgNTQ2LCA3MDE3OSwgMCwgMCwgNjYzNjUsIDY2MzY1LCA1NTIsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgODQwLCA5NywgOTcsIDk3LCA5NywgOTcsIDExNzQsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTM4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODAsIDQ1LCA5NjgsIDQ1LCA5NzAsIDQ1LCA5NzMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTc5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2ODgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMDA3LCAxMDA4LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDM4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDQ0LCA2NywgMTA0NiwgNjcsIDEwNDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODA4LCA2NywgNjcsIDAsIDAsIDAsIDExMDIsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzA2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTMyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTM4LCA5NywgMTE0MCwgOTcsIDExNDMsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgMTE5MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTk2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MDcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTg2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5OTEsIDQ1LCA2NywgNjcsIDY3LCAxMjU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDQ4LCA2NywgNjcsIDY3LCA5NywgMTMzNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MTUsIDk3LCAxMzg2LCA0NSwgMTM4NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1NSwgNDUsIDQ1NywgNDUsIDQ1LCAxNDI0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxNDMzLCA2NywgMTQzNCwgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5MSwgNjcsIDE1OTMsIDY3LCA2NywgNDUsIDQ1LCAxODA1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODE0LCA0NSwgNDUsIDE4MTYsIDY3LCA2NywgNjcsIDY3LCAxODIwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODI5LCA2NywgNjcsIDY3LCA2NywgNjcsIDgxNSwgNjcsIDY3LCA2NywgNjcsIDgyMSwgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgNjcsIDE4MzEsIDk3LCA5NywgOTcsIDk3LCAxODM1LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDE3MzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDE4NTAsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTYxLCA0NSwgNDUsIDQ1LCA0NSwgOTY1LCA0NSwgOTY3LCAxOTA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MjAsIDAsIDE5MzYsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc2MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMjg2NzIsIDk3LCA0NSwgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDY3LCA2NywgMjA1NCwgOTcsIDk3LCAyOTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMyMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzA3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTIyODgsIDAsIDkyNSwgOTI2LCAxMTc5LCAwLCA0NSwgMzc3LCA0NSwgNDUsIDQ1LCAzODEsIDQ1LCA0NSwgMzkyLCA0NSwgNDUsIDM5NiwgNDUsIDQ1LCA0NSwgNDUsIDk3MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1NiwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDQ2MywgNjcsIDY3LCA2NywgNDY3LCA2NywgNjcsIDQ3OCwgNjcsIDY3LCA0ODIsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAyOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2OSwgNjcsIDY3LCAxNDcyLCA2NywgNTAyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjAsIDY3LCA5NywgOTcsIDk3LCA5NywgNTYwLCA5NywgOTcsIDk3LCA1NjQsIDk3LCA5NywgNTc1LCA5NywgOTcsIDU3OSwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzY4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTI1LCAwLCAwLCA5MzAsIDk3LCA1OTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODcyLCA5NywgNDUsIDY2NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1OCwgMCwgMzYyLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDkzNCwgNDUsIDQ1LCA0NSwgMTY0LCAxNjgsIDE3NCwgMTc4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NCwgNDUsIDQ1LCA0NSwgMTY1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTksIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTAxMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA2MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1MiwgMTA1MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjMsIDk3LCAxMTU3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzksIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCAxMzgzLCA0NSwgNDUsIDQ1LCAxODA2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODEyLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTc3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzUzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDcxLCA2NywgNDUsIDE0MDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDE3LCA0NSwgNjcsIDE0NjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMzc2ODksIDU0NCwgOTcsIDE1MTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEyOCwgOTcsIDk3LCA5NywgOTcsIDE2MzYsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODUxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCAxNzA1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxODQyLCAwLCAwLCAxNzc5LCA5NywgOTcsIDk3LCAxNzgyLCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMTc4OSwgOTcsIDk3LCAwLCAwLCAwLCA5NywgMTg0NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NzUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzM3LCA3MzgsIDY3LCA3NDAsIDY3LCA3NDEsIDY3LCA3NDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5NjgsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAyMDYyLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCA2NywgOTcsIDk3LCAyMDAxLCA5NywgMCwgMCwgMjAwNCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgMTc5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA2NywgMjYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgOTcsIDI5MiwgOTcsIDk3LCA5NywgOTcsIDMxMSwgMzE1LCAzMjEsIDMyNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzAsIDk3LCA5NywgMTMzMywgMTMzNCwgOTcsIDM0MSwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMTM5NjIxLCAwLCAwLCAwLCAzNjMsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCAxMjIxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxMywgNDUsIDQ1LCA0MTYsIDQ1LCAzNzYsIDQ1LCA0NSwgNDUsIDQ1LCAzODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQwMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxNCwgNDUsIDQ1LCA0NSwgNDE4LCA2NywgNjcsIDY3LCA0NjIsIDY3LCA2NywgNjcsIDY3LCA0NjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYwMiwgNjcsIDE2MDQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTAwLCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjc0LCAwLCAzNzEzOSwgMjQ4NTMsIDAsIDAsIDAsIDAsIDQxMDk4LCA2NTgyMCwgNjcsIDY3LCA1MDQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTAsIDY3LCA2NywgNjcsIDUxNywgNTE5LCA1NDEsIDY3LCAzNzEzOSwgMzcxMzksIDI0ODUzLCAyNDg1MywgMCwgNzAxNzksIDAsIDAsIDAsIDY1ODIwLCA2NTgyMCwgMzY5LCAyODcsIDU1NCwgOTcsIDk3LCA5NywgNTU5LCA5NywgOTcsIDk3LCA5NywgNTY1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcxOCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg5OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTA2LCA5NywgOTcsIDk3LCA5NywgNTg2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgMTY1NiwgNDUsIDQ1LCA0NSwgOTcsIDk3LCA2MDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MDcsIDk3LCA5NywgOTcsIDYxNCwgNjE2LCA2MzgsIDk3LCAxOCwgMCwgMTM5NjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDM2NywgNDE2MDYsIDM2OSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY2MSwgNDUsIDQ1LCA0NSwgNDA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgxNSwgNDUsIDY3LCA0NSwgNjY3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjc4LCA0NSwgNDUsIDQ1LCA0MjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3NiwgOTc3LCA0NSwgNDUsIDQ1LCA2ODIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2OTMsIDQ1LCA0NSwgNjk3LCA2NywgNjcsIDc0OCwgNjcsIDY3LCA2NywgNjcsIDc1NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjUsIDY3LCA2NywgNjcsIDY3LCA3NjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzgwLCA2NywgNjcsIDc4NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzc3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODQ2LCA5NywgOTcsIDk3LCA5NywgODUyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc0MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NDcsIDk3LCA5NywgOTcsIDg2MywgOTcsIDk3LCA5NywgOTcsIDg2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMwOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEyMjg4LCAxMTc4LCA5MjUsIDAsIDExNzksIDAsIDk3LCA5NywgOTcsIDg3OCwgOTcsIDk3LCA4ODIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMjI4OCwgMCwgOTI1LCAwLCAxMTc5LCAwLCA5MDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTI1LCAwLCAwLCAwLCA5NTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NjMsIDQ1LCA0NSwgOTY2LCA0NSwgNDUsIDE1NywgNDUsIDQ1LCAxNzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTAyMiwgNjcsIDY3LCAxMDI2LCA2NywgNjcsIDY3LCAxMDMwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjAzLCAxNjA1LCA2NywgNjcsIDY3LCAxNjA4LCA2NywgNjcsIDY3LCAxMDM5LCA2NywgNjcsIDEwNDIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzEsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMTEwMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwNCwgOTcsIDk3LCA5NywgOTcsIDExMTYsIDk3LCA5NywgMTEyMCwgOTcsIDk3LCA5NywgMTEyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTYyLCA5NywgOTcsIDk3LCA1NzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMzMsIDk3LCA5NywgMTEzNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTUsIDkxNywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgMTE3MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5MjUsIDAsIDAsIDAsIDAsIDAsIDQxNjA2LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTkzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3NSwgNjcsIDY3LCA2NywgMTI3OCwgNjcsIDAsIDAsIDAsIDQ1LCA0NSwgMTE4MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4OSwgMTIwNCwgNDUsIDQ1LCA0NSwgMTIwNywgNDUsIDQ1LCAxMjA5LCA0NSwgMTIxMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjMxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODAxLCA2NywgNjcsIDY3LCA4MDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI0MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI0OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTA3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTMwMCwgMCwgMCwgMCwgMCwgMCwgMTI2NywgNjcsIDY3LCAxMjY5LCA2NywgMTI3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4MCwgOTcsIDEzNDksIDk3LCAxMzUwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzYwLCA5NywgOTcsIDk3LCAwLCAxOTgwLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3MywgNDUsIDQ1LCA0NSwgNDUsIDY3NywgNDUsIDQ1LCA0NSwgNDUsIDE0MDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk1MywgNjcsIDE0MzcsIDY3LCAxNDQwLCA2NywgNjcsIDY3LCA2NywgMTQ0NSwgNjcsIDY3LCA2NywgMTQ0OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAyOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ3MywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyMCwgMCwgODM0LCA5NywgOTcsIDk3LCA5NywgMTQ5MCwgOTcsIDE0OTMsIDk3LCA5NywgOTcsIDk3LCAxNDk4LCA5NywgOTcsIDk3LCAxNTAxLCA5NywgOTcsIDk3LCAwLCA5NywgMTYzOCwgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxNTI4LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCAxNTM1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDE5MzIsIDAsIDAsIDE1NTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTY3LCA0NSwgNDUsIDE1OCwgNDUsIDQ1LCAxNzIsIDQ1LCA0NSwgNDUsIDE4MywgNDUsIDQ1LCA0NSwgNDUsIDIwMSwgNDUsIDQ1LCA2NywgMjEyLCA2NywgNjcsIDY3LCA2NywgMjMxLCAyMzUsIDI0MSwgMjQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzIsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDE2NTEsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzksIDQ1LCA0NSwgNDUsIDY3LCAxNzA0LCA2NywgMTcwNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDE4NDEsIDk3LCAwLCAxODQ0LCA5NywgOTcsIDk3LCA5NywgMTcxNiwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgMTM4NSwgMTc0OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NTcsIDQ1LCA0NSwgMTU5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDE1LCA0NSwgNDUsIDk3LCA5NywgMTc4MCwgOTcsIDk3LCA5NywgMCwgMCwgMTc4NiwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDE3MzAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTczNiwgOTcsIDE3MzgsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxODM4LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCAxNzI5LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTYyLCA5NywgOTcsIDk3LCAxMTY1LCA5NywgOTcsIDk3LCA0NSwgMTk1MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTU4LCA2NywgNjcsIDY3LCAxOTYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDE3MTAsIDk3LCA5NywgOTcsIDE5OTksIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMjAwMywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAyMDA4LCAyMDA5LCA0NSwgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgMjA1MiwgNjcsIDIwNTMsIDAsIDAsIDAsIDAsIDkyNSwgNDE2MDYsIDAsIDAsIDkzMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5MiwgNDUsIDEzOTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2MywgMTU2NSwgNDUsIDQ1LCA0NSwgMTU2OCwgMCwgOTcsIDIwNTUsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMjg2NzIsIDk3LCA0NSwgNDUsIDE2MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3OSwgNDUsIDQ1LCA2NywgNjcsIDI2NiwgNjcsIDY3LCA2NywgNjcsIDAsIDM3MTM5LCAyNDg1MywgMCwgMCwgMCwgMCwgNDEwOTgsIDY1ODIwLCA5NywgMzQ2LCA5NywgOTcsIDk3LCA5NywgMCwgNTMyNjQsIDAsIDE4LCAxOCwgMjQsIDI0LCAwLCAyOCwgMjgsIDEzOTYyMSwgMCwgMCwgMzYyLCAwLCAzNjQsIDAsIDM2NywgNDEwOTgsIDM2OSwgMTQwLCAzNzEsIDQ1LCA0NSwgNDUsIDM3OSwgNDUsIDQ1LCA0NSwgMzg4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ0OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDU0MiwgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDcwMTc5LCAwLCAwLCAwLCA2NTgyMCwgNjU4MjAsIDM2OSwgMjg3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI5LCA5NywgOTcsIDAsIDE3OTQsIDE3OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0NSwgNDUsIDQ1LCA5NywgNjM5LCAxOCwgMCwgMTM5NjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDM2NywgNDE2MDYsIDQ1LCA3MzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA3OTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzMsIDY3LCA2NywgNjcsIDg2MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NzMsIDAsIDAsIDExMDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MjEsIDk3LCAwLCA2NywgNjcsIDY3LCA2NywgMTI0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1MCwgNjcsIDY3LCAxMjUzLCAwLCAwLCAxMzEyLCAwLCAwLCAwLCAxMzE4LCAwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTEwNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0OSwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTU1LCA5NywgOTcsIDEzMjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTQxLCA5NywgOTcsIDY3LCA2NywgMTQzOSwgNjcsIDE0NDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNjQsIDY3LCA2NywgNjcsIDk3LCA5NywgMTQ5MiwgOTcsIDE0OTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMzMSwgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDIwMzcsIDY3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMjA0MywgOTcsIDQ1LCA0NSwgNDUsIDQ0MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMTk3NSwgMCwgMCwgOTcsIDg3NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0MiwgOTcsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDY1LCA4NiwgMTE3LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA2MywgODQsIDExNSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNjEsIDgyLCAxMTMsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDU5LCA4MCwgMTExLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1NywgNzgsIDEwOSwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNTUsIDc2LCAxMDcsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDUzLCA3NCwgMTA1LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1MSwgNzIsIDEwMywgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNDksIDcwLCAxMDEsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDQ3LCA2OCwgOTksIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDQ1LCA2NywgOTcsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMjEzMDg1LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDAsIDAsIDQ0LCAwLCAwLCAzMjg2MywgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAwLCA0MSwgNDEsIDQxLCAwLCAwLCAxMTM4Njg4LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgODksIDUzMjY0LCAxOCwgMTgsIDQ5MTcyLCAwLCA1NzM2NiwgMCwgMjQsIDI0LCAyNCwgMCwgMTI3LCAxMjcsIDEyNywgMTI3LCAxMDI0MzIsIDY3LCAyNjIsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDM0MiwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMTM5NjIxLCAwLCAzNjAsIDAsIDAsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCA3MTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDEyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxMDA5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5MiwgNjcsIDY3LCAxMjk0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTYxNSwgOTcsIDk3LCA5NywgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNjYsIDg3LCAxMTgsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDY0LCA4NSwgMTE2LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA2MiwgODMsIDExNCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNjAsIDgxLCAxMTIsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDU4LCA3OSwgMTEwLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1NiwgNzcsIDEwOCwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNTQsIDc1LCAxMDYsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDUyLCA3MywgMTA0LCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDM3LCAxMTA2MzAsIDExNDczMCwgMTA2NTM5LCA1MCwgNzEsIDEwMiwgNTMyNjQsIDE4LCA0OTE3MiwgNTczNjYsIDI0LCA4MTkyLCAyOCwgMTAyNDMyLCAzNywgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgNDgsIDY5LCAxMDAsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMzcsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDQ2LCA2NywgOTgsIDUzMjY0LCAxOCwgNDkxNzIsIDU3MzY2LCAyNCwgODE5MiwgMjgsIDEwMjQzMiwgMCwgMTEwNjMwLCAxMTQ3MzAsIDEwNjUzOSwgMCwgMCwgMjMzNDcyLCA1MzI2NCwgMTgsIDQ5MTcyLCA1NzM2NiwgMjQsIDgxOTIsIDI4LCAxMDI0MzIsIDAsIDExMDYzMCwgMTE0NzMwLCAxMDY1MzksIDAsIDAsIDY5NzI0LCA1MzI2NCwgMTgsIDE4LCA0OTE3MiwgMCwgNTczNjYsIDI2MjE0NCwgMjQsIDI0LCAyNCwgMCwgMjgsIDI4LCAyOCwgMjgsIDEwMjQzMiwgNDUsIDQ1LCAxNjEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTAsIDQ1LCA0NSwgMjgsIDEzOTYyMSwgMzU5LCAwLCAwLCAwLCAzNjQsIDAsIDM2NywgNDEwOTgsIDM2OSwgMTQwLCA0NSwgNDUsIDQ1LCA0NSwgMTM4OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDksIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNTAzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDksIDY3LCA2NywgOTcsIDYwMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTU0LCA5NywgMCwgMCwgMCwgMCwgOTI1LCA0MTYwNiwgOTI3LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDQ1LCA0NSwgOTY5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTUxLCA0NSwgNDUsIDQ1LCA0NSwgMTE5MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDIsIDQ1LCA0NSwgMCwgMCwgMCwgMTMxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0ODgsIDY3LCA2NywgMjY3LCA2NywgNjcsIDY3LCA2NywgMCwgMzcxMzksIDI0ODUzLCAwLCAwLCAwLCAwLCA0MTA5OCwgNjU4MjAsIDk3LCAzNDcsIDk3LCA5NywgOTcsIDk3LCAwLCA1MzI2NCwgMCwgMTgsIDE4LCAyNCwgMjQsIDAsIDI4LCAyOCwgMTM5NjIxLCAwLCAzNjEsIDAsIDAsIDM2NCwgMCwgMzY3LCA0MTA5OCwgMzY5LCAxNDAsIDQ1LCA0NSwgNDUsIDQ1LCA3MzQsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNzQyLCA2NywgNjcsIDQ1LCA0NSwgNjY4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxNCwgNDUsIDQ1LCAxMTMwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzYxLCA5NywgNDUsIDQ1LCAxNjcxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU1MiwgNDUsIDQ1LCAwLCAwLCAwLCAwLCAyMjIwMDMyLCAwLCAwLCAxMTMwNDk2LCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcxMDIwLCAyMTcwODgwLCAyMTcwODgwLCAxOCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCA5MDExMiwgMCwgMjIyMDAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTQ4NSwgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTUzNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzkwLCA0NSwgMTM5MywgNDUsIDQ1LCA0NSwgNDUsIDEzOTgsIDQ1LCA0NSwgNDUsIDIxNzA4ODAsIDIxNzExNjcsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI1NzYzODQsIDIyMTU5MzYsIDMxMTcwNTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzQ5NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDIxODMxNjgsIDAsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MDAyNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI3MjEyNTIsIDI3NDQzMjAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI4MzQ0MzIsIDI4NDAwNDAsIDIxNzA4ODAsIDI5MDgxNjAsIDIxNzA4ODAsIDIxNzA4ODAsIDI5MzY4MzIsIDIxNzA4ODAsIDIxNzA4ODAsIDI5ODU5ODQsIDIxNzA4ODAsIDI5OTQxNzYsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMTQ2NTYsIDIxNzA4ODAsIDMwNTk3MTIsIDMwNzYwOTYsIDMwODgzODQsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDAsIDAsIDAsIDAsIDIyMjAwMzIsIDAsIDAsIDAsIDExNDI3ODQsIDAsIDAsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMyMTUzNjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDI0MzcxMjAsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDMxMTcwNTYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDIyMTU5MzYsIDAsIDU0MywgMCwgNTQ1LCAwLCAwLCAyMTgzMTY4LCAwLCAwLCA4MzEsIDAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDI0MDAyNTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwMzEwNDAsIDIxNzA4ODAsIDMwNTU2MTYsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMwOTI0ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxMjUyNDgsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDIxNzA4ODAsIDMxOTg5NzYsIDIxNzA4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3LCA2NywgMzcxMzksIDM3MTM5LCAyNDg1MywgMjQ4NTMsIDAsIDAsIDAsIDAsIDAsIDY1ODIwLCA2NTgyMCwgMCwgMjg3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3ODMsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3OTEsIDAsIDAsIDU0NiwgNzAxNzksIDAsIDAsIDAsIDAsIDU1MiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMTQ3NDU2LCAxNDc0NTYsIDE0NzQ1NiwgMCwgMCwgMTQ3NDU2LCAwLCAwLCAwLCAwLCA5MjUsIDQxNjA2LCAwLCA5MjgsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk5OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2MiwgNDUsIDE1NjQsIDQ1LCA0NSwgNDUsIDQ1LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAwLCAwLCAwLCAyMjMyMzIwLCAyMjMyMzIwLCAyMjMyMzIwLCAwLCAyMjQwNTEyLCAyMjQwNTEyLCAyMjQwNTEyLCAyMjQwNTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcwODgwLCAyMTcwODgwLCAyMTcwODgwLCAyNDE2NjQwCl07CgpKU09OaXFUb2tlbml6ZXIuRVhQRUNURUQgPQpbIDI5MSwgMzAwLCAzMDQsIDM0MSwgMzE1LCAzMDksIDMwNSwgMjk1LCAzMTksIDMyMywgMzI3LCAzMjksIDI5NiwgMzMzLCAzMzcsIDMzOSwgMzQyLCAzNDYsIDM1MCwgMjk0LCAzNTYsIDM2MCwgMzEyLCAzNjcsIDM1MiwgMzcxLCAzNjMsIDM3NSwgMzc5LCAzODMsIDM4NywgMzkxLCAzOTUsIDcyNiwgMzk5LCA0MDUsIDUxOCwgNjg0LCA0MDUsIDQwNSwgNDA1LCA0MDUsIDgwOCwgNDA1LCA0MDUsIDQwNSwgNTEyLCA0MDUsIDQwNSwgNDA1LCA0MzEsIDQwNSwgNDA1LCA0MDYsIDQwNSwgNDA1LCA0MDQsIDQwNSwgNDA1LCA0MDUsIDQwNSwgNDA1LCA0MDUsIDQwNSwgOTA4LCA2MzEsIDQxMCwgNDE1LCA0MDUsIDQxNCwgNDE5LCA2MDgsIDQwNSwgNDI5LCA2MDIsIDQwNSwgNDM1LCA0NDMsIDQwNSwgNDQxLCA2NDEsIDQ3OCwgNDA1LCA0NDcsIDQ1MSwgNDUwLCA0NTYsIDY0MywgNDYxLCA0NjAsIDc2MiwgNjc5LCA0NjUsIDQ2OSwgNzQxLCA0NzMsIDQ3NywgNDgyLCA0ODYsIDQ5MiwgOTMyLCA5MzEsIDUyMywgNDk4LCA1MDQsIDcyMCwgNDA1LCA1MTAsIDU5NiwgNDA1LCA1MTYsIDk0MSwgNTgwLCA1MjIsIDkyOSwgNTI3LCA1OTAsIDU4OSwgODk3LCA5MzksIDUzNCwgNTM4LCA1NDcsIDU1MSwgNTU1LCA1NTksIDU2MywgNTY3LCA1NzEsIDk2OSwgNTc1LCA3MDgsIDY5MCwgNjg5LCA1NzksIDU4NCwgNjM0LCA0MDUsIDU5NCwgNzMxLCA0MDUsIDYwMCwgODgyLCA0MDUsIDYwNiwgODk1LCA3ODYsIDQ1MiwgNjEyLCA0MDUsIDYxNSwgNjIwLCA4NzYsIDYyNCwgNjI4LCA2MzgsIDY0NywgNjUxLCA2NTUsIDY1OSwgNjYzLCA2NjcsIDY3NiwgNjgzLCA2ODgsIDY5NSwgNjk0LCA3OTEsIDQwNSwgNjk5LCA0MzcsIDQwNSwgNzA2LCA3MTQsIDQwNSwgNzEyLCA4MjUsIDg3MCwgNDA1LCA3MTgsIDcyNCwgNzY5LCA3NjgsIDgyMywgNzMwLCA3MzUsIDc0NSwgNzUxLCA0MjIsIDc1NSwgNzU5LCA0MjUsIDc2NiwgOTAyLCA4MTAsIDU4NywgNzc1LCA4ODgsIDg4NywgNDA1LCA3NzMsIDk5MiwgNDA1LCA3NzksIDk2MiwgNDA1LCA3ODUsIDc4MSwgOTg2LCA3OTAsIDc5NSwgNzk3LCA1MDYsIDUwMCwgNDk5LCA4MDEsIDgwNSwgODE0LCA4MjAsIDgyOSwgODMzLCA4MzcsIDg0MSwgODQ1LCA4NDksIDg1MywgODU3LCA4NjEsIDYxNiwgODY1LCA4NjksIDg2OCwgNDg4LCA0MDUsIDg3NCwgODE2LCA0MDUsIDg4MCwgNzM4LCA0MDUsIDg4NiwgODkyLCA1NDMsIDQwNSwgOTAxLCA5MDYsIDkxMywgOTEyLCA5MTgsIDQ5NCwgNTQxLCA5MjIsIDkyNiwgOTM2LCA5NDUsIDk0OSwgOTUzLCA5NTcsIDUzMCwgOTY2LCA5NzMsIDk2MCwgNzAyLCA3MDEsIDQwNSwgOTc5LCA5ODEsIDQwNSwgOTg1LCA3NDcsIDQwNSwgOTkwLCA5OTgsIDkxNCwgNDA1LCA5OTYsIDEwMDQsIDY3MiwgOTc1LCA5NzQsIDEwMTQsIDEwMDIsIDEwMDgsIDY3MCwgMTAxMiwgNDA1LCA0MDUsIDQwNSwgNDA1LCA0MDUsIDQwMSwgMTAxOCwgMTAyMiwgMTAyNiwgMTEwNiwgMTA3MSwgMTExMSwgMTExMSwgMTExMSwgMTA4MiwgMTE0NSwgMTAzMCwgMTEwMSwgMTAzNCwgMTAzOCwgMTEwNiwgMTEwNiwgMTEwNiwgMTEwNiwgMTA0NiwgMTIwNiwgMTA1MiwgMTEwNiwgMTA3MiwgMTExMSwgMTExMSwgMTA0MiwgMTEzNCwgMTA2NSwgMTExMSwgMTExMiwgMTA1NiwgMTE2MCwgMTIwNywgMTA2MiwgMTIwNCwgMTIwOCwgMTA2OSwgMTEwNiwgMTEwNiwgMTEwNiwgMTA3NiwgMTExMSwgMTIwNywgMTE2MSwgMTEyMiwgMTIwNSwgMTA2NCwgMTA5NCwgMTEwNiwgMTEwNiwgMTEwNywgMTExMSwgMTExMSwgMTExMSwgMTA3OCwgMTA4NiwgMTIwNywgMTA5MiwgMTA5OCwgMTA0NiwgMTA1OCwgMTEwNiwgMTEwNiwgMTExMCwgMTExMSwgMTExMSwgMTExNiwgMTEyMCwgMTE2MSwgMTEyNiwgMTIwMiwgMTEwNCwgMTEwNiwgMTE0NSwgMTE0NiwgMTEyOSwgMTEzOCwgMTA4OCwgMTE1MSwgMTA0OCwgMTE1NywgMTE1MywgMTEzMiwgMTE0MSwgMTE2NSwgMTEwNywgMTExMSwgMTE3MiwgMTE3OSwgMTEwOSwgMTE4MywgMTE3NSwgMTE0MywgMTE0NywgMTE4NywgMTEwOCwgMTE5MSwgMTE5NSwgMTE0NCwgMTE5OSwgMTE2OCwgMTIxMiwgMTIxNiwgMTIyMCwgMTIyNCwgMTIyOCwgMTIzMiwgMTIzNiwgMTU1NywgMTI0NywgMTI0MSwgMTI0MSwgMTAzOCwgMTQzNCwgMTI0MSwgMTI0MSwgMTI0MSwgMTI0MSwgMTI1NCwgMTI3NSwgMTYxNywgMTI0MSwgMTI4MCwgMTI4NywgMTI0MSwgMTI0MSwgMTI0MSwgMTI4NywgMTI0MSwgMjExNCwgMTI5MSwgMTI0MSwgMTI0MywgMTI0MSwgMjA0OSwgMTgyNCwgMjA5NCwgMjA5NSwgMTUyMCwgMTMwOSwgMTI0MSwgMTI0MSwgMTMwMiwgMTI0MSwgMTMyMSwgMTMxMSwgMTI0MSwgMTI0MSwgMTMxMywgMTc3OCwgMTMyNSwgMTMzNiwgMTI0MSwgMTI0MSwgMTMyNSwgMTMzMCwgMTM1MywgMTI0MSwgMTI0MSwgMTY5NSwgMTM1NCwgMTI0MSwgMTI0MSwgMTI0MSwgMTI5NCwgMTY4NiwgMTMzMSwgMTI0MSwgMTY5NiwgMTM2OCwgMTI0MSwgMTMzOCwgMTM3MCwgMTI0MSwgMTM5MiwgMTM5OSwgMTM2NCwgMjAxNywgMTQwNiwgMjAxNiwgMTQwNSwgMTcxNiwgMTQwNiwgMTQwNywgMTQyMiwgMTQxNywgMTQyMSwgMTI0MSwgMTI0MSwgMTI0MSwgMTM0OSwgMTQyNiwgMTI0MSwgMTc3NCwgMTc1NiwgMTI0MSwgMTc3MywgMTI0MSwgMTI0MSwgMTM0NSwgMTk2NCwgMTgxMiwgMTQzMiwgMTI0MSwgMTI0MSwgMTM0NSwgMTk5MywgMTQ1OSwgMTI0MSwgMTI0MSwgMTI0MSwgMTM5NSwgMTg0OCwgMTc2NywgMTQ2NSwgMTI0MSwgMTI0MSwgMTM5NCwgMTg0NywgMTI0MiwgMTQ3NywgMTI0MSwgMTI0MSwgMTQyOCwgMTI0MSwgMTQ0NSwgMTQ5MiwgMTI0MSwgMTI0MSwgMTQzOCwgMTI0MSwgMTQ5OSwgMTI0MSwgMTI0MSwgMTI0MSwgMTQ1NSwgMTI0MSwgMTgxOCwgMTQ0OCwgMTI0MSwgMTI1MCwgMTI0MSwgMjAyNiwgMTYyMywgMTQ0OSwgMTI0MSwgMTYxMiwgMTYxNiwgMTI0MSwgMTYxNCwgMTI0MSwgMTI1NywgMTI0MSwgMTI0MSwgMTk4NSwgMTI5MiwgMTU4NiwgMTUxMiwgMTI0MSwgMTUxNywgMjA1MCwgMTUyNiwgMTY3NCwgMTUxOSwgMTUyNCwgMTY0NywgMjA1MSwgMTUzMiwgMTUzNywgMTU1MSwgMTU0NCwgMTU1MCwgMTU1NSwgMTU2MSwgMTU3MSwgMTU3OCwgMTU4NCwgMTU5MCwgMTU5MSwgMTY1MywgMTU5NSwgMTYwMiwgMTYwNiwgMTYxMCwgMTYzNCwgMTYyOCwgMTY0MCwgMTYzMywgMTY0NSwgMTI0MSwgMTI0MSwgMTI0MSwgMTQ2OSwgMTI0MSwgMTk3MCwgMTY1MSwgMTI0MSwgMTI3MCwgMTI0MSwgMTI0MSwgMTgxOSwgMTQ0OSwgMTI0MSwgMTI5MywgMTY2NCwgMTI0MSwgMTI0MSwgMTQ4MSwgMTQ4NSwgMTU3NCwgMTY3MiwgMTI0MSwgMTI0MSwgMTUxMywgMTMxNywgMTQ4NywgMTY4NCwgMTI0MSwgMTI0MSwgMTUzMywgMTI5OSwgMTY5NCwgMTI0MSwgMTI0MSwgMTI5NSwgMTI0MSwgMTI0MSwgMTI0MSwgMTU0NiwgMTcwMCwgMTI0MSwgMTI0MSwgMTcwNywgMTI0MSwgMTcxMywgMTI0MSwgMTg0OSwgMTcxNSwgMTI0MSwgMTcyMCwgMTI0MSwgMTI3NiwgMTI2NywgMTI0MSwgMTI0MSwgMjEwNywgMTY1NywgMTg2NCwgMTI0MSwgMTg4MSwgMTI0MSwgMTMyNiwgMTI5MiwgMTI0MSwgMTY4NSwgMTM1OCwgMTcyNCwgMTMzOCwgMTI0MSwgMTM2MywgMTM2MiwgMTM0MiwgMTM0MCwgMTM2MSwgMTMzOSwgMTgzMywgMTM3MiwgMTM2MCwgMTgzMywgMTgzMywgMTM0MiwgMTM0MywgMTgzNSwgMTM0MSwgMTczMSwgMTczOCwgMTM0NCwgMTI0MSwgMTc0NSwgMTI0MSwgMTM3OSwgMTI0MSwgMTI0MSwgMjA5MiwgMTI0MSwgMTM4OCwgMTc2MSwgMTc1NCwgMTI0MSwgMTM4NiwgMTI0MSwgMTQwMCwgMTc2MCwgMTI0MSwgMTI0MSwgMTI0MSwgMTU5OCwgMTczNCwgMTI0MSwgMTI0MSwgMTI0MSwgMTYzNSwgMTY0NSwgMTI0MSwgMTc4MCwgMTc2NiwgMTI0MSwgMTI0MSwgMTMzMiwgMTc3MSwgMTI0MSwgMTI0MSwgMTYyOSwgMjA3OSwgMTI0MSwgMTI0MiwgMTc4NCwgMTI0MSwgMTI0MSwgMTY4MCwgMTYzOSwgMjA2MywgMTc5MCwgMTI0MSwgMTI0MSwgMTc0MSwgMTI0MSwgMTI0MSwgMTgwMCwgMTI0MSwgMTI0MSwgMTc2MiwgMTQ3MywgMTI0MSwgMTgwNiwgMTI0MSwgMTI0MSwgMTc4NiwgMTI0MCwgMTcwOSwgMTI0MSwgMTI0MSwgMTI0MSwgMTY2OCwgMTgxMSwgMTI0MSwgMTk0MCwgMTI0MSwgMTQwMSwgMTk3NCwgMTI0MSwgMTQwOCwgMTQxMywgMTM4MiwgMTI0MSwgMTgxNiwgMTI0MSwgMTI0MSwgMTgwMiwgMjA4NiwgMTgxMSwgMTI0MSwgMTgxNywgMTk0NSwgMTgyMywgMjA5NSwgMjA5NSwgMjA0NywgMjA5NCwgMjA0NiwgMjA4MCwgMTI0MSwgMTQwOSwgMTMxMiwgMTM3NiwgMjA5NiwgMjA0OCwgMTI0MSwgMTI0MSwgMTgwNywgMTI0MSwgMTI0MSwgMTI0MSwgMjAzNSwgMTI0MSwgMTI0MSwgMTgyOCwgMTI0MSwgMjA1NywgMjA2MSwgMTI0MSwgMTI0MSwgMTg0MywgMTI0MSwgMjA1OSwgMTI0MSwgMTI0MSwgMTI0MSwgMTY5MCwgMTg0NywgMTI0MSwgMTI0MSwgMTI0MSwgMTcwMywgMjEwMiwgMTg0OCwgMTI0MSwgMTI0MSwgMTg1MywgMTI5MiwgMTg0OCwgMTI0MSwgMjAxNiwgMTg1NywgMTI0MSwgMjAwMiwgMTg2OCwgMTI0MSwgMTQzNiwgMTI0MSwgMTI0MSwgMTI3MSwgMTMwNSwgMTI0MSwgMTg3NCwgMTI0MSwgMTI0MSwgMTg4NCwgMjAzNywgMTg5MiwgMTI0MSwgMTg5MCwgMTI0MSwgMTQ2MSwgMTI0MSwgMTI0MSwgMTc5NSwgMTI0MSwgMTI0MSwgMTg5MSwgMTI0MSwgMTg3OCwgMTI0MSwgMTg4OCwgMTI0MSwgMTg4OCwgMTkwNSwgMTg5NiwgMjA4NywgMTkxMiwgMTkwMywgMTI0MSwgMTkxMSwgMTkwNiwgMTkxNiwgMTkwNSwgMjAyNywgMTg2MywgMTkyNSwgMjA4OCwgMTg1OSwgMTg2MSwgMTkyMiwgMTkyNywgMTkzMSwgMTkzNSwgMTQ5NCwgMTI0MSwgMTI0MSwgMTkxOCwgMTkwNywgMTkzOSwgMTkxNywgMTk0NCwgMTk0OSwgMTI0MSwgMTI0MSwgMTQ1MSwgMTk1NSwgMTI0MSwgMTI0MSwgMTI0MSwgMTc5NiwgMTcyNywgMjA2MSwgMTI0MSwgMTI0MSwgMTg5OSwgMTI0MSwgMTY2MCwgMTk2OCwgMTI0MSwgMTI0MSwgMTk1MSwgMTY3OCwgMTk3OCwgMTI0MSwgMTI0MSwgMTI0MSwgMTgzOSwgMTI0MSwgMTI0MSwgMTk4NCwgMTk4MiwgMTI0MSwgMTQ4OCwgMTI0MSwgMTI0MSwgMTYyNCwgMTQ1MCwgMTk4OSwgMTI0MSwgMTI0MSwgMTI0MSwgMTg3MCwgMTk5NSwgMTI5MiwgMTI0MSwgMTI0MSwgMTk1OCwgMTI2MSwgMTI0MSwgMTk5NiwgMTI0MSwgMTI0MSwgMTI0MSwgMjAzOSwgMjAwOCwgMTI0MSwgMTI0MSwgMTc1MCwgMjAwMCwgMTI0MSwgMTI1NiwgMjAwMSwgMTk2MCwgMTI0MSwgMTU2NCwgMTI0MSwgMTUwNCwgMTI0MSwgMTI0MSwgMTQ0MiwgMTI0MSwgMTI0MSwgMTU2NCwgMTUyOCwgMTI2MywgMTI0MSwgMTUwOCwgMTI0MSwgMTI0MSwgMTQ2OCwgMTQ5OCwgMjAwNiwgMTU0MCwgMjAxNSwgMTUzOSwgMjAxNCwgMTc0OCwgMjAxMywgMTUzOSwgMTgzMSwgMjAxNCwgMjAxMiwgMTUwMCwgMTU2NywgMjAyMiwgMjAyMSwgMTI0MSwgMTU4MCwgMTI0MSwgMTI0MSwgMjAzMywgMjAzNywgMTc5MSwgMjA0NSwgMjAzMSwgMTI0MSwgMTYyMSwgMTI0MSwgMTY0MSwgMjA0NCwgMTI0MSwgMTI0MSwgMTI0MSwgMjA5MywgMTI0MSwgMTI0MSwgMjA1NSwgMTI0MSwgMTI0MSwgMjA2NywgMTI0MSwgMTI4MywgMTI0MSwgMTI0MSwgMTI0MSwgMjEwMSwgMjA3MSwgMTI0MSwgMTI0MSwgMTI0MSwgMjA3MywgMTg0OCwgMjA0MCwgMTI0MSwgMTI0MSwgMTI0MSwgMjA3NywgMTI0MSwgMTI0MSwgMjEwNiwgMTI0MSwgMTI0MSwgMjA4NCwgMTI0MSwgMjExMSwgMTI0MSwgMTI0MSwgMTM4MSwgMTM4MCwgMTI0MSwgMTI0MSwgMTI0MSwgMjEwMCwgMTI0MSwgMjEyOSwgMjExOCwgMjEyMiwgMjEyNiwgMjE5NywgMjEzMywgMzAxMCwgMjgyNSwgMjE0NSwgMjY5OCwgMjE1NiwgMjIyNiwgMjE2MCwgMjE2MSwgMjE2NSwgMjE3NCwgMjI5MywgMjE5NCwgMjYzMCwgMjIwMSwgMjIwMywgMjE1MiwgMzAxOSwgMjIyNiwgMjI2MywgMjIwOSwgMjIxMywgMjIxOCwgMjI2OSwgMjI5MiwgMjI2OSwgMjI2OSwgMjE4NCwgMjIyNiwgMjIzOCwgMjE0OCwgMjE1MSwgMzAxNywgMjI0NSwgMjIxNCwgMjI2OSwgMjI2OSwgMjE4NSwgMjIyNiwgMjI5MiwgMjI2OSwgMjI5MSwgMjI2OSwgMjI2OSwgMjI2OSwgMjI5MiwgMjIwNSwgMzAxOSwgMjIyNiwgMjIyNiwgMjE2MCwgMjE2MCwgMjE2MCwgMjI2MSwgMjE2MCwgMjE2MCwgMjE2MCwgMjI2MiwgMjI3NiwgMjE2MCwgMjE2MCwgMjI3NywgMjIxNiwgMjI4MywgMjIxNiwgMjI2OSwgMjI2OSwgMjI2OCwgMjI2OSwgMjI2NywgMjI2OSwgMjI2OSwgMjI2OSwgMjI3MSwgMjU2OCwgMjI5MiwgMjI2OSwgMjI5MywgMjI2OSwgMjE4MiwgMjE5MCwgMjI2OSwgMjE4NiwgMjIyNiwgMjIyNiwgMjIyNiwgMjIyNiwgMjIyNywgMjE2MCwgMjE2MCwgMjE2MCwgMjE2MCwgMjI2MywgMjE2MCwgMjI3NSwgMjI3NywgMjI4MiwgMjIxNSwgMjIxNywgMjI2OSwgMjI2OSwgMjI5MSwgMjI2OSwgMjI2OSwgMjI5MywgMjI5MSwgMjI2OSwgMjIyMCwgMjI2OSwgMjI5NSwgMjI5NCwgMjI2OSwgMjI2OSwgMjMwNSwgMjIzMywgMjI2MiwgMjI3OCwgMjIxOCwgMjI2OSwgMjIzNCwgMjIyNiwgMjIyNiwgMjIyOCwgMjE2MCwgMjE2MCwgMjE2MCwgMjI4OSwgMjIyMCwgMjI5NCwgMjI5NCwgMjI2OSwgMjI2OSwgMjMwNCwgMjI2OSwgMjE2MCwgMjE2MCwgMjI4NywgMjI2OSwgMjI2OSwgMjMwNSwgMjI2OSwgMjI2OSwgMjMxMiwgMjI2OSwgMjI2OSwgMjIyNSwgMjIyNiwgMjE2MCwgMjI4NywgMjI4OSwgMjIxOSwgMjMwNCwgMjI5NSwgMjMxNCwgMjIzNCwgMjIyNiwgMjMxNCwgMjI2OSwgMjIyNiwgMjIyNiwgMjE2MCwgMjI4OCwgMjIxOSwgMjIyMiwgMjMwNCwgMjI5NiwgMjI2OSwgMjIyNCwgMjE2MCwgMjE2MCwgMjI2OSwgMjMwMiwgMjI5NCwgMjMxNCwgMjIyNCwgMjIyNiwgMjI4OCwgMjIyMCwgMjI5NCwgMjI2OSwgMjI5MCwgMjI2OSwgMjI2OSwgMjI5MywgMjI2OSwgMjI2OSwgMjI2OSwgMjI2OSwgMjI3MCwgMjIyMSwgMjMxMywgMjIyNSwgMjIyNywgMjE2MCwgMjMwMCwgMjI2OSwgMjIyNSwgMjI2MSwgMjMwOSwgMjIzNCwgMjIyOSwgMjIyMywgMjMxOCwgMjMxOCwgMjMxOCwgMjMyOCwgMjMzNiwgMjM0MCwgMjM0NCwgMjM1MCwgMjYzNywgMjcxMiwgMjM1OCwgMjM2MiwgMjM3MiwgMjEzNSwgMjM3OCwgMjM5OCwgMjEzNSwgMjEzNSwgMjEzNSwgMjEzNSwgMjEzNiwgMjQxNywgMjI0MSwgMjEzNSwgMjM3OCwgMjEzNSwgMjEzNSwgMjk4MCwgMjk4NCwgMjEzNSwgMzAwNiwgMjEzNSwgMjEzNSwgMjEzNSwgMjk0NSwgMjkzMSwgMjQyNSwgMjQwMCwgMjEzNSwgMjEzNSwgMjEzNSwgMjk1NCwgMjEzNSwgMjQ4MSwgMjQzMywgMjEzNSwgMjEzNSwgMjk4OCwgMjgyNCwgMjEzNSwgMjEzNSwgMjQ4MiwgMjQzNCwgMjEzNSwgMjEzNSwgMjQ0MCwgMjQ0NSwgMjQ1MiwgMjEzNSwgMjEzNSwgMjk5OCwgMzAwMiwgMjk2MSwgMjQ0MSwgMjQ0NiwgMjQ1MywgMjQ2MywgMjk3NCwgMjEzNSwgMjEzNSwgMjEzNSwgMjE0MCwgMjY0MiwgMjcwOSwgMjQ1OSwgMjQ3MCwgMjQ2NSwgMjEzNSwgMjEzNSwgMzAwNSwgMjEzNSwgMjEzNSwgMjk4NywgMjgyMywgMjQ1OCwgMjQ2OSwgMjQ2NCwgMjk3NSwgMjEzNSwgMjEzNSwgMjEzNSwgMjM1MywgMjQ4OCwgMjQ0NywgMjMyNCwgMjk3NCwgMjEzNSwgMjQwOSwgMjQ1OSwgMjQ0OCwgMjEzNSwgMjk2MSwgMjQ4NywgMjQ0NiwgMjQ3NiwgMjMyMywgMjk3MywgMjEzNSwgMjEzNSwgMjEzNSwgMjM1NCwgMjQ3NiwgMjk3NCwgMjEzNSwgMjEzNSwgMjEzNSwgMjk1NywgMjEzNSwgMjEzNSwgMjk2MCwgMjEzNSwgMjEzNSwgMjEzNSwgMjM2MywgMjQwOSwgMjQ1OSwgMjQ3NCwgMjQ2NSwgMjQ4NywgMjU3MSwgMjk3MywgMjEzNSwgMjEzNSwgMjE2OCwgMjk3MywgMjEzNSwgMjEzNSwgMjEzNSwgMjk1OSwgMjEzNSwgMjEzNSwgMjEzNSwgMjUwNiwgMjEzNSwgMjk1NywgMjQ4OCwgMjE3MCwgMjEzNSwgMjEzNSwgMjEzNSwgMjk2MCwgMjEzNSwgMjgxOCwgMjQ5MywgMjEzNSwgMjEzNSwgMzAzMywgMjEzNSwgMjEzNSwgMjEzNSwgMjkzNCwgMjgxOSwgMjQ5NCwgMjEzNSwgMjEzNSwgMjEzNSwgMjk3NiwgMjc4MCwgMjQ5OSwgMjEzNSwgMjEzNSwgMjEzNSwgMzAwMCwgMjk2OCwgMjEzNSwgMjkzNSwgMjEzNSwgMjEzNSwgMjEzNSwgMjM2NCwgMjUwNywgMjEzNSwgMjEzNSwgMjkzNCwgMjEzNSwgMjEzNSwgMjc4MCwgMjQ5MiwgMjUwNywgMjEzNSwgMjEzNSwgMjUwNiwgMjc4MCwgMjEzNSwgMjEzNSwgMjc4MiwgMjc4MCwgMjEzNSwgMjc4MiwgMjEzNSwgMjc4MywgMjM3NCwgMjUxNCwgMjEzNSwgMjEzNSwgMjEzNSwgMzAwNywgMjUzMCwgMjk3NCwgMjEzNSwgMjEzNSwgMjEzNSwgMzAwOCwgMjEzNSwgMjEzNSwgMjEzNCwgMjEzNSwgMjUyNiwgMjUzMSwgMjk3NSwgMjEzNSwgMjEzNSwgMzA0MiwgMjU4MSwgMjU3NSwgMjk1NiwgMjEzNSwgMjEzNSwgMjEzNSwgMjM5NCwgMjEzNSwgMjUwOCwgMjUzNSwgMjg0MCwgMjg0NCwgMjQ5NSwgMjEzNSwgMjEzNSwgMjEzNiwgMjY4NCwgMjUzNywgMjg0MiwgMjg0NiwgMjEzNSwgMjEzNiwgMjU2MSwgMjU4MSwgMjU1MSwgMjUzNiwgMjg0MSwgMjg0NSwgMjk3NSwgMzA0MywgMjU4MiwgMjg0MywgMjU1NSwgMjEzNSwgMzA0MCwgMzA0NCwgMjUzOCwgMjg0NCwgMjk3NSwgMjEzNSwgMjEzNSwgMjI1MywgMjY0NCwgMjY3MiwgMjU0MiwgMjU1NCwgMjEzNSwgMjEzNSwgMjM0NiwgMjg3MywgMjU1MSwgMjU1NSwgMjEzNSwgMjEzNSwgMjEzNSwgMjM4MSwgMjU1OSwgMjU2NSwgMjUzOCwgMjU1MywgMjEzNSwgMjU2MCwgMjkxNCwgMjU3NiwgMjU5MCwgMjEzNSwgMjEzNSwgMjEzNSwgMjQwOCwgMjEzNiwgMjU5NiwgMjYyNCwgMjEzNSwgMjEzNSwgMjEzNSwgMjQwOSwgMjEzNSwgMjYxOCwgMjU5NywgMzAwOCwgMjEzNSwgMjEzNSwgMjM4MCwgMjk1NiwgMjYwMSwgMjEzNSwgMjEzNSwgMjEzNSwgMjQxMCwgMjYyMCwgMjYyNCwgMjEzNSwgMjEzNiwgMjM4MywgMjEzNSwgMjEzNSwgMjc4MywgMjYyMywgMjEzNSwgMjEzNSwgMjM5MywgMjg4OCwgMjEzNiwgMjYyMSwgMzAwOCwgMjEzNSwgMjYxOCwgMjYxOCwgMjYyMiwgMjEzNSwgMjEzNSwgMjQwNSwgMjQxNCwgMjYxOSwgMjM4NCwgMjYyNCwgMjEzNSwgMjEzNiwgMjk1MCwgMjEzNSwgMjEzOCwgMjEzNSwgMjEzOSwgMjEzNSwgMjYwNCwgMjYyMywgMjEzNSwgMjE0MCwgMjg3OCwgMjY2NSwgMjk1NywgMjYyMiwgMjEzNSwgMjEzNSwgMjQyOCwgMjc2MiwgMjYwNiwgMjYxMiwgMjEzNSwgMjEzNSwgMjUwMSwgMjU4NiwgMjYwNCwgMzAzOCwgMjEzNSwgMjYwNCwgMzAzNiwgMjM4NywgMjk1OCwgMjM4NiwgMjEzNSwgMjE0MSwgMjEzNSwgMjQyMSwgMjM4NywgMjM4NSwgMjEzNSwgMjM4NSwgMjM4NCwgMjM4NCwgMjEzNSwgMjM4NiwgMjYyOCwgMjM4NCwgMjEzNSwgMjEzNSwgMjUwMSwgMjU5NiwgMjU5MSwgMjEzNSwgMjEzNSwgMjEzNSwgMjQwMCwgMjEzNSwgMjYzNCwgMjEzNSwgMjEzNSwgMjU1OSwgMjU4MCwgMjU3NSwgMjY0OCwgMjEzNSwgMjEzNSwgMjEzNSwgMjQyOSwgMjY0OSwgMjEzNSwgMjEzNSwgMjEzNSwgMjQzNSwgMjY1NCwgMjY1OCwgMjEzNSwgMjEzNSwgMjEzNSwgMjQzNiwgMjY0OSwgMjE3OCwgMjY1OSwgMjEzNSwgMjEzNSwgMjU5NSwgMjYwMSwgMjY2OSwgMjY3NywgMjEzNSwgMjEzNSwgMjYxNiwgMjk1NywgMjg3OSwgMjY2NSwgMjY5MSwgMjEzNSwgMjM2MywgMjM2NywgMjkwMCwgMjg3OCwgMjY2NCwgMjY5MCwgMjk3NSwgMjg3NywgMjY0MywgMjY3MCwgMjk3NCwgMjY3MSwgMjk3NSwgMjEzNSwgMjEzNSwgMjYxOSwgMjYwOCwgMjY2OSwgMjY3MywgMjEzNSwgMjEzNSwgMjY1MywgMjE3NywgMjY3MiwgMjEzNSwgMjEzNSwgMjEzNSwgMjQ4NiwgMjE2OCwgMjI1MSwgMjI1NSwgMjY5NSwgMjk3NCwgMjcwOSwgMjEzNSwgMjEzNSwgMjEzNSwgMjQ4NywgMjE2OSwgMjM5OSwgMjcxNiwgMjk3NSwgMjEzNSwgMjM2MywgMjc3MCwgMjc3NiwgMjY0MCwgMjcxNywgMjEzNSwgMjEzNSwgMjcyOSwgMjEzNSwgMjEzNSwgMjY0MSwgMjcxOCwgMjEzNSwgMjEzNSwgMjEzNSwgMjUwNSwgMjEzNSwgMjY0MCwgMjI1NywgMjk3NCwgMjEzNSwgMjcyNywgMjk3NSwgMjEzNSwgMjM2NSwgMjMzMiwgMjg5NSwgMjk1NywgMjEzNSwgMjk1OSwgMjEzNSwgMjM2NSwgMjc0OSwgMjc1NCwgMjk1OSwgMjk1OCwgMjk1OCwgMjEzNSwgMjM4MCwgMjc5MywgMjc5OSwgMjEzNSwgMjczNSwgMjczOCwgMjEzNSwgMjM4MSwgMjEzNSwgMjEzNSwgMjk0MCwgMjk3NCwgMjEzNSwgMjc0NCwgMjEzNSwgMjEzNSwgMjczOSwgMjUxOSwgMjk3NiwgMjc0NSwgMjEzNSwgMjEzNSwgMjEzNSwgMjUwOSwgMjc1NSwgMjEzNSwgMjEzNSwgMjEzNSwgMjUxMCwgMjc3MiwgMjc3OCwgMjEzNSwgMjEzNSwgMjc0MCwgMjUyMCwgMjEzNSwgMjc3MSwgMjc3NywgMjEzNSwgMjEzNSwgMjc1OSwgMjc1MCwgMjc5MiwgMjc5OCwgMjEzNSwgMjEzNSwgMjc4MSwgMjM5MiwgMjc3OSwgMjEzNSwgMjEzNSwgMjEzNSwgMjUyMSwgMjEzNSwgMjY3OSwgMjI0OCwgMjEzNSwgMjEzNSwgMjY4MSwgMjQ4MCwgMjEzNSwgMjEzNSwgMjc4NiwgMzAwMCwgMjEzNSwgMjY3OSwgMjY4MywgMjEzNSwgMjEzNSwgMjQxNiwgMjEzNSwgMjEzNSwgMjEzNSwgMjUyNSwgMjEzNSwgMjczMCwgMjEzNSwgMjEzNSwgMjEzNSwgMjU2MCwgMjU4MSwgMjEzNSwgMjgwNSwgMjEzNSwgMjEzNSwgMjgwNCwgMjk2MiwgMjgzMiwgMjk3NCwgMjEzNSwgMjM4MiwgMjEzNSwgMjEzNSwgMjk1OCwgMjEzNSwgMjEzNSwgMjk2MCwgMjEzNSwgMjgyOSwgMjgzMywgMjk3NSwgMjk2MSwgMjk2NSwgMjk2OSwgMjk3MywgMjk2OCwgMjk3MiwgMjEzNSwgMjEzNSwgMjEzNSwgMjY0MSwgMjEzNSwgMjUxNSwgMjk2NiwgMjk3MCwgMjg1MSwgMjQ3OCwgMjEzNSwgMjEzNSwgMjgwOCwgMjEzNSwgMjgwOSwgMjEzNSwgMjEzNSwgMjEzNSwgMjcyMiwgMjg1MiwgMjQ3OSwgMjEzNSwgMjEzNSwgMjgxNSwgMjEzNSwgMjEzNSwgMjc2NiwgMjg1MywgMjQ4MCwgMjEzNSwgMjg1NywgMjQ3OSwgMjEzNSwgMjM4OCwgMjcyMywgMjEzNSwgMjM2NCwgMjMzMSwgMjg5NCwgMjg1OCwgMjQ4MCwgMjEzNSwgMjEzNSwgMjg1MCwgMjQ3OCwgMjEzNSwgMjEzNSwgMjEzNSwgMjgwNiwgMjg2NCwgMjEzNSwgMjM5OSwgMjI1NiwgMjk3NCwgMjg2NSwgMjEzNSwgMjEzNSwgMjg2MiwgMjEzNSwgMjEzNSwgMjEzNSwgMjY4NSwgMjgwNywgMjg2NSwgMjEzNSwgMjEzNSwgMjgwNywgMjg2MywgMjEzNSwgMjEzNSwgMjEzNSwgMjY4NiwgMjg4NCwgMjgwNywgMjEzNSwgMjgwOSwgMjgwNywgMjEzNSwgMjEzNSwgMjgwNywgMjgwNiwgMjcwNSwgMjgxMCwgMjgwOCwgMjcwMCwgMjg2OSwgMjcwMiwgMjcwMiwgMjcwMiwgMjcwNCwgMjg4MywgMjEzNSwgMjEzNSwgMjEzNSwgMjczMCwgMjg4NCwgMjEzNSwgMjEzNSwgMjEzNSwgMjczMSwgMjMyMSwgMjU0NiwgMjEzNSwgMjEzNSwgMjg3NiwgMjI1NSwgMjg4OSwgMjMyMiwgMjU0NywgMjEzNSwgMjQwMSwgMjEzNSwgMjEzNSwgMjEzNSwgMjk0OSwgMjM2NywgMjg5MywgMjU0NCwgMjk3MywgMjkwNiwgMjk3MywgMjEzNSwgMjEzNSwgMjg3NywgMjY2MywgMjM2OCwgMjkwMSwgMjkwNywgMjk3NCwgMjM2NiwgMjg5OSwgMjkwNSwgMjk3MiwgMjkyMCwgMjk3NCwgMjEzNSwgMjEzNSwgMjkxMSwgMjkwMCwgMjkyMCwgMjM2MywgMjkxMywgMjkxOCwgMjQ2NSwgMjk0MSwgMjk3NSwgMjEzNSwgMjEzNSwgMjkyNCwgMjkyOCwgMjk3NCwgMjk0NSwgMjkzMSwgMjEzNSwgMjEzNSwgMjEzNSwgMjc2NSwgMjEzNiwgMjk1NSwgMjEzNSwgMjEzNSwgMjkzOSwgMjkzMSwgMjM4MCwgMjEzNSwgMjEzNSwgMjM4MCwgMjEzNSwgMjEzNSwgMjEzNSwgMjc4MCwgMjUwNywgMjEzNywgMjEzNSwgMjEzNywgMjEzNSwgMjEzOSwgMjEzNSwgMjgwNiwgMjgxMCwgMjEzNSwgMjEzNSwgMjEzNSwgMjk5MiwgMjEzNSwgMjEzNSwgMjk2MiwgMjk2NiwgMjk3MCwgMjk3NCwgMjEzNSwgMjEzNSwgMjc4NywgMzAxNCwgMjEzNSwgMjUyMSwgMjk5MywgMjEzNSwgMjEzNSwgMjEzNSwgMjgwMywgMjEzNSwgMjEzNSwgMjEzNSwgMjYxOCwgMjYwNywgMjk5NywgMzAwMSwgMjEzNSwgMjEzNSwgMjk2MywgMjk2NywgMjk3MSwgMjk3NSwgMjEzNSwgMjEzNSwgMjc5MSwgMjc5NywgMjEzNSwgMzAwOSwgMjk5OSwgMzAwMywgMjc4NywgMzAwMSwgMjEzNSwgMjEzNSwgMjk2NCwgMjk2OCwgMjc4NSwgMjk5OSwgMzAwMywgMjEzNSwgMjEzNSwgMjEzNSwgMjgwNCwgMjc4NSwgMjk5OSwgMzAwNCwgMjEzNSwgMjEzNSwgMjEzNSwgMjgwNywgMjEzNSwgMjEzNSwgMzAyMywgMjEzNSwgMjEzNSwgMjEzNSwgMjgxMSwgMjEzNSwgMjEzNSwgMzAyNywgMjEzNSwgMjEzNSwgMjEzNSwgMjgzNywgMjk2OCwgMzAyOCwgMjEzNSwgMjEzNSwgMjEzNSwgMjg3NSwgMjEzNSwgMjc4NCwgMzAyOSwgMjEzNSwgMjQwOCwgMjQ1NywgMjQ0NiwgMCwgMTQsIDAsIC0yMTIwMjIwNjcyLCAxNjEwNjEyNzM2LCAtMjA3NDA4MzMyOCwgLTIwMDI3ODAxNjAsIC0yMTExODMwNTI4LCAxMDczODcyODk2LCAxMzQyMTc3MjgwLCAxMDc1ODA3MjE2LCA0MDk2LCAxNjM4NCwgMjA0OCwgODE5MiwgMCwgODE5MiwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMiwgMCwgLTIxNDUzODY0OTYsIDgzODg2MDgsIDEwNzM3NDE4MjQsIDAsIDB4ODAwMDAwMDAsIDB4ODAwMDAwMDAsIDIwOTcxNTIsIDIwOTcxNTIsIDIwOTcxNTIsIDUzNjg3MDkxMiwgMCwgMCwgMTM0MjE3NzI4LCAzMzU1NDQzMiwgMTUzNiwgMjY4NDM1NDU2LCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAxMjgsIDI1NiwgMzIsIDAsIDY1NTM2LCAxMzEwNzIsIDUyNDI4OCwgMTY3NzcyMTYsIDI2ODQzNTQ1NiwgMHg4MDAwMDAwMCwgMTU3Mjg2NCwgMTgzNTAwOCwgNjQwLCAzMjc2OCwgNjU1MzYsIDI2MjE0NCwgMTA0ODU3NiwgMjA5NzE1MiwgMTk2NjA4LCAxOTY4MDAsIDE5NjYwOCwgMTk2NjA4LCAwLCAxMzEwNzIsIDEzMTA3MiwgMTMxMDcyLCAxOTY2MDgsIDE5NjYyNCwgMTk2NjA4LCAxOTY2MjQsIDE5NjYwOCwgMTk2NjA4LCAxMjgsIDQwOTYsIDE2Mzg0LCAxNjM4NCwgMjA0OCwgMCwgNCwgMCwgMCwgMHg4MDAwMDAwMCwgMjA5NzE1MiwgMCwgMTAyNCwgMzIsIDMyLCAwLCA2NTUzNiwgMTU3Mjg2NCwgMTA0ODU3NiwgMzI3NjgsIDMyNzY4LCAzMjc2OCwgMzI3NjgsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDY0LCA2NCwgMTk2NjA4LCAxOTY2MDgsIDEzMTA3MiwgMTMxMDcyLCAxMzEwNzIsIDEzMTA3MiwgMjY4NDM1NDU2LCAyNjg0MzU0NTYsIDY0LCAxOTY3MzYsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDEzMTA3MiwgMTk2NjA4LCAxOTY2MDgsIDE2Mzg0LCA0LCA0LCA0LCAyLCAzMiwgMzIsIDY1NTM2LCAxMDQ4NTc2LCAxMjU4MjkxMiwgMTA3Mzc0MTgyNCwgMCwgMCwgMiwgOCwgMTYsIDk2LCAyMDQ4LCAzMjc2OCwgMCwgMCwgMTMxMDcyLCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAyNTYsIDI1NiwgMTk2NjA4LCAxOTY2NzIsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDE5NjYwOCwgNCwgMCwgMjU2LCAyNTYsIDI1NiwgMjU2LCAzMiwgMzIsIDMyNzY4LCAzMiwgMzIsIDMyLCAzMiwgMzI3NjgsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAyNjg0MzU0NTYsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDE5NjYyNCwgMTk2NjA4LCAxOTY2MDgsIDE5NjYwOCwgMTYsIDE2LCAxNiwgMjY4NDM1NDU2LCAxOTY2MDgsIDY0LCA2NCwgNjQsIDE5NjYwOCwgMTk2NjA4LCAxOTY2MDgsIDE5NjY3MiwgMjY4NDM1NDU2LCA2NCwgNjQsIDE5NjYwOCwgMTk2NjA4LCAxNiwgMTk2NjA4LCAxOTY2MDgsIDE5NjYwOCwgMjY4NDM1NDU2LCA2NCwgMTk2NjA4LCAxMzEwNzIsIDI2MjE0NCwgNDE5NDMwNCwgMjUxNjU4MjQsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAxOTY2MDgsIDI2MjE1MiwgOCwgMjU2LCA1MTIsIDMwNzIsIDE2Mzg0LCAyMDAsIC0xMDczNzQxODE2LCA4MzkyNzEzLCA0MCwgODM5MjcxOCwgNTIwLCA4MDc0MDQwNzIsIDQwLCA1MjAsIDEwMDY2MzMwNCwgMCwgMCwgLTU0MDY1MTc2MSwgLTU0MDY1MTc2MSwgMjU3NTg5MDQ4LCAwLCAyNjIxNDQsIDAsIDAsIDMsIDgsIDI1NiwgMCwgNCwgNiwgNDEwMCwgODM4ODYxMiwgMCwgMCwgMCwgMywgNCwgOCwgMjU2LCA1MTIsIDEwMjQsIDAsIDIwOTcxNTIsIDAsIDAsIC01Mzc4NTQ0NzEsIC01Mzc4NTQ0NzEsIDAsIDEwMDY2MzI5NiwgMCwgMCwgMSwgMiwgMCwgMCwgMCwgMTYzODQsIDAsIDAsIDAsIDk2LCAxNDMzNiwgMCwgMCwgMCwgNywgOCwgMjM0ODgxMDI0LCAwLCAwLCAwLCA4LCAwLCAwLCAwLCAwLCAyNjIxNDQsIDAsIDAsIDE2LCA2NCwgMzg0LCA1MTIsIDAsIDEsIDEsIDAsIDEyNTgyOTEyLCAwLCAwLCAwLCAwLCAzMzU1NDQzMiwgNjcxMDg4NjQsIC02MDYwODQxNDQsIC02MDYwODQxNDQsIC02MDYwODQxMzgsIDAsIDAsIDI4LCAzMiwgNzY4LCAxOTY2MDgwLCAtNjA4MTc0MDgwLCAwLCAwLCAwLCAxNCwgMzUwNTYsIDE2LCA2NCwgODk2LCAyNDU3NiwgOTgzMDQsIDk4MzA0LCAxMzEwNzIsIDI2MjE0NCwgNTI0Mjg4LCAxMDQ4NTc2LCA0MTk0MzA0LCAyNTE2NTgyNCwgMTA0ODU3NiwgNjI5MTQ1NjAsIDEzNDIxNzcyOCwgLTgwNTMwNjM2OCwgMCwgMzg0LCA1MTIsIDE2Mzg0LCA2NTUzNiwgMTMxMDcyLCAyNjIxNDQsIDI5MzYwMTI4LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDI2MjE0NCwgNTI0Mjg4LCAxMDQ4NTc2LCAyOTM2MDEyOCwgMzM1NTQ0MzIsIDUyNDI4OCwgMTA0ODU3NiwgMTY3NzcyMTYsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMTA3Mzc0MTgyNCwgMCwgMCwgMCwgMTIzODU2LCAxOTY2MDgwLCAwLCA2NCwgMzg0LCAxNjM4NCwgNjU1MzYsIDEzMTA3MiwgMTYzODQsIDY1NTM2LCA1MjQyODgsIDI2ODQzNTQ1NiwgMHg4MDAwMDAwMCwgMCwgMCwgNTI0Mjg4LCAweDgwMDAwMDAwLCAwLCAwLCAxLCAxNiwgMCwgMjU2LCA1MjQyODgsIDAsIDAsIDAsIDI1LCA5NiwgMTI4LCAtNTM3ODU0NDcxLCAwLCAwLCAwLCAzMiwgNzQwNDgwMCwgLTU0NTI1OTUyMCwgMCwgMCwgMCwgNjAsIDAsIDI0OSwgNjQ3NjgsIDEwNDg1NzYsIDYyOTE0NTYsIDYyOTE0NTYsIDI1MTY1ODI0LCAxMDA2NjMyOTYsIDQwMjY1MzE4NCwgMTA3Mzc0MTgyNCwgOTYsIDEyOCwgMTI4MCwgMjA0OCwgNDA5NiwgNTczNDQsIDYyOTE0NTYsIDU3MzQ0LCA2MjkxNDU2LCA4Mzg4NjA4LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDIwMTMyNjU5MiwgMTM0MjE3NzI4MCwgMHg4MDAwMDAwMCwgMCwgNTczNDQsIDYyOTE0NTYsIDgzODg2MDgsIDEwMDY2MzI5NiwgMTM0MjE3NzI4LCAweDgwMDAwMDAwLCAwLCAwLCAwLCAxLCA4LCAxNiwgNjQsIDEyOCwgNjQsIDEyOCwgMjU2LCAxMDI0LCAxMzEwNzIsIDEzMTA3MiwgMTMxMDcyLCAyNjIxNDQsIDUyNDI4OCwgMTY3NzcyMTYsIDU3MzQ0LCA2MjkxNDU2LCA4Mzg4NjA4LCA2NzEwODg2NCwgMTM0MjE3NzI4LCA2NCwgMjU2LCAxMDI0LCAyMDQ4LCA0MDk2LCA1NzM0NCwgNjQsIDI1NiwgMCwgMjQ1NzYsIDMyNzY4LCA2MjkxNDU2LCA2NzEwODg2NCwgMTM0MjE3NzI4LCAwLCAxLCA2NCwgMjU2LCAyNDU3NiwgMzI3NjgsIDQxOTQzMDQsIDMyNzY4LCA0MTk0MzA0LCA2NzEwODg2NCwgMCwgMCwgNjQsIDI1NiwgMCwgMCwgMjQ1NzYsIDMyNzY4LCAwLCAxNjM4NCwgNDE5NDMwNCwgNjcxMDg4NjQsIDY0LCAxNjM4NCwgMCwgMCwgMSwgNjQsIDI1NiwgMTYzODQsIDQxOTQzMDQsIDY3MTA4ODY0LCAwLCAwLCAwLCAxNjM4NCwgMCwgMTYzODQsIDE2Mzg0LCAwLCAtNDcwNDQ3ODc0LCAtNDcwNDQ3ODc0LCAtNDcwNDQ3ODc0LCAwLCAwLCAxMjgsIDAsIDAsIDgsIDk2LCAyMDQ4LCAzMjc2OCwgMjYyMTQ0LCA4Mzg4NjA4LCAzNTA1NiwgMTM3NjI1NiwgLTQ3MTg1OTIwMCwgMCwgMCwgMTQsIDE2LCAyMjQsIDIwNDgsIDMyNzY4LCAyMDk3MTUyLCA0MTk0MzA0LCA4Mzg4NjA4LCAtNDg2NTM5MjY0LCAwLCA5NiwgMTI4LCAyMDQ4LCAzMjc2OCwgMjYyMTQ0LCAyMDk3MTUyLCAyNjIxNDQsIDIwOTcxNTIsIDgzODg2MDgsIDMzNTU0NDMyLCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDAsIDE2MTA2MTI3MzYsIDB4ODAwMDAwMDAsIDAsIDAsIDEsIDUyNDI4OCwgMTA0ODU3NiwgMTI1ODI5MTIsIDAsIDAsIDAsIDE1MTMxMSwgMjY0NTAzMjk2LCAyMDk3MTUyLCA4Mzg4NjA4LCAzMzU1NDQzMiwgMTYxMDYxMjczNiwgMHg4MDAwMDAwMCwgMjYyMTQ0LCA4Mzg4NjA4LCAzMzU1NDQzMiwgNTM2ODcwOTEyLCA2NzEwODg2NCwgNDE5NDMwNCwgMCwgNDE5NDMwNCwgMCwgNDE5NDMwNCwgNDE5NDMwNCwgMCwgMCwgNTI0Mjg4LCA4Mzg4NjA4LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDEsIDQwOTcsIDgzODg2MDksIDk2LCAyMDQ4LCAzMjc2OCwgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgMCwgOTYsIDIwNDgsIDB4ODAwMDAwMDAsIDAsIDAsIDk2LCAyMDQ4LCAwLCAwLCAxLCAxMjU4MjkxMiwgMCwgMCwgMCwgMCwgMTY0MTg5NTY5NSwgMTY0MTg5NTY5NSwgMCwgMCwgMCwgMjQ5LCA3NDA0ODAwLCAxNSwgODc4MDgsIDE4MzUwMDgsIDE2Mzk5NzI4NjQsIDAsIDc2OCwgNTEyMCwgMTYzODQsIDY1NTM2LCAxODM1MDA4LCAxODM1MDA4LCAxMjU4MjkxMiwgMTY3NzcyMTYsIDE2MTA2MTI3MzYsIDAsIDMsIDQsIDgsIDc2OCwgNDA5NiwgNjU1MzYsIDAsIDAsIDI1NiwgNTEyLCA3ODY0MzIsIDgsIDI1NiwgNTEyLCA0MDk2LCAxNjM4NCwgMTgzNTAwOCwgMTYzODQsIDE4MzUwMDgsIDEyNTgyOTEyLCAxNjEwNjEyNzM2LCAwLCAwLCAwLCAyNTYsIDAsIDAsIDAsIDQsIDgsIDE2LCAzMiwgMSwgMiwgOCwgMjU2LCAxNjM4NCwgNTI0Mjg4LCAxNjM4NCwgNTI0Mjg4LCAxMDQ4NTc2LCAxMjU4MjkxMiwgMTYxMDYxMjczNiwgMCwgMCwgMCwgODM4ODYwOCwgMCwgMCwgMCwgNTI0Mjg4LCA0MTk0MzA0LCAwLCAwLCAwLCA4Mzg4NjA4LCAtNTQ4NjYyMjg4LCAtNTQ4NjYyMjg4LCAtNTQ4NjYyMjg4LCAwLCAwLCAyNTYsIDE2Mzg0LCA2NTUzNiwgNTIwMDkzNjk2LCAtMTA3Mzc0MTgyNCwgMCwgMCwgMCwgMTY3NzcyMTYsIDAsIDE2LCAzMiwgOTYwLCA0MDk2LCA0OTgwNzM2LCA1MjAwOTM2OTYsIDEwNzM3NDE4MjQsIDAsIDMyLCA4OTYsIDQwOTYsIDU3MzQ0LCAxMDQ4NTc2LCA2MjkxNDU2LCA4Mzg4NjA4LCAxNjc3NzIxNiwgMTAwNjYzMjk2LCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMHg4MDAwMDAwMCwgMCwgNTEyLCA3ODY0MzIsIDQxOTQzMDQsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMCwgNzg2NDMyLCA0MTk0MzA0LCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMCwgNTI0Mjg4LCA0MTk0MzA0LCAyNjg0MzU0NTYsIDAsIDAsIDAsIDAsIDAsIDQxOTQzMDQsIDQxOTQzMDQsIC01NDA2NTE3NjEsIDAsIDAsIDAsIDIsIDQsIDgsIDE2LCA5NiwgMTI4LCAyNjQ1MDMyOTYsIC04MDUzMDYzNjgsIDAsIDAsIDAsIDgsIDI1NiwgNTEyLCAxOTQ1NiwgMTMxMDcyLCAzMDcyLCAxNjM4NCwgMTMxMDcyLCAyNjIxNDQsIDgzODg2MDgsIDE2Nzc3MjE2LCA1MTIsIDEwMjQsIDIwNDgsIDE2Mzg0LCAxMzEwNzIsIDI2MjE0NCwgMTMxMDcyLCAyNjIxNDQsIDgzODg2MDgsIDMzNTU0NDMyLCAyMDEzMjY1OTIsIDI2ODQzNTQ1NiwgMCwgMywgNCwgMjU2LCAxMDI0LCAyMDQ4LCA1NzM0NCwgMTYzODQsIDEzMTA3MiwgODM4ODYwOCwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCAwLCAzLCAyNTYsIDEwMjQsIDE2Mzg0LCAxMzEwNzIsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDAsIDAsIDI1NiwgNTI0Mjg4LCAweDgwMDAwMDAwLCAwLCAzLCAyNTYsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDEwNzM3NDE4MjQsIDAsIDEsIDIsIDMzNTU0NDMyLCAxLCAyLCAxMzQyMTc3MjgsIDEwNzM3NDE4MjQsIDAsIDEsIDIsIDEzNDIxNzcyOCwgMCwgMCwgMCwgNjQsIDAsIDAsIDAsIDE2LCAzMiwgODk2LCA0MDk2LCA3ODY0MzIsIDQxOTQzMDQsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMjAxMzI2NTkyLCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDAsIDAsIDAsIDE1LCAwLCA0OTgwNzM2LCA0OTgwNzM2LCA0OTgwNzM2LCA3MDQ2MCwgNzA0NjAsIDM0NzgzMzIsIDAsIDAsIDEwMDgsIDQ5ODQ4MzIsIDUyMDA5MzY5NiwgNjAsIDQ4NjQsIDY1NTM2LCAwLCAwLCAwLCAxMiwgMTYsIDMyLCAyNTYsIDUxMiwgNDA5NiwgNjU1MzYsIDAsIDAsIDAsIDY3MTA4ODY0LCAwLCAwLCAwLCAxMiwgMCwgMjU2LCA1MTIsIDY1NTM2LCAwLCAwLCAxMDI0LCA1MTIsIDEzMTA3MiwgMTMxMDcyLCA0LCAxNiwgMzIsIDY1NTM2LCAwLCA0LCAxNiwgMzIsIDAsIDAsIDAsIDQsIDE2LCAwLCAwLCAxNjM4NCwgNjcxMDg4NjQsIDAsIDAsIDEsIDI0LCA5NiwgMTI4LCAyNTYsIDEwMjQKXTsKCkpTT05pcVRva2VuaXplci5UT0tFTiA9ClsKICAiKDApIiwKICAiSlNPTkNoYXIiLAogICJKU09OQ2hhclJlZiIsCiAgIkpTT05QcmVkZWZpbmVkQ2hhclJlZiIsCiAgIk1vZHVsZURlY2wiLAogICJBbm5vdGF0aW9uIiwKICAiT3B0aW9uRGVjbCIsCiAgIk9wZXJhdG9yIiwKICAiVmFyaWFibGUiLAogICJUYWciLAogICJFbmRUYWciLAogICJQcmFnbWFDb250ZW50cyIsCiAgIkRpckNvbW1lbnRDb250ZW50cyIsCiAgIkRpclBJQ29udGVudHMiLAogICJDRGF0YVNlY3Rpb25Db250ZW50cyIsCiAgIkF0dHJUZXN0IiwKICAiV2lsZGNhcmQiLAogICJFUU5hbWUiLAogICJJbnRlZ2VyTGl0ZXJhbCIsCiAgIkRlY2ltYWxMaXRlcmFsIiwKICAiRG91YmxlTGl0ZXJhbCIsCiAgIlByZWRlZmluZWRFbnRpdHlSZWYiLAogICInXCJcIiciLAogICJFc2NhcGVBcG9zIiwKICAiQXBvc0NoYXIiLAogICJFbGVtZW50Q29udGVudENoYXIiLAogICJRdW90QXR0ckNvbnRlbnRDaGFyIiwKICAiQXBvc0F0dHJDb250ZW50Q2hhciIsCiAgIk5DTmFtZSIsCiAgIlFOYW1lIiwKICAiUyIsCiAgIkNoYXJSZWYiLAogICJDb21tZW50Q29udGVudHMiLAogICJEb2NUYWciLAogICJEb2NDb21tZW50Q29udGVudHMiLAogICJFT0YiLAogICInISciLAogICInXCInIiwKICAiJyMnIiwKICAiJyMpJyIsCiAgIickJCciLAogICInJycnIiwKICAiJygnIiwKICAiJygjJyIsCiAgIicoOiciLAogICInKDp+JyIsCiAgIicpJyIsCiAgIicqJyIsCiAgIicqJyIsCiAgIicsJyIsCiAgIictLT4nIiwKICAiJy4nIiwKICAiJy8nIiwKICAiJy8+JyIsCiAgIic6JyIsCiAgIic6KSciLAogICInOyciLAogICInPCEtLSciLAogICInPCFbQ0RBVEFbJyIsCiAgIic8PyciLAogICInPSciLAogICInPiciLAogICInPyciLAogICInPz4nIiwKICAiJ05hTiciLAogICInWyciLAogICInXSciLAogICInXV0+JyIsCiAgIidhZnRlciciLAogICInYWxsJyIsCiAgIidhbGxvd2luZyciLAogICInYW5jZXN0b3InIiwKICAiJ2FuY2VzdG9yLW9yLXNlbGYnIiwKICAiJ2FuZCciLAogICInYW55JyIsCiAgIidhcHBlbmQnIiwKICAiJ2FycmF5JyIsCiAgIidhcyciLAogICInYXNjZW5kaW5nJyIsCiAgIidhdCciLAogICInYXR0cmlidXRlJyIsCiAgIidiYXNlLXVyaSciLAogICInYmVmb3JlJyIsCiAgIidib3VuZGFyeS1zcGFjZSciLAogICInYnJlYWsnIiwKICAiJ2J5JyIsCiAgIidjYXNlJyIsCiAgIidjYXN0JyIsCiAgIidjYXN0YWJsZSciLAogICInY2F0Y2gnIiwKICAiJ2NoZWNrJyIsCiAgIidjaGlsZCciLAogICInY29sbGF0aW9uJyIsCiAgIidjb2xsZWN0aW9uJyIsCiAgIidjb21tZW50JyIsCiAgIidjb25zdHJhaW50JyIsCiAgIidjb25zdHJ1Y3Rpb24nIiwKICAiJ2NvbnRhaW5zJyIsCiAgIidjb250ZW50JyIsCiAgIidjb250ZXh0JyIsCiAgIidjb250aW51ZSciLAogICInY29weSciLAogICInY29weS1uYW1lc3BhY2VzJyIsCiAgIidjb3VudCciLAogICInZGVjaW1hbC1mb3JtYXQnIiwKICAiJ2RlY2ltYWwtc2VwYXJhdG9yJyIsCiAgIidkZWNsYXJlJyIsCiAgIidkZWZhdWx0JyIsCiAgIidkZWxldGUnIiwKICAiJ2Rlc2NlbmRhbnQnIiwKICAiJ2Rlc2NlbmRhbnQtb3Itc2VsZiciLAogICInZGVzY2VuZGluZyciLAogICInZGlhY3JpdGljcyciLAogICInZGlmZmVyZW50JyIsCiAgIidkaWdpdCciLAogICInZGlzdGFuY2UnIiwKICAiJ2RpdiciLAogICInZG9jdW1lbnQnIiwKICAiJ2RvY3VtZW50LW5vZGUnIiwKICAiJ2VsZW1lbnQnIiwKICAiJ2Vsc2UnIiwKICAiJ2VtcHR5JyIsCiAgIidlbXB0eS1zZXF1ZW5jZSciLAogICInZW5jb2RpbmcnIiwKICAiJ2VuZCciLAogICInZW50aXJlJyIsCiAgIidlcSciLAogICInZXZlcnknIiwKICAiJ2V4YWN0bHknIiwKICAiJ2V4Y2VwdCciLAogICInZXhpdCciLAogICInZXh0ZXJuYWwnIiwKICAiJ2ZpcnN0JyIsCiAgIidmb2xsb3dpbmcnIiwKICAiJ2ZvbGxvd2luZy1zaWJsaW5nJyIsCiAgIidmb3InIiwKICAiJ2ZvcmVhY2gnIiwKICAiJ2ZvcmVpZ24nIiwKICAiJ2Zyb20nIiwKICAiJ2Z0LW9wdGlvbiciLAogICInZnRhbmQnIiwKICAiJ2Z0bm90JyIsCiAgIidmdG9yJyIsCiAgIidmdW5jdGlvbiciLAogICInZ2UnIiwKICAiJ2dyZWF0ZXN0JyIsCiAgIidncm91cCciLAogICInZ3JvdXBpbmctc2VwYXJhdG9yJyIsCiAgIidndCciLAogICInaWRpdiciLAogICInaWYnIiwKICAiJ2ltcG9ydCciLAogICInaW4nIiwKICAiJ2luZGV4JyIsCiAgIidpbmZpbml0eSciLAogICInaW5oZXJpdCciLAogICInaW5zZW5zaXRpdmUnIiwKICAiJ2luc2VydCciLAogICInaW5zdGFuY2UnIiwKICAiJ2ludGVncml0eSciLAogICInaW50ZXJzZWN0JyIsCiAgIidpbnRvJyIsCiAgIidpcyciLAogICInaXRlbSciLAogICInanNvbiciLAogICInanNvbi1pdGVtJyIsCiAgIidrZXknIiwKICAiJ2xhbmd1YWdlJyIsCiAgIidsYXN0JyIsCiAgIidsYXgnIiwKICAiJ2xlJyIsCiAgIidsZWFzdCciLAogICInbGV0JyIsCiAgIidsZXZlbHMnIiwKICAiJ2xvb3AnIiwKICAiJ2xvd2VyY2FzZSciLAogICInbHQnIiwKICAiJ21pbnVzLXNpZ24nIiwKICAiJ21vZCciLAogICInbW9kaWZ5JyIsCiAgIidtb2R1bGUnIiwKICAiJ21vc3QnIiwKICAiJ25hbWVzcGFjZSciLAogICInbmFtZXNwYWNlLW5vZGUnIiwKICAiJ25lJyIsCiAgIiduZXh0JyIsCiAgIidubyciLAogICInbm8taW5oZXJpdCciLAogICInbm8tcHJlc2VydmUnIiwKICAiJ25vZGUnIiwKICAiJ25vZGVzJyIsCiAgIidub3QnIiwKICAiJ29iamVjdCciLAogICInb2NjdXJzJyIsCiAgIidvZiciLAogICInb24nIiwKICAiJ29ubHknIiwKICAiJ29wdGlvbiciLAogICInb3InIiwKICAiJ29yZGVyJyIsCiAgIidvcmRlcmVkJyIsCiAgIidvcmRlcmluZyciLAogICIncGFyYWdyYXBoJyIsCiAgIidwYXJhZ3JhcGhzJyIsCiAgIidwYXJlbnQnIiwKICAiJ3BhdHRlcm4tc2VwYXJhdG9yJyIsCiAgIidwZXItbWlsbGUnIiwKICAiJ3BlcmNlbnQnIiwKICAiJ3BocmFzZSciLAogICIncG9zaXRpb24nIiwKICAiJ3ByZWNlZGluZyciLAogICIncHJlY2VkaW5nLXNpYmxpbmcnIiwKICAiJ3ByZXNlcnZlJyIsCiAgIidwcmV2aW91cyciLAogICIncHJvY2Vzc2luZy1pbnN0cnVjdGlvbiciLAogICIncmVsYXRpb25zaGlwJyIsCiAgIidyZW5hbWUnIiwKICAiJ3JlcGxhY2UnIiwKICAiJ3JldHVybiciLAogICIncmV0dXJuaW5nJyIsCiAgIidyZXZhbGlkYXRpb24nIiwKICAiJ3NhbWUnIiwKICAiJ3NhdGlzZmllcyciLAogICInc2NoZW1hJyIsCiAgIidzY2hlbWEtYXR0cmlidXRlJyIsCiAgIidzY2hlbWEtZWxlbWVudCciLAogICInc2NvcmUnIiwKICAiJ3NlbGYnIiwKICAiJ3NlbnNpdGl2ZSciLAogICInc2VudGVuY2UnIiwKICAiJ3NlbnRlbmNlcyciLAogICInc2tpcCciLAogICInc2xpZGluZyciLAogICInc29tZSciLAogICInc3RhYmxlJyIsCiAgIidzdGFydCciLAogICInc3RlbW1pbmcnIiwKICAiJ3N0b3AnIiwKICAiJ3N0cmljdCciLAogICInc3RyaXAnIiwKICAiJ3N0cnVjdHVyZWQtaXRlbSciLAogICInc3dpdGNoJyIsCiAgIid0ZXh0JyIsCiAgIid0aGVuJyIsCiAgIid0aGVzYXVydXMnIiwKICAiJ3RpbWVzJyIsCiAgIid0byciLAogICIndHJlYXQnIiwKICAiJ3RyeSciLAogICIndHVtYmxpbmcnIiwKICAiJ3R5cGUnIiwKICAiJ3R5cGVzd2l0Y2gnIiwKICAiJ3VuaW9uJyIsCiAgIid1bmlxdWUnIiwKICAiJ3Vub3JkZXJlZCciLAogICIndXBkYXRpbmcnIiwKICAiJ3VwcGVyY2FzZSciLAogICIndXNpbmcnIiwKICAiJ3ZhbGlkYXRlJyIsCiAgIid2YWx1ZSciLAogICIndmFyaWFibGUnIiwKICAiJ3ZlcnNpb24nIiwKICAiJ3dlaWdodCciLAogICInd2hlbiciLAogICInd2hlcmUnIiwKICAiJ3doaWxlJyIsCiAgIid3aWxkY2FyZHMnIiwKICAiJ3dpbmRvdyciLAogICInd2l0aCciLAogICInd2l0aG91dCciLAogICInd29yZCciLAogICInd29yZHMnIiwKICAiJ3hxdWVyeSciLAogICInemVyby1kaWdpdCciLAogICIneyciLAogICIne3snIiwKICAiJ3wnIiwKICAiJ30nIiwKICAiJ319JyIKXTsKCn0se31dLCIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvbGV4ZXJzL1hRdWVyeVRva2VuaXplci5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgWFF1ZXJ5VG9rZW5pemVyID0gZXhwb3J0cy5YUXVlcnlUb2tlbml6ZXIgPSBmdW5jdGlvbiBYUXVlcnlUb2tlbml6ZXIoc3RyaW5nLCBwYXJzaW5nRXZlbnRIYW5kbGVyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdChzdHJpbmcsIHBhcnNpbmdFdmVudEhhbmRsZXIpOwogIHZhciBzZWxmID0gdGhpczsKCiAgdGhpcy5QYXJzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKGIsIGUsIHMsIG8sIHgpCiAgewogICAgdmFyCiAgICAgIGJlZ2luID0gYiwKICAgICAgZW5kID0gZSwKICAgICAgc3RhdGUgPSBzLAogICAgICBvZmZlbmRpbmcgPSBvLAogICAgICBleHBlY3RlZCA9IHg7CgogICAgdGhpcy5nZXRCZWdpbiA9IGZ1bmN0aW9uKCkge3JldHVybiBiZWdpbjt9OwogICAgdGhpcy5nZXRFbmQgPSBmdW5jdGlvbigpIHtyZXR1cm4gZW5kO307CiAgICB0aGlzLmdldFN0YXRlID0gZnVuY3Rpb24oKSB7cmV0dXJuIHN0YXRlO307CiAgICB0aGlzLmdldEV4cGVjdGVkID0gZnVuY3Rpb24oKSB7cmV0dXJuIGV4cGVjdGVkO307CiAgICB0aGlzLmdldE9mZmVuZGluZyA9IGZ1bmN0aW9uKCkge3JldHVybiBvZmZlbmRpbmc7fTsKCiAgICB0aGlzLmdldE1lc3NhZ2UgPSBmdW5jdGlvbigpCiAgICB7CiAgICAgIHJldHVybiBvZmZlbmRpbmcgPCAwID8gImxleGljYWwgYW5hbHlzaXMgZmFpbGVkIiA6ICJzeW50YXggZXJyb3IiOwogICAgfTsKICB9OwoKICBmdW5jdGlvbiBpbml0KHN0cmluZywgcGFyc2luZ0V2ZW50SGFuZGxlcikKICB7CiAgICBldmVudEhhbmRsZXIgPSBwYXJzaW5nRXZlbnRIYW5kbGVyOwogICAgaW5wdXQgPSBzdHJpbmc7CiAgICBzaXplID0gc3RyaW5nLmxlbmd0aDsKICAgIHJlc2V0KDAsIDAsIDApOwogIH0KCiAgdGhpcy5nZXRJbnB1dCA9IGZ1bmN0aW9uKCkKICB7CiAgICByZXR1cm4gaW5wdXQ7CiAgfTsKCiAgZnVuY3Rpb24gcmVzZXQobCwgYiwgZSkKICB7CiAgICAgICAgICAgIGIwID0gYjsgZTAgPSBiOwogICAgbDEgPSBsOyBiMSA9IGI7IGUxID0gZTsKICAgIGVuZCA9IGU7CiAgICBldmVudEhhbmRsZXIucmVzZXQoaW5wdXQpOwogIH0KCiAgdGhpcy5nZXRPZmZlbmRpbmdUb2tlbiA9IGZ1bmN0aW9uKGUpCiAgewogICAgdmFyIG8gPSBlLmdldE9mZmVuZGluZygpOwogICAgcmV0dXJuIG8gPj0gMCA/IFhRdWVyeVRva2VuaXplci5UT0tFTltvXSA6IG51bGw7CiAgfTsKCiAgdGhpcy5nZXRFeHBlY3RlZFRva2VuU2V0ID0gZnVuY3Rpb24oZSkKICB7CiAgICB2YXIgZXhwZWN0ZWQ7CiAgICBpZiAoZS5nZXRFeHBlY3RlZCgpIDwgMCkKICAgIHsKICAgICAgZXhwZWN0ZWQgPSBYUXVlcnlUb2tlbml6ZXIuZ2V0VG9rZW5TZXQoLSBlLmdldFN0YXRlKCkpOwogICAgfQogICAgZWxzZQogICAgewogICAgICBleHBlY3RlZCA9IFtYUXVlcnlUb2tlbml6ZXIuVE9LRU5bZS5nZXRFeHBlY3RlZCgpXV07CiAgICB9CiAgICByZXR1cm4gZXhwZWN0ZWQ7CiAgfTsKCiAgdGhpcy5nZXRFcnJvck1lc3NhZ2UgPSBmdW5jdGlvbihlKQogIHsKICAgIHZhciB0b2tlblNldCA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlblNldChlKTsKICAgIHZhciBmb3VuZCA9IHRoaXMuZ2V0T2ZmZW5kaW5nVG9rZW4oZSk7CiAgICB2YXIgcHJlZml4ID0gaW5wdXQuc3Vic3RyaW5nKDAsIGUuZ2V0QmVnaW4oKSk7CiAgICB2YXIgbGluZXMgPSBwcmVmaXguc3BsaXQoIlxuIik7CiAgICB2YXIgbGluZSA9IGxpbmVzLmxlbmd0aDsKICAgIHZhciBjb2x1bW4gPSBsaW5lc1tsaW5lIC0gMV0ubGVuZ3RoICsgMTsKICAgIHZhciBzaXplID0gZS5nZXRFbmQoKSAtIGUuZ2V0QmVnaW4oKTsKICAgIHJldHVybiBlLmdldE1lc3NhZ2UoKQogICAgICAgICArIChmb3VuZCA9PSBudWxsID8gIiIgOiAiLCBmb3VuZCAiICsgZm91bmQpCiAgICAgICAgICsgIlxud2hpbGUgZXhwZWN0aW5nICIKICAgICAgICAgKyAodG9rZW5TZXQubGVuZ3RoID09IDEgPyB0b2tlblNldFswXSA6ICgiWyIgKyB0b2tlblNldC5qb2luKCIsICIpICsgIl0iKSkKICAgICAgICAgKyAiXG4iCiAgICAgICAgICsgKHNpemUgPT0gMCB8fCBmb3VuZCAhPSBudWxsID8gIiIgOiAiYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNjYW5uaW5nICIgKyBzaXplICsgIiBjaGFyYWN0ZXJzIGJlZ2lubmluZyAiKQogICAgICAgICArICJhdCBsaW5lICIgKyBsaW5lICsgIiwgY29sdW1uICIgKyBjb2x1bW4gKyAiOlxuLi4uIgogICAgICAgICArIGlucHV0LnN1YnN0cmluZyhlLmdldEJlZ2luKCksIE1hdGgubWluKGlucHV0Lmxlbmd0aCwgZS5nZXRCZWdpbigpICsgNjQpKQogICAgICAgICArICIuLi4iOwogIH07CgogIHRoaXMucGFyc2Vfc3RhcnQgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoInN0YXJ0IiwgZTApOwogICAgbG9va2FoZWFkMVcoMTQpOyAgICAgICAgICAgICAgICAvLyBNb2R1bGVEZWNsIHwgQW5ub3RhdGlvbiB8IE9wdGlvbkRlY2wgfCBPcGVyYXRvciB8IFZhcmlhYmxlIHwgVGFnIHwgQXR0clRlc3QgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhW0NEQVRBWycKICAgICAgc2hpZnQoNTUpOyAgICAgICAgICAgICAgICAgICAgLy8gJzwhW0NEQVRBWycKICAgICAgYnJlYWs7CiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBzaGlmdCg1NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgICAgYnJlYWs7CiAgICBjYXNlIDU2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8PycKICAgICAgc2hpZnQoNTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICBicmVhazsKICAgIGNhc2UgNDA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICBzaGlmdCg0MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKDp+JwogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnKDp+JwogICAgICBicmVhazsKICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGJyZWFrOwogICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgc2hpZnQoMjc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgc2hpZnQoMzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgc2hpZnQoNDMpOyAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgIGJyZWFrOwogICAgY2FzZSA0OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgc2hpZnQoNDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgIGJyZWFrOwogICAgY2FzZSA2MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgc2hpZnQoNjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgIGJyZWFrOwogICAgY2FzZSA2MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgICAgc2hpZnQoNjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICAgIGJyZWFrOwogICAgY2FzZSA0NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgc2hpZnQoNDYpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGJyZWFrOwogICAgY2FzZSA0ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgc2hpZnQoNDgpOyAgICAgICAgICAgICAgICAgICAgLy8gJy4nCiAgICAgIGJyZWFrOwogICAgY2FzZSA1MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOicKICAgICAgc2hpZnQoNTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJzonCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgc2hpZnQoMjczKTsgICAgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbm5vdGF0aW9uCiAgICAgIHNoaWZ0KDIpOyAgICAgICAgICAgICAgICAgICAgIC8vIEFubm90YXRpb24KICAgICAgYnJlYWs7CiAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vZHVsZURlY2wKICAgICAgc2hpZnQoMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gTW9kdWxlRGVjbAogICAgICBicmVhazsKICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uRGVjbAogICAgICBzaGlmdCgzKTsgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25EZWNsCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBBdHRyVGVzdAogICAgICBzaGlmdCgxMik7ICAgICAgICAgICAgICAgICAgICAvLyBBdHRyVGVzdAogICAgICBicmVhazsKICAgIGNhc2UgMTM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQKICAgICAgc2hpZnQoMTMpOyAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIHNoaWZ0KDE1KTsgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBzaGlmdCgxNik7ICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBicmVhazsKICAgIGNhc2UgMTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbAogICAgICBzaGlmdCgxNyk7ICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSA1OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYXJpYWJsZQogICAgICBzaGlmdCg1KTsgICAgICAgICAgICAgICAgICAgICAvLyBWYXJpYWJsZQogICAgICBicmVhazsKICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFnCiAgICAgIHNoaWZ0KDYpOyAgICAgICAgICAgICAgICAgICAgIC8vIFRhZwogICAgICBicmVhazsKICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmF0b3IKICAgICAgc2hpZnQoNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gT3BlcmF0b3IKICAgICAgYnJlYWs7CiAgICBjYXNlIDMzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9FUU5hbWUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgic3RhcnQiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9TdGFydFRhZyA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3RhcnRUYWciLCBlMCk7CiAgICBsb29rYWhlYWQxVyg4KTsgICAgICAgICAgICAgICAgIC8vIFFOYW1lIHwgU15XUyB8IEVPRiB8ICciJyB8ICInIiB8ICcvPicgfCAnPScgfCAnPicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBzaGlmdCg1OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgYnJlYWs7CiAgICBjYXNlIDUwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgc2hpZnQoNTApOyAgICAgICAgICAgICAgICAgICAgLy8gJy8+JwogICAgICBicmVhazsKICAgIGNhc2UgMjc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgc2hpZnQoMjcpOyAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgYnJlYWs7CiAgICBjYXNlIDU3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBzaGlmdCg1Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBjYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RhcnRUYWciLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9UYWdDb250ZW50ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUYWdDb250ZW50IiwgZTApOwogICAgbG9va2FoZWFkMSgxMSk7ICAgICAgICAgICAgICAgICAvLyBUYWcgfCBFbmRUYWcgfCBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRWxlbWVudENvbnRlbnRDaGFyIHwgQ2hhclJlZiB8IEVPRiB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50Q29udGVudENoYXIKICAgICAgc2hpZnQoMjMpOyAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUYWcKICAgICAgc2hpZnQoNik7ICAgICAgICAgICAgICAgICAgICAgLy8gVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFbmRUYWcKICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gRW5kVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBzaGlmdCg1NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPCFbQ0RBVEFbJwogICAgICBicmVhazsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIHNoaWZ0KDU0KTsgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBicmVhazsKICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDI5KTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjcyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRhZ0NvbnRlbnQiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9BcG9zQXR0ciA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXBvc0F0dHIiLCBlMCk7CiAgICBsb29rYWhlYWQxKDEwKTsgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYgfCBFc2NhcGVBcG9zIHwgQXBvc0F0dHJDb250ZW50Q2hhciB8IENoYXJSZWYgfCBFT0YgfCAiJyIgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICBzaGlmdCgyMCk7ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTogICAgICAgICAgICAgICAgICAgICAgICAvLyBBcG9zQXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0KDI1KTsgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgc2hpZnQoMTgpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBzaGlmdCgyOSk7ICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3snCiAgICAgIHNoaWZ0KDI3Mik7ICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd9fScKICAgICAgc2hpZnQoMjc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBicmVhazsKICAgIGNhc2UgMjcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3MSk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBicmVhazsKICAgIGNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIiciCiAgICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcG9zQXR0ciIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1F1b3RBdHRyID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJRdW90QXR0ciIsIGUwKTsKICAgIGxvb2thaGVhZDEoOSk7ICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZVF1b3QgfCBRdW90QXR0ckNvbnRlbnRDaGFyIHwgQ2hhclJlZiB8IEVPRiB8ICciJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgIHNoaWZ0KDE5KTsgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnQoMjQpOyAgICAgICAgICAgICAgICAgICAgLy8gUXVvdEF0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDI5KTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjcyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1b3RBdHRyIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfQ0RhdGEgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNEYXRhIiwgZTApOwogICAgbG9va2FoZWFkMSgxKTsgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb25Db250ZW50cyB8IEVPRiB8ICddXT4nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb25Db250ZW50cwogICAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb25Db250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ11dPicKICAgICAgc2hpZnQoNjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ11dPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ0RhdGEiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9YTUxDb21tZW50ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJYTUxDb21tZW50IiwgZTApOwogICAgbG9va2FoZWFkMSgwKTsgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMgfCBFT0YgfCAnLS0+JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgOTogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzCiAgICAgIHNoaWZ0KDkpOyAgICAgICAgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICAgICAgc2hpZnQoNDcpOyAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiWE1MQ29tbWVudCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1BJID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQSSIsIGUwKTsKICAgIGxvb2thaGVhZDEoMyk7ICAgICAgICAgICAgICAgICAgLy8gRGlyUElDb250ZW50cyB8IEVPRiB8ICc/JyB8ICc/PicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgICAgc2hpZnQoMTApOyAgICAgICAgICAgICAgICAgICAgLy8gRGlyUElDb250ZW50cwogICAgICBicmVhazsKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIHNoaWZ0KDU5KTsgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBicmVhazsKICAgIGNhc2UgNjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgICBzaGlmdCg2MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBJIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUHJhZ21hID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmFnbWEiLCBlMCk7CiAgICBsb29rYWhlYWQxKDIpOyAgICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzIHwgRU9GIHwgJyMnIHwgJyMpJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMKICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMKICAgICAgYnJlYWs7CiAgICBjYXNlIDM2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcjJwogICAgICBzaGlmdCgzNik7ICAgICAgICAgICAgICAgICAgICAvLyAnIycKICAgICAgYnJlYWs7CiAgICBjYXNlIDM3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcjKScKICAgICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJyMpJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmFnbWEiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9Db21tZW50ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21tZW50IiwgZTApOwogICAgbG9va2FoZWFkMSg0KTsgICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMgfCBFT0YgfCAnKDonIHwgJzopJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzopJwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDMwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRDb250ZW50cwogICAgICBzaGlmdCgzMCk7ICAgICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tbWVudCIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX0NvbW1lbnREb2MgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbW1lbnREb2MiLCBlMCk7CiAgICBsb29rYWhlYWQxKDUpOyAgICAgICAgICAgICAgICAgIC8vIERvY1RhZyB8IERvY0NvbW1lbnRDb250ZW50cyB8IEVPRiB8ICcoOicgfCAnOiknCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2NUYWcKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gRG9jVGFnCiAgICAgIGJyZWFrOwogICAgY2FzZSAzMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb2NDb21tZW50Q29udGVudHMKICAgICAgc2hpZnQoMzIpOyAgICAgICAgICAgICAgICAgICAgLy8gRG9jQ29tbWVudENvbnRlbnRzCiAgICAgIGJyZWFrOwogICAgY2FzZSA1MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICAgICAgYnJlYWs7CiAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoOicKICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyg6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21tZW50RG9jIiwgZTApOwogIH07CgogIHRoaXMucGFyc2VfUXVvdFN0cmluZyA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUXVvdFN0cmluZyIsIGUwKTsKICAgIGxvb2thaGVhZDEoNik7ICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZVF1b3QgfCBRdW90Q2hhciB8IENoYXJSZWYgfCBFT0YgfCAnIicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYKICAgICAgc2hpZnQoMTgpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBicmVhazsKICAgIGNhc2UgMjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhclJlZgogICAgICBzaGlmdCgyOSk7ICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgIHNoaWZ0KDE5KTsgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RDaGFyCiAgICAgIHNoaWZ0KDIxKTsgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RDaGFyCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzMpOyAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1b3RTdHJpbmciLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9BcG9zU3RyaW5nID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcG9zU3RyaW5nIiwgZTApOwogICAgbG9va2FoZWFkMSg3KTsgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlQXBvcyB8IEFwb3NDaGFyIHwgQ2hhclJlZiB8IEVPRiB8ICInIgogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDI5KTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgc2hpZnQoMjApOyAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICBicmVhazsKICAgIGNhc2UgMjI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0NoYXIKICAgICAgc2hpZnQoMjIpOyAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0NoYXIKICAgICAgYnJlYWs7CiAgICBjYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXBvc1N0cmluZyIsIGUwKTsKICB9OwoKICB0aGlzLnBhcnNlX1ByZWZpeCA9IGZ1bmN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJlZml4IiwgZTApOwogICAgbG9va2FoZWFkMVcoMTMpOyAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05DTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmVmaXgiLCBlMCk7CiAgfTsKCiAgdGhpcy5wYXJzZV9fRVFOYW1lID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJfRVFOYW1lIiwgZTApOwogICAgbG9va2FoZWFkMVcoMTIpOyAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJfRVFOYW1lIiwgZTApOwogIH07CgogIGZ1bmN0aW9uIHBhcnNlX0VRTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkVRTmFtZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDc3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgc2hpZnQoOTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgc2hpZnQoMTE1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgc2hpZnQoMTE2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHNoaWZ0KDExOSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnQoMTQwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdCgxNDcpOyAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgc2hpZnQoMTYwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHNoaWZ0KDE4MCk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdCgxODYpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBzaGlmdCgyMTEpOyAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdCgyMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnQoMjIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnQoMjM4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdCgyMzkpOyAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBzaGlmdCgyNDgpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9GdW5jdGlvbk5hbWUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRVFOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25OYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25OYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIHNoaWZ0KDE0KTsgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBicmVhazsKICAgIGNhc2UgNjU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdCg2NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDY4KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDY5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdCg2OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDcwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0KDcwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0KDc0KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDc1KTsgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0KDg0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdCg4NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDg4KTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDg5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgc2hpZnQoOTgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdCgxMDMpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0KDEwNSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnQoMTA2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgc2hpZnQoMTEzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgc2hpZnQoMTE0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0KDExNyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdCgxMTgpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdCgxMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdCgxMjMpOyAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIHNoaWZ0KDEyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzMCk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIHNoaWZ0KDEzMik7ICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIHNoaWZ0KDE0MSk7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgc2hpZnQoMTQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBzaGlmdCgxNDUpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgc2hpZnQoMTQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNDgpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnQoMTU1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnQoMTU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdCgxNTgpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIHNoaWZ0KDE2NSk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdCgxNjcpOyAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdCgxNjkpOyAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxNzMpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdCgxNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnQoMTc2KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE3Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMTkzKTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDE5NSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMTk2KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0KDE5Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnQoMjAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIwNyk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0KDIxMyk7ICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnQoMjE0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBzaGlmdCgyMTUpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBicmVhazsKICAgIGNhc2UgMjE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgc2hpZnQoMjE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyMzApOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIHNoaWZ0KDIzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIHNoaWZ0KDIzMik7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgc2hpZnQoMjQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBzaGlmdCgyNDQpOyAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdCgyNDUpOyAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNTEpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNTUpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI2MSk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0KDI2OSk7ICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA2NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDY3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg3OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg4Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDk2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCg5Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCg5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDEpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTI4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTM2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTApOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNTYpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMTk4KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDIzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI0Nik7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNDcpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI1Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBzaGlmdCgyNTgpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgc2hpZnQoMjYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIHNoaWZ0KDE3MSk7ICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZ1bmN0aW9uTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX05DTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5DTmFtZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgICBzaGlmdCgyNik7ICAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgYnJlYWs7CiAgICBjYXNlIDY1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnQoNjUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnQoNzApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnQoNzQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnQoNzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnQoODMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnQoODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0KDg1KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDg5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIHNoaWZ0KDExMyk7ICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnQoMTE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0KDExOCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0KDEyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBzaGlmdCgxMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBzaGlmdCgxNDEpOyAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHNoaWZ0KDE0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnQoMTQ1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIHNoaWZ0KDE0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdCgxNTUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdCgxNTcpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0KDE1OCk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdCgxNTkpOyAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0KDE2Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0KDE2OSk7ICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0KDE3Myk7ICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0KDE3NSk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMTkzKTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDE5NSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMTk2KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjE1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgc2hpZnQoMjE1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIHNoaWZ0KDIxOSk7ICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBzaGlmdCgyMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBzaGlmdCgyMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIHNoaWZ0KDI0Myk7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgc2hpZnQoMjQ0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI2MSk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnQoNjgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0KDY5KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgNzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnQoNzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnQoODgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0KDkxKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgOTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIHNoaWZ0KDk4KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0KDEwMyk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnQoMTA1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0KDEwNyk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIHNoaWZ0KDExNCk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBzaGlmdCgxMTUpOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdCgxMTYpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzMCk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnQoMTQwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdCgxNDcpOyAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNDgpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBzaGlmdCgxNjApOyAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBzaGlmdCgxNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE3Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTgwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdCgxODApOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTg2KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnQoMTk3KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdCgyMDEpOyAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnQoMjA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnQoMjA4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0KDIxMSk7ICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnQoMjEzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdCgyMTQpOyAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdCgyMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnQoMjIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0KDIzMCk7ICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnQoMjM4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdCgyMzkpOyAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0KDI0NSk7ICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnQoMjQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNTEpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNTUpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI1Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0KDI2OSk7ICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA2NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDY3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg3OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg4Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDk2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCg5Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCg5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDEpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTI4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTM2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTApOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNTYpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMTk4KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDIzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI0Nik7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNDcpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgc2hpZnQoMjU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIHNoaWZ0KDI2Mik7ICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBzaGlmdCg5Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBzaGlmdCgxNzEpOyAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyMTYpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOQ05hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBzaGlmdCh0KQogIHsKICAgIGlmIChsMSA9PSB0KQogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIGV2ZW50SGFuZGxlci50ZXJtaW5hbChYUXVlcnlUb2tlbml6ZXIuVE9LRU5bbDFdLCBiMSwgZTEgPiBzaXplID8gc2l6ZSA6IGUxKTsKICAgICAgYjAgPSBiMTsgZTAgPSBlMTsgbDEgPSAwOwogICAgfQogICAgZWxzZQogICAgewogICAgICBlcnJvcihiMSwgZTEsIDAsIGwxLCB0KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHdoaXRlc3BhY2UoKQogIHsKICAgIGlmIChlMCAhPSBiMSkKICAgIHsKICAgICAgYjAgPSBlMDsKICAgICAgZTAgPSBiMTsKICAgICAgZXZlbnRIYW5kbGVyLndoaXRlc3BhY2UoYjAsIGUwKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIG1hdGNoVyhzZXQpCiAgewogICAgdmFyIGNvZGU7CiAgICBmb3IgKDs7KQogICAgewogICAgICBjb2RlID0gbWF0Y2goc2V0KTsKICAgICAgaWYgKGNvZGUgIT0gMjgpICAgICAgICAgICAgICAgLy8gU15XUwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb2RlOwogIH0KCiAgZnVuY3Rpb24gbG9va2FoZWFkMVcoc2V0KQogIHsKICAgIGlmIChsMSA9PSAwKQogICAgewogICAgICBsMSA9IG1hdGNoVyhzZXQpOwogICAgICBiMSA9IGJlZ2luOwogICAgICBlMSA9IGVuZDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGxvb2thaGVhZDEoc2V0KQogIHsKICAgIGlmIChsMSA9PSAwKQogICAgewogICAgICBsMSA9IG1hdGNoKHNldCk7CiAgICAgIGIxID0gYmVnaW47CiAgICAgIGUxID0gZW5kOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZXJyb3IoYiwgZSwgcywgbCwgdCkKICB7CiAgICB0aHJvdyBuZXcgc2VsZi5QYXJzZUV4Y2VwdGlvbihiLCBlLCBzLCBsLCB0KTsKICB9CgogIHZhciBsaywgYjAsIGUwOwogIHZhciBsMSwgYjEsIGUxOwogIHZhciBldmVudEhhbmRsZXI7CgogIHZhciBpbnB1dDsKICB2YXIgc2l6ZTsKICB2YXIgYmVnaW47CiAgdmFyIGVuZDsKCiAgZnVuY3Rpb24gbWF0Y2godG9rZW5TZXRJZCkKICB7CiAgICB2YXIgbm9uYm1wID0gZmFsc2U7CiAgICBiZWdpbiA9IGVuZDsKICAgIHZhciBjdXJyZW50ID0gZW5kOwogICAgdmFyIHJlc3VsdCA9IFhRdWVyeVRva2VuaXplci5JTklUSUFMW3Rva2VuU2V0SWRdOwogICAgdmFyIHN0YXRlID0gMDsKCiAgICBmb3IgKHZhciBjb2RlID0gcmVzdWx0ICYgNDA5NTsgY29kZSAhPSAwOyApCiAgICB7CiAgICAgIHZhciBjaGFyY2xhc3M7CiAgICAgIHZhciBjMCA9IGN1cnJlbnQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChjdXJyZW50KSA6IDA7CiAgICAgICsrY3VycmVudDsKICAgICAgaWYgKGMwIDwgMHg4MCkKICAgICAgewogICAgICAgIGNoYXJjbGFzcyA9IFhRdWVyeVRva2VuaXplci5NQVAwW2MwXTsKICAgICAgfQogICAgICBlbHNlIGlmIChjMCA8IDB4ZDgwMCkKICAgICAgewogICAgICAgIHZhciBjMSA9IGMwID4+IDQ7CiAgICAgICAgY2hhcmNsYXNzID0gWFF1ZXJ5VG9rZW5pemVyLk1BUDFbKGMwICYgMTUpICsgWFF1ZXJ5VG9rZW5pemVyLk1BUDFbKGMxICYgMzEpICsgWFF1ZXJ5VG9rZW5pemVyLk1BUDFbYzEgPj4gNV1dXTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBpZiAoYzAgPCAweGRjMDApCiAgICAgICAgewogICAgICAgICAgdmFyIGMxID0gY3VycmVudCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGN1cnJlbnQpIDogMDsKICAgICAgICAgIGlmIChjMSA+PSAweGRjMDAgJiYgYzEgPCAweGUwMDApCiAgICAgICAgICB7CiAgICAgICAgICAgICsrY3VycmVudDsKICAgICAgICAgICAgYzAgPSAoKGMwICYgMHgzZmYpIDw8IDEwKSArIChjMSAmIDB4M2ZmKSArIDB4MTAwMDA7CiAgICAgICAgICAgIG5vbmJtcCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBsbyA9IDAsIGhpID0gNTsKICAgICAgICBmb3IgKHZhciBtID0gMzsgOyBtID0gKGhpICsgbG8pID4+IDEpCiAgICAgICAgewogICAgICAgICAgaWYgKFhRdWVyeVRva2VuaXplci5NQVAyW21dID4gYzApIGhpID0gbSAtIDE7CiAgICAgICAgICBlbHNlIGlmIChYUXVlcnlUb2tlbml6ZXIuTUFQMls2ICsgbV0gPCBjMCkgbG8gPSBtICsgMTsKICAgICAgICAgIGVsc2Uge2NoYXJjbGFzcyA9IFhRdWVyeVRva2VuaXplci5NQVAyWzEyICsgbV07IGJyZWFrO30KICAgICAgICAgIGlmIChsbyA+IGhpKSB7Y2hhcmNsYXNzID0gMDsgYnJlYWs7fQogICAgICAgIH0KICAgICAgfQoKICAgICAgc3RhdGUgPSBjb2RlOwogICAgICB2YXIgaTAgPSAoY2hhcmNsYXNzIDw8IDEyKSArIGNvZGUgLSAxOwogICAgICBjb2RlID0gWFF1ZXJ5VG9rZW5pemVyLlRSQU5TSVRJT05bKGkwICYgMTUpICsgWFF1ZXJ5VG9rZW5pemVyLlRSQU5TSVRJT05baTAgPj4gNF1dOwoKICAgICAgaWYgKGNvZGUgPiA0MDk1KQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gY29kZTsKICAgICAgICBjb2RlICY9IDQwOTU7CiAgICAgICAgZW5kID0gY3VycmVudDsKICAgICAgfQogICAgfQoKICAgIHJlc3VsdCA+Pj0gMTI7CiAgICBpZiAocmVzdWx0ID09IDApCiAgICB7CiAgICAgIGVuZCA9IGN1cnJlbnQgLSAxOwogICAgICB2YXIgYzEgPSBlbmQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChlbmQpIDogMDsKICAgICAgaWYgKGMxID49IDB4ZGMwMCAmJiBjMSA8IDB4ZTAwMCkgLS1lbmQ7CiAgICAgIHJldHVybiBlcnJvcihiZWdpbiwgZW5kLCBzdGF0ZSwgLTEsIC0xKTsKICAgIH0KCiAgICBpZiAobm9uYm1wKQogICAgewogICAgICBmb3IgKHZhciBpID0gcmVzdWx0ID4+IDk7IGkgPiAwOyAtLWkpCiAgICAgIHsKICAgICAgICAtLWVuZDsKICAgICAgICB2YXIgYzEgPSBlbmQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChlbmQpIDogMDsKICAgICAgICBpZiAoYzEgPj0gMHhkYzAwICYmIGMxIDwgMHhlMDAwKSAtLWVuZDsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBlbmQgLT0gcmVzdWx0ID4+IDk7CiAgICB9CgogICAgcmV0dXJuIChyZXN1bHQgJiA1MTEpIC0gMTsKICB9Cn0KClhRdWVyeVRva2VuaXplci5nZXRUb2tlblNldCA9IGZ1bmN0aW9uKHRva2VuU2V0SWQpCnsKICB2YXIgc2V0ID0gW107CiAgdmFyIHMgPSB0b2tlblNldElkIDwgMCA/IC0gdG9rZW5TZXRJZCA6IElOSVRJQUxbdG9rZW5TZXRJZF0gJiA0MDk1OwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjc2OyBpICs9IDMyKQogIHsKICAgIHZhciBqID0gaTsKICAgIHZhciBpMCA9IChpID4+IDUpICogMjA2MiArIHMgLSAxOwogICAgdmFyIGkxID0gaTAgPj4gMjsKICAgIHZhciBpMiA9IGkxID4+IDI7CiAgICB2YXIgZiA9IFhRdWVyeVRva2VuaXplci5FWFBFQ1RFRFsoaTAgJiAzKSArIFhRdWVyeVRva2VuaXplci5FWFBFQ1RFRFsoaTEgJiAzKSArIFhRdWVyeVRva2VuaXplci5FWFBFQ1RFRFsoaTIgJiAzKSArIFhRdWVyeVRva2VuaXplci5FWFBFQ1RFRFtpMiA+PiAyXV1dXTsKICAgIGZvciAoIDsgZiAhPSAwOyBmID4+Pj0gMSwgKytqKQogICAgewogICAgICBpZiAoKGYgJiAxKSAhPSAwKQogICAgICB7CiAgICAgICAgc2V0LnB1c2goWFF1ZXJ5VG9rZW5pemVyLlRPS0VOW2pdKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gc2V0Owp9OwoKWFF1ZXJ5VG9rZW5pemVyLk1BUDAgPQpbIDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAyNywgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMzLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzNCwgMzUsIDM2LCAzNSwgMzEsIDM1LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCAzMSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgMzEsIDYxLCA2MiwgNjMsIDY0LCAzNQpdOwoKWFF1ZXJ5VG9rZW5pemVyLk1BUDEgPQpbIDEwOCwgMTI0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMTU2LCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMjE0LCAyMTUsIDIxMywgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDI0NywgMjYxLCAyNzcsIDI5MywgMzA5LCAzNDcsIDM2MywgMzc5LCA0MTYsIDQxNiwgNDE2LCA0MDgsIDMzMSwgMzIzLCAzMzEsIDMyMywgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCA0MzMsIDQzMywgNDMzLCA0MzMsIDQzMywgNDMzLCA0MzMsIDMxNiwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDM5NCwgNDE2LCA0MTYsIDQxNywgNDE1LCA0MTYsIDQxNiwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDQxNiwgNDE2LCA0MTYsIDMzMCwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDMzMSwgMzMxLCAzMzEsIDQxNiwgNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDI3LCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDM1LCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMyLCAzMSwgMzEsIDMzLCAzMSwgMzEsIDMxLCAzMSwgMzEsIDMxLCAzNCwgMzUsIDM2LCAzNSwgMzEsIDM1LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCAzMSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgMzEsIDYxLCA2MiwgNjMsIDY0LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzMSwgMzEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA2NSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NSwgNjUsIDY1LCA2NQpdOwoKWFF1ZXJ5VG9rZW5pemVyLk1BUDIgPQpbIDU3MzQ0LCA2Mzc0NCwgNjQ5NzYsIDY1MDA4LCA2NTUzNiwgOTgzMDQwLCA2Mzc0MywgNjQ5NzUsIDY1MDA3LCA2NTUzMywgOTgzMDM5LCAxMTE0MTExLCAzNSwgMzEsIDM1LCAzMSwgMzEsIDM1Cl07CgpYUXVlcnlUb2tlbml6ZXIuSU5JVElBTCA9ClsgMSwgMiwgMzY4NjcsIDQ1MDYwLCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1Cl07CgpYUXVlcnlUb2tlbml6ZXIuVFJBTlNJVElPTiA9ClsgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyOTA4LCAxODgzNiwgMTcxNTIsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxNzM2NSwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAxNzQ3MCwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDE4MTU3LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE3ODQ4LCAxNzg4MCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4MDIzLCAzNjU0NSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTgxNzMsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3Njg3LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODEwMSwgMTczOTMsIDE4NDg5LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxODU3OSwgMjE3MTEsIDE3MTUyLCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMjg2ODQsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTczNjUsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMTc0NzAsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAxODE1NywgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxNzg0OCwgMTc4ODAsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODAyMywgMzY1NDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4MTczLCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY4NywgMTg4MDUsIDE4NDIxLCAxODQzNywgMTgxMDEsIDE3MzkzLCAxODQ4OSwgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjAxMTYsIDE4ODM2LCAxODYzNywgMTkwMDgsIDE5MjMzLCAyMTI2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE4NzYzLCAxODc3OCwgMTg3OTQsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxODgyMSwgMjI5MjMsIDE4OTA2LCAxOTAwOCwgMTkyMzMsIDE3NDMxLCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg5MzcsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMTkwNTQsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxODk1MywgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE4NDMsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNjk2LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjQyOSwgMjAxMzEsIDE4NzIwLCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDIzNTU5LCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE4MDg3LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAyMTI0MiwgMTkxMTEsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTkwMjQsIDE4ODM2LCAxODYwOSwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE5MDgxLCAyMjQ0NCwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxOTA2NSwgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTk5MiwgMjIwMDcsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTg2OTAsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI0MTQsIDE4ODM2LCAxODk4NywgMTkwMDgsIDE5MjMzLCAzMDY1MSwgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxOTEzOCwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDE5MjgwLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTkxNzIsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNzgzLCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTkyMTgsIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTY1MSwgMTg4MzYsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTkyNDksIDE5MjY1LCAxOTMwNywgMTg4ODgsIDI3ODU3LCAzMDUzNiwgMjQ0MDEsIDMxNDQ0LCAyMzM1NywgMTg4ODgsIDE5MzUxLCAxODg4OCwgMTg4OTAsIDI3MjExLCAxOTM3MCwgMjcyMTEsIDI3MjExLCAxOTM5MiwgMjQ0MDEsIDMxOTExLCAyNDQwMSwgMjQ0MDEsIDI1NDY3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjg1MzcsIDE5NDQwLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDE3OTk0LCAyNDA2MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDE5NDY4LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDM1MzY3LCAxOTUyMCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAyOTg1NSwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDE5NTM4LCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDE5NTYwLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE5MzI3LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAxOTU4MCwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDE5NjAwLCAyNTY2NSwgMTg4ODgsIDE4ODg4LCAyODUxOCwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMTk2MjAsIDE5ODY4LCAyODQzNSwgMjU3MjIsIDE4ODg5LCAxOTY0NCwgMjcyMTEsIDMyODg4LCAzNTg1MiwgMTk4NjgsIDMxMDE4LCAxOTY5NCwgMTkzNzYsIDE5NzE3LCAyMjIxNSwgMTk3MzUsIDIyMDk4LCAxOTc1MSwgMzUyMDMsIDE5Nzc2LCAxOTc5NywgMTk4MTcsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDI0MTM1LCAxOTcwMSwgMTk4NTYsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDI4MzExLCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNzY4LCAxODgzNiwgMTkzMDcsIDE4ODg4LCAyNzg1NywgMjc5MDQsIDI0NDAxLCAyOTE4MywgMjgwMTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk4ODgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMjk1MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI4NTM3LCAxOTQ0MCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAxODg4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjM5OSwgMTg4MzYsIDE5OTE4LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE2NjYsIDE4ODM2LCAxOTMwNywgMTg4ODgsIDI3ODU3LCAyNzUyNSwgMjQ0MDEsIDI5MTgzLCAyMTQ2NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTk0NiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMyMzgyLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjg1MzcsIDE5OTk4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzE1MDAsIDE4NDY3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjAwMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzQyNzEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMyOTI2LCAyOTkwOCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2MDk1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjAwNTAsIDIyOTY4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDM1Nzc5LCAyMDA4MCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIwMTAxLCAxOTAzOSwgMjAxOTEsIDIwNDEyLCAyMDkwMywgMTc1NjksIDIwMzA5LCAyMDg3MiwgMjU2MzMsIDIwNjIzLCAyMDUwNSwgMjAyMTgsIDIwMjQyLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMjAyNjUsIDIwMzA2LCAyMDMyOCwgMjAzODMsIDIyNDkwLCAyMDc5NiwgMjA2MTksIDIxMzU0LCAyMDY1NCwgMjA0MTAsIDIwOTU2LCAyMTIzMiwgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMjQ1OSwgMjAzMTIsIDI1NTMxLCAyMjQ3MCwgMjAzMDksIDIwNDI4LCAxODk2NCwgMjA0NjYsIDIwNDkxLCAyMTM0MiwgMjEwNzAsIDIwNTIxLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMjQ5NywgMjA1NTksIDE5NTA0LCAyMDI3OSwgMjA1NzUsIDIwMjkwLCAyMDQ3NSwgMjA2MDQsIDIwNjM5LCAyMDIyNiwgMjA2NzAsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMTk0OTQsIDIwNjk4LCAyMDcxMSwgMjI0ODAsIDIxMDQ2LCAyMTExNiwgMTg5NzEsIDIxMTMwLCAyMDcyNywgMjA3NTUsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyNTUxOCwgMjAzOTQsIDIwNzgxLCAyMDgzMSwgMjAyMDIsIDIwODQ3LCAyMTQwMSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg1NDksIDIwODYzLCAyMDU4OCwgMjU1NDIsIDIwODg4LCAyMDkxOSwgMTgwNzIsIDE4MTE3LCAyMDkzNSwgMjA5NzIsIDIxMDMyLCAyMTA2MiwgMjEwODYsIDE4MjM5LCAyMTEwMiwgMTg1NjMsIDIxMTQ2LCAyMTE2MiwgMjEyMDYsIDE4MzUxLCAyMDk0OSwgMjA5MDIsIDE4MzQwLCAyMTIyMiwgMjEyNTgsIDIxMjgzLCAxODM2MCwgMjAyNDksIDE3NDA1LCAyMTI5NSwgMjEzMTEsIDIxMzI3LCAyMDczOSwgMjAzNDMsIDIxMzcwLCAyMTM4NiwgMjE0MTcsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTk3NywgMTg4MzYsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMjE0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAyMTUwNCwgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAzNjUwMSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDI4Njc0LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMTcyMzcsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAyMTU3NSwgMjE1MzQsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMjE1NjAsIDMwNjI4LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE3OTgsIDE4ODM2LCAyMTYxMiwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNjM2LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMTc5MDIsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTc1MywgMTkwOTYsIDIxOTAzLCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTkyOTEsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTczNzksIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMjE5MzEsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAxODI4MCwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE5NjIsIDE4NTk0LCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMjA0MywgMTkwMDgsIDE3MTczLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxNjgxLCAyMTg1OCwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAyMTU0NCwgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDM0MDk3LCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTUwMCwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMjMxOSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDIxNDMxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjYwOTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIyMjMxLCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTg4ODgsIDI3ODU3LCAzNDA5NywgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMwNjEzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzE1MDAsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzExODEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyMTQzMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2MDk1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxODcsIDIyOTY4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDM1Nzc5LCAyMDA4MCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTY3OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMxNTAwLCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMxMTgxLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjE0MzEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjA5NSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTg3LCAyMjk2OCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAzNTc3OSwgMjAwODAsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDM0MDk3LCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMzU4OCwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTE4MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDIxNDMxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjYwOTUsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTg4ODgsIDI3ODU3LCAzNTAxOSwgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjI0OCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMwNjEzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzE1MDAsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzExODEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyMTQzMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2MDk1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxODcsIDIyOTY4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDM1Nzc5LCAyMDA4MCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg2NiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMyNCwgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDMwNTAxLCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4NjYsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDAzNiwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTg4ODgsIDI3ODU3LCAzNDA5NywgMjQ0MDEsIDI5MTgzLCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODY2LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDM0MzY1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzU0LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMjcwODYsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMTc5NDksIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTk5MzAsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTgyOCwgMTg4MzYsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMTcxNzMsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMDksIDIyNTEzLCAxODk4NywgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE5MTIyLCAzMDc2MywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzk0OSwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDIyNTQ0LCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMTgxMjcsIDIxODczLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNjA4LCAxODgzNiwgMjI5ODgsIDIzMDA0LCAyNzU4NSwgMjMwMjAsIDIzMDM2LCAyMzA2NywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMzEwMiwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDIzMTIyLCAzMTM4NiwgMjYxNTQsIDE5Njc0LCAxODg4OCwgMjgxMTksIDI4MjMyLCAxOTQyNCwgMjM3MDUsIDI3MjExLCAyNzIxMSwgMjMxNDIsIDIzMTczLCAyMzE4OSwgMjMyMTIsIDI0NDAxLCAyNDQwMSwgMjMyNDYsIDM0NDI3LCAzMTY5MywgMjMyNjIsIDE4ODg4LCAyMzI5MCwgMjMzMDgsIDI3NzgzLCAyNzYyMCwgMjMzMjcsIDM1MjYzLCAzNTEwNywgMzMzODMsIDIzMzQ2LCAxODE5MywgMjMzOTMsIDMyNzQ4LCAyMzk2OCwgMjQ0MDEsIDIzNDE0LCAzNTE1MywgMjM0NjMsIDE4ODg4LCAzMzkxMywgMjM0NDIsIDIzNDgyLCAyNzIxMSwgMjcyMTEsIDIzNTMyLCAyMzU1MiwgMjE0MzEsIDIzNTc1LCAyNDQwMSwgMjQ0MDEsIDIzNjA0LCAyNjA5NSwgMjM2MzUsIDIzNjU3LCAxODg4OCwgMzM0ODIsIDIzNjg1LCAzMzI1MSwgMjcyMTEsIDIyMTg3LCAxODg1MSwgMjM3MjEsIDM1NTM2LCAyNDQwMSwgMTg4ODcsIDIzNzUwLCAzMjY0MSwgMjcyMTEsIDIzNzY5LCAyMzc4NywgMjAwODAsIDMzMDEyLCAyNDM4NCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDIzODAzLCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAyODIyNCwgMzE4MjYsIDIzODIzLCAyNjkxNywgMzQ5NzgsIDIzODUwLCAyNjQ5MywgMjU3ODIsIDIzODc4LCAyMzkxNCwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjk3ODEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjYyMywgMTg4MzYsIDIyMDU5LCAxODg4OCwgMjc4NTcsIDM0MDk3LCAyNDQwMSwgMjkxODMsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA2MTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyODkwOSwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM0MDQ4LCAyMzkzMywgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI4NDA5LCAyMzk0OSwgMzE2OTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzMTE4MSwgMjY1ODMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDM1NTg1LCAyMzk4NCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjQwMDUsIDIyMjAxLCAyNDAzMywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQwNTIsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMzU3NzksIDIwMDgwLCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMjY0OTYsIDI0MDc2LCAyNDEyNiwgMjQxNTEsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI2MzgsIDE4ODM2LCAyMjA1OSwgMTk2NzgsIDI3ODU3LCAyNDE4NSwgMjQ0MDEsIDI0MjAxLCAyNDIxNywgMjY1OTIsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI0MjUyLCAyNDI2OCwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjQyODcsIDI0MzAzLCAyNDQwMSwgMjQ0MDEsIDMwNjEzLCAxOTc4MSwgMzU0MzIsIDM2MDA3LCAzMjY0OSwgMTg4ODgsIDI1NzgzLCAyNDMyMiwgMjg5NjYsIDIzNzcxLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDM1OCwgMzIxMDYsIDI2ODI5LCAyNDQwMCwgMzE1MDAsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNDgwMSwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNDQxOCwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMDE2NywgMzExODEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODMzLCAyMzA4NiwgMjcyMTEsIDI3MjExLCAzMzU0MCwgMjcyMTEsIDMwNzU2LCAyMTQzMSwgMjQ0MDEsIDI0NDAxLCAyMjk3MiwgMjQ0MDEsIDI2MDk1LCAxODg4OCwgMzYxMzEsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI0NDQwLCAyNzIxMSwgMjIxODcsIDIyOTY4LCAyNDQwMSwgMjQ0NTksIDI0NDAxLCAzMTY5OSwgMjg0NTQsIDE4ODg4LCAzNDUyOCwgMzQ1NzAsIDM1Nzc5LCAyNDQ3OCwgMjQ0MDIsIDI0NDk0LCAyNTY1OSwgMTg4ODgsIDM2MjI4LCAyNzIxMSwgMjcyMTEsIDI0NTE1LCAzMDk4MSwgMjM3MzQsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMjQ1MzgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDMwMDU5LCAyMzM3NywgMjQ1NjMsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMjUzNzQsIDIyMTA1LCAxOTQxOSwgMjk3OTMsIDI0NTc5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNjUzLCAxODgzNiwgMjIwNTksIDI1NzU2LCAxOTk4MiwgMzQwOTcsIDIzMTk2LCAyOTE4MywgMjQ2MTQsIDI0MTEwLCAyMzY0MSwgMjQ2NzMsIDI2MTAzLCAyNDY5NywgMjQ0NDMsIDI0NzEzLCAyODU1OCwgMjIxMjEsIDI0NzQ4LCAyNDQ2MiwgMjQ3NjQsIDIzMzk4LCAzMDYxMywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI0Nzk4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzQyMzIsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzMzMDIsIDMxNTAwLCAyMjU1OSwgMjQxMDYsIDI0MjMyLCAxODg4OCwgMTg4ODgsIDM0OTcwLCAyNDgxNywgMzA0MTEsIDI3MjExLCAyNzIxMSwgMzI0ODQsIDE5NDg0LCAyOTc1MCwgMzUxMjcsIDI0NDAxLCAyNDQwMSwgMTk4NzIsIDMxMTgxLCAyNDg1MiwgMTg4ODgsIDE4ODg4LCAyNDg3MSwgMjkyMjEsIDI3MjExLCAyNzIxMSwgMzIwNzIsIDI3MjExLCAzMDc1NiwgMzQ0NDEsIDI0NDAxLCAyNDQwMSwgMzE1NzEsIDI0NDAxLCAyNjA5NSwgMzMxNDEsIDI3ODAyLCAyNzAxMSwgMjc4NTUsIDI1Mjk1LCAyNTYwNywgMjQ4ODgsIDIyMTg3LCAyMjk2OCwgMTkxOTUsIDM0NTkzLCAyNDkwNiwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAzNTc3OSwgMjAwODAsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAzMzY2MywgMjcyMTEsIDI3MjExLCAyNDkyNCwgMjQ5NDcsIDIzNTg4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMjIxMzUsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMDkwNCwgMzEwNDIsIDI0OTcyLCAxOTg0MCwgMjUwMDAsIDMxNzM4LCAzMDg5OCwgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI1MDE2LCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjY2OCwgMTg4MzYsIDI1MDQxLCAyNTA1NywgMzEzMjAsIDI1MDczLCAyNTA4OSwgMjUxMDUsIDIyMDg3LCAzNDc5NiwgMjQyMzYsIDM2MTM4LCAzNDg3MCwgMzQxMjUsIDI1MTIxLCAyMzEwNiwgMzU0OTcsIDIyMjQ4LCAzNjYxMywgMjUxMzcsIDMwNjcxLCAyNzM2NSwgMzA2MTMsIDI1MTUzLCAyNjQ0NywgMjUxOTksIDI1MjMzLCAyMjU3NCwgMjMyNzQsIDI1MjQ5LCAyNTI2NSwgMjUyODEsIDI1MzE4LCAyNTM0NCwgMjUzNjAsIDI1NDAwLCAyNTQyOCwgMjU0NTIsIDI2NzMxLCAyNTUwNCwgMzE2OTMsIDIzNjY5LCAyNTU1OCwgMjc0MDcsIDI1NTc1LCAyODU5OSwgMjU5MzQsIDI1NTk5LCAyNzIxMSwgMjgxODAsIDI3MzA0LCAyNTYyMywgMjU4MzksIDI1NjQ5LCAyNDQwMSwgMzQ4MjAsIDI1NjgxLCAyNTY5OCwgMjI1ODYsIDI3Nzc1LCAzMDE5MCwgMjU3NDUsIDI1Nzc4LCAyNTc5OSwgMjU4MTcsIDI4OTk1LCAzMzU2OSwgMzA3NTYsIDIxNTE4LCAzMzQ0MywgMjU4MzcsIDI1ODU1LCAyNTg5MywgMjYwOTUsIDMxMjU0LCAyNjY3NywgMzAxMzYsIDI3ODU1LCAyNTkzMCwgMjU5NTAsIDI3MjExLCAyMjE4NywgMjI5NjgsIDI1OTY2LCAyNTk4NiwgMjQ0MDEsIDIzNDI4LCAyNzc2MywgMzYzMzAsIDI2OTU5LCAyNjAwMiwgMjYwMjksIDI2MDQ1LCAyNjA4NSwgMjYxMTksIDI2MTcwLCAyNjIwMywgMjYyMjIsIDI2MjM5LCAzMDUyNywgMjYzNzIsIDI2Mjc0LCAyODQwNCwgMzEwMTgsIDMzNzU3LCAyNzIxMSwgMzQyNjIsIDI2MzE2LCAzNjcyOSwgMjYzNDUsIDI2MzY2LCAzNTMzNywgMzEwMTcsIDI2Mzg4LCAyNjQwNywgMzA5NTQsIDI2MzUwLCAzMzg2MSwgMjY0MzQsIDI2NDYzLCAyNjQ3OSwgMjY1MTIsIDIzNTE2LCAzMzE4OSwgMjY1MzEsIDI2NTQ3LCAyNzk2MywgMzEyOTMsIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI2ODMsIDE4ODM2LCAyNjU2OCwgMjYxODEsIDI2NjA4LCAzNDA5NywgMjY2NDMsIDI5MTgzLCAyMjA4NywgMjY2NjksIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI2NjkzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyMjEyMSwgMjY3MjAsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDMwNjEzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjY3NzQsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNjYxOSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMTU5NiwgMzE1MDAsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDMzOTc4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjU4MDEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzkyLCAyNDQwMSwgMzExODEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDM1NDY0LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjY4MDksIDMwNzU2LCAyMTQzMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY4MjgsIDI2MDk1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxODcsIDIyOTY4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDM1Nzc5LCAyMDA4MCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMzE5NDgsIDE4ODg5LCAzNTcwNywgMjcyMTEsIDE5NzE5LCAyNjg0NSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMjY5MDUsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMjQ5ODQsIDMxMDg4LCAxOTQxOSwgMjY5NDUsIDI3NjUxLCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNjk4LCAxODgzNiwgMjY5OTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMzA1MSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyNzAzMywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAzMTY5MywgMTg4ODgsIDE4ODg4LCAyNzA1NiwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDMwMzIwLCAyNzIxMSwgMjcyMTEsIDI3MDc1LCAyNDQwMSwgMjQ0MDEsIDI5MDMyLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAzMzk4NiwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcxMDIsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNzEyMywgMjcxNDQsIDM2MjU0LCAyNzE2MiwgMjcyMTAsIDI3MjI4LCAyODUwMCwgMTgxODcsIDM0ODQyLCAzMzQyNiwgMjcyNDQsIDM1OTgwLCAyNzI3NywgMjczMDIsIDI3MzIwLCAzNjA0OCwgMzQwMTMsIDIwOTk5LCAzMTg4MiwgMjE0NzgsIDI3ODk1LCAyNzM1NiwgMzAyODcsIDI3MzgxLCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMjYzMjksIDMwMDg3LCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjMzOSwgMTg4MzYsIDIyMDU5LCAyNzQwNiwgMjc0MjMsIDI3NDQ1LCAzNTI5NCwgMjc0NjEsIDIyMDg3LCAxODg4OCwgMTg4ODgsIDMwMTQwLCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzk4OSwgMjcyMTEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDI1NjgyLCAyNDQwMSwgMTg4NjYsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMzQwNDIsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyOTcwMCwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNzEyOCwgMzE2OTMsIDI3NDc3LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcxOTQsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMzUyOTksIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjcwNTksIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMzM2NiwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAzNTA0NCwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDIwODE1LCAyNzIxMSwgMzA4MTgsIDE5OTYwLCAzMzk2OSwgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI3MTMsIDE4ODM2LCAyMjA1OSwgMjc0OTYsIDI3NTE2LCAyNzU0MSwgMzUyMzEsIDI3NTU3LCAyMjA4NywgMjk2NjIsIDI2MjkyLCAyMzI5MiwgMjc1NzMsIDI0ODM2LCAyNzYwMSwgMjcyMTEsIDI3NjM2LCAyMjEyMSwgMzU1NDQsIDI3Njg2LCAyNDQwMSwgMjc3MjEsIDE4ODY2LCAxODg4OCwgMjc3OTksIDE4ODg4LCAyNzgxOCwgMjIwNzEsIDI3ODUzLCAzMjI2MCwgMjcyMTEsIDI2MDEzLCAyNzg3MywgMjc5MjAsIDIyMTY0LCAyOTQxOSwgMjQ0MDEsIDI5OTQ2LCAzMzQxMywgMjY3NDIsIDI3NzUxLCAyNjg4MSwgMTg4ODgsIDE4ODg4LCAyNzI2MSwgMzY3NzYsIDI3OTM2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzk4OCwgMjgwMDUsIDI4MDMxLCAyODA1MiwgMjQ0MDEsIDI0NDAxLCAyODA2OSwgMjgwODgsIDI4MTM1LCAyNTQ4OCwgMjgxNTIsIDI2MDY5LCAyODE2NywgMjcyMTEsIDI4MzQwLCAyNDY1NywgMjgxOTYsIDMwNzU2LCAzMTUyMywgMjQ0MDEsIDI4MjEyLCAzNDE3NiwgMzYxNzQsIDI0OTU2LCAyODI0OCwgMjgyNjYsIDI4MjkwLCAyMTQ4OCwgMzMwNzcsIDI4MzI3LCAyODM1NiwgMTc1OTAsIDIwOTg2LCAyMzEyNiwgMjgzOTEsIDI4NDI1LCAyODEwMiwgMjg0NTEsIDI4NDcwLCAyODQ5MCwgMjg1MTYsIDI4NTM0LCAyMDAzNCwgMzM3MjgsIDI1ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMwMjQxLCAyODI3NCwgMjg1NTMsIDI4NTc0LCAxOTQwNiwgMjg1OTAsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDE5NDUyLCAyODYxNSwgMjg2NjAsIDI2MTQ3LCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDI5NjEzLCAzNTk1OCwgMjkyNzYsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDIzMTU3LCAyODcwMCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMjIwNTksIDE4ODg4LCAyNzg1NywgMzQwOTcsIDI0NDAxLCAyOTE4MywgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg2NiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAyMjUyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzMzMywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAzMDg1MywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjcyOCwgMTg4MzYsIDI4NzQ3LCAyODc4MiwgMjg4MTcsIDI4ODQxLCAyODg1NywgMjg4ODAsIDI4ODk2LCAyNDE2MSwgMjg5NDMsIDMyMDExLCAzNjI2MSwgMjczNDAsIDI4OTYxLCAyOTQ5MiwgMjg5ODIsIDI5MDExLCAyNDUyMiwgMjkwMjcsIDI1NDM2LCAyOTA0OCwgMjMwNTEsIDI3NTAwLCAyOTA5MCwgMjkxMTAsIDMwNzEzLCAxODg4OCwgMjM1MTIsIDI5MTMwLCAyNTE4MywgMjcyMTEsIDI5MTU1LCAyODkyNywgMjcwMzMsIDI5MTczLCAyMzIzMCwgMjQ0MDEsIDI5MTk5LCAzNTM3MywgMzE2OTMsIDE4ODg4LCAxODg4OCwgMjU1ODMsIDMyNjI5LCAyOTIxOCwgMjcyMTEsIDI3MjExLCAzMTQ2MSwgMzA2OTIsIDI5MjM3LCAyNzA3NSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjkyNjIsIDI5MzAyLCAxOTYyOCwgMTg4ODgsIDM0MzI5LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjkzMjksIDI3MjExLCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAzNTkzMywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjc3MDUsIDMxNjEyLCAxODg4OCwgMTg4ODgsIDI5MzQ2LCAyOTM3NCwgMjcyMTEsIDM1NjUwLCAxNzU5MCwgMjE0MzYsIDI5MzkzLCAyNDQwMSwgMjU5NzAsIDE4ODg3LCAzMzg5NSwgMTg4ODgsIDI3MjExLCAzMjUyOCwgMjcyMTIsIDI0MDE2LCAzMjc2OSwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMjY4ODksIDI3MjExLCAyNzIxMSwgMjk0MTIsIDIzODg5LCAyNDM3MSwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc2OCwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI5NDM1LCAyOTUwOCwgMzExMDIsIDI5NTUwLCAyOTYwNiwgMjIxMDUsIDMwMzAwLCAyOTQ2MiwgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI3NDMsIDE4ODM2LCAyMjA1OSwgMjk2MjksIDI5NDczLCAzNDA5NywgMzMyODUsIDI5MTgzLCAyOTY1MSwgMjcyNTQsIDE4ODg4LCAyOTY3OCwgMzMzMjksIDMyNTM1LCAyNzIxMSwgMjk2OTQsIDI5NzE2LCAyMjEyMSwgMTkyMDIsIDI0NDAxLCAzMjc0MiwgMjk3NDEsIDE4ODY2LCAyNjc3NiwgMzM5MjEsIDI4NDc0LCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyOTc2NiwgMjcyMTEsIDI5ODA5LCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAzNTgyNSwgMjQ0MDEsIDI5ODI4LCAyNDQwMSwgMjQwMzYsIDM2NzY5LCAyNTIxNywgMTg4ODgsIDE4ODg4LCAyOTg0OCwgMTg4OTAsIDI3MjExLCAyOTg3MSwgMjcyMTEsIDI2MjU4LCAyNzIxMSwgMjk4OTQsIDI0NDAxLCAyOTkyOSwgMjQ0MDEsIDM2NTg3LCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI5NzI1LCAyOTk2MiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODQ3MywgMTg4ODgsIDE4ODg4LCAxOTU4NCwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjk5ODIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTkwMiwgMTk0NDcsIDMyMDUyLCAxOTU0NCwgMTk4MjgsIDI5OTk4LCAzMDA5NywgMzAwMzEsIDE5ODQwLCAyNTc4MywgMzAwNDcsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAzMDA3NSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyNzU4LCAxODgzNiwgMzAxMjEsIDMwMTU2LCAzMDIwNiwgMzAyNTcsIDMwMjczLCAzMDMzNiwgMjIwODcsIDM1NjI0LCAzMjgzNywgMjU3NjIsIDE4ODkwLCAyOTg3OCwgMzQ5MzQsIDI2ODEyLCAyNzIxMSwgMjIxMjEsIDI0OTMxLCAyMzIyMywgMjkyMDIsIDI0NDAxLCAxODg2NiwgMzQzNzMsIDMwMzUyLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzQ0NywgMjQ4MjgsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAzMDM3MCwgMzUwNTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAyOTUyMywgMTg4ODgsIDE4ODg4LCAyNzE0NiwgMTg4ODgsIDMxMzA4LCAzMDM4NiwgMjcyMTEsIDI3MjExLCAzMDQwNSwgMzA1NTgsIDE5NDg0LCAzMDQyNywgMjQ0MDEsIDI0NDAxLCAyOTkzOCwgMzU2ODYsIDE5NjI4LCAyODc2NiwgMzA0NDcsIDM0NTA2LCAzNTYxNCwgMjMwODYsIDI4NzMxLCAzMDQ4MiwgMzA1MTcsIDMwNTUyLCAzMDc1NiwgMjQwMTIsIDIwMTU2LCAzMDU3NCwgMzA1OTgsIDMwNjY3LCAyNjI4MywgMzM0NjQsIDI4OTQ1LCAyNzY3MCwgMzA2ODcsIDMyOTE1LCAzMzUwNCwgMjUzMjgsIDE3NTkwLCAyMzk2MywgMjA0NTAsIDMzODM3LCAyMTAxNiwgMzIzOTcsIDI2MzAwLCAzMDcwOCwgMzA3MjksIDI3ODg1LCAzMDc0OCwgMjE1ODgsIDM2MzczLCAzMDc3OSwgMjY2NTMsIDI0NjI4LCAzMzIyMCwgMzI1MTQsIDMwODA2LCAzMTgzNSwgMjU0MTIsIDI1OTA2LCAyNjUxNSwgMTg4OTAsIDI4ODI1LCAzMTgzMywgMjYxMzMsIDE5NDQ3LCAyODMwNCwgMzE3MzAsIDIzODM0LCAyNjA1NywgMzA4NjksIDMwODg1LCAzMjE4MSwgMzA5MjAsIDMwOTQyLCAzMjc5NywgMjU3ODIsIDMwOTcwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAzMDk5NywgMzEwMzQsIDI3OTYzLCAxOTY1OSwgMjk0NTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjc3MywgMTg4MzYsIDMxMDU4LCAzMTA3NCwgMzI0NjMsIDMxMTI1LCAzMTE0MSwgMzExOTcsIDIyMDg3LCAxODg4OCwgMjk1MzQsIDM1NDcxLCAzNjczOCwgMjcyMTEsIDI0MzQyLCAzMTIxMywgMjQ0MjQsIDIyMTIxLCAyNDQwMSwgMjAxNzUsIDMxMjI5LCAzMTkxNywgMjc3MzYsIDMxMjQ1LCAzNDMzNCwgMjcxNzUsIDE4ODg4LCAyOTA5NCwgMjcyODYsIDI3MjExLCAzMTI3OCwgMzEzMzYsIDI3MjExLCAzMTM1NSwgMzEzNzEsIDI0NDAxLCAzMTQwMiwgMzE0MTgsIDI0NDAxLCAzMTQzNywgMzE2OTMsIDE4ODg4LCAzMTYxOSwgMzI4NDEsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAzMTQ2MCwgMzE0NzcsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAzMTQ5NywgMzY1ODEsIDI0NDAxLCAzMzAyMCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDMwMDA3LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzE1MTYsIDMyMzEwLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzE1MzksIDE4ODg4LCAyODc2MiwgMTg4ODgsIDI0NjUxLCAzNTc0MCwgMjcyMTEsIDI3MjExLCAyODY0NCwgMzE1NjUsIDM1Nzk2LCAyNDQwMSwgMjQ0MDEsIDE5MzE4LCAzMjE4OCwgMTg4ODgsIDI0MzM0LCAyODM2NiwgMjcyMTIsIDI5OTY2LCAyOTgzMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDMxNTg3LCAxOTg2OCwgMzE2MzUsIDMyNDM1LCAzMzY5MywgMzAxMDUsIDMxNjYzLCAyMDAwNSwgMzE3MTUsIDMxNzU3LCAzMTc4NCwgMzE4MTIsIDMwMDE1LCAzMTg1MSwgMzE4NzgsIDI1NzgzLCAzMTg5OCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMzE5MzMsIDMwMjIxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI3ODgsIDE4ODM2LCAyMjA1OSwgMjU3MjksIDMwNDY2LCAzMTk2OCwgMjQzMDYsIDMxOTg0LCAzMjAwMCwgMzI4MDcsIDM1MTYwLCAyNzAxNywgMjk1OTAsIDM0OTQxLCAxOTgwMSwgMjkzNzcsIDMzNzAwLCAyMjEyMSwgMjcwNDAsIDMwNDMxLCAyOTM5NiwgMjg4NjQsIDI5NTY1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAzMjAyNywgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMjcyMTEsIDIzNjk4LCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ0MDEsIDMwODQ1LCAyNDQwMSwgMjQwMzYsIDMyMDQ1LCAxODg4OCwgMjY5MjksIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAzMTQ4MSwgMzIwNjgsIDI3MjExLCAyNzIxMSwgMzIwODgsIDI0NDAxLCAzMzA1OCwgMzIxMjIsIDI0NDAxLCAyNDQwMSwgMzM3MzYsIDE4ODg4LCAxODg4OCwgMzMxNjIsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyOTQ4NCwgMjcyMTEsIDI4Mzc1LCAzMjE0NCwgMjQ0MDEsIDI0NDAxLCAzMzgzMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzY3MDQsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAzMzEwNywgMjIxNzEsIDMzMjI0LCAyNDI3MSwgMzIxNjksIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDMwMjM0LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzM5LCAxODgzNiwgMzIyMDQsIDMyMjMyLCAzMjI1MiwgMzI2NzcsIDMzMjk1LCAyOTA3NCwgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyMzYxOSwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAzMjI3NiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAzMTY5MywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMyMjk5LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjMwODYsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDMzODg2LCAxODg4OSwgMzYwNjUsIDI3MjExLCAxOTcxOSwgMzUzMjYsIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjgwMywgMTg4MzYsIDMyMzM1LCAzMTY0NywgMzQ2NjYsIDMyMzUxLCAzMjM2NywgMzI0MTcsIDIyMDg3LCAxODg4OCwgMzI0MzMsIDE5MzM1LCAzMjQ1MSwgMjcyMTEsIDMyNDc5LCAyNzEwNywgMzI1MDAsIDIyMTIxLCAyNDQwMSwgMzI1NTEsIDIwMDg1LCAzMjU3MiwgMTg4NjYsIDIyMjg3LCAyMzc1MywgMTg4ODgsIDE4ODg4LCAzMjYwMiwgMzI2NjUsIDI3MjExLCAzMjY5MywgMjcyMTEsIDI2OTcyLCAzMjcxMywgMzI3MjksIDI0NDAxLCAzMjc2NCwgMjQ0MDEsIDI1ODc3LCAzMjc4NSwgMzQ3NjgsIDE4ODg4LCAyNzM5MCwgMzI4MjMsIDI0NTk0LCAyNDg1NSwgMzI4NTcsIDI0ODkwLCAzMjg3OCwgMzI5MDQsIDI3MjExLCAzMjk0MiwgMzI5NzcsIDI0NDAxLCAzMzAwMCwgMjkzMTMsIDI0NDAxLCAzMDc5MCwgMjYyMDYsIDI3NjY2LCAzMzkwNCwgMTg4ODgsIDIzMDg2LCAzNjM1MywgMjcyMTEsIDMzMDM2LCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAzMjE1MywgMjQ0MDEsIDMzMDU2LCAyNDQwMSwgMzU4NjEsIDE4ODg4LCAxODg4OCwgMzAzNTQsIDI3OTcyLCAyNzIxMSwgMjcyMTEsIDMzODAwLCAxNzU5MCwgMjAxNDUsIDI0NDAxLCAyNDQwMSwgMzQ2MzgsIDIwODExLCAxODg4OCwgMTg4ODgsIDMzMDc0LCAyNzIxMSwgMjcyMTIsIDM2MTY3LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAzNDYxNiwgMjQxNjksIDMzMDkzLCAzMzEyMywgMzMxNTcsIDI3ODU2LCAzMTc0MSwgMjM4NjIsIDI2NTUyLCAzNDMwMiwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMzMxNzgsIDE5OTczLCAyNzk2MywgMjM0OTcsIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI4MTgsIDE4ODM2LCAzMzIwNSwgMjgxMTMsIDMzMjQwLCAzNDA5NywgMzMyNzUsIDI5MTgzLCAyMjA4NywgMzMzMTgsIDM1NDM4LCAxODg4OCwgMTg4OTAsIDMzMzQ1LCAyNjM5MSwgMzMzODIsIDI3MjExLCAyMjEyMSwgMzMzOTksIDI4MDcyLCAzMzQ0MiwgMjQ0MDEsIDE4ODY2LCAyMjIzMiwgMTg4ODgsIDMzNDU5LCAxODg4OCwgMTg4ODgsIDMzNDgwLCAzMzQ5OCwgMjUxNzUsIDI3MjExLCAyNzIxMSwgMjY3MDQsIDIyMTY0LCAyNDc3NSwgMzUyMzksIDI0NDAxLCAyNDQwMSwgMjU5MTQsIDI5NTgwLCAxODg4OCwgMTg4ODgsIDMxMTA5LCAyNTIxMSwgMzM1MjAsIDMzNTM5LCAyNzIxMSwgMjcyMTEsIDMzNTU2LCAzNjI4NCwgMTk0ODQsIDMzNTg1LCAyNDQwMSwgMjQ0MDEsIDMzNjA0LCAzMjU1NiwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMzEyNjIsIDMzNjU4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAzMzY3OSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAzMzcxNiwgMjQ0MDEsIDI2ODU0LCAyNzQ4MCwgMTg4ODgsIDMzNzUyLCAyNzg1NSwgMzMyNTksIDM0NzAxLCAyNzIxMSwgMTc1OTAsIDMyMTAyLCAyNDc4MiwgMjM4MDcsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAzMzc3MywgMzYxMDUsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDIzMzY4LCAyNzIxMSwgMjkxNTcsIDE5NzE5LCAyMzg4OSwgMzQ0NTQsIDI5Mjg2LCAxODg5MCwgMzM3OTQsIDI1MzAyLCAzMzgxNiwgMTk0NDcsIDM0MDc5LCAzMzg1MywgMzE4NjIsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDMzODc3LCAyODkyMCwgMzM5MzcsIDE5ODM3LCAzMDQ2MSwgMzQwMDIsIDIyMjc2LCAzNjA0MSwgMzQwMjksIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyODMzLCAxODgzNiwgMzQwNjQsIDMyNjE2LCAzNDExMywgMzQxNDEsIDM0MTU3LCAzNDE5MiwgMzQyMDgsIDMyMjE2LCAzNjAxMywgMzE1NDksIDMxOTUyLCAzNDIyNCwgMzQyNDgsIDM0Mjg3LCAyOTMzMCwgMzQzNTAsIDM0Mzg5LCAzNDQxMywgMzQ0ODEsIDI2NzkzLCAxODg2NiwgMjYxODcsIDI5NjM1LCAyMjI5MywgMTg4ODgsIDM2NjU0LCAyNTc4MywgMzQ1MjIsIDM0NTQ0LCAzNDU2NiwgMjU4MjEsIDM1MDcyLCAyMjE2NCwgMzQ1ODYsIDM0NjA5LCAzNDYzMiwgMTk2MDQsIDI0MDM2LCAzNjY0NCwgMzY2NzQsIDI0NjgxLCAxODg4OCwgMzI0MDEsIDM0NjU0LCAzMTMzOSwgMzQ2ODIsIDM0Njk4LCAyNzIxMSwgMzQ3MTcsIDM0NzUzLCAyODA1MywgMzQ4MTIsIDM0ODM2LCAyNDQwMSwgMzM2MTksIDE5NjI4LCAzNDg1OCwgMzIyMzYsIDM0OTA2LCAyNDU5OCwgMzM1MjMsIDI3NjEyLCAzNDg5MCwgMzQ5MjIsIDI0NzMyLCAyOTI0NiwgMzY3MTcsIDMzNjM0LCAzNDQ2NSwgMzI5ODQsIDM0MTY4LCAyNjc1MCwgMzQ5NTcsIDE4ODg4LCAxODg4OCwgMzQ5OTQsIDM1MDEwLCAyNzIxMSwgMzMwNDAsIDE3NTkwLCAyOTkxMywgMzUwMzUsIDI0NDAxLCAzNjMwNCwgMjU0ODIsIDMwMTcxLCAzNTg4MywgMzUwNjgsIDM1MDg4LCAyNjYyNywgMjA0NDEsIDMxMTczLCAzNTEyMywgMzUxNDMsIDM1MTc2LCAyNDY0MCwgMzA0OTIsIDI5MzU4LCAxOTcxOSwgMzUxOTIsIDM1MjE5LCAyNTM4NCwgMjg4MDEsIDM1MjU1LCAzNTI3OSwgMzI1ODYsIDM0NDk2LCAyMzA4NiwgMjMzMzAsIDI5MDYxLCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAyNDU0NywgMjUxNjQsIDM1MzE1LCAzMTc5NiwgMzUzNTMsIDM0MzE2LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAyNDA5MSwgMjg2MzAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjg0OCwgMTg4MzYsIDIyMDU5LCAzNDc4MiwgMzQwODgsIDM1Mzg5LCAyMTAwOCwgMzU0MDUsIDM1NDIxLCAzNTQ1NCwgMTg4ODgsIDE4ODg4LCAyMzQ2NiwgMzU0ODcsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1NTEzLCAzMTE1NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzU1NjAsIDE4ODg4LCAyNjg2MywgMzY2NjQsIDM1NjAxLCAyNDg3MiwgMjU3ODMsIDMwMzg5LCAyMzUzNiwgMjYyNTAsIDM1NjQ3LCAzNTY2NiwgMjIxNjQsIDE5NTIyLCAxOTU2NCwgMzA1ODIsIDM1NjgyLCAyNzY5NywgMzU1NzUsIDI5MTE0LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDM1NzAyLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTcyMywgMjQ0MDEsIDM1NTI3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMzAxODQsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAzNTczOSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjkxMzksIDIyOTM4LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjM4OTgsIDM1NzU2LCAxODg4OCwgMTg4ODgsIDI1MDI1LCAzNTc3OCwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjAwNjQsIDM1Nzk1LCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMjM5MTcsIDE4ODkwLCAzNDU1MCwgMzE4MzMsIDIyMjYyLCAxOTQ0NywgMjMwODYsIDIzMzMwLCAyNjQxOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzNTgxMiwgMTk4MzcsIDI3MTg3LCAzNTg0MSwgMzMxMzUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDIyMTQ4LCAyODcxMiwgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjI4NjMsIDE4ODM2LCAyMjA1OSwgMzU4NzcsIDI4NzIzLCAzNDA5NywgMzExNjQsIDI5MTgzLCAyMjA4NywgMjY3NTgsIDE4ODg4LCAyMjU5MiwgMTg4OTAsIDIzOTg5LCAyNzIxMSwgMjk4MTIsIDI3MjExLCAyMjEyMSwgMzM3NzgsIDI0NDAxLCAzMTQyMSwgMjQ0MDEsIDE4ODY2LCAxODg4OCwgMTg4ODgsIDI2ODcyLCAxODg4OCwgMTg4ODgsIDI1NzgzLCAyNzIxMSwgMzA3MzIsIDI3MjExLCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAyNDQwMSwgMjQ5MDgsIDI0NDAxLCAyNDQwMSwgMjQwMzYsIDMxNjkzLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyMzA4NiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDMwNzU2LCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI2NzUwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg4NywgMTg4ODgsIDE4ODg4LCAyNzIxMSwgMjcyMTEsIDI3MjEyLCAyNDAxNiwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMTg4ODgsIDE4ODg5LCAyNzIxMSwgMjcyMTEsIDE5NzE5LCAyMzg4OSwgMTk4NjgsIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyODc4LCAxODgzNiwgMjIwNTksIDI3ODM3LCAyNzg1NywgMzU4OTksIDI0NDAxLCAzNTkxNSwgMjIwODcsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODkwLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjIxMjEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxODg2NiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNTc4MywgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM1MDcyLCAyMjE2NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0MDM2LCAzMTYwMiwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI2MjIzLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE5NDg0LCAzNTkzMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE5NjI4LCAxODg4OCwgMjgxMzYsIDE4ODg4LCAxODg4OCwgMzU5NDksIDI3MjExLCAzMjg2MiwgMjcyMTEsIDMyNjk3LCAzMDc1NiwgMjQwMTIsIDI0NDAxLCAzMjI4MywgMjQ0MDEsIDMyMTI4LCAyNjc1MCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjc4NTUsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDE3NTkwLCAyNDAxNywgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTg4ODcsIDE4ODg4LCAxODg4OCwgMjcyMTEsIDI3MjExLCAyNzIxMiwgMjQwMTYsIDI0NDAyLCAxOTg2OCwgMjU2NTksIDE4ODg4LCAxODg4OSwgMjcyMTEsIDI3MjExLCAxOTcxOSwgMjM4ODksIDE5ODY4LCAzMTAxOCwgMTg4OTAsIDI3MjExLCAzMTgzMywgMTk0MDYsIDE5NDQ3LCAyMzA4NiwgMjMzMzAsIDE5ODI4LCAzMTAxNywgMjc4NTYsIDMxNzQxLCAxOTg0MCwgMjU3ODMsIDMxNzM4LCAxOTgzNywgMjU3ODIsIDE5NzYwLCAzMTAxNSwgMjM1MTYsIDMxMDA4LCAyMjEwNSwgMTk0MTksIDI3OTYzLCAxOTY1OSwgMjc5NTEsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjg5MywgMTg4MzYsIDIyMDU5LCAzNTk3NCwgMzQ4ODIsIDM0MDk3LCAzMzk2MCwgMjkxODMsIDM1OTk2LCAxODg4OCwgMjMzMTEsIDE4ODg4LCAzNjAyOSwgMjcyMTEsIDI3MjExLCAzNjA2NCwgMzYwODEsIDIyMTIxLCAyNDQwMSwgMjQ0MDEsIDM2MTA0LCAzMzk1MCwgMTg4NjYsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAzNTA3MiwgMjIxNjQsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDAzNiwgMzYxMjEsIDE4ODg4LCAyNTU1OSwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAzMDMxMywgMjcyMTEsIDI3MjExLCAzNjE1NCwgMjQ0MDEsIDI0NDAxLCAzNDM5NywgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMjgyNTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAzMDkyNiwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjY5ODMsIDI0MDEyLCAzMzY0MiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjIzMzksIDE4ODM2LCAyMjA1OSwgMTkzNTQsIDI3ODU3LCAzNjE5MCwgMjQ0MDEsIDM2MjA2LCAyMjA4NywgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTgwMDcsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI0NzI0LCAyMjEyMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMzA4MjcsIDE4ODY2LCAxODg4OCwgMzYyMjIsIDE4ODg4LCAyODc5NSwgMTg4ODgsIDI1NzgzLCAzNTEwMCwgMjcyMTEsIDI3NDI5LCAyNzIxMSwgMzUwNzIsIDIyMTY0LCAzMDgzNiwgMjQ0MDEsIDI0NDk5LCAyNDQwMSwgMjQwMzYsIDMxNjkzLCAxODg4OCwgMzYyNDQsIDE4ODg4LCAxODg4OCwgMTg4OTAsIDI3MjExLCAzNjA4OCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTk0ODQsIDI0NDAxLCAyODAzNiwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMTk2MjgsIDE4ODg4LCAxODg4OCwgMzU2MzEsIDE4ODg4LCAzNTc2MiwgMjcyMTEsIDI3MjExLCAzNjI3NywgMjcyMTEsIDM0NzMwLCAyNDAxMiwgMjQ0MDEsIDI0NDAxLCAzNjMwMCwgMjQ0MDEsIDM2MzIwLCAxODg4OCwgMTg4ODgsIDE4ODg4LCAyNzg1NSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMTc1OTAsIDI0MDE3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNTcxMiwgMTg4ODgsIDE4ODg4LCAzNjM0NiwgMjcyMTEsIDI3MjEyLCAxOTE4NCwgMjQ0MDIsIDE5ODY4LCAyNTY1OSwgMzIwMjksIDE4ODg5LCAyNzIxMSwgMzMzNTksIDE5NzE5LCAyMzg4OSwgMzYzNjksIDMxMDE4LCAxODg5MCwgMjcyMTEsIDMxODMzLCAxOTQwNiwgMTk0NDcsIDIzMDg2LCAyMzMzMCwgMTk4MjgsIDMxMDE3LCAyNzg1NiwgMzE3NDEsIDE5ODQwLCAyNTc4MywgMzE3MzgsIDE5ODM3LCAyNTc4MiwgMTk3NjAsIDMxMDE1LCAyMzUxNiwgMzEwMDgsIDIyMTA1LCAxOTQxOSwgMjc5NjMsIDE5NjU5LCAyNzk1MSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIyMzg0LCAxODgzNiwgMzYzODksIDE5MDA4LCAxOTIzMywgMjAzNjcsIDM2NDM0LCAxNzE3MywgMTc1OTUsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMzY0NTMsIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDIwMzYyLCAyMTcyNiwgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMjM2OSwgMTg4MzYsIDE4OTg3LCAxOTAwOCwgMTkyMzMsIDIwMzY3LCAxOTAwOCwgMjE3MzcsIDMwNzYzLCAzNjQzNywgMTczMzAsIDE3MzQ5LCAxODkyMSwgMTcxODksIDE3MjA4LCAxNzI4MSwgMjAzNTUsIDE3OTQ5LCAxNzMwOCwgMTczMjcsIDE3MzQ2LCAxODkxOCwgMTg0NTIsIDIxODgwLCAxODY0OSwgMTg2NjUsIDE5MDA2LCAxNzI2NSwgMjIwMzMsIDIwNzY1LCAxNzQyMSwgMjA1MzUsIDE3MTkyLCAxODEyNywgMjE4NzMsIDE3MzExLCAxODY1OCwgMTg5OTksIDE5MDA4LCAxNzQ0NywgMzI5NTIsIDE3NDk3LCAxNzUyMCwgMTcyNTEsIDM2NDExLCAxNzc4MiwgMjA2ODIsIDE3NzE0LCAxODMyNiwgMTc1NDMsIDE3NTU5LCAxNzU4NSwgMjE4ODcsIDE3NTA0LCAxNzUyNywgMTcyNTgsIDM2NDE4LCAyMTkxNSwgMjE5NDAsIDE3NjExLCAzNjQ2NywgMTgyMTcsIDE3NjMzLCAxNzY2MSwgMjExOTAsIDE3NzAzLCAyMTE3NiwgMTc3MzAsIDM0NzM3LCAyMTk0NiwgMTc2MTcsIDM2NDczLCAxODIyMywgMzY1MzEsIDE3NDc3LCAxOTE1MiwgMTc4NjAsIDE3ODkyLCAxNzY3NSwgMTc3NTMsIDE3ODMyLCAxNzU5MCwgMjE2MjAsIDE3NDgxLCAxOTE1NiwgMTc4NjQsIDE4NzMxLCAxNzkxOCwgMzY1NTEsIDE3MjkyLCAxNzkzNCwgMTc5NzksIDE4NzI3LCAxODY4MSwgMTg0MDUsIDE4NjIxLCAxODAzOSwgMTgwNTYsIDE4MDcyLCAxODExNywgMTgxNDMsIDE4NzA2LCAxODA1MiwgMTgyMDksIDE4MjUwLCAxODIzOSwgMTgyNjYsIDE3OTYzLCAxODI5NiwgMTgzMTIsIDE4Mzc2LCAxNzgwNywgMzY0MDMsIDE5MjMyLCAxNzc5NiwgMTcxNjMsIDMwNjQyLCAxODM5MiwgMTc4MTYsIDMyOTYxLCAxNzY0NSwgMTg4MDUsIDE4NDIxLCAxODQzNywgMTg1MTksIDE3MzkzLCAxODc0NywgMTg1MDUsIDE4NTM1LCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMjE4MTMsIDE4ODM2LCAzNjQ4OSwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3MTczLCAxNzczNywgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzc2OCwgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDE4NDUyLCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMjA1NDMsIDIyMDIyLCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDIxODI4LCAxODgzNiwgMTg5ODcsIDE5MDA4LCAxOTIzMywgMjAzNjcsIDE5MDA4LCAxNzE3MywgMzA3NjMsIDM2NDM3LCAxNzMzMCwgMTczNDksIDE4OTIxLCAxNzE4OSwgMTcyMDgsIDE3MjgxLCAyMDM1NSwgMzY1MTcsIDE3MzA4LCAxNzMyNywgMTczNDYsIDE4OTE4LCAxODQ1MiwgMjE4ODAsIDE4NjQ5LCAxODY2NSwgMTkwMDYsIDE3MjY1LCAyMjAzMywgMjA3NjUsIDE3NDIxLCAyMDUzNSwgMTcxOTIsIDE4MTI3LCAyMTg3MywgMTczMTEsIDE4NjU4LCAxODk5OSwgMTkwMDgsIDE3NDQ3LCAzMjk1MiwgMTc0OTcsIDE3NTIwLCAxNzI1MSwgMzY0MTEsIDE3NzgyLCAyMDY4MiwgMTc3MTQsIDE4MzI2LCAxNzU0MywgMTc1NTksIDE3NTg1LCAyMTg4NywgMTc1MDQsIDE3NTI3LCAxNzI1OCwgMzY0MTgsIDIxOTE1LCAyMTk0MCwgMTc2MTEsIDM2NDY3LCAxODIxNywgMTc2MzMsIDE3NjYxLCAyMTE5MCwgMTc3MDMsIDIxMTc2LCAxNzczMCwgMzQ3MzcsIDIxOTQ2LCAxNzYxNywgMzY0NzMsIDE4MjIzLCAzNjUzMSwgMTc0NzcsIDE5MTUyLCAxNzg2MCwgMTc4OTIsIDE3Njc1LCAxNzc1MywgMTc4MzIsIDE3NTkwLCAyMTYyMCwgMTc0ODEsIDE5MTU2LCAxNzg2NCwgMTg3MzEsIDE3OTE4LCAzNjU1MSwgMTcyOTIsIDE3OTM0LCAxNzk3OSwgMTg3MjcsIDE4NjgxLCAxODQwNSwgMTg2MjEsIDE4MDM5LCAxODA1NiwgMTgwNzIsIDE4MTE3LCAxODE0MywgMTg3MDYsIDE4MDUyLCAxODIwOSwgMTgyNTAsIDE4MjM5LCAxODI2NiwgMTc5NjMsIDE4Mjk2LCAxODMxMiwgMTgzNzYsIDE3ODA3LCAzNjQwMywgMTkyMzIsIDE3Nzk2LCAxNzE2MywgMzA2NDIsIDE4MzkyLCAxNzgxNiwgMzI5NjEsIDE3NjQ1LCAxODgwNSwgMTg0MjEsIDE4NDM3LCAxODUxOSwgMTczOTMsIDE4NzQ3LCAxODUwNSwgMTg1MzUsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAyMTgyOCwgMTg4MzYsIDE5MzA3LCAxODg4OCwgMjc4NTcsIDMwNzU2LCAyNDQwMSwgMjkxODMsIDI4MDE1LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDM2NTY3LCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjI5NTMsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMjU3ODMsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyODUzNywgMzY2MDMsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDAzNiwgMTg4ODEsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDE4ODg4LCAxODg5MCwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxOTQ4NCwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAxOTYyOCwgMTg4ODgsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDIzMDg2LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAyNzIxMSwgMzA3NTYsIDI0MDEyLCAyNDQwMSwgMjQ0MDEsIDI0NDAxLCAyNDQwMSwgMjY3NTAsIDE4ODg4LCAxODg4OCwgMTg4ODgsIDI3ODU1LCAyNzIxMSwgMjcyMTEsIDI3MjExLCAxNzU5MCwgMjQwMTcsIDI0NDAxLCAyNDQwMSwgMjQ0MDEsIDE4ODg3LCAxODg4OCwgMTg4ODgsIDI3MjExLCAyNzIxMSwgMjcyMTIsIDI0MDE2LCAyNDQwMiwgMTk4NjgsIDI1NjU5LCAxODg4OCwgMTg4ODksIDI3MjExLCAyNzIxMSwgMTk3MTksIDIzODg5LCAxOTg2OCwgMzEwMTgsIDE4ODkwLCAyNzIxMSwgMzE4MzMsIDE5NDA2LCAxOTQ0NywgMjMwODYsIDIzMzMwLCAxOTgyOCwgMzEwMTcsIDI3ODU2LCAzMTc0MSwgMTk4NDAsIDI1NzgzLCAzMTczOCwgMTk4MzcsIDI1NzgyLCAxOTc2MCwgMzEwMTUsIDIzNTE2LCAzMTAwOCwgMjIxMDUsIDE5NDE5LCAyNzk2MywgMTk2NTksIDI3OTUxLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMzY2MjksIDM2NjkwLCAxODcyMCwgMTkwMDgsIDE5MjMzLCAyMDM2NywgMTkwMDgsIDE3NDU0LCAxNzU5NSwgMzY0MzcsIDE3MzMwLCAxNzM0OSwgMTg5MjEsIDE3MTg5LCAxNzIwOCwgMTcyODEsIDIwMzU1LCAxNzIyMywgMTczMDgsIDE3MzI3LCAxNzM0NiwgMTg5MTgsIDM2NzU0LCAyMTg4MCwgMTg2NDksIDE4NjY1LCAxOTAwNiwgMTcyNjUsIDIyMDMzLCAyMDc2NSwgMTc0MjEsIDIwNTM1LCAxNzE5MiwgMjAzNjIsIDIxNzI2LCAxNzMxMSwgMTg2NTgsIDE4OTk5LCAxOTAwOCwgMTc0NDcsIDMyOTUyLCAxNzQ5NywgMTc1MjAsIDE3MjUxLCAzNjQxMSwgMTc3ODIsIDIwNjgyLCAxNzcxNCwgMTgzMjYsIDE3NTQzLCAxNzU1OSwgMTc1ODUsIDIxODg3LCAxNzUwNCwgMTc1MjcsIDE3MjU4LCAzNjQxOCwgMjE5MTUsIDIxOTQwLCAxNzYxMSwgMzY0NjcsIDE4MjE3LCAxNzYzMywgMTc2NjEsIDIxMTkwLCAxNzcwMywgMjExNzYsIDE3NzMwLCAzNDczNywgMjE5NDYsIDE3NjE3LCAzNjQ3MywgMTgyMjMsIDM2NTMxLCAxNzQ3NywgMTkxNTIsIDE3ODYwLCAxNzg5MiwgMTc2NzUsIDE3NzUzLCAxNzgzMiwgMTc1OTAsIDIxNjIwLCAxNzQ4MSwgMTkxNTYsIDE3ODY0LCAxODczMSwgMTc5MTgsIDM2NTUxLCAxNzI5MiwgMTc5MzQsIDE3OTc5LCAxODcyNywgMTg2ODEsIDE4NDA1LCAxODYyMSwgMTgwMzksIDE4MDU2LCAxODA3MiwgMTgxMTcsIDE4MTQzLCAxODcwNiwgMTgwNTIsIDE4MjA5LCAxODI1MCwgMTgyMzksIDE4MjY2LCAxNzk2MywgMTgyOTYsIDE4MzEyLCAxODM3NiwgMTc4MDcsIDM2NDAzLCAxOTIzMiwgMTc3OTYsIDE3MTYzLCAzMDY0MiwgMTgzOTIsIDE3ODE2LCAzMjk2MSwgMTc2NDUsIDE4ODA1LCAxODQyMSwgMTg0MzcsIDE4NTE5LCAxNzM5MywgMTg3NDcsIDE4NTA1LCAxODUzNSwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDE3NTkwLCAxNzU5MCwgMTc1OTAsIDAsIDk0MjQyLCAwLCAxMTg4MjAsIDAsIDIyMTE4NDAsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ4MjE3NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCAyMjA3NzQ0LCAyNDA0MzUyLCAyNDEyNTQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTA0NzY4LCAyNjA1MDU2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjc4Nzg0LCAyMjA3NzQ0LCAyNjk1MTY4LCAyMjA3NzQ0LCAyNzAzMzYwLCAyMjA3NzQ0LCAyNzExNTUyLCAyNzUyNTEyLCAyMjA3NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTY2Nzg0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTcwMzA0LCAzMTc0NDAwLCAyMTU4NTkyLCAwLCAxMzksIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MjQ4MzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI3NDg0MTYsIDI3NTY2MDgsIDI3NzcwODgsIDI4MDE2NjQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI4NjMxMDQsIDI4OTE3NzYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMDQ3NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIyMDc3NDQsIDI3ODUyODAsIDIyMDc3NDQsIDI4MDk4NTYsIDIyMDc3NDQsIDIyMDc3NDQsIDI4NDI2MjQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI4OTk5NjgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0NzM5ODQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0OTQ0NjQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1MjMxMzYsIDIxNTg1OTIsIDI0MDQzNTIsIDI0MTI1NDQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1NjQwOTYsIDIxNTg1OTIsIDIxNTg1OTIsIDI2MDUwNTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI2Nzg3ODQsIDIxNTg1OTIsIDI2OTUxNjgsIDIxNTg1OTIsIDI3MDMzNjAsIDIxNTg1OTIsIDI3MTE1NTIsIDI3NTI1MTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI3ODUyODAsIDIxNTg1OTIsIDIxNTg1OTIsIDI3ODUyODAsIDIxNTg1OTIsIDI4MDk4NTYsIDIxNTg1OTIsIDIxNTg1OTIsIDI4NDI2MjQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI4OTk5NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCA2NDEsIDAsIDIxNTg1OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDMyNzY4LCAwLCAyMTU4NTkyLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMzgzODcyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDA2NDY0LCAyMzgzODcyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAwLCAwLCAyMTU4ODc3LCAyNTcyNTczLCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNTk2ODY0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjQxOTIwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCAwLCAwLCAxNjc5MzYsIDAsIDAsIDIxNjI2ODgsIDAsIDAsIDMxMDQ3NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDAsIDAsIDIxNDYzMDQsIDIxNDYzMDQsIDIyMjQxMjgsIDIyMjQxMjgsIDIyMzIzMjAsIDIyMzIzMjAsIDIyMzIzMjAsIDY0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjUzMTMyOCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYxNzM0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ0MTIxNiwgMjQ0NTMxMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjUwMjY1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU4MDQ4MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYyMTQ0MCwgMjE1ODU5MiwgMjU4MDQ4MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYyMTQ0MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY5OTI2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjc0ODQxNiwgMjc1NjYwOCwgMjc3NzA4OCwgMjgwMTY2NCwgMjIwNzc0NCwgMjg2MzEwNCwgMjg5MTc3NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzAxODc1MiwgMjIwNzc0NCwgMzA0MzMyOCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzA4MDE5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMzExMjk2MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgMCwgMCwgMTcyMzEwLCAyNzksIDAsIDIxNjI2ODgsIDAsIDAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxODY2ODgsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MDQzNTIsIDI0MTI1NDQsIDIxNTg1OTIsIDI1MTA4NDgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1ODQ1NzYsIDIxNTg1OTIsIDI2MDkxNTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI2Mjk2MzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI2ODY5NzYsIDIxNTg1OTIsIDI3MTU2NDgsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMjExNTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNDk4MjQsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNzAzMDQsIDMxNzQ0MDAsIDIxNTg1OTIsIDIzNjc0ODgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDAsIDAsIDIxNTg1OTIsIDI1NzIyODgsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0MzMwMjQsIDIyMDc3NDQsIDI0NTM1MDQsIDI0NjE2OTYsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1MTA4NDgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1MzEzMjgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI2MTczNDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDAsIDAsIDIxNTg1OTIsIDI1NzIyODgsIDIxNTg1OTIsIDIxNTg1OTIsIDE1MDgsIDI3MTU2NDgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI4NjcyMDAsIDIyMDc3NDQsIDI5MDQwNjQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1ODA0ODAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI2MjE0NDAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxNDk4MjQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxNzAzMDQsIDMxNzQ0MDAsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQwNDM1MiwgMjQxMjU0NCwgMjcwNzQ1NiwgMjczMjAzMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjgyMjE0NCwgMjgyNjI0MCwgMjIwNzc0NCwgMjg5NTg3MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjkyNDU0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjk3MzY5NiwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2Njc4NCwgMCwgMCwgMCwgMCwgMCwgMjg1LCAyMTU4NTkyLCAyMTU4NTkyLCAzMTEyOTYwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTg2Njg4LCAyMTU4NTkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAwLCAyNTM1NDI0LCAyNTQzNjE2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyOTkwMDgwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTcyMjg4LCAyOTgxODg4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDAyMzY4LCAyMjA3NzQ0LCAzMDQ3NDI0LCAzMDYzODA4LCAzMDc2MDk2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMjAzMDcyLCAyNzA4OTYwLCAyNzMyMDMyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyODIyMTQ0LCAyODI3NzQ4LCAyMTU4NTkyLCAyODk1ODcyLCAyMTU4NTkyLCAyMTU4NTkyLCAyOTI0NTQ0LCAyMTU4NTkyLCAyMTU4NTkyLCAyOTczNjk2LCAyMTU4NTkyLCAyOTgxODg4LCAyMTU4NTkyLCAyMTU4NTkyLCAzMDAyMzY4LCAyMTU4NTkyLCAzMDQ3NDI0LCAzMDYzODA4LCAzMDc2MDk2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMjAzMDcyLCAyOTgxODg4LCAyMTU4NTkyLCAyMTU4NTkyLCAzMDAzODc2LCAyMTU4NTkyLCAzMDQ3NDI0LCAzMDYzODA4LCAzMDc2MDk2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMjAzMDcyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNDI0ODMyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMDQ4MCwgMCwgMCwgMCwgMCwgMCwgMjE2MjY4OCwgMjA0ODAsIDAsIDI1MjMxMzYsIDI1MjcyMzIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1NzYzODQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI5MDgxNjAsIDI1MjcyMzIsIDIyMDc3NDQsIDIyMDc3NDQsIDI1NzYzODQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI5MDgxNjAsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjY3ODQsIDAsIDAsIDAsIDAsIDAsIDI4NiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjYzMzcyOCwgMjY1ODMwNCwgMCwgMCwgMjc0MDIyNCwgMjc0NDMyMCwgMCwgMjgzNDQzMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjk3Nzc5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzAzOTIzMiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzE1ODAxNiwgMCwgMCwgMjkzMTUsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTMzLCA0NSwgNDUsIDQ1LCA0NSwgNDQyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDI0OTQ0NjQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1MjQ3NTcsIDI1MjcyMzIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1NzYzODQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDE1MDQsIDIxNTg1OTIsIDI0OTg1NjAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI1NjgxOTIsIDIxNTg1OTIsIDI1OTI3NjgsIDI2MjU1MzYsIDIxNTg1OTIsIDIxNTg1OTIsIDI2NzQ2ODgsIDI3MzYxMjgsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDIxNTg1OTIsIDI5MTIyNTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMDg4NjQsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMzM0NDAsIDMxNDU3MjgsIDMxNTM5MjAsIDIzNzU2ODAsIDIzNzk3NzYsIDIyMDc3NDQsIDIyMDc3NDQsIDI0MjA3MzYsIDIyMDc3NDQsIDI0NDk0MDgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0OTg1NjAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1NjgxOTIsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjY3ODQsIDAsIDAsIDAsIDAsIDAsIDU1MSwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMjUwNjc1MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODU5MiwgMjUwNjc1MiwgMCwgMjAyMCwgMjE1ODU5MiwgMjU5Mjc2OCwgMjYyNTUzNiwgMjIwNzc0NCwgMjIwNzc0NCwgMjY3NDY4OCwgMjczNjEyOCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjkxMjI1NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgNTQyLCAwLCA1NDQsIDIyMDc3NDQsIDMxMDg4NjQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxMzM0NDAsIDMxNDU3MjgsIDMxNTM5MjAsIDIzNzU2ODAsIDIzNzk3NzYsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MjA3MzYsIDIxNTg1OTIsIDI0NDk0MDgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxODY2ODgsIDIxNTg1OTIsIDAsIDY0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjM2NzQ4OCwgMjE1ODU5MiwgMjQ5ODU2MCwgMjE1ODU5MiwgMjE1ODU5MiwgMTYyMSwgMjE1ODU5MiwgMjE1ODU5MiwgMjU2ODE5MiwgMjE1ODU5MiwgMjU5Mjc2OCwgMjYyNTUzNiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY3NDY4OCwgMCwgMCwgMCwgMCwgMCwgMTYwOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDcsIDk3LCA5NywgMTExMCwgOTcsIDk3LCAzMTMzNDQwLCAzMTQ1NzI4LCAzMTUzOTIwLCAyMTU4NTkyLCAyNDA4NDQ4LCAyNDE2NjQwLCAyMTU4NTkyLCAyNDY1NzkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDE0NjU2LCAyMTU4NTkyLCAyMTU4NTkyLCAzMDUxNTIwLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTAwNjcyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTIxMTUyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTQ5ODI0LCAyNDE2NjQwLCAyMjA3NzQ0LCAyNDY1NzkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjMzNzI4LCAyNjU4MzA0LCAyNzQwMjI0LCAyNzQ0MzIwLCAyODM0NDMyLCAyOTQ5MTIwLCAyMTU4NTkyLCAyOTg1OTg0LCAyMTU4NTkyLCAyOTk4MjcyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTI5MzQ0LCAyMjA3NzQ0LCAyNDA4NDQ4LCAyOTQ5MTIwLCAyMjA3NzQ0LCAyOTg1OTg0LCAyMjA3NzQ0LCAyOTk4MjcyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTI5MzQ0LCAyMTU4NTkyLCAyNDA4NDQ4LCAyNDE2NjQwLCAyMTU4NTkyLCAyNDY1NzkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTg2Njg4LCAyMTU4NTkyLCAwLCAzMjc2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM2NzQ4OCwgMjk0OTEyMCwgMjE1ODU5MiwgMjk4NTk4NCwgMjE1ODU5MiwgMjk5ODI3MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzEyOTM0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ3ODA4MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjUzNTQyNCwgMjU0MzYxNiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzExNzA1NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ3ODA4MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjY5OTI2NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjc0ODQxNiwgMjc1NjYwOCwgMjc3NzA4OCwgMjgwMTY2NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMCwgMCwgMCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMCwgMCwgMjUzNTcwOSwgMjU0MzkwMSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMCwgMCwgMCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjk5MDM2NSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjU3MjQyNiwgMjIwNzc0NCwgMjUzNTQyNCwgMjU0MzYxNiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzExNzA1NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ3ODA4MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjk5MDA4MCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ4MjE3NiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMjE1ODU5MiwgMjkwODE2MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjk3Nzc5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAzOTIzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAxMDU2MCwgMjIwNzc0NCwgMjQyODkyOCwgMjIwNzc0NCwgMjUxNDk0NCwgMjIwNzc0NCwgMjU4ODY3MiwgMjIwNzc0NCwgMjgzODUyOCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzAxMDU2MCwgMjE1ODU5MiwgMjQyODkyOCwgMjE1ODU5MiwgMjUxNDk0NCwgMCwgMCwgMjE1ODU5MiwgMjU4ODY3MiwgMjE1ODU5MiwgMCwgMjgzODUyOCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAxMDU2MCwgMjE1ODU5MiwgMjUwNjc1MiwgMjE1ODU5MiwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDAsIDAsIDI5MzE1LCA5MjIsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM5LCA0NSwgMzAwNjQ2NCwgMjM4Mzg3MiwgMCwgMjAyMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAwNjQ2NCwgMjE1ODU5MiwgMjYzNzgyNCwgMjk1MzIxNiwgMjE1ODU5MiwgMjIwNzc0NCwgMjYzNzgyNCwgMjk1MzIxNiwgMjIwNzc0NCwgMCwgMCwgMjE1ODU5MiwgMjYzNzgyNCwgMjk1MzIxNiwgMjE1ODU5MiwgMjUzOTUyMCwgMjE1ODU5MiwgMjUzOTUyMCwgMjIwNzc0NCwgMCwgMCwgMjUzOTUyMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMjUwNjc1MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODU5MiwgMjUwNjc1MiwgMCwgMCwgMjE1ODU5MiwgMjIwNzc0NCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMCwgMjE1ODU5MiwgMjk2NTUwNCwgMjk2NTUwNCwgMjk2NTUwNCwgMCwgMCwgMCwgMCwgMCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjQ3NDI2OSwgMjE1ODg3NywgMjE1ODg3NywgMCwgMCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjYzNDAxMywgMjY1ODU4OSwgMCwgMCwgMjc0MDUwOSwgMjc0NDYwNSwgMCwgMjgzNDcxNywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyOCwgOTAxNDMsIDk0MjQyLCAxMTg4MjAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMTE4ODIwLCAxMTg4MjAsIDExODgyMCwgNDA5NzYsIDE4LCAxOCwgMzY4ODQsIDAsIDAsIDAsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDI3LCA5MDE0MywgMCwgMCwgODYwMTYsIDAsIDAsIDIyMTE4NDAsIDEwMjQzOSwgMCwgMCwgMCwgOTgzNDcsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNTgwMTYsIDAsIDIzNzU2ODAsIDIzNzk3NzYsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MjA3MzYsIDIxNTg1OTIsIDI0NDk0MDgsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDk0MjQyLCAwLCAwLCAwLCAyMjExODQwLCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDEzNSwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU2NDA5NiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU5Njg2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY0MTkyMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjc4MTE4NCwgMjc5MzQ3MiwgMjQ5NDQ2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjUyMzEzNiwgMjUyNzIzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjU3NjM4NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDAsIDI3LCAyNywgMCwgMjE1ODU5MiwgMjQ5ODU2MCwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjU2ODE5MiwgMjE1ODU5MiwgMjU5Mjc2OCwgMjYyNTUzNiwgMjE1ODU5MiwgMjE1ODU5MiwgMjY3NDY4OCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ3Mzk4NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ5NDQ2NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAwNjQ2NCwgMjM4Mzg3MiwgMCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzAwNjQ2NCwgMjE1ODU5MiwgMjYzNzgyNCwgMjk1MzIxNiwgMjE1ODU5MiwgMjIwNzc0NCwgMjYzNzgyNCwgMjk1MzIxNiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgMTQ3NDg4LCA5NDI0MiwgMTQ3NDU2LCAxNDc0ODgsIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDE0NzQ1NiwgNDA5NzYsIDE4LCAxOCwgMzY4ODQsIDAsIDQ1MDc4LCAwLCAyNCwgMjQsIDI0LCAyNywgMjcsIDI3LCAyNywgMCwgODE5MjAsIDAsIDk0MjQyLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDI4OTI4LCAyMTU4NTkyLCAyNTE0OTQ0LCAyMTU4NTkyLCAyNTg4NjcyLCAyMTU4NTkyLCAyODM4NTI4LCAyMTU4NTkyLCAyMTU4NTkyLCA0MDk3NiwgMTgsIDE1MTU3MywgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDAsIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAwLCA0NTA3OCwgMCwgMjQsIDI0LCAyNCwgMjcsIDI3LCAyNywgMjcsIDkwMTQzLCAwLCAwLCAxMzE1LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ4NywgOTcsIDE4LCAxMzE0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCAwLCAwLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTMwLCA5NDI0MiwgMCwgMCwgMCwgMjIxMTg0MCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMDk2NTc2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4NTkyLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgNjQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTg2Njg4LCAyMjA3NzQ0LCAwLCAxMDgwLCAwLCAxMDg0LCAwLCAxMDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTMxNDY2LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNjE3NDgyLCAwLCA5NDI0MiwgMCwgMCwgMCwgMjIxMTg0MCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNzgxMTg0LCAyNzkzNDcyLCAyMTU4NTkyLCAyODE4MDQ4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgMTU5Nzc5LCAxNTk3NDQsIDEwMjQzOSwgMTU5Nzc5LCA5ODM0NywgMCwgMCwgMTU5NzQ0LCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDAsIDIyMjQyNTMsIDE3MjAzMiwgMjIyNDI1MywgMjIzMjQ0OCwgMjIzMjQ0OCwgMTcyMDMyLCAyMjMyNDQ4LCA5MDE0MywgMCwgMCwgMjE3MDg4MCwgMCwgMCwgNTUwLCA4MjksIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIzODc5NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDEyNCwgMTI0LCAxMjcsIDEyNywgMTI3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjUsIDI5LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTYzOTMxLCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDI0OTg1NiwgMjQsIDI0LCAyNCwgMjcsIDI3LCAyNywgMjcsIDkwMTQzLCAwLCAwLCAyMTcwODgwLCAwLCAwLCA4MjcsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIzODc5NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDQwOTc2LCAwLCA0MjQzODEwLCA0MjQzODEwLCAyNCwgMjQsIDI3LCAyNywgMjcsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjY3ODQsIDAsIDAsIDAsIDAsIDU3MzQ0LCAyODYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI3MDc0NTYsIDI3MzIwMzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI4MjIxNDQsIDI4MjYyNDAsIDIxNTg1OTIsIDI4OTU4NzIsIDIxNTg1OTIsIDIxNTg1OTIsIDI5MjQ1NDQsIDIxNTg1OTIsIDIxNTg1OTIsIDI5NzM2OTYsIDIxNTg1OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxODY2ODgsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDUzMjQ4LCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE0OTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2Njc4NCwgNTQ2LCAwLCAwLCAwLCAwLCAyODYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDE3LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAyMDQ4MCwgMTIwLCAxMjEsIDE4LCAxOCwgMzY4ODQsIDAsIDQ1MDc4LCAwLCAyNCwgMjQsIDI0LCAyNywgMjcsIDI3LCAyNywgOTAxNDMsIDAsIDAsIDIxNzA4ODAsIDAsIDUzMjQ4LCA1NTAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIzODc5NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDQwOTc2LCAxOTY2MDgsIDE4LCAyNjYyNDAsIDI0LCAyNCwgMjcsIDI3LCAyNywgMCwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQwNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5OSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzY2LCA2NywgNjcsIDY3LCAxNzY3LCA2NywgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDAsIDIxNjY3ODQsIDU0NiwgMCwgNTM1MzEsIDUzNTMxLCAwLCAyODYsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NDMsIDU3ODg5LCAwLCAyMTcwODgwLCAwLCAwLCA1NTAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg1NiwgNDUsIDE4NTgsIDE4NTksIDY3LCA2NywgNjcsIDEwMDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAyMSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzY3NzczLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNjk5NTQ5LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNzQ4NzAxLCAyNzU2ODkzLCAyNzc3MzczLCAyODAxOTQ5LCA5NywgMTExNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyNiwgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NzAsIDk3LCA5NywgNjcsIDY3LCA2NywgMTQ2MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1NzksIDY3LCA2NywgOTcsIDk3LCA5NywgMTUxOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwNCwgOTA1LCA5NywgOTcsIDk3LCA5NywgMTYyMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1LCAxNjc5LCA2NywgNjcsIDY3LCAxNjgyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjkwLCA2NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNjcsIDY3LCAwLCAwLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDY2OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg5LCA0NSwgNDUsIDQ1LCAxNzQ4LCA0NSwgNDUsIDQ1LCAxNzQ5LCAxNzUwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxOTU5LCA2NywgNjcsIDY3LCA2NywgMTc2OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzkxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MDIsIDY3LCAxODE3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODIzLCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgMTg0OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODYzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg3OCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTk3MywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNjUsIDk3LCAxMTY3LCA2NywgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDAsIDIxNjY3ODQsIDAsIDAsIDUzNTMxLCA1MzUzMSwgMCwgMjg2LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMTc4OSwgOTcsIDAsIDk0MjQyLCAwLCAwLCAwLCAyMjExODQwLCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDEzNiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMzE1ODAxNiwgMjI5Mzc2LCAyMzc1NjgwLCAyMzc5Nzc2LCAyMTU4NTkyLCAyMTU4NTkyLCAyNDIwNzM2LCAyMTU4NTkyLCAyNDQ5NDA4LCAyMTU4NTkyLCAyMTU4NTkyLCA2NywgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDAsIDI4MCwgNTQ3LCAwLCA1MzUzMSwgNTM1MzEsIDAsIDI4NiwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAxNzg4LCA5NywgOTcsIDAsIDk3LCAyMDI0LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMzUsIDY3LCA2NywgNjcsIDY3LCA2NywgNTc4ODksIDU0NywgNTQ3LCAwLCAwLCA1NTAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDE3OTksIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDAsIDEzMTEyLCAwLCA1NDA3NCwgMCwgMCwgMTA5MiwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE2MTIsIDk3LCA5NywgOTcsIDk3LCAxNjE2LCA5NywgMTI5NywgMTQ3MiwgMCwgMCwgMCwgMCwgMTMwMywgMTQ3NCwgMCwgMCwgMCwgMCwgMTMwOSwgMTQ3NiwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTQ4MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ4OCwgOTcsIDAsIDE0NzQsIDAsIDE0NzYsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjA3LCA5NywgOTcsIDk3LCA5NywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI2LCAzMCwgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDIxMzA4MCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDE0MzQ0OCwgNDA5NzYsIDE4LCAxOCwgMzY4ODQsIDAsIDQ1MDc4LCAwLCAyNCwgMjQsIDI0LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE0ODIsIDk3LCAxNDgzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzI2LCA5NywgOTcsIDEzMjksIDEzMzAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTksIDExNjAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTkwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE5NzQsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjQ3NDEyMiwgMjE1ODczMCwgMjE1ODczMCwgMjQ5NDYwMiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjgwOTk5NCwgMjE1ODczMCwgMjE1ODczMCwgMjg0Mjc2MiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjkwMDEwNiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzAxNDc5NCwgMjE1ODczMCwgMjE1ODczMCwgMzA1MTY1OCwgMjE1ODczMCwgMjE1ODczMCwgMzEwMDgxMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzA5NjcxNCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjU3MjI4OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgNTQxLCA1NDEsIDU0MywgNTQzLCAwLCAwLCAyMTY2Nzg0LCAwLCA1NDgsIDU0OSwgNTQ5LCAwLCAyODYsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI4NjMzODksIDI4OTIwNjEsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxODY5NzMsIDIxNTg4NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNjc2MjYsIDIxNTg4NzcsIDI0MDQ2MzcsIDI0MTI4MjksIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI1NjQzODEsIDIxNTg4NzcsIDIxNTg4NzcsIDI2MDUzNDEsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2NzkwNjksIDIxNTg4NzcsIDI2OTU0NTMsIDIxNTg4NzcsIDI3MDM2NDUsIDIxNTg4NzcsIDI3MTE4MzcsIDI3NTI3OTcsIDIxNTg4NzcsIDAsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIzODQwMTAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMwMDY2MDIsIDIzODM4NzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMwOTY1NzYsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNjI2ODgsIDAsIDAsIDIxNTg4NzcsIDI3ODU1NjUsIDIxNTg4NzcsIDI4MTAxNDEsIDIxNTg4NzcsIDIxNTg4NzcsIDI4NDI5MDksIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI5MDAyNTMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI1MzE2MTMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2MTc2MjksIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg3MzAsIDI4MTgxODYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMxMDUwNTMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDAsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDE2MTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDk2LCA5NywgOTcsIDE0OTksIDk3LCA5NywgOTcsIDk3LCA5NywgMjQ0MTM1NCwgMjQ0NTQ1MCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjUwMjc5NCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjQzMzE2MiwgMjE1ODczMCwgMjQ1MzY0MiwgMjQ2MTgzNCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjU4MDYxOCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjYyMTU3OCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjY5OTQwMiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjY3ODkyMiwgMjE1ODczMCwgMjY5NTMwNiwgMjE1ODczMCwgMjcwMzQ5OCwgMjE1ODczMCwgMjcxMTY5MCwgMjc1MjY1MCwgMjE1ODczMCwgMjE1ODczMCwgMjc4NTQxOCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzExMzA5OCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzE4NjgyNiwgMjE1ODczMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjc4MTE4NCwgMjc5MzQ3MiwgMjIwNzc0NCwgMjgxODA0OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgNTQxLCAwLCA1NDMsIDIxNTg4NzcsIDI1MDI5NDEsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI1ODA3NjUsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2MjE3MjUsIDIxNTg4NzcsIDMwMTkwMzcsIDIxNTg4NzcsIDMwNDM2MTMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMwODA0NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMxMTMyNDUsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDAsIDIxNTg4NzcsIDI5MDg0NDUsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI5NzgwNzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDMwMzk1MTcsIDIxNTg4NzcsIDIxNTg3MzAsIDI1MTA5ODYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI1ODQ3MTQsIDIxNTg3MzAsIDI2MDkyOTAsIDIxNTg3MzAsIDIxNTg3MzAsIDI2Mjk3NzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIzODgxMDYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI2MDUxOTQsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI2ODcxMTQsIDIxNTg3MzAsIDI3MTU3ODYsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI4NjczMzgsIDIxNTg3MzAsIDI5MDQyMDIsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI2NDIwNTgsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI3ODEzMjIsIDI3OTM2MTAsIDIxNTg3MzAsIDMxMjEyOTAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMxNDk5NjIsIDIxNTg3MzAsIDIxNTg3MzAsIDMxNzA0NDIsIDMxNzQ1MzgsIDIxNTg3MzAsIDIzNjc0ODgsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0NDEyMTYsIDI0NDUzMTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1MDI2NTYsIDIxNTg4NzcsIDI0MzMzMDksIDIxNTg4NzcsIDI0NTM3ODksIDI0NjE5ODEsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI1MTExMzMsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI1ODQ4NjEsIDIxNTg4NzcsIDI2MDk0MzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2Mjk5MTcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI2ODcyNjEsIDIxNTg4NzcsIDI3MTU5MzMsIDIxNTg4NzcsIDIxNTg3MzAsIDIxNTg3MzAsIDI5NzM4MzQsIDIxNTg3MzAsIDI5ODIwMjYsIDIxNTg3MzAsIDIxNTg3MzAsIDMwMDI1MDYsIDIxNTg3MzAsIDMwNDc1NjIsIDMwNjM5NDYsIDMwNzYyMzQsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDIyMDc3NDQsIDI1MDY3NTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIxNTg4NzcsIDI1MDcwMzcsIDAsIDAsIDIxNTg4NzcsIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDMyMDMyMTAsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI0MjQ4MzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI1NjQwOTYsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDI3MDc3NDEsIDI3MzIzMTcsIDIxNTg4NzcsIDIxNTg4NzcsIDIxNTg4NzcsIDI4MjI0MjksIDI4MjY1MjUsIDIxNTg4NzcsIDI4OTYxNTcsIDIxNTg4NzcsIDIxNTg4NzcsIDI5MjQ4MjksIDIxNTg4NzcsIDIxNTg4NzcsIDI5NzM5ODEsIDIxNTg4NzcsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCA2NDIsIDAsIDIxNTg1OTIsIDAsIDQ1LCAxNTI5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1NSwgNDUsIDY3LCA2NywgMjk4MjE3MywgMjE1ODg3NywgMjE1ODg3NywgMzAwMjY1MywgMjE1ODg3NywgMzA0NzcwOSwgMzA2NDA5MywgMzA3NjM4MSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMzIwMzM1NywgMjUyMzI3NCwgMjUyNzM3MCwgMjE1ODczMCwgMjE1ODczMCwgMjU3NjUyMiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjkwODI5OCwgMjQ5NDc0OSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjUyMzQyMSwgMjUyNzUxNywgMjE1ODg3NywgMjE1ODg3NywgMjU3NjY2OSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgNDMyMTI4MCwgMjIyNDI1MywgMjIzMjQ0OCwgNDMyOTQ3MiwgMjIzMjQ0OCwgMjE1ODczMCwgMjQ5ODY5OCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjU2ODMzMCwgMjE1ODczMCwgMjU5MjkwNiwgMjYyNTY3NCwgMjE1ODczMCwgMjE1ODczMCwgMjY3NDgyNiwgMjczNjI2NiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjE1ODczMCwgMjkxMjM5NCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzEwOTAwMiwgMjE1ODczMCwgMjE1ODczMCwgMzEzMzU3OCwgMzE0NTg2NiwgMzE1NDA1OCwgMjM3NTY4MCwgMjIwNzc0NCwgMzEwODg2NCwgMjIwNzc0NCwgMjIwNzc0NCwgMzEzMzQ0MCwgMzE0NTcyOCwgMzE1MzkyMCwgMjM3NTk2NSwgMjM4MDA2MSwgMjE1ODg3NywgMjE1ODg3NywgMjQyMTAyMSwgMjE1ODg3NywgMjQ0OTY5MywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMzExNzM0MSwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMzEwNDkwNiwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODg3NywgMjQ5ODg0NSwgMjE1ODg3NywgMjE1ODg3NywgMCwgMjE1ODg3NywgMjE1ODg3NywgMjU2ODQ3NywgMjE1ODg3NywgMjU5MzA1MywgMjYyNTgyMSwgMjE1ODg3NywgMjE1ODg3NywgMjY3NDk3MywgMCwgMCwgMCwgMCwgOTcsIDk3LCAxNDgwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE0ODUsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgMTcyOSwgOTcsIDE3MzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUyMCwgOTcsIDk3LCAxNTIzLCA5NywgOTcsIDE1MjYsIDk3LCAyNzM2NDEzLCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAyMTU4ODc3LCAyOTEyNTQxLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTA5MTQ5LCAyMTU4ODc3LCAyMTU4ODc3LCAzMDE0OTQxLCAyMTU4ODc3LCAyMTU4ODc3LCAzMDUxODA1LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTAwOTU3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTIxNDM3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTUwMTA5LCAzMTMzNzI1LCAzMTQ2MDEzLCAzMTU0MjA1LCAyMTU4NzMwLCAyNDA4NTg2LCAyNDE2Nzc4LCAyMTU4NzMwLCAyNDY1OTMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDE4ODkwLCAyMTU4NzMwLCAzMDQzNDY2LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDgwMzMwLCAyNjMzODY2LCAyNjU4NDQyLCAyNzQwMzYyLCAyNzQ0NDU4LCAyODM0NTcwLCAyOTQ5MjU4LCAyMTU4NzMwLCAyOTg2MTIyLCAyMTU4NzMwLCAyOTk4NDEwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTI5NDgyLCAyMjA3NzQ0LCAyNDA4NDQ4LCAyOTQ5MTIwLCAyMjA3NzQ0LCAyOTg1OTg0LCAyMjA3NzQ0LCAyOTk4MjcyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTI5MzQ0LCAyMTU4ODc3LCAyNDA4NzMzLCAyNDE2OTI1LCAyMTU4ODc3LCAyNDY2MDc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTcwNTg5LCAzMTc0Njg1LCAyMTU4ODc3LCAwLCAwLCAwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNDI0OTcwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNzA3NTk0LCAyNzMyMTcwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyODIyMjgyLCAyODI2Mzc4LCAyMTU4NzMwLCAyODk2MDEwLCAyMTU4NzMwLCAyMTU4NzMwLCAyOTI0NjgyLCAyOTQ5NDA1LCAyMTU4ODc3LCAyOTg2MjY5LCAyMTU4ODc3LCAyOTk4NTU3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTI5NjI5LCAyMTU4NzMwLCAyMTU4NzMwLCAyNDc4MjE4LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTM1NTYyLCAyNTQzNzU0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTE3MTk0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNDc4MDgwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDE0NjU2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDUxNTIwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTAwNjcyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTIxMTUyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNTg0NTc2LCAyMjA3NzQ0LCAyNjA5MTUyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjI5NjMyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNjg2OTc2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNTM1NDI0LCAyNTQzNjE2LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMTE3MDU2LCAyMTU4ODc3LCAyMTU4ODc3LCAyNDc4MzY1LCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4NzMwLCAyMTU4NzMwLCAyNDgyMzE0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMzg3OTY4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAwLCA4MjMsIDAsIDgyNSwgMjE1ODczMCwgMjE1ODczMCwgMjE1ODczMCwgMjk5MDIxOCwgMjE1ODczMCwgMjE1ODczMCwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ4MjE3NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2MjY4OCwgMTM1LCAwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyOTkwMDgwLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMTU4ODc3LCAyMTU4ODc3LCAyNDgyNDYxLCAyMTU4ODc3LCAyMTU4ODc3LCAwLCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4NzMwLCAyNDI5MDY2LCAyMTU4NzMwLCAyNTE1MDgyLCAyMTU4NzMwLCAyNTg4ODEwLCAyMTU4NzMwLCAyODM4NjY2LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDEwNjk4LCAyMjA3NzQ0LCAyNDI4OTI4LCAyMjA3NzQ0LCAyNTE0OTQ0LCAyMjA3NzQ0LCAyNTg4NjcyLCAyMjA3NzQ0LCAyODM4NTI4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAzMDEwNTYwLCAyMTU4ODc3LCAyNDI5MjEzLCAyMTU4ODc3LCAyNTE1MjI5LCAwLCAwLCAyMTU4ODc3LCAyNTg4OTU3LCAyMTU4ODc3LCAwLCAyODM4ODEzLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMDEwODQ1LCAyMTU4NzMwLCAyNTA2ODkwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNzQ4NTU0LCAyNzU2NzQ2LCAyNzc3MjI2LCAyODAxODAyLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyODYzMjQyLCAyODkxOTE0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTY0MjM0LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyNTk3MDAyLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDA2NDY0LCAyMzg0MTU3LCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMDA2NzQ5LCAyMTU4NzMwLCAyNjM3OTYyLCAyOTUzMzU0LCAyMTU4NzMwLCAyMjA3NzQ0LCAyNjM3ODI0LCAyOTUzMjE2LCAyMjA3NzQ0LCAwLCAwLCAyMTU4ODc3LCAyNjM4MTA5LCAyOTUzNTAxLCAyMTU4ODc3LCAyNTM5NjU4LCAyMTU4NzMwLCAyNTM5NTIwLCAyMjA3NzQ0LCAwLCAwLCAyNTM5ODA1LCAyMTU4ODc3LCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyOTc3OTMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMDM5MzcwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAyMTU4NzMwLCAzMTU4MTU0LCAyMjA3NzQ0LCAwLCAyMTU4ODc3LCAyMTU4NzMwLCAyMjA3NzQ0LCAwLCAyMTU4ODc3LCAyMTU4NzMwLCAyMjA3NzQ0LCAwLCAyMTU4ODc3LCAyOTY1NjQyLCAyOTY1NTA0LCAyOTY1Nzg5LCAwLCAwLCAwLCAwLCAxMzE1LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ4NCwgOTcsIDk3LCA5NywgOTcsIDIxNTg1OTIsIDE4LCAwLCAxMjI4ODAsIDAsIDAsIDAsIDc3ODI0LCAwLCAyMjExODQwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAwLCAzNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI4ODA5LCAwLCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE0MjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQzMiwgNjcsIDY3LCA2NywgMzEwNDc2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMTIyODgwLCAwLCAwLCAwLCAwLCAxMzE1LCAwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzIyLCA1NTAsIDAsIDI4NiwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQyNDgzMiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCA0MzI5NDcyLCAyNywgMjcsIDIyMDc3NDQsIDIyMDc3NDQsIDI5Nzc3OTIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMwMzkyMzIsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDIyMDc3NDQsIDMxNTgwMTYsIDU0MiwgMCwgMCwgMCwgNTQyLCAwLCA1NDQsIDAsIDAsIDAsIDU0NCwgMCwgNTUwLCAwLCAwLCAwLCAwLCAwLCA5NywgOTcsIDE2MTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODk4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MjQ4MzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMjM3NTY4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDIwNDgwLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTkyNTEyLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgOTQsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCA5NiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDEyMzc4LCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDAsIDI0LCAyNCwgMjQsIDEyNiwgMTI2LCAxMjYsIDEyNiwgOTAxNDMsIDAsIDAsIDIxNzA4ODAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIzODc5NjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIwNDgwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMjQxNjY0LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDIwNTY4LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjAwNzk3LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjA0ODAsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMCwgMCwgNDQsIDAsIDAsIDIwNTc1LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDQxLCA0MSwgNDEsIDAsIDAsIDExMjY0MDAsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAwLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgODksIDQwOTc2LCAxOCwgMTgsIDM2ODg0LCAwLCA0NTA3OCwgMCwgMjQsIDI0LCAyNCwgMjcsIDEzMTIwMSwgMjcsIDI3LCA5MDE0MywgMCwgMCwgMjE3MDg4MCwgMCwgMCwgNTUwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMzg3OTY4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDQxMjE2LCAyNDQ1MzEyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCA5NDI0MiwgMCwgMCwgMjA4ODk2LCAyMjExODQwLCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxODY2ODgsIDIxNTg1OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNjc0ODgsIDMyNzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDMzMDI0LCAyMTU4NTkyLCAyNDUzNTA0LCAyNDYxNjk2LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNTEwODQ4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCA0MDk3NiwgMTgsIDM2ODg0LCAyNDU3ODMsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDIwNDgwLCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjIxMTg0LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMTgwMjI0LCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMTU1NjQ4LCA0NTA3OCwgMCwgMjQsIDI0LCAyMTcwODgsIDI3LCAyNywgMjcsIDIxNzA4OCwgOTAxNDMsIDAsIDAsIDIxNzA4ODAsIDAsIDAsIDgyOCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjM4Nzk2OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjM4Nzk2OCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2MjY4OCwgMjMzNDcyLCAwLCAwLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzE4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjcsIDEzMTQyNywgMCwgMCwgMCwgMCwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgwOCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDAsIDAsIDk3LCA2NywgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDU3ODg5LCAwLCAwLCAwLCA1MzUzMSwgNTM1MzEsIDM2NywgMjg2LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3ODcsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDIwMjksIDQ1LCA2NywgNjcsIDY3LCA2NywgMjAzMywgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgMTc5OCwgNDUsIDQ1LCAxODAwLCA0NSwgNDUsIDAsIDE0NzIsIDAsIDAsIDAsIDAsIDAsIDE0NzQsIDAsIDAsIDAsIDAsIDAsIDE0NzYsIDAsIDAsIDAsIDAsIDEzMTUsIDAsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxMzIwLCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxNzg2LCA5NywgMCwgMCwgOTcsIDk3LCAwLCAxNzkwLCAxNTI3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NjMsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgNTc4ODksIDI4MSwgMCwgMCwgNTM1MzEsIDUzNTMxLCAzNjcsIDI4NiwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAxNzg1LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCAxOTc5LCA5NywgOTcsIDQ1LCA0NSwgMTk4MywgNDUsIDE5ODQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjUyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjkwLCA0NSwgNDUsIDY5NCwgNDUsIDQ1LCA0MDk3NiwgMTksIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMCwgMCwgMjYyMTQ0LCA0MDk3NiwgMTgsIDM2ODg0LCA0NTA3OCwgMjQsIDI3LCA5MDE0MywgOTQyNDIsIDM4LCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDQ2LCA2NywgOTgsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMzgsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgNDUsIDY3LCA5NywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDI1ODA0OCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAwLCAxMDI0MzksIDEwNjUzOCwgOTgzNDcsIDAsIDAsIDExMjI0MjMsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTExNDE1MiwgMTExNDE1MiwgMTExNDE1MiwgMCwgMCwgMTExNDExMiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzNywgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCAyMDQ4MDAsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCAwLCAwLCA1NzQzNiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgMzMsIDMzLCAwLCAzMywgMzMsIDMzLCAwLCAwLCAwLCA0MDk3NiwgMTgsIDE4LCAzNjg4NCwgMCwgNDUwNzgsIDAsIDEyNCwgMTI0LCAxMjQsIDEyNywgMTI3LCAxMjcsIDEyNywgOTAxNDMsIDAsIDAsIDIxNzA4ODAsIDAsIDAsIDU1MCwgMCwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjM4ODI1MywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjc4MTQ2OSwgMjc5Mzc1NywgMjE1ODg3NywgMjgxODMzMywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjg2NzQ4NSwgMjE1ODg3NywgMjkwNDM0OSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMzA5Njg2MSwgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjQ0MTUwMSwgMjQ0NTU5NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgMjE1ODg3NywgNDA5NzYsIDEyMiwgMTIzLCAzNjg4NCwgMCwgNDUwNzgsIDAsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDI3LCA5MDE0MywgMCwgOTIxLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5MzYsIDIxNTg1OTIsIDQyNDM4MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5MzUsIDQ1LCA0NSwgNDUsIDcxNSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTgyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDMwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQwOTc2LCAxOCwgMzY4ODQsIDQ1MDc4LCAyNCwgMjcsIDkwMTQzLCA5NDI0MiwgMzgsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgNDcsIDY4LCA5OSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA0OCwgNjksIDEwMCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA0OSwgNzAsIDEwMSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1MCwgNzEsIDEwMiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1MSwgNzIsIDEwMywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1MiwgNzMsIDEwNCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1MywgNzQsIDEwNSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1NCwgNzUsIDEwNiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1NSwgNzYsIDEwNywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1NiwgNzcsIDEwOCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1NywgNzgsIDEwOSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1OCwgNzksIDExMCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA1OSwgODAsIDExMSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2MCwgODEsIDExMiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2MSwgODIsIDExMywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2MiwgODMsIDExNCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2MywgODQsIDExNSwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2NCwgODUsIDExNiwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2NSwgODYsIDExNywgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAzOCwgMTAyNDM5LCAxMDY1MzgsIDk4MzQ3LCA2NiwgODcsIDExOCwgNDA5NzYsIDE4LCAzNjg4NCwgNDUwNzgsIDI0LCAyNywgOTAxNDMsIDk0MjQyLCAxMTg4MjAsIDEwMjQzOSwgMTA2NTM4LCA5ODM0NywgMTE4ODIwLCAxMTg4MjAsIDExODgyMCwgNDA5NzYsIDE4LCAxOCwgMCwgMCwgNDUwNzgsIDAsIDI0LCAyNCwgMjQsIDI3LCAyNywgMjcsIDI3LCA5MDE0MywgMCwgMCwgMTMxNCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzIxLCA5NywgMTgsIDEzMTQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAzNjUsIDAsIDM2NywgMCwgMCwgMTMxNSwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjAsIDk3LCA5NywgMTMxLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgNDUsIDE0NSwgMTQ5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NCwgNDUsIDE3OSwgNDUsIDE4NSwgNDUsIDE4OCwgNDUsIDQ1LCAyMDIsIDY3LCAyNTUsIDY3LCA2NywgMjY5LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDk3LCAyOTIsIDI5NiwgOTcsIDk3LCA5NywgOTcsIDk3LCAzMjEsIDk3LCAzMjYsIDk3LCAzMzIsIDk3LCAxOCwgMTMxNDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDM2NSwgMjkzMTUsIDM2NywgNjQ2LCAzMzUsIDk3LCA5NywgMzQ5LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDM3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxMSwgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgNjIwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUwMSwgMTUwMiwgOTcsIDc5MywgNjcsIDY3LCA3OTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDgsIDY3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgMjA1MiwgNjcsIDY3LCA2NywgNjcsIDgxMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDU3ODg5LCAwLCAwLCA1NDA3NCwgNTQwNzQsIDU1MCwgODMwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg0MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1ODksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg5MSwgOTcsIDk3LCA4OTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDYsIDQ1LCA5MzcsIDQ1LCA0NSwgOTQwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzM0LCA3MzUsIDY3LCA3MzcsIDY3LCA3MzgsIDY3LCA3NDAsIDY3LCA2NywgNjcsIDQ1LCA5NjcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDM1LCA0NSwgNDUsIDQ1LCA5ODAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MTUsIDQ1LCA0NSwgNjcsIDY3LCAxMDI0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMTA4MSwgMTMxMTIsIDEwODUsIDU0MDc0LCAxMDg5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjMsIDAsIDI4ODA5LCAwLCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NzQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDE5MTMsIDY3LCAxOTE0LCA2NywgNjcsIDY3LCAxOTE4LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAxMTE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTY5LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDkyMSwgMCwgMTE3NSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTUzNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTM4LCA0NSwgNDUsIDQ1LCA0NSwgMTIzMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NDIsIDY3LCA0NSwgNDUsIDExOTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NTQsIDY3LCA2NywgNjcsIDY3LCAxMjQzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNTEsIDY3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDIwNTAsIDAsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNzMyLCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgNjcsIDY3LCA2NywgMTI4NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzcyLCA2NywgNjcsIDY3LCAxMjkzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MDQzNTIsIDI0MTI1NDQsIDEzMjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMzMSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzM3LCA5NywgMTM2NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3MywgOTcsIDE4LCAxMzE0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCA2NDcsIDQ1LCA0NSwgMTM4NywgNDUsIDQ1LCAxMzkxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDEwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDA3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0MSwgNDUsIDk0MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTUxLCA0NSwgNjcsIDE0MzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQ3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3ODIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDE0OTEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTczNiwgOTcsIDQ1LCA0NSwgMTU0MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3NywgNDUsIDQ1LCA2NywgMTU4MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3OTEsIDc5MiwgNjcsIDY3LCA2NywgNjcsIDE1OTgsIDY3LCAxNjAwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NzIsIDk3LCA5NywgOTcsIDE3MjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTEzLCA5NywgOTcsIDY3LCA2NywgOTcsIDE4NzksIDk3LCAxODgxLCA5NywgMCwgMTg4NCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTg0MiwgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAxOTI4LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MDMsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMTk3MSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDEzODEsIDQ1LCA0NSwgNDUsIDQ1LCAxOTc2LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NDcsIDgwOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgNTQyLCAxMzExMiwgNTQ0LCA5NywgOTA3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzOCwgMCwgMCwgMCwgMCwgMTQ3OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTUwLCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgNjcsIDEyNDQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDc3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjk0LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzI0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgMTM3NCwgOTcsIDk3LCA5NywgOTcsIDAsIDExNzUsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MDgsIDQ1LCA0NSwgMTkxMCwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTkxOSwgNjcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA0NSwgMjA0OCwgNjcsIDIwNDksIDAsIDAsIDk3LCAyMDUxLCA0NSwgNDUsIDQ1LCA5MzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM5NywgNDUsIDQ1LCA0NSwgMTkyMSwgNjcsIDY3LCAxOTIzLCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgMTk0NywgNDUsIDE5MzUsIDAsIDAsIDAsIDk3LCAxOTM5LCA5NywgOTcsIDE5NDEsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODIsIDM4OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODEwLCA0NSwgNDUsIDE4MTIsIDY3LCA2NywgNjcsIDY3LCA2NywgMjU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCAzMzYsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCAxMzE0MjcsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMzY1LCAyODgwOSwgMzY3LCAxMzksIDQ1LCA0NSwgMzcxLCAzNzMsIDQ1LCA0NSwgNDUsIDk1NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDEzLCA0NSwgNDUsIDQ1LCA0NTcsIDQ1OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzMsIDY3LCA0NzgsIDY3LCA2NywgNDgyLCA2NywgNjcsIDQ4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCAxODI4LCA5NywgNTU0LCA1NTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTcwLCA5NywgNTc1LCA5NywgOTcsIDU3OSwgOTcsIDk3LCA1ODIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMzAsIDk3LCA5NywgNjcsIDc0NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDg0NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU2LCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MzUsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjQyLCA5NywgMTY0NCwgOTcsIDk3LCA4OTAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA2NywgNjcsIDY3LCA2NywgMTA2NSwgMTA2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTYsIDY3LCA2NywgOTcsIDk3LCAxNTA1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTkzLCA5NywgOTcsIDAsIDE0NzQsIDAsIDE0NzYsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjE3LCA5NywgOTcsIDE2MzUsIDAsIDE2MzcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODg1LCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCAxNzA0LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY1LCA1NzIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTgzMiwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCAxOTQ2LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDE5MjYsIDk3LCAxOTI3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAxOTM0LCAyMDQzLCAwLCAwLCA5NywgOTcsIDk3LCAyMDQ3LCA0NSwgNDUsIDY3LCA2NywgMCwgMTgzMiwgOTcsIDk3LCA0NSwgNDUsIDQ1LCA5ODEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjcsIDQ1LCA0NSwgNDUsIDEzMTQyNywgMCwgMCwgMCwgMCwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgNDUsIDQ1LCAzNzIsIDQ1LCA0NSwgNDUsIDQ1LCAxNjYxLCAxNjYyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3MywgNDUsIDE2NzUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTQyNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzUsIDY3LCA2NywgNjcsIDY3LCA2NywgNDUsIDQxOCwgNDUsIDQ1LCA0MjAsIDQ1LCA0NSwgNDIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk1OSwgNDUsIDQ1LCA5NjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NTgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDgzLCA2NywgNjcsIDY3LCA2NywgNTA0LCA2NywgNjcsIDUwNiwgNjcsIDY3LCA1MDksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDU1NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1ODAsIDk3LCA5NywgOTcsIDk3LCA2MDEsIDk3LCA5NywgNjAzLCA5NywgOTcsIDYwNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODQ4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNDk4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDcxNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4OSwgOTkwLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDExLCA2NywgNjcsIDY3LCA2NywgMTAxNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NSwgNDUsIDExNzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMDAzLCAxMDA0LCA2NywgMTIxNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI4LCA2NywgMTQ2MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDM0LCA2NywgOTcsIDE1MTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODcxLCA5NywgNjcsIDY3LCA2NywgMTcwNSwgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcxNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgNDUsIDQ1LCAxMzgwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgMTg4NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDIwMDYsIDQ1LCA0NSwgMTkwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTIwLCA2NywgOTcsIDAsIDIwMzUsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDE0MjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0MzUsIDY3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgNDUsIDE0NiwgNDUsIDE1MiwgNDUsIDQ1LCAxNjUsIDQ1LCAxNzUsIDQ1LCAxODAsIDQ1LCA0NSwgMTg3LCAxOTAsIDE5NSwgNDUsIDIwMywgMjU0LCAyNTcsIDI2MiwgNjcsIDI3MCwgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDI4MSwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDk3LCAyOTMsIDk3LCAyOTksIDk3LCA5NywgMzEyLCA5NywgMzIyLCA5NywgMzI3LCA5NywgOTcsIDMzNCwgMzM3LCAzNDIsIDk3LCAzNTAsIDk3LCA5NywgMCwgNDA5NzYsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCA2NywgNDg0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDk5LCA5NywgNTgxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTk2LCA2NDgsIDQ1LCA2NTAsIDQ1LCA2NTEsIDQ1LCA2NTMsIDQ1LCA0NSwgNDUsIDY1NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk1NCwgNjcsIDY3LCA2NywgMTk1OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc2OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2ODAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg4LCA2ODksIDY5MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDcsIDQ1LCA0NSwgNDUsIDQ1LCA5NTIsIDQ1LCA0NSwgNjk4LCA2OTksIDQ1LCA0NSwgNzAyLCA3MDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTEsIDc0NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzU3LCA2NywgNjcsIDY3LCA2NywgNzYxLCA2NywgNjcsIDY3LCA2NywgNzY1LCA2NywgNzY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3NSwgNzc2LCA3NzgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc4NSwgNzg2LCA2NywgNjcsIDc4OSwgNzkwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCAxNzc1LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc5OCwgNjcsIDY3LCA2NywgODAyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjUsIDY3LCA2NywgMTQ2OCwgNjcsIDY3LCAxNDcxLCA2NywgNjcsIDgxMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODIxLCAyNTM5OCwgNTQyLCAxMzExMiwgNTQ0LCA1Nzg4OSwgMCwgMCwgNTQwNzQsIDU0MDc0LCA1NTAsIDAsIDgzMywgOTcsIDgzNSwgOTcsIDgzNiwgOTcsIDgzOCwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAyMDAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0MCwgNDUsIDQ1LCA0NSwgMTc0NCwgNDUsIDQ1LCA0NSwgOTcsIDg0MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODU1LCA5NywgOTcsIDk3LCA5NywgMCwgMTcxNywgMTcxOCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzIyLCA5NywgMCwgMCwgODU5LCA5NywgOTcsIDk3LCA5NywgODYzLCA5NywgODY1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg3MywgODc0LCA4NzYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg4MywgODg0LCA5NywgOTcsIDg4NywgODg4LCA5NywgMTgsIDEzMTQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMzYyLCAyMjUyODAsIDAsIDM2NSwgMCwgMzY3LCAwLCA0NSwgNDUsIDQ1LCAxNTMxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExOTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCA5MDgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxOSwgNjM4LCAwLCAwLCAwLCAwLCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNDI1MTE3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNTk3MTQ5LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyNjQyMjA1LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAyMTU4ODc3LCAzMTU4MzAxLCAwLCAyMzc1ODE4LCAyMzc5OTE0LCAyMTU4NzMwLCAyMTU4NzMwLCAyNDIwODc0LCAyMTU4NzMwLCAyNDQ5NTQ2LCAyMTU4NzMwLCAyMTU4NzMwLCA5NTMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk2NSwgOTc4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDI3LCA2NywgMTAyOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzcsIDEwNzgsIDY3LCA2NywgMjUzOTgsIDAsIDEzMTEyLCAwLCA1NDA3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY2LCAwLCAxMzksIDIxNTg3MzAsIDIxNTg3MzAsIDIxNTg3MzAsIDI0MDQ0OTAsIDI0MTI2ODIsIDExMTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjEsIDk3LCAxMTIzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDAsIDExNTUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYxNSwgMTE2OCwgOTcsIDk3LCAxMTcxLCAxMTcyLCA5NywgOTcsIDAsIDkyMSwgMCwgMTE3NSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTMzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjYzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODMsIDQ1LCA0NSwgNDUsIDQ1LCAyMDEsIDQ1LCA0NSwgNDUsIDEyMTksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQyNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjQyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDYsIDY3LCA2NywgMTI1NCwgNjcsIDEyNTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwNiwgODA3LCA2NywgNjcsIDk3LCAxMzM2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMTEsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1MSwgOTcsIDk3LCA5NywgMTM1NCwgOTcsIDk3LCA5NywgMTM1OSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDE2NDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4OTcsIDk3LCA5NywgOTcsIDkwMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzY2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3MSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgMTczMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTUsIDk3LCA5NywgOTcsIDk3LCAwLCAzNjAsIDAsIDY3LCA2NywgNjcsIDE0NDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTcsIDY3LCAxMDE5LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU5LCA5NywgOTcsIDk3LCAxNDkzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUyNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUwNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE1MTQsIDY3LCA2NywgNjcsIDY3LCAxNTg0LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1OTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3ODMsIDY3LCA2NywgNjcsIDc4OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU5OSwgMTYwMSwgNjcsIDY3LCA2NywgMTYwNCwgNjcsIDE2MDYsIDE2MDcsIDY3LCAxNDcyLCAwLCAxNDc0LCAwLCAxNDc2LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjE0LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCAxODUwLCA0NSwgNDUsIDQ1LCA0NSwgMTg1NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjIyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI5LCA5NywgMTYxOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjUsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMTE3NSwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAxNjMzLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTY0MywgMTY0NSwgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDE3ODQsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDE4OTQsIDE4OTUsIDk3LCAxODk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgMTY0OCwgOTcsIDE2NTAsIDE2NTEsIDk3LCAwLCA0NSwgNDUsIDQ1LCAxNjU0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY1OCwgNDUsIDQ1LCA0NSwgNDUsIDY2NCwgNDUsIDQ1LCAxNjU5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE4NywgNDUsIDQ1LCAxNjY5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCAxMDA1LCA2NywgNjcsIDE2ODEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjg2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzg0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTUsIDY3LCA2NywgNjcsIDY3LCAxMDYwLCA2NywgNjcsIDk3LCA5NywgMTcxMywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDEzNzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0NywgNDUsIDE1NDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCAxNzgwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCA0NSwgMjAyNywgMjAyOCwgNDUsIDQ1LCA2NywgNjcsIDIwMzEsIDIwMzIsIDY3LCA0NSwgNDUsIDE4MDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTkxNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MTksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgMTcwOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDE4NjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTcsIDY3LCA2NywgNjcsIDE4NzcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTgzOSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE5MzYsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE5NDMsIDE5NDQsIDE5NDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzAsIDQ1LCA0NSwgNDUsIDQ1LCA2NzQsIDQ1LCA0NSwgNDUsIDQ1LCA2NzgsIDQ1LCAxOTQ4LCA0NSwgMTk1MCwgNDUsIDQ1LCA0NSwgNDUsIDE5NTUsIDE5NTYsIDE5NTcsIDY3LCA2NywgNjcsIDE5NjAsIDY3LCAxOTYyLCA2NywgNjcsIDY3LCA2NywgMTk2NywgMTk2OCwgMTk2OSwgOTcsIDAsIDAsIDAsIDk3LCA5NywgMTk3NCwgOTcsIDAsIDE5MzYsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkwNiwgMCwgMTk3NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc0NiwgNDUsIDQ1LCA0NSwgNDUsIDIwMTEsIDY3LCA2NywgMjAxMywgNjcsIDY3LCA2NywgMjAxNywgOTcsIDk3LCAwLCAwLCAyMDIxLCA5NywgODE5MiwgOTcsIDk3LCAyMDI1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MTYsIDY3LCA2NywgNjcsIDY3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgMTQwLCA0NSwgNDUsIDQ1LCAxMTgwLCA0NSwgNDUsIDQ1LCA0NSwgMTE4NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4NywgNDUsIDM5MiwgNDUsIDQ1LCAzOTYsIDQ1LCA0NSwgMzk5LCA0NSwgNDUsIDY3LCAyMDcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDIzNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTYwMywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCA5NywgOTcsIDI4NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzE2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY1NiwgMTY1NywgNDUsIDM3NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA0NjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNDc0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgODE3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgOTcsIDk3LCA5NywgOTcsIDU1OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA1NzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg5NiwgOTcsIDk3LCA5NywgOTAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTIsIDkxNCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM5MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MTMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjYyLCA0NSwgMTE0MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjM2LCA2NywgNjcsIDEyODMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTMsIDY3LCA2NywgMTM2MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODg5LCA5NywgOTcsIDk3LCAxNzE0LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5MjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY4NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDk3LCA5NywgOTcsIDE4MzMsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDE5MDIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTU3LCA0NSwgNDUsIDQ1LCA0NSwgOTYxLCA0NSwgOTYzLCA0NSwgNDUsIDQ1LCA2NywgOTcsIDIwMzQsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMjA0MCwgNDUsIDQ1LCA0NSwgMjA0MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3NCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTc4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3OTksIDY3LCA2NywgNjcsIDgwNCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTgsIDAsIDAsIDAsIDEzMDQsIDAsIDAsIDAsIDEzMTAsIDEzMiwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNTc4ODksIDAsIDAsIDU0MDc0LCA1NDA3NCwgNTUwLCA4MzEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2OCwgOTcsIDk3LCA5NywgOTcsIDU3OCwgOTcsIDQ1LCA0NSwgOTY4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIyOCwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAxMDgyLCAxMzExMiwgMTA4NiwgNTQwNzQsIDEwOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMCwgMTM5LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyNDA0MzUyLCAyNDEyNTQ0LCA2NywgNjcsIDY3LCA2NywgMTQ2NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTAsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMTUxOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTgsIDk3LCAwLCAwLCAwLCAwLCAxNTI4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3NiwgNDUsIDE1NTQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU2MiwgNDUsIDQ1LCAxNTY1LCA0NSwgNDUsIDQ1LCA0NSwgNjgzLCA0NSwgNDUsIDQ1LCA2ODcsIDQ1LCA0NSwgNjkyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5NTMsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDE0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTY4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTk0LCA5NywgOTcsIDE2NDksIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgMTY1MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMzgzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3MCwgNDUsIDE2NzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNzM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDc0MSwgNjcsIDY3LCA2NywgMTY4MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDc0LCA2NywgNjcsIDY3LCAxNjkyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY5NywgNjcsIDE2OTksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2OCwgNDc1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjM0LCA5NywgOTcsIDE3OTIsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTU4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NjQsIDQ1LCAxNTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3NywgMjA0LCA0NSwgNjcsIDY3LCA2NywgMjE3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNzg3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjcxLCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgOTcsIDk3LCAzNTEsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDQ1LCA0NSwgOTM4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5OCwgNDUsIDQ1LCA0NSwgMTUzLCA0NSwgMTYxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NjAsIDY2MSwgNDUsIDQ1LCAyMDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMjIwLCA2NywgMjI4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMCwgMCwgMCwgMCwgMjgwLCA5NCwgMCwgMCwgNjcsIDY3LCA2NywgNjcsIDY3LCAyNzIsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDk3LCA5NywgOTcsIDM1MiwgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDUsIDQzOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDUsIDQ1LCA0NSwgNDUsIDQ1MiwgNDUsIDQ1LCA2NywgNjcsIDIxMiwgMjE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDI0MSwgNjcsIDI0NiwgNjcsIDI1MiwgNjcsIDY3LCA0ODYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTMsIDY3LCA2NywgMTAxNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA1MjEsIDY3LCA2NywgNTI1LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzMSwgNjcsIDY3LCA2NywgNTM4LCA2NywgMCwgMCwgMjA0NiwgOTcsIDk3LCA5NywgNDUsIDQ1LCA2NywgNjcsIDAsIDAsIDk3LCA5NywgNDUsIDQ1LCA0NSwgMTE5MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQxOCwgNDUsIDQ1LCAxNDIxLCA5NywgOTcsIDU4MywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5MSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTEzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM4NCwgOTcsIDYxOCwgOTcsIDk3LCA2MjIsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI4LCA5NywgOTcsIDk3LCA2MzUsIDk3LCAxOCwgMTMxNDI3LCAwLCAwLCAwLCA2MzksIDAsIDEzMiwgMzYyLCAwLCAwLCAzNjUsIDI5MzE1LCAzNjcsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA5MzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTUwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExOTQsIDQ1LCAxMTk2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk5OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDQ1LCA0NSwgNjY3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwOCwgNDUsIDQ1LCA0NSwgNjk2LCA0NSwgNDUsIDQ1LCA3MDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzEwLCA0NSwgNDUsIDQ1LCAxMjIwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTQsIDQ1LCA0NSwgNDUsIDcyOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3OTcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1ODcsIDY3LCAxNTg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NjMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYyOTY4LCAwLCAwLCA2NywgNjcsIDY3LCA2NywgNjcsIDgxNCwgODE2LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDY3LCA2NywgMTAwOCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDIwLCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCAxNDI5LCA2NywgMTQzMCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTgsIDEwNzYsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODgwOSwgMCwgMTM5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk3LCA5NywgOTcsIDk3LCAxMTAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjQsIDk3LCAxMTI2LCA5NywgOTcsIDExMTQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMTIsIDk3LCA5NywgMTE1NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5NCwgOTcsIDk3LCA5NywgOTcsIDExNzAsIDk3LCA5NywgOTcsIDk3LCAwLCA5MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCAxNTMyLCA0NSwgNDUsIDQ1LCA0NSwgMTUzNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MDYsIDQ1LCA0NSwgNzA5LCA0NSwgNDUsIDExNzcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDIsIDQ1LCAxMjA0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjE1LCA0NSwgNDUsIDQ1LCAxMjMyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDEyMzcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTMsIDEwNTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNjEsIDY3LCA2NywgMTI4MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4OSwgNjcsIDY3LCA2NywgMTI5MiwgOTcsIDk3LCA5NywgOTcsIDEzMzksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDQsIDk3LCA5NywgOTcsIDk3LCA0NSwgMTg0OSwgNDUsIDE4NTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzIxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcyNiwgNDUsIDEzODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODgsIDQ1LCA0NSwgMTQwMSwgMTQwMiwgNDUsIDQ1LCA0NSwgNDUsIDE0MDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE0MTAsIDQ1LCA0NSwgNDUsIDE0MTMsIDQ1LCAxNDE1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNDE5LCA0NSwgNDUsIDQ1LCA0NSwgMTgwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgMjAxOSwgMCwgOTcsIDY3LCA2NywgNjcsIDE0NTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI2NCwgNjcsIDY3LCAxNDYwLCA2NywgMTQ2MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNTg4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgMTMwMCwgMCwgMCwgMCwgMTMwNiwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTUwNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTEyLCA5NywgOTcsIDk3LCAwLCAxNzI4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDkwMSwgOTcsIDk3LCA5NywgOTcsIDE1MTUsIDk3LCAxNTE3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTIxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0NSwgMTY1MiwgNDUsIDQ1LCA0NSwgMTY1NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU1MiwgMTU1MywgNDUsIDQ1LCA0NSwgMTU1NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY5MywgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE1NzIsIDY3LCA2NywgNjcsIDY3LCAxNTc2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2MDIsIDY3LCA2NywgMTYwNSwgNjcsIDY3LCA2NywgMCwgNjcsIDE1ODIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4MCwgNjcsIDY3LCAxNTk2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgNTQyLCAwLCA1NDQsIDY3LCA2NywgNjcsIDY3LCAxNzU5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzMywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzAsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc3NywgOTcsIDk3LCA5NywgMTc5MywgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTk4LCA0NSwgNDUsIDEwMDEsIDEwMDIsIDQ1LCA0NSwgNjcsIDY3LCA0NSwgMTg2MSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg3MSwgNjcsIDE4NzMsIDE4NzQsIDY3LCAwLCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCAxNjM4NCwgOTcsIDQ1LCA2NywgOTcsIDAsIDAsIDAsIDE0NzMsIDAsIDEwODIsIDAsIDAsIDAsIDE0NzUsIDAsIDEwODYsIDAsIDAsIDAsIDE0NzcsIDE4NzYsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE4ODMsIDAsIDE4ODUsIDk3LCA5NywgOTcsIDE4ODksIDAsIDAsIDAsIDI4NiwgMCwgMCwgMCwgMjg2LCAwLCAyMzY3NDg4LCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDEyNiwgMTI2LCAxMjYsIDIwNTMsIDAsIDIwNTUsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDIwMzksIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAyMjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI0NiwgNjcsIDY3LCAxMjQ5LCAxMjUwLCA2NywgNjcsIDY3LCAxMzIsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCAxNDEsIDQ1LCA0NSwgNDUsIDE0MDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODYsIDQ1LCA0NSwgMTE4OSwgNDUsIDQ1LCAxNTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MSwgNDUsIDQ1LCA0NSwgNDUsIDcwMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzUzLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDQ1LCA0NSwgNjcsIDIwOCwgNjcsIDY3LCA2NywgMjIyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzY0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjU4LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDI4OCwgOTcsIDk3LCA5NywgMzAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDMzOCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDEzMTQyNywgMCwgMCwgMCwgMCwgMzYyLCAwLCAzNjUsIDI4ODA5LCAzNjcsIDEzOSwgNDUsIDM3MCwgNDUsIDQ1LCA0NSwgNDUsIDcxNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MjIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgxOSwgNjcsIDY3LCAyNTM5OCwgNTQyLCAxMzExMiwgNTQ0LCA0NSwgNDAzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MDksIDQ1LCA2NywgNjcsIDY3LCA2NywgNDg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3MSwgNjcsIDY3LCA2NywgNjcsIDUyMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzEsIDY3LCA2NywgNjcsIDEyNzQsIDY3LCA2NywgNjcsIDEyNzksIDY3LCA2NywgMjQ4NTAsIDI0ODUwLCAxMjU2NCwgMTI1NjQsIDAsIDU3ODg5LCAwLCAwLCAwLCA1MzUzMSwgNTM1MzEsIDM2NywgMjg2LCA5NywgNTUzLCA5NywgOTcsIDk3LCA5NywgNTg2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMzgsIDk3LCA5NywgOTcsIDk3LCA2MTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjMxLCA5NywgOTcsIDk3LCAwLCAxODM0LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMzUzLCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDQ1LCA0NSwgNjY4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY4MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk0OSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA3NDcsIDc0OCwgNjcsIDY3LCA2NywgNjcsIDc1NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDEzMDIsIDAsIDAsIDAsIDEzMDgsIDAsIDY3LCA3OTQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTcwMSwgNjcsIDk3LCA5NywgOTcsIDg0NSwgODQ2LCA5NywgOTcsIDk3LCA5NywgODUzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDk3LCA5NywgODkyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjEwLCA5NywgOTcsIDQ1LCA5OTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDEyMzksIDY3LCA2NywgNjcsIDEwNjMsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA2OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDEzMDEsIDAsIDAsIDAsIDEzMDcsIDAsIDAsIDk3LCAxMTQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTIsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAyMDAxLCAwLCA5NywgMjAwMywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgMTczOSwgNDUsIDQ1LCA0NSwgMTc0MiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NywgOTcsIDk3LCA5NywgMTE1NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTYyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTQ1LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNTEsIDk3LCA5NywgOTcsIDEyNTMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzOSwgNDUsIDE0MjMsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0MzEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3MDAsIDY3LCAxNzAyLCA2NywgNjcsIDE0MzksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MTQsIDY3LCA2NywgOTcsIDk3LCAxNDkyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjExLCA5NywgOTcsIDE3MDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDE5NDksIDQ1LCAxOTUxLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk2MSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCAyMDYwLCAyMDYxLCAwLCAyMDYyLCA0NSwgNjcsIDk3LCAwLCAwLCAyMDM2LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjIzLCA2NywgNjcsIDIzNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTA3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTk2MywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDAsIDE5NzIsIDAsIDk3LCA5NywgOTcsIDE5NzUsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDAsIDAsIDQ1LCA0NSwgNDUsIDkzMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MDcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQxNywgNDUsIDQ1LCAxOTg5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5OTYsIDk3LCAxOCwgMTMxNDI3LCAwLCAwLCAzNjAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCAwLCA5MjEsIDI5MzE1LCAwLCAwLCAwLCAwLCA0NSwgNDUsIDkzMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA5NywgOTcsIDE5OTgsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTk4NSwgNDUsIDE5ODYsIDQ1LCA0NSwgNDUsIDE1NiwgNDUsIDQ1LCAxNzAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzUsIDQ1LCA0NSwgNDUsIDQ1LCA2NzksIDEzMTQyNywgMCwgMzU4LCAwLCAwLCAzNjIsIDAsIDM2NSwgMjg4MDksIDM2NywgMTM5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDM4MSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDAwLCA0NSwgNDUsIDQxOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDUwNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgyMCwgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDY3LCA2NywgNTIyLCA2NywgNjcsIDY3LCA2NywgNjcsIDUyOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDEyOTksIDAsIDAsIDAsIDEzMDUsIDAsIDAsIDAsIDk3LCA5NywgNjE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDUsIDk3LCA5NywgOTcsIDk3LCAxMTA5LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNzQ5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjAsIDY3LCAwLCA5NywgNDUsIDY3LCAyMDU4LCA5NywgNDUsIDY3LCAwLCA5NywgNDUsIDY3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCAyMDQxLCA2NywgNjcsIDY3LCA2NywgNjcsIDc4MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxNiwgNjcsIDY3LCA5NywgOTcsIDk3LCA4NzgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI5LCA5NywgMCwgNDUsIDk3OSwgNDUsIDQ1LCA0NSwgNDUsIDk4NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTE5OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDEwMjMsIDY3LCA2NywgNjcsIDY3LCAxMDI4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDAsIDEzMTEyLCAwLCA1NDA3NCwgMCwgMCwgMCwgMTA5NCwgMCwgMCwgMCwgMTA5MiwgMTMxNSwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTQ4NiwgOTcsIDE0ODksIDk3LCA5NywgOTcsIDExMTcsIDk3LCA5NywgOTcsIDk3LCAxMTIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODEsIDk3LCA5NywgOTcsIDg4NiwgOTcsIDk3LCA5NywgMTMxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MTUsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYxOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYzMSwgOTcsIDk3LCAxODQ3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDE4NTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjM1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4NjgsIDY3LCA2NywgNjcsIDE4NzIsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDE4ODIsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAxODkxLCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTkyOSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDE5MDAsIDQ1LCAxOTAxLCA0NSwgNDUsIDQ1LCAxOTA1LCA0NSwgNjcsIDIwNTQsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDAsIDk3LCA0NSwgNjcsIDk3LCAwLCAwLCA5NywgMjAzNywgMjAzOCwgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDE4NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCAxNDIsIDQ1LCA0NSwgNDUsIDE0MTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQzMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTcsIDQ1LCA0NSwgMTcxLCA0NSwgNDUsIDQ1LCAxODIsIDQ1LCA0NSwgNDUsIDQ1LCAyMDAsIDQ1LCA0NSwgNDUsIDE1NDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU1MSwgNDUsIDQ1LCA0NSwgNDUsIDExODEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxMSwgNDUsIDQ1LCA0NSwgMTIxNCwgNDUsIDQ1LCA0NSwgNjcsIDIwOSwgNjcsIDY3LCA2NywgMjI0LCA2NywgNjcsIDIzOCwgNjcsIDY3LCA2NywgMjQ5LCA2NywgMCwgOTcsIDIwNTYsIDIwNTcsIDAsIDIwNTksIDQ1LCA2NywgMCwgOTcsIDQ1LCA2NywgOTcsIDAsIDAsIDE5MzcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDI2NywgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgMjg5LCA5NywgOTcsIDk3LCAzMDQsIDk3LCA5NywgMzE4LCA5NywgOTcsIDk3LCAzMjksIDk3LCA5NywgMCwgMCwgOTcsIDE3ODMsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDQ1LCAyMDI2LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDIwMzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNDQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgMzQ3LCA5NywgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDQ1LCA2NjYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQyMCwgNDUsIDU3ODg5LCAwLCAwLCA1NDA3NCwgNTQwNzQsIDU1MCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NDAsIDY3LCAxMDA3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDMxLCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDExMDEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU5MiwgOTcsIDk3LCA5NywgMTE5MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMTk1LCA0NSwgMTE5NywgNDUsIDQ1LCA0NSwgNDUsIDEyMDEsIDQ1LCA0NSwgNDUsIDQ1LCAxOTUyLCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1MCwgNjcsIDY3LCA2NywgMTI1NSwgNjcsIDEyNTcsIDY3LCA2NywgNjcsIDY3LCAxMjYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2ODUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MSwgMTI1NjUsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMiwgNjcsIDY3LCAxMjY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjczLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTYyNjg4LCAwLCAwLCAxMjgxLCA2NywgNjcsIDY3LCA2NywgMTI4NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzAsIDY3LCA2NywgNjcsIDY3LCA2NywgMTMzNSwgOTcsIDEzMzcsIDk3LCA5NywgOTcsIDk3LCAxMzQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg4MiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjEsIDk3LCAxOCwgMTMxNDI3LCAwLCA2MzgsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCAwLCA1NDQsIDAsIDU1MCwgMCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQ3Mzk4NCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjk5MDA4MCwgMjE1ODU5MiwgMjE1ODU5MiwgMjIwNzc0NCwgMjIwNzc0NCwgMjQ4MjE3NiwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2MjY4OCwgMCwgNTM1MzAsIDk3LCA5NywgOTcsIDEzNjUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwOCwgOTcsIDk3LCA5NywgNDUsIDQ1LCAxNDI0LCA0NSwgMTQyNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDU4LCA2NywgNjcsIDY3LCA2NywgNDUsIDE1NTUsIDQ1LCA0NSwgMTU1NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA3MDcsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE1NzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NzMsIDY3LCA2NywgMTU5NSwgNjcsIDY3LCAxNTk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOSwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjQwNDM1MiwgMjQxMjU0NCwgOTcsIDk3LCA5NywgMTYzNiwgOTcsIDk3LCA5NywgMTYzOSwgOTcsIDk3LCAxNjQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTczLCAwLCA5MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1LCA2NywgNjcsIDY3LCAxNjkzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTY5OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE3NzMsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjI1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg1MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4ODAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEwNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE4NjAsIDQ1LCA0NSwgNjcsIDY3LCAxODY1LCA2NywgNjcsIDY3LCA2NywgMTg3MCwgNjcsIDY3LCA2NywgNjcsIDE4NzUsIDY3LCA2NywgOTcsIDk3LCAxODgwLCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgMTg4OCwgOTcsIDAsIDAsIDAsIDE5MzgsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTg1NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MDksIDQ1LCA0NSwgMTkxMSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5MjIsIDY3LCA2NywgMTkyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDE4OTgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5MDQsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAxNjM4NCwgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE3MjQsIDIwMDgsIDIwMDksIDQ1LCA0NSwgNjcsIDY3LCA2NywgMjAxNCwgMjAxNSwgNjcsIDY3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDIwMjIsIDAsIDIwMjMsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTg2OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMCwgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDQ1LCAxNDcsIDE1MSwgMTU0LCA0NSwgMTYyLCA0NSwgNDUsIDE3NiwgMTc4LCAxODEsIDQ1LCA0NSwgNDUsIDE5MiwgMTk2LCA0NSwgNDUsIDQ1LCA0NSwgMjAxMiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjAxOCwgOTcsIDAsIDAsIDk3LCAxOTc4LCA5NywgOTcsIDk3LCAxOTgyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzIsIDk3MywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMjU5LCAyNjMsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDk3LCA5NywgMjk0LCAyOTgsIDMwMSwgOTcsIDMwOSwgOTcsIDk3LCAzMjMsIDMyNSwgMzI4LCA5NywgOTcsIDk3LCA5NywgOTcsIDU2MCwgOTcsIDk3LCA5NywgNTY5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5MjEsIDAsIDExNzUsIDAsIDAsIDAsIDAsIDQ1LCAzMzksIDM0MywgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNjcsIDY3LCA1MDMsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUxMiwgNjcsIDY3LCA1MTksIDk3LCA5NywgNjAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MDksIDk3LCA5NywgNjE2LCA0NSwgNjQ5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY1NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMzkzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNzYzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3MCwgNjcsIDY3LCA2NywgNzc0LCA2NywgMCwgMjA0NSwgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNjcsIDY3LCAwLCAwLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDk5NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMjEzLCA2NywgMjE5LCA2NywgNjcsIDIzMiwgNjcsIDI0MiwgNjcsIDI0NywgNjcsIDY3LCA2NywgNzc5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwMTgsIDY3LCA2NywgNjcsIDY3LCA4MTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDU3ODg5LCAwLCAwLCA1NDA3NCwgNTQwNzQsIDU1MCwgMCwgOTcsIDgzNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA4MzksIDk3LCAxOCwgMTMxNDI3LCAwLCA2MzgsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCA2NDUsIDk3LCA5NywgODYxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2OCwgOTcsIDk3LCA5NywgODcyLCA5NywgOTcsIDg3NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYxMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDE4LCAxOCwgMjQsIDI0LCAyNywgMjcsIDI3LCAxMDM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDQ3LCA2NywgNjcsIDY3LCAxMDUwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDMzLCA2NywgNjcsIDY3LCA5NywgOTcsIDExMzAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzgsIDAsIDAsIDY3LCA2NywgNjcsIDEyOTUsIDY3LCA2NywgNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3LCAxMzE3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzc1LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgMTM3OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDIyLCA0NSwgNDUsIDQ1LCA0MjksIDQzMSwgNDUsIDQ1LCA0NSwgNDUsIDAsIDEwOTAsIDAsIDAsIDk3LCAxNDc5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcxNiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTcyMywgMCwgOTIxLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDkyOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTIsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk2MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCA5NywgMTczOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE3NDMsIDQ1LCA0NSwgNDUsIDQ1LCAxNjYsIDQ1LCA0NSwgNDUsIDQ1LCAxODQsIDE4NiwgNDUsIDQ1LCAxOTcsIDQ1LCA0NSwgOTcsIDE3NzksIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDE4LCAxMzE0MjcsIDAsIDYzOCwgMCwgMCwgMCwgMCwgMzYyLCAwLCA2NDAsIDM2NSwgMjkzMTUsIDM2NywgMCwgOTIxLCAyOTMxNSwgMCwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1MzcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTgwMywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxODA5LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCAxODE0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxODIxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA2NywgNjcsIDY3LCAxODE4LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjQsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDE4OTAsIDAsIDE4MjksIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAxODM2LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCAxOTgxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxOTg3LCAxODQ1LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4NTMsIDQ1LCA0NSwgNDUsIDE4NTcsIDQ1LCA0NSwgNDUsIDY3LCAxODY0LCA2NywgMTg2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MTAsIDE3MTEsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCAxODg2LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMTgzOCwgMCwgMCwgMCwgOTcsIDE4NDMsIDk3LCAwLCAxODkzLCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNzQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAxOTMxLCA5NywgOTcsIDk3LCA5NywgOTcsIDU4OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYyOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA2NywgMjA0NCwgMCwgOTcsIDk3LCA5NywgOTcsIDQ1LCA0NSwgNjcsIDY3LCAwLCAwLCA5NywgOTcsIDQ1LCA0NSwgNDUsIDE2NjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1MywgNDUsIDQ1NSwgNjcsIDY3LCA2NywgNjcsIDI2OCwgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCA5NywgMzQ4LCA5NywgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDEzMTQyNywgMCwgMzU5LCAwLCAwLCAzNjIsIDAsIDM2NSwgMjg4MDksIDM2NywgMTM5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQyMSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQzNCwgNDUsIDQ1LCA2OTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjcsIDQ1LCAwLCA5MjEsIDI5MzE1LCAwLCA5MjUsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE4MTEsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDM3LCA2NywgMTAzOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI3NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAxMDk1LCAwLCAwLCAwLCAxMDk2LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NjksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMzEsIDk3LCAxMTMzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3MCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzEyLCAwLCAwLCAwLCAwLCAxMDk2LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMyNywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzMyLCA5NywgOTcsIDk3LCAxODMwLCA5NywgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxODk2LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NDgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzMywgOTQyNDIsIDAsIDAsIDAsIDM4LCAxMDI0MzksIDAsIDAsIDEwNjUzOCwgOTgzNDcsIDI4ODA5LCA0NSwgNDUsIDQ1LCA0NSwgMzgwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDAxLCA0NSwgNDUsIDE1OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDAsIDQ1LCA0NSwgNDUsIDQ1LCAyMDYsIDY3LCA2NywgNjcsIDY3LCA2NywgMjI1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1NCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDU3ODg5LCAwLCAwLCA1NDA3NCwgNTQwNzQsIDU1MCwgODMyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzQyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAxMDgzLCAxMzExMiwgMTA4NywgNTQwNzQsIDEwOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTYsIDAsIDgzMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNzQsIDkyMSwgMCwgMTE3NSwgMCwgMCwgMCwgMCwgNDUsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCA0NSwgMTQ4LCA2NywgNjcsIDI2NCwgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDk3LCAyOTUsIDk3LCA5NywgOTcsIDk3LCAzMTMsIDk3LCA5NywgOTcsIDk3LCAzMzEsIDMzMywgOTcsIDE4LCAxMzE0MjcsIDM1NiwgNjM4LCAwLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDM2NSwgMCwgMzY3LCAwLCA0NSwgNDUsIDE1MzAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDk4OCwgNDUsIDQ1LCA0NSwgOTcsIDM0NCwgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgNDAyLCA0MDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1NiwgNjcsIDQzOCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDksIDQ1MCwgNDUsIDQ1LCA0NSwgNjcsIDY3LCAyMTQsIDIxOCwgMjIxLCA2NywgMjI5LCA2NywgNjcsIDI0MywgMjQ1LCAyNDgsIDY3LCA2NywgNjcsIDY3LCA2NywgNDg4LCA0OTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA3MSwgNjcsIDEwNzMsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDUzNSwgNTM2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjgzLCAxNjg0LCA2NywgNjcsIDY3LCA2NywgMTY4OCwgMTY4OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU4NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNDY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA1ODUsIDU4NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTYzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjIxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzMiwgNjMzLCA5NywgOTcsIDAsIDAsIDE3ODIsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCAwLCA5NywgNzEyLCA0NSwgNDUsIDQ1LCA3MTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzI1LCA0NSwgNDUsIDQ1LCAxNjMsIDE2NywgMTczLCAxNzcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTkzLCA0NSwgNDUsIDQ1LCA0NSwgOTgyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5ODcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU1OCwgNDUsIDE1NjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzA0LCA3MDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzMxLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDczOSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjczLCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgNjcsIDY3LCA2NywgNzY0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjkwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MTIsIDY3LCA2NywgNjcsIDY3LCA4MTgsIDY3LCA2NywgNjcsIDI1Mzk4LCA1NDIsIDEzMTEyLCA1NDQsIDU3ODg5LCAwLCAwLCA1NDA3NCwgNTQwNzQsIDU1MCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA4MzcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjAyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzNywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODYyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MjcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5MTAsIDk3LCA5NywgOTcsIDk3LCA5MTYsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDk3LCA5NywgMTk0MCwgOTcsIDk3LCAxOTQyLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODUsIDQ1LCA0NSwgNDUsIDQ1LCAzOTUsIDQ1LCA0NSwgNDUsIDQ1LCA5NjYsIDQ1LCA5NjksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NzUsIDQ1LCA0NSwgNDUsIDQwNiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTc0LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTAxMCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjYyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDQwLCA2NywgMTA0MiwgNjcsIDEwNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgMTcwNiwgOTcsIDk3LCA5NywgMTcwOSwgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgNjcsIDEwNTEsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NDMsIDY3LCA2NywgMTQ0NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTcsIDAsIDAsIDAsIDEzMDMsIDAsIDAsIDAsIDEzMDksIDY3LCA2NywgNjcsIDY3LCAxMDc5LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyNTcyMjg4LCAyMjA3NzQ0LCAyMjA3NzQ0LCAyMjA3NzQ0LCAxMDk4LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMzQsIDk3LCAxMTM2LCA5NywgMTEzOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTYyMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCA5MjEsIDAsIDAsIDAsIDExNzYsIDAsIDY0NiwgNDUsIDY3LCA2NywgNjcsIDEyNjgsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjksIDY3LCA2NywgNjcsIDk3LCAxMzQ4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjcsIDk3LCA2NywgMTU2OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQ4LCAxNDQ5LCA2NywgMTgxNiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTgyNSwgNjcsIDY3LCAxODI3LCA5NywgOTcsIDAsIDE3ODEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgMTgzMSwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCAxOTgwLCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDE4NDYsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTIxMiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMjAxMCwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMjAxNiwgNjcsIDk3LCA5NywgMCwgMCwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDIwMDcsIDAsIDk0MjQyLCAwLCAwLCAwLCAzOCwgMTAyNDM5LCAwLCAwLCAxMDY1MzgsIDk4MzQ3LCAyODgwOSwgNDUsIDQ1LCAxNDMsIDQ1LCA0NSwgNDUsIDE2NzEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDE4MTMsIDY3LCA2NywgMTgxNSwgNDUsIDQ1LCA2NywgMjEwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMzksIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDI5MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDMsIDk3LCA5NywgMzE3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDUsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg5OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMzc1LCA0NSwgNDUsIDQ1LCAzNzksIDQ1LCA0NSwgMzkwLCA0NSwgNDUsIDM5NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjEsIDY3LCA2NywgNjcsIDQ2NSwgNjcsIDY3LCA0NzYsIDY3LCA2NywgNDgwLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjk0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjg4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MDAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEwNzUsIDk3LCA5NywgOTcsIDU1OCwgOTcsIDk3LCA5NywgNTYyLCA5NywgOTcsIDU3MywgOTcsIDk3LCA1NzcsIDk3LCA5NywgOTcsIDk3LCA5NywgODk1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MDMsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgMTYzOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjQ2LCA1OTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzMzQsIDQ1LCA2ODEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTM5NiwgNDUsIDQ1LCAxMzk5LCA0NSwgNDUsIDczMCwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDM0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NTAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ1LCA0NSwgOTkzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMTIzOCwgNjcsIDY3LCAxMDA2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjgwLCAxMDQ4LCAxMDQ5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI4NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyOTEsIDY3LCA5NywgOTcsIDExMDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzgsIDAsIDkyMCwgOTcsIDk3LCAxMTQyLCAxMTQzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE1MywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTU4LCA5NywgOTcsIDk3LCAxMTYxLCA5NywgOTcsIDk3LCA5NywgMTE2NiwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzI1LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMyOCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDQ1LCAxMjE4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NzgsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI2OSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjc4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzYxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgMTM0OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzU4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjIzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDkyMSwgMCwgMCwgOTI2LCAwLCAwLCAwLCA0NSwgNDUsIDE0MTEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTc1NCwgNDUsIDQ1LCA2NywgNjcsIDEzMDEsIDAsIDEzMDcsIDAsIDEzMTMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMjEwNTQsIDk3LCA5NywgOTcsIDk3LCA2NywgMTc1NywgNjcsIDY3LCA2NywgMTc2MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE0NjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3OCwgOTcsIDAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzUyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUxMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE4MjAsIDY3LCAxODIyLCA2NywgNjcsIDY3LCA2NywgNjcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDE5MzMsIDk3LCAxODkyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxODk5LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTU0NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjA4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjczLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTI1LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA2MjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAzMDcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3OTYsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE0MTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgMTk2NCwgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCA5NywgOTcsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE3MjEsIDk3LCA5NywgMCwgMCwgMTk5NywgOTcsIDAsIDAsIDIwMDAsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA0NSwgNDUsIDQ1LCA0NSwgNzMzLCA0NSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgwMywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCA5NDI0MiwgMCwgMCwgMCwgMzgsIDEwMjQzOSwgMCwgMCwgMTA2NTM4LCA5ODM0NywgMjg4MDksIDQ1LCA0NSwgMTQ0LCA0NSwgNDUsIDQ1LCAxODA1LCA0NSwgMTgwNywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyMzEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgNDUsIDQ1LCA2NywgMjExLCA2NywgNjcsIDY3LCA2NywgMjMwLCAyMzQsIDI0MCwgMjQ0LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0NjQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3OSwgNjcsIDY3LCA2NywgMjYwLCA2NywgNjcsIDY3LCA2NywgNjcsIDAsIDI0ODUwLCAxMjU2NCwgMCwgMCwgMCwgMCwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDI5MSwgOTcsIDk3LCA5NywgOTcsIDMxMCwgMzE0LCAzMjAsIDMyNCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM1NSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM2MiwgMzQwLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgMTMxNDI3LCAwLCAwLCAzNjAsIDAsIDM2MiwgMCwgMzY1LCAyODgwOSwgMzY3LCAxMzksIDM2OSwgNDUsIDQ1LCA0NSwgMzc0LCA2NywgNjcsIDQ2MCwgNjcsIDY3LCA2NywgNjcsIDQ2NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA4MDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ4NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ5OCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3MiwgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMCwgOTIxLCA5MjIsIDExNzUsIDAsIDAsIDAsIDAsIDQ1LCA2NywgNTAyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTA4LCA2NywgNjcsIDY3LCA1MTUsIDUxNywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDAsIDAsIDE5MzIsIDk3LCA5NywgMCwgMTk5OSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAyMDA0LCAyMDA1LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDExOTMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjc2LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDI0ODUwLCAyNDg1MCwgMTI1NjQsIDEyNTY0LCAwLCA1Nzg4OSwgMCwgMCwgMCwgNTM1MzEsIDUzNTMxLCAzNjcsIDI4NiwgNTUyLCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNzcsIDAsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjU1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTcsIDk3LCA1NTcsIDk3LCA5NywgOTcsIDk3LCA1NjMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTEzNSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTg0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNTk1LCA5NywgOTcsIDk3LCA5NywgOTcsIDkxMSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYzOCwgMCwgMCwgMCwgMCwgMTMxNSwgMCwgMCwgMCwgMCwgOTcsIDk3LCA5NywgMTMxOSwgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTczMywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM0MCwgOTcsIDk3LCA5NywgMTM0MywgOTcsIDk3LCAxMzQ1LCA5NywgMTM0NiwgOTcsIDU5OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDYwNSwgOTcsIDk3LCA5NywgNjEyLCA2MTQsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc5NCwgOTcsIDk3LCA5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMDcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTMsIDQ1LCA0NSwgNzQ1LCA2NywgNjcsIDY3LCA2NywgNzUxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3NywgNjcsIDY3LCA2NywgNjcsIDY3LCA3NjIsIDY3LCA2NywgNjcsIDY3LCA3NjYsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNzY1LCA2NywgNjcsIDY3LCA2NywgNjcsIDc3NywgNjcsIDY3LCA3ODEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1OTIsIDE1OTMsIDY3LCA2NywgOTcsIDg0MywgOTcsIDk3LCA5NywgOTcsIDg0OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUxMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2MCwgOTcsIDk3LCA5NywgOTcsIDg2NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTc5NywgNDUsIDQ1LCA0NSwgNDUsIDE4MDEsIDQ1LCA5NywgODc1LCA5NywgOTcsIDg3OSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTIyLCA5NywgOTcsIDk3LCA5NywgOTcsIDk5MSwgNDUsIDQ1LCA0NSwgNDUsIDk5NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDIxNSwgNjcsIDY3LCA2NywgNjcsIDIzMywgNjcsIDY3LCA2NywgNjcsIDI1MSwgMjUzLCAxMDIyLCA2NywgNjcsIDY3LCAxMDI2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAzNSwgNjcsIDY3LCAxMDM4LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ1OCwgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDY0LCA2NywgNjcsIDY3LCAxMDY3LCA2NywgNjcsIDY3LCA2NywgMTA3MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM2NzQ4OCwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgMjE1ODU5MiwgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAwLCAxMDk2LCAwLCA5MjEsIDI5MzE1LCAwLCAwLCAwLCAwLCA5MjgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgOTM0LCA0NSwgNDUsIDQ1LCAxNjQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE5OCwgNDUsIDQ1LCA0NSwgMzc4LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzOTMsIDQ1LCA0NSwgNDUsIDM5OCwgNDUsIDk3LCA5NywgMTExNiwgOTcsIDk3LCA5NywgMTEyMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0NywgMTE0OCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMjksIDk3LCA5NywgMTEzMiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI2LCA5NywgOTcsIDk3LCA5NywgMCwgNDUsIDExNzgsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDEsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1MSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDIyNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjYwLCA2NywgNjcsIDY3LCAxMjYzLCA2NywgNjcsIDEyNjUsIDEyMDMsIDQ1LCA0NSwgMTIwNSwgNDUsIDEyMDYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTYsIDY3LCAxMjY2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMjc2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA0OTIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ3MSwgNjcsIDY3LCA2NywgNjcsIDQ4MSwgNjcsIDQ1LCAxMzg2LCA0NSwgMTM4OSwgNDUsIDQ1LCA0NSwgNDUsIDEzOTQsIDQ1LCA0NSwgNDUsIDEzOTcsIDQ1LCA0NSwgNDUsIDQ1LCA5OTUsIDQ1LCA5OTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTkxNSwgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDIyLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDMzLCA2NywgMTQzNiwgNjcsIDY3LCA2NywgNjcsIDE0NDEsIDY3LCA2NywgNjcsIDE0NDQsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDI4MSwgMjg4MDksIDUzNTMxLCA5NywgOTcsIDk3LCA5NywgMTQ5NCwgOTcsIDk3LCA5NywgMTQ5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDEzNjgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgODUxLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgNjcsIDY3LCA2NywgMTU3MSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgNjcsIDY3LCAxNTgzLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE1OTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDc1MiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA1NiwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDE2MzQsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTI1LCA5NywgOTcsIDk3LCAxNjQ3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDExODMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQwOSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY1OCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNjY4LCAxNzEyLCA5NywgOTcsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAxODM1LCA5NywgOTcsIDk3LCA5NywgMCwgMCwgMCwgOTcsIDk3LCAxODQ0LCA5NywgOTcsIDE3MjYsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgMTczMiwgOTcsIDE3MzQsIDk3LCA5NywgOTcsIDk3LCA5NywgMzAwLCA5NywgMzA4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDg2NiwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDY3LCA2NywgNjcsIDE3NTgsIDY3LCA2NywgNjcsIDE3NjIsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTA0MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTc3MSwgNjcsIDY3LCA2NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzc2LCA5NywgOTcsIDk3LCA5NywgMjk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDgsIDk3LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCAxOTY2LCA5NywgOTcsIDk3LCAxOTcwLCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCA5NywgMTcyMCwgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCA5NywgOTcsIDk3LCAxODM3LCA5NywgMCwgMTg0MCwgMTg0MSwgOTcsIDk3LCA5NywgMTk4OCwgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE5OTQsIDE5OTUsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExMDMsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5MTcsIDk3LCA5NywgMCwgMCwgMCwgNjcsIDY3LCAyNjUsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgOTcsIDM0NSwgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgMTMxNDI3LCAwLCAwLCAwLCAzNjEsIDM2MiwgMCwgMzY1LCAyODgwOSwgMzY3LCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcxLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDExLCA0NSwgNDUsIDQxNCwgNDUsIDQ1LCA0NSwgNDUsIDM3NywgNDUsIDQ1LCA0NSwgMzg2LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMjIzLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0MjYsIDQ1LCA0NSwgNDMzLCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDQ2MywgNjcsIDY3LCA2NywgNDcyLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA1MzcsIDY3LCA1NDAsIDI0ODUwLCAyNDg1MCwgMTI1NjQsIDEyNTY0LCAwLCA1Nzg4OSwgMCwgMCwgMCwgNTM1MzEsIDUzNTMxLCAzNjcsIDI4NiwgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUwOSwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjQsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA2MzcsIDE4LCAxMzE0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMzY1LCAyOTMxNSwgMzY3LCAwLCA5MjEsIDI5MzE1LCAwLCAwLCAwLCA5MjcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzQsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgMTI0MCwgNDUsIDY5NywgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDcwOCwgNDUsIDQ1LCA0NSwgNDUsIDEyMjEsIDQ1LCA0NSwgNDUsIDQ1LCAxMjI1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAzODQsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMTAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgNzk1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ3MCwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDgxNSwgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMjUzOTgsIDU0MiwgMTMxMTIsIDU0NCwgOTcsIDk3LCA5NywgODkzLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMTY0LCA5NywgOTcsIDk3LCA2NywgNjcsIDY3LCAxMDI1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNjg3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAyNTM5OCwgMCwgMTMxMTIsIDAsIDU0MDc0LCAwLCAwLCAwLCAwLCAwLCAxMDk3LCAxMjQxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxNDUwLCA0NSwgNDUsIDEzODgsIDQ1LCAxMzkwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDEyMzYsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQzNywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTQ3MiwgMTQ5MCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTUwMywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDE5MzAsIDAsIDk3LCA5NywgOTcsIDk3LCA5NywgODQ3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA4NTgsIDY3LCA2NywgMTk2NSwgNjcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA5NywgOTcsIDk3LCA5NywgMCwgOTcsIDk3LCAxNzE5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAwLCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgMTM4MiwgNDUsIDEzODMsIDQ1LCA0NSwgNDUsIDE1OSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE1NjMsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDI2MSwgNjcsIDY3LCA2NywgNjcsIDY3LCAwLCAyNDg1MCwgMTI1NjQsIDAsIDAsIDAsIDAsIDI4ODA5LCA1MzUzMSwgMzQxLCA5NywgOTcsIDk3LCA5NywgOTcsIDAsIDQwOTc2LCAwLCAxOCwgMTgsIDI0LCAyNCwgMjcsIDI3LCAyNywgOTcsIDEwOTksIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTMzMywgOTcsIDEyMzAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxOTkyLCA2NywgMTk5MywgNjcsIDY3LCA2NywgOTcsIDk3LCA0NSwgNDUsIDE2MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDE2NjUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTMxNDI3LCAzNTcsIDAsIDAsIDAsIDM2MiwgMCwgMzY1LCAyODgwOSwgMzY3LCAxMzksIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDEyLCA0NSwgNDUsIDQ1LCA0MTYsIDQ1LCA0NSwgNDUsIDQ0MCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDE5OTAsIDY3LCAxOTkxLCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgOTcsIDk3LCAxNzA3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1MDEsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDE2OTEsIDY3LCA2NywgNjcsIDY3LCA2NywgNTI2LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTAzMCwgNjcsIDEwMzIsIDY3LCA2NywgNjcsIDY3LCA1OTgsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDE2MzIsIDAsIDkyMSwgMjkzMTUsIDkyMywgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTQwNCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDI1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNjcsIDY3LCA2NywgNjcsIDI1Mzk4LCAwLCAxMzExMiwgMCwgNTQwNzQsIDAsIDAsIDEwOTMsIDAsIDAsIDAsIDAsIDAsIDk3LCAxNjA5LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxMzY5LCA5NywgOTcsIDk3LCAxMzcyLCA5NywgOTcsIDY3LCA2NywgMjY2LCA2NywgNjcsIDY3LCA2NywgMCwgMjQ4NTAsIDEyNTY0LCAwLCAwLCAwLCAwLCAyODgwOSwgNTM1MzEsIDk3LCAzNDYsIDk3LCA5NywgOTcsIDk3LCAwLCA0MDk3NiwgMCwgMTgsIDE4LCAyNCwgMjQsIDI3LCAyNywgMjcsIDY2NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgMTY3NywgNDUsIDQ1LCA0NSwgNDUsIDY3LCA0NSwgNDUsIDk1NCwgNDUsIDk1NiwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDgsIDQ1LCA0NSwgNDUsIDQ1LCA2NywgNDU2LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNzAsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCAxMDY5LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA5NywgOTcsIDk3LCAxMzUwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNTI0LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgMTM3NiwgMCwgMCwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxNTU5LCAxNTYxLCA0NSwgNDUsIDQ1LCAxNTY0LCA0NSwgMTU2NiwgMTU2NywgNDUsIDY3LCA2NywgNjcsIDY3LCA2NywgMTU3MywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDY3LCA2NywgNjcsIDEyNDcsIDY3LCA2NywgNjcsIDY3LCA2NywgMTI1MiwgOTcsIDE3MjUsIDk3LCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNjI4LCA5NywgMTYzMCwgMCwgMCwgOTQyNDIsIDAsIDAsIDAsIDIyMTE4NDAsIDAsIDExMTgyMDgsIDAsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg3MzEsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMTcwNTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMwMTg3NTIsIDIxNTg1OTIsIDMwNDMzMjgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMwODAxOTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxMTI5NjAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg4NzgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI2MDUwNTYsIDIxNTg1OTIsIDIxNTg1OTIsIDIyMDc3NDQsIDAsIDU0MiwgMCwgNTQ0LCAwLCAwLCAyMTY2Nzg0LCAwLCAwLCAwLCA1NTAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDI2ODY5NzYsIDIxNTg1OTIsIDI3MTU2NDgsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI4NjcyMDAsIDIxNTg1OTIsIDI5MDQwNjQsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDAsIDk0MjQyLCAwLCAwLCAwLCAyMjExODQwLCAwLCAwLCAxMTMwNDk2LCAwLCAwLCAwLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAyMTU4NTkyLCAzMTg2Njg4LCAyMTU4NTkyLCAwLCAwLCAxMzksIDAsIDAsIDAsIDEzOSwgMCwgMjM2NzQ4OCwgMjIwNzc0NCwgMCwgMCwgMCwgMCwgMTc2MTI4LCAwLCAyMTY2Nzg0LCAwLCAwLCAwLCAwLCAwLCAyODYsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNzAzMDQsIDMxNzQ0MDAsIDIxNTg1OTIsIDAsIDAsIDAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI0MjQ4MzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDE1MDgsIDIxNTg1OTIsIDI5MDgxNjAsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDI5Nzc3OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMwMzkyMzIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDIxNTg1OTIsIDMxNTgwMTYsIDY3LCAyNDg1MCwgMjQ4NTAsIDEyNTY0LCAxMjU2NCwgMCwgMCwgMCwgMCwgMCwgNTM1MzEsIDUzNTMxLCAwLCAyODYsIDk3LCA5NywgOTcsIDk3LCA5NywgMTE0NCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDExNDksIDk3LCA5NywgOTcsIDk3LCAxMTU0LCA1Nzg4OSwgMCwgMCwgMCwgMCwgNTUwLCAwLCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA1NjEsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDU3NiwgOTcsIDk3LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAxMzkyNjQsIDEzOTI2NCwgMTM5MjY0LCAwLCAwLCAxMzkyNjQsIDAsIDkyMSwgMjkzMTUsIDAsIDAsIDkyNiwgMCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNzE5LCA3MjAsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNjg1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA5NDIsIDQ1LCA0NSwgOTQ2LCA0NSwgNDUsIDQ1LCA5NTAsIDQ1LCA0NSwgMCwgMjE0NjMwNCwgMjE0NjMwNCwgMCwgMCwgMCwgMCwgMjIyNDEyOCwgMjIyNDEyOCwgMjIyNDEyOCwgMjIzMjMyMCwgMjIzMjMyMCwgMjIzMjMyMCwgMjIzMjMyMCwgMCwgMCwgMTMwMSwgMCwgMCwgMCwgMCwgMCwgMTMwNywgMCwgMCwgMCwgMCwgMCwgMTMxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTcsIDk3LCAxMzE4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAxNzk1LCA5NywgOTcsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NDYsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDY3LCA2NywgMjE1ODU5MiwgMjE0NjMwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0MCwgMCwgMCwgMCwgMCwgMjE1ODU5MiwgMCwgOTIxLCAyOTMxNSwgMCwgOTI0LCAwLCAwLCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCAxMDAwLCA0NSwgNDUsIDQ1LCA0NSwgNjcsIDY3Cl07CgpYUXVlcnlUb2tlbml6ZXIuRVhQRUNURUQgPQpbIDI5MCwgMzAwLCAzMDQsIDM1MywgMjk2LCAzMDksIDMwNSwgMzE5LCAzMTUsIDMyNCwgMzI4LCAzNTIsIDM1NCwgMzM0LCAzMzgsIDMzMCwgMzIwLCAzNDUsIDM0OSwgMjkzLCAzNTgsIDM2MiwgMzQxLCAzNjYsIDMxMiwgMzcwLCAzNzQsIDM3OCwgMzgyLCAzODYsIDM5MCwgMzk0LCAzOTgsIDczNywgNDAyLCA2MzQsIDQzOSwgNjA0LCA2MzQsIDYzNCwgNjM0LCA2MzQsIDQwOCwgNjM0LCA2MzQsIDYzNCwgNDA0LCA2MzQsIDYzNCwgNjM0LCA0NTcsIDYzNCwgNjM0LCA5NjMsIDYzNCwgNjM0LCA0MTMsIDYzNCwgNjM0LCA2MzQsIDYzNCwgNjM0LCA2MzQsIDYzNCwgNjYzLCA0MTgsIDQyMiwgOTAzLCA5MDIsIDQyNiwgNDMxLCA1NDgsIDYzNCwgNDM3LCA1MjEsIDkxOSwgNDQzLCA2MTUsIDQwOSwgNDQ5LCA0NTUsIDYyNCwgNzMxLCA3NTEsIDYzNCwgNDYxLCA0NjUsIDY3MiwgNDcwLCA0NjksIDQ3NCwgNDgxLCA0ODUsIDQ3NywgNDg5LCA0OTMsIDYyOSwgNTQyLCA0OTcsIDUwNSwgNjAzLCA2MDIsIDk5MSwgNjQ4LCA1MTAsIDgwNCwgNjM0LCA1MTUsIDk1OCwgNTI2LCA1MjUsIDUzMCwgNzY4LCA2MzQsIDU0NiwgNTUyLCA3MTEsIDcxMCwgNTkzLCA1NTgsIDU2MiwgNjE4LCA1NjYsIDU3MCwgNTc0LCA1NzgsIDU4MiwgNTg2LCA1OTAsIDYwOCwgNjEyLCA2NjAsIDgyMiwgODIxLCA2MzQsIDYyMiwgNTk2LCA0NDQsIDYyOCwgNTMzLCA3MjQsIDYzMywgNjQwLCA2NTMsIDY0NywgNjUyLCA1MzYsIDEwMDgsIDQ1MSwgNDUwLCA0NDUsIDY1NywgNjcwLCA2NzYsIDY4NSwgNjg5LCA2OTMsIDY5NywgNzAxLCA3MDQsIDcwNywgNzE1LCA3MTksIDc5OCwgODE1LCA2MzQsIDcyMywgNzYyLCA5OTYsIDYzNCwgNzI4LCA5NjksIDczMCwgNzM1LCA5MDgsIDYzNCwgNzQxLCA2NzksIDg4OSwgNTExLCA3NDcsIDYzNCwgNzUwLCA3NTUsIDQ5OSwgNjY2LCA0OTksIDUwMSwgNzU5LCA3NzIsIDc3NiwgNzgwLCA2MzQsIDc4NywgNzg0LCA3OTcsIDgwMiwgODA5LCA4MDgsIDQyNywgODE0LCAxMDA2LCA1MTcsIDYzNCwgNTE5LCA4NTMsIDYzNCwgODEzLCA4NTAsIDc5MywgNjM0LCA4MTksIDgyNiwgODMzLCA4MzIsIDgzNywgODQzLCA4NDcsIDg1NywgODYxLCA4NjMsIDg2NywgODcxLCA4NzUsIDg3OSwgODgzLCA2NDMsIDg4NywgNTM5LCA5ODAsIDk3OSwgNjM0LCA4OTMsIDk0NCwgNjM0LCA5MDAsIDg5NiwgNjM0LCA5MDcsIDkzMywgNTA2LCA5MTIsIDkxNywgODI4LCA0MzMsIDYzNiwgNjM1LCA1NTQsIDk2MSwgOTIzLCA5MzAsIDkyNywgOTM3LCA5NDEsIDYzNCwgNjM0LCA2MzQsIDk3NCwgOTQ4LCA5NTIsIDk4NSwgOTEzLCA5NjgsIDk2NywgNzQzLCA2MzQsIDk3MywgODM5LCA2MzQsIDk3OCwgNTk5LCA2MzQsIDk4NCwgOTg5LCA3NjUsIDQ0NCwgOTk1LCAxMDAwLCA2MzQsIDEwMDMsIDc5MCwgOTU1LCAxMDEyLCA2ODEsIDYzNCwgNjM0LCA2MzQsIDYzNCwgNjM0LCA0MTQsIDEwMTYsIDEwMjAsIDEwMjQsIDEwODUsIDEwMjcsIDEwOTAsIDEwOTAsIDEwNDYsIDEwODAsIDExMzcsIDExMDgsIDEyMTUsIDEwNDksIDEwMzIsIDEwMzksIDEwODUsIDEwODUsIDEwODUsIDEwODUsIDEwNTgsIDEwNjIsIDEwNjgsIDEwODUsIDEwODYsIDEwOTAsIDEwOTAsIDEwOTEsIDEwNzIsIDEwNjQsIDExMDcsIDEwOTAsIDEwOTAsIDEwOTAsIDExMTgsIDExMjMsIDExMzgsIDEwNzgsIDEwNzQsIDEwODQsIDEwODUsIDEwODUsIDEwODUsIDEwODcsIDEwOTAsIDEwNjIsIDEwNTIsIDEwNjAsIDExMTQsIDEwNjIsIDExMDQsIDEwODUsIDEwODUsIDEwOTAsIDEwOTAsIDEwMjgsIDExMjIsIDEwNjMsIDExMjgsIDExMzksIDExMjcsIDExNTgsIDEwODUsIDEwODUsIDExNTEsIDEwOTAsIDEwOTAsIDEwOTAsIDEwOTUsIDEwOTAsIDExMzIsIDEwNzMsIDExMzYsIDExNDMsIDEwNjEsIDExNTAsIDEwODUsIDExNTUsIDEwOTgsIDExMDEsIDExNDYsIDExNjIsIDExNjksIDExMDEsIDExODUsIDExNTEsIDEwOTAsIDExMTAsIDExNzMsIDEwNTQsIDEwODcsIDExMDksIDExNzcsIDExNjUsIDEwODksIDEyMDQsIDExODQsIDExMDcsIDExODksIDExOTMsIDEwODgsIDExOTcsIDExODAsIDEyMDEsIDEyMDgsIDEwNDIsIDEyMTIsIDEyMTksIDEyMjMsIDEyMjcsIDEyMzEsIDEyMzUsIDEyNDUsIDE3NzcsIDE1MjcsIDE2ODYsIDE2ODYsIDEyMzgsIDE2ODYsIDEyNTQsIDE2ODYsIDE2ODYsIDE2ODYsIDEyOTQsIDE2NjksIDE2ODYsIDE2ODYsIDE2ODYsIDEzMjIsIDE2MjUsIDE1MzQsIDEyNjgsIDE2MjQsIDEyNzUsIDEyODEsIDE0NDMsIDEyOTIsIDEzMDAsIDE2ODYsIDE2ODYsIDE2ODYsIDEzNTAsIDE4MjYsIDEzMDYsIDE2ODYsIDE2ODYsIDEyNDAsIDIwMzIsIDEzMTcsIDEzMjEsIDE2ODYsIDE2ODYsIDEyNTMsIDE2ODYsIDEzMjYsIDE2ODYsIDE2ODYsIDE2ODYsIDE0MTgsIDE3MDksIDE0NDYsIDE2ODYsIDE2ODYsIDE2ODYsIDE0OTIsIDE2ODYsIDEyOTUsIDE0NDcsIDE2ODYsIDE2ODYsIDEyNTgsIDE2ODYsIDE3MzYsIDE2ODYsIDE2ODYsIDE1MjAsIDEzNTUsIDE2ODYsIDEyODgsIDEzNDgsIDEzNjEsIDE2ODYsIDEzNTksIDE2ODYsIDEzNjQsIDE0OTgsIDEzNjgsIDEzMDIsIDEzNjIsIDEzODEsIDEzODksIDEzOTUsIDE0ODYsIDE2ODYsIDEzNzEsIDEzNzcsIDEzNzAsIDE2ODYsIDEzNzUsIDEzODIsIDEzODQsIDE0MDIsIDE0MDgsIDEzODUsIDEzODMsIDE2MTksIDE0MTMsIDE0MjMsIDE0MjgsIDE0MzMsIDE2ODYsIDE2ODYsIDEyNzAsIDE2ODYsIDEzMzgsIDE2ODYsIDE0NDAsIDE2ODYsIDE2ODYsIDE2ODYsIDE0OTksIDE0NjUsIDE2ODYsIDE2ODYsIDE2ODYsIDE2MzksIDE0NzMsIDE4ODQsIDE2ODYsIDE2ODYsIDEyOTMsIDE4NjQsIDE2ODYsIDE2ODYsIDEyOTYsIDEzMjEsIDE0ODMsIDE2ODYsIDE2ODYsIDE2ODYsIDE2NDYsIDE2ODYsIDE3NDgsIDE0OTYsIDE2ODYsIDE0MTgsIDE2NzUsIDE2ODYsIDE0MTgsIDE3MDIsIDE2ODYsIDE0MTgsIDE5ODEsIDE2ODYsIDE0MjksIDE0MDksIDE0MjcsIDE1MDQsIDE2OTIsIDE2ODYsIDE2ODYsIDEzMTMsIDE0NDgsIDE2NTEsIDE1MDgsIDE2ODYsIDE2ODYsIDEzNDAsIDE2ODYsIDE5MDMsIDE2ODYsIDE2ODYsIDE0MzUsIDE1MTMsIDE2ODYsIDEyODMsIDEyODcsIDE1MTksIDE2ODYsIDE1MjQsIDEzNjMsIDE1NjgsIDE5MzgsIDE1MzksIDE1NjYsIDE1NzksIDE0NzksIDE1MzMsIDE1MzgsIDE1NTMsIDE1NDQsIDE1NTIsIDE1NTcsIDE1NjMsIDE1NzQsIDE1NTcsIDE1ODMsIDE1ODksIDE1OTAsIDE3NTksIDE1OTQsIDE2MDMsIDE2MDcsIDE2MTEsIDE2ODYsIDE0MzYsIDE1MTQsIDE2ODYsIDE0MzQsIDE2NTYsIDE2ODYsIDE0MzQsIDE2ODAsIDE2ODYsIDE0NTMsIDE2ODYsIDE2ODYsIDE2ODYsIDE1NTksIDE2MTcsIDE2ODYsIDE3NzAsIDE0MTgsIDE2MjMsIDE3NjksIDE2MjksIDE2ODYsIDE1MTUsIDEzMzUsIDE2ODYsIDEyODUsIDE2ODYsIDE2NzEsIDE5MjEsIDE2NTAsIDE2ODYsIDE2ODYsIDEzNDQsIDEzMDgsIDE2NjYsIDE2ODYsIDE2ODYsIDE2ODYsIDE2NTksIDE2ODUsIDE2ODYsIDE2ODYsIDE2ODYsIDE2ODYsIDEyNDEsIDE2ODYsIDE2ODYsIDE4NDQsIDE2OTEsIDE2ODYsIDE2MzAsIDE5NzcsIDE5NzAsIDEzNjIsIDE2ODYsIDE2ODYsIDE2ODYsIDE2OTMsIDE2OTgsIDE2ODYsIDE2ODYsIDE2ODYsIDE2OTcsIDE2ODYsIDE3NjQsIDE3MTUsIDE2ODYsIDE2MzQsIDE2MzgsIDE2ODYsIDE1OTksIDE1ODUsIDE2ODYsIDEyNzEsIDE2ODYsIDEyNjksIDE2ODYsIDE3MjEsIDE2ODYsIDE2ODYsIDEzNTQsIDE2ODYsIDE4MDEsIDE2ODYsIDE3OTksIDE2ODYsIDE2NDAsIDE2ODYsIDE2ODYsIDE0NjEsIDE2ODYsIDE2ODYsIDE3MzIsIDE2ODYsIDE5NDQsIDE2ODYsIDE3NDAsIDE2ODYsIDE3NDYsIDE0MTUsIDEzOTYsIDE2ODYsIDE1OTgsIDE1NDcsIDE0MTcsIDE1OTcsIDE0MTYsIDE1NzcsIDE1NDYsIDEzOTcsIDE1NzcsIDE1NDcsIDE1NDgsIDE1NzAsIDEzOTgsIDE3NTMsIDE2ODYsIDE2NTIsIDE1MDksIDE2ODYsIDE2ODYsIDE2ODYsIDE3NTcsIDE2ODYsIDE0MTksIDE2ODYsIDE3NjMsIDE0MTgsIDE3NjgsIDE3ODEsIDE2ODYsIDE2ODYsIDE2ODYsIDE3MDUsIDE2ODYsIDIwNDgsIDE3OTIsIDE2ODYsIDE2ODYsIDE2ODYsIDE3MzUsIDE2ODYsIDE3OTcsIDE2ODYsIDE2ODYsIDE0MDQsIDE2ODYsIDE2MzksIDE4MTUsIDE2ODYsIDE2ODYsIDE0MTgsIDIwMTcsIDE4MjAsIDE2ODYsIDE2ODYsIDE4MDMsIDE2ODYsIDE2ODYsIDE2ODYsIDE3MzYsIDE0ODksIDE2ODYsIDE2ODYsIDE4MjUsIDEzMzgsIDEyNjAsIDEyNjMsIDE2ODYsIDE2ODYsIDE3ODUsIDE2ODYsIDE2ODYsIDE3MjgsIDE2ODYsIDE2ODYsIDE3NDksIDE0OTcsIDE4MzAsIDE4MzAsIDEyNjIsIDEyNDgsIDEyNjEsIDEzMjksIDEyNjAsIDEyNjQsIDEzMjksIDEyNDgsIDEyNDksIDEyNTksIDE1NDAsIDE4NDksIDE4NDIsIDE2ODYsIDE2ODYsIDE4MzUsIDE2ODYsIDE2ODYsIDE4MTYsIDE2ODYsIDE2ODYsIDE4MzEsIDE4ODIsIDE4NDgsIDE2ODYsIDE2ODYsIDE2ODYsIDE3NzQsIDIwNzEsIDE4NTQsIDE2ODYsIDE2ODYsIDE0NjksIDE4ODQsIDE2ODYsIDE4MjEsIDE4NTksIDE2ODYsIDE2ODYsIDEzNTAsIDE4ODMsIDE2ODYsIDE2ODYsIDE2ODYsIDE3ODEsIDEzOTEsIDE4NzUsIDE2ODYsIDE2ODYsIDE2MTMsIDE2NDQsIDE2ODYsIDE2ODYsIDE4ODksIDE2ODYsIDE2ODYsIDE2NjIsIDE4ODQsIDE2ODYsIDE4ODUsIDE4OTAsIDE2ODYsIDE2ODYsIDE2ODYsIDE4OTQsIDE2ODYsIDE2ODYsIDE2NzgsIDE2ODYsIDE5MDcsIDE2ODYsIDE2ODYsIDE1MjksIDE5MTQsIDE2ODYsIDE4MzgsIDE2ODYsIDE2ODYsIDE4ODEsIDE2ODYsIDE2ODYsIDE4NzIsIDE4NzYsIDE4MzYsIDE5MTksIDE2ODYsIDE4MzcsIDE2OTIsIDE5MTAsIDE2ODYsIDE5MjUsIDE5MjgsIDE3NDIsIDE2ODYsIDE4MTEsIDE4MTEsIDE5MzAsIDE4MTAsIDE5MjksIDE5MzUsIDE5MjgsIDE5MDAsIDE5NDIsIDE4NjcsIDE4NjgsIDE5MzEsIDEwMzUsIDE3ODgsIDE5NDgsIDE5NTIsIDE5NTYsIDE5NjAsIDE5NjQsIDE2ODYsIDE5NzYsIDE2ODYsIDE2ODYsIDE2ODYsIDIwNjUsIDE2ODYsIDE5OTIsIDIwMzcsIDE2ODYsIDE2ODYsIDE5OTgsIDIwMDksIDE5NzIsIDIwMDIsIDE2ODYsIDE2ODYsIDE2ODYsIDIwNzcsIDEzMDAsIDIwMjMsIDE2ODYsIDE2ODYsIDE2ODYsIDE4MDcsIDIwMzEsIDE2ODYsIDE2ODYsIDE2ODYsIDE4NjAsIDE1MDAsIDIwMzIsIDE2ODYsIDE2ODYsIDE2ODYsIDIwODMsIDE2ODYsIDIwMzYsIDE2ODYsIDEyNzcsIDEyNzYsIDIwNDIsIDE4NzcsIDE2ODYsIDE2ODYsIDIwNDEsIDE2ODYsIDE2ODYsIDIwMjcsIDIwMzcsIDIwMTIsIDE2ODYsIDIwMTIsIDE4NTUsIDE4NTAsIDE2ODYsIDIwNDYsIDE2ODYsIDE2ODYsIDIwNTQsIDE5OTYsIDE2ODYsIDE4OTcsIDEzMDksIDIwNTksIDIwNTIsIDE2ODYsIDIwNTgsIDE2ODYsIDE2ODYsIDIwODEsIDE2ODYsIDE3MTcsIDE0NzcsIDE2ODYsIDEzMzEsIDE2ODYsIDE2ODYsIDE2ODcsIDE2ODYsIDE4NjAsIDE2ODEsIDE2ODYsIDE2ODYsIDE2ODYsIDE5NjYsIDE3MjQsIDE2ODYsIDE2ODYsIDE2ODYsIDE5ODQsIDIwMTUsIDE2ODYsIDE2ODYsIDE2ODYsIDE5ODgsIDE2ODYsIDIwNjMsIDE2ODYsIDE2ODYsIDE2ODYsIDIwMDUsIDE2ODYsIDE3MjcsIDE2ODYsIDE2ODYsIDE3MTEsIDE0NTcsIDIwNjksIDE2ODYsIDE2ODYsIDE2ODYsIDIwMTksIDIwNzUsIDE2ODYsIDE2ODYsIDE5MTUsIDE2ODYsIDE2ODYsIDE3OTMsIDE4NzQsIDE2ODYsIDE2ODYsIDE0OTEsIDEzNjIsIDE0NDksIDE2ODYsIDE2ODYsIDE0NjAsIDIwOTgsIDIwODcsIDIwOTEsIDIwOTUsIDIxODQsIDIxMDIsIDIxMTMsIDI3ODAsIDIxMTcsIDIxMzQsIDIxNDIsIDIyODEsIDIxNDYsIDIxNDYsIDIxNDYsIDIzMDQsIDIyOTYsIDIxODEsIDI2MzksIDI1OTEsIDI4NzIsIDI1OTIsIDI4NzMsIDIzMTMsIDIxOTUsIDIyMDAsIDIyODEsIDIxNDYsIDIyNzMsIDIyMjYsIDIyMDQsIDIxNTIsIDIyMTksIDIyNzYsIDIxNjcsIDIxNzcsIDIyNzYsIDIyMzUsIDIyNzYsIDIyNzYsIDIyMzAsIDIyODEsIDIyNzYsIDIyOTYsIDIyNzYsIDIyOTMsIDIyNzYsIDIyNzYsIDIyNzYsIDIyNzYsIDIyMzQsIDIyNzYsIDIzMTEsIDIzMTQsIDIyMTAsIDIxOTksIDIyMTcsIDIyMjIsIDIyNzYsIDIyNzYsIDIyNzYsIDIyNDAsIDIyNzYsIDIyOTQsIDIyNzYsIDIyNzYsIDIxNzMsIDIyNzYsIDIxOTgsIDIyODEsIDIyODEsIDIyODEsIDIyODEsIDIyODIsIDIxNDYsIDIxNDYsIDIxNDYsIDIxNDYsIDIyMDUsIDIxNDYsIDIyMDQsIDIyNDgsIDIyNzYsIDIyMzUsIDIyNzYsIDIyOTcsIDIyNzYsIDIyNzYsIDIyNzYsIDIyNzcsIDIyNTYsIDIyODEsIDIyODMsIDIxNDYsIDIxNDYsIDIxNDYsIDIyNzUsIDIyNzYsIDIyOTUsIDIyNzYsIDIyNzYsIDIyOTMsIDIxNDYsIDIzMDQsIDIyNjQsIDIyNjksIDIyMjEsIDIyNzYsIDIyNzYsIDIyNzYsIDIyOTMsIDIyOTUsIDIyNzYsIDIyNzYsIDIyNzYsIDIyOTUsIDIyNjMsIDIyMDUsIDIyNjgsIDIyMjAsIDIxNzIsIDIyNzYsIDIyNzYsIDIyNzYsIDIyOTYsIDIyNzYsIDIyNzYsIDIyOTYsIDIyOTQsIDIyNzYsIDIyNzYsIDIyNzgsIDIyODEsIDIyODEsIDIyODAsIDIyODEsIDIyODEsIDIyODEsIDIyODMsIDIyMDYsIDIyMjMsIDIyNzYsIDIyNzYsIDIyNzksIDIyODEsIDIyODEsIDIxNDYsIDIyNzMsIDIyNzYsIDIyNzYsIDIyODEsIDIyODEsIDIyODEsIDIyNzYsIDIyOTIsIDIyNzYsIDIyOTgsIDIyMjUsIDIyNzYsIDIyOTgsIDIxNjksIDIyMjQsIDIyOTIsIDIyOTgsIDIxNzEsIDIyMjksIDIyODEsIDIyODEsIDIxNzEsIDIyMzYsIDIyODEsIDIyODEsIDIyODEsIDIxNDYsIDIyNzUsIDIyMjUsIDIyOTIsIDIyOTksIDIyNzYsIDIyMjksIDIyODEsIDIxNDYsIDIyNzYsIDIyOTAsIDIyOTcsIDIyODMsIDIxNDYsIDIxNDYsIDIyNzQsIDIyMjQsIDIyMjcsIDIyOTgsIDIyMjUsIDIyOTcsIDIyNzYsIDIyMzAsIDIxNzAsIDIyMzAsIDIyODIsIDIxNDYsIDIxNDcsIDIxNTEsIDIxNTYsIDIyODgsIDIyNzYsIDIyMzAsIDIzMDMsIDIzMDgsIDIyMzYsIDIyODQsIDIyMjgsIDIzMTgsIDIzMTgsIDIzMTgsIDIzMjYsIDIzMzUsIDIzMzksIDIzNDMsIDIzNDksIDI0MTYsIDI2OTMsIDIzNTcsIDI1OTIsIDIxMDksIDI1OTIsIDI1OTIsIDIxNjIsIDI5NDMsIDI4MjMsIDI2NDYsIDI1OTIsIDIzNjEsIDI1OTIsIDIxMjIsIDI1OTIsIDI1OTIsIDIxMjIsIDI0NzAsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMDksIDIxMDcsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMjMsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMjUsIDI1OTIsIDI0MTMsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMjcsIDI1OTIsIDI1OTIsIDI0MTQsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMzAsIDI5NTIsIDI1OTIsIDI1OTQsIDI1OTIsIDI1OTIsIDIyMTIsIDI2MDksIDIyNTIsIDI1OTIsIDI1OTIsIDI1OTIsIDI0NDYsIDI0MzQsIDI1OTIsIDI1OTIsIDI1OTIsIDIyMTIsIDI0NDYsIDI0NTAsIDI0NTYsIDI0MzEsIDI0MzUsIDI1OTIsIDI1OTIsIDIyNDMsIDI0NzgsIDI0NDgsIDI0MzksIDI5NDYsIDI1OTIsIDI1OTIsIDI1OTIsIDIzNjgsIDI4MDksIDI4MTMsIDI0NTAsIDI0NDEsIDIyMTIsIDI4MTIsIDI0NDksIDI0NDAsIDI5NDcsIDI1OTIsIDI1OTIsIDI1OTIsIDIzNDUsIDI0NTEsIDI0NTcsIDI5NDgsIDI1OTIsIDIxMjQsIDI1OTIsIDI1OTIsIDI2NTAsIDI4MjMsIDI0NDksIDI0NTUsIDI5NDYsIDI1OTIsIDIxMjgsIDI1OTIsIDI1OTIsIDI2NDksIDI5NTIsIDI1OTIsIDI4MTAsIDI0NDgsIDI0NjEsIDI5OTEsIDI0NjcsIDI1OTIsIDI1OTIsIDIzMjksIDI4MTcsIDI0NzQsIDI5OTAsIDI0NjYsIDI1OTIsIDI1OTIsIDIzNzMsIDI0NDcsIDI5OTIsIDI0NjksIDI1OTIsIDI1OTIsIDI1OTIsIDIzNzMsIDI0NDcsIDI0NzcsIDI0NjgsIDI1OTIsIDI1OTIsIDIzNTMsIDI0NjksIDI1OTIsIDI0OTUsIDI1OTIsIDI1OTIsIDI0MTUsIDI0ODMsIDI1OTIsIDI0MTUsIDI0OTYsIDI1OTIsIDI1OTIsIDIzNTIsIDI1OTIsIDI1OTIsIDIzNTIsIDIzNTIsIDI0NjksIDI1OTIsIDI1OTIsIDIzNjMsIDIzMzEsIDI0OTQsIDI1OTIsIDI1OTIsIDI1OTIsIDIzNzUsIDI1OTIsIDIzNzUsIDI0MTUsIDI1MDQsIDI1OTIsIDI1OTIsIDIzNjcsIDIzNzIsIDI1MDMsIDI1OTIsIDI1OTIsIDI1OTIsIDIzODksIDI0MTgsIDI0MTUsIDI1OTIsIDI1OTIsIDIzNzMsIDI1OTIsIDI1OTIsIDI1OTIsIDI1OTMsIDI3MzIsIDI0MTcsIDI0MTUsIDI1OTIsIDI0MTcsIDI1MjAsIDI1OTIsIDI1OTIsIDI1OTIsIDIzOTAsIDI1MjEsIDI1MjEsIDI1OTIsIDI1OTIsIDI1OTIsIDI0MDEsIDI1OTksIDI1ODUsIDI1MjYsIDI1MzEsIDIxMjAsIDI1OTIsIDIyMTIsIDI0MjYsIDI0NTAsIDI0NjMsIDI5NDgsIDI1OTIsIDI1OTIsIDI1OTIsIDIyMTMsIDIzODksIDI1MjcsIDI1MzIsIDIxMjEsIDI1NDIsIDI1NTEsIDIxMDUsIDI1OTIsIDIyMTMsIDI1OTIsIDI1OTIsIDI1OTIsIDI1NTgsIDI1MzgsIDI1NDQsIDI1NTMsIDI1NTcsIDI1MzcsIDI1NDMsIDI1NTIsIDI0MjEsIDI1NzIsIDI1NzYsIDI1NDYsIDI1NDMsIDI1NDcsIDI1OTIsIDI1OTIsIDIzNzMsIDI2MTUsIDI1NzUsIDI1NDUsIDIxMDUsIDI1OTIsIDIyNDQsIDI0NzksIDI1OTIsIDIxMjksIDI1OTIsIDI1OTIsIDI2MjgsIDI2OTAsIDI0NjksIDI1NjIsIDI1NjYsIDI1OTIsIDI1OTIsIDI1OTIsIDI0MTUsIDI5MjgsIDI5MzQsIDI0MDEsIDI1NzAsIDI1NzQsIDI1NjQsIDI1NzIsIDI1ODUsIDI1OTAsIDI1OTIsIDI1OTIsIDI1ODUsIDI5NjUsIDI1OTIsIDI1OTIsIDI1OTIsIDI0NDUsIDIyNTEsIDI1OTIsIDI1OTIsIDI1OTIsIDI0NzQsIDI1OTIsIDI2MDksIDI4OTIsIDI1OTIsIDIzNjIsIDI1OTIsIDI1OTIsIDIxMzgsIDI4NTEsIDIxNTksIDI1OTIsIDI1OTIsIDI1OTIsIDI1MDksIDI4ODgsIDI4OTIsIDI1OTIsIDI1OTIsIDI1OTIsIDI0OTAsIDI0MTgsIDI4OTEsIDI1OTIsIDI1OTIsIDIzNzYsIDI1OTIsIDI1OTIsIDIzNzQsIDI1OTIsIDI4ODksIDIzODgsIDI1OTIsIDIzNzMsIDIzNzMsIDI4OTAsIDI1OTIsIDI1OTIsIDIzODcsIDI1OTIsIDI4ODcsIDI1MDUsIDI4OTIsIDI1OTIsIDIzNzMsIDI2MTAsIDIzODgsIDI1OTIsIDI1OTIsIDIzNzYsIDIzNzMsIDI1OTIsIDI4ODcsIDI4OTEsIDI1OTIsIDIzNzQsIDI1OTIsIDI1OTIsIDI2MDgsIDIxNTksIDI2MTQsIDI2MjAsIDI1OTIsIDI1OTIsIDIzOTQsIDI1OTQsIDI4ODcsIDIzOTksIDI1OTIsIDI4ODcsIDIzOTcsIDI1MDgsIDIzNzQsIDI1MDcsIDI1OTIsIDIzNzUsIDI1OTIsIDI1OTIsIDI1OTIsIDI1OTUsIDI1MDgsIDI1MDYsIDI1OTIsIDI1MDYsIDI1MDUsIDI1MDUsIDI1OTIsIDI1MDcsIDI2MzcsIDI1MDUsIDI1OTIsIDI1OTIsIDI0MDEsIDI2NjEsIDI1OTIsIDI2NDMsIDI1OTIsIDI1OTIsIDI0MTcsIDI1OTIsIDI2NTUsIDI1OTIsIDI1OTIsIDI1OTIsIDI1MTAsIDI0MTQsIDI2NTYsIDI1OTIsIDI1OTIsIDI1OTIsIDI1MTYsIDI1OTIsIDI1OTMsIDI2NjAsIDI2NjUsIDI4ODAsIDI1OTIsIDI1OTIsIDI1OTIsIDI1MjIsIDI3NjcsIDI2NjYsIDI4ODEsIDI1OTIsIDI1OTIsIDI0MjAsIDI1NzEsIDI2OTYsIDI1OTIsIDI1OTIsIDI1OTIsIDI1ODAsIDI1NzIsIDI2ODYsIDI2MzIsIDI2OTgsIDI1OTIsIDIzODMsIDI1MTQsIDI1OTIsIDIxNjMsIDI5MzIsIDI0NjUsIDI2ODUsIDI2MzEsIDI2OTcsIDI1OTIsIDIzODgsIDI1OTIsIDI1OTIsIDIyMTIsIDI2MDQsIDI2NzEsIDI2MzIsIDI2NzgsIDI1OTIsIDI0MDEsIDI0MDUsIDI0MDksIDI1OTIsIDI1OTIsIDI1OTIsIDI2NzksIDI1OTIsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMDgsIDI2NzcsIDI1OTEsIDI1OTIsIDI1OTIsIDI1OTIsIDI0MTksIDI1OTIsIDI2ODMsIDIxODcsIDIxOTEsIDI0NjksIDI2NzEsIDIxODksIDI0NjcsIDI1OTIsIDI0MDEsIDI2MjksIDI2MzMsIDI3MDIsIDI0NjgsIDI1OTIsIDI1OTIsIDI0MjEsIDI1MzYsIDI3MDMsIDI0NjksIDI1OTIsIDI1OTIsIDI0MjIsIDI1NzMsIDI1OTMsIDI2NzIsIDI0NjcsIDI1OTIsIDI0MDIsIDI0MDYsIDI1OTIsIDI0MDIsIDI5NzksIDI1OTIsIDI1OTIsIDI2MjYsIDI2NzMsIDI0NjcsIDI1OTIsIDI0NDYsIDIyNTksIDI5NDcsIDI1OTIsIDIzNzcsIDI3MDksIDI1OTIsIDI1OTIsIDI1MjIsIDI4NjIsIDI3MTMsIDI0NjgsIDI1OTIsIDI1OTIsIDI1ODEsIDI1NzIsIDI1NjIsIDIzNzQsIDIzNzQsIDI1OTIsIDIzNzYsIDI3MjEsIDI3MjQsIDI1OTIsIDI1OTIsIDI2MjQsIDIzNzMsIDI3MzEsIDI1OTIsIDI1OTIsIDI1OTIsIDI2MjYsIDI3MzIsIDI1OTIsIDI1OTIsIDI1OTIsIDI3NTUsIDI2NTYsIDI3MjYsIDI3MzYsIDI3NDEsIDI1OTIsIDI0ODYsIDI1OTMsIDIzODEsIDI1OTIsIDI3MjcsIDI3MzcsIDI3NDIsIDI3MTUsIDI3NDcsIDI3NTMsIDI1OTIsIDI0OTgsIDI0NjksIDI4NzMsIDI3NDMsIDI1OTIsIDI1OTIsIDI1OTIsIDI3OTEsIDI3NTksIDI3NjMsIDI1OTIsIDI1OTIsIDI2MjcsIDI3MDQsIDI1OTIsIDI1OTIsIDI1MjIsIDI3ODksIDI1OTMsIDI3NjEsIDI3NTMsIDI1OTIsIDI0OTgsIDI4NjMsIDI1OTIsIDI1OTIsIDI3NjcsIDI1OTIsIDI1OTIsIDI1OTIsIDI3OTIsIDI3ODksIDI1OTIsIDI1OTIsIDI1OTIsIDI4MDMsIDIxMjYsIDI1OTIsIDI1OTIsIDI1OTIsIDI4MTEsIDIxMjIsIDI1OTIsIDI1OTIsIDI1OTIsIDI4MzQsIDI3NzcsIDI1OTIsIDI1OTIsIDI1OTIsIDI4NDgsIDI5MzYsIDI1OTEsIDI0ODksIDI3OTcsIDI1OTIsIDI1OTIsIDI2NzAsIDI2MzEsIDI0OTAsIDI3OTgsIDI1OTIsIDI1OTIsIDI1OTIsIDI5NjMsIDI4MDcsIDI1OTIsIDI1OTIsIDI1OTIsIDI5NjUsIDI4MzgsIDI1OTIsIDI1OTIsIDI1OTIsIDI5NzUsIDIzMzAsIDI4MTgsIDI4MjksIDI1OTIsIDI0OTgsIDI5MzksIDI1OTIsIDI0OTgsIDI1OTIsIDI3OTEsIDIzMzEsIDI4MTksIDI4MzAsIDI1OTIsIDI1OTIsIDI1OTIsIDI5ODIsIDI4MzQsIDI4MTcsIDI4MjgsIDIxMDYsIDI1OTIsIDI1OTIsIDI1OTIsIDI0MDUsIDI0MDUsIDI4MTcsIDI4MjgsIDI1OTIsIDI1OTIsIDI0MTUsIDI4NDksIDI4NDIsIDI1OTIsIDI1MjIsIDI3NzMsIDI1OTIsIDI1MjIsIDI4NjgsIDI1OTIsIDI1ODAsIDI2MDAsIDI1ODYsIDIxMzcsIDI4NTAsIDI4NDMsIDI1OTIsIDI1OTIsIDI4NTUsIDI5MzcsIDI4NDQsIDI1OTIsIDI1OTIsIDI1OTIsIDI5ODcsIDI5MzYsIDI1OTEsIDI1OTIsIDI1OTIsIDI2ODQsIDI2MzAsIDI1OTIsIDI4NTYsIDI5MzgsIDI1OTIsIDI1OTIsIDI4NjAsIDI5MzksIDI1OTIsIDI1OTIsIDI4NzIsIDI1OTIsIDI4NjEsIDI1OTEsIDI1OTIsIDI1OTIsIDI4ODcsIDI2MTYsIDI1OTIsIDI4NjcsIDI1OTIsIDI1OTIsIDI3MDgsIDI1OTIsIDI0OTgsIDI0NjksIDI0OTgsIDI0OTcsIDI3ODUsIDI3NzMsIDI0OTksIDI3ODMsIDI3NzAsIDI4NzcsIDI4NzcsIDI4NzcsIDI3NzIsIDI1OTIsIDI1OTIsIDIzNDUsIDI4ODUsIDI1OTIsIDI1OTIsIDI1OTIsIDI3MTUsIDI3NjIsIDI1MTUsIDI4OTYsIDI1OTIsIDI1OTIsIDI3MTUsIDI5MTcsIDI1MTYsIDI4OTcsIDI1OTIsIDI1OTIsIDI1OTIsIDI5MDEsIDI5MDYsIDI5MTEsIDI1OTIsIDI1OTIsIDI5NTYsIDI5NjAsIDI3MTUsIDI5MDIsIDI5MDcsIDI5MTIsIDI1OTMsIDI5MTYsIDI5MjAsIDI4MjAsIDI5MjIsIDI4MjIsIDI1OTIsIDI1OTIsIDI3MTUsIDI5MjcsIDI5MjEsIDI4MjEsIDIxMDYsIDI1OTIsIDI1OTIsIDI5NzQsIDI0MDgsIDIzMjEsIDI4MjEsIDIxMDYsIDI1OTIsIDI1OTIsIDI5ODMsIDI1OTIsIDI1OTMsIDI0MDQsIDI0MDgsIDI1OTIsIDI1OTIsIDI3MTcsIDI3NDksIDI3MTYsIDI5MjgsIDIzMjIsIDI4MjIsIDI1OTMsIDI5MjYsIDI5MTksIDI4MjAsIDI5MzQsIDI4MjMsIDI1OTIsIDI1OTIsIDI1OTIsIDI2NTEsIDI4MjQsIDI1OTIsIDI1OTIsIDI1OTIsIDIxMzAsIDI5NTIsIDI1OTIsIDI1OTIsIDI1OTIsIDI1OTIsIDI5NjQsIDI1OTIsIDI1OTIsIDI3MTYsIDI3NDgsIDI1OTIsIDI5NjksIDI1OTIsIDI1OTIsIDI3MTYsIDI5MTgsIDIzNjgsIDI5NzAsIDI1OTIsIDI1OTIsIDI1OTIsIDI0MDMsIDI0MDcsIDI1OTIsIDI1OTIsIDI3ODcsIDIyMTEsIDI0MDQsIDI0MDksIDI1OTIsIDI1OTIsIDI4MDIsIDI4MzcsIDI5ODcsIDI1OTIsIDI1OTIsIDI1OTIsIDI4MDksIDI0MjcsIDI1OTIsIDI3OTMsIDI1OTIsIDI1OTIsIDI4MDksIDI0NDcsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDUzOTc1NDQ5NiwgNTQyMzc1OTM2LCA0MDI2NTMxODQsIDU1NDQzNDU2MCwgNTcxNzM2MDY0LCA1NDU1MjE4NTYsIDI2ODQ1MTg0MCwgMzM1NTQ0MzIwLCAyNjg2OTM2MzAsIDUxMiwgMjA0OCwgMjU2LCAxMDI0LCAwLCAxMDI0LCAwLCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAwLCAwLCA4Mzg4NjA4LCAwLCAwLCAxMDczNzQxODI0LCAxMDczNzQxODI0LCAwLCAweDgwMDAwMDAwLCA1MzcxMzMwNTYsIDQxOTQzMDQsIDEwNDg1NzYsIDI2ODQzNTQ1NiwgLTEwNzM3NDE4MjQsIDAsIDAsIDAsIDEwNDg1NzYsIDAsIDAsIDAsIDE1NzI4NjQsIDAsIDAsIDAsIDQxOTQzMDQsIDAsIDEzNDIxNzcyOCwgMTY3NzcyMTYsIDAsIDAsIDMyLCA2NCwgOTgzMDQsIDAsIDMzNTU0NDMyLCA4Mzg4NjA4LCAxOTIsIDY3MTA4ODY0LCA2NzEwODg2NCwgNjcxMDg4NjQsIDY3MTA4ODY0LCAxNiwgMzIsIDQsIDAsIDgxOTIsIDE5NjYwOCwgMTk2NjA4LCAyMjkzNzYsIDgwLCA0MDk2LCA1MjQyODgsIDgzODg2MDgsIDAsIDAsIDMyLCAxMjgsIDI1NiwgMjQ1NzYsIDI0NjAwLCAyNDU3NiwgMjQ1NzYsIDIsIDI0NTc2LCAyNDU3NiwgMjQ1NzYsIDI0NTg0LCAyNDU5MiwgMjQ1NzYsIDI0NTc4LCAyNDU3NiwgMjQ1NzgsIDI0NTc2LCAyNDU3NiwgMTYsIDUxMiwgMjA0OCwgMjA0OCwgMjU2LCA0MDk2LCAzMjc2OCwgMTA0ODU3NiwgNDE5NDMwNCwgNjcxMDg4NjQsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCAyNjIxNDQsIDEzNDIxNzcyOCwgMCwgMTI4LCAxMjgsIDY0LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCA2NzEwODg2NCwgMzIsIDMyLCA0LCA0LCA0MDk2LCAyNjIxNDQsIDEzNDIxNzcyOCwgMCwgMCwgMCwgMiwgMCwgODE5MiwgMTMxMDcyLCAxMzEwNzIsIDQwOTYsIDQwOTYsIDQwOTYsIDQwOTYsIDI0NTc2LCAyNDU3NiwgMjQ1NzYsIDgsIDgsIDI0NTc2LCAyNDU3NiwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMjQ1NzYsIDI0NTg0LCAyNDU3NiwgMjQ1NzYsIDI0NTc2LCAxNjM4NCwgMjQ1NzYsIDUzNjg3MDkxMiwgMjYyMTQ0LCAwLCAwLCAzMiwgMjA0OCwgODE5MiwgNCwgNDA5NiwgNDA5NiwgNDA5NiwgNzg2NDMyLCA4Mzg4NjA4LCAxNjc3NzIxNiwgMCwgMTI4LCAxNjM4NCwgMTYzODQsIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDIwOTcxNTIsIDMyLCAzMiwgMzIsIDMyLCA0LCA0LCA0LCA0LCA0LCA0MDk2LCA2NzEwODg2NCwgNjcxMDg4NjQsIDY3MTA4ODY0LCAyNDU3NiwgMjQ1NzYsIDI0NTc2LCAyNDU3NiwgMCwgMTYzODQsIDE2Mzg0LCAxNjM4NCwgMTYzODQsIDY3MTA4ODY0LCA2NzEwODg2NCwgOCwgNjcxMDg4NjQsIDI0NTc2LCA4LCA4LCA4LCAyNDU3NiwgMjQ1NzYsIDI0NTc2LCAyNDU3OCwgMjQ1NzYsIDI0NTc2LCAyNDU3NiwgMiwgMiwgMiwgMTYzODQsIDY3MTA4ODY0LCA2NzEwODg2NCwgNjcxMDg4NjQsIDMyLCA2NzEwODg2NCwgOCwgOCwgMjQ1NzYsIDIwNDgsIDB4ODAwMDAwMDAsIDUzNjg3MDkxMiwgMjYyMTQ0LCAyNjIxNDQsIDI2MjE0NCwgNjcxMDg4NjQsIDgsIDI0NTc2LCAxNjM4NCwgMzI3NjgsIDEwNDg1NzYsIDQxOTQzMDQsIDI1MTY1ODI0LCA2NzEwODg2NCwgMjQ1NzYsIDMyNzcwLCAyLCA0LCAxMTIsIDUxMiwgOTgzMDQsIDUyNDI4OCwgNTAsIDQwMjY1MzE4NiwgMTA0OTA5MCwgMTA0OTA5MSwgMTAsIDY2LCAxMDA5MjU1MTQsIDEwLCA2NiwgMTI1ODI5MTQsIDAsIDAsIC0xNjc4MTk0MjA3LCAtMTY3ODE5NDIwNywgLTEwNDE1NDMyMTgsIDAsIDMyNzY4LCAwLCAwLCAzMiwgNjU1MzYsIDI2ODQzNTQ1NiwgMSwgMSwgNTEzLCAxMDQ4NTc3LCAwLCAxMjU4MjkxMiwgMCwgMCwgMCwgNCwgMTc5MiwgMCwgMCwgMCwgNywgMjkzNjAxMjgsIDAsIDAsIDAsIDgsIDAsIDAsIDAsIDEyLCAxLCAxLCAwLCAwLCAtNjA0MTAyNzIxLCAtNjA0MTAyNzIxLCA0MTk0MzA0LCA4Mzg4NjA4LCAwLCAwLCAwLCAzMSwgOTI1NjAwLCA5OTc5ODEzMDYsIDk5Nzk4MTMwNiwgOTk3OTgxMzA2LCAwLCAwLCAyMDQ4LCA4Mzg4NjA4LCAwLCAwLCAxLCAyLCA0LCAzMiwgNjQsIDUxMiwgODE5MiwgMCwgMCwgMCwgMjQ1NzYwLCA5OTc3MjAwNjQsIDAsIDAsIDAsIDMyLCAwLCAwLCAwLCAzLCAxMiwgMTYsIDMyLCA4LCAxMTIsIDMwNzIsIDEyMjg4LCAxNjM4NCwgMzI3NjgsIDY1NTM2LCAxMzEwNzIsIDc4NjQzMjAsIDE2Nzc3MjE2LCA5NzMwNzg1MjgsIDAsIDAsIDY1NTM2LCAxMzEwNzIsIDM2NzAwMTYsIDQxOTQzMDQsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMiwgOCwgNDgsIDIwNDgsIDgxOTIsIDE2Mzg0LCAzMjc2OCwgNjU1MzYsIDEzMTA3MiwgNTI0Mjg4LCAxMzEwNzIsIDUyNDI4OCwgMzE0NTcyOCwgNDE5NDMwNCwgMTY3NzcyMTYsIDMzNTU0NDMyLCA2NTUzNiwgMTMxMDcyLCAyMDk3MTUyLCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDAsIDAsIDAsIDEwMjQsIDAsIDgsIDQ4LCAyMDQ4LCA4MTkyLCA2NTUzNiwgMzM1NTQ0MzIsIDI2ODQzNTQ1NiwgNTM2ODcwOTEyLCA2NTUzNiwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDAsIDAsIDMyNzY4LCAwLCAwLCAxMjYsIDYyMzEwNCwgNjUwMTE3MTIsIDAsIDMyLCA2NTUzNiwgNTM2ODcwOTEyLCAwLCAwLCA2NTUzNiwgNTI0Mjg4LCAwLCAzMiwgNjU1MzYsIDAsIDAsIDAsIDIwNDgsIDAsIDAsIDAsIDE1NDgyLCAyNDU3NjAsIC02MDQxMDI3MjEsIDAsIDAsIDAsIDE4OTEzLCAzMzA2MjkxMiwgOTI1NjAwLCAtNjA1MDI4MzUyLCAwLCAwLCAwLCA2NTUzNiwgMzEsIDgwOTYsIDEzMTA3MiwgNzg2NDMyLCAzMTQ1NzI4LCAzMTQ1NzI4LCAxMjU4MjkxMiwgNTAzMzE2NDgsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCAxNjAsIDI1NiwgNTEyLCA3MTY4LCAxMzEwNzIsIDc4NjQzMiwgMTMxMDcyLCA3ODY0MzIsIDEwNDg1NzYsIDIwOTcxNTIsIDEyNTgyOTEyLCAxNjc3NzIxNiwgMjY4NDM1NDU2LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAxMjU4MjkxMiwgMTY3NzcyMTYsIDMzNTU0NDMyLCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDMsIDEyLCAxNiwgMTYwLCAyNTYsIDcxNjgsIDc4NjQzMiwgMTA0ODU3NiwgMTI1ODI5MTIsIDE2Nzc3MjE2LCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDAsIDgsIDE2LCAzMiwgMTI4LCAyNTYsIDUxMiwgNzE2OCwgNzg2NDMyLCAxMDQ4NTc2LCAyMDk3MTUyLCAwLCAxLCAyLCA4LCAxNiwgNzE2OCwgNzg2NDMyLCAxMDQ4NTc2LCA4Mzg4NjA4LCAxNjc3NzIxNiwgMTY3NzcyMTYsIDEwNzM3NDE4MjQsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDgsIDMyLCAxMjgsIDI1NiwgNzE2OCwgOCwgMzIsIDAsIDMwNzIsIDAsIDgsIDMyLCAzMDcyLCA0MDk2LCA1MjQyODgsIDgsIDMyLCAwLCAwLCAzMDcyLCA0MDk2LCAwLCAyMDQ4LCA1MjQyODgsIDgzODg2MDgsIDgsIDIwNDgsIDAsIDAsIDEsIDEyLCAyNTYsIDQwOTYsIDMyNzY4LCAyNjIxNDQsIDEwNDg1NzYsIDQxOTQzMDQsIDY3MTA4ODY0LCAwLCAyMDQ4LCAwLCAyMDQ4LCAyMDQ4LCAxMDczNzQxODI0LCAtNTg4MDU5ODUsIC01ODgwNTk4NSwgLTU4ODA1OTg1LCAwLCAwLCAyNjIxNDQsIDAsIDAsIDMyLCA0MTk0MzA0LCAxNjc3NzIxNiwgMTM0MjE3NzI4LCA0MzgyLCAxNzIwMzIsIC01ODk4MjQwMCwgMCwgMCwgMiwgMjgsIDI1NiwgNDA5NiwgODE5MiwgODE5MiwgMzI3NjgsIDEzMTA3MiwgMjYyMTQ0LCA1MjQyODgsIDEsIDIsIDEyLCAyNTYsIDQwOTYsIDAsIDAsIDQxOTQzMDQsIDY3MTA4ODY0LCAxMzQyMTc3MjgsIDgwNTMwNjM2OCwgMTA3Mzc0MTgyNCwgMCwgMCwgMSwgMiwgMTIsIDE2LCAyNTYsIDQwOTYsIDEwNDg1NzYsIDY3MTA4ODY0LCAxMzQyMTc3MjgsIDI2ODQzNTQ1NiwgMCwgNTEyLCAxMDQ4NTc2LCA0MTk0MzA0LCAyMDEzMjY1OTIsIDE4NzkwNDgxOTIsIDAsIDAsIDEyLCAyNTYsIDQwOTYsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDEyLCAyNTYsIDI2ODQzNTQ1NiwgNTM2ODcwOTEyLCAwLCAxMiwgMjU2LCAwLCAwLCAxLCAzMiwgNjQsIDUxMiwgMCwgMCwgMjA1MjM2OTYxLCAyMDUyMzY5NjEsIDAsIDAsIDAsIDEsIDk2LCA2NDAsIDEsIDEwOTc2LCAyMjkzNzYsIDIwNDk5NjYwOCwgMCwgNjQwLCAyMDQ4LCA4MTkyLCAyMjkzNzYsIDE1NzI4NjQsIDE1NzI4NjQsIDIwOTcxNTIsIDIwMTMyNjU5MiwgMCwgMCwgMCwgNjQsIDUxMiwgMjA0OCwgMjI5Mzc2LCAxNTcyODY0LCAyMDEzMjY1OTIsIDE1NzI4NjQsIDIwMTMyNjU5MiwgMCwgMCwgMSwgNDM4MiwgMCwgMSwgMzIsIDIwNDgsIDY1NTM2LCAxMzEwNzIsIDE1NzI4NjQsIDIwMTMyNjU5MiwgMTMxMDcyLCAxNTcyODY0LCAxMzQyMTc3MjgsIDAsIDAsIDUyNDI4OCwgNTI0Mjg4LCAwLCAwLCAwLCAtNjg1ODI3ODYsIC02ODU4Mjc4NiwgLTY4NTgyNzg2LCAwLCAwLCAyMDk3MTUyLCA1MjQyODgsIDAsIDUyNDI4OCwgMCwgMCwgNjU1MzYsIDEzMTA3MiwgMTU3Mjg2NCwgMCwgMCwgMiwgNCwgMCwgMCwgNjUwMTE3MTIsIC0xMzQyMTc3MjgsIDAsIDAsIDAsIDAsIDIsIDQsIDEyMCwgNTEyLCAtMjY4NDM1NDU2LCAwLCAwLCAwLCAyLCA4LCA0OCwgNjQsIDIwNDgsIDgxOTIsIDk4MzA0LCA1MjQyODgsIDIwOTcxNTIsIDQxOTQzMDQsIDI1MTY1ODI0LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDAsIDI1MTY1ODI0LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAxODc5MDQ4MTkyLCAweDgwMDAwMDAwLCAwLCAwLCA0LCAxMTIsIDUxMiwgNjIyNTkyLCA2NTAxMTcxMiwgMTM0MjE3NzI4LCAtMjY4NDM1NDU2LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMTYxMDYxMjczNiwgMCwgMCwgMCwgNjQsIDk4MzA0LCA1MjQyODgsIDQxOTQzMDQsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgMCwgOTgzMDQsIDUyNDI4OCwgMTY3NzcyMTYsIDMzNTU0NDMyLCAwLCA2NTUzNiwgNTI0Mjg4LCAzMzU1NDQzMiwgNTM2ODcwOTEyLCAxMDczNzQxODI0LCAwLCA2NTUzNiwgNTI0Mjg4LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDAsIDAsIDY1NTM2LCA1MjQyODgsIDUzNjg3MDkxMiwgMCwgNTI0Mjg4LCAwLCA1MjQyODgsIDUyNDI4OCwgMTA0ODU3NiwgMjA4NjY2NjI0MCwgMHg4MDAwMDAwMCwgMCwgLTE2NzgxOTQyMDcsIDAsIDAsIDAsIDgsIDMyLCAyMDQ4LCA1MjQyODgsIDgzODg2MDgsIDAsIDAsIDMzMDYyOTEyLCA0MzYyMDc2MTYsIDB4ODAwMDAwMDAsIDAsIDAsIDMyLCA2NCwgMjQzMiwgMTYzODQsIDMyNzY4LCAzMjc2OCwgNTI0Mjg4LCAzMTQ1NzI4LCA0MTk0MzA0LCAyNTE2NTgyNCwgMjUxNjU4MjQsIDE2Nzc3MjE2MCwgMjY4NDM1NDU2LCAweDgwMDAwMDAwLCAwLCAzMiwgNjQsIDM4NCwgMjA0OCwgMTYzODQsIDMyNzY4LCAxMDQ4NTc2LCAyMDk3MTUyLCA0MTk0MzA0LCAyNTE2NTgyNCwgMzIsIDY0LCAxMjgsIDI1NiwgMjA0OCwgMTYzODQsIDIwNDgsIDE2Mzg0LCAxMDQ4NTc2LCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgNTM2ODcwOTEyLCAxMDczNzQxODI0LCAwLCAwLCAyMDQ4LCAxNjM4NCwgNDE5NDMwNCwgMTY3NzcyMTYsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDgwNTMwNjM2OCwgMCwgMCwgMTY3NzcyMTYsIDEzNDIxNzcyOCwgMjY4NDM1NDU2LCAweDgwMDAwMDAwLCAwLCA2MjI1OTIsIDYyMjU5MiwgNjIyNTkyLCA4ODA3LCA4ODA3LCA0MzQ3OTEsIDAsIDAsIDE2Nzc3MjE2LCAwLCAwLCAwLCA3LCA2MDgsIDgxOTIsIDAsIDAsIDAsIDMsIDQsIDk2LCA1MTIsIDMyLCA2NCwgODE5MiwgMCwgMCwgMTY3NzcyMTYsIDEzNDIxNzcyOCwgMCwgMCwgMiwgNCwgODE5MiwgMTYzODQsIDY1NTM2LCAyMDk3MTUyLCAzMzU1NDQzMiwgMjY4NDM1NDU2Cl07CgpYUXVlcnlUb2tlbml6ZXIuVE9LRU4gPQpbCiAgIigwKSIsCiAgIk1vZHVsZURlY2wiLAogICJBbm5vdGF0aW9uIiwKICAiT3B0aW9uRGVjbCIsCiAgIk9wZXJhdG9yIiwKICAiVmFyaWFibGUiLAogICJUYWciLAogICJFbmRUYWciLAogICJQcmFnbWFDb250ZW50cyIsCiAgIkRpckNvbW1lbnRDb250ZW50cyIsCiAgIkRpclBJQ29udGVudHMiLAogICJDRGF0YVNlY3Rpb25Db250ZW50cyIsCiAgIkF0dHJUZXN0IiwKICAiV2lsZGNhcmQiLAogICJFUU5hbWUiLAogICJJbnRlZ2VyTGl0ZXJhbCIsCiAgIkRlY2ltYWxMaXRlcmFsIiwKICAiRG91YmxlTGl0ZXJhbCIsCiAgIlByZWRlZmluZWRFbnRpdHlSZWYiLAogICInXCJcIiciLAogICJFc2NhcGVBcG9zIiwKICAiUXVvdENoYXIiLAogICJBcG9zQ2hhciIsCiAgIkVsZW1lbnRDb250ZW50Q2hhciIsCiAgIlF1b3RBdHRyQ29udGVudENoYXIiLAogICJBcG9zQXR0ckNvbnRlbnRDaGFyIiwKICAiTkNOYW1lIiwKICAiUU5hbWUiLAogICJTIiwKICAiQ2hhclJlZiIsCiAgIkNvbW1lbnRDb250ZW50cyIsCiAgIkRvY1RhZyIsCiAgIkRvY0NvbW1lbnRDb250ZW50cyIsCiAgIkVPRiIsCiAgIichJyIsCiAgIidcIiciLAogICInIyciLAogICInIyknIiwKICAiJycnJyIsCiAgIicoJyIsCiAgIicoIyciLAogICInKDonIiwKICAiJyg6ficiLAogICInKSciLAogICInKiciLAogICInKiciLAogICInLCciLAogICInLS0+JyIsCiAgIicuJyIsCiAgIicvJyIsCiAgIicvPiciLAogICInOiciLAogICInOiknIiwKICAiJzsnIiwKICAiJzwhLS0nIiwKICAiJzwhW0NEQVRBWyciLAogICInPD8nIiwKICAiJz0nIiwKICAiJz4nIiwKICAiJz8nIiwKICAiJz8+JyIsCiAgIidOYU4nIiwKICAiJ1snIiwKICAiJ10nIiwKICAiJ11dPiciLAogICInYWZ0ZXInIiwKICAiJ2FsbCciLAogICInYWxsb3dpbmcnIiwKICAiJ2FuY2VzdG9yJyIsCiAgIidhbmNlc3Rvci1vci1zZWxmJyIsCiAgIidhbmQnIiwKICAiJ2FueSciLAogICInYXBwZW5kJyIsCiAgIidhcnJheSciLAogICInYXMnIiwKICAiJ2FzY2VuZGluZyciLAogICInYXQnIiwKICAiJ2F0dHJpYnV0ZSciLAogICInYmFzZS11cmknIiwKICAiJ2JlZm9yZSciLAogICInYm91bmRhcnktc3BhY2UnIiwKICAiJ2JyZWFrJyIsCiAgIidieSciLAogICInY2FzZSciLAogICInY2FzdCciLAogICInY2FzdGFibGUnIiwKICAiJ2NhdGNoJyIsCiAgIidjaGVjayciLAogICInY2hpbGQnIiwKICAiJ2NvbGxhdGlvbiciLAogICInY29sbGVjdGlvbiciLAogICInY29tbWVudCciLAogICInY29uc3RyYWludCciLAogICInY29uc3RydWN0aW9uJyIsCiAgIidjb250YWlucyciLAogICInY29udGVudCciLAogICInY29udGV4dCciLAogICInY29udGludWUnIiwKICAiJ2NvcHknIiwKICAiJ2NvcHktbmFtZXNwYWNlcyciLAogICInY291bnQnIiwKICAiJ2RlY2ltYWwtZm9ybWF0JyIsCiAgIidkZWNpbWFsLXNlcGFyYXRvciciLAogICInZGVjbGFyZSciLAogICInZGVmYXVsdCciLAogICInZGVsZXRlJyIsCiAgIidkZXNjZW5kYW50JyIsCiAgIidkZXNjZW5kYW50LW9yLXNlbGYnIiwKICAiJ2Rlc2NlbmRpbmcnIiwKICAiJ2RpYWNyaXRpY3MnIiwKICAiJ2RpZmZlcmVudCciLAogICInZGlnaXQnIiwKICAiJ2Rpc3RhbmNlJyIsCiAgIidkaXYnIiwKICAiJ2RvY3VtZW50JyIsCiAgIidkb2N1bWVudC1ub2RlJyIsCiAgIidlbGVtZW50JyIsCiAgIidlbHNlJyIsCiAgIidlbXB0eSciLAogICInZW1wdHktc2VxdWVuY2UnIiwKICAiJ2VuY29kaW5nJyIsCiAgIidlbmQnIiwKICAiJ2VudGlyZSciLAogICInZXEnIiwKICAiJ2V2ZXJ5JyIsCiAgIidleGFjdGx5JyIsCiAgIidleGNlcHQnIiwKICAiJ2V4aXQnIiwKICAiJ2V4dGVybmFsJyIsCiAgIidmaXJzdCciLAogICInZm9sbG93aW5nJyIsCiAgIidmb2xsb3dpbmctc2libGluZyciLAogICInZm9yJyIsCiAgIidmb3JlYWNoJyIsCiAgIidmb3JlaWduJyIsCiAgIidmcm9tJyIsCiAgIidmdC1vcHRpb24nIiwKICAiJ2Z0YW5kJyIsCiAgIidmdG5vdCciLAogICInZnRvciciLAogICInZnVuY3Rpb24nIiwKICAiJ2dlJyIsCiAgIidncmVhdGVzdCciLAogICInZ3JvdXAnIiwKICAiJ2dyb3VwaW5nLXNlcGFyYXRvciciLAogICInZ3QnIiwKICAiJ2lkaXYnIiwKICAiJ2lmJyIsCiAgIidpbXBvcnQnIiwKICAiJ2luJyIsCiAgIidpbmRleCciLAogICInaW5maW5pdHknIiwKICAiJ2luaGVyaXQnIiwKICAiJ2luc2Vuc2l0aXZlJyIsCiAgIidpbnNlcnQnIiwKICAiJ2luc3RhbmNlJyIsCiAgIidpbnRlZ3JpdHknIiwKICAiJ2ludGVyc2VjdCciLAogICInaW50byciLAogICInaXMnIiwKICAiJ2l0ZW0nIiwKICAiJ2pzb24nIiwKICAiJ2pzb24taXRlbSciLAogICIna2V5JyIsCiAgIidsYW5ndWFnZSciLAogICInbGFzdCciLAogICInbGF4JyIsCiAgIidsZSciLAogICInbGVhc3QnIiwKICAiJ2xldCciLAogICInbGV2ZWxzJyIsCiAgIidsb29wJyIsCiAgIidsb3dlcmNhc2UnIiwKICAiJ2x0JyIsCiAgIidtaW51cy1zaWduJyIsCiAgIidtb2QnIiwKICAiJ21vZGlmeSciLAogICInbW9kdWxlJyIsCiAgIidtb3N0JyIsCiAgIiduYW1lc3BhY2UnIiwKICAiJ25hbWVzcGFjZS1ub2RlJyIsCiAgIiduZSciLAogICInbmV4dCciLAogICInbm8nIiwKICAiJ25vLWluaGVyaXQnIiwKICAiJ25vLXByZXNlcnZlJyIsCiAgIidub2RlJyIsCiAgIidub2RlcyciLAogICInbm90JyIsCiAgIidvYmplY3QnIiwKICAiJ29jY3VycyciLAogICInb2YnIiwKICAiJ29uJyIsCiAgIidvbmx5JyIsCiAgIidvcHRpb24nIiwKICAiJ29yJyIsCiAgIidvcmRlciciLAogICInb3JkZXJlZCciLAogICInb3JkZXJpbmcnIiwKICAiJ3BhcmFncmFwaCciLAogICIncGFyYWdyYXBocyciLAogICIncGFyZW50JyIsCiAgIidwYXR0ZXJuLXNlcGFyYXRvciciLAogICIncGVyLW1pbGxlJyIsCiAgIidwZXJjZW50JyIsCiAgIidwaHJhc2UnIiwKICAiJ3Bvc2l0aW9uJyIsCiAgIidwcmVjZWRpbmcnIiwKICAiJ3ByZWNlZGluZy1zaWJsaW5nJyIsCiAgIidwcmVzZXJ2ZSciLAogICIncHJldmlvdXMnIiwKICAiJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nIiwKICAiJ3JlbGF0aW9uc2hpcCciLAogICIncmVuYW1lJyIsCiAgIidyZXBsYWNlJyIsCiAgIidyZXR1cm4nIiwKICAiJ3JldHVybmluZyciLAogICIncmV2YWxpZGF0aW9uJyIsCiAgIidzYW1lJyIsCiAgIidzYXRpc2ZpZXMnIiwKICAiJ3NjaGVtYSciLAogICInc2NoZW1hLWF0dHJpYnV0ZSciLAogICInc2NoZW1hLWVsZW1lbnQnIiwKICAiJ3Njb3JlJyIsCiAgIidzZWxmJyIsCiAgIidzZW5zaXRpdmUnIiwKICAiJ3NlbnRlbmNlJyIsCiAgIidzZW50ZW5jZXMnIiwKICAiJ3NraXAnIiwKICAiJ3NsaWRpbmcnIiwKICAiJ3NvbWUnIiwKICAiJ3N0YWJsZSciLAogICInc3RhcnQnIiwKICAiJ3N0ZW1taW5nJyIsCiAgIidzdG9wJyIsCiAgIidzdHJpY3QnIiwKICAiJ3N0cmlwJyIsCiAgIidzdHJ1Y3R1cmVkLWl0ZW0nIiwKICAiJ3N3aXRjaCciLAogICIndGV4dCciLAogICIndGhlbiciLAogICIndGhlc2F1cnVzJyIsCiAgIid0aW1lcyciLAogICIndG8nIiwKICAiJ3RyZWF0JyIsCiAgIid0cnknIiwKICAiJ3R1bWJsaW5nJyIsCiAgIid0eXBlJyIsCiAgIid0eXBlc3dpdGNoJyIsCiAgIid1bmlvbiciLAogICIndW5pcXVlJyIsCiAgIid1bm9yZGVyZWQnIiwKICAiJ3VwZGF0aW5nJyIsCiAgIid1cHBlcmNhc2UnIiwKICAiJ3VzaW5nJyIsCiAgIid2YWxpZGF0ZSciLAogICIndmFsdWUnIiwKICAiJ3ZhcmlhYmxlJyIsCiAgIid2ZXJzaW9uJyIsCiAgIid3ZWlnaHQnIiwKICAiJ3doZW4nIiwKICAiJ3doZXJlJyIsCiAgIid3aGlsZSciLAogICInd2lsZGNhcmRzJyIsCiAgIid3aW5kb3cnIiwKICAiJ3dpdGgnIiwKICAiJ3dpdGhvdXQnIiwKICAiJ3dvcmQnIiwKICAiJ3dvcmRzJyIsCiAgIid4cXVlcnknIiwKICAiJ3plcm8tZGlnaXQnIiwKICAiJ3snIiwKICAiJ3t7JyIsCiAgIid8JyIsCiAgIid9JyIsCiAgIid9fSciCl07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9qc29uaXFfbGV4ZXIuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKdmFyIEpTT05pcVRva2VuaXplciA9IF9kZXJlcV8oJy4vSlNPTmlxVG9rZW5pemVyJykuSlNPTmlxVG9rZW5pemVyOwp2YXIgTGV4ZXIgPSBfZGVyZXFfKCcuL2xleGVyJykuTGV4ZXI7Cgp2YXIga2V5cyA9ICdOYU58YWZ0ZXJ8YWxsb3dpbmd8YW5jZXN0b3J8YW5jZXN0b3Itb3Itc2VsZnxhbmR8YXBwZW5kfGFycmF5fGFzfGFzY2VuZGluZ3xhdHxhdHRyaWJ1dGV8YmFzZS11cml8YmVmb3JlfGJvdW5kYXJ5LXNwYWNlfGJyZWFrfGJ5fGNhc2V8Y2FzdHxjYXN0YWJsZXxjYXRjaHxjaGlsZHxjb2xsYXRpb258Y29tbWVudHxjb25zdHJhaW50fGNvbnN0cnVjdGlvbnxjb250YWluc3xjb250ZXh0fGNvbnRpbnVlfGNvcHl8Y29weS1uYW1lc3BhY2VzfGNvdW50fGRlY2ltYWwtZm9ybWF0fGRlY2ltYWwtc2VwYXJhdG9yfGRlY2xhcmV8ZGVmYXVsdHxkZWxldGV8ZGVzY2VuZGFudHxkZXNjZW5kYW50LW9yLXNlbGZ8ZGVzY2VuZGluZ3xkaWdpdHxkaXZ8ZG9jdW1lbnR8ZG9jdW1lbnQtbm9kZXxlbGVtZW50fGVsc2V8ZW1wdHl8ZW1wdHktc2VxdWVuY2V8ZW5jb2Rpbmd8ZW5kfGVxfGV2ZXJ5fGV4Y2VwdHxleGl0fGV4dGVybmFsfGZhbHNlfGZpcnN0fGZvbGxvd2luZ3xmb2xsb3dpbmctc2libGluZ3xmb3J8ZnJvbXxmdC1vcHRpb258ZnVuY3Rpb258Z2V8Z3JlYXRlc3R8Z3JvdXB8Z3JvdXBpbmctc2VwYXJhdG9yfGd0fGlkaXZ8aWZ8aW1wb3J0fGlufGluZGV4fGluZmluaXR5fGluc2VydHxpbnN0YW5jZXxpbnRlZ3JpdHl8aW50ZXJzZWN0fGludG98aXN8aXRlbXxqc29ufGpzb24taXRlbXxqc29uaXF8bGFzdHxsYXh8bGV8bGVhc3R8bGV0fGxvb3B8bHR8bWludXMtc2lnbnxtb2R8bW9kaWZ5fG1vZHVsZXxuYW1lc3BhY2V8bmFtZXNwYWNlLW5vZGV8bmV8bmV4dHxub2RlfG5vZGVzfG5vdHxudWxsfG9iamVjdHxvZnxvbmx5fG9wdGlvbnxvcnxvcmRlcnxvcmRlcmVkfG9yZGVyaW5nfHBhcmFncmFwaHN8cGFyZW50fHBhdHRlcm4tc2VwYXJhdG9yfHBlci1taWxsZXxwZXJjZW50fHByZWNlZGluZ3xwcmVjZWRpbmctc2libGluZ3xwcmV2aW91c3xwcm9jZXNzaW5nLWluc3RydWN0aW9ufHJlbmFtZXxyZXBsYWNlfHJldHVybnxyZXR1cm5pbmd8cmV2YWxpZGF0aW9ufHNhdGlzZmllc3xzY2hlbWF8c2NoZW1hLWF0dHJpYnV0ZXxzY2hlbWEtZWxlbWVudHxzY29yZXxzZWxlY3R8c2VsZnxzZW50ZW5jZXN8c2xpZGluZ3xzb21lfHN0YWJsZXxzdGFydHxzdHJpY3R8c3dpdGNofHRleHR8dGhlbnx0aW1lc3x0b3x0cmVhdHx0cnVlfHRyeXx0dW1ibGluZ3x0eXBlfHR5cGVzd2l0Y2h8dW5pb258dW5vcmRlcmVkfHVwZGF0aW5nfHZhbGlkYXRlfHZhbHVlfHZhcmlhYmxlfHZlcnNpb258d2hlbnx3aGVyZXx3aGlsZXx3aW5kb3d8d2l0aHx3b3Jkc3x4cXVlcnl8emVyby1kaWdpdCcuc3BsaXQoJ3wnKTsKdmFyIGtleXdvcmRzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7IHJldHVybiB7IG5hbWU6ICdcJycgKyB2YWwgKyAnXCcnLCB0b2tlbjogJ2tleXdvcmQnIH07IH0pOwp2YXIgbmNuYW1lcyA9IGtleXMubWFwKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4geyBuYW1lOiAnXCcnICsgdmFsICsgJ1wnJywgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9OyB9KTsKCnZhciBjZGF0YSA9ICdjb25zdGFudC5sYW5ndWFnZSc7CnZhciBudW1iZXIgPSAnY29uc3RhbnQnOwp2YXIgeG1sY29tbWVudCA9ICdjb21tZW50JzsKdmFyIHBpID0gJ3htbC1wZSc7CnZhciBwcmFnbWEgPSAnY29uc3RhbnQuYnVpbGRpbic7CnZhciBuID0gZnVuY3Rpb24obmFtZSl7CiAgICByZXR1cm4gJ1wnJyArIG5hbWUgKyAnXCcnOwp9Owp2YXIgUnVsZXMgPSB7CiAgICBzdGFydDogWwogICAgICAgIHsgbmFtZTogbignKCMnKSwgdG9rZW46IHByYWdtYSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdQcmFnbWEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJyg6ficpLCB0b2tlbjogJ2NvbW1lbnQuZG9jJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50RG9jJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzwhLS0nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnWE1MQ29tbWVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc8PycpLCB0b2tlbjogcGksIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKSB7IHN0YWNrLnB1c2goJ1BJJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ1wnXCcnKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ0Fwb3NTdHJpbmcnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUXVvdFN0cmluZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnQW5ub3RhdGlvbicsIHRva2VuOiAnc3VwcG9ydC5mdW5jdGlvbicgfSwKICAgICAgICB7IG5hbWU6ICdNb2R1bGVEZWNsJywgdG9rZW46ICdrZXl3b3JkJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdQcmVmaXgnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ09wdGlvbkRlY2wnLCB0b2tlbjogJ2tleXdvcmQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ19FUU5hbWUnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ0F0dHJUZXN0JywgdG9rZW46ICdzdXBwb3J0LnR5cGUnIH0sCiAgICAgICAgeyBuYW1lOiAnVmFyaWFibGUnLCB0b2tlbjogJ3ZhcmlhYmxlJyB9LAogICAgICAgIHsgbmFtZTogbignPCFbQ0RBVEFbJyksIHRva2VuOiBjZGF0YSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDRGF0YScpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnSW50ZWdlckxpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnRGVjaW1hbExpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnRG91YmxlTGl0ZXJhbCcsIHRva2VuOiBudW1iZXIgfSwKICAgICAgICB7IG5hbWU6ICdPcGVyYXRvcicsIHRva2VuOiAna2V5d29yZC5vcGVyYXRvcicgfSwKICAgICAgICB7IG5hbWU6ICdFUU5hbWUnLCB0b2tlbjogZnVuY3Rpb24odmFsKSB7IHJldHVybiBrZXlzLmluZGV4T2YodmFsKSAhPT0gLTEgPyAna2V5d29yZCcgOiAnc3VwcG9ydC5mdW5jdGlvbic7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJygnKSwgdG9rZW46ICdscGFyZW4nIH0sCiAgICAgICAgeyBuYW1lOiBuKCcpJyksIHRva2VuOiAncnBhcmVuJyB9LAogICAgICAgIHsgbmFtZTogJ1RhZycsIHRva2VuOiAnbWV0YS50YWcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1N0YXJ0VGFnJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ30nKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBpZihzdGFjay5sZW5ndGggPiAxKSB7IHN0YWNrLnBvcCgpOyB9IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0gLy8sIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgaWYoc3RhY2subGVuZ3RoID4gMSkgeyBzdGFjay5wb3AoKTsgfSB9IH0KICAgIF0uY29uY2F0KGtleXdvcmRzKSwKICAgIF9FUU5hbWU6IFsKICAgICAgICB7IG5hbWU6ICdFUU5hbWUnLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjaykgeyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLmNvbmNhdChuY25hbWVzKSwKICAgIFByZWZpeDogWwogICAgICAgIHsgbmFtZTogJ05DTmFtZScsIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKSB7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0uY29uY2F0KG5jbmFtZXMpLAogICAgU3RhcnRUYWc6IFsKICAgICAgICB7IG5hbWU6IG4oJz4nKSwgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnVGFnQ29udGVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUU5hbWUnLCB0b2tlbjogJ2VudGl0eS5vdGhlci5hdHRyaWJ1dGUtbmFtZScgfSwKICAgICAgICB7IG5hbWU6IG4oJz0nKSwgdG9rZW46ICd0ZXh0JyB9LAogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQXBvc0F0dHInKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUXVvdEF0dHInKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignLz4nKSwgdG9rZW46ICdtZXRhLnRhZy5yJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgVGFnQ29udGVudDogWwogICAgICAgIHsgbmFtZTogJ0VsZW1lbnRDb250ZW50Q2hhcicsIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJzwhW0NEQVRBWycpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ0RhdGEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignPCEtLScpLCB0b2tlbjogeG1sY29tbWVudCwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdYTUxDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdUYWcnLCB0b2tlbjogJ21ldGEudGFnJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdTdGFydFRhZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUHJlZGVmaW5lZEVudGl0eVJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0NoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6IG4oJ3t7JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnRW5kVGFnJywgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBBcG9zQXR0cjogWwogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVBcG9zJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQXBvc0F0dHJDb250ZW50Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogbigneycpLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ3N0YXJ0Jyk7IH0gfQogICAgXSwKICAgIFF1b3RBdHRyOiBbCiAgICAgICAgeyBuYW1lOiBuKCdcIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVRdW90JywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnUXVvdEF0dHJDb250ZW50Q2hhcicsIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ319JyksIHRva2VuOiAnc3RyaW5nJyB9LAogICAgICAgIHsgbmFtZTogbigneycpLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ3N0YXJ0Jyk7IH0gfQogICAgXSwKICAgIFByYWdtYTogWwogICAgICAgIHsgbmFtZTogJ1ByYWdtYUNvbnRlbnRzJywgdG9rZW46IHByYWdtYSB9LAogICAgICAgIHsgbmFtZTogbignIycpLCB0b2tlbjogcHJhZ21hIH0sCiAgICAgICAgeyBuYW1lOiBuKCcjKScpLCB0b2tlbjogcHJhZ21hLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBDb21tZW50OiBbCiAgICAgICAgeyBuYW1lOiAnQ29tbWVudENvbnRlbnRzJywgdG9rZW46ICdjb21tZW50JyB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdDb21tZW50Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzopJyksIHRva2VuOiAnY29tbWVudCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIENvbW1lbnREb2M6IFsKICAgICAgICB7IG5hbWU6ICdEb2NDb21tZW50Q29udGVudHMnLCB0b2tlbjogJ2NvbW1lbnQuZG9jJyB9LAogICAgICAgIHsgbmFtZTogJ0RvY1RhZycsIHRva2VuOiAnY29tbWVudC5kb2MudGFnJyB9LAogICAgICAgIHsgbmFtZTogbignKDonKSwgdG9rZW46ICdjb21tZW50LmRvYycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ29tbWVudERvYycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc6KScpLCB0b2tlbjogJ2NvbW1lbnQuZG9jJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgWE1MQ29tbWVudDogWwogICAgICAgIHsgbmFtZTogJ0RpckNvbW1lbnRDb250ZW50cycsIHRva2VuOiB4bWxjb21tZW50IH0sCiAgICAgICAgeyBuYW1lOiBuKCctLT4nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIENEYXRhOiBbCiAgICAgICAgeyBuYW1lOiAnQ0RhdGFTZWN0aW9uQ29udGVudHMnLCB0b2tlbjogY2RhdGEgfSwKICAgICAgICB7IG5hbWU6IG4oJ11dPicpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIFBJOiBbCiAgICAgICAgeyBuYW1lOiAnRGlyUElDb250ZW50cycsIHRva2VuOiBwaSB9LAogICAgICAgIHsgbmFtZTogbignPycpLCB0b2tlbjogcGkgfSwKICAgICAgICB7IG5hbWU6IG4oJz8+JyksIHRva2VuOiBwaSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgQXBvc1N0cmluZzogWwogICAgICAgIHsgbmFtZTogbignXCdcJycpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdQcmVkZWZpbmVkRW50aXR5UmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0VzY2FwZUFwb3MnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdBcG9zQ2hhcicsIHRva2VuOiAnc3RyaW5nJyB9CiAgICBdLAogICAgUXVvdFN0cmluZzogWwogICAgICAgIHsgbmFtZTogbignIicpLCB0b2tlbjogJ3N0cmluZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdKU09OUHJlZGVmaW5lZENoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdKU09OQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0pTT05DaGFyJywgdG9rZW46ICdzdHJpbmcnIH0KICAgIF0KfTsKICAgIApleHBvcnRzLkpTT05pcUxleGVyID0gZnVuY3Rpb24oKXsgcmV0dXJuIG5ldyBMZXhlcihKU09OaXFUb2tlbml6ZXIsIFJ1bGVzKTsgfTsKfSx7Ii4vSlNPTmlxVG9rZW5pemVyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9KU09OaXFUb2tlbml6ZXIuanMiLCIuL2xleGVyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9sZXhlci5qcyJ9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy9sZXhlci5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgVG9rZW5IYW5kbGVyID0gZnVuY3Rpb24oY29kZSkgewogICAgdmFyIGlucHV0ID0gY29kZTsKICAgIHRoaXMudG9rZW5zID0gW107CiAKICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbigpIHsKICAgICAgICBpbnB1dCA9IGlucHV0OwogICAgICAgIHRoaXMudG9rZW5zID0gW107CiAgICB9OwogICAgCiAgICB0aGlzLnN0YXJ0Tm9udGVybWluYWwgPSBmdW5jdGlvbigpIHt9OwogICAgdGhpcy5lbmROb250ZXJtaW5hbCA9IGZ1bmN0aW9uKCkge307CgogICAgdGhpcy50ZXJtaW5hbCA9IGZ1bmN0aW9uKG5hbWUsIGJlZ2luLCBlbmQpIHsKICAgICAgICB0aGlzLnRva2Vucy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgdmFsdWU6IGlucHV0LnN1YnN0cmluZyhiZWdpbiwgZW5kKQogICAgICAgIH0pOwogICAgfTsKCiAgICB0aGlzLndoaXRlc3BhY2UgPSBmdW5jdGlvbihiZWdpbiwgZW5kKSB7CiAgICAgICAgdGhpcy50b2tlbnMucHVzaCh7CiAgICAgICAgICAgIG5hbWU6ICdXUycsCiAgICAgICAgICAgIHZhbHVlOiBpbnB1dC5zdWJzdHJpbmcoYmVnaW4sIGVuZCkKICAgICAgICB9KTsKICAgIH07Cn07CgpleHBvcnRzLkxleGVyID0gZnVuY3Rpb24oVG9rZW5pemVyLCBSdWxlcykgewoKICAgIHRoaXMudG9rZW5zID0gW107CiAgCiAgICB0aGlzLmdldExpbmVUb2tlbnMgPSBmdW5jdGlvbihsaW5lLCBzdGF0ZSkgewogICAgICAgIHN0YXRlID0gKHN0YXRlID09PSAnc3RhcnQnIHx8ICFzdGF0ZSkgPyAnWyJzdGFydCJdJyA6IHN0YXRlOwogICAgICAgIHZhciBzdGFjayA9IEpTT04ucGFyc2Uoc3RhdGUpOwogICAgICAgIHZhciBoID0gbmV3IFRva2VuSGFuZGxlcihsaW5lKTsKICAgICAgICB2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcihsaW5lLCBoKTsKICAgICAgICB2YXIgdG9rZW5zID0gW107CiAgICAKICAgICAgICB3aGlsZSh0cnVlKSB7CiAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGgudG9rZW5zID0gW107CiAgICAgICAgICAgICAgICB0b2tlbml6ZXJbJ3BhcnNlXycgKyBjdXJyZW50U3RhdGVdKCk7CiAgICAgICAgICAgICAgICB2YXIgaW5mbyA9IG51bGw7CiAgICAgICAgCiAgICAgICAgICAgICAgICBpZihoLnRva2Vucy5sZW5ndGggPiAxICYmIGgudG9rZW5zWzBdLm5hbWUgPT09ICdXUycpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbnMucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JywKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGgudG9rZW5zWzBdLnZhbHVlCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgaC50b2tlbnMuc3BsaWNlKDAsIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgdmFyIHRva2VuID0gaC50b2tlbnNbMF07CiAgICAgICAgICAgICAgICB2YXIgcnVsZXMgID0gUnVsZXNbY3VycmVudFN0YXRlXTsKICAgICAgICAgICAgICAgIGZvcih2YXIgayA9IDA7IGsgPCBydWxlcy5sZW5ndGg7IGsrKykgewogICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gUnVsZXNbY3VycmVudFN0YXRlXVtrXTsKICAgICAgICAgICAgICAgICAgICBpZigodHlwZW9mKHJ1bGUubmFtZSkgPT09ICdmdW5jdGlvbicgJiYgcnVsZS5uYW1lKHRva2VuKSkgfHwgcnVsZS5uYW1lID09PSB0b2tlbi5uYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBydWxlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBpZih0b2tlbi5uYW1lID09PSAnRU9GJykgeyBicmVhazsgfQogICAgICAgICAgICAgICAgaWYodG9rZW4udmFsdWUgPT09ICcnKSB7IHRocm93ICdFbmNvdW50ZXJlZCBlbXB0eSBzdHJpbmcgbGV4aWNhbCBydWxlLic7IH0KICAgICAgICAKICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiBpbmZvID09PSBudWxsID8gJ3RleHQnIDogKHR5cGVvZihpbmZvLnRva2VuKSA9PT0gJ2Z1bmN0aW9uJyA/IGluZm8udG9rZW4odG9rZW4udmFsdWUpIDogaW5mby50b2tlbiksCiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAKICAgICAgICAgICAgICAgIGlmKGluZm8gJiYgaW5mby5uZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgaW5mby5uZXh0KHN0YWNrKTsKICAgICAgICAgICAgICAgIH0KICAgICAgCiAgICAgICAgICAgIH0gY2F0Y2goZSkgewogICAgICAgICAgICAgICAgaWYoZSBpbnN0YW5jZW9mIHRva2VuaXplci5QYXJzZUV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7CiAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBpPTA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gdG9rZW5zW2ldLnZhbHVlLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiBsaW5lLnN1YnN0cmluZyhpbmRleCkgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zOiB0b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiBKU09OLnN0cmluZ2lmeShbJ3N0YXJ0J10pCiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9rZW5zOiB0b2tlbnMsCiAgICAgICAgICAgIHN0YXRlOiBKU09OLnN0cmluZ2lmeShzdGFjaykKICAgICAgICB9OwogICAgfTsKfTsKfSx7fV0sIi9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9sZXhlcnMveHF1ZXJ5X2xleGVyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCnZhciBYUXVlcnlUb2tlbml6ZXIgPSBfZGVyZXFfKCcuL1hRdWVyeVRva2VuaXplcicpLlhRdWVyeVRva2VuaXplcjsKdmFyIExleGVyID0gX2RlcmVxXygnLi9sZXhlcicpLkxleGVyOwoKdmFyIGtleXMgPSAnYWZ0ZXJ8YW5jZXN0b3J8YW5jZXN0b3Itb3Itc2VsZnxhbmR8YXN8YXNjZW5kaW5nfGF0dHJpYnV0ZXxiZWZvcmV8Y2FzZXxjYXN0fGNhc3RhYmxlfGNoaWxkfGNvbGxhdGlvbnxjb21tZW50fGNvcHl8Y291bnR8ZGVjbGFyZXxkZWZhdWx0fGRlbGV0ZXxkZXNjZW5kYW50fGRlc2NlbmRhbnQtb3Itc2VsZnxkZXNjZW5kaW5nfGRpdnxkb2N1bWVudHxkb2N1bWVudC1ub2RlfGVsZW1lbnR8ZWxzZXxlbXB0eXxlbXB0eS1zZXF1ZW5jZXxlbmR8ZXF8ZXZlcnl8ZXhjZXB0fGZpcnN0fGZvbGxvd2luZ3xmb2xsb3dpbmctc2libGluZ3xmb3J8ZnVuY3Rpb258Z2V8Z3JvdXB8Z3R8aWRpdnxpZnxpbXBvcnR8aW5zZXJ0fGluc3RhbmNlfGludGVyc2VjdHxpbnRvfGlzfGl0ZW18bGFzdHxsZXxsZXR8bHR8bW9kfG1vZGlmeXxtb2R1bGV8bmFtZXNwYWNlfG5hbWVzcGFjZS1ub2RlfG5lfG5vZGV8b25seXxvcnxvcmRlcnxvcmRlcmVkfHBhcmVudHxwcmVjZWRpbmd8cHJlY2VkaW5nLXNpYmxpbmd8cHJvY2Vzc2luZy1pbnN0cnVjdGlvbnxyZW5hbWV8cmVwbGFjZXxyZXR1cm58c2F0aXNmaWVzfHNjaGVtYS1hdHRyaWJ1dGV8c2NoZW1hLWVsZW1lbnR8c2VsZnxzb21lfHN0YWJsZXxzdGFydHxzd2l0Y2h8dGV4dHx0b3x0cmVhdHx0cnl8dHlwZXN3aXRjaHx1bmlvbnx1bm9yZGVyZWR8dmFsaWRhdGV8d2hlcmV8d2l0aHx4cXVlcnl8Y29udGFpbnN8cGFyYWdyYXBoc3xzZW50ZW5jZXN8dGltZXN8d29yZHN8Ynl8Y29sbGVjdGlvbnJldHVybnx2YXJpYWJsZXx2ZXJzaW9ufG9wdGlvbnx3aGVufGVuY29kaW5nfHRvc3dpdGNofGNhdGNofHR1bWJsaW5nfHNsaWRpbmd8d2luZG93fGF0fHVzaW5nfHN0ZW1taW5nfGNvbGxlY3Rpb258c2NoZW1hfHdoaWxlfG9ufG5vZGVzfGluZGV4fGV4dGVybmFsfHRoZW58aW58dXBkYXRpbmd8dmFsdWV8b2Z8Y29udGFpbnNicmVha3xsb29wfGNvbnRpbnVlfGV4aXR8cmV0dXJuaW5nfGFwcGVuZHxqc29ufHBvc2l0aW9ufHN0cmljdCcuc3BsaXQoJ3wnKTsKCnZhciBrZXl3b3JkcyA9IGtleXMubWFwKGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4geyBuYW1lOiAnXCcnICsgdmFsICsgJ1wnJywgdG9rZW46ICdrZXl3b3JkJyB9OyB9KTsKdmFyIG5jbmFtZXMgPSBrZXlzLm1hcChmdW5jdGlvbih2YWwpIHsgcmV0dXJuIHsgbmFtZTogJ1wnJyArIHZhbCArICdcJycsIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfTsgfSk7Cgp2YXIgY2RhdGEgPSAnY29uc3RhbnQubGFuZ3VhZ2UnOwp2YXIgbnVtYmVyID0gJ2NvbnN0YW50JzsKdmFyIHhtbGNvbW1lbnQgPSAnY29tbWVudCc7CnZhciBwaSA9ICd4bWwtcGUnOwp2YXIgcHJhZ21hID0gJ2NvbnN0YW50LmJ1aWxkaW4nOwp2YXIgbiA9IGZ1bmN0aW9uKG5hbWUpewogICAgcmV0dXJuICdcJycgKyBuYW1lICsgJ1wnJzsKfTsKdmFyIFJ1bGVzID0gewogICAgc3RhcnQ6IFsKICAgICAgICB7IG5hbWU6IG4oJygjJyksIHRva2VuOiBwcmFnbWEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUHJhZ21hJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJyg6JyksIHRva2VuOiAnY29tbWVudCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ29tbWVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCcoOn4nKSwgdG9rZW46ICdjb21tZW50LmRvYycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ29tbWVudERvYycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc8IS0tJyksIHRva2VuOiB4bWxjb21tZW50LCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1hNTENvbW1lbnQnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignPD8nKSwgdG9rZW46IHBpLCBuZXh0OiBmdW5jdGlvbihzdGFjaykgeyBzdGFjay5wdXNoKCdQSScpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCdcJ1wnJyksIHRva2VuOiAnc3RyaW5nJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdBcG9zU3RyaW5nJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJyInKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1F1b3RTdHJpbmcnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ0Fubm90YXRpb24nLCB0b2tlbjogJ3N1cHBvcnQuZnVuY3Rpb24nIH0sCiAgICAgICAgeyBuYW1lOiAnTW9kdWxlRGVjbCcsIHRva2VuOiAna2V5d29yZCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnUHJlZml4Jyk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdPcHRpb25EZWNsJywgdG9rZW46ICdrZXl3b3JkJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdfRVFOYW1lJyk7IH0gfSwKICAgICAgICB7IG5hbWU6ICdBdHRyVGVzdCcsIHRva2VuOiAnc3VwcG9ydC50eXBlJyB9LAogICAgICAgIHsgbmFtZTogJ1ZhcmlhYmxlJywgdG9rZW46ICd2YXJpYWJsZScgfSwKICAgICAgICB7IG5hbWU6IG4oJzwhW0NEQVRBWycpLCB0b2tlbjogY2RhdGEsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ0RhdGEnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ0ludGVnZXJMaXRlcmFsJywgdG9rZW46IG51bWJlciB9LAogICAgICAgIHsgbmFtZTogJ0RlY2ltYWxMaXRlcmFsJywgdG9rZW46IG51bWJlciB9LAogICAgICAgIHsgbmFtZTogJ0RvdWJsZUxpdGVyYWwnLCB0b2tlbjogbnVtYmVyIH0sCiAgICAgICAgeyBuYW1lOiAnT3BlcmF0b3InLCB0b2tlbjogJ2tleXdvcmQub3BlcmF0b3InIH0sCiAgICAgICAgeyBuYW1lOiAnRVFOYW1lJywgdG9rZW46IGZ1bmN0aW9uKHZhbCkgeyByZXR1cm4ga2V5cy5pbmRleE9mKHZhbCkgIT09IC0xID8gJ2tleXdvcmQnIDogJ3N1cHBvcnQuZnVuY3Rpb24nOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCcoJyksIHRva2VuOiAnbHBhcmVuJyB9LAogICAgICAgIHsgbmFtZTogbignKScpLCB0b2tlbjogJ3JwYXJlbicgfSwKICAgICAgICB7IG5hbWU6ICdUYWcnLCB0b2tlbjogJ21ldGEudGFnJywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdTdGFydFRhZycpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCd9JyksIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgaWYoc3RhY2subGVuZ3RoID4gMSkgeyBzdGFjay5wb3AoKTsgfSB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCd7JyksIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnc3RhcnQnKTsgfSB9IC8vLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IGlmKHN0YWNrLmxlbmd0aCA+IDEpIHsgc3RhY2sucG9wKCk7IH0gfSB9CiAgICBdLmNvbmNhdChrZXl3b3JkcyksCiAgICBfRVFOYW1lOiBbCiAgICAgICAgeyBuYW1lOiAnRVFOYW1lJywgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2spIHsgc3RhY2sucG9wKCk7IH0gfQogICAgXS5jb25jYXQobmNuYW1lcyksCiAgICBQcmVmaXg6IFsKICAgICAgICB7IG5hbWU6ICdOQ05hbWUnLCB0b2tlbjogJ3RleHQnLCBuZXh0OiBmdW5jdGlvbihzdGFjaykgeyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLmNvbmNhdChuY25hbWVzKSwKICAgIFN0YXJ0VGFnOiBbCiAgICAgICAgeyBuYW1lOiBuKCc+JyksIHRva2VuOiAnbWV0YS50YWcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1RhZ0NvbnRlbnQnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ1FOYW1lJywgdG9rZW46ICdlbnRpdHkub3RoZXIuYXR0cmlidXRlLW5hbWUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCc9JyksIHRva2VuOiAndGV4dCcgfSwKICAgICAgICB7IG5hbWU6IG4oJ1wnXCcnKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ0Fwb3NBdHRyJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJyInKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ1F1b3RBdHRyJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJy8+JyksIHRva2VuOiAnbWV0YS50YWcucicsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIFRhZ0NvbnRlbnQ6IFsKICAgICAgICB7IG5hbWU6ICdFbGVtZW50Q29udGVudENoYXInLCB0b2tlbjogJ3RleHQnIH0sCiAgICAgICAgeyBuYW1lOiBuKCc8IVtDREFUQVsnKSwgdG9rZW46IGNkYXRhLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ0NEYXRhJyk7IH0gfSwKICAgICAgICB7IG5hbWU6IG4oJzwhLS0nKSwgdG9rZW46IHhtbGNvbW1lbnQsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnWE1MQ29tbWVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnVGFnJywgdG9rZW46ICdtZXRhLnRhZycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnU3RhcnRUYWcnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ1ByZWRlZmluZWRFbnRpdHlSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdDaGFyUmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7eycpLCB0b2tlbjogJ3RleHQnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd9fScpLCB0b2tlbjogJ3RleHQnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd7JyksIHRva2VuOiAndGV4dCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnc3RhcnQnKTsgfSB9LAogICAgICAgIHsgbmFtZTogJ0VuZFRhZycsIHRva2VuOiAnbWV0YS50YWcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgQXBvc0F0dHI6IFsKICAgICAgICB7IG5hbWU6IG4oJ1wnXCcnKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnRXNjYXBlQXBvcycsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0Fwb3NBdHRyQ29udGVudENoYXInLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6ICdQcmVkZWZpbmVkRW50aXR5UmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogbigne3snKSwgdG9rZW46ICdzdHJpbmcnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd9fScpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0KICAgIF0sCiAgICBRdW90QXR0cjogWwogICAgICAgIHsgbmFtZTogbignXCInKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnRXNjYXBlUXVvdCcsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ1F1b3RBdHRyQ29udGVudENoYXInLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6ICdQcmVkZWZpbmVkRW50aXR5UmVmJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQ2hhclJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogbigne3snKSwgdG9rZW46ICdzdHJpbmcnIH0sCiAgICAgICAgeyBuYW1lOiBuKCd9fScpLCB0b2tlbjogJ3N0cmluZycgfSwKICAgICAgICB7IG5hbWU6IG4oJ3snKSwgdG9rZW46ICd0ZXh0JywgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wdXNoKCdzdGFydCcpOyB9IH0KICAgIF0sCiAgICBQcmFnbWE6IFsKICAgICAgICB7IG5hbWU6ICdQcmFnbWFDb250ZW50cycsIHRva2VuOiBwcmFnbWEgfSwKICAgICAgICB7IG5hbWU6IG4oJyMnKSwgdG9rZW46IHByYWdtYSB9LAogICAgICAgIHsgbmFtZTogbignIyknKSwgdG9rZW46IHByYWdtYSwgbmV4dDogZnVuY3Rpb24oc3RhY2speyBzdGFjay5wb3AoKTsgfSB9CiAgICBdLAogICAgQ29tbWVudDogWwogICAgICAgIHsgbmFtZTogJ0NvbW1lbnRDb250ZW50cycsIHRva2VuOiAnY29tbWVudCcgfSwKICAgICAgICB7IG5hbWU6IG4oJyg6JyksIHRva2VuOiAnY29tbWVudCcsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucHVzaCgnQ29tbWVudCcpOyB9IH0sCiAgICAgICAgeyBuYW1lOiBuKCc6KScpLCB0b2tlbjogJ2NvbW1lbnQnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBDb21tZW50RG9jOiBbCiAgICAgICAgeyBuYW1lOiAnRG9jQ29tbWVudENvbnRlbnRzJywgdG9rZW46ICdjb21tZW50LmRvYycgfSwKICAgICAgICB7IG5hbWU6ICdEb2NUYWcnLCB0b2tlbjogJ2NvbW1lbnQuZG9jLnRhZycgfSwKICAgICAgICB7IG5hbWU6IG4oJyg6JyksIHRva2VuOiAnY29tbWVudC5kb2MnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnB1c2goJ0NvbW1lbnREb2MnKTsgfSB9LAogICAgICAgIHsgbmFtZTogbignOiknKSwgdG9rZW46ICdjb21tZW50LmRvYycsIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIFhNTENvbW1lbnQ6IFsKICAgICAgICB7IG5hbWU6ICdEaXJDb21tZW50Q29udGVudHMnLCB0b2tlbjogeG1sY29tbWVudCB9LAogICAgICAgIHsgbmFtZTogbignLS0+JyksIHRva2VuOiB4bWxjb21tZW50LCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBDRGF0YTogWwogICAgICAgIHsgbmFtZTogJ0NEYXRhU2VjdGlvbkNvbnRlbnRzJywgdG9rZW46IGNkYXRhIH0sCiAgICAgICAgeyBuYW1lOiBuKCddXT4nKSwgdG9rZW46IGNkYXRhLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0KICAgIF0sCiAgICBQSTogWwogICAgICAgIHsgbmFtZTogJ0RpclBJQ29udGVudHMnLCB0b2tlbjogcGkgfSwKICAgICAgICB7IG5hbWU6IG4oJz8nKSwgdG9rZW46IHBpIH0sCiAgICAgICAgeyBuYW1lOiBuKCc/PicpLCB0b2tlbjogcGksIG5leHQ6IGZ1bmN0aW9uKHN0YWNrKXsgc3RhY2sucG9wKCk7IH0gfQogICAgXSwKICAgIEFwb3NTdHJpbmc6IFsKICAgICAgICB7IG5hbWU6IG4oJ1wnXCcnKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUHJlZGVmaW5lZEVudGl0eVJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0NoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVBcG9zJywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnQXBvc0NoYXInLCB0b2tlbjogJ3N0cmluZycgfQogICAgXSwKICAgIFF1b3RTdHJpbmc6IFsKICAgICAgICB7IG5hbWU6IG4oJyInKSwgdG9rZW46ICdzdHJpbmcnLCBuZXh0OiBmdW5jdGlvbihzdGFjayl7IHN0YWNrLnBvcCgpOyB9IH0sCiAgICAgICAgeyBuYW1lOiAnUHJlZGVmaW5lZEVudGl0eVJlZicsIHRva2VuOiAnY29uc3RhbnQubGFuZ3VhZ2UuZXNjYXBlJyB9LAogICAgICAgIHsgbmFtZTogJ0NoYXJSZWYnLCB0b2tlbjogJ2NvbnN0YW50Lmxhbmd1YWdlLmVzY2FwZScgfSwKICAgICAgICB7IG5hbWU6ICdFc2NhcGVRdW90JywgdG9rZW46ICdjb25zdGFudC5sYW5ndWFnZS5lc2NhcGUnIH0sCiAgICAgICAgeyBuYW1lOiAnUXVvdENoYXInLCB0b2tlbjogJ3N0cmluZycgfQogICAgXQp9OwogICAgCmV4cG9ydHMuWFF1ZXJ5TGV4ZXIgPSBmdW5jdGlvbigpeyByZXR1cm4gbmV3IExleGVyKFhRdWVyeVRva2VuaXplciwgUnVsZXMpOyB9Owp9LHsiLi9YUXVlcnlUb2tlbml6ZXIiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvbGV4ZXJzL1hRdWVyeVRva2VuaXplci5qcyIsIi4vbGV4ZXIiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvbGV4ZXJzL2xleGVyLmpzIn1dLCIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvcGFyc2Vycy9KU09OUGFyc2VUcmVlSGFuZGxlci5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewpleHBvcnRzLkpTT05QYXJzZVRyZWVIYW5kbGVyID0gZnVuY3Rpb24gKGNvZGUpIHsKCSd1c2Ugc3RyaWN0JzsKICAgIHZhciB0b0JlSW5kZXggPSBbJ1ZhckRlY2wnLCAnRnVuY3Rpb25EZWNsJ107CiAgICB2YXIgbGlzdCA9IFsKICAgICAgICAnT3JFeHByJywgJ0FuZEV4cHInLCAnQ29tcGFyaXNvbkV4cHInLCAnU3RyaW5nQ29uY2F0RXhwcicsICdSYW5nZUV4cHInLAogICAgICAgICdBZGRpdGl2ZUV4cHInLCAnTXVsdGlwbGljYXRpdmVFeHByJywKICAgICAgICAnVW5pb25FeHByJywgJ0ludGVyc2VjdEV4Y2VwdEV4cHInLCAnSW5zdGFuY2VvZkV4cHInLCAnVHJlYXRFeHByJywgJ0Nhc3RhYmxlRXhwcicsICdDYXN0RXhwcicsICdVbmFyeUV4cHInLCAnVmFsdWVFeHByJywKICAgICAgICAnRlRDb250YWluc0V4cHInLCAnU2ltcGxlTWFwRXhwcicsICdQYXRoRXhwcicsICdSZWxhdGl2ZVBhdGhFeHByJywgJ1Bvc3RmaXhFeHByJywgJ1N0ZXBFeHByJwogICAgXTsKCiAgICB2YXIgYXN0ID0gbnVsbDsKICAgIHZhciBwdHIgPSBudWxsOwogICAgdmFyIHJlbWFpbnMgPSBjb2RlOwogICAgdmFyIGN1cnNvciA9IDA7CiAgICB2YXIgbGluZUN1cnNvciA9IDA7CiAgICB2YXIgbGluZSA9IDA7CgogICAgZnVuY3Rpb24gY3JlYXRlTm9kZShuYW1lKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgY2hpbGRyZW46IFtdLAogICAgICAgICAgICBnZXRQYXJlbnQ6IG51bGwsCiAgICAgICAgICAgIHBvczogewogICAgICAgICAgICAgICAgc2w6IDAsCiAgICAgICAgICAgICAgICBzYzogMCwKICAgICAgICAgICAgICAgIGVsOiAwLAogICAgICAgICAgICAgICAgZWM6IDAKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaE5vZGUobmFtZSkgeyAvL2JlZ2luCiAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVOb2RlKG5hbWUpOwogICAgICAgIGlmIChhc3QgPT09IG51bGwpIHsKICAgICAgICAgICAgYXN0ID0gbm9kZTsKICAgICAgICAgICAgYXN0LmluZGV4ID0gW107CiAgICAgICAgICAgIHB0ciA9IG5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZS5nZXRQYXJlbnQgPSBwdHI7CiAgICAgICAgICAgIHB0ci5jaGlsZHJlbi5wdXNoKG5vZGUpOwogICAgICAgICAgICBwdHIgPSBwdHIuY2hpbGRyZW5bcHRyLmNoaWxkcmVuLmxlbmd0aCAtIDFdOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBwb3BOb2RlKCkgewoKICAgICAgICBpZiAocHRyLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgdmFyIHMgPSBwdHIuY2hpbGRyZW5bMF07CiAgICAgICAgICAgIHZhciBlID0gbnVsbDsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IHB0ci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgZSA9IHB0ci5jaGlsZHJlbltpXTsKICAgICAgICAgICAgICAgIGlmIChlLnBvcy5lbCAhPT0gMCB8fCBlLnBvcy5lYyAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHB0ci5wb3Muc2wgPSBzLnBvcy5zbDsKICAgICAgICAgICAgcHRyLnBvcy5zYyA9IHMucG9zLnNjOwogICAgICAgICAgICBwdHIucG9zLmVsID0gZS5wb3MuZWw7CiAgICAgICAgICAgIHB0ci5wb3MuZWMgPSBlLnBvcy5lYzsKICAgICAgICB9CiAgICAgICAgaWYgKHB0ci5uYW1lID09PSAnRnVuY3Rpb25OYW1lJykgewogICAgICAgICAgICBwdHIubmFtZSA9ICdFUU5hbWUnOwogICAgICAgIH0KICAgICAgICBpZiAocHRyLm5hbWUgPT09ICdFUU5hbWUnICYmIHB0ci52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHB0ci52YWx1ZSA9IHB0ci5jaGlsZHJlblswXS52YWx1ZTsKICAgICAgICAgICAgcHRyLmNoaWxkcmVuLnBvcCgpOwogICAgICAgIH0KICAgIAogICAgICAgIGlmKHRvQmVJbmRleC5pbmRleE9mKHB0ci5uYW1lKSAhPT0gLTEpIHsKICAgICAgICAgICAgYXN0LmluZGV4LnB1c2gocHRyKTsKICAgICAgICB9CiAgICAKICAgICAgICBpZiAocHRyLmdldFBhcmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICBwdHIgPSBwdHIuZ2V0UGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgfQogICAgICAgIGlmIChwdHIuY2hpbGRyZW4ubGVuZ3RoID4gMCkgewogICAgICAgICAgICB2YXIgbGFzdENoaWxkID0gcHRyLmNoaWxkcmVuW3B0ci5jaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgbGlzdC5pbmRleE9mKGxhc3RDaGlsZC5uYW1lKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIHB0ci5jaGlsZHJlbltwdHIuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gPSBsYXN0Q2hpbGQuY2hpbGRyZW5bMF07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgdGhpcy5jbG9zZVBhcnNlVHJlZSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB3aGlsZSAocHRyLmdldFBhcmVudCAhPT0gbnVsbCkgewogICAgICAgICAgICBwb3BOb2RlKCk7CiAgICAgICAgfQogICAgICAgIHBvcE5vZGUoKTsKICAgIH07CgogICAgdGhpcy5wZWVrID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwdHI7CiAgICB9OwoKICAgIHRoaXMuZ2V0UGFyc2VUcmVlID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBhc3Q7CiAgICB9OwoKICAgIHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7fTsgLy9pbnB1dAoKICAgIHRoaXMuc3RhcnROb250ZXJtaW5hbCA9IGZ1bmN0aW9uIChuYW1lLCBiZWdpbikgewogICAgICAgIHB1c2hOb2RlKG5hbWUsIGJlZ2luKTsKICAgIH07CgogICAgdGhpcy5lbmROb250ZXJtaW5hbCA9IGZ1bmN0aW9uICgpIHsvL25hbWUsIGVuZAogICAgICAgIHBvcE5vZGUoKTsKICAgIH07CgogICAgdGhpcy50ZXJtaW5hbCA9IGZ1bmN0aW9uIChuYW1lLCBiZWdpbiwgZW5kKSB7CiAgICAgICAgbmFtZSA9IChuYW1lLnN1YnN0cmluZygwLCAxKSA9PT0gJ1wnJyAmJiBuYW1lLnN1YnN0cmluZyhuYW1lLmxlbmd0aCAtIDEpID09PSAnXCcnKSA/ICdUT0tFTicgOiBuYW1lOwogICAgICAgIHB1c2hOb2RlKG5hbWUsIGJlZ2luKTsKICAgICAgICBzZXRWYWx1ZShwdHIsIGJlZ2luLCBlbmQpOwogICAgICAgIHBvcE5vZGUoKTsKICAgIH07CgogICAgdGhpcy53aGl0ZXNwYWNlID0gZnVuY3Rpb24gKGJlZ2luLCBlbmQpIHsKICAgICAgICB2YXIgbmFtZSA9ICdXUyc7CiAgICAgICAgcHVzaE5vZGUobmFtZSwgYmVnaW4pOwogICAgICAgIHNldFZhbHVlKHB0ciwgYmVnaW4sIGVuZCk7CiAgICAgICAgcG9wTm9kZSgpOwogICAgfTsKCiAgICBmdW5jdGlvbiBzZXRWYWx1ZShub2RlLCBiZWdpbiwgZW5kKSB7CgogICAgICAgIHZhciBlID0gZW5kIC0gY3Vyc29yOwogICAgICAgIHB0ci52YWx1ZSA9IHJlbWFpbnMuc3Vic3RyaW5nKDAsIGUpOwogICAgICAgIHJlbWFpbnMgPSByZW1haW5zLnN1YnN0cmluZyhlKTsKICAgICAgICBjdXJzb3IgPSBlbmQ7CgogICAgICAgIHZhciBzbCA9IGxpbmU7CiAgICAgICAgdmFyIHNjID0gbGluZUN1cnNvcjsKICAgICAgICB2YXIgZWwgPSBzbCArIHB0ci52YWx1ZS5zcGxpdCgnXG4nKS5sZW5ndGggLSAxOwogICAgICAgIHZhciBsYXN0SWR4ID0gcHRyLnZhbHVlLmxhc3RJbmRleE9mKCdcbicpOwogICAgICAgIHZhciBlYyA9IGxhc3RJZHggPT09IC0xID8gc2MgKyBwdHIudmFsdWUubGVuZ3RoIDogcHRyLnZhbHVlLnN1YnN0cmluZyhsYXN0SWR4ICsgMSkubGVuZ3RoOwoKICAgICAgICBsaW5lID0gZWw7CiAgICAgICAgbGluZUN1cnNvciA9IGVjOwoKICAgICAgICBwdHIucG9zLnNsID0gc2w7CiAgICAgICAgcHRyLnBvcy5zYyA9IHNjOwogICAgICAgIHB0ci5wb3MuZWwgPSBlbDsKICAgICAgICBwdHIucG9zLmVjID0gZWM7CiAgICB9Cn07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3BhcnNlcnMvSlNPTmlxUGFyc2VyLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBKU09OaXFQYXJzZXIgPSBleHBvcnRzLkpTT05pcVBhcnNlciA9IGZ1bmN0aW9uIEpTT05pcVBhcnNlcihzdHJpbmcsIHBhcnNpbmdFdmVudEhhbmRsZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0KHN0cmluZywgcGFyc2luZ0V2ZW50SGFuZGxlcik7CiAgdmFyIHNlbGYgPSB0aGlzOwoKICB0aGlzLlBhcnNlRXhjZXB0aW9uID0gZnVuY3Rpb24oYiwgZSwgcywgbywgeCkKICB7CiAgICB2YXIKICAgICAgYmVnaW4gPSBiLAogICAgICBlbmQgPSBlLAogICAgICBzdGF0ZSA9IHMsCiAgICAgIG9mZmVuZGluZyA9IG8sCiAgICAgIGV4cGVjdGVkID0geDsKCiAgICB0aGlzLmdldEJlZ2luID0gZnVuY3Rpb24oKSB7cmV0dXJuIGJlZ2luO307CiAgICB0aGlzLmdldEVuZCA9IGZ1bmN0aW9uKCkge3JldHVybiBlbmQ7fTsKICAgIHRoaXMuZ2V0U3RhdGUgPSBmdW5jdGlvbigpIHtyZXR1cm4gc3RhdGU7fTsKICAgIHRoaXMuZ2V0RXhwZWN0ZWQgPSBmdW5jdGlvbigpIHtyZXR1cm4gZXhwZWN0ZWQ7fTsKICAgIHRoaXMuZ2V0T2ZmZW5kaW5nID0gZnVuY3Rpb24oKSB7cmV0dXJuIG9mZmVuZGluZzt9OwoKICAgIHRoaXMuZ2V0TWVzc2FnZSA9IGZ1bmN0aW9uKCkKICAgIHsKICAgICAgcmV0dXJuIG9mZmVuZGluZyA8IDAgPyAibGV4aWNhbCBhbmFseXNpcyBmYWlsZWQiIDogInN5bnRheCBlcnJvciI7CiAgICB9OwogIH07CgogIGZ1bmN0aW9uIGluaXQoc3RyaW5nLCBwYXJzaW5nRXZlbnRIYW5kbGVyKQogIHsKICAgIGV2ZW50SGFuZGxlciA9IHBhcnNpbmdFdmVudEhhbmRsZXI7CiAgICBpbnB1dCA9IHN0cmluZzsKICAgIHNpemUgPSBzdHJpbmcubGVuZ3RoOwogICAgcmVzZXQoMCwgMCwgMCk7CiAgfQoKICB0aGlzLmdldElucHV0ID0gZnVuY3Rpb24oKQogIHsKICAgIHJldHVybiBpbnB1dDsKICB9OwoKICBmdW5jdGlvbiByZXNldChsLCBiLCBlKQogIHsKICAgICAgICAgICAgYjAgPSBiOyBlMCA9IGI7CiAgICBsMSA9IGw7IGIxID0gYjsgZTEgPSBlOwogICAgbDIgPSAwOwogICAgZW5kID0gZTsKICAgIGV4ID0gLTE7CiAgICBtZW1vID0ge307CiAgICBldmVudEhhbmRsZXIucmVzZXQoaW5wdXQpOwogIH0KCiAgdGhpcy5nZXRPZmZlbmRpbmdUb2tlbiA9IGZ1bmN0aW9uKGUpCiAgewogICAgdmFyIG8gPSBlLmdldE9mZmVuZGluZygpOwogICAgcmV0dXJuIG8gPj0gMCA/IEpTT05pcVBhcnNlci5UT0tFTltvXSA6IG51bGw7CiAgfTsKCiAgdGhpcy5nZXRFeHBlY3RlZFRva2VuU2V0ID0gZnVuY3Rpb24oZSkKICB7CiAgICB2YXIgZXhwZWN0ZWQ7CiAgICBpZiAoZS5nZXRFeHBlY3RlZCgpIDwgMCkKICAgIHsKICAgICAgZXhwZWN0ZWQgPSBKU09OaXFQYXJzZXIuZ2V0VG9rZW5TZXQoLSBlLmdldFN0YXRlKCkpOwogICAgfQogICAgZWxzZQogICAgewogICAgICBleHBlY3RlZCA9IFtKU09OaXFQYXJzZXIuVE9LRU5bZS5nZXRFeHBlY3RlZCgpXV07CiAgICB9CiAgICByZXR1cm4gZXhwZWN0ZWQ7CiAgfTsKCiAgdGhpcy5nZXRFcnJvck1lc3NhZ2UgPSBmdW5jdGlvbihlKQogIHsKICAgIHZhciB0b2tlblNldCA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlblNldChlKTsKICAgIHZhciBmb3VuZCA9IHRoaXMuZ2V0T2ZmZW5kaW5nVG9rZW4oZSk7CiAgICB2YXIgcHJlZml4ID0gaW5wdXQuc3Vic3RyaW5nKDAsIGUuZ2V0QmVnaW4oKSk7CiAgICB2YXIgbGluZXMgPSBwcmVmaXguc3BsaXQoIlxuIik7CiAgICB2YXIgbGluZSA9IGxpbmVzLmxlbmd0aDsKICAgIHZhciBjb2x1bW4gPSBsaW5lc1tsaW5lIC0gMV0ubGVuZ3RoICsgMTsKICAgIHZhciBzaXplID0gZS5nZXRFbmQoKSAtIGUuZ2V0QmVnaW4oKTsKICAgIHJldHVybiBlLmdldE1lc3NhZ2UoKQogICAgICAgICArIChmb3VuZCA9PSBudWxsID8gIiIgOiAiLCBmb3VuZCAiICsgZm91bmQpCiAgICAgICAgICsgIlxud2hpbGUgZXhwZWN0aW5nICIKICAgICAgICAgKyAodG9rZW5TZXQubGVuZ3RoID09IDEgPyB0b2tlblNldFswXSA6ICgiWyIgKyB0b2tlblNldC5qb2luKCIsICIpICsgIl0iKSkKICAgICAgICAgKyAiXG4iCiAgICAgICAgICsgKHNpemUgPT0gMCB8fCBmb3VuZCAhPSBudWxsID8gIiIgOiAiYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNjYW5uaW5nICIgKyBzaXplICsgIiBjaGFyYWN0ZXJzIGJlZ2lubmluZyAiKQogICAgICAgICArICJhdCBsaW5lICIgKyBsaW5lICsgIiwgY29sdW1uICIgKyBjb2x1bW4gKyAiOlxuLi4uIgogICAgICAgICArIGlucHV0LnN1YnN0cmluZyhlLmdldEJlZ2luKCksIE1hdGgubWluKGlucHV0Lmxlbmd0aCwgZS5nZXRCZWdpbigpICsgNjQpKQogICAgICAgICArICIuLi4iOwogIH07CgogIHRoaXMucGFyc2VfWFF1ZXJ5ID0gZnVuY3Rpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJYUXVlcnkiLCBlMCk7CiAgICBsb29rYWhlYWQxVygyNzcpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Nb2R1bGUoKTsKICAgIHNoaWZ0KDI1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlhRdWVyeSIsIGUwKTsKICB9OwoKICBmdW5jdGlvbiBwYXJzZV9Nb2R1bGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJNb2R1bGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgICBsb29rYWhlYWQyVygxNjgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdlbmNvZGluZycgfCAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDY0NjgyICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gMTM3ODk4KSAgICAgICAgICAgICAgIC8vICdqc29uaXEnICd2ZXJzaW9uJwogICAgewogICAgICBwYXJzZV9WZXJzaW9uRGVjbCgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMjc3KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgbG9va2FoZWFkMlcoMTQ2KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA5NTkyOTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnbmFtZXNwYWNlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0xpYnJhcnlNb2R1bGUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX01haW5Nb2R1bGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTW9kdWxlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmVyc2lvbkRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWZXJzaW9uRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDE3MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScKICAgIGxvb2thaGVhZDFXKDEyMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5jb2RpbmcnIHwgJ3ZlcnNpb24nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyNjkpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgbG9va2FoZWFkMVcoMTEzKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycgfCAnZW5jb2RpbmcnCiAgICAgIGlmIChsMSA9PSAxMjYpICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgewogICAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDI5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcGFyYXRvcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWZXJzaW9uRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0xpYnJhcnlNb2R1bGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJMaWJyYXJ5TW9kdWxlIiwgZTApOwogICAgcGFyc2VfTW9kdWxlRGVjbCgpOwogICAgbG9va2FoZWFkMVcoMTQyKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyg6JyB8ICdkZWNsYXJlJyB8ICdpbXBvcnQnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Qcm9sb2coKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTGlicmFyeU1vZHVsZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX01vZHVsZURlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJNb2R1bGVEZWNsIiwgZTApOwogICAgc2hpZnQoMTg1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgbG9va2FoZWFkMVcoNjQpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduYW1lc3BhY2UnCiAgICBzaGlmdCgxODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICBsb29rYWhlYWQxVygyMzkpOyAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05DTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMzApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc9JwogICAgc2hpZnQoNjEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGxvb2thaGVhZDFXKDI5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcGFyYXRvcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJNb2R1bGVEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJvbG9nKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJvbG9nIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjc3KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgICBsb29rYWhlYWQyVygyMDYpOyAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYmFzZS11cmknIHwgJ2JvdW5kYXJ5LXNwYWNlJyB8ICdjb2xsZWN0aW9uJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgICAgbG9va2FoZWFkMlcoMTY5KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ21vZHVsZScgfCAnc2NoZW1hJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDQzMTE3ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdiYXNlLXVyaScKICAgICAgICYmIGxrICE9IDQ0MTQxICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdib3VuZGFyeS1zcGFjZScKICAgICAgICYmIGxrICE9IDUwNzk3ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdjb25zdHJ1Y3Rpb24nCiAgICAgICAmJiBsayAhPSA1Mzg2OSAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnY29weS1uYW1lc3BhY2VzJwogICAgICAgJiYgbGsgIT0gNTQ4OTMgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgJiYgbGsgIT0gNTY0MjkgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2RlZmF1bHQnCiAgICAgICAmJiBsayAhPSA3MzMyNSAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnZnQtb3B0aW9uJwogICAgICAgJiYgbGsgIT0gOTQ4NzUgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnbW9kdWxlJwogICAgICAgJiYgbGsgIT0gOTU4NTMgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ25hbWVzcGFjZScKICAgICAgICYmIGxrICE9IDEwNjA5MyAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdvcmRlcmluZycKICAgICAgICYmIGxrICE9IDExNTgyMSAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdyZXZhbGlkYXRpb24nCiAgICAgICAmJiBsayAhPSAxMTc0MDMpICAgICAgICAgICAgIC8vICdpbXBvcnQnICdzY2hlbWEnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICAgIGxvb2thaGVhZDJXKDIwMCk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdiYXNlLXVyaScgfCAnYm91bmRhcnktc3BhY2UnIHwgJ2NvbnN0cnVjdGlvbicgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDU2NDI5KSAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdkZWZhdWx0JwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgwLCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICB0cnlfRGVmYXVsdE5hbWVzcGFjZURlY2woKTsKICAgICAgICAgICAgbGsgPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICB9CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSgwLCBlMCwgbGspOwogICAgICAgIH0KICAgICAgfQogICAgICBzd2l0Y2ggKGxrKQogICAgICB7CiAgICAgIGNhc2UgLTE6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0RlZmF1bHROYW1lc3BhY2VEZWNsKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgOTU4NTM6ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnbmFtZXNwYWNlJwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9OYW1lc3BhY2VEZWNsKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0ltcG9ydCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDczMzI1OiAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2Z0LW9wdGlvbicKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRlRPcHRpb25EZWNsKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1NldHRlcigpOwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2VwYXJhdG9yKCk7CiAgICB9CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyNzcpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICAgIGxvb2thaGVhZDJXKDIwMSk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdjb2xsZWN0aW9uJyB8ICdjb250ZXh0JyB8ICdmdW5jdGlvbicgfCAnaW5kZXgnIHwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayAhPSAxNzAwNSAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnJScKICAgICAgICYmIGxrICE9IDQ5MjYxICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdjb2xsZWN0aW9uJwogICAgICAgJiYgbGsgIT0gNTIzMzMgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2NvbnRleHQnCiAgICAgICAmJiBsayAhPSA3NTM3MyAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnZnVuY3Rpb24nCiAgICAgICAmJiBsayAhPSA4MDQ5MyAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnaW5kZXgnCiAgICAgICAmJiBsayAhPSA4MzU2NSAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnaW50ZWdyaXR5JwogICAgICAgJiYgbGsgIT0gMTA0MDQ1ICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ29wdGlvbicKICAgICAgICYmIGxrICE9IDEzNDc2NSAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICd1cGRhdGluZycKICAgICAgICYmIGxrICE9IDEzNzMyNSkgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICd2YXJpYWJsZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgICAgbG9va2FoZWFkMlcoMTk3KTsgICAgICAgICAgIC8vIFNeV1MgfCAnJScgfCAnKDonIHwgJ2NvbGxlY3Rpb24nIHwgJ2NvbnRleHQnIHwgJ2Z1bmN0aW9uJyB8ICdpbmRleCcgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgc3dpdGNoIChsaykKICAgICAgewogICAgICBjYXNlIDUyMzMzOiAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2NvbnRleHQnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0NvbnRleHRJdGVtRGVjbCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEwNDA0NTogICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ29wdGlvbicKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfT3B0aW9uRGVjbCgpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9Bbm5vdGF0ZWREZWNsKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjkpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TZXBhcmF0b3IoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJvbG9nIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2VwYXJhdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2VwYXJhdG9yIiwgZTApOwogICAgc2hpZnQoNTQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2VwYXJhdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2V0dGVyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2V0dGVyIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIGxvb2thaGVhZDJXKDE5NCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Jhc2UtdXJpJyB8ICdib3VuZGFyeS1zcGFjZScgfCAnY29uc3RydWN0aW9uJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSA1NjQyOSkgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdkZWZhdWx0JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDEsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0RlZmF1bHRDb2xsYXRpb25EZWNsKCk7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDJBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0VtcHR5T3JkZXJEZWNsKCk7CiAgICAgICAgICAgIGxrID0gLTY7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDZBKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC05OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgxLCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA0NDE0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBwYXJzZV9Cb3VuZGFyeVNwYWNlRGVjbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTI6CiAgICAgIHBhcnNlX0RlZmF1bHRDb2xsYXRpb25EZWNsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0MzExNzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2Jhc2UtdXJpJwogICAgICBwYXJzZV9CYXNlVVJJRGVjbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgNTA3OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdjb25zdHJ1Y3Rpb24nCiAgICAgIHBhcnNlX0NvbnN0cnVjdGlvbkRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjA5MzogICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnb3JkZXJpbmcnCiAgICAgIHBhcnNlX09yZGVyaW5nTW9kZURlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC02OgogICAgICBwYXJzZV9FbXB0eU9yZGVyRGVjbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTE1ODIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdyZXZhbGlkYXRpb24nCiAgICAgIHBhcnNlX1JldmFsaWRhdGlvbkRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDUzODY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnY29weS1uYW1lc3BhY2VzJwogICAgICBwYXJzZV9Db3B5TmFtZXNwYWNlc0RlY2woKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9EZWNpbWFsRm9ybWF0RGVjbCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTZXR0ZXIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Cb3VuZGFyeVNwYWNlRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkJvdW5kYXJ5U3BhY2VEZWNsIiwgZTApOwogICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDM2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYm91bmRhcnktc3BhY2UnCiAgICBzaGlmdCg4Nik7ICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgIGxvb2thaGVhZDFXKDEzNyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncHJlc2VydmUnIHwgJ3N0cmlwJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZXNlcnZlJwogICAgICBzaGlmdCgyMTgpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlc2VydmUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmlwJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCb3VuZGFyeVNwYWNlRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0RlZmF1bHRDb2xsYXRpb25EZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRGVmYXVsdENvbGxhdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNDkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdkZWZhdWx0JwogICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDQxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29sbGF0aW9uJwogICAgc2hpZnQoOTUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJEZWZhdWx0Q29sbGF0aW9uRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EZWZhdWx0Q29sbGF0aW9uRGVjbCgpCiAgewogICAgc2hpZnRUKDEwOSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDQ5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZGVmYXVsdCcKICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg0MSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbGxhdGlvbicKICAgIHNoaWZ0VCg5NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Jhc2VVUklEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQmFzZVVSSURlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoMzUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdiYXNlLXVyaScKICAgIHNoaWZ0KDg0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCYXNlVVJJRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbnN0cnVjdGlvbkRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb25zdHJ1Y3Rpb25EZWNsIiwgZTApOwogICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDQ0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29uc3RydWN0aW9uJwogICAgc2hpZnQoOTkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgbG9va2FoZWFkMVcoMTM3KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwcmVzZXJ2ZScgfCAnc3RyaXAnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaXAnCiAgICAgIHNoaWZ0KDI0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpcCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyMTgpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlc2VydmUnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbnN0cnVjdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PcmRlcmluZ01vZGVEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT3JkZXJpbmdNb2RlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg3MSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyaW5nJwogICAgc2hpZnQoMjA3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICBsb29rYWhlYWQxVygxMzUpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyZWQnIHwgJ3Vub3JkZXJlZCcKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBzaGlmdCgyMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyNjIpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlcmluZ01vZGVEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRW1wdHlPcmRlckRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFbXB0eU9yZGVyRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlZmF1bHQnCiAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoNzApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvcmRlcicKICAgIHNoaWZ0KDIwNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgbG9va2FoZWFkMVcoNTIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbXB0eScKICAgIHNoaWZ0KDEyNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgbG9va2FoZWFkMVcoMTI1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdncmVhdGVzdCcgfCAnbGVhc3QnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JlYXRlc3QnCiAgICAgIHNoaWZ0KDE0OSk7ICAgICAgICAgICAgICAgICAgIC8vICdncmVhdGVzdCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkVtcHR5T3JkZXJEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VtcHR5T3JkZXJEZWNsKCkKICB7CiAgICBzaGlmdFQoMTA5KTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNDkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdkZWZhdWx0JwogICAgc2hpZnRUKDExMCk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDcwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnb3JkZXInCiAgICBzaGlmdFQoMjA1KTsgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgIGxvb2thaGVhZDFXKDUyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW1wdHknCiAgICBzaGlmdFQoMTI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGxvb2thaGVhZDFXKDEyNSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZ3JlYXRlc3QnIHwgJ2xlYXN0JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyZWF0ZXN0JwogICAgICBzaGlmdFQoMTQ5KTsgICAgICAgICAgICAgICAgICAvLyAnZ3JlYXRlc3QnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE3Nik7ICAgICAgICAgICAgICAgICAgLy8gJ2xlYXN0JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29weU5hbWVzcGFjZXNEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29weU5hbWVzcGFjZXNEZWNsIiwgZTApOwogICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDQ3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29weS1uYW1lc3BhY2VzJwogICAgc2hpZnQoMTA1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgbG9va2FoZWFkMVcoMTMyKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduby1wcmVzZXJ2ZScgfCAncHJlc2VydmUnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9QcmVzZXJ2ZU1vZGUoKTsKICAgIGxvb2thaGVhZDFXKDI1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcKICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICBsb29rYWhlYWQxVygxMjcpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luaGVyaXQnIHwgJ25vLWluaGVyaXQnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Jbmhlcml0TW9kZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb3B5TmFtZXNwYWNlc0RlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QcmVzZXJ2ZU1vZGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVzZXJ2ZU1vZGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlc2VydmUnCiAgICAgIHNoaWZ0KDIxOCk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVzZXJ2ZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxOTMpOyAgICAgICAgICAgICAgICAgICAvLyAnbm8tcHJlc2VydmUnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZXNlcnZlTW9kZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luaGVyaXRNb2RlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5oZXJpdE1vZGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5oZXJpdCcKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luaGVyaXQnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTkyKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vLWluaGVyaXQnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluaGVyaXRNb2RlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGVjaW1hbEZvcm1hdERlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEZWNpbWFsRm9ybWF0RGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVygxMTgpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlY2ltYWwtZm9ybWF0JyB8ICdkZWZhdWx0JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FUU5hbWUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgbG9va2FoZWFkMVcoNDgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIHNoaWZ0KDEwNyk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgIH0KICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDIwMyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnIHwgJ05hTicgfCAnZGVjaW1hbC1zZXBhcmF0b3InIHwgJ2RpZ2l0JyB8CiAgICAgIGlmIChsMSA9PSA1NCkgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9ERlByb3BlcnR5TmFtZSgpOwogICAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc9JwogICAgICBzaGlmdCg2MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGVjaW1hbEZvcm1hdERlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9ERlByb3BlcnR5TmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRGUHJvcGVydHlOYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtc2VwYXJhdG9yJwogICAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1zZXBhcmF0b3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXBpbmctc2VwYXJhdG9yJwogICAgICBzaGlmdCgxNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXBpbmctc2VwYXJhdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZmluaXR5JwogICAgICBzaGlmdCgxNTgpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5maW5pdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbWludXMtc2lnbicKICAgICAgc2hpZnQoMTgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ21pbnVzLXNpZ24nCiAgICAgIGJyZWFrOwogICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnTmFOJwogICAgICBzaGlmdCg2OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnTmFOJwogICAgICBicmVhazsKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BlcmNlbnQnCiAgICAgIHNoaWZ0KDIxMyk7ICAgICAgICAgICAgICAgICAgIC8vICdwZXJjZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Blci1taWxsZScKICAgICAgc2hpZnQoMjEyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3Blci1taWxsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd6ZXJvLWRpZ2l0JwogICAgICBzaGlmdCgyODApOyAgICAgICAgICAgICAgICAgICAvLyAnemVyby1kaWdpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaWdpdCcKICAgICAgc2hpZnQoMTE3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpZ2l0JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIxMSk7ICAgICAgICAgICAgICAgICAgIC8vICdwYXR0ZXJuLXNlcGFyYXRvcicKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiREZQcm9wZXJ0eU5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbXBvcnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbXBvcnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBsb29rYWhlYWQyVygxMzApOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdtb2R1bGUnIHwgJ3NjaGVtYScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTE3NDAzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJ3NjaGVtYScKICAgICAgcGFyc2VfU2NoZW1hSW1wb3J0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfTW9kdWxlSW1wb3J0KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkltcG9ydCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NjaGVtYUltcG9ydCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNjaGVtYUltcG9ydCIsIGUwKTsKICAgIHNoaWZ0KDE1NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGxvb2thaGVhZDFXKDc2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc2NoZW1hJwogICAgc2hpZnQoMjI5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgbG9va2FoZWFkMVcoMTQxKTsgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicgfCAnZGVmYXVsdCcgfCAnbmFtZXNwYWNlJwogICAgaWYgKGwxICE9IDcpICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2NoZW1hUHJlZml4KCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICBsb29rYWhlYWQxVygxMTIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnIHwgJ2F0JwogICAgaWYgKGwxID09IDgyKSAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICB7CiAgICAgIHNoaWZ0KDgyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwNyk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc7JwogICAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnQoNDIpOyAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgICB9CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNjaGVtYUltcG9ydCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NjaGVtYVByZWZpeCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNjaGVtYVByZWZpeCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE4NzogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0KDE4Nyk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIGxvb2thaGVhZDFXKDIzOSk7ICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9OQ05hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMzApOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnPScKICAgICAgc2hpZnQoNjEpOyAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGxvb2thaGVhZDFXKDUwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VsZW1lbnQnCiAgICAgIHNoaWZ0KDEyMik7ICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0KDE4Nyk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNjaGVtYVByZWZpeCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX01vZHVsZUltcG9ydCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk1vZHVsZUltcG9ydCIsIGUwKTsKICAgIHNoaWZ0KDE1NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGxvb2thaGVhZDFXKDYzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbW9kdWxlJwogICAgc2hpZnQoMTg1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgbG9va2FoZWFkMVcoOTMpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicgfCAnbmFtZXNwYWNlJwogICAgaWYgKGwxID09IDE4NykgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgewogICAgICBzaGlmdCgxODcpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBsb29rYWhlYWQxVygyMzkpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTkNOYW1lKCk7CiAgICAgIGxvb2thaGVhZDFXKDMwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJz0nCiAgICAgIHNoaWZ0KDYxKTsgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgfQogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgbG9va2FoZWFkMVcoMTEyKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc7JyB8ICdhdCcKICAgIGlmIChsMSA9PSA4MikgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgewogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxVygxMDcpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOycKICAgICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJNb2R1bGVJbXBvcnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OYW1lc3BhY2VEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTmFtZXNwYWNlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25hbWVzcGFjZScKICAgIHNoaWZ0KDE4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDIzOSk7ICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfTkNOYW1lKCk7CiAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJz0nCiAgICBzaGlmdCg2MSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOYW1lc3BhY2VEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGVmYXVsdE5hbWVzcGFjZURlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEZWZhdWx0TmFtZXNwYWNlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlZmF1bHQnCiAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoMTE5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbGVtZW50JyB8ICdmdW5jdGlvbicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdCgxMjIpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICB9CiAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25hbWVzcGFjZScKICAgIHNoaWZ0KDE4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGVmYXVsdE5hbWVzcGFjZURlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGVmYXVsdE5hbWVzcGFjZURlY2woKQogIHsKICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlZmF1bHQnCiAgICBzaGlmdFQoMTEwKTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoMTE5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbGVtZW50JyB8ICdmdW5jdGlvbicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdFQoMTIyKTsgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTQ3KTsgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICB9CiAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25hbWVzcGFjZScKICAgIHNoaWZ0VCgxODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUT3B0aW9uRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUT3B0aW9uRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg1NSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Z0LW9wdGlvbicKICAgIHNoaWZ0KDE0Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgIGxvb2thaGVhZDFXKDg0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndXNpbmcnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GVE1hdGNoT3B0aW9ucygpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVE9wdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Bbm5vdGF0ZWREZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW5ub3RhdGVkRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxOTIpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJyg6JyB8ICdjb2xsZWN0aW9uJyB8ICdmdW5jdGlvbicgfCAnaW5kZXgnIHwgJ2ludGVncml0eScgfAogICAgICBpZiAobDEgIT0gMzMgICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgICYmIGwxICE9IDI2MykgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0NvbXBhdGliaWxpdHlBbm5vdGF0aW9uKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0Fubm90YXRpb24oKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1ZhckRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GdW5jdGlvbkRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsZWN0aW9uJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0NvbGxlY3Rpb25EZWNsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSW5kZXhEZWNsKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JQ0RlY2woKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQW5ub3RhdGVkRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBhdGliaWxpdHlBbm5vdGF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcGF0aWJpbGl0eUFubm90YXRpb24iLCBlMCk7CiAgICBzaGlmdCgyNjMpOyAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tcGF0aWJpbGl0eUFubm90YXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Bbm5vdGF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW5ub3RhdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDMzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTkzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdjb2xsZWN0aW9uJyB8ICdmdW5jdGlvbicgfCAnaW5kZXgnIHwgJ2ludGVncml0eScgfAogICAgaWYgKGwxID09IDM1KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE5MCk7ICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9MaXRlcmFsKCk7CiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxVygxMDUpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICBsb29rYWhlYWQxVygxOTApOyAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9MaXRlcmFsKCk7CiAgICAgIH0KICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFubm90YXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQW5ub3RhdGlvbigpCiAgewogICAgc2hpZnRUKDMzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJScKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTkzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdjb2xsZWN0aW9uJyB8ICdmdW5jdGlvbicgfCAnaW5kZXgnIHwgJ2ludGVncml0eScgfAogICAgaWYgKGwxID09IDM1KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE5MCk7ICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonIHwKICAgICAgdHJ5X0xpdGVyYWwoKTsKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwNSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnRUKDQyKTsgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDE5MCk7ICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JyB8CiAgICAgICAgdHJ5X0xpdGVyYWwoKTsKICAgICAgfQogICAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZhckRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYXJEZWNsIiwgZTApOwogICAgc2hpZnQoMjY4KTsgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNTcpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JyB8ICdhcycgfCAnZXh0ZXJuYWwnCiAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDExMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nIHwgJ2V4dGVybmFsJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVmFyVmFsdWUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIGxvb2thaGVhZDFXKDEwOCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JyB8ICc7JwogICAgICBpZiAobDEgPT0gNTMpICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIHsKICAgICAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9WYXJEZWZhdWx0VmFsdWUoKTsKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWYXJEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmFyVmFsdWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYXJWYWx1ZSIsIGUwKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFyVmFsdWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYXJEZWZhdWx0VmFsdWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYXJEZWZhdWx0VmFsdWUiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhckRlZmF1bHRWYWx1ZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbnRleHRJdGVtRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbnRleHRJdGVtRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRleHQnCiAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgbG9va2FoZWFkMVcoNTgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpdGVtJwogICAgc2hpZnQoMTY3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgIGxvb2thaGVhZDFXKDE1Nyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nIHwgJ2FzJyB8ICdleHRlcm5hbCcKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JdGVtVHlwZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTEwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScgfCAnZXh0ZXJuYWwnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJWYWx1ZSgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgbG9va2FoZWFkMVcoMTA4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nIHwgJzsnCiAgICAgIGlmIChsMSA9PSA1MykgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgewogICAgICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1ZhckRlZmF1bHRWYWx1ZSgpOwogICAgICB9CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbnRleHRJdGVtRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1BhcmFtTGlzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBhcmFtTGlzdCIsIGUwKTsKICAgIHBhcnNlX1BhcmFtKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMDUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1BhcmFtKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhcmFtTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9QYXJhbUxpc3QoKQogIHsKICAgIHRyeV9QYXJhbSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgdHJ5X1BhcmFtKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QYXJhbSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBhcmFtIiwgZTApOwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNTMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnIHwgJ2FzJwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHlwZURlY2xhcmF0aW9uKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhcmFtIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhcmFtKCkKICB7CiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNTMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnIHwgJ2FzJwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Z1bmN0aW9uQm9keSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZ1bmN0aW9uQm9keSIsIGUwKTsKICAgIHBhcnNlX0VuY2xvc2VkRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGdW5jdGlvbkJvZHkiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRnVuY3Rpb25Cb2R5KCkKICB7CiAgICB0cnlfRW5jbG9zZWRFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FbmNsb3NlZEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFbmNsb3NlZEV4cHIiLCBlMCk7CiAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMjg3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRW5jbG9zZWRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VuY2xvc2VkRXhwcigpCiAgewogICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfT3B0aW9uRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9wdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNjkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvcHRpb24nCiAgICBzaGlmdCgyMDMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcHRpb25EZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkV4cHIiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9FeHByKCkKICB7CiAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZMV09SRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZMV09SRXhwciIsIGUwKTsKICAgIHBhcnNlX0luaXRpYWxDbGF1c2UoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE5NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8ICdsZXQnIHwgJ29yZGVyJyB8ICdyZXR1cm4nIHwgJ3N0YWJsZScgfAogICAgICBpZiAobDEgPT0gMjI0KSAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbnRlcm1lZGlhdGVDbGF1c2UoKTsKICAgIH0KICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1JldHVybkNsYXVzZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGTFdPUkV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRkxXT1JFeHByKCkKICB7CiAgICB0cnlfSW5pdGlhbENsYXVzZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTk1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfCAnb3JkZXInIHwgJ3JldHVybicgfCAnc3RhYmxlJyB8CiAgICAgIGlmIChsMSA9PSAyMjQpICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0cnlfSW50ZXJtZWRpYXRlQ2xhdXNlKCk7CiAgICB9CiAgICB0cnlfUmV0dXJuQ2xhdXNlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Jbml0aWFsQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5pdGlhbENsYXVzZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGxvb2thaGVhZDJXKDE1MSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3NsaWRpbmcnIHwgJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxNjAxMTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnJCcKICAgICAgcGFyc2VfRm9yQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBwYXJzZV9MZXRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9XaW5kb3dDbGF1c2UoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5pdGlhbENsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Jbml0aWFsQ2xhdXNlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBsb29rYWhlYWQyVygxNTEpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdzbGlkaW5nJyB8ICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTYwMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyQnCiAgICAgIHRyeV9Gb3JDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHRyeV9MZXRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfV2luZG93Q2xhdXNlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbnRlcm1lZGlhdGVDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbnRlcm1lZGlhdGVDbGF1c2UiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBwYXJzZV9Jbml0aWFsQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHBhcnNlX1doZXJlQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHBhcnNlX0dyb3VwQnlDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgcGFyc2VfQ291bnRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9PcmRlckJ5Q2xhdXNlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkludGVybWVkaWF0ZUNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JbnRlcm1lZGlhdGVDbGF1c2UoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHRyeV9Jbml0aWFsQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHRyeV9XaGVyZUNsYXVzZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICB0cnlfR3JvdXBCeUNsYXVzZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICB0cnlfQ291bnRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfT3JkZXJCeUNsYXVzZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRm9yQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRm9yQ2xhdXNlIiwgZTApOwogICAgc2hpZnQoMTM5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRm9yQmluZGluZygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Gb3JCaW5kaW5nKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZvckNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Gb3JDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCgxMzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHRyeV9Gb3JCaW5kaW5nKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCg0Mik7ICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICB0cnlfRm9yQmluZGluZygpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRm9yQmluZGluZygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZvckJpbmRpbmciLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxODIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FsbG93aW5nJyB8ICdhcycgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTczKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhbGxvd2luZycgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA3MykgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FsbG93aW5nRW1wdHkoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDE2MCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA4MikgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1Bvc2l0aW9uYWxWYXIoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEyNik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nIHwgJ3Njb3JlJwogICAgaWYgKGwxID09IDIzMikgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRTY29yZVZhcigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0KDE1Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGb3JCaW5kaW5nIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZvckJpbmRpbmcoKQogIHsKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxODIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FsbG93aW5nJyB8ICdhcycgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB0cnlfVHlwZURlY2xhcmF0aW9uKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNzMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FsbG93aW5nJyB8ICdhdCcgfCAnaW4nIHwgJ3Njb3JlJwogICAgaWYgKGwxID09IDczKSAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICB7CiAgICAgIHRyeV9BbGxvd2luZ0VtcHR5KCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNjApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICdpbicgfCAnc2NvcmUnCiAgICBpZiAobDEgPT0gODIpICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIHsKICAgICAgdHJ5X1Bvc2l0aW9uYWxWYXIoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEyNik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nIHwgJ3Njb3JlJwogICAgaWYgKGwxID09IDIzMikgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICB7CiAgICAgIHRyeV9GVFNjb3JlVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luJwogICAgc2hpZnRUKDE1Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQWxsb3dpbmdFbXB0eSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFsbG93aW5nRW1wdHkiLCBlMCk7CiAgICBzaGlmdCg3Myk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGxvb2thaGVhZDFXKDUyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW1wdHknCiAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQWxsb3dpbmdFbXB0eSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BbGxvd2luZ0VtcHR5KCkKICB7CiAgICBzaGlmdFQoNzMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGxvb2thaGVhZDFXKDUyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW1wdHknCiAgICBzaGlmdFQoMTI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1Bvc2l0aW9uYWxWYXIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQb3NpdGlvbmFsVmFyIiwgZTApOwogICAgc2hpZnQoODIpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBvc2l0aW9uYWxWYXIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUG9zaXRpb25hbFZhcigpCiAgewogICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRTY29yZVZhcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUU2NvcmVWYXIiLCBlMCk7CiAgICBzaGlmdCgyMzIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTY29yZVZhciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFNjb3JlVmFyKCkKICB7CiAgICBzaGlmdFQoMjMyKTsgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9MZXRDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJMZXRDbGF1c2UiLCBlMCk7CiAgICBzaGlmdCgxNzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICBsb29rYWhlYWQxVygxMDApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3Njb3JlJwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfTGV0QmluZGluZygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMTAwKTsgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnc2NvcmUnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTGV0QmluZGluZygpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJMZXRDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfTGV0Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMTc3KTsgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICBsb29rYWhlYWQxVygxMDApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3Njb3JlJwogICAgdHJ5X0xldEJpbmRpbmcoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDQyKTsgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDEwMCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3Njb3JlJwogICAgICB0cnlfTGV0QmluZGluZygpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTGV0QmluZGluZygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkxldEJpbmRpbmciLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICAgIGxvb2thaGVhZDFXKDEwOSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JyB8ICdhcycKICAgICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICB7CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRlRTY29yZVZhcigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScKICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJMZXRCaW5kaW5nIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0xldEJpbmRpbmcoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfVmFyTmFtZSgpOwogICAgICBsb29rYWhlYWQxVygxMDkpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScgfCAnYXMnCiAgICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgewogICAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9GVFNjb3JlVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnRUKDUzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfV2luZG93Q2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiV2luZG93Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMTM5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgbG9va2FoZWFkMVcoMTM5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdzbGlkaW5nJyB8ICd0dW1ibGluZycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UdW1ibGluZ1dpbmRvd0NsYXVzZSgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2xpZGluZ1dpbmRvd0NsYXVzZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJXaW5kb3dDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfV2luZG93Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMTM5KTsgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICBsb29rYWhlYWQxVygxMzkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3NsaWRpbmcnIHwgJ3R1bWJsaW5nJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICB0cnlfVHVtYmxpbmdXaW5kb3dDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfU2xpZGluZ1dpbmRvd0NsYXVzZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHVtYmxpbmdXaW5kb3dDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUdW1ibGluZ1dpbmRvd0NsYXVzZSIsIGUwKTsKICAgIHNoaWZ0KDI1Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgbG9va2FoZWFkMVcoODgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd3aW5kb3cnCiAgICBzaGlmdCgyNzUpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aW5kb3cnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxMTQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJyB8ICdpbicKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0KDE1Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfV2luZG93U3RhcnRDb25kaXRpb24oKTsKICAgIGlmIChsMSA9PSAxMjcgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICB8fCBsMSA9PSAyMDIpICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfV2luZG93RW5kQ29uZGl0aW9uKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR1bWJsaW5nV2luZG93Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1R1bWJsaW5nV2luZG93Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMjU3KTsgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgIGxvb2thaGVhZDFXKDg4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2luZG93JwogICAgc2hpZnRUKDI3NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDExNCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnIHwgJ2luJwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDU2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICBzaGlmdFQoMTU2KTsgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICB0cnlfV2luZG93U3RhcnRDb25kaXRpb24oKTsKICAgIGlmIChsMSA9PSAxMjcgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICB8fCBsMSA9PSAyMDIpICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICB7CiAgICAgIHRyeV9XaW5kb3dFbmRDb25kaXRpb24oKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NsaWRpbmdXaW5kb3dDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTbGlkaW5nV2luZG93Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjM5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgIGxvb2thaGVhZDFXKDg4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2luZG93JwogICAgc2hpZnQoMjc1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTE0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnaW4nCiAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDU2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICBzaGlmdCgxNTYpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1dpbmRvd1N0YXJ0Q29uZGl0aW9uKCk7CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9XaW5kb3dFbmRDb25kaXRpb24oKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2xpZGluZ1dpbmRvd0NsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TbGlkaW5nV2luZG93Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMjM5KTsgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgbG9va2FoZWFkMVcoODgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd3aW5kb3cnCiAgICBzaGlmdFQoMjc1KTsgICAgICAgICAgICAgICAgICAgIC8vICd3aW5kb3cnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTE0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnaW4nCiAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0VCgxNTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHRyeV9XaW5kb3dTdGFydENvbmRpdGlvbigpOwogICAgdHJ5X1dpbmRvd0VuZENvbmRpdGlvbigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfV2luZG93U3RhcnRDb25kaXRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJXaW5kb3dTdGFydENvbmRpdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDI0Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgbG9va2FoZWFkMVcoMTgxKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdhdCcgfCAnbmV4dCcgfCAncHJldmlvdXMnIHwgJ3doZW4nCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9XaW5kb3dWYXJzKCk7CiAgICBsb29rYWhlYWQxVyg4Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3doZW4nCiAgICBzaGlmdCgyNzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJXaW5kb3dTdGFydENvbmRpdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9XaW5kb3dTdGFydENvbmRpdGlvbigpCiAgewogICAgc2hpZnRUKDI0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBsb29rYWhlYWQxVygxODEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIHRyeV9XaW5kb3dWYXJzKCk7CiAgICBsb29rYWhlYWQxVyg4Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3doZW4nCiAgICBzaGlmdFQoMjcxKTsgICAgICAgICAgICAgICAgICAgIC8vICd3aGVuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1dpbmRvd0VuZENvbmRpdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIldpbmRvd0VuZENvbmRpdGlvbiIsIGUwKTsKICAgIGlmIChsMSA9PSAyMDIpICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICB7CiAgICAgIHNoaWZ0KDIwMik7ICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgfQogICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbmQnCiAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICBsb29rYWhlYWQxVygxODEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1dpbmRvd1ZhcnMoKTsKICAgIGxvb2thaGVhZDFXKDg2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2hlbicKICAgIHNoaWZ0KDI3MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIldpbmRvd0VuZENvbmRpdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9XaW5kb3dFbmRDb25kaXRpb24oKQogIHsKICAgIGlmIChsMSA9PSAyMDIpICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICB7CiAgICAgIHNoaWZ0VCgyMDIpOyAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgfQogICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbmQnCiAgICBzaGlmdFQoMTI3KTsgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICBsb29rYWhlYWQxVygxODEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIHRyeV9XaW5kb3dWYXJzKCk7CiAgICBsb29rYWhlYWQxVyg4Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3doZW4nCiAgICBzaGlmdFQoMjcxKTsgICAgICAgICAgICAgICAgICAgIC8vICd3aGVuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1dpbmRvd1ZhcnMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJXaW5kb3dWYXJzIiwgZTApOwogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9DdXJyZW50SXRlbSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTc0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnbmV4dCcgfCAncHJldmlvdXMnIHwgJ3doZW4nCiAgICBpZiAobDEgPT0gODIpICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Qb3NpdGlvbmFsVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNjMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8ICd3aGVuJwogICAgaWYgKGwxID09IDIxOSkgICAgICAgICAgICAgICAgICAvLyAncHJldmlvdXMnCiAgICB7CiAgICAgIHNoaWZ0KDIxOSk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmV2aW91cycKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QcmV2aW91c0l0ZW0oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEzMSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbmV4dCcgfCAnd2hlbicKICAgIGlmIChsMSA9PSAxOTApICAgICAgICAgICAgICAgICAgLy8gJ25leHQnCiAgICB7CiAgICAgIHNoaWZ0KDE5MCk7ICAgICAgICAgICAgICAgICAgIC8vICduZXh0JwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX05leHRJdGVtKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIldpbmRvd1ZhcnMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfV2luZG93VmFycygpCiAgewogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X0N1cnJlbnRJdGVtKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNzQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIGlmIChsMSA9PSA4MikgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgewogICAgICB0cnlfUG9zaXRpb25hbFZhcigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTYzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIGlmIChsMSA9PSAyMTkpICAgICAgICAgICAgICAgICAgLy8gJ3ByZXZpb3VzJwogICAgewogICAgICBzaGlmdFQoMjE5KTsgICAgICAgICAgICAgICAgICAvLyAncHJldmlvdXMnCiAgICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9QcmV2aW91c0l0ZW0oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEzMSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbmV4dCcgfCAnd2hlbicKICAgIGlmIChsMSA9PSAxOTApICAgICAgICAgICAgICAgICAgLy8gJ25leHQnCiAgICB7CiAgICAgIHNoaWZ0VCgxOTApOyAgICAgICAgICAgICAgICAgIC8vICduZXh0JwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfTmV4dEl0ZW0oKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0N1cnJlbnRJdGVtKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ3VycmVudEl0ZW0iLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ3VycmVudEl0ZW0iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ3VycmVudEl0ZW0oKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ByZXZpb3VzSXRlbSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByZXZpb3VzSXRlbSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmV2aW91c0l0ZW0iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUHJldmlvdXNJdGVtKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OZXh0SXRlbSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5leHRJdGVtIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5leHRJdGVtIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05leHRJdGVtKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db3VudENsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvdW50Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMTA2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvdW50Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvdW50Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMTA2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9XaGVyZUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIldoZXJlQ2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjcyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIldoZXJlQ2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1doZXJlQ2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMjcyKTsgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Hcm91cEJ5Q2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiR3JvdXBCeUNsYXVzZSIsIGUwKTsKICAgIHNoaWZ0KDE1MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgbG9va2FoZWFkMVcoMzcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgIHNoaWZ0KDg4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfR3JvdXBpbmdTcGVjTGlzdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJHcm91cEJ5Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0dyb3VwQnlDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCgxNTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgbG9va2FoZWFkMVcoMzcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgIHNoaWZ0VCg4OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0dyb3VwaW5nU3BlY0xpc3QoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0dyb3VwaW5nU3BlY0xpc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHcm91cGluZ1NwZWNMaXN0IiwgZTApOwogICAgcGFyc2VfR3JvdXBpbmdTcGVjKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxOTgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfCAncmV0dXJuJyB8CiAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNDIpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfR3JvdXBpbmdTcGVjKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkdyb3VwaW5nU3BlY0xpc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfR3JvdXBpbmdTcGVjTGlzdCgpCiAgewogICAgdHJ5X0dyb3VwaW5nU3BlYygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTk4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfCAnb3JkZXInIHwgJ3JldHVybicgfAogICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCg0Mik7ICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfR3JvdXBpbmdTcGVjKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Hcm91cGluZ1NwZWMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHcm91cGluZ1NwZWMiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMlcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMzEwMyAgICAgICAgICAgICAgICAgIC8vICckJyBFUU5hbWVeVG9rZW4KICAgICB8fCBsayA9PSAzNjM4MyAgICAgICAgICAgICAgICAgLy8gJyQnICdhZnRlcicKICAgICB8fCBsayA9PSAzNzQwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdhbGxvd2luZycKICAgICB8fCBsayA9PSAzNzkxOSAgICAgICAgICAgICAgICAgLy8gJyQnICdhbmNlc3RvcicKICAgICB8fCBsayA9PSAzODQzMSAgICAgICAgICAgICAgICAgLy8gJyQnICdhbmNlc3Rvci1vci1zZWxmJwogICAgIHx8IGxrID09IDM4OTQzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FuZCcKICAgICB8fCBsayA9PSAzOTk2NyAgICAgICAgICAgICAgICAgLy8gJyQnICdhcHBlbmQnCiAgICAgfHwgbGsgPT0gNDA0NzkgICAgICAgICAgICAgICAgIC8vICckJyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDA5OTEgICAgICAgICAgICAgICAgIC8vICckJyAnYXMnCiAgICAgfHwgbGsgPT0gNDE1MDMgICAgICAgICAgICAgICAgIC8vICckJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQyMDE1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2F0JwogICAgIHx8IGxrID09IDQyNTI3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2F0dHJpYnV0ZScKICAgICB8fCBsayA9PSA0MzAzOSAgICAgICAgICAgICAgICAgLy8gJyQnICdiYXNlLXVyaScKICAgICB8fCBsayA9PSA0MzU1MSAgICAgICAgICAgICAgICAgLy8gJyQnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDQwNjMgICAgICAgICAgICAgICAgIC8vICckJyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDQ1NzUgICAgICAgICAgICAgICAgIC8vICckJyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDU1OTkgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzZScKICAgICB8fCBsayA9PSA0NjExMSAgICAgICAgICAgICAgICAgLy8gJyQnICdjYXN0JwogICAgIHx8IGxrID09IDQ2NjIzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ3MTM1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NhdGNoJwogICAgIHx8IGxrID09IDQ4MTU5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NoaWxkJwogICAgIHx8IGxrID09IDQ4NjcxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0OTY5NSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb21tZW50JwogICAgIHx8IGxrID09IDUwMjA3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbnN0cmFpbnQnCiAgICAgfHwgbGsgPT0gNTA3MTkgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RydWN0aW9uJwogICAgIHx8IGxrID09IDUyMjU1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbnRleHQnCiAgICAgfHwgbGsgPT0gNTI3NjcgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTMyNzkgICAgICAgICAgICAgICAgIC8vICckJyAnY29weScKICAgICB8fCBsayA9PSA1Mzc5MSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgfHwgbGsgPT0gNTQzMDMgICAgICAgICAgICAgICAgIC8vICckJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ4MTUgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTU4MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjbGFyZScKICAgICB8fCBsayA9PSA1NjM1MSAgICAgICAgICAgICAgICAgLy8gJyQnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2ODYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RlbGV0ZScKICAgICB8fCBsayA9PSA1NzM3NSAgICAgICAgICAgICAgICAgLy8gJyQnICdkZXNjZW5kYW50JwogICAgIHx8IGxrID09IDU3ODg3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICB8fCBsayA9PSA1ODM5OSAgICAgICAgICAgICAgICAgLy8gJyQnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDYwOTU5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RpdicKICAgICB8fCBsayA9PSA2MTQ3MSAgICAgICAgICAgICAgICAgLy8gJyQnICdkb2N1bWVudCcKICAgICB8fCBsayA9PSA2MTk4MyAgICAgICAgICAgICAgICAgLy8gJyQnICdkb2N1bWVudC1ub2RlJwogICAgIHx8IGxrID09IDYyNDk1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VsZW1lbnQnCiAgICAgfHwgbGsgPT0gNjMwMDcgICAgICAgICAgICAgICAgIC8vICckJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzUxOSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbXB0eScKICAgICB8fCBsayA9PSA2NDAzMSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbXB0eS1zZXF1ZW5jZScKICAgICB8fCBsayA9PSA2NDU0MyAgICAgICAgICAgICAgICAgLy8gJyQnICdlbmNvZGluZycKICAgICB8fCBsayA9PSA2NTA1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbmQnCiAgICAgfHwgbGsgPT0gNjYwNzkgICAgICAgICAgICAgICAgIC8vICckJyAnZXEnCiAgICAgfHwgbGsgPT0gNjY1OTEgICAgICAgICAgICAgICAgIC8vICckJyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjc2MTUgICAgICAgICAgICAgICAgIC8vICckJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY4MTI3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2V4aXQnCiAgICAgfHwgbGsgPT0gNjg2MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjkxNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZmFsc2UnCiAgICAgfHwgbGsgPT0gNjk2NjMgICAgICAgICAgICAgICAgIC8vICckJyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNzAxNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nJwogICAgIHx8IGxrID09IDcwNjg3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgIHx8IGxrID09IDcxMTk5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZvcicKICAgICB8fCBsayA9PSA3MjczNSAgICAgICAgICAgICAgICAgLy8gJyQnICdmcm9tJwogICAgIHx8IGxrID09IDczMjQ3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Z0LW9wdGlvbicKICAgICB8fCBsayA9PSA3NTI5NSAgICAgICAgICAgICAgICAgLy8gJyQnICdmdW5jdGlvbicKICAgICB8fCBsayA9PSA3NTgwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdnZScKICAgICB8fCBsayA9PSA3NjgzMSAgICAgICAgICAgICAgICAgLy8gJyQnICdncm91cCcKICAgICB8fCBsayA9PSA3Nzg1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdndCcKICAgICB8fCBsayA9PSA3ODM2NyAgICAgICAgICAgICAgICAgLy8gJyQnICdpZGl2JwogICAgIHx8IGxrID09IDc4ODc5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2lmJwogICAgIHx8IGxrID09IDc5MzkxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ltcG9ydCcKICAgICB8fCBsayA9PSA3OTkwMyAgICAgICAgICAgICAgICAgLy8gJyQnICdpbicKICAgICB8fCBsayA9PSA4MDQxNSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbmRleCcKICAgICB8fCBsayA9PSA4MjQ2MyAgICAgICAgICAgICAgICAgLy8gJyQnICdpbnNlcnQnCiAgICAgfHwgbGsgPT0gODI5NzUgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODM0ODcgICAgICAgICAgICAgICAgIC8vICckJyAnaW50ZWdyaXR5JwogICAgIHx8IGxrID09IDgzOTk5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDUxMSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbnRvJwogICAgIHx8IGxrID09IDg1MDIzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2lzJwogICAgIHx8IGxrID09IDg1NTM1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2l0ZW0nCiAgICAgfHwgbGsgPT0gODYwNDcgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbicKICAgICB8fCBsayA9PSA4NjU1OSAgICAgICAgICAgICAgICAgLy8gJyQnICdqc29uLWl0ZW0nCiAgICAgfHwgbGsgPT0gODcwNzEgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbmlxJwogICAgIHx8IGxrID09IDg4NjA3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xhc3QnCiAgICAgfHwgbGsgPT0gODkxMTkgICAgICAgICAgICAgICAgIC8vICckJyAnbGF4JwogICAgIHx8IGxrID09IDg5NjMxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xlJwogICAgIHx8IGxrID09IDkwNjU1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xldCcKICAgICB8fCBsayA9PSA5MTY3OSAgICAgICAgICAgICAgICAgLy8gJyQnICdsb29wJwogICAgIHx8IGxrID09IDkyNzAzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2x0JwogICAgIHx8IGxrID09IDkzNzI3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ21vZCcKICAgICB8fCBsayA9PSA5NDIzOSAgICAgICAgICAgICAgICAgLy8gJyQnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQ3NTEgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kdWxlJwogICAgIHx8IGxrID09IDk1Nzc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ25hbWVzcGFjZScKICAgICB8fCBsayA9PSA5NjI4NyAgICAgICAgICAgICAgICAgLy8gJyQnICduYW1lc3BhY2Utbm9kZScKICAgICB8fCBsayA9PSA5Njc5OSAgICAgICAgICAgICAgICAgLy8gJyQnICduZScKICAgICB8fCBsayA9PSA5OTM1OSAgICAgICAgICAgICAgICAgLy8gJyQnICdub2RlJwogICAgIHx8IGxrID09IDk5ODcxICAgICAgICAgICAgICAgICAvLyAnJCcgJ25vZGVzJwogICAgIHx8IGxrID09IDEwMDg5NSAgICAgICAgICAgICAgICAvLyAnJCcgJ251bGwnCiAgICAgfHwgbGsgPT0gMTAxNDA3ICAgICAgICAgICAgICAgIC8vICckJyAnb2JqZWN0JwogICAgIHx8IGxrID09IDEwMzQ1NSAgICAgICAgICAgICAgICAvLyAnJCcgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzOTY3ICAgICAgICAgICAgICAgIC8vICckJyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwNDQ3OSAgICAgICAgICAgICAgICAvLyAnJCcgJ29yJwogICAgIHx8IGxrID09IDEwNDk5MSAgICAgICAgICAgICAgICAvLyAnJCcgJ29yZGVyJwogICAgIHx8IGxrID09IDEwNTUwMyAgICAgICAgICAgICAgICAvLyAnJCcgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTA2MDE1ICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA3NTUxICAgICAgICAgICAgICAgIC8vICckJyAncGFyZW50JwogICAgIHx8IGxrID09IDExMDYyMyAgICAgICAgICAgICAgICAvLyAnJCcgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMTExMzUgICAgICAgICAgICAgICAgLy8gJyQnICdwcmVjZWRpbmctc2libGluZycKICAgICB8fCBsayA9PSAxMTI2NzEgICAgICAgICAgICAgICAgLy8gJyQnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMzY5NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTQyMDcgICAgICAgICAgICAgICAgLy8gJyQnICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExNDcxOSAgICAgICAgICAgICAgICAvLyAnJCcgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTUyMzEgICAgICAgICAgICAgICAgLy8gJyQnICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTE1NzQzICAgICAgICAgICAgICAgIC8vICckJyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExNjc2NyAgICAgICAgICAgICAgICAvLyAnJCcgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTcyNzkgICAgICAgICAgICAgICAgLy8gJyQnICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE3NzkxICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTgzMDMgICAgICAgICAgICAgICAgLy8gJyQnICdzY2hlbWEtZWxlbWVudCcKICAgICB8fCBsayA9PSAxMTg4MTUgICAgICAgICAgICAgICAgLy8gJyQnICdzY29yZScKICAgICB8fCBsayA9PSAxMTkzMjcgICAgICAgICAgICAgICAgLy8gJyQnICdzZWxlY3QnCiAgICAgfHwgbGsgPT0gMTE5ODM5ICAgICAgICAgICAgICAgIC8vICckJyAnc2VsZicKICAgICB8fCBsayA9PSAxMjIzOTkgICAgICAgICAgICAgICAgLy8gJyQnICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMjkxMSAgICAgICAgICAgICAgICAvLyAnJCcgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIzNDIzICAgICAgICAgICAgICAgIC8vICckJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMzkzNSAgICAgICAgICAgICAgICAvLyAnJCcgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNTQ3MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjY0OTUgICAgICAgICAgICAgICAgLy8gJyQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI3MDA3ICAgICAgICAgICAgICAgIC8vICckJyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNzUxOSAgICAgICAgICAgICAgICAvLyAnJCcgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI5NTY3ICAgICAgICAgICAgICAgIC8vICckJyAndG8nCiAgICAgfHwgbGsgPT0gMTMwMDc5ICAgICAgICAgICAgICAgIC8vICckJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwNTkxICAgICAgICAgICAgICAgIC8vICckJyAndHJ1ZScKICAgICB8fCBsayA9PSAxMzExMDMgICAgICAgICAgICAgICAgLy8gJyQnICd0cnknCiAgICAgfHwgbGsgPT0gMTMxNjE1ICAgICAgICAgICAgICAgIC8vICckJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTMyMTI3ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZScKICAgICB8fCBsayA9PSAxMzI2MzkgICAgICAgICAgICAgICAgLy8gJyQnICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEzMzE1MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzNDE3NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzQ2ODcgICAgICAgICAgICAgICAgLy8gJyQnICd1cGRhdGluZycKICAgICB8fCBsayA9PSAxMzYyMjMgICAgICAgICAgICAgICAgLy8gJyQnICd2YWxpZGF0ZScKICAgICB8fCBsayA9PSAxMzY3MzUgICAgICAgICAgICAgICAgLy8gJyQnICd2YWx1ZScKICAgICB8fCBsayA9PSAxMzcyNDcgICAgICAgICAgICAgICAgLy8gJyQnICd2YXJpYWJsZScKICAgICB8fCBsayA9PSAxMzc3NTkgICAgICAgICAgICAgICAgLy8gJyQnICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzOTI5NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTgwNyAgICAgICAgICAgICAgICAvLyAnJCcgJ3doaWxlJwogICAgIHx8IGxrID09IDE0MTM0MykgICAgICAgICAgICAgICAvLyAnJCcgJ3dpdGgnCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMiwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfR3JvdXBpbmdWYXJpYWJsZSgpOwogICAgICAgICAgbG9va2FoZWFkMVcoMjA1KTsgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc6PScgfCAnYXMnIHwgJ2NvbGxhdGlvbicgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwKICAgICAgICAgIGlmIChsMSA9PSA1MyAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgICAgIHx8IGwxID09IDgwKSAgICAgICAgICAgICAvLyAnYXMnCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgIC8vICdhcycKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScKICAgICAgICAgICAgc2hpZnRUKDUzKTsgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGwxID09IDk1KSAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoOTUpOyAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICAgICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgICAgICAgfQogICAgICAgICAgbGsgPSAtMTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgyLCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAtMToKICAgICAgcGFyc2VfR3JvdXBpbmdWYXJpYWJsZSgpOwogICAgICBsb29rYWhlYWQxVygyMDUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc6PScgfCAnYXMnIHwgJ2NvbGxhdGlvbicgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwKICAgICAgaWYgKGwxID09IDUzICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgfHwgbDEgPT0gODApICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgIHsKICAgICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgICAgIH0KICAgICAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nCiAgICAgICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgICB9CiAgICAgIGlmIChsMSA9PSA5NSkgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHsKICAgICAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiR3JvdXBpbmdTcGVjIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0dyb3VwaW5nU3BlYygpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDJXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDMxMDMgICAgICAgICAgICAgICAgICAvLyAnJCcgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gMzYzODMgICAgICAgICAgICAgICAgIC8vICckJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzc0MDcgICAgICAgICAgICAgICAgIC8vICckJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzc5MTkgICAgICAgICAgICAgICAgIC8vICckJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzg0MzEgICAgICAgICAgICAgICAgIC8vICckJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzODk0MyAgICAgICAgICAgICAgICAgLy8gJyQnICdhbmQnCiAgICAgfHwgbGsgPT0gMzk5NjcgICAgICAgICAgICAgICAgIC8vICckJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDQwNDc5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FycmF5JwogICAgIHx8IGxrID09IDQwOTkxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FzJwogICAgIHx8IGxrID09IDQxNTAzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjAxNSAgICAgICAgICAgICAgICAgLy8gJyQnICdhdCcKICAgICB8fCBsayA9PSA0MjUyNyAgICAgICAgICAgICAgICAgLy8gJyQnICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDMwMzkgICAgICAgICAgICAgICAgIC8vICckJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDM1NTEgICAgICAgICAgICAgICAgIC8vICckJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ0MDYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2JvdW5kYXJ5LXNwYWNlJwogICAgIHx8IGxrID09IDQ0NTc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2JyZWFrJwogICAgIHx8IGxrID09IDQ1NTk5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYxMTEgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NjYyMyAgICAgICAgICAgICAgICAgLy8gJyQnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NzEzNSAgICAgICAgICAgICAgICAgLy8gJyQnICdjYXRjaCcKICAgICB8fCBsayA9PSA0ODE1OSAgICAgICAgICAgICAgICAgLy8gJyQnICdjaGlsZCcKICAgICB8fCBsayA9PSA0ODY3MSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDk2OTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA1MDIwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDUwNzE5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MjI1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb250ZXh0JwogICAgIHx8IGxrID09IDUyNzY3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbnRpbnVlJwogICAgIHx8IGxrID09IDUzMjc5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTM3OTEgICAgICAgICAgICAgICAgIC8vICckJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDU0MzAzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvdW50JwogICAgIHx8IGxrID09IDU0ODE1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RlY2ltYWwtZm9ybWF0JwogICAgIHx8IGxrID09IDU1ODM5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTYzNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1Njg2MyAgICAgICAgICAgICAgICAgLy8gJyQnICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTczNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1Nzg4NyAgICAgICAgICAgICAgICAgLy8gJyQnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTgzOTkgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MDk1OSAgICAgICAgICAgICAgICAgLy8gJyQnICdkaXYnCiAgICAgfHwgbGsgPT0gNjE0NzEgICAgICAgICAgICAgICAgIC8vICckJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjE5ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MjQ5NSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbGVtZW50JwogICAgIHx8IGxrID09IDYzMDA3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM1MTkgICAgICAgICAgICAgICAgIC8vICckJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQwMzEgICAgICAgICAgICAgICAgIC8vICckJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQ1NDMgICAgICAgICAgICAgICAgIC8vICckJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjUwNTUgICAgICAgICAgICAgICAgIC8vICckJyAnZW5kJwogICAgIHx8IGxrID09IDY2MDc5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VxJwogICAgIHx8IGxrID09IDY2NTkxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2V2ZXJ5JwogICAgIHx8IGxrID09IDY3NjE1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODEyNyAgICAgICAgICAgICAgICAgLy8gJyQnICdleGl0JwogICAgIHx8IGxrID09IDY4NjM5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY5MTUxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZhbHNlJwogICAgIHx8IGxrID09IDY5NjYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZpcnN0JwogICAgIHx8IGxrID09IDcwMTc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA3MDY4NyAgICAgICAgICAgICAgICAgLy8gJyQnICdmb2xsb3dpbmctc2libGluZycKICAgICB8fCBsayA9PSA3MTE5OSAgICAgICAgICAgICAgICAgLy8gJyQnICdmb3InCiAgICAgfHwgbGsgPT0gNzI3MzUgICAgICAgICAgICAgICAgIC8vICckJyAnZnJvbScKICAgICB8fCBsayA9PSA3MzI0NyAgICAgICAgICAgICAgICAgLy8gJyQnICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzUyOTUgICAgICAgICAgICAgICAgIC8vICckJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzU4MDcgICAgICAgICAgICAgICAgIC8vICckJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY4MzEgICAgICAgICAgICAgICAgIC8vICckJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzc4NTUgICAgICAgICAgICAgICAgIC8vICckJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzgzNjcgICAgICAgICAgICAgICAgIC8vICckJyAnaWRpdicKICAgICB8fCBsayA9PSA3ODg3OSAgICAgICAgICAgICAgICAgLy8gJyQnICdpZicKICAgICB8fCBsayA9PSA3OTM5MSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gNzk5MDMgICAgICAgICAgICAgICAgIC8vICckJyAnaW4nCiAgICAgfHwgbGsgPT0gODA0MTUgICAgICAgICAgICAgICAgIC8vICckJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODI0NjMgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgyOTc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzNDg3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4Mzk5OSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ1MTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW50bycKICAgICB8fCBsayA9PSA4NTAyMyAgICAgICAgICAgICAgICAgLy8gJyQnICdpcycKICAgICB8fCBsayA9PSA4NTUzNSAgICAgICAgICAgICAgICAgLy8gJyQnICdpdGVtJwogICAgIHx8IGxrID09IDg2MDQ3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2pzb24nCiAgICAgfHwgbGsgPT0gODY1NTkgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MDcxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2pzb25pcScKICAgICB8fCBsayA9PSA4ODYwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdsYXN0JwogICAgIHx8IGxrID09IDg5MTE5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xheCcKICAgICB8fCBsayA9PSA4OTYzMSAgICAgICAgICAgICAgICAgLy8gJyQnICdsZScKICAgICB8fCBsayA9PSA5MDY1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdsZXQnCiAgICAgfHwgbGsgPT0gOTE2NzkgICAgICAgICAgICAgICAgIC8vICckJyAnbG9vcCcKICAgICB8fCBsayA9PSA5MjcwMyAgICAgICAgICAgICAgICAgLy8gJyQnICdsdCcKICAgICB8fCBsayA9PSA5MzcyNyAgICAgICAgICAgICAgICAgLy8gJyQnICdtb2QnCiAgICAgfHwgbGsgPT0gOTQyMzkgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0NzUxICAgICAgICAgICAgICAgICAvLyAnJCcgJ21vZHVsZScKICAgICB8fCBsayA9PSA5NTc3NSAgICAgICAgICAgICAgICAgLy8gJyQnICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTYyODcgICAgICAgICAgICAgICAgIC8vICckJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTY3OTkgICAgICAgICAgICAgICAgIC8vICckJyAnbmUnCiAgICAgfHwgbGsgPT0gOTkzNTkgICAgICAgICAgICAgICAgIC8vICckJyAnbm9kZScKICAgICB8fCBsayA9PSA5OTg3MSAgICAgICAgICAgICAgICAgLy8gJyQnICdub2RlcycKICAgICB8fCBsayA9PSAxMDA4OTUgICAgICAgICAgICAgICAgLy8gJyQnICdudWxsJwogICAgIHx8IGxrID09IDEwMTQwNyAgICAgICAgICAgICAgICAvLyAnJCcgJ29iamVjdCcKICAgICB8fCBsayA9PSAxMDM0NTUgICAgICAgICAgICAgICAgLy8gJyQnICdvbmx5JwogICAgIHx8IGxrID09IDEwMzk2NyAgICAgICAgICAgICAgICAvLyAnJCcgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDQ0NzkgICAgICAgICAgICAgICAgLy8gJyQnICdvcicKICAgICB8fCBsayA9PSAxMDQ5OTEgICAgICAgICAgICAgICAgLy8gJyQnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDU1MDMgICAgICAgICAgICAgICAgLy8gJyQnICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwNjAxNSAgICAgICAgICAgICAgICAvLyAnJCcgJ29yZGVyaW5nJwogICAgIHx8IGxrID09IDEwNzU1MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMTA2MjMgICAgICAgICAgICAgICAgLy8gJyQnICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTExMTM1ICAgICAgICAgICAgICAgIC8vICckJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEyNjcxICAgICAgICAgICAgICAgIC8vICckJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTM2OTUgICAgICAgICAgICAgICAgLy8gJyQnICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTE0MjA3ICAgICAgICAgICAgICAgIC8vICckJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTQ3MTkgICAgICAgICAgICAgICAgLy8gJyQnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE1MjMxICAgICAgICAgICAgICAgIC8vICckJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExNTc0MyAgICAgICAgICAgICAgICAvLyAnJCcgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTY3NjcgICAgICAgICAgICAgICAgLy8gJyQnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE3Mjc5ICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNzc5MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE4MzAzICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE4ODE1ICAgICAgICAgICAgICAgIC8vICckJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE5MzI3ICAgICAgICAgICAgICAgIC8vICckJyAnc2VsZWN0JwogICAgIHx8IGxrID09IDExOTgzOSAgICAgICAgICAgICAgICAvLyAnJCcgJ3NlbGYnCiAgICAgfHwgbGsgPT0gMTIyMzk5ICAgICAgICAgICAgICAgIC8vICckJyAnc2xpZGluZycKICAgICB8fCBsayA9PSAxMjI5MTEgICAgICAgICAgICAgICAgLy8gJyQnICdzb21lJwogICAgIHx8IGxrID09IDEyMzQyMyAgICAgICAgICAgICAgICAvLyAnJCcgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM5MzUgICAgICAgICAgICAgICAgLy8gJyQnICdzdGFydCcKICAgICB8fCBsayA9PSAxMjU0NzEgICAgICAgICAgICAgICAgLy8gJyQnICdzdHJpY3QnCiAgICAgfHwgbGsgPT0gMTI2NDk1ICAgICAgICAgICAgICAgIC8vICckJyAnc3RydWN0dXJlZC1pdGVtJwogICAgIHx8IGxrID09IDEyNzAwNyAgICAgICAgICAgICAgICAvLyAnJCcgJ3N3aXRjaCcKICAgICB8fCBsayA9PSAxMjc1MTkgICAgICAgICAgICAgICAgLy8gJyQnICd0ZXh0JwogICAgIHx8IGxrID09IDEyOTU2NyAgICAgICAgICAgICAgICAvLyAnJCcgJ3RvJwogICAgIHx8IGxrID09IDEzMDA3OSAgICAgICAgICAgICAgICAvLyAnJCcgJ3RyZWF0JwogICAgIHx8IGxrID09IDEzMDU5MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3RydWUnCiAgICAgfHwgbGsgPT0gMTMxMTAzICAgICAgICAgICAgICAgIC8vICckJyAndHJ5JwogICAgIHx8IGxrID09IDEzMTYxNSAgICAgICAgICAgICAgICAvLyAnJCcgJ3R1bWJsaW5nJwogICAgIHx8IGxrID09IDEzMjEyNyAgICAgICAgICAgICAgICAvLyAnJCcgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTMyNjM5ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMzMxNTEgICAgICAgICAgICAgICAgLy8gJyQnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzQxNzUgICAgICAgICAgICAgICAgLy8gJyQnICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTM0Njg3ICAgICAgICAgICAgICAgIC8vICckJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTM2MjIzICAgICAgICAgICAgICAgIC8vICckJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTM2NzM1ICAgICAgICAgICAgICAgIC8vICckJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM3MjQ3ICAgICAgICAgICAgICAgIC8vICckJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM3NzU5ICAgICAgICAgICAgICAgIC8vICckJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzkyOTUgICAgICAgICAgICAgICAgLy8gJyQnICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk4MDcgICAgICAgICAgICAgICAgLy8gJyQnICd3aGlsZScKICAgICB8fCBsayA9PSAxNDEzNDMpICAgICAgICAgICAgICAgLy8gJyQnICd3aXRoJwogICAgewogICAgICBsayA9IG1lbW9pemVkKDIsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0dyb3VwaW5nVmFyaWFibGUoKTsKICAgICAgICAgIGxvb2thaGVhZDFXKDIwNSk7ICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJ2FzJyB8ICdjb2xsYXRpb24nIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8CiAgICAgICAgICBpZiAobDEgPT0gNTMgICAgICAgICAgICAgIC8vICc6PScKICAgICAgICAgICB8fCBsMSA9PSA4MCkgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgICAgewogICAgICAgICAgICBpZiAobDEgPT0gODApICAgICAgICAgICAvLyAnYXMnCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnlfVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nCiAgICAgICAgICAgIHNoaWZ0VCg1Myk7ICAgICAgICAgICAgIC8vICc6PScKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsMSA9PSA5NSkgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgICAgIHsKICAgICAgICAgICAgc2hpZnRUKDk1KTsgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgICAgICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgICAgIHNoaWZ0VCg3KTsgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgICAgIH0KICAgICAgICAgIG1lbW9pemUoMiwgZTBBLCAtMSk7CiAgICAgICAgICBsayA9IC0zOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSgyLCBlMEEsIC0yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICB0cnlfR3JvdXBpbmdWYXJpYWJsZSgpOwogICAgICBsb29rYWhlYWQxVygyMDUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc6PScgfCAnYXMnIHwgJ2NvbGxhdGlvbicgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwKICAgICAgaWYgKGwxID09IDUzICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgfHwgbDEgPT0gODApICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgIHsKICAgICAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgICAgICB9CiAgICAgICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgICAgIHNoaWZ0VCg1Myk7ICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgfQogICAgICBpZiAobDEgPT0gOTUpICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICB7CiAgICAgICAgc2hpZnRUKDk1KTsgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCg3KTsgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Hcm91cGluZ1ZhcmlhYmxlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiR3JvdXBpbmdWYXJpYWJsZSIsIGUwKTsKICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiR3JvdXBpbmdWYXJpYWJsZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Hcm91cGluZ1ZhcmlhYmxlKCkKICB7CiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfT3JkZXJCeUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9yZGVyQnlDbGF1c2UiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIHNoaWZ0KDIwNSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgbG9va2FoZWFkMVcoMzcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYnknCiAgICAgIHNoaWZ0KDg4KTsgICAgICAgICAgICAgICAgICAgIC8vICdieScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyNDEpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvcmRlcicKICAgICAgc2hpZnQoMjA1KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBsb29rYWhlYWQxVygzNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgICAgc2hpZnQoODgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgfQogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfT3JkZXJTcGVjTGlzdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlckJ5Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyQnlDbGF1c2UoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnRUKDIwNSk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBsb29rYWhlYWQxVygzNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgICAgc2hpZnRUKDg4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyNDEpOyAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGxvb2thaGVhZDFXKDcwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyJwogICAgICBzaGlmdFQoMjA1KTsgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGxvb2thaGVhZDFXKDM3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2J5JwogICAgICBzaGlmdFQoODgpOyAgICAgICAgICAgICAgICAgICAvLyAnYnknCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfT3JkZXJTcGVjTGlzdCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfT3JkZXJTcGVjTGlzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9yZGVyU3BlY0xpc3QiLCBlMCk7CiAgICBwYXJzZV9PcmRlclNwZWMoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE5OCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8ICdsZXQnIHwgJ29yZGVyJyB8ICdyZXR1cm4nIHwKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9PcmRlclNwZWMoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT3JkZXJTcGVjTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9PcmRlclNwZWNMaXN0KCkKICB7CiAgICB0cnlfT3JkZXJTcGVjKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxOTgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfCAncmV0dXJuJyB8CiAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDQyKTsgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9PcmRlclNwZWMoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX09yZGVyU3BlYygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9yZGVyU3BlYyIsIGUwKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX09yZGVyTW9kaWZpZXIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT3JkZXJTcGVjIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyU3BlYygpCiAgewogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHRyeV9PcmRlck1vZGlmaWVyKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PcmRlck1vZGlmaWVyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT3JkZXJNb2RpZmllciIsIGUwKTsKICAgIGlmIChsMSA9PSA4MSAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICB8fCBsMSA9PSAxMTQpICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxMTQpOyAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDIwMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZW1wdHknIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfAogICAgaWYgKGwxID09IDEyNCkgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICB7CiAgICAgIHNoaWZ0KDEyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgbG9va2FoZWFkMVcoMTI1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZ3JlYXRlc3QnIHwgJ2xlYXN0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdncmVhdGVzdCcKICAgICAgICBzaGlmdCgxNDkpOyAgICAgICAgICAgICAgICAgLy8gJ2dyZWF0ZXN0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDE3Nik7ICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDE5OSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfAogICAgaWYgKGwxID09IDk1KSAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgewogICAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlck1vZGlmaWVyIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyTW9kaWZpZXIoKQogIHsKICAgIGlmIChsMSA9PSA4MSAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICB8fCBsMSA9PSAxMTQpICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBzaGlmdFQoODEpOyAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMTE0KTsgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDIwMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZW1wdHknIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfAogICAgaWYgKGwxID09IDEyNCkgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICB7CiAgICAgIHNoaWZ0VCgxMjQpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgbG9va2FoZWFkMVcoMTI1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZ3JlYXRlc3QnIHwgJ2xlYXN0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdncmVhdGVzdCcKICAgICAgICBzaGlmdFQoMTQ5KTsgICAgICAgICAgICAgICAgLy8gJ2dyZWF0ZXN0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgxNzYpOyAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDE5OSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfAogICAgaWYgKGwxID09IDk1KSAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgewogICAgICBzaGlmdFQoOTUpOyAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV0dXJuQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmV0dXJuQ2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZXR1cm5DbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmV0dXJuQ2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUXVhbnRpZmllZEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJRdWFudGlmaWVkRXhwciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyNDApOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMzApOyAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICB9CiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9RdWFudGlmaWVkVmFyRGVjbCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9RdWFudGlmaWVkVmFyRGVjbCgpOwogICAgfQogICAgc2hpZnQoMjI4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJRdWFudGlmaWVkRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9RdWFudGlmaWVkRXhwcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0VCgyNDApOyAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxMzApOyAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIH0KICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHRyeV9RdWFudGlmaWVkVmFyRGVjbCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgdHJ5X1F1YW50aWZpZWRWYXJEZWNsKCk7CiAgICB9CiAgICBzaGlmdFQoMjI4KTsgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUXVhbnRpZmllZFZhckRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJRdWFudGlmaWVkVmFyRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDExNCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnIHwgJ2luJwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHlwZURlY2xhcmF0aW9uKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luJwogICAgc2hpZnQoMTU2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1YW50aWZpZWRWYXJEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1F1YW50aWZpZWRWYXJEZWNsKCkKICB7CiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTE0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnaW4nCiAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0VCgxNTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N3aXRjaEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTd2l0Y2hFeHByIiwgZTApOwogICAgc2hpZnQoMjQ4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygzOCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1N3aXRjaENhc2VDbGF1c2UoKTsKICAgICAgaWYgKGwxICE9IDg5KSAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDczKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuJwogICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTd2l0Y2hFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N3aXRjaEV4cHIoKQogIHsKICAgIHNoaWZ0VCgyNDgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM4KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHRyeV9Td2l0Y2hDYXNlQ2xhdXNlKCk7CiAgICAgIGlmIChsMSAhPSA4OSkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg3Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0VCgyMjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Td2l0Y2hDYXNlQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3dpdGNoQ2FzZUNsYXVzZSIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHNoaWZ0KDg5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1N3aXRjaENhc2VPcGVyYW5kKCk7CiAgICAgIGlmIChsMSAhPSA4OSkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3dpdGNoQ2FzZUNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Td2l0Y2hDYXNlQ2xhdXNlKCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBzaGlmdFQoODkpOyAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X1N3aXRjaENhc2VPcGVyYW5kKCk7CiAgICAgIGlmIChsMSAhPSA4OSkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgyMjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Td2l0Y2hDYXNlT3BlcmFuZCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN3aXRjaENhc2VPcGVyYW5kIiwgZTApOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTd2l0Y2hDYXNlT3BlcmFuZCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Td2l0Y2hDYXNlT3BlcmFuZCgpCiAgewogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1R5cGVzd2l0Y2hFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHlwZXN3aXRjaEV4cHIiLCBlMCk7CiAgICBzaGlmdCgyNTkpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygzOCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Nhc2VDbGF1c2UoKTsKICAgICAgaWYgKGwxICE9IDg5KSAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDk5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAncmV0dXJuJwogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg3Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHlwZXN3aXRjaEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHlwZXN3aXRjaEV4cHIoKQogIHsKICAgIHNoaWZ0VCgyNTkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygzOCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJwogICAgICB0cnlfQ2FzZUNsYXVzZSgpOwogICAgICBpZiAobDEgIT0gODkpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMTEwKTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoOTkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBpZiAobDEgPT0gMzEpICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgewogICAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfVmFyTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoNzMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2FzZUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNhc2VDbGF1c2UiLCBlMCk7CiAgICBzaGlmdCg4OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgbG9va2FoZWFkMVcoMjU3KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyQnIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVmFyTmFtZSgpOwogICAgICBsb29rYWhlYWQxVygzMyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgfQogICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TZXF1ZW5jZVR5cGVVbmlvbigpOwogICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXNlQ2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Nhc2VDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCg4OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICBsb29rYWhlYWQxVygyNTcpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJCcgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIH0KICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1NlcXVlbmNlVHlwZVVuaW9uKCk7CiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2VxdWVuY2VUeXBlVW5pb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTZXF1ZW5jZVR5cGVVbmlvbiIsIGUwKTsKICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTM4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuJyB8ICd8JwogICAgICBpZiAobDEgIT0gMjg0KSAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDI4NCk7ICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBsb29rYWhlYWQxVygyNTMpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNlcXVlbmNlVHlwZVVuaW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1NlcXVlbmNlVHlwZVVuaW9uKCkKICB7CiAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMzgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nIHwgJ3wnCiAgICAgIGlmIChsMSAhPSAyODQpICAgICAgICAgICAgICAgIC8vICd8JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDI4NCk7ICAgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSWZFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSWZFeHByIiwgZTApOwogICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDgwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlbicKICAgIHNoaWZ0KDI1MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdCgxMjMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJZkV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSWZFeHByKCkKICB7CiAgICBzaGlmdFQoMTU0KTsgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDgwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlbicKICAgIHNoaWZ0VCgyNTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgc2hpZnRUKDEyMyk7ICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9UcnlDYXRjaEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUcnlDYXRjaEV4cHIiLCBlMCk7CiAgICBwYXJzZV9UcnlDbGF1c2UoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NhdGNoJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0NhdGNoQ2xhdXNlKCk7CiAgICAgIGxvb2thaGVhZDFXKDIwNyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJ10nIHwgJ2FmdGVyJyB8ICdhcycgfCAnYXNjZW5kaW5nJyB8CiAgICAgIGlmIChsMSAhPSA5MikgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRyeUNhdGNoRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9UcnlDYXRjaEV4cHIoKQogIHsKICAgIHRyeV9UcnlDbGF1c2UoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NhdGNoJwogICAgICB0cnlfQ2F0Y2hDbGF1c2UoKTsKICAgICAgbG9va2FoZWFkMVcoMjA3KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnXScgfCAnYWZ0ZXInIHwgJ2FzJyB8ICdhc2NlbmRpbmcnIHwKICAgICAgaWYgKGwxICE9IDkyKSAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RyeUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyeUNsYXVzZSIsIGUwKTsKICAgIHNoaWZ0KDI1Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9UcnlUYXJnZXRFeHByKCk7CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUcnlDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJ5Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMjU2KTsgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1RyeVRhcmdldEV4cHIoKTsKICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9UcnlUYXJnZXRFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHJ5VGFyZ2V0RXhwciIsIGUwKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHJ5VGFyZ2V0RXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9UcnlUYXJnZXRFeHByKCkKICB7CiAgICB0cnlfRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2F0Y2hDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDYXRjaENsYXVzZSIsIGUwKTsKICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgbG9va2FoZWFkMVcoMjQ4KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0NhdGNoRXJyb3JMaXN0KCk7CiAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMjg3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ2F0Y2hDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ2F0Y2hDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCg5Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgbG9va2FoZWFkMVcoMjQ4KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9DYXRjaEVycm9yTGlzdCgpOwogICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2F0Y2hFcnJvckxpc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDYXRjaEVycm9yTGlzdCIsIGUwKTsKICAgIHBhcnNlX05hbWVUZXN0KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxNDApOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JyB8ICd8JwogICAgICBpZiAobDEgIT0gMjg0KSAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDI4NCk7ICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBsb29rYWhlYWQxVygyNDgpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9OYW1lVGVzdCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXRjaEVycm9yTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9DYXRjaEVycm9yTGlzdCgpCiAgewogICAgdHJ5X05hbWVUZXN0KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxNDApOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JyB8ICd8JwogICAgICBpZiAobDEgIT0gMjg0KSAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCgyODQpOyAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBsb29rYWhlYWQxVygyNDgpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X05hbWVUZXN0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PckV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJPckV4cHIiLCBlMCk7CiAgICBwYXJzZV9BbmRFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMjA0KSAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgyMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQW5kRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPckV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfT3JFeHByKCkKICB7CiAgICB0cnlfQW5kRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDIwNCkgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDIwNCk7ICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfQW5kRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQW5kRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFuZEV4cHIiLCBlMCk7CiAgICBwYXJzZV9Ob3RFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNzYpICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Ob3RFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFuZEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQW5kRXhwcigpCiAgewogICAgdHJ5X05vdEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA3NikgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfTm90RXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTm90RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5vdEV4cHIiLCBlMCk7CiAgICBpZiAobDEgPT0gMTk2KSAgICAgICAgICAgICAgICAgIC8vICdub3QnCiAgICB7CiAgICAgIHNoaWZ0KDE5Nik7ICAgICAgICAgICAgICAgICAgIC8vICdub3QnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Db21wYXJpc29uRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOb3RFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05vdEV4cHIoKQogIHsKICAgIGlmIChsMSA9PSAxOTYpICAgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgIHsKICAgICAgc2hpZnRUKDE5Nik7ICAgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgIH0KICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9Db21wYXJpc29uRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29tcGFyaXNvbkV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21wYXJpc29uRXhwciIsIGUwKTsKICAgIHBhcnNlX0ZUQ29udGFpbnNFeHByKCk7CiAgICBpZiAobDEgPT0gMjcgICAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICB8fCBsMSA9PSA1NSAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgfHwgbDEgPT0gNTggICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICB8fCBsMSA9PSA1OSAgICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgIHx8IGwxID09IDYxICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICB8fCBsMSA9PSA2MiAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgfHwgbDEgPT0gNjMgICAgICAgICAgICAgICAgICAgIC8vICc+PScKICAgICB8fCBsMSA9PSA2NCAgICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgIHx8IGwxID09IDEyOSAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgfHwgbDEgPT0gMTQ4ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICB8fCBsMSA9PSAxNTIgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgIHx8IGwxID09IDE2NiAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgfHwgbDEgPT0gMTc1ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICB8fCBsMSA9PSAxODEgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgIHx8IGwxID09IDE4OSkgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfVmFsdWVDb21wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTg6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgY2FzZSA2NDogICAgICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX05vZGVDb21wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0dlbmVyYWxDb21wKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVENvbnRhaW5zRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wYXJpc29uRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wYXJpc29uRXhwcigpCiAgewogICAgdHJ5X0ZUQ29udGFpbnNFeHByKCk7CiAgICBpZiAobDEgPT0gMjcgICAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICB8fCBsMSA9PSA1NSAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgfHwgbDEgPT0gNTggICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICB8fCBsMSA9PSA1OSAgICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgIHx8IGwxID09IDYxICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICB8fCBsMSA9PSA2MiAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgfHwgbDEgPT0gNjMgICAgICAgICAgICAgICAgICAgIC8vICc+PScKICAgICB8fCBsMSA9PSA2NCAgICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgIHx8IGwxID09IDEyOSAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgfHwgbDEgPT0gMTQ4ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICB8fCBsMSA9PSAxNTIgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgIHx8IGwxID09IDE2NiAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgfHwgbDEgPT0gMTc1ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICB8fCBsMSA9PSAxODEgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgIHx8IGwxID09IDE4OSkgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgICB0cnlfVmFsdWVDb21wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTg6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgY2FzZSA2NDogICAgICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgICAgdHJ5X05vZGVDb21wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdHJ5X0dlbmVyYWxDb21wKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0ZUQ29udGFpbnNFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVENvbnRhaW5zRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUQ29udGFpbnNFeHByIiwgZTApOwogICAgcGFyc2VfU3RyaW5nQ29uY2F0RXhwcigpOwogICAgaWYgKGwxID09IDEwMCkgICAgICAgICAgICAgICAgICAvLyAnY29udGFpbnMnCiAgICB7CiAgICAgIHNoaWZ0KDEwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdjb250YWlucycKICAgICAgbG9va2FoZWFkMVcoNzkpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGV4dCcKICAgICAgc2hpZnQoMjQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGxvb2thaGVhZDFXKDE3Nyk7ICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAnZnRub3QnIHwgJ3snCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRTZWxlY3Rpb24oKTsKICAgICAgaWYgKGwxID09IDI3NykgICAgICAgICAgICAgICAgLy8gJ3dpdGhvdXQnCiAgICAgIHsKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRlRJZ25vcmVPcHRpb24oKTsKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVENvbnRhaW5zRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVENvbnRhaW5zRXhwcigpCiAgewogICAgdHJ5X1N0cmluZ0NvbmNhdEV4cHIoKTsKICAgIGlmIChsMSA9PSAxMDApICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgewogICAgICBzaGlmdFQoMTAwKTsgICAgICAgICAgICAgICAgICAvLyAnY29udGFpbnMnCiAgICAgIGxvb2thaGVhZDFXKDc5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3RleHQnCiAgICAgIHNoaWZ0VCgyNDkpOyAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBsb29rYWhlYWQxVygxNzcpOyAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JwogICAgICB0cnlfRlRTZWxlY3Rpb24oKTsKICAgICAgaWYgKGwxID09IDI3NykgICAgICAgICAgICAgICAgLy8gJ3dpdGhvdXQnCiAgICAgIHsKICAgICAgICB0cnlfRlRJZ25vcmVPcHRpb24oKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3RyaW5nQ29uY2F0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN0cmluZ0NvbmNhdEV4cHIiLCBlMCk7CiAgICBwYXJzZV9SYW5nZUV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyODUpICAgICAgICAgICAgICAgIC8vICd8fCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDI4NSk7ICAgICAgICAgICAgICAgICAgIC8vICd8fCcKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9SYW5nZUV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RyaW5nQ29uY2F0RXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TdHJpbmdDb25jYXRFeHByKCkKICB7CiAgICB0cnlfUmFuZ2VFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMjg1KSAgICAgICAgICAgICAgICAvLyAnfHwnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMjg1KTsgICAgICAgICAgICAgICAgICAvLyAnfHwnCiAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9SYW5nZUV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JhbmdlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJhbmdlRXhwciIsIGUwKTsKICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgaWYgKGwxID09IDI1MykgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICB7CiAgICAgIHNoaWZ0KDI1Myk7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9BZGRpdGl2ZUV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUmFuZ2VFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1JhbmdlRXhwcigpCiAgewogICAgdHJ5X0FkZGl0aXZlRXhwcigpOwogICAgaWYgKGwxID09IDI1MykgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICB7CiAgICAgIHNoaWZ0VCgyNTMpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0FkZGl0aXZlRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQWRkaXRpdmVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQWRkaXRpdmVFeHByIiwgZTApOwogICAgcGFyc2VfTXVsdGlwbGljYXRpdmVFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDEgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICYmIGwxICE9IDQzKSAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCg0Myk7ICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9NdWx0aXBsaWNhdGl2ZUV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQWRkaXRpdmVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FkZGl0aXZlRXhwcigpCiAgewogICAgdHJ5X011bHRpcGxpY2F0aXZlRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAmJiBsMSAhPSA0MykgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDQzKTsgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9NdWx0aXBsaWNhdGl2ZUV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX011bHRpcGxpY2F0aXZlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk11bHRpcGxpY2F0aXZlRXhwciIsIGUwKTsKICAgIHBhcnNlX1VuaW9uRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDM5ICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgICAmJiBsMSAhPSAxMTkgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgICAmJiBsMSAhPSAxNTMgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICAgJiYgbDEgIT0gMTgzKSAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgICBzaGlmdCgzOSk7ICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICAgIHNoaWZ0KDE1Myk7ICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxODMpOyAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1VuaW9uRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJNdWx0aXBsaWNhdGl2ZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfTXVsdGlwbGljYXRpdmVFeHByKCkKICB7CiAgICB0cnlfVW5pb25FeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMzkgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgICYmIGwxICE9IDExOSAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgICYmIGwxICE9IDE1MyAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgICAmJiBsMSAhPSAxODMpICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMzk6ICAgICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgIHNoaWZ0VCgzOSk7ICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgICBzaGlmdFQoMTE5KTsgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgICAgc2hpZnRUKDE1Myk7ICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgxODMpOyAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9VbmlvbkV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1VuaW9uRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlVuaW9uRXhwciIsIGUwKTsKICAgIHBhcnNlX0ludGVyc2VjdEV4Y2VwdEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyNjAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICYmIGwxICE9IDI4NCkgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICBzaGlmdCgyNjApOyAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDI4NCk7ICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ludGVyc2VjdEV4Y2VwdEV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVW5pb25FeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1VuaW9uRXhwcigpCiAgewogICAgdHJ5X0ludGVyc2VjdEV4Y2VwdEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyNjAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICYmIGwxICE9IDI4NCkgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICBzaGlmdFQoMjYwKTsgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgyODQpOyAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfSW50ZXJzZWN0RXhjZXB0RXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW50ZXJzZWN0RXhjZXB0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkludGVyc2VjdEV4Y2VwdEV4cHIiLCBlMCk7CiAgICBwYXJzZV9JbnN0YW5jZW9mRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjIxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICAgIGlmIChsMSAhPSAxMzIgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgICAmJiBsMSAhPSAxNjQpICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgICAgc2hpZnQoMTY0KTsgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoMTMyKTsgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbnN0YW5jZW9mRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbnRlcnNlY3RFeGNlcHRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ludGVyc2VjdEV4Y2VwdEV4cHIoKQogIHsKICAgIHRyeV9JbnN0YW5jZW9mRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjIxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICAgIGlmIChsMSAhPSAxMzIgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgICAmJiBsMSAhPSAxNjQpICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgICAgc2hpZnRUKDE2NCk7ICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDEzMik7ICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0luc3RhbmNlb2ZFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbnN0YW5jZW9mRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkluc3RhbmNlb2ZFeHByIiwgZTApOwogICAgcGFyc2VfVHJlYXRFeHByKCk7CiAgICBsb29rYWhlYWQxVygyMjIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDE2MikgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICB7CiAgICAgIHNoaWZ0KDE2Mik7ICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgbG9va2FoZWFkMVcoNjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnb2YnCiAgICAgIHNoaWZ0KDIwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdvZicKICAgICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbnN0YW5jZW9mRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JbnN0YW5jZW9mRXhwcigpCiAgewogICAgdHJ5X1RyZWF0RXhwcigpOwogICAgbG9va2FoZWFkMVcoMjIyKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSAxNjIpICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgewogICAgICBzaGlmdFQoMTYyKTsgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGxvb2thaGVhZDFXKDY3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29mJwogICAgICBzaGlmdFQoMjAwKTsgICAgICAgICAgICAgICAgICAvLyAnb2YnCiAgICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHJlYXRFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHJlYXRFeHByIiwgZTApOwogICAgcGFyc2VfQ2FzdGFibGVFeHByKCk7CiAgICBsb29rYWhlYWQxVygyMjMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDI1NCkgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICB7CiAgICAgIHNoaWZ0KDI1NCk7ICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUcmVhdEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJlYXRFeHByKCkKICB7CiAgICB0cnlfQ2FzdGFibGVFeHByKCk7CiAgICBsb29rYWhlYWQxVygyMjMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDI1NCkgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICB7CiAgICAgIHNoaWZ0VCgyNTQpOyAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9DYXN0YWJsZUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDYXN0YWJsZUV4cHIiLCBlMCk7CiAgICBwYXJzZV9DYXN0RXhwcigpOwogICAgbG9va2FoZWFkMVcoMjI0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSA5MSkgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgewogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGxvb2thaGVhZDFXKDMzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TaW5nbGVUeXBlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNhc3RhYmxlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9DYXN0YWJsZUV4cHIoKQogIHsKICAgIHRyeV9DYXN0RXhwcigpOwogICAgbG9va2FoZWFkMVcoMjI0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSA5MSkgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgewogICAgICBzaGlmdFQoOTEpOyAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGxvb2thaGVhZDFXKDMzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdFQoODApOyAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1NpbmdsZVR5cGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Nhc3RFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ2FzdEV4cHIiLCBlMCk7CiAgICBwYXJzZV9VbmFyeUV4cHIoKTsKICAgIGxvb2thaGVhZDFXKDIyNik7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICBpZiAobDEgPT0gOTApICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgewogICAgICBzaGlmdCg5MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NpbmdsZVR5cGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ2FzdEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ2FzdEV4cHIoKQogIHsKICAgIHRyeV9VbmFyeUV4cHIoKTsKICAgIGxvb2thaGVhZDFXKDIyNik7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICBpZiAobDEgPT0gOTApICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgewogICAgICBzaGlmdFQoOTApOyAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfU2luZ2xlVHlwZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVW5hcnlFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVW5hcnlFeHByIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgaWYgKGwxICE9IDQxICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAmJiBsMSAhPSA0MykgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgICBzaGlmdCg0Myk7ICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICB9CiAgICB9CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYWx1ZUV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVW5hcnlFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1VuYXJ5RXhwcigpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgaWYgKGwxICE9IDQxICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAmJiBsMSAhPSA0MykgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgICBzaGlmdFQoNDMpOyAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICB9CiAgICB9CiAgICB0cnlfVmFsdWVFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYWx1ZUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYWx1ZUV4cHIiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGxvb2thaGVhZDJXKDE4OCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ2xheCcgfCAnc3RyaWN0JyB8ICd0eXBlJyB8ICd7JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA4OTM1NDogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICdsYXgnCiAgICBjYXNlIDEyNTcwNjogICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJ3N0cmljdCcKICAgIGNhc2UgMTMyMzYyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAndHlwZScKICAgIGNhc2UgMTQ0MTM4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAneycKICAgICAgcGFyc2VfVmFsaWRhdGVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIHBhcnNlX0V4dGVuc2lvbkV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9TaW1wbGVNYXBFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhbHVlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9WYWx1ZUV4cHIoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgbG9va2FoZWFkMlcoMTg4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnbGF4JyB8ICdzdHJpY3QnIHwgJ3R5cGUnIHwgJ3snCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDg5MzU0OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJ2xheCcKICAgIGNhc2UgMTI1NzA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnc3RyaWN0JwogICAgY2FzZSAxMzIzNjI6ICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICd0eXBlJwogICAgY2FzZSAxNDQxMzg6ICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICd7JwogICAgICB0cnlfVmFsaWRhdGVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIHRyeV9FeHRlbnNpb25FeHByKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X1NpbXBsZU1hcEV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NpbXBsZU1hcEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTaW1wbGVNYXBFeHByIiwgZTApOwogICAgcGFyc2VfUGF0aEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyNikgICAgICAgICAgICAgICAgIC8vICchJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoMjYpOyAgICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgIGxvb2thaGVhZDFXKDI2Mik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUGF0aEV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2ltcGxlTWFwRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TaW1wbGVNYXBFeHByKCkKICB7CiAgICB0cnlfUGF0aEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyNikgICAgICAgICAgICAgICAgIC8vICchJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDI2KTsgICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgIGxvb2thaGVhZDFXKDI2Mik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9QYXRoRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfR2VuZXJhbENvbXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHZW5lcmFsQ29tcCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDYxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBzaGlmdCg2MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICAgc2hpZnQoMjcpOyAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICBicmVhazsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgIHNoaWZ0KDU1KTsgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICBicmVhazsKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgICBzaGlmdCg1OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgIGJyZWFrOwogICAgY2FzZSA2MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgc2hpZnQoNjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoNjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJz49JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJHZW5lcmFsQ29tcCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9HZW5lcmFsQ29tcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIHNoaWZ0VCg2MSk7ICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBicmVhazsKICAgIGNhc2UgMjc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICBzaGlmdFQoMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnIT0nCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICAgc2hpZnRUKDU1KTsgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgIHNoaWZ0VCg1OSk7ICAgICAgICAgICAgICAgICAgIC8vICc8PScKICAgICAgYnJlYWs7CiAgICBjYXNlIDYyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBzaGlmdFQoNjIpOyAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoNjMpOyAgICAgICAgICAgICAgICAgICAvLyAnPj0nCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYWx1ZUNvbXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYWx1ZUNvbXAiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4OTogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgc2hpZnQoMTg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0KDE3NSk7ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnQoMTUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFsdWVDb21wIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ZhbHVlQ29tcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdFQoMTI5KTsgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIHNoaWZ0VCgxODkpOyAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgc2hpZnRUKDE4MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdFQoMTc1KTsgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIHNoaWZ0VCgxNTIpOyAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTQ4KTsgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Ob2RlQ29tcCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5vZGVDb21wIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdCgxNjYpOyAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPDwnCiAgICAgIHNoaWZ0KDU4KTsgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCg2NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPj4nCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5vZGVDb21wIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05vZGVDb21wKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIHNoaWZ0VCgxNjYpOyAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDU4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgc2hpZnRUKDU4KTsgICAgICAgICAgICAgICAgICAgLy8gJzw8JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCg2NCk7ICAgICAgICAgICAgICAgICAgIC8vICc+PicKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZhbGlkYXRlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlZhbGlkYXRlRXhwciIsIGUwKTsKICAgIHNoaWZ0KDI2Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgbG9va2FoZWFkMVcoMTc1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsYXgnIHwgJ3N0cmljdCcgfCAndHlwZScgfCAneycKICAgIGlmIChsMSAhPSAyODEpICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAyNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgICAgc2hpZnQoMjU4KTsgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1R5cGVOYW1lKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1ZhbGlkYXRpb25Nb2RlKCk7CiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWYWxpZGF0ZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVmFsaWRhdGVFeHByKCkKICB7CiAgICBzaGlmdFQoMjY2KTsgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgIGxvb2thaGVhZDFXKDE3NSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbGF4JyB8ICdzdHJpY3QnIHwgJ3R5cGUnIHwgJ3snCiAgICBpZiAobDEgIT0gMjgxKSAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgewogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICAgIHNoaWZ0VCgyNTgpOyAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICAgIHRyeV9UeXBlTmFtZSgpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRyeV9WYWxpZGF0aW9uTW9kZSgpOwogICAgICB9CiAgICB9CiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYWxpZGF0aW9uTW9kZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlZhbGlkYXRpb25Nb2RlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyNDUpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWYWxpZGF0aW9uTW9kZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9WYWxpZGF0aW9uTW9kZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnRUKDE3NCk7ICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjQ1KTsgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRXh0ZW5zaW9uRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkV4dGVuc2lvbkV4cHIiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1ByYWdtYSgpOwogICAgICBsb29rYWhlYWQxVygxMDQpOyAgICAgICAgICAgICAvLyBTXldTIHwgJygjJyB8ICcoOicgfCAneycKICAgICAgaWYgKGwxICE9IDM2KSAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNzQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMjg3KSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgIH0KICAgIHNoaWZ0KDI4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkV4dGVuc2lvbkV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRXh0ZW5zaW9uRXhwcigpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgdHJ5X1ByYWdtYSgpOwogICAgICBsb29rYWhlYWQxVygxMDQpOyAgICAgICAgICAgICAvLyBTXldTIHwgJygjJyB8ICcoOicgfCAneycKICAgICAgaWYgKGwxICE9IDM2KSAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgyODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNzQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMjg3KSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB0cnlfRXhwcigpOwogICAgfQogICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ByYWdtYSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByYWdtYSIsIGUwKTsKICAgIHNoaWZ0KDM2KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgbG9va2FoZWFkMSgyNDIpOyAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAgICAgLy8gUwogICAgewogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTCiAgICB9CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDEoMTApOyAgICAgICAgICAgICAgICAgLy8gUyB8ICcjKScKICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAgICAgLy8gUwogICAgewogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIGxvb2thaGVhZDEoMCk7ICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzCiAgICAgIHNoaWZ0KDEpOyAgICAgICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzCiAgICB9CiAgICBsb29rYWhlYWQxKDUpOyAgICAgICAgICAgICAgICAgIC8vICcjKScKICAgIHNoaWZ0KDMwKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyMpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmFnbWEiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUHJhZ21hKCkKICB7CiAgICBzaGlmdFQoMzYpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgIGxvb2thaGVhZDEoMjQyKTsgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgUyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8CiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnRUKDIxKTsgICAgICAgICAgICAgICAgICAgLy8gUwogICAgfQogICAgdHJ5X0VRTmFtZSgpOwogICAgbG9va2FoZWFkMSgxMCk7ICAgICAgICAgICAgICAgICAvLyBTIHwgJyMpJwogICAgaWYgKGwxID09IDIxKSAgICAgICAgICAgICAgICAgICAvLyBTCiAgICB7CiAgICAgIHNoaWZ0VCgyMSk7ICAgICAgICAgICAgICAgICAgIC8vIFMKICAgICAgbG9va2FoZWFkMSgwKTsgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMKICAgICAgc2hpZnRUKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gUHJhZ21hQ29udGVudHMKICAgIH0KICAgIGxvb2thaGVhZDEoNSk7ICAgICAgICAgICAgICAgICAgLy8gJyMpJwogICAgc2hpZnRUKDMwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnIyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QYXRoRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBhdGhFeHByIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgIHNoaWZ0KDQ3KTsgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICBsb29rYWhlYWQxVygyODgpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjU6ICAgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgY2FzZSAyNzogICAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICBjYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICBjYXNlIDQyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgY2FzZSA0MzogICAgICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgIGNhc2UgNTA6ICAgICAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgY2FzZSA1ODogICAgICAgICAgICAgICAgICAgICAgLy8gJzw8JwogICAgICBjYXNlIDU5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgIGNhc2UgNjE6ICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBjYXNlIDYyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgY2FzZSA2MzogICAgICAgICAgICAgICAgICAgICAgLy8gJz49JwogICAgICBjYXNlIDY0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPj4nCiAgICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYnknCiAgICAgIGNhc2UgMTAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250YWlucycKICAgICAgY2FzZSAyMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmFncmFwaHMnCiAgICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZXMnCiAgICAgIGNhc2UgMjUyOiAgICAgICAgICAgICAgICAgICAgIC8vICd0aW1lcycKICAgICAgY2FzZSAyNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICBjYXNlIDI4NDogICAgICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgY2FzZSAyODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3x8JwogICAgICBjYXNlIDI4NjogICAgICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICAgIGNhc2UgMjg3OiAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9SZWxhdGl2ZVBhdGhFeHByKCk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDQ4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgc2hpZnQoNDgpOyAgICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1JlbGF0aXZlUGF0aEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9SZWxhdGl2ZVBhdGhFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhdGhFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhdGhFeHByKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA0NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgc2hpZnRUKDQ3KTsgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgIGxvb2thaGVhZDFXKDI4OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAyNTogICAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgIGNhc2UgMjY6ICAgICAgICAgICAgICAgICAgICAgIC8vICchJwogICAgICBjYXNlIDI3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnIT0nCiAgICAgIGNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBjYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgIGNhc2UgNDI6ICAgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgY2FzZSA1MDogICAgICAgICAgICAgICAgICAgICAgLy8gJzonCiAgICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICBjYXNlIDU4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPDwnCiAgICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8PScKICAgICAgY2FzZSA2MTogICAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIGNhc2UgNjI6ICAgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBjYXNlIDYzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnPj0nCiAgICAgIGNhc2UgNjQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICc+PicKICAgICAgY2FzZSA3MDogICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgIC8vICdieScKICAgICAgY2FzZSAxMDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgICBjYXNlIDIwOTogICAgICAgICAgICAgICAgICAgICAvLyAncGFyYWdyYXBocycKICAgICAgY2FzZSAyMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgY2FzZSAyNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RpbWVzJwogICAgICBjYXNlIDI3OTogICAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIGNhc2UgMjg0OiAgICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBjYXNlIDI4NTogICAgICAgICAgICAgICAgICAgICAvLyAnfHwnCiAgICAgIGNhc2UgMjg2OiAgICAgICAgICAgICAgICAgICAgIC8vICd8fScKICAgICAgY2FzZSAyODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdHJ5X1JlbGF0aXZlUGF0aEV4cHIoKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgNDg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICBzaGlmdFQoNDgpOyAgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9SZWxhdGl2ZVBhdGhFeHByKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X1JlbGF0aXZlUGF0aEV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JlbGF0aXZlUGF0aEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJSZWxhdGl2ZVBhdGhFeHByIiwgZTApOwogICAgcGFyc2VfUG9zdGZpeEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAyNjogICAgICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgICAgbG9va2FoZWFkMlcoMjY0KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDI1ICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgICAmJiBsayAhPSAyNyAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICAgICYmIGxrICE9IDM4ICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgICAmJiBsayAhPSAzOSAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgJiYgbGsgIT0gNDEgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICYmIGxrICE9IDQyICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAmJiBsayAhPSA0MyAgICAgICAgICAgICAgICAgIC8vICctJwogICAgICAgJiYgbGsgIT0gNDcgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICYmIGxrICE9IDQ4ICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgJiYgbGsgIT0gNTAgICAgICAgICAgICAgICAgICAvLyAnOicKICAgICAgICYmIGxrICE9IDU0ICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgICAmJiBsayAhPSA1NSAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICAgJiYgbGsgIT0gNTggICAgICAgICAgICAgICAgICAvLyAnPDwnCiAgICAgICAmJiBsayAhPSA1OSAgICAgICAgICAgICAgICAgIC8vICc8PScKICAgICAgICYmIGxrICE9IDYxICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgICAmJiBsayAhPSA2MiAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICAgJiYgbGsgIT0gNjMgICAgICAgICAgICAgICAgICAvLyAnPj0nCiAgICAgICAmJiBsayAhPSA2NCAgICAgICAgICAgICAgICAgIC8vICc+PicKICAgICAgICYmIGxrICE9IDcwICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICAgICAmJiBsayAhPSA3MSAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgICYmIGxrICE9IDc2ICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgICYmIGxrICE9IDgwICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgJiYgbGsgIT0gODEgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICAgJiYgbGsgIT0gODIgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAmJiBsayAhPSA4NSAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgICAmJiBsayAhPSA4OCAgICAgICAgICAgICAgICAgIC8vICdieScKICAgICAgICYmIGxrICE9IDg5ICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgICAmJiBsayAhPSA5MCAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICAgJiYgbGsgIT0gOTEgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgICAmJiBsayAhPSA5NSAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgICAmJiBsayAhPSAxMDAgICAgICAgICAgICAgICAgIC8vICdjb250YWlucycKICAgICAgICYmIGxrICE9IDEwNiAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICAgJiYgbGsgIT0gMTEwICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICYmIGxrICE9IDExNCAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgICAmJiBsayAhPSAxMTkgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgICAmJiBsayAhPSAxMjMgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICAgJiYgbGsgIT0gMTI0ICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgICAmJiBsayAhPSAxMjcgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgICAmJiBsayAhPSAxMjkgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgICYmIGxrICE9IDEzMiAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgICYmIGxrICE9IDEzOSAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgICYmIGxrICE9IDE0OCAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICAgJiYgbGsgIT0gMTUwICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgICAmJiBsayAhPSAxNTIgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgICYmIGxrICE9IDE1MyAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgICAmJiBsayAhPSAxNjIgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgICYmIGxrICE9IDE2NCAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgICYmIGxrICE9IDE2NSAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgICAmJiBsayAhPSAxNjYgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgICYmIGxrICE9IDE3NSAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICAgJiYgbGsgIT0gMTc3ICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICAgJiYgbGsgIT0gMTgxICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgICAmJiBsayAhPSAxODMgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgICAmJiBsayAhPSAxODQgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgICAmJiBsayAhPSAxODkgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgICYmIGxrICE9IDIwMiAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgICAmJiBsayAhPSAyMDQgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgICYmIGxrICE9IDIwNSAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICAgJiYgbGsgIT0gMjA5ICAgICAgICAgICAgICAgICAvLyAncGFyYWdyYXBocycKICAgICAgICYmIGxrICE9IDIyNCAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgICYmIGxrICE9IDIyOCAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgICYmIGxrICE9IDIzNyAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgICYmIGxrICE9IDI0MSAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgICYmIGxrICE9IDI0MiAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICAgJiYgbGsgIT0gMjUyICAgICAgICAgICAgICAgICAvLyAndGltZXMnCiAgICAgICAmJiBsayAhPSAyNTMgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgICYmIGxrICE9IDI1NCAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICAgJiYgbGsgIT0gMjYwICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAmJiBsayAhPSAyNzIgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgICYmIGxrICE9IDI3NiAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgICAmJiBsayAhPSAyNzkgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgICYmIGxrICE9IDI4NCAgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgICAmJiBsayAhPSAyODUgICAgICAgICAgICAgICAgIC8vICd8fCcKICAgICAgICYmIGxrICE9IDI4NiAgICAgICAgICAgICAgICAgLy8gJ3x9JwogICAgICAgJiYgbGsgIT0gMjg3ICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgICYmIGxrICE9IDI1ODYgICAgICAgICAgICAgICAgLy8gJyEnIFdpbGRjYXJkCiAgICAgICAmJiBsayAhPSAyMzU3OCAgICAgICAgICAgICAgIC8vICchJyAnLi4nCiAgICAgICAmJiBsayAhPSAyNDA5MCAgICAgICAgICAgICAgIC8vICchJyAnLycKICAgICAgICYmIGxrICE9IDI0NjAyICAgICAgICAgICAgICAgLy8gJyEnICcvLycKICAgICAgICYmIGxrICE9IDM0MzMwKSAgICAgICAgICAgICAgLy8gJyEnICdAJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgzLCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKGwxKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgICAgICAgIHNoaWZ0VCg0Nyk7ICAgICAgICAgICAvLyAnLycKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0ODogICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgICAgICAgIHNoaWZ0VCg0OCk7ICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgc2hpZnRUKDI2KTsgICAgICAgICAgIC8vICchJwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvb2thaGVhZDFXKDI2Myk7ICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgICAgICB0cnlfU3RlcEV4cHIoKTsKICAgICAgICAgICAgbGsgPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICB9CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSgzLCBlMCwgbGspOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGsgIT0gLTEKICAgICAgICYmIGxrICE9IDQ3ICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAmJiBsayAhPSA0OCAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICYmIGxrICE9IDI1ODYgICAgICAgICAgICAgICAgLy8gJyEnIFdpbGRjYXJkCiAgICAgICAmJiBsayAhPSAyMzU3OCAgICAgICAgICAgICAgIC8vICchJyAnLi4nCiAgICAgICAmJiBsayAhPSAzNDMzMCkgICAgICAgICAgICAgIC8vICchJyAnQCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA0NzogICAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgc2hpZnQoNDcpOyAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQ4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgc2hpZnQoNDgpOyAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgyNik7ICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjYzKTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU3RlcEV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUmVsYXRpdmVQYXRoRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9SZWxhdGl2ZVBhdGhFeHByKCkKICB7CiAgICB0cnlfUG9zdGZpeEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAyNjogICAgICAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgICAgbG9va2FoZWFkMlcoMjY0KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDI1ICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgICAmJiBsayAhPSAyNyAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICAgICYmIGxrICE9IDM4ICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgICAmJiBsayAhPSAzOSAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgJiYgbGsgIT0gNDEgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICYmIGxrICE9IDQyICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAmJiBsayAhPSA0MyAgICAgICAgICAgICAgICAgIC8vICctJwogICAgICAgJiYgbGsgIT0gNDcgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICYmIGxrICE9IDQ4ICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgJiYgbGsgIT0gNTAgICAgICAgICAgICAgICAgICAvLyAnOicKICAgICAgICYmIGxrICE9IDU0ICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgICAmJiBsayAhPSA1NSAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICAgJiYgbGsgIT0gNTggICAgICAgICAgICAgICAgICAvLyAnPDwnCiAgICAgICAmJiBsayAhPSA1OSAgICAgICAgICAgICAgICAgIC8vICc8PScKICAgICAgICYmIGxrICE9IDYxICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgICAmJiBsayAhPSA2MiAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICAgJiYgbGsgIT0gNjMgICAgICAgICAgICAgICAgICAvLyAnPj0nCiAgICAgICAmJiBsayAhPSA2NCAgICAgICAgICAgICAgICAgIC8vICc+PicKICAgICAgICYmIGxrICE9IDcwICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICAgICAmJiBsayAhPSA3MSAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgICYmIGxrICE9IDc2ICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgICYmIGxrICE9IDgwICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgJiYgbGsgIT0gODEgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICAgJiYgbGsgIT0gODIgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAmJiBsayAhPSA4NSAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgICAmJiBsayAhPSA4OCAgICAgICAgICAgICAgICAgIC8vICdieScKICAgICAgICYmIGxrICE9IDg5ICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgICAmJiBsayAhPSA5MCAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICAgJiYgbGsgIT0gOTEgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgICAmJiBsayAhPSA5NSAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgICAmJiBsayAhPSAxMDAgICAgICAgICAgICAgICAgIC8vICdjb250YWlucycKICAgICAgICYmIGxrICE9IDEwNiAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICAgJiYgbGsgIT0gMTEwICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICYmIGxrICE9IDExNCAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgICAmJiBsayAhPSAxMTkgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgICAmJiBsayAhPSAxMjMgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICAgJiYgbGsgIT0gMTI0ICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgICAmJiBsayAhPSAxMjcgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgICAmJiBsayAhPSAxMjkgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgICYmIGxrICE9IDEzMiAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgICYmIGxrICE9IDEzOSAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgICYmIGxrICE9IDE0OCAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICAgJiYgbGsgIT0gMTUwICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgICAmJiBsayAhPSAxNTIgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgICYmIGxrICE9IDE1MyAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgICAmJiBsayAhPSAxNjIgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgICYmIGxrICE9IDE2NCAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgICYmIGxrICE9IDE2NSAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgICAmJiBsayAhPSAxNjYgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgICYmIGxrICE9IDE3NSAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICAgJiYgbGsgIT0gMTc3ICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICAgJiYgbGsgIT0gMTgxICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgICAmJiBsayAhPSAxODMgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgICAmJiBsayAhPSAxODQgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgICAmJiBsayAhPSAxODkgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgICYmIGxrICE9IDIwMiAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgICAmJiBsayAhPSAyMDQgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgICYmIGxrICE9IDIwNSAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICAgJiYgbGsgIT0gMjA5ICAgICAgICAgICAgICAgICAvLyAncGFyYWdyYXBocycKICAgICAgICYmIGxrICE9IDIyNCAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgICYmIGxrICE9IDIyOCAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgICYmIGxrICE9IDIzNyAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgICYmIGxrICE9IDI0MSAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgICYmIGxrICE9IDI0MiAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICAgJiYgbGsgIT0gMjUyICAgICAgICAgICAgICAgICAvLyAndGltZXMnCiAgICAgICAmJiBsayAhPSAyNTMgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgICYmIGxrICE9IDI1NCAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICAgJiYgbGsgIT0gMjYwICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAmJiBsayAhPSAyNzIgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgICYmIGxrICE9IDI3NiAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgICAmJiBsayAhPSAyNzkgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgICYmIGxrICE9IDI4NCAgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgICAmJiBsayAhPSAyODUgICAgICAgICAgICAgICAgIC8vICd8fCcKICAgICAgICYmIGxrICE9IDI4NiAgICAgICAgICAgICAgICAgLy8gJ3x9JwogICAgICAgJiYgbGsgIT0gMjg3ICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgICYmIGxrICE9IDI1ODYgICAgICAgICAgICAgICAgLy8gJyEnIFdpbGRjYXJkCiAgICAgICAmJiBsayAhPSAyMzU3OCAgICAgICAgICAgICAgIC8vICchJyAnLi4nCiAgICAgICAmJiBsayAhPSAyNDA5MCAgICAgICAgICAgICAgIC8vICchJyAnLycKICAgICAgICYmIGxrICE9IDI0NjAyICAgICAgICAgICAgICAgLy8gJyEnICcvLycKICAgICAgICYmIGxrICE9IDM0MzMwKSAgICAgICAgICAgICAgLy8gJyEnICdAJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgzLCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBzd2l0Y2ggKGwxKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgICAgICAgIHNoaWZ0VCg0Nyk7ICAgICAgICAgICAvLyAnLycKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0ODogICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgICAgICAgIHNoaWZ0VCg0OCk7ICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgc2hpZnRUKDI2KTsgICAgICAgICAgIC8vICchJwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvb2thaGVhZDFXKDI2Myk7ICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgICAgICB0cnlfU3RlcEV4cHIoKTsKICAgICAgICAgICAgbWVtb2l6ZSgzLCBlMEEsIC0xKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFBKQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgbWVtb2l6ZSgzLCBlMEEsIC0yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayAhPSAtMQogICAgICAgJiYgbGsgIT0gNDcgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICYmIGxrICE9IDQ4ICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgJiYgbGsgIT0gMjU4NiAgICAgICAgICAgICAgICAvLyAnIScgV2lsZGNhcmQKICAgICAgICYmIGxrICE9IDIzNTc4ICAgICAgICAgICAgICAgLy8gJyEnICcuLicKICAgICAgICYmIGxrICE9IDM0MzMwKSAgICAgICAgICAgICAgLy8gJyEnICdAJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQ3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICBzaGlmdFQoNDcpOyAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDg6ICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICBzaGlmdFQoNDgpOyAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgyNik7ICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjMpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X1N0ZXBFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TdGVwRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN0ZXBFeHByIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgbG9va2FoZWFkMlcoMjg3KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBsb29rYWhlYWQyVygyODYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIGxvb2thaGVhZDJXKDI4NCk7ICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgICAgbG9va2FoZWFkMlcoMjM2KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy4nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgbG9va2FoZWFkMlcoMjM4KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgY2FzZSAxNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgY2FzZSAyNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgY2FzZSAyNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgbG9va2FoZWFkMlcoMjI5KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgY2FzZSAxMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIGxvb2thaGVhZDJXKDIzNyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgNzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICBjYXNlIDc2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgY2FzZSA5NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgY2FzZSAxMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgY2FzZSAxNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgIGNhc2UgMTQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGNhc2UgMTU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGNhc2UgMTk1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDIyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgIGNhc2UgMjMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgY2FzZSAyNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgIGNhc2UgMjY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgIGNhc2UgMjczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgY2FzZSAyNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgbG9va2FoZWFkMlcoMjMzKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDEyOTM1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnIEVPRgogICAgIHx8IGxrID09IDEyOTk3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgRU9GCiAgICAgfHwgbGsgPT0gMTMwNTUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyBFT0YKICAgICB8fCBsayA9PSAxMzQ0NyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnIScKICAgICB8fCBsayA9PSAxMzUwOSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICchJwogICAgIHx8IGxrID09IDEzNTY3ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyEnCiAgICAgfHwgbGsgPT0gMTM5NTkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJyE9JwogICAgIHx8IGxrID09IDE0MDIxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyE9JwogICAgIHx8IGxrID09IDE0MDc5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyE9JwogICAgIHx8IGxrID09IDE5NTkxICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcpJwogICAgIHx8IGxrID09IDE5NjUzICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyknCiAgICAgfHwgbGsgPT0gMTk3MTEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnKScKICAgICB8fCBsayA9PSAyMDEwMyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnKicKICAgICB8fCBsayA9PSAyMDE2NSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcqJwogICAgIHx8IGxrID09IDIwMjIzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyonCiAgICAgfHwgbGsgPT0gMjExMjcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJysnCiAgICAgfHwgbGsgPT0gMjExODkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnKycKICAgICB8fCBsayA9PSAyMTI0NyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcrJwogICAgIHx8IGxrID09IDIxNjM5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcsJwogICAgIHx8IGxrID09IDIxNzAxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJywnCiAgICAgfHwgbGsgPT0gMjE3NTkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLCcKICAgICB8fCBsayA9PSAyMjE1MSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLScKICAgICB8fCBsayA9PSAyMjIxMyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICctJwogICAgIHx8IGxrID09IDIyMjcxICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy0nCiAgICAgfHwgbGsgPT0gMjQxOTkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJy8nCiAgICAgfHwgbGsgPT0gMjQyNjEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnLycKICAgICB8fCBsayA9PSAyNDMxOSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcvJwogICAgIHx8IGxrID09IDI0NzExICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcvLycKICAgICB8fCBsayA9PSAyNDc3MyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcvLycKICAgICB8fCBsayA9PSAyNDgzMSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcvLycKICAgICB8fCBsayA9PSAyNTczNSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnOicKICAgICB8fCBsayA9PSAyNTc5NyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc6JwogICAgIHx8IGxrID09IDI1ODU1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzonCiAgICAgfHwgbGsgPT0gMjc3ODMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzsnCiAgICAgfHwgbGsgPT0gMjc4NDUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnOycKICAgICB8fCBsayA9PSAyNzkwMyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc7JwogICAgIHx8IGxrID09IDI4Mjk1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc8JwogICAgIHx8IGxrID09IDI4MzU3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzwnCiAgICAgfHwgbGsgPT0gMjg0MTUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPCcKICAgICB8fCBsayA9PSAyOTgzMSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPDwnCiAgICAgfHwgbGsgPT0gMjk4OTMgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPDwnCiAgICAgfHwgbGsgPT0gMjk5NTEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPDwnCiAgICAgfHwgbGsgPT0gMzAzNDMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzw9JwogICAgIHx8IGxrID09IDMwNDA1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzw9JwogICAgIHx8IGxrID09IDMwNDYzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzw9JwogICAgIHx8IGxrID09IDMxMzY3ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc9JwogICAgIHx8IGxrID09IDMxNDI5ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJz0nCiAgICAgfHwgbGsgPT0gMzE0ODcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPScKICAgICB8fCBsayA9PSAzMTg3OSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPicKICAgICB8fCBsayA9PSAzMTk0MSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc+JwogICAgIHx8IGxrID09IDMxOTk5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJz4nCiAgICAgfHwgbGsgPT0gMzIzOTEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJz49JwogICAgIHx8IGxrID09IDMyNDUzICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJz49JwogICAgIHx8IGxrID09IDMyNTExICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJz49JwogICAgIHx8IGxrID09IDMyOTAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc+PicKICAgICB8fCBsayA9PSAzMjk2NSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc+PicKICAgICB8fCBsayA9PSAzMzAyMyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc+PicKICAgICB8fCBsayA9PSAzNTQ2MyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnWycKICAgICB8fCBsayA9PSAzNTUyNSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdbJwogICAgIHx8IGxrID09IDM1NTgzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ1snCiAgICAgfHwgbGsgPT0gMzU5NzUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ10nCiAgICAgfHwgbGsgPT0gMzYwMzcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnXScKICAgICB8fCBsayA9PSAzNjA5NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICddJwogICAgIHx8IGxrID09IDM2NDM1ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY0NzQgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY0ODcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2FmdGVyJwogICAgIHx8IGxrID09IDM2NTM5ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY1NDkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY1NzIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY2MDcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzg5OTUgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhbmQnCiAgICAgfHwgbGsgPT0gMzkwMzQgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYW5kJwogICAgIHx8IGxrID09IDM5MDQ3ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdhbmQnCiAgICAgfHwgbGsgPT0gMzkwOTkgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhbmQnCiAgICAgfHwgbGsgPT0gMzkxMDkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYW5kJwogICAgIHx8IGxrID09IDM5MTMyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FuZCcKICAgICB8fCBsayA9PSAzOTE2NyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhbmQnCiAgICAgfHwgbGsgPT0gNDEwNDMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhcycKICAgICB8fCBsayA9PSA0MTA4MiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhcycKICAgICB8fCBsayA9PSA0MTA5NSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYXMnCiAgICAgfHwgbGsgPT0gNDExNDcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhcycKICAgICB8fCBsayA9PSA0MTE1NyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhcycKICAgICB8fCBsayA9PSA0MTE4MCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhcycKICAgICB8fCBsayA9PSA0MTIxNSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhcycKICAgICB8fCBsayA9PSA0MTU1NSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTU5NCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE2MDcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTY1OSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTY2OSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE2OTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNzI3ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjA2NyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2F0JwogICAgIHx8IGxrID09IDQyMTA2ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2F0JwogICAgIHx8IGxrID09IDQyMTE5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdhdCcKICAgICB8fCBsayA9PSA0MjE3MSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2F0JwogICAgIHx8IGxrID09IDQyMTgxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2F0JwogICAgIHx8IGxrID09IDQyMjA0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2F0JwogICAgIHx8IGxrID09IDQyMjM5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2F0JwogICAgIHx8IGxrID09IDQzNjAzICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNjQyICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzY1NSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNzA3ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNzE3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0Mzc0MCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM3NzUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ1MTkxICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdieScKICAgICB8fCBsayA9PSA0NTI1MyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdieScKICAgICB8fCBsayA9PSA0NTMxMSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdieScKICAgICB8fCBsayA9PSA0NTY1MSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU2OTAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2FzZScKICAgICB8fCBsayA9PSA0NTcwMyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTc1NSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU3NjUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTc4OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjYXNlJwogICAgIHx8IGxrID09IDQ1ODIzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYxNjMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjYXN0JwogICAgIHx8IGxrID09IDQ2MjAyICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYyMTUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYyNjcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjYXN0JwogICAgIHx8IGxrID09IDQ2Mjc3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYzMDAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NjMzNSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjYXN0JwogICAgIHx8IGxrID09IDQ2Njc1ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY3MTQgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY3MjcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ2Nzc5ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY3ODkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY4MTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY4NDcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDg3MjMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg3NjIgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4Nzc1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg4MjcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg4MzcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4ODYwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODg5NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNTEzMzUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2NvbnRhaW5zJwogICAgIHx8IGxrID09IDUxMzk3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2NvbnRhaW5zJwogICAgIHx8IGxrID09IDUxNDU1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2NvbnRhaW5zJwogICAgIHx8IGxrID09IDU0MzU1ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQzOTQgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ0MDcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2NvdW50JwogICAgIHx8IGxrID09IDU0NDU5ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ0NjkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ0OTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ1MjcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTY0MDMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2NDQyICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY0NTUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY1MDcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2NTE3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY1NDAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjU3NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU4NDUxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1ODQ5MCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NTAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NTU1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1ODU2NSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NTg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTg2MjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTAxMSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RpdicKICAgICB8fCBsayA9PSA2MTA1MCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkaXYnCiAgICAgfHwgbGsgPT0gNjEwNjMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2RpdicKICAgICB8fCBsayA9PSA2MTExNSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RpdicKICAgICB8fCBsayA9PSA2MTEyNSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdkaXYnCiAgICAgfHwgbGsgPT0gNjExNDggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGl2JwogICAgIHx8IGxrID09IDYxMTgzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2RpdicKICAgICB8fCBsayA9PSA2MzA1OSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMwOTggICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZWxzZScKICAgICB8fCBsayA9PSA2MzExMSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzE2MyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMxNzMgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzE5NiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdlbHNlJwogICAgIHx8IGxrID09IDYzMjMxICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM1NzEgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzYxMCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzYyMyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjM2NzUgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzY4NSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzcwOCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdlbXB0eScKICAgICB8fCBsayA9PSA2Mzc0MyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbXB0eScKICAgICB8fCBsayA9PSA2NTEwNyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VuZCcKICAgICB8fCBsayA9PSA2NTE0NiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbmQnCiAgICAgfHwgbGsgPT0gNjUxNTkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2VuZCcKICAgICB8fCBsayA9PSA2NTIxMSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VuZCcKICAgICB8fCBsayA9PSA2NTIyMSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdlbmQnCiAgICAgfHwgbGsgPT0gNjUyNDQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZW5kJwogICAgIHx8IGxrID09IDY1Mjc5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2VuZCcKICAgICB8fCBsayA9PSA2NjEzMSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VxJwogICAgIHx8IGxrID09IDY2MTcwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VxJwogICAgIHx8IGxrID09IDY2MTgzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdlcScKICAgICB8fCBsayA9PSA2NjIzNSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VxJwogICAgIHx8IGxrID09IDY2MjQ1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VxJwogICAgIHx8IGxrID09IDY2MjY4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VxJwogICAgIHx8IGxrID09IDY2MzAzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2VxJwogICAgIHx8IGxrID09IDY3NjY3ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NzA2ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzcxOSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NzcxICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NzgxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzgwNCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc4MzkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDcxMjUxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZm9yJwogICAgIHx8IGxrID09IDcxMjkwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZvcicKICAgICB8fCBsayA9PSA3MTMwMyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZm9yJwogICAgIHx8IGxrID09IDcxMzU1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZm9yJwogICAgIHx8IGxrID09IDcxMzY1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ZvcicKICAgICB8fCBsayA9PSA3MTM4OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmb3InCiAgICAgfHwgbGsgPT0gNzE0MjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZm9yJwogICAgIHx8IGxrID09IDc1ODU5ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU4OTggICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU5MTEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2dlJwogICAgIHx8IGxrID09IDc1OTYzICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU5NzMgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU5OTYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzYwMzEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY4ODMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdncm91cCcKICAgICB8fCBsayA9PSA3NjkyMiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdncm91cCcKICAgICB8fCBsayA9PSA3NjkzNSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY5ODcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdncm91cCcKICAgICB8fCBsayA9PSA3Njk5NyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdncm91cCcKICAgICB8fCBsayA9PSA3NzAyMCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdncm91cCcKICAgICB8fCBsayA9PSA3NzA1NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdncm91cCcKICAgICB8fCBsayA9PSA3NzkwNyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2d0JwogICAgIHx8IGxrID09IDc3OTQ2ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2d0JwogICAgIHx8IGxrID09IDc3OTU5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdndCcKICAgICB8fCBsayA9PSA3ODAxMSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2d0JwogICAgIHx8IGxrID09IDc4MDIxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2d0JwogICAgIHx8IGxrID09IDc4MDQ0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2d0JwogICAgIHx8IGxrID09IDc4MDc5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2d0JwogICAgIHx8IGxrID09IDc4NDE5ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaWRpdicKICAgICB8fCBsayA9PSA3ODQ1OCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpZGl2JwogICAgIHx8IGxrID09IDc4NDcxICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpZGl2JwogICAgIHx8IGxrID09IDc4NTIzICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaWRpdicKICAgICB8fCBsayA9PSA3ODUzMyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdpZGl2JwogICAgIHx8IGxrID09IDc4NTU2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzg1OTEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnaWRpdicKICAgICB8fCBsayA9PSA4MzAyNyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMDY2ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMDc5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzEzMSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMTQxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMTY0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMTk5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDg0MDUxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0MDkwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDEwMyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0MTU1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0MTY1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDE4OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQyMjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0NTYzICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW50bycKICAgICB8fCBsayA9PSA4NDYwMiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnRvJwogICAgIHx8IGxrID09IDg0NjE1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpbnRvJwogICAgIHx8IGxrID09IDg0NjY3ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW50bycKICAgICB8fCBsayA9PSA4NDY3NyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdpbnRvJwogICAgIHx8IGxrID09IDg0NzAwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ludG8nCiAgICAgfHwgbGsgPT0gODQ3MzUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnaW50bycKICAgICB8fCBsayA9PSA4NTA3NSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2lzJwogICAgIHx8IGxrID09IDg1MTE0ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2lzJwogICAgIHx8IGxrID09IDg1MTI3ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpcycKICAgICB8fCBsayA9PSA4NTE3OSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2lzJwogICAgIHx8IGxrID09IDg1MTg5ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2lzJwogICAgIHx8IGxrID09IDg1MjEyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2lzJwogICAgIHx8IGxrID09IDg1MjQ3ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2lzJwogICAgIHx8IGxrID09IDg5NjgzICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbGUnCiAgICAgfHwgbGsgPT0gODk3MjIgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGUnCiAgICAgfHwgbGsgPT0gODk3MzUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2xlJwogICAgIHx8IGxrID09IDg5Nzg3ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbGUnCiAgICAgfHwgbGsgPT0gODk3OTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnbGUnCiAgICAgfHwgbGsgPT0gODk4MjAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGUnCiAgICAgfHwgbGsgPT0gODk4NTUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbGUnCiAgICAgfHwgbGsgPT0gOTA3MDcgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsZXQnCiAgICAgfHwgbGsgPT0gOTA3NDYgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGV0JwogICAgIHx8IGxrID09IDkwNzU5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdsZXQnCiAgICAgfHwgbGsgPT0gOTA4MTEgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsZXQnCiAgICAgfHwgbGsgPT0gOTA4MjEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnbGV0JwogICAgIHx8IGxrID09IDkwODQ0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xldCcKICAgICB8fCBsayA9PSA5MDg3OSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdsZXQnCiAgICAgfHwgbGsgPT0gOTI3NTUgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsdCcKICAgICB8fCBsayA9PSA5Mjc5NCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsdCcKICAgICB8fCBsayA9PSA5MjgwNyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbHQnCiAgICAgfHwgbGsgPT0gOTI4NTkgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsdCcKICAgICB8fCBsayA9PSA5Mjg2OSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsdCcKICAgICB8fCBsayA9PSA5Mjg5MiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdsdCcKICAgICB8fCBsayA9PSA5MjkyNyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdsdCcKICAgICB8fCBsayA9PSA5Mzc3OSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ21vZCcKICAgICB8fCBsayA9PSA5MzgxOCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdtb2QnCiAgICAgfHwgbGsgPT0gOTM4MzEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ21vZCcKICAgICB8fCBsayA9PSA5Mzg4MyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ21vZCcKICAgICB8fCBsayA9PSA5Mzg5MyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdtb2QnCiAgICAgfHwgbGsgPT0gOTM5MTYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbW9kJwogICAgIHx8IGxrID09IDkzOTUxICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ21vZCcKICAgICB8fCBsayA9PSA5NDI5MSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDMzMCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQzNDMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDM5NSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDQwNSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQ0MjggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0NDYzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5Njg1MSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ25lJwogICAgIHx8IGxrID09IDk2ODkwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25lJwogICAgIHx8IGxrID09IDk2OTAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICduZScKICAgICB8fCBsayA9PSA5Njk1NSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25lJwogICAgIHx8IGxrID09IDk2OTY1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ25lJwogICAgIHx8IGxrID09IDk2OTg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25lJwogICAgIHx8IGxrID09IDk3MDIzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ25lJwogICAgIHx8IGxrID09IDEwMzUwNyAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb25seScKICAgICB8fCBsayA9PSAxMDM1NDYgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvbmx5JwogICAgIHx8IGxrID09IDEwMzU1OSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdvbmx5JwogICAgIHx8IGxrID09IDEwMzYxMSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb25seScKICAgICB8fCBsayA9PSAxMDM2MjEgICAgICAgICAgICAgICAgLy8gJ251bGwnICdvbmx5JwogICAgIHx8IGxrID09IDEwMzY0NCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzNjc5ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnb25seScKICAgICB8fCBsayA9PSAxMDQ1MzEgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29yJwogICAgIHx8IGxrID09IDEwNDU3MCAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29yJwogICAgIHx8IGxrID09IDEwNDU4MyAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdvcicKICAgICB8fCBsayA9PSAxMDQ2MzUgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yJwogICAgIHx8IGxrID09IDEwNDY0NSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ29yJwogICAgIHx8IGxrID09IDEwNDY2OCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yJwogICAgIHx8IGxrID09IDEwNDcwMyAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ29yJwogICAgIHx8IGxrID09IDEwNTA0MyAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MDgyICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MDk1ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ29yZGVyJwogICAgIHx8IGxrID09IDEwNTE0NyAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MTU3ICAgICAgICAgICAgICAgIC8vICdudWxsJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MTgwICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MjE1ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA3MTQzICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3BhcmFncmFwaHMnCiAgICAgfHwgbGsgPT0gMTA3MjA1ICAgICAgICAgICAgICAgIC8vICdudWxsJyAncGFyYWdyYXBocycKICAgICB8fCBsayA9PSAxMDcyNjMgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdwYXJhZ3JhcGhzJwogICAgIHx8IGxrID09IDExNDc3MSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDgxMCAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTQ4MjMgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDg3NSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDg4NSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTQ5MDggICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE0OTQzICAgICAgICAgICAgICAgIC8vICd0cnVlJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNjgxOSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjg1OCAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTY4NzEgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjkyMyAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjkzMyAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTY5NTYgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2OTkxICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDEyMTQ3OSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzZW50ZW5jZXMnCiAgICAgfHwgbGsgPT0gMTIxNTQxICAgICAgICAgICAgICAgIC8vICdudWxsJyAnc2VudGVuY2VzJwogICAgIHx8IGxrID09IDEyMTU5OSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3NlbnRlbmNlcycKICAgICB8fCBsayA9PSAxMjM0NzUgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM1MTQgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzNTI3ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM1NzkgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM1ODkgICAgICAgICAgICAgICAgLy8gJ251bGwnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzNjEyICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMzY0NyAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM5ODcgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDAyNiAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDAzOSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzdGFydCcKICAgICB8fCBsayA9PSAxMjQwOTEgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDEwMSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDEyNCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDE1OSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyOTE1OSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd0aW1lcycKICAgICB8fCBsayA9PSAxMjkyMjEgICAgICAgICAgICAgICAgLy8gJ251bGwnICd0aW1lcycKICAgICB8fCBsayA9PSAxMjkyNzkgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd0aW1lcycKICAgICB8fCBsayA9PSAxMjk2MTkgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RvJwogICAgIHx8IGxrID09IDEyOTY1OCAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3RvJwogICAgIHx8IGxrID09IDEyOTY3MSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd0bycKICAgICB8fCBsayA9PSAxMjk3MjMgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RvJwogICAgIHx8IGxrID09IDEyOTczMyAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3RvJwogICAgIHx8IGxrID09IDEyOTc1NiAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3RvJwogICAgIHx8IGxrID09IDEyOTc5MSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3RvJwogICAgIHx8IGxrID09IDEzMDEzMSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwMTcwICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwMTgzICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3RyZWF0JwogICAgIHx8IGxrID09IDEzMDIzNSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwMjQ1ICAgICAgICAgICAgICAgIC8vICdudWxsJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwMjY4ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwMzAzICAgICAgICAgICAgICAgIC8vICd0cnVlJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMzMjAzICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMyNDIgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMyNTUgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMzMzA3ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMzMTcgICAgICAgICAgICAgICAgLy8gJ251bGwnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMzNDAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMzNzUgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzkzNDcgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTM4NiAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTM5OSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk0NTEgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTQ2MSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTQ4NCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTUxOSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3doZXJlJwogICAgIHx8IGxrID09IDE0MTM5NSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDE0MzQgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd3aXRoJwogICAgIHx8IGxrID09IDE0MTQ0NyAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd3aXRoJwogICAgIHx8IGxrID09IDE0MTQ5OSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDE1MDkgICAgICAgICAgICAgICAgLy8gJ251bGwnICd3aXRoJwogICAgIHx8IGxrID09IDE0MTUzMiAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQxNTY3ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDI5ODMgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnd29yZHMnCiAgICAgfHwgbGsgPT0gMTQzMDQ1ICAgICAgICAgICAgICAgIC8vICdudWxsJyAnd29yZHMnCiAgICAgfHwgbGsgPT0gMTQzMTAzICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd29yZHMnCiAgICAgfHwgbGsgPT0gMTQ1NTQzICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3wnCiAgICAgfHwgbGsgPT0gMTQ1NjA1ICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfCcKICAgICB8fCBsayA9PSAxNDU2NjMgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8JwogICAgIHx8IGxrID09IDE0NjA1NSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd8fCcKICAgICB8fCBsayA9PSAxNDYxMTcgICAgICAgICAgICAgICAgLy8gJ251bGwnICd8fCcKICAgICB8fCBsayA9PSAxNDYxNzUgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8fCcKICAgICB8fCBsayA9PSAxNDY1NjcgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnfH0nCiAgICAgfHwgbGsgPT0gMTQ2NjI5ICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfH0nCiAgICAgfHwgbGsgPT0gMTQ2Njg3ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnfH0nCiAgICAgfHwgbGsgPT0gMTQ3MDc5ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ30nCiAgICAgfHwgbGsgPT0gMTQ3MTQxICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfScKICAgICB8fCBsayA9PSAxNDcxOTkpICAgICAgICAgICAgICAgLy8gJ3RydWUnICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDQsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X1Bvc3RmaXhFeHByKCk7CiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDQsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICBjYXNlIDYwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8PycKICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgY2FzZSAyODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3wnCiAgICBjYXNlIDMxNTU6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnIEVRTmFtZV5Ub2tlbgogICAgY2FzZSAzMTk0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgRVFOYW1lXlRva2VuCiAgICBjYXNlIDk5MTU6ICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnIE5DTmFtZV5Ub2tlbgogICAgY2FzZSA5OTQ4OiAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgTkNOYW1lXlRva2VuCiAgICBjYXNlIDE0ODU0OiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnIycKICAgIGNhc2UgMTQ5MTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnIycKICAgIGNhc2UgMTQ5MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnIycKICAgIGNhc2UgMTQ5MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnIycKICAgIGNhc2UgMTQ5MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDkyNDogICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJyAnIycKICAgIGNhc2UgMTQ5MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJyMnCiAgICBjYXNlIDE0OTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJyMnCiAgICBjYXNlIDE0OTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcjJwogICAgY2FzZSAxNDkzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXQnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTQ5MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJyMnCiAgICBjYXNlIDE0OTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJyMnCiAgICBjYXNlIDE0OTM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJyMnCiAgICBjYXNlIDE0OTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnIycKICAgIGNhc2UgMTQ5Mzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcjJwogICAgY2FzZSAxNDkzOTogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcjJwogICAgY2FzZSAxNDk0MDogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcjJwogICAgY2FzZSAxNDk0MjogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcjJwogICAgY2FzZSAxNDk0MzogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnIycKICAgIGNhc2UgMTQ5NDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcjJwogICAgY2FzZSAxNDk0NjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJyMnCiAgICBjYXNlIDE0OTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNDk1MDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJyMnCiAgICBjYXNlIDE0OTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJyMnCiAgICBjYXNlIDE0OTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJyMnCiAgICBjYXNlIDE0OTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcgJyMnCiAgICBjYXNlIDE0OTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJyMnCiAgICBjYXNlIDE0OTU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnIycKICAgIGNhc2UgMTQ5NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnIycKICAgIGNhc2UgMTQ5NjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnIycKICAgIGNhc2UgMTQ5NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JyAnIycKICAgIGNhc2UgMTQ5Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnIycKICAgIGNhc2UgMTQ5Njk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICcjJwogICAgY2FzZSAxNDk3MDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJyMnCiAgICBjYXNlIDE0OTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnIycKICAgIGNhc2UgMTQ5NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnIycKICAgIGNhc2UgMTQ5NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnIycKICAgIGNhc2UgMTQ5NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnIycKICAgIGNhc2UgMTQ5NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJyMnCiAgICBjYXNlIDE0OTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJyMnCiAgICBjYXNlIDE0OTc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJyMnCiAgICBjYXNlIDE0OTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcjJwogICAgY2FzZSAxNDk4MTogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJyMnCiAgICBjYXNlIDE0OTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJyMnCiAgICBjYXNlIDE0OTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJyMnCiAgICBjYXNlIDE0OTg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJyMnCiAgICBjYXNlIDE0OTg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcjJwogICAgY2FzZSAxNDk4NjogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNDk4NzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnIycKICAgIGNhc2UgMTQ5OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nICcjJwogICAgY2FzZSAxNDk5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJyAnIycKICAgIGNhc2UgMTQ5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJyAnIycKICAgIGNhc2UgMTUwMDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JyAnIycKICAgIGNhc2UgMTUwMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnICcjJwogICAgY2FzZSAxNTAwMjogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcjJwogICAgY2FzZSAxNTAwMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnIycKICAgIGNhc2UgMTUwMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJyAnIycKICAgIGNhc2UgMTUwMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JyAnIycKICAgIGNhc2UgMTUwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJyMnCiAgICBjYXNlIDE1MDEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScgJyMnCiAgICBjYXNlIDE1MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknICcjJwogICAgY2FzZSAxNTAxMjogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JyAnIycKICAgIGNhc2UgMTUwMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nICcjJwogICAgY2FzZSAxNTAxNDogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnICcjJwogICAgY2FzZSAxNTAxNTogICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScgJyMnCiAgICBjYXNlIDE1MDE2OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnIycKICAgIGNhc2UgMTUwMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyMnCiAgICBjYXNlIDE1MDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnICcjJwogICAgY2FzZSAxNTAyMTogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJyMnCiAgICBjYXNlIDE1MDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcjJwogICAgY2FzZSAxNTAyMzogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcjJwogICAgY2FzZSAxNTAyNTogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnIycKICAgIGNhc2UgMTUwMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcjJwogICAgY2FzZSAxNTAyOTogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcjJwogICAgY2FzZSAxNTAzMTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnIycKICAgIGNhc2UgMTUwMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJyMnCiAgICBjYXNlIDE1MDMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcjJwogICAgY2FzZSAxNTAzNTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnIycKICAgIGNhc2UgMTUwMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnIycKICAgIGNhc2UgMTUwMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnIycKICAgIGNhc2UgMTUwNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICcjJwogICAgY2FzZSAxNTA0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcjJwogICAgY2FzZSAxNTA0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyMnCiAgICBjYXNlIDE1MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcjJwogICAgY2FzZSAxNTA1MDogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJyMnCiAgICBjYXNlIDE1MDUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcjJwogICAgY2FzZSAxNTA1MjogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcjJwogICAgY2FzZSAxNTA1MzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcjJwogICAgY2FzZSAxNTA1NDogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJyMnCiAgICBjYXNlIDE1MDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJyMnCiAgICBjYXNlIDE1MDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcjJwogICAgY2FzZSAxNTA2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnIycKICAgIGNhc2UgMTUwNjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnIycKICAgIGNhc2UgMTUwNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNTA3MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnIycKICAgIGNhc2UgMTUwNzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcjJwogICAgY2FzZSAxNTA3MjogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnIycKICAgIGNhc2UgMTUwNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJyMnCiAgICBjYXNlIDE1MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcjJwogICAgY2FzZSAxNTA3NjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJyMnCiAgICBjYXNlIDE1MDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTUwNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnIycKICAgIGNhc2UgMTUwODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcgJyMnCiAgICBjYXNlIDE1MDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnIycKICAgIGNhc2UgMTUwODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcjJwogICAgY2FzZSAxNTA4ODogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJyMnCiAgICBjYXNlIDE1MDg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcjJwogICAgY2FzZSAxNTA5MDogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcjJwogICAgY2FzZSAxNTA5MzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnIycKICAgIGNhc2UgMTUwOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJyMnCiAgICBjYXNlIDE1MDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICcjJwogICAgY2FzZSAxNTA5NzogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJyMnCiAgICBjYXNlIDE1MTAxOiAgICAgICAgICAgICAgICAgICAgIC8vICd0bycgJyMnCiAgICBjYXNlIDE1MTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJyMnCiAgICBjYXNlIDE1MTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnIycKICAgIGNhc2UgMTUxMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJyMnCiAgICBjYXNlIDE1MTA1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJyMnCiAgICBjYXNlIDE1MTA2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnIycKICAgIGNhc2UgMTUxMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICcjJwogICAgY2FzZSAxNTEwODogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nICcjJwogICAgY2FzZSAxNTExMDogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnIycKICAgIGNhc2UgMTUxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnIycKICAgIGNhc2UgMTUxMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnIycKICAgIGNhc2UgMTUxMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnIycKICAgIGNhc2UgMTUxMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnIycKICAgIGNhc2UgMTUxMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICcjJwogICAgY2FzZSAxNTEyMDogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnICcjJwogICAgY2FzZSAxNTEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcjJwogICAgY2FzZSAxNTEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcgJyMnCiAgICBjYXNlIDE3OTI2OiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnKCcKICAgIGNhc2UgMTc5OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnKCcKICAgIGNhc2UgMTc5OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnKCcKICAgIGNhc2UgMTc5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnKCcKICAgIGNhc2UgMTc5OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcoJwogICAgY2FzZSAxNzk5NjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJyAnKCcKICAgIGNhc2UgMTc5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJygnCiAgICBjYXNlIDE4MDAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcycgJygnCiAgICBjYXNlIDE4MDAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcoJwogICAgY2FzZSAxODAwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXQnICcoJwogICAgY2FzZSAxODAwNDogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcoJwogICAgY2FzZSAxODAwNTogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnKCcKICAgIGNhc2UgMTgwMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnKCcKICAgIGNhc2UgMTgwMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnKCcKICAgIGNhc2UgMTgwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcoJwogICAgY2FzZSAxODAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJygnCiAgICBjYXNlIDE4MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJygnCiAgICBjYXNlIDE4MDEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJygnCiAgICBjYXNlIDE4MDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJygnCiAgICBjYXNlIDE4MDE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcoJwogICAgY2FzZSAxODAxODogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJygnCiAgICBjYXNlIDE4MDE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcoJwogICAgY2FzZSAxODAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJygnCiAgICBjYXNlIDE4MDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJygnCiAgICBjYXNlIDE4MDI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnKCcKICAgIGNhc2UgMTgwMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJygnCiAgICBjYXNlIDE4MDI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcgJygnCiAgICBjYXNlIDE4MDI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJygnCiAgICBjYXNlIDE4MDI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnKCcKICAgIGNhc2UgMTgwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcoJwogICAgY2FzZSAxODAzMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnKCcKICAgIGNhc2UgMTgwMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcoJwogICAgY2FzZSAxODAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTgwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcoJwogICAgY2FzZSAxODAzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JyAnKCcKICAgIGNhc2UgMTgwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnKCcKICAgIGNhc2UgMTgwNDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICcoJwogICAgY2FzZSAxODA0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICcoJwogICAgY2FzZSAxODA0NjogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICcoJwogICAgY2FzZSAxODA0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnKCcKICAgIGNhc2UgMTgwNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnKCcKICAgIGNhc2UgMTgwNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnKCcKICAgIGNhc2UgMTgwNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJygnCiAgICBjYXNlIDE4MDUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnKCcKICAgIGNhc2UgMTgwNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnKCcKICAgIGNhc2UgMTgwNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnKCcKICAgIGNhc2UgMTgwNTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnKCcKICAgIGNhc2UgMTgwNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJygnCiAgICBjYXNlIDE4MDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJygnCiAgICBjYXNlIDE4MDU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICcoJwogICAgY2FzZSAxODA2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScgJygnCiAgICBjYXNlIDE4MDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICcoJwogICAgY2FzZSAxODA2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcoJwogICAgY2FzZSAxODA2ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnICcoJwogICAgY2FzZSAxODA3MDogICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICcoJwogICAgY2FzZSAxODA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnICcoJwogICAgY2FzZSAxODA3MzogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicgJygnCiAgICBjYXNlIDE4MDc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICcoJwogICAgY2FzZSAxODA3NjogICAgICAgICAgICAgICAgICAgICAvLyAnaW4nICcoJwogICAgY2FzZSAxODA3NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnICcoJwogICAgY2FzZSAxODA4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnKCcKICAgIGNhc2UgMTgwODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnKCcKICAgIGNhc2UgMTgwODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJygnCiAgICBjYXNlIDE4MDg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICcoJwogICAgY2FzZSAxODA4NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycgJygnCiAgICBjYXNlIDE4MDg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycgJygnCiAgICBjYXNlIDE4MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnKCcKICAgIGNhc2UgMTgwOTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScgJygnCiAgICBjYXNlIDE4MDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JyAnKCcKICAgIGNhc2UgMTgwOTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcgJygnCiAgICBjYXNlIDE4MDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZScgJygnCiAgICBjYXNlIDE4MDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICcoJwogICAgY2FzZSAxODA5OTogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcgJygnCiAgICBjYXNlIDE4MTAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcgJygnCiAgICBjYXNlIDE4MTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnICcoJwogICAgY2FzZSAxODEwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnKCcKICAgIGNhc2UgMTgxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJygnCiAgICBjYXNlIDE4MTA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICcoJwogICAgY2FzZSAxODEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnICcoJwogICAgY2FzZSAxODExNTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcoJwogICAgY2FzZSAxODExNzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJygnCiAgICBjYXNlIDE4MTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcoJwogICAgY2FzZSAxODEyMjogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJygnCiAgICBjYXNlIDE4MTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcoJwogICAgY2FzZSAxODEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcoJwogICAgY2FzZSAxODEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcoJwogICAgY2FzZSAxODEyNjogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJygnCiAgICBjYXNlIDE4MTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJygnCiAgICBjYXNlIDE4MTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcoJwogICAgY2FzZSAxODEzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnKCcKICAgIGNhc2UgMTgxMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnKCcKICAgIGNhc2UgMTgxNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJygnCiAgICBjYXNlIDE4MTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnKCcKICAgIGNhc2UgMTgxNDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJygnCiAgICBjYXNlIDE4MTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICcoJwogICAgY2FzZSAxODE0NjogICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnKCcKICAgIGNhc2UgMTgxNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJygnCiAgICBjYXNlIDE4MTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICcoJwogICAgY2FzZSAxODE1MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnICcoJwogICAgY2FzZSAxODE1MzogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JyAnKCcKICAgIGNhc2UgMTgxNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcoJwogICAgY2FzZSAxODE1OTogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJygnCiAgICBjYXNlIDE4MTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnKCcKICAgIGNhc2UgMTgxNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJygnCiAgICBjYXNlIDE4MTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJygnCiAgICBjYXNlIDE4MTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcoJwogICAgY2FzZSAxODE3MzogICAgICAgICAgICAgICAgICAgICAvLyAndG8nICcoJwogICAgY2FzZSAxODE3NDogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnICcoJwogICAgY2FzZSAxODE3NTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJygnCiAgICBjYXNlIDE4MTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknICcoJwogICAgY2FzZSAxODE3NzogICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICcoJwogICAgY2FzZSAxODE3ODogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScgJygnCiAgICBjYXNlIDE4MTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicgJygnCiAgICBjYXNlIDE4MTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICcoJwogICAgY2FzZSAxODE4MzogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICcoJwogICAgY2FzZSAxODE4NjogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICcoJwogICAgY2FzZSAxODE4NzogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnICcoJwogICAgY2FzZSAxODE4ODogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcoJwogICAgY2FzZSAxODE4OTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJygnCiAgICBjYXNlIDE4MTkyOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScgJygnCiAgICBjYXNlIDE4MTkzOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJygnCiAgICBjYXNlIDE4MTk2OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJyAnKCcKICAgIGNhc2UgMjMxNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLicKICAgIGNhc2UgMjMyMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcuJwogICAgY2FzZSAyMzI5NTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy4nCiAgICBjYXNlIDM3NDU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhbGxvd2luZycKICAgIGNhc2UgMzc0OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbGxvd2luZycKICAgIGNhc2UgMzc1NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FsbG93aW5nJwogICAgY2FzZSAzNzU5NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FsbG93aW5nJwogICAgY2FzZSAzNzk3MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYW5jZXN0b3InCiAgICBjYXNlIDM4MDEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYW5jZXN0b3InCiAgICBjYXNlIDM4MDc1OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhbmNlc3RvcicKICAgIGNhc2UgMzgxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhbmNlc3RvcicKICAgIGNhc2UgMzg0ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDM4NTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzg1ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDM4NjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgNDAwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FwcGVuZCcKICAgIGNhc2UgNDAwNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhcHBlbmQnCiAgICBjYXNlIDQwMTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhcHBlbmQnCiAgICBjYXNlIDQwMTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXBwZW5kJwogICAgY2FzZSA0MDUzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXJyYXknCiAgICBjYXNlIDQwNTcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYXJyYXknCiAgICBjYXNlIDQyNTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQyNjE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYXR0cmlidXRlJwogICAgY2FzZSA0MjY4MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXR0cmlidXRlJwogICAgY2FzZSA0MjcxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDMwOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Jhc2UtdXJpJwogICAgY2FzZSA0MzEzMDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Jhc2UtdXJpJwogICAgY2FzZSA0MzE5NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYmFzZS11cmknCiAgICBjYXNlIDQzMjI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYmFzZS11cmknCiAgICBjYXNlIDQ0MTE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgNDQxNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgNDQyMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0NDI1MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0NDYyNzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYnJlYWsnCiAgICBjYXNlIDQ0NjY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYnJlYWsnCiAgICBjYXNlIDQ0NzMxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdicmVhaycKICAgIGNhc2UgNDQ3NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdicmVhaycKICAgIGNhc2UgNDcxODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NhdGNoJwogICAgY2FzZSA0NzIyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NhdGNoJwogICAgY2FzZSA0NzI5MTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2F0Y2gnCiAgICBjYXNlIDQ3MzI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2F0Y2gnCiAgICBjYXNlIDQ4MjExOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjaGlsZCcKICAgIGNhc2UgNDgyNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjaGlsZCcKICAgIGNhc2UgNDgzMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NoaWxkJwogICAgY2FzZSA0ODM0ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NoaWxkJwogICAgY2FzZSA0OTc0NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29tbWVudCcKICAgIGNhc2UgNDk3ODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb21tZW50JwogICAgY2FzZSA0OTg1MTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29tbWVudCcKICAgIGNhc2UgNDk4ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb21tZW50JwogICAgY2FzZSA1MDI1OTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29uc3RyYWludCcKICAgIGNhc2UgNTAyOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb25zdHJhaW50JwogICAgY2FzZSA1MDM2MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29uc3RyYWludCcKICAgIGNhc2UgNTAzOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb25zdHJhaW50JwogICAgY2FzZSA1MDc3MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MDgxMDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTA4NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTA5MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUyMzA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb250ZXh0JwogICAgY2FzZSA1MjM0NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnRleHQnCiAgICBjYXNlIDUyNDExOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb250ZXh0JwogICAgY2FzZSA1MjQ0NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnRleHQnCiAgICBjYXNlIDUyODE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb250aW51ZScKICAgIGNhc2UgNTI4NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb250aW51ZScKICAgIGNhc2UgNTI5MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbnRpbnVlJwogICAgY2FzZSA1Mjk1NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnRpbnVlJwogICAgY2FzZSA1MzMzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29weScKICAgIGNhc2UgNTMzNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb3B5JwogICAgY2FzZSA1MzQzNTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29weScKICAgIGNhc2UgNTM0Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb3B5JwogICAgY2FzZSA1Mzg0MzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1Mzg4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTM5NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTM5ODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDU0ODY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTQ5MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTQ5NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NTAwNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NTg5MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVjbGFyZScKICAgIGNhc2UgNTU5MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZWNsYXJlJwogICAgY2FzZSA1NTk5NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVjbGFyZScKICAgIGNhc2UgNTYwMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZWNsYXJlJwogICAgY2FzZSA1NjkxNTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVsZXRlJwogICAgY2FzZSA1Njk1NDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlbGV0ZScKICAgIGNhc2UgNTcwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RlbGV0ZScKICAgIGNhc2UgNTcwNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZWxldGUnCiAgICBjYXNlIDU3NDI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZXNjZW5kYW50JwogICAgY2FzZSA1NzQ2NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3NTMxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZXNjZW5kYW50JwogICAgY2FzZSA1NzU2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3OTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU3OTc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA1ODA0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA1ODA3NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNjE1MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RvY3VtZW50JwogICAgY2FzZSA2MTU2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RvY3VtZW50JwogICAgY2FzZSA2MTYyNzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYxNjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYyMDM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSA2MjA3NDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyMTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSA2MjE3MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyNTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbGVtZW50JwogICAgY2FzZSA2MjU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VsZW1lbnQnCiAgICBjYXNlIDYyNjUxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdlbGVtZW50JwogICAgY2FzZSA2MjY4NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VsZW1lbnQnCiAgICBjYXNlIDY0MDgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgNjQxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgNjQxODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2NDIyMDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2NDU5NTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZW5jb2RpbmcnCiAgICBjYXNlIDY0NjM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZW5jb2RpbmcnCiAgICBjYXNlIDY0Njk5OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdlbmNvZGluZycKICAgIGNhc2UgNjQ3MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdlbmNvZGluZycKICAgIGNhc2UgNjY2NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2V2ZXJ5JwogICAgY2FzZSA2NjY4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V2ZXJ5JwogICAgY2FzZSA2Njc0NzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXZlcnknCiAgICBjYXNlIDY2NzgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXZlcnknCiAgICBjYXNlIDY4MTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdleGl0JwogICAgY2FzZSA2ODIxODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V4aXQnCiAgICBjYXNlIDY4MjgzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdleGl0JwogICAgY2FzZSA2ODMxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2V4aXQnCiAgICBjYXNlIDY4NjkxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdleHRlcm5hbCcKICAgIGNhc2UgNjg3MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdleHRlcm5hbCcKICAgIGNhc2UgNjg3OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2V4dGVybmFsJwogICAgY2FzZSA2ODgyODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2V4dGVybmFsJwogICAgY2FzZSA2OTIwMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZmFsc2UnCiAgICBjYXNlIDY5MjQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZmFsc2UnCiAgICBjYXNlIDY5MzA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdmYWxzZScKICAgIGNhc2UgNjkzNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmYWxzZScKICAgIGNhc2UgNjk3MTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ZpcnN0JwogICAgY2FzZSA2OTc1NDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZpcnN0JwogICAgY2FzZSA2OTgxOTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZmlyc3QnCiAgICBjYXNlIDY5ODUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZmlyc3QnCiAgICBjYXNlIDcwMjI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmb2xsb3dpbmcnCiAgICBjYXNlIDcwMjY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDMzMTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDM2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZvbGxvd2luZycKICAgIGNhc2UgNzA3Mzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MDc3ODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MDg0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcwODc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcyNzg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmcm9tJwogICAgY2FzZSA3MjgyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Zyb20nCiAgICBjYXNlIDcyODkxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdmcm9tJwogICAgY2FzZSA3MjkyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Zyb20nCiAgICBjYXNlIDczMjk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmdC1vcHRpb24nCiAgICBjYXNlIDczMzM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZnQtb3B0aW9uJwogICAgY2FzZSA3MzQwMzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3MzQzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzUzNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NTM4NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NTQ1MTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc1NDg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc4OTMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpZicKICAgIGNhc2UgNzg5NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpZicKICAgIGNhc2UgNzkwMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2lmJwogICAgY2FzZSA3OTA2ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2lmJwogICAgY2FzZSA3OTQ0MzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW1wb3J0JwogICAgY2FzZSA3OTQ4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ltcG9ydCcKICAgIGNhc2UgNzk1NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ltcG9ydCcKICAgIGNhc2UgNzk1ODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbXBvcnQnCiAgICBjYXNlIDc5OTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbicKICAgIGNhc2UgNzk5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbicKICAgIGNhc2UgODAwNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2luJwogICAgY2FzZSA4MDA5MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2luJwogICAgY2FzZSA4MDQ2NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW5kZXgnCiAgICBjYXNlIDgwNTA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW5kZXgnCiAgICBjYXNlIDgwNTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbmRleCcKICAgIGNhc2UgODA2MDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbmRleCcKICAgIGNhc2UgODI1MTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2luc2VydCcKICAgIGNhc2UgODI1NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnNlcnQnCiAgICBjYXNlIDgyNjE5OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnNlcnQnCiAgICBjYXNlIDgyNjUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW5zZXJ0JwogICAgY2FzZSA4MzUzOTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW50ZWdyaXR5JwogICAgY2FzZSA4MzU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ludGVncml0eScKICAgIGNhc2UgODM2NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ludGVncml0eScKICAgIGNhc2UgODM2NzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbnRlZ3JpdHknCiAgICBjYXNlIDg1NTg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpdGVtJwogICAgY2FzZSA4NTYyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2l0ZW0nCiAgICBjYXNlIDg1NjkxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpdGVtJwogICAgY2FzZSA4NTcyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2l0ZW0nCiAgICBjYXNlIDg2MDk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdqc29uJwogICAgY2FzZSA4NjEzODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2pzb24nCiAgICBjYXNlIDg2MjAzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdqc29uJwogICAgY2FzZSA4NjIzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2pzb24nCiAgICBjYXNlIDg2NjExOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdqc29uLWl0ZW0nCiAgICBjYXNlIDg2NjUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnanNvbi1pdGVtJwogICAgY2FzZSA4NzEyMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnanNvbmlxJwogICAgY2FzZSA4NzE2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2pzb25pcScKICAgIGNhc2UgODcyMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2pzb25pcScKICAgIGNhc2UgODcyNjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdqc29uaXEnCiAgICBjYXNlIDg4NjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsYXN0JwogICAgY2FzZSA4ODY5ODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2xhc3QnCiAgICBjYXNlIDg4NzYzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsYXN0JwogICAgY2FzZSA4ODc5NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xhc3QnCiAgICBjYXNlIDg5MTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsYXgnCiAgICBjYXNlIDg5MjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGF4JwogICAgY2FzZSA4OTI3NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbGF4JwogICAgY2FzZSA4OTMwODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xheCcKICAgIGNhc2UgOTE3MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xvb3AnCiAgICBjYXNlIDkxNzcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbG9vcCcKICAgIGNhc2UgOTE4MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xvb3AnCiAgICBjYXNlIDkxODY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbG9vcCcKICAgIGNhc2UgOTQ4MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ21vZHVsZScKICAgIGNhc2UgOTQ4NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdtb2R1bGUnCiAgICBjYXNlIDk0OTA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdtb2R1bGUnCiAgICBjYXNlIDk0OTQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbW9kdWxlJwogICAgY2FzZSA5NTgyNzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NTg2NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25hbWVzcGFjZScKICAgIGNhc2UgOTU5MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25hbWVzcGFjZScKICAgIGNhc2UgOTU5NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICduYW1lc3BhY2UnCiAgICBjYXNlIDk2MzM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgOTYzNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgOTY0NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NjQ3NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5OTQxMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbm9kZScKICAgIGNhc2UgOTk0NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdub2RlJwogICAgY2FzZSA5OTUxNTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbm9kZScKICAgIGNhc2UgOTk1NDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdub2RlJwogICAgY2FzZSA5OTkyMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbm9kZXMnCiAgICBjYXNlIDk5OTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbm9kZXMnCiAgICBjYXNlIDEwMDAyNzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdub2RlcycKICAgIGNhc2UgMTAwMDYwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdub2RlcycKICAgIGNhc2UgMTAwOTQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ251bGwnCiAgICBjYXNlIDEwMDk4NjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbnVsbCcKICAgIGNhc2UgMTAxMDUxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ251bGwnCiAgICBjYXNlIDEwMTA4NDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbnVsbCcKICAgIGNhc2UgMTAxNDU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29iamVjdCcKICAgIGNhc2UgMTAxNDk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvYmplY3QnCiAgICBjYXNlIDEwMTU2MzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvYmplY3QnCiAgICBjYXNlIDEwMTU5NjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb2JqZWN0JwogICAgY2FzZSAxMDQwMTk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb3B0aW9uJwogICAgY2FzZSAxMDQwNTg6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29wdGlvbicKICAgIGNhc2UgMTA0MTIzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29wdGlvbicKICAgIGNhc2UgMTA0MTU2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdvcHRpb24nCiAgICBjYXNlIDEwNTU1NTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcmRlcmVkJwogICAgY2FzZSAxMDU1OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29yZGVyZWQnCiAgICBjYXNlIDEwNTY1OTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvcmRlcmVkJwogICAgY2FzZSAxMDU2OTI6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yZGVyZWQnCiAgICBjYXNlIDEwNjA2NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcmRlcmluZycKICAgIGNhc2UgMTA2MTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvcmRlcmluZycKICAgIGNhc2UgMTA2MTcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yZGVyaW5nJwogICAgY2FzZSAxMDYyMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yZGVyaW5nJwogICAgY2FzZSAxMDc2MDM6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncGFyZW50JwogICAgY2FzZSAxMDc2NDI6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3BhcmVudCcKICAgIGNhc2UgMTA3NzA3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3BhcmVudCcKICAgIGNhc2UgMTA3NzQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdwYXJlbnQnCiAgICBjYXNlIDExMDY3NTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdwcmVjZWRpbmcnCiAgICBjYXNlIDExMDcxNDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncHJlY2VkaW5nJwogICAgY2FzZSAxMTA3Nzk6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncHJlY2VkaW5nJwogICAgY2FzZSAxMTA4MTI6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3ByZWNlZGluZycKICAgIGNhc2UgMTExMTg3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTEyMjY6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTEyOTE6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDExMTMyNDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDExMjcyMzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAxMTI3NjI6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMjgyNzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAxMTI4NjA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMzc0NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdyZW5hbWUnCiAgICBjYXNlIDExMzc4NjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmVuYW1lJwogICAgY2FzZSAxMTM4NTE6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmVuYW1lJwogICAgY2FzZSAxMTM4ODQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3JlbmFtZScKICAgIGNhc2UgMTE0MjU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDI5ODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmVwbGFjZScKICAgIGNhc2UgMTE0MzYzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDM5NjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmVwbGFjZScKICAgIGNhc2UgMTE1MjgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JldHVybmluZycKICAgIGNhc2UgMTE1MzIyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTM4NzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTQyMDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmV0dXJuaW5nJwogICAgY2FzZSAxMTU3OTU6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTU4MzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE1ODk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE1OTMyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExNzMzMTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzY2hlbWEnCiAgICBjYXNlIDExNzM3MDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2NoZW1hJwogICAgY2FzZSAxMTc0MzU6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NoZW1hJwogICAgY2FzZSAxMTc0Njg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NjaGVtYScKICAgIGNhc2UgMTE3ODQzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDExNzg4MjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE3OTQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDExNzk4MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE4MzU1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAxMTgzOTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAxMTg0NTk6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExODQ5MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExODg2NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzY29yZScKICAgIGNhc2UgMTE4OTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzY29yZScKICAgIGNhc2UgMTE4OTcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3Njb3JlJwogICAgY2FzZSAxMTkwMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3Njb3JlJwogICAgY2FzZSAxMTkzNzk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2VsZWN0JwogICAgY2FzZSAxMTk0MTg6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NlbGVjdCcKICAgIGNhc2UgMTE5NDgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3NlbGVjdCcKICAgIGNhc2UgMTE5NTE2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzZWxlY3QnCiAgICBjYXNlIDExOTg5MTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzZWxmJwogICAgY2FzZSAxMTk5MzA6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NlbGYnCiAgICBjYXNlIDExOTk5NTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzZWxmJwogICAgY2FzZSAxMjAwMjg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NlbGYnCiAgICBjYXNlIDEyMjQ1MTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzbGlkaW5nJwogICAgY2FzZSAxMjI0OTA6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMjU1NTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzbGlkaW5nJwogICAgY2FzZSAxMjI1ODg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMjk2MzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzb21lJwogICAgY2FzZSAxMjMwMDI6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NvbWUnCiAgICBjYXNlIDEyMzA2NzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzb21lJwogICAgY2FzZSAxMjMxMDA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NvbWUnCiAgICBjYXNlIDEyNTUyMzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzdHJpY3QnCiAgICBjYXNlIDEyNTU2MjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RyaWN0JwogICAgY2FzZSAxMjU2Mjc6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RyaWN0JwogICAgY2FzZSAxMjU2NjA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N0cmljdCcKICAgIGNhc2UgMTI2NTQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMTI2NTg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDEyNzA1OTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzd2l0Y2gnCiAgICBjYXNlIDEyNzA5ODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3dpdGNoJwogICAgY2FzZSAxMjcxNjM6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3dpdGNoJwogICAgY2FzZSAxMjcxOTY6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N3aXRjaCcKICAgIGNhc2UgMTI3NTcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RleHQnCiAgICBjYXNlIDEyNzYxMDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndGV4dCcKICAgIGNhc2UgMTI3Njc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RleHQnCiAgICBjYXNlIDEyNzcwODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndGV4dCcKICAgIGNhc2UgMTMwNjQzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RydWUnCiAgICBjYXNlIDEzMDY4MjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHJ1ZScKICAgIGNhc2UgMTMwNzQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RydWUnCiAgICBjYXNlIDEzMDc4MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJ1ZScKICAgIGNhc2UgMTMxMTU1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RyeScKICAgIGNhc2UgMTMxMTk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0cnknCiAgICBjYXNlIDEzMTI1OTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0cnknCiAgICBjYXNlIDEzMTI5MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJ5JwogICAgY2FzZSAxMzE2Njc6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMTcwNjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMTc3MTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0dW1ibGluZycKICAgIGNhc2UgMTMxODA0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd0dW1ibGluZycKICAgIGNhc2UgMTMyMTc5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGUnCiAgICBjYXNlIDEzMjIxODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZScKICAgIGNhc2UgMTMyMjgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGUnCiAgICBjYXNlIDEzMjMxNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZScKICAgIGNhc2UgMTMyNjkxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEzMjczMDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMyNzk1OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEzMjgyODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTM0MjI3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Vub3JkZXJlZCcKICAgIGNhc2UgMTM0MjY2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzNDMzMTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzNDM2NDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzQ3Mzk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNDc3ODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNDg0MzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1cGRhdGluZycKICAgIGNhc2UgMTM0ODc2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd1cGRhdGluZycKICAgIGNhc2UgMTM2Mjc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzYzMTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzYzNzk6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzNjQxMjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzNjc4NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd2YWx1ZScKICAgIGNhc2UgMTM2ODI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd2YWx1ZScKICAgIGNhc2UgMTM2ODkxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZhbHVlJwogICAgY2FzZSAxMzY5MjQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3ZhbHVlJwogICAgY2FzZSAxMzcyOTk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzMzODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzQwMzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd2YXJpYWJsZScKICAgIGNhc2UgMTM3NDM2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd2YXJpYWJsZScKICAgIGNhc2UgMTM3ODExOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNzg1MDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmVyc2lvbicKICAgIGNhc2UgMTM3OTE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNzk0ODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmVyc2lvbicKICAgIGNhc2UgMTM5ODU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3doaWxlJwogICAgY2FzZSAxMzk4OTg6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3doaWxlJwogICAgY2FzZSAxMzk5NjM6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2hpbGUnCiAgICBjYXNlIDEzOTk5NjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2hpbGUnCiAgICBjYXNlIDE0Mzk1NTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd7JwogICAgY2FzZSAxNDM5Njk6ICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJ3snCiAgICBjYXNlIDE0Mzk5MjogICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJ3snCiAgICBjYXNlIDE0Mzk5NDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAneycKICAgIGNhc2UgMTQ0MDU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3snCiAgICBjYXNlIDE0NDA3ODogICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAneycKICAgIGNhc2UgMTQ0MDkyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd7JwogICAgY2FzZSAxNDQxMjE6ICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJ3snCiAgICBjYXNlIDE0NDEzNDogICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICd7JwogICAgICBwYXJzZV9Qb3N0Zml4RXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0F4aXNTdGVwKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN0ZXBFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N0ZXBFeHByKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBsb29rYWhlYWQyVygyODcpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGxvb2thaGVhZDJXKDI4Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjg0KTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJwogICAgICBsb29rYWhlYWQyVygyMzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLicgfAogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBsb29rYWhlYWQyVygyMzgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGNhc2UgNzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBsb29rYWhlYWQyVygyMjkpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICBjYXNlIDEzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgbG9va2FoZWFkMlcoMjM3KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA4NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGNhc2UgMTE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICBjYXNlIDE0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgY2FzZSAxNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICBjYXNlIDE1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgY2FzZSAxNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScKICAgIGNhc2UgMTczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICBjYXNlIDE3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgIGNhc2UgMTc5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgIGNhc2UgMTgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAxOTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICBjYXNlIDIwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgY2FzZSAyMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgY2FzZSAyMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICBjYXNlIDIwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgIGNhc2UgMjA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgY2FzZSAyMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgY2FzZSAyMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgY2FzZSAyMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICBjYXNlIDI0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgIGNhc2UgMjQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgIGNhc2UgMjUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgIGNhc2UgMjYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgIGNhc2UgMjY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgY2FzZSAyNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgIGNhc2UgMjcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBsb29rYWhlYWQyVygyMzMpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTI5MzUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgRU9GCiAgICAgfHwgbGsgPT0gMTI5OTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyBFT0YKICAgICB8fCBsayA9PSAxMzA1NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnIEVPRgogICAgIHx8IGxrID09IDEzNDQ3ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICchJwogICAgIHx8IGxrID09IDEzNTA5ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyEnCiAgICAgfHwgbGsgPT0gMTM1NjcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnIScKICAgICB8fCBsayA9PSAxMzk1OSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnIT0nCiAgICAgfHwgbGsgPT0gMTQwMjEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnIT0nCiAgICAgfHwgbGsgPT0gMTQwNzkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnIT0nCiAgICAgfHwgbGsgPT0gMTk1OTEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJyknCiAgICAgfHwgbGsgPT0gMTk2NTMgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnKScKICAgICB8fCBsayA9PSAxOTcxMSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcpJwogICAgIHx8IGxrID09IDIwMTAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcqJwogICAgIHx8IGxrID09IDIwMTY1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyonCiAgICAgfHwgbGsgPT0gMjAyMjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnKicKICAgICB8fCBsayA9PSAyMTEyNyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnKycKICAgICB8fCBsayA9PSAyMTE4OSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcrJwogICAgIHx8IGxrID09IDIxMjQ3ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJysnCiAgICAgfHwgbGsgPT0gMjE2MzkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJywnCiAgICAgfHwgbGsgPT0gMjE3MDEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnLCcKICAgICB8fCBsayA9PSAyMTc1OSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcsJwogICAgIHx8IGxrID09IDIyMTUxICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICctJwogICAgIHx8IGxrID09IDIyMjEzICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJy0nCiAgICAgfHwgbGsgPT0gMjIyNzEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLScKICAgICB8fCBsayA9PSAyNDE5OSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLycKICAgICB8fCBsayA9PSAyNDI2MSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcvJwogICAgIHx8IGxrID09IDI0MzE5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy8nCiAgICAgfHwgbGsgPT0gMjQ3MTEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJy8vJwogICAgIHx8IGxrID09IDI0NzczICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJy8vJwogICAgIHx8IGxrID09IDI0ODMxICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy8vJwogICAgIHx8IGxrID09IDI1NzM1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc6JwogICAgIHx8IGxrID09IDI1Nzk3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzonCiAgICAgfHwgbGsgPT0gMjU4NTUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnOicKICAgICB8fCBsayA9PSAyNzc4MyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnOycKICAgICB8fCBsayA9PSAyNzg0NSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc7JwogICAgIHx8IGxrID09IDI3OTAzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzsnCiAgICAgfHwgbGsgPT0gMjgyOTUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzwnCiAgICAgfHwgbGsgPT0gMjgzNTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPCcKICAgICB8fCBsayA9PSAyODQxNSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc8JwogICAgIHx8IGxrID09IDI5ODMxICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc8PCcKICAgICB8fCBsayA9PSAyOTg5MyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc8PCcKICAgICB8fCBsayA9PSAyOTk1MSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc8PCcKICAgICB8fCBsayA9PSAzMDM0MyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPD0nCiAgICAgfHwgbGsgPT0gMzA0MDUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPD0nCiAgICAgfHwgbGsgPT0gMzA0NjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPD0nCiAgICAgfHwgbGsgPT0gMzEzNjcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJz0nCiAgICAgfHwgbGsgPT0gMzE0MjkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPScKICAgICB8fCBsayA9PSAzMTQ4NyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc9JwogICAgIHx8IGxrID09IDMxODc5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc+JwogICAgIHx8IGxrID09IDMxOTQxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJz4nCiAgICAgfHwgbGsgPT0gMzE5OTkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPicKICAgICB8fCBsayA9PSAzMjM5MSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPj0nCiAgICAgfHwgbGsgPT0gMzI0NTMgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPj0nCiAgICAgfHwgbGsgPT0gMzI1MTEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPj0nCiAgICAgfHwgbGsgPT0gMzI5MDMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJz4+JwogICAgIHx8IGxrID09IDMyOTY1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJz4+JwogICAgIHx8IGxrID09IDMzMDIzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJz4+JwogICAgIHx8IGxrID09IDM1NDYzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdbJwogICAgIHx8IGxrID09IDM1NTI1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ1snCiAgICAgfHwgbGsgPT0gMzU1ODMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnWycKICAgICB8fCBsayA9PSAzNTk3NSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnXScKICAgICB8fCBsayA9PSAzNjAzNyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICddJwogICAgIHx8IGxrID09IDM2MDk1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ10nCiAgICAgfHwgbGsgPT0gMzY0MzUgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjQ3NCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjQ4NyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY1MzkgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjU0OSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjU3MiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhZnRlcicKICAgICB8fCBsayA9PSAzNjYwNyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhZnRlcicKICAgICB8fCBsayA9PSAzODk5NSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FuZCcKICAgICB8fCBsayA9PSAzOTAzNCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbmQnCiAgICAgfHwgbGsgPT0gMzkwNDcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2FuZCcKICAgICB8fCBsayA9PSAzOTA5OSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FuZCcKICAgICB8fCBsayA9PSAzOTEwOSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhbmQnCiAgICAgfHwgbGsgPT0gMzkxMzIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYW5kJwogICAgIHx8IGxrID09IDM5MTY3ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2FuZCcKICAgICB8fCBsayA9PSA0MTA0MyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FzJwogICAgIHx8IGxrID09IDQxMDgyICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FzJwogICAgIHx8IGxrID09IDQxMDk1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdhcycKICAgICB8fCBsayA9PSA0MTE0NyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FzJwogICAgIHx8IGxrID09IDQxMTU3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2FzJwogICAgIHx8IGxrID09IDQxMTgwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FzJwogICAgIHx8IGxrID09IDQxMjE1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2FzJwogICAgIHx8IGxrID09IDQxNTU1ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNTk0ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTYwNyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNjU5ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNjY5ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTY5MiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE3MjcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQyMDY3ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXQnCiAgICAgfHwgbGsgPT0gNDIxMDYgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYXQnCiAgICAgfHwgbGsgPT0gNDIxMTkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2F0JwogICAgIHx8IGxrID09IDQyMTcxICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXQnCiAgICAgfHwgbGsgPT0gNDIxODEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYXQnCiAgICAgfHwgbGsgPT0gNDIyMDQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXQnCiAgICAgfHwgbGsgPT0gNDIyMzkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYXQnCiAgICAgfHwgbGsgPT0gNDM2MDMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM2NDIgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNjU1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM3MDcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM3MTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNzQwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0Mzc3NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDUxOTEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2J5JwogICAgIHx8IGxrID09IDQ1MjUzICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2J5JwogICAgIHx8IGxrID09IDQ1MzExICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2J5JwogICAgIHx8IGxrID09IDQ1NjUxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTY5MCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjYXNlJwogICAgIHx8IGxrID09IDQ1NzAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdjYXNlJwogICAgIHx8IGxrID09IDQ1NzU1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTc2NSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjYXNlJwogICAgIHx8IGxrID09IDQ1Nzg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU4MjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY2FzZScKICAgICB8fCBsayA9PSA0NjE2MyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYyMDIgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2FzdCcKICAgICB8fCBsayA9PSA0NjIxNSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NjI2NyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYyNzcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NjMwMCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjYXN0JwogICAgIHx8IGxrID09IDQ2MzM1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDY2NzUgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NjcxNCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NjcyNyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY3NzkgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0Njc4OSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NjgxMiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0Njg0NyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0ODcyMyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODc2MiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg3NzUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODgyNyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODgzNyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg4NjAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4ODk1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA1MTMzNSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY29udGFpbnMnCiAgICAgfHwgbGsgPT0gNTEzOTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY29udGFpbnMnCiAgICAgfHwgbGsgPT0gNTE0NTUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY29udGFpbnMnCiAgICAgfHwgbGsgPT0gNTQzNTUgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb3VudCcKICAgICB8fCBsayA9PSA1NDM5NCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb3VudCcKICAgICB8fCBsayA9PSA1NDQwNyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ0NTkgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb3VudCcKICAgICB8fCBsayA9PSA1NDQ2OSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjb3VudCcKICAgICB8fCBsayA9PSA1NDQ5MiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb3VudCcKICAgICB8fCBsayA9PSA1NDUyNyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjb3VudCcKICAgICB8fCBsayA9PSA1NjQwMyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY0NDIgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjQ1NSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjUwNyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY1MTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjU0MCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2NTc1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTg0NTEgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NDkwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTg1MDMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTg1NTUgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NTY1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTg1ODggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1ODYyMyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDYxMDExICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGl2JwogICAgIHx8IGxrID09IDYxMDUwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RpdicKICAgICB8fCBsayA9PSA2MTA2MyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZGl2JwogICAgIHx8IGxrID09IDYxMTE1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGl2JwogICAgIHx8IGxrID09IDYxMTI1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2RpdicKICAgICB8fCBsayA9PSA2MTE0OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkaXYnCiAgICAgfHwgbGsgPT0gNjExODMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZGl2JwogICAgIHx8IGxrID09IDYzMDU5ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzA5OCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbHNlJwogICAgIHx8IGxrID09IDYzMTExICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdlbHNlJwogICAgIHx8IGxrID09IDYzMTYzICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzE3MyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdlbHNlJwogICAgIHx8IGxrID09IDYzMTk2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMyMzEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzU3MSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNjEwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNjIzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzY3NSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNjg1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNzA4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNzQzICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2VtcHR5JwogICAgIHx8IGxrID09IDY1MTA3ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZW5kJwogICAgIHx8IGxrID09IDY1MTQ2ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VuZCcKICAgICB8fCBsayA9PSA2NTE1OSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZW5kJwogICAgIHx8IGxrID09IDY1MjExICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZW5kJwogICAgIHx8IGxrID09IDY1MjIxICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VuZCcKICAgICB8fCBsayA9PSA2NTI0NCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdlbmQnCiAgICAgfHwgbGsgPT0gNjUyNzkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZW5kJwogICAgIHx8IGxrID09IDY2MTMxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZXEnCiAgICAgfHwgbGsgPT0gNjYxNzAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXEnCiAgICAgfHwgbGsgPT0gNjYxODMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2VxJwogICAgIHx8IGxrID09IDY2MjM1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXEnCiAgICAgfHwgbGsgPT0gNjYyNDUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZXEnCiAgICAgfHwgbGsgPT0gNjYyNjggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXEnCiAgICAgfHwgbGsgPT0gNjYzMDMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZXEnCiAgICAgfHwgbGsgPT0gNjc2NjcgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc3MDYgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NzE5ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc3NzEgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc3ODEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3ODA0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzgzOSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNzEyNTEgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmb3InCiAgICAgfHwgbGsgPT0gNzEyOTAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZm9yJwogICAgIHx8IGxrID09IDcxMzAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdmb3InCiAgICAgfHwgbGsgPT0gNzEzNTUgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdmb3InCiAgICAgfHwgbGsgPT0gNzEzNjUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZm9yJwogICAgIHx8IGxrID09IDcxMzg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZvcicKICAgICB8fCBsayA9PSA3MTQyMyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdmb3InCiAgICAgfHwgbGsgPT0gNzU4NTkgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdnZScKICAgICB8fCBsayA9PSA3NTg5OCAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdnZScKICAgICB8fCBsayA9PSA3NTkxMSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU5NjMgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdnZScKICAgICB8fCBsayA9PSA3NTk3MyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdnZScKICAgICB8fCBsayA9PSA3NTk5NiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdnZScKICAgICB8fCBsayA9PSA3NjAzMSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdnZScKICAgICB8fCBsayA9PSA3Njg4MyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc2OTIyICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2dyb3VwJwogICAgIHx8IGxrID09IDc2OTM1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdncm91cCcKICAgICB8fCBsayA9PSA3Njk4NyAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc2OTk3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3MDIwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3MDU1ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3OTA3ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzc5NDYgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzc5NTkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2d0JwogICAgIHx8IGxrID09IDc4MDExICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzgwMjEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzgwNDQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzgwNzkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzg0MTkgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpZGl2JwogICAgIHx8IGxrID09IDc4NDU4ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzg0NzEgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzg1MjMgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpZGl2JwogICAgIHx8IGxrID09IDc4NTMzICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzg1NTYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaWRpdicKICAgICB8fCBsayA9PSA3ODU5MSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpZGl2JwogICAgIHx8IGxrID09IDgzMDI3ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMwNjYgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMwNzkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMTMxICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMxNDEgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMxNjQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMxOTkgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODQwNTEgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQwOTAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0MTAzICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQxNTUgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQxNjUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0MTg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDIyMyAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ1NjMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbnRvJwogICAgIHx8IGxrID09IDg0NjAyICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ludG8nCiAgICAgfHwgbGsgPT0gODQ2MTUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2ludG8nCiAgICAgfHwgbGsgPT0gODQ2NjcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnRvJwogICAgIHx8IGxrID09IDg0Njc3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ludG8nCiAgICAgfHwgbGsgPT0gODQ3MDAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW50bycKICAgICB8fCBsayA9PSA4NDczNSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnRvJwogICAgIHx8IGxrID09IDg1MDc1ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaXMnCiAgICAgfHwgbGsgPT0gODUxMTQgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaXMnCiAgICAgfHwgbGsgPT0gODUxMjcgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2lzJwogICAgIHx8IGxrID09IDg1MTc5ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaXMnCiAgICAgfHwgbGsgPT0gODUxODkgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaXMnCiAgICAgfHwgbGsgPT0gODUyMTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaXMnCiAgICAgfHwgbGsgPT0gODUyNDcgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnaXMnCiAgICAgfHwgbGsgPT0gODk2ODMgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsZScKICAgICB8fCBsayA9PSA4OTcyMiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsZScKICAgICB8fCBsayA9PSA4OTczNSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbGUnCiAgICAgfHwgbGsgPT0gODk3ODcgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsZScKICAgICB8fCBsayA9PSA4OTc5NyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsZScKICAgICB8fCBsayA9PSA4OTgyMCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdsZScKICAgICB8fCBsayA9PSA4OTg1NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdsZScKICAgICB8fCBsayA9PSA5MDcwNyAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xldCcKICAgICB8fCBsayA9PSA5MDc0NiAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsZXQnCiAgICAgfHwgbGsgPT0gOTA3NTkgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2xldCcKICAgICB8fCBsayA9PSA5MDgxMSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xldCcKICAgICB8fCBsayA9PSA5MDgyMSAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsZXQnCiAgICAgfHwgbGsgPT0gOTA4NDQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGV0JwogICAgIHx8IGxrID09IDkwODc5ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2xldCcKICAgICB8fCBsayA9PSA5Mjc1NSAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2x0JwogICAgIHx8IGxrID09IDkyNzk0ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2x0JwogICAgIHx8IGxrID09IDkyODA3ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdsdCcKICAgICB8fCBsayA9PSA5Mjg1OSAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2x0JwogICAgIHx8IGxrID09IDkyODY5ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2x0JwogICAgIHx8IGxrID09IDkyODkyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2x0JwogICAgIHx8IGxrID09IDkyOTI3ICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2x0JwogICAgIHx8IGxrID09IDkzNzc5ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbW9kJwogICAgIHx8IGxrID09IDkzODE4ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ21vZCcKICAgICB8fCBsayA9PSA5MzgzMSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbW9kJwogICAgIHx8IGxrID09IDkzODgzICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbW9kJwogICAgIHx8IGxrID09IDkzODkzICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ21vZCcKICAgICB8fCBsayA9PSA5MzkxNiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdtb2QnCiAgICAgfHwgbGsgPT0gOTM5NTEgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbW9kJwogICAgIHx8IGxrID09IDk0MjkxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0MzMwICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDM0MyAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0Mzk1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0NDA1ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDQyOCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQ0NjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk2ODUxICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbmUnCiAgICAgfHwgbGsgPT0gOTY4OTAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbmUnCiAgICAgfHwgbGsgPT0gOTY5MDMgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ25lJwogICAgIHx8IGxrID09IDk2OTU1ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbmUnCiAgICAgfHwgbGsgPT0gOTY5NjUgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnbmUnCiAgICAgfHwgbGsgPT0gOTY5ODggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbmUnCiAgICAgfHwgbGsgPT0gOTcwMjMgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbmUnCiAgICAgfHwgbGsgPT0gMTAzNTA3ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvbmx5JwogICAgIHx8IGxrID09IDEwMzU0NiAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzNTU5ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzNjExICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvbmx5JwogICAgIHx8IGxrID09IDEwMzYyMSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzNjQ0ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb25seScKICAgICB8fCBsayA9PSAxMDM2NzkgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdvbmx5JwogICAgIHx8IGxrID09IDEwNDUzMSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb3InCiAgICAgfHwgbGsgPT0gMTA0NTcwICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3InCiAgICAgfHwgbGsgPT0gMTA0NTgzICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ29yJwogICAgIHx8IGxrID09IDEwNDYzNSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3InCiAgICAgfHwgbGsgPT0gMTA0NjQ1ICAgICAgICAgICAgICAgIC8vICdudWxsJyAnb3InCiAgICAgfHwgbGsgPT0gMTA0NjY4ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3InCiAgICAgfHwgbGsgPT0gMTA0NzAzICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnb3InCiAgICAgfHwgbGsgPT0gMTA1MDQzICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUwODIgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUwOTUgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MTQ3ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUxNTcgICAgICAgICAgICAgICAgLy8gJ251bGwnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUxODAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUyMTUgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDcxNDMgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAncGFyYWdyYXBocycKICAgICB8fCBsayA9PSAxMDcyMDUgICAgICAgICAgICAgICAgLy8gJ251bGwnICdwYXJhZ3JhcGhzJwogICAgIHx8IGxrID09IDEwNzI2MyAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3BhcmFncmFwaHMnCiAgICAgfHwgbGsgPT0gMTE0NzcxICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE0ODEwICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDgyMyAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE0ODc1ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE0ODg1ICAgICAgICAgICAgICAgIC8vICdudWxsJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDkwOCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTQ5NDMgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE2ODE5ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2ODU4ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjg3MSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2OTIzICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2OTMzICAgICAgICAgICAgICAgIC8vICdudWxsJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjk1NiAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTY5OTEgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTIxNDc5ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3NlbnRlbmNlcycKICAgICB8fCBsayA9PSAxMjE1NDEgICAgICAgICAgICAgICAgLy8gJ251bGwnICdzZW50ZW5jZXMnCiAgICAgfHwgbGsgPT0gMTIxNTk5ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnc2VudGVuY2VzJwogICAgIHx8IGxrID09IDEyMzQ3NSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMzUxNCAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM1MjcgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMzU3OSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMzU4OSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM2MTIgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzNjQ3ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMzk4NyAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MDI2ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MDM5ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDA5MSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MTAxICAgICAgICAgICAgICAgIC8vICdudWxsJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MTI0ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MTU5ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI5MTU5ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3RpbWVzJwogICAgIHx8IGxrID09IDEyOTIyMSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3RpbWVzJwogICAgIHx8IGxrID09IDEyOTI3OSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3RpbWVzJwogICAgIHx8IGxrID09IDEyOTYxOSAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NjU4ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NjcxICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3RvJwogICAgIHx8IGxrID09IDEyOTcyMyAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NzMzICAgICAgICAgICAgICAgIC8vICdudWxsJyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NzU2ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NzkxICAgICAgICAgICAgICAgIC8vICd0cnVlJyAndG8nCiAgICAgfHwgbGsgPT0gMTMwMTMxICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzAxNzAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzAxODMgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwMjM1ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzAyNDUgICAgICAgICAgICAgICAgLy8gJ251bGwnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzAyNjggICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzAzMDMgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzMyMDMgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzI0MiAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzI1NSAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMzMDcgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzMxNyAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzM0MCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzM3NSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzOTM0NyAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5Mzg2ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5Mzk5ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTQ1MSAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5NDYxICAgICAgICAgICAgICAgIC8vICdudWxsJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5NDg0ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5NTE5ICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTQxMzk1ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd3aXRoJwogICAgIHx8IGxrID09IDE0MTQzNCAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQxNDQ3ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQxNDk5ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd3aXRoJwogICAgIHx8IGxrID09IDE0MTUwOSAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQxNTMyICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDE1NjcgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd3aXRoJwogICAgIHx8IGxrID09IDE0Mjk4MyAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd3b3JkcycKICAgICB8fCBsayA9PSAxNDMwNDUgICAgICAgICAgICAgICAgLy8gJ251bGwnICd3b3JkcycKICAgICB8fCBsayA9PSAxNDMxMDMgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd3b3JkcycKICAgICB8fCBsayA9PSAxNDU1NDMgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnfCcKICAgICB8fCBsayA9PSAxNDU2MDUgICAgICAgICAgICAgICAgLy8gJ251bGwnICd8JwogICAgIHx8IGxrID09IDE0NTY2MyAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3wnCiAgICAgfHwgbGsgPT0gMTQ2MDU1ICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3x8JwogICAgIHx8IGxrID09IDE0NjExNyAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3x8JwogICAgIHx8IGxrID09IDE0NjE3NSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3x8JwogICAgIHx8IGxrID09IDE0NjU2NyAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd8fScKICAgICB8fCBsayA9PSAxNDY2MjkgICAgICAgICAgICAgICAgLy8gJ251bGwnICd8fScKICAgICB8fCBsayA9PSAxNDY2ODcgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8fScKICAgICB8fCBsayA9PSAxNDcwNzkgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnfScKICAgICB8fCBsayA9PSAxNDcxNDEgICAgICAgICAgICAgICAgLy8gJ251bGwnICd9JwogICAgIHx8IGxrID09IDE0NzE5OSkgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoNCwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfUG9zdGZpeEV4cHIoKTsKICAgICAgICAgIG1lbW9pemUoNCwgZTBBLCAtMSk7CiAgICAgICAgICBsayA9IC0zOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSg0LCBlMEEsIC0yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICBjYXNlIDYwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8PycKICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgY2FzZSAyODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3wnCiAgICBjYXNlIDMxNTU6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnIEVRTmFtZV5Ub2tlbgogICAgY2FzZSAzMTk0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgRVFOYW1lXlRva2VuCiAgICBjYXNlIDk5MTU6ICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnIE5DTmFtZV5Ub2tlbgogICAgY2FzZSA5OTQ4OiAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgTkNOYW1lXlRva2VuCiAgICBjYXNlIDE0ODU0OiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnIycKICAgIGNhc2UgMTQ5MTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnIycKICAgIGNhc2UgMTQ5MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnIycKICAgIGNhc2UgMTQ5MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnIycKICAgIGNhc2UgMTQ5MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDkyNDogICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJyAnIycKICAgIGNhc2UgMTQ5MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJyMnCiAgICBjYXNlIDE0OTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJyMnCiAgICBjYXNlIDE0OTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcjJwogICAgY2FzZSAxNDkzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXQnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTQ5MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJyMnCiAgICBjYXNlIDE0OTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJyMnCiAgICBjYXNlIDE0OTM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJyMnCiAgICBjYXNlIDE0OTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnIycKICAgIGNhc2UgMTQ5Mzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcjJwogICAgY2FzZSAxNDkzOTogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcjJwogICAgY2FzZSAxNDk0MDogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcjJwogICAgY2FzZSAxNDk0MjogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcjJwogICAgY2FzZSAxNDk0MzogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnIycKICAgIGNhc2UgMTQ5NDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcjJwogICAgY2FzZSAxNDk0NjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJyMnCiAgICBjYXNlIDE0OTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNDk1MDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJyMnCiAgICBjYXNlIDE0OTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJyMnCiAgICBjYXNlIDE0OTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJyMnCiAgICBjYXNlIDE0OTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcgJyMnCiAgICBjYXNlIDE0OTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJyMnCiAgICBjYXNlIDE0OTU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnIycKICAgIGNhc2UgMTQ5NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnIycKICAgIGNhc2UgMTQ5NjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnIycKICAgIGNhc2UgMTQ5NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JyAnIycKICAgIGNhc2UgMTQ5Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnIycKICAgIGNhc2UgMTQ5Njk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICcjJwogICAgY2FzZSAxNDk3MDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJyMnCiAgICBjYXNlIDE0OTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnIycKICAgIGNhc2UgMTQ5NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnIycKICAgIGNhc2UgMTQ5NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnIycKICAgIGNhc2UgMTQ5NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnIycKICAgIGNhc2UgMTQ5NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJyMnCiAgICBjYXNlIDE0OTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJyMnCiAgICBjYXNlIDE0OTc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJyMnCiAgICBjYXNlIDE0OTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcjJwogICAgY2FzZSAxNDk4MTogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJyMnCiAgICBjYXNlIDE0OTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJyMnCiAgICBjYXNlIDE0OTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJyMnCiAgICBjYXNlIDE0OTg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJyMnCiAgICBjYXNlIDE0OTg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcjJwogICAgY2FzZSAxNDk4NjogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNDk4NzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnIycKICAgIGNhc2UgMTQ5OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nICcjJwogICAgY2FzZSAxNDk5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJyAnIycKICAgIGNhc2UgMTQ5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJyAnIycKICAgIGNhc2UgMTUwMDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JyAnIycKICAgIGNhc2UgMTUwMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnICcjJwogICAgY2FzZSAxNTAwMjogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcjJwogICAgY2FzZSAxNTAwMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnIycKICAgIGNhc2UgMTUwMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJyAnIycKICAgIGNhc2UgMTUwMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JyAnIycKICAgIGNhc2UgMTUwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJyMnCiAgICBjYXNlIDE1MDEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScgJyMnCiAgICBjYXNlIDE1MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknICcjJwogICAgY2FzZSAxNTAxMjogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JyAnIycKICAgIGNhc2UgMTUwMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nICcjJwogICAgY2FzZSAxNTAxNDogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnICcjJwogICAgY2FzZSAxNTAxNTogICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScgJyMnCiAgICBjYXNlIDE1MDE2OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnIycKICAgIGNhc2UgMTUwMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyMnCiAgICBjYXNlIDE1MDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnICcjJwogICAgY2FzZSAxNTAyMTogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJyMnCiAgICBjYXNlIDE1MDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcjJwogICAgY2FzZSAxNTAyMzogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcjJwogICAgY2FzZSAxNTAyNTogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnIycKICAgIGNhc2UgMTUwMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcjJwogICAgY2FzZSAxNTAyOTogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcjJwogICAgY2FzZSAxNTAzMTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnIycKICAgIGNhc2UgMTUwMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJyMnCiAgICBjYXNlIDE1MDMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcjJwogICAgY2FzZSAxNTAzNTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnIycKICAgIGNhc2UgMTUwMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnIycKICAgIGNhc2UgMTUwMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnIycKICAgIGNhc2UgMTUwNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICcjJwogICAgY2FzZSAxNTA0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcjJwogICAgY2FzZSAxNTA0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyMnCiAgICBjYXNlIDE1MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcjJwogICAgY2FzZSAxNTA1MDogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJyMnCiAgICBjYXNlIDE1MDUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcjJwogICAgY2FzZSAxNTA1MjogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcjJwogICAgY2FzZSAxNTA1MzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcjJwogICAgY2FzZSAxNTA1NDogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJyMnCiAgICBjYXNlIDE1MDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJyMnCiAgICBjYXNlIDE1MDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcjJwogICAgY2FzZSAxNTA2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnIycKICAgIGNhc2UgMTUwNjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnIycKICAgIGNhc2UgMTUwNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNTA3MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnIycKICAgIGNhc2UgMTUwNzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcjJwogICAgY2FzZSAxNTA3MjogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnIycKICAgIGNhc2UgMTUwNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJyMnCiAgICBjYXNlIDE1MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcjJwogICAgY2FzZSAxNTA3NjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJyMnCiAgICBjYXNlIDE1MDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTUwNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnIycKICAgIGNhc2UgMTUwODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcgJyMnCiAgICBjYXNlIDE1MDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnIycKICAgIGNhc2UgMTUwODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcjJwogICAgY2FzZSAxNTA4ODogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJyMnCiAgICBjYXNlIDE1MDg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcjJwogICAgY2FzZSAxNTA5MDogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcjJwogICAgY2FzZSAxNTA5MzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnIycKICAgIGNhc2UgMTUwOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJyMnCiAgICBjYXNlIDE1MDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICcjJwogICAgY2FzZSAxNTA5NzogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJyMnCiAgICBjYXNlIDE1MTAxOiAgICAgICAgICAgICAgICAgICAgIC8vICd0bycgJyMnCiAgICBjYXNlIDE1MTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJyMnCiAgICBjYXNlIDE1MTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnIycKICAgIGNhc2UgMTUxMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJyMnCiAgICBjYXNlIDE1MTA1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJyMnCiAgICBjYXNlIDE1MTA2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnIycKICAgIGNhc2UgMTUxMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICcjJwogICAgY2FzZSAxNTEwODogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nICcjJwogICAgY2FzZSAxNTExMDogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnIycKICAgIGNhc2UgMTUxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnIycKICAgIGNhc2UgMTUxMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnIycKICAgIGNhc2UgMTUxMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnIycKICAgIGNhc2UgMTUxMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnIycKICAgIGNhc2UgMTUxMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICcjJwogICAgY2FzZSAxNTEyMDogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnICcjJwogICAgY2FzZSAxNTEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcjJwogICAgY2FzZSAxNTEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcgJyMnCiAgICBjYXNlIDE3OTI2OiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnKCcKICAgIGNhc2UgMTc5OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnKCcKICAgIGNhc2UgMTc5OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnKCcKICAgIGNhc2UgMTc5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnKCcKICAgIGNhc2UgMTc5OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcoJwogICAgY2FzZSAxNzk5NjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJyAnKCcKICAgIGNhc2UgMTc5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJygnCiAgICBjYXNlIDE4MDAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcycgJygnCiAgICBjYXNlIDE4MDAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcoJwogICAgY2FzZSAxODAwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXQnICcoJwogICAgY2FzZSAxODAwNDogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcoJwogICAgY2FzZSAxODAwNTogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnKCcKICAgIGNhc2UgMTgwMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnKCcKICAgIGNhc2UgMTgwMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnKCcKICAgIGNhc2UgMTgwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcoJwogICAgY2FzZSAxODAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJygnCiAgICBjYXNlIDE4MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJygnCiAgICBjYXNlIDE4MDEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJygnCiAgICBjYXNlIDE4MDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJygnCiAgICBjYXNlIDE4MDE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcoJwogICAgY2FzZSAxODAxODogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJygnCiAgICBjYXNlIDE4MDE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcoJwogICAgY2FzZSAxODAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJygnCiAgICBjYXNlIDE4MDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJygnCiAgICBjYXNlIDE4MDI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnKCcKICAgIGNhc2UgMTgwMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJygnCiAgICBjYXNlIDE4MDI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcgJygnCiAgICBjYXNlIDE4MDI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJygnCiAgICBjYXNlIDE4MDI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnKCcKICAgIGNhc2UgMTgwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcoJwogICAgY2FzZSAxODAzMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnKCcKICAgIGNhc2UgMTgwMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcoJwogICAgY2FzZSAxODAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTgwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcoJwogICAgY2FzZSAxODAzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JyAnKCcKICAgIGNhc2UgMTgwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnKCcKICAgIGNhc2UgMTgwNDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICcoJwogICAgY2FzZSAxODA0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICcoJwogICAgY2FzZSAxODA0NjogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICcoJwogICAgY2FzZSAxODA0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnKCcKICAgIGNhc2UgMTgwNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnKCcKICAgIGNhc2UgMTgwNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnKCcKICAgIGNhc2UgMTgwNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJygnCiAgICBjYXNlIDE4MDUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnKCcKICAgIGNhc2UgMTgwNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnKCcKICAgIGNhc2UgMTgwNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnKCcKICAgIGNhc2UgMTgwNTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnKCcKICAgIGNhc2UgMTgwNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJygnCiAgICBjYXNlIDE4MDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJygnCiAgICBjYXNlIDE4MDU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICcoJwogICAgY2FzZSAxODA2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScgJygnCiAgICBjYXNlIDE4MDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICcoJwogICAgY2FzZSAxODA2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcoJwogICAgY2FzZSAxODA2ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnICcoJwogICAgY2FzZSAxODA3MDogICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICcoJwogICAgY2FzZSAxODA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnICcoJwogICAgY2FzZSAxODA3MzogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicgJygnCiAgICBjYXNlIDE4MDc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICcoJwogICAgY2FzZSAxODA3NjogICAgICAgICAgICAgICAgICAgICAvLyAnaW4nICcoJwogICAgY2FzZSAxODA3NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnICcoJwogICAgY2FzZSAxODA4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnKCcKICAgIGNhc2UgMTgwODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnKCcKICAgIGNhc2UgMTgwODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJygnCiAgICBjYXNlIDE4MDg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICcoJwogICAgY2FzZSAxODA4NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycgJygnCiAgICBjYXNlIDE4MDg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycgJygnCiAgICBjYXNlIDE4MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnKCcKICAgIGNhc2UgMTgwOTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScgJygnCiAgICBjYXNlIDE4MDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JyAnKCcKICAgIGNhc2UgMTgwOTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcgJygnCiAgICBjYXNlIDE4MDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZScgJygnCiAgICBjYXNlIDE4MDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICcoJwogICAgY2FzZSAxODA5OTogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcgJygnCiAgICBjYXNlIDE4MTAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcgJygnCiAgICBjYXNlIDE4MTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnICcoJwogICAgY2FzZSAxODEwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnKCcKICAgIGNhc2UgMTgxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJygnCiAgICBjYXNlIDE4MTA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICcoJwogICAgY2FzZSAxODEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnICcoJwogICAgY2FzZSAxODExNTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcoJwogICAgY2FzZSAxODExNzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJygnCiAgICBjYXNlIDE4MTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcoJwogICAgY2FzZSAxODEyMjogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJygnCiAgICBjYXNlIDE4MTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcoJwogICAgY2FzZSAxODEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcoJwogICAgY2FzZSAxODEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcoJwogICAgY2FzZSAxODEyNjogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJygnCiAgICBjYXNlIDE4MTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJygnCiAgICBjYXNlIDE4MTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcoJwogICAgY2FzZSAxODEzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnKCcKICAgIGNhc2UgMTgxMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnKCcKICAgIGNhc2UgMTgxNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJygnCiAgICBjYXNlIDE4MTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnKCcKICAgIGNhc2UgMTgxNDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJygnCiAgICBjYXNlIDE4MTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICcoJwogICAgY2FzZSAxODE0NjogICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnKCcKICAgIGNhc2UgMTgxNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJygnCiAgICBjYXNlIDE4MTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICcoJwogICAgY2FzZSAxODE1MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnICcoJwogICAgY2FzZSAxODE1MzogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JyAnKCcKICAgIGNhc2UgMTgxNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcoJwogICAgY2FzZSAxODE1OTogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJygnCiAgICBjYXNlIDE4MTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnKCcKICAgIGNhc2UgMTgxNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJygnCiAgICBjYXNlIDE4MTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJygnCiAgICBjYXNlIDE4MTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcoJwogICAgY2FzZSAxODE3MzogICAgICAgICAgICAgICAgICAgICAvLyAndG8nICcoJwogICAgY2FzZSAxODE3NDogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnICcoJwogICAgY2FzZSAxODE3NTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJygnCiAgICBjYXNlIDE4MTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknICcoJwogICAgY2FzZSAxODE3NzogICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICcoJwogICAgY2FzZSAxODE3ODogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScgJygnCiAgICBjYXNlIDE4MTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicgJygnCiAgICBjYXNlIDE4MTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICcoJwogICAgY2FzZSAxODE4MzogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICcoJwogICAgY2FzZSAxODE4NjogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICcoJwogICAgY2FzZSAxODE4NzogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnICcoJwogICAgY2FzZSAxODE4ODogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcoJwogICAgY2FzZSAxODE4OTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJygnCiAgICBjYXNlIDE4MTkyOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScgJygnCiAgICBjYXNlIDE4MTkzOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJygnCiAgICBjYXNlIDE4MTk2OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJyAnKCcKICAgIGNhc2UgMjMxNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLicKICAgIGNhc2UgMjMyMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcuJwogICAgY2FzZSAyMzI5NTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy4nCiAgICBjYXNlIDM3NDU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhbGxvd2luZycKICAgIGNhc2UgMzc0OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbGxvd2luZycKICAgIGNhc2UgMzc1NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FsbG93aW5nJwogICAgY2FzZSAzNzU5NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FsbG93aW5nJwogICAgY2FzZSAzNzk3MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYW5jZXN0b3InCiAgICBjYXNlIDM4MDEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYW5jZXN0b3InCiAgICBjYXNlIDM4MDc1OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhbmNlc3RvcicKICAgIGNhc2UgMzgxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhbmNlc3RvcicKICAgIGNhc2UgMzg0ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDM4NTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzg1ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDM4NjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgNDAwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FwcGVuZCcKICAgIGNhc2UgNDAwNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhcHBlbmQnCiAgICBjYXNlIDQwMTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhcHBlbmQnCiAgICBjYXNlIDQwMTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXBwZW5kJwogICAgY2FzZSA0MDUzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXJyYXknCiAgICBjYXNlIDQwNTcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYXJyYXknCiAgICBjYXNlIDQyNTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQyNjE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYXR0cmlidXRlJwogICAgY2FzZSA0MjY4MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXR0cmlidXRlJwogICAgY2FzZSA0MjcxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDMwOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Jhc2UtdXJpJwogICAgY2FzZSA0MzEzMDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Jhc2UtdXJpJwogICAgY2FzZSA0MzE5NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYmFzZS11cmknCiAgICBjYXNlIDQzMjI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYmFzZS11cmknCiAgICBjYXNlIDQ0MTE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgNDQxNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgNDQyMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0NDI1MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0NDYyNzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYnJlYWsnCiAgICBjYXNlIDQ0NjY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYnJlYWsnCiAgICBjYXNlIDQ0NzMxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdicmVhaycKICAgIGNhc2UgNDQ3NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdicmVhaycKICAgIGNhc2UgNDcxODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NhdGNoJwogICAgY2FzZSA0NzIyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NhdGNoJwogICAgY2FzZSA0NzI5MTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2F0Y2gnCiAgICBjYXNlIDQ3MzI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2F0Y2gnCiAgICBjYXNlIDQ4MjExOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjaGlsZCcKICAgIGNhc2UgNDgyNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjaGlsZCcKICAgIGNhc2UgNDgzMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NoaWxkJwogICAgY2FzZSA0ODM0ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NoaWxkJwogICAgY2FzZSA0OTc0NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29tbWVudCcKICAgIGNhc2UgNDk3ODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb21tZW50JwogICAgY2FzZSA0OTg1MTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29tbWVudCcKICAgIGNhc2UgNDk4ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb21tZW50JwogICAgY2FzZSA1MDI1OTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29uc3RyYWludCcKICAgIGNhc2UgNTAyOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb25zdHJhaW50JwogICAgY2FzZSA1MDM2MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29uc3RyYWludCcKICAgIGNhc2UgNTAzOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb25zdHJhaW50JwogICAgY2FzZSA1MDc3MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MDgxMDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTA4NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTA5MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUyMzA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb250ZXh0JwogICAgY2FzZSA1MjM0NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnRleHQnCiAgICBjYXNlIDUyNDExOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb250ZXh0JwogICAgY2FzZSA1MjQ0NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnRleHQnCiAgICBjYXNlIDUyODE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb250aW51ZScKICAgIGNhc2UgNTI4NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb250aW51ZScKICAgIGNhc2UgNTI5MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbnRpbnVlJwogICAgY2FzZSA1Mjk1NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnRpbnVlJwogICAgY2FzZSA1MzMzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29weScKICAgIGNhc2UgNTMzNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb3B5JwogICAgY2FzZSA1MzQzNTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29weScKICAgIGNhc2UgNTM0Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb3B5JwogICAgY2FzZSA1Mzg0MzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1Mzg4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTM5NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTM5ODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDU0ODY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTQ5MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTQ5NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NTAwNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NTg5MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVjbGFyZScKICAgIGNhc2UgNTU5MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZWNsYXJlJwogICAgY2FzZSA1NTk5NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVjbGFyZScKICAgIGNhc2UgNTYwMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZWNsYXJlJwogICAgY2FzZSA1NjkxNTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVsZXRlJwogICAgY2FzZSA1Njk1NDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlbGV0ZScKICAgIGNhc2UgNTcwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RlbGV0ZScKICAgIGNhc2UgNTcwNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZWxldGUnCiAgICBjYXNlIDU3NDI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZXNjZW5kYW50JwogICAgY2FzZSA1NzQ2NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3NTMxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZXNjZW5kYW50JwogICAgY2FzZSA1NzU2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3OTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU3OTc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA1ODA0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA1ODA3NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNjE1MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RvY3VtZW50JwogICAgY2FzZSA2MTU2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RvY3VtZW50JwogICAgY2FzZSA2MTYyNzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYxNjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYyMDM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSA2MjA3NDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyMTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSA2MjE3MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyNTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbGVtZW50JwogICAgY2FzZSA2MjU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VsZW1lbnQnCiAgICBjYXNlIDYyNjUxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdlbGVtZW50JwogICAgY2FzZSA2MjY4NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VsZW1lbnQnCiAgICBjYXNlIDY0MDgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgNjQxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgNjQxODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2NDIyMDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2NDU5NTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZW5jb2RpbmcnCiAgICBjYXNlIDY0NjM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZW5jb2RpbmcnCiAgICBjYXNlIDY0Njk5OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdlbmNvZGluZycKICAgIGNhc2UgNjQ3MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdlbmNvZGluZycKICAgIGNhc2UgNjY2NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2V2ZXJ5JwogICAgY2FzZSA2NjY4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V2ZXJ5JwogICAgY2FzZSA2Njc0NzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXZlcnknCiAgICBjYXNlIDY2NzgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXZlcnknCiAgICBjYXNlIDY4MTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdleGl0JwogICAgY2FzZSA2ODIxODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V4aXQnCiAgICBjYXNlIDY4MjgzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdleGl0JwogICAgY2FzZSA2ODMxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2V4aXQnCiAgICBjYXNlIDY4NjkxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdleHRlcm5hbCcKICAgIGNhc2UgNjg3MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdleHRlcm5hbCcKICAgIGNhc2UgNjg3OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2V4dGVybmFsJwogICAgY2FzZSA2ODgyODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2V4dGVybmFsJwogICAgY2FzZSA2OTIwMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZmFsc2UnCiAgICBjYXNlIDY5MjQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZmFsc2UnCiAgICBjYXNlIDY5MzA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdmYWxzZScKICAgIGNhc2UgNjkzNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmYWxzZScKICAgIGNhc2UgNjk3MTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ZpcnN0JwogICAgY2FzZSA2OTc1NDogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZpcnN0JwogICAgY2FzZSA2OTgxOTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZmlyc3QnCiAgICBjYXNlIDY5ODUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZmlyc3QnCiAgICBjYXNlIDcwMjI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmb2xsb3dpbmcnCiAgICBjYXNlIDcwMjY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDMzMTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDM2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZvbGxvd2luZycKICAgIGNhc2UgNzA3Mzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MDc3ODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MDg0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcwODc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcyNzg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmcm9tJwogICAgY2FzZSA3MjgyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Zyb20nCiAgICBjYXNlIDcyODkxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdmcm9tJwogICAgY2FzZSA3MjkyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Zyb20nCiAgICBjYXNlIDczMjk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmdC1vcHRpb24nCiAgICBjYXNlIDczMzM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZnQtb3B0aW9uJwogICAgY2FzZSA3MzQwMzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3MzQzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzUzNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NTM4NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NTQ1MTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc1NDg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc4OTMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpZicKICAgIGNhc2UgNzg5NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpZicKICAgIGNhc2UgNzkwMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2lmJwogICAgY2FzZSA3OTA2ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2lmJwogICAgY2FzZSA3OTQ0MzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW1wb3J0JwogICAgY2FzZSA3OTQ4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ltcG9ydCcKICAgIGNhc2UgNzk1NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ltcG9ydCcKICAgIGNhc2UgNzk1ODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbXBvcnQnCiAgICBjYXNlIDc5OTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbicKICAgIGNhc2UgNzk5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbicKICAgIGNhc2UgODAwNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2luJwogICAgY2FzZSA4MDA5MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2luJwogICAgY2FzZSA4MDQ2NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW5kZXgnCiAgICBjYXNlIDgwNTA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW5kZXgnCiAgICBjYXNlIDgwNTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbmRleCcKICAgIGNhc2UgODA2MDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbmRleCcKICAgIGNhc2UgODI1MTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2luc2VydCcKICAgIGNhc2UgODI1NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnNlcnQnCiAgICBjYXNlIDgyNjE5OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnNlcnQnCiAgICBjYXNlIDgyNjUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW5zZXJ0JwogICAgY2FzZSA4MzUzOTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW50ZWdyaXR5JwogICAgY2FzZSA4MzU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ludGVncml0eScKICAgIGNhc2UgODM2NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ludGVncml0eScKICAgIGNhc2UgODM2NzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbnRlZ3JpdHknCiAgICBjYXNlIDg1NTg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpdGVtJwogICAgY2FzZSA4NTYyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2l0ZW0nCiAgICBjYXNlIDg1NjkxOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpdGVtJwogICAgY2FzZSA4NTcyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2l0ZW0nCiAgICBjYXNlIDg2MDk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdqc29uJwogICAgY2FzZSA4NjEzODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2pzb24nCiAgICBjYXNlIDg2MjAzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdqc29uJwogICAgY2FzZSA4NjIzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2pzb24nCiAgICBjYXNlIDg2NjExOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdqc29uLWl0ZW0nCiAgICBjYXNlIDg2NjUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnanNvbi1pdGVtJwogICAgY2FzZSA4NzEyMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnanNvbmlxJwogICAgY2FzZSA4NzE2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2pzb25pcScKICAgIGNhc2UgODcyMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2pzb25pcScKICAgIGNhc2UgODcyNjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdqc29uaXEnCiAgICBjYXNlIDg4NjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsYXN0JwogICAgY2FzZSA4ODY5ODogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2xhc3QnCiAgICBjYXNlIDg4NzYzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsYXN0JwogICAgY2FzZSA4ODc5NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xhc3QnCiAgICBjYXNlIDg5MTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsYXgnCiAgICBjYXNlIDg5MjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGF4JwogICAgY2FzZSA4OTI3NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbGF4JwogICAgY2FzZSA4OTMwODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xheCcKICAgIGNhc2UgOTE3MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xvb3AnCiAgICBjYXNlIDkxNzcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbG9vcCcKICAgIGNhc2UgOTE4MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xvb3AnCiAgICBjYXNlIDkxODY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbG9vcCcKICAgIGNhc2UgOTQ4MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ21vZHVsZScKICAgIGNhc2UgOTQ4NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdtb2R1bGUnCiAgICBjYXNlIDk0OTA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdtb2R1bGUnCiAgICBjYXNlIDk0OTQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbW9kdWxlJwogICAgY2FzZSA5NTgyNzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NTg2NjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25hbWVzcGFjZScKICAgIGNhc2UgOTU5MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25hbWVzcGFjZScKICAgIGNhc2UgOTU5NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICduYW1lc3BhY2UnCiAgICBjYXNlIDk2MzM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgOTYzNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgOTY0NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NjQ3NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5OTQxMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbm9kZScKICAgIGNhc2UgOTk0NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdub2RlJwogICAgY2FzZSA5OTUxNTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbm9kZScKICAgIGNhc2UgOTk1NDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdub2RlJwogICAgY2FzZSA5OTkyMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbm9kZXMnCiAgICBjYXNlIDk5OTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbm9kZXMnCiAgICBjYXNlIDEwMDAyNzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdub2RlcycKICAgIGNhc2UgMTAwMDYwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdub2RlcycKICAgIGNhc2UgMTAwOTQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ251bGwnCiAgICBjYXNlIDEwMDk4NjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbnVsbCcKICAgIGNhc2UgMTAxMDUxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ251bGwnCiAgICBjYXNlIDEwMTA4NDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbnVsbCcKICAgIGNhc2UgMTAxNDU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29iamVjdCcKICAgIGNhc2UgMTAxNDk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvYmplY3QnCiAgICBjYXNlIDEwMTU2MzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvYmplY3QnCiAgICBjYXNlIDEwMTU5NjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb2JqZWN0JwogICAgY2FzZSAxMDQwMTk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb3B0aW9uJwogICAgY2FzZSAxMDQwNTg6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29wdGlvbicKICAgIGNhc2UgMTA0MTIzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29wdGlvbicKICAgIGNhc2UgMTA0MTU2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdvcHRpb24nCiAgICBjYXNlIDEwNTU1NTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcmRlcmVkJwogICAgY2FzZSAxMDU1OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29yZGVyZWQnCiAgICBjYXNlIDEwNTY1OTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvcmRlcmVkJwogICAgY2FzZSAxMDU2OTI6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yZGVyZWQnCiAgICBjYXNlIDEwNjA2NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcmRlcmluZycKICAgIGNhc2UgMTA2MTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvcmRlcmluZycKICAgIGNhc2UgMTA2MTcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yZGVyaW5nJwogICAgY2FzZSAxMDYyMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yZGVyaW5nJwogICAgY2FzZSAxMDc2MDM6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncGFyZW50JwogICAgY2FzZSAxMDc2NDI6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3BhcmVudCcKICAgIGNhc2UgMTA3NzA3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3BhcmVudCcKICAgIGNhc2UgMTA3NzQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdwYXJlbnQnCiAgICBjYXNlIDExMDY3NTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdwcmVjZWRpbmcnCiAgICBjYXNlIDExMDcxNDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncHJlY2VkaW5nJwogICAgY2FzZSAxMTA3Nzk6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncHJlY2VkaW5nJwogICAgY2FzZSAxMTA4MTI6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3ByZWNlZGluZycKICAgIGNhc2UgMTExMTg3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTEyMjY6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTEyOTE6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDExMTMyNDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDExMjcyMzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAxMTI3NjI6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMjgyNzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAxMTI4NjA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMzc0NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdyZW5hbWUnCiAgICBjYXNlIDExMzc4NjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmVuYW1lJwogICAgY2FzZSAxMTM4NTE6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmVuYW1lJwogICAgY2FzZSAxMTM4ODQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3JlbmFtZScKICAgIGNhc2UgMTE0MjU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDI5ODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmVwbGFjZScKICAgIGNhc2UgMTE0MzYzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDM5NjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmVwbGFjZScKICAgIGNhc2UgMTE1MjgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JldHVybmluZycKICAgIGNhc2UgMTE1MzIyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTM4NzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTQyMDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmV0dXJuaW5nJwogICAgY2FzZSAxMTU3OTU6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTU4MzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE1ODk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE1OTMyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExNzMzMTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzY2hlbWEnCiAgICBjYXNlIDExNzM3MDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2NoZW1hJwogICAgY2FzZSAxMTc0MzU6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NoZW1hJwogICAgY2FzZSAxMTc0Njg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NjaGVtYScKICAgIGNhc2UgMTE3ODQzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDExNzg4MjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE3OTQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDExNzk4MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE4MzU1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAxMTgzOTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAxMTg0NTk6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExODQ5MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExODg2NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzY29yZScKICAgIGNhc2UgMTE4OTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzY29yZScKICAgIGNhc2UgMTE4OTcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3Njb3JlJwogICAgY2FzZSAxMTkwMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3Njb3JlJwogICAgY2FzZSAxMTkzNzk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2VsZWN0JwogICAgY2FzZSAxMTk0MTg6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NlbGVjdCcKICAgIGNhc2UgMTE5NDgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3NlbGVjdCcKICAgIGNhc2UgMTE5NTE2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzZWxlY3QnCiAgICBjYXNlIDExOTg5MTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzZWxmJwogICAgY2FzZSAxMTk5MzA6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NlbGYnCiAgICBjYXNlIDExOTk5NTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzZWxmJwogICAgY2FzZSAxMjAwMjg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NlbGYnCiAgICBjYXNlIDEyMjQ1MTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzbGlkaW5nJwogICAgY2FzZSAxMjI0OTA6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMjU1NTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzbGlkaW5nJwogICAgY2FzZSAxMjI1ODg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMjk2MzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzb21lJwogICAgY2FzZSAxMjMwMDI6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NvbWUnCiAgICBjYXNlIDEyMzA2NzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzb21lJwogICAgY2FzZSAxMjMxMDA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NvbWUnCiAgICBjYXNlIDEyNTUyMzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzdHJpY3QnCiAgICBjYXNlIDEyNTU2MjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RyaWN0JwogICAgY2FzZSAxMjU2Mjc6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RyaWN0JwogICAgY2FzZSAxMjU2NjA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N0cmljdCcKICAgIGNhc2UgMTI2NTQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMTI2NTg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDEyNzA1OTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzd2l0Y2gnCiAgICBjYXNlIDEyNzA5ODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3dpdGNoJwogICAgY2FzZSAxMjcxNjM6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3dpdGNoJwogICAgY2FzZSAxMjcxOTY6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N3aXRjaCcKICAgIGNhc2UgMTI3NTcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RleHQnCiAgICBjYXNlIDEyNzYxMDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndGV4dCcKICAgIGNhc2UgMTI3Njc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RleHQnCiAgICBjYXNlIDEyNzcwODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndGV4dCcKICAgIGNhc2UgMTMwNjQzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RydWUnCiAgICBjYXNlIDEzMDY4MjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHJ1ZScKICAgIGNhc2UgMTMwNzQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RydWUnCiAgICBjYXNlIDEzMDc4MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJ1ZScKICAgIGNhc2UgMTMxMTU1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RyeScKICAgIGNhc2UgMTMxMTk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0cnknCiAgICBjYXNlIDEzMTI1OTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0cnknCiAgICBjYXNlIDEzMTI5MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJ5JwogICAgY2FzZSAxMzE2Njc6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMTcwNjogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMTc3MTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0dW1ibGluZycKICAgIGNhc2UgMTMxODA0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd0dW1ibGluZycKICAgIGNhc2UgMTMyMTc5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGUnCiAgICBjYXNlIDEzMjIxODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZScKICAgIGNhc2UgMTMyMjgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGUnCiAgICBjYXNlIDEzMjMxNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZScKICAgIGNhc2UgMTMyNjkxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEzMjczMDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMyNzk1OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEzMjgyODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTM0MjI3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Vub3JkZXJlZCcKICAgIGNhc2UgMTM0MjY2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzNDMzMTogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzNDM2NDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzQ3Mzk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNDc3ODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNDg0MzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1cGRhdGluZycKICAgIGNhc2UgMTM0ODc2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd1cGRhdGluZycKICAgIGNhc2UgMTM2Mjc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzYzMTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzYzNzk6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzNjQxMjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzNjc4NzogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd2YWx1ZScKICAgIGNhc2UgMTM2ODI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd2YWx1ZScKICAgIGNhc2UgMTM2ODkxOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZhbHVlJwogICAgY2FzZSAxMzY5MjQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3ZhbHVlJwogICAgY2FzZSAxMzcyOTk6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzMzODogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzQwMzogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd2YXJpYWJsZScKICAgIGNhc2UgMTM3NDM2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd2YXJpYWJsZScKICAgIGNhc2UgMTM3ODExOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNzg1MDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmVyc2lvbicKICAgIGNhc2UgMTM3OTE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNzk0ODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmVyc2lvbicKICAgIGNhc2UgMTM5ODU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3doaWxlJwogICAgY2FzZSAxMzk4OTg6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3doaWxlJwogICAgY2FzZSAxMzk5NjM6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2hpbGUnCiAgICBjYXNlIDEzOTk5NjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2hpbGUnCiAgICBjYXNlIDE0Mzk1NTogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd7JwogICAgY2FzZSAxNDM5Njk6ICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJ3snCiAgICBjYXNlIDE0Mzk5MjogICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJ3snCiAgICBjYXNlIDE0Mzk5NDogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAneycKICAgIGNhc2UgMTQ0MDU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3snCiAgICBjYXNlIDE0NDA3ODogICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAneycKICAgIGNhc2UgMTQ0MDkyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd7JwogICAgY2FzZSAxNDQxMjE6ICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJ3snCiAgICBjYXNlIDE0NDEzNDogICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICd7JwogICAgICB0cnlfUG9zdGZpeEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9BeGlzU3RlcCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXhpc1N0ZXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBeGlzU3RlcCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgbG9va2FoZWFkMlcoMjMxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICAgIGNhc2UgMjY2OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnOjonCiAgICBjYXNlIDI2Njk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnOjonCiAgICBjYXNlIDI2ODM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICc6OicKICAgIGNhc2UgMjY4NDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJzo6JwogICAgY2FzZSAyNjg0MTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICc6OicKICAgICAgcGFyc2VfUmV2ZXJzZVN0ZXAoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9Gb3J3YXJkU3RlcCgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMjI3KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzonIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1ByZWRpY2F0ZUxpc3QoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXhpc1N0ZXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXhpc1N0ZXAoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgbG9va2FoZWFkMlcoMjMxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICAgIGNhc2UgMjY2OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnOjonCiAgICBjYXNlIDI2Njk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnOjonCiAgICBjYXNlIDI2ODM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICc6OicKICAgIGNhc2UgMjY4NDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJzo6JwogICAgY2FzZSAyNjg0MTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICc6OicKICAgICAgdHJ5X1JldmVyc2VTdGVwKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0ZvcndhcmRTdGVwKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygyMjcpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOicgfAogICAgdHJ5X1ByZWRpY2F0ZUxpc3QoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZvcndhcmRTdGVwKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRm9yd2FyZFN0ZXAiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBsb29rYWhlYWQyVygyMzUpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICBjYXNlIDEzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIGxvb2thaGVhZDJXKDIzMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOicgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAyNjcwNzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnOjonCiAgICBjYXNlIDI2NzE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJzo6JwogICAgY2FzZSAyNjczNjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJzo6JwogICAgY2FzZSAyNjczNzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnOjonCiAgICBjYXNlIDI2NzYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICc6OicKICAgIGNhc2UgMjY3NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnOjonCiAgICBjYXNlIDI2ODU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnOjonCiAgICAgIHBhcnNlX0ZvcndhcmRBeGlzKCk7CiAgICAgIGxvb2thaGVhZDFXKDI0OCk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX05vZGVUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQWJicmV2Rm9yd2FyZFN0ZXAoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRm9yd2FyZFN0ZXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRm9yd2FyZFN0ZXAoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGxvb2thaGVhZDJXKDIzNSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICBicmVhazsKICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgMTM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgIGNhc2UgMTM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgbG9va2FoZWFkMlcoMjMxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDI2NzA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICc6OicKICAgIGNhc2UgMjY3MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnOjonCiAgICBjYXNlIDI2NzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnOjonCiAgICBjYXNlIDI2NzM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICc6OicKICAgIGNhc2UgMjY3NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJzo6JwogICAgY2FzZSAyNjc2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICc6OicKICAgIGNhc2UgMjY4NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICc6OicKICAgICAgdHJ5X0ZvcndhcmRBeGlzKCk7CiAgICAgIGxvb2thaGVhZDFXKDI0OCk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfTm9kZVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQWJicmV2Rm9yd2FyZFN0ZXAoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZvcndhcmRBeGlzKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRm9yd2FyZEF4aXMiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdCgxMTIpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgc2hpZnQoMjM0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMTMpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMTM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBzaGlmdCgxMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTM3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRm9yd2FyZEF4aXMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRm9yd2FyZEF4aXMoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnRUKDk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIHNoaWZ0VCgxMTIpOyAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnRUKDgzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1Mik7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdFQoMjM0KTsgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1Mik7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0VCgxMTMpOyAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0VCgxMzgpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1Mik7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTM3KTsgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQWJicmV2Rm9yd2FyZFN0ZXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBYmJyZXZGb3J3YXJkU3RlcCIsIGUwKTsKICAgIGlmIChsMSA9PSA2NykgICAgICAgICAgICAgICAgICAgLy8gJ0AnCiAgICB7CiAgICAgIHNoaWZ0KDY3KTsgICAgICAgICAgICAgICAgICAgIC8vICdAJwogICAgfQogICAgbG9va2FoZWFkMVcoMjQ4KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05vZGVUZXN0KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFiYnJldkZvcndhcmRTdGVwIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FiYnJldkZvcndhcmRTdGVwKCkKICB7CiAgICBpZiAobDEgPT0gNjcpICAgICAgICAgICAgICAgICAgIC8vICdAJwogICAgewogICAgICBzaGlmdFQoNjcpOyAgICAgICAgICAgICAgICAgICAvLyAnQCcKICAgIH0KICAgIGxvb2thaGVhZDFXKDI0OCk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfTm9kZVRlc3QoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JldmVyc2VTdGVwKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmV2ZXJzZVN0ZXAiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA0NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLi4nCiAgICAgIHBhcnNlX0FiYnJldlJldmVyc2VTdGVwKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfUmV2ZXJzZUF4aXMoKTsKICAgICAgbG9va2FoZWFkMVcoMjQ4KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTm9kZVRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUmV2ZXJzZVN0ZXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmV2ZXJzZVN0ZXAoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICAgICAgdHJ5X0FiYnJldlJldmVyc2VTdGVwKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X1JldmVyc2VBeGlzKCk7CiAgICAgIGxvb2thaGVhZDFXKDI0OCk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfTm9kZVRlc3QoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JldmVyc2VBeGlzKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmV2ZXJzZUF4aXMiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdCgyMTApOyAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBzaGlmdCg3NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIxNyk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoNzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJldmVyc2VBeGlzIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1JldmVyc2VBeGlzKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdFQoMjEwKTsgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBzaGlmdFQoNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0VCgyMTcpOyAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1Mik7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0VCgyMTYpOyAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BYmJyZXZSZXZlcnNlU3RlcCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFiYnJldlJldmVyc2VTdGVwIiwgZTApOwogICAgc2hpZnQoNDYpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnLi4nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFiYnJldlJldmVyc2VTdGVwIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FiYnJldlJldmVyc2VTdGVwKCkKICB7CiAgICBzaGlmdFQoNDYpOyAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICB9CgogIGZ1bmN0aW9uIHBhcnNlX05vZGVUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTm9kZVRlc3QiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgY2FzZSAxODg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGxvb2thaGVhZDJXKDIzMCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxODAwMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTgwMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcoJwogICAgY2FzZSAxODA0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJygnCiAgICBjYXNlIDE4MDQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnKCcKICAgIGNhc2UgMTgxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnKCcKICAgIGNhc2UgMTgxMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICcoJwogICAgY2FzZSAxODE0MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJygnCiAgICBjYXNlIDE4MTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTgxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnKCcKICAgIGNhc2UgMTgxNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnICcoJwogICAgICBwYXJzZV9LaW5kVGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX05hbWVUZXN0KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5vZGVUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05vZGVUZXN0KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgY2FzZSAxODg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGxvb2thaGVhZDJXKDIzMCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxODAwMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTgwMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcoJwogICAgY2FzZSAxODA0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJygnCiAgICBjYXNlIDE4MDQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnKCcKICAgIGNhc2UgMTgxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnKCcKICAgIGNhc2UgMTgxMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICcoJwogICAgY2FzZSAxODE0MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJygnCiAgICBjYXNlIDE4MTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTgxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnKCcKICAgIGNhc2UgMTgxNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnICcoJwogICAgICB0cnlfS2luZFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfTmFtZVRlc3QoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX05hbWVUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTmFtZVRlc3QiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBzaGlmdCg1KTsgICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0VRTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOYW1lVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9OYW1lVGVzdCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQKICAgICAgc2hpZnRUKDUpOyAgICAgICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRVFOYW1lKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Qb3N0Zml4RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBvc3RmaXhFeHByIiwgZTApOwogICAgcGFyc2VfUHJpbWFyeUV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDIzNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcuJyB8ICcvJyB8CiAgICAgIGlmIChsMSAhPSAzNSAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICAgJiYgbDEgIT0gNDUgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgICYmIGwxICE9IDY5KSAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICAgIGxvb2thaGVhZDJXKDI3Mik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDM1Mzk3KSAgICAgICAgICAgICAgLy8gJ1snICdbJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCg1LCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICB0cnlfUHJlZGljYXRlKCk7CiAgICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFBKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC00OwogICAgICAgICAgfQogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoNSwgZTAsIGxrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3dpdGNoIChsaykKICAgICAgewogICAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfQXJndW1lbnRMaXN0KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9PYmplY3RMb29rdXAoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAtNDoKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfQXJyYXlMb29rdXAoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzNTkwOTogICAgICAgICAgICAgICAgICAgLy8gJ1snICddJwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9BcnJheVVuYm94aW5nKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1ByZWRpY2F0ZSgpOwogICAgICB9CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBvc3RmaXhFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1Bvc3RmaXhFeHByKCkKICB7CiAgICB0cnlfUHJpbWFyeUV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDIzNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcuJyB8ICcvJyB8CiAgICAgIGlmIChsMSAhPSAzNSAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICAgJiYgbDEgIT0gNDUgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgICYmIGwxICE9IDY5KSAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICAgIGxvb2thaGVhZDJXKDI3Mik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDM1Mzk3KSAgICAgICAgICAgICAgLy8gJ1snICdbJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCg1LCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICB0cnlfUHJlZGljYXRlKCk7CiAgICAgICAgICAgIG1lbW9pemUoNSwgZTBBLCAtMSk7CiAgICAgICAgICAgIGxrID0gLTY7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFBKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC00OwogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgbWVtb2l6ZSg1LCBlMEEsIC00KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgc3dpdGNoIChsaykKICAgICAgewogICAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgICB0cnlfQXJndW1lbnRMaXN0KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICAgIHRyeV9PYmplY3RMb29rdXAoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAtNDoKICAgICAgICB0cnlfQXJyYXlMb29rdXAoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzNTkwOTogICAgICAgICAgICAgICAgICAgLy8gJ1snICddJwogICAgICAgIHRyeV9BcnJheVVuYm94aW5nKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgLTY6CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdHJ5X1ByZWRpY2F0ZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PYmplY3RMb29rdXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJPYmplY3RMb29rdXAiLCBlMCk7CiAgICBzaGlmdCg0NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgbG9va2FoZWFkMVcoMjUwKTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgTkNOYW1lXlRva2VuIHwgU15XUyB8ICckJyB8ICckJCcgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1BhcmVudGhlc2l6ZWRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJSZWYoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Db250ZXh0SXRlbUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX05DTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPYmplY3RMb29rdXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfT2JqZWN0TG9va3VwKCkKICB7CiAgICBzaGlmdFQoNDUpOyAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgbG9va2FoZWFkMVcoMjUwKTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgTkNOYW1lXlRva2VuIHwgU15XUyB8ICckJyB8ICckJCcgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIHNoaWZ0VCgxMSk7ICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICB0cnlfUGFyZW50aGVzaXplZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICB0cnlfVmFyUmVmKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzMjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCQnCiAgICAgIHRyeV9Db250ZXh0SXRlbUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfTkNOYW1lKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BcnJheUxvb2t1cCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFycmF5TG9va3VwIiwgZTApOwogICAgc2hpZnQoNjkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgIGxvb2thaGVhZDFXKDMxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnWycKICAgIHNoaWZ0KDY5KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCg3MCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgbG9va2FoZWFkMVcoMzIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICddJwogICAgc2hpZnQoNzApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJyYXlMb29rdXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXJyYXlMb29rdXAoKQogIHsKICAgIHNoaWZ0VCg2OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBsb29rYWhlYWQxVygzMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ1snCiAgICBzaGlmdFQoNjkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCg3MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICBsb29rYWhlYWQxVygzMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ10nCiAgICBzaGlmdFQoNzApOyAgICAgICAgICAgICAgICAgICAgIC8vICddJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXJyYXlVbmJveGluZygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFycmF5VW5ib3hpbmciLCBlMCk7CiAgICBzaGlmdCg2OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMzIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICddJwogICAgc2hpZnQoNzApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJyYXlVbmJveGluZyIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BcnJheVVuYm94aW5nKCkKICB7CiAgICBzaGlmdFQoNjkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMzIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICddJwogICAgc2hpZnRUKDcwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0FyZ3VtZW50TGlzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFyZ3VtZW50TGlzdCIsIGUwKTsKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNzkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMzgpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FyZ3VtZW50KCk7CiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxVygxMDUpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICBsb29rYWhlYWQxVygyNzEpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfQXJndW1lbnQoKTsKICAgICAgfQogICAgfQogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJndW1lbnRMaXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FyZ3VtZW50TGlzdCgpCiAgewogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI3OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAzOCkgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHRyeV9Bcmd1bWVudCgpOwogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjcxKTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0FyZ3VtZW50KCk7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QcmVkaWNhdGVMaXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJlZGljYXRlTGlzdCIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDIyNyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOicgfAogICAgICBpZiAobDEgIT0gNjkpICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUHJlZGljYXRlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZWRpY2F0ZUxpc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUHJlZGljYXRlTGlzdCgpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjI3KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGlmIChsMSAhPSA2OSkgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X1ByZWRpY2F0ZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJlZGljYXRlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJlZGljYXRlIiwgZTApOwogICAgc2hpZnQoNjkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDcwKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZWRpY2F0ZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9QcmVkaWNhdGUoKQogIHsKICAgIHNoaWZ0VCg2OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDcwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0xpdGVyYWwoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJMaXRlcmFsIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJwogICAgICBwYXJzZV9Cb29sZWFuTGl0ZXJhbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICAgIHBhcnNlX051bGxMaXRlcmFsKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfTnVtZXJpY0xpdGVyYWwoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTGl0ZXJhbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9MaXRlcmFsKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIHNoaWZ0VCgxMSk7ICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgIGNhc2UgMjU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICAgIHRyeV9Cb29sZWFuTGl0ZXJhbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICAgIHRyeV9OdWxsTGl0ZXJhbCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9OdW1lcmljTGl0ZXJhbCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQm9vbGVhbkxpdGVyYWwoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJCb29sZWFuTGl0ZXJhbCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJwogICAgICBzaGlmdCgyNTUpOyAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkJvb2xlYW5MaXRlcmFsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Jvb2xlYW5MaXRlcmFsKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgICAgc2hpZnRUKDI1NSk7ICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDEzNSk7ICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTnVsbExpdGVyYWwoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOdWxsTGl0ZXJhbCIsIGUwKTsKICAgIHNoaWZ0KDE5Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk51bGxMaXRlcmFsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X051bGxMaXRlcmFsKCkKICB7CiAgICBzaGlmdFQoMTk3KTsgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTnVtZXJpY0xpdGVyYWwoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOdW1lcmljTGl0ZXJhbCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIHNoaWZ0KDgpOyAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBzaGlmdCg5KTsgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEwKTsgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTnVtZXJpY0xpdGVyYWwiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfTnVtZXJpY0xpdGVyYWwoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIHNoaWZ0VCg4KTsgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBzaGlmdFQoOSk7ICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxMCk7ICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZhclJlZigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlZhclJlZiIsIGUwKTsKICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFyUmVmIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ZhclJlZigpCiAgewogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1Zhck5hbWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYXJOYW1lIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhck5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVmFyTmFtZSgpCiAgewogICAgdHJ5X0VRTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUGFyZW50aGVzaXplZEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQYXJlbnRoZXNpemVkRXhwciIsIGUwKTsKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMzgpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgIH0KICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhcmVudGhlc2l6ZWRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhcmVudGhlc2l6ZWRFeHByKCkKICB7CiAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgaWYgKGwxICE9IDM4KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgdHJ5X0V4cHIoKTsKICAgIH0KICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db250ZXh0SXRlbUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb250ZXh0SXRlbUV4cHIiLCBlMCk7CiAgICBzaGlmdCgzMik7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29udGV4dEl0ZW1FeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbnRleHRJdGVtRXhwcigpCiAgewogICAgc2hpZnRUKDMyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCQnCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PcmRlcmVkRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9yZGVyZWRFeHByIiwgZTApOwogICAgc2hpZnQoMjA2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlcmVkRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9PcmRlcmVkRXhwcigpCiAgewogICAgc2hpZnRUKDIwNik7ICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0VCgyODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1Vub3JkZXJlZEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJVbm9yZGVyZWRFeHByIiwgZTApOwogICAgc2hpZnQoMjYyKTsgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnQoMjgxKTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDI4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlVub3JkZXJlZEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVW5vcmRlcmVkRXhwcigpCiAgewogICAgc2hpZnRUKDI2Mik7ICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25DYWxsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25DYWxsIiwgZTApOwogICAgcGFyc2VfRnVuY3Rpb25OYW1lKCk7CiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Bcmd1bWVudExpc3QoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25DYWxsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Z1bmN0aW9uQ2FsbCgpCiAgewogICAgdHJ5X0Z1bmN0aW9uTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgdHJ5X0FyZ3VtZW50TGlzdCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXJndW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcmd1bWVudCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDY1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBwYXJzZV9Bcmd1bWVudFBsYWNlaG9sZGVyKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcmd1bWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Bcmd1bWVudCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIHRyeV9Bcmd1bWVudFBsYWNlaG9sZGVyKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0FyZ3VtZW50UGxhY2Vob2xkZXIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcmd1bWVudFBsYWNlaG9sZGVyIiwgZTApOwogICAgc2hpZnQoNjUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJndW1lbnRQbGFjZWhvbGRlciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Bcmd1bWVudFBsYWNlaG9sZGVyKCkKICB7CiAgICBzaGlmdFQoNjUpOyAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgY2FzZSA1NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgIGNhc2UgNjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICBwYXJzZV9EaXJlY3RDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0NvbXB1dGVkQ29uc3RydWN0b3IoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29uc3RydWN0b3IoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgY2FzZSA1NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgIGNhc2UgNjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICB0cnlfRGlyZWN0Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tcHV0ZWRDb25zdHJ1Y3RvcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGlyZWN0Q29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEaXJlY3RDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICBwYXJzZV9EaXJFbGVtQ29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBwYXJzZV9EaXJDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9EaXJQSUNvbnN0cnVjdG9yKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRpcmVjdENvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RpcmVjdENvbnN0cnVjdG9yKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICAgdHJ5X0RpckVsZW1Db25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIHRyeV9EaXJDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRGlyUElDb25zdHJ1Y3RvcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGlyRWxlbUNvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRGlyRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoNTUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgIGxvb2thaGVhZDEoNCk7ICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHNoaWZ0KDIwKTsgICAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHBhcnNlX0RpckF0dHJpYnV0ZUxpc3QoKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDQ5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgc2hpZnQoNDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJy8+JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDYyKTsgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMSgxOTYpOyAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbiB8IFByZWRlZmluZWRFbnRpdHlSZWYgfCBFbGVtZW50Q29udGVudENoYXIgfCBDaGFyUmVmIHwgJzwnIHwKICAgICAgICBpZiAobDEgPT0gNTcpICAgICAgICAgICAgICAgLy8gJzwvJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBwYXJzZV9EaXJFbGVtQ29udGVudCgpOwogICAgICB9CiAgICAgIHNoaWZ0KDU3KTsgICAgICAgICAgICAgICAgICAgIC8vICc8LycKICAgICAgbG9va2FoZWFkMSg0KTsgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgc2hpZnQoMjApOyAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgbG9va2FoZWFkMSgxMik7ICAgICAgICAgICAgICAgLy8gUyB8ICc+JwogICAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIHsKICAgICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgLy8gUwogICAgICB9CiAgICAgIGxvb2thaGVhZDEoOCk7ICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBzaGlmdCg2Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGlyRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RpckVsZW1Db25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDU1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgIGxvb2thaGVhZDEoNCk7ICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHNoaWZ0VCgyMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHRyeV9EaXJBdHRyaWJ1dGVMaXN0KCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA0OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLz4nCiAgICAgIHNoaWZ0VCg0OSk7ICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoNjIpOyAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDEoMTk2KTsgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb24gfCBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRWxlbWVudENvbnRlbnRDaGFyIHwgQ2hhclJlZiB8ICc8JyB8CiAgICAgICAgaWYgKGwxID09IDU3KSAgICAgICAgICAgICAgIC8vICc8LycKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdHJ5X0RpckVsZW1Db250ZW50KCk7CiAgICAgIH0KICAgICAgc2hpZnRUKDU3KTsgICAgICAgICAgICAgICAgICAgLy8gJzwvJwogICAgICBsb29rYWhlYWQxKDQpOyAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICBzaGlmdFQoMjApOyAgICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICBsb29rYWhlYWQxKDEyKTsgICAgICAgICAgICAgICAvLyBTIHwgJz4nCiAgICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAgIC8vIFMKICAgICAgewogICAgICAgIHNoaWZ0VCgyMSk7ICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIH0KICAgICAgbG9va2FoZWFkMSg4KTsgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgIHNoaWZ0VCg2Mik7ICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGlyQXR0cmlidXRlTGlzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRpckF0dHJpYnV0ZUxpc3QiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxKDE5KTsgICAgICAgICAgICAgICAvLyBTIHwgJy8+JyB8ICc+JwogICAgICBpZiAobDEgIT0gMjEpICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIGxvb2thaGVhZDEoOTQpOyAgICAgICAgICAgICAgIC8vIFFOYW1lIHwgUyB8ICcvPicgfCAnPicKICAgICAgaWYgKGwxID09IDIwKSAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgewogICAgICAgIHNoaWZ0KDIwKTsgICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICAgIGxvb2thaGVhZDEoMTEpOyAgICAgICAgICAgICAvLyBTIHwgJz0nCiAgICAgICAgaWYgKGwxID09IDIxKSAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB7CiAgICAgICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB9CiAgICAgICAgbG9va2FoZWFkMSg3KTsgICAgICAgICAgICAgIC8vICc9JwogICAgICAgIHNoaWZ0KDYxKTsgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgICBsb29rYWhlYWQxKDE4KTsgICAgICAgICAgICAgLy8gUyB8ICciJyB8ICInIgogICAgICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgewogICAgICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgfQogICAgICAgIHBhcnNlX0RpckF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGlyQXR0cmlidXRlTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EaXJBdHRyaWJ1dGVMaXN0KCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxKDE5KTsgICAgICAgICAgICAgICAvLyBTIHwgJy8+JyB8ICc+JwogICAgICBpZiAobDEgIT0gMjEpICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMjEpOyAgICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIGxvb2thaGVhZDEoOTQpOyAgICAgICAgICAgICAgIC8vIFFOYW1lIHwgUyB8ICcvPicgfCAnPicKICAgICAgaWYgKGwxID09IDIwKSAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgewogICAgICAgIHNoaWZ0VCgyMCk7ICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICAgIGxvb2thaGVhZDEoMTEpOyAgICAgICAgICAgICAvLyBTIHwgJz0nCiAgICAgICAgaWYgKGwxID09IDIxKSAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoMjEpOyAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB9CiAgICAgICAgbG9va2FoZWFkMSg3KTsgICAgICAgICAgICAgIC8vICc9JwogICAgICAgIHNoaWZ0VCg2MSk7ICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgICBsb29rYWhlYWQxKDE4KTsgICAgICAgICAgICAgLy8gUyB8ICciJyB8ICInIgogICAgICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDIxKTsgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgfQogICAgICAgIHRyeV9EaXJBdHRyaWJ1dGVWYWx1ZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EaXJBdHRyaWJ1dGVWYWx1ZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRpckF0dHJpYnV0ZVZhbHVlIiwgZTApOwogICAgbG9va2FoZWFkMSgxNCk7ICAgICAgICAgICAgICAgICAvLyAnIicgfCAiJyIKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgyOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDEoMTg1KTsgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlUXVvdCB8IFF1b3RBdHRyQ29udGVudENoYXIgfCBDaGFyUmVmIHwgJyInIHwgJ3snIHwKICAgICAgICBpZiAobDEgPT0gMjgpICAgICAgICAgICAgICAgLy8gJyInCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgMTM6ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgICAgICBzaGlmdCgxMyk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBwYXJzZV9RdW90QXR0clZhbHVlQ29udGVudCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzaGlmdCgyOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDEoMTg2KTsgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlQXBvcyB8IEFwb3NBdHRyQ29udGVudENoYXIgfCBDaGFyUmVmIHwgIiciIHwgJ3snIHwKICAgICAgICBpZiAobDEgPT0gMzQpICAgICAgICAgICAgICAgLy8gIiciCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgMTQ6ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgICAgICBzaGlmdCgxNCk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBwYXJzZV9BcG9zQXR0clZhbHVlQ29udGVudCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGlyQXR0cmlidXRlVmFsdWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGlyQXR0cmlidXRlVmFsdWUoKQogIHsKICAgIGxvb2thaGVhZDEoMTQpOyAgICAgICAgICAgICAgICAgLy8gJyInIHwgIiciCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnRUKDI4KTsgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxKDE4NSk7ICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZVF1b3QgfCBRdW90QXR0ckNvbnRlbnRDaGFyIHwgQ2hhclJlZiB8ICciJyB8ICd7JyB8CiAgICAgICAgaWYgKGwxID09IDI4KSAgICAgICAgICAgICAgIC8vICciJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGwxKQogICAgICAgIHsKICAgICAgICBjYXNlIDEzOiAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlUXVvdAogICAgICAgICAgc2hpZnRUKDEzKTsgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdHJ5X1F1b3RBdHRyVmFsdWVDb250ZW50KCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNoaWZ0VCgyOCk7ICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMSgxODYpOyAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYgfCBFc2NhcGVBcG9zIHwgQXBvc0F0dHJDb250ZW50Q2hhciB8IENoYXJSZWYgfCAiJyIgfCAneycgfAogICAgICAgIGlmIChsMSA9PSAzNCkgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICB7CiAgICAgICAgY2FzZSAxNDogICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgICAgIHNoaWZ0VCgxNCk7ICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRyeV9BcG9zQXR0clZhbHVlQ29udGVudCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1F1b3RBdHRyVmFsdWVDb250ZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUXVvdEF0dHJWYWx1ZUNvbnRlbnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgICAgICAvLyBRdW90QXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0KDE2KTsgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9Db21tb25Db250ZW50KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1b3RBdHRyVmFsdWVDb250ZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1F1b3RBdHRyVmFsdWVDb250ZW50KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgICAgICAvLyBRdW90QXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0VCgxNik7ICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tbW9uQ29udGVudCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXBvc0F0dHJWYWx1ZUNvbnRlbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcG9zQXR0clZhbHVlQ29udGVudCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnQoMTcpOyAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0F0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0NvbW1vbkNvbnRlbnQoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXBvc0F0dHJWYWx1ZUNvbnRlbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXBvc0F0dHJWYWx1ZUNvbnRlbnQoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnRUKDE3KTsgICAgICAgICAgICAgICAgICAgLy8gQXBvc0F0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9Db21tb25Db250ZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EaXJFbGVtQ29udGVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRpckVsZW1Db250ZW50IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICBjYXNlIDU2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIHBhcnNlX0RpcmVjdENvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb24KICAgICAgc2hpZnQoNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50Q29udGVudENoYXIKICAgICAgc2hpZnQoMTUpOyAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQ29tbW9uQ29udGVudCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJEaXJFbGVtQ29udGVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EaXJFbGVtQ29udGVudCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICBjYXNlIDU2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIHRyeV9EaXJlY3RDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uCiAgICAgIHNoaWZ0VCg0KTsgICAgICAgICAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbgogICAgICBicmVhazsKICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIHNoaWZ0VCgxNSk7ICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnRDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9Db21tb25Db250ZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EaXJDb21tZW50Q29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEaXJDb21tZW50Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCg1Nik7ICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgbG9va2FoZWFkMSgxKTsgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgIHNoaWZ0KDIpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzCiAgICBsb29rYWhlYWQxKDYpOyAgICAgICAgICAgICAgICAgIC8vICctLT4nCiAgICBzaGlmdCg0NCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICctLT4nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRpckNvbW1lbnRDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EaXJDb21tZW50Q29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCg1Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICBsb29rYWhlYWQxKDEpOyAgICAgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cwogICAgc2hpZnRUKDIpOyAgICAgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgIGxvb2thaGVhZDEoNik7ICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICAgIHNoaWZ0VCg0NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0RpclBJQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEaXJQSUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoNjApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICBsb29rYWhlYWQxKDMpOyAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBsb29rYWhlYWQxKDEzKTsgICAgICAgICAgICAgICAgIC8vIFMgfCAnPz4nCiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUwogICAgICBsb29rYWhlYWQxKDIpOyAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzCiAgICAgIHNoaWZ0KDMpOyAgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgIH0KICAgIGxvb2thaGVhZDEoOSk7ICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgc2hpZnQoNjYpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRpclBJQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGlyUElDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDYwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICBsb29rYWhlYWQxKDMpOyAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBzaGlmdFQoMTgpOyAgICAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBsb29rYWhlYWQxKDEzKTsgICAgICAgICAgICAgICAgIC8vIFMgfCAnPz4nCiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnRUKDIxKTsgICAgICAgICAgICAgICAgICAgLy8gUwogICAgICBsb29rYWhlYWQxKDIpOyAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzCiAgICAgIHNoaWZ0VCgzKTsgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgIH0KICAgIGxvb2thaGVhZDEoOSk7ICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgc2hpZnRUKDY2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wdXRlZENvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcHV0ZWRDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgcGFyc2VfQ29tcERvY0NvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgcGFyc2VfQ29tcEVsZW1Db25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgcGFyc2VfQ29tcEF0dHJDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgcGFyc2VfQ29tcE5hbWVzcGFjZUNvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgcGFyc2VfQ29tcFRleHRDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHBhcnNlX0NvbXBDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9Db21wUElDb25zdHJ1Y3RvcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wdXRlZENvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbXB1dGVkQ29uc3RydWN0b3IoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgdHJ5X0NvbXBEb2NDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIHRyeV9Db21wRWxlbUNvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICB0cnlfQ29tcEF0dHJDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgdHJ5X0NvbXBOYW1lc3BhY2VDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIHRyeV9Db21wVGV4dENvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgdHJ5X0NvbXBDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tcFBJQ29uc3RydWN0b3IoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBFbGVtQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21wRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoMTIyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDI0OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgICAgc2hpZnQoMjg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FUU5hbWUoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyODApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMjg3KSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0NvbnRlbnRFeHByKCk7CiAgICB9CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbXBFbGVtQ29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCgxMjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICBsb29rYWhlYWQxVygyNDkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHIoKTsKICAgICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0VRTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI4MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAyODcpICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB7CiAgICAgIHRyeV9Db250ZW50RXhwcigpOwogICAgfQogICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBOYW1lc3BhY2VDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBOYW1lc3BhY2VDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHNoaWZ0KDE4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDI0MSk7ICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1ByZWZpeEV4cHIoKTsKICAgICAgc2hpZnQoMjg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QcmVmaXgoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9VUklFeHByKCk7CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wTmFtZXNwYWNlQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tcE5hbWVzcGFjZUNvbnN0cnVjdG9yKCkKICB7CiAgICBzaGlmdFQoMTg3KTsgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICBsb29rYWhlYWQxVygyNDEpOyAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X1ByZWZpeEV4cHIoKTsKICAgICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X1ByZWZpeCgpOwogICAgfQogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9VUklFeHByKCk7CiAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJlZml4KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJlZml4IiwgZTApOwogICAgcGFyc2VfTkNOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZWZpeCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9QcmVmaXgoKQogIHsKICAgIHRyeV9OQ05hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ByZWZpeEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVmaXhFeHByIiwgZTApOwogICAgcGFyc2VfRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmVmaXhFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ByZWZpeEV4cHIoKQogIHsKICAgIHRyeV9FeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9VUklFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVVJJRXhwciIsIGUwKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVVJJRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9VUklFeHByKCkKICB7CiAgICB0cnlfRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25JdGVtRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZ1bmN0aW9uSXRlbUV4cHIiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGxvb2thaGVhZDJXKDk1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDMzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSAxODA2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcoJwogICAgICBwYXJzZV9JbmxpbmVGdW5jdGlvbkV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9OYW1lZEZ1bmN0aW9uUmVmKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZ1bmN0aW9uSXRlbUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRnVuY3Rpb25JdGVtRXhwcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBsb29rYWhlYWQyVyg5NSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJScKICAgIGNhc2UgMTgwNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnKCcKICAgICAgdHJ5X0lubGluZUZ1bmN0aW9uRXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9OYW1lZEZ1bmN0aW9uUmVmKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OYW1lZEZ1bmN0aW9uUmVmKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTmFtZWRGdW5jdGlvblJlZiIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyg6JwogICAgc2hpZnQoMjkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnIycKICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOYW1lZEZ1bmN0aW9uUmVmIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05hbWVkRnVuY3Rpb25SZWYoKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDIwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoOicKICAgIHNoaWZ0VCgyOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyMnCiAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0VCg4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lubGluZUZ1bmN0aW9uRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklubGluZUZ1bmN0aW9uRXhwciIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnJScgfCAnKDonIHwgJ2Z1bmN0aW9uJwogICAgICBpZiAobDEgIT0gMzMpICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQW5ub3RhdGlvbigpOwogICAgfQogICAgc2hpZnQoMTQ3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoOTgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICcpJwogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QYXJhbUxpc3QoKTsKICAgIH0KICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBsb29rYWhlYWQxVygxMTUpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJyB8ICd7JwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRnVuY3Rpb25Cb2R5KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklubGluZUZ1bmN0aW9uRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JbmxpbmVGdW5jdGlvbkV4cHIoKQogIHsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnJScgfCAnKDonIHwgJ2Z1bmN0aW9uJwogICAgICBpZiAobDEgIT0gMzMpICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRyeV9Bbm5vdGF0aW9uKCk7CiAgICB9CiAgICBzaGlmdFQoMTQ3KTsgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVyg5OCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJyknCiAgICBpZiAobDEgPT0gMzEpICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgewogICAgICB0cnlfUGFyYW1MaXN0KCk7CiAgICB9CiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMTE1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAneycKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICBzaGlmdFQoODApOyAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgdHJ5X0Z1bmN0aW9uQm9keSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2luZ2xlVHlwZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNpbmdsZVR5cGUiLCBlMCk7CiAgICBwYXJzZV9TaW1wbGVUeXBlTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjI1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSA2NSkgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICB7CiAgICAgIHNoaWZ0KDY1KTsgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTaW5nbGVUeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1NpbmdsZVR5cGUoKQogIHsKICAgIHRyeV9TaW1wbGVUeXBlTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjI1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSA2NSkgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICB7CiAgICAgIHNoaWZ0VCg2NSk7ICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHlwZURlY2xhcmF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHlwZURlY2xhcmF0aW9uIiwgZTApOwogICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBsb29rYWhlYWQxVygyNTMpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUeXBlRGVjbGFyYXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHlwZURlY2xhcmF0aW9uKCkKICB7CiAgICBzaGlmdFQoODApOyAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2VxdWVuY2VUeXBlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2VxdWVuY2VUeXBlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDJXKDI1OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJyknIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBsb29rYWhlYWQyVygyMzIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTgwNDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnKCcKICAgIGNhc2UgMTk0OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJygnICcpJwogICAgICBpZiAobDEgPT0gMTI1KSAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHsKICAgICAgICBzaGlmdCgxMjUpOyAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9JdGVtVHlwZSgpOwogICAgICBsb29rYWhlYWQxVygyMjgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwgJzsnIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgY2FzZSA0MTogICAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgIGNhc2UgNjU6ICAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9PY2N1cnJlbmNlSW5kaWNhdG9yKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2VxdWVuY2VUeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1NlcXVlbmNlVHlwZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDJXKDI1OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJyknIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBsb29rYWhlYWQyVygyMzIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTgwNDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnKCcKICAgIGNhc2UgMTk0OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJygnICcpJwogICAgICBpZiAobDEgPT0gMTI1KSAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHsKICAgICAgICBzaGlmdFQoMTI1KTsgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfSXRlbVR5cGUoKTsKICAgICAgbG9va2FoZWFkMVcoMjI4KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzo9JyB8ICc7JyB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICBjYXNlIDY1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgICAgICB0cnlfT2NjdXJyZW5jZUluZGljYXRvcigpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PY2N1cnJlbmNlSW5kaWNhdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT2NjdXJyZW5jZUluZGljYXRvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDY1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBzaGlmdCg2NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgICAgYnJlYWs7CiAgICBjYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBzaGlmdCg0MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT2NjdXJyZW5jZUluZGljYXRvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9PY2N1cnJlbmNlSW5kaWNhdG9yKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA2NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgICAgc2hpZnRUKDY1KTsgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIGJyZWFrOwogICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgc2hpZnRUKDQwKTsgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JdGVtVHlwZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkl0ZW1UeXBlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgY2FzZSAxNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgY2FzZSAxODg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGxvb2thaGVhZDJXKDIzMik7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTI4NzkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgRU9GCiAgICAgfHwgbGsgPT0gMTI5NjkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nIEVPRgogICAgIHx8IGxrID09IDEyOTk4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyBFT0YKICAgICB8fCBsayA9PSAxMzA0NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgRU9GCiAgICAgfHwgbGsgPT0gMTM5MDMgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJyE9JwogICAgIHx8IGxrID09IDEzOTkzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnIT0nCiAgICAgfHwgbGsgPT0gMTQwMjIgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICchPScKICAgICB8fCBsayA9PSAxNDA3MSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJyE9JwogICAgIHx8IGxrID09IDE5NTM1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcpJwogICAgIHx8IGxrID09IDE5NjI1ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnKScKICAgICB8fCBsayA9PSAxOTY1NCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJyknCiAgICAgfHwgbGsgPT0gMTk3MDMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcpJwogICAgIHx8IGxrID09IDIwMDQ3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcqJwogICAgIHx8IGxrID09IDIwMTM3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnKicKICAgICB8fCBsayA9PSAyMDE2NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJyonCiAgICAgfHwgbGsgPT0gMjAyMTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcqJwogICAgIHx8IGxrID09IDIwNTU5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcqJwogICAgIHx8IGxrID09IDIwNjQ5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnKicKICAgICB8fCBsayA9PSAyMDY3OCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJyonCiAgICAgfHwgbGsgPT0gMjA3MjcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcqJwogICAgIHx8IGxrID09IDIxMDcxICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcrJwogICAgIHx8IGxrID09IDIxMTYxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnKycKICAgICB8fCBsayA9PSAyMTE5MCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJysnCiAgICAgfHwgbGsgPT0gMjEyMzkgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcrJwogICAgIHx8IGxrID09IDIxNTgzICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcsJwogICAgIHx8IGxrID09IDIxNjczICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnLCcKICAgICB8fCBsayA9PSAyMTcwMiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJywnCiAgICAgfHwgbGsgPT0gMjE3NTEgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcsJwogICAgIHx8IGxrID09IDIyMDk1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICctJwogICAgIHx8IGxrID09IDIyMTg1ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnLScKICAgICB8fCBsayA9PSAyMjIxNCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJy0nCiAgICAgfHwgbGsgPT0gMjIyNjMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICctJwogICAgIHx8IGxrID09IDI1Njc5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc6JwogICAgIHx8IGxrID09IDI1NzY5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnOicKICAgICB8fCBsayA9PSAyNTc5OCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJzonCiAgICAgfHwgbGsgPT0gMjU4NDcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc6JwogICAgIHx8IGxrID09IDI3MjE1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc6PScKICAgICB8fCBsayA9PSAyNzMwNSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJzo9JwogICAgIHx8IGxrID09IDI3MzM0ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnOj0nCiAgICAgfHwgbGsgPT0gMjczODMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc6PScKICAgICB8fCBsayA9PSAyNzcyNyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnOycKICAgICB8fCBsayA9PSAyNzgxNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJzsnCiAgICAgfHwgbGsgPT0gMjc4NDYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc7JwogICAgIHx8IGxrID09IDI3ODk1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnOycKICAgICB8fCBsayA9PSAyODIzOSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnPCcKICAgICB8fCBsayA9PSAyODMyOSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJzwnCiAgICAgfHwgbGsgPT0gMjgzNTggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc8JwogICAgIHx8IGxrID09IDI4NDA3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnPCcKICAgICB8fCBsayA9PSAyOTc3NSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnPDwnCiAgICAgfHwgbGsgPT0gMjk4NjUgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc8PCcKICAgICB8fCBsayA9PSAyOTg5NCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJzw8JwogICAgIHx8IGxrID09IDI5OTQzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnPDwnCiAgICAgfHwgbGsgPT0gMzAyODcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJzw9JwogICAgIHx8IGxrID09IDMwMzc3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnPD0nCiAgICAgfHwgbGsgPT0gMzA0MDYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc8PScKICAgICB8fCBsayA9PSAzMDQ1NSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJzw9JwogICAgIHx8IGxrID09IDMxMzExICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc9JwogICAgIHx8IGxrID09IDMxNDAxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnPScKICAgICB8fCBsayA9PSAzMTQzMCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJz0nCiAgICAgfHwgbGsgPT0gMzE0NzkgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc9JwogICAgIHx8IGxrID09IDMxODIzICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc+JwogICAgIHx8IGxrID09IDMxOTEzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnPicKICAgICB8fCBsayA9PSAzMTk0MiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJz4nCiAgICAgfHwgbGsgPT0gMzE5OTEgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc+JwogICAgIHx8IGxrID09IDMyMzM1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc+PScKICAgICB8fCBsayA9PSAzMjQyNSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJz49JwogICAgIHx8IGxrID09IDMyNDU0ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnPj0nCiAgICAgfHwgbGsgPT0gMzI1MDMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc+PScKICAgICB8fCBsayA9PSAzMjg0NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnPj4nCiAgICAgfHwgbGsgPT0gMzI5MzcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc+PicKICAgICB8fCBsayA9PSAzMjk2NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJz4+JwogICAgIHx8IGxrID09IDMzMDE1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnPj4nCiAgICAgfHwgbGsgPT0gMzMzNTkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJz8nCiAgICAgfHwgbGsgPT0gMzM0NDkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc/JwogICAgIHx8IGxrID09IDMzNDc4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnPycKICAgICB8fCBsayA9PSAzMzUyNyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJz8nCiAgICAgfHwgbGsgPT0gMzU5MTkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ10nCiAgICAgfHwgbGsgPT0gMzYwMDkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICddJwogICAgIHx8IGxrID09IDM2MDM4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnXScKICAgICB8fCBsayA9PSAzNjA4NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ10nCiAgICAgfHwgbGsgPT0gMzY0MzEgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2FmdGVyJwogICAgIHx8IGxrID09IDM2NTIxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY1NTAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjU5OSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2FmdGVyJwogICAgIHx8IGxrID09IDM3NDU1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdhbGxvd2luZycKICAgICB8fCBsayA9PSAzNzU0NSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM3NTc0ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzc2MjMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdhbGxvd2luZycKICAgICB8fCBsayA9PSAzODk5MSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnYW5kJwogICAgIHx8IGxrID09IDM5MDgxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnYW5kJwogICAgIHx8IGxrID09IDM5MTEwICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYW5kJwogICAgIHx8IGxrID09IDM5MTU5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnYW5kJwogICAgIHx8IGxrID09IDQxMDM5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdhcycKICAgICB8fCBsayA9PSA0MTEyOSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2FzJwogICAgIHx8IGxrID09IDQxMTU4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYXMnCiAgICAgfHwgbGsgPT0gNDEyMDcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdhcycKICAgICB8fCBsayA9PSA0MTU1MSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNjQxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNjcwICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNzE5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQyMDYzICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdhdCcKICAgICB8fCBsayA9PSA0MjE1MyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2F0JwogICAgIHx8IGxrID09IDQyMTgyICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYXQnCiAgICAgfHwgbGsgPT0gNDIyMzEgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdhdCcKICAgICB8fCBsayA9PSA0MzU5OSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNjg5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNzE4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzNzY3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ1NjQ3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdjYXNlJwogICAgIHx8IGxrID09IDQ1NzM3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTc2NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU4MTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdjYXNlJwogICAgIHx8IGxrID09IDQ4NzE5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg4MDkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg4MzggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDg4ODcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNTEyNzkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2NvbnRhaW5zJwogICAgIHx8IGxrID09IDUxMzY5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnY29udGFpbnMnCiAgICAgfHwgbGsgPT0gNTEzOTggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdjb250YWlucycKICAgICB8fCBsayA9PSA1MTQ0NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2NvbnRhaW5zJwogICAgIHx8IGxrID09IDU0MzUxICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdjb3VudCcKICAgICB8fCBsayA9PSA1NDQ0MSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2NvdW50JwogICAgIHx8IGxrID09IDU0NDcwICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ1MTkgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdjb3VudCcKICAgICB8fCBsayA9PSA1NjM5OSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjQ4OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY1MTggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2NTY3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1ODQ0NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1ODUzNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTg1NjYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NjE1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTAwNyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZGl2JwogICAgIHx8IGxrID09IDYxMDk3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZGl2JwogICAgIHx8IGxrID09IDYxMTI2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZGl2JwogICAgIHx8IGxrID09IDYxMTc1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZGl2JwogICAgIHx8IGxrID09IDYzMDU1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdlbHNlJwogICAgIHx8IGxrID09IDYzMTQ1ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzE3NCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMyMjMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdlbHNlJwogICAgIHx8IGxrID09IDYzNTY3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdlbXB0eScKICAgICB8fCBsayA9PSA2MzY1NyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNjg2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjM3MzUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdlbXB0eScKICAgICB8fCBsayA9PSA2NTEwMyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZW5kJwogICAgIHx8IGxrID09IDY1MTkzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZW5kJwogICAgIHx8IGxrID09IDY1MjIyICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZW5kJwogICAgIHx8IGxrID09IDY1MjcxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZW5kJwogICAgIHx8IGxrID09IDY2MTI3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdlcScKICAgICB8fCBsayA9PSA2NjIxNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2VxJwogICAgIHx8IGxrID09IDY2MjQ2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZXEnCiAgICAgfHwgbGsgPT0gNjYyOTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdlcScKICAgICB8fCBsayA9PSA2NzY2MyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NzUzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NzgyICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3ODMxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY4Njg3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2ODc3NyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY4ODA2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjg4NTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA3MTI0NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZm9yJwogICAgIHx8IGxrID09IDcxMzM3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZm9yJwogICAgIHx8IGxrID09IDcxMzY2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZm9yJwogICAgIHx8IGxrID09IDcxNDE1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZm9yJwogICAgIHx8IGxrID09IDc1ODU1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdnZScKICAgICB8fCBsayA9PSA3NTk0NSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2dlJwogICAgIHx8IGxrID09IDc1OTc0ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzYwMjMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdnZScKICAgICB8fCBsayA9PSA3Njg3OSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY5NjkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdncm91cCcKICAgICB8fCBsayA9PSA3Njk5OCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3MDQ3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzc5MDMgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2d0JwogICAgIHx8IGxrID09IDc3OTkzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzgwMjIgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdndCcKICAgICB8fCBsayA9PSA3ODA3MSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2d0JwogICAgIHx8IGxrID09IDc4NDE1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdpZGl2JwogICAgIHx8IGxrID09IDc4NTA1ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnaWRpdicKICAgICB8fCBsayA9PSA3ODUzNCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzg1ODMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdpZGl2JwogICAgIHx8IGxrID09IDc5OTUxICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdpbicKICAgICB8fCBsayA9PSA4MDA0MSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2luJwogICAgIHx8IGxrID09IDgwMDcwICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnaW4nCiAgICAgfHwgbGsgPT0gODAxMTkgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdpbicKICAgICB8fCBsayA9PSA4MzAyMyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMxMTMgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzE0MiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMTkxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODQwNDcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDEzNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDE2NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDIxNSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4NDU1OSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnaW50bycKICAgICB8fCBsayA9PSA4NDY0OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2ludG8nCiAgICAgfHwgbGsgPT0gODQ2NzggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdpbnRvJwogICAgIHx8IGxrID09IDg0NzI3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnaW50bycKICAgICB8fCBsayA9PSA4NTA3MSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnaXMnCiAgICAgfHwgbGsgPT0gODUxNjEgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdpcycKICAgICB8fCBsayA9PSA4NTE5MCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2lzJwogICAgIHx8IGxrID09IDg1MjM5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnaXMnCiAgICAgfHwgbGsgPT0gODk2NzkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2xlJwogICAgIHx8IGxrID09IDg5NzY5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnbGUnCiAgICAgfHwgbGsgPT0gODk3OTggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdsZScKICAgICB8fCBsayA9PSA4OTg0NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2xlJwogICAgIHx8IGxrID09IDkwNzAzICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdsZXQnCiAgICAgfHwgbGsgPT0gOTA3OTMgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdsZXQnCiAgICAgfHwgbGsgPT0gOTA4MjIgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdsZXQnCiAgICAgfHwgbGsgPT0gOTA4NzEgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdsZXQnCiAgICAgfHwgbGsgPT0gOTI3NTEgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2x0JwogICAgIHx8IGxrID09IDkyODQxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnbHQnCiAgICAgfHwgbGsgPT0gOTI4NzAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdsdCcKICAgICB8fCBsayA9PSA5MjkxOSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2x0JwogICAgIHx8IGxrID09IDkzNzc1ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdtb2QnCiAgICAgfHwgbGsgPT0gOTM4NjUgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdtb2QnCiAgICAgfHwgbGsgPT0gOTM4OTQgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdtb2QnCiAgICAgfHwgbGsgPT0gOTM5NDMgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdtb2QnCiAgICAgfHwgbGsgPT0gOTQyODcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDM3NyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDQwNiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDQ1NSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5Njg0NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnbmUnCiAgICAgfHwgbGsgPT0gOTY5MzcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICduZScKICAgICB8fCBsayA9PSA5Njk2NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ25lJwogICAgIHx8IGxrID09IDk3MDE1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnbmUnCiAgICAgfHwgbGsgPT0gMTAzNTAzICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzNTkzICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdvbmx5JwogICAgIHx8IGxrID09IDEwMzYyMiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnb25seScKICAgICB8fCBsayA9PSAxMDM2NzEgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ29ubHknCiAgICAgfHwgbGsgPT0gMTA0NTI3ICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ29yJwogICAgIHx8IGxrID09IDEwNDYxNyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnb3InCiAgICAgfHwgbGsgPT0gMTA0NjQ2ICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdvcicKICAgICB8fCBsayA9PSAxMDQ2OTUgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ29yJwogICAgIHx8IGxrID09IDEwNTAzOSAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUxMjkgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ29yZGVyJwogICAgIHx8IGxrID09IDEwNTE1OCAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MjA3ICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdvcmRlcicKICAgICB8fCBsayA9PSAxMDcwODcgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAncGFyYWdyYXBocycKICAgICB8fCBsayA9PSAxMDcxNzcgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3BhcmFncmFwaHMnCiAgICAgfHwgbGsgPT0gMTA3MjA2ICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdwYXJhZ3JhcGhzJwogICAgIHx8IGxrID09IDEwNzI1NSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAncGFyYWdyYXBocycKICAgICB8fCBsayA9PSAxMTQ3NjcgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDg1NyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDg4NiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDkzNSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNjgxNSAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2OTA1ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2OTM0ICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE2OTgzICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE4ODYzICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3Njb3JlJwogICAgIHx8IGxrID09IDExODk1MyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE4OTgyICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdzY29yZScKICAgICB8fCBsayA9PSAxMTkwMzEgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3Njb3JlJwogICAgIHx8IGxrID09IDEyMTQyMyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdzZW50ZW5jZXMnCiAgICAgfHwgbGsgPT0gMTIxNTEzICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdzZW50ZW5jZXMnCiAgICAgfHwgbGsgPT0gMTIxNTQyICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdzZW50ZW5jZXMnCiAgICAgfHwgbGsgPT0gMTIxNTkxICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdzZW50ZW5jZXMnCiAgICAgfHwgbGsgPT0gMTIzNDcxICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM1NjEgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM1OTAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM2MzkgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjM5ODMgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MDczICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdzdGFydCcKICAgICB8fCBsayA9PSAxMjQxMDIgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDE1MSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI5MTAzICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3RpbWVzJwogICAgIHx8IGxrID09IDEyOTE5MyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAndGltZXMnCiAgICAgfHwgbGsgPT0gMTI5MjIyICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd0aW1lcycKICAgICB8fCBsayA9PSAxMjkyNzEgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3RpbWVzJwogICAgIHx8IGxrID09IDEyOTYxNSAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd0bycKICAgICB8fCBsayA9PSAxMjk3MDUgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3RvJwogICAgIHx8IGxrID09IDEyOTczNCAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NzgzICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd0bycKICAgICB8fCBsayA9PSAxMzMxOTkgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMzMjg5ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMzMTggICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzM2NyAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTM5MzQzICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTQzMyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5NDYyICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk1MTEgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3doZXJlJwogICAgIHx8IGxrID09IDE0MTM5MSAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd3aXRoJwogICAgIHx8IGxrID09IDE0MTQ4MSAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDE1MTAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQxNTU5ICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd3aXRoJwogICAgIHx8IGxrID09IDE0MjkyNyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd3b3JkcycKICAgICB8fCBsayA9PSAxNDMwMTcgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3dvcmRzJwogICAgIHx8IGxrID09IDE0MzA0NiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnd29yZHMnCiAgICAgfHwgbGsgPT0gMTQzMDk1ICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd3b3JkcycKICAgICB8fCBsayA9PSAxNDM5NTEgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAneycKICAgICB8fCBsayA9PSAxNDQwNDEgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3snCiAgICAgfHwgbGsgPT0gMTQ0MDcwICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd7JwogICAgIHx8IGxrID09IDE0NDExOSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAneycKICAgICB8fCBsayA9PSAxNDU0ODcgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnfCcKICAgICB8fCBsayA9PSAxNDU1NzcgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3wnCiAgICAgfHwgbGsgPT0gMTQ1NjA2ICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd8JwogICAgIHx8IGxrID09IDE0NTY1NSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnfCcKICAgICB8fCBsayA9PSAxNDU5OTkgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnfHwnCiAgICAgfHwgbGsgPT0gMTQ2MDg5ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICd8fCcKICAgICB8fCBsayA9PSAxNDYxMTggICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3x8JwogICAgIHx8IGxrID09IDE0NjE2NyAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnfHwnCiAgICAgfHwgbGsgPT0gMTQ2NTExICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3x9JwogICAgIHx8IGxrID09IDE0NjYwMSAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnfH0nCiAgICAgfHwgbGsgPT0gMTQ2NjMwICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd8fScKICAgICB8fCBsayA9PSAxNDY2NzkgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3x9JwogICAgIHx8IGxrID09IDE0NzAyMyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd9JwogICAgIHx8IGxrID09IDE0NzExMyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnfScKICAgICB8fCBsayA9PSAxNDcxNDIgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ30nCiAgICAgfHwgbGsgPT0gMTQ3MTkxKSAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDYsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0F0b21pY09yVW5pb25UeXBlKCk7CiAgICAgICAgICBsayA9IC00OwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDRBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0pTT05UZXN0KCk7CiAgICAgICAgICAgIGxrID0gLTY7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDZBKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC03OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSg2LCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxODAwMzogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTgwMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcoJwogICAgY2FzZSAxODA0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJygnCiAgICBjYXNlIDE4MDQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnKCcKICAgIGNhc2UgMTgxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnKCcKICAgIGNhc2UgMTgxMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICcoJwogICAgY2FzZSAxODE0MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJygnCiAgICBjYXNlIDE4MTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTgxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnKCcKICAgIGNhc2UgMTgxNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnICcoJwogICAgICBwYXJzZV9LaW5kVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgwODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nICcoJwogICAgICBzaGlmdCgxNjcpOyAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBicmVhazsKICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBjYXNlIDE4MDY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJygnCiAgICAgIHBhcnNlX0Z1bmN0aW9uVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIHBhcnNlX1BhcmVudGhlc2l6ZWRJdGVtVHlwZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTY6CiAgICBjYXNlIDE3OTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJygnCiAgICBjYXNlIDE4MDg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICcoJwogICAgY2FzZSAxODExODogICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnKCcKICAgICAgcGFyc2VfSlNPTlRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC03OgogICAgY2FzZSAxODE2NzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnKCcKICAgICAgcGFyc2VfU3RydWN0dXJlZEl0ZW1UZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQXRvbWljT3JVbmlvblR5cGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSXRlbVR5cGUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSXRlbVR5cGUoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBsb29rYWhlYWQyVygyMzIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDEyODc5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknIEVPRgogICAgIHx8IGxrID09IDEyOTY5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyBFT0YKICAgICB8fCBsayA9PSAxMjk5OCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgRU9GCiAgICAgfHwgbGsgPT0gMTMwNDcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nIEVPRgogICAgIHx8IGxrID09IDEzOTAzICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICchPScKICAgICB8fCBsayA9PSAxMzk5MyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyE9JwogICAgIHx8IGxrID09IDE0MDIyICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnIT0nCiAgICAgfHwgbGsgPT0gMTQwNzEgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICchPScKICAgICB8fCBsayA9PSAxOTUzNSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnKScKICAgICB8fCBsayA9PSAxOTYyNSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyknCiAgICAgfHwgbGsgPT0gMTk2NTQgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcpJwogICAgIHx8IGxrID09IDE5NzAzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnKScKICAgICB8fCBsayA9PSAyMDA0NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnKicKICAgICB8fCBsayA9PSAyMDEzNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyonCiAgICAgfHwgbGsgPT0gMjAxNjYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcqJwogICAgIHx8IGxrID09IDIwMjE1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnKicKICAgICB8fCBsayA9PSAyMDU1OSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnKicKICAgICB8fCBsayA9PSAyMDY0OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyonCiAgICAgfHwgbGsgPT0gMjA2NzggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcqJwogICAgIHx8IGxrID09IDIwNzI3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnKicKICAgICB8fCBsayA9PSAyMTA3MSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnKycKICAgICB8fCBsayA9PSAyMTE2MSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJysnCiAgICAgfHwgbGsgPT0gMjExOTAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcrJwogICAgIHx8IGxrID09IDIxMjM5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnKycKICAgICB8fCBsayA9PSAyMTU4MyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnLCcKICAgICB8fCBsayA9PSAyMTY3MyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJywnCiAgICAgfHwgbGsgPT0gMjE3MDIgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcsJwogICAgIHx8IGxrID09IDIxNzUxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnLCcKICAgICB8fCBsayA9PSAyMjA5NSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnLScKICAgICB8fCBsayA9PSAyMjE4NSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJy0nCiAgICAgfHwgbGsgPT0gMjIyMTQgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICctJwogICAgIHx8IGxrID09IDIyMjYzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnLScKICAgICB8fCBsayA9PSAyNTY3OSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnOicKICAgICB8fCBsayA9PSAyNTc2OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJzonCiAgICAgfHwgbGsgPT0gMjU3OTggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc6JwogICAgIHx8IGxrID09IDI1ODQ3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnOicKICAgICB8fCBsayA9PSAyNzIxNSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnOj0nCiAgICAgfHwgbGsgPT0gMjczMDUgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc6PScKICAgICB8fCBsayA9PSAyNzMzNCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJzo9JwogICAgIHx8IGxrID09IDI3MzgzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnOj0nCiAgICAgfHwgbGsgPT0gMjc3MjcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJzsnCiAgICAgfHwgbGsgPT0gMjc4MTcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc7JwogICAgIHx8IGxrID09IDI3ODQ2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnOycKICAgICB8fCBsayA9PSAyNzg5NSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJzsnCiAgICAgfHwgbGsgPT0gMjgyMzkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJzwnCiAgICAgfHwgbGsgPT0gMjgzMjkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc8JwogICAgIHx8IGxrID09IDI4MzU4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnPCcKICAgICB8fCBsayA9PSAyODQwNyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJzwnCiAgICAgfHwgbGsgPT0gMjk3NzUgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJzw8JwogICAgIHx8IGxrID09IDI5ODY1ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnPDwnCiAgICAgfHwgbGsgPT0gMjk4OTQgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc8PCcKICAgICB8fCBsayA9PSAyOTk0MyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJzw8JwogICAgIHx8IGxrID09IDMwMjg3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc8PScKICAgICB8fCBsayA9PSAzMDM3NyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJzw9JwogICAgIHx8IGxrID09IDMwNDA2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnPD0nCiAgICAgfHwgbGsgPT0gMzA0NTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc8PScKICAgICB8fCBsayA9PSAzMTMxMSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnPScKICAgICB8fCBsayA9PSAzMTQwMSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJz0nCiAgICAgfHwgbGsgPT0gMzE0MzAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc9JwogICAgIHx8IGxrID09IDMxNDc5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnPScKICAgICB8fCBsayA9PSAzMTgyMyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnPicKICAgICB8fCBsayA9PSAzMTkxMyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJz4nCiAgICAgfHwgbGsgPT0gMzE5NDIgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc+JwogICAgIHx8IGxrID09IDMxOTkxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnPicKICAgICB8fCBsayA9PSAzMjMzNSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnPj0nCiAgICAgfHwgbGsgPT0gMzI0MjUgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc+PScKICAgICB8fCBsayA9PSAzMjQ1NCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJz49JwogICAgIHx8IGxrID09IDMyNTAzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnPj0nCiAgICAgfHwgbGsgPT0gMzI4NDcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJz4+JwogICAgIHx8IGxrID09IDMyOTM3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnPj4nCiAgICAgfHwgbGsgPT0gMzI5NjYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc+PicKICAgICB8fCBsayA9PSAzMzAxNSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJz4+JwogICAgIHx8IGxrID09IDMzMzU5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICc/JwogICAgIHx8IGxrID09IDMzNDQ5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnPycKICAgICB8fCBsayA9PSAzMzQ3OCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJz8nCiAgICAgfHwgbGsgPT0gMzM1MjcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc/JwogICAgIHx8IGxrID09IDM1OTE5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICddJwogICAgIHx8IGxrID09IDM2MDA5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnXScKICAgICB8fCBsayA9PSAzNjAzOCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ10nCiAgICAgfHwgbGsgPT0gMzYwODcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICddJwogICAgIHx8IGxrID09IDM2NDMxICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdhZnRlcicKICAgICB8fCBsayA9PSAzNjUyMSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2FmdGVyJwogICAgIHx8IGxrID09IDM2NTUwICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY1OTkgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdhZnRlcicKICAgICB8fCBsayA9PSAzNzQ1NSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzc1NDUgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdhbGxvd2luZycKICAgICB8fCBsayA9PSAzNzU3NCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM3NjIzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzg5OTEgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2FuZCcKICAgICB8fCBsayA9PSAzOTA4MSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2FuZCcKICAgICB8fCBsayA9PSAzOTExMCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2FuZCcKICAgICB8fCBsayA9PSAzOTE1OSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2FuZCcKICAgICB8fCBsayA9PSA0MTAzOSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnYXMnCiAgICAgfHwgbGsgPT0gNDExMjkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdhcycKICAgICB8fCBsayA9PSA0MTE1OCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2FzJwogICAgIHx8IGxrID09IDQxMjA3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnYXMnCiAgICAgfHwgbGsgPT0gNDE1NTEgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTY0MSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTY3MCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTcxOSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjA2MyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnYXQnCiAgICAgfHwgbGsgPT0gNDIxNTMgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdhdCcKICAgICB8fCBsayA9PSA0MjE4MiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2F0JwogICAgIHx8IGxrID09IDQyMjMxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnYXQnCiAgICAgfHwgbGsgPT0gNDM1OTkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzY4OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzcxOCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0Mzc2NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0NTY0NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnY2FzZScKICAgICB8fCBsayA9PSA0NTczNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU3NjYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdjYXNlJwogICAgIHx8IGxrID09IDQ1ODE1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnY2FzZScKICAgICB8fCBsayA9PSA0ODcxOSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4ODA5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4ODM4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4ODg3ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDUxMjc5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdjb250YWlucycKICAgICB8fCBsayA9PSA1MTM2OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2NvbnRhaW5zJwogICAgIHx8IGxrID09IDUxMzk4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnY29udGFpbnMnCiAgICAgfHwgbGsgPT0gNTE0NDcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdjb250YWlucycKICAgICB8fCBsayA9PSA1NDM1MSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ0NDEgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdjb3VudCcKICAgICB8fCBsayA9PSA1NDQ3MCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2NvdW50JwogICAgIHx8IGxrID09IDU0NTE5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTYzOTkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY0ODkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2NTE4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjU2NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTg0NDcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTg1MzcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4NTY2ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1ODYxNSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjEwMDcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2RpdicKICAgICB8fCBsayA9PSA2MTA5NyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2RpdicKICAgICB8fCBsayA9PSA2MTEyNiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2RpdicKICAgICB8fCBsayA9PSA2MTE3NSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2RpdicKICAgICB8fCBsayA9PSA2MzA1NSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZWxzZScKICAgICB8fCBsayA9PSA2MzE0NSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMxNzQgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdlbHNlJwogICAgIHx8IGxrID09IDYzMjIzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzU2NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjM2NTcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdlbXB0eScKICAgICB8fCBsayA9PSA2MzY4NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNzM1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjUxMDMgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2VuZCcKICAgICB8fCBsayA9PSA2NTE5MyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2VuZCcKICAgICB8fCBsayA9PSA2NTIyMiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2VuZCcKICAgICB8fCBsayA9PSA2NTI3MSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2VuZCcKICAgICB8fCBsayA9PSA2NjEyNyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZXEnCiAgICAgfHwgbGsgPT0gNjYyMTcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdlcScKICAgICB8fCBsayA9PSA2NjI0NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2VxJwogICAgIHx8IGxrID09IDY2Mjk1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZXEnCiAgICAgfHwgbGsgPT0gNjc2NjMgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2Nzc1MyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2Nzc4MiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzgzMSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODY4NyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjg3NzcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2ODgwNiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY4ODU1ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNzEyNDcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2ZvcicKICAgICB8fCBsayA9PSA3MTMzNyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2ZvcicKICAgICB8fCBsayA9PSA3MTM2NiAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2ZvcicKICAgICB8fCBsayA9PSA3MTQxNSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2ZvcicKICAgICB8fCBsayA9PSA3NTg1NSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU5NDUgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdnZScKICAgICB8fCBsayA9PSA3NTk3NCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2dlJwogICAgIHx8IGxrID09IDc2MDIzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY4NzkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc2OTY5ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY5OTggICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdncm91cCcKICAgICB8fCBsayA9PSA3NzA0NyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3OTAzICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdndCcKICAgICB8fCBsayA9PSA3Nzk5MyAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2d0JwogICAgIHx8IGxrID09IDc4MDIyICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzgwNzEgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdndCcKICAgICB8fCBsayA9PSA3ODQxNSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnaWRpdicKICAgICB8fCBsayA9PSA3ODUwNSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzg1MzQgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdpZGl2JwogICAgIHx8IGxrID09IDc4NTgzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnaWRpdicKICAgICB8fCBsayA9PSA3OTk1MSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnaW4nCiAgICAgfHwgbGsgPT0gODAwNDEgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdpbicKICAgICB8fCBsayA9PSA4MDA3MCAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ2luJwogICAgIHx8IGxrID09IDgwMTE5ICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnaW4nCiAgICAgfHwgbGsgPT0gODMwMjMgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzMTEzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMxNDIgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzE5MSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDg0MDQ3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQxMzcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQxNjYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQyMTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ1NTkgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2ludG8nCiAgICAgfHwgbGsgPT0gODQ2NDkgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdpbnRvJwogICAgIHx8IGxrID09IDg0Njc4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnaW50bycKICAgICB8fCBsayA9PSA4NDcyNyAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2ludG8nCiAgICAgfHwgbGsgPT0gODUwNzEgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ2lzJwogICAgIHx8IGxrID09IDg1MTYxICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnaXMnCiAgICAgfHwgbGsgPT0gODUxOTAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdpcycKICAgICB8fCBsayA9PSA4NTIzOSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ2lzJwogICAgIHx8IGxrID09IDg5Njc5ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdsZScKICAgICB8fCBsayA9PSA4OTc2OSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2xlJwogICAgIHx8IGxrID09IDg5Nzk4ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnbGUnCiAgICAgfHwgbGsgPT0gODk4NDcgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdsZScKICAgICB8fCBsayA9PSA5MDcwMyAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnbGV0JwogICAgIHx8IGxrID09IDkwNzkzICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnbGV0JwogICAgIHx8IGxrID09IDkwODIyICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnbGV0JwogICAgIHx8IGxrID09IDkwODcxICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnbGV0JwogICAgIHx8IGxrID09IDkyNzUxICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdsdCcKICAgICB8fCBsayA9PSA5Mjg0MSAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ2x0JwogICAgIHx8IGxrID09IDkyODcwICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnbHQnCiAgICAgfHwgbGsgPT0gOTI5MTkgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdsdCcKICAgICB8fCBsayA9PSA5Mzc3NSAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnbW9kJwogICAgIHx8IGxrID09IDkzODY1ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnbW9kJwogICAgIHx8IGxrID09IDkzODk0ICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnbW9kJwogICAgIHx8IGxrID09IDkzOTQzICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnbW9kJwogICAgIHx8IGxrID09IDk0Mjg3ICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQzNzcgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQ0MDYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTQ0NTUgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTY4NDcgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ25lJwogICAgIHx8IGxrID09IDk2OTM3ICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnbmUnCiAgICAgfHwgbGsgPT0gOTY5NjYgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICduZScKICAgICB8fCBsayA9PSA5NzAxNSAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ25lJwogICAgIHx8IGxrID09IDEwMzUwMyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdvbmx5JwogICAgIHx8IGxrID09IDEwMzU5MyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnb25seScKICAgICB8fCBsayA9PSAxMDM2MjIgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAzNjcxICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdvbmx5JwogICAgIHx8IGxrID09IDEwNDUyNyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdvcicKICAgICB8fCBsayA9PSAxMDQ2MTcgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ29yJwogICAgIHx8IGxrID09IDEwNDY0NiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnb3InCiAgICAgfHwgbGsgPT0gMTA0Njk1ICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdvcicKICAgICB8fCBsayA9PSAxMDUwMzkgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1MTI5ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdvcmRlcicKICAgICB8fCBsayA9PSAxMDUxNTggICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ29yZGVyJwogICAgIHx8IGxrID09IDEwNTIwNyAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA3MDg3ICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3BhcmFncmFwaHMnCiAgICAgfHwgbGsgPT0gMTA3MTc3ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdwYXJhZ3JhcGhzJwogICAgIHx8IGxrID09IDEwNzIwNiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAncGFyYWdyYXBocycKICAgICB8fCBsayA9PSAxMDcyNTUgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3BhcmFncmFwaHMnCiAgICAgfHwgbGsgPT0gMTE0NzY3ICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTQ4NTcgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTQ4ODYgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTQ5MzUgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTY4MTUgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjkwNSAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjkzNCAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNjk4MyAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExODg2MyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdzY29yZScKICAgICB8fCBsayA9PSAxMTg5NTMgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3Njb3JlJwogICAgIHx8IGxrID09IDExODk4MiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE5MDMxICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdzY29yZScKICAgICB8fCBsayA9PSAxMjE0MjMgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnc2VudGVuY2VzJwogICAgIHx8IGxrID09IDEyMTUxMyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnc2VudGVuY2VzJwogICAgIHx8IGxrID09IDEyMTU0MiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnc2VudGVuY2VzJwogICAgIHx8IGxrID09IDEyMTU5MSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnc2VudGVuY2VzJwogICAgIHx8IGxrID09IDEyMzQ3MSAgICAgICAgICAgICAgICAvLyAnYXJyYXknICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzNTYxICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzNTkwICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzNjM5ICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIzOTgzICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNDA3MyAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI0MTAyICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICdzdGFydCcKICAgICB8fCBsayA9PSAxMjQxNTEgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyOTEwMyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd0aW1lcycKICAgICB8fCBsayA9PSAxMjkxOTMgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3RpbWVzJwogICAgIHx8IGxrID09IDEyOTIyMiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAndGltZXMnCiAgICAgfHwgbGsgPT0gMTI5MjcxICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd0aW1lcycKICAgICB8fCBsayA9PSAxMjk2MTUgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAndG8nCiAgICAgfHwgbGsgPT0gMTI5NzA1ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICd0bycKICAgICB8fCBsayA9PSAxMjk3MzQgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3RvJwogICAgIHx8IGxrID09IDEyOTc4MyAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAndG8nCiAgICAgfHwgbGsgPT0gMTMzMTk5ICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMzI4OSAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMzMzE4ICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzMzNjcgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzOTM0MyAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk0MzMgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTQ2MiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5NTExICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd3aGVyZScKICAgICB8fCBsayA9PSAxNDEzOTEgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDE0ODEgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQxNTEwICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd3aXRoJwogICAgIHx8IGxrID09IDE0MTU1OSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDI5MjcgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnd29yZHMnCiAgICAgfHwgbGsgPT0gMTQzMDE3ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICd3b3JkcycKICAgICB8fCBsayA9PSAxNDMwNDYgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ3dvcmRzJwogICAgIHx8IGxrID09IDE0MzA5NSAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnd29yZHMnCiAgICAgfHwgbGsgPT0gMTQzOTUxICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3snCiAgICAgfHwgbGsgPT0gMTQ0MDQxICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICd7JwogICAgIHx8IGxrID09IDE0NDA3MCAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAneycKICAgICB8fCBsayA9PSAxNDQxMTkgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3snCiAgICAgfHwgbGsgPT0gMTQ1NDg3ICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3wnCiAgICAgfHwgbGsgPT0gMTQ1NTc3ICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICd8JwogICAgIHx8IGxrID09IDE0NTYwNiAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnfCcKICAgICB8fCBsayA9PSAxNDU2NTUgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3wnCiAgICAgfHwgbGsgPT0gMTQ1OTk5ICAgICAgICAgICAgICAgIC8vICdhcnJheScgJ3x8JwogICAgIHx8IGxrID09IDE0NjA4OSAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnfHwnCiAgICAgfHwgbGsgPT0gMTQ2MTE4ICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd8fCcKICAgICB8fCBsayA9PSAxNDYxNjcgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJ3x8JwogICAgIHx8IGxrID09IDE0NjUxMSAgICAgICAgICAgICAgICAvLyAnYXJyYXknICd8fScKICAgICB8fCBsayA9PSAxNDY2MDEgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ3x9JwogICAgIHx8IGxrID09IDE0NjYzMCAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnfH0nCiAgICAgfHwgbGsgPT0gMTQ2Njc5ICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd8fScKICAgICB8fCBsayA9PSAxNDcwMjMgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnfScKICAgICB8fCBsayA9PSAxNDcxMTMgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ30nCiAgICAgfHwgbGsgPT0gMTQ3MTQyICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICd9JwogICAgIHx8IGxrID09IDE0NzE5MSkgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnfScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCg2LCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHRyeV9BdG9taWNPclVuaW9uVHlwZSgpOwogICAgICAgICAgbWVtb2l6ZSg2LCBlMEEsIC00KTsKICAgICAgICAgIGxrID0gLTg7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwNEEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICB0cnlfSlNPTlRlc3QoKTsKICAgICAgICAgICAgbWVtb2l6ZSg2LCBlMEEsIC02KTsKICAgICAgICAgICAgbGsgPSAtODsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwNkEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gLTc7CiAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICBtZW1vaXplKDYsIGUwQSwgLTcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTgwMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJygnCiAgICBjYXNlIDE4MDE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnKCcKICAgIGNhc2UgMTgwNDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICcoJwogICAgY2FzZSAxODA0MjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJygnCiAgICBjYXNlIDE4MTA4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgJygnCiAgICBjYXNlIDE4MTE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJyAnKCcKICAgIGNhc2UgMTgxNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcoJwogICAgY2FzZSAxODE1MDogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgJygnCiAgICBjYXNlIDE4MTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgJygnCiAgICBjYXNlIDE4MTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAnKCcKICAgICAgdHJ5X0tpbmRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA4NzogICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScgJygnCiAgICAgIHNoaWZ0VCgxNjcpOyAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgIGJyZWFrOwogICAgY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJScKICAgIGNhc2UgMTgwNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnKCcKICAgICAgdHJ5X0Z1bmN0aW9uVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIHRyeV9QYXJlbnRoZXNpemVkSXRlbVR5cGUoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC02OgogICAgY2FzZSAxNzk5OTogICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcoJwogICAgY2FzZSAxODA4OTogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnKCcKICAgIGNhc2UgMTgxMTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJygnCiAgICAgIHRyeV9KU09OVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTc6CiAgICBjYXNlIDE4MTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcoJwogICAgICB0cnlfU3RydWN0dXJlZEl0ZW1UZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtODoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQXRvbWljT3JVbmlvblR5cGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0pTT05UZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSlNPTlRlc3QiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgICBwYXJzZV9KU09OSXRlbVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICAgIHBhcnNlX0pTT05PYmplY3RUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfSlNPTkFycmF5VGVzdCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJKU09OVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9KU09OVGVzdCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgdHJ5X0pTT05JdGVtVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgdHJ5X0pTT05PYmplY3RUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0pTT05BcnJheVRlc3QoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N0cnVjdHVyZWRJdGVtVGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN0cnVjdHVyZWRJdGVtVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDI0Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgIGxvb2thaGVhZDFXKDIzMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzo9JyB8CiAgICBpZiAobDEgPT0gMzUpICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgewogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN0cnVjdHVyZWRJdGVtVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TdHJ1Y3R1cmVkSXRlbVRlc3QoKQogIHsKICAgIHNoaWZ0VCgyNDcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgIGxvb2thaGVhZDFXKDIzMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzo9JyB8CiAgICBpZiAobDEgPT0gMzUpICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgewogICAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OSXRlbVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OSXRlbVRlc3QiLCBlMCk7CiAgICBzaGlmdCgxNjkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICBsb29rYWhlYWQxVygyMzIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgaWYgKGwxID09IDM1KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJKU09OSXRlbVRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTkl0ZW1UZXN0KCkKICB7CiAgICBzaGlmdFQoMTY5KTsgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICBsb29rYWhlYWQxVygyMzIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgaWYgKGwxID09IDM1KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSlNPTk9iamVjdFRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OT2JqZWN0VGVzdCIsIGUwKTsKICAgIHNoaWZ0KDE5OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGxvb2thaGVhZDFXKDIzMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzo9JyB8CiAgICBpZiAobDEgPT0gMzUpICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgewogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05PYmplY3RUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0pTT05PYmplY3RUZXN0KCkKICB7CiAgICBzaGlmdFQoMTk4KTsgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICBsb29rYWhlYWQxVygyMzIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgaWYgKGwxID09IDM1KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSlNPTkFycmF5VGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05BcnJheVRlc3QiLCBlMCk7CiAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGxvb2thaGVhZDFXKDIzMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzo9JyB8CiAgICBpZiAobDEgPT0gMzUpICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgewogICAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05BcnJheVRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTkFycmF5VGVzdCgpCiAgewogICAgc2hpZnRUKDc5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICBsb29rYWhlYWQxVygyMzIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgaWYgKGwxID09IDM1KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXRvbWljT3JVbmlvblR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBdG9taWNPclVuaW9uVHlwZSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdG9taWNPclVuaW9uVHlwZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BdG9taWNPclVuaW9uVHlwZSgpCiAgewogICAgdHJ5X0VRTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfS2luZFRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJLaW5kVGVzdCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBwYXJzZV9Eb2N1bWVudFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBwYXJzZV9FbGVtZW50VGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgcGFyc2VfQXR0cmlidXRlVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjMxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBwYXJzZV9TY2hlbWFFbGVtZW50VGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIHBhcnNlX1NjaGVtYUF0dHJpYnV0ZVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBwYXJzZV9QSVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBwYXJzZV9Db21tZW50VGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIHBhcnNlX1RleHRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHBhcnNlX05hbWVzcGFjZU5vZGVUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQW55S2luZFRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiS2luZFRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfS2luZFRlc3QoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICB0cnlfRG9jdW1lbnRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgdHJ5X0VsZW1lbnRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICB0cnlfQXR0cmlidXRlVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjMxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICB0cnlfU2NoZW1hRWxlbWVudFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICB0cnlfU2NoZW1hQXR0cmlidXRlVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHRyeV9QSVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICB0cnlfQ29tbWVudFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICB0cnlfVGV4dFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgdHJ5X05hbWVzcGFjZU5vZGVUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0FueUtpbmRUZXN0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BbnlLaW5kVGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFueUtpbmRUZXN0IiwgZTApOwogICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBbnlLaW5kVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BbnlLaW5kVGVzdCgpCiAgewogICAgc2hpZnRUKDE5NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRG9jdW1lbnRUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRG9jdW1lbnRUZXN0IiwgZTApOwogICAgc2hpZnQoMTIxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygxNTQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJ2VsZW1lbnQnIHwgJ3NjaGVtYS1lbGVtZW50JwogICAgaWYgKGwxICE9IDM4KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRWxlbWVudFRlc3QoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfU2NoZW1hRWxlbWVudFRlc3QoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRG9jdW1lbnRUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RvY3VtZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDEyMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygxNTQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJ2VsZW1lbnQnIHwgJ3NjaGVtYS1lbGVtZW50JwogICAgaWYgKGwxICE9IDM4KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgICB0cnlfRWxlbWVudFRlc3QoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfU2NoZW1hRWxlbWVudFRlc3QoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RleHRUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVGV4dFRlc3QiLCBlMCk7CiAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRleHRUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RleHRUZXN0KCkKICB7CiAgICBzaGlmdFQoMjQ5KTsgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21tZW50VGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbW1lbnRUZXN0IiwgZTApOwogICAgc2hpZnQoOTcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21tZW50VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21tZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDk3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTmFtZXNwYWNlTm9kZVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOYW1lc3BhY2VOb2RlVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDE4OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5hbWVzcGFjZU5vZGVUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05hbWVzcGFjZU5vZGVUZXN0KCkKICB7CiAgICBzaGlmdFQoMTg4KTsgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUElUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUElUZXN0IiwgZTApOwogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNDMpOyAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICcpJyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSAhPSAzOCkgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX05DTmFtZSgpOwogICAgICB9CiAgICB9CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQSVRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUElUZXN0KCkKICB7CiAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI0Myk7ICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgaWYgKGwxICE9IDM4KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfTkNOYW1lKCk7CiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXR0cmlidXRlVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJyonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIGlmIChsMSAhPSAzOCkgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQXR0cmliTmFtZU9yV2lsZGNhcmQoKTsKICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxID09IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfVHlwZU5hbWUoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXR0cmlidXRlVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBzaGlmdFQoODMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICBpZiAobDEgIT0gMzgpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB0cnlfQXR0cmliTmFtZU9yV2lsZGNhcmQoKTsKICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxID09IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB0cnlfVHlwZU5hbWUoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0F0dHJpYk5hbWVPcldpbGRjYXJkKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXR0cmliTmFtZU9yV2lsZGNhcmQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgc2hpZnQoMzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQXR0cmlidXRlTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdHRyaWJOYW1lT3JXaWxkY2FyZCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BdHRyaWJOYW1lT3JXaWxkY2FyZCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIHNoaWZ0VCgzOSk7ICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9BdHRyaWJ1dGVOYW1lKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TY2hlbWFBdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2NoZW1hQXR0cmlidXRlVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDIzMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9BdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2NoZW1hQXR0cmlidXRlVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TY2hlbWFBdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBzaGlmdFQoMjMwKTsgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X0F0dHJpYnV0ZURlY2xhcmF0aW9uKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXR0cmlidXRlRGVjbGFyYXRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBdHRyaWJ1dGVEZWNsYXJhdGlvbiIsIGUwKTsKICAgIHBhcnNlX0F0dHJpYnV0ZU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXR0cmlidXRlRGVjbGFyYXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXR0cmlidXRlRGVjbGFyYXRpb24oKQogIHsKICAgIHRyeV9BdHRyaWJ1dGVOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FbGVtZW50VGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkVsZW1lbnRUZXN0IiwgZTApOwogICAgc2hpZnQoMTIyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJyonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIGlmIChsMSAhPSAzOCkgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRWxlbWVudE5hbWVPcldpbGRjYXJkKCk7CiAgICAgIGxvb2thaGVhZDFXKDEwNSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgIGlmIChsMSA9PSA0MikgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgc2hpZnQoNDIpOyAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1R5cGVOYW1lKCk7CiAgICAgICAgbG9va2FoZWFkMVcoMTA2KTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJz8nCiAgICAgICAgaWYgKGwxID09IDY1KSAgICAgICAgICAgICAgIC8vICc/JwogICAgICAgIHsKICAgICAgICAgIHNoaWZ0KDY1KTsgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFbGVtZW50VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9FbGVtZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDEyMik7ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJyonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIGlmIChsMSAhPSAzOCkgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHRyeV9FbGVtZW50TmFtZU9yV2lsZGNhcmQoKTsKICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxID09IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB0cnlfVHlwZU5hbWUoKTsKICAgICAgICBsb29rYWhlYWQxVygxMDYpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnPycKICAgICAgICBpZiAobDEgPT0gNjUpICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDY1KTsgICAgICAgICAgICAgICAvLyAnPycKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FbGVtZW50TmFtZU9yV2lsZGNhcmQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFbGVtZW50TmFtZU9yV2lsZGNhcmQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgc2hpZnQoMzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRWxlbWVudE5hbWUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRWxlbWVudE5hbWVPcldpbGRjYXJkIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VsZW1lbnROYW1lT3JXaWxkY2FyZCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIHNoaWZ0VCgzOSk7ICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FbGVtZW50TmFtZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2NoZW1hRWxlbWVudFRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTY2hlbWFFbGVtZW50VGVzdCIsIGUwKTsKICAgIHNoaWZ0KDIzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRWxlbWVudERlY2xhcmF0aW9uKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTY2hlbWFFbGVtZW50VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TY2hlbWFFbGVtZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDIzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfRWxlbWVudERlY2xhcmF0aW9uKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRWxlbWVudERlY2xhcmF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRWxlbWVudERlY2xhcmF0aW9uIiwgZTApOwogICAgcGFyc2VfRWxlbWVudE5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRWxlbWVudERlY2xhcmF0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VsZW1lbnREZWNsYXJhdGlvbigpCiAgewogICAgdHJ5X0VsZW1lbnROYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BdHRyaWJ1dGVOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXR0cmlidXRlTmFtZSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdHRyaWJ1dGVOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0F0dHJpYnV0ZU5hbWUoKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0VsZW1lbnROYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRWxlbWVudE5hbWUiLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRWxlbWVudE5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRWxlbWVudE5hbWUoKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NpbXBsZVR5cGVOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2ltcGxlVHlwZU5hbWUiLCBlMCk7CiAgICBwYXJzZV9UeXBlTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTaW1wbGVUeXBlTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TaW1wbGVUeXBlTmFtZSgpCiAgewogICAgdHJ5X1R5cGVOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9UeXBlTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlR5cGVOYW1lIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR5cGVOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1R5cGVOYW1lKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GdW5jdGlvblRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGdW5jdGlvblRlc3QiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMDEpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJyg6JyB8ICdmdW5jdGlvbicKICAgICAgaWYgKGwxICE9IDMzKSAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Fubm90YXRpb24oKTsKICAgIH0KICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgbGsgPSBtZW1vaXplZCg3LCBlMCk7CiAgICBpZiAobGsgPT0gMCkKICAgIHsKICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgIHRyeQogICAgICB7CiAgICAgICAgdHJ5X0FueUZ1bmN0aW9uVGVzdCgpOwogICAgICAgIGxrID0gLTE7CiAgICAgIH0KICAgICAgY2F0Y2ggKHAxQSkKICAgICAgewogICAgICAgIGxrID0gLTI7CiAgICAgIH0KICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgIG1lbW9pemUoNywgZTAsIGxrKTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FueUZ1bmN0aW9uVGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHlwZWRGdW5jdGlvblRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25UZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Z1bmN0aW9uVGVzdCgpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICclJyB8ICcoOicgfCAnZnVuY3Rpb24nCiAgICAgIGlmIChsMSAhPSAzMykgICAgICAgICAgICAgICAgIC8vICclJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0Fubm90YXRpb24oKTsKICAgIH0KICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgbGsgPSBtZW1vaXplZCg3LCBlMCk7CiAgICBpZiAobGsgPT0gMCkKICAgIHsKICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgIHRyeQogICAgICB7CiAgICAgICAgdHJ5X0FueUZ1bmN0aW9uVGVzdCgpOwogICAgICAgIG1lbW9pemUoNywgZTBBLCAtMSk7CiAgICAgICAgbGsgPSAtMzsKICAgICAgfQogICAgICBjYXRjaCAocDFBKQogICAgICB7CiAgICAgICAgbGsgPSAtMjsKICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSg3LCBlMEEsIC0yKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHRyeV9BbnlGdW5jdGlvblRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9UeXBlZEZ1bmN0aW9uVGVzdCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQW55RnVuY3Rpb25UZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW55RnVuY3Rpb25UZXN0IiwgZTApOwogICAgc2hpZnQoMTQ3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjQpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcqJwogICAgc2hpZnQoMzkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFueUZ1bmN0aW9uVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BbnlGdW5jdGlvblRlc3QoKQogIHsKICAgIHNoaWZ0VCgxNDcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKicKICAgIHNoaWZ0VCgzOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHlwZWRGdW5jdGlvblRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUeXBlZEZ1bmN0aW9uVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDE0Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI1OCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8CiAgICBpZiAobDEgIT0gMzgpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBsb29rYWhlYWQxVygzMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBsb29rYWhlYWQxVygyNTMpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUeXBlZEZ1bmN0aW9uVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9UeXBlZEZ1bmN0aW9uVGVzdCgpCiAgewogICAgc2hpZnRUKDE0Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjU4KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSAhPSAzOCkgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHRyeV9TZXF1ZW5jZVR5cGUoKTsKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwNSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnRUKDQyKTsgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QYXJlbnRoZXNpemVkSXRlbVR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQYXJlbnRoZXNpemVkSXRlbVR5cGUiLCBlMCk7CiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjUzKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JdGVtVHlwZSgpOwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUGFyZW50aGVzaXplZEl0ZW1UeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhcmVudGhlc2l6ZWRJdGVtVHlwZSgpCiAgewogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X0l0ZW1UeXBlKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV2YWxpZGF0aW9uRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJldmFsaWRhdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNzUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXZhbGlkYXRpb24nCiAgICBzaGlmdCgyMjYpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICBsb29rYWhlYWQxVygxNjIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xheCcgfCAnc2tpcCcgfCAnc3RyaWN0JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgc2hpZnQoMjQ1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIHNoaWZ0KDE3NCk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjM4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NraXAnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJldmFsaWRhdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbnNlcnRFeHByVGFyZ2V0Q2hvaWNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5zZXJ0RXhwclRhcmdldENob2ljZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDcxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnQoNzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgc2hpZnQoODUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgIGxvb2thaGVhZDFXKDEyMyk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdmaXJzdCcgfCAnbGFzdCcKICAgICAgICBzd2l0Y2ggKGwxKQogICAgICAgIHsKICAgICAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICAgICAgc2hpZnQoMTM2KTsgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc2hpZnQoMTczKTsgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgICB9CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoNTcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW50bycKICAgICAgc2hpZnQoMTY1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluc2VydEV4cHJUYXJnZXRDaG9pY2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSW5zZXJ0RXhwclRhcmdldENob2ljZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdFQoNzEpOyAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdFQoODUpOyAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgewogICAgICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgICAgbG9va2FoZWFkMVcoMTIzKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2ZpcnN0JyB8ICdsYXN0JwogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgICAgICBzaGlmdFQoMTM2KTsgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBzaGlmdFQoMTczKTsgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICAgIH0KICAgICAgfQogICAgICBsb29rYWhlYWQxVyg1Nyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbnRvJwogICAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luc2VydEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbnNlcnRFeHByIiwgZTApOwogICAgc2hpZnQoMTYxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgbG9va2FoZWFkMVcoMTMzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJyB8ICdub2RlcycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdCgxOTQpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxOTUpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Tb3VyY2VFeHByKCk7CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JbnNlcnRFeHByVGFyZ2V0Q2hvaWNlKCk7CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9UYXJnZXRFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluc2VydEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSW5zZXJ0RXhwcigpCiAgewogICAgc2hpZnRUKDE2MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgbG9va2FoZWFkMVcoMTMzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJyB8ICdub2RlcycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdFQoMTk0KTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTk1KTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfU291cmNlRXhwcigpOwogICAgdHJ5X0luc2VydEV4cHJUYXJnZXRDaG9pY2UoKTsKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9UYXJnZXRFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EZWxldGVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRGVsZXRlRXhwciIsIGUwKTsKICAgIHNoaWZ0KDExMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGxvb2thaGVhZDFXKDEzMyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbm9kZScgfCAnbm9kZXMnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTk1KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgfQogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVGFyZ2V0RXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJEZWxldGVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RlbGV0ZUV4cHIoKQogIHsKICAgIHNoaWZ0VCgxMTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGxvb2thaGVhZDFXKDEzMyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbm9kZScgfCAnbm9kZXMnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnRUKDE5NCk7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE5NSk7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgfQogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1RhcmdldEV4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JlcGxhY2VFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmVwbGFjZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgyMjMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgbG9va2FoZWFkMVcoMTM0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJyB8ICd2YWx1ZScKICAgIGlmIChsMSA9PSAyNjcpICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgewogICAgICBzaGlmdCgyNjcpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGxvb2thaGVhZDFXKDY3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29mJwogICAgICBzaGlmdCgyMDApOyAgICAgICAgICAgICAgICAgICAvLyAnb2YnCiAgICB9CiAgICBsb29rYWhlYWQxVyg2NSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnCiAgICBzaGlmdCgxOTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVGFyZ2V0RXhwcigpOwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUmVwbGFjZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmVwbGFjZUV4cHIoKQogIHsKICAgIHNoaWZ0VCgyMjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICBsb29rYWhlYWQxVygxMzQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnIHwgJ3ZhbHVlJwogICAgaWYgKGwxID09IDI2NykgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICB7CiAgICAgIHNoaWZ0VCgyNjcpOyAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgbG9va2FoZWFkMVcoNjcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnb2YnCiAgICAgIHNoaWZ0VCgyMDApOyAgICAgICAgICAgICAgICAgIC8vICdvZicKICAgIH0KICAgIGxvb2thaGVhZDFXKDY1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbm9kZScKICAgIHNoaWZ0VCgxOTQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfVGFyZ2V0RXhwcigpOwogICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9SZW5hbWVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmVuYW1lRXhwciIsIGUwKTsKICAgIHNoaWZ0KDIyMik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgIGxvb2thaGVhZDFXKDY1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbm9kZScKICAgIHNoaWZ0KDE5NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9UYXJnZXRFeHByKCk7CiAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05ld05hbWVFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJlbmFtZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmVuYW1lRXhwcigpCiAgewogICAgc2hpZnRUKDIyMik7ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgbG9va2FoZWFkMVcoNjUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJwogICAgc2hpZnRUKDE5NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9UYXJnZXRFeHByKCk7CiAgICBzaGlmdFQoODApOyAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9OZXdOYW1lRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU291cmNlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNvdXJjZUV4cHIiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNvdXJjZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU291cmNlRXhwcigpCiAgewogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RhcmdldEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUYXJnZXRFeHByIiwgZTApOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUYXJnZXRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RhcmdldEV4cHIoKQogIHsKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OZXdOYW1lRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5ld05hbWVFeHByIiwgZTApOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOZXdOYW1lRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9OZXdOYW1lRXhwcigpCiAgewogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RyYW5zZm9ybUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUcmFuc2Zvcm1FeHByIiwgZTApOwogICAgc2hpZnQoMTA0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1RyYW5zZm9ybVNwZWMoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNDIpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHJhbnNmb3JtU3BlYygpOwogICAgfQogICAgc2hpZnQoMTg0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUcmFuc2Zvcm1FeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RyYW5zZm9ybUV4cHIoKQogIHsKICAgIHNoaWZ0VCgxMDQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICB0cnlfVHJhbnNmb3JtU3BlYygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgdHJ5X1RyYW5zZm9ybVNwZWMoKTsKICAgIH0KICAgIHNoaWZ0VCgxODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHJhbnNmb3JtU3BlYygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyYW5zZm9ybVNwZWMiLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRyYW5zZm9ybVNwZWMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJhbnNmb3JtU3BlYygpCiAgewogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDI4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nCiAgICBzaGlmdFQoNTMpOyAgICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFNlbGVjdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUU2VsZWN0aW9uIiwgZTApOwogICAgcGFyc2VfRlRPcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjExKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICBsb29rYWhlYWQyVygxNjEpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5kJyB8ICdwb3NpdGlvbicgfCAnc3RhcnQnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGsgPSBsMTsKICAgICAgfQogICAgICBpZiAobGsgIT0gMTE2ICAgICAgICAgICAgICAgICAvLyAnZGlmZmVyZW50JwogICAgICAgJiYgbGsgIT0gMTE4ICAgICAgICAgICAgICAgICAvLyAnZGlzdGFuY2UnCiAgICAgICAmJiBsayAhPSAxMjggICAgICAgICAgICAgICAgIC8vICdlbnRpcmUnCiAgICAgICAmJiBsayAhPSAyMDYgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICAgJiYgbGsgIT0gMjI3ICAgICAgICAgICAgICAgICAvLyAnc2FtZScKICAgICAgICYmIGxrICE9IDI3NSAgICAgICAgICAgICAgICAgLy8gJ3dpbmRvdycKICAgICAgICYmIGxrICE9IDY1MTA2ICAgICAgICAgICAgICAgLy8gJ2F0JyAnZW5kJwogICAgICAgJiYgbGsgIT0gMTIzOTg2KSAgICAgICAgICAgICAvLyAnYXQnICdzdGFydCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRQb3NGaWx0ZXIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTZWxlY3Rpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRTZWxlY3Rpb24oKQogIHsKICAgIHRyeV9GVE9yKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyMTEpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIGxvb2thaGVhZDJXKDE2MSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbmQnIHwgJ3Bvc2l0aW9uJyB8ICdzdGFydCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayAhPSAxMTYgICAgICAgICAgICAgICAgIC8vICdkaWZmZXJlbnQnCiAgICAgICAmJiBsayAhPSAxMTggICAgICAgICAgICAgICAgIC8vICdkaXN0YW5jZScKICAgICAgICYmIGxrICE9IDEyOCAgICAgICAgICAgICAgICAgLy8gJ2VudGlyZScKICAgICAgICYmIGxrICE9IDIwNiAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgICAmJiBsayAhPSAyMjcgICAgICAgICAgICAgICAgIC8vICdzYW1lJwogICAgICAgJiYgbGsgIT0gMjc1ICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgICAgJiYgbGsgIT0gNjUxMDYgICAgICAgICAgICAgICAvLyAnYXQnICdlbmQnCiAgICAgICAmJiBsayAhPSAxMjM5ODYpICAgICAgICAgICAgIC8vICdhdCcgJ3N0YXJ0JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0ZUUG9zRmlsdGVyKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFdlaWdodCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUV2VpZ2h0IiwgZTApOwogICAgc2hpZnQoMjcwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2VpZ2h0JwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnQoMjgxKTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDI4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUV2VpZ2h0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUV2VpZ2h0KCkKICB7CiAgICBzaGlmdFQoMjcwKTsgICAgICAgICAgICAgICAgICAgIC8vICd3ZWlnaHQnCiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVE9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRPciIsIGUwKTsKICAgIHBhcnNlX0ZUQW5kKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMTQ2KSAgICAgICAgICAgICAgICAvLyAnZnRvcicKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDE0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdmdG9yJwogICAgICBsb29rYWhlYWQxVygxNzcpOyAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUQW5kKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUT3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRPcigpCiAgewogICAgdHJ5X0ZUQW5kKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMTQ2KSAgICAgICAgICAgICAgICAvLyAnZnRvcicKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCgxNDYpOyAgICAgICAgICAgICAgICAgIC8vICdmdG9yJwogICAgICBsb29rYWhlYWQxVygxNzcpOyAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JwogICAgICB0cnlfRlRBbmQoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUQW5kKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRBbmQiLCBlMCk7CiAgICBwYXJzZV9GVE1pbGROb3QoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAxNDQpICAgICAgICAgICAgICAgIC8vICdmdGFuZCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDE0NCk7ICAgICAgICAgICAgICAgICAgIC8vICdmdGFuZCcKICAgICAgbG9va2FoZWFkMVcoMTc3KTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVE1pbGROb3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRBbmQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRBbmQoKQogIHsKICAgIHRyeV9GVE1pbGROb3QoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAxNDQpICAgICAgICAgICAgICAgIC8vICdmdGFuZCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCgxNDQpOyAgICAgICAgICAgICAgICAgIC8vICdmdGFuZCcKICAgICAgbG9va2FoZWFkMVcoMTc3KTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgdHJ5X0ZUTWlsZE5vdCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRNaWxkTm90KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRNaWxkTm90IiwgZTApOwogICAgcGFyc2VfRlRVbmFyeU5vdCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjEyKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBpZiAobDEgIT0gMTk2KSAgICAgICAgICAgICAgICAvLyAnbm90JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoMTk2KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICAgIHNoaWZ0KDE1Nik7ICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgbG9va2FoZWFkMVcoMTc3KTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVFVuYXJ5Tm90KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUTWlsZE5vdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVE1pbGROb3QoKQogIHsKICAgIHRyeV9GVFVuYXJ5Tm90KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyMTIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSAhPSAxOTYpICAgICAgICAgICAgICAgIC8vICdub3QnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMTk2KTsgICAgICAgICAgICAgICAgICAvLyAnbm90JwogICAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgICAgc2hpZnRUKDE1Nik7ICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBsb29rYWhlYWQxVygxNzcpOyAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JwogICAgICB0cnlfRlRVbmFyeU5vdCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRVbmFyeU5vdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUVW5hcnlOb3QiLCBlMCk7CiAgICBpZiAobDEgPT0gMTQ1KSAgICAgICAgICAgICAgICAgIC8vICdmdG5vdCcKICAgIHsKICAgICAgc2hpZnQoMTQ1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0bm90JwogICAgfQogICAgbG9va2FoZWFkMVcoMTY0KTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ3snCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GVFByaW1hcnlXaXRoT3B0aW9ucygpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFVuYXJ5Tm90IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUVW5hcnlOb3QoKQogIHsKICAgIGlmIChsMSA9PSAxNDUpICAgICAgICAgICAgICAgICAgLy8gJ2Z0bm90JwogICAgewogICAgICBzaGlmdFQoMTQ1KTsgICAgICAgICAgICAgICAgICAvLyAnZnRub3QnCiAgICB9CiAgICBsb29rYWhlYWQxVygxNjQpOyAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAneycKICAgIHRyeV9GVFByaW1hcnlXaXRoT3B0aW9ucygpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRQcmltYXJ5V2l0aE9wdGlvbnMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFByaW1hcnlXaXRoT3B0aW9ucyIsIGUwKTsKICAgIHBhcnNlX0ZUUHJpbWFyeSgpOwogICAgbG9va2FoZWFkMVcoMjEzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBpZiAobDEgPT0gMjY1KSAgICAgICAgICAgICAgICAgIC8vICd1c2luZycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVE1hdGNoT3B0aW9ucygpOwogICAgfQogICAgaWYgKGwxID09IDI3MCkgICAgICAgICAgICAgICAgICAvLyAnd2VpZ2h0JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUV2VpZ2h0KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUUHJpbWFyeVdpdGhPcHRpb25zIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUUHJpbWFyeVdpdGhPcHRpb25zKCkKICB7CiAgICB0cnlfRlRQcmltYXJ5KCk7CiAgICBsb29rYWhlYWQxVygyMTMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgIGlmIChsMSA9PSAyNjUpICAgICAgICAgICAgICAgICAgLy8gJ3VzaW5nJwogICAgewogICAgICB0cnlfRlRNYXRjaE9wdGlvbnMoKTsKICAgIH0KICAgIGlmIChsMSA9PSAyNzApICAgICAgICAgICAgICAgICAgLy8gJ3dlaWdodCcKICAgIHsKICAgICAgdHJ5X0ZUV2VpZ2h0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFByaW1hcnkoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFByaW1hcnkiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE3Nyk7ICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAnZnRub3QnIHwgJ3snCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRTZWxlY3Rpb24oKTsKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgIGJyZWFrOwogICAgY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIHBhcnNlX0ZURXh0ZW5zaW9uU2VsZWN0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRlRXb3JkcygpOwogICAgICBsb29rYWhlYWQxVygyMTQpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSA9PSAxOTkpICAgICAgICAgICAgICAgIC8vICdvY2N1cnMnCiAgICAgIHsKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRlRUaW1lcygpOwogICAgICB9CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUUHJpbWFyeSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFByaW1hcnkoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMTc3KTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgdHJ5X0ZUU2VsZWN0aW9uKCk7CiAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBicmVhazsKICAgIGNhc2UgMzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICB0cnlfRlRFeHRlbnNpb25TZWxlY3Rpb24oKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRlRXb3JkcygpOwogICAgICBsb29rYWhlYWQxVygyMTQpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSA9PSAxOTkpICAgICAgICAgICAgICAgIC8vICdvY2N1cnMnCiAgICAgIHsKICAgICAgICB0cnlfRlRUaW1lcygpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFdvcmRzKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRXb3JkcyIsIGUwKTsKICAgIHBhcnNlX0ZUV29yZHNWYWx1ZSgpOwogICAgbG9va2FoZWFkMVcoMjIwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBpZiAobDEgPT0gNzIgICAgICAgICAgICAgICAgICAgIC8vICdhbGwnCiAgICAgfHwgbDEgPT0gNzcgICAgICAgICAgICAgICAgICAgIC8vICdhbnknCiAgICAgfHwgbDEgPT0gMjE0KSAgICAgICAgICAgICAgICAgIC8vICdwaHJhc2UnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRBbnlhbGxPcHRpb24oKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRXb3JkcyIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFdvcmRzKCkKICB7CiAgICB0cnlfRlRXb3Jkc1ZhbHVlKCk7CiAgICBsb29rYWhlYWQxVygyMjApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgIGlmIChsMSA9PSA3MiAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbCcKICAgICB8fCBsMSA9PSA3NyAgICAgICAgICAgICAgICAgICAgLy8gJ2FueScKICAgICB8fCBsMSA9PSAyMTQpICAgICAgICAgICAgICAgICAgLy8gJ3BocmFzZScKICAgIHsKICAgICAgdHJ5X0ZUQW55YWxsT3B0aW9uKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFdvcmRzVmFsdWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFdvcmRzVmFsdWUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICAgIHNoaWZ0KDI4Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFdvcmRzVmFsdWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRXb3Jkc1ZhbHVlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIHNoaWZ0VCgxMSk7ICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHIoKTsKICAgICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVEV4dGVuc2lvblNlbGVjdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZURXh0ZW5zaW9uU2VsZWN0aW9uIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QcmFnbWEoKTsKICAgICAgbG9va2FoZWFkMVcoMTA0KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoIycgfCAnKDonIHwgJ3snCiAgICAgIGlmIChsMSAhPSAzNikgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMTg0KTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JyB8ICd9JwogICAgaWYgKGwxICE9IDI4NykgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVFNlbGVjdGlvbigpOwogICAgfQogICAgc2hpZnQoMjg3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRFeHRlbnNpb25TZWxlY3Rpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRFeHRlbnNpb25TZWxlY3Rpb24oKQogIHsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHRyeV9QcmFnbWEoKTsKICAgICAgbG9va2FoZWFkMVcoMTA0KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoIycgfCAnKDonIHwgJ3snCiAgICAgIGlmIChsMSAhPSAzNikgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMTg0KTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JyB8ICd9JwogICAgaWYgKGwxICE9IDI4NykgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgdHJ5X0ZUU2VsZWN0aW9uKCk7CiAgICB9CiAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRBbnlhbGxPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVEFueWFsbE9wdGlvbiIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbnknCiAgICAgIHNoaWZ0KDc3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbnknCiAgICAgIGxvb2thaGVhZDFXKDIxNyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxID09IDI3OCkgICAgICAgICAgICAgICAgLy8gJ3dvcmQnCiAgICAgIHsKICAgICAgICBzaGlmdCgyNzgpOyAgICAgICAgICAgICAgICAgLy8gJ3dvcmQnCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDcyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGwnCiAgICAgIHNoaWZ0KDcyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGwnCiAgICAgIGxvb2thaGVhZDFXKDIxOCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxID09IDI3OSkgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICB7CiAgICAgICAgc2hpZnQoMjc5KTsgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIxNCk7ICAgICAgICAgICAgICAgICAgIC8vICdwaHJhc2UnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUQW55YWxsT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUQW55YWxsT3B0aW9uKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW55JwogICAgICBzaGlmdFQoNzcpOyAgICAgICAgICAgICAgICAgICAvLyAnYW55JwogICAgICBsb29rYWhlYWQxVygyMTcpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSA9PSAyNzgpICAgICAgICAgICAgICAgIC8vICd3b3JkJwogICAgICB7CiAgICAgICAgc2hpZnRUKDI3OCk7ICAgICAgICAgICAgICAgIC8vICd3b3JkJwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsJwogICAgICBzaGlmdFQoNzIpOyAgICAgICAgICAgICAgICAgICAvLyAnYWxsJwogICAgICBsb29rYWhlYWQxVygyMTgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSA9PSAyNzkpICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgewogICAgICAgIHNoaWZ0VCgyNzkpOyAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjE0KTsgICAgICAgICAgICAgICAgICAvLyAncGhyYXNlJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRUaW1lcygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUVGltZXMiLCBlMCk7CiAgICBzaGlmdCgxOTkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdvY2N1cnMnCiAgICBsb29rYWhlYWQxVygxNTkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICdleGFjdGx5JyB8ICdmcm9tJwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRlRSYW5nZSgpOwogICAgc2hpZnQoMjUyKTsgICAgICAgICAgICAgICAgICAgICAvLyAndGltZXMnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUVGltZXMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRUaW1lcygpCiAgewogICAgc2hpZnRUKDE5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnb2NjdXJzJwogICAgbG9va2FoZWFkMVcoMTU5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnZXhhY3RseScgfCAnZnJvbScKICAgIHRyeV9GVFJhbmdlKCk7CiAgICBzaGlmdFQoMjUyKTsgICAgICAgICAgICAgICAgICAgIC8vICd0aW1lcycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUUmFuZ2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFJhbmdlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTMxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4YWN0bHknCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdleGFjdGx5JwogICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDEyOSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xlYXN0JyB8ICdtb3N0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgLy8gJ2xlYXN0JwogICAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9BZGRpdGl2ZUV4cHIoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxODYpOyAgICAgICAgICAgICAgICAgLy8gJ21vc3QnCiAgICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTQyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQWRkaXRpdmVFeHByKCk7CiAgICAgIHNoaWZ0KDI1Myk7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9BZGRpdGl2ZUV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRSYW5nZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFJhbmdlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICAgc2hpZnRUKDEzMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2V4YWN0bHknCiAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9BZGRpdGl2ZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxMjkpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsZWFzdCcgfCAnbW9zdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgICAgc2hpZnRUKDE3Nik7ICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICB0cnlfQWRkaXRpdmVFeHByKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDE4Nik7ICAgICAgICAgICAgICAgIC8vICdtb3N0JwogICAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIHRyeV9BZGRpdGl2ZUV4cHIoKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxNDIpOyAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfQWRkaXRpdmVFeHByKCk7CiAgICAgIHNoaWZ0VCgyNTMpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0FkZGl0aXZlRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRQb3NGaWx0ZXIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFBvc0ZpbHRlciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBwYXJzZV9GVE9yZGVyKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgICBwYXJzZV9GVFdpbmRvdygpOwogICAgICBicmVhazsKICAgIGNhc2UgMTE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rpc3RhbmNlJwogICAgICBwYXJzZV9GVERpc3RhbmNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGlmZmVyZW50JwogICAgY2FzZSAyMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2FtZScKICAgICAgcGFyc2VfRlRTY29wZSgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0ZUQ29udGVudCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFBvc0ZpbHRlciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFBvc0ZpbHRlcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHRyeV9GVE9yZGVyKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgICB0cnlfRlRXaW5kb3coKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXN0YW5jZScKICAgICAgdHJ5X0ZURGlzdGFuY2UoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaWZmZXJlbnQnCiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYW1lJwogICAgICB0cnlfRlRTY29wZSgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9GVENvbnRlbnQoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUT3JkZXIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVE9yZGVyIiwgZTApOwogICAgc2hpZnQoMjA2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRPcmRlciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVE9yZGVyKCkKICB7CiAgICBzaGlmdFQoMjA2KTsgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRXaW5kb3coKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFdpbmRvdyIsIGUwKTsKICAgIHNoaWZ0KDI3NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpbmRvdycKICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRlRVbml0KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUV2luZG93IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUV2luZG93KCkKICB7CiAgICBzaGlmdFQoMjc1KTsgICAgICAgICAgICAgICAgICAgIC8vICd3aW5kb3cnCiAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfQWRkaXRpdmVFeHByKCk7CiAgICB0cnlfRlRVbml0KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVERpc3RhbmNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlREaXN0YW5jZSIsIGUwKTsKICAgIHNoaWZ0KDExOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rpc3RhbmNlJwogICAgbG9va2FoZWFkMVcoMTU5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnZXhhY3RseScgfCAnZnJvbScKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0ZUUmFuZ2UoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0ZUVW5pdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVERpc3RhbmNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZURGlzdGFuY2UoKQogIHsKICAgIHNoaWZ0VCgxMTgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Rpc3RhbmNlJwogICAgbG9va2FoZWFkMVcoMTU5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnZXhhY3RseScgfCAnZnJvbScKICAgIHRyeV9GVFJhbmdlKCk7CiAgICB0cnlfRlRVbml0KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFVuaXQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFVuaXQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIHNoaWZ0KDI3OSk7ICAgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZXMnCiAgICAgIHNoaWZ0KDIzNyk7ICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZXMnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjA5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmFncmFwaHMnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUVW5pdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFVuaXQoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgc2hpZnRUKDI3OSk7ICAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICBicmVhazsKICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgc2hpZnRUKDIzNyk7ICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjA5KTsgICAgICAgICAgICAgICAgICAvLyAncGFyYWdyYXBocycKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUU2NvcGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFNjb3BlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhbWUnCiAgICAgIHNoaWZ0KDIyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdzYW1lJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDExNik7ICAgICAgICAgICAgICAgICAgIC8vICdkaWZmZXJlbnQnCiAgICB9CiAgICBsb29rYWhlYWQxVygxMzYpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3BhcmFncmFwaCcgfCAnc2VudGVuY2UnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GVEJpZ1VuaXQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTY29wZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFNjb3BlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2FtZScKICAgICAgc2hpZnRUKDIyNyk7ICAgICAgICAgICAgICAgICAgLy8gJ3NhbWUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDExNik7ICAgICAgICAgICAgICAgICAgLy8gJ2RpZmZlcmVudCcKICAgIH0KICAgIGxvb2thaGVhZDFXKDEzNik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncGFyYWdyYXBoJyB8ICdzZW50ZW5jZScKICAgIHRyeV9GVEJpZ1VuaXQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUQmlnVW5pdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUQmlnVW5pdCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZScKICAgICAgc2hpZnQoMjM2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdwYXJhZ3JhcGgnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUQmlnVW5pdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVEJpZ1VuaXQoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZScKICAgICAgc2hpZnRUKDIzNik7ICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyMDgpOyAgICAgICAgICAgICAgICAgIC8vICdwYXJhZ3JhcGgnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVENvbnRlbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVENvbnRlbnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0KDgyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgbG9va2FoZWFkMVcoMTIxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5kJyB8ICdzdGFydCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgICAgc2hpZnQoMjQyKTsgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEyOCk7ICAgICAgICAgICAgICAgICAgIC8vICdlbnRpcmUnCiAgICAgIGxvb2thaGVhZDFXKDQ1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRlbnQnCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb250ZW50JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVENvbnRlbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRDb250ZW50KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0VCg4Mik7ICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgbG9va2FoZWFkMVcoMTIxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5kJyB8ICdzdGFydCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgICAgc2hpZnRUKDI0Mik7ICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMTI3KTsgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxMjgpOyAgICAgICAgICAgICAgICAgIC8vICdlbnRpcmUnCiAgICAgIGxvb2thaGVhZDFXKDQ1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRlbnQnCiAgICAgIHNoaWZ0VCgxMDEpOyAgICAgICAgICAgICAgICAgIC8vICdjb250ZW50JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRNYXRjaE9wdGlvbnMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVE1hdGNoT3B0aW9ucyIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHNoaWZ0KDI2NSk7ICAgICAgICAgICAgICAgICAgIC8vICd1c2luZycKICAgICAgbG9va2FoZWFkMVcoMjA0KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScgfCAnZGlhY3JpdGljcycgfCAnbGFuZ3VhZ2UnIHwgJ2xvd2VyY2FzZScgfCAnbm8nIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVE1hdGNoT3B0aW9uKCk7CiAgICAgIGxvb2thaGVhZDFXKDIxMyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxICE9IDI2NSkgICAgICAgICAgICAgICAgLy8gJ3VzaW5nJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRNYXRjaE9wdGlvbnMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRNYXRjaE9wdGlvbnMoKQogIHsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHNoaWZ0VCgyNjUpOyAgICAgICAgICAgICAgICAgIC8vICd1c2luZycKICAgICAgbG9va2FoZWFkMVcoMjA0KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScgfCAnZGlhY3JpdGljcycgfCAnbGFuZ3VhZ2UnIHwgJ2xvd2VyY2FzZScgfCAnbm8nIHwKICAgICAgdHJ5X0ZUTWF0Y2hPcHRpb24oKTsKICAgICAgbG9va2FoZWFkMVcoMjEzKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBpZiAobDEgIT0gMjY1KSAgICAgICAgICAgICAgICAvLyAndXNpbmcnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRNYXRjaE9wdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUTWF0Y2hPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm8nCiAgICAgIGxvb2thaGVhZDJXKDE3Nik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3N0ZW1taW5nJyB8ICdzdG9wJyB8ICd0aGVzYXVydXMnIHwgJ3dpbGRjYXJkcycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhbmd1YWdlJwogICAgICBwYXJzZV9GVExhbmd1YWdlT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgY2FzZSAxNDA0Nzk6ICAgICAgICAgICAgICAgICAgICAvLyAnbm8nICd3aWxkY2FyZHMnCiAgICAgIHBhcnNlX0ZUV2lsZENhcmRPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0aGVzYXVydXMnCiAgICBjYXNlIDEyODcwMzogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3RoZXNhdXJ1cycKICAgICAgcGFyc2VfRlRUaGVzYXVydXNPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgIGNhc2UgMTI0NjA3OiAgICAgICAgICAgICAgICAgICAgLy8gJ25vJyAnc3RlbW1pbmcnCiAgICAgIHBhcnNlX0ZUU3RlbU9wdGlvbigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTE1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpYWNyaXRpY3MnCiAgICAgIHBhcnNlX0ZURGlhY3JpdGljc09wdGlvbigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICBjYXNlIDEyNTExOTogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3N0b3AnCiAgICAgIHBhcnNlX0ZUU3RvcFdvcmRPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIHBhcnNlX0ZURXh0ZW5zaW9uT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRlRDYXNlT3B0aW9uKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUTWF0Y2hPcHRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRNYXRjaE9wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTkxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vJwogICAgICBsb29rYWhlYWQyVygxNzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdzdGVtbWluZycgfCAnc3RvcCcgfCAndGhlc2F1cnVzJyB8ICd3aWxkY2FyZHMnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYW5ndWFnZScKICAgICAgdHJ5X0ZUTGFuZ3VhZ2VPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aWxkY2FyZHMnCiAgICBjYXNlIDE0MDQ3OTogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3dpbGRjYXJkcycKICAgICAgdHJ5X0ZUV2lsZENhcmRPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0aGVzYXVydXMnCiAgICBjYXNlIDEyODcwMzogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3RoZXNhdXJ1cycKICAgICAgdHJ5X0ZUVGhlc2F1cnVzT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RlbW1pbmcnCiAgICBjYXNlIDEyNDYwNzogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3N0ZW1taW5nJwogICAgICB0cnlfRlRTdGVtT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGlhY3JpdGljcycKICAgICAgdHJ5X0ZURGlhY3JpdGljc09wdGlvbigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICBjYXNlIDEyNTExOTogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3N0b3AnCiAgICAgIHRyeV9GVFN0b3BXb3JkT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICB0cnlfRlRFeHRlbnNpb25PcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRlRDYXNlT3B0aW9uKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVENhc2VPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVENhc2VPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGxvb2thaGVhZDFXKDEyOCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luc2Vuc2l0aXZlJyB8ICdzZW5zaXRpdmUnCiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxNjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICAgIHNoaWZ0KDE2MCk7ICAgICAgICAgICAgICAgICAvLyAnaW5zZW5zaXRpdmUnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoMjM1KTsgICAgICAgICAgICAgICAgIC8vICdzZW5zaXRpdmUnCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb3dlcmNhc2UnCiAgICAgIHNoaWZ0KDE4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdsb3dlcmNhc2UnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjY0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwcGVyY2FzZScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRDYXNlT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUQ2FzZU9wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0VCg4OSk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBsb29rYWhlYWQxVygxMjgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbnNlbnNpdGl2ZScgfCAnc2Vuc2l0aXZlJwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlbnNpdGl2ZScKICAgICAgICBzaGlmdFQoMTYwKTsgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgyMzUpOyAgICAgICAgICAgICAgICAvLyAnc2Vuc2l0aXZlJwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG93ZXJjYXNlJwogICAgICBzaGlmdFQoMTgwKTsgICAgICAgICAgICAgICAgICAvLyAnbG93ZXJjYXNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyNjQpOyAgICAgICAgICAgICAgICAgIC8vICd1cHBlcmNhc2UnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVERpYWNyaXRpY3NPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVERpYWNyaXRpY3NPcHRpb24iLCBlMCk7CiAgICBzaGlmdCgxMTUpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkaWFjcml0aWNzJwogICAgbG9va2FoZWFkMVcoMTI4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbnNlbnNpdGl2ZScgfCAnc2Vuc2l0aXZlJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICBzaGlmdCgxNjApOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zZW5zaXRpdmUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjM1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnNpdGl2ZScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlREaWFjcml0aWNzT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZURGlhY3JpdGljc09wdGlvbigpCiAgewogICAgc2hpZnRUKDExNSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGlhY3JpdGljcycKICAgIGxvb2thaGVhZDFXKDEyOCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW5zZW5zaXRpdmUnIHwgJ3NlbnNpdGl2ZScKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlbnNpdGl2ZScKICAgICAgc2hpZnRUKDE2MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyMzUpOyAgICAgICAgICAgICAgICAgIC8vICdzZW5zaXRpdmUnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFN0ZW1PcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFN0ZW1PcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RlbW1pbmcnCiAgICAgIHNoaWZ0KDI0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAvLyAnbm8nCiAgICAgIGxvb2thaGVhZDFXKDc3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3N0ZW1taW5nJwogICAgICBzaGlmdCgyNDMpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RlbW1pbmcnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUU3RlbU9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFN0ZW1PcHRpb24oKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgICAgc2hpZnRUKDI0Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3N0ZW1taW5nJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxOTEpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc3RlbW1pbmcnCiAgICAgIHNoaWZ0VCgyNDMpOyAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUVGhlc2F1cnVzT3B0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRUaGVzYXVydXNPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgICBzaGlmdCgyNTEpOyAgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgICBsb29rYWhlYWQxVygxNTIpOyAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JyB8ICdhdCcgfCAnZGVmYXVsdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0ZUVGhlc2F1cnVzSUQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgICBsb29rYWhlYWQxVygxMTYpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXQnIHwgJ2RlZmF1bHQnCiAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICB7CiAgICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICAgIHBhcnNlX0ZUVGhlc2F1cnVzSUQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIH0KICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIGxvb2thaGVhZDFXKDEwNSk7ICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgc2hpZnQoNDIpOyAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICAgIGxvb2thaGVhZDFXKDM0KTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXQnCiAgICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgICBwYXJzZV9GVFRoZXNhdXJ1c0lEKCk7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE5MSk7ICAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoODEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlc2F1cnVzJwogICAgICBzaGlmdCgyNTEpOyAgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFRoZXNhdXJ1c09wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFRoZXNhdXJ1c09wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZXNhdXJ1cycKICAgICAgc2hpZnRUKDI1MSk7ICAgICAgICAgICAgICAgICAgLy8gJ3RoZXNhdXJ1cycKICAgICAgbG9va2FoZWFkMVcoMTUyKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicgfCAnYXQnIHwgJ2RlZmF1bHQnCiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIHRyeV9GVFRoZXNhdXJ1c0lEKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMzUpOyAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgICAgbG9va2FoZWFkMVcoMTE2KTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICdkZWZhdWx0JwogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgICB0cnlfRlRUaGVzYXVydXNJRCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgICAgfQogICAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAvLyAnLCcKICAgICAgICAgIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgICAgbG9va2FoZWFkMVcoMzQpOyAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcKICAgICAgICAgIHRyeV9GVFRoZXNhdXJ1c0lEKCk7CiAgICAgICAgfQogICAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxOTEpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoODEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlc2F1cnVzJwogICAgICBzaGlmdFQoMjUxKTsgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRUaGVzYXVydXNJRCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUVGhlc2F1cnVzSUQiLCBlMCk7CiAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGxvb2thaGVhZDFXKDIxOSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgaWYgKGwxID09IDIyMSkgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgewogICAgICBzaGlmdCgyMjEpOyAgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgfQogICAgbG9va2FoZWFkMVcoMjE1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDJXKDE4Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VuZCcgfCAnbGVhc3QnIHwgJ21vc3QnIHwgJ3Bvc2l0aW9uJyB8ICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDEzMSAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICB8fCBsayA9PSAxNDIgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgfHwgbGsgPT0gOTAxOTQgICAgICAgICAgICAgICAgIC8vICdhdCcgJ2xlYXN0JwogICAgIHx8IGxrID09IDk1MzE0KSAgICAgICAgICAgICAgICAvLyAnYXQnICdtb3N0JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUTGl0ZXJhbFJhbmdlKCk7CiAgICAgIGxvb2thaGVhZDFXKDYxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xldmVscycKICAgICAgc2hpZnQoMTc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xldmVscycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRUaGVzYXVydXNJRCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFRoZXNhdXJ1c0lEKCkKICB7CiAgICBzaGlmdFQoODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGxvb2thaGVhZDFXKDIxOSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgaWYgKGwxID09IDIyMSkgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgewogICAgICBzaGlmdFQoMjIxKTsgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgfQogICAgbG9va2FoZWFkMVcoMjE1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDJXKDE4Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VuZCcgfCAnbGVhc3QnIHwgJ21vc3QnIHwgJ3Bvc2l0aW9uJyB8ICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDEzMSAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICB8fCBsayA9PSAxNDIgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgfHwgbGsgPT0gOTAxOTQgICAgICAgICAgICAgICAgIC8vICdhdCcgJ2xlYXN0JwogICAgIHx8IGxrID09IDk1MzE0KSAgICAgICAgICAgICAgICAvLyAnYXQnICdtb3N0JwogICAgewogICAgICB0cnlfRlRMaXRlcmFsUmFuZ2UoKTsKICAgICAgbG9va2FoZWFkMVcoNjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbGV2ZWxzJwogICAgICBzaGlmdFQoMTc4KTsgICAgICAgICAgICAgICAgICAvLyAnbGV2ZWxzJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRMaXRlcmFsUmFuZ2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVExpdGVyYWxSYW5nZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGFjdGx5JwogICAgICBzaGlmdCgxMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDEyOSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xlYXN0JyB8ICdtb3N0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgLy8gJ2xlYXN0JwogICAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoMTg2KTsgICAgICAgICAgICAgICAgIC8vICdtb3N0JwogICAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICBsb29rYWhlYWQxVyg4Mik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd0bycKICAgICAgc2hpZnQoMjUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDgpOyAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUTGl0ZXJhbFJhbmdlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUTGl0ZXJhbFJhbmdlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICAgc2hpZnRUKDEzMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2V4YWN0bHknCiAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDgpOyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxMjkpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsZWFzdCcgfCAnbW9zdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgICAgc2hpZnRUKDE3Nik7ICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCg4KTsgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgxODYpOyAgICAgICAgICAgICAgICAvLyAnbW9zdCcKICAgICAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCg4KTsgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE0Mik7ICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDgpOyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgbG9va2FoZWFkMVcoODIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndG8nCiAgICAgIHNoaWZ0VCgyNTMpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdFQoOCk7ICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRTdG9wV29yZE9wdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUU3RvcFdvcmRPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RvcCcKICAgICAgc2hpZnQoMjQ0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIGxvb2thaGVhZDFXKDg5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dvcmRzJwogICAgICBzaGlmdCgyNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIGxvb2thaGVhZDFXKDE1Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonIHwgJ2F0JyB8ICdkZWZhdWx0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIHNoaWZ0KDExMCk7ICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIGxvb2thaGVhZDFXKDIxNik7ICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICAgICAgaWYgKGwxICE9IDEzMiAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICAgICAgICYmIGwxICE9IDI2MCkgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgICAgcGFyc2VfRlRTdG9wV29yZHNJbmNsRXhjbCgpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRlRTdG9wV29yZHMoKTsKICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIGxvb2thaGVhZDFXKDIxNik7ICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICAgICAgaWYgKGwxICE9IDEzMiAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICAgICAgICYmIGwxICE9IDI2MCkgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgICAgcGFyc2VfRlRTdG9wV29yZHNJbmNsRXhjbCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE5MSk7ICAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc3RvcCcKICAgICAgc2hpZnQoMjQ0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIGxvb2thaGVhZDFXKDg5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dvcmRzJwogICAgICBzaGlmdCgyNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUU3RvcFdvcmRPcHRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRTdG9wV29yZE9wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIHNoaWZ0VCgyNDQpOyAgICAgICAgICAgICAgICAgIC8vICdzdG9wJwogICAgICBsb29rYWhlYWQxVyg4OSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd3b3JkcycKICAgICAgc2hpZnRUKDI3OSk7ICAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICBsb29rYWhlYWQxVygxNTIpOyAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JyB8ICdhdCcgfCAnZGVmYXVsdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICBzaGlmdFQoMTEwKTsgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBsb29rYWhlYWQxVygyMTYpOyAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgICAgIGlmIChsMSAhPSAxMzIgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgICAgICAmJiBsMSAhPSAyNjApICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICAgICAgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHRyeV9GVFN0b3BXb3Jkc0luY2xFeGNsKCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRyeV9GVFN0b3BXb3JkcygpOwogICAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgbG9va2FoZWFkMVcoMjE2KTsgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgICAgICBpZiAobDEgIT0gMTMyICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgICAgICAgJiYgbDEgIT0gMjYwKSAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICAgIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICB0cnlfRlRTdG9wV29yZHNJbmNsRXhjbCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxOTEpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc3RvcCcKICAgICAgc2hpZnRUKDI0NCk7ICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIGxvb2thaGVhZDFXKDg5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dvcmRzJwogICAgICBzaGlmdFQoMjc5KTsgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFN0b3BXb3JkcygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUU3RvcFdvcmRzIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxVygxMDUpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgICBpZiAobDEgIT0gNDIpICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgfQogICAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTdG9wV29yZHMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRTdG9wV29yZHMoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCgxMSk7ICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIH0KICAgICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFN0b3BXb3Jkc0luY2xFeGNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRTdG9wV29yZHNJbmNsRXhjbCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgc2hpZnQoMjYwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEzMik7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICB9CiAgICBsb29rYWhlYWQxVygxMDMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonIHwgJ2F0JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRlRTdG9wV29yZHMoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTdG9wV29yZHNJbmNsRXhjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFN0b3BXb3Jkc0luY2xFeGNsKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIHNoaWZ0VCgyNjApOyAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTMyKTsgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgfQogICAgbG9va2FoZWFkMVcoMTAzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JyB8ICdhdCcKICAgIHRyeV9GVFN0b3BXb3JkcygpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRMYW5ndWFnZU9wdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUTGFuZ3VhZ2VPcHRpb24iLCBlMCk7CiAgICBzaGlmdCgxNzIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdsYW5ndWFnZScKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRMYW5ndWFnZU9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVExhbmd1YWdlT3B0aW9uKCkKICB7CiAgICBzaGlmdFQoMTcyKTsgICAgICAgICAgICAgICAgICAgIC8vICdsYW5ndWFnZScKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoMTEpOyAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUV2lsZENhcmRPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFdpbGRDYXJkT3B0aW9uIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpbGRjYXJkcycKICAgICAgc2hpZnQoMjc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpbGRjYXJkcycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAvLyAnbm8nCiAgICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dpbGRjYXJkcycKICAgICAgc2hpZnQoMjc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpbGRjYXJkcycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRXaWxkQ2FyZE9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFdpbGRDYXJkT3B0aW9uKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgICBzaGlmdFQoMjc0KTsgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxOTEpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2lsZGNhcmRzJwogICAgICBzaGlmdFQoMjc0KTsgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRFeHRlbnNpb25PcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVEV4dGVuc2lvbk9wdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDIwMyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZURXh0ZW5zaW9uT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZURXh0ZW5zaW9uT3B0aW9uKCkKICB7CiAgICBzaGlmdFQoMjAzKTsgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoMTEpOyAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUSWdub3JlT3B0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRJZ25vcmVPcHRpb24iLCBlMCk7CiAgICBzaGlmdCgyNzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRob3V0JwogICAgbG9va2FoZWFkMVcoNDUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb250ZW50JwogICAgc2hpZnQoMTAxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGVudCcKICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1VuaW9uRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVElnbm9yZU9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVElnbm9yZU9wdGlvbigpCiAgewogICAgc2hpZnRUKDI3Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aG91dCcKICAgIGxvb2thaGVhZDFXKDQ1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29udGVudCcKICAgIHNoaWZ0VCgxMDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRlbnQnCiAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfVW5pb25FeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db2xsZWN0aW9uRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbGxlY3Rpb25EZWNsIiwgZTApOwogICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGVjdGlvbicKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxMTEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnIHwgJ2FzJwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ29sbGVjdGlvblR5cGVEZWNsKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbGxlY3Rpb25EZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29sbGVjdGlvblR5cGVEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29sbGVjdGlvblR5cGVEZWNsIiwgZTApOwogICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBsb29rYWhlYWQxVygyNTMpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0l0ZW1UeXBlKCk7CiAgICBsb29rYWhlYWQxVygxNzEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyonIHwgJysnIHwgJzsnIHwgJz8nCiAgICBpZiAobDEgIT0gNTQpICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX09jY3VycmVuY2VJbmRpY2F0b3IoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29sbGVjdGlvblR5cGVEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhOYW1lIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluZGV4TmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luZGV4RG9tYWluRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkluZGV4RG9tYWluRXhwciIsIGUwKTsKICAgIHBhcnNlX1BhdGhFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluZGV4RG9tYWluRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luZGV4S2V5U3BlYygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkluZGV4S2V5U3BlYyIsIGUwKTsKICAgIHBhcnNlX0luZGV4S2V5RXhwcigpOwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSW5kZXhLZXlUeXBlRGVjbCgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTU2KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc7JyB8ICdjb2xsYXRpb24nCiAgICBpZiAobDEgPT0gOTUpICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSW5kZXhLZXlDb2xsYXRpb24oKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5kZXhLZXlTcGVjIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhLZXlFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhLZXlFeHByIiwgZTApOwogICAgcGFyc2VfUGF0aEV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5kZXhLZXlFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhLZXlUeXBlRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkluZGV4S2V5VHlwZURlY2wiLCBlMCk7CiAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfQXRvbWljVHlwZSgpOwogICAgbG9va2FoZWFkMVcoMTg5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICc7JyB8ICc/JyB8ICdjb2xsYXRpb24nCiAgICBpZiAobDEgPT0gNDAgICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgIHx8IGwxID09IDQxICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICB8fCBsMSA9PSA2NSkgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfT2NjdXJyZW5jZUluZGljYXRvcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbmRleEtleVR5cGVEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXRvbWljVHlwZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkF0b21pY1R5cGUiLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXRvbWljVHlwZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luZGV4S2V5Q29sbGF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhLZXlDb2xsYXRpb24iLCBlMCk7CiAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluZGV4S2V5Q29sbGF0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhEZWNsIiwgZTApOwogICAgc2hpZnQoMTU3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0luZGV4TmFtZSgpOwogICAgbG9va2FoZWFkMVcoNjgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvbicKICAgIHNoaWZ0KDIwMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29uJwogICAgbG9va2FoZWFkMVcoNjYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlcycKICAgIHNoaWZ0KDE5NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgbG9va2FoZWFkMVcoMjYyKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSW5kZXhEb21haW5FeHByKCk7CiAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdieScKICAgIGxvb2thaGVhZDFXKDI2Mik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0luZGV4S2V5U3BlYygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTA3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOycKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjYyKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbmRleEtleVNwZWMoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5kZXhEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSUNEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNEZWNsIiwgZTApOwogICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgbG9va2FoZWFkMVcoNDMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb25zdHJhaW50JwogICAgc2hpZnQoOTgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxMjQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2ZvcmVpZ24nIHwgJ29uJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29uJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0lDQ29sbGVjdGlvbigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSUNGb3JlaWduS2V5KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklDRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDQ29sbGVjdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDQ29sbGVjdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDIwMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29uJwogICAgbG9va2FoZWFkMVcoNDIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb2xsZWN0aW9uJwogICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGVjdGlvbicKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNTApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ2ZvcmVhY2gnIHwgJ25vZGUnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JQ0NvbGxTZXF1ZW5jZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSUNDb2xsU2VxdWVuY2VVbmlxdWUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0lDQ29sbE5vZGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSUNDb2xsZWN0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSUNDb2xsU2VxdWVuY2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJQ0NvbGxTZXF1ZW5jZSIsIGUwKTsKICAgIHBhcnNlX1ZhclJlZigpOwogICAgbG9va2FoZWFkMVcoNDApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjaGVjaycKICAgIHNoaWZ0KDkzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoZWNrJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJQ0NvbGxTZXF1ZW5jZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDQ29sbFNlcXVlbmNlVW5pcXVlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNDb2xsU2VxdWVuY2VVbmlxdWUiLCBlMCk7CiAgICBzaGlmdCgxOTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyUmVmKCk7CiAgICBsb29rYWhlYWQxVyg0MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NoZWNrJwogICAgc2hpZnQoOTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hlY2snCiAgICBsb29rYWhlYWQxVyg4Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3VuaXF1ZScKICAgIHNoaWZ0KDI2MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaXF1ZScKICAgIGxvb2thaGVhZDFXKDYwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAna2V5JwogICAgc2hpZnQoMTcxKTsgICAgICAgICAgICAgICAgICAgICAvLyAna2V5JwogICAgbG9va2FoZWFkMVcoMjYyKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfUGF0aEV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSUNDb2xsU2VxdWVuY2VVbmlxdWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JQ0NvbGxOb2RlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNDb2xsTm9kZSIsIGUwKTsKICAgIHNoaWZ0KDE0MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcmVhY2gnCiAgICBsb29rYWhlYWQxVyg2NSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnCiAgICBzaGlmdCgxOTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyUmVmKCk7CiAgICBsb29rYWhlYWQxVyg0MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NoZWNrJwogICAgc2hpZnQoOTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hlY2snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklDQ29sbE5vZGUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JQ0ZvcmVpZ25LZXkoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJQ0ZvcmVpZ25LZXkiLCBlMCk7CiAgICBzaGlmdCgxNDEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdmb3JlaWduJwogICAgbG9va2FoZWFkMVcoNjApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdrZXknCiAgICBzaGlmdCgxNzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdrZXknCiAgICBsb29rYWhlYWQxVyg1NCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Zyb20nCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JQ0ZvcmVpZ25LZXlTb3VyY2UoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0lDRm9yZWlnbktleVRhcmdldCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJQ0ZvcmVpZ25LZXkiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JQ0ZvcmVpZ25LZXlTb3VyY2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJQ0ZvcmVpZ25LZXlTb3VyY2UiLCBlMCk7CiAgICBzaGlmdCgxNDIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgbG9va2FoZWFkMVcoNDIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb2xsZWN0aW9uJwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSUNGb3JlaWduS2V5VmFsdWVzKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklDRm9yZWlnbktleVNvdXJjZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDRm9yZWlnbktleVRhcmdldCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDRm9yZWlnbktleVRhcmdldCIsIGUwKTsKICAgIHNoaWZ0KDI1Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgbG9va2FoZWFkMVcoNDIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb2xsZWN0aW9uJwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSUNGb3JlaWduS2V5VmFsdWVzKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklDRm9yZWlnbktleVRhcmdldCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDRm9yZWlnbktleVZhbHVlcygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDRm9yZWlnbktleVZhbHVlcyIsIGUwKTsKICAgIHNoaWZ0KDk2KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxlY3Rpb24nCiAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoNjUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJwogICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1ZhclJlZigpOwogICAgbG9va2FoZWFkMVcoNjApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdrZXknCiAgICBzaGlmdCgxNzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdrZXknCiAgICBsb29rYWhlYWQxVygyNjIpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9QYXRoRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJQ0ZvcmVpZ25LZXlWYWx1ZXMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tbWVudCgpCiAgewogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxKDkyKTsgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMgfCAnKDonIHwgJzopJwogICAgICBpZiAobDEgPT0gNTEpICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRDb250ZW50cwogICAgICAgIHNoaWZ0VCgyNCk7ICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfQ29tbWVudCgpOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoNTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICB9CgogIGZ1bmN0aW9uIHRyeV9XaGl0ZXNwYWNlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBTXldTCiAgICAgIHNoaWZ0VCgyMik7ICAgICAgICAgICAgICAgICAgIC8vIFNeV1MKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tbWVudCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRVFOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRVFOYW1lIiwgZTApOwogICAgbG9va2FoZWFkMSgyNDApOyAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfCAnYW5kJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0KDk3KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIHNoaWZ0KDEyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIHNoaWZ0KDEyMik7ICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBzaGlmdCgxMjUpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIHNoaWZ0KDE0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBicmVhazsKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIHNoaWZ0KDE2Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBicmVhazsKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdCgxODgpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgc2hpZnQoMjMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIHNoaWZ0KDIzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIHNoaWZ0KDI0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgc2hpZnQoMjQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnQoMjU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICAgIHNoaWZ0KDE2OSk7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICBzaGlmdCgyNDcpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0Z1bmN0aW9uTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFUU5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRVFOYW1lKCkKICB7CiAgICBsb29rYWhlYWQxKDI0MCk7ICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8ICdhbmQnIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0VCg4Myk7ICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgc2hpZnRUKDk3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgc2hpZnRUKDEyMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgc2hpZnRUKDEyMik7ICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHNoaWZ0VCgxMjUpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnRUKDE0Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdFQoMTU0KTsgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgc2hpZnRUKDE2Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHNoaWZ0VCgxODgpOyAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdFQoMTk0KTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdFQoMjMwKTsgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnRUKDIzMSk7ICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnRUKDI0OCk7ICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdFQoMjQ5KTsgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBzaGlmdFQoMjU5KTsgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgICAgc2hpZnRUKDc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgICBicmVhazsKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgc2hpZnRUKDE2OSk7ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgIHNoaWZ0VCgyNDcpOyAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0Z1bmN0aW9uTmFtZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25OYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25OYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIHNoaWZ0KDYpOyAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBicmVhazsKICAgIGNhc2UgNzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdCg3MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDc0KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdCg3NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0KDc2KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDgxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdCg4NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0KDg5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0KDkwKTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDk1KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgc2hpZnQoMTA0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwNik7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0KDExMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnQoMTEyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMTMpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDExNCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgc2hpZnQoMTIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdCgxMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIHNoaWZ0KDEzMCk7ICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEzMik7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEzNik7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzNyk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzOCk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIHNoaWZ0KDEzOSk7ICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIHNoaWZ0KDE0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgc2hpZnQoMTUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBicmVhazsKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBzaGlmdCgxNTIpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgc2hpZnQoMTUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNTUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTYxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnQoMTYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnQoMTY0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdCgxNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIHNoaWZ0KDE3Myk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdCgxNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdCgxNzcpOyAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdCgxODMpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnQoMTg0KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE4NSk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxODcpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODkpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMjAyKTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDIwNCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMjA1KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0KDIwNik7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnQoMjEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIxNyk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0KDIyMik7ICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnQoMjIzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBicmVhazsKICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgc2hpZnQoMjI4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyNDApOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIHNoaWZ0KDI0MSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIHNoaWZ0KDI0Mik7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgc2hpZnQoMjUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBzaGlmdCgyNTQpOyAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNjApOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNjIpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNjYpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI3Mik7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICAgIHNoaWZ0KDE3MCk7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDczKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg4NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDg2KTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg5Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDEwMik7ICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCgxMDMpOyAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCgxMDUpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTM0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTU2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTcpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNjMpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTk1KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMjAzKTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMjA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjI2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIzMik7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMzkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDI0NSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI1Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNTgpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNjcpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI2OCk7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBzaGlmdCgyNjkpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgc2hpZnQoMjczKTsgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIHNoaWZ0KDk4KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTc5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIHNoaWZ0KDE3OSk7ICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBicmVhazsKICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgc2hpZnQoMjI1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIHNoaWZ0KDc4KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICAgIHNoaWZ0KDEzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICBzaGlmdCgxNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgICBzaGlmdCgxOTcpOyAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBzaGlmdCgxNjgpOyAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICAgIHNoaWZ0KDE5OCk7ICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgICBzaGlmdCgyMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDI1NSk7ICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGdW5jdGlvbk5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRnVuY3Rpb25OYW1lKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgICAgc2hpZnRUKDYpOyAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIHNoaWZ0VCg3MSk7ICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnRUKDc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0VCg3NSk7ICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnRUKDc2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnRUKDgwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0VCg4NSk7ICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnRUKDg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnRUKDkwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0VCg5MSk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnRUKDk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgOTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgc2hpZnRUKDk1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBzaGlmdFQoMTA0KTsgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgc2hpZnRUKDEwNik7ICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBicmVhazsKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnRUKDExMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdFQoMTEyKTsgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0VCgxMTMpOyAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgc2hpZnRUKDExNCk7ICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBzaGlmdFQoMTE5KTsgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBzaGlmdFQoMTIwKTsgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnRUKDEyMyk7ICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0VCgxMjQpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0VCgxMjcpOyAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0VCgxMjkpOyAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgc2hpZnRUKDEzMCk7ICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgc2hpZnRUKDEzMik7ICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgc2hpZnRUKDEzNik7ICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgc2hpZnRUKDEzNyk7ICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgc2hpZnRUKDEzOCk7ICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgc2hpZnRUKDEzOSk7ICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgc2hpZnRUKDE0OCk7ICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBzaGlmdFQoMTUwKTsgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIHNoaWZ0VCgxNTIpOyAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBzaGlmdFQoMTUzKTsgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIHNoaWZ0VCgxNTUpOyAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBzaGlmdFQoMTYxKTsgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdFQoMTYyKTsgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdFQoMTY0KTsgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0VCgxNjUpOyAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdFQoMTY2KTsgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgc2hpZnRUKDE3Myk7ICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0VCgxNzUpOyAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0VCgxNzcpOyAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0VCgxODEpOyAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0VCgxODMpOyAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdFQoMTg0KTsgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgc2hpZnRUKDE4NSk7ICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NzogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0VCgxODcpOyAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIHNoaWZ0VCgxODkpOyAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgICBzaGlmdFQoMjAyKTsgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgc2hpZnRUKDIwNCk7ICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBicmVhazsKICAgIGNhc2UgMjA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBzaGlmdFQoMjA1KTsgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnRUKDIwNik7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdFQoMjEwKTsgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnRUKDIxNik7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnRUKDIxNyk7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnRUKDIyMik7ICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdFQoMjIzKTsgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIHNoaWZ0VCgyMjQpOyAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBzaGlmdFQoMjI4KTsgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBicmVhazsKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0VCgyMzQpOyAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0VCgyNDApOyAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgc2hpZnRUKDI0MSk7ICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgc2hpZnRUKDI0Mik7ICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMjUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBzaGlmdFQoMjUzKTsgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIHNoaWZ0VCgyNTQpOyAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0VCgyNTYpOyAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIHNoaWZ0VCgyNjApOyAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIHNoaWZ0VCgyNjIpOyAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIHNoaWZ0VCgyNjYpOyAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgc2hpZnRUKDI3Mik7ICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBicmVhazsKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScKICAgICAgc2hpZnRUKDE3MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgc2hpZnRUKDczKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdFQoODIpOyAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIHNoaWZ0VCg4NCk7ICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgc2hpZnRUKDg2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBzaGlmdFQoODcpOyAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIHNoaWZ0VCg5Mik7ICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0VCg5OSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgc2hpZnRUKDEwMik7ICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIHNoaWZ0VCgxMDMpOyAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIHNoaWZ0VCgxMDUpOyAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIHNoaWZ0VCgxMDcpOyAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgc2hpZnRUKDEyNik7ICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIHNoaWZ0VCgxMzMpOyAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBicmVhazsKICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBzaGlmdFQoMTM0KTsgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBzaGlmdFQoMTQzKTsgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBzaGlmdFQoMTU2KTsgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIHNoaWZ0VCgxNTcpOyAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIHNoaWZ0VCgxNjMpOyAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBzaGlmdFQoMTc0KTsgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBicmVhazsKICAgIGNhc2UgMTk1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBzaGlmdFQoMTk1KTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICBzaGlmdFQoMjAzKTsgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBzaGlmdFQoMjA3KTsgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICBzaGlmdFQoMjI2KTsgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgc2hpZnRUKDIyOSk7ICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgc2hpZnRUKDIzMik7ICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIHNoaWZ0VCgyMzkpOyAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgc2hpZnRUKDI0NSk7ICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgc2hpZnRUKDI1Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIHNoaWZ0VCgyNTgpOyAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBicmVhazsKICAgIGNhc2UgMjYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBzaGlmdFQoMjYzKTsgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIHNoaWZ0VCgyNjcpOyAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgc2hpZnRUKDI2OCk7ICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIHNoaWZ0VCgyNjkpOyAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBzaGlmdFQoMjczKTsgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgc2hpZnRUKDk4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgc2hpZnRUKDE3OSk7ICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgICBzaGlmdFQoMjI1KTsgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgc2hpZnRUKDc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgICAgc2hpZnRUKDEzNSk7ICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTQyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIHNoaWZ0VCgxNDIpOyAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICAgIHNoaWZ0VCgxOTcpOyAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgICBicmVhazsKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgc2hpZnRUKDE5OCk7ICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnCiAgICAgIHNoaWZ0VCgyMzMpOyAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDI1NSk7ICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OQ05hbWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOQ05hbWUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxOTogICAgICAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgc2hpZnQoMTkpOyAgICAgICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIHNoaWZ0KDcxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0KDc2KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDgxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdCg4NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0KDg5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0KDkwKTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgc2hpZnQoMTE0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBzaGlmdCgxMTkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdCgxMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdCgxMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICBzaGlmdCgxMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICBicmVhazsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgc2hpZnQoMTM5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgc2hpZnQoMTQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBzaGlmdCgxNTApOyAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIHNoaWZ0KDE1Mik7ICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBzaGlmdCgxNTMpOyAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnQoMTYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnQoMTY0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdCgxNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdCgxNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdCgxNzcpOyAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdCgxODMpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnQoMTg0KTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4OTogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgc2hpZnQoMTg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBicmVhazsKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIHNoaWZ0KDIwMik7ICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgICBicmVhazsKICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBzaGlmdCgyMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIHNoaWZ0KDIwNSk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBzaGlmdCgyMjgpOyAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICBicmVhazsKICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgc2hpZnQoMjQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgc2hpZnQoMjQyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBicmVhazsKICAgIGNhc2UgMjUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBzaGlmdCgyNTMpOyAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIHNoaWZ0KDI1NCk7ICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgc2hpZnQoMjYwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBzaGlmdCgyNzIpOyAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDc0KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdCg3NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBzaGlmdCg5Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0KDExMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnQoMTEyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMTMpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBzaGlmdCgxMjApOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgc2hpZnQoMTIxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgc2hpZnQoMTIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHNoaWZ0KDEyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgc2hpZnQoMTMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBzaGlmdCgxMzYpOyAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBzaGlmdCgxMzcpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBzaGlmdCgxMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIHNoaWZ0KDE0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgc2hpZnQoMTU1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIHNoaWZ0KDE2MSk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgc2hpZnQoMTY3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgc2hpZnQoMTczKTsgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBzaGlmdCgxODUpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgc2hpZnQoMTg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgc2hpZnQoMTg4KTsgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIHNoaWZ0KDE5NCk7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0KDIwNik7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnQoMjEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIxNyk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBzaGlmdCgyMjApOyAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0KDIyMik7ICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnQoMjIzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgc2hpZnQoMjMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIHNoaWZ0KDIzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyNDApOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIHNoaWZ0KDI0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgc2hpZnQoMjQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIHNoaWZ0KDI1OSk7ICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgc2hpZnQoMjYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAgc2hpZnQoMjY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBzaGlmdCgyNjgpOyAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgICBzaGlmdCgxNzApOyAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgICBicmVhazsKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBzaGlmdCg3Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0KDgyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgc2hpZnQoODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBicmVhazsKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBzaGlmdCg4Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIHNoaWZ0KDg3KTsgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgYnJlYWs7CiAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgc2hpZnQoOTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBicmVhazsKICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgc2hpZnQoOTkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgc2hpZnQoMTAzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBicmVhazsKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgc2hpZnQoMTA1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAgc2hpZnQoMTA3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBzaGlmdCgxMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgc2hpZnQoMTMzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIHNoaWZ0KDEzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIHNoaWZ0KDE0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIHNoaWZ0KDE1Nik7ICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAgc2hpZnQoMTU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBicmVhazsKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIHNoaWZ0KDE3NCk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgIHNoaWZ0KDE5NSk7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIHNoaWZ0KDIwMyk7ICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIHNoaWZ0KDIwNyk7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIHNoaWZ0KDIyNik7ICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICBzaGlmdCgyMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICBicmVhazsKICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBzaGlmdCgyMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgc2hpZnQoMjM5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBzaGlmdCgyNDUpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBzaGlmdCgyNTcpOyAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgc2hpZnQoMjU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgIHNoaWZ0KDI2Myk7ICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAgc2hpZnQoMjY3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIHNoaWZ0KDI2OSk7ICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBzaGlmdCgyNzMpOyAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgc2hpZnQoOTgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgc2hpZnQoMTc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgICBzaGlmdCgyMjUpOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgc2hpZnQoNzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgICAgc2hpZnQoMTM1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTQyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIHNoaWZ0KDE0Mik7ICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICBicmVhazsKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICAgIHNoaWZ0KDE5Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgICBicmVhazsKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIHNoaWZ0KDE2OCk7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBicmVhazsKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgc2hpZnQoMTk4KTsgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnCiAgICAgIHNoaWZ0KDIzMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjU1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5DTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9OQ05hbWUoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgICBzaGlmdFQoMTkpOyAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgYnJlYWs7CiAgICBjYXNlIDcxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnRUKDcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnRUKDc2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnRUKDgwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0VCg4NSk7ICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnRUKDg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnRUKDkwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0VCg5MSk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0VCg5NSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0VCgxMDYpOyAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdFQoMTEwKTsgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBzaGlmdFQoMTE0KTsgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIHNoaWZ0VCgxMTkpOyAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnRUKDEyMyk7ICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0VCgxMjQpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0VCgxMjcpOyAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0VCgxMjkpOyAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0VCgxMzIpOyAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBzaGlmdFQoMTM5KTsgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBzaGlmdFQoMTQ4KTsgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHNoaWZ0VCgxNTApOyAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnRUKDE1Mik7ICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIHNoaWZ0VCgxNTMpOyAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdFQoMTYyKTsgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdFQoMTY0KTsgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0VCgxNjUpOyAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdFQoMTY2KTsgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0VCgxNzUpOyAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0VCgxNzcpOyAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0VCgxODEpOyAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0VCgxODMpOyAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdFQoMTg0KTsgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdFQoMTg5KTsgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnRUKDIwMik7ICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0VCgyMDQpOyAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnRUKDIwNSk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgc2hpZnRUKDIyNCk7ICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIHNoaWZ0VCgyMjgpOyAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBzaGlmdFQoMjQxKTsgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjQyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBzaGlmdFQoMjQyKTsgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIHNoaWZ0VCgyNTMpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgc2hpZnRUKDI1NCk7ICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdFQoMjYwKTsgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0VCgyNzIpOyAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnRUKDc0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0VCg3NSk7ICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnRUKDgzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnRUKDk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0VCg5Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIHNoaWZ0VCgxMDQpOyAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBicmVhazsKICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnRUKDExMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdFQoMTEyKTsgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0VCgxMTMpOyAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIHNoaWZ0VCgxMjApOyAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBzaGlmdFQoMTIxKTsgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdFQoMTIyKTsgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgc2hpZnRUKDEyNSk7ICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBzaGlmdFQoMTMwKTsgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0VCgxMzYpOyAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0VCgxMzcpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0VCgxMzgpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnRUKDE0Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdFQoMTU0KTsgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdFQoMTU1KTsgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnRUKDE2MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBzaGlmdFQoMTY3KTsgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBzaGlmdFQoMTczKTsgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0VCgxODUpOyAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdFQoMTg3KTsgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdFQoMTg4KTsgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnRUKDE5NCk7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnRUKDIwNik7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdFQoMjEwKTsgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnRUKDIxNik7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnRUKDIxNyk7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0VCgyMjApOyAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnRUKDIyMik7ICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdFQoMjIzKTsgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdFQoMjMwKTsgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnRUKDIzMSk7ICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0VCgyMzQpOyAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0VCgyNDApOyAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnRUKDI0OCk7ICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdFQoMjQ5KTsgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0VCgyNTYpOyAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnRUKDI1OSk7ICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdFQoMjYyKTsgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdFQoMjY2KTsgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0VCgyNjgpOyAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICAgIHNoaWZ0VCgxNzApOyAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0VCg3Myk7ICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdFQoODQpOyAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0VCg4Nik7ICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnRUKDg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdFQoOTIpOyAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdFQoOTkpOyAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0VCgxMDIpOyAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdFQoMTAzKTsgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdFQoMTA1KTsgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdFQoMTA3KTsgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0VCgxMjYpOyAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdFQoMTMzKTsgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnRUKDEzNCk7ICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnRUKDE0Myk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnRUKDE1Nik7ICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdFQoMTU3KTsgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdFQoMTYzKTsgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnRUKDE3NCk7ICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnRUKDE5NSk7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnRUKDIwMyk7ICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnRUKDIwNyk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnRUKDIyNik7ICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0VCgyMjkpOyAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0VCgyMzIpOyAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdFQoMjM5KTsgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0VCgyNDUpOyAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0VCgyNTcpOyAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdFQoMjU4KTsgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnRUKDI2Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdFQoMjY3KTsgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgc2hpZnRUKDI2OSk7ICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIHNoaWZ0VCgyNzMpOyAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBzaGlmdFQoOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBzaGlmdFQoMTc5KTsgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIHNoaWZ0VCgyMjUpOyAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBzaGlmdFQoNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgICBzaGlmdFQoMTM1KTsgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgICAgc2hpZnRUKDE0Mik7ICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcKICAgICAgc2hpZnRUKDE5Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgICBzaGlmdFQoMTk4KTsgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMjMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcKICAgICAgc2hpZnRUKDIzMyk7ICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjU1KTsgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX01haW5Nb2R1bGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJNYWluTW9kdWxlIiwgZTApOwogICAgcGFyc2VfUHJvbG9nKCk7CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Qcm9ncmFtKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk1haW5Nb2R1bGUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Qcm9ncmFtKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJvZ3JhbSIsIGUwKTsKICAgIHBhcnNlX1N0YXRlbWVudHNBbmRPcHRpb25hbEV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJvZ3JhbSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N0YXRlbWVudHMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTdGF0ZW1lbnRzIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjgzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgICBsb29rYWhlYWQyVygyNjkpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICAgIGxvb2thaGVhZDIoMjQyKTsgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA0NzogICAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgbG9va2FoZWFkMlcoMjg1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDg6ICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICBsb29rYWhlYWQyVygyNTkpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgICAgbG9va2FoZWFkMig0KTsgICAgICAgICAgICAgIC8vIFFOYW1lCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICAgIGxvb2thaGVhZDIoMSk7ICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICAgIGxvb2thaGVhZDIoMyk7ICAgICAgICAgICAgICAvLyBQSVRhcmdldAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDY5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgICBsb29rYWhlYWQyVygyNzIpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgICBsb29rYWhlYWQyVygyNjgpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgICAgbG9va2FoZWFkMlcoMTQ3KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3JldHVybmluZycKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgICBsb29rYWhlYWQyVygxNzkpOyAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnc2xpZGluZycgfCAndHVtYmxpbmcnCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgICAgbG9va2FoZWFkMlcoMjc1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgICAgbG9va2FoZWFkMlcoMTY2KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJ3Njb3JlJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE4NzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICAgIGxvb2thaGVhZDJXKDI0Nik7ICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICAgIGxvb2thaGVhZDJXKDI0NCk7ICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICAgIGxvb2thaGVhZDJXKDE3MCk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdub2RlJyB8ICd2YWx1ZScKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICAgIGxvb2thaGVhZDJXKDE4OCk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdsYXgnIHwgJ3N0cmljdCcgfCAndHlwZScgfCAneycKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgICAgbG9va2FoZWFkMlcoMjgyKTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjgzOiAgICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgICAgICBsb29rYWhlYWQyVygyNzMpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgICAgIGxvb2thaGVhZDJXKDI0NSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICAgIGxvb2thaGVhZDJXKDI1Mik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICAgIGxvb2thaGVhZDJXKDE0NSk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdsb29wJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgICAgbG9va2FoZWFkMlcoOTcpOyAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKDonIHwgJ3snCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgICAgbG9va2FoZWFkMlcoMjYwKTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgY2FzZSAxOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgICAgICBsb29rYWhlYWQyVygyNjUpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcKICAgICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICAgICAgbG9va2FoZWFkMlcoMjEwKTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcuJyB8ICcvJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgICAgbG9va2FoZWFkMlcoMTQzKTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgICAgbG9va2FoZWFkMlcoMTQ4KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3snCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGNhc2UgOTogICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnJCQnCiAgICAgICAgbG9va2FoZWFkMlcoMjA5KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcuJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBjYXNlIDEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICAgIGxvb2thaGVhZDJXKDIwKTsgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyg6JwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgY2FzZSA3NTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBjYXNlIDEzODogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIGNhc2UgMTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIGNhc2UgMTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBjYXNlIDE4OTogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGNhc2UgMTk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgY2FzZSAyMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBjYXNlIDIzMzogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgY2FzZSAyMzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGNhc2UgMjQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgY2FzZSAyNDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgY2FzZSAyNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGNhc2UgMjYzOiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICAgIGxvb2thaGVhZDJXKDk1KTsgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDI1ICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgICAmJiBsayAhPSA1NCAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICAgJiYgbGsgIT0gMjg3ICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgICYmIGxrICE9IDEyODA4ICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgRU9GCiAgICAgICAmJiBsayAhPSAxMjgwOSAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MTAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MTEgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MzIgICAgICAgICAgICAgICAvLyAnJCQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NDcgICAgICAgICAgICAgICAvLyAnLycgRU9GCiAgICAgICAmJiBsayAhPSAxMjkzNSAgICAgICAgICAgICAgIC8vICdmYWxzZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk5NyAgICAgICAgICAgICAgIC8vICdudWxsJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDU1ICAgICAgICAgICAgICAgLy8gJ3RydWUnIEVPRgogICAgICAgJiYgbGsgIT0gMTYxNDAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICckJwogICAgICAgJiYgbGsgIT0gMjE1MTIgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCAnLCcKICAgICAgICYmIGxrICE9IDIxNTEzICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTUxNCAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTUxNSAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTUzNiAgICAgICAgICAgICAgIC8vICckJCcgJywnCiAgICAgICAmJiBsayAhPSAyMTU1MSAgICAgICAgICAgICAgIC8vICcvJyAnLCcKICAgICAgICYmIGxrICE9IDIxNjM5ICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxNzAxICAgICAgICAgICAgICAgLy8gJ251bGwnICcsJwogICAgICAgJiYgbGsgIT0gMjE3NTkgICAgICAgICAgICAgICAvLyAndHJ1ZScgJywnCiAgICAgICAmJiBsayAhPSAyNzY1NiAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjc2NTcgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjU4ICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjU5ICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjgwICAgICAgICAgICAgICAgLy8gJyQkJyAnOycKICAgICAgICYmIGxrICE9IDI3Njk1ICAgICAgICAgICAgICAgLy8gJy8nICc7JwogICAgICAgJiYgbGsgIT0gMjc3ODMgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc7JwogICAgICAgJiYgbGsgIT0gMjc4NDUgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzkwMyAgICAgICAgICAgICAgIC8vICd0cnVlJyAnOycKICAgICAgICYmIGxrICE9IDkxNzM1ICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDkxNzUxICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDExNTMzMyAgICAgICAgICAgICAgLy8gJ2V4aXQnICdyZXR1cm5pbmcnCiAgICAgICAmJiBsayAhPSAxNDY5NTIgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICd9JwogICAgICAgJiYgbGsgIT0gMTQ2OTUzICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0Njk1NCAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0Njk1NSAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0Njk3NiAgICAgICAgICAgICAgLy8gJyQkJyAnfScKICAgICAgICYmIGxrICE9IDE0Njk5MSAgICAgICAgICAgICAgLy8gJy8nICd9JwogICAgICAgJiYgbGsgIT0gMTQ3MDc5ICAgICAgICAgICAgICAvLyAnZmFsc2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ3MTQxICAgICAgICAgICAgICAvLyAnbnVsbCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDcxOTkpICAgICAgICAgICAgIC8vICd0cnVlJyAnfScKICAgICAgewogICAgICAgIGxrID0gbWVtb2l6ZWQoOCwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgdHJ5X1N0YXRlbWVudCgpOwogICAgICAgICAgICBsayA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICAgIHsKICAgICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIH0KICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICBtZW1vaXplKDgsIGUwLCBsayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayAhPSAtMQogICAgICAgJiYgbGsgIT0gNTQgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgICYmIGxrICE9IDE2MTQwICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAgICYmIGxrICE9IDI3NjU2ICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzY1NyAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjc2NTggICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjc2NTkgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjc2ODAgICAgICAgICAgICAgICAvLyAnJCQnICc7JwogICAgICAgJiYgbGsgIT0gMjc2OTUgICAgICAgICAgICAgICAvLyAnLycgJzsnCiAgICAgICAmJiBsayAhPSAyNzc4MyAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzg0NSAgICAgICAgICAgICAgIC8vICdudWxsJyAnOycKICAgICAgICYmIGxrICE9IDI3OTAzICAgICAgICAgICAgICAgLy8gJ3RydWUnICc7JwogICAgICAgJiYgbGsgIT0gOTE3MzUgICAgICAgICAgICAgICAvLyAnYnJlYWsnICdsb29wJwogICAgICAgJiYgbGsgIT0gOTE3NTEgICAgICAgICAgICAgICAvLyAnY29udGludWUnICdsb29wJwogICAgICAgJiYgbGsgIT0gMTE1MzMzKSAgICAgICAgICAgICAvLyAnZXhpdCcgJ3JldHVybmluZycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN0YXRlbWVudHMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RhdGVtZW50cygpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjgzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgICBsb29rYWhlYWQyVygyNjkpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzNjogICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICAgIGxvb2thaGVhZDIoMjQyKTsgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA0NzogICAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgbG9va2FoZWFkMlcoMjg1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDg6ICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICBsb29rYWhlYWQyVygyNTkpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgICAgbG9va2FoZWFkMig0KTsgICAgICAgICAgICAgIC8vIFFOYW1lCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTY6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICAgIGxvb2thaGVhZDIoMSk7ICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICAgIGxvb2thaGVhZDIoMyk7ICAgICAgICAgICAgICAvLyBQSVRhcmdldAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDY5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgICBsb29rYWhlYWQyVygyNzIpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgICBsb29rYWhlYWQyVygyNjgpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgICAgbG9va2FoZWFkMlcoMTQ3KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3JldHVybmluZycKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgICBsb29rYWhlYWQyVygxNzkpOyAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnc2xpZGluZycgfCAndHVtYmxpbmcnCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgICAgbG9va2FoZWFkMlcoMjc1KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgICAgbG9va2FoZWFkMlcoMTY2KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJ3Njb3JlJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE4NzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICAgIGxvb2thaGVhZDJXKDI0Nik7ICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICAgIGxvb2thaGVhZDJXKDI0NCk7ICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICAgIGxvb2thaGVhZDJXKDE3MCk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdub2RlJyB8ICd2YWx1ZScKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICAgIGxvb2thaGVhZDJXKDE4OCk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdsYXgnIHwgJ3N0cmljdCcgfCAndHlwZScgfCAneycKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgICAgbG9va2FoZWFkMlcoMjgyKTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjgzOiAgICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgICAgICBsb29rYWhlYWQyVygyNzMpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgICAgIGxvb2thaGVhZDJXKDI0NSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICAgIGxvb2thaGVhZDJXKDI1Mik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICAgIGxvb2thaGVhZDJXKDE0NSk7ICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdsb29wJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgICAgbG9va2FoZWFkMlcoOTcpOyAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKDonIHwgJ3snCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgICAgbG9va2FoZWFkMlcoMjYwKTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICBjYXNlIDQzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgY2FzZSAxOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgICAgICBsb29rYWhlYWQyVygyNjUpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcKICAgICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICAgICAgbG9va2FoZWFkMlcoMjEwKTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcuJyB8ICcvJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgICAgbG9va2FoZWFkMlcoMTQzKTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgICAgbG9va2FoZWFkMlcoMTQ4KTsgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3snCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGNhc2UgOTogICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnJCQnCiAgICAgICAgbG9va2FoZWFkMlcoMjA5KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcuJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBjYXNlIDEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICAgIGxvb2thaGVhZDJXKDIwKTsgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyg6JwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgY2FzZSA3NTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBjYXNlIDEzODogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIGNhc2UgMTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICBjYXNlIDE0MzogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIGNhc2UgMTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBjYXNlIDE4OTogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGNhc2UgMTk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgY2FzZSAyMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBjYXNlIDIzMzogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgY2FzZSAyMzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGNhc2UgMjQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgY2FzZSAyNDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgY2FzZSAyNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGNhc2UgMjYzOiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICAgIGxvb2thaGVhZDJXKDk1KTsgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDI1ICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgICAmJiBsayAhPSA1NCAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICAgJiYgbGsgIT0gMjg3ICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgICYmIGxrICE9IDEyODA4ICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgRU9GCiAgICAgICAmJiBsayAhPSAxMjgwOSAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MTAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MTEgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MzIgICAgICAgICAgICAgICAvLyAnJCQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NDcgICAgICAgICAgICAgICAvLyAnLycgRU9GCiAgICAgICAmJiBsayAhPSAxMjkzNSAgICAgICAgICAgICAgIC8vICdmYWxzZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk5NyAgICAgICAgICAgICAgIC8vICdudWxsJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDU1ICAgICAgICAgICAgICAgLy8gJ3RydWUnIEVPRgogICAgICAgJiYgbGsgIT0gMTYxNDAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICckJwogICAgICAgJiYgbGsgIT0gMjE1MTIgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCAnLCcKICAgICAgICYmIGxrICE9IDIxNTEzICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTUxNCAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTUxNSAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTUzNiAgICAgICAgICAgICAgIC8vICckJCcgJywnCiAgICAgICAmJiBsayAhPSAyMTU1MSAgICAgICAgICAgICAgIC8vICcvJyAnLCcKICAgICAgICYmIGxrICE9IDIxNjM5ICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxNzAxICAgICAgICAgICAgICAgLy8gJ251bGwnICcsJwogICAgICAgJiYgbGsgIT0gMjE3NTkgICAgICAgICAgICAgICAvLyAndHJ1ZScgJywnCiAgICAgICAmJiBsayAhPSAyNzY1NiAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjc2NTcgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjU4ICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjU5ICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjgwICAgICAgICAgICAgICAgLy8gJyQkJyAnOycKICAgICAgICYmIGxrICE9IDI3Njk1ICAgICAgICAgICAgICAgLy8gJy8nICc7JwogICAgICAgJiYgbGsgIT0gMjc3ODMgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc7JwogICAgICAgJiYgbGsgIT0gMjc4NDUgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzkwMyAgICAgICAgICAgICAgIC8vICd0cnVlJyAnOycKICAgICAgICYmIGxrICE9IDkxNzM1ICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDkxNzUxICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDExNTMzMyAgICAgICAgICAgICAgLy8gJ2V4aXQnICdyZXR1cm5pbmcnCiAgICAgICAmJiBsayAhPSAxNDY5NTIgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICd9JwogICAgICAgJiYgbGsgIT0gMTQ2OTUzICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0Njk1NCAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0Njk1NSAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0Njk3NiAgICAgICAgICAgICAgLy8gJyQkJyAnfScKICAgICAgICYmIGxrICE9IDE0Njk5MSAgICAgICAgICAgICAgLy8gJy8nICd9JwogICAgICAgJiYgbGsgIT0gMTQ3MDc5ICAgICAgICAgICAgICAvLyAnZmFsc2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ3MTQxICAgICAgICAgICAgICAvLyAnbnVsbCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDcxOTkpICAgICAgICAgICAgIC8vICd0cnVlJyAnfScKICAgICAgewogICAgICAgIGxrID0gbWVtb2l6ZWQoOCwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgdHJ5X1N0YXRlbWVudCgpOwogICAgICAgICAgICBtZW1vaXplKDgsIGUwQSwgLTEpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICBtZW1vaXplKDgsIGUwQSwgLTIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxrICE9IC0xCiAgICAgICAmJiBsayAhPSA1NCAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICAgJiYgbGsgIT0gMTYxNDAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICckJwogICAgICAgJiYgbGsgIT0gMjc2NTYgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3NjU3ICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzY1OCAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzY1OSAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzY4MCAgICAgICAgICAgICAgIC8vICckJCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzY5NSAgICAgICAgICAgICAgIC8vICcvJyAnOycKICAgICAgICYmIGxrICE9IDI3NzgzICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnOycKICAgICAgICYmIGxrICE9IDI3ODQ1ICAgICAgICAgICAgICAgLy8gJ251bGwnICc7JwogICAgICAgJiYgbGsgIT0gMjc5MDMgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzsnCiAgICAgICAmJiBsayAhPSA5MTczNSAgICAgICAgICAgICAgIC8vICdicmVhaycgJ2xvb3AnCiAgICAgICAmJiBsayAhPSA5MTc1MSAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJ2xvb3AnCiAgICAgICAmJiBsayAhPSAxMTUzMzMpICAgICAgICAgICAgIC8vICdleGl0JyAncmV0dXJuaW5nJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X1N0YXRlbWVudCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3RhdGVtZW50c0FuZEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTdGF0ZW1lbnRzQW5kRXhwciIsIGUwKTsKICAgIHBhcnNlX1N0YXRlbWVudHMoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RhdGVtZW50c0FuZEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RhdGVtZW50c0FuZEV4cHIoKQogIHsKICAgIHRyeV9TdGF0ZW1lbnRzKCk7CiAgICB0cnlfRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3RhdGVtZW50c0FuZE9wdGlvbmFsRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN0YXRlbWVudHNBbmRPcHRpb25hbEV4cHIiLCBlMCk7CiAgICBwYXJzZV9TdGF0ZW1lbnRzKCk7CiAgICBpZiAobDEgIT0gMjUgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICYmIGwxICE9IDI4NykgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN0YXRlbWVudHNBbmRPcHRpb25hbEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RhdGVtZW50c0FuZE9wdGlvbmFsRXhwcigpCiAgewogICAgdHJ5X1N0YXRlbWVudHMoKTsKICAgIGlmIChsMSAhPSAyNSAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgJiYgbDEgIT0gMjg3KSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB0cnlfRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3RhdGVtZW50IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgIGxvb2thaGVhZDJXKDE0Nyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3JldHVybmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGxvb2thaGVhZDJXKDE3OSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJ3NsaWRpbmcnIHwgJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgbG9va2FoZWFkMlcoMTY2KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnc2NvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBsb29rYWhlYWQyVygxNDgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICd7JwogICAgICBicmVhazsKICAgIGNhc2UgMjY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICBsb29rYWhlYWQyVygxNDMpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JwogICAgICBicmVhazsKICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI4Mik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGNhc2UgMzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICAgIGxvb2thaGVhZDJXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBsb29rYWhlYWQyVygxNDUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdsb29wJwogICAgICBicmVhazsKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgY2FzZSAyNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMjczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBsb29rYWhlYWQyVyg5NSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgIT0gNiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICYmIGxrICE9IDggICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICYmIGxrICE9IDkgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgICYmIGxrICE9IDEwICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICAgJiYgbGsgIT0gMTEgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAmJiBsayAhPSAzMiAgICAgICAgICAgICAgICAgICAgLy8gJyQkJwogICAgICYmIGxrICE9IDM1ICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAmJiBsayAhPSAzNiAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICYmIGxrICE9IDQxICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAmJiBsayAhPSA0MyAgICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgJiYgbGsgIT0gNDcgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICYmIGxrICE9IDQ4ICAgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgJiYgbGsgIT0gNTQgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICYmIGxrICE9IDU1ICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICAmJiBsayAhPSA1NiAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgJiYgbGsgIT0gNjAgICAgICAgICAgICAgICAgICAgIC8vICc8PycKICAgICAmJiBsayAhPSA2OSAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgJiYgbGsgIT0gNzEgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAmJiBsayAhPSA3MyAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICYmIGxrICE9IDc0ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgJiYgbGsgIT0gNzUgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICYmIGxrICE9IDc2ICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICYmIGxrICE9IDc4ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICYmIGxrICE9IDc5ICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICAgJiYgbGsgIT0gODAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAmJiBsayAhPSA4MSAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAmJiBsayAhPSA4MiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICYmIGxrICE9IDgzICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICYmIGxrICE9IDg0ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgJiYgbGsgIT0gODUgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgJiYgbGsgIT0gODYgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAmJiBsayAhPSA4OSAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgJiYgbGsgIT0gOTAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICYmIGxrICE9IDkxICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgJiYgbGsgIT0gOTIgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAmJiBsayAhPSA5NCAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICYmIGxrICE9IDk1ICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICYmIGxrICE9IDk3ICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAmJiBsayAhPSA5OCAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgJiYgbGsgIT0gOTkgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICAgJiYgbGsgIT0gMTAyICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICYmIGxrICE9IDEwNCAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAmJiBsayAhPSAxMDUgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAmJiBsayAhPSAxMDYgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICYmIGxrICE9IDEwNyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgJiYgbGsgIT0gMTA5ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICYmIGxrICE9IDExMCAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAmJiBsayAhPSAxMTEgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAmJiBsayAhPSAxMTIgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgJiYgbGsgIT0gMTEzICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgJiYgbGsgIT0gMTE0ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICYmIGxrICE9IDExOSAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICYmIGxrICE9IDEyMCAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgJiYgbGsgIT0gMTIxICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICYmIGxrICE9IDEyMiAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAmJiBsayAhPSAxMjMgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgJiYgbGsgIT0gMTI0ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAmJiBsayAhPSAxMjUgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICYmIGxrICE9IDEyNiAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgJiYgbGsgIT0gMTI3ICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgJiYgbGsgIT0gMTI5ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAmJiBsayAhPSAxMzAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICYmIGxrICE9IDEzMiAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICYmIGxrICE9IDEzNCAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgJiYgbGsgIT0gMTM1ICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgICAmJiBsayAhPSAxMzYgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICYmIGxrICE9IDEzNyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICYmIGxrICE9IDEzOCAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgJiYgbGsgIT0gMTQyICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgICYmIGxrICE9IDE0MyAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICYmIGxrICE9IDE0NyAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgJiYgbGsgIT0gMTQ4ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAmJiBsayAhPSAxNTAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICYmIGxrICE9IDE1MiAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgJiYgbGsgIT0gMTUzICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICYmIGxrICE9IDE1NSAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICYmIGxrICE9IDE1NiAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgJiYgbGsgIT0gMTU3ICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgICAmJiBsayAhPSAxNjEgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAmJiBsayAhPSAxNjIgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICYmIGxrICE9IDE2MyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICYmIGxrICE9IDE2NCAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICYmIGxrICE9IDE2NSAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAmJiBsayAhPSAxNjYgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICYmIGxrICE9IDE2NyAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAmJiBsayAhPSAxNjggICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgJiYgbGsgIT0gMTY5ICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICAgJiYgbGsgIT0gMTcwICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICAgJiYgbGsgIT0gMTczICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICYmIGxrICE9IDE3NCAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICYmIGxrICE9IDE3NSAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgJiYgbGsgIT0gMTc5ICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICYmIGxrICE9IDE4MSAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgJiYgbGsgIT0gMTgzICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgJiYgbGsgIT0gMTg0ICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgJiYgbGsgIT0gMTg1ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgJiYgbGsgIT0gMTg3ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgJiYgbGsgIT0gMTg4ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAmJiBsayAhPSAxODkgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICYmIGxrICE9IDE5NCAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAmJiBsayAhPSAxOTUgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICYmIGxrICE9IDE5NiAgICAgICAgICAgICAgICAgICAvLyAnbm90JwogICAgICYmIGxrICE9IDE5NyAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcKICAgICAmJiBsayAhPSAxOTggICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAmJiBsayAhPSAyMDIgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgJiYgbGsgIT0gMjAzICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgJiYgbGsgIT0gMjA0ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAmJiBsayAhPSAyMDUgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICYmIGxrICE9IDIwNiAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAmJiBsayAhPSAyMDcgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICYmIGxrICE9IDIxMCAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICYmIGxrICE9IDIxNiAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgICYmIGxrICE9IDIxNyAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgJiYgbGsgIT0gMjIwICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICYmIGxrICE9IDIyMiAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICYmIGxrICE9IDIyMyAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAmJiBsayAhPSAyMjQgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAmJiBsayAhPSAyMjUgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAmJiBsayAhPSAyMjYgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAmJiBsayAhPSAyMjggICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAmJiBsayAhPSAyMjkgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAmJiBsayAhPSAyMzAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgJiYgbGsgIT0gMjMxICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAmJiBsayAhPSAyMzIgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICYmIGxrICE9IDIzMyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgICYmIGxrICE9IDIzNCAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAmJiBsayAhPSAyMzkgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgJiYgbGsgIT0gMjQwICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICYmIGxrICE9IDI0MSAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICYmIGxrICE9IDI0MiAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgJiYgbGsgIT0gMjQ1ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgJiYgbGsgIT0gMjQ3ICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgJiYgbGsgIT0gMjQ5ICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICYmIGxrICE9IDI1MyAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgJiYgbGsgIT0gMjU0ICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAmJiBsayAhPSAyNTUgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnCiAgICAgJiYgbGsgIT0gMjU3ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAmJiBsayAhPSAyNTggICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgJiYgbGsgIT0gMjYwICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAmJiBsayAhPSAyNjIgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAmJiBsayAhPSAyNjMgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICYmIGxrICE9IDI2NiAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgJiYgbGsgIT0gMjY3ICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgICAmJiBsayAhPSAyNjkgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgJiYgbGsgIT0gMjcyICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAmJiBsayAhPSAyNzYgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgJiYgbGsgIT0gMjgzICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgICAmJiBsayAhPSAxMDAwOSAgICAgICAgICAgICAgICAgLy8gJ3snIE5DTmFtZV5Ub2tlbgogICAgICYmIGxrICE9IDE0OTM1ICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICcjJwogICAgICYmIGxrICE9IDE0OTUxICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcjJwogICAgICYmIGxrICE9IDE0OTgxICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJyMnCiAgICAgJiYgbGsgIT0gMTQ5ODcgICAgICAgICAgICAgICAgIC8vICdmb3InICcjJwogICAgICYmIGxrICE9IDE1MDAyICAgICAgICAgICAgICAgICAvLyAnaWYnICcjJwogICAgICYmIGxrICE9IDE1MDI1ICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnIycKICAgICAmJiBsayAhPSAxNTA5NiAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJyMnCiAgICAgJiYgbGsgIT0gMTUxMDQgICAgICAgICAgICAgICAgIC8vICd0cnknICcjJwogICAgICYmIGxrICE9IDE1MTA3ICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJyMnCiAgICAgJiYgbGsgIT0gMTUxMTYgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJyMnCiAgICAgJiYgbGsgIT0gMTUxMjEgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJyMnCiAgICAgJiYgbGsgIT0gMTYwMTEgICAgICAgICAgICAgICAgIC8vICdmb3InICckJwogICAgICYmIGxrICE9IDE2MDQ5ICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnJCcKICAgICAmJiBsayAhPSAxNjE0MCAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAmJiBsayAhPSAxODAwNyAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnKCcKICAgICAmJiBsayAhPSAxODAyMyAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnKCcKICAgICAmJiBsayAhPSAxODA1MyAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnICcoJwogICAgICYmIGxrICE9IDE4MDU5ICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnKCcKICAgICAmJiBsayAhPSAxODA3NCAgICAgICAgICAgICAgICAgLy8gJ2lmJyAnKCcKICAgICAmJiBsayAhPSAxODA5NyAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJygnCiAgICAgJiYgbGsgIT0gMTgxNjggICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICcoJwogICAgICYmIGxrICE9IDE4MTc2ICAgICAgICAgICAgICAgICAvLyAndHJ5JyAnKCcKICAgICAmJiBsayAhPSAxODE3OSAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICcoJwogICAgICYmIGxrICE9IDE4MTg4ICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcoJwogICAgICYmIGxrICE9IDkxNzM1ICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICdsb29wJwogICAgICYmIGxrICE9IDkxNzUxICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICdsb29wJwogICAgICYmIGxrICE9IDExNTMzMyAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJ3JldHVybmluZycKICAgICAmJiBsayAhPSAxMTg5NjEgICAgICAgICAgICAgICAgLy8gJ2xldCcgJ3Njb3JlJwogICAgICYmIGxrICE9IDEyMjUwNyAgICAgICAgICAgICAgICAvLyAnZm9yJyAnc2xpZGluZycKICAgICAmJiBsayAhPSAxMzE3MjMgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3R1bWJsaW5nJwogICAgICYmIGxrICE9IDE0NDEyOCAgICAgICAgICAgICAgICAvLyAndHJ5JyAneycKICAgICAmJiBsayAhPSAxNDcyMjUpICAgICAgICAgICAgICAgLy8gJ3snICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDksIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0FwcGx5U3RhdGVtZW50KCk7CiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0Fzc2lnblN0YXRlbWVudCgpOwogICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAyQSkKICAgICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgdHJ5X0Jsb2NrU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgbGsgPSAtMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAocDNBKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgIHRyeV9WYXJEZWNsU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgICBsayA9IC0xMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2ggKHAxMkEpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGsgPSAtMTM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDksIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0yOgogICAgICBwYXJzZV9Bc3NpZ25TdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBwYXJzZV9CbG9ja1N0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgOTE3MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnbG9vcCcKICAgICAgcGFyc2VfQnJlYWtTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDkxNzUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJ2xvb3AnCiAgICAgIHBhcnNlX0NvbnRpbnVlU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTUzMzM6ICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJ3JldHVybmluZycKICAgICAgcGFyc2VfRXhpdFN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTYwMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyQnCiAgICBjYXNlIDE2MDQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICckJwogICAgY2FzZSAxMTg5NjE6ICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnc2NvcmUnCiAgICBjYXNlIDEyMjUwNzogICAgICAgICAgICAgICAgICAgIC8vICdmb3InICdzbGlkaW5nJwogICAgY2FzZSAxMzE3MjM6ICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAndHVtYmxpbmcnCiAgICAgIHBhcnNlX0ZMV09SU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA3NDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcoJwogICAgICBwYXJzZV9JZlN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgxNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJygnCiAgICAgIHBhcnNlX1N3aXRjaFN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQ0MTI4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJ3snCiAgICAgIHBhcnNlX1RyeUNhdGNoU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE3OTogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJygnCiAgICAgIHBhcnNlX1R5cGVzd2l0Y2hTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMjoKICAgIGNhc2UgMTYxNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAgcGFyc2VfVmFyRGVjbFN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTEzOgogICAgICBwYXJzZV9XaGlsZVN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgIHBhcnNlX1ZvaWRTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9BcHBseVN0YXRlbWVudCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RhdGVtZW50KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgbG9va2FoZWFkMlcoMTQ3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAncmV0dXJuaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgbG9va2FoZWFkMlcoMTc5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnc2xpZGluZycgfCAndHVtYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBsb29rYWhlYWQyVygxNjYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGxvb2thaGVhZDJXKDE0OCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIGxvb2thaGVhZDJXKDE0Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMlcoMjgyKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgbG9va2FoZWFkMlcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGxvb2thaGVhZDJXKDE0NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ2xvb3AnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGxvb2thaGVhZDJXKDk1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayAhPSA2ICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgJiYgbGsgIT0gOCAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgJiYgbGsgIT0gOSAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgJiYgbGsgIT0gMTAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgICAmJiBsayAhPSAxMSAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICYmIGxrICE9IDMyICAgICAgICAgICAgICAgICAgICAvLyAnJCQnCiAgICAgJiYgbGsgIT0gMzUgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICYmIGxrICE9IDM2ICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgJiYgbGsgIT0gNDEgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICYmIGxrICE9IDQzICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAmJiBsayAhPSA0NyAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgJiYgbGsgIT0gNDggICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAmJiBsayAhPSA1NCAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgJiYgbGsgIT0gNTUgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICYmIGxrICE9IDU2ICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgICAmJiBsayAhPSA2MCAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICYmIGxrICE9IDY5ICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAmJiBsayAhPSA3MSAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICYmIGxrICE9IDczICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgJiYgbGsgIT0gNzQgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAmJiBsayAhPSA3NSAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgJiYgbGsgIT0gNzYgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgJiYgbGsgIT0gNzggICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgJiYgbGsgIT0gNzkgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgICAmJiBsayAhPSA4MCAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICYmIGxrICE9IDgxICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICYmIGxrICE9IDgyICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgJiYgbGsgIT0gODMgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgJiYgbGsgIT0gODQgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAmJiBsayAhPSA4NSAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAmJiBsayAhPSA4NiAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICYmIGxrICE9IDg5ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAmJiBsayAhPSA5MCAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgJiYgbGsgIT0gOTEgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAmJiBsayAhPSA5MiAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICYmIGxrICE9IDk0ICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgJiYgbGsgIT0gOTUgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgJiYgbGsgIT0gOTcgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICYmIGxrICE9IDk4ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAmJiBsayAhPSA5OSAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAmJiBsayAhPSAxMDIgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgJiYgbGsgIT0gMTA0ICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICYmIGxrICE9IDEwNSAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICYmIGxrICE9IDEwNiAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgJiYgbGsgIT0gMTA3ICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgICAmJiBsayAhPSAxMDkgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgJiYgbGsgIT0gMTEwICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICYmIGxrICE9IDExMSAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgICYmIGxrICE9IDExMiAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAmJiBsayAhPSAxMTMgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAmJiBsayAhPSAxMTQgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgJiYgbGsgIT0gMTE5ICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgJiYgbGsgIT0gMTIwICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAmJiBsayAhPSAxMjEgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgJiYgbGsgIT0gMTIyICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICYmIGxrICE9IDEyMyAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAmJiBsayAhPSAxMjQgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICYmIGxrICE9IDEyNSAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgJiYgbGsgIT0gMTI2ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAmJiBsayAhPSAxMjcgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAmJiBsayAhPSAxMjkgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICYmIGxrICE9IDEzMCAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgJiYgbGsgIT0gMTMyICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgJiYgbGsgIT0gMTM0ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAmJiBsayAhPSAxMzUgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJwogICAgICYmIGxrICE9IDEzNiAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgJiYgbGsgIT0gMTM3ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgJiYgbGsgIT0gMTM4ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAmJiBsayAhPSAxNDIgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgJiYgbGsgIT0gMTQzICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgJiYgbGsgIT0gMTQ3ICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAmJiBsayAhPSAxNDggICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICYmIGxrICE9IDE1MCAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgJiYgbGsgIT0gMTUyICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAmJiBsayAhPSAxNTMgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgJiYgbGsgIT0gMTU1ICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgJiYgbGsgIT0gMTU2ICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAmJiBsayAhPSAxNTcgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICYmIGxrICE9IDE2MSAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICYmIGxrICE9IDE2MiAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgJiYgbGsgIT0gMTYzICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgJiYgbGsgIT0gMTY0ICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgJiYgbGsgIT0gMTY1ICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICYmIGxrICE9IDE2NiAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgJiYgbGsgIT0gMTY3ICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICYmIGxrICE9IDE2OCAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAmJiBsayAhPSAxNjkgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAmJiBsayAhPSAxNzAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScKICAgICAmJiBsayAhPSAxNzMgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgJiYgbGsgIT0gMTc0ICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgJiYgbGsgIT0gMTc1ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAmJiBsayAhPSAxNzkgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgJiYgbGsgIT0gMTgxICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAmJiBsayAhPSAxODMgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAmJiBsayAhPSAxODQgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAmJiBsayAhPSAxODUgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgICAmJiBsayAhPSAxODcgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAmJiBsayAhPSAxODggICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICYmIGxrICE9IDE4OSAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgJiYgbGsgIT0gMTk0ICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICYmIGxrICE9IDE5NSAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICAgJiYgbGsgIT0gMTk2ICAgICAgICAgICAgICAgICAgIC8vICdub3QnCiAgICAgJiYgbGsgIT0gMTk3ICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgICYmIGxrICE9IDE5OCAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgICYmIGxrICE9IDIwMiAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAmJiBsayAhPSAyMDMgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAmJiBsayAhPSAyMDQgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICYmIGxrICE9IDIwNSAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgJiYgbGsgIT0gMjA2ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICYmIGxrICE9IDIwNyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgJiYgbGsgIT0gMjEwICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgJiYgbGsgIT0gMjE2ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgJiYgbGsgIT0gMjE3ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAmJiBsayAhPSAyMjAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgJiYgbGsgIT0gMjIyICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgJiYgbGsgIT0gMjIzICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICYmIGxrICE9IDIyNCAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICYmIGxrICE9IDIyNSAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgICYmIGxrICE9IDIyNiAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgICYmIGxrICE9IDIyOCAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICYmIGxrICE9IDIyOSAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgICYmIGxrICE9IDIzMCAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAmJiBsayAhPSAyMzEgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICYmIGxrICE9IDIzMiAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgJiYgbGsgIT0gMjMzICAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnCiAgICAgJiYgbGsgIT0gMjM0ICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICYmIGxrICE9IDIzOSAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAmJiBsayAhPSAyNDAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgJiYgbGsgIT0gMjQxICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgJiYgbGsgIT0gMjQyICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAmJiBsayAhPSAyNDUgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAmJiBsayAhPSAyNDcgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgICAmJiBsayAhPSAyNDkgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgJiYgbGsgIT0gMjUzICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAmJiBsayAhPSAyNTQgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICYmIGxrICE9IDI1NSAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgICAmJiBsayAhPSAyNTcgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICYmIGxrICE9IDI1OCAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAmJiBsayAhPSAyNjAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICYmIGxrICE9IDI2MiAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICYmIGxrICE9IDI2MyAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgJiYgbGsgIT0gMjY2ICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgICAmJiBsayAhPSAyNjcgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICYmIGxrICE9IDI2OSAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAmJiBsayAhPSAyNzIgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICYmIGxrICE9IDI3NiAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAmJiBsayAhPSAyODMgICAgICAgICAgICAgICAgICAgLy8gJ3t8JwogICAgICYmIGxrICE9IDEwMDA5ICAgICAgICAgICAgICAgICAvLyAneycgTkNOYW1lXlRva2VuCiAgICAgJiYgbGsgIT0gMTQ5MzUgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJyMnCiAgICAgJiYgbGsgIT0gMTQ5NTEgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJyMnCiAgICAgJiYgbGsgIT0gMTQ5ODEgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnIycKICAgICAmJiBsayAhPSAxNDk4NyAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyMnCiAgICAgJiYgbGsgIT0gMTUwMDIgICAgICAgICAgICAgICAgIC8vICdpZicgJyMnCiAgICAgJiYgbGsgIT0gMTUwMjUgICAgICAgICAgICAgICAgIC8vICdsZXQnICcjJwogICAgICYmIGxrICE9IDE1MDk2ICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJyAnIycKICAgICAmJiBsayAhPSAxNTEwNCAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJyMnCiAgICAgJiYgbGsgIT0gMTUxMDcgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnIycKICAgICAmJiBsayAhPSAxNTExNiAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnIycKICAgICAmJiBsayAhPSAxNTEyMSAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnIycKICAgICAmJiBsayAhPSAxNjAxMSAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyQnCiAgICAgJiYgbGsgIT0gMTYwNDkgICAgICAgICAgICAgICAgIC8vICdsZXQnICckJwogICAgICYmIGxrICE9IDE2MTQwICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICckJwogICAgICYmIGxrICE9IDE4MDA3ICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICcoJwogICAgICYmIGxrICE9IDE4MDIzICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcoJwogICAgICYmIGxrICE9IDE4MDUzICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJygnCiAgICAgJiYgbGsgIT0gMTgwNTkgICAgICAgICAgICAgICAgIC8vICdmb3InICcoJwogICAgICYmIGxrICE9IDE4MDc0ICAgICAgICAgICAgICAgICAvLyAnaWYnICcoJwogICAgICYmIGxrICE9IDE4MDk3ICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnKCcKICAgICAmJiBsayAhPSAxODE2OCAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJygnCiAgICAgJiYgbGsgIT0gMTgxNzYgICAgICAgICAgICAgICAgIC8vICd0cnknICcoJwogICAgICYmIGxrICE9IDE4MTc5ICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJygnCiAgICAgJiYgbGsgIT0gMTgxODggICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJygnCiAgICAgJiYgbGsgIT0gOTE3MzUgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJ2xvb3AnCiAgICAgJiYgbGsgIT0gOTE3NTEgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJ2xvb3AnCiAgICAgJiYgbGsgIT0gMTE1MzMzICAgICAgICAgICAgICAgIC8vICdleGl0JyAncmV0dXJuaW5nJwogICAgICYmIGxrICE9IDExODk2MSAgICAgICAgICAgICAgICAvLyAnbGV0JyAnc2NvcmUnCiAgICAgJiYgbGsgIT0gMTIyNTA3ICAgICAgICAgICAgICAgIC8vICdmb3InICdzbGlkaW5nJwogICAgICYmIGxrICE9IDEzMTcyMyAgICAgICAgICAgICAgICAvLyAnZm9yJyAndHVtYmxpbmcnCiAgICAgJiYgbGsgIT0gMTQ0MTI4ICAgICAgICAgICAgICAgIC8vICd0cnknICd7JwogICAgICYmIGxrICE9IDE0NzIyNSkgICAgICAgICAgICAgICAvLyAneycgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoOSwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfQXBwbHlTdGF0ZW1lbnQoKTsKICAgICAgICAgIG1lbW9pemUoOSwgZTBBLCAtMSk7CiAgICAgICAgICBsayA9IC0xNTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgIHRyeV9Bc3NpZ25TdGF0ZW1lbnQoKTsKICAgICAgICAgICAgbWVtb2l6ZSg5LCBlMEEsIC0yKTsKICAgICAgICAgICAgbGsgPSAtMTU7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDJBKQogICAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICB0cnlfQmxvY2tTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgICBtZW1vaXplKDksIGUwQSwgLTMpOwogICAgICAgICAgICAgIGxrID0gLTE1OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChwM0EpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICAgICAgdHJ5X1ZhckRlY2xTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgICAgIG1lbW9pemUoOSwgZTBBLCAtMTIpOwogICAgICAgICAgICAgICAgbGsgPSAtMTU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoIChwMTJBKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxrID0gLTEzOwogICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgIG1lbW9pemUoOSwgZTBBLCAtMTMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTI6CiAgICAgIHRyeV9Bc3NpZ25TdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICB0cnlfQmxvY2tTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDkxNzM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJ2xvb3AnCiAgICAgIHRyeV9CcmVha1N0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgOTE3NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnbG9vcCcKICAgICAgdHJ5X0NvbnRpbnVlU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTUzMzM6ICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJ3JldHVybmluZycKICAgICAgdHJ5X0V4aXRTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICckJwogICAgY2FzZSAxNjA0OTogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnJCcKICAgIGNhc2UgMTE4OTYxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJ3Njb3JlJwogICAgY2FzZSAxMjI1MDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnc2xpZGluZycKICAgIGNhc2UgMTMxNzIzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3R1bWJsaW5nJwogICAgICB0cnlfRkxXT1JTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZicgJygnCiAgICAgIHRyeV9JZlN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgxNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJygnCiAgICAgIHRyeV9Td2l0Y2hTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NDEyODogICAgICAgICAgICAgICAgICAgIC8vICd0cnknICd7JwogICAgICB0cnlfVHJ5Q2F0Y2hTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnKCcKICAgICAgdHJ5X1R5cGVzd2l0Y2hTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMjoKICAgIGNhc2UgMTYxNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAgdHJ5X1ZhckRlY2xTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMzoKICAgICAgdHJ5X1doaWxlU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA1NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgdHJ5X1ZvaWRTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xNToKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQXBwbHlTdGF0ZW1lbnQoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0FwcGx5U3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXBwbHlTdGF0ZW1lbnQiLCBlMCk7CiAgICBwYXJzZV9FeHByU2ltcGxlKCk7CiAgICBzaGlmdCg1NCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcHBseVN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BcHBseVN0YXRlbWVudCgpCiAgewogICAgdHJ5X0V4cHJTaW1wbGUoKTsKICAgIHNoaWZ0VCg1NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Bc3NpZ25TdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBc3NpZ25TdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdCg1NCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBc3NpZ25TdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXNzaWduU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScKICAgIHNoaWZ0VCg1Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0VCg1NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9CbG9ja1N0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkJsb2NrU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMjgxKTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1N0YXRlbWVudCgpOwogICAgbG9va2FoZWFkMVcoMjgwKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU3RhdGVtZW50cygpOwogICAgc2hpZnQoMjg3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQmxvY2tTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQmxvY2tTdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCgyODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50KCk7CiAgICBsb29rYWhlYWQxVygyODApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50cygpOwogICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0JyZWFrU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQnJlYWtTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCg4Nyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgIGxvb2thaGVhZDFXKDYyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbG9vcCcKICAgIHNoaWZ0KDE3OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBsb29rYWhlYWQxVygyOSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnCiAgICBzaGlmdCg1NCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCcmVha1N0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9CcmVha1N0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDg3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBsb29rYWhlYWQxVyg2Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xvb3AnCiAgICBzaGlmdFQoMTc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgbG9va2FoZWFkMVcoMjkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc7JwogICAgc2hpZnRUKDU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbnRpbnVlU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29udGludWVTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgxMDMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgIGxvb2thaGVhZDFXKDYyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbG9vcCcKICAgIHNoaWZ0KDE3OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBsb29rYWhlYWQxVygyOSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnCiAgICBzaGlmdCg1NCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb250aW51ZVN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db250aW51ZVN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDEwMyk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICBsb29rYWhlYWQxVyg2Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xvb3AnCiAgICBzaGlmdFQoMTc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgbG9va2FoZWFkMVcoMjkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc7JwogICAgc2hpZnRUKDU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0V4aXRTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFeGl0U3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMTMzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgIGxvb2thaGVhZDFXKDc0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuaW5nJwogICAgc2hpZnQoMjI1KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgc2hpZnQoNTQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRXhpdFN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9FeGl0U3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoMTMzKTsgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgbG9va2FoZWFkMVcoNzQpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm5pbmcnCiAgICBzaGlmdFQoMjI1KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgc2hpZnRUKDU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZMV09SU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRkxXT1JTdGF0ZW1lbnQiLCBlMCk7CiAgICBwYXJzZV9Jbml0aWFsQ2xhdXNlKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxOTUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfCAncmV0dXJuJyB8ICdzdGFibGUnIHwKICAgICAgaWYgKGwxID09IDIyNCkgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSW50ZXJtZWRpYXRlQ2xhdXNlKCk7CiAgICB9CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9SZXR1cm5TdGF0ZW1lbnQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRkxXT1JTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRkxXT1JTdGF0ZW1lbnQoKQogIHsKICAgIHRyeV9Jbml0aWFsQ2xhdXNlKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxOTUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfCAncmV0dXJuJyB8ICdzdGFibGUnIHwKICAgICAgaWYgKGwxID09IDIyNCkgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRyeV9JbnRlcm1lZGlhdGVDbGF1c2UoKTsKICAgIH0KICAgIHRyeV9SZXR1cm5TdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JldHVyblN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJldHVyblN0YXRlbWVudCIsIGUwKTsKICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1N0YXRlbWVudCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZXR1cm5TdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmV0dXJuU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JZlN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklmU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDgwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlbicKICAgIHNoaWZ0KDI1MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZW4nCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnQoKTsKICAgIGxvb2thaGVhZDFXKDUxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZWxzZScKICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSWZTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSWZTdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCgxNTQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoODApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd0aGVuJwogICAgc2hpZnRUKDI1MCk7ICAgICAgICAgICAgICAgICAgICAvLyAndGhlbicKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICAgIGxvb2thaGVhZDFXKDUxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZWxzZScKICAgIHNoaWZ0VCgxMjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Td2l0Y2hTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTd2l0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgyNDgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM4KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU3dpdGNoQ2FzZVN0YXRlbWVudCgpOwogICAgICBsb29rYWhlYWQxVygxMTcpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJyB8ICdkZWZhdWx0JwogICAgICBpZiAobDEgIT0gODkpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoNzMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3dpdGNoU3RhdGVtZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N3aXRjaFN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDI0OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScKICAgICAgdHJ5X1N3aXRjaENhc2VTdGF0ZW1lbnQoKTsKICAgICAgbG9va2FoZWFkMVcoMTE3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScgfCAnZGVmYXVsdCcKICAgICAgaWYgKGwxICE9IDg5KSAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnRUKDExMCk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDczKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuJwogICAgc2hpZnRUKDIyNCk7ICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjcwKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1N0YXRlbWVudCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3dpdGNoQ2FzZVN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN3aXRjaENhc2VTdGF0ZW1lbnQiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBzaGlmdCg4OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Td2l0Y2hDYXNlT3BlcmFuZCgpOwogICAgICBpZiAobDEgIT0gODkpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3dpdGNoQ2FzZVN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Td2l0Y2hDYXNlU3RhdGVtZW50KCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBzaGlmdFQoODkpOyAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X1N3aXRjaENhc2VPcGVyYW5kKCk7CiAgICAgIGlmIChsMSAhPSA4OSkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgyMjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RyeUNhdGNoU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHJ5Q2F0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9CbG9ja1N0YXRlbWVudCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzkpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgbG9va2FoZWFkMVcoMjQ4KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ2F0Y2hFcnJvckxpc3QoKTsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9CbG9ja1N0YXRlbWVudCgpOwogICAgICBsb29rYWhlYWQxVygyODMpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgOTI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgICBsb29rYWhlYWQyVygyNTUpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayAhPSAyNjUyICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgV2lsZGNhcmQKICAgICAgICYmIGxrICE9IDMxNjQgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyBFUU5hbWVeVG9rZW4KICAgICAgICYmIGxrICE9IDM2NDQ0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYWZ0ZXInCiAgICAgICAmJiBsayAhPSAzNzQ2OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FsbG93aW5nJwogICAgICAgJiYgbGsgIT0gMzc5ODAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhbmNlc3RvcicKICAgICAgICYmIGxrICE9IDM4NDkyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgICYmIGxrICE9IDM5MDA0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYW5kJwogICAgICAgJiYgbGsgIT0gNDAwMjggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhcHBlbmQnCiAgICAgICAmJiBsayAhPSA0MDU0MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FycmF5JwogICAgICAgJiYgbGsgIT0gNDEwNTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhcycKICAgICAgICYmIGxrICE9IDQxNTY0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXNjZW5kaW5nJwogICAgICAgJiYgbGsgIT0gNDIwNzYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhdCcKICAgICAgICYmIGxrICE9IDQyNTg4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXR0cmlidXRlJwogICAgICAgJiYgbGsgIT0gNDMxMDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdiYXNlLXVyaScKICAgICAgICYmIGxrICE9IDQzNjEyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYmVmb3JlJwogICAgICAgJiYgbGsgIT0gNDQxMjQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdib3VuZGFyeS1zcGFjZScKICAgICAgICYmIGxrICE9IDQ0NjM2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYnJlYWsnCiAgICAgICAmJiBsayAhPSA0NTY2MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Nhc2UnCiAgICAgICAmJiBsayAhPSA0NjE3MiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Nhc3QnCiAgICAgICAmJiBsayAhPSA0NjY4NCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Nhc3RhYmxlJwogICAgICAgJiYgbGsgIT0gNDcxOTYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjYXRjaCcKICAgICAgICYmIGxrICE9IDQ4MjIwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2hpbGQnCiAgICAgICAmJiBsayAhPSA0ODczMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbGxhdGlvbicKICAgICAgICYmIGxrICE9IDQ5NzU2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29tbWVudCcKICAgICAgICYmIGxrICE9IDUwMjY4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29uc3RyYWludCcKICAgICAgICYmIGxrICE9IDUwNzgwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29uc3RydWN0aW9uJwogICAgICAgJiYgbGsgIT0gNTIzMTYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb250ZXh0JwogICAgICAgJiYgbGsgIT0gNTI4MjggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb250aW51ZScKICAgICAgICYmIGxrICE9IDUzMzQwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29weScKICAgICAgICYmIGxrICE9IDUzODUyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29weS1uYW1lc3BhY2VzJwogICAgICAgJiYgbGsgIT0gNTQzNjQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb3VudCcKICAgICAgICYmIGxrICE9IDU0ODc2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgICAmJiBsayAhPSA1NTkwMCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RlY2xhcmUnCiAgICAgICAmJiBsayAhPSA1NjQxMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RlZmF1bHQnCiAgICAgICAmJiBsayAhPSA1NjkyNCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RlbGV0ZScKICAgICAgICYmIGxrICE9IDU3NDM2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVzY2VuZGFudCcKICAgICAgICYmIGxrICE9IDU3OTQ4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICAgJiYgbGsgIT0gNTg0NjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZXNjZW5kaW5nJwogICAgICAgJiYgbGsgIT0gNjEwMjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkaXYnCiAgICAgICAmJiBsayAhPSA2MTUzMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RvY3VtZW50JwogICAgICAgJiYgbGsgIT0gNjIwNDQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkb2N1bWVudC1ub2RlJwogICAgICAgJiYgbGsgIT0gNjI1NTYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbGVtZW50JwogICAgICAgJiYgbGsgIT0gNjMwNjggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbHNlJwogICAgICAgJiYgbGsgIT0gNjM1ODAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbXB0eScKICAgICAgICYmIGxrICE9IDY0MDkyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgICAmJiBsayAhPSA2NDYwNCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VuY29kaW5nJwogICAgICAgJiYgbGsgIT0gNjUxMTYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbmQnCiAgICAgICAmJiBsayAhPSA2NjE0MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VxJwogICAgICAgJiYgbGsgIT0gNjY2NTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdldmVyeScKICAgICAgICYmIGxrICE9IDY3Njc2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXhjZXB0JwogICAgICAgJiYgbGsgIT0gNjgxODggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdleGl0JwogICAgICAgJiYgbGsgIT0gNjg3MDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdleHRlcm5hbCcKICAgICAgICYmIGxrICE9IDY5MjEyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZmFsc2UnCiAgICAgICAmJiBsayAhPSA2OTcyNCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ZpcnN0JwogICAgICAgJiYgbGsgIT0gNzAyMzYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmb2xsb3dpbmcnCiAgICAgICAmJiBsayAhPSA3MDc0OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICAgJiYgbGsgIT0gNzEyNjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmb3InCiAgICAgICAmJiBsayAhPSA3Mjc5NiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Zyb20nCiAgICAgICAmJiBsayAhPSA3MzMwOCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Z0LW9wdGlvbicKICAgICAgICYmIGxrICE9IDc1MzU2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZnVuY3Rpb24nCiAgICAgICAmJiBsayAhPSA3NTg2OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2dlJwogICAgICAgJiYgbGsgIT0gNzY4OTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdncm91cCcKICAgICAgICYmIGxrICE9IDc3OTE2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZ3QnCiAgICAgICAmJiBsayAhPSA3ODQyOCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2lkaXYnCiAgICAgICAmJiBsayAhPSA3ODk0MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2lmJwogICAgICAgJiYgbGsgIT0gNzk0NTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbXBvcnQnCiAgICAgICAmJiBsayAhPSA3OTk2NCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2luJwogICAgICAgJiYgbGsgIT0gODA0NzYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbmRleCcKICAgICAgICYmIGxrICE9IDgyNTI0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW5zZXJ0JwogICAgICAgJiYgbGsgIT0gODMwMzYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnN0YW5jZScKICAgICAgICYmIGxrICE9IDgzNTQ4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW50ZWdyaXR5JwogICAgICAgJiYgbGsgIT0gODQwNjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnRlcnNlY3QnCiAgICAgICAmJiBsayAhPSA4NDU3MiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ludG8nCiAgICAgICAmJiBsayAhPSA4NTA4NCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2lzJwogICAgICAgJiYgbGsgIT0gODU1OTYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpdGVtJwogICAgICAgJiYgbGsgIT0gODYxMDggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdqc29uJwogICAgICAgJiYgbGsgIT0gODY2MjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdqc29uLWl0ZW0nCiAgICAgICAmJiBsayAhPSA4NzEzMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2pzb25pcScKICAgICAgICYmIGxrICE9IDg4NjY4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGFzdCcKICAgICAgICYmIGxrICE9IDg5MTgwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGF4JwogICAgICAgJiYgbGsgIT0gODk2OTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdsZScKICAgICAgICYmIGxrICE9IDkwNzE2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGV0JwogICAgICAgJiYgbGsgIT0gOTE3NDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdsb29wJwogICAgICAgJiYgbGsgIT0gOTI3NjQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdsdCcKICAgICAgICYmIGxrICE9IDkzNzg4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbW9kJwogICAgICAgJiYgbGsgIT0gOTQzMDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdtb2RpZnknCiAgICAgICAmJiBsayAhPSA5NDgxMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ21vZHVsZScKICAgICAgICYmIGxrICE9IDk1ODM2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbmFtZXNwYWNlJwogICAgICAgJiYgbGsgIT0gOTYzNDggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICduYW1lc3BhY2Utbm9kZScKICAgICAgICYmIGxrICE9IDk2ODYwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbmUnCiAgICAgICAmJiBsayAhPSA5OTQyMCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25vZGUnCiAgICAgICAmJiBsayAhPSA5OTkzMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25vZGVzJwogICAgICAgJiYgbGsgIT0gMTAwOTU2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdudWxsJwogICAgICAgJiYgbGsgIT0gMTAxNDY4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvYmplY3QnCiAgICAgICAmJiBsayAhPSAxMDM1MTYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29ubHknCiAgICAgICAmJiBsayAhPSAxMDQwMjggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29wdGlvbicKICAgICAgICYmIGxrICE9IDEwNDU0MCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnb3InCiAgICAgICAmJiBsayAhPSAxMDUwNTIgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29yZGVyJwogICAgICAgJiYgbGsgIT0gMTA1NTY0ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcmRlcmVkJwogICAgICAgJiYgbGsgIT0gMTA2MDc2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcmRlcmluZycKICAgICAgICYmIGxrICE9IDEwNzYxMiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncGFyZW50JwogICAgICAgJiYgbGsgIT0gMTEwNjg0ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdwcmVjZWRpbmcnCiAgICAgICAmJiBsayAhPSAxMTExOTYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICAgJiYgbGsgIT0gMTEyNzMyICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICAgJiYgbGsgIT0gMTEzNzU2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZW5hbWUnCiAgICAgICAmJiBsayAhPSAxMTQyNjggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JlcGxhY2UnCiAgICAgICAmJiBsayAhPSAxMTQ3ODAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JldHVybicKICAgICAgICYmIGxrICE9IDExNTI5MiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncmV0dXJuaW5nJwogICAgICAgJiYgbGsgIT0gMTE1ODA0ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZXZhbGlkYXRpb24nCiAgICAgICAmJiBsayAhPSAxMTY4MjggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NhdGlzZmllcycKICAgICAgICYmIGxrICE9IDExNzM0MCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2NoZW1hJwogICAgICAgJiYgbGsgIT0gMTE3ODUyICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzY2hlbWEtYXR0cmlidXRlJwogICAgICAgJiYgbGsgIT0gMTE4MzY0ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzY2hlbWEtZWxlbWVudCcKICAgICAgICYmIGxrICE9IDExODg3NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2NvcmUnCiAgICAgICAmJiBsayAhPSAxMTkzODggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NlbGVjdCcKICAgICAgICYmIGxrICE9IDExOTkwMCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2VsZicKICAgICAgICYmIGxrICE9IDEyMjQ2MCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2xpZGluZycKICAgICAgICYmIGxrICE9IDEyMjk3MiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc29tZScKICAgICAgICYmIGxrICE9IDEyMzQ4NCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RhYmxlJwogICAgICAgJiYgbGsgIT0gMTIzOTk2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzdGFydCcKICAgICAgICYmIGxrICE9IDEyNTUzMiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RyaWN0JwogICAgICAgJiYgbGsgIT0gMTI2NTU2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgICAmJiBsayAhPSAxMjcwNjggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3N3aXRjaCcKICAgICAgICYmIGxrICE9IDEyNzU4MCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndGV4dCcKICAgICAgICYmIGxrICE9IDEyOTYyOCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndG8nCiAgICAgICAmJiBsayAhPSAxMzAxNDAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RyZWF0JwogICAgICAgJiYgbGsgIT0gMTMwNjUyICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0cnVlJwogICAgICAgJiYgbGsgIT0gMTMxMTY0ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0cnknCiAgICAgICAmJiBsayAhPSAxMzE2NzYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3R1bWJsaW5nJwogICAgICAgJiYgbGsgIT0gMTMyMTg4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0eXBlJwogICAgICAgJiYgbGsgIT0gMTMyNzAwICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0eXBlc3dpdGNoJwogICAgICAgJiYgbGsgIT0gMTMzMjEyICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd1bmlvbicKICAgICAgICYmIGxrICE9IDEzNDIzNiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndW5vcmRlcmVkJwogICAgICAgJiYgbGsgIT0gMTM0NzQ4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd1cGRhdGluZycKICAgICAgICYmIGxrICE9IDEzNjI4NCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndmFsaWRhdGUnCiAgICAgICAmJiBsayAhPSAxMzY3OTYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ZhbHVlJwogICAgICAgJiYgbGsgIT0gMTM3MzA4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd2YXJpYWJsZScKICAgICAgICYmIGxrICE9IDEzNzgyMCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndmVyc2lvbicKICAgICAgICYmIGxrICE9IDEzOTM1NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnd2hlcmUnCiAgICAgICAmJiBsayAhPSAxMzk4NjggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3doaWxlJwogICAgICAgJiYgbGsgIT0gMTQxNDA0KSAgICAgICAgICAgICAvLyAnY2F0Y2gnICd3aXRoJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHJ5Q2F0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJ5Q2F0Y2hTdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCgyNTYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHRyeV9CbG9ja1N0YXRlbWVudCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzkpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgIHNoaWZ0VCg5Mik7ICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgbG9va2FoZWFkMVcoMjQ4KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9DYXRjaEVycm9yTGlzdCgpOwogICAgICB0cnlfQmxvY2tTdGF0ZW1lbnQoKTsKICAgICAgbG9va2FoZWFkMVcoMjgzKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgICAgbG9va2FoZWFkMlcoMjU1KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGsgPSBsMTsKICAgICAgfQogICAgICBpZiAobGsgIT0gMjY1MiAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnIFdpbGRjYXJkCiAgICAgICAmJiBsayAhPSAzMTY0ICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgRVFOYW1lXlRva2VuCiAgICAgICAmJiBsayAhPSAzNjQ0NCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FmdGVyJwogICAgICAgJiYgbGsgIT0gMzc0NjggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhbGxvd2luZycKICAgICAgICYmIGxrICE9IDM3OTgwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYW5jZXN0b3InCiAgICAgICAmJiBsayAhPSAzODQ5MiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgICAmJiBsayAhPSAzOTAwNCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FuZCcKICAgICAgICYmIGxrICE9IDQwMDI4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXBwZW5kJwogICAgICAgJiYgbGsgIT0gNDA1NDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhcnJheScKICAgICAgICYmIGxrICE9IDQxMDUyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXMnCiAgICAgICAmJiBsayAhPSA0MTU2NCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FzY2VuZGluZycKICAgICAgICYmIGxrICE9IDQyMDc2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXQnCiAgICAgICAmJiBsayAhPSA0MjU4OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2F0dHJpYnV0ZScKICAgICAgICYmIGxrICE9IDQzMTAwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYmFzZS11cmknCiAgICAgICAmJiBsayAhPSA0MzYxMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2JlZm9yZScKICAgICAgICYmIGxrICE9IDQ0MTI0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYm91bmRhcnktc3BhY2UnCiAgICAgICAmJiBsayAhPSA0NDYzNiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2JyZWFrJwogICAgICAgJiYgbGsgIT0gNDU2NjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjYXNlJwogICAgICAgJiYgbGsgIT0gNDYxNzIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjYXN0JwogICAgICAgJiYgbGsgIT0gNDY2ODQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjYXN0YWJsZScKICAgICAgICYmIGxrICE9IDQ3MTk2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2F0Y2gnCiAgICAgICAmJiBsayAhPSA0ODIyMCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NoaWxkJwogICAgICAgJiYgbGsgIT0gNDg3MzIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb2xsYXRpb24nCiAgICAgICAmJiBsayAhPSA0OTc1NiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbW1lbnQnCiAgICAgICAmJiBsayAhPSA1MDI2OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbnN0cmFpbnQnCiAgICAgICAmJiBsayAhPSA1MDc4MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbnN0cnVjdGlvbicKICAgICAgICYmIGxrICE9IDUyMzE2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29udGV4dCcKICAgICAgICYmIGxrICE9IDUyODI4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29udGludWUnCiAgICAgICAmJiBsayAhPSA1MzM0MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvcHknCiAgICAgICAmJiBsayAhPSA1Mzg1MiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvcHktbmFtZXNwYWNlcycKICAgICAgICYmIGxrICE9IDU0MzY0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY291bnQnCiAgICAgICAmJiBsayAhPSA1NDg3NiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgJiYgbGsgIT0gNTU5MDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWNsYXJlJwogICAgICAgJiYgbGsgIT0gNTY0MTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWZhdWx0JwogICAgICAgJiYgbGsgIT0gNTY5MjQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWxldGUnCiAgICAgICAmJiBsayAhPSA1NzQzNiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Rlc2NlbmRhbnQnCiAgICAgICAmJiBsayAhPSA1Nzk0OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgICYmIGxrICE9IDU4NDYwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVzY2VuZGluZycKICAgICAgICYmIGxrICE9IDYxMDIwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGl2JwogICAgICAgJiYgbGsgIT0gNjE1MzIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkb2N1bWVudCcKICAgICAgICYmIGxrICE9IDYyMDQ0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZG9jdW1lbnQtbm9kZScKICAgICAgICYmIGxrICE9IDYyNTU2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZWxlbWVudCcKICAgICAgICYmIGxrICE9IDYzMDY4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZWxzZScKICAgICAgICYmIGxrICE9IDYzNTgwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZW1wdHknCiAgICAgICAmJiBsayAhPSA2NDA5MiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VtcHR5LXNlcXVlbmNlJwogICAgICAgJiYgbGsgIT0gNjQ2MDQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbmNvZGluZycKICAgICAgICYmIGxrICE9IDY1MTE2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZW5kJwogICAgICAgJiYgbGsgIT0gNjYxNDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlcScKICAgICAgICYmIGxrICE9IDY2NjUyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXZlcnknCiAgICAgICAmJiBsayAhPSA2NzY3NiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2V4Y2VwdCcKICAgICAgICYmIGxrICE9IDY4MTg4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXhpdCcKICAgICAgICYmIGxrICE9IDY4NzAwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXh0ZXJuYWwnCiAgICAgICAmJiBsayAhPSA2OTIxMiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ZhbHNlJwogICAgICAgJiYgbGsgIT0gNjk3MjQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmaXJzdCcKICAgICAgICYmIGxrICE9IDcwMjM2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZm9sbG93aW5nJwogICAgICAgJiYgbGsgIT0gNzA3NDggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmb2xsb3dpbmctc2libGluZycKICAgICAgICYmIGxrICE9IDcxMjYwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZm9yJwogICAgICAgJiYgbGsgIT0gNzI3OTYgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmcm9tJwogICAgICAgJiYgbGsgIT0gNzMzMDggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmdC1vcHRpb24nCiAgICAgICAmJiBsayAhPSA3NTM1NiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Z1bmN0aW9uJwogICAgICAgJiYgbGsgIT0gNzU4NjggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdnZScKICAgICAgICYmIGxrICE9IDc2ODkyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZ3JvdXAnCiAgICAgICAmJiBsayAhPSA3NzkxNiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2d0JwogICAgICAgJiYgbGsgIT0gNzg0MjggICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpZGl2JwogICAgICAgJiYgbGsgIT0gNzg5NDAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpZicKICAgICAgICYmIGxrICE9IDc5NDUyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW1wb3J0JwogICAgICAgJiYgbGsgIT0gNzk5NjQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbicKICAgICAgICYmIGxrICE9IDgwNDc2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW5kZXgnCiAgICAgICAmJiBsayAhPSA4MjUyNCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2luc2VydCcKICAgICAgICYmIGxrICE9IDgzMDM2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW5zdGFuY2UnCiAgICAgICAmJiBsayAhPSA4MzU0OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ludGVncml0eScKICAgICAgICYmIGxrICE9IDg0MDYwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW50ZXJzZWN0JwogICAgICAgJiYgbGsgIT0gODQ1NzIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnRvJwogICAgICAgJiYgbGsgIT0gODUwODQgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpcycKICAgICAgICYmIGxrICE9IDg1NTk2ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaXRlbScKICAgICAgICYmIGxrICE9IDg2MTA4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnanNvbicKICAgICAgICYmIGxrICE9IDg2NjIwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnanNvbi1pdGVtJwogICAgICAgJiYgbGsgIT0gODcxMzIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdqc29uaXEnCiAgICAgICAmJiBsayAhPSA4ODY2OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2xhc3QnCiAgICAgICAmJiBsayAhPSA4OTE4MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2xheCcKICAgICAgICYmIGxrICE9IDg5NjkyICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGUnCiAgICAgICAmJiBsayAhPSA5MDcxNiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2xldCcKICAgICAgICYmIGxrICE9IDkxNzQwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDkyNzY0ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbHQnCiAgICAgICAmJiBsayAhPSA5Mzc4OCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ21vZCcKICAgICAgICYmIGxrICE9IDk0MzAwICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbW9kaWZ5JwogICAgICAgJiYgbGsgIT0gOTQ4MTIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdtb2R1bGUnCiAgICAgICAmJiBsayAhPSA5NTgzNiAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25hbWVzcGFjZScKICAgICAgICYmIGxrICE9IDk2MzQ4ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgICAmJiBsayAhPSA5Njg2MCAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25lJwogICAgICAgJiYgbGsgIT0gOTk0MjAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdub2RlJwogICAgICAgJiYgbGsgIT0gOTk5MzIgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdub2RlcycKICAgICAgICYmIGxrICE9IDEwMDk1NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbnVsbCcKICAgICAgICYmIGxrICE9IDEwMTQ2OCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnb2JqZWN0JwogICAgICAgJiYgbGsgIT0gMTAzNTE2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvbmx5JwogICAgICAgJiYgbGsgIT0gMTA0MDI4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcHRpb24nCiAgICAgICAmJiBsayAhPSAxMDQ1NDAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29yJwogICAgICAgJiYgbGsgIT0gMTA1MDUyICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcmRlcicKICAgICAgICYmIGxrICE9IDEwNTU2NCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnb3JkZXJlZCcKICAgICAgICYmIGxrICE9IDEwNjA3NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnb3JkZXJpbmcnCiAgICAgICAmJiBsayAhPSAxMDc2MTIgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3BhcmVudCcKICAgICAgICYmIGxrICE9IDExMDY4NCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncHJlY2VkaW5nJwogICAgICAgJiYgbGsgIT0gMTExMTk2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdwcmVjZWRpbmctc2libGluZycKICAgICAgICYmIGxrICE9IDExMjczMiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgICYmIGxrICE9IDExMzc1NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncmVuYW1lJwogICAgICAgJiYgbGsgIT0gMTE0MjY4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZXBsYWNlJwogICAgICAgJiYgbGsgIT0gMTE0NzgwICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZXR1cm4nCiAgICAgICAmJiBsayAhPSAxMTUyOTIgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JldHVybmluZycKICAgICAgICYmIGxrICE9IDExNTgwNCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncmV2YWxpZGF0aW9uJwogICAgICAgJiYgbGsgIT0gMTE2ODI4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzYXRpc2ZpZXMnCiAgICAgICAmJiBsayAhPSAxMTczNDAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NjaGVtYScKICAgICAgICYmIGxrICE9IDExNzg1MiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgICYmIGxrICE9IDExODM2NCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgICAmJiBsayAhPSAxMTg4NzYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3Njb3JlJwogICAgICAgJiYgbGsgIT0gMTE5Mzg4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzZWxlY3QnCiAgICAgICAmJiBsayAhPSAxMTk5MDAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NlbGYnCiAgICAgICAmJiBsayAhPSAxMjI0NjAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NsaWRpbmcnCiAgICAgICAmJiBsayAhPSAxMjI5NzIgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NvbWUnCiAgICAgICAmJiBsayAhPSAxMjM0ODQgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3N0YWJsZScKICAgICAgICYmIGxrICE9IDEyMzk5NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RhcnQnCiAgICAgICAmJiBsayAhPSAxMjU1MzIgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3N0cmljdCcKICAgICAgICYmIGxrICE9IDEyNjU1NiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RydWN0dXJlZC1pdGVtJwogICAgICAgJiYgbGsgIT0gMTI3MDY4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzd2l0Y2gnCiAgICAgICAmJiBsayAhPSAxMjc1ODAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RleHQnCiAgICAgICAmJiBsayAhPSAxMjk2MjggICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RvJwogICAgICAgJiYgbGsgIT0gMTMwMTQwICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0cmVhdCcKICAgICAgICYmIGxrICE9IDEzMDY1MiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHJ1ZScKICAgICAgICYmIGxrICE9IDEzMTE2NCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHJ5JwogICAgICAgJiYgbGsgIT0gMTMxNjc2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0dW1ibGluZycKICAgICAgICYmIGxrICE9IDEzMjE4OCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHlwZScKICAgICAgICYmIGxrICE9IDEzMjcwMCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHlwZXN3aXRjaCcKICAgICAgICYmIGxrICE9IDEzMzIxMiAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndW5pb24nCiAgICAgICAmJiBsayAhPSAxMzQyMzYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3Vub3JkZXJlZCcKICAgICAgICYmIGxrICE9IDEzNDc0OCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndXBkYXRpbmcnCiAgICAgICAmJiBsayAhPSAxMzYyODQgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ZhbGlkYXRlJwogICAgICAgJiYgbGsgIT0gMTM2Nzk2ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd2YWx1ZScKICAgICAgICYmIGxrICE9IDEzNzMwOCAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndmFyaWFibGUnCiAgICAgICAmJiBsayAhPSAxMzc4MjAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ZlcnNpb24nCiAgICAgICAmJiBsayAhPSAxMzkzNTYgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3doZXJlJwogICAgICAgJiYgbGsgIT0gMTM5ODY4ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd3aGlsZScKICAgICAgICYmIGxrICE9IDE0MTQwNCkgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnd2l0aCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9UeXBlc3dpdGNoU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHlwZXN3aXRjaFN0YXRlbWVudCIsIGUwKTsKICAgIHNoaWZ0KDI1OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM4KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ2FzZVN0YXRlbWVudCgpOwogICAgICBsb29rYWhlYWQxVygxMTcpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJyB8ICdkZWZhdWx0JwogICAgICBpZiAobDEgIT0gODkpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoOTkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBpZiAobDEgPT0gMzEpICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgewogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDczKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuJwogICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjcwKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR5cGVzd2l0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHlwZXN3aXRjaFN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDI1OSk7ICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM4KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHRyeV9DYXNlU3RhdGVtZW50KCk7CiAgICAgIGxvb2thaGVhZDFXKDExNyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnIHwgJ2RlZmF1bHQnCiAgICAgIGlmIChsMSAhPSA4OSkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg5OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3JldHVybicKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNDUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9WYXJOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg3Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0VCgyMjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Nhc2VTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDYXNlU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgIGxvb2thaGVhZDFXKDI1Nyk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICckJyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8CiAgICBpZiAobDEgPT0gMzEpICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgewogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIH0KICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICBsb29rYWhlYWQxVyg3Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1N0YXRlbWVudCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXNlU3RhdGVtZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Nhc2VTdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCg4OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICBsb29rYWhlYWQxVygyNTcpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJCcgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMzMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIH0KICAgIGxvb2thaGVhZDFXKDI1Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgbG9va2FoZWFkMVcoNzMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNzApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYXJEZWNsU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVmFyRGVjbFN0YXRlbWVudCIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDEwMik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnJScgfCAnKDonIHwgJ3ZhcmlhYmxlJwogICAgICBpZiAobDEgIT0gMzMpICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQW5ub3RhdGlvbigpOwogICAgfQogICAgc2hpZnQoMjY4KTsgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjQ1KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNzIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzo9JyB8ICc7JyB8ICdhcycKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTU1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc6PScgfCAnOycKICAgIGlmIChsMSA9PSA1MykgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgewogICAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgfQogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICAgIGxvb2thaGVhZDFXKDE3Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzo9JyB8ICc7JyB8ICdhcycKICAgICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICB7CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDE1NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzo9JyB8ICc7JwogICAgICBpZiAobDEgPT0gNTMpICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIHsKICAgICAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDU0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhckRlY2xTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVmFyRGVjbFN0YXRlbWVudCgpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTAyKTsgICAgICAgICAgICAgLy8gU15XUyB8ICclJyB8ICcoOicgfCAndmFyaWFibGUnCiAgICAgIGlmIChsMSAhPSAzMykgICAgICAgICAgICAgICAgIC8vICclJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0Fubm90YXRpb24oKTsKICAgIH0KICAgIHNoaWZ0VCgyNjgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE3Mik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnIHwgJ2FzJwogICAgaWYgKGwxID09IDgwKSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDE1NSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnCiAgICBpZiAobDEgPT0gNTMpICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgIHsKICAgICAgc2hpZnRUKDUzKTsgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgfQogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMTcyKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnIHwgJ2FzJwogICAgICBpZiAobDEgPT0gODApICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICB0cnlfVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMTU1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnCiAgICAgIGlmIChsMSA9PSA1MykgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgewogICAgICAgIHNoaWZ0VCg1Myk7ICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgfQogICAgfQogICAgc2hpZnRUKDU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1doaWxlU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiV2hpbGVTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgyNzMpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgzOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMjcwKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIldoaWxlU3RhdGVtZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1doaWxlU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoMjczKTsgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZvaWRTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWb2lkU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoNTQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVm9pZFN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Wb2lkU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoNTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRXhwclNpbmdsZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkV4cHJTaW5nbGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBsb29rYWhlYWQyVygxNzkpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICdzbGlkaW5nJyB8ICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGxvb2thaGVhZDJXKDE2Nik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJ3Njb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgbG9va2FoZWFkMlcoMTQ4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGxvb2thaGVhZDJXKDk1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE2MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICckJwogICAgY2FzZSAxNjA0OTogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnJCcKICAgIGNhc2UgMTE4OTYxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJ3Njb3JlJwogICAgY2FzZSAxMjI1MDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnc2xpZGluZycKICAgIGNhc2UgMTMxNzIzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3R1bWJsaW5nJwogICAgICBwYXJzZV9GTFdPUkV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZicgJygnCiAgICAgIHBhcnNlX0lmRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgxNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJygnCiAgICAgIHBhcnNlX1N3aXRjaEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NDEyODogICAgICAgICAgICAgICAgICAgIC8vICd0cnknICd7JwogICAgICBwYXJzZV9UcnlDYXRjaEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnKCcKICAgICAgcGFyc2VfVHlwZXN3aXRjaEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9FeHByU2ltcGxlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkV4cHJTaW5nbGUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRXhwclNpbmdsZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgbG9va2FoZWFkMlcoMTc5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnc2xpZGluZycgfCAndHVtYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBsb29rYWhlYWQyVygxNjYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGxvb2thaGVhZDJXKDE0OCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBsb29rYWhlYWQyVyg5NSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxNjAxMTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnJCcKICAgIGNhc2UgMTYwNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJyQnCiAgICBjYXNlIDExODk2MTogICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICdzY29yZScKICAgIGNhc2UgMTIyNTA3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3NsaWRpbmcnCiAgICBjYXNlIDEzMTcyMzogICAgICAgICAgICAgICAgICAgIC8vICdmb3InICd0dW1ibGluZycKICAgICAgdHJ5X0ZMV09SRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgwNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJyAnKCcKICAgICAgdHJ5X0lmRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgxNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJygnCiAgICAgIHRyeV9Td2l0Y2hFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDQxMjg6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JyAneycKICAgICAgdHJ5X1RyeUNhdGNoRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTgxNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICcoJwogICAgICB0cnlfVHlwZXN3aXRjaEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRXhwclNpbXBsZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRXhwclNpbXBsZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkV4cHJTaW1wbGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBsb29rYWhlYWQyVygyNjgpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMlcoMjc1KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBsb29rYWhlYWQyVygxNzApOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdub2RlJyB8ICd2YWx1ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGxvb2thaGVhZDJXKDI2MCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgY2FzZSAyNDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgbG9va2FoZWFkMlcoMTQzKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDE3OTk4ICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnKCcKICAgICB8fCBsayA9PSAxODAzMSAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJygnCiAgICAgfHwgbGsgPT0gMTgwODEgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcoJwogICAgIHx8IGxrID09IDE4MTQyICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnKCcKICAgICB8fCBsayA9PSA5OTQzOSAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ25vZGUnCiAgICAgfHwgbGsgPT0gOTk0ODkgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdub2RlJwogICAgIHx8IGxrID09IDk5NTUwICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnbm9kZScKICAgICB8fCBsayA9PSA5OTk1MSAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ25vZGVzJwogICAgIHx8IGxrID09IDEwMDAwMSAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gMTM2OTI3KSAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAndmFsdWUnCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTAsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X09yRXhwcigpOwogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAyQSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgIHRyeV9JbnNlcnRFeHByKCk7CiAgICAgICAgICAgIGxrID0gLTM7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDNBKQogICAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICB0cnlfRGVsZXRlRXhwcigpOwogICAgICAgICAgICAgIGxrID0gLTQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2ggKHA0QSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgICB0cnlfUmVuYW1lRXhwcigpOwogICAgICAgICAgICAgICAgbGsgPSAtNTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2ggKHA1QSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgICAgIHRyeV9SZXBsYWNlRXhwcigpOwogICAgICAgICAgICAgICAgICBsayA9IC02OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKHA2QSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgICAgICAgdHJ5X0pTT05EZWxldGVFeHByKCk7CiAgICAgICAgICAgICAgICAgICAgbGsgPSAtODsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjYXRjaCAocDhBKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgICAgICAgIHRyeV9KU09OSW5zZXJ0RXhwcigpOwogICAgICAgICAgICAgICAgICAgICAgbGsgPSAtOTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHA5QSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgICAgICAgICAgIHRyeV9KU09OUmVuYW1lRXhwcigpOwogICAgICAgICAgICAgICAgICAgICAgICBsayA9IC0xMDsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChwMTBBKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlfSlNPTlJlcGxhY2VFeHByKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbGsgPSAtMTE7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKHAxMUEpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBsayA9IC0xMjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgxMCwgZTAsIGxrKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTYwMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnJCcKICAgIGNhc2UgMTYxMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnICckJwogICAgICBwYXJzZV9RdWFudGlmaWVkRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTM6CiAgICAgIHBhcnNlX0luc2VydEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC00OgogICAgICBwYXJzZV9EZWxldGVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtNToKICAgICAgcGFyc2VfUmVuYW1lRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTY6CiAgICBjYXNlIDk5NTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnbm9kZScKICAgICAgcGFyc2VfUmVwbGFjZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1OTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnJCcKICAgICAgcGFyc2VfVHJhbnNmb3JtRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTg6CiAgICBjYXNlIDMxODM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA0MjA3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA0NzE5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSA1MjMxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDU3NDM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgMTU5ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJyQnCiAgICBjYXNlIDE2NDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICckJCcKICAgIGNhc2UgMTcwMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJyUnCiAgICBjYXNlIDI4MjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICc8JwogICAgY2FzZSAyODc4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnPCEtLScKICAgIGNhc2UgMzA4MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJzw/JwogICAgY2FzZSAzNTQzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnWycKICAgIGNhc2UgMzY0NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2FmdGVyJwogICAgY2FzZSAzNzQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYWxsb3dpbmcnCiAgICBjYXNlIDM3OTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhbmNlc3RvcicKICAgIGNhc2UgMzg1MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDM5MDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhbmQnCiAgICBjYXNlIDQwMDQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhcHBlbmQnCiAgICBjYXNlIDQwNTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhcnJheScKICAgIGNhc2UgNDEwNzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2FzJwogICAgY2FzZSA0MTU4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYXNjZW5kaW5nJwogICAgY2FzZSA0MjA5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYXQnCiAgICBjYXNlIDQyNjA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQzMTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdiYXNlLXVyaScKICAgIGNhc2UgNDM2MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2JlZm9yZScKICAgIGNhc2UgNDQxNDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0NDY1NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYnJlYWsnCiAgICBjYXNlIDQ1Njc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjYXNlJwogICAgY2FzZSA0NjE5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY2FzdCcKICAgIGNhc2UgNDY3MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Nhc3RhYmxlJwogICAgY2FzZSA0NzIxNTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY2F0Y2gnCiAgICBjYXNlIDQ4MjM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjaGlsZCcKICAgIGNhc2UgNDg3NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvbGxhdGlvbicKICAgIGNhc2UgNDk3NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvbW1lbnQnCiAgICBjYXNlIDUwMjg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjb25zdHJhaW50JwogICAgY2FzZSA1MDc5OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MjMzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY29udGV4dCcKICAgIGNhc2UgNTI4NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvbnRpbnVlJwogICAgY2FzZSA1MzM1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY29weScKICAgIGNhc2UgNTM4NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTQzODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvdW50JwogICAgY2FzZSA1NDg5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDU1OTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdkZWNsYXJlJwogICAgY2FzZSA1NjQzMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZGVmYXVsdCcKICAgIGNhc2UgNTY5NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2RlbGV0ZScKICAgIGNhc2UgNTc0NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3OTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU4NDc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdkZXNjZW5kaW5nJwogICAgY2FzZSA2MTAzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZGl2JwogICAgY2FzZSA2MTU1MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYyMDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSA2MjU3NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZWxlbWVudCcKICAgIGNhc2UgNjMwODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Vsc2UnCiAgICBjYXNlIDYzNTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdlbXB0eScKICAgIGNhc2UgNjQxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2NDYyMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZW5jb2RpbmcnCiAgICBjYXNlIDY1MTM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdlbmQnCiAgICBjYXNlIDY2MTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdlcScKICAgIGNhc2UgNjY2NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2V2ZXJ5JwogICAgY2FzZSA2NzY5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZXhjZXB0JwogICAgY2FzZSA2ODIwNzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZXhpdCcKICAgIGNhc2UgNjg3MTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2V4dGVybmFsJwogICAgY2FzZSA2OTIzMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZmFsc2UnCiAgICBjYXNlIDY5NzQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdmaXJzdCcKICAgIGNhc2UgNzAyNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ZvbGxvd2luZycKICAgIGNhc2UgNzA3Njc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MTI3OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZm9yJwogICAgY2FzZSA3MjgxNTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZnJvbScKICAgIGNhc2UgNzMzMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzUzNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NTg4NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZ2UnCiAgICBjYXNlIDc2OTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdncm91cCcKICAgIGNhc2UgNzc5MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2d0JwogICAgY2FzZSA3ODQ0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaWRpdicKICAgIGNhc2UgNzg5NTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2lmJwogICAgY2FzZSA3OTQ3MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaW1wb3J0JwogICAgY2FzZSA3OTk4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaW4nCiAgICBjYXNlIDgwNDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdpbmRleCcKICAgIGNhc2UgODI1NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2luc2VydCcKICAgIGNhc2UgODMwNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2luc3RhbmNlJwogICAgY2FzZSA4MzU2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaW50ZWdyaXR5JwogICAgY2FzZSA4NDA3OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaW50ZXJzZWN0JwogICAgY2FzZSA4NDU5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaW50bycKICAgIGNhc2UgODUxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2lzJwogICAgY2FzZSA4NTYxNTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaXRlbScKICAgIGNhc2UgODYxMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2pzb24nCiAgICBjYXNlIDg2NjM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdqc29uLWl0ZW0nCiAgICBjYXNlIDg3MTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdqc29uaXEnCiAgICBjYXNlIDg4Njg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdsYXN0JwogICAgY2FzZSA4OTE5OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbGF4JwogICAgY2FzZSA4OTcxMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbGUnCiAgICBjYXNlIDkwNzM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdsZXQnCiAgICBjYXNlIDkxNzU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdsb29wJwogICAgY2FzZSA5Mjc4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbHQnCiAgICBjYXNlIDkzODA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdtb2QnCiAgICBjYXNlIDk0MzE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdtb2RpZnknCiAgICBjYXNlIDk0ODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdtb2R1bGUnCiAgICBjYXNlIDk1ODU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICduYW1lc3BhY2UnCiAgICBjYXNlIDk2MzY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgOTY4Nzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ25lJwogICAgY2FzZSAxMDA5NzU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbnVsbCcKICAgIGNhc2UgMTAxNDg3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ29iamVjdCcKICAgIGNhc2UgMTAzNTM1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ29ubHknCiAgICBjYXNlIDEwNDA0NzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdvcHRpb24nCiAgICBjYXNlIDEwNDU1OTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdvcicKICAgIGNhc2UgMTA1MDcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ29yZGVyJwogICAgY2FzZSAxMDU1ODM6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnb3JkZXJlZCcKICAgIGNhc2UgMTA2MDk1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ29yZGVyaW5nJwogICAgY2FzZSAxMDc2MzE6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAncGFyZW50JwogICAgY2FzZSAxMTA3MDM6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAncHJlY2VkaW5nJwogICAgY2FzZSAxMTEyMTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDExMjc1MTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAxMTM3NzU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAncmVuYW1lJwogICAgY2FzZSAxMTQyODc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAncmVwbGFjZScKICAgIGNhc2UgMTE0Nzk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3JldHVybicKICAgIGNhc2UgMTE1MzExOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3JldHVybmluZycKICAgIGNhc2UgMTE1ODIzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE2ODQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3NhdGlzZmllcycKICAgIGNhc2UgMTE3MzU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3NjaGVtYScKICAgIGNhc2UgMTE3ODcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDExODM4MzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMTE4ODk1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3Njb3JlJwogICAgY2FzZSAxMTk0MDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc2VsZWN0JwogICAgY2FzZSAxMTk5MTk6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc2VsZicKICAgIGNhc2UgMTIyNDc5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMjk5MTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzb21lJwogICAgY2FzZSAxMjM1MDM6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc3RhYmxlJwogICAgY2FzZSAxMjQwMTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc3RhcnQnCiAgICBjYXNlIDEyNTU1MTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzdHJpY3QnCiAgICBjYXNlIDEyNjU3NTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDEyNzA4NzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzd2l0Y2gnCiAgICBjYXNlIDEyNzU5OTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0ZXh0JwogICAgY2FzZSAxMjk2NDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndG8nCiAgICBjYXNlIDEzMDE1OTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0cmVhdCcKICAgIGNhc2UgMTMwNjcxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3RydWUnCiAgICBjYXNlIDEzMTE4MzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0cnknCiAgICBjYXNlIDEzMTY5NTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0dW1ibGluZycKICAgIGNhc2UgMTMyMjA3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3R5cGUnCiAgICBjYXNlIDEzMjcxOTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0eXBlc3dpdGNoJwogICAgY2FzZSAxMzMyMzE6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndW5pb24nCiAgICBjYXNlIDEzNDI1NTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzNDc2NzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd1cGRhdGluZycKICAgIGNhc2UgMTM2MzAzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzY4MTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndmFsdWUnCiAgICBjYXNlIDEzNzMyNzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd2YXJpYWJsZScKICAgIGNhc2UgMTM3ODM5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzOTM3NTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd3aGVyZScKICAgIGNhc2UgMTM5ODg3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3doaWxlJwogICAgY2FzZSAxNDE0MjM6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnd2l0aCcKICAgIGNhc2UgMTQzOTgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3snCiAgICBjYXNlIDE0NTAwNzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd7fCcKICAgICAgcGFyc2VfSlNPTkRlbGV0ZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC05OgogICAgY2FzZSAzMjMzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgNDI1NzogICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgSW50ZWdlckxpdGVyYWwKICAgIGNhc2UgNDc2OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgRGVjaW1hbExpdGVyYWwKICAgIGNhc2UgNTI4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgRG91YmxlTGl0ZXJhbAogICAgY2FzZSA1NzkzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyBTdHJpbmdMaXRlcmFsCiAgICBjYXNlIDk4ODk6ICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnIE5DTmFtZV5Ub2tlbgogICAgY2FzZSAxNjAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnJCcKICAgIGNhc2UgMTY1NDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJyQkJwogICAgY2FzZSAxNzA1NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnJScKICAgIGNhc2UgMTg1OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJygjJwogICAgY2FzZSAyMTE1MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnKycKICAgIGNhc2UgMjIxNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJy0nCiAgICBjYXNlIDI0MjI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcvJwogICAgY2FzZSAyNDczNzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnLy8nCiAgICBjYXNlIDI4MzIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICc8JwogICAgY2FzZSAyODgzMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnPCEtLScKICAgIGNhc2UgMzA4ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJzw/JwogICAgY2FzZSAzNTQ4OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnWycKICAgIGNhc2UgMzY1MTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FmdGVyJwogICAgY2FzZSAzNzUzNzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYWxsb3dpbmcnCiAgICBjYXNlIDM4MDQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhbmNlc3RvcicKICAgIGNhc2UgMzg1NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDM5MDczOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhbmQnCiAgICBjYXNlIDQwMDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhcHBlbmQnCiAgICBjYXNlIDQwNjA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhcnJheScKICAgIGNhc2UgNDExMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FzJwogICAgY2FzZSA0MTYzMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYXNjZW5kaW5nJwogICAgY2FzZSA0MjE0NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYXQnCiAgICBjYXNlIDQyNjU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQzMTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdiYXNlLXVyaScKICAgIGNhc2UgNDM2ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2JlZm9yZScKICAgIGNhc2UgNDQxOTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0NDcwNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYnJlYWsnCiAgICBjYXNlIDQ1NzI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjYXNlJwogICAgY2FzZSA0NjI0MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY2FzdCcKICAgIGNhc2UgNDY3NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Nhc3RhYmxlJwogICAgY2FzZSA0NzI2NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY2F0Y2gnCiAgICBjYXNlIDQ4Mjg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjaGlsZCcKICAgIGNhc2UgNDg4MDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NvbGxhdGlvbicKICAgIGNhc2UgNDk4MjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NvbW1lbnQnCiAgICBjYXNlIDUwMzM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjb25zdHJhaW50JwogICAgY2FzZSA1MDg0OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MjM4NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29udGV4dCcKICAgIGNhc2UgNTI4OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NvbnRpbnVlJwogICAgY2FzZSA1MzQwOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29weScKICAgIGNhc2UgNTM5MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTQ0MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NvdW50JwogICAgY2FzZSA1NDk0NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDU1OTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkZWNsYXJlJwogICAgY2FzZSA1NjQ4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZGVmYXVsdCcKICAgIGNhc2UgNTY5OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2RlbGV0ZScKICAgIGNhc2UgNTc1MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU4MDE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU4NTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkZXNjZW5kaW5nJwogICAgY2FzZSA2MTA4OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZGl2JwogICAgY2FzZSA2MTYwMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZG9jdW1lbnQnCiAgICBjYXNlIDYyMTEzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSA2MjYyNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZWxlbWVudCcKICAgIGNhc2UgNjMxMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Vsc2UnCiAgICBjYXNlIDYzNjQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdlbXB0eScKICAgIGNhc2UgNjQxNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2NDY3MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZW5jb2RpbmcnCiAgICBjYXNlIDY1MTg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdlbmQnCiAgICBjYXNlIDY2MjA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdlcScKICAgIGNhc2UgNjY3MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2V2ZXJ5JwogICAgY2FzZSA2Nzc0NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZXhjZXB0JwogICAgY2FzZSA2ODI1NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZXhpdCcKICAgIGNhc2UgNjg3Njk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2V4dGVybmFsJwogICAgY2FzZSA2OTI4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZmFsc2UnCiAgICBjYXNlIDY5NzkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdmaXJzdCcKICAgIGNhc2UgNzAzMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2ZvbGxvd2luZycKICAgIGNhc2UgNzA4MTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MTMyOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZm9yJwogICAgY2FzZSA3Mjg2NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZnJvbScKICAgIGNhc2UgNzMzNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzU0MjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NTkzNzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZ2UnCiAgICBjYXNlIDc2OTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdncm91cCcKICAgIGNhc2UgNzc5ODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2d0JwogICAgY2FzZSA3ODQ5NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaWRpdicKICAgIGNhc2UgNzkwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2lmJwogICAgY2FzZSA3OTUyMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW1wb3J0JwogICAgY2FzZSA4MDAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW4nCiAgICBjYXNlIDgwNTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpbmRleCcKICAgIGNhc2UgODI1OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2luc2VydCcKICAgIGNhc2UgODMxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2luc3RhbmNlJwogICAgY2FzZSA4MzYxNzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW50ZWdyaXR5JwogICAgY2FzZSA4NDEyOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW50ZXJzZWN0JwogICAgY2FzZSA4NDY0MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW50bycKICAgIGNhc2UgODUxNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2lzJwogICAgY2FzZSA4NTY2NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaXRlbScKICAgIGNhc2UgODYxNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2pzb24nCiAgICBjYXNlIDg2Njg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdqc29uLWl0ZW0nCiAgICBjYXNlIDg3MjAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdqc29uaXEnCiAgICBjYXNlIDg4NzM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdsYXN0JwogICAgY2FzZSA4OTI0OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbGF4JwogICAgY2FzZSA4OTc2MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbGUnCiAgICBjYXNlIDkwNzg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdsZXQnCiAgICBjYXNlIDkxODA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdsb29wJwogICAgY2FzZSA5MjgzMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbHQnCiAgICBjYXNlIDkzODU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdtb2QnCiAgICBjYXNlIDk0MzY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdtb2RpZnknCiAgICBjYXNlIDk0ODgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdtb2R1bGUnCiAgICBjYXNlIDk1OTA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICduYW1lc3BhY2UnCiAgICBjYXNlIDk2NDE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgOTY5Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ25lJwogICAgY2FzZSAxMDA1MTM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbm90JwogICAgY2FzZSAxMDEwMjU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbnVsbCcKICAgIGNhc2UgMTAxNTM3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ29iamVjdCcKICAgIGNhc2UgMTAzNTg1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ29ubHknCiAgICBjYXNlIDEwNDA5NzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdvcHRpb24nCiAgICBjYXNlIDEwNDYwOTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdvcicKICAgIGNhc2UgMTA1MTIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ29yZGVyJwogICAgY2FzZSAxMDU2MzM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnb3JkZXJlZCcKICAgIGNhc2UgMTA2MTQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ29yZGVyaW5nJwogICAgY2FzZSAxMDc2ODE6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncGFyZW50JwogICAgY2FzZSAxMTA3NTM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncHJlY2VkaW5nJwogICAgY2FzZSAxMTEyNjU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDExMjgwMTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAxMTM4MjU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncmVuYW1lJwogICAgY2FzZSAxMTQzMzc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncmVwbGFjZScKICAgIGNhc2UgMTE0ODQ5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3JldHVybicKICAgIGNhc2UgMTE1MzYxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3JldHVybmluZycKICAgIGNhc2UgMTE1ODczOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE2ODk3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3NhdGlzZmllcycKICAgIGNhc2UgMTE3NDA5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3NjaGVtYScKICAgIGNhc2UgMTE3OTIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDExODQzMzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMTE4OTQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3Njb3JlJwogICAgY2FzZSAxMTk0NTc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2VsZWN0JwogICAgY2FzZSAxMTk5Njk6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2VsZicKICAgIGNhc2UgMTIyNTI5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMzA0MTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzb21lJwogICAgY2FzZSAxMjM1NTM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc3RhYmxlJwogICAgY2FzZSAxMjQwNjU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc3RhcnQnCiAgICBjYXNlIDEyNTYwMTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzdHJpY3QnCiAgICBjYXNlIDEyNjYyNTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDEyNzEzNzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzd2l0Y2gnCiAgICBjYXNlIDEyNzY0OTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd0ZXh0JwogICAgY2FzZSAxMjk2OTc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndG8nCiAgICBjYXNlIDEzMDIwOTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd0cmVhdCcKICAgIGNhc2UgMTMwNzIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3RydWUnCiAgICBjYXNlIDEzMTIzMzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd0cnknCiAgICBjYXNlIDEzMTc0NTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd0dW1ibGluZycKICAgIGNhc2UgMTMyMjU3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3R5cGUnCiAgICBjYXNlIDEzMjc2OTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd0eXBlc3dpdGNoJwogICAgY2FzZSAxMzMyODE6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndW5pb24nCiAgICBjYXNlIDEzNDMwNTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzNDgxNzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd1cGRhdGluZycKICAgIGNhc2UgMTM2MzUzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzY4NjU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndmFsdWUnCiAgICBjYXNlIDEzNzM3NzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd2YXJpYWJsZScKICAgIGNhc2UgMTM3ODg5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3ZlcnNpb24nCiAgICBjYXNlIDEzOTQyNTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd3aGVyZScKICAgIGNhc2UgMTM5OTM3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3doaWxlJwogICAgY2FzZSAxNDE0NzM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnd2l0aCcKICAgIGNhc2UgMTQ0MDMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3snCiAgICBjYXNlIDE0NTA1NzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd7fCcKICAgICAgcGFyc2VfSlNPTkluc2VydEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMDoKICAgIGNhc2UgMzI5NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgRVFOYW1lXlRva2VuCiAgICBjYXNlIDQzMTg6ICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIEludGVnZXJMaXRlcmFsCiAgICBjYXNlIDQ4MzA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIERlY2ltYWxMaXRlcmFsCiAgICBjYXNlIDUzNDI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIERvdWJsZUxpdGVyYWwKICAgIGNhc2UgNTg1NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgU3RyaW5nTGl0ZXJhbAogICAgY2FzZSAxNjA5NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnJCcKICAgIGNhc2UgMTY2MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJyQkJwogICAgY2FzZSAxNzExODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnJScKICAgIGNhc2UgMjgzODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJzwnCiAgICBjYXNlIDI4ODk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICc8IS0tJwogICAgY2FzZSAzMDk0MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnPD8nCiAgICBjYXNlIDM1NTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdbJwogICAgY2FzZSAzNjU3NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYWZ0ZXInCiAgICBjYXNlIDM3NTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdhbGxvd2luZycKICAgIGNhc2UgMzgxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FuY2VzdG9yJwogICAgY2FzZSAzODYyMjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzkxMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FuZCcKICAgIGNhc2UgNDAxNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FwcGVuZCcKICAgIGNhc2UgNDA2NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FycmF5JwogICAgY2FzZSA0MTE4MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYXMnCiAgICBjYXNlIDQxNjk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdhc2NlbmRpbmcnCiAgICBjYXNlIDQyMjA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdhdCcKICAgIGNhc2UgNDI3MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDMyMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Jhc2UtdXJpJwogICAgY2FzZSA0Mzc0MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYmVmb3JlJwogICAgY2FzZSA0NDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQ0NzY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdicmVhaycKICAgIGNhc2UgNDU3OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Nhc2UnCiAgICBjYXNlIDQ2MzAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjYXN0JwogICAgY2FzZSA0NjgxNDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ3MzI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjYXRjaCcKICAgIGNhc2UgNDgzNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2NoaWxkJwogICAgY2FzZSA0ODg2MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29sbGF0aW9uJwogICAgY2FzZSA0OTg4NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29tbWVudCcKICAgIGNhc2UgNTAzOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDUwOTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUyNDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjb250ZXh0JwogICAgY2FzZSA1Mjk1ODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29udGludWUnCiAgICBjYXNlIDUzNDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjb3B5JwogICAgY2FzZSA1Mzk4MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1NDQ5NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY291bnQnCiAgICBjYXNlIDU1MDA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTYwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2RlY2xhcmUnCiAgICBjYXNlIDU2NTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkZWZhdWx0JwogICAgY2FzZSA1NzA1NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZGVsZXRlJwogICAgY2FzZSA1NzU2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTgwNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNTg1OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDYxMTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkaXYnCiAgICBjYXNlIDYxNjYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkb2N1bWVudCcKICAgIGNhc2UgNjIxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyNjg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdlbGVtZW50JwogICAgY2FzZSA2MzE5ODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZWxzZScKICAgIGNhc2UgNjM3MTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2VtcHR5JwogICAgY2FzZSA2NDIyMjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDY0NzM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdlbmNvZGluZycKICAgIGNhc2UgNjUyNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2VuZCcKICAgIGNhc2UgNjYyNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2VxJwogICAgY2FzZSA2Njc4MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZXZlcnknCiAgICBjYXNlIDY3ODA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdleGNlcHQnCiAgICBjYXNlIDY4MzE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdleGl0JwogICAgY2FzZSA2ODgzMDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY5MzQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdmYWxzZScKICAgIGNhc2UgNjk4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2ZpcnN0JwogICAgY2FzZSA3MDM2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDg3ODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcxMzkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdmb3InCiAgICBjYXNlIDcyOTI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdmcm9tJwogICAgY2FzZSA3MzQzODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3NTQ4NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc1OTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdnZScKICAgIGNhc2UgNzcwMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2dyb3VwJwogICAgY2FzZSA3ODA0NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZ3QnCiAgICBjYXNlIDc4NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpZGl2JwogICAgY2FzZSA3OTA3MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaWYnCiAgICBjYXNlIDc5NTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbXBvcnQnCiAgICBjYXNlIDgwMDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbicKICAgIGNhc2UgODA2MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2luZGV4JwogICAgY2FzZSA4MjY1NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaW5zZXJ0JwogICAgY2FzZSA4MzE2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaW5zdGFuY2UnCiAgICBjYXNlIDgzNjc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbnRlZ3JpdHknCiAgICBjYXNlIDg0MTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbnRlcnNlY3QnCiAgICBjYXNlIDg0NzAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbnRvJwogICAgY2FzZSA4NTIxNDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaXMnCiAgICBjYXNlIDg1NzI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpdGVtJwogICAgY2FzZSA4NjIzODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnanNvbicKICAgIGNhc2UgODY3NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2pzb24taXRlbScKICAgIGNhc2UgODcyNjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2pzb25pcScKICAgIGNhc2UgODg3OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2xhc3QnCiAgICBjYXNlIDg5MzEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdsYXgnCiAgICBjYXNlIDg5ODIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdsZScKICAgIGNhc2UgOTA4NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2xldCcKICAgIGNhc2UgOTE4NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2xvb3AnCiAgICBjYXNlIDkyODk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdsdCcKICAgIGNhc2UgOTM5MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ21vZCcKICAgIGNhc2UgOTQ0MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ21vZGlmeScKICAgIGNhc2UgOTQ5NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ21vZHVsZScKICAgIGNhc2UgOTU5NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ25hbWVzcGFjZScKICAgIGNhc2UgOTY0Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5Njk5MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnbmUnCiAgICBjYXNlIDEwMDA2MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdub2RlcycKICAgIGNhc2UgMTAxMDg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ251bGwnCiAgICBjYXNlIDEwMTU5ODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvYmplY3QnCiAgICBjYXNlIDEwMzY0NjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvbmx5JwogICAgY2FzZSAxMDQxNTg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnb3B0aW9uJwogICAgY2FzZSAxMDQ2NzA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnb3InCiAgICBjYXNlIDEwNTE4MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvcmRlcicKICAgIGNhc2UgMTA1Njk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwNjIwNjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvcmRlcmluZycKICAgIGNhc2UgMTA3NzQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3BhcmVudCcKICAgIGNhc2UgMTEwODE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3ByZWNlZGluZycKICAgIGNhc2UgMTExMzI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTI4NjI6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTEzODg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3JlbmFtZScKICAgIGNhc2UgMTE0Mzk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDkxMDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdyZXR1cm4nCiAgICBjYXNlIDExNTQyMjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTkzNDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExNjk1ODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzYXRpc2ZpZXMnCiAgICBjYXNlIDExNzQ3MDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzY2hlbWEnCiAgICBjYXNlIDExNzk4MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTg0OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExOTAwNjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzY29yZScKICAgIGNhc2UgMTE5NTE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3NlbGVjdCcKICAgIGNhc2UgMTIwMDMwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3NlbGYnCiAgICBjYXNlIDEyMjU5MDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzbGlkaW5nJwogICAgY2FzZSAxMjMxMDI6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc29tZScKICAgIGNhc2UgMTIzNjE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3N0YWJsZScKICAgIGNhc2UgMTI0MTI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3N0YXJ0JwogICAgY2FzZSAxMjU2NjI6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc3RyaWN0JwogICAgY2FzZSAxMjY2ODY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAxMjcxOTg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc3dpdGNoJwogICAgY2FzZSAxMjc3MTA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndGV4dCcKICAgIGNhc2UgMTI5NzU4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3RvJwogICAgY2FzZSAxMzAyNzA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHJlYXQnCiAgICBjYXNlIDEzMDc4MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd0cnVlJwogICAgY2FzZSAxMzEyOTQ6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHJ5JwogICAgY2FzZSAxMzE4MDY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMjMxODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd0eXBlJwogICAgY2FzZSAxMzI4MzA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMzMzQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3VuaW9uJwogICAgY2FzZSAxMzQzNjY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzQ4Nzg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNjQxNDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd2YWxpZGF0ZScKICAgIGNhc2UgMTM2OTI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3ZhbHVlJwogICAgY2FzZSAxMzc0Mzg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzk1MDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd2ZXJzaW9uJwogICAgY2FzZSAxMzk0ODY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnd2hlcmUnCiAgICBjYXNlIDEzOTk5ODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd3aGlsZScKICAgIGNhc2UgMTQxNTM0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3dpdGgnCiAgICBjYXNlIDE0NDA5NDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd7JwogICAgY2FzZSAxNDUxMTg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAne3wnCiAgICAgIHBhcnNlX0pTT05SZW5hbWVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTE6CiAgICAgIHBhcnNlX0pTT05SZXBsYWNlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTEyOgogICAgY2FzZSAzMTUwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgNDE3NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgSW50ZWdlckxpdGVyYWwKICAgIGNhc2UgNDY4NjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgRGVjaW1hbExpdGVyYWwKICAgIGNhc2UgNTE5ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgRG91YmxlTGl0ZXJhbAogICAgY2FzZSA1NzEwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyBTdHJpbmdMaXRlcmFsCiAgICBjYXNlIDE1OTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICckJwogICAgY2FzZSAxNjQ2MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnJCQnCiAgICBjYXNlIDE2OTc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICclJwogICAgY2FzZSAxODUxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnKCMnCiAgICBjYXNlIDIxMDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcrJwogICAgY2FzZSAyMjA5NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnLScKICAgIGNhc2UgMjQxNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJy8nCiAgICBjYXNlIDI0NjU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcvLycKICAgIGNhc2UgMjgyMzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJzwnCiAgICBjYXNlIDI4NzUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICc8IS0tJwogICAgY2FzZSAzMDc5ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnPD8nCiAgICBjYXNlIDM1NDA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdbJwogICAgY2FzZSAzNjQzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYWZ0ZXInCiAgICBjYXNlIDM3NDU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdhbGxvd2luZycKICAgIGNhc2UgMzc5NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2FuY2VzdG9yJwogICAgY2FzZSAzODQ3ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzg5OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2FuZCcKICAgIGNhc2UgNDAwMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2FwcGVuZCcKICAgIGNhc2UgNDA1MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2FycmF5JwogICAgY2FzZSA0MTAzODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYXMnCiAgICBjYXNlIDQxNTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdhc2NlbmRpbmcnCiAgICBjYXNlIDQyMDYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdhdCcKICAgIGNhc2UgNDI1NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDMwODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2Jhc2UtdXJpJwogICAgY2FzZSA0MzU5ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYmVmb3JlJwogICAgY2FzZSA0NDExMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQ0NjIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdicmVhaycKICAgIGNhc2UgNDU2NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2Nhc2UnCiAgICBjYXNlIDQ2MTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjYXN0JwogICAgY2FzZSA0NjY3MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ3MTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjYXRjaCcKICAgIGNhc2UgNDgyMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2NoaWxkJwogICAgY2FzZSA0ODcxODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY29sbGF0aW9uJwogICAgY2FzZSA0OTc0MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY29tbWVudCcKICAgIGNhc2UgNTAyNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDUwNzY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUyMzAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb250ZXh0JwogICAgY2FzZSA1MjgxNDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY29udGludWUnCiAgICBjYXNlIDUzMzI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb3B5JwogICAgY2FzZSA1MzgzODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1NDM1MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY291bnQnCiAgICBjYXNlIDU0ODYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTU4ODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2RlY2xhcmUnCiAgICBjYXNlIDU2Mzk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdkZWZhdWx0JwogICAgY2FzZSA1NjkxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZGVsZXRlJwogICAgY2FzZSA1NzQyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTc5MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNTg0NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDYxMDA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdkaXYnCiAgICBjYXNlIDYxNTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdkb2N1bWVudCcKICAgIGNhc2UgNjIwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyNTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdlbGVtZW50JwogICAgY2FzZSA2MzA1NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZWxzZScKICAgIGNhc2UgNjM1NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2VtcHR5JwogICAgY2FzZSA2NDA3ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDY0NTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdlbmNvZGluZycKICAgIGNhc2UgNjUxMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2VuZCcKICAgIGNhc2UgNjYxMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2VxJwogICAgY2FzZSA2NjYzODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZXZlcnknCiAgICBjYXNlIDY3NjYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdleGNlcHQnCiAgICBjYXNlIDY4MTc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdleGl0JwogICAgY2FzZSA2ODY4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY5MTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmYWxzZScKICAgIGNhc2UgNjk3MTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ZpcnN0JwogICAgY2FzZSA3MDIyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDczNDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcxMjQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmb3InCiAgICBjYXNlIDcyNzgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmcm9tJwogICAgY2FzZSA3MzI5NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3NTM0MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc1ODU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdnZScKICAgIGNhc2UgNzY4Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2dyb3VwJwogICAgY2FzZSA3NzkwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZ3QnCiAgICBjYXNlIDc4NDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpZGl2JwogICAgY2FzZSA3ODkyNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnaWYnCiAgICBjYXNlIDc5NDM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbXBvcnQnCiAgICBjYXNlIDc5OTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbicKICAgIGNhc2UgODA0NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2luZGV4JwogICAgY2FzZSA4MjUxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnaW5zZXJ0JwogICAgY2FzZSA4MzAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnaW5zdGFuY2UnCiAgICBjYXNlIDgzNTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbnRlZ3JpdHknCiAgICBjYXNlIDg0MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbnRlcnNlY3QnCiAgICBjYXNlIDg0NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbnRvJwogICAgY2FzZSA4NTA3MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnaXMnCiAgICBjYXNlIDg1NTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpdGVtJwogICAgY2FzZSA4NjA5NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnanNvbicKICAgIGNhc2UgODY2MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2pzb24taXRlbScKICAgIGNhc2UgODcxMTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2pzb25pcScKICAgIGNhc2UgODg2NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2xhc3QnCiAgICBjYXNlIDg5MTY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdsYXgnCiAgICBjYXNlIDg5Njc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdsZScKICAgIGNhc2UgOTA3MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2xldCcKICAgIGNhc2UgOTE3MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2xvb3AnCiAgICBjYXNlIDkyNzUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdsdCcKICAgIGNhc2UgOTM3NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ21vZCcKICAgIGNhc2UgOTQyODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ21vZGlmeScKICAgIGNhc2UgOTQ3OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ21vZHVsZScKICAgIGNhc2UgOTU4MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ25hbWVzcGFjZScKICAgIGNhc2UgOTYzMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5Njg0NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbmUnCiAgICBjYXNlIDk5NDA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdub2RlJwogICAgY2FzZSA5OTkxODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbm9kZXMnCiAgICBjYXNlIDEwMDQzMDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdub3QnCiAgICBjYXNlIDEwMDk0MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdudWxsJwogICAgY2FzZSAxMDE0NTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnb2JqZWN0JwogICAgY2FzZSAxMDM1MDI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnb25seScKICAgIGNhc2UgMTA0MDE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ29wdGlvbicKICAgIGNhc2UgMTA0NTI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ29yJwogICAgY2FzZSAxMDUwMzg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnb3JkZXInCiAgICBjYXNlIDEwNTU1MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdvcmRlcmVkJwogICAgY2FzZSAxMDYwNjI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnb3JkZXJpbmcnCiAgICBjYXNlIDEwNzU5ODogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdwYXJlbnQnCiAgICBjYXNlIDExMDY3MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdwcmVjZWRpbmcnCiAgICBjYXNlIDExMTE4MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMTEyNzE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMzc0MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdyZW5hbWUnCiAgICBjYXNlIDExNDI1NDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdyZXBsYWNlJwogICAgY2FzZSAxMTQ3NjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAncmV0dXJuJwogICAgY2FzZSAxMTUyNzg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAncmV0dXJuaW5nJwogICAgY2FzZSAxMTU3OTA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTY4MTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc2F0aXNmaWVzJwogICAgY2FzZSAxMTczMjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc2NoZW1hJwogICAgY2FzZSAxMTc4Mzg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE4MzUwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAxMTg4NjI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc2NvcmUnCiAgICBjYXNlIDExOTM3NDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzZWxlY3QnCiAgICBjYXNlIDExOTg4NjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzZWxmJwogICAgY2FzZSAxMjI0NDY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc2xpZGluZycKICAgIGNhc2UgMTIyOTU4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3NvbWUnCiAgICBjYXNlIDEyMzQ3MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzdGFibGUnCiAgICBjYXNlIDEyMzk4MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzdGFydCcKICAgIGNhc2UgMTI1NTE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3N0cmljdCcKICAgIGNhc2UgMTI2NTQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMTI3MDU0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3N3aXRjaCcKICAgIGNhc2UgMTI3NTY2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3RleHQnCiAgICBjYXNlIDEyOTYxNDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd0bycKICAgIGNhc2UgMTMwMTI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3RyZWF0JwogICAgY2FzZSAxMzA2Mzg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndHJ1ZScKICAgIGNhc2UgMTMxMTUwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3RyeScKICAgIGNhc2UgMTMxNjYyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3R1bWJsaW5nJwogICAgY2FzZSAxMzIxNzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndHlwZScKICAgIGNhc2UgMTMyNjg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEzMzE5ODogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd1bmlvbicKICAgIGNhc2UgMTM0MjIyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3Vub3JkZXJlZCcKICAgIGNhc2UgMTM0NzM0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3VwZGF0aW5nJwogICAgY2FzZSAxMzYyNzA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzNjc4MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd2YWx1ZScKICAgIGNhc2UgMTM3Mjk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3ZhcmlhYmxlJwogICAgY2FzZSAxMzc4MDY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndmVyc2lvbicKICAgIGNhc2UgMTM5MzQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3doZXJlJwogICAgY2FzZSAxMzk4NTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnd2hpbGUnCiAgICBjYXNlIDE0MTM5MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd3aXRoJwogICAgY2FzZSAxNDM5NTA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAneycKICAgIGNhc2UgMTQ0OTc0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3t8JwogICAgICBwYXJzZV9KU09OQXBwZW5kRXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX09yRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFeHByU2ltcGxlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0V4cHJTaW1wbGUoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBsb29rYWhlYWQyVygyNzUpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGxvb2thaGVhZDJXKDE3MCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ25vZGUnIHwgJ3ZhbHVlJwogICAgICBicmVhazsKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgbG9va2FoZWFkMlcoMjYwKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgY2FzZSAxMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBsb29rYWhlYWQyVygxNDMpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTc5OTggICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcoJwogICAgIHx8IGxrID09IDE4MDMxICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnKCcKICAgICB8fCBsayA9PSAxODA4MSAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJygnCiAgICAgfHwgbGsgPT0gMTgxNDIgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICcoJwogICAgIHx8IGxrID09IDk5NDM5ICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbm9kZScKICAgICB8fCBsayA9PSA5OTQ4OSAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ25vZGUnCiAgICAgfHwgbGsgPT0gOTk1NTAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdub2RlJwogICAgIHx8IGxrID09IDk5OTUxICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gMTAwMDAxICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdub2RlcycKICAgICB8fCBsayA9PSAxMzY5MjcpICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICd2YWx1ZScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgxMCwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfT3JFeHByKCk7CiAgICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC0yKTsKICAgICAgICAgIGxrID0gLTEzOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDJBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0luc2VydEV4cHIoKTsKICAgICAgICAgICAgbWVtb2l6ZSgxMCwgZTBBLCAtMyk7CiAgICAgICAgICAgIGxrID0gLTEzOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAzQSkKICAgICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgdHJ5X0RlbGV0ZUV4cHIoKTsKICAgICAgICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC00KTsKICAgICAgICAgICAgICBsayA9IC0xMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAocDRBKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgIHRyeV9SZW5hbWVFeHByKCk7CiAgICAgICAgICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC01KTsKICAgICAgICAgICAgICAgIGxrID0gLTEzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXRjaCAocDVBKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgICAgdHJ5X1JlcGxhY2VFeHByKCk7CiAgICAgICAgICAgICAgICAgIG1lbW9pemUoMTAsIGUwQSwgLTYpOwogICAgICAgICAgICAgICAgICBsayA9IC0xMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNhdGNoIChwNkEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICAgICAgICAgIHRyeV9KU09ORGVsZXRlRXhwcigpOwogICAgICAgICAgICAgICAgICAgIG1lbW9pemUoMTAsIGUwQSwgLTgpOwogICAgICAgICAgICAgICAgICAgIGxrID0gLTEzOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNhdGNoIChwOEEpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICAgICAgICAgICAgdHJ5X0pTT05JbnNlcnRFeHByKCk7CiAgICAgICAgICAgICAgICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC05KTsKICAgICAgICAgICAgICAgICAgICAgIGxrID0gLTEzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjYXRjaCAocDlBKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgICAgICAgICAgdHJ5X0pTT05SZW5hbWVFeHByKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9pemUoMTAsIGUwQSwgLTEwKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGsgPSAtMTM7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAocDEwQSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5X0pTT05SZXBsYWNlRXhwcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9pemUoMTAsIGUwQSwgLTExKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBsayA9IC0xMzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAocDExQSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGxrID0gLTEyOwogICAgICAgICAgICAgICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC0xMik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE2MDAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJyQnCiAgICBjYXNlIDE2MTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnJCcKICAgICAgdHJ5X1F1YW50aWZpZWRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMzoKICAgICAgdHJ5X0luc2VydEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC00OgogICAgICB0cnlfRGVsZXRlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTU6CiAgICAgIHRyeV9SZW5hbWVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtNjoKICAgIGNhc2UgOTk1NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICdub2RlJwogICAgICB0cnlfUmVwbGFjZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1OTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnJCcKICAgICAgdHJ5X1RyYW5zZm9ybUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC04OgogICAgY2FzZSAzMTgzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgNDIwNzogICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgSW50ZWdlckxpdGVyYWwKICAgIGNhc2UgNDcxOTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgRGVjaW1hbExpdGVyYWwKICAgIGNhc2UgNTIzMTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgRG91YmxlTGl0ZXJhbAogICAgY2FzZSA1NzQzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBTdHJpbmdMaXRlcmFsCiAgICBjYXNlIDE1OTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICckJwogICAgY2FzZSAxNjQ5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnJCQnCiAgICBjYXNlIDE3MDA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICclJwogICAgY2FzZSAyODI3MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnPCcKICAgIGNhc2UgMjg3ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJzwhLS0nCiAgICBjYXNlIDMwODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICc8PycKICAgIGNhc2UgMzU0Mzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ1snCiAgICBjYXNlIDM2NDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhZnRlcicKICAgIGNhc2UgMzc0ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2FsbG93aW5nJwogICAgY2FzZSAzNzk5OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYW5jZXN0b3InCiAgICBjYXNlIDM4NTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSAzOTAyMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYW5kJwogICAgY2FzZSA0MDA0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYXBwZW5kJwogICAgY2FzZSA0MDU1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYXJyYXknCiAgICBjYXNlIDQxMDcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdhcycKICAgIGNhc2UgNDE1ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2FzY2VuZGluZycKICAgIGNhc2UgNDIwOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2F0JwogICAgY2FzZSA0MjYwNzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYXR0cmlidXRlJwogICAgY2FzZSA0MzExOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnYmFzZS11cmknCiAgICBjYXNlIDQzNjMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdiZWZvcmUnCiAgICBjYXNlIDQ0MTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgNDQ2NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2JyZWFrJwogICAgY2FzZSA0NTY3OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY2FzZScKICAgIGNhc2UgNDYxOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Nhc3QnCiAgICBjYXNlIDQ2NzAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjYXN0YWJsZScKICAgIGNhc2UgNDcyMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NhdGNoJwogICAgY2FzZSA0ODIzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY2hpbGQnCiAgICBjYXNlIDQ4NzUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjb2xsYXRpb24nCiAgICBjYXNlIDQ5Nzc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjb21tZW50JwogICAgY2FzZSA1MDI4NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnY29uc3RyYWludCcKICAgIGNhc2UgNTA3OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTIzMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvbnRleHQnCiAgICBjYXNlIDUyODQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjb250aW51ZScKICAgIGNhc2UgNTMzNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2NvcHknCiAgICBjYXNlIDUzODcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDU0MzgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdjb3VudCcKICAgIGNhc2UgNTQ4OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NTkxOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZGVjbGFyZScKICAgIGNhc2UgNTY0MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2RlZmF1bHQnCiAgICBjYXNlIDU2OTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdkZWxldGUnCiAgICBjYXNlIDU3NDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdkZXNjZW5kYW50JwogICAgY2FzZSA1Nzk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA1ODQ3OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZGVzY2VuZGluZycKICAgIGNhc2UgNjEwMzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2RpdicKICAgIGNhc2UgNjE1NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2RvY3VtZW50JwogICAgY2FzZSA2MjA2MzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgNjI1NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2VsZW1lbnQnCiAgICBjYXNlIDYzMDg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdlbHNlJwogICAgY2FzZSA2MzU5OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZW1wdHknCiAgICBjYXNlIDY0MTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgNjQ2MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2VuY29kaW5nJwogICAgY2FzZSA2NTEzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZW5kJwogICAgY2FzZSA2NjE1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZXEnCiAgICBjYXNlIDY2NjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdldmVyeScKICAgIGNhc2UgNjc2OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2V4Y2VwdCcKICAgIGNhc2UgNjgyMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2V4aXQnCiAgICBjYXNlIDY4NzE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdleHRlcm5hbCcKICAgIGNhc2UgNjkyMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ZhbHNlJwogICAgY2FzZSA2OTc0MzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZmlyc3QnCiAgICBjYXNlIDcwMjU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdmb2xsb3dpbmcnCiAgICBjYXNlIDcwNzY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgNzEyNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ZvcicKICAgIGNhc2UgNzI4MTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2Zyb20nCiAgICBjYXNlIDczMzI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdmdC1vcHRpb24nCiAgICBjYXNlIDc1Mzc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdmdW5jdGlvbicKICAgIGNhc2UgNzU4ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2dlJwogICAgY2FzZSA3NjkxMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnZ3JvdXAnCiAgICBjYXNlIDc3OTM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdndCcKICAgIGNhc2UgNzg0NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2lkaXYnCiAgICBjYXNlIDc4OTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdpZicKICAgIGNhc2UgNzk0NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ltcG9ydCcKICAgIGNhc2UgNzk5ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2luJwogICAgY2FzZSA4MDQ5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnaW5kZXgnCiAgICBjYXNlIDgyNTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdpbnNlcnQnCiAgICBjYXNlIDgzMDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdpbnN0YW5jZScKICAgIGNhc2UgODM1Njc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ludGVncml0eScKICAgIGNhc2UgODQwNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ludGVyc2VjdCcKICAgIGNhc2UgODQ1OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2ludG8nCiAgICBjYXNlIDg1MTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdpcycKICAgIGNhc2UgODU2MTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2l0ZW0nCiAgICBjYXNlIDg2MTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdqc29uJwogICAgY2FzZSA4NjYzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnanNvbi1pdGVtJwogICAgY2FzZSA4NzE1MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnanNvbmlxJwogICAgY2FzZSA4ODY4NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbGFzdCcKICAgIGNhc2UgODkxOTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2xheCcKICAgIGNhc2UgODk3MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2xlJwogICAgY2FzZSA5MDczNTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbGV0JwogICAgY2FzZSA5MTc1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbG9vcCcKICAgIGNhc2UgOTI3ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ2x0JwogICAgY2FzZSA5MzgwNzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbW9kJwogICAgY2FzZSA5NDMxOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbW9kaWZ5JwogICAgY2FzZSA5NDgzMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbW9kdWxlJwogICAgY2FzZSA5NTg1NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NjM2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDk2ODc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICduZScKICAgIGNhc2UgMTAwOTc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ251bGwnCiAgICBjYXNlIDEwMTQ4NzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdvYmplY3QnCiAgICBjYXNlIDEwMzUzNTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdvbmx5JwogICAgY2FzZSAxMDQwNDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnb3B0aW9uJwogICAgY2FzZSAxMDQ1NTk6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnb3InCiAgICBjYXNlIDEwNTA3MTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdvcmRlcicKICAgIGNhc2UgMTA1NTgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwNjA5NTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdvcmRlcmluZycKICAgIGNhc2UgMTA3NjMxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3BhcmVudCcKICAgIGNhc2UgMTEwNzAzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3ByZWNlZGluZycKICAgIGNhc2UgMTExMjE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTI3NTE6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTEzNzc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3JlbmFtZScKICAgIGNhc2UgMTE0Mjg3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDc5OTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdyZXR1cm4nCiAgICBjYXNlIDExNTMxMTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTgyMzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExNjg0NzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzYXRpc2ZpZXMnCiAgICBjYXNlIDExNzM1OTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzY2hlbWEnCiAgICBjYXNlIDExNzg3MTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTgzODM6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExODg5NTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzY29yZScKICAgIGNhc2UgMTE5NDA3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3NlbGVjdCcKICAgIGNhc2UgMTE5OTE5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3NlbGYnCiAgICBjYXNlIDEyMjQ3OTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdzbGlkaW5nJwogICAgY2FzZSAxMjI5OTE6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc29tZScKICAgIGNhc2UgMTIzNTAzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3N0YWJsZScKICAgIGNhc2UgMTI0MDE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3N0YXJ0JwogICAgY2FzZSAxMjU1NTE6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc3RyaWN0JwogICAgY2FzZSAxMjY1NzU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAxMjcwODc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnc3dpdGNoJwogICAgY2FzZSAxMjc1OTk6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndGV4dCcKICAgIGNhc2UgMTI5NjQ3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3RvJwogICAgY2FzZSAxMzAxNTk6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndHJlYXQnCiAgICBjYXNlIDEzMDY3MTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0cnVlJwogICAgY2FzZSAxMzExODM6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndHJ5JwogICAgY2FzZSAxMzE2OTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMjIwNzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd0eXBlJwogICAgY2FzZSAxMzI3MTk6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMzMjMxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3VuaW9uJwogICAgY2FzZSAxMzQyNTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzQ3Njc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNjMwMzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd2YWxpZGF0ZScKICAgIGNhc2UgMTM2ODE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3ZhbHVlJwogICAgY2FzZSAxMzczMjc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzgzOTogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd2ZXJzaW9uJwogICAgY2FzZSAxMzkzNzU6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnd2hlcmUnCiAgICBjYXNlIDEzOTg4NzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd3aGlsZScKICAgIGNhc2UgMTQxNDIzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ3dpdGgnCiAgICBjYXNlIDE0Mzk4MzogICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICd7JwogICAgY2FzZSAxNDUwMDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAne3wnCiAgICAgIHRyeV9KU09ORGVsZXRlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTk6CiAgICBjYXNlIDMyMzM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA0MjU3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA0NzY5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSA1MjgxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDU3OTM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgOTg4OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgTkNOYW1lXlRva2VuCiAgICBjYXNlIDE2MDMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICckJwogICAgY2FzZSAxNjU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnJCQnCiAgICBjYXNlIDE3MDU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICclJwogICAgY2FzZSAxODU5MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnKCMnCiAgICBjYXNlIDIxMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcrJwogICAgY2FzZSAyMjE3NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnLScKICAgIGNhc2UgMjQyMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJy8nCiAgICBjYXNlIDI0NzM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcvLycKICAgIGNhc2UgMjgzMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJzwnCiAgICBjYXNlIDI4ODMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICc8IS0tJwogICAgY2FzZSAzMDg4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnPD8nCiAgICBjYXNlIDM1NDg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdbJwogICAgY2FzZSAzNjUxMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYWZ0ZXInCiAgICBjYXNlIDM3NTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhbGxvd2luZycKICAgIGNhc2UgMzgwNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FuY2VzdG9yJwogICAgY2FzZSAzODU2MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzkwNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FuZCcKICAgIGNhc2UgNDAwOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FwcGVuZCcKICAgIGNhc2UgNDA2MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2FycmF5JwogICAgY2FzZSA0MTEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYXMnCiAgICBjYXNlIDQxNjMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhc2NlbmRpbmcnCiAgICBjYXNlIDQyMTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdhdCcKICAgIGNhc2UgNDI2NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDMxNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Jhc2UtdXJpJwogICAgY2FzZSA0MzY4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYmVmb3JlJwogICAgY2FzZSA0NDE5MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQ0NzA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdicmVhaycKICAgIGNhc2UgNDU3Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Nhc2UnCiAgICBjYXNlIDQ2MjQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjYXN0JwogICAgY2FzZSA0Njc1MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY2FzdGFibGUnCiAgICBjYXNlIDQ3MjY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjYXRjaCcKICAgIGNhc2UgNDgyODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NoaWxkJwogICAgY2FzZSA0ODgwMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29sbGF0aW9uJwogICAgY2FzZSA0OTgyNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29tbWVudCcKICAgIGNhc2UgNTAzMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDUwODQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUyMzg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjb250ZXh0JwogICAgY2FzZSA1Mjg5NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29udGludWUnCiAgICBjYXNlIDUzNDA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdjb3B5JwogICAgY2FzZSA1MzkyMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1NDQzMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnY291bnQnCiAgICBjYXNlIDU0OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTU5Njk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2RlY2xhcmUnCiAgICBjYXNlIDU2NDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkZWZhdWx0JwogICAgY2FzZSA1Njk5MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZGVsZXRlJwogICAgY2FzZSA1NzUwNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTgwMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNTg1Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDYxMDg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkaXYnCiAgICBjYXNlIDYxNjAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdkb2N1bWVudCcKICAgIGNhc2UgNjIxMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyNjI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdlbGVtZW50JwogICAgY2FzZSA2MzEzNzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZWxzZScKICAgIGNhc2UgNjM2NDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2VtcHR5JwogICAgY2FzZSA2NDE2MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDY0NjczOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdlbmNvZGluZycKICAgIGNhc2UgNjUxODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2VuZCcKICAgIGNhc2UgNjYyMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2VxJwogICAgY2FzZSA2NjcyMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZXZlcnknCiAgICBjYXNlIDY3NzQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdleGNlcHQnCiAgICBjYXNlIDY4MjU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdleGl0JwogICAgY2FzZSA2ODc2OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY5MjgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdmYWxzZScKICAgIGNhc2UgNjk3OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2ZpcnN0JwogICAgY2FzZSA3MDMwNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDgxNzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcxMzI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdmb3InCiAgICBjYXNlIDcyODY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdmcm9tJwogICAgY2FzZSA3MzM3NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZnQtb3B0aW9uJwogICAgY2FzZSA3NTQyNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZnVuY3Rpb24nCiAgICBjYXNlIDc1OTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdnZScKICAgIGNhc2UgNzY5NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2dyb3VwJwogICAgY2FzZSA3Nzk4NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnZ3QnCiAgICBjYXNlIDc4NDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpZGl2JwogICAgY2FzZSA3OTAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaWYnCiAgICBjYXNlIDc5NTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpbXBvcnQnCiAgICBjYXNlIDgwMDMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpbicKICAgIGNhc2UgODA1NDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2luZGV4JwogICAgY2FzZSA4MjU5MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW5zZXJ0JwogICAgY2FzZSA4MzEwNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaW5zdGFuY2UnCiAgICBjYXNlIDgzNjE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpbnRlZ3JpdHknCiAgICBjYXNlIDg0MTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpbnRlcnNlY3QnCiAgICBjYXNlIDg0NjQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpbnRvJwogICAgY2FzZSA4NTE1MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnaXMnCiAgICBjYXNlIDg1NjY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdpdGVtJwogICAgY2FzZSA4NjE3NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnanNvbicKICAgIGNhc2UgODY2ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2pzb24taXRlbScKICAgIGNhc2UgODcyMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2pzb25pcScKICAgIGNhc2UgODg3Mzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2xhc3QnCiAgICBjYXNlIDg5MjQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdsYXgnCiAgICBjYXNlIDg5NzYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdsZScKICAgIGNhc2UgOTA3ODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2xldCcKICAgIGNhc2UgOTE4MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2xvb3AnCiAgICBjYXNlIDkyODMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdsdCcKICAgIGNhc2UgOTM4NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ21vZCcKICAgIGNhc2UgOTQzNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ21vZGlmeScKICAgIGNhc2UgOTQ4ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ21vZHVsZScKICAgIGNhc2UgOTU5MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ25hbWVzcGFjZScKICAgIGNhc2UgOTY0MTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NjkyOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbmUnCiAgICBjYXNlIDEwMDUxMzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdub3QnCiAgICBjYXNlIDEwMTAyNTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdudWxsJwogICAgY2FzZSAxMDE1Mzc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnb2JqZWN0JwogICAgY2FzZSAxMDM1ODU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnb25seScKICAgIGNhc2UgMTA0MDk3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ29wdGlvbicKICAgIGNhc2UgMTA0NjA5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ29yJwogICAgY2FzZSAxMDUxMjE6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnb3JkZXInCiAgICBjYXNlIDEwNTYzMzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdvcmRlcmVkJwogICAgY2FzZSAxMDYxNDU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnb3JkZXJpbmcnCiAgICBjYXNlIDEwNzY4MTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdwYXJlbnQnCiAgICBjYXNlIDExMDc1MzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdwcmVjZWRpbmcnCiAgICBjYXNlIDExMTI2NTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMTEyODAxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMzgyNTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdyZW5hbWUnCiAgICBjYXNlIDExNDMzNzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdyZXBsYWNlJwogICAgY2FzZSAxMTQ4NDk6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncmV0dXJuJwogICAgY2FzZSAxMTUzNjE6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncmV0dXJuaW5nJwogICAgY2FzZSAxMTU4NzM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTY4OTc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2F0aXNmaWVzJwogICAgY2FzZSAxMTc0MDk6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2NoZW1hJwogICAgY2FzZSAxMTc5MjE6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE4NDMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAxMTg5NDU6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2NvcmUnCiAgICBjYXNlIDExOTQ1NzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzZWxlY3QnCiAgICBjYXNlIDExOTk2OTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzZWxmJwogICAgY2FzZSAxMjI1Mjk6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnc2xpZGluZycKICAgIGNhc2UgMTIzMDQxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3NvbWUnCiAgICBjYXNlIDEyMzU1MzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzdGFibGUnCiAgICBjYXNlIDEyNDA2NTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdzdGFydCcKICAgIGNhc2UgMTI1NjAxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3N0cmljdCcKICAgIGNhc2UgMTI2NjI1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMTI3MTM3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3N3aXRjaCcKICAgIGNhc2UgMTI3NjQ5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3RleHQnCiAgICBjYXNlIDEyOTY5NzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd0bycKICAgIGNhc2UgMTMwMjA5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3RyZWF0JwogICAgY2FzZSAxMzA3MjE6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndHJ1ZScKICAgIGNhc2UgMTMxMjMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3RyeScKICAgIGNhc2UgMTMxNzQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3R1bWJsaW5nJwogICAgY2FzZSAxMzIyNTc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndHlwZScKICAgIGNhc2UgMTMyNzY5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEzMzI4MTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd1bmlvbicKICAgIGNhc2UgMTM0MzA1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3Vub3JkZXJlZCcKICAgIGNhc2UgMTM0ODE3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3VwZGF0aW5nJwogICAgY2FzZSAxMzYzNTM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndmFsaWRhdGUnCiAgICBjYXNlIDEzNjg2NTogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd2YWx1ZScKICAgIGNhc2UgMTM3Mzc3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3ZhcmlhYmxlJwogICAgY2FzZSAxMzc4ODk6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAndmVyc2lvbicKICAgIGNhc2UgMTM5NDI1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3doZXJlJwogICAgY2FzZSAxMzk5Mzc6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnd2hpbGUnCiAgICBjYXNlIDE0MTQ3MzogICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICd3aXRoJwogICAgY2FzZSAxNDQwMzM6ICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAneycKICAgIGNhc2UgMTQ1MDU3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ3t8JwogICAgICB0cnlfSlNPTkluc2VydEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMDoKICAgIGNhc2UgMzI5NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgRVFOYW1lXlRva2VuCiAgICBjYXNlIDQzMTg6ICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIEludGVnZXJMaXRlcmFsCiAgICBjYXNlIDQ4MzA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIERlY2ltYWxMaXRlcmFsCiAgICBjYXNlIDUzNDI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIERvdWJsZUxpdGVyYWwKICAgIGNhc2UgNTg1NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgU3RyaW5nTGl0ZXJhbAogICAgY2FzZSAxNjA5NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnJCcKICAgIGNhc2UgMTY2MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJyQkJwogICAgY2FzZSAxNzExODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnJScKICAgIGNhc2UgMjgzODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJzwnCiAgICBjYXNlIDI4ODk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICc8IS0tJwogICAgY2FzZSAzMDk0MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnPD8nCiAgICBjYXNlIDM1NTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdbJwogICAgY2FzZSAzNjU3NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYWZ0ZXInCiAgICBjYXNlIDM3NTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdhbGxvd2luZycKICAgIGNhc2UgMzgxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FuY2VzdG9yJwogICAgY2FzZSAzODYyMjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzkxMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FuZCcKICAgIGNhc2UgNDAxNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FwcGVuZCcKICAgIGNhc2UgNDA2NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2FycmF5JwogICAgY2FzZSA0MTE4MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYXMnCiAgICBjYXNlIDQxNjk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdhc2NlbmRpbmcnCiAgICBjYXNlIDQyMjA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdhdCcKICAgIGNhc2UgNDI3MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDMyMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Jhc2UtdXJpJwogICAgY2FzZSA0Mzc0MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYmVmb3JlJwogICAgY2FzZSA0NDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQ0NzY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdicmVhaycKICAgIGNhc2UgNDU3OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Nhc2UnCiAgICBjYXNlIDQ2MzAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjYXN0JwogICAgY2FzZSA0NjgxNDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ3MzI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjYXRjaCcKICAgIGNhc2UgNDgzNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2NoaWxkJwogICAgY2FzZSA0ODg2MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29sbGF0aW9uJwogICAgY2FzZSA0OTg4NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29tbWVudCcKICAgIGNhc2UgNTAzOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDUwOTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUyNDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjb250ZXh0JwogICAgY2FzZSA1Mjk1ODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29udGludWUnCiAgICBjYXNlIDUzNDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdjb3B5JwogICAgY2FzZSA1Mzk4MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1NDQ5NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnY291bnQnCiAgICBjYXNlIDU1MDA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgNTYwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2RlY2xhcmUnCiAgICBjYXNlIDU2NTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkZWZhdWx0JwogICAgY2FzZSA1NzA1NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZGVsZXRlJwogICAgY2FzZSA1NzU2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTgwNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNTg1OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDYxMTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkaXYnCiAgICBjYXNlIDYxNjYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdkb2N1bWVudCcKICAgIGNhc2UgNjIxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYyNjg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdlbGVtZW50JwogICAgY2FzZSA2MzE5ODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZWxzZScKICAgIGNhc2UgNjM3MTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2VtcHR5JwogICAgY2FzZSA2NDIyMjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDY0NzM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdlbmNvZGluZycKICAgIGNhc2UgNjUyNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2VuZCcKICAgIGNhc2UgNjYyNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2VxJwogICAgY2FzZSA2Njc4MjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZXZlcnknCiAgICBjYXNlIDY3ODA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdleGNlcHQnCiAgICBjYXNlIDY4MzE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdleGl0JwogICAgY2FzZSA2ODgzMDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY5MzQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdmYWxzZScKICAgIGNhc2UgNjk4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2ZpcnN0JwogICAgY2FzZSA3MDM2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZm9sbG93aW5nJwogICAgY2FzZSA3MDg3ODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDcxMzkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdmb3InCiAgICBjYXNlIDcyOTI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdmcm9tJwogICAgY2FzZSA3MzQzODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3NTQ4NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZnVuY3Rpb24nCiAgICBjYXNlIDc1OTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdnZScKICAgIGNhc2UgNzcwMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2dyb3VwJwogICAgY2FzZSA3ODA0NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnZ3QnCiAgICBjYXNlIDc4NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpZGl2JwogICAgY2FzZSA3OTA3MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaWYnCiAgICBjYXNlIDc5NTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbXBvcnQnCiAgICBjYXNlIDgwMDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbicKICAgIGNhc2UgODA2MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2luZGV4JwogICAgY2FzZSA4MjY1NDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaW5zZXJ0JwogICAgY2FzZSA4MzE2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaW5zdGFuY2UnCiAgICBjYXNlIDgzNjc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbnRlZ3JpdHknCiAgICBjYXNlIDg0MTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbnRlcnNlY3QnCiAgICBjYXNlIDg0NzAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpbnRvJwogICAgY2FzZSA4NTIxNDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnaXMnCiAgICBjYXNlIDg1NzI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdpdGVtJwogICAgY2FzZSA4NjIzODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnanNvbicKICAgIGNhc2UgODY3NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2pzb24taXRlbScKICAgIGNhc2UgODcyNjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2pzb25pcScKICAgIGNhc2UgODg3OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2xhc3QnCiAgICBjYXNlIDg5MzEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdsYXgnCiAgICBjYXNlIDg5ODIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdsZScKICAgIGNhc2UgOTA4NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2xldCcKICAgIGNhc2UgOTE4NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ2xvb3AnCiAgICBjYXNlIDkyODk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdsdCcKICAgIGNhc2UgOTM5MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ21vZCcKICAgIGNhc2UgOTQ0MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ21vZGlmeScKICAgIGNhc2UgOTQ5NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ21vZHVsZScKICAgIGNhc2UgOTU5NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ25hbWVzcGFjZScKICAgIGNhc2UgOTY0Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5Njk5MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnbmUnCiAgICBjYXNlIDEwMDA2MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdub2RlcycKICAgIGNhc2UgMTAxMDg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ251bGwnCiAgICBjYXNlIDEwMTU5ODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvYmplY3QnCiAgICBjYXNlIDEwMzY0NjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvbmx5JwogICAgY2FzZSAxMDQxNTg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnb3B0aW9uJwogICAgY2FzZSAxMDQ2NzA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnb3InCiAgICBjYXNlIDEwNTE4MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvcmRlcicKICAgIGNhc2UgMTA1Njk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwNjIwNjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdvcmRlcmluZycKICAgIGNhc2UgMTA3NzQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3BhcmVudCcKICAgIGNhc2UgMTEwODE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3ByZWNlZGluZycKICAgIGNhc2UgMTExMzI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTI4NjI6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTEzODg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3JlbmFtZScKICAgIGNhc2UgMTE0Mzk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDkxMDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdyZXR1cm4nCiAgICBjYXNlIDExNTQyMjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTkzNDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExNjk1ODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzYXRpc2ZpZXMnCiAgICBjYXNlIDExNzQ3MDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzY2hlbWEnCiAgICBjYXNlIDExNzk4MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTg0OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExOTAwNjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzY29yZScKICAgIGNhc2UgMTE5NTE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3NlbGVjdCcKICAgIGNhc2UgMTIwMDMwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3NlbGYnCiAgICBjYXNlIDEyMjU5MDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdzbGlkaW5nJwogICAgY2FzZSAxMjMxMDI6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc29tZScKICAgIGNhc2UgMTIzNjE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3N0YWJsZScKICAgIGNhc2UgMTI0MTI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3N0YXJ0JwogICAgY2FzZSAxMjU2NjI6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc3RyaWN0JwogICAgY2FzZSAxMjY2ODY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAxMjcxOTg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnc3dpdGNoJwogICAgY2FzZSAxMjc3MTA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndGV4dCcKICAgIGNhc2UgMTI5NzU4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3RvJwogICAgY2FzZSAxMzAyNzA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHJlYXQnCiAgICBjYXNlIDEzMDc4MjogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd0cnVlJwogICAgY2FzZSAxMzEyOTQ6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHJ5JwogICAgY2FzZSAxMzE4MDY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMjMxODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd0eXBlJwogICAgY2FzZSAxMzI4MzA6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMzMzQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3VuaW9uJwogICAgY2FzZSAxMzQzNjY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzQ4Nzg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNjQxNDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd2YWxpZGF0ZScKICAgIGNhc2UgMTM2OTI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3ZhbHVlJwogICAgY2FzZSAxMzc0Mzg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzk1MDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd2ZXJzaW9uJwogICAgY2FzZSAxMzk0ODY6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnd2hlcmUnCiAgICBjYXNlIDEzOTk5ODogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd3aGlsZScKICAgIGNhc2UgMTQxNTM0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ3dpdGgnCiAgICBjYXNlIDE0NDA5NDogICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd7JwogICAgY2FzZSAxNDUxMTg6ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAne3wnCiAgICAgIHRyeV9KU09OUmVuYW1lRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTExOgogICAgICB0cnlfSlNPTlJlcGxhY2VFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTI6CiAgICBjYXNlIDMxNTA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA0MTc0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA0Njg2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSA1MTk4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDU3MTA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgMTU5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJyQnCiAgICBjYXNlIDE2NDYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICckJCcKICAgIGNhc2UgMTY5NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJyUnCiAgICBjYXNlIDE4NTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcoIycKICAgIGNhc2UgMjEwNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJysnCiAgICBjYXNlIDIyMDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICctJwogICAgY2FzZSAyNDE0MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnLycKICAgIGNhc2UgMjQ2NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJy8vJwogICAgY2FzZSAyODIzODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnPCcKICAgIGNhc2UgMjg3NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJzwhLS0nCiAgICBjYXNlIDMwNzk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICc8PycKICAgIGNhc2UgMzU0MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ1snCiAgICBjYXNlIDM2NDMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdhZnRlcicKICAgIGNhc2UgMzc0NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2FsbG93aW5nJwogICAgY2FzZSAzNzk2NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYW5jZXN0b3InCiAgICBjYXNlIDM4NDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSAzODk5MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYW5kJwogICAgY2FzZSA0MDAxNDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYXBwZW5kJwogICAgY2FzZSA0MDUyNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYXJyYXknCiAgICBjYXNlIDQxMDM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdhcycKICAgIGNhc2UgNDE1NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2FzY2VuZGluZycKICAgIGNhc2UgNDIwNjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2F0JwogICAgY2FzZSA0MjU3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYXR0cmlidXRlJwogICAgY2FzZSA0MzA4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnYmFzZS11cmknCiAgICBjYXNlIDQzNTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdiZWZvcmUnCiAgICBjYXNlIDQ0MTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgNDQ2MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2JyZWFrJwogICAgY2FzZSA0NTY0NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY2FzZScKICAgIGNhc2UgNDYxNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2Nhc3QnCiAgICBjYXNlIDQ2NjcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjYXN0YWJsZScKICAgIGNhc2UgNDcxODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2NhdGNoJwogICAgY2FzZSA0ODIwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY2hpbGQnCiAgICBjYXNlIDQ4NzE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb2xsYXRpb24nCiAgICBjYXNlIDQ5NzQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb21tZW50JwogICAgY2FzZSA1MDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnY29uc3RyYWludCcKICAgIGNhc2UgNTA3NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTIzMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2NvbnRleHQnCiAgICBjYXNlIDUyODE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb250aW51ZScKICAgIGNhc2UgNTMzMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2NvcHknCiAgICBjYXNlIDUzODM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDU0MzUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdjb3VudCcKICAgIGNhc2UgNTQ4NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NTg4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZGVjbGFyZScKICAgIGNhc2UgNTYzOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2RlZmF1bHQnCiAgICBjYXNlIDU2OTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdkZWxldGUnCiAgICBjYXNlIDU3NDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdkZXNjZW5kYW50JwogICAgY2FzZSA1NzkzNDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA1ODQ0NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZGVzY2VuZGluZycKICAgIGNhc2UgNjEwMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2RpdicKICAgIGNhc2UgNjE1MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2RvY3VtZW50JwogICAgY2FzZSA2MjAzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgNjI1NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2VsZW1lbnQnCiAgICBjYXNlIDYzMDU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdlbHNlJwogICAgY2FzZSA2MzU2NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZW1wdHknCiAgICBjYXNlIDY0MDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgNjQ1OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2VuY29kaW5nJwogICAgY2FzZSA2NTEwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZW5kJwogICAgY2FzZSA2NjEyNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZXEnCiAgICBjYXNlIDY2NjM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdldmVyeScKICAgIGNhc2UgNjc2NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2V4Y2VwdCcKICAgIGNhc2UgNjgxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2V4aXQnCiAgICBjYXNlIDY4Njg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdleHRlcm5hbCcKICAgIGNhc2UgNjkxOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ZhbHNlJwogICAgY2FzZSA2OTcxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZmlyc3QnCiAgICBjYXNlIDcwMjIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmb2xsb3dpbmcnCiAgICBjYXNlIDcwNzM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgNzEyNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ZvcicKICAgIGNhc2UgNzI3ODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2Zyb20nCiAgICBjYXNlIDczMjk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmdC1vcHRpb24nCiAgICBjYXNlIDc1MzQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdmdW5jdGlvbicKICAgIGNhc2UgNzU4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2dlJwogICAgY2FzZSA3Njg3ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnZ3JvdXAnCiAgICBjYXNlIDc3OTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdndCcKICAgIGNhc2UgNzg0MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2lkaXYnCiAgICBjYXNlIDc4OTI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpZicKICAgIGNhc2UgNzk0Mzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ltcG9ydCcKICAgIGNhc2UgNzk5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2luJwogICAgY2FzZSA4MDQ2MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnaW5kZXgnCiAgICBjYXNlIDgyNTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbnNlcnQnCiAgICBjYXNlIDgzMDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpbnN0YW5jZScKICAgIGNhc2UgODM1MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ludGVncml0eScKICAgIGNhc2UgODQwNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ludGVyc2VjdCcKICAgIGNhc2UgODQ1NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2ludG8nCiAgICBjYXNlIDg1MDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdpcycKICAgIGNhc2UgODU1ODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2l0ZW0nCiAgICBjYXNlIDg2MDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdqc29uJwogICAgY2FzZSA4NjYwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnanNvbi1pdGVtJwogICAgY2FzZSA4NzExODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnanNvbmlxJwogICAgY2FzZSA4ODY1NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbGFzdCcKICAgIGNhc2UgODkxNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2xheCcKICAgIGNhc2UgODk2Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2xlJwogICAgY2FzZSA5MDcwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbGV0JwogICAgY2FzZSA5MTcyNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbG9vcCcKICAgIGNhc2UgOTI3NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ2x0JwogICAgY2FzZSA5Mzc3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbW9kJwogICAgY2FzZSA5NDI4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbW9kaWZ5JwogICAgY2FzZSA5NDc5ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbW9kdWxlJwogICAgY2FzZSA5NTgyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NjMzNDogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDk2ODQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICduZScKICAgIGNhc2UgOTk0MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ25vZGUnCiAgICBjYXNlIDk5OTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdub2RlcycKICAgIGNhc2UgMTAwNDMwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ25vdCcKICAgIGNhc2UgMTAwOTQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ251bGwnCiAgICBjYXNlIDEwMTQ1NDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdvYmplY3QnCiAgICBjYXNlIDEwMzUwMjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdvbmx5JwogICAgY2FzZSAxMDQwMTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnb3B0aW9uJwogICAgY2FzZSAxMDQ1MjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnb3InCiAgICBjYXNlIDEwNTAzODogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdvcmRlcicKICAgIGNhc2UgMTA1NTUwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ29yZGVyZWQnCiAgICBjYXNlIDEwNjA2MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdvcmRlcmluZycKICAgIGNhc2UgMTA3NTk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3BhcmVudCcKICAgIGNhc2UgMTEwNjcwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3ByZWNlZGluZycKICAgIGNhc2UgMTExMTgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAxMTI3MTg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTEzNzQyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3JlbmFtZScKICAgIGNhc2UgMTE0MjU0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3JlcGxhY2UnCiAgICBjYXNlIDExNDc2NjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdyZXR1cm4nCiAgICBjYXNlIDExNTI3ODogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdyZXR1cm5pbmcnCiAgICBjYXNlIDExNTc5MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExNjgxNDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzYXRpc2ZpZXMnCiAgICBjYXNlIDExNzMyNjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzY2hlbWEnCiAgICBjYXNlIDExNzgzODogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTgzNTA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExODg2MjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzY29yZScKICAgIGNhc2UgMTE5Mzc0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3NlbGVjdCcKICAgIGNhc2UgMTE5ODg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3NlbGYnCiAgICBjYXNlIDEyMjQ0NjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdzbGlkaW5nJwogICAgY2FzZSAxMjI5NTg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc29tZScKICAgIGNhc2UgMTIzNDcwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3N0YWJsZScKICAgIGNhc2UgMTIzOTgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3N0YXJ0JwogICAgY2FzZSAxMjU1MTg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc3RyaWN0JwogICAgY2FzZSAxMjY1NDI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAxMjcwNTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnc3dpdGNoJwogICAgY2FzZSAxMjc1NjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndGV4dCcKICAgIGNhc2UgMTI5NjE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3RvJwogICAgY2FzZSAxMzAxMjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndHJlYXQnCiAgICBjYXNlIDEzMDYzODogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd0cnVlJwogICAgY2FzZSAxMzExNTA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndHJ5JwogICAgY2FzZSAxMzE2NjI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndHVtYmxpbmcnCiAgICBjYXNlIDEzMjE3NDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd0eXBlJwogICAgY2FzZSAxMzI2ODY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMzMTk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3VuaW9uJwogICAgY2FzZSAxMzQyMjI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzQ3MzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzNjI3MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd2YWxpZGF0ZScKICAgIGNhc2UgMTM2NzgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3ZhbHVlJwogICAgY2FzZSAxMzcyOTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNzgwNjogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd2ZXJzaW9uJwogICAgY2FzZSAxMzkzNDI6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnd2hlcmUnCiAgICBjYXNlIDEzOTg1NDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd3aGlsZScKICAgIGNhc2UgMTQxMzkwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJ3dpdGgnCiAgICBjYXNlIDE0Mzk1MDogICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd7JwogICAgY2FzZSAxNDQ5NzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAne3wnCiAgICAgIHRyeV9KU09OQXBwZW5kRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTEzOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9PckV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0pTT05EZWxldGVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSlNPTkRlbGV0ZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgxMTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgbG9va2FoZWFkMlcoMjYwKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDE4MDg4KSAgICAgICAgICAgICAgICAvLyAnanNvbicgJygnCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTEsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgIG1lbW9pemUoMTEsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIGlmIChsayA9PSAtMQogICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICB8fCBsayA9PSAxMDEwMzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdudWxsJwogICAgIHx8IGxrID09IDEwMTU0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29iamVjdCcKICAgICB8fCBsayA9PSAxMDM1OTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvbmx5JwogICAgIHx8IGxrID09IDEwNDEwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDQ2MTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcicKICAgICB8fCBsayA9PSAxMDUxMjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcicKICAgICB8fCBsayA9PSAxMDU2NDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwNjE1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyaW5nJwogICAgIHx8IGxrID09IDEwNzY4OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMTA3NjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTExMjcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEyODA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTM4MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTE0MzQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTQ4NTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE1MzY4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExNTg4MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTY5MDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE3NDE2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNzkyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE4NDQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE4OTUyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE5NDY0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZWN0JwogICAgIHx8IGxrID09IDExOTk3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGYnCiAgICAgfHwgbGsgPT0gMTIyNTM2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2xpZGluZycKICAgICB8fCBsayA9PSAxMjMwNDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzb21lJwogICAgIHx8IGxrID09IDEyMzU2MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjQwNzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFydCcKICAgICB8fCBsayA9PSAxMjU2MDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJpY3QnCiAgICAgfHwgbGsgPT0gMTI2NjMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RydWN0dXJlZC1pdGVtJwogICAgIHx8IGxrID09IDEyNzE0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N3aXRjaCcKICAgICB8fCBsayA9PSAxMjc2NTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0ZXh0JwogICAgIHx8IGxrID09IDEyOTcwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RvJwogICAgIHx8IGxrID09IDEzMDIxNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyZWF0JwogICAgIHx8IGxrID09IDEzMDcyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RydWUnCiAgICAgfHwgbGsgPT0gMTMxMjQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHJ5JwogICAgIHx8IGxrID09IDEzMTc1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R1bWJsaW5nJwogICAgIHx8IGxrID09IDEzMjI2NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTMyNzc2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMzMyODggICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bmlvbicKICAgICB8fCBsayA9PSAxMzQzMTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTM0ODI0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTM2MzYwICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTM2ODcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM3Mzg0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM3ODk2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzk0MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk5NDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGlsZScKICAgICB8fCBsayA9PSAxNDE0ODAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aXRoJwogICAgIHx8IGxrID09IDE0NDA0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3snCiAgICAgfHwgbGsgPT0gMTQ1MDY0KSAgICAgICAgICAgICAgIC8vICdqc29uJyAne3wnCiAgICB7CiAgICAgIHNoaWZ0KDE2OCk7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgfQogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfUG9zdGZpeEV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTkRlbGV0ZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTkRlbGV0ZUV4cHIoKQogIHsKICAgIHNoaWZ0VCgxMTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBsb29rYWhlYWQyVygyNjApOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTgwODgpICAgICAgICAgICAgICAgIC8vICdqc29uJyAnKCcKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgxMSwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoMTY4KTsgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICAgICAgbWVtb2l6ZSgxMSwgZTBBLCAtMSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMTEsIGUwQSwgLTIpOwogICAgICAgIH0KICAgICAgICBsayA9IC0yOwogICAgICB9CiAgICB9CiAgICBpZiAobGsgPT0gLTEKICAgICB8fCBsayA9PSAzMjQwICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDQyNjQgICAgICAgICAgICAgICAgICAvLyAnanNvbicgSW50ZWdlckxpdGVyYWwKICAgICB8fCBsayA9PSA0Nzc2ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERlY2ltYWxMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTI4OCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBEb3VibGVMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTgwMCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBTdHJpbmdMaXRlcmFsCiAgICAgfHwgbGsgPT0gMTYwNDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnJCcKICAgICB8fCBsayA9PSAxNjU1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJCcKICAgICB8fCBsayA9PSAxNzA2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICclJwogICAgIHx8IGxrID09IDI4MzI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzwnCiAgICAgfHwgbGsgPT0gMjg4NDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCEtLScKICAgICB8fCBsayA9PSAzMDg4OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8PycKICAgICB8fCBsayA9PSAzNTQ5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdbJwogICAgIHx8IGxrID09IDM2NTIwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FmdGVyJwogICAgIHx8IGxrID09IDM3NTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM4MDU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yJwogICAgIHx8IGxrID09IDM4NTY4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzkwODAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5kJwogICAgIHx8IGxrID09IDQwMTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FwcGVuZCcKICAgICB8fCBsayA9PSA0MDYxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcnJheScKICAgICB8fCBsayA9PSA0MTEyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcycKICAgICB8fCBsayA9PSA0MTY0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDIxNTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXQnCiAgICAgfHwgbGsgPT0gNDI2NjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQzMTc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Jhc2UtdXJpJwogICAgIHx8IGxrID09IDQzNjg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0NDIwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdib3VuZGFyeS1zcGFjZScKICAgICB8fCBsayA9PSA0NDcxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdicmVhaycKICAgICB8fCBsayA9PSA0NTczNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXNlJwogICAgIHx8IGxrID09IDQ2MjQ4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDY3NjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDcyNzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDgyOTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDg4MDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ5ODMyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNTAzNDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA1MDg1NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTIzOTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MjkwNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250aW51ZScKICAgICB8fCBsayA9PSA1MzQxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3B5JwogICAgIHx8IGxrID09IDUzOTI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1NDQ0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3VudCcKICAgICB8fCBsayA9PSA1NDk1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNpbWFsLWZvcm1hdCcKICAgICB8fCBsayA9PSA1NTk3NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU2NDg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTcwMDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU3NTEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTgwMjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU4NTM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjEwOTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGl2JwogICAgIHx8IGxrID09IDYxNjA4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50JwogICAgIHx8IGxrID09IDYyMTIwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjI2MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2MzE0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbHNlJwogICAgIHx8IGxrID09IDYzNjU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5JwogICAgIHx8IGxrID09IDY0MTY4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5LXNlcXVlbmNlJwogICAgIHx8IGxrID09IDY0NjgwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuY29kaW5nJwogICAgIHx8IGxrID09IDY1MTkyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuZCcKICAgICB8fCBsayA9PSA2NjIxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlcScKICAgICB8fCBsayA9PSA2NjcyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdldmVyeScKICAgICB8fCBsayA9PSA2Nzc1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjgyNjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXhpdCcKICAgICB8fCBsayA9PSA2ODc3NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2OTI4OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmYWxzZScKICAgICB8fCBsayA9PSA2OTgwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmaXJzdCcKICAgICB8fCBsayA9PSA3MDMxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNzA4MjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzEzMzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9yJwogICAgIHx8IGxrID09IDcyODcyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Zyb20nCiAgICAgfHwgbGsgPT0gNzMzODQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnQtb3B0aW9uJwogICAgIHx8IGxrID09IDc1NDMyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Z1bmN0aW9uJwogICAgIHx8IGxrID09IDc1OTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2dlJwogICAgIHx8IGxrID09IDc2OTY4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3OTkyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2d0JwogICAgIHx8IGxrID09IDc4NTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzkwMTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWYnCiAgICAgfHwgbGsgPT0gNzk1MjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW1wb3J0JwogICAgIHx8IGxrID09IDgwMDQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luJwogICAgIHx8IGxrID09IDgwNTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luZGV4JwogICAgIHx8IGxrID09IDgyNjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc2VydCcKICAgICB8fCBsayA9PSA4MzExMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzYyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlZ3JpdHknCiAgICAgfHwgbGsgPT0gODQxMzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0NjQ4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludG8nCiAgICAgfHwgbGsgPT0gODUxNjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXMnCiAgICAgfHwgbGsgPT0gODU2NzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXRlbScKICAgICB8fCBsayA9PSA4NjE4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uJwogICAgIHx8IGxrID09IDg2Njk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24taXRlbScKICAgICB8fCBsayA9PSA4NzIwOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uaXEnCiAgICAgfHwgbGsgPT0gODg3NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGFzdCcKICAgICB8fCBsayA9PSA4OTI1NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXgnCiAgICAgfHwgbGsgPT0gODk3NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGUnCiAgICAgfHwgbGsgPT0gOTA3OTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGV0JwogICAgIHx8IGxrID09IDkxODE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTI4NDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbHQnCiAgICAgfHwgbGsgPT0gOTM4NjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kJwogICAgIHx8IGxrID09IDk0Mzc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDg4OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTU5MTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk2NDI0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ25hbWVzcGFjZS1ub2RlJwogICAgIHx8IGxrID09IDk2OTM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ25lJwogICAgIHx8IGxrID09IDk5NDk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ25vZGUnCiAgICAgfHwgbGsgPT0gMTAwMDA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gMTAxMDMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbnVsbCcKICAgICB8fCBsayA9PSAxMDE1NDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvYmplY3QnCiAgICAgfHwgbGsgPT0gMTAzNTkyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb25seScKICAgICB8fCBsayA9PSAxMDQxMDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcHRpb24nCiAgICAgfHwgbGsgPT0gMTA0NjE2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3InCiAgICAgfHwgbGsgPT0gMTA1MTI4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1NjQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJlZCcKICAgICB8fCBsayA9PSAxMDYxNTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmluZycKICAgICB8fCBsayA9PSAxMDc2ODggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwYXJlbnQnCiAgICAgfHwgbGsgPT0gMTEwNzYwICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nJwogICAgIHx8IGxrID09IDExMTI3MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgIHx8IGxrID09IDExMjgwOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gMTEzODMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmVuYW1lJwogICAgIHx8IGxrID09IDExNDM0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JlcGxhY2UnCiAgICAgfHwgbGsgPT0gMTE0ODU2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNTM2OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldHVybmluZycKICAgICB8fCBsayA9PSAxMTU4ODAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXZhbGlkYXRpb24nCiAgICAgfHwgbGsgPT0gMTE2OTA0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNzQxNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYScKICAgICB8fCBsayA9PSAxMTc5MjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgIHx8IGxrID09IDExODQ0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1lbGVtZW50JwogICAgIHx8IGxrID09IDExODk1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3Njb3JlJwogICAgIHx8IGxrID09IDExOTQ2NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGVjdCcKICAgICB8fCBsayA9PSAxMTk5NzYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzZWxmJwogICAgIHx8IGxrID09IDEyMjUzNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIzMDQ4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc29tZScKICAgICB8fCBsayA9PSAxMjM1NjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTI0MDcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI1NjA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyNjYzMiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjcxNDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI3NjU2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndGV4dCcKICAgICB8fCBsayA9PSAxMjk3MDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0bycKICAgICB8fCBsayA9PSAxMzAyMTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzA3MjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cnVlJwogICAgIHx8IGxrID09IDEzMTI0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyeScKICAgICB8fCBsayA9PSAxMzE3NTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0dW1ibGluZycKICAgICB8fCBsayA9PSAxMzIyNjQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0eXBlJwogICAgIHx8IGxrID09IDEzMjc3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGVzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTMzMjg4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTM0MzEyICAgICAgICAgICAgICAgIC8vICdqc29uJyAndW5vcmRlcmVkJwogICAgIHx8IGxrID09IDEzNDgyNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3VwZGF0aW5nJwogICAgIHx8IGxrID09IDEzNjM2MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhbGlkYXRlJwogICAgIHx8IGxrID09IDEzNjg3MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhbHVlJwogICAgIHx8IGxrID09IDEzNzM4NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhcmlhYmxlJwogICAgIHx8IGxrID09IDEzNzg5NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZlcnNpb24nCiAgICAgfHwgbGsgPT0gMTM5NDMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5OTQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTQxNDgwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDQwNDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd7JwogICAgIHx8IGxrID09IDE0NTA2NCkgICAgICAgICAgICAgICAvLyAnanNvbicgJ3t8JwogICAgewogICAgICBzaGlmdFQoMTY4KTsgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIH0KICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9Qb3N0Zml4RXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSlNPTkluc2VydEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OSW5zZXJ0RXhwciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGxvb2thaGVhZDJXKDI2Nyk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayAhPSA5ODg5KSAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgTkNOYW1lXlRva2VuCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTIsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDE2MSk7ICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICAgIHsKICAgICAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgbGsgPSBsMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsayA9PSAxODA4OCkgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgICAgICAgewogICAgICAgICAgICBsayA9IG1lbW9pemVkKDEzLCBlMCk7CiAgICAgICAgICAgIGlmIChsayA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdmFyIGIwQiA9IGIwOyB2YXIgZTBCID0gZTA7IHZhciBsMUIgPSBsMTsKICAgICAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgICAgIHZhciBiMkIgPSBiMjsgdmFyIGUyQiA9IGUyOwogICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgICAgICBtZW1vaXplKDEzLCBlMEIsIC0xKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBiMCA9IGIwQjsgZTAgPSBlMEI7IGwxID0gbDFCOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQjt9IGVsc2UgewogICAgICAgICAgICAgICAgYjEgPSBiMUI7IGUxID0gZTFCOyBsMiA9IGwyQjsgaWYgKGwyID09IDApIHtlbmQgPSBlMUI7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIyID0gYjJCOyBlMiA9IGUyQjsgZW5kID0gZTJCOyB9fQogICAgICAgICAgICAgICAgbWVtb2l6ZSgxMywgZTBCLCAtMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChsayA9PSAtMQogICAgICAgICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgICAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgICAgICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICAgICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICAgICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICAgICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgICAgICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgICAgICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgICAgICAgfHwgbGsgPT0gMTg2MDAgICAgICAgICAgIC8vICdqc29uJyAnKCMnCiAgICAgICAgICAgfHwgbGsgPT0gMjExNjAgICAgICAgICAgIC8vICdqc29uJyAnKycKICAgICAgICAgICB8fCBsayA9PSAyMjE4NCAgICAgICAgICAgLy8gJ2pzb24nICctJwogICAgICAgICAgIHx8IGxrID09IDI0MjMyICAgICAgICAgICAvLyAnanNvbicgJy8nCiAgICAgICAgICAgfHwgbGsgPT0gMjQ3NDQgICAgICAgICAgIC8vICdqc29uJyAnLy8nCiAgICAgICAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICAgICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgICAgICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgICAgICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgICAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgICAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgICAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgICAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgICAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgICAgICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgICAgICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgICAgICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICAgICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICAgICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgICAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgICAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgICAgICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgICAgICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgICAgICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgICAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICAgICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICAgICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICAgICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICAgICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICAgICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgICAgICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICAgICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgICAgICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgICAgICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgICAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgICAgICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgICAgICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgICAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICAgICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgICAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICAgICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgICAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICAgICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgICAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgICAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICAgICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgICAgICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgICAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgICAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgICAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgICAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgICAgICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgICAgICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgICAgICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICAgICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgICAgICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgICAgICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgICAgICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgICAgICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICAgICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICAgICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgICAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICAgICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgICAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgICAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgICAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgICAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICAgICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICAgICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgICAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgICAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgICAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgICAgICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgICAgICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICAgICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgICAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICAgICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICAgICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgICAgICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgICAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgICAgICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICAgICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgICAgICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICAgICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICAgICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgICAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICAgICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICAgICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgICAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgICAgICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICAgICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgICAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgICAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgICAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICAgICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICAgICAgICB8fCBsayA9PSAxMDA1MjAgICAgICAgICAgLy8gJ2pzb24nICdub3QnCiAgICAgICAgICAgfHwgbGsgPT0gMTAxMDMyICAgICAgICAgIC8vICdqc29uJyAnbnVsbCcKICAgICAgICAgICB8fCBsayA9PSAxMDE1NDQgICAgICAgICAgLy8gJ2pzb24nICdvYmplY3QnCiAgICAgICAgICAgfHwgbGsgPT0gMTAzNTkyICAgICAgICAgIC8vICdqc29uJyAnb25seScKICAgICAgICAgICB8fCBsayA9PSAxMDQxMDQgICAgICAgICAgLy8gJ2pzb24nICdvcHRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTA0NjE2ICAgICAgICAgIC8vICdqc29uJyAnb3InCiAgICAgICAgICAgfHwgbGsgPT0gMTA1MTI4ICAgICAgICAgIC8vICdqc29uJyAnb3JkZXInCiAgICAgICAgICAgfHwgbGsgPT0gMTA1NjQwICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJlZCcKICAgICAgICAgICB8fCBsayA9PSAxMDYxNTIgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmluZycKICAgICAgICAgICB8fCBsayA9PSAxMDc2ODggICAgICAgICAgLy8gJ2pzb24nICdwYXJlbnQnCiAgICAgICAgICAgfHwgbGsgPT0gMTEwNzYwICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nJwogICAgICAgICAgIHx8IGxrID09IDExMTI3MiAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICAgICAgIHx8IGxrID09IDExMjgwOCAgICAgICAgICAvLyAnanNvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTEzODMyICAgICAgICAgIC8vICdqc29uJyAncmVuYW1lJwogICAgICAgICAgIHx8IGxrID09IDExNDM0NCAgICAgICAgICAvLyAnanNvbicgJ3JlcGxhY2UnCiAgICAgICAgICAgfHwgbGsgPT0gMTE0ODU2ICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuJwogICAgICAgICAgIHx8IGxrID09IDExNTM2OCAgICAgICAgICAvLyAnanNvbicgJ3JldHVybmluZycKICAgICAgICAgICB8fCBsayA9PSAxMTU4ODAgICAgICAgICAgLy8gJ2pzb24nICdyZXZhbGlkYXRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTE2OTA0ICAgICAgICAgIC8vICdqc29uJyAnc2F0aXNmaWVzJwogICAgICAgICAgIHx8IGxrID09IDExNzQxNiAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYScKICAgICAgICAgICB8fCBsayA9PSAxMTc5MjggICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgICAgICAgIHx8IGxrID09IDExODQ0MCAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1lbGVtZW50JwogICAgICAgICAgIHx8IGxrID09IDExODk1MiAgICAgICAgICAvLyAnanNvbicgJ3Njb3JlJwogICAgICAgICAgIHx8IGxrID09IDExOTQ2NCAgICAgICAgICAvLyAnanNvbicgJ3NlbGVjdCcKICAgICAgICAgICB8fCBsayA9PSAxMTk5NzYgICAgICAgICAgLy8gJ2pzb24nICdzZWxmJwogICAgICAgICAgIHx8IGxrID09IDEyMjUzNiAgICAgICAgICAvLyAnanNvbicgJ3NsaWRpbmcnCiAgICAgICAgICAgfHwgbGsgPT0gMTIzMDQ4ICAgICAgICAgIC8vICdqc29uJyAnc29tZScKICAgICAgICAgICB8fCBsayA9PSAxMjM1NjAgICAgICAgICAgLy8gJ2pzb24nICdzdGFibGUnCiAgICAgICAgICAgfHwgbGsgPT0gMTI0MDcyICAgICAgICAgIC8vICdqc29uJyAnc3RhcnQnCiAgICAgICAgICAgfHwgbGsgPT0gMTI1NjA4ICAgICAgICAgIC8vICdqc29uJyAnc3RyaWN0JwogICAgICAgICAgIHx8IGxrID09IDEyNjYzMiAgICAgICAgICAvLyAnanNvbicgJ3N0cnVjdHVyZWQtaXRlbScKICAgICAgICAgICB8fCBsayA9PSAxMjcxNDQgICAgICAgICAgLy8gJ2pzb24nICdzd2l0Y2gnCiAgICAgICAgICAgfHwgbGsgPT0gMTI3NjU2ICAgICAgICAgIC8vICdqc29uJyAndGV4dCcKICAgICAgICAgICB8fCBsayA9PSAxMjk3MDQgICAgICAgICAgLy8gJ2pzb24nICd0bycKICAgICAgICAgICB8fCBsayA9PSAxMzAyMTYgICAgICAgICAgLy8gJ2pzb24nICd0cmVhdCcKICAgICAgICAgICB8fCBsayA9PSAxMzA3MjggICAgICAgICAgLy8gJ2pzb24nICd0cnVlJwogICAgICAgICAgIHx8IGxrID09IDEzMTI0MCAgICAgICAgICAvLyAnanNvbicgJ3RyeScKICAgICAgICAgICB8fCBsayA9PSAxMzE3NTIgICAgICAgICAgLy8gJ2pzb24nICd0dW1ibGluZycKICAgICAgICAgICB8fCBsayA9PSAxMzIyNjQgICAgICAgICAgLy8gJ2pzb24nICd0eXBlJwogICAgICAgICAgIHx8IGxrID09IDEzMjc3NiAgICAgICAgICAvLyAnanNvbicgJ3R5cGVzd2l0Y2gnCiAgICAgICAgICAgfHwgbGsgPT0gMTMzMjg4ICAgICAgICAgIC8vICdqc29uJyAndW5pb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTM0MzEyICAgICAgICAgIC8vICdqc29uJyAndW5vcmRlcmVkJwogICAgICAgICAgIHx8IGxrID09IDEzNDgyNCAgICAgICAgICAvLyAnanNvbicgJ3VwZGF0aW5nJwogICAgICAgICAgIHx8IGxrID09IDEzNjM2MCAgICAgICAgICAvLyAnanNvbicgJ3ZhbGlkYXRlJwogICAgICAgICAgIHx8IGxrID09IDEzNjg3MiAgICAgICAgICAvLyAnanNvbicgJ3ZhbHVlJwogICAgICAgICAgIHx8IGxrID09IDEzNzM4NCAgICAgICAgICAvLyAnanNvbicgJ3ZhcmlhYmxlJwogICAgICAgICAgIHx8IGxrID09IDEzNzg5NiAgICAgICAgICAvLyAnanNvbicgJ3ZlcnNpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTM5NDMyICAgICAgICAgIC8vICdqc29uJyAnd2hlcmUnCiAgICAgICAgICAgfHwgbGsgPT0gMTM5OTQ0ICAgICAgICAgIC8vICdqc29uJyAnd2hpbGUnCiAgICAgICAgICAgfHwgbGsgPT0gMTQxNDgwICAgICAgICAgIC8vICdqc29uJyAnd2l0aCcKICAgICAgICAgICB8fCBsayA9PSAxNDQwNDAgICAgICAgICAgLy8gJ2pzb24nICd7JwogICAgICAgICAgIHx8IGxrID09IDE0NTA2NCkgICAgICAgICAvLyAnanNvbicgJ3t8JwogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoMTY4KTsgICAgICAgICAgICAvLyAnanNvbicKICAgICAgICAgIH0KICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgICB7CiAgICAgICAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgICAgbG9va2FoZWFkMlcoNzIpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgbGsgPSBsMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsayA9PSAxMTAxNjIpICAgICAgICAgLy8gJ2F0JyAncG9zaXRpb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gbWVtb2l6ZWQoMTQsIGUwKTsKICAgICAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB2YXIgYjBCID0gYjA7IHZhciBlMEIgPSBlMDsgdmFyIGwxQiA9IGwxOwogICAgICAgICAgICAgIHZhciBiMUIgPSBiMTsgdmFyIGUxQiA9IGUxOyB2YXIgbDJCID0gbDI7CiAgICAgICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAvLyAnYXQnCiAgICAgICAgICAgICAgICBsb29rYWhlYWQxVyg3Mik7ICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgICAgICAgICAgc2hpZnRUKDIxNSk7ICAgICAgICAvLyAncG9zaXRpb24nCiAgICAgICAgICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgICAgICAgbWVtb2l6ZSgxNCwgZTBCLCAtMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoIChwMUIpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFCOyBlMSA9IGUxQjsgbDIgPSBsMkI7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFCO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQjsgZTIgPSBlMkI7IGVuZCA9IGUyQjsgfX0KICAgICAgICAgICAgICAgIG1lbW9pemUoMTQsIGUwQiwgLTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobGsgPT0gLTEpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNoaWZ0VCg4Mik7ICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgICAgbG9va2FoZWFkMVcoNzIpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICAgIHNoaWZ0VCgyMTUpOyAgICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgIH0KICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgIG1lbW9pemUoMTIsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDE4MDg4KSAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgxMywgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEIgPSBiMDsgdmFyIGUwQiA9IGUwOyB2YXIgbDFCID0gbDE7CiAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFCKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgfQogICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFCOyBlMSA9IGUxQjsgbDIgPSBsMkI7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFCO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQjsgZTIgPSBlMkI7IGVuZCA9IGUyQjsgfX0KICAgICAgICAgIG1lbW9pemUoMTMsIGUwLCBsayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayA9PSAtMQogICAgICAgfHwgbGsgPT0gMzI0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgICB8fCBsayA9PSA0MjY0ICAgICAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgICAgfHwgbGsgPT0gNDc3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICAgIHx8IGxrID09IDUyODggICAgICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICAgIHx8IGxrID09IDU4MDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICAgIHx8IGxrID09IDE2MDQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgICAgfHwgbGsgPT0gMTY1NTIgICAgICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgICAgfHwgbGsgPT0gMTcwNjQgICAgICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgICB8fCBsayA9PSAxODYwMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnKCMnCiAgICAgICB8fCBsayA9PSAyMTE2MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnKycKICAgICAgIHx8IGxrID09IDIyMTg0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICctJwogICAgICAgfHwgbGsgPT0gMjQyMzIgICAgICAgICAgICAgICAvLyAnanNvbicgJy8nCiAgICAgICB8fCBsayA9PSAyNDc0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnLy8nCiAgICAgICB8fCBsayA9PSAyODMyOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICAgIHx8IGxrID09IDI4ODQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgICAgfHwgbGsgPT0gMzA4ODggICAgICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgICAgfHwgbGsgPT0gMzU0OTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgICB8fCBsayA9PSAzNjUyMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgICB8fCBsayA9PSAzNzU0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgICB8fCBsayA9PSAzODA1NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgICB8fCBsayA9PSAzODU2OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgIHx8IGxrID09IDM5MDgwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgICB8fCBsayA9PSA0MDEwNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgICAgfHwgbGsgPT0gNDA2MTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgICAgfHwgbGsgPT0gNDExMjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgICAgfHwgbGsgPT0gNDE2NDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICAgIHx8IGxrID09IDQyMTUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICAgIHx8IGxrID09IDQyNjY0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgICB8fCBsayA9PSA0MzE3NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgICB8fCBsayA9PSA0MzY4OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgICAgfHwgbGsgPT0gNDQyMDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgICAgfHwgbGsgPT0gNDQ3MTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgICAgfHwgbGsgPT0gNDU3MzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgICB8fCBsayA9PSA0NjI0OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICAgIHx8IGxrID09IDQ2NzYwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICAgIHx8IGxrID09IDQ3MjcyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICAgIHx8IGxrID09IDQ4Mjk2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICAgIHx8IGxrID09IDQ4ODA4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgICB8fCBsayA9PSA0OTgzMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICAgIHx8IGxrID09IDUwMzQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgICAgfHwgbGsgPT0gNTA4NTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICAgIHx8IGxrID09IDUyMzkyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgICAgfHwgbGsgPT0gNTI5MDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgICAgfHwgbGsgPT0gNTM0MTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgICB8fCBsayA9PSA1MzkyOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgICAgfHwgbGsgPT0gNTQ0NDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgICAgfHwgbGsgPT0gNTQ5NTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgfHwgbGsgPT0gNTU5NzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgICB8fCBsayA9PSA1NjQ4OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICAgIHx8IGxrID09IDU3MDAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgICB8fCBsayA9PSA1NzUxMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICAgIHx8IGxrID09IDU4MDI0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgICB8fCBsayA9PSA1ODUzNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICAgIHx8IGxrID09IDYxMDk2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgICB8fCBsayA9PSA2MTYwOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgICB8fCBsayA9PSA2MjEyMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICAgIHx8IGxrID09IDYyNjMyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgICAgfHwgbGsgPT0gNjMxNDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgICB8fCBsayA9PSA2MzY1NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgICB8fCBsayA9PSA2NDE2OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgICB8fCBsayA9PSA2NDY4MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgICB8fCBsayA9PSA2NTE5MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgICAgfHwgbGsgPT0gNjYyMTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgICAgfHwgbGsgPT0gNjY3MjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgICAgfHwgbGsgPT0gNjc3NTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICAgIHx8IGxrID09IDY4MjY0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgICAgfHwgbGsgPT0gNjg3NzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgICAgfHwgbGsgPT0gNjkyODggICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgICAgfHwgbGsgPT0gNjk4MDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgICAgfHwgbGsgPT0gNzAzMTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICAgIHx8IGxrID09IDcwODI0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICAgIHx8IGxrID09IDcxMzM2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgICB8fCBsayA9PSA3Mjg3MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICAgIHx8IGxrID09IDczMzg0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgICB8fCBsayA9PSA3NTQzMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgICB8fCBsayA9PSA3NTk0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgICB8fCBsayA9PSA3Njk2OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgICB8fCBsayA9PSA3Nzk5MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgICB8fCBsayA9PSA3ODUwNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICAgIHx8IGxrID09IDc5MDE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICAgIHx8IGxrID09IDc5NTI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgICB8fCBsayA9PSA4MDA0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgICB8fCBsayA9PSA4MDU1MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgICB8fCBsayA9PSA4MjYwMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgICAgfHwgbGsgPT0gODMxMTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgICAgfHwgbGsgPT0gODM2MjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICAgIHx8IGxrID09IDg0MTM2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgICB8fCBsayA9PSA4NDY0OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICAgIHx8IGxrID09IDg1MTYwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICAgIHx8IGxrID09IDg1NjcyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgICAgfHwgbGsgPT0gODYxODQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgICB8fCBsayA9PSA4NjY5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgICAgfHwgbGsgPT0gODcyMDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICAgIHx8IGxrID09IDg4NzQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgICAgfHwgbGsgPT0gODkyNTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICAgIHx8IGxrID09IDg5NzY4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICAgIHx8IGxrID09IDkwNzkyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgICB8fCBsayA9PSA5MTgxNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICAgIHx8IGxrID09IDkyODQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICAgIHx8IGxrID09IDkzODY0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgICB8fCBsayA9PSA5NDM3NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgICAgfHwgbGsgPT0gOTQ4ODggICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICAgIHx8IGxrID09IDk1OTEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgICB8fCBsayA9PSA5NjQyNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgICB8fCBsayA9PSA5NjkzNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgICB8fCBsayA9PSA5OTQ5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICAgIHx8IGxrID09IDEwMDAwOCAgICAgICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICAgIHx8IGxrID09IDEwMDUyMCAgICAgICAgICAgICAgLy8gJ2pzb24nICdub3QnCiAgICAgICB8fCBsayA9PSAxMDEwMzIgICAgICAgICAgICAgIC8vICdqc29uJyAnbnVsbCcKICAgICAgIHx8IGxrID09IDEwMTU0NCAgICAgICAgICAgICAgLy8gJ2pzb24nICdvYmplY3QnCiAgICAgICB8fCBsayA9PSAxMDM1OTIgICAgICAgICAgICAgIC8vICdqc29uJyAnb25seScKICAgICAgIHx8IGxrID09IDEwNDEwNCAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcHRpb24nCiAgICAgICB8fCBsayA9PSAxMDQ2MTYgICAgICAgICAgICAgIC8vICdqc29uJyAnb3InCiAgICAgICB8fCBsayA9PSAxMDUxMjggICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXInCiAgICAgICB8fCBsayA9PSAxMDU2NDAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJlZCcKICAgICAgIHx8IGxrID09IDEwNjE1MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmluZycKICAgICAgIHx8IGxrID09IDEwNzY4OCAgICAgICAgICAgICAgLy8gJ2pzb24nICdwYXJlbnQnCiAgICAgICB8fCBsayA9PSAxMTA3NjAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nJwogICAgICAgfHwgbGsgPT0gMTExMjcyICAgICAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICAgfHwgbGsgPT0gMTEyODA4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgICB8fCBsayA9PSAxMTM4MzIgICAgICAgICAgICAgIC8vICdqc29uJyAncmVuYW1lJwogICAgICAgfHwgbGsgPT0gMTE0MzQ0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3JlcGxhY2UnCiAgICAgICB8fCBsayA9PSAxMTQ4NTYgICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuJwogICAgICAgfHwgbGsgPT0gMTE1MzY4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldHVybmluZycKICAgICAgIHx8IGxrID09IDExNTg4MCAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXZhbGlkYXRpb24nCiAgICAgICB8fCBsayA9PSAxMTY5MDQgICAgICAgICAgICAgIC8vICdqc29uJyAnc2F0aXNmaWVzJwogICAgICAgfHwgbGsgPT0gMTE3NDE2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYScKICAgICAgIHx8IGxrID09IDExNzkyOCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgICAgfHwgbGsgPT0gMTE4NDQwICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1lbGVtZW50JwogICAgICAgfHwgbGsgPT0gMTE4OTUyICAgICAgICAgICAgICAvLyAnanNvbicgJ3Njb3JlJwogICAgICAgfHwgbGsgPT0gMTE5NDY0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGVjdCcKICAgICAgIHx8IGxrID09IDExOTk3NiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzZWxmJwogICAgICAgfHwgbGsgPT0gMTIyNTM2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NsaWRpbmcnCiAgICAgICB8fCBsayA9PSAxMjMwNDggICAgICAgICAgICAgIC8vICdqc29uJyAnc29tZScKICAgICAgIHx8IGxrID09IDEyMzU2MCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFibGUnCiAgICAgICB8fCBsayA9PSAxMjQwNzIgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RhcnQnCiAgICAgICB8fCBsayA9PSAxMjU2MDggICAgICAgICAgICAgIC8vICdqc29uJyAnc3RyaWN0JwogICAgICAgfHwgbGsgPT0gMTI2NjMyICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0cnVjdHVyZWQtaXRlbScKICAgICAgIHx8IGxrID09IDEyNzE0NCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzd2l0Y2gnCiAgICAgICB8fCBsayA9PSAxMjc2NTYgICAgICAgICAgICAgIC8vICdqc29uJyAndGV4dCcKICAgICAgIHx8IGxrID09IDEyOTcwNCAgICAgICAgICAgICAgLy8gJ2pzb24nICd0bycKICAgICAgIHx8IGxrID09IDEzMDIxNiAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cmVhdCcKICAgICAgIHx8IGxrID09IDEzMDcyOCAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cnVlJwogICAgICAgfHwgbGsgPT0gMTMxMjQwICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyeScKICAgICAgIHx8IGxrID09IDEzMTc1MiAgICAgICAgICAgICAgLy8gJ2pzb24nICd0dW1ibGluZycKICAgICAgIHx8IGxrID09IDEzMjI2NCAgICAgICAgICAgICAgLy8gJ2pzb24nICd0eXBlJwogICAgICAgfHwgbGsgPT0gMTMyNzc2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGVzd2l0Y2gnCiAgICAgICB8fCBsayA9PSAxMzMyODggICAgICAgICAgICAgIC8vICdqc29uJyAndW5pb24nCiAgICAgICB8fCBsayA9PSAxMzQzMTIgICAgICAgICAgICAgIC8vICdqc29uJyAndW5vcmRlcmVkJwogICAgICAgfHwgbGsgPT0gMTM0ODI0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3VwZGF0aW5nJwogICAgICAgfHwgbGsgPT0gMTM2MzYwICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhbGlkYXRlJwogICAgICAgfHwgbGsgPT0gMTM2ODcyICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhbHVlJwogICAgICAgfHwgbGsgPT0gMTM3Mzg0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhcmlhYmxlJwogICAgICAgfHwgbGsgPT0gMTM3ODk2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZlcnNpb24nCiAgICAgICB8fCBsayA9PSAxMzk0MzIgICAgICAgICAgICAgIC8vICdqc29uJyAnd2hlcmUnCiAgICAgICB8fCBsayA9PSAxMzk5NDQgICAgICAgICAgICAgIC8vICdqc29uJyAnd2hpbGUnCiAgICAgICB8fCBsayA9PSAxNDE0ODAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2l0aCcKICAgICAgIHx8IGxrID09IDE0NDA0MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd7JwogICAgICAgfHwgbGsgPT0gMTQ1MDY0KSAgICAgICAgICAgICAvLyAnanNvbicgJ3t8JwogICAgICB7CiAgICAgICAgc2hpZnQoMTY4KTsgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgICBzaGlmdCgxNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIGxvb2thaGVhZDJXKDcyKTsgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwb3NpdGlvbicKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayA9PSAxMTAxNjIpICAgICAgICAgICAgIC8vICdhdCcgJ3Bvc2l0aW9uJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgxNCwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEIgPSBiMDsgdmFyIGUwQiA9IGUwOyB2YXIgbDFCID0gbDE7CiAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgICAgICBsb29rYWhlYWQxVyg3Mik7ICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwb3NpdGlvbicKICAgICAgICAgICAgc2hpZnRUKDIxNSk7ICAgICAgICAgICAgLy8gJ3Bvc2l0aW9uJwogICAgICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgICBsayA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgIHsKICAgICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIH0KICAgICAgICAgIGIwID0gYjBCOyBlMCA9IGUwQjsgbDEgPSBsMUI7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBCO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQjsgZTEgPSBlMUI7IGwyID0gbDJCOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQjt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkI7IGUyID0gZTJCOyBlbmQgPSBlMkI7IH19CiAgICAgICAgICBtZW1vaXplKDE0LCBlMCwgbGspOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGsgPT0gLTEpCiAgICAgIHsKICAgICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIGxvb2thaGVhZDFXKDcyKTsgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwb3NpdGlvbicKICAgICAgICBzaGlmdCgyMTUpOyAgICAgICAgICAgICAgICAgLy8gJ3Bvc2l0aW9uJwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBsb29rYWhlYWQxVygyNjcpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICAgIGxvb2thaGVhZDJXKDI4MSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDE4MDg4KSAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgxNSwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEIgPSBiMDsgdmFyIGUwQiA9IGUwOyB2YXIgbDFCID0gbDE7CiAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFCKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgfQogICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFCOyBlMSA9IGUxQjsgbDIgPSBsMkI7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFCO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQjsgZTIgPSBlMkI7IGVuZCA9IGUyQjsgfX0KICAgICAgICAgIG1lbW9pemUoMTUsIGUwLCBsayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayA9PSAtMQogICAgICAgfHwgbGsgPT0gMzI0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgICB8fCBsayA9PSA0MjY0ICAgICAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgICAgfHwgbGsgPT0gNDc3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICAgIHx8IGxrID09IDUyODggICAgICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICAgIHx8IGxrID09IDU4MDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICAgIHx8IGxrID09IDk4OTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nIE5DTmFtZV5Ub2tlbgogICAgICAgfHwgbGsgPT0gMTYwNDAgICAgICAgICAgICAgICAvLyAnanNvbicgJyQnCiAgICAgICB8fCBsayA9PSAxNjU1MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnJCQnCiAgICAgICB8fCBsayA9PSAxNzA2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnJScKICAgICAgIHx8IGxrID09IDE4NjAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoIycKICAgICAgIHx8IGxrID09IDIxMTYwICAgICAgICAgICAgICAgLy8gJ2pzb24nICcrJwogICAgICAgfHwgbGsgPT0gMjIxODQgICAgICAgICAgICAgICAvLyAnanNvbicgJy0nCiAgICAgICB8fCBsayA9PSAyNDIzMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnLycKICAgICAgIHx8IGxrID09IDI0NzQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICcvLycKICAgICAgIHx8IGxrID09IDI4MzI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8JwogICAgICAgfHwgbGsgPT0gMjg4NDAgICAgICAgICAgICAgICAvLyAnanNvbicgJzwhLS0nCiAgICAgICB8fCBsayA9PSAzMDg4OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnPD8nCiAgICAgICB8fCBsayA9PSAzNTQ5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnWycKICAgICAgIHx8IGxrID09IDM2NTIwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhZnRlcicKICAgICAgIHx8IGxrID09IDM3NTQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbGxvd2luZycKICAgICAgIHx8IGxrID09IDM4MDU2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmNlc3RvcicKICAgICAgIHx8IGxrID09IDM4NTY4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmNlc3Rvci1vci1zZWxmJwogICAgICAgfHwgbGsgPT0gMzkwODAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuZCcKICAgICAgIHx8IGxrID09IDQwMTA0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcHBlbmQnCiAgICAgICB8fCBsayA9PSA0MDYxNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXJyYXknCiAgICAgICB8fCBsayA9PSA0MTEyOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXMnCiAgICAgICB8fCBsayA9PSA0MTY0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXNjZW5kaW5nJwogICAgICAgfHwgbGsgPT0gNDIxNTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2F0JwogICAgICAgfHwgbGsgPT0gNDI2NjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2F0dHJpYnV0ZScKICAgICAgIHx8IGxrID09IDQzMTc2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdiYXNlLXVyaScKICAgICAgIHx8IGxrID09IDQzNjg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdiZWZvcmUnCiAgICAgICB8fCBsayA9PSA0NDIwMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYm91bmRhcnktc3BhY2UnCiAgICAgICB8fCBsayA9PSA0NDcxMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnYnJlYWsnCiAgICAgICB8fCBsayA9PSA0NTczNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzZScKICAgICAgIHx8IGxrID09IDQ2MjQ4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0JwogICAgICAgfHwgbGsgPT0gNDY3NjAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc3RhYmxlJwogICAgICAgfHwgbGsgPT0gNDcyNzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NhdGNoJwogICAgICAgfHwgbGsgPT0gNDgyOTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NoaWxkJwogICAgICAgfHwgbGsgPT0gNDg4MDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbGxhdGlvbicKICAgICAgIHx8IGxrID09IDQ5ODMyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb21tZW50JwogICAgICAgfHwgbGsgPT0gNTAzNDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cmFpbnQnCiAgICAgICB8fCBsayA9PSA1MDg1NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29uc3RydWN0aW9uJwogICAgICAgfHwgbGsgPT0gNTIzOTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRleHQnCiAgICAgICB8fCBsayA9PSA1MjkwNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29udGludWUnCiAgICAgICB8fCBsayA9PSA1MzQxNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29weScKICAgICAgIHx8IGxrID09IDUzOTI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgICB8fCBsayA9PSA1NDQ0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY291bnQnCiAgICAgICB8fCBsayA9PSA1NDk1MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgICB8fCBsayA9PSA1NTk3NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVjbGFyZScKICAgICAgIHx8IGxrID09IDU2NDg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWZhdWx0JwogICAgICAgfHwgbGsgPT0gNTcwMDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlbGV0ZScKICAgICAgIHx8IGxrID09IDU3NTEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50JwogICAgICAgfHwgbGsgPT0gNTgwMjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgIHx8IGxrID09IDU4NTM2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kaW5nJwogICAgICAgfHwgbGsgPT0gNjEwOTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RpdicKICAgICAgIHx8IGxrID09IDYxNjA4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkb2N1bWVudCcKICAgICAgIHx8IGxrID09IDYyMTIwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkb2N1bWVudC1ub2RlJwogICAgICAgfHwgbGsgPT0gNjI2MzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VsZW1lbnQnCiAgICAgICB8fCBsayA9PSA2MzE0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZWxzZScKICAgICAgIHx8IGxrID09IDYzNjU2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbXB0eScKICAgICAgIHx8IGxrID09IDY0MTY4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbXB0eS1zZXF1ZW5jZScKICAgICAgIHx8IGxrID09IDY0NjgwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbmNvZGluZycKICAgICAgIHx8IGxrID09IDY1MTkyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbmQnCiAgICAgICB8fCBsayA9PSA2NjIxNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXEnCiAgICAgICB8fCBsayA9PSA2NjcyOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXZlcnknCiAgICAgICB8fCBsayA9PSA2Nzc1MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXhjZXB0JwogICAgICAgfHwgbGsgPT0gNjgyNjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4aXQnCiAgICAgICB8fCBsayA9PSA2ODc3NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXh0ZXJuYWwnCiAgICAgICB8fCBsayA9PSA2OTI4OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZmFsc2UnCiAgICAgICB8fCBsayA9PSA2OTgwMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZmlyc3QnCiAgICAgICB8fCBsayA9PSA3MDMxMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9sbG93aW5nJwogICAgICAgfHwgbGsgPT0gNzA4MjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICAgfHwgbGsgPT0gNzEzMzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvcicKICAgICAgIHx8IGxrID09IDcyODcyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmcm9tJwogICAgICAgfHwgbGsgPT0gNzMzODQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Z0LW9wdGlvbicKICAgICAgIHx8IGxrID09IDc1NDMyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmdW5jdGlvbicKICAgICAgIHx8IGxrID09IDc1OTQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdnZScKICAgICAgIHx8IGxrID09IDc2OTY4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdncm91cCcKICAgICAgIHx8IGxrID09IDc3OTkyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdndCcKICAgICAgIHx8IGxrID09IDc4NTA0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpZGl2JwogICAgICAgfHwgbGsgPT0gNzkwMTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2lmJwogICAgICAgfHwgbGsgPT0gNzk1MjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2ltcG9ydCcKICAgICAgIHx8IGxrID09IDgwMDQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbicKICAgICAgIHx8IGxrID09IDgwNTUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbmRleCcKICAgICAgIHx8IGxrID09IDgyNjAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnNlcnQnCiAgICAgICB8fCBsayA9PSA4MzExMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5zdGFuY2UnCiAgICAgICB8fCBsayA9PSA4MzYyNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50ZWdyaXR5JwogICAgICAgfHwgbGsgPT0gODQxMzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludGVyc2VjdCcKICAgICAgIHx8IGxrID09IDg0NjQ4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRvJwogICAgICAgfHwgbGsgPT0gODUxNjAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2lzJwogICAgICAgfHwgbGsgPT0gODU2NzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2l0ZW0nCiAgICAgICB8fCBsayA9PSA4NjE4NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbicKICAgICAgIHx8IGxrID09IDg2Njk2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uLWl0ZW0nCiAgICAgICB8fCBsayA9PSA4NzIwOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbmlxJwogICAgICAgfHwgbGsgPT0gODg3NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xhc3QnCiAgICAgICB8fCBsayA9PSA4OTI1NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGF4JwogICAgICAgfHwgbGsgPT0gODk3NjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2xlJwogICAgICAgfHwgbGsgPT0gOTA3OTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xldCcKICAgICAgIHx8IGxrID09IDkxODE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsb29wJwogICAgICAgfHwgbGsgPT0gOTI4NDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2x0JwogICAgICAgfHwgbGsgPT0gOTM4NjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZCcKICAgICAgIHx8IGxrID09IDk0Mzc2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2RpZnknCiAgICAgICB8fCBsayA9PSA5NDg4OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kdWxlJwogICAgICAgfHwgbGsgPT0gOTU5MTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ25hbWVzcGFjZScKICAgICAgIHx8IGxrID09IDk2NDI0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2Utbm9kZScKICAgICAgIHx8IGxrID09IDk2OTM2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICduZScKICAgICAgIHx8IGxrID09IDk5NDk2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdub2RlJwogICAgICAgfHwgbGsgPT0gMTAwMDA4ICAgICAgICAgICAgICAvLyAnanNvbicgJ25vZGVzJwogICAgICAgfHwgbGsgPT0gMTAwNTIwICAgICAgICAgICAgICAvLyAnanNvbicgJ25vdCcKICAgICAgIHx8IGxrID09IDEwMTAzMiAgICAgICAgICAgICAgLy8gJ2pzb24nICdudWxsJwogICAgICAgfHwgbGsgPT0gMTAxNTQ0ICAgICAgICAgICAgICAvLyAnanNvbicgJ29iamVjdCcKICAgICAgIHx8IGxrID09IDEwMzU5MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdvbmx5JwogICAgICAgfHwgbGsgPT0gMTA0MTA0ICAgICAgICAgICAgICAvLyAnanNvbicgJ29wdGlvbicKICAgICAgIHx8IGxrID09IDEwNDYxNiAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcicKICAgICAgIHx8IGxrID09IDEwNTEyOCAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcicKICAgICAgIHx8IGxrID09IDEwNTY0MCAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmVkJwogICAgICAgfHwgbGsgPT0gMTA2MTUyICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyaW5nJwogICAgICAgfHwgbGsgPT0gMTA3Njg4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3BhcmVudCcKICAgICAgIHx8IGxrID09IDExMDc2MCAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmcnCiAgICAgICB8fCBsayA9PSAxMTEyNzIgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgICB8fCBsayA9PSAxMTI4MDggICAgICAgICAgICAgIC8vICdqc29uJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgIHx8IGxrID09IDExMzgzMiAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZW5hbWUnCiAgICAgICB8fCBsayA9PSAxMTQzNDQgICAgICAgICAgICAgIC8vICdqc29uJyAncmVwbGFjZScKICAgICAgIHx8IGxrID09IDExNDg1NiAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm4nCiAgICAgICB8fCBsayA9PSAxMTUzNjggICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuaW5nJwogICAgICAgfHwgbGsgPT0gMTE1ODgwICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldmFsaWRhdGlvbicKICAgICAgIHx8IGxrID09IDExNjkwNCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzYXRpc2ZpZXMnCiAgICAgICB8fCBsayA9PSAxMTc0MTYgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hJwogICAgICAgfHwgbGsgPT0gMTE3OTI4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgICB8fCBsayA9PSAxMTg0NDAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgICB8fCBsayA9PSAxMTg5NTIgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NvcmUnCiAgICAgICB8fCBsayA9PSAxMTk0NjQgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZWN0JwogICAgICAgfHwgbGsgPT0gMTE5OTc2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGYnCiAgICAgICB8fCBsayA9PSAxMjI1MzYgICAgICAgICAgICAgIC8vICdqc29uJyAnc2xpZGluZycKICAgICAgIHx8IGxrID09IDEyMzA0OCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzb21lJwogICAgICAgfHwgbGsgPT0gMTIzNTYwICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YWJsZScKICAgICAgIHx8IGxrID09IDEyNDA3MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFydCcKICAgICAgIHx8IGxrID09IDEyNTYwOCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJpY3QnCiAgICAgICB8fCBsayA9PSAxMjY2MzIgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RydWN0dXJlZC1pdGVtJwogICAgICAgfHwgbGsgPT0gMTI3MTQ0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3N3aXRjaCcKICAgICAgIHx8IGxrID09IDEyNzY1NiAgICAgICAgICAgICAgLy8gJ2pzb24nICd0ZXh0JwogICAgICAgfHwgbGsgPT0gMTI5NzA0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3RvJwogICAgICAgfHwgbGsgPT0gMTMwMjE2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyZWF0JwogICAgICAgfHwgbGsgPT0gMTMwNzI4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3RydWUnCiAgICAgICB8fCBsayA9PSAxMzEyNDAgICAgICAgICAgICAgIC8vICdqc29uJyAndHJ5JwogICAgICAgfHwgbGsgPT0gMTMxNzUyICAgICAgICAgICAgICAvLyAnanNvbicgJ3R1bWJsaW5nJwogICAgICAgfHwgbGsgPT0gMTMyMjY0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGUnCiAgICAgICB8fCBsayA9PSAxMzI3NzYgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZXN3aXRjaCcKICAgICAgIHx8IGxrID09IDEzMzI4OCAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bmlvbicKICAgICAgIHx8IGxrID09IDEzNDMxMiAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bm9yZGVyZWQnCiAgICAgICB8fCBsayA9PSAxMzQ4MjQgICAgICAgICAgICAgIC8vICdqc29uJyAndXBkYXRpbmcnCiAgICAgICB8fCBsayA9PSAxMzYzNjAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsaWRhdGUnCiAgICAgICB8fCBsayA9PSAxMzY4NzIgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsdWUnCiAgICAgICB8fCBsayA9PSAxMzczODQgICAgICAgICAgICAgIC8vICdqc29uJyAndmFyaWFibGUnCiAgICAgICB8fCBsayA9PSAxMzc4OTYgICAgICAgICAgICAgIC8vICdqc29uJyAndmVyc2lvbicKICAgICAgIHx8IGxrID09IDEzOTQzMiAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGVyZScKICAgICAgIHx8IGxrID09IDEzOTk0NCAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGlsZScKICAgICAgIHx8IGxrID09IDE0MTQ4MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aXRoJwogICAgICAgfHwgbGsgPT0gMTQ0MDQwICAgICAgICAgICAgICAvLyAnanNvbicgJ3snCiAgICAgICB8fCBsayA9PSAxNDUwNjQpICAgICAgICAgICAgIC8vICdqc29uJyAne3wnCiAgICAgIHsKICAgICAgICBzaGlmdCgxNjgpOyAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY3KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QYWlyQ29uc3RydWN0b3JMaXN0KCk7CiAgICAgIHNoaWZ0KDE2NSk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTkluc2VydEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTkluc2VydEV4cHIoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGxvb2thaGVhZDJXKDI2Nyk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayAhPSA5ODg5KSAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgTkNOYW1lXlRva2VuCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTIsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDE2MSk7ICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICAgIHsKICAgICAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgbGsgPSBsMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsayA9PSAxODA4OCkgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgICAgICAgewogICAgICAgICAgICBsayA9IG1lbW9pemVkKDEzLCBlMCk7CiAgICAgICAgICAgIGlmIChsayA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdmFyIGIwQiA9IGIwOyB2YXIgZTBCID0gZTA7IHZhciBsMUIgPSBsMTsKICAgICAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgICAgIHZhciBiMkIgPSBiMjsgdmFyIGUyQiA9IGUyOwogICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgICAgICBtZW1vaXplKDEzLCBlMEIsIC0xKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBiMCA9IGIwQjsgZTAgPSBlMEI7IGwxID0gbDFCOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQjt9IGVsc2UgewogICAgICAgICAgICAgICAgYjEgPSBiMUI7IGUxID0gZTFCOyBsMiA9IGwyQjsgaWYgKGwyID09IDApIHtlbmQgPSBlMUI7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIyID0gYjJCOyBlMiA9IGUyQjsgZW5kID0gZTJCOyB9fQogICAgICAgICAgICAgICAgbWVtb2l6ZSgxMywgZTBCLCAtMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChsayA9PSAtMQogICAgICAgICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgICAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgICAgICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICAgICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICAgICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICAgICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgICAgICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgICAgICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgICAgICAgfHwgbGsgPT0gMTg2MDAgICAgICAgICAgIC8vICdqc29uJyAnKCMnCiAgICAgICAgICAgfHwgbGsgPT0gMjExNjAgICAgICAgICAgIC8vICdqc29uJyAnKycKICAgICAgICAgICB8fCBsayA9PSAyMjE4NCAgICAgICAgICAgLy8gJ2pzb24nICctJwogICAgICAgICAgIHx8IGxrID09IDI0MjMyICAgICAgICAgICAvLyAnanNvbicgJy8nCiAgICAgICAgICAgfHwgbGsgPT0gMjQ3NDQgICAgICAgICAgIC8vICdqc29uJyAnLy8nCiAgICAgICAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICAgICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgICAgICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgICAgICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgICAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgICAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgICAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgICAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgICAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgICAgICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgICAgICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgICAgICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICAgICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICAgICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgICAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgICAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgICAgICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgICAgICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgICAgICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgICAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICAgICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICAgICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICAgICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICAgICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICAgICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgICAgICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICAgICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgICAgICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgICAgICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgICAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgICAgICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgICAgICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgICAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICAgICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgICAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICAgICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgICAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICAgICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgICAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgICAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICAgICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgICAgICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgICAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgICAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgICAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgICAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgICAgICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgICAgICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgICAgICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICAgICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgICAgICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgICAgICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgICAgICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgICAgICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICAgICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICAgICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgICAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICAgICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgICAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgICAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgICAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgICAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICAgICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICAgICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgICAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgICAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgICAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgICAgICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgICAgICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICAgICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgICAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICAgICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICAgICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgICAgICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgICAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgICAgICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICAgICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgICAgICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICAgICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICAgICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgICAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICAgICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICAgICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgICAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgICAgICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICAgICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgICAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgICAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgICAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICAgICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICAgICAgICB8fCBsayA9PSAxMDA1MjAgICAgICAgICAgLy8gJ2pzb24nICdub3QnCiAgICAgICAgICAgfHwgbGsgPT0gMTAxMDMyICAgICAgICAgIC8vICdqc29uJyAnbnVsbCcKICAgICAgICAgICB8fCBsayA9PSAxMDE1NDQgICAgICAgICAgLy8gJ2pzb24nICdvYmplY3QnCiAgICAgICAgICAgfHwgbGsgPT0gMTAzNTkyICAgICAgICAgIC8vICdqc29uJyAnb25seScKICAgICAgICAgICB8fCBsayA9PSAxMDQxMDQgICAgICAgICAgLy8gJ2pzb24nICdvcHRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTA0NjE2ICAgICAgICAgIC8vICdqc29uJyAnb3InCiAgICAgICAgICAgfHwgbGsgPT0gMTA1MTI4ICAgICAgICAgIC8vICdqc29uJyAnb3JkZXInCiAgICAgICAgICAgfHwgbGsgPT0gMTA1NjQwICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJlZCcKICAgICAgICAgICB8fCBsayA9PSAxMDYxNTIgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmluZycKICAgICAgICAgICB8fCBsayA9PSAxMDc2ODggICAgICAgICAgLy8gJ2pzb24nICdwYXJlbnQnCiAgICAgICAgICAgfHwgbGsgPT0gMTEwNzYwICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nJwogICAgICAgICAgIHx8IGxrID09IDExMTI3MiAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICAgICAgIHx8IGxrID09IDExMjgwOCAgICAgICAgICAvLyAnanNvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTEzODMyICAgICAgICAgIC8vICdqc29uJyAncmVuYW1lJwogICAgICAgICAgIHx8IGxrID09IDExNDM0NCAgICAgICAgICAvLyAnanNvbicgJ3JlcGxhY2UnCiAgICAgICAgICAgfHwgbGsgPT0gMTE0ODU2ICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuJwogICAgICAgICAgIHx8IGxrID09IDExNTM2OCAgICAgICAgICAvLyAnanNvbicgJ3JldHVybmluZycKICAgICAgICAgICB8fCBsayA9PSAxMTU4ODAgICAgICAgICAgLy8gJ2pzb24nICdyZXZhbGlkYXRpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTE2OTA0ICAgICAgICAgIC8vICdqc29uJyAnc2F0aXNmaWVzJwogICAgICAgICAgIHx8IGxrID09IDExNzQxNiAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYScKICAgICAgICAgICB8fCBsayA9PSAxMTc5MjggICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgICAgICAgIHx8IGxrID09IDExODQ0MCAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1lbGVtZW50JwogICAgICAgICAgIHx8IGxrID09IDExODk1MiAgICAgICAgICAvLyAnanNvbicgJ3Njb3JlJwogICAgICAgICAgIHx8IGxrID09IDExOTQ2NCAgICAgICAgICAvLyAnanNvbicgJ3NlbGVjdCcKICAgICAgICAgICB8fCBsayA9PSAxMTk5NzYgICAgICAgICAgLy8gJ2pzb24nICdzZWxmJwogICAgICAgICAgIHx8IGxrID09IDEyMjUzNiAgICAgICAgICAvLyAnanNvbicgJ3NsaWRpbmcnCiAgICAgICAgICAgfHwgbGsgPT0gMTIzMDQ4ICAgICAgICAgIC8vICdqc29uJyAnc29tZScKICAgICAgICAgICB8fCBsayA9PSAxMjM1NjAgICAgICAgICAgLy8gJ2pzb24nICdzdGFibGUnCiAgICAgICAgICAgfHwgbGsgPT0gMTI0MDcyICAgICAgICAgIC8vICdqc29uJyAnc3RhcnQnCiAgICAgICAgICAgfHwgbGsgPT0gMTI1NjA4ICAgICAgICAgIC8vICdqc29uJyAnc3RyaWN0JwogICAgICAgICAgIHx8IGxrID09IDEyNjYzMiAgICAgICAgICAvLyAnanNvbicgJ3N0cnVjdHVyZWQtaXRlbScKICAgICAgICAgICB8fCBsayA9PSAxMjcxNDQgICAgICAgICAgLy8gJ2pzb24nICdzd2l0Y2gnCiAgICAgICAgICAgfHwgbGsgPT0gMTI3NjU2ICAgICAgICAgIC8vICdqc29uJyAndGV4dCcKICAgICAgICAgICB8fCBsayA9PSAxMjk3MDQgICAgICAgICAgLy8gJ2pzb24nICd0bycKICAgICAgICAgICB8fCBsayA9PSAxMzAyMTYgICAgICAgICAgLy8gJ2pzb24nICd0cmVhdCcKICAgICAgICAgICB8fCBsayA9PSAxMzA3MjggICAgICAgICAgLy8gJ2pzb24nICd0cnVlJwogICAgICAgICAgIHx8IGxrID09IDEzMTI0MCAgICAgICAgICAvLyAnanNvbicgJ3RyeScKICAgICAgICAgICB8fCBsayA9PSAxMzE3NTIgICAgICAgICAgLy8gJ2pzb24nICd0dW1ibGluZycKICAgICAgICAgICB8fCBsayA9PSAxMzIyNjQgICAgICAgICAgLy8gJ2pzb24nICd0eXBlJwogICAgICAgICAgIHx8IGxrID09IDEzMjc3NiAgICAgICAgICAvLyAnanNvbicgJ3R5cGVzd2l0Y2gnCiAgICAgICAgICAgfHwgbGsgPT0gMTMzMjg4ICAgICAgICAgIC8vICdqc29uJyAndW5pb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTM0MzEyICAgICAgICAgIC8vICdqc29uJyAndW5vcmRlcmVkJwogICAgICAgICAgIHx8IGxrID09IDEzNDgyNCAgICAgICAgICAvLyAnanNvbicgJ3VwZGF0aW5nJwogICAgICAgICAgIHx8IGxrID09IDEzNjM2MCAgICAgICAgICAvLyAnanNvbicgJ3ZhbGlkYXRlJwogICAgICAgICAgIHx8IGxrID09IDEzNjg3MiAgICAgICAgICAvLyAnanNvbicgJ3ZhbHVlJwogICAgICAgICAgIHx8IGxrID09IDEzNzM4NCAgICAgICAgICAvLyAnanNvbicgJ3ZhcmlhYmxlJwogICAgICAgICAgIHx8IGxrID09IDEzNzg5NiAgICAgICAgICAvLyAnanNvbicgJ3ZlcnNpb24nCiAgICAgICAgICAgfHwgbGsgPT0gMTM5NDMyICAgICAgICAgIC8vICdqc29uJyAnd2hlcmUnCiAgICAgICAgICAgfHwgbGsgPT0gMTM5OTQ0ICAgICAgICAgIC8vICdqc29uJyAnd2hpbGUnCiAgICAgICAgICAgfHwgbGsgPT0gMTQxNDgwICAgICAgICAgIC8vICdqc29uJyAnd2l0aCcKICAgICAgICAgICB8fCBsayA9PSAxNDQwNDAgICAgICAgICAgLy8gJ2pzb24nICd7JwogICAgICAgICAgIHx8IGxrID09IDE0NTA2NCkgICAgICAgICAvLyAnanNvbicgJ3t8JwogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoMTY4KTsgICAgICAgICAgICAvLyAnanNvbicKICAgICAgICAgIH0KICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgICB7CiAgICAgICAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgICAgbG9va2FoZWFkMlcoNzIpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgbGsgPSBsMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChsayA9PSAxMTAxNjIpICAgICAgICAgLy8gJ2F0JyAncG9zaXRpb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gbWVtb2l6ZWQoMTQsIGUwKTsKICAgICAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB2YXIgYjBCID0gYjA7IHZhciBlMEIgPSBlMDsgdmFyIGwxQiA9IGwxOwogICAgICAgICAgICAgIHZhciBiMUIgPSBiMTsgdmFyIGUxQiA9IGUxOyB2YXIgbDJCID0gbDI7CiAgICAgICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAvLyAnYXQnCiAgICAgICAgICAgICAgICBsb29rYWhlYWQxVyg3Mik7ICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgICAgICAgICAgc2hpZnRUKDIxNSk7ICAgICAgICAvLyAncG9zaXRpb24nCiAgICAgICAgICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgICAgICAgbWVtb2l6ZSgxNCwgZTBCLCAtMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoIChwMUIpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFCOyBlMSA9IGUxQjsgbDIgPSBsMkI7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFCO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQjsgZTIgPSBlMkI7IGVuZCA9IGUyQjsgfX0KICAgICAgICAgICAgICAgIG1lbW9pemUoMTQsIGUwQiwgLTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobGsgPT0gLTEpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNoaWZ0VCg4Mik7ICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgICAgbG9va2FoZWFkMVcoNzIpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICAgIHNoaWZ0VCgyMTUpOyAgICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgIH0KICAgICAgICAgIG1lbW9pemUoMTIsIGUwQSwgLTEpOwogICAgICAgICAgbGsgPSAtMzsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMTIsIGUwQSwgLTIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHNoaWZ0VCgxNjEpOyAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgbG9va2FoZWFkMlcoMjY4KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGsgPSBsMTsKICAgICAgfQogICAgICBpZiAobGsgPT0gMTgwODgpICAgICAgICAgICAgICAvLyAnanNvbicgJygnCiAgICAgIHsKICAgICAgICBsayA9IG1lbW9pemVkKDEzLCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQiA9IGIwOyB2YXIgZTBCID0gZTA7IHZhciBsMUIgPSBsMTsKICAgICAgICAgIHZhciBiMUIgPSBiMTsgdmFyIGUxQiA9IGUxOyB2YXIgbDJCID0gbDI7CiAgICAgICAgICB2YXIgYjJCID0gYjI7IHZhciBlMkIgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoMTY4KTsgICAgICAgICAgICAvLyAnanNvbicKICAgICAgICAgICAgbWVtb2l6ZSgxMywgZTBCLCAtMSk7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFCKQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQjsgZTAgPSBlMEI7IGwxID0gbDFCOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQjt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQjsgZTEgPSBlMUI7IGwyID0gbDJCOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQjt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQjsgZTIgPSBlMkI7IGVuZCA9IGUyQjsgfX0KICAgICAgICAgICAgbWVtb2l6ZSgxMywgZTBCLCAtMik7CiAgICAgICAgICB9CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGsgPT0gLTEKICAgICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIEVRTmFtZV5Ub2tlbgogICAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgICAgICAvLyAnanNvbicgSW50ZWdlckxpdGVyYWwKICAgICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERlY2ltYWxMaXRlcmFsCiAgICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgICAgIC8vICdqc29uJyBEb3VibGVMaXRlcmFsCiAgICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgICAgIC8vICdqc29uJyBTdHJpbmdMaXRlcmFsCiAgICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnJCcKICAgICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJCcKICAgICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICclJwogICAgICAgfHwgbGsgPT0gMTg2MDAgICAgICAgICAgICAgICAvLyAnanNvbicgJygjJwogICAgICAgfHwgbGsgPT0gMjExNjAgICAgICAgICAgICAgICAvLyAnanNvbicgJysnCiAgICAgICB8fCBsayA9PSAyMjE4NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnLScKICAgICAgIHx8IGxrID09IDI0MjMyICAgICAgICAgICAgICAgLy8gJ2pzb24nICcvJwogICAgICAgfHwgbGsgPT0gMjQ3NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJy8vJwogICAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgICAgICAvLyAnanNvbicgJzwnCiAgICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCEtLScKICAgICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8PycKICAgICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdbJwogICAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FmdGVyJwogICAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FsbG93aW5nJwogICAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yJwogICAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5kJwogICAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FwcGVuZCcKICAgICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcnJheScKICAgICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcycKICAgICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhc2NlbmRpbmcnCiAgICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXQnCiAgICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXR0cmlidXRlJwogICAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Jhc2UtdXJpJwogICAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgICAgICAvLyAnanNvbicgJ2JlZm9yZScKICAgICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdib3VuZGFyeS1zcGFjZScKICAgICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdicmVhaycKICAgICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXNlJwogICAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc3QnCiAgICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdGFibGUnCiAgICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2F0Y2gnCiAgICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2hpbGQnCiAgICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29sbGF0aW9uJwogICAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbW1lbnQnCiAgICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29uc3RyYWludCcKICAgICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJ1Y3Rpb24nCiAgICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29udGV4dCcKICAgICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250aW51ZScKICAgICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3B5JwogICAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHktbmFtZXNwYWNlcycKICAgICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3VudCcKICAgICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNpbWFsLWZvcm1hdCcKICAgICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNsYXJlJwogICAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlZmF1bHQnCiAgICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVsZXRlJwogICAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRhbnQnCiAgICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRpbmcnCiAgICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGl2JwogICAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50JwogICAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50LW5vZGUnCiAgICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZWxlbWVudCcKICAgICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbHNlJwogICAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5JwogICAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5LXNlcXVlbmNlJwogICAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuY29kaW5nJwogICAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuZCcKICAgICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlcScKICAgICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdldmVyeScKICAgICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGNlcHQnCiAgICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXhpdCcKICAgICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleHRlcm5hbCcKICAgICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmYWxzZScKICAgICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmaXJzdCcKICAgICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmcnCiAgICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9yJwogICAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Zyb20nCiAgICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnQtb3B0aW9uJwogICAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Z1bmN0aW9uJwogICAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2dlJwogICAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2dyb3VwJwogICAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2d0JwogICAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2lkaXYnCiAgICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWYnCiAgICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW1wb3J0JwogICAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luJwogICAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luZGV4JwogICAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc2VydCcKICAgICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnN0YW5jZScKICAgICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlZ3JpdHknCiAgICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50ZXJzZWN0JwogICAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludG8nCiAgICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXMnCiAgICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXRlbScKICAgICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uJwogICAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24taXRlbScKICAgICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uaXEnCiAgICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGFzdCcKICAgICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXgnCiAgICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGUnCiAgICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGV0JwogICAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xvb3AnCiAgICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbHQnCiAgICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kJwogICAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZGlmeScKICAgICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2R1bGUnCiAgICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlJwogICAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ25hbWVzcGFjZS1ub2RlJwogICAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ25lJwogICAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ25vZGUnCiAgICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZXMnCiAgICAgICB8fCBsayA9PSAxMDA1MjAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm90JwogICAgICAgfHwgbGsgPT0gMTAxMDMyICAgICAgICAgICAgICAvLyAnanNvbicgJ251bGwnCiAgICAgICB8fCBsayA9PSAxMDE1NDQgICAgICAgICAgICAgIC8vICdqc29uJyAnb2JqZWN0JwogICAgICAgfHwgbGsgPT0gMTAzNTkyICAgICAgICAgICAgICAvLyAnanNvbicgJ29ubHknCiAgICAgICB8fCBsayA9PSAxMDQxMDQgICAgICAgICAgICAgIC8vICdqc29uJyAnb3B0aW9uJwogICAgICAgfHwgbGsgPT0gMTA0NjE2ICAgICAgICAgICAgICAvLyAnanNvbicgJ29yJwogICAgICAgfHwgbGsgPT0gMTA1MTI4ICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyJwogICAgICAgfHwgbGsgPT0gMTA1NjQwICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyZWQnCiAgICAgICB8fCBsayA9PSAxMDYxNTIgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJpbmcnCiAgICAgICB8fCBsayA9PSAxMDc2ODggICAgICAgICAgICAgIC8vICdqc29uJyAncGFyZW50JwogICAgICAgfHwgbGsgPT0gMTEwNzYwICAgICAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZycKICAgICAgIHx8IGxrID09IDExMTI3MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmctc2libGluZycKICAgICAgIHx8IGxrID09IDExMjgwOCAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICAgfHwgbGsgPT0gMTEzODMyICAgICAgICAgICAgICAvLyAnanNvbicgJ3JlbmFtZScKICAgICAgIHx8IGxrID09IDExNDM0NCAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXBsYWNlJwogICAgICAgfHwgbGsgPT0gMTE0ODU2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldHVybicKICAgICAgIHx8IGxrID09IDExNTM2OCAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm5pbmcnCiAgICAgICB8fCBsayA9PSAxMTU4ODAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV2YWxpZGF0aW9uJwogICAgICAgfHwgbGsgPT0gMTE2OTA0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NhdGlzZmllcycKICAgICAgIHx8IGxrID09IDExNzQxNiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEnCiAgICAgICB8fCBsayA9PSAxMTc5MjggICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgIHx8IGxrID09IDExODQ0MCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtZWxlbWVudCcKICAgICAgIHx8IGxrID09IDExODk1MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY29yZScKICAgICAgIHx8IGxrID09IDExOTQ2NCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzZWxlY3QnCiAgICAgICB8fCBsayA9PSAxMTk5NzYgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZicKICAgICAgIHx8IGxrID09IDEyMjUzNiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzbGlkaW5nJwogICAgICAgfHwgbGsgPT0gMTIzMDQ4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NvbWUnCiAgICAgICB8fCBsayA9PSAxMjM1NjAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RhYmxlJwogICAgICAgfHwgbGsgPT0gMTI0MDcyICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YXJ0JwogICAgICAgfHwgbGsgPT0gMTI1NjA4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0cmljdCcKICAgICAgIHx8IGxrID09IDEyNjYzMiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgICB8fCBsayA9PSAxMjcxNDQgICAgICAgICAgICAgIC8vICdqc29uJyAnc3dpdGNoJwogICAgICAgfHwgbGsgPT0gMTI3NjU2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3RleHQnCiAgICAgICB8fCBsayA9PSAxMjk3MDQgICAgICAgICAgICAgIC8vICdqc29uJyAndG8nCiAgICAgICB8fCBsayA9PSAxMzAyMTYgICAgICAgICAgICAgIC8vICdqc29uJyAndHJlYXQnCiAgICAgICB8fCBsayA9PSAxMzA3MjggICAgICAgICAgICAgIC8vICdqc29uJyAndHJ1ZScKICAgICAgIHx8IGxrID09IDEzMTI0MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cnknCiAgICAgICB8fCBsayA9PSAxMzE3NTIgICAgICAgICAgICAgIC8vICdqc29uJyAndHVtYmxpbmcnCiAgICAgICB8fCBsayA9PSAxMzIyNjQgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZScKICAgICAgIHx8IGxrID09IDEzMjc3NiAgICAgICAgICAgICAgLy8gJ2pzb24nICd0eXBlc3dpdGNoJwogICAgICAgfHwgbGsgPT0gMTMzMjg4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3VuaW9uJwogICAgICAgfHwgbGsgPT0gMTM0MzEyICAgICAgICAgICAgICAvLyAnanNvbicgJ3Vub3JkZXJlZCcKICAgICAgIHx8IGxrID09IDEzNDgyNCAgICAgICAgICAgICAgLy8gJ2pzb24nICd1cGRhdGluZycKICAgICAgIHx8IGxrID09IDEzNjM2MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YWxpZGF0ZScKICAgICAgIHx8IGxrID09IDEzNjg3MiAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YWx1ZScKICAgICAgIHx8IGxrID09IDEzNzM4NCAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YXJpYWJsZScKICAgICAgIHx8IGxrID09IDEzNzg5NiAgICAgICAgICAgICAgLy8gJ2pzb24nICd2ZXJzaW9uJwogICAgICAgfHwgbGsgPT0gMTM5NDMyICAgICAgICAgICAgICAvLyAnanNvbicgJ3doZXJlJwogICAgICAgfHwgbGsgPT0gMTM5OTQ0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3doaWxlJwogICAgICAgfHwgbGsgPT0gMTQxNDgwICAgICAgICAgICAgICAvLyAnanNvbicgJ3dpdGgnCiAgICAgICB8fCBsayA9PSAxNDQwNDAgICAgICAgICAgICAgIC8vICdqc29uJyAneycKICAgICAgIHx8IGxrID09IDE0NTA2NCkgICAgICAgICAgICAgLy8gJ2pzb24nICd7fCcKICAgICAgewogICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgbG9va2FoZWFkMlcoNzIpOyAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDExMDE2MikgICAgICAgICAgICAgLy8gJ2F0JyAncG9zaXRpb24nCiAgICAgIHsKICAgICAgICBsayA9IG1lbW9pemVkKDE0LCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQiA9IGIwOyB2YXIgZTBCID0gZTA7IHZhciBsMUIgPSBsMTsKICAgICAgICAgIHZhciBiMUIgPSBiMTsgdmFyIGUxQiA9IGUxOyB2YXIgbDJCID0gbDI7CiAgICAgICAgICB2YXIgYjJCID0gYjI7IHZhciBlMkIgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoODIpOyAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgICAgIGxvb2thaGVhZDFXKDcyKTsgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgICAgICBzaGlmdFQoMjE1KTsgICAgICAgICAgICAvLyAncG9zaXRpb24nCiAgICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgICAgIG1lbW9pemUoMTQsIGUwQiwgLTEpOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgIHsKICAgICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgICAgYjEgPSBiMUI7IGUxID0gZTFCOyBsMiA9IGwyQjsgaWYgKGwyID09IDApIHtlbmQgPSBlMUI7fSBlbHNlIHsKICAgICAgICAgICAgYjIgPSBiMkI7IGUyID0gZTJCOyBlbmQgPSBlMkI7IH19CiAgICAgICAgICAgIG1lbW9pemUoMTQsIGUwQiwgLTIpOwogICAgICAgICAgfQogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxrID09IC0xKQogICAgICB7CiAgICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICBsb29rYWhlYWQxVyg3Mik7ICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgc2hpZnRUKDIxNSk7ICAgICAgICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMzoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTYxKTsgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBsb29rYWhlYWQxVygyNjcpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICAgIGxvb2thaGVhZDJXKDI4MSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDE4MDg4KSAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgxNSwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEIgPSBiMDsgdmFyIGUwQiA9IGUwOyB2YXIgbDFCID0gbDE7CiAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICAgIG1lbW9pemUoMTUsIGUwQiwgLTEpOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgIHsKICAgICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgICAgYjEgPSBiMUI7IGUxID0gZTFCOyBsMiA9IGwyQjsgaWYgKGwyID09IDApIHtlbmQgPSBlMUI7fSBlbHNlIHsKICAgICAgICAgICAgYjIgPSBiMkI7IGUyID0gZTJCOyBlbmQgPSBlMkI7IH19CiAgICAgICAgICAgIG1lbW9pemUoMTUsIGUwQiwgLTIpOwogICAgICAgICAgfQogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxrID09IC0xCiAgICAgICB8fCBsayA9PSAzMjQwICAgICAgICAgICAgICAgIC8vICdqc29uJyBFUU5hbWVeVG9rZW4KICAgICAgIHx8IGxrID09IDQyNjQgICAgICAgICAgICAgICAgLy8gJ2pzb24nIEludGVnZXJMaXRlcmFsCiAgICAgICB8fCBsayA9PSA0Nzc2ICAgICAgICAgICAgICAgIC8vICdqc29uJyBEZWNpbWFsTGl0ZXJhbAogICAgICAgfHwgbGsgPT0gNTI4OCAgICAgICAgICAgICAgICAvLyAnanNvbicgRG91YmxlTGl0ZXJhbAogICAgICAgfHwgbGsgPT0gNTgwMCAgICAgICAgICAgICAgICAvLyAnanNvbicgU3RyaW5nTGl0ZXJhbAogICAgICAgfHwgbGsgPT0gOTg5NiAgICAgICAgICAgICAgICAvLyAnanNvbicgTkNOYW1lXlRva2VuCiAgICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnJCcKICAgICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJCcKICAgICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICclJwogICAgICAgfHwgbGsgPT0gMTg2MDAgICAgICAgICAgICAgICAvLyAnanNvbicgJygjJwogICAgICAgfHwgbGsgPT0gMjExNjAgICAgICAgICAgICAgICAvLyAnanNvbicgJysnCiAgICAgICB8fCBsayA9PSAyMjE4NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnLScKICAgICAgIHx8IGxrID09IDI0MjMyICAgICAgICAgICAgICAgLy8gJ2pzb24nICcvJwogICAgICAgfHwgbGsgPT0gMjQ3NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJy8vJwogICAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgICAgICAvLyAnanNvbicgJzwnCiAgICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCEtLScKICAgICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8PycKICAgICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdbJwogICAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FmdGVyJwogICAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FsbG93aW5nJwogICAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yJwogICAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5kJwogICAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FwcGVuZCcKICAgICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcnJheScKICAgICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcycKICAgICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhc2NlbmRpbmcnCiAgICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXQnCiAgICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXR0cmlidXRlJwogICAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Jhc2UtdXJpJwogICAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgICAgICAvLyAnanNvbicgJ2JlZm9yZScKICAgICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdib3VuZGFyeS1zcGFjZScKICAgICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdicmVhaycKICAgICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXNlJwogICAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc3QnCiAgICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdGFibGUnCiAgICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2F0Y2gnCiAgICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2hpbGQnCiAgICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29sbGF0aW9uJwogICAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbW1lbnQnCiAgICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29uc3RyYWludCcKICAgICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJ1Y3Rpb24nCiAgICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29udGV4dCcKICAgICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250aW51ZScKICAgICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3B5JwogICAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHktbmFtZXNwYWNlcycKICAgICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3VudCcKICAgICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNpbWFsLWZvcm1hdCcKICAgICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNsYXJlJwogICAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlZmF1bHQnCiAgICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVsZXRlJwogICAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRhbnQnCiAgICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRpbmcnCiAgICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGl2JwogICAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50JwogICAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50LW5vZGUnCiAgICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZWxlbWVudCcKICAgICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbHNlJwogICAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5JwogICAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5LXNlcXVlbmNlJwogICAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuY29kaW5nJwogICAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuZCcKICAgICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlcScKICAgICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdldmVyeScKICAgICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGNlcHQnCiAgICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXhpdCcKICAgICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleHRlcm5hbCcKICAgICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmYWxzZScKICAgICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmaXJzdCcKICAgICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmcnCiAgICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9yJwogICAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Zyb20nCiAgICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnQtb3B0aW9uJwogICAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Z1bmN0aW9uJwogICAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2dlJwogICAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgICAgICAvLyAnanNvbicgJ2dyb3VwJwogICAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2d0JwogICAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgICAgICAvLyAnanNvbicgJ2lkaXYnCiAgICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWYnCiAgICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW1wb3J0JwogICAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luJwogICAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luZGV4JwogICAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc2VydCcKICAgICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnN0YW5jZScKICAgICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlZ3JpdHknCiAgICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50ZXJzZWN0JwogICAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludG8nCiAgICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXMnCiAgICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXRlbScKICAgICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uJwogICAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24taXRlbScKICAgICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uaXEnCiAgICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGFzdCcKICAgICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXgnCiAgICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGUnCiAgICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGV0JwogICAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xvb3AnCiAgICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbHQnCiAgICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kJwogICAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZGlmeScKICAgICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2R1bGUnCiAgICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlJwogICAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgICAgICAvLyAnanNvbicgJ25hbWVzcGFjZS1ub2RlJwogICAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgICAgICAvLyAnanNvbicgJ25lJwogICAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgICAgICAvLyAnanNvbicgJ25vZGUnCiAgICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZXMnCiAgICAgICB8fCBsayA9PSAxMDA1MjAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm90JwogICAgICAgfHwgbGsgPT0gMTAxMDMyICAgICAgICAgICAgICAvLyAnanNvbicgJ251bGwnCiAgICAgICB8fCBsayA9PSAxMDE1NDQgICAgICAgICAgICAgIC8vICdqc29uJyAnb2JqZWN0JwogICAgICAgfHwgbGsgPT0gMTAzNTkyICAgICAgICAgICAgICAvLyAnanNvbicgJ29ubHknCiAgICAgICB8fCBsayA9PSAxMDQxMDQgICAgICAgICAgICAgIC8vICdqc29uJyAnb3B0aW9uJwogICAgICAgfHwgbGsgPT0gMTA0NjE2ICAgICAgICAgICAgICAvLyAnanNvbicgJ29yJwogICAgICAgfHwgbGsgPT0gMTA1MTI4ICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyJwogICAgICAgfHwgbGsgPT0gMTA1NjQwICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyZWQnCiAgICAgICB8fCBsayA9PSAxMDYxNTIgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJpbmcnCiAgICAgICB8fCBsayA9PSAxMDc2ODggICAgICAgICAgICAgIC8vICdqc29uJyAncGFyZW50JwogICAgICAgfHwgbGsgPT0gMTEwNzYwICAgICAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZycKICAgICAgIHx8IGxrID09IDExMTI3MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmctc2libGluZycKICAgICAgIHx8IGxrID09IDExMjgwOCAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICAgfHwgbGsgPT0gMTEzODMyICAgICAgICAgICAgICAvLyAnanNvbicgJ3JlbmFtZScKICAgICAgIHx8IGxrID09IDExNDM0NCAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXBsYWNlJwogICAgICAgfHwgbGsgPT0gMTE0ODU2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldHVybicKICAgICAgIHx8IGxrID09IDExNTM2OCAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm5pbmcnCiAgICAgICB8fCBsayA9PSAxMTU4ODAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV2YWxpZGF0aW9uJwogICAgICAgfHwgbGsgPT0gMTE2OTA0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NhdGlzZmllcycKICAgICAgIHx8IGxrID09IDExNzQxNiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEnCiAgICAgICB8fCBsayA9PSAxMTc5MjggICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgIHx8IGxrID09IDExODQ0MCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtZWxlbWVudCcKICAgICAgIHx8IGxrID09IDExODk1MiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY29yZScKICAgICAgIHx8IGxrID09IDExOTQ2NCAgICAgICAgICAgICAgLy8gJ2pzb24nICdzZWxlY3QnCiAgICAgICB8fCBsayA9PSAxMTk5NzYgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZicKICAgICAgIHx8IGxrID09IDEyMjUzNiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzbGlkaW5nJwogICAgICAgfHwgbGsgPT0gMTIzMDQ4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3NvbWUnCiAgICAgICB8fCBsayA9PSAxMjM1NjAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RhYmxlJwogICAgICAgfHwgbGsgPT0gMTI0MDcyICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YXJ0JwogICAgICAgfHwgbGsgPT0gMTI1NjA4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0cmljdCcKICAgICAgIHx8IGxrID09IDEyNjYzMiAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgICB8fCBsayA9PSAxMjcxNDQgICAgICAgICAgICAgIC8vICdqc29uJyAnc3dpdGNoJwogICAgICAgfHwgbGsgPT0gMTI3NjU2ICAgICAgICAgICAgICAvLyAnanNvbicgJ3RleHQnCiAgICAgICB8fCBsayA9PSAxMjk3MDQgICAgICAgICAgICAgIC8vICdqc29uJyAndG8nCiAgICAgICB8fCBsayA9PSAxMzAyMTYgICAgICAgICAgICAgIC8vICdqc29uJyAndHJlYXQnCiAgICAgICB8fCBsayA9PSAxMzA3MjggICAgICAgICAgICAgIC8vICdqc29uJyAndHJ1ZScKICAgICAgIHx8IGxrID09IDEzMTI0MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cnknCiAgICAgICB8fCBsayA9PSAxMzE3NTIgICAgICAgICAgICAgIC8vICdqc29uJyAndHVtYmxpbmcnCiAgICAgICB8fCBsayA9PSAxMzIyNjQgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZScKICAgICAgIHx8IGxrID09IDEzMjc3NiAgICAgICAgICAgICAgLy8gJ2pzb24nICd0eXBlc3dpdGNoJwogICAgICAgfHwgbGsgPT0gMTMzMjg4ICAgICAgICAgICAgICAvLyAnanNvbicgJ3VuaW9uJwogICAgICAgfHwgbGsgPT0gMTM0MzEyICAgICAgICAgICAgICAvLyAnanNvbicgJ3Vub3JkZXJlZCcKICAgICAgIHx8IGxrID09IDEzNDgyNCAgICAgICAgICAgICAgLy8gJ2pzb24nICd1cGRhdGluZycKICAgICAgIHx8IGxrID09IDEzNjM2MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YWxpZGF0ZScKICAgICAgIHx8IGxrID09IDEzNjg3MiAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YWx1ZScKICAgICAgIHx8IGxrID09IDEzNzM4NCAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YXJpYWJsZScKICAgICAgIHx8IGxrID09IDEzNzg5NiAgICAgICAgICAgICAgLy8gJ2pzb24nICd2ZXJzaW9uJwogICAgICAgfHwgbGsgPT0gMTM5NDMyICAgICAgICAgICAgICAvLyAnanNvbicgJ3doZXJlJwogICAgICAgfHwgbGsgPT0gMTM5OTQ0ICAgICAgICAgICAgICAvLyAnanNvbicgJ3doaWxlJwogICAgICAgfHwgbGsgPT0gMTQxNDgwICAgICAgICAgICAgICAvLyAnanNvbicgJ3dpdGgnCiAgICAgICB8fCBsayA9PSAxNDQwNDAgICAgICAgICAgICAgIC8vICdqc29uJyAneycKICAgICAgIHx8IGxrID09IDE0NTA2NCkgICAgICAgICAgICAgLy8gJ2pzb24nICd7fCcKICAgICAgewogICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjcpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfUGFpckNvbnN0cnVjdG9yTGlzdCgpOwogICAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0pTT05SZW5hbWVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSlNPTlJlbmFtZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgyMjIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgbG9va2FoZWFkMlcoMjYwKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDE4MDg4KSAgICAgICAgICAgICAgICAvLyAnanNvbicgJygnCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTYsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgIG1lbW9pemUoMTYsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIGlmIChsayA9PSAtMQogICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICB8fCBsayA9PSAxMDEwMzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdudWxsJwogICAgIHx8IGxrID09IDEwMTU0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29iamVjdCcKICAgICB8fCBsayA9PSAxMDM1OTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvbmx5JwogICAgIHx8IGxrID09IDEwNDEwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDQ2MTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcicKICAgICB8fCBsayA9PSAxMDUxMjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcicKICAgICB8fCBsayA9PSAxMDU2NDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwNjE1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyaW5nJwogICAgIHx8IGxrID09IDEwNzY4OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMTA3NjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTExMjcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEyODA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTM4MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTE0MzQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTQ4NTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE1MzY4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExNTg4MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTY5MDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE3NDE2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNzkyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE4NDQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE4OTUyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE5NDY0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZWN0JwogICAgIHx8IGxrID09IDExOTk3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGYnCiAgICAgfHwgbGsgPT0gMTIyNTM2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2xpZGluZycKICAgICB8fCBsayA9PSAxMjMwNDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzb21lJwogICAgIHx8IGxrID09IDEyMzU2MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjQwNzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFydCcKICAgICB8fCBsayA9PSAxMjU2MDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJpY3QnCiAgICAgfHwgbGsgPT0gMTI2NjMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RydWN0dXJlZC1pdGVtJwogICAgIHx8IGxrID09IDEyNzE0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N3aXRjaCcKICAgICB8fCBsayA9PSAxMjc2NTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0ZXh0JwogICAgIHx8IGxrID09IDEyOTcwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RvJwogICAgIHx8IGxrID09IDEzMDIxNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyZWF0JwogICAgIHx8IGxrID09IDEzMDcyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RydWUnCiAgICAgfHwgbGsgPT0gMTMxMjQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHJ5JwogICAgIHx8IGxrID09IDEzMTc1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R1bWJsaW5nJwogICAgIHx8IGxrID09IDEzMjI2NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTMyNzc2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMzMyODggICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bmlvbicKICAgICB8fCBsayA9PSAxMzQzMTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTM0ODI0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTM2MzYwICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTM2ODcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM3Mzg0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM3ODk2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzk0MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk5NDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGlsZScKICAgICB8fCBsayA9PSAxNDE0ODAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aXRoJwogICAgIHx8IGxrID09IDE0NDA0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3snCiAgICAgfHwgbGsgPT0gMTQ1MDY0KSAgICAgICAgICAgICAgIC8vICdqc29uJyAne3wnCiAgICB7CiAgICAgIHNoaWZ0KDE2OCk7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgfQogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfUG9zdGZpeEV4cHIoKTsKICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJKU09OUmVuYW1lRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9KU09OUmVuYW1lRXhwcigpCiAgewogICAgc2hpZnRUKDIyMik7ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGxvb2thaGVhZDJXKDI2MCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAxODA4OCkgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgewogICAgICBsayA9IG1lbW9pemVkKDE2LCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICBtZW1vaXplKDE2LCBlMEEsIC0xKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSgxNiwgZTBBLCAtMik7CiAgICAgICAgfQogICAgICAgIGxrID0gLTI7CiAgICAgIH0KICAgIH0KICAgIGlmIChsayA9PSAtMQogICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICB8fCBsayA9PSAxMDEwMzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdudWxsJwogICAgIHx8IGxrID09IDEwMTU0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29iamVjdCcKICAgICB8fCBsayA9PSAxMDM1OTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvbmx5JwogICAgIHx8IGxrID09IDEwNDEwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDQ2MTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcicKICAgICB8fCBsayA9PSAxMDUxMjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcicKICAgICB8fCBsayA9PSAxMDU2NDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwNjE1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyaW5nJwogICAgIHx8IGxrID09IDEwNzY4OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMTA3NjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTExMjcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEyODA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTM4MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTE0MzQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTQ4NTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE1MzY4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExNTg4MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTY5MDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE3NDE2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNzkyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE4NDQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE4OTUyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE5NDY0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZWN0JwogICAgIHx8IGxrID09IDExOTk3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGYnCiAgICAgfHwgbGsgPT0gMTIyNTM2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2xpZGluZycKICAgICB8fCBsayA9PSAxMjMwNDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzb21lJwogICAgIHx8IGxrID09IDEyMzU2MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjQwNzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFydCcKICAgICB8fCBsayA9PSAxMjU2MDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJpY3QnCiAgICAgfHwgbGsgPT0gMTI2NjMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RydWN0dXJlZC1pdGVtJwogICAgIHx8IGxrID09IDEyNzE0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N3aXRjaCcKICAgICB8fCBsayA9PSAxMjc2NTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0ZXh0JwogICAgIHx8IGxrID09IDEyOTcwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RvJwogICAgIHx8IGxrID09IDEzMDIxNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyZWF0JwogICAgIHx8IGxrID09IDEzMDcyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RydWUnCiAgICAgfHwgbGsgPT0gMTMxMjQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHJ5JwogICAgIHx8IGxrID09IDEzMTc1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R1bWJsaW5nJwogICAgIHx8IGxrID09IDEzMjI2NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTMyNzc2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMzMyODggICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bmlvbicKICAgICB8fCBsayA9PSAxMzQzMTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTM0ODI0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTM2MzYwICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTM2ODcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM3Mzg0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM3ODk2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzk0MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGVyZScKICAgICB8fCBsayA9PSAxMzk5NDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aGlsZScKICAgICB8fCBsayA9PSAxNDE0ODAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd3aXRoJwogICAgIHx8IGxrID09IDE0NDA0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3snCiAgICAgfHwgbGsgPT0gMTQ1MDY0KSAgICAgICAgICAgICAgIC8vICdqc29uJyAne3wnCiAgICB7CiAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgfQogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1Bvc3RmaXhFeHByKCk7CiAgICBzaGlmdFQoODApOyAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OUmVwbGFjZUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OUmVwbGFjZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgyMjMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgbG9va2FoZWFkMVcoODUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd2YWx1ZScKICAgIHNoaWZ0KDI2Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgbG9va2FoZWFkMVcoNjcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvZicKICAgIHNoaWZ0KDIwMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29mJwogICAgbG9va2FoZWFkMVcoNTkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdqc29uJwogICAgc2hpZnQoMTY4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Bvc3RmaXhFeHByKCk7CiAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJKU09OUmVwbGFjZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTlJlcGxhY2VFeHByKCkKICB7CiAgICBzaGlmdFQoMjIzKTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgbG9va2FoZWFkMVcoODUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd2YWx1ZScKICAgIHNoaWZ0VCgyNjcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgbG9va2FoZWFkMVcoNjcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvZicKICAgIHNoaWZ0VCgyMDApOyAgICAgICAgICAgICAgICAgICAgLy8gJ29mJwogICAgbG9va2FoZWFkMVcoNTkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdqc29uJwogICAgc2hpZnRUKDE2OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9Qb3N0Zml4RXhwcigpOwogICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OQXBwZW5kRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05BcHBlbmRFeHByIiwgZTApOwogICAgc2hpZnQoNzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAxODA4OCkgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgewogICAgICBsayA9IG1lbW9pemVkKDE3LCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDE3LCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBpZiAobGsgPT0gLTEKICAgICB8fCBsayA9PSAzMjQwICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDQyNjQgICAgICAgICAgICAgICAgICAvLyAnanNvbicgSW50ZWdlckxpdGVyYWwKICAgICB8fCBsayA9PSA0Nzc2ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERlY2ltYWxMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTI4OCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBEb3VibGVMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTgwMCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBTdHJpbmdMaXRlcmFsCiAgICAgfHwgbGsgPT0gMTYwNDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnJCcKICAgICB8fCBsayA9PSAxNjU1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJCcKICAgICB8fCBsayA9PSAxNzA2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICclJwogICAgIHx8IGxrID09IDE4NjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJygjJwogICAgIHx8IGxrID09IDIxMTYwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJysnCiAgICAgfHwgbGsgPT0gMjIxODQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnLScKICAgICB8fCBsayA9PSAyNDIzMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcvJwogICAgIHx8IGxrID09IDI0NzQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJy8vJwogICAgIHx8IGxrID09IDI4MzI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzwnCiAgICAgfHwgbGsgPT0gMjg4NDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCEtLScKICAgICB8fCBsayA9PSAzMDg4OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8PycKICAgICB8fCBsayA9PSAzNTQ5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdbJwogICAgIHx8IGxrID09IDM2NTIwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FmdGVyJwogICAgIHx8IGxrID09IDM3NTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM4MDU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yJwogICAgIHx8IGxrID09IDM4NTY4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzkwODAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5kJwogICAgIHx8IGxrID09IDQwMTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FwcGVuZCcKICAgICB8fCBsayA9PSA0MDYxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcnJheScKICAgICB8fCBsayA9PSA0MTEyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhcycKICAgICB8fCBsayA9PSA0MTY0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDIxNTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXQnCiAgICAgfHwgbGsgPT0gNDI2NjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQzMTc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Jhc2UtdXJpJwogICAgIHx8IGxrID09IDQzNjg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0NDIwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdib3VuZGFyeS1zcGFjZScKICAgICB8fCBsayA9PSA0NDcxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdicmVhaycKICAgICB8fCBsayA9PSA0NTczNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXNlJwogICAgIHx8IGxrID09IDQ2MjQ4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDY3NjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDcyNzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDgyOTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDg4MDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ5ODMyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNTAzNDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA1MDg1NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTIzOTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MjkwNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250aW51ZScKICAgICB8fCBsayA9PSA1MzQxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3B5JwogICAgIHx8IGxrID09IDUzOTI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1NDQ0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb3VudCcKICAgICB8fCBsayA9PSA1NDk1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNpbWFsLWZvcm1hdCcKICAgICB8fCBsayA9PSA1NTk3NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU2NDg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTcwMDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU3NTEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTgwMjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU4NTM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjEwOTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGl2JwogICAgIHx8IGxrID09IDYxNjA4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50JwogICAgIHx8IGxrID09IDYyMTIwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjI2MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2MzE0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbHNlJwogICAgIHx8IGxrID09IDYzNjU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5JwogICAgIHx8IGxrID09IDY0MTY4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VtcHR5LXNlcXVlbmNlJwogICAgIHx8IGxrID09IDY0NjgwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuY29kaW5nJwogICAgIHx8IGxrID09IDY1MTkyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VuZCcKICAgICB8fCBsayA9PSA2NjIxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlcScKICAgICB8fCBsayA9PSA2NjcyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdldmVyeScKICAgICB8fCBsayA9PSA2Nzc1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjgyNjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZXhpdCcKICAgICB8fCBsayA9PSA2ODc3NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2OTI4OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmYWxzZScKICAgICB8fCBsayA9PSA2OTgwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmaXJzdCcKICAgICB8fCBsayA9PSA3MDMxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNzA4MjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzEzMzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZm9yJwogICAgIHx8IGxrID09IDcyODcyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Zyb20nCiAgICAgfHwgbGsgPT0gNzMzODQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnQtb3B0aW9uJwogICAgIHx8IGxrID09IDc1NDMyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Z1bmN0aW9uJwogICAgIHx8IGxrID09IDc1OTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2dlJwogICAgIHx8IGxrID09IDc2OTY4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2dyb3VwJwogICAgIHx8IGxrID09IDc3OTkyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2d0JwogICAgIHx8IGxrID09IDc4NTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzkwMTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWYnCiAgICAgfHwgbGsgPT0gNzk1MjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW1wb3J0JwogICAgIHx8IGxrID09IDgwMDQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luJwogICAgIHx8IGxrID09IDgwNTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luZGV4JwogICAgIHx8IGxrID09IDgyNjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc2VydCcKICAgICB8fCBsayA9PSA4MzExMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzYyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlZ3JpdHknCiAgICAgfHwgbGsgPT0gODQxMzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0NjQ4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludG8nCiAgICAgfHwgbGsgPT0gODUxNjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXMnCiAgICAgfHwgbGsgPT0gODU2NzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaXRlbScKICAgICB8fCBsayA9PSA4NjE4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uJwogICAgIHx8IGxrID09IDg2Njk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24taXRlbScKICAgICB8fCBsayA9PSA4NzIwOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdqc29uaXEnCiAgICAgfHwgbGsgPT0gODg3NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGFzdCcKICAgICB8fCBsayA9PSA4OTI1NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXgnCiAgICAgfHwgbGsgPT0gODk3NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGUnCiAgICAgfHwgbGsgPT0gOTA3OTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbGV0JwogICAgIHx8IGxrID09IDkxODE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTI4NDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbHQnCiAgICAgfHwgbGsgPT0gOTM4NjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kJwogICAgIHx8IGxrID09IDk0Mzc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NDg4OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTU5MTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk2NDI0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ25hbWVzcGFjZS1ub2RlJwogICAgIHx8IGxrID09IDk2OTM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ25lJwogICAgIHx8IGxrID09IDk5NDk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ25vZGUnCiAgICAgfHwgbGsgPT0gMTAwMDA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gMTAwNTIwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm90JwogICAgIHx8IGxrID09IDEwMTAzMiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ251bGwnCiAgICAgfHwgbGsgPT0gMTAxNTQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb2JqZWN0JwogICAgIHx8IGxrID09IDEwMzU5MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29ubHknCiAgICAgfHwgbGsgPT0gMTA0MTA0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwNDYxNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29yJwogICAgIHx8IGxrID09IDEwNTEyOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyJwogICAgIHx8IGxrID09IDEwNTY0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTA2MTUyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA3Njg4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncGFyZW50JwogICAgIHx8IGxrID09IDExMDc2MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMTEyNzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcmVjZWRpbmctc2libGluZycKICAgICB8fCBsayA9PSAxMTI4MDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMzgzMiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTQzNDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExNDg1NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTUzNjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTE1ODgwICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExNjkwNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTc0MTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE3OTI4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTg0NDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtZWxlbWVudCcKICAgICB8fCBsayA9PSAxMTg5NTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY29yZScKICAgICB8fCBsayA9PSAxMTk0NjQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzZWxlY3QnCiAgICAgfHwgbGsgPT0gMTE5OTc2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2VsZicKICAgICB8fCBsayA9PSAxMjI1MzYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMzA0OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIzNTYwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyNDA3MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNTYwOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjY2MzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI3MTQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNzY1NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI5NzA0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndG8nCiAgICAgfHwgbGsgPT0gMTMwMjE2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwNzI4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHJ1ZScKICAgICB8fCBsayA9PSAxMzEyNDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cnknCiAgICAgfHwgbGsgPT0gMTMxNzUyICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTMyMjY0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndHlwZScKICAgICB8fCBsayA9PSAxMzI3NzYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEzMzI4OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzNDMxMiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzQ4MjQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd1cGRhdGluZycKICAgICB8fCBsayA9PSAxMzYzNjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YWxpZGF0ZScKICAgICB8fCBsayA9PSAxMzY4NzIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YWx1ZScKICAgICB8fCBsayA9PSAxMzczODQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd2YXJpYWJsZScKICAgICB8fCBsayA9PSAxMzc4OTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzOTQzMiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3doZXJlJwogICAgIHx8IGxrID09IDEzOTk0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3doaWxlJwogICAgIHx8IGxrID09IDE0MTQ4MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQ0MDQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAneycKICAgICB8fCBsayA9PSAxNDUwNjQpICAgICAgICAgICAgICAgLy8gJ2pzb24nICd7fCcKICAgIHsKICAgICAgc2hpZnQoMTY4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdCgxNjUpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJKU09OQXBwZW5kRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9KU09OQXBwZW5kRXhwcigpCiAgewogICAgc2hpZnRUKDc4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAxODA4OCkgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgewogICAgICBsayA9IG1lbW9pemVkKDE3LCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHNoaWZ0VCgxNjgpOyAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgICBtZW1vaXplKDE3LCBlMEEsIC0xKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSgxNywgZTBBLCAtMik7CiAgICAgICAgfQogICAgICAgIGxrID0gLTI7CiAgICAgIH0KICAgIH0KICAgIGlmIChsayA9PSAtMQogICAgIHx8IGxrID09IDMyNDAgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gNDI2NCAgICAgICAgICAgICAgICAgIC8vICdqc29uJyBJbnRlZ2VyTGl0ZXJhbAogICAgIHx8IGxrID09IDQ3NzYgICAgICAgICAgICAgICAgICAvLyAnanNvbicgRGVjaW1hbExpdGVyYWwKICAgICB8fCBsayA9PSA1Mjg4ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIERvdWJsZUxpdGVyYWwKICAgICB8fCBsayA9PSA1ODAwICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nIFN0cmluZ0xpdGVyYWwKICAgICB8fCBsayA9PSAxNjA0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICckJwogICAgIHx8IGxrID09IDE2NTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyQkJwogICAgIHx8IGxrID09IDE3MDY0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJyUnCiAgICAgfHwgbGsgPT0gMTg2MDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnKCMnCiAgICAgfHwgbGsgPT0gMjExNjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnKycKICAgICB8fCBsayA9PSAyMjE4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICctJwogICAgIHx8IGxrID09IDI0MjMyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJy8nCiAgICAgfHwgbGsgPT0gMjQ3NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnLy8nCiAgICAgfHwgbGsgPT0gMjgzMjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnPCcKICAgICB8fCBsayA9PSAyODg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc8IS0tJwogICAgIHx8IGxrID09IDMwODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzw/JwogICAgIHx8IGxrID09IDM1NDk2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ1snCiAgICAgfHwgbGsgPT0gMzY1MjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzc1NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzgwNTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzg1NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzOTA4MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhbmQnCiAgICAgfHwgbGsgPT0gNDAxMDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDQwNjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FycmF5JwogICAgIHx8IGxrID09IDQxMTI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzJwogICAgIHx8IGxrID09IDQxNjQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjE1MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdCcKICAgICB8fCBsayA9PSA0MjY2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDMxNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDM2ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ0MjAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JvdW5kYXJ5LXNwYWNlJwogICAgIHx8IGxrID09IDQ0NzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2JyZWFrJwogICAgIHx8IGxrID09IDQ1NzM2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYyNDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY2FzdCcKICAgICB8fCBsayA9PSA0Njc2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NzI3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjYXRjaCcKICAgICB8fCBsayA9PSA0ODI5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjaGlsZCcKICAgICB8fCBsayA9PSA0ODgwOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDk4MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA1MDM0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDUwODU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MjM5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdjb250ZXh0JwogICAgIHx8IGxrID09IDUyOTA0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvbnRpbnVlJwogICAgIHx8IGxrID09IDUzNDE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTM5MjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDU0NDQwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2NvdW50JwogICAgIHx8IGxrID09IDU0OTUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2ltYWwtZm9ybWF0JwogICAgIHx8IGxrID09IDU1OTc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTY0ODggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NzAwMCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTc1MTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1ODAyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTg1MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTA5NiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdkaXYnCiAgICAgfHwgbGsgPT0gNjE2MDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjIxMjAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MjYzMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdlbGVtZW50JwogICAgIHx8IGxrID09IDYzMTQ0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM2NTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQxNjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQ2ODAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjUxOTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZW5kJwogICAgIHx8IGxrID09IDY2MjE2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2VxJwogICAgIHx8IGxrID09IDY2NzI4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V2ZXJ5JwogICAgIHx8IGxrID09IDY3NzUyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODI2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdleGl0JwogICAgIHx8IGxrID09IDY4Nzc2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY5Mjg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZhbHNlJwogICAgIHx8IGxrID09IDY5ODAwICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZpcnN0JwogICAgIHx8IGxrID09IDcwMzEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA3MDgyNCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb2xsb3dpbmctc2libGluZycKICAgICB8fCBsayA9PSA3MTMzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmb3InCiAgICAgfHwgbGsgPT0gNzI4NzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnJvbScKICAgICB8fCBsayA9PSA3MzM4NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzU0MzIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzU5NDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzY5NjggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzc5OTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzg1MDQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaWRpdicKICAgICB8fCBsayA9PSA3OTAxNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpZicKICAgICB8fCBsayA9PSA3OTUyOCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gODAwNDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW4nCiAgICAgfHwgbGsgPT0gODA1NTIgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODI2MDAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgzMTEyICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzNjI0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4NDEzNiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ2NDggICAgICAgICAgICAgICAgIC8vICdqc29uJyAnaW50bycKICAgICB8fCBsayA9PSA4NTE2MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpcycKICAgICB8fCBsayA9PSA4NTY3MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdpdGVtJwogICAgIHx8IGxrID09IDg2MTg0ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb24nCiAgICAgfHwgbGsgPT0gODY2OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MjA4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2pzb25pcScKICAgICB8fCBsayA9PSA4ODc0NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsYXN0JwogICAgIHx8IGxrID09IDg5MjU2ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ2xheCcKICAgICB8fCBsayA9PSA4OTc2OCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZScKICAgICB8fCBsayA9PSA5MDc5MiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsZXQnCiAgICAgfHwgbGsgPT0gOTE4MTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbG9vcCcKICAgICB8fCBsayA9PSA5Mjg0MCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdsdCcKICAgICB8fCBsayA9PSA5Mzg2NCAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdtb2QnCiAgICAgfHwgbGsgPT0gOTQzNzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk0ODg4ICAgICAgICAgICAgICAgICAvLyAnanNvbicgJ21vZHVsZScKICAgICB8fCBsayA9PSA5NTkxMiAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTY0MjQgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTY5MzYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbmUnCiAgICAgfHwgbGsgPT0gOTk0OTYgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbm9kZScKICAgICB8fCBsayA9PSAxMDAwMDggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdub2RlcycKICAgICB8fCBsayA9PSAxMDA1MjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdub3QnCiAgICAgfHwgbGsgPT0gMTAxMDMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnbnVsbCcKICAgICB8fCBsayA9PSAxMDE1NDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvYmplY3QnCiAgICAgfHwgbGsgPT0gMTAzNTkyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb25seScKICAgICB8fCBsayA9PSAxMDQxMDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcHRpb24nCiAgICAgfHwgbGsgPT0gMTA0NjE2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3InCiAgICAgfHwgbGsgPT0gMTA1MTI4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1NjQwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnb3JkZXJlZCcKICAgICB8fCBsayA9PSAxMDYxNTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdvcmRlcmluZycKICAgICB8fCBsayA9PSAxMDc2ODggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdwYXJlbnQnCiAgICAgfHwgbGsgPT0gMTEwNzYwICAgICAgICAgICAgICAgIC8vICdqc29uJyAncHJlY2VkaW5nJwogICAgIHx8IGxrID09IDExMTI3MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgIHx8IGxrID09IDExMjgwOCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gMTEzODMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmVuYW1lJwogICAgIHx8IGxrID09IDExNDM0NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JlcGxhY2UnCiAgICAgfHwgbGsgPT0gMTE0ODU2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNTM2OCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3JldHVybmluZycKICAgICB8fCBsayA9PSAxMTU4ODAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdyZXZhbGlkYXRpb24nCiAgICAgfHwgbGsgPT0gMTE2OTA0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNzQxNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYScKICAgICB8fCBsayA9PSAxMTc5MjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgIHx8IGxrID09IDExODQ0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NjaGVtYS1lbGVtZW50JwogICAgIHx8IGxrID09IDExODk1MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3Njb3JlJwogICAgIHx8IGxrID09IDExOTQ2NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NlbGVjdCcKICAgICB8fCBsayA9PSAxMTk5NzYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzZWxmJwogICAgIHx8IGxrID09IDEyMjUzNiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIzMDQ4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc29tZScKICAgICB8fCBsayA9PSAxMjM1NjAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTI0MDcyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI1NjA4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyNjYzMiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjcxNDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI3NjU2ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndGV4dCcKICAgICB8fCBsayA9PSAxMjk3MDQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0bycKICAgICB8fCBsayA9PSAxMzAyMTYgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzA3MjggICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0cnVlJwogICAgIHx8IGxrID09IDEzMTI0MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3RyeScKICAgICB8fCBsayA9PSAxMzE3NTIgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0dW1ibGluZycKICAgICB8fCBsayA9PSAxMzIyNjQgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd0eXBlJwogICAgIHx8IGxrID09IDEzMjc3NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3R5cGVzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTMzMjg4ICAgICAgICAgICAgICAgIC8vICdqc29uJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTM0MzEyICAgICAgICAgICAgICAgIC8vICdqc29uJyAndW5vcmRlcmVkJwogICAgIHx8IGxrID09IDEzNDgyNCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3VwZGF0aW5nJwogICAgIHx8IGxrID09IDEzNjM2MCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhbGlkYXRlJwogICAgIHx8IGxrID09IDEzNjg3MiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhbHVlJwogICAgIHx8IGxrID09IDEzNzM4NCAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZhcmlhYmxlJwogICAgIHx8IGxrID09IDEzNzg5NiAgICAgICAgICAgICAgICAvLyAnanNvbicgJ3ZlcnNpb24nCiAgICAgfHwgbGsgPT0gMTM5NDMyICAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM5OTQ0ICAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTQxNDgwICAgICAgICAgICAgICAgIC8vICdqc29uJyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDQwNDAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICd7JwogICAgIHx8IGxrID09IDE0NTA2NCkgICAgICAgICAgICAgICAvLyAnanNvbicgJ3t8JwogICAgewogICAgICBzaGlmdFQoMTY4KTsgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIH0KICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbW1vbkNvbnRlbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21tb25Db250ZW50IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxMik7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDIzKTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyODgpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQmxvY2tFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbW1vbkNvbnRlbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tbW9uQ29udGVudCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdFQoMTIpOyAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0VCgyMyk7ICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdFQoMjg4KTsgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0Jsb2NrRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29udGVudEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb250ZW50RXhwciIsIGUwKTsKICAgIHBhcnNlX1N0YXRlbWVudHNBbmRFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbnRlbnRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbnRlbnRFeHByKCkKICB7CiAgICB0cnlfU3RhdGVtZW50c0FuZEV4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBEb2NDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBEb2NDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHNoaWZ0KDEyMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfQmxvY2tFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbXBEb2NDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wRG9jQ29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCgxMjApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgdHJ5X0Jsb2NrRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29tcEF0dHJDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBBdHRyQ29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyNDkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICAgIHNoaWZ0KDI4Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRVFOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMlcoMjgwKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDE0NzIyNSkgICAgICAgICAgICAgICAvLyAneycgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTgsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAvLyAneycKICAgICAgICAgIGxvb2thaGVhZDFXKDkxKTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnfScKICAgICAgICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgLy8gJ30nCiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDE4LCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAtMToKICAgICAgc2hpZnQoMjgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDFXKDkxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ30nCiAgICAgIHNoaWZ0KDI4Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQmxvY2tFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbXBBdHRyQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tcEF0dHJDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDgzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgbG9va2FoZWFkMVcoMjQ5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHRyeV9FeHByKCk7CiAgICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FUU5hbWUoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQyVygyODApOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTQ3MjI1KSAgICAgICAgICAgICAgIC8vICd7JyAnfScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgxOCwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgIC8vICd7JwogICAgICAgICAgbG9va2FoZWFkMVcoOTEpOyAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICAgICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAvLyAnfScKICAgICAgICAgIG1lbW9pemUoMTgsIGUwQSwgLTEpOwogICAgICAgICAgbGsgPSAtMzsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMTgsIGUwQSwgLTIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHNoaWZ0VCgyODEpOyAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVyg5MSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9CbG9ja0V4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBQSUNvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcFBJQ29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCgyMjApOyAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgbG9va2FoZWFkMVcoMjQxKTsgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwcigpOwogICAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX05DTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI4MCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAxNDcyMjUpICAgICAgICAgICAgICAgLy8gJ3snICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDE5LCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHNoaWZ0VCgyODEpOyAgICAgICAgICAgICAgLy8gJ3snCiAgICAgICAgICBsb29rYWhlYWQxVyg5MSk7ICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ30nCiAgICAgICAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgIC8vICd9JwogICAgICAgICAgbGsgPSAtMTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgxOSwgZTAsIGxrKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVyg5MSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Jsb2NrRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wUElDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wUElDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDIyMCk7ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGxvb2thaGVhZDFXKDI0MSk7ICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0VCgyODEpOyAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICB0cnlfRXhwcigpOwogICAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfTkNOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMlcoMjgwKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDE0NzIyNSkgICAgICAgICAgICAgICAvLyAneycgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTksIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAvLyAneycKICAgICAgICAgIGxvb2thaGVhZDFXKDkxKTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnfScKICAgICAgICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgLy8gJ30nCiAgICAgICAgICBtZW1vaXplKDE5LCBlMEEsIC0xKTsKICAgICAgICAgIGxrID0gLTM7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICBtZW1vaXplKDE5LCBlMEEsIC0yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoOTEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnfScKICAgICAgc2hpZnRUKDI4Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgY2FzZSAtMzoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQmxvY2tFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wQ29tbWVudENvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcENvbW1lbnRDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHNoaWZ0KDk3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBsb29rYWhlYWQxVyg5MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9CbG9ja0V4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tcENvbW1lbnRDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wQ29tbWVudENvbnN0cnVjdG9yKCkKICB7CiAgICBzaGlmdFQoOTcpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgdHJ5X0Jsb2NrRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29tcFRleHRDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBUZXh0Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfQmxvY2tFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbXBUZXh0Q29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tcFRleHRDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDI0OSk7ICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgIGxvb2thaGVhZDFXKDkwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHRyeV9CbG9ja0V4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ByaW1hcnlFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJpbWFyeUV4cHIiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxODc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBsb29rYWhlYWQyVygyNDYpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjQ0KTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI4Mik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgbG9va2FoZWFkMlcoMjUyKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBsb29rYWhlYWQyVyg5Nyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyg6JyB8ICd7JwogICAgICBicmVhazsKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgbG9va2FoZWFkMlcoMTQ4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJwogICAgICBsb29rYWhlYWQyVygyMzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLicgfAogICAgICBicmVhazsKICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICBjYXNlIDcxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSA3NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICBjYXNlIDkwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgY2FzZSA5NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSAxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgY2FzZSAxMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgY2FzZSAxMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICBjYXNlIDE0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGNhc2UgMTU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgIGNhc2UgMTY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnCiAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgY2FzZSAxNzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICBjYXNlIDE3OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICBjYXNlIDE4MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICBjYXNlIDE4OTogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgIGNhc2UgMTk1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgIGNhc2UgMjA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICBjYXNlIDIwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgIGNhc2UgMjEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgIGNhc2UgMjE3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAyMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgY2FzZSAyMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgY2FzZSAyNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgIGNhc2UgMjY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICBjYXNlIDI3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgIGNhc2UgMjczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgY2FzZSAyNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgbG9va2FoZWFkMlcoOTUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDMzNTMgICAgICAgICAgICAgICAgICAvLyAneycgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gNDM3NyAgICAgICAgICAgICAgICAgIC8vICd7JyBJbnRlZ2VyTGl0ZXJhbAogICAgIHx8IGxrID09IDQ4ODkgICAgICAgICAgICAgICAgICAvLyAneycgRGVjaW1hbExpdGVyYWwKICAgICB8fCBsayA9PSA1NDAxICAgICAgICAgICAgICAgICAgLy8gJ3snIERvdWJsZUxpdGVyYWwKICAgICB8fCBsayA9PSA1OTEzICAgICAgICAgICAgICAgICAgLy8gJ3snIFN0cmluZ0xpdGVyYWwKICAgICB8fCBsayA9PSAxNjE1MyAgICAgICAgICAgICAgICAgLy8gJ3snICckJwogICAgIHx8IGxrID09IDE2NjY1ICAgICAgICAgICAgICAgICAvLyAneycgJyQkJwogICAgIHx8IGxrID09IDE3MTc3ICAgICAgICAgICAgICAgICAvLyAneycgJyUnCiAgICAgfHwgbGsgPT0gMTgwNTUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJygnCiAgICAgfHwgbGsgPT0gMTgxMTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnKCcKICAgICB8fCBsayA9PSAxODE3NSAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcoJwogICAgIHx8IGxrID09IDE4MjAxICAgICAgICAgICAgICAgICAvLyAneycgJygnCiAgICAgfHwgbGsgPT0gMTg3MTMgICAgICAgICAgICAgICAgIC8vICd7JyAnKCMnCiAgICAgfHwgbGsgPT0gMjEyNzMgICAgICAgICAgICAgICAgIC8vICd7JyAnKycKICAgICB8fCBsayA9PSAyMjI5NyAgICAgICAgICAgICAgICAgLy8gJ3snICctJwogICAgIHx8IGxrID09IDI0MzQ1ICAgICAgICAgICAgICAgICAvLyAneycgJy8nCiAgICAgfHwgbGsgPT0gMjQ4NTcgICAgICAgICAgICAgICAgIC8vICd7JyAnLy8nCiAgICAgfHwgbGsgPT0gMjg0NDEgICAgICAgICAgICAgICAgIC8vICd7JyAnPCcKICAgICB8fCBsayA9PSAyODk1MyAgICAgICAgICAgICAgICAgLy8gJ3snICc8IS0tJwogICAgIHx8IGxrID09IDMxMDAxICAgICAgICAgICAgICAgICAvLyAneycgJzw/JwogICAgIHx8IGxrID09IDM1NjA5ICAgICAgICAgICAgICAgICAvLyAneycgJ1snCiAgICAgfHwgbGsgPT0gMzY2MzMgICAgICAgICAgICAgICAgIC8vICd7JyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzc2NTcgICAgICAgICAgICAgICAgIC8vICd7JyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzgxNjkgICAgICAgICAgICAgICAgIC8vICd7JyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzg2ODEgICAgICAgICAgICAgICAgIC8vICd7JyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzOTE5MyAgICAgICAgICAgICAgICAgLy8gJ3snICdhbmQnCiAgICAgfHwgbGsgPT0gNDAyMTcgICAgICAgICAgICAgICAgIC8vICd7JyAnYXBwZW5kJwogICAgIHx8IGxrID09IDQwNzI5ICAgICAgICAgICAgICAgICAvLyAneycgJ2FycmF5JwogICAgIHx8IGxrID09IDQxMjQxICAgICAgICAgICAgICAgICAvLyAneycgJ2FzJwogICAgIHx8IGxrID09IDQxNzUzICAgICAgICAgICAgICAgICAvLyAneycgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MjI2NSAgICAgICAgICAgICAgICAgLy8gJ3snICdhdCcKICAgICB8fCBsayA9PSA0Mjc3NyAgICAgICAgICAgICAgICAgLy8gJ3snICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDMyODkgICAgICAgICAgICAgICAgIC8vICd7JyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDM4MDEgICAgICAgICAgICAgICAgIC8vICd7JyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQ0MzEzICAgICAgICAgICAgICAgICAvLyAneycgJ2JvdW5kYXJ5LXNwYWNlJwogICAgIHx8IGxrID09IDQ0ODI1ICAgICAgICAgICAgICAgICAvLyAneycgJ2JyZWFrJwogICAgIHx8IGxrID09IDQ1ODQ5ICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDYzNjEgICAgICAgICAgICAgICAgIC8vICd7JyAnY2FzdCcKICAgICB8fCBsayA9PSA0Njg3MyAgICAgICAgICAgICAgICAgLy8gJ3snICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NzM4NSAgICAgICAgICAgICAgICAgLy8gJ3snICdjYXRjaCcKICAgICB8fCBsayA9PSA0ODQwOSAgICAgICAgICAgICAgICAgLy8gJ3snICdjaGlsZCcKICAgICB8fCBsayA9PSA0ODkyMSAgICAgICAgICAgICAgICAgLy8gJ3snICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDk5NDUgICAgICAgICAgICAgICAgIC8vICd7JyAnY29tbWVudCcKICAgICB8fCBsayA9PSA1MDQ1NyAgICAgICAgICAgICAgICAgLy8gJ3snICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDUwOTY5ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MjUwNSAgICAgICAgICAgICAgICAgLy8gJ3snICdjb250ZXh0JwogICAgIHx8IGxrID09IDUzMDE3ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnRpbnVlJwogICAgIHx8IGxrID09IDUzNTI5ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTQwNDEgICAgICAgICAgICAgICAgIC8vICd7JyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDU0NTUzICAgICAgICAgICAgICAgICAvLyAneycgJ2NvdW50JwogICAgIHx8IGxrID09IDU1MDY1ICAgICAgICAgICAgICAgICAvLyAneycgJ2RlY2ltYWwtZm9ybWF0JwogICAgIHx8IGxrID09IDU2MDg5ICAgICAgICAgICAgICAgICAvLyAneycgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTY2MDEgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NzExMyAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTc2MjUgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1ODEzNyAgICAgICAgICAgICAgICAgLy8gJ3snICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTg2NDkgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA2MTIwOSAgICAgICAgICAgICAgICAgLy8gJ3snICdkaXYnCiAgICAgfHwgbGsgPT0gNjE3MjEgICAgICAgICAgICAgICAgIC8vICd7JyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjIyMzMgICAgICAgICAgICAgICAgIC8vICd7JyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2Mjc0NSAgICAgICAgICAgICAgICAgLy8gJ3snICdlbGVtZW50JwogICAgIHx8IGxrID09IDYzMjU3ICAgICAgICAgICAgICAgICAvLyAneycgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjM3NjkgICAgICAgICAgICAgICAgIC8vICd7JyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQyODEgICAgICAgICAgICAgICAgIC8vICd7JyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQ3OTMgICAgICAgICAgICAgICAgIC8vICd7JyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjUzMDUgICAgICAgICAgICAgICAgIC8vICd7JyAnZW5kJwogICAgIHx8IGxrID09IDY2MzI5ICAgICAgICAgICAgICAgICAvLyAneycgJ2VxJwogICAgIHx8IGxrID09IDY2ODQxICAgICAgICAgICAgICAgICAvLyAneycgJ2V2ZXJ5JwogICAgIHx8IGxrID09IDY3ODY1ICAgICAgICAgICAgICAgICAvLyAneycgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2ODM3NyAgICAgICAgICAgICAgICAgLy8gJ3snICdleGl0JwogICAgIHx8IGxrID09IDY4ODg5ICAgICAgICAgICAgICAgICAvLyAneycgJ2V4dGVybmFsJwogICAgIHx8IGxrID09IDY5NDAxICAgICAgICAgICAgICAgICAvLyAneycgJ2ZhbHNlJwogICAgIHx8IGxrID09IDY5OTEzICAgICAgICAgICAgICAgICAvLyAneycgJ2ZpcnN0JwogICAgIHx8IGxrID09IDcwNDI1ICAgICAgICAgICAgICAgICAvLyAneycgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA3MDkzNyAgICAgICAgICAgICAgICAgLy8gJ3snICdmb2xsb3dpbmctc2libGluZycKICAgICB8fCBsayA9PSA3MTQ0OSAgICAgICAgICAgICAgICAgLy8gJ3snICdmb3InCiAgICAgfHwgbGsgPT0gNzI5ODUgICAgICAgICAgICAgICAgIC8vICd7JyAnZnJvbScKICAgICB8fCBsayA9PSA3MzQ5NyAgICAgICAgICAgICAgICAgLy8gJ3snICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzU1NDUgICAgICAgICAgICAgICAgIC8vICd7JyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzYwNTcgICAgICAgICAgICAgICAgIC8vICd7JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzcwODEgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzgxMDUgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzg2MTcgICAgICAgICAgICAgICAgIC8vICd7JyAnaWRpdicKICAgICB8fCBsayA9PSA3OTEyOSAgICAgICAgICAgICAgICAgLy8gJ3snICdpZicKICAgICB8fCBsayA9PSA3OTY0MSAgICAgICAgICAgICAgICAgLy8gJ3snICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gODAxNTMgICAgICAgICAgICAgICAgIC8vICd7JyAnaW4nCiAgICAgfHwgbGsgPT0gODA2NjUgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODI3MTMgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgzMjI1ICAgICAgICAgICAgICAgICAvLyAneycgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgzNzM3ICAgICAgICAgICAgICAgICAvLyAneycgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4NDI0OSAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODQ3NjEgICAgICAgICAgICAgICAgIC8vICd7JyAnaW50bycKICAgICB8fCBsayA9PSA4NTI3MyAgICAgICAgICAgICAgICAgLy8gJ3snICdpcycKICAgICB8fCBsayA9PSA4NTc4NSAgICAgICAgICAgICAgICAgLy8gJ3snICdpdGVtJwogICAgIHx8IGxrID09IDg2Mjk3ICAgICAgICAgICAgICAgICAvLyAneycgJ2pzb24nCiAgICAgfHwgbGsgPT0gODY4MDkgICAgICAgICAgICAgICAgIC8vICd7JyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MzIxICAgICAgICAgICAgICAgICAvLyAneycgJ2pzb25pcScKICAgICB8fCBsayA9PSA4ODg1NyAgICAgICAgICAgICAgICAgLy8gJ3snICdsYXN0JwogICAgIHx8IGxrID09IDg5MzY5ICAgICAgICAgICAgICAgICAvLyAneycgJ2xheCcKICAgICB8fCBsayA9PSA4OTg4MSAgICAgICAgICAgICAgICAgLy8gJ3snICdsZScKICAgICB8fCBsayA9PSA5MDkwNSAgICAgICAgICAgICAgICAgLy8gJ3snICdsZXQnCiAgICAgfHwgbGsgPT0gOTE5MjkgICAgICAgICAgICAgICAgIC8vICd7JyAnbG9vcCcKICAgICB8fCBsayA9PSA5Mjk1MyAgICAgICAgICAgICAgICAgLy8gJ3snICdsdCcKICAgICB8fCBsayA9PSA5Mzk3NyAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2QnCiAgICAgfHwgbGsgPT0gOTQ0ODkgICAgICAgICAgICAgICAgIC8vICd7JyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk1MDAxICAgICAgICAgICAgICAgICAvLyAneycgJ21vZHVsZScKICAgICB8fCBsayA9PSA5NjAyNSAgICAgICAgICAgICAgICAgLy8gJ3snICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTY1MzcgICAgICAgICAgICAgICAgIC8vICd7JyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTcwNDkgICAgICAgICAgICAgICAgIC8vICd7JyAnbmUnCiAgICAgfHwgbGsgPT0gOTk2MDkgICAgICAgICAgICAgICAgIC8vICd7JyAnbm9kZScKICAgICB8fCBsayA9PSAxMDAxMjEgICAgICAgICAgICAgICAgLy8gJ3snICdub2RlcycKICAgICB8fCBsayA9PSAxMDA2MzMgICAgICAgICAgICAgICAgLy8gJ3snICdub3QnCiAgICAgfHwgbGsgPT0gMTAxMTQ1ICAgICAgICAgICAgICAgIC8vICd7JyAnbnVsbCcKICAgICB8fCBsayA9PSAxMDE2NTcgICAgICAgICAgICAgICAgLy8gJ3snICdvYmplY3QnCiAgICAgfHwgbGsgPT0gMTAzNzA1ICAgICAgICAgICAgICAgIC8vICd7JyAnb25seScKICAgICB8fCBsayA9PSAxMDQyMTcgICAgICAgICAgICAgICAgLy8gJ3snICdvcHRpb24nCiAgICAgfHwgbGsgPT0gMTA0NzI5ICAgICAgICAgICAgICAgIC8vICd7JyAnb3InCiAgICAgfHwgbGsgPT0gMTA1MjQxICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTA1NzUzICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXJlZCcKICAgICB8fCBsayA9PSAxMDYyNjUgICAgICAgICAgICAgICAgLy8gJ3snICdvcmRlcmluZycKICAgICB8fCBsayA9PSAxMDc4MDEgICAgICAgICAgICAgICAgLy8gJ3snICdwYXJlbnQnCiAgICAgfHwgbGsgPT0gMTEwODczICAgICAgICAgICAgICAgIC8vICd7JyAncHJlY2VkaW5nJwogICAgIHx8IGxrID09IDExMTM4NSAgICAgICAgICAgICAgICAvLyAneycgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgIHx8IGxrID09IDExMjkyMSAgICAgICAgICAgICAgICAvLyAneycgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gMTEzOTQ1ICAgICAgICAgICAgICAgIC8vICd7JyAncmVuYW1lJwogICAgIHx8IGxrID09IDExNDQ1NyAgICAgICAgICAgICAgICAvLyAneycgJ3JlcGxhY2UnCiAgICAgfHwgbGsgPT0gMTE0OTY5ICAgICAgICAgICAgICAgIC8vICd7JyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNTQ4MSAgICAgICAgICAgICAgICAvLyAneycgJ3JldHVybmluZycKICAgICB8fCBsayA9PSAxMTU5OTMgICAgICAgICAgICAgICAgLy8gJ3snICdyZXZhbGlkYXRpb24nCiAgICAgfHwgbGsgPT0gMTE3MDE3ICAgICAgICAgICAgICAgIC8vICd7JyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNzUyOSAgICAgICAgICAgICAgICAvLyAneycgJ3NjaGVtYScKICAgICB8fCBsayA9PSAxMTgwNDEgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEtYXR0cmlidXRlJwogICAgIHx8IGxrID09IDExODU1MyAgICAgICAgICAgICAgICAvLyAneycgJ3NjaGVtYS1lbGVtZW50JwogICAgIHx8IGxrID09IDExOTA2NSAgICAgICAgICAgICAgICAvLyAneycgJ3Njb3JlJwogICAgIHx8IGxrID09IDExOTU3NyAgICAgICAgICAgICAgICAvLyAneycgJ3NlbGVjdCcKICAgICB8fCBsayA9PSAxMjAwODkgICAgICAgICAgICAgICAgLy8gJ3snICdzZWxmJwogICAgIHx8IGxrID09IDEyMjY0OSAgICAgICAgICAgICAgICAvLyAneycgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIzMTYxICAgICAgICAgICAgICAgIC8vICd7JyAnc29tZScKICAgICB8fCBsayA9PSAxMjM2NzMgICAgICAgICAgICAgICAgLy8gJ3snICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTI0MTg1ICAgICAgICAgICAgICAgIC8vICd7JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI1NzIxICAgICAgICAgICAgICAgIC8vICd7JyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyNjc0NSAgICAgICAgICAgICAgICAvLyAneycgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjcyNTcgICAgICAgICAgICAgICAgLy8gJ3snICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI3NzY5ICAgICAgICAgICAgICAgIC8vICd7JyAndGV4dCcKICAgICB8fCBsayA9PSAxMjk4MTcgICAgICAgICAgICAgICAgLy8gJ3snICd0bycKICAgICB8fCBsayA9PSAxMzAzMjkgICAgICAgICAgICAgICAgLy8gJ3snICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzA4NDEgICAgICAgICAgICAgICAgLy8gJ3snICd0cnVlJwogICAgIHx8IGxrID09IDEzMTM1MyAgICAgICAgICAgICAgICAvLyAneycgJ3RyeScKICAgICB8fCBsayA9PSAxMzE4NjUgICAgICAgICAgICAgICAgLy8gJ3snICd0dW1ibGluZycKICAgICB8fCBsayA9PSAxMzIzNzcgICAgICAgICAgICAgICAgLy8gJ3snICd0eXBlJwogICAgIHx8IGxrID09IDEzMjg4OSAgICAgICAgICAgICAgICAvLyAneycgJ3R5cGVzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTMzNDAxICAgICAgICAgICAgICAgIC8vICd7JyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTM0NDI1ICAgICAgICAgICAgICAgIC8vICd7JyAndW5vcmRlcmVkJwogICAgIHx8IGxrID09IDEzNDkzNyAgICAgICAgICAgICAgICAvLyAneycgJ3VwZGF0aW5nJwogICAgIHx8IGxrID09IDEzNjQ3MyAgICAgICAgICAgICAgICAvLyAneycgJ3ZhbGlkYXRlJwogICAgIHx8IGxrID09IDEzNjk4NSAgICAgICAgICAgICAgICAvLyAneycgJ3ZhbHVlJwogICAgIHx8IGxrID09IDEzNzQ5NyAgICAgICAgICAgICAgICAvLyAneycgJ3ZhcmlhYmxlJwogICAgIHx8IGxrID09IDEzODAwOSAgICAgICAgICAgICAgICAvLyAneycgJ3ZlcnNpb24nCiAgICAgfHwgbGsgPT0gMTM5NTQ1ICAgICAgICAgICAgICAgIC8vICd7JyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTQwMDU3ICAgICAgICAgICAgICAgIC8vICd7JyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTQxNTkzICAgICAgICAgICAgICAgIC8vICd7JyAnd2l0aCcKICAgICB8fCBsayA9PSAxNDQxNTMgICAgICAgICAgICAgICAgLy8gJ3snICd7JwogICAgIHx8IGxrID09IDE0NTE3NyAgICAgICAgICAgICAgICAvLyAneycgJ3t8JwogICAgIHx8IGxrID09IDE0NzIyNSkgICAgICAgICAgICAgICAvLyAneycgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMjAsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0xpdGVyYWwoKTsKICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICB0cnlfRnVuY3Rpb25DYWxsKCk7CiAgICAgICAgICAgIGxrID0gLTU7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDVBKQogICAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICB0cnlfQmxvY2tFeHByKCk7CiAgICAgICAgICAgICAgbGsgPSAtMTA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2ggKHAxMEEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBsayA9IC0xMTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgyMCwgZTAsIGxrKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICBjYXNlIDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgY2FzZSAxMjkzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnIEVPRgogICAgY2FzZSAxMjk5NzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgRU9GCiAgICBjYXNlIDEzMDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyBFT0YKICAgIGNhc2UgMTM0NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnIScKICAgIGNhc2UgMTM1MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICchJwogICAgY2FzZSAxMzU2NzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyEnCiAgICBjYXNlIDEzOTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJyE9JwogICAgY2FzZSAxNDAyMTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyE9JwogICAgY2FzZSAxNDA3OTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyE9JwogICAgY2FzZSAxOTU5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcpJwogICAgY2FzZSAxOTY1MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyknCiAgICBjYXNlIDE5NzExOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnKScKICAgIGNhc2UgMjAxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnKicKICAgIGNhc2UgMjAxNjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcqJwogICAgY2FzZSAyMDIyMzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyonCiAgICBjYXNlIDIxMTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJysnCiAgICBjYXNlIDIxMTg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnKycKICAgIGNhc2UgMjEyNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcrJwogICAgY2FzZSAyMTYzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcsJwogICAgY2FzZSAyMTcwMTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJywnCiAgICBjYXNlIDIxNzU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLCcKICAgIGNhc2UgMjIxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLScKICAgIGNhc2UgMjIyMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICctJwogICAgY2FzZSAyMjI3MTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy0nCiAgICBjYXNlIDIzMTc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJy4nCiAgICBjYXNlIDIzMjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnLicKICAgIGNhc2UgMjMyOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcuJwogICAgY2FzZSAyNDE5OTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcvJwogICAgY2FzZSAyNDI2MTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJy8nCiAgICBjYXNlIDI0MzE5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLycKICAgIGNhc2UgMjQ3MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLy8nCiAgICBjYXNlIDI0NzczOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnLy8nCiAgICBjYXNlIDI0ODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLy8nCiAgICBjYXNlIDI1NzM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzonCiAgICBjYXNlIDI1Nzk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnOicKICAgIGNhc2UgMjU4NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc6JwogICAgY2FzZSAyNzc4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc7JwogICAgY2FzZSAyNzg0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzsnCiAgICBjYXNlIDI3OTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnOycKICAgIGNhc2UgMjgyOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPCcKICAgIGNhc2UgMjgzNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc8JwogICAgY2FzZSAyODQxNTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzwnCiAgICBjYXNlIDI5ODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzw8JwogICAgY2FzZSAyOTg5MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzw8JwogICAgY2FzZSAyOTk1MTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzw8JwogICAgY2FzZSAzMDM0MzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc8PScKICAgIGNhc2UgMzA0MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc8PScKICAgIGNhc2UgMzA0NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc8PScKICAgIGNhc2UgMzEzNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPScKICAgIGNhc2UgMzE0Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc9JwogICAgY2FzZSAzMTQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJz0nCiAgICBjYXNlIDMxODc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJz4nCiAgICBjYXNlIDMxOTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPicKICAgIGNhc2UgMzE5OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc+JwogICAgY2FzZSAzMjM5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc+PScKICAgIGNhc2UgMzI0NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc+PScKICAgIGNhc2UgMzI1MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc+PScKICAgIGNhc2UgMzI5MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPj4nCiAgICBjYXNlIDMyOTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPj4nCiAgICBjYXNlIDMzMDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPj4nCiAgICBjYXNlIDM1NDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ1snCiAgICBjYXNlIDM1NTI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnWycKICAgIGNhc2UgMzU1ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdbJwogICAgY2FzZSAzNTk3NTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICddJwogICAgY2FzZSAzNjAzNzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ10nCiAgICBjYXNlIDM2MDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnXScKICAgIGNhc2UgMzY0ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYWZ0ZXInCiAgICBjYXNlIDM2NTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYWZ0ZXInCiAgICBjYXNlIDM2NjA3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYWZ0ZXInCiAgICBjYXNlIDM5MDQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2FuZCcKICAgIGNhc2UgMzkxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhbmQnCiAgICBjYXNlIDM5MTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYW5kJwogICAgY2FzZSA0MTA5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdhcycKICAgIGNhc2UgNDExNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhcycKICAgIGNhc2UgNDEyMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhcycKICAgIGNhc2UgNDE2MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYXNjZW5kaW5nJwogICAgY2FzZSA0MTY2OTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2FzY2VuZGluZycKICAgIGNhc2UgNDE3Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhc2NlbmRpbmcnCiAgICBjYXNlIDQyMTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2F0JwogICAgY2FzZSA0MjE4MTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2F0JwogICAgY2FzZSA0MjIzOTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2F0JwogICAgY2FzZSA0MzY1NTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdiZWZvcmUnCiAgICBjYXNlIDQzNzE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYmVmb3JlJwogICAgY2FzZSA0Mzc3NTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2JlZm9yZScKICAgIGNhc2UgNDUxOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYnknCiAgICBjYXNlIDQ1MjUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYnknCiAgICBjYXNlIDQ1MzExOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYnknCiAgICBjYXNlIDQ1NzAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Nhc2UnCiAgICBjYXNlIDQ1NzY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzZScKICAgIGNhc2UgNDU4MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjYXNlJwogICAgY2FzZSA0NjIxNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdjYXN0JwogICAgY2FzZSA0NjI3NzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2Nhc3QnCiAgICBjYXNlIDQ2MzM1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY2FzdCcKICAgIGNhc2UgNDY3Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ2Nzg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ2ODQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ4Nzc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2NvbGxhdGlvbicKICAgIGNhc2UgNDg4Mzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjb2xsYXRpb24nCiAgICBjYXNlIDQ4ODk1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY29sbGF0aW9uJwogICAgY2FzZSA1MTMzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdjb250YWlucycKICAgIGNhc2UgNTEzOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjb250YWlucycKICAgIGNhc2UgNTE0NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjb250YWlucycKICAgIGNhc2UgNTQ0MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY291bnQnCiAgICBjYXNlIDU0NDY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY291bnQnCiAgICBjYXNlIDU0NTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY291bnQnCiAgICBjYXNlIDU2NDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2RlZmF1bHQnCiAgICBjYXNlIDU2NTE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZGVmYXVsdCcKICAgIGNhc2UgNTY1NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdkZWZhdWx0JwogICAgY2FzZSA1ODUwMzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdkZXNjZW5kaW5nJwogICAgY2FzZSA1ODU2NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDU4NjIzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZGVzY2VuZGluZycKICAgIGNhc2UgNjEwNjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZGl2JwogICAgY2FzZSA2MTEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2RpdicKICAgIGNhc2UgNjExODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdkaXYnCiAgICBjYXNlIDYzMTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Vsc2UnCiAgICBjYXNlIDYzMTczOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZWxzZScKICAgIGNhc2UgNjMyMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbHNlJwogICAgY2FzZSA2MzYyMzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdlbXB0eScKICAgIGNhc2UgNjM2ODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdlbXB0eScKICAgIGNhc2UgNjM3NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbXB0eScKICAgIGNhc2UgNjUxNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZW5kJwogICAgY2FzZSA2NTIyMTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VuZCcKICAgIGNhc2UgNjUyNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbmQnCiAgICBjYXNlIDY2MTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2VxJwogICAgY2FzZSA2NjI0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VxJwogICAgY2FzZSA2NjMwMzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2VxJwogICAgY2FzZSA2NzcxOTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdleGNlcHQnCiAgICBjYXNlIDY3NzgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZXhjZXB0JwogICAgY2FzZSA2NzgzOTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2V4Y2VwdCcKICAgIGNhc2UgNzEzMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZm9yJwogICAgY2FzZSA3MTM2NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ZvcicKICAgIGNhc2UgNzE0MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdmb3InCiAgICBjYXNlIDc1OTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2dlJwogICAgY2FzZSA3NTk3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2dlJwogICAgY2FzZSA3NjAzMTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2dlJwogICAgY2FzZSA3NjkzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdncm91cCcKICAgIGNhc2UgNzY5OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdncm91cCcKICAgIGNhc2UgNzcwNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdncm91cCcKICAgIGNhc2UgNzc5NTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZ3QnCiAgICBjYXNlIDc4MDIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZ3QnCiAgICBjYXNlIDc4MDc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZ3QnCiAgICBjYXNlIDc4NDcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2lkaXYnCiAgICBjYXNlIDc4NTMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaWRpdicKICAgIGNhc2UgNzg1OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpZGl2JwogICAgY2FzZSA4MzA3OTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpbnN0YW5jZScKICAgIGNhc2UgODMxNDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdpbnN0YW5jZScKICAgIGNhc2UgODMxOTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnN0YW5jZScKICAgIGNhc2UgODQxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnaW50ZXJzZWN0JwogICAgY2FzZSA4NDE2NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ludGVyc2VjdCcKICAgIGNhc2UgODQyMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnRlcnNlY3QnCiAgICBjYXNlIDg0NjE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2ludG8nCiAgICBjYXNlIDg0Njc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaW50bycKICAgIGNhc2UgODQ3MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnRvJwogICAgY2FzZSA4NTEyNzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpcycKICAgIGNhc2UgODUxODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdpcycKICAgIGNhc2UgODUyNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpcycKICAgIGNhc2UgODk3MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbGUnCiAgICBjYXNlIDg5Nzk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnbGUnCiAgICBjYXNlIDg5ODU1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbGUnCiAgICBjYXNlIDkwNzU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2xldCcKICAgIGNhc2UgOTA4MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsZXQnCiAgICBjYXNlIDkwODc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbGV0JwogICAgY2FzZSA5MjgwNzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdsdCcKICAgIGNhc2UgOTI4Njk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsdCcKICAgIGNhc2UgOTI5Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdsdCcKICAgIGNhc2UgOTM4MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbW9kJwogICAgY2FzZSA5Mzg5MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ21vZCcKICAgIGNhc2UgOTM5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdtb2QnCiAgICBjYXNlIDk0MzQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ21vZGlmeScKICAgIGNhc2UgOTQ0MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdtb2RpZnknCiAgICBjYXNlIDk0NDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbW9kaWZ5JwogICAgY2FzZSA5NjkwMzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICduZScKICAgIGNhc2UgOTY5NjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICduZScKICAgIGNhc2UgOTcwMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICduZScKICAgIGNhc2UgMTAzNTU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnb25seScKICAgIGNhc2UgMTAzNjIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdvbmx5JwogICAgY2FzZSAxMDM2Nzk6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ29ubHknCiAgICBjYXNlIDEwNDU4MzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ29yJwogICAgY2FzZSAxMDQ2NDU6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ29yJwogICAgY2FzZSAxMDQ3MDM6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ29yJwogICAgY2FzZSAxMDUwOTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdvcmRlcicKICAgIGNhc2UgMTA1MTU3OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdvcmRlcicKICAgIGNhc2UgMTA1MjE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdvcmRlcicKICAgIGNhc2UgMTA3MTQzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAncGFyYWdyYXBocycKICAgIGNhc2UgMTA3MjA1OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdwYXJhZ3JhcGhzJwogICAgY2FzZSAxMDcyNjM6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3BhcmFncmFwaHMnCiAgICBjYXNlIDExNDgyMzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3JldHVybicKICAgIGNhc2UgMTE0ODg1OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdyZXR1cm4nCiAgICBjYXNlIDExNDk0MzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAncmV0dXJuJwogICAgY2FzZSAxMTY4NzE6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzYXRpc2ZpZXMnCiAgICBjYXNlIDExNjkzMzogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnc2F0aXNmaWVzJwogICAgY2FzZSAxMTY5OTE6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3NhdGlzZmllcycKICAgIGNhc2UgMTIxNDc5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnc2VudGVuY2VzJwogICAgY2FzZSAxMjE1NDE6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3NlbnRlbmNlcycKICAgIGNhc2UgMTIxNTk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdzZW50ZW5jZXMnCiAgICBjYXNlIDEyMzUyNzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3N0YWJsZScKICAgIGNhc2UgMTIzNTg5OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdzdGFibGUnCiAgICBjYXNlIDEyMzY0NzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnc3RhYmxlJwogICAgY2FzZSAxMjQwMzk6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzdGFydCcKICAgIGNhc2UgMTI0MTAxOiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdzdGFydCcKICAgIGNhc2UgMTI0MTU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdzdGFydCcKICAgIGNhc2UgMTI5MTU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAndGltZXMnCiAgICBjYXNlIDEyOTIyMTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAndGltZXMnCiAgICBjYXNlIDEyOTI3OTogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAndGltZXMnCiAgICBjYXNlIDEyOTY3MTogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3RvJwogICAgY2FzZSAxMjk3MzM6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3RvJwogICAgY2FzZSAxMjk3OTE6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3RvJwogICAgY2FzZSAxMzAxODM6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd0cmVhdCcKICAgIGNhc2UgMTMwMjQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICd0cmVhdCcKICAgIGNhc2UgMTMwMzAzOiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd0cmVhdCcKICAgIGNhc2UgMTMzMjU1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAndW5pb24nCiAgICBjYXNlIDEzMzMxNzogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAndW5pb24nCiAgICBjYXNlIDEzMzM3NTogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAndW5pb24nCiAgICBjYXNlIDEzOTM5OTogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3doZXJlJwogICAgY2FzZSAxMzk0NjE6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3doZXJlJwogICAgY2FzZSAxMzk1MTk6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3doZXJlJwogICAgY2FzZSAxNDE0NDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd3aXRoJwogICAgY2FzZSAxNDE1MDk6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3dpdGgnCiAgICBjYXNlIDE0MTU2NzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd2l0aCcKICAgIGNhc2UgMTQyOTgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnd29yZHMnCiAgICBjYXNlIDE0MzA0NTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnd29yZHMnCiAgICBjYXNlIDE0MzEwMzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd29yZHMnCiAgICBjYXNlIDE0NTU0MzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3wnCiAgICBjYXNlIDE0NTYwNTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfCcKICAgIGNhc2UgMTQ1NjYzOiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8JwogICAgY2FzZSAxNDYwNTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd8fCcKICAgIGNhc2UgMTQ2MTE3OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICd8fCcKICAgIGNhc2UgMTQ2MTc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8fCcKICAgIGNhc2UgMTQ2NTY3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnfH0nCiAgICBjYXNlIDE0NjYyOTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfH0nCiAgICBjYXNlIDE0NjY4NzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnfH0nCiAgICBjYXNlIDE0NzA3OTogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ30nCiAgICBjYXNlIDE0NzE0MTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfScKICAgIGNhc2UgMTQ3MTk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd9JwogICAgICBwYXJzZV9MaXRlcmFsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgcGFyc2VfVmFyUmVmKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgcGFyc2VfUGFyZW50aGVzaXplZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgICAgcGFyc2VfQ29udGV4dEl0ZW1FeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtNToKICAgIGNhc2UgMTc5MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICcoJwogICAgY2FzZSAxNzk5MTogICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICcoJwogICAgY2FzZSAxNzk5MzogICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICcoJwogICAgY2FzZSAxNzk5NDogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICcoJwogICAgY2FzZSAxNzk5NTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJygnCiAgICBjYXNlIDE3OTk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnICcoJwogICAgY2FzZSAxNzk5ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnKCcKICAgIGNhc2UgMTgwMDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJyAnKCcKICAgIGNhc2UgMTgwMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJygnCiAgICBjYXNlIDE4MDAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcgJygnCiAgICBjYXNlIDE4MDA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgJygnCiAgICBjYXNlIDE4MDA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnICcoJwogICAgY2FzZSAxODAwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnICcoJwogICAgY2FzZSAxODAwNzogICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICcoJwogICAgY2FzZSAxODAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScgJygnCiAgICBjYXNlIDE4MDEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JyAnKCcKICAgIGNhc2UgMTgwMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyAnKCcKICAgIGNhc2UgMTgwMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnKCcKICAgIGNhc2UgMTgwMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnKCcKICAgIGNhc2UgMTgwMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgJygnCiAgICBjYXNlIDE4MDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnKCcKICAgIGNhc2UgMTgwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJygnCiAgICBjYXNlIDE4MDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnKCcKICAgIGNhc2UgMTgwMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnKCcKICAgIGNhc2UgMTgwMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknICcoJwogICAgY2FzZSAxODAyNTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnKCcKICAgIGNhc2UgMTgwMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnKCcKICAgIGNhc2UgMTgwMjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnKCcKICAgIGNhc2UgMTgwMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICcoJwogICAgY2FzZSAxODAzMDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJygnCiAgICBjYXNlIDE4MDMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICcoJwogICAgY2FzZSAxODAzMjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJygnCiAgICBjYXNlIDE4MDMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICcoJwogICAgY2FzZSAxODAzNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJygnCiAgICBjYXNlIDE4MDM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnICcoJwogICAgY2FzZSAxODA0MDogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICcoJwogICAgY2FzZSAxODA0MzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScgJygnCiAgICBjYXNlIDE4MDQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScgJygnCiAgICBjYXNlIDE4MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgJygnCiAgICBjYXNlIDE4MDQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnICcoJwogICAgY2FzZSAxODA0OTogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnICcoJwogICAgY2FzZSAxODA1MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknICcoJwogICAgY2FzZSAxODA1MjogICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JyAnKCcKICAgIGNhc2UgMTgwNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnICcoJwogICAgY2FzZSAxODA1NDogICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnICcoJwogICAgY2FzZSAxODA1NjogICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnICcoJwogICAgY2FzZSAxODA1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnKCcKICAgIGNhc2UgMTgwNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnKCcKICAgIGNhc2UgMTgwNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJygnCiAgICBjYXNlIDE4MDYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJyAnKCcKICAgIGNhc2UgMTgwNjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJygnCiAgICBjYXNlIDE4MDY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJygnCiAgICBjYXNlIDE4MDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJygnCiAgICBjYXNlIDE4MDcyOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJygnCiAgICBjYXNlIDE4MDczOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnKCcKICAgIGNhc2UgMTgwNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJygnCiAgICBjYXNlIDE4MDc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJygnCiAgICBjYXNlIDE4MDc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJygnCiAgICBjYXNlIDE4MDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcoJwogICAgY2FzZSAxODA4MjogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcoJwogICAgY2FzZSAxODA4MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnKCcKICAgIGNhc2UgMTgwODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJygnCiAgICBjYXNlIDE4MDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnKCcKICAgIGNhc2UgMTgwODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnKCcKICAgIGNhc2UgMTgwODg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgY2FzZSAxODA5MDogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJyAnKCcKICAgIGNhc2UgMTgwOTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnICcoJwogICAgY2FzZSAxODA5NDogICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JyAnKCcKICAgIGNhc2UgMTgwOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJyAnKCcKICAgIGNhc2UgMTgwOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJygnCiAgICBjYXNlIDE4MDk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJyAnKCcKICAgIGNhc2UgMTgxMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JyAnKCcKICAgIGNhc2UgMTgxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcgJygnCiAgICBjYXNlIDE4MTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknICcoJwogICAgY2FzZSAxODEwNTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnKCcKICAgIGNhc2UgMTgxMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJygnCiAgICBjYXNlIDE4MTA5OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScgJygnCiAgICBjYXNlIDE4MTE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycgJygnCiAgICBjYXNlIDE4MTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcoJwogICAgY2FzZSAxODEyMjogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJygnCiAgICBjYXNlIDE4MTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcoJwogICAgY2FzZSAxODEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcoJwogICAgY2FzZSAxODEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcoJwogICAgY2FzZSAxODEyNjogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJygnCiAgICBjYXNlIDE4MTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJygnCiAgICBjYXNlIDE4MTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcoJwogICAgY2FzZSAxODEzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnKCcKICAgIGNhc2UgMTgxMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnKCcKICAgIGNhc2UgMTgxNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJygnCiAgICBjYXNlIDE4MTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnKCcKICAgIGNhc2UgMTgxNDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJygnCiAgICBjYXNlIDE4MTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICcoJwogICAgY2FzZSAxODE0NjogICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnKCcKICAgIGNhc2UgMTgxNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJygnCiAgICBjYXNlIDE4MTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICcoJwogICAgY2FzZSAxODE1MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnICcoJwogICAgY2FzZSAxODE1MzogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JyAnKCcKICAgIGNhc2UgMTgxNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcoJwogICAgY2FzZSAxODE1OTogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJygnCiAgICBjYXNlIDE4MTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnKCcKICAgIGNhc2UgMTgxNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJygnCiAgICBjYXNlIDE4MTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJygnCiAgICBjYXNlIDE4MTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcoJwogICAgY2FzZSAxODE3MzogICAgICAgICAgICAgICAgICAgICAvLyAndG8nICcoJwogICAgY2FzZSAxODE3NDogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnICcoJwogICAgY2FzZSAxODE3NjogICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JyAnKCcKICAgIGNhc2UgMTgxNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyAnKCcKICAgIGNhc2UgMTgxNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnICcoJwogICAgY2FzZSAxODE4MDogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nICcoJwogICAgY2FzZSAxODE4MjogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnKCcKICAgIGNhc2UgMTgxODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnKCcKICAgIGNhc2UgMTgxODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnKCcKICAgIGNhc2UgMTgxODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnKCcKICAgIGNhc2UgMTgxODg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnKCcKICAgIGNhc2UgMTgxODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICcoJwogICAgY2FzZSAxODE5MjogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnICcoJwogICAgY2FzZSAxODE5MzogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcoJwogICAgY2FzZSAxODE5NjogICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcgJygnCiAgICAgIHBhcnNlX0Z1bmN0aW9uQ2FsbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQ0MDc4OiAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICd7JwogICAgICBwYXJzZV9PcmRlcmVkRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQ0MTM0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJ3snCiAgICAgIHBhcnNlX1Vub3JkZXJlZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDMzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDE0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgIGNhc2UgMjU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDE0ODU0OiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnIycKICAgIGNhc2UgMTQ5MTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnIycKICAgIGNhc2UgMTQ5MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnIycKICAgIGNhc2UgMTQ5MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnIycKICAgIGNhc2UgMTQ5MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDkyNDogICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJyAnIycKICAgIGNhc2UgMTQ5MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJyMnCiAgICBjYXNlIDE0OTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcjJwogICAgY2FzZSAxNDkzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXQnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTQ5MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJyMnCiAgICBjYXNlIDE0OTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJyMnCiAgICBjYXNlIDE0OTM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJyMnCiAgICBjYXNlIDE0OTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnIycKICAgIGNhc2UgMTQ5Mzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcjJwogICAgY2FzZSAxNDkzOTogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcjJwogICAgY2FzZSAxNDk0MDogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcjJwogICAgY2FzZSAxNDk0MjogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcjJwogICAgY2FzZSAxNDk0MzogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnIycKICAgIGNhc2UgMTQ5NDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcjJwogICAgY2FzZSAxNDk0NjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJyMnCiAgICBjYXNlIDE0OTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNDk1MDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJyMnCiAgICBjYXNlIDE0OTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJyMnCiAgICBjYXNlIDE0OTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJyMnCiAgICBjYXNlIDE0OTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcgJyMnCiAgICBjYXNlIDE0OTU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJyMnCiAgICBjYXNlIDE0OTU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnIycKICAgIGNhc2UgMTQ5NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnIycKICAgIGNhc2UgMTQ5NjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnIycKICAgIGNhc2UgMTQ5NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JyAnIycKICAgIGNhc2UgMTQ5Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnIycKICAgIGNhc2UgMTQ5NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICcjJwogICAgY2FzZSAxNDk3MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScgJyMnCiAgICBjYXNlIDE0OTcyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScgJyMnCiAgICBjYXNlIDE0OTc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgJyMnCiAgICBjYXNlIDE0OTc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnICcjJwogICAgY2FzZSAxNDk3NzogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnICcjJwogICAgY2FzZSAxNDk3ODogICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknICcjJwogICAgY2FzZSAxNDk4MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JyAnIycKICAgIGNhc2UgMTQ5ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnICcjJwogICAgY2FzZSAxNDk4MjogICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnICcjJwogICAgY2FzZSAxNDk4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcjJwogICAgY2FzZSAxNDk4NDogICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnICcjJwogICAgY2FzZSAxNDk4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnIycKICAgIGNhc2UgMTQ5ODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnIycKICAgIGNhc2UgMTQ5ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyMnCiAgICBjYXNlIDE0OTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJyAnIycKICAgIGNhc2UgMTQ5OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJyMnCiAgICBjYXNlIDE0OTk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJyMnCiAgICBjYXNlIDE0OTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJyMnCiAgICBjYXNlIDE1MDAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJyMnCiAgICBjYXNlIDE1MDAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnIycKICAgIGNhc2UgMTUwMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJyMnCiAgICBjYXNlIDE1MDA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJyMnCiAgICBjYXNlIDE1MDA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJyMnCiAgICBjYXNlIDE1MDA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcjJwogICAgY2FzZSAxNTAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcjJwogICAgY2FzZSAxNTAxMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnIycKICAgIGNhc2UgMTUwMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJyMnCiAgICBjYXNlIDE1MDEzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnIycKICAgIGNhc2UgMTUwMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnIycKICAgIGNhc2UgMTUwMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcjJwogICAgY2FzZSAxNTAxODogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJyAnIycKICAgIGNhc2UgMTUwMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnICcjJwogICAgY2FzZSAxNTAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JyAnIycKICAgIGNhc2UgMTUwMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJyAnIycKICAgIGNhc2UgMTUwMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJyMnCiAgICBjYXNlIDE1MDI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJyAnIycKICAgIGNhc2UgMTUwMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JyAnIycKICAgIGNhc2UgMTUwMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcgJyMnCiAgICBjYXNlIDE1MDMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknICcjJwogICAgY2FzZSAxNTAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnIycKICAgIGNhc2UgMTUwMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJyMnCiAgICBjYXNlIDE1MDM3OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScgJyMnCiAgICBjYXNlIDE1MDQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycgJyMnCiAgICBjYXNlIDE1MDQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnIycKICAgIGNhc2UgMTUwNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJyMnCiAgICBjYXNlIDE1MDUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnIycKICAgIGNhc2UgMTUwNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJyMnCiAgICBjYXNlIDE1MDUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJyMnCiAgICBjYXNlIDE1MDUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJyMnCiAgICBjYXNlIDE1MDU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnIycKICAgIGNhc2UgMTUwNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnIycKICAgIGNhc2UgMTUwNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJyMnCiAgICBjYXNlIDE1MDY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcjJwogICAgY2FzZSAxNTA2NTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNTA2ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE1MDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICcjJwogICAgY2FzZSAxNTA3MTogICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJyMnCiAgICBjYXNlIDE1MDcyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICcjJwogICAgY2FzZSAxNTA3MzogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnIycKICAgIGNhc2UgMTUwNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJyMnCiAgICBjYXNlIDE1MDc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICcjJwogICAgY2FzZSAxNTA3NzogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnIycKICAgIGNhc2UgMTUwODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcgJyMnCiAgICBjYXNlIDE1MDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnIycKICAgIGNhc2UgMTUwODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcjJwogICAgY2FzZSAxNTA4ODogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJyMnCiAgICBjYXNlIDE1MDg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcjJwogICAgY2FzZSAxNTA5MDogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcjJwogICAgY2FzZSAxNTA5MzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnIycKICAgIGNhc2UgMTUwOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnICcjJwogICAgY2FzZSAxNTEwMTogICAgICAgICAgICAgICAgICAgICAvLyAndG8nICcjJwogICAgY2FzZSAxNTEwMjogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnICcjJwogICAgY2FzZSAxNTEwMzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyMnCiAgICBjYXNlIDE1MTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknICcjJwogICAgY2FzZSAxNTEwNTogICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICcjJwogICAgY2FzZSAxNTEwNjogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScgJyMnCiAgICBjYXNlIDE1MTA4OiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicgJyMnCiAgICBjYXNlIDE1MTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICcjJwogICAgY2FzZSAxNTExMTogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICcjJwogICAgY2FzZSAxNTExNDogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICcjJwogICAgY2FzZSAxNTExNTogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnICcjJwogICAgY2FzZSAxNTExNjogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcjJwogICAgY2FzZSAxNTExNzogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJyMnCiAgICBjYXNlIDE1MTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScgJyMnCiAgICBjYXNlIDE1MTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJyMnCiAgICBjYXNlIDE1MTI0OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJyAnIycKICAgICAgcGFyc2VfRnVuY3Rpb25JdGVtRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTEwOgogICAgY2FzZSAyNzkyOTogICAgICAgICAgICAgICAgICAgICAvLyAneycgJzsnCiAgICAgIHBhcnNlX0Jsb2NrRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTExOgogICAgY2FzZSAxMDAwOTogICAgICAgICAgICAgICAgICAgICAvLyAneycgTkNOYW1lXlRva2VuCiAgICAgIHBhcnNlX09iamVjdENvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgcGFyc2VfQXJyYXlDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3t8JwogICAgICBwYXJzZV9KU09OU2ltcGxlT2JqZWN0VW5pb24oKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9Db25zdHJ1Y3RvcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmltYXJ5RXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9QcmltYXJ5RXhwcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgbG9va2FoZWFkMlcoMjQ2KTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIGxvb2thaGVhZDJXKDI0NCk7ICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnIycgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQyVygyODIpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGxvb2thaGVhZDJXKDI1Mik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnIycgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgbG9va2FoZWFkMlcoOTcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoOicgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIGxvb2thaGVhZDJXKDE0OCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgICAgbG9va2FoZWFkMlcoMjM2KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy4nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgY2FzZSA3NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA4NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgIGNhc2UgOTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIGNhc2UgOTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICBjYXNlIDEwNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgMTE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICBjYXNlIDEyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgIGNhc2UgMTI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgY2FzZSAxMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgIGNhc2UgMTM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgIGNhc2UgMTM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSAxMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgY2FzZSAxNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgIGNhc2UgMTQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICBjYXNlIDE1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICBjYXNlIDE1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICBjYXNlIDE2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgY2FzZSAxNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgIGNhc2UgMTc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgY2FzZSAxODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICBjYXNlIDE5NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBjYXNlIDIwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgIGNhc2UgMjA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgY2FzZSAyMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDIyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgIGNhc2UgMjMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICBjYXNlIDIzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgY2FzZSAyNDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgIGNhc2UgMjQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgIGNhc2UgMjQyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgY2FzZSAyNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgY2FzZSAyNTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgY2FzZSAyNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICBjYXNlIDI2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgIGNhc2UgMjY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIGxvb2thaGVhZDJXKDk1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAzMzUzICAgICAgICAgICAgICAgICAgLy8gJ3snIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDQzNzcgICAgICAgICAgICAgICAgICAvLyAneycgSW50ZWdlckxpdGVyYWwKICAgICB8fCBsayA9PSA0ODg5ICAgICAgICAgICAgICAgICAgLy8gJ3snIERlY2ltYWxMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTQwMSAgICAgICAgICAgICAgICAgIC8vICd7JyBEb3VibGVMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTkxMyAgICAgICAgICAgICAgICAgIC8vICd7JyBTdHJpbmdMaXRlcmFsCiAgICAgfHwgbGsgPT0gMTYxNTMgICAgICAgICAgICAgICAgIC8vICd7JyAnJCcKICAgICB8fCBsayA9PSAxNjY2NSAgICAgICAgICAgICAgICAgLy8gJ3snICckJCcKICAgICB8fCBsayA9PSAxNzE3NyAgICAgICAgICAgICAgICAgLy8gJ3snICclJwogICAgIHx8IGxrID09IDE4MDU1ICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcoJwogICAgIHx8IGxrID09IDE4MTE3ICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJygnCiAgICAgfHwgbGsgPT0gMTgxNzUgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnKCcKICAgICB8fCBsayA9PSAxODIwMSAgICAgICAgICAgICAgICAgLy8gJ3snICcoJwogICAgIHx8IGxrID09IDE4NzEzICAgICAgICAgICAgICAgICAvLyAneycgJygjJwogICAgIHx8IGxrID09IDIxMjczICAgICAgICAgICAgICAgICAvLyAneycgJysnCiAgICAgfHwgbGsgPT0gMjIyOTcgICAgICAgICAgICAgICAgIC8vICd7JyAnLScKICAgICB8fCBsayA9PSAyNDM0NSAgICAgICAgICAgICAgICAgLy8gJ3snICcvJwogICAgIHx8IGxrID09IDI0ODU3ICAgICAgICAgICAgICAgICAvLyAneycgJy8vJwogICAgIHx8IGxrID09IDI4NDQxICAgICAgICAgICAgICAgICAvLyAneycgJzwnCiAgICAgfHwgbGsgPT0gMjg5NTMgICAgICAgICAgICAgICAgIC8vICd7JyAnPCEtLScKICAgICB8fCBsayA9PSAzMTAwMSAgICAgICAgICAgICAgICAgLy8gJ3snICc8PycKICAgICB8fCBsayA9PSAzNTYwOSAgICAgICAgICAgICAgICAgLy8gJ3snICdbJwogICAgIHx8IGxrID09IDM2NjMzICAgICAgICAgICAgICAgICAvLyAneycgJ2FmdGVyJwogICAgIHx8IGxrID09IDM3NjU3ICAgICAgICAgICAgICAgICAvLyAneycgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM4MTY5ICAgICAgICAgICAgICAgICAvLyAneycgJ2FuY2VzdG9yJwogICAgIHx8IGxrID09IDM4NjgxICAgICAgICAgICAgICAgICAvLyAneycgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzkxOTMgICAgICAgICAgICAgICAgIC8vICd7JyAnYW5kJwogICAgIHx8IGxrID09IDQwMjE3ICAgICAgICAgICAgICAgICAvLyAneycgJ2FwcGVuZCcKICAgICB8fCBsayA9PSA0MDcyOSAgICAgICAgICAgICAgICAgLy8gJ3snICdhcnJheScKICAgICB8fCBsayA9PSA0MTI0MSAgICAgICAgICAgICAgICAgLy8gJ3snICdhcycKICAgICB8fCBsayA9PSA0MTc1MyAgICAgICAgICAgICAgICAgLy8gJ3snICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDIyNjUgICAgICAgICAgICAgICAgIC8vICd7JyAnYXQnCiAgICAgfHwgbGsgPT0gNDI3NzcgICAgICAgICAgICAgICAgIC8vICd7JyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQzMjg5ICAgICAgICAgICAgICAgICAvLyAneycgJ2Jhc2UtdXJpJwogICAgIHx8IGxrID09IDQzODAxICAgICAgICAgICAgICAgICAvLyAneycgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0NDMxMyAgICAgICAgICAgICAgICAgLy8gJ3snICdib3VuZGFyeS1zcGFjZScKICAgICB8fCBsayA9PSA0NDgyNSAgICAgICAgICAgICAgICAgLy8gJ3snICdicmVhaycKICAgICB8fCBsayA9PSA0NTg0OSAgICAgICAgICAgICAgICAgLy8gJ3snICdjYXNlJwogICAgIHx8IGxrID09IDQ2MzYxICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDY4NzMgICAgICAgICAgICAgICAgIC8vICd7JyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDczODUgICAgICAgICAgICAgICAgIC8vICd7JyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDg0MDkgICAgICAgICAgICAgICAgIC8vICd7JyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDg5MjEgICAgICAgICAgICAgICAgIC8vICd7JyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ5OTQ1ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNTA0NTcgICAgICAgICAgICAgICAgIC8vICd7JyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA1MDk2OSAgICAgICAgICAgICAgICAgLy8gJ3snICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTI1MDUgICAgICAgICAgICAgICAgIC8vICd7JyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MzAxNyAgICAgICAgICAgICAgICAgLy8gJ3snICdjb250aW51ZScKICAgICB8fCBsayA9PSA1MzUyOSAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3B5JwogICAgIHx8IGxrID09IDU0MDQxICAgICAgICAgICAgICAgICAvLyAneycgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1NDU1MyAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3VudCcKICAgICB8fCBsayA9PSA1NTA2NSAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWNpbWFsLWZvcm1hdCcKICAgICB8fCBsayA9PSA1NjA4OSAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU2NjAxICAgICAgICAgICAgICAgICAvLyAneycgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTcxMTMgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU3NjI1ICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTgxMzcgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU4NjQ5ICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjEyMDkgICAgICAgICAgICAgICAgIC8vICd7JyAnZGl2JwogICAgIHx8IGxrID09IDYxNzIxICAgICAgICAgICAgICAgICAvLyAneycgJ2RvY3VtZW50JwogICAgIHx8IGxrID09IDYyMjMzICAgICAgICAgICAgICAgICAvLyAneycgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjI3NDUgICAgICAgICAgICAgICAgIC8vICd7JyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2MzI1NyAgICAgICAgICAgICAgICAgLy8gJ3snICdlbHNlJwogICAgIHx8IGxrID09IDYzNzY5ICAgICAgICAgICAgICAgICAvLyAneycgJ2VtcHR5JwogICAgIHx8IGxrID09IDY0MjgxICAgICAgICAgICAgICAgICAvLyAneycgJ2VtcHR5LXNlcXVlbmNlJwogICAgIHx8IGxrID09IDY0NzkzICAgICAgICAgICAgICAgICAvLyAneycgJ2VuY29kaW5nJwogICAgIHx8IGxrID09IDY1MzA1ICAgICAgICAgICAgICAgICAvLyAneycgJ2VuZCcKICAgICB8fCBsayA9PSA2NjMyOSAgICAgICAgICAgICAgICAgLy8gJ3snICdlcScKICAgICB8fCBsayA9PSA2Njg0MSAgICAgICAgICAgICAgICAgLy8gJ3snICdldmVyeScKICAgICB8fCBsayA9PSA2Nzg2NSAgICAgICAgICAgICAgICAgLy8gJ3snICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjgzNzcgICAgICAgICAgICAgICAgIC8vICd7JyAnZXhpdCcKICAgICB8fCBsayA9PSA2ODg4OSAgICAgICAgICAgICAgICAgLy8gJ3snICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2OTQwMSAgICAgICAgICAgICAgICAgLy8gJ3snICdmYWxzZScKICAgICB8fCBsayA9PSA2OTkxMyAgICAgICAgICAgICAgICAgLy8gJ3snICdmaXJzdCcKICAgICB8fCBsayA9PSA3MDQyNSAgICAgICAgICAgICAgICAgLy8gJ3snICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNzA5MzcgICAgICAgICAgICAgICAgIC8vICd7JyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzE0NDkgICAgICAgICAgICAgICAgIC8vICd7JyAnZm9yJwogICAgIHx8IGxrID09IDcyOTg1ICAgICAgICAgICAgICAgICAvLyAneycgJ2Zyb20nCiAgICAgfHwgbGsgPT0gNzM0OTcgICAgICAgICAgICAgICAgIC8vICd7JyAnZnQtb3B0aW9uJwogICAgIHx8IGxrID09IDc1NTQ1ICAgICAgICAgICAgICAgICAvLyAneycgJ2Z1bmN0aW9uJwogICAgIHx8IGxrID09IDc2MDU3ICAgICAgICAgICAgICAgICAvLyAneycgJ2dlJwogICAgIHx8IGxrID09IDc3MDgxICAgICAgICAgICAgICAgICAvLyAneycgJ2dyb3VwJwogICAgIHx8IGxrID09IDc4MTA1ICAgICAgICAgICAgICAgICAvLyAneycgJ2d0JwogICAgIHx8IGxrID09IDc4NjE3ICAgICAgICAgICAgICAgICAvLyAneycgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzkxMjkgICAgICAgICAgICAgICAgIC8vICd7JyAnaWYnCiAgICAgfHwgbGsgPT0gNzk2NDEgICAgICAgICAgICAgICAgIC8vICd7JyAnaW1wb3J0JwogICAgIHx8IGxrID09IDgwMTUzICAgICAgICAgICAgICAgICAvLyAneycgJ2luJwogICAgIHx8IGxrID09IDgwNjY1ICAgICAgICAgICAgICAgICAvLyAneycgJ2luZGV4JwogICAgIHx8IGxrID09IDgyNzEzICAgICAgICAgICAgICAgICAvLyAneycgJ2luc2VydCcKICAgICB8fCBsayA9PSA4MzIyNSAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzczNyAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlZ3JpdHknCiAgICAgfHwgbGsgPT0gODQyNDkgICAgICAgICAgICAgICAgIC8vICd7JyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDg0NzYxICAgICAgICAgICAgICAgICAvLyAneycgJ2ludG8nCiAgICAgfHwgbGsgPT0gODUyNzMgICAgICAgICAgICAgICAgIC8vICd7JyAnaXMnCiAgICAgfHwgbGsgPT0gODU3ODUgICAgICAgICAgICAgICAgIC8vICd7JyAnaXRlbScKICAgICB8fCBsayA9PSA4NjI5NyAgICAgICAgICAgICAgICAgLy8gJ3snICdqc29uJwogICAgIHx8IGxrID09IDg2ODA5ICAgICAgICAgICAgICAgICAvLyAneycgJ2pzb24taXRlbScKICAgICB8fCBsayA9PSA4NzMyMSAgICAgICAgICAgICAgICAgLy8gJ3snICdqc29uaXEnCiAgICAgfHwgbGsgPT0gODg4NTcgICAgICAgICAgICAgICAgIC8vICd7JyAnbGFzdCcKICAgICB8fCBsayA9PSA4OTM2OSAgICAgICAgICAgICAgICAgLy8gJ3snICdsYXgnCiAgICAgfHwgbGsgPT0gODk4ODEgICAgICAgICAgICAgICAgIC8vICd7JyAnbGUnCiAgICAgfHwgbGsgPT0gOTA5MDUgICAgICAgICAgICAgICAgIC8vICd7JyAnbGV0JwogICAgIHx8IGxrID09IDkxOTI5ICAgICAgICAgICAgICAgICAvLyAneycgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTI5NTMgICAgICAgICAgICAgICAgIC8vICd7JyAnbHQnCiAgICAgfHwgbGsgPT0gOTM5NzcgICAgICAgICAgICAgICAgIC8vICd7JyAnbW9kJwogICAgIHx8IGxrID09IDk0NDg5ICAgICAgICAgICAgICAgICAvLyAneycgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NTAwMSAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTYwMjUgICAgICAgICAgICAgICAgIC8vICd7JyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk2NTM3ICAgICAgICAgICAgICAgICAvLyAneycgJ25hbWVzcGFjZS1ub2RlJwogICAgIHx8IGxrID09IDk3MDQ5ICAgICAgICAgICAgICAgICAvLyAneycgJ25lJwogICAgIHx8IGxrID09IDk5NjA5ICAgICAgICAgICAgICAgICAvLyAneycgJ25vZGUnCiAgICAgfHwgbGsgPT0gMTAwMTIxICAgICAgICAgICAgICAgIC8vICd7JyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gMTAwNjMzICAgICAgICAgICAgICAgIC8vICd7JyAnbm90JwogICAgIHx8IGxrID09IDEwMTE0NSAgICAgICAgICAgICAgICAvLyAneycgJ251bGwnCiAgICAgfHwgbGsgPT0gMTAxNjU3ICAgICAgICAgICAgICAgIC8vICd7JyAnb2JqZWN0JwogICAgIHx8IGxrID09IDEwMzcwNSAgICAgICAgICAgICAgICAvLyAneycgJ29ubHknCiAgICAgfHwgbGsgPT0gMTA0MjE3ICAgICAgICAgICAgICAgIC8vICd7JyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwNDcyOSAgICAgICAgICAgICAgICAvLyAneycgJ29yJwogICAgIHx8IGxrID09IDEwNTI0MSAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyJwogICAgIHx8IGxrID09IDEwNTc1MyAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTA2MjY1ICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA3ODAxICAgICAgICAgICAgICAgIC8vICd7JyAncGFyZW50JwogICAgIHx8IGxrID09IDExMDg3MyAgICAgICAgICAgICAgICAvLyAneycgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMTEzODUgICAgICAgICAgICAgICAgLy8gJ3snICdwcmVjZWRpbmctc2libGluZycKICAgICB8fCBsayA9PSAxMTI5MjEgICAgICAgICAgICAgICAgLy8gJ3snICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMzk0NSAgICAgICAgICAgICAgICAvLyAneycgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTQ0NTcgICAgICAgICAgICAgICAgLy8gJ3snICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExNDk2OSAgICAgICAgICAgICAgICAvLyAneycgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTU0ODEgICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTE1OTkzICAgICAgICAgICAgICAgIC8vICd7JyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExNzAxNyAgICAgICAgICAgICAgICAvLyAneycgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTc1MjkgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE4MDQxICAgICAgICAgICAgICAgIC8vICd7JyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTg1NTMgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEtZWxlbWVudCcKICAgICB8fCBsayA9PSAxMTkwNjUgICAgICAgICAgICAgICAgLy8gJ3snICdzY29yZScKICAgICB8fCBsayA9PSAxMTk1NzcgICAgICAgICAgICAgICAgLy8gJ3snICdzZWxlY3QnCiAgICAgfHwgbGsgPT0gMTIwMDg5ICAgICAgICAgICAgICAgIC8vICd7JyAnc2VsZicKICAgICB8fCBsayA9PSAxMjI2NDkgICAgICAgICAgICAgICAgLy8gJ3snICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMzE2MSAgICAgICAgICAgICAgICAvLyAneycgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIzNjczICAgICAgICAgICAgICAgIC8vICd7JyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyNDE4NSAgICAgICAgICAgICAgICAvLyAneycgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyNTcyMSAgICAgICAgICAgICAgICAvLyAneycgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjY3NDUgICAgICAgICAgICAgICAgLy8gJ3snICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI3MjU3ICAgICAgICAgICAgICAgIC8vICd7JyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNzc2OSAgICAgICAgICAgICAgICAvLyAneycgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI5ODE3ICAgICAgICAgICAgICAgIC8vICd7JyAndG8nCiAgICAgfHwgbGsgPT0gMTMwMzI5ICAgICAgICAgICAgICAgIC8vICd7JyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTMwODQxICAgICAgICAgICAgICAgIC8vICd7JyAndHJ1ZScKICAgICB8fCBsayA9PSAxMzEzNTMgICAgICAgICAgICAgICAgLy8gJ3snICd0cnknCiAgICAgfHwgbGsgPT0gMTMxODY1ICAgICAgICAgICAgICAgIC8vICd7JyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTMyMzc3ICAgICAgICAgICAgICAgIC8vICd7JyAndHlwZScKICAgICB8fCBsayA9PSAxMzI4ODkgICAgICAgICAgICAgICAgLy8gJ3snICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEzMzQwMSAgICAgICAgICAgICAgICAvLyAneycgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzNDQyNSAgICAgICAgICAgICAgICAvLyAneycgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzQ5MzcgICAgICAgICAgICAgICAgLy8gJ3snICd1cGRhdGluZycKICAgICB8fCBsayA9PSAxMzY0NzMgICAgICAgICAgICAgICAgLy8gJ3snICd2YWxpZGF0ZScKICAgICB8fCBsayA9PSAxMzY5ODUgICAgICAgICAgICAgICAgLy8gJ3snICd2YWx1ZScKICAgICB8fCBsayA9PSAxMzc0OTcgICAgICAgICAgICAgICAgLy8gJ3snICd2YXJpYWJsZScKICAgICB8fCBsayA9PSAxMzgwMDkgICAgICAgICAgICAgICAgLy8gJ3snICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzOTU0NSAgICAgICAgICAgICAgICAvLyAneycgJ3doZXJlJwogICAgIHx8IGxrID09IDE0MDA1NyAgICAgICAgICAgICAgICAvLyAneycgJ3doaWxlJwogICAgIHx8IGxrID09IDE0MTU5MyAgICAgICAgICAgICAgICAvLyAneycgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQ0MTUzICAgICAgICAgICAgICAgIC8vICd7JyAneycKICAgICB8fCBsayA9PSAxNDUxNzcgICAgICAgICAgICAgICAgLy8gJ3snICd7fCcKICAgICB8fCBsayA9PSAxNDcyMjUpICAgICAgICAgICAgICAgLy8gJ3snICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDIwLCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHRyeV9MaXRlcmFsKCk7CiAgICAgICAgICBtZW1vaXplKDIwLCBlMEEsIC0xKTsKICAgICAgICAgIGxrID0gLTE0OwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0Z1bmN0aW9uQ2FsbCgpOwogICAgICAgICAgICBtZW1vaXplKDIwLCBlMEEsIC01KTsKICAgICAgICAgICAgbGsgPSAtMTQ7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDVBKQogICAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICB0cnlfQmxvY2tFeHByKCk7CiAgICAgICAgICAgICAgbWVtb2l6ZSgyMCwgZTBBLCAtMTApOwogICAgICAgICAgICAgIGxrID0gLTE0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChwMTBBKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbGsgPSAtMTE7CiAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICAgIG1lbW9pemUoMjAsIGUwQSwgLTExKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICBjYXNlIDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgY2FzZSAxMjkzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnIEVPRgogICAgY2FzZSAxMjk5NzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgRU9GCiAgICBjYXNlIDEzMDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyBFT0YKICAgIGNhc2UgMTM0NDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnIScKICAgIGNhc2UgMTM1MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICchJwogICAgY2FzZSAxMzU2NzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyEnCiAgICBjYXNlIDEzOTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJyE9JwogICAgY2FzZSAxNDAyMTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyE9JwogICAgY2FzZSAxNDA3OTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyE9JwogICAgY2FzZSAxOTU5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcpJwogICAgY2FzZSAxOTY1MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyknCiAgICBjYXNlIDE5NzExOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnKScKICAgIGNhc2UgMjAxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnKicKICAgIGNhc2UgMjAxNjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICcqJwogICAgY2FzZSAyMDIyMzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJyonCiAgICBjYXNlIDIxMTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJysnCiAgICBjYXNlIDIxMTg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnKycKICAgIGNhc2UgMjEyNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcrJwogICAgY2FzZSAyMTYzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcsJwogICAgY2FzZSAyMTcwMTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJywnCiAgICBjYXNlIDIxNzU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLCcKICAgIGNhc2UgMjIxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLScKICAgIGNhc2UgMjIyMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICctJwogICAgY2FzZSAyMjI3MTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJy0nCiAgICBjYXNlIDIzMTc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJy4nCiAgICBjYXNlIDIzMjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnLicKICAgIGNhc2UgMjMyOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcuJwogICAgY2FzZSAyNDE5OTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICcvJwogICAgY2FzZSAyNDI2MTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJy8nCiAgICBjYXNlIDI0MzE5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLycKICAgIGNhc2UgMjQ3MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnLy8nCiAgICBjYXNlIDI0NzczOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnLy8nCiAgICBjYXNlIDI0ODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnLy8nCiAgICBjYXNlIDI1NzM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzonCiAgICBjYXNlIDI1Nzk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnOicKICAgIGNhc2UgMjU4NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc6JwogICAgY2FzZSAyNzc4MzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc7JwogICAgY2FzZSAyNzg0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzsnCiAgICBjYXNlIDI3OTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnOycKICAgIGNhc2UgMjgyOTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPCcKICAgIGNhc2UgMjgzNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc8JwogICAgY2FzZSAyODQxNTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzwnCiAgICBjYXNlIDI5ODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzw8JwogICAgY2FzZSAyOTg5MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJzw8JwogICAgY2FzZSAyOTk1MTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzw8JwogICAgY2FzZSAzMDM0MzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc8PScKICAgIGNhc2UgMzA0MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc8PScKICAgIGNhc2UgMzA0NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc8PScKICAgIGNhc2UgMzEzNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPScKICAgIGNhc2UgMzE0Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc9JwogICAgY2FzZSAzMTQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJz0nCiAgICBjYXNlIDMxODc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJz4nCiAgICBjYXNlIDMxOTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPicKICAgIGNhc2UgMzE5OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc+JwogICAgY2FzZSAzMjM5MTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICc+PScKICAgIGNhc2UgMzI0NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc+PScKICAgIGNhc2UgMzI1MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc+PScKICAgIGNhc2UgMzI5MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnPj4nCiAgICBjYXNlIDMyOTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnPj4nCiAgICBjYXNlIDMzMDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnPj4nCiAgICBjYXNlIDM1NDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ1snCiAgICBjYXNlIDM1NTI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnWycKICAgIGNhc2UgMzU1ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdbJwogICAgY2FzZSAzNTk3NTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICddJwogICAgY2FzZSAzNjAzNzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ10nCiAgICBjYXNlIDM2MDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnXScKICAgIGNhc2UgMzY0ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYWZ0ZXInCiAgICBjYXNlIDM2NTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYWZ0ZXInCiAgICBjYXNlIDM2NjA3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYWZ0ZXInCiAgICBjYXNlIDM5MDQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2FuZCcKICAgIGNhc2UgMzkxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhbmQnCiAgICBjYXNlIDM5MTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYW5kJwogICAgY2FzZSA0MTA5NTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdhcycKICAgIGNhc2UgNDExNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdhcycKICAgIGNhc2UgNDEyMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhcycKICAgIGNhc2UgNDE2MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYXNjZW5kaW5nJwogICAgY2FzZSA0MTY2OTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2FzY2VuZGluZycKICAgIGNhc2UgNDE3Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdhc2NlbmRpbmcnCiAgICBjYXNlIDQyMTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2F0JwogICAgY2FzZSA0MjE4MTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2F0JwogICAgY2FzZSA0MjIzOTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2F0JwogICAgY2FzZSA0MzY1NTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdiZWZvcmUnCiAgICBjYXNlIDQzNzE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYmVmb3JlJwogICAgY2FzZSA0Mzc3NTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2JlZm9yZScKICAgIGNhc2UgNDUxOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnYnknCiAgICBjYXNlIDQ1MjUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnYnknCiAgICBjYXNlIDQ1MzExOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnYnknCiAgICBjYXNlIDQ1NzAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Nhc2UnCiAgICBjYXNlIDQ1NzY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzZScKICAgIGNhc2UgNDU4MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjYXNlJwogICAgY2FzZSA0NjIxNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdjYXN0JwogICAgY2FzZSA0NjI3NzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2Nhc3QnCiAgICBjYXNlIDQ2MzM1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY2FzdCcKICAgIGNhc2UgNDY3Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ2Nzg5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ2ODQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY2FzdGFibGUnCiAgICBjYXNlIDQ4Nzc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2NvbGxhdGlvbicKICAgIGNhc2UgNDg4Mzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjb2xsYXRpb24nCiAgICBjYXNlIDQ4ODk1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY29sbGF0aW9uJwogICAgY2FzZSA1MTMzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdjb250YWlucycKICAgIGNhc2UgNTEzOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdjb250YWlucycKICAgIGNhc2UgNTE0NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdjb250YWlucycKICAgIGNhc2UgNTQ0MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnY291bnQnCiAgICBjYXNlIDU0NDY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnY291bnQnCiAgICBjYXNlIDU0NTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnY291bnQnCiAgICBjYXNlIDU2NDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2RlZmF1bHQnCiAgICBjYXNlIDU2NTE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZGVmYXVsdCcKICAgIGNhc2UgNTY1NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdkZWZhdWx0JwogICAgY2FzZSA1ODUwMzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdkZXNjZW5kaW5nJwogICAgY2FzZSA1ODU2NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDU4NjIzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZGVzY2VuZGluZycKICAgIGNhc2UgNjEwNjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZGl2JwogICAgY2FzZSA2MTEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2RpdicKICAgIGNhc2UgNjExODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdkaXYnCiAgICBjYXNlIDYzMTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2Vsc2UnCiAgICBjYXNlIDYzMTczOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZWxzZScKICAgIGNhc2UgNjMyMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbHNlJwogICAgY2FzZSA2MzYyMzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdlbXB0eScKICAgIGNhc2UgNjM2ODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdlbXB0eScKICAgIGNhc2UgNjM3NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbXB0eScKICAgIGNhc2UgNjUxNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZW5kJwogICAgY2FzZSA2NTIyMTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VuZCcKICAgIGNhc2UgNjUyNzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdlbmQnCiAgICBjYXNlIDY2MTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2VxJwogICAgY2FzZSA2NjI0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2VxJwogICAgY2FzZSA2NjMwMzogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2VxJwogICAgY2FzZSA2NzcxOTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdleGNlcHQnCiAgICBjYXNlIDY3NzgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZXhjZXB0JwogICAgY2FzZSA2NzgzOTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2V4Y2VwdCcKICAgIGNhc2UgNzEzMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZm9yJwogICAgY2FzZSA3MTM2NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ZvcicKICAgIGNhc2UgNzE0MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdmb3InCiAgICBjYXNlIDc1OTExOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2dlJwogICAgY2FzZSA3NTk3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2dlJwogICAgY2FzZSA3NjAzMTogICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ2dlJwogICAgY2FzZSA3NjkzNTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdncm91cCcKICAgIGNhc2UgNzY5OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdncm91cCcKICAgIGNhc2UgNzcwNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdncm91cCcKICAgIGNhc2UgNzc5NTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnZ3QnCiAgICBjYXNlIDc4MDIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnZ3QnCiAgICBjYXNlIDc4MDc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnZ3QnCiAgICBjYXNlIDc4NDcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2lkaXYnCiAgICBjYXNlIDc4NTMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaWRpdicKICAgIGNhc2UgNzg1OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpZGl2JwogICAgY2FzZSA4MzA3OTogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpbnN0YW5jZScKICAgIGNhc2UgODMxNDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdpbnN0YW5jZScKICAgIGNhc2UgODMxOTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnN0YW5jZScKICAgIGNhc2UgODQxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnaW50ZXJzZWN0JwogICAgY2FzZSA4NDE2NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ2ludGVyc2VjdCcKICAgIGNhc2UgODQyMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnRlcnNlY3QnCiAgICBjYXNlIDg0NjE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2ludG8nCiAgICBjYXNlIDg0Njc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnaW50bycKICAgIGNhc2UgODQ3MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpbnRvJwogICAgY2FzZSA4NTEyNzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdpcycKICAgIGNhc2UgODUxODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdpcycKICAgIGNhc2UgODUyNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdpcycKICAgIGNhc2UgODk3MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbGUnCiAgICBjYXNlIDg5Nzk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnbGUnCiAgICBjYXNlIDg5ODU1OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbGUnCiAgICBjYXNlIDkwNzU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ2xldCcKICAgIGNhc2UgOTA4MjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsZXQnCiAgICBjYXNlIDkwODc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbGV0JwogICAgY2FzZSA5MjgwNzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdsdCcKICAgIGNhc2UgOTI4Njk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdsdCcKICAgIGNhc2UgOTI5Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdsdCcKICAgIGNhc2UgOTM4MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnbW9kJwogICAgY2FzZSA5Mzg5MzogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ21vZCcKICAgIGNhc2UgOTM5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdtb2QnCiAgICBjYXNlIDk0MzQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ21vZGlmeScKICAgIGNhc2UgOTQ0MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdtb2RpZnknCiAgICBjYXNlIDk0NDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnbW9kaWZ5JwogICAgY2FzZSA5NjkwMzogICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICduZScKICAgIGNhc2UgOTY5NjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICduZScKICAgIGNhc2UgOTcwMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICduZScKICAgIGNhc2UgMTAzNTU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnb25seScKICAgIGNhc2UgMTAzNjIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdvbmx5JwogICAgY2FzZSAxMDM2Nzk6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ29ubHknCiAgICBjYXNlIDEwNDU4MzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ29yJwogICAgY2FzZSAxMDQ2NDU6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ29yJwogICAgY2FzZSAxMDQ3MDM6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ29yJwogICAgY2FzZSAxMDUwOTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdvcmRlcicKICAgIGNhc2UgMTA1MTU3OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdvcmRlcicKICAgIGNhc2UgMTA1MjE1OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdvcmRlcicKICAgIGNhc2UgMTA3MTQzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAncGFyYWdyYXBocycKICAgIGNhc2UgMTA3MjA1OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdwYXJhZ3JhcGhzJwogICAgY2FzZSAxMDcyNjM6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3BhcmFncmFwaHMnCiAgICBjYXNlIDExNDgyMzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3JldHVybicKICAgIGNhc2UgMTE0ODg1OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdyZXR1cm4nCiAgICBjYXNlIDExNDk0MzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAncmV0dXJuJwogICAgY2FzZSAxMTY4NzE6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzYXRpc2ZpZXMnCiAgICBjYXNlIDExNjkzMzogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnc2F0aXNmaWVzJwogICAgY2FzZSAxMTY5OTE6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3NhdGlzZmllcycKICAgIGNhc2UgMTIxNDc5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnc2VudGVuY2VzJwogICAgY2FzZSAxMjE1NDE6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3NlbnRlbmNlcycKICAgIGNhc2UgMTIxNTk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdzZW50ZW5jZXMnCiAgICBjYXNlIDEyMzUyNzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3N0YWJsZScKICAgIGNhc2UgMTIzNTg5OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdzdGFibGUnCiAgICBjYXNlIDEyMzY0NzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnc3RhYmxlJwogICAgY2FzZSAxMjQwMzk6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICdzdGFydCcKICAgIGNhc2UgMTI0MTAxOiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICdzdGFydCcKICAgIGNhc2UgMTI0MTU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICdzdGFydCcKICAgIGNhc2UgMTI5MTU5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAndGltZXMnCiAgICBjYXNlIDEyOTIyMTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAndGltZXMnCiAgICBjYXNlIDEyOTI3OTogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAndGltZXMnCiAgICBjYXNlIDEyOTY3MTogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3RvJwogICAgY2FzZSAxMjk3MzM6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3RvJwogICAgY2FzZSAxMjk3OTE6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3RvJwogICAgY2FzZSAxMzAxODM6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd0cmVhdCcKICAgIGNhc2UgMTMwMjQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICd0cmVhdCcKICAgIGNhc2UgMTMwMzAzOiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd0cmVhdCcKICAgIGNhc2UgMTMzMjU1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAndW5pb24nCiAgICBjYXNlIDEzMzMxNzogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAndW5pb24nCiAgICBjYXNlIDEzMzM3NTogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAndW5pb24nCiAgICBjYXNlIDEzOTM5OTogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3doZXJlJwogICAgY2FzZSAxMzk0NjE6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3doZXJlJwogICAgY2FzZSAxMzk1MTk6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJ3doZXJlJwogICAgY2FzZSAxNDE0NDc6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd3aXRoJwogICAgY2FzZSAxNDE1MDk6ICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJ3dpdGgnCiAgICBjYXNlIDE0MTU2NzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd2l0aCcKICAgIGNhc2UgMTQyOTgzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnd29yZHMnCiAgICBjYXNlIDE0MzA0NTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnd29yZHMnCiAgICBjYXNlIDE0MzEwMzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnd29yZHMnCiAgICBjYXNlIDE0NTU0MzogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ3wnCiAgICBjYXNlIDE0NTYwNTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfCcKICAgIGNhc2UgMTQ1NjYzOiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8JwogICAgY2FzZSAxNDYwNTU6ICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnICd8fCcKICAgIGNhc2UgMTQ2MTE3OiAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnICd8fCcKICAgIGNhc2UgMTQ2MTc1OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd8fCcKICAgIGNhc2UgMTQ2NTY3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnfH0nCiAgICBjYXNlIDE0NjYyOTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfH0nCiAgICBjYXNlIDE0NjY4NzogICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJyAnfH0nCiAgICBjYXNlIDE0NzA3OTogICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJ30nCiAgICBjYXNlIDE0NzE0MTogICAgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnfScKICAgIGNhc2UgMTQ3MTk5OiAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICd9JwogICAgICB0cnlfTGl0ZXJhbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIHRyeV9WYXJSZWYoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICB0cnlfUGFyZW50aGVzaXplZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJCcKICAgICAgdHJ5X0NvbnRleHRJdGVtRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTU6CiAgICBjYXNlIDE3OTI2OiAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnKCcKICAgIGNhc2UgMTc5OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnKCcKICAgIGNhc2UgMTc5OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnKCcKICAgIGNhc2UgMTc5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnKCcKICAgIGNhc2UgMTc5OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcoJwogICAgY2FzZSAxNzk5NjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJyAnKCcKICAgIGNhc2UgMTc5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJygnCiAgICBjYXNlIDE4MDAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhcycgJygnCiAgICBjYXNlIDE4MDAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcoJwogICAgY2FzZSAxODAwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXQnICcoJwogICAgY2FzZSAxODAwNDogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcoJwogICAgY2FzZSAxODAwNTogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnKCcKICAgIGNhc2UgMTgwMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnKCcKICAgIGNhc2UgMTgwMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnKCcKICAgIGNhc2UgMTgwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcoJwogICAgY2FzZSAxODAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJygnCiAgICBjYXNlIDE4MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJygnCiAgICBjYXNlIDE4MDEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJygnCiAgICBjYXNlIDE4MDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJygnCiAgICBjYXNlIDE4MDE1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcoJwogICAgY2FzZSAxODAxODogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJygnCiAgICBjYXNlIDE4MDE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcoJwogICAgY2FzZSAxODAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJygnCiAgICBjYXNlIDE4MDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJygnCiAgICBjYXNlIDE4MDI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JyAnKCcKICAgIGNhc2UgMTgwMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJygnCiAgICBjYXNlIDE4MDI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcgJygnCiAgICBjYXNlIDE4MDI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJygnCiAgICBjYXNlIDE4MDI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnKCcKICAgIGNhc2UgMTgwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcoJwogICAgY2FzZSAxODAzMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnKCcKICAgIGNhc2UgMTgwMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcoJwogICAgY2FzZSAxODAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTgwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcoJwogICAgY2FzZSAxODAzOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JyAnKCcKICAgIGNhc2UgMTgwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnKCcKICAgIGNhc2UgMTgwNDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICcoJwogICAgY2FzZSAxODA0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICcoJwogICAgY2FzZSAxODA0NjogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICcoJwogICAgY2FzZSAxODA0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnKCcKICAgIGNhc2UgMTgwNDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnKCcKICAgIGNhc2UgMTgwNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnKCcKICAgIGNhc2UgMTgwNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJygnCiAgICBjYXNlIDE4MDUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnKCcKICAgIGNhc2UgMTgwNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnKCcKICAgIGNhc2UgMTgwNTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnKCcKICAgIGNhc2UgMTgwNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJygnCiAgICBjYXNlIDE4MDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJygnCiAgICBjYXNlIDE4MDU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICcoJwogICAgY2FzZSAxODA2MjogICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScgJygnCiAgICBjYXNlIDE4MDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICcoJwogICAgY2FzZSAxODA2ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnICcoJwogICAgY2FzZSAxODA3MDogICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICcoJwogICAgY2FzZSAxODA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnICcoJwogICAgY2FzZSAxODA3MzogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicgJygnCiAgICBjYXNlIDE4MDc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICcoJwogICAgY2FzZSAxODA3NjogICAgICAgICAgICAgICAgICAgICAvLyAnaW4nICcoJwogICAgY2FzZSAxODA3NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnICcoJwogICAgY2FzZSAxODA4MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnKCcKICAgIGNhc2UgMTgwODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnKCcKICAgIGNhc2UgMTgwODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJygnCiAgICBjYXNlIDE4MDg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICcoJwogICAgY2FzZSAxODA4NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycgJygnCiAgICBjYXNlIDE4MDg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycgJygnCiAgICBjYXNlIDE4MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnKCcKICAgIGNhc2UgMTgwOTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScgJygnCiAgICBjYXNlIDE4MDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JyAnKCcKICAgIGNhc2UgMTgwOTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcgJygnCiAgICBjYXNlIDE4MDk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZScgJygnCiAgICBjYXNlIDE4MDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICcoJwogICAgY2FzZSAxODA5OTogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcgJygnCiAgICBjYXNlIDE4MTAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcgJygnCiAgICBjYXNlIDE4MTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnICcoJwogICAgY2FzZSAxODEwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnKCcKICAgIGNhc2UgMTgxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJygnCiAgICBjYXNlIDE4MTA3OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICcoJwogICAgY2FzZSAxODEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnICcoJwogICAgY2FzZSAxODExNTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcoJwogICAgY2FzZSAxODExODogICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnKCcKICAgIGNhc2UgMTgxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknICcoJwogICAgY2FzZSAxODEyMzogICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJyAnKCcKICAgIGNhc2UgMTgxMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJyAnKCcKICAgIGNhc2UgMTgxMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJyAnKCcKICAgIGNhc2UgMTgxMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICcoJwogICAgY2FzZSAxODEyNzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnICcoJwogICAgY2FzZSAxODEzMDogICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JyAnKCcKICAgIGNhc2UgMTgxMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJygnCiAgICBjYXNlIDE4MTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJygnCiAgICBjYXNlIDE4MTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICcoJwogICAgY2FzZSAxODE0MzogICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJygnCiAgICBjYXNlIDE4MTQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICcoJwogICAgY2FzZSAxODE0NTogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnKCcKICAgIGNhc2UgMTgxNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJygnCiAgICBjYXNlIDE4MTQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICcoJwogICAgY2FzZSAxODE0OTogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnKCcKICAgIGNhc2UgMTgxNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnKCcKICAgIGNhc2UgMTgxNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcgJygnCiAgICBjYXNlIDE4MTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnKCcKICAgIGNhc2UgMTgxNTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcoJwogICAgY2FzZSAxODE2MDogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJygnCiAgICBjYXNlIDE4MTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcoJwogICAgY2FzZSAxODE2MjogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcoJwogICAgY2FzZSAxODE2NTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnKCcKICAgIGNhc2UgMTgxNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnKCcKICAgIGNhc2UgMTgxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnKCcKICAgIGNhc2UgMTgxNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJygnCiAgICBjYXNlIDE4MTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJygnCiAgICBjYXNlIDE4MTc4OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnKCcKICAgIGNhc2UgMTgxODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnKCcKICAgIGNhc2UgMTgxODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJygnCiAgICBjYXNlIDE4MTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJygnCiAgICBjYXNlIDE4MTg2OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJygnCiAgICBjYXNlIDE4MTg3OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJygnCiAgICBjYXNlIDE4MTg4OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJygnCiAgICBjYXNlIDE4MTg5OiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnKCcKICAgIGNhc2UgMTgxOTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnKCcKICAgIGNhc2UgMTgxOTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnKCcKICAgIGNhc2UgMTgxOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnICcoJwogICAgICB0cnlfRnVuY3Rpb25DYWxsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDQwNzg6ICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJ3snCiAgICAgIHRyeV9PcmRlcmVkRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQ0MTM0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJ3snCiAgICAgIHRyeV9Vbm9yZGVyZWRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzMzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJScKICAgIGNhc2UgNzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDI0NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgY2FzZSAxNDg1NDogICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJyMnCiAgICBjYXNlIDE0OTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicgJyMnCiAgICBjYXNlIDE0OTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJyMnCiAgICBjYXNlIDE0OTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJyMnCiAgICBjYXNlIDE0OTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnIycKICAgIGNhc2UgMTQ5MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcgJyMnCiAgICBjYXNlIDE0OTI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcjJwogICAgY2FzZSAxNDkyODogICAgICAgICAgICAgICAgICAgICAvLyAnYXMnICcjJwogICAgY2FzZSAxNDkyOTogICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnIycKICAgIGNhc2UgMTQ5MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JyAnIycKICAgIGNhc2UgMTQ5MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJyMnCiAgICBjYXNlIDE0OTMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgJyMnCiAgICBjYXNlIDE0OTMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnICcjJwogICAgY2FzZSAxNDkzNDogICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnICcjJwogICAgY2FzZSAxNDkzNTogICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICcjJwogICAgY2FzZSAxNDkzNzogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScgJyMnCiAgICBjYXNlIDE0OTM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JyAnIycKICAgIGNhc2UgMTQ5Mzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyAnIycKICAgIGNhc2UgMTQ5NDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnIycKICAgIGNhc2UgMTQ5NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnIycKICAgIGNhc2UgMTQ5NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgJyMnCiAgICBjYXNlIDE0OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnIycKICAgIGNhc2UgMTQ5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICcjJwogICAgY2FzZSAxNDk0NzogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnIycKICAgIGNhc2UgMTQ5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICcjJwogICAgY2FzZSAxNDk1MTogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcjJwogICAgY2FzZSAxNDk1MjogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJyMnCiAgICBjYXNlIDE0OTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICcjJwogICAgY2FzZSAxNDk1NDogICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnICcjJwogICAgY2FzZSAxNDk1NTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICcjJwogICAgY2FzZSAxNDk1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJyMnCiAgICBjYXNlIDE0OTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnIycKICAgIGNhc2UgMTQ5NTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJyMnCiAgICBjYXNlIDE0OTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnIycKICAgIGNhc2UgMTQ5NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJyMnCiAgICBjYXNlIDE0OTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnIycKICAgIGNhc2UgMTQ5Njc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicgJyMnCiAgICBjYXNlIDE0OTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJyMnCiAgICBjYXNlIDE0OTcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnIycKICAgIGNhc2UgMTQ5NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICcjJwogICAgY2FzZSAxNDk3MjogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICcjJwogICAgY2FzZSAxNDk3NDogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICcjJwogICAgY2FzZSAxNDk3NTogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnIycKICAgIGNhc2UgMTQ5Nzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnIycKICAgIGNhc2UgMTQ5Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnIycKICAgIGNhc2UgMTQ5ODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJyMnCiAgICBjYXNlIDE0OTgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnIycKICAgIGNhc2UgMTQ5ODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnIycKICAgIGNhc2UgMTQ5ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnIycKICAgIGNhc2UgMTQ5ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnIycKICAgIGNhc2UgMTQ5ODU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJyMnCiAgICBjYXNlIDE0OTg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJyMnCiAgICBjYXNlIDE0OTg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICcjJwogICAgY2FzZSAxNDk5MDogICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScgJyMnCiAgICBjYXNlIDE0OTkxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICcjJwogICAgY2FzZSAxNDk5NjogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnICcjJwogICAgY2FzZSAxNDk5ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICcjJwogICAgY2FzZSAxNTAwMDogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnICcjJwogICAgY2FzZSAxNTAwMTogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicgJyMnCiAgICBjYXNlIDE1MDAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICcjJwogICAgY2FzZSAxNTAwNDogICAgICAgICAgICAgICAgICAgICAvLyAnaW4nICcjJwogICAgY2FzZSAxNTAwNTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnICcjJwogICAgY2FzZSAxNTAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnIycKICAgIGNhc2UgMTUwMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnIycKICAgIGNhc2UgMTUwMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJyMnCiAgICBjYXNlIDE1MDEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICcjJwogICAgY2FzZSAxNTAxMzogICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycgJyMnCiAgICBjYXNlIDE1MDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycgJyMnCiAgICBjYXNlIDE1MDE2OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnIycKICAgIGNhc2UgMTUwMTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScgJyMnCiAgICBjYXNlIDE1MDIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JyAnIycKICAgIGNhc2UgMTUwMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcgJyMnCiAgICBjYXNlIDE1MDIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdsZScgJyMnCiAgICBjYXNlIDE1MDI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICcjJwogICAgY2FzZSAxNTAyNzogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcgJyMnCiAgICBjYXNlIDE1MDI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcgJyMnCiAgICBjYXNlIDE1MDMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnICcjJwogICAgY2FzZSAxNTAzMjogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnIycKICAgIGNhc2UgMTUwMzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJyMnCiAgICBjYXNlIDE1MDM1OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICcjJwogICAgY2FzZSAxNTAzNzogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnICcjJwogICAgY2FzZSAxNTA0MzogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcjJwogICAgY2FzZSAxNTA0NTogICAgICAgICAgICAgICAgICAgICAvLyAnbnVsbCcgJyMnCiAgICBjYXNlIDE1MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcjJwogICAgY2FzZSAxNTA1MDogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJyMnCiAgICBjYXNlIDE1MDUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcjJwogICAgY2FzZSAxNTA1MjogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcjJwogICAgY2FzZSAxNTA1MzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcjJwogICAgY2FzZSAxNTA1NDogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJyMnCiAgICBjYXNlIDE1MDU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJyMnCiAgICBjYXNlIDE1MDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcjJwogICAgY2FzZSAxNTA2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnIycKICAgIGNhc2UgMTUwNjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnIycKICAgIGNhc2UgMTUwNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNTA3MDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnIycKICAgIGNhc2UgMTUwNzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcjJwogICAgY2FzZSAxNTA3MjogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnIycKICAgIGNhc2UgMTUwNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJyMnCiAgICBjYXNlIDE1MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcjJwogICAgY2FzZSAxNTA3NjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJyMnCiAgICBjYXNlIDE1MDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScgJyMnCiAgICBjYXNlIDE1MDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnICcjJwogICAgY2FzZSAxNTA4MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicgJyMnCiAgICBjYXNlIDE1MDg3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJyAnIycKICAgIGNhc2UgMTUwODg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnICcjJwogICAgY2FzZSAxNTA4OTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJyAnIycKICAgIGNhc2UgMTUwOTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JyAnIycKICAgIGNhc2UgMTUwOTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcgJyMnCiAgICBjYXNlIDE1MDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAnIycKICAgIGNhc2UgMTUxMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnIycKICAgIGNhc2UgMTUxMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnIycKICAgIGNhc2UgMTUxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RydWUnICcjJwogICAgY2FzZSAxNTEwNDogICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JyAnIycKICAgIGNhc2UgMTUxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyAnIycKICAgIGNhc2UgMTUxMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnICcjJwogICAgY2FzZSAxNTEwODogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nICcjJwogICAgY2FzZSAxNTExMDogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnIycKICAgIGNhc2UgMTUxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnIycKICAgIGNhc2UgMTUxMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnIycKICAgIGNhc2UgMTUxMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnIycKICAgIGNhc2UgMTUxMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnIycKICAgIGNhc2UgMTUxMTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICcjJwogICAgY2FzZSAxNTEyMDogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnICcjJwogICAgY2FzZSAxNTEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcjJwogICAgY2FzZSAxNTEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcgJyMnCiAgICAgIHRyeV9GdW5jdGlvbkl0ZW1FeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTA6CiAgICBjYXNlIDI3OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICd7JyAnOycKICAgICAgdHJ5X0Jsb2NrRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTExOgogICAgY2FzZSAxMDAwOTogICAgICAgICAgICAgICAgICAgICAvLyAneycgTkNOYW1lXlRva2VuCiAgICAgIHRyeV9PYmplY3RDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgIHRyeV9BcnJheUNvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3wnCiAgICAgIHRyeV9KU09OU2ltcGxlT2JqZWN0VW5pb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xNDoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29uc3RydWN0b3IoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0pTT05TaW1wbGVPYmplY3RVbmlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05TaW1wbGVPYmplY3RVbmlvbiIsIGUwKTsKICAgIHNoaWZ0KDI4Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3t8JwogICAgbG9va2FoZWFkMVcoMjczKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgaWYgKGwxICE9IDI4NikgICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwcigpOwogICAgfQogICAgc2hpZnQoMjg2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05TaW1wbGVPYmplY3RVbmlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9KU09OU2ltcGxlT2JqZWN0VW5pb24oKQogIHsKICAgIHNoaWZ0VCgyODMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3t8JwogICAgbG9va2FoZWFkMVcoMjczKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgaWYgKGwxICE9IDI4NikgICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICB7CiAgICAgIHRyeV9FeHByKCk7CiAgICB9CiAgICBzaGlmdFQoMjg2KTsgICAgICAgICAgICAgICAgICAgIC8vICd8fScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX09iamVjdENvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT2JqZWN0Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjc2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgaWYgKGwxICE9IDI4NykgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QYWlyQ29uc3RydWN0b3JMaXN0KCk7CiAgICB9CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPYmplY3RDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9PYmplY3RDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDI4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3Nik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAyODcpICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB7CiAgICAgIHRyeV9QYWlyQ29uc3RydWN0b3JMaXN0KCk7CiAgICB9CiAgICBzaGlmdFQoMjg3KTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUGFpckNvbnN0cnVjdG9yTGlzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBhaXJDb25zdHJ1Y3Rvckxpc3QiLCBlMCk7CiAgICBwYXJzZV9QYWlyQ29uc3RydWN0b3IoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNDIpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDI2Nyk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUGFpckNvbnN0cnVjdG9yKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhaXJDb25zdHJ1Y3Rvckxpc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUGFpckNvbnN0cnVjdG9yTGlzdCgpCiAgewogICAgdHJ5X1BhaXJDb25zdHJ1Y3RvcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY3KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgdHJ5X1BhaXJDb25zdHJ1Y3RvcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUGFpckNvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUGFpckNvbnN0cnVjdG9yIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgICAgbG9va2FoZWFkMlcoMjc4KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGxvb2thaGVhZDJXKDE4Nyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJzonIHwgJ3NsaWRpbmcnIHwgJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMlcoMjgxKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGxvb2thaGVhZDJXKDE3OCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJzonIHwgJ3Njb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgbG9va2FoZWFkMlcoMjUxKTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjQ3KTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoOicgfCAnOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGxvb2thaGVhZDJXKDE4MCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJzonIHwgJ25vZGUnIHwgJ3ZhbHVlJwogICAgICBicmVhazsKICAgIGNhc2UgMjY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBsb29rYWhlYWQyVygxOTEpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICc6JyB8ICdsYXgnIHwgJ3N0cmljdCcgfCAndHlwZScgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBsb29rYWhlYWQyVygyNTYpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICc6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGxvb2thaGVhZDJXKDE0OSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKDonIHwgJzonIHwgJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgY2FzZSAyMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICBsb29rYWhlYWQyVygyNjEpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIGxvb2thaGVhZDJXKDE2NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJzonCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmFsc2UnCiAgICBjYXNlIDE5NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdudWxsJwogICAgY2FzZSAyNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ1ZScKICAgICAgbG9va2FoZWFkMlcoMjA4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy4nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBsb29rYWhlYWQyVygxNjcpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICc6JyB8ICd7JwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICBjYXNlIDE4ODogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBjYXNlIDIzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAyMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIGxvb2thaGVhZDJXKDk2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKDonIHwgJzonCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgY2FzZSA3NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgNzY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA4NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgY2FzZSA5MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgIGNhc2UgOTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIGNhc2UgOTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDk5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSAxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgY2FzZSAxMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgIGNhc2UgMTM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgIGNhc2UgMTM4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSAxNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgIGNhc2UgMTQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgY2FzZSAxNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICBjYXNlIDE1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgY2FzZSAxNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgY2FzZSAxNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb25pcScKICAgIGNhc2UgMTczOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICBjYXNlIDE3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgIGNhc2UgMTc5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgIGNhc2UgMTgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgIGNhc2UgMTg5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgY2FzZSAxOTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICBjYXNlIDIwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgY2FzZSAyMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgY2FzZSAyMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICBjYXNlIDIwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgIGNhc2UgMjA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgY2FzZSAyMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgY2FzZSAyMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDIyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgIGNhc2UgMjMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGVjdCcKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICBjYXNlIDIzOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgY2FzZSAyNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBjYXNlIDI0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICBjYXNlIDI1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgY2FzZSAyNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgY2FzZSAyNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgIGNhc2UgMjY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgY2FzZSAyNjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgIGNhc2UgMjcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBsb29rYWhlYWQyVygxNDQpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICc6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMjU3MzUgICAgICAgICAgICAgICAgIC8vICdmYWxzZScgJzonCiAgICAgfHwgbGsgPT0gMjU3OTcgICAgICAgICAgICAgICAgIC8vICdudWxsJyAnOicKICAgICB8fCBsayA9PSAyNTg1NSkgICAgICAgICAgICAgICAgLy8gJ3RydWUnICc6JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDIxLCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDIxLCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAtMjoKICAgIGNhc2UgMTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuCiAgICBjYXNlIDI1NjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicgJzonCiAgICBjYXNlIDI1NjczOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJzonCiAgICBjYXNlIDI1Njc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJzonCiAgICBjYXNlIDI1Njc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnOicKICAgIGNhc2UgMjU2NzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcgJzonCiAgICBjYXNlIDI1Njc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICc6JwogICAgY2FzZSAyNTY4MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXMnICc6JwogICAgY2FzZSAyNTY4MTogICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnOicKICAgIGNhc2UgMjU2ODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JyAnOicKICAgIGNhc2UgMjU2ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJzonCiAgICBjYXNlIDI1Njg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgJzonCiAgICBjYXNlIDI1Njg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnICc6JwogICAgY2FzZSAyNTY4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnICc6JwogICAgY2FzZSAyNTY4NzogICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICc6JwogICAgY2FzZSAyNTY4OTogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScgJzonCiAgICBjYXNlIDI1NjkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JyAnOicKICAgIGNhc2UgMjU2OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyAnOicKICAgIGNhc2UgMjU2OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnOicKICAgIGNhc2UgMjU2OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnOicKICAgIGNhc2UgMjU2OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgJzonCiAgICBjYXNlIDI1Njk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnOicKICAgIGNhc2UgMjU2OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICc6JwogICAgY2FzZSAyNTY5OTogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnOicKICAgIGNhc2UgMjU3MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICc6JwogICAgY2FzZSAyNTcwMzogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICc6JwogICAgY2FzZSAyNTcwNDogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJzonCiAgICBjYXNlIDI1NzA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICc6JwogICAgY2FzZSAyNTcwNjogICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnICc6JwogICAgY2FzZSAyNTcwNzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICc6JwogICAgY2FzZSAyNTcwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJzonCiAgICBjYXNlIDI1NzEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnOicKICAgIGNhc2UgMjU3MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJzonCiAgICBjYXNlIDI1NzEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnOicKICAgIGNhc2UgMjU3MTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJzonCiAgICBjYXNlIDI1NzE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnOicKICAgIGNhc2UgMjU3MTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicgJzonCiAgICBjYXNlIDI1NzIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJzonCiAgICBjYXNlIDI1NzIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyAnOicKICAgIGNhc2UgMjU3MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICc6JwogICAgY2FzZSAyNTcyMzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScgJzonCiAgICBjYXNlIDI1NzI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScgJzonCiAgICBjYXNlIDI1NzI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScgJzonCiAgICBjYXNlIDI1NzI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgJzonCiAgICBjYXNlIDI1NzI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnICc6JwogICAgY2FzZSAyNTcyOTogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnICc6JwogICAgY2FzZSAyNTczMDogICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknICc6JwogICAgY2FzZSAyNTczMjogICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JyAnOicKICAgIGNhc2UgMjU3MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnICc6JwogICAgY2FzZSAyNTczNDogICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnICc6JwogICAgY2FzZSAyNTczNjogICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnICc6JwogICAgY2FzZSAyNTczNzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnOicKICAgIGNhc2UgMjU3Mzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnOicKICAgIGNhc2UgMjU3Mzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJzonCiAgICBjYXNlIDI1NzQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJyAnOicKICAgIGNhc2UgMjU3NDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJzonCiAgICBjYXNlIDI1NzQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJzonCiAgICBjYXNlIDI1NzQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJzonCiAgICBjYXNlIDI1NzUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJzonCiAgICBjYXNlIDI1NzUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJzonCiAgICBjYXNlIDI1NzUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnOicKICAgIGNhc2UgMjU3NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJyAnOicKICAgIGNhc2UgMjU3NTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJzonCiAgICBjYXNlIDI1NzU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJzonCiAgICBjYXNlIDI1NzU3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJzonCiAgICBjYXNlIDI1NzYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICc6JwogICAgY2FzZSAyNTc2MjogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICc6JwogICAgY2FzZSAyNTc2MzogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnOicKICAgIGNhc2UgMjU3NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJzonCiAgICBjYXNlIDI1NzY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnOicKICAgIGNhc2UgMjU3NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnOicKICAgIGNhc2UgMjU3Njc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nICc6JwogICAgY2FzZSAyNTc2ODogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicgJzonCiAgICBjYXNlIDI1NzcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uaXEnICc6JwogICAgY2FzZSAyNTc3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJzonCiAgICBjYXNlIDI1Nzc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICc6JwogICAgY2FzZSAyNTc3NTogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICc6JwogICAgY2FzZSAyNTc3NzogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnOicKICAgIGNhc2UgMjU3Nzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICc6JwogICAgY2FzZSAyNTc4MTogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICc6JwogICAgY2FzZSAyNTc4MzogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnOicKICAgIGNhc2UgMjU3ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJzonCiAgICBjYXNlIDI1Nzg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICc6JwogICAgY2FzZSAyNTc4NzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnOicKICAgIGNhc2UgMjU3ODg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnOicKICAgIGNhc2UgMjU3ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnOicKICAgIGNhc2UgMjU3OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICc6JwogICAgY2FzZSAyNTc5NTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnICc6JwogICAgY2FzZSAyNTc5ODogICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnOicKICAgIGNhc2UgMjU4MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknICc6JwogICAgY2FzZSAyNTgwMzogICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJyAnOicKICAgIGNhc2UgMjU4MDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJyAnOicKICAgIGNhc2UgMjU4MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJyAnOicKICAgIGNhc2UgMjU4MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICc6JwogICAgY2FzZSAyNTgwNzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnICc6JwogICAgY2FzZSAyNTgxMDogICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JyAnOicKICAgIGNhc2UgMjU4MTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJzonCiAgICBjYXNlIDI1ODE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJzonCiAgICBjYXNlIDI1ODIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnOicKICAgIGNhc2UgMjU4MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJzonCiAgICBjYXNlIDI1ODIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnOicKICAgIGNhc2UgMjU4MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJzonCiAgICBjYXNlIDI1ODI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICc6JwogICAgY2FzZSAyNTgyNjogICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnOicKICAgIGNhc2UgMjU4Mjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJzonCiAgICBjYXNlIDI1ODI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICc6JwogICAgY2FzZSAyNTgzMDogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgJzonCiAgICBjYXNlIDI1ODMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgJzonCiAgICBjYXNlIDI1ODMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScgJzonCiAgICBjYXNlIDI1ODMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxlY3QnICc6JwogICAgY2FzZSAyNTgzNDogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicgJzonCiAgICBjYXNlIDI1ODM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJyAnOicKICAgIGNhc2UgMjU4NDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnICc6JwogICAgY2FzZSAyNTg0MTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJyAnOicKICAgIGNhc2UgMjU4NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JyAnOicKICAgIGNhc2UgMjU4NDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcgJzonCiAgICBjYXNlIDI1ODQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICc6JwogICAgY2FzZSAyNTg0OTogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJzonCiAgICBjYXNlIDI1ODUzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0bycgJzonCiAgICBjYXNlIDI1ODU0OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJzonCiAgICBjYXNlIDI1ODU2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknICc6JwogICAgY2FzZSAyNTg1NzogICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICc6JwogICAgY2FzZSAyNTg1ODogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScgJzonCiAgICBjYXNlIDI1ODU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnOicKICAgIGNhc2UgMjU4NjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnOicKICAgIGNhc2UgMjU4NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJzonCiAgICBjYXNlIDI1ODYzOiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJzonCiAgICBjYXNlIDI1ODY2OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJzonCiAgICBjYXNlIDI1ODY3OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJzonCiAgICBjYXNlIDI1ODY4OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJzonCiAgICBjYXNlIDI1ODY5OiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnOicKICAgIGNhc2UgMjU4NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnOicKICAgIGNhc2UgMjU4NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnOicKICAgIGNhc2UgMjU4NzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnICc6JwogICAgICBwYXJzZV9OQ05hbWUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzonCiAgICBzaGlmdCg1MCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQYWlyQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUGFpckNvbnN0cnVjdG9yKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBsb29rYWhlYWQyVygyNzgpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMTM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgbG9va2FoZWFkMlcoMTg3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnOicgfCAnc2xpZGluZycgfCAndHVtYmxpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBsb29rYWhlYWQyVygyODEpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMTc3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgbG9va2FoZWFkMlcoMTc4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnOicgfCAnc2NvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBsb29rYWhlYWQyVygyNTEpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICc6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBsb29rYWhlYWQyVygyNDcpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICc6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgbG9va2FoZWFkMlcoMTgwKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnOicgfCAnbm9kZScgfCAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGxvb2thaGVhZDJXKDE5MSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJzonIHwgJ2xheCcgfCAnc3RyaWN0JyB8ICd0eXBlJyB8ICd7JwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGxvb2thaGVhZDJXKDI1Nik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnIycgfCAnKDonIHwgJzonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgbG9va2FoZWFkMlcoMTQ5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoOicgfCAnOicgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGxvb2thaGVhZDJXKDI2MSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgY2FzZSAyNDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgbG9va2FoZWFkMlcoMTY1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmYWxzZScKICAgIGNhc2UgMTk3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ251bGwnCiAgICBjYXNlIDI1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnVlJwogICAgICBsb29rYWhlYWQyVygyMDgpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLScgfCAnLicgfCAnLycgfCAnLy8nIHwgJzonIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIGxvb2thaGVhZDJXKDE2Nyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJzonIHwgJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGNhc2UgMjMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgbG9va2FoZWFkMlcoOTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoOicgfCAnOicKICAgICAgYnJlYWs7CiAgICBjYXNlIDcxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSA3NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICBjYXNlIDkwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICBjYXNlIDkyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgY2FzZSA5NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgY2FzZSAxMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDExNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICBjYXNlIDEyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgY2FzZSAxMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDE0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmcm9tJwogICAgY2FzZSAxNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDE1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICBjYXNlIDE1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGNhc2UgMTU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICBjYXNlIDE2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJwogICAgY2FzZSAxNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgIGNhc2UgMTc1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgY2FzZSAxODM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgY2FzZSAxODk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICBjYXNlIDE5NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBjYXNlIDIwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgIGNhc2UgMjA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgY2FzZSAyMDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICBjYXNlIDIxMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgY2FzZSAyMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICBjYXNlIDI0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgIGNhc2UgMjQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgIGNhc2UgMjUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgIGNhc2UgMjU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICBjYXNlIDI1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgIGNhc2UgMjY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICBjYXNlIDI2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgY2FzZSAyNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIGxvb2thaGVhZDJXKDE0NCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJzonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAyNTczNSAgICAgICAgICAgICAgICAgLy8gJ2ZhbHNlJyAnOicKICAgICB8fCBsayA9PSAyNTc5NyAgICAgICAgICAgICAgICAgLy8gJ251bGwnICc6JwogICAgIHx8IGxrID09IDI1ODU1KSAgICAgICAgICAgICAgICAvLyAndHJ1ZScgJzonCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMjEsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgIG1lbW9pemUoMjEsIGUwQSwgLTEpOwogICAgICAgICAgbGsgPSAtMzsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMjEsIGUwQSwgLTIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTI6CiAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgY2FzZSAyNTY3MTogICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICc6JwogICAgY2FzZSAyNTY3MzogICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICc6JwogICAgY2FzZSAyNTY3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICc6JwogICAgY2FzZSAyNTY3NTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJzonCiAgICBjYXNlIDI1Njc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnICc6JwogICAgY2FzZSAyNTY3ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnOicKICAgIGNhc2UgMjU2ODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJyAnOicKICAgIGNhc2UgMjU2ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJzonCiAgICBjYXNlIDI1NjgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcgJzonCiAgICBjYXNlIDI1NjgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICc6JwogICAgY2FzZSAyNTY4NDogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICc6JwogICAgY2FzZSAyNTY4NTogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnOicKICAgIGNhc2UgMjU2ODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnOicKICAgIGNhc2UgMjU2ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnOicKICAgIGNhc2UgMjU2ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICc6JwogICAgY2FzZSAyNTY5MDogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJzonCiAgICBjYXNlIDI1NjkxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJzonCiAgICBjYXNlIDI1NjkyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJzonCiAgICBjYXNlIDI1Njk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJzonCiAgICBjYXNlIDI1Njk1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICc6JwogICAgY2FzZSAyNTY5NzogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJzonCiAgICBjYXNlIDI1Njk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnOicKICAgIGNhc2UgMjU2OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJzonCiAgICBjYXNlIDI1NzAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnOicKICAgIGNhc2UgMjU3MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnOicKICAgIGNhc2UgMjU3MDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknICc6JwogICAgY2FzZSAyNTcwNTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnOicKICAgIGNhc2UgMjU3MDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnOicKICAgIGNhc2UgMjU3MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnOicKICAgIGNhc2UgMjU3MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICc6JwogICAgY2FzZSAyNTcxMDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJzonCiAgICBjYXNlIDI1NzExOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICc6JwogICAgY2FzZSAyNTcxMjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJzonCiAgICBjYXNlIDI1NzEzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICc6JwogICAgY2FzZSAyNTcxNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJzonCiAgICBjYXNlIDI1NzE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnICc6JwogICAgY2FzZSAyNTcyMDogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICc6JwogICAgY2FzZSAyNTcyMTogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJzonCiAgICBjYXNlIDI1NzIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnOicKICAgIGNhc2UgMjU3MjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICc6JwogICAgY2FzZSAyNTcyNDogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICc6JwogICAgY2FzZSAyNTcyNTogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnICc6JwogICAgY2FzZSAyNTcyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICc6JwogICAgY2FzZSAyNTcyNzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnOicKICAgIGNhc2UgMjU3Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnOicKICAgIGNhc2UgMjU3MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnOicKICAgIGNhc2UgMjU3MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJzonCiAgICBjYXNlIDI1NzMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnOicKICAgIGNhc2UgMjU3MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnOicKICAgIGNhc2UgMjU3MzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnOicKICAgIGNhc2UgMjU3Mzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJzonCiAgICBjYXNlIDI1NzM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJzonCiAgICBjYXNlIDI1NzM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICc6JwogICAgY2FzZSAyNTc0MjogICAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScgJzonCiAgICBjYXNlIDI1NzQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICc6JwogICAgY2FzZSAyNTc0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICc6JwogICAgY2FzZSAyNTc0ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnICc6JwogICAgY2FzZSAyNTc1MDogICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICc6JwogICAgY2FzZSAyNTc1MjogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnICc6JwogICAgY2FzZSAyNTc1MzogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicgJzonCiAgICBjYXNlIDI1NzU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZicgJzonCiAgICBjYXNlIDI1NzU1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICc6JwogICAgY2FzZSAyNTc1NjogICAgICAgICAgICAgICAgICAgICAvLyAnaW4nICc6JwogICAgY2FzZSAyNTc1NzogICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnICc6JwogICAgY2FzZSAyNTc2MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnOicKICAgIGNhc2UgMjU3NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnOicKICAgIGNhc2UgMjU3NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJzonCiAgICBjYXNlIDI1NzY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICc6JwogICAgY2FzZSAyNTc2NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycgJzonCiAgICBjYXNlIDI1NzY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycgJzonCiAgICBjYXNlIDI1NzY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJyAnOicKICAgIGNhc2UgMjU3Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICc6JwogICAgY2FzZSAyNTc3MDogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbmlxJyAnOicKICAgIGNhc2UgMjU3NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnICc6JwogICAgY2FzZSAyNTc3NDogICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JyAnOicKICAgIGNhc2UgMjU3NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJyAnOicKICAgIGNhc2UgMjU3Nzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJzonCiAgICBjYXNlIDI1Nzc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJyAnOicKICAgIGNhc2UgMjU3ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JyAnOicKICAgIGNhc2UgMjU3ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcgJzonCiAgICBjYXNlIDI1Nzg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknICc6JwogICAgY2FzZSAyNTc4NTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnOicKICAgIGNhc2UgMjU3ODc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJzonCiAgICBjYXNlIDI1Nzg4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgJzonCiAgICBjYXNlIDI1Nzg5OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScgJzonCiAgICBjYXNlIDI1Nzk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJyAnOicKICAgIGNhc2UgMjU3OTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnOicKICAgIGNhc2UgMjU3OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJzonCiAgICBjYXNlIDI1ODAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnOicKICAgIGNhc2UgMjU4MDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJzonCiAgICBjYXNlIDI1ODA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJzonCiAgICBjYXNlIDI1ODA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJzonCiAgICBjYXNlIDI1ODA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnOicKICAgIGNhc2UgMjU4MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnOicKICAgIGNhc2UgMjU4MTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJzonCiAgICBjYXNlIDI1ODE2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICc6JwogICAgY2FzZSAyNTgxNzogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICc6JwogICAgY2FzZSAyNTgyMDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJzonCiAgICBjYXNlIDI1ODIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICc6JwogICAgY2FzZSAyNTgyMzogICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJzonCiAgICBjYXNlIDI1ODI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICc6JwogICAgY2FzZSAyNTgyNTogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnOicKICAgIGNhc2UgMjU4MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJzonCiAgICBjYXNlIDI1ODI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICc6JwogICAgY2FzZSAyNTgyOTogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnOicKICAgIGNhc2UgMjU4MzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnICc6JwogICAgY2FzZSAyNTgzMTogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnICc6JwogICAgY2FzZSAyNTgzMjogICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnICc6JwogICAgY2FzZSAyNTgzMzogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZWN0JyAnOicKICAgIGNhc2UgMjU4MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICc6JwogICAgY2FzZSAyNTgzOTogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJzonCiAgICBjYXNlIDI1ODQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnOicKICAgIGNhc2UgMjU4NDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJzonCiAgICBjYXNlIDI1ODQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJzonCiAgICBjYXNlIDI1ODQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICc6JwogICAgY2FzZSAyNTg0ODogICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJyAnOicKICAgIGNhc2UgMjU4NDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnICc6JwogICAgY2FzZSAyNTg1MzogICAgICAgICAgICAgICAgICAgICAvLyAndG8nICc6JwogICAgY2FzZSAyNTg1NDogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnICc6JwogICAgY2FzZSAyNTg1NjogICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JyAnOicKICAgIGNhc2UgMjU4NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyAnOicKICAgIGNhc2UgMjU4NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnICc6JwogICAgY2FzZSAyNTg1OTogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJzonCiAgICBjYXNlIDI1ODYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicgJzonCiAgICBjYXNlIDI1ODYyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICc6JwogICAgY2FzZSAyNTg2MzogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICc6JwogICAgY2FzZSAyNTg2NjogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICc6JwogICAgY2FzZSAyNTg2NzogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnICc6JwogICAgY2FzZSAyNTg2ODogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICc6JwogICAgY2FzZSAyNTg2OTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJzonCiAgICBjYXNlIDI1ODcyOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScgJzonCiAgICBjYXNlIDI1ODczOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJzonCiAgICBjYXNlIDI1ODc2OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJyAnOicKICAgICAgdHJ5X05DTmFtZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTM6CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOicKICAgIHNoaWZ0VCg1MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJzonCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXJyYXlDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFycmF5Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCg2OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMjcyKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgaWYgKGwxICE9IDcwKSAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICB9CiAgICBzaGlmdCg3MCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcnJheUNvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FycmF5Q29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCg2OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBsb29rYWhlYWQxVygyNzIpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gNzApICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgewogICAgICB0cnlfRXhwcigpOwogICAgfQogICAgc2hpZnRUKDcwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Jsb2NrRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkJsb2NrRXhwciIsIGUwKTsKICAgIHNoaWZ0KDI4MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyODApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCk7CiAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCbG9ja0V4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQmxvY2tFeHByKCkKICB7CiAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjgwKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1N0YXRlbWVudHNBbmRPcHRpb25hbEV4cHIoKTsKICAgIHNoaWZ0VCgyODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GdW5jdGlvbkRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGdW5jdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCgxNDcpOyAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgIGxvb2thaGVhZDFXKDI0NSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoOTgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICcpJwogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QYXJhbUxpc3QoKTsKICAgIH0KICAgIHNoaWZ0KDM4KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBsb29rYWhlYWQxVygxNTgpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJyB8ICdleHRlcm5hbCcgfCAneycKICAgIGlmIChsMSA9PSA4MCkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1JldHVyblR5cGUoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEyMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZXh0ZXJuYWwnIHwgJ3snCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgc2hpZnQoMjgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDFXKDI4MCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU3RhdGVtZW50c0FuZE9wdGlvbmFsRXhwcigpOwogICAgICBzaGlmdCgyODcpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZ1bmN0aW9uRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JldHVyblR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJSZXR1cm5UeXBlIiwgZTApOwogICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBsb29rYWhlYWQxVygyNTMpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZXR1cm5UeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gc2hpZnQodCkKICB7CiAgICBpZiAobDEgPT0gdCkKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBldmVudEhhbmRsZXIudGVybWluYWwoSlNPTmlxUGFyc2VyLlRPS0VOW2wxXSwgYjEsIGUxID4gc2l6ZSA/IHNpemUgOiBlMSk7CiAgICAgIGIwID0gYjE7IGUwID0gZTE7IGwxID0gbDI7IGlmIChsMSAhPSAwKSB7CiAgICAgIGIxID0gYjI7IGUxID0gZTI7IGwyID0gMDsgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBlcnJvcihiMSwgZTEsIDAsIGwxLCB0KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNoaWZ0VCh0KQogIHsKICAgIGlmIChsMSA9PSB0KQogICAgewogICAgICBiMCA9IGIxOyBlMCA9IGUxOyBsMSA9IGwyOyBpZiAobDEgIT0gMCkgewogICAgICBiMSA9IGIyOyBlMSA9IGUyOyBsMiA9IDA7IH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgZXJyb3IoYjEsIGUxLCAwLCBsMSwgdCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBza2lwKGNvZGUpCiAgewogICAgdmFyIGIwVyA9IGIwOyB2YXIgZTBXID0gZTA7IHZhciBsMVcgPSBsMTsKICAgIHZhciBiMVcgPSBiMTsgdmFyIGUxVyA9IGUxOwoKICAgIGwxID0gY29kZTsgYjEgPSBiZWdpbjsgZTEgPSBlbmQ7CiAgICBsMiA9IDA7CgogICAgdHJ5X1doaXRlc3BhY2UoKTsKCiAgICBiMCA9IGIwVzsgZTAgPSBlMFc7IGwxID0gbDFXOyBpZiAobDEgIT0gMCkgewogICAgYjEgPSBiMVc7IGUxID0gZTFXOyB9CiAgfQoKICBmdW5jdGlvbiB3aGl0ZXNwYWNlKCkKICB7CiAgICBpZiAoZTAgIT0gYjEpCiAgICB7CiAgICAgIGV2ZW50SGFuZGxlci53aGl0ZXNwYWNlKGUwLCBiMSk7CiAgICAgIGUwID0gYjE7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBtYXRjaFcoc2V0KQogIHsKICAgIHZhciBjb2RlOwogICAgZm9yICg7OykKICAgIHsKICAgICAgY29kZSA9IG1hdGNoKHNldCk7CiAgICAgIGlmIChjb2RlICE9IDIyKSAgICAgICAgICAgICAgIC8vIFNeV1MKICAgICAgewogICAgICAgIGlmIChjb2RlICE9IDM3KSAgICAgICAgICAgICAvLyAnKDonCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNraXAoY29kZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb2RlOwogIH0KCiAgZnVuY3Rpb24gbG9va2FoZWFkMVcoc2V0KQogIHsKICAgIGlmIChsMSA9PSAwKQogICAgewogICAgICBsMSA9IG1hdGNoVyhzZXQpOwogICAgICBiMSA9IGJlZ2luOwogICAgICBlMSA9IGVuZDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGxvb2thaGVhZDJXKHNldCkKICB7CiAgICBpZiAobDIgPT0gMCkKICAgIHsKICAgICAgbDIgPSBtYXRjaFcoc2V0KTsKICAgICAgYjIgPSBiZWdpbjsKICAgICAgZTIgPSBlbmQ7CiAgICB9CiAgICBsayA9IChsMiA8PCA5KSB8IGwxOwogIH0KCiAgZnVuY3Rpb24gbG9va2FoZWFkMShzZXQpCiAgewogICAgaWYgKGwxID09IDApCiAgICB7CiAgICAgIGwxID0gbWF0Y2goc2V0KTsKICAgICAgYjEgPSBiZWdpbjsKICAgICAgZTEgPSBlbmQ7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBsb29rYWhlYWQyKHNldCkKICB7CiAgICBpZiAobDIgPT0gMCkKICAgIHsKICAgICAgbDIgPSBtYXRjaChzZXQpOwogICAgICBiMiA9IGJlZ2luOwogICAgICBlMiA9IGVuZDsKICAgIH0KICAgIGxrID0gKGwyIDw8IDkpIHwgbDE7CiAgfQoKICBmdW5jdGlvbiBlcnJvcihiLCBlLCBzLCBsLCB0KQogIHsKICAgIGlmIChlID49IGV4KQogICAgewogICAgICBieCA9IGI7CiAgICAgIGV4ID0gZTsKICAgICAgc3ggPSBzOwogICAgICBseCA9IGw7CiAgICAgIHR4ID0gdDsKICAgIH0KICAgIHRocm93IG5ldyBzZWxmLlBhcnNlRXhjZXB0aW9uKGJ4LCBleCwgc3gsIGx4LCB0eCk7CiAgfQoKICB2YXIgbGssIGIwLCBlMDsKICB2YXIgbDEsIGIxLCBlMTsKICB2YXIgbDIsIGIyLCBlMjsKICB2YXIgYngsIGV4LCBzeCwgbHgsIHR4OwogIHZhciBldmVudEhhbmRsZXI7CiAgdmFyIG1lbW87CgogIGZ1bmN0aW9uIG1lbW9pemUoaSwgZSwgdikKICB7CiAgICBtZW1vWyhlIDw8IDUpICsgaV0gPSB2OwogIH0KCiAgZnVuY3Rpb24gbWVtb2l6ZWQoaSwgZSkKICB7CiAgICB2YXIgdiA9IG1lbW9bKGUgPDwgNSkgKyBpXTsKICAgIHJldHVybiB0eXBlb2YgdiAhPSAidW5kZWZpbmVkIiA/IHYgOiAwOwogIH0KCiAgdmFyIGlucHV0OwogIHZhciBzaXplOwogIHZhciBiZWdpbjsKICB2YXIgZW5kOwoKICBmdW5jdGlvbiBtYXRjaCh0b2tlblNldElkKQogIHsKICAgIHZhciBub25ibXAgPSBmYWxzZTsKICAgIGJlZ2luID0gZW5kOwogICAgdmFyIGN1cnJlbnQgPSBlbmQ7CiAgICB2YXIgcmVzdWx0ID0gSlNPTmlxUGFyc2VyLklOSVRJQUxbdG9rZW5TZXRJZF07CiAgICB2YXIgc3RhdGUgPSAwOwoKICAgIGZvciAodmFyIGNvZGUgPSByZXN1bHQgJiA4MTkxOyBjb2RlICE9IDA7ICkKICAgIHsKICAgICAgdmFyIGNoYXJjbGFzczsKICAgICAgdmFyIGMwID0gY3VycmVudCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGN1cnJlbnQpIDogMDsKICAgICAgKytjdXJyZW50OwogICAgICBpZiAoYzAgPCAweDgwKQogICAgICB7CiAgICAgICAgY2hhcmNsYXNzID0gSlNPTmlxUGFyc2VyLk1BUDBbYzBdOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGMwIDwgMHhkODAwKQogICAgICB7CiAgICAgICAgdmFyIGMxID0gYzAgPj4gNDsKICAgICAgICBjaGFyY2xhc3MgPSBKU09OaXFQYXJzZXIuTUFQMVsoYzAgJiAxNSkgKyBKU09OaXFQYXJzZXIuTUFQMVsoYzEgJiAzMSkgKyBKU09OaXFQYXJzZXIuTUFQMVtjMSA+PiA1XV1dOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIGlmIChjMCA8IDB4ZGMwMCkKICAgICAgICB7CiAgICAgICAgICB2YXIgYzEgPSBjdXJyZW50IDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoY3VycmVudCkgOiAwOwogICAgICAgICAgaWYgKGMxID49IDB4ZGMwMCAmJiBjMSA8IDB4ZTAwMCkKICAgICAgICAgIHsKICAgICAgICAgICAgKytjdXJyZW50OwogICAgICAgICAgICBjMCA9ICgoYzAgJiAweDNmZikgPDwgMTApICsgKGMxICYgMHgzZmYpICsgMHgxMDAwMDsKICAgICAgICAgICAgbm9uYm1wID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIGxvID0gMCwgaGkgPSA1OwogICAgICAgIGZvciAodmFyIG0gPSAzOyA7IG0gPSAoaGkgKyBsbykgPj4gMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoSlNPTmlxUGFyc2VyLk1BUDJbbV0gPiBjMCkgaGkgPSBtIC0gMTsKICAgICAgICAgIGVsc2UgaWYgKEpTT05pcVBhcnNlci5NQVAyWzYgKyBtXSA8IGMwKSBsbyA9IG0gKyAxOwogICAgICAgICAgZWxzZSB7Y2hhcmNsYXNzID0gSlNPTmlxUGFyc2VyLk1BUDJbMTIgKyBtXTsgYnJlYWs7fQogICAgICAgICAgaWYgKGxvID4gaGkpIHtjaGFyY2xhc3MgPSAwOyBicmVhazt9CiAgICAgICAgfQogICAgICB9CgogICAgICBzdGF0ZSA9IGNvZGU7CiAgICAgIHZhciBpMCA9IChjaGFyY2xhc3MgPDwgMTMpICsgY29kZSAtIDE7CiAgICAgIGNvZGUgPSBKU09OaXFQYXJzZXIuVFJBTlNJVElPTlsoaTAgJiAzMSkgKyBKU09OaXFQYXJzZXIuVFJBTlNJVElPTltpMCA+PiA1XV07CgogICAgICBpZiAoY29kZSA+IDgxOTEpCiAgICAgIHsKICAgICAgICByZXN1bHQgPSBjb2RlOwogICAgICAgIGNvZGUgJj0gODE5MTsKICAgICAgICBlbmQgPSBjdXJyZW50OwogICAgICB9CiAgICB9CgogICAgcmVzdWx0ID4+PSAxMzsKICAgIGlmIChyZXN1bHQgPT0gMCkKICAgIHsKICAgICAgZW5kID0gY3VycmVudCAtIDE7CiAgICAgIHZhciBjMSA9IGVuZCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGVuZCkgOiAwOwogICAgICBpZiAoYzEgPj0gMHhkYzAwICYmIGMxIDwgMHhlMDAwKSAtLWVuZDsKICAgICAgcmV0dXJuIGVycm9yKGJlZ2luLCBlbmQsIHN0YXRlLCAtMSwgLTEpOwogICAgfQoKICAgIGlmIChub25ibXApCiAgICB7CiAgICAgIGZvciAodmFyIGkgPSByZXN1bHQgPj4gOTsgaSA+IDA7IC0taSkKICAgICAgewogICAgICAgIC0tZW5kOwogICAgICAgIHZhciBjMSA9IGVuZCA8IHNpemUgPyBpbnB1dC5jaGFyQ29kZUF0KGVuZCkgOiAwOwogICAgICAgIGlmIChjMSA+PSAweGRjMDAgJiYgYzEgPCAweGUwMDApIC0tZW5kOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGVuZCAtPSByZXN1bHQgPj4gOTsKICAgIH0KCiAgICByZXR1cm4gKHJlc3VsdCAmIDUxMSkgLSAxOwogIH0KfQoKSlNPTmlxUGFyc2VyLmdldFRva2VuU2V0ID0gZnVuY3Rpb24odG9rZW5TZXRJZCkKewogIHZhciBzZXQgPSBbXTsKICB2YXIgcyA9IHRva2VuU2V0SWQgPCAwID8gLSB0b2tlblNldElkIDogSlNPTmlxUGFyc2VyLklOSVRJQUxbdG9rZW5TZXRJZF0gJiA4MTkxOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjg5OyBpICs9IDMyKQogIHsKICAgIHZhciBqID0gaTsKICAgIHZhciBpMCA9IChpID4+IDUpICogNDIzNSArIHMgLSAxOwogICAgdmFyIGkxID0gaTAgPj4gMjsKICAgIHZhciBpMiA9IGkxID4+IDI7CiAgICB2YXIgZiA9IEpTT05pcVBhcnNlci5FWFBFQ1RFRFsoaTAgJiAzKSArIEpTT05pcVBhcnNlci5FWFBFQ1RFRFsoaTEgJiAzKSArIEpTT05pcVBhcnNlci5FWFBFQ1RFRFsoaTIgJiAxNSkgKyBKU09OaXFQYXJzZXIuRVhQRUNURURbaTIgPj4gNF1dXV07CiAgICBmb3IgKCA7IGYgIT0gMDsgZiA+Pj49IDEsICsraikKICAgIHsKICAgICAgaWYgKChmICYgMSkgIT0gMCkKICAgICAgewogICAgICAgIHNldC5wdXNoKEpTT05pcVBhcnNlci5UT0tFTltqXSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHNldDsKfTsKCkpTT05pcVBhcnNlci5NQVAwID0KWyA3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMSwgMzIsIDMzLCAzMCwgMzAsIDM0LCAzMCwgMzAsIDM1LCAzMCwgMzAsIDMwLCAzNiwgMzAsIDMwLCAzNywgMzgsIDM5LCA0MCwgMzAsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDQwLCA0MApdOwoKSlNPTmlxUGFyc2VyLk1BUDEgPQpbIDEwOCwgMTI0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMTU2LCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgMjE0LCAyMTUsIDIxMywgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDI0NywgMjYxLCAyNzcsIDI5MywgMzA5LCAzNTUsIDM3MSwgMzg3LCA0MjMsIDQyMywgNDIzLCA0MTUsIDMzOSwgMzMxLCAzMzksIDMzMSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCA0NDAsIDQ0MCwgNDQwLCA0NDAsIDQ0MCwgNDQwLCA0NDAsIDMyNCwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDQwMSwgNDIzLCA0MjMsIDQyNCwgNDIyLCA0MjMsIDQyMywgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDMzOCwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDQyMywgNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMjYsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzEsIDMyLCAzMywgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzNCwgMzAsIDMwLCAzNSwgMzAsIDMwLCAzMCwgMzYsIDMwLCAzMCwgMzcsIDM4LCAzOSwgNDAsIDMwLCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAzMCwgMzAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA3MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MApdOwoKSlNPTmlxUGFyc2VyLk1BUDIgPQpbIDU3MzQ0LCA2Mzc0NCwgNjQ5NzYsIDY1MDA4LCA2NTUzNiwgOTgzMDQwLCA2Mzc0MywgNjQ5NzUsIDY1MDA3LCA2NTUzMywgOTgzMDM5LCAxMTE0MTExLCA0MCwgMzAsIDQwLCAzMCwgMzAsIDQwCl07CgpKU09OaXFQYXJzZXIuSU5JVElBTCA9ClsgMSwgMjQ1NzgsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwgMTc2LCAxNzcsIDE3OCwgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTk3LCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMzLCAyMzQsIDIzNSwgMjM2LCAyMzcsIDIzOCwgMjM5LCAyNDAsIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTUsIDI1NiwgMjU3LCAyNTgsIDI1OSwgMjYwLCAyNjEsIDI2MiwgMjYzLCAyNjQsIDI2NSwgMjY2LCAyNjcsIDI2OCwgMjY5LCAyNzAsIDI3MSwgMjcyLCAyNzMsIDI3NCwgMjc1LCAyNzYsIDI3NywgMjc4LCAyNzksIDI4MCwgMjgxLCAyODIsIDI4MywgMjg0LCAyODUsIDI4NiwgMjg3LCAyODgsIDI4OQpdOwoKSlNPTmlxUGFyc2VyLlRSQU5TSVRJT04gPQpbIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAxODQzMiwgMTg1MDgsIDE4NTEyLCAxODUwOCwgMTg1MDgsIDE4NDcxLCAxODUwMywgMTg0NTIsIDE4NTA4LCAxODU0NCwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjI1MzAsIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI1NjUsIDIyNTk0LCA1NDY5NCwgMjI2NDEsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDIyNzA3LCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgNDA4MDQsIDE5MjE5LCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNzU3LCAzMjY0MCwgMjM0NDIsIDMyNjQwLCAyMDcyOCwgMjI4MjIsIDIyOTEyLCA2Mjg1MywgMjI5NDksIDIzMDIzLCAzMjY0MCwgMjUyNTMsIDM3Mzc5LCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCA0MDQ4MiwgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyMzA5MCwgMzI2NDAsIDcwNzU2LCA1NzIzNSwgMjM2MjUsIDU3MTc0LCAyMzE0MywgNTM4ODksIDU3MjA1LCAyMzE5NCwgMzI2NDAsIDQ0NTkwLCA1NzIzNywgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMTg5MjUsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIyMTMyLCAxOTA3MywgNDY3MzIsIDIzMjk0LCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjMzNjEsIDMyNjQwLCA2MTc0MCwgMjM0MzcsIDIzODA3LCAyMzgyNCwgMjI5MTIsIDM1MTM2LCAyMzQ3NCwgMjM2MDcsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDcyOTg2LCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgNDA0NjEsIDIxODA3LCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNTMwLCAzMjY0MCwgNjE3NDAsIDU3NTkyLCAzMjY0MCwgNTMxNDAsIDIzNjU3LCA0MzcwOCwgMjM3MDQsIDIzNzg5LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAyMTgwNywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyMjUzMCwgMzI2NDAsIDYxNzQwLCAzMjY0MCwgMzI2NDAsIDM5MjU5LCAyMzg1NiwgMzI2NDAsIDMyNjQwLCAyMzg5MywgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgNzMwNTMsIDIyMDY5LCAyMzk2NSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjQwMzEsIDMyNjQwLCAyMzg2MSwgMzI2NDAsIDIyNzc2LCAyNDA4MiwgMjI5MTIsIDU2MjQwLCAyNDIwNiwgMjQzMjksIDMyNjQwLCAyNTI1MywgMzI2NDAsIDI0Mzc5LCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgMjMwNTgsIDU3NTI5LCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI0NDE1LCAyNDQ0OSwgMjQ0NTMsIDI0NDQwLCAyNDUzNCwgMjQ0ODUsIDI0NTE1LCAyNDU2NiwgMjQ1OTYsIDI0NjI4LCAzMjY0MCwgMzIxMDUsIDMyNjQwLCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAyMTgwNywgMzExNTQsIDQ1OTAzLCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNDY3OCwgMzI2NDAsIDYxNzQwLCAyNDc0NiwgNDgzNjEsIDUzMTQwLCAyNDc4OSwgMjQ4MDgsIDI0ODI1LCAyNDg1NywgMzI2NDAsIDI3Mzk3LCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCA0NTU2MywgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjQ5MDcsIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDMyNjQwLCA1MjA2NCwgMjQ5ODQsIDI1MDEzLCA2MTc5OSwgMjUwNDUsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDcyOTg2LCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgMjMwNTgsIDIxODA3LCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMjUwOTUsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNTMwLCAzMjY0MCwgNjE3NDAsIDMyNjQwLCAzMjY0MCwgNTQwMzQsIDI1MTUxLCAyNTE4OCwgMjUxNzEsIDI1MjM1LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAyMTgwNywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMjUzMDIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTM0MCwgMzI2NDAsIDYxNzQwLCAyNDcwMiwgMzU0MTMsIDI1MzUzLCAyNTM4NSwgMjU0MDIsIDU4MzYzLCAyNTQ0OSwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjU0OTksIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjU1MzgsIDI1NTc1LCAyNTU1OCwgMjU2MjIsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDcyOTg2LCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDM1Mjk3LCA2NDQ1NywgMzIwMjQsIDI1NjcyLCAyNTcyNCwgMzI2NDAsIDI1MzA4LCA0Mjc0NiwgNzIwMTIsIDQ4NzI0LCAyNTc3NSwgNTk2MDQsIDYzODk1LCA3MDA2MiwgNTMzMjksIDI2MDUxLCA0NDU3MiwgMzI2NDAsIDMyNjQwLCA1MzM2NSwgNjkyNDYsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCAzNjIxNywgMjU4NzgsIDMyNjQwLCAzMjY0MCwgMjU5MTIsIDU2NDAzLCA3MjAxMiwgNzIwMTIsIDQ3NDUzLCA2OTg5NiwgMjU3NzYsIDY0Nzg3LCAyNTk0NywgMjU5ODIsIDI2NDcyLCAyNjAxNiwgMjYwNTAsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDIxMjc4LCA2NTQ5MSwgNDE1MDcsIDcyMDEyLCA0Nzc2OCwgNTk5OTksIDM2OTIyLCA1NTQzOSwgMjU5ODMsIDUzMjg3LCA2NjAwMSwgMjYwNTEsIDY4NjA4LCAzMjY0MCwgMzUxMjksIDY1NDk1LCA3MjAxMiwgMjYwODQsIDI1Nzc2LCAyNjEzMiwgMjU5ODMsIDY2Mzc1LCAyNjA1MSwgMjYxODEsIDI2MjI3LCAzNjU1MCwgNjIxNjcsIDcxMzc4LCAyNjI2NCwgNTY5NDcsIDUzMjg2LCAyNjI5OSwgNTY4MTQsIDY2OTY4LCA1MDIyOSwgMzcxNDYsIDI2MzM2LCAyNjQwNywgNjQ2ODEsIDM3MTkzLCAyNjYwOSwgNjc1MTYsIDI2NDUwLCAyNjUwNCwgMjY1OTAsIDYwNzczLCA0NzI1MywgMjY2NTQsIDI2NzIyLCAyNjc3MSwgNDk5MTIsIDI2NDYxLCA1MTUzOSwgMjY4MjAsIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNTMwLCAzMjY0MCwgNjE3NDAsIDMyNjQwLCAzMjY0MCwgMjk0MjgsIDI2OTc2LCA2OTA0MiwgMjcwMjcsIDI3MTA3LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAyNzE3NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDM1ODAwLCAyMTgwNywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNzIxMiwgMzI2NDAsIDE4NjE3LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyNzI2NCwgMjczMzIsIDQxNDI4LCAyNzM3OSwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgMjc0NDYsIDM2Mzg2LCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgNDA0ODIsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjc0OTYsIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDMyNjQwLCA0NTcwNCwgMjI5MTIsIDMyNjQwLCAyNzU0NSwgMjc2MTQsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDI3Njc5LCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNTEwMzUsIDM1Mjk3LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAyNzcxNSwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNzIwMTIsIDQ4NzI0LCAyNTc3NiwgNTk2MDQsIDI1OTgzLCA2MTY3MiwgMjYwNTEsIDI2MDUxLCA0OTg1MywgMzI2NDAsIDMyNjQwLCA3MDk4MCwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCA0MDAxMCwgMzI2NDAsIDMyNjQwLCAyNTY5MiwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDI3NzUzLCAyNTc3NiwgMjU3NzYsIDM5ODMwLCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDQzMDk4LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCAyNzc5NSwgMjU3NzYsIDYwMzQ5LCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDcwNTI3LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNDY4MjcsIDI1Nzc2LCA1NTk5NiwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI3ODM2LCAzMjY0MCwgMjYyMzIsIDI3OTg1LCAzNDUzNSwgNjAwNjgsIDI3OTMwLCAyNzk1OCwgNjAwOTksIDI4MDMyLCAzMjY0MCwgMzIzNjYsIDMyNjQwLCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCA3MzA3OSwgMjkxOTQsIDMwMjczLCAyODYyMCwgMzExNTQsIDQ0OTg2LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAzMjc1NSwgMjgwODQsIDMwMjQ5LCAyODQwMywgMjkyNzQsIDI4MTQxLCAyODE3MywgMjg4ODUsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjE2ODEsIDI4MjU5LCAzMDE4OSwgMjgzMTcsIDI4Mzc2LCAyOTIxNCwgMzAzODIsIDI4MjAxLCAzMDI4OCwgMjg3MzIsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAyODQzNSwgMjgyODUsIDI4NDk3LCAyODEwOSwgMjg1MjksIDI4NTYxLCAyODU5MywgMjg2NTIsIDI4Njg0LCAyODcxNiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjg3NjQsIDIxNzA5LCAzMjc4MSwgMjg4MjYsIDI4OTM1LCAyODk5MSwgMjkwMjMsIDI5MzYxLCAzMDA1NSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDI5MTcxLCAyODQ2NSwgMjkyNDYsIDI4MzQ0LCAyOTMzNCwgMjkzMDIsIDI5MzkzLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyOTQ2MCwgMjkwODIsIDI5MTExLCAyOTEzOSwgMjk0OTIsIDI5NjExLCAyMDk0OSwgMjEwMzAsIDI5NTU1LCAyOTY0MywgMjk2NzUsIDI4ODU3LCAyOTcwNywgMjEzMTAsIDI5ODA0LCAyOTgzMiwgMjk4NjQsIDI5ODk2LCAyOTk5MiwgMzAwMjQsIDMwMTA1LCAzMDE3MywgMjg5NTksIDMwMjIxLCAyOTU4MywgMjkwNTMsIDI4Nzk0LCAyODIyNywgMzAzMjAsIDMwMzUyLCAyOTUyMywgMzA0MTQsIDMwNDQyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMDQ4NSwgMzI2NDAsIDYxNzQwLCA1NTcxNCwgNDAzMzIsIDY3MzcwLCAzMDUzMiwgMzA1NDksIDMwNTAwLCAzMDU5NiwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI1MDYzLCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDYyNDg3LCA2NjU3MCwgMTkyNTEsIDY0NDI0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMzA2NjEsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDMwNzU4LCAzMDg1MSwgMzM2ODMsIDMwODI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAzMDg5MCwgNjM1MjEsIDMwOTY3LCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjI1MzAsIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzEwMjUsIDMxMDQyLCAzMTA4OSwgMzExMjEsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDcyOTg2LCA0MTkyMSwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgMjMwNTgsIDE5MTYxLCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxMTg2LCAzMjY0MCwgNjE3NDAsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDMxMzA0LCAzMTMyMSwgNjE0MjIsIDMxMzY4LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCA3Mjk4NiwgMzgzMzYsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAxOTU5NywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTQzNiwgMzI2NDAsIDIyOTE3LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAzMTQ4OCwgMzE1MDUsIDYzNDU1LCAzMTU1MiwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDIzOTExLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjAyMzMsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAzMTYwMywgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE2ODgsIDMyNjQwLCA2MTc0MCwgMjc4ODcsIDMyNjQwLCA1NzgzOSwgMjI5MTIsIDMxNzM0LCAyNDM0NywgMzE3NzUsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMxODQwLCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgNTc1MDgsIDIwNTE1LCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNTMwLCAzMjY0MCwgNjE3NDAsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzMjY0MCwgNjI1NzEsIDI3Mzc5LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAyMTgwNywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDcyODE0LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMzY1NjcsIDcwMjk5LCAzNDI0MCwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNDkzNDcsIDU0NzgyLCA2NDgwOSwgNTExOTUsIDMyNjQwLCAzMjAyNCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjUzMDgsIDcyMDEyLCA3MjAxMiwgMzE5NDIsIDI1Nzc2LCA2MjAxMCwgMjU5ODMsIDYxNjcyLCAyNjA1MSwgMjYwNTEsIDUzMDAwLCAzMjY0MCwgMzI2NDAsIDI1NjgyLCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MjAxMiwgNzIwMTIsIDI1ODA5LCAyNTc3NiwgMjU3NzYsIDI1ODQ0LCAyNTk4MywgMjU5ODQsIDI2MDUxLCAyNjA1MSwgMjYwMTgsIDM0NDY3LCAzMjY0MCwgMzI2NDAsIDI1NjkyLCAzMjY0MCwgNjgzOTMsIDcyMDEyLCA3MjAxMiwgMzM5NjIsIDI1Nzc2LCAyNTc3NiwgNTU0MjcsIDI1OTgzLCAyNTk4MywgMzk1NjYsIDI2MDUxLCAyNjA1MSwgNDMwOTgsIDMyNjQwLCAzMjY0MCwgNDY0OTcsIDY1NDkxLCA3MjAxMiwgNzIwMTIsIDUxMjc3LCAyNTc3NiwgNDY5MzIsIDM5ODQyLCAyNTk4MywgNTMyODcsIDI2MDUxLCAyNjA1MSwgNzA1MjcsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA0NjgyNywgMjU3NzYsIDU1OTk2LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDUyMzE1LCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA3MjgxNCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDM2NTY3LCA3MDI5OSwgMzQyNDAsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDUxMTk1LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNzIwMTIsIDMxOTQyLCAyNTc3NiwgNjIwMTAsIDI1OTgzLCA2MTY3MiwgMjYwNTEsIDI2MDUxLCA1MzAwMCwgMzI2NDAsIDMyNjQwLCAyNTY4MiwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCAzNDQ2NywgMzI2NDAsIDMyNjQwLCAyNTY5MiwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDMzOTYyLCAyNTc3NiwgMjU3NzYsIDU1NDI3LCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDQzMDk4LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA1MTI3NywgMjU3NzYsIDQ2OTMyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDcwNTI3LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNDY4MjcsIDI1Nzc2LCA1NTk5NiwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0OTM0NywgNTQ3ODIsIDY0ODA5LCA1MTE5NSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNTMwMDAsIDMyNjQwLCAzMjY0MCwgMjU2ODIsIDMyNDk3LCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgMzQ0NjcsIDMyNjQwLCAzMjY0MCwgMjU2OTIsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA0MzA5OCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA3MjAxMiwgNTEyNzcsIDI1Nzc2LCA0NjkzMiwgMzk4NDIsIDI1OTgzLCA1MzI4NywgMjYwNTEsIDI2MDUxLCA3MDUyNywgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDQ2ODI3LCAyNTc3NiwgNTU5OTYsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDcyODE0LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMzY1NjcsIDcwMjk5LCAzNDI0MCwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNDkzNDcsIDU0NzgyLCA2NDgwOSwgNTExOTUsIDMyNjQwLCAzMjAyNCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjUzMDgsIDcyMDEyLCA3MjAxMiwgMzE5NDIsIDI1Nzc2LCA2MjAxMCwgMjU5ODMsIDYxNjcyLCAyNjA1MSwgMjYwNTEsIDUzMDAwLCAzMjY0MCwgMzI2NDAsIDI1NjgyLCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MjAxMiwgNzIwMTIsIDI1ODA5LCAyNTc3NiwgMjU3NzYsIDI1ODQ0LCAyNTk4MywgMjU5ODQsIDI2MDUxLCAyNjA1MSwgMjYwMTgsIDM0NDY3LCAzMjY0MCwgMzI2NDAsIDIwMTc5LCAzMjY0MCwgNjgzOTMsIDcyMDEyLCA3MjAxMiwgMzM5NjIsIDI1Nzc2LCAyNTc3NiwgNTU0MjcsIDI1OTgzLCAyNTk4MywgMzk1NjYsIDI2MDUxLCAyNjA1MSwgNDMwOTgsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY1NDkxLCA3MjAxMiwgNzIwMTIsIDUxMjc3LCAyNTc3NiwgNDY5MzIsIDM5ODQyLCAyNTk4MywgNTMyODcsIDI2MDUxLCAyNjA1MSwgNzA1MjcsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA0NjgyNywgMjU3NzYsIDU1OTk2LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA3MjgxNCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDM2NTY3LCA3MDI5OSwgMzQyNDAsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMxOTgwLCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDUxMTk1LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAzMTk3OSwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNzIwMTIsIDMxOTQyLCAyNTc3NiwgNjIwMTAsIDI1OTgzLCA2MTY3MiwgMjYwNTEsIDI2MDUxLCA1MzAwMCwgMzI2NDAsIDMyNjQwLCAyNTY4MiwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCAzNDQ2NywgMzI2NDAsIDMyNjQwLCAyNTY5MiwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDMzOTYyLCAyNTc3NiwgMjU3NzYsIDU1NDI3LCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDQzMDk4LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA1MTI3NywgMjU3NzYsIDQ2OTMyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDcwNTI3LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNDY4MjcsIDI1Nzc2LCA1NTk5NiwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0OTM0NywgNTQ3ODIsIDY0ODA5LCA1MTE5NSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTg1NTIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA3MjAxMiwgNDc3NjgsIDI1Nzc2LCAzNjkyMiwgMzk4NDIsIDI1OTgzLCA1MzI4NywgMjYwNTEsIDI2MDUxLCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDcyODE0LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMzY1NjcsIDcwMjk5LCAzNDI0MCwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNDkzNDcsIDU0NzgyLCA2NDgwOSwgNjk3NzEsIDMyNjQwLCAzMjAyNCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjUzMDgsIDcyMDEyLCA3MjAxMiwgMzE5NDIsIDI1Nzc2LCA2MjAxMCwgMjU5ODMsIDYxNjcyLCAyNjA1MSwgMjYwNTEsIDQ0NTcyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MjAxMiwgNzIwMTIsIDI1ODA5LCAyNTc3NiwgMjU3NzYsIDI1ODQ0LCAyNTk4MywgMjU5ODQsIDI2MDUxLCAyNjA1MSwgMjYwMTgsIDU4NTUyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjgzOTMsIDcyMDEyLCA3MjAxMiwgMzM5NjIsIDI1Nzc2LCAyNTc3NiwgNTU0MjcsIDI1OTgzLCAyNTk4MywgMzk1NjYsIDI2MDUxLCAyNjA1MSwgNjg2MDIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY1NDkxLCA3MjAxMiwgNzIwMTIsIDQ3NzY4LCAyNTc3NiwgMzY5MjIsIDM5ODQyLCAyNTk4MywgNTMyODcsIDI2MDUxLCAyNjA1MSwgNjg2MDgsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA1MTM2MCwgMjU3NzYsIDY1Njk4LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA3MjgxNCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDM2NTY3LCA3MDI5OSwgNDE5MDMsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDUxMTk1LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNzIwMTIsIDMxOTQyLCAyNTc3NiwgNjIwMTAsIDI1OTgzLCA2MTY3MiwgMjYwNTEsIDI2MDUxLCA0NDU3MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCA1ODU1MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDMzOTYyLCAyNTc3NiwgMjU3NzYsIDU1NDI3LCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA0Nzc2OCwgMjU3NzYsIDM2OTIyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDY4NjA4LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDMyMDEyLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0OTM0NywgNTQ3ODIsIDY0ODA5LCA1MTE5NSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgNTcxMTEsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTg1NTIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA3MjAxMiwgNDc3NjgsIDI1Nzc2LCAzNjkyMiwgMzk4NDIsIDI1OTgzLCA1MzI4NywgMjYwNTEsIDI2MDUxLCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDcyODE0LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMjc1MTMsIDMyMDU2LCAzMjA4NywgMzI2NDAsIDI1MjUzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNDkzNDcsIDU0NzgyLCA2NDgwOSwgNTExOTUsIDMyNjQwLCAzMjAyNCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjUzMDgsIDcyMDEyLCA3MjAxMiwgMzE5NDIsIDI1Nzc2LCA2MjAxMCwgMjU5ODMsIDYxNjcyLCAyNjA1MSwgMjYwNTEsIDQ0NTcyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MjAxMiwgNzIwMTIsIDI1ODA5LCAyNTc3NiwgMjU3NzYsIDI1ODQ0LCAyNTk4MywgMjU5ODQsIDI2MDUxLCAyNjA1MSwgMjYwMTgsIDU4NTUyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjgzOTMsIDcyMDEyLCA3MjAxMiwgMzM5NjIsIDI1Nzc2LCAyNTc3NiwgNTU0MjcsIDI1OTgzLCAyNTk4MywgMzk1NjYsIDI2MDUxLCAyNjA1MSwgNjg2MDIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY1NDkxLCA3MjAxMiwgNzIwMTIsIDQ3NzY4LCAyNTc3NiwgMzY5MjIsIDM5ODQyLCAyNTk4MywgNTMyODcsIDI2MDUxLCAyNjA1MSwgNjg2MDgsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA1MTM2MCwgMjU3NzYsIDY1Njk4LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA3MjgxNCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDM2NTY3LCA3MDI5OSwgMzQyNDAsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDUxMTk1LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNzIwMTIsIDMxOTQyLCAyNTc3NiwgNjIwMTAsIDI1OTgzLCA2MTY3MiwgMjYwNTEsIDI2MDUxLCA0NDU3MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCA1ODU1MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDMzOTYyLCAyNTc3NiwgMjU3NzYsIDU1NDI3LCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA0Nzc2OCwgMjU3NzYsIDM2OTIyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDY4NjA4LCAzMjY0MCwgMzE3OTMsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyMTU0LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0OTM0NywgNTQ3ODIsIDY0ODA5LCA1MTE5NSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTg1NTIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA3MjAxMiwgNDc3NjgsIDI1Nzc2LCAzNjkyMiwgMzk4NDIsIDI1OTgzLCA1MzI4NywgMjYwNTEsIDI2MDUxLCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjE5MSwgMzI2NDAsIDYxNzQwLCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAzMjI2NiwgMzIyMTksIDMyMzE3LCAzMjM0OCwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDMyMzk4LCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMzI0NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjI1MzAsIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDMyNjQwLCAzMjY0MCwgMzI1NDEsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDcyOTg2LCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgMjMwNTgsIDQwNDgyLCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNTMwLCAzMjYzOSwgNjE3NDAsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDMyNjA2LCAzMjYyNSwgNjYxNDcsIDMyNjczLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCA3Mjk4NiwgMzI2NDAsIDMyNjQwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAyMTgwNywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjAzNywgMjIwNjksIDE4ODIxLCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMzI3MjQsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDMyODEzLCAyMTYxOCwgMjE2NTAsIDMyOTIwLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyMjUzMCwgMzI2NDAsIDYxNzQwLCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMzI2NDAsIDMyNjQwLCAyNzM3OSwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMTg5MDcsIDMyNjQwLCAyMzA1OCwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjIwMzcsIDIyMDY5LCAxODgyMSwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMzMDE0LCA3MjgxNCwgNjUyNDIsIDIzMzI5LCA2NTI2MiwgMzMwNDksIDMzMDc4LCAzMzExMCwgMzMxNDEsIDcyMTcyLCAzMzg2OCwgMzg0MDYsIDMzMjI0LCAzMzMwMiwgMzU4OTIsIDMzNDE1LCAzMzQ5NywgMzM1MjksIDMzNjU3LCAzMjY0MCwgNzAyNDEsIDMzNzE1LCAyMzI2MiwgNzA1NDcsIDY1NDgzLCA3MjAxMiwgNTYxMTUsIDMxOTQyLCAyNTc3NiwgMzM3NzEsIDI1OTgzLCA2MjM5NSwgMjYwNTEsIDYwNDI2LCA1MzAwMCwgNDMzMzgsIDMzODIwLCAyMDE2OSwgMzM5MDAsIDI4MDUyLCAzMzkzNiwgNzIwMTIsIDM0MDA0LCAzNDA5NiwgMjU3NzYsIDY5Njc5LCAzNDE1MywgMjU5ODMsIDM0MjA5LCAzNDMwNSwgMjYwNTEsIDM0MzgxLCAzNDQxMywgNTkzMTYsIDYwOTgyLCAzNDU2NywgMTg1ODAsIDQzOTg4LCA2NjI4MCwgNTYxMDUsIDM0NjEzLCAzNDY3MSwgNTQ3NjksIDU3OTk1LCAzNDc2MywgNTA1NDAsIDY5NjE2LCAzNDgzNSwgNDQzNjUsIDY5MTE2LCA3MjY1OSwgMjc2ODMsIDUxMjE1LCA0NTEwMSwgMzQ5NDEsIDU1NzgxLCA1NzkwMSwgMjU3NzYsIDY4MTgyLCAzNDk4MSwgMjU5ODMsIDM1MDM3LCAzODAxNywgNDM1NTEsIDM1MTAwLCAzNTE2OCwgNDYxNDgsIDMyNjkyLCAzODU0MiwgNjkzMTYsIDY3ODU3LCA1NDM1NywgMzUyMDAsIDM3NTA2LCAzNTI3MCwgMzkxOTEsIDM2MDg5LCAzMjY0MCwgMzcwOTAsIDI0MjYwLCA1MDY4MywgNTY2NjksIDYwMjc4LCAzNTM0OCwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNDM5MjksIDM1NDQ1LCAzNTUzMCwgMzU1ODIsIDUwOTgwLCA2Njg3NCwgNDc4NDksIDQ4Mjk1LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzNTY1MSwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDM1Njg5LCAzNTcxOCwgMzU3NTAsIDM1NzgxLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0MjcwMywgNjMxNTksIDM1ODMyLCA3MTQ5MCwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNTMwMDAsIDMyNjQwLCAzMjY0MCwgNzEwODMsIDU0NDE0LCA1NDQyMSwgNjQxMzEsIDcyMDEyLCA1NTg3MiwgMjU4MDksIDI1Nzc2LCA2MDE0OSwgMjU4NDQsIDI1OTgzLCA2MzE3OSwgMjYwNTEsIDI2MDUxLCAzNDMyNywgMzQ0NjcsIDMyNjQwLCAzMjY0MCwgMjU2OTIsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA0MzA5OCwgMzI2NDAsIDM1OTUyLCAyNzE0NCwgMzA3MjYsIDcyMDEyLCA2MzIxMywgNjMxMzgsIDI1Nzc2LCA2OTcxNCwgMzU5ODksIDI1OTgzLCA0MjA2OCwgMzYwMzUsIDI2MDUxLCAzNjA2OSwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDQ2ODI3LCAyNTc3NiwgNTU5OTYsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDIwNDU2LCAzNjEzNCwgMzYxOTEsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgNjQ1MTYsIDcyODE0LCA0ODQyNiwgNTk1MzAsIDYzNzY3LCAzNjI3MiwgMzYzMDQsIDM2MzM2LCAzNjM2NywgMzI2NDAsIDM2NDMyLCAyNTIwMywgMzI2NDAsIDMyNjQwLCA0MTY2MCwgMzc3MTYsIDU1OTIyLCAzNjQ4MywgMzY1MzAsIDQ4NDE1LCA1OTQ5NCwgMzE3MDIsIDE4ODU1LCA2MjgyMCwgNjQ5NzMsIDM5NjgyLCA3MjAxMiwgMzY1OTksIDI1Nzc2LCAxODcyNSwgMzY2NTksIDY5OTM0LCAzNjY5OSwgMjYwNTEsIDUyNDkzLCAzNjc1MCwgMjMyNDYsIDU1NzMyLCAzNDU4MSwgMzI2NDAsIDE4Njc5LCA1NTMwMSwgMzY3ODMsIDM2ODIwLCAzNTQ4NSwgMzY5MTgsIDM2OTU0LCAzNzQ5NCwgMzcwMzAsIDY0NzAyLCA2NTg5MiwgMzcxNzgsIDM0NDY3LCAzMjY0MCwgMzcyMjUsIDY1MzE5LCAzMjY0MCwgNjgzOTMsIDcyMDEyLCAzNzI2MSwgMzM5NjIsIDI1Nzc2LCAzNzMxNiwgNTU0MjcsIDI1OTgzLCAzOTExOSwgMzk1NjYsIDI2MDUxLCA0OTA0NywgNDMwOTgsIDM3Mzc1LCA0MjU1OSwgMjM5OTksIDY1NDkxLCA3MjAxMiwgNDg0NzksIDUxMjc3LCAyNTc3NiwgMzc0MTEsIDM5ODQyLCA0NTI4NywgNTMyODcsIDI2MDUxLCA2NzIyMCwgNzA1MjcsIDMyNjQwLCAzNzUzOCwgMzc1NzEsIDM3MTMxLCA0NjgyNywgMjM1NDEsIDU1OTk2LCA2Nzg5NCwgNTMyODgsIDUzNTcyLCA0NzYyMiwgMzc2MTgsIDI1OTE1LCA2NjYwMCwgMzc2NTksIDQ2ODQzLCAzMjg3MiwgMzc3OTYsIDM3ODM2LCA0NjMwMiwgNDcwNDYsIDY4MzkyLCAyMzUyNCwgNjU2MjEsIDI1OTgzLCAzNzg4OSwgNDEzMTUsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCAzNzkyNywgMzc5ODgsIDM4MDYwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDM4MTUxLCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDIwMTA2LCA3MjgxNCwgMzI1MDksIDIzMTYyLCA1MzE0MCwgMzgyMjQsIDM4MjUzLCAzODI4NSwgMzgzMTYsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMyNjQwLCA2MDY1NywgMzkzMzAsIDM0NDQxLCA1MDcxMSwgNTQ4MzYsIDUxMTk1LCAzMzI3MCwgMzgzODQsIDQ2NzE5LCAyMjIwNiwgMzMxOTIsIDM4NDM4LCA3MjM4NSwgMzg1MTEsIDM4NjE2LCA0MDkzNywgMjA2NTcsIDM4NjczLCAzODcwNSwgMzk1MjgsIDM4ODkyLCAzODk0MCwgMzI2NDAsIDQ3MzgwLCA0OTMyMywgMzI2NDAsIDcwODIzLCA2NDEzMSwgNzIwMTIsIDMyOTY4LCAyNTgwOSwgMjU3NzYsIDQ1MTk1LCAyNTg0NCwgMjU5ODMsIDQ2NjY2LCAyNjA1MSwgMjYwNTEsIDU4NjgzLCAzODk5NiwgMzI2NDAsIDU5NDUwLCAyNTY5MiwgMjcxODAsIDIyMzYxLCAzOTA1MiwgNjQxMzYsIDQwOTEyLCA0MjIwOSwgMjU3NzYsIDM5MDkwLCA2NjQ0MywgMjU5ODMsIDM5MTUxLCA2MDMwMCwgMjYwNTEsIDM5MjIzLCAzMjY0MCwgMzI2NDAsIDM2MTAyLCA3MDQ0NCwgNzIwMTIsIDcxMzY2LCA2NTY4MywgMjU3NzYsIDM5MjkxLCAzOTM2MiwgMzU2MTksIDM0ODAzLCAyNjA1MSwgNDM1MzgsIDcwNTI3LCA3Mjk0MiwgMzcyMjksIDY1NDk1LCAzOTQwMiwgNDY4MjcsIDM5NDM0LCAzOTQ5MiwgNTI3NjcsIDM5NTYwLCAzOTU5OCwgMzk3MzEsIDIyNjU5LCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDE5ODM3LCA2ODM5MiwgNjgxMDYsIDMzOTcyLCAyNTk4MywgMzk3NjksIDU4OTE4LCAyNjYwOSwgNzEzNzUsIDU2NDkzLCAzOTUxMSwgNjc5NTIsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDM5ODA3LCAzOTg3NywgMjczMDAsIDM5OTMyLCAzOTk4NCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAyMjYwOSwgNzI4MTQsIDI3NDY0LCAzMDc5NCwgNDAwNjAsIDQwMTE5LCA0MDE0OCwgNDAxODAsIDQwMjExLCA0MDI2MywgNDAyOTUsIDQwMzY0LCA0MDQxMiwgNDA1MTQsIDQwNTQ2LCA0MDYwNiwgNDA2NjcsIDQwNjk5LCA0MDczMSwgNDA3ODMsIDIwOTc2LCA0MDg1NCwgNDA5OTQsIDUyNTI3LCAyNTMwOCwgNDEwNDYsIDM5Njk5LCA0MTA3OCwgNDYzNTcsIDQ5MTQxLCA0MTEzNywgNDQ1NDQsIDQxMjM2LCA0MTI4NiwgNDEzNjgsIDQ3MTkyLCA0MTQ2MCwgNDE1NTQsIDQxNjEwLCA0MDA4NywgNDE3MDMsIDQxNzM1LCA0MTgxNiwgNDE4NzIsIDQxOTY4LCA0MjAzMCwgNDIxMDAsIDQyMjUwLCA0MjI4MiwgNDIzNzMsIDQyNDU4LCA0MjQ5MCwgNDI1MjIsIDQyNTU0LCA0MjU5MSwgMzE1NzEsIDQyNjc5LCAyNDExMywgNDI3MzUsIDQyNzc4LCA0MjgyNiwgNDI4ODcsIDU5NTg2LCA0MjkzMywgNDMwMTQsIDIwNjc3LCA1Mjc5NiwgNDMwODAsIDM3ODU3LCA1MDc3MywgMTkwMDksIDUwMTUzLCA3Mjc3OCwgNjgwNTUsIDY2MjAxLCA0MzEzMCwgNjE5OTIsIDQzMjA1LCA0MzI4NSwgNDMzODAsIDM2MDAzLCA0MzQ1NywgNTAzNDEsIDQzNTgzLCA0MzYzOSwgNjI1ODAsIDQzNzA0LCA0Mzc0MCwgNjU3NjQsIDQ2ODI3LCA0Mzc3MiwgNTU5OTYsIDQzODA0LCA0Mzg1NywgNDM4OTMsIDQzOTYxLCA3MjYwNCwgNDQwMjAsIDQ0MTA0LCA2NzAyMiwgNDQxMzYsIDQ0MTk2LCA0NDIyOCwgNDQyODksIDQ0Mzk3LCA0MTM5OSwgNDY3ODgsIDQ0NDUyLCA2OTM2OSwgNDQ1MTMsIDQ0NjQ4LCA3MDIwOCwgMjA0MzgsIDY4ODk2LCA1MTM3NiwgNjM2MjYsIDQ0MjU3LCA1NDMxNywgNDQ2MjIsIDY3NDMzLCA1NTExMywgNTUyNTAsIDQ5NDg3LCA1MTQ1NywgNjc4MDEsIDQ0NjgwLCA0NDcxMiwgMzQ3MTYsIDM4NzM2LCA0NDc4OCwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgNTQwNzYsIDcyODE0LCA2NzQ2MiwgNzE4MDQsIDQ2OTc5LCA0NDg3NCwgNDQ5MDMsIDQ0OTM1LCA0NDk2NiwgNjUxNTcsIDI1MjUzLCAzMjY0MCwgMzI2NDAsIDQ1MDE4LCA0NTAyOSwgNDUwNjEsIDM2NjI3LCA0NzkwNCwgNzE0OTAsIDcwMjI5LCA0OTk4NiwgMzI2NDAsIDMwMTQxLCA2NTE0OCwgNDUwOTMsIDQ1MTMzLCA3MjAxMiwgNDUxNzUsIDI1Nzc2LCA2NzE1NCwgMjU5ODMsIDYxNjcyLCA0NTI0MCwgMjYwNTEsIDUzMDAwLCAzMjY0MCwgMzI2NDAsIDI1NjgyLCAzMjY0MCwgMzA2MTQsIDY0MTMxLCA3MjAxMiwgNjIxODcsIDI1ODA5LCAyNTc3NiwgMzQwNTIsIDI1ODQ0LCAyNTk4MywgNTgwNTEsIDI2MDUxLCAyNjA1MSwgNjg1ODYsIDM0NDY3LCAzMjY0MCwgMzI2NDAsIDI1NjkyLCA0OTk3NCwgNjgzOTMsIDM2Nzg4LCA3MjAxMiwgMzM5NjIsIDUxNzE1LCAyNTc3NiwgNTU0MjcsIDI1OTgzLCA0NTI4MywgMzk1NjYsIDI2MDUxLCA0NTMxOSwgNDMwOTgsIDMyNjQwLCAzMjY0MCwgMjI1MzMsIDY1NDkxLCA3MjAxMiwgNjU3NDgsIDUxMjc3LCAyNTc3NiwgNDA2MzUsIDM5ODQyLCA0ODEzMSwgNTMyODcsIDI2MDUxLCA3MjA1OSwgNzA1MjcsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA0NjgyNywgMjU3NzYsIDU1OTk2LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCAyNjE5NSwgMzI2NDAsIDMwOTEzLCAzMzM4MywgMzE5NDcsIDY4NTE2LCA0MzQyNSwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAzODc2NywgNDQ4MTUsIDQ1MzU1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA3MjgxNCwgNzI5OTAsIDMyNjQwLCA1MzE0MCwgNDU0NjEsIDQ1NDgwLCA0NTUxMiwgNDU1NDMsIDMyNjQwLCAyNTI1MywgMjU4ODAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDY1MjE2LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAyOTc3MiwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNzIwMTIsIDMxOTQyLCAyNTc3NiwgNjIwMTAsIDI1OTgzLCA2MTY3MiwgMjYwNTEsIDI2MDUxLCA0NDU3MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjY5NDQsIDQzMzQ4LCA2NDEzMSwgNzIwMTIsIDcyMDEyLCA0NTU5NSwgMjU3NzYsIDI1Nzc2LCA0NTYzMSwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCA1ODU1MiwgMzI2NDAsIDQ1NjY2LCA2Mjk2MywgMzI2NDAsIDQ1NzM2LCA0NTE0MywgNzIwMTIsIDMzOTYyLCA0Nzc3NywgMjU3NzYsIDU1NDI3LCA0NTYzNCwgMjU5ODMsIDM5NTY2LCA2MjEwNiwgMjYwNTEsIDY2NTA3LCAzMjY0MCwgNjEzNzQsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA0Nzc2OCwgMjU3NzYsIDM2OTIyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDY4NjA4LCAzMjY0MCwgNDU3NzYsIDY1NDk1LCA3MjAxMiwgNDU4MzMsIDI1Nzc2LCA0MzIzNiwgMjU5ODMsIDQ4OTcwLCAyNjA1MSwgMzUzNzgsIDE5NzU5LCA0NTg4MywgNDA4ODUsIDQ1OTM1LCAzNDEyMSwgNDU5ODgsIDQ2MDU5LCA2ODY5MSwgNDYxMTQsIDQ2NTA5LCA0ODc4NCwgNDYxODAsIDQ2MjMyLCA1MjkxMSwgNTY1ODMsIDQ2Mjk0LCA2MTMyMCwgNDYzMzQsIDQ2Mzg5LCA1Mjk3MiwgNDY1NDEsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDU3MDY4LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzNjU2NywgNzAyOTksIDM3MDYxLCAzMjY0MCwgNDY1OTIsIDMyNjQwLCAyMzkyNywgMjM5MzMsIDM1OTIwLCA3MjUyOCwgNDY2NDEsIDcxMjU1LCA0NjY5OCwgMzI2NDAsIDQxNjM4LCA0Njc2NSwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDMyOTgyLCAzMTk0MiwgMjU4MTIsIDYyMDEwLCAyNTk4MywgNTI0NjUsIDI2MDUxLCA2MjA3MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0Njg3NSwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgNDY5MjgsIDI1Nzc2LCAyNTc3NywgMjU4NDQsIDI1OTgzLCAyNTg0NiwgMjYwNTEsIDI2MDUxLCA0ODIzOCwgNjY5MjIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDU4NDMyLCAzNDg4OCwgNzIwMTIsIDcyMDEyLCAyNDEzOSwgMjU3NzYsIDI1Nzc2LCA2NDE4NiwgMjU5ODMsIDI1OTgzLCA2NDM2NSwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMxMTM5LCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA1OTEyNSwgNDc3NjgsIDI1Nzc2LCAyMzU3NSwgMzk4NDIsIDI1OTgzLCA0MzQwOSwgMjYwNTEsIDUxNTg1LCA2ODYwOCwgMzI2NDAsIDQwMzI2LCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAyMzk4OSwgNTkxMTUsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAyNjc4OCwgNDY1NjAsIDYxODkyLCA1ODE4MSwgNjcyMDMsIDYxMzAxLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgNDg4NTEsIDcyODE0LCAyMzY3MiwgNDY5NjQsIDQ3MDExLCA0NzA3OCwgNDcxMDgsIDQ3MTQwLCA0NzE3MSwgMzI2NDAsIDQxMzM2LCAzMjY0MCwgNTA2MjAsIDIwOTk4LCA0MDU3NCwgNDcyMjQsIDQ3Mjg1LCA0OTE2OSwgNDczNTksIDMyNjQwLCAzNTMxNiwgMzE0MDQsIDMyNjQwLCAyMjQ5OCwgNzE1NDAsIDQ3NDI2LCAyMjM5NSwgNDc0ODUsIDQxOTk4LCA0NzU1MywgNjgyNDMsIDM1MDA1LCA0MzQ4NywgNDk1OTAsIDQ3NjU0LCA0NTgwMSwgMjI2NzUsIDMyNDc2LCAzMjI4NSwgNDc3MDcsIDY3NDkxLCA2NzU4OSwgNDc3MzksIDQ3ODA5LCA0NzUyMSwgNTM3NzEsIDQ3ODgxLCAzOTM3MCwgNTQyMDIsIDcwMTA2LCA2MzcyNywgNDc5MzYsIDU4NTUyLCAzMjY0MCwgNDk3OTMsIDQ4MDA3LCAzMjY0MCwgNjU1NTEsIDcxOTc5LCAzNzU4NiwgNDgwNDksIDQ4NzI5LCA3MTU5NiwgMzM0NDQsIDQ4MTMwLCA0ODE2MywgNTAzMjAsIDQ4MjM1LCA0ODI3MCwgMzQ4NjQsIDcwNTYwLCA0ODMyNywgNDgzOTMsIDQ4NDU4LCA3Mjg4NywgNDg1MjMsIDM4NDY4LCAzNzk1NiwgNDIzMTMsIDQ4NjMyLCA1NTUwMSwgNTE1MTYsIDM2ODg2LCA0ODY2NCwgNDg3NjEsIDQ4ODE2LCA1MDg1NSwgMjc0MTQsIDQxODQwLCA0ODg4MywgNjMyNjgsIDQ4OTQxLCA0NTQyOSwgNDkwMTcsIDU1MDE1LCA0OTA3OSwgMzI2NDAsIDIyNzI1LCAyMzczNCwgNDkxMTEsIDUxMTEzLCA2OTUzMywgNTU1OTMsIDQ5MjI0LCA0NjMwMiwgNDkyOTgsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgNTg2OTgsIDI2NjA5LCA0OTM4OCwgNTgyMzIsIDcwNTAzLCA0OTQ1MCwgNDI2MjIsIDcwMTQ2LCA2Nzc0NiwgNDk1MTksIDYwODM0LCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgNTY2MDgsIDQ5NTUxLCAyNjUzNSwgNDQ4MTUsIDQ5NjIyLCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDY5ODYwLCA3MjgxNCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDQ2NjA5LCA0OTc0MSwgNDk3NzIsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDQ5MzQ3LCA1NDc4MiwgNjQ4MDksIDUxMTk1LCAzMjY0MCwgMzIwMjQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI1MzA4LCA3MjAxMiwgNTc0NDQsIDMxOTQyLCAzODQ3OSwgNjIwMTAsIDI1OTgzLCA0OTgyNSwgMjYwNTEsIDUzNTU5LCA0NDU3MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzIwMTIsIDcyMDEyLCAyNTgwOSwgMjU3NzYsIDI1Nzc2LCAyNTg0NCwgMjU5ODMsIDI1OTg0LCAyNjA1MSwgMjYwNTEsIDI2MDE4LCA1ODU1MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDMzOTYyLCAyNTc3NiwgMjU3NzYsIDU1NDI3LCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA0Nzc2OCwgMjU3NzYsIDM2OTIyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDY4NjA4LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCA1OTcwOSwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDYxMzg1LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0OTM0NywgNTQ3ODIsIDY0ODA5LCA1MTE5NSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTUwNjMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA1MTM0MiwgNzIwMTIsIDcyMDEyLCAzNDAzMSwgMjU3NzYsIDI1Nzc2LCAyMTU4NiwgMjU5ODMsIDI1OTgzLCAzNzgwNCwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA3MjAxMiwgNDc3NjgsIDI1Nzc2LCAzNjkyMiwgMzk4NDIsIDI1OTgzLCA1MzI4NywgMjYwNTEsIDI2MDUxLCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgNTI4MzEsIDcyODE0LCA3MjMwNSwgNDk5NTMsIDUwMDE4LCA1MDA1MCwgNTAwNjksIDUwMTAxLCA1MDEzMiwgNzA4MTUsIDI1MjUzLCAyNDA1MCwgMzI2NDAsIDcyMjYxLCA1MDIwNiwgNTAyNjEsIDUwMjkzLCA1MDM4OSwgNTA0NTYsIDUwNTcyLCA0OTI2NiwgMzIxNTksIDQ2NDc2LCA1MDYwOSwgNDY4OTYsIDQ5NjUzLCAzNzI4NCwgNTA2NTIsIDYxNTU2LCA1MTEzNiwgMzQ3OTIsIDUwNzQzLCA0MzUxNiwgNDExODIsIDUwODM0LCA1MDg4NywgMzI2NDAsIDM3NzY0LCAzMjY0MCwgMzI2NDAsIDM5NjU3LCAyMzc1NywgNTA5MjQsIDUwOTU2LCA1MzY4MywgNTUzNzcsIDUxMDEyLCA1MjQzNywgNTEwODIsIDcxMjc1LCA1MTE2OCwgNTEyNDcsIDU4NTUyLCAzMTQ1NiwgMzI2NDAsIDUxMzE4LCAzMjY0MCwgNjgzOTMsIDcxNjMyLCAzNDkwOSwgMzM5NjIsIDI1Nzc2LCA1MTQwOCwgNTU0MjcsIDI1OTgzLCA1MTQ4OSwgNTE1NzEsIDI2MDUxLCA1MTYxNywgNTE2NzYsIDYwNjQ2LCA3MTMwOSwgMzI2NDAsIDY1NDkxLCA2NjI2OSwgNzIwMTIsIDQ3NzY4LCA1MTcxNCwgMzY5MjIsIDY3NTUxLCAyNTk4MywgNTMyODcsIDUwNDExLCAyNjA1MSwgNTE2ODIsIDcwMzQ2LCAxOTk4NywgNTE3NDcsIDcyMDEyLCAyNDk1MiwgMjU3NzYsIDY4MTIzLCA1MTgyMSwgNDczMjcsIDUxODU2LCA1MDQyNCwgMzE4MDgsIDcyNzIzLCA0NDA3MiwgNzEzNzgsIDI0MTYzLCA1NTIwMywgNTMyODYsIDY3NzMyLCA0NjMwMiwgNjI4NDAsIDY4MzkyLCA2NzEzNiwgNDUyMDgsIDUxODI0LCA1MTU4MCwgNTE4OTIsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDQ5MTkyLCA1MTk5NiwgNTIwOTYsIDQ4NTc5LCAyNjUzNSwgNTcwNDEsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQxLCA3MjgxNCwgMzI2NDAsIDUyMTY3LCAyMDM4MCwgNTIyMDIsIDUyMjMxLCA1MjI2MywgNTIyOTQsIDUyMzczLCAyNTI1MywgMzgzNTIsIDMyNjQwLCA1MjM3NSwgNTIzNTksIDI5OTI2LCA1MjQwNywgNjExNjcsIDUxMTk1LCA1NzU5OSwgMzIwMjQsIDI1NTkwLCA1MjUyNSwgMzI2NDAsIDUyNTU5LCA1MTc3OCwgNTI2MTMsIDUyNjg1LCA0MzE3MywgNTI3MzYsIDI1OTUwLCA0MzgyNSwgNDk1ODAsIDQ0MzE5LCA1MzYzMiwgNTIwNDMsIDUyODI4LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA1ODc1OSwgMzg1NjMsIDcyMDEyLCA1Mjg2MywgNTQ3NDksIDI1Nzc2LCA1Mjk0MywgNTUyMzEsIDI1OTg0LCAzODkwOCwgNTMwNTYsIDI2MDE4LCA1ODU1MiwgNTMxMDUsIDMyNjQwLCAyMjg1MywgNTMxNzIsIDM5MDIwLCA1MzIwNSwgNTU4MzgsIDY5NDcyLCA1MzIzOSwgNTM0ODgsIDY3NTM5LCA1MzI3NiwgMzM3ODgsIDM5NTY2LCA1MzMyMCwgNjM2NDMsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA0Nzc2OCwgMjU3NzYsIDM2OTIyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDY4NjA4LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDUzMzYxLCAzMjY0MCwgNzIzNjYsIDcxMzc4LCA1MzM5NywgNTc2NjAsIDUzMjg2LCA1MzQzMSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDQ3ODMzLCAzNTIzOCwgNjYzOTAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNjM5NTgsIDUwNDgyLCAzODY0MSwgNTMwNzMsIDUzNDY3LCA1MzUzOCwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCA0ODA3OCwgNTM2MDQsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNTM3MTUsIDM2NzUxLCA1MzgwMywgNTM4NTgsIDUzOTIxLCA1Mzk1MCwgNTM5ODIsIDU0MDEzLCA2ODM0MSwgNjU0MjMsIDU0MDY2LCAyMjMzNywgNzMxOTYsIDU0MTA4LCA1NDE0MCwgNTQxNzIsIDU0MjM0LCA1NDM4OSwgMzkzMjEsIDI1NDE3LCA0MjM0MSwgNTAxNzQsIDU0NDU1LCA0NDA1MCwgNTYwNTksIDY2NjE2LCA1NDUwNCwgNTQ1NTUsIDQ1ODUxLCA1NzY3OSwgNDIxMzAsIDU2Nzg5LCA2NDIzMiwgNjA5MjUsIDU2ODI5LCAxOTY5MiwgMzI2NDAsIDU0Njg5LCA2OTA1NSwgMjA2MDksIDU3NDU1LCA3MjAxMiwgNTQ3MjYsIDUyNjUzLCAyNTc3NiwgNTQ4MTQsIDYzOTA4LCAyNTk4NCwgNjEyMjcsIDM2NDk4LCAyNjAxOCwgNTg1NTIsIDMyNjQwLCA0NzM5NCwgMjQzODMsIDY4MzE4LCA3Mjg3MCwgNzIwMTIsIDU0ODY4LCAxODcwNywgMjU3NzYsIDY5NzA1LCA1NDkyOSwgMjU5ODMsIDcxOTI3LCA1NDk5NSwgMjYwNTEsIDQzOTE1LCA1NTA0NywgMzE2MzIsIDI5NzM4LCAzMjU3NCwgNTUwOTUsIDU1MTQ1LCA1NTI4MiwgNTUxNzQsIDU1MzQ3LCA1NTQwOSwgNTU0NzEsIDU1NTMzLCA1NTYyNSwgNTU2NjEsIDI2ODUwLCA2NzM0OSwgMzMzMzMsIDU1NjkzLCA1NTc2NCwgNTU4MTMsIDU1OTA0LCA1NTk1NCwgNDU0MDksIDU1NTYzLCA1OTY3MywgNTgzMjYsIDY0MDEwLCAzMTIzOSwgMzc2MjcsIDU2MDI4LCA1NjE0NywgNjM1NzQsIDcxNzM5LCA1NjIwMiwgNDg2MDAsIDUyMDIxLCAzMzAxNywgNDQ0MjAsIDU2MjcyLCA1MTQzOSwgNTYzMDQsIDI2NTU4LCA1NjM3OSwgNDk0NjksIDU2NDM1LCA1NjUyNSwgNTU2MjksIDU4ODYwLCA1MzY1OCwgNTY1NTcsIDM4Nzk2LCA1NjY0MCwgNTY3NjAsIDUzNzQ2LCA1Njg2MSwgNTY5MTgsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDM1MDY4LCA1NzAxNCwgMjY5MDUsIDU3MTAwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDU3MTQzLCA2MDUwMSwgNDYxNDAsIDUzMTQwLCA1NzI2OSwgNTcyOTgsIDU3MzMwLCA1NzM2MSwgNTczOTMsIDIxODY3LCA1NzQ4NywgNTM4MjYsIDU3NTYxLCA3MzEzNywgNTc2MzEsIDU3NzI1LCA1Nzc1NywgNTc4MTgsIDY0NTMyLCAzMzg0NSwgMjU3NDMsIDI4OTAzLCAzMjY0MCwgMzA3MTgsIDQ4NDkxLCA1Nzg3MSwgNTc5MzMsIDU3OTY1LCA1MDUwNywgMzQxNzcsIDQ2NDIwLCA2NTkwMiwgNTgwODMsIDQ0NTcyLCAzNDUwMiwgMjczNDcsIDQ3Njc1LCA2OTE5MiwgMzI0MTcsIDI3MDU3LCA1ODExNSwgNDU3NDQsIDU4MTY3LCA1ODIxMywgNTg0NzMsIDU4MjY0LCAzNjk4MCwgMjYzNzUsIDU4Mjk2LCA0NDM0OSwgNjk5NzcsIDM3NzQyLCAzMTA1NywgNTgzNTgsIDMyNjQwLCAzNTk1NywgNjgzOTMsIDQ5NjczLCA1ODM5NSwgMzM5NjIsIDIzNTU4LCA2NTgyNCwgNTU0MjcsIDY2NDU2LCA0NjAxNSwgMzk1NjYsIDYwMzEzLCA0NzYxMSwgNjg2MDIsIDMyNjQwLCA0NzAzOCwgNTg0MzEsIDY1NDkxLCA3MjAxMiwgNzIwMTIsIDU4NDY0LCAyNTc3NiwgMjc4MDQsIDU4NTA1LCAyNTk4MywgNTc2OTMsIDI2MDUxLCAyNjA1MSwgNTg1NDIsIDMzMjUzLCAzMjY0MCwgNTE5MTMsIDIyMzgzLCA0OTY5MSwgNjQzMTIsIDY0MzI3LCA1MDUyNCwgNDYwMjcsIDcxMDI4LCAzODAyOCwgNTMxMzIsIDMyNjQwLCAyMTUxNCwgNDkzNTYsIDY3NjQxLCA2ODQ1NCwgNjE2MzQsIDY1OTg2LCA0OTI0OSwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzk3MzcsIDY3OTcxLCA1ODU5MiwgMzU0OTgsIDY4ODIxLCA0Mjk4MiwgNjUwMzEsIDU4NjI0LCA1ODczMCwgNTg3OTEsIDU4ODkyLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCA2MDg5NywgNjIyNjIsIDU4OTcxLCA1OTAwMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA1MzAyNCwgMzI2NDAsIDU5MDQ2LCA1OTA4OCwgNTkxNTcsIDU5MTg2LCA1OTIxOCwgNTkyNDksIDI2NjkwLCAyNTI1MywgMzI2NDAsIDYyNTEyLCA1OTMxNCwgMzI2NDAsIDIxMzk5LCA0NTk1NiwgNTkzNDgsIDU5NDI4LCA2MDIwNCwgMzIwMjQsIDU5MjgyLCA1OTQ4MiwgNTk1MjYsIDI3NzIxLCA2MjMyNSwgNDI3OTQsIDU5NTYyLCAzNzM0MywgNDExMDUsIDU5NjUzLCA0NjI2MiwgNTc3ODYsIDU2NzI4LCA0MjE1OCwgNTkwMTQsIDU5NzA1LCA1OTc0MSwgMzI2NDAsIDMyNjQwLCA2NDEzMSwgMjc1ODIsIDcyMDEyLCAyNTgwOSwgNTEyODYsIDI1Nzc2LCAyNTg0NCwgNjg1MjUsIDI1OTg0LCAyNjA1MSwgNjk0MTIsIDI2MDE4LCAzODA4NiwgNTk3NjYsIDUzMTczLCAzMDQ1MywgMzE4NzMsIDY4MzkzLCA1OTgwNywgNzIwMTIsIDM4MTgyLCA1NjQ1OCwgMjU3NzYsIDY3ODgwLCA2ODI2MSwgMjU5ODMsIDM5NTY2LCA2MTI0NywgMjYwNTEsIDY4NjAyLCA0MDM4MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDU5ODU3LCA0Nzk2NiwgNjAwMDUsIDQ1NTk5LCAzOTg0MiwgNzE5NDAsIDUzMjg3LCAyNjA1MSwgNTk4OTIsIDY4NjA4LCAzMjY0MCwgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDcxMTE2LCAzMjY0MCwgNTk5MzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNTYyMjcsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgMzY3MTgsIDU5OTY5LCAyNDI4MCwgNjAwMzcsIDYwMTMxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDIyOTEyLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDU0NDIzLCAzMjY0MCwgMjA3NDIsIDYwMTgxLCAzMjg0MywgNjAyNTEsIDY3NzEwLCA1NDI5MSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAyOTQyMCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgNjAzNDUsIDI1Nzc2LCAyNTc3NiwgNjAzODEsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTg1NTIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDUzMjA3LCA3MjAxMiwgNDc3NjgsIDI3NzYzLCAzNjkyMiwgMzk4NDIsIDcxODc0LCA1MzI4NywgMjYwNTEsIDYwNDE4LCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNzA3MjAsIDcxMzgxLCA2MDQ1OCwgMzUyMjYsIDQ4OTg1LCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDM2MjQwLCA2MDQ5NywgMjMzODMsIDUzMTQwLCA2MDUzMywgNjA1NjEsIDYwNTkzLCA2MDYyNCwgMjM0MDUsIDI1NDY3LCAyMjE2MCwgMzMxNjksIDYwNjg5LCA2MDc0NywgNjA3MTUsIDYwODA1LCA2MDg2NiwgNjA5NTcsIDMyNjQwLCAzNjQwMCwgNjEwMjMsIDI2OTk1LCAzMjY0MCwgMzMzNTUsIDU1MzE1LCA1OTgyNSwgNjEwODIsIDY1ODMxLCA2MTE0NSwgNDczMTMsIDYxMTk5LCA2MTI3OSwgNjcyMzYsIDYxMzUyLCAzMjY0MCwgMzAwNzMsIDYxNDE3LCA3MTc5NCwgNjE0NTQsIDIyOTc5LCA2MTUwOCwgMzg1ODQsIDYxNTQ0LCA2MTU4OCwgNTYxNzAsIDYxNjI0LCA2MTY2NiwgNjQ2MjMsIDYxNzA0LCAyNjA1MSwgNDg2OTQsIDU4NTUyLCA2NTMzMywgNzI0NzIsIDYxNzM2LCA2MTc3MiwgNjE4MzEsIDU2MDgyLCA2MTg4MSwgNjQyOTIsIDQ2MjAwLCA1NTk4MSwgNjMwNzYsIDMyODg4LCA1NjMyOSwgMzY5OTgsIDUwMzU3LCA1ODg0MiwgNjg2MDIsIDYxOTI0LCAzMTMzNiwgMzEyMTcsIDMyOTQ5LCA2MTk2MiwgNzIwMTIsIDU0ODk3LCA1MjEzNSwgMzY5MjIsIDQzMjUzLCA1NDk0OSwgNTMyODcsIDYyMDU5LCA2MjEwMywgNTQ2MzUsIDY5NzkxLCAzMjY0MCwgNzE1NTIsIDcyMDEyLCAyMDYzMywgMjU3NzYsIDY2NzAwLCAyNTk4MywgNzA2MzEsIDI2MDUxLCA0MzA0OCwgNjA5OTEsIDMyNjQwLCAyNzU3NSwgMzg4NjAsIDI2MjY3LCAzNTYxMiwgNzE0MzEsIDI2MDUyLCA0NjMwMiwgMzkyNTIsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1OTM5NiwgNjEwNTAsIDQ4OTA5LCA2MjEzOCwgNDk5MjEsIDQzODYxLCA1MDgwMiwgNDQ3NTYsIDI2ODczLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAzMzU2MCwgNjIyMzUsIDYyMjk0LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA2OTI2NiwgNjI0MjcsIDYyNTQ0LCA2MjYxMiwgNjI2NDQsIDYyNjczLCA2MjcwNSwgNjI3MzYsIDMxMjU2LCA0OTg3OCwgMzE5MTAsIDMyNjQwLCA2Mjc5MCwgNjI4ODUsIDYyOTE3LCA0NDE2NCwgNjk1NTYsIDUxNjQ0LCA2Mjk0OSwgNjI5OTUsIDQ1Njk2LCAzMjY0MCwgMTkyNzgsIDYzMDI3LCA2MzEwOCwgNjMyMTEsIDYzMjQ1LCA1NDM0MiwgNTM1MDYsIDYzMzAwLCA2MTY3MiwgNjMzNzgsIDYzNDEwLCA0NDU3MiwgNjM0NTAsIDIxNzcwLCA2MzQ4NywgNTg1NjAsIDMyNjQwLCA1NzQyMiwgNjg4ODQsIDYxNTEyLCA2MzU1MywgNDc1MTMsIDYxNTkyLCA2MzYwNiwgNjM2NzUsIDI5OTYwLCA1MTA1MCwgNjM3MTcsIDM3ODk1LCA2Mzc1OSwgMTg1NjIsIDIxMjE3LCA0MDAyOCwgMzI1NjAsIDYzNzk5LCA1OTg2MCwgNTgxMzUsIDQzMTU4LCAyNTc3NiwgNjM4NDMsIDcwNjE0LCAyNTk4MywgNjM4NzUsIDYzOTQwLCAyNjA1MSwgNjM5OTAsIDY0MDQyLCA2NDQ0MiwgMjEyNjIsIDMyNjQwLCA2NDExNywgNTgzOTksIDM4ODQ4LCA0Nzc2OCwgMjQxNzQsIDY0MTY4LCAzOTg0MiwgNTYzNDcsIDUzMjg3LCAyNjA1MSwgNjQyMTgsIDY4NjA4LCAyNzg5OCwgMzE1MjAsIDY1NDk1LCA2NDI2NCwgNTE5MzEsIDQyODU1LCA2NzY1NiwgMjYzNjUsIDY0MzU5LCAzOTE4MCwgNjQzOTcsIDMyNjQwLCAyMjg4MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNTY4ODYsIDMyMjM0LCA0MTQ4OSwgNDE3NjYsIDUxOTY0LCA2MDM4NiwgNTE1ODAsIDY0NDg5LCA1NDY1NywgNjQ1NjQsIDM0MDY0LCA3MjEyOCwgMzU1NTAsIDQyMTg0LCA2NDY1NSwgMzk2MjgsIDQ5OTIxLCA0Mzg2MSwgNjI3NTgsIDQwOTYyLCA2ODcxNCwgNTQ2MTAsIDY0NzM0LCAzNjg0NywgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgMjUyNzAsIDMyNjQwLCAyMzExMSwgMzIxMjIsIDY0ODU2LCA2NDg4NywgNjQ5MTksIDY0OTUwLCAzMTM4OSwgNjUwMDUsIDI3MjMyLCAzNDUxOSwgNjUwNjMsIDY1MTIwLCA2NTA4OCwgNjExMTMsIDY1MTg5LCA2NTI5NCwgNjUzNjUsIDY1Mzk3LCAzMjY0MCwgNjU0NTUsIDY1NTI3LCA2NTU4MywgNjU2NTMsIDY1NzMwLCA2NTc5NiwgNDI2NDcsIDUyNzA0LCA1ODAyNSwgNjU4NjMsIDY1OTM0LCA2NTk2NiwgNjYwMzMsIDY0MDcyLCA2NjA5OSwgMjY2ODMsIDMwNTY0LCA2NjEzMSwgNjYxNzksIDY2MjQ2LCA0MTUyMiwgNjYzMTIsIDY0NzY1LCAyNjEwMCwgNjYzNDQsIDY2NDIyLCA2MjAyNywgNjMzNDYsIDY2NDg4LCA0ODA5OCwgNjY1MzksIDM4MTE5LCA0MDQzOSwgMzA2OTAsIDI0NzE0LCA2NjY0OCwgNDY4MDksIDIyOTkxLCA2NzA4MiwgNjY2ODAsIDQ3OTc1LCA2NjczMiwgNjY3NjQsIDU4NTEwLCA2NjgxOSwgNjY4NTEsIDI2MzA0LCA2NjkwNiwgNjY5NTQsIDMxMjcyLCAzMjY0MCwgNjcwMDAsIDY3MDU0LCA2NzExNCwgMjE1NDQsIDM0NjM5LCAyMTU2OCwgNjcxODYsIDY3MjY4LCA2NzMyNSwgNjc0MDIsIDU0MjY0LCA0MzYwNywgNDgwMTcsIDM0MjczLCA0MjQyNiwgNjc1ODMsIDMwOTM1LCA2NzYyMSwgNDE3ODQsIDY3Njg4LCA0ODIwMywgNjc3NzgsIDY0ODI0LCA0MTY3MSwgMjAzMTUsIDI0MjM2LCA2NzgzMywgNDQ0ODEsIDM3NDcwLCA2NzkyNiwgNTkzNzgsIDY4MDAzLCAzMjY0MCwgNjgwODcsIDY4MTU1LCAzNDY5NiwgNjgyMTQsIDM5OTUyLCA2ODI5MywgNjgzNzMsIDY4NDI1LCA2ODQ4NiwgNjY3ODcsIDM1ODYyLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCA1ODgxNywgNjg3NzcsIDY4NTU3LCA2ODY0MCwgNjg3NDYsIDU4NjU1LCA0NDgxNSwgNjg4NTMsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMTkwNSwgMzI2NDAsIDY0MDg1LCAzMjY0MCwgNDgzNTMsIDUzMTQwLCA2ODkyOCwgNjg5NTcsIDY4OTg5LCA2OTAyMCwgMzI2NDAsIDI3MTI1LCAyNzYzMiwgMzA3ODgsIDI3MTQzLCAzMjY0MCwgMzE2NTYsIDY0NTk1LCA2OTA4NywgNjkxNDgsIDMyNjQwLCAzMjAyNCwgMzI2NDAsIDY5MjI0LCAzMjY0MCwgNDk4OTUsIDY5Mjk4LCAzOTA1OCwgNjkzNDgsIDI1Nzc2LCA0OTQxOCwgMjU5ODMsIDcwMDI0LCA2OTQwMSwgNDUzMjMsIDQ2NDQ4LCAyNDc1NywgNzA5NzAsIDMyNjQwLCAyNzg2NSwgMzE3NDMsIDUyNTgxLCA2MTg0OSwgNjk0NDQsIDY5NTA0LCA1NDUyMywgNTQ1ODMsIDY5NTg4LCAzMzQ2NSwgNjk2NDgsIDU5ODk5LCAzMzU4OCwgNjk3NDYsIDU4NTUyLCA2OTgyMywgMzI2NDAsIDMyNjQwLCA2OTg1NSwgMzg5NjQsIDcyMDEyLCA3MjAxMiwgNjU2MTEsIDY5ODkyLCAyNTc3NiwgNzIxMTMsIDY5OTI4LCAyNTk4MywgMzk1NjYsIDY5OTY2LCAyNjA1MSwgNDEyNTQsIDM1NjU3LCAzMjY0MCwgMzI2NDAsIDYxNDc2LCA3MjAxMiwgNzIwMTIsIDYyMzU0LCAyNTc3NiwgMzY5MjIsIDcwMDA5LCAyNTk4MywgMjY0MTgsIDI2MDUxLCAyNjA1MSwgMzQzNDksIDMyNjQwLCAxODg0NSwgMjY2MjIsIDcyMDEyLCAyNzA3NSwgMjU3NzYsIDM5NDYwLCA3MDA1NiwgNjcyOTMsIDcwMDk0LCA0MTIwNCwgMzE4NTgsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA0NTM4NiwgNzAxMzgsIDcwMTc4LCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDQ2MDgyLCA2ODY2NiwgNzAyNzMsIDM0NzE2LCAyNjUzNSwgNDQ4NDIsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCAyMjIxNywgNjgwMzAsIDY2MDYwLCAzMzczOSwgNzAzMzEsIDU0NDcyLCA3MDM3OCwgNzA0MDksIDMyNjQwLCAyNTI1MywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDE5MzAyLCA3MDQ3NiwgNTY2OTIsIDUxMTk1LCA1OTc3NSwgNDMzMTUsIDMyNjQwLCAzMjY0MCwgMjc2NDcsIDI1MzA4LCAzNzExMywgNjIyMDMsIDcwNTkyLCA1MzI0NCwgNjIwMTAsIDcwNjYzLCA0NzU4MywgNTY3MTQsIDMzNjI1LCA0NDU3MiwgMzI2NDAsIDMyNjQwLCAyODAwMCwgMzI2NDAsIDI5NzYzLCA2NDEzMSwgNTU4NTUsIDcyMDEyLCAyNTgwOSwgNTE5NDksIDI1Nzc2LCAyNTg0NCwgNTY5NjcsIDI1OTg0LCAyNjA1MSwgMzM2MTEsIDI2MDE4LCA1ODU1MiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY4MzkzLCA3MjAxMiwgNzIwMTIsIDMzOTYyLCAyNTc3NiwgMjU3NzYsIDU1NDI3LCAyNTk4MywgMjU5ODMsIDM5NTY2LCAyNjA1MSwgMjYwNTEsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2NTQ5MSwgNzIwMTIsIDcyMDEyLCA0Nzc2OCwgMjU3NzYsIDM2OTIyLCAzOTg0MiwgMjU5ODMsIDUzMjg3LCAyNjA1MSwgMjYwNTEsIDY4NjA4LCA1MDU3NywgMzI2NDAsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgMzcxODcsIDI1NTA2LCAzMjY0MCwgNjQxMzEsIDcxMzc4LCAyNTc3NiwgMjk5NTUsIDUzMjg2LCAyNjA1MSwgNDYzMDIsIDMyNjQwLCA2ODM5MiwgNzEzODEsIDMxOTQ3LCAyNTk4MywgNTE1ODAsIDM3MTkzLCA3MDcwMSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNTkwNTYsIDMyNjQwLCA3MDc1MiwgNzA3ODgsIDcwODU1LCA3MDg4NCwgNzA5MTYsIDcwOTQ3LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0MTU3OCwgNDk3MDksIDcxMDEyLCA3MTA2MCwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDcxMTE1LCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTg1NTIsIDMyNjQwLCAzMjY0MCwgMzgxMDgsIDMyNjQwLCAyNDkzMiwgNzIwMTIsIDcyMDEyLCA1MjY0MSwgMjU3NzYsIDI1Nzc2LCA3MTg1OCwgMjU5ODMsIDI1OTgzLCA0MzAzMiwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDcxMTQ4LCAzMjY0MCwgNjU0OTEsIDUxNzg5LCAzNDk0OSwgNDc3NjgsIDU2NDc4LCA0MjkwMSwgMzk4NDIsIDcxMTgxLCA2MzMyNSwgNjM0MTgsIDM2MDM3LCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjE1NCwgMzI2NDAsIDcyODE0LCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMzY1NjcsIDcwMjk5LCAzNDI0MCwgMzI2NDAsIDI1NjQwLCA0MzY3MiwgMzI2NDAsIDIyNzkwLCA1ODkzOSwgMzc0NDEsIDcxMjI4LCA0MTE2MCwgNTExOTUsIDMyNjQwLCAyMjE4MywgNzE1MTUsIDcxMzA3LCAzMjY0MCwgMjUzMDgsIDcyMDEyLCA3MTM0MSwgMzE5NDIsIDM1NDY1LCA3MTQxMywgMzY2NjcsIDU5NjIxLCAyNjA1MSwgNzE0NjMsIDQyNDAxLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MjAxMiwgNzIwMTIsIDI1ODA5LCAyNTc3NiwgMjU3NzYsIDI1ODQ0LCAyNTk4MywgMjU5ODQsIDI2MDUxLCAyNjA1MSwgMjYwMTgsIDU4NTUyLCAzMjY0MCwgMzI2NDAsIDQxOTM2LCAzMjY0MCwgNjgzOTMsIDY2MjE0LCA3MjAxMiwgNzE1ODQsIDM4MTkyLCAyNTc3NiwgNDIwNTMsIDcwNjY5LCAyNTk4MywgMzk1NjYsIDM5Nzc1LCAyNjA1MSwgNjg2MDIsIDM1NDA1LCAzMjY0MCwgMzI2NDAsIDY1NDkxLCA3MTYyOCwgNzIwMTIsIDQ4NTUyLCAyNTc3NiwgMzY5MjIsIDI2MTQ5LCAyNTk4MywgNTMyODcsIDcxNjY0LCAyNjA1MSwgNjg2MDgsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA1MTM2MCwgMjU3NzYsIDY1Njk4LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzE5MDUsIDMyNjQwLCA3MjgxNCwgMzI2NDAsIDMyNjQwLCA1MzE0MCwgMjI5MTIsIDM2NTY3LCA3MDI5OSwgMzc2OTAsIDMyNjQwLCAyNTI1MywgNjYwNjcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDcxNzEwLCAyNjczOSwgNDI5NjQsIDcxNzcxLCAyMDMyNSwgMzIwMjQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDI3MjgzLCA3MjAxMiwgNTk5MzcsIDMxOTQyLCAyNTc3NiwgNTI4OTMsIDI1OTgzLCA1Njk4MiwgMjYwNTEsIDUxODYwLCA0NDU3MiwgMjMzMjEsIDMyNjQwLCAzMjY0MCwgMzc1MzksIDMyNjQwLCAzODgyNSwgNzIwMTMsIDcyMDEyLCA3MTgzNiwgNTMzOTksIDI1Nzc2LCA3MTkwNiwgMzk4NDUsIDI1OTg0LCA3MTY3OCwgNTM0MzUsIDI2MDE4LCA1ODU1MiwgMzAxMzQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY4MzkzLCA3MTk3MiwgNzIwMTIsIDYzMDU0LCA1MjEyMywgMjU3NzYsIDYyMzc2LCA0ODE4OCwgMjU5ODMsIDI0Mjk3LCAzNjg3MiwgMjYwNTEsIDY4NjAyLCAzMjY0MCwgMzI2NDAsIDMzOTA0LCA2NTQ5MSwgNzIwMTIsIDcyMDExLCA0Nzc2OCwgNDIyMTgsIDM2OTIyLCAzOTg0MiwgNzExOTYsIDUzMjg3LCAyNjA1MSwgNzIwNDUsIDY4NjA4LCAzMjY0MCwgNDg4NDMsIDY1NDk1LCA3MjAxMiwgNTEzNjAsIDI1Nzc2LCA2NTY5OCwgMjU5ODMsIDUzMjg4LCAyNjA1MSwgNDUyNTEsIDMyNjQwLCAzNDI1OCwgMjM1MDQsIDYzODExLCAyNTc3NiwgNjg4MDYsIDYzNjg1LCAyNjA1MSwgNDYzMDIsIDIzMDQxLCA2ODM5MiwgNzIwOTEsIDQ0NzM4LCA1NDk2MywgMzQ3MzEsIDM3MTkzLCAyNjYwOSwgNzEzNzUsIDYwNDY1LCA0Mzg2MCwgNTg4NjAsIDMzMzc1LCA3MDE0NiwgNjc3NDYsIDQ5OTIxLCA0Mzg2MSwgNDk5MTIsIDI2NDYxLCAzOTkwMCwgNDc4NDksIDM2MTU5LCAzNDcxNiwgMjY1MzUsIDQ0ODE1LCAyNjkwNSwgMjY5MzMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMxOTA1LCAzMjY0MCwgNzI4MTQsIDMyNjQwLCAzMjY0MCwgNTMxNDAsIDcyMTYwLCAzNjU2NywgNzAyOTksIDM0MjQwLCAzMjY0MCwgMjUyNTMsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA0OTM0NywgNTQ3ODIsIDY0ODA5LCA1MTE5NSwgMzI2NDAsIDMyMDI0LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyNTMwOCwgNzIwMTIsIDcyMDEyLCAzMTk0MiwgMjU3NzYsIDYyMDEwLCAyNTk4MywgNjE2NzIsIDI2MDUxLCAyNjA1MSwgNDQ1NzIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjQxMzEsIDcyMDEyLCA3MjAxMiwgMjU4MDksIDI1Nzc2LCAyNTc3NiwgMjU4NDQsIDI1OTgzLCAyNTk4NCwgMjYwNTEsIDI2MDUxLCAyNjAxOCwgNTg1NTIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCA2ODM5MywgNzIwMTIsIDcyMDEyLCAzMzk2MiwgMjU3NzYsIDI1Nzc2LCA1NTQyNywgMjU5ODMsIDI1OTgzLCAzOTU2NiwgMjYwNTEsIDI2MDUxLCA2ODYwMiwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjU0OTEsIDcyMDEyLCA3MjAxMiwgNDc3NjgsIDI1Nzc2LCAzNjkyMiwgMzk4NDIsIDI1OTgzLCA1MzI4NywgMjYwNTEsIDI2MDUxLCA2ODYwOCwgMzI2NDAsIDMyNjQwLCA2NTQ5NSwgNzIwMTIsIDUxMzYwLCAyNTc3NiwgNjU2OTgsIDI1OTgzLCA1MzI4OCwgMjYwNTEsIDM3MTg3LCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MTM3OCwgMjU3NzYsIDI5OTU1LCA1MzI4NiwgMjYwNTEsIDQ2MzAyLCAzMjY0MCwgNjgzOTIsIDcxMzgxLCAzMTk0NywgMjU5ODMsIDUxNTgwLCAzNzE5MywgMjY2MDksIDcxMzc1LCA2MDQ2NSwgNDM4NjAsIDU4ODYwLCAzMzM3NSwgNzAxNDYsIDY3NzQ2LCA0OTkyMSwgNDM4NjEsIDQ5OTEyLCAyNjQ2MSwgMzk5MDAsIDQ3ODQ5LCAzNjE1OSwgMzQ3MTYsIDI2NTM1LCA0NDgxNSwgMjY5MDUsIDI2OTMzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyMjUzMCwgMzI2NDAsIDcyMjY4LCA3MjIzNCwgNDAyMzEsIDcyMjA0LCA3MjMwMCwgNzIzMzcsIDcyNDE3LCA3MjQ0OSwgMzI2NDAsIDI1MjUzLCA3MTE0OSwgNzI5ODYsIDMyNjQwLCAzMjY0MCwgMjIwMTEsIDE5NzAzLCAyNDY0NiwgMjE4MDcsIDMxMTU0LCAxOTc3OSwgMzI2NDAsIDE4NjEyLCAxODY0OSwgMTg3NTcsIDE4Nzg5LCAxODk1OSwgMjE5ODUsIDIyMDY5LCA3MjUwNCwgMjIwNTcsIDE4ODg3LCAxODc4NywgMTg5NTcsIDE4OTkxLCAzNjQ1MSwgMzI2NDAsIDI0ODc1LCA2OTE3OSwgMTkwNDEsIDYyNDU4LCAxOTEzNCwgNDA4MTksIDIxMzQxLCAxOTA3MywgNDY3MzIsIDIxMzQyLCAxOTA3NCwgNDY3MzMsIDE5MTA2LCAxOTE5MywgNDA4MjIsIDE5NDM4LCA2NjU3MCwgMTkyNTEsIDIxMjQ0LCA0MTAxNCwgMTkzMzQsIDE5MzY2LCAxOTM5OCwgMTk0NzAsIDE5NTAyLCAxOTUzOCwgMjUxMTksIDE5NDk4LCAxOTUzNCwgMTk1NzAsIDE5MzU5LCAxOTYyOSwgMTk0MjIsIDE5NjYxLCAxOTczNSwgMTk4MTEsIDE5ODc4LCAxOTkxMCwgMTk5NDIsIDIwMDE5LCAzMDg1MSwgMzA5OTMsIDIwMDI2LCAzMDg1OCwgMjAwNTgsIDE5OTA3LCAyMTkyNywgMTk5NjksIDIwMDkwLCAyMDEzOCwgMjAyMTEsIDIwMjY1LCAyMDM1NywgNjM1MjEsIDIwNDEyLCA2MzUxOCwgMjA0ODgsIDIwNTQ3LCAyMDI5MSwgMjA1NzksIDIwNzA5LCAyMDc3NCwgMjA4MjEsIDIwODcwLCAyMDg1MywgMjA4ODUsIDIwNzg5LCAyMDkxNywgMjA5NDksIDIxMDMwLCAyMTA2MiwgMjEwOTQsIDIxMDg0LCAyMTEyNiwgMjExODYsIDIxMzEwLCAyMTQ1MiwgMjEzNzQsIDIxNDMxLCAyMTQ4NCwgMjE2MTgsIDIxNjUwLCAyMTc0MSwgMjE4MDIsIDIzMDU3LCAyMTgzOSwgMjE4OTksIDIxOTU5LCAyMjEwMSwgMjExNTQsIDIyMjQ5LCAyMjI4MSwgMjI0MjcsIDIyNDU5LCAyMjQ4NywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjI1MzAsIDMyNjQwLCA2MTc0MCwgMzI2NDAsIDcwNDMxLCA1MzE0MCwgNzI1NjAsIDcyNTg5LCA2MDIxOSwgNzI2MzYsIDMyNjQwLCAyNTI1MywgMzI2NDAsIDcyOTg2LCA1MDg5MiwgNTA4OTAsIDE4OTA3LCAzMjY0MCwgNDA3NTEsIDIxODA3LCAzMTE1NCwgMTk3NzksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIyMDM3LCAyMjA2OSwgMTg4MjEsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCAyMTMxMCwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgMjE0ODQsIDIxNjE4LCAyMTY1MCwgMjE3NDEsIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDIyNTMwLCAzMjY0MCwgNjE5MzAsIDMyNjQwLCAzMjY0MCwgMTk4NDYsIDcyNjkxLCA3MjcwOCwgMzA2MjksIDcyNzU1LCAzMjY0MCwgMjUyNTMsIDMyNjQwLCA3MjgxMCwgNTkyNzAsIDUyMTcwLCAxODkwNywgMzI2NDAsIDIzMDU4LCAyMTgwNywgMzExNTQsIDE5Nzc5LCAzMjY0MCwgMTg2MTIsIDE4NjQ5LCAxODc1NywgMTg3ODksIDE4OTU5LCAyMjMxMSwgMjIwNjksIDcyODQ2LCAyMjA1NywgMTg4ODcsIDE4Nzg3LCAxODk1NywgMTg5OTEsIDM2NDUxLCAzMjY0MCwgMjQ4NzUsIDY5MTc5LCAxOTA0MSwgNjI0NTgsIDE5MTM0LCA0MDgxOSwgMjEzNDEsIDE5MDczLCA0NjczMiwgMjEzNDIsIDE5MDc0LCA0NjczMywgMTkxMDYsIDE5MTkzLCA0MDgyMiwgMTk0MzgsIDY2NTcwLCAxOTI1MSwgMjEyNDQsIDQxMDE0LCAxOTMzNCwgMTkzNjYsIDE5Mzk4LCAxOTQ3MCwgMTk1MDIsIDE5NTM4LCAyNTExOSwgMTk0OTgsIDE5NTM0LCAxOTU3MCwgMTkzNTksIDE5NjI5LCAxOTQyMiwgMTk2NjEsIDE5NzM1LCAxOTgxMSwgMTk4NzgsIDE5OTEwLCAxOTk0MiwgMjAwMTksIDMwODUxLCAzMDk5MywgMjAwMjYsIDMwODU4LCAyMDA1OCwgMTk5MDcsIDIxOTI3LCAxOTk2OSwgMjAwOTAsIDIwMTM4LCAyMDIxMSwgMjAyNjUsIDIwMzU3LCA2MzUyMSwgMjA0MTIsIDYzNTE4LCAyMDQ4OCwgMjA1NDcsIDIwMjkxLCAyMDU3OSwgMjA3MDksIDIwNzc0LCAyMDgyMSwgMjA4NzAsIDIwODUzLCAyMDg4NSwgMjA3ODksIDIwOTE3LCAyMDk0OSwgMjEwMzAsIDIxMDYyLCAyMTA5NCwgMjEwODQsIDIxMTI2LCAyMTE4NiwgMjEzMTAsIDIxNDUyLCAyMTM3NCwgMjE0MzEsIDIxNDg0LCAyMTYxOCwgMjE2NTAsIDIxNzQxLCAyMTgwMiwgMjMwNTcsIDIxODM5LCAyMTg5OSwgMjE5NTksIDIyMTAxLCAyMTE1NCwgMjIyNDksIDIyMjgxLCAyMjQyNywgMjI0NTksIDIyNDg3LCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAyMjUzMCwgMzI2NDAsIDYxNzQwLCAzMjY0MCwgMzI2NDAsIDUzMTQwLCAyMjkxMiwgMzI2NDAsIDMyNjQwLCA3MjkxOSwgMzI2NDAsIDI1MjUzLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNDkzNDcsIDU0NzgyLCA2NDgwOSwgMzUyOTcsIDMyNjQwLCAzMjAyNCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMjUzMDgsIDcyMDEyLCA3MjAxMiwgNDg3MjQsIDI1Nzc2LCA1OTYwNCwgMjU5ODMsIDYxNjcyLCAyNjA1MSwgMjYwNTEsIDQ0NTcyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY0MTMxLCA3MjAxMiwgNzIwMTIsIDI1ODA5LCAyNTc3NiwgMjU3NzYsIDI1ODQ0LCAyNTk4MywgMjU5ODQsIDI2MDUxLCAyNjA1MSwgMjYwMTgsIDU4NTUyLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgNjgzOTMsIDcyMDEyLCA3MjAxMiwgMzM5NjIsIDI1Nzc2LCAyNTc3NiwgNTU0MjcsIDI1OTgzLCAyNTk4MywgMzk1NjYsIDI2MDUxLCAyNjA1MSwgNjg2MDIsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDY1NDkxLCA3MjAxMiwgNzIwMTIsIDQ3NzY4LCAyNTc3NiwgMzY5MjIsIDM5ODQyLCAyNTk4MywgNTMyODcsIDI2MDUxLCAyNjA1MSwgNjg2MDgsIDMyNjQwLCAzMjY0MCwgNjU0OTUsIDcyMDEyLCA1MTM2MCwgMjU3NzYsIDY1Njk4LCAyNTk4MywgNTMyODgsIDI2MDUxLCAzNzE4NywgMzI2NDAsIDMyNjQwLCA2NDEzMSwgNzEzNzgsIDI1Nzc2LCAyOTk1NSwgNTMyODYsIDI2MDUxLCA0NjMwMiwgMzI2NDAsIDY4MzkyLCA3MTM4MSwgMzE5NDcsIDI1OTgzLCA1MTU4MCwgMzcxOTMsIDI2NjA5LCA3MTM3NSwgNjA0NjUsIDQzODYwLCA1ODg2MCwgMzMzNzUsIDcwMTQ2LCA2Nzc0NiwgNDk5MjEsIDQzODYxLCA0OTkxMiwgMjY0NjEsIDM5OTAwLCA0Nzg0OSwgMzYxNTksIDM0NzE2LCAyNjUzNSwgNDQ4MTUsIDI2OTA1LCAyNjkzMywgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDM0NDg1LCAzMjY0MCwgMjMyMTIsIDIzMjI5LCA1MjMyNywgNzI5NzQsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDcyOTg2LCAzMjY0MCwgMzI2NDAsIDE4OTA3LCAzMjY0MCwgMjMwNTgsIDIxODA3LCAzMTE1NCwgNDM2NTksIDMyNjQwLCAxODYxMiwgMTg2NDksIDE4NzU3LCAxODc4OSwgMTg5NTksIDIxOTg1LCAyMjA2OSwgNzI1MDQsIDIyMDU3LCAxODg4NywgMTg3ODcsIDE4OTU3LCAxODk5MSwgMzY0NTEsIDMyNjQwLCAyNDg3NSwgNjkxNzksIDE5MDQxLCA2MjQ1OCwgMTkxMzQsIDQwODE5LCAyMTM0MSwgMTkwNzMsIDQ2NzMyLCAyMTM0MiwgMTkwNzQsIDQ2NzMzLCAxOTEwNiwgMTkxOTMsIDQwODIyLCAxOTQzOCwgNjY1NzAsIDE5MjUxLCAyMTI0NCwgNDEwMTQsIDE5MzM0LCAxOTM2NiwgMTkzOTgsIDE5NDcwLCAxOTUwMiwgMTk1MzgsIDI1MTE5LCAxOTQ5OCwgMTk1MzQsIDE5NTcwLCAxOTM1OSwgMTk2MjksIDE5NDIyLCAxOTY2MSwgMTk3MzUsIDE5ODExLCAxOTg3OCwgMTk5MTAsIDE5OTQyLCAyMDAxOSwgMzA4NTEsIDMwOTkzLCAyMDAyNiwgMzA4NTgsIDIwMDU4LCAxOTkwNywgMjE5MjcsIDE5OTY5LCAyMDA5MCwgMjAxMzgsIDIwMjExLCAyMDI2NSwgMjAzNTcsIDYzNTIxLCAyMDQxMiwgNjM1MTgsIDIwNDg4LCAyMDU0NywgMjAyOTEsIDIwNTc5LCAyMDcwOSwgMjA3NzQsIDIwODIxLCAyMDg3MCwgMjA4NTMsIDIwODg1LCAyMDc4OSwgMjA5MTcsIDIwOTQ5LCAyMTAzMCwgMjEwNjIsIDIxMDk0LCAyMTA4NCwgMjExMjYsIDIxMTg2LCA3MzAyMiwgMjE0NTIsIDIxMzc0LCAyMTQzMSwgNzMxMTEsIDIxNjE4LCAyMTY1MCwgNzMxNjksIDIxODAyLCAyMzA1NywgMjE4MzksIDIxODk5LCAyMTk1OSwgMjIxMDEsIDIxMTU0LCAyMjI0OSwgMjIyODEsIDIyNDI3LCAyMjQ1OSwgMjI0ODcsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDMyNjQwLCAzMjY0MCwgMzI2NDAsIDEsIDI0NTc4LCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODA1MjMsIDE4MDUyMywgMTgwNTIzLCAxODA1MjMsIDAsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4MDUyMywgMTgwNTIzLCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDAsIDE4ODcxNiwgMTgwNTIzLCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDEzOTI2NCwgMTQ3NDU2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxMzEwNzIsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAxODg3MTYsIDE4ODcxNiwgMTg4NzE2LCAzNjcsIDE4ODcxNiwgMTgwNTIzLCAxODg3MTYsIDE4ODcxNiwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDE4MDUyMywgMTg4NzE2LCAzMDEsIDMwMiwgMCwgNDI2ODAzMiwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyODksIDAsIDIyOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNjgsIDIzNjksIDAsIDAsIDIzNzEsIDAsIDAsIDAsIDAsIDIzNzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNzYyMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMzA3LCAwLCAwLCA1NzY3MTY4LCAwLCAwLCAwLCA0ODU3ODU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjU5MjY0LCAwLCA1NDE0OTEyLCA1NDQ3NjgwLCAwLCAwLCA1NTYyMzY4LCA1NjM2MDk2LCA1Njg1MjQ4LCAwLCA1NzUwNzg0LCA1ODczNjY0LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODc3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODg5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTgyMSwgNTc4ODYsIDU5ODIzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDU4NzU0LCA5NzcsIDU3OTA5LCA1NzkwOSwgNTg4NTMsIDU3OTA5LCA1NzkwOSwgNTg4NTcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4NzEsIDAsIDAsIDU2MzYwOTYsIDU4NzM2NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NzM2NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0ODA0NDgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQ4NTc4NTYsIDQ4NzQyNDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUyNTkyNjQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU0MTQ5MTIsIDQzNTgxNDQsIDU0NDc2ODAsIDQzNTgxNDQsIDU0NjQwNjQsIDQzNTgxNDQsIDU0ODA0NDgsIDU1NjIzNjgsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDYyNzUwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3NywgMCwgMCwgMCwgMCwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg3MzY2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI3NTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0MCwgMCwgMCwgMTE0NSwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgNDkyMzM5MiwgNTU2MjM2OCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTYzNjA5NiwgNDM1ODE0NCwgNTY4NTI0OCwgNDM1ODE0NCwgNDM1ODE0NCwgNTc1MDc4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTg3MzY2NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjI3NTA3MiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDkyMzM5MiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgNDkyMzM5MiwgMCwgMCwgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc2NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgyNTA4OCwgMCwgMCwgNTE3NzM0NCwgMCwgMCwgMCwgMCwgNTcwMTYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgwODEyOCwgMCwgMCwgMCwgMCwgNDc5MjMyMCwgNDgzMzI4MCwgMCwgMCwgNTcwMTYzMiwgMCwgNTI0Mjg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0MTE4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYyNzkwNCwgNTY1MjQ4MCwgMCwgNTcwMTYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDgyNTA4OCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTE3NzM0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTI0Mjg4MCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTM0MTE4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTYyNzkwNCwgNTY1MjQ4MCwgNDM1ODE0NCwgNTcwMTYzMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDgzMzI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODU3ODU2LCA0ODc0MjQwLCAwLCAwLCA0OTIzMzkyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MzQxMTg0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NjI3OTA0LCA1NjUyNDgwLCA0MzU4MTQ0LCA1NzAxNjMyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA1ODA4MTI4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAxMDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODU3ODU2LCA0ODc0MjQwLCAwLCAwLCA0OTIzMzkyLCAwLCAwLCA2NDIyNTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjE5NzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzI2MjA4LCA1NzU4OTc2LCAwLCAwLCA1NzkxNzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTUxLCAxMjc4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgODQ4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCA2NDc5ODcyLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0OTMxNTg0LCA0OTM5Nzc2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MDU0NDY0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MjEwMTEyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MjkyMDMyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MzY1NzYwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NDU1ODcyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NTU0MTc2LCA1NTcwNTYwLCA1NTc4NzUyLCA1NjE5NzEyLCA1NjY4ODY0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NzkxNzQ0LCA1ODE2MzIwLCA0MzU4MTQ0LCA1ODU3MjgwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MTE5NDI0LCA0MzU4MTQ0LCA2MTY4NTc2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MjQyMzA0LCA0MzU4MTQ0LCA2MjkxNDU2LCA0MzU4MTQ0LCA2MzE2MDMyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2NDYzNDg4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTMxNTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2NDYzNDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTMxNTg0LCA0OTM5Nzc2LCAwLCAwLCAwLCAwLCAwLCAwLCA1MDU0NDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEwMTEyLCAwLCAwLCAwLCAwLCA1MjkyMDMyLCAwLCAwLCAwLCAwLCA1MzY1NzYwLCAwLCAwLCAwLCA1NDU1ODcyLCAwLCAwLCAwLCAwLCAwLCA1NTU0MTc2LCA1NTcwNTYwLCA1NTc4NzUyLCA1NjE5NzEyLCA1NjY4ODY0LCAwLCA1NTc4NzUyLCA1NjE5NzEyLCA1NjY4ODY0LCAwLCAwLCAwLCA1NzkxNzQ0LCA1ODE2MzIwLCAwLCA1ODU3MjgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTE5NDI0LCAwLCA2MTY4NTc2LCAwLCAwLCAwLCAwLCAwLCA2MjQyMzA0LCAwLCA2MjkxNDU2LCAwLCA2MzE2MDMyLCAwLCA2MjkxNDU2LCAwLCA2MzE2MDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDYzNDg4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0OTMxNTg0LCA0OTM5Nzc2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0OTE1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDQ5MjMzOTIsIDU1Nzg3NTIsIDU2MTk3MTIsIDU2Njg4NjQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU3OTE3NDQsIDU4MTYzMjAsIDQzNTgxNDQsIDU4NTcyODAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYxMTk0MjQsIDQzNTgxNDQsIDYxNjg1NzYsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYyNDIzMDQsIDQ5NTYxNjAsIDQ5NjQzNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMTgzMDQsIDAsIDAsIDAsIDAsIDU3OTk5MzYsIDAsIDU4ODE4NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNzMzNzYsIDYzODk3NjAsIDAsIDAsIDAsIDAsIDAsIDE3NTgsIDAsIDAsIDE3NjEsIDAsIDE3NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ4ODA2NCwgNjEwMzA0MCwgMCwgMCwgMCwgMCwgMCwgNjE4NDk2MCwgNTMxNjYwOCwgMCwgMCwgNTY0NDI4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjIxNzcyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM4NCwgMCwgMCwgMCwgMzM4OCwgMCwgMCwgMCwgMCwgMCwgMzM5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI3NTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzOTAzMzYsIDUzMDg0MTYsIDU0ODg2NDAsIDAsIDAsIDUwNzA4NDgsIDU0MzEyOTYsIDAsIDY0MzA3MjAsIDAsIDAsIDUxNjA5NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3ODQxMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNTkyOTYsIDQxNywgNDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjgzMjY0LCA2MzMyNDE2LCAwLCAwLCAwLCA1ODgxODU2LCAwLCA1MzgyMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA2MjY2ODgwLCA0Nzg0MTI4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0OTE1MjAwLCA0MzU4MTQ0LCA0OTU2MTYwLCA0OTcyNTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MDcwODQ4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MjE4MzA0LCA0MzU4MTQ0LCA1MjY3NDU2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MzA4NDE2LCA1MzE2NjA4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NDMxMjk2LCA0MzU4MTQ0LCA1NDg4NjQwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1Nzk5OTM2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1ODgxODU2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MTAzMDQwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MTg0OTYwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MjgzMjY0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MzMyNDE2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2Mzg5NzYwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA2NDMwNzIwLCA2NDM4OTEyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MjY2ODgwLCA2NDg4MDY0LCAwLCAwLCAwLCA2MjY2ODgwLCA2NDg4MDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTQ5LCAwLCAwLCAwLCAwLCAzMTU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA2NDMwNzIwLCA2NDM4OTEyLCAwLCAwLCAwLCAwLCAwLCAwLCA0Nzg0MTI4LCAwLCAwLCAwLCA0ODQ5NjY0LCAwLCAwLCAwLCAwLCAwLCA0OTE1MjAwLCAwLCA0OTU2MTYwLCA0OTcyNTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MDcwODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjE4MzA0LCAwLCAwLCA2MTAzMDQwLCAwLCAwLCAwLCA2MTg0OTYwLCAwLCAwLCAwLCA2MjgzMjY0LCAwLCAwLCA2MzMyNDE2LCAwLCAwLCAwLCA2Mzg5NzYwLCAwLCAwLCA2NDMwNzIwLCA2NDM4OTEyLCA0Nzg0MTI4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0ODQ5NjY0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0OTE1MjAwLCAwLCA1NjYwNjcyLCA1NzE4MDE2LCAwLCA1ODY1NDcyLCAwLCAwLCA2MDM3NTA0LCAwLCAwLCA2MDc4NDY0LCAwLCAwLCA2MzQwNjA4LCAwLCA2NDU1Mjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjUsIDMyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ3MjI1NiwgMCwgMCwgMCwgNjIwOTUzNiwgMCwgMCwgMCwgMCwgNjE3Njc2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg5ODgxNiwgMCwgNTcwOTgyNCwgMCwgMCwgMCwgMCwgMCwgMTc5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI4Mzg0MCwgMCwgMCwgMCwgMCwgNTI1MTA3MiwgMCwgNjQxNDMzNiwgNTgzMjcwNCwgMCwgNTk1NTU4NCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDg0MTQ3MiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDg5ODgxNiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY4NjQwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODU3ODU2LCA0ODc0MjQwLCAwLCAwLCA0OTIzMzkyLCA0MzU4MTQ0LCA1MTExODA4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MjgzODQwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NDcyMjU2LCA1NTIxNDA4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1NTk1MTM2LCA1NzA5ODI0LCA1NzE4MDE2LCA0MzU4MTQ0LCA1ODI0NTEyLCA1ODY1NDcyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA1OTIyODE2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MDIxMTIwLCA0MzU4MTQ0LCA2MDM3NTA0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MDc4NDY0LCA2MTExMjMyLCA0MzU4MTQ0LCA2MTc2NzY4LCA2MjA5NTM2LCA0MzU4MTQ0LCA2MjM0MTEyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA2MDc4NDY0LCA2MTExMjMyLCA0MzU4MTQ0LCA2MTc2NzY4LCA2MjA5NTM2LCA2MjM0MTEyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCAwLCAwLCAwLCA0ODQxNDcyLCAwLCAwLCAwLCA0ODk4ODE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OCwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDAsIDAsIDAsIDYwMzc1MDQsIDAsIDAsIDYwNzg0NjQsIDYxMTEyMzIsIDAsIDYxNzY3NjgsIDYyMDk1MzYsIDAsIDYyMzQxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NDE0NzIsIDAsIDAsIDAsIDQ4OTg4MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NzMsIDAsIDM2MjcsIDM3NzUsIDAsIDAsIDM3NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA0MDI0LCA1MjEsIDQwMjYsIDUyMSwgNTIxLCA0MDI4LCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCA2MDIxMTIwLCAwLCA2MDM3NTA0LCAwLCAwLCA2MDc4NDY0LCA2MTExMjMyLCAwLCA2MTc2NzY4LCA2MjA5NTM2LCAwLCA2MjM0MTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0ODQxNDcyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0ODk4ODE2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0OTk3MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDQ5MjMzOTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxMTE4MDgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUyODM4NDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU0NzIyNTYsIDU1MjE0MDgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU1OTUxMzYsIDU3MDk4MjQsIDU3MTgwMTYsIDQzNTgxNDQsIDU4MjQ1MTIsIDU4NjU0NzIsIDQzNTgxNDQsIDQzNTgxNDQsIDU5MjI4MTYsIDAsIDUwMjk4ODgsIDUwMzgwODAsIDAsIDAsIDUxMDM2MTYsIDUyMDE5MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MDYxNDQsIDUzNTc1NjgsIDAsIDU1MDUwMjQsIDAsIDAsIDAsIDAsIDAsIDU4OTAwNDgsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4NzMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODg0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjE2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1NjksIDU3ODg2LCA2MDU3MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4NDIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MDY1NywgNTg3NTQsIDk3NywgNTc5MDksIDU3OTA5LCA1ODg1NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTYyLCA1OTk2MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NzAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCA2MTYwMzg0LCAwLCA1MDk1NDI0LCA1MzQ5Mzc2LCAwLCA1Mjc1NjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTQ3MzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ3MTY4MCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDk5NzEyMCwgNDM1ODE0NCwgNDM1ODE0NCwgNTAzODA4MCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTA5NTQyNCwgNTEwMzYxNiwgNDM1ODE0NCwgNDM1ODE0NCwgNTIwMTkyMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTg5MDA0OCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjAyOTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjE2MDM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTg5MDA0OCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjAyOTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjE2MDM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjQwNjE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk5NzEyMCwgMCwgMCwgNTAzODA4MCwgMCwgMCwgMCwgMCwgNjQwNjE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk5NzEyMCwgMCwgMCwgNTAzODA4MCwgMCwgMCwgMCwgNTA5NTQyNCwgNTEwMzYxNiwgMCwgMCwgNTIwMTkyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg5MDA0OCwgMCwgMCwgMCwgNjAyOTMxMiwgMCwgMCwgMCwgMCwgNjE2MDM4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQwNjE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDk5NzEyMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjQwNjE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMCwgMCwgNDg5MDYyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg5ODI0MCwgNTk2Mzc3NiwgMCwgMCwgNjE5MzE1MiwgMCwgMCwgNTQwNjcyMCwgNjM5Nzk1MiwgNTMwMDIyNCwgNTIzNDY4OCwgNTQyMzEwNCwgMCwgMCwgMCwgMCwgNTk4ODM1MiwgMCwgMCwgNjEzNTgwOCwgNjMwNzg0MCwgMCwgNTk5NjU0NCwgNDgwMDUxMiwgMCwgNjM1Njk5MiwgMCwgMCwgMCwgNTQ5NjgzMiwgMCwgMCwgMCwgMCwgMCwgNTYxMTUyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4NywgMCwgMCwgMTE5MCwgMTE5MSwgMCwgMCwgMCwgMCwgMTE5NSwgMCwgMCwgMCwgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDEsIDQ5NDc5NjgsIDUwMjE2OTYsIDU1Mjk2MDAsIDAsIDAsIDUxNjkxNTIsIDAsIDAsIDAsIDQ4MDA1MTIsIDQ4MDg3MDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQ4OTA2MjQsIDQzNTgxNDQsIDQ5NDc5NjgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUwNDYyNzIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxODU1MzYsIDQzNTgxNDQsIDUyMzQ2ODgsIDUzMDAyMjQsIDQzNTgxNDQsIDQzNTgxNDQsIDU0MDY3MjAsIDU1Mjk2MDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU4OTgyNDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzMDc4NDAsIDQzNTgxNDQsIDQzNTgxNDQsIDYzNTY5OTIsIDYzODE1NjgsIDYzOTc5NTIsIDQ4MDA1MTIsIDQ4MDg3MDQsIDAsIDAsIDQ4OTA2MjQsIDAsIDQ5NDc5NjgsIDAsIDAsIDAsIDUwNDYyNzIsIDAsIDAsIDAsIDAsIDUxODU1MzYsIDAsIDUyMzQ2ODgsIDUzMDAyMjQsIDAsIDAsIDU0MDY3MjAsIDU1Mjk2MDAsIDAsIDAsIDAsIDAsIDU4OTgyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzMDc4NDAsIDAsIDAsIDYzNTY5OTIsIDYzODE1NjgsIDYzOTc5NTIsIDQ4MDA1MTIsIDQ4MDg3MDQsIDAsIDAsIDQ4OTA2MjQsIDAsIDAsIDYzNTY5OTIsIDYzODE1NjgsIDYzOTc5NTIsIDQ4MDA1MTIsIDQ4MDg3MDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQ4OTA2MjQsIDQzNTgxNDQsIDQ5NDc5NjgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUwNDYyNzIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxODU1MzYsIDQzNTgxNDQsIDUyMzQ2ODgsIDUzMDAyMjQsIDQzNTgxNDQsIDQzNTgxNDQsIDU0MDY3MjAsIDU1Mjk2MDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQ5MDcwMDgsIDAsIDUwNzkwNDAsIDYwOTQ4NDgsIDAsIDAsIDAsIDQzNTgxNDQsIDQ5MDcwMDgsIDQzNTgxNDQsIDUwNzkwNDAsIDQzNTgxNDQsIDUyMjY0OTYsIDQzNTgxNDQsIDU3NDI1OTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYwOTQ4NDgsIDAsIDQ5MDcwMDgsIDAsIDUwNzkwNDAsIDAsIDUyMjY0OTYsIDU4OTgyNDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzMDc4NDAsIDQzNTgxNDQsIDQzNTgxNDQsIDYzNTY5OTIsIDYzODE1NjgsIDYzOTc5NTIsIDUwMjE2OTYsIDQzNTgxNDQsIDQzNTgxNDQsIDUwMjE2OTYsIDAsIDAsIDAsIDQ5ODA3MzYsIDAsIDAsIDAsIDAsIDAsIDUzNzM5NTIsIDU3MzQ0MDAsIDYwNDU2OTYsIDAsIDAsIDAsIDAsIDAsIDIzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNTIxOTIsIDAsIDAsIDAsIDYzMTYwMzIsIDAsIDAsIDAsIDAsIDU4MTYzMjAsIDYyOTE0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNTg2ODgsIDY0NDcxMDQsIDAsIDAsIDYxMjc2MTYsIDAsIDYzNDg4MDAsIDU5MDY0MzIsIDAsIDU1Mzc3OTIsIDM2MjcsIDAsIDAsIDAsIDAsIDU5MzkyMDAsIDAsIDAsIDU2NzcwNTYsIDYzNjUxODQsIDQ4NjYwNDgsIDAsIDYwNzAyNzIsIDU1NDU5ODQsIDUxNTI3NjgsIDAsIDAsIDYxNDQwMDAsIDQzNTgxNDQsIDQ4NjYwNDgsIDQ4ODI0MzIsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDAsIDQ4MjUwODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNzczNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzMjQ4MDAsIDUzNzM5NTIsIDU1Mzc3OTIsIDU1NDU5ODQsIDU1ODY5NDQsIDU3MzQ0MDAsIDU5NzE5NjgsIDAsIDYwNDU2OTYsIDAsIDYwNzAyNzIsIDAsIDAsIDAsIDAsIDYzNDg4MDAsIDAsIDQ4NjYwNDgsIDQ4ODI0MzIsIDAsIDQ5ODA3MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgODMxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgODc3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg5NSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTgyNDksIDAsIDUzMjQ4MDAsIDUzNzM5NTIsIDU1Mzc3OTIsIDU1NDU5ODQsIDU1ODY5NDQsIDU3MzQ0MDAsIDU5NzE5NjgsIDAsIDYwNDU2OTYsIDAsIDYwNzAyNzIsIDAsIDAsIDAsIDAsIDYzNDg4MDAsIDQzNTgxNDQsIDQ4NjYwNDgsIDQ4ODI0MzIsIDQzNTgxNDQsIDQ5ODA3MzYsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUzMjQ4MDAsIDUzNzM5NTIsIDU1Mzc3OTIsIDU1NDU5ODQsIDU3MzQ0MDAsIDU5NzE5NjgsIDQzNTgxNDQsIDYwNDU2OTYsIDQzNTgxNDQsIDYwNzAyNzIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzNDg4MDAsIDAsIDQ4NjYwNDgsIDQ4ODI0MzIsIDAsIDQ5ODA3MzYsIDAsIDAsIDAsIDAsIDU1Mzc3OTIsIDU1NDU5ODQsIDU1ODY5NDQsIDU3MzQ0MDAsIDU5NzE5NjgsIDQzNTgxNDQsIDYwNDU2OTYsIDQzNTgxNDQsIDYwNzAyNzIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzNDg4MDAsIDQzNTgxNDQsIDYxNDQwMDAsIDAsIDYxNDQwMDAsIDAsIDQ5ODg5MjgsIDUwMDUzMTIsIDAsIDAsIDAsIDAsIDU3NzUzNjAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ0MSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDU0LCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDYwMjQyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjUwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI5MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyOTYsIDYwMjk3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTE3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTY5MzQ0MCwgMCwgNjQ5NjI1NiwgNTE0NDU3NiwgNTEzNjM4NCwgMCwgNTkxNDYyNCwgNDM1ODE0NCwgNDM1ODE0NCwgNTAwNTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTEyMDAwMCwgNTEzNjM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjMyNDIyNCwgMCwgMCwgNTAwNTMxMiwgMCwgMCwgMCwgNTEyMDAwMCwgNTEzNjM4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjMyNDIyNCwgMCwgMCwgNTAwNTMxMiwgMCwgMCwgMCwgNTEyMDAwMCwgNTEzNjM4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjMyNDIyNCwgNDM1ODE0NCwgMCwgMCwgOTAwLCA5MDAsIDkwMCwgNDgyNTk4OCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDUxNzgyNDQsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA1MjE5MjA0LCA5MDAsIDUyNjgzNTYsIDkwMCwgOTAwLCA1MzA5MzE2LCA1MzE3NTA4LCA5MDAsIDkwMCwgOTAwLCA1NDMyMTk2LCA5MDAsIDU0ODk1NDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDU4MDA4MzYsIDkwMCwgOTAwLCA1ODgyNzU2LCA5MDAsIDQzNTgxNDQsIDUwMDUzMTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxMjAwMDAsIDUxMzYzODQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzMjQyMjQsIDU5MTQ2MjQsIDU5MTQ2MjQsIDAsIDAsIDAsIDAsIDAsIDU1MTMyMTYsIDU3ODM1NTIsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NzIsIDAsIDE3NzQsIDAsIDAsIDAsIDE3NzgsIDAsIDAsIDAsIDE3ODIsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDQ5MjMzOTIsIDAsIDUwMTM1MDQsIDAsIDAsIDYwNTM4ODgsIDAsIDAsIDAsIDAsIDYwMTI5MjgsIDQzNTgxNDQsIDQzNTgxNDQsIDUwMTM1MDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYwNTM4ODgsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDUwMTM1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDY4NSwgMCwgMCwgMCwgMCwgMCwgMCwgNjkyLCAzNjcsIDM2NywgMzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNTM4ODgsIDAsIDAsIDAsIDAsIDAsIDUwMTM1MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNTM4ODgsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDUwMTM1MDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU3OTk5MzYsIDQzNTgxNDQsIDQzNTgxNDQsIDU4ODE4NTYsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYxMDMwNDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYxODQ5NjAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYyODMyNjQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzMzI0MTYsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYwNTM4ODgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxOTM3MjgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNTkyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDkwMSwgMCwgMCwgMCwgMCwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1OTI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQxNDkxMiwgMCwgNTQ0NzY4MCwgMCwgNTQ2NDA2NCwgMCwgNTQ4MDQ0OCwgNTU2MjM2OCwgMCwgMCwgMCwgNTYzNjA5NiwgMCwgNTY4NTI0OCwgMCwgMCwgNTc1MDc4NCwgMCwgMCwgMCwgMCwgMCwgNTg3MzY2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5MzcyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5MzcyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTE5MzcyOCwgNDM1ODE0NCwgMCwgMTk1OSwgMCwgMCwgMCwgNDgyNTA4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE3NzM0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNzE1LCAwLCA3MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTAsIDEyNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAwLCAyOTUsIDAsIDAsIDU3NDI1OTIsIDAsIDAsIDAsIDYwOTQ4NDgsIDAsIDAsIDQ5MDcwMDgsIDAsIDUwNzkwNDAsIDAsIDUyMjY0OTYsIDAsIDU3NDI1OTIsIDAsIDAsIDAsIDYwOTQ4NDgsIDAsIDQzNTgxNDQsIDQ5MDcwMDgsIDQzNTgxNDQsIDUwNzkwNDAsIDQzNTgxNDQsIDUyMjY0OTYsIDQzNTgxNDQsIDU3NDI1OTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYwOTQ4NDgsIDQzNTgxNDQsIDUwNjI2NTYsIDAsIDAsIDAsIDQzNTgxNDQsIDUwNjI2NTYsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDUwNjI2NTYsIDAsIDAsIDAsIDAsIDAsIDYyMjU5MjAsIDAsIDUwNjI2NTYsIDAsIDAsIDAsIDAsIDAsIDYyMjU5MjAsIDQzNTgxNDQsIDUwNjI2NTYsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDkwMCwgMCwgMCwgMCwgMCwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1OTI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyMzk2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMTk5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM5MCwgNTIxLCA1MjEsIDEzOTQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxNDAxLCA1MjEsIDUyMSwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjIyNTkyMCwgMCwgMCwgMCwgNDgxNjg5NiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjA4NjY1NiwgNDgxNjg5NiwgMCwgMCwgMCwgMCwgNjA4NjY1NiwgNDgxNjg5NiwgMCwgMCwgMCwgMCwgNjA4NjY1NiwgNDgxNjg5NiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjA4NjY1NiwgNTA4NzIzMiwgMCwgNTkzMTAwOCwgNDM1ODE0NCwgNTMzMjk5MiwgNTk4MDE2MCwgNDM1ODE0NCwgMCwgNTMzMjk5MiwgNTk4MDE2MCwgMCwgMCwgNTMzMjk5MiwgNTk4MDE2MCwgMCwgNDM1ODE0NCwgNTMzMjk5MiwgNTk4MDE2MCwgNDM1ODE0NCwgNTQzOTQ4OCwgNTEyODE5MiwgNDM1ODE0NCwgNTEyODE5MiwgMCwgNTEyODE5MiwgMCwgNTEyODE5MiwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMCwgNDM1ODE0NCwgNjAwNDczNiwgNjAwNDczNiwgNjAwNDczNiwgNjAwNDczNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MTYsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxNjQ1LCAyMjE2NDUsIDIyMTY0NSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCAyMjE2NDUsIDQ2MSwgMjIxNjQ1LCAyMjE2NDUsIDIyMTY0NSwgNDYxLCAyMjE2NDUsIDIyMTY0NSwgMjIxNjQ1LCAyMjE2NDUsIDIyMTY0NSwgMjIxNjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjcsIDMyOCwgMzI5LCAzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTY0NSwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI2ODAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDE0LCAwLCAwLCAwLCAwLCAzNDE4LCAwLCAwLCAwLCAwLCAzNDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAyNDU3OCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3NTY4LCAzMDEsIDAsIDMwNSwgMjM3NTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNSwgMjM3OTgyLCAxNDc0NTYsIDAsIDAsIDAsIDMwNSwgMCwgMCwgMCwgMCwgMCwgMjMzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQyMCwgMzQyMSwgMCwgMCwgMCwgMCwgMzQyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDAsIDUxNjA5NiwgMCwgMCwgMCwgMCwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAwLCAzMDUsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4NzAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDUzLCA1MjEsIDUyMSwgNTIxLCAyNDU2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ2MSwgNTIxLCAzMDUsIDEsIDI0NTc4LCAzLCAwLCAwLCA0MzY2MzM2LCAwLCAwLCAwLCAwLCAwLCA2NTUzNiwgMzAyLCAwLCA0MjY4MDMyLCA5ODMwNCwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MjEwOTc4LCAyNDU3OCwgMywgMCwgMCwgMjk2LCAwLCAwLCAwLCAwLCAyOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NTc2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAwLCAyNDU3NjAsIDAsIDI0NTc2MCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjYsIDQwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjEwOTc4LCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTI5OTIsIDAsIDIxMjk5MiwgMjEyOTkyLCAyMTI5OTIsIDIxMjk5MiwgMjEyOTkyLCAyMTI5OTIsIDIxMjk5MiwgMjEyOTkyLCAyMTI5OTIsIDIxMjk5MiwgMjEyOTkyLCAyMTI5OTIsIDIxMjk5MiwgMjEyOTkyLCAyMTI5OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzAsIDAsIDAsIDIwNTksIDAsIDAsIDAsIDQ4MjUwODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNzczNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMSwgMzEwLCAwLCAwLCAwLCAzMTAsIDMxMCwgMzExLCAxLCAyNDU3OCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzMsIDY3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyMTQ0LCAyNjIxNDQsIDI2MjE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzMDEsIDAsIDAsIDAsIDI2MjE0NCwgMCwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAyNjI3MzEsIDI2MjczMSwgMjYyNzMxLCAwLCAyNjI3MzEsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDM5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNjcwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTkxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NTMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI5OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMjYyNzMxLCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDU3NjAsIDI0NTc2MCwgMjQ1NzYwLCAyNDU3NjAsIDI0NTc2MCwgMjQ1NzYwLCAyNDU3NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3ODUyOCwgMjc4NTI4LCAwLCAwLCAxMzEwNzIsIDI3ODUyOCwgMCwgMCwgMCwgMjc4NTI4LCAwLCAwLCAwLCAwLCAyNzg1MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzLCAzODQsIDAsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDI3ODUyOCwgMjc4NTI4LCAyNzg1MjgsIDAsIDI3ODUyOCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDM4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NDIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ0OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTkwMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTIxLCA1MjEsIDUyMSwgMjc4NTI4LCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjE0NCwgMjYyMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIxNDQsIDI2MjE0NCwgMCwgMjYyMTQ0LCAwLCAwLCAwLCAxMzkyNjQsIDE0NzQ1NiwgMjYyMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzAyLCAwLCAwLCAwLCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCA2MzEsIDAsIDQyNjgwMzIsIDMwNSwgNjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzI0ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI3NTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUwNiwgMCwgMCwgMCwgMCwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxMCwgMjgxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NjcyMCwgMzAyLCAwLCAzMDYsIDI4NjcyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzMsIDAsIDAsIDAsIDAsIDczMywgMCwgNzM5LCAwLCAwLCAwLCAwLCAwLCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2LCAxMzkyNjQsIDI4NzEzOCwgMCwgMCwgMCwgMzA2LCAwLCAwLCAwLCAwLCAwLCAyMzg2LCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDAyLCA1MjEsIDI0MDQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTgzMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODM2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI3NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMCwgMzA2LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCAzNDM3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ0OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ2NCwgNTIxLCAzNDY2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDYxMjUwLCA1NzkwOSwgNTc5MDksIDYxMjUyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTk5NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDMwNiwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgNjYxNjgsIDAsIDQyNjgwMzIsIDMwNSwgOTg5MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MDY3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQwNjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI4ODAsIDAsIDQyNjgwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNTIsIDAsIDAsIDEsIDI0NTc4LCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDMsIDMwMywgMzAzLCAwLCAwLCAzMDMsIDMwMywgMjk1MjE1LCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAyOTUyMTUsIDM3MywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDM2OCwgMzAzLCAwLCAyOTUyMTUsIDMwMywgMzAzLCAzMDMsIDMwMywgMjk1Mjg1LCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAyOTUyODUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDMwMywgMzAzLCAzMDMsIDI5NTI4NSwgMTM5MjY0LCAxNDc0NTYsIDI5NTIxNSwgMjk1MjE1LCAzMDMsIDMwMywgMjk1MjE1LCAzMDMsIDMwMywgMTMxMDcyLCAzMDMsIDMwMywgMzAzLCAzMDMsIDI5NTIxNSwgMzAzLCAzMDMsIDMwMywgMzAzLCAyOTUyMTUsIDMwMywgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMzAzLCAzMDMsIDMwMywgMjk1MjE1LCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDI5NTIxNSwgMzAzLCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDMwMywgMCwgMzAzLCAwLCAzMDMsIDMwMywgMzAzLCAyOTUyMTUsIDMwMywgMzAzLCAzMDMsIDI5NTIxNSwgMjk1MjE1LCAzMDMsIDI5NTIxNSwgMzAzLCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMjk1Mjg1LCAyOTUyODUsIDI5NTI4NSwgMjk1Mjg1LCAyOTUyODUsIDI5NTI4NSwgMjk1Mjg1LCAyOTUyODUsIDI5NTI4NSwgMjk1Mjg1LCAyOTUyODUsIDI5NTI4NSwgMjk1Mjg1LCAyOTUyODUsIDI5NTI4NSwgMjk1Mjg1LCAyOTUyODUsIDI5NTI4NSwgMjk1Mjg1LCAyOTUyMTUsIDI5NTIxNSwgMjk1MjE1LCAyOTUyMTUsIDI5NTIxNSwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1OTA0NSwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOTQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUyMjU2LCAwLCAzNTIyNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOTQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE5NDg4LCAzMTk0ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NTEsIDE3NTIsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE5NDg4LCAwLCAwLCAwLCAzMTk0ODgsIDMxOTQ4OCwgMzE5NDg4LCAzMTk0ODgsIDMxOTQ4OCwgMzE5NDg4LCAzMTk0ODgsIDMxOTQ4OCwgMzE5NDg4LCAzMTk0ODgsIDMxOTQ4OCwgMzE5NDg4LCAzMTk0ODgsIDMxOTQ4OCwgMzE5NDg4LCAwLCAwLCAwLCAwLCAzMTk0ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOTQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE5NDg4LCAwLCAwLCAwLCAwLCAzMTk0ODgsIDAsIDMxOTQ4OCwgMzE5NDg4LCAzMTk0ODgsIDAsIDI0NTc4LCAzLCAwLCAwLCA0MzY2MzM2LCAyNTM5NTIsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYyNzkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI4NDQxNiwgMCwgMCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNzY4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCAyMzg5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMyMTksIDUyMSwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDU3MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1NzksIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI3NjgwLCAzMjc2ODAsIDMyNzY4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI3NjgwLCAzMjc2ODAsIDMyNzY4MCwgMzI3NjgwLCAzMzU4NzIsIDMyNzY4MCwgMzI3NjgwLCAzMjc2ODAsIDMzNTg3MiwgMzI3NjgwLCAzMjc2ODAsIDMyNzY4MCwgMzI3NjgwLCAzMjc2ODAsIDMyNzY4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk3MTYsIDAsIDAsIDAsIDAsIDAsIDMyNzY4MCwgNDk3MTYsIDMyNzY4MCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYyNzkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTk2NjA4LCAwLCAwLCAwLCAxMDY0OTYsIDAsIDAsIDQyODQ0MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNzUwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MTUyLCA5NzcsIDAsIDAsIDAsIDAsIDAsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0NjM0ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5MzE1ODQsIDQ5Mzk3NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDM0NDA2NCwgMzQ0MDY0LCAzNDQwNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ0MDY0LCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM2NywgMzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTYsIDM1NywgMzU4LCAzNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMjk1LCAwLCAwLCAwLCAwLCAwLCA0Mjc2MjI0LCAxMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMSwgMjQ1NzgsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MjI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDM1MjI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAzNTIyNTYsIDM1MjI1NiwgMCwgMCwgMzUyMjU2LCAwLCAwLCAzNTIyNTYsIDAsIDM1MjI1NiwgMCwgMzUyMjU2LCAzNTIyNTYsIDM1MjI1NiwgMzUyMjU2LCAzNTIyNTYsIDM1MjI1NiwgMzUyMjU2LCAzNTIyNTYsIDM1MjI1NiwgMzUyMjU2LCAzNTIyNTYsIDM1MjI1NiwgMzUyMjU2LCAzNTIyNTYsIDM1MjI1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5NywgMCwgMzY3LCAzNjcsIDAsIDEyMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MjI1NiwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA2LCAwLCAwLCAxLCAyOTEsIDMsIDAsIDAsIDAsIDI5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMzYwNDQ4LCAzNjA0NDgsIDM2MDQ0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYwNDQ4LCAxLCAwLCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCA2MjksIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgNjk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEyLCAwLCAwLCAwLCAwLCAxMjE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mjc2MjI0LCAxMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTg4LCAwLCA1ODc5NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTQwMiwgNTIxLCA1ODc1NCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgyNiwgNTc4ODYsIDU3ODg2LCA1MDY1NywgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk1MDIsIDU3ODg2LCAwLCAyMjgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzksIDAsIDAsIDAsIDIzNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MjgsIDAsIDU3OTA5LCA1OTkyNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MDYsIDU3OTA5LCA1NzkwOSwgNTk5NTIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc4ODYsIDU3OTM2LCA2MDAwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDYwMDM1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTM3LCA1MjEsIDMyMTIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM4NywgNTkzODgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA2MDQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzIwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA3MDIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjksIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNjA4MzAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4NTMsIDU3ODg2LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTE0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA1NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDI3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA2MTA0NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MzQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ5MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNjEwNDgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDU2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAzNzgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE1NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMTU3LCA2MTE1OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTk5NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTA5LCA2MTE3NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMTc2LCA2MTE3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTk0LCA1NzkzNiwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDc4LCA2MTA3OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDgzLCA2MTA4NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA4OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjExOTUsIDYxMTk2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxNzcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxODQsIDUyMSwgMzE4NiwgNTIxLCA1MjEsIDUyMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTI3MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEyNzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMjgwLCA1NzkzNiwgNTIxLCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgMCwgMCwgMCwgMCwgMTc5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQ3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNjEzMDYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MzEyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTMyMiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzMzgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgMzc1OSwgNTIxLCA1Nzg4NiwgNjExMDUsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNjE0MzksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTQ1MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxNDY1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQxMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA0MjEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA0MjYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDAsIDAsIDAsIDAsIDQwNzcsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTIxLCA1Nzg4NiwgNTc5MDksIDU3OTM2LCA1MjEsIDU3ODg2LCA1NzkwOSwgNTc5MzYsIDUyMSwgNTc4ODYsIDU3OTA5LCA1NzkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzY4MzIsIDM3NjgzMiwgMzc2ODMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY4LCAxMjY5LCAwLCAwLCAwLCAwLCAwLCA0MTksIDQxOSwgNDE5LCA0MTksIDU5MCwgNTkwLCA0MTksIDQxOSwgNDE5LCA0MTksIDQxOSwgNDE5LCA0MTksIDQxOSwgNDE5LCA0MTksIDQxOSwgNDE5LCA0MTksIDQxOSwgNDE5LCA0MTksIDQxOSwgNDE5LCA0MTksIDAsIDQxOSwgMCwgMCwgMCwgMCwgMCwgNTIxLCAxODY2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODcyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1NjgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTc1LCA1Nzg4NiwgNjA1NzcsIDU3ODg2LCA1Nzg4NiwgNDE5LCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM2NywgMzY3LCAwLCA2OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MTcsIDAsIDAsIDAsIDQyNjg3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzODAsIDAsIDAsIDEsIDI0NTc4LCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMxLCAwLCA2MzcsIDczMSwgMCwgNzM1LCA3MzYsIDYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA0MDI1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDM5MzY3OCwgMCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDQyNTk4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgMzE3NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxODEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgNDI2ODAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc1MTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzQsIDAsIDAsIDM3NSwgMCwgMCwgMCwgMCwgMCwgMzI3LCAzNzUsIDMzMCwgMzc0LCAwLCAwLCAwLCAwLCAwLCAxLCAyNDU3OCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDU3ODg3LCA1MjEsIDU3ODg3LCA1MjEsIDUyMSwgNTc4ODcsIDUyMSwgNTIxLCA1NzkxMCwgNTc4ODcsIDUyMSwgNTIxLCA1Nzg4NywgNTc4ODcsIDU3ODg3LCA1NzkxMCwgMCwgMCwgMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCA0MjAsIDQyMCwgNDIwLCAwLCA0MjAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgMzQzNSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTE2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA0MjAsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMzA0LCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDEsIDQyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc5MSwgMCwgMCwgMTIzOSwgMCwgMCwgMCwgNzQxLCAxMjQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCAxMzIyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NjgsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNzYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTIxLCA1MjEsIDUyMSwgMjQ2OCwgMjg5NSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMzA1LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDI5NjMsIDEsIDI0NTc4LCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTc3OTIsIDMwOCwgMzA5LCAwLCAwLCAwLCAwLCAwLCAwLCAxODE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODIxLCAwLCAxODIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDA2NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjcsIDAsIDAsIDAsIDAsIDMxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA5LCAwLCA0MTc3OTIsIDQxNzc5MiwgMCwgMCwgNDE3NzkyLCA0MTc3OTIsIDQxNzc5MiwgNDE3NzkyLCA0MTc3OTIsIDQxNzc5MiwgNDE3NzkyLCA0MTc3OTIsIDQxNzc5MiwgNDE3NzkyLCA0MTc3OTIsIDQxNzc5MiwgNDE3NzkyLCA0MTgxMDEsIDQxNzc5MiwgNDE3NzkyLCA0MTgxMDAsIDQxODEwMSwgNDE3NzkyLCA0MTc3OTIsIDQxODEwMCwgNDE3NzkyLCA0MTgxMDAsIDQxNzc5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE3NzkyLCAwLCAwLCAwLCA0MTc3OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwOSwgMzA5LCAzMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNzc5MiwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjY5NjQsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAzMTEyOTYsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCA0MzQxNzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NTksIDAsIDAsIDE4NjAsIDAsIDAsIDkwMCwgOTAwLCA1NDE1ODEyLCA5MDAsIDU0NDg1ODAsIDkwMCwgNTQ2NDk2NCwgOTAwLCA1NDgxMzQ4LCA1NTYzMjY4LCA5MDAsIDkwMCwgOTAwLCA1NjM2OTk2LCA5MDAsIDU2ODYxNDgsIDkwMCwgOTAwLCA1NzUxNjg0LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTg3NDU2NCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjQ2NDM4OCwgMCwgMCwgMCwgMCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDQ5MzI1NjAsIDQ5NDA3NTIsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA0MzU5MDQ0LCA0ODU4NzU2LCA0ODc1MTQwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MjYwMTY0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NDE1ODEyLCA0MzU5MDQ0LCA1NDQ4NTgwLCA0MzU5MDQ0LCA1NDY0OTY0LCA0MzU5MDQ0LCA1NDgxMzQ4LCA1NTYzMjY4LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NjM2OTk2LCA0MzU5MDQ0LCA1Njg2MTQ4LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NzUxNjg0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1ODc0NTY0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2Mjc1OTcyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MzQyMDg0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NjI4ODA0LCA1NjUzMzgwLCA0MzU5MDQ0LCA1NzAyNTMyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA1ODA5MDI4LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0OTA3MDA4LCAwLCA1MDc5MDQwLCA2MDk0ODQ4LCAwLCAwLCAwLCA0MzU4MTQ0LCA0OTA3MDA4LCA0MzU4MTQ0LCA1MDc5MDQwLCA0MzU4MTQ0LCA1MjI2NDk2LCA0MzU4MTQ0LCA1NzQyNTkyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MDk0ODQ4LCA5MDAsIDQ5MDc5MDgsIDkwMCwgNTA3OTk0MCwgOTAwLCA1MjI3Mzk2LCA5MDAsIDUyNDM3ODAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTM0MjA4NCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTYyODgwNCwgNTY1MzM4MCwgOTAwLCA1NzAyNTMyLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA1MjExMDEyLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDUyOTI5MzIsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTM2NjY2MCwgOTAwLCA5MDAsIDkwMCwgNTQ1Njc3MiwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDU1NTUwNzYsIDU1NzE0NjAsIDU1Nzk2NTIsIDU2MjA2MTIsIDU2Njk3NjQsIDkwMCwgMCwgMCwgOTc2LCA5NzYsIDk3NiwgNDgyNjA2NCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDUxNzgzMjAsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1MTEyNzg0LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNTI4NDgxNiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1NDczMjMyLCA1NTIyMzg0LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDU1OTYxMTIsIDU3MTA4MDAsIDU3MTg5OTIsIDk3NiwgNTgyNTQ4OCwgNTg2NjQ0OCwgOTc2LCA5NzYsIDU5MjM3OTIsIDk3NiwgNTI0Mzg1NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1MzQyMTYwLCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1NjI4ODgwLCA1NjUzNDU2LCA5NzYsIDU3MDI2MDgsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNTI2MDI0MCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDU0MTU4ODgsIDk3NiwgNTQ0ODY1NiwgOTc2LCA1NDY1MDQwLCA5NzYsIDU0ODE0MjQsIDU1NjMzNDQsIDk3NiwgOTc2LCA5NzYsIDU2MzcwNzIsIDk3NiwgNTY4NjIyNCwgOTc2LCA5NzYsIDU3NTE3NjAsIDk3NiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjQ2MzQ4OCwgMCwgMCwgMCwgMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDQ5MzI0ODQsIDQ5NDA2NzYsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDUwNTUzNjQsIDkwMCwgOTAwLCA1MTEyNzA4LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTI4NDc0MCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA1NDczMTU2LCA1NTIyMzA4LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDU1OTYwMzYsIDU3MTA3MjQsIDU3MTg5MTYsIDkwMCwgNTgyNTQxMiwgNTg2NjM3MiwgOTAwLCA5MDAsIDU5MjM3MTYsIDkwMCwgOTAwLCA2MDIyMDIwLCA5MDAsIDkwMCwgOTAwLCA1NzkyNjQ0LCA1ODE3MjIwLCA5MDAsIDU4NTgxODAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjEyMDMyNCwgOTAwLCA2MTY5NDc2LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjI0MzIwNCwgOTAwLCA2MjkyMzU2LCA5MDAsIDYzMTY5MzIsIDk3NiwgNTA1NTQ0MCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDUyMTEwODgsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNTI5MzAwOCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1MzY2NzM2LCA5NzYsIDk3NiwgOTc2LCA1NDU2ODQ4LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNTU1NTE1MiwgNTU3MTUzNiwgNTU3OTcyOCwgNTYyMDY4OCwgNTY2OTg0MCwgOTc2LCA5NzYsIDk3NiwgNTc5MjcyMCwgNTgxNzI5NiwgOTc2LCA1ODU4MjU2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDYxMjA0MDAsIDk3NiwgNjE2OTU1MiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDYyNDMyODAsIDk3NiwgNjI5MjQzMiwgOTc2LCA2MzE3MDA4LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA2NDY0NDY0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0OTMyNDg0LCA0OTQwNjc2LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODU3ODU2LCA0ODc0MjQwLCAwLCAwLCA0OTIzMzkyLCA0MzU5MDQ0LCA1MDU1MzY0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MjExMDEyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MjkyOTMyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MzY2NjYwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NDU2NzcyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NTU1MDc2LCA1NTcxNDYwLCA1NTc5NjUyLCA1NjIwNjEyLCA1NjY5NzY0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1NzkyNjQ0LCA1ODE3MjIwLCA0MzU5MDQ0LCA1ODU4MTgwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MTIwMzI0LCA0MzU5MDQ0LCA2MTY5NDc2LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MjQzMjA0LCA0MzU5MDQ0LCA2MjkyMzU2LCA0MzU5MDQ0LCA2MzE2OTMyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2NDY0Mzg4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkzMTU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNjQzMDcyMCwgNjQzODkxMiwgMCwgMCwgMCwgMCwgMCwgMCwgNDc4NTAyOCwgOTAwLCA5MDAsIDkwMCwgNDg1MDU2NCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDQ5MTYxMDAsIDkwMCwgNDk1NzA2MCwgNDk3MzQ0NCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTA3MTc0OCwgOTAwLCA5MDAsIDUxOTQ2MjgsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNTE5NDcwNCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDUxOTQ2MjgsIDQzNTkwNDQsIDAsIDAsIDQ3ODUxMDQsIDk3NiwgOTc2LCA5NzYsIDQ4NTA2NDAsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA0OTE2MTc2LCA5NzYsIDQ5NTcxMzYsIDQ5NzM1MjAsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDUwNzE4MjQsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNTIxOTI4MCwgOTc2LCA5NzYsIDYzNTc5NjgsIDYzODI1NDQsIDYzOTg5MjgsIDQ4MDE0MTIsIDQ4MDk2MDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQ4OTE1MjQsIDQzNTkwNDQsIDQ5NDg4NjgsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDUwNDcxNzIsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDUxODY0MzYsIDQzNTkwNDQsIDUyMzU1ODgsIDUzMDExMjQsIDQzNTkwNDQsIDQzNTkwNDQsIDU0MDc2MjAsIDU1MzA1MDAsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQ5MjMzOTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDkwMCwgNDkyNDI5MiwgOTAwLCA5MDAsIDkwMCwgOTAwLCA0MzY2MzM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjY4NDMyLCA5NzYsIDk3NiwgNTMwOTM5MiwgNTMxNzU4NCwgOTc2LCA5NzYsIDk3NiwgNTQzMjI3MiwgOTc2LCA1NDg5NjE2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1ODAwOTEyLCA5NzYsIDk3NiwgNTg4MjgzMiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA5NzYsIDYxMDQwMTYsIDk3NiwgOTc2LCA5NzYsIDYxODU5MzYsIDk3NiwgOTc2LCA5NzYsIDYyODQyNDAsIDk3NiwgOTc2LCA2MzMzMzkyLCA5NzYsIDk3NiwgOTc2LCA2MzkwNzM2LCA5NzYsIDk3NiwgNjQzMTY5NiwgNjQzOTg4OCwgNDc4NTAyOCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDg1MDU2NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDkxNjEwMCwgNDM1OTA0NCwgNDk1NzA2MCwgNDk3MzQ0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNTA3MTc0OCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNTIxOTIwNCwgNDM1OTA0NCwgNTI2ODM1NiwgNDM1OTA0NCwgNDM1OTA0NCwgNTMwOTMxNiwgNTMxNzUwOCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNTQzMjE5NiwgNDM1OTA0NCwgNTQ4OTU0MCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjA1NDc4OCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTE5MzcyOCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgOTAwLCA5MDAsIDkwMCwgNTA5NjMyNCwgNTEwNDUxNiwgOTAwLCA5MDAsIDUyMDI4MjAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA1ODkwOTQ4LCA5MDAsIDkwMCwgOTAwLCA2MDMwMjEyLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDYxNjEyODQsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjQwNzA0NCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDQ5OTgwOTYsIDk3NiwgOTc2LCA1MDM5MDU2LCA5NzYsIDk3NiwgOTc2LCA1MDk2NDAwLCA1MTA0NTkyLCA5NzYsIDk3NiwgNTIwMjg5NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1ODkxMDI0LCA5NzYsIDk3NiwgOTc2LCA2MDMwMjg4LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDYxNjEzNjAsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNjQwNzEyMCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDk5ODAyMCwgNDM1OTA0NCwgNDM1ODE0NCwgNjA3ODQ2NCwgNjExMTIzMiwgNDM1ODE0NCwgNjE3Njc2OCwgNjIwOTUzNiwgNjIzNDExMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMCwgOTAwLCA5MDAsIDQ4NDIzNzIsIDkwMCwgOTAwLCA5MDAsIDQ4OTk3MTYsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTc1LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDYzMDA2MjQsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1ODA5MDI4LCA2MDM4NDA0LCA5MDAsIDkwMCwgNjA3OTM2NCwgNjExMjEzMiwgOTAwLCA2MTc3NjY4LCA2MjEwNDM2LCA5MDAsIDYyMzUwMTIsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgMCwgMCwgOTc2LCA5NzYsIDQ4NDI0NDgsIDk3NiwgOTc2LCA5NzYsIDQ4OTk3OTIsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDU4NzQ2NDAsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA2Mjc2MDQ4LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCAwLCA5MDAsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDUxMTI3MDgsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDUyODQ3NDAsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDU0NzMxNTYsIDU1MjIzMDgsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDU1OTYwMzYsIDU3MTA3MjQsIDU3MTg5MTYsIDQzNTkwNDQsIDU4MjU0MTIsIDU4NjYzNzIsIDQzNTkwNDQsIDQzNTkwNDQsIDU5MjM3MTYsIDk3NiwgNjAyMjA5NiwgOTc2LCA2MDM4NDgwLCA5NzYsIDk3NiwgNjA3OTQ0MCwgNjExMjIwOCwgOTc2LCA2MTc3NzQ0LCA2MjEwNTEyLCA5NzYsIDYyMzUwODgsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNDM1OTA0NCwgNDM1OTA0NCwgNDg0MjM3MiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDg5OTcxNiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNTgwMDgzNiwgNDM1OTA0NCwgNDM1OTA0NCwgNTg4Mjc1NiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjEwMzk0MCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjE4NTg2MCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjI4NDE2NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjMzMzMxNiwgNDM1OTA0NCwgNDM1OTA0NCwgNjAyMjAyMCwgNDM1OTA0NCwgNjAzODQwNCwgNDM1OTA0NCwgNDM1OTA0NCwgNjA3OTM2NCwgNjExMjEzMiwgNDM1OTA0NCwgNjE3NzY2OCwgNjIxMDQzNiwgNDM1OTA0NCwgNjIzNTAxMiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgOTAwLCA5MDAsIDkwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDAsIDQxOSwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTg5MDA0OCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjAyOTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjE2MDM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjQwNjE0NCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDQ5OTgwMjAsIDkwMCwgOTAwLCA1MDM4OTgwLCA0MzU5MDQ0LCA1MDM4OTgwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MDk2MzI0LCA1MTA0NTE2LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MjAyODIwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1ODkwOTQ4LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MDMwMjEyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MTYxMjg0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MjI2ODIwLCAwLCAwLCAwLCA0ODE2ODk2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2MDg2NjU2LCA0ODE3Nzk2LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDYwODc1NTYsIDQ4MTc4NzIsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNjA4NzYzMiwgNDgxNzc5NiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjA4NzU1NiwgNTA4NzIzMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTg5ODI0MCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjMwNzg0MCwgNDM1ODE0NCwgNDM1ODE0NCwgNjM1Njk5MiwgNjM4MTU2OCwgNjM5Nzk1MiwgNDgwMTQxMiwgNDgwOTYwNCwgOTAwLCA5MDAsIDQ4OTE1MjQsIDkwMCwgNDk0ODg2OCwgOTAwLCA5MDAsIDkwMCwgNTA0NzE3MiwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDYwNTQ3ODgsIDkwMCwgOTAwLCA5MDAsIDk3NiwgOTc2LCA1MDE0NDgwLCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA2MDU0ODY0LCA5NzYsIDk3NiwgOTc2LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MDE0NDA0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2NDA3MDQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA5MDAsIDkwMCwgOTAwLCA0ODkwNjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODk4MjQwLCA1OTYzNzc2LCAwLCAwLCA2MTkzMTUyLCAwLCAwLCA1NDA2NzIwLCA2Mzk3OTUyLCA1MTg2NDM2LCA5MDAsIDUyMzU1ODgsIDUzMDExMjQsIDkwMCwgOTAwLCA1NDA3NjIwLCA1NTMwNTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDU4OTkxNDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA2MzA4NzQwLCA5MDAsIDkwMCwgNjM1Nzg5MiwgNjM4MjQ2OCwgNjM5ODg1MiwgNDgwMTQ4OCwgNDgwOTY4MCwgOTc2LCA5NzYsIDQ4OTE2MDAsIDk3NiwgNDk0ODk0NCwgOTc2LCA5NzYsIDk3NiwgNTA0NzI0OCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1MTg2NTEyLCA5NzYsIDUyMzU2NjQsIDUzMDEyMDAsIDk3NiwgOTc2LCA1NDA3Njk2LCA1NTMwNTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDU4OTkyMTYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA2MzA4ODE2LCA1ODk5MTQwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MzA4NzQwLCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MzU3ODkyLCA2MzgyNDY4LCA2Mzk4ODUyLCA1MDIxNjk2LCA0MzU4MTQ0LCA0MzU4MTQ0LCA1MDIyNTk2LCA5MDAsIDkwMCwgMCwgNDk4MDczNiwgMCwgMCwgMCwgMCwgMCwgNTM3Mzk1MiwgNTczNDQwMCwgNjA0NTY5NiwgMCwgMCwgMCwgMCwgMCwgMjc3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc4NSwgMCwgMjc4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk4MDczNiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTMyNDgwMCwgNTM3Mzk1MiwgNTUzNzc5MiwgNTU0NTk4NCwgNTczNDQwMCwgNTk3MTk2OCwgNDM1ODE0NCwgNjA0NTY5NiwgNDM1ODE0NCwgNjA3MDI3MiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjM0ODgwMCwgOTAwLCA0ODY2OTQ4LCA0ODgzMzMyLCA5MDAsIDQ5ODE2MzYsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNTMyNTcwMCwgNTM3NDg1MiwgNTUzODY5MiwgNTU0Njg4NCwgNTU4Nzg0NCwgNTczNTMwMCwgNTk3Mjg2OCwgOTAwLCA2MDQ2NTk2LCA5MDAsIDYwNzExNzIsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjM0OTcwMCwgOTc2LCA0ODY3MDI0LCA0ODgzNDA4LCA5NzYsIDQ5ODE3MTIsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA1MzI1Nzc2LCA1Mzc0OTI4LCA1NTM4NzY4LCA1NTQ2OTYwLCA1NTg3OTIwLCA1NzM1Mzc2LCA1OTcyOTQ0LCA5NzYsIDYwNDY2NzIsIDk3NiwgNjA3MTI0OCwgOTc2LCA5NzYsIDk3NiwgOTc2LCA2MzQ5Nzc2LCA0MzU5MDQ0LCA0ODY2OTQ4LCA0ODgzMzMyLCA0MzU5MDQ0LCA0OTgxNjM2LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA1MzI1NzAwLCA1Mzc0ODUyLCA1NTM4NjkyLCA1NTQ2ODg0LCA1NTg3ODQ0LCA1NzM1MzAwLCA1OTcyODY4LCA0MzU5MDQ0LCA2MDQ2NTk2LCA0MzU5MDQ0LCA2MDcxMTcyLCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA0MzU5MDQ0LCA2MzQ5NzAwLCA0MzU4MTQ0LCA2MTQ0MDAwLCA5MDAsIDYxNDQ5MDAsIDAsIDQ5ODg5MjgsIDUwMDUzMTIsIDAsIDAsIDAsIDAsIDU3NzUzNjAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDY1NSwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg0NSwgNTIxLCA1MjEsIDg2MSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ5OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc4ODYsIDU2OTM0NDAsIDAsIDY0OTYyNTYsIDUxNDQ1NzYsIDUxMzYzODQsIDAsIDU5MTQ2MjQsIDQzNTgxNDQsIDQzNTgxNDQsIDUwMDUzMTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxMjAwMDAsIDUxMzYzODQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzMjQyMjQsIDkwMCwgOTAwLCA1MDA2MjEyLCA5MDAsIDkwMCwgOTAwLCA1MTIwOTAwLCA1MTM3Mjg0LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDYzMjUxMjQsIDk3NiwgOTc2LCA1MDA2Mjg4LCA5NzYsIDk3NiwgOTc2LCA1MTIwOTc2LCA1MTM3MzYwLCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDYzMjUyMDAsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDYzOTA2NjAsIDQzNTkwNDQsIDQzNTkwNDQsIDY0MzE2MjAsIDY0Mzk4MTIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYyNjY4ODAsIDY0ODgwNjQsIDkwMCwgOTAwLCA5MDAsIDYyNjc3ODAsIDY0ODg5NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NjcsIDAsIDAsIDAsIDAsIDAsIDE3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNTkwNDQsIDUwMDYyMTIsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDUxMjA5MDAsIDUxMzcyODQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDYzMjUxMjQsIDU5MTQ2MjQsIDU5MTU1MjQsIDAsIDAsIDAsIDAsIDAsIDU1MTMyMTYsIDU3ODM1NTIsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDIyODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA2MzAwNTQ4LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgMCwgNTAxMzUwNCwgMCwgMCwgNjA1Mzg4OCwgMCwgMCwgMCwgMCwgNjAxMjkyOCwgNDM1ODE0NCwgNDM1ODE0NCwgNTAxMzUwNCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjA1Mzg4OCwgNDM1ODE0NCwgNDM1ODE0NCwgOTAwLCA5MDAsIDUwMTQ0MDQsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjI3NTk3MiwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgMCwgMCwgOTc3LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNDg1ODgzMiwgNDg3NTIxNiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgOTc2LCAwLCAwLCAwLCAwLCA5MDAsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDYzMDA1NDgsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTkwNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDkwMCwgNTc0MzQ5MiwgOTAwLCA5MDAsIDkwMCwgNjA5NTc0OCwgOTAwLCA5NzYsIDQ5MDc5ODQsIDk3NiwgNTA4MDAxNiwgOTc2LCA1MjI3NDcyLCA5NzYsIDU3NDM1NjgsIDk3NiwgOTc2LCA5NzYsIDYwOTU4MjQsIDk3NiwgNDM1OTA0NCwgNDkwNzkwOCwgNDM1OTA0NCwgNTA3OTk0MCwgNDM1OTA0NCwgNTIyNzM5NiwgNDM1OTA0NCwgNTc0MzQ5MiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNjA5NTc0OCwgNDM1OTA0NCwgNTA2MjY1NiwgMCwgMCwgMCwgNDM1ODE0NCwgNTA2MjY1NiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgOTAwLCA1MDYzNTU2LCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgNjIyNjgyMCwgOTc2LCA1MDYzNjMyLCA5NzYsIDk3NiwgOTc2LCA5NzYsIDk3NiwgNjIyNjg5NiwgNDM1OTA0NCwgNTA2MzU1NiwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDgyNTk4OCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNTE3ODI0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNDM1OTA0NCwgNTI0Mzc4MCwgNDM1OTA0NCwgMCwgNTkzMTAwOCwgNDM1ODE0NCwgNTMzMjk5MiwgNTk4MDE2MCwgNDM1ODE0NCwgOTAwLCA1MzMzODkyLCA1OTgxMDYwLCA5MDAsIDk3NiwgNTMzMzk2OCwgNTk4MTEzNiwgOTc2LCA0MzU5MDQ0LCA1MzMzODkyLCA1OTgxMDYwLCA0MzU5MDQ0LCA1NDM5NDg4LCA1MTI4MTkyLCA0MzU4MTQ0LCA1MTI5MDkyLCA5MDAsIDUxMjkxNjgsIDk3NiwgNTEyOTA5MiwgNDM1OTA0NCwgNDM1ODE0NCwgOTAwLCA5NzYsIDQzNTkwNDQsIDQzNTgxNDQsIDkwMCwgOTc2LCA0MzU5MDQ0LCA2MDA0NzM2LCA2MDA1NjM2LCA2MDA1NzEyLCA2MDA1NjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzQ1LCAwLCAwLCAwLCAwLCAwLCAyMzUxLCAwLCAwLCAwLCAxLCAyNDU3OCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUwNTYwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTA1NjAsIDAsIDAsIDQ1MDU2MCwgMCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTA1NjAsIDAsIDAsIDAsIDQ1MDU2MCwgMCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgNDUwNTYwLCA0NTA1NjAsIDQ1MDU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcyOSwgMCwgMCwgMCwgMCwgMCwgMCwgNDUwNTYwLCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzU5Mjk2LCAwLCAyMzU5Mjk2LCAwLCAwLCAwLCAyMzU5Mjk2LCAwLCAyMzU5Mjk2LCAyMzU5Mjk2LCAyMzU5Mjk2LCAyMzU5Mjk2LCAyMzU5Mjk2LCAyMzU5Mjk2LCA0MzU4MTQ0LCA2MjkxNDU2LCA0MzU4MTQ0LCA2MzE2MDMyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA2NDYzNDg4LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDIsIDAsIDAsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjMzNSwgMCwgMCwgMCwgMCwgMCwgMjMzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM0MywgMjM0NCwgMCwgMCwgMCwgMCwgMCwgMjM1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg0MCwgNTIxLCA1MjEsIDQzNTgxNDQsIDY0MzA3MjAsIDY0Mzg5MTIsIDkwMSwgMCwgMCwgMCwgOTAxLCAwLCA0Nzg0MTI4LCAwLCAwLCAwLCA0ODQ5NjY0LCAwLCAwLCAwLCAwLCAwLCA0OTE1MjAwLCAwLCA0OTU2MTYwLCA0OTcyNTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MDcwODQ4LCAwLCAwLCAwLCAwLCAwLCA3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNywgMCwgMCwgMzc0LCAzNzQsIDQwNCwgOTc3LCAwLCA0Nzg0MTI4LCAwLCAwLCAwLCA0ODQ5NjY0LCAwLCAwLCAwLCAwLCAwLCA0OTE1MjAwLCAwLCA0OTU2MTYwLCA0OTcyNTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MDcwODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjE4MzA0LCAwLCA1MjY3NDU2LCAwLCAwLCA1MzA4NDE2LCA1MzE2NjA4LCAwLCAwLCAwLCA1NDMxMjk2LCAwLCA1NDg4NjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzk5OTM2LCAwLCAwLCA1ODgxODU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzU4MTQ0LCA2MDc4NDY0LCA2MTExMjMyLCA0MzU4MTQ0LCA2MTc2NzY4LCA2MjA5NTM2LCA2MjM0MTEyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA5MDEsIDAsIDAsIDAsIDQ4NDE0NzIsIDAsIDAsIDAsIDQ4OTg4MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjE4LCA1MjEsIDUyMSwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTczLCA1Nzg4NiwgNjA1NzYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMzc1MDQsIDAsIDAsIDYwNzg0NjQsIDYxMTEyMzIsIDAsIDYxNzY3NjgsIDYyMDk1MzYsIDAsIDYyMzQxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3NywgMCwgMCwgMCwgNDg0MTQ3MiwgMCwgMCwgMCwgNDg5ODgxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjEwMzA0MCwgMCwgMCwgMCwgNjE4NDk2MCwgMCwgMCwgMCwgNjI4MzI2NCwgMCwgMCwgNjMzMjQxNiwgMCwgMCwgMCwgNjM4OTc2MCwgMCwgMCwgNjQzMDcyMCwgNjQzODkxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU5MTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTkyMTUsIDQ1OTIxNSwgNDU5MjE1LCA0NTkyMTUsIDQ1OTIxNSwgNDU5MjE1LCA0NTkyMTUsIDQ1OTIxNSwgNDU5MjE1LCA0NTkyMTUsIDQ1OTIxNSwgNDU5MjE1LCA0NTkyMTUsIDQ1OTIxNSwgNDU5MjE1LCA0NTkyMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MzQwLCA0NTkzNDAsIDQ1OTM0MCwgNDU5MjE1LCA0NTkzNzIsIDQ1OTIxNSwgNDU5MjE1LCA0NTkzNzIsIDEsIDI0NTc4LCAzLCAwLCAwLCA0MzY2MzM2LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgNDI2ODAzMiwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0ODA0NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NDA4OTYsIDU4NDkwODgsIDAsIDEsIDI0NTc4LCAzLCAwLCAwLCAwLCAwLCA1MDc5MDQsIDAsIDAsIDAsIDUwNzkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA3OTA0LCAwLCAwLCAwLCAwLCAwLCAyNzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzg1LCAzMzg2LCAwLCAwLCAwLCAwLCAzMzkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3ODksIDAsIDAsIDAsIDI3OTMsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA3OTA0LCA1MDc5MDQsIDUwNzkwNCwgNTA3OTA0LCA1MDc5MDQsIDUwNzkwNCwgNTA3OTA0LCA1MDc5MDQsIDUwNzkwNCwgNTA3OTA0LCA1MDc5MDQsIDUwNzkwNCwgNTA3OTA0LCA1MDc5MDQsIDUwNzkwNCwgNTA3OTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzgxLCAwLCAwLCAyNzg0LCAwLCAwLCAwLCAwLCAyNzg4LCAwLCAwLCAwLCAwLCAwLCA1MDc5MDQsIDEsIDI0NTc4LCAzLCAwLCAwLCA0MzY2MzM2LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgNDI2ODAzMiwgMzA1LCAzMDYsIDAsIDAsIDQ0MjM2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU4LCAwLCAwLCA2NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDI0NTc4LCAzLCAwLCAwLCAwLCAwLCAwLCA1MTYwOTYsIDAsIDAsIDAsIDUxNjA5NiwgMCwgMCwgMCwgMCwgMCwgMCwgNTE2MDk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjg3LCAwLCAyMjg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNjU2MCwgNTE2NTYwLCA1MTY1NjAsIDUxNjU2MCwgNTE2NTYwLCA1MTY1NjAsIDUxNjU2MCwgNTE2NTYwLCA1MTY1NjAsIDUxNjU2MCwgNTE2NTYwLCA1MTY1NjAsIDUxNjU2MCwgNTE2NTYwLCA1MTY1NjAsIDUxNjU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE2NTYwLCAxLCAyNDU3OCwgMCwgMCwgMCwgNDM2NjMzNiwgMCwgMCwgNTQ4ODY0LCAwLCAwLCAzMDEsIDMwMiwgMCwgNDI2ODAzMiwgMzA1LCAzMDYsIDQwOTYwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwNiwgMCwgMjM0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM0NywgMCwgMCwgMCwgMCwgMCwgMCwgMjM1NCwgNDM1ODE0NCwgNTAwNTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTEyMDAwMCwgNTEzNjM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjMyNDIyNCwgNTkxNDYyNCwgNTkxNDYyNCwgMCwgMCwgMCwgMCwgMCwgNTUxMzIxNiwgNTc4MzU1MiwgMCwgNDA5NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NDcsIDAsIDI3NDksIDAsIDAsIDI3NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTcsIDAsIDAsIDAsIDI3NjAsIDI3NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg1NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg3NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4OTIsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDEsIDI0NTc4LCA0MjI3MzY0LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTgsIDAsIDAsIDAsIDI5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQwNjcyLCAwLCAwLCA1NDA2NzIsIDAsIDAsIDAsIDU0MDY3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMjQ1NzgsIDQyMjczNjQsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI2ODAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk5NzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAyNDU3OCwgMywgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNiwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTg3NTQsIDkwMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA3NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc4ODcsIDU3ODg3LCA1Nzg4NywgNTc4ODcsIDU3ODg3LCA1Nzg4NywgNTc4ODcsIDU3OTEwLCA1NzkxMCwgNTc4ODcsIDU3ODg3LCA1NzkzNywgNTc4ODcsIDU3ODg3LCA1Nzg4NywgNTc4ODcsIDU3ODg3LCA1Nzg4NywgNTc4ODcsIDU3OTM3LCA1NzkzNywgNTc4ODcsIDU3ODg3LCA1Nzg4NywgNTc4ODcsIDU3OTM3LCA1NzkzNywgNTc4ODcsIDUyMSwgNTc4ODcsIDU3ODg3LCA1Nzg4NywgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM5OTc5NywgNDM5OTc5NywgNDM5OTc5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwLCAzNTgsIDAsIDAsIDM5OSwgMCwgMCwgMCwgMCwgMCwgMTM5MjY0LCAxNDc0NTYsIDM5OSwgNDEwLCAwLCA0MjMsIDQxMCwgMSwgMjQ1NzgsIDMsIDE1NTk0MiwgMjk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM2LCAwLCAwLCAwLCAxLCAyNDU3OCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTczNDQwLCAwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCAwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjI4LCAwLCAwLCAwLCAzNjMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjM5LCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MTksIDE4MjAsIDAsIDE4MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MzYsIDAsIDAsIDAsIDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCA1NzM0NDAsIDU3MzQ0MCwgNTczNDQwLCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mzk5Nzk4LCAzMTEyOTYsIDQzOTk3OTgsIDAsIDAsIDAsIDMxMTI5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI3NjIyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczOCwgMCwgNTMwMDIyNCwgNTIzNDY4OCwgNTQyMzEwNCwgMCwgMCwgMCwgMCwgNTk4ODM1MiwgMCwgMCwgNjEzNTgwOCwgNjMwNzg0MCwgMCwgNTk5NjU0NCwgNDgwMDUxMiwgMCwgNjM1Njk5MiwgMzYyNywgMCwgMCwgNTQ5NjgzMiwgMCwgMCwgMCwgMCwgMCwgNTYxMTUyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI2LCAzMjYsIDM3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDYzMCwgMzAyLCAwLCA0MjY4MDMyLCA2MzMsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODE2MzIsIDAsIDAsIDAsIDU4MTYzMiwgNTgxNjMyLCA1ODE2MzIsIDU4MTYzMiwgNTgxNjMyLCA1ODE2MzIsIDU4MTYzMiwgNTgxNjMyLCA1ODE2MzIsIDU4MTYzMiwgNTgxNjMyLCA1ODE2MzIsIDU4MTYzMiwgNTgxNjMyLCA1ODE2MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MCwgNTgxNjMyLCAxLCAyNDU3OCwgMywgMCwgMCwgNDM2NjMzNiwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDQyNjgwMzIsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTcyLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzE4MywgNTIxLCA1MjEsIDMxODcsIDUyMSwgNTIxLCA2MjU4Njg4LCA2NDQ3MTA0LCAwLCAwLCA2MTI3NjE2LCAwLCA2MzQ4ODAwLCA1OTA2NDMyLCAwLCA1NTM3NzkyLCAzNzc0LCAwLCAwLCAwLCAwLCA1OTM5MjAwLCAwLCAwLCA1Njc3MDU2LCA2MzY1MTg0LCA0ODY2MDQ4LCAwLCA2MDcwMjcyLCA1NTQ1OTg0LCA1MTUyNzY4LCAwLCAwLCA2MTQ0MDAwLCA0MzU4MTQ0LCA0ODY2MDQ4LCA0ODgyNDMyLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCA5MDEsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA0ODU4NzU2LCA0ODc1MTQwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDUyNjAxNjQsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA5MDAsIDkwMCwgOTAwLCA2MTAzOTQwLCA5MDAsIDkwMCwgOTAwLCA2MTg1ODYwLCA5MDAsIDkwMCwgOTAwLCA2Mjg0MTY0LCA5MDAsIDkwMCwgNjMzMzMxNiwgOTAwLCA5MDAsIDkwMCwgNjM5MDY2MCwgOTAwLCA5MDAsIDY0MzE2MjAsIDY0Mzk4MTIsIDAsIDAsIDAsIDAsIDU1Mzc3OTIsIDU1NDU5ODQsIDU1ODY5NDQsIDU3MzQ0MDAsIDU5NzE5NjgsIDQzNTgxNDQsIDYwNDU2OTYsIDQzNTgxNDQsIDYwNzAyNzIsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYzNDg4MDAsIDQzNTgxNDQsIDYxNDQwMDAsIDAsIDYxNDQwMDAsIDAsIDQ5ODg5MjgsIDUwMDUzMTIsIDAsIDAsIDAsIDAsIDU3NzUzNjAsIDAsIDAsIDAsIDM4NjksIDAsIDAsIDAsIDAsIDAsIDc4NywgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg0NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTkzOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk0NiwgNTc5MDksIDU5OTQ4LCA1NzkwOSwgNTk5NTEsIDU3OTA5LCA1NzkwOSwgNDM1ODE0NCwgNTAwNTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTEyMDAwMCwgNTEzNjM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjMyNDIyNCwgNTkxNDYyNCwgNTkxNDYyNCwgMCwgMCwgMCwgMCwgMCwgNTUxMzIxNiwgNTc4MzU1MiwgMCwgMzg2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMjgyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgzMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTM4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzg3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDMxMCwgMzExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjM4LCAwLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMCwgMCwgNDUxLCA0NjUsIDQ2NSwgNDY1LCA0NzgsIDQ3OCwgNDc4LCA0NzgsIDQ3OCwgNDc4LCA0NzgsIDQ3OCwgNDc4LCA0OTksIDQ3OCwgNDc4LCA0NzgsIDQ3OCwgNTE3LCA0NzgsIDQ3OCwgNDc4LCA1MTcsIDQ3OCwgNDc4LCA0NzgsIDQ3OCwgNDc4LCA0NzgsIDUyMiwgNTc4ODgsIDUyMiwgNTc4ODgsIDUyMiwgNTIyLCA1Nzg4OCwgNTIyLCA1MjIsIDU3OTExLCA1Nzg4OCwgNTIyLCA1MjIsIDU3ODg4LCA1Nzg4OCwgNTc4ODgsIDU3OTExLCA1Nzg4OCwgNTc4ODgsIDU3ODg4LCA1Nzg4OCwgNTc4ODgsIDU3ODg4LCA1Nzg4OCwgNTc5MTEsIDU3OTExLCA1Nzg4OCwgNTc4ODgsIDU3OTM4LCA1Nzg4OCwgNTc4ODgsIDU3ODg4LCA1Nzg4OCwgNTc4ODgsIDU3ODg4LCA1Nzg4OCwgNTc5MzgsIDU3OTM4LCA1Nzg4OCwgNTc4ODgsIDU3ODg4LCA1Nzg4OCwgNTc5MzgsIDU3OTM4LCA1Nzg4OCwgNTIyLCA1Nzg4OCwgNTc4ODgsIDU3ODg4LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCA2MzgsIDAsIDAsIDY0MSwgNjQyLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDc1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjc5LCAwLCAwLCAwLCAwLCAxMjg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDMsIDAsIDAsIDAsIDAsIDYzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU4LCAwLCAwLCAwLCAwLCA3NjQsIDAsIDAsIDc2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMzExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE3NSwgMCwgMTE3NywgMTE3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc2LCAwLCAwLCAwLCAwLCA3ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQxLCAwLCAwLCAwLCAwLCAwLCAzMTE0LCAwLCAwLCAwLCAwLCAwLCAzMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTI0LCAzMTI1LCAzMTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA2LCAwLCAwLCAwLCAxMzEwLCAwLCAwLCAwLCAwLCAxMzEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTAyNCwgNTc4ODYsIDU3ODg2LCAwLCA4MjQsIDgyNSwgMCwgMCwgMCwgMCwgNzgwLCA1MjEsIDUyMSwgODM0LCA4MzgsIDUyMSwgNTIxLCA4NTAsIDUyMSwgNTIxLCA1MjEsIDg2NiwgNTIxLCA4NzEsIDUyMSwgODc5LCA1MjEsIDg4MiwgNTIxLCA1MjEsIDg5NiwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg5OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MTMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDQ4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgyNTMsIDU4MjU3LCA1Nzg4NiwgNTc4ODYsIDU4MjY5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODI4NSwgNTc4ODYsIDU4MjkwLCA1Nzg4NiwgNTgyOTgsIDU3ODg2LCA1ODMwMSwgNTc4ODYsIDU3ODg2LCA1ODMxNSwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzI5LCA1ODMzMywgNTc5MDksIDU3OTA5LCA1ODM0NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzNjEsIDU3OTA5LCA1ODM2NiwgNTc5MDksIDU4Mzc0LCA1NzkwOSwgNTgzNzcsIDU3OTA5LCA1NzkwOSwgNTgzOTEsIDU3OTA5LCAwLCAwLCAwLCAwLCA1ODI5MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MDQsIDU4NDA4LCA1NzkzNiwgNTc5MzYsIDU4NDIwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQzNiwgNTc5MzYsIDU4NDQxLCA1NzkzNiwgNTg0NDksIDU3OTM2LCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDE3MiwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxNTIyLCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjE1MjgsIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTQ0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTU3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTQ1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDE0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0NTIsIDU3OTM2LCA1NzkzNiwgNTg0NjYsIDU3OTM2LCA4MzQsIDgzOCwgMTEyOCwgODgyLCA1MjEsIDUyMSwgMCwgNTgyNTcsIDU4MjUzLCA1ODQ3OCwgNTgzMDEsIDU3ODg2LCA1Nzg4NiwgMTU1OTQxLCAxMTM4LCAwLCAwLCAxMTQxLCAwLCAwLCAxMTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTAzMDQwLCAwLCAwLCAwLCA2MTg0OTYwLCAwLCAwLCAwLCA2MjgzMjY0LCAwLCAwLCA2MzMyNDE2LCAwLCAwLCAwLCA2Mzg5NzYwLCAwLCAwLCA2NDMwNzIwLCA2NDM4OTEyLCA5NzcsIDAsIDAsIDAsIDAsIDAsIDEyMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NywgMCwgMzYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjIsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTg4MzEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDUwNjU3LCA1ODc1NCwgOTc3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk2NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTY5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDE3NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAxMTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODgsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAzNjcsIDAsIDAsIDY5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODE1LCAwLCAwLCAxODYxLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4NzQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4ODcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEwNDQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MjksIDUyMSwgNTIxLCAxOTMyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NDUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NTEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTgyOCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM4MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTE2NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjExNjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1MjEsIDU4NzU0LCAxOTYwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzExLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzE3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMzMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4MzUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDg0NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4NTQsIDU3ODg2LCA1MDY1NywgMjA2MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQxMSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQxNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MzAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4OTAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODkzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MDAsIDU3OTA5LCA1NzkwOSwgNTg5MDQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0NzIsIDU3OTA5LCA1NzkwOSwgNTk0NzUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ4OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0OTUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTUxLCAwLCAwLCAwLCAzMTU1LCAwLCAzMTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTA3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTEzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUyNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1NzksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTg3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEwNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTc5MzYsIDU3OTM2LCA1OTU2OCwgNTc5MzYsIDU3OTM2LCA1OTU3MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTg1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU5MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCAyMjU2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTk2MDUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDIyNjUsIDAsIDIyNjYsIDAsIDAsIDAsIDAsIDIyNjgsIDAsIDIyNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MSwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg1OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyMjY1LCAwLCAyMjY2LCAwLCAwLCAwLCAwLCAyMjY4LCAwLCAyMjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTI5OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MzcsIDE3MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE3NzkyLCAwLCAwLCAwLCAwLCA0MTc3OTIsIDAsIDAsIDAsIDAsIDAsIDMwOSwgMCwgMzA5LCAwLCAwLCAwLCAwLCAyMzMxLCAwLCAyMzMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODI2LCAwLCAxODI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODM1LCAwLCAwLCA1MjEsIDI0NjQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4MjksIDU3ODg2LCA1Nzg4NiwgNTk4MzIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNjUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI2OCwgNTc4ODYsIDU3ODg2LCA2MDI3MCwgNTc4ODYsIDYwMjcxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI4MCwgNTc4ODYsIDU3ODg2LCA2MDI4NCwgNTk4NDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NjAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDMyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTAzOCwgNTc4ODYsIDYxMDQwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDg5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4ODYsIDU3OTA5LCA1ODg4OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAzNzUsIDU3OTM2LCA2MDM3NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMTIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMzIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA3MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMjQwNSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1OTgzNiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDIzOTksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDQ2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NTIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NTcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NDcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg4OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMTUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMjMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MjQsIDU3OTA5LCA1NzkwOSwgNTg5MjgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MzUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTQyLCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM1OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM3MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM4MCwgNTc5MzYsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDQxNzAsIDQxNzEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTUyMCwgNjE1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNTI2LCA2MTUyNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE1MzIsIDU3OTM2LCA1NzkzNiwgNjA0MzUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMzAxLCAzMDUsIDAsIDAsIDAsIDAsIDMxMDQsIDAsIDAsIDAsIDMxMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjczMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzExMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzNiwgNTc5MDksIDYwNjI3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MzYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjQ0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDU3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDYyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNjA2NzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY4NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2OTMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTU1OTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkyLCAxMTkzLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTE1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MzMsIDU3OTM2LCA2MDkzNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA3MDMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUyMjU2LCAwLCAzNTIyNTYsIDM1MjI1NiwgMCwgMCwgMCwgMCwgNTIxLCAzOTQ4LCA1MjEsIDM5NTAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNjEzMDcsIDU3ODg2LCA2MTMwOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MDcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM0NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE2NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMTcwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzMjMsIDU3OTA5LCA2MTMyNSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDYxMzM5LCA1NzkzNiwgNjEzNDEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMzg1OSwgNTIxLCA2MTIwNCwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDQwMTIsIDAsIDAsIDAsIDQwMTUsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDAyMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEzNzcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDYwODYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNTIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDAsIDAsIDMxMiwgMzEzLCAzMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNiwgMCwgMTMxMDcyLCAwLCAwLCAwLCA0MjYsIDAsIDAsIDAsIDAsIDAsIDQyNiwgNDUyLCAwLCAwLCAwLCA0NTIsIDQ1MiwgNDUyLCA0NTIsIDQ1MiwgNDUyLCA0NTIsIDQ1MiwgNDUyLCA0NTIsIDQ1MiwgNDUyLCA0NTIsIDUxNiwgNDUyLCA1MTYsIDUxNiwgNTE2LCA0NTIsIDUxNiwgNTE2LCA1MTYsIDUxNiwgNTE2LCA1MTYsIDUyMywgNTc4ODksIDUyMywgNTc4ODksIDUyMywgNTIzLCA1Nzg4OSwgNTIzLCA1MjMsIDU3OTEyLCA1Nzg4OSwgNTIzLCA1MjMsIDU3ODg5LCA1Nzg4OSwgNTc4ODksIDU3OTEyLCA1Nzg4OSwgNTc4ODksIDU3ODg5LCA1Nzg4OSwgNTc4ODksIDU3ODg5LCA1Nzg4OSwgNTc5MTIsIDU3OTEyLCA1Nzg4OSwgNTc4ODksIDU3OTM5LCA1Nzg4OSwgNTc4ODksIDU3ODg5LCA1Nzg4OSwgNTc4ODksIDU3ODg5LCA1Nzg4OSwgNTc5MzksIDU3OTM5LCA1Nzg4OSwgNTc4ODksIDU3ODg5LCA1Nzg4OSwgNTc5MzksIDU3OTM5LCA1Nzg4OSwgNjE0LCA1Nzg4OSwgNTc5NjYsIDU3OTY2LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODUwMjQsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDU3OTA5LCA1NzkwOSwgNTgzNzAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQ0NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjExOTksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjI3LCAwLCAwLCAwLCAwLCAwLCA4MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MSwgMCwgMCwgMCwgMCwgMCwgODIwLCA3ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NCwgMCwgMCwgNzU0LCAwLCAwLCAwLCAwLCAwLCA3NTQsIDc1NCwgMCwgMCwgODE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzksIDAsIDAsIDAsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzEyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMTYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzQ1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzU0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzODEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQzMiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMzAxLCAzMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MDcsIDAsIDAsIDAsIDAsIDAsIDI4MTIsIDAsIDAsIDAsIDAsIDAsIDU3ODg2LCA2MTM4MSwgNTc4ODYsIDYxMzgzLCA1Nzg4NiwgNTc4ODYsIDYxMzg1LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzOTUsIDU3OTA5LCA2MTM5NywgNTc5MDksIDU3OTA5LCA2MTM5OSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MzYsIDYxNDA5LCA1NzkzNiwgNjE0MTEsIDU3OTM2LCA1NzkzNiwgNjE0MTMsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MCwgMzUxLCAzNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMjk1LCAwLCAzMTksIDMxOSwgNDI3LCA0MjgsIDEzMTA3MiwgNDM1LCA0MjgsIDQzNiwgNDI3LCA0MzUsIDQzNiwgMCwgMzE1LCA0MzYsIDQ0OCwgNDUzLCA0NjYsIDQ2NiwgNDY2LCA0NzksIDQ3OSwgNDc5LCA0NzksIDQ3OSwgNDc5LCA0NzksIDQ3OSwgNDc5LCA0NzksIDUwMSwgNTAxLCA1MDEsIDUxNCwgNTE0LCA1MTUsIDUxNSwgNTAxLCA1MTUsIDUxNSwgNTE1LCA1MDEsIDUxNSwgNTE1LCA1MTUsIDUxNSwgNTE1LCA1MTUsIDUyNCwgNTc4OTAsIDUyNCwgNTc4OTAsIDUyNCwgNTI0LCA1Nzg5MCwgNTI0LCA1MjQsIDU3OTEzLCA1Nzg5MCwgNTI0LCA1MjQsIDU3ODkwLCA1Nzg5MCwgNTc4OTAsIDU3OTEzLCA1Nzg5MCwgNTc4OTAsIDU3ODkwLCA1Nzg5MCwgNTc4OTAsIDU3ODkwLCA1Nzg5MCwgNTc5MTMsIDU3OTEzLCA1Nzg5MCwgNTc4OTAsIDU3OTQwLCA1Nzg5MCwgNTc4OTAsIDU3ODkwLCA1Nzg5MCwgNTc4OTAsIDU3ODkwLCA1Nzg5MCwgNTc5NDAsIDU3OTQwLCA1Nzg5MCwgNTc4OTAsIDU3ODkwLCA1Nzg5MCwgNTc5NDAsIDU3OTQwLCA1Nzg5MCwgNjE1LCA1Nzk2NSwgNTc5NjUsIDU3OTY1LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDE0MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOTgsIDM2NywgMzY3LCAwLCAwLCAxMjAxLCAwLCAwLCAwLCAxMjA0LCAwLCAxMjA2LCAwLCA2NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAzNjcsIDY5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI0Mjg4MCwgMCwgMCwgMCwgMCwgMCwgNTYwMzMyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODM3OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDAsIDAsIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTUzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDUzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgODgzLCA1MjEsIDUyMSwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgzMDIsIDU3ODg2LCA1Nzg4NiwgMTU1OTQxLCAxMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDExLCAwLCAwLCAwLCAzNDE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDU3ODg2LCA1MjEsIDU3ODg2LCA1MjEsIDUyMSwgNTc4ODYsIDUyMSwgNTIxLCA1NzkwOSwgNTc4ODYsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTIxLCA1MjEsIDUyMSwgNTg3NTQsIDkwMSwgNTc4ODYsIDU3ODg2LCA1ODc1OCwgNTc4ODYsIDU3ODg2LCA1ODc2MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc3NiwgNTc4ODYsIDU4NzgxLCA1Nzg4NiwgNTc4ODYsIDU4Nzg1LCA1Nzg4NiwgNTc4ODYsIDU4Nzg4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODI3OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgNTc5MDksIDU3OTA5LCA1ODMyMiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzNTUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODc2LCA1NzkwOSwgNTc5MDksIDU4ODgwLCA1NzkwOSwgNTc5MDksIDU4ODgzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkwMiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1ODk1MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk2NSwgNTc5MzYsIDU4OTcwLCA1NzkzNiwgNTc5MzYsIDU4OTc0LCA1NzkzNiwgNTc5MzYsIDU4OTc3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDM4NjEsIDAsIDAsIDAsIDM4NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDM4NzAsIDAsIDE3MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4NSwgNTIxLCA1MjEsIDUyMSwgMTkyNywgMTkyOCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDMzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU4NzU0LCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMjAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzMyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA2MTQ5NCwgNTc5MDksIDYxNDk1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNjE1MDIsIDU3OTM2LCA2MTUwMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAxOCwgNTc5MzYsIDYwMDIwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM5NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDAxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3ODg2LCA1Nzg4NiwgNTkzNzAsIDU5MzcxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTA2NTcsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQyMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MzIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ0NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0NTAsIDU3OTA5LCA1NzkwOSwgNTk0NTUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5OTAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTk5OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU5NDcwLCA1OTQ3MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDMsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDQ3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzQxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMyMDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNjEwMTYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDE5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTU2NiwgNTk1NjcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTYyLCAwLCAwLCA1MjEsIDI0MzcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ1MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NTQsIDI0NTUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzNzQsIDUyMSwgMTM3NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzg5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTQwNCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODY5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4ODIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4ODYsIDU5ODg3LCA1OTg4OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MjIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAyNzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2ODgsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjg4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAyOTYyLCAwLCAwLCAwLCAwLCAwLCA4MjYsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4NDksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NjMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NzUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0NDcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY3MiwgMzEzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgzNywgMCwgMCwgMCwgMzE2NiwgMCwgMCwgMzE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3MywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NTEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMzc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDI5LCA1MjEsIDM0NTgsIDM0NTksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4MjcsIDU3ODg2LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4ODMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAyMjY3LCAwLCAxMTQyLCAwLCAwLCAwLCAwLCAyMjcwLCAwLCAxMTQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODA5LCA1NzkwOSwgNjA4ODQsIDU3OTA5LCA2MDg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MTEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MjYsIDU3OTM2LCA2MDkyOCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDQ1LCA2MDA0NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNTMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA3MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTk1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAxODgxLCA1MjEsIDQwMTAsIDAsIDQwMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNDAxOCwgNTIxLCA0MDE5LCA1MjEsIDUyMSwgNTIxLCA0MDIzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA2MTM3NSwgNTc4ODYsIDYxMzc2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI2NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjY5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNzUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI4MywgNTc4ODYsIDYxMzgwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA2MTM4OSwgNTc5MDksIDYxMzkwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTM5NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNjE0MDMsIDU3OTM2LCA2MTQwNCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMzg4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAzMzc2LCAwLCAwLCA2MTQwOCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMTcxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNDIxMywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjE1NTksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNTYxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTU2MywgMCwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDU3OTA5LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMjQ3MSwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODU4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAzNzYsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMzc2LCAwLCAwLCA0MzgsIDQ0NCwgMCwgMzc2LCA0NTQsIDQ2NywgNDY3LCA0NjcsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNDgwLCA0ODAsIDQ4MCwgNTAyLCA1MDIsIDUwMiwgNTAyLCA1MDIsIDUwMiwgNTAyLCA1MDIsIDUwMiwgNTAyLCA1MDIsIDUwMiwgNTAyLCA1MDIsIDUwMiwgNTI1LCA1Nzg5MSwgNTI1LCA1Nzg5MSwgNTI1LCA1MjUsIDU3ODkxLCA1MjUsIDUyNSwgNTc5MTQsIDU3ODkxLCA1MjUsIDUyNSwgNTc4OTEsIDU3ODkxLCA1Nzg5MSwgNTc5MTQsIDU3ODkxLCA1Nzg5MSwgNTc4OTEsIDU3ODkxLCA1Nzg5MSwgNTc4OTEsIDU3ODkxLCA1NzkxNCwgNTc5MTQsIDU3ODkxLCA1Nzg5MSwgNTc5NDEsIDU3ODkxLCA1Nzg5MSwgNTc4OTEsIDU3ODkxLCA1Nzg5MSwgNTc4OTEsIDU3ODkxLCA1Nzk0MSwgNTc5NDEsIDU3ODkxLCA1Nzg5MSwgNTc4OTEsIDU3ODkxLCA1Nzk0MSwgNTc5NDEsIDU3ODkxLCA1MjUsIDU3ODkxLCA1Nzg5MSwgNTc4OTEsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyOTM3NiwgMCwgNDkxNTIwLCA1MjQyODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4MCwgMTE4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzgsIDAsIDAsIDExNjYsIDAsIDEyOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODQsIDAsIDAsIDAsIDEzMTIsIDExODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCAxMzIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNjAyNDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODE0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzNzEsIDUyMSwgNTIxLCAxMzczLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzNzgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTQwMywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxOTYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjAzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTkwMiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTM1LCA1MjEsIDUyMSwgNTIxLCAxOTQxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTUwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NTYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTg3NTQsIDkwMSwgNTc4ODYsIDU3ODg2LCA1ODc1OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Nzg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTI0NywgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEyNjMsIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg4MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4OTYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkwNSwgNTc5MDksIDU3OTA5LCA1ODkwNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTEyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCA1ODgxMiwgNTc5MzYsIDU3OTM2LCA1ODk0OCwgNTc5MzYsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA0MTY5LCA1MjEsIDUyMSwgNTIxLCA0MTczLCA1Nzg4NiwgNTc4ODYsIDYxNTE5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTUyMywgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNjE1MjUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNTI5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA2MTUzMSwgNTc5MzYsIDAsIDAsIDAsIDAsIDQxNjgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDYxNTE4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjE1MjQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTUzMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMjc0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1Nzg4NiwgMCwgMzkzOCwgMCwgMCwgMzk0MSwgMCwgMCwgMCwgMzYyNywgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4ODMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDYwODE5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTk5LCA1NzkzNiwgNTc5MzYsIDU5MDAxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMDcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUxOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1MzAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMzIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxMTM4LCAxNzA1LCAwLCAwLCAwLCAwLCAxNzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MTAsIDUyMSwgNTIxLCA1MjEsIDIyNTksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTYwOCwgMjI2NSwgMCwgMjI2NiwgMCwgMCwgMCwgMCwgMjI2OCwgMCwgMjI2OSwgMCwgMCwgMCwgMCwgMCwgMjI3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MDgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDE2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM5NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1OTg5MywgNTc4ODYsIDU5ODk1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTkxNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTIwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTU4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NzEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NzUsIDU5OTc2LCA1OTk3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5ODIsIDU3OTA5LCA1OTk4NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk5OTksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAwMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjgzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDMzNjksIDUyMSwgNTc4ODYsIDYwNzE2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA2NSwgNTc5MzYsIDYwMDY3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyNzM5LCAyMjY2LCAwLCAyNzQwLCAyMjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTUsIDQxNSwgMCwgMCwgMCwgMCwgMCwgNjAyODUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDI5NjIsIDAsIDAsIDAsIDAsIDAsIDExNTYsIDExNTcsIDExNTgsIDExNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkxLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMxMCwgNTc5MDksIDYwMzExLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ2MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ2NywgNTc5MDksIDUyMSwgNTIxLCAzMTkxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzIwNCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjEwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDU4MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1OTYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA2MDYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjE3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDYyNCwgNTc5MDksIDU3ODg2LCA2MDYwMiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMjk2MiwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTE4MiwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk3NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5OTAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY1MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjgwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY5NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEyNzMsIDU3OTM2LCA2MTI3NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODc4LCAxODc5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4ODYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzM3LCA1MjEsIDEzNDIsIDUyMSwgNTIxLCAxMzQ2LCA1MjEsIDUyMSwgMTM0OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM4MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzk2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDcwMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMzc2OCwgMCwgMCwgMCwgMCwgNTc5MDksIDYxMDczLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAzMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzOTUzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEzMTIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyNTU3LCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ2NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTMyOCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEzNDQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTM4MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzOTYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDgwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDkwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE0MTAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyMjY1LCAxNzA2LCAyMjY2LCAwLCAwLCAwLCAwLCAyMjY4LCAxNzEzLCAyMjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzUzLCAwLCAwLCAzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwLCAwLCAxMzkyNjQsIDE0NzQ1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg0MiwgMCwgMCwgMTg0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMTg1MSwgMTg1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg0NSwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAzMjksIDAsIDAsIDAsIDAsIDQ1NSwgNDY4LCA0NjgsIDQ2OCwgNDgxLCA0ODEsIDQ4MSwgNDgxLCA0OTIsIDQ5NCwgNDgxLCA0ODEsIDQ5MiwgNDgxLCA1MDMsIDUwMywgNTAzLCA1MDMsIDUxOCwgNTAzLCA1MDMsIDUwMywgNTE4LCA1MDMsIDUwMywgNTAzLCA1MDMsIDUwMywgNTAzLCA1MjYsIDU3ODkyLCA1MjYsIDU3ODkyLCA1MjYsIDUyNiwgNTc4OTIsIDUyNiwgNTI2LCA1NzkxNSwgNTc4OTIsIDUyNiwgNTI2LCA1Nzg5MiwgNTc4OTIsIDU3ODkyLCA1NzkxNSwgNTc4OTIsIDU3ODkyLCA1Nzg5MiwgNTc4OTIsIDU3ODkyLCA1Nzg5MiwgNTc4OTIsIDU3OTE1LCA1NzkxNSwgNTc4OTIsIDU3ODkyLCA1Nzk0MiwgNTc4OTIsIDU3ODkyLCA1Nzg5MiwgNTc4OTIsIDU3ODkyLCA1Nzg5MiwgNTc4OTIsIDU3OTQyLCA1Nzk0MiwgNTc4OTIsIDU3ODkyLCA1Nzg5MiwgNTc4OTIsIDU3OTQyLCA1Nzk0MiwgNTc4OTIsIDUyNiwgNTc4OTIsIDU3ODkyLCA1Nzg5MiwgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgNjUxLCA2NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MywgNjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzYsIDY3NywgNjc4LCAwLCAwLCAwLCA2ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDcwMCwgNzAxLCAwLCAwLCAwLCAwLCAwLCA3MDcsIDAsIDAsIDAsIDAsIDAsIDMxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MDU2MCwgNDUwNTYwLCAwLCAwLCAwLCAwLCAwLCA3MTEsIDAsIDcxMywgMCwgMCwgMCwgMCwgMCwgMCwgNzIwLCAwLCAwLCAwLCA3MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUyLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTksIDAsIDAsIDAsIDc2NSwgNzY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzA4LCAwLCAwLCAwLCAwLCAyMzEzLCAyMzE0LCAwLCAwLCAyMzE2LCAyMzE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAzMzYsIDAsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMCwgMCwgMzA1LCAwLCAwLCA0ODU3ODU2LCA0ODc0MjQwLCAwLCAwLCA0OTIzMzkyLCAwLCAwLCAwLCA3NzUsIDAsIDc3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg5LCAwLCA3OTQsIDAsIDc5NywgMCwgMCwgMCwgMCwgMCwgMCwgNzc3LCAwLCA3ODksIDAsIDgwMywgMCwgMCwgMCwgMCwgNzk3LCA4MDksIDAsIDAsIDAsIDAsIDAsIDgwOSwgODA5LCA4MTIsIDAsIDAsIDAsIDc3NywgMCwgMCwgMCwgMCwgMCwgODIxLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDYsIDAsIDAsIDgwNiwgMCwgMCwgMCwgMCwgMCwgODA2LCA4MDYsIDAsIDAsIDAsIDAsIDc4NiwgMCwgMCwgMCwgMCwgMCwgMCwgODIyLCA3ODIsIDAsIDAsIDAsIDAsIDAsIDc3NSwgMCwgMCwgMCwgODIxLCA1MjEsIDUyMSwgODM1LCA1MjEsIDg0MSwgNTIxLCA1MjEsIDg1NiwgNTIxLCA1MjEsIDg2NywgNTIxLCA4NzIsIDUyMSwgNTIxLCA4ODEsIDg4NCwgODg5LCA1MjEsIDg5NywgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI5MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMjk2MiwgMCwgMCwgNTgyNTQsIDU3ODg2LCA1ODI2MCwgNTc4ODYsIDU3ODg2LCA1ODI3NSwgNTc4ODYsIDU3ODg2LCA1ODI4NiwgNTc4ODYsIDU4MjkxLCA1Nzg4NiwgNTc4ODYsIDU4MzAwLCA1ODMwMywgNTgzMDgsIDU3ODg2LCA1ODMxNiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzMwLCA1NzkwOSwgNTgzMzYsIDU3OTA5LCA1NzkwOSwgNTgzNTEsIDU3OTA5LCA1NzkwOSwgNTgzNjIsIDU3OTA5LCA1ODM2NywgNTc5MDksIDU3OTA5LCA1ODM3NiwgNTgzNzksIDU4Mzg0LCA1NzkwOSwgNTgzOTIsIDU3OTA5LCAwLCAwLCAwLCAwLCA1ODI5MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MDUsIDU3OTM2LCA1ODQxMSwgNTc5MzYsIDU3OTM2LCA1ODQyNiwgNTc5MzYsIDU3OTM2LCA1ODQzNywgNTc5MzYsIDU4NDQyLCA1NzkzNiwgNTc5MzYsIDU4NDUxLCA1ODQ1NCwgNTg0NTksIDU3OTM2LCA1ODQ2NywgNTc5MzYsIDgzNSwgNTIxLCA1MjEsIDExMjksIDg4OSwgNTIxLCAwLCA1Nzg4NiwgNTgyNTQsIDU3ODg2LCA1ODQ3OSwgNTgzMDgsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMjY1MjgsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDExNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNTEsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDYyOTk2NDgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDEyMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzUsIDAsIDAsIDExODcsIDAsIDAsIDAsIDAsIDAsIDM0MzQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDUxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTgyNywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODMxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODAxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MTAsIDU3ODg2LCA1Nzg4NiwgNTg4MTIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgxNywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEzODgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNDAyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCA3NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NTcyODAsIDAsIDY0NjM0ODgsIDQ5Mzk3NzYsIDAsIDAsIDU0NTU4NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwNjIwODAsIDY0NjM0ODgsIDAsIDUzOTg1MjgsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTMyOCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM0MywgNTIxLCA1MjEsIDUyMSwgMTM0OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM2NSwgNTIxLCAxNDA3LCA1MjEsIDU4NzU0LCA5MDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc2NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg3ODIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Nzg3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MzksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDUwNjU3LCA1ODc1NCwgOTc3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg1NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4NjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODc3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg4MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4OTksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MTksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMDMsIDU3OTM2LCA1OTAwNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDE4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDcwNCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk1NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NzEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTc2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NDEsIDAsIDU3OTM2LCA1ODk5MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAyNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTAxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjkwLCA2OTEsIDAsIDM2NywgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwMywgMCwgMCwgMCwgMCwgMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxMTM4LCAxNzA1LCAwLCAwLCAwLCAwLCAxNzEyLCAwLCAwLCAwLCAwLCAxNzE5LCAwLCAxNzIxLCAwLCAwLCAwLCAwLCAwLCAzNjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjMyLCAwLCAwLCAwLCAzNjM1LCAzNjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAzOTM2NzgsIDAsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDM5MzY3OCwgMzkzNjc4LCAzOTM2NzgsIDAsIDM5MzY3OCwgMzkzNjc4LCAwLCAxNzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzcwLCAwLCAwLCAwLCAwLCAwLCAxNzc2LCAwLCAwLCAxNzc5LCAwLCAxNzgxLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQyLCAwLCAzNjQ0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg1NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NDMsIDE5NDQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMTc4NywgMTc4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5NywgMTc5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwNCwgMCwgMCwgMTgwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4ODgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTgxMCwgMTgxMSwgMTgxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgzMCwgMTgzMSwgMCwgMTgzMiwgMTgzMywgMCwgMCwgMCwgMCwgMCwgMCwgMTE4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM5NSwgMCwgMCwgMzM5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg2MywgMTcyMSwgMTcyMSwgMTg2NSwgNTIxLCAxODY3LCA1MjEsIDE4NjgsIDE4NjksIDUyMSwgMTg3MSwgNTIxLCA1MjEsIDUyMSwgMTg3NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTg4OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODkyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4OTYsIDUyMSwgMTg5OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTA4LCAxOTA5LCAxOTExLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MTksIDE5MjAsIDUyMSwgMTkyMiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NjcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDYxMSwgNTc4ODYsIDU3ODg2LCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MjIsIDU3OTA5LCA2MDYyNSwgNTIxLCAxOTI1LCAxOTI2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MzQsIDUyMSwgMTkzNiwgNTIxLCAxOTM5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTk0NiwgNTIxLCA1MjEsIDE5NDgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxOTcsIDMxOTgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzIwMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjA2LCA1MjEsIDUyMSwgNTIxLCAzMjA5LCA1MjEsIDUyMSwgNTg3NTQsIDAsIDU5MzA3LCA1Nzg4NiwgNTkzMDksIDU3ODg2LCA1OTMxMCwgNTc4ODYsIDU5MzEyLCA1Nzg4NiwgNTkzMTQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzE4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMzMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzM1LCA1Nzg4NiwgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU2Mjc1LCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgzMzI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMzOSwgNTc4ODYsIDU5MzQxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNTEsIDU5MzUyLCA1OTM1NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzYyLCA1OTM2MywgNTc4ODYsIDU5MzY1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Nzk5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MjksIDU5MzY4LCA1OTM2OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5Mzc3LCA1Nzg4NiwgNTkzNzksIDU3ODg2LCA1OTM4MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM5MCwgNTc4ODYsIDU3ODg2LCA1OTM5MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDI1NTgsIDAsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzcxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM3NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUwNjU3LCAwLCA1OTQwNywgNTc5MDksIDU5NDA5LCA1NzkwOSwgNTk0MTAsIDU3OTA5LCA1OTQxMiwgNTc5MDksIDU5NDE0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQxOCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MzEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQzNSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTE2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDEzMzUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTg3NzQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTEzOCwgMCwgMCwgMTcwOSwgMCwgMCwgMCwgMCwgMTcxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzODgyLCA1MjEsIDM4ODQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODQ3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI3NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTk0MzksIDU3OTA5LCA1OTQ0MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDUxLCA1OTQ1MiwgNTk0NTQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ2MiwgNTk0NjMsIDU3OTA5LCA1OTQ2NSwgNTc5MDksIDU3OTA5LCA1OTQ2OCwgNTk0NjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ3NywgNTc5MDksIDU5NDc5LCA1NzkwOSwgNTk0ODIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0OTAsIDU3OTA5LCA1NzkwOSwgNTk0OTIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyOTAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyOTksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMzAyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM4LCA1OTUwMywgNTc5MzYsIDU5NTA1LCA1NzkzNiwgNTk1MDYsIDU3OTM2LCA1OTUwOCwgNTc5MzYsIDU5NTEwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUxNCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1MjcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUzMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxMTM4LCAwLCAxNzA3LCAwLCAwLCAwLCAwLCAxNzE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxODIsIDUyMSwgMzE4NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1OTUzNSwgNTc5MzYsIDU5NTM3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1NDcsIDU5NTQ4LCA1OTU1MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTU4LCA1OTU1OSwgNTc5MzYsIDU3OTM2LCA1OTU2MSwgNTc5MzYsIDU3OTM2LCA1OTU2NCwgNTk1NjUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU3MywgNTc5MzYsIDU5NTc1LCA1NzkzNiwgNTk1NzgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1ODYsIDU3OTM2LCA1NzkzNiwgNTk1ODgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgMTkyNiwgNTIxLCAyMjU4LCA1MjEsIDU3ODg2LCA1OTM2OSwgNTc4ODYsIDU5NjA3LCA1Nzg4NiwgMjI2NSwgMCwgMjI2NiwgMCwgMCwgMCwgMCwgMjI2OCwgMCwgMjI2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI3NiwgMCwgMCwgMjI3OSwgMjI4MCwgMCwgMCwgMCwgMjI4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc5MCwgMCwgMCwgMCwgMCwgMjMwMywgMCwgMCwgMCwgMCwgMjMwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMyMywgMCwgMCwgMCwgMCwgMjMyNywgMCwgMCwgMCwgMCwgMCwgMzg3MywgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgwMywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODA4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgxNiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MjMsIDU4ODI1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAyMzU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg3NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyNDEyLCA1MjEsIDI0MTQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQyMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM1NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDQxLCAyNDQyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDQ5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM4MywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE0MDAsIDUyMSwgNTIxLCA1MjEsIDI0NjMsIDUyMSwgNTIxLCAyNDY2LCAyNDY3LCA1MjEsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTgzMywgNTc4ODYsIDU5ODM1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDU4NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTk5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODQzLCA1Nzg4NiwgNTk4NDUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg1MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAzMDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg5NiwgNTc4ODYsIDU3ODg2LCA1OTg5OSwgNTk5MDAsIDU3ODg2LCAwLCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MjIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4Mzg4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAzODYyLCAwLCAwLCAzODY1LCAwLCAwLCAwLCAwLCAzNjI3LCAwLCAwLCA1OTkyNCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MzIsIDU3OTA5LCA1OTkzNCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTQwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1OTk5MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNzA3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgNjAwMDcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDE1LCA1NzkzNiwgNjAwMTcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAyMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyNzM5LCAyMjY2LCAwLCAyNzQwLCAyMjY5LCAwLCAwLCAwLCA1MjEsIDI4NjgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg3MiwgNTIxLCA1MjEsIDUyMSwgMjg3NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4ODUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg5MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1OTgyMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODExLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI1OSwgNTc4ODYsIDYwMjYxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI3OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjgyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNjA1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMxOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMyNCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1Nzg4NiwgNjAyODcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyOTUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAzMDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAyOTYyLCAwLCAwLCAwLCAwLCAwLCAxMTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMxNCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMjYsIDU3OTA5LCA2MDMyOCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM2NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEwODIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzYyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzY4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM3OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk1OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NzgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTg4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk2MCwgNTg5NjcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5ODAsIDU3OTM2LCA1ODk4MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA0MTcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQyNCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQxMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDE0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQxOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQyNywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAzMTAzLCAwLCAwLCAzMTA2LCAzMTA3LCAwLCAwLCAzMTEwLCAzMTExLCA2MDQzMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDMwMSwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2Mjc1MDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3ODUyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE2NywgMzE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMTg5LCA2MDU4MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTkzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA2MDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjI5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2NDIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTI1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTMzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkwOSwgNTc5MDksIDYwNjQ5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2NzgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY5MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNDQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDU3ODg2LCAzOTM3LCAwLCAzOTM5LCAwLCAwLCAwLCAwLCAwLCAzNjI3LCAzOTQzLCAwLCAzOTQ1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY5OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzY4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjM5OCwgNTIxLCA1MjEsIDI0MDEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MDksIDUyMSwgNTIxLCAzNDAzLCAwLCAwLCAwLCAwLCAzNDA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDE5LCAwLCAwLCAwLCAwLCAzNDI0LCAzNDI1LCAwLCAzNDI3LCAwLCAwLCAwLCAwLCAwLCAxMTk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjg2LCAwLCAwLCAwLCAwLCAxMzE0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NTIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQzMCwgMCwgMCwgMCwgMzQzMywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ0MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NDQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ1MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NTYsIDYwODI4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4MzQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4NDAsIDU3ODg2LCA1Nzg4NiwgNjA4NDMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4NTAsIDYwODUyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODI4MiwgNTgyODQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgNTc5MDksIDU3OTA5LCA1ODMyNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzNTgsIDU4MzYwLCA1NzkwOSwgNjA4NTYsIDU3ODg2LCA2MDg1OCwgNjA4NTksIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg2NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg3MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODc2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODgyLCA1NzkwOSwgNTc5MDksIDYwODg1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODkyLCA2MDg5NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODk4LCA1NzkwOSwgNjA5MDAsIDYwOTAxLCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MDgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTIwMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg2NiwgMzg2NywgMCwgMzYyNywgMCwgMzg3MSwgNTc5MzYsIDU3OTM2LCA2MDkxMiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTE4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTI0LCA1NzkzNiwgNTc5MzYsIDYwOTI3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTM0LCA2MDkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAwMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAyMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAyOCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU0MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1NDYsIDU3OTM2LCA1NzkzNiwgNTk1NTEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA0OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDk0MCwgNTc5MzYsIDYwOTQyLCA2MDk0MywgNTc5MzYsIDUyMSwgNTIxLCAzNjAyLCA1Nzg4NiwgNTc4ODYsIDYwOTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjExLCAwLCAwLCAzNjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NDksIDM2NTAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzY1NCwgMzY1NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NTksIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzY2MiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDE4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEwMjMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODMzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODQxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDg1NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNTIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNjMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNzEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTE0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MzAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTQxLCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDM2NywgMCwgMCwgMCwgMzAzMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDYxMjQwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTI1NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEwNzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA4MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA5MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjE0NDAsIDU3ODg2LCA2MTQ0MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxNDQ3LCA2MTQ0OCwgNjE0NDksIDYxNDUwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTQ1MywgNTc5MDksIDYxNDU1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjE0NjAsIDYxNDYxLCA2MTQ2MiwgNjE0NjMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxNDY2LCA1NzkzNiwgNjE0NjgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTQ3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTAzMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTM5MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE0MDYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxNTM1LCA1NzkzNiwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA0MTk4LCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTU0NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTU1MCwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTU1NCwgNTc5MzYsIDAsIDM3MSwgMzcxLCAwLCA0MjksIDEzMTA3MiwgMzcxLCA0MjksIDQyOSwgMzMyLCAzNzEsIDQyOSwgMCwgMCwgNDI5LCA0NDksIDQyOSwgMCwgMCwgMCwgNDI5LCA0ODgsIDQ4OCwgNDg4LCA0OTMsIDQ4OCwgNDg4LCA0ODgsIDQ5MywgNDg4LCA0MjksIDQyOSwgNDI5LCA0MjksIDQyOSwgNDI5LCA0MjksIDQyOSwgNDI5LCA0MjksIDQyOSwgNDI5LCA0MjksIDQyOSwgNDI5LCA1MjcsIDU3ODkzLCA1MjcsIDU3ODkzLCA1MjcsIDUyNywgNTc4OTMsIDUyNywgNTI3LCA1NzkxNiwgNTc4OTMsIDUyNywgNTI3LCA1Nzg5MywgNTc4OTMsIDU3ODkzLCA1NzkxNiwgNTc4OTMsIDU3ODkzLCA1Nzg5MywgNTc4OTMsIDU3ODkzLCA1Nzg5MywgNTc4OTMsIDU3OTE2LCA1NzkxNiwgNTc4OTMsIDU3ODkzLCA1Nzk0MywgNTc4OTMsIDU3ODkzLCA1Nzg5MywgNTc4OTMsIDU3ODkzLCA1Nzg5MywgNTc4OTMsIDU3OTQzLCA1Nzk0MywgNTc4OTMsIDU3ODkzLCA1Nzg5MywgNTc4OTMsIDU3OTQzLCA1Nzk0MywgNTc4OTMsIDUyNywgNTc4OTMsIDU3ODkzLCA1Nzg5MywgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI3NTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM5OTc5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MywgMCwgMCwgMCwgNTIxLCA4MjgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg2MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1ODI0NiwgMTI5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4MzksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzMjYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzM4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQzMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTg3NTQsIDkwMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc2NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc3NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzODEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTA0MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTU0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTY2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAzMzc1LCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk1NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzU1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAzNywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDI2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCA0MjEyLCA1MjEsIDUyMSwgNTIxLCA2MTU1OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjE1NjAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNTYyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTIxLCA1Nzg4NiwgNTc5MDksIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzc5MywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDYwNywgNTc4ODYsIDU3ODg2LCA2MDYxMCwgNTc4ODYsIDU3ODg2LCA2MDYxMywgMCwgMCwgNjA2MTQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDYzNywgNjA2MzgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY0MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY0NywgMCwgMCwgMCwgNDMwLCAxMzEwNzIsIDAsIDQzMCwgNDMwLCAwLCAwLCA0MzAsIDQzOSwgMCwgNDMwLCAwLCA0MzAsIDQ2OSwgNDY5LCA0NjksIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDUyOCwgNTc4OTQsIDUyOCwgNTc4OTQsIDUyOCwgNTI4LCA1Nzg5NCwgNTI4LCA1MjgsIDU3OTE3LCA1Nzg5NCwgNTI4LCA1MjgsIDU3ODk0LCA1Nzg5NCwgNTc4OTQsIDU3OTE3LCA1Nzg5NCwgNTc4OTQsIDU3ODk0LCA1Nzg5NCwgNTc4OTQsIDU3ODk0LCA1Nzg5NCwgNTc5MTcsIDU3OTE3LCA1Nzg5NCwgNTc4OTQsIDU3OTQ0LCA1Nzg5NCwgNTc4OTQsIDU3ODk0LCA1Nzg5NCwgNTc4OTQsIDU3ODk0LCA1Nzg5NCwgNTc5NDQsIDU3OTQ0LCA1Nzg5NCwgNTc4OTQsIDU3ODk0LCA1Nzg5NCwgNTc5NDQsIDU3OTQ0LCA1Nzg5NCwgNTI4LCA1Nzg5NCwgNTc4OTQsIDU3ODk0LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2Mjc1MDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTg3NTQsIDE5NjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMjU2MSwgMCwgNTA2NTcsIDIwNjEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTUwLCA1NzkwOSwgNTc5MDksIDIzMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMjYsIDAsIDAsIDAsIDAsIDAsIDEyMTMsIDAsIDEyMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCAwLCA0MjAsIDAsIDAsIDAsIDAsIDAsIDIzODUsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NDksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMzEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc0NywgMCwgMCwgMTc1MCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgMzIxMywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDU4NzU0LCA5NzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg2OCwgNTc5MDksIDAsIDAsIDM0MDQsIDAsIDAsIDAsIDAsIDAsIDM0MDcsIDAsIDM0MDksIDAsIDAsIDM0MTIsIDAsIDAsIDAsIDAsIDAsIDM0MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNzUwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzOTk3OTcsIDQzOTk3OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ2MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NjgsIDUyMSwgNTIxLCAzNDcxLCA1MjEsIDUyMSwgNTIxLCA2MDgxOCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODI5NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MzE0LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTgzMjUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA2MDg1NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4NjAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk1OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDYwNjY0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg4NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4OTYsIDU3OTA5LCA1NzkwOSwgNjA4OTksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwOTAyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDA4OSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDkzOCwgNTc5MzYsIDU3OTM2LCA2MDk0MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTU5LCAzMTYwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NjMsIDUyMSwgMzY2NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDYxMDE3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg1MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg1NywgNTc4ODYsIDU5ODU5LCA1Nzg4NiwgNTk4NjIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTAyOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTAzNSwgNTc4ODYsIDYxMDM3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNjEwNDYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkxNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkzNCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTQ5LCA1NzkzNiwgNjEwOTMsIDU3OTM2LCA2MTA5NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNzkxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzc5NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MDQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODE5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE1MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjExNTksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMTcyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkxNSwgNTc5MDksIDU3OTA5LCA1ODkyMiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgMTMzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1ODc3NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxMTM4LCAwLCAwLCAwLCAwLCAxNzExLCAwLCAwLCAwLCAwLCAxNzE4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ3LCAxMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTU1LCAxMTU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjM3LCAwLCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTk3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3ODIsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgMCwgNjgzLCA2ODQsIDAsIDAsIDAsIDAsIDY4OSwgMCwgMCwgMCwgMzY3LCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMwLCA1Nzg5NiwgNTMwLCA1Nzg5NiwgNTMwLCA1MzAsIDU3ODk2LCA1MzAsIDUzMCwgNTc5MTksIDU3ODk2LCA1MzAsIDUzMCwgNTc4OTYsIDU3ODk2LCA1Nzg5NiwgNTc5MTksIDU3ODg2LCA1ODI1OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MzE3LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzMzQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0ODEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDY4LCA1MjEsIDgzOSwgNTIxLCA1MjEsIDUyMSwgODk4LCAwLCA1ODI1OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MzE3LCAxNTU5NDEsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTksIDEyMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyOTk2NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MDgxMjgsIDAsIDAsIDAsIDEyMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDM2NDcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzY1MiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MjEsIDUyMSwgNTIxLCA1MjEsIDI0MjQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg5NSwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODQyLCA1Nzg4NiwgNjA4NDQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAxODM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzA3LCAxMzA4LCAwLCAwLCAxMTU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDEzMTksIDUyMSwgNTIxLCA1MjEsIDE5NTgsIDU4NzU0LCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDI5NjIsIDAsIDAsIDM4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMiwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDAsIDQyMSwgMCwgMzMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMywgMCwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNCwgNDI0LCAwLCAwLCAxMzEwNzIsIDQyNCwgMCwgMCwgMCwgNDI0LCAwLCA0NDAsIDAsIDAsIDQyNCwgMzM0LCA0NzAsIDQ3MCwgNDcwLCA0ODMsIDQ4MywgNDgzLCA0ODMsIDQ4MywgNDgzLCA0ODMsIDQ4MywgNDgzLCA0ODMsIDUwNCwgNTEyLCA1MTIsIDUxMiwgNTEyLCA1MTksIDUxMiwgNTEyLCA1MTIsIDUxOSwgNTEyLCA1MTIsIDUxMiwgNTEyLCA1MTIsIDUxMiwgNTI5LCA1Nzg5NSwgNTI5LCA1Nzg5NSwgNTI5LCA1MjksIDU3ODk1LCA1MjksIDUyOSwgNTc5MTgsIDU3ODk1LCA1MjksIDUyOSwgNTc4OTUsIDU3ODk1LCA1Nzg5NSwgNTc5MTgsIDU3ODk1LCA1Nzg5NSwgNTc4OTUsIDU3ODk1LCA1Nzg5NSwgNTc4OTUsIDU3ODk1LCA1NzkxOCwgNTc5MTgsIDU3ODk1LCA1Nzg5NSwgNTc5NDUsIDU3ODk1LCA1Nzg5NSwgNTc4OTUsIDU3ODk1LCA1Nzg5NSwgNTc4OTUsIDU3ODk1LCA1Nzk0NSwgNTc5NDUsIDU3ODk1LCA1Nzg5NSwgNTc4OTUsIDU3ODk1LCA1Nzk0NSwgNTc5NDUsIDU3ODk1LCA1MjksIDU3ODk1LCA1Nzg5NSwgNTc4OTUsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NDEsIDAsIDAsIDE3NDQsIDE3NDUsIDE3NDYsIDAsIDE3NDgsIDE3NDksIDAsIDAsIDAsIDgyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4NDIsIDUyMSwgODUxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg5OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEyNDQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMjQ4LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEyNTQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMjYwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTI2NCwgNTc5MDksIDU3OTM2LCA1Nzg4NiwgNTc4ODYsIDU4MjYxLCA1Nzg4NiwgNTgyNzAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMxOCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODMzNywgNTc5MDksIDU4MzQ2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg4NywgNTg4ODksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjYxLCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY2OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDY5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDExMzAsIDg5OSwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NDgwLCA1ODMxOCwgMTU1OTQxLCAxMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzY0LCAxNzY1LCAxNzY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzE5LCAyMzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzMxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzUwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzYwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4MjUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4MzcsIDU3ODg2LCA1Nzg4NiwgNTIxLCAxNDA4LCA1MjEsIDU4NzU0LCA5MDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NzcwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc4OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNDIsIDU5MzQzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNjAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNjcsIDU3ODg2LCA1Nzg4NiwgNTg4MzMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4NDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODQ3LCA1Nzg4NiwgNTA2NTcsIDU4NzU0LCA5NzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODY1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MTksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNDIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCAzMzcwLCA1Nzg4NiwgNTc4ODYsIDYwNzE3LCAwLCAwLCAwLCAwLCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAzNywgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MDMsIDAsIDE4MDUsIDAsIDAsIDAsIDE4MDcsIDAsIDczOSwgMCwgMCwgMCwgMCwgMTgzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgzNiwgMTkyNCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MzMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NDIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTk1MiwgMTk1NCwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODYxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MjEsIDU4NzU0LCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzI4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEwMzMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MDY1NywgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQyOCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDAsIDAsIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU4Mzk3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQzMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTcyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU4MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTkyLCA1OTU5NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDI0NzIsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4ODUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg4OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMjMyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDI0NjUsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODI0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODM2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTQ5MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjE1MDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1ODMsIDU5NTg0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDIyNTUsIDUyMSwgNTk5MjUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM1OCwgNTk5NTMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NzIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MzUsIDU3OTA5LCA1OTkzNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2NjAsIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjcxLCA1NzkzNiwgNjAwMDgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU5OCwgNTIxLCA1MjEsIDYwMDM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDU1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgMCwgMCwgNDEzMiwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMjc2OSwgMCwgMCwgMjc3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMjc3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTk0ODgsIDMxOTQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc5NSwgMCwgMCwgMCwgMCwgMjc5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgwMSwgMjgwMiwgMCwgMCwgMjgwNSwgMCwgMCwgMjgwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODI4LCAwLCAwLCAwLCAwLCA1MjEsIDI4MzIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODc4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM1NiwgNTIxLCA1MjEsIDUyMSwgMTM1OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODczLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODgwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4ODgsIDUyMSwgNTIxLCA1MjEsIDI4OTEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNTMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTQ5MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjE1MDEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDkyMSwgNTc5MzYsIDYwOTIzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MzAsIDU3OTM2LCA1NzkzNiwgNjA5MzIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgNTc5MDksIDYwMzA4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMzMSwgNTc5MzYsIDU3OTM2LCA2MDQwNywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDE1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQyMiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQzMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU3NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1ODAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTkwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1OTYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgMCwgOTAxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NjQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTM2LCA2MDQzNCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMzA5NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA2MDQ0MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDMxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCAzNjQ2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NTgsIDUyMSwgNTIxLCA1MjEsIDMxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMzAsIDMxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMywgMzM0LCAzMzUsIDAsIDAsIDAsIDAsIDAsIDMyMTEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzIxNSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTY3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTcyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMjQ2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTI0OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMjUzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTI2MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEyNjUsIDYwNjAxLCA1Nzg4NiwgNjA2MDMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA2MDgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MTYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MjEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2NTQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2NTAsIDU3OTA5LCA2MDY1MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY1NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY2NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY3MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA0MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDU0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDU4LCA2MDA1OSwgNjAwNjAsIDU3OTM2LCA2MDY5NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2OTksIDU3OTM2LCA2MDcwMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDcwNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAzMzc0LCAwLCAwLCAzMzc3LCAzMzc4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDYyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDgyMiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODI2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODM1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODg0NiwgNTc4ODYsIDUwNjU3LCA1ODc1NCwgOTc3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4NjIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4Mzk0LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQxMiwgNTc5MzYsIDU4NDIxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDQwODUsIDUyMSwgNDA4NywgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTE2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MzEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAzNjA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTk0LCAwLCAxMTk2LCAwLCAwLCAzNjcsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxOSwgMzYyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODI1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTIxLCA1MjEsIDM3ODcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNzk4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjExNDksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MzYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDU4NzU0LCA5NzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg3MCwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTE5OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgMzc3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDAyMiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMzc5LCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzk1NSwgNTIxLCAzOTU3LCAzOTU4LCA1MjEsIDM5NjAsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTMxNCwgNTc4ODYsIDYxMzE2LCA2MTMxNywgNTc4ODYsIDYxMzE5LCA1Nzg4NiwgNjEzMjEsIDYxNDg4LCA1Nzg4NiwgNjE0ODksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTQ5NiwgNTc5MDksIDYxNDk3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE1MDQsIDU3OTM2LCA2MTUwNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NjEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAxOSwgNTc5MzYsIDU3OTM2LCA1OTAyMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAzMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNDIyNCwgNjE1NjksIDYxNTcwLCA2MTU3MSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzMyLCAxMzM5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM1MiwgNTIxLCAxMzU0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDIyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDU3ODg2LCA2MDU2NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMwNywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODk2LCA1Nzg5NiwgNTc4OTYsIDU3ODk2LCA1Nzg5NiwgNTc4OTYsIDU3ODk2LCA1NzkxOSwgNTc5MTksIDU3ODk2LCA1Nzg5NiwgNTc5NDYsIDU3ODk2LCA1Nzg5NiwgNTc4OTYsIDU3ODk2LCA1Nzg5NiwgNTc4OTYsIDU3ODk2LCA1Nzk0NiwgNTc5NDYsIDU3ODk2LCA1Nzg5NiwgNTc4OTYsIDU3ODk2LCA1Nzk0NiwgNTc5NDYsIDU3ODk2LCA1MzAsIDU3ODk2LCA1Nzg5NiwgNTc4OTYsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMTIsIDAsIDAsIDAsIDIzMTUsIDAsIDAsIDAsIDAsIDAsIDIzMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3OTA5LCA1ODkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTEzOCwgMTcwNSwgMTcwNiwgMCwgMCwgMCwgMTcxMiwgMTcxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjg3LCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM2NywgMzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAwLCAwLCAwLCAwLCAwLCAxMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzgzLCAwLCAxMzkyNjQsIDE0NzQ1NiwgMCwgNDA1LCAwLCAwLCA0MDUsIDAsIDAsIDAsIDQzMSwgMTMxMDcyLCAwLCA0MzEsIDQzMSwgMCwgMCwgNDMxLCAwLCA0NDUsIDQzMSwgMCwgNDMxLCA0NzEsIDQ3MSwgNDcxLCA0ODQsIDQ4NCwgNDg0LCA0ODQsIDQ4NCwgNDg0LCA0ODQsIDQ4NCwgNDg0LCA0ODQsIDQ4NCwgNDg0LCA0ODQsIDQ4NCwgNDg0LCA1MzEsIDU3ODk3LCA1MzEsIDU3ODk3LCA1MzEsIDUzMSwgNTc4OTcsIDUzMSwgNTMxLCA1NzkyMCwgNTc4OTcsIDUzMSwgNTMxLCA1Nzg5NywgNTc4OTcsIDU3ODk3LCA1NzkyMCwgNTc4OTcsIDU3ODk3LCA1Nzg5NywgNTc4OTcsIDU3ODk3LCA1Nzg5NywgNTc4OTcsIDU3OTIwLCA1NzkyMCwgNTc4OTcsIDU3ODk3LCA1Nzk0NywgNTc4OTcsIDU3ODk3LCA1Nzg5NywgNTc4OTcsIDU3ODk3LCA1Nzg5NywgNTc4OTcsIDU3OTQ3LCA1Nzk0NywgNTc4OTcsIDU3ODk3LCA1Nzg5NywgNTc4OTcsIDU3OTQ3LCA1Nzk0NywgNTc4OTcsIDUzMSwgNTc4OTcsIDU3ODk3LCA1Nzg5NywgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc3NSwgMCwgMCwgMCwgMCwgMCwgMjc4MCwgMCwgMjc4MiwgMjc4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2NiwgMCwgMCwgMCwgMCwgMTI3MSwgNjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTQsIDAsIDY1NCwgMCwgMCwgMCwgMCwgODEzLCAwLCAwLCAwLCA2NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgMzY0NSwgNTIxLCA1MjEsIDUyMSwgMzY0OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzY1NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCA3MzMsIDY1NCwgMCwgMCwgNTIxLCA4MjksIDUyMSwgNTIxLCA1MjEsIDg0NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4ODUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1ODI0NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyNjMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMwNCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTgzMjMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzM5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5ODcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5OTk2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAzOTEsIDU3OTM2LCA2MDM5MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDIyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDI5LCA1NzkzNiwgNjAwMzEsIDU3OTM2LCA2MDAzNCwgNTc5MzYsIDU3OTM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzgwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTgzOTgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDE0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM5MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNzEwLCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgNTg0NTUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA4ODUsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMwNCwgNTc4ODYsIDU3ODg2LCAyOTMsIDExMzgsIDAsIDAsIDExNDIsIDAsIDAsIDExNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg4OCwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODQxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDUwNjU3LCA1ODc1NCwgOTc3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDYzOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTY1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAxMTU0LCAxMTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTMzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjAsIDAsIDAsIDc2MywgMCwgMCwgNzY3LCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgOTAxLCA1Nzg4NiwgNTg3NTcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg3NzEsIDU4Nzc4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NzkxLCA1Nzg4NiwgNTg3OTMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4MzEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDg0OSwgNTc4ODYsIDYwODUxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODI3OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzNTQsIDU3OTA5LCA1NzkwOSwgNTg5MDgsIDU3OTA5LCA1ODkxMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTIzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTM4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCA1Nzg4NiwgNTc5MzYsIDU4OTQ2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDY4LCA1NzkzNiwgNTc5MzYsIDYwMDcxLCA2MDA3MiwgNTc5MzYsIDI0MDQsIDUyMSwgMjczMSwgNTIxLCA1MjEsIDU5ODM1LCA1Nzg4NiwgNjAwODAsIDU3ODg2LCA1Nzg4NiwgMjczOSwgMjI2NiwgMCwgMjc0MCwgMjI2OSwgMCwgMCwgMCwgMCwgMCwgMCwgNDAxNCwgMCwgNDAxNiwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDQwMjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEzNzgsIDU3ODg2LCA1NzkzNiwgNTkwMzMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgMTMzMiwgNTIxLCAxMzg5LCA1MjEsIDUyMSwgNTg3NzEsIDU3ODg2LCA1Nzg4NiwgNTg4MjgsIDU3ODg2LCA1Nzg4NiwgMTEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE1NiwgMCwgMCwgMCwgMCwgMzE2MSwgMCwgMCwgMCwgMzE2MywgMCwgMTcyNCwgMTcyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM0MjkxMiwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTkzMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTk1NywgNTIxLCA1ODc1NCwgMTk2MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMyMSwgNTkzMjIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMyOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMzkxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTQwNSwgNTc5MzYsIDU3OTM2LCA1MDY1NywgMjA2MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQyMSwgNTk0MjIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQyOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDAsIDAsIDc0MSwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1MjAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDczLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTUwMSwgNTc5MDksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4MzIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDg0NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODQzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MDY1NywgNTg3NTQsIDk3NywgNTc5MDksIDU4ODUyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODY2LCA1ODg3MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU0MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU2MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTY5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU5NywgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDAsIDI4OTUsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzU5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjM5NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE2MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk4NjYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg3OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODg0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4OTAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEwMzAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEwMzYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMzkzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTQwNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTU1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NjcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk3MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzY2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM2OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDYwMzczLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDQwODMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU5OTc5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDMwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDM4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNTAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA1NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDksIDAsIDAsIDU3OTM2LCA1NzkzNiwgNjAwNjIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEwOSwgMCwgMCwgNjAyNTgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg2NSwgMzE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxODAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDMxODgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTMzMywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg1OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1NzkwOSwgNTc5MDksIDYwNjI4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDcwLCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjc3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMjcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA5OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNzEsIDAsIDAsIDAsIDUyMSwgMzE3NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMjQ3MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzQ5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDM5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTQ0MSwgNTc4ODYsIDYxNDQzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNDU0LCA1NzkwOSwgNjE0NTYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMzYwNywgMCwgMzYwOSwgMCwgMCwgMCwgMzYxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTczMywgMCwgMCwgMCwgMTczNiwgMCwgMCwgMTczOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM1ODcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzkyNjQsIDE0NzQ1NiwgMCwgMCwgMzM1ODcyLCAwLCAwLCA2MTQ2NywgNTc5MzYsIDYxNDY5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEzNCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDYxNDg1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NDYsIDU3ODg2LCA1OTg0OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjczLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDM4OCwgMzQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzUxMTA0LCAwLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MSwgMCwgMCwgMCwgNDU2LCA0NzIsIDQ3MiwgNDcyLCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDUwNSwgNTA1LCA1MDUsIDUwNSwgNTA1LCA1MDUsIDUwNSwgNTA1LCA1MDUsIDUwNSwgNTA1LCA1MDUsIDUwNSwgNTA1LCA1MDUsIDUzMiwgNTc4OTgsIDUzMiwgNTc4OTgsIDUzMiwgNTMyLCA1Nzg5OCwgNTMyLCA1MzIsIDU3OTIxLCA1Nzg5OCwgNTMyLCA1MzIsIDU3ODk4LCA1Nzg5OCwgNTc4OTgsIDU3OTIxLCA1Nzg5OCwgNTc4OTgsIDU3ODk4LCA1Nzg5OCwgNTc4OTgsIDU3ODk4LCA1Nzg5OCwgNTc5MjEsIDU3OTIxLCA1Nzg5OCwgNTc4OTgsIDU3OTQ4LCA1Nzg5OCwgNTc4OTgsIDU3ODk4LCA1Nzg5OCwgNTc4OTgsIDU3ODk4LCA1Nzg5OCwgNTc5NDgsIDU3OTQ4LCA1Nzg5OCwgNTc4OTgsIDU3ODk4LCA1Nzg5OCwgNTc5NDgsIDU3OTQ4LCA1Nzg5OCwgNTMyLCA1Nzg5OCwgNTc4OTgsIDU3ODk4LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTYyNzUsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTI5OTIsIDAsIDAsIDAsIDAsIDAsIDIxMjk5MiwgMjEyOTkyLCAyMTI5OTIsIDIxMjk5MiwgMjEyOTkyLCA2NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NSwgMCwgNjU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MjY0LCA1Nzg4NiwgNTc4ODYsIDU4MjgwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODM0MCwgNTc5MDksIDU3OTA5LCA1ODM1NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDQ0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0NjQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTIxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTEzOCwgMTcwNSwgMCwgMCwgMCwgMCwgMTcxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcyMiwgMCwgMTI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5MywgMCwgMCwgMCwgMCwgMCwgMTI5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxNSwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTg5MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzNzIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzkxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM5OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU5ODE5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzU3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDUyMSwgNTIxLCA1MjEsIDU4NzU0LCA5MDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc3MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODQ4LCA1MDY1NywgNTg3NTQsIDk3NywgNTg4NTEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4NTgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg2NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4MzAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MzgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MDY1NywgNTg3NTQsIDk3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODY3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDYzMSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2NDUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5ODUsIDU3OTA5LCA1NzkwOSwgNTk5ODgsIDU5OTg5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDA1LCA1NzkzNiwgMCwgMCwgMTc1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM4LCAzMzksIDAsIDUyMSwgNTg3NTQsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMyMywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMzQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MzcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDU4NzU0LCA5NzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDU4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDY0LCA1NzkwOSwgNjEwNjYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDUwNjU3LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MjMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDM0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMTc4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTE5MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxMTM4LCAxNzA1LCAwLCAwLCAwLCAwLCAxNzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMjk1LCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1NDEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1NTIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMjc5LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDAsIDAsIDAsIDM5NDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDIyODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyOTgsIDIyOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCAwLCAwLCAwLCAyMzU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzI4LCA1MjEsIDI0MTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg2NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODQ0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgyNCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTI4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MzMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMTEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAxNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk4NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAzMzgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0Mjg0NDE2LCAwLCAwLCA1Nzg4NiwgNjA4MjksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzY2LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MTMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU2MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzOTUxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTMxMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg3NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODgwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MDY1NywgNTg3NTQsIDk3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODU5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg2MywgNTc5MDksIDU3OTA5LCA1ODg3NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMzI2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTM0MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMDQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY4OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE1MDgsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCAxMzMzLCA1MjEsIDUyMSwgMTY5OCwgNTIxLCA1ODc3MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkwNDcsIDU3ODg2LCAxMTM4LCAwLCAwLCAxNzA4LCAwLCAwLCAwLCAwLCAxNzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg4MywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM0NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzY0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAzNDEsIDM0MiwgMzQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDM0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCA0MDEzLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDAyNywgNTIxLCA1MjEsIDQwMjksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNzYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5Mzg1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzOTYsIDU5Mzk4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMzg5LCAzOTAsIDM5MiwgMzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDEsIDAsIDAsIDAsIDAsIDM0MSwgMCwgMCwgMCwgMzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzksIDc0OCwgNzQ5LCA3NTAsIDAsIDAsIDAsIDAsIDAsIDc1NiwgNzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjksIDc3MCwgMCwgNzcyLCAwLCAwLCAwLCAzODksIDAsIDAsIDAsIDAsIDAsIDAsIDM0MiwgMCwgMCwgMCwgMzg5LCAwLCAwLCAwLCAwLCAwLCAzNDIsIDM4OSwgMCwgMCwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDAsIDQyMiwgMCwgMCwgMCwgMCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAyNDU3NjAsIDAsIDAsIDI0NTc2MCwgMjQ1NzYwLCAyNDU3NjAsIDAsIDAsIDAsIDAsIDAsIDI0NTc2MCwgMCwgMjQ1NzYwLCAyNDU3NjAsIDAsIDAsIDAsIDI0NTc2MCwgMjQ1NzYwLCAwLCAwLCAyNDU3NjAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMzQxLCAwLCAwLCAwLCA0NDYsIDAsIDM0MSwgMCwgNDczLCA0NzMsIDQ3MywgNDczLCA0ODksIDQ4OSwgNDg5LCA0ODksIDQ4OSwgNDg5LCA0ODksIDQ4OSwgNDg5LCA0NzMsIDQ3MywgNDczLCA0NzMsIDQ3MywgNDczLCA0NzMsIDQ3MywgNDczLCA0NzMsIDQ3MywgNDczLCA0NzMsIDQ3MywgNDczLCA1MzMsIDU3ODk5LCA1MzMsIDU3ODk5LCA1MzMsIDUzMywgNTc4OTksIDUzMywgNTMzLCA1NzkyMiwgNTc4OTksIDUzMywgNTMzLCA1Nzg5OSwgNTc4OTksIDU3ODk5LCA1NzkyMiwgNTc4OTksIDU3ODk5LCA1Nzg5OSwgNTc4OTksIDU3ODk5LCA1Nzg5OSwgNTc4OTksIDU3OTIyLCA1NzkyMiwgNTc4OTksIDU3OTM1LCA1Nzk0OSwgNTc5MzUsIDU3OTM1LCA1NzkzNSwgNTc5MzUsIDU3OTM1LCA1NzkzNSwgNTc5MzUsIDU3OTQ5LCA1Nzk0OSwgNTc5MzUsIDU3OTM1LCA1NzkzNSwgNTc5MzUsIDU3OTQ5LCA1Nzk0OSwgNTc5MzUsIDUzMywgNTc4OTksIDU3ODk5LCA1Nzg5OSwgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ0MDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzkyNjQsIDE0NzQ1NiwgMCwgMCwgMzQ0MDY0LCAwLCAwLCAwLCA3MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMxLCAzMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMiwgMCwgNjYwLCAwLCA3NzksIDAsIDAsIDAsIDAsIDAsIDc3OSwgODAyLCAwLCA4MDIsIDgwMCwgMCwgMCwgMCwgODE0LCAwLCAwLCAwLCA2NTYsIDgxNywgMCwgNzc5LCAwLCAwLCAwLCAwLCAwLCA4MjMsIDAsIDAsIDAsIDAsIDc4MywgNjU2LCA4MjcsIDAsIDUyMSwgODMwLCA1MjEsIDUyMSwgNTIxLCA4NDYsIDUyMSwgNTIxLCA4NjIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgODc2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg5NCwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTgyNDgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MjY1LCA1Nzg4NiwgNTc4ODYsIDU4MjgxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyOTUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMxMywgNTc4ODYsIDU3ODg2LCAwLCA1NzkwOSwgNTc5MDksIDU4MzI0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODM0MSwgNTc5MDksIDU3OTA5LCA1ODM1NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDc2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ4NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDk2LCA1OTQ5OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU4MzcxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzODksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTgzOTksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDE2LCA1NzkzNiwgNTc5MzYsIDU4NDMyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0NDYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA0MTIsIDU3OTM2LCA1NzkzNiwgNjA0MTYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDI1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQyOCwgNjA0MjksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTU1OTQxLCAxMTM4LCAwLCAwLCAxMTQzLCAwLCAwLCAxMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzODgxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgwMiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MDYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyOTYyLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjIzLCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1ODQ2NCwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDMwMSwgMCwgMCwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDAsIDAsIDAsIDAsIDAsIDEyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MCwgNTc5MDYsIDU0MCwgNTc5MDYsIDU0MCwgNTQwLCA1NzkwNiwgNTQwLCA1NDAsIDU3OTI5LCA1NzkwNiwgNTQwLCA1NDAsIDU3OTA2LCA1NzkwNiwgNTc5MDYsIDU3OTI5LCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgOTAxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg3NzMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM0OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM2MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Nzk3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5Mzc0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5Mzg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzOTcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTQ0NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNDU3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgMzA5NSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDYwNDQyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAzMTAwLCAzMTAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjI3LCAwLCAzNzc2LCAwLCAwLCAwLCAwLCAzNzgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzgzLCAwLCA1MjEsIDUyMSwgNTIxLCAzNzg1LCAwLCAwLCAwLCAwLCAxODE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjE2NDUsIDIyMTY0NSwgMjIxNjQ1LCAyMjE2NDUsIDUyMSwgNTg3NTQsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMxNiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMyNywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzQ1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzU2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg3NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDUwNjU3LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MTYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MjcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MjksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ0MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDU5LCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNTIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNTcsIDU5ODkyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTkxMCwgNTc5MDksIDU5OTEyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDYwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTgxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTk5MywgNTc5MzYsIDU5OTk1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjg2LCA2MDY4NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjkwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA2NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgyMCwgMCwgMCwgMCwgMCwgMjgyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgzMSwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM5NjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEzMjAsIDU3ODg2LCA1MjEsIDI4NDIsIDUyMSwgNTIxLCAyODQ1LCAyODQ2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg1MSwgNTIxLCAyODUzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NTcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NjMsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjUxLCA1Nzg4NiwgNTc4ODYsIDYwMjU0LCA2MDI1NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NzgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDQ1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDU2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMzM2LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTM1MiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODcxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODc5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg4NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTA0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzUzLCAxMzU1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDYwMjYwLCA1Nzg4NiwgNjAyNjIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI2NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNzIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjgxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzczLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTQwMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI4OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI5NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMzAsIDU3OTA5LCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMxOCwgNTc5MDksIDU3OTA5LCA2MDMyMSwgNjAzMjIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMjcsIDU3OTA5LCA2MDMyOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNDIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM1MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNTcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzMzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMzOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNDgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzU2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MzIsIDU3OTA5LCA1NzkwOSwgNjA2MzUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjQ2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4ODksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTA2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MTAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjExOTIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM4MywgNTc5MzYsIDU3OTM2LCA2MDM4NiwgNjAzODcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAzOTIsIDU3OTM2LCA2MDM5NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMzk4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQwNCwgMCwgMCwgMzEzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0NSwgMCwgMzE0NywgMCwgMCwgMCwgMzE1MCwgMCwgMCwgMzE1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUwNTYwLCA0NTA1NjAsIDAsIDAsIDQ1MDU2MCwgNDUwNTYwLCA0NTA1NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNzQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg4MiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODkyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzE5MiwgNTIxLCA1MjEsIDMxOTUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjA1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ0MywgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDQ4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTA2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NDcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzIxNCwgNTIxLCA1MjEsIDMyMTcsIDUyMSwgNTIxLCAzMjIwLCAwLCAwLCA2MDU2NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgzMDIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1ODMsIDU3ODg2LCA1Nzg4NiwgNjA1ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTk3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NzEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NzcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDI5NjIsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAzNDMxLCAwLCAwLCA1MjEsIDUyMSwgMzQzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NTMsIDUyMSwgMzQ1NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzM0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM1OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQxOSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MjYsIDUyMSwgMjQyOCwgNTIxLCAyNDMxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDQ0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzOTIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDYxLCA1MjEsIDUyMSwgMzQ2MywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNjA4MjAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM3OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzODQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5Mzk0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk0MDAsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4ODgsIDU3OTA5LCA1NzkwOSwgNjA4OTAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNjA5MDQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDM2MDEsIDUyMSwgNTc4ODYsIDYwOTQ4LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAzMDYsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNjY0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDIwLCA2MTAyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDI1LCA2MTAyNiwgNTc5MDksIDU3OTA5LCA2MTA0OSwgNjEwNTAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTA1NCwgNjEwNTUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNTksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNjUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NjAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NjYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNDEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNTMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA2MTA5NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMzc2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjM5NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MDYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM3OTIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg0OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NTQsIDU3ODg2LCA1OTg1NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNjcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE2MywgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNTc4ODYsIDYxMTU0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjExNzMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTI0MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEyNTgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDYxMDc1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEwODcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA0MTM3LCA1MjEsIDQxMzgsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDUyMSwgNTIxLCAzOTQ5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM5NTQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzk1OSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNjEzMDgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTMxMywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMzE4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NzMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MTgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NjksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMTIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMjksIDU3OTM2LCA1NzkwOSwgNTc5MDksIDYxMzI0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzMjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTMzNCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA2MTM0MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMzQ1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEzNTAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTYyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMzYwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMzg0LCA1Nzg4NiwgNTc4ODYsIDYxMzg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTM5OCwgNTc5MDksIDU3OTA5LCA2MTQwMCwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAzNjAwLCA1MjEsIDUyMSwgNjA5NDcsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxNywgMzYxOCwgMCwgMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxNDEyLCA1NzkzNiwgNTc5MzYsIDYxNDE0LCA1NzkzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NzIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ0OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MzIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTUzMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgNTIxLCA0MTk1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA2MTU0MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA2MTU0NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA2MTU1MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDAsIDAsIDUyMSwgNTIxLCA0MTk2LCA0MTk3LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA2MTU0NCwgNjE1NDUsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA2MTU0OCwgNjE1NDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA2MTU1MiwgNjE1NTMsIDU3OTM2LCA1NzkzNiwgMCwgNTc4ODYsIDU3OTA5LCA1NzkzNiwgNDIzMiwgNjE1NzcsIDYxNTc4LCA2MTU3OSwgNTIxLCA1Nzg4NiwgNTc5MDksIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAwLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDI0NTc2MCwgMjQ1NzYwLCAyNDU3NjAsIDI0NTc2MCwgMjQ1NzYwLCAyNDU3NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NTc2MCwgMjQ1NzYwLCAyNDU3NjAsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAyNDU3NjAsIDI0NTc2MCwgMCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAyNDU3NjAsIDI0NTc2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDU3NjAsIDAsIDAsIDI0NTc2MCwgMCwgMCwgMjQ1NzYwLCAwLCAwLCAyNDU3NjAsIDAsIDI0NTc2MCwgMjQ1NzYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzcsIDAsIDAsIDAsIDM0OCwgMzQ3LCAxMzEwNzIsIDM0NiwgMzQ3LCAzNDcsIDM0OCwgMzQ2LCAzNDcsIDAsIDM0NiwgMzQ3LCA0NTAsIDQ1NywgNDc0LCA0NzQsIDQ3NCwgNDg1LCA0ODUsIDQ4NSwgNDkxLCA0ODUsIDQ4NSwgNDkxLCA0OTEsIDQ4NSwgNDkxLCA1MDYsIDUwNiwgNTA2LCA1MDYsIDUwNiwgNTA2LCA1MDYsIDUwNiwgNTA2LCA1MDYsIDUwNiwgNTA2LCA1MDYsIDUwNiwgNTA2LCA1MzQsIDU3OTAwLCA1MzQsIDU3OTAwLCA1MzQsIDUzNCwgNTc5MDAsIDUzNCwgNTM0LCA1NzkyMywgNTc5MDAsIDUzNCwgNTM0LCA1NzkwMCwgNTc5MDAsIDU3OTAwLCA1NzkyMywgNTc5MDAsIDU3OTAwLCA1NzkwMCwgNTc5MDAsIDU3OTAwLCA1NzkwMCwgNTc5MDAsIDU3OTIzLCA1NzkyMywgNTc5MDAsIDU3OTAwLCA1Nzk1MCwgNTc5MDAsIDU3OTAwLCA1NzkwMCwgNTc5MDAsIDU3OTAwLCA1NzkwMCwgNTc5MDAsIDU3OTUwLCA1Nzk1MCwgNTc5MDAsIDU3OTAwLCA1NzkwMCwgNTc5MDAsIDU3OTUwLCA1Nzk1MCwgNTc5MDAsIDUzNCwgNTc5MDAsIDU3OTAwLCA1NzkwMCwgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgNjM5LCAwLCAwLCAwLCAwLCA2NDQsIDY0NSwgNjQ2LCA2NDcsIDY0OCwgNjQ5LCA2NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NSwgNjY2LCAwLCA2NjgsIDY2OSwgMCwgMCwgMCwgMCwgMCwgNjc1LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4ODEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM3NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTkxNCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA3MDksIDAsIDAsIDcxMiwgMCwgNzE0LCAwLCA3MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk5NzEyLCAwLCAwLCAwLCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCA0MzU4MTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDEsIDAsIDMwMiwgMzA1LCAwLCAzMDYsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDQ5MjMzOTIsIDAsIDAsIDAsIDAsIDc1NywgMCwgMCwgNzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODUsIDAsIDAsIDAsIDAsIDAsIDc5NiwgMCwgMCwgNjg1LCAwLCAwLCAwLCA3NTcsIDAsIDAsIDAsIDAsIDAsIDI3ODUyOCwgMjc4NTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTc2LCAwLCAwLCAwLCAwLCAwLCA2ODUsIDgxNiwgODE2LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgODM2LCA4NDAsIDg0MywgNTIxLCA4NTIsIDUyMSwgNTIxLCA1MjEsIDg2OCwgODcwLCA4NzMsIDUyMSwgNTIxLCA1MjEsIDg4NiwgODkwLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg3MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODkyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM3MiwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4MjU1LCA1ODI1OSwgNTgyNjIsIDU3ODg2LCA1ODI3MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyODcsIDU4Mjg5LCA1ODI5MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgzMDUsIDU4MzA5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODMzMSwgNTgzMzUsIDU4MzM4LCA1NzkwOSwgNTgzNDcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzYzLCA1ODM2NSwgNTgzNjgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzgxLCA1ODM4NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTgzOTYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDA2LCA1ODQxMCwgNTg0MTMsIDU3OTM2LCA1ODQyMiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MzgsIDU4NDQwLCA1ODQ0MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NjMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk3MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5ODksIDU3OTM2LCA1ODQ1NiwgNTg0NjAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDgzNiwgMTEyNywgNTIxLCA4ODYsIDg5MCwgMTEzMSwgMCwgNTg0NzYsIDU4MjU1LCA1Nzg4NiwgNTgzMDUsIDU4MzA5LCA1ODQ4MSwgMTU1OTQxLCAxMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDA2NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCA1NDA2NzIsIDAsIDAsIDEzNjYsIDUyMSwgNTIxLCAxMzcwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM4MSwgNTIxLCA1MjEsIDEzODgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTQwMiwgNTIxLCA1MjEsIDUyMSwgMCwgMjg5NSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNDgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNTYsIDU3ODg2LCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgOTAxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Nzk1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc5OCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODA1LCA1Nzg4NiwgNTc4ODYsIDU4ODA5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODIwLCA1Nzg4NiwgNTc4ODYsIDU4ODI3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODk3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MTgsIDU3OTA5LCA1NzkwOSwgNTk5MjEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg4NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4OTgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkwMywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDgwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU4OTk0LCA1NzkzNiwgNTc5MzYsIDU4OTk4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDEwLCA1NzkzNiwgNTc5MzYsIDU5MDE3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMzEsIDUyMSwgMTg5NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTAzLCA1MjEsIDUyMSwgNTIxLCAxOTA3LCA1MjEsIDUyMSwgMTkxMiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ0NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NTgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgMCwgNTc4ODYsIDU5MzA4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMTUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE2NCwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5MzM3LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNDYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzUwLCA1Nzg4NiwgNTc4ODYsIDU5MzU1LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjExNjAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMTY4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDUwNjU3LCAwLCA1NzkwOSwgNTk0MDgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQxNSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDM3LCA1NzkzNiwgNTk1MDQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUxMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTMzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjgxLCA1NzkzNiwgNTc5MzYsIDYwNjg0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY5NSwgNTc5MzYsIDAsIDAsIDAsIDAsIDIzMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MjI1NiwgMzUyMjU2LCAzNTIyNTYsIDM1MjI1NiwgNTIxLCA1MjEsIDUyMSwgMjQzOCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg2NSwgNTIxLCAyNzk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzgxLCAyODk0LCA1MjEsIDUyMSwgMCwgMCwgMCwgMjg5NiwgMCwgMTk2MSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM5MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAyMDYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk3NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA0MzcsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcyNywgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNzg5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA2MTE0NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMTUxLCA1Nzg4NiwgNjEyMzksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEyNDUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTI1MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMjU1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMjYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDAsIDAsIDQxNjYsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU3NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDM3NjYsIDAsIDAsIDAsIDAsIDAsIDM3NjksIDU3OTM2LCA1NzkzNiwgNjEyNjcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTI3MSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTI3NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4ODAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4OTEsIDUyMSwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM5NTIsIDUyMSwgNTIxLCA1MjEsIDM5NTYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMzExLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTMxNSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTM4NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjE0MDEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNDMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTMyNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzMzEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEzNDMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMzQ3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTAyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjgsIDAsIDc4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1MjEsIDU3ODg2LCA1NzkwOSwgNTc5MzYsIDQyMjgsIDYxNTczLCA2MTU3NCwgNjE1NzUsIDUyMSwgNTc4ODYsIDU3OTA5LCA1NzkzNiwgNTIxLCA1Nzg4NiwgNTc5MDksIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTEsIDAsIDAsIDAsIDM5NSwgMzkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjMsIDM2NCwgMzY1LCAzNjYsIDAsIDAsIDM2NywgMCwgMjk1LCAwLCAwLCAzNDksIDAsIDQwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDcsIDAsIDM0OSwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NDMsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODg3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAwLCA1MDcsIDUwNywgNTA3LCA1MDcsIDUwNywgNTA3LCA1MDcsIDUwNywgNTA3LCA1MDcsIDUwNywgNTA3LCA1MDcsIDUwNywgNTA3LCA1MzUsIDU3OTAxLCA1MzUsIDU3OTAxLCA1MzUsIDUzNSwgNTc5MDEsIDUzNSwgNTM1LCA1NzkyNCwgNTc5MDEsIDUzNSwgNTM1LCA1NzkwMSwgNTc5MDEsIDU3OTAxLCA1NzkyNCwgNTc5MDEsIDU3OTAxLCA1NzkwMSwgNTc5MDEsIDU3OTAxLCA1NzkwMSwgNTc5MDEsIDU3OTI0LCA1NzkyNCwgNTc5MDEsIDU3OTAxLCA1Nzk1MSwgNTc5MDEsIDU3OTAxLCA1NzkwMSwgNTc5MDEsIDU3OTAxLCA1NzkwMSwgNTc5MDEsIDU3OTUxLCA1Nzk1MSwgNTc5MDEsIDU3OTAxLCA1NzkwMSwgNTc5MDEsIDU3OTUxLCA1Nzk1MSwgNTc5MDEsIDYxNiwgNTc5MDEsIDU3OTY3LCA1Nzk2NywgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM1MTEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNywgMCwgMCwgMCwgNjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzAwLCAwLCA1NzkwOSwgNTc5MDksIDU4MzcyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzOTAsIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTg0MDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0NDcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MTcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MjUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMzg2NCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgNTc5MzYsIDU3OTM2LCA1ODQ2NSwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMjUsIDAsIDAsIDAsIDAsIDEyNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAwLCAwLCAwLCAwLCAxMjAzLCAxMTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjczLCAxMTYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDU4NzU0LCA5MDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NzYwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc3NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Nzg0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg3MywgNTk4NzQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODgxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDk3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODc5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg5NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjU2LCA1NzkwOSwgNTc5MDksIDYwNjU5LCA1NzkwOSwgNTc5MDksIDYwNjYyLCA2MDY2MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAxNzU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzcsIDAsIDAsIDAsIDE3ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQxOCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQyMywgNTIxLCAyNDI1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzc5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzOTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxNDA1LCA1MjEsIDUyMSwgMjg2OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQzNSwgMjQzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA0MTEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUyOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgMzQzMiwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM5OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDM4NzIsIDAsIDAsIDAsIDAsIDAsIDUyMSwgMzg3NSwgNTIxLCA1MjEsIDM4NzcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDYxMjM0LCA1Nzg4NiwgNTc4ODYsIDYxMjM2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjYzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjc5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMjY2LCA1NzkzNiwgNTc5MzYsIDYxMjY4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDM5NDQsIDAsIDAsIDAsIDAsIDAsIDQxNzc5MiwgMCwgNDE3NzkyLCAwLCAwLCAwLCAwLCAzMDksIDAsIDAsIDAsIDAsIDAsIDQxNzc5MiwgMCwgNDE3NzkyLCAwLCAwLCAwLCAwLCAxMzkyNjQsIDE0NzQ1NiwgNDE3NzkyLCAwLCAwLCAwLCA0MTc3OTIsIDAsIDAsIDAsIDAsIDQxNzc5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE3NzkyLCAwLCAwLCA0MTc3OTIsIDAsIDAsIDQxNzc5MiwgMCwgNDE3NzkyLCA0MTgxMDAsIDM5NDYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM4MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzOTEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA3ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NywgMCwgNzg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjAsIDAsIDAsIDAsIDAsIDExNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMzNTIzMSwgMjMzNTE5NywgMjMzNTIzMSwgMjMzNTIzMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyNjYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzQyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4OTEsIDU3OTA5LCA2MDg5MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMTksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAyNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1ODc1NCwgMTk2MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAyNTU3LCAyOTYyLCAwLCAwLCA1MDY1NywgMjA2MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNjgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQwOCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDIxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc4ODYsIDYxMDI4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDUsIDAsIDAsIDAsIDAsIDAsIDM1MiwgMzUwLCAxMzEwNzIsIDAsIDM1MCwgMzUwLCAzNTIsIDAsIDM1MCwgMCwgMCwgMzUwLCAzNTIsIDM1MCwgMCwgMCwgMCwgMzUwLCAzNTAsIDM1MCwgMzUwLCAzNTAsIDM1MCwgMzUwLCAzNTAsIDQ5OCwgMzUwLCAzNTAsIDM1MCwgMzUwLCAzNTAsIDM1MCwgMzUwLCAzNTAsIDM1MCwgMzUwLCAzNTAsIDM1MCwgMzUwLCAzNTAsIDM1MCwgNTM2LCA1NzkwMiwgNTM2LCA1NzkwMiwgNTM2LCA1MzYsIDU3OTAyLCA1MzYsIDUzNiwgNTc5MjUsIDU3OTAyLCA1MzYsIDUzNiwgNTc5MDIsIDU3OTAyLCA1NzkwMiwgNTc5MjUsIDU3OTAyLCA1NzkwMiwgNTc5MDIsIDU3OTAyLCA1NzkwMiwgNTc5MDIsIDU3OTAyLCA1NzkyNSwgNTc5MjUsIDU3OTAyLCA1NzkwMiwgNTc5NTIsIDU3OTAyLCA1NzkwMiwgNTc5MDIsIDU3OTAyLCA1NzkwMiwgNTc5MDIsIDU3OTAyLCA1Nzk1MiwgNTc5NTIsIDU3OTAyLCA1NzkwMiwgNTc5MDIsIDU3OTAyLCA1Nzk1MiwgNTc5NTIsIDU3OTAyLCA1MzYsIDU3OTAyLCA1NzkwMiwgNTc5MDIsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc0LCAwLCAwLCAwLCAwLCAwLCAwLCA2NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OCwgNzk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgODM3LCA1MjEsIDUyMSwgNTIxLCA4NTMsIDg1NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg3OCwgODgwLCA1MjEsIDUyMSwgODkxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU4MjUwLCAwLCA3NTEsIDAsIDAsIDgwNCwgMCwgMCwgMCwgMCwgMCwgODA0LCAwLCA2NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg3OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg4NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTIzOCwgNTgyNTYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MjcyLCA1ODI3NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODI5NywgNTgyOTksIDU3ODg2LCA1Nzg4NiwgNTgzMTAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTgzMjYsIDU4MzMyLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODM0OCwgNTgzNTIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEzMzAsIDU3OTA5LCA2MTMzMiwgNjEzMzMsIDU3OTA5LCA2MTMzNSwgNTc5MDksIDYxMzM3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMzQ2LCA1NzkzNiwgNjEzNDgsIDYxMzQ5LCA1NzkzNiwgNjEzNTEsIDU3OTM2LCA2MTM1MywgNTc5MDksIDU3OTA5LCA1ODM3MywgNTgzNzUsIDU3OTA5LCA1NzkwOSwgNTgzODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDAsIDAsIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU4NDAxLCA1ODQwNywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0MjMsIDU4NDI3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDQ4LCA1ODQ1MCwgNTc5MzYsIDAsIDQxNjUsIDAsIDQxNjcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCAxNjk1LCA1MjEsIDE2OTcsIDUyMSwgNTIxLCA1OTA0NCwgNTc4ODYsIDU3ODg2LCA1OTA0NiwgNTc4ODYsIDU3ODg2LCAxMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzIwLCAwLCAwLCA1NzkzNiwgNTg0NjEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDgzNywgNTIxLCA4ODAsIDUyMSwgODkxLCA1MjEsIDAsIDU3ODg2LCA1ODI1NiwgNTgyOTksIDU3ODg2LCA1ODMxMCwgNTc4ODYsIDE1NTk0MSwgMTEzOCwgMCwgMzAxLCAwLCAwLCAzMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjIsIDAsIDEyMjQsIDAsIDAsIDAsIDAsIDEyMjksIDAsIDAsIDAsIDAsIDEyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4NzQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg3OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg4NywgNTIxLCA1MjEsIDYxMjMzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEyMzcsIDU3ODg2LCAxNDA2LCA1MjEsIDUyMSwgNTg3NTQsIDkwMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NzYxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg3OTIsIDU4Nzk0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyNzMsIDU4Mjc3LCA1ODI4MywgNTc4ODYsIDU4Mjg4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MzA2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgNTc5MDksIDU3OTA5LCA1ODMyOCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzQ5LCA1ODM1MywgNTgzNTksIDU3OTA5LCA1ODM2NCwgNTc4ODYsIDU4ODMyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODQ0LCA1ODg0NSwgNTc4ODYsIDU3ODg2LCA1MDY1NywgNTg3NTQsIDk3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODU2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDE1LCA1NzkzNiwgNTc5MzYsIDU4NDMxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkxMywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTI3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTM5LCA1ODk0MCwgNTc5MDksIDU3OTA5LCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTEyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTIzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDIxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAyNiwgNTc5MzYsIDYwMDI4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTUwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5ODEsIDU4OTgzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTIwMiwgNTc5MzYsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc5MzYsIDU5MDM0LCA1OTAzNSwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgMTY5NiwgNTIxLCA1MjEsIDE2OTksIDU3ODg2LCA1Nzg4NiwgNTkwNDUsIDU3ODg2LCA1Nzg4NiwgNTkwNDgsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA3OTA0LCA1MDc5MDQsIDUwNzkwNCwgNTA3OTA0LCAwLCAxNzczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODM3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODk1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTk1NSwgNTIxLCA1MjEsIDUyMSwgNTg3NTQsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMxMywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg4MTMsIDU3ODg2LCA1ODgxNSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4ODI4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMzOCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM5OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQxMywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDkwOSwgNTc5MzYsIDU3OTM2LCA1NzkwOSwgNTk0MzgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTM0LCAwLCAwLCAwLCAyMzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNTgsIDAsIDIzNjAsIDIzNjEsIDIzNjIsIDAsIDIzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzIsIDAsIDAsIDAsIDAsIDIzNzcsIDIzNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NzE2LCA0OTcxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI3NjgwLCAzMjc2ODAsIDMyNzY4MCwgMzI3NjgwLCAyMzgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzg4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyMzk1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MDUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTE4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDM5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ0NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzgwMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAyNzQ1LCAyNzQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzU5Mjk2LCAzNjcsIDAsIDAsIDAsIDUyMSwgNTIxLCAyODQzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg0OCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NjQsIDUyMSwgNTIxLCA1MjEsIDAsIDI4OTUsIDAsIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNDcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDU4NzU0LCA5NzcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDg3LCA1OTQ4OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM4NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM4OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAxNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQwNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDMzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTI2OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEyNzgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNDQ2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTM3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDEzODUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3OTM2LCA2MTUzNCwgNTc5MzYsIDU3OTM2LCA0MTkyLCAwLCA0MTk0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCA0MTkzLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCA0MjExLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1MjEsIDU3ODg2LCA1NzkwOSwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTMzNSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzQ1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzYxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyNDYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTkxMSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTI2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDAsIDAsIDAsIDM3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc4LCAwLCAwLCAwLCAwLCAzNzAsIDAsIDAsIDAsIDAsIDAsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQ4MjUwODgsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDUxNzczNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDQzNTgxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgMCwgMzAyLCAwLCAwLCAzMDYsIDAsIDAsIDAsIDMwNiwgMCwgMCwgMCwgNDkzMTU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzEsIDAsIDM4NywgMCwgMzUzLCAwLCAwLCAwLCAwLCAwLCAzOTYsIDM5NywgMCwgMzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTgsIDAsIDAsIDQwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU3MDU2LCA1NTcwNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3MCwgMzc4LCA0MDYsIDAsIDAsIDAsIDM3MCwgMCwgMCwgMzUzLCAwLCAwLCAwLCAzNzAsIDAsIDQwOSwgNDExLCAwLCAzNzAsIDM5OCwgMCwgMCwgMzcwLCAzNzgsIDAsIDEzOTI2NCwgMTQ3NDU2LCAzOTgsIDQwOSwgMCwgMCwgNDA5LCAwLCAwLCAwLCA0MzIsIDEzMTA3MiwgMCwgNDMyLCA0MzIsIDAsIDAsIDQzMiwgMCwgNDExLCA0MzIsIDAsIDQ1OCwgMCwgMCwgMCwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA1MDgsIDUwOCwgNTA4LCA1MDgsIDUyMCwgNTA4LCA1MDgsIDUwOCwgNTIwLCA1MDgsIDUwOCwgNTA4LCA1MDgsIDUwOCwgNTA4LCA1MzcsIDU3OTAzLCA1MzcsIDU3OTAzLCA1MzcsIDUzNywgNTc5MDMsIDUzNywgNTM3LCA1NzkyNiwgNTc5MDMsIDUzNywgNTM3LCA1NzkwMywgNTc5MDMsIDU3OTAzLCA1NzkyNiwgNTc5MDMsIDU3OTAzLCA1NzkwMywgNTc5MDMsIDU3OTAzLCA1NzkwMywgNTc5MDMsIDU3OTI2LCA1NzkyNiwgNTc5MDMsIDU3OTAzLCA1Nzk1MywgNTc5MDMsIDU3OTAzLCA1NzkwMywgNTc5MDMsIDU3OTAzLCA1NzkwMywgNTc5MDMsIDU3OTUzLCA1Nzk1MywgNTc5MDMsIDU3OTAzLCA1NzkwMywgNTc5MDMsIDU3OTUzLCA1Nzk1MywgNTc5MDMsIDYxNywgNTc5MDMsIDU3OTY4LCA1Nzk2OCwgMSwgMjQ1NzgsIDMsIDE1NTk0MSwgMTU1OTQxLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCAwLCAzMDUsIDMwNiwgMCwgMCwgMCwgNjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDE3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNjEzNzQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDc3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzQsIDAsIDAsIDAsIDAsIDAsIDEyNzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4NywgMCwgMCwgMCwgNzc0LCAwLCAwLCAwLCAwLCA3OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MywgMCwgMCwgMCwgMCwgNzc0LCAwLCA3OTMsIDAsIDUyMSwgODMyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4NjMsIDg2NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTgyNTEsIDExNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA3LCAxMjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjkwLCAxMzE2LCAxMzE3LCAwLCAxMjkwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4MjIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTk5MDcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTkxNSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTIxLCAxMzI1LCA1MjEsIDUyMSwgNTIxLCAxMzI5LCA1MjEsIDUyMSwgMTM0MCwgNTIxLCA1MjEsIDEzNDQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzYzLCA1MjEsIDUyMSwgNTIxLCAwLCAyODk1LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI0NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMjQ5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4Mjk0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDgzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ5MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1MjEsIDEzNjcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg5MywgNTIxLCA1MjEsIDUyMSwgNTg3NTQsIDkwMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NzY0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc2OCwgNTc4ODYsIDU3ODg2LCA1ODc3OSwgNTc4ODYsIDU3ODg2LCA1ODc4MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTg4LCA2MDU4OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTkyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTk4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU4ODc4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODk3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODkwMSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM2NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1MTUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUyMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTMyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk1MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NTcsIDU3OTM2LCA1NzkzNiwgNTg5NjgsIDU3OTM2LCA1NzkzNiwgNTg5NzIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5OTEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTk1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAzOTksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAxNzI2LCAxNzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTY1NjAsIDUxNjU2MCwgNTE2NTYwLCA1MTY1NjAsIDAsIDE3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MDgsIDAsIDAsIDAsIDAsIDAsIDUxMTE4MDgsIDAsIDAsIDAsIDAsIDAsIDUyODM4NDAsIDAsIDAsIDAsIDAsIDU0NzIyNTYsIDU1MjE0MDgsIDAsIDAsIDAsIDAsIDU1OTUxMzYsIDU3MDk4MjQsIDU3MTgwMTYsIDAsIDU4MjQ1MTIsIDU4NjU0NzIsIDAsIDAsIDU5MjI4MTYsIDAsIDAsIDYwMjExMjAsIDAsIDUyMSwgNTg3NTQsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMjQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA4MzcsIDU3ODg2LCA2MDgzOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODQ2LCA1Nzg4NiwgNTc4ODYsIDYwODQ4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTA2NTcsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MjQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTE4MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNDcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA1MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDQyLCA1OTQ0MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MDcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUzOCwgNTk1MzksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTU2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU2MywgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1OTMyNCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDIzODQsIDAsIDAsIDIzODcsIDAsIDUyMSwgNTIxLCAyMzkwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODIzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NjcsIDU5ODY4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg3OSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4OTEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NTYsIDU5OTU3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk2OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4OTEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ1NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5ODAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU5OTkyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODY4LCAzNjI3LCAwLCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDM5LCA2MDA0MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNTEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA3MDUsIDU3OTM2LCA1NzkzNiwgNjA3MDgsIDU3OTM2LCA1NzkzNiwgNjA3MTEsIDMzNjgsIDUyMSwgNTIxLCA2MDcxNSwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDA2MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDI3MzIsIDI3MzMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMDgxLCA2MDA4MiwgMCwgMCwgMTcxMCwgMCwgMCwgMTcxNywgMCwgMCwgMCwgMCwgMCwgMTcyOCwgMTcyOSwgMCwgMCwgMCwgMCwgMCwgMTczNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYwLCAzNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMjk1LCAwLCAwLCAwLCAwLCAyODIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODI3LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQ2MCwgNTIxLCAyNDYyLCA1Nzg4NiwgNjAyODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTE5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDYwNDA2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDE4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAxMSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMTk0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjA3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAwLCA1OTgxOCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODI2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1OTAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCA1NzkwOSwgNjA2MTUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2NDgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMDIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2OTcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTUyMTkyLCAwLCAwLCAwLCA2MzE2MDMyLCAwLCAxOTY2MDgsIDAsIDAsIDU4MTYzMjAsIDYyOTE0NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEwOTcsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCAzNzYwLCA1Nzg4NiwgNTc4ODYsIDYxMTA2LCAzNzYzLCAwLCAwLCAwLCAwLCAzNzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTUsIDMxNiwgMzE3LCAzMTgsIDMxOSwgMzIwLCAzMjEsIDMyMiwgMzIzLCAzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjcsIDAsIDAsIDAsIDAsIDExNzEsIDAsIDAsIDExNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDM3ODgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjExNDcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMTUwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyNzQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyOTMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMxMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzUwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ3OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0ODQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDk0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk1MDAsIDU3OTA5LCA1NzkwOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMjQxLCA1Nzg4NiwgNjEyNDMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTI1NywgNTc5MDksIDYxMjU5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNjEwNzQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMDc3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA4NSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTE2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUyOCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTQ3MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgNDEzMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDQxMzUsIDUyMSwgNDEzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDYxNDg2LCA1Nzg4NiwgNjE0ODcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM0MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzNTMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzU4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTE0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNzA5LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU4LCAwLCAwLCAwLCA0NzUsIDQ3NSwgNDc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDksIDUwOSwgNTEzLCA1MTMsIDUxMywgNTEzLCA1MDksIDUxMywgNTEzLCA1MTMsIDUwOSwgNTEzLCA1MTMsIDUxMywgNTEzLCA1MTMsIDUxMywgNTM4LCA1NzkwNCwgNTM4LCA1NzkwNCwgNTM4LCA1MzgsIDU3OTA0LCA1MzgsIDUzOCwgNTc5MjcsIDU3OTA0LCA1MzgsIDUzOCwgNTc5MDQsIDU3OTA0LCA1NzkwNCwgNTc5MjcsIDU3OTA0LCA1NzkwNCwgNTc5MDQsIDU3OTA0LCA1NzkwNCwgNTc5MDQsIDU3OTA0LCA1NzkyNywgNTc5MjcsIDU3OTA0LCA1NzkwNCwgNTc5NTQsIDU3OTA0LCA1NzkwNCwgNTc5MDQsIDU3OTA0LCA1NzkwNCwgNTc5MDQsIDU3OTA0LCA1Nzk1NCwgNTc5NTQsIDU3OTA0LCA1NzkwNCwgNTc5MDQsIDU3OTA0LCA1Nzk1NCwgNTc5NTQsIDU3OTA0LCA2MTgsIDU3OTA0LCA1Nzk2OSwgNTc5NjksIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4OCwgMCwgNTIxLCA1MjEsIDEzMjAsIDUyMSwgMTMyMywgMCwgNjgwLCA2ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgMzg3NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzODgwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzg4NiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEyMzUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDY1OCwgMCwgNjM3LCAwLCAwLCAwLCAwLCAwLCAwLCA3ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MCwgMCwgNzk1LCAwLCAwLCAwLCAwLCAwLCAwLCA2MzcsIDAsIDAsIDc4MSwgNTIxLCA4MzMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgODU0LCA4NTgsIDg2NCwgNTIxLCA4NjksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4ODcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1ODI1MiwgMCwgNzkwLCAwLCA3OTUsIDAsIDc4MSwgMCwgODA3LCAwLCAwLCAwLCAwLCA4MDcsIDAsIDAsIDAsIDAsIDAsIDYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjc3LCAwLCAxMTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzODIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1ODQwMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDI0LCA1ODQyOCwgNTg0MzQsIDU3OTM2LCA1ODQzOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDAsIDExNDIsIDAsIDAsIDExNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMSwgMCwgMCwgMCwgMCwgMCwgMzEwLCAwLCAzMTAsIDMxMSwgMCwgMzEwLCAzMTAsIDMxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEwLCA0MDgsIDMxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMzExLCA0MTMsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCAwLCAwLCAwLCA1ODQ1NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDg4NywgNTIxLCA1MjEsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4MzA2LCA1Nzg4NiwgNTc4ODYsIDE1NTk0MSwgMTEzOCwgMCwgMzAxLCAwLCAwLCAzMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMzYsIDAsIDAsIDAsIDAsIDE4MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyOTIsIDIyOTMsIDAsIDIyOTUsIDIyOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzksIDAsIDAsIDAsIDExODMsIDExODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAwLCAwLCAwLCAxMjAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDY5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA4LCAwLCAwLCAxMjQzLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjUxLCAwLCAwLCAwLCAwLCAwLCAxMjU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMCwgMCwgMTI3NSwgMCwgMCwgMTE1MiwgMCwgMCwgMCwgMTI4MSwgMCwgMTI4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDIzOTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDA1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAxMjk3LCAxMjU2LCAwLCAxMjgxLCAxMzAwLCAwLCAxMzAzLCAwLCAwLCAwLCAxMTgzLCAwLCAwLCAwLCAwLCAxMzExLCAwLCAwLCAwLCAwLCAwLCAxMzExLCAwLCAwLCAxMjAyLCAxMzExLCAxMzE4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAyNDczLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjEwNDMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDEzMjQsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTMzMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzUxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxMzY0LCA1MjEsIDUyMSwgNTIxLCAwLCAyODk1LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDI0MywgNTc4ODYsIDYwMjQ0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1MjEsIDUyMSwgMTM2OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM3NywgNTIxLCA1MjEsIDUyMSwgMTM4NCwgMTM4NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4ODEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjAyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMjA4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE0MDksIDU4NzU0LCA5MDEsIDU4NzU2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU4NzYzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg3NjksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc5MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NzAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgxOCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MTEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTE4LCA1ODkyMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4OTQzLCAwLCA1ODk0NCwgNTg5NDUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTQzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5ODQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTg3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg5NTIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk1OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTc5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk5MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTk3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDAyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAwNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMTMsIDU5MDE1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTIyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMzk1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTAzOCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMTEzOCwgMCwgMCwgMCwgMTcxMCwgMCwgMCwgMCwgMCwgMTcxNywgMCwgMCwgMCwgMCwgMCwgMCwgMzYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3ODMsIDE3ODQsIDAsIDAsIDAsIDAsIDE4NDAsIDE4NDEsIDAsIDAsIDAsIDE4NDQsIDAsIDAsIDAsIDAsIDAsIDE4NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MTYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgxNjMyLCAwLCA1ODE2MzIsIDU4MTYzMiwgMCwgMTg2MiwgMCwgMTg2NCwgMTg0MCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4NzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTg4MiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODUwLCA1MjEsIDI4NTIsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQyNywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTg5MywgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODk3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTEwLCA1MjEsIDUyMSwgNTIxLCAxOTE1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODQ5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MjksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMTksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTMyNSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5MzM2LCA1MDY1NywgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MTksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQyNSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY1MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA5MSwgNTc5MzYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDQwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ1MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0NTgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTM2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NDIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1OTUzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1NDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTU0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgMjczMCwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDYwMDc5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjU3LCA1MjEsIDUyMSwgNTk2MDQsIDU3ODg2LCA1OTYwNiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjc3LCAyMjc4LCAwLCAwLCAwLCAwLCAwLCA1MjEwMTEyLCAwLCA1MzY1NzYwLCAwLCA1NTU0MTc2LCA1NTcwNTYwLCA1NTc4NzUyLCAwLCA1NjY4ODY0LCAwLCAwLCA1NzkxNzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjAxMzQ0LCA2MjQyMzA0LCA2MjUwNDk2LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NDMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM4MiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMCwgMCwgMjM4MywgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDAzLCA1MjEsIDUyMSwgMjQwNywgNTIxLCA1MjEsIDUyMSwgMjQxMSwgNTc4ODYsIDU3ODg2LCA1OTg0MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg1MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTk4NTUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDYwOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MTgsIDU3OTA5LCA2MDYxOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNTc4ODYsIDU5ODk0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMjU2MSwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTkyMywgNTc5MDksIDU3OTA5LCA1OTkyNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5MzEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NDEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTQ0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTE4MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjExODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTkwLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5OTc4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTgzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAwNiwgNTc5MzYsIDU3OTM2LCA2MDAxMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMTQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMjQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDI3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCA0MDc2LCAwLCA0MDc4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwMDYxLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMDY2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDI4MzMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ2NSwgMzQ2NywgNTIxLCA1MjEsIDUyMSwgMzQ3MCwgNTIxLCAzNDcyLCAzNDczLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODI0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDI4NDEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg1NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODU5LCA1MjEsIDUyMSwgMjg2MSwgNTIxLCAyODYyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAyNDcyLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODM0LCA1Nzg4NiwgNTc4ODYsIDU5ODM4LCA1Nzg4NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODcwLCA1MjEsIDUyMSwgMjg3NCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjg4MywgNTIxLCA1MjEsIDUyMSwgMjg4NiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNjY5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MDY1NywgNTg3NTQsIDk3NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg2MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODg3MiwgMCwgMCwgNTc5MDksIDU3OTA5LCA2MDMwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMxNywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjExODMsIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQyMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDA4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTkwMjIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkwOSwgNjAzMzIsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDMzNSwgNTc5MDksIDU3OTA5LCA2MDMzNywgNTc5MDksIDYwMzM4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM0NywgNTc5MDksIDU3OTA5LCA2MDM1MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY1NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2NjYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjczLCA1NzkwOSwgNTc5MDksIDYwMzYwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM2MywgNjAzNjQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDYwMzc0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCAzMDk2LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA2MDQ0MywgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTA1NjAsIDQ1MDU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5MjY0LCAxNDc0NTYsIDAsIDAsIDQ1MDU2MCwgMCwgMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAzODIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDM5NywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDAwLCA1NzkzNiwgNTc5MzYsIDYwNDAyLCA1NzkzNiwgNjA0MDMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjEyNzIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NDIsIDM2MjcsIDAsIDAsIDAsIDAsIDAsIDM3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzcxLCAwLCAwLCAwLCAzNzksIDM4MSwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxODg1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNzk0LCA1MjEsIDUyMSwgNTIxLCAzNzk1LCAzNzk2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDI1NTksIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMjUsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDMxOTAsIDUyMSwgNTIxLCA1MjEsIDMxOTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5MTcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNjA1ODEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwNTg0LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDU5NCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODM4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMjU2MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDYzMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA2MzMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjQzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4NDE3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDkyMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MjcsIDAsIDAsIDAsIDYwNjc0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2NzksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjgyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY5MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNDA3MiwgNDA3MywgMCwgMCwgMCwgMCwgMCwgNDA3OSwgNDA4MCwgNDA4MSwgNTIxLCA1MjEsIDUyMSwgNDA4NCwgNTIxLCA0MDg2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDYxNDM1LCA2MTQzNiwgNjE0MzcsIDM0NTcsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzQ2OSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYwODIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MDU4NywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1OTUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAyNTYwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY0MCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODgzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg5NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDkwNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTIwMSwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzg0LCA1MjEsIDUyMSwgNTIxLCA1NzkzNiwgNjA5MzksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMzYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MjQsIDI3ODIsIDAsIDAsIDAsIDAsIDAsIDI4MjksIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjgzOCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDAsIDAsIDM2NDAsIDM2NDEsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM2NTEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzY3MSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA2MTIsIDU3ODg2LCAwLCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwNjIwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTIxLCAzNjYxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMzY2NiwgNTIxLCAzNjY4LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxMDIyLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAyOTIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAzMDMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMjk2MiwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDUxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDYxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTA2NywgNTc5MDksIDYxMDY5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg4ODQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4ODk0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTM4LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk0MywgNTc5MDksIDU5OTQ1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTA5NiwgNTc5MzYsIDYxMDk4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDM3NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NiwgMCwgMCwgNjU5LCA2NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgMCwgMCwgMCwgMzc3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNzg2LCA1MjEsIDUyMSwgNTIxLCAzNzkwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM3OTksIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjExNDgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODY3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4ODAsIDU3OTA5LCA1NzkwOSwgNjExNTIsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjExNjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMTY3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTE3MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxMDUzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ1OSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTQzOCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTQ0NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNDUxLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYxNDU5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE0NjQsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTc2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE0NzIsIDU3OTM2LCAwLCAwLCAwLCAwLCA0MTMxLCAwLCA0MTMzLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA0MTM5LCA0MTQwLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjE0NDUsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTQ1OCwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwOTE5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA5MjksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDA4OCwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDYxNDkwLCA2MTQ5MSwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTQ5OCwgNjE0OTksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjE1MDYsIDYxNTA3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxNDE1LCAwLCAwLCA0MDc0LCA0MDc1LCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA0MDgyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNDA5MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODY1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MTE4NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTg5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDAsIDUyMSwgNDIyMCwgNTc4ODYsIDYxNTY1LCA1NzkwOSwgNjE1NjYsIDU3OTM2LCA2MTU2NywgNTIxLCA1Nzg4NiwgNTc5MDksIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE4OTksIDE5MDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzODAwLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNDI1LCA0MjUsIDAsIDAsIDEzMTA3MiwgNDI1LCAwLCAwLCAwLCA0MjUsIDAsIDAsIDQ0NywgMCwgNDI1LCAwLCA0NzYsIDQ3NiwgNDc2LCAwLCAwLCAzNjEsIDM2MSwgMzYxLCA0OTUsIDM2MSwgMzYxLCAzNjEsIDM2MSwgNDc2LCA0NzYsIDQ3NiwgNDc2LCA0NzYsIDQ3NiwgNDc2LCA0NzYsIDQ3NiwgNDc2LCA0NzYsIDQ3NiwgNDc2LCA0NzYsIDQ3NiwgNTM5LCA1NzkwNSwgNTM5LCA1NzkwNSwgNTM5LCA1MzksIDU3OTA1LCA1MzksIDUzOSwgNTc5MjgsIDU3OTA1LCA1MzksIDUzOSwgNTc5MDUsIDU3OTA1LCA1NzkwNSwgNTc5MjgsIDU3OTA1LCA1NzkwNSwgNTc5MDUsIDU3OTA1LCA1NzkwNSwgNTc5MDUsIDU3OTA1LCA1NzkyOCwgNTc5MjgsIDU3OTA1LCA1NzkwNSwgNTc5NTUsIDU3OTA1LCA1NzkwNSwgNTc5MDUsIDU3OTA1LCA1NzkwNSwgNTc5MDUsIDU3OTA1LCA1Nzk1NSwgNTc5NTUsIDU3OTA1LCA1NzkwNSwgNTc5MDUsIDU3OTA1LCA1Nzk1NSwgNTc5NTUsIDU3OTA1LCA1MzksIDU3OTA1LCA1NzkwNSwgNTc5MDUsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NjgzMiwgMCwgMzc2ODMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzkwOSwgNTgzNjksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODM4NywgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMCwgNTgyOTMsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQyNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQ0NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwNjksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAyNzI5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDYwMDc4LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMjczOSwgMjI2NiwgMCwgMjc0MCwgMjI2OSwgMCwgMCwgMjc0MiwgNTc5MzYsIDU4NDYyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDg5MiwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgzMTEsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDExMzksIDAsIDAsIDExNDQsIDAsIDAsIDAsIDAsIDAsIDExNTAsIDAsIDAsIDAsIDAsIDAsIDUzNDExODQsIDAsIDU2NTI0ODAsIDAsIDAsIDAsIDAsIDQ3NTk1NTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDQsIDAsIDAsIDAsIDAsIDEyNDksIDAsIDAsIDAsIDEyNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2Njk0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUzLCAzNTQsIDM1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAwLCAyOTUsIDAsIDUyMSwgNTIxLCA1MjEsIDEzMjcsIDUyMSwgNTIxLCA1MjEsIDEzMzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4OTUsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjA1NzQsIDU3ODg2LCA1Nzg4NiwgNjA1NzgsIDU3ODg2LCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgOTAxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc2NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTg3NzUsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTAzNCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTA0MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjEwNDcsIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4OTU1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk2NCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTU1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAxOTMxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDE5NTMsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDI0NzAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODM5LCA1MjEsIDU4NzU0LCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMzMsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwODY0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjA4NjgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg3NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDAsIDAsIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU4NDAyLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQzMywgNTg0MzUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUwNjU3LCAwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk0MzMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjAwMDEsIDU3OTM2LCA1NzkzNiwgNjAwMDQsIDU3OTM2LCA1NzkzNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ3NCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTQ4NiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDk3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM3MiwgNTc4ODYsIDU3ODg2LCA1OTM3NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5Mzg5LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTM5NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg3MiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNjAzMDQsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDI5NjIsIDAsIDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU3MCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU4MiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5NTkzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDI5MywgMTEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzExOSwgMCwgMzEyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzNSwgMCwgMCwgMCwgMCwgMjI4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMwMSwgMCwgMCwgMCwgMCwgMjM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM2LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTk4NDEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU5ODYzLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5OTMwLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDAsIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU4OTQ3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDAxMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTU4OSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgMCwgMCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzEzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTg5MzEsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDYyNiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDEyNTksIDU3ODg2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNjc1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUyNCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA2MTE1NSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNjExNzQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTE5MywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTEwMCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDUsIDAsIDAsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MTQ3MSwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA1Nzg4NiwgNTc4ODYsIDU3OTM2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1Nzg4NiwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAzNzIsIDM3MiwgMCwgMCwgMTMxMDcyLCAzNzIsIDAsIDAsIDAsIDM3MiwgMCwgMCwgMCwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzkwNiwgNTc5MDYsIDU3OTA2LCA1NzkwNiwgNTc5MDYsIDU3OTA2LCA1NzkwNiwgNTc5MjksIDU3OTI5LCA1NzkwNiwgNTc5MDYsIDU3OTU2LCA1NzkwNiwgNTc5MDYsIDU3OTA2LCA1NzkwNiwgNTc5MDYsIDU3OTA2LCA1NzkwNiwgNTc5NTYsIDU3OTU2LCA1NzkwNiwgNTc5MDYsIDU3OTA2LCA1NzkwNiwgNTc5NTYsIDU3OTU2LCA1NzkwNiwgNTQwLCA1NzkwNiwgNTc5MDYsIDU3OTA2LCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzM0NzIwLCAwLCAyMzM0NzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCAyODM0LCAyODM1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyNjcsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzQzLCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjExNzksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTg3LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDMwMSwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzU4LCAyNzU5LCAwLCAwLCAyNzYyLCAwLCAyNzY0LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1ODc1NCwgOTAxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODc4MCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCA1NzkwOSwgNTc5MDksIDU5OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDY1OCwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjA2NjcsIDU3OTM2LCA2MDY2OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU4ODc1LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTk5NDcsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgMCwgMCwgMCwgMzc3MSwgMCwgMzc3MiwgMCwgMCwgMCwgMCwgMzYyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzNjU3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAwLCAwLCAzNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAzNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MywgMCwgMzY0LCAwLCAwLCAwLCAwLCAzNjMsIDAsIDAsIDAsIDEzOTI2NCwgMTQ3NDU2LCAwLCAwLCAwLCAwLCAwLCAwLCA2NTMsIDY1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDMzLCAxMzEwNzIsIDAsIDQzMywgNDMzLCAwLCAwLCA0MzMsIDAsIDM2NCwgNDMzLCAwLCA0NTksIDAsIDAsIDAsIDQ4NywgNDg3LCA0OTAsIDQ5MCwgNDkwLCA0OTAsIDQ5NiwgNDk3LCA0OTAsIDQ5MCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTQxLCA1NzkwNywgNTQxLCA1NzkwNywgNTQxLCA1NDEsIDU3OTA3LCA1NDEsIDU0MSwgNTc5MzAsIDU3OTA3LCA1NDEsIDU0MSwgNTc5MDcsIDU3OTA3LCA1NzkwNywgNTc5MzAsIDU3OTA3LCA1NzkwNywgNTc5MDcsIDU3OTA3LCA1NzkwNywgNTc5MDcsIDU3OTA3LCA1NzkzMCwgNTc5MzAsIDU3OTA3LCA1NzkwNywgNTc5NTcsIDU3OTA3LCA1NzkwNywgNTc5MDcsIDU3OTA3LCA1NzkwNywgNTc5MDcsIDU3OTA3LCA1Nzk1NywgNTc5NTcsIDU3OTA3LCA1NzkwNywgNTc5MDcsIDU3OTA3LCA1Nzk1NywgNTc5NTcsIDU3OTA3LCA2MTksIDU3OTA3LCA1Nzk3MCwgNTc5NzAsIDEsIDI0NTc4LCAzLCAxNTU5NDEsIDE1NTk0MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzksIDE4MDYsIDAsIDAsIDAsIDAsIDEyNDYsIDEyNDYsIDAsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTgzODMsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCAwLCAwLCAwLCAwLCA1Nzg4NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDY4OCwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTg0NTgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1MjEsIDUyMSwgNTIxLCA4ODgsIDUyMSwgNTIxLCAwLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODMwNywgNTc4ODYsIDU3ODg2LCAxNTU5NDEsIDExMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDIsIDI3NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMTgzMzYsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzMzQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNjAzNDQsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTgyNjgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU4MzQ0LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1ODM5MywgMCwgMCwgMCwgMCwgNTc4ODYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODQwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUxNywgNTk1MTgsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1OTUyNSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAxMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzkyLCAwLCA1MjEsIDEzNjgsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM5NSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NzUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1ODgzNCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDUwNjU3LCA1ODc1NCwgOTc3LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg5NSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTM2LCA2MDkwMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1ODk5NiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU5MDI0LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDE1NTk0MSwgMTEzOCwgMCwgMzAxLCAwLCAwLCAzMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAzMTc4LCA1MjEsIDMxNzksIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0NjksIDAsIDAsIDAsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1OTg4MywgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1MjEsIDUyMSwgNTIxLCAyODQ0LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMjQzNCwgNTIxLCA1MjEsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwMzg1LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTk1MjIsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAwLCAwLCAwLCA2NDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4OTMsIDUyMSwgNTIxLCA1MjEsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc5MDksIDU3OTA5LCA2MDg2MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDg3OSwgNTc5MDksIDYwODgxLCA1NzkwOSwgNTc5MzYsIDU4NDYzLCA1NzkzNiwgNTc5MzYsIDU3OTM2LCAxMTI2LCA1MjEsIDUyMSwgNTIxLCA4OTMsIDUyMSwgMCwgNTc4ODYsIDU4NDc3LCA1Nzg4NiwgNTc4ODYsIDU4MzEyLCA1Nzg4NiwgMTU1OTQxLCAxMTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMSwgNTIxLCA1ODc1NCwgMCwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTkzMjYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCAwLCAwLCAwLCAwLCA1NzkwOSwgNTk5MDgsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA2MDM0MywgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTA2NTcsIDAsIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU5NDI2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1OTk2MSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDYwMzQ2LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI0MTUsIDUyMSwgMjQxNywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyNDMyLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODY3LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTkyMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYwNDA5LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA2MDQyMywgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDM2NjAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDU3ODg2LCA1Nzg4NiwgMCwgMCwgMCwgMjU2MiwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MDksIDU3OTA5LCA1NzkwOSwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNjExODUsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDYxMTg4LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgNTc5MzYsIDU3OTM2LCA1NzkzNiwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMjMxMDU2MCwgMjMxMDU2MCwgMCwgMjMxMDE0NCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjMxMDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzEwMTQ0LCAwLCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMTA1NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MCwgMCwgMzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzEwMTQ0LCAwLCAwLCAwLCAyMzEwMTQ0LCAwLCAwLCAwLCAwLCAwLCAyMzEwMTQ0LCAwLCAwLCAyMzEwMTQ0LCAwLCAwLCAyMzEwMTQ0LCAwLCAyMzEwMTQ0LCAyMzEwMTQ0LCAwLCAyMzEwMTQ0LCAwLCAyMzEwMTQ0LCAyMzEwMTQ0LCAwLCAwLCAwLCAwLCAwLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDM0NDUsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM0NywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgMTM2MiwgNTIxLCA1MjEsIDIzMTAxNDQsIDAsIDAsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTA3MzMsIDIzMTAxNDQsIDIzMTA3MzMsIDIzMTAxNDQsIDIzMTAxNDQsIDIzMTA3MzMsIDEsIDI0NTc4LCAzLCAwLCAwLCA0MzY2MzM2LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgNDI2ODAzMiwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzMTgsIDAsIDAsIDAsIDAsIDAsIDIzMjIsIDAsIDAsIDIzMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNzUwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NTc4NTYsIDQ4NzQyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgNTIxLCA1MjEsIDgzOSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA4OTgsIDU3ODg2LCA1Nzg4NiwgNTc4ODYsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYwLCAyMzM1MTk3LCAyMzM1MTk3LCAyMzM1MTk3LCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDIzMzUyMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzOTksIDM0MDAsIDAsIDM0MDEsIDAsIDIzMzUyMzEsIDEsIDI0NTc4LCAzLCAwLCAwLCA0MzY2MzM2LCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMCwgNDI2ODAzMiwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NjMsIDAsIDAsIDAsIDAsIDAsIDI3NjcsIDAsIDAsIDAsIDAsIDQxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM1OTI5NiwgMCwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMjM1OTI5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM1OTI5NiwgMSwgMjQ1NzgsIDMsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDMwMSwgMzAyLCAwLCA0MjY4MDMyLCAzMDUsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxMywgMCwgMCwgMCwgMCwgMjM2NzQ4OCwgMCwgMCwgNDI2ODAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3LCAwLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDYyNzUwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk3NiwgMCwgMCwgMCwgMCwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxLCA1MjEsIDUyMSwgMjM5MSwgMjM5MiwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAyODU1LCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDI4NjAsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MjEsIDUyMSwgNTIxLCAwLCAxLCAyNDU3OCwgMywgMTU1OTQxLCAxNTU5NDEsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMzAxLCAzMDIsIDAsIDAsIDMwNSwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTM0LCAwLCAwLCAyMTI5OTIsIDAsIDAsIDAsIDAsIDAsIDQzNjYzMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNjgwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgMCwgNjI1ODY4OCwgNjQ0NzEwNCwgMCwgMCwgNjEyNzYxNiwgMCwgNjM0ODgwMCwgNTkwNjQzMiwgMCwgNTUzNzc5MiwgMCwgMCwgMCwgMCwgMCwgNTkzOTIwMCwgMCwgMCwgNTY3NzA1NiwgNjM2NTE4NCwgNDg2NjA0OCwgMCwgNjA3MDI3MiwgNTU0NTk4NCwgNTE1Mjc2OCwgMCwgMCwgNjE0NDAwMCwgNDM1ODE0NCwgNDg2NjA0OCwgNDg4MjQzMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgMCwgMTQxMSwgMCwgMCwgMCwgMCwgMCwgNDg1Nzg1NiwgNDg3NDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1OTI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgOTAwLCA5MDAsIDkwMCwgNTUzNzc5MiwgNTU0NTk4NCwgNTU4Njk0NCwgNTczNDQwMCwgNTk3MTk2OCwgNDM1ODE0NCwgNjA0NTY5NiwgNDM1ODE0NCwgNjA3MDI3MiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjM0ODgwMCwgNDM1ODE0NCwgNjE0NDAwMCwgMCwgNjE0NDAwMCwgMCwgNDk4ODkyOCwgNTAwNTMxMiwgMCwgMCwgMCwgMCwgNTc3NTM2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUwLCA4MDgsIDAsIDAsIDAsIDc1MCwgMCwgMCwgODExLCA2OTIsIDAsIDAsIDAsIDgxNiwgMCwgMCwgMCwgODE4LCAwLCAwLCAwLCA2ODUsIDY5MiwgMCwgMCwgNDM1ODE0NCwgNTAwNTMxMiwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNTEyMDAwMCwgNTEzNjM4NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNDM1ODE0NCwgNjMyNDIyNCwgNTkxNDYyNCwgNTkxNDYyNCwgMCwgMCwgMCwgMCwgMCwgNTUxMzIxNiwgNTc4MzU1MiwgMCwgMCwgMCwgMCwgMCwgMCwgNjU2LCAwLCA3NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MywgMCwgMCwgMCwgMCwgNzkyLCAwLCAwLCAwLCAwLCAwLCA4MDAsIDAsIDc4MywgMCwgMApdOwoKSlNPTmlxUGFyc2VyLkVYUEVDVEVEID0KWyAxNjYsIDE4MiwgMjExLCAxMTA0LCAyNDIsIDE0NTIsIDE0NjcsIDI3MywgMjg5LCA3MTIsIDExMTcsIDMxOSwgMzQ5LCAzMzMsIDM2NSwgMzgxLCAzOTcsIDQxMywgMTk1LCAxODY2LCAyMjQwLCAyMjQzLCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCAyMjM0LCA0MjksIDQ0NSwgNDYxLCA0NzcsIDIwODgsIDIyNiwgNDkzLCAyMDc1LCA5MzksIDYyMSwgNTIzLCA1NDMsIDE3MTYsIDU1OSwgNTc1LCA1OTEsIDYwNywgMTQyMiwgNjUwLCA2NjYsIDE4MjIsIDY5NywgMTU2NSwgNjM0LCA3MjgsIDczOCwgNzU0LCA3OTYsIDgxMiwgODI4LCA4NDQsIDg2MCwgODc2LCA4OTIsIDkwOCwgOTI0LCA5NTUsIDIxODAsIDk4NSwgNjgxLCAyMjExLCAxMDE1LCAxMDQ0LCAxMDI4LCAxMDYwLCAxMDkwLCAxMTMzLCAxMzIwLCAxMTQ5LCAxMTY1LCAxNTUxLCAxMTgxLCAxMTk3LCAxMjEzLCAxMjI5LCAxMjU5LCAxOTA0LCAxMzY1LCAxMzc1LCA5OTksIDk2OSwgMTc2MiwgMTI4OSwgMTMwNSwgMTMzNiwgMTM1MSwgMTQ4OCwgMTM5MSwgMTQwNywgMTUwNCwgMTYyMywgMTUyMCwgMTUzNiwgMTU4MSwgMTI3MywgMTYxMCwgMTYzOSwgMTY1NSwgMTY3MSwgMjExOCwgMjE0OSwgMTY4NywgMTcwMywgMTQzNywgNTA3LCAxNzMyLCAxNzQ4LCAxNzc4LCAxMDc0LCA3ODAsIDE4MDksIDE4MzgsIDE4NTQsIDE4OTAsIDE5MjAsIDE5MzYsIDE5NTIsIDE5NjgsIDE5ODQsIDIwMDAsIDIwMTYsIDIwMzIsIDIwNjEsIDI1NywgMjEwNCwgMzAzLCAyMDQ1LCA3NjcsIDE3OTMsIDE1OTQsIDIxMzQsIDEyNDMsIDIxNjUsIDIxOTYsIDIyMjcsIDIyMzQsIDE4NzQsIDE0NzksIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDIyMzQsIDUzNiwgMjI1OSwgMjI2MywgMjI3MSwgMjI3MSwgMjI3MSwgMjI2NSwgMjI2OSwgMjI3MSwgMjI3MiwgMjI3NiwgMjI3OSwgMjI4NiwgMjI4MiwgMjI5MCwgMjI5NCwgMjI5OCwgMjMwMiwgMjMwNiwgMjMxMCwgMjM4MSwgMjc5MCwgMjc5MCwgNDAwMywgNDk0MSwgMjc5MCwgMjc5MSwgMjMxNCwgMzA3NCwgMjk4MiwgMjc5MCwgMjc5MCwgMjc5MCwgMjY4NywgMjc5MCwgNTAxMywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjgyNywgMjc5MCwgMjU3MSwgMzUzNywgNDA4MCwgMjQzNiwgMjMyMCwgMjQ0MywgMjQ2NiwgMjMyNiwgMjMzNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjM0MywgMjc5MCwgMjc5MCwgMjM0OSwgMzg0MSwgMjcwNywgMjc5MCwgMjczNCwgMjc1OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDc1NiwgMjczOCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDc2NywgMjMyMSwgMjM5MCwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjM1NSwgMjM2MSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjM3MSwgNDUzNSwgMjc5MCwgMjY5NiwgNDgxNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjY5NywgNDgxNywgMjc5MCwgMjc5MCwgMjc5MCwgNDgyMiwgNDc5MCwgMjc5MCwgMjc5MCwgMzAxNywgMzg0MiwgMjQ0OCwgMjc5MCwgMjc5MCwgMzUzNywgNDA3OSwgNDA3OSwgNDA3OSwgNDA3OSwgNDA3OSwgNDA5OSwgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNiwgMjM4NywgMjMyMSwgMjMyMSwgMjMyMSwgMjMyMSwgMjMyMSwgMjQ1OSwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjMzMiwgMjQwMSwgMjc5MCwgMjc5MCwgMjc2MiwgNDg3MywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjgyMCwgNDg4NSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzI0MywgNDg5MSwgMzU0MiwgNDA3OSwgNDA3OSwgNDA3OSwgNDA5NywgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNiwgMjQ1OCwgMjMyMSwgMjMyMSwgMjMyMSwgMjMzMSwgMjQ2NiwgMjQ2NiwgMjQyNiwgMjc5MCwgMjc5MCwgMzA3NCwgNDA3NiwgNDA3OSwgNDA3OSwgMjM5NiwgMjQzNiwgMjQ4MiwgMjMyMSwgMjMyMSwgMjQ2NCwgMjQ2NiwgMjQ2NiwgMjQxMSwgMjc5MCwgMjc5MCwgNDUzNSwgMjc5MCwgNDA3NywgNDA3OSwgNDA3OSwgMjQ4MCwgMjQzNiwgMjQzNiwgMjQ1NywgMjMyMSwgMjMyMSwgMjQyMCwgMjQ2NywgMjQyOCwgMjgzNCwgMzUzNiwgNDA3OSwgMjQzNCwgMjQzNiwgMjQ0MSwgMjMyMSwgMjQ2NSwgMjMzMiwgMjQ0NywgNDA5NSwgNDA4MSwgMjQzNywgMjM3NiwgMjQ2NiwgMjQ1MiwgNDA3OCwgMjQzNiwgMjMyMSwgMjQ2NiwgNDMzNSwgNDA4MSwgMjQ1NiwgMjQ2MywgMjQyMiwgNDA4MCwgMjQ4MiwgMjQ2MywgMjQ3MSwgNDA5OCwgMjQ4MywgMjMzMSwgMjQ3OCwgMjMyOSwgMjQ4NywgMjQ5MSwgMjQ3NCwgMjQ5NSwgMjQ5OCwgMjUwOCwgMjUxMiwgMjUxOSwgMjUxOSwgMjUxOSwgMjUxNSwgMjUyNSwgMjUxOSwgMjUyMSwgMjUyOSwgMjUzNiwgMjUzMiwgMjU0MCwgMjU0NCwgMjU0OCwgMjU1MiwgMjU1NiwgMjU2MCwgNDY5NywgMjc5MCwgMjc5MCwgMjc5MCwgNDcyOSwgMjc5MCwgNDU5MSwgMjU4NCwgMjg1OCwgMjc5MCwgMjc5MCwgMjc5MCwgMzM2NCwgMjU5MSwgMjc5MCwgMzYxMCwgMjYwMywgMjYwOSwgMjYxMywgMjYxNywgMjYyMSwgMjYyNSwgMjYyOCwgMjYzMiwgMjYzNiwgNDA1MywgMjcwMiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzg3NywgMjY0MiwgMjY0OCwgMjg5MiwgNDQzMiwgMjY0NiwgMjkxNSwgMjM2NywgMjY1NCwgMzgyOCwgMjgxMywgMjc5MCwgMjY1MiwgMzQwNiwgMjY1OSwgMjY2NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjY3MSwgNDQzNCwgMjU4MCwgNDA2MywgMjc5MCwgMjY3NiwgMjY4MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzg2NywgMjY4NCwgMjc5MCwgMjc5MCwgMjc5MCwgMzg2OCwgMjY4NSwgMjc1MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc1NiwgMjc2MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjg4MCwgMjY2NiwgMjc5MCwgMjc5MCwgMjc3NywgNDIyOCwgMzM1OSwgMjg1MSwgNDIzMiwgNDIzOCwgMjc5MCwgNDI0NiwgNDQyMCwgNDI1MywgMzI2NiwgNDI1OCwgNDI2NCwgMzQ0MywgMjc5MCwgNDcyMSwgMjc4MiwgMjc5MCwgMjc5MCwgMjc5MCwgMzIyOCwgMzIzMiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDEwNSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzkwMywgMzg3NiwgMjc4OCwgNDY0MSwgMjc5MCwgMjc5MCwgMjc5MCwgMzMwNywgMjc5MCwgMjc5MCwgMjc5MCwgNDY0MCwgMjgxOCwgMjc5MCwgMjc5MCwgMzMwNiwgMjc5NSwgMjkzNSwgMjgxMiwgMjc5MCwgMjc5MCwgMjc0NCwgMjc5MCwgMzg3NSwgMzIzOSwgMjgxNywgMjc5MCwgNDA4OCwgMjc5MCwgMjc5MCwgMjgyNCwgMjc5MCwgMzUwMiwgMjgxOCwgMjc5MCwgMzAwNywgMjc5MCwgMzk1OSwgMzc1MCwgMjk2MCwgMjc0NSwgMzc0OCwgMjc5MCwgNDYyNiwgMjc5MCwgNDYyMiwgMjY2NywgMjk0MCwgMjg0MiwgMzc1NCwgMjkwMiwgNDYxNSwgMjg0MCwgMzc1MywgMzc1MywgMzc1MywgNDYxNiwgMjgzOCwgNDYyNCwgNDYyNCwgMzAwNiwgMzc1MywgMjg0MSwgMjkwMywgMjcxOSwgMzI5MSwgMzI5MiwgMzc1MiwgMjk0MSwgMjk5OCwgMzAwMCwgMjg0NywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzMyMiwgMzMyNiwgMjc5MCwgMjc5MCwgMjc5MCwgMzI0MSwgNDgwMiwgMjc3NSwgNDczNSwgMjc4MiwgMjc5MCwgMjc5MCwgMjc5MCwgNDgwMiwgMzIzMSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc3MSwgNDc4MCwgMzExMCwgNDYwMSwgMjc5MCwgMzYwNywgMjc5MCwgMzc2MywgMzU1NSwgMjg4NiwgMjk3MywgMjc5MCwgMzk4MCwgMjc5MCwgMzY2NiwgMjc5MCwgNDU0MiwgMjQxNiwgMjg4NCwgMjg5MCwgMjg5NiwgMjkwNywgNDU2OSwgMjkxMSwgMjc5MCwgMjkxOSwgNTAzNSwgMjc5MCwgMjkxMywgMjkyNSwgMjc5MCwgNDU5OSwgMjY4NiwgMjc5MCwgMzY2NSwgMjc5MCwgNDU0MSwgMzEyNSwgNDMzMCwgNDQyOSwgMjkyOSwgMjkzNCwgMjkzOSwgMzk1MywgMjc5MCwgMjc5MCwgNDE5NywgMzQ0MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDU5MiwgMzQyNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDg2MCwgMjk1MSwgMjc5MCwgMzMyNCwgMjc5MCwgMjc5MCwgMzYwOSwgMzc2MSwgMjc5MCwgNDAxNiwgMjk1NSwgMjc0MSwgMjg0MiwgMjc5MCwgNDc0MiwgMjk1OSwgMjc5MCwgMjc5MCwgNDUzNSwgMjc5MCwgMjc5MCwgNDA5NiwgNDA3OSwgNDA3OSwgNDA3OSwgNDA3OSwgMjQzNSwgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNywgMjk4MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjgwMiwgMjk4OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjgwMSwgMjk4OCwgMjc5MCwgMjc5MCwgMjc5MCwgNDgxOCwgNDgxMCwgMzkyOCwgMjc5MCwgMzYwOCwgMzc2MSwgMjMxNiwgMjk5MywgMzAwNCwgMjc5MCwgMzAxMSwgMzAzMiwgMjc5MCwgMjc5MCwgMjc5MCwgNDUwMywgMzAxNSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzAxMSwgMzAzMiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzAyNiwgNDkyMCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzAyNSwgNDkxOSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDM1NSwgMzc1NSwgNDM1OSwgMjc5MCwgMjc5MCwgMzM1NCwgMzA1OSwgNDM2NiwgNDM3MiwgNDI0MCwgMjgzNCwgNDUwNCwgMzAxNiwgMjc5MCwgMjc5MCwgMzYzNSwgMzkyNywgMzAyMywgMzAzMSwgNDU0MSwgMzQzNiwgMzAzNywgMzg1NCwgMzA0NCwgMjc5MCwgMjc5MCwgMzQ1MSwgMzA0OSwgMjc5MCwgMjc5MCwgMzAyNCwgMzA0MywgMjc5MCwgMjc5MCwgMjgwMSwgMzA0OCwgMjc5MCwgMjc5MCwgMzA1MywgMzA2NCwgMzAzMSwgNDQ5MiwgMzA3MSwgMjk3NSwgMzA3OSwgMjc5MCwgMzQ3MCwgMzA4OCwgMjc5MCwgMzQyMSwgMzA3OSwgMjc5MCwgMjgwMSwgMzA5OCwgMjc5MCwgNDE1MiwgMzEwMiwgMzEwOSwgMjU3NCwgMzExNCwgMzEyMiwgMjc5MCwgNDU4NSwgMzEyNCwgMjc5MCwgMzEyOSwgMjc5MCwgNDU4NCwgMzEyMywgMjc5MCwgNDE1NCwgMzAzMywgMzEzMywgNDk1MCwgMzUxOCwgMzE0MiwgNDk0OCwgNDk1MiwgMzE0OCwgMjc5MCwgNDE1NSwgMzE1NiwgMzE4OCwgMzE2MCwgMzE1MCwgNDk1MCwgMzE2NywgMzE4NiwgMzE3NCwgMzE3NCwgMzE3NCwgMzE4MCwgMzE4NCwgMzE5MiwgMzE5MiwgMzE5NiwgMzIwMCwgMzE3NSwgMzIwOSwgMzQzMywgMzIxMywgMzE3NiwgMzg2MSwgMzIxNywgMzIyMSwgNDQ5NCwgMzIyNSwgMzIzNiwgMzI0NywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzkxNCwgMjc5MCwgMjc5MCwgMzI1MywgMzI2MywgMzQwMywgMzE3MCwgMzQ3OSwgMzI3MCwgMzI3NCwgMzI3OCwgMzI4MiwgMzI4NSwgMzI4NSwgMzI4NiwgMjc5MCwgMjc5MCwgMzkxMywgMjc5MCwgMzU0OSwgMzMzNywgMzg0OCwgMzM0MiwgMzI5MCwgMzQ5NiwgMjY1NSwgMzI5NiwgMzMwMCwgMzMxMSwgMzMxOCwgNDk1MywgMzMzMCwgNDYzNywgMjc5MCwgMzMyMCwgMjc5MCwgMjc5MCwgMzY1OSwgMjc5MCwgMjc5MCwgMzMzNiwgMjc5MCwgMjc5MCwgNDcyMiwgMjc3MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDcyMiwgMjc3MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDE5MCwgMzM0MSwgMzQ4NCwgMzQ2MCwgMzE0NCwgMzM0NiwgMzM2MywgMzM2OSwgMjk3NiwgMzM3NSwgMjc5MCwgMjc5MCwgMjc5MCwgMzM4MywgMzM4OCwgMjc5MCwgMjc5MCwgMjc5MCwgMzQ3MiwgMjc5MCwgMjc5MCwgMjc5MCwgNDQxMywgMjc5MCwgNDMwNSwgMzc4NiwgNDgyNSwgMjc5MCwgMjc5MCwgMjM2NCwgMjc5MCwgMzQ4MiwgMzQ4NiwgMjc5MCwgMzQxNiwgMzQyMCwgMjc5MCwgNDU5MSwgMzQyNSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjY3MiwgMzQzMCwgMjc5MCwgMjc5MCwgMjc5MCwgMzc2OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzQ3MSwgMzczNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzc3NiwgMjc5MCwgMzQ2OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDE5OCwgMzQ2OCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDE5OCwgMzQ2OCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjkyMSwgMzUwNiwgMjc5MCwgMjc5MCwgMjc5MCwgNDU5MSwgMzUxMywgMjc5MCwgMjc5MCwgMjc5MCwgMzcyNCwgMjY2MCwgMjc5MCwgNDEyNCwgMzU0MiwgMzQ3NiwgMzQ5MCwgMzQ5NCwgMzYzNCwgMzUwMCwgMjc5MCwgMjkyMSwgMzUwNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzUxMiwgMzUxNywgMzUyMiwgMjgzMywgMzIwNCwgMjc5MCwgMzUyNywgMjc5MCwgMjc5MCwgMjc5MCwgNDI0OSwgMjc5MCwgMjc5MCwgMjc5MCwgMzUyNiwgMjc5MCwgMjc5MCwgMjc5MCwgMzgyMSwgMjc2MSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDM0NywgMjY4NiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDM1MSwgMjc5MCwgNDI0OCwgMjc5MCwgMjc5MCwgMjc5MCwgMzUzMSwgMzUxNywgMzQxMiwgMjc5MCwgMjc5MCwgNDk4NywgMjc5MCwgMjc5MCwgMjU2MywgMjc5MCwgMjc5MCwgMjc5MCwgNDA5NCwgNDA3OSwgNDA3OSwgNDA3OSwgNDA3OSwgMjQzNSwgMjQzNiwgMjQzNiwgMjQzNiwgMjM5NywgMjMyMSwgMjMyMSwgMjMyMSwgMjMyMSwgMjMyMSwgMjQ2NCwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjM5MywgMjQwNSwgMjc5MCwgMjc5MCwgMjgzMywgMjc5MCwgNDk4NywgMjc5MCwgMjc5MCwgNDQyMiwgMjc5MCwgMjc5MCwgNDEyNiwgNDMyMiwgMzAzMiwgMjc5MCwgNDk4NywgMjc5MCwgMzM5MCwgNDk4OSwgMjc5MCwgMjYwNSwgMjczMCwgMjc5MCwgMzU0MSwgMzU0NywgNDc4OCwgMzU0NywgMjU2NiwgMjU2NiwgMjU2NiwgNDg5NCwgNDAxNCwgNDAxNCwgNDAxNCwgNDc4OCwgMjgzMiwgMzU1MywgMjMxNSwgNDg3NSwgMjU2NywgNDAxNSwgNDg5NiwgMjgzMCwgMjg5OSwgMzU1OSwgMzU2MCwgMzU2NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzYxNSwgMzYxNCwgMjc5MCwgMjc5MCwgNDQ2NSwgMzkxNywgMjU4NSwgMzYxOSwgMzYyNSwgMzczNywgNDI2NiwgNDkxNSwgMzYyOSwgMzY0OSwgNDMwNiwgMzYzMywgMzYzOSwgMzY0NywgMzY1MywgMjc5MCwgMjc5MCwgNDY5MSwgMzY1OCwgMjc5MCwgNDQ2NCwgMzkxNiwgMjc5MCwgMzY2MywgMjcyMiwgMzY3MCwgMzY3NCwgNDE5MywgNDE5NiwgMjc5MCwgMzY5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjM4MiwgMzY5NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjM4MywgMzY5NSwgMjc5MCwgMjc5MCwgMjc5MCwgMjMzOSwgMzE0MywgMjc5MCwgMjc5MCwgMjc5MCwgNDUxNywgMjc5MCwgMjk2NSwgNDQ3NCwgNDcxOSwgNDA2NSwgNDcwMywgMjU3OCwgMzY5OSwgMzcwNCwgMjc5MCwgMjc5MCwgMzExOCwgMjc5MCwgMjc5MCwgMjc5MCwgNDk5OSwgMjc5MCwgNDg2OSwgNDk4NCwgNTAwNCwgMjc1MiwgMjc5MCwgMjc5MCwgMzExOCwgMjc5MCwgNDMxNywgMzcyMywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDM5MSwgMzcxMSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzcxNiwgMzg0NywgMjc5MCwgMjc5MCwgMzI1OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzI1OCwgMjc4MywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzI1OCwgMjc4MywgMzc5MSwgMjcyNSwgMjc5MCwgMzc5NSwgMjc5MCwgMjc5MCwgMzgwMywgMjc5MCwgMjc5MCwgMzgxMCwgMjc5MCwgMjc5MCwgMjYzOCwgMjc5MCwgNDc4MiwgMzIwMiwgMjcxNiwgMzgxOCwgMjc5MCwgMzc5NSwgMjc5MCwgNDU4NCwgMzgxMiwgMjc5MCwgMjM1MSwgMjc5MCwgMjc5MCwgMzgxMSwgMjc5MCwgMzgyNSwgMzgzOCwgMjc5MCwgMjc5MCwgNDk4OCwgMjc5MCwgMzcyNSwgNDg3NSwgMjc5MCwgMjQxNCwgMjc5MCwgMzUzNSwgNDk0MiwgMjc5MCwgMjQzMCwgMjc5MCwgNDMyMywgNDAxNCwgMzg0NiwgMzIwNSwgMzg0NywgNDAzOSwgMjc5MCwgMjcxMywgMjc5MCwgMzg1MiwgMzY4MywgMzA2NywgMzEwNCwgMjc5MCwgMzY4NSwgNDMwNSwgMzY4NSwgMzkxNSwgMzkxNSwgMzEwNSwgMzY4MywgMzY4MywgMzY4MywgMzA2NiwgMzMzMSwgMzEwNSwgMzMzMiwgMzMzMSwgMzMzMiwgMzY4NCwgMzI1NiwgMjc5MCwgMjc5MCwgMzM3MSwgMzczNSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzQyMSwgMzc0MiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzc0MSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzc0NiwgMjc5MCwgMzc1OSwgMjcwMywgMzYyMSwgNDExMywgMzg4MSwgMzg4NSwgMzg4OSwgMzg5MywgMzg5NCwgMzg5OCwgMzkwMiwgMjc5MCwgMjc5MCwgMzE2MiwgMjc5MCwgMjc5MCwgMzY0MywgMjk4MywgNDUwMSwgNDU2MiwgMzkwNywgMzc2NSwgNDI4MiwgMzkyMSwgMjc5MCwgNDU1NCwgNDAyMiwgMjc5MCwgMzkyNSwgMzkzMiwgNDU1NiwgMzkzNiwgMjc5MCwgNDI0MiwgMzk0MSwgMjc5MCwgMjg1NSwgMjc4NCwgMzk0MywgNDM3NSwgNDQwMiwgMjg2MiwgMjg2NiwgMjg3MCwgMjg3NCwgMjg3NCwgMjg3NSwgMjg3OSwgMjgxOSwgMzMyNSwgMjc5MCwgMjc3OCwgMjc5MCwgNDE4MiwgNDk2MCwgNDE4NywgMjUwNCwgNTAwNywgNDIwMywgNDIwNywgNDIxMSwgNDIxNSwgNDIxOSwgNDIyMiwgNDIyNCwgMjc5MCwgMjc5MCwgNDA3NywgNDA3OSwgNDA3OSwgNDA3OSwgNDA3OSwgNDA3OSwgMjM5NiwgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNiwgMjQzNiwgMjM3NSwgMjMyMSwgMjMyMSwgMjMyMSwgMjMyMiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjQ2NiwgMjMzMiwgMjM1NywgMjM4MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzIwNCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzE2MywgMjc5MCwgMjc5MCwgMjc0NiwgMzg1OCwgNDg0OCwgNDkzMCwgMzg3MiwgMzY0MiwgNDU3OSwgMjcyNywgNDExOCwgMjMxNSwgMzc2NCwgMzk0NywgMzk1MSwgMjc5MCwgMjc5MCwgMzgxNCwgMzk1NywgMjc5MCwgMjc5MCwgMjc5MCwgMzk2NywgMzM1MCwgMjk4NCwgMjcyOSwgMzk3OCwgMzU0OCwgMzk4NCwgMzk2MSwgMjc5MCwgMjc5MCwgMzgxMywgMzk4OCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzY4NiwgNDAyNywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzI1NywgNDA1MSwgMjc5MCwgMzA3NCwgMjc5MCwgMjc5MCwgNDI5OSwgMzk5MywgMjc5MCwgNDAwNywgMjc5MCwgMjk4NCwgMjc5MCwgMzU2OCwgMzU3NSwgNDI2MCwgMzU4MywgMzU4NywgMzU5MSwgMzU5NCwgMzU5NywgMzYwMCwgMzYwMSwgMzYwNSwgMjc5MCwgMjc5MCwgMjc5MCwgNDc1MCwgMjk2NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjk2OSwgMjc2MSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDc0MywgMjc5MCwgNDgzNCwgMjc5MCwgMzM0OCwgNDYwNCwgNDAxMywgNDA3MCwgNDMxMSwgNDAyMCwgMjc5MCwgMjc5MCwgMjc5MCwgNDAyNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzU3OCwgNDk2NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDk2OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzU3OSwgMjc5MCwgNDAzMSwgMjc5MCwgNDAzNywgMjc5MCwgNDA0MywgMjc4OSwgNDMzMywgNDU3MSwgNDAyMSwgMjc5MCwgMjc5MCwgNDM2MiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzk2OCwgNDE4MywgMjc5MCwgMjc5MCwgNDI3MSwgMzk3MiwgNDAzMywgMjc5MCwgMjc5MCwgNDgzMiwgMjc5MCwgMjc5NiwgMjc5MCwgNDM2MCwgMzk5MywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDA0OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDM2MSwgMjc2MSwgNDUxMCwgNDI0MSwgNDA1NywgNDI1NCwgNDc3MywgNDA2OSwgNDQzOSwgMjc5MCwgMjc5MCwgNDk3NiwgMjc5MCwgMjc5MCwgMjc5MCwgNDQ1NywgMjc2MSwgMjc5MCwgMjc5MCwgNDQ4NSwgMzk4OSwgMjc5MCwgMjc5MCwgNDQ1NiwgNDA3NCwgMzczMSwgNDgzNiwgNDI1NCwgNDA4NSwgNDA5MiwgMzcwNywgMjc5MCwgNDA2MCwgMjc5MCwgMjc5MCwgNDA2MCwgNDE0NywgNDEzMiwgNDE0MCwgNDEzNCwgNDg0MywgMjUwMSwgNDEzMCwgNDkyMSwgNDkyMSwgNDkyMSwgNDI5MSwgNDEzNSwgNDEzMiwgNDEzMiwgNDEzMiwgNDEzOSwgNDkyMiwgNDEzNSwgNDE0NCwgNDkyMiwgNDkyMywgNDEzMywgNDE1OSwgNDE2OSwgNDE3MSwgNDE2NiwgNDE2MywgNDE3NSwgNDE3OCwgMjc5MCwgMjc5MCwgMjc5MCwgMjgwMCwgMjc5MCwgMjc0NiwgMzk1OCwgNDA4NywgMjgxOCwgMjc5MCwgMzMxNCwgMjgwNiwgMjc5MCwgMzUwMiwgMjgxOCwgMjc5MCwgMjc5MCwgNDI3MCwgMzAzOSwgNDI3NSwgMjc5MCwgMjc5MCwgMjc5MCwgNDI3OSwgMzM1OCwgMjg1MCwgNDI4NiwgNDI5NSwgMjc5MCwgMzM5NywgMzYwNywgNDMwMywgNDMxMCwgMjc5MCwgMjc5MCwgNDk2NSwgNDMxNSwgMjc5MCwgMjc5MCwgMjc5MCwgMzM3OCwgNDMyMSwgMjc5MCwgMjc5MCwgMjc5MCwgMzM3OSwgMjc5MCwgMjc5MCwgMzQ3MiwgMjc5MCwgMjc5MCwgMjc5MCwgMjM0NSwgMzg0NywgMjc5MCwgMjc5MCwgMzQ3MSwgMzczNiwgMjc5MCwgNDYwMywgMjc5MCwgNDMwNSwgMjc5MCwgNDgxMiwgNDMyNywgNDMzOSwgMjc5MCwgMjc5MCwgMzM1MiwgMzM1NiwgMjk5NiwgNDM0MywgMzkzNywgNDI5NywgNDk5NSwgNDQ3NiwgMjg0MywgMjc5MCwgMzAyNSwgNDkyNywgMjc5MCwgMjc5MCwgNDkzNCwgMjQwNiwgMjU5OSwgNDkzOCwgNTAyMywgNDk0NiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDk1NywgNDM4MSwgNDM1OSwgMjc5MCwgMjc5MCwgMjc5MCwgMzgwNiwgNDM4OSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzk2MywgNDM5NiwgMjc5MCwgMjc5MCwgMjc5MCwgMjk0NiwgMjc5MCwgMjc5MCwgMjc5MCwgMzcxMiwgMjk0NywgMjc5MCwgMjc5MCwgMjc5MCwgNDIzNCwgMzk3MywgMjc5MCwgMjc5MCwgMjc5MCwgMzk2MiwgNDM5NSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzk2MiwgNDM5NSwgMzc1NSwgNDM1OSwgMjc5MCwgMzA1NiwgMzA2MCwgNDM2OCwgMzk2MCwgNDUzNSwgNDM3NywgMjc5MCwgMjc5MCwgMjc5MCwgMjgwOCwgNDQwMCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDQwNiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDcwOCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzE1MiwgMzIwMywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzk2MywgNDQxMSwgMjc5MCwgMjc5MCwgMjc5MCwgMjgwNywgNDQwNywgNDQ0NiwgMjc5MCwgNDQxNywgMjk0MiwgNDQyNiwgMzY1NCwgMzc2MSwgMjc5MCwgMjc5MCwgMzcyMCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzcyOSwgMjc5MCwgNDQ3MiwgMjc5MCwgMjU4NiwgMzc4NywgMzEzOCwgMjc5MCwgNDg2MiwgNDQzOCwgMjc5MCwgMjc5MCwgMjgwNywgNDQ1MSwgMjc5MCwgMjc5MCwgMjc5MCwgNDQ0MywgMjc5MCwgMjc5MCwgMjc5MCwgNDQ1MCwgNDY4OSwgMzQwMCwgMjk0MiwgNDQ1NSwgNDUzNiwgNDQ4NCwgMjc5MCwgNDQ2MSwgMjc5MCwgMjc5MCwgNDQ2OSwgMjc5MCwgMjc5MCwgNDQ4MCwgMjc5MCwgMjc5MCwgMzc3OSwgNDUyMywgNDQ4OSwgNDQ5OCwgMzY1NCwgNDQ4MywgMjc5MCwgNDUwOCwgMjc5MCwgNTA0MCwgNDAwMiwgMjc5MCwgNDUxNCwgMjc5MCwgMjc5MCwgNDUyMSwgNDUyNSwgNDUyOSwgNDU0MCwgNDM4NCwgNDU5MCwgNDM4NSwgMjc5MCwgNDUxNCwgMjc5MCwgNDU0NywgNDU1MSwgMjc5MCwgMzk5NywgNDU2MCwgNDU2NiwgMzk5OSwgNDU3NSwgMzk5NSwgNDAwOSwgNDAwOSwgNDAwOSwgNDU4MywgNDU4OSwgNDAwMSwgNDAwMSwgNDU5NiwgMzY4MCwgNDYwOCwgNDg3OSwgNDYxMywgNDYyMCwgNDYwOSwgNDg3NywgMjQwNywgMzc4MiwgNDc5MiwgNDc5MywgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzAxOCwgNDYzMCwgNDYzNCwgNDY0NSwgNDY0OSwgNDY1MywgNDY1NywgNDY2MSwgNDY2NSwgNDY2OSwgNDY3MiwgNDY3NiwgNDY3OSwgNDY4MywgMjc5MCwgMjc5MCwgMjc5MCwgMzAxNywgNDY5NSwgNDU0MiwgNDc2MSwgNDcwMSwgNDU3NywgNDkwNiwgNDcwNywgNDcxMiwgNDcxNiwgNDcyNywgMjc5MCwgMzgzMiwgMjU5NCwgMzA3NSwgNDczMywgMzgzMCwgNDczOSwgMjc5MCwgMjc5MCwgMjc5MCwgMzAxOSwgNDg0MiwgMjU5NywgNDkwMCwgNDkwNCwgNDg1MywgNDkxMiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzAyNywgNDc0NywgNDc1NCwgNDc2MCwgNDc2NSwgNDc3MSwgNDc3NywgNDc4NiwgNDc5NywgNDgwMSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDgwNywgMjc5MCwgMjc5MCwgMzg3NiwgNDU0MywgNDE1MCwgMjkzMCwgMjc2NiwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDcyMywgMjc5MCwgMjc5MCwgMjc5MCwgMjY5MSwgMjc5MCwgMjc5MCwgMjc5MCwgMzA5NCwgMjY5NSwgMjcwMSwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMzUwOCwgMjc5MCwgNDg0MCwgMjQwNiwgNDg0NywgNDgwMywgNDExMSwgNDg1MiwgNDg1NywgNDkxNCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjY5NiwgNDg2NiwgMjc5MCwgMjc5MCwgMzkxMCwgMjc5MCwgMjc5MCwgNDY4NiwgNDUzMSwgNDg4NywgMzc3MiwgMzA4MiwgMzcwNiwgMjc5MCwgNDI4OSwgMjc5MCwgMzk3NCwgMzkxNSwgNDk3MywgMjc5MCwgNDk4MCwgNDk4NCwgNTAxOCwgNDkwNywgNDk5NCwgMjc5MCwgMjc5MCwgMjgwMSwgNDgzMCwgMjc5MCwgMjc5MCwgMjc5MCwgNTAwMCwgMjc5MCwgMzA5MSwgMjc5MCwgMjc5MCwgNDEwMywgNDUzMywgNDEwOSwgMzA4NCwgMjc5MCwgNDExNywgNDkwOCwgMjc5MCwgMzMwMywgMjc5MCwgNDEyMiwgMzI0OSwgMjc5MCwgNDk5OSwgMjc5MCwgMjc5MCwgNDgyOCwgMjc5MCwgMjc5MCwgMzU3MSwgMjc5MCwgNTAxMSwgNTAxNywgNTAyMiwgMjc5MCwgMjc5MCwgMzc5OSwgMjc5MCwgMzM4NCwgMzM4OSwgMjc5MCwgMjc5MCwgNTAyOSwgMzM5NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDg4MSwgMjc5MCwgMzU0MywgMzQ0OSwgMzQxMCwgMzExNiwgNTAyOCwgMjc5MCwgMzc5OCwgMjc5MCwgMjc5MCwgNTAyNywgMzM2NSwgMzg2NCwgMjc5MCwgNDk5MCwgMjc5MCwgNDA0NSwgMjc5MCwgMjcxMCwgMjc5MCwgMzQ0NywgNDYwMywgMzQ1NSwgMzQ1OSwgMzcwMCwgMzY3NywgMjc5MCwgMjc5MCwgMzQ2NCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNDE5OSwgNTAzMywgMzEzNiwgMjc5MCwgNDM4MywgNTAzOSwgMjU4NywgMzgzNCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjU3OCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgMjc5MCwgNjA5MCwgNjU2MywgNTA0NCwgNTA1NywgNTA1NCwgNjU5NCwgNjU5NiwgNjU5NiwgNjU5NiwgNjU5MSwgNTA3NCwgNjU5NSwgNjU5NiwgNjU5NiwgNjU5NiwgNjU5NiwgNTA4NywgNTA2MSwgNTA3NCwgNjU5NiwgNjU5NiwgNTA2NywgNTA2MiwgNjU5NiwgNTA3OCwgNTA4NCwgNTA4MCwgNTA2NiwgNjU5NCwgNjE2MywgNTA3MSwgNTA5MSwgNTA5NCwgNTA5NCwgNTA5NCwgNTA5NSwgNTA5OSwgNTA5OSwgNTEwMywgNTEwNywgNTExNCwgNTExMSwgNTExOCwgNTEyMiwgNTEzNCwgNTEzNywgNTEyOSwgNTEzMCwgNTEyNywgNTEyNSwgNTE0MSwgNTE0NSwgNjU2MSwgNjQ0NiwgNTIzNCwgNTE3MywgNTYzNSwgNTYzNSwgNTYzNSwgNTIxOSwgNTU5OCwgNTUwMywgNTI1MSwgNTI1MSwgNTI1MSwgNTI1MSwgNTI1MiwgNTE5NiwgNTI2NywgNjI0OCwgNTUwMiwgNTI1MSwgNTI1MSwgNTE5NiwgNTE5NiwgNTE5NiwgNTI2NiwgNTIwMiwgNTIxMiwgNTYzMiwgNTYzNSwgNTA1MCwgNjUxOSwgNjUwOSwgNTYzNSwgNjgxOCwgNTYzNSwgNTYzNSwgNTE0NiwgNTE1MCwgNjUzNSwgNTIxOCwgNTYzNSwgNTYzNSwgNTE0NywgNTE1NCwgNTE5NiwgNTI2NywgNTI2OCwgNTUwMiwgNTIxMywgNTIxNCwgNTIzMiwgNTIxNCwgNTYzMSwgNTYzNSwgNTE0NiwgNTE1MSwgNTYzNSwgNTE1NSwgNTYxOSwgNjI5NywgNTYzNSwgNjUzMiwgNjUzNiwgNTI0NCwgNTI1MCwgNTI1MSwgNTI1MSwgNTI1MSwgNTI5NSwgNTYzMSwgNTYzMywgNTYzNSwgNTYzNSwgNTYzNSwgNTA0OSwgNjUxOCwgNTUwMiwgNTUwMiwgNTI5MywgNTI1MSwgNTI1MSwgNTIyNiwgNTE5NiwgNTE5NiwgNjI0NywgNTI3MCwgNTUwMiwgNTUwMiwgNTUwMiwgNTUwNCwgNTI2OCwgNTUwMiwgNTIxNCwgNTYzMywgNTI4MiwgNTYzNSwgNTYzNSwgNTYzNSwgNTI3MywgNjA4NCwgNTE5NiwgNTI2NywgNTI3MSwgNTYzNSwgNTE2NiwgNTYzNSwgNTYzNSwgNTc0OSwgNTIxOSwgNTI1MSwgNTI5NiwgNTE5NiwgNTE5NiwgNTMwNiwgNTYzNSwgNTE5NiwgNTI2NSwgNTI2OSwgNTI3MywgNTYzNSwgNTYzNSwgNTE2NSwgNTYzNSwgNjI0NywgNTI2OCwgNTUwMiwgNTUwMiwgNTUwMiwgNTUwMiwgNTI1MSwgNTUwMiwgNTI1MSwgNTI1MSwgNTI1MSwgNTE4NiwgNTE5MywgNTI3MiwgNTYzNSwgNTYzNSwgNjI2MSwgNTYzNSwgNTI5OCwgNTYzNSwgNTYzNSwgNjI2MiwgNTUwMiwgNTUwMiwgNTI5NCwgNTI1MSwgNTI1MSwgNTI1MSwgNTI5NiwgNTI1MSwgNTI1MSwgNTI2NCwgNTE5NiwgNTE5NiwgNTE5NiwgNTE5NiwgNTI2NSwgNTE5NiwgNTE5NywgNTYzNSwgNjI0NSwgNTI2OSwgNTI5MywgNTI5NiwgNTMwNiwgNjI0NiwgNjI0NywgNTUwMiwgNTUwMiwgNTUwMiwgNTI5MiwgNTI1MSwgNTI1MSwgNTE5NiwgNjI1NSwgNjI0NywgNTI3MCwgNTI5MiwgNTI1MSwgNTI2NCwgNTE5NywgNTE5OCwgNTMwMiwgNTI5NywgNTMxMiwgNTMxMiwgNTMwNCwgNTYzNSwgNTE3OSwgNTYzNSwgNTY0MywgNTE2OCwgNTYzNSwgNjg2MCwgNTMyOSwgNTU5MCwgNTMzMywgNTMzNiwgNTMzOSwgNTM0MywgNTM2MiwgNTQxOSwgNTM0NywgNTM1MSwgNTQwNCwgNTQxOSwgNTQxOSwgNTQxOSwgNTQxOSwgNTM2OCwgNTM4NCwgNTM5MywgNTM1NSwgNTM1OSwgNTQxOCwgNTM2NywgNTM3MiwgNTM0NiwgNTQyMCwgNTM4MSwgNTM5MCwgNTM5NywgNTM3NywgNTM4NiwgNTQxOSwgNTM3NiwgNTQwMSwgNTQxNiwgNTQyNCwgNTQyOCwgNTQzMCwgNTQzMCwgNTQzNCwgNTQzNiwgNTQ0MCwgNTQ3MywgNTQ0NCwgNTQ0NiwgNTM2NSwgNTQwNywgNTQ1MCwgNTQ1NCwgNTQ1OCwgNTQ2NiwgNTQ2NCwgNTQ2NiwgNTQ2MiwgNTQ3MCwgNTQ3NywgNTYzNSwgNTE4MSwgNjM1MywgNTYzNSwgNTIxOSwgNTYzNSwgNTYzNSwgNTIxOSwgNTYzNSwgNzI2NiwgNTYzNSwgNTkwNCwgNTYzNSwgNjI1NiwgNjA4MCwgNTYzNSwgNjg1MywgNTYzNSwgNTYzNSwgNTE2OSwgNTY3MiwgNjgyMCwgNTYzNSwgNTYzNSwgNTYzNSwgNTI3NSwgNTYzNSwgNTYzNSwgNzExMiwgNjM0NiwgNzE3MiwgNTYzNSwgNTIyMCwgNzI4MiwgNTYzNSwgNTI3MywgNTY0MiwgNTYzNSwgNTYzNSwgNjg3OSwgNTI0NiwgNTg5MSwgNTYzNSwgNTYzNSwgNTE4MiwgNjI1OCwgNTUyMywgNjA4MywgNjA4MCwgNTk3NywgNjU2OSwgNTYzNSwgNjg3NywgNjg3NSwgNjE1MCwgNTUyNywgNTUzMCwgNTUzMSwgNTUzNSwgNTUzOCwgNTU0MiwgNTU0NywgNTU0NSwgNTU1MSwgNTU1MywgNTU1NCwgNTU1OCwgNTU2MSwgNTU2OSwgNTU2MiwgNTU2NiwgNTU2MiwgNTU3MiwgNTU3NCwgNTU3OCwgNTYzNSwgNjgyMCwgNjIyMiwgNTYzNSwgNTk3NSwgNTYzNSwgNTYzNSwgNjcwMiwgNjIxMCwgNTYxNCwgNTYzNSwgNTYzNSwgNTE4OSwgNTYzNSwgNTYzNSwgNjc3MywgNTY1NiwgNTYzNSwgNTYzNSwgNTYzNSwgNTMwNywgNTY2OCwgNTYzNSwgNTYzNSwgNTYzNSwgNTMxNSwgNjc3OSwgNTY2MiwgNTY2NiwgNTYzNSwgNTYzNSwgNTYzNSwgNTU4MiwgNTY3NSwgNTYzNSwgNTYzNSwgNTYzNSwgNTMyMCwgNTY3OSwgNjU2NywgNTYzNSwgNTY4MywgNTY5MSwgNTY5OCwgNTcwNiwgNTczNCwgNTY5OSwgNTcwNywgNjU2OCwgNTYzNSwgNTYzNSwgNTYzNSwgNTQ5MSwgNjczNiwgNTY5NCwgNTcwMCwgNTcwOCwgNTE2MiwgNTYzNSwgNTYzNSwgNTYzNSwgNTUxMywgNzMxMCwgNjMxOCwgNTY2NCwgNTYzNSwgNTYzNSwgNTYzNSwgNTI3NywgNTc0NiwgNTYzNSwgNTcxMiwgNTYzNSwgNTI3NCwgNTI3MywgNTYzNSwgNTI3NCwgNjIyMywgNTYzNSwgNTI3NSwgNTYzNSwgNjY5NSwgNTYzNSwgNTYzNSwgNjY5NCwgNTgyMywgNjU2OCwgNTYzNSwgNTMyMiwgNTYzNSwgNTYzNSwgNTkxMCwgNTYzNSwgNTYzNSwgNTYzNSwgNjYxOCwgNTIzNiwgNTYzNSwgNTcxNywgNjczOSwgNjc0NSwgNTczMSwgNjU2OCwgNTYzNSwgNTMyNCwgNTYzNSwgNjMzNSwgNTgxMSwgNTYzNSwgNTYzNSwgNTYzNSwgNTY3NSwgNTcwMSwgNTczMiwgNTYzNSwgNTYzNSwgNTMxOCwgNTYzNSwgNTYzNSwgNjczNiwgNjc0MCwgNjc0NCwgNTczMCwgNTczNCwgNTYzNSwgNTYzNSwgNTYzNSwgNTUxNCwgNTc2OCwgNTcwMSwgNTc3NSwgNjU2OCwgNTc3NiwgNTYzNSwgNTYzNSwgNTYzNSwgNTYxNSwgNTc0NywgNzI1NCwgNTYzNSwgNTYzNSwgNTUxMiwgNjk4OSwgNTIwOCwgNjQ0OCwgNTczMywgNTYzNSwgNTYzNSwgNTYzNSwgNTYyNSwgNTc4OCwgNzI1MywgNTYzNSwgNTYzNSwgNTYzNSwgNTYzNSwgNTE1OSwgNTc5NywgNTYzNSwgNTYzNSwgNTYzNSwgNTYzOCwgNjMxOSwgNTYzNSwgNTYzNSwgNTYzNSwgNTY0MCwgNjAyNywgNTc5OSwgNTYzNSwgNTYzNSwgNTYzNSwgNTY0NiwgNTY1MCwgNjgwNSwgNTYzNSwgNTYzNSwgNTYzNSwgNTY1NSwgNTgwNSwgNTc5OCwgNTYzNSwgNTYzNSwgNTYzNSwgNTYzNiwgNTUxNSwgNTgwMywgNjgwNCwgNjU2OCwgNTYzNSwgNTQ5NiwgNTA0OCwgNTYzNSwgNTIxOSwgNjYxOCwgNTYzNSwgNTYzNSwgNTYzNSwgNjI2MCwgNTYzNSwgNTU4MywgNTYzNSwgNTYzNSwgNTgxOSwgNjY5NSwgNTYzNSwgNTYzNSwgNTYzNSwgNTcyNCwgNTgxOSwgNTYzNSwgNTgyMSwgNTgxOSwgNTYzNSwgNTYzNSwgNjkzNCwgNjg3OCwgNTc1NiwgNTgxNSwgNTgyOSwgNTYzNSwgNTUwOCwgNTIwNCwgNTY2NCwgNTg0MiwgNTg0NiwgNTg1NCwgNTg1OCwgNTg2MiwgNTg2NiwgNTg2NiwgNTg2OCwgNTg3MCwgNTg3MCwgNTg3MCwgNTg3MCwgNTg3NCwgNTg3NCwgNTg3NCwgNTg3NCwgNTg3NywgNTg3OSwgNTYzNSwgNTYzNSwgNTYzNSwgNTczOCwgNzExNiwgNTg4NSwgNTYzNSwgNjI1OCwgNjA4MCwgNTYzNSwgNTg5OSwgNTkxNywgNTYzNSwgNTYzNSwgNTU5NCwgNTYzNSwgNTMyNCwgNTYzNSwgNTYzNSwgNjYxOCwgNTYzNSwgNjYxOCwgNTYzNSwgNTU4MiwgNTYzNSwgNTYzNSwgNTgxOSwgNTkyMSwgNTYzNSwgNTYzNSwgNTQ4NywgNzMwMywgNTQ4NSwgNTYzNSwgNjgzNCwgNTYzNSwgNTYzNSwgNTYxMiwgNTYzNSwgNjgzMiwgNTkzMiwgNTYzNSwgNTYzNSwgNTYzNSwgNzE3OCwgNTYzNSwgNjY5NiwgNTYzNSwgNTkzNywgNTMyNSwgNTYzNSwgNTYzNSwgNTYzNSwgNTc2MSwgNTk2OSwgNTYzNSwgNTYzNSwgNTYzNSwgNTgwNCwgNTk4NCwgNTYzNSwgNTYzNSwgNTYzNSwgNTgxOSwgNTYzNSwgNTg1MCwgNjMzOSwgNTk5MiwgNTYwNiwgNTYzNSwgNTYzNSwgNTYzNSwgNjY5NiwgNTYzNSwgNTkzOCwgNTYzNSwgNjI1NiwgNjkzMCwgNjA4MSwgNjAxNSwgNTYzNSwgNTYzNSwgNTYzNSwgNTg5NSwgNjAxNiwgNTYzNSwgNTYzNSwgNTYzNSwgNTkwMiwgNTY0MCwgNTk5OSwgNjAwNSwgNjAxMSwgNjI2MSwgNTYzNSwgNjA5NSwgNTYzNSwgNTYzNSwgNjA4OCwgNjI4OSwgNjAzNywgNjA0MiwgNTYzNSwgNTYzNSwgNTYzNSwgNzI1NSwgNTYzNSwgNTYzNSwgNjAyNywgNjAzMiwgNjAzOCwgNjA0MywgNTYzNSwgNTYzNSwgNjI1NiwgNTYzNSwgNjA4MiwgNTYzNSwgNTgyMCwgNTYzNSwgNTgyMCwgNTYzNSwgNTYzNSwgNTgyMSwgNjI2MSwgNjMzNSwgNjY5NSwgNTYzNSwgNTYzNSwgNjY5MiwgNjU2OCwgNTkyMywgNzAyOCwgNjAzMiwgNjA1OCwgNjAzMywgNjA1OSwgNTYzNSwgNTYzNSwgNTYzNSwgNTkwOCwgNzEyOCwgNzEzMiwgNjYxMywgNTYzNSwgNTYzNSwgNTYzNSwgNTkyMywgNTUxNywgNjc4NiwgNjc5MCwgNTYzNSwgNjU2NCwgNTYzNSwgNTYzNSwgNTYzNSwgNTkwNywgNjI2MCwgNjMxOCwgNTYzNSwgNTYzNSwgNTYzNSwgNzI1OSwgNjA3MiwgNjAzMywgNjA2NCwgNTYzNSwgNTYzNSwgNzAyNywgNjAzMiwgNjA2MywgNjU2NCwgNTYzNSwgNTYzNSwgNjI2MCwgNjI2MSwgNTYzNiwgNjk4OCwgNzI1NSwgNTY3OCwgNTYzNSwgNjA4MiwgNTYzNSwgNTgyMSwgNTk0NSwgNTQxMiwgNTYzNSwgNTYzNSwgNTYzNSwgNzI4NSwgNTYzNSwgNTYzNSwgNjI1NywgNjA4MSwgNjI2MSwgNTYzNSwgNTYzNSwgNTYzNSwgNTIyMSwgNjA3MSwgNjcxMSwgNjA2NCwgNTYzNSwgNTYzNSwgNjgzOCwgNTYzNSwgNTU4OSwgNjYxNywgNjA3MiwgNjcxMiwgNjA2NSwgNTYzNSwgNTYzNSwgNjg0NCwgNTYzNSwgNTYzNSwgNjg1MSwgNjU2OCwgNjA3MCwgNjcxMCwgNjA2MywgNjU2NCwgNTk0MywgNjk4MywgNTYzNSwgNTYzNSwgNTYzNSwgNzI4NiwgNTYzNSwgNTc1NiwgNTYzNSwgNTYzNSwgNTYzNSwgNTk0MywgNjI2MCwgNjA5NCwgNTYzNSwgNTYzNSwgNTYzNSwgNzMzMiwgNTcyMCwgNTYzNSwgNjgyMSwgNjA3MywgNjEwOSwgNTYzNSwgNTYzNSwgNTYzNSwgNTk1NiwgNTYzNSwgNjA5OSwgNjEwNywgNjA2NiwgNjI1NiwgNjA4MSwgNjMzNywgNTYzNSwgNTYzNSwgNjg1MiwgNTYzNSwgNTMyMCwgNTYzNSwgNjA3NSwgNjA3OSwgNTYzNSwgNTYzNSwgNTYzNSwgNTk1OCwgNTYzNSwgNjgyMCwgNzE1OCwgNjA3NywgNTYzNSwgNTYzNSwgNTYzNSwgNzM0NiwgNTYzNSwgNjEzMSwgNjgyMSwgNjA3NCwgNjA3NiwgNTYzNSwgNTYzNSwgNjgyMCwgNjcwOCwgNjEyNywgNTYzNSwgNTYzNSwgNzE1NiwgNTYzNCwgNTkwNSwgNTYzNSwgNTIyOCwgNjA1MywgNTI3NCwgNjExNiwgNjA3OSwgNTYzNSwgNjk4MSwgNjE0MiwgNzE1NiwgNTgyMiwgNTYzNSwgNzE1NywgNjExOCwgNTYzNSwgNTYzNSwgNjExNSwgNjA3OCwgNTYzNSwgNTYzNSwgNjExNCwgNjA3OCwgNTYzNSwgNTYzNSwgNjExNSwgNjA3OCwgNTYzNSwgNTY3NCwgNTI4NSwgNTY3NCwgNjExNywgNTYzNSwgNTYzNSwgNTYzNiwgNTYzNSwgNTYzNSwgNTYzNSwgNjIyMSwgNjExOCwgNTYzNSwgNTYzNSwgNjExNiwgNjEzOSwgNjA3OSwgNTYzNSwgNjEzOSwgNzA4MywgNTY3NCwgNjYxNywgNzEzNCwgNTYzNSwgNzEzNCwgNTYzNSwgNzEzNCwgNTYzNSwgNjYxNiwgNjYxNCwgNTYzNSwgNTYzNSwgNjg3OCwgNTc2NCwgNjc0NCwgNjQ0OSwgNTczNCwgNTYzNSwgNTI4NywgNjYxNCwgNjYxNCwgNjYxNCwgNzI1MywgNTYzNSwgNTY3NCwgNTYzNSwgNTYzNSwgNTUxMiwgNTUxNiwgNTYzNSwgNjM5MiwgNjM5MiwgNTYzNSwgNTYzNiwgNTY0MiwgNjI1NywgNTYzNSwgNjA4NSwgNzI4NiwgNTYzNSwgNTYzNSwgNTYzNSwgNjQ4MSwgNjQ4NSwgNTczMywgNjI1NSwgNjg0MCwgNjE0NywgNTYzNSwgNTYzNSwgNjk0MCwgNjk0NiwgNzI4NiwgNjYxNywgNjg3OSwgNjE1NCwgNjE2MCwgNjE2NywgNjE1NiwgNjE3MSwgNjE3NSwgNjE3OSwgNjE4MywgNjE4NCwgNjE4OSwgNjE4OSwgNjE4NSwgNjE5MywgNjE5MywgNjE5MywgNjE5MywgNjE5NiwgNzI3NiwgNTYzNSwgNTU4MywgNTYzNSwgNTYzNSwgNTU4MiwgNjIwOCwgNTYzNSwgNTYzNSwgNjIxNCwgNjE5NywgNTI3OCwgNjIyOCwgNTYzNSwgNTYzNSwgNjk3NSwgNTYzNSwgNTYzNSwgNzAwMSwgNTc2OSwgNTc5NywgNTMwOCwgNTYzNSwgNjk2MSwgNTYzNSwgNTYzNSwgNzAwMSwgNTc3MCwgNjIzNiwgNTYzNSwgNTk4MCwgNjI1NCwgNTYzNSwgNTYzNSwgNTYzNiwgNTk0NSwgNTQxMiwgNTk1MSwgNTYzNSwgNTYzNSwgNjI1MiwgNTYzNSwgNTYzNSwgNTYzNSwgNjA1MywgNTYzNSwgNjI1NSwgNjA4NiwgNjg1NSwgNjg2OCwgNTYzNSwgNjM5OSwgNTYzNSwgNjYxNCwgNTYzNSwgNTYzNSwgNjI3MywgNTYzNSwgNTYzNSwgNTYzOCwgNTk2NCwgNjY3NiwgNTYzNSwgNTYzNSwgNTYzNiwgNjk4OCwgNjk5NCwgNTYzNSwgNTY3OCwgNTYzNSwgNjA4MSwgNTYzNSwgNTgxOSwgNTk3MiwgNTYzNSwgNTYzNSwgNTYzNSwgNjA4MiwgNjA4NSwgNTYzNSwgNjI4MSwgNTYzNSwgNTYzNSwgNTY0MCwgNjU3MywgNjgwMiwgNTIwNiwgNjI5NSwgNTYzNSwgNTYzNSwgNzAwNywgNzAxNiwgNzA0MSwgNTYzNSwgNzE0NCwgNjI5MCwgNjgwMywgNTIwNywgNTIwNywgNjI5NiwgNTYzNSwgNTYzNSwgNTYzNSwgNjA4NCwgNjI5MSwgNTc3MSwgNjk5NSwgNTYzNSwgNTYzNSwgNzAzNCwgNTYzNSwgNTYzNSwgNzE1MiwgNTYzNSwgNTYzNSwgNzI1MywgNTYzNSwgNTYzNSwgNjk1NCwgNTY1NywgNTYzNSwgNzI1MiwgNjQwMCwgNTYzNSwgNjY3MCwgNTYzNSwgNjI1OSwgNjIwOSwgNTYzNSwgNTYzOSwgNjM0NywgNTYzNSwgNTYzNSwgNTYzNSwgNjA4OCwgNjMwOSwgNjMwMSwgNjMyNSwgNjMyOSwgNTYzNSwgNjMxMCwgNjMwMiwgNjMyNiwgNjA3OSwgNTYzNSwgNjk4MiwgNTkwNywgNTYzNSwgNjI1OCwgNjA4MSwgNjMxMSwgNjgwMSwgNjMyNywgNTYzNSwgNTYzNSwgNzI1NywgNjk2MCwgNjI1NSwgNjA4NiwgNjg1NiwgNjg2OSwgNTYzNSwgNTYzNSwgNTY0MCwgNzAyNywgNjQwMCwgNTYzNSwgNjczNSwgNzI3NywgNjY5MywgNTYzNSwgNjY3MSwgNTYzNSwgNTYzNSwgNTMyMCwgNjMxMCwgNjMyMywgNjMyNywgNjMyNCwgNjMyOCwgNTYzNSwgNTYzNSwgNTYzNSwgNjA4OSwgNTE0OSwgNTE1MywgNjA4NiwgNjg2NiwgNjU2NywgNTYzNSwgNTYzNSwgNzI4NywgNjYxNiwgNTYzNSwgNjg3OSwgNzI3OCwgNTU4MiwgNTYzNSwgNjc2OSwgNjU2NCwgNTYzNSwgNzI1MiwgNjQwMCwgNTI4OCwgNjA3OSwgNjY5NSwgNjY2OSwgNTYzNSwgNTYzNSwgNjIwMSwgNTYzNSwgNjM0NCwgNTYzNSwgNTYzNSwgNTY3NCwgNTgwNSwgNjM1MSwgNjM1NywgNTYzNSwgNTYzNSwgNTY3NiwgNTYzNSwgNjgyMCwgNzE3OSwgNjM2NiwgNjMyOSwgNTYzNSwgNTI2MCwgNTYzNSwgNTYzNSwgNTYzNSwgNjEyMiwgNjM5OSwgNTYzNSwgNTYzNSwgNjY3MSwgNTYzNSwgNjI1OSwgNjM2NSwgNzI1NSwgNTYzNSwgNjAyMSwgNTYzNSwgNTYzNSwgNTMxNSwgNTE2NywgNTYzNSwgNTYzNSwgNTYzNSwgNjI0NywgNjI0NywgNjYxOSwgNTYzNSwgNTYzNSwgNTYzNSwgNjI1NSwgNjA4NiwgNTYzNSwgNjYyMCwgNTYzNSwgNTYzNSwgNTYzNSwgNjI1NiwgNTIxOSwgNTYzNSwgNTYzNSwgNjYxOSwgNTkwNCwgNTc0OCwgNjc3MSwgNjYyMCwgNjYxOCwgNTYzNSwgNzA5NiwgNjYxOCwgNjYxOCwgNjYxOCwgNjc3MCwgNTkwMSwgNTUxMSwgNjM3MCwgNTYzNSwgNTYzNSwgNzMzMywgNTcyMSwgNTYzNSwgNzI1NSwgNzE1NCwgNTYzNSwgNTYzNSwgNzM0OSwgNTUxOCwgNzMxOSwgNjIwOSwgNjM4NCwgNTYzNSwgNjM3MiwgNTk4NSwgNjcxOSwgNjM5MCwgNjM5NiwgNjQwNCwgNjQwOCwgNjQxMSwgNjQxMywgNjQxNywgNjQxOCwgNjQxOCwgNjQyMiwgNjQyNCwgNjQyNSwgNjQyOSwgNjQyOSwgNjQyOSwgNjQyOSwgNjQzMCwgNjQyOSwgNTYzNSwgNTYzNSwgNTc1NSwgNTYzNSwgNTYzNSwgNTYzNSwgNTg4OCwgNTYzNSwgNjYwNCwgNzMyNiwgNTYzNSwgNTYzNSwgNTYzNSwgNjYxNiwgNTYzNSwgNjY5MiwgNTYzNSwgNTgyNCwgNjQ1NywgNjU2OCwgNTYzNSwgNjg1MiwgNTYzNSwgNjk0OCwgNTYzNSwgNjk0OSwgNjQ1NSwgNTYzNSwgNTYzNSwgNTYzNSwgNjI2MSwgNjI2MCwgNTYzNSwgNjQ2MiwgNjQ1NiwgNTYzNSwgNTYzNywgNTY0MCwgNjY3NSwgNzExNSwgNTYzNSwgNjQ2NywgNTYzNSwgNTY1OCwgNjQ1MywgNTYzNSwgNjQ2MywgNTYzNSwgNTYzNSwgNTYzNSwgNjI2MiwgNzMyOCwgNTYzNSwgNTYzNSwgNTYzNSwgNjI2NywgNTI3NywgNjYxNSwgNTYzNSwgNTYzNSwgNTc1NSwgNTgxOCwgNTYzNSwgNjgxOSwgNTYzNSwgNTYzNSwgNjQ5NCwgNjQ3MywgNTYzNSwgNjQ3NywgNTYzNSwgNTYzOCwgNjM0NiwgNTYzNSwgNTYzNSwgNzI3NSwgNTYzNSwgNTYzNSwgNzI4NywgNTYzNSwgNTYzNSwgNTYzNSwgNjQ4MCwgNTYzNSwgNjQ5OCwgNjUwNywgNjUxMywgNjUxOCwgNjUwOCwgNjUxNCwgNTYzNSwgNTYzNSwgNjUyMywgNTYzNSwgNTYzNSwgNTYzNSwgNjMxNSwgNTYzNSwgNjU0MCwgNTYzNSwgNTYzNSwgNTc4MywgNTYzNSwgNTYzNSwgNjU1NCwgNTYzNSwgNTYzNSwgNTYzNSwgNjMzOSwgNTYzNSwgNjI2MywgNjU0OSwgNjUwMywgNTYzNSwgNjU0NywgNTE3NiwgNjU1MywgNTYzNSwgNTYzNSwgNTYzNSwgNjMzNCwgNTYzNSwgNjU1OCwgNzMyNywgNTYzNSwgNTYzNSwgNTc4NCwgNTYzNSwgNjU3OCwgNTE1MywgNTYzNSwgNTYzNSwgNTYzNSwgNjQzOSwgNjA4OCwgNjU3NCwgNjU3OSwgNTE1NCwgNTYzNSwgNTYzNSwgNjU4MywgNTYzNSwgNTYzNSwgNTg5NCwgNTgxMCwgNTYzNSwgNTYzNSwgNTU4MSwgNTYzNSwgNTYzNSwgNTYzNSwgNTcyNSwgNjA1NCwgNTYzNywgNTYzNSwgNTYzNSwgNTkwMCwgNTYzNSwgNTYzNSwgNTYzNSwgNTkwNCwgNTYzNSwgNjA4OCwgNjU4OCwgNTE1MywgNTYzNSwgNTYzOCwgNjgyNiwgNzI1MiwgNjA4OCwgNTE0OCwgNTE1MiwgNTYzNSwgNTY0MCwgNzA4NywgNjc3MiwgNjA4NCwgNjc3MiwgNjA4NCwgNTI3NSwgNTYzNSwgNjY5NCwgNTkwNCwgNjMzOCwgNTI3NywgNjY5MywgNTYzNSwgNTgyNSwgNTYzNSwgNjgyMSwgNjYwMCwgNTYzNSwgNTY0MCwgNzMzNCwgNTkwNywgNTYzNSwgNTYzNSwgNjgyMiwgNjIyNCwgNTYzNSwgNTY0NCwgNTY0OCwgNjEwMiwgNTYzNSwgNjgyMSwgNjIyMywgNTYzNSwgNTYzNSwgNTYzNSwgNjQ3OSwgNjc2MiwgNTgyNCwgNTYzNSwgNTMyMSwgNTYzNSwgNTY0NywgNzA1NCwgNzAzOCwgNTYzNSwgNzI1NSwgNTYzNywgNTYzNSwgNTY1NCwgNTYzNSwgNTYzNSwgNTIyMiwgNzI4NCwgNTYzNSwgNTYzNSwgNTI3NiwgNTYzNSwgNTI3NywgNjY5NSwgNjMzNywgNjI2MCwgNTYzNSwgNTYzNSwgNTYzNSwgNTI1NiwgNjIyMCwgNTE1NCwgNTYzNSwgNTYzNSwgNTYzNSwgNjM5OSwgNTYzOCwgNjY5MiwgNTYzNSwgNTYzNSwgNTkyMywgNjA3MiwgNTYzOCwgNzAyNCwgNjYxMCwgNTYzNSwgNTY3NCwgNjE0MSwgNTYzNSwgNTYzNSwgNjg1NCwgNTYzNSwgNTYzNSwgNjg3OCwgNTY5MywgNTY5OSwgNzI1NSwgNjIxNiwgNjc3MSwgNTYzNSwgNTY3NywgNTYzNSwgNTYzNSwgNTYzNSwgNTU4NywgNTkxMSwgNjYyNCwgNTYyOCwgNjYzMCwgNjYzOCwgNjY0MSwgNjY0NSwgNjY0OCwgNjY1NiwgNjY1NiwgNjY1NiwgNjY1NiwgNjY1MSwgNjY1MiwgNjY1MiwgNjY1MiwgNjY2MCwgNjY2MCwgNjY2MCwgNjY2MCwgNjY2MiwgNjY2NiwgNTYzNSwgNTYzNSwgNTYzNSwgNjU2NiwgNjA0OCwgNTYzNSwgNTYyMiwgNTYzNSwgNTY4NiwgNTgzOCwgNTYzNSwgNTY4NiwgNjA1MywgNTYzNSwgNTYzNSwgNTYzNSwgNTk4NSwgNTYzNSwgNTU4OSwgNjY5NCwgNTkzOSwgNjYxNywgNTkxMiwgNjY4NiwgNTYzNSwgNTYzNSwgNTk0NCwgNTQxMSwgNjA1MiwgNjY5MSwgNTYzNSwgNTYzNSwgNjc1NiwgNjcwMSwgNTYzNSwgNTYzNSwgNTYzNSwgNjU2NywgNjEyNSwgNjc3MiwgNTYzNSwgNTYzNSwgNTk4NywgNTYzNSwgNTYzNSwgNjcyMywgNjcyOSwgNzI3OCwgNjY5NSwgNjczNCwgNTYzNSwgNTYzNSwgNTk5MSwgNTYwNSwgNjc0OSwgNTYzNSwgNTYzNSwgNTYzNSwgNjYxNSwgNTYzNSwgNTYzNSwgNTYzNSwgNTY0NSwgNTY0OSwgNTYzNSwgNjQ4MCwgNjc2MywgNjc1MCwgNTYzNSwgNjc2NCwgNTYwNywgNTYzNSwgNTYzNSwgNTYzNSwgNTgzNSwgNTYzNSwgNjcxNywgNTYzNSwgNTYzNSwgNjAyNiwgNjAzMSwgNTYwOCwgNTYzNSwgNjczMCwgNjE0MywgNjQ4MywgNjQ4NywgNjU2OCwgNTYzNSwgNTYzNSwgNjQ4NiwgNTczNCwgNTYzNSwgNTYzNSwgNjEzMywgNjg4MSwgNTYzNSwgNTYzNSwgNjEzMywgNzA5NSwgNTYzNSwgNTYzNSwgNTYzNSwgNjgxNiwgNjIwNCwgNjIwMywgNTYzNSwgNTYzNSwgNjEzNCwgNjc3MiwgNTkwOSwgNTYzNSwgNTYzNSwgNTYzNSwgNjYyMCwgNTYzNSwgNTU5NywgNjg3OSwgNjc5NSwgNTYzNSwgNTYzNSwgNTYzNSwgNjY4NSwgNjQ4MCwgNjQ4NCwgNjQ4OCwgNTYzNSwgNTYzNSwgNjYxNiwgNjYxNSwgNTYzNSwgNTYzNSwgNjIwNCwgNjIwMiwgNTI3NCwgNjEyNiwgNTYzNSwgNTYzNSwgNjIyMCwgNjIyNCwgNzM0NywgNjc3NywgNTYzNSwgNTYzNSwgNjIzMCwgNTYzNSwgNTYzNSwgNjIzMCwgNjQ4NSwgNTczMywgNTYzNSwgNTYzNSwgNjA1NCwgNTIwNCwgNTYzNSwgNzI2OSwgNjc3MiwgNTYzNSwgNTY4NywgNTk1MiwgNTYzNSwgNTcxMywgNTYzNSwgNTYzNSwgNTI3NiwgNjYxNSwgNTYzNSwgNjI3NywgNTYzNSwgNTYzNSwgNjYxOSwgNjgwOSwgNTczNCwgNTYzNSwgNTYzNSwgNjI0NiwgNjI0NywgNjI0NywgNjI0NywgNjI0NywgNTI3MCwgNTUwMiwgNzExNCwgNTYzNSwgNzI1NCwgNTYzNSwgNTY3NCwgNTgwNSwgNTc5OCwgNjI3NiwgNTc0OCwgNTYzNSwgNTYzNSwgNjI1NSwgNjI0NywgNjI0NywgNjI0NywgNTI2OSwgNTUwMiwgNTUwMiwgNTgzNSwgNjA1MywgNTYzNSwgNTYzNSwgNjMxOCwgNjU2OCwgNTYzNSwgNzM0NywgNzExNCwgNTYzNSwgNTYzNSwgNjgxOSwgNTMyMSwgNTYzNSwgNjg0NSwgNTYzNSwgNTYzNSwgNTYzNSwgNjcxNiwgNTYzNSwgNjk3NCwgNTYzNSwgNTYzNSwgNjMzMywgNTYzNSwgNjI1NiwgNTMxNywgNjI4NSwgNTYzNSwgNTYzNSwgNjk2NiwgNTYzNSwgNTYzNSwgNjk2NSwgNTYzNSwgNTYzNSwgNjI1NywgNTYzNSwgNjk2MSwgNjA1MywgNTYzNSwgNTYzNSwgNjk2NywgNTYzNSwgNjI1NSwgNTU4OSwgNjYxNywgNTYzNSwgNTc1MywgNTYzNSwgNTYzNSwgNTMyMywgNTYzNSwgNjExMywgNTYzNCwgNTkwNCwgNTYzNSwgNjI1NiwgNjk2MSwgNjA1MywgNjI1NSwgNjk2NSwgNjk2NSwgNjk2NSwgNTYzNSwgNjk2NywgNjk2NSwgNTYzNSwgNjk2NSwgNTYzNSwgNjI1OCwgNjk2NywgNjk2NSwgNzI4NiwgNjI2OSwgNTc0MSwgNTc0MSwgNTc0MSwgNjA1MywgNjg0OSwgNTYzNSwgNTYzNSwgNTYzNSwgNjc1NCwgNTYzNSwgNzM0MiwgNjMzNCwgNTYzNSwgNTc4MCwgNjU2OCwgNTYzNSwgNTQ5MiwgNjU0MiwgNjQ5MiwgNTYzNSwgNTYzNSwgNTYzNSwgNjMwNywgNjMxMSwgNjMyNCwgNjkzNiwgNjA4MywgNjg3MywgNTMxOSwgNjg4NiwgNjg5MiwgNjg5MCwgNjg5NiwgNjkwMCwgNjkwMCwgNjkwMiwgNjkwOCwgNjkwNiwgNjkwNiwgNjkwOCwgNjkxNiwgNjkxNSwgNjkxMiwgNjkyMCwgNjkyMSwgNjkyMSwgNjkyMSwgNjkyMSwgNjkyNSwgNjkyOCwgNTIwOCwgNTYzNSwgNTYzNSwgNjg1NSwgNjUyNiwgNjM4MCwgNTYzNSwgNTYzNSwgNjM0MCwgNTk5MywgNjU2NSwgNTYzNSwgNTYzNSwgNjYxNywgNTYzNSwgNTYzNSwgNTYzNSwgNjcwNiwgNTYzNSwgNjIzOSwgNTYzNSwgNTYzNSwgNjM2NCwgNzE1NCwgNTYzNSwgNjI0MiwgNTYzNSwgNTYzNSwgNTYzNywgNTk2NSwgNTYzNSwgNjk1MywgNTYzNSwgNTYzNSwgNjM3NiwgNTYzNSwgNTYzNSwgNjk1OCwgNTYzNSwgNTYzNSwgNjQ0MywgNTU4OSwgNzI1OCwgNTYzNSwgNTYzNSwgNTYzNSwgNjc2MCwgNTYzNSwgNjk3MSwgNTYzNSwgNjk3OSwgNjk4NywgNjk5MywgNjMyOSwgNTYzNSwgNTgzMiwgNjI2MCwgNjY4MCwgNjg3OCwgNTc5MSwgNjU0MywgNTYzNSwgNTgzNiwgNTYzNSwgNTYzNSwgNjI4NCwgNTYzNSwgNTYzNSwgNjU2NywgNTYzNSwgNjYxNiwgNTYzNSwgNTYzNSwgNjQ2OSwgNjQ4MiwgNjk5OSwgNTYzNSwgNTYzOSwgNTYzNSwgNTYzNSwgNTYzNSwgNjQ2MSwgNTcyNSwgNTYzNSwgNTYzNSwgNTYzNSwgNjc2OCwgNzAxMiwgNzA0MCwgNTYzNSwgNTYzNSwgNjU0NywgNjUwMSwgNzA0MSwgNTYzNSwgNTYzNSwgNTYzNSwgNjc2OSwgNTYzNSwgNzAwOCwgNzAxNywgNzA0MiwgNTYzNSwgNTg0OCwgNTc0OCwgNjI1NSwgNTQ4MywgNTYzNSwgNTYzNSwgNjI0NSwgNjI0NywgNTYzNSwgNzAyMSwgNTkzMywgNjA1MywgNTkwNCwgNjkzNSwgNjg3OSwgNTc5MiwgNTY0NCwgNTY0OCwgNzA1NSwgNzA0NiwgNTY0NSwgNzA1MiwgNzA1NiwgNzA0NywgNTY0NiwgNzA1MywgNzA1NywgNzA0OCwgNTcyNCwgNTYzNSwgNTYzNSwgNTYzNSwgNjc4MywgNjQ4NiwgNTczNCwgNTgyMCwgNTYzNSwgNTkwNCwgNjkzNSwgNjg3OSwgNTc0OCwgNjg3OSwgNTc5MywgNTYzNSwgNjU2NiwgNTYzNSwgNTc1NywgNTYzNSwgNTYzNSwgNTcyNCwgNTc1NiwgNTYzNSwgNTI3NywgNTYzNSwgNTYzNSwgNTYzNSwgNzE3NiwgNzA5NCwgNzA2MSwgNzA0OCwgNTYzNSwgNTYzNSwgNjU0OCwgNjUwMiwgNTY0OSwgNjEwMywgNzA2NywgNzA0OCwgNTYzNSwgNzA2MSwgNjU2NCwgNTYzNSwgNTYzNSwgNjU2OCwgNTYzNSwgNTY0NiwgNTY1MCwgNzA2NiwgNzEyNCwgNTYzNSwgNzA2NSwgNzEyMywgNTYzNSwgNTYzNSwgNjU4NCwgNTYzNSwgNTYzNSwgNjk4NywgNzE1NCwgNTYzNSwgNTg4MSwgNTYzNSwgNTYzNSwgNjM2NSwgNTYzNSwgNjg3OCwgNTMxOCwgNjYxNSwgNTYzNSwgNTg5OSwgNTk2MiwgNTYzNSwgNTYwMiwgNTYzNSwgNTYzNSwgNTE4OCwgNTYzNSwgNzA3NywgNTYzNSwgNTYzNSwgNTYzNSwgNjc5NCwgNTY0NywgNzA3NiwgNzA2OSwgNTYzNSwgNTkwMCwgNjA1MywgNTcyNiwgNTY0NiwgNzA3NSwgNzA2OCwgNTYzNSwgNTYzNSwgNjg3OSwgNTYzNSwgNTYzNSwgNTYzNSwgNjc5OSwgNjgwOSwgNTYzNSwgNzE3NiwgNzA4MSwgNTYzNSwgNTkwMSwgNzExNCwgNjQzNCwgNTYzNSwgNTYzNSwgNzE3NiwgNzA4OSwgNTYzNSwgNTkwMiwgNTUxMSwgNjQzNSwgNTYzNSwgNTYzNSwgNTc1NywgNTI3NCwgNTYzNSwgNjA4OCwgNzA4OCwgNTYzNSwgNTkwMiwgNTYzNSwgNTYzNSwgNTYzNSwgNjgwMCwgNTYzNSwgNjA4OCwgNzE1NCwgNTYzNSwgNTkwMywgNTYzNSwgNTkwNiwgNjYxNiwgNjYxNCwgNTgyMCwgNTkwNCwgNjg4MCwgNTYzNSwgNTkwOCwgNTYzNSwgNTYzNSwgNTkyNCwgNzAyOSwgNjAzMywgNTY0MCwgNzE3OCwgNTYzNSwgNTYzNSwgNjYxNCwgNTYzNSwgNTYzNSwgNjA4OCwgNzA5MywgNTYzNSwgNTkwOCwgNjYwNSwgNzMyNywgNzE3NywgNzA5NSwgNTYzNSwgNTkwMSwgNTkwMiwgNTYzNSwgNTY0MCwgNjIxOCwgNTgyMSwgNjg4MCwgNTYzNSwgNTYzNSwgNjYxNSwgNjYxNiwgNTYzNSwgNTYzNSwgNjI1OSwgNTYzNSwgNTYzNSwgNjI1OSwgNTYzNSwgNTkwMywgNTYzNSwgNTYzNSwgNTYzNSwgNTc0NSwgNTY0MCwgNzE3OCwgNjc3MiwgNTIzOCwgNTYzNSwgNzEwMCwgNjg4MCwgNTYzNSwgNTkxMywgNjY4NywgNTYzNSwgNjcwMCwgNTYzNSwgNTYzNSwgNjEzNSwgNTYzNSwgNTYzNSwgNjY4MSwgNTYzNSwgNTYzNSwgNjgyMCwgNzA5NCwgNTYzNSwgNTkyOCwgNTYzNSwgNTYzNSwgNTYwOCwgNjg3OCwgNTYzNSwgNzEwMCwgNjg4MSwgNTYzNSwgNzExNSwgNTYzNSwgNTYzNSwgNzI1NCwgNzEwNiwgNTYzNSwgNTYzNSwgNTYzNSwgNjgyMSwgNjA3MywgNjgyMCwgNzI3NSwgNTYzNSwgNTYzNSwgNTYzNSwgNjgyMCwgNjMwOSwgNjEzMywgNzA5NSwgNjg4MCwgNTYzNSwgNTk0MywgNTQxMCwgNTk0OSwgNTYzNSwgNTYzNSwgNTYzNSwgNzI1MiwgNTYzNSwgNTYzNSwgNzEyMCwgNTYzNSwgNTYzNSwgNzI3MywgNzEyMCwgNjg3OCwgNTYzNSwgNTYzNSwgNjY5MywgNTYzNSwgNTYzNSwgNTYzNSwgNzI3NCwgNTYzNSwgNTYzNSwgNjY5NSwgNTYzNSwgNTYzNSwgNTgxOSwgNTgwOSwgNTYzNSwgNzEzOCwgNTYzNSwgNjk2MywgNTkwNSwgNjIwOSwgNTYzNSwgNjk2MSwgNTYzNSwgNTk3OSwgNjI1MywgNTYzNSwgNTYzNSwgNzAwMiwgNjc0NCwgNTc5OCwgNTI0MCwgNTYzNSwgNjAyMSwgNTQ5OSwgNzEwOSwgNTY3MywgNTYzNSwgNzE0MiwgNTYzNSwgNjk2MiwgNjAyMSwgNjk2NCwgNjYyNSwgNjAyMiwgNzE3NCwgNzI3MSwgNzE0OSwgNzE2MiwgNzE2NiwgNzE3MCwgNzE4MywgNzE4NywgNzE5MSwgNzE5NCwgNzIwMiwgNzE5NywgNzE5OCwgNzIwNiwgNzIwOCwgNzIxMiwgNzIxOCwgNzIxNywgNzIxMywgNzIyMiwgNzIzMiwgNzIzMiwgNzIyNSwgNzIzMSwgNzIyNywgNzIzNiwgNzI0MCwgNTYzNSwgNTk4NSwgNTgzNywgNTYzNSwgNTcyMywgNTYzNSwgNTYzNSwgNjYwMiwgNjYwNiwgNzEyOCwgNzEzMiwgNTkwNCwgNTYzNSwgNTkxMCwgNTQ4MSwgNzEwMCwgNzI0MSwgNTYzNSwgNTYzNSwgNjY5NSwgNTgyNCwgNjM2MCwgNTYzNSwgNTYzNSwgNTYzNSwgNjg1MywgNjI1OSwgNjA3OSwgNTYzNSwgNjUyOSwgNzI0NSwgNzI0NywgNzI1MSwgNTYzNSwgNTk4NiwgNTYzNSwgNTYzNSwgNTc2MywgNjc0MywgNTcwMiwgNTc3NiwgNTYzNSwgNzI2MywgNTYzNSwgNTYzNSwgNjcyNSwgNTQ5MiwgNzI4MywgNzI1NSwgNTYzNSwgNTYzNSwgNjczNywgNTc2OSwgNzI5MSwgNTYzNSwgNzI5MiwgNTYzNSwgNTk5NywgNjAwMywgNjAwOSwgNjAxNSwgNTYzNSwgNzI5NiwgNzEzMCwgNTYzNSwgNTk5OCwgNjAwNCwgNjAxMCwgNTkwNywgNTkwMywgNTYzNSwgNTYzNSwgNjczNywgNjc0MSwgNTYzNSwgNjA4NiwgNTY0MSwgNTYzNSwgNTYzNSwgNTYzNSwgNzEwMCwgNTYzNSwgNTYzNSwgNjczOCwgNjc0MiwgNjg3OSwgNTYzNSwgNzExNCwgNTYzNSwgNzI1MiwgNTYzNSwgNTYzNSwgNjg1MywgNjg1NSwgNTYzNSwgNjAyMCwgNTYzNSwgNTYzNSwgNTYzNSwgNzI1NCwgNTYzNSwgNjMzNywgNTYzNSwgNTYzNSwgNjc3MCwgNTYzNSwgNjc3MiwgNTYzNSwgNjA4NiwgNjA4NCwgNTYzNSwgNTYzNSwgNjI1OSwgNTYzNSwgNzMwMSwgNjM4NiwgNTYzNSwgNTYzNSwgNTYzNSwgNjg3OCwgNTYzNSwgNTUxMiwgNzMwOSwgNjYzMywgNTYzNSwgNjA0NywgNTYzNSwgNTYzNSwgNTYzNSwgNzI1NiwgNzMxMCwgNjYzNCwgNTYzNSwgNTYzNSwgNTYzNSwgNjg4MiwgNTYzNSwgNzMwNywgNzMxMSwgNjMzOCwgNjg1MywgNTMyMCwgNTYzNSwgNTY0MCwgNzMzNCwgNTcyMiwgNTYzNSwgNTYzNSwgNjgyMSwgNjEyNiwgNTYzNSwgNTYzNSwgNjAyMSwgNjc3MiwgNzEyOCwgNzEzMiwgNTI1OCwgNTYzNSwgNTYzNSwgNTYzNSwgNjk2NiwgNTY0MiwgNTYzNSwgNTYzNSwgNzEwMSwgNTYzNSwgNjg1MCwgNTYzNSwgNjMzNiwgNTYzNSwgNjI2MCwgNTYzNSwgNjI2MSwgNzEwMiwgNTk4NSwgNjMzNCwgNTYzNSwgNTYzNSwgNTY0NCwgNzA3MywgNzMxNSwgNzMxOSwgNjMzOCwgNTYzNSwgNjA4MCwgNTkwNiwgNTkwMywgNzMxNiwgNjc4OCwgNTYzNSwgNTYzNSwgNjc3MiwgNTYzNSwgNjA4NCwgNzA5NSwgNTYzNSwgNTYzNSwgNTY4NiwgNTYzNSwgNzMxNywgNjc4OSwgNTYzNSwgNTYzNSwgNjgxMywgNTYzNSwgNzMxOCwgNjc5MCwgNjc3MCwgNjc2OSwgNTYzNSwgNTYzNSwgNjYxOSwgNTYzNSwgNjc2OSwgNjgyMCwgNTYzNSwgNTYzNSwgNjg4MSwgNzExNSwgNTYzNSwgNjg1MiwgNjg1NSwgNTYzNSwgNTYzNSwgNTYzNSwgNjg0NSwgNTYzNSwgNjcxOCwgNjY5NCwgNTYzNSwgNTYzNSwgNTYzNSwgNjk0MiwgNjc4NiwgNjc5MCwgNTYzNSwgNTYzNSwgNTYzNSwgNjk2NywgNTYzNSwgNTYzNSwgNjc4NiwgNjc5MCwgNjc3MCwgNjc2OSwgNzI1NCwgNTYzNSwgNzEwMSwgNTYzNSwgNzI5NywgNzEzMiwgNTI1OCwgNzExMywgNTYzNSwgNTYzNSwgNjgxOSwgNTYzNSwgNTYzNSwgNTYzNSwgNTE2NiwgNjM3OSwgNTA0OCwgNTYzNSwgNTYzNSwgNjgyMSwgNjA3NCwgNjA3OCwgNTYzNSwgNTYzNSwgNTYzNSwgNTk3OCwgNzM1MCwgNTUxOSwgNzMyMCwgNTYzNSwgNjA4MSwgNTY3OCwgNjYyNiwgNzMxOSwgNTYzNSwgNTYzNSwgNTYzNSwgNzAwNiwgNzM0OCwgNTUxNywgNjc4NiwgNjYxNywgNTYzNSwgNjc3MiwgNjc3MSwgNTYzNSwgNjA4NCwgNjMwMywgNjQ4OCwgNTYzNSwgNzMyNCwgNTkwNiwgNTkwMywgNTYzNSwgNjA4NSwgNTY0MSwgNTYzNSwgNjA4NCwgNjM1MiwgNTYzNSwgNTYzNSwgNTYzNSwgNjIzMSwgNTA0NywgNTYzNSwgNTYzNSwgNTYzNSwgNzAzMywgNTYzNSwgNzM0OCwgNzMzNSwgNTkwMywgNTYzNSwgNjg3OSwgNTYzNSwgNjg1MSwgNTY3OCwgNTkwOSwgNjg1NSwgNjg2NCwgNTYzNSwgNzM0MCwgNTYzNSwgNTYzNSwgNjgyOSwgNTYzNSwgNjA4NywgNTYzNSwgNjg4MSwgNTYzNSwgNjg1MiwgNjgxOSwgNjg1MCwgNTYzNSwgNTYzNSwgNjI2MSwgNzMzMiwgNzMzNiwgNTYzNSwgNTYzNSwgNTYzNSwgNzE0NSwgNTYzNSwgNjIzMiwgNTYzNSwgNTYzNSwgNjgzMywgNTYzNSwgNTI3NCwgNTYzNSwgNTYzNSwgNTYzNSwgNzE3NywgMCwgMCwgMTA3NTgzODk3NiwgMjA5NzE1MiwgMTYzODQsIDAsIDAsIDAsIDYyLCA2NCwgNDE5NDU2MCwgNDE5NjM1MiwgMjcwNTMyNjA4LCAyMDk3MTUyLCAyMDk3MTUyLCAyNjg0MzU0NTYsIDQxOTQ0MzIsIDU0MTA2NTIxNiwgNTQxMDY1MjE2LCA1NDEwNjUyMTYsIDU0MTA2NTIxNiwgNDE5NDMwNCwgNDE5NDMwNCwgNDE5NjM1MiwgLTE2MDY0MTg0MzIsIC0xNjA2NDE4NDMyLCA1NDEwNjUyMTYsIDU0MTA2NTIxNiwgNDE5NDMwNCwgNDE5ODE0NCwgNTQxMDY1MjE2LCA1NDEwNjUyMTYsIC0yMTQzMjg5MzQ0LCAtMjE0MzI4OTM0NCwgODQyNTQ4OCwgNDE5NDMwNCwgNDE5NDMwNCwgNDE5NDMwNCwgNTQxMDY1MjE2LCAzNzc0ODczNiwgNDE5NDMwNCwgNTQxMDY1MjE2LCA0MTk0MzA0LCA0MTk0MzA0LCA0MTk0NDMyLCAzNzc0ODczNiwgLTE2MDY0MTg0MzIsIDc0MjM5MTgwOCwgMjM5MDc1MzI4LCA3NzU5NDYyNDAsIDE3MTk2NjQ2NCwgMTcxOTY2NDY0LCAxNzE5NjY0NjQsIDE3MTk2NjQ2NCwgMjM5MDc1MzI4LCAxNzE5NjY0NjQsIDc3NTk0NjI0MCwgMjM5MDc1MzI4LCAyMzkwNzUzMjgsIDc3NTk0NjI0MCwgNzc1OTQ2MjQwLCA3NzU5NDYyNDAsIDQ3MTg1OTIsIDY0LCA0NzE4NTkyLCAyMDk3MjE2LCA0NzIwNjQwLCA0MTk0NDAwLCA0MTk0MzY4LCAtMjE0Mjc2MzAwOCwgNTQxNTg5NTA0LCA0MTk0MzY4LCA1NDE1ODk1MDQsIDU0MTU4OTUwNCwgNTQxMDY1MjgwLCA0MTk0MzY4LCA0MTk0MzY4LCA1NDEwNjUzMTIsIDU0MTA2NTI4MCwgLTIxNDMyODkyODAsIDQxOTQzNjgsIC0yMTQzMjg1NDQwLCAtMTYwNTg5MDI0MCwgLTIxNDI3NjExNTIsIC0yMTA5NzMxMDA4LCAtMTYwNjQxNDUyOCwgLTIxNDMyODU0NDAsIC0yMTQzMjg1NDQwLCAtMjE0MzI4NTQ0MCwgLTE2MDU4OTAyNDAsIC0xNjA2NDE0NTI4LCAtMTYwNjQxNDUyOCwgLTIxNDMyODU0NDAsIC0yMTQzMjg1NDA4LCAtMjE0MzI4NTQ0MCwgLTIxNDMyODU0NDAsIC0yMTQyNzYxMTUyLCA3NzY0NzA1MjgsIC0xOTA4NDA0NDE2LCA3NzU5NDYzMDQsIDc3NTk0NjMwNCwgLTE5MDg0MDQ0MTYsIDIsIDQsIDgsIDE2LCA1MTIsIDEwMjQsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgNDAyNjUzMTg0LCAwLCAwLCAwLCAtMTk3OTcxMTQ4OCwgMCwgODE5MiwgODM5MjcwNCwgMCwgMHg4MDAwMDAwMCwgMTY3NzcyMTYsIDAsIDAsIDE1MzYsIDMyNzY4LCAwLCAwLCAxMjgsIDE5NjYwOCwgMCwgMTYzODQsIDE1MzYsIDE3OTIsIDgxOTIsIDE2Mzg0LCAxMzEwNzIsIDEzMTA3MiwgMCwgMCwgNjQsIDE1MzYsIDMyNzY4LCA5NiwgOTYsIDAsIDAsIDB4ODAwMDAwMDAsIDE2LCAwLCAwLCAxNTM2LCA2NCwgNTI0MzUyLCA1MjQzNTIsIDUyNDM1MiwgNTI0MzUyLCAwLCA1MjQyODgsIDY0LCA2NCwgMjYyMTQ0LCAxMDQ4NTc2LCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDY3MTA4ODY0LCAxMzQyMTc3MjgsIDUzNjg3MDkxMiwgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAyMDQ4LCAxNTM2LCAxMDI0LCAwLCAwLCAwLCAxNSwgMjA4LCAxNTM2MCwgOTYsIDk2LCAwLCA2NCwgNjQsIDE2MzkyLCA2NCwgMTA0ODU3NiwgMTI4LCAxMjgsIDAsIDI1NiwgODE5MiwgMCwgODE5MiwgMCwgMzM1NTQ0MzIsIDAsIDEwMjQsIDEwMjQsIDAsIDAsIDB4ODAwMDAwMDAsIDY1NTM2LCAzMiwgOTYsIDk2LCA5NiwgOTYsIDY0LCAwLCA4Mzg4NjA4LCA0MDk2LCAwLCAwLCA4MTkyLCAyMDk3MTUyLCAweDgwMDAwMDAwLCA5NiwgNTI0MzUyLCA1MjQzNTIsIDUyNDM1MiwgNTI0Mjg4LCA1MjQyODgsIDUyNDI4OCwgNjQsIDY0LCA2NCwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgMTEsIDY0LCA2NCwgMTI4LCAyMDQ4LCAwLCA0MDk2LCAwLCAwLCAxMzEwNzIsIDEyOCwgNjQsIDY0LCA2NCwgOTYsIDk2LCA5NiwgNTI0MzUyLCA1MjQzNTIsIDUyNDI4OCwgNjQsIDUyNDI4OCwgNjQsIDY0LCA5NiwgNTI0MzUyLCAwLCAwLCAwLCAxOCwgMzM1NTQ0MzIsIDY0LCA5NiwgNTI0MzUyLCA1MjQyODgsIDAsIDY0LCAwLCAyMDk3MTUyLCAwLCAwLCA0LCAxNiwgMCwgMCwgMTYsIDgzODg2MDgsIDAsIDAsIDQwOTYsIDUzNjg3MDkxMiwgMTA3Mzc0MTgyNCwgMCwgNCwgMzIsIDMyLCA0LCAxMDczODcyODk2LCAzMiwgNDAsIDk2LCAxNjAsIDEwNTYsIDI2MjE3NiwgMTA0ODYwOCwgMjA5NzE4NCwgMzIsIDMyLCAzMiwgNTI0MzIwLCAzMiwgMTA3Mzg3Mjg5NiwgNDAsIDI2MjE3NiwgMTEyMCwgOTYsIDQxOTUzNjAsIDYyOTE0ODgsIDIwOTcxODQsIDIwOTcxODQsIDQxOTQzMzYsIDQxOTQzMzYsIDUzNjg3MDk0NCwgMzIsIDMyLCA0MCwgMjYyMTc2LCAzMiwgMzIsIDQwLCAyNjIxODQsIDExMjAsIDk2LCA2MjkyNTEyLCA0MTk1MzYwLCA1NiwgMjYyMTg0LCA0MCwgMjYyMTg0LCA0MCwgMCwgNCwgMjYyMTg0LCA0MCwgNDAsIDQwLCA0MCwgNDE5NTEwNCwgNjI5MjUxMiwgNDE5NjEyOCwgMzIsIDI2MjE4NCwgMzQsIDM0LCA0MCwgNDgsIDQyLCAzMiwgMzIsIDMyNzE1NTcxMiwgMzQsIDEwNTYsIDEwNTYsIDMyLCA5NiwgMzIsIDMyLCA0MSwgMjYyMTg0LCAzMiwgNjQsIDUxMiwgMjA0OCwgMTYzODQsIDY3MTA4ODY0LCA0MiwgMTA1NiwgNDE5NDMzNiwgMzIsIDMyLCAzMiwgMzIsIDU2LCAyMDk4MjA4LCA0MiwgNDQ1NzU2OCwgLTMyNjc4NDM0NCwgLTMyMjg1MTE2MCwgLTMyMjg1MTE2MCwgLTMyMjY5ODE0NCwgLTMyMjY5ODE0NCwgLTMyMjY5ODE0NCwgLTMyMjY5ODE0NCwgLTMyMjY5NTQ1NiwgLTMyMjY5NTQ1NiwgLTMyMjY5NTQ1NiwgLTMyMjY5NTQ1NiwgLTMyMjU5NzE1MiwgLTMyMDU5ODE3NiwgLTMyMjU5NzE1MiwgLTMyMjU5NzE0NCwgLTMyMTU0ODU3NiwgLTMyMDU5ODE2OCwgLTMyMTU0ODU2OCwgLTMyMjU5NzE0NCwgMzIsIDAsIDk2LCAzMiwgNDIsIDIyNCwgNDAsIDI2MjE3NiwgNDIsIDEwNiwgMjkzNjAxMzIzLCAyOTM2MDEzMjMsIDI5Mzg2MzQ2NywgMjkzNjk5NjI3LCAyOTM2MTc3MDcsIDI5MzcxNjAxMSwgMjk3ODk2NTA3LCAyOTM5NjQzNDcsIDI5MzcwMjI2NywgMjk3ODk2NTA3LCAyOTM3MDIyMDMsIDI5MzcwMjIwMywgMjkzNzAyMjAzLCAyOTM3MDIyMDMsIDI5Mzk2NDM0NywgMjk3ODk2NTA3LCAyOTc4OTY1MDcsIC0zMjI1OTcxNDQsIC0zMjI1ODg5NTIsIC0zMjE1NDg1NjgsIC0zMjI1ODg5NTIsIC0zNzc0NDk4MSwgLTMyMjU5NzE0NCwgLTMyMTU0ODU2OCwgLTM3NDgyNzczLCAwLCAxMzEwNzIsIDEwNDg1NzYsIDIwOTcxNTIsIDAsIDAsIC0xNzQ0ODMwNDY0LCAwLCAtMTc0NDgzMDQ2NCwgMCwgMzE4NzY3MTA0LCAwLCAwLCAwLCA0OCwgMCwgMSwgMjg1MjEyNjcyLCAwLCAwLCAyMDQ4LCA2NCwgNjQsIDY0LCA2NCwgMzIsIDk2LCAwLCAzMiwgNjQsIDY1NTM2LCAwLCAwLCAxLCAyLCAxMiwgMTYsIDY0LCAxMjgsIDEwMjQsIDIwNDgsIDQwOTYsIDAsIDIsIDY1NTM2LCAyNjI2NTYsIDUyNDI4ODAsIC0xODQyOTM3NjY0LCAyMDEzMzA3MjEsIDIwMTMzMDcyMSwgLTIxMTEzNjkwMjMsIC0yMTExMzY5MDIzLCAtMjExMTM2OTAyMywgLTIxMTEzNjkwMjMsIC0yMTExMzY5MDIzLCAtMjExMTM2OTAyMywgLTIxMTEzNjA1NzUsIC0yMTExMzY5MDIzLCAtMjExMTM2OTAyMywgLTE5NzcxNTEyOTUsIC0xOTc3MTUxMjkzLCAtMTkxMDA0MjQzMSwgLTE4OTMyNjUxODMsIC0yMTExMzY4NTA5LCAtMTg5MzI2NTE4MywgLTE4OTMyNjUxODMsIC0xODkzMjY1MTgzLCAtMTg5MzI2NTE4MywgLTIxMTEzNjg1MDksIC0xODkzMjY1MTgzLCAtMTg5MzI2NTE4MywgLTU1MzY4OTQ3MiwgLTU1MzY1NjcwNCwgLTU1MzY4OTQ3MiwgLTU1MzY4OTQ3MiwgLTU1MzY1NjcwNCwgLTU1MzY1NjcwNCwgLTU1MzY1NjcwNCwgLTU1MzY1NjcwNCwgLTU1MzY1NjcwNCwgLTU1MzY1NjcwNCwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MCwgLTU1MzY1NjYwOCwgLTU1MzY1NjY3MiwgLTU1MzY1NjY2NCwgLTU1MzY1NjY2NCwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MCwgLTU1MzY1NjY3MiwgLTU1MzY1NjY3MiwgLTUzNjkxMjE1OSwgLTU1MzY1NjY3MSwgLTUzNjg3OTM5MSwgLTUzNjg3OTM5MSwgLTUzNjg3OTM5MSwgMCwgMCwgMjA0OCwgNDE5NDMwNCwgMCwgMCwgMCwgMjYyNjU2LCAwLCAwLCAwLCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDQ1ODg4MCwgMjA5NzE1MiwgLTE4NDU0OTM3NjAsIDAsIDAsIDQwOTYsIDIwOTcxNTIsIDAsIDAsIDEsIDQwOTYsIDIwMTMyNjU5MiwgODA1MzA2MzY4LCAtMTA3Mzc0MTgyNCwgMCwgMCwgMCwgMjQ1NzYsIDQ3MTQyNCwgMCwgLTIxMTM5MjkyMTYsIDAsIDAsIDAsIDIyMCwgLTE5MTI2MDI2MjQsIDE4ODc0MzY4LCA0NjM0ODgsIDAsIDAsIDkyMTYsIDAsIDAsIDE2Mzg0LCA4MTkyLCA4MTkyLCAzMjc2OCwgMjA0OCwgMjA0OCwgMjA0OCwgMjA0OCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMiwgMCwgMCwgMCwgMywgNCwgMTYsIDIyNCwgMjU2LCA1MTIsIDMyNzY4LCAwLCAxMDQwMDAwLCAxNTcyODY0MCwgLTU3MDQyNTM0NCwgMCwgMCwgMCwgMjU0LCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDI2ODQzNTQ1NiwgNTM2ODcwOTEyLCAweDgwMDAwMDAwLCAwLCAwLCAtNTcwNDI1MzQ0LCAzMjUwNTg1NiwgMjA5NzE1MiwgMzAxOTg5ODg4LCAwLCAwLCAwLCA1MTIsIDAsIDAsIDAsIDI1NiwgMTIyODgsIDAsIDE2Nzc3MjE2MCwgMjM0ODgxMDI0LCAwLCAwLCAxNjM4NCwgMzI3NjgsIDUwMzMxNjQ4LCAwLCAxMjgsIDUxMiwgNzE2OCwgMTYzODQsIDMyNzY4LCAxOTY2MDgsIDE2Mzg0LCAxOTY2MDgsIDc4NjQzMiwgMTA0ODU3NiwgMjA5NzE1MiwgNDE5NDMwNCwgODM4ODYwOCwgMzM1NTQ0MzIsIDIwOTcxNTIsIDQxOTQzMDQsIDgzODg2MDgsIDUwMzMxNjQ4MCwgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgMCwgNDA5NiwgMjAxMzI2NTkyLCAwLCAwLCAwLCAxNjc3NzIxNjAsIDIzNDg4MTAyNCwgMTI4LCAxMDI0LCA0MDk2LCA4MTkyLCAwLCAwLCA4MTkyLCAyNjg0MzU0NTYsIDAsIDAsIDQxOTQzMDQsIDgzODg2MDgsIDIzNDg4MTAyNCwgMjY4NDM1NDU2LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAwLCAxMDQ4NTc2LCA0MTk0MzA0LCAzMzU1NDQzMiwgMjY4NDM1NDU2LCAyNjg0MzU0NTYsIDI2ODQzNTQ1NiwgMjY4NDM1NDU2LCAwLCAxMjgsIDEzMTA3MiwgMjA5NzE1MiwgMCwgMCwgMCwgNTIwLCAwLCAyMDEzMjY1OTIsIDAsIDAsIDAsIDEwNzM3NDE4MjQsIDAsIDAsIDAsIDEzNDIxNzcyOCwgMTI4LCA1MTIsIDMwNzIsIDE2Mzg0LCAzMjc2OCwgMzA3MiwgMTYzODQsIDEzMTA3MiwgNTI0Mjg4LCAxMDQ4NTc2LCA0MTk0MzA0LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDIwMTMyNjU5MiwgMjY4NDM1NDU2LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAxMDQ4NTc2LCA0MTk0MzA0LCAyNjg0MzU0NTYsIDUzNjg3MDkxMiwgMTMxMDcyLCAwLCAwLCAxMzEwNzIsIDAsIDEzMTA3MiwgMjA5NzE1MiwgMCwgMCwgMTYzODQsIDIwOTcxNTIsIDAsIDAsIDIwOTcxNTIsIDQxOTQzMDQsIDEzNDIxNzcyOCwgMHg4MDAwMDAwMCwgMCwgMCwgMCwgNTEyLCAzMDcyLCAxMzEwNzIsIDUyNDI4OCwgMTA0ODU3NiwgMTMxMDcyLCA1MjQyODgsIDQxOTQzMDQsIDB4ODAwMDAwMDAsIDAsIDAsIDAsIDE2Mzg0LCAxNjM4NCwgMTg0MzIsIDAsIDAsIDAsIDIwNDgsIDAsIDAsIDQwOTYsIDEwNDg1NzYsIDAsIDAsIDY3MTA4ODY0LCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAwLCAyOTY5NiwgMCwgMCwgMzI3NjgsIDUwMzMxNjQ4LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDAsIDEsIDEsIDE4OTUyLCAxMDI0LCAwLCA2NSwgMTAyNCwgMCwgNDA5NiwgMzI3NjgsIDAsIDEwMjQsIDE4OTUyLCA2NSwgMjY4NDM2NDgwLCAyMTAxMjQ4LCA1MjQyODgsIDEwMjQsIDE5MDE3LCAtMTc0NDU1MDkxMiwgODM4ODYyNCwgODM4ODYyNCwgODM4ODYyNCwgLTE3MzkzMDgwMzIsIC0xNzM5MzA4MDMyLCAtMTczOTMwODAzMiwgLTE3MzkzMDgwMzIsIC0xNzM2MTYyMjg4LCAtMTczNjE2MjI4OCwgLTE3MzYxNjIyODgsIC0xNzM2MTYyMjg4LCAtNzg2ODQ2NiwgLTc4Njg0NjYsIC03ODY4NDY2LCAtNzg2ODQ2NiwgLTc4Njg0NTAsIC03ODY4NDUwLCAtNzg2ODQ1MCwgMCwgMCwgMCwgMTYxMDYxMjczNiwgMTAyNCwgMCwgMjEwMTI0OCwgMCwgMCwgMjYyMTQ0LCA2NTUzNiwgMjYyMTQ0LCAyNjIxNDQsIDAsIDAsIDIwNDgsIDEzMTA3MiwgNTI0Mjg4LCA1ODUsIDAsIDAsIDAsIDgxOTIsIDAsIDAsIDAsIDQwOTYsIDAsIDAsIDAsIDMyLCAwLCAwLCAwLCA0NCwgNjQ1NzYsIDAsIDEwMjQsIDI3ODUyOCwgLTE3NDQ4MzA0NjQsIDU1MjE0MDgsIC0xNzQ0ODMwNDY0LCAwLCAwLCAyLCAxMiwgNjQsIDAsIDEwNDAsIDg2NjcxMzYsIC0xNzQ0ODMwNDY0LCAtNjcxMDg4NjQsIDAsIDAsIDAsIDk3MjgsIDAsIDIwMTQsIDAsIDAsIDAsIDEzMzEyLCAwLCAxLCA0LCA4LCAzMiwgNjQsIDE2Mzg0LCA2NzEwODg2NCwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDAsIDAsIDUyMCwgMTAyNCwgMCwgMCwgMiwgMTYsIDAsIDI3ODUyOCwgMCwgMCwgMiwgNjcxMDg4NjQsIDE2Mzg0LCAwLCA1MjQyODgwLCAweDgwMDAwMDAwLCAwLCAwLCAzMjc2ODAsIDAsIDAsIDMyODE5MiwgMCwgMCwgMCwgMTE4LCA1Nzc0MDgsIDIyMDIwMDk2LCAxMDQwLCAwLCAwLCAwLCAxNjM4NCwgMCwgNjcxMDg4NjQsIDE5OTgsIDUxODE0NCwgODM4ODYwOCwgNTAzMzE2NDgsIDIwMTMyNjU5MiwgODA1MzA2MzY4LCAwLCAyLCAyMDQsIDc2OCwgMTAyNCwgMTAyNDAsIDEwMjQsIDEwMjQwLCAxNjM4NCwgMzI3NjgsIDQ1ODc1MiwgODM4ODYwOCwgNDU4NzUyLCA4Mzg4NjA4LCA1MDMzMTY0OCwgNjcxMDg4NjQsIDEzNDIxNzcyOCwgODA1MzA2MzY4LCAxMzQyMTc3MjgsIDgwNTMwNjM2OCwgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgMCwgMjIwLCAwLCAwLCAwLCAzMjc2OCwgMzM1NTQ0MzYsIDIsIDEyLCAxOTIsIDc2OCwgMTAyNCwgMTAyNCwgMjA0OCwgODE5MiwgMTYzODQsIDMyNzY4LCA0NTg3NTIsIDMyNzY4LCA0NTg3NTIsIDUwMzMxNjQ4LCA2NzEwODg2NCwgMTM0MjE3NzI4LCAxMzQyMTc3MjgsIDgwNTMwNjM2OCwgMTA3Mzc0MTgyNCwgMCwgMCwgMjA4LCAwLCAwLCAwLCAzNDgxNiwgNjcxMDg4NjQsIDI2ODQzNTQ1NiwgMCwgMCwgMCwgNjU1MzYsIDQ1ODc1MiwgNTAzMzE2NDgsIDY3MTA4ODY0LCA4MDUzMDYzNjgsIDEwNzM3NDE4MjQsIDQ1ODc1MiwgNTAzMzE2NDgsIDY3MTA4ODY0LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDAsIDAsIDQsIDgsIDY0LCAxMjgsIDUxMiwgMjA0OCwgMTk2NjA4LCAyNjIxNDQsIDMzNTU0NDMyLCA1MzY4NzA5MTIsIDAsIDAsIDAsIDI2MjE0NCwgMCwgMCwgMCwgNjQsIDAsIDAsIDIsIDQsIDgsIDI2MjE0NCwgMCwgMTA0ODU3NiwgNDE5NDMwNCwgMCwgMCwgNCwgOCwgMTI4LCA1MTIsIDEwMjQsIDMyNzY4LCA2NTUzNiwgMTMxMDcyLCAyMDQ4LCAxOTY2MDgsIDI2MjE0NCwgNTAzMzE2NDgsIDUzNjg3MDkxMiwgMTA3Mzc0MTgyNCwgMSwgNCwgOCwgNTEyLCAyMDQ4LCAxMzEwNzIsIDMzNTU0NDMyLCA1MzY4NzA5MTIsIDAsIDAsIDQsIDgsIDUxMiwgMjA0OCwgODE5MiwgMzI3NjgsIDgzODg2MDgsIDAsIDUyNDI4OCwgMjYyMTQ0LCAwLCAwLCA0LCA2NCwgMTI4LCA4Mzg4NjA4LCAwLCA1MTIsIDIwNDgsIDEzMTA3MiwgNTM2ODcwOTEyLCAwLCAwLCA0MTk0MzA0LCA4MTkyLCAyMDk3MTUyLCAyNjg0MzU0NTYsIDB4ODAwMDAwMDAsIDE2LCAzMzU1NDQzMiwgLTIxNDc0MTgxMTIsIDUzNzM5NTIwMCwgNTM3Mzk1MjAwLCAwLCA0MTk2MzUyLCA1Mzc0Mjc5NjgsIDQxOTYzNTIsIDAsIDUzNzM5NTIwMCwgNDE5NjM1MiwgNDE5NjM1MiwgMjc2OTAxODg4LCA4NTQwMTYwLCAtMTYwNjQxODQzMiwgMzI3NjgsIDUzNzM5NTIwMCwgNDE5NjM1MiwgMTA4MjEzMDQzMiwgNTEzODAyNDIsIDUxMzgwMjQyLCA1MTM4MDI0MiwgMjIwMjIxNDcsIDIyMzQ5ODI3LCAyMjM0OTgyNywgMjIzNDk4MjcsIDIyMzY2MjE5LCAyMjM0OTg0MywgMjIzNDk4MjcsIDIyMzQ5ODI3LCAyMjM2NjIxOSwgMjIzNDk4MjcsIDU1NTc2NTk0LCA1NTU3NjU5NCwgNTU1NzY1OTQsIDU1NTc2NTk0LCAxMDYyNzg1MDE0LCAzMjQwMTIxMTQsIDU1NTc2NTk0LCA1NTU3NjU5NCwgNTU1NzY1OTQsIDEwNjI3ODUwMTQsIDEwNjI3ODUwMTQsIDEwNjI3ODUwMTQsIDEwNjI3ODUwMTQsIDAsIDAsIDAsIDMyOTcyOCwgNTU3MDU2LCAwLCAwLCAwLCAzOTMyMTYsIDAsIDAsIDE3ODI1NzkyLCAzMzU1NDQzMiwgMCwgMCwgMCwgNDYyOTc2LCAzLCAyMjAyMDA5NiwgMCwgMCwgNCwgMTM0MjE3NzI4LCAwLCAwLCA4LCAxNiwgNTEyLCA0MDI2NTMxODQsIDAsIDAsIDM0NjExMiwgMTksIDAsIDAsIDgsIDY0LCAwLCAwLCAwLCA4MiwgMzAxOTg5ODg4LCAwLCAwLCAzOTMyMzIsIDAsIDAsIDM5MzI0MCwgMCwgMCwgNTI0Mjg4LCA1MjQyODgsIDUyNDI4OCwgNTI0Mjg4LCAwLCA1Nzc0MDgsIDIyMDIwMDk2LCAxMDQwMTg3MzkyLCAwLCAwLCAwLCA1MjQyODgsIDAsIDAsIDAsIDE2LCAwLCAwLCAwLCA2LCAxNjM4NCwgMzI3NjgsIDI2ODQzNTQ1NiwgMCwgMjY4NDM1NDU2LCAwLCAxMDQ4NTc2LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDAsIDAsIDUyNDI4OCwgMTA0ODU3NiwgMjA5NzE1MiwgMCwgODAsIDI2ODQzNTQ1NiwgMCwgMCwgNTI0Mjg4LCA1MzY4NzA5MTIsIDAsIDExMiwgMTI4LCAyNTYsIDM1ODQsIDE2Mzg0LCAzMjc2OCwgMTM0MjE3NzI4LCA4MDUzMDYzNjgsIDAsIDAsIDAsIDEwMDcyMzIsIDI1NiwgMTUzNiwgMjA0OCwgMTYzODQsIDMyNzY4LCAyNjIxNDQsIDAsIDQsIDE2LCAzMiwgNjQsIDEyOCwgMjU2LCAxNTM2LCAwLCAxNiwgMzM1NTQ0MzIsIDAsIDAsIDEwNDg1NzYsIDQxOTQzMDQsIDB4ODAwMDAwMDAsIDE1MzYsIDE2Mzg0LCAzMjc2OCwgNTI0Mjg4LCA0MTk0MzA0LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDAsIDAsIDAsIDMyNzY4LCAwLCAwLCAwLCAxMDQ4NTc2LCAwLCAwLCAwLCAxOTk4LCA1MTgxNDQsIDEsIDAsIDAsIDY1NTM2LCAyNjIxNDQsIDAsIDAsIDI1NiwgMTUzNiwgMzI3NjgsIDUyNDI4OCwgMCwgMCwgNDE5NDMwNCwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDAsIDAsIDExMTQxMTIsIDEwNzM3NDE4MjQsIDE2LCA2NCwgMTUzNiwgMzI3NjgsIDUyNDI4OCwgNDE5NDMwNCwgNjcxNzQ0MDAsIDMzNTU0NDMyLCAxMDczNzQxODI0LCAwLCA2NzE3NDQwMCwgMCwgMCwgMTYzODQsIDEwNzM3NDE4MjQsIDAsIDAsIDIwOTcxNTIsIDAsIDE1NzI4NjQsIDAsIDEwNzM3NDE4MjQsIDE2Mzg0LCAwLCA0MTk0MzA0LCAwLCA4LCAwLCAxMzEwNzIsIDAsIDEzMTA3MiwgMCwgOCwgMTMxMDcyLCAxMzEwNzIsIDEzNDIxNzcyOCwgNDA5NiwgMCwgOCwgMCwgOCwgMTMxMDcyLCA0MTk0MzA0LCAtMjE0NjQzMDk3NiwgMTMxMDcyLCAxMzQyMTc3MzYsIDE2OTA4MzIwLCA1NDczODk1MjQsIDU0NzM4OTUyNCwgNTU1OTA5MjE2LCA1NTU5MDkyMTYsIDU1NTkwOTIxNiwgNTU1OTA5MjE2LCA1NjQyOTc4NDAsIDU2NDI5Nzg0NCwgNTY0Mjk3ODQ0LCA1NjQyOTc4NDQsIDU2NDI5Nzg0NCwgNTY0Mjk3ODQ0LCA1NjQyOTc4NDQsIDEwMDEwNTU3NDIsIDEwMDEwNTYyNTQsIDEwMDEwNTU3NDIsIDEwMDEwNTU3NDIsIDEwMDEwNTYyNTQsIDEwMDEwNTYyNTQsIDEwMDEwNTYyNTQsIDEwMDEwNTYyNTQsIDEwMDEwNTYyNTQsIDEwMDEwNTU3NDIsIDEsIDAsIDY3MTA4ODY0LCAxMDczNzQxODI0LCAwLCA4NCwgMjEyOTkyMCwgODM4ODYwOCwgNTM2ODcwOTEyLCAwLCA5NiwgMjI2MDk5MiwgMCwgMCwgMjA5NzE1MiwgNDE5NDMwNCwgODM4ODYwOCwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDEyODAsIDI4MDk4NTYsIDU4NzIwMjU2LCA5Mzk1MjQwOTYsIDAsIDAsIDAsIDEwNTI2NzIsIDAsIDI1NCwgMTc5MiwgMjgwOTg1NiwgNTg3MjAyNTYsIDkzOTUyNDA5NiwgMCwgOTM5NTI0MDk2LCAwLCAwLCAxMiwgMTYsIDMyNzY4LCAyMDk3MTUyLCA4Mzg4NjA4LCA1MzY4NzA5MTIsIDAsIDE2Mzg0MCwgMCwgMCwgMTIsIDMyLCA2NCwgMTAyNCwgMjA0OCwgNTczNDQsIDI2MjE0NCwgNTAzMzE2NDgsIDI2ODQzNTQ1NiwgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgMCwgNTIsIDAsIDAsIDIwLCA2NCwgNjIsIDY0LCAxMjgsIDEyODAsIDgxOTIsIDE2Mzg0LCAxMzEwNzIsIDUyNDI4OCwgNTg3MjAyNTYsIDI0NTc2LCAxNjM4NDAsIDUyNDI4OCwgMjA5NzE1MiwgNTg3MjAyNTYsIDQwMjY1MzE4NCwgNTg3MjAyNTYsIDQwMjY1MzE4NCwgNTM2ODcwOTEyLCAwLCAwLCA2NCwgMTI4LCAxNzkyLCAyNDU3NiwgMTYzODQwLCA0LCAxNiwgODM4ODYwOCwgMCwgMCwgMjExMzUzNiwgMCwgMCwgMzczNTU1MiwgMCwgMCwgODM4ODYwOCwgODM4ODYwOCwgNDA5NiwgNDA5NiwgNDA5NiwgNDA5NiwgMCwgNDgsIDI1MTY1ODI0LCAwLCAwLCAwLCAxNTcyODY0LCAwLCA2LCA1NiwgMTI4LCAxNzkyLCA4MTkyLCA1MjQyODgsIDU4NzIwMjU2LCA0MDI2NTMxODQsIDAsIDAsIDMyLCAxMjgsIDI1NiwgMjYyMTQ0LCAyNjIxNDQsIDEwNDg1NzYsIDEwNzM3NDE4MjQsIDAsIDAsIDAsIDB4ODAwMDAwMDAsIDAsIDAsIDAsIC0yMTQ3NDgzNjQ2LCA0LCAyNCwgMzIsIDEyOCwgMTc5MiwgMTI4MCwgODE5MiwgNTI0Mjg4LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDAsIDI2MjE0NCwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMCwgOCwgMTYsIDEwMjQsIDE2Nzc3MjE2LCA0MTk0NDMyLCAzMTQ1NzI4LCA1NDEwNjUyMTYsIC0yMTQzMjg5MzQ0LCA0MTk0MzA0LCA0MTk0MzA0LCA0MTk0MzA0LCA0MTk0MzA0LCAxNiwgNDAyNjUzMTg0LCAwLCAwLCAzMiwgMTI4LCAyNTYsIDIwNDgsIDI2MjE0NCwgNTI0Mjg4LCA0LCAxNjM4NCwgNjU1MzYsIDY3MTA4ODY0LCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDEwMjQsIDAsIDAsIDMyNzY4LCA4MTkyLCAwLCAyMDQ4LCAwLCAzMiwgODE5MiwgMzY3MDAxNiwgMjA0OCwgODE5MiwgMTk2NjA4LCAxMDQ4NTc2LCAwLCAwLCAzNDgxNiwgOTIxNiwgNDA5NiwgNDA5NiwgMjk2OTYsIDI5NzEyLCAyOTcxMiwgMjk4NDAsIDI5NzEyLCAyOTcxMiwgMjk4NDAsIDUzNjkwMDYyNCwgNDIyNDE0NCwgMTQ0Mzg0LCAtNzU0NjQ3OTU2LCAtNzU0NjQ3OTU2LCAtNzU0NjQ3OTU2LCAtNzU0NjQ3OTU2LCAxNDQzODQsIDE0NDM4NCwgMTQ0Mzg0LCAxNDQzODQsIC03NTQ2NDc5NDAsIC03NTQ2NDc5NDAsIC03NTQ2NDc5NDAsIC03NTQ2NDc5NDAsIC03NTQ1MTY4ODQsIC03NTQ2NDc5NTYsIC03NTQ1MTY4ODQsIC03NTQ1MTY4ODQsIC03NTQ1MTY4ODQsIDAsIDAsIDgzODg2MDgsIDEwNzM3NDE4MjQsIDAsIDAsIDY3MTA4ODY0LCAxMiwgMTYzODQsIDAsIDY1NTM2LCAyOTgyNCwgMCwgMCwgMCwgMzY3MDAxNiwgNDQsIDY0NTc2LCAzMTkwMjkyNDgsIC0xMDczNzQxODI0LCAwLCAwLCA2MCwgMCwgMCwgMCwgNDE5NDMwNCwgMCwgMCwgMCwgMjAxNCwgMCwgMzE5MTYwMzIwLCAwLCAwLCAwLCA1MjQyODgwLCAwLCA0LCA4LCAyNTYsIDUxMiwgMjA0OCwgODE5MiwgMTYzODQsIDQ1ODc1MiwgNTAzMzE2NDgsIDAsIDUyNDI4OCwgMzE0NTcyOCwgMCwgMCwgMTYzODQsIDgsIDAsIDI4NjcyLCAwLCAwLCAzMiwgNTI0Mjg4LCAwLCAxNiwgMCwgMTI4LCAwLCAxMjI4OCwgMTMxMDcyLCAwLCAwLCAxMjgsIDUxMiwgMzA3MiwgNDA5NiwgMTYzODQsIDMyNzY4LCAxMzEwNzIsIDUyNDI4OCwgMTA0ODU3NiwgMjA5NzE1MiwgNDE5NDMwNCwgMjYyMTQ0LCAzMTg3NjcxMDQsIC0xMDczNzQxODI0LCAwLCAwLCAwLCAyOCwgMCwgMCwgNjAsIDY0NTc2LCAyOCwgMzIsIDY0LCAxMDI0LCAyMDQ4LCA2MTQ0MCwgMjYyMTQ0LCAzMTg3NjcxMDQsIDI0NTc2LCAwLCAwLCAwLCA4Mzg4NjA4LCAwLCAwLCAwLCAxMDQwMDAwLCA2NzEwODg2NCwgMTYzODQsIDAsIDY1NTM2LCAyNjIxNDQsIDEwNDg1NzYsIDAsIDgsIDY0LCAyMDQ4LCA0MDk2LCA4MTkyLCA2NTUzNiwgMTMxMDcyLCAxMDQ4NTc2LCAwLCAwLCAxMjgsIDUzNjg3MDkxMiwgNDE5NDMwNCwgMTMxMDcyLCAwLCAwLCA2NCwgMjA0OCwgMTYzODQsIDMyNzY4LCA1MjQyODgsIDEwNDg1NzYsIDQxOTQzMDQsIDEzNDIxNzcyOCwgMHg4MDAwMDAwMCwgMzI3NjgsIDI2MjE0NCwgNTAzMzE2NDgsIDI2ODQzNTQ1NiwgMCwgMzI3NjgsIDgzODg2MDgsIDAsIDAsIDE2Nzc3MjE2LCAxNjc3NzIxNiwgMCwgMCwgMCwgNCwgOCwgMTYsIDIsIDY3MTA4ODY0LCAwLCA2NTUzNiwgMjAxMzI2NTkyLCAweDgwMDAwMDAwLCAwLCAwLCAxOTk4LCA1OTIzODQwMCwgLTY3MTA4ODY0LCAwLCA1MjQyODgsIDEwNDg1NzYsIDAsIDAsIDY0LCAyNTYsIDMyNzY4LCA1MDMzMTY0OCwgMjY4NDM1NDU2LCAwLCAwLCAxLCAyNTYsIDAsIDAsIDAsIDE2Nzc3MjE2LCAwLCAwLCAyNTYsIDAsIDgxOTIsIDAsIDI1NiwgMjYyMTQ0LCAyMTEzNTM2LCAyMDk3MTUyLCAxMzU3OTA1OTIsIDAsIDI1NiwgODE5MiwgMjA5NzE1MiwgMCwgMHg4MDAwMDAwMCwgMCwgMzI3NjgsIDIwOTcxNTIsIDAsIDB4ODAwMDAwMDAsIDUyNDI4ODAsIDAsIDAsIDAsIDEyOCwgMCwgMCwgMCwgMjA4LCAxMzEwNzMsIDAsIDAsIDEzMTA3MywgMCwgMTM1NzkwNTkyLCAxMzEwNzMsIDQsIDAsIDEzMTA3MywgMzkzMjMzLCAxNjEwNjEyNzM2LCAxNjEwNjEyNzM2LCAxNjEwNjEyNzM2LCAzOTMyNDEsIDM5MzI0MSwgMzkzMjQxLCAzOTMyNDEsIDgwNTcwNzc5MywgODA1NzA3NzkzLCAxODc5NDQ5NjE3LCA4MDU3MDgwNDksIDE4Nzk0NDk2MTcsIDE4Nzk0NDk2MTcsIDE4Nzk0NDk2MTcsIDE4Nzk0NDk2MTcsIC00ODM5NDg1NTMsIC00NzU1NTk5NDUsIC00NzU1NTk5NDUsIC00ODM5NDg1NTMsIC00ODM5NDg1NTMsIC00NzU1NTk5NDUsIC00ODM5NDg1NTMsIC00NzU1NTk5NDUsIC00ODM5NDg1NTMsIC00NzU1NTk5NDUsIC00NzU1NTk5NDUsIC00NzU1NTk5NDUsIC00NzU1NTk5NDUsIC00NzU1NTk5NDUsIC0yMTU1MDQ5MDUsIC00NzU1NTk5NDUsIC0yMDcxMTYyOTcsIC0yMDcxMTYyOTcsIDAsIDAsIDcyLCAwLCA0MDk2LCA0MTk0MzA0LCAzMjc2OCwgMCwgMCwgMjU2LCA0MDE0MjQsIDgwNTMwNjM2OCwgMCwgMCwgMTEyLCAyNTE2NTgyNCwgMCwgMTg3OTA0ODE5MiwgMCwgMCwgMTE2LCAwLCAwLCA0MDE2ODAsIDAsIDAsIDAsIDMyNTA1ODU2LCA3LCAxOTM2NzkyMCwgLTUwMzMxNjQ4MCwgMCwgMCwgMCwgMzM1NTQ0MzIsIDAsIDAsIDMzNTU0NDMyLCAyNjg0MzU0NTYsIDAsIDAsIDAsIDE5Mzc2MTEyLCAtMjM0ODgxMDI0LCAwLCAwLCA1MDMzMTY0OCwgMjY4NDM1NDU2LCAwLCAyNzc2NDcyMCwgLTIzNDg4MTAyNCwgMCwgMCwgNTEyLCAyMDQ4LCAwLCAwLCAxLCAyLCA0LCAzMiwgNTI0Mjg4LCAxMDQ4NTc2LCA1MjQyODgsIDEwNDg1NzYsIDMzNTU0NDMyLCA2NzEwODg2NCwgMTM0MjE3NzI4LCA4MDUzMDYzNjgsIDAsIDI0LCAwLCAwLCA1MTIsIDMwNzIsIDE2Mzg0LCAwLCA3LCAxNiwgNDgwLCAxNTM2LCAzMjc2OCwgMTUzNiwgMzI3NjgsIDY1NTM2LCAyNDkwMzY4LCAzMjc2OCwgNjU1MzYsIDEwODc4OTc2LCAxNjc3NzIxNiwgMzM1NTQ0MzIsIDAsIDk3MjgsIDI2ODQzNTQ1NiwgMCwgMCwgNjcxMDg4NjYsIDEyLCA2NCwgMTI4LCA1MTIsIDEwMjQsIDIwNDgsIDAsIDE2LCAzOTMyMTYsIDAsIDAsIDM5MzIxNiwgMjA5NzE1MiwgMTY3NzcyMTYsIDMzNTU0NDMyLCA1MzY4NzA5MTIsIC0xMDczNzQxODI0LCAwLCAwLCAxMDQ4NTc2MCwgMTY3NzcyMTYsIDMzNTU0NDMyLCAxMDczNzQxODI0LCAweDgwMDAwMDAwLCAwLCAxNiwgMjI0LCAyNTYsIDE1MzYsIDMyNzY4LCA2NTUzNiwgMzkzMjE2LCAxMDQ4NTc2MCwgMTY3NzcyMTYsIDEzMTA3MiwgMjYyMTQ0LCAyMDk3MTUyLCAxNjc3NzIxNiwgMzI3NjgsIDEzMTA3MiwgMjYyMTQ0LCAyMDk3MTUyLCA4Mzg4NjA4LCAxNjc3NzIxNiwgMCwgMCwgNCwgMTYsIDIyNCwgNTEyLCAzMjc2OCwgMTMxMDcyLCAyMDk3MTUyLCAxNjc3NzIxNiwgMTkyLCAzMjc2OCwgMCwgMCwgNTEyLCA0MDk2LCA0LCAxNiwgMTkyLCAzMjc2OCwgODM4ODYwOCwgMCwgMTYsIDY0LCAxMjgsIDgzODg2MDgsIDAsIDAsIDEwMjQsIDAsIDQsIDAsIDAsIDAsIDMxNDU3MjgsIDAsIDQsIDEyOCwgMCwgMCwgMjY4NDM1NDU2LCAyLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgNjUsIDAsIDY0LCAxMjgsIDgzODg2MDgsIDE2Nzc3MjE2LCAxMDczNzQxODI0LCAwLCAwLCA1MTIsIDIwNDgsIDMyNzY4LCAyNjIxNDQsIDUyNDI4OCwgODM4ODYwOCwgMCwgMCwgNTEyLCAxMzEwNzIsIDUyNDI4OCwgODM4ODYwOCwgMzM1NTQ0MzIsIDB4ODAwMDAwMDAsIDMzNTU0NDMyLCAzMzU1NDQzMiwgMCwgMiwgNCwgMTEyLCAxMjgsIC0yMTEzOTI5MjE2LCAxMDA2NjMyOTYsIDEwMDY2MzI5NiwgMiwgNCwgNTI0Mjg4LCAxMzQyMTc3MjgsIDAsIDAsIDgsIDUxMiwgMjA0OCwgMTk2NjA4LCAzMzU1NDQzNiwgMCwgMCwgMzM1NTQ0MzYsIDQyMjQsIDQyMjQsIDAsIDY1NTM2LCAxMDA2NjMyOTYsIDQyMjQsIDY1NTM2LCA2NTUzNiwgMjYyMTQ0LCAzMzU1NDQzMiwgMCwgMiwgNCwgMTYsIDY0LCAxMjgsIDI1NiwgMCwgNDIyNCwgNjU1MzYsIDE2Nzc3MjE2LCAyNjI0MDAsIDY1NTM2LCA0MjI0LCAtMTA3MjYyNzcxMiwgODA1MzA2Mzg0LCAtMTM0MjE3NzI2NCwgLTEzNDIxNzcyNjQsIC0xMDcwMDA2MjcyLCAtMTA2OTk4OTM3NiwgLTEwNjk5ODkzNzYsIC0xMDY5OTg5Mzc2LCAtMjU4OTMyNzIwLCAtMjU4OTMyNzIwLCAtMjU4OTMyNzIwLCAtMjU4OTMyNzIwLCAtMTA2OTk4OTM2MCwgLTEwNjU3OTUwNzIsIC0xMDYxNjAwNzY4LCAtMTA2OTk4OTM3NiwgLTIyNTM3ODI4OCwgLTI1ODkzMjcyMCwgLTI1ODkzMjcyMCwgLTI1ODkzMjcyMCwgLTIyNTM3ODI4OCwgMTI2MDc2NywgMTI2MDc2NywgMzQ4MTUxOTksIDEyNjA3NjcsIDEyNjA3NjcsIDEyNjA3NjcsIDEyNjA3NjcsIDM0ODE1MTk5LCAxMjYwNzY3LCAzNDgxNTE5OSwgMzQ4MTUxOTksIDM0ODE1MTk5LCAxMjYwNzY3LCAxMjYwNzY3LCAxNjkwMzI5MjcsIDEyNDI3NzQ3NTEsIC0xOTc4NDUwNzIxLCAxNjkwMzI5MjcsIC0xOTc4NDUwNzIxLCAtMTk3ODQ1MDcyMSwgLTE5Nzg0NTA3MjEsIDE2OTAzMjkyNywgMTY5MDMyOTI3LCAxNjkwMzI5MjcsIDE2OTAzMjkyNywgLTIyNTIzMTY0OSwgLTExNzMxNDQzNTMsIC0yMjUyMzE2NDksIC0yMjUyMzE2NDksIC05MTAxMzkyMSwgMCwgMCwgMCwgNjcxMDg4NjQsIDAsIDM3NTE5MzYsIDAsIDAsIDUyOCwgNzk0NjI0MCwgMTIxNDA1NDQsIDAsIDAsIDAsIDEzNDIxNzcyOCwgMCwgMCwgMCwgNywgMjc3NTY1MjgsIC01MDMzMTY0ODAsIDAsIDAsIDk1MDI3MjAsIDE2MTA2MTI3MzYsIDAsIDAsIDQ4NjUzOTI2NCwgMCwgMCwgMjA0OCwgMzI3NjgsIDAsIDAsIDY0LCAxMjgsIDAsIDAsIDUzNjg3MDkxMiwgMCwgMCwgMjA4LCAxNTM2MCwgMTI0NTE4NCwgMCwgMCwgMCwgMjY4NDM1NDU2LCAwLCAwLCAwLCAxNSwgOTYzMzc5MiwgMCwgMCwgMCwgMzIsIDUxMiwgMjA0OCwgMjYyMTQ0LCAwLCAzNjcwMDE2LCAwLCAwLCAxMDQwLCAxMDQwLCAxLCAyLCAxMiwgODAsIDEyOCwgNzE2OCwgODE5MiwgMTk2NjA4LCAxNiwgNjQsIDEyOCwgMzA3MiwgNDA5NiwgODE5MiwgNjU1MzYsIDEzMTA3MiwgMCwgMCwgMzIsIDI2MjE0NCwgNTI0Mjg4LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCAwLCAwLCAwLCAyLCA4LCA2NCwgMTI4LCAxMDI0LCA0MDk2LCAwLCAwLCAyNjIxNDQsIDAsIDQwOTYsIDQxOTQzMDQsIDEsIDEsIDEsIDAsIDAsIDIsIDgsIDE2LCA2NApdOwoKSlNPTmlxUGFyc2VyLlRPS0VOID0KWwogICIoMCkiLAogICJQcmFnbWFDb250ZW50cyIsCiAgIkRpckNvbW1lbnRDb250ZW50cyIsCiAgIkRpclBJQ29udGVudHMiLAogICJDRGF0YVNlY3Rpb24iLAogICJXaWxkY2FyZCIsCiAgIkVRTmFtZSIsCiAgIlVSSUxpdGVyYWwiLAogICJJbnRlZ2VyTGl0ZXJhbCIsCiAgIkRlY2ltYWxMaXRlcmFsIiwKICAiRG91YmxlTGl0ZXJhbCIsCiAgIlN0cmluZ0xpdGVyYWwiLAogICJQcmVkZWZpbmVkRW50aXR5UmVmIiwKICAiJ1wiXCInIiwKICAiRXNjYXBlQXBvcyIsCiAgIkVsZW1lbnRDb250ZW50Q2hhciIsCiAgIlF1b3RBdHRyQ29udGVudENoYXIiLAogICJBcG9zQXR0ckNvbnRlbnRDaGFyIiwKICAiUElUYXJnZXQiLAogICJOQ05hbWUiLAogICJRTmFtZSIsCiAgIlMiLAogICJTIiwKICAiQ2hhclJlZiIsCiAgIkNvbW1lbnRDb250ZW50cyIsCiAgIkVPRiIsCiAgIichJyIsCiAgIichPSciLAogICInXCInIiwKICAiJyMnIiwKICAiJyMpJyIsCiAgIickJyIsCiAgIickJCciLAogICInJSciLAogICInJycnIiwKICAiJygnIiwKICAiJygjJyIsCiAgIicoOiciLAogICInKSciLAogICInKiciLAogICInKiciLAogICInKyciLAogICInLCciLAogICInLSciLAogICInLS0+JyIsCiAgIicuJyIsCiAgIicuLiciLAogICInLyciLAogICInLy8nIiwKICAiJy8+JyIsCiAgIic6JyIsCiAgIic6KSciLAogICInOjonIiwKICAiJzo9JyIsCiAgIic7JyIsCiAgIic8JyIsCiAgIic8IS0tJyIsCiAgIic8LyciLAogICInPDwnIiwKICAiJzw9JyIsCiAgIic8PyciLAogICInPSciLAogICInPiciLAogICInPj0nIiwKICAiJz4+JyIsCiAgIic/JyIsCiAgIic/PiciLAogICInQCciLAogICInTmFOJyIsCiAgIidbJyIsCiAgIiddJyIsCiAgIidhZnRlciciLAogICInYWxsJyIsCiAgIidhbGxvd2luZyciLAogICInYW5jZXN0b3InIiwKICAiJ2FuY2VzdG9yLW9yLXNlbGYnIiwKICAiJ2FuZCciLAogICInYW55JyIsCiAgIidhcHBlbmQnIiwKICAiJ2FycmF5JyIsCiAgIidhcyciLAogICInYXNjZW5kaW5nJyIsCiAgIidhdCciLAogICInYXR0cmlidXRlJyIsCiAgIidiYXNlLXVyaSciLAogICInYmVmb3JlJyIsCiAgIidib3VuZGFyeS1zcGFjZSciLAogICInYnJlYWsnIiwKICAiJ2J5JyIsCiAgIidjYXNlJyIsCiAgIidjYXN0JyIsCiAgIidjYXN0YWJsZSciLAogICInY2F0Y2gnIiwKICAiJ2NoZWNrJyIsCiAgIidjaGlsZCciLAogICInY29sbGF0aW9uJyIsCiAgIidjb2xsZWN0aW9uJyIsCiAgIidjb21tZW50JyIsCiAgIidjb25zdHJhaW50JyIsCiAgIidjb25zdHJ1Y3Rpb24nIiwKICAiJ2NvbnRhaW5zJyIsCiAgIidjb250ZW50JyIsCiAgIidjb250ZXh0JyIsCiAgIidjb250aW51ZSciLAogICInY29weSciLAogICInY29weS1uYW1lc3BhY2VzJyIsCiAgIidjb3VudCciLAogICInZGVjaW1hbC1mb3JtYXQnIiwKICAiJ2RlY2ltYWwtc2VwYXJhdG9yJyIsCiAgIidkZWNsYXJlJyIsCiAgIidkZWZhdWx0JyIsCiAgIidkZWxldGUnIiwKICAiJ2Rlc2NlbmRhbnQnIiwKICAiJ2Rlc2NlbmRhbnQtb3Itc2VsZiciLAogICInZGVzY2VuZGluZyciLAogICInZGlhY3JpdGljcyciLAogICInZGlmZmVyZW50JyIsCiAgIidkaWdpdCciLAogICInZGlzdGFuY2UnIiwKICAiJ2RpdiciLAogICInZG9jdW1lbnQnIiwKICAiJ2RvY3VtZW50LW5vZGUnIiwKICAiJ2VsZW1lbnQnIiwKICAiJ2Vsc2UnIiwKICAiJ2VtcHR5JyIsCiAgIidlbXB0eS1zZXF1ZW5jZSciLAogICInZW5jb2RpbmcnIiwKICAiJ2VuZCciLAogICInZW50aXJlJyIsCiAgIidlcSciLAogICInZXZlcnknIiwKICAiJ2V4YWN0bHknIiwKICAiJ2V4Y2VwdCciLAogICInZXhpdCciLAogICInZXh0ZXJuYWwnIiwKICAiJ2ZhbHNlJyIsCiAgIidmaXJzdCciLAogICInZm9sbG93aW5nJyIsCiAgIidmb2xsb3dpbmctc2libGluZyciLAogICInZm9yJyIsCiAgIidmb3JlYWNoJyIsCiAgIidmb3JlaWduJyIsCiAgIidmcm9tJyIsCiAgIidmdC1vcHRpb24nIiwKICAiJ2Z0YW5kJyIsCiAgIidmdG5vdCciLAogICInZnRvciciLAogICInZnVuY3Rpb24nIiwKICAiJ2dlJyIsCiAgIidncmVhdGVzdCciLAogICInZ3JvdXAnIiwKICAiJ2dyb3VwaW5nLXNlcGFyYXRvciciLAogICInZ3QnIiwKICAiJ2lkaXYnIiwKICAiJ2lmJyIsCiAgIidpbXBvcnQnIiwKICAiJ2luJyIsCiAgIidpbmRleCciLAogICInaW5maW5pdHknIiwKICAiJ2luaGVyaXQnIiwKICAiJ2luc2Vuc2l0aXZlJyIsCiAgIidpbnNlcnQnIiwKICAiJ2luc3RhbmNlJyIsCiAgIidpbnRlZ3JpdHknIiwKICAiJ2ludGVyc2VjdCciLAogICInaW50byciLAogICInaXMnIiwKICAiJ2l0ZW0nIiwKICAiJ2pzb24nIiwKICAiJ2pzb24taXRlbSciLAogICInanNvbmlxJyIsCiAgIidrZXknIiwKICAiJ2xhbmd1YWdlJyIsCiAgIidsYXN0JyIsCiAgIidsYXgnIiwKICAiJ2xlJyIsCiAgIidsZWFzdCciLAogICInbGV0JyIsCiAgIidsZXZlbHMnIiwKICAiJ2xvb3AnIiwKICAiJ2xvd2VyY2FzZSciLAogICInbHQnIiwKICAiJ21pbnVzLXNpZ24nIiwKICAiJ21vZCciLAogICInbW9kaWZ5JyIsCiAgIidtb2R1bGUnIiwKICAiJ21vc3QnIiwKICAiJ25hbWVzcGFjZSciLAogICInbmFtZXNwYWNlLW5vZGUnIiwKICAiJ25lJyIsCiAgIiduZXh0JyIsCiAgIidubyciLAogICInbm8taW5oZXJpdCciLAogICInbm8tcHJlc2VydmUnIiwKICAiJ25vZGUnIiwKICAiJ25vZGVzJyIsCiAgIidub3QnIiwKICAiJ251bGwnIiwKICAiJ29iamVjdCciLAogICInb2NjdXJzJyIsCiAgIidvZiciLAogICInb24nIiwKICAiJ29ubHknIiwKICAiJ29wdGlvbiciLAogICInb3InIiwKICAiJ29yZGVyJyIsCiAgIidvcmRlcmVkJyIsCiAgIidvcmRlcmluZyciLAogICIncGFyYWdyYXBoJyIsCiAgIidwYXJhZ3JhcGhzJyIsCiAgIidwYXJlbnQnIiwKICAiJ3BhdHRlcm4tc2VwYXJhdG9yJyIsCiAgIidwZXItbWlsbGUnIiwKICAiJ3BlcmNlbnQnIiwKICAiJ3BocmFzZSciLAogICIncG9zaXRpb24nIiwKICAiJ3ByZWNlZGluZyciLAogICIncHJlY2VkaW5nLXNpYmxpbmcnIiwKICAiJ3ByZXNlcnZlJyIsCiAgIidwcmV2aW91cyciLAogICIncHJvY2Vzc2luZy1pbnN0cnVjdGlvbiciLAogICIncmVsYXRpb25zaGlwJyIsCiAgIidyZW5hbWUnIiwKICAiJ3JlcGxhY2UnIiwKICAiJ3JldHVybiciLAogICIncmV0dXJuaW5nJyIsCiAgIidyZXZhbGlkYXRpb24nIiwKICAiJ3NhbWUnIiwKICAiJ3NhdGlzZmllcyciLAogICInc2NoZW1hJyIsCiAgIidzY2hlbWEtYXR0cmlidXRlJyIsCiAgIidzY2hlbWEtZWxlbWVudCciLAogICInc2NvcmUnIiwKICAiJ3NlbGVjdCciLAogICInc2VsZiciLAogICInc2Vuc2l0aXZlJyIsCiAgIidzZW50ZW5jZSciLAogICInc2VudGVuY2VzJyIsCiAgIidza2lwJyIsCiAgIidzbGlkaW5nJyIsCiAgIidzb21lJyIsCiAgIidzdGFibGUnIiwKICAiJ3N0YXJ0JyIsCiAgIidzdGVtbWluZyciLAogICInc3RvcCciLAogICInc3RyaWN0JyIsCiAgIidzdHJpcCciLAogICInc3RydWN0dXJlZC1pdGVtJyIsCiAgIidzd2l0Y2gnIiwKICAiJ3RleHQnIiwKICAiJ3RoZW4nIiwKICAiJ3RoZXNhdXJ1cyciLAogICIndGltZXMnIiwKICAiJ3RvJyIsCiAgIid0cmVhdCciLAogICIndHJ1ZSciLAogICIndHJ5JyIsCiAgIid0dW1ibGluZyciLAogICIndHlwZSciLAogICIndHlwZXN3aXRjaCciLAogICIndW5pb24nIiwKICAiJ3VuaXF1ZSciLAogICIndW5vcmRlcmVkJyIsCiAgIid1cGRhdGluZyciLAogICIndXBwZXJjYXNlJyIsCiAgIid1c2luZyciLAogICIndmFsaWRhdGUnIiwKICAiJ3ZhbHVlJyIsCiAgIid2YXJpYWJsZSciLAogICIndmVyc2lvbiciLAogICInd2VpZ2h0JyIsCiAgIid3aGVuJyIsCiAgIid3aGVyZSciLAogICInd2hpbGUnIiwKICAiJ3dpbGRjYXJkcyciLAogICInd2luZG93JyIsCiAgIid3aXRoJyIsCiAgIid3aXRob3V0JyIsCiAgIid3b3JkJyIsCiAgIid3b3JkcyciLAogICInemVyby1kaWdpdCciLAogICIneyciLAogICIne3snIiwKICAiJ3t8JyIsCiAgIid8JyIsCiAgIid8fCciLAogICInfH0nIiwKICAiJ30nIiwKICAiJ319JyIKXTsKCn0se31dLCIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvcGFyc2Vycy9YUXVlcnlQYXJzZXIuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhRdWVyeVBhcnNlciA9IGV4cG9ydHMuWFF1ZXJ5UGFyc2VyID0gZnVuY3Rpb24gWFF1ZXJ5UGFyc2VyKHN0cmluZywgcGFyc2luZ0V2ZW50SGFuZGxlcikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXQoc3RyaW5nLCBwYXJzaW5nRXZlbnRIYW5kbGVyKTsKICB2YXIgc2VsZiA9IHRoaXM7CgogIHRoaXMuUGFyc2VFeGNlcHRpb24gPSBmdW5jdGlvbihiLCBlLCBzLCBvLCB4KQogIHsKICAgIHZhcgogICAgICBiZWdpbiA9IGIsCiAgICAgIGVuZCA9IGUsCiAgICAgIHN0YXRlID0gcywKICAgICAgb2ZmZW5kaW5nID0gbywKICAgICAgZXhwZWN0ZWQgPSB4OwoKICAgIHRoaXMuZ2V0QmVnaW4gPSBmdW5jdGlvbigpIHtyZXR1cm4gYmVnaW47fTsKICAgIHRoaXMuZ2V0RW5kID0gZnVuY3Rpb24oKSB7cmV0dXJuIGVuZDt9OwogICAgdGhpcy5nZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge3JldHVybiBzdGF0ZTt9OwogICAgdGhpcy5nZXRFeHBlY3RlZCA9IGZ1bmN0aW9uKCkge3JldHVybiBleHBlY3RlZDt9OwogICAgdGhpcy5nZXRPZmZlbmRpbmcgPSBmdW5jdGlvbigpIHtyZXR1cm4gb2ZmZW5kaW5nO307CgogICAgdGhpcy5nZXRNZXNzYWdlID0gZnVuY3Rpb24oKQogICAgewogICAgICByZXR1cm4gb2ZmZW5kaW5nIDwgMCA/ICJsZXhpY2FsIGFuYWx5c2lzIGZhaWxlZCIgOiAic3ludGF4IGVycm9yIjsKICAgIH07CiAgfTsKCiAgZnVuY3Rpb24gaW5pdChzdHJpbmcsIHBhcnNpbmdFdmVudEhhbmRsZXIpCiAgewogICAgZXZlbnRIYW5kbGVyID0gcGFyc2luZ0V2ZW50SGFuZGxlcjsKICAgIGlucHV0ID0gc3RyaW5nOwogICAgc2l6ZSA9IHN0cmluZy5sZW5ndGg7CiAgICByZXNldCgwLCAwLCAwKTsKICB9CgogIHRoaXMuZ2V0SW5wdXQgPSBmdW5jdGlvbigpCiAgewogICAgcmV0dXJuIGlucHV0OwogIH07CgogIGZ1bmN0aW9uIHJlc2V0KGwsIGIsIGUpCiAgewogICAgICAgICAgICBiMCA9IGI7IGUwID0gYjsKICAgIGwxID0gbDsgYjEgPSBiOyBlMSA9IGU7CiAgICBsMiA9IDA7CiAgICBlbmQgPSBlOwogICAgZXggPSAtMTsKICAgIG1lbW8gPSB7fTsKICAgIGV2ZW50SGFuZGxlci5yZXNldChpbnB1dCk7CiAgfQoKICB0aGlzLmdldE9mZmVuZGluZ1Rva2VuID0gZnVuY3Rpb24oZSkKICB7CiAgICB2YXIgbyA9IGUuZ2V0T2ZmZW5kaW5nKCk7CiAgICByZXR1cm4gbyA+PSAwID8gWFF1ZXJ5UGFyc2VyLlRPS0VOW29dIDogbnVsbDsKICB9OwoKICB0aGlzLmdldEV4cGVjdGVkVG9rZW5TZXQgPSBmdW5jdGlvbihlKQogIHsKICAgIHZhciBleHBlY3RlZDsKICAgIGlmIChlLmdldEV4cGVjdGVkKCkgPCAwKQogICAgewogICAgICBleHBlY3RlZCA9IFhRdWVyeVBhcnNlci5nZXRUb2tlblNldCgtIGUuZ2V0U3RhdGUoKSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGV4cGVjdGVkID0gW1hRdWVyeVBhcnNlci5UT0tFTltlLmdldEV4cGVjdGVkKCldXTsKICAgIH0KICAgIHJldHVybiBleHBlY3RlZDsKICB9OwoKICB0aGlzLmdldEVycm9yTWVzc2FnZSA9IGZ1bmN0aW9uKGUpCiAgewogICAgdmFyIHRva2VuU2V0ID0gdGhpcy5nZXRFeHBlY3RlZFRva2VuU2V0KGUpOwogICAgdmFyIGZvdW5kID0gdGhpcy5nZXRPZmZlbmRpbmdUb2tlbihlKTsKICAgIHZhciBwcmVmaXggPSBpbnB1dC5zdWJzdHJpbmcoMCwgZS5nZXRCZWdpbigpKTsKICAgIHZhciBsaW5lcyA9IHByZWZpeC5zcGxpdCgiXG4iKTsKICAgIHZhciBsaW5lID0gbGluZXMubGVuZ3RoOwogICAgdmFyIGNvbHVtbiA9IGxpbmVzW2xpbmUgLSAxXS5sZW5ndGggKyAxOwogICAgdmFyIHNpemUgPSBlLmdldEVuZCgpIC0gZS5nZXRCZWdpbigpOwogICAgcmV0dXJuIGUuZ2V0TWVzc2FnZSgpCiAgICAgICAgICsgKGZvdW5kID09IG51bGwgPyAiIiA6ICIsIGZvdW5kICIgKyBmb3VuZCkKICAgICAgICAgKyAiXG53aGlsZSBleHBlY3RpbmcgIgogICAgICAgICArICh0b2tlblNldC5sZW5ndGggPT0gMSA/IHRva2VuU2V0WzBdIDogKCJbIiArIHRva2VuU2V0LmpvaW4oIiwgIikgKyAiXSIpKQogICAgICAgICArICJcbiIKICAgICAgICAgKyAoc2l6ZSA9PSAwIHx8IGZvdW5kICE9IG51bGwgPyAiIiA6ICJhZnRlciBzdWNjZXNzZnVsbHkgc2Nhbm5pbmcgIiArIHNpemUgKyAiIGNoYXJhY3RlcnMgYmVnaW5uaW5nICIpCiAgICAgICAgICsgImF0IGxpbmUgIiArIGxpbmUgKyAiLCBjb2x1bW4gIiArIGNvbHVtbiArICI6XG4uLi4iCiAgICAgICAgICsgaW5wdXQuc3Vic3RyaW5nKGUuZ2V0QmVnaW4oKSwgTWF0aC5taW4oaW5wdXQubGVuZ3RoLCBlLmdldEJlZ2luKCkgKyA2NCkpCiAgICAgICAgICsgIi4uLiI7CiAgfTsKCiAgdGhpcy5wYXJzZV9YUXVlcnkgPSBmdW5jdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlhRdWVyeSIsIGUwKTsKICAgIGxvb2thaGVhZDFXKDI3NCk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Nb2R1bGUoKTsKICAgIHNoaWZ0KDI1KTsgICAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlhRdWVyeSIsIGUwKTsKICB9OwoKICBmdW5jdGlvbiBwYXJzZV9Nb2R1bGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJNb2R1bGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICBsb29rYWhlYWQyVygxOTgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDY0Mjc0ICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gMTM0OTMwKSAgICAgICAgICAgICAgIC8vICd4cXVlcnknICd2ZXJzaW9uJwogICAgewogICAgICBwYXJzZV9WZXJzaW9uRGVjbCgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMjc0KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGxvb2thaGVhZDJXKDE5Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA5NDM5MDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnbmFtZXNwYWNlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0xpYnJhcnlNb2R1bGUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX01haW5Nb2R1bGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTW9kdWxlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmVyc2lvbkRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWZXJzaW9uRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScKICAgIGxvb2thaGVhZDFXKDExNik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5jb2RpbmcnIHwgJ3ZlcnNpb24nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyNjMpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgbG9va2FoZWFkMVcoMTA5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycgfCAnZW5jb2RpbmcnCiAgICAgIGlmIChsMSA9PSAxMjUpICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgewogICAgICAgIHNoaWZ0KDEyNSk7ICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDI4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcGFyYXRvcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWZXJzaW9uRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0xpYnJhcnlNb2R1bGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJMaWJyYXJ5TW9kdWxlIiwgZTApOwogICAgcGFyc2VfTW9kdWxlRGVjbCgpOwogICAgbG9va2FoZWFkMVcoMTM4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyg6JyB8ICdkZWNsYXJlJyB8ICdpbXBvcnQnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Qcm9sb2coKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTGlicmFyeU1vZHVsZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX01vZHVsZURlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJNb2R1bGVEZWNsIiwgZTApOwogICAgc2hpZnQoMTgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgbG9va2FoZWFkMVcoNjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduYW1lc3BhY2UnCiAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICBsb29rYWhlYWQxVygyNDgpOyAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05DTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc9JwogICAgc2hpZnQoNjApOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGxvb2thaGVhZDFXKDI4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcGFyYXRvcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJNb2R1bGVEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJvbG9nKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUHJvbG9nIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjc0KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgICAgbG9va2FoZWFkMlcoMjEzKTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyUnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgICAgbG9va2FoZWFkMlcoMjAxKTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDQyNjA0ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdiYXNlLXVyaScKICAgICAgICYmIGxrICE9IDQzNjI4ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdib3VuZGFyeS1zcGFjZScKICAgICAgICYmIGxrICE9IDUwMjg0ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdjb25zdHJ1Y3Rpb24nCiAgICAgICAmJiBsayAhPSA1MzM1NiAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnY29weS1uYW1lc3BhY2VzJwogICAgICAgJiYgbGsgIT0gNTQzODAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgJiYgbGsgIT0gNTU5MTYgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2RlZmF1bHQnCiAgICAgICAmJiBsayAhPSA3MjMwMCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnZnQtb3B0aW9uJwogICAgICAgJiYgbGsgIT0gOTMzMzcgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnbW9kdWxlJwogICAgICAgJiYgbGsgIT0gOTQzMTYgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ25hbWVzcGFjZScKICAgICAgICYmIGxrICE9IDEwNDA0NCAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdvcmRlcmluZycKICAgICAgICYmIGxrICE9IDExMzc3MiAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdyZXZhbGlkYXRpb24nCiAgICAgICAmJiBsayAhPSAxMTUzNTMpICAgICAgICAgICAgIC8vICdpbXBvcnQnICdzY2hlbWEnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICAgIGxvb2thaGVhZDJXKDE3OCk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdiYXNlLXVyaScgfCAnYm91bmRhcnktc3BhY2UnIHwgJ2NvbnN0cnVjdGlvbicgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDU1OTE2KSAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdkZWZhdWx0JwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCgwLCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICB0cnlfRGVmYXVsdE5hbWVzcGFjZURlY2woKTsKICAgICAgICAgICAgbGsgPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICB9CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSgwLCBlMCwgbGspOwogICAgICAgIH0KICAgICAgfQogICAgICBzd2l0Y2ggKGxrKQogICAgICB7CiAgICAgIGNhc2UgLTE6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0RlZmF1bHROYW1lc3BhY2VEZWNsKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgOTQzMTY6ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnbmFtZXNwYWNlJwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9OYW1lc3BhY2VEZWNsKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0ltcG9ydCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDcyMzAwOiAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2Z0LW9wdGlvbicKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRlRPcHRpb25EZWNsKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1NldHRlcigpOwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI4KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2VwYXJhdG9yKCk7CiAgICB9CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyNzQpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgICBsb29rYWhlYWQyVygyMTApOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnJScgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayAhPSAxNjQ5MiAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnJScKICAgICAgICYmIGxrICE9IDQ4NzQ4ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdjb2xsZWN0aW9uJwogICAgICAgJiYgbGsgIT0gNTE4MjAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2NvbnRleHQnCiAgICAgICAmJiBsayAhPSA3NDM0OCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnZnVuY3Rpb24nCiAgICAgICAmJiBsayAhPSA3OTQ2OCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnaW5kZXgnCiAgICAgICAmJiBsayAhPSA4MjU0MCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnaW50ZWdyaXR5JwogICAgICAgJiYgbGsgIT0gMTAxOTk2ICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ29wdGlvbicKICAgICAgICYmIGxrICE9IDEzMTY5MiAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICd1cGRhdGluZycKICAgICAgICYmIGxrICE9IDEzNDI1MikgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICd2YXJpYWJsZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgICAgbG9va2FoZWFkMlcoMTc1KTsgICAgICAgICAgIC8vIFNeV1MgfCAnJScgfCAnKDonIHwgJ2NvbGxlY3Rpb24nIHwgJ2NvbnRleHQnIHwgJ2Z1bmN0aW9uJyB8ICdpbmRleCcgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgc3dpdGNoIChsaykKICAgICAgewogICAgICBjYXNlIDUxODIwOiAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2NvbnRleHQnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0NvbnRleHRJdGVtRGVjbCgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEwMTk5NjogICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ29wdGlvbicKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfT3B0aW9uRGVjbCgpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9Bbm5vdGF0ZWREZWNsKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TZXBhcmF0b3IoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJvbG9nIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2VwYXJhdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2VwYXJhdG9yIiwgZTApOwogICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2VwYXJhdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2V0dGVyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2V0dGVyIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIGxvb2thaGVhZDJXKDE3Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Jhc2UtdXJpJyB8ICdib3VuZGFyeS1zcGFjZScgfCAnY29uc3RydWN0aW9uJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSA1NTkxNikgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdkZWZhdWx0JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDEsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0RlZmF1bHRDb2xsYXRpb25EZWNsKCk7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDJBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0VtcHR5T3JkZXJEZWNsKCk7CiAgICAgICAgICAgIGxrID0gLTY7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDZBKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC05OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgxLCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA0MzYyODogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBwYXJzZV9Cb3VuZGFyeVNwYWNlRGVjbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTI6CiAgICAgIHBhcnNlX0RlZmF1bHRDb2xsYXRpb25EZWNsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0MjYwNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ2Jhc2UtdXJpJwogICAgICBwYXJzZV9CYXNlVVJJRGVjbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgNTAyODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdjb25zdHJ1Y3Rpb24nCiAgICAgIHBhcnNlX0NvbnN0cnVjdGlvbkRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNDA0NDogICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnb3JkZXJpbmcnCiAgICAgIHBhcnNlX09yZGVyaW5nTW9kZURlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC02OgogICAgICBwYXJzZV9FbXB0eU9yZGVyRGVjbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTEzNzcyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICdyZXZhbGlkYXRpb24nCiAgICAgIHBhcnNlX1JldmFsaWRhdGlvbkRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDUzMzU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnY29weS1uYW1lc3BhY2VzJwogICAgICBwYXJzZV9Db3B5TmFtZXNwYWNlc0RlY2woKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9EZWNpbWFsRm9ybWF0RGVjbCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTZXR0ZXIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Cb3VuZGFyeVNwYWNlRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkJvdW5kYXJ5U3BhY2VEZWNsIiwgZTApOwogICAgc2hpZnQoMTA4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDMzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYm91bmRhcnktc3BhY2UnCiAgICBzaGlmdCg4NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgIGxvb2thaGVhZDFXKDEzMyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncHJlc2VydmUnIHwgJ3N0cmlwJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZXNlcnZlJwogICAgICBzaGlmdCgyMTQpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlc2VydmUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmlwJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCb3VuZGFyeVNwYWNlRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0RlZmF1bHRDb2xsYXRpb25EZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRGVmYXVsdENvbGxhdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNDYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdkZWZhdWx0JwogICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDM4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29sbGF0aW9uJwogICAgc2hpZnQoOTQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJEZWZhdWx0Q29sbGF0aW9uRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EZWZhdWx0Q29sbGF0aW9uRGVjbCgpCiAgewogICAgc2hpZnRUKDEwOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDQ2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZGVmYXVsdCcKICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVygzOCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbGxhdGlvbicKICAgIHNoaWZ0VCg5NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0Jhc2VVUklEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQmFzZVVSSURlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoMzIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdiYXNlLXVyaScKICAgIHNoaWZ0KDgzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCYXNlVVJJRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbnN0cnVjdGlvbkRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb25zdHJ1Y3Rpb25EZWNsIiwgZTApOwogICAgc2hpZnQoMTA4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDQxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29uc3RydWN0aW9uJwogICAgc2hpZnQoOTgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgbG9va2FoZWFkMVcoMTMzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwcmVzZXJ2ZScgfCAnc3RyaXAnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaXAnCiAgICAgIHNoaWZ0KDI0MSk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpcCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyMTQpOyAgICAgICAgICAgICAgICAgICAvLyAncHJlc2VydmUnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbnN0cnVjdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PcmRlcmluZ01vZGVEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT3JkZXJpbmdNb2RlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg2OCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyaW5nJwogICAgc2hpZnQoMjAzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICBsb29rYWhlYWQxVygxMzEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyZWQnIHwgJ3Vub3JkZXJlZCcKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBzaGlmdCgyMDIpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlcmluZ01vZGVEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRW1wdHlPcmRlckRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFbXB0eU9yZGVyRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlZmF1bHQnCiAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoNjcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvcmRlcicKICAgIHNoaWZ0KDIwMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgbG9va2FoZWFkMVcoNDkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbXB0eScKICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgbG9va2FoZWFkMVcoMTIxKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdncmVhdGVzdCcgfCAnbGVhc3QnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNDc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JlYXRlc3QnCiAgICAgIHNoaWZ0KDE0Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdncmVhdGVzdCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNzMpOyAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkVtcHR5T3JkZXJEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VtcHR5T3JkZXJEZWNsKCkKICB7CiAgICBzaGlmdFQoMTA4KTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNDYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdkZWZhdWx0JwogICAgc2hpZnRUKDEwOSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDY3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnb3JkZXInCiAgICBzaGlmdFQoMjAxKTsgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgIGxvb2thaGVhZDFXKDQ5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW1wdHknCiAgICBzaGlmdFQoMTIzKTsgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGxvb2thaGVhZDFXKDEyMSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZ3JlYXRlc3QnIHwgJ2xlYXN0JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyZWF0ZXN0JwogICAgICBzaGlmdFQoMTQ3KTsgICAgICAgICAgICAgICAgICAvLyAnZ3JlYXRlc3QnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE3Myk7ICAgICAgICAgICAgICAgICAgLy8gJ2xlYXN0JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29weU5hbWVzcGFjZXNEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29weU5hbWVzcGFjZXNEZWNsIiwgZTApOwogICAgc2hpZnQoMTA4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDQ0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY29weS1uYW1lc3BhY2VzJwogICAgc2hpZnQoMTA0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgbG9va2FoZWFkMVcoMTI4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduby1wcmVzZXJ2ZScgfCAncHJlc2VydmUnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9QcmVzZXJ2ZU1vZGUoKTsKICAgIGxvb2thaGVhZDFXKDI1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcKICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICBsb29rYWhlYWQxVygxMjMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luaGVyaXQnIHwgJ25vLWluaGVyaXQnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Jbmhlcml0TW9kZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb3B5TmFtZXNwYWNlc0RlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QcmVzZXJ2ZU1vZGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVzZXJ2ZU1vZGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlc2VydmUnCiAgICAgIHNoaWZ0KDIxNCk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVzZXJ2ZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxOTApOyAgICAgICAgICAgICAgICAgICAvLyAnbm8tcHJlc2VydmUnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZXNlcnZlTW9kZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luaGVyaXRNb2RlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5oZXJpdE1vZGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5oZXJpdCcKICAgICAgc2hpZnQoMTU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luaGVyaXQnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ25vLWluaGVyaXQnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluaGVyaXRNb2RlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGVjaW1hbEZvcm1hdERlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEZWNpbWFsRm9ybWF0RGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVygxMTQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlY2ltYWwtZm9ybWF0JyB8ICdkZWZhdWx0JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FUU5hbWUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgbG9va2FoZWFkMVcoNDUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIHNoaWZ0KDEwNik7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgIH0KICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE4MCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnIHwgJ05hTicgfCAnZGVjaW1hbC1zZXBhcmF0b3InIHwgJ2RpZ2l0JyB8CiAgICAgIGlmIChsMSA9PSA1MykgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9ERlByb3BlcnR5TmFtZSgpOwogICAgICBsb29rYWhlYWQxVygyOSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc9JwogICAgICBzaGlmdCg2MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGVjaW1hbEZvcm1hdERlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9ERlByb3BlcnR5TmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRGUHJvcGVydHlOYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTA3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtc2VwYXJhdG9yJwogICAgICBzaGlmdCgxMDcpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1zZXBhcmF0b3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXBpbmctc2VwYXJhdG9yJwogICAgICBzaGlmdCgxNDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXBpbmctc2VwYXJhdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZmluaXR5JwogICAgICBzaGlmdCgxNTYpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5maW5pdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbWludXMtc2lnbicKICAgICAgc2hpZnQoMTc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ21pbnVzLXNpZ24nCiAgICAgIGJyZWFrOwogICAgY2FzZSA2NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnTmFOJwogICAgICBzaGlmdCg2Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnTmFOJwogICAgICBicmVhazsKICAgIGNhc2UgMjA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BlcmNlbnQnCiAgICAgIHNoaWZ0KDIwOSk7ICAgICAgICAgICAgICAgICAgIC8vICdwZXJjZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Blci1taWxsZScKICAgICAgc2hpZnQoMjA4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3Blci1taWxsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NTogICAgICAgICAgICAgICAgICAgICAgIC8vICd6ZXJvLWRpZ2l0JwogICAgICBzaGlmdCgyNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnemVyby1kaWdpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaWdpdCcKICAgICAgc2hpZnQoMTE2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpZ2l0JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIwNyk7ICAgICAgICAgICAgICAgICAgIC8vICdwYXR0ZXJuLXNlcGFyYXRvcicKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiREZQcm9wZXJ0eU5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbXBvcnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbXBvcnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBsb29rYWhlYWQyVygxMjYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdtb2R1bGUnIHwgJ3NjaGVtYScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTE1MzUzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJ3NjaGVtYScKICAgICAgcGFyc2VfU2NoZW1hSW1wb3J0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfTW9kdWxlSW1wb3J0KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkltcG9ydCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NjaGVtYUltcG9ydCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNjaGVtYUltcG9ydCIsIGUwKTsKICAgIHNoaWZ0KDE1Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGxvb2thaGVhZDFXKDczKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc2NoZW1hJwogICAgc2hpZnQoMjI1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgbG9va2FoZWFkMVcoMTM3KTsgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicgfCAnZGVmYXVsdCcgfCAnbmFtZXNwYWNlJwogICAgaWYgKGwxICE9IDcpICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2NoZW1hUHJlZml4KCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICBsb29rYWhlYWQxVygxMDgpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnIHwgJ2F0JwogICAgaWYgKGwxID09IDgxKSAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICB7CiAgICAgIHNoaWZ0KDgxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwMyk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc7JwogICAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgICB9CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNjaGVtYUltcG9ydCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NjaGVtYVByZWZpeCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNjaGVtYVByZWZpeCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0KDE4NCk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIGxvb2thaGVhZDFXKDI0OCk7ICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9OQ05hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMjkpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnPScKICAgICAgc2hpZnQoNjApOyAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGxvb2thaGVhZDFXKDQ3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VsZW1lbnQnCiAgICAgIHNoaWZ0KDEyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBsb29rYWhlYWQxVyg2MSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduYW1lc3BhY2UnCiAgICAgIHNoaWZ0KDE4NCk7ICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNjaGVtYVByZWZpeCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX01vZHVsZUltcG9ydCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk1vZHVsZUltcG9ydCIsIGUwKTsKICAgIHNoaWZ0KDE1Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGxvb2thaGVhZDFXKDYwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbW9kdWxlJwogICAgc2hpZnQoMTgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgbG9va2FoZWFkMVcoOTApOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicgfCAnbmFtZXNwYWNlJwogICAgaWYgKGwxID09IDE4NCkgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgewogICAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBsb29rYWhlYWQxVygyNDgpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTkNOYW1lKCk7CiAgICAgIGxvb2thaGVhZDFXKDI5KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJz0nCiAgICAgIHNoaWZ0KDYwKTsgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgfQogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgbG9va2FoZWFkMVcoMTA4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc7JyB8ICdhdCcKICAgIGlmIChsMSA9PSA4MSkgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgewogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxVygxMDMpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOycKICAgICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJNb2R1bGVJbXBvcnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OYW1lc3BhY2VEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTmFtZXNwYWNlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg2MSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25hbWVzcGFjZScKICAgIHNoaWZ0KDE4NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDI0OCk7ICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfTkNOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyOSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJz0nCiAgICBzaGlmdCg2MCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOYW1lc3BhY2VEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGVmYXVsdE5hbWVzcGFjZURlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEZWZhdWx0TmFtZXNwYWNlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlZmF1bHQnCiAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoMTE1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbGVtZW50JyB8ICdmdW5jdGlvbicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdCgxMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNDUpOyAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICB9CiAgICBsb29rYWhlYWQxVyg2MSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25hbWVzcGFjZScKICAgIHNoaWZ0KDE4NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGVmYXVsdE5hbWVzcGFjZURlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGVmYXVsdE5hbWVzcGFjZURlY2woKQogIHsKICAgIHNoaWZ0VCgxMDgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2RlZmF1bHQnCiAgICBzaGlmdFQoMTA5KTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoMTE1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbGVtZW50JyB8ICdmdW5jdGlvbicKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdFQoMTIxKTsgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTQ1KTsgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICB9CiAgICBsb29rYWhlYWQxVyg2MSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25hbWVzcGFjZScKICAgIHNoaWZ0VCgxODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUT3B0aW9uRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUT3B0aW9uRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg1Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Z0LW9wdGlvbicKICAgIHNoaWZ0KDE0MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgIGxvb2thaGVhZDFXKDgxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndXNpbmcnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GVE1hdGNoT3B0aW9ucygpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVE9wdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Bbm5vdGF0ZWREZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW5ub3RhdGVkRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxNzApOyAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJyg6JyB8ICdjb2xsZWN0aW9uJyB8ICdmdW5jdGlvbicgfCAnaW5kZXgnIHwgJ2ludGVncml0eScgfAogICAgICBpZiAobDEgIT0gMzIgICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgICYmIGwxICE9IDI1NykgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0NvbXBhdGliaWxpdHlBbm5vdGF0aW9uKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0Fubm90YXRpb24oKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1ZhckRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GdW5jdGlvbkRlY2woKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsZWN0aW9uJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0NvbGxlY3Rpb25EZWNsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSW5kZXhEZWNsKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JQ0RlY2woKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQW5ub3RhdGVkRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBhdGliaWxpdHlBbm5vdGF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcGF0aWJpbGl0eUFubm90YXRpb24iLCBlMCk7CiAgICBzaGlmdCgyNTcpOyAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tcGF0aWJpbGl0eUFubm90YXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Bbm5vdGF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW5ub3RhdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDMyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTcxKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdjb2xsZWN0aW9uJyB8ICdmdW5jdGlvbicgfCAnaW5kZXgnIHwgJ2ludGVncml0eScgfAogICAgaWYgKGwxID09IDM0KSAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIHsKICAgICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE1NCk7ICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTGl0ZXJhbCgpOwogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMTU0KTsgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0xpdGVyYWwoKTsKICAgICAgfQogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQW5ub3RhdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Bbm5vdGF0aW9uKCkKICB7CiAgICBzaGlmdFQoMzIpOyAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNzEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2NvbGxlY3Rpb24nIHwgJ2Z1bmN0aW9uJyB8ICdpbmRleCcgfCAnaW50ZWdyaXR5JyB8CiAgICBpZiAobDEgPT0gMzQpICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgewogICAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMTU0KTsgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgdHJ5X0xpdGVyYWwoKTsKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDE1NCk7ICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHRyeV9MaXRlcmFsKCk7CiAgICAgIH0KICAgICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYXJEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVmFyRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDI2Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTQ3KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScgfCAnYXMnIHwgJ2V4dGVybmFsJwogICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHlwZURlY2xhcmF0aW9uKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxMDYpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JyB8ICdleHRlcm5hbCcKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDUyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJWYWx1ZSgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEzMyk7ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgbG9va2FoZWFkMVcoMTA0KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nIHwgJzsnCiAgICAgIGlmIChsMSA9PSA1MikgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgewogICAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9WYXJEZWZhdWx0VmFsdWUoKTsKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWYXJEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmFyVmFsdWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYXJWYWx1ZSIsIGUwKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFyVmFsdWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYXJEZWZhdWx0VmFsdWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYXJEZWZhdWx0VmFsdWUiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhckRlZmF1bHRWYWx1ZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbnRleHRJdGVtRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbnRleHRJdGVtRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBsb29rYWhlYWQxVyg0Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRleHQnCiAgICBzaGlmdCgxMDEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgbG9va2FoZWFkMVcoNTUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpdGVtJwogICAgc2hpZnQoMTY1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgIGxvb2thaGVhZDFXKDE0Nyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nIHwgJ2FzJyB8ICdleHRlcm5hbCcKICAgIGlmIChsMSA9PSA3OSkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JdGVtVHlwZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTA2KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScgfCAnZXh0ZXJuYWwnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVmFyVmFsdWUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMzMpOyAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICAgIGxvb2thaGVhZDFXKDEwNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JyB8ICc7JwogICAgICBpZiAobDEgPT0gNTIpICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIHsKICAgICAgICBzaGlmdCg1Mik7ICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfVmFyRGVmYXVsdFZhbHVlKCk7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29udGV4dEl0ZW1EZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUGFyYW1MaXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUGFyYW1MaXN0IiwgZTApOwogICAgcGFyc2VfUGFyYW0oKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUGFyYW0oKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUGFyYW1MaXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhcmFtTGlzdCgpCiAgewogICAgdHJ5X1BhcmFtKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMDEpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCg0MSk7ICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICB0cnlfUGFyYW0oKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1BhcmFtKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUGFyYW0iLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE0Myk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcgfCAnYXMnCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUGFyYW0iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUGFyYW0oKQogIHsKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE0Myk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcgfCAnYXMnCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25Cb2R5KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25Cb2R5IiwgZTApOwogICAgcGFyc2VfRW5jbG9zZWRFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZ1bmN0aW9uQm9keSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GdW5jdGlvbkJvZHkoKQogIHsKICAgIHRyeV9FbmNsb3NlZEV4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0VuY2xvc2VkRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkVuY2xvc2VkRXhwciIsIGUwKTsKICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRW5jbG9zZWRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VuY2xvc2VkRXhwcigpCiAgewogICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX09wdGlvbkRlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJPcHRpb25EZWNsIiwgZTApOwogICAgc2hpZnQoMTA4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGxvb2thaGVhZDFXKDY2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnb3B0aW9uJwogICAgc2hpZnQoMTk5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT3B0aW9uRGVjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0V4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFeHByIiwgZTApOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0V4cHIoKQogIHsKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCg0MSk7ICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZMV09SRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZMV09SRXhwciIsIGUwKTsKICAgIHBhcnNlX0luaXRpYWxDbGF1c2UoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE3Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8ICdsZXQnIHwgJ29yZGVyJyB8ICdyZXR1cm4nIHwgJ3N0YWJsZScgfAogICAgICBpZiAobDEgPT0gMjIwKSAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbnRlcm1lZGlhdGVDbGF1c2UoKTsKICAgIH0KICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1JldHVybkNsYXVzZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGTFdPUkV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRkxXT1JFeHByKCkKICB7CiAgICB0cnlfSW5pdGlhbENsYXVzZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTczKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfCAnb3JkZXInIHwgJ3JldHVybicgfCAnc3RhYmxlJyB8CiAgICAgIGlmIChsMSA9PSAyMjApICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0cnlfSW50ZXJtZWRpYXRlQ2xhdXNlKCk7CiAgICB9CiAgICB0cnlfUmV0dXJuQ2xhdXNlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Jbml0aWFsQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5pdGlhbENsYXVzZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGxvb2thaGVhZDJXKDE0MSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3NsaWRpbmcnIHwgJ3R1bWJsaW5nJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxNjAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnJCcKICAgICAgcGFyc2VfRm9yQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBwYXJzZV9MZXRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9XaW5kb3dDbGF1c2UoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5pdGlhbENsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Jbml0aWFsQ2xhdXNlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBsb29rYWhlYWQyVygxNDEpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdzbGlkaW5nJyB8ICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTYwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyQnCiAgICAgIHRyeV9Gb3JDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHRyeV9MZXRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfV2luZG93Q2xhdXNlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbnRlcm1lZGlhdGVDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbnRlcm1lZGlhdGVDbGF1c2UiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBwYXJzZV9Jbml0aWFsQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHBhcnNlX1doZXJlQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHBhcnNlX0dyb3VwQnlDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgcGFyc2VfQ291bnRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9PcmRlckJ5Q2xhdXNlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkludGVybWVkaWF0ZUNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JbnRlcm1lZGlhdGVDbGF1c2UoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHRyeV9Jbml0aWFsQ2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHRyeV9XaGVyZUNsYXVzZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICB0cnlfR3JvdXBCeUNsYXVzZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICB0cnlfQ291bnRDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfT3JkZXJCeUNsYXVzZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRm9yQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRm9yQ2xhdXNlIiwgZTApOwogICAgc2hpZnQoMTM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRm9yQmluZGluZygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Gb3JCaW5kaW5nKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZvckNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Gb3JDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCgxMzcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHRyeV9Gb3JCaW5kaW5nKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCg0MSk7ICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICB0cnlfRm9yQmluZGluZygpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRm9yQmluZGluZygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZvckJpbmRpbmciLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNjQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FsbG93aW5nJyB8ICdhcycgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA3OSkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTU4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhbGxvd2luZycgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA3MikgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FsbG93aW5nRW1wdHkoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDE1MCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA4MSkgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1Bvc2l0aW9uYWxWYXIoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEyMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nIHwgJ3Njb3JlJwogICAgaWYgKGwxID09IDIyOCkgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRTY29yZVZhcigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0KDE1NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRm9yQmluZGluZyIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Gb3JCaW5kaW5nKCkKICB7CiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTY0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhbGxvd2luZycgfCAnYXMnIHwgJ2F0JyB8ICdpbicgfCAnc2NvcmUnCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTU4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhbGxvd2luZycgfCAnYXQnIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSA3MikgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgewogICAgICB0cnlfQWxsb3dpbmdFbXB0eSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTUwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnaW4nIHwgJ3Njb3JlJwogICAgaWYgKGwxID09IDgxKSAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICB7CiAgICAgIHRyeV9Qb3NpdGlvbmFsVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxMjIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luJyB8ICdzY29yZScKICAgIGlmIChsMSA9PSAyMjgpICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgewogICAgICB0cnlfRlRTY29yZVZhcigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0VCgxNTQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BbGxvd2luZ0VtcHR5KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQWxsb3dpbmdFbXB0eSIsIGUwKTsKICAgIHNoaWZ0KDcyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgbG9va2FoZWFkMVcoNDkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbXB0eScKICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBbGxvd2luZ0VtcHR5IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FsbG93aW5nRW1wdHkoKQogIHsKICAgIHNoaWZ0VCg3Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgbG9va2FoZWFkMVcoNDkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbXB0eScKICAgIHNoaWZ0VCgxMjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUG9zaXRpb25hbFZhcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBvc2l0aW9uYWxWYXIiLCBlMCk7CiAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUG9zaXRpb25hbFZhciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Qb3NpdGlvbmFsVmFyKCkKICB7CiAgICBzaGlmdFQoODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFNjb3JlVmFyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRTY29yZVZhciIsIGUwKTsKICAgIHNoaWZ0KDIyOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFNjb3JlVmFyIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUU2NvcmVWYXIoKQogIHsKICAgIHNoaWZ0VCgyMjgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0xldENsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkxldENsYXVzZSIsIGUwKTsKICAgIHNoaWZ0KDE3NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgIGxvb2thaGVhZDFXKDk2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnc2NvcmUnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9MZXRCaW5kaW5nKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVyg5Nik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdzY29yZScKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9MZXRCaW5kaW5nKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkxldENsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9MZXRDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCgxNzQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgIGxvb2thaGVhZDFXKDk2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnc2NvcmUnCiAgICB0cnlfTGV0QmluZGluZygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoOTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnc2NvcmUnCiAgICAgIHRyeV9MZXRCaW5kaW5nKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9MZXRCaW5kaW5nKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTGV0QmluZGluZyIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMTA1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nIHwgJ2FzJwogICAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9GVFNjb3JlVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJMZXRCaW5kaW5nIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0xldEJpbmRpbmcoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfVmFyTmFtZSgpOwogICAgICBsb29rYWhlYWQxVygxMDUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScgfCAnYXMnCiAgICAgIGlmIChsMSA9PSA3OSkgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgewogICAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9GVFNjb3JlVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1dpbmRvd0NsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIldpbmRvd0NsYXVzZSIsIGUwKTsKICAgIHNoaWZ0KDEzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgIGxvb2thaGVhZDFXKDEzNSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc2xpZGluZycgfCAndHVtYmxpbmcnCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHVtYmxpbmdXaW5kb3dDbGF1c2UoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NsaWRpbmdXaW5kb3dDbGF1c2UoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiV2luZG93Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1dpbmRvd0NsYXVzZSgpCiAgewogICAgc2hpZnRUKDEzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgbG9va2FoZWFkMVcoMTM1KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdzbGlkaW5nJyB8ICd0dW1ibGluZycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgdHJ5X1R1bWJsaW5nV2luZG93Q2xhdXNlKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X1NsaWRpbmdXaW5kb3dDbGF1c2UoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1R1bWJsaW5nV2luZG93Q2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHVtYmxpbmdXaW5kb3dDbGF1c2UiLCBlMCk7CiAgICBzaGlmdCgyNTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgIGxvb2thaGVhZDFXKDg1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2luZG93JwogICAgc2hpZnQoMjY5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTEwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnaW4nCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDUzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICBzaGlmdCgxNTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9XaW5kb3dTdGFydENvbmRpdGlvbigpOwogICAgaWYgKGwxID09IDEyNiAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgIHx8IGwxID09IDE5OCkgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9XaW5kb3dFbmRDb25kaXRpb24oKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHVtYmxpbmdXaW5kb3dDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHVtYmxpbmdXaW5kb3dDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCgyNTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgbG9va2FoZWFkMVcoODUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd3aW5kb3cnCiAgICBzaGlmdFQoMjY5KTsgICAgICAgICAgICAgICAgICAgIC8vICd3aW5kb3cnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTEwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnaW4nCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0VCgxNTQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICB0cnlfV2luZG93U3RhcnRDb25kaXRpb24oKTsKICAgIGlmIChsMSA9PSAxMjYgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICB8fCBsMSA9PSAxOTgpICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICB7CiAgICAgIHRyeV9XaW5kb3dFbmRDb25kaXRpb24oKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NsaWRpbmdXaW5kb3dDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTbGlkaW5nV2luZG93Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgIGxvb2thaGVhZDFXKDg1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2luZG93JwogICAgc2hpZnQoMjY5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTEwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnaW4nCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDUzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICBzaGlmdCgxNTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9XaW5kb3dTdGFydENvbmRpdGlvbigpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfV2luZG93RW5kQ29uZGl0aW9uKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNsaWRpbmdXaW5kb3dDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU2xpZGluZ1dpbmRvd0NsYXVzZSgpCiAgewogICAgc2hpZnRUKDIzNCk7ICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgIGxvb2thaGVhZDFXKDg1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2luZG93JwogICAgc2hpZnRUKDI2OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDExMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnIHwgJ2luJwogICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDUzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICBzaGlmdFQoMTU0KTsgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgdHJ5X1dpbmRvd1N0YXJ0Q29uZGl0aW9uKCk7CiAgICB0cnlfV2luZG93RW5kQ29uZGl0aW9uKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9XaW5kb3dTdGFydENvbmRpdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIldpbmRvd1N0YXJ0Q29uZGl0aW9uIiwgZTApOwogICAgc2hpZnQoMjM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBsb29rYWhlYWQxVygxNjMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1dpbmRvd1ZhcnMoKTsKICAgIGxvb2thaGVhZDFXKDgzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2hlbicKICAgIHNoaWZ0KDI2NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJXaW5kb3dTdGFydENvbmRpdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9XaW5kb3dTdGFydENvbmRpdGlvbigpCiAgewogICAgc2hpZnRUKDIzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBsb29rYWhlYWQxVygxNjMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIHRyeV9XaW5kb3dWYXJzKCk7CiAgICBsb29rYWhlYWQxVyg4Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3doZW4nCiAgICBzaGlmdFQoMjY1KTsgICAgICAgICAgICAgICAgICAgIC8vICd3aGVuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9XaW5kb3dFbmRDb25kaXRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJXaW5kb3dFbmRDb25kaXRpb24iLCBlMCk7CiAgICBpZiAobDEgPT0gMTk4KSAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgewogICAgICBzaGlmdCgxOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgIH0KICAgIGxvb2thaGVhZDFXKDUwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5kJwogICAgc2hpZnQoMTI2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgbG9va2FoZWFkMVcoMTYzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdhdCcgfCAnbmV4dCcgfCAncHJldmlvdXMnIHwgJ3doZW4nCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9XaW5kb3dWYXJzKCk7CiAgICBsb29rYWhlYWQxVyg4Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3doZW4nCiAgICBzaGlmdCgyNjUpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiV2luZG93RW5kQ29uZGl0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1dpbmRvd0VuZENvbmRpdGlvbigpCiAgewogICAgaWYgKGwxID09IDE5OCkgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgIHsKICAgICAgc2hpZnRUKDE5OCk7ICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICB9CiAgICBsb29rYWhlYWQxVyg1MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VuZCcKICAgIHNoaWZ0VCgxMjYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgIGxvb2thaGVhZDFXKDE2Myk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnYXQnIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8ICd3aGVuJwogICAgdHJ5X1dpbmRvd1ZhcnMoKTsKICAgIGxvb2thaGVhZDFXKDgzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2hlbicKICAgIHNoaWZ0VCgyNjUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3doZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1dpbmRvd1ZhcnMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJXaW5kb3dWYXJzIiwgZTApOwogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9DdXJyZW50SXRlbSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTU5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnbmV4dCcgfCAncHJldmlvdXMnIHwgJ3doZW4nCiAgICBpZiAobDEgPT0gODEpICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Qb3NpdGlvbmFsVmFyKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNTMpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25leHQnIHwgJ3ByZXZpb3VzJyB8ICd3aGVuJwogICAgaWYgKGwxID09IDIxNSkgICAgICAgICAgICAgICAgICAvLyAncHJldmlvdXMnCiAgICB7CiAgICAgIHNoaWZ0KDIxNSk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmV2aW91cycKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QcmV2aW91c0l0ZW0oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEyNyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbmV4dCcgfCAnd2hlbicKICAgIGlmIChsMSA9PSAxODcpICAgICAgICAgICAgICAgICAgLy8gJ25leHQnCiAgICB7CiAgICAgIHNoaWZ0KDE4Nyk7ICAgICAgICAgICAgICAgICAgIC8vICduZXh0JwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX05leHRJdGVtKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIldpbmRvd1ZhcnMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfV2luZG93VmFycygpCiAgewogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X0N1cnJlbnRJdGVtKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNTkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIGlmIChsMSA9PSA4MSkgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgewogICAgICB0cnlfUG9zaXRpb25hbFZhcigpOwogICAgfQogICAgbG9va2FoZWFkMVcoMTUzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICduZXh0JyB8ICdwcmV2aW91cycgfCAnd2hlbicKICAgIGlmIChsMSA9PSAyMTUpICAgICAgICAgICAgICAgICAgLy8gJ3ByZXZpb3VzJwogICAgewogICAgICBzaGlmdFQoMjE1KTsgICAgICAgICAgICAgICAgICAvLyAncHJldmlvdXMnCiAgICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9QcmV2aW91c0l0ZW0oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDEyNyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbmV4dCcgfCAnd2hlbicKICAgIGlmIChsMSA9PSAxODcpICAgICAgICAgICAgICAgICAgLy8gJ25leHQnCiAgICB7CiAgICAgIHNoaWZ0VCgxODcpOyAgICAgICAgICAgICAgICAgIC8vICduZXh0JwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfTmV4dEl0ZW0oKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0N1cnJlbnRJdGVtKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ3VycmVudEl0ZW0iLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ3VycmVudEl0ZW0iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ3VycmVudEl0ZW0oKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ByZXZpb3VzSXRlbSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByZXZpb3VzSXRlbSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQcmV2aW91c0l0ZW0iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUHJldmlvdXNJdGVtKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OZXh0SXRlbSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5leHRJdGVtIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5leHRJdGVtIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05leHRJdGVtKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db3VudENsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvdW50Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMTA1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvdW50Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvdW50Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMTA1KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9XaGVyZUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIldoZXJlQ2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjY2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJXaGVyZUNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9XaGVyZUNsYXVzZSgpCiAgewogICAgc2hpZnRUKDI2Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0dyb3VwQnlDbGF1c2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHcm91cEJ5Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMTQ4KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICBsb29rYWhlYWQxVygzNCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2J5JwogICAgc2hpZnQoODcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYnknCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfR3JvdXBpbmdTcGVjTGlzdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJHcm91cEJ5Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0dyb3VwQnlDbGF1c2UoKQogIHsKICAgIHNoaWZ0VCgxNDgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgbG9va2FoZWFkMVcoMzQpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgIHNoaWZ0VCg4Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9Hcm91cGluZ1NwZWNMaXN0KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Hcm91cGluZ1NwZWNMaXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiR3JvdXBpbmdTcGVjTGlzdCIsIGUwKTsKICAgIHBhcnNlX0dyb3VwaW5nU3BlYygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMTc2KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfCAnb3JkZXInIHwgJ3JldHVybicgfAogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Hcm91cGluZ1NwZWMoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiR3JvdXBpbmdTcGVjTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Hcm91cGluZ1NwZWNMaXN0KCkKICB7CiAgICB0cnlfR3JvdXBpbmdTcGVjKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxNzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfCAncmV0dXJuJyB8CiAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfR3JvdXBpbmdTcGVjKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Hcm91cGluZ1NwZWMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHcm91cGluZ1NwZWMiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzMTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMlcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMzEwMyAgICAgICAgICAgICAgICAgIC8vICckJyBFUU5hbWVeVG9rZW4KICAgICB8fCBsayA9PSAzNTg3MSAgICAgICAgICAgICAgICAgLy8gJyQnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjg5NSAgICAgICAgICAgICAgICAgLy8gJyQnICdhbGxvd2luZycKICAgICB8fCBsayA9PSAzNzQwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdhbmNlc3RvcicKICAgICB8fCBsayA9PSAzNzkxOSAgICAgICAgICAgICAgICAgLy8gJyQnICdhbmNlc3Rvci1vci1zZWxmJwogICAgIHx8IGxrID09IDM4NDMxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FuZCcKICAgICB8fCBsayA9PSAzOTQ1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdhcHBlbmQnCiAgICAgfHwgbGsgPT0gMzk5NjcgICAgICAgICAgICAgICAgIC8vICckJyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDA0NzkgICAgICAgICAgICAgICAgIC8vICckJyAnYXMnCiAgICAgfHwgbGsgPT0gNDA5OTEgICAgICAgICAgICAgICAgIC8vICckJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNTAzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2F0JwogICAgIHx8IGxrID09IDQyMDE1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2F0dHJpYnV0ZScKICAgICB8fCBsayA9PSA0MjUyNyAgICAgICAgICAgICAgICAgLy8gJyQnICdiYXNlLXVyaScKICAgICB8fCBsayA9PSA0MzAzOSAgICAgICAgICAgICAgICAgLy8gJyQnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM1NTEgICAgICAgICAgICAgICAgIC8vICckJyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDQwNjMgICAgICAgICAgICAgICAgIC8vICckJyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDUwODcgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTU5OSAgICAgICAgICAgICAgICAgLy8gJyQnICdjYXN0JwogICAgIHx8IGxrID09IDQ2MTExICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ2NjIzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NhdGNoJwogICAgIHx8IGxrID09IDQ3NjQ3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NoaWxkJwogICAgIHx8IGxrID09IDQ4MTU5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0OTE4MyAgICAgICAgICAgICAgICAgLy8gJyQnICdjb21tZW50JwogICAgIHx8IGxrID09IDQ5Njk1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbnN0cmFpbnQnCiAgICAgfHwgbGsgPT0gNTAyMDcgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RydWN0aW9uJwogICAgIHx8IGxrID09IDUxNzQzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbnRleHQnCiAgICAgfHwgbGsgPT0gNTIyNTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTI3NjcgICAgICAgICAgICAgICAgIC8vICckJyAnY29weScKICAgICB8fCBsayA9PSA1MzI3OSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgfHwgbGsgPT0gNTM3OTEgICAgICAgICAgICAgICAgIC8vICckJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQzMDMgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTUzMjcgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjbGFyZScKICAgICB8fCBsayA9PSA1NTgzOSAgICAgICAgICAgICAgICAgLy8gJyQnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2MzUxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RlbGV0ZScKICAgICB8fCBsayA9PSA1Njg2MyAgICAgICAgICAgICAgICAgLy8gJyQnICdkZXNjZW5kYW50JwogICAgIHx8IGxrID09IDU3Mzc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICB8fCBsayA9PSA1Nzg4NyAgICAgICAgICAgICAgICAgLy8gJyQnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDYwNDQ3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RpdicKICAgICB8fCBsayA9PSA2MDk1OSAgICAgICAgICAgICAgICAgLy8gJyQnICdkb2N1bWVudCcKICAgICB8fCBsayA9PSA2MTQ3MSAgICAgICAgICAgICAgICAgLy8gJyQnICdkb2N1bWVudC1ub2RlJwogICAgIHx8IGxrID09IDYxOTgzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VsZW1lbnQnCiAgICAgfHwgbGsgPT0gNjI0OTUgICAgICAgICAgICAgICAgIC8vICckJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzAwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzUxOSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbXB0eS1zZXF1ZW5jZScKICAgICB8fCBsayA9PSA2NDAzMSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbmNvZGluZycKICAgICB8fCBsayA9PSA2NDU0MyAgICAgICAgICAgICAgICAgLy8gJyQnICdlbmQnCiAgICAgfHwgbGsgPT0gNjU1NjcgICAgICAgICAgICAgICAgIC8vICckJyAnZXEnCiAgICAgfHwgbGsgPT0gNjYwNzkgICAgICAgICAgICAgICAgIC8vICckJyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjcxMDMgICAgICAgICAgICAgICAgIC8vICckJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3NjE1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2V4aXQnCiAgICAgfHwgbGsgPT0gNjgxMjcgICAgICAgICAgICAgICAgIC8vICckJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjg2MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjkxNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nJwogICAgIHx8IGxrID09IDY5NjYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgIHx8IGxrID09IDcwMTc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ZvcicKICAgICB8fCBsayA9PSA3MjIyMyAgICAgICAgICAgICAgICAgLy8gJyQnICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzQyNzEgICAgICAgICAgICAgICAgIC8vICckJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQ3ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU4MDcgICAgICAgICAgICAgICAgIC8vICckJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY4MzEgICAgICAgICAgICAgICAgIC8vICckJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzczNDMgICAgICAgICAgICAgICAgIC8vICckJyAnaWRpdicKICAgICB8fCBsayA9PSA3Nzg1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdpZicKICAgICB8fCBsayA9PSA3ODM2NyAgICAgICAgICAgICAgICAgLy8gJyQnICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gNzg4NzkgICAgICAgICAgICAgICAgIC8vICckJyAnaW4nCiAgICAgfHwgbGsgPT0gNzkzOTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODE0MzkgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgxOTUxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgyNDYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4Mjk3NSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODM0ODcgICAgICAgICAgICAgICAgIC8vICckJyAnaW50bycKICAgICB8fCBsayA9PSA4Mzk5OSAgICAgICAgICAgICAgICAgLy8gJyQnICdpcycKICAgICB8fCBsayA9PSA4NDUxMSAgICAgICAgICAgICAgICAgLy8gJyQnICdpdGVtJwogICAgIHx8IGxrID09IDg1MDIzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2pzb24nCiAgICAgfHwgbGsgPT0gODU1MzUgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MDcxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xhc3QnCiAgICAgfHwgbGsgPT0gODc1ODMgICAgICAgICAgICAgICAgIC8vICckJyAnbGF4JwogICAgIHx8IGxrID09IDg4MDk1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xlJwogICAgIHx8IGxrID09IDg5MTE5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xldCcKICAgICB8fCBsayA9PSA5MDE0MyAgICAgICAgICAgICAgICAgLy8gJyQnICdsb29wJwogICAgIHx8IGxrID09IDkxMTY3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2x0JwogICAgIHx8IGxrID09IDkyMTkxICAgICAgICAgICAgICAgICAvLyAnJCcgJ21vZCcKICAgICB8fCBsayA9PSA5MjcwMyAgICAgICAgICAgICAgICAgLy8gJyQnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTMyMTUgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kdWxlJwogICAgIHx8IGxrID09IDk0MjM5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ25hbWVzcGFjZScKICAgICB8fCBsayA9PSA5NDc1MSAgICAgICAgICAgICAgICAgLy8gJyQnICduYW1lc3BhY2Utbm9kZScKICAgICB8fCBsayA9PSA5NTI2MyAgICAgICAgICAgICAgICAgLy8gJyQnICduZScKICAgICB8fCBsayA9PSA5NzgyMyAgICAgICAgICAgICAgICAgLy8gJyQnICdub2RlJwogICAgIHx8IGxrID09IDk4MzM1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ25vZGVzJwogICAgIHx8IGxrID09IDk5MzU5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ29iamVjdCcKICAgICB8fCBsayA9PSAxMDE0MDcgICAgICAgICAgICAgICAgLy8gJyQnICdvbmx5JwogICAgIHx8IGxrID09IDEwMTkxOSAgICAgICAgICAgICAgICAvLyAnJCcgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDI0MzEgICAgICAgICAgICAgICAgLy8gJyQnICdvcicKICAgICB8fCBsayA9PSAxMDI5NDMgICAgICAgICAgICAgICAgLy8gJyQnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDM0NTUgICAgICAgICAgICAgICAgLy8gJyQnICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwMzk2NyAgICAgICAgICAgICAgICAvLyAnJCcgJ29yZGVyaW5nJwogICAgIHx8IGxrID09IDEwNTUwMyAgICAgICAgICAgICAgICAvLyAnJCcgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMDg1NzUgICAgICAgICAgICAgICAgLy8gJyQnICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTA5MDg3ICAgICAgICAgICAgICAgIC8vICckJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEwNjIzICAgICAgICAgICAgICAgIC8vICckJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTE2NDcgICAgICAgICAgICAgICAgLy8gJyQnICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTEyMTU5ICAgICAgICAgICAgICAgIC8vICckJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTI2NzEgICAgICAgICAgICAgICAgLy8gJyQnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTEzMTgzICAgICAgICAgICAgICAgIC8vICckJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExMzY5NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTQ3MTkgICAgICAgICAgICAgICAgLy8gJyQnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE1MjMxICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNTc0MyAgICAgICAgICAgICAgICAvLyAnJCcgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE2MjU1ICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2NzY3ICAgICAgICAgICAgICAgIC8vICckJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE3Mjc5ICAgICAgICAgICAgICAgIC8vICckJyAnc2VsZicKICAgICB8fCBsayA9PSAxMTk4MzkgICAgICAgICAgICAgICAgLy8gJyQnICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMDM1MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIwODYzICAgICAgICAgICAgICAgIC8vICckJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMTM3NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyMjkxMSAgICAgICAgICAgICAgICAvLyAnJCcgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjM5MzUgICAgICAgICAgICAgICAgLy8gJyQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI0NDQ3ICAgICAgICAgICAgICAgIC8vICckJyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNDk1OSAgICAgICAgICAgICAgICAvLyAnJCcgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI3MDA3ICAgICAgICAgICAgICAgIC8vICckJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3NTE5ICAgICAgICAgICAgICAgIC8vICckJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI4MDMxICAgICAgICAgICAgICAgIC8vICckJyAndHJ5JwogICAgIHx8IGxrID09IDEyODU0MyAgICAgICAgICAgICAgICAvLyAnJCcgJ3R1bWJsaW5nJwogICAgIHx8IGxrID09IDEyOTA1NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTI5NTY3ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMzAwNzkgICAgICAgICAgICAgICAgLy8gJyQnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzExMDMgICAgICAgICAgICAgICAgLy8gJyQnICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTMxNjE1ICAgICAgICAgICAgICAgIC8vICckJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMzMTUxICAgICAgICAgICAgICAgIC8vICckJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzNjYzICAgICAgICAgICAgICAgIC8vICckJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM0MTc1ICAgICAgICAgICAgICAgIC8vICckJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0Njg3ICAgICAgICAgICAgICAgIC8vICckJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzYyMjMgICAgICAgICAgICAgICAgLy8gJyQnICd3aGVyZScKICAgICB8fCBsayA9PSAxMzY3MzUgICAgICAgICAgICAgICAgLy8gJyQnICd3aGlsZScKICAgICB8fCBsayA9PSAxMzgyNzEgICAgICAgICAgICAgICAgLy8gJyQnICd3aXRoJwogICAgIHx8IGxrID09IDE0MDMxOSkgICAgICAgICAgICAgICAvLyAnJCcgJ3hxdWVyeScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgyLCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHRyeV9Hcm91cGluZ1ZhcmlhYmxlKCk7CiAgICAgICAgICBsb29rYWhlYWQxVygxODIpOyAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzo9JyB8ICdhcycgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfAogICAgICAgICAgaWYgKGwxID09IDUyICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgICAgfHwgbDEgPT0gNzkpICAgICAgICAgICAgIC8vICdhcycKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgLy8gJ2FzJwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgICAgICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGwxID09IDk0KSAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoOTQpOyAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICAgICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgICAgICAgfQogICAgICAgICAgbGsgPSAtMTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgyLCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAtMToKICAgICAgcGFyc2VfR3JvdXBpbmdWYXJpYWJsZSgpOwogICAgICBsb29rYWhlYWQxVygxODIpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc6PScgfCAnYXMnIHwgJ2NvbGxhdGlvbicgfCAnY291bnQnIHwgJ2ZvcicgfCAnZ3JvdXAnIHwKICAgICAgaWYgKGwxID09IDUyICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgfHwgbDEgPT0gNzkpICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgIHsKICAgICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgICAgIH0KICAgICAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nCiAgICAgICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgICAgfQogICAgICBpZiAobDEgPT0gOTQpICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICB7CiAgICAgICAgc2hpZnQoOTQpOyAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgICAgbG9va2FoZWFkMVcoMTUpOyAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0KDcpOyAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkdyb3VwaW5nU3BlYyIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Hcm91cGluZ1NwZWMoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQyVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAzMTAzICAgICAgICAgICAgICAgICAgLy8gJyQnIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDM1ODcxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FmdGVyJwogICAgIHx8IGxrID09IDM2ODk1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM3NDA3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FuY2VzdG9yJwogICAgIHx8IGxrID09IDM3OTE5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzg0MzEgICAgICAgICAgICAgICAgIC8vICckJyAnYW5kJwogICAgIHx8IGxrID09IDM5NDU1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2FwcGVuZCcKICAgICB8fCBsayA9PSAzOTk2NyAgICAgICAgICAgICAgICAgLy8gJyQnICdhcnJheScKICAgICB8fCBsayA9PSA0MDQ3OSAgICAgICAgICAgICAgICAgLy8gJyQnICdhcycKICAgICB8fCBsayA9PSA0MDk5MSAgICAgICAgICAgICAgICAgLy8gJyQnICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE1MDMgICAgICAgICAgICAgICAgIC8vICckJyAnYXQnCiAgICAgfHwgbGsgPT0gNDIwMTUgICAgICAgICAgICAgICAgIC8vICckJyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQyNTI3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Jhc2UtdXJpJwogICAgIHx8IGxrID09IDQzMDM5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzU1MSAgICAgICAgICAgICAgICAgLy8gJyQnICdib3VuZGFyeS1zcGFjZScKICAgICB8fCBsayA9PSA0NDA2MyAgICAgICAgICAgICAgICAgLy8gJyQnICdicmVhaycKICAgICB8fCBsayA9PSA0NTA4NyAgICAgICAgICAgICAgICAgLy8gJyQnICdjYXNlJwogICAgIHx8IGxrID09IDQ1NTk5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYxMTEgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY2MjMgICAgICAgICAgICAgICAgIC8vICckJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDc2NDcgICAgICAgICAgICAgICAgIC8vICckJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDgxNTkgICAgICAgICAgICAgICAgIC8vICckJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ5MTgzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNDk2OTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA1MDIwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTE3NDMgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MjI1NSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb250aW51ZScKICAgICB8fCBsayA9PSA1Mjc2NyAgICAgICAgICAgICAgICAgLy8gJyQnICdjb3B5JwogICAgIHx8IGxrID09IDUzMjc5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1Mzc5MSAgICAgICAgICAgICAgICAgLy8gJyQnICdjb3VudCcKICAgICB8fCBsayA9PSA1NDMwMyAgICAgICAgICAgICAgICAgLy8gJyQnICdkZWNpbWFsLWZvcm1hdCcKICAgICB8fCBsayA9PSA1NTMyNyAgICAgICAgICAgICAgICAgLy8gJyQnICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU1ODM5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTYzNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU2ODYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTczNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU3ODg3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjA0NDcgICAgICAgICAgICAgICAgIC8vICckJyAnZGl2JwogICAgIHx8IGxrID09IDYwOTU5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RvY3VtZW50JwogICAgIHx8IGxrID09IDYxNDcxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjE5ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2MjQ5NSAgICAgICAgICAgICAgICAgLy8gJyQnICdlbHNlJwogICAgIHx8IGxrID09IDYzMDA3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNTE5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VtcHR5LXNlcXVlbmNlJwogICAgIHx8IGxrID09IDY0MDMxICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VuY29kaW5nJwogICAgIHx8IGxrID09IDY0NTQzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2VuZCcKICAgICB8fCBsayA9PSA2NTU2NyAgICAgICAgICAgICAgICAgLy8gJyQnICdlcScKICAgICB8fCBsayA9PSA2NjA3OSAgICAgICAgICAgICAgICAgLy8gJyQnICdldmVyeScKICAgICB8fCBsayA9PSA2NzEwMyAgICAgICAgICAgICAgICAgLy8gJyQnICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc2MTUgICAgICAgICAgICAgICAgIC8vICckJyAnZXhpdCcKICAgICB8fCBsayA9PSA2ODEyNyAgICAgICAgICAgICAgICAgLy8gJyQnICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2ODYzOSAgICAgICAgICAgICAgICAgLy8gJyQnICdmaXJzdCcKICAgICB8fCBsayA9PSA2OTE1MSAgICAgICAgICAgICAgICAgLy8gJyQnICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNjk2NjMgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzAxNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZm9yJwogICAgIHx8IGxrID09IDcyMjIzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2Z0LW9wdGlvbicKICAgICB8fCBsayA9PSA3NDI3MSAgICAgICAgICAgICAgICAgLy8gJyQnICdmdW5jdGlvbicKICAgICB8fCBsayA9PSA3NDc4MyAgICAgICAgICAgICAgICAgLy8gJyQnICdnZScKICAgICB8fCBsayA9PSA3NTgwNyAgICAgICAgICAgICAgICAgLy8gJyQnICdncm91cCcKICAgICB8fCBsayA9PSA3NjgzMSAgICAgICAgICAgICAgICAgLy8gJyQnICdndCcKICAgICB8fCBsayA9PSA3NzM0MyAgICAgICAgICAgICAgICAgLy8gJyQnICdpZGl2JwogICAgIHx8IGxrID09IDc3ODU1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2lmJwogICAgIHx8IGxrID09IDc4MzY3ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ltcG9ydCcKICAgICB8fCBsayA9PSA3ODg3OSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbicKICAgICB8fCBsayA9PSA3OTM5MSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbmRleCcKICAgICB8fCBsayA9PSA4MTQzOSAgICAgICAgICAgICAgICAgLy8gJyQnICdpbnNlcnQnCiAgICAgfHwgbGsgPT0gODE5NTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODI0NjMgICAgICAgICAgICAgICAgIC8vICckJyAnaW50ZWdyaXR5JwogICAgIHx8IGxrID09IDgyOTc1ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4MzQ4NyAgICAgICAgICAgICAgICAgLy8gJyQnICdpbnRvJwogICAgIHx8IGxrID09IDgzOTk5ICAgICAgICAgICAgICAgICAvLyAnJCcgJ2lzJwogICAgIHx8IGxrID09IDg0NTExICAgICAgICAgICAgICAgICAvLyAnJCcgJ2l0ZW0nCiAgICAgfHwgbGsgPT0gODUwMjMgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbicKICAgICB8fCBsayA9PSA4NTUzNSAgICAgICAgICAgICAgICAgLy8gJyQnICdqc29uLWl0ZW0nCiAgICAgfHwgbGsgPT0gODcwNzEgICAgICAgICAgICAgICAgIC8vICckJyAnbGFzdCcKICAgICB8fCBsayA9PSA4NzU4MyAgICAgICAgICAgICAgICAgLy8gJyQnICdsYXgnCiAgICAgfHwgbGsgPT0gODgwOTUgICAgICAgICAgICAgICAgIC8vICckJyAnbGUnCiAgICAgfHwgbGsgPT0gODkxMTkgICAgICAgICAgICAgICAgIC8vICckJyAnbGV0JwogICAgIHx8IGxrID09IDkwMTQzICAgICAgICAgICAgICAgICAvLyAnJCcgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTExNjcgICAgICAgICAgICAgICAgIC8vICckJyAnbHQnCiAgICAgfHwgbGsgPT0gOTIxOTEgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kJwogICAgIHx8IGxrID09IDkyNzAzICAgICAgICAgICAgICAgICAvLyAnJCcgJ21vZGlmeScKICAgICB8fCBsayA9PSA5MzIxNSAgICAgICAgICAgICAgICAgLy8gJyQnICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTQyMzkgICAgICAgICAgICAgICAgIC8vICckJyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk0NzUxICAgICAgICAgICAgICAgICAvLyAnJCcgJ25hbWVzcGFjZS1ub2RlJwogICAgIHx8IGxrID09IDk1MjYzICAgICAgICAgICAgICAgICAvLyAnJCcgJ25lJwogICAgIHx8IGxrID09IDk3ODIzICAgICAgICAgICAgICAgICAvLyAnJCcgJ25vZGUnCiAgICAgfHwgbGsgPT0gOTgzMzUgICAgICAgICAgICAgICAgIC8vICckJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTkzNTkgICAgICAgICAgICAgICAgIC8vICckJyAnb2JqZWN0JwogICAgIHx8IGxrID09IDEwMTQwNyAgICAgICAgICAgICAgICAvLyAnJCcgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAxOTE5ICAgICAgICAgICAgICAgIC8vICckJyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwMjQzMSAgICAgICAgICAgICAgICAvLyAnJCcgJ29yJwogICAgIHx8IGxrID09IDEwMjk0MyAgICAgICAgICAgICAgICAvLyAnJCcgJ29yZGVyJwogICAgIHx8IGxrID09IDEwMzQ1NSAgICAgICAgICAgICAgICAvLyAnJCcgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTAzOTY3ICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA1NTAzICAgICAgICAgICAgICAgIC8vICckJyAncGFyZW50JwogICAgIHx8IGxrID09IDEwODU3NSAgICAgICAgICAgICAgICAvLyAnJCcgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMDkwODcgICAgICAgICAgICAgICAgLy8gJyQnICdwcmVjZWRpbmctc2libGluZycKICAgICB8fCBsayA9PSAxMTA2MjMgICAgICAgICAgICAgICAgLy8gJyQnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMTY0NyAgICAgICAgICAgICAgICAvLyAnJCcgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTIxNTkgICAgICAgICAgICAgICAgLy8gJyQnICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExMjY3MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTMxODMgICAgICAgICAgICAgICAgLy8gJyQnICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTEzNjk1ICAgICAgICAgICAgICAgIC8vICckJyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExNDcxOSAgICAgICAgICAgICAgICAvLyAnJCcgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTUyMzEgICAgICAgICAgICAgICAgLy8gJyQnICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE1NzQzICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTYyNTUgICAgICAgICAgICAgICAgLy8gJyQnICdzY2hlbWEtZWxlbWVudCcKICAgICB8fCBsayA9PSAxMTY3NjcgICAgICAgICAgICAgICAgLy8gJyQnICdzY29yZScKICAgICB8fCBsayA9PSAxMTcyNzkgICAgICAgICAgICAgICAgLy8gJyQnICdzZWxmJwogICAgIHx8IGxrID09IDExOTgzOSAgICAgICAgICAgICAgICAvLyAnJCcgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIwMzUxICAgICAgICAgICAgICAgIC8vICckJyAnc29tZScKICAgICB8fCBsayA9PSAxMjA4NjMgICAgICAgICAgICAgICAgLy8gJyQnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIxMzc1ICAgICAgICAgICAgICAgIC8vICckJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIyOTExICAgICAgICAgICAgICAgIC8vICckJyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyMzkzNSAgICAgICAgICAgICAgICAvLyAnJCcgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjQ0NDcgICAgICAgICAgICAgICAgLy8gJyQnICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI0OTU5ICAgICAgICAgICAgICAgIC8vICckJyAndGV4dCcKICAgICB8fCBsayA9PSAxMjcwMDcgICAgICAgICAgICAgICAgLy8gJyQnICd0bycKICAgICB8fCBsayA9PSAxMjc1MTkgICAgICAgICAgICAgICAgLy8gJyQnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMjgwMzEgICAgICAgICAgICAgICAgLy8gJyQnICd0cnknCiAgICAgfHwgbGsgPT0gMTI4NTQzICAgICAgICAgICAgICAgIC8vICckJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI5MDU1ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZScKICAgICB8fCBsayA9PSAxMjk1NjcgICAgICAgICAgICAgICAgLy8gJyQnICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEzMDA3OSAgICAgICAgICAgICAgICAvLyAnJCcgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMTEwMyAgICAgICAgICAgICAgICAvLyAnJCcgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzE2MTUgICAgICAgICAgICAgICAgLy8gJyQnICd1cGRhdGluZycKICAgICB8fCBsayA9PSAxMzMxNTEgICAgICAgICAgICAgICAgLy8gJyQnICd2YWxpZGF0ZScKICAgICB8fCBsayA9PSAxMzM2NjMgICAgICAgICAgICAgICAgLy8gJyQnICd2YWx1ZScKICAgICB8fCBsayA9PSAxMzQxNzUgICAgICAgICAgICAgICAgLy8gJyQnICd2YXJpYWJsZScKICAgICB8fCBsayA9PSAxMzQ2ODcgICAgICAgICAgICAgICAgLy8gJyQnICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzNjIyMyAgICAgICAgICAgICAgICAvLyAnJCcgJ3doZXJlJwogICAgIHx8IGxrID09IDEzNjczNSAgICAgICAgICAgICAgICAvLyAnJCcgJ3doaWxlJwogICAgIHx8IGxrID09IDEzODI3MSAgICAgICAgICAgICAgICAvLyAnJCcgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQwMzE5KSAgICAgICAgICAgICAgIC8vICckJyAneHF1ZXJ5JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDIsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0dyb3VwaW5nVmFyaWFibGUoKTsKICAgICAgICAgIGxvb2thaGVhZDFXKDE4Mik7ICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJ2FzJyB8ICdjb2xsYXRpb24nIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8CiAgICAgICAgICBpZiAobDEgPT0gNTIgICAgICAgICAgICAgIC8vICc6PScKICAgICAgICAgICB8fCBsMSA9PSA3OSkgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgICAgewogICAgICAgICAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAvLyAnYXMnCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnlfVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOj0nCiAgICAgICAgICAgIHNoaWZ0VCg1Mik7ICAgICAgICAgICAgIC8vICc6PScKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobDEgPT0gOTQpICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIHNoaWZ0VCg5NCk7ICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgICAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgICAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgICAgICB9CiAgICAgICAgICBtZW1vaXplKDIsIGUwQSwgLTEpOwogICAgICAgICAgbGsgPSAtMzsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMiwgZTBBLCAtMik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAtMToKICAgICAgdHJ5X0dyb3VwaW5nVmFyaWFibGUoKTsKICAgICAgbG9va2FoZWFkMVcoMTgyKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJ2FzJyB8ICdjb2xsYXRpb24nIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8CiAgICAgIGlmIChsMSA9PSA1MiAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgIHx8IGwxID09IDc5KSAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICB7CiAgICAgICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgICB7CiAgICAgICAgICB0cnlfVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGxvb2thaGVhZDFXKDI3KTsgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScKICAgICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICB9CiAgICAgIGlmIChsMSA9PSA5NCkgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHsKICAgICAgICBzaGlmdFQoOTQpOyAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgLTM6CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0dyb3VwaW5nVmFyaWFibGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHcm91cGluZ1ZhcmlhYmxlIiwgZTApOwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJHcm91cGluZ1ZhcmlhYmxlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0dyb3VwaW5nVmFyaWFibGUoKQogIHsKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PcmRlckJ5Q2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT3JkZXJCeUNsYXVzZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMjAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBsb29rYWhlYWQxVygzNCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgICAgc2hpZnQoODcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIzNik7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGxvb2thaGVhZDFXKDY3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyJwogICAgICBzaGlmdCgyMDEpOyAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGxvb2thaGVhZDFXKDM0KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2J5JwogICAgICBzaGlmdCg4Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnYnknCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfT3JkZXJTcGVjTGlzdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlckJ5Q2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyQnlDbGF1c2UoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnRUKDIwMSk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBsb29rYWhlYWQxVygzNCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdieScKICAgICAgc2hpZnRUKDg3KTsgICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyMzYpOyAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGxvb2thaGVhZDFXKDY3KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29yZGVyJwogICAgICBzaGlmdFQoMjAxKTsgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGxvb2thaGVhZDFXKDM0KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2J5JwogICAgICBzaGlmdFQoODcpOyAgICAgICAgICAgICAgICAgICAvLyAnYnknCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X09yZGVyU3BlY0xpc3QoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX09yZGVyU3BlY0xpc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJPcmRlclNwZWNMaXN0IiwgZTApOwogICAgcGFyc2VfT3JkZXJTcGVjKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxNzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfCAncmV0dXJuJyB8CiAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX09yZGVyU3BlYygpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlclNwZWNMaXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyU3BlY0xpc3QoKQogIHsKICAgIHRyeV9PcmRlclNwZWMoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE3Nik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8ICdsZXQnIHwgJ29yZGVyJyB8ICdyZXR1cm4nIHwKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9PcmRlclNwZWMoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX09yZGVyU3BlYygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9yZGVyU3BlYyIsIGUwKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX09yZGVyTW9kaWZpZXIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT3JkZXJTcGVjIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyU3BlYygpCiAgewogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHRyeV9PcmRlck1vZGlmaWVyKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PcmRlck1vZGlmaWVyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT3JkZXJNb2RpZmllciIsIGUwKTsKICAgIGlmIChsMSA9PSA4MCAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICB8fCBsMSA9PSAxMTMpICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBzaGlmdCg4MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxMTMpOyAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDE3OSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZW1wdHknIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfAogICAgaWYgKGwxID09IDEyMykgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICB7CiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgbG9va2FoZWFkMVcoMTIxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZ3JlYXRlc3QnIHwgJ2xlYXN0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdncmVhdGVzdCcKICAgICAgICBzaGlmdCgxNDcpOyAgICAgICAgICAgICAgICAgLy8gJ2dyZWF0ZXN0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDE3Myk7ICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDE3Nyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfAogICAgaWYgKGwxID09IDk0KSAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgewogICAgICBzaGlmdCg5NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnQoNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlck1vZGlmaWVyIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yZGVyTW9kaWZpZXIoKQogIHsKICAgIGlmIChsMSA9PSA4MCAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICB8fCBsMSA9PSAxMTMpICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBzaGlmdFQoODApOyAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMTEzKTsgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDE3OSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZW1wdHknIHwgJ2ZvcicgfCAnZ3JvdXAnIHwgJ2xldCcgfAogICAgaWYgKGwxID09IDEyMykgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICB7CiAgICAgIHNoaWZ0VCgxMjMpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgbG9va2FoZWFkMVcoMTIxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZ3JlYXRlc3QnIHwgJ2xlYXN0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdncmVhdGVzdCcKICAgICAgICBzaGlmdFQoMTQ3KTsgICAgICAgICAgICAgICAgLy8gJ2dyZWF0ZXN0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgxNzMpOyAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDE3Nyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnY29sbGF0aW9uJyB8ICdjb3VudCcgfCAnZm9yJyB8ICdncm91cCcgfCAnbGV0JyB8ICdvcmRlcicgfAogICAgaWYgKGwxID09IDk0KSAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgewogICAgICBzaGlmdFQoOTQpOyAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV0dXJuQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmV0dXJuQ2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUmV0dXJuQ2xhdXNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1JldHVybkNsYXVzZSgpCiAgewogICAgc2hpZnRUKDIyMCk7ICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9RdWFudGlmaWVkRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlF1YW50aWZpZWRFeHByIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0KDIzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIH0KICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1F1YW50aWZpZWRWYXJEZWNsKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1F1YW50aWZpZWRWYXJEZWNsKCk7CiAgICB9CiAgICBzaGlmdCgyMjQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJRdWFudGlmaWVkRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9RdWFudGlmaWVkRXhwcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0VCgyMzUpOyAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxMjkpOyAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIH0KICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHRyeV9RdWFudGlmaWVkVmFyRGVjbCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgdHJ5X1F1YW50aWZpZWRWYXJEZWNsKCk7CiAgICB9CiAgICBzaGlmdFQoMjI0KTsgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1F1YW50aWZpZWRWYXJEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUXVhbnRpZmllZFZhckRlY2wiLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxMTApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJyB8ICdpbicKICAgIGlmIChsMSA9PSA3OSkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1R5cGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbicKICAgIHNoaWZ0KDE1NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUXVhbnRpZmllZFZhckRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUXVhbnRpZmllZFZhckRlY2woKQogIHsKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxMTApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJyB8ICdpbicKICAgIGlmIChsMSA9PSA3OSkgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgewogICAgICB0cnlfVHlwZURlY2xhcmF0aW9uKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg1Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luJwogICAgc2hpZnRUKDE1NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N3aXRjaEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTd2l0Y2hFeHByIiwgZTApOwogICAgc2hpZnQoMjQzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Td2l0Y2hDYXNlQ2xhdXNlKCk7CiAgICAgIGlmIChsMSAhPSA4OCkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN3aXRjaEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3dpdGNoRXhwcigpCiAgewogICAgc2hpZnRUKDI0Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHRyeV9Td2l0Y2hDYXNlQ2xhdXNlKCk7CiAgICAgIGlmIChsMSAhPSA4OCkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0VCgyMjApOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3dpdGNoQ2FzZUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN3aXRjaENhc2VDbGF1c2UiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU3dpdGNoQ2FzZU9wZXJhbmQoKTsKICAgICAgaWYgKGwxICE9IDg4KSAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3dpdGNoQ2FzZUNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Td2l0Y2hDYXNlQ2xhdXNlKCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBzaGlmdFQoODgpOyAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9Td2l0Y2hDYXNlT3BlcmFuZCgpOwogICAgICBpZiAobDEgIT0gODgpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N3aXRjaENhc2VPcGVyYW5kKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3dpdGNoQ2FzZU9wZXJhbmQiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN3aXRjaENhc2VPcGVyYW5kIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N3aXRjaENhc2VPcGVyYW5kKCkKICB7CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHlwZXN3aXRjaEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUeXBlc3dpdGNoRXhwciIsIGUwKTsKICAgIHNoaWZ0KDI1Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygzNSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Nhc2VDbGF1c2UoKTsKICAgICAgaWYgKGwxICE9IDg4KSAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGxvb2thaGVhZDFXKDk1KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAncmV0dXJuJwogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR5cGVzd2l0Y2hFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1R5cGVzd2l0Y2hFeHByKCkKICB7CiAgICBzaGlmdFQoMjUzKTsgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHRyeV9DYXNlQ2xhdXNlKCk7CiAgICAgIGlmIChsMSAhPSA4OCkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg5NSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3JldHVybicKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9WYXJOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0VCgyMjApOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2FzZUNsYXVzZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNhc2VDbGF1c2UiLCBlMCk7CiAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgbG9va2FoZWFkMVcoMjYxKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyQnIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVmFyTmFtZSgpOwogICAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgfQogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TZXF1ZW5jZVR5cGVVbmlvbigpOwogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ2FzZUNsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9DYXNlQ2xhdXNlKCkKICB7CiAgICBzaGlmdFQoODgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgbG9va2FoZWFkMVcoMjYxKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyQnIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9WYXJOYW1lKCk7CiAgICAgIGxvb2thaGVhZDFXKDMwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdFQoNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9TZXF1ZW5jZVR5cGVVbmlvbigpOwogICAgc2hpZnRUKDIyMCk7ICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TZXF1ZW5jZVR5cGVVbmlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlNlcXVlbmNlVHlwZVVuaW9uIiwgZTApOwogICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMzQpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nIHwgJ3wnCiAgICAgIGlmIChsMSAhPSAyNzkpICAgICAgICAgICAgICAgIC8vICd8JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoMjc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TZXF1ZW5jZVR5cGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2VxdWVuY2VUeXBlVW5pb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU2VxdWVuY2VUeXBlVW5pb24oKQogIHsKICAgIHRyeV9TZXF1ZW5jZVR5cGUoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDEzNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicgfCAnfCcKICAgICAgaWYgKGwxICE9IDI3OSkgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMjc5KTsgICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JZkV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJZkV4cHIiLCBlMCk7CiAgICBzaGlmdCgxNTIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDc3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlbicKICAgIHNoaWZ0KDI0NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgc2hpZnQoMTIyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklmRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JZkV4cHIoKQogIHsKICAgIHNoaWZ0VCgxNTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDc3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlbicKICAgIHNoaWZ0VCgyNDUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZW4nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0VCgxMjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RyeUNhdGNoRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyeUNhdGNoRXhwciIsIGUwKTsKICAgIHBhcnNlX1RyeUNsYXVzZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ2F0Y2hDbGF1c2UoKTsKICAgICAgbG9va2FoZWFkMVcoMTgzKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnXScgfCAnYWZ0ZXInIHwgJ2FzJyB8ICdhc2NlbmRpbmcnIHwKICAgICAgaWYgKGwxICE9IDkxKSAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHJ5Q2F0Y2hFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RyeUNhdGNoRXhwcigpCiAgewogICAgdHJ5X1RyeUNsYXVzZSgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgIHRyeV9DYXRjaENsYXVzZSgpOwogICAgICBsb29rYWhlYWQxVygxODMpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICddJyB8ICdhZnRlcicgfCAnYXMnIHwgJ2FzY2VuZGluZycgfAogICAgICBpZiAobDEgIT0gOTEpICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHJ5Q2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHJ5Q2xhdXNlIiwgZTApOwogICAgc2hpZnQoMjUwKTsgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9UcnlUYXJnZXRFeHByKCk7CiAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUcnlDbGF1c2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJ5Q2xhdXNlKCkKICB7CiAgICBzaGlmdFQoMjUwKTsgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9UcnlUYXJnZXRFeHByKCk7CiAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHJ5VGFyZ2V0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyeVRhcmdldEV4cHIiLCBlMCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRyeVRhcmdldEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJ5VGFyZ2V0RXhwcigpCiAgewogICAgdHJ5X0V4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NhdGNoQ2xhdXNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ2F0Y2hDbGF1c2UiLCBlMCk7CiAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgIGxvb2thaGVhZDFXKDI1Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9DYXRjaEVycm9yTGlzdCgpOwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXRjaENsYXVzZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9DYXRjaENsYXVzZSgpCiAgewogICAgc2hpZnRUKDkxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICBsb29rYWhlYWQxVygyNTYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X0NhdGNoRXJyb3JMaXN0KCk7CiAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2F0Y2hFcnJvckxpc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDYXRjaEVycm9yTGlzdCIsIGUwKTsKICAgIHBhcnNlX05hbWVUZXN0KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JyB8ICd8JwogICAgICBpZiAobDEgIT0gMjc5KSAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDI3OSk7ICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBsb29rYWhlYWQxVygyNTYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9OYW1lVGVzdCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXRjaEVycm9yTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9DYXRjaEVycm9yTGlzdCgpCiAgewogICAgdHJ5X05hbWVUZXN0KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygxMzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JyB8ICd8JwogICAgICBpZiAobDEgIT0gMjc5KSAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCgyNzkpOyAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBsb29rYWhlYWQxVygyNTYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X05hbWVUZXN0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9PckV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJPckV4cHIiLCBlMCk7CiAgICBwYXJzZV9BbmRFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMjAwKSAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgyMDApOyAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FuZEV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT3JFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X09yRXhwcigpCiAgewogICAgdHJ5X0FuZEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyMDApICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCgyMDApOyAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9BbmRFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BbmRFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW5kRXhwciIsIGUwKTsKICAgIHBhcnNlX0NvbXBhcmlzb25FeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNzUpICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ29tcGFyaXNvbkV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQW5kRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BbmRFeHByKCkKICB7CiAgICB0cnlfQ29tcGFyaXNvbkV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA3NSkgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNzUpOyAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0NvbXBhcmlzb25FeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wYXJpc29uRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBhcmlzb25FeHByIiwgZTApOwogICAgcGFyc2VfRlRDb250YWluc0V4cHIoKTsKICAgIGlmIChsMSA9PSAyNyAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgIHx8IGwxID09IDU0ICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICB8fCBsMSA9PSA1NyAgICAgICAgICAgICAgICAgICAgLy8gJzw8JwogICAgIHx8IGwxID09IDU4ICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgfHwgbDEgPT0gNjAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgIHx8IGwxID09IDYxICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICB8fCBsMSA9PSA2MiAgICAgICAgICAgICAgICAgICAgLy8gJz49JwogICAgIHx8IGwxID09IDYzICAgICAgICAgICAgICAgICAgICAvLyAnPj4nCiAgICAgfHwgbDEgPT0gMTI4ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICB8fCBsMSA9PSAxNDYgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgIHx8IGwxID09IDE1MCAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgfHwgbDEgPT0gMTY0ICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICB8fCBsMSA9PSAxNzIgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgIHx8IGwxID09IDE3OCAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgfHwgbDEgPT0gMTg2KSAgICAgICAgICAgICAgICAgIC8vICduZScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEyODogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBjYXNlIDE3MjogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgY2FzZSAxODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9WYWx1ZUNvbXAoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSA1NzogICAgICAgICAgICAgICAgICAgICAgLy8gJzw8JwogICAgICBjYXNlIDYzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnPj4nCiAgICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfTm9kZUNvbXAoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfR2VuZXJhbENvbXAoKTsKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVENvbnRhaW5zRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wYXJpc29uRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wYXJpc29uRXhwcigpCiAgewogICAgdHJ5X0ZUQ29udGFpbnNFeHByKCk7CiAgICBpZiAobDEgPT0gMjcgICAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICB8fCBsMSA9PSA1NCAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgfHwgbDEgPT0gNTcgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICB8fCBsMSA9PSA1OCAgICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgIHx8IGwxID09IDYwICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICB8fCBsMSA9PSA2MSAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgfHwgbDEgPT0gNjIgICAgICAgICAgICAgICAgICAgIC8vICc+PScKICAgICB8fCBsMSA9PSA2MyAgICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgIHx8IGwxID09IDEyOCAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgfHwgbDEgPT0gMTQ2ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICB8fCBsMSA9PSAxNTAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgIHx8IGwxID09IDE2NCAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgfHwgbDEgPT0gMTcyICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICB8fCBsMSA9PSAxNzggICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgIHx8IGwxID09IDE4NikgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBjYXNlIDE0NjogICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBjYXNlIDE3ODogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgICB0cnlfVmFsdWVDb21wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTc6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgY2FzZSA2MzogICAgICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgICAgdHJ5X05vZGVDb21wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdHJ5X0dlbmVyYWxDb21wKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9GVENvbnRhaW5zRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRDb250YWluc0V4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVENvbnRhaW5zRXhwciIsIGUwKTsKICAgIHBhcnNlX1N0cmluZ0NvbmNhdEV4cHIoKTsKICAgIGlmIChsMSA9PSA5OSkgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgewogICAgICBzaGlmdCg5OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGFpbnMnCiAgICAgIGxvb2thaGVhZDFXKDc2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3RleHQnCiAgICAgIHNoaWZ0KDI0NCk7ICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBsb29rYWhlYWQxVygxNjIpOyAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUU2VsZWN0aW9uKCk7CiAgICAgIGlmIChsMSA9PSAyNzEpICAgICAgICAgICAgICAgIC8vICd3aXRob3V0JwogICAgICB7CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0ZUSWdub3JlT3B0aW9uKCk7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRDb250YWluc0V4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRDb250YWluc0V4cHIoKQogIHsKICAgIHRyeV9TdHJpbmdDb25jYXRFeHByKCk7CiAgICBpZiAobDEgPT0gOTkpICAgICAgICAgICAgICAgICAgIC8vICdjb250YWlucycKICAgIHsKICAgICAgc2hpZnRUKDk5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgICBsb29rYWhlYWQxVyg3Nik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd0ZXh0JwogICAgICBzaGlmdFQoMjQ0KTsgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgbG9va2FoZWFkMVcoMTYyKTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgdHJ5X0ZUU2VsZWN0aW9uKCk7CiAgICAgIGlmIChsMSA9PSAyNzEpICAgICAgICAgICAgICAgIC8vICd3aXRob3V0JwogICAgICB7CiAgICAgICAgdHJ5X0ZUSWdub3JlT3B0aW9uKCk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N0cmluZ0NvbmNhdEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTdHJpbmdDb25jYXRFeHByIiwgZTApOwogICAgcGFyc2VfUmFuZ2VFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMjgwKSAgICAgICAgICAgICAgICAvLyAnfHwnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgyODApOyAgICAgICAgICAgICAgICAgICAvLyAnfHwnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1JhbmdlRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTdHJpbmdDb25jYXRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N0cmluZ0NvbmNhdEV4cHIoKQogIHsKICAgIHRyeV9SYW5nZUV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyODApICAgICAgICAgICAgICAgIC8vICd8fCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0VCgyODApOyAgICAgICAgICAgICAgICAgIC8vICd8fCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9SYW5nZUV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JhbmdlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJhbmdlRXhwciIsIGUwKTsKICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgaWYgKGwxID09IDI0OCkgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICB7CiAgICAgIHNoaWZ0KDI0OCk7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQWRkaXRpdmVFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJhbmdlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9SYW5nZUV4cHIoKQogIHsKICAgIHRyeV9BZGRpdGl2ZUV4cHIoKTsKICAgIGlmIChsMSA9PSAyNDgpICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgewogICAgICBzaGlmdFQoMjQ4KTsgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfQWRkaXRpdmVFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BZGRpdGl2ZUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBZGRpdGl2ZUV4cHIiLCBlMCk7CiAgICBwYXJzZV9NdWx0aXBsaWNhdGl2ZUV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA0MCAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICAgJiYgbDEgIT0gNDIpICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAgc2hpZnQoNDApOyAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9NdWx0aXBsaWNhdGl2ZUV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQWRkaXRpdmVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FkZGl0aXZlRXhwcigpCiAgewogICAgdHJ5X011bHRpcGxpY2F0aXZlRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQwICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAmJiBsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICBzaGlmdFQoNDApOyAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDQyKTsgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfTXVsdGlwbGljYXRpdmVFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9NdWx0aXBsaWNhdGl2ZUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJNdWx0aXBsaWNhdGl2ZUV4cHIiLCBlMCk7CiAgICBwYXJzZV9VbmlvbkV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAzOCAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgJiYgbDEgIT0gMTE4ICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICAgJiYgbDEgIT0gMTUxICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICYmIGwxICE9IDE4MCkgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICAgIHNoaWZ0KDExOCk7ICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE1MTogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICBzaGlmdCgxNTEpOyAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoMTgwKTsgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVW5pb25FeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk11bHRpcGxpY2F0aXZlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9NdWx0aXBsaWNhdGl2ZUV4cHIoKQogIHsKICAgIHRyeV9VbmlvbkV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAzOCAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgJiYgbDEgIT0gMTE4ICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICAgJiYgbDEgIT0gMTUxICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICYmIGwxICE9IDE4MCkgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgICAgc2hpZnRUKDM4KTsgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICAgIHNoaWZ0VCgxMTgpOyAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE1MTogICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICBzaGlmdFQoMTUxKTsgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDE4MCk7ICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9VbmlvbkV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1VuaW9uRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlVuaW9uRXhwciIsIGUwKTsKICAgIHBhcnNlX0ludGVyc2VjdEV4Y2VwdEV4cHIoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSAyNTQgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICYmIGwxICE9IDI3OSkgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICBzaGlmdCgyNTQpOyAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDI3OSk7ICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbnRlcnNlY3RFeGNlcHRFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlVuaW9uRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9VbmlvbkV4cHIoKQogIHsKICAgIHRyeV9JbnRlcnNlY3RFeGNlcHRFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMjU0ICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAmJiBsMSAhPSAyNzkpICAgICAgICAgICAgICAgIC8vICd8JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAgc2hpZnRUKDI1NCk7ICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMjc5KTsgICAgICAgICAgICAgICAgLy8gJ3wnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9JbnRlcnNlY3RFeGNlcHRFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbnRlcnNlY3RFeGNlcHRFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW50ZXJzZWN0RXhjZXB0RXhwciIsIGUwKTsKICAgIHBhcnNlX0luc3RhbmNlb2ZFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyMjIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgICAgaWYgKGwxICE9IDEzMSAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgICYmIGwxICE9IDE2MikgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgICBzaGlmdCgxNjIpOyAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxMzEpOyAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbnN0YW5jZW9mRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbnRlcnNlY3RFeGNlcHRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ludGVyc2VjdEV4Y2VwdEV4cHIoKQogIHsKICAgIHRyeV9JbnN0YW5jZW9mRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjIyKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICAgIGlmIChsMSAhPSAxMzEgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgICAmJiBsMSAhPSAxNjIpICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgICAgc2hpZnRUKDE2Mik7ICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDEzMSk7ICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9JbnN0YW5jZW9mRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5zdGFuY2VvZkV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbnN0YW5jZW9mRXhwciIsIGUwKTsKICAgIHBhcnNlX1RyZWF0RXhwcigpOwogICAgbG9va2FoZWFkMVcoMjIzKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSAxNjApICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgewogICAgICBzaGlmdCgxNjApOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGxvb2thaGVhZDFXKDY0KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29mJwogICAgICBzaGlmdCgxOTYpOyAgICAgICAgICAgICAgICAgICAvLyAnb2YnCiAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TZXF1ZW5jZVR5cGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5zdGFuY2VvZkV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSW5zdGFuY2VvZkV4cHIoKQogIHsKICAgIHRyeV9UcmVhdEV4cHIoKTsKICAgIGxvb2thaGVhZDFXKDIyMyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICBpZiAobDEgPT0gMTYwKSAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgIHsKICAgICAgc2hpZnRUKDE2MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvZicKICAgICAgc2hpZnRUKDE5Nik7ICAgICAgICAgICAgICAgICAgLy8gJ29mJwogICAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9TZXF1ZW5jZVR5cGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RyZWF0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyZWF0RXhwciIsIGUwKTsKICAgIHBhcnNlX0Nhc3RhYmxlRXhwcigpOwogICAgbG9va2FoZWFkMVcoMjI0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSAyNDkpICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgewogICAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGxvb2thaGVhZDFXKDMwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TZXF1ZW5jZVR5cGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHJlYXRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RyZWF0RXhwcigpCiAgewogICAgdHJ5X0Nhc3RhYmxlRXhwcigpOwogICAgbG9va2FoZWFkMVcoMjI0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwKICAgIGlmIChsMSA9PSAyNDkpICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgewogICAgICBzaGlmdFQoMjQ5KTsgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGxvb2thaGVhZDFXKDMwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdFQoNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2FzdGFibGVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ2FzdGFibGVFeHByIiwgZTApOwogICAgcGFyc2VfQ2FzdEV4cHIoKTsKICAgIGxvb2thaGVhZDFXKDIyNSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICBpZiAobDEgPT0gOTApICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgIHsKICAgICAgc2hpZnQoOTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2luZ2xlVHlwZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXN0YWJsZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ2FzdGFibGVFeHByKCkKICB7CiAgICB0cnlfQ2FzdEV4cHIoKTsKICAgIGxvb2thaGVhZDFXKDIyNSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8CiAgICBpZiAobDEgPT0gOTApICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgIHsKICAgICAgc2hpZnRUKDkwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgICAgc2hpZnRUKDc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9TaW5nbGVUeXBlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9DYXN0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNhc3RFeHByIiwgZTApOwogICAgcGFyc2VfVW5hcnlFeHByKCk7CiAgICBsb29rYWhlYWQxVygyMjcpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDg5KSAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIHsKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGxvb2thaGVhZDFXKDMwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TaW5nbGVUeXBlKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNhc3RFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Nhc3RFeHByKCkKICB7CiAgICB0cnlfVW5hcnlFeHByKCk7CiAgICBsb29rYWhlYWQxVygyMjcpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDg5KSAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIHsKICAgICAgc2hpZnRUKDg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGxvb2thaGVhZDFXKDMwKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgICBzaGlmdFQoNzkpOyAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1NpbmdsZVR5cGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1VuYXJ5RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlVuYXJ5RXhwciIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBpZiAobDEgIT0gNDAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgICYmIGwxICE9IDQyKSAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgNDI6ICAgICAgICAgICAgICAgICAgICAgIC8vICctJwogICAgICAgIHNoaWZ0KDQyKTsgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCg0MCk7ICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgIH0KICAgIH0KICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1ZhbHVlRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJVbmFyeUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVW5hcnlFeHByKCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgaWYgKGwxICE9IDQwICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgICAmJiBsMSAhPSA0MikgICAgICAgICAgICAgICAgIC8vICctJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgICBzaGlmdFQoNDIpOyAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDQwKTsgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICB9CiAgICB9CiAgICB0cnlfVmFsdWVFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYWx1ZUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYWx1ZUV4cHIiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGxvb2thaGVhZDJXKDI0Nyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDg3ODEyOiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJ2xheCcKICAgIGNhc2UgMTIzMTQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnc3RyaWN0JwogICAgY2FzZSAxMjkyODQ6ICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICd0eXBlJwogICAgY2FzZSAxNDE1NzI6ICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICd7JwogICAgICBwYXJzZV9WYWxpZGF0ZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgcGFyc2VfRXh0ZW5zaW9uRXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX1NpbXBsZU1hcEV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFsdWVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ZhbHVlRXhwcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBsb29rYWhlYWQyVygyNDcpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA4NzgxMjogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICdsYXgnCiAgICBjYXNlIDEyMzE0MDogICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJ3N0cmljdCcKICAgIGNhc2UgMTI5Mjg0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAndHlwZScKICAgIGNhc2UgMTQxNTcyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAneycKICAgICAgdHJ5X1ZhbGlkYXRlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICB0cnlfRXh0ZW5zaW9uRXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9TaW1wbGVNYXBFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TaW1wbGVNYXBFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2ltcGxlTWFwRXhwciIsIGUwKTsKICAgIHBhcnNlX1BhdGhFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMjYpICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDI2KTsgICAgICAgICAgICAgICAgICAgIC8vICchJwogICAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QYXRoRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTaW1wbGVNYXBFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1NpbXBsZU1hcEV4cHIoKQogIHsKICAgIHRyeV9QYXRoRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDI2KSAgICAgICAgICAgICAgICAgLy8gJyEnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9QYXRoRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfR2VuZXJhbENvbXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJHZW5lcmFsQ29tcCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDYwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBzaGlmdCg2MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICchPScKICAgICAgc2hpZnQoMjcpOyAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICBicmVhazsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgIHNoaWZ0KDU0KTsgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICBicmVhazsKICAgIGNhc2UgNTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgICBzaGlmdCg1OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgIGJyZWFrOwogICAgY2FzZSA2MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgc2hpZnQoNjEpOyAgICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoNjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJz49JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJHZW5lcmFsQ29tcCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9HZW5lcmFsQ29tcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIHNoaWZ0VCg2MCk7ICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBicmVhazsKICAgIGNhc2UgMjc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICBzaGlmdFQoMjcpOyAgICAgICAgICAgICAgICAgICAvLyAnIT0nCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICAgc2hpZnRUKDU0KTsgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgIHNoaWZ0VCg1OCk7ICAgICAgICAgICAgICAgICAgIC8vICc8PScKICAgICAgYnJlYWs7CiAgICBjYXNlIDYxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBzaGlmdFQoNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoNjIpOyAgICAgICAgICAgICAgICAgICAvLyAnPj0nCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9WYWx1ZUNvbXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWYWx1ZUNvbXAiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0KDEyOCk7ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NjogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgc2hpZnQoMTg2KTsgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBicmVhazsKICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0KDE3Mik7ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnQoMTUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFsdWVDb21wIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ZhbHVlQ29tcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdFQoMTI4KTsgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIHNoaWZ0VCgxODYpOyAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgc2hpZnRUKDE3OCk7ICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBicmVhazsKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdFQoMTcyKTsgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIHNoaWZ0VCgxNTApOyAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTQ2KTsgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Ob2RlQ29tcCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5vZGVDb21wIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdCgxNjQpOyAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSA1NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPDwnCiAgICAgIHNoaWZ0KDU3KTsgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCg2Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnPj4nCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5vZGVDb21wIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05vZGVDb21wKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIHNoaWZ0VCgxNjQpOyAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDU3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgc2hpZnRUKDU3KTsgICAgICAgICAgICAgICAgICAgLy8gJzw8JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCg2Myk7ICAgICAgICAgICAgICAgICAgIC8vICc+PicKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZhbGlkYXRlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlZhbGlkYXRlRXhwciIsIGUwKTsKICAgIHNoaWZ0KDI2MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgbG9va2FoZWFkMVcoMTYwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsYXgnIHwgJ3N0cmljdCcgfCAndHlwZScgfCAneycKICAgIGlmIChsMSAhPSAyNzYpICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAyNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgICAgc2hpZnQoMjUyKTsgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1R5cGVOYW1lKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1ZhbGlkYXRpb25Nb2RlKCk7CiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFsaWRhdGVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ZhbGlkYXRlRXhwcigpCiAgewogICAgc2hpZnRUKDI2MCk7ICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICBsb29rYWhlYWQxVygxNjApOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xheCcgfCAnc3RyaWN0JyB8ICd0eXBlJyB8ICd7JwogICAgaWYgKGwxICE9IDI3NikgICAgICAgICAgICAgICAgICAvLyAneycKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgICBzaGlmdFQoMjUyKTsgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB0cnlfVHlwZU5hbWUoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfVmFsaWRhdGlvbk1vZGUoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZhbGlkYXRpb25Nb2RlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVmFsaWRhdGlvbk1vZGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBzaGlmdCgxNzEpOyAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDI0MCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhbGlkYXRpb25Nb2RlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ZhbGlkYXRpb25Nb2RlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBzaGlmdFQoMTcxKTsgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyNDApOyAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FeHRlbnNpb25FeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRXh0ZW5zaW9uRXhwciIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUHJhZ21hKCk7CiAgICAgIGxvb2thaGVhZDFXKDEwMCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCMnIHwgJyg6JyB8ICd7JwogICAgICBpZiAobDEgIT0gMzUpICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3Myk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMjgyKSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgIH0KICAgIHNoaWZ0KDI4Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkV4dGVuc2lvbkV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRXh0ZW5zaW9uRXhwcigpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgdHJ5X1ByYWdtYSgpOwogICAgICBsb29rYWhlYWQxVygxMDApOyAgICAgICAgICAgICAvLyBTXldTIHwgJygjJyB8ICcoOicgfCAneycKICAgICAgaWYgKGwxICE9IDM1KSAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNzMpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgaWYgKGwxICE9IDI4MikgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgdHJ5X0V4cHIoKTsKICAgIH0KICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QcmFnbWEoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmFnbWEiLCBlMCk7CiAgICBzaGlmdCgzNSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgIGxvb2thaGVhZDEoMjUxKTsgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgUyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8CiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUwogICAgfQogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxKDEwKTsgICAgICAgICAgICAgICAgIC8vIFMgfCAnIyknCiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUwogICAgICBsb29rYWhlYWQxKDApOyAgICAgICAgICAgICAgICAvLyBQcmFnbWFDb250ZW50cwogICAgICBzaGlmdCgxKTsgICAgICAgICAgICAgICAgICAgICAvLyBQcmFnbWFDb250ZW50cwogICAgfQogICAgbG9va2FoZWFkMSg1KTsgICAgICAgICAgICAgICAgICAvLyAnIyknCiAgICBzaGlmdCgzMCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcjKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJhZ21hIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ByYWdtYSgpCiAgewogICAgc2hpZnRUKDM1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICBsb29rYWhlYWQxKDI1MSk7ICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFMgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfAogICAgaWYgKGwxID09IDIxKSAgICAgICAgICAgICAgICAgICAvLyBTCiAgICB7CiAgICAgIHNoaWZ0VCgyMSk7ICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIH0KICAgIHRyeV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDEoMTApOyAgICAgICAgICAgICAgICAgLy8gUyB8ICcjKScKICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAgICAgLy8gUwogICAgewogICAgICBzaGlmdFQoMjEpOyAgICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIGxvb2thaGVhZDEoMCk7ICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzCiAgICAgIHNoaWZ0VCgxKTsgICAgICAgICAgICAgICAgICAgIC8vIFByYWdtYUNvbnRlbnRzCiAgICB9CiAgICBsb29rYWhlYWQxKDUpOyAgICAgICAgICAgICAgICAgIC8vICcjKScKICAgIHNoaWZ0VCgzMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyMpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUGF0aEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQYXRoRXhwciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICBzaGlmdCg0Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgbG9va2FoZWFkMVcoMjg1KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAyNTogICAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgIGNhc2UgMjY6ICAgICAgICAgICAgICAgICAgICAgIC8vICchJwogICAgICBjYXNlIDI3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnIT0nCiAgICAgIGNhc2UgMzc6ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBjYXNlIDM4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgIGNhc2UgNDE6ICAgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBjYXNlIDQyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLScKICAgICAgY2FzZSA0OTogICAgICAgICAgICAgICAgICAgICAgLy8gJzonCiAgICAgIGNhc2UgNTM6ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICBjYXNlIDU3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPDwnCiAgICAgIGNhc2UgNTg6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8PScKICAgICAgY2FzZSA2MDogICAgICAgICAgICAgICAgICAgICAgLy8gJz0nCiAgICAgIGNhc2UgNjE6ICAgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBjYXNlIDYyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnPj0nCiAgICAgIGNhc2UgNjM6ICAgICAgICAgICAgICAgICAgICAgIC8vICc+PicKICAgICAgY2FzZSA2OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICAgIGNhc2UgODc6ICAgICAgICAgICAgICAgICAgICAgIC8vICdieScKICAgICAgY2FzZSA5OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgICBjYXNlIDIwNTogICAgICAgICAgICAgICAgICAgICAvLyAncGFyYWdyYXBocycKICAgICAgY2FzZSAyMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgY2FzZSAyNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RpbWVzJwogICAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIGNhc2UgMjc5OiAgICAgICAgICAgICAgICAgICAgIC8vICd8JwogICAgICBjYXNlIDI4MDogICAgICAgICAgICAgICAgICAgICAvLyAnfHwnCiAgICAgIGNhc2UgMjgxOiAgICAgICAgICAgICAgICAgICAgIC8vICd8fScKICAgICAgY2FzZSAyODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1JlbGF0aXZlUGF0aEV4cHIoKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICBzaGlmdCg0Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgIGxvb2thaGVhZDFXKDI2NCk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1JlbGF0aXZlUGF0aEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9SZWxhdGl2ZVBhdGhFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhdGhFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhdGhFeHByKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA0NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgc2hpZnRUKDQ2KTsgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgIGxvb2thaGVhZDFXKDI4NSk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjU6ICAgICAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgY2FzZSAyNzogICAgICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICBjYXNlIDM3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGNhc2UgNDA6ICAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICBjYXNlIDQxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgY2FzZSA0MjogICAgICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgIGNhc2UgNDk6ICAgICAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICBjYXNlIDUzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgY2FzZSA1NzogICAgICAgICAgICAgICAgICAgICAgLy8gJzw8JwogICAgICBjYXNlIDU4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPD0nCiAgICAgIGNhc2UgNjA6ICAgICAgICAgICAgICAgICAgICAgIC8vICc9JwogICAgICBjYXNlIDYxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgY2FzZSA2MjogICAgICAgICAgICAgICAgICAgICAgLy8gJz49JwogICAgICBjYXNlIDYzOiAgICAgICAgICAgICAgICAgICAgICAvLyAnPj4nCiAgICAgIGNhc2UgNjk6ICAgICAgICAgICAgICAgICAgICAgIC8vICddJwogICAgICBjYXNlIDg3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYnknCiAgICAgIGNhc2UgOTk6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250YWlucycKICAgICAgY2FzZSAyMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmFncmFwaHMnCiAgICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZXMnCiAgICAgIGNhc2UgMjQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0aW1lcycKICAgICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICBjYXNlIDI3OTogICAgICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgY2FzZSAyODA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3x8JwogICAgICBjYXNlIDI4MTogICAgICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICAgIGNhc2UgMjgyOiAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRyeV9SZWxhdGl2ZVBhdGhFeHByKCk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDQ3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgc2hpZnRUKDQ3KTsgICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICBsb29rYWhlYWQxVygyNjQpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X1JlbGF0aXZlUGF0aEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfUmVsYXRpdmVQYXRoRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmVsYXRpdmVQYXRoRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJlbGF0aXZlUGF0aEV4cHIiLCBlMCk7CiAgICBwYXJzZV9TdGVwRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgICBsb29rYWhlYWQyVygyNjUpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGsgPSBsMTsKICAgICAgfQogICAgICBpZiAobGsgIT0gMjUgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgICAgICYmIGxrICE9IDI3ICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICAgJiYgbGsgIT0gMzcgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgICYmIGxrICE9IDM4ICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgICAmJiBsayAhPSA0MCAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICAgJiYgbGsgIT0gNDEgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICYmIGxrICE9IDQyICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgICAmJiBsayAhPSA0NiAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgJiYgbGsgIT0gNDcgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAmJiBsayAhPSA0OSAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICAgJiYgbGsgIT0gNTMgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgICYmIGxrICE9IDU0ICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgICAmJiBsayAhPSA1NyAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgICYmIGxrICE9IDU4ICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgICAgJiYgbGsgIT0gNjAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgICYmIGxrICE9IDYxICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgICAmJiBsayAhPSA2MiAgICAgICAgICAgICAgICAgIC8vICc+PScKICAgICAgICYmIGxrICE9IDYzICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgICAgJiYgbGsgIT0gNjkgICAgICAgICAgICAgICAgICAvLyAnXScKICAgICAgICYmIGxrICE9IDcwICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICAgJiYgbGsgIT0gNzUgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICAgJiYgbGsgIT0gNzkgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgICAmJiBsayAhPSA4MCAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgICAmJiBsayAhPSA4MSAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICYmIGxrICE9IDg0ICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgICYmIGxrICE9IDg3ICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgICAgJiYgbGsgIT0gODggICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgICYmIGxrICE9IDg5ICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgICAmJiBsayAhPSA5MCAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgICYmIGxrICE9IDk0ICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgICYmIGxrICE9IDk5ICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgICAgJiYgbGsgIT0gMTA1ICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgICAmJiBsayAhPSAxMDkgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgJiYgbGsgIT0gMTEzICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgICYmIGxrICE9IDExOCAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgICYmIGxrICE9IDEyMiAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgICAmJiBsayAhPSAxMjMgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgICYmIGxrICE9IDEyNiAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgICYmIGxrICE9IDEyOCAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICAgJiYgbGsgIT0gMTMxICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICAgJiYgbGsgIT0gMTM3ICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICAgJiYgbGsgIT0gMTQ2ICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgICAmJiBsayAhPSAxNDggICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgICYmIGxrICE9IDE1MCAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICAgJiYgbGsgIT0gMTUxICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICYmIGxrICE9IDE2MCAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICAgJiYgbGsgIT0gMTYyICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICAgJiYgbGsgIT0gMTYzICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgICYmIGxrICE9IDE2NCAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICAgJiYgbGsgIT0gMTcyICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgICAmJiBsayAhPSAxNzQgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgICAmJiBsayAhPSAxNzggICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgICYmIGxrICE9IDE4MCAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgICYmIGxrICE9IDE4MSAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgICYmIGxrICE9IDE4NiAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICAgJiYgbGsgIT0gMTk4ICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgICYmIGxrICE9IDIwMCAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICAgJiYgbGsgIT0gMjAxICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgICAmJiBsayAhPSAyMDUgICAgICAgICAgICAgICAgIC8vICdwYXJhZ3JhcGhzJwogICAgICAgJiYgbGsgIT0gMjIwICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICAgJiYgbGsgIT0gMjI0ICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICAgJiYgbGsgIT0gMjMyICAgICAgICAgICAgICAgICAvLyAnc2VudGVuY2VzJwogICAgICAgJiYgbGsgIT0gMjM2ICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICAgJiYgbGsgIT0gMjM3ICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgICAmJiBsayAhPSAyNDcgICAgICAgICAgICAgICAgIC8vICd0aW1lcycKICAgICAgICYmIGxrICE9IDI0OCAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICAgJiYgbGsgIT0gMjQ5ICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgICAmJiBsayAhPSAyNTQgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICYmIGxrICE9IDI2NiAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICAgJiYgbGsgIT0gMjcwICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgICYmIGxrICE9IDI3MyAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICAgJiYgbGsgIT0gMjc5ICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgICYmIGxrICE9IDI4MCAgICAgICAgICAgICAgICAgLy8gJ3x8JwogICAgICAgJiYgbGsgIT0gMjgxICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICAgICAmJiBsayAhPSAyODIgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICAgJiYgbGsgIT0gMjM1NzggICAgICAgICAgICAgICAvLyAnIScgJy8nCiAgICAgICAmJiBsayAhPSAyNDA5MCkgICAgICAgICAgICAgIC8vICchJyAnLy8nCiAgICAgIHsKICAgICAgICBsayA9IG1lbW9pemVkKDMsIGUwKTsKICAgICAgICBpZiAobGsgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSA0NjogICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgICAgICAgc2hpZnRUKDQ2KTsgICAgICAgICAgIC8vICcvJwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ3OiAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgICAgICAgc2hpZnRUKDQ3KTsgICAgICAgICAgIC8vICcvLycKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBzaGlmdFQoMjYpOyAgICAgICAgICAgLy8gJyEnCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY0KTsgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgICAgIHRyeV9TdGVwRXhwcigpOwogICAgICAgICAgICBsayA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICAgIHsKICAgICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIH0KICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICBtZW1vaXplKDMsIGUwLCBsayk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayAhPSAtMQogICAgICAgJiYgbGsgIT0gNDYgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICYmIGxrICE9IDQ3KSAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICBzaGlmdCg0Nik7ICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICBzaGlmdCg0Nyk7ICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDI2KTsgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgfQogICAgICBsb29rYWhlYWQxVygyNjQpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TdGVwRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZWxhdGl2ZVBhdGhFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1JlbGF0aXZlUGF0aEV4cHIoKQogIHsKICAgIHRyeV9TdGVwRXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDI2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnIScKICAgICAgICBsb29rYWhlYWQyVygyNjUpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGsgPSBsMTsKICAgICAgfQogICAgICBpZiAobGsgIT0gMjUgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgICAgICYmIGxrICE9IDI3ICAgICAgICAgICAgICAgICAgLy8gJyE9JwogICAgICAgJiYgbGsgIT0gMzcgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgICYmIGxrICE9IDM4ICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgICAmJiBsayAhPSA0MCAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgICAgJiYgbGsgIT0gNDEgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICYmIGxrICE9IDQyICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgICAmJiBsayAhPSA0NiAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgJiYgbGsgIT0gNDcgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAmJiBsayAhPSA0OSAgICAgICAgICAgICAgICAgIC8vICc6JwogICAgICAgJiYgbGsgIT0gNTMgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgICYmIGxrICE9IDU0ICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICAgICAmJiBsayAhPSA1NyAgICAgICAgICAgICAgICAgIC8vICc8PCcKICAgICAgICYmIGxrICE9IDU4ICAgICAgICAgICAgICAgICAgLy8gJzw9JwogICAgICAgJiYgbGsgIT0gNjAgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgICYmIGxrICE9IDYxICAgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgICAmJiBsayAhPSA2MiAgICAgICAgICAgICAgICAgIC8vICc+PScKICAgICAgICYmIGxrICE9IDYzICAgICAgICAgICAgICAgICAgLy8gJz4+JwogICAgICAgJiYgbGsgIT0gNjkgICAgICAgICAgICAgICAgICAvLyAnXScKICAgICAgICYmIGxrICE9IDcwICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICAgJiYgbGsgIT0gNzUgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICAgJiYgbGsgIT0gNzkgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgICAmJiBsayAhPSA4MCAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgICAmJiBsayAhPSA4MSAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICYmIGxrICE9IDg0ICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgICYmIGxrICE9IDg3ICAgICAgICAgICAgICAgICAgLy8gJ2J5JwogICAgICAgJiYgbGsgIT0gODggICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgICYmIGxrICE9IDg5ICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgICAmJiBsayAhPSA5MCAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgICYmIGxrICE9IDk0ICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgICAgICYmIGxrICE9IDk5ICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRhaW5zJwogICAgICAgJiYgbGsgIT0gMTA1ICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgICAmJiBsayAhPSAxMDkgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgJiYgbGsgIT0gMTEzICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgICYmIGxrICE9IDExOCAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgICYmIGxrICE9IDEyMiAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgICAmJiBsayAhPSAxMjMgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgICYmIGxrICE9IDEyNiAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgICYmIGxrICE9IDEyOCAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICAgJiYgbGsgIT0gMTMxICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICAgJiYgbGsgIT0gMTM3ICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICAgJiYgbGsgIT0gMTQ2ICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgICAmJiBsayAhPSAxNDggICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgICYmIGxrICE9IDE1MCAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICAgJiYgbGsgIT0gMTUxICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgICYmIGxrICE9IDE2MCAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICAgJiYgbGsgIT0gMTYyICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICAgJiYgbGsgIT0gMTYzICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgICYmIGxrICE9IDE2NCAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICAgJiYgbGsgIT0gMTcyICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgICAmJiBsayAhPSAxNzQgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgICAmJiBsayAhPSAxNzggICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgICYmIGxrICE9IDE4MCAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgICAgICYmIGxrICE9IDE4MSAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgICYmIGxrICE9IDE4NiAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICAgJiYgbGsgIT0gMTk4ICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgICYmIGxrICE9IDIwMCAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICAgJiYgbGsgIT0gMjAxICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgICAmJiBsayAhPSAyMDUgICAgICAgICAgICAgICAgIC8vICdwYXJhZ3JhcGhzJwogICAgICAgJiYgbGsgIT0gMjIwICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICAgJiYgbGsgIT0gMjI0ICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgICAgJiYgbGsgIT0gMjMyICAgICAgICAgICAgICAgICAvLyAnc2VudGVuY2VzJwogICAgICAgJiYgbGsgIT0gMjM2ICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICAgJiYgbGsgIT0gMjM3ICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgICAmJiBsayAhPSAyNDcgICAgICAgICAgICAgICAgIC8vICd0aW1lcycKICAgICAgICYmIGxrICE9IDI0OCAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICAgJiYgbGsgIT0gMjQ5ICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgICAmJiBsayAhPSAyNTQgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICYmIGxrICE9IDI2NiAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICAgJiYgbGsgIT0gMjcwICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgICYmIGxrICE9IDI3MyAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICAgJiYgbGsgIT0gMjc5ICAgICAgICAgICAgICAgICAvLyAnfCcKICAgICAgICYmIGxrICE9IDI4MCAgICAgICAgICAgICAgICAgLy8gJ3x8JwogICAgICAgJiYgbGsgIT0gMjgxICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICAgICAmJiBsayAhPSAyODIgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICAgJiYgbGsgIT0gMjM1NzggICAgICAgICAgICAgICAvLyAnIScgJy8nCiAgICAgICAmJiBsayAhPSAyNDA5MCkgICAgICAgICAgICAgIC8vICchJyAnLy8nCiAgICAgIHsKICAgICAgICBsayA9IG1lbW9pemVkKDMsIGUwKTsKICAgICAgICBpZiAobGsgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSA0NjogICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgICAgICAgc2hpZnRUKDQ2KTsgICAgICAgICAgIC8vICcvJwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ3OiAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgICAgICAgc2hpZnRUKDQ3KTsgICAgICAgICAgIC8vICcvLycKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBzaGlmdFQoMjYpOyAgICAgICAgICAgLy8gJyEnCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY0KTsgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgICAgIHRyeV9TdGVwRXhwcigpOwogICAgICAgICAgICBtZW1vaXplKDMsIGUwQSwgLTEpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICBtZW1vaXplKDMsIGUwQSwgLTIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxrICE9IC0xCiAgICAgICAmJiBsayAhPSA0NiAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgJiYgbGsgIT0gNDcpICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgNDY6ICAgICAgICAgICAgICAgICAgICAgIC8vICcvJwogICAgICAgIHNoaWZ0VCg0Nik7ICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICBicmVhazsKICAgICAgY2FzZSA0NzogICAgICAgICAgICAgICAgICAgICAgLy8gJy8vJwogICAgICAgIHNoaWZ0VCg0Nyk7ICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnRUKDI2KTsgICAgICAgICAgICAgICAgIC8vICchJwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDI2NCk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfU3RlcEV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1N0ZXBFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3RlcEV4cHIiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBsb29rYWhlYWQyVygyODQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGxvb2thaGVhZDJXKDI4Mik7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjgxKTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICBjYXNlIDIwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgbG9va2FoZWFkMlcoMjQ2KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgbG9va2FoZWFkMlcoMjM5KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIGxvb2thaGVhZDJXKDI0NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICBjYXNlIDkwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgY2FzZSA5NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgY2FzZSA5NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgIGNhc2UgOTg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICBjYXNlIDEwNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDEwNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSAxMDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgY2FzZSAxMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBjYXNlIDEyMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgIGNhc2UgMTI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgY2FzZSAxMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIGNhc2UgMTMxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgY2FzZSAxNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgY2FzZSAxNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBjYXNlIDE0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgIGNhc2UgMTQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgY2FzZSAxNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICBjYXNlIDE1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICBjYXNlIDE1NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICBjYXNlIDE3MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICBjYXNlIDE3MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBjYXNlIDE3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgIGNhc2UgMTgwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZCcKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgIGNhc2UgMTgyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSAxODY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAxOTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JwogICAgY2FzZSAxOTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgY2FzZSAyMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgY2FzZSAyMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICBjYXNlIDIzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICBjYXNlIDIzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgIGNhc2UgMjQ4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgY2FzZSAyNDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBjYXNlIDI1MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgIGNhc2UgMjUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICBjYXNlIDI2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgY2FzZSAyNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgIGNhc2UgMjY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICBjYXNlIDI3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgY2FzZSAyNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICBsb29rYWhlYWQyVygyNDMpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMzU5MjIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhZnRlcicKICAgICB8fCBsayA9PSAzNTk2MSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhZnRlcicKICAgICB8fCBsayA9PSAzNjAyNCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FmdGVyJwogICAgIHx8IGxrID09IDM2MDU2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FmdGVyJwogICAgIHx8IGxrID09IDM4NDgyICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYW5kJwogICAgIHx8IGxrID09IDM4NTIxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FuZCcKICAgICB8fCBsayA9PSAzODU4NCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FuZCcKICAgICB8fCBsayA9PSAzODYxNiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhbmQnCiAgICAgfHwgbGsgPT0gNDA1MzAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhcycKICAgICB8fCBsayA9PSA0MDU2OSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhcycKICAgICB8fCBsayA9PSA0MDYzMiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FzJwogICAgIHx8IGxrID09IDQwNjY0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FzJwogICAgIHx8IGxrID09IDQxMDQyICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxMDgxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTE0NCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTE3NiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE1NTQgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhdCcKICAgICB8fCBsayA9PSA0MTU5MyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhdCcKICAgICB8fCBsayA9PSA0MTY1NiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2F0JwogICAgIHx8IGxrID09IDQxNjg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2F0JwogICAgIHx8IGxrID09IDQzMDkwICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzMTI5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzE5MiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzIyNCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDUxMzggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjYXNlJwogICAgIHx8IGxrID09IDQ1MTc3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDUyNDAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjYXNlJwogICAgIHx8IGxrID09IDQ1MjcyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU2NTAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjYXN0JwogICAgIHx8IGxrID09IDQ1Njg5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDU3NTIgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjYXN0JwogICAgIHx8IGxrID09IDQ1Nzg0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYxNjIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NjIwMSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjYXN0YWJsZScKICAgICB8fCBsayA9PSA0NjI2NCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ2Mjk2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ4MjEwICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4MjQ5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODMxMiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODM0NCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNTM4NDIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb3VudCcKICAgICB8fCBsayA9PSA1Mzg4MSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdjb3VudCcKICAgICB8fCBsayA9PSA1Mzk0NCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvdW50JwogICAgIHx8IGxrID09IDUzOTc2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvdW50JwogICAgIHx8IGxrID09IDU1ODkwICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NTkyOSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU1OTkyICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NjAyNCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU3OTM4ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1Nzk3NyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4MDQwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1ODA3MiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDYwNDk4ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZGl2JwogICAgIHx8IGxrID09IDYwNTM3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RpdicKICAgICB8fCBsayA9PSA2MDYwMCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RpdicKICAgICB8fCBsayA9PSA2MDYzMiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkaXYnCiAgICAgfHwgbGsgPT0gNjI1NDYgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbHNlJwogICAgIHx8IGxrID09IDYyNTg1ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjI2NDggICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdlbHNlJwogICAgIHx8IGxrID09IDYyNjgwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMwNTggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzA5NyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbXB0eScKICAgICB8fCBsayA9PSA2MzE2MCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzMTkyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VtcHR5JwogICAgIHx8IGxrID09IDY0NTk0ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZW5kJwogICAgIHx8IGxrID09IDY0NjMzICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VuZCcKICAgICB8fCBsayA9PSA2NDY5NiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VuZCcKICAgICB8fCBsayA9PSA2NDcyOCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdlbmQnCiAgICAgfHwgbGsgPT0gNjU2MTggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlcScKICAgICB8fCBsayA9PSA2NTY1NyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlcScKICAgICB8fCBsayA9PSA2NTcyMCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VxJwogICAgIHx8IGxrID09IDY1NzUyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VxJwogICAgIHx8IGxrID09IDY3MTU0ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3MTkzICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzI1NiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzI4OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNzAyMjYgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmb3InCiAgICAgfHwgbGsgPT0gNzAyNjUgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZm9yJwogICAgIHx8IGxrID09IDcwMzI4ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZm9yJwogICAgIHx8IGxrID09IDcwMzYwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZvcicKICAgICB8fCBsayA9PSA3NDgzNCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2dlJwogICAgIHx8IGxrID09IDc0ODczICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2dlJwogICAgIHx8IGxrID09IDc0OTM2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzQ5NjggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU4NTggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdncm91cCcKICAgICB8fCBsayA9PSA3NTg5NyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdncm91cCcKICAgICB8fCBsayA9PSA3NTk2MCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc1OTkyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2dyb3VwJwogICAgIHx8IGxrID09IDc2ODgyICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzY5MjEgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzY5ODQgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdndCcKICAgICB8fCBsayA9PSA3NzAxNiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdndCcKICAgICB8fCBsayA9PSA3NzM5NCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzc0MzMgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaWRpdicKICAgICB8fCBsayA9PSA3NzQ5NiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzc1MjggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaWRpdicKICAgICB8fCBsayA9PSA4MjAwMiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgyMDQxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgyMTA0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODIxMzYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODMwMjYgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODMwNjUgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDgzMTI4ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDgzMTYwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4MzUzOCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ludG8nCiAgICAgfHwgbGsgPT0gODM1NzcgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW50bycKICAgICB8fCBsayA9PSA4MzY0MCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ludG8nCiAgICAgfHwgbGsgPT0gODM2NzIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW50bycKICAgICB8fCBsayA9PSA4NDA1MCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2lzJwogICAgIHx8IGxrID09IDg0MDg5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2lzJwogICAgIHx8IGxrID09IDg0MTUyICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaXMnCiAgICAgfHwgbGsgPT0gODQxODQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaXMnCiAgICAgfHwgbGsgPT0gODgxNDYgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsZScKICAgICB8fCBsayA9PSA4ODE4NSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsZScKICAgICB8fCBsayA9PSA4ODI0OCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xlJwogICAgIHx8IGxrID09IDg4MjgwICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xlJwogICAgIHx8IGxrID09IDg5MTcwICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbGV0JwogICAgIHx8IGxrID09IDg5MjA5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2xldCcKICAgICB8fCBsayA9PSA4OTI3MiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xldCcKICAgICB8fCBsayA9PSA4OTMwNCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdsZXQnCiAgICAgfHwgbGsgPT0gOTEyMTggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsdCcKICAgICB8fCBsayA9PSA5MTI1NyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsdCcKICAgICB8fCBsayA9PSA5MTMyMCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2x0JwogICAgIHx8IGxrID09IDkxMzUyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2x0JwogICAgIHx8IGxrID09IDkyMjQyICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbW9kJwogICAgIHx8IGxrID09IDkyMjgxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ21vZCcKICAgICB8fCBsayA9PSA5MjM0NCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ21vZCcKICAgICB8fCBsayA9PSA5MjM3NiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdtb2QnCiAgICAgfHwgbGsgPT0gOTI3NTQgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTI3OTMgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDkyODU2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDkyODg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ21vZGlmeScKICAgICB8fCBsayA9PSA5NTMxNCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ25lJwogICAgIHx8IGxrID09IDk1MzUzICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25lJwogICAgIHx8IGxrID09IDk1NDE2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbmUnCiAgICAgfHwgbGsgPT0gOTU0NDggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbmUnCiAgICAgfHwgbGsgPT0gMTAxNDU4ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvbmx5JwogICAgIHx8IGxrID09IDEwMTQ5NyAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAxNTYwICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvbmx5JwogICAgIHx8IGxrID09IDEwMTU5MiAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAyNDgyICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcicKICAgICB8fCBsayA9PSAxMDI1MjEgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvcicKICAgICB8fCBsayA9PSAxMDI1ODQgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yJwogICAgIHx8IGxrID09IDEwMjYxNiAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yJwogICAgIHx8IGxrID09IDEwMjk5NCAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAzMDMzICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAzMDk2ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDMxMjggICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdvcmRlcicKICAgICB8fCBsayA9PSAxMTI3MjIgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTI3NjEgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTEyODI0ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTEyODU2ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExNDc3MCAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNDgwOSAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTQ4NzIgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTQ5MDQgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTIwOTE0ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIwOTUzICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMTAxNiAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMTA0OCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjE0MjYgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyMTQ2NSAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyMTUyOCAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxNTYwICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTI3MDU4ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd0bycKICAgICB8fCBsayA9PSAxMjcwOTcgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0bycKICAgICB8fCBsayA9PSAxMjcxNjAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RvJwogICAgIHx8IGxrID09IDEyNzE5MiAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3RvJwogICAgIHx8IGxrID09IDEyNzU3MCAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI3NjA5ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI3NjcyICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMjc3MDQgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd0cmVhdCcKICAgICB8fCBsayA9PSAxMzAxMzAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMDE2OSAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMDIzMiAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMjY0ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTM2Mjc0ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd3aGVyZScKICAgICB8fCBsayA9PSAxMzYzMTMgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd3aGVyZScKICAgICB8fCBsayA9PSAxMzYzNzYgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzNjQwOCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3doZXJlJwogICAgIHx8IGxrID09IDEzODMyMiAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnd2l0aCcKICAgICB8fCBsayA9PSAxMzgzNjEgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd3aXRoJwogICAgIHx8IGxrID09IDEzODQyNCAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2l0aCcKICAgICB8fCBsayA9PSAxMzg0NTYpICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd3aXRoJwogICAgewogICAgICBsayA9IG1lbW9pemVkKDQsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X1Bvc3RmaXhFeHByKCk7CiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDQsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy4nCiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBjYXNlIDI3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgIGNhc2UgMzE1NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgRVFOYW1lXlRva2VuCiAgICBjYXNlIDMxOTM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgOTkxMjogICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgTkNOYW1lXlRva2VuCiAgICBjYXNlIDk5NDQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyBOQ05hbWVeVG9rZW4KICAgIGNhc2UgMTQ4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICcjJwogICAgY2FzZSAxNDkxODogICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICcjJwogICAgY2FzZSAxNDkyMDogICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICcjJwogICAgY2FzZSAxNDkyMTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICcjJwogICAgY2FzZSAxNDkyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJyMnCiAgICBjYXNlIDE0OTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnICcjJwogICAgY2FzZSAxNDkyNTogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnIycKICAgIGNhc2UgMTQ5MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnIycKICAgIGNhc2UgMTQ5Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJyAnIycKICAgIGNhc2UgMTQ5Mjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcgJyMnCiAgICBjYXNlIDE0OTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcjJwogICAgY2FzZSAxNDkzMjogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnIycKICAgIGNhc2UgMTQ5MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnIycKICAgIGNhc2UgMTQ5MzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcjJwogICAgY2FzZSAxNDkzNzogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJyMnCiAgICBjYXNlIDE0OTM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJyMnCiAgICBjYXNlIDE0OTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJyMnCiAgICBjYXNlIDE0OTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJyMnCiAgICBjYXNlIDE0OTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcjJwogICAgY2FzZSAxNDk0NDogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJyMnCiAgICBjYXNlIDE0OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnIycKICAgIGNhc2UgMTQ5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE0OTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnIycKICAgIGNhc2UgMTQ5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnIycKICAgIGNhc2UgMTQ5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknICcjJwogICAgY2FzZSAxNDk1MjogICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnIycKICAgIGNhc2UgMTQ5NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnIycKICAgIGNhc2UgMTQ5NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICcjJwogICAgY2FzZSAxNDk1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJyMnCiAgICBjYXNlIDE0OTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJyMnCiAgICBjYXNlIDE0OTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICcjJwogICAgY2FzZSAxNDk2ODogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJyMnCiAgICBjYXNlIDE0OTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnIycKICAgIGNhc2UgMTQ5NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICcjJwogICAgY2FzZSAxNDk3MTogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICcjJwogICAgY2FzZSAxNDk3MjogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnICcjJwogICAgY2FzZSAxNDk3MzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICcjJwogICAgY2FzZSAxNDk3NDogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnIycKICAgIGNhc2UgMTQ5NzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnIycKICAgIGNhc2UgMTQ5Nzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnIycKICAgIGNhc2UgMTQ5Nzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJyMnCiAgICBjYXNlIDE0OTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnIycKICAgIGNhc2UgMTQ5ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnIycKICAgIGNhc2UgMTQ5ODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnIycKICAgIGNhc2UgMTQ5ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJyMnCiAgICBjYXNlIDE0OTg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJyMnCiAgICBjYXNlIDE0OTg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICcjJwogICAgY2FzZSAxNDk4OTogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJyAnIycKICAgIGNhc2UgMTQ5OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJyAnIycKICAgIGNhc2UgMTQ5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JyAnIycKICAgIGNhc2UgMTQ5OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnICcjJwogICAgY2FzZSAxNTAwMDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcjJwogICAgY2FzZSAxNTAwMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnIycKICAgIGNhc2UgMTUwMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJyAnIycKICAgIGNhc2UgMTUwMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JyAnIycKICAgIGNhc2UgMTUwMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJyMnCiAgICBjYXNlIDE1MDA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScgJyMnCiAgICBjYXNlIDE1MDA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknICcjJwogICAgY2FzZSAxNTAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JyAnIycKICAgIGNhc2UgMTUwMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nICcjJwogICAgY2FzZSAxNTAxMjogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnICcjJwogICAgY2FzZSAxNTAxMzogICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScgJyMnCiAgICBjYXNlIDE1MDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnIycKICAgIGNhc2UgMTUwMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyMnCiAgICBjYXNlIDE1MDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JyAnIycKICAgIGNhc2UgMTUwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcgJyMnCiAgICBjYXNlIDE1MDIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdsZScgJyMnCiAgICBjYXNlIDE1MDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICcjJwogICAgY2FzZSAxNTAyNDogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcgJyMnCiAgICBjYXNlIDE1MDI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcgJyMnCiAgICBjYXNlIDE1MDI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnICcjJwogICAgY2FzZSAxNTAyOTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnIycKICAgIGNhc2UgMTUwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJyMnCiAgICBjYXNlIDE1MDMyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICcjJwogICAgY2FzZSAxNTAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnICcjJwogICAgY2FzZSAxNTAzNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnICcjJwogICAgY2FzZSAxNTAzOTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScgJyMnCiAgICBjYXNlIDE1MDQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycgJyMnCiAgICBjYXNlIDE1MDQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcjJwogICAgY2FzZSAxNTA0NjogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJyMnCiAgICBjYXNlIDE1MDQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcjJwogICAgY2FzZSAxNTA0ODogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcjJwogICAgY2FzZSAxNTA0OTogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcjJwogICAgY2FzZSAxNTA1MDogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJyMnCiAgICBjYXNlIDE1MDUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJyMnCiAgICBjYXNlIDE1MDU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcjJwogICAgY2FzZSAxNTA2MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnIycKICAgIGNhc2UgMTUwNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnIycKICAgIGNhc2UgMTUwNjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNTA2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnIycKICAgIGNhc2UgMTUwNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcjJwogICAgY2FzZSAxNTA2ODogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnIycKICAgIGNhc2UgMTUwNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJyMnCiAgICBjYXNlIDE1MDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcjJwogICAgY2FzZSAxNTA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnIycKICAgIGNhc2UgMTUwNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJyMnCiAgICBjYXNlIDE1MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTUwNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnIycKICAgIGNhc2UgMTUwNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcjJwogICAgY2FzZSAxNTA4MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJyMnCiAgICBjYXNlIDE1MDgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnIycKICAgIGNhc2UgMTUwODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJyMnCiAgICBjYXNlIDE1MDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJyMnCiAgICBjYXNlIDE1MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcjJwogICAgY2FzZSAxNTA5MDogICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnIycKICAgIGNhc2UgMTUwOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJyMnCiAgICBjYXNlIDE1MDkyOiAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAnIycKICAgIGNhc2UgMTUwOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnIycKICAgIGNhc2UgMTUwOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnIycKICAgIGNhc2UgMTUwOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJyMnCiAgICBjYXNlIDE1MDk5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJyMnCiAgICBjYXNlIDE1MTAwOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnIycKICAgIGNhc2UgMTUxMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICcjJwogICAgY2FzZSAxNTEwMjogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nICcjJwogICAgY2FzZSAxNTEwNDogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnIycKICAgIGNhc2UgMTUxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnIycKICAgIGNhc2UgMTUxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnIycKICAgIGNhc2UgMTUxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnIycKICAgIGNhc2UgMTUxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnIycKICAgIGNhc2UgMTUxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICcjJwogICAgY2FzZSAxNTExNDogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnICcjJwogICAgY2FzZSAxNTExNTogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcjJwogICAgY2FzZSAxNTExODogICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcgJyMnCiAgICBjYXNlIDE1MTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknICcjJwogICAgY2FzZSAxNzQxNDogICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJygnCiAgICBjYXNlIDE3NDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicgJygnCiAgICBjYXNlIDE3NDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJygnCiAgICBjYXNlIDE3NDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJygnCiAgICBjYXNlIDE3NDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTc0ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcgJygnCiAgICBjYXNlIDE3NDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcoJwogICAgY2FzZSAxNzQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXMnICcoJwogICAgY2FzZSAxNzQ4ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc0ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JyAnKCcKICAgIGNhc2UgMTc0OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnKCcKICAgIGNhc2UgMTc0OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJygnCiAgICBjYXNlIDE3NDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJygnCiAgICBjYXNlIDE3NDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJygnCiAgICBjYXNlIDE3NDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnKCcKICAgIGNhc2UgMTc0OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcoJwogICAgY2FzZSAxNzQ5ODogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcoJwogICAgY2FzZSAxNzQ5OTogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcoJwogICAgY2FzZSAxNzUwMTogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcoJwogICAgY2FzZSAxNzUwMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICcoJwogICAgY2FzZSAxNzUwNjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICcoJwogICAgY2FzZSAxNzUxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcoJwogICAgY2FzZSAxNzUxMTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJygnCiAgICBjYXNlIDE3NTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICcoJwogICAgY2FzZSAxNzUxMzogICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnICcoJwogICAgY2FzZSAxNzUxNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICcoJwogICAgY2FzZSAxNzUxNjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJygnCiAgICBjYXNlIDE3NTE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnKCcKICAgIGNhc2UgMTc1MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJygnCiAgICBjYXNlIDE3NTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnKCcKICAgIGNhc2UgMTc1MjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJygnCiAgICBjYXNlIDE3NTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc1MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicgJygnCiAgICBjYXNlIDE3NTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJygnCiAgICBjYXNlIDE3NTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnKCcKICAgIGNhc2UgMTc1MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnKCcKICAgIGNhc2UgMTc1MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnKCcKICAgIGNhc2UgMTc1MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJygnCiAgICBjYXNlIDE3NTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJygnCiAgICBjYXNlIDE3NTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJygnCiAgICBjYXNlIDE3NTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcoJwogICAgY2FzZSAxNzU0MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJygnCiAgICBjYXNlIDE3NTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJygnCiAgICBjYXNlIDE3NTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJygnCiAgICBjYXNlIDE3NTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcoJwogICAgY2FzZSAxNzU0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnKCcKICAgIGNhc2UgMTc1NDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJygnCiAgICBjYXNlIDE3NTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJygnCiAgICBjYXNlIDE3NTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJygnCiAgICBjYXNlIDE3NTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJygnCiAgICBjYXNlIDE3NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJygnCiAgICBjYXNlIDE3NTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnKCcKICAgIGNhc2UgMTc1NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJygnCiAgICBjYXNlIDE3NTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJygnCiAgICBjYXNlIDE3NTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJygnCiAgICBjYXNlIDE3NTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcoJwogICAgY2FzZSAxNzU2ODogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcoJwogICAgY2FzZSAxNzU2OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnKCcKICAgIGNhc2UgMTc1NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJygnCiAgICBjYXNlIDE3NTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnKCcKICAgIGNhc2UgMTc1NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnKCcKICAgIGNhc2UgMTc1NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgY2FzZSAxNzU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJygnCiAgICBjYXNlIDE3NTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcoJwogICAgY2FzZSAxNzU4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcoJwogICAgY2FzZSAxNzU4MjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnKCcKICAgIGNhc2UgMTc1ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcoJwogICAgY2FzZSAxNzU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcoJwogICAgY2FzZSAxNzU4ODogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnKCcKICAgIGNhc2UgMTc1ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJygnCiAgICBjYXNlIDE3NTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcoJwogICAgY2FzZSAxNzU5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnKCcKICAgIGNhc2UgMTc1OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnKCcKICAgIGNhc2UgMTc2MDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnKCcKICAgIGNhc2UgMTc2MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJygnCiAgICBjYXNlIDE3NjA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnKCcKICAgIGNhc2UgMTc2MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJygnCiAgICBjYXNlIDE3NjA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJygnCiAgICBjYXNlIDE3NjA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJygnCiAgICBjYXNlIDE3NjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnKCcKICAgIGNhc2UgMTc2MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnKCcKICAgIGNhc2UgMTc2MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJygnCiAgICBjYXNlIDE3NjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcoJwogICAgY2FzZSAxNzYyMTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzYyNjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnKCcKICAgIGNhc2UgMTc2Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcoJwogICAgY2FzZSAxNzYyODogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnKCcKICAgIGNhc2UgMTc2Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJygnCiAgICBjYXNlIDE3NjMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcoJwogICAgY2FzZSAxNzYzMjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnKCcKICAgIGNhc2UgMTc2MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJygnCiAgICBjYXNlIDE3NjM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScgJygnCiAgICBjYXNlIDE3NjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnKCcKICAgIGNhc2UgMTc2NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcoJwogICAgY2FzZSAxNzY0MzogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJygnCiAgICBjYXNlIDE3NjQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcoJwogICAgY2FzZSAxNzY0NTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcoJwogICAgY2FzZSAxNzY0ODogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnKCcKICAgIGNhc2UgMTc2NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnKCcKICAgIGNhc2UgMTc2NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnKCcKICAgIGNhc2UgMTc2NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJygnCiAgICBjYXNlIDE3NjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJygnCiAgICBjYXNlIDE3NjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnKCcKICAgIGNhc2UgMTc2NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnKCcKICAgIGNhc2UgMTc2NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJygnCiAgICBjYXNlIDE3NjY1OiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJygnCiAgICBjYXNlIDE3NjY4OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJygnCiAgICBjYXNlIDE3NjY5OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJygnCiAgICBjYXNlIDE3NjcwOiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJygnCiAgICBjYXNlIDE3NjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnKCcKICAgIGNhc2UgMTc2NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnKCcKICAgIGNhc2UgMTc2NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnKCcKICAgIGNhc2UgMTc2Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnICcoJwogICAgY2FzZSAxNzY4MjogICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnKCcKICAgIGNhc2UgMzY5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FsbG93aW5nJwogICAgY2FzZSAzNjk4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FsbG93aW5nJwogICAgY2FzZSAzNzA0ODogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYWxsb3dpbmcnCiAgICBjYXNlIDM3MDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYWxsb3dpbmcnCiAgICBjYXNlIDM3NDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhbmNlc3RvcicKICAgIGNhc2UgMzc0OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbmNlc3RvcicKICAgIGNhc2UgMzc1NjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FuY2VzdG9yJwogICAgY2FzZSAzNzU5MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FuY2VzdG9yJwogICAgY2FzZSAzNzk3MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzgwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSAzODA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzgxMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSAzOTUwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXBwZW5kJwogICAgY2FzZSAzOTU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FwcGVuZCcKICAgIGNhc2UgMzk2MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FwcGVuZCcKICAgIGNhc2UgMzk2NDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhcHBlbmQnCiAgICBjYXNlIDQwMDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhcnJheScKICAgIGNhc2UgNDAwNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhcnJheScKICAgIGNhc2UgNDIwNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDIxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQyMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQyMjAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXR0cmlidXRlJwogICAgY2FzZSA0MjU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYmFzZS11cmknCiAgICBjYXNlIDQyNjE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYmFzZS11cmknCiAgICBjYXNlIDQyNjgwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdiYXNlLXVyaScKICAgIGNhc2UgNDI3MTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdiYXNlLXVyaScKICAgIGNhc2UgNDM2MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0MzY0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0MzcwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQzNzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQ0MTE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdicmVhaycKICAgIGNhc2UgNDQxNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdicmVhaycKICAgIGNhc2UgNDQyMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2JyZWFrJwogICAgY2FzZSA0NDI0ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2JyZWFrJwogICAgY2FzZSA0NjY3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY2F0Y2gnCiAgICBjYXNlIDQ2NzEzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2F0Y2gnCiAgICBjYXNlIDQ2Nzc2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjYXRjaCcKICAgIGNhc2UgNDY4MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjYXRjaCcKICAgIGNhc2UgNDc2OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NoaWxkJwogICAgY2FzZSA0NzczNzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NoaWxkJwogICAgY2FzZSA0NzgwMDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2hpbGQnCiAgICBjYXNlIDQ3ODMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2hpbGQnCiAgICBjYXNlIDQ5MjM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb21tZW50JwogICAgY2FzZSA0OTI3MzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbW1lbnQnCiAgICBjYXNlIDQ5MzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb21tZW50JwogICAgY2FzZSA0OTM2ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbW1lbnQnCiAgICBjYXNlIDQ5NzQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb25zdHJhaW50JwogICAgY2FzZSA0OTc4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDQ5ODQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb25zdHJhaW50JwogICAgY2FzZSA0OTg4MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDUwMjU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUwMjk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MDM2MDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MDM5MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTE3OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NvbnRleHQnCiAgICBjYXNlIDUxODMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29udGV4dCcKICAgIGNhc2UgNTE4OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbnRleHQnCiAgICBjYXNlIDUxOTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY29udGV4dCcKICAgIGNhc2UgNTIzMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NvbnRpbnVlJwogICAgY2FzZSA1MjM0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnRpbnVlJwogICAgY2FzZSA1MjQwODogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29udGludWUnCiAgICBjYXNlIDUyNDQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY29udGludWUnCiAgICBjYXNlIDUyODE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb3B5JwogICAgY2FzZSA1Mjg1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvcHknCiAgICBjYXNlIDUyOTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb3B5JwogICAgY2FzZSA1Mjk1MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvcHknCiAgICBjYXNlIDUzMzMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDUzMzY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1MzQzMjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1MzQ2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTQzNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NDM5MzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NDQ1NjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDU0NDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDU1Mzc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWNsYXJlJwogICAgY2FzZSA1NTQxNzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlY2xhcmUnCiAgICBjYXNlIDU1NDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZWNsYXJlJwogICAgY2FzZSA1NTUxMjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlY2xhcmUnCiAgICBjYXNlIDU2NDAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWxldGUnCiAgICBjYXNlIDU2NDQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVsZXRlJwogICAgY2FzZSA1NjUwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVsZXRlJwogICAgY2FzZSA1NjUzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlbGV0ZScKICAgIGNhc2UgNTY5MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU2OTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTcwMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3MDQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTc0MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNTc0NjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU3NTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU3NTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA2MTAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYxMDQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZG9jdW1lbnQnCiAgICBjYXNlIDYxMTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkb2N1bWVudCcKICAgIGNhc2UgNjExNDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkb2N1bWVudCcKICAgIGNhc2UgNjE1MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYxNTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgNjE2MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYxNjU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgNjIwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VsZW1lbnQnCiAgICBjYXNlIDYyMDczOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZWxlbWVudCcKICAgIGNhc2UgNjIxMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VsZW1lbnQnCiAgICBjYXNlIDYyMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZWxlbWVudCcKICAgIGNhc2UgNjM1NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2MzYwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2MzY3MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDYzNzA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDY0MDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbmNvZGluZycKICAgIGNhc2UgNjQxMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbmNvZGluZycKICAgIGNhc2UgNjQxODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VuY29kaW5nJwogICAgY2FzZSA2NDIxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VuY29kaW5nJwogICAgY2FzZSA2NjEzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZXZlcnknCiAgICBjYXNlIDY2MTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXZlcnknCiAgICBjYXNlIDY2MjMyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdldmVyeScKICAgIGNhc2UgNjYyNjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdldmVyeScKICAgIGNhc2UgNjc2NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2V4aXQnCiAgICBjYXNlIDY3NzA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXhpdCcKICAgIGNhc2UgNjc3Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2V4aXQnCiAgICBjYXNlIDY3ODAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXhpdCcKICAgIGNhc2UgNjgxNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2V4dGVybmFsJwogICAgY2FzZSA2ODIxNzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V4dGVybmFsJwogICAgY2FzZSA2ODI4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY4MzEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY4NjkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmaXJzdCcKICAgIGNhc2UgNjg3Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmaXJzdCcKICAgIGNhc2UgNjg3OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ZpcnN0JwogICAgY2FzZSA2ODgyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZpcnN0JwogICAgY2FzZSA2OTIwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZm9sbG93aW5nJwogICAgY2FzZSA2OTI0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZvbGxvd2luZycKICAgIGNhc2UgNjkzMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ZvbGxvd2luZycKICAgIGNhc2UgNjkzMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmb2xsb3dpbmcnCiAgICBjYXNlIDY5NzE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgNjk3NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgNjk4MTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA2OTg0ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MjI3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3MjMxMzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzIzNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzI0MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmdC1vcHRpb24nCiAgICBjYXNlIDc0MzIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmdW5jdGlvbicKICAgIGNhc2UgNzQzNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmdW5jdGlvbicKICAgIGNhc2UgNzQ0MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NDQ1NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NzkwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaWYnCiAgICBjYXNlIDc3OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaWYnCiAgICBjYXNlIDc4MDA4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpZicKICAgIGNhc2UgNzgwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpZicKICAgIGNhc2UgNzg0MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ltcG9ydCcKICAgIGNhc2UgNzg0NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbXBvcnQnCiAgICBjYXNlIDc4NTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbXBvcnQnCiAgICBjYXNlIDc4NTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW1wb3J0JwogICAgY2FzZSA3ODkzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW4nCiAgICBjYXNlIDc4OTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW4nCiAgICBjYXNlIDc5MDMyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbicKICAgIGNhc2UgNzkwNjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbicKICAgIGNhc2UgNzk0NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2luZGV4JwogICAgY2FzZSA3OTQ4MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2luZGV4JwogICAgY2FzZSA3OTU0NDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW5kZXgnCiAgICBjYXNlIDc5NTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW5kZXgnCiAgICBjYXNlIDgxNDkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbnNlcnQnCiAgICBjYXNlIDgxNTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW5zZXJ0JwogICAgY2FzZSA4MTU5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW5zZXJ0JwogICAgY2FzZSA4MTYyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2luc2VydCcKICAgIGNhc2UgODI1MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ludGVncml0eScKICAgIGNhc2UgODI1NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnRlZ3JpdHknCiAgICBjYXNlIDgyNjE2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnRlZ3JpdHknCiAgICBjYXNlIDgyNjQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW50ZWdyaXR5JwogICAgY2FzZSA4NDU2MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaXRlbScKICAgIGNhc2UgODQ2MDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpdGVtJwogICAgY2FzZSA4NDY2NDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaXRlbScKICAgIGNhc2UgODQ2OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpdGVtJwogICAgY2FzZSA4NTA3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnanNvbicKICAgIGNhc2UgODUxMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdqc29uJwogICAgY2FzZSA4NTE3NjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnanNvbicKICAgIGNhc2UgODUyMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdqc29uJwogICAgY2FzZSA4NTU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnanNvbi1pdGVtJwogICAgY2FzZSA4NTYyNTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2pzb24taXRlbScKICAgIGNhc2UgODcxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xhc3QnCiAgICBjYXNlIDg3MTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGFzdCcKICAgIGNhc2UgODcyMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xhc3QnCiAgICBjYXNlIDg3MjU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGFzdCcKICAgIGNhc2UgODc2MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xheCcKICAgIGNhc2UgODc2NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsYXgnCiAgICBjYXNlIDg3NzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsYXgnCiAgICBjYXNlIDg3NzY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGF4JwogICAgY2FzZSA5MDE5NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbG9vcCcKICAgIGNhc2UgOTAyMzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsb29wJwogICAgY2FzZSA5MDI5NjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbG9vcCcKICAgIGNhc2UgOTAzMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdsb29wJwogICAgY2FzZSA5MzI2NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbW9kdWxlJwogICAgY2FzZSA5MzMwNTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ21vZHVsZScKICAgIGNhc2UgOTMzNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ21vZHVsZScKICAgIGNhc2UgOTM0MDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdtb2R1bGUnCiAgICBjYXNlIDk0MjkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICduYW1lc3BhY2UnCiAgICBjYXNlIDk0MzI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NDM5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NDQyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25hbWVzcGFjZScKICAgIGNhc2UgOTQ4MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NDg0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NDkwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDk0OTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDk3ODc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdub2RlJwogICAgY2FzZSA5NzkxMzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25vZGUnCiAgICBjYXNlIDk3OTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdub2RlJwogICAgY2FzZSA5ODAwODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25vZGUnCiAgICBjYXNlIDk4Mzg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdub2RlcycKICAgIGNhc2UgOTg0MjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdub2RlcycKICAgIGNhc2UgOTg0ODg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25vZGVzJwogICAgY2FzZSA5ODUyMDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25vZGVzJwogICAgY2FzZSA5OTQxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb2JqZWN0JwogICAgY2FzZSA5OTQ0OTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29iamVjdCcKICAgIGNhc2UgOTk1MTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29iamVjdCcKICAgIGNhc2UgOTk1NDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdvYmplY3QnCiAgICBjYXNlIDEwMTk3MDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcHRpb24nCiAgICBjYXNlIDEwMjAwOTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3B0aW9uJwogICAgY2FzZSAxMDIwNzI6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3B0aW9uJwogICAgY2FzZSAxMDIxMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29wdGlvbicKICAgIGNhc2UgMTAzNTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwMzU0NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3JkZXJlZCcKICAgIGNhc2UgMTAzNjA4OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwMzY0MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3JkZXJlZCcKICAgIGNhc2UgMTA0MDE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29yZGVyaW5nJwogICAgY2FzZSAxMDQwNTc6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29yZGVyaW5nJwogICAgY2FzZSAxMDQxMjA6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3JkZXJpbmcnCiAgICBjYXNlIDEwNDE1MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3JkZXJpbmcnCiAgICBjYXNlIDEwNTU1NDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdwYXJlbnQnCiAgICBjYXNlIDEwNTU5MzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncGFyZW50JwogICAgY2FzZSAxMDU2NTY6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncGFyZW50JwogICAgY2FzZSAxMDU2ODg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3BhcmVudCcKICAgIGNhc2UgMTA4NjI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ByZWNlZGluZycKICAgIGNhc2UgMTA4NjY1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdwcmVjZWRpbmcnCiAgICBjYXNlIDEwODcyODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdwcmVjZWRpbmcnCiAgICBjYXNlIDEwODc2MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncHJlY2VkaW5nJwogICAgY2FzZSAxMDkxMzg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDEwOTE3NzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDEwOTI0MDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMTA5MjcyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMTEwNjc0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMDcxMzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTEwNzc2OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMDgwODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTExNjk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JlbmFtZScKICAgIGNhc2UgMTExNzM3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZW5hbWUnCiAgICBjYXNlIDExMTgwMDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdyZW5hbWUnCiAgICBjYXNlIDExMTgzMjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmVuYW1lJwogICAgY2FzZSAxMTIyMTA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmVwbGFjZScKICAgIGNhc2UgMTEyMjQ5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZXBsYWNlJwogICAgY2FzZSAxMTIzMTI6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmVwbGFjZScKICAgIGNhc2UgMTEyMzQ0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXBsYWNlJwogICAgY2FzZSAxMTMyMzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmV0dXJuaW5nJwogICAgY2FzZSAxMTMyNzM6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3JldHVybmluZycKICAgIGNhc2UgMTEzMzM2OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JldHVybmluZycKICAgIGNhc2UgMTEzMzY4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXR1cm5pbmcnCiAgICBjYXNlIDExMzc0NjogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExMzc4NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTM4NDg6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTM4ODA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE1MjgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3NjaGVtYScKICAgIGNhc2UgMTE1MzIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzY2hlbWEnCiAgICBjYXNlIDExNTM4NDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzY2hlbWEnCiAgICBjYXNlIDExNTQxNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NoZW1hJwogICAgY2FzZSAxMTU3OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE1ODMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTU4OTY6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE1OTI4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTYzMDY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExNjM0NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExNjQwODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMTE2NDQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMTE2ODE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Njb3JlJwogICAgY2FzZSAxMTY4NTc6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3Njb3JlJwogICAgY2FzZSAxMTY5MjA6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NvcmUnCiAgICBjYXNlIDExNjk1MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NvcmUnCiAgICBjYXNlIDExNzMzMDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzZWxmJwogICAgY2FzZSAxMTczNjk6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NlbGYnCiAgICBjYXNlIDExNzQzMjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzZWxmJwogICAgY2FzZSAxMTc0NjQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NlbGYnCiAgICBjYXNlIDExOTg5MDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzbGlkaW5nJwogICAgY2FzZSAxMTk5Mjk6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NsaWRpbmcnCiAgICBjYXNlIDExOTk5MjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzbGlkaW5nJwogICAgY2FzZSAxMjAwMjQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMDQwMjogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzb21lJwogICAgY2FzZSAxMjA0NDE6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NvbWUnCiAgICBjYXNlIDEyMDUwNDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzb21lJwogICAgY2FzZSAxMjA1MzY6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NvbWUnCiAgICBjYXNlIDEyMjk2MjogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzdHJpY3QnCiAgICBjYXNlIDEyMzAwMTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RyaWN0JwogICAgY2FzZSAxMjMwNjQ6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RyaWN0JwogICAgY2FzZSAxMjMwOTY6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N0cmljdCcKICAgIGNhc2UgMTIzOTg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMTI0MDI1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDEyNDQ5ODogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzd2l0Y2gnCiAgICBjYXNlIDEyNDUzNzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3dpdGNoJwogICAgY2FzZSAxMjQ2MDA6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3dpdGNoJwogICAgY2FzZSAxMjQ2MzI6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N3aXRjaCcKICAgIGNhc2UgMTI1MDEwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RleHQnCiAgICBjYXNlIDEyNTA0OTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndGV4dCcKICAgIGNhc2UgMTI1MTEyOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RleHQnCiAgICBjYXNlIDEyNTE0NDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndGV4dCcKICAgIGNhc2UgMTI4MDgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RyeScKICAgIGNhc2UgMTI4MTIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0cnknCiAgICBjYXNlIDEyODE4NDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0cnknCiAgICBjYXNlIDEyODIxNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJ5JwogICAgY2FzZSAxMjg1OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndHVtYmxpbmcnCiAgICBjYXNlIDEyODYzMzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHVtYmxpbmcnCiAgICBjYXNlIDEyODY5NjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0dW1ibGluZycKICAgIGNhc2UgMTI4NzI4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd0dW1ibGluZycKICAgIGNhc2UgMTI5MTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGUnCiAgICBjYXNlIDEyOTE0NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZScKICAgIGNhc2UgMTI5MjA4OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGUnCiAgICBjYXNlIDEyOTI0MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZScKICAgIGNhc2UgMTI5NjE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEyOTY1NzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTI5NzIwOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEyOTc1MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMxMTU0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Vub3JkZXJlZCcKICAgIGNhc2UgMTMxMTkzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzMTI1NjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzMTI4ODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzE2NjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzMTcwNTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndXBkYXRpbmcnCiAgICBjYXNlIDEzMTc2ODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1cGRhdGluZycKICAgIGNhc2UgMTMxODAwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd1cGRhdGluZycKICAgIGNhc2UgMTMzMjAyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzMyNDE6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzMzMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzMzMzNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzMzcxNDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd2YWx1ZScKICAgIGNhc2UgMTMzNzUzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd2YWx1ZScKICAgIGNhc2UgMTMzODE2OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZhbHVlJwogICAgY2FzZSAxMzM4NDg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3ZhbHVlJwogICAgY2FzZSAxMzQyMjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNDI2NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmFyaWFibGUnCiAgICBjYXNlIDEzNDMyODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd2YXJpYWJsZScKICAgIGNhc2UgMTM0MzYwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd2YXJpYWJsZScKICAgIGNhc2UgMTM0NzM4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNDc3NzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmVyc2lvbicKICAgIGNhc2UgMTM0ODQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNDg3MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmVyc2lvbicKICAgIGNhc2UgMTM2Nzg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3doaWxlJwogICAgY2FzZSAxMzY4MjU6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3doaWxlJwogICAgY2FzZSAxMzY4ODg6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2hpbGUnCiAgICBjYXNlIDEzNjkyMDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2hpbGUnCiAgICBjYXNlIDE0MDM3MDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd4cXVlcnknCiAgICBjYXNlIDE0MDQwOTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAneHF1ZXJ5JwogICAgY2FzZSAxNDA0NzI6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAneHF1ZXJ5JwogICAgY2FzZSAxNDA1MDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3hxdWVyeScKICAgIGNhc2UgMTQxMzk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3snCiAgICBjYXNlIDE0MTQwODogICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAneycKICAgIGNhc2UgMTQxNDMxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAneycKICAgIGNhc2UgMTQxNDMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd7JwogICAgY2FzZSAxNDE0OTY6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAneycKICAgIGNhc2UgMTQxNTE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICd7JwogICAgY2FzZSAxNDE1Mjg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3snCiAgICBjYXNlIDE0MTU1NjogICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAneycKICAgIGNhc2UgMTQxNTY4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJ3snCiAgICAgIHBhcnNlX1Bvc3RmaXhFeHByKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQXhpc1N0ZXAoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RlcEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RlcEV4cHIoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGxvb2thaGVhZDJXKDI4NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgbG9va2FoZWFkMlcoMjgyKTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBsb29rYWhlYWQyVygyODEpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfAogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBsb29rYWhlYWQyVygyNDYpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBsb29rYWhlYWQyVygyMzkpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAyMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgbG9va2FoZWFkMlcoMjQ1KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA3MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICBjYXNlIDcyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgIGNhc2UgNzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgIGNhc2UgNzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgY2FzZSAxMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICBjYXNlIDEyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICBjYXNlIDE0MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgY2FzZSAxNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgY2FzZSAxNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgY2FzZSAxODI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE4NjogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgIGNhc2UgMTkxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBjYXNlIDE5MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICBjYXNlIDE5OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBjYXNlIDIwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgIGNhc2UgMjAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgY2FzZSAyMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICBjYXNlIDIxODogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICBjYXNlIDIxOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgY2FzZSAyMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgY2FzZSAyMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJwogICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgY2FzZSAyMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgIGNhc2UgMjM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgY2FzZSAyNDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgIGNhc2UgMjUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgIGNhc2UgMjUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgY2FzZSAyNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgIGNhc2UgMjcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGxvb2thaGVhZDJXKDI0Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAzNTkyMiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FmdGVyJwogICAgIHx8IGxrID09IDM1OTYxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FmdGVyJwogICAgIHx8IGxrID09IDM2MDI0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzYwNTYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzg0ODIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhbmQnCiAgICAgfHwgbGsgPT0gMzg1MjEgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYW5kJwogICAgIHx8IGxrID09IDM4NTg0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYW5kJwogICAgIHx8IGxrID09IDM4NjE2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FuZCcKICAgICB8fCBsayA9PSA0MDUzMCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FzJwogICAgIHx8IGxrID09IDQwNTY5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FzJwogICAgIHx8IGxrID09IDQwNjMyICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXMnCiAgICAgfHwgbGsgPT0gNDA2NjQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXMnCiAgICAgfHwgbGsgPT0gNDEwNDIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDEwODEgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxMTQ0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxMTc2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTU1NCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2F0JwogICAgIHx8IGxrID09IDQxNTkzICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2F0JwogICAgIHx8IGxrID09IDQxNjU2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYXQnCiAgICAgfHwgbGsgPT0gNDE2ODggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXQnCiAgICAgfHwgbGsgPT0gNDMwOTAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDMxMjkgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzMTkyICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzMjI0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0NTEzOCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDUxNzcgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2FzZScKICAgICB8fCBsayA9PSA0NTI0MCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDUyNzIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTY1MCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDU2ODkgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2FzdCcKICAgICB8fCBsayA9PSA0NTc1MiAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDU3ODQgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NjE2MiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ2MjAxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ2MjY0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDYyOTYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDgyMTAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDgyNDkgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4MzEyICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4MzQ0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA1Mzg0MiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NvdW50JwogICAgIHx8IGxrID09IDUzODgxICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvdW50JwogICAgIHx8IGxrID09IDUzOTQ0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTM5NzYgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTU4OTAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU1OTI5ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTU5OTIgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2MDI0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTc5MzggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU3OTc3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNTgwNDAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4MDcyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjA0OTggICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkaXYnCiAgICAgfHwgbGsgPT0gNjA1MzcgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGl2JwogICAgIHx8IGxrID09IDYwNjAwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGl2JwogICAgIHx8IGxrID09IDYwNjMyICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RpdicKICAgICB8fCBsayA9PSA2MjU0NiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjI1ODUgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZWxzZScKICAgICB8fCBsayA9PSA2MjY0OCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjI2ODAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZWxzZScKICAgICB8fCBsayA9PSA2MzA1OCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzMDk3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzMTYwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjMxOTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjQ1OTQgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbmQnCiAgICAgfHwgbGsgPT0gNjQ2MzMgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZW5kJwogICAgIHx8IGxrID09IDY0Njk2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZW5kJwogICAgIHx8IGxrID09IDY0NzI4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VuZCcKICAgICB8fCBsayA9PSA2NTYxOCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VxJwogICAgIHx8IGxrID09IDY1NjU3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VxJwogICAgIHx8IGxrID09IDY1NzIwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXEnCiAgICAgfHwgbGsgPT0gNjU3NTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXEnCiAgICAgfHwgbGsgPT0gNjcxNTQgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjcxOTMgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3MjU2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3Mjg4ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA3MDIyNiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ZvcicKICAgICB8fCBsayA9PSA3MDI2NSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmb3InCiAgICAgfHwgbGsgPT0gNzAzMjggICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdmb3InCiAgICAgfHwgbGsgPT0gNzAzNjAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZm9yJwogICAgIHx8IGxrID09IDc0ODM0ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzQ4NzMgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzQ5MzYgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdnZScKICAgICB8fCBsayA9PSA3NDk2OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdnZScKICAgICB8fCBsayA9PSA3NTg1OCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2dyb3VwJwogICAgIHx8IGxrID09IDc1ODk3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2dyb3VwJwogICAgIHx8IGxrID09IDc1OTYwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzU5OTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY4ODIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdndCcKICAgICB8fCBsayA9PSA3NjkyMSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdndCcKICAgICB8fCBsayA9PSA3Njk4NCAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2d0JwogICAgIHx8IGxrID09IDc3MDE2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2d0JwogICAgIHx8IGxrID09IDc3Mzk0ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaWRpdicKICAgICB8fCBsayA9PSA3NzQzMyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpZGl2JwogICAgIHx8IGxrID09IDc3NDk2ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaWRpdicKICAgICB8fCBsayA9PSA3NzUyOCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpZGl2JwogICAgIHx8IGxrID09IDgyMDAyICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODIwNDEgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODIxMDQgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MjEzNiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbnN0YW5jZScKICAgICB8fCBsayA9PSA4MzAyNiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4MzA2NSAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODMxMjggICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODMxNjAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDgzNTM4ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW50bycKICAgICB8fCBsayA9PSA4MzU3NyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnRvJwogICAgIHx8IGxrID09IDgzNjQwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW50bycKICAgICB8fCBsayA9PSA4MzY3MiAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbnRvJwogICAgIHx8IGxrID09IDg0MDUwICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaXMnCiAgICAgfHwgbGsgPT0gODQwODkgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaXMnCiAgICAgfHwgbGsgPT0gODQxNTIgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpcycKICAgICB8fCBsayA9PSA4NDE4NCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpcycKICAgICB8fCBsayA9PSA4ODE0NiAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xlJwogICAgIHx8IGxrID09IDg4MTg1ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2xlJwogICAgIHx8IGxrID09IDg4MjQ4ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbGUnCiAgICAgfHwgbGsgPT0gODgyODAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGUnCiAgICAgfHwgbGsgPT0gODkxNzAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdsZXQnCiAgICAgfHwgbGsgPT0gODkyMDkgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGV0JwogICAgIHx8IGxrID09IDg5MjcyICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbGV0JwogICAgIHx8IGxrID09IDg5MzA0ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2xldCcKICAgICB8fCBsayA9PSA5MTIxOCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2x0JwogICAgIHx8IGxrID09IDkxMjU3ICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2x0JwogICAgIHx8IGxrID09IDkxMzIwICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbHQnCiAgICAgfHwgbGsgPT0gOTEzNTIgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbHQnCiAgICAgfHwgbGsgPT0gOTIyNDIgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdtb2QnCiAgICAgfHwgbGsgPT0gOTIyODEgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbW9kJwogICAgIHx8IGxrID09IDkyMzQ0ICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbW9kJwogICAgIHx8IGxrID09IDkyMzc2ICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ21vZCcKICAgICB8fCBsayA9PSA5Mjc1NCAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5Mjc5MyAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTI4NTYgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTI4ODggICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDk1MzE0ICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbmUnCiAgICAgfHwgbGsgPT0gOTUzNTMgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbmUnCiAgICAgfHwgbGsgPT0gOTU0MTYgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICduZScKICAgICB8fCBsayA9PSA5NTQ0OCAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICduZScKICAgICB8fCBsayA9PSAxMDE0NTggICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAxNDk3ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb25seScKICAgICB8fCBsayA9PSAxMDE1NjAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAxNTkyICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb25seScKICAgICB8fCBsayA9PSAxMDI0ODIgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29yJwogICAgIHx8IGxrID09IDEwMjUyMSAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29yJwogICAgIHx8IGxrID09IDEwMjU4NCAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3InCiAgICAgfHwgbGsgPT0gMTAyNjE2ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3InCiAgICAgfHwgbGsgPT0gMTAyOTk0ICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDMwMzMgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdvcmRlcicKICAgICB8fCBsayA9PSAxMDMwOTYgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yZGVyJwogICAgIHx8IGxrID09IDEwMzEyOCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29yZGVyJwogICAgIHx8IGxrID09IDExMjcyMiAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExMjc2MSAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTI4MjQgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTI4NTYgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTE0NzcwICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE0ODA5ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNDg3MiAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNDkwNCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMjA5MTQgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjA5NTMgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIxMDE2ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIxMDQ4ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMTQyNiAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxNDY1ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxNTI4ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzdGFydCcKICAgICB8fCBsayA9PSAxMjE1NjAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzdGFydCcKICAgICB8fCBsayA9PSAxMjcwNTggICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RvJwogICAgIHx8IGxrID09IDEyNzA5NyAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3RvJwogICAgIHx8IGxrID09IDEyNzE2MCAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3MTkyICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3NTcwICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMjc2MDkgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0cmVhdCcKICAgICB8fCBsayA9PSAxMjc2NzIgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RyZWF0JwogICAgIHx8IGxrID09IDEyNzcwNCAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3RyZWF0JwogICAgIHx8IGxrID09IDEzMDEzMCAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMTY5ICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMjMyICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1bmlvbicKICAgICB8fCBsayA9PSAxMzAyNjQgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd1bmlvbicKICAgICB8fCBsayA9PSAxMzYyNzQgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3doZXJlJwogICAgIHx8IGxrID09IDEzNjMxMyAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3doZXJlJwogICAgIHx8IGxrID09IDEzNjM3NiAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2NDA4ICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM4MzIyICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd3aXRoJwogICAgIHx8IGxrID09IDEzODM2MSAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTM4NDI0ICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd3aXRoJwogICAgIHx8IGxrID09IDEzODQ1NikgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3dpdGgnCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoNCwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfUG9zdGZpeEV4cHIoKTsKICAgICAgICAgIG1lbW9pemUoNCwgZTBBLCAtMSk7CiAgICAgICAgICBsayA9IC0zOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSg0LCBlMEEsIC0yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy4nCiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBjYXNlIDI3ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgIGNhc2UgMzE1NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgRVFOYW1lXlRva2VuCiAgICBjYXNlIDMxOTM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgOTkxMjogICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgTkNOYW1lXlRva2VuCiAgICBjYXNlIDk5NDQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyBOQ05hbWVeVG9rZW4KICAgIGNhc2UgMTQ4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICcjJwogICAgY2FzZSAxNDkxODogICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICcjJwogICAgY2FzZSAxNDkyMDogICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICcjJwogICAgY2FzZSAxNDkyMTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICcjJwogICAgY2FzZSAxNDkyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJyMnCiAgICBjYXNlIDE0OTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnICcjJwogICAgY2FzZSAxNDkyNTogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnIycKICAgIGNhc2UgMTQ5MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnIycKICAgIGNhc2UgMTQ5Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJyAnIycKICAgIGNhc2UgMTQ5Mjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcgJyMnCiAgICBjYXNlIDE0OTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcjJwogICAgY2FzZSAxNDkzMjogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnIycKICAgIGNhc2UgMTQ5MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnIycKICAgIGNhc2UgMTQ5MzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcjJwogICAgY2FzZSAxNDkzNzogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJyMnCiAgICBjYXNlIDE0OTM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJyMnCiAgICBjYXNlIDE0OTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJyMnCiAgICBjYXNlIDE0OTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJyMnCiAgICBjYXNlIDE0OTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcjJwogICAgY2FzZSAxNDk0NDogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJyMnCiAgICBjYXNlIDE0OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnIycKICAgIGNhc2UgMTQ5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE0OTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnIycKICAgIGNhc2UgMTQ5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnIycKICAgIGNhc2UgMTQ5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknICcjJwogICAgY2FzZSAxNDk1MjogICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnIycKICAgIGNhc2UgMTQ5NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnIycKICAgIGNhc2UgMTQ5NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICcjJwogICAgY2FzZSAxNDk1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJyMnCiAgICBjYXNlIDE0OTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJyMnCiAgICBjYXNlIDE0OTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICcjJwogICAgY2FzZSAxNDk2ODogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJyMnCiAgICBjYXNlIDE0OTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnIycKICAgIGNhc2UgMTQ5NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICcjJwogICAgY2FzZSAxNDk3MTogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknICcjJwogICAgY2FzZSAxNDk3MjogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnICcjJwogICAgY2FzZSAxNDk3MzogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICcjJwogICAgY2FzZSAxNDk3NDogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJyAnIycKICAgIGNhc2UgMTQ5NzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJyAnIycKICAgIGNhc2UgMTQ5Nzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnIycKICAgIGNhc2UgMTQ5Nzk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJyMnCiAgICBjYXNlIDE0OTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JyAnIycKICAgIGNhc2UgMTQ5ODE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnIycKICAgIGNhc2UgMTQ5ODI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnIycKICAgIGNhc2UgMTQ5ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJyMnCiAgICBjYXNlIDE0OTg0OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJyMnCiAgICBjYXNlIDE0OTg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICcjJwogICAgY2FzZSAxNDk4OTogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnIycKICAgIGNhc2UgMTQ5OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJyAnIycKICAgIGNhc2UgMTQ5OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJyAnIycKICAgIGNhc2UgMTQ5OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JyAnIycKICAgIGNhc2UgMTQ5OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnICcjJwogICAgY2FzZSAxNTAwMDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcjJwogICAgY2FzZSAxNTAwMTogICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnIycKICAgIGNhc2UgMTUwMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJyAnIycKICAgIGNhc2UgMTUwMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JyAnIycKICAgIGNhc2UgMTUwMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJyMnCiAgICBjYXNlIDE1MDA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScgJyMnCiAgICBjYXNlIDE1MDA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknICcjJwogICAgY2FzZSAxNTAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JyAnIycKICAgIGNhc2UgMTUwMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nICcjJwogICAgY2FzZSAxNTAxMjogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnICcjJwogICAgY2FzZSAxNTAxMzogICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScgJyMnCiAgICBjYXNlIDE1MDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJyAnIycKICAgIGNhc2UgMTUwMTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJyMnCiAgICBjYXNlIDE1MDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JyAnIycKICAgIGNhc2UgMTUwMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcgJyMnCiAgICBjYXNlIDE1MDIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdsZScgJyMnCiAgICBjYXNlIDE1MDIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICcjJwogICAgY2FzZSAxNTAyNDogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcgJyMnCiAgICBjYXNlIDE1MDI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdsdCcgJyMnCiAgICBjYXNlIDE1MDI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnICcjJwogICAgY2FzZSAxNTAyOTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnIycKICAgIGNhc2UgMTUwMzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJyMnCiAgICBjYXNlIDE1MDMyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICcjJwogICAgY2FzZSAxNTAzMzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnICcjJwogICAgY2FzZSAxNTAzNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmUnICcjJwogICAgY2FzZSAxNTAzOTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScgJyMnCiAgICBjYXNlIDE1MDQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycgJyMnCiAgICBjYXNlIDE1MDQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcjJwogICAgY2FzZSAxNTA0NjogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScgJyMnCiAgICBjYXNlIDE1MDQ3OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nICcjJwogICAgY2FzZSAxNTA0ODogICAgICAgICAgICAgICAgICAgICAvLyAnb3InICcjJwogICAgY2FzZSAxNTA0OTogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInICcjJwogICAgY2FzZSAxNTA1MDogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJyMnCiAgICBjYXNlIDE1MDUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJyMnCiAgICBjYXNlIDE1MDU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICcjJwogICAgY2FzZSAxNTA2MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnIycKICAgIGNhc2UgMTUwNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnIycKICAgIGNhc2UgMTUwNjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcjJwogICAgY2FzZSAxNTA2NjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnIycKICAgIGNhc2UgMTUwNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcjJwogICAgY2FzZSAxNTA2ODogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnIycKICAgIGNhc2UgMTUwNjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJyMnCiAgICBjYXNlIDE1MDcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcjJwogICAgY2FzZSAxNTA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnIycKICAgIGNhc2UgMTUwNzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJyMnCiAgICBjYXNlIDE1MDc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnIycKICAgIGNhc2UgMTUwNzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnIycKICAgIGNhc2UgMTUwNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcjJwogICAgY2FzZSAxNTA4MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJyMnCiAgICBjYXNlIDE1MDgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnIycKICAgIGNhc2UgMTUwODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJyMnCiAgICBjYXNlIDE1MDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJyMnCiAgICBjYXNlIDE1MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcjJwogICAgY2FzZSAxNTA5MDogICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnIycKICAgIGNhc2UgMTUwOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJyMnCiAgICBjYXNlIDE1MDkyOiAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAnIycKICAgIGNhc2UgMTUwOTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnIycKICAgIGNhc2UgMTUwOTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnIycKICAgIGNhc2UgMTUwOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJyMnCiAgICBjYXNlIDE1MDk5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJyMnCiAgICBjYXNlIDE1MTAwOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnIycKICAgIGNhc2UgMTUxMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICcjJwogICAgY2FzZSAxNTEwMjogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nICcjJwogICAgY2FzZSAxNTEwNDogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnIycKICAgIGNhc2UgMTUxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnIycKICAgIGNhc2UgMTUxMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnIycKICAgIGNhc2UgMTUxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnIycKICAgIGNhc2UgMTUxMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnIycKICAgIGNhc2UgMTUxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICcjJwogICAgY2FzZSAxNTExNDogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnICcjJwogICAgY2FzZSAxNTExNTogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcjJwogICAgY2FzZSAxNTExODogICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcgJyMnCiAgICBjYXNlIDE1MTIyOiAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknICcjJwogICAgY2FzZSAxNzQxNDogICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJygnCiAgICBjYXNlIDE3NDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicgJygnCiAgICBjYXNlIDE3NDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJygnCiAgICBjYXNlIDE3NDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJygnCiAgICBjYXNlIDE3NDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTc0ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcgJygnCiAgICBjYXNlIDE3NDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcoJwogICAgY2FzZSAxNzQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXMnICcoJwogICAgY2FzZSAxNzQ4ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc0ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JyAnKCcKICAgIGNhc2UgMTc0OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnKCcKICAgIGNhc2UgMTc0OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJygnCiAgICBjYXNlIDE3NDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJygnCiAgICBjYXNlIDE3NDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJygnCiAgICBjYXNlIDE3NDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnKCcKICAgIGNhc2UgMTc0OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcoJwogICAgY2FzZSAxNzQ5ODogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcoJwogICAgY2FzZSAxNzQ5OTogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcoJwogICAgY2FzZSAxNzUwMTogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcoJwogICAgY2FzZSAxNzUwMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICcoJwogICAgY2FzZSAxNzUwNjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICcoJwogICAgY2FzZSAxNzUxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcoJwogICAgY2FzZSAxNzUxMTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJygnCiAgICBjYXNlIDE3NTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICcoJwogICAgY2FzZSAxNzUxMzogICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnICcoJwogICAgY2FzZSAxNzUxNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICcoJwogICAgY2FzZSAxNzUxNjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJygnCiAgICBjYXNlIDE3NTE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnKCcKICAgIGNhc2UgMTc1MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJygnCiAgICBjYXNlIDE3NTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnKCcKICAgIGNhc2UgMTc1MjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJygnCiAgICBjYXNlIDE3NTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc1MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicgJygnCiAgICBjYXNlIDE3NTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJygnCiAgICBjYXNlIDE3NTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnKCcKICAgIGNhc2UgMTc1MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnKCcKICAgIGNhc2UgMTc1MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnKCcKICAgIGNhc2UgMTc1MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJygnCiAgICBjYXNlIDE3NTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJygnCiAgICBjYXNlIDE3NTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJygnCiAgICBjYXNlIDE3NTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcoJwogICAgY2FzZSAxNzU0MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJygnCiAgICBjYXNlIDE3NTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJygnCiAgICBjYXNlIDE3NTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJygnCiAgICBjYXNlIDE3NTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcoJwogICAgY2FzZSAxNzU0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnKCcKICAgIGNhc2UgMTc1NDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJygnCiAgICBjYXNlIDE3NTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJygnCiAgICBjYXNlIDE3NTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJygnCiAgICBjYXNlIDE3NTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJygnCiAgICBjYXNlIDE3NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJygnCiAgICBjYXNlIDE3NTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnKCcKICAgIGNhc2UgMTc1NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJygnCiAgICBjYXNlIDE3NTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJygnCiAgICBjYXNlIDE3NTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJygnCiAgICBjYXNlIDE3NTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcoJwogICAgY2FzZSAxNzU2ODogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcoJwogICAgY2FzZSAxNzU2OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnKCcKICAgIGNhc2UgMTc1NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJygnCiAgICBjYXNlIDE3NTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnKCcKICAgIGNhc2UgMTc1NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnKCcKICAgIGNhc2UgMTc1NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgY2FzZSAxNzU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJygnCiAgICBjYXNlIDE3NTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcoJwogICAgY2FzZSAxNzU4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcoJwogICAgY2FzZSAxNzU4MjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnKCcKICAgIGNhc2UgMTc1ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcoJwogICAgY2FzZSAxNzU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcoJwogICAgY2FzZSAxNzU4ODogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnKCcKICAgIGNhc2UgMTc1ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJygnCiAgICBjYXNlIDE3NTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcoJwogICAgY2FzZSAxNzU5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnKCcKICAgIGNhc2UgMTc1OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnKCcKICAgIGNhc2UgMTc2MDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnKCcKICAgIGNhc2UgMTc2MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJygnCiAgICBjYXNlIDE3NjA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnKCcKICAgIGNhc2UgMTc2MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJygnCiAgICBjYXNlIDE3NjA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJygnCiAgICBjYXNlIDE3NjA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJygnCiAgICBjYXNlIDE3NjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnKCcKICAgIGNhc2UgMTc2MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnKCcKICAgIGNhc2UgMTc2MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJygnCiAgICBjYXNlIDE3NjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcoJwogICAgY2FzZSAxNzYyMTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzYyNjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnKCcKICAgIGNhc2UgMTc2Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcoJwogICAgY2FzZSAxNzYyODogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnKCcKICAgIGNhc2UgMTc2Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJygnCiAgICBjYXNlIDE3NjMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcoJwogICAgY2FzZSAxNzYzMjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnKCcKICAgIGNhc2UgMTc2MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJygnCiAgICBjYXNlIDE3NjM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScgJygnCiAgICBjYXNlIDE3NjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnKCcKICAgIGNhc2UgMTc2NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcoJwogICAgY2FzZSAxNzY0MzogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJygnCiAgICBjYXNlIDE3NjQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcoJwogICAgY2FzZSAxNzY0NTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcoJwogICAgY2FzZSAxNzY0ODogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnKCcKICAgIGNhc2UgMTc2NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnKCcKICAgIGNhc2UgMTc2NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnKCcKICAgIGNhc2UgMTc2NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJygnCiAgICBjYXNlIDE3NjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJygnCiAgICBjYXNlIDE3NjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnKCcKICAgIGNhc2UgMTc2NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnKCcKICAgIGNhc2UgMTc2NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJygnCiAgICBjYXNlIDE3NjY1OiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJygnCiAgICBjYXNlIDE3NjY4OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJygnCiAgICBjYXNlIDE3NjY5OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJygnCiAgICBjYXNlIDE3NjcwOiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJygnCiAgICBjYXNlIDE3NjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnKCcKICAgIGNhc2UgMTc2NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnKCcKICAgIGNhc2UgMTc2NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnKCcKICAgIGNhc2UgMTc2Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnICcoJwogICAgY2FzZSAxNzY4MjogICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnKCcKICAgIGNhc2UgMzY5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2FsbG93aW5nJwogICAgY2FzZSAzNjk4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FsbG93aW5nJwogICAgY2FzZSAzNzA0ODogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYWxsb3dpbmcnCiAgICBjYXNlIDM3MDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYWxsb3dpbmcnCiAgICBjYXNlIDM3NDU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhbmNlc3RvcicKICAgIGNhc2UgMzc0OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbmNlc3RvcicKICAgIGNhc2UgMzc1NjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FuY2VzdG9yJwogICAgY2FzZSAzNzU5MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2FuY2VzdG9yJwogICAgY2FzZSAzNzk3MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzgwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSAzODA3MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMzgxMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhbmNlc3Rvci1vci1zZWxmJwogICAgY2FzZSAzOTUwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYXBwZW5kJwogICAgY2FzZSAzOTU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2FwcGVuZCcKICAgIGNhc2UgMzk2MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2FwcGVuZCcKICAgIGNhc2UgMzk2NDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdhcHBlbmQnCiAgICBjYXNlIDQwMDE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdhcnJheScKICAgIGNhc2UgNDAwNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhcnJheScKICAgIGNhc2UgNDIwNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2F0dHJpYnV0ZScKICAgIGNhc2UgNDIxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQyMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdhdHRyaWJ1dGUnCiAgICBjYXNlIDQyMjAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYXR0cmlidXRlJwogICAgY2FzZSA0MjU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnYmFzZS11cmknCiAgICBjYXNlIDQyNjE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnYmFzZS11cmknCiAgICBjYXNlIDQyNjgwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdiYXNlLXVyaScKICAgIGNhc2UgNDI3MTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdiYXNlLXVyaScKICAgIGNhc2UgNDM2MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0MzY0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA0MzcwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQzNzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnYm91bmRhcnktc3BhY2UnCiAgICBjYXNlIDQ0MTE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdicmVhaycKICAgIGNhc2UgNDQxNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdicmVhaycKICAgIGNhc2UgNDQyMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2JyZWFrJwogICAgY2FzZSA0NDI0ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2JyZWFrJwogICAgY2FzZSA0NjY3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnY2F0Y2gnCiAgICBjYXNlIDQ2NzEzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY2F0Y2gnCiAgICBjYXNlIDQ2Nzc2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjYXRjaCcKICAgIGNhc2UgNDY4MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdjYXRjaCcKICAgIGNhc2UgNDc2OTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NoaWxkJwogICAgY2FzZSA0NzczNzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NoaWxkJwogICAgY2FzZSA0NzgwMDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY2hpbGQnCiAgICBjYXNlIDQ3ODMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY2hpbGQnCiAgICBjYXNlIDQ5MjM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb21tZW50JwogICAgY2FzZSA0OTI3MzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbW1lbnQnCiAgICBjYXNlIDQ5MzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb21tZW50JwogICAgY2FzZSA0OTM2ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbW1lbnQnCiAgICBjYXNlIDQ5NzQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb25zdHJhaW50JwogICAgY2FzZSA0OTc4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDQ5ODQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb25zdHJhaW50JwogICAgY2FzZSA0OTg4MDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDUwMjU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDUwMjk3OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MDM2MDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29uc3RydWN0aW9uJwogICAgY2FzZSA1MDM5MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvbnN0cnVjdGlvbicKICAgIGNhc2UgNTE3OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NvbnRleHQnCiAgICBjYXNlIDUxODMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29udGV4dCcKICAgIGNhc2UgNTE4OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2NvbnRleHQnCiAgICBjYXNlIDUxOTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY29udGV4dCcKICAgIGNhc2UgNTIzMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2NvbnRpbnVlJwogICAgY2FzZSA1MjM0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvbnRpbnVlJwogICAgY2FzZSA1MjQwODogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29udGludWUnCiAgICBjYXNlIDUyNDQwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnY29udGludWUnCiAgICBjYXNlIDUyODE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb3B5JwogICAgY2FzZSA1Mjg1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2NvcHknCiAgICBjYXNlIDUyOTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdjb3B5JwogICAgY2FzZSA1Mjk1MjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvcHknCiAgICBjYXNlIDUzMzMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdjb3B5LW5hbWVzcGFjZXMnCiAgICBjYXNlIDUzMzY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1MzQzMjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSA1MzQ2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgNTQzNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NDM5MzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlY2ltYWwtZm9ybWF0JwogICAgY2FzZSA1NDQ1NjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDU0NDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDU1Mzc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWNsYXJlJwogICAgY2FzZSA1NTQxNzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2RlY2xhcmUnCiAgICBjYXNlIDU1NDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZWNsYXJlJwogICAgY2FzZSA1NTUxMjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlY2xhcmUnCiAgICBjYXNlIDU2NDAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdkZWxldGUnCiAgICBjYXNlIDU2NDQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVsZXRlJwogICAgY2FzZSA1NjUwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZGVsZXRlJwogICAgY2FzZSA1NjUzNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2RlbGV0ZScKICAgIGNhc2UgNTY5MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU2OTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTcwMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDU3MDQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVzY2VuZGFudCcKICAgIGNhc2UgNTc0MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgNTc0NjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU3NTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDU3NTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSA2MTAxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZG9jdW1lbnQnCiAgICBjYXNlIDYxMDQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZG9jdW1lbnQnCiAgICBjYXNlIDYxMTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdkb2N1bWVudCcKICAgIGNhc2UgNjExNDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdkb2N1bWVudCcKICAgIGNhc2UgNjE1MjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYxNTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgNjE2MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDYxNjU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgNjIwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VsZW1lbnQnCiAgICBjYXNlIDYyMDczOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZWxlbWVudCcKICAgIGNhc2UgNjIxMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VsZW1lbnQnCiAgICBjYXNlIDYyMTY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZWxlbWVudCcKICAgIGNhc2UgNjM1NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2MzYwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2VtcHR5LXNlcXVlbmNlJwogICAgY2FzZSA2MzY3MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDYzNzA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZW1wdHktc2VxdWVuY2UnCiAgICBjYXNlIDY0MDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdlbmNvZGluZycKICAgIGNhc2UgNjQxMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdlbmNvZGluZycKICAgIGNhc2UgNjQxODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2VuY29kaW5nJwogICAgY2FzZSA2NDIxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2VuY29kaW5nJwogICAgY2FzZSA2NjEzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZXZlcnknCiAgICBjYXNlIDY2MTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXZlcnknCiAgICBjYXNlIDY2MjMyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdldmVyeScKICAgIGNhc2UgNjYyNjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdldmVyeScKICAgIGNhc2UgNjc2NjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2V4aXQnCiAgICBjYXNlIDY3NzA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnZXhpdCcKICAgIGNhc2UgNjc3Njg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2V4aXQnCiAgICBjYXNlIDY3ODAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXhpdCcKICAgIGNhc2UgNjgxNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2V4dGVybmFsJwogICAgY2FzZSA2ODIxNzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2V4dGVybmFsJwogICAgY2FzZSA2ODI4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY4MzEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnZXh0ZXJuYWwnCiAgICBjYXNlIDY4NjkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmaXJzdCcKICAgIGNhc2UgNjg3Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmaXJzdCcKICAgIGNhc2UgNjg3OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ZpcnN0JwogICAgY2FzZSA2ODgyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZpcnN0JwogICAgY2FzZSA2OTIwMjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZm9sbG93aW5nJwogICAgY2FzZSA2OTI0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2ZvbGxvd2luZycKICAgIGNhc2UgNjkzMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ZvbGxvd2luZycKICAgIGNhc2UgNjkzMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmb2xsb3dpbmcnCiAgICBjYXNlIDY5NzE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgNjk3NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgNjk4MTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA2OTg0ODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSA3MjI3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnZnQtb3B0aW9uJwogICAgY2FzZSA3MjMxMzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzIzNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Z0LW9wdGlvbicKICAgIGNhc2UgNzI0MDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdmdC1vcHRpb24nCiAgICBjYXNlIDc0MzIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdmdW5jdGlvbicKICAgIGNhc2UgNzQzNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdmdW5jdGlvbicKICAgIGNhc2UgNzQ0MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NDQ1NjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2Z1bmN0aW9uJwogICAgY2FzZSA3NzkwNjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaWYnCiAgICBjYXNlIDc3OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaWYnCiAgICBjYXNlIDc4MDA4OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpZicKICAgIGNhc2UgNzgwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpZicKICAgIGNhc2UgNzg0MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ltcG9ydCcKICAgIGNhc2UgNzg0NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbXBvcnQnCiAgICBjYXNlIDc4NTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbXBvcnQnCiAgICBjYXNlIDc4NTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW1wb3J0JwogICAgY2FzZSA3ODkzMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaW4nCiAgICBjYXNlIDc4OTY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW4nCiAgICBjYXNlIDc5MDMyOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbicKICAgIGNhc2UgNzkwNjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpbicKICAgIGNhc2UgNzk0NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2luZGV4JwogICAgY2FzZSA3OTQ4MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2luZGV4JwogICAgY2FzZSA3OTU0NDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW5kZXgnCiAgICBjYXNlIDc5NTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW5kZXgnCiAgICBjYXNlIDgxNDkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdpbnNlcnQnCiAgICBjYXNlIDgxNTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnaW5zZXJ0JwogICAgY2FzZSA4MTU5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaW5zZXJ0JwogICAgY2FzZSA4MTYyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ2luc2VydCcKICAgIGNhc2UgODI1MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2ludGVncml0eScKICAgIGNhc2UgODI1NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpbnRlZ3JpdHknCiAgICBjYXNlIDgyNjE2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdpbnRlZ3JpdHknCiAgICBjYXNlIDgyNjQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnaW50ZWdyaXR5JwogICAgY2FzZSA4NDU2MjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnaXRlbScKICAgIGNhc2UgODQ2MDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdpdGVtJwogICAgY2FzZSA4NDY2NDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnaXRlbScKICAgIGNhc2UgODQ2OTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdpdGVtJwogICAgY2FzZSA4NTA3NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnanNvbicKICAgIGNhc2UgODUxMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdqc29uJwogICAgY2FzZSA4NTE3NjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnanNvbicKICAgIGNhc2UgODUyMDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdqc29uJwogICAgY2FzZSA4NTU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnanNvbi1pdGVtJwogICAgY2FzZSA4NTYyNTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ2pzb24taXRlbScKICAgIGNhc2UgODcxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xhc3QnCiAgICBjYXNlIDg3MTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbGFzdCcKICAgIGNhc2UgODcyMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ2xhc3QnCiAgICBjYXNlIDg3MjU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGFzdCcKICAgIGNhc2UgODc2MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ2xheCcKICAgIGNhc2UgODc2NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsYXgnCiAgICBjYXNlIDg3NzM2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdsYXgnCiAgICBjYXNlIDg3NzY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbGF4JwogICAgY2FzZSA5MDE5NDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbG9vcCcKICAgIGNhc2UgOTAyMzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdsb29wJwogICAgY2FzZSA5MDI5NjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbG9vcCcKICAgIGNhc2UgOTAzMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdsb29wJwogICAgY2FzZSA5MzI2NjogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnbW9kdWxlJwogICAgY2FzZSA5MzMwNTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ21vZHVsZScKICAgIGNhc2UgOTMzNjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ21vZHVsZScKICAgIGNhc2UgOTM0MDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdtb2R1bGUnCiAgICBjYXNlIDk0MjkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICduYW1lc3BhY2UnCiAgICBjYXNlIDk0MzI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NDM5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbmFtZXNwYWNlJwogICAgY2FzZSA5NDQyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25hbWVzcGFjZScKICAgIGNhc2UgOTQ4MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NDg0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSA5NDkwNDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDk0OTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDk3ODc0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdub2RlJwogICAgY2FzZSA5NzkxMzogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ25vZGUnCiAgICBjYXNlIDk3OTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdub2RlJwogICAgY2FzZSA5ODAwODogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25vZGUnCiAgICBjYXNlIDk4Mzg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdub2RlcycKICAgIGNhc2UgOTg0MjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdub2RlcycKICAgIGNhc2UgOTg0ODg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ25vZGVzJwogICAgY2FzZSA5ODUyMDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ25vZGVzJwogICAgY2FzZSA5OTQxMDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnb2JqZWN0JwogICAgY2FzZSA5OTQ0OTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29iamVjdCcKICAgIGNhc2UgOTk1MTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29iamVjdCcKICAgIGNhc2UgOTk1NDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdvYmplY3QnCiAgICBjYXNlIDEwMTk3MDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdvcHRpb24nCiAgICBjYXNlIDEwMjAwOTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3B0aW9uJwogICAgY2FzZSAxMDIwNzI6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3B0aW9uJwogICAgY2FzZSAxMDIxMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ29wdGlvbicKICAgIGNhc2UgMTAzNTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwMzU0NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnb3JkZXJlZCcKICAgIGNhc2UgMTAzNjA4OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ29yZGVyZWQnCiAgICBjYXNlIDEwMzY0MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3JkZXJlZCcKICAgIGNhc2UgMTA0MDE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ29yZGVyaW5nJwogICAgY2FzZSAxMDQwNTc6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ29yZGVyaW5nJwogICAgY2FzZSAxMDQxMjA6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnb3JkZXJpbmcnCiAgICBjYXNlIDEwNDE1MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnb3JkZXJpbmcnCiAgICBjYXNlIDEwNTU1NDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdwYXJlbnQnCiAgICBjYXNlIDEwNTU5MzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncGFyZW50JwogICAgY2FzZSAxMDU2NTY6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncGFyZW50JwogICAgY2FzZSAxMDU2ODg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3BhcmVudCcKICAgIGNhc2UgMTA4NjI2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ByZWNlZGluZycKICAgIGNhc2UgMTA4NjY1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdwcmVjZWRpbmcnCiAgICBjYXNlIDEwODcyODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdwcmVjZWRpbmcnCiAgICBjYXNlIDEwODc2MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncHJlY2VkaW5nJwogICAgY2FzZSAxMDkxMzg6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDEwOTE3NzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICBjYXNlIDEwOTI0MDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMTA5MjcyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMTEwNjc0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMDcxMzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTEwNzc2OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDExMDgwODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMTExNjk4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3JlbmFtZScKICAgIGNhc2UgMTExNzM3OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZW5hbWUnCiAgICBjYXNlIDExMTgwMDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdyZW5hbWUnCiAgICBjYXNlIDExMTgzMjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAncmVuYW1lJwogICAgY2FzZSAxMTIyMTA6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmVwbGFjZScKICAgIGNhc2UgMTEyMjQ5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdyZXBsYWNlJwogICAgY2FzZSAxMTIzMTI6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmVwbGFjZScKICAgIGNhc2UgMTEyMzQ0OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXBsYWNlJwogICAgY2FzZSAxMTMyMzQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAncmV0dXJuaW5nJwogICAgY2FzZSAxMTMyNzM6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3JldHVybmluZycKICAgIGNhc2UgMTEzMzM2OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3JldHVybmluZycKICAgIGNhc2UgMTEzMzY4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdyZXR1cm5pbmcnCiAgICBjYXNlIDExMzc0NjogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDExMzc4NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTM4NDg6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAncmV2YWxpZGF0aW9uJwogICAgY2FzZSAxMTM4ODA6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMTE1MjgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3NjaGVtYScKICAgIGNhc2UgMTE1MzIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzY2hlbWEnCiAgICBjYXNlIDExNTM4NDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzY2hlbWEnCiAgICBjYXNlIDExNTQxNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NoZW1hJwogICAgY2FzZSAxMTU3OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE1ODMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTU4OTY6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMTE1OTI4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAxMTYzMDY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExNjM0NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDExNjQwODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMTE2NDQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMTE2ODE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Njb3JlJwogICAgY2FzZSAxMTY4NTc6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3Njb3JlJwogICAgY2FzZSAxMTY5MjA6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc2NvcmUnCiAgICBjYXNlIDExNjk1MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnc2NvcmUnCiAgICBjYXNlIDExNzMzMDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzZWxmJwogICAgY2FzZSAxMTczNjk6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NlbGYnCiAgICBjYXNlIDExNzQzMjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzZWxmJwogICAgY2FzZSAxMTc0NjQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NlbGYnCiAgICBjYXNlIDExOTg5MDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzbGlkaW5nJwogICAgY2FzZSAxMTk5Mjk6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NsaWRpbmcnCiAgICBjYXNlIDExOTk5MjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzbGlkaW5nJwogICAgY2FzZSAxMjAwMjQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NsaWRpbmcnCiAgICBjYXNlIDEyMDQwMjogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzb21lJwogICAgY2FzZSAxMjA0NDE6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3NvbWUnCiAgICBjYXNlIDEyMDUwNDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICdzb21lJwogICAgY2FzZSAxMjA1MzY6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3NvbWUnCiAgICBjYXNlIDEyMjk2MjogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzdHJpY3QnCiAgICBjYXNlIDEyMzAwMTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3RyaWN0JwogICAgY2FzZSAxMjMwNjQ6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3RyaWN0JwogICAgY2FzZSAxMjMwOTY6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N0cmljdCcKICAgIGNhc2UgMTIzOTg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMTI0MDI1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDEyNDQ5ODogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICdzd2l0Y2gnCiAgICBjYXNlIDEyNDUzNzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnc3dpdGNoJwogICAgY2FzZSAxMjQ2MDA6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnc3dpdGNoJwogICAgY2FzZSAxMjQ2MzI6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3N3aXRjaCcKICAgIGNhc2UgMTI1MDEwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RleHQnCiAgICBjYXNlIDEyNTA0OTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndGV4dCcKICAgIGNhc2UgMTI1MTEyOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3RleHQnCiAgICBjYXNlIDEyNTE0NDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndGV4dCcKICAgIGNhc2UgMTI4MDgyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3RyeScKICAgIGNhc2UgMTI4MTIxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd0cnknCiAgICBjYXNlIDEyODE4NDogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0cnknCiAgICBjYXNlIDEyODIxNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHJ5JwogICAgY2FzZSAxMjg1OTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndHVtYmxpbmcnCiAgICBjYXNlIDEyODYzMzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHVtYmxpbmcnCiAgICBjYXNlIDEyODY5NjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd0dW1ibGluZycKICAgIGNhc2UgMTI4NzI4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd0dW1ibGluZycKICAgIGNhc2UgMTI5MTA2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGUnCiAgICBjYXNlIDEyOTE0NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZScKICAgIGNhc2UgMTI5MjA4OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGUnCiAgICBjYXNlIDEyOTI0MDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZScKICAgIGNhc2UgMTI5NjE4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEyOTY1NzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTI5NzIwOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3R5cGVzd2l0Y2gnCiAgICBjYXNlIDEyOTc1MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTMxMTU0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3Vub3JkZXJlZCcKICAgIGNhc2UgMTMxMTkzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzMTI1NjogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1bm9yZGVyZWQnCiAgICBjYXNlIDEzMTI4ODogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndW5vcmRlcmVkJwogICAgY2FzZSAxMzE2NjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndXBkYXRpbmcnCiAgICBjYXNlIDEzMTcwNTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndXBkYXRpbmcnCiAgICBjYXNlIDEzMTc2ODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd1cGRhdGluZycKICAgIGNhc2UgMTMxODAwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd1cGRhdGluZycKICAgIGNhc2UgMTMzMjAyOiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzMyNDE6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3ZhbGlkYXRlJwogICAgY2FzZSAxMzMzMDQ6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzMzMzNjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmFsaWRhdGUnCiAgICBjYXNlIDEzMzcxNDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd2YWx1ZScKICAgIGNhc2UgMTMzNzUzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd2YWx1ZScKICAgIGNhc2UgMTMzODE2OiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZhbHVlJwogICAgY2FzZSAxMzM4NDg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3ZhbHVlJwogICAgY2FzZSAxMzQyMjY6ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAndmFyaWFibGUnCiAgICBjYXNlIDEzNDI2NTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmFyaWFibGUnCiAgICBjYXNlIDEzNDMyODogICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd2YXJpYWJsZScKICAgIGNhc2UgMTM0MzYwOiAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd2YXJpYWJsZScKICAgIGNhc2UgMTM0NzM4OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNDc3NzogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAndmVyc2lvbicKICAgIGNhc2UgMTM0ODQwOiAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ3ZlcnNpb24nCiAgICBjYXNlIDEzNDg3MjogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAndmVyc2lvbicKICAgIGNhc2UgMTM2Nzg2OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3doaWxlJwogICAgY2FzZSAxMzY4MjU6ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJ3doaWxlJwogICAgY2FzZSAxMzY4ODg6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnd2hpbGUnCiAgICBjYXNlIDEzNjkyMDogICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnd2hpbGUnCiAgICBjYXNlIDE0MDM3MDogICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd4cXVlcnknCiAgICBjYXNlIDE0MDQwOTogICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAneHF1ZXJ5JwogICAgY2FzZSAxNDA0NzI6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAneHF1ZXJ5JwogICAgY2FzZSAxNDA1MDQ6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3hxdWVyeScKICAgIGNhc2UgMTQxMzk0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ3snCiAgICBjYXNlIDE0MTQwODogICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAneycKICAgIGNhc2UgMTQxNDMxOiAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAneycKICAgIGNhc2UgMTQxNDMzOiAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd7JwogICAgY2FzZSAxNDE0OTY6ICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAneycKICAgIGNhc2UgMTQxNTE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICd7JwogICAgY2FzZSAxNDE1Mjg6ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ3snCiAgICBjYXNlIDE0MTU1NjogICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAneycKICAgIGNhc2UgMTQxNTY4OiAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJ3snCiAgICAgIHRyeV9Qb3N0Zml4RXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTM6CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0F4aXNTdGVwKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BeGlzU3RlcCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkF4aXNTdGVwIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBsb29rYWhlYWQyVygyNDEpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzonIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy4uJwogICAgY2FzZSAyNjE4NTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICc6OicKICAgIGNhc2UgMjYxODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICc6OicKICAgIGNhc2UgMjYzMTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJzo6JwogICAgY2FzZSAyNjMyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnOjonCiAgICBjYXNlIDI2MzI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJzo6JwogICAgICBwYXJzZV9SZXZlcnNlU3RlcCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0ZvcndhcmRTdGVwKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygyMzcpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfUHJlZGljYXRlTGlzdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBeGlzU3RlcCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BeGlzU3RlcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBsb29rYWhlYWQyVygyNDEpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzonIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy4uJwogICAgY2FzZSAyNjE4NTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICc6OicKICAgIGNhc2UgMjYxODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICc6OicKICAgIGNhc2UgMjYzMTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJzo6JwogICAgY2FzZSAyNjMyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnOjonCiAgICBjYXNlIDI2MzI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJzo6JwogICAgICB0cnlfUmV2ZXJzZVN0ZXAoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRm9yd2FyZFN0ZXAoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDIzNyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICB0cnlfUHJlZGljYXRlTGlzdCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRm9yd2FyZFN0ZXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGb3J3YXJkU3RlcCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGxvb2thaGVhZDJXKDI0NCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICBicmVhazsKICAgIGNhc2UgOTM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgMTM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSAyMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgbG9va2FoZWFkMlcoMjQxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDI2MTk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICc6OicKICAgIGNhc2UgMjYyMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnOjonCiAgICBjYXNlIDI2MjIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnOjonCiAgICBjYXNlIDI2MjI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICc6OicKICAgIGNhc2UgMjYyNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJzo6JwogICAgY2FzZSAyNjI0ODogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICc6OicKICAgIGNhc2UgMjYzNDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICc6OicKICAgICAgcGFyc2VfRm9yd2FyZEF4aXMoKTsKICAgICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTm9kZVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9BYmJyZXZGb3J3YXJkU3RlcCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGb3J3YXJkU3RlcCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Gb3J3YXJkU3RlcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgbG9va2FoZWFkMlcoMjQ0KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBsb29rYWhlYWQyVygyNDEpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzonIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMjYxOTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJzo6JwogICAgY2FzZSAyNjIwNTogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICc6OicKICAgIGNhc2UgMjYyMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICc6OicKICAgIGNhc2UgMjYyMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJzo6JwogICAgY2FzZSAyNjI0NzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnOjonCiAgICBjYXNlIDI2MjQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJzo6JwogICAgY2FzZSAyNjM0MTogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicgJzo6JwogICAgICB0cnlfRm9yd2FyZEF4aXMoKTsKICAgICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9Ob2RlVGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9BYmJyZXZGb3J3YXJkU3RlcCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRm9yd2FyZEF4aXMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGb3J3YXJkQXhpcyIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnQoOTMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnQoNTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIHNoaWZ0KDExMSk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnQoNTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnQoODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0KDExMik7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzNik7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnQoNTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGb3J3YXJkQXhpcyIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Gb3J3YXJkQXhpcygpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgOTM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBzaGlmdFQoOTMpOyAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnRUKDExMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBzaGlmdFQoODIpOyAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUxKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0VCgyMjkpOyAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUxKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgc2hpZnRUKDExMik7ICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1MSk7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgc2hpZnRUKDEzNik7ICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUxKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxMzUpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BYmJyZXZGb3J3YXJkU3RlcCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFiYnJldkZvcndhcmRTdGVwIiwgZTApOwogICAgaWYgKGwxID09IDY2KSAgICAgICAgICAgICAgICAgICAvLyAnQCcKICAgIHsKICAgICAgc2hpZnQoNjYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ0AnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNTYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfTm9kZVRlc3QoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQWJicmV2Rm9yd2FyZFN0ZXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQWJicmV2Rm9yd2FyZFN0ZXAoKQogIHsKICAgIGlmIChsMSA9PSA2NikgICAgICAgICAgICAgICAgICAgLy8gJ0AnCiAgICB7CiAgICAgIHNoaWZ0VCg2Nik7ICAgICAgICAgICAgICAgICAgIC8vICdAJwogICAgfQogICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9Ob2RlVGVzdCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV2ZXJzZVN0ZXAoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJSZXZlcnNlU3RlcCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDQ1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICAgICAgcGFyc2VfQWJicmV2UmV2ZXJzZVN0ZXAoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9SZXZlcnNlQXhpcygpOwogICAgICBsb29rYWhlYWQxVygyNTYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Ob2RlVGVzdCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZXZlcnNlU3RlcCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9SZXZlcnNlU3RlcCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJy4uJwogICAgICB0cnlfQWJicmV2UmV2ZXJzZVN0ZXAoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfUmV2ZXJzZUF4aXMoKTsKICAgICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9Ob2RlVGVzdCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV2ZXJzZUF4aXMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJSZXZlcnNlQXhpcyIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIHNoaWZ0KDIwNik7ICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdCg1MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDczKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnQoMjEzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnQoNTEpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnQoMjEyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCg3NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0KDUxKTsgICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUmV2ZXJzZUF4aXMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmV2ZXJzZUF4aXMoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIHNoaWZ0VCgyMDYpOyAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICAgIGxvb2thaGVhZDFXKDI2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo6JwogICAgICBzaGlmdFQoNTEpOyAgICAgICAgICAgICAgICAgICAvLyAnOjonCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0VCg3Myk7ICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1MSk7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnRUKDIxMyk7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBsb29rYWhlYWQxVygyNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6OicKICAgICAgc2hpZnRUKDUxKTsgICAgICAgICAgICAgICAgICAgLy8gJzo6JwogICAgICBicmVhazsKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnRUKDIxMik7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1MSk7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgbG9va2FoZWFkMVcoMjYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOjonCiAgICAgIHNoaWZ0VCg1MSk7ICAgICAgICAgICAgICAgICAgIC8vICc6OicKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0FiYnJldlJldmVyc2VTdGVwKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQWJicmV2UmV2ZXJzZVN0ZXAiLCBlMCk7CiAgICBzaGlmdCg0NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQWJicmV2UmV2ZXJzZVN0ZXAiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQWJicmV2UmV2ZXJzZVN0ZXAoKQogIHsKICAgIHNoaWZ0VCg0NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJy4uJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTm9kZVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOb2RlVGVzdCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgMTkxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgbG9va2FoZWFkMlcoMjQwKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE3NDkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICcoJwogICAgY2FzZSAxNzUwNDogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJygnCiAgICBjYXNlIDE3NTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyAnKCcKICAgIGNhc2UgMTc1Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICcoJwogICAgY2FzZSAxNzU5MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnICcoJwogICAgY2FzZSAxNzU5OTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScgJygnCiAgICBjYXNlIDE3NjI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnKCcKICAgIGNhc2UgMTc2MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnICcoJwogICAgY2FzZSAxNzYzNTogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnICcoJwogICAgY2FzZSAxNzY1MjogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJygnCiAgICAgIHBhcnNlX0tpbmRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfTmFtZVRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiTm9kZVRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfTm9kZVRlc3QoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGNhc2UgMTkxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgbG9va2FoZWFkMlcoMjQwKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE3NDkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICcoJwogICAgY2FzZSAxNzUwNDogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJygnCiAgICBjYXNlIDE3NTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyAnKCcKICAgIGNhc2UgMTc1Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICcoJwogICAgY2FzZSAxNzU5MzogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnICcoJwogICAgY2FzZSAxNzU5OTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScgJygnCiAgICBjYXNlIDE3NjI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnKCcKICAgIGNhc2UgMTc2MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnICcoJwogICAgY2FzZSAxNzYzNTogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnICcoJwogICAgY2FzZSAxNzY1MjogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJygnCiAgICAgIHRyeV9LaW5kVGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9OYW1lVGVzdCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTmFtZVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOYW1lVGVzdCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkCiAgICAgIHNoaWZ0KDUpOyAgICAgICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRVFOYW1lKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5hbWVUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05hbWVUZXN0KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBzaGlmdFQoNSk7ICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FUU5hbWUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1Bvc3RmaXhFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUG9zdGZpeEV4cHIiLCBlMCk7CiAgICBwYXJzZV9QcmltYXJ5RXhwcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjQwKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgIGlmIChsMSAhPSAzNCAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICAgJiYgbDEgIT0gNjgpICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1ByZWRpY2F0ZSgpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9Bcmd1bWVudExpc3QoKTsKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQb3N0Zml4RXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Qb3N0Zml4RXhwcigpCiAgewogICAgdHJ5X1ByaW1hcnlFeHByKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyNDApOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgaWYgKGwxICE9IDM0ICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgICAmJiBsMSAhPSA2OCkgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgICB0cnlfUHJlZGljYXRlKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdHJ5X0FyZ3VtZW50TGlzdCgpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Bcmd1bWVudExpc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcmd1bWVudExpc3QiLCBlMCk7CiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjc1KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQXJndW1lbnQoKTsKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfQXJndW1lbnQoKTsKICAgICAgfQogICAgfQogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJndW1lbnRMaXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0FyZ3VtZW50TGlzdCgpCiAgewogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI3NSk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMzcpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB0cnlfQXJndW1lbnQoKTsKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDI3MCk7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB0cnlfQXJndW1lbnQoKTsKICAgICAgfQogICAgfQogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ByZWRpY2F0ZUxpc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVkaWNhdGVMaXN0IiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjM3KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc6JyB8CiAgICAgIGlmIChsMSAhPSA2OCkgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QcmVkaWNhdGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJlZGljYXRlTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9QcmVkaWNhdGVMaXN0KCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyMzcpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzonIHwKICAgICAgaWYgKGwxICE9IDY4KSAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0cnlfUHJlZGljYXRlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QcmVkaWNhdGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVkaWNhdGUiLCBlMCk7CiAgICBzaGlmdCg2OCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDY5KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZWRpY2F0ZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9QcmVkaWNhdGUoKQogIHsKICAgIHNoaWZ0VCg2OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCg2OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9MaXRlcmFsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTGl0ZXJhbCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX051bWVyaWNMaXRlcmFsKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkxpdGVyYWwiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfTGl0ZXJhbCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBzaGlmdFQoMTEpOyAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X051bWVyaWNMaXRlcmFsKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9OdW1lcmljTGl0ZXJhbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk51bWVyaWNMaXRlcmFsIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIHNoaWZ0KDkpOyAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTApOyAgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbAogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJOdW1lcmljTGl0ZXJhbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9OdW1lcmljTGl0ZXJhbCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgc2hpZnRUKDgpOyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIHNoaWZ0VCg5KTsgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDEwKTsgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbAogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmFyUmVmKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVmFyUmVmIiwgZTApOwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJWYXJSZWYiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVmFyUmVmKCkKICB7CiAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfVmFyTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmFyTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlZhck5hbWUiLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVmFyTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9WYXJOYW1lKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QYXJlbnRoZXNpemVkRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBhcmVudGhlc2l6ZWRFeHByIiwgZTApOwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2OCk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMzcpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgIH0KICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhcmVudGhlc2l6ZWRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhcmVudGhlc2l6ZWRFeHByKCkKICB7CiAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY4KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHRyeV9FeHByKCk7CiAgICB9CiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29udGV4dEl0ZW1FeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29udGV4dEl0ZW1FeHByIiwgZTApOwogICAgc2hpZnQoNDQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnLicKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29udGV4dEl0ZW1FeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbnRleHRJdGVtRXhwcigpCiAgewogICAgc2hpZnRUKDQ0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnLicKICB9CgogIGZ1bmN0aW9uIHBhcnNlX09yZGVyZWRFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT3JkZXJlZEV4cHIiLCBlMCk7CiAgICBzaGlmdCgyMDIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJPcmRlcmVkRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9PcmRlcmVkRXhwcigpCiAgewogICAgc2hpZnRUKDIwMik7ICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Vbm9yZGVyZWRFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVW5vcmRlcmVkRXhwciIsIGUwKTsKICAgIHNoaWZ0KDI1Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVW5vcmRlcmVkRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Vbm9yZGVyZWRFeHByKCkKICB7CiAgICBzaGlmdFQoMjU2KTsgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25DYWxsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25DYWxsIiwgZTApOwogICAgcGFyc2VfRnVuY3Rpb25OYW1lKCk7CiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Bcmd1bWVudExpc3QoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25DYWxsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Z1bmN0aW9uQ2FsbCgpCiAgewogICAgdHJ5X0Z1bmN0aW9uTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgdHJ5X0FyZ3VtZW50TGlzdCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXJndW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcmd1bWVudCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDY0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBwYXJzZV9Bcmd1bWVudFBsYWNlaG9sZGVyKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBcmd1bWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Bcmd1bWVudCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIHRyeV9Bcmd1bWVudFBsYWNlaG9sZGVyKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0FyZ3VtZW50UGxhY2Vob2xkZXIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcmd1bWVudFBsYWNlaG9sZGVyIiwgZTApOwogICAgc2hpZnQoNjQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJndW1lbnRQbGFjZWhvbGRlciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Bcmd1bWVudFBsYWNlaG9sZGVyKCkKICB7CiAgICBzaGlmdFQoNjQpOyAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICBwYXJzZV9EaXJlY3RDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0NvbXB1dGVkQ29uc3RydWN0b3IoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29uc3RydWN0b3IoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzw/JwogICAgICB0cnlfRGlyZWN0Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tcHV0ZWRDb25zdHJ1Y3RvcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGlyZWN0Q29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEaXJlY3RDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICBwYXJzZV9EaXJFbGVtQ29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgICBwYXJzZV9EaXJDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9EaXJQSUNvbnN0cnVjdG9yKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRpcmVjdENvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RpcmVjdENvbnN0cnVjdG9yKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA1NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICAgdHJ5X0RpckVsZW1Db25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgNTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgIHRyeV9EaXJDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRGlyUElDb25zdHJ1Y3RvcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGlyRWxlbUNvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRGlyRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoNTQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgIGxvb2thaGVhZDEoNCk7ICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHNoaWZ0KDIwKTsgICAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHBhcnNlX0RpckF0dHJpYnV0ZUxpc3QoKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDQ4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgc2hpZnQoNDgpOyAgICAgICAgICAgICAgICAgICAgLy8gJy8+JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDYxKTsgICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMSgxNzQpOyAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbiB8IFByZWRlZmluZWRFbnRpdHlSZWYgfCBFbGVtZW50Q29udGVudENoYXIgfCBDaGFyUmVmIHwgJzwnIHwKICAgICAgICBpZiAobDEgPT0gNTYpICAgICAgICAgICAgICAgLy8gJzwvJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBwYXJzZV9EaXJFbGVtQ29udGVudCgpOwogICAgICB9CiAgICAgIHNoaWZ0KDU2KTsgICAgICAgICAgICAgICAgICAgIC8vICc8LycKICAgICAgbG9va2FoZWFkMSg0KTsgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgc2hpZnQoMjApOyAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgbG9va2FoZWFkMSgxMik7ICAgICAgICAgICAgICAgLy8gUyB8ICc+JwogICAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIHsKICAgICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgLy8gUwogICAgICB9CiAgICAgIGxvb2thaGVhZDEoOCk7ICAgICAgICAgICAgICAgIC8vICc+JwogICAgICBzaGlmdCg2MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGlyRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RpckVsZW1Db25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDU0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgIGxvb2thaGVhZDEoNCk7ICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHNoaWZ0VCgyMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgIHRyeV9EaXJBdHRyaWJ1dGVMaXN0KCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA0ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLz4nCiAgICAgIHNoaWZ0VCg0OCk7ICAgICAgICAgICAgICAgICAgIC8vICcvPicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnPicKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDEoMTc0KTsgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb24gfCBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRWxlbWVudENvbnRlbnRDaGFyIHwgQ2hhclJlZiB8ICc8JyB8CiAgICAgICAgaWYgKGwxID09IDU2KSAgICAgICAgICAgICAgIC8vICc8LycKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdHJ5X0RpckVsZW1Db250ZW50KCk7CiAgICAgIH0KICAgICAgc2hpZnRUKDU2KTsgICAgICAgICAgICAgICAgICAgLy8gJzwvJwogICAgICBsb29rYWhlYWQxKDQpOyAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICBzaGlmdFQoMjApOyAgICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICBsb29rYWhlYWQxKDEyKTsgICAgICAgICAgICAgICAvLyBTIHwgJz4nCiAgICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAgIC8vIFMKICAgICAgewogICAgICAgIHNoaWZ0VCgyMSk7ICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIH0KICAgICAgbG9va2FoZWFkMSg4KTsgICAgICAgICAgICAgICAgLy8gJz4nCiAgICAgIHNoaWZ0VCg2MSk7ICAgICAgICAgICAgICAgICAgIC8vICc+JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGlyQXR0cmlidXRlTGlzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRpckF0dHJpYnV0ZUxpc3QiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxKDE5KTsgICAgICAgICAgICAgICAvLyBTIHwgJy8+JyB8ICc+JwogICAgICBpZiAobDEgIT0gMjEpICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIGxvb2thaGVhZDEoOTEpOyAgICAgICAgICAgICAgIC8vIFFOYW1lIHwgUyB8ICcvPicgfCAnPicKICAgICAgaWYgKGwxID09IDIwKSAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgewogICAgICAgIHNoaWZ0KDIwKTsgICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICAgIGxvb2thaGVhZDEoMTEpOyAgICAgICAgICAgICAvLyBTIHwgJz0nCiAgICAgICAgaWYgKGwxID09IDIxKSAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB7CiAgICAgICAgICBzaGlmdCgyMSk7ICAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB9CiAgICAgICAgbG9va2FoZWFkMSg3KTsgICAgICAgICAgICAgIC8vICc9JwogICAgICAgIHNoaWZ0KDYwKTsgICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgICBsb29rYWhlYWQxKDE4KTsgICAgICAgICAgICAgLy8gUyB8ICciJyB8ICInIgogICAgICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgewogICAgICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgfQogICAgICAgIHBhcnNlX0RpckF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGlyQXR0cmlidXRlTGlzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EaXJBdHRyaWJ1dGVMaXN0KCkKICB7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxKDE5KTsgICAgICAgICAgICAgICAvLyBTIHwgJy8+JyB8ICc+JwogICAgICBpZiAobDEgIT0gMjEpICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMjEpOyAgICAgICAgICAgICAgICAgICAvLyBTCiAgICAgIGxvb2thaGVhZDEoOTEpOyAgICAgICAgICAgICAgIC8vIFFOYW1lIHwgUyB8ICcvPicgfCAnPicKICAgICAgaWYgKGwxID09IDIwKSAgICAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgewogICAgICAgIHNoaWZ0VCgyMCk7ICAgICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICAgIGxvb2thaGVhZDEoMTEpOyAgICAgICAgICAgICAvLyBTIHwgJz0nCiAgICAgICAgaWYgKGwxID09IDIxKSAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoMjEpOyAgICAgICAgICAgICAgIC8vIFMKICAgICAgICB9CiAgICAgICAgbG9va2FoZWFkMSg3KTsgICAgICAgICAgICAgIC8vICc9JwogICAgICAgIHNoaWZ0VCg2MCk7ICAgICAgICAgICAgICAgICAvLyAnPScKICAgICAgICBsb29rYWhlYWQxKDE4KTsgICAgICAgICAgICAgLy8gUyB8ICciJyB8ICInIgogICAgICAgIGlmIChsMSA9PSAyMSkgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDIxKTsgICAgICAgICAgICAgICAvLyBTCiAgICAgICAgfQogICAgICAgIHRyeV9EaXJBdHRyaWJ1dGVWYWx1ZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EaXJBdHRyaWJ1dGVWYWx1ZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRpckF0dHJpYnV0ZVZhbHVlIiwgZTApOwogICAgbG9va2FoZWFkMSgxNCk7ICAgICAgICAgICAgICAgICAvLyAnIicgfCAiJyIKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBzaGlmdCgyOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDEoMTY3KTsgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlUXVvdCB8IFF1b3RBdHRyQ29udGVudENoYXIgfCBDaGFyUmVmIHwgJyInIHwgJ3snIHwKICAgICAgICBpZiAobDEgPT0gMjgpICAgICAgICAgICAgICAgLy8gJyInCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgMTM6ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgICAgICBzaGlmdCgxMyk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZVF1b3QKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBwYXJzZV9RdW90QXR0clZhbHVlQ29udGVudCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzaGlmdCgyOCk7ICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDEoMTY4KTsgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmIHwgRXNjYXBlQXBvcyB8IEFwb3NBdHRyQ29udGVudENoYXIgfCBDaGFyUmVmIHwgIiciIHwgJ3snIHwKICAgICAgICBpZiAobDEgPT0gMzMpICAgICAgICAgICAgICAgLy8gIiciCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgMTQ6ICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGVBcG9zCiAgICAgICAgICBzaGlmdCgxNCk7ICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBwYXJzZV9BcG9zQXR0clZhbHVlQ29udGVudCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzaGlmdCgzMyk7ICAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRGlyQXR0cmlidXRlVmFsdWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGlyQXR0cmlidXRlVmFsdWUoKQogIHsKICAgIGxvb2thaGVhZDEoMTQpOyAgICAgICAgICAgICAgICAgLy8gJyInIHwgIiciCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnIicKICAgICAgc2hpZnRUKDI4KTsgICAgICAgICAgICAgICAgICAgLy8gJyInCiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxKDE2Nyk7ICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZiB8IEVzY2FwZVF1b3QgfCBRdW90QXR0ckNvbnRlbnRDaGFyIHwgQ2hhclJlZiB8ICciJyB8ICd7JyB8CiAgICAgICAgaWYgKGwxID09IDI4KSAgICAgICAgICAgICAgIC8vICciJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGwxKQogICAgICAgIHsKICAgICAgICBjYXNlIDEzOiAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlUXVvdAogICAgICAgICAgc2hpZnRUKDEzKTsgICAgICAgICAgICAgICAvLyBFc2NhcGVRdW90CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdHJ5X1F1b3RBdHRyVmFsdWVDb250ZW50KCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNoaWZ0VCgyOCk7ICAgICAgICAgICAgICAgICAgIC8vICciJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgzMyk7ICAgICAgICAgICAgICAgICAgIC8vICInIgogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMSgxNjgpOyAgICAgICAgICAgIC8vIFByZWRlZmluZWRFbnRpdHlSZWYgfCBFc2NhcGVBcG9zIHwgQXBvc0F0dHJDb250ZW50Q2hhciB8IENoYXJSZWYgfCAiJyIgfCAneycgfAogICAgICAgIGlmIChsMSA9PSAzMykgICAgICAgICAgICAgICAvLyAiJyIKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICB7CiAgICAgICAgY2FzZSAxNDogICAgICAgICAgICAgICAgICAgIC8vIEVzY2FwZUFwb3MKICAgICAgICAgIHNoaWZ0VCgxNCk7ICAgICAgICAgICAgICAgLy8gRXNjYXBlQXBvcwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRyeV9BcG9zQXR0clZhbHVlQ29udGVudCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzaGlmdFQoMzMpOyAgICAgICAgICAgICAgICAgICAvLyAiJyIKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1F1b3RBdHRyVmFsdWVDb250ZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUXVvdEF0dHJWYWx1ZUNvbnRlbnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgICAgICAvLyBRdW90QXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0KDE2KTsgICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9Db21tb25Db250ZW50KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlF1b3RBdHRyVmFsdWVDb250ZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1F1b3RBdHRyVmFsdWVDb250ZW50KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNjogICAgICAgICAgICAgICAgICAgICAgICAvLyBRdW90QXR0ckNvbnRlbnRDaGFyCiAgICAgIHNoaWZ0VCgxNik7ICAgICAgICAgICAgICAgICAgIC8vIFF1b3RBdHRyQ29udGVudENoYXIKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tbW9uQ29udGVudCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXBvc0F0dHJWYWx1ZUNvbnRlbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBcG9zQXR0clZhbHVlQ29udGVudCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnQoMTcpOyAgICAgICAgICAgICAgICAgICAgLy8gQXBvc0F0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0NvbW1vbkNvbnRlbnQoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXBvc0F0dHJWYWx1ZUNvbnRlbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXBvc0F0dHJWYWx1ZUNvbnRlbnQoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwb3NBdHRyQ29udGVudENoYXIKICAgICAgc2hpZnRUKDE3KTsgICAgICAgICAgICAgICAgICAgLy8gQXBvc0F0dHJDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9Db21tb25Db250ZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EaXJFbGVtQ29udGVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRpckVsZW1Db250ZW50IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgY2FzZSA1OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIHBhcnNlX0RpcmVjdENvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDRGF0YVNlY3Rpb24KICAgICAgc2hpZnQoNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTogICAgICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50Q29udGVudENoYXIKICAgICAgc2hpZnQoMTUpOyAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQ29tbW9uQ29udGVudCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJEaXJFbGVtQ29udGVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EaXJFbGVtQ29udGVudCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzwnCiAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgY2FzZSA1OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgIHRyeV9EaXJlY3RDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0RhdGFTZWN0aW9uCiAgICAgIHNoaWZ0VCg0KTsgICAgICAgICAgICAgICAgICAgIC8vIENEYXRhU2VjdGlvbgogICAgICBicmVhazsKICAgIGNhc2UgMTU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudENvbnRlbnRDaGFyCiAgICAgIHNoaWZ0VCgxNSk7ICAgICAgICAgICAgICAgICAgIC8vIEVsZW1lbnRDb250ZW50Q2hhcgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9Db21tb25Db250ZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9EaXJDb21tZW50Q29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEaXJDb21tZW50Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCg1NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc8IS0tJwogICAgbG9va2FoZWFkMSgxKTsgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgIHNoaWZ0KDIpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzCiAgICBsb29rYWhlYWQxKDYpOyAgICAgICAgICAgICAgICAgIC8vICctLT4nCiAgICBzaGlmdCg0Myk7ICAgICAgICAgICAgICAgICAgICAgIC8vICctLT4nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRpckNvbW1lbnRDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9EaXJDb21tZW50Q29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCg1NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICBsb29rYWhlYWQxKDEpOyAgICAgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cwogICAgc2hpZnRUKDIpOyAgICAgICAgICAgICAgICAgICAgICAvLyBEaXJDb21tZW50Q29udGVudHMKICAgIGxvb2thaGVhZDEoNik7ICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICAgIHNoaWZ0VCg0Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJy0tPicKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0RpclBJQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJEaXJQSUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoNTkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICBsb29rYWhlYWQxKDMpOyAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBzaGlmdCgxOCk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBsb29rYWhlYWQxKDEzKTsgICAgICAgICAgICAgICAgIC8vIFMgfCAnPz4nCiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnQoMjEpOyAgICAgICAgICAgICAgICAgICAgLy8gUwogICAgICBsb29rYWhlYWQxKDIpOyAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzCiAgICAgIHNoaWZ0KDMpOyAgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgIH0KICAgIGxvb2thaGVhZDEoOSk7ICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgc2hpZnQoNjUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRpclBJQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGlyUElDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDU5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICBsb29rYWhlYWQxKDMpOyAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBzaGlmdFQoMTgpOyAgICAgICAgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICBsb29rYWhlYWQxKDEzKTsgICAgICAgICAgICAgICAgIC8vIFMgfCAnPz4nCiAgICBpZiAobDEgPT0gMjEpICAgICAgICAgICAgICAgICAgIC8vIFMKICAgIHsKICAgICAgc2hpZnRUKDIxKTsgICAgICAgICAgICAgICAgICAgLy8gUwogICAgICBsb29rYWhlYWQxKDIpOyAgICAgICAgICAgICAgICAvLyBEaXJQSUNvbnRlbnRzCiAgICAgIHNoaWZ0VCgzKTsgICAgICAgICAgICAgICAgICAgIC8vIERpclBJQ29udGVudHMKICAgIH0KICAgIGxvb2thaGVhZDEoOSk7ICAgICAgICAgICAgICAgICAgLy8gJz8+JwogICAgc2hpZnRUKDY1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnPz4nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wdXRlZENvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcHV0ZWRDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgcGFyc2VfQ29tcERvY0NvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgcGFyc2VfQ29tcEVsZW1Db25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgcGFyc2VfQ29tcEF0dHJDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgcGFyc2VfQ29tcE5hbWVzcGFjZUNvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgcGFyc2VfQ29tcFRleHRDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHBhcnNlX0NvbXBDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9Db21wUElDb25zdHJ1Y3RvcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wdXRlZENvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbXB1dGVkQ29uc3RydWN0b3IoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgdHJ5X0NvbXBEb2NDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIHRyeV9Db21wRWxlbUNvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICB0cnlfQ29tcEF0dHJDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTg0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgdHJ5X0NvbXBOYW1lc3BhY2VDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIHRyeV9Db21wVGV4dENvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgdHJ5X0NvbXBDb21tZW50Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tcFBJQ29uc3RydWN0b3IoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBFbGVtQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21wRWxlbUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoMTIxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDI1Nyk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICAgIHNoaWZ0KDI4Mik7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRVFOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjc2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAyODIpICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ29udGVudEV4cHIoKTsKICAgIH0KICAgIHNoaWZ0KDI4Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbXBFbGVtQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tcEVsZW1Db25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDEyMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDI1Nyk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHIoKTsKICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0VRTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMjgyKSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB0cnlfQ29udGVudEV4cHIoKTsKICAgIH0KICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wTmFtZXNwYWNlQ29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21wTmFtZXNwYWNlQ29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICBsb29rYWhlYWQxVygyNTApOyAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUHJlZml4RXhwcigpOwogICAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1ByZWZpeCgpOwogICAgfQogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9VUklFeHByKCk7CiAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wTmFtZXNwYWNlQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tcE5hbWVzcGFjZUNvbnN0cnVjdG9yKCkKICB7CiAgICBzaGlmdFQoMTg0KTsgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICBsb29rYWhlYWQxVygyNTApOyAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9QcmVmaXhFeHByKCk7CiAgICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9QcmVmaXgoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X1VSSUV4cHIoKTsKICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QcmVmaXgoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmVmaXgiLCBlMCk7CiAgICBwYXJzZV9OQ05hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUHJlZml4IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ByZWZpeCgpCiAgewogICAgdHJ5X05DTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJlZml4RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByZWZpeEV4cHIiLCBlMCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByZWZpeEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUHJlZml4RXhwcigpCiAgewogICAgdHJ5X0V4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1VSSUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJVUklFeHByIiwgZTApOwogICAgcGFyc2VfRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJVUklFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1VSSUV4cHIoKQogIHsKICAgIHRyeV9FeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GdW5jdGlvbkl0ZW1FeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25JdGVtRXhwciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgbG9va2FoZWFkMlcoOTIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMzI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBjYXNlIDE3NTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJygnCiAgICAgIHBhcnNlX0lubGluZUZ1bmN0aW9uRXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX05hbWVkRnVuY3Rpb25SZWYoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25JdGVtRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GdW5jdGlvbkl0ZW1FeHByKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGxvb2thaGVhZDJXKDkyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSAxNzU1MzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcoJwogICAgICB0cnlfSW5saW5lRnVuY3Rpb25FeHByKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X05hbWVkRnVuY3Rpb25SZWYoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX05hbWVkRnVuY3Rpb25SZWYoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOYW1lZEZ1bmN0aW9uUmVmIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyMCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKDonCiAgICBzaGlmdCgyOSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcjJwogICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5hbWVkRnVuY3Rpb25SZWYiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfTmFtZWRGdW5jdGlvblJlZigpCiAgewogICAgdHJ5X0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyg6JwogICAgc2hpZnRUKDI5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnIycKICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnRUKDgpOyAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5saW5lRnVuY3Rpb25FeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5saW5lRnVuY3Rpb25FeHByIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoOTcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICclJyB8ICcoOicgfCAnZnVuY3Rpb24nCiAgICAgIGlmIChsMSAhPSAzMikgICAgICAgICAgICAgICAgIC8vICclJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Bbm5vdGF0aW9uKCk7CiAgICB9CiAgICBzaGlmdCgxNDUpOyAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVyg5NCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJyknCiAgICBpZiAobDEgPT0gMzEpICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1BhcmFtTGlzdCgpOwogICAgfQogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGxvb2thaGVhZDFXKDExMSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnIHwgJ3snCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GdW5jdGlvbkJvZHkoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5saW5lRnVuY3Rpb25FeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0lubGluZUZ1bmN0aW9uRXhwcigpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoOTcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICclJyB8ICcoOicgfCAnZnVuY3Rpb24nCiAgICAgIGlmIChsMSAhPSAzMikgICAgICAgICAgICAgICAgIC8vICclJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0Fubm90YXRpb24oKTsKICAgIH0KICAgIHNoaWZ0VCgxNDUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDk0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnKScKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHRyeV9QYXJhbUxpc3QoKTsKICAgIH0KICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBsb29rYWhlYWQxVygxMTEpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJyB8ICd7JwogICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHNoaWZ0VCg3OSk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB0cnlfRnVuY3Rpb25Cb2R5KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TaW5nbGVUeXBlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2luZ2xlVHlwZSIsIGUwKTsKICAgIHBhcnNlX1NpbXBsZVR5cGVOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyMjYpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDY0KSAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgIHsKICAgICAgc2hpZnQoNjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlNpbmdsZVR5cGUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU2luZ2xlVHlwZSgpCiAgewogICAgdHJ5X1NpbXBsZVR5cGVOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyMjYpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfAogICAgaWYgKGwxID09IDY0KSAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgIHsKICAgICAgc2hpZnRUKDY0KTsgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUeXBlRGVjbGFyYXRpb24iLCBlMCk7CiAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR5cGVEZWNsYXJhdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9UeXBlRGVjbGFyYXRpb24oKQogIHsKICAgIHNoaWZ0VCg3OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TZXF1ZW5jZVR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTZXF1ZW5jZVR5cGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGxvb2thaGVhZDJXKDI0Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxNzUzMjogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnICcoJwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9JdGVtVHlwZSgpOwogICAgICBsb29rYWhlYWQxVygyMzgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwgJzsnIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDM5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgIGNhc2UgNjQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9PY2N1cnJlbmNlSW5kaWNhdG9yKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2VxdWVuY2VUeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1NlcXVlbmNlVHlwZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBsb29rYWhlYWQyVygyNDIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTc1MzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnKCcKICAgICAgc2hpZnRUKDEyNCk7ICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0l0ZW1UeXBlKCk7CiAgICAgIGxvb2thaGVhZDFXKDIzOCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfCAnOycgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMzk6ICAgICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBjYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgY2FzZSA2NDogICAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgICAgdHJ5X09jY3VycmVuY2VJbmRpY2F0b3IoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfT2NjdXJyZW5jZUluZGljYXRvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk9jY3VycmVuY2VJbmRpY2F0b3IiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA2NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgICAgc2hpZnQoNjQpOyAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIGJyZWFrOwogICAgY2FzZSAzOTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgc2hpZnQoMzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoNDApOyAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk9jY3VycmVuY2VJbmRpY2F0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfT2NjdXJyZW5jZUluZGljYXRvcigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgIHNoaWZ0VCg2NCk7ICAgICAgICAgICAgICAgICAgIC8vICc/JwogICAgICBicmVhazsKICAgIGNhc2UgMzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIHNoaWZ0VCgzOSk7ICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCg0MCk7ICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSXRlbVR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJdGVtVHlwZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGNhc2UgMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgY2FzZSAxNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgY2FzZSAyMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBsb29rYWhlYWQyVygyNDIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnOicgfCAnOj0nIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTc0OTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJygnCiAgICBjYXNlIDE3NTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnKCcKICAgIGNhc2UgMTc1Mjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICcoJwogICAgY2FzZSAxNzUyOTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJygnCiAgICBjYXNlIDE3NTkzOiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgJygnCiAgICBjYXNlIDE3NTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJyAnKCcKICAgIGNhc2UgMTc2MjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICcoJwogICAgY2FzZSAxNzYzNDogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgJygnCiAgICBjYXNlIDE3NjM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgJygnCiAgICBjYXNlIDE3NjUyOiAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JyAnKCcKICAgICAgcGFyc2VfS2luZFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NTczOiAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJyAnKCcKICAgICAgc2hpZnQoMTY1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSAxNzU1MzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcoJwogICAgICBwYXJzZV9GdW5jdGlvblRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBwYXJzZV9QYXJlbnRoZXNpemVkSXRlbVR5cGUoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDg2OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScgJygnCiAgICBjYXNlIDE3NTc1OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICcoJwogICAgY2FzZSAxNzYwMjogICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnKCcKICAgICAgcGFyc2VfSlNPTlRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcoJwogICAgICBwYXJzZV9TdHJ1Y3R1cmVkSXRlbVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9BdG9taWNPclVuaW9uVHlwZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJdGVtVHlwZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JdGVtVHlwZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgY2FzZSAxNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgIGNhc2UgMjQyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGxvb2thaGVhZDJXKDI0Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICc6JyB8ICc6PScgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxNzQ5MDogICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTc1MDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcoJwogICAgY2FzZSAxNzUyODogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJygnCiAgICBjYXNlIDE3NTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnKCcKICAgIGNhc2UgMTc1OTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnKCcKICAgIGNhc2UgMTc1OTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnICcoJwogICAgY2FzZSAxNzYyNDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJygnCiAgICBjYXNlIDE3NjM0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnKCcKICAgIGNhc2UgMTc2MzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnKCcKICAgIGNhc2UgMTc2NTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnICcoJwogICAgICB0cnlfS2luZFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NTczOiAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJyAnKCcKICAgICAgc2hpZnRUKDE2NSk7ICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgY2FzZSAxNzU1MzogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcoJwogICAgICB0cnlfRnVuY3Rpb25UZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgdHJ5X1BhcmVudGhlc2l6ZWRJdGVtVHlwZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTc0ODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnKCcKICAgIGNhc2UgMTc1NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJygnCiAgICBjYXNlIDE3NjAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnICcoJwogICAgICB0cnlfSlNPTlRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcoJwogICAgICB0cnlfU3RydWN0dXJlZEl0ZW1UZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0F0b21pY09yVW5pb25UeXBlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OVGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05UZXN0IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgcGFyc2VfSlNPTkl0ZW1UZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgICBwYXJzZV9KU09OT2JqZWN0VGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0pTT05BcnJheVRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTlRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTlRlc3QoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICAgIHRyeV9KU09OSXRlbVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICAgIHRyeV9KU09OT2JqZWN0VGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9KU09OQXJyYXlUZXN0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TdHJ1Y3R1cmVkSXRlbVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTdHJ1Y3R1cmVkSXRlbVRlc3QiLCBlMCk7CiAgICBzaGlmdCgyNDIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RydWN0dXJlZEl0ZW1UZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N0cnVjdHVyZWRJdGVtVGVzdCgpCiAgewogICAgc2hpZnRUKDI0Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OSXRlbVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OSXRlbVRlc3QiLCBlMCk7CiAgICBzaGlmdCgxNjcpOyAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTkl0ZW1UZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0pTT05JdGVtVGVzdCgpCiAgewogICAgc2hpZnRUKDE2Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OT2JqZWN0VGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05PYmplY3RUZXN0IiwgZTApOwogICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05PYmplY3RUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0pTT05PYmplY3RUZXN0KCkKICB7CiAgICBzaGlmdFQoMTk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0pTT05BcnJheVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OQXJyYXlUZXN0IiwgZTApOwogICAgc2hpZnQoNzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTkFycmF5VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9KU09OQXJyYXlUZXN0KCkKICB7CiAgICBzaGlmdFQoNzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXRvbWljT3JVbmlvblR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBdG9taWNPclVuaW9uVHlwZSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdG9taWNPclVuaW9uVHlwZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BdG9taWNPclVuaW9uVHlwZSgpCiAgewogICAgdHJ5X0VRTmFtZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfS2luZFRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJLaW5kVGVzdCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBwYXJzZV9Eb2N1bWVudFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBwYXJzZV9FbGVtZW50VGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgcGFyc2VfQXR0cmlidXRlVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBwYXJzZV9TY2hlbWFFbGVtZW50VGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIHBhcnNlX1NjaGVtYUF0dHJpYnV0ZVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBwYXJzZV9QSVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBwYXJzZV9Db21tZW50VGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIHBhcnNlX1RleHRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHBhcnNlX05hbWVzcGFjZU5vZGVUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQW55S2luZFRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiS2luZFRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfS2luZFRlc3QoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICB0cnlfRG9jdW1lbnRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgdHJ5X0VsZW1lbnRUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICB0cnlfQXR0cmlidXRlVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICB0cnlfU2NoZW1hRWxlbWVudFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICB0cnlfU2NoZW1hQXR0cmlidXRlVGVzdCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHRyeV9QSVRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICB0cnlfQ29tbWVudFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICB0cnlfVGV4dFRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgdHJ5X05hbWVzcGFjZU5vZGVUZXN0KCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0FueUtpbmRUZXN0KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BbnlLaW5kVGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFueUtpbmRUZXN0IiwgZTApOwogICAgc2hpZnQoMTkxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBbnlLaW5kVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BbnlLaW5kVGVzdCgpCiAgewogICAgc2hpZnRUKDE5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRG9jdW1lbnRUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRG9jdW1lbnRUZXN0IiwgZTApOwogICAgc2hpZnQoMTIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygxNDQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJ2VsZW1lbnQnIHwgJ3NjaGVtYS1lbGVtZW50JwogICAgaWYgKGwxICE9IDM3KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRWxlbWVudFRlc3QoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfU2NoZW1hRWxlbWVudFRlc3QoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRG9jdW1lbnRUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0RvY3VtZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDEyMCk7ICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygxNDQpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJ2VsZW1lbnQnIHwgJ3NjaGVtYS1lbGVtZW50JwogICAgaWYgKGwxICE9IDM3KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgICB0cnlfRWxlbWVudFRlc3QoKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfU2NoZW1hRWxlbWVudFRlc3QoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RleHRUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVGV4dFRlc3QiLCBlMCk7CiAgICBzaGlmdCgyNDQpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRleHRUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RleHRUZXN0KCkKICB7CiAgICBzaGlmdFQoMjQ0KTsgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21tZW50VGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbW1lbnRUZXN0IiwgZTApOwogICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21tZW50VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21tZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDk2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfTmFtZXNwYWNlTm9kZVRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJOYW1lc3BhY2VOb2RlVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDE4NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5hbWVzcGFjZU5vZGVUZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05hbWVzcGFjZU5vZGVUZXN0KCkKICB7CiAgICBzaGlmdFQoMTg1KTsgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUElUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUElUZXN0IiwgZTApOwogICAgc2hpZnQoMjE2KTsgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNTIpOyAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICcpJyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICAgIHNoaWZ0KDExKTsgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX05DTmFtZSgpOwogICAgICB9CiAgICB9CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQSVRlc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUElUZXN0KCkKICB7CiAgICBzaGlmdFQoMjE2KTsgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI1Mik7ICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgaWYgKGwxICE9IDM3KSAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIHsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfTkNOYW1lKCk7CiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXR0cmlidXRlVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDgyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJyonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQXR0cmliTmFtZU9yV2lsZGNhcmQoKTsKICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxID09IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfVHlwZU5hbWUoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXR0cmlidXRlVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBzaGlmdFQoODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjYwKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICBpZiAobDEgIT0gMzcpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB0cnlfQXR0cmliTmFtZU9yV2lsZGNhcmQoKTsKICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxID09IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB0cnlfVHlwZU5hbWUoKTsKICAgICAgfQogICAgfQogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0F0dHJpYk5hbWVPcldpbGRjYXJkKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXR0cmliTmFtZU9yV2lsZGNhcmQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQXR0cmlidXRlTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdHRyaWJOYW1lT3JXaWxkY2FyZCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BdHRyaWJOYW1lT3JXaWxkY2FyZCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9BdHRyaWJ1dGVOYW1lKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TY2hlbWFBdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2NoZW1hQXR0cmlidXRlVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDIyNik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9BdHRyaWJ1dGVEZWNsYXJhdGlvbigpOwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU2NoZW1hQXR0cmlidXRlVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TY2hlbWFBdHRyaWJ1dGVUZXN0KCkKICB7CiAgICBzaGlmdFQoMjI2KTsgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X0F0dHJpYnV0ZURlY2xhcmF0aW9uKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXR0cmlidXRlRGVjbGFyYXRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJBdHRyaWJ1dGVEZWNsYXJhdGlvbiIsIGUwKTsKICAgIHBhcnNlX0F0dHJpYnV0ZU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXR0cmlidXRlRGVjbGFyYXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXR0cmlidXRlRGVjbGFyYXRpb24oKQogIHsKICAgIHRyeV9BdHRyaWJ1dGVOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FbGVtZW50VGVzdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkVsZW1lbnRUZXN0IiwgZTApOwogICAgc2hpZnQoMTIxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJyonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRWxlbWVudE5hbWVPcldpbGRjYXJkKCk7CiAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgIGlmIChsMSA9PSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX1R5cGVOYW1lKCk7CiAgICAgICAgbG9va2FoZWFkMVcoMTAyKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJz8nCiAgICAgICAgaWYgKGwxID09IDY0KSAgICAgICAgICAgICAgIC8vICc/JwogICAgICAgIHsKICAgICAgICAgIHNoaWZ0KDY0KTsgICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFbGVtZW50VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9FbGVtZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDEyMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjApOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJyknIHwgJyonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHRyeV9FbGVtZW50TmFtZU9yV2lsZGNhcmQoKTsKICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgaWYgKGwxID09IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB0cnlfVHlwZU5hbWUoKTsKICAgICAgICBsb29rYWhlYWQxVygxMDIpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnPycKICAgICAgICBpZiAobDEgPT0gNjQpICAgICAgICAgICAgICAgLy8gJz8nCiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDY0KTsgICAgICAgICAgICAgICAvLyAnPycKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FbGVtZW50TmFtZU9yV2lsZGNhcmQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFbGVtZW50TmFtZU9yV2lsZGNhcmQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRWxlbWVudE5hbWUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRWxlbWVudE5hbWVPcldpbGRjYXJkIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VsZW1lbnROYW1lT3JXaWxkY2FyZCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgIC8vICcqJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FbGVtZW50TmFtZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU2NoZW1hRWxlbWVudFRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTY2hlbWFFbGVtZW50VGVzdCIsIGUwKTsKICAgIHNoaWZ0KDIyNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRWxlbWVudERlY2xhcmF0aW9uKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTY2hlbWFFbGVtZW50VGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TY2hlbWFFbGVtZW50VGVzdCgpCiAgewogICAgc2hpZnRUKDIyNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfRWxlbWVudERlY2xhcmF0aW9uKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRWxlbWVudERlY2xhcmF0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRWxlbWVudERlY2xhcmF0aW9uIiwgZTApOwogICAgcGFyc2VfRWxlbWVudE5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRWxlbWVudERlY2xhcmF0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0VsZW1lbnREZWNsYXJhdGlvbigpCiAgewogICAgdHJ5X0VsZW1lbnROYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BdHRyaWJ1dGVOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXR0cmlidXRlTmFtZSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdHRyaWJ1dGVOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0F0dHJpYnV0ZU5hbWUoKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0VsZW1lbnROYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRWxlbWVudE5hbWUiLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRWxlbWVudE5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRWxlbWVudE5hbWUoKQogIHsKICAgIHRyeV9FUU5hbWUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1NpbXBsZVR5cGVOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU2ltcGxlVHlwZU5hbWUiLCBlMCk7CiAgICBwYXJzZV9UeXBlTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTaW1wbGVUeXBlTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TaW1wbGVUeXBlTmFtZSgpCiAgewogICAgdHJ5X1R5cGVOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9UeXBlTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlR5cGVOYW1lIiwgZTApOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR5cGVOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1R5cGVOYW1lKCkKICB7CiAgICB0cnlfRVFOYW1lKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GdW5jdGlvblRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGdW5jdGlvblRlc3QiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVyg5Nyk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJyg6JyB8ICdmdW5jdGlvbicKICAgICAgaWYgKGwxICE9IDMyKSAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Fubm90YXRpb24oKTsKICAgIH0KICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgbGsgPSBtZW1vaXplZCg1LCBlMCk7CiAgICBpZiAobGsgPT0gMCkKICAgIHsKICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgIHRyeQogICAgICB7CiAgICAgICAgdHJ5X0FueUZ1bmN0aW9uVGVzdCgpOwogICAgICAgIGxrID0gLTE7CiAgICAgIH0KICAgICAgY2F0Y2ggKHAxQSkKICAgICAgewogICAgICAgIGxrID0gLTI7CiAgICAgIH0KICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgIG1lbW9pemUoNSwgZTAsIGxrKTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FueUZ1bmN0aW9uVGVzdCgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVHlwZWRGdW5jdGlvblRlc3QoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25UZXN0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Z1bmN0aW9uVGVzdCgpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoOTcpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICclJyB8ICcoOicgfCAnZnVuY3Rpb24nCiAgICAgIGlmIChsMSAhPSAzMikgICAgICAgICAgICAgICAgIC8vICclJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0Fubm90YXRpb24oKTsKICAgIH0KICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgbGsgPSBtZW1vaXplZCg1LCBlMCk7CiAgICBpZiAobGsgPT0gMCkKICAgIHsKICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgIHRyeQogICAgICB7CiAgICAgICAgdHJ5X0FueUZ1bmN0aW9uVGVzdCgpOwogICAgICAgIG1lbW9pemUoNSwgZTBBLCAtMSk7CiAgICAgICAgbGsgPSAtMzsKICAgICAgfQogICAgICBjYXRjaCAocDFBKQogICAgICB7CiAgICAgICAgbGsgPSAtMjsKICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSg1LCBlMEEsIC0yKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHRyeV9BbnlGdW5jdGlvblRlc3QoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9UeXBlZEZ1bmN0aW9uVGVzdCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQW55RnVuY3Rpb25UZXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQW55RnVuY3Rpb25UZXN0IiwgZTApOwogICAgc2hpZnQoMTQ1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjQpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcqJwogICAgc2hpZnQoMzgpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKicKICAgIGxvb2thaGVhZDFXKDIzKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScKICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFueUZ1bmN0aW9uVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BbnlGdW5jdGlvblRlc3QoKQogIHsKICAgIHNoaWZ0VCgxNDUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKicKICAgIHNoaWZ0VCgzOCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHlwZWRGdW5jdGlvblRlc3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJUeXBlZEZ1bmN0aW9uVGVzdCIsIGUwKTsKICAgIHNoaWZ0KDE0NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Mik7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8CiAgICBpZiAobDEgIT0gMzcpICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2FzJwogICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBsb29rYWhlYWQxVygyNTkpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1NlcXVlbmNlVHlwZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUeXBlZEZ1bmN0aW9uVGVzdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9UeXBlZEZ1bmN0aW9uVGVzdCgpCiAgewogICAgc2hpZnRUKDE0NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjYyKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSAhPSAzNykgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB7CiAgICAgIHRyeV9TZXF1ZW5jZVR5cGUoKTsKICAgICAgZm9yICg7OykKICAgICAgewogICAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMzApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgIHNoaWZ0VCg3OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB0cnlfU2VxdWVuY2VUeXBlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QYXJlbnRoZXNpemVkSXRlbVR5cGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQYXJlbnRoZXNpemVkSXRlbVR5cGUiLCBlMCk7CiAgICBzaGlmdCgzNCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JdGVtVHlwZSgpOwogICAgbG9va2FoZWFkMVcoMjMpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJwogICAgc2hpZnQoMzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiUGFyZW50aGVzaXplZEl0ZW1UeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1BhcmVudGhlc2l6ZWRJdGVtVHlwZSgpCiAgewogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X0l0ZW1UeXBlKCk7CiAgICBsb29rYWhlYWQxVygyMyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknCiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV2YWxpZGF0aW9uRGVjbCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJldmFsaWRhdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgbG9va2FoZWFkMVcoNzIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXZhbGlkYXRpb24nCiAgICBzaGlmdCgyMjIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICBsb29rYWhlYWQxVygxNTIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xheCcgfCAnc2tpcCcgfCAnc3RyaWN0JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjQwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgc2hpZnQoMjQwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIHNoaWZ0KDE3MSk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXgnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjMzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NraXAnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJldmFsaWRhdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbnNlcnRFeHByVGFyZ2V0Q2hvaWNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5zZXJ0RXhwclRhcmdldENob2ljZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDcwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnQoNzApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgc2hpZnQoODQpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICAgIGxvb2thaGVhZDFXKDExOSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdmaXJzdCcgfCAnbGFzdCcKICAgICAgICBzd2l0Y2ggKGwxKQogICAgICAgIHsKICAgICAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICAgICAgc2hpZnQoMTM0KTsgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc2hpZnQoMTcwKTsgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgICB9CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoNTQpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW50bycKICAgICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluc2VydEV4cHJUYXJnZXRDaG9pY2UiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSW5zZXJ0RXhwclRhcmdldENob2ljZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdFQoNzApOyAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdFQoODQpOyAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGlmIChsMSA9PSA3OSkgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgewogICAgICAgIHNoaWZ0VCg3OSk7ICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgICAgbG9va2FoZWFkMVcoMTE5KTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2ZpcnN0JyB8ICdsYXN0JwogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgMTM0OiAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgICAgICBzaGlmdFQoMTM0KTsgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBzaGlmdFQoMTcwKTsgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICAgIH0KICAgICAgfQogICAgICBsb29rYWhlYWQxVyg1NCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbnRvJwogICAgICBzaGlmdFQoMTYzKTsgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0luc2VydEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbnNlcnRFeHByIiwgZTApOwogICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgbG9va2FoZWFkMVcoMTI5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJyB8ICdub2RlcycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxOTIpOyAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU291cmNlRXhwcigpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSW5zZXJ0RXhwclRhcmdldENob2ljZSgpOwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1RhcmdldEV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5zZXJ0RXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9JbnNlcnRFeHByKCkKICB7CiAgICBzaGlmdFQoMTU5KTsgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICBsb29rYWhlYWQxVygxMjkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnIHwgJ25vZGVzJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTkxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIHNoaWZ0VCgxOTEpOyAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxOTIpOyAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgIH0KICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfU291cmNlRXhwcigpOwogICAgdHJ5X0luc2VydEV4cHJUYXJnZXRDaG9pY2UoKTsKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfVGFyZ2V0RXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRGVsZXRlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkRlbGV0ZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgxMTApOyAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBsb29rYWhlYWQxVygxMjkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnIHwgJ25vZGVzJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTkxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIHNoaWZ0KDE5MSk7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE5Mik7ICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgIH0KICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9UYXJnZXRFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkRlbGV0ZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRGVsZXRlRXhwcigpCiAgewogICAgc2hpZnRUKDExMCk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgbG9va2FoZWFkMVcoMTI5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJyB8ICdub2RlcycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdFQoMTkxKTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTkyKTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICB9CiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X1RhcmdldEV4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1JlcGxhY2VFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmVwbGFjZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgyMTkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgbG9va2FoZWFkMVcoMTMwKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJyB8ICd2YWx1ZScKICAgIGlmIChsMSA9PSAyNjEpICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgewogICAgICBzaGlmdCgyNjEpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGxvb2thaGVhZDFXKDY0KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29mJwogICAgICBzaGlmdCgxOTYpOyAgICAgICAgICAgICAgICAgICAvLyAnb2YnCiAgICB9CiAgICBsb29rYWhlYWQxVyg2Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnCiAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1RhcmdldEV4cHIoKTsKICAgIHNoaWZ0KDI3MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZXBsYWNlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9SZXBsYWNlRXhwcigpCiAgewogICAgc2hpZnRUKDIxOSk7ICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgIGxvb2thaGVhZDFXKDEzMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbm9kZScgfCAndmFsdWUnCiAgICBpZiAobDEgPT0gMjYxKSAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgIHsKICAgICAgc2hpZnRUKDI2MSk7ICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdvZicKICAgICAgc2hpZnRUKDE5Nik7ICAgICAgICAgICAgICAgICAgLy8gJ29mJwogICAgfQogICAgbG9va2FoZWFkMVcoNjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJwogICAgc2hpZnRUKDE5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfVGFyZ2V0RXhwcigpOwogICAgc2hpZnRUKDI3MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmVuYW1lRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJlbmFtZUV4cHIiLCBlMCk7CiAgICBzaGlmdCgyMTgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICBsb29rYWhlYWQxVyg2Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnCiAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1RhcmdldEV4cHIoKTsKICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX05ld05hbWVFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJlbmFtZUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmVuYW1lRXhwcigpCiAgewogICAgc2hpZnRUKDIxOCk7ICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgbG9va2FoZWFkMVcoNjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJwogICAgc2hpZnRUKDE5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfVGFyZ2V0RXhwcigpOwogICAgc2hpZnRUKDc5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X05ld05hbWVFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Tb3VyY2VFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU291cmNlRXhwciIsIGUwKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU291cmNlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Tb3VyY2VFeHByKCkKICB7CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVGFyZ2V0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRhcmdldEV4cHIiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlRhcmdldEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVGFyZ2V0RXhwcigpCiAgewogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX05ld05hbWVFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTmV3TmFtZUV4cHIiLCBlMCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5ld05hbWVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X05ld05hbWVFeHByKCkKICB7CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHJhbnNmb3JtRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyYW5zZm9ybUV4cHIiLCBlMCk7CiAgICBzaGlmdCgxMDMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVHJhbnNmb3JtU3BlYygpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UcmFuc2Zvcm1TcGVjKCk7CiAgICB9CiAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHJhbnNmb3JtRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9UcmFuc2Zvcm1FeHByKCkKICB7CiAgICBzaGlmdFQoMTAzKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgdHJ5X1RyYW5zZm9ybVNwZWMoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICAgIHRyeV9UcmFuc2Zvcm1TcGVjKCk7CiAgICB9CiAgICBzaGlmdFQoMTgxKTsgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0VCgyMjApOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHJhbnNmb3JtU3BlYygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlRyYW5zZm9ybVNwZWMiLCBlMCk7CiAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJUcmFuc2Zvcm1TcGVjIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1RyYW5zZm9ybVNwZWMoKQogIHsKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUU2VsZWN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRTZWxlY3Rpb24iLCBlMCk7CiAgICBwYXJzZV9GVE9yKCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyMTEpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIGxvb2thaGVhZDJXKDE1MSk7ICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdlbmQnIHwgJ3Bvc2l0aW9uJyB8ICdzdGFydCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayAhPSAxMTUgICAgICAgICAgICAgICAgIC8vICdkaWZmZXJlbnQnCiAgICAgICAmJiBsayAhPSAxMTcgICAgICAgICAgICAgICAgIC8vICdkaXN0YW5jZScKICAgICAgICYmIGxrICE9IDEyNyAgICAgICAgICAgICAgICAgLy8gJ2VudGlyZScKICAgICAgICYmIGxrICE9IDIwMiAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgICAmJiBsayAhPSAyMjMgICAgICAgICAgICAgICAgIC8vICdzYW1lJwogICAgICAgJiYgbGsgIT0gMjY5ICAgICAgICAgICAgICAgICAvLyAnd2luZG93JwogICAgICAgJiYgbGsgIT0gNjQ1OTMgICAgICAgICAgICAgICAvLyAnYXQnICdlbmQnCiAgICAgICAmJiBsayAhPSAxMjE0MjUpICAgICAgICAgICAgIC8vICdhdCcgJ3N0YXJ0JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVFBvc0ZpbHRlcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFNlbGVjdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFNlbGVjdGlvbigpCiAgewogICAgdHJ5X0ZUT3IoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDIxMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgbG9va2FoZWFkMlcoMTUxKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VuZCcgfCAncG9zaXRpb24nIHwgJ3N0YXJ0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDExNSAgICAgICAgICAgICAgICAgLy8gJ2RpZmZlcmVudCcKICAgICAgICYmIGxrICE9IDExNyAgICAgICAgICAgICAgICAgLy8gJ2Rpc3RhbmNlJwogICAgICAgJiYgbGsgIT0gMTI3ICAgICAgICAgICAgICAgICAvLyAnZW50aXJlJwogICAgICAgJiYgbGsgIT0gMjAyICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgICYmIGxrICE9IDIyMyAgICAgICAgICAgICAgICAgLy8gJ3NhbWUnCiAgICAgICAmJiBsayAhPSAyNjkgICAgICAgICAgICAgICAgIC8vICd3aW5kb3cnCiAgICAgICAmJiBsayAhPSA2NDU5MyAgICAgICAgICAgICAgIC8vICdhdCcgJ2VuZCcKICAgICAgICYmIGxrICE9IDEyMTQyNSkgICAgICAgICAgICAgLy8gJ2F0JyAnc3RhcnQnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0cnlfRlRQb3NGaWx0ZXIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUV2VpZ2h0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRXZWlnaHQiLCBlMCk7CiAgICBzaGlmdCgyNjQpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3ZWlnaHQnCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHIoKTsKICAgIHNoaWZ0KDI4Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUV2VpZ2h0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUV2VpZ2h0KCkKICB7CiAgICBzaGlmdFQoMjY0KTsgICAgICAgICAgICAgICAgICAgIC8vICd3ZWlnaHQnCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRPcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUT3IiLCBlMCk7CiAgICBwYXJzZV9GVEFuZCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDE0NCkgICAgICAgICAgICAgICAgLy8gJ2Z0b3InCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgxNDQpOyAgICAgICAgICAgICAgICAgICAvLyAnZnRvcicKICAgICAgbG9va2FoZWFkMVcoMTYyKTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVEFuZCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVE9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUT3IoKQogIHsKICAgIHRyeV9GVEFuZCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDE0NCkgICAgICAgICAgICAgICAgLy8gJ2Z0b3InCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMTQ0KTsgICAgICAgICAgICAgICAgICAvLyAnZnRvcicKICAgICAgbG9va2FoZWFkMVcoMTYyKTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgdHJ5X0ZUQW5kKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVEFuZCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUQW5kIiwgZTApOwogICAgcGFyc2VfRlRNaWxkTm90KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMTQyKSAgICAgICAgICAgICAgICAvLyAnZnRhbmQnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCgxNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnZnRhbmQnCiAgICAgIGxvb2thaGVhZDFXKDE2Mik7ICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAnZnRub3QnIHwgJ3snCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRNaWxkTm90KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUQW5kIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUQW5kKCkKICB7CiAgICB0cnlfRlRNaWxkTm90KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gMTQyKSAgICAgICAgICAgICAgICAvLyAnZnRhbmQnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoMTQyKTsgICAgICAgICAgICAgICAgICAvLyAnZnRhbmQnCiAgICAgIGxvb2thaGVhZDFXKDE2Mik7ICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAnZnRub3QnIHwgJ3snCiAgICAgIHRyeV9GVE1pbGROb3QoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUTWlsZE5vdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUTWlsZE5vdCIsIGUwKTsKICAgIHBhcnNlX0ZUVW5hcnlOb3QoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDIxMik7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxICE9IDE5MykgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDE5Myk7ICAgICAgICAgICAgICAgICAgIC8vICdub3QnCiAgICAgIGxvb2thaGVhZDFXKDUzKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luJwogICAgICBzaGlmdCgxNTQpOyAgICAgICAgICAgICAgICAgICAvLyAnaW4nCiAgICAgIGxvb2thaGVhZDFXKDE2Mik7ICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAnZnRub3QnIHwgJ3snCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRVbmFyeU5vdCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVE1pbGROb3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRNaWxkTm90KCkKICB7CiAgICB0cnlfRlRVbmFyeU5vdCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjEyKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBpZiAobDEgIT0gMTkzKSAgICAgICAgICAgICAgICAvLyAnbm90JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDE5Myk7ICAgICAgICAgICAgICAgICAgLy8gJ25vdCcKICAgICAgbG9va2FoZWFkMVcoNTMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW4nCiAgICAgIHNoaWZ0VCgxNTQpOyAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgbG9va2FoZWFkMVcoMTYyKTsgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICdmdG5vdCcgfCAneycKICAgICAgdHJ5X0ZUVW5hcnlOb3QoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUVW5hcnlOb3QoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFVuYXJ5Tm90IiwgZTApOwogICAgaWYgKGwxID09IDE0MykgICAgICAgICAgICAgICAgICAvLyAnZnRub3QnCiAgICB7CiAgICAgIHNoaWZ0KDE0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdmdG5vdCcKICAgIH0KICAgIGxvb2thaGVhZDFXKDE1NSk7ICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKCcgfCAnKCMnIHwgJyg6JyB8ICd7JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRlRQcmltYXJ5V2l0aE9wdGlvbnMoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRVbmFyeU5vdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFVuYXJ5Tm90KCkKICB7CiAgICBpZiAobDEgPT0gMTQzKSAgICAgICAgICAgICAgICAgIC8vICdmdG5vdCcKICAgIHsKICAgICAgc2hpZnRUKDE0Myk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z0bm90JwogICAgfQogICAgbG9va2FoZWFkMVcoMTU1KTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ3snCiAgICB0cnlfRlRQcmltYXJ5V2l0aE9wdGlvbnMoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUUHJpbWFyeVdpdGhPcHRpb25zKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRQcmltYXJ5V2l0aE9wdGlvbnMiLCBlMCk7CiAgICBwYXJzZV9GVFByaW1hcnkoKTsKICAgIGxvb2thaGVhZDFXKDIxNCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgaWYgKGwxID09IDI1OSkgICAgICAgICAgICAgICAgICAvLyAndXNpbmcnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRlRNYXRjaE9wdGlvbnMoKTsKICAgIH0KICAgIGlmIChsMSA9PSAyNjQpICAgICAgICAgICAgICAgICAgLy8gJ3dlaWdodCcKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVFdlaWdodCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFByaW1hcnlXaXRoT3B0aW9ucyIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFByaW1hcnlXaXRoT3B0aW9ucygpCiAgewogICAgdHJ5X0ZUUHJpbWFyeSgpOwogICAgbG9va2FoZWFkMVcoMjE0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBpZiAobDEgPT0gMjU5KSAgICAgICAgICAgICAgICAgIC8vICd1c2luZycKICAgIHsKICAgICAgdHJ5X0ZUTWF0Y2hPcHRpb25zKCk7CiAgICB9CiAgICBpZiAobDEgPT0gMjY0KSAgICAgICAgICAgICAgICAgIC8vICd3ZWlnaHQnCiAgICB7CiAgICAgIHRyeV9GVFdlaWdodCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRQcmltYXJ5KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRQcmltYXJ5IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygxNjIpOyAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUU2VsZWN0aW9uKCk7CiAgICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgICBicmVhazsKICAgIGNhc2UgMzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICBwYXJzZV9GVEV4dGVuc2lvblNlbGVjdGlvbigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0ZUV29yZHMoKTsKICAgICAgbG9va2FoZWFkMVcoMjE1KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBpZiAobDEgPT0gMTk1KSAgICAgICAgICAgICAgICAvLyAnb2NjdXJzJwogICAgICB7CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0ZUVGltZXMoKTsKICAgICAgfQogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFByaW1hcnkiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRQcmltYXJ5KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE2Mik7ICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJygnIHwgJygjJyB8ICcoOicgfCAnZnRub3QnIHwgJ3snCiAgICAgIHRyeV9GVFNlbGVjdGlvbigpOwogICAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgYnJlYWs7CiAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgdHJ5X0ZURXh0ZW5zaW9uU2VsZWN0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0ZUV29yZHMoKTsKICAgICAgbG9va2FoZWFkMVcoMjE1KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBpZiAobDEgPT0gMTk1KSAgICAgICAgICAgICAgICAvLyAnb2NjdXJzJwogICAgICB7CiAgICAgICAgdHJ5X0ZUVGltZXMoKTsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRXb3JkcygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUV29yZHMiLCBlMCk7CiAgICBwYXJzZV9GVFdvcmRzVmFsdWUoKTsKICAgIGxvb2thaGVhZDFXKDIyMSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgaWYgKGwxID09IDcxICAgICAgICAgICAgICAgICAgICAvLyAnYWxsJwogICAgIHx8IGwxID09IDc2ICAgICAgICAgICAgICAgICAgICAvLyAnYW55JwogICAgIHx8IGwxID09IDIxMCkgICAgICAgICAgICAgICAgICAvLyAncGhyYXNlJwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUQW55YWxsT3B0aW9uKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUV29yZHMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRXb3JkcygpCiAgewogICAgdHJ5X0ZUV29yZHNWYWx1ZSgpOwogICAgbG9va2FoZWFkMVcoMjIxKTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBpZiAobDEgPT0gNzEgICAgICAgICAgICAgICAgICAgIC8vICdhbGwnCiAgICAgfHwgbDEgPT0gNzYgICAgICAgICAgICAgICAgICAgIC8vICdhbnknCiAgICAgfHwgbDEgPT0gMjEwKSAgICAgICAgICAgICAgICAgIC8vICdwaHJhc2UnCiAgICB7CiAgICAgIHRyeV9GVEFueWFsbE9wdGlvbigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRXb3Jkc1ZhbHVlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRXb3Jkc1ZhbHVlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUV29yZHNWYWx1ZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFdvcmRzVmFsdWUoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHIoKTsKICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVEV4dGVuc2lvblNlbGVjdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZURXh0ZW5zaW9uU2VsZWN0aW9uIiwgZTApOwogICAgZm9yICg7OykKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9QcmFnbWEoKTsKICAgICAgbG9va2FoZWFkMVcoMTAwKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoIycgfCAnKDonIHwgJ3snCiAgICAgIGlmIChsMSAhPSAzNSkgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMTY2KTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JyB8ICd9JwogICAgaWYgKGwxICE9IDI4MikgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVFNlbGVjdGlvbigpOwogICAgfQogICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRFeHRlbnNpb25TZWxlY3Rpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRFeHRlbnNpb25TZWxlY3Rpb24oKQogIHsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHRyeV9QcmFnbWEoKTsKICAgICAgbG9va2FoZWFkMVcoMTAwKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoIycgfCAnKDonIHwgJ3snCiAgICAgIGlmIChsMSAhPSAzNSkgICAgICAgICAgICAgICAgIC8vICcoIycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMTY2KTsgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoJyB8ICcoIycgfCAnKDonIHwgJ2Z0bm90JyB8ICd7JyB8ICd9JwogICAgaWYgKGwxICE9IDI4MikgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgdHJ5X0ZUU2VsZWN0aW9uKCk7CiAgICB9CiAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRBbnlhbGxPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVEFueWFsbE9wdGlvbiIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbnknCiAgICAgIHNoaWZ0KDc2KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbnknCiAgICAgIGxvb2thaGVhZDFXKDIxOCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxID09IDI3MikgICAgICAgICAgICAgICAgLy8gJ3dvcmQnCiAgICAgIHsKICAgICAgICBzaGlmdCgyNzIpOyAgICAgICAgICAgICAgICAgLy8gJ3dvcmQnCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDcxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGwnCiAgICAgIHNoaWZ0KDcxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGwnCiAgICAgIGxvb2thaGVhZDFXKDIxOSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxID09IDI3MykgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICB7CiAgICAgICAgc2hpZnQoMjczKTsgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIxMCk7ICAgICAgICAgICAgICAgICAgIC8vICdwaHJhc2UnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUQW55YWxsT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUQW55YWxsT3B0aW9uKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA3NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW55JwogICAgICBzaGlmdFQoNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnYW55JwogICAgICBsb29rYWhlYWQxVygyMTgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSA9PSAyNzIpICAgICAgICAgICAgICAgIC8vICd3b3JkJwogICAgICB7CiAgICAgICAgc2hpZnRUKDI3Mik7ICAgICAgICAgICAgICAgIC8vICd3b3JkJwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSA3MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsJwogICAgICBzaGlmdFQoNzEpOyAgICAgICAgICAgICAgICAgICAvLyAnYWxsJwogICAgICBsb29rYWhlYWQxVygyMTkpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgIGlmIChsMSA9PSAyNzMpICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgewogICAgICAgIHNoaWZ0VCgyNzMpOyAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjEwKTsgICAgICAgICAgICAgICAgICAvLyAncGhyYXNlJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRUaW1lcygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUVGltZXMiLCBlMCk7CiAgICBzaGlmdCgxOTUpOyAgICAgICAgICAgICAgICAgICAgIC8vICdvY2N1cnMnCiAgICBsb29rYWhlYWQxVygxNDkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICdleGFjdGx5JyB8ICdmcm9tJwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRlRSYW5nZSgpOwogICAgc2hpZnQoMjQ3KTsgICAgICAgICAgICAgICAgICAgICAvLyAndGltZXMnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUVGltZXMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRUaW1lcygpCiAgewogICAgc2hpZnRUKDE5NSk7ICAgICAgICAgICAgICAgICAgICAvLyAnb2NjdXJzJwogICAgbG9va2FoZWFkMVcoMTQ5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnZXhhY3RseScgfCAnZnJvbScKICAgIHRyeV9GVFJhbmdlKCk7CiAgICBzaGlmdFQoMjQ3KTsgICAgICAgICAgICAgICAgICAgIC8vICd0aW1lcycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUUmFuZ2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFJhbmdlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTMwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4YWN0bHknCiAgICAgIHNoaWZ0KDEzMCk7ICAgICAgICAgICAgICAgICAgIC8vICdleGFjdGx5JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9BZGRpdGl2ZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxMjUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsZWFzdCcgfCAnbW9zdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgICAgc2hpZnQoMTczKTsgICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDE4Myk7ICAgICAgICAgICAgICAgICAvLyAnbW9zdCcKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTQwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgICBzaGlmdCgyNDgpOyAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0FkZGl0aXZlRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFJhbmdlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUUmFuZ2UoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGFjdGx5JwogICAgICBzaGlmdFQoMTMwKTsgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9BZGRpdGl2ZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxMjUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsZWFzdCcgfCAnbW9zdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgICAgc2hpZnRUKDE3Myk7ICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0FkZGl0aXZlRXhwcigpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgxODMpOyAgICAgICAgICAgICAgICAvLyAnbW9zdCcKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0FkZGl0aXZlRXhwcigpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE0MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfQWRkaXRpdmVFeHByKCk7CiAgICAgIHNoaWZ0VCgyNDgpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9BZGRpdGl2ZUV4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUUG9zRmlsdGVyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRQb3NGaWx0ZXIiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgcGFyc2VfRlRPcmRlcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpbmRvdycKICAgICAgcGFyc2VfRlRXaW5kb3coKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDExNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXN0YW5jZScKICAgICAgcGFyc2VfRlREaXN0YW5jZSgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTE1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpZmZlcmVudCcKICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhbWUnCiAgICAgIHBhcnNlX0ZUU2NvcGUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9GVENvbnRlbnQoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRQb3NGaWx0ZXIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRQb3NGaWx0ZXIoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICB0cnlfRlRPcmRlcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpbmRvdycKICAgICAgdHJ5X0ZUV2luZG93KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGlzdGFuY2UnCiAgICAgIHRyeV9GVERpc3RhbmNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGlmZmVyZW50JwogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2FtZScKICAgICAgdHJ5X0ZUU2NvcGUoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRlRDb250ZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVE9yZGVyKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRPcmRlciIsIGUwKTsKICAgIHNoaWZ0KDIwMik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUT3JkZXIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRPcmRlcigpCiAgewogICAgc2hpZnRUKDIwMik7ICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUV2luZG93KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRXaW5kb3ciLCBlMCk7CiAgICBzaGlmdCgyNjkpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aW5kb3cnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfQWRkaXRpdmVFeHByKCk7CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GVFVuaXQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRXaW5kb3ciLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRXaW5kb3coKQogIHsKICAgIHNoaWZ0VCgyNjkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3dpbmRvdycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfQWRkaXRpdmVFeHByKCk7CiAgICB0cnlfRlRVbml0KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVERpc3RhbmNlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlREaXN0YW5jZSIsIGUwKTsKICAgIHNoaWZ0KDExNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rpc3RhbmNlJwogICAgbG9va2FoZWFkMVcoMTQ5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnZXhhY3RseScgfCAnZnJvbScKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0ZUUmFuZ2UoKTsKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0ZUVW5pdCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVERpc3RhbmNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZURGlzdGFuY2UoKQogIHsKICAgIHNoaWZ0VCgxMTcpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Rpc3RhbmNlJwogICAgbG9va2FoZWFkMVcoMTQ5KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcgfCAnZXhhY3RseScgfCAnZnJvbScKICAgIHRyeV9GVFJhbmdlKCk7CiAgICB0cnlfRlRVbml0KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFVuaXQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFVuaXQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIHNoaWZ0KDI3Myk7ICAgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZXMnCiAgICAgIHNoaWZ0KDIzMik7ICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZXMnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjA1KTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmFncmFwaHMnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUVW5pdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFVuaXQoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3b3JkcycKICAgICAgc2hpZnRUKDI3Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICBicmVhazsKICAgIGNhc2UgMjMyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgc2hpZnRUKDIzMik7ICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlcycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMjA1KTsgICAgICAgICAgICAgICAgICAvLyAncGFyYWdyYXBocycKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUU2NvcGUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFNjb3BlIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhbWUnCiAgICAgIHNoaWZ0KDIyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdzYW1lJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDExNSk7ICAgICAgICAgICAgICAgICAgIC8vICdkaWZmZXJlbnQnCiAgICB9CiAgICBsb29rYWhlYWQxVygxMzIpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3BhcmFncmFwaCcgfCAnc2VudGVuY2UnCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9GVEJpZ1VuaXQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTY29wZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFNjb3BlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2FtZScKICAgICAgc2hpZnRUKDIyMyk7ICAgICAgICAgICAgICAgICAgLy8gJ3NhbWUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDExNSk7ICAgICAgICAgICAgICAgICAgLy8gJ2RpZmZlcmVudCcKICAgIH0KICAgIGxvb2thaGVhZDFXKDEzMik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncGFyYWdyYXBoJyB8ICdzZW50ZW5jZScKICAgIHRyeV9GVEJpZ1VuaXQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUQmlnVW5pdCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUQmlnVW5pdCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZScKICAgICAgc2hpZnQoMjMxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDIwNCk7ICAgICAgICAgICAgICAgICAgIC8vICdwYXJhZ3JhcGgnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUQmlnVW5pdCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVEJpZ1VuaXQoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZW50ZW5jZScKICAgICAgc2hpZnRUKDIzMSk7ICAgICAgICAgICAgICAgICAgLy8gJ3NlbnRlbmNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyMDQpOyAgICAgICAgICAgICAgICAgIC8vICdwYXJhZ3JhcGgnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVENvbnRlbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVENvbnRlbnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0KDgxKTsgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgbG9va2FoZWFkMVcoMTE3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5kJyB8ICdzdGFydCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDIzNzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgICAgc2hpZnQoMjM3KTsgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdCgxMjYpOyAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbnRpcmUnCiAgICAgIGxvb2thaGVhZDFXKDQyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRlbnQnCiAgICAgIHNoaWZ0KDEwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdjb250ZW50JwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVENvbnRlbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRDb250ZW50KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIHNoaWZ0VCg4MSk7ICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgbG9va2FoZWFkMVcoMTE3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZW5kJyB8ICdzdGFydCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDIzNzogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgICAgc2hpZnRUKDIzNyk7ICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMTI2KTsgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxMjcpOyAgICAgICAgICAgICAgICAgIC8vICdlbnRpcmUnCiAgICAgIGxvb2thaGVhZDFXKDQyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRlbnQnCiAgICAgIHNoaWZ0VCgxMDApOyAgICAgICAgICAgICAgICAgIC8vICdjb250ZW50JwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRNYXRjaE9wdGlvbnMoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVE1hdGNoT3B0aW9ucyIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHNoaWZ0KDI1OSk7ICAgICAgICAgICAgICAgICAgIC8vICd1c2luZycKICAgICAgbG9va2FoZWFkMVcoMTgxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScgfCAnZGlhY3JpdGljcycgfCAnbGFuZ3VhZ2UnIHwgJ2xvd2VyY2FzZScgfCAnbm8nIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9GVE1hdGNoT3B0aW9uKCk7CiAgICAgIGxvb2thaGVhZDFXKDIxNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgaWYgKGwxICE9IDI1OSkgICAgICAgICAgICAgICAgLy8gJ3VzaW5nJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRNYXRjaE9wdGlvbnMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRNYXRjaE9wdGlvbnMoKQogIHsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHNoaWZ0VCgyNTkpOyAgICAgICAgICAgICAgICAgIC8vICd1c2luZycKICAgICAgbG9va2FoZWFkMVcoMTgxKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScgfCAnZGlhY3JpdGljcycgfCAnbGFuZ3VhZ2UnIHwgJ2xvd2VyY2FzZScgfCAnbm8nIHwKICAgICAgdHJ5X0ZUTWF0Y2hPcHRpb24oKTsKICAgICAgbG9va2FoZWFkMVcoMjE0KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICBpZiAobDEgIT0gMjU5KSAgICAgICAgICAgICAgICAvLyAndXNpbmcnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRNYXRjaE9wdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUTWF0Y2hPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxODg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm8nCiAgICAgIGxvb2thaGVhZDJXKDE2MSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3N0ZW1taW5nJyB8ICdzdG9wJyB8ICd0aGVzYXVydXMnIHwgJ3dpbGRjYXJkcycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTY5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhbmd1YWdlJwogICAgICBwYXJzZV9GVExhbmd1YWdlT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgY2FzZSAxMzc0MDQ6ICAgICAgICAgICAgICAgICAgICAvLyAnbm8nICd3aWxkY2FyZHMnCiAgICAgIHBhcnNlX0ZUV2lsZENhcmRPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0aGVzYXVydXMnCiAgICBjYXNlIDEyNjE0MDogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3RoZXNhdXJ1cycKICAgICAgcGFyc2VfRlRUaGVzYXVydXNPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgIGNhc2UgMTIyMDQ0OiAgICAgICAgICAgICAgICAgICAgLy8gJ25vJyAnc3RlbW1pbmcnCiAgICAgIHBhcnNlX0ZUU3RlbU9wdGlvbigpOwogICAgICBicmVhazsKICAgIGNhc2UgMTE0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpYWNyaXRpY3MnCiAgICAgIHBhcnNlX0ZURGlhY3JpdGljc09wdGlvbigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICBjYXNlIDEyMjU1NjogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3N0b3AnCiAgICAgIHBhcnNlX0ZUU3RvcFdvcmRPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIHBhcnNlX0ZURXh0ZW5zaW9uT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRlRDYXNlT3B0aW9uKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUTWF0Y2hPcHRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRNYXRjaE9wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTg4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vJwogICAgICBsb29rYWhlYWQyVygxNjEpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdzdGVtbWluZycgfCAnc3RvcCcgfCAndGhlc2F1cnVzJyB8ICd3aWxkY2FyZHMnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE2OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYW5ndWFnZScKICAgICAgdHJ5X0ZUTGFuZ3VhZ2VPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aWxkY2FyZHMnCiAgICBjYXNlIDEzNzQwNDogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3dpbGRjYXJkcycKICAgICAgdHJ5X0ZUV2lsZENhcmRPcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0aGVzYXVydXMnCiAgICBjYXNlIDEyNjE0MDogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3RoZXNhdXJ1cycKICAgICAgdHJ5X0ZUVGhlc2F1cnVzT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RlbW1pbmcnCiAgICBjYXNlIDEyMjA0NDogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3N0ZW1taW5nJwogICAgICB0cnlfRlRTdGVtT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGlhY3JpdGljcycKICAgICAgdHJ5X0ZURGlhY3JpdGljc09wdGlvbigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICBjYXNlIDEyMjU1NjogICAgICAgICAgICAgICAgICAgIC8vICdubycgJ3N0b3AnCiAgICAgIHRyeV9GVFN0b3BXb3JkT3B0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3B0aW9uJwogICAgICB0cnlfRlRFeHRlbnNpb25PcHRpb24oKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfRlRDYXNlT3B0aW9uKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVENhc2VPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVENhc2VPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnQoODgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGxvb2thaGVhZDFXKDEyNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2luc2Vuc2l0aXZlJyB8ICdzZW5zaXRpdmUnCiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAxNTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICAgIHNoaWZ0KDE1OCk7ICAgICAgICAgICAgICAgICAvLyAnaW5zZW5zaXRpdmUnCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoMjMwKTsgICAgICAgICAgICAgICAgIC8vICdzZW5zaXRpdmUnCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb3dlcmNhc2UnCiAgICAgIHNoaWZ0KDE3Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdsb3dlcmNhc2UnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjU4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwcGVyY2FzZScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRDYXNlT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUQ2FzZU9wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0VCg4OCk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBsb29rYWhlYWQxVygxMjQpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbnNlbnNpdGl2ZScgfCAnc2Vuc2l0aXZlJwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlbnNpdGl2ZScKICAgICAgICBzaGlmdFQoMTU4KTsgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgyMzApOyAgICAgICAgICAgICAgICAvLyAnc2Vuc2l0aXZlJwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG93ZXJjYXNlJwogICAgICBzaGlmdFQoMTc3KTsgICAgICAgICAgICAgICAgICAvLyAnbG93ZXJjYXNlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyNTgpOyAgICAgICAgICAgICAgICAgIC8vICd1cHBlcmNhc2UnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVERpYWNyaXRpY3NPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVERpYWNyaXRpY3NPcHRpb24iLCBlMCk7CiAgICBzaGlmdCgxMTQpOyAgICAgICAgICAgICAgICAgICAgIC8vICdkaWFjcml0aWNzJwogICAgbG9va2FoZWFkMVcoMTI0KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdpbnNlbnNpdGl2ZScgfCAnc2Vuc2l0aXZlJwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTU4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICBzaGlmdCgxNTgpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zZW5zaXRpdmUnCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMjMwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3NlbnNpdGl2ZScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlREaWFjcml0aWNzT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZURGlhY3JpdGljc09wdGlvbigpCiAgewogICAgc2hpZnRUKDExNCk7ICAgICAgICAgICAgICAgICAgICAvLyAnZGlhY3JpdGljcycKICAgIGxvb2thaGVhZDFXKDEyNCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnaW5zZW5zaXRpdmUnIHwgJ3NlbnNpdGl2ZScKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE1ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlbnNpdGl2ZScKICAgICAgc2hpZnRUKDE1OCk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc2Vuc2l0aXZlJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgyMzApOyAgICAgICAgICAgICAgICAgIC8vICdzZW5zaXRpdmUnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFN0ZW1PcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFN0ZW1PcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RlbW1pbmcnCiAgICAgIHNoaWZ0KDIzOCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxODgpOyAgICAgICAgICAgICAgICAgICAvLyAnbm8nCiAgICAgIGxvb2thaGVhZDFXKDc0KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3N0ZW1taW5nJwogICAgICBzaGlmdCgyMzgpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RlbW1pbmcnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUU3RlbU9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFN0ZW1PcHRpb24oKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDIzODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgICAgc2hpZnRUKDIzOCk7ICAgICAgICAgICAgICAgICAgLy8gJ3N0ZW1taW5nJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxODgpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzQpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc3RlbW1pbmcnCiAgICAgIHNoaWZ0VCgyMzgpOyAgICAgICAgICAgICAgICAgIC8vICdzdGVtbWluZycKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUVGhlc2F1cnVzT3B0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRUaGVzYXVydXNPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgICBzaGlmdCgyNDYpOyAgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgICBsb29rYWhlYWQxVygxNDIpOyAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JyB8ICdhdCcgfCAnZGVmYXVsdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgIHBhcnNlX0ZUVGhlc2F1cnVzSUQoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgICAgc2hpZnQoMTA5KTsgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0KDM0KTsgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgICAgICBsb29rYWhlYWQxVygxMTIpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXQnIHwgJ2RlZmF1bHQnCiAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICB7CiAgICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICAgIHBhcnNlX0ZUVGhlc2F1cnVzSUQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIH0KICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIGxvb2thaGVhZDFXKDEwMSk7ICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICAgIGxvb2thaGVhZDFXKDMxKTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXQnCiAgICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgICBwYXJzZV9GVFRoZXNhdXJ1c0lEKCk7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDM3KTsgICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE4OCk7ICAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlc2F1cnVzJwogICAgICBzaGlmdCgyNDYpOyAgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGVFRoZXNhdXJ1c09wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFRoZXNhdXJ1c09wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RoZXNhdXJ1cycKICAgICAgc2hpZnRUKDI0Nik7ICAgICAgICAgICAgICAgICAgLy8gJ3RoZXNhdXJ1cycKICAgICAgbG9va2FoZWFkMVcoMTQyKTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicgfCAnYXQnIHwgJ2RlZmF1bHQnCiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIHRyeV9GVFRoZXNhdXJ1c0lEKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgICAgbG9va2FoZWFkMVcoMTEyKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2F0JyB8ICdkZWZhdWx0JwogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgICB0cnlfRlRUaGVzYXVydXNJRCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgICAgfQogICAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcpJyB8ICcsJwogICAgICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAvLyAnLCcKICAgICAgICAgIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgICAgbG9va2FoZWFkMVcoMzEpOyAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhdCcKICAgICAgICAgIHRyeV9GVFRoZXNhdXJ1c0lEKCk7CiAgICAgICAgfQogICAgICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAvLyAnKScKICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxODgpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndGhlc2F1cnVzJwogICAgICBzaGlmdFQoMjQ2KTsgICAgICAgICAgICAgICAgICAvLyAndGhlc2F1cnVzJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRUaGVzYXVydXNJRCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUVGhlc2F1cnVzSUQiLCBlMCk7CiAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGxvb2thaGVhZDFXKDIyMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgaWYgKGwxID09IDIxNykgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgewogICAgICBzaGlmdCgyMTcpOyAgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgfQogICAgbG9va2FoZWFkMVcoMjE2KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDJXKDE2NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VuZCcgfCAnbGVhc3QnIHwgJ21vc3QnIHwgJ3Bvc2l0aW9uJyB8ICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDEzMCAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICB8fCBsayA9PSAxNDAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgfHwgbGsgPT0gODg2NTcgICAgICAgICAgICAgICAgIC8vICdhdCcgJ2xlYXN0JwogICAgIHx8IGxrID09IDkzNzc3KSAgICAgICAgICAgICAgICAvLyAnYXQnICdtb3N0JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0ZUTGl0ZXJhbFJhbmdlKCk7CiAgICAgIGxvb2thaGVhZDFXKDU4KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xldmVscycKICAgICAgc2hpZnQoMTc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2xldmVscycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRUaGVzYXVydXNJRCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFRoZXNhdXJ1c0lEKCkKICB7CiAgICBzaGlmdFQoODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGxvb2thaGVhZDFXKDIyMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgaWYgKGwxID09IDIxNykgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgewogICAgICBzaGlmdFQoMjE3KTsgICAgICAgICAgICAgICAgICAvLyAncmVsYXRpb25zaGlwJwogICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgfQogICAgbG9va2FoZWFkMVcoMjE2KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDJXKDE2NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2VuZCcgfCAnbGVhc3QnIHwgJ21vc3QnIHwgJ3Bvc2l0aW9uJyB8ICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDEzMCAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICB8fCBsayA9PSAxNDAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgfHwgbGsgPT0gODg2NTcgICAgICAgICAgICAgICAgIC8vICdhdCcgJ2xlYXN0JwogICAgIHx8IGxrID09IDkzNzc3KSAgICAgICAgICAgICAgICAvLyAnYXQnICdtb3N0JwogICAgewogICAgICB0cnlfRlRMaXRlcmFsUmFuZ2UoKTsKICAgICAgbG9va2FoZWFkMVcoNTgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbGV2ZWxzJwogICAgICBzaGlmdFQoMTc1KTsgICAgICAgICAgICAgICAgICAvLyAnbGV2ZWxzJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRMaXRlcmFsUmFuZ2UoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVExpdGVyYWxSYW5nZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGFjdGx5JwogICAgICBzaGlmdCgxMzApOyAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICBicmVhazsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDEyNSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xlYXN0JyB8ICdtb3N0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTczOiAgICAgICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBzaGlmdCgxNzMpOyAgICAgICAgICAgICAgICAgLy8gJ2xlYXN0JwogICAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgc2hpZnQoMTgzKTsgICAgICAgICAgICAgICAgIC8vICdtb3N0JwogICAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoOCk7ICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxNDApOyAgICAgICAgICAgICAgICAgICAvLyAnZnJvbScKICAgICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg4KTsgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICBsb29rYWhlYWQxVyg3OSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd0bycKICAgICAgc2hpZnQoMjQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgIHNoaWZ0KDgpOyAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUTGl0ZXJhbFJhbmdlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZUTGl0ZXJhbFJhbmdlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhhY3RseScKICAgICAgc2hpZnRUKDEzMCk7ICAgICAgICAgICAgICAgICAgLy8gJ2V4YWN0bHknCiAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDgpOyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxMjUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdsZWFzdCcgfCAnbW9zdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDE3MzogICAgICAgICAgICAgICAgICAgICAvLyAnbGVhc3QnCiAgICAgICAgc2hpZnRUKDE3Myk7ICAgICAgICAgICAgICAgIC8vICdsZWFzdCcKICAgICAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCg4KTsgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHNoaWZ0VCgxODMpOyAgICAgICAgICAgICAgICAvLyAnbW9zdCcKICAgICAgICBsb29rYWhlYWQxVygxNik7ICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCg4KTsgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE0MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICAgIGxvb2thaGVhZDFXKDE2KTsgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDgpOyAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgbG9va2FoZWFkMVcoNzkpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndG8nCiAgICAgIHNoaWZ0VCgyNDgpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgbG9va2FoZWFkMVcoMTYpOyAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdFQoOCk7ICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRTdG9wV29yZE9wdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUU3RvcFdvcmRPcHRpb24iLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMzk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RvcCcKICAgICAgc2hpZnQoMjM5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIGxvb2thaGVhZDFXKDg2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dvcmRzJwogICAgICBzaGlmdCgyNzMpOyAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICAgIGxvb2thaGVhZDFXKDE0Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonIHwgJ2F0JyB8ICdkZWZhdWx0JwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMTA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIGxvb2thaGVhZDFXKDIxNyk7ICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICAgICAgaWYgKGwxICE9IDEzMSAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICAgICAgICYmIGwxICE9IDI1NCkgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgICAgcGFyc2VfRlRTdG9wV29yZHNJbmNsRXhjbCgpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRlRTdG9wV29yZHMoKTsKICAgICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIGxvb2thaGVhZDFXKDIxNyk7ICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchPScgfCAnKDonIHwgJyknIHwgJywnIHwgJzonIHwgJzsnIHwgJzwnIHwgJzw8JyB8ICc8PScgfCAnPScgfAogICAgICAgICAgaWYgKGwxICE9IDEzMSAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgICAgICAgICYmIGwxICE9IDI1NCkgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgICAgICB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgd2hpdGVzcGFjZSgpOwogICAgICAgICAgcGFyc2VfRlRTdG9wV29yZHNJbmNsRXhjbCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE4OCk7ICAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc3RvcCcKICAgICAgc2hpZnQoMjM5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIGxvb2thaGVhZDFXKDg2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dvcmRzJwogICAgICBzaGlmdCgyNzMpOyAgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZUU3RvcFdvcmRPcHRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRTdG9wV29yZE9wdGlvbigpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjM5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIHNoaWZ0VCgyMzkpOyAgICAgICAgICAgICAgICAgIC8vICdzdG9wJwogICAgICBsb29rYWhlYWQxVyg4Nik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd3b3JkcycKICAgICAgc2hpZnRUKDI3Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3dvcmRzJwogICAgICBsb29rYWhlYWQxVygxNDIpOyAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JyB8ICdhdCcgfCAnZGVmYXVsdCcKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgICBzaGlmdFQoMTA5KTsgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBsb29rYWhlYWQxVygyMTcpOyAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIT0nIHwgJyg6JyB8ICcpJyB8ICcsJyB8ICc6JyB8ICc7JyB8ICc8JyB8ICc8PCcgfCAnPD0nIHwgJz0nIHwKICAgICAgICAgIGlmIChsMSAhPSAxMzEgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgICAgICAmJiBsMSAhPSAyNTQpICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICAgICAgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHRyeV9GVFN0b3BXb3Jkc0luY2xFeGNsKCk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRyeV9GVFN0b3BXb3JkcygpOwogICAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgbG9va2FoZWFkMVcoMjE3KTsgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyE9JyB8ICcoOicgfCAnKScgfCAnLCcgfCAnOicgfCAnOycgfCAnPCcgfCAnPDwnIHwgJzw9JyB8ICc9JyB8CiAgICAgICAgICBpZiAobDEgIT0gMTMxICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgICAgICAgJiYgbDEgIT0gMjU0KSAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgICAgIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICB0cnlfRlRTdG9wV29yZHNJbmNsRXhjbCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxODgpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoNzUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnc3RvcCcKICAgICAgc2hpZnRUKDIzOSk7ICAgICAgICAgICAgICAgICAgLy8gJ3N0b3AnCiAgICAgIGxvb2thaGVhZDFXKDg2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dvcmRzJwogICAgICBzaGlmdFQoMjczKTsgICAgICAgICAgICAgICAgICAvLyAnd29yZHMnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFN0b3BXb3JkcygpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUU3RvcFdvcmRzIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIGZvciAoOzspCiAgICAgIHsKICAgICAgICBsb29rYWhlYWQxVygxMDEpOyAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKScgfCAnLCcKICAgICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICAgICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgfQogICAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTdG9wV29yZHMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRTdG9wV29yZHMoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBsb29rYWhlYWQxVygxNSk7ICAgICAgICAgICAgICAvLyBVUklMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDcpOyAgICAgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIHwgU15XUyB8ICcoOicKICAgICAgc2hpZnRUKDExKTsgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBmb3IgKDs7KQogICAgICB7CiAgICAgICAgbG9va2FoZWFkMVcoMTAxKTsgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyknIHwgJywnCiAgICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgIC8vICcsJwogICAgICAgIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgICAgbG9va2FoZWFkMVcoMTcpOyAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgICAgIHNoaWZ0VCgxMSk7ICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIH0KICAgICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9GVFN0b3BXb3Jkc0luY2xFeGNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRTdG9wV29yZHNJbmNsRXhjbCIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgc2hpZnQoMjU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICB9CiAgICBsb29rYWhlYWQxVyg5OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonIHwgJ2F0JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRlRTdG9wV29yZHMoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRTdG9wV29yZHNJbmNsRXhjbCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFN0b3BXb3Jkc0luY2xFeGNsKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIHNoaWZ0VCgyNTQpOyAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdFQoMTMxKTsgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgfQogICAgbG9va2FoZWFkMVcoOTkpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JyB8ICdhdCcKICAgIHRyeV9GVFN0b3BXb3JkcygpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRMYW5ndWFnZU9wdGlvbigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkZUTGFuZ3VhZ2VPcHRpb24iLCBlMCk7CiAgICBzaGlmdCgxNjkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdsYW5ndWFnZScKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCgxMSk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRMYW5ndWFnZU9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVExhbmd1YWdlT3B0aW9uKCkKICB7CiAgICBzaGlmdFQoMTY5KTsgICAgICAgICAgICAgICAgICAgIC8vICdsYW5ndWFnZScKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoMTEpOyAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUV2lsZENhcmRPcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVFdpbGRDYXJkT3B0aW9uIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjY4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpbGRjYXJkcycKICAgICAgc2hpZnQoMjY4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpbGRjYXJkcycKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBzaGlmdCgxODgpOyAgICAgICAgICAgICAgICAgICAvLyAnbm8nCiAgICAgIGxvb2thaGVhZDFXKDg0KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3dpbGRjYXJkcycKICAgICAgc2hpZnQoMjY4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3dpbGRjYXJkcycKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRXaWxkQ2FyZE9wdGlvbiIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GVFdpbGRDYXJkT3B0aW9uKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgICBzaGlmdFQoMjY4KTsgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxODgpOyAgICAgICAgICAgICAgICAgIC8vICdubycKICAgICAgbG9va2FoZWFkMVcoODQpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnd2lsZGNhcmRzJwogICAgICBzaGlmdFQoMjY4KTsgICAgICAgICAgICAgICAgICAvLyAnd2lsZGNhcmRzJwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRlRFeHRlbnNpb25PcHRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGVEV4dGVuc2lvbk9wdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDE5OSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVygxNyk7ICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgfCBTXldTIHwgJyg6JwogICAgc2hpZnQoMTEpOyAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkZURXh0ZW5zaW9uT3B0aW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0ZURXh0ZW5zaW9uT3B0aW9uKCkKICB7CiAgICBzaGlmdFQoMTk5KTsgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE3KTsgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdFQoMTEpOyAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0ZUSWdub3JlT3B0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRlRJZ25vcmVPcHRpb24iLCBlMCk7CiAgICBzaGlmdCgyNzEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRob3V0JwogICAgbG9va2FoZWFkMVcoNDIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjb250ZW50JwogICAgc2hpZnQoMTAwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGVudCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9VbmlvbkV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRlRJZ25vcmVPcHRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRlRJZ25vcmVPcHRpb24oKQogIHsKICAgIHNoaWZ0VCgyNzEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGhvdXQnCiAgICBsb29rYWhlYWQxVyg0Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnRlbnQnCiAgICBzaGlmdFQoMTAwKTsgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZW50JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9VbmlvbkV4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbGxlY3Rpb25EZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29sbGVjdGlvbkRlY2wiLCBlMCk7CiAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsZWN0aW9uJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDEwNyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnOycgfCAnYXMnCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Db2xsZWN0aW9uVHlwZURlY2woKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29sbGVjdGlvbkRlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db2xsZWN0aW9uVHlwZURlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb2xsZWN0aW9uVHlwZURlY2wiLCBlMCk7CiAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSXRlbVR5cGUoKTsKICAgIGxvb2thaGVhZDFXKDE1Nik7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnKicgfCAnKycgfCAnOycgfCAnPycKICAgIGlmIChsMSAhPSA1MykgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfT2NjdXJyZW5jZUluZGljYXRvcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb2xsZWN0aW9uVHlwZURlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbmRleE5hbWUoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbmRleE5hbWUiLCBlMCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5kZXhOYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhEb21haW5FeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhEb21haW5FeHByIiwgZTApOwogICAgcGFyc2VfUGF0aEV4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5kZXhEb21haW5FeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhLZXlTcGVjKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhLZXlTcGVjIiwgZTApOwogICAgcGFyc2VfSW5kZXhLZXlFeHByKCk7CiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbmRleEtleVR5cGVEZWNsKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxNDYpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzsnIHwgJ2NvbGxhdGlvbicKICAgIGlmIChsMSA9PSA5NCkgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbmRleEtleUNvbGxhdGlvbigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbmRleEtleVNwZWMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbmRleEtleUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbmRleEtleUV4cHIiLCBlMCk7CiAgICBwYXJzZV9QYXRoRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbmRleEtleUV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbmRleEtleVR5cGVEZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSW5kZXhLZXlUeXBlRGVjbCIsIGUwKTsKICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9BdG9taWNUeXBlKCk7CiAgICBsb29rYWhlYWQxVygxNjkpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJzsnIHwgJz8nIHwgJ2NvbGxhdGlvbicKICAgIGlmIChsMSA9PSAzOSAgICAgICAgICAgICAgICAgICAgLy8gJyonCiAgICAgfHwgbDEgPT0gNDAgICAgICAgICAgICAgICAgICAgIC8vICcrJwogICAgIHx8IGwxID09IDY0KSAgICAgICAgICAgICAgICAgICAvLyAnPycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9PY2N1cnJlbmNlSW5kaWNhdG9yKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkluZGV4S2V5VHlwZURlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BdG9taWNUeXBlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXRvbWljVHlwZSIsIGUwKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJBdG9taWNUeXBlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSW5kZXhLZXlDb2xsYXRpb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbmRleEtleUNvbGxhdGlvbiIsIGUwKTsKICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIGxvb2thaGVhZDFXKDE1KTsgICAgICAgICAgICAgICAgLy8gVVJJTGl0ZXJhbCB8IFNeV1MgfCAnKDonCiAgICBzaGlmdCg3KTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFVSSUxpdGVyYWwKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSW5kZXhLZXlDb2xsYXRpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JbmRleERlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJbmRleERlY2wiLCBlMCk7CiAgICBzaGlmdCgxNTUpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSW5kZXhOYW1lKCk7CiAgICBsb29rYWhlYWQxVyg2NSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29uJwogICAgc2hpZnQoMTk3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb24nCiAgICBsb29rYWhlYWQxVyg2Myk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGVzJwogICAgc2hpZnQoMTkyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZXMnCiAgICBsb29rYWhlYWQxVygyNjUpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSW5kZXhEb21haW5FeHByKCk7CiAgICBzaGlmdCg4Nyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdieScKICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JbmRleEtleVNwZWMoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDEwMyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzsnCiAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnQoNDEpOyAgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0luZGV4S2V5U3BlYygpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJbmRleERlY2wiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JQ0RlY2woKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJQ0RlY2wiLCBlMCk7CiAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICBsb29rYWhlYWQxVyg0MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbnN0cmFpbnQnCiAgICBzaGlmdCg5Nyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDEyMCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZm9yZWlnbicgfCAnb24nCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxOTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb24nCiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSUNDb2xsZWN0aW9uKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JQ0ZvcmVpZ25LZXkoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSUNEZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSUNDb2xsZWN0aW9uKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNDb2xsZWN0aW9uIiwgZTApOwogICAgc2hpZnQoMTk3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnb24nCiAgICBsb29rYWhlYWQxVygzOSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbGxlY3Rpb24nCiAgICBzaGlmdCg5NSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsZWN0aW9uJwogICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FUU5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE0MCk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnZm9yZWFjaCcgfCAnbm9kZScKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0lDQ29sbFNlcXVlbmNlKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JQ0NvbGxTZXF1ZW5jZVVuaXF1ZSgpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfSUNDb2xsTm9kZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJQ0NvbGxlY3Rpb24iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9JQ0NvbGxTZXF1ZW5jZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDQ29sbFNlcXVlbmNlIiwgZTApOwogICAgcGFyc2VfVmFyUmVmKCk7CiAgICBsb29rYWhlYWQxVygzNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NoZWNrJwogICAgc2hpZnQoOTIpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hlY2snCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJQ0NvbGxTZXF1ZW5jZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDQ29sbFNlcXVlbmNlVW5pcXVlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNDb2xsU2VxdWVuY2VVbmlxdWUiLCBlMCk7CiAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyUmVmKCk7CiAgICBsb29rYWhlYWQxVygzNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NoZWNrJwogICAgc2hpZnQoOTIpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hlY2snCiAgICBsb29rYWhlYWQxVyg4MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3VuaXF1ZScKICAgIHNoaWZ0KDI1NSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaXF1ZScKICAgIGxvb2thaGVhZDFXKDU3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAna2V5JwogICAgc2hpZnQoMTY4KTsgICAgICAgICAgICAgICAgICAgICAvLyAna2V5JwogICAgbG9va2FoZWFkMVcoMjY1KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1BhdGhFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklDQ29sbFNlcXVlbmNlVW5pcXVlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSUNDb2xsTm9kZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDQ29sbE5vZGUiLCBlMCk7CiAgICBzaGlmdCgxMzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdmb3JlYWNoJwogICAgbG9va2FoZWFkMVcoNjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdub2RlJwogICAgc2hpZnQoMTkxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1ZhclJlZigpOwogICAgbG9va2FoZWFkMVcoMzcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjaGVjaycKICAgIHNoaWZ0KDkyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoZWNrJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSUNDb2xsTm9kZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDRm9yZWlnbktleSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDRm9yZWlnbktleSIsIGUwKTsKICAgIHNoaWZ0KDEzOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcmVpZ24nCiAgICBsb29rYWhlYWQxVyg1Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2tleScKICAgIHNoaWZ0KDE2OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2tleScKICAgIGxvb2thaGVhZDFXKDUxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZnJvbScKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0lDRm9yZWlnbktleVNvdXJjZSgpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfSUNGb3JlaWduS2V5VGFyZ2V0KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklDRm9yZWlnbktleSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0lDRm9yZWlnbktleVNvdXJjZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIklDRm9yZWlnbktleVNvdXJjZSIsIGUwKTsKICAgIHNoaWZ0KDE0MCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Zyb20nCiAgICBsb29rYWhlYWQxVygzOSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbGxlY3Rpb24nCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JQ0ZvcmVpZ25LZXlWYWx1ZXMoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSUNGb3JlaWduS2V5U291cmNlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSUNGb3JlaWduS2V5VGFyZ2V0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNGb3JlaWduS2V5VGFyZ2V0IiwgZTApOwogICAgc2hpZnQoMjQ4KTsgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICBsb29rYWhlYWQxVygzOSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvbGxlY3Rpb24nCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9JQ0ZvcmVpZ25LZXlWYWx1ZXMoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSUNGb3JlaWduS2V5VGFyZ2V0IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSUNGb3JlaWduS2V5VmFsdWVzKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSUNGb3JlaWduS2V5VmFsdWVzIiwgZTApOwogICAgc2hpZnQoOTUpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGVjdGlvbicKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRVFOYW1lKCk7CiAgICBsb29rYWhlYWQxVyg2Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ25vZGUnCiAgICBzaGlmdCgxOTEpOyAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyUmVmKCk7CiAgICBsb29rYWhlYWQxVyg1Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2tleScKICAgIHNoaWZ0KDE2OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2tleScKICAgIGxvb2thaGVhZDFXKDI2NSk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9QYXRoRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJJQ0ZvcmVpZ25LZXlWYWx1ZXMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tbWVudCgpCiAgewogICAgc2hpZnRUKDM2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKDonCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxKDg5KTsgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMgfCAnKDonIHwgJzopJwogICAgICBpZiAobDEgPT0gNTApICAgICAgICAgICAgICAgICAvLyAnOiknCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMjQ6ICAgICAgICAgICAgICAgICAgICAgIC8vIENvbW1lbnRDb250ZW50cwogICAgICAgIHNoaWZ0VCgyNCk7ICAgICAgICAgICAgICAgICAvLyBDb21tZW50Q29udGVudHMKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0cnlfQ29tbWVudCgpOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoNTApOyAgICAgICAgICAgICAgICAgICAgIC8vICc6KScKICB9CgogIGZ1bmN0aW9uIHRyeV9XaGl0ZXNwYWNlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyMjogICAgICAgICAgICAgICAgICAgICAgICAvLyBTXldTCiAgICAgIHNoaWZ0VCgyMik7ICAgICAgICAgICAgICAgICAgIC8vIFNeV1MKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQ29tbWVudCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRVFOYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRVFOYW1lIiwgZTApOwogICAgbG9va2FoZWFkMSgyNDkpOyAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfCAnYW5kJyB8CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0KDk2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIHNoaWZ0KDEyMCk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBicmVhazsKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIHNoaWZ0KDEyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBzaGlmdCgxMjQpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIHNoaWZ0KDE0NSk7ICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgc2hpZnQoMTUyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBicmVhazsKICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIHNoaWZ0KDE2NSk7ICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBicmVhazsKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdCgxODUpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTkxKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgc2hpZnQoMjE2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgc2hpZnQoMjI2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIHNoaWZ0KDIyNyk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIHNoaWZ0KDI0Myk7ICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgc2hpZnQoMjQ0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnQoMjUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXJyYXknCiAgICAgIHNoaWZ0KDc4KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICAgIHNoaWZ0KDE2Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICBzaGlmdCgyNDIpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0Z1bmN0aW9uTmFtZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFUU5hbWUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRVFOYW1lKCkKICB7CiAgICBsb29rYWhlYWQxKDI0OSk7ICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8ICdhbmNlc3Rvci1vci1zZWxmJyB8ICdhbmQnIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIHNoaWZ0VCg4Mik7ICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgICAgc2hpZnRUKDk2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgc2hpZnRUKDEyMCk7ICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgc2hpZnRUKDEyMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIHNoaWZ0VCgxMjQpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnRUKDE0NSk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdFQoMTUyKTsgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgc2hpZnRUKDE2NSk7ICAgICAgICAgICAgICAgICAgLy8gJ2l0ZW0nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIHNoaWZ0VCgxODUpOyAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgICBzaGlmdFQoMTkxKTsgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBzaGlmdFQoMjE2KTsgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdFQoMjI2KTsgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnRUKDIyNyk7ICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnRUKDI0Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdFQoMjQ0KTsgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBzaGlmdFQoMjUzKTsgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgICAgc2hpZnRUKDc4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgICBicmVhazsKICAgIGNhc2UgMTY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgc2hpZnRUKDE2Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgIHNoaWZ0VCgyNDIpOyAgICAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0Z1bmN0aW9uTmFtZSgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25OYW1lKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25OYW1lIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIHNoaWZ0KDYpOyAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBicmVhazsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdCg3MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0KDczKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdCg3NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0KDc1KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0KDc5KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDgwKTsgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdCg4NCk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0KDg4KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0KDg5KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdCg5MCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0KDkzKTsgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgc2hpZnQoMTAzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwNSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdCgxMDgpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0KDExMCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnQoMTExKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdCgxMTIpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIHNoaWZ0KDExMyk7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgc2hpZnQoMTE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgc2hpZnQoMTE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0KDEyMik7ICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdCgxMjMpOyAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdCgxMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdCgxMjgpOyAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIHNoaWZ0KDEyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzNik7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIHNoaWZ0KDEzNyk7ICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIHNoaWZ0KDE0Nik7ICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgc2hpZnQoMTQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBzaGlmdCgxNTApOyAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgc2hpZnQoMTUxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNTMpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnQoMTYwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnQoMTYyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdCgxNjMpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnQoMTY0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIHNoaWZ0KDE3MCk7ICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdCgxNzIpOyAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdCgxNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdCgxNzgpOyAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdCgxODApOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnQoMTgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE4Mik7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODYpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMTk4KTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDIwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMjAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0KDIwMik7ICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnQoMjA2KTsgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0KDIxMik7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDIxMyk7ICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxODogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0KDIxOCk7ICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnQoMjE5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBzaGlmdCgyMjApOyAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBicmVhazsKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgc2hpZnQoMjI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdCgyMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdCgyMzUpOyAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIHNoaWZ0KDIzNik7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIHNoaWZ0KDIzNyk7ICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgc2hpZnQoMjQ4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBzaGlmdCgyNDkpOyAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdCgyNTApOyAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNTQpOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNjApOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI2Nik7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNzApOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDcyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDg1KTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTMzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTkyKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMTk5KTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMjAzKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIyOCk7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDI0MCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI1MSk7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNTIpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNjEpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI2Mik7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBzaGlmdCgyNjMpOyAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgc2hpZnQoMjY3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIHNoaWZ0KDk3KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIHNoaWZ0KDE3Nik7ICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBicmVhazsKICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgc2hpZnQoMjIxKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIHNoaWZ0KDc3KTsgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTk0KTsgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25OYW1lIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Z1bmN0aW9uTmFtZSgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIHNoaWZ0VCg2KTsgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBicmVhazsKICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBzaGlmdFQoNzApOyAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InCiAgICAgIHNoaWZ0VCg3Myk7ICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBzaGlmdFQoNzQpOyAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIHNoaWZ0VCg3NSk7ICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHNoaWZ0VCg3OSk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIHNoaWZ0VCg4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBzaGlmdFQoODQpOyAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBicmVhazsKICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHNoaWZ0VCg4OCk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBicmVhazsKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIHNoaWZ0VCg4OSk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBzaGlmdFQoOTApOyAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICAgIHNoaWZ0VCg5Myk7ICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0VCg5NCk7ICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgICAgc2hpZnRUKDEwMyk7ICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0VCgxMDUpOyAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBzaGlmdFQoMTA4KTsgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdFQoMTA5KTsgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIHNoaWZ0VCgxMTApOyAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgc2hpZnRUKDExMSk7ICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBzaGlmdFQoMTEyKTsgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIHNoaWZ0VCgxMTMpOyAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMTE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgc2hpZnRUKDExOCk7ICAgICAgICAgICAgICAgICAgLy8gJ2RpdicKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgc2hpZnRUKDExOSk7ICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIHNoaWZ0VCgxMjIpOyAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBzaGlmdFQoMTIzKTsgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBzaGlmdFQoMTI2KTsgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgICBzaGlmdFQoMTI4KTsgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIHNoaWZ0VCgxMjkpOyAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0VCgxMzEpOyAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0VCgxMzQpOyAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0VCgxMzUpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0VCgxMzYpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIHNoaWZ0VCgxMzcpOyAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIHNoaWZ0VCgxNDYpOyAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgc2hpZnRUKDE0OCk7ICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBicmVhazsKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBzaGlmdFQoMTUwKTsgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgICAgc2hpZnRUKDE1MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdFQoMTUzKTsgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnRUKDE1OSk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgc2hpZnRUKDE2MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgc2hpZnRUKDE2Mik7ICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBzaGlmdFQoMTYzKTsgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgc2hpZnRUKDE2NCk7ICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBicmVhazsKICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xhc3QnCiAgICAgIHNoaWZ0VCgxNzApOyAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBzaGlmdFQoMTcyKTsgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBzaGlmdFQoMTc0KTsgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBicmVhazsKICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBzaGlmdFQoMTc4KTsgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBzaGlmdFQoMTgwKTsgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBicmVhazsKICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgc2hpZnRUKDE4MSk7ICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0VCgxODIpOyAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdFQoMTg0KTsgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdFQoMTg2KTsgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnRUKDE5OCk7ICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0VCgyMDApOyAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnRUKDIwMSk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIHNoaWZ0VCgyMDIpOyAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgc2hpZnRUKDIwNik7ICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIHNoaWZ0VCgyMTIpOyAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0VCgyMTMpOyAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxODogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIHNoaWZ0VCgyMTgpOyAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgc2hpZnRUKDIxOSk7ICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICBicmVhazsKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgc2hpZnRUKDIyNCk7ICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBzaGlmdFQoMjI5KTsgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBzaGlmdFQoMjM1KTsgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIHNoaWZ0VCgyMzYpOyAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIHNoaWZ0VCgyMzcpOyAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgc2hpZnRUKDI0OCk7ICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBicmVhazsKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBzaGlmdFQoMjQ5KTsgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBzaGlmdFQoMjUwKTsgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdFQoMjU0KTsgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdFQoMjU2KTsgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdFQoMjYwKTsgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0VCgyNjYpOyAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdFQoMjcwKTsgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0VCgyNzQpOyAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0VCg3Mik7ICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdFQoODMpOyAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0VCg4NSk7ICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnRUKDg2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdFQoOTEpOyAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdFQoOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0VCgxMDEpOyAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdFQoMTAyKTsgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdFQoMTA0KTsgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdFQoMTA2KTsgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0VCgxMjUpOyAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdFQoMTMyKTsgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnRUKDEzMyk7ICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnRUKDE0MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnRUKDE1NCk7ICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdFQoMTU1KTsgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdFQoMTYxKTsgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnRUKDE3MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnRUKDE5Mik7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnRUKDE5OSk7ICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnRUKDIwMyk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnRUKDIyMik7ICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0VCgyMjUpOyAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0VCgyMjgpOyAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdFQoMjM0KTsgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0VCgyNDApOyAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0VCgyNTEpOyAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdFQoMjUyKTsgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnRUKDI1Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdFQoMjYxKTsgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0VCgyNjIpOyAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBzaGlmdFQoMjYzKTsgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgc2hpZnRUKDI2Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgICBicmVhazsKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICAgIHNoaWZ0VCg5Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICAgIHNoaWZ0VCgxNzYpOyAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBicmVhazsKICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgc2hpZnRUKDIyMSk7ICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIHNoaWZ0VCg3Nyk7ICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgc2hpZnRUKDE2Nik7ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE5NCk7ICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX05DTmFtZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIk5DTmFtZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgICBzaGlmdCgxOSk7ICAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgYnJlYWs7CiAgICBjYXNlIDcwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnQoNzApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnQoNzUpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnQoODApOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0KDg0KTsgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnQoODgpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnQoODkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0KDkwKTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0KDk0KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0KDEwNSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdCgxMDkpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBzaGlmdCgxMTMpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIHNoaWZ0KDExOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnQoMTIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0KDEyMyk7ICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0KDEyNik7ICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0KDEyOCk7ICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0KDEzMSk7ICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBzaGlmdCgxMzcpOyAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBzaGlmdCgxNDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHNoaWZ0KDE0OCk7ICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnQoMTUwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIHNoaWZ0KDE1MSk7ICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdCgxNjApOyAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdCgxNjIpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0KDE2Myk7ICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdCgxNjQpOyAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0KDE3Mik7ICAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0KDE3NCk7ICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0KDE3OCk7ICAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0KDE4MCk7ICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdCgxODEpOyAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdCgxODYpOyAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnQoMTk4KTsgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0KDIwMCk7ICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnQoMjAxKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIHNoaWZ0KDIyNCk7ICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBzaGlmdCgyMzYpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBzaGlmdCgyMzcpOyAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIHNoaWZ0KDI0OCk7ICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgc2hpZnQoMjQ5KTsgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdCgyNTQpOyAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0KDI2Nik7ICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdCgyNzApOyAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnQoNzMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0KDc0KTsgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnQoODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnQoOTMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0KDk2KTsgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIHNoaWZ0KDEwMyk7ICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBicmVhazsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0KDEwOCk7ICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdCgxMTEpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0KDExMik7ICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIHNoaWZ0KDExOSk7ICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBzaGlmdCgxMjApOyAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdCgxMjEpOyAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgc2hpZnQoMTI0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBzaGlmdCgxMjkpOyAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0KDEzNCk7ICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0KDEzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0KDEzNik7ICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnQoMTQ1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdCgxNTIpOyAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdCgxNTMpOyAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBzaGlmdCgxNjUpOyAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBzaGlmdCgxNzApOyAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0KDE4Mik7ICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdCgxODQpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdCgxODUpOyAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnQoMTkxKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnQoMjAyKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdCgyMDYpOyAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnQoMjEyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnQoMjEzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0KDIxNik7ICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnQoMjE4KTsgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdCgyMTkpOyAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdCgyMjYpOyAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnQoMjI3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0KDIyOSk7ICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0KDIzNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnQoMjQzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdCgyNDQpOyAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0KDI1MCk7ICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnQoMjUzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdCgyNTYpOyAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdCgyNjApOyAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0KDI2Mik7ICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0KDI3NCk7ICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0KDcyKTsgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnQoODEpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdCg4Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0KDg1KTsgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnQoODYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdCg5MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdCg5OCk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0KDEwMSk7ICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdCgxMDQpOyAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdCgxMDYpOyAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0KDEyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdCgxMzIpOyAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnQoMTMzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnQoMTQxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnQoMTU0KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdCgxNTUpOyAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdCgxNjEpOyAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnQoMTcxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnQoMTkyKTsgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnQoMTk5KTsgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnQoMjAzKTsgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnQoMjIyKTsgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0KDIyNSk7ICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0KDIyOCk7ICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdCgyMzQpOyAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0KDI0MCk7ICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0KDI1MSk7ICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdCgyNTIpOyAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnQoMjU3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdCgyNjEpOyAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgc2hpZnQoMjYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIHNoaWZ0KDI2Nyk7ICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBzaGlmdCg5Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBzaGlmdCgxNzYpOyAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIHNoaWZ0KDIyMSk7ICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBzaGlmdCg3Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIHNoaWZ0KDE2Nik7ICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDE5NCk7ICAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIk5DTmFtZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9OQ05hbWUoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbgogICAgICBzaGlmdFQoMTkpOyAgICAgICAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4KICAgICAgYnJlYWs7CiAgICBjYXNlIDcwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgc2hpZnRUKDcwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgICBicmVhazsKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgc2hpZnRUKDc1KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgICAgc2hpZnRUKDc5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBicmVhazsKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgc2hpZnRUKDgwKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIHNoaWZ0VCg4NCk7ICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgc2hpZnRUKDg4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgc2hpZnRUKDg5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnCiAgICAgIHNoaWZ0VCg5MCk7ICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIHNoaWZ0VCg5NCk7ICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICAgIHNoaWZ0VCgxMDUpOyAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgICBzaGlmdFQoMTA5KTsgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBzaGlmdFQoMTEzKTsgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIHNoaWZ0VCgxMTgpOyAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgc2hpZnRUKDEyMik7ICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICAgIHNoaWZ0VCgxMjMpOyAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIHNoaWZ0VCgxMjYpOyAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIHNoaWZ0VCgxMjgpOyAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIHNoaWZ0VCgxMzEpOyAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBzaGlmdFQoMTM3KTsgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBicmVhazsKICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBzaGlmdFQoMTQ2KTsgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIHNoaWZ0VCgxNDgpOyAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgc2hpZnRUKDE1MCk7ICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgICBicmVhazsKICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIHNoaWZ0VCgxNTEpOyAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBicmVhazsKICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJwogICAgICBzaGlmdFQoMTYwKTsgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBzaGlmdFQoMTYyKTsgICAgICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JwogICAgICBicmVhazsKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIHNoaWZ0VCgxNjMpOyAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBicmVhazsKICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJwogICAgICBzaGlmdFQoMTY0KTsgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIHNoaWZ0VCgxNzIpOyAgICAgICAgICAgICAgICAgIC8vICdsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIHNoaWZ0VCgxNzQpOyAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIHNoaWZ0VCgxNzgpOyAgICAgICAgICAgICAgICAgIC8vICdsdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIHNoaWZ0VCgxODApOyAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBzaGlmdFQoMTgxKTsgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBicmVhazsKICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBzaGlmdFQoMTg2KTsgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgc2hpZnRUKDE5OCk7ICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3InCiAgICAgIHNoaWZ0VCgyMDApOyAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicKICAgICAgc2hpZnRUKDIwMSk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBicmVhazsKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgc2hpZnRUKDIyMCk7ICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIHNoaWZ0VCgyMjQpOyAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBzaGlmdFQoMjM2KTsgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgICBicmVhazsKICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBzaGlmdFQoMjM3KTsgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIHNoaWZ0VCgyNDgpOyAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgc2hpZnRUKDI0OSk7ICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgICBicmVhazsKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgICBzaGlmdFQoMjU0KTsgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIHNoaWZ0VCgyNjYpOyAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBzaGlmdFQoMjcwKTsgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgc2hpZnRUKDczKTsgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBicmVhazsKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIHNoaWZ0VCg3NCk7ICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgc2hpZnRUKDgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgc2hpZnRUKDkzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIHNoaWZ0VCg5Nik7ICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIHNoaWZ0VCgxMDMpOyAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBicmVhazsKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICAgIHNoaWZ0VCgxMDgpOyAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBicmVhazsKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgc2hpZnRUKDExMCk7ICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JwogICAgICBzaGlmdFQoMTExKTsgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIHNoaWZ0VCgxMTIpOyAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIHNoaWZ0VCgxMTkpOyAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBzaGlmdFQoMTIwKTsgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbGVtZW50JwogICAgICBzaGlmdFQoMTIxKTsgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgICAgc2hpZnRUKDEyNCk7ICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgICBzaGlmdFQoMTI5KTsgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIHNoaWZ0VCgxMzQpOyAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIHNoaWZ0VCgxMzUpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgIHNoaWZ0VCgxMzYpOyAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgc2hpZnRUKDE0NSk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgICBzaGlmdFQoMTUyKTsgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBzaGlmdFQoMTUzKTsgICAgICAgICAgICAgICAgICAvLyAnaW1wb3J0JwogICAgICBicmVhazsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgc2hpZnRUKDE1OSk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBzaGlmdFQoMTY1KTsgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBzaGlmdFQoMTcwKTsgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIHNoaWZ0VCgxODIpOyAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBzaGlmdFQoMTg0KTsgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBicmVhazsKICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJwogICAgICBzaGlmdFQoMTg1KTsgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgc2hpZnRUKDE5MSk7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgICAgc2hpZnRUKDIwMik7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBzaGlmdFQoMjA2KTsgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgc2hpZnRUKDIxMik7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgICAgc2hpZnRUKDIxMyk7ICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjE2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgIHNoaWZ0VCgyMTYpOyAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgc2hpZnRUKDIxOCk7ICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBzaGlmdFQoMjE5KTsgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBzaGlmdFQoMjI2KTsgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgc2hpZnRUKDIyNyk7ICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgICBicmVhazsKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICAgIHNoaWZ0VCgyMjkpOyAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICBicmVhazsKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIHNoaWZ0VCgyMzUpOyAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBicmVhazsKICAgIGNhc2UgMjQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgc2hpZnRUKDI0Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBzaGlmdFQoMjQ0KTsgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIHNoaWZ0VCgyNTApOyAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgICAgc2hpZnRUKDI1Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBzaGlmdFQoMjU2KTsgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICBicmVhazsKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICBzaGlmdFQoMjYwKTsgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIHNoaWZ0VCgyNjIpOyAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIHNoaWZ0VCgyNzQpOyAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGJyZWFrOwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICAgIHNoaWZ0VCg3Mik7ICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICBicmVhazsKICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBzaGlmdFQoODMpOyAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIHNoaWZ0VCg4NSk7ICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgICAgc2hpZnRUKDg2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBicmVhazsKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBzaGlmdFQoOTEpOyAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGJyZWFrOwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBzaGlmdFQoOTgpOyAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBicmVhazsKICAgIGNhc2UgMTAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIHNoaWZ0VCgxMDEpOyAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgICBicmVhazsKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgICBzaGlmdFQoMTAyKTsgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBzaGlmdFQoMTA0KTsgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgICBicmVhazsKICAgIGNhc2UgMTA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBzaGlmdFQoMTA2KTsgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIHNoaWZ0VCgxMjUpOyAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICBzaGlmdFQoMTMyKTsgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDEzMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgc2hpZnRUKDEzMyk7ICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBicmVhazsKICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgc2hpZnRUKDE0MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgc2hpZnRUKDE1NCk7ICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBicmVhazsKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBzaGlmdFQoMTU1KTsgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBzaGlmdFQoMTYxKTsgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JwogICAgICBicmVhazsKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgc2hpZnRUKDE3MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE5MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgc2hpZnRUKDE5Mik7ICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBicmVhazsKICAgIGNhc2UgMTk5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgc2hpZnRUKDE5OSk7ICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgc2hpZnRUKDIwMyk7ICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgc2hpZnRUKDIyMik7ICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIHNoaWZ0VCgyMjUpOyAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NvcmUnCiAgICAgIHNoaWZ0VCgyMjgpOyAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgICBzaGlmdFQoMjM0KTsgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIHNoaWZ0VCgyNDApOyAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICAgIHNoaWZ0VCgyNTEpOyAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgICBzaGlmdFQoMjUyKTsgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgc2hpZnRUKDI1Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBicmVhazsKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBzaGlmdFQoMjYxKTsgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgc2hpZnRUKDI2Myk7ICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIHNoaWZ0VCgyNjcpOyAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgYnJlYWs7CiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBzaGlmdFQoOTcpOyAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBzaGlmdFQoMTc2KTsgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgYnJlYWs7CiAgICBjYXNlIDIyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIHNoaWZ0VCgyMjEpOyAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIGJyZWFrOwogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBzaGlmdFQoNzcpOyAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBicmVhazsKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIHNoaWZ0VCgxNjYpOyAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0VCgxOTQpOyAgICAgICAgICAgICAgICAgIC8vICdvYmplY3QnCiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9NYWluTW9kdWxlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiTWFpbk1vZHVsZSIsIGUwKTsKICAgIHBhcnNlX1Byb2xvZygpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfUHJvZ3JhbSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJNYWluTW9kdWxlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJvZ3JhbSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlByb2dyYW0iLCBlMCk7CiAgICBwYXJzZV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByb2dyYW0iLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TdGF0ZW1lbnRzKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3RhdGVtZW50cyIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDI3Nyk7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICAgIGxvb2thaGVhZDJXKDI2OCk7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAzNTogICAgICAgICAgICAgICAgICAgICAgLy8gJygjJwogICAgICAgIGxvb2thaGVhZDIoMjUxKTsgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwgJ2FuY2VzdG9yLW9yLXNlbGYnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA0NjogICAgICAgICAgICAgICAgICAgICAgLy8gJy8nCiAgICAgICAgbG9va2FoZWFkMlcoMjgzKTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQ3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLy8nCiAgICAgICAgbG9va2FoZWFkMlcoMjY0KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDU0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPCcKICAgICAgICBsb29rYWhlYWQyKDQpOyAgICAgICAgICAgICAgLy8gUU5hbWUKICAgICAgICBicmVhazsKICAgICAgY2FzZSA1NTogICAgICAgICAgICAgICAgICAgICAgLy8gJzwhLS0nCiAgICAgICAgbG9va2FoZWFkMigxKTsgICAgICAgICAgICAgIC8vIERpckNvbW1lbnRDb250ZW50cwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDU5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPD8nCiAgICAgICAgbG9va2FoZWFkMigzKTsgICAgICAgICAgICAgIC8vIFBJVGFyZ2V0CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjY6ICAgICAgICAgICAgICAgICAgICAgIC8vICdAJwogICAgICAgIGxvb2thaGVhZDJXKDI1Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCiAgICAgICAgbG9va2FoZWFkMlcoMjcxKTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICAgIGxvb2thaGVhZDJXKDE5OSk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgICAgICBsb29rYWhlYWQyVygyODApOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgICAgbG9va2FoZWFkMlcoMjc5KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTMyOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgICAgIGxvb2thaGVhZDJXKDIwMik7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgICAgICBsb29rYWhlYWQyVygyMDcpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgICBsb29rYWhlYWQyVygyMDQpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyMTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgICBsb29rYWhlYWQyVygyMDUpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICAgIGxvb2thaGVhZDJXKDIwNik7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyNjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgICAgIGxvb2thaGVhZDJXKDIwOSk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgICAgbG9va2FoZWFkMlcoMjc2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDI3ODogICAgICAgICAgICAgICAgICAgICAvLyAne3wnCiAgICAgICAgbG9va2FoZWFkMlcoMjcyKTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyBXaWxkY2FyZAogICAgICBjYXNlIDQ1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLi4nCiAgICAgICAgbG9va2FoZWFkMlcoMTg1KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfCAnPCcgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDMxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgY2FzZSAzMjogICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICAgICAgbG9va2FoZWFkMlcoMjU0KTsgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA0MDogICAgICAgICAgICAgICAgICAgICAgLy8gJysnCiAgICAgIGNhc2UgNDI6ICAgICAgICAgICAgICAgICAgICAgIC8vICctJwogICAgICAgIGxvb2thaGVhZDJXKDI2Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICAgICAgbG9va2FoZWFkMlcoMjAwKTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDExMDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgICBjYXNlIDE1OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICAgIGxvb2thaGVhZDJXKDIwOCk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScKICAgICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgICAgbG9va2FoZWFkMlcoMjY3KTsgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgICAgbG9va2FoZWFkMlcoMTk2KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgODogICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICAgIGNhc2UgOTogICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICAgIGNhc2UgMTA6ICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgICAgY2FzZSAxMTogICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICBjYXNlIDQ0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgICBsb29rYWhlYWQyVygxOTEpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzg6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgICAgY2FzZSAxMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJwogICAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAvLyAnaXRlbScKICAgICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScKICAgICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScKICAgICAgICBsb29rYWhlYWQyVygxOTApOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnCiAgICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJwogICAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgY2FzZSAyNTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgY2FzZSAyNTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgICBsb29rYWhlYWQyVygyMDMpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgIGNhc2UgOTM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgIGNhc2UgMTM1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgICAgY2FzZSAyMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgICAgY2FzZSAyMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgICAgY2FzZSAyMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICBjYXNlIDIyOTogICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgICAgICBsb29rYWhlYWQyVygxOTcpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgICBjYXNlIDcwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICAgIGNhc2UgNzI6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgICAgY2FzZSA3NTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgICAgY2FzZSA3OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICBjYXNlIDgwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgIGNhc2UgODM6ICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgICAgY2FzZSA4NDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgICAgY2FzZSA4NTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJwogICAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcKICAgICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicKICAgICAgY2FzZSAxMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnCiAgICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3VudCcKICAgICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JwogICAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScKICAgICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgICBjYXNlIDEyMDogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScKICAgICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eScKICAgICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJwogICAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAvLyAnZW5kJwogICAgICBjYXNlIDEyODogICAgICAgICAgICAgICAgICAgICAvLyAnZXEnCiAgICAgIGNhc2UgMTMxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JwogICAgICBjYXNlIDE0MTogICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgICBjYXNlIDE0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScKICAgICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dyb3VwJwogICAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAvLyAnZ3QnCiAgICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JwogICAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgICAgY2FzZSAxNzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgICAgY2FzZSAxNzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgICBjYXNlIDE4NTogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgIGNhc2UgMTg2OiAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgICAgY2FzZSAxOTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGUnCiAgICAgIGNhc2UgMTkyOiAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICAgIGNhc2UgMTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICAgIGNhc2UgMjAwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgICAgY2FzZSAyMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICAgIGNhc2UgMjI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJwogICAgICBjYXNlIDIyNzogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgICAgY2FzZSAyMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICAgIGNhc2UgMjM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnCiAgICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcKICAgICAgY2FzZSAyNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcKICAgICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJwogICAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAvLyAndHJlYXQnCiAgICAgIGNhc2UgMjUxOiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycKICAgICAgY2FzZSAyNTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGUnCiAgICAgIGNhc2UgMjUzOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBjYXNlIDI1NDogICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICAgIGNhc2UgMjU3OiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgICAgY2FzZSAyNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicKICAgICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJwogICAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGNhc2UgMjcwOiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JwogICAgICAgIGxvb2thaGVhZDJXKDE5NCk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayAhPSAyNSAgICAgICAgICAgICAgICAgIC8vIEVPRgogICAgICAgJiYgbGsgIT0gNTMgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgICYmIGxrICE9IDI4MiAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgICAmJiBsayAhPSAxMjgwNSAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MDYgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gRU9GCiAgICAgICAmJiBsayAhPSAxMjgwOCAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MDkgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCBFT0YKICAgICAgICYmIGxrICE9IDEyODEwICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCBFT0YKICAgICAgICYmIGxrICE9IDEyODExICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCBFT0YKICAgICAgICYmIGxrICE9IDEyODQ0ICAgICAgICAgICAgICAgLy8gJy4nIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NDUgICAgICAgICAgICAgICAvLyAnLi4nIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NDYgICAgICAgICAgICAgICAvLyAnLycgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3MCAgICAgICAgICAgICAgIC8vICdhZnRlcicgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3MiAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3MyAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3NCAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyBFT0YKICAgICAgICYmIGxrICE9IDEyODc1ICAgICAgICAgICAgICAgLy8gJ2FuZCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3NyAgICAgICAgICAgICAgIC8vICdhcHBlbmQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NzggICAgICAgICAgICAgICAvLyAnYXJyYXknIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NzkgICAgICAgICAgICAgICAvLyAnYXMnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4ODAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEyODgxICAgICAgICAgICAgICAgLy8gJ2F0JyBFT0YKICAgICAgICYmIGxrICE9IDEyODgyICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4MyAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4NCAgICAgICAgICAgICAgIC8vICdiZWZvcmUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4ODUgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4ODYgICAgICAgICAgICAgICAvLyAnYnJlYWsnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4ODggICAgICAgICAgICAgICAvLyAnY2FzZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4OSAgICAgICAgICAgICAgIC8vICdjYXN0JyBFT0YKICAgICAgICYmIGxrICE9IDEyODkwICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyBFT0YKICAgICAgICYmIGxrICE9IDEyODkxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyBFT0YKICAgICAgICYmIGxrICE9IDEyODkzICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyBFT0YKICAgICAgICYmIGxrICE9IDEyODk0ICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMjg5NiAgICAgICAgICAgICAgIC8vICdjb21tZW50JyBFT0YKICAgICAgICYmIGxrICE9IDEyODk3ICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4OTggICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTAxICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MDIgICAgICAgICAgICAgICAvLyAnY29udGludWUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MDMgICAgICAgICAgICAgICAvLyAnY29weScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwNCAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MDUgICAgICAgICAgICAgICAvLyAnY291bnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MDYgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MDggICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwOSAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTEwICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkxMSAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTEyICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgRU9GCiAgICAgICAmJiBsayAhPSAxMjkxMyAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTE4ICAgICAgICAgICAgICAgLy8gJ2RpdicgRU9GCiAgICAgICAmJiBsayAhPSAxMjkxOSAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyMCAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTIxICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MjIgICAgICAgICAgICAgICAvLyAnZWxzZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyMyAgICAgICAgICAgICAgIC8vICdlbXB0eScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyNCAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyNSAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyNiAgICAgICAgICAgICAgIC8vICdlbmQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MjggICAgICAgICAgICAgICAvLyAnZXEnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MjkgICAgICAgICAgICAgICAvLyAnZXZlcnknIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzEgICAgICAgICAgICAgICAvLyAnZXhjZXB0JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTMyICAgICAgICAgICAgICAgLy8gJ2V4aXQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzMgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzQgICAgICAgICAgICAgICAvLyAnZmlyc3QnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzUgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTM2ICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTM3ICAgICAgICAgICAgICAgLy8gJ2ZvcicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk0MSAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NDUgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NDYgICAgICAgICAgICAgICAvLyAnZ2UnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NDggICAgICAgICAgICAgICAvLyAnZ3JvdXAnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NTAgICAgICAgICAgICAgICAvLyAnZ3QnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NTEgICAgICAgICAgICAgICAvLyAnaWRpdicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1MiAgICAgICAgICAgICAgIC8vICdpZicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1MyAgICAgICAgICAgICAgIC8vICdpbXBvcnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NTQgICAgICAgICAgICAgICAvLyAnaW4nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NTUgICAgICAgICAgICAgICAvLyAnaW5kZXgnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NTkgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTYwICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTYxICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk2MiAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NjMgICAgICAgICAgICAgICAvLyAnaW50bycgRU9GCiAgICAgICAmJiBsayAhPSAxMjk2NCAgICAgICAgICAgICAgIC8vICdpcycgRU9GCiAgICAgICAmJiBsayAhPSAxMjk2NSAgICAgICAgICAgICAgIC8vICdpdGVtJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTY2ICAgICAgICAgICAgICAgLy8gJ2pzb24nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NjcgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTcwICAgICAgICAgICAgICAgLy8gJ2xhc3QnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NzEgICAgICAgICAgICAgICAvLyAnbGF4JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTcyICAgICAgICAgICAgICAgLy8gJ2xlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTc0ICAgICAgICAgICAgICAgLy8gJ2xldCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk3NiAgICAgICAgICAgICAgIC8vICdsb29wJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTc4ICAgICAgICAgICAgICAgLy8gJ2x0JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTgwICAgICAgICAgICAgICAgLy8gJ21vZCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk4MSAgICAgICAgICAgICAgIC8vICdtb2RpZnknIEVPRgogICAgICAgJiYgbGsgIT0gMTI5ODIgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTg0ICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk4NSAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk4NiAgICAgICAgICAgICAgIC8vICduZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk5MSAgICAgICAgICAgICAgIC8vICdub2RlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTkyICAgICAgICAgICAgICAgLy8gJ25vZGVzJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTk0ICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk5OCAgICAgICAgICAgICAgIC8vICdvbmx5JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTk5ICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAwMCAgICAgICAgICAgICAgIC8vICdvcicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAwMSAgICAgICAgICAgICAgIC8vICdvcmRlcicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAwMiAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDAzICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDA2ICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzAxMiAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMTMgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMTYgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAxOCAgICAgICAgICAgICAgIC8vICdyZW5hbWUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMTkgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyMCAgICAgICAgICAgICAgIC8vICdyZXR1cm4nIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjEgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDIyICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyNCAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjUgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDI2ICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjcgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjggICAgICAgICAgICAgICAvLyAnc2NvcmUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjkgICAgICAgICAgICAgICAvLyAnc2VsZicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAzNCAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDM1ICAgICAgICAgICAgICAgLy8gJ3NvbWUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMzYgICAgICAgICAgICAgICAvLyAnc3RhYmxlJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDM3ICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JyBFT0YKICAgICAgICYmIGxrICE9IDEzMDQwICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzA0MiAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNDMgICAgICAgICAgICAgICAvLyAnc3dpdGNoJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDQ0ICAgICAgICAgICAgICAgLy8gJ3RleHQnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNDggICAgICAgICAgICAgICAvLyAndG8nIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNDkgICAgICAgICAgICAgICAvLyAndHJlYXQnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNTAgICAgICAgICAgICAgICAvLyAndHJ5JyBFT0YKICAgICAgICYmIGxrICE9IDEzMDUxICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDUyICAgICAgICAgICAgICAgLy8gJ3R5cGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNTMgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzA1NCAgICAgICAgICAgICAgIC8vICd1bmlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMzA1NiAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNTcgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNjAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNjEgICAgICAgICAgICAgICAvLyAndmFsdWUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNjIgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNjMgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMzA2NiAgICAgICAgICAgICAgIC8vICd3aGVyZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA2NyAgICAgICAgICAgICAgIC8vICd3aGlsZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA3MCAgICAgICAgICAgICAgIC8vICd3aXRoJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDc0ICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScgRU9GCiAgICAgICAmJiBsayAhPSAxNjEzNCAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJyQnCiAgICAgICAmJiBsayAhPSAyMDk5NyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkICcsJwogICAgICAgJiYgbGsgIT0gMjA5OTggICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJywnCiAgICAgICAmJiBsayAhPSAyMTAwMCAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICcsJwogICAgICAgJiYgbGsgIT0gMjEwMDEgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnLCcKICAgICAgICYmIGxrICE9IDIxMDAyICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnLCcKICAgICAgICYmIGxrICE9IDIxMDAzICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnLCcKICAgICAgICYmIGxrICE9IDIxMDM2ICAgICAgICAgICAgICAgLy8gJy4nICcsJwogICAgICAgJiYgbGsgIT0gMjEwMzcgICAgICAgICAgICAgICAvLyAnLi4nICcsJwogICAgICAgJiYgbGsgIT0gMjEwMzggICAgICAgICAgICAgICAvLyAnLycgJywnCiAgICAgICAmJiBsayAhPSAyMTA2MiAgICAgICAgICAgICAgIC8vICdhZnRlcicgJywnCiAgICAgICAmJiBsayAhPSAyMTA2NCAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJywnCiAgICAgICAmJiBsayAhPSAyMTA2NSAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJywnCiAgICAgICAmJiBsayAhPSAyMTA2NiAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDY3ICAgICAgICAgICAgICAgLy8gJ2FuZCcgJywnCiAgICAgICAmJiBsayAhPSAyMTA2OSAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzAgICAgICAgICAgICAgICAvLyAnYXJyYXknICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzEgICAgICAgICAgICAgICAvLyAnYXMnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzIgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDczICAgICAgICAgICAgICAgLy8gJ2F0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMDc0ICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJywnCiAgICAgICAmJiBsayAhPSAyMTA3NSAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgJywnCiAgICAgICAmJiBsayAhPSAyMTA3NiAgICAgICAgICAgICAgIC8vICdiZWZvcmUnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzcgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzggICAgICAgICAgICAgICAvLyAnYnJlYWsnICcsJwogICAgICAgJiYgbGsgIT0gMjEwODAgICAgICAgICAgICAgICAvLyAnY2FzZScgJywnCiAgICAgICAmJiBsayAhPSAyMTA4MSAgICAgICAgICAgICAgIC8vICdjYXN0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMDgyICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDgzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDg1ICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDg2ICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTA4OCAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnLCcKICAgICAgICYmIGxrICE9IDIxMDg5ICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwOTAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDkzICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwOTQgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcsJwogICAgICAgJiYgbGsgIT0gMjEwOTUgICAgICAgICAgICAgICAvLyAnY29weScgJywnCiAgICAgICAmJiBsayAhPSAyMTA5NiAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICcsJwogICAgICAgJiYgbGsgIT0gMjEwOTcgICAgICAgICAgICAgICAvLyAnY291bnQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwOTggICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMDAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJywnCiAgICAgICAmJiBsayAhPSAyMTEwMSAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTAyICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJywnCiAgICAgICAmJiBsayAhPSAyMTEwMyAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTA0ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJywnCiAgICAgICAmJiBsayAhPSAyMTEwNSAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTEwICAgICAgICAgICAgICAgLy8gJ2RpdicgJywnCiAgICAgICAmJiBsayAhPSAyMTExMSAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJywnCiAgICAgICAmJiBsayAhPSAyMTExMiAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTEzICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMTQgICAgICAgICAgICAgICAvLyAnZWxzZScgJywnCiAgICAgICAmJiBsayAhPSAyMTExNSAgICAgICAgICAgICAgIC8vICdlbXB0eScgJywnCiAgICAgICAmJiBsayAhPSAyMTExNiAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScgJywnCiAgICAgICAmJiBsayAhPSAyMTExNyAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgJywnCiAgICAgICAmJiBsayAhPSAyMTExOCAgICAgICAgICAgICAgIC8vICdlbmQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjAgICAgICAgICAgICAgICAvLyAnZXEnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjEgICAgICAgICAgICAgICAvLyAnZXZlcnknICcsJwogICAgICAgJiYgbGsgIT0gMjExMjMgICAgICAgICAgICAgICAvLyAnZXhjZXB0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTI0ICAgICAgICAgICAgICAgLy8gJ2V4aXQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjUgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjYgICAgICAgICAgICAgICAvLyAnZmlyc3QnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjcgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTI4ICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTI5ICAgICAgICAgICAgICAgLy8gJ2ZvcicgJywnCiAgICAgICAmJiBsayAhPSAyMTEzMyAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICcsJwogICAgICAgJiYgbGsgIT0gMjExMzcgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICcsJwogICAgICAgJiYgbGsgIT0gMjExMzggICAgICAgICAgICAgICAvLyAnZ2UnICcsJwogICAgICAgJiYgbGsgIT0gMjExNDAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICcsJwogICAgICAgJiYgbGsgIT0gMjExNDIgICAgICAgICAgICAgICAvLyAnZ3QnICcsJwogICAgICAgJiYgbGsgIT0gMjExNDMgICAgICAgICAgICAgICAvLyAnaWRpdicgJywnCiAgICAgICAmJiBsayAhPSAyMTE0NCAgICAgICAgICAgICAgIC8vICdpZicgJywnCiAgICAgICAmJiBsayAhPSAyMTE0NSAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICcsJwogICAgICAgJiYgbGsgIT0gMjExNDYgICAgICAgICAgICAgICAvLyAnaW4nICcsJwogICAgICAgJiYgbGsgIT0gMjExNDcgICAgICAgICAgICAgICAvLyAnaW5kZXgnICcsJwogICAgICAgJiYgbGsgIT0gMjExNTEgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTUyICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTUzICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJywnCiAgICAgICAmJiBsayAhPSAyMTE1NCAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICcsJwogICAgICAgJiYgbGsgIT0gMjExNTUgICAgICAgICAgICAgICAvLyAnaW50bycgJywnCiAgICAgICAmJiBsayAhPSAyMTE1NiAgICAgICAgICAgICAgIC8vICdpcycgJywnCiAgICAgICAmJiBsayAhPSAyMTE1NyAgICAgICAgICAgICAgIC8vICdpdGVtJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTU4ICAgICAgICAgICAgICAgLy8gJ2pzb24nICcsJwogICAgICAgJiYgbGsgIT0gMjExNTkgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTYyICAgICAgICAgICAgICAgLy8gJ2xhc3QnICcsJwogICAgICAgJiYgbGsgIT0gMjExNjMgICAgICAgICAgICAgICAvLyAnbGF4JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTY0ICAgICAgICAgICAgICAgLy8gJ2xlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTY2ICAgICAgICAgICAgICAgLy8gJ2xldCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE2OCAgICAgICAgICAgICAgIC8vICdsb29wJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTcwICAgICAgICAgICAgICAgLy8gJ2x0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTcyICAgICAgICAgICAgICAgLy8gJ21vZCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE3MyAgICAgICAgICAgICAgIC8vICdtb2RpZnknICcsJwogICAgICAgJiYgbGsgIT0gMjExNzQgICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTc2ICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJywnCiAgICAgICAmJiBsayAhPSAyMTE3NyAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgJywnCiAgICAgICAmJiBsayAhPSAyMTE3OCAgICAgICAgICAgICAgIC8vICduZScgJywnCiAgICAgICAmJiBsayAhPSAyMTE4MyAgICAgICAgICAgICAgIC8vICdub2RlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTg0ICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTg2ICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE5MCAgICAgICAgICAgICAgIC8vICdvbmx5JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTkxICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTE5MiAgICAgICAgICAgICAgIC8vICdvcicgJywnCiAgICAgICAmJiBsayAhPSAyMTE5MyAgICAgICAgICAgICAgIC8vICdvcmRlcicgJywnCiAgICAgICAmJiBsayAhPSAyMTE5NCAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTk1ICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTk4ICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJywnCiAgICAgICAmJiBsayAhPSAyMTIwNCAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMDUgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMDggICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTIxMCAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMTEgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJywnCiAgICAgICAmJiBsayAhPSAyMTIxMiAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICcsJwogICAgICAgJiYgbGsgIT0gMjEyMTMgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjE0ICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTIxNiAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMTcgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjE4ICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMTkgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMjAgICAgICAgICAgICAgICAvLyAnc2NvcmUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMjEgICAgICAgICAgICAgICAvLyAnc2VsZicgJywnCiAgICAgICAmJiBsayAhPSAyMTIyNiAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjI3ICAgICAgICAgICAgICAgLy8gJ3NvbWUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMjggICAgICAgICAgICAgICAvLyAnc3RhYmxlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjI5ICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMjMyICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTIzNCAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICcsJwogICAgICAgJiYgbGsgIT0gMjEyMzUgICAgICAgICAgICAgICAvLyAnc3dpdGNoJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjM2ICAgICAgICAgICAgICAgLy8gJ3RleHQnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDAgICAgICAgICAgICAgICAvLyAndG8nICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDEgICAgICAgICAgICAgICAvLyAndHJlYXQnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDIgICAgICAgICAgICAgICAvLyAndHJ5JyAnLCcKICAgICAgICYmIGxrICE9IDIxMjQzICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjQ0ICAgICAgICAgICAgICAgLy8gJ3R5cGUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDUgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJywnCiAgICAgICAmJiBsayAhPSAyMTI0NiAgICAgICAgICAgICAgIC8vICd1bmlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTI0OCAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDkgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNTIgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNTMgICAgICAgICAgICAgICAvLyAndmFsdWUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNTQgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNTUgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTI1OCAgICAgICAgICAgICAgIC8vICd3aGVyZScgJywnCiAgICAgICAmJiBsayAhPSAyMTI1OSAgICAgICAgICAgICAgIC8vICd3aGlsZScgJywnCiAgICAgICAmJiBsayAhPSAyMTI2MiAgICAgICAgICAgICAgIC8vICd3aXRoJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjY2ICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScgJywnCiAgICAgICAmJiBsayAhPSAyNzE0MSAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDIgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJzsnCiAgICAgICAmJiBsayAhPSAyNzE0NCAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDUgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3MTQ2ICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3MTQ3ICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3MTgwICAgICAgICAgICAgICAgLy8gJy4nICc7JwogICAgICAgJiYgbGsgIT0gMjcxODEgICAgICAgICAgICAgICAvLyAnLi4nICc7JwogICAgICAgJiYgbGsgIT0gMjcxODIgICAgICAgICAgICAgICAvLyAnLycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIwNiAgICAgICAgICAgICAgIC8vICdhZnRlcicgJzsnCiAgICAgICAmJiBsayAhPSAyNzIwOCAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIwOSAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxMCAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnOycKICAgICAgICYmIGxrICE9IDI3MjExICAgICAgICAgICAgICAgLy8gJ2FuZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxMyAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTQgICAgICAgICAgICAgICAvLyAnYXJyYXknICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTUgICAgICAgICAgICAgICAvLyAnYXMnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTYgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjE3ICAgICAgICAgICAgICAgLy8gJ2F0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjE4ICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxOSAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyMCAgICAgICAgICAgICAgIC8vICdiZWZvcmUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjEgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjIgICAgICAgICAgICAgICAvLyAnYnJlYWsnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjQgICAgICAgICAgICAgICAvLyAnY2FzZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyNSAgICAgICAgICAgICAgIC8vICdjYXN0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjI2ICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjI3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnOycKICAgICAgICYmIGxrICE9IDI3MjI5ICAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnOycKICAgICAgICYmIGxrICE9IDI3MjMwICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzMiAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjMzICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzQgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MjM3ICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzggICAgICAgICAgICAgICAvLyAnY29udGludWUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzkgICAgICAgICAgICAgICAvLyAnY29weScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0MCAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDEgICAgICAgICAgICAgICAvLyAnY291bnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDIgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDQgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0NSAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ2ICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0NyAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ4ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0OSAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjU0ICAgICAgICAgICAgICAgLy8gJ2RpdicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1NSAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1NiAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjU3ICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTggICAgICAgICAgICAgICAvLyAnZWxzZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1OSAgICAgICAgICAgICAgIC8vICdlbXB0eScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2MCAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2MSAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2MiAgICAgICAgICAgICAgIC8vICdlbmQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjQgICAgICAgICAgICAgICAvLyAnZXEnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjUgICAgICAgICAgICAgICAvLyAnZXZlcnknICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjcgICAgICAgICAgICAgICAvLyAnZXhjZXB0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjY4ICAgICAgICAgICAgICAgLy8gJ2V4aXQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjkgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzAgICAgICAgICAgICAgICAvLyAnZmlyc3QnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzEgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjcyICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjczICAgICAgICAgICAgICAgLy8gJ2ZvcicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3NyAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjcyODEgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjcyODIgICAgICAgICAgICAgICAvLyAnZ2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyODQgICAgICAgICAgICAgICAvLyAnZ3JvdXAnICc7JwogICAgICAgJiYgbGsgIT0gMjcyODYgICAgICAgICAgICAgICAvLyAnZ3QnICc7JwogICAgICAgJiYgbGsgIT0gMjcyODcgICAgICAgICAgICAgICAvLyAnaWRpdicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4OCAgICAgICAgICAgICAgIC8vICdpZicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4OSAgICAgICAgICAgICAgIC8vICdpbXBvcnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTAgICAgICAgICAgICAgICAvLyAnaW4nICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTEgICAgICAgICAgICAgICAvLyAnaW5kZXgnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTUgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjk2ICAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjk3ICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5OCAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTkgICAgICAgICAgICAgICAvLyAnaW50bycgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwMCAgICAgICAgICAgICAgIC8vICdpcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwMSAgICAgICAgICAgICAgIC8vICdpdGVtJyAnOycKICAgICAgICYmIGxrICE9IDI3MzAyICAgICAgICAgICAgICAgLy8gJ2pzb24nICc7JwogICAgICAgJiYgbGsgIT0gMjczMDMgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnOycKICAgICAgICYmIGxrICE9IDI3MzA2ICAgICAgICAgICAgICAgLy8gJ2xhc3QnICc7JwogICAgICAgJiYgbGsgIT0gMjczMDcgICAgICAgICAgICAgICAvLyAnbGF4JyAnOycKICAgICAgICYmIGxrICE9IDI3MzA4ICAgICAgICAgICAgICAgLy8gJ2xlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzEwICAgICAgICAgICAgICAgLy8gJ2xldCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxMiAgICAgICAgICAgICAgIC8vICdsb29wJyAnOycKICAgICAgICYmIGxrICE9IDI3MzE0ICAgICAgICAgICAgICAgLy8gJ2x0JyAnOycKICAgICAgICYmIGxrICE9IDI3MzE2ICAgICAgICAgICAgICAgLy8gJ21vZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxNyAgICAgICAgICAgICAgIC8vICdtb2RpZnknICc7JwogICAgICAgJiYgbGsgIT0gMjczMTggICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzIwICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMyMSAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMyMiAgICAgICAgICAgICAgIC8vICduZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMyNyAgICAgICAgICAgICAgIC8vICdub2RlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzI4ICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnOycKICAgICAgICYmIGxrICE9IDI3MzMwICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzNCAgICAgICAgICAgICAgIC8vICdvbmx5JyAnOycKICAgICAgICYmIGxrICE9IDI3MzM1ICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzNiAgICAgICAgICAgICAgIC8vICdvcicgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzNyAgICAgICAgICAgICAgIC8vICdvcmRlcicgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzOCAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM5ICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MzQyICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM0OCAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNDkgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNTIgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1NCAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICc7JwogICAgICAgJiYgbGsgIT0gMjczNTUgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1NiAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICc7JwogICAgICAgJiYgbGsgIT0gMjczNTcgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU4ICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2MCAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICc7JwogICAgICAgJiYgbGsgIT0gMjczNjEgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnOycKICAgICAgICYmIGxrICE9IDI3MzYyICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczNjMgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjczNjQgICAgICAgICAgICAgICAvLyAnc2NvcmUnICc7JwogICAgICAgJiYgbGsgIT0gMjczNjUgICAgICAgICAgICAgICAvLyAnc2VsZicgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3MCAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MzcxICAgICAgICAgICAgICAgLy8gJ3NvbWUnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzIgICAgICAgICAgICAgICAvLyAnc3RhYmxlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzczICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mzc2ICAgICAgICAgICAgICAgLy8gJ3N0cmljdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3OCAgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICc7JwogICAgICAgJiYgbGsgIT0gMjczNzkgICAgICAgICAgICAgICAvLyAnc3dpdGNoJyAnOycKICAgICAgICYmIGxrICE9IDI3MzgwICAgICAgICAgICAgICAgLy8gJ3RleHQnICc7JwogICAgICAgJiYgbGsgIT0gMjczODQgICAgICAgICAgICAgICAvLyAndG8nICc7JwogICAgICAgJiYgbGsgIT0gMjczODUgICAgICAgICAgICAgICAvLyAndHJlYXQnICc7JwogICAgICAgJiYgbGsgIT0gMjczODYgICAgICAgICAgICAgICAvLyAndHJ5JyAnOycKICAgICAgICYmIGxrICE9IDI3Mzg3ICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzg4ICAgICAgICAgICAgICAgLy8gJ3R5cGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczODkgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5MCAgICAgICAgICAgICAgIC8vICd1bmlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5MiAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICc7JwogICAgICAgJiYgbGsgIT0gMjczOTMgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczOTYgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczOTcgICAgICAgICAgICAgICAvLyAndmFsdWUnICc7JwogICAgICAgJiYgbGsgIT0gMjczOTggICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczOTkgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzQwMiAgICAgICAgICAgICAgIC8vICd3aGVyZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzQwMyAgICAgICAgICAgICAgIC8vICd3aGlsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzQwNiAgICAgICAgICAgICAgIC8vICd3aXRoJyAnOycKICAgICAgICYmIGxrICE9IDI3NDEwICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScgJzsnCiAgICAgICAmJiBsayAhPSA5MDE5OCAgICAgICAgICAgICAgIC8vICdicmVhaycgJ2xvb3AnCiAgICAgICAmJiBsayAhPSA5MDIxNCAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJ2xvb3AnCiAgICAgICAmJiBsayAhPSAxMTMyODQgICAgICAgICAgICAgIC8vICdleGl0JyAncmV0dXJuaW5nJwogICAgICAgJiYgbGsgIT0gMTQ0Mzg5ICAgICAgICAgICAgICAvLyBXaWxkY2FyZCAnfScKICAgICAgICYmIGxrICE9IDE0NDM5MCAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICd9JwogICAgICAgJiYgbGsgIT0gMTQ0MzkyICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0NDM5MyAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwgJ30nCiAgICAgICAmJiBsayAhPSAxNDQzOTQgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwgJ30nCiAgICAgICAmJiBsayAhPSAxNDQzOTUgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0MjggICAgICAgICAgICAgIC8vICcuJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQyOSAgICAgICAgICAgICAgLy8gJy4uJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQzMCAgICAgICAgICAgICAgLy8gJy8nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDU0ICAgICAgICAgICAgICAvLyAnYWZ0ZXInICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDU2ICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDU3ICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDU4ICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NTkgICAgICAgICAgICAgIC8vICdhbmQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDYxICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ2MiAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ2MyAgICAgICAgICAgICAgLy8gJ2FzJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ2NCAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NjUgICAgICAgICAgICAgIC8vICdhdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NjYgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDY3ICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDY4ICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ2OSAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ3MCAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ3MiAgICAgICAgICAgICAgLy8gJ2Nhc2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDczICAgICAgICAgICAgICAvLyAnY2FzdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NzQgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NzUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NzcgICAgICAgICAgICAgIC8vICdjaGlsZCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NzggICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDgwICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0ODEgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ4MiAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0ODUgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ4NiAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ4NyAgICAgICAgICAgICAgLy8gJ2NvcHknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDg4ICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ4OSAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ5MCAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ5MiAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDkzICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0OTQgICAgICAgICAgICAgIC8vICdkZWxldGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDk1ICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0OTYgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDk3ICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDIgICAgICAgICAgICAgIC8vICdkaXYnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTAzICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTA0ICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDUgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUwNiAgICAgICAgICAgICAgLy8gJ2Vsc2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTA3ICAgICAgICAgICAgICAvLyAnZW1wdHknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTA4ICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTA5ICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTEwICAgICAgICAgICAgICAvLyAnZW5kJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxMiAgICAgICAgICAgICAgLy8gJ2VxJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxMyAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxNSAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MTYgICAgICAgICAgICAgIC8vICdleGl0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxNyAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxOCAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxOSAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MjAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MjEgICAgICAgICAgICAgIC8vICdmb3InICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTI1ICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUyOSAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUzMCAgICAgICAgICAgICAgLy8gJ2dlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUzMiAgICAgICAgICAgICAgLy8gJ2dyb3VwJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUzNCAgICAgICAgICAgICAgLy8gJ2d0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUzNSAgICAgICAgICAgICAgLy8gJ2lkaXYnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTM2ICAgICAgICAgICAgICAvLyAnaWYnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTM3ICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUzOCAgICAgICAgICAgICAgLy8gJ2luJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUzOSAgICAgICAgICAgICAgLy8gJ2luZGV4JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU0MyAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NDQgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NDUgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTQ2ICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU0NyAgICAgICAgICAgICAgLy8gJ2ludG8nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTQ4ICAgICAgICAgICAgICAvLyAnaXMnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTQ5ICAgICAgICAgICAgICAvLyAnaXRlbScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NTAgICAgICAgICAgICAgIC8vICdqc29uJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU1MSAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NTQgICAgICAgICAgICAgIC8vICdsYXN0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU1NSAgICAgICAgICAgICAgLy8gJ2xheCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NTYgICAgICAgICAgICAgIC8vICdsZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NTggICAgICAgICAgICAgIC8vICdsZXQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTYwICAgICAgICAgICAgICAvLyAnbG9vcCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NjIgICAgICAgICAgICAgIC8vICdsdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NjQgICAgICAgICAgICAgIC8vICdtb2QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTY1ICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU2NiAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NjggICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTY5ICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTcwICAgICAgICAgICAgICAvLyAnbmUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTc1ICAgICAgICAgICAgICAvLyAnbm9kZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NzYgICAgICAgICAgICAgIC8vICdub2RlcycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NzggICAgICAgICAgICAgIC8vICdvYmplY3QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTgyICAgICAgICAgICAgICAvLyAnb25seScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1ODMgICAgICAgICAgICAgIC8vICdvcHRpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTg0ICAgICAgICAgICAgICAvLyAnb3InICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTg1ICAgICAgICAgICAgICAvLyAnb3JkZXInICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTg2ICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1ODcgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1OTAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTk2ICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU5NyAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYwMCAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjAyICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYwMyAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjA0ICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYwNSAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MDYgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjA4ICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYwOSAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MTAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYxMSAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnfScKICAgICAgICYmIGxrICE9IDE0NDYxMiAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYxMyAgICAgICAgICAgICAgLy8gJ3NlbGYnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjE4ICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MTkgICAgICAgICAgICAgIC8vICdzb21lJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYyMCAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MjEgICAgICAgICAgICAgIC8vICdzdGFydCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MjQgICAgICAgICAgICAgIC8vICdzdHJpY3QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjI2ICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYyNyAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MjggICAgICAgICAgICAgIC8vICd0ZXh0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDYzMiAgICAgICAgICAgICAgLy8gJ3RvJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYzMyAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDYzNCAgICAgICAgICAgICAgLy8gJ3RyeScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MzUgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MzYgICAgICAgICAgICAgIC8vICd0eXBlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYzNyAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjM4ICAgICAgICAgICAgICAvLyAndW5pb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjQwICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnfScKICAgICAgICYmIGxrICE9IDE0NDY0MSAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDY0NCAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDY0NSAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDY0NiAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDY0NyAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjUwICAgICAgICAgICAgICAvLyAnd2hlcmUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjUxICAgICAgICAgICAgICAvLyAnd2hpbGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjU0ICAgICAgICAgICAgICAvLyAnd2l0aCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2NTgpICAgICAgICAgICAgIC8vICd4cXVlcnknICd9JwogICAgICB7CiAgICAgICAgbGsgPSBtZW1vaXplZCg2LCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICB0cnlfU3RhdGVtZW50KCk7CiAgICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFBKQogICAgICAgICAgewogICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgfQogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoNiwgZTAsIGxrKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxrICE9IC0xCiAgICAgICAmJiBsayAhPSA1MyAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICAgJiYgbGsgIT0gMTYxMzQgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICckJwogICAgICAgJiYgbGsgIT0gMjcxNDEgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCAnOycKICAgICAgICYmIGxrICE9IDI3MTQyICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDQgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbCAnOycKICAgICAgICYmIGxrICE9IDI3MTQ1ICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzE0NiAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzE0NyAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzE4MCAgICAgICAgICAgICAgIC8vICcuJyAnOycKICAgICAgICYmIGxrICE9IDI3MTgxICAgICAgICAgICAgICAgLy8gJy4uJyAnOycKICAgICAgICYmIGxrICE9IDI3MTgyICAgICAgICAgICAgICAgLy8gJy8nICc7JwogICAgICAgJiYgbGsgIT0gMjcyMDYgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICc7JwogICAgICAgJiYgbGsgIT0gMjcyMDggICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMDkgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxMSAgICAgICAgICAgICAgIC8vICdhbmQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTMgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnOycKICAgICAgICYmIGxrICE9IDI3MjE0ICAgICAgICAgICAgICAgLy8gJ2FycmF5JyAnOycKICAgICAgICYmIGxrICE9IDI3MjE1ICAgICAgICAgICAgICAgLy8gJ2FzJyAnOycKICAgICAgICYmIGxrICE9IDI3MjE2ICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNyAgICAgICAgICAgICAgIC8vICdhdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxOCAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTkgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjIxICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjIyICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnOycKICAgICAgICYmIGxrICE9IDI3MjI0ICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjUgICAgICAgICAgICAgICAvLyAnY2FzdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyNiAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyOSAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzMCAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzIgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzMyAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjM0ICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzNyAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjM4ICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjM5ICAgICAgICAgICAgICAgLy8gJ2NvcHknICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQxICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjQyICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ0ICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDUgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0NiAgICAgICAgICAgICAgIC8vICdkZWxldGUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDcgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0OCAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDkgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1NCAgICAgICAgICAgICAgIC8vICdkaXYnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTUgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTYgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQtbm9kZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1NyAgICAgICAgICAgICAgIC8vICdlbGVtZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjU4ICAgICAgICAgICAgICAgLy8gJ2Vsc2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTkgICAgICAgICAgICAgICAvLyAnZW1wdHknICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjEgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjIgICAgICAgICAgICAgICAvLyAnZW5kJyAnOycKICAgICAgICYmIGxrICE9IDI3MjY0ICAgICAgICAgICAgICAgLy8gJ2VxJyAnOycKICAgICAgICYmIGxrICE9IDI3MjY1ICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnOycKICAgICAgICYmIGxrICE9IDI3MjY3ICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2OCAgICAgICAgICAgICAgIC8vICdleGl0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjY5ICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJyAnOycKICAgICAgICYmIGxrICE9IDI3MjcwICAgICAgICAgICAgICAgLy8gJ2ZpcnN0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjcxICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3MiAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3MyAgICAgICAgICAgICAgIC8vICdmb3InICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzcgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MjgxICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MjgyICAgICAgICAgICAgICAgLy8gJ2dlJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg0ICAgICAgICAgICAgICAgLy8gJ2dyb3VwJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg2ICAgICAgICAgICAgICAgLy8gJ2d0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg3ICAgICAgICAgICAgICAgLy8gJ2lkaXYnICc7JwogICAgICAgJiYgbGsgIT0gMjcyODggICAgICAgICAgICAgICAvLyAnaWYnICc7JwogICAgICAgJiYgbGsgIT0gMjcyODkgICAgICAgICAgICAgICAvLyAnaW1wb3J0JyAnOycKICAgICAgICYmIGxrICE9IDI3MjkwICAgICAgICAgICAgICAgLy8gJ2luJyAnOycKICAgICAgICYmIGxrICE9IDI3MjkxICAgICAgICAgICAgICAgLy8gJ2luZGV4JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjk1ICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5NiAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5NyAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTggICAgICAgICAgICAgICAvLyAnaW50ZXJzZWN0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjk5ICAgICAgICAgICAgICAgLy8gJ2ludG8nICc7JwogICAgICAgJiYgbGsgIT0gMjczMDAgICAgICAgICAgICAgICAvLyAnaXMnICc7JwogICAgICAgJiYgbGsgIT0gMjczMDEgICAgICAgICAgICAgICAvLyAnaXRlbScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwMiAgICAgICAgICAgICAgIC8vICdqc29uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzAzICAgICAgICAgICAgICAgLy8gJ2pzb24taXRlbScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwNiAgICAgICAgICAgICAgIC8vICdsYXN0JyAnOycKICAgICAgICYmIGxrICE9IDI3MzA3ICAgICAgICAgICAgICAgLy8gJ2xheCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwOCAgICAgICAgICAgICAgIC8vICdsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxMCAgICAgICAgICAgICAgIC8vICdsZXQnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTIgICAgICAgICAgICAgICAvLyAnbG9vcCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxNCAgICAgICAgICAgICAgIC8vICdsdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxNiAgICAgICAgICAgICAgIC8vICdtb2QnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTcgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JyAnOycKICAgICAgICYmIGxrICE9IDI3MzE4ICAgICAgICAgICAgICAgLy8gJ21vZHVsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMyMCAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjEgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjIgICAgICAgICAgICAgICAvLyAnbmUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjcgICAgICAgICAgICAgICAvLyAnbm9kZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMyOCAgICAgICAgICAgICAgIC8vICdub2RlcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzMCAgICAgICAgICAgICAgIC8vICdvYmplY3QnICc7JwogICAgICAgJiYgbGsgIT0gMjczMzQgICAgICAgICAgICAgICAvLyAnb25seScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzNSAgICAgICAgICAgICAgIC8vICdvcHRpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjczMzYgICAgICAgICAgICAgICAvLyAnb3InICc7JwogICAgICAgJiYgbGsgIT0gMjczMzcgICAgICAgICAgICAgICAvLyAnb3JkZXInICc7JwogICAgICAgJiYgbGsgIT0gMjczMzggICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMzOSAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM0MiAgICAgICAgICAgICAgIC8vICdwYXJlbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjczNDggICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MzQ5ICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MzUyICAgICAgICAgICAgICAgLy8gJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjczNTQgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU1ICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICc7JwogICAgICAgJiYgbGsgIT0gMjczNTYgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU3ICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1OCAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjczNjAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnOycKICAgICAgICYmIGxrICE9IDI3MzYxICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2MiAgICAgICAgICAgICAgIC8vICdzY2hlbWEtYXR0cmlidXRlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzYzICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MzY0ICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzY1ICAgICAgICAgICAgICAgLy8gJ3NlbGYnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3MSAgICAgICAgICAgICAgIC8vICdzb21lJyAnOycKICAgICAgICYmIGxrICE9IDI3MzcyICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3MyAgICAgICAgICAgICAgIC8vICdzdGFydCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3NiAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzggICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzc5ICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4MCAgICAgICAgICAgICAgIC8vICd0ZXh0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mzg0ICAgICAgICAgICAgICAgLy8gJ3RvJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzg1ICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mzg2ICAgICAgICAgICAgICAgLy8gJ3RyeScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NyAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4OCAgICAgICAgICAgICAgIC8vICd0eXBlJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzg5ICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnICc7JwogICAgICAgJiYgbGsgIT0gMjczOTAgICAgICAgICAgICAgICAvLyAndW5pb24nICc7JwogICAgICAgJiYgbGsgIT0gMjczOTIgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAnOycKICAgICAgICYmIGxrICE9IDI3MzkzICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzk2ICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzk3ICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzk4ICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnOycKICAgICAgICYmIGxrICE9IDI3Mzk5ICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjc0MDIgICAgICAgICAgICAgICAvLyAnd2hlcmUnICc7JwogICAgICAgJiYgbGsgIT0gMjc0MDMgICAgICAgICAgICAgICAvLyAnd2hpbGUnICc7JwogICAgICAgJiYgbGsgIT0gMjc0MDYgICAgICAgICAgICAgICAvLyAnd2l0aCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzQxMCAgICAgICAgICAgICAgIC8vICd4cXVlcnknICc7JwogICAgICAgJiYgbGsgIT0gOTAxOTggICAgICAgICAgICAgICAvLyAnYnJlYWsnICdsb29wJwogICAgICAgJiYgbGsgIT0gOTAyMTQgICAgICAgICAgICAgICAvLyAnY29udGludWUnICdsb29wJwogICAgICAgJiYgbGsgIT0gMTEzMjg0KSAgICAgICAgICAgICAvLyAnZXhpdCcgJ3JldHVybmluZycKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN0YXRlbWVudHMiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RhdGVtZW50cygpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMjc3KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHN3aXRjaCAobDEpCiAgICAgIHsKICAgICAgY2FzZSAzNDogICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgICAgbG9va2FoZWFkMlcoMjY4KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDM1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnKCMnCiAgICAgICAgbG9va2FoZWFkMigyNTEpOyAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFMgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfCAnYW5jZXN0b3Itb3Itc2VsZicgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQ2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnLycKICAgICAgICBsb29rYWhlYWQyVygyODMpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNDc6ICAgICAgICAgICAgICAgICAgICAgIC8vICcvLycKICAgICAgICBsb29rYWhlYWQyVygyNjQpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8JwogICAgICAgIGxvb2thaGVhZDIoNCk7ICAgICAgICAgICAgICAvLyBRTmFtZQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDU1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnPCEtLScKICAgICAgICBsb29rYWhlYWQyKDEpOyAgICAgICAgICAgICAgLy8gRGlyQ29tbWVudENvbnRlbnRzCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTk6ICAgICAgICAgICAgICAgICAgICAgIC8vICc8PycKICAgICAgICBsb29rYWhlYWQyKDMpOyAgICAgICAgICAgICAgLy8gUElUYXJnZXQKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2NjogICAgICAgICAgICAgICAgICAgICAgLy8gJ0AnCiAgICAgICAgbG9va2FoZWFkMlcoMjU2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnWycKICAgICAgICBsb29rYWhlYWQyVygyNzEpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzc6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgICAgbG9va2FoZWFkMlcoMTk5KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDgyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgICAgIGxvb2thaGVhZDJXKDI4MCk7ICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEyMTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgICBsb29rYWhlYWQyVygyNzkpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnCiAgICAgICAgbG9va2FoZWFkMlcoMjAyKTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICAgIGxvb2thaGVhZDJXKDIwNyk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICAgIGxvb2thaGVhZDJXKDIwNCk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDIxODogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICAgIGxvb2thaGVhZDJXKDIwNSk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAyMTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgICAgbG9va2FoZWFkMlcoMjA2KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnCiAgICAgICAgbG9va2FoZWFkMlcoMjA5KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgICBsb29rYWhlYWQyVygyNzYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMjc4OiAgICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgICAgICBsb29rYWhlYWQyVygyNzIpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNTogICAgICAgICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkCiAgICAgIGNhc2UgNDU6ICAgICAgICAgICAgICAgICAgICAgIC8vICcuLicKICAgICAgICBsb29rYWhlYWQyVygxODUpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAvLyAnJScKICAgICAgICBsb29rYWhlYWQyVygyNTQpOyAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDQwOiAgICAgICAgICAgICAgICAgICAgICAvLyAnKycKICAgICAgY2FzZSA0MjogICAgICAgICAgICAgICAgICAgICAgLy8gJy0nCiAgICAgICAgbG9va2FoZWFkMlcoMjY2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDg2OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgICBsb29rYWhlYWQyVygyMDApOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwgJy8vJyB8CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgICAgbG9va2FoZWFkMlcoMjA4KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgICBsb29rYWhlYWQyVygyNjcpOyAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgICAgY2FzZSAyMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIGNhc2UgMjYyOiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgICAgICBsb29rYWhlYWQyVygxOTYpOyAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwKICAgICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVjaW1hbExpdGVyYWwKICAgICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbAogICAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsCiAgICAgIGNhc2UgNDQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICAgIGxvb2thaGVhZDJXKDE5MSk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzsnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA3ODogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FycmF5JwogICAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHktc2VxdWVuY2UnCiAgICAgIGNhc2UgMTY1OiAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgICBjYXNlIDE2NzogICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgICBjYXNlIDI0MjogICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgICAgIGxvb2thaGVhZDJXKDE5MCk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwgJzsnIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA5NjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICAgIGNhc2UgMjQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJwogICAgICAgIGxvb2thaGVhZDJXKDIwMyk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA3MzogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgICBjYXNlIDc0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgLy8gJ2NoaWxkJwogICAgICBjYXNlIDExMTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgICAgY2FzZSAxMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgY2FzZSAxMzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgICAgY2FzZSAxMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAvLyAncGFyZW50JwogICAgICBjYXNlIDIxMjogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nJwogICAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJwogICAgICAgIGxvb2thaGVhZDJXKDE5Nyk7ICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfCAnLy8nIHwKICAgICAgICBicmVhazsKICAgICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuCiAgICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicKICAgICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJwogICAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5kJwogICAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnCiAgICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJwogICAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJwogICAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnCiAgICAgIGNhc2UgODg6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBjYXNlIDg5OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgICAgY2FzZSA5MDogICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgICBjYXNlIDEwMTogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgICAgY2FzZSAxMTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICAgIGNhc2UgMTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJwogICAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgICBjYXNlIDEyNTogICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4Y2VwdCcKICAgICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nCiAgICAgIGNhc2UgMTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicKICAgICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICAgIGNhc2UgMTUyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgICAgY2FzZSAxNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgICAgY2FzZSAxNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgICBjYXNlIDE1NTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICAgIGNhc2UgMTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgICAgY2FzZSAxNjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgICAgY2FzZSAxNjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgICAgY2FzZSAxNjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIGNhc2UgMTY0OiAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgICAgY2FzZSAxNjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGNhc2UgMTcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgICBjYXNlIDE3MTogICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgICBjYXNlIDE3MjogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICAgIGNhc2UgMTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgICBjYXNlIDE3ODogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICAgIGNhc2UgMTgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICAgIGNhc2UgMTgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICAgIGNhc2UgMTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICAgIGNhc2UgMTg1OiAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScKICAgICAgY2FzZSAxODY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJwogICAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAvLyAnbm9kZScKICAgICAgY2FzZSAxOTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgICBjYXNlIDE5NDogICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgICBjYXNlIDE5ODogICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgICAgY2FzZSAxOTk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgICAgY2FzZSAyMDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgICBjYXNlIDIwMTogICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICAgIGNhc2UgMjAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgICAgY2FzZSAyMjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgICAgY2FzZSAyMjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgICAgY2FzZSAyMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgICAgY2FzZSAyMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgICAgY2FzZSAyMjU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcKICAgICAgY2FzZSAyMjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycKICAgICAgY2FzZSAyMzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgICAgY2FzZSAyMzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicKICAgICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VwZGF0aW5nJwogICAgICBjYXNlIDI2MTogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICAgIGNhc2UgMjYzOiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgICBjYXNlIDI2NjogICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICAgIGNhc2UgMjY3OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgICAgY2FzZSAyNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgICAgbG9va2FoZWFkMlcoMTk0KTsgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8ICcvLycgfAogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrICE9IDI1ICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgICAmJiBsayAhPSA1MyAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgICAgJiYgbGsgIT0gMjgyICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgICYmIGxrICE9IDEyODA1ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgRU9GCiAgICAgICAmJiBsayAhPSAxMjgwNiAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiBFT0YKICAgICAgICYmIGxrICE9IDEyODA4ICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgRU9GCiAgICAgICAmJiBsayAhPSAxMjgwOSAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MTAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4MTEgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NDQgICAgICAgICAgICAgICAvLyAnLicgRU9GCiAgICAgICAmJiBsayAhPSAxMjg0NSAgICAgICAgICAgICAgIC8vICcuLicgRU9GCiAgICAgICAmJiBsayAhPSAxMjg0NiAgICAgICAgICAgICAgIC8vICcvJyBFT0YKICAgICAgICYmIGxrICE9IDEyODcwICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyBFT0YKICAgICAgICYmIGxrICE9IDEyODcyICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEyODczICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyBFT0YKICAgICAgICYmIGxrICE9IDEyODc0ICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4NzUgICAgICAgICAgICAgICAvLyAnYW5kJyBFT0YKICAgICAgICYmIGxrICE9IDEyODc3ICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3OCAgICAgICAgICAgICAgIC8vICdhcnJheScgRU9GCiAgICAgICAmJiBsayAhPSAxMjg3OSAgICAgICAgICAgICAgIC8vICdhcycgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4MCAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4ODEgICAgICAgICAgICAgICAvLyAnYXQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4ODIgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyBFT0YKICAgICAgICYmIGxrICE9IDEyODgzICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyBFT0YKICAgICAgICYmIGxrICE9IDEyODg0ICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4NSAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4NiAgICAgICAgICAgICAgIC8vICdicmVhaycgRU9GCiAgICAgICAmJiBsayAhPSAxMjg4OCAgICAgICAgICAgICAgIC8vICdjYXNlJyBFT0YKICAgICAgICYmIGxrICE9IDEyODg5ICAgICAgICAgICAgICAgLy8gJ2Nhc3QnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4OTAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4OTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4OTMgICAgICAgICAgICAgICAvLyAnY2hpbGQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4OTQgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEyODk2ICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI4OTcgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjg5OCAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MDEgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwMiAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwMyAgICAgICAgICAgICAgIC8vICdjb3B5JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTA0ICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwNSAgICAgICAgICAgICAgIC8vICdjb3VudCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwNiAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkwOCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTA5ICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MTAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTExICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MTIgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTEzICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MTggICAgICAgICAgICAgICAvLyAnZGl2JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTE5ICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTIwICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MjEgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyMiAgICAgICAgICAgICAgIC8vICdlbHNlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTIzICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTI0ICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTI1ICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTI2ICAgICAgICAgICAgICAgLy8gJ2VuZCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyOCAgICAgICAgICAgICAgIC8vICdlcScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkyOSAgICAgICAgICAgICAgIC8vICdldmVyeScgRU9GCiAgICAgICAmJiBsayAhPSAxMjkzMSAgICAgICAgICAgICAgIC8vICdleGNlcHQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzIgICAgICAgICAgICAgICAvLyAnZXhpdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkzMyAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkzNCAgICAgICAgICAgICAgIC8vICdmaXJzdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjkzNSAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzYgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5MzcgICAgICAgICAgICAgICAvLyAnZm9yJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTQxICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk0NSAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk0NiAgICAgICAgICAgICAgIC8vICdnZScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk0OCAgICAgICAgICAgICAgIC8vICdncm91cCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1MCAgICAgICAgICAgICAgIC8vICdndCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1MSAgICAgICAgICAgICAgIC8vICdpZGl2JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTUyICAgICAgICAgICAgICAgLy8gJ2lmJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTUzICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1NCAgICAgICAgICAgICAgIC8vICdpbicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1NSAgICAgICAgICAgICAgIC8vICdpbmRleCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk1OSAgICAgICAgICAgICAgIC8vICdpbnNlcnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NjAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NjEgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTYyICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk2MyAgICAgICAgICAgICAgIC8vICdpbnRvJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTY0ICAgICAgICAgICAgICAgLy8gJ2lzJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTY1ICAgICAgICAgICAgICAgLy8gJ2l0ZW0nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NjYgICAgICAgICAgICAgICAvLyAnanNvbicgRU9GCiAgICAgICAmJiBsayAhPSAxMjk2NyAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NzAgICAgICAgICAgICAgICAvLyAnbGFzdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMjk3MSAgICAgICAgICAgICAgIC8vICdsYXgnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NzIgICAgICAgICAgICAgICAvLyAnbGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NzQgICAgICAgICAgICAgICAvLyAnbGV0JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTc2ICAgICAgICAgICAgICAgLy8gJ2xvb3AnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5NzggICAgICAgICAgICAgICAvLyAnbHQnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5ODAgICAgICAgICAgICAgICAvLyAnbW9kJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTgxICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgRU9GCiAgICAgICAmJiBsayAhPSAxMjk4MiAgICAgICAgICAgICAgIC8vICdtb2R1bGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5ODQgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTg1ICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTg2ICAgICAgICAgICAgICAgLy8gJ25lJyBFT0YKICAgICAgICYmIGxrICE9IDEyOTkxICAgICAgICAgICAgICAgLy8gJ25vZGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5OTIgICAgICAgICAgICAgICAvLyAnbm9kZXMnIEVPRgogICAgICAgJiYgbGsgIT0gMTI5OTQgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyBFT0YKICAgICAgICYmIGxrICE9IDEyOTk4ICAgICAgICAgICAgICAgLy8gJ29ubHknIEVPRgogICAgICAgJiYgbGsgIT0gMTI5OTkgICAgICAgICAgICAgICAvLyAnb3B0aW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDAwICAgICAgICAgICAgICAgLy8gJ29yJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDAxICAgICAgICAgICAgICAgLy8gJ29yZGVyJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDAyICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMDMgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMDYgICAgICAgICAgICAgICAvLyAncGFyZW50JyBFT0YKICAgICAgICYmIGxrICE9IDEzMDEyICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgRU9GCiAgICAgICAmJiBsayAhPSAxMzAxMyAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgRU9GCiAgICAgICAmJiBsayAhPSAxMzAxNiAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDE4ICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzAxOSAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDIwICAgICAgICAgICAgICAgLy8gJ3JldHVybicgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyMSAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjIgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDI0ICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyNSAgICAgICAgICAgICAgIC8vICdzY2hlbWEnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMjYgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyNyAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyOCAgICAgICAgICAgICAgIC8vICdzY29yZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzAyOSAgICAgICAgICAgICAgIC8vICdzZWxmJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDM0ICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMzUgICAgICAgICAgICAgICAvLyAnc29tZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzAzNiAgICAgICAgICAgICAgIC8vICdzdGFibGUnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwMzcgICAgICAgICAgICAgICAvLyAnc3RhcnQnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNDAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyBFT0YKICAgICAgICYmIGxrICE9IDEzMDQyICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA0MyAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNDQgICAgICAgICAgICAgICAvLyAndGV4dCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzA0OCAgICAgICAgICAgICAgIC8vICd0bycgRU9GCiAgICAgICAmJiBsayAhPSAxMzA0OSAgICAgICAgICAgICAgIC8vICd0cmVhdCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzA1MCAgICAgICAgICAgICAgIC8vICd0cnknIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNTEgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNTIgICAgICAgICAgICAgICAvLyAndHlwZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA1MyAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDU0ICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDU2ICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgRU9GCiAgICAgICAmJiBsayAhPSAxMzA1NyAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgRU9GCiAgICAgICAmJiBsayAhPSAxMzA2MCAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA2MSAgICAgICAgICAgICAgIC8vICd2YWx1ZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA2MiAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgRU9GCiAgICAgICAmJiBsayAhPSAxMzA2MyAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDY2ICAgICAgICAgICAgICAgLy8gJ3doZXJlJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDY3ICAgICAgICAgICAgICAgLy8gJ3doaWxlJyBFT0YKICAgICAgICYmIGxrICE9IDEzMDcwICAgICAgICAgICAgICAgLy8gJ3dpdGgnIEVPRgogICAgICAgJiYgbGsgIT0gMTMwNzQgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyBFT0YKICAgICAgICYmIGxrICE9IDE2MTM0ICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAgICYmIGxrICE9IDIwOTk3ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgJywnCiAgICAgICAmJiBsayAhPSAyMDk5OCAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnLCcKICAgICAgICYmIGxrICE9IDIxMDAwICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgJywnCiAgICAgICAmJiBsayAhPSAyMTAwMSAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsICcsJwogICAgICAgJiYgbGsgIT0gMjEwMDIgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsICcsJwogICAgICAgJiYgbGsgIT0gMjEwMDMgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsICcsJwogICAgICAgJiYgbGsgIT0gMjEwMzYgICAgICAgICAgICAgICAvLyAnLicgJywnCiAgICAgICAmJiBsayAhPSAyMTAzNyAgICAgICAgICAgICAgIC8vICcuLicgJywnCiAgICAgICAmJiBsayAhPSAyMTAzOCAgICAgICAgICAgICAgIC8vICcvJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDYyICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDY0ICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDY1ICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDY2ICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNjcgICAgICAgICAgICAgICAvLyAnYW5kJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDY5ICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJywnCiAgICAgICAmJiBsayAhPSAyMTA3MCAgICAgICAgICAgICAgIC8vICdhcnJheScgJywnCiAgICAgICAmJiBsayAhPSAyMTA3MSAgICAgICAgICAgICAgIC8vICdhcycgJywnCiAgICAgICAmJiBsayAhPSAyMTA3MiAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzMgICAgICAgICAgICAgICAvLyAnYXQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwNzQgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDc1ICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDc2ICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJywnCiAgICAgICAmJiBsayAhPSAyMTA3NyAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJywnCiAgICAgICAmJiBsayAhPSAyMTA3OCAgICAgICAgICAgICAgIC8vICdicmVhaycgJywnCiAgICAgICAmJiBsayAhPSAyMTA4MCAgICAgICAgICAgICAgIC8vICdjYXNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDgxICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcsJwogICAgICAgJiYgbGsgIT0gMjEwODIgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcsJwogICAgICAgJiYgbGsgIT0gMjEwODMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcsJwogICAgICAgJiYgbGsgIT0gMjEwODUgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwODYgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMDg4ICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICcsJwogICAgICAgJiYgbGsgIT0gMjEwODkgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJywnCiAgICAgICAmJiBsayAhPSAyMTA5MCAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICcsJwogICAgICAgJiYgbGsgIT0gMjEwOTMgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJywnCiAgICAgICAmJiBsayAhPSAyMTA5NCAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJywnCiAgICAgICAmJiBsayAhPSAyMTA5NSAgICAgICAgICAgICAgIC8vICdjb3B5JyAnLCcKICAgICAgICYmIGxrICE9IDIxMDk2ICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJywnCiAgICAgICAmJiBsayAhPSAyMTA5NyAgICAgICAgICAgICAgIC8vICdjb3VudCcgJywnCiAgICAgICAmJiBsayAhPSAyMTA5OCAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTEwMCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTAxICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMDIgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTAzICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMDQgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTA1ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjExMTAgICAgICAgICAgICAgICAvLyAnZGl2JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTExICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTEyICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICcsJwogICAgICAgJiYgbGsgIT0gMjExMTMgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJywnCiAgICAgICAmJiBsayAhPSAyMTExNCAgICAgICAgICAgICAgIC8vICdlbHNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTE1ICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTE2ICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTE3ICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTE4ICAgICAgICAgICAgICAgLy8gJ2VuZCcgJywnCiAgICAgICAmJiBsayAhPSAyMTEyMCAgICAgICAgICAgICAgIC8vICdlcScgJywnCiAgICAgICAmJiBsayAhPSAyMTEyMSAgICAgICAgICAgICAgIC8vICdldmVyeScgJywnCiAgICAgICAmJiBsayAhPSAyMTEyMyAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjQgICAgICAgICAgICAgICAvLyAnZXhpdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTEyNSAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJywnCiAgICAgICAmJiBsayAhPSAyMTEyNiAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTEyNyAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjggICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjExMjkgICAgICAgICAgICAgICAvLyAnZm9yJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTMzICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTEzNyAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTEzOCAgICAgICAgICAgICAgIC8vICdnZScgJywnCiAgICAgICAmJiBsayAhPSAyMTE0MCAgICAgICAgICAgICAgIC8vICdncm91cCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE0MiAgICAgICAgICAgICAgIC8vICdndCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE0MyAgICAgICAgICAgICAgIC8vICdpZGl2JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTQ0ICAgICAgICAgICAgICAgLy8gJ2lmJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTQ1ICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE0NiAgICAgICAgICAgICAgIC8vICdpbicgJywnCiAgICAgICAmJiBsayAhPSAyMTE0NyAgICAgICAgICAgICAgIC8vICdpbmRleCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE1MSAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcsJwogICAgICAgJiYgbGsgIT0gMjExNTIgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcsJwogICAgICAgJiYgbGsgIT0gMjExNTMgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTU0ICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE1NSAgICAgICAgICAgICAgIC8vICdpbnRvJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTU2ICAgICAgICAgICAgICAgLy8gJ2lzJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTU3ICAgICAgICAgICAgICAgLy8gJ2l0ZW0nICcsJwogICAgICAgJiYgbGsgIT0gMjExNTggICAgICAgICAgICAgICAvLyAnanNvbicgJywnCiAgICAgICAmJiBsayAhPSAyMTE1OSAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICcsJwogICAgICAgJiYgbGsgIT0gMjExNjIgICAgICAgICAgICAgICAvLyAnbGFzdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTE2MyAgICAgICAgICAgICAgIC8vICdsYXgnICcsJwogICAgICAgJiYgbGsgIT0gMjExNjQgICAgICAgICAgICAgICAvLyAnbGUnICcsJwogICAgICAgJiYgbGsgIT0gMjExNjYgICAgICAgICAgICAgICAvLyAnbGV0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTY4ICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcsJwogICAgICAgJiYgbGsgIT0gMjExNzAgICAgICAgICAgICAgICAvLyAnbHQnICcsJwogICAgICAgJiYgbGsgIT0gMjExNzIgICAgICAgICAgICAgICAvLyAnbW9kJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTczICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJywnCiAgICAgICAmJiBsayAhPSAyMTE3NCAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcsJwogICAgICAgJiYgbGsgIT0gMjExNzYgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTc3ICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTc4ICAgICAgICAgICAgICAgLy8gJ25lJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTgzICAgICAgICAgICAgICAgLy8gJ25vZGUnICcsJwogICAgICAgJiYgbGsgIT0gMjExODQgICAgICAgICAgICAgICAvLyAnbm9kZXMnICcsJwogICAgICAgJiYgbGsgIT0gMjExODYgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMTkwICAgICAgICAgICAgICAgLy8gJ29ubHknICcsJwogICAgICAgJiYgbGsgIT0gMjExOTEgICAgICAgICAgICAgICAvLyAnb3B0aW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTkyICAgICAgICAgICAgICAgLy8gJ29yJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTkzICAgICAgICAgICAgICAgLy8gJ29yZGVyJyAnLCcKICAgICAgICYmIGxrICE9IDIxMTk0ICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICcsJwogICAgICAgJiYgbGsgIT0gMjExOTUgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjExOTggICAgICAgICAgICAgICAvLyAncGFyZW50JyAnLCcKICAgICAgICYmIGxrICE9IDIxMjA0ICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJywnCiAgICAgICAmJiBsayAhPSAyMTIwNSAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJywnCiAgICAgICAmJiBsayAhPSAyMTIwOCAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjEwICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJywnCiAgICAgICAmJiBsayAhPSAyMTIxMSAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjEyICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJywnCiAgICAgICAmJiBsayAhPSAyMTIxMyAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMTQgICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjE2ICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJywnCiAgICAgICAmJiBsayAhPSAyMTIxNyAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMTggICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgJywnCiAgICAgICAmJiBsayAhPSAyMTIxOSAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgJywnCiAgICAgICAmJiBsayAhPSAyMTIyMCAgICAgICAgICAgICAgIC8vICdzY29yZScgJywnCiAgICAgICAmJiBsayAhPSAyMTIyMSAgICAgICAgICAgICAgIC8vICdzZWxmJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjI2ICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMjcgICAgICAgICAgICAgICAvLyAnc29tZScgJywnCiAgICAgICAmJiBsayAhPSAyMTIyOCAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMjkgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMzIgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnLCcKICAgICAgICYmIGxrICE9IDIxMjM0ICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJywnCiAgICAgICAmJiBsayAhPSAyMTIzNSAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICcsJwogICAgICAgJiYgbGsgIT0gMjEyMzYgICAgICAgICAgICAgICAvLyAndGV4dCcgJywnCiAgICAgICAmJiBsayAhPSAyMTI0MCAgICAgICAgICAgICAgIC8vICd0bycgJywnCiAgICAgICAmJiBsayAhPSAyMTI0MSAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJywnCiAgICAgICAmJiBsayAhPSAyMTI0MiAgICAgICAgICAgICAgIC8vICd0cnknICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDMgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNDQgICAgICAgICAgICAgICAvLyAndHlwZScgJywnCiAgICAgICAmJiBsayAhPSAyMTI0NSAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjQ2ICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjQ4ICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJywnCiAgICAgICAmJiBsayAhPSAyMTI0OSAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJywnCiAgICAgICAmJiBsayAhPSAyMTI1MiAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJywnCiAgICAgICAmJiBsayAhPSAyMTI1MyAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJywnCiAgICAgICAmJiBsayAhPSAyMTI1NCAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJywnCiAgICAgICAmJiBsayAhPSAyMTI1NSAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjU4ICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjU5ICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnLCcKICAgICAgICYmIGxrICE9IDIxMjYyICAgICAgICAgICAgICAgLy8gJ3dpdGgnICcsJwogICAgICAgJiYgbGsgIT0gMjEyNjYgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnLCcKICAgICAgICYmIGxrICE9IDI3MTQxICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgJzsnCiAgICAgICAmJiBsayAhPSAyNzE0MiAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnOycKICAgICAgICYmIGxrICE9IDI3MTQ0ICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzE0NSAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDYgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDcgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxODAgICAgICAgICAgICAgICAvLyAnLicgJzsnCiAgICAgICAmJiBsayAhPSAyNzE4MSAgICAgICAgICAgICAgIC8vICcuLicgJzsnCiAgICAgICAmJiBsayAhPSAyNzE4MiAgICAgICAgICAgICAgIC8vICcvJyAnOycKICAgICAgICYmIGxrICE9IDI3MjA2ICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnOycKICAgICAgICYmIGxrICE9IDI3MjA4ICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjA5ICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnOycKICAgICAgICYmIGxrICE9IDI3MjEwICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTEgICAgICAgICAgICAgICAvLyAnYW5kJyAnOycKICAgICAgICYmIGxrICE9IDI3MjEzICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNCAgICAgICAgICAgICAgIC8vICdhcnJheScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNSAgICAgICAgICAgICAgIC8vICdhcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNiAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTcgICAgICAgICAgICAgICAvLyAnYXQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTggICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjE5ICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnOycKICAgICAgICYmIGxrICE9IDI3MjIwICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyMSAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyMiAgICAgICAgICAgICAgIC8vICdicmVhaycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyNCAgICAgICAgICAgICAgIC8vICdjYXNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjI1ICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjYgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjkgICAgICAgICAgICAgICAvLyAnY2hpbGQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MjMyICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzMgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzNCAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzcgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzOCAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzOSAgICAgICAgICAgICAgIC8vICdjb3B5JyAnOycKICAgICAgICYmIGxrICE9IDI3MjQwICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0MSAgICAgICAgICAgICAgIC8vICdjb3VudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0MiAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0NCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ1ICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDYgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ3ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDggICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ5ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTQgICAgICAgICAgICAgICAvLyAnZGl2JyAnOycKICAgICAgICYmIGxrICE9IDI3MjU1ICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjU2ICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTcgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1OCAgICAgICAgICAgICAgIC8vICdlbHNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjU5ICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnOycKICAgICAgICYmIGxrICE9IDI3MjYwICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjYxICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjYyICAgICAgICAgICAgICAgLy8gJ2VuZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2NCAgICAgICAgICAgICAgIC8vICdlcScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2NSAgICAgICAgICAgICAgIC8vICdldmVyeScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2NyAgICAgICAgICAgICAgIC8vICdleGNlcHQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjggICAgICAgICAgICAgICAvLyAnZXhpdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2OSAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3MCAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3MSAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzIgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzMgICAgICAgICAgICAgICAvLyAnZm9yJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjc3ICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4MSAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4MiAgICAgICAgICAgICAgIC8vICdnZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4NCAgICAgICAgICAgICAgIC8vICdncm91cCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4NiAgICAgICAgICAgICAgIC8vICdndCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4NyAgICAgICAgICAgICAgIC8vICdpZGl2JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg4ICAgICAgICAgICAgICAgLy8gJ2lmJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg5ICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5MCAgICAgICAgICAgICAgIC8vICdpbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5MSAgICAgICAgICAgICAgIC8vICdpbmRleCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5NSAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTYgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTcgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjk4ICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5OSAgICAgICAgICAgICAgIC8vICdpbnRvJyAnOycKICAgICAgICYmIGxrICE9IDI3MzAwICAgICAgICAgICAgICAgLy8gJ2lzJyAnOycKICAgICAgICYmIGxrICE9IDI3MzAxICAgICAgICAgICAgICAgLy8gJ2l0ZW0nICc7JwogICAgICAgJiYgbGsgIT0gMjczMDIgICAgICAgICAgICAgICAvLyAnanNvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwMyAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc7JwogICAgICAgJiYgbGsgIT0gMjczMDYgICAgICAgICAgICAgICAvLyAnbGFzdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwNyAgICAgICAgICAgICAgIC8vICdsYXgnICc7JwogICAgICAgJiYgbGsgIT0gMjczMDggICAgICAgICAgICAgICAvLyAnbGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTAgICAgICAgICAgICAgICAvLyAnbGV0JyAnOycKICAgICAgICYmIGxrICE9IDI3MzEyICAgICAgICAgICAgICAgLy8gJ2xvb3AnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTQgICAgICAgICAgICAgICAvLyAnbHQnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTYgICAgICAgICAgICAgICAvLyAnbW9kJyAnOycKICAgICAgICYmIGxrICE9IDI3MzE3ICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxOCAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzIxICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzIyICAgICAgICAgICAgICAgLy8gJ25lJyAnOycKICAgICAgICYmIGxrICE9IDI3MzI3ICAgICAgICAgICAgICAgLy8gJ25vZGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjggICAgICAgICAgICAgICAvLyAnbm9kZXMnICc7JwogICAgICAgJiYgbGsgIT0gMjczMzAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnOycKICAgICAgICYmIGxrICE9IDI3MzM0ICAgICAgICAgICAgICAgLy8gJ29ubHknICc7JwogICAgICAgJiYgbGsgIT0gMjczMzUgICAgICAgICAgICAgICAvLyAnb3B0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM2ICAgICAgICAgICAgICAgLy8gJ29yJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM3ICAgICAgICAgICAgICAgLy8gJ29yZGVyJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM4ICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICc7JwogICAgICAgJiYgbGsgIT0gMjczMzkgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNDIgICAgICAgICAgICAgICAvLyAncGFyZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MzQ4ICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM0OSAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1MiAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU0ICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1NSAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU2ICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1NyAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNTggICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzYwICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2MSAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICc7JwogICAgICAgJiYgbGsgIT0gMjczNjIgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2MyAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2NCAgICAgICAgICAgICAgIC8vICdzY29yZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2NSAgICAgICAgICAgICAgIC8vICdzZWxmJyAnOycKICAgICAgICYmIGxrICE9IDI3MzcwICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzEgICAgICAgICAgICAgICAvLyAnc29tZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3MiAgICAgICAgICAgICAgIC8vICdzdGFibGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzMgICAgICAgICAgICAgICAvLyAnc3RhcnQnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzYgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mzc4ICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3OSAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICc7JwogICAgICAgJiYgbGsgIT0gMjczODAgICAgICAgICAgICAgICAvLyAndGV4dCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NCAgICAgICAgICAgICAgIC8vICd0bycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NSAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NiAgICAgICAgICAgICAgIC8vICd0cnknICc7JwogICAgICAgJiYgbGsgIT0gMjczODcgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczODggICAgICAgICAgICAgICAvLyAndHlwZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4OSAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnOycKICAgICAgICYmIGxrICE9IDI3MzkwICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzkyICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5MyAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5NiAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5NyAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5OCAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5OSAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3NDAyICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnOycKICAgICAgICYmIGxrICE9IDI3NDAzICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnOycKICAgICAgICYmIGxrICE9IDI3NDA2ICAgICAgICAgICAgICAgLy8gJ3dpdGgnICc7JwogICAgICAgJiYgbGsgIT0gMjc0MTAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnOycKICAgICAgICYmIGxrICE9IDkwMTk4ICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDkwMjE0ICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDExMzI4NCAgICAgICAgICAgICAgLy8gJ2V4aXQnICdyZXR1cm5pbmcnCiAgICAgICAmJiBsayAhPSAxNDQzODkgICAgICAgICAgICAgIC8vIFdpbGRjYXJkICd9JwogICAgICAgJiYgbGsgIT0gMTQ0MzkwICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJ30nCiAgICAgICAmJiBsayAhPSAxNDQzOTIgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsICd9JwogICAgICAgJiYgbGsgIT0gMTQ0MzkzICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0NDM5NCAgICAgICAgICAgICAgLy8gRG91YmxlTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0NDM5NSAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbCAnfScKICAgICAgICYmIGxrICE9IDE0NDQyOCAgICAgICAgICAgICAgLy8gJy4nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDI5ICAgICAgICAgICAgICAvLyAnLi4nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDMwICAgICAgICAgICAgICAvLyAnLycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NTQgICAgICAgICAgICAgIC8vICdhZnRlcicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NTYgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NTcgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NTggICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ1OSAgICAgICAgICAgICAgLy8gJ2FuZCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NjEgICAgICAgICAgICAgIC8vICdhcHBlbmQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDYyICAgICAgICAgICAgICAvLyAnYXJyYXknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDYzICAgICAgICAgICAgICAvLyAnYXMnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDY0ICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ2NSAgICAgICAgICAgICAgLy8gJ2F0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ2NiAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NjcgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NjggICAgICAgICAgICAgIC8vICdiZWZvcmUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDY5ICAgICAgICAgICAgICAvLyAnYm91bmRhcnktc3BhY2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDcwICAgICAgICAgICAgICAvLyAnYnJlYWsnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDcyICAgICAgICAgICAgICAvLyAnY2FzZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0NzMgICAgICAgICAgICAgIC8vICdjYXN0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ3NCAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ3NSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ3NyAgICAgICAgICAgICAgLy8gJ2NoaWxkJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ3OCAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0ODAgICAgICAgICAgICAgIC8vICdjb21tZW50JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ4MSAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDgyICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ4NSAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDg2ICAgICAgICAgICAgICAvLyAnY29udGludWUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDg3ICAgICAgICAgICAgICAvLyAnY29weScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0ODggICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDg5ICAgICAgICAgICAgICAvLyAnY291bnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDkwICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NDkyICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0OTMgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ5NCAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0OTUgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnfScKICAgICAgICYmIGxrICE9IDE0NDQ5NiAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ0OTcgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUwMiAgICAgICAgICAgICAgLy8gJ2RpdicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDMgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDQgICAgICAgICAgICAgIC8vICdkb2N1bWVudC1ub2RlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUwNSAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTA2ICAgICAgICAgICAgICAvLyAnZWxzZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDcgICAgICAgICAgICAgIC8vICdlbXB0eScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDggICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MDkgICAgICAgICAgICAgIC8vICdlbmNvZGluZycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MTAgICAgICAgICAgICAgIC8vICdlbmQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTEyICAgICAgICAgICAgICAvLyAnZXEnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTEzICAgICAgICAgICAgICAvLyAnZXZlcnknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTE1ICAgICAgICAgICAgICAvLyAnZXhjZXB0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDUxNiAgICAgICAgICAgICAgLy8gJ2V4aXQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTE3ICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTE4ICAgICAgICAgICAgICAvLyAnZmlyc3QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTE5ICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUyMCAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDUyMSAgICAgICAgICAgICAgLy8gJ2ZvcicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MjUgICAgICAgICAgICAgIC8vICdmdC1vcHRpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTI5ICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTMwICAgICAgICAgICAgICAvLyAnZ2UnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTMyICAgICAgICAgICAgICAvLyAnZ3JvdXAnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTM0ICAgICAgICAgICAgICAvLyAnZ3QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTM1ICAgICAgICAgICAgICAvLyAnaWRpdicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MzYgICAgICAgICAgICAgIC8vICdpZicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1MzcgICAgICAgICAgICAgIC8vICdpbXBvcnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTM4ICAgICAgICAgICAgICAvLyAnaW4nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTM5ICAgICAgICAgICAgICAvLyAnaW5kZXgnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTQzICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU0NCAgICAgICAgICAgICAgLy8gJ2luc3RhbmNlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU0NSAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NDYgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTQ3ICAgICAgICAgICAgICAvLyAnaW50bycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NDggICAgICAgICAgICAgIC8vICdpcycgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NDkgICAgICAgICAgICAgIC8vICdpdGVtJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU1MCAgICAgICAgICAgICAgLy8gJ2pzb24nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTUxICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU1NCAgICAgICAgICAgICAgLy8gJ2xhc3QnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTU1ICAgICAgICAgICAgICAvLyAnbGF4JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU1NiAgICAgICAgICAgICAgLy8gJ2xlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU1OCAgICAgICAgICAgICAgLy8gJ2xldCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NjAgICAgICAgICAgICAgIC8vICdsb29wJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU2MiAgICAgICAgICAgICAgLy8gJ2x0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU2NCAgICAgICAgICAgICAgLy8gJ21vZCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NjUgICAgICAgICAgICAgIC8vICdtb2RpZnknICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTY2ICAgICAgICAgICAgICAvLyAnbW9kdWxlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU2OCAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NjkgICAgICAgICAgICAgIC8vICduYW1lc3BhY2Utbm9kZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NzAgICAgICAgICAgICAgIC8vICduZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1NzUgICAgICAgICAgICAgIC8vICdub2RlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU3NiAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU3OCAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1ODIgICAgICAgICAgICAgIC8vICdvbmx5JyAnfScKICAgICAgICYmIGxrICE9IDE0NDU4MyAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1ODQgICAgICAgICAgICAgIC8vICdvcicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1ODUgICAgICAgICAgICAgIC8vICdvcmRlcicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1ODYgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU4NyAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDU5MCAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ1OTYgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NTk3ICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjAwICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MDIgICAgICAgICAgICAgIC8vICdyZW5hbWUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjAzICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MDQgICAgICAgICAgICAgIC8vICdyZXR1cm4nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjA1ICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYwNiAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MDggICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjA5ICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYxMCAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1hdHRyaWJ1dGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjExICAgICAgICAgICAgICAvLyAnc2NoZW1hLWVsZW1lbnQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjEyICAgICAgICAgICAgICAvLyAnc2NvcmUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjEzICAgICAgICAgICAgICAvLyAnc2VsZicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MTggICAgICAgICAgICAgIC8vICdzbGlkaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYxOSAgICAgICAgICAgICAgLy8gJ3NvbWUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjIwICAgICAgICAgICAgICAvLyAnc3RhYmxlJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYyMSAgICAgICAgICAgICAgLy8gJ3N0YXJ0JyAnfScKICAgICAgICYmIGxrICE9IDE0NDYyNCAgICAgICAgICAgICAgLy8gJ3N0cmljdCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MjYgICAgICAgICAgICAgIC8vICdzdHJ1Y3R1cmVkLWl0ZW0nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjI3ICAgICAgICAgICAgICAvLyAnc3dpdGNoJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYyOCAgICAgICAgICAgICAgLy8gJ3RleHQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjMyICAgICAgICAgICAgICAvLyAndG8nICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjMzICAgICAgICAgICAgICAvLyAndHJlYXQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjM0ICAgICAgICAgICAgICAvLyAndHJ5JyAnfScKICAgICAgICYmIGxrICE9IDE0NDYzNSAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJyAnfScKICAgICAgICYmIGxrICE9IDE0NDYzNiAgICAgICAgICAgICAgLy8gJ3R5cGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjM3ICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2MzggICAgICAgICAgICAgIC8vICd1bmlvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2NDAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjQxICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjQ0ICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjQ1ICAgICAgICAgICAgICAvLyAndmFsdWUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjQ2ICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICd9JwogICAgICAgJiYgbGsgIT0gMTQ0NjQ3ICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2NTAgICAgICAgICAgICAgIC8vICd3aGVyZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2NTEgICAgICAgICAgICAgIC8vICd3aGlsZScgJ30nCiAgICAgICAmJiBsayAhPSAxNDQ2NTQgICAgICAgICAgICAgIC8vICd3aXRoJyAnfScKICAgICAgICYmIGxrICE9IDE0NDY1OCkgICAgICAgICAgICAgLy8gJ3hxdWVyeScgJ30nCiAgICAgIHsKICAgICAgICBsayA9IG1lbW9pemVkKDYsIGUwKTsKICAgICAgICBpZiAobGsgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIHRyeV9TdGF0ZW1lbnQoKTsKICAgICAgICAgICAgbWVtb2l6ZSg2LCBlMEEsIC0xKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFBKQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgbWVtb2l6ZSg2LCBlMEEsIC0yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayAhPSAtMQogICAgICAgJiYgbGsgIT0gNTMgICAgICAgICAgICAgICAgICAvLyAnOycKICAgICAgICYmIGxrICE9IDE2MTM0ICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAgICYmIGxrICE9IDI3MTQxICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgJzsnCiAgICAgICAmJiBsayAhPSAyNzE0MiAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiAnOycKICAgICAgICYmIGxrICE9IDI3MTQ0ICAgICAgICAgICAgICAgLy8gSW50ZWdlckxpdGVyYWwgJzsnCiAgICAgICAmJiBsayAhPSAyNzE0NSAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDYgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxNDcgICAgICAgICAgICAgICAvLyBTdHJpbmdMaXRlcmFsICc7JwogICAgICAgJiYgbGsgIT0gMjcxODAgICAgICAgICAgICAgICAvLyAnLicgJzsnCiAgICAgICAmJiBsayAhPSAyNzE4MSAgICAgICAgICAgICAgIC8vICcuLicgJzsnCiAgICAgICAmJiBsayAhPSAyNzE4MiAgICAgICAgICAgICAgIC8vICcvJyAnOycKICAgICAgICYmIGxrICE9IDI3MjA2ICAgICAgICAgICAgICAgLy8gJ2FmdGVyJyAnOycKICAgICAgICYmIGxrICE9IDI3MjA4ICAgICAgICAgICAgICAgLy8gJ2FsbG93aW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjA5ICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJyAnOycKICAgICAgICYmIGxrICE9IDI3MjEwICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTEgICAgICAgICAgICAgICAvLyAnYW5kJyAnOycKICAgICAgICYmIGxrICE9IDI3MjEzICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNCAgICAgICAgICAgICAgIC8vICdhcnJheScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNSAgICAgICAgICAgICAgIC8vICdhcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIxNiAgICAgICAgICAgICAgIC8vICdhc2NlbmRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTcgICAgICAgICAgICAgICAvLyAnYXQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMTggICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjE5ICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnOycKICAgICAgICYmIGxrICE9IDI3MjIwICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyMSAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyMiAgICAgICAgICAgICAgIC8vICdicmVhaycgJzsnCiAgICAgICAmJiBsayAhPSAyNzIyNCAgICAgICAgICAgICAgIC8vICdjYXNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjI1ICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjYgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMjkgICAgICAgICAgICAgICAvLyAnY2hpbGQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MjMyICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzMgICAgICAgICAgICAgICAvLyAnY29uc3RyYWludCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzNCAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nICc7JwogICAgICAgJiYgbGsgIT0gMjcyMzcgICAgICAgICAgICAgICAvLyAnY29udGV4dCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzOCAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzIzOSAgICAgICAgICAgICAgIC8vICdjb3B5JyAnOycKICAgICAgICYmIGxrICE9IDI3MjQwICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0MSAgICAgICAgICAgICAgIC8vICdjb3VudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0MiAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI0NCAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ1ICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDYgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ3ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNDggICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudC1vci1zZWxmJyAnOycKICAgICAgICYmIGxrICE9IDI3MjQ5ICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTQgICAgICAgICAgICAgICAvLyAnZGl2JyAnOycKICAgICAgICYmIGxrICE9IDI3MjU1ICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MjU2ICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNTcgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI1OCAgICAgICAgICAgICAgIC8vICdlbHNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjU5ICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnOycKICAgICAgICYmIGxrICE9IDI3MjYwICAgICAgICAgICAgICAgLy8gJ2VtcHR5LXNlcXVlbmNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MjYxICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnOycKICAgICAgICYmIGxrICE9IDI3MjYyICAgICAgICAgICAgICAgLy8gJ2VuZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2NCAgICAgICAgICAgICAgIC8vICdlcScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2NSAgICAgICAgICAgICAgIC8vICdldmVyeScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2NyAgICAgICAgICAgICAgIC8vICdleGNlcHQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNjggICAgICAgICAgICAgICAvLyAnZXhpdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI2OSAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3MCAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI3MSAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzIgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjcyNzMgICAgICAgICAgICAgICAvLyAnZm9yJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjc3ICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4MSAgICAgICAgICAgICAgIC8vICdmdW5jdGlvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4MiAgICAgICAgICAgICAgIC8vICdnZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4NCAgICAgICAgICAgICAgIC8vICdncm91cCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4NiAgICAgICAgICAgICAgIC8vICdndCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI4NyAgICAgICAgICAgICAgIC8vICdpZGl2JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg4ICAgICAgICAgICAgICAgLy8gJ2lmJyAnOycKICAgICAgICYmIGxrICE9IDI3Mjg5ICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5MCAgICAgICAgICAgICAgIC8vICdpbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5MSAgICAgICAgICAgICAgIC8vICdpbmRleCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5NSAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTYgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICc7JwogICAgICAgJiYgbGsgIT0gMjcyOTcgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnOycKICAgICAgICYmIGxrICE9IDI3Mjk4ICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzI5OSAgICAgICAgICAgICAgIC8vICdpbnRvJyAnOycKICAgICAgICYmIGxrICE9IDI3MzAwICAgICAgICAgICAgICAgLy8gJ2lzJyAnOycKICAgICAgICYmIGxrICE9IDI3MzAxICAgICAgICAgICAgICAgLy8gJ2l0ZW0nICc7JwogICAgICAgJiYgbGsgIT0gMjczMDIgICAgICAgICAgICAgICAvLyAnanNvbicgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwMyAgICAgICAgICAgICAgIC8vICdqc29uLWl0ZW0nICc7JwogICAgICAgJiYgbGsgIT0gMjczMDYgICAgICAgICAgICAgICAvLyAnbGFzdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzMwNyAgICAgICAgICAgICAgIC8vICdsYXgnICc7JwogICAgICAgJiYgbGsgIT0gMjczMDggICAgICAgICAgICAgICAvLyAnbGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTAgICAgICAgICAgICAgICAvLyAnbGV0JyAnOycKICAgICAgICYmIGxrICE9IDI3MzEyICAgICAgICAgICAgICAgLy8gJ2xvb3AnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTQgICAgICAgICAgICAgICAvLyAnbHQnICc7JwogICAgICAgJiYgbGsgIT0gMjczMTYgICAgICAgICAgICAgICAvLyAnbW9kJyAnOycKICAgICAgICYmIGxrICE9IDI3MzE3ICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJzsnCiAgICAgICAmJiBsayAhPSAyNzMxOCAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzIxICAgICAgICAgICAgICAgLy8gJ25hbWVzcGFjZS1ub2RlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzIyICAgICAgICAgICAgICAgLy8gJ25lJyAnOycKICAgICAgICYmIGxrICE9IDI3MzI3ICAgICAgICAgICAgICAgLy8gJ25vZGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczMjggICAgICAgICAgICAgICAvLyAnbm9kZXMnICc7JwogICAgICAgJiYgbGsgIT0gMjczMzAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JyAnOycKICAgICAgICYmIGxrICE9IDI3MzM0ICAgICAgICAgICAgICAgLy8gJ29ubHknICc7JwogICAgICAgJiYgbGsgIT0gMjczMzUgICAgICAgICAgICAgICAvLyAnb3B0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM2ICAgICAgICAgICAgICAgLy8gJ29yJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM3ICAgICAgICAgICAgICAgLy8gJ29yZGVyJyAnOycKICAgICAgICYmIGxrICE9IDI3MzM4ICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICc7JwogICAgICAgJiYgbGsgIT0gMjczMzkgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNDIgICAgICAgICAgICAgICAvLyAncGFyZW50JyAnOycKICAgICAgICYmIGxrICE9IDI3MzQ4ICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM0OSAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1MiAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU0ICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1NSAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnOycKICAgICAgICYmIGxrICE9IDI3MzU2ICAgICAgICAgICAgICAgLy8gJ3JldHVybicgJzsnCiAgICAgICAmJiBsayAhPSAyNzM1NyAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNTggICAgICAgICAgICAgICAvLyAncmV2YWxpZGF0aW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzYwICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2MSAgICAgICAgICAgICAgIC8vICdzY2hlbWEnICc7JwogICAgICAgJiYgbGsgIT0gMjczNjIgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2MyAgICAgICAgICAgICAgIC8vICdzY2hlbWEtZWxlbWVudCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2NCAgICAgICAgICAgICAgIC8vICdzY29yZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM2NSAgICAgICAgICAgICAgIC8vICdzZWxmJyAnOycKICAgICAgICYmIGxrICE9IDI3MzcwICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzEgICAgICAgICAgICAgICAvLyAnc29tZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3MiAgICAgICAgICAgICAgIC8vICdzdGFibGUnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzMgICAgICAgICAgICAgICAvLyAnc3RhcnQnICc7JwogICAgICAgJiYgbGsgIT0gMjczNzYgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnOycKICAgICAgICYmIGxrICE9IDI3Mzc4ICAgICAgICAgICAgICAgLy8gJ3N0cnVjdHVyZWQtaXRlbScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM3OSAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICc7JwogICAgICAgJiYgbGsgIT0gMjczODAgICAgICAgICAgICAgICAvLyAndGV4dCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NCAgICAgICAgICAgICAgIC8vICd0bycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NSAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4NiAgICAgICAgICAgICAgIC8vICd0cnknICc7JwogICAgICAgJiYgbGsgIT0gMjczODcgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICc7JwogICAgICAgJiYgbGsgIT0gMjczODggICAgICAgICAgICAgICAvLyAndHlwZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM4OSAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJyAnOycKICAgICAgICYmIGxrICE9IDI3MzkwICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3MzkyICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5MyAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5NiAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5NyAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5OCAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJzsnCiAgICAgICAmJiBsayAhPSAyNzM5OSAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnOycKICAgICAgICYmIGxrICE9IDI3NDAyICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnOycKICAgICAgICYmIGxrICE9IDI3NDAzICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnOycKICAgICAgICYmIGxrICE9IDI3NDA2ICAgICAgICAgICAgICAgLy8gJ3dpdGgnICc7JwogICAgICAgJiYgbGsgIT0gMjc0MTAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnOycKICAgICAgICYmIGxrICE9IDkwMTk4ICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDkwMjE0ICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDExMzI4NCkgICAgICAgICAgICAgLy8gJ2V4aXQnICdyZXR1cm5pbmcnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0cnlfU3RhdGVtZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TdGF0ZW1lbnRzQW5kRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlN0YXRlbWVudHNBbmRFeHByIiwgZTApOwogICAgcGFyc2VfU3RhdGVtZW50cygpOwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTdGF0ZW1lbnRzQW5kRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TdGF0ZW1lbnRzQW5kRXhwcigpCiAgewogICAgdHJ5X1N0YXRlbWVudHMoKTsKICAgIHRyeV9FeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3RhdGVtZW50c0FuZE9wdGlvbmFsRXhwciIsIGUwKTsKICAgIHBhcnNlX1N0YXRlbWVudHMoKTsKICAgIGlmIChsMSAhPSAyNSAgICAgICAgICAgICAgICAgICAgLy8gRU9GCiAgICAgJiYgbDEgIT0gMjgyKSAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3RhdGVtZW50c0FuZE9wdGlvbmFsRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCkKICB7CiAgICB0cnlfU3RhdGVtZW50cygpOwogICAgaWYgKGwxICE9IDI1ICAgICAgICAgICAgICAgICAgICAvLyBFT0YKICAgICAmJiBsMSAhPSAyODIpICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB7CiAgICAgIHRyeV9FeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9TdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJTdGF0ZW1lbnQiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgbG9va2FoZWFkMlcoMTg4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBsb29rYWhlYWQyVygxOTUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLScgfCAnLycgfCAnLy8nIHwgJzsnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGxvb2thaGVhZDJXKDE5Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfAogICAgICBicmVhazsKICAgIGNhc2UgMjUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgbG9va2FoZWFkMlcoMTg5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIGxvb2thaGVhZDJXKDE4Nik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfAogICAgICBicmVhazsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI3Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgICBsb29rYWhlYWQyVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgbG9va2FoZWFkMlcoMTg3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGxvb2thaGVhZDJXKDE4NCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfCAnPCcgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMjgzNiAgICAgICAgICAgICAgICAgIC8vICd7JyBXaWxkY2FyZAogICAgIHx8IGxrID09IDMxMDMgICAgICAgICAgICAgICAgICAvLyAnJCcgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gMzEwNCAgICAgICAgICAgICAgICAgIC8vICclJyBFUU5hbWVeVG9rZW4KICAgICB8fCBsayA9PSAzMzQ4ICAgICAgICAgICAgICAgICAgLy8gJ3snIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDQzNzIgICAgICAgICAgICAgICAgICAvLyAneycgSW50ZWdlckxpdGVyYWwKICAgICB8fCBsayA9PSA0ODg0ICAgICAgICAgICAgICAgICAgLy8gJ3snIERlY2ltYWxMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTM5NiAgICAgICAgICAgICAgICAgIC8vICd7JyBEb3VibGVMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTkwOCAgICAgICAgICAgICAgICAgIC8vICd7JyBTdHJpbmdMaXRlcmFsCiAgICAgfHwgbGsgPT0gMTYxNDggICAgICAgICAgICAgICAgIC8vICd7JyAnJCcKICAgICB8fCBsayA9PSAxNjY2MCAgICAgICAgICAgICAgICAgLy8gJ3snICclJwogICAgIHx8IGxrID09IDE3Njc1ICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcoJwogICAgIHx8IGxrID09IDE3Njg0ICAgICAgICAgICAgICAgICAvLyAneycgJygnCiAgICAgfHwgbGsgPT0gMTgxOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnKCMnCiAgICAgfHwgbGsgPT0gMjA3NTYgICAgICAgICAgICAgICAgIC8vICd7JyAnKycKICAgICB8fCBsayA9PSAyMTc4MCAgICAgICAgICAgICAgICAgLy8gJ3snICctJwogICAgIHx8IGxrID09IDIyODA0ICAgICAgICAgICAgICAgICAvLyAneycgJy4nCiAgICAgfHwgbGsgPT0gMjMzMTYgICAgICAgICAgICAgICAgIC8vICd7JyAnLi4nCiAgICAgfHwgbGsgPT0gMjM4MjggICAgICAgICAgICAgICAgIC8vICd7JyAnLycKICAgICB8fCBsayA9PSAyNDM0MCAgICAgICAgICAgICAgICAgLy8gJ3snICcvLycKICAgICB8fCBsayA9PSAyNzQxMiAgICAgICAgICAgICAgICAgLy8gJ3snICc7JwogICAgIHx8IGxrID09IDI3OTI0ICAgICAgICAgICAgICAgICAvLyAneycgJzwnCiAgICAgfHwgbGsgPT0gMjg0MzYgICAgICAgICAgICAgICAgIC8vICd7JyAnPCEtLScKICAgICB8fCBsayA9PSAzMDQ4NCAgICAgICAgICAgICAgICAgLy8gJ3snICc8PycKICAgICB8fCBsayA9PSAzNDA2OCAgICAgICAgICAgICAgICAgLy8gJ3snICdAJwogICAgIHx8IGxrID09IDM1MDkyICAgICAgICAgICAgICAgICAvLyAneycgJ1snCiAgICAgfHwgbGsgPT0gMzU4NzEgICAgICAgICAgICAgICAgIC8vICckJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzU4NzIgICAgICAgICAgICAgICAgIC8vICclJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzYxMTYgICAgICAgICAgICAgICAgIC8vICd7JyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY4OTUgICAgICAgICAgICAgICAgIC8vICckJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzY4OTYgICAgICAgICAgICAgICAgIC8vICclJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzcxNDAgICAgICAgICAgICAgICAgIC8vICd7JyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzc0MDcgICAgICAgICAgICAgICAgIC8vICckJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzc0MDggICAgICAgICAgICAgICAgIC8vICclJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzc2NTIgICAgICAgICAgICAgICAgIC8vICd7JyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzc5MTkgICAgICAgICAgICAgICAgIC8vICckJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzNzkyMCAgICAgICAgICAgICAgICAgLy8gJyUnICdhbmNlc3Rvci1vci1zZWxmJwogICAgIHx8IGxrID09IDM4MTY0ICAgICAgICAgICAgICAgICAvLyAneycgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzg0MzEgICAgICAgICAgICAgICAgIC8vICckJyAnYW5kJwogICAgIHx8IGxrID09IDM4NDMyICAgICAgICAgICAgICAgICAvLyAnJScgJ2FuZCcKICAgICB8fCBsayA9PSAzODY3NiAgICAgICAgICAgICAgICAgLy8gJ3snICdhbmQnCiAgICAgfHwgbGsgPT0gMzk0NTUgICAgICAgICAgICAgICAgIC8vICckJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDM5NDU2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2FwcGVuZCcKICAgICB8fCBsayA9PSAzOTcwMCAgICAgICAgICAgICAgICAgLy8gJ3snICdhcHBlbmQnCiAgICAgfHwgbGsgPT0gMzk5NjcgICAgICAgICAgICAgICAgIC8vICckJyAnYXJyYXknCiAgICAgfHwgbGsgPT0gMzk5NjggICAgICAgICAgICAgICAgIC8vICclJyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDAyMTIgICAgICAgICAgICAgICAgIC8vICd7JyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDA0NzkgICAgICAgICAgICAgICAgIC8vICckJyAnYXMnCiAgICAgfHwgbGsgPT0gNDA0ODAgICAgICAgICAgICAgICAgIC8vICclJyAnYXMnCiAgICAgfHwgbGsgPT0gNDA3MjQgICAgICAgICAgICAgICAgIC8vICd7JyAnYXMnCiAgICAgfHwgbGsgPT0gNDA5OTEgICAgICAgICAgICAgICAgIC8vICckJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQwOTkyICAgICAgICAgICAgICAgICAvLyAnJScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTIzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE1MDMgICAgICAgICAgICAgICAgIC8vICckJyAnYXQnCiAgICAgfHwgbGsgPT0gNDE1MDQgICAgICAgICAgICAgICAgIC8vICclJyAnYXQnCiAgICAgfHwgbGsgPT0gNDE3NDggICAgICAgICAgICAgICAgIC8vICd7JyAnYXQnCiAgICAgfHwgbGsgPT0gNDIwMTUgICAgICAgICAgICAgICAgIC8vICckJyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQyMDE2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2F0dHJpYnV0ZScKICAgICB8fCBsayA9PSA0MjI2MCAgICAgICAgICAgICAgICAgLy8gJ3snICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDI1MjcgICAgICAgICAgICAgICAgIC8vICckJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDI1MjggICAgICAgICAgICAgICAgIC8vICclJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDI3NzIgICAgICAgICAgICAgICAgIC8vICd7JyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDMwMzkgICAgICAgICAgICAgICAgIC8vICckJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzMDQwICAgICAgICAgICAgICAgICAvLyAnJScgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzI4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM1NTEgICAgICAgICAgICAgICAgIC8vICckJyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDM1NTIgICAgICAgICAgICAgICAgIC8vICclJyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDM3OTYgICAgICAgICAgICAgICAgIC8vICd7JyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDQwNjMgICAgICAgICAgICAgICAgIC8vICckJyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDQwNjQgICAgICAgICAgICAgICAgIC8vICclJyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDQzMDggICAgICAgICAgICAgICAgIC8vICd7JyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDUwODcgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTA4OCAgICAgICAgICAgICAgICAgLy8gJyUnICdjYXNlJwogICAgIHx8IGxrID09IDQ1MzMyICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU1OTkgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NTYwMCAgICAgICAgICAgICAgICAgLy8gJyUnICdjYXN0JwogICAgIHx8IGxrID09IDQ1ODQ0ICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYxMTEgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDYxMTIgICAgICAgICAgICAgICAgIC8vICclJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDYzNTYgICAgICAgICAgICAgICAgIC8vICd7JyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY2MjMgICAgICAgICAgICAgICAgIC8vICckJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDY2MjQgICAgICAgICAgICAgICAgIC8vICclJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDY4NjggICAgICAgICAgICAgICAgIC8vICd7JyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDc2NDcgICAgICAgICAgICAgICAgIC8vICckJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDc2NDggICAgICAgICAgICAgICAgIC8vICclJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDc4OTIgICAgICAgICAgICAgICAgIC8vICd7JyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDgxNTkgICAgICAgICAgICAgICAgIC8vICckJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4MTYwICAgICAgICAgICAgICAgICAvLyAnJScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODQwNCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDkxODMgICAgICAgICAgICAgICAgIC8vICckJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA0OTE4NCAgICAgICAgICAgICAgICAgLy8gJyUnICdjb21tZW50JwogICAgIHx8IGxrID09IDQ5NDI4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNDk2OTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA0OTY5NiAgICAgICAgICAgICAgICAgLy8gJyUnICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDQ5OTQwICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnN0cmFpbnQnCiAgICAgfHwgbGsgPT0gNTAyMDcgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RydWN0aW9uJwogICAgIHx8IGxrID09IDUwMjA4ICAgICAgICAgICAgICAgICAvLyAnJScgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MDQ1MiAgICAgICAgICAgICAgICAgLy8gJ3snICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTE3NDMgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MTc0NCAgICAgICAgICAgICAgICAgLy8gJyUnICdjb250ZXh0JwogICAgIHx8IGxrID09IDUxOTg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnRleHQnCiAgICAgfHwgbGsgPT0gNTIyNTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTIyNTYgICAgICAgICAgICAgICAgIC8vICclJyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTI1MDAgICAgICAgICAgICAgICAgIC8vICd7JyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTI3NjcgICAgICAgICAgICAgICAgIC8vICckJyAnY29weScKICAgICB8fCBsayA9PSA1Mjc2OCAgICAgICAgICAgICAgICAgLy8gJyUnICdjb3B5JwogICAgIHx8IGxrID09IDUzMDEyICAgICAgICAgICAgICAgICAvLyAneycgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTMyNzkgICAgICAgICAgICAgICAgIC8vICckJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDUzMjgwICAgICAgICAgICAgICAgICAvLyAnJScgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1MzUyNCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgfHwgbGsgPT0gNTM3OTEgICAgICAgICAgICAgICAgIC8vICckJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTM3OTIgICAgICAgICAgICAgICAgIC8vICclJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQwMzYgICAgICAgICAgICAgICAgIC8vICd7JyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQzMDMgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTQzMDQgICAgICAgICAgICAgICAgIC8vICclJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTQ1NDggICAgICAgICAgICAgICAgIC8vICd7JyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTUzMjcgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjbGFyZScKICAgICB8fCBsayA9PSA1NTMyOCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU1NTcyICAgICAgICAgICAgICAgICAvLyAneycgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTU4MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NTg0MCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2MDg0ICAgICAgICAgICAgICAgICAvLyAneycgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTYzNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU2MzUyICAgICAgICAgICAgICAgICAvLyAnJScgJ2RlbGV0ZScKICAgICB8fCBsayA9PSA1NjU5NiAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTY4NjMgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1Njg2NCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZXNjZW5kYW50JwogICAgIHx8IGxrID09IDU3MTA4ICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTczNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU3Mzc2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICB8fCBsayA9PSA1NzYyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTc4ODcgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1Nzg4OCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4MTMyICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjA0NDcgICAgICAgICAgICAgICAgIC8vICckJyAnZGl2JwogICAgIHx8IGxrID09IDYwNDQ4ICAgICAgICAgICAgICAgICAvLyAnJScgJ2RpdicKICAgICB8fCBsayA9PSA2MDY5MiAgICAgICAgICAgICAgICAgLy8gJ3snICdkaXYnCiAgICAgfHwgbGsgPT0gNjA5NTkgICAgICAgICAgICAgICAgIC8vICckJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjA5NjAgICAgICAgICAgICAgICAgIC8vICclJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjEyMDQgICAgICAgICAgICAgICAgIC8vICd7JyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjE0NzEgICAgICAgICAgICAgICAgIC8vICckJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MTQ3MiAgICAgICAgICAgICAgICAgLy8gJyUnICdkb2N1bWVudC1ub2RlJwogICAgIHx8IGxrID09IDYxNzE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjE5ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2MTk4NCAgICAgICAgICAgICAgICAgLy8gJyUnICdlbGVtZW50JwogICAgIHx8IGxrID09IDYyMjI4ICAgICAgICAgICAgICAgICAvLyAneycgJ2VsZW1lbnQnCiAgICAgfHwgbGsgPT0gNjI0OTUgICAgICAgICAgICAgICAgIC8vICckJyAnZWxzZScKICAgICB8fCBsayA9PSA2MjQ5NiAgICAgICAgICAgICAgICAgLy8gJyUnICdlbHNlJwogICAgIHx8IGxrID09IDYyNzQwICAgICAgICAgICAgICAgICAvLyAneycgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMwMDcgICAgICAgICAgICAgICAgIC8vICckJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjMwMDggICAgICAgICAgICAgICAgIC8vICclJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjMyNTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjM1MTkgICAgICAgICAgICAgICAgIC8vICckJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjM1MjAgICAgICAgICAgICAgICAgIC8vICclJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjM3NjQgICAgICAgICAgICAgICAgIC8vICd7JyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQwMzEgICAgICAgICAgICAgICAgIC8vICckJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjQwMzIgICAgICAgICAgICAgICAgIC8vICclJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjQyNzYgICAgICAgICAgICAgICAgIC8vICd7JyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjQ1NDMgICAgICAgICAgICAgICAgIC8vICckJyAnZW5kJwogICAgIHx8IGxrID09IDY0NTQ0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2VuZCcKICAgICB8fCBsayA9PSA2NDc4OCAgICAgICAgICAgICAgICAgLy8gJ3snICdlbmQnCiAgICAgfHwgbGsgPT0gNjU1NjcgICAgICAgICAgICAgICAgIC8vICckJyAnZXEnCiAgICAgfHwgbGsgPT0gNjU1NjggICAgICAgICAgICAgICAgIC8vICclJyAnZXEnCiAgICAgfHwgbGsgPT0gNjU4MTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZXEnCiAgICAgfHwgbGsgPT0gNjYwNzkgICAgICAgICAgICAgICAgIC8vICckJyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjYwODAgICAgICAgICAgICAgICAgIC8vICclJyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjYzMjQgICAgICAgICAgICAgICAgIC8vICd7JyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjcxMDMgICAgICAgICAgICAgICAgIC8vICckJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3MTA0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzM0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc2MTUgICAgICAgICAgICAgICAgIC8vICckJyAnZXhpdCcKICAgICB8fCBsayA9PSA2NzYxNiAgICAgICAgICAgICAgICAgLy8gJyUnICdleGl0JwogICAgIHx8IGxrID09IDY3ODYwICAgICAgICAgICAgICAgICAvLyAneycgJ2V4aXQnCiAgICAgfHwgbGsgPT0gNjgxMjcgICAgICAgICAgICAgICAgIC8vICckJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjgxMjggICAgICAgICAgICAgICAgIC8vICclJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjgzNzIgICAgICAgICAgICAgICAgIC8vICd7JyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjg2MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjg2NDAgICAgICAgICAgICAgICAgIC8vICclJyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjg4ODQgICAgICAgICAgICAgICAgIC8vICd7JyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjkxNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nJwogICAgIHx8IGxrID09IDY5MTUyICAgICAgICAgICAgICAgICAvLyAnJScgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA2OTM5NiAgICAgICAgICAgICAgICAgLy8gJ3snICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNjk2NjMgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNjk2NjQgICAgICAgICAgICAgICAgIC8vICclJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNjk5MDggICAgICAgICAgICAgICAgIC8vICd7JyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzAxNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZm9yJwogICAgIHx8IGxrID09IDcwMTc2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ZvcicKICAgICB8fCBsayA9PSA3MDQyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdmb3InCiAgICAgfHwgbGsgPT0gNzIyMjMgICAgICAgICAgICAgICAgIC8vICckJyAnZnQtb3B0aW9uJwogICAgIHx8IGxrID09IDcyMjI0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2Z0LW9wdGlvbicKICAgICB8fCBsayA9PSA3MjQ2OCAgICAgICAgICAgICAgICAgLy8gJ3snICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzQyNzEgICAgICAgICAgICAgICAgIC8vICckJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQyNzIgICAgICAgICAgICAgICAgIC8vICclJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQ1MTYgICAgICAgICAgICAgICAgIC8vICd7JyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQ3ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzQ3ODQgICAgICAgICAgICAgICAgIC8vICclJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzUwMjggICAgICAgICAgICAgICAgIC8vICd7JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU4MDcgICAgICAgICAgICAgICAgIC8vICckJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzU4MDggICAgICAgICAgICAgICAgIC8vICclJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzYwNTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY4MzEgICAgICAgICAgICAgICAgIC8vICckJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzY4MzIgICAgICAgICAgICAgICAgIC8vICclJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzcwNzYgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzczNDMgICAgICAgICAgICAgICAgIC8vICckJyAnaWRpdicKICAgICB8fCBsayA9PSA3NzM0NCAgICAgICAgICAgICAgICAgLy8gJyUnICdpZGl2JwogICAgIHx8IGxrID09IDc3NTg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzc4NTUgICAgICAgICAgICAgICAgIC8vICckJyAnaWYnCiAgICAgfHwgbGsgPT0gNzc4NTYgICAgICAgICAgICAgICAgIC8vICclJyAnaWYnCiAgICAgfHwgbGsgPT0gNzgxMDAgICAgICAgICAgICAgICAgIC8vICd7JyAnaWYnCiAgICAgfHwgbGsgPT0gNzgzNjcgICAgICAgICAgICAgICAgIC8vICckJyAnaW1wb3J0JwogICAgIHx8IGxrID09IDc4MzY4ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ltcG9ydCcKICAgICB8fCBsayA9PSA3ODYxMiAgICAgICAgICAgICAgICAgLy8gJ3snICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gNzg4NzkgICAgICAgICAgICAgICAgIC8vICckJyAnaW4nCiAgICAgfHwgbGsgPT0gNzg4ODAgICAgICAgICAgICAgICAgIC8vICclJyAnaW4nCiAgICAgfHwgbGsgPT0gNzkxMjQgICAgICAgICAgICAgICAgIC8vICd7JyAnaW4nCiAgICAgfHwgbGsgPT0gNzkzOTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gNzkzOTIgICAgICAgICAgICAgICAgIC8vICclJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gNzk2MzYgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODE0MzkgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgxNDQwICAgICAgICAgICAgICAgICAvLyAnJScgJ2luc2VydCcKICAgICB8fCBsayA9PSA4MTY4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnNlcnQnCiAgICAgfHwgbGsgPT0gODE5NTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODE5NTIgICAgICAgICAgICAgICAgIC8vICclJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODIxOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODI0NjMgICAgICAgICAgICAgICAgIC8vICckJyAnaW50ZWdyaXR5JwogICAgIHx8IGxrID09IDgyNDY0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4MjcwOCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlZ3JpdHknCiAgICAgfHwgbGsgPT0gODI5NzUgICAgICAgICAgICAgICAgIC8vICckJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDgyOTc2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4MzIyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODM0ODcgICAgICAgICAgICAgICAgIC8vICckJyAnaW50bycKICAgICB8fCBsayA9PSA4MzQ4OCAgICAgICAgICAgICAgICAgLy8gJyUnICdpbnRvJwogICAgIHx8IGxrID09IDgzNzMyICAgICAgICAgICAgICAgICAvLyAneycgJ2ludG8nCiAgICAgfHwgbGsgPT0gODM5OTkgICAgICAgICAgICAgICAgIC8vICckJyAnaXMnCiAgICAgfHwgbGsgPT0gODQwMDAgICAgICAgICAgICAgICAgIC8vICclJyAnaXMnCiAgICAgfHwgbGsgPT0gODQyNDQgICAgICAgICAgICAgICAgIC8vICd7JyAnaXMnCiAgICAgfHwgbGsgPT0gODQ1MTEgICAgICAgICAgICAgICAgIC8vICckJyAnaXRlbScKICAgICB8fCBsayA9PSA4NDUxMiAgICAgICAgICAgICAgICAgLy8gJyUnICdpdGVtJwogICAgIHx8IGxrID09IDg0NzU2ICAgICAgICAgICAgICAgICAvLyAneycgJ2l0ZW0nCiAgICAgfHwgbGsgPT0gODUwMjMgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbicKICAgICB8fCBsayA9PSA4NTAyNCAgICAgICAgICAgICAgICAgLy8gJyUnICdqc29uJwogICAgIHx8IGxrID09IDg1MjY4ICAgICAgICAgICAgICAgICAvLyAneycgJ2pzb24nCiAgICAgfHwgbGsgPT0gODU1MzUgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg1NTM2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2pzb24taXRlbScKICAgICB8fCBsayA9PSA4NTc4MCAgICAgICAgICAgICAgICAgLy8gJ3snICdqc29uLWl0ZW0nCiAgICAgfHwgbGsgPT0gODcwNzEgICAgICAgICAgICAgICAgIC8vICckJyAnbGFzdCcKICAgICB8fCBsayA9PSA4NzA3MiAgICAgICAgICAgICAgICAgLy8gJyUnICdsYXN0JwogICAgIHx8IGxrID09IDg3MzE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2xhc3QnCiAgICAgfHwgbGsgPT0gODc1ODMgICAgICAgICAgICAgICAgIC8vICckJyAnbGF4JwogICAgIHx8IGxrID09IDg3NTg0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2xheCcKICAgICB8fCBsayA9PSA4NzgyOCAgICAgICAgICAgICAgICAgLy8gJ3snICdsYXgnCiAgICAgfHwgbGsgPT0gODgwOTUgICAgICAgICAgICAgICAgIC8vICckJyAnbGUnCiAgICAgfHwgbGsgPT0gODgwOTYgICAgICAgICAgICAgICAgIC8vICclJyAnbGUnCiAgICAgfHwgbGsgPT0gODgzNDAgICAgICAgICAgICAgICAgIC8vICd7JyAnbGUnCiAgICAgfHwgbGsgPT0gODkxMTkgICAgICAgICAgICAgICAgIC8vICckJyAnbGV0JwogICAgIHx8IGxrID09IDg5MTIwICAgICAgICAgICAgICAgICAvLyAnJScgJ2xldCcKICAgICB8fCBsayA9PSA4OTM2NCAgICAgICAgICAgICAgICAgLy8gJ3snICdsZXQnCiAgICAgfHwgbGsgPT0gOTAxNDMgICAgICAgICAgICAgICAgIC8vICckJyAnbG9vcCcKICAgICB8fCBsayA9PSA5MDE0NCAgICAgICAgICAgICAgICAgLy8gJyUnICdsb29wJwogICAgIHx8IGxrID09IDkwMzg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTExNjcgICAgICAgICAgICAgICAgIC8vICckJyAnbHQnCiAgICAgfHwgbGsgPT0gOTExNjggICAgICAgICAgICAgICAgIC8vICclJyAnbHQnCiAgICAgfHwgbGsgPT0gOTE0MTIgICAgICAgICAgICAgICAgIC8vICd7JyAnbHQnCiAgICAgfHwgbGsgPT0gOTIxOTEgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kJwogICAgIHx8IGxrID09IDkyMTkyICAgICAgICAgICAgICAgICAvLyAnJScgJ21vZCcKICAgICB8fCBsayA9PSA5MjQzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2QnCiAgICAgfHwgbGsgPT0gOTI3MDMgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDkyNzA0ICAgICAgICAgICAgICAgICAvLyAnJScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5Mjk0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTMyMTUgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kdWxlJwogICAgIHx8IGxrID09IDkzMjE2ICAgICAgICAgICAgICAgICAvLyAnJScgJ21vZHVsZScKICAgICB8fCBsayA9PSA5MzQ2MCAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTQyMzkgICAgICAgICAgICAgICAgIC8vICckJyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk0MjQwICAgICAgICAgICAgICAgICAvLyAnJScgJ25hbWVzcGFjZScKICAgICB8fCBsayA9PSA5NDQ4NCAgICAgICAgICAgICAgICAgLy8gJ3snICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTQ3NTEgICAgICAgICAgICAgICAgIC8vICckJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTQ3NTIgICAgICAgICAgICAgICAgIC8vICclJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTQ5OTYgICAgICAgICAgICAgICAgIC8vICd7JyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTUyNjMgICAgICAgICAgICAgICAgIC8vICckJyAnbmUnCiAgICAgfHwgbGsgPT0gOTUyNjQgICAgICAgICAgICAgICAgIC8vICclJyAnbmUnCiAgICAgfHwgbGsgPT0gOTU1MDggICAgICAgICAgICAgICAgIC8vICd7JyAnbmUnCiAgICAgfHwgbGsgPT0gOTc4MjMgICAgICAgICAgICAgICAgIC8vICckJyAnbm9kZScKICAgICB8fCBsayA9PSA5NzgyNCAgICAgICAgICAgICAgICAgLy8gJyUnICdub2RlJwogICAgIHx8IGxrID09IDk4MDY4ICAgICAgICAgICAgICAgICAvLyAneycgJ25vZGUnCiAgICAgfHwgbGsgPT0gOTgzMzUgICAgICAgICAgICAgICAgIC8vICckJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTgzMzYgICAgICAgICAgICAgICAgIC8vICclJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTg1ODAgICAgICAgICAgICAgICAgIC8vICd7JyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTkzNTkgICAgICAgICAgICAgICAgIC8vICckJyAnb2JqZWN0JwogICAgIHx8IGxrID09IDk5MzYwICAgICAgICAgICAgICAgICAvLyAnJScgJ29iamVjdCcKICAgICB8fCBsayA9PSA5OTYwNCAgICAgICAgICAgICAgICAgLy8gJ3snICdvYmplY3QnCiAgICAgfHwgbGsgPT0gMTAxNDA3ICAgICAgICAgICAgICAgIC8vICckJyAnb25seScKICAgICB8fCBsayA9PSAxMDE0MDggICAgICAgICAgICAgICAgLy8gJyUnICdvbmx5JwogICAgIHx8IGxrID09IDEwMTY1MiAgICAgICAgICAgICAgICAvLyAneycgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAxOTE5ICAgICAgICAgICAgICAgIC8vICckJyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwMTkyMCAgICAgICAgICAgICAgICAvLyAnJScgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDIxNjQgICAgICAgICAgICAgICAgLy8gJ3snICdvcHRpb24nCiAgICAgfHwgbGsgPT0gMTAyNDMxICAgICAgICAgICAgICAgIC8vICckJyAnb3InCiAgICAgfHwgbGsgPT0gMTAyNDMyICAgICAgICAgICAgICAgIC8vICclJyAnb3InCiAgICAgfHwgbGsgPT0gMTAyNjc2ICAgICAgICAgICAgICAgIC8vICd7JyAnb3InCiAgICAgfHwgbGsgPT0gMTAyOTQzICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAyOTQ0ICAgICAgICAgICAgICAgIC8vICclJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAzMTg4ICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAzNDU1ICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXJlZCcKICAgICB8fCBsayA9PSAxMDM0NTYgICAgICAgICAgICAgICAgLy8gJyUnICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwMzcwMCAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTAzOTY3ICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTAzOTY4ICAgICAgICAgICAgICAgIC8vICclJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA0MjEyICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA1NTAzICAgICAgICAgICAgICAgIC8vICckJyAncGFyZW50JwogICAgIHx8IGxrID09IDEwNTUwNCAgICAgICAgICAgICAgICAvLyAnJScgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMDU3NDggICAgICAgICAgICAgICAgLy8gJ3snICdwYXJlbnQnCiAgICAgfHwgbGsgPT0gMTA4NTc1ICAgICAgICAgICAgICAgIC8vICckJyAncHJlY2VkaW5nJwogICAgIHx8IGxrID09IDEwODU3NiAgICAgICAgICAgICAgICAvLyAnJScgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMDg4MjAgICAgICAgICAgICAgICAgLy8gJ3snICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTA5MDg3ICAgICAgICAgICAgICAgIC8vICckJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTA5MDg4ICAgICAgICAgICAgICAgIC8vICclJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTA5MzMyICAgICAgICAgICAgICAgIC8vICd7JyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEwNjIzICAgICAgICAgICAgICAgIC8vICckJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTA2MjQgICAgICAgICAgICAgICAgLy8gJyUnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMDg2OCAgICAgICAgICAgICAgICAvLyAneycgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gMTExNjQ3ICAgICAgICAgICAgICAgIC8vICckJyAncmVuYW1lJwogICAgIHx8IGxrID09IDExMTY0OCAgICAgICAgICAgICAgICAvLyAnJScgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTE4OTIgICAgICAgICAgICAgICAgLy8gJ3snICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTEyMTU5ICAgICAgICAgICAgICAgIC8vICckJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTIxNjAgICAgICAgICAgICAgICAgLy8gJyUnICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExMjQwNCAgICAgICAgICAgICAgICAvLyAneycgJ3JlcGxhY2UnCiAgICAgfHwgbGsgPT0gMTEyNjcxICAgICAgICAgICAgICAgIC8vICckJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExMjY3MiAgICAgICAgICAgICAgICAvLyAnJScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTI5MTYgICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTEzMTgzICAgICAgICAgICAgICAgIC8vICckJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExMzE4NCAgICAgICAgICAgICAgICAvLyAnJScgJ3JldHVybmluZycKICAgICB8fCBsayA9PSAxMTM0MjggICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTEzNjk1ICAgICAgICAgICAgICAgIC8vICckJyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExMzY5NiAgICAgICAgICAgICAgICAvLyAnJScgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTM5NDAgICAgICAgICAgICAgICAgLy8gJ3snICdyZXZhbGlkYXRpb24nCiAgICAgfHwgbGsgPT0gMTE0NzE5ICAgICAgICAgICAgICAgIC8vICckJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNDcyMCAgICAgICAgICAgICAgICAvLyAnJScgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTQ5NjQgICAgICAgICAgICAgICAgLy8gJ3snICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE1MjMxICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNTIzMiAgICAgICAgICAgICAgICAvLyAnJScgJ3NjaGVtYScKICAgICB8fCBsayA9PSAxMTU0NzYgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE1NzQzICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTU3NDQgICAgICAgICAgICAgICAgLy8gJyUnICdzY2hlbWEtYXR0cmlidXRlJwogICAgIHx8IGxrID09IDExNTk4OCAgICAgICAgICAgICAgICAvLyAneycgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE2MjU1ICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2MjU2ICAgICAgICAgICAgICAgIC8vICclJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2NTAwICAgICAgICAgICAgICAgIC8vICd7JyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2NzY3ICAgICAgICAgICAgICAgIC8vICckJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE2NzY4ICAgICAgICAgICAgICAgIC8vICclJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE3MDEyICAgICAgICAgICAgICAgIC8vICd7JyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE3Mjc5ICAgICAgICAgICAgICAgIC8vICckJyAnc2VsZicKICAgICB8fCBsayA9PSAxMTcyODAgICAgICAgICAgICAgICAgLy8gJyUnICdzZWxmJwogICAgIHx8IGxrID09IDExNzUyNCAgICAgICAgICAgICAgICAvLyAneycgJ3NlbGYnCiAgICAgfHwgbGsgPT0gMTE5ODM5ICAgICAgICAgICAgICAgIC8vICckJyAnc2xpZGluZycKICAgICB8fCBsayA9PSAxMTk4NDAgICAgICAgICAgICAgICAgLy8gJyUnICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMDA4NCAgICAgICAgICAgICAgICAvLyAneycgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIwMzUxICAgICAgICAgICAgICAgIC8vICckJyAnc29tZScKICAgICB8fCBsayA9PSAxMjAzNTIgICAgICAgICAgICAgICAgLy8gJyUnICdzb21lJwogICAgIHx8IGxrID09IDEyMDU5NiAgICAgICAgICAgICAgICAvLyAneycgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIwODYzICAgICAgICAgICAgICAgIC8vICckJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMDg2NCAgICAgICAgICAgICAgICAvLyAnJScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjExMDggICAgICAgICAgICAgICAgLy8gJ3snICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIxMzc1ICAgICAgICAgICAgICAgIC8vICckJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxMzc2ICAgICAgICAgICAgICAgIC8vICclJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxNjIwICAgICAgICAgICAgICAgIC8vICd7JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIyOTExICAgICAgICAgICAgICAgIC8vICckJyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyMjkxMiAgICAgICAgICAgICAgICAvLyAnJScgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjMxNTYgICAgICAgICAgICAgICAgLy8gJ3snICdzdHJpY3QnCiAgICAgfHwgbGsgPT0gMTIzOTM1ICAgICAgICAgICAgICAgIC8vICckJyAnc3RydWN0dXJlZC1pdGVtJwogICAgIHx8IGxrID09IDEyMzkzNiAgICAgICAgICAgICAgICAvLyAnJScgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjQxODAgICAgICAgICAgICAgICAgLy8gJ3snICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI0NDQ3ICAgICAgICAgICAgICAgIC8vICckJyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNDQ0OCAgICAgICAgICAgICAgICAvLyAnJScgJ3N3aXRjaCcKICAgICB8fCBsayA9PSAxMjQ2OTIgICAgICAgICAgICAgICAgLy8gJ3snICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI0OTU5ICAgICAgICAgICAgICAgIC8vICckJyAndGV4dCcKICAgICB8fCBsayA9PSAxMjQ5NjAgICAgICAgICAgICAgICAgLy8gJyUnICd0ZXh0JwogICAgIHx8IGxrID09IDEyNTIwNCAgICAgICAgICAgICAgICAvLyAneycgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI3MDA3ICAgICAgICAgICAgICAgIC8vICckJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3MDA4ICAgICAgICAgICAgICAgIC8vICclJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3MjUyICAgICAgICAgICAgICAgIC8vICd7JyAndG8nCiAgICAgfHwgbGsgPT0gMTI3NTE5ICAgICAgICAgICAgICAgIC8vICckJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI3NTIwICAgICAgICAgICAgICAgIC8vICclJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI3NzY0ICAgICAgICAgICAgICAgIC8vICd7JyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI4MDMxICAgICAgICAgICAgICAgIC8vICckJyAndHJ5JwogICAgIHx8IGxrID09IDEyODAzMiAgICAgICAgICAgICAgICAvLyAnJScgJ3RyeScKICAgICB8fCBsayA9PSAxMjgyNzYgICAgICAgICAgICAgICAgLy8gJ3snICd0cnknCiAgICAgfHwgbGsgPT0gMTI4NTQzICAgICAgICAgICAgICAgIC8vICckJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI4NTQ0ICAgICAgICAgICAgICAgIC8vICclJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI4Nzg4ICAgICAgICAgICAgICAgIC8vICd7JyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI5MDU1ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZScKICAgICB8fCBsayA9PSAxMjkwNTYgICAgICAgICAgICAgICAgLy8gJyUnICd0eXBlJwogICAgIHx8IGxrID09IDEyOTMwMCAgICAgICAgICAgICAgICAvLyAneycgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTI5NTY3ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMjk1NjggICAgICAgICAgICAgICAgLy8gJyUnICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEyOTgxMiAgICAgICAgICAgICAgICAvLyAneycgJ3R5cGVzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTMwMDc5ICAgICAgICAgICAgICAgIC8vICckJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMDgwICAgICAgICAgICAgICAgIC8vICclJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMzI0ICAgICAgICAgICAgICAgIC8vICd7JyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMxMTAzICAgICAgICAgICAgICAgIC8vICckJyAndW5vcmRlcmVkJwogICAgIHx8IGxrID09IDEzMTEwNCAgICAgICAgICAgICAgICAvLyAnJScgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzEzNDggICAgICAgICAgICAgICAgLy8gJ3snICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTMxNjE1ICAgICAgICAgICAgICAgIC8vICckJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMxNjE2ICAgICAgICAgICAgICAgIC8vICclJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMxODYwICAgICAgICAgICAgICAgIC8vICd7JyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMzMTUxICAgICAgICAgICAgICAgIC8vICckJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzMTUyICAgICAgICAgICAgICAgIC8vICclJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzMzk2ICAgICAgICAgICAgICAgIC8vICd7JyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzNjYzICAgICAgICAgICAgICAgIC8vICckJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTMzNjY0ICAgICAgICAgICAgICAgIC8vICclJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTMzOTA4ICAgICAgICAgICAgICAgIC8vICd7JyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM0MTc1ICAgICAgICAgICAgICAgIC8vICckJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0MTc2ICAgICAgICAgICAgICAgIC8vICclJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0NDIwICAgICAgICAgICAgICAgIC8vICd7JyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0Njg3ICAgICAgICAgICAgICAgIC8vICckJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzQ2ODggICAgICAgICAgICAgICAgLy8gJyUnICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzNDkzMiAgICAgICAgICAgICAgICAvLyAneycgJ3ZlcnNpb24nCiAgICAgfHwgbGsgPT0gMTM2MjIzICAgICAgICAgICAgICAgIC8vICckJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2MjI0ICAgICAgICAgICAgICAgIC8vICclJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2NDY4ICAgICAgICAgICAgICAgIC8vICd7JyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2NzM1ICAgICAgICAgICAgICAgIC8vICckJyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTM2NzM2ICAgICAgICAgICAgICAgIC8vICclJyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTM2OTgwICAgICAgICAgICAgICAgIC8vICd7JyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTM4MjcxICAgICAgICAgICAgICAgIC8vICckJyAnd2l0aCcKICAgICB8fCBsayA9PSAxMzgyNzIgICAgICAgICAgICAgICAgLy8gJyUnICd3aXRoJwogICAgIHx8IGxrID09IDEzODUxNiAgICAgICAgICAgICAgICAvLyAneycgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQwMzE5ICAgICAgICAgICAgICAgIC8vICckJyAneHF1ZXJ5JwogICAgIHx8IGxrID09IDE0MDMyMCAgICAgICAgICAgICAgICAvLyAnJScgJ3hxdWVyeScKICAgICB8fCBsayA9PSAxNDA1NjQgICAgICAgICAgICAgICAgLy8gJ3snICd4cXVlcnknCiAgICAgfHwgbGsgPT0gMTQxNTg4ICAgICAgICAgICAgICAgIC8vICd7JyAneycKICAgICB8fCBsayA9PSAxNDI2MTIgICAgICAgICAgICAgICAgLy8gJ3snICd7fCcKICAgICB8fCBsayA9PSAxNDQ2NjApICAgICAgICAgICAgICAgLy8gJ3snICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDcsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0FwcGx5U3RhdGVtZW50KCk7CiAgICAgICAgICBsayA9IC0xOwogICAgICAgIH0KICAgICAgICBjYXRjaCAocDFBKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgdHJ5X0Fzc2lnblN0YXRlbWVudCgpOwogICAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAyQSkKICAgICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgdHJ5X0Jsb2NrU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgbGsgPSAtMzsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAocDNBKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgIHRyeV9WYXJEZWNsU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgICBsayA9IC0xMjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2ggKHAxMkEpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGsgPSAtMTM7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDcsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0yOgogICAgICBwYXJzZV9Bc3NpZ25TdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBwYXJzZV9CbG9ja1N0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgOTAxOTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnbG9vcCcKICAgICAgcGFyc2VfQnJlYWtTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDkwMjE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJ2xvb3AnCiAgICAgIHBhcnNlX0NvbnRpbnVlU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTMyODQ6ICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJ3JldHVybmluZycKICAgICAgcGFyc2VfRXhpdFN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTYwMDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJyQnCiAgICBjYXNlIDE2MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICckJwogICAgY2FzZSAxMTY5MTA6ICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnc2NvcmUnCiAgICBjYXNlIDExOTk0NTogICAgICAgICAgICAgICAgICAgIC8vICdmb3InICdzbGlkaW5nJwogICAgY2FzZSAxMjg2NDk6ICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAndHVtYmxpbmcnCiAgICAgIHBhcnNlX0ZMV09SU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU2MDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcoJwogICAgICBwYXJzZV9JZlN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTc2NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcgJygnCiAgICAgIHBhcnNlX1N3aXRjaFN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQxNTYyOiAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJ3snCiAgICAgIHBhcnNlX1RyeUNhdGNoU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY2MTogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJygnCiAgICAgIHBhcnNlX1R5cGVzd2l0Y2hTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMjoKICAgIGNhc2UgMTYxMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJyAnJCcKICAgICAgcGFyc2VfVmFyRGVjbFN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgLTEzOgogICAgICBwYXJzZV9XaGlsZVN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgNTM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgIHBhcnNlX1ZvaWRTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9BcHBseVN0YXRlbWVudCgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3RhdGVtZW50KCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgICAgbG9va2FoZWFkMlcoMTg4KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBsb29rYWhlYWQyVygxOTUpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKicgfCAnKycgfCAnLScgfCAnLycgfCAnLy8nIHwgJzsnIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICAgIGxvb2thaGVhZDJXKDE5Mik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfAogICAgICBicmVhazsKICAgIGNhc2UgMjUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgbG9va2FoZWFkMlcoMTg5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICAgIGxvb2thaGVhZDJXKDE4Nik7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfAogICAgICBicmVhazsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI3Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBjYXNlIDMyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICclJwogICAgICBsb29rYWhlYWQyVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDEwMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgICAgbG9va2FoZWFkMlcoMTg3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwgJysnIHwgJy0nIHwgJy8nIHwgJy8vJyB8ICc7JyB8ICc8JyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgY2FzZSAyNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICAgIGxvb2thaGVhZDJXKDE4NCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcqJyB8ICcrJyB8ICctJyB8ICcvJyB8ICcvLycgfCAnOycgfCAnPCcgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMjgzNiAgICAgICAgICAgICAgICAgIC8vICd7JyBXaWxkY2FyZAogICAgIHx8IGxrID09IDMxMDMgICAgICAgICAgICAgICAgICAvLyAnJCcgRVFOYW1lXlRva2VuCiAgICAgfHwgbGsgPT0gMzEwNCAgICAgICAgICAgICAgICAgIC8vICclJyBFUU5hbWVeVG9rZW4KICAgICB8fCBsayA9PSAzMzQ4ICAgICAgICAgICAgICAgICAgLy8gJ3snIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDQzNzIgICAgICAgICAgICAgICAgICAvLyAneycgSW50ZWdlckxpdGVyYWwKICAgICB8fCBsayA9PSA0ODg0ICAgICAgICAgICAgICAgICAgLy8gJ3snIERlY2ltYWxMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTM5NiAgICAgICAgICAgICAgICAgIC8vICd7JyBEb3VibGVMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTkwOCAgICAgICAgICAgICAgICAgIC8vICd7JyBTdHJpbmdMaXRlcmFsCiAgICAgfHwgbGsgPT0gMTYxNDggICAgICAgICAgICAgICAgIC8vICd7JyAnJCcKICAgICB8fCBsayA9PSAxNjY2MCAgICAgICAgICAgICAgICAgLy8gJ3snICclJwogICAgIHx8IGxrID09IDE3Njc1ICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnICcoJwogICAgIHx8IGxrID09IDE3Njg0ICAgICAgICAgICAgICAgICAvLyAneycgJygnCiAgICAgfHwgbGsgPT0gMTgxOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnKCMnCiAgICAgfHwgbGsgPT0gMjA3NTYgICAgICAgICAgICAgICAgIC8vICd7JyAnKycKICAgICB8fCBsayA9PSAyMTc4MCAgICAgICAgICAgICAgICAgLy8gJ3snICctJwogICAgIHx8IGxrID09IDIyODA0ICAgICAgICAgICAgICAgICAvLyAneycgJy4nCiAgICAgfHwgbGsgPT0gMjMzMTYgICAgICAgICAgICAgICAgIC8vICd7JyAnLi4nCiAgICAgfHwgbGsgPT0gMjM4MjggICAgICAgICAgICAgICAgIC8vICd7JyAnLycKICAgICB8fCBsayA9PSAyNDM0MCAgICAgICAgICAgICAgICAgLy8gJ3snICcvLycKICAgICB8fCBsayA9PSAyNzQxMiAgICAgICAgICAgICAgICAgLy8gJ3snICc7JwogICAgIHx8IGxrID09IDI3OTI0ICAgICAgICAgICAgICAgICAvLyAneycgJzwnCiAgICAgfHwgbGsgPT0gMjg0MzYgICAgICAgICAgICAgICAgIC8vICd7JyAnPCEtLScKICAgICB8fCBsayA9PSAzMDQ4NCAgICAgICAgICAgICAgICAgLy8gJ3snICc8PycKICAgICB8fCBsayA9PSAzNDA2OCAgICAgICAgICAgICAgICAgLy8gJ3snICdAJwogICAgIHx8IGxrID09IDM1MDkyICAgICAgICAgICAgICAgICAvLyAneycgJ1snCiAgICAgfHwgbGsgPT0gMzU4NzEgICAgICAgICAgICAgICAgIC8vICckJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzU4NzIgICAgICAgICAgICAgICAgIC8vICclJyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzYxMTYgICAgICAgICAgICAgICAgIC8vICd7JyAnYWZ0ZXInCiAgICAgfHwgbGsgPT0gMzY4OTUgICAgICAgICAgICAgICAgIC8vICckJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzY4OTYgICAgICAgICAgICAgICAgIC8vICclJyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzcxNDAgICAgICAgICAgICAgICAgIC8vICd7JyAnYWxsb3dpbmcnCiAgICAgfHwgbGsgPT0gMzc0MDcgICAgICAgICAgICAgICAgIC8vICckJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzc0MDggICAgICAgICAgICAgICAgIC8vICclJyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzc2NTIgICAgICAgICAgICAgICAgIC8vICd7JyAnYW5jZXN0b3InCiAgICAgfHwgbGsgPT0gMzc5MTkgICAgICAgICAgICAgICAgIC8vICckJyAnYW5jZXN0b3Itb3Itc2VsZicKICAgICB8fCBsayA9PSAzNzkyMCAgICAgICAgICAgICAgICAgLy8gJyUnICdhbmNlc3Rvci1vci1zZWxmJwogICAgIHx8IGxrID09IDM4MTY0ICAgICAgICAgICAgICAgICAvLyAneycgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzg0MzEgICAgICAgICAgICAgICAgIC8vICckJyAnYW5kJwogICAgIHx8IGxrID09IDM4NDMyICAgICAgICAgICAgICAgICAvLyAnJScgJ2FuZCcKICAgICB8fCBsayA9PSAzODY3NiAgICAgICAgICAgICAgICAgLy8gJ3snICdhbmQnCiAgICAgfHwgbGsgPT0gMzk0NTUgICAgICAgICAgICAgICAgIC8vICckJyAnYXBwZW5kJwogICAgIHx8IGxrID09IDM5NDU2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2FwcGVuZCcKICAgICB8fCBsayA9PSAzOTcwMCAgICAgICAgICAgICAgICAgLy8gJ3snICdhcHBlbmQnCiAgICAgfHwgbGsgPT0gMzk5NjcgICAgICAgICAgICAgICAgIC8vICckJyAnYXJyYXknCiAgICAgfHwgbGsgPT0gMzk5NjggICAgICAgICAgICAgICAgIC8vICclJyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDAyMTIgICAgICAgICAgICAgICAgIC8vICd7JyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDA0NzkgICAgICAgICAgICAgICAgIC8vICckJyAnYXMnCiAgICAgfHwgbGsgPT0gNDA0ODAgICAgICAgICAgICAgICAgIC8vICclJyAnYXMnCiAgICAgfHwgbGsgPT0gNDA3MjQgICAgICAgICAgICAgICAgIC8vICd7JyAnYXMnCiAgICAgfHwgbGsgPT0gNDA5OTEgICAgICAgICAgICAgICAgIC8vICckJyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQwOTkyICAgICAgICAgICAgICAgICAvLyAnJScgJ2FzY2VuZGluZycKICAgICB8fCBsayA9PSA0MTIzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE1MDMgICAgICAgICAgICAgICAgIC8vICckJyAnYXQnCiAgICAgfHwgbGsgPT0gNDE1MDQgICAgICAgICAgICAgICAgIC8vICclJyAnYXQnCiAgICAgfHwgbGsgPT0gNDE3NDggICAgICAgICAgICAgICAgIC8vICd7JyAnYXQnCiAgICAgfHwgbGsgPT0gNDIwMTUgICAgICAgICAgICAgICAgIC8vICckJyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQyMDE2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2F0dHJpYnV0ZScKICAgICB8fCBsayA9PSA0MjI2MCAgICAgICAgICAgICAgICAgLy8gJ3snICdhdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gNDI1MjcgICAgICAgICAgICAgICAgIC8vICckJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDI1MjggICAgICAgICAgICAgICAgIC8vICclJyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDI3NzIgICAgICAgICAgICAgICAgIC8vICd7JyAnYmFzZS11cmknCiAgICAgfHwgbGsgPT0gNDMwMzkgICAgICAgICAgICAgICAgIC8vICckJyAnYmVmb3JlJwogICAgIHx8IGxrID09IDQzMDQwICAgICAgICAgICAgICAgICAvLyAnJScgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0MzI4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM1NTEgICAgICAgICAgICAgICAgIC8vICckJyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDM1NTIgICAgICAgICAgICAgICAgIC8vICclJyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDM3OTYgICAgICAgICAgICAgICAgIC8vICd7JyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDQwNjMgICAgICAgICAgICAgICAgIC8vICckJyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDQwNjQgICAgICAgICAgICAgICAgIC8vICclJyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDQzMDggICAgICAgICAgICAgICAgIC8vICd7JyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDUwODcgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzZScKICAgICB8fCBsayA9PSA0NTA4OCAgICAgICAgICAgICAgICAgLy8gJyUnICdjYXNlJwogICAgIHx8IGxrID09IDQ1MzMyICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc2UnCiAgICAgfHwgbGsgPT0gNDU1OTkgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzdCcKICAgICB8fCBsayA9PSA0NTYwMCAgICAgICAgICAgICAgICAgLy8gJyUnICdjYXN0JwogICAgIHx8IGxrID09IDQ1ODQ0ICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYxMTEgICAgICAgICAgICAgICAgIC8vICckJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDYxMTIgICAgICAgICAgICAgICAgIC8vICclJyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDYzNTYgICAgICAgICAgICAgICAgIC8vICd7JyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY2MjMgICAgICAgICAgICAgICAgIC8vICckJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDY2MjQgICAgICAgICAgICAgICAgIC8vICclJyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDY4NjggICAgICAgICAgICAgICAgIC8vICd7JyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDc2NDcgICAgICAgICAgICAgICAgIC8vICckJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDc2NDggICAgICAgICAgICAgICAgIC8vICclJyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDc4OTIgICAgICAgICAgICAgICAgIC8vICd7JyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDgxNTkgICAgICAgICAgICAgICAgIC8vICckJyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ4MTYwICAgICAgICAgICAgICAgICAvLyAnJScgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0ODQwNCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb2xsYXRpb24nCiAgICAgfHwgbGsgPT0gNDkxODMgICAgICAgICAgICAgICAgIC8vICckJyAnY29tbWVudCcKICAgICB8fCBsayA9PSA0OTE4NCAgICAgICAgICAgICAgICAgLy8gJyUnICdjb21tZW50JwogICAgIHx8IGxrID09IDQ5NDI4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNDk2OTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA0OTY5NiAgICAgICAgICAgICAgICAgLy8gJyUnICdjb25zdHJhaW50JwogICAgIHx8IGxrID09IDQ5OTQwICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnN0cmFpbnQnCiAgICAgfHwgbGsgPT0gNTAyMDcgICAgICAgICAgICAgICAgIC8vICckJyAnY29uc3RydWN0aW9uJwogICAgIHx8IGxrID09IDUwMjA4ICAgICAgICAgICAgICAgICAvLyAnJScgJ2NvbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSA1MDQ1MiAgICAgICAgICAgICAgICAgLy8gJ3snICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTE3NDMgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MTc0NCAgICAgICAgICAgICAgICAgLy8gJyUnICdjb250ZXh0JwogICAgIHx8IGxrID09IDUxOTg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnRleHQnCiAgICAgfHwgbGsgPT0gNTIyNTUgICAgICAgICAgICAgICAgIC8vICckJyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTIyNTYgICAgICAgICAgICAgICAgIC8vICclJyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTI1MDAgICAgICAgICAgICAgICAgIC8vICd7JyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTI3NjcgICAgICAgICAgICAgICAgIC8vICckJyAnY29weScKICAgICB8fCBsayA9PSA1Mjc2OCAgICAgICAgICAgICAgICAgLy8gJyUnICdjb3B5JwogICAgIHx8IGxrID09IDUzMDEyICAgICAgICAgICAgICAgICAvLyAneycgJ2NvcHknCiAgICAgfHwgbGsgPT0gNTMyNzkgICAgICAgICAgICAgICAgIC8vICckJyAnY29weS1uYW1lc3BhY2VzJwogICAgIHx8IGxrID09IDUzMjgwICAgICAgICAgICAgICAgICAvLyAnJScgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1MzUyNCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgfHwgbGsgPT0gNTM3OTEgICAgICAgICAgICAgICAgIC8vICckJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTM3OTIgICAgICAgICAgICAgICAgIC8vICclJyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQwMzYgICAgICAgICAgICAgICAgIC8vICd7JyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQzMDMgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTQzMDQgICAgICAgICAgICAgICAgIC8vICclJyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTQ1NDggICAgICAgICAgICAgICAgIC8vICd7JyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTUzMjcgICAgICAgICAgICAgICAgIC8vICckJyAnZGVjbGFyZScKICAgICB8fCBsayA9PSA1NTMyOCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU1NTcyICAgICAgICAgICAgICAgICAvLyAneycgJ2RlY2xhcmUnCiAgICAgfHwgbGsgPT0gNTU4MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZGVmYXVsdCcKICAgICB8fCBsayA9PSA1NTg0MCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2MDg0ICAgICAgICAgICAgICAgICAvLyAneycgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTYzNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU2MzUyICAgICAgICAgICAgICAgICAvLyAnJScgJ2RlbGV0ZScKICAgICB8fCBsayA9PSA1NjU5NiAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWxldGUnCiAgICAgfHwgbGsgPT0gNTY4NjMgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGFudCcKICAgICB8fCBsayA9PSA1Njg2NCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZXNjZW5kYW50JwogICAgIHx8IGxrID09IDU3MTA4ICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTczNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU3Mzc2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICB8fCBsayA9PSA1NzYyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gNTc4ODcgICAgICAgICAgICAgICAgIC8vICckJyAnZGVzY2VuZGluZycKICAgICB8fCBsayA9PSA1Nzg4OCAgICAgICAgICAgICAgICAgLy8gJyUnICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDU4MTMyICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjA0NDcgICAgICAgICAgICAgICAgIC8vICckJyAnZGl2JwogICAgIHx8IGxrID09IDYwNDQ4ICAgICAgICAgICAgICAgICAvLyAnJScgJ2RpdicKICAgICB8fCBsayA9PSA2MDY5MiAgICAgICAgICAgICAgICAgLy8gJ3snICdkaXYnCiAgICAgfHwgbGsgPT0gNjA5NTkgICAgICAgICAgICAgICAgIC8vICckJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjA5NjAgICAgICAgICAgICAgICAgIC8vICclJyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjEyMDQgICAgICAgICAgICAgICAgIC8vICd7JyAnZG9jdW1lbnQnCiAgICAgfHwgbGsgPT0gNjE0NzEgICAgICAgICAgICAgICAgIC8vICckJyAnZG9jdW1lbnQtbm9kZScKICAgICB8fCBsayA9PSA2MTQ3MiAgICAgICAgICAgICAgICAgLy8gJyUnICdkb2N1bWVudC1ub2RlJwogICAgIHx8IGxrID09IDYxNzE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjE5ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2MTk4NCAgICAgICAgICAgICAgICAgLy8gJyUnICdlbGVtZW50JwogICAgIHx8IGxrID09IDYyMjI4ICAgICAgICAgICAgICAgICAvLyAneycgJ2VsZW1lbnQnCiAgICAgfHwgbGsgPT0gNjI0OTUgICAgICAgICAgICAgICAgIC8vICckJyAnZWxzZScKICAgICB8fCBsayA9PSA2MjQ5NiAgICAgICAgICAgICAgICAgLy8gJyUnICdlbHNlJwogICAgIHx8IGxrID09IDYyNzQwICAgICAgICAgICAgICAgICAvLyAneycgJ2Vsc2UnCiAgICAgfHwgbGsgPT0gNjMwMDcgICAgICAgICAgICAgICAgIC8vICckJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjMwMDggICAgICAgICAgICAgICAgIC8vICclJyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjMyNTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZW1wdHknCiAgICAgfHwgbGsgPT0gNjM1MTkgICAgICAgICAgICAgICAgIC8vICckJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjM1MjAgICAgICAgICAgICAgICAgIC8vICclJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjM3NjQgICAgICAgICAgICAgICAgIC8vICd7JyAnZW1wdHktc2VxdWVuY2UnCiAgICAgfHwgbGsgPT0gNjQwMzEgICAgICAgICAgICAgICAgIC8vICckJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjQwMzIgICAgICAgICAgICAgICAgIC8vICclJyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjQyNzYgICAgICAgICAgICAgICAgIC8vICd7JyAnZW5jb2RpbmcnCiAgICAgfHwgbGsgPT0gNjQ1NDMgICAgICAgICAgICAgICAgIC8vICckJyAnZW5kJwogICAgIHx8IGxrID09IDY0NTQ0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2VuZCcKICAgICB8fCBsayA9PSA2NDc4OCAgICAgICAgICAgICAgICAgLy8gJ3snICdlbmQnCiAgICAgfHwgbGsgPT0gNjU1NjcgICAgICAgICAgICAgICAgIC8vICckJyAnZXEnCiAgICAgfHwgbGsgPT0gNjU1NjggICAgICAgICAgICAgICAgIC8vICclJyAnZXEnCiAgICAgfHwgbGsgPT0gNjU4MTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZXEnCiAgICAgfHwgbGsgPT0gNjYwNzkgICAgICAgICAgICAgICAgIC8vICckJyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjYwODAgICAgICAgICAgICAgICAgIC8vICclJyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjYzMjQgICAgICAgICAgICAgICAgIC8vICd7JyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjcxMDMgICAgICAgICAgICAgICAgIC8vICckJyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3MTA0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2V4Y2VwdCcKICAgICB8fCBsayA9PSA2NzM0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc2MTUgICAgICAgICAgICAgICAgIC8vICckJyAnZXhpdCcKICAgICB8fCBsayA9PSA2NzYxNiAgICAgICAgICAgICAgICAgLy8gJyUnICdleGl0JwogICAgIHx8IGxrID09IDY3ODYwICAgICAgICAgICAgICAgICAvLyAneycgJ2V4aXQnCiAgICAgfHwgbGsgPT0gNjgxMjcgICAgICAgICAgICAgICAgIC8vICckJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjgxMjggICAgICAgICAgICAgICAgIC8vICclJyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjgzNzIgICAgICAgICAgICAgICAgIC8vICd7JyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjg2MzkgICAgICAgICAgICAgICAgIC8vICckJyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjg2NDAgICAgICAgICAgICAgICAgIC8vICclJyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjg4ODQgICAgICAgICAgICAgICAgIC8vICd7JyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjkxNTEgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nJwogICAgIHx8IGxrID09IDY5MTUyICAgICAgICAgICAgICAgICAvLyAnJScgJ2ZvbGxvd2luZycKICAgICB8fCBsayA9PSA2OTM5NiAgICAgICAgICAgICAgICAgLy8gJ3snICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNjk2NjMgICAgICAgICAgICAgICAgIC8vICckJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNjk2NjQgICAgICAgICAgICAgICAgIC8vICclJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNjk5MDggICAgICAgICAgICAgICAgIC8vICd7JyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzAxNzUgICAgICAgICAgICAgICAgIC8vICckJyAnZm9yJwogICAgIHx8IGxrID09IDcwMTc2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ZvcicKICAgICB8fCBsayA9PSA3MDQyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdmb3InCiAgICAgfHwgbGsgPT0gNzIyMjMgICAgICAgICAgICAgICAgIC8vICckJyAnZnQtb3B0aW9uJwogICAgIHx8IGxrID09IDcyMjI0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2Z0LW9wdGlvbicKICAgICB8fCBsayA9PSA3MjQ2OCAgICAgICAgICAgICAgICAgLy8gJ3snICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzQyNzEgICAgICAgICAgICAgICAgIC8vICckJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQyNzIgICAgICAgICAgICAgICAgIC8vICclJyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQ1MTYgICAgICAgICAgICAgICAgIC8vICd7JyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzQ3ODMgICAgICAgICAgICAgICAgIC8vICckJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzQ3ODQgICAgICAgICAgICAgICAgIC8vICclJyAnZ2UnCiAgICAgfHwgbGsgPT0gNzUwMjggICAgICAgICAgICAgICAgIC8vICd7JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzU4MDcgICAgICAgICAgICAgICAgIC8vICckJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzU4MDggICAgICAgICAgICAgICAgIC8vICclJyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzYwNTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzY4MzEgICAgICAgICAgICAgICAgIC8vICckJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzY4MzIgICAgICAgICAgICAgICAgIC8vICclJyAnZ3QnCiAgICAgfHwgbGsgPT0gNzcwNzYgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzczNDMgICAgICAgICAgICAgICAgIC8vICckJyAnaWRpdicKICAgICB8fCBsayA9PSA3NzM0NCAgICAgICAgICAgICAgICAgLy8gJyUnICdpZGl2JwogICAgIHx8IGxrID09IDc3NTg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2lkaXYnCiAgICAgfHwgbGsgPT0gNzc4NTUgICAgICAgICAgICAgICAgIC8vICckJyAnaWYnCiAgICAgfHwgbGsgPT0gNzc4NTYgICAgICAgICAgICAgICAgIC8vICclJyAnaWYnCiAgICAgfHwgbGsgPT0gNzgxMDAgICAgICAgICAgICAgICAgIC8vICd7JyAnaWYnCiAgICAgfHwgbGsgPT0gNzgzNjcgICAgICAgICAgICAgICAgIC8vICckJyAnaW1wb3J0JwogICAgIHx8IGxrID09IDc4MzY4ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ltcG9ydCcKICAgICB8fCBsayA9PSA3ODYxMiAgICAgICAgICAgICAgICAgLy8gJ3snICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gNzg4NzkgICAgICAgICAgICAgICAgIC8vICckJyAnaW4nCiAgICAgfHwgbGsgPT0gNzg4ODAgICAgICAgICAgICAgICAgIC8vICclJyAnaW4nCiAgICAgfHwgbGsgPT0gNzkxMjQgICAgICAgICAgICAgICAgIC8vICd7JyAnaW4nCiAgICAgfHwgbGsgPT0gNzkzOTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gNzkzOTIgICAgICAgICAgICAgICAgIC8vICclJyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gNzk2MzYgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODE0MzkgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgxNDQwICAgICAgICAgICAgICAgICAvLyAnJScgJ2luc2VydCcKICAgICB8fCBsayA9PSA4MTY4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnNlcnQnCiAgICAgfHwgbGsgPT0gODE5NTEgICAgICAgICAgICAgICAgIC8vICckJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODE5NTIgICAgICAgICAgICAgICAgIC8vICclJyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODIxOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODI0NjMgICAgICAgICAgICAgICAgIC8vICckJyAnaW50ZWdyaXR5JwogICAgIHx8IGxrID09IDgyNDY0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4MjcwOCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlZ3JpdHknCiAgICAgfHwgbGsgPT0gODI5NzUgICAgICAgICAgICAgICAgIC8vICckJyAnaW50ZXJzZWN0JwogICAgIHx8IGxrID09IDgyOTc2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4MzIyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODM0ODcgICAgICAgICAgICAgICAgIC8vICckJyAnaW50bycKICAgICB8fCBsayA9PSA4MzQ4OCAgICAgICAgICAgICAgICAgLy8gJyUnICdpbnRvJwogICAgIHx8IGxrID09IDgzNzMyICAgICAgICAgICAgICAgICAvLyAneycgJ2ludG8nCiAgICAgfHwgbGsgPT0gODM5OTkgICAgICAgICAgICAgICAgIC8vICckJyAnaXMnCiAgICAgfHwgbGsgPT0gODQwMDAgICAgICAgICAgICAgICAgIC8vICclJyAnaXMnCiAgICAgfHwgbGsgPT0gODQyNDQgICAgICAgICAgICAgICAgIC8vICd7JyAnaXMnCiAgICAgfHwgbGsgPT0gODQ1MTEgICAgICAgICAgICAgICAgIC8vICckJyAnaXRlbScKICAgICB8fCBsayA9PSA4NDUxMiAgICAgICAgICAgICAgICAgLy8gJyUnICdpdGVtJwogICAgIHx8IGxrID09IDg0NzU2ICAgICAgICAgICAgICAgICAvLyAneycgJ2l0ZW0nCiAgICAgfHwgbGsgPT0gODUwMjMgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbicKICAgICB8fCBsayA9PSA4NTAyNCAgICAgICAgICAgICAgICAgLy8gJyUnICdqc29uJwogICAgIHx8IGxrID09IDg1MjY4ICAgICAgICAgICAgICAgICAvLyAneycgJ2pzb24nCiAgICAgfHwgbGsgPT0gODU1MzUgICAgICAgICAgICAgICAgIC8vICckJyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg1NTM2ICAgICAgICAgICAgICAgICAvLyAnJScgJ2pzb24taXRlbScKICAgICB8fCBsayA9PSA4NTc4MCAgICAgICAgICAgICAgICAgLy8gJ3snICdqc29uLWl0ZW0nCiAgICAgfHwgbGsgPT0gODcwNzEgICAgICAgICAgICAgICAgIC8vICckJyAnbGFzdCcKICAgICB8fCBsayA9PSA4NzA3MiAgICAgICAgICAgICAgICAgLy8gJyUnICdsYXN0JwogICAgIHx8IGxrID09IDg3MzE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2xhc3QnCiAgICAgfHwgbGsgPT0gODc1ODMgICAgICAgICAgICAgICAgIC8vICckJyAnbGF4JwogICAgIHx8IGxrID09IDg3NTg0ICAgICAgICAgICAgICAgICAvLyAnJScgJ2xheCcKICAgICB8fCBsayA9PSA4NzgyOCAgICAgICAgICAgICAgICAgLy8gJ3snICdsYXgnCiAgICAgfHwgbGsgPT0gODgwOTUgICAgICAgICAgICAgICAgIC8vICckJyAnbGUnCiAgICAgfHwgbGsgPT0gODgwOTYgICAgICAgICAgICAgICAgIC8vICclJyAnbGUnCiAgICAgfHwgbGsgPT0gODgzNDAgICAgICAgICAgICAgICAgIC8vICd7JyAnbGUnCiAgICAgfHwgbGsgPT0gODkxMTkgICAgICAgICAgICAgICAgIC8vICckJyAnbGV0JwogICAgIHx8IGxrID09IDg5MTIwICAgICAgICAgICAgICAgICAvLyAnJScgJ2xldCcKICAgICB8fCBsayA9PSA4OTM2NCAgICAgICAgICAgICAgICAgLy8gJ3snICdsZXQnCiAgICAgfHwgbGsgPT0gOTAxNDMgICAgICAgICAgICAgICAgIC8vICckJyAnbG9vcCcKICAgICB8fCBsayA9PSA5MDE0NCAgICAgICAgICAgICAgICAgLy8gJyUnICdsb29wJwogICAgIHx8IGxrID09IDkwMzg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTExNjcgICAgICAgICAgICAgICAgIC8vICckJyAnbHQnCiAgICAgfHwgbGsgPT0gOTExNjggICAgICAgICAgICAgICAgIC8vICclJyAnbHQnCiAgICAgfHwgbGsgPT0gOTE0MTIgICAgICAgICAgICAgICAgIC8vICd7JyAnbHQnCiAgICAgfHwgbGsgPT0gOTIxOTEgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kJwogICAgIHx8IGxrID09IDkyMTkyICAgICAgICAgICAgICAgICAvLyAnJScgJ21vZCcKICAgICB8fCBsayA9PSA5MjQzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2QnCiAgICAgfHwgbGsgPT0gOTI3MDMgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kaWZ5JwogICAgIHx8IGxrID09IDkyNzA0ICAgICAgICAgICAgICAgICAvLyAnJScgJ21vZGlmeScKICAgICB8fCBsayA9PSA5Mjk0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTMyMTUgICAgICAgICAgICAgICAgIC8vICckJyAnbW9kdWxlJwogICAgIHx8IGxrID09IDkzMjE2ICAgICAgICAgICAgICAgICAvLyAnJScgJ21vZHVsZScKICAgICB8fCBsayA9PSA5MzQ2MCAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTQyMzkgICAgICAgICAgICAgICAgIC8vICckJyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk0MjQwICAgICAgICAgICAgICAgICAvLyAnJScgJ25hbWVzcGFjZScKICAgICB8fCBsayA9PSA5NDQ4NCAgICAgICAgICAgICAgICAgLy8gJ3snICduYW1lc3BhY2UnCiAgICAgfHwgbGsgPT0gOTQ3NTEgICAgICAgICAgICAgICAgIC8vICckJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTQ3NTIgICAgICAgICAgICAgICAgIC8vICclJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTQ5OTYgICAgICAgICAgICAgICAgIC8vICd7JyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgfHwgbGsgPT0gOTUyNjMgICAgICAgICAgICAgICAgIC8vICckJyAnbmUnCiAgICAgfHwgbGsgPT0gOTUyNjQgICAgICAgICAgICAgICAgIC8vICclJyAnbmUnCiAgICAgfHwgbGsgPT0gOTU1MDggICAgICAgICAgICAgICAgIC8vICd7JyAnbmUnCiAgICAgfHwgbGsgPT0gOTc4MjMgICAgICAgICAgICAgICAgIC8vICckJyAnbm9kZScKICAgICB8fCBsayA9PSA5NzgyNCAgICAgICAgICAgICAgICAgLy8gJyUnICdub2RlJwogICAgIHx8IGxrID09IDk4MDY4ICAgICAgICAgICAgICAgICAvLyAneycgJ25vZGUnCiAgICAgfHwgbGsgPT0gOTgzMzUgICAgICAgICAgICAgICAgIC8vICckJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTgzMzYgICAgICAgICAgICAgICAgIC8vICclJyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTg1ODAgICAgICAgICAgICAgICAgIC8vICd7JyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTkzNTkgICAgICAgICAgICAgICAgIC8vICckJyAnb2JqZWN0JwogICAgIHx8IGxrID09IDk5MzYwICAgICAgICAgICAgICAgICAvLyAnJScgJ29iamVjdCcKICAgICB8fCBsayA9PSA5OTYwNCAgICAgICAgICAgICAgICAgLy8gJ3snICdvYmplY3QnCiAgICAgfHwgbGsgPT0gMTAxNDA3ICAgICAgICAgICAgICAgIC8vICckJyAnb25seScKICAgICB8fCBsayA9PSAxMDE0MDggICAgICAgICAgICAgICAgLy8gJyUnICdvbmx5JwogICAgIHx8IGxrID09IDEwMTY1MiAgICAgICAgICAgICAgICAvLyAneycgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAxOTE5ICAgICAgICAgICAgICAgIC8vICckJyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwMTkyMCAgICAgICAgICAgICAgICAvLyAnJScgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDIxNjQgICAgICAgICAgICAgICAgLy8gJ3snICdvcHRpb24nCiAgICAgfHwgbGsgPT0gMTAyNDMxICAgICAgICAgICAgICAgIC8vICckJyAnb3InCiAgICAgfHwgbGsgPT0gMTAyNDMyICAgICAgICAgICAgICAgIC8vICclJyAnb3InCiAgICAgfHwgbGsgPT0gMTAyNjc2ICAgICAgICAgICAgICAgIC8vICd7JyAnb3InCiAgICAgfHwgbGsgPT0gMTAyOTQzICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAyOTQ0ICAgICAgICAgICAgICAgIC8vICclJyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAzMTg4ICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXInCiAgICAgfHwgbGsgPT0gMTAzNDU1ICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXJlZCcKICAgICB8fCBsayA9PSAxMDM0NTYgICAgICAgICAgICAgICAgLy8gJyUnICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwMzcwMCAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTAzOTY3ICAgICAgICAgICAgICAgIC8vICckJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTAzOTY4ICAgICAgICAgICAgICAgIC8vICclJyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA0MjEyICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA1NTAzICAgICAgICAgICAgICAgIC8vICckJyAncGFyZW50JwogICAgIHx8IGxrID09IDEwNTUwNCAgICAgICAgICAgICAgICAvLyAnJScgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMDU3NDggICAgICAgICAgICAgICAgLy8gJ3snICdwYXJlbnQnCiAgICAgfHwgbGsgPT0gMTA4NTc1ICAgICAgICAgICAgICAgIC8vICckJyAncHJlY2VkaW5nJwogICAgIHx8IGxrID09IDEwODU3NiAgICAgICAgICAgICAgICAvLyAnJScgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMDg4MjAgICAgICAgICAgICAgICAgLy8gJ3snICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTA5MDg3ICAgICAgICAgICAgICAgIC8vICckJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTA5MDg4ICAgICAgICAgICAgICAgIC8vICclJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTA5MzMyICAgICAgICAgICAgICAgIC8vICd7JyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEwNjIzICAgICAgICAgICAgICAgIC8vICckJyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTA2MjQgICAgICAgICAgICAgICAgLy8gJyUnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMDg2OCAgICAgICAgICAgICAgICAvLyAneycgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gMTExNjQ3ICAgICAgICAgICAgICAgIC8vICckJyAncmVuYW1lJwogICAgIHx8IGxrID09IDExMTY0OCAgICAgICAgICAgICAgICAvLyAnJScgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTE4OTIgICAgICAgICAgICAgICAgLy8gJ3snICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTEyMTU5ICAgICAgICAgICAgICAgIC8vICckJyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTIxNjAgICAgICAgICAgICAgICAgLy8gJyUnICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExMjQwNCAgICAgICAgICAgICAgICAvLyAneycgJ3JlcGxhY2UnCiAgICAgfHwgbGsgPT0gMTEyNjcxICAgICAgICAgICAgICAgIC8vICckJyAncmV0dXJuJwogICAgIHx8IGxrID09IDExMjY3MiAgICAgICAgICAgICAgICAvLyAnJScgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTI5MTYgICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTEzMTgzICAgICAgICAgICAgICAgIC8vICckJyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExMzE4NCAgICAgICAgICAgICAgICAvLyAnJScgJ3JldHVybmluZycKICAgICB8fCBsayA9PSAxMTM0MjggICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTEzNjk1ICAgICAgICAgICAgICAgIC8vICckJyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExMzY5NiAgICAgICAgICAgICAgICAvLyAnJScgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTM5NDAgICAgICAgICAgICAgICAgLy8gJ3snICdyZXZhbGlkYXRpb24nCiAgICAgfHwgbGsgPT0gMTE0NzE5ICAgICAgICAgICAgICAgIC8vICckJyAnc2F0aXNmaWVzJwogICAgIHx8IGxrID09IDExNDcyMCAgICAgICAgICAgICAgICAvLyAnJScgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTQ5NjQgICAgICAgICAgICAgICAgLy8gJ3snICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE1MjMxICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNTIzMiAgICAgICAgICAgICAgICAvLyAnJScgJ3NjaGVtYScKICAgICB8fCBsayA9PSAxMTU0NzYgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE1NzQzICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTU3NDQgICAgICAgICAgICAgICAgLy8gJyUnICdzY2hlbWEtYXR0cmlidXRlJwogICAgIHx8IGxrID09IDExNTk4OCAgICAgICAgICAgICAgICAvLyAneycgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE2MjU1ICAgICAgICAgICAgICAgIC8vICckJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2MjU2ICAgICAgICAgICAgICAgIC8vICclJyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2NTAwICAgICAgICAgICAgICAgIC8vICd7JyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE2NzY3ICAgICAgICAgICAgICAgIC8vICckJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE2NzY4ICAgICAgICAgICAgICAgIC8vICclJyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE3MDEyICAgICAgICAgICAgICAgIC8vICd7JyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE3Mjc5ICAgICAgICAgICAgICAgIC8vICckJyAnc2VsZicKICAgICB8fCBsayA9PSAxMTcyODAgICAgICAgICAgICAgICAgLy8gJyUnICdzZWxmJwogICAgIHx8IGxrID09IDExNzUyNCAgICAgICAgICAgICAgICAvLyAneycgJ3NlbGYnCiAgICAgfHwgbGsgPT0gMTE5ODM5ICAgICAgICAgICAgICAgIC8vICckJyAnc2xpZGluZycKICAgICB8fCBsayA9PSAxMTk4NDAgICAgICAgICAgICAgICAgLy8gJyUnICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMDA4NCAgICAgICAgICAgICAgICAvLyAneycgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIwMzUxICAgICAgICAgICAgICAgIC8vICckJyAnc29tZScKICAgICB8fCBsayA9PSAxMjAzNTIgICAgICAgICAgICAgICAgLy8gJyUnICdzb21lJwogICAgIHx8IGxrID09IDEyMDU5NiAgICAgICAgICAgICAgICAvLyAneycgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIwODYzICAgICAgICAgICAgICAgIC8vICckJyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMDg2NCAgICAgICAgICAgICAgICAvLyAnJScgJ3N0YWJsZScKICAgICB8fCBsayA9PSAxMjExMDggICAgICAgICAgICAgICAgLy8gJ3snICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIxMzc1ICAgICAgICAgICAgICAgIC8vICckJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxMzc2ICAgICAgICAgICAgICAgIC8vICclJyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIxNjIwICAgICAgICAgICAgICAgIC8vICd7JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIyOTExICAgICAgICAgICAgICAgIC8vICckJyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyMjkxMiAgICAgICAgICAgICAgICAvLyAnJScgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjMxNTYgICAgICAgICAgICAgICAgLy8gJ3snICdzdHJpY3QnCiAgICAgfHwgbGsgPT0gMTIzOTM1ICAgICAgICAgICAgICAgIC8vICckJyAnc3RydWN0dXJlZC1pdGVtJwogICAgIHx8IGxrID09IDEyMzkzNiAgICAgICAgICAgICAgICAvLyAnJScgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjQxODAgICAgICAgICAgICAgICAgLy8gJ3snICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI0NDQ3ICAgICAgICAgICAgICAgIC8vICckJyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNDQ0OCAgICAgICAgICAgICAgICAvLyAnJScgJ3N3aXRjaCcKICAgICB8fCBsayA9PSAxMjQ2OTIgICAgICAgICAgICAgICAgLy8gJ3snICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI0OTU5ICAgICAgICAgICAgICAgIC8vICckJyAndGV4dCcKICAgICB8fCBsayA9PSAxMjQ5NjAgICAgICAgICAgICAgICAgLy8gJyUnICd0ZXh0JwogICAgIHx8IGxrID09IDEyNTIwNCAgICAgICAgICAgICAgICAvLyAneycgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI3MDA3ICAgICAgICAgICAgICAgIC8vICckJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3MDA4ICAgICAgICAgICAgICAgIC8vICclJyAndG8nCiAgICAgfHwgbGsgPT0gMTI3MjUyICAgICAgICAgICAgICAgIC8vICd7JyAndG8nCiAgICAgfHwgbGsgPT0gMTI3NTE5ICAgICAgICAgICAgICAgIC8vICckJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI3NTIwICAgICAgICAgICAgICAgIC8vICclJyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI3NzY0ICAgICAgICAgICAgICAgIC8vICd7JyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI4MDMxICAgICAgICAgICAgICAgIC8vICckJyAndHJ5JwogICAgIHx8IGxrID09IDEyODAzMiAgICAgICAgICAgICAgICAvLyAnJScgJ3RyeScKICAgICB8fCBsayA9PSAxMjgyNzYgICAgICAgICAgICAgICAgLy8gJ3snICd0cnknCiAgICAgfHwgbGsgPT0gMTI4NTQzICAgICAgICAgICAgICAgIC8vICckJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI4NTQ0ICAgICAgICAgICAgICAgIC8vICclJyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI4Nzg4ICAgICAgICAgICAgICAgIC8vICd7JyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI5MDU1ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZScKICAgICB8fCBsayA9PSAxMjkwNTYgICAgICAgICAgICAgICAgLy8gJyUnICd0eXBlJwogICAgIHx8IGxrID09IDEyOTMwMCAgICAgICAgICAgICAgICAvLyAneycgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTI5NTY3ICAgICAgICAgICAgICAgIC8vICckJyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMjk1NjggICAgICAgICAgICAgICAgLy8gJyUnICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEyOTgxMiAgICAgICAgICAgICAgICAvLyAneycgJ3R5cGVzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTMwMDc5ICAgICAgICAgICAgICAgIC8vICckJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMDgwICAgICAgICAgICAgICAgIC8vICclJyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMwMzI0ICAgICAgICAgICAgICAgIC8vICd7JyAndW5pb24nCiAgICAgfHwgbGsgPT0gMTMxMTAzICAgICAgICAgICAgICAgIC8vICckJyAndW5vcmRlcmVkJwogICAgIHx8IGxrID09IDEzMTEwNCAgICAgICAgICAgICAgICAvLyAnJScgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzEzNDggICAgICAgICAgICAgICAgLy8gJ3snICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTMxNjE1ICAgICAgICAgICAgICAgIC8vICckJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMxNjE2ICAgICAgICAgICAgICAgIC8vICclJyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMxODYwICAgICAgICAgICAgICAgIC8vICd7JyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMzMTUxICAgICAgICAgICAgICAgIC8vICckJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzMTUyICAgICAgICAgICAgICAgIC8vICclJyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzMzk2ICAgICAgICAgICAgICAgIC8vICd7JyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzNjYzICAgICAgICAgICAgICAgIC8vICckJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTMzNjY0ICAgICAgICAgICAgICAgIC8vICclJyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTMzOTA4ICAgICAgICAgICAgICAgIC8vICd7JyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM0MTc1ICAgICAgICAgICAgICAgIC8vICckJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0MTc2ICAgICAgICAgICAgICAgIC8vICclJyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0NDIwICAgICAgICAgICAgICAgIC8vICd7JyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0Njg3ICAgICAgICAgICAgICAgIC8vICckJyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzQ2ODggICAgICAgICAgICAgICAgLy8gJyUnICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzNDkzMiAgICAgICAgICAgICAgICAvLyAneycgJ3ZlcnNpb24nCiAgICAgfHwgbGsgPT0gMTM2MjIzICAgICAgICAgICAgICAgIC8vICckJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2MjI0ICAgICAgICAgICAgICAgIC8vICclJyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2NDY4ICAgICAgICAgICAgICAgIC8vICd7JyAnd2hlcmUnCiAgICAgfHwgbGsgPT0gMTM2NzM1ICAgICAgICAgICAgICAgIC8vICckJyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTM2NzM2ICAgICAgICAgICAgICAgIC8vICclJyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTM2OTgwICAgICAgICAgICAgICAgIC8vICd7JyAnd2hpbGUnCiAgICAgfHwgbGsgPT0gMTM4MjcxICAgICAgICAgICAgICAgIC8vICckJyAnd2l0aCcKICAgICB8fCBsayA9PSAxMzgyNzIgICAgICAgICAgICAgICAgLy8gJyUnICd3aXRoJwogICAgIHx8IGxrID09IDEzODUxNiAgICAgICAgICAgICAgICAvLyAneycgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQwMzE5ICAgICAgICAgICAgICAgIC8vICckJyAneHF1ZXJ5JwogICAgIHx8IGxrID09IDE0MDMyMCAgICAgICAgICAgICAgICAvLyAnJScgJ3hxdWVyeScKICAgICB8fCBsayA9PSAxNDA1NjQgICAgICAgICAgICAgICAgLy8gJ3snICd4cXVlcnknCiAgICAgfHwgbGsgPT0gMTQxNTg4ICAgICAgICAgICAgICAgIC8vICd7JyAneycKICAgICB8fCBsayA9PSAxNDI2MTIgICAgICAgICAgICAgICAgLy8gJ3snICd7fCcKICAgICB8fCBsayA9PSAxNDQ2NjApICAgICAgICAgICAgICAgLy8gJ3snICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDcsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0FwcGx5U3RhdGVtZW50KCk7CiAgICAgICAgICBtZW1vaXplKDcsIGUwQSwgLTEpOwogICAgICAgICAgbGsgPSAtMTU7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgICB0cnlfQXNzaWduU3RhdGVtZW50KCk7CiAgICAgICAgICAgIG1lbW9pemUoNywgZTBBLCAtMik7CiAgICAgICAgICAgIGxrID0gLTE1OwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAyQSkKICAgICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgdHJ5X0Jsb2NrU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgbWVtb2l6ZSg3LCBlMEEsIC0zKTsKICAgICAgICAgICAgICBsayA9IC0xNTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAocDNBKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgICAgIHRyeV9WYXJEZWNsU3RhdGVtZW50KCk7CiAgICAgICAgICAgICAgICBtZW1vaXplKDcsIGUwQSwgLTEyKTsKICAgICAgICAgICAgICAgIGxrID0gLTE1OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXRjaCAocDEyQSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsayA9IC0xMzsKICAgICAgICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICAgICAgICBtZW1vaXplKDcsIGUwQSwgLTEzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0yOgogICAgICB0cnlfQXNzaWduU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMzoKICAgICAgdHJ5X0Jsb2NrU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA5MDE5ODogICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnICdsb29wJwogICAgICB0cnlfQnJlYWtTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDkwMjE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScgJ2xvb3AnCiAgICAgIHRyeV9Db250aW51ZVN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTEzMjg0OiAgICAgICAgICAgICAgICAgICAgLy8gJ2V4aXQnICdyZXR1cm5pbmcnCiAgICAgIHRyeV9FeGl0U3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNjAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnJCcKICAgIGNhc2UgMTYwNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJyQnCiAgICBjYXNlIDExNjkxMDogICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICdzY29yZScKICAgIGNhc2UgMTE5OTQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3NsaWRpbmcnCiAgICBjYXNlIDEyODY0OTogICAgICAgICAgICAgICAgICAgIC8vICdmb3InICd0dW1ibGluZycKICAgICAgdHJ5X0ZMV09SU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU2MDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcoJwogICAgICB0cnlfSWZTdGF0ZW1lbnQoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICcoJwogICAgICB0cnlfU3dpdGNoU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDE1NjI6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JyAneycKICAgICAgdHJ5X1RyeUNhdGNoU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY2MTogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJygnCiAgICAgIHRyeV9UeXBlc3dpdGNoU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTI6CiAgICBjYXNlIDE2MTM0OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJyQnCiAgICAgIHRyeV9WYXJEZWNsU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTM6CiAgICAgIHRyeV9XaGlsZVN0YXRlbWVudCgpOwogICAgICBicmVhazsKICAgIGNhc2UgNTM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICAgIHRyeV9Wb2lkU3RhdGVtZW50KCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTU6CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0FwcGx5U3RhdGVtZW50KCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9BcHBseVN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFwcGx5U3RhdGVtZW50IiwgZTApOwogICAgcGFyc2VfRXhwclNpbXBsZSgpOwogICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXBwbHlTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQXBwbHlTdGF0ZW1lbnQoKQogIHsKICAgIHRyeV9FeHByU2ltcGxlKCk7CiAgICBzaGlmdFQoNTMpOyAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXNzaWduU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQXNzaWduU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc6PScKICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkFzc2lnblN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Bc3NpZ25TdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9WYXJOYW1lKCk7CiAgICBsb29rYWhlYWQxVygyNyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzo9JwogICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0VCg1Myk7ICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9CbG9ja1N0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkJsb2NrU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnRzKCk7CiAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCbG9ja1N0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9CbG9ja1N0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50cygpOwogICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgICAvLyAnfScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0JyZWFrU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQnJlYWtTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCg4Nik7ICAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycKICAgIGxvb2thaGVhZDFXKDU5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbG9vcCcKICAgIHNoaWZ0KDE3Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnCiAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCcmVha1N0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9CcmVha1N0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDg2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBsb29rYWhlYWQxVyg1OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xvb3AnCiAgICBzaGlmdFQoMTc2KTsgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc7JwogICAgc2hpZnRUKDUzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbnRpbnVlU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29udGludWVTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgxMDIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdjb250aW51ZScKICAgIGxvb2thaGVhZDFXKDU5KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnbG9vcCcKICAgIHNoaWZ0KDE3Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnCiAgICBsb29rYWhlYWQxVygyOCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJzsnCiAgICBzaGlmdCg1Myk7ICAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb250aW51ZVN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db250aW51ZVN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDEwMik7ICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICBsb29rYWhlYWQxVyg1OSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2xvb3AnCiAgICBzaGlmdFQoMTc2KTsgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgbG9va2FoZWFkMVcoMjgpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICc7JwogICAgc2hpZnRUKDUzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0V4aXRTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJFeGl0U3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMTMyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgIGxvb2thaGVhZDFXKDcxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuaW5nJwogICAgc2hpZnQoMjIxKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkV4aXRTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfRXhpdFN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDEzMik7ICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgIGxvb2thaGVhZDFXKDcxKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuaW5nJwogICAgc2hpZnRUKDIyMSk7ICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdFQoNTMpOyAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRkxXT1JTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJGTFdPUlN0YXRlbWVudCIsIGUwKTsKICAgIHBhcnNlX0luaXRpYWxDbGF1c2UoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE3Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8ICdsZXQnIHwgJ29yZGVyJyB8ICdyZXR1cm4nIHwgJ3N0YWJsZScgfAogICAgICBpZiAobDEgPT0gMjIwKSAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9JbnRlcm1lZGlhdGVDbGF1c2UoKTsKICAgIH0KICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1JldHVyblN0YXRlbWVudCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJGTFdPUlN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9GTFdPUlN0YXRlbWVudCgpCiAgewogICAgdHJ5X0luaXRpYWxDbGF1c2UoKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDE3Myk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2NvdW50JyB8ICdmb3InIHwgJ2dyb3VwJyB8ICdsZXQnIHwgJ29yZGVyJyB8ICdyZXR1cm4nIHwgJ3N0YWJsZScgfAogICAgICBpZiAobDEgPT0gMjIwKSAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0ludGVybWVkaWF0ZUNsYXVzZSgpOwogICAgfQogICAgdHJ5X1JldHVyblN0YXRlbWVudCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV0dXJuU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUmV0dXJuU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1N0YXRlbWVudCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJSZXR1cm5TdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUmV0dXJuU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X1N0YXRlbWVudCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSWZTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJJZlN0YXRlbWVudCIsIGUwKTsKICAgIHNoaWZ0KDE1Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lmJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoNzcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd0aGVuJwogICAgc2hpZnQoMjQ1KTsgICAgICAgICAgICAgICAgICAgICAvLyAndGhlbicKICAgIGxvb2thaGVhZDFXKDI2OSk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnQoKTsKICAgIGxvb2thaGVhZDFXKDQ4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZWxzZScKICAgIHNoaWZ0KDEyMik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIklmU3RhdGVtZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0lmU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoMTUyKTsgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBsb29rYWhlYWQxVyg3Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3RoZW4nCiAgICBzaGlmdFQoMjQ1KTsgICAgICAgICAgICAgICAgICAgIC8vICd0aGVuJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICAgIGxvb2thaGVhZDFXKDQ4KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnZWxzZScKICAgIHNoaWZ0VCgxMjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2Vsc2UnCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X1N0YXRlbWVudCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfU3dpdGNoU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3dpdGNoU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoMjQzKTsgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Td2l0Y2hDYXNlU3RhdGVtZW50KCk7CiAgICAgIGxvb2thaGVhZDFXKDExMyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnIHwgJ2RlZmF1bHQnCiAgICAgIGlmIChsMSAhPSA4OCkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0KDIyMCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2OSk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnQoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiU3dpdGNoU3RhdGVtZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1N3aXRjaFN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDI0Myk7ICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnRUKDM0KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwcigpOwogICAgc2hpZnRUKDM3KTsgICAgICAgICAgICAgICAgICAgICAvLyAnKScKICAgIGZvciAoOzspCiAgICB7CiAgICAgIGxvb2thaGVhZDFXKDM1KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnCiAgICAgIHRyeV9Td2l0Y2hDYXNlU3RhdGVtZW50KCk7CiAgICAgIGxvb2thaGVhZDFXKDExMyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnIHwgJ2RlZmF1bHQnCiAgICAgIGlmIChsMSAhPSA4OCkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0VCgxMDkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg3MCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3JldHVybicKICAgIHNoaWZ0VCgyMjApOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGxvb2thaGVhZDFXKDI2OSk7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfU3RhdGVtZW50KCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Td2l0Y2hDYXNlU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiU3dpdGNoQ2FzZVN0YXRlbWVudCIsIGUwKTsKICAgIGZvciAoOzspCiAgICB7CiAgICAgIHNoaWZ0KDg4KTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9Td2l0Y2hDYXNlT3BlcmFuZCgpOwogICAgICBpZiAobDEgIT0gODgpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdCgyMjApOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlN3aXRjaENhc2VTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfU3dpdGNoQ2FzZVN0YXRlbWVudCgpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgc2hpZnRUKDg4KTsgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfU3dpdGNoQ2FzZU9wZXJhbmQoKTsKICAgICAgaWYgKGwxICE9IDg4KSAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgc2hpZnRUKDIyMCk7ICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1RyeUNhdGNoU3RhdGVtZW50KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiVHJ5Q2F0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgyNTApOyAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9CbG9ja1N0YXRlbWVudCgpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgIHNoaWZ0KDkxKTsgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfQ2F0Y2hFcnJvckxpc3QoKTsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9CbG9ja1N0YXRlbWVudCgpOwogICAgICBsb29rYWhlYWQxVygyNzcpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgICAgbG9va2FoZWFkMlcoMjc4KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayA9PSAzODQ5MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FuZCcKICAgICAgIHx8IGxrID09IDQ1NjU5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2FzdCcKICAgICAgIHx8IGxrID09IDQ2MTcxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2FzdGFibGUnCiAgICAgICB8fCBsayA9PSA2MDUwNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RpdicKICAgICAgIHx8IGxrID09IDY1NjI3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXEnCiAgICAgICB8fCBsayA9PSA2NzE2MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2V4Y2VwdCcKICAgICAgIHx8IGxrID09IDc0ODQzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZ2UnCiAgICAgICB8fCBsayA9PSA3Njg5MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2d0JwogICAgICAgfHwgbGsgPT0gNzc0MDMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpZGl2JwogICAgICAgfHwgbGsgPT0gODIwMTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnN0YW5jZScKICAgICAgIHx8IGxrID09IDgzMDM1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW50ZXJzZWN0JwogICAgICAgfHwgbGsgPT0gODQwNTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpcycKICAgICAgIHx8IGxrID09IDg4MTU1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGUnCiAgICAgICB8fCBsayA9PSA5MTIyNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2x0JwogICAgICAgfHwgbGsgPT0gOTIyNTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdtb2QnCiAgICAgICB8fCBsayA9PSA5NTMyMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25lJwogICAgICAgfHwgbGsgPT0gMTAyNDkxICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcicKICAgICAgIHx8IGxrID09IDEyNzA2NyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndG8nCiAgICAgICB8fCBsayA9PSAxMjc1NzkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RyZWF0JwogICAgICAgfHwgbGsgPT0gMTMwMTM5KSAgICAgICAgICAgICAvLyAnY2F0Y2gnICd1bmlvbicKICAgICAgewogICAgICAgIGxrID0gbWVtb2l6ZWQoOCwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgbG9va2FoZWFkMVcoMzYpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgICAgICAgIHNoaWZ0VCg5MSk7ICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgICAgIHRyeV9DYXRjaEVycm9yTGlzdCgpOwogICAgICAgICAgICB0cnlfQmxvY2tTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgbGsgPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgICB7CiAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICB9CiAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgICAgbWVtb2l6ZSg4LCBlMCwgbGspOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGsgIT0gLTEKICAgICAgICYmIGxrICE9IDI2NTEgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyBXaWxkY2FyZAogICAgICAgJiYgbGsgIT0gMzE2MyAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnIEVRTmFtZV5Ub2tlbgogICAgICAgJiYgbGsgIT0gMzU5MzEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhZnRlcicKICAgICAgICYmIGxrICE9IDM2OTU1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYWxsb3dpbmcnCiAgICAgICAmJiBsayAhPSAzNzQ2NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FuY2VzdG9yJwogICAgICAgJiYgbGsgIT0gMzc5NzkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhbmNlc3Rvci1vci1zZWxmJwogICAgICAgJiYgbGsgIT0gMzk1MTUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhcHBlbmQnCiAgICAgICAmJiBsayAhPSA0MDAyNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FycmF5JwogICAgICAgJiYgbGsgIT0gNDA1MzkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhcycKICAgICAgICYmIGxrICE9IDQxMDUxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXNjZW5kaW5nJwogICAgICAgJiYgbGsgIT0gNDE1NjMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhdCcKICAgICAgICYmIGxrICE9IDQyMDc1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXR0cmlidXRlJwogICAgICAgJiYgbGsgIT0gNDI1ODcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdiYXNlLXVyaScKICAgICAgICYmIGxrICE9IDQzMDk5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYmVmb3JlJwogICAgICAgJiYgbGsgIT0gNDM2MTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdib3VuZGFyeS1zcGFjZScKICAgICAgICYmIGxrICE9IDQ0MTIzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYnJlYWsnCiAgICAgICAmJiBsayAhPSA0NTE0NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Nhc2UnCiAgICAgICAmJiBsayAhPSA0NjY4MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NhdGNoJwogICAgICAgJiYgbGsgIT0gNDc3MDcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjaGlsZCcKICAgICAgICYmIGxrICE9IDQ4MjE5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29sbGF0aW9uJwogICAgICAgJiYgbGsgIT0gNDkyNDMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb21tZW50JwogICAgICAgJiYgbGsgIT0gNDk3NTUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb25zdHJhaW50JwogICAgICAgJiYgbGsgIT0gNTAyNjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb25zdHJ1Y3Rpb24nCiAgICAgICAmJiBsayAhPSA1MTgwMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbnRleHQnCiAgICAgICAmJiBsayAhPSA1MjMxNSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbnRpbnVlJwogICAgICAgJiYgbGsgIT0gNTI4MjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb3B5JwogICAgICAgJiYgbGsgIT0gNTMzMzkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgICAmJiBsayAhPSA1Mzg1MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvdW50JwogICAgICAgJiYgbGsgIT0gNTQzNjMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWNpbWFsLWZvcm1hdCcKICAgICAgICYmIGxrICE9IDU1Mzg3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVjbGFyZScKICAgICAgICYmIGxrICE9IDU1ODk5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVmYXVsdCcKICAgICAgICYmIGxrICE9IDU2NDExICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVsZXRlJwogICAgICAgJiYgbGsgIT0gNTY5MjMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZXNjZW5kYW50JwogICAgICAgJiYgbGsgIT0gNTc0MzUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICAgICAmJiBsayAhPSA1Nzk0NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Rlc2NlbmRpbmcnCiAgICAgICAmJiBsayAhPSA2MTAxOSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RvY3VtZW50JwogICAgICAgJiYgbGsgIT0gNjE1MzEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkb2N1bWVudC1ub2RlJwogICAgICAgJiYgbGsgIT0gNjIwNDMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbGVtZW50JwogICAgICAgJiYgbGsgIT0gNjI1NTUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbHNlJwogICAgICAgJiYgbGsgIT0gNjMwNjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbXB0eScKICAgICAgICYmIGxrICE9IDYzNTc5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZW1wdHktc2VxdWVuY2UnCiAgICAgICAmJiBsayAhPSA2NDA5MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VuY29kaW5nJwogICAgICAgJiYgbGsgIT0gNjQ2MDMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbmQnCiAgICAgICAmJiBsayAhPSA2NjEzOSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2V2ZXJ5JwogICAgICAgJiYgbGsgIT0gNjc2NzUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdleGl0JwogICAgICAgJiYgbGsgIT0gNjgxODcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdleHRlcm5hbCcKICAgICAgICYmIGxrICE9IDY4Njk5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZmlyc3QnCiAgICAgICAmJiBsayAhPSA2OTIxMSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ZvbGxvd2luZycKICAgICAgICYmIGxrICE9IDY5NzIzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgICAmJiBsayAhPSA3MDIzNSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ZvcicKICAgICAgICYmIGxrICE9IDcyMjgzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZnQtb3B0aW9uJwogICAgICAgJiYgbGsgIT0gNzQzMzEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmdW5jdGlvbicKICAgICAgICYmIGxrICE9IDc1ODY3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZ3JvdXAnCiAgICAgICAmJiBsayAhPSA3NzkxNSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2lmJwogICAgICAgJiYgbGsgIT0gNzg0MjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbXBvcnQnCiAgICAgICAmJiBsayAhPSA3ODkzOSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2luJwogICAgICAgJiYgbGsgIT0gNzk0NTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbmRleCcKICAgICAgICYmIGxrICE9IDgxNDk5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW5zZXJ0JwogICAgICAgJiYgbGsgIT0gODI1MjMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnRlZ3JpdHknCiAgICAgICAmJiBsayAhPSA4MzU0NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ludG8nCiAgICAgICAmJiBsayAhPSA4NDU3MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2l0ZW0nCiAgICAgICAmJiBsayAhPSA4NTA4MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2pzb24nCiAgICAgICAmJiBsayAhPSA4NTU5NSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2pzb24taXRlbScKICAgICAgICYmIGxrICE9IDg3MTMxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGFzdCcKICAgICAgICYmIGxrICE9IDg3NjQzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGF4JwogICAgICAgJiYgbGsgIT0gODkxNzkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdsZXQnCiAgICAgICAmJiBsayAhPSA5MDIwMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2xvb3AnCiAgICAgICAmJiBsayAhPSA5Mjc2MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ21vZGlmeScKICAgICAgICYmIGxrICE9IDkzMjc1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbW9kdWxlJwogICAgICAgJiYgbGsgIT0gOTQyOTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICduYW1lc3BhY2UnCiAgICAgICAmJiBsayAhPSA5NDgxMSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25hbWVzcGFjZS1ub2RlJwogICAgICAgJiYgbGsgIT0gOTc4ODMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdub2RlJwogICAgICAgJiYgbGsgIT0gOTgzOTUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdub2RlcycKICAgICAgICYmIGxrICE9IDk5NDE5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnb2JqZWN0JwogICAgICAgJiYgbGsgIT0gMTAxNDY3ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvbmx5JwogICAgICAgJiYgbGsgIT0gMTAxOTc5ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcHRpb24nCiAgICAgICAmJiBsayAhPSAxMDMwMDMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29yZGVyJwogICAgICAgJiYgbGsgIT0gMTAzNTE1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcmRlcmVkJwogICAgICAgJiYgbGsgIT0gMTA0MDI3ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcmRlcmluZycKICAgICAgICYmIGxrICE9IDEwNTU2MyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncGFyZW50JwogICAgICAgJiYgbGsgIT0gMTA4NjM1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdwcmVjZWRpbmcnCiAgICAgICAmJiBsayAhPSAxMDkxNDcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgICAgJiYgbGsgIT0gMTEwNjgzICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICAgJiYgbGsgIT0gMTExNzA3ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZW5hbWUnCiAgICAgICAmJiBsayAhPSAxMTIyMTkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JlcGxhY2UnCiAgICAgICAmJiBsayAhPSAxMTI3MzEgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JldHVybicKICAgICAgICYmIGxrICE9IDExMzI0MyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncmV0dXJuaW5nJwogICAgICAgJiYgbGsgIT0gMTEzNzU1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZXZhbGlkYXRpb24nCiAgICAgICAmJiBsayAhPSAxMTQ3NzkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NhdGlzZmllcycKICAgICAgICYmIGxrICE9IDExNTI5MSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2NoZW1hJwogICAgICAgJiYgbGsgIT0gMTE1ODAzICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzY2hlbWEtYXR0cmlidXRlJwogICAgICAgJiYgbGsgIT0gMTE2MzE1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzY2hlbWEtZWxlbWVudCcKICAgICAgICYmIGxrICE9IDExNjgyNyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2NvcmUnCiAgICAgICAmJiBsayAhPSAxMTczMzkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NlbGYnCiAgICAgICAmJiBsayAhPSAxMTk4OTkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NsaWRpbmcnCiAgICAgICAmJiBsayAhPSAxMjA0MTEgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NvbWUnCiAgICAgICAmJiBsayAhPSAxMjA5MjMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3N0YWJsZScKICAgICAgICYmIGxrICE9IDEyMTQzNSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RhcnQnCiAgICAgICAmJiBsayAhPSAxMjI5NzEgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3N0cmljdCcKICAgICAgICYmIGxrICE9IDEyMzk5NSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RydWN0dXJlZC1pdGVtJwogICAgICAgJiYgbGsgIT0gMTI0NTA3ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzd2l0Y2gnCiAgICAgICAmJiBsayAhPSAxMjUwMTkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RleHQnCiAgICAgICAmJiBsayAhPSAxMjgwOTEgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RyeScKICAgICAgICYmIGxrICE9IDEyODYwMyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHVtYmxpbmcnCiAgICAgICAmJiBsayAhPSAxMjkxMTUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3R5cGUnCiAgICAgICAmJiBsayAhPSAxMjk2MjcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3R5cGVzd2l0Y2gnCiAgICAgICAmJiBsayAhPSAxMzExNjMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3Vub3JkZXJlZCcKICAgICAgICYmIGxrICE9IDEzMTY3NSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndXBkYXRpbmcnCiAgICAgICAmJiBsayAhPSAxMzMyMTEgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ZhbGlkYXRlJwogICAgICAgJiYgbGsgIT0gMTMzNzIzICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd2YWx1ZScKICAgICAgICYmIGxrICE9IDEzNDIzNSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndmFyaWFibGUnCiAgICAgICAmJiBsayAhPSAxMzQ3NDcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ZlcnNpb24nCiAgICAgICAmJiBsayAhPSAxMzYyODMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3doZXJlJwogICAgICAgJiYgbGsgIT0gMTM2Nzk1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd3aGlsZScKICAgICAgICYmIGxrICE9IDEzODMzMSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnd2l0aCcKICAgICAgICYmIGxrICE9IDE0MDM3OSkgICAgICAgICAgICAgLy8gJ2NhdGNoJyAneHF1ZXJ5JwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVHJ5Q2F0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHJ5Q2F0Y2hTdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCgyNTApOyAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHRyeV9CbG9ja1N0YXRlbWVudCgpOwogICAgbG9va2FoZWFkMVcoMzYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXRjaCcKICAgIHNoaWZ0VCg5MSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHRyeV9DYXRjaEVycm9yTGlzdCgpOwogICAgdHJ5X0Jsb2NrU3RhdGVtZW50KCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygyNzcpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDkxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICAgICAgbG9va2FoZWFkMlcoMjc4KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyonIHwKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBsayA9IGwxOwogICAgICB9CiAgICAgIGlmIChsayA9PSAzODQ5MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FuZCcKICAgICAgIHx8IGxrID09IDQ1NjU5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2FzdCcKICAgICAgIHx8IGxrID09IDQ2MTcxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2FzdGFibGUnCiAgICAgICB8fCBsayA9PSA2MDUwNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RpdicKICAgICAgIHx8IGxrID09IDY1NjI3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXEnCiAgICAgICB8fCBsayA9PSA2NzE2MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2V4Y2VwdCcKICAgICAgIHx8IGxrID09IDc0ODQzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZ2UnCiAgICAgICB8fCBsayA9PSA3Njg5MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2d0JwogICAgICAgfHwgbGsgPT0gNzc0MDMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpZGl2JwogICAgICAgfHwgbGsgPT0gODIwMTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnN0YW5jZScKICAgICAgIHx8IGxrID09IDgzMDM1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW50ZXJzZWN0JwogICAgICAgfHwgbGsgPT0gODQwNTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpcycKICAgICAgIHx8IGxrID09IDg4MTU1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbGUnCiAgICAgICB8fCBsayA9PSA5MTIyNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2x0JwogICAgICAgfHwgbGsgPT0gOTIyNTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdtb2QnCiAgICAgICB8fCBsayA9PSA5NTMyMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25lJwogICAgICAgfHwgbGsgPT0gMTAyNDkxICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvcicKICAgICAgIHx8IGxrID09IDEyNzA2NyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndG8nCiAgICAgICB8fCBsayA9PSAxMjc1NzkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3RyZWF0JwogICAgICAgfHwgbGsgPT0gMTMwMTM5KSAgICAgICAgICAgICAvLyAnY2F0Y2gnICd1bmlvbicKICAgICAgewogICAgICAgIGxrID0gbWVtb2l6ZWQoOCwgZTApOwogICAgICAgIGlmIChsayA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKICAgICAgICAgICAgbG9va2FoZWFkMVcoMzYpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2F0Y2gnCiAgICAgICAgICAgIHNoaWZ0VCg5MSk7ICAgICAgICAgICAgIC8vICdjYXRjaCcKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjU2KTsgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgICAgICAgIHRyeV9DYXRjaEVycm9yTGlzdCgpOwogICAgICAgICAgICB0cnlfQmxvY2tTdGF0ZW1lbnQoKTsKICAgICAgICAgICAgbWVtb2l6ZSg4LCBlMEEsIC0xKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCAocDFBKQogICAgICAgICAgewogICAgICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgICAgbWVtb2l6ZSg4LCBlMEEsIC0yKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsayAhPSAtMQogICAgICAgJiYgbGsgIT0gMjY1MSAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnIFdpbGRjYXJkCiAgICAgICAmJiBsayAhPSAzMTYzICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgRVFOYW1lXlRva2VuCiAgICAgICAmJiBsayAhPSAzNTkzMSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FmdGVyJwogICAgICAgJiYgbGsgIT0gMzY5NTUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhbGxvd2luZycKICAgICAgICYmIGxrICE9IDM3NDY3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYW5jZXN0b3InCiAgICAgICAmJiBsayAhPSAzNzk3OSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgICAmJiBsayAhPSAzOTUxNSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FwcGVuZCcKICAgICAgICYmIGxrICE9IDQwMDI3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnYXJyYXknCiAgICAgICAmJiBsayAhPSA0MDUzOSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2FzJwogICAgICAgJiYgbGsgIT0gNDEwNTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhc2NlbmRpbmcnCiAgICAgICAmJiBsayAhPSA0MTU2MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2F0JwogICAgICAgJiYgbGsgIT0gNDIwNzUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdhdHRyaWJ1dGUnCiAgICAgICAmJiBsayAhPSA0MjU4NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Jhc2UtdXJpJwogICAgICAgJiYgbGsgIT0gNDMwOTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdiZWZvcmUnCiAgICAgICAmJiBsayAhPSA0MzYxMSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2JvdW5kYXJ5LXNwYWNlJwogICAgICAgJiYgbGsgIT0gNDQxMjMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdicmVhaycKICAgICAgICYmIGxrICE9IDQ1MTQ3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2FzZScKICAgICAgICYmIGxrICE9IDQ2NjgzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY2F0Y2gnCiAgICAgICAmJiBsayAhPSA0NzcwNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NoaWxkJwogICAgICAgJiYgbGsgIT0gNDgyMTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdjb2xsYXRpb24nCiAgICAgICAmJiBsayAhPSA0OTI0MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbW1lbnQnCiAgICAgICAmJiBsayAhPSA0OTc1NSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbnN0cmFpbnQnCiAgICAgICAmJiBsayAhPSA1MDI2NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvbnN0cnVjdGlvbicKICAgICAgICYmIGxrICE9IDUxODAzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29udGV4dCcKICAgICAgICYmIGxrICE9IDUyMzE1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY29udGludWUnCiAgICAgICAmJiBsayAhPSA1MjgyNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvcHknCiAgICAgICAmJiBsayAhPSA1MzMzOSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2NvcHktbmFtZXNwYWNlcycKICAgICAgICYmIGxrICE9IDUzODUxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnY291bnQnCiAgICAgICAmJiBsayAhPSA1NDM2MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RlY2ltYWwtZm9ybWF0JwogICAgICAgJiYgbGsgIT0gNTUzODcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWNsYXJlJwogICAgICAgJiYgbGsgIT0gNTU4OTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWZhdWx0JwogICAgICAgJiYgbGsgIT0gNTY0MTEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdkZWxldGUnCiAgICAgICAmJiBsayAhPSA1NjkyMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Rlc2NlbmRhbnQnCiAgICAgICAmJiBsayAhPSA1NzQzNSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICAgICYmIGxrICE9IDU3OTQ3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZGVzY2VuZGluZycKICAgICAgICYmIGxrICE9IDYxMDE5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZG9jdW1lbnQnCiAgICAgICAmJiBsayAhPSA2MTUzMSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2RvY3VtZW50LW5vZGUnCiAgICAgICAmJiBsayAhPSA2MjA0MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VsZW1lbnQnCiAgICAgICAmJiBsayAhPSA2MjU1NSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Vsc2UnCiAgICAgICAmJiBsayAhPSA2MzA2NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VtcHR5JwogICAgICAgJiYgbGsgIT0gNjM1NzkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdlbXB0eS1zZXF1ZW5jZScKICAgICAgICYmIGxrICE9IDY0MDkxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZW5jb2RpbmcnCiAgICAgICAmJiBsayAhPSA2NDYwMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2VuZCcKICAgICAgICYmIGxrICE9IDY2MTM5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZXZlcnknCiAgICAgICAmJiBsayAhPSA2NzY3NSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2V4aXQnCiAgICAgICAmJiBsayAhPSA2ODE4NyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2V4dGVybmFsJwogICAgICAgJiYgbGsgIT0gNjg2OTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmaXJzdCcKICAgICAgICYmIGxrICE9IDY5MjExICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZm9sbG93aW5nJwogICAgICAgJiYgbGsgIT0gNjk3MjMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmb2xsb3dpbmctc2libGluZycKICAgICAgICYmIGxrICE9IDcwMjM1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnZm9yJwogICAgICAgJiYgbGsgIT0gNzIyODMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdmdC1vcHRpb24nCiAgICAgICAmJiBsayAhPSA3NDMzMSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2Z1bmN0aW9uJwogICAgICAgJiYgbGsgIT0gNzU4NjcgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdncm91cCcKICAgICAgICYmIGxrICE9IDc3OTE1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaWYnCiAgICAgICAmJiBsayAhPSA3ODQyNyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ltcG9ydCcKICAgICAgICYmIGxrICE9IDc4OTM5ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW4nCiAgICAgICAmJiBsayAhPSA3OTQ1MSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2luZGV4JwogICAgICAgJiYgbGsgIT0gODE0OTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdpbnNlcnQnCiAgICAgICAmJiBsayAhPSA4MjUyMyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2ludGVncml0eScKICAgICAgICYmIGxrICE9IDgzNTQ3ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaW50bycKICAgICAgICYmIGxrICE9IDg0NTcxICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnaXRlbScKICAgICAgICYmIGxrICE9IDg1MDgzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnanNvbicKICAgICAgICYmIGxrICE9IDg1NTk1ICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnanNvbi1pdGVtJwogICAgICAgJiYgbGsgIT0gODcxMzEgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdsYXN0JwogICAgICAgJiYgbGsgIT0gODc2NDMgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdsYXgnCiAgICAgICAmJiBsayAhPSA4OTE3OSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ2xldCcKICAgICAgICYmIGxrICE9IDkwMjAzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbG9vcCcKICAgICAgICYmIGxrICE9IDkyNzYzICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbW9kaWZ5JwogICAgICAgJiYgbGsgIT0gOTMyNzUgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdtb2R1bGUnCiAgICAgICAmJiBsayAhPSA5NDI5OSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25hbWVzcGFjZScKICAgICAgICYmIGxrICE9IDk0ODExICAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnbmFtZXNwYWNlLW5vZGUnCiAgICAgICAmJiBsayAhPSA5Nzg4MyAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25vZGUnCiAgICAgICAmJiBsayAhPSA5ODM5NSAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ25vZGVzJwogICAgICAgJiYgbGsgIT0gOTk0MTkgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdvYmplY3QnCiAgICAgICAmJiBsayAhPSAxMDE0NjcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29ubHknCiAgICAgICAmJiBsayAhPSAxMDE5NzkgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29wdGlvbicKICAgICAgICYmIGxrICE9IDEwMzAwMyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnb3JkZXInCiAgICAgICAmJiBsayAhPSAxMDM1MTUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29yZGVyZWQnCiAgICAgICAmJiBsayAhPSAxMDQwMjcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ29yZGVyaW5nJwogICAgICAgJiYgbGsgIT0gMTA1NTYzICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdwYXJlbnQnCiAgICAgICAmJiBsayAhPSAxMDg2MzUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ByZWNlZGluZycKICAgICAgICYmIGxrICE9IDEwOTE0NyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgICAmJiBsayAhPSAxMTA2ODMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nCiAgICAgICAmJiBsayAhPSAxMTE3MDcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JlbmFtZScKICAgICAgICYmIGxrICE9IDExMjIxOSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncmVwbGFjZScKICAgICAgICYmIGxrICE9IDExMjczMSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAncmV0dXJuJwogICAgICAgJiYgbGsgIT0gMTEzMjQzICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdyZXR1cm5pbmcnCiAgICAgICAmJiBsayAhPSAxMTM3NTUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3JldmFsaWRhdGlvbicKICAgICAgICYmIGxrICE9IDExNDc3OSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2F0aXNmaWVzJwogICAgICAgJiYgbGsgIT0gMTE1MjkxICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzY2hlbWEnCiAgICAgICAmJiBsayAhPSAxMTU4MDMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgICAmJiBsayAhPSAxMTYzMTUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3NjaGVtYS1lbGVtZW50JwogICAgICAgJiYgbGsgIT0gMTE2ODI3ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzY29yZScKICAgICAgICYmIGxrICE9IDExNzMzOSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2VsZicKICAgICAgICYmIGxrICE9IDExOTg5OSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc2xpZGluZycKICAgICAgICYmIGxrICE9IDEyMDQxMSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc29tZScKICAgICAgICYmIGxrICE9IDEyMDkyMyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RhYmxlJwogICAgICAgJiYgbGsgIT0gMTIxNDM1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzdGFydCcKICAgICAgICYmIGxrICE9IDEyMjk3MSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnc3RyaWN0JwogICAgICAgJiYgbGsgIT0gMTIzOTk1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgICAmJiBsayAhPSAxMjQ1MDcgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3N3aXRjaCcKICAgICAgICYmIGxrICE9IDEyNTAxOSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndGV4dCcKICAgICAgICYmIGxrICE9IDEyODA5MSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHJ5JwogICAgICAgJiYgbGsgIT0gMTI4NjAzICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd0dW1ibGluZycKICAgICAgICYmIGxrICE9IDEyOTExNSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHlwZScKICAgICAgICYmIGxrICE9IDEyOTYyNyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndHlwZXN3aXRjaCcKICAgICAgICYmIGxrICE9IDEzMTE2MyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndW5vcmRlcmVkJwogICAgICAgJiYgbGsgIT0gMTMxNjc1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd1cGRhdGluZycKICAgICAgICYmIGxrICE9IDEzMzIxMSAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndmFsaWRhdGUnCiAgICAgICAmJiBsayAhPSAxMzM3MjMgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3ZhbHVlJwogICAgICAgJiYgbGsgIT0gMTM0MjM1ICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd2YXJpYWJsZScKICAgICAgICYmIGxrICE9IDEzNDc0NyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAndmVyc2lvbicKICAgICAgICYmIGxrICE9IDEzNjI4MyAgICAgICAgICAgICAgLy8gJ2NhdGNoJyAnd2hlcmUnCiAgICAgICAmJiBsayAhPSAxMzY3OTUgICAgICAgICAgICAgIC8vICdjYXRjaCcgJ3doaWxlJwogICAgICAgJiYgbGsgIT0gMTM4MzMxICAgICAgICAgICAgICAvLyAnY2F0Y2gnICd3aXRoJwogICAgICAgJiYgbGsgIT0gMTQwMzc5KSAgICAgICAgICAgICAvLyAnY2F0Y2gnICd4cXVlcnknCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBsb29rYWhlYWQxVygzNik7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXRjaCcKICAgICAgc2hpZnRUKDkxKTsgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgICBsb29rYWhlYWQxVygyNTYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X0NhdGNoRXJyb3JMaXN0KCk7CiAgICAgIHRyeV9CbG9ja1N0YXRlbWVudCgpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVHlwZXN3aXRjaFN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlR5cGVzd2l0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCgyNTMpOyAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoMzUpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnY2FzZScKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9DYXNlU3RhdGVtZW50KCk7CiAgICAgIGxvb2thaGVhZDFXKDExMyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2Nhc2UnIHwgJ2RlZmF1bHQnCiAgICAgIGlmIChsMSAhPSA4OCkgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDEwOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlZmF1bHQnCiAgICBsb29rYWhlYWQxVyg5NSk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonIHwgJ3JldHVybicKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVmFyTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoNzApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBzaGlmdCgyMjApOyAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU3RhdGVtZW50KCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlR5cGVzd2l0Y2hTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVHlwZXN3aXRjaFN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDI1Myk7ICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgIGxvb2thaGVhZDFXKDIyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoJyB8ICcoOicKICAgIHNoaWZ0VCgzNCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHIoKTsKICAgIHNoaWZ0VCgzNyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJyknCiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVygzNSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJwogICAgICB0cnlfQ2FzZVN0YXRlbWVudCgpOwogICAgICBsb29rYWhlYWQxVygxMTMpOyAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdjYXNlJyB8ICdkZWZhdWx0JwogICAgICBpZiAobDEgIT0gODgpICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoMTA5KTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgbG9va2FoZWFkMVcoOTUpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBpZiAobDEgPT0gMzEpICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgewogICAgICBzaGlmdFQoMzEpOyAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB0cnlfVmFyTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoNzApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X1N0YXRlbWVudCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ2FzZVN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNhc2VTdGF0ZW1lbnQiLCBlMCk7CiAgICBzaGlmdCg4OCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgbG9va2FoZWFkMVcoMjYxKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyQnIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHNoaWZ0KDMxKTsgICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfVmFyTmFtZSgpOwogICAgICBsb29rYWhlYWQxVygzMCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycKICAgICAgc2hpZnQoNzkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgfQogICAgbG9va2FoZWFkMVcoMjU5KTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyUnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TZXF1ZW5jZVR5cGUoKTsKICAgIGxvb2thaGVhZDFXKDcwKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncmV0dXJuJwogICAgc2hpZnQoMjIwKTsgICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1N0YXRlbWVudCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDYXNlU3RhdGVtZW50IiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0Nhc2VTdGF0ZW1lbnQoKQogIHsKICAgIHNoaWZ0VCg4OCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnCiAgICBsb29rYWhlYWQxVygyNjEpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnJCcgfCAnJScgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfAogICAgaWYgKGwxID09IDMxKSAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIHsKICAgICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgdHJ5X1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMzApOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnYXMnCiAgICAgIHNoaWZ0VCg3OSk7ICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIH0KICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1NlcXVlbmNlVHlwZSgpOwogICAgbG9va2FoZWFkMVcoNzApOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdyZXR1cm4nCiAgICBzaGlmdFQoMjIwKTsgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBsb29rYWhlYWQxVygyNjkpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X1N0YXRlbWVudCgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfVmFyRGVjbFN0YXRlbWVudCgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlZhckRlY2xTdGF0ZW1lbnQiLCBlMCk7CiAgICBmb3IgKDs7KQogICAgewogICAgICBsb29rYWhlYWQxVyg5OCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyUnIHwgJyg6JyB8ICd2YXJpYWJsZScKICAgICAgaWYgKGwxICE9IDMyKSAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Fubm90YXRpb24oKTsKICAgIH0KICAgIHNoaWZ0KDI2Mik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnQoMzEpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfVmFyTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMTU3KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICcsJyB8ICc6PScgfCAnOycgfCAnYXMnCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDE0NSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnCiAgICBpZiAobDEgPT0gNTIpICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgIHsKICAgICAgc2hpZnQoNTIpOyAgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICB9CiAgICBmb3IgKDs7KQogICAgewogICAgICBpZiAobDEgIT0gNDEpICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHNoaWZ0KDQxKTsgICAgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICBsb29rYWhlYWQxVygyMSk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgICBzaGlmdCgzMSk7ICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgICAgbG9va2FoZWFkMVcoMjU0KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1Zhck5hbWUoKTsKICAgICAgbG9va2FoZWFkMVcoMTU3KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnIHwgJ2FzJwogICAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICAgIHsKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgIH0KICAgICAgbG9va2FoZWFkMVcoMTQ1KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnCiAgICAgIGlmIChsMSA9PSA1MikgICAgICAgICAgICAgICAgIC8vICc6PScKICAgICAgewogICAgICAgIHNoaWZ0KDUyKTsgICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICAgIH0KICAgIH0KICAgIHNoaWZ0KDUzKTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzsnCiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlZhckRlY2xTdGF0ZW1lbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfVmFyRGVjbFN0YXRlbWVudCgpCiAgewogICAgZm9yICg7OykKICAgIHsKICAgICAgbG9va2FoZWFkMVcoOTgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICclJyB8ICcoOicgfCAndmFyaWFibGUnCiAgICAgIGlmIChsMSAhPSAzMikgICAgICAgICAgICAgICAgIC8vICclJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdHJ5X0Fubm90YXRpb24oKTsKICAgIH0KICAgIHNoaWZ0VCgyNjIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhcmlhYmxlJwogICAgbG9va2FoZWFkMVcoMjEpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyQnIHwgJyg6JwogICAgc2hpZnRUKDMxKTsgICAgICAgICAgICAgICAgICAgICAvLyAnJCcKICAgIGxvb2thaGVhZDFXKDI1NCk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgdHJ5X1Zhck5hbWUoKTsKICAgIGxvb2thaGVhZDFXKDE1Nyk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnIHwgJ2FzJwogICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgICAgICAgICAvLyAnYXMnCiAgICB7CiAgICAgIHRyeV9UeXBlRGVjbGFyYXRpb24oKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDE0NSk7ICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnLCcgfCAnOj0nIHwgJzsnCiAgICBpZiAobDEgPT0gNTIpICAgICAgICAgICAgICAgICAgIC8vICc6PScKICAgIHsKICAgICAgc2hpZnRUKDUyKTsgICAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIH0KICAgIGZvciAoOzspCiAgICB7CiAgICAgIGlmIChsMSAhPSA0MSkgICAgICAgICAgICAgICAgIC8vICcsJwogICAgICB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2hpZnRUKDQxKTsgICAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIGxvb2thaGVhZDFXKDIxKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnJCcgfCAnKDonCiAgICAgIHNoaWZ0VCgzMSk7ICAgICAgICAgICAgICAgICAgIC8vICckJwogICAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBTXldTIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIHRyeV9WYXJOYW1lKCk7CiAgICAgIGxvb2thaGVhZDFXKDE1Nyk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzo9JyB8ICc7JyB8ICdhcycKICAgICAgaWYgKGwxID09IDc5KSAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgICB7CiAgICAgICAgdHJ5X1R5cGVEZWNsYXJhdGlvbigpOwogICAgICB9CiAgICAgIGxvb2thaGVhZDFXKDE0NSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJywnIHwgJzo9JyB8ICc7JwogICAgICBpZiAobDEgPT0gNTIpICAgICAgICAgICAgICAgICAvLyAnOj0nCiAgICAgIHsKICAgICAgICBzaGlmdFQoNTIpOyAgICAgICAgICAgICAgICAgLy8gJzo9JwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICB9CiAgICB9CiAgICBzaGlmdFQoNTMpOyAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfV2hpbGVTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJXaGlsZVN0YXRlbWVudCIsIGUwKTsKICAgIHNoaWZ0KDI2Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByKCk7CiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1N0YXRlbWVudCgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJXaGlsZVN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9XaGlsZVN0YXRlbWVudCgpCiAgewogICAgc2hpZnRUKDI2Nyk7ICAgICAgICAgICAgICAgICAgICAvLyAnd2hpbGUnCiAgICBsb29rYWhlYWQxVygyMik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKCcgfCAnKDonCiAgICBzaGlmdFQoMzQpOyAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByKCk7CiAgICBzaGlmdFQoMzcpOyAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMjY5KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX1ZvaWRTdGF0ZW1lbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJWb2lkU3RhdGVtZW50IiwgZTApOwogICAgc2hpZnQoNTMpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnOycKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiVm9pZFN0YXRlbWVudCIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Wb2lkU3RhdGVtZW50KCkKICB7CiAgICBzaGlmdFQoNTMpOyAgICAgICAgICAgICAgICAgICAgIC8vICc7JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRXhwclNpbmdsZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkV4cHJTaW5nbGUiLCBlMCk7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgICBsb29rYWhlYWQyVygyMzUpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfAogICAgICBicmVhazsKICAgIGNhc2UgMTc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcKICAgICAgbG9va2FoZWFkMlcoMjMyKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnJCcgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDI1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknCiAgICAgIGxvb2thaGVhZDJXKDIzMSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDI0MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnCiAgICBjYXNlIDI1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlc3dpdGNoJwogICAgICBsb29rYWhlYWQyVygyMjgpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAxNjAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnJCcKICAgIGNhc2UgMTYwNDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJyQnCiAgICBjYXNlIDExNjkxMDogICAgICAgICAgICAgICAgICAgIC8vICdsZXQnICdzY29yZScKICAgIGNhc2UgMTE5OTQ1OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3NsaWRpbmcnCiAgICBjYXNlIDEyODY0OTogICAgICAgICAgICAgICAgICAgIC8vICdmb3InICd0dW1ibGluZycKICAgICAgcGFyc2VfRkxXT1JFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU2MDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcoJwogICAgICBwYXJzZV9JZkV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE3NjUxOiAgICAgICAgICAgICAgICAgICAgIC8vICdzd2l0Y2gnICcoJwogICAgICBwYXJzZV9Td2l0Y2hFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDE1NjI6ICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JyAneycKICAgICAgcGFyc2VfVHJ5Q2F0Y2hFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY2MTogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJygnCiAgICAgIHBhcnNlX1R5cGVzd2l0Y2hFeHByKCk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfRXhwclNpbXBsZSgpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJFeHByU2luZ2xlIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0V4cHJTaW5nbGUoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDEzNzogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InCiAgICAgIGxvb2thaGVhZDJXKDIzNSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgICBsb29rYWhlYWQyVygyMzIpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfAogICAgICBicmVhazsKICAgIGNhc2UgMjUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgICAgbG9va2FoZWFkMlcoMjMxKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDE1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpZicKICAgIGNhc2UgMjQzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N3aXRjaCcKICAgIGNhc2UgMjUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R5cGVzd2l0Y2gnCiAgICAgIGxvb2thaGVhZDJXKDIyOCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE2MDA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdmb3InICckJwogICAgY2FzZSAxNjA0NjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnJCcKICAgIGNhc2UgMTE2OTEwOiAgICAgICAgICAgICAgICAgICAgLy8gJ2xldCcgJ3Njb3JlJwogICAgY2FzZSAxMTk5NDU6ICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnc2xpZGluZycKICAgIGNhc2UgMTI4NjQ5OiAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicgJ3R1bWJsaW5nJwogICAgICB0cnlfRkxXT1JFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzU2MDogICAgICAgICAgICAgICAgICAgICAvLyAnaWYnICcoJwogICAgICB0cnlfSWZFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY1MTogICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJyAnKCcKICAgICAgdHJ5X1N3aXRjaEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MTU2MjogICAgICAgICAgICAgICAgICAgIC8vICd0cnknICd7JwogICAgICB0cnlfVHJ5Q2F0Y2hFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzY2MTogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcgJygnCiAgICAgIHRyeV9UeXBlc3dpdGNoRXhwcigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FeHByU2ltcGxlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9FeHByU2ltcGxlKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRXhwclNpbXBsZSIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICAgIGxvb2thaGVhZDJXKDIzMCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgICBsb29rYWhlYWQyVygyMzMpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGNhc2UgMjE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICAgIGxvb2thaGVhZDJXKDIzNCk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8ICcvJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICBsb29rYWhlYWQyVygyMzYpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTAzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknCiAgICBjYXNlIDEyOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScKICAgIGNhc2UgMjM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnCiAgICAgIGxvb2thaGVhZDJXKDIyOSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCBFT0YgfCAnIScgfCAnIT0nIHwgJyMnIHwgJyQnIHwgJygnIHwgJyg6JyB8ICcpJyB8ICcqJyB8ICcrJyB8ICcsJyB8ICctJyB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAxMzM4NTEpICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICd2YWx1ZScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCg5LCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHRyeV9SZXBsYWNlRXhwcigpOwogICAgICAgICAgbGsgPSAtNjsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHA2QSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0xMTsKICAgICAgICB9CiAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgIG1lbW9pemUoOSwgZTAsIGxrKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgMTYwMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JyAnJCcKICAgIGNhc2UgMTYxMDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NvbWUnICckJwogICAgICBwYXJzZV9RdWFudGlmaWVkRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgOTc5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ25vZGUnCiAgICBjYXNlIDk4NDYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICdub2RlcycKICAgICAgcGFyc2VfSW5zZXJ0RXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgOTc5MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ25vZGUnCiAgICBjYXNlIDk4NDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdub2RlcycKICAgICAgcGFyc2VfRGVsZXRlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgOTgwMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScgJ25vZGUnCiAgICAgIHBhcnNlX1JlbmFtZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC02OgogICAgY2FzZSA5ODAxMTogICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJ25vZGUnCiAgICAgIHBhcnNlX1JlcGxhY2VFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTk3NTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJyQnCiAgICAgIHBhcnNlX1RyYW5zZm9ybUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg1MTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdqc29uJwogICAgICBwYXJzZV9KU09ORGVsZXRlRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgODUxNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ2pzb24nCiAgICAgIHBhcnNlX0pTT05JbnNlcnRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTIxMDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnanNvbicKICAgICAgcGFyc2VfSlNPTlJlbmFtZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMToKICAgICAgcGFyc2VfSlNPTlJlcGxhY2VFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTA2OTogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnanNvbicKICAgICAgcGFyc2VfSlNPTkFwcGVuZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBwYXJzZV9PckV4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRXhwclNpbXBsZSIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9FeHByU2ltcGxlKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSA3NzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgICBsb29rYWhlYWQyVygyMzApOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgICAgbG9va2FoZWFkMlcoMjMzKTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJwogICAgICBsb29rYWhlYWQyVygyMzQpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfCAnLycgfAogICAgICBicmVhazsKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMlcoMjM2KTsgICAgICAgICAgICAgLy8gU15XUyB8IEVPRiB8ICchJyB8ICchPScgfCAnIycgfCAnKCcgfCAnKDonIHwgJyknIHwgJyonIHwgJysnIHwgJywnIHwgJy0nIHwgJy8nIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgICBsb29rYWhlYWQyVygyMjkpOyAgICAgICAgICAgICAvLyBTXldTIHwgRU9GIHwgJyEnIHwgJyE9JyB8ICcjJyB8ICckJyB8ICcoJyB8ICcoOicgfCAnKScgfCAnKicgfCAnKycgfCAnLCcgfCAnLScgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTMzODUxKSAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAndmFsdWUnCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoOSwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfUmVwbGFjZUV4cHIoKTsKICAgICAgICAgIG1lbW9pemUoOSwgZTBBLCAtNik7CiAgICAgICAgICBsayA9IC0xMzsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHA2QSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0xMTsKICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICBtZW1vaXplKDksIGUwQSwgLTExKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDE2MDAxOiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJyQnCiAgICBjYXNlIDE2MTA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnJCcKICAgICAgdHJ5X1F1YW50aWZpZWRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA5Nzk1MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnbm9kZScKICAgIGNhc2UgOTg0NjM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcgJ25vZGVzJwogICAgICB0cnlfSW5zZXJ0RXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgOTc5MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJ25vZGUnCiAgICBjYXNlIDk4NDE0OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICdub2RlcycKICAgICAgdHJ5X0RlbGV0ZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDk4MDEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICdub2RlJwogICAgICB0cnlfUmVuYW1lRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTY6CiAgICBjYXNlIDk4MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXBsYWNlJyAnbm9kZScKICAgICAgdHJ5X1JlcGxhY2VFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNTk3NTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJyQnCiAgICAgIHRyeV9UcmFuc2Zvcm1FeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTEwMjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyAnanNvbicKICAgICAgdHJ5X0pTT05EZWxldGVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTE1MTogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JyAnanNvbicKICAgICAgdHJ5X0pTT05JbnNlcnRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA4NTIxMDogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnanNvbicKICAgICAgdHJ5X0pTT05SZW5hbWVFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTE6CiAgICAgIHRyeV9KU09OUmVwbGFjZUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDg1MDY5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICdqc29uJwogICAgICB0cnlfSlNPTkFwcGVuZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMzoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfT3JFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09ORGVsZXRlRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05EZWxldGVFeHByIiwgZTApOwogICAgc2hpZnQoMTEwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdqc29uJwogICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGxvb2thaGVhZDFXKDI2Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Bvc3RmaXhFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05EZWxldGVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0pTT05EZWxldGVFeHByKCkKICB7CiAgICBzaGlmdFQoMTEwKTsgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnCiAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2pzb24nCiAgICBzaGlmdFQoMTY2KTsgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgbG9va2FoZWFkMVcoMjYzKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1Bvc3RmaXhFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OSW5zZXJ0RXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05JbnNlcnRFeHByIiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTU5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMlcoNTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgbGsgPSBtZW1vaXplZCgxMCwgZTApOwogICAgaWYgKGxrID09IDApCiAgICB7CiAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICB0cnkKICAgICAgewogICAgICAgIHNoaWZ0VCgxNTkpOyAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgICAgIGxvb2thaGVhZDFXKDU2KTsgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdqc29uJwogICAgICAgIHNoaWZ0VCgxNjYpOyAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICBzaGlmdFQoMTYzKTsgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgc3dpdGNoIChsMSkKICAgICAgICB7CiAgICAgICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgIGxvb2thaGVhZDJXKDY5KTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgbGsgPSBsMTsKICAgICAgICB9CiAgICAgICAgaWYgKGxrID09IDEwODExMykgICAgICAgICAgIC8vICdhdCcgJ3Bvc2l0aW9uJwogICAgICAgIHsKICAgICAgICAgIGxrID0gbWVtb2l6ZWQoMTEsIGUwKTsKICAgICAgICAgIGlmIChsayA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICB2YXIgYjBCID0gYjA7IHZhciBlMEIgPSBlMDsgdmFyIGwxQiA9IGwxOwogICAgICAgICAgICB2YXIgYjFCID0gYjE7IHZhciBlMUIgPSBlMTsgdmFyIGwyQiA9IGwyOwogICAgICAgICAgICB2YXIgYjJCID0gYjI7IHZhciBlMkIgPSBlMjsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaGlmdFQoODEpOyAgICAgICAgICAgLy8gJ2F0JwogICAgICAgICAgICAgIGxvb2thaGVhZDFXKDY5KTsgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwb3NpdGlvbicKICAgICAgICAgICAgICBzaGlmdFQoMjExKTsgICAgICAgICAgLy8gJ3Bvc2l0aW9uJwogICAgICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgICAgIG1lbW9pemUoMTEsIGUwQiwgLTEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChwMUIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBiMCA9IGIwQjsgZTAgPSBlMEI7IGwxID0gbDFCOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQjt9IGVsc2UgewogICAgICAgICAgICAgIGIxID0gYjFCOyBlMSA9IGUxQjsgbDIgPSBsMkI7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFCO30gZWxzZSB7CiAgICAgICAgICAgICAgYjIgPSBiMkI7IGUyID0gZTJCOyBlbmQgPSBlMkI7IH19CiAgICAgICAgICAgICAgbWVtb2l6ZSgxMSwgZTBCLCAtMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGxrID09IC0xKQogICAgICAgIHsKICAgICAgICAgIHNoaWZ0VCg4MSk7ICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgICAgbG9va2FoZWFkMVcoNjkpOyAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwb3NpdGlvbicKICAgICAgICAgIHNoaWZ0VCgyMTEpOyAgICAgICAgICAgICAgLy8gJ3Bvc2l0aW9uJwogICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgfQogICAgICAgIGxrID0gLTE7CiAgICAgIH0KICAgICAgY2F0Y2ggKHAxQSkKICAgICAgewogICAgICAgIGxrID0gLTI7CiAgICAgIH0KICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgIG1lbW9pemUoMTAsIGUwLCBsayk7CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSAtMToKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgICAgc3dpdGNoIChsMSkKICAgICAgewogICAgICBjYXNlIDgxOiAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgbG9va2FoZWFkMlcoNjkpOyAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGxrID0gbDE7CiAgICAgIH0KICAgICAgaWYgKGxrID09IDEwODExMykgICAgICAgICAgICAgLy8gJ2F0JyAncG9zaXRpb24nCiAgICAgIHsKICAgICAgICBsayA9IG1lbW9pemVkKDExLCBlMCk7CiAgICAgICAgaWYgKGxrID09IDApCiAgICAgICAgewogICAgICAgICAgdmFyIGIwQiA9IGIwOyB2YXIgZTBCID0gZTA7IHZhciBsMUIgPSBsMTsKICAgICAgICAgIHZhciBiMUIgPSBiMTsgdmFyIGUxQiA9IGUxOyB2YXIgbDJCID0gbDI7CiAgICAgICAgICB2YXIgYjJCID0gYjI7IHZhciBlMkIgPSBlMjsKICAgICAgICAgIHRyeQogICAgICAgICAgewogICAgICAgICAgICBzaGlmdFQoODEpOyAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgICAgIGxvb2thaGVhZDFXKDY5KTsgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgICAgICBzaGlmdFQoMjExKTsgICAgICAgICAgICAvLyAncG9zaXRpb24nCiAgICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgICAgICBsayA9IC0xOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgIHsKICAgICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIH0KICAgICAgICAgIGIwID0gYjBCOyBlMCA9IGUwQjsgbDEgPSBsMUI7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBCO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQjsgZTEgPSBlMUI7IGwyID0gbDJCOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQjt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkI7IGUyID0gZTJCOyBlbmQgPSBlMkI7IH19CiAgICAgICAgICBtZW1vaXplKDExLCBlMCwgbGspOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobGsgPT0gLTEpCiAgICAgIHsKICAgICAgICBzaGlmdCg4MSk7ICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgICAgIGxvb2thaGVhZDFXKDY5KTsgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdwb3NpdGlvbicKICAgICAgICBzaGlmdCgyMTEpOyAgICAgICAgICAgICAgICAgLy8gJ3Bvc2l0aW9uJwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnQoMTU5KTsgICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX1BhaXJDb25zdHJ1Y3Rvckxpc3QoKTsKICAgICAgc2hpZnQoMTYzKTsgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTkluc2VydEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTkluc2VydEV4cHIoKQogIHsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGxvb2thaGVhZDJXKDU2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2pzb24nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGxrID0gbWVtb2l6ZWQoMTAsIGUwKTsKICAgIGlmIChsayA9PSAwKQogICAgewogICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgdHJ5CiAgICAgIHsKICAgICAgICBzaGlmdFQoMTU5KTsgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgICAgICBzaGlmdFQoMTY2KTsgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgc2hpZnRUKDE2Myk7ICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgIHN3aXRjaCAobDEpCiAgICAgICAgewogICAgICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICAgICAgICBsb29rYWhlYWQyVyg2OSk7ICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3Bvc2l0aW9uJwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGxrID0gbDE7CiAgICAgICAgfQogICAgICAgIGlmIChsayA9PSAxMDgxMTMpICAgICAgICAgICAvLyAnYXQnICdwb3NpdGlvbicKICAgICAgICB7CiAgICAgICAgICBsayA9IG1lbW9pemVkKDExLCBlMCk7CiAgICAgICAgICBpZiAobGsgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgdmFyIGIwQiA9IGIwOyB2YXIgZTBCID0gZTA7IHZhciBsMUIgPSBsMTsKICAgICAgICAgICAgdmFyIGIxQiA9IGIxOyB2YXIgZTFCID0gZTE7IHZhciBsMkIgPSBsMjsKICAgICAgICAgICAgdmFyIGIyQiA9IGIyOyB2YXIgZTJCID0gZTI7CiAgICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgICAgICBsb29rYWhlYWQxVyg2OSk7ICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICAgICAgc2hpZnRUKDIxMSk7ICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgICAgICAgICBtZW1vaXplKDExLCBlMEIsIC0xKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAocDFCKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgICAgICBiMSA9IGIxQjsgZTEgPSBlMUI7IGwyID0gbDJCOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQjt9IGVsc2UgewogICAgICAgICAgICAgIGIyID0gYjJCOyBlMiA9IGUyQjsgZW5kID0gZTJCOyB9fQogICAgICAgICAgICAgIG1lbW9pemUoMTEsIGUwQiwgLTIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxrID0gLTI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChsayA9PSAtMSkKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoODEpOyAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgIGxvb2thaGVhZDFXKDY5KTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICBzaGlmdFQoMjExKTsgICAgICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICAgIH0KICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC0xKTsKICAgICAgICBsayA9IC0zOwogICAgICB9CiAgICAgIGNhdGNoIChwMUEpCiAgICAgIHsKICAgICAgICBsayA9IC0yOwogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDEwLCBlMEEsIC0yKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHNoaWZ0VCgxNTkpOyAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICAgIGxvb2thaGVhZDFXKDU2KTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2pzb24nCiAgICAgIHNoaWZ0VCgxNjYpOyAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgc2hpZnRUKDE2Myk7ICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgICBzd2l0Y2ggKGwxKQogICAgICB7CiAgICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICBsb29rYWhlYWQyVyg2OSk7ICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgbGsgPSBsMTsKICAgICAgfQogICAgICBpZiAobGsgPT0gMTA4MTEzKSAgICAgICAgICAgICAvLyAnYXQnICdwb3NpdGlvbicKICAgICAgewogICAgICAgIGxrID0gbWVtb2l6ZWQoMTEsIGUwKTsKICAgICAgICBpZiAobGsgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB2YXIgYjBCID0gYjA7IHZhciBlMEIgPSBlMDsgdmFyIGwxQiA9IGwxOwogICAgICAgICAgdmFyIGIxQiA9IGIxOyB2YXIgZTFCID0gZTE7IHZhciBsMkIgPSBsMjsKICAgICAgICAgIHZhciBiMkIgPSBiMjsgdmFyIGUyQiA9IGUyOwogICAgICAgICAgdHJ5CiAgICAgICAgICB7CiAgICAgICAgICAgIHNoaWZ0VCg4MSk7ICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICAgICAgbG9va2FoZWFkMVcoNjkpOyAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgICAgIHNoaWZ0VCgyMTEpOyAgICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICAgICAgICAgIG1lbW9pemUoMTEsIGUwQiwgLTEpOwogICAgICAgICAgfQogICAgICAgICAgY2F0Y2ggKHAxQikKICAgICAgICAgIHsKICAgICAgICAgICAgYjAgPSBiMEI7IGUwID0gZTBCOyBsMSA9IGwxQjsgaWYgKGwxID09IDApIHtlbmQgPSBlMEI7fSBlbHNlIHsKICAgICAgICAgICAgYjEgPSBiMUI7IGUxID0gZTFCOyBsMiA9IGwyQjsgaWYgKGwyID09IDApIHtlbmQgPSBlMUI7fSBlbHNlIHsKICAgICAgICAgICAgYjIgPSBiMkI7IGUyID0gZTJCOyBlbmQgPSBlMkI7IH19CiAgICAgICAgICAgIG1lbW9pemUoMTEsIGUwQiwgLTIpOwogICAgICAgICAgfQogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxrID09IC0xKQogICAgICB7CiAgICAgICAgc2hpZnRUKDgxKTsgICAgICAgICAgICAgICAgIC8vICdhdCcKICAgICAgICBsb29rYWhlYWQxVyg2OSk7ICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAncG9zaXRpb24nCiAgICAgICAgc2hpZnRUKDIxMSk7ICAgICAgICAgICAgICAgIC8vICdwb3NpdGlvbicKICAgICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgLTM6CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgc2hpZnRUKDE1OSk7ICAgICAgICAgICAgICAgICAgLy8gJ2luc2VydCcKICAgICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgICAgc2hpZnRUKDE2Nik7ICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICB0cnlfUGFpckNvbnN0cnVjdG9yTGlzdCgpOwogICAgICBzaGlmdFQoMTYzKTsgICAgICAgICAgICAgICAgICAvLyAnaW50bycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OUmVuYW1lRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05SZW5hbWVFeHByIiwgZTApOwogICAgc2hpZnQoMjE4KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdqc29uJwogICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGxvb2thaGVhZDFXKDI2Myk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfCBTdHJpbmdMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX1Bvc3RmaXhFeHByKCk7CiAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05SZW5hbWVFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0pTT05SZW5hbWVFeHByKCkKICB7CiAgICBzaGlmdFQoMjE4KTsgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnCiAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2pzb24nCiAgICBzaGlmdFQoMTY2KTsgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgbG9va2FoZWFkMVcoMjYzKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1Bvc3RmaXhFeHByKCk7CiAgICBzaGlmdFQoNzkpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfSlNPTlJlcGxhY2VFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiSlNPTlJlcGxhY2VFeHByIiwgZTApOwogICAgc2hpZnQoMjE5KTsgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgIGxvb2thaGVhZDFXKDgyKTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAndmFsdWUnCiAgICBzaGlmdCgyNjEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScKICAgIGxvb2thaGVhZDFXKDY0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnb2YnCiAgICBzaGlmdCgxOTYpOyAgICAgICAgICAgICAgICAgICAgIC8vICdvZicKICAgIGxvb2thaGVhZDFXKDU2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgIHNoaWZ0KDE2Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICBsb29rYWhlYWQxVygyNjMpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwgU3RyaW5nTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9Qb3N0Zml4RXhwcigpOwogICAgc2hpZnQoMjcwKTsgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkpTT05SZXBsYWNlRXhwciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9KU09OUmVwbGFjZUV4cHIoKQogIHsKICAgIHNoaWZ0VCgyMTkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICBsb29rYWhlYWQxVyg4Mik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3ZhbHVlJwogICAgc2hpZnRUKDI2MSk7ICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICBsb29rYWhlYWQxVyg2NCk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ29mJwogICAgc2hpZnRUKDE5Nik7ICAgICAgICAgICAgICAgICAgICAvLyAnb2YnCiAgICBsb29rYWhlYWQxVyg1Nik7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2pzb24nCiAgICBzaGlmdFQoMTY2KTsgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgbG9va2FoZWFkMVcoMjYzKTsgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8IFN0cmluZ0xpdGVyYWwgfAogICAgdHJ5X1Bvc3RmaXhFeHByKCk7CiAgICBzaGlmdFQoMjcwKTsgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9FeHByU2luZ2xlKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OQXBwZW5kRXhwcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkpTT05BcHBlbmRFeHByIiwgZTApOwogICAgc2hpZnQoNzcpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJwogICAgbG9va2FoZWFkMVcoNTYpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdqc29uJwogICAgc2hpZnQoMTY2KTsgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9FeHByU2luZ2xlKCk7CiAgICBzaGlmdCgxNjMpOyAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTkFwcGVuZEV4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfSlNPTkFwcGVuZEV4cHIoKQogIHsKICAgIHNoaWZ0VCg3Nyk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgIGxvb2thaGVhZDFXKDU2KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnanNvbicKICAgIHNoaWZ0VCgxNjYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0VCgxNjMpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgdHJ5X0V4cHJTaW5nbGUoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbW1vbkNvbnRlbnQoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21tb25Db250ZW50IiwgZTApOwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdCgxMik7ICAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0KDIzKTsgICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnQoMjc3KTsgICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdCgyODMpOyAgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgcGFyc2VfQmxvY2tFeHByKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbW1vbkNvbnRlbnQiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQ29tbW9uQ29udGVudCgpCiAgewogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMTI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlZGVmaW5lZEVudGl0eVJlZgogICAgICBzaGlmdFQoMTIpOyAgICAgICAgICAgICAgICAgICAvLyBQcmVkZWZpbmVkRW50aXR5UmVmCiAgICAgIGJyZWFrOwogICAgY2FzZSAyMzogICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFyUmVmCiAgICAgIHNoaWZ0VCgyMyk7ICAgICAgICAgICAgICAgICAgIC8vIENoYXJSZWYKICAgICAgYnJlYWs7CiAgICBjYXNlIDI3NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd7eycKICAgICAgc2hpZnRUKDI3Nyk7ICAgICAgICAgICAgICAgICAgLy8gJ3t7JwogICAgICBicmVhazsKICAgIGNhc2UgMjgzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ319JwogICAgICBzaGlmdFQoMjgzKTsgICAgICAgICAgICAgICAgICAvLyAnfX0nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0Jsb2NrRXhwcigpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29udGVudEV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb250ZW50RXhwciIsIGUwKTsKICAgIHBhcnNlX1N0YXRlbWVudHNBbmRFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbnRlbnRFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbnRlbnRFeHByKCkKICB7CiAgICB0cnlfU3RhdGVtZW50c0FuZEV4cHIoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBEb2NDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBEb2NDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHNoaWZ0KDExOSk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfQmxvY2tFeHByKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIkNvbXBEb2NDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wRG9jQ29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCgxMTkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgdHJ5X0Jsb2NrRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQ29tcEF0dHJDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBBdHRyQ29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCg4Mik7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyNTcpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwcigpOwogICAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0VRTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI3Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTQ0NjYwKSAgICAgICAgICAgICAgIC8vICd7JyAnfScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgxMiwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgIC8vICd7JwogICAgICAgICAgbG9va2FoZWFkMVcoODgpOyAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAvLyAnfScKICAgICAgICAgIGxrID0gLTE7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMjsKICAgICAgICB9CiAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgIGIyID0gYjJBOyBlMiA9IGUyQTsgZW5kID0gZTJBOyB9fQogICAgICAgIG1lbW9pemUoMTIsIGUwLCBsayk7CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoODgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnfScKICAgICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9CbG9ja0V4cHIoKTsKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tcEF0dHJDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wQXR0ckNvbnN0cnVjdG9yKCkKICB7CiAgICBzaGlmdFQoODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnCiAgICBsb29rYWhlYWQxVygyNTcpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9FeHByKCk7CiAgICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9FUU5hbWUoKTsKICAgIH0KICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDI3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQyVygyNzYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDE0NDY2MCkgICAgICAgICAgICAgICAvLyAneycgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTIsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgc2hpZnRUKDI3Nik7ICAgICAgICAgICAgICAvLyAneycKICAgICAgICAgIGxvb2thaGVhZDFXKDg4KTsgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnfScKICAgICAgICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgLy8gJ30nCiAgICAgICAgICBtZW1vaXplKDEyLCBlMEEsIC0xKTsKICAgICAgICAgIGxrID0gLTM7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMUEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMjsKICAgICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgICBiMSA9IGIxQTsgZTEgPSBlMUE7IGwyID0gbDJBOyBpZiAobDIgPT0gMCkge2VuZCA9IGUxQTt9IGVsc2UgewogICAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgICBtZW1vaXplKDEyLCBlMEEsIC0yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIC0xOgogICAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMVcoODgpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAnfScKICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgY2FzZSAtMzoKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0cnlfQmxvY2tFeHByKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wUElDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkNvbXBQSUNvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoMjE2KTsgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGxvb2thaGVhZDFXKDI1MCk7ICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICAgIHNoaWZ0KDI4Mik7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfTkNOYW1lKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAyNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMlcoMjc2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAxNDQ2NjApICAgICAgICAgICAgICAgLy8gJ3snICd9JwogICAgewogICAgICBsayA9IG1lbW9pemVkKDEzLCBlMCk7CiAgICAgIGlmIChsayA9PSAwKQogICAgICB7CiAgICAgICAgdmFyIGIwQSA9IGIwOyB2YXIgZTBBID0gZTA7IHZhciBsMUEgPSBsMTsKICAgICAgICB2YXIgYjFBID0gYjE7IHZhciBlMUEgPSBlMTsgdmFyIGwyQSA9IGwyOwogICAgICAgIHZhciBiMkEgPSBiMjsgdmFyIGUyQSA9IGUyOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgLy8gJ3snCiAgICAgICAgICBsb29rYWhlYWQxVyg4OCk7ICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ30nCiAgICAgICAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgIC8vICd9JwogICAgICAgICAgbGsgPSAtMTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgIH0KICAgICAgICBiMCA9IGIwQTsgZTAgPSBlMEE7IGwxID0gbDFBOyBpZiAobDEgPT0gMCkge2VuZCA9IGUwQTt9IGVsc2UgewogICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgYjIgPSBiMkE7IGUyID0gZTJBOyBlbmQgPSBlMkE7IH19CiAgICAgICAgbWVtb2l6ZSgxMywgZTAsIGxrKTsKICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVyg4OCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIHBhcnNlX0Jsb2NrRXhwcigpOwogICAgfQogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wUElDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wUElDb25zdHJ1Y3RvcigpCiAgewogICAgc2hpZnRUKDIxNik7ICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgIGxvb2thaGVhZDFXKDI1MCk7ICAgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgdHJ5X0V4cHIoKTsKICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X05DTmFtZSgpOwogICAgfQogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI3Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGxrID0gbDE7CiAgICB9CiAgICBpZiAobGsgPT0gMTQ0NjYwKSAgICAgICAgICAgICAgIC8vICd7JyAnfScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgxMywgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgIC8vICd7JwogICAgICAgICAgbG9va2FoZWFkMVcoODgpOyAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICAgICAgc2hpZnRUKDI4Mik7ICAgICAgICAgICAgICAvLyAnfScKICAgICAgICAgIG1lbW9pemUoMTMsIGUwQSwgLTEpOwogICAgICAgICAgbGsgPSAtMzsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxQSkKICAgICAgICB7CiAgICAgICAgICBsayA9IC0yOwogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMTMsIGUwQSwgLTIpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3dpdGNoIChsaykKICAgIHsKICAgIGNhc2UgLTE6CiAgICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVyg4OCk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd9JwogICAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAvLyAnfScKICAgICAgYnJlYWs7CiAgICBjYXNlIC0zOgogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHRyeV9CbG9ja0V4cHIoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX0NvbXBDb21tZW50Q29uc3RydWN0b3IoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJDb21wQ29tbWVudENvbnN0cnVjdG9yIiwgZTApOwogICAgc2hpZnQoOTYpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcKICAgIGxvb2thaGVhZDFXKDg3KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICcoOicgfCAneycKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0Jsb2NrRXhwcigpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJDb21wQ29tbWVudENvbnN0cnVjdG9yIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0NvbXBDb21tZW50Q29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCg5Nik7ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB0cnlfQmxvY2tFeHByKCk7CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9Db21wVGV4dENvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQ29tcFRleHRDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHNoaWZ0KDI0NCk7ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RleHQnCiAgICBsb29rYWhlYWQxVyg4Nyk7ICAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ3snCiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9CbG9ja0V4cHIoKTsKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQ29tcFRleHRDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9Db21wVGV4dENvbnN0cnVjdG9yKCkKICB7CiAgICBzaGlmdFQoMjQ0KTsgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgbG9va2FoZWFkMVcoODcpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICd7JwogICAgdHJ5X0Jsb2NrRXhwcigpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUHJpbWFyeUV4cHIoKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJQcmltYXJ5RXhwciIsIGUwKTsKICAgIHN3aXRjaCAobDEpCiAgICB7CiAgICBjYXNlIDE4NDogICAgICAgICAgICAgICAgICAgICAgIC8vICduYW1lc3BhY2UnCiAgICAgIGxvb2thaGVhZDJXKDI1NSk7ICAgICAgICAgICAgIC8vIE5DTmFtZV5Ub2tlbiB8IFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDIxNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgICBsb29rYWhlYWQyVygyNTMpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgICAgbG9va2FoZWFkMlcoMjc2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIGJyZWFrOwogICAgY2FzZSA4MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXR0cmlidXRlJwogICAgY2FzZSAxMjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcKICAgICAgbG9va2FoZWFkMlcoMjU4KTsgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgOTY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbW1lbnQnCiAgICBjYXNlIDI0NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd0ZXh0JwogICAgICBsb29rYWhlYWQyVyg5Myk7ICAgICAgICAgICAgICAvLyBTXldTIHwgJyMnIHwgJyg6JyB8ICd7JwogICAgICBicmVhazsKICAgIGNhc2UgMTE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50JwogICAgY2FzZSAyMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcKICAgIGNhc2UgMjU2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcKICAgICAgbG9va2FoZWFkMlcoMTM5KTsgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDY6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbgogICAgY2FzZSA3MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInCiAgICBjYXNlIDcyOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycKICAgIGNhc2UgNzM6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yJwogICAgY2FzZSA3NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicKICAgIGNhc2UgNzU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcKICAgIGNhc2UgNzc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FwcGVuZCcKICAgIGNhc2UgNzk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJwogICAgY2FzZSA4MDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJwogICAgY2FzZSA4MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYXQnCiAgICBjYXNlIDgzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiYXNlLXVyaScKICAgIGNhc2UgODQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScKICAgIGNhc2UgODU6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJwogICAgY2FzZSA4NjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYnJlYWsnCiAgICBjYXNlIDg4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJwogICAgY2FzZSA4OTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcKICAgIGNhc2UgOTA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3RhYmxlJwogICAgY2FzZSA5MTogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnCiAgICBjYXNlIDkzOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcKICAgIGNhc2UgOTQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbGxhdGlvbicKICAgIGNhc2UgOTc6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnCiAgICBjYXNlIDk4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJ1Y3Rpb24nCiAgICBjYXNlIDEwMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JwogICAgY2FzZSAxMDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnCiAgICBjYXNlIDEwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5JwogICAgY2FzZSAxMDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJwogICAgY2FzZSAxMDU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnCiAgICBjYXNlIDEwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNpbWFsLWZvcm1hdCcKICAgIGNhc2UgMTA4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnCiAgICBjYXNlIDEwOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JwogICAgY2FzZSAxMTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJwogICAgY2FzZSAxMTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcKICAgIGNhc2UgMTEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgIGNhc2UgMTEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRpbmcnCiAgICBjYXNlIDExODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnCiAgICBjYXNlIDEyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJwogICAgY2FzZSAxMjM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW1wdHknCiAgICBjYXNlIDEyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmNvZGluZycKICAgIGNhc2UgMTI2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcKICAgIGNhc2UgMTI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VxJwogICAgY2FzZSAxMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXZlcnknCiAgICBjYXNlIDEzMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnCiAgICBjYXNlIDEzMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdleGl0JwogICAgY2FzZSAxMzM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXh0ZXJuYWwnCiAgICBjYXNlIDEzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcKICAgIGNhc2UgMTM1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZycKICAgIGNhc2UgMTM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgY2FzZSAxMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJwogICAgY2FzZSAxNDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZnQtb3B0aW9uJwogICAgY2FzZSAxNDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ2UnCiAgICBjYXNlIDE0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcKICAgIGNhc2UgMTUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2d0JwogICAgY2FzZSAxNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWRpdicKICAgIGNhc2UgMTUzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcKICAgIGNhc2UgMTU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luJwogICAgY2FzZSAxNTU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5kZXgnCiAgICBjYXNlIDE1OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnCiAgICBjYXNlIDE2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnN0YW5jZScKICAgIGNhc2UgMTYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVncml0eScKICAgIGNhc2UgMTYyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcKICAgIGNhc2UgMTYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludG8nCiAgICBjYXNlIDE2NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpcycKICAgIGNhc2UgMTY2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nCiAgICBjYXNlIDE3MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsYXN0JwogICAgY2FzZSAxNzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGF4JwogICAgY2FzZSAxNzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGUnCiAgICBjYXNlIDE3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdsZXQnCiAgICBjYXNlIDE3NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdsb29wJwogICAgY2FzZSAxNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbHQnCiAgICBjYXNlIDE4MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2QnCiAgICBjYXNlIDE4MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2RpZnknCiAgICBjYXNlIDE4MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnCiAgICBjYXNlIDE4NjogICAgICAgICAgICAgICAgICAgICAgIC8vICduZScKICAgIGNhc2UgMTkyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJwogICAgY2FzZSAxOTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb2JqZWN0JwogICAgY2FzZSAxOTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb25seScKICAgIGNhc2UgMTk5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicKICAgIGNhc2UgMjAwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yJwogICAgY2FzZSAyMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXInCiAgICBjYXNlIDIwMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmluZycKICAgIGNhc2UgMjA2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcKICAgIGNhc2UgMjEyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZycKICAgIGNhc2UgMjEzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ByZWNlZGluZy1zaWJsaW5nJwogICAgY2FzZSAyMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJwogICAgY2FzZSAyMTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScKICAgIGNhc2UgMjIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybicKICAgIGNhc2UgMjIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycKICAgIGNhc2UgMjIyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicKICAgIGNhc2UgMjI0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NhdGlzZmllcycKICAgIGNhc2UgMjI1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScKICAgIGNhc2UgMjI4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJwogICAgY2FzZSAyMjk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2VsZicKICAgIGNhc2UgMjM0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnCiAgICBjYXNlIDIzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJwogICAgY2FzZSAyMzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhYmxlJwogICAgY2FzZSAyMzc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnCiAgICBjYXNlIDI0MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnCiAgICBjYXNlIDI0ODogICAgICAgICAgICAgICAgICAgICAgIC8vICd0bycKICAgIGNhc2UgMjQ5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JwogICAgY2FzZSAyNTA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHJ5JwogICAgY2FzZSAyNTE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnCiAgICBjYXNlIDI1MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJwogICAgY2FzZSAyNTQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndW5pb24nCiAgICBjYXNlIDI1NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycKICAgIGNhc2UgMjYwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbGlkYXRlJwogICAgY2FzZSAyNjE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnCiAgICBjYXNlIDI2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScKICAgIGNhc2UgMjYzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZlcnNpb24nCiAgICBjYXNlIDI2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScKICAgIGNhc2UgMjY3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJwogICAgY2FzZSAyNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2l0aCcKICAgIGNhc2UgMjc0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScKICAgICAgbG9va2FoZWFkMlcoOTIpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoJyB8ICcoOicKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBsayA9IGwxOwogICAgfQogICAgaWYgKGxrID09IDI4MzYgICAgICAgICAgICAgICAgICAvLyAneycgV2lsZGNhcmQKICAgICB8fCBsayA9PSAzMzQ4ICAgICAgICAgICAgICAgICAgLy8gJ3snIEVRTmFtZV5Ub2tlbgogICAgIHx8IGxrID09IDQzNzIgICAgICAgICAgICAgICAgICAvLyAneycgSW50ZWdlckxpdGVyYWwKICAgICB8fCBsayA9PSA0ODg0ICAgICAgICAgICAgICAgICAgLy8gJ3snIERlY2ltYWxMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTM5NiAgICAgICAgICAgICAgICAgIC8vICd7JyBEb3VibGVMaXRlcmFsCiAgICAgfHwgbGsgPT0gNTkwOCAgICAgICAgICAgICAgICAgIC8vICd7JyBTdHJpbmdMaXRlcmFsCiAgICAgfHwgbGsgPT0gMTYxNDggICAgICAgICAgICAgICAgIC8vICd7JyAnJCcKICAgICB8fCBsayA9PSAxNjY2MCAgICAgICAgICAgICAgICAgLy8gJ3snICclJwogICAgIHx8IGxrID09IDE3Njg0ICAgICAgICAgICAgICAgICAvLyAneycgJygnCiAgICAgfHwgbGsgPT0gMTgxOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnKCMnCiAgICAgfHwgbGsgPT0gMjA3NTYgICAgICAgICAgICAgICAgIC8vICd7JyAnKycKICAgICB8fCBsayA9PSAyMTc4MCAgICAgICAgICAgICAgICAgLy8gJ3snICctJwogICAgIHx8IGxrID09IDIyODA0ICAgICAgICAgICAgICAgICAvLyAneycgJy4nCiAgICAgfHwgbGsgPT0gMjMzMTYgICAgICAgICAgICAgICAgIC8vICd7JyAnLi4nCiAgICAgfHwgbGsgPT0gMjM4MjggICAgICAgICAgICAgICAgIC8vICd7JyAnLycKICAgICB8fCBsayA9PSAyNDM0MCAgICAgICAgICAgICAgICAgLy8gJ3snICcvLycKICAgICB8fCBsayA9PSAyNzkyNCAgICAgICAgICAgICAgICAgLy8gJ3snICc8JwogICAgIHx8IGxrID09IDI4NDM2ICAgICAgICAgICAgICAgICAvLyAneycgJzwhLS0nCiAgICAgfHwgbGsgPT0gMzA0ODQgICAgICAgICAgICAgICAgIC8vICd7JyAnPD8nCiAgICAgfHwgbGsgPT0gMzQwNjggICAgICAgICAgICAgICAgIC8vICd7JyAnQCcKICAgICB8fCBsayA9PSAzNTA5MiAgICAgICAgICAgICAgICAgLy8gJ3snICdbJwogICAgIHx8IGxrID09IDM2MTE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2FmdGVyJwogICAgIHx8IGxrID09IDM3MTQwICAgICAgICAgICAgICAgICAvLyAneycgJ2FsbG93aW5nJwogICAgIHx8IGxrID09IDM3NjUyICAgICAgICAgICAgICAgICAvLyAneycgJ2FuY2VzdG9yJwogICAgIHx8IGxrID09IDM4MTY0ICAgICAgICAgICAgICAgICAvLyAneycgJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICAgfHwgbGsgPT0gMzg2NzYgICAgICAgICAgICAgICAgIC8vICd7JyAnYW5kJwogICAgIHx8IGxrID09IDM5NzAwICAgICAgICAgICAgICAgICAvLyAneycgJ2FwcGVuZCcKICAgICB8fCBsayA9PSA0MDIxMiAgICAgICAgICAgICAgICAgLy8gJ3snICdhcnJheScKICAgICB8fCBsayA9PSA0MDcyNCAgICAgICAgICAgICAgICAgLy8gJ3snICdhcycKICAgICB8fCBsayA9PSA0MTIzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdhc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNDE3NDggICAgICAgICAgICAgICAgIC8vICd7JyAnYXQnCiAgICAgfHwgbGsgPT0gNDIyNjAgICAgICAgICAgICAgICAgIC8vICd7JyAnYXR0cmlidXRlJwogICAgIHx8IGxrID09IDQyNzcyICAgICAgICAgICAgICAgICAvLyAneycgJ2Jhc2UtdXJpJwogICAgIHx8IGxrID09IDQzMjg0ICAgICAgICAgICAgICAgICAvLyAneycgJ2JlZm9yZScKICAgICB8fCBsayA9PSA0Mzc5NiAgICAgICAgICAgICAgICAgLy8gJ3snICdib3VuZGFyeS1zcGFjZScKICAgICB8fCBsayA9PSA0NDMwOCAgICAgICAgICAgICAgICAgLy8gJ3snICdicmVhaycKICAgICB8fCBsayA9PSA0NTMzMiAgICAgICAgICAgICAgICAgLy8gJ3snICdjYXNlJwogICAgIHx8IGxrID09IDQ1ODQ0ICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc3QnCiAgICAgfHwgbGsgPT0gNDYzNTYgICAgICAgICAgICAgICAgIC8vICd7JyAnY2FzdGFibGUnCiAgICAgfHwgbGsgPT0gNDY4NjggICAgICAgICAgICAgICAgIC8vICd7JyAnY2F0Y2gnCiAgICAgfHwgbGsgPT0gNDc4OTIgICAgICAgICAgICAgICAgIC8vICd7JyAnY2hpbGQnCiAgICAgfHwgbGsgPT0gNDg0MDQgICAgICAgICAgICAgICAgIC8vICd7JyAnY29sbGF0aW9uJwogICAgIHx8IGxrID09IDQ5NDI4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbW1lbnQnCiAgICAgfHwgbGsgPT0gNDk5NDAgICAgICAgICAgICAgICAgIC8vICd7JyAnY29uc3RyYWludCcKICAgICB8fCBsayA9PSA1MDQ1MiAgICAgICAgICAgICAgICAgLy8gJ3snICdjb25zdHJ1Y3Rpb24nCiAgICAgfHwgbGsgPT0gNTE5ODggICAgICAgICAgICAgICAgIC8vICd7JyAnY29udGV4dCcKICAgICB8fCBsayA9PSA1MjUwMCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb250aW51ZScKICAgICB8fCBsayA9PSA1MzAxMiAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3B5JwogICAgIHx8IGxrID09IDUzNTI0ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvcHktbmFtZXNwYWNlcycKICAgICB8fCBsayA9PSA1NDAzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3VudCcKICAgICB8fCBsayA9PSA1NDU0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWNpbWFsLWZvcm1hdCcKICAgICB8fCBsayA9PSA1NTU3MiAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWNsYXJlJwogICAgIHx8IGxrID09IDU2MDg0ICAgICAgICAgICAgICAgICAvLyAneycgJ2RlZmF1bHQnCiAgICAgfHwgbGsgPT0gNTY1OTYgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVsZXRlJwogICAgIHx8IGxrID09IDU3MTA4ICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRhbnQnCiAgICAgfHwgbGsgPT0gNTc2MjAgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVzY2VuZGFudC1vci1zZWxmJwogICAgIHx8IGxrID09IDU4MTMyICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRpbmcnCiAgICAgfHwgbGsgPT0gNjA2OTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZGl2JwogICAgIHx8IGxrID09IDYxMjA0ICAgICAgICAgICAgICAgICAvLyAneycgJ2RvY3VtZW50JwogICAgIHx8IGxrID09IDYxNzE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2RvY3VtZW50LW5vZGUnCiAgICAgfHwgbGsgPT0gNjIyMjggICAgICAgICAgICAgICAgIC8vICd7JyAnZWxlbWVudCcKICAgICB8fCBsayA9PSA2Mjc0MCAgICAgICAgICAgICAgICAgLy8gJ3snICdlbHNlJwogICAgIHx8IGxrID09IDYzMjUyICAgICAgICAgICAgICAgICAvLyAneycgJ2VtcHR5JwogICAgIHx8IGxrID09IDYzNzY0ICAgICAgICAgICAgICAgICAvLyAneycgJ2VtcHR5LXNlcXVlbmNlJwogICAgIHx8IGxrID09IDY0Mjc2ICAgICAgICAgICAgICAgICAvLyAneycgJ2VuY29kaW5nJwogICAgIHx8IGxrID09IDY0Nzg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2VuZCcKICAgICB8fCBsayA9PSA2NTgxMiAgICAgICAgICAgICAgICAgLy8gJ3snICdlcScKICAgICB8fCBsayA9PSA2NjMyNCAgICAgICAgICAgICAgICAgLy8gJ3snICdldmVyeScKICAgICB8fCBsayA9PSA2NzM0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdleGNlcHQnCiAgICAgfHwgbGsgPT0gNjc4NjAgICAgICAgICAgICAgICAgIC8vICd7JyAnZXhpdCcKICAgICB8fCBsayA9PSA2ODM3MiAgICAgICAgICAgICAgICAgLy8gJ3snICdleHRlcm5hbCcKICAgICB8fCBsayA9PSA2ODg4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdmaXJzdCcKICAgICB8fCBsayA9PSA2OTM5NiAgICAgICAgICAgICAgICAgLy8gJ3snICdmb2xsb3dpbmcnCiAgICAgfHwgbGsgPT0gNjk5MDggICAgICAgICAgICAgICAgIC8vICd7JyAnZm9sbG93aW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gNzA0MjAgICAgICAgICAgICAgICAgIC8vICd7JyAnZm9yJwogICAgIHx8IGxrID09IDcyNDY4ICAgICAgICAgICAgICAgICAvLyAneycgJ2Z0LW9wdGlvbicKICAgICB8fCBsayA9PSA3NDUxNiAgICAgICAgICAgICAgICAgLy8gJ3snICdmdW5jdGlvbicKICAgICB8fCBsayA9PSA3NTAyOCAgICAgICAgICAgICAgICAgLy8gJ3snICdnZScKICAgICB8fCBsayA9PSA3NjA1MiAgICAgICAgICAgICAgICAgLy8gJ3snICdncm91cCcKICAgICB8fCBsayA9PSA3NzA3NiAgICAgICAgICAgICAgICAgLy8gJ3snICdndCcKICAgICB8fCBsayA9PSA3NzU4OCAgICAgICAgICAgICAgICAgLy8gJ3snICdpZGl2JwogICAgIHx8IGxrID09IDc4MTAwICAgICAgICAgICAgICAgICAvLyAneycgJ2lmJwogICAgIHx8IGxrID09IDc4NjEyICAgICAgICAgICAgICAgICAvLyAneycgJ2ltcG9ydCcKICAgICB8fCBsayA9PSA3OTEyNCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbicKICAgICB8fCBsayA9PSA3OTYzNiAgICAgICAgICAgICAgICAgLy8gJ3snICdpbmRleCcKICAgICB8fCBsayA9PSA4MTY4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnNlcnQnCiAgICAgfHwgbGsgPT0gODIxOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5zdGFuY2UnCiAgICAgfHwgbGsgPT0gODI3MDggICAgICAgICAgICAgICAgIC8vICd7JyAnaW50ZWdyaXR5JwogICAgIHx8IGxrID09IDgzMjIwICAgICAgICAgICAgICAgICAvLyAneycgJ2ludGVyc2VjdCcKICAgICB8fCBsayA9PSA4MzczMiAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRvJwogICAgIHx8IGxrID09IDg0MjQ0ICAgICAgICAgICAgICAgICAvLyAneycgJ2lzJwogICAgIHx8IGxrID09IDg0NzU2ICAgICAgICAgICAgICAgICAvLyAneycgJ2l0ZW0nCiAgICAgfHwgbGsgPT0gODUyNjggICAgICAgICAgICAgICAgIC8vICd7JyAnanNvbicKICAgICB8fCBsayA9PSA4NTc4MCAgICAgICAgICAgICAgICAgLy8gJ3snICdqc29uLWl0ZW0nCiAgICAgfHwgbGsgPT0gODczMTYgICAgICAgICAgICAgICAgIC8vICd7JyAnbGFzdCcKICAgICB8fCBsayA9PSA4NzgyOCAgICAgICAgICAgICAgICAgLy8gJ3snICdsYXgnCiAgICAgfHwgbGsgPT0gODgzNDAgICAgICAgICAgICAgICAgIC8vICd7JyAnbGUnCiAgICAgfHwgbGsgPT0gODkzNjQgICAgICAgICAgICAgICAgIC8vICd7JyAnbGV0JwogICAgIHx8IGxrID09IDkwMzg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2xvb3AnCiAgICAgfHwgbGsgPT0gOTE0MTIgICAgICAgICAgICAgICAgIC8vICd7JyAnbHQnCiAgICAgfHwgbGsgPT0gOTI0MzYgICAgICAgICAgICAgICAgIC8vICd7JyAnbW9kJwogICAgIHx8IGxrID09IDkyOTQ4ICAgICAgICAgICAgICAgICAvLyAneycgJ21vZGlmeScKICAgICB8fCBsayA9PSA5MzQ2MCAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2R1bGUnCiAgICAgfHwgbGsgPT0gOTQ0ODQgICAgICAgICAgICAgICAgIC8vICd7JyAnbmFtZXNwYWNlJwogICAgIHx8IGxrID09IDk0OTk2ICAgICAgICAgICAgICAgICAvLyAneycgJ25hbWVzcGFjZS1ub2RlJwogICAgIHx8IGxrID09IDk1NTA4ICAgICAgICAgICAgICAgICAvLyAneycgJ25lJwogICAgIHx8IGxrID09IDk4MDY4ICAgICAgICAgICAgICAgICAvLyAneycgJ25vZGUnCiAgICAgfHwgbGsgPT0gOTg1ODAgICAgICAgICAgICAgICAgIC8vICd7JyAnbm9kZXMnCiAgICAgfHwgbGsgPT0gOTk2MDQgICAgICAgICAgICAgICAgIC8vICd7JyAnb2JqZWN0JwogICAgIHx8IGxrID09IDEwMTY1MiAgICAgICAgICAgICAgICAvLyAneycgJ29ubHknCiAgICAgfHwgbGsgPT0gMTAyMTY0ICAgICAgICAgICAgICAgIC8vICd7JyAnb3B0aW9uJwogICAgIHx8IGxrID09IDEwMjY3NiAgICAgICAgICAgICAgICAvLyAneycgJ29yJwogICAgIHx8IGxrID09IDEwMzE4OCAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyJwogICAgIHx8IGxrID09IDEwMzcwMCAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTA0MjEyICAgICAgICAgICAgICAgIC8vICd7JyAnb3JkZXJpbmcnCiAgICAgfHwgbGsgPT0gMTA1NzQ4ICAgICAgICAgICAgICAgIC8vICd7JyAncGFyZW50JwogICAgIHx8IGxrID09IDEwODgyMCAgICAgICAgICAgICAgICAvLyAneycgJ3ByZWNlZGluZycKICAgICB8fCBsayA9PSAxMDkzMzIgICAgICAgICAgICAgICAgLy8gJ3snICdwcmVjZWRpbmctc2libGluZycKICAgICB8fCBsayA9PSAxMTA4NjggICAgICAgICAgICAgICAgLy8gJ3snICdwcm9jZXNzaW5nLWluc3RydWN0aW9uJwogICAgIHx8IGxrID09IDExMTg5MiAgICAgICAgICAgICAgICAvLyAneycgJ3JlbmFtZScKICAgICB8fCBsayA9PSAxMTI0MDQgICAgICAgICAgICAgICAgLy8gJ3snICdyZXBsYWNlJwogICAgIHx8IGxrID09IDExMjkxNiAgICAgICAgICAgICAgICAvLyAneycgJ3JldHVybicKICAgICB8fCBsayA9PSAxMTM0MjggICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm5pbmcnCiAgICAgfHwgbGsgPT0gMTEzOTQwICAgICAgICAgICAgICAgIC8vICd7JyAncmV2YWxpZGF0aW9uJwogICAgIHx8IGxrID09IDExNDk2NCAgICAgICAgICAgICAgICAvLyAneycgJ3NhdGlzZmllcycKICAgICB8fCBsayA9PSAxMTU0NzYgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEnCiAgICAgfHwgbGsgPT0gMTE1OTg4ICAgICAgICAgICAgICAgIC8vICd7JyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgICB8fCBsayA9PSAxMTY1MDAgICAgICAgICAgICAgICAgLy8gJ3snICdzY2hlbWEtZWxlbWVudCcKICAgICB8fCBsayA9PSAxMTcwMTIgICAgICAgICAgICAgICAgLy8gJ3snICdzY29yZScKICAgICB8fCBsayA9PSAxMTc1MjQgICAgICAgICAgICAgICAgLy8gJ3snICdzZWxmJwogICAgIHx8IGxrID09IDEyMDA4NCAgICAgICAgICAgICAgICAvLyAneycgJ3NsaWRpbmcnCiAgICAgfHwgbGsgPT0gMTIwNTk2ICAgICAgICAgICAgICAgIC8vICd7JyAnc29tZScKICAgICB8fCBsayA9PSAxMjExMDggICAgICAgICAgICAgICAgLy8gJ3snICdzdGFibGUnCiAgICAgfHwgbGsgPT0gMTIxNjIwICAgICAgICAgICAgICAgIC8vICd7JyAnc3RhcnQnCiAgICAgfHwgbGsgPT0gMTIzMTU2ICAgICAgICAgICAgICAgIC8vICd7JyAnc3RyaWN0JwogICAgIHx8IGxrID09IDEyNDE4MCAgICAgICAgICAgICAgICAvLyAneycgJ3N0cnVjdHVyZWQtaXRlbScKICAgICB8fCBsayA9PSAxMjQ2OTIgICAgICAgICAgICAgICAgLy8gJ3snICdzd2l0Y2gnCiAgICAgfHwgbGsgPT0gMTI1MjA0ICAgICAgICAgICAgICAgIC8vICd7JyAndGV4dCcKICAgICB8fCBsayA9PSAxMjcyNTIgICAgICAgICAgICAgICAgLy8gJ3snICd0bycKICAgICB8fCBsayA9PSAxMjc3NjQgICAgICAgICAgICAgICAgLy8gJ3snICd0cmVhdCcKICAgICB8fCBsayA9PSAxMjgyNzYgICAgICAgICAgICAgICAgLy8gJ3snICd0cnknCiAgICAgfHwgbGsgPT0gMTI4Nzg4ICAgICAgICAgICAgICAgIC8vICd7JyAndHVtYmxpbmcnCiAgICAgfHwgbGsgPT0gMTI5MzAwICAgICAgICAgICAgICAgIC8vICd7JyAndHlwZScKICAgICB8fCBsayA9PSAxMjk4MTIgICAgICAgICAgICAgICAgLy8gJ3snICd0eXBlc3dpdGNoJwogICAgIHx8IGxrID09IDEzMDMyNCAgICAgICAgICAgICAgICAvLyAneycgJ3VuaW9uJwogICAgIHx8IGxrID09IDEzMTM0OCAgICAgICAgICAgICAgICAvLyAneycgJ3Vub3JkZXJlZCcKICAgICB8fCBsayA9PSAxMzE4NjAgICAgICAgICAgICAgICAgLy8gJ3snICd1cGRhdGluZycKICAgICB8fCBsayA9PSAxMzMzOTYgICAgICAgICAgICAgICAgLy8gJ3snICd2YWxpZGF0ZScKICAgICB8fCBsayA9PSAxMzM5MDggICAgICAgICAgICAgICAgLy8gJ3snICd2YWx1ZScKICAgICB8fCBsayA9PSAxMzQ0MjAgICAgICAgICAgICAgICAgLy8gJ3snICd2YXJpYWJsZScKICAgICB8fCBsayA9PSAxMzQ5MzIgICAgICAgICAgICAgICAgLy8gJ3snICd2ZXJzaW9uJwogICAgIHx8IGxrID09IDEzNjQ2OCAgICAgICAgICAgICAgICAvLyAneycgJ3doZXJlJwogICAgIHx8IGxrID09IDEzNjk4MCAgICAgICAgICAgICAgICAvLyAneycgJ3doaWxlJwogICAgIHx8IGxrID09IDEzODUxNiAgICAgICAgICAgICAgICAvLyAneycgJ3dpdGgnCiAgICAgfHwgbGsgPT0gMTQwNTY0ICAgICAgICAgICAgICAgIC8vICd7JyAneHF1ZXJ5JwogICAgIHx8IGxrID09IDE0MTU4OCAgICAgICAgICAgICAgICAvLyAneycgJ3snCiAgICAgfHwgbGsgPT0gMTQyNjEyICAgICAgICAgICAgICAgIC8vICd7JyAne3wnCiAgICAgfHwgbGsgPT0gMTQ0NjYwKSAgICAgICAgICAgICAgIC8vICd7JyAnfScKICAgIHsKICAgICAgbGsgPSBtZW1vaXplZCgxNCwgZTApOwogICAgICBpZiAobGsgPT0gMCkKICAgICAgewogICAgICAgIHZhciBiMEEgPSBiMDsgdmFyIGUwQSA9IGUwOyB2YXIgbDFBID0gbDE7CiAgICAgICAgdmFyIGIxQSA9IGIxOyB2YXIgZTFBID0gZTE7IHZhciBsMkEgPSBsMjsKICAgICAgICB2YXIgYjJBID0gYjI7IHZhciBlMkEgPSBlMjsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB0cnlfQmxvY2tFeHByKCk7CiAgICAgICAgICBsayA9IC0xMDsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKHAxMEEpCiAgICAgICAgewogICAgICAgICAgbGsgPSAtMTE7CiAgICAgICAgfQogICAgICAgIGIwID0gYjBBOyBlMCA9IGUwQTsgbDEgPSBsMUE7IGlmIChsMSA9PSAwKSB7ZW5kID0gZTBBO30gZWxzZSB7CiAgICAgICAgYjEgPSBiMUE7IGUxID0gZTFBOyBsMiA9IGwyQTsgaWYgKGwyID09IDApIHtlbmQgPSBlMUE7fSBlbHNlIHsKICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICBtZW1vaXplKDE0LCBlMCwgbGspOwogICAgICB9CiAgICB9CiAgICBzd2l0Y2ggKGxrKQogICAgewogICAgY2FzZSA4OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyTGl0ZXJhbAogICAgY2FzZSA5OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWNpbWFsTGl0ZXJhbAogICAgY2FzZSAxMDogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGVMaXRlcmFsCiAgICBjYXNlIDExOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0cmluZ0xpdGVyYWwKICAgICAgcGFyc2VfTGl0ZXJhbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIHBhcnNlX1ZhclJlZigpOwogICAgICBicmVhazsKICAgIGNhc2UgMzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJygnCiAgICAgIHBhcnNlX1BhcmVudGhlc2l6ZWRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0NDogICAgICAgICAgICAgICAgICAgICAgICAvLyAnLicKICAgICAgcGFyc2VfQ29udGV4dEl0ZW1FeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQxNDogICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJygnCiAgICBjYXNlIDE3NDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicgJygnCiAgICBjYXNlIDE3NDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJygnCiAgICBjYXNlIDE3NDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJygnCiAgICBjYXNlIDE3NDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTc0ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcgJygnCiAgICBjYXNlIDE3NDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcoJwogICAgY2FzZSAxNzQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXMnICcoJwogICAgY2FzZSAxNzQ4ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc0ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JyAnKCcKICAgIGNhc2UgMTc0OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnKCcKICAgIGNhc2UgMTc0OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJygnCiAgICBjYXNlIDE3NDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJygnCiAgICBjYXNlIDE3NDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJygnCiAgICBjYXNlIDE3NDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnKCcKICAgIGNhc2UgMTc0OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcoJwogICAgY2FzZSAxNzQ5ODogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcoJwogICAgY2FzZSAxNzQ5OTogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcoJwogICAgY2FzZSAxNzUwMTogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcoJwogICAgY2FzZSAxNzUwMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICcoJwogICAgY2FzZSAxNzUwNjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICcoJwogICAgY2FzZSAxNzUxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcoJwogICAgY2FzZSAxNzUxMTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJygnCiAgICBjYXNlIDE3NTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICcoJwogICAgY2FzZSAxNzUxMzogICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnICcoJwogICAgY2FzZSAxNzUxNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICcoJwogICAgY2FzZSAxNzUxNjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJygnCiAgICBjYXNlIDE3NTE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnKCcKICAgIGNhc2UgMTc1MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJygnCiAgICBjYXNlIDE3NTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnKCcKICAgIGNhc2UgMTc1MjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJygnCiAgICBjYXNlIDE3NTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc1MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicgJygnCiAgICBjYXNlIDE3NTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJygnCiAgICBjYXNlIDE3NTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnKCcKICAgIGNhc2UgMTc1MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnKCcKICAgIGNhc2UgMTc1MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnKCcKICAgIGNhc2UgMTc1MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJygnCiAgICBjYXNlIDE3NTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJygnCiAgICBjYXNlIDE3NTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJygnCiAgICBjYXNlIDE3NTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcoJwogICAgY2FzZSAxNzU0MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJygnCiAgICBjYXNlIDE3NTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJygnCiAgICBjYXNlIDE3NTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJygnCiAgICBjYXNlIDE3NTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcoJwogICAgY2FzZSAxNzU0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnKCcKICAgIGNhc2UgMTc1NDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJygnCiAgICBjYXNlIDE3NTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJygnCiAgICBjYXNlIDE3NTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJygnCiAgICBjYXNlIDE3NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJygnCiAgICBjYXNlIDE3NTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnKCcKICAgIGNhc2UgMTc1NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJygnCiAgICBjYXNlIDE3NTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJygnCiAgICBjYXNlIDE3NTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJygnCiAgICBjYXNlIDE3NTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcoJwogICAgY2FzZSAxNzU2ODogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcoJwogICAgY2FzZSAxNzU2OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnKCcKICAgIGNhc2UgMTc1NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJygnCiAgICBjYXNlIDE3NTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnKCcKICAgIGNhc2UgMTc1NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnKCcKICAgIGNhc2UgMTc1NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgY2FzZSAxNzU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJygnCiAgICBjYXNlIDE3NTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcoJwogICAgY2FzZSAxNzU4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcoJwogICAgY2FzZSAxNzU4MjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnKCcKICAgIGNhc2UgMTc1ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcoJwogICAgY2FzZSAxNzU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcoJwogICAgY2FzZSAxNzU4ODogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnKCcKICAgIGNhc2UgMTc1ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJygnCiAgICBjYXNlIDE3NTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcoJwogICAgY2FzZSAxNzU5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnKCcKICAgIGNhc2UgMTc1OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnKCcKICAgIGNhc2UgMTc2MDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnKCcKICAgIGNhc2UgMTc2MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJygnCiAgICBjYXNlIDE3NjA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnKCcKICAgIGNhc2UgMTc2MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJygnCiAgICBjYXNlIDE3NjA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJygnCiAgICBjYXNlIDE3NjA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJygnCiAgICBjYXNlIDE3NjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnKCcKICAgIGNhc2UgMTc2MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnKCcKICAgIGNhc2UgMTc2MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJygnCiAgICBjYXNlIDE3NjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcoJwogICAgY2FzZSAxNzYyMTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzYyNjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnKCcKICAgIGNhc2UgMTc2Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcoJwogICAgY2FzZSAxNzYyODogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnKCcKICAgIGNhc2UgMTc2Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJygnCiAgICBjYXNlIDE3NjMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcoJwogICAgY2FzZSAxNzYzMjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnKCcKICAgIGNhc2UgMTc2MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJygnCiAgICBjYXNlIDE3NjM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScgJygnCiAgICBjYXNlIDE3NjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnKCcKICAgIGNhc2UgMTc2NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcoJwogICAgY2FzZSAxNzY0MzogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJygnCiAgICBjYXNlIDE3NjQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcoJwogICAgY2FzZSAxNzY0NTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcoJwogICAgY2FzZSAxNzY0ODogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnKCcKICAgIGNhc2UgMTc2NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnKCcKICAgIGNhc2UgMTc2NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnKCcKICAgIGNhc2UgMTc2NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJygnCiAgICBjYXNlIDE3NjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJygnCiAgICBjYXNlIDE3NjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnKCcKICAgIGNhc2UgMTc2NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnKCcKICAgIGNhc2UgMTc2NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJygnCiAgICBjYXNlIDE3NjY1OiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJygnCiAgICBjYXNlIDE3NjY4OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJygnCiAgICBjYXNlIDE3NjY5OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJygnCiAgICBjYXNlIDE3NjcwOiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJygnCiAgICBjYXNlIDE3NjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnKCcKICAgIGNhc2UgMTc2NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnKCcKICAgIGNhc2UgMTc2NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnKCcKICAgIGNhc2UgMTc2Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnICcoJwogICAgY2FzZSAxNzY4MjogICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnKCcKICAgICAgcGFyc2VfRnVuY3Rpb25DYWxsKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDE1MTQ6ICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJlZCcgJ3snCiAgICAgIHBhcnNlX09yZGVyZWRFeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNDE1Njg6ICAgICAgICAgICAgICAgICAgICAvLyAndW5vcmRlcmVkJyAneycKICAgICAgcGFyc2VfVW5vcmRlcmVkRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMzI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTQ4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICcjJwogICAgY2FzZSAxNDkxODogICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICcjJwogICAgY2FzZSAxNDkyMDogICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICcjJwogICAgY2FzZSAxNDkyMTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICcjJwogICAgY2FzZSAxNDkyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJyMnCiAgICBjYXNlIDE0OTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnICcjJwogICAgY2FzZSAxNDkyNTogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnIycKICAgIGNhc2UgMTQ5Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJyAnIycKICAgIGNhc2UgMTQ5Mjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcgJyMnCiAgICBjYXNlIDE0OTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcjJwogICAgY2FzZSAxNDkzMjogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnIycKICAgIGNhc2UgMTQ5MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnIycKICAgIGNhc2UgMTQ5MzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcjJwogICAgY2FzZSAxNDkzNzogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJyMnCiAgICBjYXNlIDE0OTM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJyMnCiAgICBjYXNlIDE0OTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJyMnCiAgICBjYXNlIDE0OTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJyMnCiAgICBjYXNlIDE0OTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcjJwogICAgY2FzZSAxNDk0NDogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJyMnCiAgICBjYXNlIDE0OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnIycKICAgIGNhc2UgMTQ5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE0OTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnIycKICAgIGNhc2UgMTQ5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnIycKICAgIGNhc2UgMTQ5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknICcjJwogICAgY2FzZSAxNDk1MjogICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnIycKICAgIGNhc2UgMTQ5NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnIycKICAgIGNhc2UgMTQ5NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICcjJwogICAgY2FzZSAxNDk1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJyMnCiAgICBjYXNlIDE0OTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJyMnCiAgICBjYXNlIDE0OTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICcjJwogICAgY2FzZSAxNDk2OTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJyMnCiAgICBjYXNlIDE0OTcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnIycKICAgIGNhc2UgMTQ5NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnIycKICAgIGNhc2UgMTQ5NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnIycKICAgIGNhc2UgMTQ5NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJyMnCiAgICBjYXNlIDE0OTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJyMnCiAgICBjYXNlIDE0OTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJyMnCiAgICBjYXNlIDE0OTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcjJwogICAgY2FzZSAxNDk4MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJyMnCiAgICBjYXNlIDE0OTgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJyMnCiAgICBjYXNlIDE0OTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJyMnCiAgICBjYXNlIDE0OTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcjJwogICAgY2FzZSAxNDk4NDogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNDk4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnIycKICAgIGNhc2UgMTQ5ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJyMnCiAgICBjYXNlIDE0OTk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJyMnCiAgICBjYXNlIDE0OTk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJyMnCiAgICBjYXNlIDE0OTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJyMnCiAgICBjYXNlIDE0OTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnIycKICAgIGNhc2UgMTUwMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJyMnCiAgICBjYXNlIDE1MDAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJyMnCiAgICBjYXNlIDE1MDAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJyMnCiAgICBjYXNlIDE1MDA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcjJwogICAgY2FzZSAxNTAwODogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcjJwogICAgY2FzZSAxNTAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnIycKICAgIGNhc2UgMTUwMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJyMnCiAgICBjYXNlIDE1MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnIycKICAgIGNhc2UgMTUwMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnIycKICAgIGNhc2UgMTUwMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcjJwogICAgY2FzZSAxNTAxODogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJyMnCiAgICBjYXNlIDE1MDE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcjJwogICAgY2FzZSAxNTAyMDogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcjJwogICAgY2FzZSAxNTAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnIycKICAgIGNhc2UgMTUwMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcjJwogICAgY2FzZSAxNTAyNjogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcjJwogICAgY2FzZSAxNTAyODogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnIycKICAgIGNhc2UgMTUwMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJyMnCiAgICBjYXNlIDE1MDMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcjJwogICAgY2FzZSAxNTAzMjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnIycKICAgIGNhc2UgMTUwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnIycKICAgIGNhc2UgMTUwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnIycKICAgIGNhc2UgMTUwNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJyMnCiAgICBjYXNlIDE1MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnIycKICAgIGNhc2UgMTUwNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJyMnCiAgICBjYXNlIDE1MDQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJyMnCiAgICBjYXNlIDE1MDQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJyMnCiAgICBjYXNlIDE1MDUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnIycKICAgIGNhc2UgMTUwNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnIycKICAgIGNhc2UgMTUwNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJyMnCiAgICBjYXNlIDE1MDYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcjJwogICAgY2FzZSAxNTA2MTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNTA2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE1MDY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICcjJwogICAgY2FzZSAxNTA2NzogICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJyMnCiAgICBjYXNlIDE1MDY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICcjJwogICAgY2FzZSAxNTA2OTogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnIycKICAgIGNhc2UgMTUwNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJyMnCiAgICBjYXNlIDE1MDcyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICcjJwogICAgY2FzZSAxNTA3MzogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnIycKICAgIGNhc2UgMTUwNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcjJwogICAgY2FzZSAxNTA4MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJyMnCiAgICBjYXNlIDE1MDgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnIycKICAgIGNhc2UgMTUwODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJyMnCiAgICBjYXNlIDE1MDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJyMnCiAgICBjYXNlIDE1MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcjJwogICAgY2FzZSAxNTA5MjogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJyMnCiAgICBjYXNlIDE1MDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0bycgJyMnCiAgICBjYXNlIDE1MDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJyMnCiAgICBjYXNlIDE1MDk4OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknICcjJwogICAgY2FzZSAxNTA5OTogICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICcjJwogICAgY2FzZSAxNTEwMDogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScgJyMnCiAgICBjYXNlIDE1MTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicgJyMnCiAgICBjYXNlIDE1MTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICcjJwogICAgY2FzZSAxNTEwNTogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICcjJwogICAgY2FzZSAxNTEwODogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICcjJwogICAgY2FzZSAxNTEwOTogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnICcjJwogICAgY2FzZSAxNTExMDogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcjJwogICAgY2FzZSAxNTExMTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJyMnCiAgICBjYXNlIDE1MTE0OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScgJyMnCiAgICBjYXNlIDE1MTE1OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJyMnCiAgICBjYXNlIDE1MTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJyAnIycKICAgIGNhc2UgMTUxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScgJyMnCiAgICAgIHBhcnNlX0Z1bmN0aW9uSXRlbUV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMDoKICAgIGNhc2UgMjc0MTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3snICc7JwogICAgICBwYXJzZV9CbG9ja0V4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIC0xMToKICAgICAgcGFyc2VfT2JqZWN0Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICBwYXJzZV9BcnJheUNvbnN0cnVjdG9yKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAyNzg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAne3wnCiAgICAgIHBhcnNlX0pTT05TaW1wbGVPYmplY3RVbmlvbigpOwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHBhcnNlX0NvbnN0cnVjdG9yKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlByaW1hcnlFeHByIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X1ByaW1hcnlFeHByKCkKICB7CiAgICBzd2l0Y2ggKGwxKQogICAgewogICAgY2FzZSAxODQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJwogICAgICBsb29rYWhlYWQyVygyNTUpOyAgICAgICAgICAgICAvLyBOQ05hbWVeVG9rZW4gfCBTXldTIHwgJyMnIHwgJygnIHwgJyg6JyB8ICdhZnRlcicgfCAnYWxsb3dpbmcnIHwgJ2FuY2VzdG9yJyB8CiAgICAgIGJyZWFrOwogICAgY2FzZSAyMTY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICAgbG9va2FoZWFkMlcoMjUzKTsgICAgICAgICAgICAgLy8gTkNOYW1lXlRva2VuIHwgU15XUyB8ICcjJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgICBicmVhazsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIGxvb2thaGVhZDJXKDI3Nik7ICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgICBicmVhazsKICAgIGNhc2UgODI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0dHJpYnV0ZScKICAgIGNhc2UgMTIxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VsZW1lbnQnCiAgICAgIGxvb2thaGVhZDJXKDI1OCk7ICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnIycgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgICAgYnJlYWs7CiAgICBjYXNlIDk2OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb21tZW50JwogICAgY2FzZSAyNDQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcKICAgICAgbG9va2FoZWFkMlcoOTMpOyAgICAgICAgICAgICAgLy8gU15XUyB8ICcjJyB8ICcoOicgfCAneycKICAgICAgYnJlYWs7CiAgICBjYXNlIDExOTogICAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcKICAgIGNhc2UgMjAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnCiAgICBjYXNlIDI1NjogICAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnCiAgICAgIGxvb2thaGVhZDJXKDEzOSk7ICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonIHwgJ3snCiAgICAgIGJyZWFrOwogICAgY2FzZSA2OiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4KICAgIGNhc2UgNzA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FmdGVyJwogICAgY2FzZSA3MjogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnCiAgICBjYXNlIDczOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicKICAgIGNhc2UgNzQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuY2VzdG9yLW9yLXNlbGYnCiAgICBjYXNlIDc1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnCiAgICBjYXNlIDc3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnCiAgICBjYXNlIDc5OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGNhc2UgODA6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycKICAgIGNhc2UgODE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JwogICAgY2FzZSA4MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknCiAgICBjYXNlIDg0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdiZWZvcmUnCiAgICBjYXNlIDg1OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScKICAgIGNhc2UgODY6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJwogICAgY2FzZSA4ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2FzZScKICAgIGNhc2UgODk6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnCiAgICBjYXNlIDkwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScKICAgIGNhc2UgOTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NhdGNoJwogICAgY2FzZSA5MzogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnCiAgICBjYXNlIDk0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nCiAgICBjYXNlIDk3OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JwogICAgY2FzZSA5ODogICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJwogICAgY2FzZSAxMDE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29udGV4dCcKICAgIGNhc2UgMTAyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJwogICAgY2FzZSAxMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnY29weScKICAgIGNhc2UgMTA0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHktbmFtZXNwYWNlcycKICAgIGNhc2UgMTA1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JwogICAgY2FzZSAxMDY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnCiAgICBjYXNlIDEwODogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZWNsYXJlJwogICAgY2FzZSAxMDk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcKICAgIGNhc2UgMTEwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScKICAgIGNhc2UgMTExOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQnCiAgICBjYXNlIDExMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnCiAgICBjYXNlIDExMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJwogICAgY2FzZSAxMTg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZGl2JwogICAgY2FzZSAxMjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZWxzZScKICAgIGNhc2UgMTIzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JwogICAgY2FzZSAxMjU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZW5jb2RpbmcnCiAgICBjYXNlIDEyNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbmQnCiAgICBjYXNlIDEyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdlcScKICAgIGNhc2UgMTI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V2ZXJ5JwogICAgY2FzZSAxMzE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhjZXB0JwogICAgY2FzZSAxMzI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcKICAgIGNhc2UgMTMzOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2V4dGVybmFsJwogICAgY2FzZSAxMzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZmlyc3QnCiAgICBjYXNlIDEzNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnCiAgICBjYXNlIDEzNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmctc2libGluZycKICAgIGNhc2UgMTM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2ZvcicKICAgIGNhc2UgMTQxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicKICAgIGNhc2UgMTQ2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2dlJwogICAgY2FzZSAxNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnZ3JvdXAnCiAgICBjYXNlIDE1MDogICAgICAgICAgICAgICAgICAgICAgIC8vICdndCcKICAgIGNhc2UgMTUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2lkaXYnCiAgICBjYXNlIDE1MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbXBvcnQnCiAgICBjYXNlIDE1NDogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbicKICAgIGNhc2UgMTU1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2luZGV4JwogICAgY2FzZSAxNTk6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zZXJ0JwogICAgY2FzZSAxNjA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnCiAgICBjYXNlIDE2MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlZ3JpdHknCiAgICBjYXNlIDE2MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRlcnNlY3QnCiAgICBjYXNlIDE2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJwogICAgY2FzZSAxNjQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaXMnCiAgICBjYXNlIDE2NjogICAgICAgICAgICAgICAgICAgICAgIC8vICdqc29uJwogICAgY2FzZSAxNzA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcKICAgIGNhc2UgMTcxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xheCcKICAgIGNhc2UgMTcyOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2xlJwogICAgY2FzZSAxNzQ6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JwogICAgY2FzZSAxNzY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbG9vcCcKICAgIGNhc2UgMTc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2x0JwogICAgY2FzZSAxODA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJwogICAgY2FzZSAxODE6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kaWZ5JwogICAgY2FzZSAxODI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbW9kdWxlJwogICAgY2FzZSAxODY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmUnCiAgICBjYXNlIDE5MjogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlcycKICAgIGNhc2UgMTk0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcKICAgIGNhc2UgMTk4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29ubHknCiAgICBjYXNlIDE5OTogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcHRpb24nCiAgICBjYXNlIDIwMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdvcicKICAgIGNhc2UgMjAxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyJwogICAgY2FzZSAyMDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnb3JkZXJpbmcnCiAgICBjYXNlIDIwNjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwYXJlbnQnCiAgICBjYXNlIDIxMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnCiAgICBjYXNlIDIxMzogICAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmctc2libGluZycKICAgIGNhc2UgMjE4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlbmFtZScKICAgIGNhc2UgMjE5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnCiAgICBjYXNlIDIyMDogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nCiAgICBjYXNlIDIyMTogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm5pbmcnCiAgICBjYXNlIDIyMjogICAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nCiAgICBjYXNlIDIyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnCiAgICBjYXNlIDIyNTogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY2hlbWEnCiAgICBjYXNlIDIyODogICAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScKICAgIGNhc2UgMjI5OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnCiAgICBjYXNlIDIzNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdzbGlkaW5nJwogICAgY2FzZSAyMzU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScKICAgIGNhc2UgMjM2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScKICAgIGNhc2UgMjM3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YXJ0JwogICAgY2FzZSAyNDA6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JwogICAgY2FzZSAyNDg6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndG8nCiAgICBjYXNlIDI0OTogICAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcKICAgIGNhc2UgMjUwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScKICAgIGNhc2UgMjUxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3R1bWJsaW5nJwogICAgY2FzZSAyNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScKICAgIGNhc2UgMjU0OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJwogICAgY2FzZSAyNTc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnCiAgICBjYXNlIDI2MDogICAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScKICAgIGNhc2UgMjYxOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3ZhbHVlJwogICAgY2FzZSAyNjI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnCiAgICBjYXNlIDI2MzogICAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJwogICAgY2FzZSAyNjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnd2hlcmUnCiAgICBjYXNlIDI2NzogICAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScKICAgIGNhc2UgMjcwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnCiAgICBjYXNlIDI3NDogICAgICAgICAgICAgICAgICAgICAgIC8vICd4cXVlcnknCiAgICAgIGxvb2thaGVhZDJXKDkyKTsgICAgICAgICAgICAgIC8vIFNeV1MgfCAnIycgfCAnKCcgfCAnKDonCiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgbGsgPSBsMTsKICAgIH0KICAgIGlmIChsayA9PSAyODM2ICAgICAgICAgICAgICAgICAgLy8gJ3snIFdpbGRjYXJkCiAgICAgfHwgbGsgPT0gMzM0OCAgICAgICAgICAgICAgICAgIC8vICd7JyBFUU5hbWVeVG9rZW4KICAgICB8fCBsayA9PSA0MzcyICAgICAgICAgICAgICAgICAgLy8gJ3snIEludGVnZXJMaXRlcmFsCiAgICAgfHwgbGsgPT0gNDg4NCAgICAgICAgICAgICAgICAgIC8vICd7JyBEZWNpbWFsTGl0ZXJhbAogICAgIHx8IGxrID09IDUzOTYgICAgICAgICAgICAgICAgICAvLyAneycgRG91YmxlTGl0ZXJhbAogICAgIHx8IGxrID09IDU5MDggICAgICAgICAgICAgICAgICAvLyAneycgU3RyaW5nTGl0ZXJhbAogICAgIHx8IGxrID09IDE2MTQ4ICAgICAgICAgICAgICAgICAvLyAneycgJyQnCiAgICAgfHwgbGsgPT0gMTY2NjAgICAgICAgICAgICAgICAgIC8vICd7JyAnJScKICAgICB8fCBsayA9PSAxNzY4NCAgICAgICAgICAgICAgICAgLy8gJ3snICcoJwogICAgIHx8IGxrID09IDE4MTk2ICAgICAgICAgICAgICAgICAvLyAneycgJygjJwogICAgIHx8IGxrID09IDIwNzU2ICAgICAgICAgICAgICAgICAvLyAneycgJysnCiAgICAgfHwgbGsgPT0gMjE3ODAgICAgICAgICAgICAgICAgIC8vICd7JyAnLScKICAgICB8fCBsayA9PSAyMjgwNCAgICAgICAgICAgICAgICAgLy8gJ3snICcuJwogICAgIHx8IGxrID09IDIzMzE2ICAgICAgICAgICAgICAgICAvLyAneycgJy4uJwogICAgIHx8IGxrID09IDIzODI4ICAgICAgICAgICAgICAgICAvLyAneycgJy8nCiAgICAgfHwgbGsgPT0gMjQzNDAgICAgICAgICAgICAgICAgIC8vICd7JyAnLy8nCiAgICAgfHwgbGsgPT0gMjc5MjQgICAgICAgICAgICAgICAgIC8vICd7JyAnPCcKICAgICB8fCBsayA9PSAyODQzNiAgICAgICAgICAgICAgICAgLy8gJ3snICc8IS0tJwogICAgIHx8IGxrID09IDMwNDg0ICAgICAgICAgICAgICAgICAvLyAneycgJzw/JwogICAgIHx8IGxrID09IDM0MDY4ICAgICAgICAgICAgICAgICAvLyAneycgJ0AnCiAgICAgfHwgbGsgPT0gMzUwOTIgICAgICAgICAgICAgICAgIC8vICd7JyAnWycKICAgICB8fCBsayA9PSAzNjExNiAgICAgICAgICAgICAgICAgLy8gJ3snICdhZnRlcicKICAgICB8fCBsayA9PSAzNzE0MCAgICAgICAgICAgICAgICAgLy8gJ3snICdhbGxvd2luZycKICAgICB8fCBsayA9PSAzNzY1MiAgICAgICAgICAgICAgICAgLy8gJ3snICdhbmNlc3RvcicKICAgICB8fCBsayA9PSAzODE2NCAgICAgICAgICAgICAgICAgLy8gJ3snICdhbmNlc3Rvci1vci1zZWxmJwogICAgIHx8IGxrID09IDM4Njc2ICAgICAgICAgICAgICAgICAvLyAneycgJ2FuZCcKICAgICB8fCBsayA9PSAzOTcwMCAgICAgICAgICAgICAgICAgLy8gJ3snICdhcHBlbmQnCiAgICAgfHwgbGsgPT0gNDAyMTIgICAgICAgICAgICAgICAgIC8vICd7JyAnYXJyYXknCiAgICAgfHwgbGsgPT0gNDA3MjQgICAgICAgICAgICAgICAgIC8vICd7JyAnYXMnCiAgICAgfHwgbGsgPT0gNDEyMzYgICAgICAgICAgICAgICAgIC8vICd7JyAnYXNjZW5kaW5nJwogICAgIHx8IGxrID09IDQxNzQ4ICAgICAgICAgICAgICAgICAvLyAneycgJ2F0JwogICAgIHx8IGxrID09IDQyMjYwICAgICAgICAgICAgICAgICAvLyAneycgJ2F0dHJpYnV0ZScKICAgICB8fCBsayA9PSA0Mjc3MiAgICAgICAgICAgICAgICAgLy8gJ3snICdiYXNlLXVyaScKICAgICB8fCBsayA9PSA0MzI4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdiZWZvcmUnCiAgICAgfHwgbGsgPT0gNDM3OTYgICAgICAgICAgICAgICAgIC8vICd7JyAnYm91bmRhcnktc3BhY2UnCiAgICAgfHwgbGsgPT0gNDQzMDggICAgICAgICAgICAgICAgIC8vICd7JyAnYnJlYWsnCiAgICAgfHwgbGsgPT0gNDUzMzIgICAgICAgICAgICAgICAgIC8vICd7JyAnY2FzZScKICAgICB8fCBsayA9PSA0NTg0NCAgICAgICAgICAgICAgICAgLy8gJ3snICdjYXN0JwogICAgIHx8IGxrID09IDQ2MzU2ICAgICAgICAgICAgICAgICAvLyAneycgJ2Nhc3RhYmxlJwogICAgIHx8IGxrID09IDQ2ODY4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NhdGNoJwogICAgIHx8IGxrID09IDQ3ODkyICAgICAgICAgICAgICAgICAvLyAneycgJ2NoaWxkJwogICAgIHx8IGxrID09IDQ4NDA0ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbGxhdGlvbicKICAgICB8fCBsayA9PSA0OTQyOCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb21tZW50JwogICAgIHx8IGxrID09IDQ5OTQwICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnN0cmFpbnQnCiAgICAgfHwgbGsgPT0gNTA0NTIgICAgICAgICAgICAgICAgIC8vICd7JyAnY29uc3RydWN0aW9uJwogICAgIHx8IGxrID09IDUxOTg4ICAgICAgICAgICAgICAgICAvLyAneycgJ2NvbnRleHQnCiAgICAgfHwgbGsgPT0gNTI1MDAgICAgICAgICAgICAgICAgIC8vICd7JyAnY29udGludWUnCiAgICAgfHwgbGsgPT0gNTMwMTIgICAgICAgICAgICAgICAgIC8vICd7JyAnY29weScKICAgICB8fCBsayA9PSA1MzUyNCAgICAgICAgICAgICAgICAgLy8gJ3snICdjb3B5LW5hbWVzcGFjZXMnCiAgICAgfHwgbGsgPT0gNTQwMzYgICAgICAgICAgICAgICAgIC8vICd7JyAnY291bnQnCiAgICAgfHwgbGsgPT0gNTQ1NDggICAgICAgICAgICAgICAgIC8vICd7JyAnZGVjaW1hbC1mb3JtYXQnCiAgICAgfHwgbGsgPT0gNTU1NzIgICAgICAgICAgICAgICAgIC8vICd7JyAnZGVjbGFyZScKICAgICB8fCBsayA9PSA1NjA4NCAgICAgICAgICAgICAgICAgLy8gJ3snICdkZWZhdWx0JwogICAgIHx8IGxrID09IDU2NTk2ICAgICAgICAgICAgICAgICAvLyAneycgJ2RlbGV0ZScKICAgICB8fCBsayA9PSA1NzEwOCAgICAgICAgICAgICAgICAgLy8gJ3snICdkZXNjZW5kYW50JwogICAgIHx8IGxrID09IDU3NjIwICAgICAgICAgICAgICAgICAvLyAneycgJ2Rlc2NlbmRhbnQtb3Itc2VsZicKICAgICB8fCBsayA9PSA1ODEzMiAgICAgICAgICAgICAgICAgLy8gJ3snICdkZXNjZW5kaW5nJwogICAgIHx8IGxrID09IDYwNjkyICAgICAgICAgICAgICAgICAvLyAneycgJ2RpdicKICAgICB8fCBsayA9PSA2MTIwNCAgICAgICAgICAgICAgICAgLy8gJ3snICdkb2N1bWVudCcKICAgICB8fCBsayA9PSA2MTcxNiAgICAgICAgICAgICAgICAgLy8gJ3snICdkb2N1bWVudC1ub2RlJwogICAgIHx8IGxrID09IDYyMjI4ICAgICAgICAgICAgICAgICAvLyAneycgJ2VsZW1lbnQnCiAgICAgfHwgbGsgPT0gNjI3NDAgICAgICAgICAgICAgICAgIC8vICd7JyAnZWxzZScKICAgICB8fCBsayA9PSA2MzI1MiAgICAgICAgICAgICAgICAgLy8gJ3snICdlbXB0eScKICAgICB8fCBsayA9PSA2Mzc2NCAgICAgICAgICAgICAgICAgLy8gJ3snICdlbXB0eS1zZXF1ZW5jZScKICAgICB8fCBsayA9PSA2NDI3NiAgICAgICAgICAgICAgICAgLy8gJ3snICdlbmNvZGluZycKICAgICB8fCBsayA9PSA2NDc4OCAgICAgICAgICAgICAgICAgLy8gJ3snICdlbmQnCiAgICAgfHwgbGsgPT0gNjU4MTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZXEnCiAgICAgfHwgbGsgPT0gNjYzMjQgICAgICAgICAgICAgICAgIC8vICd7JyAnZXZlcnknCiAgICAgfHwgbGsgPT0gNjczNDggICAgICAgICAgICAgICAgIC8vICd7JyAnZXhjZXB0JwogICAgIHx8IGxrID09IDY3ODYwICAgICAgICAgICAgICAgICAvLyAneycgJ2V4aXQnCiAgICAgfHwgbGsgPT0gNjgzNzIgICAgICAgICAgICAgICAgIC8vICd7JyAnZXh0ZXJuYWwnCiAgICAgfHwgbGsgPT0gNjg4ODQgICAgICAgICAgICAgICAgIC8vICd7JyAnZmlyc3QnCiAgICAgfHwgbGsgPT0gNjkzOTYgICAgICAgICAgICAgICAgIC8vICd7JyAnZm9sbG93aW5nJwogICAgIHx8IGxrID09IDY5OTA4ICAgICAgICAgICAgICAgICAvLyAneycgJ2ZvbGxvd2luZy1zaWJsaW5nJwogICAgIHx8IGxrID09IDcwNDIwICAgICAgICAgICAgICAgICAvLyAneycgJ2ZvcicKICAgICB8fCBsayA9PSA3MjQ2OCAgICAgICAgICAgICAgICAgLy8gJ3snICdmdC1vcHRpb24nCiAgICAgfHwgbGsgPT0gNzQ1MTYgICAgICAgICAgICAgICAgIC8vICd7JyAnZnVuY3Rpb24nCiAgICAgfHwgbGsgPT0gNzUwMjggICAgICAgICAgICAgICAgIC8vICd7JyAnZ2UnCiAgICAgfHwgbGsgPT0gNzYwNTIgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3JvdXAnCiAgICAgfHwgbGsgPT0gNzcwNzYgICAgICAgICAgICAgICAgIC8vICd7JyAnZ3QnCiAgICAgfHwgbGsgPT0gNzc1ODggICAgICAgICAgICAgICAgIC8vICd7JyAnaWRpdicKICAgICB8fCBsayA9PSA3ODEwMCAgICAgICAgICAgICAgICAgLy8gJ3snICdpZicKICAgICB8fCBsayA9PSA3ODYxMiAgICAgICAgICAgICAgICAgLy8gJ3snICdpbXBvcnQnCiAgICAgfHwgbGsgPT0gNzkxMjQgICAgICAgICAgICAgICAgIC8vICd7JyAnaW4nCiAgICAgfHwgbGsgPT0gNzk2MzYgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5kZXgnCiAgICAgfHwgbGsgPT0gODE2ODQgICAgICAgICAgICAgICAgIC8vICd7JyAnaW5zZXJ0JwogICAgIHx8IGxrID09IDgyMTk2ICAgICAgICAgICAgICAgICAvLyAneycgJ2luc3RhbmNlJwogICAgIHx8IGxrID09IDgyNzA4ICAgICAgICAgICAgICAgICAvLyAneycgJ2ludGVncml0eScKICAgICB8fCBsayA9PSA4MzIyMCAgICAgICAgICAgICAgICAgLy8gJ3snICdpbnRlcnNlY3QnCiAgICAgfHwgbGsgPT0gODM3MzIgICAgICAgICAgICAgICAgIC8vICd7JyAnaW50bycKICAgICB8fCBsayA9PSA4NDI0NCAgICAgICAgICAgICAgICAgLy8gJ3snICdpcycKICAgICB8fCBsayA9PSA4NDc1NiAgICAgICAgICAgICAgICAgLy8gJ3snICdpdGVtJwogICAgIHx8IGxrID09IDg1MjY4ICAgICAgICAgICAgICAgICAvLyAneycgJ2pzb24nCiAgICAgfHwgbGsgPT0gODU3ODAgICAgICAgICAgICAgICAgIC8vICd7JyAnanNvbi1pdGVtJwogICAgIHx8IGxrID09IDg3MzE2ICAgICAgICAgICAgICAgICAvLyAneycgJ2xhc3QnCiAgICAgfHwgbGsgPT0gODc4MjggICAgICAgICAgICAgICAgIC8vICd7JyAnbGF4JwogICAgIHx8IGxrID09IDg4MzQwICAgICAgICAgICAgICAgICAvLyAneycgJ2xlJwogICAgIHx8IGxrID09IDg5MzY0ICAgICAgICAgICAgICAgICAvLyAneycgJ2xldCcKICAgICB8fCBsayA9PSA5MDM4OCAgICAgICAgICAgICAgICAgLy8gJ3snICdsb29wJwogICAgIHx8IGxrID09IDkxNDEyICAgICAgICAgICAgICAgICAvLyAneycgJ2x0JwogICAgIHx8IGxrID09IDkyNDM2ICAgICAgICAgICAgICAgICAvLyAneycgJ21vZCcKICAgICB8fCBsayA9PSA5Mjk0OCAgICAgICAgICAgICAgICAgLy8gJ3snICdtb2RpZnknCiAgICAgfHwgbGsgPT0gOTM0NjAgICAgICAgICAgICAgICAgIC8vICd7JyAnbW9kdWxlJwogICAgIHx8IGxrID09IDk0NDg0ICAgICAgICAgICAgICAgICAvLyAneycgJ25hbWVzcGFjZScKICAgICB8fCBsayA9PSA5NDk5NiAgICAgICAgICAgICAgICAgLy8gJ3snICduYW1lc3BhY2Utbm9kZScKICAgICB8fCBsayA9PSA5NTUwOCAgICAgICAgICAgICAgICAgLy8gJ3snICduZScKICAgICB8fCBsayA9PSA5ODA2OCAgICAgICAgICAgICAgICAgLy8gJ3snICdub2RlJwogICAgIHx8IGxrID09IDk4NTgwICAgICAgICAgICAgICAgICAvLyAneycgJ25vZGVzJwogICAgIHx8IGxrID09IDk5NjA0ICAgICAgICAgICAgICAgICAvLyAneycgJ29iamVjdCcKICAgICB8fCBsayA9PSAxMDE2NTIgICAgICAgICAgICAgICAgLy8gJ3snICdvbmx5JwogICAgIHx8IGxrID09IDEwMjE2NCAgICAgICAgICAgICAgICAvLyAneycgJ29wdGlvbicKICAgICB8fCBsayA9PSAxMDI2NzYgICAgICAgICAgICAgICAgLy8gJ3snICdvcicKICAgICB8fCBsayA9PSAxMDMxODggICAgICAgICAgICAgICAgLy8gJ3snICdvcmRlcicKICAgICB8fCBsayA9PSAxMDM3MDAgICAgICAgICAgICAgICAgLy8gJ3snICdvcmRlcmVkJwogICAgIHx8IGxrID09IDEwNDIxMiAgICAgICAgICAgICAgICAvLyAneycgJ29yZGVyaW5nJwogICAgIHx8IGxrID09IDEwNTc0OCAgICAgICAgICAgICAgICAvLyAneycgJ3BhcmVudCcKICAgICB8fCBsayA9PSAxMDg4MjAgICAgICAgICAgICAgICAgLy8gJ3snICdwcmVjZWRpbmcnCiAgICAgfHwgbGsgPT0gMTA5MzMyICAgICAgICAgICAgICAgIC8vICd7JyAncHJlY2VkaW5nLXNpYmxpbmcnCiAgICAgfHwgbGsgPT0gMTEwODY4ICAgICAgICAgICAgICAgIC8vICd7JyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicKICAgICB8fCBsayA9PSAxMTE4OTIgICAgICAgICAgICAgICAgLy8gJ3snICdyZW5hbWUnCiAgICAgfHwgbGsgPT0gMTEyNDA0ICAgICAgICAgICAgICAgIC8vICd7JyAncmVwbGFjZScKICAgICB8fCBsayA9PSAxMTI5MTYgICAgICAgICAgICAgICAgLy8gJ3snICdyZXR1cm4nCiAgICAgfHwgbGsgPT0gMTEzNDI4ICAgICAgICAgICAgICAgIC8vICd7JyAncmV0dXJuaW5nJwogICAgIHx8IGxrID09IDExMzk0MCAgICAgICAgICAgICAgICAvLyAneycgJ3JldmFsaWRhdGlvbicKICAgICB8fCBsayA9PSAxMTQ5NjQgICAgICAgICAgICAgICAgLy8gJ3snICdzYXRpc2ZpZXMnCiAgICAgfHwgbGsgPT0gMTE1NDc2ICAgICAgICAgICAgICAgIC8vICd7JyAnc2NoZW1hJwogICAgIHx8IGxrID09IDExNTk4OCAgICAgICAgICAgICAgICAvLyAneycgJ3NjaGVtYS1hdHRyaWJ1dGUnCiAgICAgfHwgbGsgPT0gMTE2NTAwICAgICAgICAgICAgICAgIC8vICd7JyAnc2NoZW1hLWVsZW1lbnQnCiAgICAgfHwgbGsgPT0gMTE3MDEyICAgICAgICAgICAgICAgIC8vICd7JyAnc2NvcmUnCiAgICAgfHwgbGsgPT0gMTE3NTI0ICAgICAgICAgICAgICAgIC8vICd7JyAnc2VsZicKICAgICB8fCBsayA9PSAxMjAwODQgICAgICAgICAgICAgICAgLy8gJ3snICdzbGlkaW5nJwogICAgIHx8IGxrID09IDEyMDU5NiAgICAgICAgICAgICAgICAvLyAneycgJ3NvbWUnCiAgICAgfHwgbGsgPT0gMTIxMTA4ICAgICAgICAgICAgICAgIC8vICd7JyAnc3RhYmxlJwogICAgIHx8IGxrID09IDEyMTYyMCAgICAgICAgICAgICAgICAvLyAneycgJ3N0YXJ0JwogICAgIHx8IGxrID09IDEyMzE1NiAgICAgICAgICAgICAgICAvLyAneycgJ3N0cmljdCcKICAgICB8fCBsayA9PSAxMjQxODAgICAgICAgICAgICAgICAgLy8gJ3snICdzdHJ1Y3R1cmVkLWl0ZW0nCiAgICAgfHwgbGsgPT0gMTI0NjkyICAgICAgICAgICAgICAgIC8vICd7JyAnc3dpdGNoJwogICAgIHx8IGxrID09IDEyNTIwNCAgICAgICAgICAgICAgICAvLyAneycgJ3RleHQnCiAgICAgfHwgbGsgPT0gMTI3MjUyICAgICAgICAgICAgICAgIC8vICd7JyAndG8nCiAgICAgfHwgbGsgPT0gMTI3NzY0ICAgICAgICAgICAgICAgIC8vICd7JyAndHJlYXQnCiAgICAgfHwgbGsgPT0gMTI4Mjc2ICAgICAgICAgICAgICAgIC8vICd7JyAndHJ5JwogICAgIHx8IGxrID09IDEyODc4OCAgICAgICAgICAgICAgICAvLyAneycgJ3R1bWJsaW5nJwogICAgIHx8IGxrID09IDEyOTMwMCAgICAgICAgICAgICAgICAvLyAneycgJ3R5cGUnCiAgICAgfHwgbGsgPT0gMTI5ODEyICAgICAgICAgICAgICAgIC8vICd7JyAndHlwZXN3aXRjaCcKICAgICB8fCBsayA9PSAxMzAzMjQgICAgICAgICAgICAgICAgLy8gJ3snICd1bmlvbicKICAgICB8fCBsayA9PSAxMzEzNDggICAgICAgICAgICAgICAgLy8gJ3snICd1bm9yZGVyZWQnCiAgICAgfHwgbGsgPT0gMTMxODYwICAgICAgICAgICAgICAgIC8vICd7JyAndXBkYXRpbmcnCiAgICAgfHwgbGsgPT0gMTMzMzk2ICAgICAgICAgICAgICAgIC8vICd7JyAndmFsaWRhdGUnCiAgICAgfHwgbGsgPT0gMTMzOTA4ICAgICAgICAgICAgICAgIC8vICd7JyAndmFsdWUnCiAgICAgfHwgbGsgPT0gMTM0NDIwICAgICAgICAgICAgICAgIC8vICd7JyAndmFyaWFibGUnCiAgICAgfHwgbGsgPT0gMTM0OTMyICAgICAgICAgICAgICAgIC8vICd7JyAndmVyc2lvbicKICAgICB8fCBsayA9PSAxMzY0NjggICAgICAgICAgICAgICAgLy8gJ3snICd3aGVyZScKICAgICB8fCBsayA9PSAxMzY5ODAgICAgICAgICAgICAgICAgLy8gJ3snICd3aGlsZScKICAgICB8fCBsayA9PSAxMzg1MTYgICAgICAgICAgICAgICAgLy8gJ3snICd3aXRoJwogICAgIHx8IGxrID09IDE0MDU2NCAgICAgICAgICAgICAgICAvLyAneycgJ3hxdWVyeScKICAgICB8fCBsayA9PSAxNDE1ODggICAgICAgICAgICAgICAgLy8gJ3snICd7JwogICAgIHx8IGxrID09IDE0MjYxMiAgICAgICAgICAgICAgICAvLyAneycgJ3t8JwogICAgIHx8IGxrID09IDE0NDY2MCkgICAgICAgICAgICAgICAvLyAneycgJ30nCiAgICB7CiAgICAgIGxrID0gbWVtb2l6ZWQoMTQsIGUwKTsKICAgICAgaWYgKGxrID09IDApCiAgICAgIHsKICAgICAgICB2YXIgYjBBID0gYjA7IHZhciBlMEEgPSBlMDsgdmFyIGwxQSA9IGwxOwogICAgICAgIHZhciBiMUEgPSBiMTsgdmFyIGUxQSA9IGUxOyB2YXIgbDJBID0gbDI7CiAgICAgICAgdmFyIGIyQSA9IGIyOyB2YXIgZTJBID0gZTI7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgdHJ5X0Jsb2NrRXhwcigpOwogICAgICAgICAgbWVtb2l6ZSgxNCwgZTBBLCAtMTApOwogICAgICAgICAgbGsgPSAtMTQ7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChwMTBBKQogICAgICAgIHsKICAgICAgICAgIGxrID0gLTExOwogICAgICAgICAgYjAgPSBiMEE7IGUwID0gZTBBOyBsMSA9IGwxQTsgaWYgKGwxID09IDApIHtlbmQgPSBlMEE7fSBlbHNlIHsKICAgICAgICAgIGIxID0gYjFBOyBlMSA9IGUxQTsgbDIgPSBsMkE7IGlmIChsMiA9PSAwKSB7ZW5kID0gZTFBO30gZWxzZSB7CiAgICAgICAgICBiMiA9IGIyQTsgZTIgPSBlMkE7IGVuZCA9IGUyQTsgfX0KICAgICAgICAgIG1lbW9pemUoMTQsIGUwQSwgLTExKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN3aXRjaCAobGspCiAgICB7CiAgICBjYXNlIDg6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVnZXJMaXRlcmFsCiAgICBjYXNlIDk6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY2ltYWxMaXRlcmFsCiAgICBjYXNlIDEwOiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZUxpdGVyYWwKICAgIGNhc2UgMTE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaW5nTGl0ZXJhbAogICAgICB0cnlfTGl0ZXJhbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMzE6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICAgIHRyeV9WYXJSZWYoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcoJwogICAgICB0cnlfUGFyZW50aGVzaXplZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDQ0OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICcuJwogICAgICB0cnlfQ29udGV4dEl0ZW1FeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAxNzQxNDogICAgICAgICAgICAgICAgICAgICAvLyBFUU5hbWVeVG9rZW4gJygnCiAgICBjYXNlIDE3NDc4OiAgICAgICAgICAgICAgICAgICAgIC8vICdhZnRlcicgJygnCiAgICBjYXNlIDE3NDgwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbGxvd2luZycgJygnCiAgICBjYXNlIDE3NDgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3RvcicgJygnCiAgICBjYXNlIDE3NDgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmNlc3Rvci1vci1zZWxmJyAnKCcKICAgIGNhc2UgMTc0ODM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FuZCcgJygnCiAgICBjYXNlIDE3NDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdhcHBlbmQnICcoJwogICAgY2FzZSAxNzQ4NzogICAgICAgICAgICAgICAgICAgICAvLyAnYXMnICcoJwogICAgY2FzZSAxNzQ4ODogICAgICAgICAgICAgICAgICAgICAvLyAnYXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc0ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2F0JyAnKCcKICAgIGNhc2UgMTc0OTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Jhc2UtdXJpJyAnKCcKICAgIGNhc2UgMTc0OTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JlZm9yZScgJygnCiAgICBjYXNlIDE3NDkzOiAgICAgICAgICAgICAgICAgICAgIC8vICdib3VuZGFyeS1zcGFjZScgJygnCiAgICBjYXNlIDE3NDk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdicmVhaycgJygnCiAgICBjYXNlIDE3NDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXNlJyAnKCcKICAgIGNhc2UgMTc0OTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc3QnICcoJwogICAgY2FzZSAxNzQ5ODogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdGFibGUnICcoJwogICAgY2FzZSAxNzQ5OTogICAgICAgICAgICAgICAgICAgICAvLyAnY2F0Y2gnICcoJwogICAgY2FzZSAxNzUwMTogICAgICAgICAgICAgICAgICAgICAvLyAnY2hpbGQnICcoJwogICAgY2FzZSAxNzUwMjogICAgICAgICAgICAgICAgICAgICAvLyAnY29sbGF0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cmFpbnQnICcoJwogICAgY2FzZSAxNzUwNjogICAgICAgICAgICAgICAgICAgICAvLyAnY29uc3RydWN0aW9uJyAnKCcKICAgIGNhc2UgMTc1MDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRleHQnICcoJwogICAgY2FzZSAxNzUxMDogICAgICAgICAgICAgICAgICAgICAvLyAnY29udGludWUnICcoJwogICAgY2FzZSAxNzUxMTogICAgICAgICAgICAgICAgICAgICAvLyAnY29weScgJygnCiAgICBjYXNlIDE3NTEyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb3B5LW5hbWVzcGFjZXMnICcoJwogICAgY2FzZSAxNzUxMzogICAgICAgICAgICAgICAgICAgICAvLyAnY291bnQnICcoJwogICAgY2FzZSAxNzUxNDogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjaW1hbC1mb3JtYXQnICcoJwogICAgY2FzZSAxNzUxNjogICAgICAgICAgICAgICAgICAgICAvLyAnZGVjbGFyZScgJygnCiAgICBjYXNlIDE3NTE3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWZhdWx0JyAnKCcKICAgIGNhc2UgMTc1MTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlbGV0ZScgJygnCiAgICBjYXNlIDE3NTE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50JyAnKCcKICAgIGNhc2UgMTc1MjA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Rlc2NlbmRhbnQtb3Itc2VsZicgJygnCiAgICBjYXNlIDE3NTIxOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kaW5nJyAnKCcKICAgIGNhc2UgMTc1MjY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RpdicgJygnCiAgICBjYXNlIDE3NTI3OiAgICAgICAgICAgICAgICAgICAgIC8vICdkb2N1bWVudCcgJygnCiAgICBjYXNlIDE3NTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnKCcKICAgIGNhc2UgMTc1MzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnKCcKICAgIGNhc2UgMTc1MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnKCcKICAgIGNhc2UgMTc1MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJygnCiAgICBjYXNlIDE3NTM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJygnCiAgICBjYXNlIDE3NTM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJygnCiAgICBjYXNlIDE3NTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcoJwogICAgY2FzZSAxNzU0MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJygnCiAgICBjYXNlIDE3NTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJygnCiAgICBjYXNlIDE3NTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJygnCiAgICBjYXNlIDE3NTQzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcoJwogICAgY2FzZSAxNzU0NDogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzU0NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnKCcKICAgIGNhc2UgMTc1NDk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJygnCiAgICBjYXNlIDE3NTU0OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJygnCiAgICBjYXNlIDE3NTU2OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJygnCiAgICBjYXNlIDE3NTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJygnCiAgICBjYXNlIDE3NTU5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnKCcKICAgIGNhc2UgMTc1NjE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJygnCiAgICBjYXNlIDE3NTYyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJygnCiAgICBjYXNlIDE3NTYzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJygnCiAgICBjYXNlIDE3NTY3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcoJwogICAgY2FzZSAxNzU2ODogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcoJwogICAgY2FzZSAxNzU2OTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnKCcKICAgIGNhc2UgMTc1NzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJygnCiAgICBjYXNlIDE3NTcxOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnKCcKICAgIGNhc2UgMTc1NzI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnKCcKICAgIGNhc2UgMTc1NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcoJwogICAgY2FzZSAxNzU3ODogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJygnCiAgICBjYXNlIDE3NTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcoJwogICAgY2FzZSAxNzU4MDogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcoJwogICAgY2FzZSAxNzU4MjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnKCcKICAgIGNhc2UgMTc1ODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcoJwogICAgY2FzZSAxNzU4NjogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcoJwogICAgY2FzZSAxNzU4ODogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnKCcKICAgIGNhc2UgMTc1ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJygnCiAgICBjYXNlIDE3NTkwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcoJwogICAgY2FzZSAxNzU5MjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnKCcKICAgIGNhc2UgMTc1OTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnKCcKICAgIGNhc2UgMTc2MDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnKCcKICAgIGNhc2UgMTc2MDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJygnCiAgICBjYXNlIDE3NjA2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnKCcKICAgIGNhc2UgMTc2MDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJygnCiAgICBjYXNlIDE3NjA4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJygnCiAgICBjYXNlIDE3NjA5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJygnCiAgICBjYXNlIDE3NjEwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnKCcKICAgIGNhc2UgMTc2MTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnKCcKICAgIGNhc2UgMTc2MTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJygnCiAgICBjYXNlIDE3NjIwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcoJwogICAgY2FzZSAxNzYyMTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcoJwogICAgY2FzZSAxNzYyNjogICAgICAgICAgICAgICAgICAgICAvLyAncmVuYW1lJyAnKCcKICAgIGNhc2UgMTc2Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JlcGxhY2UnICcoJwogICAgY2FzZSAxNzYyODogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuJyAnKCcKICAgIGNhc2UgMTc2Mjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldHVybmluZycgJygnCiAgICBjYXNlIDE3NjMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXZhbGlkYXRpb24nICcoJwogICAgY2FzZSAxNzYzMjogICAgICAgICAgICAgICAgICAgICAvLyAnc2F0aXNmaWVzJyAnKCcKICAgIGNhc2UgMTc2MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYScgJygnCiAgICBjYXNlIDE3NjM2OiAgICAgICAgICAgICAgICAgICAgIC8vICdzY29yZScgJygnCiAgICBjYXNlIDE3NjM3OiAgICAgICAgICAgICAgICAgICAgIC8vICdzZWxmJyAnKCcKICAgIGNhc2UgMTc2NDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NsaWRpbmcnICcoJwogICAgY2FzZSAxNzY0MzogICAgICAgICAgICAgICAgICAgICAvLyAnc29tZScgJygnCiAgICBjYXNlIDE3NjQ0OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFibGUnICcoJwogICAgY2FzZSAxNzY0NTogICAgICAgICAgICAgICAgICAgICAvLyAnc3RhcnQnICcoJwogICAgY2FzZSAxNzY0ODogICAgICAgICAgICAgICAgICAgICAvLyAnc3RyaWN0JyAnKCcKICAgIGNhc2UgMTc2NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RvJyAnKCcKICAgIGNhc2UgMTc2NTc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyZWF0JyAnKCcKICAgIGNhc2UgMTc2NTg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3RyeScgJygnCiAgICBjYXNlIDE3NjU5OiAgICAgICAgICAgICAgICAgICAgIC8vICd0dW1ibGluZycgJygnCiAgICBjYXNlIDE3NjYwOiAgICAgICAgICAgICAgICAgICAgIC8vICd0eXBlJyAnKCcKICAgIGNhc2UgMTc2NjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3VuaW9uJyAnKCcKICAgIGNhc2UgMTc2NjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Vub3JkZXJlZCcgJygnCiAgICBjYXNlIDE3NjY1OiAgICAgICAgICAgICAgICAgICAgIC8vICd1cGRhdGluZycgJygnCiAgICBjYXNlIDE3NjY4OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWxpZGF0ZScgJygnCiAgICBjYXNlIDE3NjY5OiAgICAgICAgICAgICAgICAgICAgIC8vICd2YWx1ZScgJygnCiAgICBjYXNlIDE3NjcwOiAgICAgICAgICAgICAgICAgICAgIC8vICd2YXJpYWJsZScgJygnCiAgICBjYXNlIDE3NjcxOiAgICAgICAgICAgICAgICAgICAgIC8vICd2ZXJzaW9uJyAnKCcKICAgIGNhc2UgMTc2NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doZXJlJyAnKCcKICAgIGNhc2UgMTc2NzU6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3doaWxlJyAnKCcKICAgIGNhc2UgMTc2Nzg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3dpdGgnICcoJwogICAgY2FzZSAxNzY4MjogICAgICAgICAgICAgICAgICAgICAvLyAneHF1ZXJ5JyAnKCcKICAgICAgdHJ5X0Z1bmN0aW9uQ2FsbCgpOwogICAgICBicmVhazsKICAgIGNhc2UgMTQxNTE0OiAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyZWQnICd7JwogICAgICB0cnlfT3JkZXJlZEV4cHIoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDE0MTU2ODogICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICd7JwogICAgICB0cnlfVW5vcmRlcmVkRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMzI6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyUnCiAgICBjYXNlIDc4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhcnJheScKICAgIGNhc2UgMTIwOiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2RvY3VtZW50LW5vZGUnCiAgICBjYXNlIDEyNDogICAgICAgICAgICAgICAgICAgICAgIC8vICdlbXB0eS1zZXF1ZW5jZScKICAgIGNhc2UgMTQ1OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z1bmN0aW9uJwogICAgY2FzZSAxNTI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnaWYnCiAgICBjYXNlIDE2NTogICAgICAgICAgICAgICAgICAgICAgIC8vICdpdGVtJwogICAgY2FzZSAxNjc6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnanNvbi1pdGVtJwogICAgY2FzZSAxODU6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlLW5vZGUnCiAgICBjYXNlIDE5MTogICAgICAgICAgICAgICAgICAgICAgIC8vICdub2RlJwogICAgY2FzZSAyMjY6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hLWF0dHJpYnV0ZScKICAgIGNhc2UgMjI3OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3NjaGVtYS1lbGVtZW50JwogICAgY2FzZSAyNDI6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3RydWN0dXJlZC1pdGVtJwogICAgY2FzZSAyNDM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAnc3dpdGNoJwogICAgY2FzZSAyNTM6ICAgICAgICAgICAgICAgICAgICAgICAvLyAndHlwZXN3aXRjaCcKICAgIGNhc2UgMTQ4NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuICcjJwogICAgY2FzZSAxNDkxODogICAgICAgICAgICAgICAgICAgICAvLyAnYWZ0ZXInICcjJwogICAgY2FzZSAxNDkyMDogICAgICAgICAgICAgICAgICAgICAvLyAnYWxsb3dpbmcnICcjJwogICAgY2FzZSAxNDkyMTogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3InICcjJwogICAgY2FzZSAxNDkyMjogICAgICAgICAgICAgICAgICAgICAvLyAnYW5jZXN0b3Itb3Itc2VsZicgJyMnCiAgICBjYXNlIDE0OTIzOiAgICAgICAgICAgICAgICAgICAgIC8vICdhbmQnICcjJwogICAgY2FzZSAxNDkyNTogICAgICAgICAgICAgICAgICAgICAvLyAnYXBwZW5kJyAnIycKICAgIGNhc2UgMTQ5Mjc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzJyAnIycKICAgIGNhc2UgMTQ5Mjg6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2FzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTI5OiAgICAgICAgICAgICAgICAgICAgIC8vICdhdCcgJyMnCiAgICBjYXNlIDE0OTMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdhdHRyaWJ1dGUnICcjJwogICAgY2FzZSAxNDkzMTogICAgICAgICAgICAgICAgICAgICAvLyAnYmFzZS11cmknICcjJwogICAgY2FzZSAxNDkzMjogICAgICAgICAgICAgICAgICAgICAvLyAnYmVmb3JlJyAnIycKICAgIGNhc2UgMTQ5MzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JvdW5kYXJ5LXNwYWNlJyAnIycKICAgIGNhc2UgMTQ5MzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2JyZWFrJyAnIycKICAgIGNhc2UgMTQ5MzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Nhc2UnICcjJwogICAgY2FzZSAxNDkzNzogICAgICAgICAgICAgICAgICAgICAvLyAnY2FzdCcgJyMnCiAgICBjYXNlIDE0OTM4OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXN0YWJsZScgJyMnCiAgICBjYXNlIDE0OTM5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjYXRjaCcgJyMnCiAgICBjYXNlIDE0OTQxOiAgICAgICAgICAgICAgICAgICAgIC8vICdjaGlsZCcgJyMnCiAgICBjYXNlIDE0OTQyOiAgICAgICAgICAgICAgICAgICAgIC8vICdjb2xsYXRpb24nICcjJwogICAgY2FzZSAxNDk0NDogICAgICAgICAgICAgICAgICAgICAvLyAnY29tbWVudCcgJyMnCiAgICBjYXNlIDE0OTQ1OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb25zdHJhaW50JyAnIycKICAgIGNhc2UgMTQ5NDY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE0OTQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdjb250ZXh0JyAnIycKICAgIGNhc2UgMTQ5NTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvbnRpbnVlJyAnIycKICAgIGNhc2UgMTQ5NTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvcHknICcjJwogICAgY2FzZSAxNDk1MjogICAgICAgICAgICAgICAgICAgICAvLyAnY29weS1uYW1lc3BhY2VzJyAnIycKICAgIGNhc2UgMTQ5NTM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2NvdW50JyAnIycKICAgIGNhc2UgMTQ5NTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2ltYWwtZm9ybWF0JyAnIycKICAgIGNhc2UgMTQ5NTY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2RlY2xhcmUnICcjJwogICAgY2FzZSAxNDk1NzogICAgICAgICAgICAgICAgICAgICAvLyAnZGVmYXVsdCcgJyMnCiAgICBjYXNlIDE0OTU4OiAgICAgICAgICAgICAgICAgICAgIC8vICdkZWxldGUnICcjJwogICAgY2FzZSAxNDk1OTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGFudCcgJyMnCiAgICBjYXNlIDE0OTYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdkZXNjZW5kYW50LW9yLXNlbGYnICcjJwogICAgY2FzZSAxNDk2MTogICAgICAgICAgICAgICAgICAgICAvLyAnZGVzY2VuZGluZycgJyMnCiAgICBjYXNlIDE0OTY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdkaXYnICcjJwogICAgY2FzZSAxNDk2NzogICAgICAgICAgICAgICAgICAgICAvLyAnZG9jdW1lbnQnICcjJwogICAgY2FzZSAxNDk2OTogICAgICAgICAgICAgICAgICAgICAvLyAnZWxlbWVudCcgJyMnCiAgICBjYXNlIDE0OTcwOiAgICAgICAgICAgICAgICAgICAgIC8vICdlbHNlJyAnIycKICAgIGNhc2UgMTQ5NzE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VtcHR5JyAnIycKICAgIGNhc2UgMTQ5NzM6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuY29kaW5nJyAnIycKICAgIGNhc2UgMTQ5NzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2VuZCcgJyMnCiAgICBjYXNlIDE0OTc2OiAgICAgICAgICAgICAgICAgICAgIC8vICdlcScgJyMnCiAgICBjYXNlIDE0OTc3OiAgICAgICAgICAgICAgICAgICAgIC8vICdldmVyeScgJyMnCiAgICBjYXNlIDE0OTc5OiAgICAgICAgICAgICAgICAgICAgIC8vICdleGNlcHQnICcjJwogICAgY2FzZSAxNDk4MDogICAgICAgICAgICAgICAgICAgICAvLyAnZXhpdCcgJyMnCiAgICBjYXNlIDE0OTgxOiAgICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcgJyMnCiAgICBjYXNlIDE0OTgyOiAgICAgICAgICAgICAgICAgICAgIC8vICdmaXJzdCcgJyMnCiAgICBjYXNlIDE0OTgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdmb2xsb3dpbmcnICcjJwogICAgY2FzZSAxNDk4NDogICAgICAgICAgICAgICAgICAgICAvLyAnZm9sbG93aW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNDk4NTogICAgICAgICAgICAgICAgICAgICAvLyAnZm9yJyAnIycKICAgIGNhc2UgMTQ5ODk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2Z0LW9wdGlvbicgJyMnCiAgICBjYXNlIDE0OTk0OiAgICAgICAgICAgICAgICAgICAgIC8vICdnZScgJyMnCiAgICBjYXNlIDE0OTk2OiAgICAgICAgICAgICAgICAgICAgIC8vICdncm91cCcgJyMnCiAgICBjYXNlIDE0OTk4OiAgICAgICAgICAgICAgICAgICAgIC8vICdndCcgJyMnCiAgICBjYXNlIDE0OTk5OiAgICAgICAgICAgICAgICAgICAgIC8vICdpZGl2JyAnIycKICAgIGNhc2UgMTUwMDE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ltcG9ydCcgJyMnCiAgICBjYXNlIDE1MDAyOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbicgJyMnCiAgICBjYXNlIDE1MDAzOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbmRleCcgJyMnCiAgICBjYXNlIDE1MDA3OiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnNlcnQnICcjJwogICAgY2FzZSAxNTAwODogICAgICAgICAgICAgICAgICAgICAvLyAnaW5zdGFuY2UnICcjJwogICAgY2FzZSAxNTAwOTogICAgICAgICAgICAgICAgICAgICAvLyAnaW50ZWdyaXR5JyAnIycKICAgIGNhc2UgMTUwMTA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2ludGVyc2VjdCcgJyMnCiAgICBjYXNlIDE1MDExOiAgICAgICAgICAgICAgICAgICAgIC8vICdpbnRvJyAnIycKICAgIGNhc2UgMTUwMTI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2lzJyAnIycKICAgIGNhc2UgMTUwMTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2pzb24nICcjJwogICAgY2FzZSAxNTAxODogICAgICAgICAgICAgICAgICAgICAvLyAnbGFzdCcgJyMnCiAgICBjYXNlIDE1MDE5OiAgICAgICAgICAgICAgICAgICAgIC8vICdsYXgnICcjJwogICAgY2FzZSAxNTAyMDogICAgICAgICAgICAgICAgICAgICAvLyAnbGUnICcjJwogICAgY2FzZSAxNTAyMjogICAgICAgICAgICAgICAgICAgICAvLyAnbGV0JyAnIycKICAgIGNhc2UgMTUwMjQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ2xvb3AnICcjJwogICAgY2FzZSAxNTAyNjogICAgICAgICAgICAgICAgICAgICAvLyAnbHQnICcjJwogICAgY2FzZSAxNTAyODogICAgICAgICAgICAgICAgICAgICAvLyAnbW9kJyAnIycKICAgIGNhc2UgMTUwMjk6ICAgICAgICAgICAgICAgICAgICAgLy8gJ21vZGlmeScgJyMnCiAgICBjYXNlIDE1MDMwOiAgICAgICAgICAgICAgICAgICAgIC8vICdtb2R1bGUnICcjJwogICAgY2FzZSAxNTAzMjogICAgICAgICAgICAgICAgICAgICAvLyAnbmFtZXNwYWNlJyAnIycKICAgIGNhc2UgMTUwMzQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25lJyAnIycKICAgIGNhc2UgMTUwNDA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ25vZGVzJyAnIycKICAgIGNhc2UgMTUwNDI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29iamVjdCcgJyMnCiAgICBjYXNlIDE1MDQ2OiAgICAgICAgICAgICAgICAgICAgIC8vICdvbmx5JyAnIycKICAgIGNhc2UgMTUwNDc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29wdGlvbicgJyMnCiAgICBjYXNlIDE1MDQ4OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcicgJyMnCiAgICBjYXNlIDE1MDQ5OiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcicgJyMnCiAgICBjYXNlIDE1MDUwOiAgICAgICAgICAgICAgICAgICAgIC8vICdvcmRlcmVkJyAnIycKICAgIGNhc2UgMTUwNTE6ICAgICAgICAgICAgICAgICAgICAgLy8gJ29yZGVyaW5nJyAnIycKICAgIGNhc2UgMTUwNTQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3BhcmVudCcgJyMnCiAgICBjYXNlIDE1MDYwOiAgICAgICAgICAgICAgICAgICAgIC8vICdwcmVjZWRpbmcnICcjJwogICAgY2FzZSAxNTA2MTogICAgICAgICAgICAgICAgICAgICAvLyAncHJlY2VkaW5nLXNpYmxpbmcnICcjJwogICAgY2FzZSAxNTA2NDogICAgICAgICAgICAgICAgICAgICAvLyAncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicgJyMnCiAgICBjYXNlIDE1MDY2OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZW5hbWUnICcjJwogICAgY2FzZSAxNTA2NzogICAgICAgICAgICAgICAgICAgICAvLyAncmVwbGFjZScgJyMnCiAgICBjYXNlIDE1MDY4OiAgICAgICAgICAgICAgICAgICAgIC8vICdyZXR1cm4nICcjJwogICAgY2FzZSAxNTA2OTogICAgICAgICAgICAgICAgICAgICAvLyAncmV0dXJuaW5nJyAnIycKICAgIGNhc2UgMTUwNzA6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3JldmFsaWRhdGlvbicgJyMnCiAgICBjYXNlIDE1MDcyOiAgICAgICAgICAgICAgICAgICAgIC8vICdzYXRpc2ZpZXMnICcjJwogICAgY2FzZSAxNTA3MzogICAgICAgICAgICAgICAgICAgICAvLyAnc2NoZW1hJyAnIycKICAgIGNhc2UgMTUwNzY6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3Njb3JlJyAnIycKICAgIGNhc2UgMTUwNzc6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3NlbGYnICcjJwogICAgY2FzZSAxNTA4MjogICAgICAgICAgICAgICAgICAgICAvLyAnc2xpZGluZycgJyMnCiAgICBjYXNlIDE1MDgzOiAgICAgICAgICAgICAgICAgICAgIC8vICdzb21lJyAnIycKICAgIGNhc2UgMTUwODQ6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3N0YWJsZScgJyMnCiAgICBjYXNlIDE1MDg1OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdGFydCcgJyMnCiAgICBjYXNlIDE1MDg4OiAgICAgICAgICAgICAgICAgICAgIC8vICdzdHJpY3QnICcjJwogICAgY2FzZSAxNTA5MjogICAgICAgICAgICAgICAgICAgICAvLyAndGV4dCcgJyMnCiAgICBjYXNlIDE1MDk2OiAgICAgICAgICAgICAgICAgICAgIC8vICd0bycgJyMnCiAgICBjYXNlIDE1MDk3OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cmVhdCcgJyMnCiAgICBjYXNlIDE1MDk4OiAgICAgICAgICAgICAgICAgICAgIC8vICd0cnknICcjJwogICAgY2FzZSAxNTA5OTogICAgICAgICAgICAgICAgICAgICAvLyAndHVtYmxpbmcnICcjJwogICAgY2FzZSAxNTEwMDogICAgICAgICAgICAgICAgICAgICAvLyAndHlwZScgJyMnCiAgICBjYXNlIDE1MTAyOiAgICAgICAgICAgICAgICAgICAgIC8vICd1bmlvbicgJyMnCiAgICBjYXNlIDE1MTA0OiAgICAgICAgICAgICAgICAgICAgIC8vICd1bm9yZGVyZWQnICcjJwogICAgY2FzZSAxNTEwNTogICAgICAgICAgICAgICAgICAgICAvLyAndXBkYXRpbmcnICcjJwogICAgY2FzZSAxNTEwODogICAgICAgICAgICAgICAgICAgICAvLyAndmFsaWRhdGUnICcjJwogICAgY2FzZSAxNTEwOTogICAgICAgICAgICAgICAgICAgICAvLyAndmFsdWUnICcjJwogICAgY2FzZSAxNTExMDogICAgICAgICAgICAgICAgICAgICAvLyAndmFyaWFibGUnICcjJwogICAgY2FzZSAxNTExMTogICAgICAgICAgICAgICAgICAgICAvLyAndmVyc2lvbicgJyMnCiAgICBjYXNlIDE1MTE0OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGVyZScgJyMnCiAgICBjYXNlIDE1MTE1OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aGlsZScgJyMnCiAgICBjYXNlIDE1MTE4OiAgICAgICAgICAgICAgICAgICAgIC8vICd3aXRoJyAnIycKICAgIGNhc2UgMTUxMjI6ICAgICAgICAgICAgICAgICAgICAgLy8gJ3hxdWVyeScgJyMnCiAgICAgIHRyeV9GdW5jdGlvbkl0ZW1FeHByKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTA6CiAgICBjYXNlIDI3NDEyOiAgICAgICAgICAgICAgICAgICAgIC8vICd7JyAnOycKICAgICAgdHJ5X0Jsb2NrRXhwcigpOwogICAgICBicmVhazsKICAgIGNhc2UgLTExOgogICAgICB0cnlfT2JqZWN0Q29uc3RydWN0b3IoKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDY4OiAgICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgICB0cnlfQXJyYXlDb25zdHJ1Y3RvcigpOwogICAgICBicmVhazsKICAgIGNhc2UgMjc4OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3t8JwogICAgICB0cnlfSlNPTlNpbXBsZU9iamVjdFVuaW9uKCk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAtMTQ6CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgdHJ5X0NvbnN0cnVjdG9yKCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBwYXJzZV9KU09OU2ltcGxlT2JqZWN0VW5pb24oKQogIHsKICAgIGV2ZW50SGFuZGxlci5zdGFydE5vbnRlcm1pbmFsKCJKU09OU2ltcGxlT2JqZWN0VW5pb24iLCBlMCk7CiAgICBzaGlmdCgyNzgpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7fCcKICAgIGxvb2thaGVhZDFXKDI3Mik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICBpZiAobDEgIT0gMjgxKSAgICAgICAgICAgICAgICAgIC8vICd8fScKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9FeHByKCk7CiAgICB9CiAgICBzaGlmdCgyODEpOyAgICAgICAgICAgICAgICAgICAgIC8vICd8fScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiSlNPTlNpbXBsZU9iamVjdFVuaW9uIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gdHJ5X0pTT05TaW1wbGVPYmplY3RVbmlvbigpCiAgewogICAgc2hpZnRUKDI3OCk7ICAgICAgICAgICAgICAgICAgICAvLyAne3wnCiAgICBsb29rYWhlYWQxVygyNzIpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgaWYgKGwxICE9IDI4MSkgICAgICAgICAgICAgICAgICAvLyAnfH0nCiAgICB7CiAgICAgIHRyeV9FeHByKCk7CiAgICB9CiAgICBzaGlmdFQoMjgxKTsgICAgICAgICAgICAgICAgICAgIC8vICd8fScKICB9CgogIGZ1bmN0aW9uIHBhcnNlX09iamVjdENvbnN0cnVjdG9yKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiT2JqZWN0Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCgyNzYpOyAgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjczKTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIGlmIChsMSAhPSAyODIpICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUGFpckNvbnN0cnVjdG9yTGlzdCgpOwogICAgfQogICAgc2hpZnQoMjgyKTsgICAgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiT2JqZWN0Q29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfT2JqZWN0Q29uc3RydWN0b3IoKQogIHsKICAgIHNoaWZ0VCgyNzYpOyAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICBsb29rYWhlYWQxVygyNzMpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgaWYgKGwxICE9IDI4MikgICAgICAgICAgICAgICAgICAvLyAnfScKICAgIHsKICAgICAgdHJ5X1BhaXJDb25zdHJ1Y3Rvckxpc3QoKTsKICAgIH0KICAgIHNoaWZ0VCgyODIpOyAgICAgICAgICAgICAgICAgICAgLy8gJ30nCiAgfQoKICBmdW5jdGlvbiBwYXJzZV9QYWlyQ29uc3RydWN0b3JMaXN0KCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiUGFpckNvbnN0cnVjdG9yTGlzdCIsIGUwKTsKICAgIHBhcnNlX1BhaXJDb25zdHJ1Y3RvcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdCg0MSk7ICAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUGFpckNvbnN0cnVjdG9yKCk7CiAgICB9CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlBhaXJDb25zdHJ1Y3Rvckxpc3QiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUGFpckNvbnN0cnVjdG9yTGlzdCgpCiAgewogICAgdHJ5X1BhaXJDb25zdHJ1Y3RvcigpOwogICAgZm9yICg7OykKICAgIHsKICAgICAgaWYgKGwxICE9IDQxKSAgICAgICAgICAgICAgICAgLy8gJywnCiAgICAgIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBzaGlmdFQoNDEpOyAgICAgICAgICAgICAgICAgICAvLyAnLCcKICAgICAgbG9va2FoZWFkMVcoMjY2KTsgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICAgIHRyeV9QYWlyQ29uc3RydWN0b3IoKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHBhcnNlX1BhaXJDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlBhaXJDb25zdHJ1Y3RvciIsIGUwKTsKICAgIHBhcnNlX0V4cHJTaW5nbGUoKTsKICAgIHNoaWZ0KDQ5KTsgICAgICAgICAgICAgICAgICAgICAgLy8gJzonCiAgICBsb29rYWhlYWQxVygyNjYpOyAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIHwgRVFOYW1lXlRva2VuIHwgSW50ZWdlckxpdGVyYWwgfCBEZWNpbWFsTGl0ZXJhbCB8IERvdWJsZUxpdGVyYWwgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfRXhwclNpbmdsZSgpOwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJQYWlyQ29uc3RydWN0b3IiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfUGFpckNvbnN0cnVjdG9yKCkKICB7CiAgICB0cnlfRXhwclNpbmdsZSgpOwogICAgc2hpZnRUKDQ5KTsgICAgICAgICAgICAgICAgICAgICAvLyAnOicKICAgIGxvb2thaGVhZDFXKDI2Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB0cnlfRXhwclNpbmdsZSgpOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQXJyYXlDb25zdHJ1Y3RvcigpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIkFycmF5Q29uc3RydWN0b3IiLCBlMCk7CiAgICBzaGlmdCg2OCk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMjcxKTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIGlmIChsMSAhPSA2OSkgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfRXhwcigpOwogICAgfQogICAgc2hpZnQoNjkpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnXScKICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiQXJyYXlDb25zdHJ1Y3RvciIsIGUwKTsKICB9CgogIGZ1bmN0aW9uIHRyeV9BcnJheUNvbnN0cnVjdG9yKCkKICB7CiAgICBzaGlmdFQoNjgpOyAgICAgICAgICAgICAgICAgICAgIC8vICdbJwogICAgbG9va2FoZWFkMVcoMjcxKTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIGlmIChsMSAhPSA2OSkgICAgICAgICAgICAgICAgICAgLy8gJ10nCiAgICB7CiAgICAgIHRyeV9FeHByKCk7CiAgICB9CiAgICBzaGlmdFQoNjkpOyAgICAgICAgICAgICAgICAgICAgIC8vICddJwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfQmxvY2tFeHByKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiQmxvY2tFeHByIiwgZTApOwogICAgc2hpZnQoMjc2KTsgICAgICAgICAgICAgICAgICAgICAvLyAneycKICAgIGxvb2thaGVhZDFXKDI3Nik7ICAgICAgICAgICAgICAgLy8gV2lsZGNhcmQgfCBFUU5hbWVeVG9rZW4gfCBJbnRlZ2VyTGl0ZXJhbCB8IERlY2ltYWxMaXRlcmFsIHwgRG91YmxlTGl0ZXJhbCB8CiAgICB3aGl0ZXNwYWNlKCk7CiAgICBwYXJzZV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCk7CiAgICBzaGlmdCgyODIpOyAgICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgZXZlbnRIYW5kbGVyLmVuZE5vbnRlcm1pbmFsKCJCbG9ja0V4cHIiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiB0cnlfQmxvY2tFeHByKCkKICB7CiAgICBzaGlmdFQoMjc2KTsgICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgbG9va2FoZWFkMVcoMjc2KTsgICAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgIHRyeV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCk7CiAgICBzaGlmdFQoMjgyKTsgICAgICAgICAgICAgICAgICAgIC8vICd9JwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfRnVuY3Rpb25EZWNsKCkKICB7CiAgICBldmVudEhhbmRsZXIuc3RhcnROb250ZXJtaW5hbCgiRnVuY3Rpb25EZWNsIiwgZTApOwogICAgc2hpZnQoMTQ1KTsgICAgICAgICAgICAgICAgICAgICAvLyAnZnVuY3Rpb24nCiAgICBsb29rYWhlYWQxVygyNTQpOyAgICAgICAgICAgICAgIC8vIEVRTmFtZV5Ub2tlbiB8IFNeV1MgfCAnKDonIHwgJ2FmdGVyJyB8ICdhbGxvd2luZycgfCAnYW5jZXN0b3InIHwKICAgIHdoaXRlc3BhY2UoKTsKICAgIHBhcnNlX0VRTmFtZSgpOwogICAgbG9va2FoZWFkMVcoMjIpOyAgICAgICAgICAgICAgICAvLyBTXldTIHwgJygnIHwgJyg6JwogICAgc2hpZnQoMzQpOyAgICAgICAgICAgICAgICAgICAgICAvLyAnKCcKICAgIGxvb2thaGVhZDFXKDk0KTsgICAgICAgICAgICAgICAgLy8gU15XUyB8ICckJyB8ICcoOicgfCAnKScKICAgIGlmIChsMSA9PSAzMSkgICAgICAgICAgICAgICAgICAgLy8gJyQnCiAgICB7CiAgICAgIHdoaXRlc3BhY2UoKTsKICAgICAgcGFyc2VfUGFyYW1MaXN0KCk7CiAgICB9CiAgICBzaGlmdCgzNyk7ICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwogICAgbG9va2FoZWFkMVcoMTQ4KTsgICAgICAgICAgICAgICAvLyBTXldTIHwgJyg6JyB8ICdhcycgfCAnZXh0ZXJuYWwnIHwgJ3snCiAgICBpZiAobDEgPT0gNzkpICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIHsKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9SZXR1cm5UeXBlKCk7CiAgICB9CiAgICBsb29rYWhlYWQxVygxMTgpOyAgICAgICAgICAgICAgIC8vIFNeV1MgfCAnKDonIHwgJ2V4dGVybmFsJyB8ICd7JwogICAgc3dpdGNoIChsMSkKICAgIHsKICAgIGNhc2UgMjc2OiAgICAgICAgICAgICAgICAgICAgICAgLy8gJ3snCiAgICAgIHNoaWZ0KDI3Nik7ICAgICAgICAgICAgICAgICAgIC8vICd7JwogICAgICBsb29rYWhlYWQxVygyNzYpOyAgICAgICAgICAgICAvLyBXaWxkY2FyZCB8IEVRTmFtZV5Ub2tlbiB8IEludGVnZXJMaXRlcmFsIHwgRGVjaW1hbExpdGVyYWwgfCBEb3VibGVMaXRlcmFsIHwKICAgICAgd2hpdGVzcGFjZSgpOwogICAgICBwYXJzZV9TdGF0ZW1lbnRzQW5kT3B0aW9uYWxFeHByKCk7CiAgICAgIHNoaWZ0KDI4Mik7ICAgICAgICAgICAgICAgICAgIC8vICd9JwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIHNoaWZ0KDEzMyk7ICAgICAgICAgICAgICAgICAgIC8vICdleHRlcm5hbCcKICAgIH0KICAgIGV2ZW50SGFuZGxlci5lbmROb250ZXJtaW5hbCgiRnVuY3Rpb25EZWNsIiwgZTApOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VfUmV0dXJuVHlwZSgpCiAgewogICAgZXZlbnRIYW5kbGVyLnN0YXJ0Tm9udGVybWluYWwoIlJldHVyblR5cGUiLCBlMCk7CiAgICBzaGlmdCg3OSk7ICAgICAgICAgICAgICAgICAgICAgIC8vICdhcycKICAgIGxvb2thaGVhZDFXKDI1OSk7ICAgICAgICAgICAgICAgLy8gRVFOYW1lXlRva2VuIHwgU15XUyB8ICclJyB8ICcoJyB8ICcoOicgfCAnYWZ0ZXInIHwgJ2FsbG93aW5nJyB8ICdhbmNlc3RvcicgfAogICAgd2hpdGVzcGFjZSgpOwogICAgcGFyc2VfU2VxdWVuY2VUeXBlKCk7CiAgICBldmVudEhhbmRsZXIuZW5kTm9udGVybWluYWwoIlJldHVyblR5cGUiLCBlMCk7CiAgfQoKICBmdW5jdGlvbiBzaGlmdCh0KQogIHsKICAgIGlmIChsMSA9PSB0KQogICAgewogICAgICB3aGl0ZXNwYWNlKCk7CiAgICAgIGV2ZW50SGFuZGxlci50ZXJtaW5hbChYUXVlcnlQYXJzZXIuVE9LRU5bbDFdLCBiMSwgZTEgPiBzaXplID8gc2l6ZSA6IGUxKTsKICAgICAgYjAgPSBiMTsgZTAgPSBlMTsgbDEgPSBsMjsgaWYgKGwxICE9IDApIHsKICAgICAgYjEgPSBiMjsgZTEgPSBlMjsgbDIgPSAwOyB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGVycm9yKGIxLCBlMSwgMCwgbDEsIHQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gc2hpZnRUKHQpCiAgewogICAgaWYgKGwxID09IHQpCiAgICB7CiAgICAgIGIwID0gYjE7IGUwID0gZTE7IGwxID0gbDI7IGlmIChsMSAhPSAwKSB7CiAgICAgIGIxID0gYjI7IGUxID0gZTI7IGwyID0gMDsgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBlcnJvcihiMSwgZTEsIDAsIGwxLCB0KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNraXAoY29kZSkKICB7CiAgICB2YXIgYjBXID0gYjA7IHZhciBlMFcgPSBlMDsgdmFyIGwxVyA9IGwxOwogICAgdmFyIGIxVyA9IGIxOyB2YXIgZTFXID0gZTE7CgogICAgbDEgPSBjb2RlOyBiMSA9IGJlZ2luOyBlMSA9IGVuZDsKICAgIGwyID0gMDsKCiAgICB0cnlfV2hpdGVzcGFjZSgpOwoKICAgIGIwID0gYjBXOyBlMCA9IGUwVzsgbDEgPSBsMVc7IGlmIChsMSAhPSAwKSB7CiAgICBiMSA9IGIxVzsgZTEgPSBlMVc7IH0KICB9CgogIGZ1bmN0aW9uIHdoaXRlc3BhY2UoKQogIHsKICAgIGlmIChlMCAhPSBiMSkKICAgIHsKICAgICAgZXZlbnRIYW5kbGVyLndoaXRlc3BhY2UoZTAsIGIxKTsKICAgICAgZTAgPSBiMTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIG1hdGNoVyhzZXQpCiAgewogICAgdmFyIGNvZGU7CiAgICBmb3IgKDs7KQogICAgewogICAgICBjb2RlID0gbWF0Y2goc2V0KTsKICAgICAgaWYgKGNvZGUgIT0gMjIpICAgICAgICAgICAgICAgLy8gU15XUwogICAgICB7CiAgICAgICAgaWYgKGNvZGUgIT0gMzYpICAgICAgICAgICAgIC8vICcoOicKICAgICAgICB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgc2tpcChjb2RlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvZGU7CiAgfQoKICBmdW5jdGlvbiBsb29rYWhlYWQxVyhzZXQpCiAgewogICAgaWYgKGwxID09IDApCiAgICB7CiAgICAgIGwxID0gbWF0Y2hXKHNldCk7CiAgICAgIGIxID0gYmVnaW47CiAgICAgIGUxID0gZW5kOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbG9va2FoZWFkMlcoc2V0KQogIHsKICAgIGlmIChsMiA9PSAwKQogICAgewogICAgICBsMiA9IG1hdGNoVyhzZXQpOwogICAgICBiMiA9IGJlZ2luOwogICAgICBlMiA9IGVuZDsKICAgIH0KICAgIGxrID0gKGwyIDw8IDkpIHwgbDE7CiAgfQoKICBmdW5jdGlvbiBsb29rYWhlYWQxKHNldCkKICB7CiAgICBpZiAobDEgPT0gMCkKICAgIHsKICAgICAgbDEgPSBtYXRjaChzZXQpOwogICAgICBiMSA9IGJlZ2luOwogICAgICBlMSA9IGVuZDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGxvb2thaGVhZDIoc2V0KQogIHsKICAgIGlmIChsMiA9PSAwKQogICAgewogICAgICBsMiA9IG1hdGNoKHNldCk7CiAgICAgIGIyID0gYmVnaW47CiAgICAgIGUyID0gZW5kOwogICAgfQogICAgbGsgPSAobDIgPDwgOSkgfCBsMTsKICB9CgogIGZ1bmN0aW9uIGVycm9yKGIsIGUsIHMsIGwsIHQpCiAgewogICAgaWYgKGUgPj0gZXgpCiAgICB7CiAgICAgIGJ4ID0gYjsKICAgICAgZXggPSBlOwogICAgICBzeCA9IHM7CiAgICAgIGx4ID0gbDsKICAgICAgdHggPSB0OwogICAgfQogICAgdGhyb3cgbmV3IHNlbGYuUGFyc2VFeGNlcHRpb24oYngsIGV4LCBzeCwgbHgsIHR4KTsKICB9CgogIHZhciBsaywgYjAsIGUwOwogIHZhciBsMSwgYjEsIGUxOwogIHZhciBsMiwgYjIsIGUyOwogIHZhciBieCwgZXgsIHN4LCBseCwgdHg7CiAgdmFyIGV2ZW50SGFuZGxlcjsKICB2YXIgbWVtbzsKCiAgZnVuY3Rpb24gbWVtb2l6ZShpLCBlLCB2KQogIHsKICAgIG1lbW9bKGUgPDwgNCkgKyBpXSA9IHY7CiAgfQoKICBmdW5jdGlvbiBtZW1vaXplZChpLCBlKQogIHsKICAgIHZhciB2ID0gbWVtb1soZSA8PCA0KSArIGldOwogICAgcmV0dXJuIHR5cGVvZiB2ICE9ICJ1bmRlZmluZWQiID8gdiA6IDA7CiAgfQoKICB2YXIgaW5wdXQ7CiAgdmFyIHNpemU7CiAgdmFyIGJlZ2luOwogIHZhciBlbmQ7CgogIGZ1bmN0aW9uIG1hdGNoKHRva2VuU2V0SWQpCiAgewogICAgdmFyIG5vbmJtcCA9IGZhbHNlOwogICAgYmVnaW4gPSBlbmQ7CiAgICB2YXIgY3VycmVudCA9IGVuZDsKICAgIHZhciByZXN1bHQgPSBYUXVlcnlQYXJzZXIuSU5JVElBTFt0b2tlblNldElkXTsKICAgIHZhciBzdGF0ZSA9IDA7CgogICAgZm9yICh2YXIgY29kZSA9IHJlc3VsdCAmIDQwOTU7IGNvZGUgIT0gMDsgKQogICAgewogICAgICB2YXIgY2hhcmNsYXNzOwogICAgICB2YXIgYzAgPSBjdXJyZW50IDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoY3VycmVudCkgOiAwOwogICAgICArK2N1cnJlbnQ7CiAgICAgIGlmIChjMCA8IDB4ODApCiAgICAgIHsKICAgICAgICBjaGFyY2xhc3MgPSBYUXVlcnlQYXJzZXIuTUFQMFtjMF07CiAgICAgIH0KICAgICAgZWxzZSBpZiAoYzAgPCAweGQ4MDApCiAgICAgIHsKICAgICAgICB2YXIgYzEgPSBjMCA+PiA0OwogICAgICAgIGNoYXJjbGFzcyA9IFhRdWVyeVBhcnNlci5NQVAxWyhjMCAmIDE1KSArIFhRdWVyeVBhcnNlci5NQVAxWyhjMSAmIDMxKSArIFhRdWVyeVBhcnNlci5NQVAxW2MxID4+IDVdXV07CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgaWYgKGMwIDwgMHhkYzAwKQogICAgICAgIHsKICAgICAgICAgIHZhciBjMSA9IGN1cnJlbnQgPCBzaXplID8gaW5wdXQuY2hhckNvZGVBdChjdXJyZW50KSA6IDA7CiAgICAgICAgICBpZiAoYzEgPj0gMHhkYzAwICYmIGMxIDwgMHhlMDAwKQogICAgICAgICAgewogICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAgIGMwID0gKChjMCAmIDB4M2ZmKSA8PCAxMCkgKyAoYzEgJiAweDNmZikgKyAweDEwMDAwOwogICAgICAgICAgICBub25ibXAgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbG8gPSAwLCBoaSA9IDU7CiAgICAgICAgZm9yICh2YXIgbSA9IDM7IDsgbSA9IChoaSArIGxvKSA+PiAxKQogICAgICAgIHsKICAgICAgICAgIGlmIChYUXVlcnlQYXJzZXIuTUFQMlttXSA+IGMwKSBoaSA9IG0gLSAxOwogICAgICAgICAgZWxzZSBpZiAoWFF1ZXJ5UGFyc2VyLk1BUDJbNiArIG1dIDwgYzApIGxvID0gbSArIDE7CiAgICAgICAgICBlbHNlIHtjaGFyY2xhc3MgPSBYUXVlcnlQYXJzZXIuTUFQMlsxMiArIG1dOyBicmVhazt9CiAgICAgICAgICBpZiAobG8gPiBoaSkge2NoYXJjbGFzcyA9IDA7IGJyZWFrO30KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHN0YXRlID0gY29kZTsKICAgICAgdmFyIGkwID0gKGNoYXJjbGFzcyA8PCAxMikgKyBjb2RlIC0gMTsKICAgICAgY29kZSA9IFhRdWVyeVBhcnNlci5UUkFOU0lUSU9OWyhpMCAmIDE1KSArIFhRdWVyeVBhcnNlci5UUkFOU0lUSU9OW2kwID4+IDRdXTsKCiAgICAgIGlmIChjb2RlID4gNDA5NSkKICAgICAgewogICAgICAgIHJlc3VsdCA9IGNvZGU7CiAgICAgICAgY29kZSAmPSA0MDk1OwogICAgICAgIGVuZCA9IGN1cnJlbnQ7CiAgICAgIH0KICAgIH0KCiAgICByZXN1bHQgPj49IDEyOwogICAgaWYgKHJlc3VsdCA9PSAwKQogICAgewogICAgICBlbmQgPSBjdXJyZW50IC0gMTsKICAgICAgdmFyIGMxID0gZW5kIDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoZW5kKSA6IDA7CiAgICAgIGlmIChjMSA+PSAweGRjMDAgJiYgYzEgPCAweGUwMDApIC0tZW5kOwogICAgICByZXR1cm4gZXJyb3IoYmVnaW4sIGVuZCwgc3RhdGUsIC0xLCAtMSk7CiAgICB9CgogICAgaWYgKG5vbmJtcCkKICAgIHsKICAgICAgZm9yICh2YXIgaSA9IHJlc3VsdCA+PiA5OyBpID4gMDsgLS1pKQogICAgICB7CiAgICAgICAgLS1lbmQ7CiAgICAgICAgdmFyIGMxID0gZW5kIDwgc2l6ZSA/IGlucHV0LmNoYXJDb2RlQXQoZW5kKSA6IDA7CiAgICAgICAgaWYgKGMxID49IDB4ZGMwMCAmJiBjMSA8IDB4ZTAwMCkgLS1lbmQ7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgZW5kIC09IHJlc3VsdCA+PiA5OwogICAgfQoKICAgIHJldHVybiAocmVzdWx0ICYgNTExKSAtIDE7CiAgfQp9CgpYUXVlcnlQYXJzZXIuZ2V0VG9rZW5TZXQgPSBmdW5jdGlvbih0b2tlblNldElkKQp7CiAgdmFyIHNldCA9IFtdOwogIHZhciBzID0gdG9rZW5TZXRJZCA8IDAgPyAtIHRva2VuU2V0SWQgOiBYUXVlcnlQYXJzZXIuSU5JVElBTFt0b2tlblNldElkXSAmIDQwOTU7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyODQ7IGkgKz0gMzIpCiAgewogICAgdmFyIGogPSBpOwogICAgdmFyIGkwID0gKGkgPj4gNSkgKiAzNjEyICsgcyAtIDE7CiAgICB2YXIgaTEgPSBpMCA+PiAyOwogICAgdmFyIGkyID0gaTEgPj4gMjsKICAgIHZhciBmID0gWFF1ZXJ5UGFyc2VyLkVYUEVDVEVEWyhpMCAmIDMpICsgWFF1ZXJ5UGFyc2VyLkVYUEVDVEVEWyhpMSAmIDMpICsgWFF1ZXJ5UGFyc2VyLkVYUEVDVEVEWyhpMiAmIDE1KSArIFhRdWVyeVBhcnNlci5FWFBFQ1RFRFtpMiA+PiA0XV1dXTsKICAgIGZvciAoIDsgZiAhPSAwOyBmID4+Pj0gMSwgKytqKQogICAgewogICAgICBpZiAoKGYgJiAxKSAhPSAwKQogICAgICB7CiAgICAgICAgc2V0LnB1c2goWFF1ZXJ5UGFyc2VyLlRPS0VOW2pdKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gc2V0Owp9OwoKWFF1ZXJ5UGFyc2VyLk1BUDAgPQpbIDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDI2LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMxLCAzMiwgMzMsIDMwLCAzMCwgMzQsIDMwLCAzMCwgMzUsIDMwLCAzMCwgMzAsIDM2LCAzMCwgMzAsIDM3LCAzOCwgMzksIDM4LCAzMCwgMzgsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgMzgsIDM4Cl07CgpYUXVlcnlQYXJzZXIuTUFQMSA9ClsgMTA4LCAxMjQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAxNTYsIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAyMTQsIDIxNSwgMjEzLCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIDIxNCwgMjQ3LCAyNjEsIDI3NywgMjkzLCAzMDksIDM1NSwgMzcxLCAzODcsIDQyMywgNDIzLCA0MjMsIDQxNSwgMzM5LCAzMzEsIDMzOSwgMzMxLCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDQ0MCwgNDQwLCA0NDAsIDQ0MCwgNDQwLCA0NDAsIDQ0MCwgMzI0LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgNDAxLCA0MjMsIDQyMywgNDI0LCA0MjIsIDQyMywgNDIzLCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgMzM4LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgMzM5LCAzMzksIDMzOSwgNDIzLCA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAyNiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMSwgMzIsIDMzLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDM4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDM0LCAzMCwgMzAsIDM1LCAzMCwgMzAsIDMwLCAzNiwgMzAsIDMwLCAzNywgMzgsIDM5LCAzOCwgMzAsIDM4LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDMwLCAzMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDY5LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNjksIDY5LCA2OSwgNjksIDY5LCA2OSwgNjksIDY5LCA2OSwgNjksIDY5LCA2OSwgNjksIDY5LCA2OSwgNjksIDY5Cl07CgpYUXVlcnlQYXJzZXIuTUFQMiA9ClsgNTczNDQsIDYzNzQ0LCA2NDk3NiwgNjUwMDgsIDY1NTM2LCA5ODMwNDAsIDYzNzQzLCA2NDk3NSwgNjUwMDcsIDY1NTMzLCA5ODMwMzksIDExMTQxMTEsIDM4LCAzMCwgMzgsIDMwLCAzMCwgMzgKXTsKClhRdWVyeVBhcnNlci5JTklUSUFMID0KWyAxLCAxMjI5MCwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2Cl07CgpYUXVlcnlQYXJzZXIuVFJBTlNJVElPTiA9ClsgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzA3LCAxODE3NiwgMTgxODAsIDE4MTgwLCAxODE4MCwgMTgyMTAsIDE4MTgwLCAxODE4MCwgMTgxODAsIDE4MTgwLCAxODIyMiwgMTgxODAsIDE4MTgwLCAxODE4MCwgMTgxODAsIDE4MTk4LCAxODE4MCwgMTgxODIsIDE4MjM4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjIzLCAyMDc3MSwgMjA3ODQsIDIwNzk2LCAyMDgwOCwgNDM4NzAsIDM4NjI1LCAyMDgzMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDI4NzE4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk1NTMsIDE5MDI4LCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAxODU0NywgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI5NTQsIDIwODY5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzNzk1OCwgMzg2NzIsIDM4NjcyLCAzNjk3NiwgMjA5MDksIDIwODg4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzk5MjYsIDIwMjgyLCAyMDkyNSwgMjA5NTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDI1OTI4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAzNTk5MCwgMjA5OTcsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIxMDEzLCAyMTExOCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjQ2NTEsIDM4NjcyLCAzODY3MiwgNDQ2OTYsIDM4NjcyLCA0MjkyMiwgMzg4MjQsIDIxMDk1LCAyMTA1OCwgMjEwNDgsIDIxMDgwLCAyMTExMSwgNDgwMjIsIDIwODMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMjExMzksIDM4NjcyLCAyNTUzMCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDIxMTU3LCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMTg3NzYsIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkyNTcsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMzg2NjYsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIxODgwLCAzODY3MSwgMzg2NzIsIDM2NDYwLCAzODY3MiwgMjExNzMsIDM4NjYxLCAyMTIyNCwgMzg2NzIsIDIxMjMxLCAzODY3MiwgNDI3MzgsIDQyNzUwLCAyMDgzMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk0MTgsIDM1OTkwLCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAxODU0NywgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMjEyNDcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4ODc1LCAzODY3MiwgMzg2NzIsIDIxMjY2LCAzODY3MiwgMzg2NzIsIDIxMjg4LCAyMTMwMCwgMjA4MzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAzNTk5MCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzA0NzAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMTA1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjQ4NjAsIDIxMzE2LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTg5ODgsIDUwNDM0LCAxODUwMywgMTg1MjUsIDIxMzUzLCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNDc0OSwgMjEzOTAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIzMjIwLCAzODY3MiwgMzg2NzIsIDQ5Njg3LCA0NTgxNCwgMjE0MTEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MTg1OSwgMTgzNjYsIDIxNDQ4LCAyMTQ3OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDIxNTE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk0MTgsIDM1OTkwLCA0NjE4NSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAxODU0NywgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjE0NjIsIDIxNTczLCAyMTUzNywgMjE1MzcsIDIxNTM3LCAyMTU4MCwgMjE1MzIsIDIxNTM3LCAyMTU0MiwgMjE2MTUsIDIxNTU4LCAyMTY0NCwgMjE1OTYsIDIxNjA5LCAyMTYzMSwgMjE2NTcsIDIxNjY5LCAyMTY4MSwgMjA4MzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIxMzM3LCAzODY3MiwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAzNTk5MCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDIxNjk3LCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAzMDQ2MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwMjUsIDIzMjUxLCAzODY3MiwgMjIyNDksIDIzMjU3LCA0MjkyMiwgMzA0NjIsIDM4NjcyLCAyMTcxOSwgMjE3MjUsIDIxNzQxLCAyMTc2NiwgMjE3NTAsIDIxNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NjAzNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAzMDQ3NSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMjQ3ODUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzNzExNSwgNTAzOTMsIDIxODU2LCAyMTgzMiwgMjE4NTAsIDIxODM0LCAyMTg3MiwgMjE4OTYsIDIxOTA4LCAyMDgzMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk0MTgsIDM1OTkwLCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAyMTkyNCwgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzczMDEsIDI1ODEyLCAyNzM5NCwgMjE5ODUsIDIyMDAzLCAyMTk4NSwgMjIwMTcsIDI3MzkyLCAyMTk4NywgMjA4MzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAzNTk5MCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDIwNzIsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAyMDk4MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzA0NzAsIDI0NjQzLCAzODY3MiwgNDg0MTMsIDIyMDU0LCAyNjE2NSwgMjIwNDEsIDIyMDcwLCAyMjA3NCwgMjIwNzQsIDIyMDkwLCAyMDk3OSwgNDg0NDIsIDIwODMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjExNCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDQ3MjIxLCAyMjEzNywgMjIxNTUsIDIyMTM3LCAyMjE2OSwgNDcyMTksIDIyMTM5LCAyMjE5MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyMjIzMCwgMzg2NzIsIDIyMjQ3LCAzODY3MiwgMjk2NDEsIDIyMjY1LCA0MjA3MiwgMzM3NzEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDM1MjY3LCAyMjQ3NSwgMjI0NzUsIDM2NTQ0LCA0MjI3NywgMjI0MTEsIDIyNDExLCAzMzg1OCwgMjY3MjcsIDM3MjI3LCAyNjcyNywgMjY3MjcsIDM1NTQwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg2MDksIDI0ODkxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMjE0MzIsIDM4MDMxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMjkxLCAzODY3MiwgMjY5MzEsIDIyMzExLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyMzUyLCAyMjQxMSwgMzU0NDcsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDIyMzgxLCAyNjcyNywgNDU0NDksIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzAwMjgsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDM2NjA3LCAyMjQ3NSwgMjI0NzUsIDI4MDE1LCAzMzg1NCwgMjI0MTEsIDIyNDEwLCAyMjQxMSwgMjI0MTEsIDI3ODUxLCAyNjcyNywgNDU0NDEsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDIyODA3LCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDM4NTA1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAzNDYyNiwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY4NjAsIDI2OTk4LCAyMjY0NywgMzg2NzIsIDM4NjcyLCAyMjQyOCwgMjY5MzEsIDQ4MzU5LCAyMjQ3NSwgNDIxNDIsIDMyNzk0LCAyMjQxMSwgMjgzNDcsIDM3NDAyLCAyNjcyNywgMjI1MjEsIDMyNDg2LCAzODY3MiwgMTg5MTUsIDM4NjcyLCAyMjQ1MSwgMjI0NzQsIDM2ODYwLCAzNzA0MiwgMjI0MTEsIDIyNDkyLCAyMjUxNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDQyNjI1LCA0MjE0NCwgMzUyMDcsIDI2OTc1LCAyMjUzNywgMjYzMTAsIDM1NzU5LCAyMjU4OSwgMzY3NjUsIDIyNjI0LCAyMjY0MCwgMjI2NjMsIDIyNjg1LCAyMjcwNiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDM5ODE0LCA0NzAwOSwgMjI3MjcsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjMwOTIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMxMTQwLCAzMTE1MiwgMjI3NTEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDI2MTMxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTYsIDQyMTQxLCAyMjQxMSwgMjY0NTMsIDI3OTM3LCAyNzI2OCwgMjIyMzAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNjU0NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzM4NTgsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4NjA5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjk0NDIsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI2NDg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAyMjgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI4ODYsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzY0MzksIDIyODIzLCAyMjg0NCwgMjI4NjYsIDIyODc4LCAzNjQzOCwgMjI4MjgsIDIwODMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgNDEzMjksIDM4NjcyLCAyMjkwMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMjI5MjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMzExNSwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjYzMzksIDIyOTQwLCAyMjk3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMjMwMDcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDc2MzEsIDI3MjY4LCAyMjIzMCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCA0ODY1MCwgMjMwMjksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM2NTQ0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzg1OCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCA0MjcyMywgMjMwODUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjMwNDgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAyMzA3MiwgMjMxMDgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg0MTEsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgNDY4MzMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgNDc4NjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDQxODA0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDQzMjUyLCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDQ4MTg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMzEzMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzY3NzgsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDE4ODc4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzNTU5MiwgMzI5NjMsIDM4NjcyLCAzODY3MiwgMjMxNTMsIDQyOTIyLCAzNzk1MCwgMzUzMzUsIDIzMTkwLCAyMzE5NiwgMjMyMTIsIDM4NjcyLCA0MTkxOSwgMjMyMzYsIDIzMjc0LCAzODY3MiwgMzg2NzIsIDQ1MDc4LCAyMzI5MSwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDI1MTU3LCAyMzQ4MywgMjMzNTAsIDI0MjA5LCAyMzMwOSwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI4MjI4LCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTgyMSwgMjMzNzYsIDIzMzM2LCAyMzM2OSwgMjMzOTIsIDI0MjAzLCAyMzQzNCwgMjM0NjUsIDI0MTcyLCAyMzcyNiwgMTk4MzMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAxODcyOSwgMjM0ODEsIDIzNjQyLCAyNDU4MSwgMjM0OTksIDIzNTA0LCAyNDA0OCwgMjMzNTMsIDIzNTIwLCAyMzkzMywgMjMzNTMsIDI0MTY0LCAyMzkxNywgMjQ1MTgsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDIzNTM2LCAyMzg1NCwgMjM4MTUsIDIzNTYxLCAyMzU3NywgMjM2MzIsIDI0NDUwLCAyNDI1NSwgMjM2ODksIDIzNjU4LCAyMzY3NCwgMjM3MTYsIDIzNzQyLCAyNDI2OCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMjM3NzMsIDIzODA0LCAyMzg0MiwgMjQwNDAsIDIzODcwLCAyMzg4NiwgMjM0NDksIDIzNzAwLCAyMzkwMiwgMjMzMjAsIDIzOTQ5LCAyMzk5MiwgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMjQwMjcsIDIzNTQ1LCAyMzU5MiwgMjQwNjQsIDI0MTM3LCAyNDQ1OSwgMjQwOTQsIDI0MTEwLCAyMzQwNywgMjAwNjksIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDI0MTI2LCAyNDU2NywgMjQ0ODIsIDI0MTUzLCAyNDE4OCwgMjM2MTYsIDI0MjI1LCAyMDE5MSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyNDI4NCwgMjQwNzgsIDI0Mzc0LCAyNDMwMCwgMjQzMzAsIDI0MzE0LCAyMzQxOCwgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjQzNjEsIDIzODI2LCAyMzYwNiwgMjQzOTAsIDI0NDE5LCAyMDUzMiwgMjQ0MzUsIDI0NDc1LCAyNDQ5OCwgMjQ2MjgsIDIwNjA4LCAyMzc1MCwgMjM5MjgsIDI0NDAzLCAyMDY0NCwgMjM3NTcsIDI0NTA4LCAyMDY2MCwgMjAwNTQsIDI0MzQ1LCAyMDY5NSwgMjQ1MzcsIDI0NTk3LCAyNDYxMywgMjQ1NTIsIDIzNzg4LCAyNDI0MCwgMjM5NjQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAzOTkwNiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzA0NzAsIDI0NjcyLCAzODY3MiwgMzg2NzIsIDI0NjY3LCAyNjYxMSwgMjQ2ODgsIDI0Njk1LCAyNDY5NSwgMjQ2OTUsIDI0NzExLCAyNjkxMCwgMjQ3MzUsIDIwODMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAyNDc2NSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDIwNzM5LCAyNDgyOCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAyNDg1OCwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwODcsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMjQ4NzYsIDI0OTIyLCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMjQ5NTQsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDI0OTcwLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAxOTUyNSwgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjEyNTAsIDM1NTc2LCAyNDk5OSwgMjQ5OTksIDI0OTk5LCAzNTU4NCwgMzE2NjgsIDMxNjgwLCAyMDgzMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDM4NjcyLCAzODY3MiwgMjUyNzEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk0MTgsIDE5ODg3LCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAxODU0NywgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNTAzODEsIDI3NzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCA0MDQ1MiwgMjUwMTUsIDI1MDE1LCAyNTAxNSwgMjUwMjMsIDI3NzQ2LCA0MDQ1NCwgMjA4MzIsIDI1MDQ3LCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDI1MDY1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAyMDMxMCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDUwMjg2LCA1MDI5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjMwNTYsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgNDQwNDgsIDI1MDg4LCAyNTA4OCwgMjUwODgsIDI1MDk2LCA0NjYzMCwgNDQwNTAsIDI1MTIwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAxODY5OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDI1MTM2LCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyNTE1MiwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTE3MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAyNTIxOCwgMzg2NzIsIDM4NjcyLCAyMTM5NSwgMzIzNDYsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MjEwLCAyNTIzNywgMjEzOTMsIDI1MjIxLCAyNTI1NiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDIyMjE0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTkyMDYsIDIwMzQ5LCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAxODU0NywgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQxNTYzLCAyNTI5MywgMjA4MzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAzNTk5MCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0NDQ4LCAyNzI5OCwgMzMzMzMsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU2LCA0MjE0MSwgMjI0MTEsIDI2NDUzLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0ODQwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMwMzQ5LCAyNTQxNCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0ODQxMSwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgNDE4MDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzNDk3NiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM3NTQsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzE0NTQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIzMTMxLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNjc3OCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgMzg2NzIsIDI1NDM3LCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg0MDUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMDM0OSwgMjU0MTQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg0MTEsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDQxODA0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzNzU0LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMxNDU0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMzEzMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzY3NzgsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDQ0NDgsIDI3Mjk4LCAzMzMzMywgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTYsIDQyMTQxLCAyMjQxMSwgMjY0NTMsIDQ0MjgwLCAyNzI2OCwgMjUzNzUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyNTM5MywgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI2OTAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ4NDA1LCAzMDA1NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzAzNDksIDI1NDE0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ4NDExLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCA0MTgwNCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzc1NCwgMzM4NTQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMTQ1NCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjMxMzEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM2Nzc4LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0NDQ4LCAyNzI5OCwgMzMzMzMsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU2LCA0MjE0MSwgMjI0MTEsIDI2NDUzLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0ODQwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMwMzQ5LCAyNTQxNCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTQ1NSwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgNDE4MDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM3NTQsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzE0NTQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIzMTMxLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNjc3OCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNDAxMDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCA0OTEzMCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg0MDUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMDM0OSwgMjU0MTQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg0MTEsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDQxODA0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzNzU0LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMxNDU0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMzEzMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzY3NzgsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDQ0NDgsIDI3Mjk4LCAzMzMzMywgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTYsIDQyMTQxLCAyMjQxMSwgMjY0NTMsIDQ0MjgwLCAyNzI2OCwgMjUzNzUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyNTM5MywgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI2OTAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjk0NDIsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI2NDg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0NDQ4LCAyNzI5OCwgMzMzMzMsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU2LCA0MjE0MSwgMjI0MTEsIDI2NDUzLCA0NDI4MCwgMjcyNjgsIDI1NDgyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjgwMTUsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTUwMCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI4MDE1LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI3ODUxLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODIyMCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDQ0NDgsIDI3Mjk4LCAzMzMzMywgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTYsIDQyMTQxLCAyMjQxMSwgMjY0NTMsIDQ0MjgwLCAyNzI2OCwgMjUzNzUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTU2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyNTM5MywgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI2OTAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjk0NDIsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI2NDg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4NDY0LCAyNTU4MiwgMjU1OTQsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU2LCA0MjE0MSwgMjI0MTEsIDI2NDUzLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjgwMTUsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI4MDE1LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI3ODUxLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMTQyNiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjU2MTAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDQ0NDgsIDI3Mjk4LCAzMzMzMywgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTYsIDQyMTQxLCAyMjQxMSwgMjY0NTMsIDQ0MjgwLCAyNzI2OCwgMjUzNzUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyNTM5MywgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI2OTAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjk0NDIsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI2NDg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzA0NzAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgNDQ3NTIsIDI1NjMxLCAyNTY0OSwgMjU2NzEsIDI1NjgzLCA0NDc1MywgMjU2MzMsIDIwODMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzNTczNSwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyNTcxNywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwNDcwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI0ODYwLCAyMDgzMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgNTA1MDUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk0MTgsIDM1OTkwLCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5NDA2LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCAxODU0NywgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzMTk5NywgMzg2NzIsIDI1NzU0LCAyNTc2MCwgMjU3NzYsIDIzMjkzLCA0MTgzOSwgMjA4MzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDUwNTA1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDE4OTU4LCAxODc5NCwgMzU5OTgsIDE5NDE4LCAzNTk5MCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxOTQwNiwgNTA0MzQsIDE4NTAzLCAxODUyNSwgMTg1NDcsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjU4MDAsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyNTgyOCwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDI1ODQ0LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAyNTA0OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDI1ODY1LCAyNTg5NiwgMjUzNzcsIDI1ODgxLCAyNTkxMywgMzA0MTAsIDMwNDE4LCAyNTk2NCwgMjU5NzgsIDI1OTkwLCAyNjAwNiwgMjYwMTgsIDI1MzQ0LCA0NTY0NywgMzg2NzIsIDI2MDM0LCA0ODA5MSwgMjYwNTIsIDMzMjEwLCAyNjA4NiwgMjYxMTYsIDI2MTUzLCAyNjIyMywgMzUzMjEsIDI2MTgxLCAyNTcwMSwgMjYyMTEsIDI2MjQ4LCAyNjI2NCwgNDM1ODMsIDQ0NjAyLCAyNjI4MCwgMjYyOTYsIDI2MzI5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDE3NiwgMjYzNTUsIDM4OTI1LCA0MTk1OCwgMjI4NTAsIDI0ODAzLCAzODY3MiwgNDQ2NTQsIDMwNDgwLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNjYwMSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgNDM2MDEsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzOTY0MSwgMzA5OTAsIDM5NDYzLCAzODY3MiwgNDMxNDgsIDI4MzE5LCAzODY3MiwgMjk3MjQsIDI2Mzc0LCAxOTMyNiwgMzg2NzIsIDM4NjcyLCAzMjQyOCwgNDAyOTYsIDM4NTc0LCA0NTYwOCwgMjI0NzUsIDIyNDc1LCAyNjM5NCwgMjY0MzksIDI2NDc1LCAyNjUwOSwgMjI0MTEsIDM3ODU5LCAyODc4MCwgMjY1MjksIDM4NDUxLCAyNjcyNywgMjY3MjcsIDQzMzAwLCA0NTA1NiwgMjI1NzMsIDMwMzQ5LCAyNTQxNCwgMjY1NDUsIDM4NjcyLCAyNjU2MywgMzg2NzIsIDQwMjg3LCA0ODQxMSwgMzg2NzIsIDI2NTk5LCAzNTM2NCwgMjg2NTMsIDI2NjI3LCAzMTQwMywgNDU2MTYsIDQ5Nzg5LCAzMzg0OSwgNDQzNTYsIDIyNDExLCAzMDYwOSwgMjg0MTEsIDQxMTM4LCAzMzMyNCwgMzU3MTgsIDI2NzI3LCA0NzYyNSwgNDQxOTMsIDI5MjIzLCA0MTc0OSwgNDI3ODEsIDM4MDk0LCAyODk0MCwgMzg2NzIsIDIxODE2LCAyMTAzMiwgMjY2NDQsIDM4NjcyLCA0NzQyMCwgMjY2NjQsIDIyNDc1LCA0MTMwNywgMjIzMzYsIDMxMTk1LCAzOTI5NiwgMjI0MTEsIDIyNDExLCAyNjY4NSwgMzE0NTQsIDQ3OTg4LCAyNjcyNiwgMjY3MjcsIDMwNzg3LCAzMjkxMSwgMzY5NDAsIDI2NzQ0LCAzODY5NywgNDYwNjQsIDM4NjcyLCAyNjc3OSwgMjY3OTksIDI2ODIxLCAyMjc4NywgMjI0NzUsIDIzMTMxLCAyNjgzNywgMzc1MTUsIDIyNDExLCAzNjc3OCwgMjY4NTMsIDI2ODc2LCAyNjcyNywgMzM1MTksIDQ2ODg3LCAyNjkyNiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMzczNTUsIDM1MDgxLCAyNjk0NywgMzg4OTksIDM4ODc4LCAyNjk2OSwgNDg1NTAsIDI2NzI3LCAyNjk5NCwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDM4NTU1LCAyNzAxNCwgMjI2MDAsIDQ3NzYxLCA0ODI0NiwgMjcwNTcsIDI3MDc2LCAyNzA5NCwgMjcxMTMsIDI4MzQzLCAyNjQ1NiwgMjcxMzMsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDI3MTUzLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzkzNzgsIDI3MTcyLCAzODY3MiwgMjcxOTYsIDI3MjAyLCAyNzIxOCwgMjcyMzQsIDI3MjQ2LCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgMjcyNjIsIDQyMjU5LCAyNjQ1MywgMjcyODQsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NjEwMCwgNDg0MDUsIDI3MzI2LCAyNTI3NywgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzcxMzcsIDI3MzQ2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzk3NjAsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjc0MTAsIDMyOTE5LCAzMDM0OSwgMjU0MTQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg0MTEsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDQxODA0LCAzODY3MiwgMzg2NzIsIDI3NDM1LCAzODY3MiwgMzg2NzIsIDMzMTA4LCAzODY3MiwgNDk0NDEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM4MDAyLCA0Mjg5NSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI3NDU0LCAyNzQ4MSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgNDMwNTgsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMzEzMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzY3NzgsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQ2OTk3LCAzNzE2OCwgMzU4MzEsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAyNzUwNCwgMzg2NzIsIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDI3NTQxLCAzODY3MiwgMjc1NTksIDIzOTc2LCAyNzU3OCwgMjc1ODYsIDI3NjAyLCAyNzYxNywgMjc2MjksIDI3NjQ1LCAyNzY1NywgMjUzNDQsIDM4NjcyLCAzODY3MiwgMjc2NzYsIDQ0OTkyLCAzODY3MiwgMjI5MjQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3NjczLCA1MDUxMSwgMjc2OTIsIDQ3MjUxLCAyNjUxMywgMjY0NTMsIDQxMjQ2LCAyNzcxMCwgMjUzNzUsIDI5NzY4LCAzODY3MiwgMzg2NzIsIDMyMzM0LCAzODY3MiwgMjc3NDAsIDM4NjcyLCAyNzc2MiwgMjc3ODQsIDM4NjcyLCAyNTk0OCwgMjc3ODksIDI3ODA1LCAyNzgyMSwgMjI0NzUsIDIyNDc1LCAyNzg0MCwgMjc4NzgsIDIyNDExLCAyMjQxMSwgMjI2OTAsIDI3OTE1LCAyNzkzMSwgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDQ0NTU3LCAzODY3MiwgMzg2NzIsIDQ0OTM0LCAzODY3MiwgMzgyMjUsIDQ4NDA1LCAzMzEyNiwgMjc5NTMsIDM4NjcyLCAzODY3MiwgMjc2OTQsIDQ3MDczLCAzNTQyNCwgMzcyNDUsIDIyNDc1LCAzNTc4NiwgNDg0OTcsIDQ3MzM4LCA0MjY4NiwgMzAyODAsIDIyNDExLCAzNzMzNCwgMzczOTQsIDI3OTc3LCAyNzk5NSwgNDM3NDMsIDI2NzI3LCAzMjkxOSwgMzAzNDksIDI1NDE0LCAzODY3MiwgMzg2NzIsIDI0MDAzLCAzODY3MiwgMzAwOTYsIDQ4NDExLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxMywgMjgwMzEsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyODA1MywgMjgwNzAsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyODA5MiwgMjgxMDksIDMyOTE4LCA0MTgwNCwgMjgxMzEsIDM4NjcyLCAzODY3MiwgNDkyMDYsIDM4NjcyLCAyODE0OSwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNzgwLCAzMzc1NCwgMzM4NTQsIDIyNDExLCAyMjQxMSwgNDIwMzEsIDIyNDExLCAzMTQ1NCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjgxNzEsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzMTM0NiwgMzg2NzIsIDQ2Njg3LCAyMTQ5MywgMjI0NzUsIDI4MTkxLCAyMjQ3NSwgMjMxMzEsIDIyNDExLCAzMDI3NCwgMjI0MTEsIDM2Nzc4LCAyNjcyNywgMzUyMjgsIDI2NzI3LCAzMTU5OSwgMjgyMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjUwLCAyODI3NCwgNDc0MTEsIDQyMTQyLCAyODI5NiwgMzE0OTQsIDI4MzQ3LCAzNjcyOCwgMzE5NTQsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAyODMxNywgMjcxMzYsIDIyNDc1LCAyODMzNSwgMjI0MTEsIDM2ODk3LCAyNjk3NywgMjY3MjcsIDIyNTY0LCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDI4MzYzLCAyODM3OSwgMjg0MjcsIDI4NDgwLCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAyODUwNCwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMjQ1MjEsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAyODUzMCwgNDU0ODQsIDM4NjcyLCA0NjU3NSwgMjg1NDksIDI4NTU3LCAyODU3MywgMjg1ODcsIDI4NTk1LCAyODYxMSwgMjg2MjMsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxOTc1MCwgMjY1NDcsIDM4NjcyLCAyNjU0NiwgMTk3NTUsIDI4NjM5LCA0MjE0MSwgNDg0OTIsIDI3MzYwLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAyOTI1NywgMjcxODAsIDI4Njc5LCAyOTY0MSwgMjE3MDMsIDM4NjcyLCAyNTczMCwgMzg2NzIsIDM4MDgzLCA0MjMyOSwgMjg2OTcsIDI4NzM0LCAyNzEzNywgMjc4MjQsIDM2NTMxLCA0MzQ5OCwgMjg3NTAsIDIyNjA4LCA0NjQzNCwgMjg3NzQsIDQ2NDA4LCAyODc5NiwgMjg4MTQsIDI4ODMzLCAyNjcyNywgMjg4NDksIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTczOCwgMzg2NzIsIDI5NzYxLCA0ODQwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTk2OTgsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyNzAyMywgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyODg5MSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyODkxMiwgNDMwNjYsIDI4OTI5LCAyODk1NiwgMzg2NzIsIDM4NjcyLCAzMzg3NiwgMzg2NzIsIDI4OTkyLCA0ODQxMSwgMzg2NzIsIDM4NjcyLCAyOTAwOSwgMjkwMzAsIDI3MDMyLCAyMjQ3NSwgMjI0NzUsIDIyNjY5LCAzMzg0OSwgMjkxMDksIDQ1MzkzLCAyMjQxMSwgMjI0MTEsIDMyNzI5LCAzMzMyNCwgMjkxMzMsIDM3MDY3LCAyNjcyNywgMjY3MjcsIDM0NzE3LCAzMjkxOCwgNDE4MDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjkxNTcsIDM4NjcyLCAyOTE4MSwgMjI0NzUsIDIyNDc1LCAyOTIwMiwgMzM3NTQsIDQzMTEyLCAyMjQxMSwgMjI0MTEsIDMyMDgzLCAyMjQxMSwgMzQ0NzIsIDI5MjIyLCAyNjcyNywgMjY3MjcsIDI5MjM5LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAyOTI1NiwgMjkyNzMsIDM4NjcyLCAyOTI5NCwgMjgyNTUsIDMyMzgzLCAyNzExNywgMjkzMTUsIDIzMTMxLCA0NDg3NiwgMzQ1NzgsIDQyMjUyLCAzNjc3OCwgNDQ5MTUsIDI2NzI3LCAyOTMzNywgMjY5OTgsIDQ2ODg3LCAyMTgxMCwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAyOTM3MCwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgMjkzODcsIDIyNDExLCA0MTA0MSwgMjY5NzcsIDI2NzI3LCA0Mzc1MSwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjk0MTEsIDI5MjQwLCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyOTQzMCwgMjY5NTMsIDM4NTQ0LCAzOTYxNywgMzQ4MDksIDMzNTY3LCAzNzc3NSwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjczLCAyOTQ2NCwgMzg2NzIsIDIyMDk4LCAyMjQzNSwgMjk0ODMsIDM4NjcyLCAyOTUwNiwgMjYxOTUsIDI5NTMwLCAyOTU0MCwgMjk1NTYsIDI5NTcwLCAyOTU4MiwgMjk1OTgsIDI5NjEwLCAyNTM0NCwgMzg2NzIsIDI5NjI2LCAyNTA3MiwgMjk2NjgsIDUwMDk0LCAyOTcxMSwgNDAxMDIsIDQwMzMxLCAyOTc0OCwgMjEwNjQsIDI5Nzg0LCAyOTgxMiwgMjk4NDMsIDI5ODczLCAyOTkwMywgMjk5MTksIDI5OTU3LCAyNjQyMywgMjk5NzMsIDMwMDEwLCAyNTM3NSwgMzAwNDQsIDMwMDkxLCAzODc4MiwgMzAxMTIsIDMwMTM0LCAyNjEzNywgMzAxNjEsIDM4NjcyLCAzODY3MiwgMjY1ODMsIDM4NjcyLCAyNjkyOSwgMzkwOTksIDMwMjEyLCAzNjg3OCwgNDQ4MDYsIDMwMjI4LCA0MzY1MCwgMjg3NTgsIDQ2ODQyLCAzMDI0NCwgNDY3NjUsIDMwMjk2LCAzMDMxNywgMzAzMzYsIDMwMzg0LCAzOTQ2MywgMjAwODksIDMxMzU0LCAzMDQzNCwgMzg3OTksIDQxMTgzLCAzMDQ1MCwgMzA0OTYsIDM4NjcyLCAzMDU0MiwgMzA1NjQsIDI5Mjc4LCAzMDU4MCwgMzk4MjMsIDMwNjMxLCAyODY2MywgNDIxMDMsIDMwNjQ3LCAzMDY4NSwgMzA3MTIsIDMwNzY2LCAzMDgxMSwgMzA4MzcsIDM0MTYxLCAzMDg3OCwgMzA5MDEsIDM0NjgxLCAzMDkzMCwgMzA5ODAsIDMxMDA2LCAzMTAyMiwgMjU0MTQsIDMxMDQ5LCAzODY3MiwgMTgzMjEsIDQ5MDkwLCAzMTA3NSwgMzEwOTQsIDMxMTI4LCAzNDE5NSwgMzI1ODQsIDQ2ODAyLCAzMTE2OCwgMjI0NzUsIDMzNjQ1LCA0MjM0NywgMzExOTAsIDQ3NDg2LCAzMTIxMSwgMjI0MTEsIDQ3NTk4LCA0OTk1OSwgMzEyMzIsIDMyODQxLCAzMTI1NywgMjY3MjcsIDM5NTY5LCA0MjAxMSwgMzEyNzgsIDMxMzM1LCA0OTQ5OSwgMzU4NTEsIDM5MjczLCAzMTM3MCwgNDM5NjYsIDM0MTg2LCAyMTE4OCwgMzM0NjgsIDM3NjAxLCAyOTE4NiwgMzEzODksIDMxNDI2LCA0MjIzOSwgNDA4OTUsIDIyNDExLCAzMTQ0MiwgMzE0ODEsIDMxNDU0LCAzMTUxOSwgMzE1MzksIDMwNzk1LCAzMTU2MSwgMzE1OTUsIDMzNzk1LCAzODY3MiwgNDg3NTcsIDM5NDAxLCAzODY3MiwgMzAxOTYsIDI4MjU1LCAzOTUxOSwgNDM1NDksIDMxNjE1LCAyMzEzMSwgMzQ4MjIsIDQ3Njc1LCAzMTYzNSwgMzY3NzgsIDIyNTQ2LCA0Nzc2OSwgMzE1NzIsIDI2OTk4LCA0Njg4NywgMzkyMDEsIDMxNjU2LCAxODI5MCwgMzE2OTYsIDMxNzM0LCAzMTc1MCwgMzE3NzIsIDMxODA4LCAzMTg0NSwgMzE4NjksIDMxOTAzLCAzNzM4NSwgMzE5MTksIDMxOTcwLCAyNjM3OCwgMTg1OTMsIDMyMDIxLCA0ODkwOCwgMzk1MjYsIDQ0MjM3LCAzMjA0MiwgMzIwNjMsIDMyMDk5LCA0ODcyMywgNDE3MTIsIDI2MzEyLCA0MTI3MCwgMjY5MjksIDIyNDc1LCAzMjE0NCwgMjI0MTEsIDMyMTY3LCA0NDg5NCwgMjYzMTAsIDMyMTg1LCA0NjI3NiwgNDA2OTIsIDQ0MzI2LCAzMTQ2NSwgMjA0MzUsIDMyMjA4LCAzMjIyOCwgMzIyNDgsIDMyMjc0LCAzMjI5NSwgMzIzMTksIDMyMzYyLCAzMjM5OSwgMzI0MTUsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMyNDU3LCAzMjQ3MywgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzI1MDksIDM4NjcyLCAyMjA5OCwgMzI1MzAsIDMyNTQ4LCA0Mzc3MSwgMzAxOTAsIDMyNjAwLCAzMjYzMCwgMzg2NzIsIDMyNjE2LCAzMjY1NCwgMzI2NjIsIDMyNjc4LCAzMjY5MCwgMjUzNDQsIDM4NjcyLCAzODY3MiwgNDgyNzcsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk3MzIsIDM4NjcyLCAzODY3MiwgMzI3MDYsIDI5NzMxLCAyNjAzNiwgMzM2MzEsIDQyMjA4LCAzMjcyNCwgMzg0MzgsIDQ0MjgwLCAyNzI2OCwgMjUzNzUsIDIxMjcyLCAzODY3MiwgMzg2NzIsIDMxOTg1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjU3NiwgMzI3NDUsIDM2ODM3LCAzODY3MiwgMjY5MjksIDMyNzY2LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMjgxMCwgMzI4NTcsIDIyNDExLCAyMjQxMSwgMjI2OTAsIDI3NDE5LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ4NDA1LCAzODY3MiwgMzg2NzIsIDQwMTA4LCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDQyMTEzLCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMyODc3LCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjgsIDI2NzI3LCAzMjkxOSwgMzAzNDksIDI1NDE0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ4NDExLCAzMjAyNiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQ2ODY5LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDM5Njc4LCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDQxMDk5LCAyNjcyNywgMjY3MjcsIDMyOTE4LCA0MTgwNCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDExOCwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDQyMTIxLCAzMzc1NCwgMzM4NTQsIDIyNDExLCAyMjQxMSwgNDg2ODUsIDIyNDExLCAzMTQ1NCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgNDY3NTgsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjMxMzEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM2Nzc4LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzNjQwNCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDQyOTksIDIyNDc1LCA0MjE0MywgMzE4MjMsIDIyNDExLCAzMjE2OSwgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI3MDk3LCAzMjg5NywgMzYzNjIsIDQ3MDIwLCAzMjkzNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAyNTAzMSwgMzg2NzIsIDM4NjcyLCA0MzQ0NSwgMzI5NzksIDMyOTg3LCAzMzAwMywgMzMwMDksIDMzMDI1LCAzMzA0MSwgMzMwNTMsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAyOTQ2NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU2LCA0MjE0MSwgMjI0MTEsIDI2NDUzLCA0NDI4MCwgMjcyNjgsIDMzMDY5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzMxMDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMzMTI0LCAzODY3MiwgMTgyODQsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgNDA4MzcsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzQzOTQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMzE0MiwgMzg2NzIsIDMzMTYzLCA0MjgwOCwgMzg2NzIsIDQyODAzLCAzODU2NiwgMjI0NzUsIDIyNDc1LCAzNzk5NCwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCA0NzQ3OSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAzMTMxMiwgMjY3MjcsIDI2NzI3LCA0MTcyMCwgMzMxODEsIDM4NjcyLCAzODY3MiwgMzQ5NTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjgwMTUsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzQ5NDksIDQ5MDcxLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjkwNDgsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDQzODM0LCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCA0OTg4MiwgMjY5OTgsIDMzMTg0LCAzMzIwMCwgNDAyMjIsIDMzMjM0LCAyMjk5MSwgMjI0NzUsIDMzMjc3LCAzMzMxMywgNTAwNjMsIDQzNDc5LCAzMzM0OSwgMjY3MjcsIDMzMzc3LCAzMjEyOCwgMjYzMTMsIDMzNDA1LCAyNjY0OCwgMjI5ODUsIDMzNDIzLCAzMzQ0MywgMzUzODcsIDQ4Nzk3LCAzNDUyMywgMzM0OTIsIDQwOTIyLCAzMzUxNCwgMjYzMTIsIDM0MDM2LCA0Njk1OSwgMzIzNzUsIDMzNTM1LCAzMzU1NCwgMzM1NzUsIDM1MjM2LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDI4NDg4LCAzMzU5MSwgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzIwMDUsIDM4NjcyLCAzODY3MiwgMzM2MTcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDMwMDY0LCAzODY3MiwgMzAwNzMsIDM4NjcyLCAzMDA2NCwgMzM2NjEsIDMwMDY5LCAzODcyMSwgNDI5NTgsIDIyNDExLCAzMzY5MiwgMzM3MDAsIDMzNzE2LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAyNTk0MSwgMjk2NDEsIDMzNzMyLCAyMDA4MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM3NTIsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIzMTM3LCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgNDkzNjIsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTYxNSwgMzg2NzIsIDMzNzcwLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDQwNDkxLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDQwNzM2LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMzNzg3LCAzMzgwMywgMzM0MDcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzM4MTksIDQ4MzUxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDQ2MzYzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDQ4NTIzLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDQ4MjgyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQwLCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjg0MDMsIDI3ODUxLCAyNjcyNywgMjY3MjcsIDI2NzI3LCA0MzM2MCwgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDQyODEzLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzM4NzQsIDIxMTQxLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDMzODkyLCAzNDAzNiwgMjEyMDgsIDIyNDc1LCA0NjIxNSwgMjI0MTEsIDMzOTE0LCAyNjcyNywgMzM5MzUsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgNDI3OTUsIDM4NjcyLCAyMjA5OCwgMjU0MzksIDI1MTk0LCAzMjQ5MywgNDA2NDYsIDQwNjU2LCAzODMwNCwgMzgzMTIsIDMzOTU5LCAzMzk3NCwgMzM5ODYsIDM0MDAyLCAzNDAxNCwgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ5MjYxLCAzMzA3OSwgMzg2NzIsIDM4NjcyLCAyMzI3NSwgMzQwMzAsIDM0MDUyLCAzODY3MiwgMzQwNzgsIDM0MTI3LCAzNDE3NywgMzQyMTEsIDM4NDA4LCAzNDIzOSwgMzQyNTgsIDI5MzU0LCAzNDI4NSwgMjUzNzUsIDM4NjcyLCAzODY3MiwgMzYwNjksIDI5NjQxLCAzODY3MiwgMzQzMDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM0MzI3LCAyNDAxMSwgMjY5MjksIDQ3OTU3LCAzNDM2NiwgMjI0NzUsIDM0NDEwLCAzNDQzOSwgMzQ0NjAsIDM0NDg4LCAzMjg4MSwgNDQ4NTMsIDIyNzExLCAzOTc4OCwgMjY3MjcsIDQ5NjY0LCAzNDUwOCwgMzk0NjMsIDM4NjcyLCAyODk2OSwgNDU2NTYsIDI4NjgxLCAxOTcwNiwgMTgyNTMsIDM4NjcyLCAyNjA3MCwgMjYyMzIsIDQ3NjUwLCA0NjU5NCwgMjgyNTgsIDQyNjE4LCAyMjQ3NSwgNDUxMDcsIDM0NTQ3LCA0NDU4OCwgMjI0MTEsIDM0NTc1LCAyMjQxMSwgMzQ1OTQsIDM0NjE4LCAzNDY0MiwgMjc5OTcsIDI2NzI3LCAzNTQ4MSwgMzQ2NjgsIDM0Njk3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0Mzg3LCAzNDczMywgMzQ3NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAzNDc5NiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzQ4NDUsIDM0ODYyLCAzMTIxNiwgMjI0MTEsIDIyNDExLCAzNzI2MiwgMjI0MTEsIDM0ODc4LCAzMTI2MiwgMjY3MjcsIDI2NzI3LCAyODkxMywgMjY3MjcsIDM0ODk0LCAzMzgwMiwgMzg2NzIsIDM0OTMxLCAzNTAwNSwgMzAxNDUsIDM1MDMzLCAzNTA0OSwgMzA1NDgsIDM1MDc5LCAyNjY2OSwgMzUwOTcsIDM1MTE3LCAzNTE0MiwgNDQ0MTgsIDIyNDExLCAzNTE2NywgMzUxOTIsIDQzNjI0LCAzMTcxOCwgMjY3MjcsIDQzMDEzLCAzOTMyMSwgNDcxNjksIDM1MjUyLCAzMDc1MCwgMzEwMzMsIDM4NjcyLCAzNTI4OSwgMzUzMDcsIDM1MzU3LCAzMjE5MiwgMjI0NzUsIDM1MzgwLCAzNTQwMywgMzQ1NTksIDIyNDExLCAzNTQ0MCwgMzU0NjMsIDMwODIxLCAzNTQ3OSwgMzU0OTcsIDM1NTMwLCAzNTU1NiwgMzU2MDgsIDM4NjcyLCAzODY3MiwgMjQ5MDYsIDQ3ODExLCAzNTYzMCwgMzc4MzksIDI4MDM3LCAzNTY3MCwgNDgzNzksIDI3MDc4LCAzNTcwNSwgNDg3MDQsIDIyNTIxLCAyNjMxMywgMzM4OTgsIDM4NjcyLCAzNTczNCwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyODUxNCwgMzU3NTEsIDI2OTI5LCAzNTc4MiwgMzU4MDIsIDM2OTE2LCAzMjMwMywgNDk5NDEsIDI2MzEwLCA0OTE3MSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDM1ODY3LCAzNTg4MywgMzU4OTksIDM1OTE1LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAzNTk1MSwgMzYzNDgsIDM1OTQxLCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMzU5NjcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDMzMjUyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzg2NzIsIDIwNTczLCAzMzI2MCwgNDYzMDIsIDQ1NTU3LCAzNjAxOSwgMzYwMzEsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU2LCA0MjE0MSwgMjI0MTEsIDI2NDUzLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDM0NzgwLCAyMjQ3NSwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMzYwNDcsIDIyNjkwLCAyNjcyNywgMjY3MjcsIDM2MTMwLCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjgwMTUsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAyMDI0MywgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzYwNjYsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgNDU4NDksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDM2MDg1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDM2MTA2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDM2MTI2LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI4MDE1LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI3ODUxLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMTk3MjksIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDM5NDczLCAzODY3MiwgNDQyMTcsIDM2MTQ2LCAzNjE4NCwgMzYxOTYsIDM2MjEyLCAzNjIxOCwgMzYyMzQsIDM2MjUwLCAzNjI2MiwgMjUzNDQsIDM4NjcyLCAzNjI3OCwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMjU0MjEsIDE4NTc1LCAzODY3MiwgMjc0MzgsIDM4NjcyLCAzODY3MiwgNDYxMzksIDM2Mjk5LCA0ODExMSwgMzQxNDEsIDI2NDA5LCAzNjMzNSwgMzkxNDUsIDQ0MTY5LCAzNjM3OCwgMzY0MjAsIDM2NDU1LCAzODY3MiwgMjkzNzEsIDM2NDc2LCAzODY3MiwgMjc1NDMsIDM4NjcyLCAzNjQ5OCwgMzU4NDQsIDMxMzczLCAzNDc0MywgMzY1MTYsIDQwNTI3LCAzNjU2NSwgMjkzMjEsIDM2NTg2LCAzNjYyMywgMzY2NDYsIDIyNDExLCAzNjY3NiwgMjkwOTMsIDM2NzE0LCAyOTM0NiwgMjg4MTcsIDQzMzg4LCAzNjc1MCwgMzY4MDIsIDM3NzI0LCAzNjgzNiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjYwNjEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDM2ODUzLCA0Mjk1MSwgMjI0NzUsIDM2ODc2LCAzODUxMywgMzQ0OTIsIDM2ODk0LCAzNjkxMywgNDA5ODQsIDIyNDExLCA0MzI4MiwgMzU1MTQsIDI4Nzk4LCAyNjcyNywgNDM3MTcsIDI2NzI3LCAzNjkzMiwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzY5NTYsIDM4NjcyLCAzODY3MiwgMTg5MDksIDMyNTc1LCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQxOTc2LCAzNTI3MywgMzY5OTIsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDQ1MzA3LCA0NDQyNCwgMzcwMjUsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDQwODc1LCAzOTg4NSwgMzcwNTgsIDMyOTE4LCAzMzgwMiwgMzQ5NjcsIDM4NjcyLCAzODY3MiwgMzI3NTAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAzODQwMSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDM0NDQ0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgMjY3MjcsIDM3MDkxLCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzcxMTAsIDM0OTQwLCAzODY3MiwgNDYxNzMsIDQ1NzcwLCAyOTAxNCwgMzcxMzEsIDIyNDc1LCAyMjQ3NSwgMzcxNTMsIDI5OTg4LCAyMjQxMSwgMjI0MTEsIDM3MTk1LCAzNzIxOSwgMjY3MjcsIDI2NzI3LCAzNjM5MiwgNDY4ODcsIDM4MzQ2LCAzODY3MiwgMzkyNjUsIDI2OTMxLCAyMjQ3NSwgMzcyNDMsIDQyMTQyLCAyMjQxMSwgMzcyNjEsIDI4MzQ3LCAyNjcyNywgMzcyNzgsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM3Mjk2LCAzODY3MiwgMjcxMzYsIDIyNDc1LCAzNzMxNywgMjI0MTEsIDQ4ODYxLCAyNjk3NywgMjY3MjcsIDQ4NTk1LCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAzNTkyNSwgMjkzOTUsIDM5NjA4LCAzNzM1MCwgMzczNzEsIDI2NDU5LCAzMzUzOCwgMzc3ODMsIDQ4MzMxLCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDQxOTM5LCAzODY3MiwgMjIwOTgsIDM4NjcyLCAyNTU2NiwgMzg2NzIsIDM4NjcyLCAyOTg4NywgMzkwNDYsIDM5MDU0LCAzNzQxOCwgMzc0MzIsIDM3NDQwLCAzNzQ1NiwgMzc0NjgsIDI1NTAwLCAzODY3MiwgMzc0OTMsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDI4NTMzLCAzODY3MiwgMzg2NzIsIDI3NTYyLCAzODY3MiwgMzg2NzIsIDM3NDk0LCAzNzQ4NCwgMjMyNTgsIDIwODUzLCA0MjE0MSwgMzc1MTAsIDQ3NjEyLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAzODY3MiwgMjk0OTAsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM3NTMxLCAzNzU1MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzc1NzAsIDI3NTE3LCAzOTczMiwgMjI0NzUsIDQwNTIwLCAzNzU5MCwgMjUzOTMsIDM3NjI3LCAyMjQxMiwgMzc4OTgsIDM3NjQ2LCAzMTUyMywgMjY3MjcsIDQ4NTMwLCAzMTI0MSwgMzE3OTIsIDM3NjgzLCAzNzY5OSwgMjQ4MTIsIDM4NjcyLCAzNzcyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAzNzc0MCwgMjI0NzUsIDM3Nzk5LCAyMjQ3NSwgMzU3ODYsIDQ1MDMwLCAzMTg1MywgMzYxMTAsIDIyNDExLCAyMjQxMSwgMzczMzQsIDMxNTQ1LCAzNDcxMiwgNDA3OTAsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMjEwMjQsIDQ4OTY1LCAzODY3MiwgMzg2NzIsIDMzOTQzLCAyODE1NSwgMzc4MTYsIDM4NjcyLCAyNjkzMSwgNDYzMzUsIDM3ODM0LCAyMjQ3NSwgMjcwNDEsIDIyNDc1LCAzNDM3NywgNDkwMTEsIDM3ODU1LCAyMjQxMSwgMzMyOTcsIDIyNDExLCAyNzg5MCwgMzkzMzksIDM3ODc1LCAyNjcyNywgMjc4OTksIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjgwMTUsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ4MjAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjkwNTcsIDIyNDc1LCA0MjE0MiwgMzI3ODYsIDIyNDExLCAyODM0NywgMjI1NTUsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAzNzg5NSwgMjY5NzcsIDQ5MTEwLCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzc5MTQsIDMxNjE5LCA0MTg5NSwgMjY5NzgsIDM3OTM4LCAzNzk3NCwgNDE3NTcsIDQ1NDMyLCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDM2NTQ5LCAzNzA3NSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAyNTI0MCwgMzg2NzIsIDI0NzE5LCAzODY3MiwgNDY2NTEsIDM4MDE4LCAyNTEwNCwgMzgwNTQsIDM4MTE4LCAzODE1NywgMzgxNDIsIDM4MTYxLCAzODEyNiwgMzgxNzcsIDM4MTg5LCAyNTM0NCwgMzg2NzIsIDQ1NzU5LCA0OTU2MSwgNDk1NDcsIDM4MjA1LCA0OTE5OSwgMzg2NzIsIDM4MjQxLCAzODI1OSwgMzQwNjIsIDM4Mjg5LCAzODMyOCwgMzgzNzEsIDM4MjczLCAzODM4NywgMzg0MjQsIDM4NDY3LCAzOTU1NiwgMzg1MjksIDI3MjY4LCAyNTM3NSwgNDAyMTMsIDM4NjcyLCAzODY3MiwgMzg1OTAsIDIxNzc5LCAzODY3MiwgMzg2MTQsIDM4NjQxLCAyMTEyMywgNDMyMzQsIDM4Njg5LCAzODcxMywgNDE1MjIsIDM5NzI1LCAyNjYyOCwgMjI0NzUsIDI1MzkzLCAzODczNywgMjI0MTEsIDI5MTE3LCAyMjY5MCwgMzIyMzIsIDMxMzE5LCAyNjcyNywgMzg3NTMsIDM0NjUyLCAzODc3MiwgMzUzNDEsIDM4NjcyLCAzODc5OCwgMzg4MTUsIDM4NjcyLCAzODY3MiwgNDA2MTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4ODQwLCAzMzYwMSwgNDA0ODUsIDIyNDc1LCAzODg1OCwgMjI0NzUsIDM1Nzg2LCA0NzY4MywgMzg4NzYsIDQwODU2LCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAzMjExNCwgMjY3MjcsIDQyMTg3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI0Nzc2LCAzODY3MiwgMzY1MDAsIDMzMDg3LCAyNjc1NSwgNDgzMDAsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDQ2Nzk2LCA0MTYwMCwgNDk0MTAsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM4ODk0LCAyOTk5NCwgNDc3MzAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDQ2NDY1LCA0NDA4NSwgMzI5MTgsIDMzODAyLCAzODkxNSwgMzg5NDksIDM4OTcyLCAzODk5MiwgMzg2NzIsIDM5MDE1LCAzOTAzMSwgNDQ4MjQsIDM5MDcwLCAyOTAzOSwgMzkwODYsIDI4MDE1LCAzMzg1NCwgMzkxMTUsIDM5MTMxLCAyMjM2NSwgMzkxNzEsIDI3ODUxLCA0MDM5NSwgNDgyMzQsIDQ4NTgxLCA0OTY1NCwgMjI1MjEsIDM5MTkwLCAzMzE0NywgMzkyMjUsIDI2NzYzLCAzOTI1NCwgMzgzMzcsIDQxNTE1LCAzMTQxMCwgNDg2NjgsIDM2NTcwLCAzOTI4OSwgNDQ2MjQsIDQ5OTIwLCAzNjA1MCwgMzkzMTIsIDQ2NDkwLCAyNjcyNywgMzkzMzcsIDM5MzU1LCA0Njg4NywgMzkzOTQsIDM4NjcyLCAyMDk0MiwgMjI3NjYsIDIyNDc1LCAzOTQxNywgMjE0OTksIDIyNDExLCAzOTQ0OCwgMjUzOTgsIDI2NzI3LCAzOTQ4OSwgMjI1MjEsIDQ3NTY4LCAzODY3MiwgMzg2NzIsIDQ2NjgwLCA0NTUxMiwgMzk1MDUsIDQyMTQzLCAzOTU0MiwgMzIwNzYsIDM5NTg1LCAzOTYzMywgMzk2NTcsIDM1NTY3LCAzNTYxNCwgMjY5MjksIDI5MDc1LCA0MjE0NCwgMzk2NzQsIDI2OTc1LCAzOTY5NCwgMjYzMTAsIDM1NzU5LCAzNTEyNiwgNDc0NTEsIDI5NDE0LCAyNzQ2NSwgMzk3MTIsIDM5NzQ4LCAzOTc3NiwgMzk4MDQsIDQ2MjQ2LCA0MTY1NywgNDc4NzMsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDM5ODM5LCAzOTg2NSwgMzYzNTcsIDM0OTA1LCAzMDM5OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM5OTAxLCAyMjA5OCwgMzg2NzIsIDMwMzY4LCAzOTkyMiwgMzg2NzIsIDQ1MjExLCAzOTk0MiwgMzk5NTAsIDM5OTY2LCAzOTk4MCwgMzk5ODgsIDQwMDA0LCA0MDAxNiwgMjUzNDQsIDM1MDYzLCA0MDAzMiwgNDAwNDgsIDQwMDc0LCAyNTc4NCwgNDAxMjQsIDM4NjcyLCA0MDE2MCwgMjAwMjMsIDUwMzUxLCA0MDE5OSwgNDAyMzgsIDQwMjc0LCA0MDMxMiwgNDkyMzcsIDQwMzQ3LCA0MDM2MywgMzY2NjAsIDQwNDExLCA0MDQyNywgMjUzNzUsIDM4NjcyLCA0MDQ0MywgMTg2NjEsIDM2MTYxLCAzNzUzNCwgMzg2NzIsIDE4NjY5LCA0Mzg2NCwgMzg2NzIsIDM4NjcyLCA0NDY5MCwgMjY5MjksIDIyNDc1LCAzNzAwOSwgNDA0NzAsIDQwNTA3LCAyNTM5MywgMjI0MTEsIDQwNTQzLCAzMTUwMywgNDU5NTAsIDI2NzI3LCA0Nzk5MywgNDA1NzgsIDQwNjAxLCAzMDk5MCwgMzk0NjMsIDM4NjcyLCA0NDcxNSwgMzg2NzIsIDM4NjcyLCA0MDYxNywgMjkxNjUsIDQwNjM0LCA0MTQ0MSwgMjEyMDEsIDE5MzUzLCAyMjkwNywgNDA2NzIsIDQ1MzY4LCA0NzQyOSwgMjI0NzUsIDIyNDc1LCA0MDcwOCwgMzcwMzQsIDI4ODk2LCA0MDcyNCwgMjI0MTEsIDQ3ODkxLCA0MTYzMywgNDA3NjIsIDM1NTA2LCA0MDc4MiwgMjY3MjcsIDQ3MTc1LCAzMjkxOSwgMjIzOTQsIDQwODA2LCAzODY3MiwgMzg2NTQsIDMyNTY2LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg3NDAsIDI2OTMxLCAyMjQ3NSwgMzg4NjAsIDIyNDc1LCA0MDgzMywgMjI0NzUsIDMzODQ5LCAyMjQxMSwgNDEwNjAsIDIyNDExLCA0MDg1MywgMjI0MTEsIDMzMzI0LCAyNjcyNywgMzg3NTYsIDI2NzI3LCA0MDg3MiwgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMzg2NzIsIDM4NjcyLCAyMDk3MywgNDU5OTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ1OCwgNDA4OTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCA0MDkxMSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTAxLCAzMzc5NSwgMjMxNzQsIDE4MzMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MDkzOCwgMjI0NzUsIDQwOTYyLCAyMjQ3NSwgNDA2ODQsIDIyNDExLCA0MDk4MSwgMjI0MTEsIDMxNzgyLCAyNjcyNywgNDk4NDEsIDI2NzI3LCAyNjk5OCwgMjg0NDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCA0MTAwMCwgNDEwMTksIDQyMTQyLCA0MTAzOSwgNDEwNTcsIDI4MzQ3LCA0MTA3NiwgNDEwOTUsIDIyNTIxLCA0NDAzOSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAzNDkxNSwgMzQwMzYsIDI3MzMwLCA0MTExNSwgMjkwODQsIDQxMTM3LCAzNTgxNywgMjY3MjcsIDI3NzI0LCAzNTc1OSwgNDExNTQsIDQxMjE4LCA0MTcwMSwgNDEyNjIsIDQxMjg2LCA0NzI1OCwgNDQxNTUsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI4MTE1LCAzMzUzOCwgMjc4NjIsIDM2MzU3LCAzNDkwNSwgNDYyOTAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkwNCwgMjIwOTgsIDM4NjcyLCAzODY3MiwgNDEzMjMsIDIyMjc1LCA0MTM0NSwgNDAxMzksIDM4NjcyLCAyNjM1OCwgNDEzODEsIDQxMzk0LCA0MTQxMCwgNDE0MjIsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDQ1ODQyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDE0MzgsIDUwMjU2LCAzODY3MiwgMjIyMzEsIDQxNDQwLCA0NTg0OCwgMzg2NzIsIDM0NzczLCA0MTQ1NywgMzQ4MjksIDM5ODc5LCA0MTQ4NywgMjcyNjgsIDI1Mzc1LCAzODEwMiwgMzg2NzIsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDQxNTM4LCA0MTU1NCwgMzMyNjEsIDM4NjcyLCAzODY3MiwgMzY0MzAsIDI2OTI5LCA0MTU3OSwgMzUxMDEsIDM0ODQ2LCA0NTUzMywgNDE2MTYsIDQxNjQ5LCA0MDU1NiwgNDU0MDEsIDQxNjczLCA0MTczNiwgNDE3NzMsIDI2NzI3LCA0MTc4OSwgNDA3NDYsIDQyNjU2LCA0MTgzMSwgMzg2NzIsIDQxODU1LCA0MTg3NSwgMzI1MzIsIDMyNzA4LCA0NjU0MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgMjI0NzUsIDQxNTk0LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDQxODkzLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgMzcwOTQsIDI2NzI3LCAyNjcyNywgMzI5MTksIDI3MzczLCA0MTkxMSwgMjkyOTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQxOTM1LCAyNTQ2NiwgMzg2NzIsIDQxOTU1LCAyNjkzMSwgMjI0NzUsIDQxMTIxLCA0MTk3NCwgMjI0NzUsIDIyNDc1LCAzNDE1MiwgMjI0MTEsIDQ2MzcwLCA0MTk5MiwgMjI0MTEsIDIyNDExLCAzMDc3OCwgMjY3MjcsIDMxODg3LCA0MjAwOSwgMjY3MjcsIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4MjQzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDQ4NDYxLCAyMjQ3NSwgMjgwMTUsIDQyMDI3LCAyMjQxMSwgMjI0MTEsIDQyMDQ3LCAyMjQxMSwgMzc3NjQsIDI2NzI3LCAyNjcyNywgNDg4MTksIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgMjIyMDgsIDM4NjcyLCAxODM0MCwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyODE3NSwgNDIwNjcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAzMDk0NCwgNDIwODgsIDQyMTM3LCA0MjE2MCwgNDIxODAsIDQ4MTk2LCA0MjIwMywgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzEwNzgsIDM4NjcyLCAzODY3MiwgMzI0MzUsIDMyNDM4LCAzMjQ0MSwgNDIyMjQsIDI1ODk3LCA0Njk2NywgMjgyODAsIDQyMjc1LCA0MjI5MywgMzE1NzksIDI3MjY4LCA0MjMxOSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDY2MjQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDQxMDIzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDQyODY0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI4MDE1LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI3ODUxLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgNDIzNDUsIDQyMTQzLCAyOTk0MSwgMjI0MTEsIDI2OTc3LCA0MjM2MywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0NzQzLCAyMjE3NywgMzg2NzIsIDM4NjcyLCAyNzM4NSwgMzg2NzIsIDQ1ODc2LCA0MjM4MywgMjIxMjEsIDQyNDEyLCA0MjQyNSwgNDI0MzMsIDQyNDQ5LCA0MjQ2MSwgMjUzNDQsIDM4NjcyLCAzMjk1NSwgNDI1MjcsIDQzMjE1LCAxODcwNiwgNDI0NzcsIDQyNDk5LCAzMzI0NCwgNDI1MTksIDM4NjcyLCA0MjU0MywgNDAxNzQsIDQyNTU5LCA0MjU4MCwgNDI2MDUsIDQyNjQxLCA0MjY3MiwgNDAzNzcsIDQyNzA4LCA0Mjc2NiwgMjUzNzUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyODI5LCA0Mjg4MCwgNDI5MTEsIDQzOTczLCAyNzk2MSwgMzg2NzIsIDM4NjcyLCAyMzAxMywgNDI5MzgsIDIyNDc1LCA0Mjk3NCwgNDEwMDMsIDM5NDMyLCA0Mjk5NSwgMzI4NjEsIDIyNDExLCAzNjY5OCwgMzUxNzYsIDQzMDI5LCA0MzI5MiwgMjY3MjcsIDQzMDQ5LCA0MzA4MiwgNDMxMzgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzI4LCA0MzE3MiwgNDMxOTEsIDM4NjcyLCA0MzIxMCwgMjgyMzQsIDM4NjcyLCA0MzIzMSwgNDgzNDEsIDIyNDc1LCA0MzI1MCwgMjI0NzUsIDIyMzI1LCA0MzI2OCwgNDcxMTgsIDM5MTc0LCAyMjQxMSwgMjI0MTEsIDQzMzE2LCA0MzMzMiwgNDMzNTgsIDQwNTg1LCAyNjcyNywgMzcyODAsIDQzMzc2LCA0MzQxMCwgMzM4MDMsIDM4NjcyLCAzODY3MiwgNDE4MTUsIDQ1MTg0LCAzOTIzOCwgMzAzNjAsIDM4NjcyLCA0MzQzNCwgNTAxODYsIDQzNDYxLCA0MzQ5NSwgNDg3NzcsIDQzNTE0LCA0MzUzOCwgMjI0NzUsIDQzNTczLCA0MzU5OSwgMzE2NDAsIDQzNjE3LCA0MzY0MCwgMjI0MTEsIDQzNjY2LCA0MzY5MiwgNDkzNjcsIDQzNzEwLCA0MzczMywgMjY3MjcsIDQ3OTIyLCAzMzgwMiwgNDM3NjcsIDM4NjcyLCAzODY3MiwgNDM3ODcsIDQzODEyLCAzODY3MiwgNDM4NTAsIDUwMDI0LCA0Mzg4NiwgNDM1NTcsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDQzOTA4LCAzNDI0MiwgMjI0MTEsIDIyNDExLCAyNzg1MSwgNDY0NzAsIDQzOTM1LCA0NDA3OSwgMjY3MjcsIDM5NjU4LCA0Mzk1MywgMzg2NzIsIDQzOTg5LCAyMTMzMSwgMzg2NzIsIDM4NjcyLCAzMzgyNCwgMjI0NzUsIDIyNDc1LCA0OTM4NSwgMzQyMjMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDQ0MDExLCAyNjcyNywgMjY3MjcsIDI2NzI3LCA0NDAyNywgNDY4ODcsIDE5OTU4LCAzODY3MiwgMzg2NzIsIDUwMDA3LCAyMjQ3NSwgMjI0NzUsIDI4MTk3LCAyMjQxMSwgMjI0MTEsIDQ0MDY2LCAyNjcyNywgMjY3MjcsIDQ0MTAxLCAyNjMxMywgMjA4NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2ODkwLCA0Nzc5MywgNDQxMjQsIDQ0MTQwLCA0NDE4NSwgNDQyMDksIDIwNDM1LCAyODM0MCwgMjY5NzYsIDMzMzg5LCA0NDIzMywgNDQyNTMsIDQ0Mjc3LCA0NDI5NiwgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCA0NDMxNSwgNDQzNDIsIDM4NDgyLCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxODYzNiwgMjIwOTgsIDQ0Mzg2LCAyOTg1NywgMzgwNjksIDQ0MzcyLCA0NDQwMywgNDQ0NDAsIDQ0NDY0LCA0NDQ4MCwgNDQ0OTQsIDQ0NTEwLCA0NDUyNiwgNDQ1MzgsIDI1MzQ0LCA0NDU1NCwgNDY5MDgsIDM4NjcyLCA0MDA4OCwgMzg2NzIsIDM4NjcyLCA0MTM2NSwgMzg2NzIsIDQzMTU2LCAyNjc4MywgMjY3ODEsIDQ3MjEyLCA0NzIwMywgMzQzMTEsIDQ0NTczLCA0Mjk3OSwgNDQ2MTgsIDQxMjMyLCA0NDI4MCwgMjcyNjgsIDQ0NjQwLCA0NDY3NiwgMzg2NzIsIDQ0NzEyLCAyOTgyNywgMjg0NTYsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0NzMxLCA0NDc2OSwgMzg2NzIsIDQwMDU4LCA0NDc4NSwgNDA5NjUsIDQ0ODIyLCAyMjQ3NSwgNDQ4NDAsIDQ0ODY5LCA0ODA2MywgMjI0MTEsIDIyNjkwLCAzOTE1NSwgNDQ4OTIsIDQ0OTEwLCAyNjcyNywgMzA5OTAsIDM5NDYzLCAzODY3MiwgNDQ5MzEsIDM4NjcyLCA0NDk1MCwgNDQ5NzEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDQ5ODcsIDI4MjU4LCA0NTAwOCwgNDEzMDEsIDIyNDc1LCAyMjQ3NSwgMzc2MTEsIDI4MDU0LCAyMjQxMSwgNDUwMjgsIDIyNDExLCAyMjQxMSwgNDUwNDYsIDMwMzAxLCAzMDMyMCwgMjY3MjcsIDI2NzI3LCAyODA5MywgMzA3NDIsIDMzODAzLCAzODY3MiwgMzg2NzIsIDQ1MDcyLCAzMjYzOCwgMzAwNzUsIDM4NjcyLCA0NjU0OCwgMzc4MTgsIDM4NjcyLCA0MjM5NiwgMjI0NzUsIDIyNDc1LCA0NzAzNywgNDUwOTQsIDMzNDc2LCA0OTQ1MiwgMjI0MTEsIDIyNDExLCA0OTU4NSwgMzIwNDcsIDM2NjMwLCAzNTY1NCwgMjY3MjcsIDI2NzI3LCAzOTY5NiwgMzM5MTksIDI2NDkzLCA0NDEwOCwgNDUxNTcsIDMyNTE0LCAzODY3MiwgNDk2MDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ1MjAwLCAyMjQ3NSwgMjI0NzUsIDQzODkyLCA0NTIyNywgMjgwMTUsIDMzODU0LCAyMjQxMSwgNDE5OTMsIDQwNTYyLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMzI4MzQsIDQ1MjQ4LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAyMjI5NSwgNDUyNjcsIDE5MzYxLCAzODY3MiwgMjgyNTUsIDM2MDkwLCAyMjQ3NSwgNDUyODYsIDQzNDczLCA0MjA1MSwgMjI0MTEsIDQ1MzA0LCA0MzAwNSwgNDM2OTQsIDI2NzI3LCA0OTg3NywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgNTAyOTksIDQ2MTQ0LCA0NTMyMywgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCA0OTA1NCwgMjYzMTMsIDQ1MzQ1LCAzNjE2OCwgNDA4MTcsIDQ1MzY3LCAyMjQ3NSwgNDUzODQsIDIyNDExLCAzMDY2OSwgMjY5NzcsIDI2NzI3LCA0NTQxNywgNDU0NjUsIDM2NDgyLCA0NTUwMCwgNDU1MjgsIDMyMjc5LCAyMjQxMSwgNDQyNjEsIDI2NzI3LCA0NTU0OSwgMzU3NTksIDM0NDIzLCAzNTY4OSwgMzcxNzksIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAyNzMxMCwgMzM0MjcsIDQ3MzA5LCAyNjQ1NiwgMzIyNTgsIDQ2MjIyLCAyOTE0MSwgNDU1OTksIDQ1NTczLCA0NTU4OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI1MDMsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDE5ODQzLCAzODY3MiwgNDU2MzIsIDI5NjgyLCAyOTY5NSwgNDU2NzIsIDQ1Njg4LCA0NTcwMywgNDU3MTksIDQ1NzMxLCAyNTM0NCwgMjU2OTcsIDM2ODIwLCAyNTQ4NCwgNDMyMTUsIDQ4OTM2LCAzMzIxOCwgNDU3NDcsIDM4OTMzLCAyNTY5MSwgNDU3OTQsIDQ1ODMwLCA0NTkwNSwgNDU4NjUsIDQ1ODkyLCA0NTkyMSwgMzA1OTUsIDQ1OTM3LCA0MTQ3MSwgNDU5ODAsIDQ1OTY2LCAyNTM3NSwgNDU5OTYsIDQ2MDE0LCA0NjAzMCwgMzQwOTMsIDM4NjcyLCAzODY3MiwgNDYwNTEsIDI0Nzk0LCA0NjA5MCwgNDYxMjQsIDQ2MTYwLCA0NjIwMSwgNDYyMzgsIDQ2MjYyLCA0NjMxOCwgNDYzMzQsIDQ2MzUxLCA0NjM4NiwgMjY3MTAsIDQ2NDI0LCAzMDYxNSwgMzk1OTcsIDQwMzg5LCA0NjQ1MCwgNDY0ODYsIDMwMjU5LCA0MTUwMiwgNDY1MDYsIDQ2NTY0LCAzODY3MiwgNDY1OTEsIDQ2NjEwLCA0NjY0NiwgMzg2NzIsIDQ1MjcwLCAzMzE2NSwgNDY2NjcsIDQ2NzAzLCA0NjcxOSwgNDY3ODEsIDQ2ODE4LCA0Njg2NiwgNDUwMTIsIDM1Nzg2LCA0NzM0NCwgNDI2OTIsIDI4MDc2LCAyMjQxMSwgMzQ1MzEsIDM3MzM0LCA0MjMwMywgNDMzNDIsIDQzNjc2LCAyNjcyNywgMzc2NjEsIDQxNjg4LCA0Njg4NSwgMzg2NzIsIDQ2OTA0LCAzOTIwOSwgNDQ2NjAsIDQ2OTI0LCAyODk3NiwgNDY5NDYsIDM4NjcyLCAzMDk1NywgMjA4NDcsIDQ5OTAzLCA0Njk4MywgNDcwMzYsIDIyNDc1LCA0NzA1MywgMzMyODgsIDMxODI5LCA0NzA4OSwgMjI0MTEsIDIyNDExLCA0NzEwNSwgMzUyMTksIDQzMzk0LCA0NzE0MCwgMjY3MjcsIDI2NzI3LCA0NzE1NiwgMzI5MTgsIDMzODAyLCA0NzE5MSwgMzg2NzIsIDQxODc3LCAzNzcwNywgMzg2NzIsIDUwMjEwLCAzODU5OCwgNDcyMzcsIDQ1Mjg4LCA0NzI3NCwgNDcyOTAsIDI4MDE1LCA0MzgyNywgNDczMDYsIDQ3MzI1LCAyODM5NCwgMjk5MzQsIDMwNjk2LCAzNjc4NiwgMzc2NjcsIDQ3MzYwLCA0MzAzMywgMjI1MjEsIDQzNDE4LCA0NzM3NiwgNTAxMTIsIDM4NjcyLCAzODM1NSwgNDkxNDcsIDI4MjU1LCA0NzM5OSwgMjI0NzUsIDIyNDc1LCA0NzQ0NSwgNDc0NjcsIDM0NjAyLCAyMjQxMSwgNDc1MDIsIDQ3NTI2LCA1MDA0NiwgMjY3MjcsIDQ3NTU2LCA0Njg4NywgMzYyODMsIDQ5NTE2LCAzODY3MiwgNDg4NDAsIDI5MjA2LCA0NDc5OSwgNDc1ODQsIDQ3NzAzLCAzMDY2MiwgMzA3MjcsIDQ1MjUxLCAzMTg4MCwgMzQyNjksIDM5MzY3LCA0NzY0NywgMzg2NzIsIDQ5NTY3LCAzODQ5NCwgNDA5NDYsIDQ3NjY2LCA0NzY5OSwgNDc3MTksIDM5ODQ5LCA0ODYzMCwgNDc3NDYsIDMyOTQ1LCA0Nzc4NSwgNDc4MDksIDQ3ODI3LCA0Nzg1MCwgNDc4ODksIDQ3OTA3LCA0ODg4MCwgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCA0OTc1MiwgNDk3NzIsIDQ3OTQ5LCA0Nzk3MywgNDgwMDksIDQ4MDM4LCA0OTAzNCwgMzA4NjIsIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDQ3OTMzLCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjUzMjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0ODA3OSwgMzg2NzIsIDM4NjcyLCA0ODEwNywgMzg2NzIsIDE5NjcxLCAzMDUxMCwgMzA1MTgsIDQ4MTI3LCAzMDUxOCwgMzA1MjYsIDQ4MTQzLCA0ODE1NSwgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0OTU1LCAzODY3MiwgMjk2NDcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyOTY1MiwgNDY4ODgsIDM4NjcyLCAzODY3MiwgNDUzMjksIDM1NjQzLCA0ODE3MSwgMzA4NTEsIDQ1MTQxLCA0ODIxOSwgNDgyNjIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgMzg2NzIsIDUwMjAwLCA1MDIwOCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDgyOTgsIDMzNDU4LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCA0ODMxNiwgNDgzNzUsIDIyNDExLCAyMjQxMSwgMjgzMDEsIDM3MjAzLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDkxNCwgNDExNjksIDQ4Mzk1LCAzODY3MiwgMzQ5ODksIDM0MTAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0ODQyOSwgMzg2NzIsIDM0OTg1LCAzNjk2OSwgMjgyNTgsIDQ5NzMyLCAzMTE3NCwgNDcwNjYsIDQ4NDU4LCA0NjczNCwgMjI0MTEsIDM3MzI2LCAzNTY4MiwgNDg0NzcsIDQxNjI1LCA0ODUxMywgMjY3MjcsIDQ4NTQ2LCA0ODU2NiwgMzM0OTgsIDQ4NjExLCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzMjU1NywgMzg2NzIsIDQ4NjQ2LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAxOTc4NiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgNDg2NjYsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMyNzc3LCAyMjQxMSwgNDg2ODQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMxOTQ1LCAyNjcyNywgNDg3MDEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzM2MSwgMzg2NzIsIDQ1Nzc4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDExOTQsIDM1NDE3LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgNDI4NDQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgNDg3MjAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgNDg3MzksIDM4NjcyLCAzODY3MiwgNDg3NTYsIDM4NjcyLCAzNTc2NiwgNDg3NzMsIDIyNDc1LCAyMjQ3NSwgNDUxMTksIDQ4NzkzLCAyMjQxMSwgNDIxNjQsIDQzMTIyLCA0ODgxMywgMjY3MjcsIDQzOTM3LCAyNjk5OCwgNDY4ODcsIDQ4ODM1LCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCA0MzUyMiwgNDIxNDQsIDQ4ODU2LCAyNjk3NSwgNDg4NzcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyMDQzNiwgMzIxNTEsIDMwODg1LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMjI3MzUsIDQ4ODk2LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDg5MjQsIDQ4OTYyLCAzNjMxNCwgNDUxODEsIDM4NjcyLCA1MDUzOCwgMzg2NzIsIDQ1MTY5LCA0ODk1OSwgMzgwMzgsIDM0MTExLCA0ODk4MSwgNDg5OTMsIDI1MzQ0LCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3NTI1LCA0MjE0MSwgNDkwMDksIDMxMjkyLCA0NDI4MCwgMjcyNjgsIDI1Mzc1LCAzODY3MiwgMzY4MTIsIDQwMjUyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMTk0LCAzODY3MiwgMzg2NzIsIDI2OTI5LCA0NTIzMiwgMjI0NzUsIDM3ODAwLCAyMjQ3NSwgMjUzOTMsIDQ5MDI3LCAyMjQxMSwgNDY4NTAsIDIyNjkwLCAyNzk3OSwgMjY3MjcsIDI2NzI3LCA0OTA1MCwgMzA5OTAsIDM5NDYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0OTA3MCwgMzg2NzIsIDM4NjcyLCA0OTA4NywgMzg2NzIsIDI4MjU4LCAyMjQ3NSwgNDk4MTAsIDIyNDc1LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCAyMjQxMSwgMzQzODYsIDIyNDExLCAyMjQxMSwgMzczMzQsIDI2NzI3LCAyNjcyNywgNDkxMDYsIDI2NzI3LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzMzg0OSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzMzMyNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjgwMTUsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjc4NTEsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMzM3OTUsIDM4NjcyLCAzODY3MiwgNDkxMjYsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDQ2ODg3LCAzODY3MiwgNDkxNDYsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDIyNDc1LCA0MjE0MiwgMjI0MTEsIDIyNDExLCAyODM0NywgMjY3MjcsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI3MTM2LCAyMjQ3NSwgNDIxNDMsIDIyNDExLCAyMjQxMSwgMjY5NzcsIDI2NzI3LCAyMjUyMCwgMjYzMTIsIDQ5MTYzLCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ5MTg3LCAzODY3MiwgMjE1MTYsIDM4NjcyLCAyMDgxNiwgNDkyMjIsIDQ5MjUzLCAzODY3MiwgNDkyNzcsIDQ5MjkxLCA0OTMwNCwgNDkzMjAsIDQ5MzMyLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgMzE5MzQsIDMyMjEyLCAyNjQ1MywgNDc1NDAsIDQ5MzQ4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMTc1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzNTI5MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzYzMTksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzE3MDcsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgNDUxMzAsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg4NDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCA0OTM4MywgMjI0NzUsIDQ5NDAxLCAzMzg1NCwgMjI0MTEsIDQyODU2LCAyMjQxMSwgNDcxMjQsIDI3ODUxLCAyNjcyNywgNDEwNzksIDI2NzI3LCAyNjcyNywgNDk0MjYsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjU2MTAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMjA5OCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDEyMDIsIDQ5NDY4LCA0OTQ4MCwgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCA0OTQ5NiwgMzg2NzIsIDQ5NTE1LCAzODY3MiwgMzg2NzIsIDQ2MDcxLCA0NjA3NCwgMzg2NzIsIDQ5NTMyLCAyODk5MywgMzc5MjIsIDQyMTQxLCA0OTU4MywgMzI4MjQsIDQ0MjgwLCAyNzI2OCwgMjUzNzUsIDM4NjcyLCAzODY3MiwgNDYxMDgsIDI5NjQxLCA0NjUyNCwgNDY1MzMsIDQ5NjAxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgNDk2MjAsIDM3MDAxLCAyNTM5MywgMjI0MTEsIDI5NDQ4LCAyMjQxMSwgNDk2MzksIDI2NzI3LCAyNjcyNywgNDg2MjUsIDM2NzM0LCAzMDk5MCwgNDMwOTcsIDQ5NjgwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ5NzAzLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQ5NzI3LCAyMjQ3NSwgMjI0NzUsIDQ4MDUzLCAyMjQxMSwgMjI0MTEsIDQ5NzQ4LCAyMjQxMSwgMjI0MTEsIDQ2NzQ4LCAyNjcyNywgMjY3MjcsIDQ5NzY4LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMjA5MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCA0OTc4OCwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDI2NzAwLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgNDIzNjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjk0NDIsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI2NDg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI1MzIzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjIwOTgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MjkyMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQ0NDQ4LCAyNzI5OCwgMzMzMzMsIDI1MzQ0LCA0NTQ3NywgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA0OTcxMSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDk3MDcsIDM4NjcyLCAzODY3MiwgMjcxNTYsIDQ5ODA1LCAzNzc1MywgMzc2MzAsIDI2NDUzLCA0OTk4NiwgNDk4MjYsIDI1Mzc1LCAzODY3MiwgMjAyMzYsIDM4NjcyLCAyOTY0MSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgxMzMsIDI2OTI5LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCA0NzgzNCwgMjUzOTMsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDQ5ODYyLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzNzg3OSwgMzA5OTAsIDM5NDYzLCAzODY3MiwgNDU4MDgsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NTE0LCAzODY3MiwgMzg2NzIsIDI4MjU4LCA0OTg5OCwgMjI0NzUsIDMxNzU2LCAyMjQ3NSwgMzU3ODYsIDIyNDExLCA0OTkxOSwgMjI0MTEsIDM2Njg4LCAyMjQxMSwgMzczMzQsIDQwNzY2LCAyNjcyNywgMjY3MjcsIDQ5OTM2LCAyNjcyNywgMzI5MTksIDMzODAzLCAzODY3MiwgMjU2NTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkzMSwgMjI0NzUsIDM3OTg0LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTE1MSwgMjI0MTEsIDQ2Mzk4LCAyMjQxMSwgMjI0MTEsIDIyNDExLCA0MzkxOSwgMjY3MjcsIDMxMzAyLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOCwgMzM4MDIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg5OTksIDM4NjcyLCAyMjQ3NSwgMjI0NzUsIDI2ODA1LCAyMjQ3NSwgNDk2MjMsIDMzODU0LCAyMjQxMSwgMjI0MTEsIDQ5OTU3LCAyMjQxMSwgNDk5NzUsIDI2NzI3LCAyNjcyNywgNDc1MTAsIDI2NzI3LCA0OTg0NiwgMzM3OTUsIDM4NjcyLCAzODY3MiwgMTg2MTIsIDM4NjcyLCAzODY3MiwgMjgyNTUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI5NDQyLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNjQ4NSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY5OTgsIDMwMDI1LCAzODY3MiwgMzg2NzIsIDUwMDAyLCAyNjkzMSwgNTAwMjMsIDIyNDc1LCAyNzA2MCwgMjI0MTEsIDIyNDExLCAyODM0NywgNTAwNDAsIDI2NzI3LCAyMjUyMSwgMjYzMTMsIDM4NjcyLCA0MDMyMywgMzg2NzIsIDI3MTM2LCAyOTA2NiwgNDIxNDMsIDIyNDExLCA1MDA2MiwgMjY5NzcsIDI3NDg4LCAyMjUyMCwgMjYzMTIsIDM0MDM2LCAyNjkyOSwgMjI0NzUsIDQyMTQ0LCAyMjQxMSwgMjY5NzUsIDI2NzI3LCAyNjMxMCwgMzU3NTksIDIyNDc2LCAyMjQxMSwgMjY5NzgsIDQ4MTk2LCAyMDQzNSwgMjgzNDAsIDI2OTc2LCAzOTYxNywgNDIxMzksIDI4MzQ1LCAyNjQ1NiwgMjgyNTcsIDI4MzQzLCAyNjQ1NiwgMjgyNTcsIDI4MzQ1LCAyNjQ1OSwgMzM1MzgsIDM2MzYyLCAzNjM1NywgMzQ5MDUsIDI4ODYzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNTMyMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyMDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDI5MjIsIDQxMzYwLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0NDQ0OCwgMjcyOTgsIDMzMzMzLCAyNTM0NCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NiwgNDIxNDEsIDIyNDExLCAyNjQ1MywgNDQyODAsIDI3MjY4LCAyNTM3NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjk2NDEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNjkyOSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI1MzkzLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjY5MCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMwOTkwLCAzOTQ2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1OCwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDM1Nzg2LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDM3MzM0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE5LCAzMzgwMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMzM4NDksIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzMzMjQsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMzI5MTgsIDMzODAyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDI4MDE1LCAzMzg1NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI3ODUxLCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDMzNzk1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI4MjU1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyOTQ0MiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjY0ODUsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2OTk4LCA0Njg4NywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MzEsIDIyNDc1LCAyMjQ3NSwgNDIxNDIsIDIyNDExLCAyMjQxMSwgMjgzNDcsIDI2NzI3LCAyNjcyNywgMjI1MjEsIDI2MzEzLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNzEzNiwgMjI0NzUsIDQyMTQzLCAyMjQxMSwgMjI0MTEsIDI2OTc3LCAyNjcyNywgMjI1MjAsIDI2MzEyLCAzNDAzNiwgMjY5MjksIDIyNDc1LCA0MjE0NCwgMjI0MTEsIDI2OTc1LCAyNjcyNywgMjYzMTAsIDM1NzU5LCAyMjQ3NiwgMjI0MTEsIDI2OTc4LCA0ODE5NiwgMjA0MzUsIDI4MzQwLCAyNjk3NiwgMzk2MTcsIDQyMTM5LCAyODM0NSwgMjY0NTYsIDI4MjU3LCAyODM0MywgMjY0NTYsIDI4MjU3LCAyODM0NSwgMjY0NTksIDMzNTM4LCAzNjM2MiwgMzYzNTcsIDM0OTA1LCAyODg2MywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzNDMzOSwgMTk1ODUsIDE5NTgzLCA0MDE4MywgMzM2NzYsIDUwMDc5LCAyNzc2NiwgMjc3NjgsIDUwMTEwLCAzMzY3MywgMzQzNTAsIDUwMTI4LCA1MDE0MCwgMjA4MzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDI1NTE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMTg5NTMsIDIwNjEzLCAxODc5NCwgMTkyMDAsIDE5NDE4LCAzNTk5MCwgNDUzNTEsIDM4NjcyLCAxODI2OSwgNDI1NjQsIDI5NjQxLCAzODY3MiwgNDAxNDQsIDM4NjcyLCAyMzAzMiwgMTgzMDYsIDE4MzU2LCAxODM4MiwgMTgzODcsIDE4NDAzLCAxODQyMiwgMTg0NjIsIDIwNjcwLCAxODQ3NSwgNTA0MzQsIDE4NTAzLCAxODUyNSwgNTAxNTYsIDE5NDEyLCA1MDQ0MCwgMTg1MDksIDM2MDAzLCAxOTIzMiwgMjA1NjMsIDM4NjcyLCA0NjkzMCwgMTg1OTEsIDM4NjcyLCAzODY3MiwgMzc1NzQsIDE4NjA5LCAxODYyOCwgMzM3MzYsIDE4NjUyLCAxODY4NSwgMTg3MjIsIDE4NzUzLCAxODc0NSwgMTg3NjksIDE4NDA2LCAyNTg0OSwgMTg3OTIsIDIwMzYwLCAxODgxMCwgMTg4MzAsIDE4ODM1LCAxOTEzOCwgMTg3OTQsIDIwMzY0LCAxODgxNCwgMTg3OTQsIDE4ODM5LCAxOTU0MCwgMTk5NTUsIDM3NTU0LCA0ODk0MywgMTg4NTUsIDE4ODcxLCAxODg5NCwgNDAyNTgsIDM4NjcyLCAzODk3NiwgMTg5MzEsIDE4OTQ3LCAxODk3NCwgMTkwMTYsIDE5MDYyLCAxOTE2OSwgMTkxMDMsIDE5MTI5LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjQ4LCAyMDcyNiwgMTk5MzQsIDE5MTU0LCAxOTE4NSwgMTkyMjIsIDE5MjczLCAxOTAwMCwgMzA5NjQsIDE5Mjk5LCAxOTMxNSwgMjg3MTIsIDE5MzQyLCAyNTE4NywgMTkzNzcsIDE5MzkzLCAxOTQzNCwgMTk0NjQsIDE5NDk1LCAxOTU2OSwgMTk2MDgsIDI0OTM4LCAxOTkwNSwgMTk2MzEsIDE5MDQ2LCAxOTYwMSwgMjQ5MzEsIDE5ODk4LCAxOTYyNCwgMTkwMzksIDE5NjQ3LCAxOTY4NywgNDM3OTYsIDE5NzIyLCAxOTc5MiwgMTk3NDUsIDE5NzcxLCAxOTgwOCwgMTkxMTMsIDE5ODU5LCAxOTg3NSwgMTk5MjEsIDE4NDQ2LCAxOTk3NiwgMTk5OTQsIDI0OTgzLCAxODQ0NCwgMTk5NzQsIDE5OTkyLCAyMDMyMSwgMTg1NjIsIDQ3MzgzLCAyMDAxMCwgNDY1MTUsIDM1OTc5LCAyMDAzOSwgMjA2NzksIDIwMTA1LCAyMDE2MCwgMjAxMTYsIDIwMTMyLCAyMDE1OSwgMjAxMTUsIDIwMTc2LCAxOTQ3OSwgMjAyMDcsIDIwMjIzLCAyMDI1OSwgMjAyOTgsIDIwMzM3LCAyMDM4MCwgMjA0MDIsIDIxMzY4LCAyMDM4NiwgMjA0MDgsIDIxMzc0LCAxOTI4MywgMjA0MjQsIDIwNDUyLCAyMDQ2OCwgMjA0ODQsIDIwNDk3LCA1MDQyNCwgMjA1MDAsIDIwNTE2LCAyMDUzMiwgMjA1NDgsIDIwNTkyLCAyMDU4OSwgNTAxNzEsIDIwNjA4LCAxOTU0NywgMTg3OTQsIDE4NDg3LCAyMDYyOSwgMjAxNDMsIDE5OTQ1LCAyMDY2MCwgMTg0MzcsIDIxOTU0LCAyMDY5NSwgMjA3MTEsIDIxOTY5LCAxOTQ0OCwgMjE5MzksIDIwNzU1LCAxOTUxMCwgMTk2NTksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIwOTM5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzA0NzAsIDM4NjcyLCAzODY3MiwgMjAyNzMsIDM4NjcyLCA0MjkyMiwgMzExMDQsIDMxMTEyLCA1MDIyNiwgNTAyNDAsIDUwMjQ4LCA0MjQ4MywgNTAyNzIsIDIwODMyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA0MzIxNSwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjU1NDcsIDM4NjcyLCAzODY3MiwgMjU1NDQsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxODUzMSwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAyOTY0MSwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTk0MDYsIDUwNDM0LCAxODUwMywgMTg1MjUsIDE4NTQ3LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDIwNDI0LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjA1MzIsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAyMDYwOCwgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyMDkzOSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyNTg5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjQ4NDIsIDM1MDE3LCA1MDMxNSwgNTAzMTksIDUwMzM1LCA1MDM0MywgNDM5OTUsIDUwMzY3LCAyMDgzMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgNDMyMTUsIDM4NjcyLCAzODY3MiwgMjUzNTksIDM4NjcyLCAzODY3MiwgMjMxNzEsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIzMTY3LCAxODk1MywgMTg5NTgsIDE4Nzk0LCAzNTk5OCwgMTk0MTgsIDM1OTkwLCA0NTM1MSwgMzg2NzIsIDE4MjY5LCA0MjU2NCwgMjk2NDEsIDM4NjcyLCA0MDE0NCwgMzg2NzIsIDIzMDMyLCAxODMwNiwgMTgzNTYsIDE4MzgyLCAxODM4NywgMTg0MDMsIDE4NDIyLCAxODQ2MiwgMjA2NzAsIDE5MDc1LCA1MDQzNCwgMTg1MDMsIDE4NTI1LCA1MDQwOSwgMTk0MTIsIDUwNDQwLCAxODUwOSwgMzYwMDMsIDE5MjMyLCAyMDU2MywgMzg2NzIsIDQ2OTMwLCAxODU5MSwgMzg2NzIsIDM4NjcyLCAzNzU3NCwgMTg2MDksIDE4NjI4LCAzMzczNiwgMTg2NTIsIDE4Njg1LCAxODcyMiwgMTg3NTMsIDE4NzQ1LCAxODc2OSwgMTg0MDYsIDI1ODQ5LCAxODc5MiwgMjAzNjAsIDE4ODEwLCAxODgzMCwgMTg4MzUsIDE5MTM4LCAxODc5NCwgMjAzNjQsIDE4ODE0LCAxODc5NCwgMTg4MzksIDE5NTQwLCAxOTk1NSwgMzc1NTQsIDQ4OTQzLCAxODg1NSwgMTg4NzEsIDE4ODk0LCA0MDI1OCwgMzg2NzIsIDM4OTc2LCAxODkzMSwgMTg5NDcsIDE4OTc0LCAxOTAxNiwgMTkwNjIsIDE5MTY5LCAxOTEwMywgMTkxMjksIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNDgsIDIwNzI2LCAxOTkzNCwgMTkxNTQsIDE5MTg1LCAxOTIyMiwgMTkyNzMsIDE5MDAwLCAzMDk2NCwgMTkyOTksIDE5MzE1LCAyODcxMiwgMTkzNDIsIDI1MTg3LCAxOTM3NywgMTkzOTMsIDE5NDM0LCAxOTQ2NCwgMTk0OTUsIDE5NTY5LCAxOTYwOCwgMjQ5MzgsIDE5OTA1LCAxOTYzMSwgMTkwNDYsIDE5NjAxLCAyNDkzMSwgMTk4OTgsIDE5NjI0LCAxOTAzOSwgMTk2NDcsIDE5Njg3LCA0Mzc5NiwgMTk3MjIsIDE5NzkyLCAxOTc0NSwgMTk3NzEsIDE5ODA4LCAxOTExMywgMTk4NTksIDE5ODc1LCAxOTkyMSwgMTg0NDYsIDE5OTc2LCAxOTk5NCwgMjQ5ODMsIDE4NDQ0LCAxOTk3NCwgMTk5OTIsIDIwMzIxLCAxODU2MiwgNDczODMsIDIwMDEwLCA0NjUxNSwgMzU5NzksIDIwMDM5LCAyMDY3OSwgMjAxMDUsIDIwMTYwLCAyMDExNiwgMjAxMzIsIDIwMTU5LCAyMDExNSwgMjAxNzYsIDE5NDc5LCAyMDIwNywgMjAyMjMsIDIwMjU5LCAyMDI5OCwgMjAzMzcsIDIwMzgwLCAyMDQwMiwgMjEzNjgsIDIwMzg2LCAyMDQwOCwgMjEzNzQsIDE5MjgzLCAyMDQyNCwgMjA0NTIsIDIwNDY4LCAyMDQ4NCwgMjA0OTcsIDUwNDI0LCAyMDUwMCwgMjA1MTYsIDIwNTMyLCAyMDU0OCwgMjA1OTIsIDIwNTg5LCA1MDE3MSwgMjA2MDgsIDE5NTQ3LCAxODc5NCwgMTg0ODcsIDIwNjI5LCAyMDE0MywgMTk5NDUsIDIwNjYwLCAxODQzNywgMjE5NTQsIDIwNjk1LCAyMDcxMSwgMjE5NjksIDE5NDQ4LCAyMTkzOSwgMjA3NTUsIDE5NTEwLCAxOTY1OSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjA5MzksIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzMDQ3MCwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQyOTIyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyNDg2MCwgMjUzNDQsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDQzMjE1LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTYsIDQyMTQxLCAyMjQxMSwgMjY0NTMsIDQ0MjgwLCAyNzI2OCwgMjIyMzAsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI5NjQxLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjY5MjksIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNjU0NCwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMzM4NTgsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMDk5MCwgMzk0NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjgyNTgsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAzNTc4NiwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAzNzMzNCwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAzMjkxOSwgMzM4MDMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDMzODQ5LCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDMzMzI0LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDMyOTE4LCAzMzgwMiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDIyNDc1LCAyMjQ3NSwgMjI0NzUsIDIyNDc1LCAyODAxNSwgMzM4NTQsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDIyNDExLCAyNzg1MSwgMjY3MjcsIDI2NzI3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAzMzc5NSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAyODI1NSwgMjI0NzUsIDIyNDc1LCAyMjQ3NSwgMjk0NDIsIDIyNDExLCAyMjQxMSwgMjI0MTEsIDI2NDg1LCAyNjcyNywgMjY3MjcsIDI2NzI3LCAyNjk5OCwgNDY4ODcsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDI2OTMxLCAyMjQ3NSwgMjI0NzUsIDQyMTQyLCAyMjQxMSwgMjI0MTEsIDI4MzQ3LCAyNjcyNywgMjY3MjcsIDIyNTIxLCAyNjMxMywgMzg2NzIsIDM4NjcyLCAzODY3MiwgMjcxMzYsIDIyNDc1LCA0MjE0MywgMjI0MTEsIDIyNDExLCAyNjk3NywgMjY3MjcsIDIyNTIwLCAyNjMxMiwgMzQwMzYsIDI2OTI5LCAyMjQ3NSwgNDIxNDQsIDIyNDExLCAyNjk3NSwgMjY3MjcsIDI2MzEwLCAzNTc1OSwgMjI0NzYsIDIyNDExLCAyNjk3OCwgNDgxOTYsIDIwNDM1LCAyODM0MCwgMjY5NzYsIDM5NjE3LCA0MjEzOSwgMjgzNDUsIDI2NDU2LCAyODI1NywgMjgzNDMsIDI2NDU2LCAyODI1NywgMjgzNDUsIDI2NDU5LCAzMzUzOCwgMzYzNjIsIDM2MzU3LCAzNDkwNSwgMjg4NjMsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg5NTYsIDM4NjcyLCAzODY3MiwgMjk3OTYsIDUwNDU2LCA1MDQ2MCwgNTA0NjAsIDUwNDgyLCAzODk1NSwgNTA0NzYsIDUwNDk4LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA1MDUwNSwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDE4OTUzLCAxODk1OCwgMTg3OTQsIDM1OTk4LCAxOTQxOCwgMzU5OTAsIDQ1MzUxLCAzODY3MiwgMTgyNjksIDQyNTY0LCAzODY3MiwgMzg2NzIsIDQwMTQ0LCAzODY3MiwgMjMwMzIsIDE4MzA2LCAxODM1NiwgMTgzODIsIDE4Mzg3LCAxODQwMywgMTg0MjIsIDE4NDYyLCAyMDY3MCwgMTg0NzUsIDUwNDM0LCAxODUwMywgMTg1MjUsIDUwMTU2LCAxOTQxMiwgNTA0NDAsIDE4NTA5LCAzNjAwMywgMTkyMzIsIDIwNTYzLCAzODY3MiwgNDY5MzAsIDE4NTkxLCAzODY3MiwgMzg2NzIsIDM3NTc0LCAxODYwOSwgMTg2MjgsIDMzNzM2LCAxODY1MiwgMTg2ODUsIDE4NzIyLCAxODc1MywgMTg3NDUsIDE4NzY5LCAxODQwNiwgMjU4NDksIDE4NzkyLCAyMDM2MCwgMTg4MTAsIDE4ODMwLCAxODgzNSwgMTkxMzgsIDE4Nzk0LCAyMDM2NCwgMTg4MTQsIDE4Nzk0LCAxODgzOSwgMTk1NDAsIDE5OTU1LCAzNzU1NCwgNDg5NDMsIDE4ODU1LCAxODg3MSwgMTg4OTQsIDQwMjU4LCAzODY3MiwgMzg5NzYsIDE4OTMxLCAxODk0NywgMTg5NzQsIDE5MDE2LCAxOTA2MiwgMTkxNjksIDE5MTAzLCAxOTEyOSwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI0OCwgMjA3MjYsIDE5OTM0LCAxOTE1NCwgMTkxODUsIDE5MjIyLCAxOTI3MywgMTkwMDAsIDMwOTY0LCAxOTI5OSwgMTkzMTUsIDI4NzEyLCAxOTM0MiwgMjUxODcsIDE5Mzc3LCAxOTM5MywgMTk0MzQsIDE5NDY0LCAxOTQ5NSwgMTk1NjksIDE5NjA4LCAyNDkzOCwgMTk5MDUsIDE5NjMxLCAxOTA0NiwgMTk2MDEsIDI0OTMxLCAxOTg5OCwgMTk2MjQsIDE5MDM5LCAxOTY0NywgMTk2ODcsIDQzNzk2LCAxOTcyMiwgMTk3OTIsIDE5NzQ1LCAxOTc3MSwgMTk4MDgsIDE5MTEzLCAxOTg1OSwgMTk4NzUsIDE5OTIxLCAxODQ0NiwgMTk5NzYsIDE5OTk0LCAyNDk4MywgMTg0NDQsIDE5OTc0LCAxOTk5MiwgMjAzMjEsIDE4NTYyLCA0NzM4MywgMjAwMTAsIDQ2NTE1LCAzNTk3OSwgMjAwMzksIDIwNjc5LCAyMDEwNSwgMjAxNjAsIDIwMTE2LCAyMDEzMiwgMjAxNTksIDIwMTE1LCAyMDE3NiwgMTk0NzksIDIwMjA3LCAyMDIyMywgMjAyNTksIDIwMjk4LCAyMDMzNywgMjAzODAsIDIwNDAyLCAyMTM2OCwgMjAzODYsIDIwNDA4LCAyMTM3NCwgMTkyODMsIDUwNTI3LCAyMDQ1MiwgMjA0NjgsIDIwNDg0LCAyMDQ5NywgNTA0MjQsIDIwNTAwLCAyMDUxNiwgMjYxMDAsIDIwNTQ4LCAyMDU5MiwgMjA1ODksIDUwMTcxLCAxODk1MywgMTk1NDcsIDE4Nzk0LCAxODQ4NywgMjA2MjksIDIwMTQzLCAxOTk0NSwgMjA2NjAsIDE4NDM3LCAyMTk1NCwgMjA2OTUsIDIwNzExLCAyMTk2OSwgMTk0NDgsIDIxOTM5LCAyMDc1NSwgMTk1MTAsIDE5NjU5LCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCAzODY3MiwgMzg2NzIsIDM4NjcyLCA5NDUwNSwgOTQ1MDUsIDkwNDA4LCA5MDQwOCwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDEsIDEyMjkwLCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCAwLCA5NDUwNSwgOTA0MDgsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDM2NCwgOTQ1MDUsIDkwNDA4LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgNjk2MzIsIDczNzI4LCA5NDUwNSwgOTQ1MDUsIDk0NTA1LCA5NDUwNSwgOTQ1MDUsIDY1NTM2LCA5NDUwNSwgMywgMCwgMCwgMjE4MzE2OCwgMCwgMCwgMCwgOTA0MDgsIDk0NTA1LCAyOTgsIDI5OSwgMCwgMjEzNDAxNiwgMzAyLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDE2MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NDUsIDAsIDAsIDI3MzIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MDQwNjQsIDI5MDgxNjAsIDAsIDAsIDAsIDAsIDAsIDE2OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NjMsIDAsIDAsIDAsIDAsIDAsIDI0MjQ4MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MjU1MzYsIDAsIDAsIDAsIDAsIDAsIDIwNDUsIDAsIDAsIDAsIDAsIDIwNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NzYsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNjk5MjY0LCAyNzE1NjQ4LCAwLCAwLCAyNzcyOTkyLCAyODA1NzYwLCAyODMwMzM2LCAwLCAyODYzMTA0LCAyOTIwNDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDMsIDMwMywgMzAzLCAzMDMsIDAsIDMwMywgMzAzLCAzMDMsIDMwMywgMCwgMjgwNTc2MCwgMjkyMDQ0OCwgMCwgMCwgMCwgMCwgMCwgMjkyMDQ0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczMjAzMiwgMCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjQyNDgzMiwgMjQzMzAyNCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzEyNTI0OCwgMjYyNTUzNiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjY5OTI2NCwgMjE3OTA3MiwgMjcxNTY0OCwgMjE3OTA3MiwgMjcyMzg0MCwgMjE3OTA3MiwgMjczMjAzMiwgMjc3Mjk5MiwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjU5Mjc2OCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjU1MTgwOCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjYzNzgyNCwgMjEyNTgyNCwgMjE3OTA3MiwgMjE3OTA3MiwgMjgwNTc2MCwgMjE3OTA3MiwgMjgzMDMzNiwgMjE3OTA3MiwgMjE3OTA3MiwgMjg2MzEwNCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjkyMDQ0OCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMCwgMCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQyNDgzMiwgMjQzMzAyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMjUwMjY1NiwgMCwgMCwgMzAxMDU2MCwgMCwgMCwgMCwgMCwgMjk5MDA4MCwgMjE3OTA3MiwgMjE3OTA3MiwgMjY5OTI2NCwgMjEyNTgyNCwgMjcxNTY0OCwgMjEyNTgyNCwgMjcyMzg0MCwgMjEyNTgyNCwgMjczMjAzMiwgMjc3Mjk5MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjgwNTc2MCwgMjEyNTgyNCwgMjgzMDMzNiwgMjEyNTgyNCwgMjEyNTgyNCwgMjg2MzEwNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjkyMDQ0OCwgMjg2MzEwNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjkyMDQ0OCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMTE0Mjc4NCwgMCwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzExNzA1NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMCwgOTc1LCAyMTI1ODI0LCAwLCAwLCAwLCAwLCAwLCAwLCAyNTEwODQ4LCAyNTE0OTQ0LCAwLCAwLCAyNTQ3NzEyLCAyNTk2ODY0LCAwLCAwLCAwLCAwLCAwLCAwLCA3MzUsIDAsIDAsIDAsIDAsIDczNSwgMCwgNzQxLCAwLCAwLCAwLCAyNzg5Mzc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTM3LCAwLCAwLCAyMTQyMjA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzMzLCAwLCAyNjYyNDAwLCAwLCAyODEzOTUyLCAwLCAwLCAwLCAwLCAyMzc1NjgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTAsIDM1MSwgMzUyLCAwLCAwLCAwLCAwLCAyNTg0NTc2LCAwLCAwLCAwLCAwLCAyODM4NTI4LCAwLCAwLCAyODM4NTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODkxNzc2LCAwLCAwLCAwLCAwLCAwLCAyMzkyMDY0LCAyNDEyNTQ0LCAwLCAwLCAyODM4NTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjQwODQ0OCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNTgyNCwgMCwgMjEyNjcyNCwgMjEyNjcyNCwgMjYxNzM0NCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjY2MjQwMCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjU4NDU3NiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjgwMTY2NCwgMjgxMzk1MiwgMjE3OTA3MiwgMjgzODUyOCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNTgyNCwgMTc5OCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQwODQ0OCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjY2MjQwMCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjgwMTY2NCwgMjgxMzk1MiwgMjEyNTgyNCwgMjgzODUyOCwgMjEyNTgyNCwgMjgxMzk1MiwgMjEyNTgyNCwgMjgzODUyOCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzEyNTI0OCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMjgyMjE0NCwgMCwgMCwgMjg4MzU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA4MDE5MiwgMzEwMDY3MiwgMzEwNDc2OCwgMCwgMCwgMCwgMCwgMzE4NjY4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA1LCAzMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3OTc1NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NTA4MTYsIDI4NjcyMDAsIDAsIDAsIDI4ODM1ODQsIDAsIDAsIDAsIDAsIDAsIDIwNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMzQsIDAsIDAsIDAsIDAsIDI0NjU3OTIsIDAsIDAsIDI3MTk3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMTQ2NTYsIDMyMDcxNjgsIDAsIDI2OTEwNzIsIDAsIDAsIDMyMTUzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI0NjE2OTYsIDI0NjU3OTIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI1MjMxMzYsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDAsIDEzNDIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0MjQ4MzIsIDI0MzMwMjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NzM5ODQsIDI0NzgwODAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI2MDA5NjAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI2NDE5MjAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDEwNDcsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMwMzUxMzYsIDIxMjU4MjQsIDIxMjU4MjQsIDMwNzIwMDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMxMjExNTIsIDIxMjU4MjQsIDIxMjU4MjQsIDMxNDE2MzIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMxNzAzMDQsIDIxNzkwNzIsIDIxNzkwNzIsIDI3MTk3NDQsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI3Njg4OTYsIDI3NzcwODgsIDI3ODExODQsIDI3OTc1NjgsIDI4MjIxNDQsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDAsIDkwMCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQyNDgzMiwgMjQzMzAyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjk4LCAwLCAyOTksIDAsIDMwMiwgMCwgMzAzLCAwLCAwLCAwLCAyNDczOTg0LCAyNDc4MDgwLCAyMTc5MDcyLCAzMDYzODA4LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTAwNjcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTMzNDQwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNTUxODA4LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNjM3ODI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMjA3MTY4LCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAwLCAwLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDA4NDQ4LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNzE5NzQ0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNzY4ODk2LCAyNzc3MDg4LCAyNzgxMTg0LCAyNzk3NTY4LCAyODIyMTQ0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyODgzNTg0LCAyMTc5MDcyLCAyOTEyMjU2LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMDM5MjMyLCAyMTI1ODI0LCAyOTEyMjU2LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMDM5MjMyLCAyMTI1ODI0LCAyMTI1ODI0LCAwLCAyMTI1ODI0LCAyMTI2Nzk5LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDU3NjAsIDAsIDAsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDMwNjM4MDgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMxMDA2NzIsIDIxMjU4MjQsIDIxMjU4MjQsIDMxMzM0NDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDI0NTc2MDAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI0NTc2MDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMyMDcxNjgsIDIxMjU4MjQsIDAsIDAsIDAsIDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDE4OTQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0MDg0NDgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMyMDcxNjgsIDIxMjU4MjQsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDI0ODYyNzIsIDAsIDAsIDAsIDAsIDAsIDI2Nzg3ODQsIDI4NTQ5MTIsIDMwMDY0NjQsIDAsIDI5MjQ1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNjIxMTIsIDMxNzAzMDQsIDAsIDAsIDMyMTk0NTYsIDMwMzUxMzYsIDAsIDAsIDAsIDAsIDAsIDMwNzIwMDAsIDI2NTAxMTIsIDAsIDAsIDI4MDk4NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTQsIDAsIDI2ODY5NzYsIDI3MzYxMjgsIDAsIDAsIDI1MzEzMjgsIDI3MDc0NTYsIDAsIDMxOTA3ODQsIDAsIDAsIDI1NzYzODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjExNTIsIDMxNDE2MzIsIDAsIDAsIDAsIDI5MjQ1NDQsIDAsIDI2ODI4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMTI5NjAsIDIzODc5NjgsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDI0NTM1MDQsIDIxNzkwNzIsIDI0NzM5ODQsIDI0ODIxNzYsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDAsIDkwMSwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQyNDgzMiwgMjQzMzAyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMCwgMCwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjUzMTMyOCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjYwNTA1NiwgMjE3OTA3MiwgMjYyOTYzMiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNTgyNCwgMjUyNzIzMiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzA5MjQ4MCwgMjEyNTgyNCwgMjUyNzIzMiwgMjEyNTgyNCwgMjY1MDExMiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjcwNzQ1NiwgMjE3OTA3MiwgMjczNjEyOCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjg4NzY4MCwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQ0MTIxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkzMjczNiwgMjE3OTA3MiwgMjkyNDU0NCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzAzNTEzNiwgMjE3OTA3MiwgMjE3OTA3MiwgMzA3MjAwMCwgMjE3OTA3MiwgMjEyNTgyNCwgMjY1ODMwNCwgMjk3MzY5NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjY1ODMwNCwgMjk3MzY5NiwgMjEyNTgyNCwgMjcxMTU1MiwgMjU2MDAwMCwgMjE3OTA3MiwgMjU2MDAwMCwgMjEyNTgyNCwgMjU2MDAwMCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzIyMzU1MiwgOTc1LCAwLCAyMTI1ODI0LCAyMTI1ODI0LCAyNDE2NjQwLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDQ1MzEyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAxMDQ3LCAwLCAwLCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTc5MDcyLCAzMTIxMTUyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTQxNjMyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTcwMzA0LCAyMTc5MDcyLCAyMTc5MDcyLCAzMTkwNzg0LCAzMTk0ODgwLCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM0NTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM0NTkyLCAyMTI1ODI0LCAyMTI1ODI0LCAzMTkwNzg0LCAzMTk0ODgwLCAyMTI1ODI0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzg3OTY4LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDIwNzM2LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDUzNTA0LCAyMTI1ODI0LCAyNzA3NDU2LCAyMTI1ODI0LCAyNzM2MTI4LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyODg3NjgwLCAyMTI1ODI0LCAyMTI1ODI0LCAyOTI0NTQ0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMTQxNjMyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMTcwMzA0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMTkwNzg0LCAzMTk0ODgwLCAyMTI1ODI0LCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyOTg1OTg0LCAyOTg1OTg0LCAyOTg1OTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDAsIDQxOSwgNDE5LCAwLCAwLCA2NTUzNiwgNDE5LCAyMTc5MDcyLCAzMTEyOTYwLCAzMjE5NDU2LCAyMTI1ODI0LCAyMTI1ODI0LCAzMTEyOTYwLCAzMjE5NDU2LCAyMTI1ODI0LCAyMTI1ODI0LCAzMTEyOTYwLCAzMjE5NDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDIyODQ4LCAwLCAwLCAzMTQ1NzI4LCAwLCAzMjAzMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzUsIDMzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2NzkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQ1MzEyLCAwLCAyODQyNjI0LCAwLCAwLCAwLCAyNjM3ODI0LCAwLCAwLCAwLCAwLCAyNjIxNDQwLCAwLCAwLCAwLCAwLCAwLCAyMTAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzI3OTM2LCAwLCAwLCAwLCAzMDg0Mjg4LCAzMTgyNTkyLCAyODk5OTY4LCAwLCAyOTYxNDA4LCAwLCAwLCAyMTc5MDcyLCAyMTc5MDcyLCAyNDE2NjQwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNDQ1MzEyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAwLCA5MDEsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDI0MjU3MzIsIDI0MzM5MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDI0NTg1NzQsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxODMxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NiwgMCwgMCwgMCwgMCwgMCwgMzk2LCAwLCAwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNzI3OTM2LCAyNzUyNTEyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyODQyNjI0LCAyODQ2NzIwLCAyMTc5MDcyLCAyODk1ODcyLCAyOTE2MzUyLCAyMTc5MDcyLCAyMTc5MDcyLCAyOTQ1MDI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyOTk0MTc2LCAyMTc5MDcyLCAzMDAyMzY4LCAyMTc5MDcyLCAyMTc5MDcyLCAzMDIyODQ4LCAyMTc5MDcyLCAzMDY3OTA0LCAzMDg0Mjg4LCAzMDk2NTc2LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMzc1NjgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI2MDUwNTYsIDIxMjU4MjQsIDI2Mjk2MzIsIDIxMjU4MjQsIDIxMjU4MjQsIDI2NTAxMTIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI3MDc0NTYsIDIxMjU4MjQsIDI3MzYxMjgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDMyMjM1NTIsIDAsIDAsIDIxMjU4MjQsIDIxMjU4MjQsIDI0MTY2NDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0NDUzMTIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI2MDA5NjAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI2NDE5MjAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMwMTA1NjAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NDAsIDAsIDI2Mzc4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI3Mjc5MzYsIDI3NTI1MTIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI4NDI2MjQsIDI4NDY3MjAsIDIxMjU4MjQsIDI4OTU4NzIsIDI5MTYzNTIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI5NDUwMjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI5OTQxNzYsIDIxMjU4MjQsIDMwMDIzNjgsIDIxMjU4MjQsIDIxMjU4MjQsIDMwMjI4NDgsIDIxMjU4MjQsIDMwNjc5MDQsIDMwODQyODgsIDIxMjU4MjQsIDMwOTY1NzYsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDAsIDAsIDI5Mjg2NDAsIDAsIDAsIDAsIDMwNTk3MTIsIDAsIDI1NDM2MTYsIDI2NjY0OTYsIDAsIDI2MzM3MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDc2NiwgNzY3LCAwLCAwLCAwLCA3NTQsIDAsIDAsIDc3NCwgMCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjQ5NDQ2NCwgMjE3OTA3MiwgMjE3OTA3MiwgMjUxNDk0NCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjU0MzYxNiwgMjU0NzcxMiwgMjE3OTA3MiwgMjE3OTA3MiwgMjU5Njg2NCwgMjE3OTA3MiwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjU5MzY2OCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjc5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUxMDg0OCwgMjUxNDk0NCwgMCwgMCwgMjU0NzcxMiwgMjU5Njg2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU2NCwgMCwgMTU2NiwgMCwgMCwgMCwgMjE3OTA3MiwgMjE3OTA3MiwgMzA1OTcxMiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzE3ODQ5NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjkyODY0MCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjk5ODI3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzA1OTcxMiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzE3ODQ5NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzAxMDU2MCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjUwMjY1NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQ5NDQ2NCwgMjEyNTgyNCwgMjEyNTgyNCwgMjUxNDk0NCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjU0MzYxNiwgMjU0NzcxMiwgMjEyNTgyNCwgMjEyNTgyNCwgMjU5Njg2NCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzA1OTcxMiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzE3ODQ5NiwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjE3OTA3MiwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjc5OCwgMjEyNjc5OCwgMjQ0MTIxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkzMjczNiwgMjk2NTUwNCwgMCwgMCwgMzA3NjA5NiwgMCwgMCwgMjY5NTE2OCwgMzE3NDQwMCwgMjY0NjAxNiwgMjYxMzI0OCwgMjcwMzM2MCwgMCwgMCwgMCwgMCwgMjk3Nzc5MiwgMCwgMCwgMzA0NzQyNCwgMzEyOTM0NCwgMCwgMjk4MTg4OCwgMjM5NjE2MCwgMCwgMzE1MzkyMCwgMCwgMCwgMCwgMjc0MDIyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzkzNDcyLCAwLCAwLCAwLCAwLCAwLCAyNDY5ODg4LCAyNTA2NzUyLCAyNzU2NjA4LCAwLCAwLCAyNTgwNDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ2ODgwLCAwLCAxMTQ2ODgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDAsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMCwgMjM5NjE2MCwgMjQwMDI1NiwgMjE3OTA3MiwgMjE3OTA3MiwgMjQ0MTIxNiwgMjE3OTA3MiwgMjQ2OTg4OCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjUxOTA0MCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQxNjY0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMjIzNTUyLCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNTg4NjcyLCAyMTc5MDcyLCAyNjEzMjQ4LCAyNjQ2MDE2LCAyMTc5MDcyLCAyMTc5MDcyLCAyNjk1MTY4LCAyNzU2NjA4LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyOTMyNzM2LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDU3NjAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI1ODQ1NzYsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI2MTczNDQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI2NjI0MDAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDMxMjkzNDQsIDIxNzkwNzIsIDIxNzkwNzIsIDMxNTM5MjAsIDMxNjYyMDgsIDMxNzQ0MDAsIDIzOTYxNjAsIDI0MDAyNTYsIDIxMjU4MjQsIDIxMjU4MjQsIDI0NDEyMTYsIDIxMjU4MjQsIDI0Njk4ODgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI1MTkwNDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI1MTkwNDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI1ODg2NzIsIDIxMjU4MjQsIDI2MTMyNDgsIDI2NDYwMTYsIDIxMjU4MjQsIDIxMjU4MjQsIDI2OTUxNjgsIDI3NTY2MDgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI5MzI3MzYsIDIxMjU4MjQsIDAsIDMxMDg4NjQsIDMxOTg5NzYsIDAsIDAsIDMwNDMzMjgsIDAsIDMxNDk4MjQsIDI5MzY4MzIsIDAsIDI3NjA3MDQsIDMxMzIsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNTAzLCAyOTUzMjE2LCAwLCAwLCAyODI2MjQwLCAzMTU4MDE2LCAyNDI4OTI4LCAwLCAzMDE4NzUyLCAyNzY0ODAwLCAyNTcyMjg4LCAwLCAwLCAzMDUxNTIwLCAyMTc5MDcyLCAyNDI4OTI4LCAyNDM3MTIwLCAyMTc5MDcyLCAyNDg2MjcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNjU0MjA4LCAyNjc4Nzg0LCAyNzYwNzA0LCAyNzY0ODAwLCAyODU0OTEyLCAyOTY5NjAwLCAyMTc5MDcyLCAzMDA2NDY0LCAyMTc5MDcyLCAzMDE4NzUyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTQ5ODI0LCAyMTI1ODI0LCAyNDI4OTI4LCAyNDM3MTIwLCAyMTI1ODI0LCAyNDg2MjcyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNjU0MjA4LCAyNjc4Nzg0LCAyNzYwNzA0LCAyNzY0ODAwLCAyNzg1MjgwLCAyODU0OTEyLCAyOTY5NjAwLCAyMTI1ODI0LCAzMDA2NDY0LCAyMTI1ODI0LCAzMDE4NzUyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMTQ5ODI0LCAyMTc5MDcyLCAzMDUxNTIwLCAyMTI1ODI0LCAzMDUxNTIwLCAyMTI1ODI0LCAzMDUxNTIwLCAwLCAyNDkwMzY4LCAyNDk4NTYwLCAwLCAwLCAwLCAwLCAyODc1MzkyLCAwLCAwLCAwLCAzMTMyLCAwLCAwLCAyODM0NDMyLCAwLCAzMjI3NjQ4LCAyNTY4MTkyLCAyNTY0MDk2LCAwLCAyOTQwOTI4LCAyMTc5MDcyLCAyMTc5MDcyLCAyNDk4NTYwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNTU1OTA0LCAyNTY0MDk2LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTM3NTM2LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDU3NjAwLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTgzMTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzMsIDAsIDAsIDAsIDAsIDAsIDMzMywgMCwgMCwgMjEyNTgyNCwgMzEzNzUzNiwgMjEyNTgyNCwgMjEyNTgyNCwgMjQ5ODU2MCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjU1NTkwNCwgMjU2NDA5NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzEzMiwgMCwgMCwgMCwgMCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNjcyNSwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjUwMjY1NiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzAxMDU2MCwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjUwMjY1NiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzAxMDU2MCwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNjcyNCwgMjEyNjcyNCwgMjUwMzU1NiwgMCwgMCwgMCwgMCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjU5Mjc2OCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzExNzA1NiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjkyODY0MCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjk5ODI3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzAzMTA0MCwgMCwgMCwgMCwgMjE3OTA3MiwgMjQ0OTQwOCwgMjE3OTA3MiwgMjUzNTQyNCwgMjE3OTA3MiwgMjYwOTE1MiwgMjE3OTA3MiwgMjg1OTAwOCwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzAzMTA0MCwgMjEyNTgyNCwgMjQ0OTQwOCwgMjEyNTgyNCwgMjUzNTQyNCwgMjEyNTgyNCwgMjYwOTE1MiwgMjEyNTgyNCwgMjg1OTAwOCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzAzMTA0MCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQ0OTQwOCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjQ2MTY5NiwgMjQ2NTc5MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjUyMzEzNiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjk4LCAwLCAwLCAwLCAyOTgsIDAsIDI5OSwgMCwgMCwgMCwgMjk5LCAwLCAzMDIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMwMjY5NDQsIDI0MDQzNTIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMwMjY5NDQsIDI1Mzk1MjAsIDAsIDI5NDkxMjAsIDIxNzkwNzIsIDI2NTgzMDQsIDI5NzM2OTYsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgNDUyLCA0NTIsIDExMTA0NCwgNDUyLCA0NTIsIDQ1MiwgNDUyLCA0NTIsIDQ1MiwgNDUyLCA0NTIsIDQ1MiwgNDUyLCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDQ1MiwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MCwgMCwgMCwgMCwgMCwgMCwgMzYwLCAzLCAwLCAwLCAyMTgzMTY4LCAwLCAwLCAwLCAwLCAwLCAyOTgsIDI5OSwgMCwgMjEzNDAxNiwgMzAyLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDIxMjQsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4NDcsIDUzNCwgNTM0LCA4NjEsIDUzNCwgNTM0LCAwLCAzMDIsIDExODc4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyNywgMCwgMCwgMCwgMzAyLCAwLCAwLCAwLCAzMDIsIDExOTE5NywgNzM3MjgsIDAsIDAsIDAsIDAsIDAsIDY1NTM2LCAwLCAwLCAwLCAwLCAwLCAyNDAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDIsIDMwMiwgMCwgMCwgMCwgMCwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMCwgMCwgMCwgMCwgMCwgMzAyLCAwLCAzMDIsIDEsIDEyMjkwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTY2LCAwLCAzLCAwLCAwLCAyMTgzMTY4LCAwLCAwLCAwLCAwLCAwLCAzMzM5NiwgMjk5LCAwLCAyMTM0MDE2LCA0OTc4NCwgMzAzLCAwLCAwLCAwLCAwLCAwLCAyNDI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMCwgMCwgMCwgMzAyLCAwLCAwLCAwLCAyNDI0ODMyLCAyNDMzMDI0LCAwLCAwLCAyNDU3NjAwLCAyMTA1NjMxLCAxMjI5MCwgMywgMCwgMCwgMjkzLCAwLCAwLCAwLCAwLCAyOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDAsIDAsIDEyMjg4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg1LCAwLCA3OTAsIDAsIDc5MywgMCwgMCwgMCwgMTIyODgwLCAwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAwLCAwLCAwLCAwLCAwLCAxMjI4ODAsIDAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMCwgMCwgMTIyODgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTYsIDAsIDAsIDAsIDAsIDE0NzQ1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0OCwgMCwgMCwgMCwgMCwgMTA2NywgMTA3MSwgMCwgMCwgMTA3NSwgMTA3OSwgMCwgMjQyNDgzMiwgMjQzMzAyNCwgMCwgMCwgMjQ1NzYwMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDAsIDAsIDAsIDAsIDAsIDY1NTM2LCAwLCAwLCAwLCAwLCAwLCAyNDc5LCAyNDM3LCAwLCAwLCAwLCAwLCAwLCAyNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjYwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCAxMzEwNzIsIDAsIDAsIDEzMTA3MiwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDEzMTA3MiwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAxMzUxNjgsIDEzNTE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI1NzA4LCAwLCAwLCAwLCAxMzUxNjgsIDAsIDAsIDEzNTE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1MTY4LCAwLCAxMzUxNjgsIDEzNTE2OCwgMTM1MTY4LCAxMzUxNjgsIDEzNTE2OCwgMTM1MTY4LCAwLCAxMzUxNjgsIDEzNTE2OCwgMTM1MTY4LCAxMzUxNjgsIDEzNTE2OCwgMTM1MTY4LCAwLCAwLCAwLCAwLCAwLCAxMzUxNjgsIDAsIDEzNTE2OCwgMSwgMTIyOTAsIDMsIDAsIDAsIDIxODMxNjgsIDAsIDAsIDAsIDAsIDAsIDYyOSwgNjMwLCAwLCAyMTM0MDE2LCA2MzMsIDYzNCwgMCwgMCwgMCwgMCwgMCwgMjcyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIwMDI0NSwgMjIwMDI0NSwgMjIwMDI0NSwgMCwgMCwgMjEyNTgyNCwgMzExNzA1NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMCwgMTQzNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjkzMjczNiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzEyOTM0NCwgMjEyNTgyNCwgMjEyNTgyNCwgMzE1MzkyMCwgMzE2NjIwOCwgMzE3NDQwMCwgMjUwNjc1MiwgMjUwNjc1MiwgMjUwNjc1MiwgMCwgMzAzLCAxMzkyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NjI0MCwgMCwgMCwgMCwgMCwgMCwgMzAzLCAwLCAwLCAwLCAzMDMsIDY5NjMyLCAxMzk2ODEsIDAsIDAsIDAsIDAsIDAsIDY1NTM2LCAwLCAwLCAwLCAwLCAwLCAyNzM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDEzLCAwLCAwLCAwLCAwLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAwLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDMwMywgMSwgMTIyOTAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMCwgMywgMCwgMCwgMjE4MzE2OCwgMCwgMCwgMCwgMCwgMCwgMjk4LCAzMzM5OSwgMCwgMjEzNDAxNiwgMzAyLCA0OTc4NywgMCwgMCwgMCwgMCwgMCwgMjc2MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgMzAyMCwgNTU2LCA1NTYsIDU1NiwgNjE0NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2MCwgMzAwLCAzMDAsIDMwMCwgMTQzNjYwLCAzNzAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMTQzNjYwLCAzMDAsIDMwMCwgMTQzNjYwLCAzMDAsIDMwMCwgMzAwLCAxNDM3MzAsIDMwMCwgMzAwLCAzMDAsIDE0MzczMCwgNjk2MzIsIDczNzI4LCAzMDAsIDMwMCwgMTQzNjYwLCAzMDAsIDMwMCwgNjU1MzYsIDMwMCwgMzAwLCAwLCAwLCAzMDAsIDMwMCwgMTQzNjYwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzNjUsIDMwMCwgMCwgMTQzNjYwLCAzMDAsIDMwMCwgMzAwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDMwMCwgMzAwLCAxNDM2NjAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAxNDM3MzAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMTQzNjYwLCAzMDAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMzAwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAzMDAsIDAsIDMwMCwgMCwgMzAwLCAzMDAsIDMwMCwgMTQzNjYwLCAzMDAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM3MzAsIDE0MzY2MCwgMTQzNzMwLCAxNDM3MzAsIDE0MzczMCwgMTQzNzMwLCAxNDM3MzAsIDE0MzczMCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDE0MzY2MCwgMTQzNjYwLCAxNDM2NjAsIDEsIDEyMjkwLCAwLCAwLCAwLCAwLCAyMjAwMjQ1LCAyMjAwMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTUzLCAxMTU0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NDgsIDE1NTY0OCwgMCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMTU1NjQ4LCAxNTU2NDgsIDE1NTY0OCwgMCwgMCwgMCwgMCwgMTU1NjQ4LCAwLCAwLCAwLCAwLCAwLCAxNTU2NDgsIDE1NTY0OCwgMCwgMTU1NjQ4LCAxNTU2NDgsIDAsIDEyMjkwLCAwLCAwLCAwLCAwLCAxNTU2NDgsIDAsIDE1NTY0OCwgMCwgMCwgMCwgMCwgMCwgMTU1NjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTU3LCAzLCAwLCAwLCAyMTgzMTY4LCAxMjY5NzYsIDAsIDAsIDAsIDAsIDI5OCwgMjk5LCAwLCAyMTM0MDE2LCAzMDIsIDMwMywgMCwgMCwgMCwgMCwgMCwgMjkzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0NiwgMCwgMCwgMCwgMCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNjM4NDAsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMCwgMCwgMTU5NzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE2Mzg0MCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAxMzEwNzIsIDI1MTU1LCAwLCAwLCAwLCAxNTk3NDQsIDAsIDAsIDAsIDI1MTU1LCAyNTE1NSwgMjUxNTUsIDE1OTc0NCwgMjUxNTUsIDI1MTU1LCAyNTE1NSwgMjUxNTUsIDI1MTU1LCAyNTE1NSwgMjUxNTUsIDE1OTc0NCwgMTU5NzQ0LCAxNTk3NDQsIDE1OTc0NCwgMjUxNTUsIDE1OTc0NCwgMjUxNTUsIDEsIDEyMjkwLCAyMTI1ODI0LCAzMTE3MDU2LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAwLCAyNDU3NiwgOTc1LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMDkyNDgwLCAwLCAwLCAwLCAyNDA0MzUyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMDI2OTQ0LCAyNDA0MzUyLCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNTkyNzY4LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDQ5NDA4LCAwLCAyNTM1NDI0LCAyMTI1ODI0LCAyNjA5MTUyLCAyMTI1ODI0LCAyODU5MDA4LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAzMDMxMDQwLCAyMTI1ODI0LCAyNTI3MjMyLCAwLCAwLCAwLCAyMTc5MDcyLCAyNTI3MjMyLCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDEsIDEyMjkwLCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAwLCAwLCAxNjc5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDAsIDAsIDE1NTY0OCwgMCwgMTcyMDMyLCAxNzIwMzIsIDAsIDE3MjAzMiwgMCwgMCwgMTcyMDMyLCAxNzIwMzIsIDAsIDE3MjAzMiwgMCwgMCwgMCwgMCwgMTcyMDMyLCAxNzIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MjAzMiwgMCwgMCwgMCwgMTcyMDMyLCAxNzIwMzIsIDAsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMjkyLCAwLCAwLCAwLCAwLCAxLCAyODgsIDMsIDAsIDAsIDAsIDI5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDEsIDAsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDAsIDAsIDE3NjEyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMjkyLCAwLCAwLCAwLCAzNDcsIDMsIDc4MTE0LCA3ODExNCwgMjkyLCAwLCA2MjcsIDAsIDAsIDAsIDI5OCwgMjk5LCAwLCAyMTM0MDE2LCAzMDIsIDMwMywgMCwgMCwgMCwgMCwgMCwgMjk0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1NzYwLCAwLCAwLCAwLCAwLCA3ODExNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjcyLCAwLCAxMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2NDgsIDAsIDAsIDAsIDAsIDExNDYsIDAsIDAsIDAsIDAsIDExNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0NiwgMCwgNDA0LCAwLCAwLCAwLCAwLCAwLCA0MDQsIDAsIDAsIDAsIDIwOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MTcsIDAsIDAsIDUzNCwgMjEzNSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNDcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NzUsIDUzNCwgNTM0LCA1MzQsIDE3ODAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjU0NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMjU0OSwgMjIyMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyMzIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1OTAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1OTgsIDU1NiwgNTU2LCAyMzA3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMxOSwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMjAwNiwgMCwgMTA2OSwgMCwgMCwgMCwgMjAwOCwgMCwgMTA3MywgMCwgMjU3MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzk2LCAwLCAwLCAyOTU1LCAwLCAwLCAwLCAyOTU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzEsIDAsIDAsIDM3MiwgMCwgMCwgMCwgNTM0LCAzMTUwLCA1MzQsIDUzNCwgNTM0LCAzMTUzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1NDcsIDUzNCwgNTM0LCA1MzQsIDAsIDAsIDMxNjEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDMyMDYsIDU4MCwgNTgwLCA1ODAsIDMyMDksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjc5LCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDU4MCwgNTgwLCAzMjE3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTgwLCA1ODAsIDMzMDksIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxMCwgMzMxMSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI4NzUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDcxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIzMywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCAxOTkzLCA1MzQsIDUzNCwgNTM0LCAxOTk3LCA1NTYsIDU1NiwgNTU2LCAyMDAxLCA1MzQsIDUzNCwgNTM0LCAzMzM5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMzQ1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgMzQwNywgNTU2LCAzNDA5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM3MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzY0LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMzNzAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMzNzYsIDU4MCwgNTgwLCA1ODAsIDMzODAsIDU4MCwgNTM0LCA1NTYsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNSwgMCwgMCwgMCwgMCwgMCwgMzEzMiwgMCwgMCwgMCwgMCwgMzM5MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxOTgsIDUzNCwgMjIwMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzQwNiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwMDksIDEzNDEsIDk3NSwgNTgwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM0MjIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDQ5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM1MjIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzU4NSwgNTM0LCA1NTYsIDU1NiwgMywgNzgxMTQsIDc4MTE0LCAyOTIsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMjk5LCAwLCAyMTM0MDE2LCAzMDIsIDMwMywgMCwgMCwgMCwgMCwgMCwgMjk3MywgMCwgMCwgMjk3NSwgMCwgMCwgNTM0LCA1MzQsIDI5ODAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MzIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc5MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDAsIDAsIDMwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczMiwgMCwgMCwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAwLCAxOTI5NjUsIDAsIDEsIDEyMjkwLCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAwLCAwLCAxOTI5NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMCwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTY2MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1ODIsIDAsIDAsIDAsIDMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI3LCA0MDYsIDQwNiwgNDA2LCA0MDYsIDQwNiwgNDA2LCAwLCAwLCAwLCAwLCAwLCA0MDYsIDAsIDQwNiwgMSwgMTIyOTAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExODc4NCwgMjk4LCAzLCA3ODExNCwgNzgxMTQsIDI5MiwgMCwgMCwgMCwgMCwgMCwgMjk4LCAyOTksIDAsIDMwMSwgMzAyLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDMxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NzgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgMCwgMCwgNzMzLCA0MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDAsIDAsIDAsIDAsIDEyNDQsIDAsIDAsIDExNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NzEyOTYsIDAsIDAsIDExNzEsIDExNzEsIDAsIDAsIDAsIDExNzUsIDE2NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMjUzOTUyLCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCAxNTQwLCAyMDA1LCAwLCAwLCAwLCAwLCAxNTQ2LCAyMDA3LCAwLCAwLCAwLCAwLCAxNTUyLCAwLCAwLCAwLCAxNTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDUsIDAsIDAsIDAsIDAsIDAsIDIwMDksIDAsIDAsIDAsIDAsIDE1NTgsIDIwMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNiwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTQ5LCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MTAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAzMDYsIDAsIDMwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTU1MDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzA1LCAwLCAwLCAwLCAwLCAwLCAyMDQ4MDAsIDIwNDgwMCwgMCwgMjA0ODAwLCAyMDQ4MDAsIDIwNDgwMCwgMjA0ODAwLCAyMDQ4MDAsIDIwNDgwMCwgMjA0ODAwLCAyMDQ4MDAsIDIwNDgwMCwgMjA0ODAwLCAyMDQ4MDAsIDIwNDgwMCwgMjA0ODAwLCAyMDQ4MDAsIDIwNTEwNiwgMjA0ODAwLCAyMDQ4MDAsIDIwNTEwNSwgMjA1MTA2LCAyMDQ4MDAsIDIwNTEwNSwgMjA1MTA1LCAyMDQ4MDAsIDIwNDgwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAyOTksIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDIxODM3OTQsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMjk5LCAxNTE1NTIsIDIxMzQwMTYsIDMwMiwgMzAzLCAwLCAwLCAwLCAwLCAwLCAxNTU2NDgsIDE1NTY0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU1LCAyMTI5OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NywgMCwgMTUxNTUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODY3MjAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDAsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDMwMzYxMTAsIDIxMjY3OTgsIDIxMjY3OTgsIDMwNzI5NzQsIDIxMjY3OTgsIDIxMjY3OTgsIDIxMjY3OTgsIDMxMjIxMjYsIDI3MDAxNjQsIDIxMjY3MjQsIDI3MTY1NDgsIDIxMjY3MjQsIDI3MjQ3NDAsIDIxMjY3MjQsIDI3MzI5MzIsIDI3NzM4OTIsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDI4MDY2NjAsIDIxMjY3MjQsIDI4MzEyMzYsIDIxMjY3MjQsIDIxMjY3MjQsIDk3MywgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjg2NDAwNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjkyMTM0OCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjYyNjQzNiwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMzExNzk1NiwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMCwgMCwgOTc1LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMjI0NTI2LCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAwLCAyNDg2MjcyLCAwLCAwLCAwLCAwLCAwLCAyNjc4Nzg0LCAyODU0OTEyLCAzMDA2NDY0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjI2NTEwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNzAwMjM4LCAyMTI2Nzk4LCAyNzE2NjIyLCAyMTI2Nzk4LCAyNzI0ODE0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDU0NDc4LCAyMTI2Nzk4LCAyNDc0OTU4LCAyNDgzMTUwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTMyMzAyLCAyNzMzMDA2LCAyNzczOTY2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyODA2NzM0LCAyMTI2Nzk4LCAyODMxMzEwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyODY0MDc4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTIxNDIyLCAyMTI2NzI0LCAyNDA5MzQ4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyODE0ODUyLCAyMTI2NzI0LCAyODM5NDI4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTI2MTQ4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTg1NTUwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjE4MzE4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjYzMzc0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMjA3MTY4LCAyMTc5MDcyLCAwLCAwLCAwLCAwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTUyNzA4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNjM4NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNzIwNjQ0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNzY5Nzk2LCAyNzc3OTg4LCAyNzgyMDg0LCAyNzk4NDY4LCAyODIzMDQ0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyODg0NDg0LCAyMTI2NzI0LCAyOTEzMTU2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDQwMTMyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNzI4ODM2LCAyNzUzNDEyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyODQzNTI0LCAyODQ3NjIwLCAyMTI2NzI0LCAyODk2NzcyLCAyOTE3MjUyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTUwNzI0LCAyMTI2Nzk4LCAyNDI5OTAyLCAyNDM4MDk0LCAyMTI2Nzk4LCAyNDg3MjQ2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTI5NjE0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTk5MjQ2LCAyMTI2Nzk4LCAzMDY0NzA4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTAxNTcyLCAyMTI2NzI0LCAyMTI2NzI0LCAzMTM0MzQwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTg1NDc2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNjE4MjQ0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2Nzk4LCAyNzIwNzE4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNzY5ODcwLCAyNzc4MDYyLCAyNzgyMTU4LCAyNzk4NTQyLCAyODIzMTE4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyODg0NTU4LCAyMTI2Nzk4LCAyOTEzMjMwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMDQwMjA2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjAxOTM0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjQyODk0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjA2MDMwLCAyMTI2Nzk4LCAyNjMwNjA2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjUxMDg2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMDY0NzgyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTAxNjQ2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTM0NDE0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAwLCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyNDU3NjAwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNDU4NTAwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMjA4MTQyLCAyMTI2Nzk4LCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDExNDYwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTAzNjMwLCAwLCAwLCAwLCAwLCAyMzg4ODY4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNDIxNjM2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNDU0NDA0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDI3ODQ0LCAyNDA1MzI2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMDI3OTE4LCAyNTM5NTIwLCAwLCAyOTQ5MTIwLCAyMTc5MDcyLCAyNjU4MzA0LCAyOTczNjk2LCAyNDc0ODg0LCAyNDgzMDc2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTMyMjI4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNjAxODYwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNjQyODIwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNjU1MTA4LCAyNjc5Njg0LCAyNzYxNjA0LCAyNzY1NzAwLCAyNzg2MTgwLCAyODU1ODEyLCAyOTcwNTAwLCAyMTI2NzI0LCAzMDA3MzY0LCAyMTI2NzI0LCAzMDE5NjUyLCAyNjA1OTU2LCAyMTI2NzI0LCAyNjMwNTMyLCAyMTI2NzI0LCAyMTI2NzI0LCAyNjUxMDEyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNzA4MzU2LCAyMTI2NzI0LCAyNzM3MDI4LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNDYyNTk2LCAyNDY2NjkyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTI0MDM2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDM2MDM2LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDcyOTAwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTIyMDUyLCAyMTI2NzI0LCAyMTI2NzI0LCAzMTQyNTMyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTcxMjA0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTkxNjg0LCAzMTk1NzgwLCAyMTI2NzI0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzg4OTQyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDIxNzEwLCAyNzA4NDMwLCAyMTI2Nzk4LCAyNzM3MTAyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyODg4NjU0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTI1NTE4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyODAyNjM4LCAyODE0OTI2LCAyMTI2Nzk4LCAyODM5NTAyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTQyNjA2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTcxMjc4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTkxNzU4LCAzMTk1ODU0LCAyMTI2Nzk4LCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTc5MDcyLCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTc5MDcyLCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTc5MDcyLCAyMTI2NzI0LCAyMTI2Nzk4LCAyOTg1OTg0LCAyOTg2ODg0LCAyOTg2OTU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDMxNSwgMzE2LCAzMTYsIDQyMSwgNDIyLCA2NTUzNiwgNDI5LCAyMTc5MDcyLCAzMTEyOTYwLCAzMjE5NDU2LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTEzODYwLCAzMjIwMzU2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTEzOTM0LCAzMjIwNDMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMjIzNTUyLCAwLCAwLCAyMTI2NzI0LCAyMTI2NzI0LCAyNDE3NTQwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNDQ2MjEyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyODg4NTgwLCAyMTI2NzI0LCAyMTI2NzI0LCAyOTI1NDQ0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAwLCAwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDA5NDIyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTQ1OTI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyOTk1MDc2LCAyMTI2NzI0LCAzMDAzMjY4LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDIzNzQ4LCAyMTI2NzI0LCAzMDY4ODA0LCAzMDg1MTg4LCAyMTI2NzI0LCAzMDk3NDc2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTE5OTQwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTg5NTcyLCAyMTI2NzI0LCAyNjE0MTQ4LCAyNjQ2OTE2LCAyMTI2NzI0LCAyMTI2NzI0LCAyNjk2MDY4LCAyNzU3NTA4LCAyNjM4Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNzI4OTEwLCAyNzUzNDg2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyODQzNTk4LCAyODQ3Njk0LCAyMTI2Nzk4LCAyODk2ODQ2LCAyOTE3MzI2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTQ1OTk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTk1MTUwLCAyMTI2Nzk4LCAzMDAzMzQyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMDIzODIyLCAyMTI2Nzk4LCAzMDY4ODc4LCAzMDg1MjYyLCAyMTI2Nzk4LCAzMDk3NTUwLCAyMTc5MDcyLCAyMTc5MDcyLCAzMDU5NzEyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTc4NDk2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMjI0NDUyLCAwLCAwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDE3NjE0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDQ2Mjg2LCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTI2NzI0LCAzMDYwNjEyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTc5Mzk2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTI2MjIyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTE4MDMwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDk1NDM4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTE1OTE4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTQ0NTkwLCAyNTQ4Njg2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTk3ODM4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDI1ODA2LCAyNDMzOTk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAwLCAwLCAwLCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMDYwNjg2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTc5NDcwLCAyMTc5MDcyLCAyMTI2Nzk4LCAyMTI2NzI0LCAyMTc5MDcyLCAyMTI2NzI0LCAyNjU5MjA0LCAyOTc0NTk2LCAyMTI2NzI0LCAyMTI2Nzk4LCAyNjU5Mjc4LCAyOTc0NjcwLCAyMTI2Nzk4LCAyNzExNTUyLCAyNTYwMDAwLCAyMTc5MDcyLCAyNTYwOTAwLCAyMTI2NzI0LCAyNTYwOTc0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDYyNjcwLCAyNDY2NzY2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTI0MTEwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDczOTg0LCAyNDc4MDgwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTI5MzQ0LCAyMTc5MDcyLCAyMTc5MDcyLCAzMTUzOTIwLCAzMTY2MjA4LCAzMTc0NDAwLCAyMzk3MDYwLCAyNDAxMTU2LCAyMTI2NzI0LCAyMTI2NzI0LCAyNDQyMTE2LCAyMTI2NzI0LCAyNDcwNzg4LCAzMTU0ODIwLCAzMTY3MTA4LCAzMTc1MzAwLCAyMzk3MTM0LCAyNDAxMjMwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDQyMTkwLCAyMTI2Nzk4LCAyNDcwODYyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTIwMDE0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTMwMzE4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMTU0ODk0LCAzMTY3MTgyLCAzMTc1Mzc0LCAyNTA2NzUyLCAyNTA3NzI2LCAyNTA3NjUyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTg5NjQ2LCAyMTI2Nzk4LCAyNjE0MjIyLCAyNjQ2OTkwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjk2MTQyLCAyNzU3NTgyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyOTMzNzEwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTkzNzQyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDQ5NDA4LCAwLCAyNTM1NDI0LCAyMTc5MDcyLCAzMDA2NDY0LCAyMTc5MDcyLCAzMDE4NzUyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTQ5ODI0LCAyMTI2NzI0LCAyNDI5ODI4LCAyNDM4MDIwLCAyMTI2NzI0LCAyNDg3MTcyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyOTMzNjM2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTMwMjQ0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNjU1MTgyLCAyNjc5NzU4LCAyNzYxNjc4LCAyNzY1Nzc0LCAyNzg2MjU0LCAyODU1ODg2LCAyOTcwNTc0LCAyMTI2Nzk4LCAzMDA3NDM4LCAyMTI2Nzk4LCAzMDE5NzI2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAwLCAyNTAyNjU2LCAwLCAwLCAzMDEwNTYwLCAwLCAwLCAwLCAwLCAyOTkwMDgwLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTI2Nzk4LCAzMTUwNzk4LCAyMTc5MDcyLCAzMDUxNTIwLCAyMTI2NzI0LCAzMDUyNDIwLCAyMTI2Nzk4LCAzMDUyNDk0LCAwLCAyNDkwMzY4LCAyNDk4NTYwLCAwLCAwLCAwLCAwLCAyODc1MzkyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyNTU1OTA0LCAyNTY0MDk2LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMTM3NTM2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMjA4MDY4LCAyMTI2NzI0LCAwLCAwLCAwLCAwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTUyNzgyLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2NzI0LCAyNDk5NDYwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyNTU2ODA0LCAyNTY0OTk2LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyOTI5NTQwLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAyOTk5MTcyLCAyMTI2NzI0LCAyMTI2NzI0LCAyMTI2NzI0LCAzMTM4NDM2LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNDk5NTM0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyNTU2ODc4LCAyNTY1MDcwLCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAzMDExNTM0LCAyMTI2Nzk4LCAyMTI2Nzk4LCAyMTI2Nzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIsIDMyMywgMCwgMjEyNjcyNCwgMjQ1MDMwOCwgMjEyNjcyNCwgMjUzNjMyNCwgMjEyNjcyNCwgMjYxMDA1MiwgMjEyNjcyNCwgMjg1OTkwOCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMzAzMTk0MCwgMjEyNjcyNCwgMjEyNjc5OCwgMjQ1MDM4MiwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMzA5MzQ1NCwgMCwgMCwgMCwgMjQwNDM1MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMzAyNjk0NCwgMjQwNTI1MiwgMjEyNjcyNCwgMjEyNjcyNCwgMjQ5NTM2NCwgMjEyNjcyNCwgMjEyNjcyNCwgMjUxNTg0NCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjU0NDUxNiwgMjU0ODYxMiwgMjEyNjcyNCwgMjEyNjcyNCwgMjU5Nzc2NCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjY2MzMwMCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjgwMjU2NCwgMjUzNjM5OCwgMjEyNjc5OCwgMjYxMDEyNiwgMjEyNjc5OCwgMjg1OTk4MiwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMzAzMjAxNCwgMjEyNjc5OCwgMjUyNzIzMiwgMCwgMCwgMCwgMjE3OTA3MiwgMjUyNzIzMiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjE3OTA3MiwgMjEyNjcyNCwgMjUyODEzMiwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMjEyNjcyNCwgMzA5MzM4MCwgMjEyNjc5OCwgMjUyODIwNiwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMjEyNjc5OCwgMzEzODUxMCwgMjk0MDkyOCwgMjk0MTgyOCwgMjk0MTkwMiwgMCwgMCwgMCwgMCwgMCwgMjc0ODQxNiwgMjg3OTQ4OCwgMCwgMCwgMCwgMCwgMCwgMTcyMDMyLCAwLCAxNzIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMCwgMTIyODgwLCAxMjI4ODAsIDAsIDAsIDAsIDIyMTE4NCwgMjIxMTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjExODQsIDIyMTE4NCwgMCwgMCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0LCAwLCAwLCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDMzOCwgMjkyLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjExODQsIDAsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMjIxMTg0LCAyMjExODQsIDIyMTE4NCwgMSwgMTIyOTAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOTI2NCwgMjk5LCAwLCAwLCAyMTQyMjA4LCAwLCAwLCAwLCA5ODMwNCwgMCwgMCwgMCwgNTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNjEsIDIwNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1OTc0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU3OCwgMCwgMCwgMCwgNTc3NTM2LCAwLCAwLCAxNTgzLCAwLCAwLCAwLCAzMDIsIDAsIDMwMywgMCwgMCwgMCwgMzAzLCAwLCAwLCAwLCAyNDYxNjk2LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTU5MTY4LCA0MTYsIDQxNiwgMCwgMCwgMCwgMCwgMCwgNDE2LCAwLCAwLCA5ODMwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMTIyOTAsIDIxNzkwNzIsIDMxMjExNTIsIDIxNzkwNzIsIDIxNzkwNzIsIDMxNDE2MzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDMxNzAzMDQsIDIxNzkwNzIsIDIxNzkwNzIsIDMxOTA3ODQsIDMxOTQ4ODAsIDIxNzkwNzIsIDkwMSwgMCwgMCwgMCwgMCwgMCwgMjI5Mzc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjY2LCAwLCAwLCAwLCAwLCAwLCAyOTU4LCAwLCAwLCAwLCAwLCAyOTYyLCAwLCAwLCAwLCAwLCAyOTY3LCAwLCAwLCA5MDEsIDAsIDIzODc5NjgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0MjA3MzYsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0NTM1MDQsIDIxMjU4MjQsIDI0NzM5ODQsIDI0ODIxNzYsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI1MzEzMjgsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMxOTA3ODQsIDMxOTQ4ODAsIDIxMjU4MjQsIDk3NSwgMCwgMCwgMCwgOTc1LCAwLCAyMzg3OTY4LCAyMTI1ODI0LCAyMTI1ODI0LCAyMTI1ODI0LCAyNDIwNzM2LCAyMTc5MDcyLCAyMTc5MDcyLCAyMTc5MDcyLCAzMjIzNTUyLCA5MDEsIDAsIDIxMjU4MjQsIDIxMjU4MjQsIDI0MTY2NDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0NDUzMTIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMyMjM1NTIsIDAsIDAsIDIxMjU4MjQsIDIxMjU4MjQsIDI0MTY2NDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDI0NDUzMTIsIDIxMjU4MjQsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNzA4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA3LCAzMDgsIDAsIDAsIDAsIDExNDY4OCwgMCwgMjQxNjY0LCAyNTgwNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3NiwgNjc3LCA2NzgsIDAsIDAsIDAsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzg2LCAwLCAwLCAwLCAwLCAwLCAzODYsIDAsIDAsIDAsIDIxODMxNjgsIDAsIDAsIDI3MDMzNiwgMCwgMCwgMjk4LCAyOTksIDAsIDIxMzQwMTYsIDMwMiwgMzAzLCAyMDA3MDQsIDAsIDAsIDE4MDIyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQyNDgzMiwgMjQzMzAyNCwgMCwgMCwgMjQ1NzYwMCwgMjA0ODAsIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDIxMjY3MjQsIDEsIDEyMjkwLCAyMTEzODI1LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTUsIDAsIDAsIDAsIDI5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMjM4Nzk2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwLCAzODEsIDM4MywgMCwgMCwgMCwgMCwgMCwgMjY2MjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjYyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEyMjkwLCAwLCAwLCAyNjYyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzOCwgMzM5LCAzNDAsIDIxMTM4MjUsIDAsIDAsIDIxODMxNjgsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMjk5LCAwLCAyMTM0MDE2LCAzMDIsIDMwMywgMCwgMCwgMCwgMCwgMCwgMjM3NTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjU3LCAwLCAwLCAwLCAwLCAyNzQ0MzIsIDI3NDQzMiwgMjc0NDMyLCAyNzQ0MzIsIDI3NDQzMiwgMjc0NDMyLCAwLCAwLCAwLCAwLCAwLCAyNzQ0MzIsIDAsIDI3NDQzMiwgMSwgMTIyOTAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwNDA4LCA5MDQwOCwgOTA0MDgsIDkwNDA4LCAwLCA5NDUwNSwgMSwgMTIyOTAsIDMsIDc4MTE0LCAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTEsIDAsIDAsIDAsIDMsIDc4MTE0LCA3ODExNCwgMjkyLCAwLCAwLCAwLCAwLCAwLCAyOTgsIDI5OSwgMCwgMCwgMzAyLCAzMDMsIDAsIDAsIDAsIDAsIDAsIDIxMzQwMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjMyNjQsIDc4MTE0LCAxMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDgsIDMwNywgNTM0LCA1MzQsIDUzNCwgMTM0MSwgOTAxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDMwNjIsIDU4MCwgNTgwLCAyMDA5LCAwLCAwLCAwLCAwLCAwLCAyMDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMCwgMCwgMCwgMTY1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA4NiwgMCwgMCwgMCwgMCwgMCwgMjA5MiwgMCwgMCwgMjkwLCAxMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODAsIDY4MSwgMywgNzgxMTQsIDc4NDQ5LCAyOTIsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMjk5LCAwLCAwLCAzMDIsIDMwMywgMCwgMCwgMCwgMCwgMCwgMjEzNDAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODY4OCwgMCwgMCwgMCwgMCwgMCwgMjEzNDAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMTUwOTc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODUsIDMzNywgMCwgNTgxLCA1NTcsIDU1NywgNTU3LCA1NTcsIDU1NywgNTU3LCA1NTcsIDU4MSwgNTgxLCA1ODEsIDUzNCwgNTgxLCA1ODEsIDU4MSwgNTgxLCA1ODEsIDU4MSwgNTgxLCA1NTcsIDU1NywgNTM0LCA1NTcsIDU4MSwgNTU3LCA1ODEsIDEsIDEyMjkwLCAxLCAxMjI5MCwgMywgNzgxMTUsIDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4MCwgMCwgMCwgMCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAxLCAxMjI5MCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMCwgMCwgMjgyNjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDAsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0MSwgMCwgMCwgMCwgMCwgMCwgMzA0NzQyNCwgMzEyOTM0NCwgMCwgMjk4MTg4OCwgMjM5NjE2MCwgMCwgMzE1MzkyMCwgMzEzMiwgMCwgMCwgMjc0MDIyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4MSwgMTE4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYwOCwgMTYwOSwgMTYxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg2NzIwLCAyODY3MjAsIDAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDI4NjcyMCwgMjg2NzIwLCAyODY3MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwNSwgMCwgMCwgMCwgNzA5LCAwLCAwLCAwLCAzMTA4ODY0LCAzMTk4OTc2LCAwLCAwLCAzMDQzMzI4LCAwLCAzMTQ5ODI0LCAyOTM2ODMyLCAwLCAyNzYwNzA0LCAzMjUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDE2NzkzNiwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDAsIDAsIDAsIDMzMjksIDAsIDAsIDI4MzQ0MzIsIDAsIDMyMjc2NDgsIDI1NjgxOTIsIDI1NjQwOTYsIDAsIDI5NDA5MjgsIDIxNzkwNzIsIDIxNzkwNzIsIDI0OTg1NjAsIDMzMjksIDAsIDAsIDAsIDAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjU4MjQsIDAsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDAsIDAsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMzA3LCAwLCAzMDcsIDMwOCwgMCwgMzA3LCAzMDcsIDAsIDAsIDAsIDMwNywgMzA3LCAzMDgsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA3LCA0MDcsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgzLCAwLCAwLCAwLCAzMDgsIDQxMiwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgMCwgMCwgMjEzNDAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTczNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzksIDAsIDAsIDAsIDAsIDAsIDQ1NiwgNDU2LCA0NTYsIDQ4MiwgNDgyLCA0NTYsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNTA3LCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNTI3LCA0ODIsIDQ4MiwgNDgyLCA0ODIsIDQ4MiwgNTM1LCA1NTgsIDUzNSwgNTU4LCA1MzUsIDUzNSwgNTU4LCA1MzUsIDU4MiwgNTU4LCA1NTgsIDU1OCwgNTU4LCA1NTgsIDU1OCwgNTU4LCA1ODIsIDU4MiwgNTgyLCA1MzUsIDU4MiwgNTgyLCA1ODIsIDU4MiwgNTgyLCA1ODIsIDU4MiwgNTU4LCA1NTgsIDUzNSwgNTU4LCA1ODIsIDU1OCwgNTgyLCAxLCAxMjI5MCwgMCwgNjY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjksIDAsIDY5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYwLCAxNjYxLCAwLCAxNjYzLCAwLCAwLCAwLCAwLCAwLCA3MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgzNDQzMiwgMCwgMzIyNzY0OCwgMjU2ODE5MiwgMjU2NDA5NiwgMCwgMjk0MDkyOCwgMjE3OTA3MiwgMjE3OTA3MiwgMjQ5ODU2MCwgMCwgMCwgMCwgNjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTUsIDAsIDAsIDAsIDAsIDAsIDIxMzQ3NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNjksIDczNCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxLCAwLCAwLCA3NjUsIDAsIDAsIDAsIDAsIDc3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAxNzIwMzIsIDAsIDAsIDAsIDAsIDY1NTM2LCAwLCAwLCAwLCA2NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNCwgMCwgMCwgMCwgNzgwLCAwLCAwLCAwLCAwLCAwLCAzMjcsIDAsIDY5NjMyLCA3MzcyOCwgMCwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDAsIDAsIDgyMSwgNzc2LCAwLCAwLCAwLCAwLCAwLCA4MjUsIDgyNiwgNzc2LCA3NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY3NywgMCwgMTY3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzc2LCA3MjksIDc3NiwgMCwgNTM0LCA1MzQsIDgzNiwgODQwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4NjYsIDUzNCwgODcxLCA1MzQsIDg3OCwgNTM0LCA4ODEsIDUzNCwgNTM0LCA4OTUsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA5MDksIDkxMywgMTAxOCwgNTgwLCAxMDI1LCA1ODAsIDEwMjgsIDU4MCwgNTgwLCAxMDQyLCA1ODAsIDU4MCwgMCwgMCwgMCwgODQwLCA5ODcsIDkxMywgODM2LCAxMDUyLCA4ODEsIDUzNCwgNTM0LCA5MDksIDEwNTcsIDk1NCwgNTU2LCA1NTYsIDAsIDk4MywgMTA2MiwgMTAyOCwgNTgwLCA1ODAsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MTE0LCAxMDY2LCAwLCAwLCAxMDY4LCAxMDcyLCAwLCAwLCAxMDc2LCAxMDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDYsIDQwNiwgNDA2LCA0MDYsIDAsIDQwNiwgNDA2LCA0MDYsIDQwNiwgMCwgMCwgMTE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA4LCA1MTUsIDUxNSwgMCwgMCwgMCwgMTYzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyNiwgMCwgMCwgMTc2OSwgNTM0LCA1MzQsIDE3NzIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc4NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg4NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA5MDMsIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgNTgwLCA5ODQsIDU4MCwgOTkwLCA1ODAsIDU4MCwgMTAwMywgNTgwLCA1ODAsIDEwMTQsIDU4MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzg5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzNDEsIDE3OTksIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCAxODA2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTgxMiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM3MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTU2LCA1NTYsIDU1NiwgMTgyNSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgOTU1LCA1NTYsIDU1NiwgNTU2LCAxODg1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAxODk1LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTkwMiwgMjAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg3LCAwLCAwLCAwLCAyMDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjIzLCAwLCAwLCAwLCAwLCAwLCAyMTA5LCAyMTEwLCAwLCAwLCAyMTEyLCAwLCAwLCAwLCAyMTEwLCAwLCAwLCAyMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDIyMTE4NCwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDIxNTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMTMsIDAsIDAsIDAsIDI0NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMzUsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUwMiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUxMCwgNTM0LCA1MzQsIDUzNCwgMjYwMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU2MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzg4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzOTMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYzMiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTY3LCAwLCAwLCAwLCAyNjk4LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzQ5LCAyNzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NjIsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTIxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc3MywgNTM0LCA1MzQsIDI3NzcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc4NiwgNTU2LCAyODIwLCA1NTYsIDU1NiwgMjgyNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODMzLCA1ODAsIDU4MCwgNTgwLCAyODY5LCA1ODAsIDU4MCwgMjg3MywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyODk5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyODgyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg5MCwgNTgwLCA1ODAsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDMzMjQsIDAsIDAsIDAsIDAsIDAsIDM0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxMTg0LCAwLCAyMjExODQsIDAsIDAsIDAsIDAsIDI5MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMwMTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNDEyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDUxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA5MSwgNTgwLCAzMDkzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU4MCwgMzEzMiwgMzM4NywgMCwgMzM4OSwgMCwgNTM0LCAzMzkyLCA1MzQsIDMzOTQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzc3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE1NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxODIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE4NywgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNDQ4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDIzLCA1NTYsIDM0NjEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMwNjQsIDU4MCwgMzQ3NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDM1NjEsIDUzNCwgMCwgMzQ5MCwgMCwgMzQ5MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzk0LCA1MzQsIDUzNCwgMCwgMCwgMzUzMywgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI4MSwgMzA5LCAzMTAsIDMxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQwLCAwLCAwLCAwLCAwLCA0MjAsIDAsIDAsIDAsIDAsIDQ0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwOSwgMCwgMTExMSwgMTExMiwgMCwgMCwgMCwgMCwgMCwgMCwgNDQzLCA0NDMsIDQyMCwgNDQzLCA0NDMsIDQ0MywgNDQzLCA0NDMsIDQ0MywgNDQzLCA0NDMsIDQ0MywgNDQzLCA0NDMsIDQ0MywgNDQzLCA1MjYsIDQ0MywgNTI2LCA1MjYsIDUyNiwgNDQzLCA1MjYsIDUyNiwgNTI2LCA1MjYsIDQ0MywgNTM2LCA1NTksIDUzNiwgNTU5LCA1MzYsIDUzNiwgNTU5LCA1MzYsIDU4MywgNTU5LCA1NTksIDU1OSwgNTU5LCA1NTksIDU1OSwgNTU5LCA1ODMsIDU4MywgNTgzLCA1MzYsIDU4MywgNTgzLCA1ODMsIDU4MywgNTgzLCA1ODMsIDU4MywgNTU5LCA1NTksIDYwOSwgNjE0LCA1ODMsIDYxNCwgNjIwLCAxLCAxMjI5MCwgNTM0LCA1MzQsIDg3NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDIxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgNTM0LCA1ODAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0NDUsIDUzNCwgMCwgMCwgMCwgMTY1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI2MiwgNTM0LCA1MzQsIDE3ODUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCAwLCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTAwNiwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMTU0NCwgMCwgMCwgMCwgMCwgMCwgMTU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgMTY3OTM2LCAxNjc5MzYsIDE2NzkzNiwgNTgwLCA1ODAsIDE5NzAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTc3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NDQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDU2LCA1ODAsIDU4MCwgMCwgMCwgMjQyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU0LCAwLCAwLCAyNjEyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDI2MTUsIDAsIDAsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU1NiwgNTgwLCAwLCAzMzgyLCAwLCAwLCAzMzg1LCAwLCAwLCAwLCA1ODAsIDI2MjEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjYyNSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMjIxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMzEyLCAzMTMsIDMxNCwgMzE1LCAzMTYsIDMxNywgMzE4LCAzMTksIDMyMCwgMzIxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODUwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTcyLCAwLCAwLCAwLCAzMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NSwgMCwgMCwgNDIyLCA0MzAsIDQyMSwgNDMwLCAwLCAzMTIsIDQzMCwgNDQ0LCA0NTcsIDQ1NywgNDU3LCA0NTcsIDQ1NywgNDU3LCA0NTcsIDQ1NywgNDU3LCA0NTcsIDQ1NywgNDU3LCA0NTcsIDQ1NywgNDU3LCA0NTcsIDQ1NywgNDU3LCA0NzgsIDQ4MywgNDgzLCA0OTQsIDQ4MywgNDgzLCA0ODMsIDQ4MywgNDgzLCA0ODMsIDQ4MywgNDgzLCA1MDksIDUwOSwgNTIyLCA1MjIsIDUyMywgNTIzLCA1MjMsIDUyMywgNTIzLCA1MjMsIDUyMywgNTIzLCA1MjMsIDUyMywgNTIzLCA1MDksIDUyMywgNTIzLCA1MjMsIDUyMywgNTIzLCA1MzcsIDU2MCwgNTM3LCA1NjAsIDUzNywgNTM3LCA1NjAsIDUzNywgNTg0LCA1NjAsIDU2MCwgNTYwLCA1NjAsIDU2MCwgNTYwLCA1NjAsIDU4NCwgNTg0LCA1ODQsIDYwNiwgNTg0LCA1ODQsIDU4NCwgNTg0LCA1ODQsIDU4NCwgNjA3LCA2MDgsIDYwOCwgNjA2LCA2MDgsIDYwNywgNjA4LCA2MDcsIDEsIDEyMjkwLCAwLCAwLCA4MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3OSwgMCwgMCwgMCwgNjk1LCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzIwLCA1MzQsIDUzNCwgODgyLCA1MzQsIDUzNCwgNTU2LCA1NTYsIDk1NSwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCAxMDI5LCA1ODAsIDU4MCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1ODAsIDU4MCwgMCwgMCwgMCwgMzMyMiwgMCwgMCwgMzMyNSwgMCwgMCwgMCwgMCwgMTE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ5ODU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM0NTkyLCAwLCAwLCAwLCAwLCAwLCAxMjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE4LCAwLCAwLCA1MzQsIDUzNCwgMTI1NCwgNTM0LCAxMjU3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI3MSwgNTM0LCAxMjc2LCA1MzQsIDUzNCwgMTI4MCwgNTM0LCA1MzQsIDEyODMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI5NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzNDEsIDkwMSwgNTU2LCA1NTYsIDEzNDUsIDU1NiwgNTU2LCAxMzQ5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMCwgMCwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDM1ODAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzYzLCA1NTYsIDEzNjgsIDU1NiwgNTU2LCAxMzcyLCA1NTYsIDU1NiwgMTM3NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDIyOTYsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM1NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzYwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0MzcsIDU4MCwgNTgwLCAxNDQxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ1NSwgNTgwLCAxNDYwLCA1ODAsIDU4MCwgMTQ2NCwgNTgwLCA1ODAsIDE0NjcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMTg4NDE2LCA1MzQsIDU4MCwgNTU2LCAxNjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNjc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTk5LCAxMjAwLCAwLCAwLCAwLCAwLCAwLCA1ODAsIDE5MjMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDU5LCA1ODAsIDU4MCwgMTkzNiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MTksIDU4MCwgNTM0LCAyMTc2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTkyLCAyMTkzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzAyMiwgNTU2LCAyMjYyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODE5LCA1NTYsIDU1NiwgNTU2LCAyMjc4LCAyMjc5LCAyMjgwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4NDYsIDU1NiwgNTU2LCA1NTYsIDE4NTEsIDU1NiwgMjM0OSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk4NSwgNTgwLCA1ODAsIDU4MCwgMjM2NSwgMjM2NiwgMjM2NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAzNTU4LCAwLCAzNTYwLCA1MzQsIDUzNCwgMCwgMjM5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MywgMCwgMCwgMCwgMCwgMCwgMjQ2NSwgMjQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA5MCwgMCwgMCwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgMjY2MywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgMzEwNSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI3OTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCAzMDE5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI5MTcsIDAsIDAsIDAsIDAsIDAsIDI5MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MjcsIDAsIDAsIDAsIDAsIDAsIDIyMDAyNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI5ODcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODk5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDI3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQzMiwgMjYwMDksIDEzNDEsIDk3NSwgNTgwLCAwLCAzMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTk3LCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMxNzUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM0MzgsIDAsIDM0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgMzQ0NiwgNTM0LCAzNDQ3LCA1MzQsIDUzNCwgNTM0LCAzNDUxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgMzQ1OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1ODksIDU1NiwgNTU2LCAyNTkzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjY5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM0NjAsIDU1NiwgNTU2LCA1NTYsIDM0NjQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDM0NzMsIDU4MCwgMCwgMCwgMjkyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNiwgMCwgMCwgMCwgMCwgMCwgMTE0NywgMCwgMTE0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1NTcsIDUzNCwgNTU3LCA1MzQsIDUzNCwgNTU3LCA1MzQsIDM0NzQsIDU4MCwgNTgwLCA1ODAsIDM0NzgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgMzU4MywgMzU4NCwgNTM0LCA1MzQsIDU1NiwgNTU2LCAzNTk2LCA1NTYsIDU1NiwgNTU2LCAzNTk4LCA1ODAsIDU4MCwgNTgwLCAzNjAwLCAwLCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAzMjQ0LCAwLCAwLCAwLCAwLCAwLCAzMjMsIDMyMywgMzczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjUsIDAsIDAsIDAsIDAsIDM3MywgMCwgNDMyLCA0MzgsIDAsIDQ0NSwgNDU4LCA0NTgsIDQ1OCwgNDU4LCA0NTgsIDQ1OCwgNDU4LCA0NTgsIDQ1OCwgNDU4LCA0NTgsIDQ1OCwgNDU4LCA0NTgsIDQ1OCwgNDU4LCA0NTgsIDQ1OCwgNDU4LCA0ODQsIDQ4NCwgNDk1LCA0ODQsIDQ4NCwgNDg0LCA0ODQsIDQ4NCwgNDg0LCA0ODQsIDQ4NCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MTAsIDUxMCwgNTEwLCA1MzgsIDU2MSwgNTM4LCA1NjEsIDUzOCwgNTM4LCA1NjEsIDUzOCwgNTg1LCA1NjEsIDU2MSwgNTYxLCA1NjEsIDU2MSwgNTYxLCA1NjEsIDU4NSwgNTg1LCA1ODUsIDUzOCwgNTg1LCA1ODUsIDU4NSwgNTg1LCA1ODUsIDU4NSwgNTg1LCA1NjEsIDU2MSwgNTM4LCA1NjEsIDU4NSwgNTYxLCA1ODUsIDEsIDEyMjkwLCA3ODcsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4NTksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxMzksIDUzNCwgNTM0LCAyMTQyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NjAsIDE3NjEsIDE3NjIsIDUzNCwgNTM0LCAxNzY1LCAxNzY2LCA1MzQsIDUzNCwgMTExNCwgMTExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMywgMCwgMTEwMCwgMCwgMTIzMSwgMCwgMCwgMCwgMCwgMCwgMTExNSwgMCwgMCwgMCwgMCwgMCwgMTIxNCwgMCwgMCwgMCwgMCwgMCwgMzA4ODM4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ2LCAxMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgMTI1NSwgNTM0LCA1MzQsIDUzNCwgMTM0MSwgOTAxLCA1NTYsIDU1NiwgMTM0NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzODksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzk3LCA1NTYsIDU1NiwgNTU2LCAxNDAxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4ODAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDE0MzgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTM0LCA1ODAsIDU4MCwgNTgwLCAxNDY1LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0OTEsIDU4MCwgNTgwLCAxNDc4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0ODcsIDU4MCwgNTgwLCAxNDg5LCA1ODAsIDU4MCwgNTgwLCAxNDkzLCAxNTE3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTgwLCA1MzQsIDU1NiwgNTgwLCA1MzQsIDU1NiwgNTgwLCA1MzQsIDU1NiwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDAsIDEzNTE2OCwgMTM1MTY4LCAwLCAwLCA2NTUzNiwgMTM1MTY4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4NzIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODMyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE5NjgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzNjIsIDU4MCwgNTgwLCAyMDA0LCAwLCAyMDA1LCAwLCAwLCAwLCAwLCAwLCAyMDA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDE4LCAwLCAwLCAwLCAwLCAwLCAyNDIyLCAwLCAwLCAyMDA5LCAwLCAwLCAwLCAwLCAwLCAyMDExLCAwLCAwLCAwLCAwLCAwLCAyMDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDc3LCAwLCAwLCAwLCAwLCAwLCAyMDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MjcsIDIxMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzcwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxMzcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE0MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MTgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyODAzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjk4OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMxNjUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMjcwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI4MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDI2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAxMzQxLCA5NzUsIDU4MCwgNTU2LCA1NTYsIDIyMjIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjIyNiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MDUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDIzMDksIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMxMywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzUyNywgNTgwLCA1ODAsIDU4MCwgMCwgMzUzMSwgMCwgMCwgMjQ2MiwgMCwgMCwgMCwgMCwgMCwgMjQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY0MCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgMjQ4OSwgMjQ5MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUyMiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUyOSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyOTkzLCA1MzQsIDUzNCwgMjYyMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM3NiwgMjY2MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxNiwgMjcwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMCwgMCwgMCwgMCwgMCwgMjcyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAyOCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI4MDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMwNywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI4OTEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg5NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDcxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTA0NSwgNTgwLCAwLCAwLCAwLCA1MzQsIDU4MCwgNTU2LCAzMTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzE3NiwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNTExLCA1NTYsIDM1MTMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1NTYsIDU1NiwgMzI5NywgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMzc0LCA1ODAsIDU4MCwgMzEzMiwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzM5NywgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzOTIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMjUsIDMyNiwgMzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDEsIDAsIDAsIDAsIDAsIDAsIDMyNCwgMzcyLCAzMjcsIDM3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTExMCwgMCwgMCwgMCwgMCwgMCwgMzI0LCAwLCAwLCAzNzEsIDM3MSwgNDAxLCAwLCAzMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNiwgMCwgMCwgMCwgNDQ2LCA0NTksIDQ1OSwgNDU5LCA0NTksIDQ1OSwgNDU5LCA0NTksIDQ1OSwgNDcyLCA0NTksIDQ1OSwgNDU5LCA0NTksIDQ1OSwgNDU5LCA0NTksIDQ1OSwgNDU5LCA0NTksIDQ1OSwgNDU5LCA0ODUsIDQ4NSwgNDU5LCA0ODUsIDQ4NSwgNTAwLCA1MDIsIDQ4NSwgNDg1LCA1MDAsIDQ4NSwgNTExLCA1MTEsIDUxMSwgNTExLCA1MTEsIDUxMSwgNTExLCA1MTEsIDUxMSwgNTExLCA1MTEsIDUxMSwgNTExLCA1MTEsIDUyOCwgNTExLCA1MTEsIDUxMSwgNTExLCA1MTEsIDUzOSwgNTYyLCA1MzksIDU2MiwgNTM5LCA1MzksIDU2MiwgNTM5LCA1ODYsIDU2MiwgNTYyLCA1NjIsIDU2MiwgNTYyLCA1NjIsIDU2MiwgNTg2LCA1ODYsIDU4NiwgNTM5LCA1ODYsIDU4NiwgNTg2LCA1ODYsIDU4NiwgNTg2LCA1ODYsIDU2MiwgNTYyLCA1MzksIDU2MiwgNTg2LCA1NjIsIDU4NiwgMSwgMTIyOTAsIDAsIDY1MSwgNjUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMsIDY2NCwgMCwgMCwgMCwgMCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDM2NCwgMzY0LCAwLCAwLCAwLCAwLCAwLCAzNTUsIDAsIDAsIDQ2NiwgNDY2LCA0NjYsIDQ2NiwgNDY2LCA0NjYsIDQ2NiwgNDY2LCA0NzEsIDQ2NiwgNDY2LCA0NjYsIDQ2NiwgNDY2LCA0NjYsIDQ2NiwgNDY2LCA0NjYsIDQ2NiwgNDY2LCA0NzEsIDAsIDcxMywgMCwgMCwgMCwgMCwgMCwgMCwgNzIwLCAwLCAwLCAwLCA3MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYyLCA3NjMsIDAsIDAsIDAsIDAsIDAsIDc3MSwgMCwgNzczLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTAsIDc5MywgMCwgMCwgMCwgNzkzLCA3OTMsIDc5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2NDk2LCAwLCAxMDY0OTYsIDAsIDAsIDAsIDAsIDEwNjQ5NiwgMTA2NDk2LCAwLCAwLCAwLCA3NzMsIDAsIDc4NSwgMCwgODAyLCAwLCAwLCAwLCAwLCA3OTMsIDAsIDcwMCwgMCwgMCwgMCwgMCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDEsIDAsIDgxMCwgMCwgMCwgMCwgMCwgMCwgODEwLCA4MTAsIDgxMywgMCwgMCwgMCwgNzczLCAwLCAwLCAwLCAwLCAwLCAzNzUsIDAsIDAsIDAsIDAsIDM2NywgMCwgMzg0LCAwLCAzNTAsIDAsIDAsIDAsIDAsIDgyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzcxLCAwLCAwLCAwLCAwLCAwLCAzODUsIDAsIDY5NjMyLCA3MzcyOCwgMCwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDAsIDgyMiwgODAyLCA4MjIsIDAsIDUzNCwgNTM0LCA4MzcsIDUzNCwgODQzLCA1MzQsIDUzNCwgODU2LCA1MzQsIDUzNCwgODY3LCA1MzQsIDg3MiwgNTM0LCA1MzQsIDg4MCwgODgzLCA4ODgsIDUzNCwgODk2LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgOTEwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwNCwgMjYwNSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzE4OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgOTE2LCA1NTYsIDU1NiwgOTI5LCA1NTYsIDU1NiwgOTQwLCA1NTYsIDk0NSwgNTU2LCA1NTYsIDk1MywgOTU2LCA5NjEsIDU1NiwgOTY5LCAxMDE5LCA1ODAsIDU4MCwgMTAyNywgMTAzMCwgMTAzNSwgNTgwLCAxMDQzLCA1ODAsIDU4MCwgMCwgMCwgMCwgNTM0LCA1ODAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODI1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyODQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4MzcsIDUzNCwgMTA1MywgODg4LCA1MzQsIDkxMCwgNTU2LCAxMDU4LCA5NjEsIDU1NiwgMCwgOTg0LCA1ODAsIDEwNjMsIDEwMzUsIDU4MCwgMCwgMjkxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1OCwgMCwgMCwgMCwgMCwgMTA4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5NywgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDMyLCAwLCAwLCAwLCAwLCAwLCAxMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDc4LCAwLCAwLCAwLCAxMTI5LCAwLCAwLCAwLCAzNjQsIDM2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ3MSwgMCwgMCwgMCwgMCwgMCwgMTE0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1MCwgMTEyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4OSwgMCwgMCwgMCwgMCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzksIDAsIDAsIDAsIDAsIDAsIDMyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc1NywgMjc1OCwgMCwgMCwgMCwgNTM0LCAxMjgyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyOTcsIDEzMzcsIDUzNCwgNTM0LCAxMzQxLCA5MDEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM1NCwgNTU2LCA1NTYsIDE0MTksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MjksIDU1NiwgNTU2LCAyNjAwOSwgMTM0MSwgOTc1LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MjMsIDU4MCwgMCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODM3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4NjIsIDE4NjMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQ2MSwgNTgwLCA1ODAsIDU4MCwgMTQ2NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MTUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0ODEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTkzMywgNTgwLCA1ODAsIDU4MCwgMTQ5NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNTExLCA1ODAsIDU4MCwgNTgwLCAwLCAyMDA1LCAwLCAwLCAwLCAwLCAwLCAyMDA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDE1MjEsIDU4MCwgNTgwLCAwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1ODAsIDUzNCwgNTU2LCA1ODAsIDM2MTAsIDM2MTEsIDM2MTIsIDUzNCwgNTU2LCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNywgNDQyLCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDQ1NiwgNDU2LCA0NTYsIDAsIDAsIDE1ODUsIDAsIDAsIDE1ODgsIDE1ODksIDE1OTAsIDAsIDE1OTIsIDE1OTMsIDAsIDAsIDAsIDAsIDE1OTgsIDE2MzEsIDE2MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NDEsIDE2NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTY0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEyLCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAwLCAwLCAxNjQ4LCAwLCAwLCAxNjUwLCAwLCAwLCAwLCAwLCAxNjUyLCAxNjUzLCAwLCAwLCAwLCAwLCAwLCA0NDEsIDAsIDAsIDQ2NywgNDY3LCA0NjcsIDQ2NywgNDY3LCA0NjcsIDQ2NywgNDY3LCA0NjcsIDQ2NywgNDY3LCA0NjcsIDQ2NywgNDY3LCA0NjcsIDQ2NywgNTUyLCA1NzUsIDU1MiwgNTc1LCA1NTIsIDU1MiwgNTc1LCA1NTIsIDAsIDAsIDE2NzEsIDE2NzIsIDE2NzMsIDE2NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0ODMsIDAsIDAsIDAsIDAsIDAsIDE2ODMsIDAsIDAsIDE2ODYsIDAsIDAsIDAsIDAsIDAsIDE2OTAsIDAsIDAsIDAsIDE2OTQsIDE2OTUsIDE3MDYsIDE1NjYsIDE1NjYsIDE3MDgsIDUzNCwgMTcxMCwgNTM0LCAxNzExLCAxNzEyLCA1MzQsIDE3MTQsIDUzNCwgNTM0LCA1MzQsIDE3MTgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4ODYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgOTA4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI1NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDMxLCA1NTYsIDI2MDA5LCAxMzQxLCA5NzUsIDE0MzUsIDUzNCwgNTM0LCAxNzM5LCA1MzQsIDE3NDEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzQ5LCAxNzUwLCAxNzUyLCA1MzQsIDE3ODYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3OTcsIDEzNDEsIDAsIDE4MDIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDQxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMyMDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MDQsIDU1NiwgMTgwNSwgNTU2LCAxODA3LCA1NTYsIDE4MDksIDU1NiwgNTU2LCA1NTYsIDE4MTMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAwLCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgMjYxOCwgNTgwLCA1ODAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTgyNiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODMwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDU1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgMzA2MywgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNzI0LCAxOTE1LCAxODE5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAyNjkyLCAwLCAwLCAxODM2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg0NCwgMTg0NSwgMTg0NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDIyOTcsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY2NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY1MywgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjU3LCA1ODAsIDU1NiwgNTU2LCA1NTYsIDE4NTUsIDE4NTYsIDE4NTcsIDU1NiwgNTU2LCAxODYwLCAxODYxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAwLCA1ODAsIDU4MCwgNTgwLCAyODYyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU1NiwgMTg2OSwgNTU2LCA1NTYsIDU1NiwgMTg3MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODgyLCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDAyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNTU1LCAzNTU2LCA1ODAsIDU4MCwgMCwgMCwgMzU1OSwgMCwgNTM0LCA1MzQsIDE5MDMsIDU4MCwgMTkwNSwgNTgwLCA1ODAsIDU4MCwgMTkwOSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNTI4LCA1ODAsIDU4MCwgMCwgMCwgMCwgMTkyMiwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTI2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MzAsIDU4MCwgMTkzMiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MjQsIDAsIDEyNzAsIDE0NTQsIDEzNjIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDE5NTIsIDE5NTMsIDU4MCwgNTgwLCAxOTU2LCAxOTU3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5NjUsIDU4MCwgNTgwLCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU4MCwgNTgwLCAzMzIxLCAwLCAwLCAwLCAzMzIzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjA1MDU2LCAwLCAwLCAwLCAwLCAyODg3NjgwLCA1ODAsIDE5NjksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk3OCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTgwLCA1ODAsIDU4MCwgMTk4OSwgNTM0LCA1ODAsIDU1NiwgMTc2NiwgNTM0LCAxOTk1LCA1MzQsIDE4NjEsIDU1NiwgMTk5OSwgNTU2LCAxOTU3LCA1ODAsIDIwMDMsIDU4MCwgMCwgMjAwNSwgMCwgMCwgMCwgMCwgMCwgMjAwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwNiwgMCwgMjAxOCwgMCwgMCwgMjAyMSwgMjAyMiwgMCwgMCwgMCwgMjAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE0LCA0MTQsIDAsIDAsIDAsIDAsIDAsIDQxNCwgMCwgMCwgMCwgMjA2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQyLCAwLCAwLCAwLCAxNjUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTEsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDExNDczNDgsIDIwOTUsIDAsIDIwOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NDcyNSwgMTg0OTI1LCAxODQ5MjUsIDE4NDkyNSwgMCwgMTg0OTI1LCAxODQ5MjUsIDE4NDkyNSwgMTg0OTI1LCAxODQ5MjUsIDE4NDkyNSwgMCwgMCwgMCwgMCwgMCwgMTg0OTI1LCAwLCAxODQ5MjUsIDEsIDEyMjkwLCA1MzQsIDUzNCwgNTM0LCAyMTUzLCA1MzQsIDIxNTUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc0NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjIwNCwgMjIwNSwgNTM0LCA1MzQsIDAsIDAsIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1NTgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjIzOCwgNTU2LCAyMjQwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjIzMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyOTEsIDIyOTIsIDU1NiwgNTU2LCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MDYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNTEzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzMjUsIDU4MCwgMjMyNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzMTgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzc4LCAyMzc5LCA1ODAsIDU4MCwgMjE0NSwgMjMxNywgMjIzMCwgNTM0LCAyMzg1LCA1MzQsIDUzNCwgNTU2LCAyMzg5LCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgOTk3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzI4LCA1ODAsIDIzMzAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM0MiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ3NCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzkzLCA1ODAsIDU4MCwgMjAwNSwgMCwgMjAwNywgMCwgMjAwOSwgMCwgMjAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQzNywgMjQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA4OSwgMCwgMCwgNTM0LCAyNTI2LCA1MzQsIDUzNCwgNTM0LCAyNTMxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MzgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNjksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc4MiwgNTM0LCA1MzQsIDI3ODUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjU0MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDI1NDksIDU1NiwgNTU2LCAyNTg3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1OTEsIDU1NiwgNTU2LCA1NTYsIDI1OTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAyNjE1LCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1NTYsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzM4NiwgNTU2LCA1NTYsIDU1NiwgMjYwMywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwNDIsIDU1NiwgMzA0NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDA0LCA1NTYsIDU1NiwgMTQxMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDI2MjMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NTEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2MzUsIDU4MCwgMjYzNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTE0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NjIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY2OSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg5NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTA0NiwgMCwgMCwgMCwgNTM0LCA1ODAsIDU1NiwgNTgwLCA1ODAsIDU4MCwgMjY3NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgMjkxMywgNTU2LCAyOTE1LCA1ODAsIDUzNCwgNTM0LCA1MzQsIDI3OTgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzM0OCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg0NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNDUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMjk0MywgMjk0NCwgMCwgMjk0NSwgMCwgMjk0NywgMCwgMCwgMCwgMCwgMjk0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI1ODgzLCAyMjU4ODMsIDIyNTg4MywgMjI1ODgzLCAyMjU3MzQsIDIyNTg4MywgMjI1ODgzLCAyMjU4ODMsIDIyNTg4MywgMjI1ODgzLCAyMjU4ODMsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAyMjU4OTksIDIyNTczNCwgMjI1ODk5LCAxLCAxMjI5MCwgMjk2OCwgMjk2OSwgMCwgMjk3MSwgMCwgMCwgMjk3NCwgMCwgMCwgMCwgMjk3NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDAsIDAsIDAsIDU1NiwgMjIxNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MCwgMjYxNywgNTgwLCA1ODAsIDU4MCwgNTM0LCAyOTg0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjk4OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyOTk0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzAwMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzYzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzAwOSwgMzAxMSwgNTM0LCA1MzQsIDUzNCwgMzAxNCwgNTM0LCAzMDE2LCAzMDE3LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDU4MCwgMjg2MSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMTI2NywgMTQ1MSwgMTM1OSwgNTM0LCA1MzQsIDUzNCwgMTUzMCwgNTM0LCA1NTYsIDMwMjQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDI4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwMzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMTg1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyMjksIDU1NiwgNTU2LCAyMjMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDQwLCA1NTYsIDU1NiwgMzA0MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MjksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzA1MCwgMzA1MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDU2LCA1NTYsIDMwNTgsIDMwNTksIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA4MywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMzMSwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzM1LCA1ODAsIDU4MCwgMzA2NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMwNzAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA3NiwgNTgwLCAzMDkyLCAzMDk0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMwOTgsIDU4MCwgMzEwMCwgMzEwMSwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODg3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDAsIDIyOTksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA4NCwgNTgwLCAzMDg2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMTA2LCA1NTYsIDMxMDgsIDU4MCwgMzExMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzExNiwgMCwgMCwgMzExOSwgMCwgMCwgMCwgMCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDEwOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NjcyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTQwLCAzMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTA3LCAwLCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMxODQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjcyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMxOTUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMjAzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMTk3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTk0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCAzMjA4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMyMTMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTkwNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MTgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDk2LCA1ODAsIDU4MCwgMzA5OSwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI3OCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNTE1LCA1NTYsIDU1NiwgNTgwLCA1NTYsIDMyOTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMyMTQsIDMzMjYsIDMzMjcsIDAsIDMxMzIsIDAsIDMzMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDI3NjYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzcxLCA1MzQsIDUzNCwgNTM0LCAzNDA1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NjAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNDIwLCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NTIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNDM2LCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzUwMiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM0NTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCAzMjgxLCA1NTYsIDU1NiwgNTU2LCAzMjg0LCA1NTYsIDU1NiwgNTU2LCAzNDYzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMzAyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM0NzcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM0ODYsIDM0ODcsIDAsIDAsIDAsIDAsIDM2NCwgMzY0LCAwLCAwLCAwLCAwLCAxMTM3LCAxMDk1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDI2NjI0MCwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDAsIDAsIDAsIDAsIDM0OTMsIDM0OTQsIDM0OTUsIDUzNCwgNTM0LCA1MzQsIDM0OTgsIDUzNCwgMzUwMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMjY5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzgxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM1MDUsIDM1MDYsIDM1MDcsIDU1NiwgNTU2LCA1NTYsIDM1MTAsIDU1NiwgMzUxMiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNTE3LCAzNTE4LCAzNTE5LCAzNTIwLCA1ODAsIDU4MCwgNTgwLCAzNTIzLCA1ODAsIDM1MjUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzUzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTYyLCA1MzQsIDUzNCwgNTM0LCAzNTY2LCA1NTYsIDU1NiwgMzU2OCwgNTU2LCA1NTYsIDU1NiwgMzU3MiwgNTU2LCA1ODAsIDU4MCwgMzU3NCwgNTgwLCA1ODAsIDU4MCwgMzU3OCwgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDAsIDMxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI4LCAzMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MDksIDAsIDAsIDAsIDAsIDM2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYyOSwgMCwgMCwgMCwgMCwgMzY4LCAwLCAwLCAwLCAzNzYsIDM3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEyNywgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDAsIDQxMSwgMCwgMCwgMCwgNDExLCA2OTYzMiwgNzM3MjgsIDAsIDM2OCwgMzY4LCAwLCA0MjMsIDY1NTM2LCAzNjgsIDAsIDAsIDM2OCwgNDIzLCA0OTIsIDQ5NiwgNDkyLCA0OTIsIDUwMSwgNDkyLCA0OTIsIDQ5MiwgNTAxLCA0OTIsIDQyMywgNDIzLCAzMjksIDQyMywgMCwgMCwgNDIzLCA0MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNDIzLCA0MjMsIDQyMywgNTQwLCA1NjMsIDU0MCwgNTYzLCA1NDAsIDU0MCwgNTYzLCA1NDAsIDU4NywgNTYzLCA1NjMsIDU2MywgNTYzLCA1NjMsIDU2MywgNTYzLCA1ODcsIDU4NywgNTg3LCA1NDAsIDU4NywgNTg3LCA1ODcsIDU4NywgNTg3LCA1ODcsIDU4NywgNTYzLCA1NjMsIDU0MCwgNTYzLCA1ODcsIDU2MywgNTg3LCAxLCAxMjI5MCwgMCwgNzY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjQ0LCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDkzMywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyODUsIDU1NiwgMjI4NywgNTU2LCA1NTYsIDAsIDAsIDEyMDcsIDAsIDEwOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NDcsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI2MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyNzIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAwLCAyMjEyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwMjksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDMwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDUzNCwgNTM0LCA1MzQsIDEzNDEsIDkwMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzNTIsIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA5OTgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NTAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzMTUsIDU4MCwgMjMxNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1NTYsIDU1NiwgNTU2LCAxMzY0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzc4LCAxMzgwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg3MSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQxMywgNTU2LCA1NTYsIDE0MTcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNTY3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1NzMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjc3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1MzQsIDM1OTcsIDU1NiwgNTU2LCA1NTYsIDM1OTksIDU4MCwgNTgwLCA1ODAsIDAsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDAsIDAsIDAsIDMyNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2LCAzMDYsIDMwNiwgMCwgMCwgMCwgMCwgMCwgNDI0LCA0MjQsIDAsIDQyNCwgNDMzLCAwLCA0MjQsIDQyNCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0NjAsIDQ2MCwgNDYwLCA0ODYsIDQ4NiwgNDYwLCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA0ODYsIDQ4NiwgNDg2LCA1NDEsIDU2NCwgNTQxLCA1NjQsIDU0MSwgNTQxLCA1NjQsIDU0MSwgNTg4LCA1NjQsIDU2NCwgNTY0LCA1NjQsIDU2NCwgNTY0LCA1NjQsIDU4OCwgNTg4LCA1ODgsIDU0MSwgNTg4LCA1ODgsIDU4OCwgNTg4LCA1ODgsIDU4OCwgNTg4LCA1NjQsIDU2NCwgNTQxLCA1NjQsIDU4OCwgNTY0LCA1ODgsIDEsIDEyMjkwLCA3ODExNCwgMTA2NiwgMCwgMCwgMTA2OSwgMTA3MywgMCwgMCwgMTA3NywgMTA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDcyLCAwLCAwLCAwLCAwLCAxNjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjY3LCAwLCAwLCAwLCAwLCAwLCAyMDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzA0LCAwLCAwLCAwLCAwLCAyMDY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjgxLCAxNjgyLCAyMzkyLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTI4LCAwLCAwLCAwLCAyOTMyLCAwLCAwLCAwLCAwLCAwLCAyOTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMjk1MywgMCwgMCwgMjk1NiwgMCwgMCwgMCwgMCwgMCwgMjk2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQsIDI5OTUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMwMDQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAyMjExLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNjgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI3MywgNTU2LCA1NTYsIDU1NiwgNTM0LCA1MzQsIDUzNCwgMzAxMiwgNTM0LCA1MzQsIDMwMTUsIDUzNCwgNTM0LCA1MzQsIDMwMTgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU1NiwgNTU2LCA1MzQsIDU1NiwgNTgwLCA1NTYsIDU4MCwgMSwgMTIyOTAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzA1NCwgNTU2LCA1NTYsIDMwNTcsIDU1NiwgNTU2LCA1NTYsIDMwNjAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM5NiwgMCwgMCwgMCwgMzA3NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDg3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0NDIsIDAsIDM0NDQsIDAsIDUzNCwgNTM0LCAwLCAzMTIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDE1LCAwLCAwLCA1MzQsIDUzNCwgMzE1MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNDU4LCA1NTYsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMTYzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMxNjgsIDUzNCwgMzE3MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyNjEsIDUzNCwgNTM0LCA1MzQsIDEyNzAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjQ5MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE5NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDMyMDcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk2MiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIyNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDI5MTIsIDUzNCwgMjkxNCwgNTU2LCAyOTE2LCAzMjc1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1NTYsIDU1NiwgMzI4NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzI5MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzQ2NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMzA2LCAzNTg3LCAzNTg4LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDM1OTEsIDM1OTIsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzE2LCA1MzQsIDUzNCwgNTM0LCAwLCA2ODMsIDY4NCwgMCwgMCwgMCwgMCwgNjg5LCAwLCAwLCAwLCAzNjQsIDM2NCwgMzY0LCAwLCAwLCAwLCAwLCAwLCA1MzQsIDgzMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODYwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTgwLCAyMTgxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTg4LCA1MzQsIDAsIDc1MSwgMCwgMCwgMCwgMCwgMCwgNzUxLCA3NTEsIDAsIDAsIDgxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzNDU5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzNDU5MiwgMCwgMCwgMCwgMCwgOTcwLCA1NTYsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgOTg4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTA0NCwgNTgwLCAwLCAwLCAwLCA4NDEsIDk4OCwgOTE0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg5NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NzAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTA0NCwgMCwgMCwgMCwgMTE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwODQ0OCwgMCwgMCwgNTM0LCAxMzE4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMjU0OSwgMTY5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5MCwgNTgwLCA1ODAsIDE5ODgsIDU4MCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI3NjgsIDUzNCwgMjc2OSwgNTM0LCA1MzQsIDI1NDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgMCwgMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgOTc1LCA1ODAsIDAsIDMxMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNTMsIDAsIDMyMzUsIDUzNCwgMzIzNywgNTU2LCAzMjM5LCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMjQsIDMxMjUsIDAsIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDMyOTgsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzNTksIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxNywgNTgwLCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDc2LCAwLCAwLCAwLCAwLCAwLCAwLCA0NjEsIDQ2MSwgNDc5LCA0ODcsIDQ4NywgNDc5LCA0ODcsIDQ4NywgNDg3LCA0ODcsIDQ4NywgNDg3LCA0ODcsIDQ4NywgNTEyLCA1MjAsIDUyMCwgNTIwLCA1MjAsIDUyMCwgNTIwLCA1MjAsIDUyMCwgNTIwLCA1MjAsIDUyMCwgNTIwLCA1MjAsIDUyMCwgNTI5LCA1MjAsIDUyMCwgNTIwLCA1MjAsIDUyMCwgNTQyLCA1NjUsIDU0MiwgNTY1LCA1NDIsIDU0MiwgNTY1LCA1NDIsIDU4OSwgNTY1LCA1NjUsIDU2NSwgNTY1LCA1NjUsIDU2NSwgNTY1LCA1ODksIDU4OSwgNTg5LCA1NDIsIDU4OSwgNTg5LCA1ODksIDU4OSwgNTg5LCA1ODksIDU4OSwgNTY1LCA1NjUsIDU0MiwgNTY1LCA1ODksIDU2NSwgNTg5LCAxLCAxMjI5MCwgMCwgMCwgNzYwLCAwLCAwLCA3NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMzIsIDAsIDAsIDAsIDAsIDAsIDc3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzksIDAsIDAsIDAsIDAsIDc4OCwgMCwgMCwgMCwgMCwgMCwgMCwgODAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDUsIDAsIDAsIDAsIDc4MiwgMCwgMCwgMCwgMCwgMzY0LCAzNjQsIDAsIDAsIDAsIDExMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MywgNTc2LCA1NTMsIDU3NiwgNTUzLCA1NTMsIDU3NiwgNTUzLCAwLCA4MDUsIDAsIDAsIDAsIDAsIDAsIDgwNSwgODA1LCAwLCAwLCAwLCAwLCA3ODIsIDAsIDAsIDAsIDAsIDAsIDUzNCwgODMxLCA1MzQsIDUzNCwgNTM0LCA4NDYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAyMjEwLCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4OTMsIDI2MDA5LCAwLCAxODk4LCA1ODAsIDE5MDAsIDU4MCwgMTkwMSwgNTgwLCAwLCAwLCAwLCAwLCA4MjMsIDc3OCwgMCwgMCwgODIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDIyLCAwLCAyMTE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MjMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODQ0LCA1MzQsIDg1MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjgxNSwgNTU2LCAyODE2LCA1NTYsIDU1NiwgOTE3LCA1NTYsIDkyNSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1ODMsIDU1NiwgOTcxLCA1NTYsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA5OTEsIDU4MCwgOTk5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDk3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMDU0LCA4OTgsIDU1NiwgNTU2LCA1NTYsIDEwNTksIDk3MSwgMCwgNTgwLCA1ODAsIDU4MCwgMTA2NCwgMTA0NSwgMCwgMTE1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg5LCAwLCAwLCAwLCAwLCAwLCAwLCA3NzAsIDAsIDAsIDAsIDEyMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzQ1OTIsIDAsIDM2NCwgMCwgMCwgMCwgMTEzNDU5MiwgMCwgMCwgMCwgMTEzNDU5MiwgMTEzNDU5MiwgMCwgMCwgMTEzNDU5MiwgMCwgMCwgMTEzNDU5MiwgMCwgMTEzNDU5MiwgNTM0LCA1MzQsIDEyODQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI5MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDIyMDksIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg0MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAxODk2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDUzNCwgNTM0LCAxMzIxLCA1MzQsIDUzNCwgMTMyNSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMzEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzM0MiwgNTM0LCAzMzQ0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCAxMzM4LCA1MzQsIDUzNCwgMTM0MSwgOTAxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU2OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzNTcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzNzYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAyNjE1LCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCAyNjE5LCA1ODAsIDU1NiwgNTU2LCA1NTYsIDEzODQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MTYsIDE4MTcsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCAxNTIyLCA1ODAsIDU4MCwgMCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMTk2LCA1NTYsIDMxOTgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODc4LCAxODc5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NzMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3ODEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgNTU2LCA1NTYsIDU1NiwgMjgxMywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MTgsIDU1NiwgNTU2LCAxODIzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg0MiwgNTU2LCA1NTYsIDU1NiwgMTg1MywgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODU5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg0MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODY4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODc2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg1MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4ODYsIDE4ODgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwOSwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMTUyNSwgMTUyNiwgMTUyNywgNTM0LCA1MzQsIDE1MjksIDUzNCwgNTM0LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDE5NTUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTY0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk0MCwgMTk0MSwgMTk0MywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTUxLCA1ODAsIDU4MCwgNTgwLCAxOTcyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTgyLCAxOTg0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MjUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzcyLCA1ODAsIDIzNzQsIDU4MCwgNTgwLCAwLCAwLCAwLCAyMDU3LCAwLCAwLCAwLCAwLCAwLCAyMDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDg5LCAwLCAwLCAwLCAwLCAxMjQxLCAxMjQyLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDc5LCAwLCAwLCAwLCAwLCAwLCA1MzQsIDgzMywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMwNiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjEzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNDYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzQ1MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MjYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDk0OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NjcsIDU1NiwgMjE4OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMxNCwgMjIwMywgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjE5LCAyMjkwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzMDYsIDIzNzcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjE0NiwgMjMxOCwgMjIzMSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1ODAsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI0NiwgMCwgMCwgMCwgMCwgMCwgMjQxMywgMjQxNCwgMCwgMCwgMjQxNywgMCwgMjQxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5NSwgMTU5NiwgMCwgMCwgMCwgMjQyNCwgMCwgMCwgMjQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMjQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1OTE2OCwgMCwgMTE1OTE2OCwgMCwgMCwgMCwgMCwgMTE1OTE2OCwgMTE1OTE2OCwgMCwgMCwgMCwgMjQ1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1NiwgMjQ1NywgMCwgMCwgMjQ2MCwgMCwgMCwgMjQ2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ3MywgMCwgMCwgMCwgMCwgMCwgNjM5LCAwLCAwLCAwLCAwLCA2NDQsIDY0NSwgNjQ2LCA2NDcsIDY0OCwgNjQ5LCA1MzQsIDI0ODcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMwMDgsIDUzNCwgNTM0LCA1MzQsIDI1MTUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyOTMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUyNywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMzNDMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTM0LCA1MzQsIDI1NDEsIDUzNCwgNTM0LCA1MzQsIDI1NDQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgMCwgMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjE3LCA1NTYsIDU1NiwgNTU2LCAyNTc0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTc5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MjcsIDE0MjgsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAxMzQxLCA5NzUsIDU4MCwgMjU4NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU5MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU5OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMyOTAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzI5MSwgMzI5MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDIyOTgsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg4NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxMiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY3MywgNTgwLCA1ODAsIDU4MCwgMjY3NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjgxLCAyNjgyLCAyNjgzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI4OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxODUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjcyMCwgMjcyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA4MCwgMCwgMCwgMCwgMjczNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc0NiwgMCwgMCwgMCwgMCwgMCwgNjY3LCAwLCAwLCAwLCAwLCAwLCA3MjksIDAsIDc4MCwgMCwgMCwgMCwgMCwgMCwgMzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTY1LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzUxLCAwLCAwLCAwLCAyNzUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTA5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc4NywgMjc4OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzkxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgMzE3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzk2LCA1MzQsIDUzNCwgNTM0LCAyNzk5LCA1MzQsIDI4MDEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI4MDUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI0OTIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NDUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI4MzQsIDI4MzUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjgzOCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI1NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODQ0LCA1NTYsIDU1NiwgNTU2LCAyODQ3LCA1NTYsIDI4NDksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg1NCwgNTgwLCAyODY3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk0OSwgNTgwLCA1ODAsIDU4MCwgMjg4MywgMjg4NCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyODg3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MjgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTEyLCAxOTEzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MjAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg5MywgNTgwLCA1ODAsIDU4MCwgMjg5NiwgNTgwLCAyODk4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMTkwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1ODAsIDI5MDMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDAsIDAsIDMyNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAyMjU3MzQsIDIyNTczNCwgMjI1NzM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MCwgMjkxOCwgMCwgMCwgMjkyMSwgMjkyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzMiwgMCwgMCwgMzI1NSwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyOTg2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI5OTIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg5MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMCwgMCwgNTgwLCA1ODAsIDIzMDIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTU2LCA1NTYsIDU1NiwgMzAyNiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMDMyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODQxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzU3LCA1NTYsIDMzNTksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDY4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMwNzQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzExLCA1ODAsIDU4MCwgMjMxNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMyMiwgMzEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5MSwgMzI0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzY3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI2NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTM0MSwgMCwgNTU2LCA1NTYsIDUzNCwgNTM0LCAzMjc2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzI4MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMyOTksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMwNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM0NzksIDU4MCwgMzQ4MSwgNTgwLCA1ODAsIDM0ODMsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDIxLCAwLCAwLCAwLCAwLCAwLCAzMTMyLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzM5OSwgNTM0LCAzNDAxLCAzNDAyLCA1MzQsIDM0MDQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM0MTQsIDU1NiwgMzQxNiwgMzQxNywgNTU2LCAzNDE5LCA1NTYsIDM0MjEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNDMwLCA1ODAsIDM0MzIsIDM0MzMsIDU4MCwgMzQzNSwgNTgwLCAzNDM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM0OTksIDUzNCwgMzUwMSwgNTM0LCA1MzQsIDU4MCwgNTgwLCA1ODAsIDM1NTMsIDU4MCwgMzU1NCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNTM4LCA1MzQsIDM1MzksIDUzNCwgNTM0LCA1MzQsIDM2MDQsIDM2MDUsIDM2MDYsIDUzNCwgNTU2LCA1ODAsIDUzNCwgNTU2LCA1ODAsIDUzNCwgNTU2LCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMTEyNjQsIDAsIDAsIDAsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxNzkwNzIsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDMxMTcwNTYsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDU5MCwgNTY2LCA1NjYsIDU2NiwgNTY2LCA1NjYsIDU2NiwgNTY2LCA1OTAsIDU5MCwgNTkwLCA1NDMsIDU5MCwgNTkwLCA1OTAsIDU5MCwgNTkwLCA1OTAsIDU5MCwgNTY2LCA1NjYsIDU0MywgNTY2LCA1OTAsIDU2NiwgNTkwLCAxLCAxMjI5MCwgNTU2LCA1NTYsIDEzOTgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODUzLCA1NTYsIDAsIDAsIDczMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNiwgMTEyNywgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTM4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzg0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCAyMjIzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODQ5LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCAyMzEwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDkwLCA1ODAsIDU4MCwgNTgwLCA0MDIsIDAsIDAsIDAsIDAsIDM4MCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCA0MjUsIDY1NTM2LCAwLCAwLCAwLCAwLCAzNjQsIDM2NCwgMTEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzMywgMCwgMCwgMCwgMzEzNiwgMCwgNDI1LCA0MjUsIDAsIDQyNSwgMCwgNDM5LCA0MjUsIDQyNSwgNDYyLCA0NjIsIDQ2MiwgNDY5LCA0NjIsIDQ2MiwgNDYyLCA0NjIsIDQ2MiwgNDYyLCA0NjIsIDQ2MiwgNDY5LCA0NjIsIDQ2MiwgNDYyLCA0NjIsIDQ2MiwgNDYyLCA0NjIsIDQ2MiwgNDc2LCA0NjIsIDQ4OCwgNDg4LCA0NjIsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA0ODgsIDQ4OCwgNDg4LCA1MzEsIDU0NCwgNTY3LCA1NDQsIDU2NywgNTQ0LCA1NDQsIDU2NywgNTQ0LCA1OTEsIDU2NywgNTY3LCA1NjcsIDU2NywgNTY3LCA1NjcsIDU2NywgNTkxLCA1OTEsIDU5MSwgNTQ0LCA1OTEsIDU5MSwgNTkxLCA1OTEsIDU5MSwgNTkxLCA1OTEsIDU2NywgNTY3LCA1NDQsIDU2NywgNTkxLCA1NjcsIDU5MSwgMSwgMTIyOTAsIDAsIDAsIDAsIDY1MywgNjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTM5LCAwLCAwLCAyOTQxLCAwLCAwLCAwLCA2NTQsIDAsIDY1NCwgMCwgMCwgMCwgMCwgODE0LCAwLCAwLCAwLCA2NTQsIDAsIDAsIDAsIDAsIDM3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCAyMTMwLCA1MzQsIDUzNCwgNTM0LCA1NTYsIDkxOSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NTcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1NDUsIDU1NiwgMzU0NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTM0LCA1MzQsIDg4NCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA5NTcsIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgMTAzMSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI5MDcsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTE3LCAwLCAwLCAwLCAyOTAsIDEwNjYsIDAsIDAsIDEwNjksIDEwNzMsIDAsIDAsIDEwNzcsIDEwODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAxOTI5NjUsIDE5Mjk2NSwgMTkyOTY1LCAwLCAwLCAwLCAxMDg4LCAxMDg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDEzMTA3MiwgMCwgMCwgMCwgMTEzMCwgMCwgMCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMzIsIDAsIDMyNTQsIDAsIDAsIDEwODksIDEwODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwOTMsIDAsIDEwODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgMTI1MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMDMsIDUzNCwgNTM0LCAxMzA1LCA1MzQsIDUzNCwgNTM0LCAxMzA5LCA1MzQsIDUzNCwgNTM0LCAwLCA5MDEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1NDksIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI4NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjgwNCwgNTM0LCA1MzQsIDI4MDcsIDUzNCwgNTM0LCAxMzIwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMjMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTA5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzNDEsIDkwMSwgNTU2LCAxMzQ0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjgzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM1OCwgMTM2NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM3OSwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCA1ODAsIDk4NSwgOTg5LCA5OTIsIDU4MCwgMTAwMCwgNTgwLCA1ODAsIDU4MCwgMTAxNSwgMTAxNywgNTU2LCA1NTYsIDU1NiwgMTM5OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDEyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODU4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDAyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MTYsIDU1NiwgMTQzNiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NTAsIDE0NTcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDY5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MTAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MTgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMTI2NiwgMTQ1MCwgMTM1OCwgNTM0LCA1MzQsIDEzMjAsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzM1NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzM2MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYxNSwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjYyNiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTU2LCAxNDEyLCA1NTYsIDU1NiwgNTgwLCA1ODAsIDE1MDQsIDU4MCwgNTgwLCAxMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTgsIDAsIDAsIDY2MSwgMCwgMCwgMCwgMCwgMTU3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyOCwgMTcyMSwgMTcyMiwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzI5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDMxNzcsIDU1NiwgNTU2LCA1NTYsIDMxODAsIDU1NiwgNTM0LCAxNzcwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMxMSwgNTM0LCA1NTYsIDU1NiwgMTgyNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMyMDQsIDU1NiwgNTU2LCA1NTYsIDE4MzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMjk0LCA1NTYsIDU4MCwgMTk4NywgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDI2OTQsIDIwMjksIDAsIDIwMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwMzksIDAsIDAsIDAsIDAsIDAsIDAsIDE3MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDIxOTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTk1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMjYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMjkxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgMjI3NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI4MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODEwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzE4OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDIzNjMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzNjksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMyOSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzU1NywgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDU4MCwgNTgwLCAyNjM0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5NDgsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAyNjk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjM4NDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzc4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NzksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI4MDksIDUzNCwgNTM0LCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjgxNywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM0NjUsIDU1NiwgMzQ2NywgNTU2LCA1NTYsIDM0NjksIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMzNzMsIDU4MCwgMzM3NSwgNTgwLCA1NTYsIDU1NiwgNTU2LCAyODU4LCA1NTYsIDU1NiwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NDUsIDU4MCwgNTgwLCA1ODAsIDE0NTQsIDU4MCwgNTgwLCA1ODAsIDI4NjYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI4NzQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDczLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgMjk5NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NjcsIDE3NjgsIDMwMzYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNzUsIDU4MCwgMzA3OCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5NjYsIDU4MCwgMCwgMCwgMCwgMCwgMzEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY3OTM2LCAwLCAwLCAwLCA1MzQsIDUzNCwgMzE3NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODI4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwMDksIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDM1MzUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI5OTEsIDUzNCwgNTM0LCA1MzQsIDM1NDIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1NTAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDgyLCA1ODAsIDU4MCwgMzA4NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTExLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDcyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA0NjMsIDQ2MywgNDYzLCA0NDcsIDQ0NywgNDYzLCA0NDcsIDQ0NywgNDQ3LCA0NDcsIDQ0NywgNDQ3LCA0NDcsIDQ0NywgNTEzLCA1MTMsIDUxMywgNTEzLCA1MTMsIDUxMywgNTEzLCA1MTMsIDUxMywgNTEzLCA1MTMsIDUxMywgNTEzLCA1MTMsIDUxMywgNTEzLCA1NDUsIDU2OCwgNTQ1LCA1NjgsIDU0NSwgNTQ1LCA1NjgsIDU0NSwgNTkyLCA1NjgsIDU2OCwgNTY4LCA1NjgsIDU2OCwgNTY4LCA1NjgsIDU5MiwgNTkyLCA1OTIsIDU0NSwgNTkyLCA1OTIsIDU5MiwgNTkyLCA1OTIsIDU5MiwgNTkyLCA1NjgsIDU2OCwgNTQ1LCA1NjgsIDU5MiwgNTY4LCA1OTIsIDEsIDEyMjkwLCAwLCAwLCAwLCA2NTUsIDAsIDY1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTYsIDkyMCwgNTU2LCA1NTYsIDkzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4NDEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMTE2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1NSwgMCwgMCwgMCwgMCwgMCwgMTE3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ2MTY5NiwgMCwgMCwgMCwgMCwgMCwgMTIzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgwMTY2NCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzIyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMyOSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTA1LCA1MzQsIDI1MDcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc5MywgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzNTksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgOTY1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQyMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAxMzQxLCA5NzUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk3NCwgMTk3NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjQxLCA1ODAsIDU4MCwgNTgwLCAyNjQ0LCA1ODAsIDU1NiwgNTU2LCAxNTM0LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDE1MzgsIDU4MCwgMTA2NiwgMCwgMTU0MiwgMCwgMCwgMCwgMTU0OCwgMCwgMCwgMCwgMTU1NCwgMCwgMCwgMCwgMTU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0NCwgMCwgMCwgMCwgMjQ0OCwgMCwgMCwgMTU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU2OSwgNTM0LCA1MzQsIDE3MjMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg5MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMjI5OCwgMCwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzQ4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgNTM0LCAzNTgyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgMzU4NiwgMTc1NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMxNiwgMCwgMjA5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEwOCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTU0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMDA2LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCAyMjM5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODY0LCA1NTYsIDU1NiwgMTg2NywgNTgwLCA1ODAsIDU4MCwgMjMyNiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTUxMiwgNTgwLCA1ODAsIDU4MCwgNTU2LCA1NTYsIDMxOTQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQxNCwgNTU2LCA1NTYsIDAsIDAsIDMzMjgsIDMxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4NTEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1ODAsIDU4MCwgMzM3OSwgNTgwLCA1ODAsIDUzNCwgNTU2LCA1ODAsIDAsIDAsIDAsIDMzODQsIDAsIDAsIDAsIDAsIDAsIDAsIDMwNiwgMjA0ODAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDI5OCwgMCwgMCwgMCwgMCwgMCwgMzEzMiwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMzk1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNTYsIDUzNCwgMjE1OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTcwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTQ2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDI1NDksIDM4NywgMzg5LCAzMzksIDAsIDAsIDAsIDAsIDAsIDAsIDMzOCwgMCwgMCwgMzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAyMDIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM4NiwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgMCwgMzkzLCAzOTQsIDAsIDM5NSwgMCwgMCwgMCwgMCwgMCwgMzk1LCAwLCAwLCAwLCAwLCAwLCAxMjA5LCAwLCAwLCAwLCAwLCAxMjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDk0LCAwLCAwLCAwLCAwLCAxMDk5LCAwLCAwLCAwLCAzMzgsIDAsIDAsIDQ0MCwgMCwgMCwgNDY0LCA0NjQsIDQ2NCwgNDY0LCA0NjQsIDQ2NCwgNDY0LCA0NjQsIDU0NiwgNTY5LCA1NDYsIDU2OSwgNTQ2LCA1NDYsIDU2OSwgNTQ2LCA0NzUsIDQ2NCwgNDY0LCA0NjQsIDQ5MywgNDcwLCA0OTMsIDQ5MywgNDkzLCA0OTMsIDQ5MywgNDkzLCA0OTMsIDQ5MywgNDY0LCA0NjQsIDQ3MCwgNDY0LCA0NjQsIDQ2NCwgNDY0LCA0NjQsIDQ2NCwgNDY0LCA0NjQsIDQ2NCwgNDY0LCA0NjQsIDQ3NCwgNDc0LCA0NjQsIDQ3NSwgNDY0LCA0NjQsIDQ2NCwgNTkzLCA1NjksIDU2OSwgNTY5LCA1NjksIDU2OSwgNTY5LCA1NjksIDU5MywgNTkzLCA1OTMsIDU0NiwgNTkzLCA1OTMsIDU5MywgNTkzLCA1OTMsIDU5MywgNTkzLCA1NjksIDU2OSwgNTQ2LCA1NjksIDU5MywgNTY5LCA1OTMsIDEsIDEyMjkwLCAwLCAwLCAwLCA2OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwOCwgMCwgNzEwLCAwLCAwLCAwLCAwLCA0MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NDMsIDAsIDAsIDAsIDAsIDc0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQxMSwgMCwgMCwgNzU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTYsIDAsIDc3NSwgMCwgMCwgMCwgMCwgMCwgODI0LCAwLCAwLCAwLCAwLCAwLCAwLCA3NzksIDY1NiwgMCwgMCwgNzk2LCAwLCAwLCAwLCAwLCA2OTksIDAsIDAsIDAsIDAsIDAsIDAsIDc5OSwgMCwgMCwgMCwgMCwgNDM0LCAwLCAwLCAzMzEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNDYxLCA0NjEsIDQ2MSwgNzk2LCA3NzksIDAsIDAsIDgwMSwgMCwgNjYwLCAwLCA3NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NDEsIDAsIDAsIDAsIDI3NDUsIDAsIDI3NDcsIDAsIDAsIDAsIDc3NSwgODAxLCAwLCA4MDEsIDc5NiwgMCwgMCwgMCwgODE1LCAwLCAwLCAwLCA2NTYsIDgxOCwgODI4LCAwLCAwLCAwLCAwLCA1MzQsIDgzMiwgNTM0LCA1MzQsIDUzNCwgODQ4LCA1MzQsIDUzNCwgODYyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTA0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4OTgsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDUzNCwgNTM0LCA4NzUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODkzLCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgOTA0LCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDk3NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTAwNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MDgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MjEsIDU1NiwgOTIxLCA1NTYsIDU1NiwgOTM1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDk0OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NjYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMzU5NCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzE1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyODAyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzk1LCA1MzQsIDUzNCwgMTM0MSwgMTgwMCwgNTU2LCA1NTYsIDU4MCwgMTAyMiwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDQwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDU4MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNDI4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1NTYsIDU4MCwgMzM4MSwgMCwgMzM4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjEyNiwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzE3LCA1MzQsIDUzNCwgMCwgMCwgMTEzMSwgMCwgMzY0LCAzNjQsIDAsIDExMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxMTEwNDQsIDExMTA0NCwgMTExMDQ0LCAxLCAxMjI5MCwgMTA5MywgMCwgMCwgMCwgMCwgMCwgMCwgMTE5NywgMCwgMCwgMCwgMCwgMTIwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMjAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjQsIDAsIDAsIDAsIDAsIDExMzEsIDAsIDAsIDEyMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTYsIDAsIDAsIDAsIDAsIDEyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDg0MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgMTM2MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM4MiwgNTgwLCA1ODAsIDE0OTcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMzNCwgNTgwLCA1ODAsIDU1NiwgMTUzMywgNTU2LCA1NTYsIDU4MCwgNTgwLCAxNTM3LCA1ODAsIDU4MCwgMTA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyMSwgMCwgMCwgMTEyNCwgMTEyNSwgMCwgMCwgMCwgMCwgMTU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxNCwgMCwgMCwgMCwgMTYwMiwgMCwgMCwgMTYwNSwgMCwgMTYwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyODgwLCAwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMCwgMCwgMTY5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQyMywgMCwgNTM0LCAxNzU1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE2MiwgNTM0LCA1NTYsIDE4MjIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwNDksIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI2NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwMzEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMCwgMCwgMjQwMiwgMCwgMjQwNCwgMCwgMCwgMjQwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDEyLCAwLCAwLCAwLCAyNDE1LCAyNDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDY0OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MTIyNTYsIDAsIDMyMDcxNjgsIDAsIDAsIDAsIDAsIDI0NDAsIDAsIDI0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NzAsIDAsIDAsIDAsIDAsIDAsIDI0NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NjksIDAsIDAsIDAsIDAsIDAsIDI0NzUsIDAsIDAsIDAsIDAsIDI0NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0ODYsIDAsIDAsIDAsIDAsIDQzNSwgMCwgMCwgNDQ3LCA0NjMsIDQ2MywgNDYzLCA0NjMsIDQ2MywgNDYzLCA0NjMsIDQ2MywgNDYzLCA0NzMsIDQ2MywgNDYzLCA0NjMsIDQ2MywgNDYzLCA0NjMsIDUzNCwgMjUwMCwgMjUwMSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MDYsIDUzNCwgMjUwOCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTEyLCAyNTI1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTMzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MzcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyNjIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyNzcsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCAyNTYxLCA1NTYsIDU1NiwgMjU2NCwgMjU2NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1NzAsIDU1NiwgMjU3MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTc2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU4MiwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCA5NzcsIDU4MCwgNTgwLCA1ODAsIDk5MywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ0MywgNTgwLCA1ODAsIDU4MCwgMTQ0NywgNTgwLCA1ODAsIDE0NTgsIDU4MCwgNTgwLCA1NTYsIDU1NiwgMjYwMiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODMzLCA1NTYsIDU1NiwgMjY4NSwgNTM0LCA1MzQsIDU1NiwgMjY4NywgNTU2LCA1NTYsIDU4MCwgMjY4OSwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MTQsIDI3MTUsIDI3MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNjAsIDAsIDAsIDAsIDAsIDAsIDIwNjQsIDAsIDAsIDIwNjYsIDAsIDI3MzUsIDAsIDI3MzcsIDAsIDAsIDAsIDI3NDAsIDAsIDAsIDI3NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MzAsIDAsIDAsIDAsIDAsIDAsIDI0MzUsIDUzNCwgNTM0LCAyODEwLCA1MzQsIDAsIDAsIDI4MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1NjYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg1NiwgNTU2LCA1NTYsIDI4NTksIDU1NiwgMCwgMCwgMjg2MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjUxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjU4LCA1ODAsIDU4MCwgMjg5MiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzMjEsIDU4MCwgMjkwMiwgNTgwLCA1ODAsIDI5MDUsIDU4MCwgNTgwLCAyOTA4LCA1ODAsIDI5MDksIDI5MTAsIDI5MTEsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDMxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NjMyLCA3MzcyOCwgMCwgMCwgMCwgNDIwLCAwLCA2NTUzNiwgMCwgMjkyOSwgMjkzMCwgMCwgMCwgMCwgMCwgMjkzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDI5OTcsIDUzNCwgMjk5OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzAwNSwgNTM0LCA1MzQsIDMwMDcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzI0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMzNSwgMTMzNiwgNTU2LCAzMDM3LCA1NTYsIDMwMzksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzA0NiwgNTU2LCA1NTYsIDMwNDgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NywgMCwgMzgwLCAwLCAwLCAwLCAzODAsIDAsIDAsIDU4MCwgNTgwLCAzMDc5LCA1ODAsIDMwODEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA4OCwgNTgwLCA1ODAsIDMwOTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMTY0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMxNjksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI3NzksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzE2NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMxODEsIDMxODIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzE4NiwgMzE4NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMxOTEsIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgOTc4LCA1ODAsIDU4MCwgNTgwLCA5OTUsIDU4MCwgNTgwLCAxMDA5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM1MywgMjM1NCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM2MSwgNTgwLCA1ODAsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIxMCwgMzIxMSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NDIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ0OCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzUyNCwgNTgwLCAzNTI2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCAzMjE1LCAzMjE2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIyMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MDcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIyNiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgMjY4NCwgNTU2LCA1NTYsIDU1NiwgMzI4OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI1OCwgNTU2LCA1NTYsIDU1NiwgMzMwNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM0NywgMjM0OCwgMzEzMiwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDMzOTMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzM5OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI5MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI2NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNDAzLCA1MzQsIDUzNCwgNTU2LCA1NTYsIDM0MDgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzQxMywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg3NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4ODEsIDU1NiwgNTU2LCA1NTYsIDM0MTgsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCAzNDI0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM0MjksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDY4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NzYsIDU4MCwgNTgwLCAzNDM0LCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAzNDQxLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM0OTcsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzMxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3MzUsIDUzNCwgNTM0LCA1MzQsIDM1NjMsIDM1NjQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCAzNTY5LCAzNTcwLCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMjEyLCA1ODAsIDU4MCwgNTgwLCAzNTc1LCAzNTc2LCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDk3OSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzU4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzQxLCAzNDIsIDM0MywgMzQ0LCAzNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTE4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMzkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDIsIDAsIDAsIDAsIDM0NCwgMzQ0LCAzNDUsIDM0NCwgMCwgMzQzLCAzNDQsIDQ0OCwgNDY1LCA0NjUsIDQ2NSwgNDY1LCA0NjUsIDQ2NSwgNDY1LCA0NjUsIDQ2NSwgNDY1LCA0NjUsIDQ2NSwgNDY1LCA0NjUsIDQ2NSwgNDY1LCA0NjUsIDQ2NSwgNDgwLCA0ODksIDQ4OSwgNDk3LCA0ODksIDQ5OSwgNDg5LCA0ODksIDQ5OSwgNDk5LCA0ODksIDQ5OSwgNTE0LCA1MTQsIDUxNCwgNTE0LCA1MTQsIDUxNCwgNTE0LCA1MTQsIDUxNCwgNTE0LCA1MTQsIDUxNCwgNTE0LCA1MTQsIDUxNCwgNTE0LCA1NDcsIDU3MCwgNTQ3LCA1NzAsIDU0NywgNTQ3LCA1NzAsIDU0NywgNTk0LCA1NzAsIDU3MCwgNTcwLCA1NzAsIDU3MCwgNTcwLCA1NzAsIDU5NCwgNTk0LCA1OTQsIDU0NywgNTk0LCA1OTQsIDU5NCwgNTk0LCA1OTQsIDU5NCwgNTk0LCA1NzAsIDU3MCwgNTQ3LCA1NzAsIDU5NCwgNTcwLCA1OTQsIDEsIDEyMjkwLCA2NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NSwgNjY2LCAwLCA2NjgsIDY2OSwgMCwgMCwgMCwgMCwgMCwgNjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjIwLCAxMjUwLCAxMjUxLCAwLCAxMjIwLCAwLCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAwLCA2ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDY5MiwgMzY0LCAzNjQsIDM2NCwgMCwgMCwgMCwgMCwgMCwgNjg3LCAwLCAwLCAwLCAwLCAwLCAzNjQsIDM2NCwgMzY0LCAwLCAwLCAwLCAwLCAwLCA3MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTEsIDAsIDAsIDAsIDAsIDcxMiwgMCwgNzE0LCAwLCA3MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNiwgMCwgMCwgMCwgMCwgNDM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTM4MTEyLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzksIDc0NSwgNzQ2LCA3NDcsIDAsIDAsIDAsIDAsIDAsIDc1MywgNzU0LCAwLCAwLCAwLCAwLCAwLCA3NDgsIDAsIDAsIDgwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzNDU5MiwgMCwgMCwgMTEzNDU5MiwgMCwgMCwgMCwgMCwgMCwgNjg1LCAwLCAwLCA2NjUsIDAsIDY4NSwgMCwgNzk3LCA2NjgsIDcxNiwgMCwgNjg1LCA3OTgsIDAsIDAsIDAsIDAsIDAsIDEwOTAsIDEwOTEsIDEwOTIsIDEwOTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NDgsIDAsIDAsIDAsIDAsIDAsIDI5NTEsIDAsIDAsIDAsIDc1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ3LCA4MDcsIDgwOCwgMCwgMCwgMCwgMCwgMCwgMTExOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA1NTYxNiwgMCwgMCwgMCwgMzEzMzQ0MCwgMCwgMCwgMCwgMCwgNzQ3LCAwLCAwLCA4MTIsIDY5MiwgMCwgMCwgMCwgODE3LCAwLCAwLCAwLCAwLCAwLCAwLCAyMDczLCAwLCAyMDc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAyLCAwLCAwLCAxNzAzLCAwLCAwLCAxNzA0LCAwLCA4MTksIDAsIDAsIDAsIDY4NSwgNjkyLCAwLCAwLCA2ODUsIDgxNywgODE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDksIDAsIDAsIDAsIDAsIDAsIDAsIDc1NiwgODcwLCA4NzMsIDUzNCwgNTM0LCA1MzQsIDg4NSwgODg5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDkxMSwgOTE1LCA5MTgsIDU1NiwgOTI2LCA1NTYsIDU1NiwgNTU2LCA5NDEsIDk0MywgOTQ2LCA1NTYsIDU1NiwgNTU2LCA5NTgsIDk2MiwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCA5ODAsIDk4NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDA0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ2OSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjI3LCA1ODAsIDU4MCwgMjYzMCwgMjYzMSwgNTgwLCAxMDIwLCA1ODAsIDU4MCwgNTgwLCAxMDMyLCAxMDM2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDEwNDgsIDEwNDksIDEwNTAsIDgzOCwgNTM0LCA4ODUsIDg4OSwgMTA1NSwgOTExLCA1NTYsIDk1OCwgOTYyLCAxMDYwLCAwLCA5ODUsIDU4MCwgMTAzMiwgMTAzNiwgMTA2NSwgMTEwMSwgMCwgMCwgMCwgMCwgMTEwNSwgMCwgMCwgMTEwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAyNDk4NTYsIDI0OTg1NiwgMjQ5ODU2LCAyNDk4NTYsIDEsIDEyMjkwLCAxMjk4LCA1MzQsIDUzNCwgMTMwMiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzEyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTcyNywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzk2LCA1MzQsIDEzNDEsIDAsIDU1NiwgNTU2LCA1MzQsIDEzMTksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMzMiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMwNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI2NiwgMTI3MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgMTM4MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzkwLCA1NTYsIDU1NiwgMTM5NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzODUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU5NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDE0ODIsIDU4MCwgNTgwLCAxNDg2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTI5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0OTYsIDU4MCwgNTgwLCAxNTAzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MTYsIDE2MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTUsIDAsIDAsIDAsIDE2NDcsIDAsIDE2NDksIDAsIDAsIDAsIDE2NTEsIDAsIDc0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzAsIDAsIDAsIDY5NjMyLCA3MzcyOCwgMCwgNDE4LCA0MTgsIDAsIDAsIDY1NTM2LCA0MTgsIDAsIDAsIDAsIDUzNCwgMTcwOSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTcxNSwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCA1NTYsIDI4MTIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDUzNCwgNTM0LCAxNzg3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCAwLCA1NTYsIDE4MDMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTgzOSwgNTU2LCA1NTYsIDU1NiwgMTg0MywgNTU2LCA1NTYsIDE4NDgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4OTIsIDU1NiwgMjYwMDksIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDEyNjksIDE0NTMsIDEzNjEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDE5MDYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MTcsIDU4MCwgNTgwLCA1ODAsIDE5MzUsIDU4MCwgNTgwLCA1ODAsIDE5MzksIDU4MCwgNTgwLCAxOTQ0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk0NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAyMDEwLCAwLCAxMDc3LCAwLCAwLCAwLCAyMDEyLCAwLCAxMDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTQ3LCAwLCA1MzQsIDUzNCwgNTM0LCAyMTc3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCAxODAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNjMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg1MCwgNTU2LCA1NTYsIDU4MCwgNTgwLCAyMzUwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzNDYsIDU4MCwgNTgwLCAwLCAyNTUwLCAwLCAxODAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTY5LCA1NTYsIDI1NzEsIDU1NiwgNTU2LCAyNjEzLCA1NTYsIDU1NiwgNTU2LCAwLCAwLCAwLCAyNjE2LCAwLCAxODk2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMjE5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIyNSwgMCwgMCwgMjc2MSwgMCwgMCwgMCwgNTM0LCAyNzY1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMTY2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzE3MSwgNTM0LCA1MzQsIDI3ODksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI5NSwgNTM0LCA1MzQsIDU1NiwgNTU2LCAyODM2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4NjUsIDU1NiwgNTU2LCA1MzQsIDUzNCwgMjk4NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzEwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjk5OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTM0MSwgMTgwMSwgNTU2LCA1NTYsIDU1NiwgMzAyNSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzIwNSwgNTU2LCA1NTYsIDMwMzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI0NywgNTU2LCA1NTYsIDU4MCwgNTgwLCAzMDY3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NDMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzQ1LCA1ODAsIDU4MCwgNTgwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI2NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTU5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNjMsIDMyODUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyODksIDMzMzYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzM0MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMzNDYsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwNjYsIDAsIDAsIDAsIDE1NDUsIDAsIDAsIDAsIDAsIDAsIDE2MjAsIDAsIDAsIDE2MjMsIDAsIDE2MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NSwgNTc4LCA1NTUsIDU3OCwgNTU1LCA1NTUsIDU3OCwgNTU1LCA1NTYsIDU1NiwgMzM1MSwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzU1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzM2MSwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCA5ODEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwMTAsIDEwMTIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTAyOSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDUzNCwgNTgwLCA1NTYsIDMzNzcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1NTYsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI1MSwgMCwgMzEzMiwgMzI1MywgMCwgMCwgMzI1NiwgMzEzMiwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMzOTYsIDUzNCwgNTM0LCA1MzQsIDM0MDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzQyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MzYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzODgsIDAsIDAsIDAsIDM5MiwgMzg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzM0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNCwgMCwgMzQ2LCAwLCA2OTYzMiwgNzM3MjgsIDAsIDAsIDAsIDAsIDAsIDY1NTM2LCAwLCAwLCAwLCAwLCA0MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNiwgMCwgMCwgMCwgMCwgNTE1LCA1MTUsIDUxNSwgNTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTUsIDUxNSwgNTE1LCA1MTUsIDUxNSwgNTE1LCA1MTUsIDUxNSwgNTQ4LCA1NzEsIDU0OCwgNTcxLCA1NDgsIDU0OCwgNTcxLCA1NDgsIDU5NSwgNTcxLCA1NzEsIDU3MSwgNTcxLCA1NzEsIDU3MSwgNTcxLCA1OTUsIDU5NSwgNTk1LCA1NDgsIDU5NSwgNTk1LCA1OTUsIDU5NSwgNTk1LCA1OTUsIDU5NSwgNTcxLCA1NzEsIDYxMCwgNjE1LCA1OTUsIDYxNSwgNjIxLCAxLCAxMjI5MCwgMCwgMCwgNzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjY4LCA1MzQsIDUzNCwgODc2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg5NCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDkwNSwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCA5ODIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTAwMSwgMTAwNSwgMTAxMSwgNTgwLCAxMDE2LCA1ODAsIDU4MCwgMTAyMywgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDQxLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDU4MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTA2NiwgMCwgMCwgMTU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc2NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI2OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgMCwgMCwgMTE2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE3MywgMCwgMCwgMCwgMTE3OCwgMCwgMCwgMCwgMCwgMTA5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc0NDMyLCAyNzQ0MzIsIDI3NDQzMiwgMCwgMjc0NDMyLCAyNzQ0MzIsIDI3NDQzMiwgMjc0NDMyLCAxMjU2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI2OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMjc5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc1NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTk3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTM0MSwgOTAxLCA1NTYsIDU1NiwgNTU2LCAxMzQ3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4NzcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwOSwgMCwgNTgwLCAxODk5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU1NiwgNTU2LCAxMzYxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDEzNzEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNDY4LCA1NTYsIDU1NiwgMzQ3MCwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MjIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwMDksIDEzNDEsIDk3NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTkwLCAxOTkxLCAxOTkyLCA1MzQsIDE5OTQsIDUzNCwgNTM0LCA1NTYsIDE5OTgsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCAzMzY3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMzNzEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMyMzIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDIzODQsIDUzNCwgNTM0LCA1MzQsIDIzODgsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCAxNDM5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDUzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM4MSwgMjM4MiwgMjM4MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM0MTAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCAxNDYzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NzcsIDU4MCwgNTgwLCAxNDk4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTUxNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMDA1LCAwLCAyMDA3LCAwLCAyMDA5LCAwLCAyMDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDM0LCAyMDM1LCAwLCAyMDM3LCAyMDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU1LCAwLCAwLCAwLCAxNTYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODY3MjAsIDI4NjcyMCwgMCwgMjg2NzIwLCAyODY3MjAsIDEsIDEyMjkwLCAwLCAwLCAwLCAxNTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDAsIDAsIDE2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MzQsIDAsIDU1NiwgMTg1MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzM2MywgMCwgMTU1NiwgMCwgMCwgMCwgMCwgMCwgMTU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA1LCAyMDQ4MDAsIDIwNDgwMCwgMCwgMjA1MTA1LCAyMDQ4MDAsIDEsIDEyMjkwLCAwLCAwLCAwLCAyMDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzcsIDAsIDAsIDAsIDAsIDAsIDIxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExODgsIDAsIDAsIDUzNCwgMjE2NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNzMsIDUzNCwgMjI1MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU4NCwgMjMzNywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM3NSwgNTgwLCAyMjExLCAwLCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTk3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTg4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODMxLCA1NTYsIDU1NiwgNTU2LCA1MzQsIDMxMDcsIDU1NiwgMzEwOSwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTM4MTEyLCAxMTcwLCAwLCAwLCAwLCAwLCAwLCAzMTMyLCAzMzMwLCAwLCAwLCAzMzMyLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDMzMzUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzc0LCA1MzQsIDUzNCwgNTM0LCAxNzc4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NzYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MzUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzMzNywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzM1MCwgNTU2LCA1NTYsIDMzNTIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4NTIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDMzNjYsIDU4MCwgNTgwLCAzMzY4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTQ2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMTMyLCAwLCAzMzg4LCAwLCAzMzkwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDkwMiwgNTU2LCA1NTYsIDAsIDAsIDAsIDc4MywgMCwgNzgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMsIDAsIDAsIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTU3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODQ4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NDcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgOTIyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM4MSwgNTU2LCA1NTYsIDk3MiwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgOTk2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTEwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNzgxMTQsIDEwNjYsIDAsIDAsIDEwNzAsIDEwNzQsIDAsIDAsIDEwNzgsIDEwODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjIsIDAsIDAsIDAsIDAsIDEyMjUsIDAsIDExODEsIDAsIDUzNCwgMzE2MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIyMDEsIDUzNCwgNTgwLCA1ODAsIDU4MCwgMzIxOCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjYyOSwgNTgwLCA1ODAsIDU4MCwgMzQ3LCAzNDcsIDM0OSwgMzQ3LCAwLCAwLCAzNDcsIDM0NywgMCwgMCwgMCwgMCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAyMTI1LCAwLCAwLCAyMTI4LCAwLCA1MzQsIDUzNCwgMjEzMSwgNTM0LCA1MzQsIDAsIDAsIDAsIDM0NywgMzQ3LCAzNDksIDM0NywgMzQ3LCAzNDcsIDM0NywgMzQ3LCAzNDcsIDUwNiwgMzQ3LCAzNDcsIDM0NywgMzQ3LCAzNDcsIDM0NywgMzQ3LCAzNDcsIDM0NywgMzQ3LCAzNDcsIDM0NywgMzQ3LCAzNDcsIDM0NywgMzQ3LCA1NDksIDU3MiwgNTQ5LCA1NzIsIDU0OSwgNTQ5LCA1NzIsIDU0OSwgNTk2LCA1NzIsIDU3MiwgNTcyLCA1NzIsIDU3MiwgNTcyLCA1NzIsIDU5NiwgNTk2LCA1OTYsIDU0OSwgNTk2LCA1OTYsIDU5NiwgNTk2LCA1OTYsIDU5NiwgNTk2LCA1NzIsIDU3MiwgNTQ5LCA1NzIsIDU5NiwgNTcyLCA1OTYsIDEsIDEyMjkwLCAwLCAwLCAwLCA3MTUsIDAsIDcxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0NzM0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDc1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjczLCA2NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NCwgNzk1LCAwLCAwLCAwLCAwLCA3OTUsIDAsIDAsIDAsIDAsIDAsIDc5NSwgMCwgMCwgNzk0LCA4MDksIDAsIDgwMywgMCwgNjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTE3MDU2LCAwLCAwLCAwLCAwLCA4MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1OTE2OCwgMzY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTUsIDUzNCwgNTM0LCA4MzksIDUzNCwgNTM0LCA1MzQsIDUzNCwgODU3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzI4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMyNzIsIDUzNCwgNTM0LCA1MzQsIDMyNzMsIDMyNzQsIDUzNCwgNTM0LCA4NzcsIDg3OSwgNTM0LCA1MzQsIDg5MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgOTA2LCA5MTIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwNjYsIDAsIDE1NDMsIDAsIDAsIDAsIDE1NDksIDU1NiwgNTU2LCA1NTYsIDkzMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDk1MCwgOTUyLCA1NTYsIDU1NiwgOTYzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg0MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODMxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MzUsIDU4MCwgMTAyNCwgMTAyNiwgNTgwLCA1ODAsIDEwMzcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgNTM0LCA1ODAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwNjYsIDE1NDAsIDAsIDAsIDAsIDE1NDYsIDAsIDAsIDAsIDAsIDAsIDEzMTA3MiwgMCwgMTMxMDcyLCAxMzEwNzIsIDEzMTA3MiwgMTMxMDcyLCAwLCAxMzEwNzIsIDEzMTA3MiwgMTMxMDcyLCAxMzEwNzIsIDEzMTA3MiwgMTMxMDcyLCAwLCAwLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDEzMTA3MiwgMSwgMTIyOTAsIDgzOSwgODc5LCA1MzQsIDg5MCwgNTM0LCA5MTIsIDk1MiwgNTU2LCA5NjMsIDU1NiwgMCwgOTg2LCAxMDI2LCA1ODAsIDEwMzcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjAwNSwgMCwgMjAwNywgMCwgMjAwOSwgMCwgMjAxMSwgMCwgMCwgMjM5NywgMCwgMCwgMCwgMCwgMCwgMzMwLCAzMzEsIDMzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjczMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzMiwgMzY0LCAzNjQsIDAsIDAsIDExMzUsIDAsIDAsIDAsIDExMzgsIDAsIDExNDAsIDAsIDAsIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU3NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwMDksIDE4OTcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDExNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNTYsIDAsIDAsIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI1NTUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU1OSwgMTE1OCwgMCwgMCwgMCwgMCwgMTE2MywgMCwgMCwgMCwgMCwgMTE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgMCwgMCwgMTI0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc0MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODk3LCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgOTE0LCA1MzQsIDUzNCwgNTM0LCAxMjg2LCAxMjg4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDkwNywgNTU2LCA1NTYsIDUzNCwgNTM0LCA1MzQsIDEzNDEsIDkwMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzQ4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAyMjk4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY0MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY0NSwgNTgwLCA1ODAsIDU4MCwgMTQ0MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY3MCwgMjY3MSwgNTgwLCA1ODAsIDE0OTQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTUwOCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjc4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTM0LCA1MzQsIDE5OTYsIDU1NiwgNTU2LCA1NTYsIDIwMDAsIDU4MCwgNTgwLCAxNTE5LCAxNTIwLCA1ODAsIDU4MCwgNTgwLCAwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDE1MjgsIDUzNCwgNTM0LCAxNTMxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDY2LCAxNTQxLCAwLCAwLCAwLCAxNTQ3LCAwLCAwLCAwLCAwLCA1NTYsIDU1NiwgNTU2LCAyNTUzLCA1NTYsIDI1NTQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg2MywgNTgwLCA1ODAsIDU4MCwgMTUzMiwgNTU2LCA1NTYsIDE1MzUsIDU4MCwgMTUzNiwgNTgwLCA1ODAsIDE1MzksIDEwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwMywgMCwgMCwgMCwgMCwgMTYzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNywgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAzNjQsIDM2NCwgMCwgMCwgMCwgMCwgMTY5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyNiwgMCwgMCwgNTM0LCAxNzM4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjIwNywgMjU0OSwgNTM0LCA1MzQsIDUzNCwgMTc4OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzk0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg5MSwgNTU2LCA1NTYsIDI2MDA5LCAxODk2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNDcwLCAxNDcyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk2MCwgNTgwLCA1ODAsIDE5NjMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTU2LCA1NTYsIDE4NzAsIDU1NiwgNTU2LCA1NTYsIDE4NzUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODg0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4OTAsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTI3LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MzEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTA0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY3MiwgNTgwLCA1ODAsIDU4MCwgMTk3MSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxNTA0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzMTYsIDU4MCwgNTgwLCAyMzIwLCA1ODAsIDU4MCwgMTk4NiwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMjY5MywgMCwgMCwgMCwgMCwgMCwgMjA5OSwgMCwgMjEwMSwgMjEwMiwgMjEwMywgMCwgMjEwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCA0MjQsIDY1NTM2LCAwLCAwLCAwLCAwLCAyMTIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTI5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDIyMTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzA0NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDUzNCwgNTM0LCAyMTM2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMzMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTY2LCA1MzQsIDIxNjgsIDUzNCwgMjE3MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI3MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTc4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE4NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNzkyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTE5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIyMDYsIDAsIDAsIDAsIDAsIDIyMTMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDkzOSwgNTU2LCA5NDQsIDU1NiwgOTUxLCA1NTYsIDk1NCwgNTU2LCA1NTYsIDk2OCwgNTU2LCAyMjIxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQxNSwgNTU2LCA1NTYsIDU1NiwgMjI1MSwgNTU2LCAyMjUzLCA1NTYsIDIyNTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDcsIDU1NiwgNTU2LCA1NTYsIDI2MTAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjY0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI3MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM2OSwgNTU2LCA1NTYsIDU1NiwgMTM3NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI5MywgMCwgMCwgMCwgMCwgMjMwMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk0MiwgNTgwLCA1ODAsIDU4MCwgMTk0NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMwOCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI4ODAsIDU4MCwgNTgwLCA1ODAsIDIzMzgsIDU4MCwgMjM0MCwgNTgwLCAyMzQzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTYxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzUxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM1NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk1OCwgMTk1OSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIzNCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgMCwgMCwgMjQwMCwgMjQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk5LCAwLCAwLCAwLCAyNDM2LCAwLCAwLCAyNDM5LCAwLCAwLCAwLCAwLCAyNDQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODE4MDQ4LCAyODQ2NzIwLCAwLCAyOTE2MzUyLCAwLCAwLCAzMDAyMzY4LCAwLCAwLCAwLCAyNDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDU5LCAwLCAwLCAwLCAwLCA1NTYsIDU1NiwgMjU1MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg1MSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMCwgMjQ3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ4NSwgMCwgMCwgMCwgMCwgMCwgMTE5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTExMDQ0LCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUwMywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTIwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNTYyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjU2NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMwNCwgNTgwLCA1ODAsIDU4MCwgMjYzMywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI5MDEsIDU4MCwgNTM0LCA1MzQsIDUzNCwgMjY4NiwgNTU2LCA1NTYsIDU1NiwgMjY4OCwgNTgwLCA1ODAsIDU4MCwgMjY5MCwgMjY5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwOSwgMCwgMjcxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1OTE2OCwgMCwgMCwgMCwgMCwgMjg1NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyODY0LCA1ODAsIDI4NjUsIDU4MCwgNTgwLCAyOTA0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1ODAsIDU4MCwgMCwgMCwgMCwgMzExMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDI1NDQwNywgMjU0NDA3LCAyNTQ0MDcsIDEsIDEyMjkwLCA1NTYsIDU1NiwgNTU2LCAzMDUzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgMzA2MSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NDksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM3MSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA5NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1MzQsIDUzNCwgMjM4NiwgMjM4NywgNTU2LCA1NTYsIDIzOTAsIDIzOTEsIDUzNCwgNTM0LCAzMzM4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMzQ3LCA1MzQsIDUzNCwgMzM0OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzUzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMzYyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNDI3LCA1ODAsIDU4MCwgNTgwLCAzNDMxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwMzEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDU4MCwgNTU2LCA1NTYsIDU1NiwgMzM2NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMzY5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM1NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMzNzgsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTU2LCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgMzQ0OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgMzE3OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM0NjIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgMzMwMCwgNTgwLCA1ODAsIDU4MCwgMzMwMywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM0NzYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgNTM0LCA1ODAsIDU1NiwgMCwgMCwgMzQ5MSwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzE1OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM1NjUsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1NzEsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMzcyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNTc3LCA1ODAsIDU4MCwgMzU3OSwgMCwgMzU4MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyMjQsIDU1NiwgNTU2LCAyMjI3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjM1LCA0MDAsIDAsIDAsIDAsIDAsIDAsIDM2NywgMzc1LCA0MDMsIDAsIDAsIDAsIDAsIDAsIDM2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA1NCwgNDA4LCA0MTAsIDAsIDAsIDM2NywgMzc1LCAwLCA2OTYzMiwgNzM3MjgsIDAsIDAsIDAsIDAsIDQyNiwgNjU1MzYsIDAsIDAsIDAsIDAsIDU1NiwgMjU1MSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjcxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNDI2LCA0MjYsIDAsIDQyNiwgMCwgNDEwLCA0MjYsIDQ0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1NTYsIDUzNCwgNTU2LCA1MzQsIDUzNCwgNTU2LCA1MzQsIDM2NywgMCwgMCwgMzk1LCAwLCAwLCAwLCAwLCAwLCAzNTAsIDAsIDAsIDM2NywgMCwgMCwgMzk1LCAwLCA0MDgsIDAsIDQ5MCwgNDkwLCAwLCA0OTAsIDQ5MCwgNDkwLCA0OTAsIDQ5MCwgNDkwLCA0OTAsIDQ5MCwgNTE2LCA1MTYsIDUxNiwgNTE2LCA0NDksIDQ0OSwgNDQ5LCA0NDksIDUyNCwgNDQ5LCA0NDksIDUyNSwgNDQ5LCA1MTYsIDUzMCwgNTE2LCA1MTYsIDUxNiwgNTMwLCA1MTYsIDUxNiwgNTE2LCA1MTYsIDUzMiwgNTUwLCA1NzMsIDU1MCwgNTczLCA1NTAsIDU1MCwgNTczLCA1NTAsIDU5NywgNTczLCA1NzMsIDU3MywgNTczLCA1NzMsIDU3MywgNTczLCA1OTcsIDU5NywgNTk3LCA1NTAsIDU5NywgNTk3LCA1OTcsIDU5NywgNTk3LCA1OTcsIDU5NywgNTczLCA1NzMsIDYxMSwgNjE2LCA1OTcsIDYxNiwgNjIyLCAxLCAxMjI5MCwgMCwgMCwgNjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTY3LCAxNTY4LCAwLCA3ODksIDAsIDAsIDAsIDAsIDUzNCwgODM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4NjMsIDg2NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3OTAsIDE3OTIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCAwLCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDU4MCwgOTgzLCA5ODcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwMTMsIDU4MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5MzYsIDkzOCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODI5LCA1NTYsIDU1NiwgMjgzMiwgNTU2LCA1NTYsIDc4MTE0LCAxMDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDgzLCAwLCAwLCAwLCAwLCAwLCAxMjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDUwLCAwLCAwLCAwLCAwLCAxMDg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDk4LCAwLCAwLCAwLCAwLCAwLCAxMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1ODEsIDE1ODIsIDAsIDAsIDAsIDAsIDEwODUsIDEyMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDM0NywgMzQ4LCAzNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDI4MjYyNCwgMjgyNjI0LCAyODI2MjQsIDAsIDAsIDAsIDEyMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjAsIDEyMjksIDUzNCwgNTM0LCA1MzQsIDEyNTksIDUzNCwgNTM0LCA1MzQsIDEyNjMsIDUzNCwgNTM0LCAxMjc0LCA1MzQsIDUzNCwgMTI3OCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzAwMSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMyNywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMjk5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjQ5NywgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzQxLCA5MDEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM1MSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MjMsIDU1NiwgNTU2LCA1NTYsIDE0MzAsIDU1NiwgNTU2LCAyNjAwOSwgMTM0MSwgOTc1LCA1ODAsIDEzNTUsIDU1NiwgNTU2LCAxMzY2LCA1NTYsIDU1NiwgMTM3MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjgyOCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQ2MiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxNSwgNTgwLCAxNDc5LCA1ODAsIDU4MCwgNTgwLCAxNDgzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg3NywgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAxNTcxLCAxNTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjEyLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDM2NCwgMzY0LCAwLCA2OTYsIDAsIDE2MTYsIDAsIDE2MTgsIDAsIDAsIDAsIDE2MjIsIDAsIDAsIDAsIDE2MjYsIDAsIDAsIDAsIDE2MzAsIDAsIDAsIDAsIDAsIDE1NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMzY0LCAzNjQsIDY5NSwgMCwgNTM0LCA1MzQsIDUzNCwgMTcyNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc4MiwgMTc4MywgNTM0LCA1MzQsIDU1NiwgMTgzNywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MTgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg4OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwOSwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTk3NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5ODEsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDIwMzEsIDAsIDIwMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMDAyNDYsIDE1MTU1MiwgMjIwMDI0NiwgMCwgMCwgMjE3NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxODYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NTgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc2NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MTQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAwLCAwLCAwLCAwLCA1ODAsIDIzMDEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxMDM4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDUzNCwgNTgwLCA1NTYsIDU4MCwgNTgwLCAyMzk0LCAyMzk1LCAwLCAxNTQ0LCAwLCAxNTUwLCAwLCAxNTU2LCAwLCAxNTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA1MiwgMCwgMCwgMjQ3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAzNDUsIDM0NCwgNjU1MzYsIDM0MywgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTMwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI3NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1ODAsIDI2NjEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDc1LCA1ODAsIDU4MCwgMCwgMCwgMjcyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2NSwgMCwgMCwgNTM0LCAyNzk3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjUxMSwgNTM0LCA1NTYsIDU1NiwgMjg0NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjU5LCA1NTYsIDU1NiwgMCwgMCwgMjk3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgODU1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDAsIDAsIDAsIDAsIDMxMjIsIDMxMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MjQ4MzIsIDI0MzMwMjQsIDAsIDAsIDI0NTc2MDAsIDMxNDksIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3MzcsIDMxNzIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNDIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDA2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDMyMjksIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzQyNiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjM5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzQ0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDMyMzYsIDU1NiwgMzIzOCwgNTgwLCAzMjQwLCAzMjQxLCAwLCAwLCAwLCAwLCAzMjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCA2NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMywgMzk3LCAwLCAwLCAwLCAzMjMsIDAsIDAsIDAsIDMyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNjEsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzE1NCwgMzE1NSwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMTU5LCAzMTYwLCAzMjYzLCA1MzQsIDUzNCwgNTM0LCAzMjY2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTMzMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1ODAsIDU4MCwgMzMxOCwgNTM0LCAzMzE5LCA1NTYsIDMzMjAsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQzLCA1NjYsIDU0MywgNTY2LCA1NDMsIDU0MywgNTY2LCA1NDMsIDU1NiwgNTU2LCAzNTQzLCA1NTYsIDM1NDQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgMzU1MSwgNTgwLCAzNTUyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDM1MzYsIDUzNCwgMzUzNywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzMwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTgzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA0MDksIDM1NSwgMCwgMCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgMCwgNjM4LCAwLCAwLCA2NDEsIDY0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU5MSwgMCwgMCwgMTU5NCwgMCwgMCwgMCwgMCwgNDY2LCA0NzcsIDQ2NiwgMCwgMCwgNDY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTcsIDUxNywgNTIxLCA1MjEsIDUyMSwgNTIxLCA0NjYsIDQ2NiwgNDY2LCA0NjYsIDQ2NiwgNDY2LCA0NjYsIDQ3MSwgNDY2LCA1MjEsIDUxNywgNTIxLCA1MjEsIDUxNywgNTIxLCA1MjEsIDUyMSwgNTIxLCA1MzMsIDU1MSwgNTc0LCA1NTEsIDU3NCwgNTUxLCA1NTEsIDU3NCwgNTUxLCA1OTgsIDU3NCwgNTc0LCA1NzQsIDU3NCwgNTc0LCA1NzQsIDU3NCwgNTk4LCA1OTgsIDU5OCwgNTUxLCA1OTgsIDU5OCwgNTk4LCA1OTgsIDU5OCwgNTk4LCA1OTgsIDU3NCwgNTc0LCA2MTIsIDYxNywgNTk4LCA2MTcsIDYyMywgMSwgMTIyOTAsIDAsIDAsIDczMSwgMCwgMCwgMCwgNjM3LCA3MzEsIDAsIDczNywgNzM4LCA2MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NiwgMCwgMCwgNjU5LCA2NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg2LCAwLCA3OTEsIDAsIDAsIDAsIDAsIDAsIDE1NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMywgMzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MSwgMCwgMCwgMCwgMCwgMCwgMCwgNjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDE2LCAwLCAwLCAwLCAwLCA4MDYsIDAsIDAsIDAsIDAsIDAsIDYzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAzNDksIDM0NywgNjU1MzYsIDAsIDAsIDAsIDAsIDc3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc3LCA3NzcsIDAsIDYzNywgMCwgMCwgMCwgNzg2LCAwLCA3OTEsIDAsIDc3NywgMCwgODA2LCAwLCAwLCAwLCA2NTgsIDAsIDc3NywgNzkxLCA4MjksIDAsIDUzNCwgODM1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg1NCwgODU4LCA4NjQsIDUzNCwgODY5LCA1NTYsIDU1NiwgOTI3LCA5MzEsIDkzNywgNTU2LCA5NDIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NTksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxNDI0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwOSwgMTM0MSwgOTc1LCA1ODAsIDUzNCwgNTM0LCA4ODYsIDUzNCwgNTM0LCA1NTYsIDU1NiwgOTU5LCA1NTYsIDU1NiwgMCwgNTgwLCA1ODAsIDEwMzMsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTAzMywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDUzNCwgNTgwLCA1NTYsIDAsIDEwODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NDksIDAsIDAsIDAsIDAsIDExMDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTMsIDAsIDAsIDAsIDExMTcsIDExMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMzY0LCAyMDg4OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzksIDAsIDExODIsIDAsIDAsIDAsIDAsIDAsIDExODcsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNSwgMCwgMCwgMTA4NiwgMCwgMCwgMCwgMTIxMSwgMCwgMTIxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyNywgMCwgMCwgMCwgMCwgNjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTY0LCAyOTY1LCAwLCAwLCAxMjMwLCAxMTg3LCAwLCAxMjExLCAxMjMzLCAwLCAxMjM2LCAwLCAwLCAwLCAwLCAwLCAxMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzM5LCAwLCAwLCAwLCAwLCAyNzQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTksIDAsIDAsIDAsIDMwMywgMjQyNDgzMiwgMjQzMzAyNCwgMCwgMCwgMjQ1NzYwMCwgMCwgMTI0NSwgMCwgMCwgMCwgMCwgMCwgMTI0NSwgMCwgMCwgMTEzNiwgMTI0NSwgMCwgMTI1MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI3OSwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1MTQsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTM0LCA1MzQsIDEyNTgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTI2NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzQ1NSwgNTM0LCA1MzQsIDM0NTcsIDU1NiwgNTU2LCA1NTYsIDUzNCwgNTM0LCAxMjg1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEyOTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMzNDEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU4MCwgMzYwNywgMzYwOCwgMzYwOSwgNTM0LCA1NTYsIDU4MCwgNTM0LCA1NTYsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzLCAwLCAwLCAzMzMsIDAsIDAsIDMzMywgMCwgMCwgMCwgNTM0LCA1MzQsIDEzMDEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMzA4LCA1MzQsIDUzNCwgNTM0LCAxMzE1LCAxMzE3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTQ5LCA1MzQsIDEzMzksIDUzNCwgMTM0MSwgOTAxLCAxMzQzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM1MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjIyNSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI0NCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjQ4LCA1NTYsIDEzNTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM3NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI0MSwgNTU2LCAyMjQzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MjUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwOSwgMTM0MSwgOTc1LCA1ODAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQwMCwgNTU2LCA1NTYsIDU1NiwgMTQwNywgMTQwOSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM4NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzk1LCA1NTYsIDE0ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ4NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0OTIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM1MiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2MjgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0OTksIDE1MDEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI4NzgsIDU4MCwgNTgwLCAyODgxLCAxNTUwLCAwLCAwLCAwLCAxNTU2LCAwLCAwLCAwLCAxNTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTU3MzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDk0LCAwLCAwLCAwLCAxNTczLCAxNTc0LCAwLCAwLCAwLCAwLCAwLCAxNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDAsIDAsIDAsIDM3MywgMCwgNjU1MzYsIDAsIDAsIDAsIDE2MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MjcsIDE2MjgsIDAsIDAsIDAsIDAsIDAsIDE2MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1NDQwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzgyLCAwLCAwLCAwLCAzODYsIDAsIDAsIDAsIDE2ODUsIDAsIDAsIDAsIDAsIDAsIDE2ODksIDAsIDAsIDE2OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NTYsIDAsIDAsIDI3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDE2ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MDUsIDAsIDE3MDcsIDE2ODEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzE5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc5MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTM0MSwgMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyOTUsIDAsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY2NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ0NiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1MzQsIDUzNCwgMTcyNSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzM2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE3OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTQzLCA1MzQsIDIxNDUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc1MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIyMDcsIDAsIDAsIDAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTQwMywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE0MDgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTM0LCA1MzQsIDE3NTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE3MiwgNTM0LCA1MzQsIDIwMDIsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYsIDAsIDAsIDIwMTksIDIwMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MiwgMCwgMCwgMCwgMjA1NSwgMjA1NiwgMCwgMCwgMjA1OCwgMjA1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYxNzM0NCwgMCwgMCwgMCwgMCwgMjA4MSwgMCwgMCwgMCwgMCwgMjA4NCwgMjA4NSwgMCwgMCwgMCwgMCwgMCwgMjA5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzI1OSwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDg0OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTUyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNjEsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM0NTIsIDUzNCwgMzQ1NCwgNTM0LCA1MzQsIDM0NTYsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNTA5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCAzNTk1LCA1MzQsIDUzNCwgMjE2NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE3NCwgNTM0LCA1MzQsIDUzNCwgMjE5MSwgNTM0LCA1MzQsIDUzNCwgMjE5NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTk5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzU5LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzMyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDIyMzcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI0NiwgNTU2LCA1NTYsIDIyNDksIDU1NiwgNTU2LCAyMjc3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyODEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI4NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MDgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwOCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgMjMyNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzMzLCA1ODAsIDU4MCwgMjMzNiwgNTgwLCA1ODAsIDIzNjQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM2OCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzczLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY2NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTc5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwOCwgMCwgMCwgMCwgMCwgMCwgMCwgNjg3LCAwLCAwLCAwLCA3NzAsIDAsIDAsIDAsIDAsIDc4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDE3NjEyOCwgMTc2MTI4LCAxNzYxMjgsIDUzNCwgNTM0LCAyNDg4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI0OTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA4ODIsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzQxMSwgNTU2LCA1NTYsIDU1NiwgMzQxNSwgNTU2LCA1NTYsIDUzNCwgNTM0LCAyNTE0LCA1MzQsIDUzNCwgMjUxNiwgNTM0LCAyNTE3LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI1MjQsIDUzNCwgNTM0LCAyNTI4LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTM5LCA1NTYsIDU1NiwgMjU2MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNDcyLCA1ODAsIDU4MCwgNTU2LCA1NTYsIDU1NiwgMjU3NSwgNTU2LCA1NTYsIDU1NiwgMjU3OCwgNTU2LCA1NTYsIDI1ODAsIDU1NiwgMjU4MSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MjcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTgxNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODIwLCA1ODAsIDI2NDYsIDU4MCwgMjY0NywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NTUsIDU4MCwgNTgwLCAyNjU5LCAwLCAyNjk2LCAyNjk3LCAwLCAwLCAyNzAwLCAyNzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTc4NDk2LCAyNjcwNTkyLCAwLCAyNzQ0MzIwLCAwLCAwLCAyNzcyLCA1MzQsIDI3NzUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc4MCwgNTM0LCA1MzQsIDUzNCwgMjc4MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMDAyLCAzMDAzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjQ5NCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3NDQsIDUzNCwgNTM0LCA1MzQsIDE3NDgsIDUzNCwgNTM0LCAxNzUzLCAyODA4LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMzNTgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODE5LCA1NTYsIDI4MjIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjgyNywgNTU2LCA1NTYsIDU1NiwgMjgzMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjI1NSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjIyOCwgNTU2LCAyMjMwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODU3LCA1NTYsIDU1NiwgNTU2LCAwLCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjY1MiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg2OCwgNTgwLCAyODcxLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI4NzYsIDU4MCwgNTgwLCA1ODAsIDI4NzksIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTAzNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDUzNCwgNTgwLCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjkwNiwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1ODAsIDU1NiwgNTM0LCA1MzQsIDU1NiwgNTU2LCA1ODAsIDU4MCwgMCwgMCwgMzExMiwgMCwgMzExNCwgMCwgMCwgMCwgMzExOCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzMDEzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgMzAyMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNjYsIDIyNjcsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDIyNzQsIDU1NiwgNTU2LCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA5OTQsIDU4MCwgNTgwLCAxMDA4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjM0MSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCA3MzMsIDUzNCwgNTgwLCA1NTYsIDAsIDAsIDMxMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTMsIDAsIDAsIDUzNCwgMzE3MywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MzksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzMTgzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwMzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzE5MywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzE5OSwgNTU2LCAzMjAxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMCwgMCwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgMjMwMywgNTgwLCAyMzA1LCA1ODAsIDU4MCwgNTgwLCAzMjI4LCA1ODAsIDMyMzAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDM0MjMsIDU4MCwgMzQyNSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg4OCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzNCwgNTM0LCA1MzQsIDAsIDMyNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjk4MiwgNTM0LCA1MzQsIDMyNjQsIDUzNCwgNTM0LCA1MzQsIDMyNjgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDEzMjgsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMzI3NywgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMyODIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjk0LCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzQ4MiwgNTgwLCA1ODAsIDM0ODQsIDU4MCwgMCwgMCwgMCwgNTU2LCAzMjg2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTg4MywgNTU2LCAzMjk1LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMzAxLCA1ODAsIDU4MCwgNTgwLCAzMzA1LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDIzODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDUzNCwgMzYwMSwgNTU2LCAzNjAyLCA1ODAsIDM2MDMsIDM0ODksIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDM0OTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMjY1LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDM1MDQsIDU1NiwgNTU2LCA1NTYsIDM1MDgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAzNTE2LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjYyNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0NzUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDM1MjEsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzNTI5LCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjg4MCwgMTIyODgwLCAxMjI4ODAsIDEyMjg4MCwgMTIyODgwLCAwLCAxMjI4ODAsIDAsIDIxMDU2MzEsIDEyMjkwLCAwLCAzNTMyLCAwLCAzNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAzNTQwLCAzNTQxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjIwOCwgMCwgMCwgMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzg3LCA1NTYsIDU1NiwgNTU2LCAxMzkxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzU3LCAzNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMCwgMjkyLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODgsIDAsIDAsIDAsIDAsIDM2NCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDM5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIyLCAwLCA3MzUsIDY1NCwgNDY3LCA0NjcsIDQ4MSwgMCwgMCwgNDgxLCAzNTgsIDM1OCwgMzU4LCA1MDMsIDM1OCwgMzU4LCAzNTgsIDM1OCwgNDY3LCA0NjcsIDU5OSwgNTc1LCA1NzUsIDU3NSwgNTc1LCA1NzUsIDU3NSwgNTc1LCA1OTksIDU5OSwgNTk5LCA1NTIsIDU5OSwgNTk5LCA1OTksIDU5OSwgNTk5LCA1OTksIDU5OSwgNTc1LCA1NzUsIDU1MiwgNTc1LCA1OTksIDU3NSwgNTk5LCAxLCAxMjI5MCwgNTU2LCA1NTYsIDkyOCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA5NjQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjk0LCAyNjE1LCAwLCAwLCAwLCAwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1NTYsIDU4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCA1MzQsIDUzNCwgODkxLCA1MzQsIDU1NiwgNTU2LCA1NTYsIDk2NCwgNTU2LCAwLCA1ODAsIDU4MCwgNTgwLCAxMDM4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2MzYsIDU4MCwgMjYzOCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjQyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDM0NDAsIDAsIDAsIDAsIDM0NDMsIDAsIDAsIDUzNCwgNTM0LCA3ODExNCwgMTA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA4NCwgMCwgMCwgMCwgMCwgNjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDMyLCAwLCAwLCAwLCAxMTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCAyMTMyLCAyMTMzLCA1MzQsIDUzNCwgMTM0MCwgMTM0MSwgOTAxLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxMzUzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU4MCwgMzU5MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzEzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDIxNDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI5OTAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDU1NiwgNTU2LCAxMzYyLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMwNDcsIDU1NiwgNTU2LCA1NTYsIDAsIDE1NTEsIDAsIDAsIDAsIDE1NTcsIDAsIDAsIDAsIDE1NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MjAzMiwgMCwgMTY1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2MiwgMCwgMTY2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDE3MjAzMiwgMTcyMDMyLCAxNzIwMzIsIDEsIDEyMjkwLCA1MzQsIDUzNCwgMTc3MSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTIzLCA1MzQsIDUzNCwgNTU2LCA1NTYsIDE4NTQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODY2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDkzMiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDE4MTUsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAxODg3LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwOSwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMxMiwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTQ4OCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTkyNCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzA3MywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE5MzcsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTUwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NDgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIzMSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1MzQsIDU4MCwgNTU2LCA1ODAsIDU4MCwgNTgwLCAxOTczLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAxOTgzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE0ODQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMjIyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDIwNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMywgMTE3MSwgMCwgMCwgNTM0LCAyMTUxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjc5NSwgNTM0LCAyMjM2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNjAwLCAyMzIzLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMDg5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2MjIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzIyNCwgNTgwLCA1ODAsIDI2OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMjAsIDI3MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MTksIDUzNCwgMjc3NCwgNTM0LCAyNzc2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyMTYwLCA1MzQsIDUzNCwgNTM0LCA1NTYsIDI4MjEsIDU1NiwgMjgyMywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzE5MCwgNTU2LCA1NTYsIDU1NiwgNTgwLCA1ODAsIDU4MCwgMjg3MCwgNTgwLCAyODcyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NTQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAwLCAwLCAwLCAwLCAyOTMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCAyOTgxLCA1MzQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzI4OSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMyMDIsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTgwLCAzMzA4LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxNCwgNTgwLCA1ODAsIDU1NiwgNTU2LCAzNTg5LCA1NTYsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzU5MywgNTgwLCAwLCAwLCAwLCA1MzQsIDUzNCwgNTM0LCAzMTUyLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDMxNTcsIDUzNCwgNTM0LCA1MzQsIDAsIDAsIDM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY0LCAwLCAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDcwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYwMDk2MCwgMCwgMCwgMjc2ODg5NiwgMjc3NzA4OCwgMjc4MTE4NCwgMCwgMCwgMzY5LCAwLCAwLCAzNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNDAsIDIwNDEsIDAsIDYwMCwgNTc2LCA1NzYsIDU3NiwgNTc2LCA1NzYsIDU3NiwgNTc2LCA2MDAsIDYwMCwgNjAwLCA1NTMsIDYwMCwgNjAwLCA2MDAsIDYwMCwgNjAwLCA2MDAsIDYwMCwgNTc2LCA1NzYsIDU1MywgNTc2LCA2MDAsIDU3NiwgNjAwLCAxLCAxMjI5MCwgNTU2LCA5MjMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjM0LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMTM2NywgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDM1NDcsIDM1NDgsIDU1NiwgNTU2LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTUwMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAzMTAyLCAzMTAzLCAzMTA0LCA1MzQsIDE2NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3NDgsIDAsIDAsIDE2ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNjUsIDAsIDAsIDU4MCwgNTgwLCA1ODAsIDE5MzgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDMyMjMsIDU4MCwgNTgwLCA1ODAsIDAsIDAsIDAsIDI3MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczNCwgMCwgMCwgMCwgMjk0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc2MCwgMCwgMCwgMCwgMCwgMzI0OSwgMCwgMzI1MCwgMCwgMCwgMCwgMCwgMzEzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzMywgMCwgNTM0LCA1MzQsIDUzNCwgMCwgMCwgMCwgMzYwLCAzNjEsIDM2MiwgMzYzLCAwLCAwLCAzNjQsIDAsIDI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgNzE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAzNjEsIDAsIDM2MCwgMCwgMCwgMCwgNjk2MzIsIDczNzI4LCAwLCAwLCAwLCAwLCA0MjcsIDY1NTM2LCAwLCAwLCAwLCAwLCA2ODUsIDUzNCwgNTM0LCA4MzgsIDg0MiwgODQ1LCA1MzQsIDg1MywgNTM0LCA1MzQsIDUzNCwgODY4LCA0MjcsIDQyNywgMCwgNDI3LCAwLCAzNjEsIDQyNywgNDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTAsIDY5MSwgMCwgMzY0LCAzNjQsIDM2NCwgMCwgMCwgMCwgMCwgMCwgNDkxLCA0OTEsIDAsIDQ5OCwgNDk4LCA0OTgsIDQ5OCwgNTA0LCA1MDUsIDQ5OCwgNDk4LCA1MTgsIDUxOCwgNTE4LCA1MTgsIDQ1MCwgNDUwLCA0NTAsIDQ1MCwgNDUwLCA0NTAsIDQ1MCwgNDUwLCA0NTAsIDUxOCwgNTE4LCA1MTgsIDUxOCwgNTE4LCA1MTgsIDUxOCwgNTE4LCA1NTQsIDU3NywgNTU0LCA1NzcsIDU1NCwgNTU0LCA1NzcsIDU1NCwgNjAxLCA1NzcsIDU3NywgNTc3LCA1NzcsIDU3NywgNTc3LCA1NzcsIDYwMSwgNjAxLCA2MDEsIDU1NCwgNjAxLCA2MDEsIDYwMSwgNjAxLCA2MDEsIDYwMSwgNjAxLCA1NzcsIDU3NywgNjEzLCA2MTgsIDYwMSwgNjE4LCA2MjQsIDEsIDEyMjkwLCA1MzQsIDUzNCwgODg3LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDk2MCwgNTU2LCA1NTYsIDAsIDU4MCwgNTgwLCAxMDM0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MDIsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyMzMyLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgMjUxMywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI4MDYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjU0MiwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAwLCAwLCA1NTYsIDU1NiwgNTU2LCAyMjE2LCA1NTYsIDIyMTgsIDU1NiwgNTgwLCAyNjc0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNDkxLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDI0OTUsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAwLCAwLCAwLCAwLCA1NTYsIDU1NiwgMjIxNSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA2MDIsIDU3OCwgNTc4LCA1NzgsIDU3OCwgNTc4LCA1NzgsIDU3OCwgNjAyLCA2MDIsIDYwMiwgNTU1LCA2MDIsIDYwMiwgNjAyLCA2MDIsIDYwMiwgNjAyLCA2MDIsIDU3OCwgNTc4LCA1NTUsIDU3OCwgNjAyLCA1NzgsIDYwMiwgMSwgMTIyOTAsIDAsIDAsIDY5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQxMCwgMCwgMCwgNzI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTUyLCAwLCAwLCAwLCA3MjgsIDAsIDc4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg0LCAwLCAwLCAwLCAwLCA2ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NCwgMzY0LCAzNjQsIDAsIDAsIDAsIDAsIDAsIDY3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE0NSwgMzE0NiwgMCwgMCwgMCwgNTU2LCA5MjQsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjYwLCAyMjYxLCAwLCAwLCAxMTc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDMzLCAwLCAwLCA1MzQsIDEzMDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNTQ4LCAwLCAwLCAxNDE4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwMDksIDEzNDEsIDk3NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyNjY0LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2NjgsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDE1MDUsIDU4MCwgNTgwLCAxNTA5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMTUxNSwgMCwgMCwgMTU1MywgMCwgMCwgMCwgMTU1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE2NywgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDE3MzMsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTU2LCA1NTYsIDU1NiwgMjI1MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzQ3MSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjMzOSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzQ4NSwgMCwgMCwgMzQ4OCwgMjQ5OSwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjIwMiwgMCwgMCwgMCwgMCwgNzM2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMTc0NywgNTM0LCA1MzQsIDUzNCwgNTM0LCAxMDUxLCA1MzQsIDUzNCwgODkyLCA1MzQsIDEwNTYsIDU1NiwgNTU2LCA5NjUsIDU1NiwgMCwgMTA2MSwgNTgwLCA1ODAsIDEwMzksIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg4NSwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI2ODAsIDUzNCwgNTgwLCA1NTYsIDUzNCwgNTU2LCA1NTYsIDE0MjAsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MDA5LCAxMzQxLCA5NzUsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMjg5NCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDI5MDAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAxNzI2LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgMjE0NCwgNTM0LCA1MzQsIDIxNDgsIDUzNCwgMTgyMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjg0MywgNTgwLCA1ODAsIDE5NTQsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzMxMywgNTgwLCA1ODAsIDU4MCwgNTgwLCA1NTYsIDI1ODYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyMjg4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYxNCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDEwMzksIDU4MCwgNTgwLCA1ODAsIDU4MCwgMCwgMCwgMCwgNTM0LCA1ODAsIDU1NiwgMCwgMCwgMCwgMCwgMjk1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCAyOTc5LCA1MzQsIDUzNCwgNTM0LCAyOTgzLCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCA1MzQsIDUzNCwgNTM0LCAyNDk4LCAzMDY1LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgNTgwLCAyODg5LCA1ODAsIDU4MCwgNTgwLCA1ODAsIDU4MCwgMzE5MiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzAzNSwgMTEzNDU5MiwgMCwgMTEzNDU5MiwgMCwgMCwgMCwgMTEzNDU5MiwgMTEzNTAwNywgMTEzNTAwNywgMCwgMCwgMCwgMCwgMCwgMTEzNTAwNywgMCwgMCwgMCwgMCwgNzAwLCA3MDEsIDAsIDAsIDAsIDAsIDAsIDcwNywgMCwgMCwgMCwgNzExLCAwLCAxMTM0NTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzE4LCAwLCAwLCAxMTM0NTkyLCAxMTM0NTkyLCAwLCAwLCAwLCAwLCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM0NTkyLCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM1MTk2LCAxMTM1MTk2LCAwLCAxMTM0NTkyLCAxMTM0NTkyLCAxMTM0NTkyLCAxMTM0NTkyLCAxMTM1MTk2LCAxMTM0NTkyLCAxMTM1MTk2LCAxLCAxMjI5MCwgMjEyNTgyNCwgMzExNzA1NiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMCwgMCwgMCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzEzNzUzNiwgMjk0MDkyOCwgMjk0MDkyOCwgMjk0MDkyOCwgMCwgMCwgMCwgMCwgMCwgMjc0ODQxNiwgMjg3OTQ4OCwgMCwgMCwgMCwgMCwgMCwgMjExMywgMCwgMCwgMCwgMjExMywgMCwgMCwgMjExOCwgMjExOSwgMCwgMCwgMCwgMCwgMCwgMTE4MCwgMCwgMCwgMCwgMTE4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ3NCwgMCwgMTE0NzM0OCwgMTE0NzM0OCwgMTE0NzM0OCwgNDUxLCA0NTEsIDExNDczNDgsIDQ1MSwgNDUxLCA0NTEsIDQ1MSwgNDUxLCA0NTEsIDQ1MSwgNDUxLCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAxMTQ3Mzk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MSwgMCwgMCwgMCwgMCwgMCwgMTE0NzM0OCwgMTE0NzM0OCwgMTE0NzM0OCwgMTE0NzM5OSwgMTE0NzM5OSwgMTE0NzM0OCwgMTE0NzM5OSwgMTE0NzM5OSwgMSwgMTIyOTAsIDMsIDAsIDAsIDAsIDAsIDAsIDI1Mzk1MiwgMCwgMCwgMCwgMjUzOTUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTUwLCAwLCAwLCAwLCAwLCAxMTU5MTY4LCAwLCAxMTU5MTY4LCAxMTU5MTY4LCAwLCAxMTU5MTY4LCAxMTU5MTY4LCAwLCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAxMTU5MTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODEsIDAsIDAsIDAsIDAsIDAsIDc5MiwgMCwgMCwgMTE1OTE2OCwgMCwgMCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMTE1OTE2OCwgMSwgMTIyOTAsIDMsIDAsIDAsIDAsIDAsIDI0OTg1NiwgMCwgMCwgMCwgMjQ5ODU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTYzMiwgNzM3MjgsIDE2Mzg0MCwgMCwgMCwgMCwgMCwgNjU1MzYsIDAsIDIxMjU4MjQsIDMxMTcwNTYsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDIxMjU4MjQsIDAsIDAsIDk3NCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMzE0OTgyNCwgMjEyNTgyNCwgMjQyODkyOCwgMjQzNzEyMCwgMjEyNTgyNCwgMjQ4NjI3MiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjYyNTUzNiwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjEyNTgyNCwgMjY5OTI2NCwgMjEyNTgyNCwgMjcxNTY0OCwgMjEyNTgyNCwgMjcyMzg0MCwgMjEyNTgyNCwgMCwgMTA2NDk2LCAxMDY0OTYsIDAsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMCwgMCwgMTA2NDk2LCAwLCAwLCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAxMDY0OTYsIDEwNjQ5NiwgMTA2NDk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTgzMTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTM0MDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2OTUsIDAsIDAsIDAsIDAsIDAsIDMxMDg4NjQsIDMxOTg5NzYsIDAsIDAsIDMwNDMzMjgsIDAsIDMxNDk4MjQsIDI5MzY4MzIsIDAsIDI3NjA3MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NjMyLCA3MzcyOCwgMCwgMzY5LCAzNjksIDAsIDAsIDY1NTM2LCAzNjkKXTsKClhRdWVyeVBhcnNlci5FWFBFQ1RFRCA9ClsgMTI3LCAxNDMsIDM0MiwgOTUwLCAxNzIsIDIwMSwgMTg4LCAyMTcsIDc2OSwgOTYzLCAyNDcsIDI2MywgMjc5LCAyOTUsIDMxMSwgMzI3LCAxMzk1LCAzNzMsIDEwODMsIDM3NCwgMzc0LCAzNzQsIDM3NCwgMzc0LCAzNzQsIDM3NCwgMzc0LCAzNzQsIDQxOSwgMzkxLCA0MDcsIDQ2NiwgNDM1LCA1ODksIDE2ODIsIDkwOSwgNTc0LCAxNTYsIDEyMjAsIDQ1MSwgNDk1LCA1MTEsIDUyNywgNTQzLCA1NTksIDYzNCwgMTA5NiwgNjc4LCA2OTQsIDc1NSwgNjQ5LCA3ODUsIDgwMSwgODE3LCA4MzMsIDg0OSwgODY1LCA4ODEsIDg5NywgOTM3LCA5NzksIDk5NSwgMTAyMywgMTAzOSwgMTA1NSwgNDc5LCAxMTEyLCAxMTI4LCAxNDczLCAxMTQ0LCAxMTYwLCAxMjA2LCAxMjM2LCAzNTcsIDY2MiwgMTI2NiwgNzA5LCAxMjgyLCAxMjkyLCAxMzA4LCAxMzI0LCAxMzM5LCAxMzU1LCAxNDExLCAxNDI3LCAxNDQzLCA2MTgsIDE0NTksIDcyNCwgMTQ4OSwgNjA0LCAxNTE4LCAxNTI4LCAyMzEsIDEwNzAsIDE1NDQsIDE1NjAsIDE1NzYsIDE1OTIsIDE2MjIsIDEyNTAsIDE2MzgsIDE2NTQsIDE2MDYsIDkyMSwgMTY3MCwgNzM5LCAxNjk4LCAxNzE0LCAxODIwLCAxMTkwLCAxNzMwLCAxNzQ2LCAxNTAyLCAxNzU4LCAxNzc0LCAxNzkwLCAxODA2LCAxMTc1LCAxODUwLCAxODYwLCAxODM2LCAxMDA5LCAxMzcwLCAxODc2LCAxMzg1LCAzNzUsIDE4OTIsIDE4OTYsIDE5MDMsIDE5MDMsIDE5MDMsIDE4OTgsIDE5MDIsIDE5MDMsIDE5MTAsIDE5MDcsIDE5MTQsIDE5MTgsIDE5MjIsIDE5MjYsIDE5MjksIDE5MzMsIDE5MzcsIDE5NDEsIDE5NDUsIDQwNDAsIDQwNDAsIDQwNDAsIDQxMDYsIDQwNDAsIDQwNDAsIDIwMjAsIDIyNzksIDQwNDAsIDE5NDksIDQwNDAsIDQwNDAsIDQwNDAsIDI0MjksIDIzNzksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI0MzgsIDQwNDAsIDQwNDAsIDMxMTIsIDI2NTEsIDM0NDMsIDI0NDQsIDE5NTUsIDE5ODQsIDE5OTQsIDE5OTgsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIwMTcsIDIwNDIsIDQwNDAsIDQwNDAsIDQwNDAsIDIwMjQsIDIyODUsIDIwMzAsIDIwMzQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIwNDEsIDQwNDAsIDQwNDAsIDMwMDIsIDIyODUsIDIyODUsIDIyODUsIDIyODUsIDIyODUsIDIxMTEsIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODgsIDE5OTAsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTUsIDIxMDEsIDMwOTksIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODgsIDIxMjAsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTUsIDIwNDYsIDIwNTUsIDQwNDAsIDQwNDAsIDIyMTIsIDIzNDksIDQwNDAsIDQwNDAsIDQwNDAsIDQxMzcsIDM0NDEsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM1MzEsIDQwNDAsIDI3NDUsIDE5ODgsIDE5ODgsIDE5ODgsIDIwNjYsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTcsIDIwNzMsIDQwNDAsIDQwNDAsIDI0NzMsIDMwMDIsIDIyODUsIDIyODUsIDIwMjYsIDE5ODgsIDE5ODgsIDMxMDEsIDE5NTUsIDE5NTUsIDE5NTYsIDIwNzIsIDQwNDAsIDI0NzEsIDQwNDAsIDIyODQsIDIyODUsIDMwOTgsIDE5ODgsIDE5ODgsIDIwNzgsIDE5NTUsIDIwNjgsIDIxMjksIDI0NDYsIDM1NTQsIDIyODUsIDIxMTIsIDE5ODgsIDIxMjAsIDE5NTUsIDIwODMsIDIyODEsIDIyODYsIDE5ODgsIDIwNjcsIDIwODksIDIwOTUsIDIxMTMsIDIwNDksIDIxMDcsIDMwOTcsIDIxMTQsIDIwNzksIDMwOTYsIDMxMDAsIDIwNzksIDMwOTYsIDIxMTQsIDIwNTEsIDIxMTgsIDIxMjYsIDIxMzUsIDIxMzksIDIxNDMsIDIxNTYsIDIxNjAsIDIxNzAsIDIxNzAsIDIxNzAsIDIxNjMsIDIxNjcsIDIxNzAsIDIxNzMsIDIxNzcsIDIxODEsIDIxODUsIDIxODksIDIxOTMsIDIxOTcsIDIyMDEsIDIyMDUsIDIyMDksIDIyMTYsIDQwNDAsIDQwNDAsIDQwNDAsIDIxMzEsIDQwNDAsIDQwNDAsIDQwNDAsIDIyMjAsIDQwNDAsIDIyMjYsIDQwNDAsIDIyODMsIDIyODcsIDE5ODgsIDE5NTQsIDIxMjIsIDIwOTgsIDE5NjEsIDQwNDAsIDQwNDAsIDQwNDAsIDE5NzAsIDQwNDAsIDI0NzQsIDE5ODAsIDQwNDAsIDIzMjEsIDMxMzksIDQwNDAsIDI0NDAsIDMxNDUsIDQ0MjcsIDIyNzcsIDMyMTksIDI3OTYsIDMxNTEsIDM1MDUsIDMxNTUsIDQwNDAsIDMyNjMsIDMxNjEsIDI5MDYsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDEsIDIyNTUsIDIyNTksIDIyNjIsIDIyNjYsIDIyNzAsIDIyNzQsIDM0NjUsIDIyOTEsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMyMTMsIDIyOTYsIDIzMTIsIDIzMDMsIDIzOTYsIDIyNDAsIDIyNDMsIDIzMDksIDIzMTYsIDIzMjAsIDI2NDksIDQwMDYsIDQwNDAsIDI3MjYsIDIzMjYsIDM2NzAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIyMzEsIDM0NjYsIDQwNDAsIDQwNDAsIDQwNDAsIDM0MjksIDIyMzcsIDQwNDAsIDI2MTgsIDMxMjMsIDIyNDksIDIyNTMsIDM4NzcsIDIzNDgsIDQwNDAsIDQwNDAsIDQwMTMsIDIzNTUsIDQwNDAsIDIzNTksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMxNzMsIDIzMjEsIDIyMjcsIDIzNjcsIDMxOTIsIDQwNDAsIDQwNDAsIDI0NTksIDQwNDAsIDQwNDAsIDMxOTIsIDQwNDAsIDQwNDAsIDQzNDgsIDI5ODksIDI4ODIsIDI5MTgsIDMxMjksIDIzNDksIDQwNDAsIDMwMTQsIDIzMTEsIDI2NzAsIDIzMzEsIDM1NzcsIDQ0MTcsIDIzMzYsIDIzNzksIDQwNDAsIDQwNDAsIDI1NDksIDIzNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI5ODQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM1OTEsIDI5NzksIDQwNDAsIDQwNDAsIDQwNDAsIDMzOTAsIDQxODAsIDQ0MTksIDMxMzEsIDQwNDAsIDMxOTAsIDMxOTQsIDQwNDAsIDI5NTAsIDI5ODksIDI5MTgsIDMyMTAsIDQwNDAsIDI0NjksIDI3ODgsIDMyMTIsIDQwNDAsIDQwMDUsIDMyODMsIDMyNzksIDQyODIsIDQwNDAsIDMyODEsIDQyMjYsIDQyMjYsIDI2MDEsIDQyODMsIDMyODMsIDMyODMsIDE5NjYsIDMyODIsIDMyNzksIDE5NjYsIDQyMjcsIDMyODMsIDQxOTEsIDI0NjIsIDI0NzgsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI1ODgsIDI1MjIsIDQwNDAsIDQwNDAsIDQwNDAsIDIwMDcsIDI4NTgsIDI0ODQsIDMwMjUsIDI0OTIsIDI0OTUsIDI0OTgsIDI1MDIsIDI1MDMsIDI1MDcsIDI1MTEsIDI1MTUsIDQwNDAsIDI1MjEsIDQwNDAsIDQwNDAsIDI1MjYsIDQwNDAsIDM5NjgsIDI5MTMsIDI1NDEsIDI1NDUsIDM4NjcsIDI1NTMsIDI1NjMsIDI1NzQsIDI1NzgsIDQwNDAsIDMzODcsIDMzODUsIDQwNDAsIDI1ODIsIDQwNDAsIDM0NTgsIDI1ODcsIDQwNDAsIDMxMjAsIDQwNDAsIDQwNDAsIDQwNDAsIDMxNzQsIDIwNzQsIDI0MDksIDI1MzcsIDI0MzIsIDQwNDAsIDQwNDAsIDQwNDAsIDI1MzYsIDI0MTYsIDQwNDAsIDIzNzMsIDIzNzcsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQyNTUsIDIzNzgsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQyNTYsIDIzNzksIDQwNDAsIDI4MzgsIDM1MDMsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI4MzksIDM1MDQsIDM5NzQsIDM1MDksIDQwNDAsIDQwNDAsIDM3MzAsIDM1MzYsIDQwNDAsIDMzNDksIDI5MDYsIDQwNDAsIDMzMjYsIDI1NTYsIDMxODEsIDMzODMsIDMzOTQsIDM0MDMsIDQwNDAsIDQzOTcsIDQwNDAsIDM1NTMsIDM1NTEsIDM1NDUsIDQwNDAsIDI2NjgsIDI5MTIsIDM0NzgsIDMzOTksIDI1NDgsIDI1OTIsIDM0NTYsIDM0NzEsIDI2MDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQyNDIsIDQwNDAsIDMxNDcsIDQwNDAsIDM4MTgsIDQwNDAsIDQwMzcsIDM5MjMsIDM5OTAsIDM1NjEsIDQwMDMsIDQwNDAsIDI2NTUsIDQwMzksIDQwNDAsIDQwNDAsIDQwNDAsIDMxNjcsIDQwNDAsIDQwNDAsIDQwNDAsIDMzMzEsIDMxNzEsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM2MzIsIDMxNzksIDQwNDAsIDI2MzgsIDI2MTEsIDI2MTUsIDQwNDAsIDIzODgsIDI2MjIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIzODksIDIzNDksIDQwNDAsIDQwNDAsIDQwNDAsIDIzOTcsIDIzOTAsIDQwNDAsIDQwNDAsIDQwNDAsIDMxNDEsIDQwNDAsIDQwNDAsIDM4NDYsIDQwNDAsIDQwNDAsIDI2MzAsIDI1MTcsIDQwNzAsIDI2MzcsIDI0MTIsIDI5ODksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIzNDQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMyNjksIDI5ODksIDIzODAsIDMyMDcsIDQwNDAsIDM0NjMsIDQwNDAsIDQwNDAsIDQwNDAsIDM4NjEsIDM0NzAsIDQwNDAsIDQwNDAsIDQwNDAsIDM0NzUsIDQwNDAsIDM0ODIsIDQwNDAsIDQwNDAsIDI2MzEsIDM5MDUsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI2MzEsIDM5MDUsIDI0MjQsIDM5MDksIDQwNDAsIDIxNTIsIDI1OTUsIDM3ODUsIDM5MTUsIDI2MzEsIDQzNjUsIDI2NDIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwODUsIDI2NDYsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwODUsIDI2NDYsIDQwNDAsIDQwNDAsIDI0NjQsIDQwNDAsIDQwNDAsIDIyODUsIDIyODUsIDIyODUsIDIyODUsIDIwMjUsIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODgsIDIxMjAsIDM2MTAsIDM4MzMsIDQwNDAsIDQwNDAsIDQwNDAsIDQzNjUsIDI2NTYsIDQwNDAsIDQwNDAsIDQwNDAsIDI2NjAsIDI2NjUsIDM5ODAsIDI1MTYsIDMxOTYsIDI2NzQsIDI2NzgsIDM4MzAsIDI2ODUsIDQwNDAsIDQwNDAsIDM4MzAsIDI2ODUsIDQwNDAsIDQwNDAsIDIyOTksIDI2OTAsIDQwNDAsIDMxODQsIDM0NTgsIDIwMDQsIDM5NjksIDMxOTcsIDMzMTIsIDMyNTEsIDI2OTYsIDQwNDAsIDIwMzcsIDI2OTAsIDQwNDAsIDMyNTEsIDI2OTYsIDQwNDAsIDI3MDIsIDI3MDksIDMxOTUsIDQwMDAsIDI3MTMsIDI3MTcsIDQwNDAsIDI3MTUsIDQwNDAsIDI2NzksIDI3MjMsIDQwNDAsIDI3MzAsIDI3MzQsIDI3MzksIDM2NDQsIDQwNDAsIDI3MDUsIDI1ODMsIDM2NDYsIDI1ODMsIDI3NDksIDI3NTMsIDI3MDQsIDMyMDMsIDI5NDQsIDI1NjYsIDI1NzAsIDI5NTYsIDI5NDUsIDM4NDMsIDI1NjgsIDI1NjgsIDI3NjEsIDM4MTUsIDM2NDEsIDI3NjUsIDM2MDcsIDI3NjksIDI3NzMsIDI3NzUsIDI3NzksIDI3ODMsIDI3ODcsIDQwNDAsIDQwNDAsIDQwNDAsIDMzMTYsIDQwNDAsIDQwNDAsIDM1NjQsIDI3OTIsIDM1NzAsIDI4MDAsIDI4MDQsIDI4MDgsIDI4MTAsIDI4MTQsIDI4MTgsIDI4MjEsIDI4MjMsIDI4MjQsIDQwNDAsIDQwNDAsIDMzMTUsIDQwNDAsIDM0MjgsIDI4MjgsIDM4OTYsIDMyNDgsIDI4MzMsIDI4NDMsIDI0MzQsIDI0NTMsIDM5MTgsIDI4NDksIDI5MDcsIDI4NTMsIDQwNDAsIDIxNTAsIDIxNDgsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI0MDUsIDIzNDksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI0MDUsIDIzNDksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIzNjIsIDM0NDIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIzNjMsIDM3NzMsIDM5NTAsIDQwNDAsIDQwNDAsIDQwNDAsIDI4NTcsIDQwNDAsIDI1NTksIDI5NjgsIDM4NTMsIDI4NjIsIDI5MzcsIDQzNzksIDI4NjksIDM5ODgsIDMyOTUsIDQwNDAsIDI4NzMsIDQwNDAsIDQwNDAsIDQwNDAsIDM1NTQsIDIyODUsIDIyODUsIDIyODUsIDIyODUsIDE5ODcsIDE5ODgsIDE5ODgsIDE5ODgsIDE5ODksIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTUsIDE5NTYsIDIxMDMsIDQwNDAsIDQwNDAsIDQwNDAsIDI0NzIsIDQwNDAsIDIxMDksIDIyODUsIDIyODUsIDIyODUsIDIxMTMsIDM1MjcsIDI4NzcsIDQwNDAsIDQwNDAsIDQwNDAsIDI4ODYsIDI4OTAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI5ODAsIDQwNDAsIDMzMzYsIDI4MjksIDM4OTcsIDI4OTUsIDI4OTksIDQwNDAsIDI5MTEsIDI5MTcsIDQwNDAsIDQwNDAsIDI5MjIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI4NDQsIDI5MjMsIDQwNDAsIDQwNDAsIDI2MjYsIDQyODksIDQwNDAsIDM0NTMsIDMwMzgsIDQzNTMsIDQzODYsIDMxODMsIDQwNDAsIDQwNDAsIDQwNDEsIDQzNzAsIDQwNDAsIDQwNDAsIDI4NDUsIDI5MjQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI5OTAsIDQwNDAsIDI1NTgsIDI5MjgsIDQ0MjAsIDI5MzUsIDQwNDAsIDI5NDMsIDI5NDksIDQwNDAsIDI5NzAsIDI5NTQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM4NTUsIDI5NjAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM4NTUsIDI5NjAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMzODksIDQwNDAsIDI5NjYsIDM4OTcsIDI5NzQsIDIzMjcsIDQyNzUsIDQwNDAsIDM1OTAsIDI5NzgsIDQwNDAsIDM1MzUsIDMzNzksIDM0ODgsIDM1MjEsIDMyMzAsIDQwNDAsIDQwNDAsIDM1NDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM0MzksIDQwNDAsIDQwNDAsIDQwNDAsIDQzNjQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQzNzgsIDQwNDAsIDQwNDAsIDQwNDAsIDI2MDUsIDQwNDAsIDQwNDAsIDIyNDUsIDQwNDAsIDQwNDAsIDM0NTksIDQwNDAsIDQwNDAsIDQwMzgsIDM5MjMsIDQwNDAsIDIwMTMsIDM2MTYsIDI0MTEsIDQwNDAsIDM2MzEsIDI5ODgsIDQwNDAsIDQwNDAsIDM2MzEsIDI5ODgsIDQwNDAsIDQwNDAsIDQwNDAsIDI5OTQsIDQwNDAsIDQwNDAsIDIzNTAsIDQyNjIsIDIzODEsIDM2MTcsIDQwNDAsIDQwNDAsIDQzNDYsIDQwNDAsIDQwNDAsIDMwMDAsIDQwNDAsIDQwNDAsIDQzNDYsIDQwNDAsIDIzNTAsIDQyMDgsIDM2MTUsIDI4ODEsIDQwNDAsIDI3OTUsIDMxNzQsIDMxMTIsIDMxODAsIDMwMjQsIDMxMTEsIDMxODAsIDMxODAsIDM5MzMsIDMwMTQsIDMxMTMsIDMxMTMsIDMwMDYsIDMxODEsIDMwMTQsIDMwMTMsIDMwMTQsIDMxNzUsIDQwNDcsIDMwMTgsIDMwMjksIDMwNTMsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM2MzQsIDQwNDAsIDQyMjEsIDQwNDAsIDM2NTAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI2MzEsIDM2NTEsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM2NDgsIDQyODcsIDQyOTEsIDQwNDAsIDQwMTAsIDQwMTcsIDQzMDMsIDQwMjIsIDI2MzIsIDMxODIsIDQwNDAsIDQwMzIsIDQwNDAsIDE5NTAsIDQwMTIsIDQwNDAsIDI4NjUsIDQwNDUsIDQwNTEsIDMwNDMsIDMwNDcsIDQwNjQsIDMwNjEsIDMwNjUsIDMwNjksIDMwNzMsIDMwNzcsIDMwODEsIDMxMDUsIDMwODQsIDQwNDAsIDQwNDAsIDM2MzMsIDQwNDAsIDQwNDAsIDM0NDMsIDI0NDQsIDQwNDAsIDQwNDAsIDQwNDAsIDI0NTAsIDQwNDAsIDQwNDAsIDQwNDAsIDQzNDksIDQwNDAsIDQwNDAsIDMwMTQsIDMyNzYsIDI0ODcsIDI5NjEsIDI2OTEsIDQyNzYsIDMxMDksIDE5NzYsIDMxMTcsIDMxMjcsIDMyODksIDMxMzUsIDMzMDUsIDQwNDAsIDMzMjQsIDMzMjIsIDQwNDAsIDQwNDAsIDM3MzQsIDM3NzksIDM3MzksIDM3NDQsIDM5NjksIDQwNDAsIDM3NDgsIDM3NTQsIDM3NjEsIDM5NDMsIDM4ODcsIDM3NjUsIDQwNTcsIDQwNDAsIDI0ODgsIDI5NjIsIDI2OTIsIDMxNjMsIDMyMjQsIDMxODgsIDM0MTIsIDQwNDAsIDQwNDAsIDIwODUsIDMyMDEsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIzNDMsIDMyMTcsIDMyMjMsIDMyMjgsIDQwNDAsIDQwNDAsIDQwNDAsIDMyMzQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMyMzgsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM0MjIsIDQwNDAsIDI1MjksIDI2ODYsIDQzNTQsIDMyNDUsIDQwNDAsIDQwNDAsIDQwNDAsIDQzNDIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDE5NzIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMyNTUsIDQwNDAsIDQwNDAsIDQwNDAsIDM0MjMsIDM5NTIsIDI2ODYsIDQzNTUsIDMyNjEsIDQwNDAsIDQwNDAsIDMyNjcsIDQwNDAsIDQwNDAsIDQwNDAsIDE5NzQsIDQwNDAsIDQwNDAsIDQwNDAsIDMyNzMsIDQwNDAsIDQyMjAsIDM5ODEsIDI2ODAsIDQzNTYsIDM4OTUsIDQwNDAsIDMyODcsIDQwNDAsIDQwNDAsIDMyOTMsIDQwNDAsIDQwNDAsIDIwNjIsIDQwNDAsIDQyMjAsIDM5NTMsIDMyOTksIDIxNDYsIDQwNDAsIDMzMDMsIDQwNDAsIDI2MDcsIDQwNDAsIDQwNDAsIDIwNjEsIDQwNDAsIDQyNDgsIDMzMDksIDM4OTQsIDM0OTgsIDQwNDAsIDQzNjAsIDQwNDAsIDQwNDAsIDQwNDAsIDQzNjksIDQwNDAsIDQzNzQsIDMwNTYsIDQzODMsIDM2MjIsIDQwNDAsIDQwNDAsIDQzOTAsIDQwNDAsIDQwNDAsIDQ0MjQsIDI3NDIsIDQwNDAsIDI2MzMsIDQwNDAsIDMwNTYsIDQwNDAsIDMwMzksIDMxNTcsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI0NTUsIDQzMjUsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMzMjAsIDQwNDAsIDMzMzAsIDM5MTEsIDMzMzUsIDM2MjksIDM1ODgsIDQyMTMsIDM5NDMsIDM1ODcsIDQyMTMsIDQyMTMsIDQwNDAsIDMzNDEsIDM1ODksIDM1ODksIDM2MjgsIDQyMTQsIDMzNDEsIDMzNDAsIDMzNDEsIDM2MzAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM4MzYsIDIzNDksIDMzNDcsIDQwNDAsIDMzNTQsIDMwMDEsIDQwODAsIDQ0MDQsIDMzNTgsIDMzNjIsIDMzNjYsIDMzNjksIDMzNzMsIDMzNzMsIDMzNzcsIDQwNDAsIDQwNDAsIDM4MzUsIDQwOTEsIDM0MTAsIDQwNDAsIDQwNDAsIDM0MTYsIDQwNDAsIDQwNDAsIDM0MjAsIDM0MjcsIDQwNDAsIDM0MzMsIDQwNDAsIDQzMzEsIDM0NDcsIDQwNDAsIDQwNDAsIDM3OTcsIDQwNDAsIDM3OTUsIDQwNDAsIDQwNDAsIDQzNDUsIDQwNDAsIDIzNTAsIDE5NjQsIDQwNDAsIDI4NzksIDQwNDAsIDMzOTcsIDQwNDAsIDI5MDQsIDQwNDAsIDMzNTAsIDM0ODgsIDQwNDAsIDM0ODYsIDI1MzUsIDM0OTIsIDM0OTYsIDQwNDAsIDQwNDAsIDQwNDAsIDM1MDIsIDQwNDAsIDQwNDAsIDQwNDAsIDQxMjcsIDQwMjgsIDIwMTAsIDQxMzEsIDQxNDEsIDQxNDUsIDQxNDksIDQxNTMsIDQxNTcsIDQxNjEsIDQxNjUsIDQxNjksIDQxNzMsIDQxMzQsIDQzNzcsIDQyOTMsIDI1MzQsIDM1MTYsIDQwNDAsIDQwNDAsIDQwNDAsIDI4MzksIDM1MDQsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI5MzEsIDM0NDIsIDQwNDAsIDM0NTAsIDQwNDAsIDI5MDIsIDQwNDAsIDM3OTksIDQzNjMsIDM1MjAsIDQxOTYsIDM1MjUsIDM0MDYsIDIzNDksIDI3NTcsIDIzMDUsIDI5OTYsIDQzOTMsIDQzNDcsIDM1NDQsIDQwNDAsIDM1NDksIDQwNDAsIDQwNDAsIDM1NDksIDQwNDAsIDQwNDAsIDM1NTgsIDI3NTYsIDIzMDUsIDQwNzcsIDQzOTUsIDM5NjAsIDQwNDAsIDM1NjgsIDQwNDAsIDM4MjMsIDIzNDksIDQwNDAsIDM5OTcsIDM3NTAsIDM1NzQsIDM4ODQsIDM5NjEsIDQyNjksIDQwNDAsIDQyNzAsIDQwNDAsIDM1ODEsIDM5NDQsIDM1ODUsIDM1OTUsIDM5MzEsIDM2MDAsIDIwMDEsIDM5MzAsIDM2MDQsIDM2MDQsIDQyMTEsIDM2MTQsIDM5MzIsIDM2MjEsIDM2MjYsIDM2NjIsIDM2MzgsIDM2NTUsIDM2NTYsIDM2NjAsIDM2NjcsIDM2NzQsIDM2NzgsIDM2ODIsIDM2ODUsIDQwNDAsIDQwNDAsIDQwNDAsIDM4NDAsIDI1OTYsIDM3NDAsIDM4NTAsIDI2NjgsIDIzMzIsIDMzNDMsIDQwNDAsIDM4NTksIDQwNDAsIDQwNDAsIDQwNDAsIDIyMzMsIDM4NjUsIDI4OTEsIDM3MzUsIDI0NjUsIDIzNTEsIDM2OTAsIDM2OTgsIDM4NzQsIDM3MDIsIDM3MDUsIDM3MDksIDM3MTMsIDM3MTcsIDM3MjEsIDM3MjUsIDM3MjksIDQwNDAsIDI0MjMsIDI0MjEsIDMyNDEsIDM3NzIsIDQwNDAsIDQwNDAsIDI5MzksIDM3NzcsIDM3ODMsIDM3ODksIDM3OTMsIDQxMzYsIDI2OTgsIDMzNDIsIDI2MzMsIDI0MjUsIDM4MDMsIDQwNDAsIDQwNDAsIDM4MDgsIDIzNDksIDQwNDAsIDQwNDAsIDQxODYsIDM4MTIsIDQwNDAsIDQwNDAsIDQwNDAsIDMwMDksIDM4MjIsIDM4MjcsIDQwNDAsIDM4NzEsIDI1MzIsIDQzMTgsIDM4ODEsIDQwNDAsIDM4OTEsIDM3NzMsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM5MDEsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIzODUsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDMwMTQsIDQwNDAsIDIzOTQsIDQwNDAsIDI0MDEsIDIzNzksIDQwMzUsIDM5MjIsIDQwNDAsIDQwNDAsIDIyOTIsIDM5MjcsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM5MzcsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDIwOTEsIDM5NDEsIDM5NDgsIDQwNDAsIDM5NTcsIDM3NTcsIDM5NjYsIDI4MzUsIDMxMTIsIDQwNDAsIDQwNDAsIDIyMjIsIDM5NzksIDQwNDAsIDQwNDAsIDI3MTksIDM5NzMsIDI2MzIsIDMxODMsIDMwMjEsIDQwNDAsIDQwNTUsIDQwNDAsIDQwNjEsIDI0MTksIDQwNDAsIDMwMjMsIDQwNjgsIDQwNzQsIDQwODQsIDQxMTIsIDQwODksIDQwOTUsIDM1OTYsIDQxMDAsIDQzMDgsIDQwOTksIDQxMDQsIDQxMTAsIDQwOTksIDQxMTMsIDQxMTksIDMyNTcsIDQxMTcsIDQxMjMsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQxNzcsIDQxODQsIDI4MzYsIDM2ODYsIDQxOTAsIDM2OTMsIDQxOTUsIDQyMDAsIDQ0MTAsIDQyMDUsIDQyMTgsIDQwNDAsIDMwOTAsIDI3MzUsIDQyMjUsIDMwOTMsIDQyMzEsIDQwNDAsIDQwNDAsIDQwNDAsIDM2MzEsIDQyMzUsIDI2NjEsIDQwNDAsIDI2ODEsIDQ0MjksIDIzNjksIDQwNDAsIDQyMzksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM4MDQsIDQyNDYsIDQwNDAsIDQwNDAsIDQwNDAsIDQyNTIsIDQwNDAsIDQwNDAsIDQwNDAsIDI2MzEsIDQyNjAsIDQyNjYsIDQwNDAsIDQwNDAsIDQwNDAsIDQwMjUsIDQxODUsIDI4MzcsIDI2ODYsIDI0ODAsIDQyNzQsIDQwNDAsIDQyODAsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQyMDEsIDM5NzgsIDQwMTgsIDQzMDMsIDM3NjgsIDQwNDAsIDMwNTAsIDQwNDAsIDQwNDAsIDM5ODUsIDQwNDAsIDQwNDAsIDM5OTQsIDQwNDAsIDQzMjIsIDQzODUsIDQzMjksIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDQzMzUsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDM2NjMsIDQzMzksIDQwNDAsIDQwNDAsIDQyOTcsIDQwNDAsIDMwNTcsIDMwODcsIDQzMDEsIDM5NjIsIDMwMzIsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI2MjQsIDQzMDcsIDQwNDAsIDQwNDAsIDQwNDAsIDQwNDAsIDI2MjQsIDQzMTIsIDQzMTUsIDQwNDAsIDIzMjIsIDM0MzYsIDI4MzcsIDIwNTgsIDQwNDAsIDQwNDAsIDMwMzUsIDQwNDAsIDQ0MDEsIDQ0MDgsIDM2OTQsIDQwNDAsIDQwNDAsIDM1MTIsIDQwNDAsIDI2MzEsIDQ0MTQsIDQwNDAsIDM1MTEsIDQ1NTgsIDQ0MzMsIDYwMjQsIDYwMjcsIDQ0MzksIDQ0NjYsIDQ0NjgsIDQ0NjgsIDQ0NDYsIDQ0NTUsIDQ0NjcsIDQ0NjgsIDQ0NjgsIDQ0NjgsIDQ0NjgsIDQ0NjgsIDQ0NjgsIDQ0NzMsIDQ0NjgsIDQ0NjgsIDQ0NjMsIDQ0NTcsIDQ0NTksIDQ0NzksIDQ0NzcsIDQ0ODMsIDQ0NjgsIDQ0NjksIDQ0OTMsIDQ0OTYsIDQ1MDYsIDQ1MTAsIDQ1MjQsIDQ1MTksIDQ1MTEsIDQ1MDAsIDQ1MDIsIDQ1MDIsIDQ1MTgsIDQ1MTksIDQ0OTgsIDQ1MTUsIDQ1MjMsIDQ1MjgsIDQ1MzIsIDQ1MzYsIDQ1MzksIDQ1NDcsIDQ1NDYsIDQ1NDMsIDQ1NTEsIDQ1NTQsIDQ1NTYsIDQ1NjYsIDUwOTcsIDQ1NzQsIDYwODYsIDUwMDMsIDUxMDEsIDUxMDEsIDUxMDEsIDQ1OTMsIDQ1OTksIDQ2MDIsIDQ2MDIsIDQ2MDIsIDQ2MDIsIDQ2MDgsIDQ2NDAsIDQ1NjgsIDQ2MjIsIDQ2MjgsIDUxMDEsIDQ0MzQsIDUxMDEsIDUwOTksIDUxMDEsIDY3MTMsIDUxMDEsIDYyNTYsIDUxMDEsIDUxMDEsIDQ1ODQsIDU5OTIsIDUxMDEsIDUxMDEsIDQ3MjksIDUxMDEsIDU0NzMsIDYyNzcsIDUxMDEsIDUwMDcsIDQ2MDIsIDU2OTMsIDQ2MDksIDU2OTYsIDU2OTksIDU2OTksIDU2OTksIDU2OTksIDQ2MDEsIDQ2MDIsIDU2OTksIDQ2MDIsIDQ2MTksIDQ2MjEsIDQ2MjMsIDQ2MjcsIDYwODcsIDUxMDEsIDQ0MzQsIDYxNjUsIDYxNjQsIDUxMDEsIDUxMDEsIDYzODAsIDYyNDIsIDUwOTYsIDUxMDEsIDQ1NzYsIDUxMDEsIDY0NjMsIDUxMDEsIDUxMDEsIDU2MzUsIDQ0ODgsIDUzNjYsIDYyNzUsIDUxMDEsIDQ1ODEsIDUxMDEsIDQ1OTAsIDU0MTEsIDUxMjMsIDUxMjMsIDUxMjMsIDU2OTcsIDU2OTksIDQ2MDMsIDQ2MjEsIDQ2MjEsIDQ2MjIsIDQ2MjcsIDQ2MjcsIDQ2MjgsIDUxMDEsIDQ1ODMsIDU0NDgsIDY1MTMsIDU0NzQsIDUxMDEsIDUwMDgsIDUxMDEsIDUxMDEsIDQ2MDIsIDQ2MzIsIDUxMjMsIDU2OTksIDQ2MDIsIDQ2MDIsIDQ2MDIsIDU3MDQsIDUxMjEsIDQ2MDIsIDQ2MjEsIDQ2MjcsIDUxMDEsIDQ1ODMsIDY1NjMsIDUxMDEsIDQ1ODQsIDYwMTcsIDUxMDEsIDUxMDEsIDU2OTksIDU3MDEsIDQ2MDIsIDQ2MDIsIDQ2MDIsIDQ2MzIsIDQ2NDAsIDU3MDUsIDUxMDEsIDUxMDEsIDUxMDEsIDQ3MzQsIDU3MDAsIDQ2MDIsIDQ2MDIsIDQ2MDIsIDU3MDUsIDQ2NDMsIDU3MDEsIDUxMDEsIDUxMDEsIDQ4MjQsIDU2NTEsIDQ2MDIsIDQ2NTAsIDUxMDEsIDUxMDEsIDQ4MjQsIDY1MTIsIDUwMTAsIDU2OTUsIDUxMjMsIDUxMjMsIDU2OTgsIDU2OTAsIDQ2MDIsIDQ2MDgsIDU2OTYsIDU3MDAsIDU3MDMsIDUxMDEsIDQ2MDIsIDUxMDEsIDUxMDEsIDUxMjEsIDUxMjMsIDUxMjMsIDUxMjMsIDU2OTksIDU2OTksIDU2OTksIDU3MDIsIDUxMjMsIDU2OTgsIDU2OTksIDU3MDIsIDQ2MDIsIDQ2MDIsIDU3MDQsIDQ2MDcsIDQ2MDIsIDU3MDUsIDUxMjMsIDU2OTcsIDU3MDQsIDUxMDEsIDUxMDEsIDQ4MTYsIDQ4MjIsIDU2OTksIDQ2MDIsIDU3MDQsIDU2OTUsIDU2OTgsIDU3MDIsIDU2OTQsIDU3MDEsIDQ2NTEsIDQ2NTIsIDQ2NTAsIDUxMDEsIDQ1OTIsIDUxMDEsIDUxMDEsIDU4MTUsIDU1NjcsIDUxMDEsIDUxMDEsIDUxMDYsIDY1MTksIDY3NjEsIDY1NTAsIDY1NjAsIDQ2NjIsIDQ2OTUsIDQ2NTYsIDQ2NjAsIDQ2OTMsIDQ2NjYsIDQ2NzMsIDQ2NzAsIDQ2ODAsIDQ2ODQsIDQ2OTEsIDQ2OTMsIDQ2OTMsIDQ2OTMsIDQ2OTMsIDQ2OTQsIDQ2NzYsIDQ2OTksIDQ2OTMsIDQ3MDMsIDQ3MDgsIDQ3MTQsIDQ3MDQsIDQ3MjYsIDQ3NDAsIDQ3NDQsIDQ2ODcsIDQ3NTEsIDQ3NTMsIDQ3NDgsIDQ3ODcsIDQ3ODksIDQ3ODksIDQ3OTEsIDQ3NTcsIDQ3NTksIDQ3NjEsIDQ3NjMsIDQ3NzYsIDQ3NzYsIDQ3NzAsIDQ3NjcsIDQ3NzQsIDQ3MTcsIDQ2NzUsIDQ3MTAsIDQ3ODAsIDQ3ODQsIDQ3OTUsIDQ3OTcsIDQ4MDEsIDQ4MDUsIDQ4MDksIDUxMDEsIDQ1OTIsIDYxOTgsIDYyMDIsIDQ5OTAsIDUwMDcsIDUyMzAsIDY0NjEsIDUxMDEsIDYzNzMsIDUxMDEsIDUxMDEsIDQ4MjQsIDY2OTgsIDQ4MzEsIDUxMDEsIDUxMDEsIDUxMDEsIDQ3MzYsIDUxMDgsIDUxMDgsIDUxMDEsIDUxMDEsIDQ4MjYsIDY0ODUsIDU0OTAsIDU5NzksIDQ4MzgsIDUxMDEsIDQ3MjAsIDQ5ODUsIDUxMDEsIDQ3MjAsIDUxMDEsIDUxMDEsIDQ4NTMsIDUzMTEsIDQ4NTcsIDUzMzMsIDQ4NzYsIDQ5MDIsIDQ5MDYsIDQ5MDYsIDQ5MDYsIDQ5MDYsIDQ5MDgsIDQ5MTUsIDQ5MTcsIDQ5MTIsIDQ5MjEsIDQ5MjUsIDQ5MjgsIDQ5MzEsIDQ5MzQsIDQ5MzksIDQ5MzgsIDQ5NDMsIDQ5NDQsIDQ5NTksIDQ5NDksIDQ5NDgsIDQ5NTMsIDQ5NTYsIDQ5NjMsIDUxMDEsIDUxMDcsIDUxMDEsIDQ4OTIsIDUxMDEsIDUwMDcsIDUxMDEsIDUxMDEsIDU2OTUsIDUxMjMsIDUxMjMsIDUxMjMsIDUxMjMsIDU2OTYsIDU2OTksIDU5ODgsIDUxMDEsIDUxMDEsIDUxMDEsIDQ4MjUsIDUzMDAsIDUxMDEsIDU2MDgsIDUxMDEsIDQ4MTEsIDU0NDksIDY0MjYsIDQ5NjksIDUxMDEsIDUxMDEsIDQ5ODgsIDYyMTksIDUxMDEsIDUwMTgsIDQ5ODcsIDUxMDEsIDUxMDEsIDQ4NjAsIDUxMDEsIDUxMDEsIDQ5OTUsIDUwMTUsIDUxMDEsIDY0MTIsIDUwMzQsIDUxMDEsIDUxMDEsIDUxMDEsIDQ4OTMsIDY3NTEsIDYxMzgsIDUxMDEsIDUxMDEsIDUxMDEsIDQ4OTQsIDY3MjksIDUxMDEsIDUxMDEsIDUxMDEsIDQ5NjUsIDUwNTUsIDUwNjgsIDUwODEsIDUwODYsIDUwOTEsIDUwNzYsIDUwOTUsIDUxMDEsIDQ4MjQsIDU5MzMsIDU5MjksIDUzNzYsIDUwODcsIDQ0MzQsIDUxMDEsIDUxMDEsIDUxMDEsIDQ5NzksIDUwMDgsIDY0MDksIDU5OTYsIDUxMDEsIDU5OTksIDUxNTEsIDU5ODcsIDUzNzYsIDUxMDEsIDQ4MjYsIDY1MDIsIDY3MzgsIDYyMDQsIDUxMDEsIDY3MzAsIDUxMDEsIDUxMDEsIDQ4OTEsIDUxMDEsIDQ1NzAsIDUxMDEsIDUxMTUsIDUxMjcsIDUwNzQsIDQ0NDIsIDUwOTYsIDUxMDEsIDUxMDEsIDUxMDEsIDQ5NzUsIDU1MzgsIDU0MTEsIDU5ODYsIDUyODEsIDUxMDEsIDQ4NDAsIDU2MjgsIDUzNTUsIDUzODIsIDQ0MzQsIDQ3MzYsIDUxMDEsIDQ5NzMsIDUxMDEsIDUxMDEsIDUxMDEsIDQ4NDAsIDU2ODcsIDUxMzIsIDUwNzUsIDUxNDAsIDU4OTAsIDUwNzIsIDUwNzYsIDUxNDEsIDY0NjIsIDQ4ODgsIDUxMDEsIDUxMDEsIDQ4OTUsIDUxMDEsIDUzNDMsIDUwNzMsIDY1ODIsIDQ0NTEsIDUxMDEsIDQ4OTQsIDUxMDEsIDUxMDEsIDY0MTYsIDUxMDEsIDUxMDEsIDUxMDEsIDYxOTEsIDUxMDEsIDU0MTUsIDU4OTIsIDUwNzQsIDY1ODMsIDUwOTYsIDUxMDEsIDUxMDEsIDQ4OTgsIDU5OTksIDU0MTEsIDUyODAsIDUxMDEsIDUxMDEsIDQ5NzQsIDQ5NzgsIDUxMzQsIDUxNTcsIDUxMDEsIDUxMDEsIDUwMDcsIDUxMDEsIDUxMzIsIDUwNzUsIDUxNTksIDUxMDEsIDQ4OTcsIDUxMDEsIDU4NzEsIDQ5ODAsIDUxMDEsIDU5NDksIDUxMzUsIDUxNTksIDUxMDEsIDQ5NzYsIDUxMDEsIDUxMDEsIDUwMTAsIDUxMDEsIDUxMDEsIDUxNjksIDQ0MzQsIDUxMDEsIDUxMDEsIDUwMDksIDUxMDEsIDUxMDEsIDUxMDEsIDQ2MTMsIDQ2MTQsIDQ5NzUsIDUxMDEsIDQ2MTQsIDUxMDEsIDU0MTEsIDQ5NzgsIDYxNjQsIDYzOTEsIDUxMDEsIDQ5NzcsIDYzODAsIDUzOTUsIDUzNzYsIDUxODgsIDQ4NzIsIDUyNDMsIDUxOTcsIDUxOTcsIDUxOTQsIDUxOTcsIDUxOTksIDUyMDMsIDUyMDUsIDUyMDcsIDUyMDksIDUyMDksIDUyMDksIDUyMTMsIDUyMTMsIDUyMTMsIDUyMTMsIDUyMTQsIDUyMTMsIDUyMTMsIDUyMTUsIDUyMTksIDUyMjEsIDUxMDEsIDUxMDEsIDUxMDEsIDUwMzYsIDUxMDEsIDUwNTksIDUwNjMsIDUzNzIsIDUxMDEsIDUxMDEsIDUxMDEsIDYzNzgsIDYwMTAsIDUxMDEsIDQ5NzgsIDY1NjksIDUxMDEsIDQ5ODAsIDUxMDEsIDU0MTcsIDUxMDEsIDUxMDEsIDUxMDEsIDU4OTEsIDUwNzQsIDUyNDAsIDUxMDEsIDUzNTEsIDY0NjMsIDUyNDcsIDUxMDEsIDUxMDEsIDUyNTcsIDUxMDEsIDUxMDEsIDUxMDEsIDUwNjgsIDUyNjMsIDY0NDgsIDU4NzUsIDUxMDEsIDQ5ODEsIDUxMDEsIDUxMDEsIDU4NzYsIDYyODEsIDU0MTYsIDUyNzUsIDQ0MzUsIDU4NzQsIDUxMDEsIDQ5OTAsIDYwODksIDU0MDYsIDU0MTAsIDUxMDEsIDUyNjUsIDU0MDcsIDUyODUsIDUxMDEsIDUxMDEsIDUyOTcsIDY0MDIsIDUxMDEsIDUxMDEsIDUzMDQsIDUzMDksIDUxMDEsIDUxMDEsIDUxMDEsIDUwNTcsIDUzNzEsIDUxMDEsIDUxMDEsIDUxMDEsIDUwNTksIDUzMzAsIDQ4MzMsIDU0MjcsIDUxMDEsIDUwMTAsIDQ5NzgsIDUxMDEsIDU0MTUsIDUzNTgsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDAsIDU4ODMsIDUzNTksIDUxMDEsIDUxMDEsIDUxMDIsIDYwMTUsIDQ4OTMsIDUyNTgsIDUxMDEsIDUzNDIsIDU0MzIsIDUxMDEsIDUzNDgsIDUxMDEsIDUwMjQsIDY1NzAsIDU5NzcsIDUzODIsIDQ0MzQsIDUxMDEsIDUxMDEsIDUxMDIsIDYxMTMsIDU3MjYsIDUxMDEsIDYzNzksIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDIsIDUxMDEsIDUxMDEsIDY0NjIsIDUxMDEsIDQ1NjEsIDU4NzYsIDUxMDEsIDY0MjIsIDY0MjYsIDUzODEsIDYzODEsIDY0MjMsIDY0MjcsIDUzODIsIDUxMDEsIDUwMzEsIDUxMDEsIDUxMDEsIDQ4NjYsIDQ4ODUsIDQ4MTEsIDU0MzgsIDY0MjUsIDUzOTksIDYzODEsIDU0NzksIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDQsIDUxMDYsIDUwNjAsIDUwNjQsIDUxMDEsIDUwMzUsIDUxMDEsIDUxMDEsIDUwNTEsIDUxMDEsIDUzNTAsIDUxMDEsIDU4NzksIDQ4OTYsIDU0MzEsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDYsIDUxMDEsIDQ5NzUsIDU0NzEsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDcsIDY0MzAsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDgsIDQ4OTAsIDY0MjksIDYzODEsIDUxMDEsIDUxMDEsIDUxMDIsIDY0NDYsIDU0NzksIDUxMDEsIDUxMDEsIDU0NTMsIDUyNjksIDU0MTAsIDUxMDEsIDQ2MTQsIDUxMDEsIDUxMDEsIDYzODAsIDUxNTMsIDUxMDEsIDUxMDEsIDU3MzIsIDUyNjgsIDU0NzAsIDUxMDEsIDUxMDEsIDUxMDIsIDY2OTcsIDU0NTksIDU0NjgsIDYzODEsIDUxMDEsIDUwNDEsIDUwNDYsIDUwNDUsIDU0NzgsIDUxMDEsIDUxMDEsIDU0NTMsIDQ2MTQsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMTEsIDYwODgsIDUzNTAsIDU4NzcsIDU0MTMsIDU1MzgsIDUxMDEsIDUxMDEsIDUwNDcsIDUwNDcsIDUwNDcsIDU0NjEsIDUxMDEsIDYwODgsIDYxMTksIDUxMDYsIDUyNjcsIDUyNzEsIDUxMDEsIDUwNDcsIDYyMTMsIDUxMDEsIDUxMDEsIDU0MDQsIDQ5OTAsIDU0MDQsIDU0MDgsIDU0MDQsIDQ5OTAsIDU0MDQsIDU5NjIsIDU0MjMsIDU5NjEsIDUxMDEsIDYwODQsIDU0MjMsIDUyMzMsIDYxMDQsIDUxMDEsIDQ5OTAsIDUyMzIsIDUyMzAsIDUxMDEsIDUyMzIsIDQ5ODksIDUyMzIsIDUyMzIsIDUyMzIsIDUyMzEsIDY0ODgsIDUxMDEsIDUxMDEsIDUxMDEsIDUxNjgsIDU4NzYsIDU3MjIsIDU0ODMsIDQ0MzQsIDUwOTksIDUxMDEsIDUxMDEsIDY0OTgsIDYyNzksIDU0ODcsIDUxMDEsIDQ4ODYsIDYxNjYsIDU0ODksIDU4NTYsIDU0OTQsIDU1MDAsIDU0OTgsIDU1MDQsIDU1MDQsIDU1MDQsIDU1MDQsIDU1MDYsIDU1MTMsIDU1MTAsIDU1MTcsIDU1MTksIDU1MTksIDU1MTksIDU1MjEsIDU1MTksIDU1MjUsIDU1MjUsIDU1MjUsIDU1MjUsIDU1MjcsIDYyODAsIDU0MTUsIDUzMTksIDU2NzIsIDUxMDEsIDUwMDUsIDY0MzgsIDUxMDEsIDUxMDEsIDUxMDMsIDUxMDEsIDUxMDEsIDUxMDEsIDYzNjEsIDYxOTksIDU1NzEsIDUxMDEsIDUxMDEsIDUxMDEsIDUxNzYsIDU2MjYsIDY0OTgsIDU1NTEsIDUxMDEsIDY0NDIsIDU1NjEsIDUxMDEsIDU4MTQsIDU1NjYsIDU1NzUsIDUxMDEsIDUxMDEsIDUxMDEsIDUxODEsIDYxNjcsIDUwMDQsIDY0MzgsIDUxMDEsIDUxMDIsIDYwOTIsIDYzODEsIDU1ODAsIDUxMDEsIDUxMDEsIDUwMDQsIDYxMjcsIDU2MDAsIDU4NjMsIDU2MDYsIDU4NjIsIDU2MDUsIDUxMDEsIDUxMDEsIDUyMzUsIDUxMDEsIDUxMDEsIDUxMDEsIDU0MjQsIDUxMDIsIDYxMjgsIDU2MDEsIDU4NjQsIDU2MDcsIDUxMDEsIDUxMDEsIDUxMDEsIDUyMjQsIDUxMDEsIDYxNjcsIDUxMDEsIDUwMDYsIDY0NDAsIDUxMDEsIDU1NjksIDUxMDEsIDUxMDIsIDYxODAsIDUxNDgsIDUxMDEsIDUxMDEsIDU5OTYsIDUxMDEsIDYyODMsIDU0NjQsIDUxMDEsIDUxMDEsIDUxMDEsIDUyMjgsIDUxMDEsIDU2MjAsIDUxMDEsIDUxMDEsIDUxMDEsIDUyMzIsIDUxNzYsIDU2MjYsIDY3NTMsIDU2NjUsIDUxMDEsIDUxMDEsIDU2MzIsIDUzMjEsIDQ0MzQsIDUxMDEsIDUxMDIsIDYzNjIsIDYyMDAsIDUwMjcsIDU1NjIsIDUxMDEsIDU1NzAsIDUxMDEsIDUxMDEsIDUyMjMsIDU3NDYsIDU0NjMsIDUxMDEsIDUxMDEsIDUxMDEsIDUyNjYsIDQ5ODksIDU2MjEsIDUxMDEsIDUxMDEsIDUxMDEsIDUyNzgsIDY3NTQsIDU2NjYsIDUxMDEsIDUxMDEsIDUyNjUsIDU0MDcsIDY3NTUsIDUzNzYsIDUxMDEsIDUxMDEsIDQ5OTAsIDUxMDEsIDU2MTIsIDU0MTUsIDUzMjAsIDYzOTMsIDUxMDEsIDUxMDEsIDUxNzYsIDU2MzksIDU2NDYsIDQ1NzcsIDU1NjgsIDU0MTAsIDU2NDAsIDU2NjQsIDUxMDEsIDUxMDEsIDUxMDEsIDUyOTMsIDUxNzUsIDU2MzksIDU2NjMsIDUzNzYsIDU2NTksIDUzNzYsIDUxMDEsIDUxMDEsIDUxMDEsIDQ5ODAsIDU2NTcsIDU2NzYsIDUxMDEsIDUxMDEsIDUyODgsIDUwMzcsIDU2NTgsIDUxMDEsIDUxMDEsIDUxMDEsIDU0MTEsIDUxMjMsIDUwOTgsIDUxMDEsIDU0MjMsIDUxMDEsIDUxMDIsIDY0NzEsIDY0NzcsIDUwOTgsIDUxMDEsIDU0MjQsIDUxMDEsIDUxMDEsIDU0MjYsIDUwOTgsIDU0MjQsIDUxMDEsIDUxMDIsIDY1NTgsIDUxMDEsIDUxMDEsIDUxMDEsIDYzOTMsIDUxMDEsIDU0MjYsIDU0MjQsIDU1NjgsIDU0MjQsIDUyMzMsIDUxMDEsIDUxMDEsIDUxMDIsIDY1NjIsIDUxMDEsIDUxMDQsIDUxMDEsIDUxMDEsIDUxMDEsIDQ5NzQsIDYyMTUsIDU3MTAsIDQ4NzksIDUxMDEsIDY0OTYsIDUzNzYsIDUxMDEsIDUxMDUsIDUxMDEsIDU0MjQsIDU0MjQsIDUwOTksIDUxMDEsIDUxMDUsIDUxMDEsIDUxMDEsIDUxMDEsIDU3MjAsIDQ3MjIsIDU3MzAsIDU3NDIsIDU3NTEsIDU3NTcsIDU3NjYsIDU3NjQsIDU3NjcsIDU3NTUsIDU3NjEsIDU3NzEsIDU3NzQsIDU3NzYsIDU3NzgsIDU3OTAsIDU3ODIsIDU3ODUsIDU3ODksIDU3OTAsIDU3OTEsIDU3OTYsIDU3OTUsIDU4MDEsIDU3OTcsIDU4MDYsIDUxMDEsIDUxMDgsIDQ5NzYsIDUxMDEsIDUxMTAsIDY3MDIsIDUxMDEsIDUxMTEsIDY3MDcsIDUxMDEsIDUxMjMsIDUxMjMsIDUxMjMsIDU2OTgsIDU2OTksIDU2OTksIDU3MDAsIDQ2MDIsIDU4MDEsIDU4MDIsIDU4MDEsIDU4MDEsIDQ5OTgsIDUxMDEsIDUwOTgsIDUxMDEsIDUxMDEsIDU0MjUsIDUxMDEsIDUxMDEsIDU4MTIsIDU4MTksIDU1NTcsIDUxMDEsIDUxNDUsIDUyODEsIDUxMDEsIDQ4NDQsIDU4NzYsIDQ4NTIsIDU1OTUsIDUxMDEsIDQ4ODgsIDUxMDEsIDU5NTAsIDUxMzYsIDQ0MzQsIDUxMDEsIDQ2MTUsIDUxMDEsIDUxMDEsIDU4MjMsIDU4NDgsIDU5NDEsIDUxMDEsIDUxMDEsIDUzNjMsIDUxMDEsIDU0NzIsIDUzNzMsIDUxMDEsIDUxMDEsIDUzODYsIDUxMDEsIDU4NjAsIDQ4ODgsIDU4NjgsIDU4ODcsIDUwMTEsIDUwMTEsIDUxMDEsIDUxMDEsIDU0MTQsIDUxMDEsIDY1MjgsIDUzNzYsIDUxMDEsIDUxMDEsIDU0MTQsIDYzNDcsIDU1NDUsIDU5MDgsIDY1MjcsIDQ3MzIsIDU5MDQsIDY1MjksIDUxMDEsIDUxMDEsIDU0MjMsIDUxMDEsIDUxMDEsIDUxMDAsIDU5NDIsIDUxMDEsIDUxMDEsIDUxMDEsIDU0MjYsIDUxMDEsIDUxMDEsIDUxMDEsIDU0NzksIDU5MTIsIDU5MjQsIDUxMDEsIDUxMDEsIDU0MjMsIDUxNjMsIDUxNTgsIDUxMDEsIDUxMDEsIDUxMDEsIDQ5ODksIDUxMDEsIDUzNTAsIDU5MjksIDUzNzYsIDUxMDEsIDUxMDEsIDU0NTQsIDUyNzAsIDYyMTUsIDUzOTMsIDUzNzQsIDUxMDEsIDUxNjgsIDUxNzMsIDUxMDEsIDUxMDEsIDUxMDEsIDUwMjEsIDUxMDksIDUxMDEsIDU0MTEsIDUxMDEsIDU4NTMsIDUxMDEsIDYzNDcsIDUxMDEsIDUxMDAsIDUxMDEsIDUxMDIsIDU5NDcsIDU5MjUsIDUxMDEsIDUxMDEsIDU1MzAsIDQ5ODAsIDQ4MTEsIDU2NTAsIDU5NTQsIDUzNzYsIDQ4MTIsIDU5NTksIDU5NTUsIDUxMDEsIDUxODQsIDU1MzksIDY0MzYsIDU4NzksIDUwOTgsIDUxMDIsIDU1MzgsIDUxMDEsIDYxNjYsIDUxMDEsIDUxMDIsIDU0NDcsIDU0NDIsIDQ1ODUsIDU5OTMsIDUxMDEsIDUxMDEsIDU1MzgsIDYwODksIDUwOTksIDQ1OTIsIDUxMDEsIDUxMDEsIDU1NDYsIDU5MDMsIDQ1ODQsIDU5OTMsIDUxMDEsIDUxMDEsIDU2NDksIDU5NDAsIDUxMDIsIDQ1ODYsIDU5OTQsIDUxMDEsIDUyMzEsIDQ4ODcsIDUxMDEsIDQ5NzQsIDUxMDAsIDUxMDEsIDUxMDEsIDY3MTIsIDUxMDEsIDUxMDEsIDQ1ODQsIDU5OTUsIDUxMDEsIDUxMDEsIDU3MDYsIDU4OTgsIDQ1ODUsIDU5OTUsIDUxMDEsIDUxMDEsIDU4MDgsIDUxMDEsIDUxMDYsIDUxMDEsIDU0MTMsIDYzNDYsIDUxMDIsIDYwMDQsIDUxMDEsIDUxMDEsIDU4MzMsIDU4NDAsIDYzOTIsIDUxMDcsIDU0MTIsIDU4NzYsIDQ4OTQsIDUxNTIsIDUxMDEsIDUwMzUsIDU1NzYsIDUxMDEsIDUxMDEsIDUxMDYsIDYwMTYsIDUxMDEsIDUxMDEsIDU4MzcsIDU4NDEsIDUxMDEsIDUxMDEsIDUzMzgsIDUxMDEsIDYwMTUsIDUxMDEsIDUxMDEsIDUxMDEsIDU1NDcsIDU0MTIsIDUxMDEsIDUxMDEsIDUxMDEsIDU2MTIsIDUxMDEsIDYxNjEsIDUxMDEsIDUxMDEsIDUxMDEsIDU2NzksIDUxMDEsIDUxMDEsIDYzNjcsIDUxMDEsIDUxMDEsIDU4NDIsIDYwOTYsIDUxMDEsIDYyODIsIDUxMDEsIDQ0ODYsIDYwMjEsIDYwNDYsIDYwNDUsIDYwNDYsIDYwNDYsIDYwNDMsIDYwNDYsIDYwNTAsIDYwNTQsIDYwNTgsIDYwNjIsIDYwNzEsIDYwNjYsIDYwNzAsIDYwNzEsIDYwNzEsIDYwNzUsIDYwNzUsIDYwNzUsIDYwNzUsIDYwNzgsIDYwODIsIDUxMDEsIDUxMDEsIDU4NDIsIDYwOTcsIDUxMDMsIDUyMzQsIDUxMDEsIDUxMDEsIDU4ODAsIDUzMDUsIDUxMDEsIDUxMDEsIDUwNDcsIDUxMDEsIDUxMDEsIDYxMDIsIDUxMDksIDYxMDgsIDUxMDEsIDUyMzYsIDUxMDEsIDUxMDEsIDUzMjUsIDUxMDEsIDYxMTcsIDUxMDEsIDYxMjMsIDUxMDEsIDUyNDksIDYyMDksIDYyMDIsIDUxMDEsIDY0OTMsIDUxMDEsIDUxMDEsIDU4OTcsIDUxMDEsIDUxMDEsIDYxNDIsIDYxODEsIDUwOTYsIDU4NDMsIDYwOTcsIDUxMDEsIDUxMDEsIDU5NjYsIDUxMDEsIDUxMDEsIDU5OTYsIDUxMDEsIDUxMDEsIDUxMDEsIDU4NzYsIDUxMDMsIDYxNzQsIDUxMDEsIDUxMDEsIDU0MTYsIDU0MjEsIDUxMDEsIDUxMDEsIDUyNTEsIDYyMDAsIDYyMDQsIDUxMDEsIDUxMDEsIDUxMDEsIDU5NDksIDYxNDcsIDYxNTIsIDYwMDAsIDQ5ODAsIDQ5ODAsIDQ5ODAsIDUxMDEsIDUyOTIsIDQ2MzUsIDUxMDEsIDUyOTksIDUxMDEsIDUxMDEsIDUwNTgsIDUwNjIsIDUzNzEsIDYzNjEsIDU3MzcsIDUxMDEsIDUxMDEsIDU5NzUsIDQ4NDgsIDU5ODgsIDYxMzcsIDUxMDEsIDUxMDEsIDUxMDEsIDU4ODIsIDUxMDIsIDU3MzQsIDU3MzgsIDUxMDEsIDUzMTcsIDY0NjIsIDUzNDksIDYzODIsIDUxMDEsIDYxNjAsIDYxNTksIDUxMDEsIDYxNzMsIDUxMDEsIDUxMDEsIDU5OTksIDUxMDEsIDUxMDEsIDY2NjcsIDUxMDYsIDQ4OTQsIDYyNDcsIDQ5NzgsIDUxMDEsIDUxMDEsIDYwMDQsIDUxMDEsIDYzNjEsIDYxOTksIDYyMDMsIDUxMDEsIDUxMDEsIDUxMDEsIDU4OTYsIDYzODIsIDYzODIsIDUxMDEsIDUxMDEsIDYxMTEsIDU0MTgsIDUxMDEsIDUxMDEsIDY2NjgsIDQ4OTMsIDYxODYsIDUxMDEsIDY3NjksIDU4NzksIDUxMDEsIDUxMDEsIDU1MjksIDYxODgsIDUxMDEsIDUxMDEsIDYxMjYsIDU1OTksIDUxMDIsIDYxOTcsIDYyMDEsIDYyMDUsIDU0MTksIDYxODIsIDQ0MzQsIDUxMDEsIDUxMDEsIDYwODksIDUyNTIsIDYyMDEsIDYyMDUsIDU1ODUsIDUxMDEsIDUxMDEsIDUxMDEsIDYwMDcsIDY0NTUsIDQ0NTAsIDUxMDEsIDUxMDEsIDYxMzMsIDUxMDEsIDUxMDEsIDUxMDEsIDU2OTUsIDY0NTQsIDQ0NDksIDQ0MzQsIDUxMDEsIDUzNTAsIDUxMDEsIDU4NzgsIDUxMDEsIDYyODAsIDQ4ODYsIDQ5ODgsIDYyMjksIDUxMDEsIDUxMDEsIDYxNjIsIDQ2MTQsIDUxMDEsIDYzNzgsIDQ0MzQsIDUxMDEsIDUzNzUsIDUxMDEsIDQ1NjIsIDYyMjksIDUxMDEsIDQ5NzgsIDYyMTQsIDYxNjEsIDQ5ODAsIDUxMDEsIDUxMDEsIDYxNjIsIDUxMDEsIDUxMDEsIDUxMDEsIDU2NTUsIDU2NDAsIDYyMzQsIDUxMDEsIDUxMDEsIDUxMDEsIDYwODksIDUxMDEsIDYyNTgsIDQ0MzQsIDYyNDAsIDUxMDEsIDYyNTgsIDQ0MzQsIDUxMDEsIDU0MDQsIDU5NjIsIDUxMDEsIDUxMDIsIDU0MzcsIDY0MjQsIDYyMzUsIDUxMDEsIDUxMDEsIDU1NjgsIDU0MTAsIDUxMDEsIDUxMDEsIDYyMzYsIDUxMDEsIDYxNjUsIDUxMDEsIDUxMDEsIDUxMDEsIDYyNTksIDUxMDEsIDUxMDEsIDYxNjQsIDUxMDEsIDUxMDEsIDUxMDEsIDU2NDgsIDU4NDksIDU5NDIsIDUxMDEsIDYyNjAsIDUxMDEsIDYxNjUsIDUxMDEsIDU0MDUsIDU0MDksIDUxMDEsIDUwNTcsIDUyNjgsIDU0MDksIDUxMDEsIDUxMDEsIDUxMDIsIDY3NDIsIDUyNTMsIDUxMDEsIDUxMDEsIDUxMDEsIDYyNjAsIDUxMDEsIDUxMDEsIDYyNTksIDUxMDEsIDYxNjcsIDYyNTgsIDUxMDEsIDUxMDEsIDUxMDEsIDYxMTIsIDYyNTksIDUxMDEsIDYyNTksIDYxNjUsIDQ4NDcsIDU5ODcsIDUzNzYsIDU1NjgsIDY0OTcsIDYyNTksIDU1NjgsIDY0OTcsIDYxNjgsIDYyNTcsIDYyNTcsIDYyNjEsIDYyNTEsIDYyNTQsIDYyNTQsIDUxMDEsIDUxMDEsIDUxMDEsIDYxNjksIDUxMTgsIDUxMDEsIDU5MTYsIDUxMDEsIDU0MTQsIDU1MzgsIDUxMDEsIDUxMDEsIDU5MTgsIDQ4OTYsIDU1NTMsIDQ4ODQsIDUwMzcsIDYyNzIsIDYyODcsIDYzMDUsIDYyOTksIDYzMDUsIDYzMDMsIDYyOTksIDYzMDksIDYyOTMsIDYyOTAsIDYyOTUsIDYzMjIsIDYzMTMsIDYzMjcsIDYzMTYsIDYzMTksIDYzMjMsIDYzMzIsIDYzMzEsIDYzMzksIDYzMzksIDYzNDAsIDYzMzksIDYzMzksIDYzMzksIDYzMzYsIDYzNDQsIDUxMDEsIDUxMDEsIDUxMDEsIDYxNzgsIDUyMjQsIDU3NDcsIDUzNzYsIDUxMDEsIDUxMDEsIDU0MTUsIDUxMDEsIDUxMDEsIDYzNTEsIDQ4OTMsIDQ4OTMsIDQ4ODIsIDUyMzAsIDUwMDEsIDUxMDEsIDYzNzIsIDUxMDEsIDUxMDEsIDYyMTQsIDQ5ODAsIDUxMDEsIDYzNTcsIDU5NjksIDUxMDEsIDU0MTcsIDU0MTksIDYzNTMsIDYzNjYsIDQ0MzQsIDUxMDEsIDYzNzEsIDYzOTAsIDYzOTcsIDY0MDEsIDUxMDEsIDU0MTgsIDQ2MzYsIDU2NDcsIDY0MzQsIDUxMDEsIDUxMDEsIDUxMDEsIDYxOTIsIDU5NDMsIDUxMDEsIDUwMDgsIDUxMDEsIDQ5NzgsIDUxMDEsIDQ5NzksIDUxMDEsIDU0MTYsIDUxMDEsIDYzNTEsIDQ4OTMsIDU0MTksIDYzNTIsIDQ4OTQsIDYyNjgsIDYzNjcsIDUwMDIsIDUxMDEsIDUxMDEsIDYyNzksIDU2NDEsIDUxMDEsIDUxMDEsIDUyOTAsIDUxMDEsIDY0NTIsIDUxMDEsIDUxMDEsIDUxMDEsIDYyMjMsIDUxMDEsIDY0NzAsIDY0NTksIDY0ODAsIDY0NzUsIDY0NzksIDYyMDUsIDUxMDEsIDU0MjMsIDU0MDcsIDUxMDEsIDUwNTcsIDUwNjEsIDUzOTAsIDY0ODEsIDUxMDEsIDUxMDEsIDUxMDEsIDYyMjgsIDU1ODksIDU1ODgsIDU1ODcsIDUxMDEsIDU0MzYsIDU0NDIsIDY0MjgsIDU0MDIsIDUxMDEsIDUxMDEsIDUxMDIsIDYxNDMsIDYxODIsIDUxMDYsIDU3NDUsIDY1MjAsIDUxMDEsIDU0NTUsIDU0MDksIDUxMDEsIDUwNTcsIDUwNjEsIDUzNzAsIDYyNjcsIDUxMDEsIDU0MTAsIDUxMDEsIDU1MzUsIDUxMDEsIDUxMDEsIDUxNzcsIDU2NDAsIDU0MjMsIDU5OTksIDUxMDEsIDUxMDEsIDYzNjAsIDU3MzYsIDY3MzgsIDYyMDQsIDUxMDEsIDUxMDEsIDYzNzgsIDUxMDEsIDUyMjQsIDUwNzcsIDUxMDEsIDUwMDgsIDYyNjUsIDU1NTUsIDUxMDEsIDU0MTUsIDUwNzAsIDUwODIsIDU2MjIsIDUxMDEsIDUxMDEsIDYyNzgsIDYxNjUsIDUyMzMsIDUxMDEsIDUzNzcsIDYzNzcsIDYzODYsIDUxMDMsIDUxMDEsIDU2NzksIDUxMDEsIDU1MzgsIDUxMDEsIDUxMDEsIDUxMDEsIDU1MzQsIDU1MzgsIDQ4MjYsIDU5MzUsIDY3MzcsIDYyMDQsIDQ4MjcsIDU5MzYsIDY1MzUsIDYyMDQsIDYxOTEsIDYxOTEsIDUxMDEsIDUxMDEsIDYzNzgsIDYzOTMsIDUyMzIsIDUxMDEsIDUwMzYsIDUxMDEsIDU1NDMsIDUyNTksIDUzMjYsIDYxOTAsIDUxMDEsIDUxMDEsIDUxMDEsIDYyNzgsIDU0NDMsIDY1MDYsIDQ0MzQsIDUxMDEsIDU1NjgsIDYyMzYsIDUxMDEsIDUxMDEsIDU1NjgsIDUxMDEsIDUxMDIsIDY1MTEsIDUxMzQsIDY1MDcsIDUxNjQsIDQ0NTEsIDUxMDEsIDUxMDEsIDYzOTIsIDUxMDEsIDYxNjUsIDUxMDEsIDYxOTIsIDYxOTIsIDYxOTIsIDUxMDEsIDUxMDEsIDYzNzgsIDYzOTIsIDUxMDEsIDUxMDEsIDY1MTcsIDUzNzYsIDUxMDEsIDU1ODMsIDUxMDEsIDUxMDEsIDUxMDEsIDYwMTEsIDY1MjQsIDUxMDEsIDYyNzgsIDUxMDEsIDUxMDEsIDUxMDEsIDUwMzcsIDYxNTUsIDUxMDEsIDUxMDEsIDUxMDEsIDYzODIsIDY1MzMsIDY1NDksIDUxMDEsIDUxMDEsIDUxMDEsIDYzNzksIDYzOTMsIDUxMDEsIDY1NDQsIDYzODEsIDUxMDEsIDU1OTMsIDUxMDEsIDUxMDEsIDUyMjksIDU2MzQsIDUxMDEsIDY2NzYsIDY1NDksIDUxMDEsIDU2MTYsIDYyMzAsIDUxMDEsIDUzNTEsIDU4NzcsIDQ4OTUsIDU0MTEsIDU0MzIsIDUxMDEsIDUxMDEsIDUxMDEsIDUwMzEsIDUxMDEsIDY2NzUsIDY1NDgsIDUxMDEsIDUxMDEsIDUxMDEsIDYzOTEsIDUxMDEsIDY1MzksIDU0MjYsIDUxMDEsIDUxMDEsIDU0MTcsIDU5MjAsIDQ4OTYsIDUxMDEsIDU2NDgsIDY3MjIsIDU0MTYsIDY0NjIsIDUxMDEsIDU1NjIsIDUxMDEsIDY1NTQsIDYzODEsIDUxMDEsIDU2ODAsIDUxMDEsIDUxMDEsIDYzODEsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDEsIDQ1ODMsIDUxMDEsIDY1NDAsIDU0MjUsIDUxMDEsIDU0MjYsIDUxMDEsIDUxMDEsIDY3MDksIDU0MTcsIDQ4OTUsIDUxMDIsIDQ1OTUsIDUxMDEsIDUxMDEsIDY0MDYsIDUxMDEsIDQ1OTQsIDU0MDMsIDY1NDAsIDUxMDEsIDU3MTQsIDUwMDMsIDQ5OTEsIDYwOTAsIDY1NjgsIDUxMDEsIDUxMDEsIDY0NjQsIDQ5ODgsIDUxMDEsIDYwOTEsIDYzODEsIDUxMDEsIDU4NDIsIDUwMzcsIDU5OTgsIDU5OTYsIDU5OTYsIDU0MTMsIDQ4OTMsIDUxMDEsIDUxMDEsIDUxMDEsIDY0MTksIDUxMDEsIDYwOTEsIDUxMDEsIDUxMDEsIDY0OTIsIDY0OTEsIDUxMDEsIDYwOTEsIDUxMDEsIDQ4OTUsIDQ1NjEsIDQ4OTYsIDUxMDEsIDUxMDEsIDYwOTAsIDYwODksIDQ4OTYsIDUxMDEsIDUxMDEsIDY0OTQsIDYyNTYsIDQ1NTksIDUxMDEsIDUxMDEsIDYwOTAsIDUxMDEsIDUxMDEsIDYwOTAsIDQ1NjEsIDYwODksIDQ1NjEsIDUxMDEsIDYwODksIDQ1NjAsIDU1MzcsIDYwODksIDUxMDEsIDU1MzcsIDY1NzQsIDY3NTIsIDQ4ODgsIDQ1NzcsIDU3MTYsIDU5OTcsIDY1NzksIDUxMDEsIDU4NDQsIDUwMzcsIDUxMDEsIDUxMDEsIDUxMDEsIDYxOTYsIDUxMDEsIDY0NjIsIDY0NjUsIDY0NjMsIDQ4NjksIDU4MjYsIDU4MjksIDY1ODcsIDQ0ODksIDQ2NDYsIDY1OTgsIDY1OTEsIDY1OTcsIDY1OTMsIDY2MDUsIDY2MDIsIDY2MDcsIDY2MTEsIDY2MTMsIDY2MTcsIDY2MTksIDY2MjgsIDY2MjUsIDY2MzIsIDY2MjEsIDY2MzUsIDY2MzksIDY2NDAsIDY2NDQsIDY2NDcsIDY2NTQsIDY2NTMsIDY2NTEsIDY2NTgsIDY2NjEsIDY2NjUsIDUxMDEsIDY1NzQsIDY3MjMsIDUxMDEsIDU4NzYsIDYyODEsIDU2NzAsIDU0MTgsIDU0MjEsIDUxMDEsIDUxMDEsIDUxMDEsIDY0NjksIDUxMDcsIDUxMDEsIDQ5NzUsIDUxMDEsIDQ5NzYsIDY2NzIsIDUxMDEsIDUxMDEsIDUxMDEsIDY2ODIsIDY0OTQsIDUxMDEsIDUxMDEsIDUxMDEsIDY2OTUsIDY2ODAsIDUzMTMsIDY2ODYsIDUxMDEsIDU4NzcsIDU2ODQsIDQ0MzQsIDYyNDYsIDUxMDEsIDUxMDEsIDYxNjMsIDUxMDEsIDUxMDEsIDUxMDEsIDY2OTIsIDUxMDEsIDUxMDEsIDY0OTUsIDUxMDEsIDUxMDEsIDY3MDMsIDUxMDEsIDUxMDEsIDUxMDEsIDY3MTMsIDUxMDEsIDUxMDEsIDY3MTgsIDY3MTcsIDQ4MzQsIDY3MjIsIDUxMDEsIDU0MTgsIDU0MjIsIDUxMDEsIDY3MjcsIDY3MzQsIDUxMDEsIDU4ODEsIDUzNTcsIDUzMzcsIDY3NDYsIDUxMDEsIDUxMDEsIDUxMDEsIDY0OTUsIDYzNzgsIDUxMDEsIDYyMjIsIDY3NDUsIDUxMDEsIDU4ODksIDUxMjgsIDUwNzQsIDQ0NDIsIDYyMjQsIDY3NDcsIDUxMDEsIDU4NzcsIDU2MTUsIDU2NzEsIDU4NzYsIDUxMDEsIDU4NzksIDUxMDEsIDU4OTksIDYyMzAsIDUxMDEsIDUxMDEsIDYwODksIDUxMDEsIDUxMDEsIDQ4OTIsIDUxMDEsIDU0MTIsIDUwMDIsIDY3MzQsIDUxMDEsIDUxMDEsIDY3MTEsIDUxMDEsIDUxMDEsIDUyNTMsIDUxMDEsIDU4NzcsIDU4NzcsIDU4NzcsIDUxMDEsIDUxMDEsIDUxMDEsIDY3NzEsIDUxMDEsIDUxMDEsIDY1NzUsIDU2NDIsIDQ2MzUsIDU0MTEsIDYwODksIDUxMDEsIDQ4ODksIDUyNTgsIDUxMDEsIDUyNTIsIDQ1NjEsIDUxMDEsIDUxMDEsIDYwOTAsIDUyNTIsIDQ1NjEsIDU4NzYsIDU4NzYsIDUxMDEsIDUxMDEsIDUxMDEsIDU5MTQsIDYzNTMsIDYxNDgsIDUxMDYsIDQ5NzQsIDUxMDEsIDUxMDEsIDU5NzIsIDUxMDEsIDQ5ODksIDUxMDEsIDYxNjUsIDU0MjUsIDUxMDEsIDY2ODgsIDUxMDcsIDUxMDEsIDYxMTEsIDU3MjQsIDY3NTksIDU3MjUsIDQ1NjEsIDUxMDEsIDUxMDEsIDU5ODMsIDU5OTQsIDUxMDEsIDUxOTAsIDU4NzksIDUxMDEsIDUxMDEsIDUxMDEsIDUzNDQsIDUzNzYsIDUxMDYsIDUxMDEsIDUxMDEsIDU0MTMsIDY0NjMsIDU4NzksIDUxMDIsIDY3NzUsIDY3NjcsIDUxMDEsIDUxMDEsIDU5OTcsIDUxMDEsIDUxMDEsIDUxMDEsIDQ4MTEsIDQ1ODMsIDY3NjUsIDUxMDEsIDUxMDEsIDUxMDEsIDUxMDEsIDYwOTgsIDU0MjAsIDUxMDEsIDU5OTgsIDUxMDEsIDUxMDEsIDUxMDEsIDQ4MTgsIDUxMDksIDUxMDEsIDU0MTMsIDU1MzcsIDUxMDEsIDUxMDEsIDYxNjUsIDUxMDEsIDYxMTEsIDY1NjQsIDUxMDEsIDU5OTgsIDUxMDEsIDY3NjksIDUxMDEsIDUxMDEsIDYxMzIsIDYxMzcsIDUxMDEsIDYwOTgsIDUxMDEsIDUxMDEsIDYwMzMsIDYwMzEsIDYwMzksIDUxMDUsIDUxMDEsIDUxMDksIDUxMDEsIDQ4NjMsIDUxMDEsIDY3NzYsIDUxMDEsIDUxMDEsIDUxMDEsIDYwMzUsIDQ0MzQsIDUxMDEsIDYxNjEsIDU1MzYsIDUxMDEsIDUwMzYsIDUxMDIsIDUxMDEsIDUxMDEsIDYwODgsIDUxMDEsIDUxMDEsIDU0MTIsIDYwODksIDEwNDg1NzYsIDEwNzM3NDE4MjQsIDAsIDAsIDAsIC04NzI0MTUyMzIsIDQxOTQ1NjAsIDQxOTYzNTIsIDI3MDUzMjYwOCwgMjA5NzE1MiwgNDE5NDMwNCwgMTE3NDQwNTEyLCAxMzQyMTc3MjgsIDQxOTQzMDQsIDE2Nzc3MjE2LCA0MTk0NDMyLCAzMTQ1NzI4LCAxNjc3NzIxNiwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDAsIDU0MTA2NTIxNiwgNTQxMDY1MjE2LCAtMjE0MzI4OTM0NCwgLTIxNDMyODkzNDQsIDQxOTQzMDQsIDQxOTQzMDQsIDQxOTYzNTIsIC0yMTQzMjg5MzQ0LCA0MTk0MzA0LCA0MTk0NDMyLCAzNzc0ODczNiwgNTQxMDY1MjE2LCAtMjE0MzI4OTM0NCwgNDE5NDMwNCwgNDE5NDMwNCwgNDE5NDMwNCwgNDE5NDMwNCwgMzc3NDg3MzYsIDQxOTQzMDQsIDQxOTQzMDQsIDQxOTgxNDQsIDQxOTYzNTIsIDg1NDAxNjAsIDQxOTQzMDQsIDQxOTQzMDQsIDQxOTQzMDQsIDQxOTYzNTIsIDI3NjkwMTg4OCwgNDE5NDMwNCwgNDE5NDMwNCwgODQyNTQ4OCwgNDE5NDMwNCwgMSwgMCwgMTAyNCwgMTAyNCwgMCwgMTAyNCwgNzQyMzkxODA4LCAyMzkwNzUzMjgsIC0xNDA1MDkxODQwLCA3NDIzOTE4MDgsIDc0MjM5MTgwOCwgNzc1OTQ2MjQwLCAyMzkwNzUzMjgsIDE3MTk2NjQ2NCwgNzc1OTQ2MjQwLCAxNzE5NjY0NjQsIDE3MTk2NjQ2NCwgMTcxOTY2NDY0LCAxNzE5NjY0NjQsIC0xNDA1MDkxODQwLCA3NzU5NDYyNDAsIDc3NTk0NjI0MCwgLTE0MDUwOTE4NDAsIC0xMzcxNTM3NDA4LCA3NzU5NDYyNDAsIDc3NTk0NjI0MCwgNzc1OTQ2MjQwLCAxNzE5NjY0NjQsIDIzOTA3NTMyOCwgMjM5MDc1MzI4LCAxNzE5NjY0NjQsIDc3NTk0NjI0MCwgLTEzNzE1Mzc0MDgsIDc3NTk0NjI0MCwgNzc1OTQ2MjQwLCAtMTM3MTUzNzQwOCwgMjM5MDc1MzI4LCA3NzU5NDYyNDAsIDc3NTk0NjI0MCwgNzc1OTQ2MjQwLCA3NzU5NDYyNDAsIDQ3MTg1OTIsIDY0LCA0NzE4NTkyLCAyMDk3MjE2LCA0NzIwNjQwLCA1NDE1ODk1MDQsIDQxOTQzNjgsIDU0MTU4OTUwNCwgNDE5NDQwMCwgNDE5NDM2OCwgNTQxMDY1MjgwLCA0MTk0MzY4LCAtMjE0MzI4OTI4MCwgNDE5NDM2OCwgLTIxNDMyODU0NDAsIC0yMTQzMjg1NDA4LCAtMjE0MzI4NTQwOCwgLTIxMDk3MzA5NzYsIC0yMTQzMjg1NDA4LCAtMjE0MzI4NTQwOCwgLTIxNDMyODU0MDgsIC0yMTQzMjg1NDA4LCA3NzY0NzA1MjgsIC0yMTQzMjg1NDA4LCAtMjEwOTczMDk3NiwgNzc1OTQ2MzM2LCA3NzU5NDYzMDQsIDc3NjQ3MDUyOCwgNzc1OTQ2MzA0LCAtMTkwODQwNDM4NCwgMiwgNCwgOCwgMjYyMTQ0LCAwLCAwLCAwLCAweDgwMDAwMDAwLCA4LCAyNjIxNDQsIDI2MjE0NCwgMTA0ODU3NiwgMCwgMTI4LCA0MDk2LCAwLCA0MTk0MzA0LCAxMjgsIDEyOCwgMCwgMTA0ODU3NiwgMCwgMCwgMTUzNiwgMTc5MiwgMCwgMCwgMSwgMiwgNCwgMTI4LCAyMDk3MTUyLCA4MTkyLCA4MzkyNzA0LCAwLCAwLCAxLCA0LCA4LCAyNjIxNDQsIDUzNjg3MDkxMiwgNjQsIDY0LCAzMiwgOTYsIDk2LCA5NiwgOTYsIDEyOCwgMTUzNiwgNTI0Mjg4LCA5NiwgNjQsIDUyNDI4OCwgNTI0Mjg4LCAxNTM2LCAxMDI0LCAwLCAwLCAwLCAyOSwgOTYsIDEwNDg1NzYsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMjA0OCwgMjA0OCwgMjA0OCwgMjA0OCwgMjA0OCwgMjA0OCwgMCwgOTYsIDUyNDI4OCwgOTYsIDY0LCAwLCAwLCAxMjgsIDEwMjQsIDUyNDI4OCwgNjQsIDY0LCA5NiwgOTYsIDUyNDI4OCwgNTI0Mjg4LCA0MTAwLCAxMDI0LCAxMDA2ODA3MDQsIDk2LCA1MjQyODgsIDY0LCA5NiwgNTI0Mjg4LCA2NCwgODAsIDUyOCwgNTI0MzA0LCAxMDQ4NTkyLCAyMDk3MTY4LCAyNjg0MzU0NzIsIDE2LCAxNiwgMiwgNTM2OTM2NDQ4LCAxNiwgMjYyMTYwLCAxNiwgNTM2OTM2NDQ4LCAxNiwgMTcsIDE3LCAyMCwgMTYsIDQ4LCAxNiwgMTYsIDIwLCA1NjAsIDI0LCA1NjAsIDQ4LCAyMDk3NjgwLCAzMTQ1NzQ0LCAxMDQ4NTkyLCAxMDQ4NTkyLCAyMDk3MTY4LCAxNiwgMTA0OTEwNCwgMjIyODc4NCwgMjA5NzE2OCwgMjA5NzE2OCwgMTYsIDE2LCAxNiwgMTYsIDIwLCA0OCwgNDgsIDMxNDYyNTYsIDIwOTc2ODAsIDEwNDg1OTIsIDE2LCAxNiwgMTYsIDI4LCAwLCAyMDk3NTUyLCAzMTQ2MjU2LCAxNiwgMTYsIDE2LCAyMSwgMTYsIDE2LCAyOCwgMTYsIDAsIDE2LCAwLCAtMjA0NjgyMDM1MiwgMCwgMCwgMiwgMiwgMiwgMjA5ODA2NCwgMTcsIDIxLCAyNjYyNDAsIDEwNDg1NzYsIDY3MTA4ODY0LCAweDgwMDAwMDAwLCAwLCAwLCA2NCwgNjU1MzYsIDEwNDg1NzYsIDAsIDE2LCAxNiwgMTYzNTc3ODU2LCAxNywgNTI4LCA1MjgsIDE2LCA1MjgsIC0xNjE0MzAxODgsIC0xNjE0Mjk2NzYsIC0xNjE0Mjk2NzYsIC0xNjE0MzAxODgsIC0xNjE0Mjk2ODAsIC0xNjE0MzAxODgsIC0xNjE0MzAxODgsIC0xNjE0Mjk2ODAsIC0xNjE0Mjk2NzYsIC0xNjEzNDkwNzIsIC0xNjE0Mjk2NzUsIC0xNjEzNDkwNzIsIC0xNjEzNDkwNzIsIC0xNjEzNDkwNzIsIC0xNjEzNDkwNzIsIC0xNjEzNDc3MjgsIC0xNjEzNDc3MjgsIC0xNjEzNDc3MjgsIC0xNjEzNDc3MjgsIC0xNjEyOTg1NzIsIC0xNjA3NzQyODgsIC0xNjAyOTkwODQsIC0xNjEyOTg1NzIsIC0xNjEyOTg1NzYsIC0xNjAyOTkwODgsIC0xNjEyOTg1NzYsIC0xNjA3NzQyODQsIC0xNjA3NzQyODQsIC0xNjEyOTg1NzIsIC0xNjEyOTg1NzIsIC0xNjEyOTg1NzIsIC0xNjEyOTg1NzIsIDExMiwgMjEsIDUzLCAxNDY4MDQ3NTcsIDE0NjgxMjk0OSwgMTQ2ODYyMTAxLCAxNDY4NjMzODksIC0xNjE0Mjk2NzYsIC0xNjA5MDUzODgsIC0xNjE0Mjk2NzYsIC0xNjE0Mjk2NzYsIC0xNjE0Mjk2NzYsIC0xNjE0Mjk2NzYsIC0xNjE0Mjk2NzUsIC0xNjEzNDkwNzIsIDE0Njg2MzQyMSwgMTQ4OTYwNTQxLCAxNDY4NjMzODksIDE0Njg2MzM4OSwgMTQ4OTYwNTQxLCAxNDY4NjM0MjEsIDE0ODk2MDU0MSwgMTQ4OTYwNTQxLCAtMTYxNDI5NzQwLCAtMTYxNDI5Njc2LCAtMTYwOTA1Mzg4LCAtMTYxMjk4NTcyLCAtMTYxMjk4NTcyLCAtMTg4NjAyNjcsIC0xNjA3NzQyODQsIC0xODcyOTE2MywgMCwgMCwgMSwgNiwgOCwgMTYsIDI2MjE0NCwgMCwgMCwgMSwgOCwgMCwgMjQsIDAsIDAsIDEsIDE0LCAxNiwgMzIsIDEwMjQsIDMyNzY4LCAxMDA2NjMyOTYsIC0xMDczNzQxODI0LCAwLCAwLCAwLCAxNTA1MjgsIDEzMTA3MiwgMTY3NzcyMTYsIDAsIDAsIDEsIDEwMiwgMSwgMzI3NjgsIDEzMTMyOCwgMTMxMDcyLCA1MjQyODgsIDIwOTcxNTIsIDgzODg2MDgsIDE2Nzc3MjE2LCAxNjQwOTYsIDAsIDAsIDAsIDEwMDcsIDAsIDEwNzM3NDE4MjUsIDB4ODAwMDAwMDAsIDB4ODAwMDAwMDAsIDEwNzM3NDE4MjQsIDgsIDAsIDAsIDU4MzY4LCAwLCAwLCA2NTUzNiwgMTA0ODU3NiwgNDA5NiwgMTA0ODU3NiwgNTEyLCA1MTIsIDk0NzYsIDEzNDIxODI0MCwgMCwgMTA3Mzc0MTgyNCwgMjYyMTQ0MCwgMTA3Mzc0MTgyNCwgMHg4MDAwMDAwMCwgMHg4MDAwMDAwMCwgMCwgMCwgNjYwNDgsIDAsIDAsIDAsIDY3MTA4ODY0LCAwLCAwLCAwLCAxNjM4NCwgMCwgMCwgMCwgOCwgMCwgMCwgMCwgOSwgNDQ1NjQ0OCwgOCwgMTY3NzcyMTYsIDEwNzM3NzQ1OTIsIDEyMjYwMTQ4MTYsIDEwMDY2NTM2MCwgMTAwNjY1MzYwLCAxMDA2NjUzNjAsIDEwMDY2NTM2MCwgLTIwNDY4MTgyODgsIDEwOTE3OTkxMzYsIDEwOTE3OTkxMzYsIDEwOTE4MDMzNjAsIDEwOTE3OTkxMzYsIDEwOTE3OTkxMzYsIC0yMDQ0MTk2ODQ4LCAxMDkxNzk5MTM2LCAxMDkxNzk5MTM2LCAxMDkxNzk5MTM2LCAxMDkxNzk5MTM2LCAxMDkxNzk5MTM2LCAxMTU4OTA4MDAwLCAxMTU4OTA4MDAxLCAxMTkyNDYyNDMyLCAxMTkyNDYyNDQ4LCAxMTkyNDYyNDQ4LCAxMTkyNDYyNDQ4LCAxMTkyNDYyNDQ4LCAxMjAwODUxMDU2LCAxMDkxNzk5MzkzLCAxMjAwODUxMDU2LCAxMjAwODUxMDU2LCAxMDkxNzk5MzkzLCAxMjAwODUxMDU2LCAxMjAwODUxMDU2LCAxMjAwODUxMDU2LCAxMTkyNDYyNDQ4LCAxODcwNjM4OTEyLCAxODcwNjM4OTEyLCAxODcwNjU1Mjk2LCAxODcwNjM4OTEyLCAxODcwNjU1Mjk2LCAxODcwNjU1Mjk2LCAxODcwNjU1Mjk2LCAxODcwNjU1Mjk2LCAxODcwNjU1Mjk2LCAxODcwNjU1MzEyLCAxODcwNjU1MzE2LCAxODcwNjU1MzE2LCAxODcwNjU1MzE2LCAxODcwNjU1MzE3LCAxODcwNjU1MzQ4LCAxODcwNjU1MzE2LCAxODcwNjU1MzE2LCAxODcwNjU1MzEyLCAxODcwNjU1MzEyLCAxODc5MDI3NTY4LCAxODc5MDQzOTUyLCAxODcwNjU1MzE2LCAxODcwNjU1MzE2LCAxODcwNjU1MzE2LCAxODcwNjM4OTI4LCAxODc5MDQzOTUyLCAxODc5MDQzOTU2LCAwLCAwLCAxLCAxMjI4OCwgMCwgMjI5NDQwLCAxMDQ4NTc2LCAxMjI0NzM2NzY4LCAxMDA2NjMyOTYsIDAsIDAsIDAsIDEwMjQsIDAsIDAsIDgxOTIsIDAsIDAsIDAsIDU3NiwgMCwgMjMxNDg4LCAxMDkwNTE5MDQwLCAwLCAwLCAwLCAyMDQ4LCAwLCAwLCAxMzQyMTc3MjgsIDAsIDExNTc2Mjc5MDQsIDExOTExODIzMzYsIDAsIDAsIDEzMTU4NCwgMjY4NDM1NDU2LCA0OTE1MiwgMCwgMCwgMCwgMTM0MjE3NzI4LCAwLCAwLCAwLCAxNiwgMCwgMCwgMCwgMTMsIDAsIDk0MzcxODQsIDIzMTc0NCwgMCwgMCwgMjM1NzEyLCAwLCAwLCAxMzEzMjgsIDAsIDAsIDEzMTA3MiwgMzI3NjgsIDAsIDAsIDEzNDIxNzcyOCwgMCwgNTIwMDAwLCA3ODY0MzIwLCAxODYyMjcwOTc2LCAwLCAwLCAwLCA0MDk2LCAwLCAwLCAwLCAxODYyMjcwOTc2LCAxODYyMjcwOTc2LCAxODYyMjcwOTc2LCAwLCAxNjI1MjkyOCwgMCwgMCwgMCwgODE5MiwgNjQsIDk4MzA0LCAxMDQ4NTc2LCAxNTA5OTQ5NDQsIDgzODg2MDgwLCAxMTc0NDA1MTIsIDAsIDAsIDIsIDQsIDE2LCAzMiwgMjU2LCAxMDI0LCA4MTkyLCAzMzU1NDQzMiwgMCwgMCwgNjQsIDI1NiwgMzU4NCwgODE5MiwgMTYzODQsIDY1NTM2LCAyNjIxNDQsIDUyNDI4OCwgMTA0ODU3NiwgMjA5NzE1MiwgNDE5NDMwNCwgMHg4MDAwMDAwMCwgODE5MiwgOTgzMDQsIDM5MzIxNiwgNTI0Mjg4LCAxMDQ4NTc2LCAxMDQ4NTc2LCAyMDk3MTUyLCA0MTk0MzA0LCAyNTE2NTgyNDAsIDUzNjg3MDkxMiwgODE5MiwgMTYzODQsIDk4MzA0LCAzOTMyMTYsIDI1MTY1ODI0MCwgNTM2ODcwOTEyLCAxMDczNzQxODI0LCAwLCAwLCAyMDk3MTUyLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAzLCAyNDAsIDAsIDgzODg2MDgwLCAxMTc0NDA1MTIsIDY0LCAwLCAyLCAwLCAwLCA1MjQyODgsIDUyNDI4OCwgNTI0Mjg4LCA1MjQyODgsIDI1NiwgMTUzNiwgMjA0OCwgODE5MiwgMTYzODQsIDI1NiwgMTUzNiwgODE5MiwgNjU1MzYsIDI2MjE0NCwgNTI0Mjg4LCAyMDk3MTUyLCA2NzEwODg2NCwgNDE5NDMwNCwgMTY3NzcyMTYsIDEwMDY2MzI5NiwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDUyNDI4OCwgMjA5NzE1MiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDUzNjg3MDkxMiwgMTA3Mzc0MTgyNCwgMCwgMCwgNTI0Mjg4LCAyMDk3MTUyLCAwLCAwLCAxMDQ4NTc2LCAyMDk3MTUyLCA2NzEwODg2NCwgMTA3Mzc0MTgyNCwgMCwgMCwgMTUzNiwgNjU1MzYsIDI2MjE0NCwgNTI0Mjg4LCAzMzU1NDQzMiwgMCwgMTAyNCwgNjU1MzYsIDI2MjE0NCwgMjA5NzE1MiwgMjA5NzE1MiwgMTA3Mzc0MTgyNCwgMCwgMCwgMiwgOCwgMTYsIDMyLCAwLCA4MTkyLCA0MDk2LCAwLCAwLCA2MDU1MDMsIDEwNjY0MDE3OTIsIDk0NzYsIDUxMiwgMCwgMzIsIDM4NCwgODE5MiwgNDE5NDMxMiwgNDE5NDMxMiwgNTQxMDY1MjI0LCA0MTk0MzEyLCA0MTk0MzEyLCA0MTk0MzEyLCA0MTk0MzEyLCA0MTk0MzQ0LCAtODY5NjU0MDE2LCAtODY5NjU0MDE2LCA0MjAzODIwLCAtODY5NjU0MDE2LCAtODY5NjU0MDE2LCAtODY5NjU0MDE2LCAtODY5NjU0MDE2LCAxMjc5NDAyNTA0LCAxMjc5NDAyNTA0LCAxMjc5NDAyNTA0LCAxMjc5NDAyNTA0LCAyMTQzNTQ5NDE1LCAyMTQzNTQ5NDE1LCAyMTQzNTQ5NDE1LCAyMTQzNTQ5NDE1LCAyMTQzNTQ5NDIzLCAyMTQzNTQ5NDIzLCAyMTQzNTQ5NDIzLCAyMTQzNTQ5NDIzLCAyMTQzNTQ5NDIzLCAyMTQzNTQ5NDIzLCAwLCAwLCAyLCAxNjM4NCwgMzI3NjgsIDI2MCwgNTEyLCAwLCAwLCAwLCA2NTUzNiwgMCwgMCwgMCwgMzg0LCA4MTkyLCAwLCAzMiwgNTEyLCAwLCAxMDUwNjI0LCAyNjIxNDQsIDUxMiwgMTI3NTIwODE5MiwgMTM5MjY0LCAxMjc1MDY4NDE2LCAwLCAwLCA0LCAxMjgsIDEwMjQsIDIwNDgsIDE2Mzg0LCAyNjIxNDQsIDgsIDQxOTQzMDQsIDAsIDAsIDAsIDgyNDMyLCAwLCA0MCwgMCwgMCwgNCwgMjU2LCAxMDI0LCA5ODMwNCwgMTMxMDcyLCAxNjc3NzIxNiwgMjY4NDM1NDU2LCAwLCAwLCAzMDAsIDQyMDM1MjAsIDAsIDAsIDIwOTcxNTIsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDAsIDAsIDUyMCwgNDMzMzU2OCwgMTI3NTA2ODQxNiwgMCwgMCwgNDE5NDMwNCwgMTAyNCwgMCwgNDA5NiwgODE5MiwgMCwgMCwgMCwgNTIwLCA1MjAsIDAsIDAsIDAsIDE2NDA5NiwgOTk5LCAyOTYxOTIwMCwgMjExMzkyOTIxNiwgMCwgMCwgMCwgMTAwNywgMTAwNywgMTAwNywgMCwgMCwgOCwgMTI0MTYwLCAzMiwgNTEyLCAwLCAyMDQ4LCA1MjQyODgsIDAsIDUzNjg3MDkxMiwgMCwgMTM5MjY0LCAwLCAwLCAwLCAxMzkyNjQsIDAsIDQwLCAwLCAyNjIxNDQwLCAwLCAwLCAweDgwMDAwMDAwLCAxNjEwNjEyNzM2LCAwLCAwLCAwLCAyMjkzNzYsIDAsIDQwLCAwLCA1MjQyODgsIDIwOTcxNTIsIDEwNzM3NDE4MjQsIDQ0LCAwLCAwLCAwLCAyNjIxNDQsIDAsIDAsIDE2Mzg0LCAyMjkzNzYsIDQxOTQzMDQsIDI1MTY1ODI0LCAxMDA2NjMyOTYsIDQwMjY1MzE4NCwgMTYxMDYxMjczNiwgMCwgMTEwLCAxMTAsIDExMCwgMCwgMCwgODM4ODYwOCwgODM4ODYwOCwgODE5MiwgMzM1NTQ0MzIsIDY3MTA4ODY0LCAxMzQyMTc3MjgsIDEwNzM3NDE4MjQsIDAsIDB4ODAwMDAwMDAsIDAsIDAsIDAsIDEyNTQ1LCAyNTE2NTgyNCwgMzM1NTQ0MzIsIDY3MTA4ODY0LCA0MDI2NTMxODQsIDUzNjg3MDkxMiwgMCwgMTA0LCAxMDQsIDEwNCwgODE5MiwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMCwgMCwgODM4ODYwOCwgMTM0MjE3NzI4LCAxMDczNzQxODI0LCAwLCAyMjkzNzYsIDI1MTY1ODI0LCAzMzU1NDQzMiwgNDAyNjUzMTg0LCA1MzY4NzA5MTIsIDAsIDAsIDI1NiwgMTAyNCwgNjU1MzYsIDE2Nzc3MjE2LCAyNjg0MzU0NTYsIDAsIDAsIDAsIDUyNDI4OCwgMCwgMCwgMCwgNjQsIDAsIDAsIDAsIDEyOCwgMCwgMCwgMCwgMjU2LCAwLCAwLCAwLCAzMDAsIDUyNDI4OCwgMjA5NzE1MiwgMHg4MDAwMDAwMCwgMCwgMCwgMSwgNiwgMzIsIDY0LCAyNTYsIDUxMiwgMjU2LCAxMDI0LCA0MDk2LCA4MTkyLCA2NTUzNiwgMiwgNCwgMzIsIDY0LCAyNTYsIDEwMjQsIDAsIDIsIDQsIDI1NiwgMTAyNCwgNjU1MzYsIDQsIDY0LCAyNTYsIDEwMjQsIDAsIDAsIDgsIDgzODg2MDgsIDAsIDk4MzA0LCAxMzEwNzIsIDI1MTY1ODI0LCAyNjg0MzU0NTYsIDUzNjg3MDkxMiwgMCwgMCwgODM4ODYwOCwgNDA5NiwgMCwgMCwgOCwgOCwgOCwgMCwgMjA0OCwgNTI0Mjg4LCA2NzEwODg2NCwgNTM2ODcwOTEyLCAzMiwgNDEwMCwgNjcxMDg4NjQsIDAsIDMyNzY4LCAwLCAzMjc2OCwgMCwgMTA0OTA4OCwgMCwgMTM0MzQ4ODAwLCAyNzA1MzI2MDgsIDAsIDEwNDkwODgsIDEwNDkwODgsIDgxOTIsIDEwNDkwODgsIDEyODQ1MDY1LCAxMjg0NTA2NSwgMTI4NDUwNjUsIDEyODQ1MDY1LCAxNDcxOTM4NjUsIDU1MDU1MzcsIDU1OTE1NTcsIDU1ODc0NjUsIDU1ODc0NTcsIDU1ODc0NTcsIDE0NzIwMjA1NywgNTU4NzQ1NywgNTU4NzQ1NywgNTU5MTU1NywgNTU4NzQ1NywgMTM4OTQxNTMsIDEzODk0MTUzLCAxMzg5NDE1MywgMTM4OTQxNTMsIDgxMDAzMDQ5LCAxMzg5NDE1MywgLTE4ODE3OTE0OTMsIC0xODgxNzkxNDkzLCAtMTg4MTc5MTQ5MywgLTE4ODE3OTE0OTMsIDAsIDAsIDgsIDMzNTU0NDMyLCAyNjIxNDQsIDAsIDMzNTU0NDMyLCAxMDI0LCAwLCA0LCAwLCAwLCAwLCA4Njc2NDcsIDEsIDU1MDUwMjQsIDAsIDAsIDE1LCAxNiwgMzIsIDE5MiwgODY1MjgsIDksIDAsIDAsIDE2LCA4MTkyLCAwLCAwLCAyMywgMCwgNzU0OTc0NzIsIDAsIDAsIDAsIDEwNDg1NzYsIDU1MDUwMjQsIC0xODg3NDM2ODAwLCAwLCAwLCAwLCAyMDk3MTUyLCAyNjg0MzU0NTYsIDAsIDAsIDQwOTYsIDgxOTIsIDY3MTA4ODY0LCAwLCAwLCAyNjIxNDQsIDQxOTQzMDQsIDgzODg2MDgsIDAsIDAsIDMzNTU0NDMyLCA4MTkyLCAwLCAwLCAyODgsIDgzODg2MDgsIDAsIDAsIDAsIDgxOTIwLCAwLCAwLCAyNCwgMjgyNjI0LCA2NCwgODk2LCA4MTkyLCAxMzEwNzIsIDI2MjE0NCwgMTA0ODU3NiwgMTY3NzcyMTYsIDMzNTU0NDMyLCAtMTk0NjE1NzA1NiwgMCwgMCwgMCwgMjYyMTQ0MCwgMCwgMTMxMDcyLCAwLCAzMiwgMCwgMCwgMjA0OCwgMzE0NTcyOCwgMCwgMTYzODQsIDY1NTM2LCAwLCAwLCAyNjg0MzU0NTYsIDMyLCA2NCwgMzg0LCA1MTIsIDUxMjAsIDgxOTIsIDAsIDY0LCAwLCAyMDQ4LCAxMDQ4NTc2LCAwLCAwLCAzMiwgNjQsIDM4NCwgODE5MiwgMTMxMDcyLCAwLCAwLCAzMjc2OCwgMTM0MjE3NzI4LCAwLCAwLCA4LCAzMiwgNjQsIDEwMjQsIDIwNDgsIDAsIDIsIDgsIDMyLCAzODQsIDgxOTIsIDEzMTA3MiwgMzM1NTQ0MzIsIDEzMTA3MiwgMTA0ODU3NiwgMzM1NTQ0MzIsIDEzNDIxNzcyOCwgMHg4MDAwMDAwMCwgMCwgMCwgMjA0OCwgNTI0Mjg4LCA1MzY4NzA5MTIsIDAsIDEwNzM3NDE4MjQsIDAsIDEzMTA3MiwgMzM1NTQ0MzIsIDB4ODAwMDAwMDAsIDAsIDAsIDMzNTU0NDMyLCAxMDczNzQxODI0LCAwLCAzMiwgMCwgNTI0Mjg4LCAwLCAwLCA2NzEwODg2NCwgNjQsIDY0LCAwLCA5NiwgOTYsIDAsIDUyNDI4OCwgNTI0Mjg4LCA1MjQyODgsIDY0LCA2NCwgNjQsIDY0LCA5NiwgOTYsIDk2LCAwLCAwLCAwLCAyOCwgMCwgODM5NjgwMCwgNDE5NDMwNCwgMTM0MjE3NzI4LCAyMDQ4LCAxMzQyMTc3MjgsIDAsIDAsIDMyLCAxLCAwLCA4Mzk2ODAwLCAwLCAwLCAzMiwgNjQsIDEyOCwgMTAyNCwgMjA0OCwgMjYyMTQ0LCAwLCAxNjM4NCwgMCwgMiwgNCwgNjQsIDEyOCwgMzg0MCwgMTYzODQsIDE5OTIyOTQ0LCAyMDgwMzc0Nzg0LCAwLCAxNjM4NCwgMTYzODQsIDE2Nzc3MjE2LCAxNjM4NCwgMzI3NjgsIDEwNDg1NzYsIDIwOTcxNTIsIDQxOTQzMDQsIDE2Nzc3MjE2LCA1MjQyODgsIDI2ODU2NzA0MCwgMTYzODQsIDIxMTM1NDQsIDY4NDg5MjM3LCA3MjYxODAwNSwgNjg0MjM3MDEsIDY4NDIzNzAxLCA2ODQyMzcwMSwgNjg0ODkyMzcsIDY4NDIzNzAxLCAtMjA3OTA1OTg4MywgLTIwNzkwNTk5NDcsIDY4NDIzNzAxLCA4NTIwMDkxNywgNjg0MjM3MDEsIDY4NDIzNzAxLCA2ODQyMzcwMSwgNjg0MjM3MDEsIDY4NDIzNzY1LCAtMjA3OTA1OTg4MywgNjg0MjU3NDksIDY4NDIzNzAzLCA2OTQ4ODY2NCwgODUyMDA5MTksIDY5NDg4NjY0LCA2OTQ4ODY2NCwgNjk0ODg2NjQsIDY5NDg4NjY0LCA3MDUzNzI0NCwgNzA1MzcyNDUsIDcwNTM3MjQ1LCA3MDUzNzI0NSwgNzA1MzczMDksIDcwNTM3MjQ1LCAtMjA3Njk0NjMzOSwgLTIwNzY5NDY0MDMsIDcwNTM3MjQ1LCAtMjA3Njk0NjMzOSwgNzA1MzcyNDUsIDcwNTM3MjQ1LCA3MDUzNzI0NSwgNzA1MzcyNDUsIDcwNTM5MjkzLCAtMjAyMjM1MTc0NSwgLTIwMjIzNTE3NDUsIC0yMDIyMzUxNjE3LCAtMjAyMjM1MTc0NSwgLTIwMjIzNTE2MTcsIC0yMDIyMzUxNjE3LCAtMjAyMjM1MTYxNywgLTIwMjIzNTE2MTcsIC0yMDIyMzUxNjE3LCAtMjAyMjM1MTYxNywgLTIwMjIzNTE3NDUsIC0yMDIyMzUxNjE3LCAtMjAyMjM1MTYxNywgMCwgMCwgNDAsIDY3MTA4ODY0LCAzMzE3NzYsIDgzODg2MDgwLCAwLCAwLCA1OSwgMTQwMjI0LCA1NTA1MDI0LCA1MjQyODgwLCAtMjA4MDM3NDc4NCwgLTIwODAzNzQ3ODQsIDI2ODI4OCwgMjksIDAsIDI4NDY3MiwgMCwgMCwgNjgxNTc0NDAsIDEzNzM2MzQ1NiwgMCwgNjYsIDY2LCAwLCA2MywgNjQsIDM1MTIzMiwgNjMsIDE5MiwgMzUxMjMyLCA3MzQwMDMyLCAtMjAzMDA0MzEzNiwgMCwgMCwgMCwgNDE5NDMwNCwgMSwgMTAyNCwgMzIsIDY0LCAyNTYsIDMyNzY4LCA2NTUzNiwgNTEyLCAxMzEwNzIsIDI2ODQzNTQ1NiwgMCwgMCwgMTM0MzQ4ODAwLCAxMzQzNDg4MDAsIDE2LCA0MDk2LCAyNjIxNDQsIDEwNDg1NzYsIDQxOTQzMDQsIDgzODg2MDgsIDE2Nzc3MjE2LCAzMzU1NDQzMiwgNTI0Mjg4MCwgMCwgNywgMCwgMCwgMTQyNjA2MzM2LCAwLCAtODcyNDE1MjMyLCAwLCAwLCAwLCAxMzEwNzIsIDAsIDAsIDAsIDk5OSwgMjU5MDcyLCA0MTk0MzA0LCAyNTE2NTgyNCwgMCwgMjA0ODAsIDAsIDAsIDY0LCAyNTYsIDE1MzYsIDgxOTIsIDE2Mzg0LCAwLCAxMiwgMzE0NTcyOCwgMCwgMCwgMCwgMzE0NTcyOCwgNjQsIDMwNzIsIDIwNDgwLCA2NTUzNiwgMjYyMTQ0LCAzMiwgMTkyLCAzMDcyLCAyMDQ4MCwgNCwgMTA0ODU3NiwgMCwgMCwgMTI4LCAxMzEwNzIsIDAsIDEzNDIxODc1MiwgMCwgMCwgMTI4LCAxMzQyMTc3MjgsIDUyNDI4ODAsIDAsIDYsIDAsIDAsIDE2Mzg0LCA2NTUzNiwgNzM0MDAzMiwgNTAzMzE2NDgsIDMyLCAxOTIsIDEwMjQsIDIwNDgsIDQwOTYsIDgxOTIsIDY1NTM2LCAzMjc2OCwgNjU1MzYsIDQxOTQzMDQsIDE2Nzc3MjE2LCAweDgwMDAwMDAwLCAwLCAwLCAxLCA0LCAwLCAwLCAyNTYsIDE1MzYsIDY1NTM2LCA2NTUzNiwgMjA5NzE1MiwgNDE5NDMwNCwgNTAzMzE2NDgsIDB4ODAwMDAwMDAsIDMyLCAxOTIsIDEwMjQsIDY1NTM2LCAyNjg0MzU0NTYsIDAsIDAsIDMyNzY4LCA0MTk0MzA0LCAxNjc3NzIxNiwgMCwgMCwgMTg0NTQ5Mzc2LCAwLCAwLCAyNDMyNjk2MzIsIDAsIDAsIDMyNzY4LCAxMzEwNzIsIDEzMTA3MiwgMCwgMzI3NjgsIDMyNzY4LCAxLCAyLCA0LCAyMDk3MTUyLCAxNjc3NzIxNiwgMTM0MjE3NzI4LCAyNjg0MzU0NTYsIDEwNzM3NDE4MjQsIDB4ODAwMDAwMDAsIDEyOCwgMjA5NzE1MiwgNDE5NDMwNCwgNTAzMzE2NDgsIDAsIDAsIDAsIDgzODg2MDgsIDAsIDAsIDAsIDc2OCwgMiwgNCwgNTAzMzE2NDgsIDAsIDAsIDUzNjg3MDkxMiwgOTIxNiwgMCwgMCwgMCwgNDkxNTIsIDIsIDQsIDEyOCwgNTAzMzE2NDgsIDAsIDAsIDQwOTYsIDQxOTQzMDQsIDI2ODQzNTQ1NiwgMCwgMCwgMTA3NTgzODk3NiwgMjA5NzE1MiwgMjA5NzE1MiwgMjY4NDM1NDU2LCA0MTk0NDMyLCAyNjg0MzU5NjgsIDI2ODQzNTk2OCwgMTA3Mzc0Mzg3MiwgMjY4NDM1OTY4LCAwLCAxMjgsIDYxNDQsIDAsIDIyOTM3NiwgMTI4LCAyNjg0MzU5NjgsIDI2ODQzNjAzMiwgMjU2LCAyNTYsIDUzNjg3MTE2OCwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTcsIDI1NiwgMzg0LCAtMTg3OTA0NjMzNiwgLTE4NzkwNDYzMzQsIDEwNzM3NDQyNTYsIC0xODc5MDQ2MzM0LCAtMTg3OTA0NjMyNiwgLTE4NzkwNDYzMzQsIC0xODc5MDQ2MzM0LCAtMTg3OTA0NjMyNiwgLTE4NzkwNDYzMjYsIC0xODQ1NDkxOTAyLCAtMTg3ODc4NDE4MiwgMjY4NDQ0NDgwLCAyNjg0NDQ0ODAsIDI2ODQzNjI4OCwgMjY4NDM2Mjg4LCAyNjg0MzYyODgsIDI2ODQzNjI4OCwgMjY4NDM2Mjg5LCAyNjg0NDQ0ODAsIDI2ODQ0NDQ4MCwgMjY4NDQ0NDgwLCAyNjg0NDQ0ODAsIDIxMDAzMTgxNDksIDIxMDAzMTgxNDksIDIxMDAzMTgxNDksIDIxMDAzMTgxNDksIDIxMDAzMjYzNDEsIDIxMDAzMjYzNDEsIDIxMDAzMTgxNDksIDIxMDAzMjYzNDEsIDIxMDAzMjYzNDEsIDAsIDAsIDI1NiwgMjA0OCwgMjA0OCwgMCwgMCwgMCwgNCwgOCwgMjYyMTQ0LCAxMzQyMTc3MjgsIDEsIDEwMjQsIDAsIDQwOTYsIDAsIDY0LCAxODU2LCAweDgwMDAwMDAwLCAwLCAwLCAyNTYsIDY1NTM2LCAyNDMyLCAwLCAxODY0LCAwLCAxLCAyLCAxNiwgMzIsIDY0LCAwLCAzMDE5ODk4ODgsIDAsIDI2MjE0NCwgMTMxMDcyLCAwLCAwLCA4MzIsIDgxOTIsIDAsIDEsIDIsIDU2LCA2NCwgODk2LCAwLCAxLCA0MDM2LCAxOTkzOTMyOCwgMjA4MDM3NDc4NCwgMjA4MDM3NDc4NCwgMCwgMCwgMCwgMTYyNTI5MjgsIDEsIDE2LCAzMiwgMTI4LCA1MTIsIDIzMDQsIDAsIDgsIDAsIDUxMiwgMzAxOTg5ODg4LCAwLCAwLCAyNjIxNDQsIDUyNDI4OCwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDAsIDI0NTc2LCAwLCAwLCAwLCAzMzU1NDQzMiwgMCwgMCwgMCwgMzI3NjgsIDAsIDAsIDIwOTcxNTIsIDEzNDIxNzcyOCwgMCwgMzI3NjgsIDE5NjYwOCwgMCwgMCwgMCwgMSwgMTI4LCA1MTIsIDIwNDgsIDUyNDI4OCwgMjY4NDM1NDU2LCA1MzY4NzA5MTIsIDAsIDMzNTU0NDMyLCAyNjIxNDQsIDgxOTIsIDAsIDAsIDI1NiwgODM4ODYwOCwgMCwgMCwgMSwgNCwgMTI4LCAzNTg0LCAxNjM4NCwgMzE0NTcyOCwgMTY3NzcyMTYsIDY3MTA4ODY0LCAxMzQyMTc3MjgsIDgwNTMwNjM2OCwgMTA3Mzc0MTgyNCwgMCwgMCwgMTAyNCwgMjA0OCwgMTYzODQsIDMxNDU3MjgsIDAsIDgxOTIsIDAsIDgxOTIsIDAsIDUzNjg3MDkxMiwgNTI0Mjg4LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDAsIDEsIDIsIDExMiwgMTI4LCAzMDcyLCAyMDQ4LCAzMTQ1NzI4LCAxNjc3NzIxNiwgNTM2ODcwOTEyLCAxMDczNzQxODI0LCAwLCAwLCAyMDk3MTUyLCAxNjc3NzIxNiwgMTA3Mzc0MTgyNCwgMCwgMCwgMCwgODE5MiwgODE5MiwgODE5MiwgOTIxNiwgMzM1NTQ0MzIsIDMyNzY4LCAzMzU1NDQzMiwgMCwgMCwgMjYyMTQ0LCAwLCAxNjc3NzIxNiwgMCwgMTY3NzcyMTYsIDE2Nzc3MjE2LCAxNjc3NzIxNiwgMTY3NzcyMTYsIDAsIDAsIDIwOTcxNTIsIDE2Nzc3MjE2LCAwLCAwLCAxNjc3NzIxNiwgMjY4NTAwOTkyLCA0MjQzNDU2LCAwLCAwLCA1MTIsIDY1NTM2LCAwLCA0MDk2LCA0MDk2LCAwLCA0MDk2LCA0MDk2LCA0MDk2LCA0MDk2LCAwLCAwLCAwLCAzMiwgMCwgMCwgMCwgNDEsIDAsIDQyNDM0NTYsIDQwOTYsIDEyMjg5LCAxMDczNzU0MTEzLCAxMjI4OSwgMTIyODksIDExMjQwNzM0NzIsIDEyMjg5LCAxMjI4OSwgMTA5ODkyMDE5MywgMTA5ODkyMDE5MywgMTEyNDA3MzQ4OCwgMTEyNDA3MzQ3MiwgMTEyNDA3MzQ3MiwgMTI1ODI5MjIyNCwgMTEyNDA3MzQ3MiwgMTEyNDA3MzQ3NCwgMTEyNDA3MzQ3MiwgMTEyNDA3MzQ3MiwgMTEyNDA3MzQ3MiwgMTEyNDA3MzQ3MiwgMTEyNDA3MzQ3MiwgMTM5MjU3NDQ2NCwgMTEyNDA3MzQ3MiwgMTIyODksIDExMjQwODU3NjEsIDExMjQwODU3NjEsIDExMjQwODU3NjEsIDExMjQwODU3NjEsIDExMzI0NzQ2MjUsIDEwOTg5MjAyMDksIDExMzI0NzQ2MjUsIDExMzI0NzQ2MjUsIDEwOTg5MjAyMDksIDExMzI0NzQ2MjUsIDExMzI0NzQ2MjUsIDExMzI0NzQ2MjUsIDExMzI0NzQ2MjUsIDE0MDA5NzU2MTcsIDExMjQwODU3NzcsIDExMjQwODU3NjEsIDExMjQwODU3NjEsIDEyNTgzMDQ1MTMsIDIxMzIzNjAyNTUsIDIxMzIzNjAyNTUsIDIxMzI2MjIzOTksIDIxMzIzNjAyNTUsIDIxMzI2MjIzOTksIDIxMzI2MjIzOTksIDIxNDA3NDkxMTksIDIxNDEwMTEyNjMsIDIxMzI2MjIzOTksIDIxMzI2MjIzOTksIDIxMzI2MjIzOTksIDIxMzI2MjIzOTksIDIxMzIzNjAyNTUsIDIxNDEwMTEyNjMsIDIxNDEwMTEyNjMsIDAsIDAsIDUxMiwgMTMxMDcyLCAwLCAxMjgsIDEzMTA3MiwgMTAyNCwgMTM0MjE3NzI4LCAwLCAwLCAwLCA1MDMzMTY0OCwgMTA3Mzc0MTgyNCwgMCwgMSwgNCwgNjQsIDEyOCwgMzU4NCwgMzE4NzY3MTA0LCAwLCAwLCAwLCAyNjg0MzU0NTYsIDAsIDEyMjg5LCAwLCAwLCAwLCAxNTkzODM1NTIsIDI1MTY1ODI0LCAwLCAwLCAwLCA1MzY4NzA5MTIsIDAsIDAsIDAsIDI0NTc2LCA1ODcyMDI1NiwgMCwgMCwgMTIzMDUsIDEzMzEzLCAwLCAwLCAwLCAxMDczNzQxODI0LCAwLCAwLCAwLCAxMjU2MSwgMCwgNzgwODEsIDMyNzE1NTcxMiwgMCwgMCwgMCwgMTI3NTA2ODQxNiwgMCwgNjA1MjQ3LCAxMDU4MDEzMTg0LCAxMDczNzQxODI0LCAxMDczNzQxODI0LCA4Mzg4NjA4LCAwLCAwLCA1MDM2MTYsIDc4NjQzMjAsIDg2NzM5MSwgMTA1ODAxMzE4NCwgMTA3Mzc0MTgyNCwgMCwgMSwgNiwgOTYsIDM4NCwgNTEyLCAxMDI0LCA0MDk2LCA4MTkyLCAxNjM4NCwgMjI5Mzc2LCAyNTE2NTgyNCwgMzM1NTQ0MzIsIDI2ODQzNTQ1NiwgNTM2ODcwOTEyLCAwLCA4Njc2NDcsIDEwNjY0MDE3OTIsIDAsIDAsIDAsIDUxMiwgMTA0ODU3NiwgMCwgMCwgOSwgODM4ODYwOCwgMTIyODgsIDAsIDAsIDAsIDUxMiwgMjc2MDcwNCwgNzc4MjQsIDAsIDAsIDAsIDEwMjQsIDIwNDgsIDMxNDU3MjgsIDIwNDgsIDc3ODI0LCA1MjQyODgsIDEwNDg1NzYsIDAsIDAsIDAsIDUxMiwgMCwgMTA0ODU3NiwgMCwgMSwgMzAsIDMyLCAxMDI0LCAyMDQ4LCAxMDI0LCAyMDQ4LCAzMzk5NjgsIDUyNDI4OCwgMTA0ODU3NiwgMTY3NzcyMTYsIDEwMDY2MzI5NiwgMTM0MjE3NzI4LCA4MDUzMDYzNjgsIDEwNzM3NDE4MjQsIDEwMjQsIDIwNDgsIDEyMjg4LCA2NTUzNiwgMCwgNjU1MzYsIDAsIDAsIDE5OTQ3NTIwLCAwLCAwLCAwLCAxNjc3NzIxNiwgMCwgMCwgMCwgNSwgMTAyNCwgMjA0OCwgMTIyODgsIDMyNzY4MCwgNTI0Mjg4LCAzMzU1NDQzMiwgMTM0MjE3NzI4LCA1MzY4NzA5MTIsIDEwNzM3NDE4MjQsIDE0LCAxNiwgMTAyNCwgNDA5NiwgODE5MiwgMjI5Mzc2LCAwLCAyLCAxNjM4NCwgNDE5NDMwNCwgMHg4MDAwMDAwMCwgMCwgMCwgMCwgOCwgMCwgNjU1MzYsIDI2MjE0NCwgNzM0MDAzMiwgNTAzMzE2NDgsIDY3MTA4ODY0LCAweDgwMDAwMDAwLCA0MDk2LCA2NTUzNiwgMjYyMTQ0LCA1MjQyODgsIDEwNDg1NzYsIDMzNTU0NDMyLCAyNTYsIDAsIDI1NiwgMCwgMjU2LCAxLCAxMiwgMTAyNCwgMTM0MjE3NzI4LCAyNjIxNDQsIDEzNDIxNzcyOCwgNTM2ODcwOTEyLCAwLCAwLCAyNjg0MzU0NTYsIDEsIDQsIDgsIDEzNDIxNzcyOCwgNCwgOCwgNTM2ODcwOTEyLCAwLCAyLCAxNiwgNjQsIDEyOCwgMCwgMCwgMjYyMTQ0LCA1MzY4NzA5MTIsIDAsIDAsIDEwNzM3NDE4MjQsIDMyNzY4LCAwLCA4LCAzMiwgNTEyLCA0MDk2LCA5NDM3MTg0LCAwLCAwLCAxMDQ4NTc2LCAyMDk3MTUyLCA0MTk0MzA0LCA2NzEwODg2NCwgMTM0MjE3NzI4LCAwLCAxMDI0LCAxMzczNjM0NTYsIDY2LCAyNTE2NTgyNCwgMjYyMTQ0MDAsIDkyMjc0Njg4LCA5MjI3NDY4OCwgMjUxNjU5NTIsIDkyMjc0Njg4LCAyNTE2NTgyNCwgMjUxNjU4MjQsIDkyMjc0Njg4LCAyNTE2NTgyNCwgMjUxNjU4MjQsIDkyMjc0Njg4LCA5MjI3NDY4OCwgOTIyNzQ3MjAsIDkyMjc0Njg4LCAyNTE2NTgyNCwgOTIyNzQ2ODgsIDkzMzIzMjY0LCAyNTE2NTg5MCwgMTAwNzIxNjY0LCAxMDA3MjE2NjQsIDI1MTY1ODkwLCAxMDA3MjE5MjgsIDEwMDcyMTkyOCwgMTAwNzg3NDY0LCAxMDA4NTMwMDAsIDEwMDcyMTkyOCwgMTAwNzIxOTI4LCAxMjU5Nzc2MDAsIDEyNTk3NzYwMCwgMTI1OTc3NjAwLCAxMjU5Nzc2MDAsIDEyNzAyNjE3NiwgMTI1OTc3NjAwLCAxMjU4NDY1MjgsIDEyNTg0NjUyOCwgMTI1ODQ2NTYwLCAxMjU4NDY1MjgsIDEyNTg0NjUyOCwgMTI1ODQ2NTI4LCAxMjY4OTUxMDQsIDEyNTg0NjUyOCwgMTI1OTc3NjAwLCAxMjcwMjYxNzYsIDEyNTk3NzYwMCwgMTI1OTc3NjAwLCAxMjcwMjYxNzYsIDEyNzAyNjE3NiwgMjgxODQzLCAyODE4NDMsIDEzMzA0MTksIDI4MTg0MywgMTMzMDQxOSwgMjgxODQzLCAxMzMwNDE5LCAxMzMwNDE5LCAyODE4NDMsIDI4MTg0MywgMjgxODQzLCA1NTI0NzIzLCAzOTA3OTE1NSwgNzI2MzM1ODcsIDU1MjQ3MjMsIDU1MjQ3MjMsIDU1MjQ3MjMsIDU1MjQ3MjMsIDkzNjA1MTA3LCA3MjYzMzU4NywgNzI2MzM1ODcsIDkyNTU2NTMxLCA5MzYwNTEwNywgMTI3MjkwNjExLCAxMjcyOTA2MTEsIDk3Nzk5NDExLCAxMjcyOTA2MTEsIDEzMTQ4NDkxNSwgMCwgMCwgMTUzNiwgMHg4MDAwMDAwMCwgMCwgMCwgMTc0MDgsIDMzNTU0NDMyLCAwLCAxLCAxMiwgMTAyNCwgMjYyMTQ0LCAwLCA1ODYyNCwgMCwgMCwgMTUzNiwgMCwgMTg5Njk2LCAwLCAwLCAwLCAxNzkyLCAweDgwMDAwMDAwLCAwLCAxNDg0ODAsIDUwMzMxNjQ4LCAwLCAxLCAxNCwgMTAyNCwgNDA5NiwgNjU1MzYsIDUyNDI4OCwgMjQwLCAxOTQ1NiwgMjYyMTQ0LCAwLCAwLCAxOTQ1NiwgMjYyMTQ0LCAwLCA0MTk0MzA0LCAwLCAwLCAxMDI0LCAyMDk3MTUyLCAwLCAwLCAwLCAxNTA1MjgsIDAsIDAsIDAsIDUxMiwgNDA5NiwgODE5MiwgMTMxMDcyLCAwLCA1NzM0NCwgMCwgMCwgMCwgMjA0OCwgMTAwNjYzMjk2LCAwLCAwLCAyNTYsIDAsIDY1NTM2LCA1MjQyODgsIDEwNDg1NzYsIDMzNTU0NDMyLCA2NzEwODg2NCwgMiwgNDgsIDY0LCAxMjgsIDMwNzIsIDE2Mzg0LCAyNjIxNDQsIDAsIDAsIDMyLCA0MDk2LCA4MTkyLCAxMzEwNzIsIDEwNDg1NzYsIDgzODg2MDgsIDMzNTU0NDMyLCAxMzQyMTc3MjgsIDIwNDgsIDI2MjE0NCwgMCwgMCwgMjA0OCwgMjY4NDM1NDU2LCAxNiwgNjQsIDEyOCwgMjYyMTQ0LCAwLCAwLCAzMjc2OCwgNjU1MzYsIDEzMTA3MiwgMCwgMSwgMiwgMTYsIDY0LCAwCl07CgpYUXVlcnlQYXJzZXIuVE9LRU4gPQpbCiAgIigwKSIsCiAgIlByYWdtYUNvbnRlbnRzIiwKICAiRGlyQ29tbWVudENvbnRlbnRzIiwKICAiRGlyUElDb250ZW50cyIsCiAgIkNEYXRhU2VjdGlvbiIsCiAgIldpbGRjYXJkIiwKICAiRVFOYW1lIiwKICAiVVJJTGl0ZXJhbCIsCiAgIkludGVnZXJMaXRlcmFsIiwKICAiRGVjaW1hbExpdGVyYWwiLAogICJEb3VibGVMaXRlcmFsIiwKICAiU3RyaW5nTGl0ZXJhbCIsCiAgIlByZWRlZmluZWRFbnRpdHlSZWYiLAogICInXCJcIiciLAogICJFc2NhcGVBcG9zIiwKICAiRWxlbWVudENvbnRlbnRDaGFyIiwKICAiUXVvdEF0dHJDb250ZW50Q2hhciIsCiAgIkFwb3NBdHRyQ29udGVudENoYXIiLAogICJQSVRhcmdldCIsCiAgIk5DTmFtZSIsCiAgIlFOYW1lIiwKICAiUyIsCiAgIlMiLAogICJDaGFyUmVmIiwKICAiQ29tbWVudENvbnRlbnRzIiwKICAiRU9GIiwKICAiJyEnIiwKICAiJyE9JyIsCiAgIidcIiciLAogICInIyciLAogICInIyknIiwKICAiJyQnIiwKICAiJyUnIiwKICAiJycnJyIsCiAgIicoJyIsCiAgIicoIyciLAogICInKDonIiwKICAiJyknIiwKICAiJyonIiwKICAiJyonIiwKICAiJysnIiwKICAiJywnIiwKICAiJy0nIiwKICAiJy0tPiciLAogICInLiciLAogICInLi4nIiwKICAiJy8nIiwKICAiJy8vJyIsCiAgIicvPiciLAogICInOiciLAogICInOiknIiwKICAiJzo6JyIsCiAgIic6PSciLAogICInOyciLAogICInPCciLAogICInPCEtLSciLAogICInPC8nIiwKICAiJzw8JyIsCiAgIic8PSciLAogICInPD8nIiwKICAiJz0nIiwKICAiJz4nIiwKICAiJz49JyIsCiAgIic+PiciLAogICInPyciLAogICInPz4nIiwKICAiJ0AnIiwKICAiJ05hTiciLAogICInWyciLAogICInXSciLAogICInYWZ0ZXInIiwKICAiJ2FsbCciLAogICInYWxsb3dpbmcnIiwKICAiJ2FuY2VzdG9yJyIsCiAgIidhbmNlc3Rvci1vci1zZWxmJyIsCiAgIidhbmQnIiwKICAiJ2FueSciLAogICInYXBwZW5kJyIsCiAgIidhcnJheSciLAogICInYXMnIiwKICAiJ2FzY2VuZGluZyciLAogICInYXQnIiwKICAiJ2F0dHJpYnV0ZSciLAogICInYmFzZS11cmknIiwKICAiJ2JlZm9yZSciLAogICInYm91bmRhcnktc3BhY2UnIiwKICAiJ2JyZWFrJyIsCiAgIidieSciLAogICInY2FzZSciLAogICInY2FzdCciLAogICInY2FzdGFibGUnIiwKICAiJ2NhdGNoJyIsCiAgIidjaGVjayciLAogICInY2hpbGQnIiwKICAiJ2NvbGxhdGlvbiciLAogICInY29sbGVjdGlvbiciLAogICInY29tbWVudCciLAogICInY29uc3RyYWludCciLAogICInY29uc3RydWN0aW9uJyIsCiAgIidjb250YWlucyciLAogICInY29udGVudCciLAogICInY29udGV4dCciLAogICInY29udGludWUnIiwKICAiJ2NvcHknIiwKICAiJ2NvcHktbmFtZXNwYWNlcyciLAogICInY291bnQnIiwKICAiJ2RlY2ltYWwtZm9ybWF0JyIsCiAgIidkZWNpbWFsLXNlcGFyYXRvciciLAogICInZGVjbGFyZSciLAogICInZGVmYXVsdCciLAogICInZGVsZXRlJyIsCiAgIidkZXNjZW5kYW50JyIsCiAgIidkZXNjZW5kYW50LW9yLXNlbGYnIiwKICAiJ2Rlc2NlbmRpbmcnIiwKICAiJ2RpYWNyaXRpY3MnIiwKICAiJ2RpZmZlcmVudCciLAogICInZGlnaXQnIiwKICAiJ2Rpc3RhbmNlJyIsCiAgIidkaXYnIiwKICAiJ2RvY3VtZW50JyIsCiAgIidkb2N1bWVudC1ub2RlJyIsCiAgIidlbGVtZW50JyIsCiAgIidlbHNlJyIsCiAgIidlbXB0eSciLAogICInZW1wdHktc2VxdWVuY2UnIiwKICAiJ2VuY29kaW5nJyIsCiAgIidlbmQnIiwKICAiJ2VudGlyZSciLAogICInZXEnIiwKICAiJ2V2ZXJ5JyIsCiAgIidleGFjdGx5JyIsCiAgIidleGNlcHQnIiwKICAiJ2V4aXQnIiwKICAiJ2V4dGVybmFsJyIsCiAgIidmaXJzdCciLAogICInZm9sbG93aW5nJyIsCiAgIidmb2xsb3dpbmctc2libGluZyciLAogICInZm9yJyIsCiAgIidmb3JlYWNoJyIsCiAgIidmb3JlaWduJyIsCiAgIidmcm9tJyIsCiAgIidmdC1vcHRpb24nIiwKICAiJ2Z0YW5kJyIsCiAgIidmdG5vdCciLAogICInZnRvciciLAogICInZnVuY3Rpb24nIiwKICAiJ2dlJyIsCiAgIidncmVhdGVzdCciLAogICInZ3JvdXAnIiwKICAiJ2dyb3VwaW5nLXNlcGFyYXRvciciLAogICInZ3QnIiwKICAiJ2lkaXYnIiwKICAiJ2lmJyIsCiAgIidpbXBvcnQnIiwKICAiJ2luJyIsCiAgIidpbmRleCciLAogICInaW5maW5pdHknIiwKICAiJ2luaGVyaXQnIiwKICAiJ2luc2Vuc2l0aXZlJyIsCiAgIidpbnNlcnQnIiwKICAiJ2luc3RhbmNlJyIsCiAgIidpbnRlZ3JpdHknIiwKICAiJ2ludGVyc2VjdCciLAogICInaW50byciLAogICInaXMnIiwKICAiJ2l0ZW0nIiwKICAiJ2pzb24nIiwKICAiJ2pzb24taXRlbSciLAogICIna2V5JyIsCiAgIidsYW5ndWFnZSciLAogICInbGFzdCciLAogICInbGF4JyIsCiAgIidsZSciLAogICInbGVhc3QnIiwKICAiJ2xldCciLAogICInbGV2ZWxzJyIsCiAgIidsb29wJyIsCiAgIidsb3dlcmNhc2UnIiwKICAiJ2x0JyIsCiAgIidtaW51cy1zaWduJyIsCiAgIidtb2QnIiwKICAiJ21vZGlmeSciLAogICInbW9kdWxlJyIsCiAgIidtb3N0JyIsCiAgIiduYW1lc3BhY2UnIiwKICAiJ25hbWVzcGFjZS1ub2RlJyIsCiAgIiduZSciLAogICInbmV4dCciLAogICInbm8nIiwKICAiJ25vLWluaGVyaXQnIiwKICAiJ25vLXByZXNlcnZlJyIsCiAgIidub2RlJyIsCiAgIidub2RlcyciLAogICInbm90JyIsCiAgIidvYmplY3QnIiwKICAiJ29jY3VycyciLAogICInb2YnIiwKICAiJ29uJyIsCiAgIidvbmx5JyIsCiAgIidvcHRpb24nIiwKICAiJ29yJyIsCiAgIidvcmRlciciLAogICInb3JkZXJlZCciLAogICInb3JkZXJpbmcnIiwKICAiJ3BhcmFncmFwaCciLAogICIncGFyYWdyYXBocyciLAogICIncGFyZW50JyIsCiAgIidwYXR0ZXJuLXNlcGFyYXRvciciLAogICIncGVyLW1pbGxlJyIsCiAgIidwZXJjZW50JyIsCiAgIidwaHJhc2UnIiwKICAiJ3Bvc2l0aW9uJyIsCiAgIidwcmVjZWRpbmcnIiwKICAiJ3ByZWNlZGluZy1zaWJsaW5nJyIsCiAgIidwcmVzZXJ2ZSciLAogICIncHJldmlvdXMnIiwKICAiJ3Byb2Nlc3NpbmctaW5zdHJ1Y3Rpb24nIiwKICAiJ3JlbGF0aW9uc2hpcCciLAogICIncmVuYW1lJyIsCiAgIidyZXBsYWNlJyIsCiAgIidyZXR1cm4nIiwKICAiJ3JldHVybmluZyciLAogICIncmV2YWxpZGF0aW9uJyIsCiAgIidzYW1lJyIsCiAgIidzYXRpc2ZpZXMnIiwKICAiJ3NjaGVtYSciLAogICInc2NoZW1hLWF0dHJpYnV0ZSciLAogICInc2NoZW1hLWVsZW1lbnQnIiwKICAiJ3Njb3JlJyIsCiAgIidzZWxmJyIsCiAgIidzZW5zaXRpdmUnIiwKICAiJ3NlbnRlbmNlJyIsCiAgIidzZW50ZW5jZXMnIiwKICAiJ3NraXAnIiwKICAiJ3NsaWRpbmcnIiwKICAiJ3NvbWUnIiwKICAiJ3N0YWJsZSciLAogICInc3RhcnQnIiwKICAiJ3N0ZW1taW5nJyIsCiAgIidzdG9wJyIsCiAgIidzdHJpY3QnIiwKICAiJ3N0cmlwJyIsCiAgIidzdHJ1Y3R1cmVkLWl0ZW0nIiwKICAiJ3N3aXRjaCciLAogICIndGV4dCciLAogICIndGhlbiciLAogICIndGhlc2F1cnVzJyIsCiAgIid0aW1lcyciLAogICIndG8nIiwKICAiJ3RyZWF0JyIsCiAgIid0cnknIiwKICAiJ3R1bWJsaW5nJyIsCiAgIid0eXBlJyIsCiAgIid0eXBlc3dpdGNoJyIsCiAgIid1bmlvbiciLAogICIndW5pcXVlJyIsCiAgIid1bm9yZGVyZWQnIiwKICAiJ3VwZGF0aW5nJyIsCiAgIid1cHBlcmNhc2UnIiwKICAiJ3VzaW5nJyIsCiAgIid2YWxpZGF0ZSciLAogICIndmFsdWUnIiwKICAiJ3ZhcmlhYmxlJyIsCiAgIid2ZXJzaW9uJyIsCiAgIid3ZWlnaHQnIiwKICAiJ3doZW4nIiwKICAiJ3doZXJlJyIsCiAgIid3aGlsZSciLAogICInd2lsZGNhcmRzJyIsCiAgIid3aW5kb3cnIiwKICAiJ3dpdGgnIiwKICAiJ3dpdGhvdXQnIiwKICAiJ3dvcmQnIiwKICAiJ3dvcmRzJyIsCiAgIid4cXVlcnknIiwKICAiJ3plcm8tZGlnaXQnIiwKICAiJ3snIiwKICAiJ3t7JyIsCiAgIid7fCciLAogICInfCciLAogICInfHwnIiwKICAiJ3x9JyIsCiAgIid9JyIsCiAgIid9fSciCl07Cgp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3RyZWVfb3BzLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7Cid1c2Ugc3RyaWN0JzsKCmV4cG9ydHMuVHJlZU9wcyA9IHsKICAgIGZsYXR0ZW46IGZ1bmN0aW9uKG5vZGUpewogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICB2YXIgdmFsdWUgPSAnJzsKICAgICAgICBpZighbm9kZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbm9kZSBmb3VuZCcpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCl7CiAgICAgICAgICAgICAgICB2YWx1ZSArPSB0aGF0LmZsYXR0ZW4oY2hpbGQpOwogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSArPSBub2RlLnZhbHVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWU7CiAgICB9LAogICAgCiAgICBjb25jYXQ6IGZ1bmN0aW9uKG9iajEsIG9iajIsIGNvcHkpewogICAgICAgIHZhciByZXN1bHQgPSBjb3B5ID8ge30gOiBvYmoxOwogICAgICAgIGlmKGNvcHkpewogICAgICAgICAgICBPYmplY3Qua2V5cyhvYmoxKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7CiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IG9iajFba2V5XTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqMik7CiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7CiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2JqMltrZXldOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9LAogICAgCiAgICByZW1vdmVQYXJlbnRQdHI6IGZ1bmN0aW9uKGFzdCl7CiAgICAgICAgaWYoYXN0LmdldFBhcmVudCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGRlbGV0ZSBhc3QuZ2V0UGFyZW50OwogICAgICAgIH0KICAgICAgICBmb3IodmFyIGkgaW4gYXN0LmNoaWxkcmVuKSB7CiAgICAgICAgICAgIHZhciBjaGlsZCA9IGFzdC5jaGlsZHJlbltpXTsKICAgICAgICAgICAgdGhpcy5yZW1vdmVQYXJlbnRQdHIoY2hpbGQpOwogICAgICAgIH0KICAgIH0sCiAgICAKICAgIGluUmFuZ2U6IGZ1bmN0aW9uKHAsIHBvcywgZXhjbHVzaXZlKXsKICAgICAgICBpZihwICYmIHAuc2wgPD0gcG9zLmxpbmUgJiYgcG9zLmxpbmUgPD0gcC5lbCkgewogICAgICAgICAgICBpZihwLnNsIDwgcG9zLmxpbmUgJiYgcG9zLmxpbmUgPCBwLmVsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIGlmKHAuc2wgPT09IHBvcy5saW5lICYmIHBvcy5saW5lIDwgcC5lbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHAuc2MgPD0gcG9zLmNvbDsKICAgICAgICAgICAgfSBlbHNlIGlmKHAuc2wgPT09IHBvcy5saW5lICYmIHAuZWwgPT09IHBvcy5saW5lKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcC5zYyA8PSBwb3MuY29sICYmIHBvcy5jb2wgPD0gcC5lYyArIChleGNsdXNpdmUgPyAxIDogMCk7CiAgICAgICAgICAgIH0gZWxzZSBpZihwLnNsIDwgcG9zLmxpbmUgJiYgcC5lbCA9PT0gcG9zLmxpbmUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwb3MuY29sIDw9IHAuZWMgKyAoZXhjbHVzaXZlID8gMSA6IDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIAogICAgZmluZE5vZGU6IGZ1bmN0aW9uKGFzdCwgcG9zKSB7CiAgICAgICAgaWYoIWFzdCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBwID0gYXN0LnBvczsKICAgICAgICBpZih0aGlzLmluUmFuZ2UocCwgcG9zKSA9PT0gdHJ1ZSkgewogICAgICAgICAgICBmb3IodmFyIGkgaW4gYXN0LmNoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBhc3QuY2hpbGRyZW5baV07CiAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXMuZmluZE5vZGUoY2hpbGQsIHBvcyk7CiAgICAgICAgICAgICAgICBpZihuICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXN0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9LAogICAgCiAgICBhc3RBc1hNTDogZnVuY3Rpb24obm9kZSwgaW5kZW50KXsKICAgICAgICB2YXIgcmVzdWx0ID0gICcnOwogICAgICAgIGluZGVudCA9IGluZGVudCA/IGluZGVudCA6ICcnOwogICAgICAgIGlmKG5vZGUudmFsdWUpIHsKICAgICAgICAgICAgcmVzdWx0ICs9IChpbmRlbnQgKyAnPCcgKyBub2RlLm5hbWUgKyAnPicgKyBub2RlLnZhbHVlICsgJzwvJyArIG5vZGUubmFtZSArICc+XG4nKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ICs9IGluZGVudCArICc8JyArIG5vZGUubmFtZSArICc+XG4nOwogICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpewogICAgICAgICAgICByZXN1bHQgKz0gdGhhdC5hc3RBc1hNTChjaGlsZCwgaW5kZW50ICsgJyAgJyk7CiAgICAgICAgfSk7CiAgICAgICAgcmVzdWx0ICs9IGluZGVudCArICc8LycgKyBub2RlLm5hbWUgKyAnPlxuJzsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfQp9Owp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3hxZG9jL3BhcnNlX2NvbW1lbnQuanMiOltmdW5jdGlvbihfZGVyZXFfLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnOwoKZXhwb3J0cy5wYXJzZUNvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KXsKICAgIGNvbW1lbnQgPSBjb21tZW50LnRyaW0oKTsKICAgIHZhciBpc1hRRG9jID0gY29tbWVudC5zdWJzdHJpbmcoMCwgMykgPT09ICcoOn4nOwogICAgaWYoaXNYUURvYyl7CiAgICAgICAgdmFyIGxpbmVzID0gY29tbWVudC5zcGxpdCgnXG4nKTsKICAgICAgICB2YXIgYW5uID0gewogICAgICAgICAgICBkZXNjcmlwdGlvbjogJycKICAgICAgICB9OwogICAgICAgIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSwgaW5kZXgpewogICAgICAgICAgICBpZihpbmRleCA9PT0gMCkgewogICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3Vic3RyaW5nKDMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpbmUgPSBsaW5lLnRyaW0oKTsKICAgICAgICAgICAgaWYobGluZVswXSA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdWJzdHJpbmcoMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpOwogICAgICAgICAgICBhbm4uZGVzY3JpcHRpb24gKz0gJyAnICsgbGluZTsKICAgICAgICB9KTsKICAgICAgICBhbm4uZGVzY3JpcHRpb24gPSBhbm4uZGVzY3JpcHRpb24udHJpbSgpOwogICAgICAgIGFubi5kZXNjcmlwdGlvbiA9IGFubi5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgYW5uLmRlc2NyaXB0aW9uLmxlbmd0aCAtIDIpLnRyaW0oKTsKICAgICAgICByZXR1cm4gYW5uOwogICAgfQp9Owp9LHt9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3hxZG9jL3hxZG9jLmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CnZhciBfID0gX2RlcmVxXygnbG9kYXNoJyk7CnZhciBwYXJzZUNvbW1lbnQgPSBfZGVyZXFfKCcuL3BhcnNlX2NvbW1lbnQnKS5wYXJzZUNvbW1lbnQ7CgpleHBvcnRzLlhRRG9jID0gZnVuY3Rpb24oYXN0KXsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgZG9jID0ge307CgogICAgdGhpcy5nZXREb2MgPSBmdW5jdGlvbigpewogICAgICAgIHJldHVybiBkb2M7CiAgICB9OwoKICAgIHRoaXMuV1MgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICBpZihub2RlLnZhbHVlLnRyaW0oKS5zdWJzdHJpbmcoMCwgMykgPT09ICcoOn4nKSB7CiAgICAgICAgICAgIG5vZGUuZ2V0UGFyZW50LmNvbW1lbnQgPSBwYXJzZUNvbW1lbnQobm9kZS52YWx1ZSk7CiAgICAgICAgfQogICAgfTsKCiAgICB0aGlzLkFubm90YXRlZERlY2wgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICAgICAgbm9kZS5jb21tZW50ID0gbm9kZS5nZXRQYXJlbnQuY29tbWVudDsKICAgICAgICBub2RlLmdldFBhcmVudC5jb21tZW50ID0gdW5kZWZpbmVkOwogICAgfTsKICAgIAogICAgdGhpcy5YUXVlcnkgPSBmdW5jdGlvbihub2RlKXsKICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgICB9OwoKICAgIHRoaXMuZ2V0WFFEb2MgPSBmdW5jdGlvbihzY3R4KXsKICAgICAgICB2YXIgZG9jID0gewogICAgICAgICAgICBtb2R1bGVOYW1lc3BhY2U6IHNjdHgubW9kdWxlTmFtZXNwYWNlLAogICAgICAgICAgICBkZXNjcmlwdGlvbjogc2N0eC5kZXNjcmlwdGlvbiwKICAgICAgICAgICAgdmFyaWFibGVzOiBbXSwKICAgICAgICAgICAgZnVuY3Rpb25zOiBbXQogICAgICAgIH07CgogICAgICAgIF8uZm9yRWFjaChzY3R4LnZhcmlhYmxlcywgZnVuY3Rpb24odmFyaWFibGUpewogICAgICAgICAgICB2YXIgdmFyRGVjbCA9IF8uY2xvbmVEZWVwKHZhcmlhYmxlLnFuYW1lKTsKICAgICAgICAgICAgdmFyRGVjbC5hbm5vdGF0aW9ucyA9IHZhcmlhYmxlLmFubm90YXRpb25zOwogICAgICAgICAgICB2YXJEZWNsLmRlc2NyaXB0aW9uID0gdmFyaWFibGUuZGVzY3JpcHRpb247CiAgICAgICAgICAgIHZhckRlY2wudHlwZSA9IHZhcmlhYmxlLnR5cGU7CiAgICAgICAgICAgIHZhckRlY2wub2NjdXJyZW5jZSA9IHZhcmlhYmxlLm9jY3VycmVuY2U7CiAgICAgICAgICAgIGRvYy52YXJpYWJsZXMucHVzaCh2YXJEZWNsKTsKICAgICAgICB9KTsKCiAgICAgICAgXy5mb3JFYWNoKHNjdHguZnVuY3Rpb25zLCBmdW5jdGlvbihmbiwga2V5KXsKICAgICAgICAgICAgaWYoa2V5LnN1YnN0cmluZygwLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjJy5sZW5ndGgpID09PSAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjJykgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgdG9rZW5zID0ga2V5LnNwbGl0KCcjJyk7CiAgICAgICAgICAgIGRvYy5mdW5jdGlvbnMucHVzaCh7CiAgICAgICAgICAgICAgICBuYW1lOiB0b2tlbnNbMF0sCiAgICAgICAgICAgICAgICB1cmk6IHRva2Vuc1sxXSwKICAgICAgICAgICAgICAgIHBhcmFtczogZm4ucGFyYW1zCiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZG9jOwogICAgfTsKCiAgICB0aGlzLnZpc2l0ID0gZnVuY3Rpb24gKG5vZGUpIHsKICAgICAgICB2YXIgbmFtZSA9IG5vZGUubmFtZTsKICAgICAgICB2YXIgc2tpcCA9IGZhbHNlOwoKICAgICAgICBpZiAodHlwZW9mIHRoaXNbbmFtZV0gPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgc2tpcCA9IHRoaXNbbmFtZV0obm9kZSkgPT09IHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXNraXApIHsKICAgICAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKG5vZGUpOwogICAgICAgIH0KICAgIH07CgogICAgdGhpcy52aXNpdENoaWxkcmVuID0gZnVuY3Rpb24gKG5vZGUsIGhhbmRsZXIpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTsKICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaGFuZGxlcltjaGlsZC5uYW1lXSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICAgICAgaGFuZGxlcltjaGlsZC5uYW1lXShjaGlsZCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0KGNoaWxkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgdGhpcy52aXNpdChhc3QpOwp9OwoKfSx7Ii4vcGFyc2VfY29tbWVudCI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi94cWRvYy9wYXJzZV9jb21tZW50LmpzIiwibG9kYXNoIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbm9kZV9tb2R1bGVzL2xvZGFzaC9pbmRleC5qcyJ9XSwiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3hxbGludC5qcyI6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpewondXNlIHN0cmljdCc7Cgp2YXIgXyA9IF9kZXJlcV8oJ2xvZGFzaCcpOwoKdmFyIEpTT05pcVBhcnNlciA9IF9kZXJlcV8oJy4vcGFyc2Vycy9KU09OaXFQYXJzZXInKS5KU09OaXFQYXJzZXI7CnZhciBYUXVlcnlQYXJzZXIgPSBfZGVyZXFfKCcuL3BhcnNlcnMvWFF1ZXJ5UGFyc2VyJykuWFF1ZXJ5UGFyc2VyOwp2YXIgSlNPTlBhcnNlVHJlZUhhbmRsZXIgPSBfZGVyZXFfKCcuL3BhcnNlcnMvSlNPTlBhcnNlVHJlZUhhbmRsZXInKS5KU09OUGFyc2VUcmVlSGFuZGxlcjsKdmFyIFRyYW5zbGF0b3IgPSBfZGVyZXFfKCcuL2NvbXBpbGVyL3RyYW5zbGF0b3InKS5UcmFuc2xhdG9yOwp2YXIgU3R5bGVDaGVja2VyID0gX2RlcmVxXygnLi9mb3JtYXR0ZXIvc3R5bGVfY2hlY2tlcicpLlN0eWxlQ2hlY2tlcjsKdmFyIFhRRG9jID0gX2RlcmVxXygnLi94cWRvYy94cWRvYycpLlhRRG9jOwp2YXIgY29tcGxldGVyID0gX2RlcmVxXygnLi4vbGliL2NvbXBsZXRpb24vY29tcGxldGVyJyk7CnZhciBUcmVlT3BzID0gX2RlcmVxXygnLi90cmVlX29wcycpLlRyZWVPcHM7Cgp2YXIgY3JlYXRlU3RhdGljQ29udGV4dCA9IGV4cG9ydHMuY3JlYXRlU3RhdGljQ29udGV4dCA9IGZ1bmN0aW9uKCl7CiAgICB2YXIgU3RhdGljQ29udGV4dCA9IF9kZXJlcV8oJy4vY29tcGlsZXIvc3RhdGljX2NvbnRleHQnKS5TdGF0aWNDb250ZXh0OwogICAgcmV0dXJuIG5ldyBTdGF0aWNDb250ZXh0KCk7Cn07Cgp2YXIgY29udmVydFBvc2l0aW9uID0gZnVuY3Rpb24gKGNvZGUsIGJlZ2luLCBlbmQpIHsKICAgIHZhciBiZWZvcmUgPSBjb2RlLnN1YnN0cmluZygwLCBiZWdpbik7CiAgICB2YXIgYWZ0ZXIgPSBjb2RlLnN1YnN0cmluZygwLCBlbmQpOwogICAgdmFyIHN0YXJ0bGluZSA9IGJlZm9yZS5zcGxpdCgnXG4nKS5sZW5ndGg7CiAgICB2YXIgc3RhcnRjb2x1bW4gPSBiZWdpbiAtIGJlZm9yZS5sYXN0SW5kZXhPZignXG4nKTsKICAgIHZhciBlbmRsaW5lID0gYWZ0ZXIuc3BsaXQoJ1xuJykubGVuZ3RoOwogICAgdmFyIGVuZGNvbHVtbiA9IGVuZCAtIGFmdGVyLmxhc3RJbmRleE9mKCdcbicpOwogICAgdmFyIHBvcyA9IHsKICAgICAgICBzbDogc3RhcnRsaW5lIC0gMSwKICAgICAgICBzYzogc3RhcnRjb2x1bW4gLSAxLAogICAgICAgIGVsOiBlbmRsaW5lIC0gMSwKICAgICAgICBlYzogZW5kY29sdW1uIC0gMQogICAgfTsKICAgIHJldHVybiBwb3M7Cn07CgpleHBvcnRzLkpTT05pcUxleGVyID0gX2RlcmVxXygnLi9sZXhlcnMvanNvbmlxX2xleGVyJykuSlNPTmlxTGV4ZXI7CmV4cG9ydHMuWFF1ZXJ5TGV4ZXIgPSBfZGVyZXFfKCcuL2xleGVycy94cXVlcnlfbGV4ZXInKS5YUXVlcnlMZXhlcjsKZXhwb3J0cy5YUUxpbnQgPSBmdW5jdGlvbiAoc291cmNlLCBvcHRzKSB7CiAgICBpZihfLmRlZmF1bHRzKSB7CiAgICAgICAgb3B0cyA9IF8uZGVmYXVsdHMob3B0cyA/IG9wdHMgOiB7fSwgeyBzdHlsZUNoZWNrOiBmYWxzZSB9KTsKICAgIH0KCiAgICB2YXIgYXN0LCB4cWRvYzsKICAgIHZhciBzY3R4ID0gb3B0cy5zdGF0aWNDb250ZXh0ID8gb3B0cy5zdGF0aWNDb250ZXh0IDogY3JlYXRlU3RhdGljQ29udGV4dCgpOwoKICAgIHRoaXMuZ2V0QVNUID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBhc3Q7CiAgICB9OwogICAgCiAgICB0aGlzLnByaW50QVNUID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBUcmVlT3BzLmFzdEFzWE1MKGFzdCwgJyAgJyk7CiAgICB9OwoKICAgIHRoaXMuZ2V0WFFEb2MgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHhxZG9jLmdldFhRRG9jKHNjdHgpOwogICAgfTsKCiAgICB2YXIgbWFya2VycyA9IFtdOwogICAgdGhpcy5nZXRNYXJrZXJzID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBtYXJrZXJzOwogICAgfTsKICAgIAogICAgdGhpcy5nZXRNYXJrZXJzID0gZnVuY3Rpb24odHlwZSl7CiAgICAgICAgdmFyIG0gPSBbXTsKICAgICAgICBtYXJrZXJzLmZvckVhY2goZnVuY3Rpb24obWFya2VyKXsKICAgICAgICAgICAgaWYobWFya2VyLnR5cGUgPT09IHR5cGUgfHwgdHlwZSA9PT0gdW5kZWZpbmVkKXsKICAgICAgICAgICAgICAgIG0ucHVzaChtYXJrZXIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG07CiAgICB9OwoKICAgIHRoaXMuZ2V0RXJyb3JzID0gZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXJrZXJzKCdlcnJvcicpOwogICAgfTsKCiAgICB0aGlzLmdldFdhcm5pbmdzID0gZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXJrZXJzKCd3YXJuaW5nJyk7CiAgICB9OwogICAgCiAgICB0aGlzLmdldENvbXBsZXRpb25zID0gZnVuY3Rpb24ocG9zKXsKICAgICAgICByZXR1cm4gY29tcGxldGVyLmNvbXBsZXRlKHNvdXJjZSwgYXN0LCBzY3R4LCBwb3MpOwogICAgfTsKCiAgICB2YXIgc3ludGF4RXJyb3IgPSBmYWxzZTsKICAgIHRoaXMuaGFzU3ludGF4RXJyb3IgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHN5bnRheEVycm9yOwogICAgfTsKCiAgICB2YXIgZmlsZSA9IG9wdHMuZmlsZU5hbWUgPyBvcHRzLmZpbGVOYW1lIDogJyc7CiAgICB2YXIgaXNKU09OaXEgPSAoKGZpbGUuc3Vic3RyaW5nKGZpbGUubGVuZ3RoIC0gJy5qcScubGVuZ3RoKS5pbmRleE9mKCcuanEnKSAhPT0gLTEpICYmIHNvdXJjZS5pbmRleE9mKCd4cXVlcnkgdmVyc2lvbicpICE9PSAwKSB8fCBzb3VyY2UuaW5kZXhPZignanNvbmlxIHZlcnNpb24nKSA9PT0gMDsKICAgIHZhciBoID0gbmV3IEpTT05QYXJzZVRyZWVIYW5kbGVyKHNvdXJjZSk7CiAgICB2YXIgcGFyc2VyID0gaXNKU09OaXEgPyBuZXcgSlNPTmlxUGFyc2VyKHNvdXJjZSwgaCkgOiBuZXcgWFF1ZXJ5UGFyc2VyKHNvdXJjZSwgaCk7CiAgICB0cnkgewogICAgICAgIHBhcnNlci5wYXJzZV9YUXVlcnkoKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIHBhcnNlci5QYXJzZUV4Y2VwdGlvbikgewogICAgICAgICAgICBzeW50YXhFcnJvciA9IHRydWU7CiAgICAgICAgICAgIGguY2xvc2VQYXJzZVRyZWUoKTsKICAgICAgICAgICAgdmFyIHBvcyA9IGNvbnZlcnRQb3NpdGlvbihzb3VyY2UsIGUuZ2V0QmVnaW4oKSwgZS5nZXRFbmQoKSk7CiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gcGFyc2VyLmdldEVycm9yTWVzc2FnZShlKTsKICAgICAgICAgICAgaWYgKHBvcy5zYyA9PT0gcG9zLmVjKSB7CiAgICAgICAgICAgICAgICBwb3MuZWMrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBtYXJrZXJzLnB1c2goewogICAgICAgICAgICAgICAgcG9zOiBwb3MsCiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLAogICAgICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlCiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IGU7CiAgICAgICAgfQogICAgfQogICAgYXN0ID0gaC5nZXRQYXJzZVRyZWUoKTsKICAgIGlmKG9wdHMuc3R5bGVDaGVjaykgewogICAgICAgIG1hcmtlcnMgPSBtYXJrZXJzLmNvbmNhdChuZXcgU3R5bGVDaGVja2VyKGFzdCwgc291cmNlKS5nZXRNYXJrZXJzKCkpOwogICAgfQogICAgeHFkb2MgPSBuZXcgWFFEb2MoYXN0KTsKICAgIHZhciB0cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3Ioc2N0eCwgYXN0KTsKICAgIG1hcmtlcnMgPSBtYXJrZXJzLmNvbmNhdCh0cmFuc2xhdG9yLmdldE1hcmtlcnMoKSk7Cn07Cgp9LHsiLi4vbGliL2NvbXBsZXRpb24vY29tcGxldGVyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2NvbXBsZXRpb24vY29tcGxldGVyLmpzIiwiLi9jb21waWxlci9zdGF0aWNfY29udGV4dCI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci9zdGF0aWNfY29udGV4dC5qcyIsIi4vY29tcGlsZXIvdHJhbnNsYXRvciI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9jb21waWxlci90cmFuc2xhdG9yLmpzIiwiLi9mb3JtYXR0ZXIvc3R5bGVfY2hlY2tlciI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9mb3JtYXR0ZXIvc3R5bGVfY2hlY2tlci5qcyIsIi4vbGV4ZXJzL2pzb25pcV9sZXhlciI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi9sZXhlcnMvanNvbmlxX2xleGVyLmpzIiwiLi9sZXhlcnMveHF1ZXJ5X2xleGVyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL2xleGVycy94cXVlcnlfbGV4ZXIuanMiLCIuL3BhcnNlcnMvSlNPTlBhcnNlVHJlZUhhbmRsZXIiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvcGFyc2Vycy9KU09OUGFyc2VUcmVlSGFuZGxlci5qcyIsIi4vcGFyc2Vycy9KU09OaXFQYXJzZXIiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIvcGFyc2Vycy9KU09OaXFQYXJzZXIuanMiLCIuL3BhcnNlcnMvWFF1ZXJ5UGFyc2VyIjoiL25vZGVfbW9kdWxlcy94cWxpbnQvbGliL3BhcnNlcnMvWFF1ZXJ5UGFyc2VyLmpzIiwiLi90cmVlX29wcyI6Ii9ub2RlX21vZHVsZXMveHFsaW50L2xpYi90cmVlX29wcy5qcyIsIi4veHFkb2MveHFkb2MiOiIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIveHFkb2MveHFkb2MuanMiLCJsb2Rhc2giOiIvbm9kZV9tb2R1bGVzL3hxbGludC9ub2RlX21vZHVsZXMvbG9kYXNoL2luZGV4LmpzIn1dLCIvbm9kZV9tb2R1bGVzL3hxbGludC9ub2RlX21vZHVsZXMvbG9kYXNoL2luZGV4LmpzIjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoZ2xvYmFsKXsKOyhmdW5jdGlvbigpIHsKICB2YXIgdW5kZWZpbmVkOwogIHZhciBWRVJTSU9OID0gJzMuMTAuMSc7CiAgdmFyIEJJTkRfRkxBRyA9IDEsCiAgICAgIEJJTkRfS0VZX0ZMQUcgPSAyLAogICAgICBDVVJSWV9CT1VORF9GTEFHID0gNCwKICAgICAgQ1VSUllfRkxBRyA9IDgsCiAgICAgIENVUlJZX1JJR0hUX0ZMQUcgPSAxNiwKICAgICAgUEFSVElBTF9GTEFHID0gMzIsCiAgICAgIFBBUlRJQUxfUklHSFRfRkxBRyA9IDY0LAogICAgICBBUllfRkxBRyA9IDEyOCwKICAgICAgUkVBUkdfRkxBRyA9IDI1NjsKICB2YXIgREVGQVVMVF9UUlVOQ19MRU5HVEggPSAzMCwKICAgICAgREVGQVVMVF9UUlVOQ19PTUlTU0lPTiA9ICcuLi4nOwogIHZhciBIT1RfQ09VTlQgPSAxNTAsCiAgICAgIEhPVF9TUEFOID0gMTY7CiAgdmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7CiAgdmFyIExBWllfRklMVEVSX0ZMQUcgPSAxLAogICAgICBMQVpZX01BUF9GTEFHID0gMjsKICB2YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nOwogIHZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJzsKICB2YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLAogICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsCiAgICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsCiAgICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsCiAgICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJywKICAgICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsCiAgICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLAogICAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJywKICAgICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsCiAgICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLAogICAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJywKICAgICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsCiAgICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7CgogIHZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsCiAgICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJywKICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLAogICAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsCiAgICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLAogICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJywKICAgICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsCiAgICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsCiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsCiAgICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7CiAgdmFyIHJlRW1wdHlTdHJpbmdMZWFkaW5nID0gL1xiX19wIFwrPSAnJzsvZywKICAgICAgcmVFbXB0eVN0cmluZ01pZGRsZSA9IC9cYihfX3AgXCs9KSAnJyBcKy9nLAogICAgICByZUVtcHR5U3RyaW5nVHJhaWxpbmcgPSAvKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nOwogIHZhciByZUVzY2FwZWRIdG1sID0gLyYoPzphbXB8bHR8Z3R8cXVvdHwjMzl8Izk2KTsvZywKICAgICAgcmVVbmVzY2FwZWRIdG1sID0gL1smPD4iJ2BdL2csCiAgICAgIHJlSGFzRXNjYXBlZEh0bWwgPSBSZWdFeHAocmVFc2NhcGVkSHRtbC5zb3VyY2UpLAogICAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7CiAgdmFyIHJlRXNjYXBlID0gLzwlLShbXHNcU10rPyklPi9nLAogICAgICByZUV2YWx1YXRlID0gLzwlKFtcc1xTXSs/KSU+L2csCiAgICAgIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcc1xTXSs/KSU+L2c7CiAgdmFyIHJlSXNEZWVwUHJvcCA9IC9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cblxcXXxcXC4pKj9cMSlcXS8sCiAgICAgIHJlSXNQbGFpblByb3AgPSAvXlx3KiQvLAogICAgICByZVByb3BOYW1lID0gL1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXG5cXF18XFwuKSo/KVwyKVxdL2c7CiAgdmFyIHJlUmVnRXhwQ2hhcnMgPSAvXls6ISxdfFtcXF4kLiorPygpW1xde318XC9dfCheWzAtOWEtZkEtRm5ydHV2eF0pfChbXG5cclx1MjAyOFx1MjAyOV0pL2csCiAgICAgIHJlSGFzUmVnRXhwQ2hhcnMgPSBSZWdFeHAocmVSZWdFeHBDaGFycy5zb3VyY2UpOwogIHZhciByZUNvbWJvTWFyayA9IC9bXHUwMzAwLVx1MDM2Zlx1ZmUyMC1cdWZlMjNdL2c7CiAgdmFyIHJlRXNjYXBlQ2hhciA9IC9cXChcXCk/L2c7CiAgdmFyIHJlRXNUZW1wbGF0ZSA9IC9cJFx7KFteXFx9XSooPzpcXC5bXlxcfV0qKSopXH0vZzsKICB2YXIgcmVGbGFncyA9IC9cdyokLzsKICB2YXIgcmVIYXNIZXhQcmVmaXggPSAvXjBbeFhdLzsKICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87CiAgdmFyIHJlSXNVaW50ID0gL15cZCskLzsKICB2YXIgcmVMYXRpbjEgPSAvW1x4YzAtXHhkNlx4ZDgtXHhkZVx4ZGYtXHhmNlx4ZjgtXHhmZl0vZzsKICB2YXIgcmVOb01hdGNoID0gLygkXikvOwogIHZhciByZVVuZXNjYXBlZFN0cmluZyA9IC9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZzsKICB2YXIgcmVXb3JkcyA9IChmdW5jdGlvbigpIHsKICAgIHZhciB1cHBlciA9ICdbQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZV0nLAogICAgICAgIGxvd2VyID0gJ1thLXpcXHhkZi1cXHhmNlxceGY4LVxceGZmXSsnOwoKICAgIHJldHVybiBSZWdFeHAodXBwZXIgKyAnKyg/PScgKyB1cHBlciArIGxvd2VyICsgJyl8JyArIHVwcGVyICsgJz8nICsgbG93ZXIgKyAnfCcgKyB1cHBlciArICcrfFswLTldKycsICdnJyk7CiAgfSgpKTsKICB2YXIgY29udGV4dFByb3BzID0gWwogICAgJ0FycmF5JywgJ0FycmF5QnVmZmVyJywgJ0RhdGUnLCAnRXJyb3InLCAnRmxvYXQzMkFycmF5JywgJ0Zsb2F0NjRBcnJheScsCiAgICAnRnVuY3Rpb24nLCAnSW50OEFycmF5JywgJ0ludDE2QXJyYXknLCAnSW50MzJBcnJheScsICdNYXRoJywgJ051bWJlcicsCiAgICAnT2JqZWN0JywgJ1JlZ0V4cCcsICdTZXQnLCAnU3RyaW5nJywgJ18nLCAnY2xlYXJUaW1lb3V0JywgJ2lzRmluaXRlJywKICAgICdwYXJzZUZsb2F0JywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnLCAnVHlwZUVycm9yJywgJ1VpbnQ4QXJyYXknLAogICAgJ1VpbnQ4Q2xhbXBlZEFycmF5JywgJ1VpbnQxNkFycmF5JywgJ1VpbnQzMkFycmF5JywgJ1dlYWtNYXAnCiAgXTsKICB2YXIgdGVtcGxhdGVDb3VudGVyID0gLTE7CiAgdmFyIHR5cGVkQXJyYXlUYWdzID0ge307CiAgdHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9CiAgdHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9CiAgdHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlOwogIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID0KICB0eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9CiAgdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPSB0eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID0gdHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9CiAgdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPQogIHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzZXRUYWddID0KICB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID0gdHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTsKICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9OwogIGNsb25lYWJsZVRhZ3NbYXJnc1RhZ10gPSBjbG9uZWFibGVUYWdzW2FycmF5VGFnXSA9CiAgY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2Jvb2xUYWddID0KICBjbG9uZWFibGVUYWdzW2RhdGVUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9CiAgY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPQogIGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQzMlRhZ10gPQogIGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9CiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0KICBjbG9uZWFibGVUYWdzW3VpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9CiAgY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTsKICBjbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPQogIGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9CiAgY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlOwogIHZhciBkZWJ1cnJlZExldHRlcnMgPSB7CiAgICAnXHhjMCc6ICdBJywgICdceGMxJzogJ0EnLCAnXHhjMic6ICdBJywgJ1x4YzMnOiAnQScsICdceGM0JzogJ0EnLCAnXHhjNSc6ICdBJywKICAgICdceGUwJzogJ2EnLCAgJ1x4ZTEnOiAnYScsICdceGUyJzogJ2EnLCAnXHhlMyc6ICdhJywgJ1x4ZTQnOiAnYScsICdceGU1JzogJ2EnLAogICAgJ1x4YzcnOiAnQycsICAnXHhlNyc6ICdjJywKICAgICdceGQwJzogJ0QnLCAgJ1x4ZjAnOiAnZCcsCiAgICAnXHhjOCc6ICdFJywgICdceGM5JzogJ0UnLCAnXHhjYSc6ICdFJywgJ1x4Y2InOiAnRScsCiAgICAnXHhlOCc6ICdlJywgICdceGU5JzogJ2UnLCAnXHhlYSc6ICdlJywgJ1x4ZWInOiAnZScsCiAgICAnXHhjQyc6ICdJJywgICdceGNkJzogJ0knLCAnXHhjZSc6ICdJJywgJ1x4Y2YnOiAnSScsCiAgICAnXHhlQyc6ICdpJywgICdceGVkJzogJ2knLCAnXHhlZSc6ICdpJywgJ1x4ZWYnOiAnaScsCiAgICAnXHhkMSc6ICdOJywgICdceGYxJzogJ24nLAogICAgJ1x4ZDInOiAnTycsICAnXHhkMyc6ICdPJywgJ1x4ZDQnOiAnTycsICdceGQ1JzogJ08nLCAnXHhkNic6ICdPJywgJ1x4ZDgnOiAnTycsCiAgICAnXHhmMic6ICdvJywgICdceGYzJzogJ28nLCAnXHhmNCc6ICdvJywgJ1x4ZjUnOiAnbycsICdceGY2JzogJ28nLCAnXHhmOCc6ICdvJywKICAgICdceGQ5JzogJ1UnLCAgJ1x4ZGEnOiAnVScsICdceGRiJzogJ1UnLCAnXHhkYyc6ICdVJywKICAgICdceGY5JzogJ3UnLCAgJ1x4ZmEnOiAndScsICdceGZiJzogJ3UnLCAnXHhmYyc6ICd1JywKICAgICdceGRkJzogJ1knLCAgJ1x4ZmQnOiAneScsICdceGZmJzogJ3knLAogICAgJ1x4YzYnOiAnQWUnLCAnXHhlNic6ICdhZScsCiAgICAnXHhkZSc6ICdUaCcsICdceGZlJzogJ3RoJywKICAgICdceGRmJzogJ3NzJwogIH07CiAgdmFyIGh0bWxFc2NhcGVzID0gewogICAgJyYnOiAnJmFtcDsnLAogICAgJzwnOiAnJmx0OycsCiAgICAnPic6ICcmZ3Q7JywKICAgICciJzogJyZxdW90OycsCiAgICAiJyI6ICcmIzM5OycsCiAgICAnYCc6ICcmIzk2OycKICB9OwogIHZhciBodG1sVW5lc2NhcGVzID0gewogICAgJyZhbXA7JzogJyYnLAogICAgJyZsdDsnOiAnPCcsCiAgICAnJmd0Oyc6ICc+JywKICAgICcmcXVvdDsnOiAnIicsCiAgICAnJiMzOTsnOiAiJyIsCiAgICAnJiM5NjsnOiAnYCcKICB9OwogIHZhciBvYmplY3RUeXBlcyA9IHsKICAgICdmdW5jdGlvbic6IHRydWUsCiAgICAnb2JqZWN0JzogdHJ1ZQogIH07CiAgdmFyIHJlZ2V4cEVzY2FwZXMgPSB7CiAgICAnMCc6ICd4MzAnLCAnMSc6ICd4MzEnLCAnMic6ICd4MzInLCAnMyc6ICd4MzMnLCAnNCc6ICd4MzQnLAogICAgJzUnOiAneDM1JywgJzYnOiAneDM2JywgJzcnOiAneDM3JywgJzgnOiAneDM4JywgJzknOiAneDM5JywKICAgICdBJzogJ3g0MScsICdCJzogJ3g0MicsICdDJzogJ3g0MycsICdEJzogJ3g0NCcsICdFJzogJ3g0NScsICdGJzogJ3g0NicsCiAgICAnYSc6ICd4NjEnLCAnYic6ICd4NjInLCAnYyc6ICd4NjMnLCAnZCc6ICd4NjQnLCAnZSc6ICd4NjUnLCAnZic6ICd4NjYnLAogICAgJ24nOiAneDZlJywgJ3InOiAneDcyJywgJ3QnOiAneDc0JywgJ3UnOiAneDc1JywgJ3YnOiAneDc2JywgJ3gnOiAneDc4JwogIH07CiAgdmFyIHN0cmluZ0VzY2FwZXMgPSB7CiAgICAnXFwnOiAnXFwnLAogICAgIiciOiAiJyIsCiAgICAnXG4nOiAnbicsCiAgICAnXHInOiAncicsCiAgICAnXHUyMDI4JzogJ3UyMDI4JywKICAgICdcdTIwMjknOiAndTIwMjknCiAgfTsKICB2YXIgZnJlZUV4cG9ydHMgPSBvYmplY3RUeXBlc1t0eXBlb2YgZXhwb3J0c10gJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogIHZhciBmcmVlTW9kdWxlID0gb2JqZWN0VHlwZXNbdHlwZW9mIG1vZHVsZV0gJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlOwogIHZhciBmcmVlR2xvYmFsID0gZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSAmJiB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ICYmIGdsb2JhbDsKICB2YXIgZnJlZVNlbGYgPSBvYmplY3RUeXBlc1t0eXBlb2Ygc2VsZl0gJiYgc2VsZiAmJiBzZWxmLk9iamVjdCAmJiBzZWxmOwogIHZhciBmcmVlV2luZG93ID0gb2JqZWN0VHlwZXNbdHlwZW9mIHdpbmRvd10gJiYgd2luZG93ICYmIHdpbmRvdy5PYmplY3QgJiYgd2luZG93OwogIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzICYmIGZyZWVFeHBvcnRzOwogIHZhciByb290ID0gZnJlZUdsb2JhbCB8fCAoKGZyZWVXaW5kb3cgIT09ICh0aGlzICYmIHRoaXMud2luZG93KSkgJiYgZnJlZVdpbmRvdykgfHwgZnJlZVNlbGYgfHwgdGhpczsKICBmdW5jdGlvbiBiYXNlQ29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHsKICAgIGlmICh2YWx1ZSAhPT0gb3RoZXIpIHsKICAgICAgdmFyIHZhbElzTnVsbCA9IHZhbHVlID09PSBudWxsLAogICAgICAgICAgdmFsSXNVbmRlZiA9IHZhbHVlID09PSB1bmRlZmluZWQsCiAgICAgICAgICB2YWxJc1JlZmxleGl2ZSA9IHZhbHVlID09PSB2YWx1ZTsKCiAgICAgIHZhciBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCwKICAgICAgICAgIG90aElzVW5kZWYgPSBvdGhlciA9PT0gdW5kZWZpbmVkLAogICAgICAgICAgb3RoSXNSZWZsZXhpdmUgPSBvdGhlciA9PT0gb3RoZXI7CgogICAgICBpZiAoKHZhbHVlID4gb3RoZXIgJiYgIW90aElzTnVsbCkgfHwgIXZhbElzUmVmbGV4aXZlIHx8CiAgICAgICAgICAodmFsSXNOdWxsICYmICFvdGhJc1VuZGVmICYmIG90aElzUmVmbGV4aXZlKSB8fAogICAgICAgICAgKHZhbElzVW5kZWYgJiYgb3RoSXNSZWZsZXhpdmUpKSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0KICAgICAgaWYgKCh2YWx1ZSA8IG90aGVyICYmICF2YWxJc051bGwpIHx8ICFvdGhJc1JlZmxleGl2ZSB8fAogICAgICAgICAgKG90aElzTnVsbCAmJiAhdmFsSXNVbmRlZiAmJiB2YWxJc1JlZmxleGl2ZSkgfHwKICAgICAgICAgIChvdGhJc1VuZGVmICYmIHZhbElzUmVmbGV4aXZlKSkgewogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7CiAgfQogIGZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbVJpZ2h0KSB7CiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTE7CgogICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHsKICAgICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHsKICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CiAgZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHsKICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHsKICAgICAgcmV0dXJuIGluZGV4T2ZOYU4oYXJyYXksIGZyb21JbmRleCk7CiAgICB9CiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLAogICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkgewogICAgICAgIHJldHVybiBpbmRleDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIC0xOwogIH0KICBmdW5jdGlvbiBiYXNlSXNGdW5jdGlvbih2YWx1ZSkgewogICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nIHx8IGZhbHNlOwogIH0KICBmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiAodmFsdWUgKyAnJyk7CiAgfQogIGZ1bmN0aW9uIGNoYXJzTGVmdEluZGV4KHN0cmluZywgY2hhcnMpIHsKICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7CgogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgY2hhcnMuaW5kZXhPZihzdHJpbmcuY2hhckF0KGluZGV4KSkgPiAtMSkge30KICAgIHJldHVybiBpbmRleDsKICB9CiAgZnVuY3Rpb24gY2hhcnNSaWdodEluZGV4KHN0cmluZywgY2hhcnMpIHsKICAgIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7CgogICAgd2hpbGUgKGluZGV4LS0gJiYgY2hhcnMuaW5kZXhPZihzdHJpbmcuY2hhckF0KGluZGV4KSkgPiAtMSkge30KICAgIHJldHVybiBpbmRleDsKICB9CiAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyhvYmplY3QsIG90aGVyKSB7CiAgICByZXR1cm4gYmFzZUNvbXBhcmVBc2NlbmRpbmcob2JqZWN0LmNyaXRlcmlhLCBvdGhlci5jcml0ZXJpYSkgfHwgKG9iamVjdC5pbmRleCAtIG90aGVyLmluZGV4KTsKICB9CiAgZnVuY3Rpb24gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycykgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgb2JqQ3JpdGVyaWEgPSBvYmplY3QuY3JpdGVyaWEsCiAgICAgICAgb3RoQ3JpdGVyaWEgPSBvdGhlci5jcml0ZXJpYSwKICAgICAgICBsZW5ndGggPSBvYmpDcml0ZXJpYS5sZW5ndGgsCiAgICAgICAgb3JkZXJzTGVuZ3RoID0gb3JkZXJzLmxlbmd0aDsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICB2YXIgcmVzdWx0ID0gYmFzZUNvbXBhcmVBc2NlbmRpbmcob2JqQ3JpdGVyaWFbaW5kZXhdLCBvdGhDcml0ZXJpYVtpbmRleF0pOwogICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgaWYgKGluZGV4ID49IG9yZGVyc0xlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgdmFyIG9yZGVyID0gb3JkZXJzW2luZGV4XTsKICAgICAgICByZXR1cm4gcmVzdWx0ICogKChvcmRlciA9PT0gJ2FzYycgfHwgb3JkZXIgPT09IHRydWUpID8gMSA6IC0xKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG9iamVjdC5pbmRleCAtIG90aGVyLmluZGV4OwogIH0KICBmdW5jdGlvbiBkZWJ1cnJMZXR0ZXIobGV0dGVyKSB7CiAgICByZXR1cm4gZGVidXJyZWRMZXR0ZXJzW2xldHRlcl07CiAgfQogIGZ1bmN0aW9uIGVzY2FwZUh0bWxDaGFyKGNocikgewogICAgcmV0dXJuIGh0bWxFc2NhcGVzW2Nocl07CiAgfQogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cENoYXIoY2hyLCBsZWFkaW5nQ2hhciwgd2hpdGVzcGFjZUNoYXIpIHsKICAgIGlmIChsZWFkaW5nQ2hhcikgewogICAgICBjaHIgPSByZWdleHBFc2NhcGVzW2Nocl07CiAgICB9IGVsc2UgaWYgKHdoaXRlc3BhY2VDaGFyKSB7CiAgICAgIGNociA9IHN0cmluZ0VzY2FwZXNbY2hyXTsKICAgIH0KICAgIHJldHVybiAnXFwnICsgY2hyOwogIH0KICBmdW5jdGlvbiBlc2NhcGVTdHJpbmdDaGFyKGNocikgewogICAgcmV0dXJuICdcXCcgKyBzdHJpbmdFc2NhcGVzW2Nocl07CiAgfQogIGZ1bmN0aW9uIGluZGV4T2ZOYU4oYXJyYXksIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7CiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDAgOiAtMSk7CgogICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHsKICAgICAgdmFyIG90aGVyID0gYXJyYXlbaW5kZXhdOwogICAgICBpZiAob3RoZXIgIT09IG90aGVyKSB7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQogIGZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkgewogICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnOwogIH0KICBmdW5jdGlvbiBpc1NwYWNlKGNoYXJDb2RlKSB7CiAgICByZXR1cm4gKChjaGFyQ29kZSA8PSAxNjAgJiYgKGNoYXJDb2RlID49IDkgJiYgY2hhckNvZGUgPD0gMTMpIHx8IGNoYXJDb2RlID09IDMyIHx8IGNoYXJDb2RlID09IDE2MCkgfHwgY2hhckNvZGUgPT0gNTc2MCB8fCBjaGFyQ29kZSA9PSA2MTU4IHx8CiAgICAgIChjaGFyQ29kZSA+PSA4MTkyICYmIChjaGFyQ29kZSA8PSA4MjAyIHx8IGNoYXJDb2RlID09IDgyMzIgfHwgY2hhckNvZGUgPT0gODIzMyB8fCBjaGFyQ29kZSA9PSA4MjM5IHx8IGNoYXJDb2RlID09IDgyODcgfHwgY2hhckNvZGUgPT0gMTIyODggfHwgY2hhckNvZGUgPT0gNjUyNzkpKSk7CiAgfQogIGZ1bmN0aW9uIHJlcGxhY2VIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIHJlc0luZGV4ID0gLTEsCiAgICAgICAgcmVzdWx0ID0gW107CgogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgaWYgKGFycmF5W2luZGV4XSA9PT0gcGxhY2Vob2xkZXIpIHsKICAgICAgICBhcnJheVtpbmRleF0gPSBQTEFDRUhPTERFUjsKICAgICAgICByZXN1bHRbKytyZXNJbmRleF0gPSBpbmRleDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gc29ydGVkVW5pcShhcnJheSwgaXRlcmF0ZWUpIHsKICAgIHZhciBzZWVuLAogICAgICAgIGluZGV4ID0gLTEsCiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIHJlc0luZGV4ID0gLTEsCiAgICAgICAgcmVzdWx0ID0gW107CgogICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLAogICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgYXJyYXkpIDogdmFsdWU7CgogICAgICBpZiAoIWluZGV4IHx8IHNlZW4gIT09IGNvbXB1dGVkKSB7CiAgICAgICAgc2VlbiA9IGNvbXB1dGVkOwogICAgICAgIHJlc3VsdFsrK3Jlc0luZGV4XSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiB0cmltbWVkTGVmdEluZGV4KHN0cmluZykgewogICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDsKCiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiBpc1NwYWNlKHN0cmluZy5jaGFyQ29kZUF0KGluZGV4KSkpIHt9CiAgICByZXR1cm4gaW5kZXg7CiAgfQogIGZ1bmN0aW9uIHRyaW1tZWRSaWdodEluZGV4KHN0cmluZykgewogICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDsKCiAgICB3aGlsZSAoaW5kZXgtLSAmJiBpc1NwYWNlKHN0cmluZy5jaGFyQ29kZUF0KGluZGV4KSkpIHt9CiAgICByZXR1cm4gaW5kZXg7CiAgfQogIGZ1bmN0aW9uIHVuZXNjYXBlSHRtbENoYXIoY2hyKSB7CiAgICByZXR1cm4gaHRtbFVuZXNjYXBlc1tjaHJdOwogIH0KICBmdW5jdGlvbiBydW5JbkNvbnRleHQoY29udGV4dCkgewogICAgY29udGV4dCA9IGNvbnRleHQgPyBfLmRlZmF1bHRzKHJvb3QuT2JqZWN0KCksIGNvbnRleHQsIF8ucGljayhyb290LCBjb250ZXh0UHJvcHMpKSA6IHJvb3Q7CiAgICB2YXIgQXJyYXkgPSBjb250ZXh0LkFycmF5LAogICAgICAgIERhdGUgPSBjb250ZXh0LkRhdGUsCiAgICAgICAgRXJyb3IgPSBjb250ZXh0LkVycm9yLAogICAgICAgIEZ1bmN0aW9uID0gY29udGV4dC5GdW5jdGlvbiwKICAgICAgICBNYXRoID0gY29udGV4dC5NYXRoLAogICAgICAgIE51bWJlciA9IGNvbnRleHQuTnVtYmVyLAogICAgICAgIE9iamVjdCA9IGNvbnRleHQuT2JqZWN0LAogICAgICAgIFJlZ0V4cCA9IGNvbnRleHQuUmVnRXhwLAogICAgICAgIFN0cmluZyA9IGNvbnRleHQuU3RyaW5nLAogICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHQuVHlwZUVycm9yOwogICAgdmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsCiAgICAgICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlLAogICAgICAgIHN0cmluZ1Byb3RvID0gU3RyaW5nLnByb3RvdHlwZTsKICAgIHZhciBmblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nOwogICAgdmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7CiAgICB2YXIgaWRDb3VudGVyID0gMDsKICAgIHZhciBvYmpUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nOwogICAgdmFyIG9sZERhc2ggPSByb290Ll87CiAgICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKwogICAgICBmblRvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCAnXFwkJicpCiAgICAgIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCAnJDEuKj8nKSArICckJwogICAgKTsKICAgIHZhciBBcnJheUJ1ZmZlciA9IGNvbnRleHQuQXJyYXlCdWZmZXIsCiAgICAgICAgY2xlYXJUaW1lb3V0ID0gY29udGV4dC5jbGVhclRpbWVvdXQsCiAgICAgICAgcGFyc2VGbG9hdCA9IGNvbnRleHQucGFyc2VGbG9hdCwKICAgICAgICBwb3cgPSBNYXRoLnBvdywKICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLAogICAgICAgIFNldCA9IGdldE5hdGl2ZShjb250ZXh0LCAnU2V0JyksCiAgICAgICAgc2V0VGltZW91dCA9IGNvbnRleHQuc2V0VGltZW91dCwKICAgICAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSwKICAgICAgICBVaW50OEFycmF5ID0gY29udGV4dC5VaW50OEFycmF5LAogICAgICAgIFdlYWtNYXAgPSBnZXROYXRpdmUoY29udGV4dCwgJ1dlYWtNYXAnKTsKICAgIHZhciBuYXRpdmVDZWlsID0gTWF0aC5jZWlsLAogICAgICAgIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICdjcmVhdGUnKSwKICAgICAgICBuYXRpdmVGbG9vciA9IE1hdGguZmxvb3IsCiAgICAgICAgbmF0aXZlSXNBcnJheSA9IGdldE5hdGl2ZShBcnJheSwgJ2lzQXJyYXknKSwKICAgICAgICBuYXRpdmVJc0Zpbml0ZSA9IGNvbnRleHQuaXNGaW5pdGUsCiAgICAgICAgbmF0aXZlS2V5cyA9IGdldE5hdGl2ZShPYmplY3QsICdrZXlzJyksCiAgICAgICAgbmF0aXZlTWF4ID0gTWF0aC5tYXgsCiAgICAgICAgbmF0aXZlTWluID0gTWF0aC5taW4sCiAgICAgICAgbmF0aXZlTm93ID0gZ2V0TmF0aXZlKERhdGUsICdub3cnKSwKICAgICAgICBuYXRpdmVQYXJzZUludCA9IGNvbnRleHQucGFyc2VJbnQsCiAgICAgICAgbmF0aXZlUmFuZG9tID0gTWF0aC5yYW5kb207CiAgICB2YXIgTkVHQVRJVkVfSU5GSU5JVFkgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksCiAgICAgICAgUE9TSVRJVkVfSU5GSU5JVFkgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICB2YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTUsCiAgICAgICAgTUFYX0FSUkFZX0lOREVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsCiAgICAgICAgSEFMRl9NQVhfQVJSQVlfTEVOR1RIID0gTUFYX0FSUkFZX0xFTkdUSCA+Pj4gMTsKICAgIHZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTsKICAgIHZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDsKICAgIHZhciByZWFsTmFtZXMgPSB7fTsKICAgIGZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkgewogICAgICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkgewogICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX2NoYWluX18nKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnX193cmFwcGVkX18nKSkgewogICAgICAgICAgcmV0dXJuIHdyYXBwZXJDbG9uZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlTG9kYXNoKCkgewogICAgfQogICAgZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwsIGFjdGlvbnMpIHsKICAgICAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlOwogICAgICB0aGlzLl9fYWN0aW9uc19fID0gYWN0aW9ucyB8fCBbXTsKICAgICAgdGhpcy5fX2NoYWluX18gPSAhIWNoYWluQWxsOwogICAgfQogICAgdmFyIHN1cHBvcnQgPSBsb2Rhc2guc3VwcG9ydCA9IHt9OwogICAgbG9kYXNoLnRlbXBsYXRlU2V0dGluZ3MgPSB7CiAgICAgICdlc2NhcGUnOiByZUVzY2FwZSwKICAgICAgJ2V2YWx1YXRlJzogcmVFdmFsdWF0ZSwKICAgICAgJ2ludGVycG9sYXRlJzogcmVJbnRlcnBvbGF0ZSwKICAgICAgJ3ZhcmlhYmxlJzogJycsCiAgICAgICdpbXBvcnRzJzogewogICAgICAgICdfJzogbG9kYXNoCiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkgewogICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7CiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBbXTsKICAgICAgdGhpcy5fX2Rpcl9fID0gMTsKICAgICAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTsKICAgICAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107CiAgICAgIHRoaXMuX190YWtlQ291bnRfXyA9IFBPU0lUSVZFX0lORklOSVRZOwogICAgICB0aGlzLl9fdmlld3NfXyA9IFtdOwogICAgfQogICAgZnVuY3Rpb24gbGF6eUNsb25lKCkgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMuX193cmFwcGVkX18pOwogICAgICByZXN1bHQuX19hY3Rpb25zX18gPSBhcnJheUNvcHkodGhpcy5fX2FjdGlvbnNfXyk7CiAgICAgIHJlc3VsdC5fX2Rpcl9fID0gdGhpcy5fX2Rpcl9fOwogICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gdGhpcy5fX2ZpbHRlcmVkX187CiAgICAgIHJlc3VsdC5fX2l0ZXJhdGVlc19fID0gYXJyYXlDb3B5KHRoaXMuX19pdGVyYXRlZXNfXyk7CiAgICAgIHJlc3VsdC5fX3Rha2VDb3VudF9fID0gdGhpcy5fX3Rha2VDb3VudF9fOwogICAgICByZXN1bHQuX192aWV3c19fID0gYXJyYXlDb3B5KHRoaXMuX192aWV3c19fKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGxhenlSZXZlcnNlKCkgewogICAgICBpZiAodGhpcy5fX2ZpbHRlcmVkX18pIHsKICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExhenlXcmFwcGVyKHRoaXMpOwogICAgICAgIHJlc3VsdC5fX2Rpcl9fID0gLTE7CiAgICAgICAgcmVzdWx0Ll9fZmlsdGVyZWRfXyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gdGhpcy5jbG9uZSgpOwogICAgICAgIHJlc3VsdC5fX2Rpcl9fICo9IC0xOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBsYXp5VmFsdWUoKSB7CiAgICAgIHZhciBhcnJheSA9IHRoaXMuX193cmFwcGVkX18udmFsdWUoKSwKICAgICAgICAgIGRpciA9IHRoaXMuX19kaXJfXywKICAgICAgICAgIGlzQXJyID0gaXNBcnJheShhcnJheSksCiAgICAgICAgICBpc1JpZ2h0ID0gZGlyIDwgMCwKICAgICAgICAgIGFyckxlbmd0aCA9IGlzQXJyID8gYXJyYXkubGVuZ3RoIDogMCwKICAgICAgICAgIHZpZXcgPSBnZXRWaWV3KDAsIGFyckxlbmd0aCwgdGhpcy5fX3ZpZXdzX18pLAogICAgICAgICAgc3RhcnQgPSB2aWV3LnN0YXJ0LAogICAgICAgICAgZW5kID0gdmlldy5lbmQsCiAgICAgICAgICBsZW5ndGggPSBlbmQgLSBzdGFydCwKICAgICAgICAgIGluZGV4ID0gaXNSaWdodCA/IGVuZCA6IChzdGFydCAtIDEpLAogICAgICAgICAgaXRlcmF0ZWVzID0gdGhpcy5fX2l0ZXJhdGVlc19fLAogICAgICAgICAgaXRlckxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGgsCiAgICAgICAgICByZXNJbmRleCA9IDAsCiAgICAgICAgICB0YWtlQ291bnQgPSBuYXRpdmVNaW4obGVuZ3RoLCB0aGlzLl9fdGFrZUNvdW50X18pOwoKICAgICAgaWYgKCFpc0FyciB8fCBhcnJMZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIHx8IChhcnJMZW5ndGggPT0gbGVuZ3RoICYmIHRha2VDb3VudCA9PSBsZW5ndGgpKSB7CiAgICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoKGlzUmlnaHQgJiYgaXNBcnIpID8gYXJyYXkucmV2ZXJzZSgpIDogYXJyYXksIHRoaXMuX19hY3Rpb25zX18pOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBbXTsKCiAgICAgIG91dGVyOgogICAgICB3aGlsZSAobGVuZ3RoLS0gJiYgcmVzSW5kZXggPCB0YWtlQ291bnQpIHsKICAgICAgICBpbmRleCArPSBkaXI7CgogICAgICAgIHZhciBpdGVySW5kZXggPSAtMSwKICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpbmRleF07CgogICAgICAgIHdoaWxlICgrK2l0ZXJJbmRleCA8IGl0ZXJMZW5ndGgpIHsKICAgICAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sCiAgICAgICAgICAgICAgaXRlcmF0ZWUgPSBkYXRhLml0ZXJhdGVlLAogICAgICAgICAgICAgIHR5cGUgPSBkYXRhLnR5cGUsCiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7CgogICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9NQVBfRkxBRykgewogICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkOwogICAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWQpIHsKICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEFaWV9GSUxURVJfRkxBRykgewogICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGJyZWFrIG91dGVyOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBNYXBDYWNoZSgpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IHt9OwogICAgfQogICAgZnVuY3Rpb24gbWFwRGVsZXRlKGtleSkgewogICAgICByZXR1cm4gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldOwogICAgfQogICAgZnVuY3Rpb24gbWFwR2V0KGtleSkgewogICAgICByZXR1cm4ga2V5ID09ICdfX3Byb3RvX18nID8gdW5kZWZpbmVkIDogdGhpcy5fX2RhdGFfX1trZXldOwogICAgfQogICAgZnVuY3Rpb24gbWFwSGFzKGtleSkgewogICAgICByZXR1cm4ga2V5ICE9ICdfX3Byb3RvX18nICYmIGhhc093blByb3BlcnR5LmNhbGwodGhpcy5fX2RhdGFfXywga2V5KTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcFNldChrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgIT0gJ19fcHJvdG9fXycpIHsKICAgICAgICB0aGlzLl9fZGF0YV9fW2tleV0gPSB2YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykgewogICAgICB2YXIgbGVuZ3RoID0gdmFsdWVzID8gdmFsdWVzLmxlbmd0aCA6IDA7CgogICAgICB0aGlzLmRhdGEgPSB7ICdoYXNoJzogbmF0aXZlQ3JlYXRlKG51bGwpLCAnc2V0JzogbmV3IFNldCB9OwogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICB0aGlzLnB1c2godmFsdWVzW2xlbmd0aF0pOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBjYWNoZUluZGV4T2YoY2FjaGUsIHZhbHVlKSB7CiAgICAgIHZhciBkYXRhID0gY2FjaGUuZGF0YSwKICAgICAgICAgIHJlc3VsdCA9ICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNPYmplY3QodmFsdWUpKSA/IGRhdGEuc2V0Lmhhcyh2YWx1ZSkgOiBkYXRhLmhhc2hbdmFsdWVdOwoKICAgICAgcmV0dXJuIHJlc3VsdCA/IDAgOiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIGNhY2hlUHVzaCh2YWx1ZSkgewogICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTsKICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc09iamVjdCh2YWx1ZSkpIHsKICAgICAgICBkYXRhLnNldC5hZGQodmFsdWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEuaGFzaFt2YWx1ZV0gPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheUNvbmNhdChhcnJheSwgb3RoZXIpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICBvdGhJbmRleCA9IC0xLAogICAgICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoLAogICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoICsgb3RoTGVuZ3RoKTsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4XTsKICAgICAgfQogICAgICB3aGlsZSAoKytvdGhJbmRleCA8IG90aExlbmd0aCkgewogICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IG90aGVyW290aEluZGV4XTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlDb3B5KHNvdXJjZSwgYXJyYXkpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwoKICAgICAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7CiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpID09PSBmYWxzZSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KICAgIGZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KICAgIGZ1bmN0aW9uIGFycmF5RXZlcnkoYXJyYXksIHByZWRpY2F0ZSkgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlFeHRyZW11bShhcnJheSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IsIGV4VmFsdWUpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICBjb21wdXRlZCA9IGV4VmFsdWUsCiAgICAgICAgICByZXN1bHQgPSBjb21wdXRlZDsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLAogICAgICAgICAgICBjdXJyZW50ID0gK2l0ZXJhdGVlKHZhbHVlKTsKCiAgICAgICAgaWYgKGNvbXBhcmF0b3IoY3VycmVudCwgY29tcHV0ZWQpKSB7CiAgICAgICAgICBjb21wdXRlZCA9IGN1cnJlbnQ7CiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICByZXNJbmRleCA9IC0xLAogICAgICAgICAgcmVzdWx0ID0gW107CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTsKICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7CiAgICAgICAgICByZXN1bHRbKytyZXNJbmRleF0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCwKICAgICAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0RnJvbUFycmF5KSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKICAgICAgaWYgKGluaXRGcm9tQXJyYXkgJiYgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4XTsKICAgICAgfQogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIGFjY3VtdWxhdG9yID0gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTsKICAgICAgfQogICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKICAgICAgaWYgKGluaXRGcm9tQXJyYXkgJiYgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07CiAgICAgIH0KICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlTdW0oYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICByZXN1bHQgPSAwOwoKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgcmVzdWx0ICs9ICtpdGVyYXRlZShhcnJheVtsZW5ndGhdKSB8fCAwOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBhc3NpZ25EZWZhdWx0cyhvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUpIHsKICAgICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSB1bmRlZmluZWQgPyBzb3VyY2VWYWx1ZSA6IG9iamVjdFZhbHVlOwogICAgfQogICAgZnVuY3Rpb24gYXNzaWduT3duRGVmYXVsdHMob2JqZWN0VmFsdWUsIHNvdXJjZVZhbHVlLCBrZXksIG9iamVjdCkgewogICAgICByZXR1cm4gKG9iamVjdFZhbHVlID09PSB1bmRlZmluZWQgfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKQogICAgICAgID8gc291cmNlVmFsdWUKICAgICAgICA6IG9iamVjdFZhbHVlOwogICAgfQogICAgZnVuY3Rpb24gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIHByb3BzID0ga2V5cyhzb3VyY2UpLAogICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLAogICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldLAogICAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyKHZhbHVlLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSk7CgogICAgICAgIGlmICgocmVzdWx0ID09PSByZXN1bHQgPyAocmVzdWx0ICE9PSB2YWx1ZSkgOiAodmFsdWUgPT09IHZhbHVlKSkgfHwKICAgICAgICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHsKICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gb2JqZWN0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkgewogICAgICByZXR1cm4gc291cmNlID09IG51bGwKICAgICAgICA/IG9iamVjdAogICAgICAgIDogYmFzZUNvcHkoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQXQoY29sbGVjdGlvbiwgcHJvcHMpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBpc05pbCA9IGNvbGxlY3Rpb24gPT0gbnVsbCwKICAgICAgICAgIGlzQXJyID0gIWlzTmlsICYmIGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pLAogICAgICAgICAgbGVuZ3RoID0gaXNBcnIgPyBjb2xsZWN0aW9uLmxlbmd0aCA6IDAsCiAgICAgICAgICBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aCwKICAgICAgICAgIHJlc3VsdCA9IEFycmF5KHByb3BzTGVuZ3RoKTsKCiAgICAgIHdoaWxlKCsraW5kZXggPCBwcm9wc0xlbmd0aCkgewogICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07CiAgICAgICAgaWYgKGlzQXJyKSB7CiAgICAgICAgICByZXN1bHRbaW5kZXhdID0gaXNJbmRleChrZXksIGxlbmd0aCkgPyBjb2xsZWN0aW9uW2tleV0gOiB1bmRlZmluZWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBpc05pbCA/IHVuZGVmaW5lZCA6IGNvbGxlY3Rpb25ba2V5XTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VDb3B5KHNvdXJjZSwgcHJvcHMsIG9iamVjdCkgewogICAgICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTsKCiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoOwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdOwogICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07CiAgICAgIH0KICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCkgewogICAgICB2YXIgdHlwZSA9IHR5cGVvZiBmdW5jOwogICAgICBpZiAodHlwZSA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgcmV0dXJuIHRoaXNBcmcgPT09IHVuZGVmaW5lZAogICAgICAgICAgPyBmdW5jCiAgICAgICAgICA6IGJpbmRDYWxsYmFjayhmdW5jLCB0aGlzQXJnLCBhcmdDb3VudCk7CiAgICAgIH0KICAgICAgaWYgKGZ1bmMgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBpZGVudGl0eTsKICAgICAgfQogICAgICBpZiAodHlwZSA9PSAnb2JqZWN0JykgewogICAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhmdW5jKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpc0FyZyA9PT0gdW5kZWZpbmVkCiAgICAgICAgPyBwcm9wZXJ0eShmdW5jKQogICAgICAgIDogYmFzZU1hdGNoZXNQcm9wZXJ0eShmdW5jLCB0aGlzQXJnKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgaXNEZWVwLCBjdXN0b21pemVyLCBrZXksIG9iamVjdCwgc3RhY2tBLCBzdGFja0IpIHsKICAgICAgdmFyIHJlc3VsdDsKICAgICAgaWYgKGN1c3RvbWl6ZXIpIHsKICAgICAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCkgOiBjdXN0b21pemVyKHZhbHVlKTsKICAgICAgfQogICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpOwogICAgICBpZiAoaXNBcnIpIHsKICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVBcnJheSh2YWx1ZSk7CiAgICAgICAgaWYgKCFpc0RlZXApIHsKICAgICAgICAgIHJldHVybiBhcnJheUNvcHkodmFsdWUsIHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0YWcgPSBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSwKICAgICAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWc7CgogICAgICAgIGlmICh0YWcgPT0gb2JqZWN0VGFnIHx8IHRhZyA9PSBhcmdzVGFnIHx8IChpc0Z1bmMgJiYgIW9iamVjdCkpIHsKICAgICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZU9iamVjdChpc0Z1bmMgPyB7fSA6IHZhbHVlKTsKICAgICAgICAgIGlmICghaXNEZWVwKSB7CiAgICAgICAgICAgIHJldHVybiBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY2xvbmVhYmxlVGFnc1t0YWddCiAgICAgICAgICAgID8gaW5pdENsb25lQnlUYWcodmFsdWUsIHRhZywgaXNEZWVwKQogICAgICAgICAgICA6IChvYmplY3QgPyB2YWx1ZSA6IHt9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhY2tBIHx8IChzdGFja0EgPSBbXSk7CiAgICAgIHN0YWNrQiB8fCAoc3RhY2tCID0gW10pOwoKICAgICAgdmFyIGxlbmd0aCA9IHN0YWNrQS5sZW5ndGg7CiAgICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICAgIGlmIChzdGFja0FbbGVuZ3RoXSA9PSB2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIHN0YWNrQltsZW5ndGhdOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGFja0EucHVzaCh2YWx1ZSk7CiAgICAgIHN0YWNrQi5wdXNoKHJlc3VsdCk7CiAgICAgIChpc0FyciA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7CiAgICAgICAgcmVzdWx0W2tleV0gPSBiYXNlQ2xvbmUoc3ViVmFsdWUsIGlzRGVlcCwgY3VzdG9taXplciwga2V5LCB2YWx1ZSwgc3RhY2tBLCBzdGFja0IpOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBvYmplY3QoKSB7fQogICAgICByZXR1cm4gZnVuY3Rpb24ocHJvdG90eXBlKSB7CiAgICAgICAgaWYgKGlzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90b3R5cGU7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDsKICAgICAgICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQgfHwge307CiAgICAgIH07CiAgICB9KCkpOwogICAgZnVuY3Rpb24gYmFzZURlbGF5KGZ1bmMsIHdhaXQsIGFyZ3MpIHsKICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsgfSwgd2FpdCk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDAsCiAgICAgICAgICByZXN1bHQgPSBbXTsKCiAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGluZGV4T2YgPSBnZXRJbmRleE9mKCksCiAgICAgICAgICBpc0NvbW1vbiA9IGluZGV4T2YgPT0gYmFzZUluZGV4T2YsCiAgICAgICAgICBjYWNoZSA9IChpc0NvbW1vbiAmJiB2YWx1ZXMubGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpID8gY3JlYXRlQ2FjaGUodmFsdWVzKSA6IG51bGwsCiAgICAgICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoOwoKICAgICAgaWYgKGNhY2hlKSB7CiAgICAgICAgaW5kZXhPZiA9IGNhY2hlSW5kZXhPZjsKICAgICAgICBpc0NvbW1vbiA9IGZhbHNlOwogICAgICAgIHZhbHVlcyA9IGNhY2hlOwogICAgICB9CiAgICAgIG91dGVyOgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTsKCiAgICAgICAgaWYgKGlzQ29tbW9uICYmIHZhbHVlID09PSB2YWx1ZSkgewogICAgICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoOwogICAgICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHsKICAgICAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IHZhbHVlKSB7CiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaW5kZXhPZih2YWx1ZXMsIHZhbHVlLCAwKSA8IDApIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pOwogICAgdmFyIGJhc2VFYWNoUmlnaHQgPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duUmlnaHQsIHRydWUpOwogICAgZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkgewogICAgICB2YXIgcmVzdWx0ID0gdHJ1ZTsKICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VFeHRyZW11bShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgY29tcGFyYXRvciwgZXhWYWx1ZSkgewogICAgICB2YXIgY29tcHV0ZWQgPSBleFZhbHVlLAogICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZWQ7CgogICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICB2YXIgY3VycmVudCA9ICtpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOwogICAgICAgIGlmIChjb21wYXJhdG9yKGN1cnJlbnQsIGNvbXB1dGVkKSB8fCAoY3VycmVudCA9PT0gZXhWYWx1ZSAmJiBjdXJyZW50ID09PSByZXN1bHQpKSB7CiAgICAgICAgICBjb21wdXRlZCA9IGN1cnJlbnQ7CiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZUZpbGwoYXJyYXksIHZhbHVlLCBzdGFydCwgZW5kKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgogICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogKCtzdGFydCB8fCAwKTsKICAgICAgaWYgKHN0YXJ0IDwgMCkgewogICAgICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7CiAgICAgIH0KICAgICAgZW5kID0gKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IGxlbmd0aCkgPyBsZW5ndGggOiAoK2VuZCB8fCAwKTsKICAgICAgaWYgKGVuZCA8IDApIHsKICAgICAgICBlbmQgKz0gbGVuZ3RoOwogICAgICB9CiAgICAgIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6IChlbmQgPj4+IDApOwogICAgICBzdGFydCA+Pj49IDA7CgogICAgICB3aGlsZSAoc3RhcnQgPCBsZW5ndGgpIHsKICAgICAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VGaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7CiAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pKSB7CiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VGaW5kKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZWFjaEZ1bmMsIHJldEtleSkgewogICAgICB2YXIgcmVzdWx0OwogICAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSkgewogICAgICAgICAgcmVzdWx0ID0gcmV0S2V5ID8ga2V5IDogdmFsdWU7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBpc0RlZXAsIGlzU3RyaWN0LCByZXN1bHQpIHsKICAgICAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7CgogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdOwogICAgICAgIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKSAmJgogICAgICAgICAgICAoaXNTdHJpY3QgfHwgaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkgewogICAgICAgICAgaWYgKGlzRGVlcCkgewogICAgICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgaXNEZWVwLCBpc1N0cmljdCwgcmVzdWx0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkgewogICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICB2YXIgYmFzZUZvciA9IGNyZWF0ZUJhc2VGb3IoKTsKICAgIHZhciBiYXNlRm9yUmlnaHQgPSBjcmVhdGVCYXNlRm9yKHRydWUpOwogICAgZnVuY3Rpb24gYmFzZUZvckluKG9iamVjdCwgaXRlcmF0ZWUpIHsKICAgICAgcmV0dXJuIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5c0luKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkgewogICAgICByZXR1cm4gYmFzZUZvcihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VGb3JPd25SaWdodChvYmplY3QsIGl0ZXJhdGVlKSB7CiAgICAgIHJldHVybiBiYXNlRm9yUmlnaHQob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlRnVuY3Rpb25zKG9iamVjdCwgcHJvcHMpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsCiAgICAgICAgICByZXNJbmRleCA9IC0xLAogICAgICAgICAgcmVzdWx0ID0gW107CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JqZWN0W2tleV0pKSB7CiAgICAgICAgICByZXN1bHRbKytyZXNJbmRleF0gPSBrZXk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCwgcGF0aEtleSkgewogICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHBhdGhLZXkgIT09IHVuZGVmaW5lZCAmJiBwYXRoS2V5IGluIHRvT2JqZWN0KG9iamVjdCkpIHsKICAgICAgICBwYXRoID0gW3BhdGhLZXldOwogICAgICB9CiAgICAgIHZhciBpbmRleCA9IDAsCiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDsKCiAgICAgIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkgewogICAgICAgIG9iamVjdCA9IG9iamVjdFtwYXRoW2luZGV4KytdXTsKICAgICAgfQogICAgICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7CiAgICAgIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3QodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkgewogICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyOwogICAgICB9CiAgICAgIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiYXNlSXNFcXVhbCwgY3VzdG9taXplciwgaXNMb29zZSwgc3RhY2tBLCBzdGFja0IpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGVxdWFsRnVuYywgY3VzdG9taXplciwgaXNMb29zZSwgc3RhY2tBLCBzdGFja0IpIHsKICAgICAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLAogICAgICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSwKICAgICAgICAgIG9ialRhZyA9IGFycmF5VGFnLAogICAgICAgICAgb3RoVGFnID0gYXJyYXlUYWc7CgogICAgICBpZiAoIW9iaklzQXJyKSB7CiAgICAgICAgb2JqVGFnID0gb2JqVG9TdHJpbmcuY2FsbChvYmplY3QpOwogICAgICAgIGlmIChvYmpUYWcgPT0gYXJnc1RhZykgewogICAgICAgICAgb2JqVGFnID0gb2JqZWN0VGFnOwogICAgICAgIH0gZWxzZSBpZiAob2JqVGFnICE9IG9iamVjdFRhZykgewogICAgICAgICAgb2JqSXNBcnIgPSBpc1R5cGVkQXJyYXkob2JqZWN0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFvdGhJc0FycikgewogICAgICAgIG90aFRhZyA9IG9ialRvU3RyaW5nLmNhbGwob3RoZXIpOwogICAgICAgIGlmIChvdGhUYWcgPT0gYXJnc1RhZykgewogICAgICAgICAgb3RoVGFnID0gb2JqZWN0VGFnOwogICAgICAgIH0gZWxzZSBpZiAob3RoVGFnICE9IG9iamVjdFRhZykgewogICAgICAgICAgb3RoSXNBcnIgPSBpc1R5cGVkQXJyYXkob3RoZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLAogICAgICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLAogICAgICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZzsKCiAgICAgIGlmIChpc1NhbWVUYWcgJiYgIShvYmpJc0FyciB8fCBvYmpJc09iaikpIHsKICAgICAgICByZXR1cm4gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcpOwogICAgICB9CiAgICAgIGlmICghaXNMb29zZSkgewogICAgICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksCiAgICAgICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpOwoKICAgICAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkgewogICAgICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCwgb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaXNTYW1lVGFnKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YWNrQSB8fCAoc3RhY2tBID0gW10pOwogICAgICBzdGFja0IgfHwgKHN0YWNrQiA9IFtdKTsKCiAgICAgIHZhciBsZW5ndGggPSBzdGFja0EubGVuZ3RoOwogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICBpZiAoc3RhY2tBW2xlbmd0aF0gPT0gb2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gc3RhY2tCW2xlbmd0aF0gPT0gb3RoZXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YWNrQS5wdXNoKG9iamVjdCk7CiAgICAgIHN0YWNrQi5wdXNoKG90aGVyKTsKCiAgICAgIHZhciByZXN1bHQgPSAob2JqSXNBcnIgPyBlcXVhbEFycmF5cyA6IGVxdWFsT2JqZWN0cykob2JqZWN0LCBvdGhlciwgZXF1YWxGdW5jLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQik7CgogICAgICBzdGFja0EucG9wKCk7CiAgICAgIHN0YWNrQi5wb3AoKTsKCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIG1hdGNoRGF0YSwgY3VzdG9taXplcikgewogICAgICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLAogICAgICAgICAgbGVuZ3RoID0gaW5kZXgsCiAgICAgICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjsKCiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgewogICAgICAgIHJldHVybiAhbGVuZ3RoOwogICAgICB9CiAgICAgIG9iamVjdCA9IHRvT2JqZWN0KG9iamVjdCk7CiAgICAgIHdoaWxlIChpbmRleC0tKSB7CiAgICAgICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdOwogICAgICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pCiAgICAgICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV0KICAgICAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpCiAgICAgICAgICAgICkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdOwogICAgICAgIHZhciBrZXkgPSBkYXRhWzBdLAogICAgICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLAogICAgICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07CgogICAgICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkgewogICAgICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSkgOiB1bmRlZmluZWQ7CiAgICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZCA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgY3VzdG9taXplciwgdHJ1ZSkgOiByZXN1bHQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTsKCiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKTsKICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHsKICAgICAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpOwogICAgICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkgewogICAgICAgIHZhciBrZXkgPSBtYXRjaERhdGFbMF1bMF0sCiAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hEYXRhWzBdWzFdOwoKICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG9iamVjdFtrZXldID09PSB2YWx1ZSAmJiAodmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIHRvT2JqZWN0KG9iamVjdCkpKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gYmFzZUlzTWF0Y2gob2JqZWN0LCBtYXRjaERhdGEpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkgewogICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHBhdGgpLAogICAgICAgICAgaXNDb21tb24gPSBpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpLAogICAgICAgICAgcGF0aEtleSA9IChwYXRoICsgJycpOwoKICAgICAgcGF0aCA9IHRvUGF0aChwYXRoKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewogICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB2YXIga2V5ID0gcGF0aEtleTsKICAgICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpOwogICAgICAgIGlmICgoaXNBcnIgfHwgIWlzQ29tbW9uKSAmJiAhKGtleSBpbiBvYmplY3QpKSB7CiAgICAgICAgICBvYmplY3QgPSBwYXRoLmxlbmd0aCA9PSAxID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpOwogICAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIGtleSA9IGxhc3QocGF0aCk7CiAgICAgICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlCiAgICAgICAgICA/IChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gb2JqZWN0KSkKICAgICAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9iamVjdFtrZXldLCB1bmRlZmluZWQsIHRydWUpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQikgewogICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIHZhciBpc1NyY0FyciA9IGlzQXJyYXlMaWtlKHNvdXJjZSkgJiYgKGlzQXJyYXkoc291cmNlKSB8fCBpc1R5cGVkQXJyYXkoc291cmNlKSksCiAgICAgICAgICBwcm9wcyA9IGlzU3JjQXJyID8gdW5kZWZpbmVkIDoga2V5cyhzb3VyY2UpOwoKICAgICAgYXJyYXlFYWNoKHByb3BzIHx8IHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkgewogICAgICAgIGlmIChwcm9wcykgewogICAgICAgICAga2V5ID0gc3JjVmFsdWU7CiAgICAgICAgICBzcmNWYWx1ZSA9IHNvdXJjZVtrZXldOwogICAgICAgIH0KICAgICAgICBpZiAoaXNPYmplY3RMaWtlKHNyY1ZhbHVlKSkgewogICAgICAgICAgc3RhY2tBIHx8IChzdGFja0EgPSBbXSk7CiAgICAgICAgICBzdGFja0IgfHwgKHN0YWNrQiA9IFtdKTsKICAgICAgICAgIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFja0EsIHN0YWNrQik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV0sCiAgICAgICAgICAgICAgcmVzdWx0ID0gY3VzdG9taXplciA/IGN1c3RvbWl6ZXIodmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKSA6IHVuZGVmaW5lZCwKICAgICAgICAgICAgICBpc0NvbW1vbiA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkOwoKICAgICAgICAgIGlmIChpc0NvbW1vbikgewogICAgICAgICAgICByZXN1bHQgPSBzcmNWYWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgocmVzdWx0ICE9PSB1bmRlZmluZWQgfHwgKGlzU3JjQXJyICYmICEoa2V5IGluIG9iamVjdCkpKSAmJgogICAgICAgICAgICAgIChpc0NvbW1vbiB8fCAocmVzdWx0ID09PSByZXN1bHQgPyAocmVzdWx0ICE9PSB2YWx1ZSkgOiAodmFsdWUgPT09IHZhbHVlKSkpKSB7CiAgICAgICAgICAgIG9iamVjdFtrZXldID0gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2tBLCBzdGFja0IpIHsKICAgICAgdmFyIGxlbmd0aCA9IHN0YWNrQS5sZW5ndGgsCiAgICAgICAgICBzcmNWYWx1ZSA9IHNvdXJjZVtrZXldOwoKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgaWYgKHN0YWNrQVtsZW5ndGhdID09IHNyY1ZhbHVlKSB7CiAgICAgICAgICBvYmplY3Rba2V5XSA9IHN0YWNrQltsZW5ndGhdOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XSwKICAgICAgICAgIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkgOiB1bmRlZmluZWQsCiAgICAgICAgICBpc0NvbW1vbiA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkOwoKICAgICAgaWYgKGlzQ29tbW9uKSB7CiAgICAgICAgcmVzdWx0ID0gc3JjVmFsdWU7CiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKHNyY1ZhbHVlKSAmJiAoaXNBcnJheShzcmNWYWx1ZSkgfHwgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKSkpIHsKICAgICAgICAgIHJlc3VsdCA9IGlzQXJyYXkodmFsdWUpCiAgICAgICAgICAgID8gdmFsdWUKICAgICAgICAgICAgOiAoaXNBcnJheUxpa2UodmFsdWUpID8gYXJyYXlDb3B5KHZhbHVlKSA6IFtdKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChzcmNWYWx1ZSkgfHwgaXNBcmd1bWVudHMoc3JjVmFsdWUpKSB7CiAgICAgICAgICByZXN1bHQgPSBpc0FyZ3VtZW50cyh2YWx1ZSkKICAgICAgICAgICAgPyB0b1BsYWluT2JqZWN0KHZhbHVlKQogICAgICAgICAgICA6IChpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge30pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIGlzQ29tbW9uID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YWNrQS5wdXNoKHNyY1ZhbHVlKTsKICAgICAgc3RhY2tCLnB1c2gocmVzdWx0KTsKCiAgICAgIGlmIChpc0NvbW1vbikgewogICAgICAgIG9iamVjdFtrZXldID0gbWVyZ2VGdW5jKHJlc3VsdCwgc3JjVmFsdWUsIGN1c3RvbWl6ZXIsIHN0YWNrQSwgc3RhY2tCKTsKICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09IHJlc3VsdCA/IChyZXN1bHQgIT09IHZhbHVlKSA6ICh2YWx1ZSA9PT0gdmFsdWUpKSB7CiAgICAgICAgb2JqZWN0W2tleV0gPSByZXN1bHQ7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7CiAgICAgIHZhciBwYXRoS2V5ID0gKHBhdGggKyAnJyk7CiAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHsKICAgICAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgsIHBhdGhLZXkpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVB1bGxBdChhcnJheSwgaW5kZXhlcykgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBpbmRleGVzLmxlbmd0aCA6IDA7CiAgICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICAgIHZhciBpbmRleCA9IGluZGV4ZXNbbGVuZ3RoXTsKICAgICAgICBpZiAoaW5kZXggIT0gcHJldmlvdXMgJiYgaXNJbmRleChpbmRleCkpIHsKICAgICAgICAgIHZhciBwcmV2aW91cyA9IGluZGV4OwogICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGluZGV4LCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVJhbmRvbShtaW4sIG1heCkgewogICAgICByZXR1cm4gbWluICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpOwogICAgfQogICAgZnVuY3Rpb24gYmFzZVJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQ29sbGVjdGlvbiwgZWFjaEZ1bmMpIHsKICAgICAgZWFjaEZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBpbml0RnJvbUNvbGxlY3Rpb24KICAgICAgICAgID8gKGluaXRGcm9tQ29sbGVjdGlvbiA9IGZhbHNlLCB2YWx1ZSkKICAgICAgICAgIDogaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICAgIH0pOwogICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICB9CiAgICB2YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkgewogICAgICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTsKICAgICAgcmV0dXJuIGZ1bmM7CiAgICB9OwogICAgZnVuY3Rpb24gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwoKICAgICAgc3RhcnQgPSBzdGFydCA9PSBudWxsID8gMCA6ICgrc3RhcnQgfHwgMCk7CiAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpOwogICAgICB9CiAgICAgIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogKCtlbmQgfHwgMCk7CiAgICAgIGlmIChlbmQgPCAwKSB7CiAgICAgICAgZW5kICs9IGxlbmd0aDsKICAgICAgfQogICAgICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7CiAgICAgIHN0YXJ0ID4+Pj0gMDsKCiAgICAgIHZhciByZXN1bHQgPSBBcnJheShsZW5ndGgpOwogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHJlc3VsdFtpbmRleF0gPSBhcnJheVtpbmRleCArIHN0YXJ0XTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7CiAgICAgIHZhciByZXN1bHQ7CgogICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTsKICAgICAgICByZXR1cm4gIXJlc3VsdDsKICAgICAgfSk7CiAgICAgIHJldHVybiAhIXJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7CgogICAgICBhcnJheS5zb3J0KGNvbXBhcmVyKTsKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVNvcnRCeU9yZGVyKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzKSB7CiAgICAgIHZhciBjYWxsYmFjayA9IGdldENhbGxiYWNrKCksCiAgICAgICAgICBpbmRleCA9IC0xOwoKICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkgeyByZXR1cm4gY2FsbGJhY2soaXRlcmF0ZWUpOyB9KTsKCiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGNyaXRlcmlhID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBmdW5jdGlvbihpdGVyYXRlZSkgeyByZXR1cm4gaXRlcmF0ZWUodmFsdWUpOyB9KTsKICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBjcml0ZXJpYSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTsKICAgICAgfSk7CgogICAgICByZXR1cm4gYmFzZVNvcnRCeShyZXN1bHQsIGZ1bmN0aW9uKG9iamVjdCwgb3RoZXIpIHsKICAgICAgICByZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycyk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gYmFzZVN1bShjb2xsZWN0aW9uLCBpdGVyYXRlZSkgewogICAgICB2YXIgcmVzdWx0ID0gMDsKICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgcmVzdWx0ICs9ICtpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHx8IDA7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgaW5kZXhPZiA9IGdldEluZGV4T2YoKSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZiwKICAgICAgICAgIGlzTGFyZ2UgPSBpc0NvbW1vbiAmJiBsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSwKICAgICAgICAgIHNlZW4gPSBpc0xhcmdlID8gY3JlYXRlQ2FjaGUoKSA6IG51bGwsCiAgICAgICAgICByZXN1bHQgPSBbXTsKCiAgICAgIGlmIChzZWVuKSB7CiAgICAgICAgaW5kZXhPZiA9IGNhY2hlSW5kZXhPZjsKICAgICAgICBpc0NvbW1vbiA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIGlzTGFyZ2UgPSBmYWxzZTsKICAgICAgICBzZWVuID0gaXRlcmF0ZWUgPyBbXSA6IHJlc3VsdDsKICAgICAgfQogICAgICBvdXRlcjoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sCiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSA6IHZhbHVlOwoKICAgICAgICBpZiAoaXNDb21tb24gJiYgdmFsdWUgPT09IHZhbHVlKSB7CiAgICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5sZW5ndGg7CiAgICAgICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHsKICAgICAgICAgICAgaWYgKHNlZW5bc2VlbkluZGV4XSA9PT0gY29tcHV0ZWQpIHsKICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGl0ZXJhdGVlKSB7CiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGluZGV4T2Yoc2VlbiwgY29tcHV0ZWQsIDApIDwgMCkgewogICAgICAgICAgaWYgKGl0ZXJhdGVlIHx8IGlzTGFyZ2UpIHsKICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCwKICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHJlc3VsdFtpbmRleF0gPSBvYmplY3RbcHJvcHNbaW5kZXhdXTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gYmFzZVdoaWxlKGFycmF5LCBwcmVkaWNhdGUsIGlzRHJvcCwgZnJvbVJpZ2h0KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xOwoKICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkgJiYgcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge30KICAgICAgcmV0dXJuIGlzRHJvcAogICAgICAgID8gYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gMCA6IGluZGV4KSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IGxlbmd0aCkpCiAgICAgICAgOiBiYXNlU2xpY2UoYXJyYXksIChmcm9tUmlnaHQgPyBpbmRleCArIDEgOiAwKSwgKGZyb21SaWdodCA/IGxlbmd0aCA6IGluZGV4KSk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7CiAgICAgIHZhciByZXN1bHQgPSB2YWx1ZTsKICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7CiAgICAgIH0KICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBhY3Rpb25zLmxlbmd0aDsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbnNbaW5kZXhdOwogICAgICAgIHJlc3VsdCA9IGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJheVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGJpbmFyeUluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkgewogICAgICB2YXIgbG93ID0gMCwKICAgICAgICAgIGhpZ2ggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IGxvdzsKCiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPT09IHZhbHVlICYmIGhpZ2ggPD0gSEFMRl9NQVhfQVJSQVlfTEVOR1RIKSB7CiAgICAgICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgICAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDEsCiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBhcnJheVttaWRdOwoKICAgICAgICAgIGlmICgocmV0SGlnaGVzdCA/IChjb21wdXRlZCA8PSB2YWx1ZSkgOiAoY29tcHV0ZWQgPCB2YWx1ZSkpICYmIGNvbXB1dGVkICE9PSBudWxsKSB7CiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoaWdoID0gbWlkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gaGlnaDsKICAgICAgfQogICAgICByZXR1cm4gYmluYXJ5SW5kZXhCeShhcnJheSwgdmFsdWUsIGlkZW50aXR5LCByZXRIaWdoZXN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGJpbmFyeUluZGV4QnkoYXJyYXksIHZhbHVlLCBpdGVyYXRlZSwgcmV0SGlnaGVzdCkgewogICAgICB2YWx1ZSA9IGl0ZXJhdGVlKHZhbHVlKTsKCiAgICAgIHZhciBsb3cgPSAwLAogICAgICAgICAgaGlnaCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCwKICAgICAgICAgIHZhbElzTmFOID0gdmFsdWUgIT09IHZhbHVlLAogICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsCiAgICAgICAgICB2YWxJc1VuZGVmID0gdmFsdWUgPT09IHVuZGVmaW5lZDsKCiAgICAgIHdoaWxlIChsb3cgPCBoaWdoKSB7CiAgICAgICAgdmFyIG1pZCA9IG5hdGl2ZUZsb29yKChsb3cgKyBoaWdoKSAvIDIpLAogICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLAogICAgICAgICAgICBpc0RlZiA9IGNvbXB1dGVkICE9PSB1bmRlZmluZWQsCiAgICAgICAgICAgIGlzUmVmbGV4aXZlID0gY29tcHV0ZWQgPT09IGNvbXB1dGVkOwoKICAgICAgICBpZiAodmFsSXNOYU4pIHsKICAgICAgICAgIHZhciBzZXRMb3cgPSBpc1JlZmxleGl2ZSB8fCByZXRIaWdoZXN0OwogICAgICAgIH0gZWxzZSBpZiAodmFsSXNOdWxsKSB7CiAgICAgICAgICBzZXRMb3cgPSBpc1JlZmxleGl2ZSAmJiBpc0RlZiAmJiAocmV0SGlnaGVzdCB8fCBjb21wdXRlZCAhPSBudWxsKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbElzVW5kZWYpIHsKICAgICAgICAgIHNldExvdyA9IGlzUmVmbGV4aXZlICYmIChyZXRIaWdoZXN0IHx8IGlzRGVmKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbXB1dGVkID09IG51bGwpIHsKICAgICAgICAgIHNldExvdyA9IGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNldExvdykgewogICAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGlnaCA9IG1pZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5hdGl2ZU1pbihoaWdoLCBNQVhfQVJSQVlfSU5ERVgpOwogICAgfQogICAgZnVuY3Rpb24gYmluZENhbGxiYWNrKGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KSB7CiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aXR5OwogICAgICB9CiAgICAgIGlmICh0aGlzQXJnID09PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm4gZnVuYzsKICAgICAgfQogICAgICBzd2l0Y2ggKGFyZ0NvdW50KSB7CiAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgdmFsdWUpOwogICAgICAgIH07CiAgICAgICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7CiAgICAgICAgfTsKICAgICAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhY2N1bXVsYXRvciwgdmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pOwogICAgICAgIH07CiAgICAgICAgY2FzZSA1OiByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG90aGVyLCBrZXksIG9iamVjdCwgc291cmNlKSB7CiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIHZhbHVlLCBvdGhlciwga2V5LCBvYmplY3QsIHNvdXJjZSk7CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1ZmZlcikgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5QnVmZmVyKGJ1ZmZlci5ieXRlTGVuZ3RoKSwKICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShyZXN1bHQpOwoKICAgICAgdmlldy5zZXQobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycykgewogICAgICB2YXIgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLAogICAgICAgICAgYXJnc0luZGV4ID0gLTEsCiAgICAgICAgICBhcmdzTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksCiAgICAgICAgICBsZWZ0SW5kZXggPSAtMSwKICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsCiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgYXJnc0xlbmd0aCk7CgogICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdOwogICAgICB9CiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHsKICAgICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTsKICAgICAgfQogICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7CiAgICAgICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzKSB7CiAgICAgIHZhciBob2xkZXJzSW5kZXggPSAtMSwKICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCwKICAgICAgICAgIGFyZ3NJbmRleCA9IC0xLAogICAgICAgICAgYXJnc0xlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLAogICAgICAgICAgcmlnaHRJbmRleCA9IC0xLAogICAgICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsCiAgICAgICAgICByZXN1bHQgPSBBcnJheShhcmdzTGVuZ3RoICsgcmlnaHRMZW5ndGgpOwoKICAgICAgd2hpbGUgKCsrYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkgewogICAgICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdOwogICAgICB9CiAgICAgIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7CiAgICAgIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkgewogICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdOwogICAgICB9CiAgICAgIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHsKICAgICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVBZ2dyZWdhdG9yKHNldHRlciwgaW5pdGlhbGl6ZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9OwogICAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpOwoKICAgICAgICBpZiAoaXNBcnJheShjb2xsZWN0aW9uKSkgewogICAgICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICAgICAgbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7CgogICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgICAgdmFyIHZhbHVlID0gY29sbGVjdGlvbltpbmRleF07CiAgICAgICAgICAgIHNldHRlcihyZXN1bHQsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pLCBjb2xsZWN0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikgewogICAgICAgICAgICBzZXR0ZXIocmVzdWx0LCB2YWx1ZSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgY29sbGVjdGlvbiksIGNvbGxlY3Rpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikgewogICAgICByZXR1cm4gcmVzdFBhcmFtKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykgewogICAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aCwKICAgICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzW2xlbmd0aCAtIDJdIDogdW5kZWZpbmVkLAogICAgICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkLAogICAgICAgICAgICB0aGlzQXJnID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7CgogICAgICAgIGlmICh0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgICBjdXN0b21pemVyID0gYmluZENhbGxiYWNrKGN1c3RvbWl6ZXIsIHRoaXNBcmcsIDUpOwogICAgICAgICAgbGVuZ3RoIC09IDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgdGhpc0FyZyA9PSAnZnVuY3Rpb24nID8gdGhpc0FyZyA6IHVuZGVmaW5lZDsKICAgICAgICAgIGxlbmd0aCAtPSAoY3VzdG9taXplciA/IDEgOiAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHNvdXJjZXNbMF0sIHNvdXJjZXNbMV0sIGd1YXJkKSkgewogICAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyOwogICAgICAgICAgbGVuZ3RoID0gMTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTsKICAgICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7CiAgICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24gPyBnZXRMZW5ndGgoY29sbGVjdGlvbikgOiAwOwogICAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkgewogICAgICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsCiAgICAgICAgICAgIGl0ZXJhYmxlID0gdG9PYmplY3QoY29sbGVjdGlvbik7CgogICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7CiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRm9yKGZyb21SaWdodCkgewogICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHsKICAgICAgICB2YXIgaXRlcmFibGUgPSB0b09iamVjdChvYmplY3QpLAogICAgICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksCiAgICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCwKICAgICAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMTsKCiAgICAgICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHsKICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07CiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlQmluZFdyYXBwZXIoZnVuYywgdGhpc0FyZykgewogICAgICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3JXcmFwcGVyKGZ1bmMpOwoKICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHsKICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jOwogICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzQXJnLCBhcmd1bWVudHMpOwogICAgICB9CiAgICAgIHJldHVybiB3cmFwcGVyOwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlQ2FjaGUodmFsdWVzKSB7CiAgICAgIHJldHVybiAobmF0aXZlQ3JlYXRlICYmIFNldCkgPyBuZXcgU2V0Q2FjaGUodmFsdWVzKSA6IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHsKICAgICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgICAgYXJyYXkgPSB3b3JkcyhkZWJ1cnIoc3RyaW5nKSksCiAgICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCwKICAgICAgICAgICAgcmVzdWx0ID0gJyc7CgogICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhyZXN1bHQsIGFycmF5W2luZGV4XSwgaW5kZXgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlQ3RvcldyYXBwZXIoQ3RvcikgewogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkgewogICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7CiAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTsKICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pOwogICAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTsKICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pOwogICAgICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7CiAgICAgICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTsKICAgICAgICB9CiAgICAgICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksCiAgICAgICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpOwogICAgICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVDdXJyeShmbGFnKSB7CiAgICAgIGZ1bmN0aW9uIGN1cnJ5RnVuYyhmdW5jLCBhcml0eSwgZ3VhcmQpIHsKICAgICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoZnVuYywgYXJpdHksIGd1YXJkKSkgewogICAgICAgICAgYXJpdHkgPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwcGVyKGZ1bmMsIGZsYWcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7CiAgICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gY3VycnlGdW5jLnBsYWNlaG9sZGVyOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGN1cnJ5RnVuYzsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRzKGFzc2lnbmVyLCBjdXN0b21pemVyKSB7CiAgICAgIHJldHVybiByZXN0UGFyYW0oZnVuY3Rpb24oYXJncykgewogICAgICAgIHZhciBvYmplY3QgPSBhcmdzWzBdOwogICAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICB9CiAgICAgICAgYXJncy5wdXNoKGN1c3RvbWl6ZXIpOwogICAgICAgIHJldHVybiBhc3NpZ25lci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZUV4dHJlbXVtKGNvbXBhcmF0b3IsIGV4VmFsdWUpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSB7CiAgICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpKSB7CiAgICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDsKICAgICAgICB9CiAgICAgICAgaXRlcmF0ZWUgPSBnZXRDYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMyk7CiAgICAgICAgaWYgKGl0ZXJhdGVlLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBjb2xsZWN0aW9uID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGNvbGxlY3Rpb24gOiB0b0l0ZXJhYmxlKGNvbGxlY3Rpb24pOwogICAgICAgICAgdmFyIHJlc3VsdCA9IGFycmF5RXh0cmVtdW0oY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IsIGV4VmFsdWUpOwogICAgICAgICAgaWYgKCEoY29sbGVjdGlvbi5sZW5ndGggJiYgcmVzdWx0ID09PSBleFZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFzZUV4dHJlbXVtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBjb21wYXJhdG9yLCBleFZhbHVlKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbmQoZWFjaEZ1bmMsIGZyb21SaWdodCkgewogICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTsKICAgICAgICBpZiAoaXNBcnJheShjb2xsZWN0aW9uKSkgewogICAgICAgICAgdmFyIGluZGV4ID0gYmFzZUZpbmRJbmRleChjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGZyb21SaWdodCk7CiAgICAgICAgICByZXR1cm4gaW5kZXggPiAtMSA/IGNvbGxlY3Rpb25baW5kZXhdIDogdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYmFzZUZpbmQoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBlYWNoRnVuYyk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kSW5kZXgoZnJvbVJpZ2h0KSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkgewogICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpOwogICAgICAgIHJldHVybiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21SaWdodCk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVGaW5kS2V5KG9iamVjdEZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTsKICAgICAgICByZXR1cm4gYmFzZUZpbmQob2JqZWN0LCBwcmVkaWNhdGUsIG9iamVjdEZ1bmMsIHRydWUpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlRmxvdyhmcm9tUmlnaHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciB3cmFwcGVyLAogICAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLAogICAgICAgICAgICBsZWZ0SW5kZXggPSAwLAogICAgICAgICAgICBmdW5jcyA9IEFycmF5KGxlbmd0aCk7CgogICAgICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7CiAgICAgICAgICB2YXIgZnVuYyA9IGZ1bmNzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1tpbmRleF07CiAgICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIXdyYXBwZXIgJiYgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUudGhydSAmJiBnZXRGdW5jTmFtZShmdW5jKSA9PSAnd3JhcHBlcicpIHsKICAgICAgICAgICAgd3JhcHBlciA9IG5ldyBMb2Rhc2hXcmFwcGVyKFtdLCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaW5kZXggPSB3cmFwcGVyID8gLTEgOiBsZW5ndGg7CiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgIGZ1bmMgPSBmdW5jc1tpbmRleF07CgogICAgICAgICAgdmFyIGZ1bmNOYW1lID0gZ2V0RnVuY05hbWUoZnVuYyksCiAgICAgICAgICAgICAgZGF0YSA9IGZ1bmNOYW1lID09ICd3cmFwcGVyJyA/IGdldERhdGEoZnVuYykgOiB1bmRlZmluZWQ7CgogICAgICAgICAgaWYgKGRhdGEgJiYgaXNMYXppYWJsZShkYXRhWzBdKSAmJiBkYXRhWzFdID09IChBUllfRkxBRyB8IENVUlJZX0ZMQUcgfCBQQVJUSUFMX0ZMQUcgfCBSRUFSR19GTEFHKSAmJiAhZGF0YVs0XS5sZW5ndGggJiYgZGF0YVs5XSA9PSAxKSB7CiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLCBkYXRhWzNdKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHdyYXBwZXIgPSAoZnVuYy5sZW5ndGggPT0gMSAmJiBpc0xhemlhYmxlKGZ1bmMpKSA/IHdyYXBwZXJbZnVuY05hbWVdKCkgOiB3cmFwcGVyLnRocnUoZnVuYyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLAogICAgICAgICAgICAgIHZhbHVlID0gYXJnc1swXTsKCiAgICAgICAgICBpZiAod3JhcHBlciAmJiBhcmdzLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+PSBMQVJHRV9BUlJBWV9TSVpFKSB7CiAgICAgICAgICAgIHJldHVybiB3cmFwcGVyLnBsYW50KHZhbHVlKS52YWx1ZSgpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIGluZGV4ID0gMCwKICAgICAgICAgICAgICByZXN1bHQgPSBsZW5ndGggPyBmdW5jc1tpbmRleF0uYXBwbHkodGhpcywgYXJncykgOiB2YWx1ZTsKCiAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgICAgICByZXN1bHQgPSBmdW5jc1tpbmRleF0uY2FsbCh0aGlzLCByZXN1bHQpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlRm9yRWFjaChhcnJheUZ1bmMsIGVhY2hGdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSwgdGhpc0FyZykgewogICAgICAgIHJldHVybiAodHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgJiYgdGhpc0FyZyA9PT0gdW5kZWZpbmVkICYmIGlzQXJyYXkoY29sbGVjdGlvbikpCiAgICAgICAgICA/IGFycmF5RnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSkKICAgICAgICAgIDogZWFjaEZ1bmMoY29sbGVjdGlvbiwgYmluZENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKSk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVGb3JJbihvYmplY3RGdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCB0aGlzQXJnKSB7CiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRlZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0RnVuYyhvYmplY3QsIGl0ZXJhdGVlLCBrZXlzSW4pOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlRm9yT3duKG9iamVjdEZ1bmMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdGVlICE9ICdmdW5jdGlvbicgfHwgdGhpc0FyZyAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBpdGVyYXRlZSA9IGJpbmRDYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBvYmplY3RGdW5jKG9iamVjdCwgaXRlcmF0ZWUpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0TWFwcGVyKGlzTWFwS2V5cykgewogICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwgdGhpc0FyZykgewogICAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTsKCiAgICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkgewogICAgICAgICAgdmFyIG1hcHBlZCA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCk7CiAgICAgICAgICBrZXkgPSBpc01hcEtleXMgPyBtYXBwZWQgOiBrZXk7CiAgICAgICAgICB2YWx1ZSA9IGlzTWFwS2V5cyA/IHZhbHVlIDogbWFwcGVkOwogICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlUGFkRGlyKGZyb21SaWdodCkgewogICAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7CiAgICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7CiAgICAgICAgcmV0dXJuIChmcm9tUmlnaHQgPyBzdHJpbmcgOiAnJykgKyBjcmVhdGVQYWRkaW5nKHN0cmluZywgbGVuZ3RoLCBjaGFycykgKyAoZnJvbVJpZ2h0ID8gJycgOiBzdHJpbmcpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChmbGFnKSB7CiAgICAgIHZhciBwYXJ0aWFsRnVuYyA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykgewogICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIHBhcnRpYWxGdW5jLnBsYWNlaG9sZGVyKTsKICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihmdW5jLCBmbGFnLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBwYXJ0aWFsRnVuYzsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZVJlZHVjZShhcnJheUZ1bmMsIGVhY2hGdW5jKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIHRoaXNBcmcpIHsKICAgICAgICB2YXIgaW5pdEZyb21BcnJheSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzOwogICAgICAgIHJldHVybiAodHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgJiYgdGhpc0FyZyA9PT0gdW5kZWZpbmVkICYmIGlzQXJyYXkoY29sbGVjdGlvbikpCiAgICAgICAgICA/IGFycmF5RnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpCiAgICAgICAgICA6IGJhc2VSZWR1Y2UoY29sbGVjdGlvbiwgZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEZyb21BcnJheSwgZWFjaEZ1bmMpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlSHlicmlkV3JhcHBlcihmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHsKICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIEFSWV9GTEFHLAogICAgICAgICAgaXNCaW5kID0gYml0bWFzayAmIEJJTkRfRkxBRywKICAgICAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBCSU5EX0tFWV9GTEFHLAogICAgICAgICAgaXNDdXJyeSA9IGJpdG1hc2sgJiBDVVJSWV9GTEFHLAogICAgICAgICAgaXNDdXJyeUJvdW5kID0gYml0bWFzayAmIENVUlJZX0JPVU5EX0ZMQUcsCiAgICAgICAgICBpc0N1cnJ5UmlnaHQgPSBiaXRtYXNrICYgQ1VSUllfUklHSFRfRkxBRywKICAgICAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yV3JhcHBlcihmdW5jKTsKCiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7CiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoLAogICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKTsKCiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHsKICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnRpYWxzKSB7CiAgICAgICAgICBhcmdzID0gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMpOwogICAgICAgIH0KICAgICAgICBpZiAocGFydGlhbHNSaWdodCkgewogICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0KTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzQ3VycnkgfHwgaXNDdXJyeVJpZ2h0KSB7CiAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSB3cmFwcGVyLnBsYWNlaG9sZGVyLAogICAgICAgICAgICAgIGFyZ3NIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpOwoKICAgICAgICAgIGxlbmd0aCAtPSBhcmdzSG9sZGVycy5sZW5ndGg7CiAgICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHsKICAgICAgICAgICAgdmFyIG5ld0FyZ1BvcyA9IGFyZ1BvcyA/IGFycmF5Q29weShhcmdQb3MpIDogdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgbmV3QXJpdHkgPSBuYXRpdmVNYXgoYXJpdHkgLSBsZW5ndGgsIDApLAogICAgICAgICAgICAgICAgbmV3c0hvbGRlcnMgPSBpc0N1cnJ5ID8gYXJnc0hvbGRlcnMgOiB1bmRlZmluZWQsCiAgICAgICAgICAgICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogYXJnc0hvbGRlcnMsCiAgICAgICAgICAgICAgICBuZXdQYXJ0aWFscyA9IGlzQ3VycnkgPyBhcmdzIDogdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBhcmdzOwoKICAgICAgICAgICAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFBBUlRJQUxfRkxBRyA6IFBBUlRJQUxfUklHSFRfRkxBRyk7CiAgICAgICAgICAgIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gUEFSVElBTF9SSUdIVF9GTEFHIDogUEFSVElBTF9GTEFHKTsKCiAgICAgICAgICAgIGlmICghaXNDdXJyeUJvdW5kKSB7CiAgICAgICAgICAgICAgYml0bWFzayAmPSB+KEJJTkRfRkxBRyB8IEJJTkRfS0VZX0ZMQUcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBuZXdEYXRhID0gW2Z1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdzSG9sZGVycywgbmV3UGFydGlhbHNSaWdodCwgbmV3SG9sZGVyc1JpZ2h0LCBuZXdBcmdQb3MsIGFyeSwgbmV3QXJpdHldLAogICAgICAgICAgICAgICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkV3JhcHBlci5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpOwoKICAgICAgICAgICAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHsKICAgICAgICAgICAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciB0aGlzQmluZGluZyA9IGlzQmluZCA/IHRoaXNBcmcgOiB0aGlzLAogICAgICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYzsKCiAgICAgICAgaWYgKGFyZ1BvcykgewogICAgICAgICAgYXJncyA9IHJlb3JkZXIoYXJncywgYXJnUG9zKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGFyZ3MubGVuZ3RoKSB7CiAgICAgICAgICBhcmdzLmxlbmd0aCA9IGFyeTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgewogICAgICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3JXcmFwcGVyKGZ1bmMpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpOwogICAgICB9CiAgICAgIHJldHVybiB3cmFwcGVyOwogICAgfQogICAgZnVuY3Rpb24gY3JlYXRlUGFkZGluZyhzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHsKICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0cmluZy5sZW5ndGg7CiAgICAgIGxlbmd0aCA9ICtsZW5ndGg7CgogICAgICBpZiAoc3RyTGVuZ3RoID49IGxlbmd0aCB8fCAhbmF0aXZlSXNGaW5pdGUobGVuZ3RoKSkgewogICAgICAgIHJldHVybiAnJzsKICAgICAgfQogICAgICB2YXIgcGFkTGVuZ3RoID0gbGVuZ3RoIC0gc3RyTGVuZ3RoOwogICAgICBjaGFycyA9IGNoYXJzID09IG51bGwgPyAnICcgOiAoY2hhcnMgKyAnJyk7CiAgICAgIHJldHVybiByZXBlYXQoY2hhcnMsIG5hdGl2ZUNlaWwocGFkTGVuZ3RoIC8gY2hhcnMubGVuZ3RoKSkuc2xpY2UoMCwgcGFkTGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWxXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7CiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgQklORF9GTEFHLAogICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3JXcmFwcGVyKGZ1bmMpOwoKICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHsKICAgICAgICB2YXIgYXJnc0luZGV4ID0gLTEsCiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLAogICAgICAgICAgICBsZWZ0SW5kZXggPSAtMSwKICAgICAgICAgICAgbGVmdExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCwKICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKTsKCiAgICAgICAgd2hpbGUgKCsrbGVmdEluZGV4IDwgbGVmdExlbmd0aCkgewogICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGgtLSkgewogICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdOwogICAgICAgIH0KICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jOwogICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJncyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7CiAgICAgIHZhciBmdW5jID0gTWF0aFttZXRob2ROYW1lXTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKG51bWJlciwgcHJlY2lzaW9uKSB7CiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAwIDogKCtwcmVjaXNpb24gfHwgMCk7CiAgICAgICAgaWYgKHByZWNpc2lvbikgewogICAgICAgICAgcHJlY2lzaW9uID0gcG93KDEwLCBwcmVjaXNpb24pOwogICAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ1bmMobnVtYmVyKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGNyZWF0ZVNvcnRlZEluZGV4KHJldEhpZ2hlc3QpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgICB2YXIgY2FsbGJhY2sgPSBnZXRDYWxsYmFjayhpdGVyYXRlZSk7CiAgICAgICAgcmV0dXJuIChpdGVyYXRlZSA9PSBudWxsICYmIGNhbGxiYWNrID09PSBiYXNlQ2FsbGJhY2spCiAgICAgICAgICA/IGJpbmFyeUluZGV4KGFycmF5LCB2YWx1ZSwgcmV0SGlnaGVzdCkKICAgICAgICAgIDogYmluYXJ5SW5kZXhCeShhcnJheSwgdmFsdWUsIGNhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAxKSwgcmV0SGlnaGVzdCk7CiAgICAgIH07CiAgICB9CiAgICBmdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHsKICAgICAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBCSU5EX0tFWV9GTEFHOwogICAgICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpOwogICAgICB9CiAgICAgIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7CiAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgYml0bWFzayAmPSB+KFBBUlRJQUxfRkxBRyB8IFBBUlRJQUxfUklHSFRfRkxBRyk7CiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIGxlbmd0aCAtPSAoaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMCk7CiAgICAgIGlmIChiaXRtYXNrICYgUEFSVElBTF9SSUdIVF9GTEFHKSB7CiAgICAgICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscywKICAgICAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVyczsKCiAgICAgICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIHZhciBkYXRhID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogZ2V0RGF0YShmdW5jKSwKICAgICAgICAgIG5ld0RhdGEgPSBbZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XTsKCiAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgbWVyZ2VEYXRhKG5ld0RhdGEsIGRhdGEpOwogICAgICAgIGJpdG1hc2sgPSBuZXdEYXRhWzFdOwogICAgICAgIGFyaXR5ID0gbmV3RGF0YVs5XTsKICAgICAgfQogICAgICBuZXdEYXRhWzldID0gYXJpdHkgPT0gbnVsbAogICAgICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aCkKICAgICAgICA6IChuYXRpdmVNYXgoYXJpdHkgLSBsZW5ndGgsIDApIHx8IDApOwoKICAgICAgaWYgKGJpdG1hc2sgPT0gQklORF9GTEFHKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmRXcmFwcGVyKG5ld0RhdGFbMF0sIG5ld0RhdGFbMl0pOwogICAgICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFBBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChCSU5EX0ZMQUcgfCBQQVJUSUFMX0ZMQUcpKSAmJiAhbmV3RGF0YVs0XS5sZW5ndGgpIHsKICAgICAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsV3JhcHBlci5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZFdyYXBwZXIuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTsKICAgICAgfQogICAgICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTsKICAgICAgcmV0dXJuIHNldHRlcihyZXN1bHQsIG5ld0RhdGEpOwogICAgfQogICAgZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBlcXVhbEZ1bmMsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoOwoKICAgICAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc0xvb3NlICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHsKICAgICAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sCiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdLAogICAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihpc0xvb3NlID8gb3RoVmFsdWUgOiBhcnJWYWx1ZSwgaXNMb29zZSA/IGFyclZhbHVlIDogb3RoVmFsdWUsIGluZGV4KSA6IHVuZGVmaW5lZDsKCiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoaXNMb29zZSkgewogICAgICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKTsKICAgICAgICAgICAgICB9KSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBjdXN0b21pemVyLCBpc0xvb3NlLCBzdGFja0EsIHN0YWNrQikpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcpIHsKICAgICAgc3dpdGNoICh0YWcpIHsKICAgICAgICBjYXNlIGJvb2xUYWc6CiAgICAgICAgY2FzZSBkYXRlVGFnOgogICAgICAgICAgcmV0dXJuICtvYmplY3QgPT0gK290aGVyOwoKICAgICAgICBjYXNlIGVycm9yVGFnOgogICAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTsKCiAgICAgICAgY2FzZSBudW1iZXJUYWc6CiAgICAgICAgICByZXR1cm4gKG9iamVjdCAhPSArb2JqZWN0KQogICAgICAgICAgICA/IG90aGVyICE9ICtvdGhlcgogICAgICAgICAgICA6IG9iamVjdCA9PSArb3RoZXI7CgogICAgICAgIGNhc2UgcmVnZXhwVGFnOgogICAgICAgIGNhc2Ugc3RyaW5nVGFnOgogICAgICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGVxdWFsRnVuYywgY3VzdG9taXplciwgaXNMb29zZSwgc3RhY2tBLCBzdGFja0IpIHsKICAgICAgdmFyIG9ialByb3BzID0ga2V5cyhvYmplY3QpLAogICAgICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLAogICAgICAgICAgb3RoUHJvcHMgPSBrZXlzKG90aGVyKSwKICAgICAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDsKCiAgICAgIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc0xvb3NlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBpbmRleCA9IG9iakxlbmd0aDsKICAgICAgd2hpbGUgKGluZGV4LS0pIHsKICAgICAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdOwogICAgICAgIGlmICghKGlzTG9vc2UgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgc2tpcEN0b3IgPSBpc0xvb3NlOwogICAgICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkgewogICAgICAgIGtleSA9IG9ialByb3BzW2luZGV4XTsKICAgICAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSwKICAgICAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldLAogICAgICAgICAgICByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihpc0xvb3NlID8gb3RoVmFsdWUgOiBvYmpWYWx1ZSwgaXNMb29zZT8gb2JqVmFsdWUgOiBvdGhWYWx1ZSwga2V5KSA6IHVuZGVmaW5lZDsKICAgICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZCA/IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGN1c3RvbWl6ZXIsIGlzTG9vc2UsIHN0YWNrQSwgc3RhY2tCKSA6IHJlc3VsdCkpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpOwogICAgICB9CiAgICAgIGlmICghc2tpcEN0b3IpIHsKICAgICAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvciwKICAgICAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yOwogICAgICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiYKICAgICAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmCiAgICAgICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJgogICAgICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gZ2V0Q2FsbGJhY2soZnVuYywgdGhpc0FyZywgYXJnQ291bnQpIHsKICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5jYWxsYmFjayB8fCBjYWxsYmFjazsKICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBjYWxsYmFjayA/IGJhc2VDYWxsYmFjayA6IHJlc3VsdDsKICAgICAgcmV0dXJuIGFyZ0NvdW50ID8gcmVzdWx0KGZ1bmMsIHRoaXNBcmcsIGFyZ0NvdW50KSA6IHJlc3VsdDsKICAgIH0KICAgIHZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykgewogICAgICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7CiAgICB9OwogICAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykgewogICAgICB2YXIgcmVzdWx0ID0gZnVuYy5uYW1lLAogICAgICAgICAgYXJyYXkgPSByZWFsTmFtZXNbcmVzdWx0XSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKCiAgICAgIHdoaWxlIChsZW5ndGgtLSkgewogICAgICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSwKICAgICAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jOwogICAgICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykgewogICAgICAgICAgcmV0dXJuIGRhdGEubmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdldEluZGV4T2YoY29sbGVjdGlvbiwgdGFyZ2V0LCBmcm9tSW5kZXgpIHsKICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaC5pbmRleE9mIHx8IGluZGV4T2Y7CiAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gaW5kZXhPZiA/IGJhc2VJbmRleE9mIDogcmVzdWx0OwogICAgICByZXR1cm4gY29sbGVjdGlvbiA/IHJlc3VsdChjb2xsZWN0aW9uLCB0YXJnZXQsIGZyb21JbmRleCkgOiByZXN1bHQ7CiAgICB9CiAgICB2YXIgZ2V0TGVuZ3RoID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTsKICAgIGZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9IHBhaXJzKG9iamVjdCksCiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoOwoKICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAgICAgICAgcmVzdWx0W2xlbmd0aF1bMl0gPSBpc1N0cmljdENvbXBhcmFibGUocmVzdWx0W2xlbmd0aF1bMV0pOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHsKICAgICAgdmFyIHZhbHVlID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTsKICAgICAgcmV0dXJuIGlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkOwogICAgfQogICAgZnVuY3Rpb24gZ2V0VmlldyhzdGFydCwgZW5kLCB0cmFuc2Zvcm1zKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sCiAgICAgICAgICAgIHNpemUgPSBkYXRhLnNpemU7CgogICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7CiAgICAgICAgICBjYXNlICdkcm9wJzogICAgICBzdGFydCArPSBzaXplOyBicmVhazsKICAgICAgICAgIGNhc2UgJ2Ryb3BSaWdodCc6IGVuZCAtPSBzaXplOyBicmVhazsKICAgICAgICAgIGNhc2UgJ3Rha2UnOiAgICAgIGVuZCA9IG5hdGl2ZU1pbihlbmQsIHN0YXJ0ICsgc2l6ZSk7IGJyZWFrOwogICAgICAgICAgY2FzZSAndGFrZVJpZ2h0Jzogc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQsIGVuZCAtIHNpemUpOyBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHsgJ3N0YXJ0Jzogc3RhcnQsICdlbmQnOiBlbmQgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTsKICAgICAgaWYgKGxlbmd0aCAmJiB0eXBlb2YgYXJyYXlbMF0gPT0gJ3N0cmluZycgJiYgaGFzT3duUHJvcGVydHkuY2FsbChhcnJheSwgJ2luZGV4JykpIHsKICAgICAgICByZXN1bHQuaW5kZXggPSBhcnJheS5pbmRleDsKICAgICAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkgewogICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjsKICAgICAgaWYgKCEodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvcikpIHsKICAgICAgICBDdG9yID0gT2JqZWN0OwogICAgICB9CiAgICAgIHJldHVybiBuZXcgQ3RvcjsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZUJ5VGFnKG9iamVjdCwgdGFnLCBpc0RlZXApIHsKICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7CiAgICAgIHN3aXRjaCAodGFnKSB7CiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzoKICAgICAgICAgIHJldHVybiBidWZmZXJDbG9uZShvYmplY3QpOwoKICAgICAgICBjYXNlIGJvb2xUYWc6CiAgICAgICAgY2FzZSBkYXRlVGFnOgogICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKCtvYmplY3QpOwoKICAgICAgICBjYXNlIGZsb2F0MzJUYWc6IGNhc2UgZmxvYXQ2NFRhZzoKICAgICAgICBjYXNlIGludDhUYWc6IGNhc2UgaW50MTZUYWc6IGNhc2UgaW50MzJUYWc6CiAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzoKICAgICAgICAgIHZhciBidWZmZXIgPSBvYmplY3QuYnVmZmVyOwogICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKGlzRGVlcCA/IGJ1ZmZlckNsb25lKGJ1ZmZlcikgOiBidWZmZXIsIG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QubGVuZ3RoKTsKCiAgICAgICAgY2FzZSBudW1iZXJUYWc6CiAgICAgICAgY2FzZSBzdHJpbmdUYWc6CiAgICAgICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTsKCiAgICAgICAgY2FzZSByZWdleHBUYWc6CiAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3Iob2JqZWN0LnNvdXJjZSwgcmVGbGFncy5leGVjKG9iamVjdCkpOwogICAgICAgICAgcmVzdWx0Lmxhc3RJbmRleCA9IG9iamVjdC5sYXN0SW5kZXg7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGludm9rZVBhdGgob2JqZWN0LCBwYXRoLCBhcmdzKSB7CiAgICAgIGlmIChvYmplY3QgIT0gbnVsbCAmJiAhaXNLZXkocGF0aCwgb2JqZWN0KSkgewogICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICAgICAgb2JqZWN0ID0gcGF0aC5sZW5ndGggPT0gMSA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTsKICAgICAgICBwYXRoID0gbGFzdChwYXRoKTsKICAgICAgfQogICAgICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3BhdGhdOwogICAgICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogZnVuYy5hcHBseShvYmplY3QsIGFyZ3MpOwogICAgfQogICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgoZ2V0TGVuZ3RoKHZhbHVlKSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHsKICAgICAgdmFsdWUgPSAodHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IHJlSXNVaW50LnRlc3QodmFsdWUpKSA/ICt2YWx1ZSA6IC0xOwogICAgICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7CiAgICAgIHJldHVybiB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoOwogICAgfQogICAgZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHsKICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGluZGV4OwogICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJwogICAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSkKICAgICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KSkgewogICAgICAgIHZhciBvdGhlciA9IG9iamVjdFtpbmRleF07CiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICh2YWx1ZSA9PT0gb3RoZXIpIDogKG90aGVyICE9PSBvdGhlcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkgewogICAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKICAgICAgaWYgKCh0eXBlID09ICdzdHJpbmcnICYmIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkpIHx8IHR5cGUgPT0gJ251bWJlcicpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdCA9ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSk7CiAgICAgIHJldHVybiByZXN1bHQgfHwgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIHRvT2JqZWN0KG9iamVjdCkpOwogICAgfQogICAgZnVuY3Rpb24gaXNMYXppYWJsZShmdW5jKSB7CiAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpOwogICAgICBpZiAoIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBvdGhlciA9IGxvZGFzaFtmdW5jTmFtZV07CiAgICAgIGlmIChmdW5jID09PSBvdGhlcikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7CiAgICAgIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7CiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiYgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSOwogICAgfQogICAgZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHsKICAgICAgdmFyIGJpdG1hc2sgPSBkYXRhWzFdLAogICAgICAgICAgc3JjQml0bWFzayA9IHNvdXJjZVsxXSwKICAgICAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzaywKICAgICAgICAgIGlzQ29tbW9uID0gbmV3Qml0bWFzayA8IEFSWV9GTEFHOwoKICAgICAgdmFyIGlzQ29tYm8gPQogICAgICAgIChzcmNCaXRtYXNrID09IEFSWV9GTEFHICYmIGJpdG1hc2sgPT0gQ1VSUllfRkxBRykgfHwKICAgICAgICAoc3JjQml0bWFzayA9PSBBUllfRkxBRyAmJiBiaXRtYXNrID09IFJFQVJHX0ZMQUcgJiYgZGF0YVs3XS5sZW5ndGggPD0gc291cmNlWzhdKSB8fAogICAgICAgIChzcmNCaXRtYXNrID09IChBUllfRkxBRyB8IFJFQVJHX0ZMQUcpICYmIGJpdG1hc2sgPT0gQ1VSUllfRkxBRyk7CiAgICAgIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICAgIH0KICAgICAgaWYgKHNyY0JpdG1hc2sgJiBCSU5EX0ZMQUcpIHsKICAgICAgICBkYXRhWzJdID0gc291cmNlWzJdOwogICAgICAgIG5ld0JpdG1hc2sgfD0gKGJpdG1hc2sgJiBCSU5EX0ZMQUcpID8gMCA6IENVUlJZX0JPVU5EX0ZMQUc7CiAgICAgIH0KICAgICAgdmFyIHZhbHVlID0gc291cmNlWzNdOwogICAgICBpZiAodmFsdWUpIHsKICAgICAgICB2YXIgcGFydGlhbHMgPSBkYXRhWzNdOwogICAgICAgIGRhdGFbM10gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzKHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzRdKSA6IGFycmF5Q29weSh2YWx1ZSk7CiAgICAgICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogYXJyYXlDb3B5KHNvdXJjZVs0XSk7CiAgICAgIH0KICAgICAgdmFsdWUgPSBzb3VyY2VbNV07CiAgICAgIGlmICh2YWx1ZSkgewogICAgICAgIHBhcnRpYWxzID0gZGF0YVs1XTsKICAgICAgICBkYXRhWzVdID0gcGFydGlhbHMgPyBjb21wb3NlQXJnc1JpZ2h0KHBhcnRpYWxzLCB2YWx1ZSwgc291cmNlWzZdKSA6IGFycmF5Q29weSh2YWx1ZSk7CiAgICAgICAgZGF0YVs2XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVs1XSwgUExBQ0VIT0xERVIpIDogYXJyYXlDb3B5KHNvdXJjZVs2XSk7CiAgICAgIH0KICAgICAgdmFsdWUgPSBzb3VyY2VbN107CiAgICAgIGlmICh2YWx1ZSkgewogICAgICAgIGRhdGFbN10gPSBhcnJheUNvcHkodmFsdWUpOwogICAgICB9CiAgICAgIGlmIChzcmNCaXRtYXNrICYgQVJZX0ZMQUcpIHsKICAgICAgICBkYXRhWzhdID0gZGF0YVs4XSA9PSBudWxsID8gc291cmNlWzhdIDogbmF0aXZlTWluKGRhdGFbOF0sIHNvdXJjZVs4XSk7CiAgICAgIH0KICAgICAgaWYgKGRhdGFbOV0gPT0gbnVsbCkgewogICAgICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07CiAgICAgIH0KICAgICAgZGF0YVswXSA9IHNvdXJjZVswXTsKICAgICAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7CgogICAgICByZXR1cm4gZGF0YTsKICAgIH0KICAgIGZ1bmN0aW9uIG1lcmdlRGVmYXVsdHMob2JqZWN0VmFsdWUsIHNvdXJjZVZhbHVlKSB7CiAgICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gdW5kZWZpbmVkID8gc291cmNlVmFsdWUgOiBtZXJnZShvYmplY3RWYWx1ZSwgc291cmNlVmFsdWUsIG1lcmdlRGVmYXVsdHMpOwogICAgfQogICAgZnVuY3Rpb24gcGlja0J5QXJyYXkob2JqZWN0LCBwcm9wcykgewogICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpOwoKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGgsCiAgICAgICAgICByZXN1bHQgPSB7fTsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTsKICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkgewogICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHBpY2tCeUNhbGxiYWNrKG9iamVjdCwgcHJlZGljYXRlKSB7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgYmFzZUZvckluKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7CiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwga2V5LCBvYmplY3QpKSB7CiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7CiAgICAgIHZhciBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsCiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNaW4oaW5kZXhlcy5sZW5ndGgsIGFyckxlbmd0aCksCiAgICAgICAgICBvbGRBcnJheSA9IGFycmF5Q29weShhcnJheSk7CgogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07CiAgICAgICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgdmFyIHNldERhdGEgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciBjb3VudCA9IDAsCiAgICAgICAgICBsYXN0Q2FsbGVkID0gMDsKCiAgICAgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVlKSB7CiAgICAgICAgdmFyIHN0YW1wID0gbm93KCksCiAgICAgICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7CgogICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDsKICAgICAgICBpZiAocmVtYWluaW5nID4gMCkgewogICAgICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7CiAgICAgICAgICAgIHJldHVybiBrZXk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvdW50ID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2VTZXREYXRhKGtleSwgdmFsdWUpOwogICAgICB9OwogICAgfSgpKTsKICAgIGZ1bmN0aW9uIHNoaW1LZXlzKG9iamVjdCkgewogICAgICB2YXIgcHJvcHMgPSBrZXlzSW4ob2JqZWN0KSwKICAgICAgICAgIHByb3BzTGVuZ3RoID0gcHJvcHMubGVuZ3RoLAogICAgICAgICAgbGVuZ3RoID0gcHJvcHNMZW5ndGggJiYgb2JqZWN0Lmxlbmd0aDsKCiAgICAgIHZhciBhbGxvd0luZGV4ZXMgPSAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmCiAgICAgICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTsKCiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgcmVzdWx0ID0gW107CgogICAgICB3aGlsZSAoKytpbmRleCA8IHByb3BzTGVuZ3RoKSB7CiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTsKICAgICAgICBpZiAoKGFsbG93SW5kZXhlcyAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSkgfHwgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiB0b0l0ZXJhYmxlKHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGlmICghaXNBcnJheUxpa2UodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlcyh2YWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogT2JqZWN0KHZhbHVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRvT2JqZWN0KHZhbHVlKSB7CiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdCh2YWx1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b1BhdGgodmFsdWUpIHsKICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgYmFzZVRvU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdHJpbmcpIHsKICAgICAgICByZXN1bHQucHVzaChxdW90ZSA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gd3JhcHBlckNsb25lKHdyYXBwZXIpIHsKICAgICAgcmV0dXJuIHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcgogICAgICAgID8gd3JhcHBlci5jbG9uZSgpCiAgICAgICAgOiBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXywgYXJyYXlDb3B5KHdyYXBwZXIuX19hY3Rpb25zX18pKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkgewogICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgc2l6ZSwgZ3VhcmQpIDogc2l6ZSA9PSBudWxsKSB7CiAgICAgICAgc2l6ZSA9IDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZSA9IG5hdGl2ZU1heChuYXRpdmVGbG9vcihzaXplKSB8fCAxLCAxKTsKICAgICAgfQogICAgICB2YXIgaW5kZXggPSAwLAogICAgICAgICAgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwLAogICAgICAgICAgcmVzSW5kZXggPSAtMSwKICAgICAgICAgIHJlc3VsdCA9IEFycmF5KG5hdGl2ZUNlaWwobGVuZ3RoIC8gc2l6ZSkpOwoKICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gYmFzZVNsaWNlKGFycmF5LCBpbmRleCwgKGluZGV4ICs9IHNpemUpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY29tcGFjdChhcnJheSkgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCwKICAgICAgICAgIHJlc0luZGV4ID0gLTEsCiAgICAgICAgICByZXN1bHQgPSBbXTsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdOwogICAgICAgIGlmICh2YWx1ZSkgewogICAgICAgICAgcmVzdWx0WysrcmVzSW5kZXhdID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICB2YXIgZGlmZmVyZW5jZSA9IHJlc3RQYXJhbShmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7CiAgICAgIHJldHVybiAoaXNPYmplY3RMaWtlKGFycmF5KSAmJiBpc0FycmF5TGlrZShhcnJheSkpCiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCBmYWxzZSwgdHJ1ZSkpCiAgICAgICAgOiBbXTsKICAgIH0pOwogICAgZnVuY3Rpb24gZHJvcChhcnJheSwgbiwgZ3VhcmQpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoYXJyYXksIG4sIGd1YXJkKSA6IG4gPT0gbnVsbCkgewogICAgICAgIG4gPSAxOwogICAgICB9CiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4pOwogICAgfQogICAgZnVuY3Rpb24gZHJvcFJpZ2h0KGFycmF5LCBuLCBndWFyZCkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7CiAgICAgICAgbiA9IDE7CiAgICAgIH0KICAgICAgbiA9IGxlbmd0aCAtICgrbiB8fCAwKTsKICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7CiAgICB9CiAgICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKQogICAgICAgID8gYmFzZVdoaWxlKGFycmF5LCBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpLCB0cnVlLCB0cnVlKQogICAgICAgIDogW107CiAgICB9CiAgICBmdW5jdGlvbiBkcm9wV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykgewogICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkKICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKSwgdHJ1ZSkKICAgICAgICA6IFtdOwogICAgfQogICAgZnVuY3Rpb24gZmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgaWYgKHN0YXJ0ICYmIHR5cGVvZiBzdGFydCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgdmFsdWUsIHN0YXJ0KSkgewogICAgICAgIHN0YXJ0ID0gMDsKICAgICAgICBlbmQgPSBsZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIGJhc2VGaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCk7CiAgICB9CiAgICB2YXIgZmluZEluZGV4ID0gY3JlYXRlRmluZEluZGV4KCk7CiAgICB2YXIgZmluZExhc3RJbmRleCA9IGNyZWF0ZUZpbmRJbmRleCh0cnVlKTsKICAgIGZ1bmN0aW9uIGZpcnN0KGFycmF5KSB7CiAgICAgIHJldHVybiBhcnJheSA/IGFycmF5WzBdIDogdW5kZWZpbmVkOwogICAgfQogICAgZnVuY3Rpb24gZmxhdHRlbihhcnJheSwgaXNEZWVwLCBndWFyZCkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIGlzRGVlcCwgZ3VhcmQpKSB7CiAgICAgICAgaXNEZWVwID0gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCBpc0RlZXApIDogW107CiAgICB9CiAgICBmdW5jdGlvbiBmbGF0dGVuRGVlcChhcnJheSkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIHRydWUpIDogW107CiAgICB9CiAgICBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgZnJvbUluZGV4ID09ICdudW1iZXInKSB7CiAgICAgICAgZnJvbUluZGV4ID0gZnJvbUluZGV4IDwgMCA/IG5hdGl2ZU1heChsZW5ndGggKyBmcm9tSW5kZXgsIDApIDogZnJvbUluZGV4OwogICAgICB9IGVsc2UgaWYgKGZyb21JbmRleCkgewogICAgICAgIHZhciBpbmRleCA9IGJpbmFyeUluZGV4KGFycmF5LCB2YWx1ZSk7CiAgICAgICAgaWYgKGluZGV4IDwgbGVuZ3RoICYmCiAgICAgICAgICAgICh2YWx1ZSA9PT0gdmFsdWUgPyAodmFsdWUgPT09IGFycmF5W2luZGV4XSkgOiAoYXJyYXlbaW5kZXhdICE9PSBhcnJheVtpbmRleF0pKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4IHx8IDApOwogICAgfQogICAgZnVuY3Rpb24gaW5pdGlhbChhcnJheSkgewogICAgICByZXR1cm4gZHJvcFJpZ2h0KGFycmF5LCAxKTsKICAgIH0KICAgIHZhciBpbnRlcnNlY3Rpb24gPSByZXN0UGFyYW0oZnVuY3Rpb24oYXJyYXlzKSB7CiAgICAgIHZhciBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLAogICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGgsCiAgICAgICAgICBjYWNoZXMgPSBBcnJheShsZW5ndGgpLAogICAgICAgICAgaW5kZXhPZiA9IGdldEluZGV4T2YoKSwKICAgICAgICAgIGlzQ29tbW9uID0gaW5kZXhPZiA9PSBiYXNlSW5kZXhPZiwKICAgICAgICAgIHJlc3VsdCA9IFtdOwoKICAgICAgd2hpbGUgKG90aEluZGV4LS0pIHsKICAgICAgICB2YXIgdmFsdWUgPSBhcnJheXNbb3RoSW5kZXhdID0gaXNBcnJheUxpa2UodmFsdWUgPSBhcnJheXNbb3RoSW5kZXhdKSA/IHZhbHVlIDogW107CiAgICAgICAgY2FjaGVzW290aEluZGV4XSA9IChpc0NvbW1vbiAmJiB2YWx1ZS5sZW5ndGggPj0gMTIwKSA/IGNyZWF0ZUNhY2hlKG90aEluZGV4ICYmIHZhbHVlKSA6IG51bGw7CiAgICAgIH0KICAgICAgdmFyIGFycmF5ID0gYXJyYXlzWzBdLAogICAgICAgICAgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMCwKICAgICAgICAgIHNlZW4gPSBjYWNoZXNbMF07CgogICAgICBvdXRlcjoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YWx1ZSA9IGFycmF5W2luZGV4XTsKICAgICAgICBpZiAoKHNlZW4gPyBjYWNoZUluZGV4T2Yoc2VlbiwgdmFsdWUpIDogaW5kZXhPZihyZXN1bHQsIHZhbHVlLCAwKSkgPCAwKSB7CiAgICAgICAgICB2YXIgb3RoSW5kZXggPSBvdGhMZW5ndGg7CiAgICAgICAgICB3aGlsZSAoLS1vdGhJbmRleCkgewogICAgICAgICAgICB2YXIgY2FjaGUgPSBjYWNoZXNbb3RoSW5kZXhdOwogICAgICAgICAgICBpZiAoKGNhY2hlID8gY2FjaGVJbmRleE9mKGNhY2hlLCB2YWx1ZSkgOiBpbmRleE9mKGFycmF5c1tvdGhJbmRleF0sIHZhbHVlLCAwKSkgPCAwKSB7CiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChzZWVuKSB7CiAgICAgICAgICAgIHNlZW4ucHVzaCh2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9KTsKICAgIGZ1bmN0aW9uIGxhc3QoYXJyYXkpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkOwogICAgfQogICAgZnVuY3Rpb24gbGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoOwogICAgICBpZiAodHlwZW9mIGZyb21JbmRleCA9PSAnbnVtYmVyJykgewogICAgICAgIGluZGV4ID0gKGZyb21JbmRleCA8IDAgPyBuYXRpdmVNYXgobGVuZ3RoICsgZnJvbUluZGV4LCAwKSA6IG5hdGl2ZU1pbihmcm9tSW5kZXggfHwgMCwgbGVuZ3RoIC0gMSkpICsgMTsKICAgICAgfSBlbHNlIGlmIChmcm9tSW5kZXgpIHsKICAgICAgICBpbmRleCA9IGJpbmFyeUluZGV4KGFycmF5LCB2YWx1ZSwgdHJ1ZSkgLSAxOwogICAgICAgIHZhciBvdGhlciA9IGFycmF5W2luZGV4XTsKICAgICAgICBpZiAodmFsdWUgPT09IHZhbHVlID8gKHZhbHVlID09PSBvdGhlcikgOiAob3RoZXIgIT09IG90aGVyKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgewogICAgICAgIHJldHVybiBpbmRleE9mTmFOKGFycmF5LCBpbmRleCwgdHJ1ZSk7CiAgICAgIH0KICAgICAgd2hpbGUgKGluZGV4LS0pIHsKICAgICAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmdW5jdGlvbiBwdWxsKCkgewogICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgIGFycmF5ID0gYXJnc1swXTsKCiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHsKICAgICAgICByZXR1cm4gYXJyYXk7CiAgICAgIH0KICAgICAgdmFyIGluZGV4ID0gMCwKICAgICAgICAgIGluZGV4T2YgPSBnZXRJbmRleE9mKCksCiAgICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDsKCiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGZyb21JbmRleCA9IDAsCiAgICAgICAgICAgIHZhbHVlID0gYXJnc1tpbmRleF07CgogICAgICAgIHdoaWxlICgoZnJvbUluZGV4ID0gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkpID4gLTEpIHsKICAgICAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBmcm9tSW5kZXgsIDEpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICB2YXIgcHVsbEF0ID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7CiAgICAgIGluZGV4ZXMgPSBiYXNlRmxhdHRlbihpbmRleGVzKTsKCiAgICAgIHZhciByZXN1bHQgPSBiYXNlQXQoYXJyYXksIGluZGV4ZXMpOwogICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzLnNvcnQoYmFzZUNvbXBhcmVBc2NlbmRpbmcpKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0pOwogICAgZnVuY3Rpb24gcmVtb3ZlKGFycmF5LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHsKICAgICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICBpZiAoIShhcnJheSAmJiBhcnJheS5sZW5ndGgpKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGluZGV4ZXMgPSBbXSwKICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKCiAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7CiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdOwogICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gcmVzdChhcnJheSkgewogICAgICByZXR1cm4gZHJvcChhcnJheSwgMSk7CiAgICB9CiAgICBmdW5jdGlvbiBzbGljZShhcnJheSwgc3RhcnQsIGVuZCkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBpZiAoZW5kICYmIHR5cGVvZiBlbmQgIT0gJ251bWJlcicgJiYgaXNJdGVyYXRlZUNhbGwoYXJyYXksIHN0YXJ0LCBlbmQpKSB7CiAgICAgICAgc3RhcnQgPSAwOwogICAgICAgIGVuZCA9IGxlbmd0aDsKICAgICAgfQogICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTsKICAgIH0KICAgIHZhciBzb3J0ZWRJbmRleCA9IGNyZWF0ZVNvcnRlZEluZGV4KCk7CiAgICB2YXIgc29ydGVkTGFzdEluZGV4ID0gY3JlYXRlU29ydGVkSW5kZXgodHJ1ZSk7CiAgICBmdW5jdGlvbiB0YWtlKGFycmF5LCBuLCBndWFyZCkgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICBpZiAoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7CiAgICAgICAgbiA9IDE7CiAgICAgIH0KICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgMCwgbiA8IDAgPyAwIDogbik7CiAgICB9CiAgICBmdW5jdGlvbiB0YWtlUmlnaHQoYXJyYXksIG4sIGd1YXJkKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBuLCBndWFyZCkgOiBuID09IG51bGwpIHsKICAgICAgICBuID0gMTsKICAgICAgfQogICAgICBuID0gbGVuZ3RoIC0gKCtuIHx8IDApOwogICAgICByZXR1cm4gYmFzZVNsaWNlKGFycmF5LCBuIDwgMCA/IDAgOiBuKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRha2VSaWdodFdoaWxlKGFycmF5LCBwcmVkaWNhdGUsIHRoaXNBcmcpIHsKICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpCiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyksIGZhbHNlLCB0cnVlKQogICAgICAgIDogW107CiAgICB9CiAgICBmdW5jdGlvbiB0YWtlV2hpbGUoYXJyYXksIHByZWRpY2F0ZSwgdGhpc0FyZykgewogICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkKICAgICAgICA/IGJhc2VXaGlsZShhcnJheSwgZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKSkKICAgICAgICA6IFtdOwogICAgfQogICAgdmFyIHVuaW9uID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGFycmF5cykgewogICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4oYXJyYXlzLCBmYWxzZSwgdHJ1ZSkpOwogICAgfSk7CiAgICBmdW5jdGlvbiB1bmlxKGFycmF5LCBpc1NvcnRlZCwgaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDsKICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgaWYgKGlzU29ydGVkICE9IG51bGwgJiYgdHlwZW9mIGlzU29ydGVkICE9ICdib29sZWFuJykgewogICAgICAgIHRoaXNBcmcgPSBpdGVyYXRlZTsKICAgICAgICBpdGVyYXRlZSA9IGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBpc1NvcnRlZCwgdGhpc0FyZykgPyB1bmRlZmluZWQgOiBpc1NvcnRlZDsKICAgICAgICBpc1NvcnRlZCA9IGZhbHNlOwogICAgICB9CiAgICAgIHZhciBjYWxsYmFjayA9IGdldENhbGxiYWNrKCk7CiAgICAgIGlmICghKGl0ZXJhdGVlID09IG51bGwgJiYgY2FsbGJhY2sgPT09IGJhc2VDYWxsYmFjaykpIHsKICAgICAgICBpdGVyYXRlZSA9IGNhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTsKICAgICAgfQogICAgICByZXR1cm4gKGlzU29ydGVkICYmIGdldEluZGV4T2YoKSA9PSBiYXNlSW5kZXhPZikKICAgICAgICA/IHNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKQogICAgICAgIDogYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7CiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSAwOwoKICAgICAgYXJyYXkgPSBhcnJheUZpbHRlcihhcnJheSwgZnVuY3Rpb24oZ3JvdXApIHsKICAgICAgICBpZiAoaXNBcnJheUxpa2UoZ3JvdXApKSB7CiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0W2luZGV4XSA9IGFycmF5TWFwKGFycmF5LCBiYXNlUHJvcGVydHkoaW5kZXgpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LCBpdGVyYXRlZSwgdGhpc0FyZykgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0gdW56aXAoYXJyYXkpOwogICAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCkgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgaXRlcmF0ZWUgPSBiaW5kQ2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpOwogICAgICByZXR1cm4gYXJyYXlNYXAocmVzdWx0LCBmdW5jdGlvbihncm91cCkgewogICAgICAgIHJldHVybiBhcnJheVJlZHVjZShncm91cCwgaXRlcmF0ZWUsIHVuZGVmaW5lZCwgdHJ1ZSk7CiAgICAgIH0pOwogICAgfQogICAgdmFyIHdpdGhvdXQgPSByZXN0UGFyYW0oZnVuY3Rpb24oYXJyYXksIHZhbHVlcykgewogICAgICByZXR1cm4gaXNBcnJheUxpa2UoYXJyYXkpCiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzKQogICAgICAgIDogW107CiAgICB9KTsKICAgIGZ1bmN0aW9uIHhvcigpIHsKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YXIgYXJyYXkgPSBhcmd1bWVudHNbaW5kZXhdOwogICAgICAgIGlmIChpc0FycmF5TGlrZShhcnJheSkpIHsKICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHQKICAgICAgICAgICAgPyBhcnJheVB1c2goYmFzZURpZmZlcmVuY2UocmVzdWx0LCBhcnJheSksIGJhc2VEaWZmZXJlbmNlKGFycmF5LCByZXN1bHQpKQogICAgICAgICAgICA6IGFycmF5OwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0ID8gYmFzZVVuaXEocmVzdWx0KSA6IFtdOwogICAgfQogICAgdmFyIHppcCA9IHJlc3RQYXJhbSh1bnppcCk7CiAgICBmdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykgewogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIGxlbmd0aCA9IHByb3BzID8gcHJvcHMubGVuZ3RoIDogMCwKICAgICAgICAgIHJlc3VsdCA9IHt9OwoKICAgICAgaWYgKGxlbmd0aCAmJiAhdmFsdWVzICYmICFpc0FycmF5KHByb3BzWzBdKSkgewogICAgICAgIHZhbHVlcyA9IFtdOwogICAgICB9CiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTsKICAgICAgICBpZiAodmFsdWVzKSB7CiAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1tpbmRleF07CiAgICAgICAgfSBlbHNlIGlmIChrZXkpIHsKICAgICAgICAgIHJlc3VsdFtrZXlbMF1dID0ga2V5WzFdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgdmFyIHppcFdpdGggPSByZXN0UGFyYW0oZnVuY3Rpb24oYXJyYXlzKSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheXMubGVuZ3RoLAogICAgICAgICAgaXRlcmF0ZWUgPSBsZW5ndGggPiAyID8gYXJyYXlzW2xlbmd0aCAtIDJdIDogdW5kZWZpbmVkLAogICAgICAgICAgdGhpc0FyZyA9IGxlbmd0aCA+IDEgPyBhcnJheXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7CgogICAgICBpZiAobGVuZ3RoID4gMiAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIGxlbmd0aCAtPSAyOwogICAgICB9IGVsc2UgewogICAgICAgIGl0ZXJhdGVlID0gKGxlbmd0aCA+IDEgJiYgdHlwZW9mIHRoaXNBcmcgPT0gJ2Z1bmN0aW9uJykgPyAoLS1sZW5ndGgsIHRoaXNBcmcpIDogdW5kZWZpbmVkOwogICAgICAgIHRoaXNBcmcgPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgYXJyYXlzLmxlbmd0aCA9IGxlbmd0aDsKICAgICAgcmV0dXJuIHVuemlwV2l0aChhcnJheXMsIGl0ZXJhdGVlLCB0aGlzQXJnKTsKICAgIH0pOwogICAgZnVuY3Rpb24gY2hhaW4odmFsdWUpIHsKICAgICAgdmFyIHJlc3VsdCA9IGxvZGFzaCh2YWx1ZSk7CiAgICAgIHJlc3VsdC5fX2NoYWluX18gPSB0cnVlOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gdGFwKHZhbHVlLCBpbnRlcmNlcHRvciwgdGhpc0FyZykgewogICAgICBpbnRlcmNlcHRvci5jYWxsKHRoaXNBcmcsIHZhbHVlKTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfQogICAgZnVuY3Rpb24gdGhydSh2YWx1ZSwgaW50ZXJjZXB0b3IsIHRoaXNBcmcpIHsKICAgICAgcmV0dXJuIGludGVyY2VwdG9yLmNhbGwodGhpc0FyZywgdmFsdWUpOwogICAgfQogICAgZnVuY3Rpb24gd3JhcHBlckNoYWluKCkgewogICAgICByZXR1cm4gY2hhaW4odGhpcyk7CiAgICB9CiAgICBmdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCkgewogICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodGhpcy52YWx1ZSgpLCB0aGlzLl9fY2hhaW5fXyk7CiAgICB9CiAgICB2YXIgd3JhcHBlckNvbmNhdCA9IHJlc3RQYXJhbShmdW5jdGlvbih2YWx1ZXMpIHsKICAgICAgdmFsdWVzID0gYmFzZUZsYXR0ZW4odmFsdWVzKTsKICAgICAgcmV0dXJuIHRoaXMudGhydShmdW5jdGlvbihhcnJheSkgewogICAgICAgIHJldHVybiBhcnJheUNvbmNhdChpc0FycmF5KGFycmF5KSA/IGFycmF5IDogW3RvT2JqZWN0KGFycmF5KV0sIHZhbHVlcyk7CiAgICAgIH0pOwogICAgfSk7CiAgICBmdW5jdGlvbiB3cmFwcGVyUGxhbnQodmFsdWUpIHsKICAgICAgdmFyIHJlc3VsdCwKICAgICAgICAgIHBhcmVudCA9IHRoaXM7CgogICAgICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCkgewogICAgICAgIHZhciBjbG9uZSA9IHdyYXBwZXJDbG9uZShwYXJlbnQpOwogICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gY2xvbmU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IGNsb25lOwogICAgICAgIH0KICAgICAgICB2YXIgcHJldmlvdXMgPSBjbG9uZTsKICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX193cmFwcGVkX187CiAgICAgIH0KICAgICAgcHJldmlvdXMuX193cmFwcGVkX18gPSB2YWx1ZTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyYXBwZXJSZXZlcnNlKCkgewogICAgICB2YXIgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fOwoKICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICByZXR1cm4gKHdyYXBwZWQgJiYgd3JhcHBlZC5fX2Rpcl9fIDwgMCkgPyB2YWx1ZSA6IHZhbHVlLnJldmVyc2UoKTsKICAgICAgfTsKICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHsKICAgICAgICB2YXIgd3JhcHBlZCA9IHZhbHVlOwogICAgICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkgewogICAgICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTsKICAgICAgICB9CiAgICAgICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpOwogICAgICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7ICdmdW5jJzogdGhydSwgJ2FyZ3MnOiBbaW50ZXJjZXB0b3JdLCAndGhpc0FyZyc6IHVuZGVmaW5lZCB9KTsKICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlZCwgdGhpcy5fX2NoYWluX18pOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpOwogICAgfQogICAgZnVuY3Rpb24gd3JhcHBlclRvU3RyaW5nKCkgewogICAgICByZXR1cm4gKHRoaXMudmFsdWUoKSArICcnKTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyYXBwZXJWYWx1ZSgpIHsKICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXywgdGhpcy5fX2FjdGlvbnNfXyk7CiAgICB9CiAgICB2YXIgYXQgPSByZXN0UGFyYW0oZnVuY3Rpb24oY29sbGVjdGlvbiwgcHJvcHMpIHsKICAgICAgcmV0dXJuIGJhc2VBdChjb2xsZWN0aW9uLCBiYXNlRmxhdHRlbihwcm9wcykpOwogICAgfSk7CiAgICB2YXIgY291bnRCeSA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CiAgICAgIGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpID8gKytyZXN1bHRba2V5XSA6IChyZXN1bHRba2V5XSA9IDEpOwogICAgfSk7CiAgICBmdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHsKICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFdmVyeSA6IGJhc2VFdmVyeTsKICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSkgewogICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHsKICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlGaWx0ZXIgOiBiYXNlRmlsdGVyOwogICAgICBwcmVkaWNhdGUgPSBnZXRDYWxsYmFjayhwcmVkaWNhdGUsIHRoaXNBcmcsIDMpOwogICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBwcmVkaWNhdGUpOwogICAgfQogICAgdmFyIGZpbmQgPSBjcmVhdGVGaW5kKGJhc2VFYWNoKTsKICAgIHZhciBmaW5kTGFzdCA9IGNyZWF0ZUZpbmQoYmFzZUVhY2hSaWdodCwgdHJ1ZSk7CiAgICBmdW5jdGlvbiBmaW5kV2hlcmUoY29sbGVjdGlvbiwgc291cmNlKSB7CiAgICAgIHJldHVybiBmaW5kKGNvbGxlY3Rpb24sIGJhc2VNYXRjaGVzKHNvdXJjZSkpOwogICAgfQogICAgdmFyIGZvckVhY2ggPSBjcmVhdGVGb3JFYWNoKGFycmF5RWFjaCwgYmFzZUVhY2gpOwogICAgdmFyIGZvckVhY2hSaWdodCA9IGNyZWF0ZUZvckVhY2goYXJyYXlFYWNoUmlnaHQsIGJhc2VFYWNoUmlnaHQpOwogICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkgewogICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIGtleSkpIHsKICAgICAgICByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRba2V5XSA9IFt2YWx1ZV07CiAgICAgIH0KICAgIH0pOwogICAgZnVuY3Rpb24gaW5jbHVkZXMoY29sbGVjdGlvbiwgdGFyZ2V0LCBmcm9tSW5kZXgsIGd1YXJkKSB7CiAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uID8gZ2V0TGVuZ3RoKGNvbGxlY3Rpb24pIDogMDsKICAgICAgaWYgKCFpc0xlbmd0aChsZW5ndGgpKSB7CiAgICAgICAgY29sbGVjdGlvbiA9IHZhbHVlcyhjb2xsZWN0aW9uKTsKICAgICAgICBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDsKICAgICAgfQogICAgICBpZiAodHlwZW9mIGZyb21JbmRleCAhPSAnbnVtYmVyJyB8fCAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwodGFyZ2V0LCBmcm9tSW5kZXgsIGd1YXJkKSkpIHsKICAgICAgICBmcm9tSW5kZXggPSAwOwogICAgICB9IGVsc2UgewogICAgICAgIGZyb21JbmRleCA9IGZyb21JbmRleCA8IDAgPyBuYXRpdmVNYXgobGVuZ3RoICsgZnJvbUluZGV4LCAwKSA6IChmcm9tSW5kZXggfHwgMCk7CiAgICAgIH0KICAgICAgcmV0dXJuICh0eXBlb2YgY29sbGVjdGlvbiA9PSAnc3RyaW5nJyB8fCAhaXNBcnJheShjb2xsZWN0aW9uKSAmJiBpc1N0cmluZyhjb2xsZWN0aW9uKSkKICAgICAgICA/IChmcm9tSW5kZXggPD0gbGVuZ3RoICYmIGNvbGxlY3Rpb24uaW5kZXhPZih0YXJnZXQsIGZyb21JbmRleCkgPiAtMSkKICAgICAgICA6ICghIWxlbmd0aCAmJiBnZXRJbmRleE9mKGNvbGxlY3Rpb24sIHRhcmdldCwgZnJvbUluZGV4KSA+IC0xKTsKICAgIH0KICAgIHZhciBpbmRleEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHsKICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTsKICAgIH0pOwogICAgdmFyIGludm9rZSA9IHJlc3RQYXJhbShmdW5jdGlvbihjb2xsZWN0aW9uLCBwYXRoLCBhcmdzKSB7CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgaXNGdW5jID0gdHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJywKICAgICAgICAgIGlzUHJvcCA9IGlzS2V5KHBhdGgpLAogICAgICAgICAgcmVzdWx0ID0gaXNBcnJheUxpa2UoY29sbGVjdGlvbikgPyBBcnJheShjb2xsZWN0aW9uLmxlbmd0aCkgOiBbXTsKCiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdmFyIGZ1bmMgPSBpc0Z1bmMgPyBwYXRoIDogKChpc1Byb3AgJiYgdmFsdWUgIT0gbnVsbCkgPyB2YWx1ZVtwYXRoXSA6IHVuZGVmaW5lZCk7CiAgICAgICAgcmVzdWx0WysraW5kZXhdID0gZnVuYyA/IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpIDogaW52b2tlUGF0aCh2YWx1ZSwgcGF0aCwgYXJncyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSk7CiAgICBmdW5jdGlvbiBtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlNYXAgOiBiYXNlTWFwOwogICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTsKICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpOwogICAgfQogICAgdmFyIHBhcnRpdGlvbiA9IGNyZWF0ZUFnZ3JlZ2F0b3IoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7CiAgICAgIHJlc3VsdFtrZXkgPyAwIDogMV0ucHVzaCh2YWx1ZSk7CiAgICB9LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTsKICAgIGZ1bmN0aW9uIHBsdWNrKGNvbGxlY3Rpb24sIHBhdGgpIHsKICAgICAgcmV0dXJuIG1hcChjb2xsZWN0aW9uLCBwcm9wZXJ0eShwYXRoKSk7CiAgICB9CiAgICB2YXIgcmVkdWNlID0gY3JlYXRlUmVkdWNlKGFycmF5UmVkdWNlLCBiYXNlRWFjaCk7CiAgICB2YXIgcmVkdWNlUmlnaHQgPSBjcmVhdGVSZWR1Y2UoYXJyYXlSZWR1Y2VSaWdodCwgYmFzZUVhY2hSaWdodCk7CiAgICBmdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjsKICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAzKTsKICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBzYW1wbGUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHsKICAgICAgaWYgKGd1YXJkID8gaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIDogbiA9PSBudWxsKSB7CiAgICAgICAgY29sbGVjdGlvbiA9IHRvSXRlcmFibGUoY29sbGVjdGlvbik7CiAgICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoOwogICAgICAgIHJldHVybiBsZW5ndGggPiAwID8gY29sbGVjdGlvbltiYXNlUmFuZG9tKDAsIGxlbmd0aCAtIDEpXSA6IHVuZGVmaW5lZDsKICAgICAgfQogICAgICB2YXIgaW5kZXggPSAtMSwKICAgICAgICAgIHJlc3VsdCA9IHRvQXJyYXkoY29sbGVjdGlvbiksCiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoLAogICAgICAgICAgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTsKCiAgICAgIG4gPSBuYXRpdmVNaW4obiA8IDAgPyAwIDogKCtuIHx8IDApLCBsZW5ndGgpOwogICAgICB3aGlsZSAoKytpbmRleCA8IG4pIHsKICAgICAgICB2YXIgcmFuZCA9IGJhc2VSYW5kb20oaW5kZXgsIGxhc3RJbmRleCksCiAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0W3JhbmRdOwoKICAgICAgICByZXN1bHRbcmFuZF0gPSByZXN1bHRbaW5kZXhdOwogICAgICAgIHJlc3VsdFtpbmRleF0gPSB2YWx1ZTsKICAgICAgfQogICAgICByZXN1bHQubGVuZ3RoID0gbjsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHNodWZmbGUoY29sbGVjdGlvbikgewogICAgICByZXR1cm4gc2FtcGxlKGNvbGxlY3Rpb24sIFBPU0lUSVZFX0lORklOSVRZKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikgewogICAgICB2YXIgbGVuZ3RoID0gY29sbGVjdGlvbiA/IGdldExlbmd0aChjb2xsZWN0aW9uKSA6IDA7CiAgICAgIHJldHVybiBpc0xlbmd0aChsZW5ndGgpID8gbGVuZ3RoIDoga2V5cyhjb2xsZWN0aW9uKS5sZW5ndGg7CiAgICB9CiAgICBmdW5jdGlvbiBzb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgdGhpc0FyZykgewogICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNvbWUgOiBiYXNlU29tZTsKICAgICAgaWYgKHRoaXNBcmcgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCB0aGlzQXJnKSkgewogICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nIHx8IHRoaXNBcmcgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHByZWRpY2F0ZSA9IGdldENhbGxiYWNrKHByZWRpY2F0ZSwgdGhpc0FyZywgMyk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNvcnRCeShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgdGhpc0FyZykgewogICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSkgewogICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIHZhciBpbmRleCA9IC0xOwogICAgICBpdGVyYXRlZSA9IGdldENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAzKTsKCiAgICAgIHZhciByZXN1bHQgPSBiYXNlTWFwKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4geyAnY3JpdGVyaWEnOiBpdGVyYXRlZSh2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSwgJ2luZGV4JzogKytpbmRleCwgJ3ZhbHVlJzogdmFsdWUgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBiYXNlU29ydEJ5KHJlc3VsdCwgY29tcGFyZUFzY2VuZGluZyk7CiAgICB9CiAgICB2YXIgc29ydEJ5QWxsID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlcykgewogICAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIHZhciBndWFyZCA9IGl0ZXJhdGVlc1syXTsKICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlc1swXSwgaXRlcmF0ZWVzWzFdLCBndWFyZCkpIHsKICAgICAgICBpdGVyYXRlZXMubGVuZ3RoID0gMTsKICAgICAgfQogICAgICByZXR1cm4gYmFzZVNvcnRCeU9yZGVyKGNvbGxlY3Rpb24sIGJhc2VGbGF0dGVuKGl0ZXJhdGVlcyksIFtdKTsKICAgIH0pOwogICAgZnVuY3Rpb24gc29ydEJ5T3JkZXIoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMsIGd1YXJkKSB7CiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGl0ZXJhdGVlcywgb3JkZXJzLCBndWFyZCkpIHsKICAgICAgICBvcmRlcnMgPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgaWYgKCFpc0FycmF5KGl0ZXJhdGVlcykpIHsKICAgICAgICBpdGVyYXRlZXMgPSBpdGVyYXRlZXMgPT0gbnVsbCA/IFtdIDogW2l0ZXJhdGVlc107CiAgICAgIH0KICAgICAgaWYgKCFpc0FycmF5KG9yZGVycykpIHsKICAgICAgICBvcmRlcnMgPSBvcmRlcnMgPT0gbnVsbCA/IFtdIDogW29yZGVyc107CiAgICAgIH0KICAgICAgcmV0dXJuIGJhc2VTb3J0QnlPcmRlcihjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycyk7CiAgICB9CiAgICBmdW5jdGlvbiB3aGVyZShjb2xsZWN0aW9uLCBzb3VyY2UpIHsKICAgICAgcmV0dXJuIGZpbHRlcihjb2xsZWN0aW9uLCBiYXNlTWF0Y2hlcyhzb3VyY2UpKTsKICAgIH0KICAgIHZhciBub3cgPSBuYXRpdmVOb3cgfHwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIH07CiAgICBmdW5jdGlvbiBhZnRlcihuLCBmdW5jKSB7CiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgaWYgKHR5cGVvZiBuID09ICdmdW5jdGlvbicpIHsKICAgICAgICAgIHZhciB0ZW1wID0gbjsKICAgICAgICAgIG4gPSBmdW5jOwogICAgICAgICAgZnVuYyA9IHRlbXA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbiA9IG5hdGl2ZUlzRmluaXRlKG4gPSArbikgPyBuIDogMDsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICgtLW4gPCAxKSB7CiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGFyeShmdW5jLCBuLCBndWFyZCkgewogICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoZnVuYywgbiwgZ3VhcmQpKSB7CiAgICAgICAgbiA9IHVuZGVmaW5lZDsKICAgICAgfQogICAgICBuID0gKGZ1bmMgJiYgbiA9PSBudWxsKSA/IGZ1bmMubGVuZ3RoIDogbmF0aXZlTWF4KCtuIHx8IDAsIDApOwogICAgICByZXR1cm4gY3JlYXRlV3JhcHBlcihmdW5jLCBBUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJlZm9yZShuLCBmdW5jKSB7CiAgICAgIHZhciByZXN1bHQ7CiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgaWYgKHR5cGVvZiBuID09ICdmdW5jdGlvbicpIHsKICAgICAgICAgIHZhciB0ZW1wID0gbjsKICAgICAgICAgIG4gPSBmdW5jOwogICAgICAgICAgZnVuYyA9IHRlbXA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICgtLW4gPiAwKSB7CiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICAgIGlmIChuIDw9IDEpIHsKICAgICAgICAgIGZ1bmMgPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CiAgICB2YXIgYmluZCA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCB0aGlzQXJnLCBwYXJ0aWFscykgewogICAgICB2YXIgYml0bWFzayA9IEJJTkRfRkxBRzsKICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkgewogICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGJpbmQucGxhY2Vob2xkZXIpOwogICAgICAgIGJpdG1hc2sgfD0gUEFSVElBTF9GTEFHOwogICAgICB9CiAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzKTsKICAgIH0pOwogICAgdmFyIGJpbmRBbGwgPSByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LCBtZXRob2ROYW1lcykgewogICAgICBtZXRob2ROYW1lcyA9IG1ldGhvZE5hbWVzLmxlbmd0aCA/IGJhc2VGbGF0dGVuKG1ldGhvZE5hbWVzKSA6IGZ1bmN0aW9ucyhvYmplY3QpOwoKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBtZXRob2ROYW1lcy5sZW5ndGg7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciBrZXkgPSBtZXRob2ROYW1lc1tpbmRleF07CiAgICAgICAgb2JqZWN0W2tleV0gPSBjcmVhdGVXcmFwcGVyKG9iamVjdFtrZXldLCBCSU5EX0ZMQUcsIG9iamVjdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH0pOwogICAgdmFyIGJpbmRLZXkgPSByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LCBrZXksIHBhcnRpYWxzKSB7CiAgICAgIHZhciBiaXRtYXNrID0gQklORF9GTEFHIHwgQklORF9LRVlfRkxBRzsKICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkgewogICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGJpbmRLZXkucGxhY2Vob2xkZXIpOwogICAgICAgIGJpdG1hc2sgfD0gUEFSVElBTF9GTEFHOwogICAgICB9CiAgICAgIHJldHVybiBjcmVhdGVXcmFwcGVyKGtleSwgYml0bWFzaywgb2JqZWN0LCBwYXJ0aWFscywgaG9sZGVycyk7CiAgICB9KTsKICAgIHZhciBjdXJyeSA9IGNyZWF0ZUN1cnJ5KENVUlJZX0ZMQUcpOwogICAgdmFyIGN1cnJ5UmlnaHQgPSBjcmVhdGVDdXJyeShDVVJSWV9SSUdIVF9GTEFHKTsKICAgIGZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKICAgICAgdmFyIGFyZ3MsCiAgICAgICAgICBtYXhUaW1lb3V0SWQsCiAgICAgICAgICByZXN1bHQsCiAgICAgICAgICBzdGFtcCwKICAgICAgICAgIHRoaXNBcmcsCiAgICAgICAgICB0aW1lb3V0SWQsCiAgICAgICAgICB0cmFpbGluZ0NhbGwsCiAgICAgICAgICBsYXN0Q2FsbGVkID0gMCwKICAgICAgICAgIG1heFdhaXQgPSBmYWxzZSwKICAgICAgICAgIHRyYWlsaW5nID0gdHJ1ZTsKCiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpOwogICAgICB9CiAgICAgIHdhaXQgPSB3YWl0IDwgMCA/IDAgOiAoK3dhaXQgfHwgMCk7CiAgICAgIGlmIChvcHRpb25zID09PSB0cnVlKSB7CiAgICAgICAgdmFyIGxlYWRpbmcgPSB0cnVlOwogICAgICAgIHRyYWlsaW5nID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHsKICAgICAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7CiAgICAgICAgbWF4V2FpdCA9ICdtYXhXYWl0JyBpbiBvcHRpb25zICYmIG5hdGl2ZU1heCgrb3B0aW9ucy5tYXhXYWl0IHx8IDAsIHdhaXQpOwogICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHsKICAgICAgICBpZiAodGltZW91dElkKSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1heFRpbWVvdXRJZCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KG1heFRpbWVvdXRJZCk7CiAgICAgICAgfQogICAgICAgIGxhc3RDYWxsZWQgPSAwOwogICAgICAgIG1heFRpbWVvdXRJZCA9IHRpbWVvdXRJZCA9IHRyYWlsaW5nQ2FsbCA9IHVuZGVmaW5lZDsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gY29tcGxldGUoaXNDYWxsZWQsIGlkKSB7CiAgICAgICAgaWYgKGlkKSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQoaWQpOwogICAgICAgIH0KICAgICAgICBtYXhUaW1lb3V0SWQgPSB0aW1lb3V0SWQgPSB0cmFpbGluZ0NhbGwgPSB1bmRlZmluZWQ7CiAgICAgICAgaWYgKGlzQ2FsbGVkKSB7CiAgICAgICAgICBsYXN0Q2FsbGVkID0gbm93KCk7CiAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpOwogICAgICAgICAgaWYgKCF0aW1lb3V0SWQgJiYgIW1heFRpbWVvdXRJZCkgewogICAgICAgICAgICBhcmdzID0gdGhpc0FyZyA9IHVuZGVmaW5lZDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGRlbGF5ZWQoKSB7CiAgICAgICAgdmFyIHJlbWFpbmluZyA9IHdhaXQgLSAobm93KCkgLSBzdGFtcCk7CiAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHsKICAgICAgICAgIGNvbXBsZXRlKHRyYWlsaW5nQ2FsbCwgbWF4VGltZW91dElkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChkZWxheWVkLCByZW1haW5pbmcpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZnVuY3Rpb24gbWF4RGVsYXllZCgpIHsKICAgICAgICBjb21wbGV0ZSh0cmFpbGluZywgdGltZW91dElkKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gZGVib3VuY2VkKCkgewogICAgICAgIGFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgc3RhbXAgPSBub3coKTsKICAgICAgICB0aGlzQXJnID0gdGhpczsKICAgICAgICB0cmFpbGluZ0NhbGwgPSB0cmFpbGluZyAmJiAodGltZW91dElkIHx8ICFsZWFkaW5nKTsKCiAgICAgICAgaWYgKG1heFdhaXQgPT09IGZhbHNlKSB7CiAgICAgICAgICB2YXIgbGVhZGluZ0NhbGwgPSBsZWFkaW5nICYmICF0aW1lb3V0SWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghbWF4VGltZW91dElkICYmICFsZWFkaW5nKSB7CiAgICAgICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDsKICAgICAgICAgIH0KICAgICAgICAgIHZhciByZW1haW5pbmcgPSBtYXhXYWl0IC0gKHN0YW1wIC0gbGFzdENhbGxlZCksCiAgICAgICAgICAgICAgaXNDYWxsZWQgPSByZW1haW5pbmcgPD0gMCB8fCByZW1haW5pbmcgPiBtYXhXYWl0OwoKICAgICAgICAgIGlmIChpc0NhbGxlZCkgewogICAgICAgICAgICBpZiAobWF4VGltZW91dElkKSB7CiAgICAgICAgICAgICAgbWF4VGltZW91dElkID0gY2xlYXJUaW1lb3V0KG1heFRpbWVvdXRJZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGFzdENhbGxlZCA9IHN0YW1wOwogICAgICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoIW1heFRpbWVvdXRJZCkgewogICAgICAgICAgICBtYXhUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KG1heERlbGF5ZWQsIHJlbWFpbmluZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChpc0NhbGxlZCAmJiB0aW1lb3V0SWQpIHsKICAgICAgICAgIHRpbWVvdXRJZCA9IGNsZWFyVGltZW91dCh0aW1lb3V0SWQpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICghdGltZW91dElkICYmIHdhaXQgIT09IG1heFdhaXQpIHsKICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZGVsYXllZCwgd2FpdCk7CiAgICAgICAgfQogICAgICAgIGlmIChsZWFkaW5nQ2FsbCkgewogICAgICAgICAgaXNDYWxsZWQgPSB0cnVlOwogICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzQ2FsbGVkICYmICF0aW1lb3V0SWQgJiYgIW1heFRpbWVvdXRJZCkgewogICAgICAgICAgYXJncyA9IHRoaXNBcmcgPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDsKICAgICAgcmV0dXJuIGRlYm91bmNlZDsKICAgIH0KICAgIHZhciBkZWZlciA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCBhcmdzKSB7CiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgMSwgYXJncyk7CiAgICB9KTsKICAgIHZhciBkZWxheSA9IHJlc3RQYXJhbShmdW5jdGlvbihmdW5jLCB3YWl0LCBhcmdzKSB7CiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgd2FpdCwgYXJncyk7CiAgICB9KTsKICAgIHZhciBmbG93ID0gY3JlYXRlRmxvdygpOwogICAgdmFyIGZsb3dSaWdodCA9IGNyZWF0ZUZsb3codHJ1ZSk7CiAgICBmdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7CiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICAgIH0KICAgICAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsCiAgICAgICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLAogICAgICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlOwoKICAgICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHsKICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTsKICAgICAgICB9CiAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICAgIG1lbW9pemVkLmNhY2hlID0gbmV3IG1lbW9pemUuQ2FjaGU7CiAgICAgIHJldHVybiBtZW1vaXplZDsKICAgIH0KICAgIHZhciBtb2RBcmdzID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGZ1bmMsIHRyYW5zZm9ybXMpIHsKICAgICAgdHJhbnNmb3JtcyA9IGJhc2VGbGF0dGVuKHRyYW5zZm9ybXMpOwogICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAhYXJyYXlFdmVyeSh0cmFuc2Zvcm1zLCBiYXNlSXNGdW5jdGlvbikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICAgIH0KICAgICAgdmFyIGxlbmd0aCA9IHRyYW5zZm9ybXMubGVuZ3RoOwogICAgICByZXR1cm4gcmVzdFBhcmFtKGZ1bmN0aW9uKGFyZ3MpIHsKICAgICAgICB2YXIgaW5kZXggPSBuYXRpdmVNaW4oYXJncy5sZW5ndGgsIGxlbmd0aCk7CiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHsKICAgICAgICAgIGFyZ3NbaW5kZXhdID0gdHJhbnNmb3Jtc1tpbmRleF0oYXJnc1tpbmRleF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsKICAgICAgfSk7CiAgICB9KTsKICAgIGZ1bmN0aW9uIG5lZ2F0ZShwcmVkaWNhdGUpIHsKICAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTsKICAgICAgfQogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uY2UoZnVuYykgewogICAgICByZXR1cm4gYmVmb3JlKDIsIGZ1bmMpOwogICAgfQogICAgdmFyIHBhcnRpYWwgPSBjcmVhdGVQYXJ0aWFsKFBBUlRJQUxfRkxBRyk7CiAgICB2YXIgcGFydGlhbFJpZ2h0ID0gY3JlYXRlUGFydGlhbChQQVJUSUFMX1JJR0hUX0ZMQUcpOwogICAgdmFyIHJlYXJnID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGZ1bmMsIGluZGV4ZXMpIHsKICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIoZnVuYywgUkVBUkdfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmFzZUZsYXR0ZW4oaW5kZXhlcykpOwogICAgfSk7CiAgICBmdW5jdGlvbiByZXN0UGFyYW0oZnVuYywgc3RhcnQpIHsKICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICAgIH0KICAgICAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogKCtzdGFydCB8fCAwKSwgMCk7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cywKICAgICAgICAgICAgaW5kZXggPSAtMSwKICAgICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLAogICAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKTsKCiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICAgIHJlc3RbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChzdGFydCkgewogICAgICAgICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIHJlc3QpOwogICAgICAgICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3NbMF0sIHJlc3QpOwogICAgICAgICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXMsIGFyZ3NbMF0sIGFyZ3NbMV0sIHJlc3QpOwogICAgICAgIH0KICAgICAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTsKICAgICAgICBpbmRleCA9IC0xOwogICAgICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHsKICAgICAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTsKICAgICAgICB9CiAgICAgICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHJlc3Q7CiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgb3RoZXJBcmdzKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHNwcmVhZChmdW5jKSB7CiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpOwogICAgICB9CiAgICAgIHJldHVybiBmdW5jdGlvbihhcnJheSkgewogICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFycmF5KTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHsKICAgICAgdmFyIGxlYWRpbmcgPSB0cnVlLAogICAgICAgICAgdHJhaWxpbmcgPSB0cnVlOwoKICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7CiAgICAgICAgbGVhZGluZyA9IGZhbHNlOwogICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7CiAgICAgICAgbGVhZGluZyA9ICdsZWFkaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLmxlYWRpbmcgOiBsZWFkaW5nOwogICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7CiAgICAgIH0KICAgICAgcmV0dXJuIGRlYm91bmNlKGZ1bmMsIHdhaXQsIHsgJ2xlYWRpbmcnOiBsZWFkaW5nLCAnbWF4V2FpdCc6ICt3YWl0LCAndHJhaWxpbmcnOiB0cmFpbGluZyB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyYXAodmFsdWUsIHdyYXBwZXIpIHsKICAgICAgd3JhcHBlciA9IHdyYXBwZXIgPT0gbnVsbCA/IGlkZW50aXR5IDogd3JhcHBlcjsKICAgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXIod3JhcHBlciwgUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIFt2YWx1ZV0sIFtdKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lKHZhbHVlLCBpc0RlZXAsIGN1c3RvbWl6ZXIsIHRoaXNBcmcpIHsKICAgICAgaWYgKGlzRGVlcCAmJiB0eXBlb2YgaXNEZWVwICE9ICdib29sZWFuJyAmJiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaXNEZWVwLCBjdXN0b21pemVyKSkgewogICAgICAgIGlzRGVlcCA9IGZhbHNlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGVvZiBpc0RlZXAgPT0gJ2Z1bmN0aW9uJykgewogICAgICAgIHRoaXNBcmcgPSBjdXN0b21pemVyOwogICAgICAgIGN1c3RvbWl6ZXIgPSBpc0RlZXA7CiAgICAgICAgaXNEZWVwID0gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicKICAgICAgICA/IGJhc2VDbG9uZSh2YWx1ZSwgaXNEZWVwLCBiaW5kQ2FsbGJhY2soY3VzdG9taXplciwgdGhpc0FyZywgMSkpCiAgICAgICAgOiBiYXNlQ2xvbmUodmFsdWUsIGlzRGVlcCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZURlZXAodmFsdWUsIGN1c3RvbWl6ZXIsIHRoaXNBcmcpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicKICAgICAgICA/IGJhc2VDbG9uZSh2YWx1ZSwgdHJ1ZSwgYmluZENhbGxiYWNrKGN1c3RvbWl6ZXIsIHRoaXNBcmcsIDEpKQogICAgICAgIDogYmFzZUNsb25lKHZhbHVlLCB0cnVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGd0KHZhbHVlLCBvdGhlcikgewogICAgICByZXR1cm4gdmFsdWUgPiBvdGhlcjsKICAgIH0KICAgIGZ1bmN0aW9uIGd0ZSh2YWx1ZSwgb3RoZXIpIHsKICAgICAgcmV0dXJuIHZhbHVlID49IG90aGVyOwogICAgfQogICAgZnVuY3Rpb24gaXNBcmd1bWVudHModmFsdWUpIHsKICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpICYmCiAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7CiAgICB9CiAgICB2YXIgaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBhcnJheVRhZzsKICAgIH07CiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fCAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBib29sVGFnKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkgewogICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBvYmpUb1N0cmluZy5jYWxsKHZhbHVlKSA9PSBkYXRlVGFnOwogICAgfQogICAgZnVuY3Rpb24gaXNFbGVtZW50KHZhbHVlKSB7CiAgICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlLm5vZGVUeXBlID09PSAxICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzUGxhaW5PYmplY3QodmFsdWUpOwogICAgfQogICAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkgewogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiYgKGlzQXJyYXkodmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHwKICAgICAgICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuc3BsaWNlKSkpKSB7CiAgICAgICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuICFrZXlzKHZhbHVlKS5sZW5ndGg7CiAgICB9CiAgICBmdW5jdGlvbiBpc0VxdWFsKHZhbHVlLCBvdGhlciwgY3VzdG9taXplciwgdGhpc0FyZykgewogICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCAzKSA6IHVuZGVmaW5lZDsKICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7CiAgICAgIHJldHVybiAgcmVzdWx0ID09PSB1bmRlZmluZWQgPyBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7CiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5tZXNzYWdlID09ICdzdHJpbmcnICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IGVycm9yVGFnOwogICAgfQogICAgZnVuY3Rpb24gaXNGaW5pdGUodmFsdWUpIHsKICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiBuYXRpdmVJc0Zpbml0ZSh2YWx1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7CiAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gZnVuY1RhZzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7CiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpOwogICAgfQogICAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplciwgdGhpc0FyZykgewogICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGJpbmRDYWxsYmFjayhjdXN0b21pemVyLCB0aGlzQXJnLCAzKSA6IHVuZGVmaW5lZDsKICAgICAgcmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCwgZ2V0TWF0Y2hEYXRhKHNvdXJjZSksIGN1c3RvbWl6ZXIpOwogICAgfQogICAgZnVuY3Rpb24gaXNOYU4odmFsdWUpIHsKICAgICAgcmV0dXJuIGlzTnVtYmVyKHZhbHVlKSAmJiB2YWx1ZSAhPSArdmFsdWU7CiAgICB9CiAgICBmdW5jdGlvbiBpc05hdGl2ZSh2YWx1ZSkgewogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHsKICAgICAgICByZXR1cm4gcmVJc05hdGl2ZS50ZXN0KGZuVG9TdHJpbmcuY2FsbCh2YWx1ZSkpOwogICAgICB9CiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHJlSXNIb3N0Q3Rvci50ZXN0KHZhbHVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgPT09IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkgewogICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInIHx8IChpc09iamVjdExpa2UodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IG51bWJlclRhZyk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7CiAgICAgIHZhciBDdG9yOwogICAgICBpZiAoIShpc09iamVjdExpa2UodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IG9iamVjdFRhZyAmJiAhaXNBcmd1bWVudHModmFsdWUpKSB8fAogICAgICAgICAgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY29uc3RydWN0b3InKSAmJiAoQ3RvciA9IHZhbHVlLmNvbnN0cnVjdG9yLCB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmICEoQ3RvciBpbnN0YW5jZW9mIEN0b3IpKSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIHJlc3VsdDsKICAgICAgYmFzZUZvckluKHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7CiAgICAgICAgcmVzdWx0ID0ga2V5OwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHJlc3VsdCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1JlZ0V4cCh2YWx1ZSkgewogICAgICByZXR1cm4gaXNPYmplY3QodmFsdWUpICYmIG9ialRvU3RyaW5nLmNhbGwodmFsdWUpID09IHJlZ2V4cFRhZzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7CiAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3RyaW5nVGFnKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVHlwZWRBcnJheSh2YWx1ZSkgewogICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3Nbb2JqVG9TdHJpbmcuY2FsbCh2YWx1ZSldOwogICAgfQogICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7CiAgICB9CiAgICBmdW5jdGlvbiBsdCh2YWx1ZSwgb3RoZXIpIHsKICAgICAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7CiAgICB9CiAgICBmdW5jdGlvbiBsdGUodmFsdWUsIG90aGVyKSB7CiAgICAgIHJldHVybiB2YWx1ZSA8PSBvdGhlcjsKICAgIH0KICAgIGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHsKICAgICAgdmFyIGxlbmd0aCA9IHZhbHVlID8gZ2V0TGVuZ3RoKHZhbHVlKSA6IDA7CiAgICAgIGlmICghaXNMZW5ndGgobGVuZ3RoKSkgewogICAgICAgIHJldHVybiB2YWx1ZXModmFsdWUpOwogICAgICB9CiAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIHJldHVybiBhcnJheUNvcHkodmFsdWUpOwogICAgfQogICAgZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkgewogICAgICByZXR1cm4gYmFzZUNvcHkodmFsdWUsIGtleXNJbih2YWx1ZSkpOwogICAgfQogICAgdmFyIG1lcmdlID0gY3JlYXRlQXNzaWduZXIoYmFzZU1lcmdlKTsKICAgIHZhciBhc3NpZ24gPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikgewogICAgICByZXR1cm4gY3VzdG9taXplcgogICAgICAgID8gYXNzaWduV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikKICAgICAgICA6IGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpOwogICAgfSk7CiAgICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wZXJ0aWVzLCBndWFyZCkgewogICAgICB2YXIgcmVzdWx0ID0gYmFzZUNyZWF0ZShwcm90b3R5cGUpOwogICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwocHJvdG90eXBlLCBwcm9wZXJ0aWVzLCBndWFyZCkpIHsKICAgICAgICBwcm9wZXJ0aWVzID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIHJldHVybiBwcm9wZXJ0aWVzID8gYmFzZUFzc2lnbihyZXN1bHQsIHByb3BlcnRpZXMpIDogcmVzdWx0OwogICAgfQogICAgdmFyIGRlZmF1bHRzID0gY3JlYXRlRGVmYXVsdHMoYXNzaWduLCBhc3NpZ25EZWZhdWx0cyk7CiAgICB2YXIgZGVmYXVsdHNEZWVwID0gY3JlYXRlRGVmYXVsdHMobWVyZ2UsIG1lcmdlRGVmYXVsdHMpOwogICAgdmFyIGZpbmRLZXkgPSBjcmVhdGVGaW5kS2V5KGJhc2VGb3JPd24pOwogICAgdmFyIGZpbmRMYXN0S2V5ID0gY3JlYXRlRmluZEtleShiYXNlRm9yT3duUmlnaHQpOwogICAgdmFyIGZvckluID0gY3JlYXRlRm9ySW4oYmFzZUZvcik7CiAgICB2YXIgZm9ySW5SaWdodCA9IGNyZWF0ZUZvckluKGJhc2VGb3JSaWdodCk7CiAgICB2YXIgZm9yT3duID0gY3JlYXRlRm9yT3duKGJhc2VGb3JPd24pOwogICAgdmFyIGZvck93blJpZ2h0ID0gY3JlYXRlRm9yT3duKGJhc2VGb3JPd25SaWdodCk7CiAgICBmdW5jdGlvbiBmdW5jdGlvbnMob2JqZWN0KSB7CiAgICAgIHJldHVybiBiYXNlRnVuY3Rpb25zKG9iamVjdCwga2V5c0luKG9iamVjdCkpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7CiAgICAgIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCB0b1BhdGgocGF0aCksIHBhdGggKyAnJyk7CiAgICAgIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGhhcyhvYmplY3QsIHBhdGgpIHsKICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcGF0aCk7CiAgICAgIGlmICghcmVzdWx0ICYmICFpc0tleShwYXRoKSkgewogICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICAgICAgb2JqZWN0ID0gcGF0aC5sZW5ndGggPT0gMSA/IG9iamVjdCA6IGJhc2VHZXQob2JqZWN0LCBiYXNlU2xpY2UocGF0aCwgMCwgLTEpKTsKICAgICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcGF0aCA9IGxhc3QocGF0aCk7CiAgICAgICAgcmVzdWx0ID0gaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQgfHwgKGlzTGVuZ3RoKG9iamVjdC5sZW5ndGgpICYmIGlzSW5kZXgocGF0aCwgb2JqZWN0Lmxlbmd0aCkgJiYKICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGludmVydChvYmplY3QsIG11bHRpVmFsdWUsIGd1YXJkKSB7CiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChvYmplY3QsIG11bHRpVmFsdWUsIGd1YXJkKSkgewogICAgICAgIG11bHRpVmFsdWUgPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBwcm9wcyA9IGtleXMob2JqZWN0KSwKICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCwKICAgICAgICAgIHJlc3VsdCA9IHt9OwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdLAogICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldOwoKICAgICAgICBpZiAobXVsdGlWYWx1ZSkgewogICAgICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCB2YWx1ZSkpIHsKICAgICAgICAgICAgcmVzdWx0W3ZhbHVlXS5wdXNoKGtleSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHRbdmFsdWVdID0gW2tleV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgcmVzdWx0W3ZhbHVlXSA9IGtleTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBrZXlzID0gIW5hdGl2ZUtleXMgPyBzaGltS2V5cyA6IGZ1bmN0aW9uKG9iamVjdCkgewogICAgICB2YXIgQ3RvciA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0LmNvbnN0cnVjdG9yOwogICAgICBpZiAoKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUgPT09IG9iamVjdCkgfHwKICAgICAgICAgICh0eXBlb2Ygb2JqZWN0ICE9ICdmdW5jdGlvbicgJiYgaXNBcnJheUxpa2Uob2JqZWN0KSkpIHsKICAgICAgICByZXR1cm4gc2hpbUtleXMob2JqZWN0KTsKICAgICAgfQogICAgICByZXR1cm4gaXNPYmplY3Qob2JqZWN0KSA/IG5hdGl2ZUtleXMob2JqZWN0KSA6IFtdOwogICAgfTsKICAgIGZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHsKICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkgewogICAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpOwogICAgICB9CiAgICAgIHZhciBsZW5ndGggPSBvYmplY3QubGVuZ3RoOwogICAgICBsZW5ndGggPSAobGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYKICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpICYmIGxlbmd0aCkgfHwgMDsKCiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLAogICAgICAgICAgaW5kZXggPSAtMSwKICAgICAgICAgIGlzUHJvdG8gPSB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlID09PSBvYmplY3QsCiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAogICAgICAgICAgc2tpcEluZGV4ZXMgPSBsZW5ndGggPiAwOwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICByZXN1bHRbaW5kZXhdID0gKGluZGV4ICsgJycpOwogICAgICB9CiAgICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHsKICAgICAgICBpZiAoIShza2lwSW5kZXhlcyAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSkgJiYKICAgICAgICAgICAgIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBtYXBLZXlzID0gY3JlYXRlT2JqZWN0TWFwcGVyKHRydWUpOwogICAgdmFyIG1hcFZhbHVlcyA9IGNyZWF0ZU9iamVjdE1hcHBlcigpOwogICAgdmFyIG9taXQgPSByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LCBwcm9wcykgewogICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICByZXR1cm4ge307CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiBwcm9wc1swXSAhPSAnZnVuY3Rpb24nKSB7CiAgICAgICAgdmFyIHByb3BzID0gYXJyYXlNYXAoYmFzZUZsYXR0ZW4ocHJvcHMpLCBTdHJpbmcpOwogICAgICAgIHJldHVybiBwaWNrQnlBcnJheShvYmplY3QsIGJhc2VEaWZmZXJlbmNlKGtleXNJbihvYmplY3QpLCBwcm9wcykpOwogICAgICB9CiAgICAgIHZhciBwcmVkaWNhdGUgPSBiaW5kQ2FsbGJhY2socHJvcHNbMF0sIHByb3BzWzFdLCAzKTsKICAgICAgcmV0dXJuIHBpY2tCeUNhbGxiYWNrKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGtleSwgb2JqZWN0KSB7CiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUsIGtleSwgb2JqZWN0KTsKICAgICAgfSk7CiAgICB9KTsKICAgIGZ1bmN0aW9uIHBhaXJzKG9iamVjdCkgewogICAgICBvYmplY3QgPSB0b09iamVjdChvYmplY3QpOwoKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBwcm9wcyA9IGtleXMob2JqZWN0KSwKICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCwKICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7CgogICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07CiAgICAgICAgcmVzdWx0W2luZGV4XSA9IFtrZXksIG9iamVjdFtrZXldXTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgdmFyIHBpY2sgPSByZXN0UGFyYW0oZnVuY3Rpb24ob2JqZWN0LCBwcm9wcykgewogICAgICBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgICByZXR1cm4ge307CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGVvZiBwcm9wc1swXSA9PSAnZnVuY3Rpb24nCiAgICAgICAgPyBwaWNrQnlDYWxsYmFjayhvYmplY3QsIGJpbmRDYWxsYmFjayhwcm9wc1swXSwgcHJvcHNbMV0sIDMpKQogICAgICAgIDogcGlja0J5QXJyYXkob2JqZWN0LCBiYXNlRmxhdHRlbihwcm9wcykpOwogICAgfSk7CiAgICBmdW5jdGlvbiByZXN1bHQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHsKICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W3BhdGhdOwogICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHsKICAgICAgICBpZiAob2JqZWN0ICE9IG51bGwgJiYgIWlzS2V5KHBhdGgsIG9iamVjdCkpIHsKICAgICAgICAgIHBhdGggPSB0b1BhdGgocGF0aCk7CiAgICAgICAgICBvYmplY3QgPSBwYXRoLmxlbmd0aCA9PSAxID8gb2JqZWN0IDogYmFzZUdldChvYmplY3QsIGJhc2VTbGljZShwYXRoLCAwLCAtMSkpOwogICAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3RbbGFzdChwYXRoKV07CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHJlc3VsdCkgPyByZXN1bHQuY2FsbChvYmplY3QpIDogcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpIHsKICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgfQogICAgICB2YXIgcGF0aEtleSA9IChwYXRoICsgJycpOwogICAgICBwYXRoID0gKG9iamVjdFtwYXRoS2V5XSAhPSBudWxsIHx8IGlzS2V5KHBhdGgsIG9iamVjdCkpID8gW3BhdGhLZXldIDogdG9QYXRoKHBhdGgpOwoKICAgICAgdmFyIGluZGV4ID0gLTEsCiAgICAgICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCwKICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsCiAgICAgICAgICBuZXN0ZWQgPSBvYmplY3Q7CgogICAgICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkgewogICAgICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTsKICAgICAgICBpZiAoaXNPYmplY3QobmVzdGVkKSkgewogICAgICAgICAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkgewogICAgICAgICAgICBuZXN0ZWRba2V5XSA9IHZhbHVlOwogICAgICAgICAgfSBlbHNlIGlmIChuZXN0ZWRba2V5XSA9PSBudWxsKSB7CiAgICAgICAgICAgIG5lc3RlZFtrZXldID0gaXNJbmRleChwYXRoW2luZGV4ICsgMV0pID8gW10gOiB7fTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbmVzdGVkID0gbmVzdGVkW2tleV07CiAgICAgIH0KICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH0KICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgdGhpc0FyZykgewogICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KG9iamVjdCkgfHwgaXNUeXBlZEFycmF5KG9iamVjdCk7CiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDQpOwoKICAgICAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHsKICAgICAgICBpZiAoaXNBcnIgfHwgaXNPYmplY3Qob2JqZWN0KSkgewogICAgICAgICAgdmFyIEN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7CiAgICAgICAgICBpZiAoaXNBcnIpIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0FycmF5KG9iamVjdCkgPyBuZXcgQ3RvciA6IFtdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IgPSBiYXNlQ3JlYXRlKGlzRnVuY3Rpb24oQ3RvcikgPyBDdG9yLnByb3RvdHlwZSA6IHVuZGVmaW5lZCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFjY3VtdWxhdG9yID0ge307CiAgICAgICAgfQogICAgICB9CiAgICAgIChpc0FyciA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHsKICAgICAgICByZXR1cm4gaXRlcmF0ZWUoYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgb2JqZWN0KTsKICAgICAgfSk7CiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgIH0KICAgIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHsKICAgICAgcmV0dXJuIGJhc2VWYWx1ZXMob2JqZWN0LCBrZXlzKG9iamVjdCkpOwogICAgfQogICAgZnVuY3Rpb24gdmFsdWVzSW4ob2JqZWN0KSB7CiAgICAgIHJldHVybiBiYXNlVmFsdWVzKG9iamVjdCwga2V5c0luKG9iamVjdCkpOwogICAgfQogICAgZnVuY3Rpb24gaW5SYW5nZSh2YWx1ZSwgc3RhcnQsIGVuZCkgewogICAgICBzdGFydCA9ICtzdGFydCB8fCAwOwogICAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHsKICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBzdGFydCA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW5kID0gK2VuZCB8fCAwOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZSA+PSBuYXRpdmVNaW4oc3RhcnQsIGVuZCkgJiYgdmFsdWUgPCBuYXRpdmVNYXgoc3RhcnQsIGVuZCk7CiAgICB9CiAgICBmdW5jdGlvbiByYW5kb20obWluLCBtYXgsIGZsb2F0aW5nKSB7CiAgICAgIGlmIChmbG9hdGluZyAmJiBpc0l0ZXJhdGVlQ2FsbChtaW4sIG1heCwgZmxvYXRpbmcpKSB7CiAgICAgICAgbWF4ID0gZmxvYXRpbmcgPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgdmFyIG5vTWluID0gbWluID09IG51bGwsCiAgICAgICAgICBub01heCA9IG1heCA9PSBudWxsOwoKICAgICAgaWYgKGZsb2F0aW5nID09IG51bGwpIHsKICAgICAgICBpZiAobm9NYXggJiYgdHlwZW9mIG1pbiA9PSAnYm9vbGVhbicpIHsKICAgICAgICAgIGZsb2F0aW5nID0gbWluOwogICAgICAgICAgbWluID0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1heCA9PSAnYm9vbGVhbicpIHsKICAgICAgICAgIGZsb2F0aW5nID0gbWF4OwogICAgICAgICAgbm9NYXggPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobm9NaW4gJiYgbm9NYXgpIHsKICAgICAgICBtYXggPSAxOwogICAgICAgIG5vTWF4ID0gZmFsc2U7CiAgICAgIH0KICAgICAgbWluID0gK21pbiB8fCAwOwogICAgICBpZiAobm9NYXgpIHsKICAgICAgICBtYXggPSBtaW47CiAgICAgICAgbWluID0gMDsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXggPSArbWF4IHx8IDA7CiAgICAgIH0KICAgICAgaWYgKGZsb2F0aW5nIHx8IG1pbiAlIDEgfHwgbWF4ICUgMSkgewogICAgICAgIHZhciByYW5kID0gbmF0aXZlUmFuZG9tKCk7CiAgICAgICAgcmV0dXJuIG5hdGl2ZU1pbihtaW4gKyAocmFuZCAqIChtYXggLSBtaW4gKyBwYXJzZUZsb2F0KCcxZS0nICsgKChyYW5kICsgJycpLmxlbmd0aCAtIDEpKSkpLCBtYXgpOwogICAgICB9CiAgICAgIHJldHVybiBiYXNlUmFuZG9tKG1pbiwgbWF4KTsKICAgIH0KICAgIHZhciBjYW1lbENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHsKICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTsKICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICh3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKSkgOiB3b3JkKTsKICAgIH0pOwogICAgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHJpbmcpIHsKICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7CiAgICAgIHJldHVybiBzdHJpbmcgJiYgKHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKSk7CiAgICB9CiAgICBmdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKSB7CiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpOwogICAgICByZXR1cm4gc3RyaW5nICYmIHN0cmluZy5yZXBsYWNlKHJlTGF0aW4xLCBkZWJ1cnJMZXR0ZXIpLnJlcGxhY2UocmVDb21ib01hcmssICcnKTsKICAgIH0KICAgIGZ1bmN0aW9uIGVuZHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikgewogICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgdGFyZ2V0ID0gKHRhcmdldCArICcnKTsKCiAgICAgIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09PSB1bmRlZmluZWQKICAgICAgICA/IGxlbmd0aAogICAgICAgIDogbmF0aXZlTWluKHBvc2l0aW9uIDwgMCA/IDAgOiAoK3Bvc2l0aW9uIHx8IDApLCBsZW5ndGgpOwoKICAgICAgcG9zaXRpb24gLT0gdGFyZ2V0Lmxlbmd0aDsKICAgICAgcmV0dXJuIHBvc2l0aW9uID49IDAgJiYgc3RyaW5nLmluZGV4T2YodGFyZ2V0LCBwb3NpdGlvbikgPT0gcG9zaXRpb247CiAgICB9CiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7CiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpOwogICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKQogICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVVbmVzY2FwZWRIdG1sLCBlc2NhcGVIdG1sQ2hhcikKICAgICAgICA6IHN0cmluZzsKICAgIH0KICAgIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmcpIHsKICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7CiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzUmVnRXhwQ2hhcnMudGVzdChzdHJpbmcpKQogICAgICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFycywgZXNjYXBlUmVnRXhwQ2hhcikKICAgICAgICA6IChzdHJpbmcgfHwgJyg/OiknKTsKICAgIH0KICAgIHZhciBrZWJhYkNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHsKICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICctJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTsKICAgIH0pOwogICAgZnVuY3Rpb24gcGFkKHN0cmluZywgbGVuZ3RoLCBjaGFycykgewogICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgbGVuZ3RoID0gK2xlbmd0aDsKCiAgICAgIHZhciBzdHJMZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgICBpZiAoc3RyTGVuZ3RoID49IGxlbmd0aCB8fCAhbmF0aXZlSXNGaW5pdGUobGVuZ3RoKSkgewogICAgICAgIHJldHVybiBzdHJpbmc7CiAgICAgIH0KICAgICAgdmFyIG1pZCA9IChsZW5ndGggLSBzdHJMZW5ndGgpIC8gMiwKICAgICAgICAgIGxlZnRMZW5ndGggPSBuYXRpdmVGbG9vcihtaWQpLAogICAgICAgICAgcmlnaHRMZW5ndGggPSBuYXRpdmVDZWlsKG1pZCk7CgogICAgICBjaGFycyA9IGNyZWF0ZVBhZGRpbmcoJycsIHJpZ2h0TGVuZ3RoLCBjaGFycyk7CiAgICAgIHJldHVybiBjaGFycy5zbGljZSgwLCBsZWZ0TGVuZ3RoKSArIHN0cmluZyArIGNoYXJzOwogICAgfQogICAgdmFyIHBhZExlZnQgPSBjcmVhdGVQYWREaXIoKTsKICAgIHZhciBwYWRSaWdodCA9IGNyZWF0ZVBhZERpcih0cnVlKTsKICAgIGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgsIGd1YXJkKSB7CiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgcmFkaXgsIGd1YXJkKSA6IHJhZGl4ID09IG51bGwpIHsKICAgICAgICByYWRpeCA9IDA7CiAgICAgIH0gZWxzZSBpZiAocmFkaXgpIHsKICAgICAgICByYWRpeCA9ICtyYWRpeDsKICAgICAgfQogICAgICBzdHJpbmcgPSB0cmltKHN0cmluZyk7CiAgICAgIHJldHVybiBuYXRpdmVQYXJzZUludChzdHJpbmcsIHJhZGl4IHx8IChyZUhhc0hleFByZWZpeC50ZXN0KHN0cmluZykgPyAxNiA6IDEwKSk7CiAgICB9CiAgICBmdW5jdGlvbiByZXBlYXQoc3RyaW5nLCBuKSB7CiAgICAgIHZhciByZXN1bHQgPSAnJzsKICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7CiAgICAgIG4gPSArbjsKICAgICAgaWYgKG4gPCAxIHx8ICFzdHJpbmcgfHwgIW5hdGl2ZUlzRmluaXRlKG4pKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICBkbyB7CiAgICAgICAgaWYgKG4gJSAyKSB7CiAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nOwogICAgICAgIH0KICAgICAgICBuID0gbmF0aXZlRmxvb3IobiAvIDIpOwogICAgICAgIHN0cmluZyArPSBzdHJpbmc7CiAgICAgIH0gd2hpbGUgKG4pOwoKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBzbmFrZUNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHsKICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTsKICAgIH0pOwogICAgdmFyIHN0YXJ0Q2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkgewogICAgICByZXR1cm4gcmVzdWx0ICsgKGluZGV4ID8gJyAnIDogJycpICsgKHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKTsKICAgIH0pOwogICAgZnVuY3Rpb24gc3RhcnRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHsKICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7CiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT0gbnVsbAogICAgICAgID8gMAogICAgICAgIDogbmF0aXZlTWluKHBvc2l0aW9uIDwgMCA/IDAgOiAoK3Bvc2l0aW9uIHx8IDApLCBzdHJpbmcubGVuZ3RoKTsKCiAgICAgIHJldHVybiBzdHJpbmcubGFzdEluZGV4T2YodGFyZ2V0LCBwb3NpdGlvbikgPT0gcG9zaXRpb247CiAgICB9CiAgICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHJpbmcsIG9wdGlvbnMsIG90aGVyT3B0aW9ucykgewogICAgICB2YXIgc2V0dGluZ3MgPSBsb2Rhc2gudGVtcGxhdGVTZXR0aW5nczsKCiAgICAgIGlmIChvdGhlck9wdGlvbnMgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBvdGhlck9wdGlvbnMpKSB7CiAgICAgICAgb3B0aW9ucyA9IG90aGVyT3B0aW9ucyA9IHVuZGVmaW5lZDsKICAgICAgfQogICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgb3B0aW9ucyA9IGFzc2lnbldpdGgoYmFzZUFzc2lnbih7fSwgb3RoZXJPcHRpb25zIHx8IG9wdGlvbnMpLCBzZXR0aW5ncywgYXNzaWduT3duRGVmYXVsdHMpOwoKICAgICAgdmFyIGltcG9ydHMgPSBhc3NpZ25XaXRoKGJhc2VBc3NpZ24oe30sIG9wdGlvbnMuaW1wb3J0cyksIHNldHRpbmdzLmltcG9ydHMsIGFzc2lnbk93bkRlZmF1bHRzKSwKICAgICAgICAgIGltcG9ydHNLZXlzID0ga2V5cyhpbXBvcnRzKSwKICAgICAgICAgIGltcG9ydHNWYWx1ZXMgPSBiYXNlVmFsdWVzKGltcG9ydHMsIGltcG9ydHNLZXlzKTsKCiAgICAgIHZhciBpc0VzY2FwaW5nLAogICAgICAgICAgaXNFdmFsdWF0aW5nLAogICAgICAgICAgaW5kZXggPSAwLAogICAgICAgICAgaW50ZXJwb2xhdGUgPSBvcHRpb25zLmludGVycG9sYXRlIHx8IHJlTm9NYXRjaCwKICAgICAgICAgIHNvdXJjZSA9ICJfX3AgKz0gJyI7CiAgICAgIHZhciByZURlbGltaXRlcnMgPSBSZWdFeHAoCiAgICAgICAgKG9wdGlvbnMuZXNjYXBlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICsKICAgICAgICBpbnRlcnBvbGF0ZS5zb3VyY2UgKyAnfCcgKwogICAgICAgIChpbnRlcnBvbGF0ZSA9PT0gcmVJbnRlcnBvbGF0ZSA/IHJlRXNUZW1wbGF0ZSA6IHJlTm9NYXRjaCkuc291cmNlICsgJ3wnICsKICAgICAgICAob3B0aW9ucy5ldmFsdWF0ZSB8fCByZU5vTWF0Y2gpLnNvdXJjZSArICd8JCcKICAgICAgLCAnZycpOwogICAgICB2YXIgc291cmNlVVJMID0gJy8vIyBzb3VyY2VVUkw9JyArCiAgICAgICAgKCdzb3VyY2VVUkwnIGluIG9wdGlvbnMKICAgICAgICAgID8gb3B0aW9ucy5zb3VyY2VVUkwKICAgICAgICAgIDogKCdsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWycgKyAoKyt0ZW1wbGF0ZUNvdW50ZXIpICsgJ10nKQogICAgICAgICkgKyAnXG4nOwoKICAgICAgc3RyaW5nLnJlcGxhY2UocmVEZWxpbWl0ZXJzLCBmdW5jdGlvbihtYXRjaCwgZXNjYXBlVmFsdWUsIGludGVycG9sYXRlVmFsdWUsIGVzVGVtcGxhdGVWYWx1ZSwgZXZhbHVhdGVWYWx1ZSwgb2Zmc2V0KSB7CiAgICAgICAgaW50ZXJwb2xhdGVWYWx1ZSB8fCAoaW50ZXJwb2xhdGVWYWx1ZSA9IGVzVGVtcGxhdGVWYWx1ZSk7CiAgICAgICAgc291cmNlICs9IHN0cmluZy5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKHJlVW5lc2NhcGVkU3RyaW5nLCBlc2NhcGVTdHJpbmdDaGFyKTsKICAgICAgICBpZiAoZXNjYXBlVmFsdWUpIHsKICAgICAgICAgIGlzRXNjYXBpbmcgPSB0cnVlOwogICAgICAgICAgc291cmNlICs9ICInICtcbl9fZSgiICsgZXNjYXBlVmFsdWUgKyAiKSArXG4nIjsKICAgICAgICB9CiAgICAgICAgaWYgKGV2YWx1YXRlVmFsdWUpIHsKICAgICAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7CiAgICAgICAgICBzb3VyY2UgKz0gIic7XG4iICsgZXZhbHVhdGVWYWx1ZSArICI7XG5fX3AgKz0gJyI7CiAgICAgICAgfQogICAgICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7CiAgICAgICAgICBzb3VyY2UgKz0gIicgK1xuKChfX3QgPSAoIiArIGludGVycG9sYXRlVmFsdWUgKyAiKSkgPT0gbnVsbCA/ICcnIDogX190KSArXG4nIjsKICAgICAgICB9CiAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7CiAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgICB9KTsKCiAgICAgIHNvdXJjZSArPSAiJztcbiI7CiAgICAgIHZhciB2YXJpYWJsZSA9IG9wdGlvbnMudmFyaWFibGU7CiAgICAgIGlmICghdmFyaWFibGUpIHsKICAgICAgICBzb3VyY2UgPSAnd2l0aCAob2JqKSB7XG4nICsgc291cmNlICsgJ1xufVxuJzsKICAgICAgfQogICAgICBzb3VyY2UgPSAoaXNFdmFsdWF0aW5nID8gc291cmNlLnJlcGxhY2UocmVFbXB0eVN0cmluZ0xlYWRpbmcsICcnKSA6IHNvdXJjZSkKICAgICAgICAucmVwbGFjZShyZUVtcHR5U3RyaW5nTWlkZGxlLCAnJDEnKQogICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywgJyQxOycpOwogICAgICBzb3VyY2UgPSAnZnVuY3Rpb24oJyArICh2YXJpYWJsZSB8fCAnb2JqJykgKyAnKSB7XG4nICsKICAgICAgICAodmFyaWFibGUKICAgICAgICAgID8gJycKICAgICAgICAgIDogJ29iaiB8fCAob2JqID0ge30pO1xuJwogICAgICAgICkgKwogICAgICAgICJ2YXIgX190LCBfX3AgPSAnJyIgKwogICAgICAgIChpc0VzY2FwaW5nCiAgICAgICAgICAgPyAnLCBfX2UgPSBfLmVzY2FwZScKICAgICAgICAgICA6ICcnCiAgICAgICAgKSArCiAgICAgICAgKGlzRXZhbHVhdGluZwogICAgICAgICAgPyAnLCBfX2ogPSBBcnJheS5wcm90b3R5cGUuam9pbjtcbicgKwogICAgICAgICAgICAiZnVuY3Rpb24gcHJpbnQoKSB7IF9fcCArPSBfX2ouY2FsbChhcmd1bWVudHMsICcnKSB9XG4iCiAgICAgICAgICA6ICc7XG4nCiAgICAgICAgKSArCiAgICAgICAgc291cmNlICsKICAgICAgICAncmV0dXJuIF9fcFxufSc7CgogICAgICB2YXIgcmVzdWx0ID0gYXR0ZW1wdChmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSkuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRzVmFsdWVzKTsKICAgICAgfSk7CiAgICAgIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7CiAgICAgIGlmIChpc0Vycm9yKHJlc3VsdCkpIHsKICAgICAgICB0aHJvdyByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHRyaW0oc3RyaW5nLCBjaGFycywgZ3VhcmQpIHsKICAgICAgdmFyIHZhbHVlID0gc3RyaW5nOwogICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgaWYgKCFzdHJpbmcpIHsKICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgICB9CiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBjaGFycywgZ3VhcmQpIDogY2hhcnMgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UodHJpbW1lZExlZnRJbmRleChzdHJpbmcpLCB0cmltbWVkUmlnaHRJbmRleChzdHJpbmcpICsgMSk7CiAgICAgIH0KICAgICAgY2hhcnMgPSAoY2hhcnMgKyAnJyk7CiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoY2hhcnNMZWZ0SW5kZXgoc3RyaW5nLCBjaGFycyksIGNoYXJzUmlnaHRJbmRleChzdHJpbmcsIGNoYXJzKSArIDEpOwogICAgfQogICAgZnVuY3Rpb24gdHJpbUxlZnQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHsKICAgICAgdmFyIHZhbHVlID0gc3RyaW5nOwogICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgaWYgKCFzdHJpbmcpIHsKICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgICB9CiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBjaGFycywgZ3VhcmQpIDogY2hhcnMgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UodHJpbW1lZExlZnRJbmRleChzdHJpbmcpKTsKICAgICAgfQogICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKGNoYXJzTGVmdEluZGV4KHN0cmluZywgKGNoYXJzICsgJycpKSk7CiAgICB9CiAgICBmdW5jdGlvbiB0cmltUmlnaHQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHsKICAgICAgdmFyIHZhbHVlID0gc3RyaW5nOwogICAgICBzdHJpbmcgPSBiYXNlVG9TdHJpbmcoc3RyaW5nKTsKICAgICAgaWYgKCFzdHJpbmcpIHsKICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgICB9CiAgICAgIGlmIChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBjaGFycywgZ3VhcmQpIDogY2hhcnMgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZFJpZ2h0SW5kZXgoc3RyaW5nKSArIDEpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmcuc2xpY2UoMCwgY2hhcnNSaWdodEluZGV4KHN0cmluZywgKGNoYXJzICsgJycpKSArIDEpOwogICAgfQogICAgZnVuY3Rpb24gdHJ1bmMoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkgewogICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkpIHsKICAgICAgICBvcHRpb25zID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIHZhciBsZW5ndGggPSBERUZBVUxUX1RSVU5DX0xFTkdUSCwKICAgICAgICAgIG9taXNzaW9uID0gREVGQVVMVF9UUlVOQ19PTUlTU0lPTjsKCiAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHsKICAgICAgICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHsKICAgICAgICAgIHZhciBzZXBhcmF0b3IgPSAnc2VwYXJhdG9yJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zZXBhcmF0b3IgOiBzZXBhcmF0b3I7CiAgICAgICAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gKCtvcHRpb25zLmxlbmd0aCB8fCAwKSA6IGxlbmd0aDsKICAgICAgICAgIG9taXNzaW9uID0gJ29taXNzaW9uJyBpbiBvcHRpb25zID8gYmFzZVRvU3RyaW5nKG9wdGlvbnMub21pc3Npb24pIDogb21pc3Npb247CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxlbmd0aCA9ICtvcHRpb25zIHx8IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpOwogICAgICBpZiAobGVuZ3RoID49IHN0cmluZy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gc3RyaW5nOwogICAgICB9CiAgICAgIHZhciBlbmQgPSBsZW5ndGggLSBvbWlzc2lvbi5sZW5ndGg7CiAgICAgIGlmIChlbmQgPCAxKSB7CiAgICAgICAgcmV0dXJuIG9taXNzaW9uOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBzdHJpbmcuc2xpY2UoMCwgZW5kKTsKICAgICAgaWYgKHNlcGFyYXRvciA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uOwogICAgICB9CiAgICAgIGlmIChpc1JlZ0V4cChzZXBhcmF0b3IpKSB7CiAgICAgICAgaWYgKHN0cmluZy5zbGljZShlbmQpLnNlYXJjaChzZXBhcmF0b3IpKSB7CiAgICAgICAgICB2YXIgbWF0Y2gsCiAgICAgICAgICAgICAgbmV3RW5kLAogICAgICAgICAgICAgIHN1YnN0cmluZyA9IHN0cmluZy5zbGljZSgwLCBlbmQpOwoKICAgICAgICAgIGlmICghc2VwYXJhdG9yLmdsb2JhbCkgewogICAgICAgICAgICBzZXBhcmF0b3IgPSBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpIHx8ICcnKSArICdnJyk7CiAgICAgICAgICB9CiAgICAgICAgICBzZXBhcmF0b3IubGFzdEluZGV4ID0gMDsKICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkgewogICAgICAgICAgICBuZXdFbmQgPSBtYXRjaC5pbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBuZXdFbmQgPT0gbnVsbCA/IGVuZCA6IG5ld0VuZCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmluZy5pbmRleE9mKHNlcGFyYXRvciwgZW5kKSAhPSBlbmQpIHsKICAgICAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTsKICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGluZGV4KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uOwogICAgfQogICAgZnVuY3Rpb24gdW5lc2NhcGUoc3RyaW5nKSB7CiAgICAgIHN0cmluZyA9IGJhc2VUb1N0cmluZyhzdHJpbmcpOwogICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc0VzY2FwZWRIdG1sLnRlc3Qoc3RyaW5nKSkKICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsIHVuZXNjYXBlSHRtbENoYXIpCiAgICAgICAgOiBzdHJpbmc7CiAgICB9CiAgICBmdW5jdGlvbiB3b3JkcyhzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSB7CiAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIHBhdHRlcm4sIGd1YXJkKSkgewogICAgICAgIHBhdHRlcm4gPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgc3RyaW5nID0gYmFzZVRvU3RyaW5nKHN0cmluZyk7CiAgICAgIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybiB8fCByZVdvcmRzKSB8fCBbXTsKICAgIH0KICAgIHZhciBhdHRlbXB0ID0gcmVzdFBhcmFtKGZ1bmN0aW9uKGZ1bmMsIGFyZ3MpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOwogICAgICB9IGNhdGNoKGUpIHsKICAgICAgICByZXR1cm4gaXNFcnJvcihlKSA/IGUgOiBuZXcgRXJyb3IoZSk7CiAgICAgIH0KICAgIH0pOwogICAgZnVuY3Rpb24gY2FsbGJhY2soZnVuYywgdGhpc0FyZywgZ3VhcmQpIHsKICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGZ1bmMsIHRoaXNBcmcsIGd1YXJkKSkgewogICAgICAgIHRoaXNBcmcgPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZShmdW5jKQogICAgICAgID8gbWF0Y2hlcyhmdW5jKQogICAgICAgIDogYmFzZUNhbGxiYWNrKGZ1bmMsIHRoaXNBcmcpOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hdGNoZXMoc291cmNlKSB7CiAgICAgIHJldHVybiBiYXNlTWF0Y2hlcyhiYXNlQ2xvbmUoc291cmNlLCB0cnVlKSk7CiAgICB9CiAgICBmdW5jdGlvbiBtYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHsKICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgYmFzZUNsb25lKHNyY1ZhbHVlLCB0cnVlKSk7CiAgICB9CiAgICB2YXIgbWV0aG9kID0gcmVzdFBhcmFtKGZ1bmN0aW9uKHBhdGgsIGFyZ3MpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkgewogICAgICAgIHJldHVybiBpbnZva2VQYXRoKG9iamVjdCwgcGF0aCwgYXJncyk7CiAgICAgIH07CiAgICB9KTsKICAgIHZhciBtZXRob2RPZiA9IHJlc3RQYXJhbShmdW5jdGlvbihvYmplY3QsIGFyZ3MpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHsKICAgICAgICByZXR1cm4gaW52b2tlUGF0aChvYmplY3QsIHBhdGgsIGFyZ3MpOwogICAgICB9OwogICAgfSk7CiAgICBmdW5jdGlvbiBtaXhpbihvYmplY3QsIHNvdXJjZSwgb3B0aW9ucykgewogICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgdmFyIGlzT2JqID0gaXNPYmplY3Qoc291cmNlKSwKICAgICAgICAgICAgcHJvcHMgPSBpc09iaiA/IGtleXMoc291cmNlKSA6IHVuZGVmaW5lZCwKICAgICAgICAgICAgbWV0aG9kTmFtZXMgPSAocHJvcHMgJiYgcHJvcHMubGVuZ3RoKSA/IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcykgOiB1bmRlZmluZWQ7CgogICAgICAgIGlmICghKG1ldGhvZE5hbWVzID8gbWV0aG9kTmFtZXMubGVuZ3RoIDogaXNPYmopKSB7CiAgICAgICAgICBtZXRob2ROYW1lcyA9IGZhbHNlOwogICAgICAgICAgb3B0aW9ucyA9IHNvdXJjZTsKICAgICAgICAgIHNvdXJjZSA9IG9iamVjdDsKICAgICAgICAgIG9iamVjdCA9IHRoaXM7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghbWV0aG9kTmFtZXMpIHsKICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBrZXlzKHNvdXJjZSkpOwogICAgICB9CiAgICAgIHZhciBjaGFpbiA9IHRydWUsCiAgICAgICAgICBpbmRleCA9IC0xLAogICAgICAgICAgaXNGdW5jID0gaXNGdW5jdGlvbihvYmplY3QpLAogICAgICAgICAgbGVuZ3RoID0gbWV0aG9kTmFtZXMubGVuZ3RoOwoKICAgICAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSB7CiAgICAgICAgY2hhaW4gPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHsKICAgICAgICBjaGFpbiA9IG9wdGlvbnMuY2hhaW47CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICB2YXIgbWV0aG9kTmFtZSA9IG1ldGhvZE5hbWVzW2luZGV4XSwKICAgICAgICAgICAgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTsKCiAgICAgICAgb2JqZWN0W21ldGhvZE5hbWVdID0gZnVuYzsKICAgICAgICBpZiAoaXNGdW5jKSB7CiAgICAgICAgICBvYmplY3QucHJvdG90eXBlW21ldGhvZE5hbWVdID0gKGZ1bmN0aW9uKGZ1bmMpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fOwogICAgICAgICAgICAgIGlmIChjaGFpbiB8fCBjaGFpbkFsbCkgewogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCh0aGlzLl9fd3JhcHBlZF9fKSwKICAgICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gYXJyYXlDb3B5KHRoaXMuX19hY3Rpb25zX18pOwoKICAgICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7ICdmdW5jJzogZnVuYywgJ2FyZ3MnOiBhcmd1bWVudHMsICd0aGlzQXJnJzogb2JqZWN0IH0pOwogICAgICAgICAgICAgICAgcmVzdWx0Ll9fY2hhaW5fXyA9IGNoYWluQWxsOwogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkob2JqZWN0LCBhcnJheVB1c2goW3RoaXMudmFsdWUoKV0sIGFyZ3VtZW50cykpOwogICAgICAgICAgICB9OwogICAgICAgICAgfShmdW5jKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9CiAgICBmdW5jdGlvbiBub0NvbmZsaWN0KCkgewogICAgICByb290Ll8gPSBvbGREYXNoOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGZ1bmN0aW9uIG5vb3AoKSB7CiAgICB9CiAgICBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7CiAgICAgIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eShwYXRoKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iamVjdCkgewogICAgICByZXR1cm4gZnVuY3Rpb24ocGF0aCkgewogICAgICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgdG9QYXRoKHBhdGgpLCBwYXRoICsgJycpOwogICAgICB9OwogICAgfQogICAgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCkgewogICAgICBpZiAoc3RlcCAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkgewogICAgICAgIGVuZCA9IHN0ZXAgPSB1bmRlZmluZWQ7CiAgICAgIH0KICAgICAgc3RhcnQgPSArc3RhcnQgfHwgMDsKICAgICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiAoK3N0ZXAgfHwgMCk7CgogICAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgICBlbmQgPSBzdGFydDsKICAgICAgICBzdGFydCA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW5kID0gK2VuZCB8fCAwOwogICAgICB9CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KG5hdGl2ZUNlaWwoKGVuZCAtIHN0YXJ0KSAvIChzdGVwIHx8IDEpKSwgMCksCiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpOwoKICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHsKICAgICAgICByZXN1bHRbaW5kZXhdID0gc3RhcnQ7CiAgICAgICAgc3RhcnQgKz0gc3RlcDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gdGltZXMobiwgaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgbiA9IG5hdGl2ZUZsb29yKG4pOwogICAgICBpZiAobiA8IDEgfHwgIW5hdGl2ZUlzRmluaXRlKG4pKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICAgIHZhciBpbmRleCA9IC0xLAogICAgICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlTWluKG4sIE1BWF9BUlJBWV9MRU5HVEgpKTsKCiAgICAgIGl0ZXJhdGVlID0gYmluZENhbGxiYWNrKGl0ZXJhdGVlLCB0aGlzQXJnLCAxKTsKICAgICAgd2hpbGUgKCsraW5kZXggPCBuKSB7CiAgICAgICAgaWYgKGluZGV4IDwgTUFYX0FSUkFZX0xFTkdUSCkgewogICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXRlcmF0ZWUoaW5kZXgpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7CiAgICAgIHZhciBpZCA9ICsraWRDb3VudGVyOwogICAgICByZXR1cm4gYmFzZVRvU3RyaW5nKHByZWZpeCkgKyBpZDsKICAgIH0KICAgIGZ1bmN0aW9uIGFkZChhdWdlbmQsIGFkZGVuZCkgewogICAgICByZXR1cm4gKCthdWdlbmQgfHwgMCkgKyAoK2FkZGVuZCB8fCAwKTsKICAgIH0KICAgIHZhciBjZWlsID0gY3JlYXRlUm91bmQoJ2NlaWwnKTsKICAgIHZhciBmbG9vciA9IGNyZWF0ZVJvdW5kKCdmbG9vcicpOwogICAgdmFyIG1heCA9IGNyZWF0ZUV4dHJlbXVtKGd0LCBORUdBVElWRV9JTkZJTklUWSk7CiAgICB2YXIgbWluID0gY3JlYXRlRXh0cmVtdW0obHQsIFBPU0lUSVZFX0lORklOSVRZKTsKICAgIHZhciByb3VuZCA9IGNyZWF0ZVJvdW5kKCdyb3VuZCcpOwogICAgZnVuY3Rpb24gc3VtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSB7CiAgICAgIGlmICh0aGlzQXJnICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCB0aGlzQXJnKSkgewogICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkOwogICAgICB9CiAgICAgIGl0ZXJhdGVlID0gZ2V0Q2FsbGJhY2soaXRlcmF0ZWUsIHRoaXNBcmcsIDMpOwogICAgICByZXR1cm4gaXRlcmF0ZWUubGVuZ3RoID09IDEKICAgICAgICA/IGFycmF5U3VtKGlzQXJyYXkoY29sbGVjdGlvbikgPyBjb2xsZWN0aW9uIDogdG9JdGVyYWJsZShjb2xsZWN0aW9uKSwgaXRlcmF0ZWUpCiAgICAgICAgOiBiYXNlU3VtKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTsKICAgIH0KICAgIGxvZGFzaC5wcm90b3R5cGUgPSBiYXNlTG9kYXNoLnByb3RvdHlwZTsKCiAgICBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpOwogICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyOwoKICAgIExhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpOwogICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7CiAgICBNYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwRGVsZXRlOwogICAgTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcEdldDsKICAgIE1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBIYXM7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwU2V0OwogICAgU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBjYWNoZVB1c2g7CiAgICBtZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7CiAgICBsb2Rhc2guYWZ0ZXIgPSBhZnRlcjsKICAgIGxvZGFzaC5hcnkgPSBhcnk7CiAgICBsb2Rhc2guYXNzaWduID0gYXNzaWduOwogICAgbG9kYXNoLmF0ID0gYXQ7CiAgICBsb2Rhc2guYmVmb3JlID0gYmVmb3JlOwogICAgbG9kYXNoLmJpbmQgPSBiaW5kOwogICAgbG9kYXNoLmJpbmRBbGwgPSBiaW5kQWxsOwogICAgbG9kYXNoLmJpbmRLZXkgPSBiaW5kS2V5OwogICAgbG9kYXNoLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICBsb2Rhc2guY2hhaW4gPSBjaGFpbjsKICAgIGxvZGFzaC5jaHVuayA9IGNodW5rOwogICAgbG9kYXNoLmNvbXBhY3QgPSBjb21wYWN0OwogICAgbG9kYXNoLmNvbnN0YW50ID0gY29uc3RhbnQ7CiAgICBsb2Rhc2guY291bnRCeSA9IGNvdW50Qnk7CiAgICBsb2Rhc2guY3JlYXRlID0gY3JlYXRlOwogICAgbG9kYXNoLmN1cnJ5ID0gY3Vycnk7CiAgICBsb2Rhc2guY3VycnlSaWdodCA9IGN1cnJ5UmlnaHQ7CiAgICBsb2Rhc2guZGVib3VuY2UgPSBkZWJvdW5jZTsKICAgIGxvZGFzaC5kZWZhdWx0cyA9IGRlZmF1bHRzOwogICAgbG9kYXNoLmRlZmF1bHRzRGVlcCA9IGRlZmF1bHRzRGVlcDsKICAgIGxvZGFzaC5kZWZlciA9IGRlZmVyOwogICAgbG9kYXNoLmRlbGF5ID0gZGVsYXk7CiAgICBsb2Rhc2guZGlmZmVyZW5jZSA9IGRpZmZlcmVuY2U7CiAgICBsb2Rhc2guZHJvcCA9IGRyb3A7CiAgICBsb2Rhc2guZHJvcFJpZ2h0ID0gZHJvcFJpZ2h0OwogICAgbG9kYXNoLmRyb3BSaWdodFdoaWxlID0gZHJvcFJpZ2h0V2hpbGU7CiAgICBsb2Rhc2guZHJvcFdoaWxlID0gZHJvcFdoaWxlOwogICAgbG9kYXNoLmZpbGwgPSBmaWxsOwogICAgbG9kYXNoLmZpbHRlciA9IGZpbHRlcjsKICAgIGxvZGFzaC5mbGF0dGVuID0gZmxhdHRlbjsKICAgIGxvZGFzaC5mbGF0dGVuRGVlcCA9IGZsYXR0ZW5EZWVwOwogICAgbG9kYXNoLmZsb3cgPSBmbG93OwogICAgbG9kYXNoLmZsb3dSaWdodCA9IGZsb3dSaWdodDsKICAgIGxvZGFzaC5mb3JFYWNoID0gZm9yRWFjaDsKICAgIGxvZGFzaC5mb3JFYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7CiAgICBsb2Rhc2guZm9ySW4gPSBmb3JJbjsKICAgIGxvZGFzaC5mb3JJblJpZ2h0ID0gZm9ySW5SaWdodDsKICAgIGxvZGFzaC5mb3JPd24gPSBmb3JPd247CiAgICBsb2Rhc2guZm9yT3duUmlnaHQgPSBmb3JPd25SaWdodDsKICAgIGxvZGFzaC5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7CiAgICBsb2Rhc2guZ3JvdXBCeSA9IGdyb3VwQnk7CiAgICBsb2Rhc2guaW5kZXhCeSA9IGluZGV4Qnk7CiAgICBsb2Rhc2guaW5pdGlhbCA9IGluaXRpYWw7CiAgICBsb2Rhc2guaW50ZXJzZWN0aW9uID0gaW50ZXJzZWN0aW9uOwogICAgbG9kYXNoLmludmVydCA9IGludmVydDsKICAgIGxvZGFzaC5pbnZva2UgPSBpbnZva2U7CiAgICBsb2Rhc2gua2V5cyA9IGtleXM7CiAgICBsb2Rhc2gua2V5c0luID0ga2V5c0luOwogICAgbG9kYXNoLm1hcCA9IG1hcDsKICAgIGxvZGFzaC5tYXBLZXlzID0gbWFwS2V5czsKICAgIGxvZGFzaC5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7CiAgICBsb2Rhc2gubWF0Y2hlcyA9IG1hdGNoZXM7CiAgICBsb2Rhc2gubWF0Y2hlc1Byb3BlcnR5ID0gbWF0Y2hlc1Byb3BlcnR5OwogICAgbG9kYXNoLm1lbW9pemUgPSBtZW1vaXplOwogICAgbG9kYXNoLm1lcmdlID0gbWVyZ2U7CiAgICBsb2Rhc2gubWV0aG9kID0gbWV0aG9kOwogICAgbG9kYXNoLm1ldGhvZE9mID0gbWV0aG9kT2Y7CiAgICBsb2Rhc2gubWl4aW4gPSBtaXhpbjsKICAgIGxvZGFzaC5tb2RBcmdzID0gbW9kQXJnczsKICAgIGxvZGFzaC5uZWdhdGUgPSBuZWdhdGU7CiAgICBsb2Rhc2gub21pdCA9IG9taXQ7CiAgICBsb2Rhc2gub25jZSA9IG9uY2U7CiAgICBsb2Rhc2gucGFpcnMgPSBwYWlyczsKICAgIGxvZGFzaC5wYXJ0aWFsID0gcGFydGlhbDsKICAgIGxvZGFzaC5wYXJ0aWFsUmlnaHQgPSBwYXJ0aWFsUmlnaHQ7CiAgICBsb2Rhc2gucGFydGl0aW9uID0gcGFydGl0aW9uOwogICAgbG9kYXNoLnBpY2sgPSBwaWNrOwogICAgbG9kYXNoLnBsdWNrID0gcGx1Y2s7CiAgICBsb2Rhc2gucHJvcGVydHkgPSBwcm9wZXJ0eTsKICAgIGxvZGFzaC5wcm9wZXJ0eU9mID0gcHJvcGVydHlPZjsKICAgIGxvZGFzaC5wdWxsID0gcHVsbDsKICAgIGxvZGFzaC5wdWxsQXQgPSBwdWxsQXQ7CiAgICBsb2Rhc2gucmFuZ2UgPSByYW5nZTsKICAgIGxvZGFzaC5yZWFyZyA9IHJlYXJnOwogICAgbG9kYXNoLnJlamVjdCA9IHJlamVjdDsKICAgIGxvZGFzaC5yZW1vdmUgPSByZW1vdmU7CiAgICBsb2Rhc2gucmVzdCA9IHJlc3Q7CiAgICBsb2Rhc2gucmVzdFBhcmFtID0gcmVzdFBhcmFtOwogICAgbG9kYXNoLnNldCA9IHNldDsKICAgIGxvZGFzaC5zaHVmZmxlID0gc2h1ZmZsZTsKICAgIGxvZGFzaC5zbGljZSA9IHNsaWNlOwogICAgbG9kYXNoLnNvcnRCeSA9IHNvcnRCeTsKICAgIGxvZGFzaC5zb3J0QnlBbGwgPSBzb3J0QnlBbGw7CiAgICBsb2Rhc2guc29ydEJ5T3JkZXIgPSBzb3J0QnlPcmRlcjsKICAgIGxvZGFzaC5zcHJlYWQgPSBzcHJlYWQ7CiAgICBsb2Rhc2gudGFrZSA9IHRha2U7CiAgICBsb2Rhc2gudGFrZVJpZ2h0ID0gdGFrZVJpZ2h0OwogICAgbG9kYXNoLnRha2VSaWdodFdoaWxlID0gdGFrZVJpZ2h0V2hpbGU7CiAgICBsb2Rhc2gudGFrZVdoaWxlID0gdGFrZVdoaWxlOwogICAgbG9kYXNoLnRhcCA9IHRhcDsKICAgIGxvZGFzaC50aHJvdHRsZSA9IHRocm90dGxlOwogICAgbG9kYXNoLnRocnUgPSB0aHJ1OwogICAgbG9kYXNoLnRpbWVzID0gdGltZXM7CiAgICBsb2Rhc2gudG9BcnJheSA9IHRvQXJyYXk7CiAgICBsb2Rhc2gudG9QbGFpbk9iamVjdCA9IHRvUGxhaW5PYmplY3Q7CiAgICBsb2Rhc2gudHJhbnNmb3JtID0gdHJhbnNmb3JtOwogICAgbG9kYXNoLnVuaW9uID0gdW5pb247CiAgICBsb2Rhc2gudW5pcSA9IHVuaXE7CiAgICBsb2Rhc2gudW56aXAgPSB1bnppcDsKICAgIGxvZGFzaC51bnppcFdpdGggPSB1bnppcFdpdGg7CiAgICBsb2Rhc2gudmFsdWVzID0gdmFsdWVzOwogICAgbG9kYXNoLnZhbHVlc0luID0gdmFsdWVzSW47CiAgICBsb2Rhc2gud2hlcmUgPSB3aGVyZTsKICAgIGxvZGFzaC53aXRob3V0ID0gd2l0aG91dDsKICAgIGxvZGFzaC53cmFwID0gd3JhcDsKICAgIGxvZGFzaC54b3IgPSB4b3I7CiAgICBsb2Rhc2guemlwID0gemlwOwogICAgbG9kYXNoLnppcE9iamVjdCA9IHppcE9iamVjdDsKICAgIGxvZGFzaC56aXBXaXRoID0gemlwV2l0aDsKICAgIGxvZGFzaC5iYWNrZmxvdyA9IGZsb3dSaWdodDsKICAgIGxvZGFzaC5jb2xsZWN0ID0gbWFwOwogICAgbG9kYXNoLmNvbXBvc2UgPSBmbG93UmlnaHQ7CiAgICBsb2Rhc2guZWFjaCA9IGZvckVhY2g7CiAgICBsb2Rhc2guZWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0OwogICAgbG9kYXNoLmV4dGVuZCA9IGFzc2lnbjsKICAgIGxvZGFzaC5pdGVyYXRlZSA9IGNhbGxiYWNrOwogICAgbG9kYXNoLm1ldGhvZHMgPSBmdW5jdGlvbnM7CiAgICBsb2Rhc2gub2JqZWN0ID0gemlwT2JqZWN0OwogICAgbG9kYXNoLnNlbGVjdCA9IGZpbHRlcjsKICAgIGxvZGFzaC50YWlsID0gcmVzdDsKICAgIGxvZGFzaC51bmlxdWUgPSB1bmlxOwogICAgbWl4aW4obG9kYXNoLCBsb2Rhc2gpOwogICAgbG9kYXNoLmFkZCA9IGFkZDsKICAgIGxvZGFzaC5hdHRlbXB0ID0gYXR0ZW1wdDsKICAgIGxvZGFzaC5jYW1lbENhc2UgPSBjYW1lbENhc2U7CiAgICBsb2Rhc2guY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemU7CiAgICBsb2Rhc2guY2VpbCA9IGNlaWw7CiAgICBsb2Rhc2guY2xvbmUgPSBjbG9uZTsKICAgIGxvZGFzaC5jbG9uZURlZXAgPSBjbG9uZURlZXA7CiAgICBsb2Rhc2guZGVidXJyID0gZGVidXJyOwogICAgbG9kYXNoLmVuZHNXaXRoID0gZW5kc1dpdGg7CiAgICBsb2Rhc2guZXNjYXBlID0gZXNjYXBlOwogICAgbG9kYXNoLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDsKICAgIGxvZGFzaC5ldmVyeSA9IGV2ZXJ5OwogICAgbG9kYXNoLmZpbmQgPSBmaW5kOwogICAgbG9kYXNoLmZpbmRJbmRleCA9IGZpbmRJbmRleDsKICAgIGxvZGFzaC5maW5kS2V5ID0gZmluZEtleTsKICAgIGxvZGFzaC5maW5kTGFzdCA9IGZpbmRMYXN0OwogICAgbG9kYXNoLmZpbmRMYXN0SW5kZXggPSBmaW5kTGFzdEluZGV4OwogICAgbG9kYXNoLmZpbmRMYXN0S2V5ID0gZmluZExhc3RLZXk7CiAgICBsb2Rhc2guZmluZFdoZXJlID0gZmluZFdoZXJlOwogICAgbG9kYXNoLmZpcnN0ID0gZmlyc3Q7CiAgICBsb2Rhc2guZmxvb3IgPSBmbG9vcjsKICAgIGxvZGFzaC5nZXQgPSBnZXQ7CiAgICBsb2Rhc2guZ3QgPSBndDsKICAgIGxvZGFzaC5ndGUgPSBndGU7CiAgICBsb2Rhc2guaGFzID0gaGFzOwogICAgbG9kYXNoLmlkZW50aXR5ID0gaWRlbnRpdHk7CiAgICBsb2Rhc2guaW5jbHVkZXMgPSBpbmNsdWRlczsKICAgIGxvZGFzaC5pbmRleE9mID0gaW5kZXhPZjsKICAgIGxvZGFzaC5pblJhbmdlID0gaW5SYW5nZTsKICAgIGxvZGFzaC5pc0FyZ3VtZW50cyA9IGlzQXJndW1lbnRzOwogICAgbG9kYXNoLmlzQXJyYXkgPSBpc0FycmF5OwogICAgbG9kYXNoLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjsKICAgIGxvZGFzaC5pc0RhdGUgPSBpc0RhdGU7CiAgICBsb2Rhc2guaXNFbGVtZW50ID0gaXNFbGVtZW50OwogICAgbG9kYXNoLmlzRW1wdHkgPSBpc0VtcHR5OwogICAgbG9kYXNoLmlzRXF1YWwgPSBpc0VxdWFsOwogICAgbG9kYXNoLmlzRXJyb3IgPSBpc0Vycm9yOwogICAgbG9kYXNoLmlzRmluaXRlID0gaXNGaW5pdGU7CiAgICBsb2Rhc2guaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247CiAgICBsb2Rhc2guaXNNYXRjaCA9IGlzTWF0Y2g7CiAgICBsb2Rhc2guaXNOYU4gPSBpc05hTjsKICAgIGxvZGFzaC5pc05hdGl2ZSA9IGlzTmF0aXZlOwogICAgbG9kYXNoLmlzTnVsbCA9IGlzTnVsbDsKICAgIGxvZGFzaC5pc051bWJlciA9IGlzTnVtYmVyOwogICAgbG9kYXNoLmlzT2JqZWN0ID0gaXNPYmplY3Q7CiAgICBsb2Rhc2guaXNQbGFpbk9iamVjdCA9IGlzUGxhaW5PYmplY3Q7CiAgICBsb2Rhc2guaXNSZWdFeHAgPSBpc1JlZ0V4cDsKICAgIGxvZGFzaC5pc1N0cmluZyA9IGlzU3RyaW5nOwogICAgbG9kYXNoLmlzVHlwZWRBcnJheSA9IGlzVHlwZWRBcnJheTsKICAgIGxvZGFzaC5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkOwogICAgbG9kYXNoLmtlYmFiQ2FzZSA9IGtlYmFiQ2FzZTsKICAgIGxvZGFzaC5sYXN0ID0gbGFzdDsKICAgIGxvZGFzaC5sYXN0SW5kZXhPZiA9IGxhc3RJbmRleE9mOwogICAgbG9kYXNoLmx0ID0gbHQ7CiAgICBsb2Rhc2gubHRlID0gbHRlOwogICAgbG9kYXNoLm1heCA9IG1heDsKICAgIGxvZGFzaC5taW4gPSBtaW47CiAgICBsb2Rhc2gubm9Db25mbGljdCA9IG5vQ29uZmxpY3Q7CiAgICBsb2Rhc2gubm9vcCA9IG5vb3A7CiAgICBsb2Rhc2gubm93ID0gbm93OwogICAgbG9kYXNoLnBhZCA9IHBhZDsKICAgIGxvZGFzaC5wYWRMZWZ0ID0gcGFkTGVmdDsKICAgIGxvZGFzaC5wYWRSaWdodCA9IHBhZFJpZ2h0OwogICAgbG9kYXNoLnBhcnNlSW50ID0gcGFyc2VJbnQ7CiAgICBsb2Rhc2gucmFuZG9tID0gcmFuZG9tOwogICAgbG9kYXNoLnJlZHVjZSA9IHJlZHVjZTsKICAgIGxvZGFzaC5yZWR1Y2VSaWdodCA9IHJlZHVjZVJpZ2h0OwogICAgbG9kYXNoLnJlcGVhdCA9IHJlcGVhdDsKICAgIGxvZGFzaC5yZXN1bHQgPSByZXN1bHQ7CiAgICBsb2Rhc2gucm91bmQgPSByb3VuZDsKICAgIGxvZGFzaC5ydW5JbkNvbnRleHQgPSBydW5JbkNvbnRleHQ7CiAgICBsb2Rhc2guc2l6ZSA9IHNpemU7CiAgICBsb2Rhc2guc25ha2VDYXNlID0gc25ha2VDYXNlOwogICAgbG9kYXNoLnNvbWUgPSBzb21lOwogICAgbG9kYXNoLnNvcnRlZEluZGV4ID0gc29ydGVkSW5kZXg7CiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4ID0gc29ydGVkTGFzdEluZGV4OwogICAgbG9kYXNoLnN0YXJ0Q2FzZSA9IHN0YXJ0Q2FzZTsKICAgIGxvZGFzaC5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDsKICAgIGxvZGFzaC5zdW0gPSBzdW07CiAgICBsb2Rhc2gudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKICAgIGxvZGFzaC50cmltID0gdHJpbTsKICAgIGxvZGFzaC50cmltTGVmdCA9IHRyaW1MZWZ0OwogICAgbG9kYXNoLnRyaW1SaWdodCA9IHRyaW1SaWdodDsKICAgIGxvZGFzaC50cnVuYyA9IHRydW5jOwogICAgbG9kYXNoLnVuZXNjYXBlID0gdW5lc2NhcGU7CiAgICBsb2Rhc2gudW5pcXVlSWQgPSB1bmlxdWVJZDsKICAgIGxvZGFzaC53b3JkcyA9IHdvcmRzOwogICAgbG9kYXNoLmFsbCA9IGV2ZXJ5OwogICAgbG9kYXNoLmFueSA9IHNvbWU7CiAgICBsb2Rhc2guY29udGFpbnMgPSBpbmNsdWRlczsKICAgIGxvZGFzaC5lcSA9IGlzRXF1YWw7CiAgICBsb2Rhc2guZGV0ZWN0ID0gZmluZDsKICAgIGxvZGFzaC5mb2xkbCA9IHJlZHVjZTsKICAgIGxvZGFzaC5mb2xkciA9IHJlZHVjZVJpZ2h0OwogICAgbG9kYXNoLmhlYWQgPSBmaXJzdDsKICAgIGxvZGFzaC5pbmNsdWRlID0gaW5jbHVkZXM7CiAgICBsb2Rhc2guaW5qZWN0ID0gcmVkdWNlOwoKICAgIG1peGluKGxvZGFzaCwgKGZ1bmN0aW9uKCkgewogICAgICB2YXIgc291cmNlID0ge307CiAgICAgIGJhc2VGb3JPd24obG9kYXNoLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7CiAgICAgICAgaWYgKCFsb2Rhc2gucHJvdG90eXBlW21ldGhvZE5hbWVdKSB7CiAgICAgICAgICBzb3VyY2VbbWV0aG9kTmFtZV0gPSBmdW5jOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBzb3VyY2U7CiAgICB9KCkpLCBmYWxzZSk7CiAgICBsb2Rhc2guc2FtcGxlID0gc2FtcGxlOwoKICAgIGxvZGFzaC5wcm90b3R5cGUuc2FtcGxlID0gZnVuY3Rpb24obikgewogICAgICBpZiAoIXRoaXMuX19jaGFpbl9fICYmIG4gPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzYW1wbGUodGhpcy52YWx1ZSgpKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHNhbXBsZSh2YWx1ZSwgbik7CiAgICAgIH0pOwogICAgfTsKICAgIGxvZGFzaC5WRVJTSU9OID0gVkVSU0lPTjsKICAgIGFycmF5RWFjaChbJ2JpbmQnLCAnYmluZEtleScsICdjdXJyeScsICdjdXJyeVJpZ2h0JywgJ3BhcnRpYWwnLCAncGFydGlhbFJpZ2h0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgICAgbG9kYXNoW21ldGhvZE5hbWVdLnBsYWNlaG9sZGVyID0gbG9kYXNoOwogICAgfSk7CiAgICBhcnJheUVhY2goWydkcm9wJywgJ3Rha2UnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHsKICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24obikgewogICAgICAgIHZhciBmaWx0ZXJlZCA9IHRoaXMuX19maWx0ZXJlZF9fOwogICAgICAgIGlmIChmaWx0ZXJlZCAmJiAhaW5kZXgpIHsKICAgICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7CiAgICAgICAgfQogICAgICAgIG4gPSBuID09IG51bGwgPyAxIDogbmF0aXZlTWF4KG5hdGl2ZUZsb29yKG4pIHx8IDAsIDApOwoKICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpOwogICAgICAgIGlmIChmaWx0ZXJlZCkgewogICAgICAgICAgcmVzdWx0Ll9fdGFrZUNvdW50X18gPSBuYXRpdmVNaW4ocmVzdWx0Ll9fdGFrZUNvdW50X18sIG4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQuX192aWV3c19fLnB1c2goeyAnc2l6ZSc6IG4sICd0eXBlJzogbWV0aG9kTmFtZSArIChyZXN1bHQuX19kaXJfXyA8IDAgPyAnUmlnaHQnIDogJycpIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwoKICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWUgKyAnUmlnaHQnXSA9IGZ1bmN0aW9uKG4pIHsKICAgICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKClbbWV0aG9kTmFtZV0obikucmV2ZXJzZSgpOwogICAgICB9OwogICAgfSk7CiAgICBhcnJheUVhY2goWydmaWx0ZXInLCAnbWFwJywgJ3Rha2VXaGlsZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkgewogICAgICB2YXIgdHlwZSA9IGluZGV4ICsgMSwKICAgICAgICAgIGlzRmlsdGVyID0gdHlwZSAhPSBMQVpZX01BUF9GTEFHOwoKICAgICAgTGF6eVdyYXBwZXIucHJvdG90eXBlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24oaXRlcmF0ZWUsIHRoaXNBcmcpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5jbG9uZSgpOwogICAgICAgIHJlc3VsdC5fX2l0ZXJhdGVlc19fLnB1c2goeyAnaXRlcmF0ZWUnOiBnZXRDYWxsYmFjayhpdGVyYXRlZSwgdGhpc0FyZywgMSksICd0eXBlJzogdHlwZSB9KTsKICAgICAgICByZXN1bHQuX19maWx0ZXJlZF9fID0gcmVzdWx0Ll9fZmlsdGVyZWRfXyB8fCBpc0ZpbHRlcjsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfSk7CiAgICBhcnJheUVhY2goWydmaXJzdCcsICdsYXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7CiAgICAgIHZhciB0YWtlTmFtZSA9ICd0YWtlJyArIChpbmRleCA/ICdSaWdodCcgOiAnJyk7CgogICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFsdWUoKVswXTsKICAgICAgfTsKICAgIH0pOwogICAgYXJyYXlFYWNoKFsnaW5pdGlhbCcsICdyZXN0J10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7CiAgICAgIHZhciBkcm9wTmFtZSA9ICdkcm9wJyArIChpbmRleCA/ICcnIDogJ1JpZ2h0Jyk7CgogICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18gPyBuZXcgTGF6eVdyYXBwZXIodGhpcykgOiB0aGlzW2Ryb3BOYW1lXSgxKTsKICAgICAgfTsKICAgIH0pOwogICAgYXJyYXlFYWNoKFsncGx1Y2snLCAnd2hlcmUnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHsKICAgICAgdmFyIG9wZXJhdGlvbk5hbWUgPSBpbmRleCA/ICdmaWx0ZXInIDogJ21hcCcsCiAgICAgICAgICBjcmVhdGVDYWxsYmFjayA9IGluZGV4ID8gYmFzZU1hdGNoZXMgOiBwcm9wZXJ0eTsKCiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHRoaXNbb3BlcmF0aW9uTmFtZV0oY3JlYXRlQ2FsbGJhY2sodmFsdWUpKTsKICAgICAgfTsKICAgIH0pOwoKICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5jb21wYWN0ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7CiAgICB9OwoKICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZWplY3QgPSBmdW5jdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHsKICAgICAgcHJlZGljYXRlID0gZ2V0Q2FsbGJhY2socHJlZGljYXRlLCB0aGlzQXJnLCAxKTsKICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUodmFsdWUpOwogICAgICB9KTsKICAgIH07CgogICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkgewogICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogKCtzdGFydCB8fCAwKTsKCiAgICAgIHZhciByZXN1bHQgPSB0aGlzOwogICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXyAmJiAoc3RhcnQgPiAwIHx8IGVuZCA8IDApKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpOwogICAgICB9CiAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICByZXN1bHQgPSByZXN1bHQudGFrZVJpZ2h0KC1zdGFydCk7CiAgICAgIH0gZWxzZSBpZiAoc3RhcnQpIHsKICAgICAgICByZXN1bHQgPSByZXN1bHQuZHJvcChzdGFydCk7CiAgICAgIH0KICAgICAgaWYgKGVuZCAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgZW5kID0gKCtlbmQgfHwgMCk7CiAgICAgICAgcmVzdWx0ID0gZW5kIDwgMCA/IHJlc3VsdC5kcm9wUmlnaHQoLWVuZCkgOiByZXN1bHQudGFrZShlbmQgLSBzdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CgogICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnRha2VSaWdodFdoaWxlID0gZnVuY3Rpb24ocHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlLCB0aGlzQXJnKS5yZXZlcnNlKCk7CiAgICB9OwoKICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLnRha2UoUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgfTsKICAgIGJhc2VGb3JPd24oTGF6eVdyYXBwZXIucHJvdG90eXBlLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7CiAgICAgIHZhciBjaGVja0l0ZXJhdGVlID0gL14oPzpmaWx0ZXJ8bWFwfHJlamVjdCl8V2hpbGUkLy50ZXN0KG1ldGhvZE5hbWUpLAogICAgICAgICAgcmV0VW53cmFwcGVkID0gL14oPzpmaXJzdHxsYXN0KSQvLnRlc3QobWV0aG9kTmFtZSksCiAgICAgICAgICBsb2Rhc2hGdW5jID0gbG9kYXNoW3JldFVud3JhcHBlZCA/ICgndGFrZScgKyAobWV0aG9kTmFtZSA9PSAnbGFzdCcgPyAnUmlnaHQnIDogJycpKSA6IG1ldGhvZE5hbWVdOwoKICAgICAgaWYgKCFsb2Rhc2hGdW5jKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IHJldFVud3JhcHBlZCA/IFsxXSA6IGFyZ3VtZW50cywKICAgICAgICAgICAgY2hhaW5BbGwgPSB0aGlzLl9fY2hhaW5fXywKICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fLAogICAgICAgICAgICBpc0h5YnJpZCA9ICEhdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgsCiAgICAgICAgICAgIGlzTGF6eSA9IHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIsCiAgICAgICAgICAgIGl0ZXJhdGVlID0gYXJnc1swXSwKICAgICAgICAgICAgdXNlTGF6eSA9IGlzTGF6eSB8fCBpc0FycmF5KHZhbHVlKTsKCiAgICAgICAgaWYgKHVzZUxhenkgJiYgY2hlY2tJdGVyYXRlZSAmJiB0eXBlb2YgaXRlcmF0ZWUgPT0gJ2Z1bmN0aW9uJyAmJiBpdGVyYXRlZS5sZW5ndGggIT0gMSkgewogICAgICAgICAgaXNMYXp5ID0gdXNlTGF6eSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBmdW5jdGlvbih2YWx1ZSkgewogICAgICAgICAgcmV0dXJuIChyZXRVbndyYXBwZWQgJiYgY2hhaW5BbGwpCiAgICAgICAgICAgID8gbG9kYXNoRnVuYyh2YWx1ZSwgMSlbMF0KICAgICAgICAgICAgOiBsb2Rhc2hGdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJyYXlQdXNoKFt2YWx1ZV0sIGFyZ3MpKTsKICAgICAgICB9OwoKICAgICAgICB2YXIgYWN0aW9uID0geyAnZnVuYyc6IHRocnUsICdhcmdzJzogW2ludGVyY2VwdG9yXSwgJ3RoaXNBcmcnOiB1bmRlZmluZWQgfSwKICAgICAgICAgICAgb25seUxhenkgPSBpc0xhenkgJiYgIWlzSHlicmlkOwoKICAgICAgICBpZiAocmV0VW53cmFwcGVkICYmICFjaGFpbkFsbCkgewogICAgICAgICAgaWYgKG9ubHlMYXp5KSB7CiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2xvbmUoKTsKICAgICAgICAgICAgdmFsdWUuX19hY3Rpb25zX18ucHVzaChhY3Rpb24pOwogICAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBsb2Rhc2hGdW5jLmNhbGwodW5kZWZpbmVkLCB0aGlzLnZhbHVlKCkpWzBdOwogICAgICAgIH0KICAgICAgICBpZiAoIXJldFVud3JhcHBlZCAmJiB1c2VMYXp5KSB7CiAgICAgICAgICB2YWx1ZSA9IG9ubHlMYXp5ID8gdmFsdWUgOiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7CiAgICAgICAgICByZXN1bHQuX19hY3Rpb25zX18ucHVzaChhY3Rpb24pOwogICAgICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHJlc3VsdCwgY2hhaW5BbGwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTsKICAgICAgfTsKICAgIH0pOwogICAgYXJyYXlFYWNoKFsnam9pbicsICdwb3AnLCAncHVzaCcsICdyZXBsYWNlJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3NwbGl0JywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgICB2YXIgZnVuYyA9ICgvXig/OnJlcGxhY2V8c3BsaXQpJC8udGVzdChtZXRob2ROYW1lKSA/IHN0cmluZ1Byb3RvIDogYXJyYXlQcm90bylbbWV0aG9kTmFtZV0sCiAgICAgICAgICBjaGFpbk5hbWUgPSAvXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSkgPyAndGFwJyA6ICd0aHJ1JywKICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86am9pbnxwb3B8cmVwbGFjZXxzaGlmdCkkLy50ZXN0KG1ldGhvZE5hbWUpOwoKICAgICAgbG9kYXNoLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwogICAgICAgIGlmIChyZXRVbndyYXBwZWQgJiYgIXRoaXMuX19jaGFpbl9fKSB7CiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLnZhbHVlKCksIGFyZ3MpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpc1tjaGFpbk5hbWVdKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh2YWx1ZSwgYXJncyk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICB9KTsKICAgIGJhc2VGb3JPd24oTGF6eVdyYXBwZXIucHJvdG90eXBlLCBmdW5jdGlvbihmdW5jLCBtZXRob2ROYW1lKSB7CiAgICAgIHZhciBsb2Rhc2hGdW5jID0gbG9kYXNoW21ldGhvZE5hbWVdOwogICAgICBpZiAobG9kYXNoRnVuYykgewogICAgICAgIHZhciBrZXkgPSBsb2Rhc2hGdW5jLm5hbWUsCiAgICAgICAgICAgIG5hbWVzID0gcmVhbE5hbWVzW2tleV0gfHwgKHJlYWxOYW1lc1trZXldID0gW10pOwoKICAgICAgICBuYW1lcy5wdXNoKHsgJ25hbWUnOiBtZXRob2ROYW1lLCAnZnVuYyc6IGxvZGFzaEZ1bmMgfSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJlYWxOYW1lc1tjcmVhdGVIeWJyaWRXcmFwcGVyKHVuZGVmaW5lZCwgQklORF9LRVlfRkxBRykubmFtZV0gPSBbeyAnbmFtZSc6ICd3cmFwcGVyJywgJ2Z1bmMnOiB1bmRlZmluZWQgfV07CiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUuY2xvbmUgPSBsYXp5Q2xvbmU7CiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmV2ZXJzZSA9IGxhenlSZXZlcnNlOwogICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlID0gbGF6eVZhbHVlOwogICAgbG9kYXNoLnByb3RvdHlwZS5jaGFpbiA9IHdyYXBwZXJDaGFpbjsKICAgIGxvZGFzaC5wcm90b3R5cGUuY29tbWl0ID0gd3JhcHBlckNvbW1pdDsKICAgIGxvZGFzaC5wcm90b3R5cGUuY29uY2F0ID0gd3JhcHBlckNvbmNhdDsKICAgIGxvZGFzaC5wcm90b3R5cGUucGxhbnQgPSB3cmFwcGVyUGxhbnQ7CiAgICBsb2Rhc2gucHJvdG90eXBlLnJldmVyc2UgPSB3cmFwcGVyUmV2ZXJzZTsKICAgIGxvZGFzaC5wcm90b3R5cGUudG9TdHJpbmcgPSB3cmFwcGVyVG9TdHJpbmc7CiAgICBsb2Rhc2gucHJvdG90eXBlLnJ1biA9IGxvZGFzaC5wcm90b3R5cGUudG9KU09OID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZU9mID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZSA9IHdyYXBwZXJWYWx1ZTsKICAgIGxvZGFzaC5wcm90b3R5cGUuY29sbGVjdCA9IGxvZGFzaC5wcm90b3R5cGUubWFwOwogICAgbG9kYXNoLnByb3RvdHlwZS5oZWFkID0gbG9kYXNoLnByb3RvdHlwZS5maXJzdDsKICAgIGxvZGFzaC5wcm90b3R5cGUuc2VsZWN0ID0gbG9kYXNoLnByb3RvdHlwZS5maWx0ZXI7CiAgICBsb2Rhc2gucHJvdG90eXBlLnRhaWwgPSBsb2Rhc2gucHJvdG90eXBlLnJlc3Q7CgogICAgcmV0dXJuIGxvZGFzaDsKICB9CiAgdmFyIF8gPSBydW5JbkNvbnRleHQoKTsKICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmIGRlZmluZS5hbWQpIHsKICAgIHJvb3QuXyA9IF87CiAgICBkZWZpbmUoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBfOwogICAgfSk7CiAgfQogIGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmIGZyZWVNb2R1bGUpIHsKICAgIGlmIChtb2R1bGVFeHBvcnRzKSB7CiAgICAgIChmcmVlTW9kdWxlLmV4cG9ydHMgPSBfKS5fID0gXzsKICAgIH0KICAgIGVsc2UgewogICAgICBmcmVlRXhwb3J0cy5fID0gXzsKICAgIH0KICB9CiAgZWxzZSB7CiAgICByb290Ll8gPSBfOwogIH0KfS5jYWxsKHRoaXMpKTsKCn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSAidW5kZWZpbmVkIiA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAidW5kZWZpbmVkIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9KQp9LHt9XX0se30sWyIvbm9kZV9tb2R1bGVzL3hxbGludC9saWIveHFsaW50LmpzIl0pOwoKfSk7CgpkZWZpbmUoImFjZS9tb2RlL3hxdWVyeV93b3JrZXIiLFtdLCBmdW5jdGlvbihyZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHsKInVzZSBzdHJpY3QiOwogICAgCnZhciBvb3AgPSByZXF1aXJlKCIuLi9saWIvb29wIik7CnZhciBNaXJyb3IgPSByZXF1aXJlKCIuLi93b3JrZXIvbWlycm9yIikuTWlycm9yOwp2YXIgWFFMaW50TGliID0gcmVxdWlyZSgiLi94cXVlcnkveHFsaW50Iik7CnZhciBYUUxpbnQgPSAgWFFMaW50TGliLlhRTGludDsKCnZhciBnZXRNb2R1bGVSZXNvbHZlckZyb21Nb2R1bGVzID0gZnVuY3Rpb24obW9kdWxlcyl7CiAgICByZXR1cm4gZnVuY3Rpb24odXJpKXsKICAgICAgICAgICAgdmFyIGluZGV4ID0gbW9kdWxlczsKICAgICAgICAgICAgdmFyIG1vZCA9IGluZGV4W3VyaV07CiAgICAgICAgICAgIHZhciB2YXJpYWJsZXMgPSB7fTsKICAgICAgICAgICAgdmFyIGZ1bmN0aW9ucyA9IHt9OwogICAgICAgICAgICBtb2QuZnVuY3Rpb25zLmZvckVhY2goZnVuY3Rpb24oZm4pewogICAgICAgICAgICAgICAgZnVuY3Rpb25zW3VyaSArICcjJyArIGZuLm5hbWUgKyAnIycgKyBmbi5hcml0eV0gPSB7CiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGZuLnBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSl7CiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zW3VyaSArICcjJyArIGZuLm5hbWUgKyAnIycgKyBmbi5hcml0eV0ucGFyYW1zLnB1c2goJyQnICsgcGFyYW0ubmFtZSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIG1vZC52YXJpYWJsZXMuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSl7CiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHZhcmlhYmxlLm5hbWUuc3Vic3RyaW5nKHZhcmlhYmxlLm5hbWUuaW5kZXhPZignOicpICsgMSk7CiAgICAgICAgICAgICAgICB2YXJpYWJsZXNbdXJpICsgJyMnICsgbmFtZV0gPSB7IHR5cGU6ICdWYXJEZWNsJywgYW5ub3RhdGlvbnM6IFtdIH07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsCiAgICAgICAgICAgICAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucwogICAgICAgICAgICB9OwogICAgfTsKfTsKCnZhciBYUXVlcnlXb3JrZXIgPSBleHBvcnRzLlhRdWVyeVdvcmtlciA9IGZ1bmN0aW9uKHNlbmRlcikgewogICAgTWlycm9yLmNhbGwodGhpcywgc2VuZGVyKTsKICAgIHRoaXMuc2V0VGltZW91dCgyMDApOwogICAgdmFyIHRoYXQgPSB0aGlzOwoKICAgIHRoaXMuc2VuZGVyLm9uKCJjb21wbGV0ZSIsIGZ1bmN0aW9uKGUpewogICAgICAgIGlmKHRoYXQueHFsaW50KSB7CiAgICAgICAgICAgIHZhciBwb3MgPSB7IGxpbmU6IGUuZGF0YS5wb3Mucm93LCBjb2w6IGUuZGF0YS5wb3MuY29sdW1uIH07CiAgICAgICAgICAgIHZhciBwcm9wb3NhbHMgPSB0aGF0LnhxbGludC5nZXRDb21wbGV0aW9ucyhwb3MpOwogICAgICAgICAgICB0aGF0LnNlbmRlci5lbWl0KCJjb21wbGV0ZSIsIHByb3Bvc2Fscyk7CiAgICAgICAgfQogICAgfSk7CgogICAgdGhpcy5zZW5kZXIub24oInNldEF2YWlsYWJsZU1vZHVsZU5hbWVzcGFjZXMiLCBmdW5jdGlvbihlKXsKICAgICAgICB0aGF0LmF2YWlsYWJsZU1vZHVsZU5hbWVzcGFjZXMgPSBlLmRhdGE7CiAgICB9KTsKCiAgICB0aGlzLnNlbmRlci5vbigic2V0RmlsZU5hbWUiLCBmdW5jdGlvbihlKXsKICAgICAgICB0aGF0LmZpbGVOYW1lID0gZS5kYXRhOwogICAgfSk7CgogICAgdGhpcy5zZW5kZXIub24oInNldE1vZHVsZVJlc29sdmVyIiwgZnVuY3Rpb24oZSl7CiAgICAgICAgdGhhdC5tb2R1bGVSZXNvbHZlciA9IGdldE1vZHVsZVJlc29sdmVyRnJvbU1vZHVsZXMoZS5kYXRhKTsKICAgIH0pOwp9OwoKb29wLmluaGVyaXRzKFhRdWVyeVdvcmtlciwgTWlycm9yKTsKCihmdW5jdGlvbigpIHsKICAgIAogICAgdGhpcy5vblVwZGF0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuc2VuZGVyLmVtaXQoInN0YXJ0Iik7CiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kb2MuZ2V0VmFsdWUoKTsKICAgICAgICB2YXIgc2N0eCA9IFhRTGludExpYi5jcmVhdGVTdGF0aWNDb250ZXh0KCk7CiAgICAgICAgaWYodGhpcy5tb2R1bGVSZXNvbHZlcikgewogICAgICAgICAgICBzY3R4LnNldE1vZHVsZVJlc29sdmVyKHRoaXMubW9kdWxlUmVzb2x2ZXIpOwogICAgICAgIH0KICAgICAgICBpZih0aGlzLmF2YWlsYWJsZU1vZHVsZU5hbWVzcGFjZXMpIHsKICAgICAgICAgICAgc2N0eC5hdmFpbGFibGVNb2R1bGVOYW1lc3BhY2VzID0gdGhpcy5hdmFpbGFibGVNb2R1bGVOYW1lc3BhY2VzOwogICAgICAgIH0KICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgICAgc3R5bGVDaGVjazogdGhpcy5zdHlsZUNoZWNrLAogICAgICAgICAgICBzdGF0aWNDb250ZXh0OiBzY3R4LAogICAgICAgICAgICBmaWxlTmFtZTogdGhpcy5maWxlTmFtZQogICAgICAgIH07CiAgICAgICAgdGhpcy54cWxpbnQgPSBuZXcgWFFMaW50KHZhbHVlLCBvcHRzKTsKICAgICAgICB0aGlzLnNlbmRlci5lbWl0KCJtYXJrZXJzIiwgdGhpcy54cWxpbnQuZ2V0TWFya2VycygpKTsKICAgIH07Cn0pLmNhbGwoWFF1ZXJ5V29ya2VyLnByb3RvdHlwZSk7Cgp9KTsKCmRlZmluZSgiYWNlL2xpYi9lczUtc2hpbSIsW10sIGZ1bmN0aW9uKHJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSkgewoKZnVuY3Rpb24gRW1wdHkoKSB7fQoKaWYgKCFGdW5jdGlvbi5wcm90b3R5cGUuYmluZCkgewogICAgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHsgLy8gLmxlbmd0aCBpcyAxCiAgICAgICAgdmFyIHRhcmdldCA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIgKyB0YXJnZXQpOwogICAgICAgIH0KICAgICAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTsgLy8gZm9yIG5vcm1hbCBjYWxsCiAgICAgICAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkgewoKICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoCiAgICAgICAgICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseSgKICAgICAgICAgICAgICAgICAgICB0aGF0LAogICAgICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSkKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CgogICAgICAgIH07CiAgICAgICAgaWYodGFyZ2V0LnByb3RvdHlwZSkgewogICAgICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlOwogICAgICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTsKICAgICAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJvdW5kOwogICAgfTsKfQp2YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsOwp2YXIgcHJvdG90eXBlT2ZBcnJheSA9IEFycmF5LnByb3RvdHlwZTsKdmFyIHByb3RvdHlwZU9mT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZTsKdmFyIHNsaWNlID0gcHJvdG90eXBlT2ZBcnJheS5zbGljZTsKdmFyIF90b1N0cmluZyA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC50b1N0cmluZyk7CnZhciBvd25zID0gY2FsbC5iaW5kKHByb3RvdHlwZU9mT2JqZWN0Lmhhc093blByb3BlcnR5KTsKdmFyIGRlZmluZUdldHRlcjsKdmFyIGRlZmluZVNldHRlcjsKdmFyIGxvb2t1cEdldHRlcjsKdmFyIGxvb2t1cFNldHRlcjsKdmFyIHN1cHBvcnRzQWNjZXNzb3JzOwppZiAoKHN1cHBvcnRzQWNjZXNzb3JzID0gb3ducyhwcm90b3R5cGVPZk9iamVjdCwgIl9fZGVmaW5lR2V0dGVyX18iKSkpIHsKICAgIGRlZmluZUdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZUdldHRlcl9fKTsKICAgIGRlZmluZVNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2RlZmluZVNldHRlcl9fKTsKICAgIGxvb2t1cEdldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cEdldHRlcl9fKTsKICAgIGxvb2t1cFNldHRlciA9IGNhbGwuYmluZChwcm90b3R5cGVPZk9iamVjdC5fX2xvb2t1cFNldHRlcl9fKTsKfQppZiAoWzEsMl0uc3BsaWNlKDApLmxlbmd0aCAhPSAyKSB7CiAgICBpZihmdW5jdGlvbigpIHsgLy8gdGVzdCBJRSA8IDkgdG8gc3BsaWNlIGJ1ZyAtIHNlZSBpc3N1ZSAjMTM4CiAgICAgICAgZnVuY3Rpb24gbWFrZUFycmF5KGwpIHsKICAgICAgICAgICAgdmFyIGEgPSBuZXcgQXJyYXkobCsyKTsKICAgICAgICAgICAgYVswXSA9IGFbMV0gPSAwOwogICAgICAgICAgICByZXR1cm4gYTsKICAgICAgICB9CiAgICAgICAgdmFyIGFycmF5ID0gW10sIGxlbmd0aEJlZm9yZTsKICAgICAgICAKICAgICAgICBhcnJheS5zcGxpY2UuYXBwbHkoYXJyYXksIG1ha2VBcnJheSgyMCkpOwogICAgICAgIGFycmF5LnNwbGljZS5hcHBseShhcnJheSwgbWFrZUFycmF5KDI2KSk7CgogICAgICAgIGxlbmd0aEJlZm9yZSA9IGFycmF5Lmxlbmd0aDsgLy80NgogICAgICAgIGFycmF5LnNwbGljZSg1LCAwLCAiWFhYIik7IC8vIGFkZCBvbmUgZWxlbWVudAoKICAgICAgICBsZW5ndGhCZWZvcmUgKyAxID09IGFycmF5Lmxlbmd0aAoKICAgICAgICBpZiAobGVuZ3RoQmVmb3JlICsgMSA9PSBhcnJheS5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7Ly8gaGFzIHJpZ2h0IHNwbGljZSBpbXBsZW1lbnRhdGlvbiB3aXRob3V0IGJ1Z3MKICAgICAgICB9CiAgICB9KCkpIHsvL0lFIDYvNwogICAgICAgIHZhciBhcnJheV9zcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlOwogICAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UgPSBmdW5jdGlvbihzdGFydCwgZGVsZXRlQ291bnQpIHsKICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlfc3BsaWNlLmFwcGx5KHRoaXMsIFsKICAgICAgICAgICAgICAgICAgICBzdGFydCA9PT0gdm9pZCAwID8gMCA6IHN0YXJ0LAogICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID09PSB2b2lkIDAgPyAodGhpcy5sZW5ndGggLSBzdGFydCkgOiBkZWxldGVDb3VudAogICAgICAgICAgICAgICAgXS5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKSkKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9IGVsc2Ugey8vSUU4CiAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZSA9IGZ1bmN0aW9uKHBvcywgcmVtb3ZlQ291bnQpewogICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChwb3MgPiAwKSB7CiAgICAgICAgICAgICAgICBpZiAocG9zID4gbGVuZ3RoKQogICAgICAgICAgICAgICAgICAgIHBvcyA9IGxlbmd0aDsKICAgICAgICAgICAgfSBlbHNlIGlmIChwb3MgPT0gdm9pZCAwKSB7CiAgICAgICAgICAgICAgICBwb3MgPSAwOwogICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA8IDApIHsKICAgICAgICAgICAgICAgIHBvcyA9IE1hdGgubWF4KGxlbmd0aCArIHBvcywgMCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghKHBvcytyZW1vdmVDb3VudCA8IGxlbmd0aCkpCiAgICAgICAgICAgICAgICByZW1vdmVDb3VudCA9IGxlbmd0aCAtIHBvczsKCiAgICAgICAgICAgIHZhciByZW1vdmVkID0gdGhpcy5zbGljZShwb3MsIHBvcytyZW1vdmVDb3VudCk7CiAgICAgICAgICAgIHZhciBpbnNlcnQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMik7CiAgICAgICAgICAgIHZhciBhZGQgPSBpbnNlcnQubGVuZ3RoOyAgICAgICAgICAgIAogICAgICAgICAgICBpZiAocG9zID09PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmIChhZGQpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2guYXBwbHkodGhpcywgaW5zZXJ0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciByZW1vdmUgPSBNYXRoLm1pbihyZW1vdmVDb3VudCwgbGVuZ3RoIC0gcG9zKTsKICAgICAgICAgICAgICAgIHZhciB0YWlsT2xkUG9zID0gcG9zICsgcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxOZXdQb3MgPSB0YWlsT2xkUG9zICsgYWRkIC0gcmVtb3ZlOwogICAgICAgICAgICAgICAgdmFyIHRhaWxDb3VudCA9IGxlbmd0aCAtIHRhaWxPbGRQb3M7CiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoQWZ0ZXJSZW1vdmUgPSBsZW5ndGggLSByZW1vdmU7CgogICAgICAgICAgICAgICAgaWYgKHRhaWxOZXdQb3MgPCB0YWlsT2xkUG9zKSB7IC8vIGNhc2UgQQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbENvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1t0YWlsTmV3UG9zK2ldID0gdGhpc1t0YWlsT2xkUG9zK2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbE5ld1BvcyA+IHRhaWxPbGRQb3MpIHsgLy8gY2FzZSBCCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gdGFpbENvdW50OyBpLS07ICkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3RhaWxOZXdQb3MraV0gPSB0aGlzW3RhaWxPbGRQb3MraV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAvLyBlbHNlLCBhZGQgPT0gcmVtb3ZlIChub3RoaW5nIHRvIGRvKQoKICAgICAgICAgICAgICAgIGlmIChhZGQgJiYgcG9zID09PSBsZW5ndGhBZnRlclJlbW92ZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmU7IC8vIHRydW5jYXRlIGFycmF5CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoLmFwcGx5KHRoaXMsIGluc2VydCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoQWZ0ZXJSZW1vdmUgKyBhZGQ7IC8vIHJlc2VydmVzIHNwYWNlCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFkZDsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbcG9zK2ldID0gaW5zZXJ0W2ldOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICAgICB9OwogICAgfQp9CmlmICghQXJyYXkuaXNBcnJheSkgewogICAgQXJyYXkuaXNBcnJheSA9IGZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7CiAgICAgICAgcmV0dXJuIF90b1N0cmluZyhvYmopID09ICJbb2JqZWN0IEFycmF5XSI7CiAgICB9Owp9CnZhciBib3hlZFN0cmluZyA9IE9iamVjdCgiYSIpLAogICAgc3BsaXRTdHJpbmcgPSBib3hlZFN0cmluZ1swXSAhPSAiYSIgfHwgISgwIGluIGJveGVkU3RyaW5nKTsKCmlmICghQXJyYXkucHJvdG90eXBlLmZvckVhY2gpIHsKICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmdW4gLyosIHRoaXNwKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXSwKICAgICAgICAgICAgaSA9IC0xLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7IC8vIFRPRE8gbWVzc2FnZQogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKCsraSA8IGxlbmd0aCkgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICBmdW4uY2FsbCh0aGlzcCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubWFwKSB7CiAgICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gbWFwKGZ1biAvKiwgdGhpc3AqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikKICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IGZ1bi5jYWxsKHRoaXNwLCBzZWxmW2ldLCBpLCBvYmplY3QpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5maWx0ZXIpIHsKICAgIEFycmF5LnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgcmVzdWx0ID0gW10sCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZikgewogICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2ldOwogICAgICAgICAgICAgICAgaWYgKGZ1bi5jYWxsKHRoaXNwLCB2YWx1ZSwgaSwgb2JqZWN0KSkgewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5ldmVyeSkgewogICAgQXJyYXkucHJvdG90eXBlLmV2ZXJ5ID0gZnVuY3Rpb24gZXZlcnkoZnVuIC8qLCB0aGlzcCAqLykgewogICAgICAgIHZhciBvYmplY3QgPSB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICBvYmplY3QsCiAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYubGVuZ3RoID4+PiAwLAogICAgICAgICAgICB0aGlzcCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICBpZiAoX3RvU3RyaW5nKGZ1bikgIT0gIltvYmplY3QgRnVuY3Rpb25dIikgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGZ1biArICIgaXMgbm90IGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiAhZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUuc29tZSkgewogICAgQXJyYXkucHJvdG90eXBlLnNvbWUgPSBmdW5jdGlvbiBzb21lKGZ1biAvKiwgdGhpc3AgKi8pIHsKICAgICAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QodGhpcyksCiAgICAgICAgICAgIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBfdG9TdHJpbmcodGhpcykgPT0gIltvYmplY3QgU3RyaW5nXSIgPwogICAgICAgICAgICAgICAgdGhpcy5zcGxpdCgiIikgOgogICAgICAgICAgICAgICAgb2JqZWN0LAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMCwKICAgICAgICAgICAgdGhpc3AgPSBhcmd1bWVudHNbMV07CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgZnVuLmNhbGwodGhpc3AsIHNlbGZbaV0sIGksIG9iamVjdCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlKSB7CiAgICBBcnJheS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gcmVkdWNlKGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaSA9IDA7CiAgICAgICAgdmFyIHJlc3VsdDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1sxXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZltpKytdOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCsraSA+PSBsZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpOwogICAgICAgIH0KCiAgICAgICAgZm9yICg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoaSBpbiBzZWxmKSB7CiAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW4uY2FsbCh2b2lkIDAsIHJlc3VsdCwgc2VsZltpXSwgaSwgb2JqZWN0KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQpIHsKICAgIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodCA9IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGZ1biAvKiwgaW5pdGlhbCovKSB7CiAgICAgICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIG9iamVjdCwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CiAgICAgICAgaWYgKF90b1N0cmluZyhmdW4pICE9ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihmdW4gKyAiIGlzIG5vdCBhIGZ1bmN0aW9uIik7CiAgICAgICAgfQogICAgICAgIGlmICghbGVuZ3RoICYmIGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWR1Y2VSaWdodCBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTsKICAgICAgICB9CgogICAgICAgIHZhciByZXN1bHQsIGkgPSBsZW5ndGggLSAxOwogICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDIpIHsKICAgICAgICAgICAgcmVzdWx0ID0gYXJndW1lbnRzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgIGlmIChpIGluIHNlbGYpIHsKICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2ktLV07CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoLS1pIDwgMCkgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoInJlZHVjZVJpZ2h0IG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IHdoaWxlICh0cnVlKTsKICAgICAgICB9CgogICAgICAgIGRvIHsKICAgICAgICAgICAgaWYgKGkgaW4gdGhpcykgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuLmNhbGwodm9pZCAwLCByZXN1bHQsIHNlbGZbaV0sIGksIG9iamVjdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlIChpLS0pOwoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKfQppZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mIHx8IChbMCwgMV0uaW5kZXhPZigxLCAyKSAhPSAtMSkpIHsKICAgIEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLyApIHsKICAgICAgICB2YXIgc2VsZiA9IHNwbGl0U3RyaW5nICYmIF90b1N0cmluZyh0aGlzKSA9PSAiW29iamVjdCBTdHJpbmddIiA/CiAgICAgICAgICAgICAgICB0aGlzLnNwbGl0KCIiKSA6CiAgICAgICAgICAgICAgICB0b09iamVjdCh0aGlzKSwKICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5sZW5ndGggPj4+IDA7CgogICAgICAgIGlmICghbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIHZhciBpID0gMDsKICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgaSA9IHRvSW50ZWdlcihhcmd1bWVudHNbMV0pOwogICAgICAgIH0KICAgICAgICBpID0gaSA+PSAwID8gaSA6IE1hdGgubWF4KDAsIGxlbmd0aCArIGkpOwogICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgaWYgKGkgaW4gc2VsZiAmJiBzZWxmW2ldID09PSBzb3VnaHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgIH07Cn0KaWYgKCFBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgfHwgKFswLCAxXS5sYXN0SW5kZXhPZigwLCAtMykgIT0gLTEpKSB7CiAgICBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZihzb3VnaHQgLyosIGZyb21JbmRleCAqLykgewogICAgICAgIHZhciBzZWxmID0gc3BsaXRTdHJpbmcgJiYgX3RvU3RyaW5nKHRoaXMpID09ICJbb2JqZWN0IFN0cmluZ10iID8KICAgICAgICAgICAgICAgIHRoaXMuc3BsaXQoIiIpIDoKICAgICAgICAgICAgICAgIHRvT2JqZWN0KHRoaXMpLAogICAgICAgICAgICBsZW5ndGggPSBzZWxmLmxlbmd0aCA+Pj4gMDsKCiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KICAgICAgICB2YXIgaSA9IGxlbmd0aCAtIDE7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIGkgPSBNYXRoLm1pbihpLCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7CiAgICAgICAgfQogICAgICAgIGkgPSBpID49IDAgPyBpIDogbGVuZ3RoIC0gTWF0aC5hYnMoaSk7CiAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgIGlmIChpIGluIHNlbGYgJiYgc291Z2h0ID09PSBzZWxmW2ldKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSB7CiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcHJvdG9fXyB8fCAoCiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3RvciA/CiAgICAgICAgICAgIG9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgOgogICAgICAgICAgICBwcm90b3R5cGVPZk9iamVjdAogICAgICAgICk7CiAgICB9Owp9CmlmICghT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikgewogICAgdmFyIEVSUl9OT05fT0JKRUNUID0gIk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgY2FsbGVkIG9uIGEgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLW9iamVjdDogIjsKICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSkgewogICAgICAgIGlmICgodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8IG9iamVjdCA9PT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJfTk9OX09CSkVDVCArIG9iamVjdCk7CiAgICAgICAgaWYgKCFvd25zKG9iamVjdCwgcHJvcGVydHkpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIHZhciBkZXNjcmlwdG9yLCBnZXR0ZXIsIHNldHRlcjsKICAgICAgICBkZXNjcmlwdG9yID0gIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH07CiAgICAgICAgaWYgKHN1cHBvcnRzQWNjZXNzb3JzKSB7CiAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlT2ZPYmplY3Q7CgogICAgICAgICAgICB2YXIgZ2V0dGVyID0gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICB2YXIgc2V0dGVyID0gbG9va3VwU2V0dGVyKG9iamVjdCwgcHJvcGVydHkpOwogICAgICAgICAgICBvYmplY3QuX19wcm90b19fID0gcHJvdG90eXBlOwoKICAgICAgICAgICAgaWYgKGdldHRlciB8fCBzZXR0ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChnZXR0ZXIpIGRlc2NyaXB0b3IuZ2V0ID0gZ2V0dGVyOwogICAgICAgICAgICAgICAgaWYgKHNldHRlcikgZGVzY3JpcHRvci5zZXQgPSBzZXR0ZXI7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZXNjcmlwdG9yLnZhbHVlID0gb2JqZWN0W3Byb3BlcnR5XTsKICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjsKICAgIH07Cn0KaWYgKCFPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykgewogICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkgewogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgfTsKfQppZiAoIU9iamVjdC5jcmVhdGUpIHsKICAgIHZhciBjcmVhdGVFbXB0eTsKICAgIGlmIChPYmplY3QucHJvdG90eXBlLl9fcHJvdG9fXyA9PT0gbnVsbCkgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4geyAiX19wcm90b19fIjogbnVsbCB9OwogICAgICAgIH07CiAgICB9IGVsc2UgewogICAgICAgIGNyZWF0ZUVtcHR5ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZW1wdHkgPSB7fTsKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBlbXB0eSkKICAgICAgICAgICAgICAgIGVtcHR5W2ldID0gbnVsbDsKICAgICAgICAgICAgZW1wdHkuY29uc3RydWN0b3IgPQogICAgICAgICAgICBlbXB0eS5oYXNPd25Qcm9wZXJ0eSA9CiAgICAgICAgICAgIGVtcHR5LnByb3BlcnR5SXNFbnVtZXJhYmxlID0KICAgICAgICAgICAgZW1wdHkuaXNQcm90b3R5cGVPZiA9CiAgICAgICAgICAgIGVtcHR5LnRvTG9jYWxlU3RyaW5nID0KICAgICAgICAgICAgZW1wdHkudG9TdHJpbmcgPQogICAgICAgICAgICBlbXB0eS52YWx1ZU9mID0KICAgICAgICAgICAgZW1wdHkuX19wcm90b19fID0gbnVsbDsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5OwogICAgICAgIH0KICAgIH0KCiAgICBPYmplY3QuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykgewogICAgICAgIHZhciBvYmplY3Q7CiAgICAgICAgaWYgKHByb3RvdHlwZSA9PT0gbnVsbCkgewogICAgICAgICAgICBvYmplY3QgPSBjcmVhdGVFbXB0eSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvdG90eXBlICE9ICJvYmplY3QiKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigidHlwZW9mIHByb3RvdHlwZVsiKyh0eXBlb2YgcHJvdG90eXBlKSsiXSAhPSAnb2JqZWN0JyIpOwogICAgICAgICAgICB2YXIgVHlwZSA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgICBUeXBlLnByb3RvdHlwZSA9IHByb3RvdHlwZTsKICAgICAgICAgICAgb2JqZWN0ID0gbmV3IFR5cGUoKTsKICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKHByb3BlcnRpZXMgIT09IHZvaWQgMCkKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQoKZnVuY3Rpb24gZG9lc0RlZmluZVByb3BlcnR5V29yayhvYmplY3QpIHsKICAgIHRyeSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgInNlbnRpbmVsIiwge30pOwogICAgICAgIHJldHVybiAic2VudGluZWwiIGluIG9iamVjdDsKICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgfQp9CmlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25PYmplY3QgPSBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKHt9KTsKICAgIHZhciBkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20gPSB0eXBlb2YgZG9jdW1lbnQgPT0gInVuZGVmaW5lZCIgfHwKICAgICAgICBkb2VzRGVmaW5lUHJvcGVydHlXb3JrKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKTsKICAgIGlmICghZGVmaW5lUHJvcGVydHlXb3Jrc09uT2JqZWN0IHx8ICFkZWZpbmVQcm9wZXJ0eVdvcmtzT25Eb20pIHsKICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHlGYWxsYmFjayA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKICAgIH0KfQoKaWYgKCFPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZGVmaW5lUHJvcGVydHlGYWxsYmFjaykgewogICAgdmFyIEVSUl9OT05fT0JKRUNUX0RFU0NSSVBUT1IgPSAiUHJvcGVydHkgZGVzY3JpcHRpb24gbXVzdCBiZSBhbiBvYmplY3Q6ICI7CiAgICB2YXIgRVJSX05PTl9PQkpFQ1RfVEFSR0VUID0gIk9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxsZWQgb24gbm9uLW9iamVjdDogIgogICAgdmFyIEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCA9ICJnZXR0ZXJzICYgc2V0dGVycyBjYW4gbm90IGJlIGRlZmluZWQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHRoaXMgamF2YXNjcmlwdCBlbmdpbmUiOwoKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcGVydHksIGRlc2NyaXB0b3IpIHsKICAgICAgICBpZiAoKHR5cGVvZiBvYmplY3QgIT0gIm9iamVjdCIgJiYgdHlwZW9mIG9iamVjdCAhPSAiZnVuY3Rpb24iKSB8fCBvYmplY3QgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfVEFSR0VUICsgb2JqZWN0KTsKICAgICAgICBpZiAoKHR5cGVvZiBkZXNjcmlwdG9yICE9ICJvYmplY3QiICYmIHR5cGVvZiBkZXNjcmlwdG9yICE9ICJmdW5jdGlvbiIpIHx8IGRlc2NyaXB0b3IgPT09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJSX05PTl9PQkpFQ1RfREVTQ1JJUFRPUiArIGRlc2NyaXB0b3IpOwogICAgICAgIGlmIChkZWZpbmVQcm9wZXJ0eUZhbGxiYWNrKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHlGYWxsYmFjay5jYWxsKE9iamVjdCwgb2JqZWN0LCBwcm9wZXJ0eSwgZGVzY3JpcHRvcik7CiAgICAgICAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJ2YWx1ZSIpKSB7CgogICAgICAgICAgICBpZiAoc3VwcG9ydHNBY2Nlc3NvcnMgJiYgKGxvb2t1cEdldHRlcihvYmplY3QsIHByb3BlcnR5KSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cFNldHRlcihvYmplY3QsIHByb3BlcnR5KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBwcm90b3R5cGUgPSBvYmplY3QuX19wcm90b19fOwogICAgICAgICAgICAgICAgb2JqZWN0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZU9mT2JqZWN0OwogICAgICAgICAgICAgICAgZGVsZXRlIG9iamVjdFtwcm9wZXJ0eV07CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgICAgIG9iamVjdC5fX3Byb3RvX18gPSBwcm90b3R5cGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHldID0gZGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghc3VwcG9ydHNBY2Nlc3NvcnMpCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUl9BQ0NFU1NPUlNfTk9UX1NVUFBPUlRFRCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJnZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZUdldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLmdldCk7CiAgICAgICAgICAgIGlmIChvd25zKGRlc2NyaXB0b3IsICJzZXQiKSkKICAgICAgICAgICAgICAgIGRlZmluZVNldHRlcihvYmplY3QsIHByb3BlcnR5LCBkZXNjcmlwdG9yLnNldCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKSB7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMob2JqZWN0LCBwcm9wZXJ0aWVzKSB7CiAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gcHJvcGVydGllcykgewogICAgICAgICAgICBpZiAob3ducyhwcm9wZXJ0aWVzLCBwcm9wZXJ0eSkpCiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgcHJvcGVydGllc1twcm9wZXJ0eV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5zZWFsKSB7CiAgICBPYmplY3Quc2VhbCA9IGZ1bmN0aW9uIHNlYWwob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgIH07Cn0KaWYgKCFPYmplY3QuZnJlZXplKSB7CiAgICBPYmplY3QuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9Owp9CnRyeSB7CiAgICBPYmplY3QuZnJlZXplKGZ1bmN0aW9uICgpIHt9KTsKfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICBPYmplY3QuZnJlZXplID0gKGZ1bmN0aW9uIGZyZWV6ZShmcmVlemVPYmplY3QpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKG9iamVjdCkgewogICAgICAgICAgICBpZiAodHlwZW9mIG9iamVjdCA9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZyZWV6ZU9iamVjdChvYmplY3QpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0pKE9iamVjdC5mcmVlemUpOwp9CmlmICghT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7CiAgICBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPSBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhvYmplY3QpIHsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgfTsKfQppZiAoIU9iamVjdC5pc1NlYWxlZCkgewogICAgT2JqZWN0LmlzU2VhbGVkID0gZnVuY3Rpb24gaXNTZWFsZWQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0Zyb3plbikgewogICAgT2JqZWN0LmlzRnJvemVuID0gZnVuY3Rpb24gaXNGcm96ZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKfQppZiAoIU9iamVjdC5pc0V4dGVuc2libGUpIHsKICAgIE9iamVjdC5pc0V4dGVuc2libGUgPSBmdW5jdGlvbiBpc0V4dGVuc2libGUob2JqZWN0KSB7CiAgICAgICAgaWYgKE9iamVjdChvYmplY3QpID09PSBvYmplY3QpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigpOyAvLyBUT0RPIG1lc3NhZ2UKICAgICAgICB9CiAgICAgICAgdmFyIG5hbWUgPSAnJzsKICAgICAgICB3aGlsZSAob3ducyhvYmplY3QsIG5hbWUpKSB7CiAgICAgICAgICAgIG5hbWUgKz0gJz8nOwogICAgICAgIH0KICAgICAgICBvYmplY3RbbmFtZV0gPSB0cnVlOwogICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IG93bnMob2JqZWN0LCBuYW1lKTsKICAgICAgICBkZWxldGUgb2JqZWN0W25hbWVdOwogICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH07Cn0KaWYgKCFPYmplY3Qua2V5cykgewogICAgdmFyIGhhc0RvbnRFbnVtQnVnID0gdHJ1ZSwKICAgICAgICBkb250RW51bXMgPSBbCiAgICAgICAgICAgICJ0b1N0cmluZyIsCiAgICAgICAgICAgICJ0b0xvY2FsZVN0cmluZyIsCiAgICAgICAgICAgICJ2YWx1ZU9mIiwKICAgICAgICAgICAgImhhc093blByb3BlcnR5IiwKICAgICAgICAgICAgImlzUHJvdG90eXBlT2YiLAogICAgICAgICAgICAicHJvcGVydHlJc0VudW1lcmFibGUiLAogICAgICAgICAgICAiY29uc3RydWN0b3IiCiAgICAgICAgXSwKICAgICAgICBkb250RW51bXNMZW5ndGggPSBkb250RW51bXMubGVuZ3RoOwoKICAgIGZvciAodmFyIGtleSBpbiB7InRvU3RyaW5nIjogbnVsbH0pIHsKICAgICAgICBoYXNEb250RW51bUJ1ZyA9IGZhbHNlOwogICAgfQoKICAgIE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAodHlwZW9mIG9iamVjdCAhPSAib2JqZWN0IiAmJiB0eXBlb2Ygb2JqZWN0ICE9ICJmdW5jdGlvbiIpIHx8CiAgICAgICAgICAgIG9iamVjdCA9PT0gbnVsbAogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIga2V5cyA9IFtdOwogICAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqZWN0KSB7CiAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgbmFtZSkpIHsKICAgICAgICAgICAgICAgIGtleXMucHVzaChuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGhhc0RvbnRFbnVtQnVnKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRvbnRFbnVtc0xlbmd0aDsgaSA8IGlpOyBpKyspIHsKICAgICAgICAgICAgICAgIHZhciBkb250RW51bSA9IGRvbnRFbnVtc1tpXTsKICAgICAgICAgICAgICAgIGlmIChvd25zKG9iamVjdCwgZG9udEVudW0pKSB7CiAgICAgICAgICAgICAgICAgICAga2V5cy5wdXNoKGRvbnRFbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4ga2V5czsKICAgIH07Cgp9CmlmICghRGF0ZS5ub3cpIHsKICAgIERhdGUubm93ID0gZnVuY3Rpb24gbm93KCkgewogICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIH07Cn0KdmFyIHdzID0gIlx4MDlceDBBXHgwQlx4MENceDBEXHgyMFx4QTBcdTE2ODBcdTIwMDBcdTIwMDFcdTIwMDJcdTIwMDMiICsKICAgICJcdTIwMDRcdTIwMDVcdTIwMDZcdTIwMDdcdTIwMDhcdTIwMDlcdTIwMEFcdTIwMkZcdTIwNUZcdTMwMDBcdTIwMjgiICsKICAgICJcdTIwMjlcdUZFRkYiOwppZiAoIVN0cmluZy5wcm90b3R5cGUudHJpbSkgewogICAgd3MgPSAiWyIgKyB3cyArICJdIjsKICAgIHZhciB0cmltQmVnaW5SZWdleHAgPSBuZXcgUmVnRXhwKCJeIiArIHdzICsgd3MgKyAiKiIpLAogICAgICAgIHRyaW1FbmRSZWdleHAgPSBuZXcgUmVnRXhwKHdzICsgd3MgKyAiKiQiKTsKICAgIFN0cmluZy5wcm90b3R5cGUudHJpbSA9IGZ1bmN0aW9uIHRyaW0oKSB7CiAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzKS5yZXBsYWNlKHRyaW1CZWdpblJlZ2V4cCwgIiIpLnJlcGxhY2UodHJpbUVuZFJlZ2V4cCwgIiIpOwogICAgfTsKfQoKZnVuY3Rpb24gdG9JbnRlZ2VyKG4pIHsKICAgIG4gPSArbjsKICAgIGlmIChuICE9PSBuKSB7IC8vIGlzTmFOCiAgICAgICAgbiA9IDA7CiAgICB9IGVsc2UgaWYgKG4gIT09IDAgJiYgbiAhPT0gKDEvMCkgJiYgbiAhPT0gLSgxLzApKSB7CiAgICAgICAgbiA9IChuID4gMCB8fCAtMSkgKiBNYXRoLmZsb29yKE1hdGguYWJzKG4pKTsKICAgIH0KICAgIHJldHVybiBuOwp9CgpmdW5jdGlvbiBpc1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5wdXQ7CiAgICByZXR1cm4gKAogICAgICAgIGlucHV0ID09PSBudWxsIHx8CiAgICAgICAgdHlwZSA9PT0gInVuZGVmaW5lZCIgfHwKICAgICAgICB0eXBlID09PSAiYm9vbGVhbiIgfHwKICAgICAgICB0eXBlID09PSAibnVtYmVyIiB8fAogICAgICAgIHR5cGUgPT09ICJzdHJpbmciCiAgICApOwp9CgpmdW5jdGlvbiB0b1ByaW1pdGl2ZShpbnB1dCkgewogICAgdmFyIHZhbCwgdmFsdWVPZiwgdG9TdHJpbmc7CiAgICBpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7CiAgICAgICAgcmV0dXJuIGlucHV0OwogICAgfQogICAgdmFsdWVPZiA9IGlucHV0LnZhbHVlT2Y7CiAgICBpZiAodHlwZW9mIHZhbHVlT2YgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB2YWx1ZU9mLmNhbGwoaW5wdXQpOwogICAgICAgIGlmIChpc1ByaW1pdGl2ZSh2YWwpKSB7CiAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgfQogICAgdG9TdHJpbmcgPSBpbnB1dC50b1N0cmluZzsKICAgIGlmICh0eXBlb2YgdG9TdHJpbmcgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YWwgPSB0b1N0cmluZy5jYWxsKGlucHV0KTsKICAgICAgICBpZiAoaXNQcmltaXRpdmUodmFsKSkgewogICAgICAgICAgICByZXR1cm4gdmFsOwogICAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKTsKfQp2YXIgdG9PYmplY3QgPSBmdW5jdGlvbiAobykgewogICAgaWYgKG8gPT0gbnVsbCkgeyAvLyB0aGlzIG1hdGNoZXMgYm90aCBudWxsIGFuZCB1bmRlZmluZWQKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJjYW4ndCBjb252ZXJ0ICIrbysiIHRvIG9iamVjdCIpOwogICAgfQogICAgcmV0dXJuIE9iamVjdChvKTsKfTsKCn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.SmartyPlugins.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCm5hbWVzcGFjZSBBY2VTeW50YXg7DQoNCnVzZSBjbXNfdXRpbHM7DQp1c2UgU21hcnR5X0ludGVybmFsX1RlbXBsYXRlOw0KDQpmaW5hbCBjbGFzcyBTbWFydHlQbHVnaW5zDQp7DQogICMga2VlcCB0cmFjayBvZiBpZHMgaW4gYSBzaW5nbGUgcmVxdWVzdA0KICBzdGF0aWMgcHJvdGVjdGVkICRfYWNlX2lkX2NvdW50ID0gMDsNCiAgDQogICMgZ2xvYmFsIHBhZ2UgcmVzZXQgZGF0YQ0KICBzdGF0aWMgcHJvdGVjdGVkICRfcmVzZXRfZGF0YSA9IFtdOw0KICANCiAgIyB2YWxpZCBwYXJhbXMNCiAgY29uc3QgVkFMUFJNUyA9IFsNCiAgICAgICAgICAgICAgICAgICAgJ2RpdmlkJywNCiAgICAgICAgICAgICAgICAgICAgJ21vZGUnLA0KICAgICAgICAgICAgICAgICAgICAndGhlbWUnLA0KICAgICAgICAgICAgICAgICAgICAnd2lkdGgnLA0KICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JywNCiAgICAgICAgICAgICAgICAgICAgJ2h0bWxlbnRpdGllcycNCiAgICAgICAgICAgICAgICAgIF07DQogIA0KICAvKioNCiAgICogUmVnaXN0ZXIgb3VyIHBsdWdpbnMgb24gb3VyIG93bg0KICAgKg0KICAgKiBAdGhyb3dzIFxTbWFydHlFeGNlcHRpb24NCiAgICovDQogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoKQ0KICB7DQogICAgJHNtYXJ0eSA9IGNtc191dGlsczo6Z2V0X3NtYXJ0eSgpOw0KICAgICRzbWFydHktPnJlZ2lzdGVyUGx1Z2luKCAnYmxvY2snLCAnYWNlX2NvZGUnLCAnXEFjZVN5bnRheFxTbWFydHlQbHVnaW5zOjpfY29kZV9ibG9jaycgKTsNCiAgICAkc21hcnR5LT5yZWdpc3RlclBsdWdpbiggJ2Z1bmN0aW9uJywgJ2FjZV9wYWdlX3Jlc2V0JywgJ1xBY2VTeW50YXhcU21hcnR5UGx1Z2luczo6X3BhZ2VfcmVzZXQnICk7DQogIH0NCiAgDQogIC8qKg0KICAgKiBpbXBsZW1lbnRzIHthY2VfcGFnZV9yZXNldH0NCiAgICogZm9yIGl0IHRvIGhhdmUgYW4gZWZmZWN0DQogICAqIGl0IG5lZWRzIHRvIGJlIG9uIHRvcCBvZiB0aGUgdGVtcGxhdGUgb3IgcGFnZQ0KICAgKiByZWNvbW1lbmRlZCBmb3IgdGhlICdTbWFydHkgZGF0YSBvciBsb2dpYyB0aGF0IGlzIHNwZWNpZmljIHRvIHRoaXMgcGFnZScgYmxvY2sNCiAgICogQHBhcmFtICRwYXJhbXMNCiAgICogQHBhcmFtICRzbWFydHkNCiAgICovDQogIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gX3BhZ2VfcmVzZXQoJHBhcmFtcywgJHNtYXJ0eSkNCiAgew0KICAgIGZvcmVhY2goc2VsZjo6VkFMUFJNUyBhcyAkb25lKQ0KICAgIHsNCiAgICAgIGlmKCBpc3NldCgkcGFyYW1zWyRvbmVdKSApIHNlbGY6OiRfcmVzZXRfZGF0YVskb25lXSA9ICRwYXJhbXNbJG9uZV07DQogICAgfQ0KICB9DQogIA0KICAvKioNCiAgICogVGhlIG1haW4gYmxvY2sgcGx1Z2luDQogICAqIGRvZXNuJ3QgZXhwZWN0IGFueSBjb250ZW50IG9yIHBhcmFtcw0KICAgKiBidXQgcGFyYW1ldGVycyBjYW4gYmUgc2V0IG9uIGVhY2ggYmxvY2sNCiAgICogb3IgdmlhIHRoZSB7YWNlX3BhZ2VfcmVzZXR9IGdsb2JhbGx5DQogICAqIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlcXVlc3QNCiAgICoNCiAgICogQHBhcmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtcw0KICAgKiBAcGFyYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudA0KICAgKiBAcGFyYW0gXFNtYXJ0eV9JbnRlcm5hbF9UZW1wbGF0ZSAkdGVtcGxhdGUNCiAgICogQHBhcmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlcGVhdA0KICAgKg0KICAgKiBAcmV0dXJuIHN0cmluZw0KICAgKiBAdGhyb3dzIFxTbWFydHlFeGNlcHRpb24NCiAgICovDQoJc3RhdGljIHB1YmxpYyBmdW5jdGlvbiBfY29kZV9ibG9jaygkcGFyYW1zLCAkY29udGVudCwgU21hcnR5X0ludGVybmFsX1RlbXBsYXRlICR0ZW1wbGF0ZSwgJiRyZXBlYXQpDQogIHsNCiAgICBpZighJHJlcGVhdCkNCiAgICB7DQogICAgICBmb3JlYWNoKHNlbGY6OlZBTFBSTVMgYXMgJG9uZSkNCiAgICAgIHsNCiAgICAgICAgaWYoICFpc3NldCgkcGFyYW1zWyRvbmVdKSApICAkcGFyYW1zWyRvbmVdID0gIGlzc2V0KHNlbGY6OiRfcmVzZXRfZGF0YVskb25lXSkgPyBzZWxmOjokX3Jlc2V0X2RhdGFbJG9uZV0gOiBOVUxMOw0KICAgICAgfQ0KICANCiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0FjZVN5bnRheCcpOw0KICANCiAgICAgICRkaXZpZCA9IGlzc2V0KCRwYXJhbXNbJ2RpdmlkJ10pID8gJHBhcmFtc1snZGl2aWQnXSAuICctJyA6ICdhY2UtY29kZS0nOw0KICANCiAgICAgICRibG9jayA9IGFycmF5KA0KICAgICAgICAnZGl2aWQnICAgICAgICA9PiAkZGl2aWQgLiBzZWxmOjokX2FjZV9pZF9jb3VudCsrLA0KICAgICAgICAnbW9kZScgICAgICAgICA9PiBpc3NldCgkcGFyYW1zWydtb2RlJ10pID8gJHBhcmFtc1snbW9kZSddIDogJG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfc3ludGF4YXJlYV9tb2RlJyksDQogICAgICAgICd0aGVtZScgICAgICAgID0+IGlzc2V0KCRwYXJhbXNbJ3RoZW1lJ10pID8gJHBhcmFtc1sndGhlbWUnXSA6ICRtb2QtPkdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUnKSwNCiAgICAgICAgJ3dpZHRoJyAgICAgICAgPT4gaXNzZXQoJHBhcmFtc1snd2lkdGgnXSkgPyAkcGFyYW1zWyd3aWR0aCddIDogJG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfd2lkdGgnKSwNCiAgICAgICAgJ2hlaWdodCcgICAgICAgPT4gaXNzZXQoJHBhcmFtc1snaGVpZ2h0J10pID8gJHBhcmFtc1snaGVpZ2h0J10gOiAkbW9kLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9oZWlnaHQnKSwNCiAgICAgICAgJ2ZvbnRzaXplJyAgICAgPT4gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfZm9udHNpemUnKSwNCiAgICAgICAgJ2F1dG9faGVpZ2h0JyAgPT4gJG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfYXV0b19oZWlnaHQnLCAnMScpLA0KICAgICAgICAnd2lkdGhfdW5pdHMnICA9PiAkbW9kLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aF91bml0cycsICdweCcpLA0KICAgICAgICAnaGVpZ2h0X3VuaXRzJyA9PiAkbW9kLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9oZWlnaHRfdW5pdHMnLCAncHgnKSwNCiAgICAgICAgJ2NvbnRlbnQnICAgICAgPT4gJycNCiAgICAgICk7DQogIA0KICAgICAgaWYoIGlzc2V0KCRjb250ZW50KSApDQogICAgICB7DQogICAgICAgICRibG9ja1snY29udGVudCddID0gaXNzZXQoJHBhcmFtc1snaHRtbGVudGl0aWVzJ10pID8gaHRtbGVudGl0aWVzKCRjb250ZW50KSA6ICRjb250ZW50Ow0KICAgICAgfQ0KICANCiAgICAgICR0ZW1wbGF0ZS0+YXNzaWduKCdhY2VfYmxvY2snLCAkYmxvY2spOw0KICANCiAgICAgIHJldHVybiAkdGVtcGxhdGUtPmZldGNoKCdtb2R1bGVfZmlsZV90cGw6JyAuICRtb2QtPkdldE5hbWUoKSAuICc7JyAuICdhY2VfY29kZS50cGwnKTsNCiAgICB9DQoJfQ0KfQ0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.SmartyTools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFjZVN5bnRheDsNCg0KDQp1c2UgY21zX3V0aWxzOw0KDQpmaW5hbCBjbGFzcyBTbWFydHlUb29scw0Kew0KICBwcml2YXRlIHN0YXRpYyAkX2luaXRpdGFsaXplZCA9IEZBTFNFOw0KICBwcml2YXRlIHN0YXRpYyAkX21vZDsNCiAgDQogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIF9pbml0aWFsaXplKCkNCiAgew0KICAgIGlmKCFzZWxmOjokX2luaXRpdGFsaXplZCkNCiAgICB7DQogICAgICBzZWxmOjokX21vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQWNlU3ludGF4Jyk7DQogICAgICBzZWxmOjokX2luaXRpdGFsaXplZCA9IFRSVUU7DQogICAgfQ0KICB9DQogIA0KICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNzcygpDQogIHsNCiAgICBzZWxmOjpfaW5pdGlhbGl6ZSgpOw0KICAgICRzdHJpbmcgPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJzsNCiAgICAkc3RyaW5nIC49IHNlbGY6OiRfbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCk7DQogICAgJHN0cmluZyAuPSAnL2xpYi9jc3MvYWNlTGF5b3V0LmNzcyIgbWVkaWE9InNjcmVlbiIgLz4nOw0KICAgIA0KICAgIHJldHVybiAgJHN0cmluZzsNCiAgfQ0KICANCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBqcygkaW5jbHVkZV9qcXVlcnkgPSAwKQ0KICB7DQogICAgc2VsZjo6X2luaXRpYWxpemUoKTsNCiAgICAkbW9kX3VybCA9IHNlbGY6OiRfbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCk7DQogICAgJGpxID0gJzxzY3JpcHQNCiAgICAgICAgICAgICAgICAgIHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTMuNC4xLnNsaW0ubWluLmpzIg0KICAgICAgICAgICAgICAgICAgaW50ZWdyaXR5PSJzaGEyNTYtcGFzcUFLQkRtRlQ0ZUhvTjJuZGQ2bE4zNzBrRmlHVUZ5VGlVSFdoVTdrOD0iDQogICAgICAgICAgICAgICAgICBjcm9zc29yaWdpbj0iYW5vbnltb3VzIg0KICAgICAgICAgICAgPjwvc2NyaXB0Pic7DQogICAgDQogICAgJHN0cmluZyA9IChib29sKSRpbmNsdWRlX2pxdWVyeSA/ICRqcSA6ICcnOw0KICAgIA0KICAgICRzdHJpbmcgLj0gJzxzY3JpcHQgc3JjPSInIC4gJG1vZF91cmwgLiAnL2xpYi9hY2UvYWNlLmpzIj48L3NjcmlwdD4nOw0KICAgICRzdHJpbmcgLj0gJzxzY3JpcHQgc3JjPSInIC4gJG1vZF91cmwgLiAnL2xpYi9qcy9hY2VJbml0LmpzIj48L3NjcmlwdD4nOw0KICAgIA0KICAgIHJldHVybiAkc3RyaW5nOw0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KbmFtZXNwYWNlIEFjZVN5bnRheDsNCg0KDQp1c2UgY21zX3V0aWxzOw0KdXNlIGZ1bmN0aW9uIGNtc21zOw0KDQpmaW5hbCBjbGFzcyB1dGlscw0Kew0KICBwcml2YXRlIHN0YXRpYyAkX21vZDsNCiAgcHJpdmF0ZSBzdGF0aWMgJF9jbXM7DQogIHByaXZhdGUgc3RhdGljICRfc21hcnR5Ow0KICANCiAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gX2luaXRpYWxpemUoKQ0KICB7DQogICAgaWYoIXNlbGY6OiRfaW5pdGl0YWxpemVkKQ0KICAgIHsNCiAgICAgIHNlbGY6OiRfbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdBY2VTeW50YXgnKTsNCiAgICAgIHNlbGY6OiRfY21zID0gY21zbXMoKTsNCiAgICAgIHNlbGY6OiRfc21hcnR5ID0gY21zX3V0aWxzOjpnZXRfc21hcnR5KCk7DQogICAgICBzZWxmOjokX2luaXRpdGFsaXplZCA9IFRSVUU7DQogICAgfQ0KICB9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/aceLayout.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmFjZS1jb250YWluZXIgew0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCgloZWlnaHQ6IDEwMHB4Ow0KfQ0KDQouYWNlLWVsZW1lbnQgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDA7DQoJcmlnaHQ6IDA7DQoJYm90dG9tOiAwOw0KCWxlZnQ6IDA7DQp9]]></data>
	</file>
	<file>
	  <filename>/lib/css/aceUI.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiovDQoNCkBmb250LWZhY2Ugew0KCWZvbnQtZmFtaWx5OiAnaWNvbW9vbic7DQoJc3JjOnVybCgnLi4vZm9udC9pY29tb29uLmVvdCcpOw0KCXNyYzp1cmwoJy4uL2ZvbnQvaWNvbW9vbi5lb3Q/I2llZml4JykgZm9ybWF0KCdlbWJlZGRlZC1vcGVudHlwZScpLA0KCQl1cmwoJy4uL2ZvbnQvaWNvbW9vbi53b2ZmJykgZm9ybWF0KCd3b2ZmJyksDQoJCXVybCgnLi4vZm9udC9pY29tb29uLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKSwNCgkJdXJsKCcuLi9mb250L2ljb21vb24uc3ZnI2ljb21vb24nKSBmb3JtYXQoJ3N2ZycpOw0KCWZvbnQtd2VpZ2h0OiBub3JtYWw7DQoJZm9udC1zdHlsZTogbm9ybWFsOw0KfQ0KDQovKiBVc2UgdGhlIGZvbGxvd2luZyBDU1MgY29kZSBpZiB5b3Ugd2FudCB0byB1c2UgZGF0YSBhdHRyaWJ1dGVzIGZvciBpbnNlcnRpbmcgeW91ciBpY29ucyAqLw0KW2RhdGEtaWNvbl06YmVmb3JlIHsNCglmb250LWZhbWlseTogJ2ljb21vb24nOw0KCWNvbnRlbnQ6IGF0dHIoZGF0YS1pY29uKTsNCglzcGVhazogbm9uZTsNCglmb250LXdlaWdodDogbm9ybWFsOw0KCWZvbnQtdmFyaWFudDogbm9ybWFsOw0KCXRleHQtdHJhbnNmb3JtOiBub25lOw0KCWxpbmUtaGVpZ2h0OiAxOw0KCS13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KCS1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7DQp9DQoNCi8qIFVzZSB0aGUgZm9sbG93aW5nIENTUyBjb2RlIGlmIHlvdSB3YW50IHRvIGhhdmUgYSBjbGFzcyBwZXIgaWNvbiAqLw0KLyoNCkluc3RlYWQgb2YgYSBsaXN0IG9mIGFsbCBjbGFzcyBzZWxlY3RvcnMsDQp5b3UgY2FuIHVzZSB0aGUgZ2VuZXJpYyBzZWxlY3RvciBiZWxvdywgYnV0IGl0J3Mgc2xvd2VyOg0KW2NsYXNzKj0iaWNvbi0iXSB7DQoqLw0KLmFjZS1pY29uLWV4cGFuZCwgLmFjZS1pY29uLWNvbnRyYWN0LCAuYWNlLWljb24tY29nLCAuYWNlLWljb24tZmlsZSwgDQouYWNlLWljb24tY29ncywgLmFjZS1pY29uLXdhbmQsIC5hY2UtaWNvbi1saXN0LCAuYWNlLWljb24tc2VhcmNoLCANCi5hY2UtaWNvbi1jYW5jZWwtY2lyY2xlLCAuYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZSwgLmFjZS1pY29uLXNwZWxsLWNoZWNrLCAuYWNlLWljb24tY29uc29sZSB7DQoJZm9udC1mYW1pbHk6ICdpY29tb29uJzsNCglzcGVhazogbm9uZTsNCglmb250LXN0eWxlOiBub3JtYWw7DQoJZm9udC13ZWlnaHQ6IG5vcm1hbDsNCglmb250LXZhcmlhbnQ6IG5vcm1hbDsNCgl0ZXh0LXRyYW5zZm9ybTogbm9uZTsNCglsaW5lLWhlaWdodDogMTsNCgktd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCn0NCi5hY2UtaWNvbi1leHBhbmQ6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMDAiOw0KfQ0KLmFjZS1pY29uLWNvbnRyYWN0OmJlZm9yZSB7DQoJY29udGVudDogIlxlMDAxIjsNCn0NCi5hY2UtaWNvbi1jb2c6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMDIiOw0KfQ0KLmFjZS1pY29uLWZpbGU6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMDMiOw0KfQ0KLmFjZS1pY29uLWNvZ3M6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMDYiOw0KfQ0KLmFjZS1pY29uLXdhbmQ6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMDciOw0KfQ0KLmFjZS1pY29uLWxpc3Q6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMGIiOw0KfQ0KLmFjZS1pY29uLXNlYXJjaDpiZWZvcmUgew0KCWNvbnRlbnQ6ICJcZTAwYyI7DQp9DQouYWNlLWljb24tY2FuY2VsLWNpcmNsZTpiZWZvcmUgew0KCWNvbnRlbnQ6ICJcZTAwZCI7DQp9DQouYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZTpiZWZvcmUgew0KCWNvbnRlbnQ6ICJcZTAwZSI7DQp9DQouYWNlLWljb24tc3BlbGwtY2hlY2s6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMGYiOw0KfQ0KLmFjZS1pY29uLWNvbnNvbGU6YmVmb3JlIHsNCgljb250ZW50OiAiXGUwMTAiOw0KfQ0KDQouYWNlLXdyYXBwZXIgYTpob3ZlciwNCi5hY2Utd3JhcHBlciBhOmFjdGl2ZSwNCi5hY2Utd3JhcHBlciBhOmZvY3VzIHsNCglvdXRsaW5lOiAwOw0KCWJhY2tncm91bmQ6IG5vbmU7DQp9DQoNCmEuYWNlLWljb24gew0KCWZvbnQtc3R5bGU6IG5vcm1hbDsNCglmb250LXNpemU6IDE2cHg7DQoJY29sb3I6ICM5OTk5OTk7DQoJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCn0NCg0KLmFjZS1pY29uIHsNCglmb250LXN0eWxlOiBub3JtYWw7DQp9DQouYWNlLWhpZGRlbiB7DQoJZGlzcGxheTogbm9uZTsNCn0NCg0KLyogTUFJTiBFRElUT1IgQ09OVEFJTkVSICovDQouYWNlLXdyYXBwZXIgew0KCW1heC13aWR0aDogMTAwJTsNCgltYXgtaGVpZ2h0OiAxMDAlOw0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQoJbWFyZ2luOiAxMHB4IDA7DQoJbWluLWhlaWdodDogMzAwcHg7DQp9DQoNCi5hY2Utd3JhcHBlci5mdWxsc2NyZWVuIHsNCgl6LWluZGV4OiA5OTk5OTsNCn0NCg0KLmFjZS13cmFwcGVyIC51aS1yZXNpemFibGUtc2Ugew0KCXJpZ2h0OiA4cHg7DQoJYm90dG9tOiA4cHg7DQp9DQoNCi5hY2Utd3JhcHBlci5mdWxsc2NyZWVuIC51aS1yZXNpemFibGUtc2Ugew0KCWRpc3BsYXk6IG5vbmU7DQp9DQoNCi5hY2UtdWktY29udGFpbmVyIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJdG9wOiAwOw0KCWJvdHRvbTogMDsNCglsZWZ0OiAwOw0KCXJpZ2h0OiAwOw0KCWJvcmRlci1yYWRpdXM6IDJweDsNCglib3JkZXI6IDRweCBzb2xpZCAjMzQzNDM0Ow0KCWJhY2tncm91bmQ6ICMzNDM0MzQ7DQoJYm94LXNoYWRvdzogMCAwIDRweCAjMzQzNDM0Ow0KCW1hcmdpbjogOHB4Ow0KfQ0KDQovKiBFRElUT1IgQ09OVEVOVCAqLw0KDQouYWNlLXdyYXBwZXIgdGV4dGFyZWEgew0KCWRpc3BsYXk6IGJsb2NrOw0KCWJvcmRlci1yYWRpdXM6IDA7DQoJYm9yZGVyOiBub25lOw0KCXBhZGRpbmctbGVmdDogMDsNCglwYWRkaW5nLXJpZ2h0OiAwOw0KfQ0KDQouYWNlLXdyYXBwZXIgdGV4dGFyZWEgew0KCWhlaWdodDogMTAwJTsNCgl3aWR0aDogMTAwJTsNCgltYXJnaW46IDA7DQoJcGFkZGluZzogMDsNCglmb250LWZhbWlseTogJ0NvbnNvbGFzJywgJ01vbmFjbycsICdMdWNpZGEgQ29uc29sZScsICdMaWJlcmF0aW9uIE1vbm8nLCAnRGVqYVZ1IFNhbnMgTW9ubycsICdCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8nLCAnQ291cmllciBOZXcnOw0KCWZvbnQtc2l6ZTogMTNweDsNCn0NCg0KLmFjZV9lZGl0b3JfdGV4dGFyZWEgew0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KLmFjZS1jb250YWluZXIgew0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDQwcHg7DQoJYm90dG9tOiAyN3B4Ow0KCWxlZnQ6IDA7DQoJcmlnaHQ6IDA7DQp9DQoNCi5hY2VfZWRpdG9yX2NvbnRlbnQgew0KCWhlaWdodDogMTAwJTsNCn0NCg0KLmFjZS13cmFwcGVyLmZ1bGxzY3JlZW4gew0KCXBvc2l0aW9uOiBmaXhlZDsNCgl6LWluZGV4OiA5OTk5Ow0KCW1hcmdpbjogMDsNCglsZWZ0OiAwOw0KCXRvcDogMDsNCn0NCg0KLmFjZS13cmFwcGVyLmZ1bGxzY3JlZW4gLmFjZS11aS1jb250YWluZXIgew0KCW1hcmdpbjogMDsNCn0NCg0KLyogRURJVE9SIFRPUCBUT09MQkFSICovDQoNCi5hY2UtdWktdG9vbGJhciB7DQoJYmFja2dyb3VuZDogIzM0MzQzNDsNCgloZWlnaHQ6IDM4cHg7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KCWNvbG9yOiAjZmZmOw0KCWNvbG9yOiAjOTk5OTk5Ow0KCXBhZGRpbmc6IDAgMCAwIDElOw0KCWJveC1zaGFkb3c6IGluc2V0IDBweCAtNXB4IDZweCAwcHggcmdiYSgwLCAwLCAwLCAuMik7DQp9DQoNCi5hY2UtbGVmdCB7DQoJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCWZsb2F0OiBsZWZ0Ow0KCXdpZHRoOiBhdXRvOw0KfQ0KDQouYWNlLXJpZ2h0IHsNCglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQoJZmxvYXQ6IHJpZ2h0Ow0KCXdpZHRoOiBhdXRvOw0KfQ0KDQouYWNlLWluZm8tZGl2aWRlciB7DQoJZGlzcGxheTogYmxvY2s7DQoJZmxvYXQ6IGxlZnQ7DQoJaGVpZ2h0OiAzMnB4Ow0KCXdpZHRoOiAxcHg7DQoJYmFja2dyb3VuZDogIzMzMzMzMzsNCgltYXJnaW46IDAgMTVweCAwIDE1cHg7DQoJYm94LXNoYWRvdzogMHB4IDBweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIC41KTsNCn0NCg0KLmFjZS11aS10b29sYmFyIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7DQoJY29sb3I6ICM4QzhDOEM7DQp9DQoNCi5hY2UtdWktdG9vbGJhcjotbW96LXBsYWNlaG9sZGVyIHsNCgljb2xvcjogIzhDOEM4QzsNCn0NCg0KLmFjZS11aS10b29sYmFyIDo6LW1vei1wbGFjZWhvbGRlciB7DQoJY29sb3I6IzhDOEM4QzsNCn0NCg0KLmFjZS11aS10b29sYmFyOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7DQoJY29sb3I6IzhDOEM4QzsNCn0NCg0KLmFjZS11aS10b29sYmFyIGlucHV0W3R5cGU9InRleHQiXSB7DQoJY29sb3I6ICM5OTk5OTk7DQp9DQoNCi5hY2UtdGV4dC1pbnB1dCB7DQoJcGFkZGluZzogMDsJDQoJZm9udC1zaXplOiAxNHB4Ow0KCWhlaWdodDogMjZweDsNCglsaW5lLWhlaWdodDogMjZweDsNCgltYXJnaW46IDVweCA1cHggMCAwOw0KfQ0KDQouYWNlLXRleHQtaW5wdXQgLmFjZS1pbmZvLWRpdmlkZXIgew0KCWRpc3BsYXk6IGlubGluZS1ibG9jazsNCglmbG9hdDogbm9uZTsNCgloZWlnaHQ6IDI0cHg7DQp9DQoNCi5hY2UtdGV4dC1pbnB1dCAuYWNlLWlucHV0IHsNCglib3JkZXI6IG5vbmU7DQoJYmFja2dyb3VuZDogIzFiMWIxYjsNCglmb250LXNpemU6IDExcHg7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KCXBhZGRpbmc6IDA7DQp9DQoNCi5hY2Utb3B0aW9uLWljb24gew0KCWRpc3BsYXk6IGlubGluZS1ibG9jazsNCglwYWRkaW5nOiAwIDRweDsNCglwb3NpdGlvbjogcmVsYXRpdmU7DQoJY3Vyc29yOiBwb2ludGVyOw0KCW1hcmdpbi1sZWZ0OiA1cHg7DQp9DQoNCi5hY2Utb3B0aW9uLWljb246aG92ZXIsDQouYWNlLW9wdGlvbi1pY29uLmFjZS1tZW51LWFjdGl2ZSB7DQoJY29sb3I6ICM5OTk7DQp9DQoNCi5hY2UtZnVsbHNjcmVlbi1idXR0b24gew0KCWxpbmUtaGVpZ2h0OiAyNnB4Ow0KCW1hcmdpbjogNXB4IDVweCAwIDA7DQoJdGV4dC1hbGlnbjogY2VudGVyOw0KCXdpZHRoOiAyMHB4Ow0KCXRleHQtc2hhZG93OiAxcHggLTFweCAxcHggIzAwMDsNCn0NCg0KLmFjZS10b2dnbGUtZWRpdG9yIHsNCgliYWNrZ3JvdW5kOiAjMjIyMjIyOw0KCWhlaWdodDogMjZweDsNCgliYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIC4yNSk7DQoJYm9yZGVyLXJhZGl1czogM3B4Ow0KCWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIC4zKSwgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAuMSk7DQoJbWFyZ2luLXRvcDogNXB4Ow0KfQ0KDQouYWNlLXVpLXRvb2xiYXIgaW5wdXRbdHlwZT0icmFkaW8iXS5hY2UtdG9nZ2xlIHsNCglkaXNwbGF5OiBub25lOw0KfQ0KDQouYWNlLXVpLXRvb2xiYXIgaW5wdXRbdHlwZT0icmFkaW8iXS5hY2UtdG9nZ2xlOmNoZWNrZWQgKyBsYWJlbCB7DQoJYmFja2dyb3VuZDogIzk5OTsNCglib3gtc2hhZG93OiBpbnNldCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIC41KSwgMCAwIDJweCByZ2JhKDAsIDAsIDAsIC4yKTsNCgljdXJzb3I6IGRlZmF1bHQ7DQoJY29sb3I6ICMzMzMzMzM7DQoJdGV4dC1zaGFkb3c6IDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7DQp9DQoNCi5hY2UtdWktdG9vbGJhciBpbnB1dFt0eXBlPSJyYWRpbyJdLmFjZS10b2dnbGUgKyBsYWJlbCB7DQoJd2lkdGg6IGF1dG87DQoJaGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7DQoJbGluZS1oZWlnaHQ6IDI0cHg7DQoJYm9yZGVyLXJhZGl1czogM3B4Ow0KCWN1cnNvcjogcG9pbnRlcjsNCglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQoJcGFkZGluZzogMCAxMHB4Ow0KCW1hcmdpbjogMXB4Ow0KCWZvbnQtd2VpZ2h0OiBib2xkOw0KCWJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7DQoJdGV4dC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIC40NSk7DQp9DQoNCi5hY2UtdWktdG9vbGJhciBpbnB1dFt0eXBlPSJyYWRpbyJdLmFjZS10b2dnbGUtbGVmdCArIGxhYmVsIHsNCglib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsNCglib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsNCn0NCg0KLmFjZS11aS10b29sYmFyIGlucHV0W3R5cGU9InJhZGlvIl0uYWNlLXRvZ2dsZS1yaWdodCArIGxhYmVsIHsNCglib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOw0KCWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7DQp9DQoNCi5hY2UtdG9vbHRpcCB7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KCWRpc3BsYXk6IGlubGluZS1ibG9jazsNCn0NCg0KLmFjZS10b29sdGlwOmFmdGVyIHsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJb3BhY2l0eTogMDsNCgl0b3A6IC05OTllbTsNCgl6LWluZGV4OiA5OTk7DQp9DQoNCi5hY2UtdG9vbHRpcDpob3ZlcjphZnRlciB7DQoJY29udGVudDogYXR0cihkYXRhLXRpcCk7DQoJYmFja2dyb3VuZDogIzIyMjsNCglvcGFjaXR5OiAuOTU7DQoJY29sb3I6ICM5OTk5OTk7DQoJdGV4dC1zaGFkb3c6IG5vbmU7DQoJcGFkZGluZzogOHB4IDEwcHg7DQoJZm9udC1zaXplOiAxMXB4Ow0KCWxpbmUtaGVpZ2h0OiAxMXB4Ow0KCXdoaXRlLXNwYWNlOiBub3dyYXA7DQoJZm9udC13ZWlnaHQ6IG5vcm1hbDsNCglib3JkZXItcmFkaXVzOiAycHg7DQoJYm94LXNoYWRvdzogNHB4IDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOw0KCXRvcDogMTAwJTsNCglsZWZ0OiA1MCU7DQp9DQoNCi5hY2UtdG9vbHRpcC5hY2UtdG9vbHRpcC10b3AtbGVmdDpob3ZlcjphZnRlciB7DQoJcmlnaHQ6IDUwJTsNCglsZWZ0OiBhdXRvOw0KCWJvdHRvbTogMTAwJTsNCgl0b3A6IGF1dG87DQp9DQoNCi8qIEJPVFRPTSBJTkZPUk1BVElPTiBCQVIgKi8NCg0KLmFjZS11aS10b29sYmFyLWJvdHRvbSB7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCWJvdHRvbTogMDsNCgl6LWluZGV4OiAxOw0KCWhlaWdodDogMTVweDsNCglsaW5lLWhlaWdodDogMTVweDsNCglwYWRkaW5nOiA1cHggMDsNCgliYWNrZ3JvdW5kOiAjMzQzNDM0Ow0KCWNvbG9yOiAjOTk5OTk5Ow0KCWJvcmRlci10b3A6IDJweCBzb2xpZCAjMzQzNDM0Ow0KCXdpZHRoOiAxMDAlOw0KCXotaW5kZXg6IDEwOw0KCWJveC1zaGFkb3c6IGluc2V0IDBweCAwcHggNnB4IDBweCByZ2JhKDAsIDAsIDAsIC42KTsNCn0NCg0KLmFjZS11aS1ib3R0b20tbGVmdCB7DQoJd2lkdGg6IDcwJTsNCglwYWRkaW5nOiAwIDElOw0KfQ0KDQouYWNlLWVkaXRvci1pbmZvLWJvdHRvbSB7DQoJd2lkdGg6IGF1dG87DQoJZm9udC1zaXplOiAxMXB4Ow0KfQ0KDQouYWNlLXVpLXRvb2xiYXItYm90dG9tICAuYWNlLWluZm8tZGl2aWRlciB7DQoJaGVpZ2h0OiAxNHB4Ow0KfQ0KDQovKiBPUFRJT04gTUVOVSAqLw0KDQouYWNlLW9wdGlvbi1tZW51LA0KI29lX21haW5hcmVhIC5hY2Utb3B0aW9uLW1lbnUgew0KCWxpc3Qtc3R5bGU6IG5vbmU7DQoJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAwOw0KfQ0KDQouYWNlLW9wdGlvbi1tZW51ID4gbGksDQojb2VfbWFpbmFyZWEgLmFjZS1vcHRpb24tbWVudSA+IGxpIHsNCglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQoJcG9zaXRpb246IHJlbGF0aXZlOw0KfSANCg0KLmFjZS1saXN0IHsNCglkaXNwbGF5OiBub25lOw0KCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgl0b3A6IDQ2cHg7DQoJbGVmdDogLTcwcHg7DQoJd2lkdGg6IDE3MHB4Ow0KCXotaW5kZXg6IDk5OTsNCgliYWNrZ3JvdW5kOiAjMjIyOw0KCW9wYWNpdHk6IC45NTsNCgljb2xvcjogIzk5OTk5OTsNCgl0ZXh0LXNoYWRvdzogbm9uZTsNCglwYWRkaW5nOiA4cHggMTBweDsNCglmb250LXNpemU6IDExcHg7DQoJbGluZS1oZWlnaHQ6IDExcHg7DQoJd2hpdGUtc3BhY2U6IG5vd3JhcDsNCglmb250LXdlaWdodDogbm9ybWFsOw0KCWJvcmRlci1yYWRpdXM6IDJweDsNCglib3JkZXI6IDRweCBzb2xpZCAjMzQzNDM0Ow0KCWJveC1zaGFkb3c6IDRweCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yKTsNCn0NCg0KLmFjZS1saXN0OmFmdGVyew0KCWNvbnRlbnQ6ICcnOw0KCXdpZHRoOiAwOw0KCWhlaWdodDogMDsNCgl6LWluZGV4OiAxMDsNCglib3JkZXItc3R5bGU6IHNvbGlkOw0KCWJvcmRlci13aWR0aDogMCAxMHB4IDEwcHggMTBweDsNCgl0b3A6IC0xMHB4Ow0KCWxlZnQ6IDUwJTsNCgltYXJnaW4tbGVmdDogLTEwcHg7DQoJcG9zaXRpb246IGFic29sdXRlOw0KCWJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgdHJhbnNwYXJlbnQgIzM0MzQzNCB0cmFuc3BhcmVudDsNCn0NCg0KI29lX21haW5hcmVhIC5hY2Utb3B0aW9uLW1lbnUgdWwuYWNlLWxpc3QsDQouYWNlLW9wdGlvbi1tZW51IHVsLmFjZS1saXN0IHsNCglsaXN0LXN0eWxlOiBub25lOw0KCW1hcmdpbjogMDsNCglwYWRkaW5nOiAwOw0KfQ0KDQojb2VfbWFpbmFyZWEgLmFjZS1vcHRpb24tbWVudSB1bCBsaSwNCi5hY2Utb3B0aW9uLW1lbnUgdWwgbGkgew0KCXBvc2l0aW9uOiByZWxhdGl2ZTsNCglsaXN0LXN0eWxlOiBub25lOw0KCWxpbmUtaGVpZ2h0OiAyOHB4Ow0KCWJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzQzNDM0Ow0KCXBhZGRpbmc6IDAgMTVweDsNCn0NCg0KI29lX21haW5hcmVhIC5hY2Utb3B0aW9uLW1lbnUgdWwgbGk6aG92ZXIsDQouYWNlLW9wdGlvbi1tZW51IHVsIGxpOmhvdmVyIHsNCgljb2xvcjogIzk5OTsNCgljdXJzb3I6IHBvaW50ZXI7DQp9DQoNCi5hY2Utb3B0aW9uLW1lbnUgdWwgbGk6bGFzdC1jaGlsZCB7DQoJYm9yZGVyOiBub25lOw0KfQ0KDQouYWNlLXVpLXRvb2xiYXItYm90dG9tIC5hY2UtbGlzdCB7DQoJd2lkdGg6IDM5OHB4Ow0KCW92ZXJmbG93LXk6IHNjcm9sbDsNCgltYXgtaGVpZ2h0OiAzMDBweDsNCglyaWdodDogNTAlOw0KCWxlZnQ6IGF1dG87DQoJYm90dG9tOiA0MHB4Ow0KCXRvcDogYXV0bzsNCn0NCg0KI29lX21haW5hcmVhIC5hY2UtdWktdG9vbGJhci1ib3R0b20gLmFjZS1vcHRpb24tbWVudSB1bCBsaSwNCi5hY2UtdWktdG9vbGJhci1ib3R0b20gLmFjZS1vcHRpb24tbWVudSB1bCBsaSB7DQoJbWFyZ2luOiAwIDJweDsNCglwYWRkaW5nOiAwIDEwcHg7DQoJZmxvYXQ6IGxlZnQ7DQoJd2lkdGg6IDEwMnB4Ow0KfQ0KDQouYWNlLW9wdGlvbi1tZW51IGkgew0KCWRpc3BsYXk6IG5vbmU7DQp9DQoNCi5hY2Utb3B0aW9uLW1lbnUgLmFjZS1zZWxlY3RlZCBpIHsNCglkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQp9DQoNCi8qIE9WRVJSSURFIFVJIENPTE9SIFNDSEVNRSBJRiBCUklHSFQgV0FTIERFVEVDVEVEICovDQoNCi5hY2UtYnJpZ2h0LmFjZS11aS1jb250YWluZXIgew0KCWJvcmRlcjogNHB4IHNvbGlkICNFMEUwRTA7DQoJYmFja2dyb3VuZDogI0UwRTBFMDsNCglib3gtc2hhZG93OiAwIDAgNHB4ICNDQ0NDQ0M7DQp9DQoNCi5hY2UtYnJpZ2h0IC5hY2UtdWktdG9vbGJhciB7DQoJYmFja2dyb3VuZDogI0VGRUZFRjsNCgljb2xvcjogIzM0MzQzNDsNCglib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMnB4IDAgcmdiYSgyMjAsIDIyMCwgMjIwLCAuMyk7DQp9DQoNCi5hY2UtYnJpZ2h0IGEuYWNlLWljb24gew0KCWNvbG9yOiAjMzQzNDM0Ow0KfQ0KDQouYWNlLWJyaWdodCAuYWNlLWZ1bGxzY3JlZW4tYnV0dG9uIHsNCgl0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGOw0KfQ0KDQouYWNlLWJyaWdodCAuYWNlLWluZm8tZGl2aWRlciB7DQoJYmFja2dyb3VuZDogI0RERERERDsNCglib3gtc2hhZG93OiAwcHggMHB4IDEwcHggMXB4IHJnYmEoMTkwLCAxOTAsIDE5MCwgLjIpOw0KfQ0KDQouYWNlLWJyaWdodCAuYWNlLXVpLXRvb2xiYXIgOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsNCgljb2xvcjogI0MyQzJDMjsNCn0NCg0KLmFjZS1icmlnaHQgLmFjZS11aS10b29sYmFyOi1tb3otcGxhY2Vob2xkZXIgew0KCWNvbG9yOiAjQzJDMkMyOw0KfQ0KDQouYWNlLWJyaWdodCAuYWNlLXVpLXRvb2xiYXIgOjotbW96LXBsYWNlaG9sZGVyIHsNCgljb2xvcjogI0MyQzJDMjsNCn0NCg0KLmFjZS1icmlnaHQgLmFjZS11aS10b29sYmFyOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7DQoJY29sb3I6ICNDMkMyQzI7DQp9DQoNCg0KLmFjZS1icmlnaHQgLmFjZS10b2dnbGUtZWRpdG9yIHsNCgliYWNrZ3JvdW5kOiAjQzZDNkM2Ow0KCWJhY2tncm91bmQ6IHJnYmEoMTk4LCAxOTgsIDE5OCwgLjUwKTsNCglib3gtc2hhZG93OiBpbnNldCAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAuMyksIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjEpOw0KfQ0KDQouYWNlLWJyaWdodCAuYWNlLXVpLXRvb2xiYXIgaW5wdXRbdHlwZT0icmFkaW8iXS5hY2UtdG9nZ2xlICsgbGFiZWwgew0KCWJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjI1KTsNCgl0ZXh0LXNoYWRvdzogMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsNCn0NCg0KLmFjZS1icmlnaHQgLmFjZS11aS10b29sYmFyIGlucHV0W3R5cGU9InJhZGlvIl0uYWNlLXRvZ2dsZTpjaGVja2VkICsgbGFiZWwgew0KCWJhY2tncm91bmQ6ICM5OTk7DQoJYm94LXNoYWRvdzogaW5zZXQgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAuNSksIDAgMCAycHggcmdiYSgwLCAwLCAwLCAuMik7DQoJY29sb3I6ICMzMzMzMzM7DQoJdGV4dC1zaGFkb3c6IDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7DQp9DQoNCi5hY2UtYnJpZ2h0IC5hY2UtdG9vbHRpcDpob3ZlcjphZnRlciB7DQoJYmFja2dyb3VuZDogI0ZGRkZGRjsNCgljb2xvcjogIzMzMzMzMzsNCn0NCg0KLmFjZS1icmlnaHQgLmFjZS1saXN0IHsNCgliYWNrZ3JvdW5kOiAjRkZGRkZGOw0KCWNvbG9yOiAjMzMzMzMzOw0KCWJvcmRlcjogNHB4IHNvbGlkICNFRkVGRUY7DQp9DQoNCi5hY2UtYnJpZ2h0IC5hY2UtbGlzdDphZnRlcnsNCglib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICNFRkVGRUYgdHJhbnNwYXJlbnQ7DQp9DQoNCiNvZV9tYWluYXJlYSAuYWNlLWJyaWdodCAuYWNlLW9wdGlvbi1tZW51IHVsIGxpLA0KLmFjZS1icmlnaHQgLmFjZS1vcHRpb24tbWVudSB1bCBsaSB7DQoJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNFRkVGRUY7DQp9DQoNCi5hY2UtYnJpZ2h0IC5hY2UtdWktdG9vbGJhci1ib3R0b20gew0KCWJhY2tncm91bmQ6ICNFRkVGRUY7DQoJY29sb3I6ICMzNDM0MzQ7DQoJYm9yZGVyLXRvcDogMnB4IHNvbGlkICNFMEUwRTA7DQoJYm94LXNoYWRvdzogaW5zZXQgMHB4IDBweCA2cHggMHB4IHJnYmEoMjIwLCAyMjAsIDIyMCwgLjYpOw0KfQ0KDQovKiBOSUNFUiBTQ1JPT0xCQVIgRk9SIFNNQVJUIEJST1dTRVIgKi8NCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKSB7IA0KCS5hY2UtY29udGFpbmVyIDo6LXdlYmtpdC1zY3JvbGxiYXIgew0KCQl3aWR0aDogNnB4Ow0KCQloZWlnaHQ6IDZweDsNCgl9DQoJDQoJLmFjZS1jb250YWluZXIgOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7DQoJCWJhY2tncm91bmQtY29sb3I6IHJnYmEoNTIsIDUyLCA1MiwgLjMpOw0KCQlib3JkZXItcmFkaXVzOiA1cHg7DQoJfQ0KCQ0KCS5hY2UtY29udGFpbmVyICA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsNCgkJYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpOw0KCQlib3JkZXItcmFkaXVzOiA1cHg7DQoJfQ0KCQ0KCS5hY2UtY29udGFpbmVyIDo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHsNCgkJZGlzcGxheTogbm9uZTsNCgl9DQoJDQoJLmFjZV9zY3JvbGxiYXIgew0KCQl3aWR0aDogN3B4ICFpbXBvcnRhbnQ7DQoJCWJvdHRvbTogMzBweCAhaW1wb3J0YW50Ow0KCQl0b3A6IDMwcHggIWltcG9ydGFudDsNCgl9DQoJDQoJLmFjZV9zY3JvbGxiYXItaCB7DQoJCWhlaWdodDogN3B4ICFpbXBvcnRhbnQ7DQoJCXJpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7DQoJCWxlZnQ6IDYwcHggIWltcG9ydGFudDsNCgl9DQoJDQoJLmFjZV9zY3JvbGxiYXItaCAuYWNlX3Njcm9sbGJhci1pbm5lciB7DQoJCWhlaWdodDogN3B4ICFpbXBvcnRhbnQ7DQoJfQ0KfQ0KDQovKiBISURESU5HIFNUVUZGICovDQoNCi52aXN1YWxseWhpZGRlbiB7DQoJYm9yZGVyOiAwOw0KCWNsaXA6IHJlY3QoMCAwIDAgMCk7DQoJaGVpZ2h0OiAxcHg7DQoJbWFyZ2luOiAtMXB4Ow0KCW92ZXJmbG93OiBoaWRkZW47DQoJcGFkZGluZzogMDsNCglwb3NpdGlvbjogYWJzb2x1dGU7DQoJd2lkdGg6IDFweDsNCn0NCg0KDQoudmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmFjdGl2ZSwNCi52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6Zm9jdXMgew0KCWNsaXA6IGF1dG87DQoJaGVpZ2h0OiBhdXRvOw0KCW1hcmdpbjogMDsNCglvdmVyZmxvdzogdmlzaWJsZTsNCglwb3NpdGlvbjogc3RhdGljOw0KCXdpZHRoOiBhdXRvOw0KfQ0KDQovKiBDTEVBUiBKVVNUIElOIENBU0UgKi8NCg0KLmNmOmJlZm9yZSwgLmNmOmFmdGVyIHsgDQoJY29udGVudDogJyc7IA0KCWRpc3BsYXk6IHRhYmxlOw0KfQ0KDQouY2Y6YWZ0ZXIsIC5jbGVhciB7IA0KCWNsZWFyOiBib3RoOyANCn0NCg0KOi13ZWJraXQtZnVsbC1zY3JlZW4gI3NjcmVlbiB7DQoJd2lkdGg6IDEwMCU7DQoJaGVpZ2h0OiAxMDAlOw0KfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/font/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/font/icomoon.dev.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8bWV0YWRhdGE+DQpUaGlzIGlzIGEgY3VzdG9tIFNWRyBmb250IGdlbmVyYXRlZCBieSBJY29Nb29uLg0KPGljb25zZXQgZ3JpZD0iMTYiPjwvaWNvbnNldD4NCjwvbWV0YWRhdGE+DQo8ZGVmcz4NCjxmb250IGlkPSJpY29tb29uIiBob3Jpei1hZHYteD0iNTEyIiA+DQo8Zm9udC1mYWNlIHVuaXRzLXBlci1lbT0iNTEyIiBhc2NlbnQ9IjQ4MCIgZGVzY2VudD0iLTMyIiAvPg0KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUxMiIgLz4NCjxnbHlwaCBjbGFzcz0iaGlkZGVuIiB1bmljb2RlPSImI3hmMDAwOyIgZD0iTTAsNDgwTCA1MTIgLTMyTDAgLTMyIHoiIGhvcml6LWFkdi14PSIwIiAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDA7IiBkPSJNIDUxMiw0ODAgTCA1MTIsMjg4IEwgNDQyLjg3LDM1Ny4xMyBMIDMzNi44NywyNTEuMTMgTCAyODMuMTMsMzA0Ljg3IEwgMzg5LjEzLDQxMC44NyBMIDMyMCw0ODAgWk0gMTIyLjg3LDQxMC44NyBMIDIyOC44NywzMDQuODcgTCAxNzUuMTMsMjUxLjEzIEwgNjkuMTMsMzU3LjEzIEwgMCwyODggTCAwLDQ4MCBMIDE5Miw0ODAgWk0gNDQyLjg3LDkwLjg3IEwgNTEyLDE2MCBMIDUxMi0zMiBMIDMyMC0zMiBMIDM4OS4xMywzNy4xMyBMIDI4My4xMywxNDMuMTMgTCAzMzYuODcsMTk2Ljg3IFpNIDIyOC44NywxNDMuMTMgTCAxMjIuODcsMzcuMTMgTCAxOTItMzIgTCAwLTMyIEwgMCwxNjAgTCA2OS4xMyw5MC44NyBMIDE3NS4xMywxOTYuODcgWiIgZGF0YS10YWdzPSJleHBhbmQsIGVubGFyZ2UsIG1heGltaXplLCBmdWxsc2NyZWVuIiAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDE7IiBkPSJNIDMyLDE5MiBMIDIyNCwxOTIgTCAyMjQsMCBMIDE1NC44Nyw2OS4xMyBMIDUzLjg3LTMxLjg3IEwgMC4xMywyMS44NyBMIDEwMS4xMywxMjIuODcgWk0gNDEwLjg3LDEyMi44NyBMIDUxMS44NywyMS44NyBMIDQ1OC4xMy0zMS44NyBMIDM1Ny4xMyw2OS4xMyBMIDI4OCwwIEwgMjg4LDE5MiBMIDQ4MCwxOTIgWk0gNDgwLDI1NiBMIDI4OCwyNTYgTCAyODgsNDQ4IEwgMzU3LjEzLDM3OC44NyBMIDQ1OC4xMyw0NzkuODcgTCA1MTEuODcsNDI2LjEzIEwgNDEwLjg3LDMyNS4xMyBaTSAxNTQuODcsMzc4Ljg3IEwgMjI0LDQ0OCBMIDIyNCwyNTYgTCAzMiwyNTYgTCAxMDEuMTMsMzI1LjEzIEwgMC4xMyw0MjYuMTMgTCA1My44Nyw0NzkuODcgWiIgZGF0YS10YWdzPSJjb250cmFjdCwgbWluaW1pemUsIHNocmluaywgY29sbGFwc2UiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0gNTEyLDE3NS45NTNsMCw5Ni4wOTQgbC03My4zODcsMTIuMjMxYy0yLjk3OSw5LjA2Ni02LjYxMSwxNy44MzQtMTAuODQ3LDI2LjI1bCA0My4yMjcsNjAuNTE3bC02Ny45NDgsNjcuOTQ5bC02MC40MTMtNDMuMTUyDQoJCWMtOC40NTUsNC4yNzctMTcuMjY5LDcuOTQ0LTI2LjM4NCwxMC45NTFMIDMwNC4wNDcsNDgwbC05Ni4wOTQsMCBsLTEyLjIwMS03My4yMDhjLTkuMTE1LTMuMDA3LTE3LjkyOS02LjY3NC0yNi4zODMtMTAuOTUxDQoJCWwtNjAuNDE0LDQzLjE1MmwtNjcuOTQ5LTY3Ljk0OWwgNDMuMjI3LTYwLjUxOGMtNC4yMzUtOC40MTUtNy44NjctMTcuMTgzLTEwLjg0Ni0yNi4yNDlMMCwyNzIuMDQ3bDAtOTYuMDk0IGwgNzMuNTU5LTEyLjI2DQoJCWMgMi45OC04Ljk4NCwgNi42MDUtMTcuNjc0LCAxMC44MjEtMjYuMDE1bC00My4zNzQtNjAuNzI0bCA2Ny45NDktNjcuOTQ4bCA2MC44MjcsNDMuNDQ3YyA4LjMwMS00LjE3NSwgMTYuOTQ1LTcuNzY0LCAyNS44ODItMTAuNzE3DQoJCUwgMjA3Ljk1My0zMmwgOTYuMDk0LDAgbCAxMi4yODksNzMuNzM3YyA4LjkzNywyLjk1MywgMTcuNTgxLDYuNTQyLCAyNS44ODMsMTAuNzE2bCA2MC44MjYtNDMuNDQ2bCA2Ny45NDgsNjcuOTQ4bC00My4zNzIsNjAuNzIzDQoJCWMgNC4yMTYsOC4zNDEsIDcuODM5LDE3LjAzMSwgMTAuODIsMjYuMDE2TCA1MTIsMTc1Ljk1M3ogTSAyNTYsMTYwYy0zNS4zNDYsMC02NCwyOC42NTMtNjQsNjRjMCwzNS4zNDYsIDI4LjY1NCw2NCwgNjQsNjQNCgkJYyAzNS4zNDcsMCwgNjQtMjguNjU0LCA2NC02NEMgMzIwLDE4OC42NTMsIDI5MS4zNDcsMTYwLCAyNTYsMTYweiIgZGF0YS10YWdzPSJjb2csIHByZWZlcmVuY2VzLCBzZXR0aW5ncywgZ2VhciwgZ2VuZXJhdGUsIGNvbnRyb2wsIG9wdGlvbnMiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMzsiIGQ9Ik0gNDMyLDQ4MEwgNDgsNDgwIEMgMjEuNiw0ODAsMCw0NTguNCwwLDQzMmwwLTQxNiBjMC0yNi40LCAyMS42LTQ4LCA0OC00OGwgMzg0LDAgYyAyNi40LDAsIDQ4LDIxLjYsIDQ4LDQ4TCA0ODAsNDMyIEMgNDgwLDQ1OC40LCA0NTguNCw0ODAsIDQzMiw0ODB6IE0gNDE2LDMyTCA2NCwzMiANCgkJTCA2NCw0MTYgbCAzNTIsMCBMIDQxNiwzMiB6TSAxMjgsMjU2TCAzNTIsMjU2TCAzNTIsMjI0TCAxMjgsMjI0ek0gMTI4LDE5MkwgMzUyLDE5MkwgMzUyLDE2MEwgMTI4LDE2MHpNIDEyOCwxMjhMIDM1MiwxMjhMIDM1Miw5NkwgMTI4LDk2ek0gMTI4LDMyMEwgMzUyLDMyMEwgMzUyLDI4OEwgMTI4LDI4OHoiIGRhdGEtdGFncz0iZmlsZSwgbGlzdCwgcGFwZXIsIHBhZ2UsIGRvY3VtZW50IiAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDY7IiBkPSJNIDE4MS44NjEsMTE4Ljk3NGwgMjAuNjQ5LDI4LjkwOGwtMjIuNjI3LDIyLjYyOGwtMjguOTA5LTIwLjY0OGMtNS4zNjEsMi45OTctMTEuMTAyLDUuMzg3LTE3LjEzMyw3LjA5NkwgMTI4LDE5MkwgOTYsMTkyIA0KCQlsLTUuODQtMzUuMDQzYy02LjAzMS0xLjcwOS0xMS43NzItNC4wOTktMTcuMTMzLTcuMDk2TCA0NC4xMTgsMTcwLjUxTCAyMS40OSwxNDcuODgybCAyMC42NDktMjguOTA4DQoJCWMtMi45OTctNS4zNi01LjM4Ny0xMS4xMDMtNy4wOTYtMTcuMTMzTDAsOTZsMC0zMiBsIDM1LjA0My01Ljg0MWMgMS43MDktNi4wMzAsIDQuMDk5LTExLjc3MiwgNy4wOTYtMTcuMTMzTCAyMS40OSwxMi4xMThsIDIyLjYyNy0yMi42MjgNCgkJbCAyOC45MDksMjAuNjQ4YyA1LjM2MS0yLjk5NywgMTEuMTAyLTUuMzg3LCAxNy4xMzMtNy4wOTZMIDk2LTMybCAzMiwwIGwgNS44NCwzNS4wNDNjIDYuMDMxLDEuNzA5LCAxMS43NzIsNC4wOTksIDE3LjEzMyw3LjA5NmwgMjguOTA5LTIwLjY0OA0KCQlsIDIyLjYyNywyMi42MjhsLTIwLjY0OSwyOC45MDhjIDIuOTk3LDUuMzYsIDUuMzg3LDExLjEwMywgNy4wOTYsMTcuMTMzTCAyMjQsNjRsMCwzMiBsLTM1LjA0Myw1Ljg0MQ0KCQlDIDE4Ny4yNDgsMTA3Ljg3MSwgMTg0Ljg1OCwxMTMuNjEzLCAxODEuODYxLDExOC45NzR6IE0gMTEyLDQ4Yy0xNy42NzQsMC0zMiwxNC4zMjctMzIsMzJzIDE0LjMyNiwzMiwgMzIsMzJzIDMyLTE0LjMyNywgMzItMzINCgkJUyAxMjkuNjc0LDQ4LCAxMTIsNDh6TSA1MTIsMjg4bDAsMzIgbC0zMy42OTEsNi4xMjVjLTAuNjIxLDQuMDIzLTEuNDE2LDcuOTg5LTIuMzYyLDExLjg5NWwgMjguNzc5LDE4LjU1TCA0OTIuNDgsMzg2LjEzNGwtMzMuNDcyLTcuMjM0DQoJCWMtMi4xMDcsMy40NTUtNC4zNjMsNi44MS02Ljc0NiwxMC4wNjVsIDE5LjUwMywyOC4xNzFsLTIyLjYyOCwyMi42MjdsLTI4LjE3MS0xOS41MDNjLTMuMjU2LDIuMzgzLTYuNjEsNC42MzgtMTAuMDY1LDYuNzQ3DQoJCWwgNy4yMzQsMzMuNDcyTCAzODguNTcxLDQ3Mi43MjZsLTE4LjU1LTI4Ljc3OWMtMy45MDYsMC45NDYtNy44NzIsMS43NDEtMTEuODk1LDIuMzYyTCAzNTIsNDgwbC0zMiwwIGwtNi4xMjYtMzMuNjkxDQoJCWMtNC4wMjMtMC42MjEtNy45ODgtMS40MTYtMTEuODk1LTIuMzYyTCAyODMuNDMsNDcyLjcyNkwgMjUzLjg2Niw0NjAuNDhsIDcuMjM0LTMzLjQ3MmMtMy40NTUtMi4xMDgtNi44MS00LjM2NC0xMC4wNjUtNi43NDcNCgkJbC0yOC4xNzEsMTkuNTAzbC0yMi42MjctMjIuNjI3bCAxOS41MDMtMjguMTcxYy0yLjM4My0zLjI1NS00LjYzOS02LjYxLTYuNzQ3LTEwLjA2NWwtMzMuNDcyLDcuMjM0bC0xMi4yNDYtMjkuNTY0bCAyOC43NzktMTguNTUNCgkJYy0wLjk0Ni0zLjkwNi0xLjc0MS03Ljg3MS0yLjM2Mi0xMS44OTVMIDE2MCwzMjBsMC0zMiBsIDMzLjY5MS02LjEyNWMgMC42MjEtNC4wMjMsIDEuNDE2LTcuOTg5LCAyLjM2Mi0xMS44OTVsLTI4Ljc3OS0xOC41NQ0KCQlsIDEyLjI0Ni0yOS41NjRsIDMzLjQ3Miw3LjIzNGMgMi4xMDgtMy40NTUsIDQuMzY0LTYuODA5LCA2Ljc0Ny0xMC4wNjVsLTE5LjUwMy0yOC4xNzFsIDIyLjYyNy0yMi42MjhsIDI4LjE3MSwxOS41MDMNCgkJYyAzLjI1NS0yLjM4MywgNi42MS00LjYzOCwgMTAuMDY1LTYuNzQ2bC03LjIzNC0zMy40NzJsIDI5LjU2NC0xMi4yNDZsIDE4LjU1MSwyOC43NzljIDMuOTA1LTAuOTQ2LCA3Ljg3MS0xLjc0MSwgMTEuODk0LTIuMzYyTCAzMjAsMTI4bCAzMiwwIA0KCQlsIDYuMTI2LDMzLjY5MWMgNC4wMjIsMC42MjEsIDcuOTg4LDEuNDE2LCAxMS44OTUsMi4zNjJsIDE4LjU1LTI4Ljc3OWwgMjkuNTY0LDEyLjI0NmwtNy4yMzQsMzMuNDcyDQoJCWMgMy40NTUsMi4xMDgsIDYuODEsNC4zNjMsIDEwLjA2NSw2Ljc0NmwgMjguMTcxLTE5LjUwM2wgMjIuNjI4LDIyLjYyOGwtMTkuNTAzLDI4LjE3MWMgMi4zODMsMy4yNTYsIDQuNjM4LDYuNjEsIDYuNzQ2LDEwLjA2NQ0KCQlsIDMzLjQ3Mi03LjIzNGwgMTIuMjQ2LDI5LjU2NWwtMjguNzc5LDE4LjU1YyAwLjk0NiwzLjkwNiwgMS43NDEsNy44NzEsIDIuMzYyLDExLjg5NUwgNTEyLDI4OHogTSAzMzYsMjM0LjQNCgkJYy0zOC40MzksMC02OS42LDMxLjE2MS02OS42LDY5LjZjMCwzOC40MzksIDMxLjE2LDY5LjYsIDY5LjYsNjkuNnMgNjkuNi0zMS4xNjEsIDY5LjYtNjkuNkMgNDA1LjYsMjY1LjU2MSwgMzc0LjQ0LDIzNC40LCAzMzYsMjM0LjR6IiBkYXRhLXRhZ3M9ImNvZ3MsIHNldHRpbmdzLCBnZWFycywgZ2VuZXJhdGUsIGNvbnRyb2wsIG9wdGlvbnMiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNzsiIGQ9Ik0gMTI4LDM4NEwgNjQsNDQ4TCAzMiw0NDhMIDMyLDQxNkwgOTYsMzUyIAl6TSAxNjAsNDgwTCAxOTIsNDgwTCAxOTIsNDE2TCAxNjAsNDE2ek0gMjg4LDMyMEwgMzUyLDMyMEwgMzUyLDI4OEwgMjg4LDI4OHpNIDMyMCw0MTZMIDMyMCw0NDhMIDI4OCw0NDhMIDIyNCwzODRMIDI1NiwzNTIgCXpNMCwzMjBMIDY0LDMyMEwgNjQsMjg4TDAsMjg4ek0gMTYwLDE5MkwgMTkyLDE5MkwgMTkyLDEyOEwgMTYwLDEyOHpNIDMyLDE5MkwgMzIsMTYwTCA2NCwxNjBMIDEyOCwyMjRMIDk2LDI1NiAJek0gNTA1LDM5TCAxODYuOTQxLDM1Ny4wNTljLTkuMzM0LDkuMzM0LTI0LjYwNyw5LjMzNC0zMy45NDEsMEwgMTIyLjk0MSwzMjdjLTkuMzM0LTkuMzM0LTkuMzM0LTI0LjYwNywwLTMzLjk0MUwgNDQxLTI1DQoJCWMgOS4zMzQtOS4zMzQsIDI0LjYwNy05LjMzNCwgMzMuOTQxLDBMIDUwNSw1LjA1OUMgNTE0LjMzNCwxNC4zOTMsIDUxNC4zMzQsMjkuNjY2LCA1MDUsMzl6IE0gMjQwLDIwOGwtOTYsOTZsIDMyLDMybCA5Ni05NkwgMjQwLDIwOHoiIGRhdGEtdGFncz0id2FuZCwgbWFnaWMsIHdpemFyZCIgLz4NCjxnbHlwaCB1bmljb2RlPSImI3hlMDBiOyIgZD0iTTAsNDgwTCAxMjgsNDgwTCAxMjgsMzUyTDAsMzUyek0gMTkyLDQ0OEwgNTEyLDQ0OEwgNTEyLDM4NEwgMTkyLDM4NHpNMCwyODhMIDEyOCwyODhMIDEyOCwxNjBMMCwxNjB6TSAxOTIsMjU2TCA1MTIsMjU2TCA1MTIsMTkyTCAxOTIsMTkyek0wLDk2TCAxMjgsOTZMIDEyOC0zMkwwLTMyek0gMTkyLDY0TCA1MTIsNjRMIDUxMiwwTCAxOTIsMHoiIGRhdGEtdGFncz0ibGlzdCwgYnVsbGV0LCB1bCwgdG9kbywgbWVudSIgLz4NCjxnbHlwaCB1bmljb2RlPSImI3hlMDBjOyIgZD0iTSA0OTYuMTMxLDQ0LjMwMkwgMzc0Ljg1NSwxNDcuNDQ5Yy0xMi41MzcsMTEuMjgzLTI1Ljk0NSwxNi40NjMtMzYuNzc2LDE1Ljk2M0MgMzY2LjcwNywxOTYuOTQ2LCAzODQsMjQwLjQ1MSwgMzg0LDI4OA0KCUMgMzg0LDM5NC4wMzksIDI5OC4wMzksNDgwLCAxOTIsNDgwQyA4NS45NjIsNDgwLDAsMzk0LjAzOSwwLDI4OGMwLTEwNi4wMzksIDg1Ljk2MS0xOTIsIDE5Mi0xOTJjIDQ3LjU0OSwwLCA5MS4wNTQsMTcuMjkzLCAxMjQuNTg4LDQ1LjkyMg0KCWMtMC41LTEwLjgzMSwgNC42OC0yNC4yMzksIDE1Ljk2My0zNi43NzZsIDEwMy4xNDctMTIxLjI3NmMgMTcuNjYxLTE5LjYyMywgNDYuNTExLTIxLjI3NywgNjQuMTEtMy42NzhTIDUxNS43NTQsMjYuNjQxLCA0OTYuMTMxLDQ0LjMwMnoNCgkgTSAxOTIsMTYwYy03MC42OTIsMC0xMjgsNTcuMzA4LTEyOCwxMjhTIDEyMS4zMDgsNDE2LCAxOTIsNDE2cyAxMjgtNTcuMzA4LCAxMjgtMTI4UyAyNjIuNjkzLDE2MCwgMTkyLDE2MHoiIGRhdGEtdGFncz0ic2VhcmNoLCBtYWduaWZpZXIsIGxvb2t1cCwgZmluZCIgLz4NCjxnbHlwaCB1bmljb2RlPSImI3hlMDBkOyIgZD0iTSAyNTYsNDgwQyAxMTQuNjE1LDQ4MCwwLDM2NS4zODUsMCwyMjRzIDExNC42MTUtMjU2LCAyNTYtMjU2cyAyNTYsMTE0LjYxNSwgMjU2LDI1NlMgMzk3LjM4NSw0ODAsIDI1Niw0ODB6IE0gMzg0LDMwNi43NDVMIDMwMS4yNTYsMjI0DQoJTCAzODQsMTQxLjI1NkwgMzg0LDk2IGwtNDUuMjU2LDAgTCAyNTYsMTc4Ljc0NEwgMTczLjI1NSw5NkwgMTI4LDk2IGwwLDQ1LjI1NiBMIDIxMC43NDUsMjI0TCAxMjgsMzA2Ljc0NUwgMTI4LDM1MiBsIDQ1LjI1NSwwIEwgMjU2LDI2OS4yNTVMIDMzOC43NDQsMzUyTCAzODQsMzUyIA0KCUwgMzg0LDMwNi43NDUgeiIgZGF0YS10YWdzPSJjYW5jZWwtY2lyY2xlLCBjbG9zZSwgcmVtb3ZlLCBkZWxldGUiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwZTsiIGQ9Ik0gMjU2LDQ4MEMgMTE0LjYxNSw0ODAsMCwzNjUuMzg1LDAsMjI0cyAxMTQuNjE1LTI1NiwgMjU2LTI1NnMgMjU2LDExNC42MTUsIDI1NiwyNTZTIDM5Ny4zODUsNDgwLCAyNTYsNDgweiBNIDIwOCw2NEwgMTAyLDIwMmwgNDcsNDlsIDU5LTc1DQoJbCAxODUsMTUxbCAyMy0yM0wgMjA4LDY0eiIgZGF0YS10YWdzPSJjaGVja21hcmstY2lyY2xlLCB0aWNrLCBjb3JyZWN0IiAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMGY7IiBkPSJNIDY0LDM1MmwgNjQsMCBsMC05NiBsIDMyLDAgTCAxNjAsNDQ4IGMwLDE3LjYtMTQuNCwzMi0zMiwzMkwgNjQsNDgwIEMgNDYuNCw0ODAsIDMyLDQ2NS42LCAzMiw0NDhsMC0xOTIgbCAzMiwwIEwgNjQsMzUyIHogTSA2NCw0NDhsIDY0LDAgbDAtNjQgTCA2NCwzODQgTCA2NCw0NDggeiBNIDQ4MCw0NDhMIDQ4MCw0ODAgbC05NiwwIA0KCWMtMTcuNjAxLDAtMzItMTQuNC0zMi0zMmwwLTE2MCBjMC0xNy42LCAxNC4zOTktMzIsIDMyLTMybCA5NiwwIGwwLDMyIGwtOTYsMCBMIDM4NCw0NDggTCA0ODAsNDQ4IHogTSAzMjAsNDAwTCAzMjAsNDQ4IGMwLDE3LjYtMTQuNCwzMi0zMiwzMmwtOTYsMCBsMC0yMjQgbCA5NiwwIA0KCWMgMTcuNiwwLCAzMiwxNC40LCAzMiwzMmwwLDQ4IGMwLDE3LjYtNC40LDMyLTIyLDMyQyAzMTUuNiwzNjgsIDMyMCwzODIuNCwgMzIwLDQwMHogTSAyODgsMjg4bC02NCwwIGwwLDY0IGwgNjQsMCBMIDI4OCwyODggeiBNIDI4OCwzODRsLTY0LDAgTCAyMjQsNDQ4IGwgNjQsMCBMIDI4OCwzODQgek0gNDE2LDE5MiBMIDIwOC0zMiBMIDk2LDExMiBMIDEzNywxNDcgTCAyMDgsNzMgTCAzODQsMjI0IFoiIGRhdGEtdGFncz0ic3BlbGwtY2hlY2ssIGNvcnJlY3QiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMDsiIGQ9Ik0wLDQ0OGwwLTQ0OCBsIDUxMiwwIEwgNTEyLDQ0OCBMMCw0NDggeiBNIDQ4MCwzMkwgMzIsMzIgTCAzMiw0MTYgbCA0NDgsMCBMIDQ4MCwzMiB6TSA0NDgsMzg0TCA2NCwzODQgbDAtMzIwIGwgMzg0LDAgTCA0NDgsMzg0IHogTSAyMjQsMjI0bC0zMiwwIGwwLTMyIGwtMzIsMCBsMC0zMiBsLTMyLDAgbDAsMzIgbCAzMiwwIGwwLDMyIGwgMzIsMCBsMCwzMiBsLTMyLDAgbDAsMzIgbC0zMiwwIGwwLDMyIGwgMzIsMCBsMC0zMiBsIDMyLDAgbDAtMzIgbCAzMiwwIEwgMjI0LDIyNCB6IE0gMzUyLDE2MGwtOTYsMCANCgkJbDAsMzIgbCA5NiwwIEwgMzUyLDE2MCB6IiBkYXRhLXRhZ3M9ImNvbnNvbGUsIGNvbW1hbmQgbGluZSwgdGVybWluYWwiIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4MjA7IiBob3Jpei1hZHYteD0iMjU2IiAvPg0KPC9mb250PjwvZGVmcz48L3N2Zz4=]]></data>
	</file>
	<file>
	  <filename>/lib/font/icomoon.eot</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[GA0AAHQMAAABAAIAAAAAAAIABQMAAAAAAAABAJABAAAAAExQAAAAAAAAABAAAAAAAAAAAAEAAIAAAAAAHvS9QgAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAA0AgAADAFBGRlRNZlJZ8gAADFgAAAAcR0RFRgA9AAYAAAw4AAAAIE9TLzIvu9wfAAABWAAAAFZjbWFwwDXUCQAAAdwAAAFiZ2FzcP//AAMAAAwwAAAACGdseWZl+Ys5AAADZAAABphoZWFk/ekrfAAAANwAAAA2aGhlYQQR/+UAAAEUAAAAJGhtdHgEqgAgAAABsAAAACpsb2NhDBoKxAAAA0AAAAAibWF4cABbAIsAAAE4AAAAIG5hbWVQ1vPxAAAJ/AAAAYZwb3N0ForrkwAAC4QAAACqAAEAAAABAABCvfQeXw889QALAgAAAAAAzmR1YAAAAADOZHVgAAD/3wIBAeAAAAAIAAIAAAAAAAAAAQAAAeD/3wAuAgAAAP4AAgEAAQAAAAAAAAAAAAAAAAAAAAUAAQAAABAAiAAJAAAAAAACAAAAAQABAAAAQAAAAAAAAAABAgABkAAFAAgBTAFmAAAARwFMAWYAAAD1ABkAhAAAAgAFAwAAAAAAAAAAAAAQAAAAAAAAAAAAAABQZkVkAEDgAPAAAeD/4AAuAeAAIYAAAAEAAAAAAAACAAAAAAAAAACqAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAMAAAADAAAAHAABAAAAAABcAAMAAQAAABwABABAAAAADAAIAAIABAAA4APgB+AQ8AD//wAAAADgAOAG4AvwAP//AAAgBCACH/8QAwABAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgBAAHAAvgD4AcgCHgJIAnoCogLAAxQDTAAAAAEAAP/gAgAB4AACAAARASECAP4AAeD+AAAAAAAEAAD/4AIAAeAABgANABQAGwAAARUnByc3JwcXBycHNTMTNxUjNyc3DwEXIzUXNwIARWo2akXFajZqRcD7RcBFajZsakXARWoB4MBFajZqRUVqNmpFwP57RcBFajY2akXARWoABAAA/+ACAAHgAAYADQAUABsAADczFScHJzchFwcnBzUzNSM1FzcXByU3FSM3JzcgwEVlNmUBNmU2ZUXAwEVlNmX/AEXARWU2wMBFZTZlZTZlRcBAwEVlNmU2RcBFZTYAAgAA/+ACAAHgACcALwAAJTUnJic3JwcmLwEjBwYHJwcXBg8BFRcWFwcXNxYfATM3NjcXNyc2NwYiJjQ2MhYUAgBJBQYrRDwNDgxgDA4NPEQrBgVJSgQGK0Q9DA4MYAwODD1EKwYEmzYlJTYlsGAMDg08RCsGBUlJBQYrRDwNDgxgDA4MPUQrBgRKSgQGK0Q9DA4EJTYlJTYAAAAABgAA/+AB4AHgAA8AEwAXABsAHwAjAAABISIGFREUFjMhMjY1ETQmAyERIQUzFSMVMxUjFTMVIzUzFSMBsP6AFBwcFAGAFBwcJP6gAWD+4ODg4ODg4ODgAeAcFP5gFBwcFAGgFBz+QAGAoCAgICAg4CAAAAAEAAD/4AIAAeAAJwAvAH8AhwAAPwEnByYvASMHBgcnBxcGDwEVFxYXBxc3Fh8BMzc2Nxc3JzY/ATUnJgYiJjQ2MhYUJTUnJic3JwcmJzcnByYnNycHJi8BIwcGBycHFwYHJwcXBgcnBxcGDwEVFxYXBxc3FhcHFzcWFwcXNxYfATM3NjcXNyc2Nxc3JzY3FzcnNjcGIiY0NjIWFLYVFx0ICQYgBgkIHRcVBAMjIwMEFRcdCAkGIAYJCB0XFQQDIyMDPRoTExoTAXAiAQEdDSEDBBQXHAUFBx0TBgYGIAYGBhMdBwUFHBcUBAMhDR0BASIiAQEdDSEDBBQXHAUFBx0TBgYGIAYGBhMdBwUFHBcUBAMhDR0BAXE6KSk6KXcdFxUEAyMjAwQVFx0ICQYgBgkIHRcVBAMjIwMEFRcdCAkGIAYJPxMaExMa3SAGBgYTHQcFBRwXFAQDIQ0dAQEiIgEBHQ0hAwQUFxwFBQcdEwYGBiAGBgYTHQcFBRwXFAQDIQ0dAQEiIgEBHQ0hAwQUFxwFBQcdEwYGMCk6KSk6AAAAAAkAAP/fAgEB4AAEAAgADAARABUAGQAeAC4AMgAAEycjFRc3MxUjFzMVIzc1IwcXBTMVIxczFSMnFTM3JwUBJiIPAQYUFwEWMj8BNjQlJzcXgEAgQEAgIIBAQCAgQCD/AEBAoCAggCBAIAGZ/sIHFAceBwcBPgcUBx4H/vBgIGABgEAgQIBAYCCAIEAgICBgQEAgQCDZAT4HBx4HFAf+wgcHHgcUsGAgYAAAAAAGAAD/4AIAAeAAAwAHAAsADwATABcAABEzFSM3IRUhBzMVIzchFSEHMxUjNyEVIYCAwAFA/sDAgIDAAUD+wMCAgMABQP7AAeCAYEBggGBAYIBgQAACAAD/4AIAAeAAFQAdAAAlJyYHNjU0JiIGFBYzMjcGHwEeATYmJCImNDYyFhQB8HkTEi5woHBwUEc2ARFnDSYaAv72aktLakssZxEBNkdQcHCgcC4SE3kPAhomgUtqS0tqAAAAAgAA/+ACAAHgAAcAFwAAACIGFBYyNjQPARcVIycHIzU3JzUzFzczAWrUlpbUloBTUy1TUy1TUy1TUy0B4JbUlpbUF1NTLVNTLVNTLVNTAAACAAD/4AIAAeAABwANAAAAIgYUFjI2NAEnNxc3FwFq1JaW1Jb+0GovO7kXAeCW1JaW1P72ijFLlxcAAAAHACD/4AHgAeAADQARAB8ALgAyADYAPAAAEzMVMzU0JisBIgYdATM1MxUjJTUjIgYdARQWOwE1IzUHNTQmKwEVMzI2PQE0IzIHIzUzNSM1MxMHJzcXN0BAIBMNQA0TIEBAAaBgDRMTDWBgQBMNYGANExYWIEBAQECA0HApR7ABYGDADRMTDcDAQEAgEw2gDRMgoDAwDRPgEw0wIFBAIED/AOCQI0qXAAAFAAAAAAIAAcAAAwAHAAsAHwAjAAAZASERAyERIQchESEnIxUjFSM1MzUzNSM1IzUzFTMVMxcjNTMCACD+QAHAIP6AAYDgICAgICAgICAgIIBgYAHA/kABwP5gAYAg/sCgICAgICAgICAgYCAAAAAAAAAMAJYAAQAAAAAAAQAHABAAAQAAAAAAAgAHACgAAQAAAAAAAwAjAHgAAQAAAAAABAAHAKwAAQAAAAAABQALAMwAAQAAAAAABgAHAOgAAwABBAkAAQAOAAAAAwABBAkAAgAOABgAAwABBAkAAwBGADAAAwABBAkABAAOAJwAAwABBAkABQAWALQAAwABBAkABgAOANgAaQBjAG8AbQBvAG8AbgAAaWNvbW9vbgAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABpAGMAbwBtAG8AbwBuACAAOgAgADIAMgAtADkALQAyADAAMQAzAABGb250Rm9yZ2UgMi4wIDogaWNvbW9vbiA6IDIyLTktMjAxMwAAaQBjAG8AbQBvAG8AbgAAaWNvbW9vbgAAVgBlAHIAcwBpAG8AbgAgADEALgAwAABWZXJzaW9uIDEuMAAAaQBjAG8AbQBvAG8AbgAAaWNvbW9vbgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAIBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgd1bmlGMDAwB3VuaUUwMDAHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNgd1bmlFMDA3B3VuaUUwMEIHdW5pRTAwQwd1bmlFMDBEB3VuaUUwMEUHdW5pRTAwRgd1bmlFMDEwAAAAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQADAA8AAQAEAAAAAgAAAAAAAQAAAADJiW8xAAAAAM5kdWAAAAAAzmR1YA==]]></data>
	</file>
	<file>
	  <filename>/lib/font/icomoon.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8bWV0YWRhdGE+DQpUaGlzIGlzIGEgY3VzdG9tIFNWRyBmb250IGdlbmVyYXRlZCBieSBJY29Nb29uLg0KPGljb25zZXQgZ3JpZD0iMTYiPjwvaWNvbnNldD4NCjwvbWV0YWRhdGE+DQo8ZGVmcz4NCjxmb250IGlkPSJpY29tb29uIiBob3Jpei1hZHYteD0iNTEyIiA+DQo8Zm9udC1mYWNlIHVuaXRzLXBlci1lbT0iNTEyIiBhc2NlbnQ9IjQ4MCIgZGVzY2VudD0iLTMyIiAvPg0KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUxMiIgLz4NCjxnbHlwaCBjbGFzcz0iaGlkZGVuIiB1bmljb2RlPSImI3hmMDAwOyIgZD0iTTAsNDgwTCA1MTIgLTMyTDAgLTMyIHoiIGhvcml6LWFkdi14PSIwIiAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDA7IiBkPSJNIDUxMiw0ODAgTCA1MTIsMjg4IEwgNDQyLjg3LDM1Ny4xMyBMIDMzNi44NywyNTEuMTMgTCAyODMuMTMsMzA0Ljg3IEwgMzg5LjEzLDQxMC44NyBMIDMyMCw0ODAgWk0gMTIyLjg3LDQxMC44NyBMIDIyOC44NywzMDQuODcgTCAxNzUuMTMsMjUxLjEzIEwgNjkuMTMsMzU3LjEzIEwgMCwyODggTCAwLDQ4MCBMIDE5Miw0ODAgWk0gNDQyLjg3LDkwLjg3IEwgNTEyLDE2MCBMIDUxMi0zMiBMIDMyMC0zMiBMIDM4OS4xMywzNy4xMyBMIDI4My4xMywxNDMuMTMgTCAzMzYuODcsMTk2Ljg3IFpNIDIyOC44NywxNDMuMTMgTCAxMjIuODcsMzcuMTMgTCAxOTItMzIgTCAwLTMyIEwgMCwxNjAgTCA2OS4xMyw5MC44NyBMIDE3NS4xMywxOTYuODcgWiIgIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik0gMzIsMTkyIEwgMjI0LDE5MiBMIDIyNCwwIEwgMTU0Ljg3LDY5LjEzIEwgNTMuODctMzEuODcgTCAwLjEzLDIxLjg3IEwgMTAxLjEzLDEyMi44NyBaTSA0MTAuODcsMTIyLjg3IEwgNTExLjg3LDIxLjg3IEwgNDU4LjEzLTMxLjg3IEwgMzU3LjEzLDY5LjEzIEwgMjg4LDAgTCAyODgsMTkyIEwgNDgwLDE5MiBaTSA0ODAsMjU2IEwgMjg4LDI1NiBMIDI4OCw0NDggTCAzNTcuMTMsMzc4Ljg3IEwgNDU4LjEzLDQ3OS44NyBMIDUxMS44Nyw0MjYuMTMgTCA0MTAuODcsMzI1LjEzIFpNIDE1NC44NywzNzguODcgTCAyMjQsNDQ4IEwgMjI0LDI1NiBMIDMyLDI1NiBMIDEwMS4xMywzMjUuMTMgTCAwLjEzLDQyNi4xMyBMIDUzLjg3LDQ3OS44NyBaIiAgLz4NCjxnbHlwaCB1bmljb2RlPSImI3hlMDAyOyIgZD0iTSA1MTIsMTc1Ljk1M2wwLDk2LjA5NCBsLTczLjM4NywxMi4yMzFjLTIuOTc5LDkuMDY2LTYuNjExLDE3LjgzNC0xMC44NDcsMjYuMjVsIDQzLjIyNyw2MC41MTdsLTY3Ljk0OCw2Ny45NDlsLTYwLjQxMy00My4xNTINCgkJYy04LjQ1NSw0LjI3Ny0xNy4yNjksNy45NDQtMjYuMzg0LDEwLjk1MUwgMzA0LjA0Nyw0ODBsLTk2LjA5NCwwIGwtMTIuMjAxLTczLjIwOGMtOS4xMTUtMy4wMDctMTcuOTI5LTYuNjc0LTI2LjM4My0xMC45NTENCgkJbC02MC40MTQsNDMuMTUybC02Ny45NDktNjcuOTQ5bCA0My4yMjctNjAuNTE4Yy00LjIzNS04LjQxNS03Ljg2Ny0xNy4xODMtMTAuODQ2LTI2LjI0OUwwLDI3Mi4wNDdsMC05Ni4wOTQgbCA3My41NTktMTIuMjYNCgkJYyAyLjk4LTguOTg0LCA2LjYwNS0xNy42NzQsIDEwLjgyMS0yNi4wMTVsLTQzLjM3NC02MC43MjRsIDY3Ljk0OS02Ny45NDhsIDYwLjgyNyw0My40NDdjIDguMzAxLTQuMTc1LCAxNi45NDUtNy43NjQsIDI1Ljg4Mi0xMC43MTcNCgkJTCAyMDcuOTUzLTMybCA5Ni4wOTQsMCBsIDEyLjI4OSw3My43MzdjIDguOTM3LDIuOTUzLCAxNy41ODEsNi41NDIsIDI1Ljg4MywxMC43MTZsIDYwLjgyNi00My40NDZsIDY3Ljk0OCw2Ny45NDhsLTQzLjM3Miw2MC43MjMNCgkJYyA0LjIxNiw4LjM0MSwgNy44MzksMTcuMDMxLCAxMC44MiwyNi4wMTZMIDUxMiwxNzUuOTUzeiBNIDI1NiwxNjBjLTM1LjM0NiwwLTY0LDI4LjY1My02NCw2NGMwLDM1LjM0NiwgMjguNjU0LDY0LCA2NCw2NA0KCQljIDM1LjM0NywwLCA2NC0yOC42NTQsIDY0LTY0QyAzMjAsMTg4LjY1MywgMjkxLjM0NywxNjAsIDI1NiwxNjB6IiAgLz4NCjxnbHlwaCB1bmljb2RlPSImI3hlMDAzOyIgZD0iTSA0MzIsNDgwTCA0OCw0ODAgQyAyMS42LDQ4MCwwLDQ1OC40LDAsNDMybDAtNDE2IGMwLTI2LjQsIDIxLjYtNDgsIDQ4LTQ4bCAzODQsMCBjIDI2LjQsMCwgNDgsMjEuNiwgNDgsNDhMIDQ4MCw0MzIgQyA0ODAsNDU4LjQsIDQ1OC40LDQ4MCwgNDMyLDQ4MHogTSA0MTYsMzJMIDY0LDMyIA0KCQlMIDY0LDQxNiBsIDM1MiwwIEwgNDE2LDMyIHpNIDEyOCwyNTZMIDM1MiwyNTZMIDM1MiwyMjRMIDEyOCwyMjR6TSAxMjgsMTkyTCAzNTIsMTkyTCAzNTIsMTYwTCAxMjgsMTYwek0gMTI4LDEyOEwgMzUyLDEyOEwgMzUyLDk2TCAxMjgsOTZ6TSAxMjgsMzIwTCAzNTIsMzIwTCAzNTIsMjg4TCAxMjgsMjg4eiIgIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik0gMTgxLjg2MSwxMTguOTc0bCAyMC42NDksMjguOTA4bC0yMi42MjcsMjIuNjI4bC0yOC45MDktMjAuNjQ4Yy01LjM2MSwyLjk5Ny0xMS4xMDIsNS4zODctMTcuMTMzLDcuMDk2TCAxMjgsMTkyTCA5NiwxOTIgDQoJCWwtNS44NC0zNS4wNDNjLTYuMDMxLTEuNzA5LTExLjc3Mi00LjA5OS0xNy4xMzMtNy4wOTZMIDQ0LjExOCwxNzAuNTFMIDIxLjQ5LDE0Ny44ODJsIDIwLjY0OS0yOC45MDgNCgkJYy0yLjk5Ny01LjM2LTUuMzg3LTExLjEwMy03LjA5Ni0xNy4xMzNMMCw5NmwwLTMyIGwgMzUuMDQzLTUuODQxYyAxLjcwOS02LjAzMCwgNC4wOTktMTEuNzcyLCA3LjA5Ni0xNy4xMzNMIDIxLjQ5LDEyLjExOGwgMjIuNjI3LTIyLjYyOA0KCQlsIDI4LjkwOSwyMC42NDhjIDUuMzYxLTIuOTk3LCAxMS4xMDItNS4zODcsIDE3LjEzMy03LjA5NkwgOTYtMzJsIDMyLDAgbCA1Ljg0LDM1LjA0M2MgNi4wMzEsMS43MDksIDExLjc3Miw0LjA5OSwgMTcuMTMzLDcuMDk2bCAyOC45MDktMjAuNjQ4DQoJCWwgMjIuNjI3LDIyLjYyOGwtMjAuNjQ5LDI4LjkwOGMgMi45OTcsNS4zNiwgNS4zODcsMTEuMTAzLCA3LjA5NiwxNy4xMzNMIDIyNCw2NGwwLDMyIGwtMzUuMDQzLDUuODQxDQoJCUMgMTg3LjI0OCwxMDcuODcxLCAxODQuODU4LDExMy42MTMsIDE4MS44NjEsMTE4Ljk3NHogTSAxMTIsNDhjLTE3LjY3NCwwLTMyLDE0LjMyNy0zMiwzMnMgMTQuMzI2LDMyLCAzMiwzMnMgMzItMTQuMzI3LCAzMi0zMg0KCQlTIDEyOS42NzQsNDgsIDExMiw0OHpNIDUxMiwyODhsMCwzMiBsLTMzLjY5MSw2LjEyNWMtMC42MjEsNC4wMjMtMS40MTYsNy45ODktMi4zNjIsMTEuODk1bCAyOC43NzksMTguNTVMIDQ5Mi40OCwzODYuMTM0bC0zMy40NzItNy4yMzQNCgkJYy0yLjEwNywzLjQ1NS00LjM2Myw2LjgxLTYuNzQ2LDEwLjA2NWwgMTkuNTAzLDI4LjE3MWwtMjIuNjI4LDIyLjYyN2wtMjguMTcxLTE5LjUwM2MtMy4yNTYsMi4zODMtNi42MSw0LjYzOC0xMC4wNjUsNi43NDcNCgkJbCA3LjIzNCwzMy40NzJMIDM4OC41NzEsNDcyLjcyNmwtMTguNTUtMjguNzc5Yy0zLjkwNiwwLjk0Ni03Ljg3MiwxLjc0MS0xMS44OTUsMi4zNjJMIDM1Miw0ODBsLTMyLDAgbC02LjEyNi0zMy42OTENCgkJYy00LjAyMy0wLjYyMS03Ljk4OC0xLjQxNi0xMS44OTUtMi4zNjJMIDI4My40Myw0NzIuNzI2TCAyNTMuODY2LDQ2MC40OGwgNy4yMzQtMzMuNDcyYy0zLjQ1NS0yLjEwOC02LjgxLTQuMzY0LTEwLjA2NS02Ljc0Nw0KCQlsLTI4LjE3MSwxOS41MDNsLTIyLjYyNy0yMi42MjdsIDE5LjUwMy0yOC4xNzFjLTIuMzgzLTMuMjU1LTQuNjM5LTYuNjEtNi43NDctMTAuMDY1bC0zMy40NzIsNy4yMzRsLTEyLjI0Ni0yOS41NjRsIDI4Ljc3OS0xOC41NQ0KCQljLTAuOTQ2LTMuOTA2LTEuNzQxLTcuODcxLTIuMzYyLTExLjg5NUwgMTYwLDMyMGwwLTMyIGwgMzMuNjkxLTYuMTI1YyAwLjYyMS00LjAyMywgMS40MTYtNy45ODksIDIuMzYyLTExLjg5NWwtMjguNzc5LTE4LjU1DQoJCWwgMTIuMjQ2LTI5LjU2NGwgMzMuNDcyLDcuMjM0YyAyLjEwOC0zLjQ1NSwgNC4zNjQtNi44MDksIDYuNzQ3LTEwLjA2NWwtMTkuNTAzLTI4LjE3MWwgMjIuNjI3LTIyLjYyOGwgMjguMTcxLDE5LjUwMw0KCQljIDMuMjU1LTIuMzgzLCA2LjYxLTQuNjM4LCAxMC4wNjUtNi43NDZsLTcuMjM0LTMzLjQ3MmwgMjkuNTY0LTEyLjI0NmwgMTguNTUxLDI4Ljc3OWMgMy45MDUtMC45NDYsIDcuODcxLTEuNzQxLCAxMS44OTQtMi4zNjJMIDMyMCwxMjhsIDMyLDAgDQoJCWwgNi4xMjYsMzMuNjkxYyA0LjAyMiwwLjYyMSwgNy45ODgsMS40MTYsIDExLjg5NSwyLjM2MmwgMTguNTUtMjguNzc5bCAyOS41NjQsMTIuMjQ2bC03LjIzNCwzMy40NzINCgkJYyAzLjQ1NSwyLjEwOCwgNi44MSw0LjM2MywgMTAuMDY1LDYuNzQ2bCAyOC4xNzEtMTkuNTAzbCAyMi42MjgsMjIuNjI4bC0xOS41MDMsMjguMTcxYyAyLjM4MywzLjI1NiwgNC42MzgsNi42MSwgNi43NDYsMTAuMDY1DQoJCWwgMzMuNDcyLTcuMjM0bCAxMi4yNDYsMjkuNTY1bC0yOC43NzksMTguNTVjIDAuOTQ2LDMuOTA2LCAxLjc0MSw3Ljg3MSwgMi4zNjIsMTEuODk1TCA1MTIsMjg4eiBNIDMzNiwyMzQuNA0KCQljLTM4LjQzOSwwLTY5LjYsMzEuMTYxLTY5LjYsNjkuNmMwLDM4LjQzOSwgMzEuMTYsNjkuNiwgNjkuNiw2OS42cyA2OS42LTMxLjE2MSwgNjkuNi02OS42QyA0MDUuNiwyNjUuNTYxLCAzNzQuNDQsMjM0LjQsIDMzNiwyMzQuNHoiICAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNIDEyOCwzODRMIDY0LDQ0OEwgMzIsNDQ4TCAzMiw0MTZMIDk2LDM1MiAJek0gMTYwLDQ4MEwgMTkyLDQ4MEwgMTkyLDQxNkwgMTYwLDQxNnpNIDI4OCwzMjBMIDM1MiwzMjBMIDM1MiwyODhMIDI4OCwyODh6TSAzMjAsNDE2TCAzMjAsNDQ4TCAyODgsNDQ4TCAyMjQsMzg0TCAyNTYsMzUyIAl6TTAsMzIwTCA2NCwzMjBMIDY0LDI4OEwwLDI4OHpNIDE2MCwxOTJMIDE5MiwxOTJMIDE5MiwxMjhMIDE2MCwxMjh6TSAzMiwxOTJMIDMyLDE2MEwgNjQsMTYwTCAxMjgsMjI0TCA5NiwyNTYgCXpNIDUwNSwzOUwgMTg2Ljk0MSwzNTcuMDU5Yy05LjMzNCw5LjMzNC0yNC42MDcsOS4zMzQtMzMuOTQxLDBMIDEyMi45NDEsMzI3Yy05LjMzNC05LjMzNC05LjMzNC0yNC42MDcsMC0zMy45NDFMIDQ0MS0yNQ0KCQljIDkuMzM0LTkuMzM0LCAyNC42MDctOS4zMzQsIDMzLjk0MSwwTCA1MDUsNS4wNTlDIDUxNC4zMzQsMTQuMzkzLCA1MTQuMzM0LDI5LjY2NiwgNTA1LDM5eiBNIDI0MCwyMDhsLTk2LDk2bCAzMiwzMmwgOTYtOTZMIDI0MCwyMDh6IiAgLz4NCjxnbHlwaCB1bmljb2RlPSImI3hlMDBiOyIgZD0iTTAsNDgwTCAxMjgsNDgwTCAxMjgsMzUyTDAsMzUyek0gMTkyLDQ0OEwgNTEyLDQ0OEwgNTEyLDM4NEwgMTkyLDM4NHpNMCwyODhMIDEyOCwyODhMIDEyOCwxNjBMMCwxNjB6TSAxOTIsMjU2TCA1MTIsMjU2TCA1MTIsMTkyTCAxOTIsMTkyek0wLDk2TCAxMjgsOTZMIDEyOC0zMkwwLTMyek0gMTkyLDY0TCA1MTIsNjRMIDUxMiwwTCAxOTIsMHoiICAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMGM7IiBkPSJNIDQ5Ni4xMzEsNDQuMzAyTCAzNzQuODU1LDE0Ny40NDljLTEyLjUzNywxMS4yODMtMjUuOTQ1LDE2LjQ2My0zNi43NzYsMTUuOTYzQyAzNjYuNzA3LDE5Ni45NDYsIDM4NCwyNDAuNDUxLCAzODQsMjg4DQoJQyAzODQsMzk0LjAzOSwgMjk4LjAzOSw0ODAsIDE5Miw0ODBDIDg1Ljk2Miw0ODAsMCwzOTQuMDM5LDAsMjg4YzAtMTA2LjAzOSwgODUuOTYxLTE5MiwgMTkyLTE5MmMgNDcuNTQ5LDAsIDkxLjA1NCwxNy4yOTMsIDEyNC41ODgsNDUuOTIyDQoJYy0wLjUtMTAuODMxLCA0LjY4LTI0LjIzOSwgMTUuOTYzLTM2Ljc3NmwgMTAzLjE0Ny0xMjEuMjc2YyAxNy42NjEtMTkuNjIzLCA0Ni41MTEtMjEuMjc3LCA2NC4xMS0zLjY3OFMgNTE1Ljc1NCwyNi42NDEsIDQ5Ni4xMzEsNDQuMzAyeg0KCSBNIDE5MiwxNjBjLTcwLjY5MiwwLTEyOCw1Ny4zMDgtMTI4LDEyOFMgMTIxLjMwOCw0MTYsIDE5Miw0MTZzIDEyOC01Ny4zMDgsIDEyOC0xMjhTIDI2Mi42OTMsMTYwLCAxOTIsMTYweiIgIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwZDsiIGQ9Ik0gMjU2LDQ4MEMgMTE0LjYxNSw0ODAsMCwzNjUuMzg1LDAsMjI0cyAxMTQuNjE1LTI1NiwgMjU2LTI1NnMgMjU2LDExNC42MTUsIDI1NiwyNTZTIDM5Ny4zODUsNDgwLCAyNTYsNDgweiBNIDM4NCwzMDYuNzQ1TCAzMDEuMjU2LDIyNA0KCUwgMzg0LDE0MS4yNTZMIDM4NCw5NiBsLTQ1LjI1NiwwIEwgMjU2LDE3OC43NDRMIDE3My4yNTUsOTZMIDEyOCw5NiBsMCw0NS4yNTYgTCAyMTAuNzQ1LDIyNEwgMTI4LDMwNi43NDVMIDEyOCwzNTIgbCA0NS4yNTUsMCBMIDI1NiwyNjkuMjU1TCAzMzguNzQ0LDM1MkwgMzg0LDM1MiANCglMIDM4NCwzMDYuNzQ1IHoiICAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMGU7IiBkPSJNIDI1Niw0ODBDIDExNC42MTUsNDgwLDAsMzY1LjM4NSwwLDIyNHMgMTE0LjYxNS0yNTYsIDI1Ni0yNTZzIDI1NiwxMTQuNjE1LCAyNTYsMjU2UyAzOTcuMzg1LDQ4MCwgMjU2LDQ4MHogTSAyMDgsNjRMIDEwMiwyMDJsIDQ3LDQ5bCA1OS03NQ0KCWwgMTg1LDE1MWwgMjMtMjNMIDIwOCw2NHoiICAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMGY7IiBkPSJNIDY0LDM1MmwgNjQsMCBsMC05NiBsIDMyLDAgTCAxNjAsNDQ4IGMwLDE3LjYtMTQuNCwzMi0zMiwzMkwgNjQsNDgwIEMgNDYuNCw0ODAsIDMyLDQ2NS42LCAzMiw0NDhsMC0xOTIgbCAzMiwwIEwgNjQsMzUyIHogTSA2NCw0NDhsIDY0LDAgbDAtNjQgTCA2NCwzODQgTCA2NCw0NDggeiBNIDQ4MCw0NDhMIDQ4MCw0ODAgbC05NiwwIA0KCWMtMTcuNjAxLDAtMzItMTQuNC0zMi0zMmwwLTE2MCBjMC0xNy42LCAxNC4zOTktMzIsIDMyLTMybCA5NiwwIGwwLDMyIGwtOTYsMCBMIDM4NCw0NDggTCA0ODAsNDQ4IHogTSAzMjAsNDAwTCAzMjAsNDQ4IGMwLDE3LjYtMTQuNCwzMi0zMiwzMmwtOTYsMCBsMC0yMjQgbCA5NiwwIA0KCWMgMTcuNiwwLCAzMiwxNC40LCAzMiwzMmwwLDQ4IGMwLDE3LjYtNC40LDMyLTIyLDMyQyAzMTUuNiwzNjgsIDMyMCwzODIuNCwgMzIwLDQwMHogTSAyODgsMjg4bC02NCwwIGwwLDY0IGwgNjQsMCBMIDI4OCwyODggeiBNIDI4OCwzODRsLTY0LDAgTCAyMjQsNDQ4IGwgNjQsMCBMIDI4OCwzODQgek0gNDE2LDE5MiBMIDIwOC0zMiBMIDk2LDExMiBMIDEzNywxNDcgTCAyMDgsNzMgTCAzODQsMjI0IFoiICAvPg0KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNMCw0NDhsMC00NDggbCA1MTIsMCBMIDUxMiw0NDggTDAsNDQ4IHogTSA0ODAsMzJMIDMyLDMyIEwgMzIsNDE2IGwgNDQ4LDAgTCA0ODAsMzIgek0gNDQ4LDM4NEwgNjQsMzg0IGwwLTMyMCBsIDM4NCwwIEwgNDQ4LDM4NCB6IE0gMjI0LDIyNGwtMzIsMCBsMC0zMiBsLTMyLDAgbDAtMzIgbC0zMiwwIGwwLDMyIGwgMzIsMCBsMCwzMiBsIDMyLDAgbDAsMzIgbC0zMiwwIGwwLDMyIGwtMzIsMCBsMCwzMiBsIDMyLDAgbDAtMzIgbCAzMiwwIGwwLTMyIGwgMzIsMCBMIDIyNCwyMjQgeiBNIDM1MiwxNjBsLTk2LDAgDQoJCWwwLDMyIGwgOTYsMCBMIDM1MiwxNjAgeiIgIC8+DQo8Z2x5cGggdW5pY29kZT0iJiN4MjA7IiBob3Jpei1hZHYteD0iMjU2IiAvPg0KPC9mb250PjwvZGVmcz48L3N2Zz4=]]></data>
	</file>
	<file>
	  <filename>/lib/font/icomoon.ttf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAEAAAANAIAAAwBQRkZUTWZSWfIAAAxYAAAAHEdERUYAPQAGAAAMOAAAACBPUy8yL7vcHwAAAVgAAABWY21hcMA11AkAAAHcAAABYmdhc3D//wADAAAMMAAAAAhnbHlmZfmLOQAAA2QAAAaYaGVhZP3pK3wAAADcAAAANmhoZWEEEf/lAAABFAAAACRobXR4BKoAIAAAAbAAAAAqbG9jYQwaCsQAAANAAAAAIm1heHAAWwCLAAABOAAAACBuYW1lUNbz8QAACfwAAAGGcG9zdBaK65MAAAuEAAAAqgABAAAAAQAAQr30Hl8PPPUACwIAAAAAAM5kdWAAAAAAzmR1YAAA/98CAQHgAAAACAACAAAAAAAAAAEAAAHg/98ALgIAAAD+AAIBAAEAAAAAAAAAAAAAAAAAAAAFAAEAAAAQAIgACQAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAQIAAZAABQAIAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAIABQMAAAAAAAAAAAAAEAAAAAAAAAAAAAAAUGZFZABA4ADwAAHg/+AALgHgACGAAAABAAAAAAAAAgAAAAAAAAAAqgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAADAAAAAwAAABwAAQAAAAAAXAADAAEAAAAcAAQAQAAAAAwACAACAAQAAOAD4AfgEPAA//8AAAAA4ADgBuAL8AD//wAAIAQgAh//EAMAAQAAAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AQABwAL4A+AHIAh4CSAJ6AqICwAMUA0wAAAABAAD/4AIAAeAAAgAAEQEhAgD+AAHg/gAAAAAABAAA/+ACAAHgAAYADQAUABsAAAEVJwcnNycHFwcnBzUzEzcVIzcnNw8BFyM1FzcCAEVqNmpFxWo2akXA+0XARWo2bGpFwEVqAeDARWo2akVFajZqRcD+e0XARWo2NmpFwEVqAAQAAP/gAgAB4AAGAA0AFAAbAAA3MxUnByc3IRcHJwc1MzUjNRc3FwclNxUjNyc3IMBFZTZlATZlNmVFwMBFZTZl/wBFwEVlNsDARWU2ZWU2ZUXAQMBFZTZlNkXARWU2AAIAAP/gAgAB4AAnAC8AACU1JyYnNycHJi8BIwcGBycHFwYPARUXFhcHFzcWHwEzNzY3FzcnNjcGIiY0NjIWFAIASQUGK0Q8DQ4MYAwODTxEKwYFSUoEBitEPQwODGAMDgw9RCsGBJs2JSU2JbBgDA4NPEQrBgVJSQUGK0Q8DQ4MYAwODD1EKwYESkoEBitEPQwOBCU2JSU2AAAAAAYAAP/gAeAB4AAPABMAFwAbAB8AIwAAASEiBhURFBYzITI2NRE0JgMhESEFMxUjFTMVIxUzFSM1MxUjAbD+gBQcHBQBgBQcHCT+oAFg/uDg4ODg4ODg4AHgHBT+YBQcHBQBoBQc/kABgKAgICAgIOAgAAAABAAA/+ACAAHgACcALwB/AIcAAD8BJwcmLwEjBwYHJwcXBg8BFRcWFwcXNxYfATM3NjcXNyc2PwE1JyYGIiY0NjIWFCU1JyYnNycHJic3JwcmJzcnByYvASMHBgcnBxcGBycHFwYHJwcXBg8BFRcWFwcXNxYXBxc3FhcHFzcWHwEzNzY3FzcnNjcXNyc2Nxc3JzY3BiImNDYyFhS2FRcdCAkGIAYJCB0XFQQDIyMDBBUXHQgJBiAGCQgdFxUEAyMjAz0aExMaEwFwIgEBHQ0hAwQUFxwFBQcdEwYGBiAGBgYTHQcFBRwXFAQDIQ0dAQEiIgEBHQ0hAwQUFxwFBQcdEwYGBiAGBgYTHQcFBRwXFAQDIQ0dAQFxOikpOil3HRcVBAMjIwMEFRcdCAkGIAYJCB0XFQQDIyMDBBUXHQgJBiAGCT8TGhMTGt0gBgYGEx0HBQUcFxQEAyENHQEBIiIBAR0NIQMEFBccBQUHHRMGBgYgBgYGEx0HBQUcFxQEAyENHQEBIiIBAR0NIQMEFBccBQUHHRMGBjApOikpOgAAAAAJAAD/3wIBAeAABAAIAAwAEQAVABkAHgAuADIAABMnIxUXNzMVIxczFSM3NSMHFwUzFSMXMxUjJxUzNycFASYiDwEGFBcBFjI/ATY0JSc3F4BAIEBAICCAQEAgIEAg/wBAQKAgIIAgQCABmf7CBxQHHgcHAT4HFAceB/7wYCBgAYBAIECAQGAggCBAICAgYEBAIEAg2QE+BwceBxQH/sIHBx4HFLBgIGAAAAAABgAA/+ACAAHgAAMABwALAA8AEwAXAAARMxUjNyEVIQczFSM3IRUhBzMVIzchFSGAgMABQP7AwICAwAFA/sDAgIDAAUD+wAHggGBAYIBgQGCAYEAAAgAA/+ACAAHgABUAHQAAJScmBzY1NCYiBhQWMzI3Bh8BHgE2JiQiJjQ2MhYUAfB5ExIucKBwcFBHNgERZw0mGgL+9mpLS2pLLGcRATZHUHBwoHAuEhN5DwIaJoFLaktLagAAAAIAAP/gAgAB4AAHABcAAAAiBhQWMjY0DwEXFSMnByM1Nyc1Mxc3MwFq1JaW1JaAU1MtU1MtU1MtU1MtAeCW1JaW1BdTUy1TUy1TUy1TUwAAAgAA/+ACAAHgAAcADQAAACIGFBYyNjQBJzcXNxcBatSWltSW/tBqLzu5FwHgltSWltT+9ooxS5cXAAAABwAg/+AB4AHgAA0AEQAfAC4AMgA2ADwAABMzFTM1NCYrASIGHQEzNTMVIyU1IyIGHQEUFjsBNSM1BzU0JisBFTMyNj0BNCMyByM1MzUjNTMTByc3FzdAQCATDUANEyBAQAGgYA0TEw1gYEATDWBgDRMWFiBAQEBAgNBwKUewAWBgwA0TEw3AwEBAIBMNoA0TIKAwMA0T4BMNMCBQQCBA/wDgkCNKlwAABQAAAAACAAHAAAMABwALAB8AIwAAGQEhEQMhESEHIREhJyMVIxUjNTM1MzUjNSM1MxUzFTMXIzUzAgAg/kABwCD+gAGA4CAgICAgICAgICCAYGABwP5AAcD+YAGAIP7AoCAgICAgICAgIGAgAAAAAAAADACWAAEAAAAAAAEABwAQAAEAAAAAAAIABwAoAAEAAAAAAAMAIwB4AAEAAAAAAAQABwCsAAEAAAAAAAUACwDMAAEAAAAAAAYABwDoAAMAAQQJAAEADgAAAAMAAQQJAAIADgAYAAMAAQQJAAMARgAwAAMAAQQJAAQADgCcAAMAAQQJAAUAFgC0AAMAAQQJAAYADgDYAGkAYwBvAG0AbwBvAG4AAGljb21vb24AAFIAZQBnAHUAbABhAHIAAFJlZ3VsYXIAAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAAaQBjAG8AbQBvAG8AbgAgADoAIAAyADIALQA5AC0AMgAwADEAMwAARm9udEZvcmdlIDIuMCA6IGljb21vb24gOiAyMi05LTIwMTMAAGkAYwBvAG0AbwBvAG4AAGljb21vb24AAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAAVmVyc2lvbiAxLjAAAGkAYwBvAG0AbwBvAG4AAGljb21vb24AAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAQACAQIBAwEEAQUBBgEHAQgBCQEKAQsBDAENAQ4HdW5pRjAwMAd1bmlFMDAwB3VuaUUwMDEHdW5pRTAwMgd1bmlFMDAzB3VuaUUwMDYHdW5pRTAwNwd1bmlFMDBCB3VuaUUwMEMHdW5pRTAwRAd1bmlFMDBFB3VuaUUwMEYHdW5pRTAxMAAAAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAwAPAAEABAAAAAIAAAAAAAEAAAAAyYlvMQAAAADOZHVgAAAAAM5kdWA=]]></data>
	</file>
	<file>
	  <filename>/lib/font/icomoon.woff</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[d09GRk9UVE8AAAzwAAsAAAAAFWAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAABCAAACbcAABB0dEBO40ZGVE0AAArAAAAAGgAAABxmUlnyR0RFRgAACtwAAAAdAAAAIAA7AARPUy8yAAAK/AAAAEsAAABgL9zcQGNtYXAAAAtIAAAATQAAAWLAMdMAaGVhZAAAC5gAAAAuAAAANv3oK31oaGVhAAALyAAAAB4AAAAkBBD/5GhtdHgAAAvoAAAAEgAAACIEAAAgbWF4cAAAC/wAAAAGAAAABgAOUABuYW1lAAAMBAAAAN0AAAGGUNbz8XBvc3QAAAzkAAAADAAAACAAAwAAeJx9Vw1QVNcVvg/2sU9cFkSWEEWQhqDOasfE1aowjvGHqhjjKLZWHWPRcZSN0egqJv7Wkib4oFrFTJJRY9v4M27SaoJWrTKmYmLcdMba1cSUoRaMGjcqKvgW38rtd+59u8tM0sLMueeee36+797z7nurMJuNKYqiLZ6/dMnSpS8zJYEpbFS4f0J4QGI4y6Y7EnWHLSeZPTk9net6THHY9fLwjrBPzWbNqdmMpWWzxz2ymSM7TUtnqZRDY6ksk/Vh+czNnmUj2Gj2UzaFzWBz2HxWvvLlxcWDBw/GMD42PCOHZ+UwRA7D5PATOYyRw1g5jJPDeDkUi+GZwRaRKB/GlDeUN5UqZbOiK9VKjfJbZYuyVfmdsk3ZzpwENIE52GlldeIR28Tk2u4buvtTklO2pvid+50hpx722SK14Vq7M1wb9rnMUp2z8XkTOD/RdCwvj7Ohp5Zxfn7M1vb2uF3lna81HeMMwiWtJBCqm6XxebsVTUI1ys1yV167SCXz5YlUQhiINEqR9RoZ7uZNcEk/isyz/Cgj0sM1PledfqPUFcdVUBDDu6W1NW4XyVm02v+B3FoQg/yKyvlVMt8ScKIlkTYGDeW6QkNAbFcKWuNMWwu+xxR7zdmfH4SR+Oiya5w/OPUxoh/bGjk3Ei9zHplXCe2FOZyb5+qgHajTOHO/WMT5meJvOT+ZMtUSZwZWY2H5IEQbHx2C+z990GbnI8Xi4dDS+iKtQ9NQ4qgNxcaWcv7ejVZdztnEk16KTMNJJTwwKPJHnCW+9Tllu8+ZbeAXGtWYxHmwZhuVdHI29v4hwlLPWdHxmapEyLSfTybUDNqh91FSzYFm3tCI33XOHGO2oK3mZaWh5Px0zEc240ASHu3hrFvaNZT8fQD+DTtRsmgAtPJRiAyebUGNyp1U8r4lihZHsHAlE9Gabzjci29Cu1CGFAf/hmR9XoGmnMduOYasRLGho0VZnearACbAVPJCi0Q6h1HkAmgzRlO210DleKZGNU6AYMEtSVWQBhac0pk1+1RCWI7t2bGJUJ+HVrhAMuEP7/bSJD/+oKFJNWs530JHzJ6aGeQse/9AEm6aXiKB5Ra58BLnjViFWEK27SRqaSoW3OQiFkTY9lxneBweVM56LVzImeuddzm/BY1/8867uRGPXSiWKWrPiWQkdbGLIArPDcM/nidmzwnbIqWucIbZFsmwBwyfy2v4/HbTV/I9BY+f0NAXRxrLOVvVMRPIEjg69dEf34I2/0toYxycKUd+xXlHeBq26KnuCTD2r9O94Nf2V9IfopE6J60XHmifnQNgfA67+5idpUxfISpj39PYhCdqOP/2xXUkCmk6GQt7W1RZDu4NVG6KlaIjnEZpN2iiBBXr9OqiNEAkn1alB6BtklEWXAGcF2oyPw/N6iNrssw9ZyUOln1zhSrLMXVOuSzH1FNtohxnSfY/aaIcjF9O1v2SM+mq3AnykOWYWj9M7hgy9UdU6Bf/ovzLrXKZexpoWkcLjaosB/eRVO4jK0WSvVWk1ahEsijm10U5gGgfrZLHXQuaeurjKFwBnJ3VZH7aRyr3a7G3YLd3HR6TnTkeHGiPD5DOOX0liaM0nSQFv/dBtbTxO9N9liAbxCSaHpUCLj5pQ1h1bjjfqMTV1/RCFk7gKh5Jzn+JBjU7cP9xz1o8khpOi6dchJaVRvg+w6Nwe8UQPFmfwLF5KW7GpjfwQNkLb9A5XJsFT/11aPW4ZyN750HbhcOI1FcguudGdEVLcAQRK4p2TnAkLZxVyekYubdTYE40hf4bkVajEjepmJvK7rYA3F7hIVBLKPqJCwQ1SKDrCP4aEHk0V1DCaXb8u56I9qa+I53lHe5Hl+ajbM7Y7g4ZxVjgdaI6Ddr9QYi6vfw+IA7fTjV34e4a9UhQRfTqS6pExxJ67yfEudCemyBZsIQyh2ZR/W5DYdeuBVUgdn+myp1hic9VEdUKaLP2yB1kib41mkU13PCkpMr6bC0TVDlLr/67KqmyxBt3JFWWaEyWp8ds6jVNUEW39WXU83mH+5M+TiWqYGBLypdUEZUsqFKmVk1SRf4vLKqiJqgSjix6UfTeS+jWEtXNhPiqoEosJmiSKrh9KrsXolJQpYUiVThF3Wc1R1PgukfafZooQcWCVlkBIL26mkBto+ibgwnqj6OgA5WCqqCkEb0xiD50nZ43UKUNyKaXhNpsbYvcIDQ1URVNrVlUqalRE2+gB6cbJA5qalVSxZFkEeLdsiPBYrM4Os2iSk0tLgcc8lpBVTS1Kqla7UAx1NSgukC0jWZRpaYG1TA12E6iWiuaWpVU0YrpkqrVnjg9allNUJXPrAmuBxcuxOVQsOx9znJxv7LcAcNpWiYFv0p3Edn4lS1zLEE2fvXyOZrulkK6kI3Ccp1GRjjD5fWWBHS/X1dDfleJP2APmR6XN+C3e0OukhKvPxDAkhk0M4QxhJGcTE8mFrxw0NXwEjMF4LrN2Ig388ENePxaT/QhVc5x8P9pvU7iG5UM64WVnHJ0OUcoLtTOT+CljErtpcasm3DUqeObhSoEtiUntZcQqgizllLHt+hyTqHwGpram/Py1usuv98d8nrxGeiz9U0OeF0lRjBgj9SC4/+cOrnSmofOHfj8VNDq+R4A3/nZ57j29/fH+RXgRX9n4UESB7qKloJF5PISOZ+jsHUg/vbXczl7tfgAKLX9Bfe3o+pVvPX+8R1nKYtW4LQ34jMuOXgS3ViBS7xlLg4/uP44UtR1cn5hxUodOXY8xOfkwW4RzmZAY+Wklctpccx2ImaznCksVxdJrHTB9bhtW+habqqYLMtKACmLfBYoR9VqAlqDqhOfRi87apzYgeLDYDZiytskvqZpgRT8U7p1yMaPT/mKxBWy9ZMLcRtcrAWE9UPX0a+fvGQjg/Np9fQbYRDdqhfrV+GL6kN6jj6kOQk2jd4QF+uP6boYLENsHaJKrFSIJLpch6ggsUqs08pmxGOokvlpXY2imB3xuIwFRqXvD+bzpnvq5TmzVGfAaHO5vUYpvth60Heakz7bhMA0J5DUxczv0afeHXzgmaXekL0Ez0wgYDfaMt2mJ+R1J9FaPnk1xjPkGp545vyYvTEnlGR6Cl0iHS4BShzNbrnbulbMmW23XO91dc1xG77QD0P0os0DJSX2QEgMRqmJb0q/Oc50j7tUtsiwmfl4Tkpt4dpIaaQ2Kezz48MUaoY97MGOmMFIhhG0Gx5k8XvpXwr82f34SzI8JS6/20s/bzN0l+5Ixk/4nixBUbrNNjMM/Nu7c1ZThl90y3fhe4c0LrT49AdswlmGxadRW273/wJ5EfiiAHicY2BgYGQAgpOd+YYg+lxKaQKMBgBAtwYCAAB4nGNgZGBg4ANiCQYQYGJgBEJeIGYB8xgABNkAQAAAAHicY2BmYmCcwMDKwMHow5jGwMDgDqW/MkgytDAwMDGwMjPAgQCCyRCQ5prC4PCA4QMD44P/Dxj0GB8wKDQwMDDCFSgAISMAEEIMHwB4nGNgYGBmgGAZBkYGEIgB8hjBfBYGByDNw8DBwARkMzxgfsD+QOADw///IGUPGB6wPeCG8BSYFBjk/wowQk2AA0Y2BnShEQcAA+0NvQAAAHicY2BkYGAAYtHLiTnx/DZfGbiZGEDgXEppAoL+/4CJgfEBkMvBAJYGABqRCj4AAHicY2BkYGB88P8Bgx4TAwPDPwYgCRRBAcwAbecD9gAAeJxjYoAAJgasQIGBAQAA+gAlAAAAAFAAAA4AAHicdY4xbgIxEEXfwkIUEUWpopSW0qTZ1a6p4AB7gBT0CFmrlQBLBiROkipHSJlj5AAcgWPwWaZJga2Rn7//zDfwxBcZ15XxwIvxQPxhPOSdo3Eu/cd4xIQ/47H0s5xZ/ijlue+68kD8ZjykoTLOpX8bj3jl13gs/UTHishGFdlCt4qbGAWfBFoOrFmSdA3tYb0UNL1v359JjoDDUyrNMVf9n3fTvHbBTOXlq5lqTNzum5ja4HxZubmzXJH3xazwVS3Tvb8tlJrY6f2WUff5LELadZpRl9Xd3gsESznbAAAAeJxjYGbACwAAfQAE]]></data>
	</file>
	<file>
	  <filename>/lib/font/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/font/license.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[SWNvbiBTZXQ6CUljb01vb24gLSBGcmVlIC0tIGh0dHA6Ly9rZXlhbW9vbi5jb20vaWNvbW9vbi8NCkxpY2Vuc2U6CUNDIEJZIDMuMCAtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAv]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/aceInit.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIyBNb2R1bGU6IEFjZVN5bnRheA0KICMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIyBDTVMgTWFkZSBTaW1wbGUgLSBQb3dlciBmb3IgdGhlIHByb2Zlc3Npb25hbCwgU2ltcGxpY2l0eSBmb3IgdGhlIGVuZCB1c2VyLg0KICMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiAjIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0NCiAjIChjKSAyMDE4IC0gMjAxOSBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24NCiAjIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KICMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2FjZXN5bnRheA0KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogIw0KICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCiAjIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCg0KOyggZnVuY3Rpb24oJCwgd2luZG93LCBkb2N1bWVudCwgYWNlLCB1bmRlZmluZWQpIHsndXNlIHN0cmljdCc7DQogIA0KICB2YXIgcGx1Z2luTmFtZSA9ICdhY2VJbml0JywNCiAgICAgIGRlZmF1bHRzID0gew0KICAgICAgICBtb2RlIDogJ2h0bWwnLA0KICAgICAgICB0aGVtZSA6ICdnaXRodWInLA0KICAgICAgICBhdXRvSGVpZ2h0OiAwDQogICAgICB9Ow0KICANCiAgLy8gcGx1Z2luIGNvbnN0cnVjdG9yDQogIGZ1bmN0aW9uIFBsdWdpbihlbGVtZW50LCBvcHRpb25zKSB7DQogICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsNCiAgICB0aGlzLnNldHRpbmdzID0gJC5leHRlbmQoe30sIGRlZmF1bHRzLCBvcHRpb25zKTsNCiAgICB0aGlzLmRlZmF1bHRzID0gZGVmYXVsdHM7DQogICAgdGhpcy5uYW1lID0gcGx1Z2luTmFtZTsNCiAgICB0aGlzLmluaXQoKTsNCiAgfQ0KICANCiAgDQogIFBsdWdpbi5wcm90b3R5cGUgPSB7DQogICAgaW5pdCA6IGZ1bmN0aW9uKCkgew0KICAgICAgDQogICAgICB0aGlzLmVkaXRvckJ1aWxkKCk7DQogICAgICANCiAgICAgIGlmICh0aGlzLnNldHRpbmdzLmF1dG9IZWlnaHQgPT09IDEpIHsNCiAgICAgICAgDQogICAgICAgIHZhciBjb250YWluZXIgPSAkKHRoaXMuZWxlbWVudCkucGFyZW50KCk7DQogICAgICAgIA0KICAgICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZScsIHRoaXMuZWRpdG9ySGVpZ2h0KGNvbnRhaW5lcikpOw0KICAgICAgICB0aGlzLmVkaXRvckhlaWdodChjb250YWluZXIpOw0KICAgICAgfQ0KICAgIH0sDQogICAgDQogICAgZWRpdG9yQnVpbGQgOiBmdW5jdGlvbigpIHsNCiAgICAgIA0KICAgICAgdmFyIGVsID0gdGhpcy5lbGVtZW50LA0KICAgICAgICAgIGVkaXRvciA9IGFjZS5lZGl0KGVsKSwNCiAgICAgICAgICBzZXNzaW9uID0gZWRpdG9yLmdldFNlc3Npb24oKSwNCiAgICAgICAgICBjb25maWcgPSByZXF1aXJlKCdhY2UvY29uZmlnJyk7DQogICAgICANCiAgICAgIC8vIFNldHVwIGVkaXRvciBwYXRocw0KICAgICAgY29uZmlnLnNldCgndGhlbWVQYXRoJywgY29uZmlnLmdldCgnYmFzZVBhdGgnKSArICcvdGhlbWVzJyk7DQogICAgICBjb25maWcuc2V0KCdtb2RlUGF0aCcsIGNvbmZpZy5nZXQoJ2Jhc2VQYXRoJykgKyAnL21vZGVzJyk7DQogICAgICBjb25maWcuc2V0KCd3b3JrZXJQYXRoJywgY29uZmlnLmdldCgnYmFzZVBhdGgnKSArICcvd29ya2VycycpOw0KICAgICAgDQogICAgICAvLyBpbml0aWFsaXplIGVkaXRvciBzZXR0aW5ncw0KICAgICAgdGhpcy5lZGl0b3JTZXR0aW5ncyhlZGl0b3IsIHNlc3Npb24pOw0KICAgICAgDQogICAgfSwNCiAgICANCiAgICBlZGl0b3JTZXR0aW5ncyA6IGZ1bmN0aW9uKGVkaXRvciwgc2Vzc2lvbikgew0KICAgICAgDQogICAgICAvLyBzZXQgdXAgZWRpdG9yIG9wdGlvbnMNCiAgICAgIGVkaXRvci5zZXRUaGVtZSgnYWNlL3RoZW1lLycgKyB0aGlzLnNldHRpbmdzLnRoZW1lKTsNCiAgICAgIGVkaXRvci5zZXRSZWFkT25seSh0cnVlKTsNCiAgICAgIGVkaXRvci5zZXRTaG93Rm9sZFdpZGdldHMoZmFsc2UpOw0KICAgICAgZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihmYWxzZSk7DQogICAgICBlZGl0b3Iuc2V0SGlnaGxpZ2h0QWN0aXZlTGluZShmYWxzZSk7DQogICAgICANCiAgICAgIHNlc3Npb24uc2V0TW9kZSgnYWNlL21vZGUvJyArIHRoaXMuc2V0dGluZ3MubW9kZSk7DQogICAgICBzZXNzaW9uLnNldFVzZVdyYXBNb2RlKHRydWUpOw0KICAgICAgDQogICAgfSwNCiAgICANCiAgICBlZGl0b3JIZWlnaHQ6IGZ1bmN0aW9uKGNvbnRhaW5lcikgew0KICAgICAgDQogICAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQodGhpcy5lbGVtZW50KSwNCiAgICAgICAgICBuZXdIZWlnaHQgPSBlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExlbmd0aCgpICogZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQgKiAxLjA4Ow0KICAgICAgDQogICAgICAkKGNvbnRhaW5lcikuaGVpZ2h0KG5ld0hlaWdodCk7DQogICAgICBlZGl0b3IucmVzaXplKCk7DQogICAgICANCiAgICB9DQogIH07DQogIA0KICAkLmZuW3BsdWdpbk5hbWVdID0gZnVuY3Rpb24ob3B0aW9ucykgew0KICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICBpZiAoISQuZGF0YSh0aGlzLCAicGx1Z2luXyIgKyBwbHVnaW5OYW1lKSkgew0KICAgICAgICAkLmRhdGEodGhpcywgInBsdWdpbl8iICsgcGx1Z2luTmFtZSwgbmV3IFBsdWdpbih0aGlzLCBvcHRpb25zKSk7DQogICAgICB9DQogICAgfSk7DQogIH07DQogIA0KfSApKGpRdWVyeSwgd2luZG93LCBkb2N1bWVudCwgYWNlKTsg]]></data>
	</file>
	<file>
	  <filename>/lib/js/functions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIyBNb2R1bGU6IEFjZVN5bnRheA0KICMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIyBDTVMgTWFkZSBTaW1wbGUgLSBQb3dlciBmb3IgdGhlIHByb2Zlc3Npb25hbCwgU2ltcGxpY2l0eSBmb3IgdGhlIGVuZCB1c2VyLg0KICMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiAjIChjKSAyMDExIC0gMjAxOCBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIERldmVsb3BtZW50IFRlYW0NCiAjIChjKSAyMDE4IC0gMjAxOSBieSBUaGUgQ01TIE1hZGUgU2ltcGxlIEZvdW5kYXRpb24NCiAjIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KICMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL2FjZXN5bnRheA0KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogIw0KICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KICMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KICMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCiAjIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogKi8NCg0KKCBmdW5jdGlvbihnbG9iYWwsICQsIHRvb2xiYXIsIHN0YXR1c2JhcikNCnsNCiAgJ3VzZSBzdHJpY3QnOw0KICAvKioNCiAgICogQG5hbWVzcGFjZSBOYW1lc3BhY2UgZm9yIEFDRVNZTlRBWCBhcHANCiAgICogQGdsb2JhbA0KICAgKi8NCiAgdmFyIEFDRVNZTlRBWCA9IGdsb2JhbC5BQ0VTWU5UQVggfHwge307DQogIHZhciBkZWJ1Z21lID0gZmFsc2U7IC8vIGRlYnVnIGZsYWcsIHdoYXQgZWxzZT8uLi4gOnAga2VlcCBpdCBmYWxzZSBmb3IgcHJvZHVjdGlvbiByZWxlYXNlcw0KICANCiAgLy8gUnVuIHRoZSBhcHANCiAgJChmdW5jdGlvbigpDQogIHsNCiAgICBBQ0VTWU5UQVguSU5JVC5sb2FkKCk7DQogICAgaWYoZGVidWdtZSl7Y29uc29sZS5sb2coJ0FDRVNZTlRBWC5JTklULmxvYWQoKSEnKTt9DQogIH0pOw0KDQogIEFDRVNZTlRBWC5JTklUID0gew0KDQogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uIFN0YXJ0cyBBY2VFZGl0IGFwcA0KICAgICAqIEBmdW5jdGlvbiBsb2FkDQogICAgICovDQogICAgbG9hZCA6IGZ1bmN0aW9uKCkgew0KDQogICAgICBBQ0VTWU5UQVguR0xPQkFMUy5jb21tb24oKTsNCiAgICAgIEFDRVNZTlRBWC5FRElUT1IuZWRpdG9ySW5pdCgpOw0KDQogICAgfQ0KICB9Ow0KICANCiAgDQoNCiAgLyoqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAqICBBQ0VTWU5UQVggZ2xvYmFsIGZ1bmN0aW9ucw0KICAgKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCiAgQUNFU1lOVEFYLkdMT0JBTFMgPSB7DQogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uIExvYWRzIGNvbW1vbiBmdW5jdGlvbnMNCiAgICAgKiBAZnVuY3Rpb24gY29tbW9uDQogICAgICovDQogICAgY29tbW9uIDogZnVuY3Rpb24oKSB7DQogICAgICANCiAgICAgIGlmICghd2luZG93LmFjZSkgew0KICAgICAgICBjb25zb2xlLmxvZygnQWNlIExpYnJhcnkgbm90IGxvYWRlZCcpOw0KICAgICAgICByZXR1cm47DQogICAgICB9DQogICAgICAvLyBUT0RPIHdoZW4gaW4gbmF0aXZlIGZ1bGxzY3JlZW4gbW9kZSwgbWVzc2FnZSBpc24ndCB2aXNpYmxlIDotUw0KICAgICAgJCgnLnBhZ2VtY29udGFpbmVyLC5wYWdlZXJyb3Jjb250YWluZXInKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgYyA9ICQodGhpcyk7DQogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KICAgICAgICAgIGMuaGlkZSgpOw0KICAgICAgICB9LCA5MDAwKTsNCiAgICAgIH0pOw0KICAgIH0NCiAgfTsNCg0KICAvKiogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICogIEFDRVNZTlRBWCBlZGl0b3Igc2V0dGluZ3MgJiBmdW5jdGlvbnMNCiAgICogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQogIEFDRVNZTlRBWC5FRElUT1IgPSB7DQoNCiAgICAvKioNCiAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgYWxsIEFjZUVkaXRvciBzZXR0aW5ncyBhbmQgZnVuY3Rpb25zDQogICAgICogQGZ1bmN0aW9uIGVkaXRvckluaXQNCiAgICAgKi8NCiAgICBlZGl0b3JJbml0IDogZnVuY3Rpb24oKXsNCiAgICAgIA0KICAgICAgdmFyIGVkaXRvcnMgPSAkKCcuYWNlX2VkaXRvcl90ZXh0YXJlYScpLA0KICAgICAgICAgIGNvbmZpZyA9IHJlcXVpcmUoJ2FjZS9jb25maWcnKSwNCiAgICAgICAgICAkdGFicyA9ICQoJyNuYXZ0X3RhYnMnKTsNCiAgICAgIA0KICAgICAgLy8gU2V0dXAgcGF0aHMNCiAgICAgIGNvbmZpZy5zZXQoJ3RoZW1lUGF0aCcsIGNvbmZpZy5nZXQoJ2Jhc2VQYXRoJykgKyAnL3RoZW1lcycpOw0KICAgICAgY29uZmlnLnNldCgnbW9kZVBhdGgnLCBjb25maWcuZ2V0KCdiYXNlUGF0aCcpICsgJy9tb2RlcycpOw0KICAgICAgY29uZmlnLnNldCgnd29ya2VyUGF0aCcsIGNvbmZpZy5nZXQoJ2Jhc2VQYXRoJykgKyAnL3dvcmtlcnMnKTsNCg0KICAgICAgaWYod2luZG93LmFjZSkgew0KICAgICAgICBlZGl0b3JzLmVhY2goZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgICB2YXIgJGVsID0gJCh0aGlzKSwNCiAgICAgICAgICAgICAgdGV4dGFyZWFpZCA9ICRlbC5hdHRyKCdpZCcpLCAvLyBnZXQgdGV4dGFyZWEgaWQNCiAgICAgICAgICAgICAgJGNvbnRhaW5lciA9ICRlbC5jbG9zZXN0KCcuYWNlLXdyYXBwZXInKSwgJGRhdGEgPSAkZWwuZGF0YSgpLCAvLyBnZXQgaHRtbCBkYXRhDQogICAgICAgICAgICAgIHRleHRhcmVhID0gJyMnICsgdGV4dGFyZWFpZCwNCiAgICAgICAgICAgICAgZWRpdG9yaWQgPSAnIycgKyAkZGF0YS5hY2VFZGl0b3JJZCwgLy8gZ2V0IGVkaXRvciBpZA0KICAgICAgICAgICAgICBlZGl0b3IgPSBudWxsOw0KICAgICAgICAgIA0KICAgICAgICAgIGlmKGRlYnVnbWUpe2NvbnNvbGUubG9nKCdlbCBkYXRhID0gJyArIEpTT04uc3RyaW5naWZ5KCRlbCkpO30NCiAgICAgICAgICAvL2lmKGRlYnVnbWUpe2NvbnNvbGUubG9nKCd0aGlzIGRhdGEgPSAnICsgSlNPTi5zdHJpbmdpZnkodGhpcykpO30NCiAgICAgICAgICBpZihkZWJ1Z21lKXtjb25zb2xlLmxvZygndGV4dGFyZWFpZCA9ICcgKyB0ZXh0YXJlYWlkKTt9DQoNCiAgICAgICAgICAvLyBjcmVhdGUgZWRpdG9yDQogICAgICAgICAgJCgnPGRpdiAvPicpLmF0dHIoJ2lkJywgJGRhdGEuYWNlRWRpdG9ySWQpLmFkZENsYXNzKCdhY2VfZWRpdG9yX2NvbnRlbnQnKS5pbnNlcnRCZWZvcmUodGV4dGFyZWEpLmh0bWwoJCh0ZXh0YXJlYSkudmFsdWUpOw0KICAgICAgICAgICQodGV4dGFyZWEpLmhpZGUoKTsgLy8gaGlkZSB0ZXh0YXJlYQ0KICANCiAgICAgICAgICBpZihkZWJ1Z21lKXtjb25zb2xlLmxvZygnZWRpdG9yIHN0YXJ0ISAnICsgJGRhdGEuYWNlRWRpdG9ySWQpO30NCiAgICAgICAgICBlZGl0b3IgPSBhY2UuZWRpdCgkZGF0YS5hY2VFZGl0b3JJZCk7IC8vIHN0YXJ0IGFjZQ0KDQogICAgICAgICAgLy8gbWFrZSBlZGl0b3Igd29ya2luZyB3aXRoaW4gdGFicw0KICAgICAgICAgIGlmICgkdGFicy5sZW5ndGggPT09IDApIHsNCiAgICAgICAgICAgICR0YWJzID0gJCgnI3BhZ2VfdGFicycpOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgICR0YWJzLmZpbmQoJ2RpdicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgZWRpdG9yLnJlc2l6ZSgpOw0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgLy8gTG9hZCBFZGl0b3IgU2V0dGluZ3MNCiAgICAgICAgICBBQ0VTWU5UQVguRURJVE9SLmVkaXRvclNldHRpbmdzKGVkaXRvcmlkLCBlZGl0b3IsICRkYXRhKTsNCiAgICAgICAgICBBQ0VTWU5UQVguRURJVE9SLmVkaXRvclNhdmVDb250ZW50KHRleHRhcmVhLCBlZGl0b3IpOw0KICAgICAgICAgIEFDRVNZTlRBWC5FRElUT1IuZWRpdG9yVUkodGV4dGFyZWFpZCwgJGNvbnRhaW5lciwgZWRpdG9yaWQsIGVkaXRvcik7DQogICAgICAgICAgQUNFU1lOVEFYLkVESVRPUi5lZGl0b3JGdWxsU2NyZWVuKCRjb250YWluZXIsIGVkaXRvciwgZWRpdG9yaWQsIHRleHRhcmVhKTsNCiAgICAgICAgICBBQ0VTWU5UQVguRURJVE9SLmVkaXRvclNpemVVcGRhdGUoJGNvbnRhaW5lciwgJGRhdGEsIGVkaXRvcik7DQoNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgIGNvbnNvbGUubG9nKCdBY2UgTGlicmFyeSBub3QgbG9hZGVkJyk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICB9LA0KICAgICAgICAvKioNCiAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldHMgYWxsIEFjZUVkaXRvciBTZXR0aW5ncw0KICAgICAgICAgKiBAZnVuY3Rpb24gZWRpdG9yU2V0dGluZ3MNCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGlkDQogICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBlZGl0b3INCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGENCiAgICAgICAgICovDQogICAgICAgIGVkaXRvclNldHRpbmdzIDogZnVuY3Rpb24oaWQsIGVkaXRvciwgZGF0YSkgew0KICAgICAgICAgIGlmKGRlYnVnbWUpe2NvbnNvbGUubG9nKCdkYXRhID0gJyArIEpTT04uc3RyaW5naWZ5KGRhdGEpKTt9DQogICAgICAgICAgDQogICAgICAgICAgJChpZCkuY3NzKCdmb250LXNpemUnLCBkYXRhLmFjZUZvbnRTaXplKTsvLyBzZXQgZm9udHNpemUNCiAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoJ2FjZS90aGVtZS8nICsgZGF0YS5hY2VTZWxlY3RlZFRoZW1lKTsvLyBzZXQgdGhlbWUNCiAgICAgICAgICANCiAgICAgICAgICB2YXIgaW5saW5lY29kZSA9IGZhbHNlOw0KICAgICAgICAgIA0KICAgICAgICAgIGlmKHR5cGVvZiBkYXRhLmNtc0xhbmdJbmxpbmUgIT09ICd1bmRlZmluZWQnKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGlubGluZWNvZGUgPSAhIWRhdGEuY21zTGFuZ0lubGluZTsNCiAgICAgICAgICB9DQogIA0KICAgICAgICAgIGlmKGRlYnVnbWUpe2NvbnNvbGUubG9nKCdpbmxpbmVjb2RlID0gJyk7fQ0KICAgICAgICAgIGlmKGRlYnVnbWUpe2NvbnNvbGUubG9nKGlubGluZWNvZGUpO30NCiAgICAgICAgICANCiAgICAgICAgICBpZiggdHlwZW9mIGRhdGEuY21zTGFuZyA9PT0gJ3VuZGVmaW5lZCcgJiYgIGRhdGEuYWNlU2VsZWN0ZWRNb2RlICE9PSAncGxhaW4nKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSgnYWNlL21vZGUvJyArIGRhdGEuYWNlU2VsZWN0ZWRNb2RlKTsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7cGF0aDonYWNlL21vZGUvJyArIGRhdGEuY21zTGFuZywgaW5saW5lOmlubGluZWNvZGV9KTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYoZGVidWdtZSl7Y29uc29sZS5sb2coJ3NldCBsYW5ndWFnZSB0byA9ICcgKyBkYXRhLmNtc0xhbmcpO30NCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgICAgICAgaWYgKGRhdGEuYWNlU29mdFdyYXAgIT09ICdvZmYnKSB7DQogICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFdyYXBMaW1pdFJhbmdlKGRhdGEuYWNlU29mdFdyYXAsIGRhdGEuYWNlU29mdFdyYXApOw0KICAgICAgICAgICAgZWRpdG9yLnNldFByaW50TWFyZ2luQ29sdW1uKGRhdGEuYWNlU29mdFdyYXApOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGVkaXRvci5zZXRTZWxlY3Rpb25TdHlsZShkYXRhLmFjZVNlbGVjdGlvblN0eWxlKTsgLy8gZnVsbCBsaW5lIHNlbGVjdGlvbg0KICAgICAgICAgIGVkaXRvci5zZXRIaWdobGlnaHRBY3RpdmVMaW5lKGRhdGEuYWNlSGlnaGxpZ2h0TGluZSk7IC8vIGhpZ2hsaWdodCBhY3RpdmUgbGluZQ0KICAgICAgICAgIGVkaXRvci5zZXRIaWdobGlnaHRTZWxlY3RlZFdvcmQoZGF0YS5hY2VIaWdobGlnaHRXb3JkKTsgLy8gaGlnaGxpZ2h0IHNlbGVjdGVkIHdvcmQNCiAgICAgICAgICBlZGl0b3Iuc2V0U2hvd0ludmlzaWJsZXMoZGF0YS5hY2VTaG93SW52aXNpYmxlcyk7IC8vIHNob3cgaW52aXNpYmxlcw0KICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5zZXRIU2Nyb2xsQmFyQWx3YXlzVmlzaWJsZShkYXRhLmFjZUhzY3JvbGxCYXIpOyAvLyBwZXJzaXN0ZW50IGhzY3JvbGwNCiAgICAgICAgICBlZGl0b3IucmVuZGVyZXIuc2V0U2hvd0d1dHRlcihkYXRhLmFjZVNob3dHdXR0ZXIpOyAvLyBzaG93IGd1dHRlcg0KICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0VXNlU29mdFRhYnMoZGF0YS5hY2VTb2Z0VGFiKTsgLy8gc2V0IHNvZnQgdGFiDQogICAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRUYWJTaXplKGRhdGEuYWNlVGFiU2l6ZSk7IC8vIHNldCB0YWIgc2l6ZQ0KICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0VXNlV3JhcE1vZGUoZGF0YS5hY2VXcmFwTGluZSk7IC8vIHdyYXAgbGluZQ0KICAgICAgICAgIGVkaXRvci5zZXRCZWhhdmlvdXJzRW5hYmxlZChkYXRhLmFjZUJlaGF2aW91cnNFbmFibGVkKTsvL3NldCBiZWhhdmlvdXJzDQogICAgICAgICAgZWRpdG9yLnNldFNob3dQcmludE1hcmdpbihkYXRhLmFjZVByaW50TWFyZ2luKTsgLy8gc2V0IHByaW50IG1hcmdpbg0KICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5yZW1vdmVDb21tYW5kKCdmb2xkJyk7IC8vIGFsbG93cyBAIHN5bWJvbCBvbiBtYWMNCg0KICAgICAgICB9LA0KDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2V0cyBBY2VFZGl0b3IgVUkgZnVuY3Rpb25zDQogICAgICAgICAqIEBmdW5jdGlvbiBlZGl0b3JVSQ0KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZWwNCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lcg0KICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQNCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVkaXRvcg0KICAgICAgICAgKi8NCiAgICAgICAgZWRpdG9yVUkgOiBmdW5jdGlvbihlbCwgY29udGFpbmVyLCBpZCwgZWRpdG9yKSB7DQoNCiAgICAgICAgICB2YXIgdGlkID0gJyMnICsgZWwsDQogICAgICAgICAgICAgIHRjbGFzcyA9ICcuJyArIGVsLA0KICAgICAgICAgICAgICBlaWQgPSBpZCwNCiAgICAgICAgICAgICAgdmltID0gcmVxdWlyZSgnYWNlL2tleWJvYXJkL3ZpbScpLmhhbmRsZXIsDQogICAgICAgICAgICAgIGVtYWNzID0gcmVxdWlyZSgnYWNlL2tleWJvYXJkL2VtYWNzJykuaGFuZGxlcjsNCg0KICAgICAgICAgIC8vIHNlYXJjaCBlZGl0b3IgY29udGVudA0KICAgICAgICAgIEFDRVNZTlRBWC5FRElUT1IuZWRpdG9yU2VhcmNoKGVsLCBjb250YWluZXIsIGVkaXRvcik7DQogICAgICAgICAgLy8gZWRpdG9yIG9wdGlvbnMgbWVudQ0KICAgICAgICAgIEFDRVNZTlRBWC5FRElUT1IuZWRpdG9yVG9nZ2xlTWVudSgpOw0KDQogICAgICAgICAgLy8gc2V0IGtleWJpbmRpbmdzDQogICAgICAgICAgJCh0Y2xhc3MgKyAnX3Rvb2xiYXIgaW5wdXRbdHlwZT0icmFkaW8iXScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgdmFyIGtleWJpbmRpbmdzID0gbnVsbDsNCg0KICAgICAgICAgICAgaWYgKCQodGlkICsgJ19hY2UnKS5pcygnOmNoZWNrZWQnKSkgew0KICAgICAgICAgICAgICBrZXliaW5kaW5ncyA9IG51bGw7DQogICAgICAgICAgICB9IGVsc2UgaWYgKCQodGlkICsgJ192aW0nKS5pcygnOmNoZWNrZWQnKSkgew0KICAgICAgICAgICAgICBrZXliaW5kaW5ncyA9IHZpbTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoJCh0aWQgKyAnX2VtYWNzJykuaXMoJzpjaGVja2VkJykpIHsNCiAgICAgICAgICAgICAga2V5YmluZGluZ3MgPSBlbWFjczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZWRpdG9yLnNldEtleWJvYXJkSGFuZGxlcihrZXliaW5kaW5ncyk7DQogICAgICAgICAgfSk7DQogICAgICAgICAgDQogICAgICAgICAgLy8gdG9nZ2xlIGVkaXRvcg0KICAgICAgICAgICQodGNsYXNzICsgJ190b29sYmFyIGlucHV0W3R5cGU9InJhZGlvIl0nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIGlmICgkKHRpZCArICdfb2ZmJykuaXMoJzpjaGVja2VkJykpIHsNCiAgICAgICAgICAgICAgJCh0aWQpLnNob3coKTsNCiAgICAgICAgICAgICAgJChlaWQpLmhpZGUoKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICQoZWlkKS5zaG93KCk7DQogICAgICAgICAgICAgICQodGlkKS5oaWRlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNlbGVjdGlvbi5vbignY2hhbmdlQ3Vyc29yJywgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBlZGl0b3Iuc2VsZWN0aW9uLmdldEN1cnNvcigpLCAvLyBTaG93IGN1cnJlbnQgbGluZSBhbmQgY29sdW1uDQogICAgICAgICAgICAgICAgdG9rZW4gPSBlZGl0b3Iuc2Vzc2lvbi5nZXRUb2tlbkF0KHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTsgLy8gZ2V0IHRva2VuIGluZm9ybWF0aW9uIG9uIHRoaXMgbGluZQ0KDQogICAgICAgICAgICAkKHRpZCArICdfYWNlLWVkaXRvci1jdXJzb3InKS50ZXh0KCdMbjonICsgKCBwb3NpdGlvbi5yb3cgKyAxICkgKyAnIENvbDonICsgKCBwb3NpdGlvbi5jb2x1bW4gKyAxICkpOw0KICAgICAgICAgICAgaWYgKHRva2VuKSB7DQogICAgICAgICAgICAgICQodGlkICsgJ19hY2UtZWRpdG9yLXRva2VuJykuY2hpbGRyZW4oJ3NwYW4nKS50ZXh0KHRva2VuLnR5cGUpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgLy8gdG90YWwgY291bnQgb2YgbGluZXMNCiAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHZhciB0b3RhbCA9IGVkaXRvci5zZXNzaW9uLmdldExlbmd0aCgpOw0KICAgICAgICAgICAgJCh0aWQgKyAnX2FjZS1lZGl0b3ItbGluZW51bScpLmNoaWxkcmVuKCdzcGFuJykudGV4dCh0b3RhbCk7DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICAvLyBnbyB0byBsaW5lDQogICAgICAgICAgJCh0aWQgKyAnX2dvbGluZScpLmtleXByZXNzKGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIGlmIChlLndoaWNoID09PSAxMykgew0KICAgICAgICAgICAgICBlZGl0b3IuZ290b0xpbmUoJCh0aWQgKyAnX2dvbGluZScpLnZhbCgpKTsNCiAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gcHJldmVudCBzdWJtaXR0aW5nDQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICAvLyBnZXQgdGhlIHRva2VuIGluZm8NCiAgICAgICAgICBlZGl0b3Iub24oJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IGUuZ2V0RG9jdW1lbnRQb3NpdGlvbigpLA0KICAgICAgICAgICAgICAgIHRva2VuID0gZWRpdG9yLnNlc3Npb24uZ2V0VG9rZW5BdChwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbik7DQoNCiAgICAgICAgICAgIGlmICh0b2tlbikgew0KICAgICAgICAgICAgICAkKHRpZCArICdfYWNlLWVkaXRvci10b2tlbicpLmNoaWxkcmVuKCdzcGFuJykudGV4dCh0b2tlbi50eXBlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCg0KICAgICAgICAgIC8vIHJlc2l6ZSBhY2Ugd2l0aCBqdWkNCiAgICAgICAgICAkKGNvbnRhaW5lcikucmVzaXphYmxlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCA6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5vblJlc2l6ZSh0cnVlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIudXBkYXRlRnVsbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci5mb2N1cygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaG9zdCA6IHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgJCgnLnVpLXJlc2l6YWJsZS1oYW5kbGUnKS5jc3Moe3pJbmRleDogJzEwJ30pOw0KDQogICAgICAgICAgLy8gZGV0ZWN0IHRoZW1lIGNvbG9yIHNjaGVtZQ0KICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5hZGRFdmVudExpc3RlbmVyKCd0aGVtZUxvYWRlZCcsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIGlmICghJChlaWQpLmhhc0NsYXNzKCdhY2VfZGFyaycpKSB7DQogICAgICAgICAgICAgICQoJy5hY2UtdWktY29udGFpbmVyJykuYWRkQ2xhc3MoJ2FjZS1icmlnaHQnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCg0KICAgICAgICAgIC8vIGNoYW5nZSBlZGl0b3Igc3ludGF4IG1vZGUNCiAgICAgICAgICAkKHRpZCArICdfbW9kZXMgbGknKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCg0KICAgICAgICAgICAgdmFyICRvcHQgPSAkKHRpZCArICdfbW9kZXMgbGkuYWNlLXNlbGVjdGVkJyksDQogICAgICAgICAgICAgICAgJGRhdGEgPSAkKHRoaXMpLmRhdGEoKSwNCiAgICAgICAgICAgICAgICBtb2RlID0gJGRhdGEuYWNlTW9kZTsNCg0KICAgICAgICAgICAgJG9wdC5yZW1vdmVDbGFzcygnYWNlLXNlbGVjdGVkJyk7DQogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY2Utc2VsZWN0ZWQnKTsNCg0KICAgICAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCdhY2UvbW9kZS8nICsgbW9kZSk7DQogICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIudXBkYXRlRnVsbCgpOw0KDQogICAgICAgICAgfSk7DQoNCiAgICAgICAgfSwNCg0KICAgICAgICAvKioNCiAgICAgICAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIEFjRUVkaXRvciBmdWxsc2NyZWVuIG1vZGUNCiAgICAgICAgICogQGZ1bmN0aW9uIGVkaXRvckZ1bGxTY3JlZW4NCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lcg0KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZWRpdG9yDQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZA0KICAgICAgICAgKi8NCiAgICAgICAgZWRpdG9yRnVsbFNjcmVlbiA6IGZ1bmN0aW9uKGNvbnRhaW5lciwgZWRpdG9yLCBpZCwgdGV4dGFyZWEpIHsNCiAgDQogICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVyLmF0dHIoJ2lkJykpLA0KICAgICAgICAgICAgICBuYXRpdmVGdWxsU2NyZWVuID0gZmFsc2UsDQogIA0KICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgY29udGFpbmVyIHdyYXBwZXIgbGF5b3V0DQogICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBsYXlvdXRVcGRhdGUNCiAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgIGxheW91dFVwZGF0ZSA9IGZ1bmN0aW9uKCkgew0KICAgIA0KICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIuaGFzQ2xhc3MoJ2Z1bGxzY3JlZW4nKSkgew0KICAgICAgICAgICAgICAgICAgJChjb250YWluZXIpLmNzcyh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gOiAnc3RhdGljJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgJChjb250YWluZXIpLmNzcyh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gOiAncmVsYXRpdmUnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgICAvKioNCiAgICAgICAgICAgICAgICogQGRlc2NyaXB0aW9uIERldGVjdHMgbmF0aXZlIHN1cHBvcnQgZm9yIEZ1bGxTY3JlZW4gQVBJDQogICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBkZXRlY3RGdWxsU2NyZWVuDQogICAgICAgICAgICAgICAqIEByZXR1cm5zIGJvb2xlYW4NCiAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgIGRldGVjdEZ1bGxTY3JlZW4gPSBmdW5jdGlvbigpIHsNCg0KICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGRvY3VtZW50LmNhbmNlbEZ1bGxTY3JlZW4gIT09ICd1bmRlZmluZWQnDQogICAgICAgICAgICAgICAgICAgICB8fCB0eXBlb2YgZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbiAhPT0gJ3VuZGVmaW5lZCcNCiAgICAgICAgICAgICAgICAgICAgIHx8IHR5cGVvZiBkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuICE9PSAndW5kZWZpbmVkJw0KICAgICAgICAgICAgICAgICAgICAgfHwgdHlwZW9mIGRvY3VtZW50Lm9DYW5jZWxGdWxsU2NyZWVuICE9PSAndW5kZWZpbmVkJw0KICAgICAgICAgICAgICAgICAgICAgfHwgdHlwZW9mIGRvY3VtZW50Lm1zQ2FuY2VsRnVsbFNjcmVlbiAhPT0gJ3VuZGVmaW5lZCcNCiAgICAgICAgICAgICAgICAgICAgIHx8IHR5cGVvZiBkb2N1bWVudC5raHRtbENhbmNlbEZ1bGxTY3JlZW4gIT09ICd1bmRlZmluZWQnKSB7DQoNCiAgICAgICAgICAgICAgICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsNCg0KICAgICAgICAgICAgICAgICAgLy8gc25pZmYgc3R1cGlkIHNhZmFyaSBvbiB3aW5kb3dzLCBuYXRpdmUgZnVsbHNjcmVlbiBhcGkgc2VlbXMgdG8gaGF2ZSBhIGJ1Zw0KICAgICAgICAgICAgICAgICAgaWYgKHVhLmluZGV4T2YoJ3NhZmFyaS8nKSAhPT0gLTEgJiYgdWEuaW5kZXhPZignd2luZG93cycpICE9PSAtMSAmJiB1YS5pbmRleE9mKCdjaHJvbWUvJykgPT09IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bGxTY3JlZW4gPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIG5hdGl2ZUZ1bGxTY3JlZW4gPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfSwNCg0KICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gU3RhcnRzIEZ1bGxTY3JlZW4gbW9kZSwgaWYgbmF0aXZlIEZ1bGxTY3JlZW4gQVBJIGlzIGRldGVjdGVkIGVsc2UgaXQgZmFsbHMgYmFjayB0byBqUXVlcnkgbWV0aG9kDQogICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBzdGFydEZ1bGxTY3JlZW4NCiAgICAgICAgICAgICAgICovDQogICAgICAgICAgICAgIHN0YXJ0RnVsbFNjcmVlbiA9IGZ1bmN0aW9uKCkgew0KDQogICAgICAgICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKCdmdWxsc2NyZWVuJyk7IC8vIGFkZCBjbGFzcyB0byBjb250YWluZXINCiAgICAgICAgICAgICAgICAkKGlkICsgJ19hY2UtZnVsbHNjcmVlbicpLmFkZENsYXNzKCdhY2UtaWNvbi1jb250cmFjdCcpOyAvLyBjaGFuZ2UgYnV0dG9uIGljb24NCiAgICAgICAgICAgICAgICBkZXRlY3RGdWxsU2NyZWVuKCk7DQoNCiAgICAgICAgICAgICAgICAvLyBpZiBuYXRpdmUgSFRNTDUgRnVsbFNjcmVlbiBBUEkgaXMgc3VwcG9ydGVkDQogICAgICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bGxTY3JlZW4gPT09IHRydWUpIHsNCg0KICAgICAgICAgICAgICAgICAgbGF5b3V0VXBkYXRlKCk7DQoNCiAgICAgICAgICAgICAgICAgIGlmIChlbC5yZXF1ZXN0RnVsbHNjcmVlbikgew0KICAgICAgICAgICAgICAgICAgICBlbC5yZXF1ZXN0RnVsbHNjcmVlbigpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC5tb3pSZXF1ZXN0RnVsbFNjcmVlbikgew0KICAgICAgICAgICAgICAgICAgICBlbC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbikgew0KICAgICAgICAgICAgICAgICAgICBlbC53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbihlbC5BTExPV19LRVlCT0FSRF9JTlBVVCk7DQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLm1zUmVxdWVzdEZ1bGxzY3JlZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZWwubXNSZXF1ZXN0RnVsbHNjcmVlbigpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbC5vUmVxdWVzdEZ1bGxzY3JlZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZWwub1JlcXVlc3RGdWxsc2NyZWVuKCk7DQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLmtodG1sUmVxdWVzdEZ1bGxzY3JlZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZWwua2h0bWxSZXF1ZXN0RnVsbHNjcmVlbigpOw0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAvLyBlbHNlIHJlc2l6ZSBFZGl0b3Igd2l0aCBqUXVlcnkNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmRhdGEoJ29yaWdXaWR0aCcsIGNvbnRhaW5lci53aWR0aCgpKQ0KICAgICAgICAgICAgICAgICAgICAuZGF0YSgnb3JpZ0hlaWdodCcsIGNvbnRhaW5lci5oZWlnaHQoKSkNCiAgICAgICAgICAgICAgICAgICAgLndpZHRoKCQod2luZG93KS53aWR0aCgpICogMC45OTk5KQ0KICAgICAgICAgICAgICAgICAgICAuaGVpZ2h0KCQod2luZG93KS5oZWlnaHQoKSAqIDAuOTk5KQ0KICAgICAgICAgICAgICAgICAgICAuY3NzKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogJ2ZpeGVkJw0KICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci5vblJlc2l6ZSh0cnVlKTsNCiAgICAgICAgICAgICAgICBlZGl0b3IucmVuZGVyZXIudXBkYXRlRnVsbCgpOw0KICAgICAgICAgICAgICAgIGVkaXRvci5mb2N1cygpOw0KICAgICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAgIC8qDQogICAgICAgICAgICAgICAqIEBkZXNjcmlwdGlvbiBFbmRzIEZ1bGxTY3JlZW4gbW9kZSwgaWYgbmF0aXZlIEZ1bGxTY3JlZW4gQVBJIGlzIGRldGVjdGVkIGVsc2UgaXQgZmFsbHMgYmFjayB0byBqUXVlcnkgbWV0aG9kDQogICAgICAgICAgICAgICAqIEBmdW5jdGlvbiBlbmRGdWxsU2NyZWVuDQogICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAgICBlbmRGdWxsU2NyZWVuID0gZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgICAgICAgICBjb250YWluZXIucmVtb3ZlQ2xhc3MoJ2Z1bGxzY3JlZW4nKTsNCg0KICAgICAgICAgICAgICAgIGlmIChuYXRpdmVGdWxsU2NyZWVuKSB7DQoNCiAgICAgICAgICAgICAgICAgIGxheW91dFVwZGF0ZSgpOw0KICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmNhbmNlbEZ1bGxTY3JlZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY2FuY2VsRnVsbFNjcmVlbigpOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKSB7DQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbikgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7DQogICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50Lm1zQ2FuY2VsRnVsbFNjcmVlbikgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5tc0NhbmNlbEZ1bGxTY3JlZW4oKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQub0NhbmNlbEZ1bGxTY3JlZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQub0NhbmNlbEZ1bGxTY3JlZW4oKTsNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQua2h0bWxDYW5jZWxGdWxsU2NyZWVuKSB7DQogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmtodG1sQ2FuY2VsRnVsbFNjcmVlbigpOw0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IGNvbnRhaW5lci5kYXRhKCk7DQoNCiAgICAgICAgICAgICAgICAgICQoaWQgKyAnX2FjZS1mdWxsc2NyZWVuJykucmVtb3ZlQ2xhc3MoJ2FjZS1pY29uLWNvbnRyYWN0Jyk7DQogICAgICAgICAgICAgICAgICAvLyBwdXQgb3JpZ2luYWwgaWNvbiBiYWNrDQogICAgICAgICAgICAgICAgICBjb250YWluZXIud2lkdGgodG1wLm9yaWdXaWR0aCkuaGVpZ2h0KHRtcC5vcmlnSGVpZ2h0KS5jc3Moew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gOiAncmVsYXRpdmUnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgZWRpdG9yLnJlbmRlcmVyLm9uUmVzaXplKHRydWUpOw0KICAgICAgICAgICAgICAgIGVkaXRvci5yZW5kZXJlci51cGRhdGVGdWxsKCk7DQogICAgICAgICAgICAgICAgZWRpdG9yLmZvY3VzKCk7DQogICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAvLyB0cmlnZ2VyIGZ1bGxzY3JlZW4gb24gYnV0dG9uIGNsaWNrIG9yIENUUkwgKyBlbnRlcg0KICAgICAgICAgICQoaWQgKyAnX2FjZS1mdWxsc2NyZWVuJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgew0KICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5oYXNDbGFzcygnZnVsbHNjcmVlbicpKSB7DQogICAgICAgICAgICAgIGVuZEZ1bGxTY3JlZW4oKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHN0YXJ0RnVsbFNjcmVlbigpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmQoew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6ICdmdWxsU2NyZWVuRWRpdGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kS2V5IDogew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW4gOiAnQ3RybC1SZXR1cm4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMgOiAnQ29tbWFuZC1SZXR1cm4nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyA6IGZ1bmN0aW9uKGVudiwgYXJncywgcmVxdWVzdCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyLmhhc0NsYXNzKCdmdWxsc2NyZWVuJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRGdWxsU2NyZWVuKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRGdWxsU2NyZWVuKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICQoZG9jdW1lbnQpLmtleXVwKGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgICAgIGlmIChjb250YWluZXIuaGFzQ2xhc3MoJ2Z1bGxzY3JlZW4nKSAmJiBlLmtleUNvZGUgPT09IDI3KSB7DQogICAgICAgICAgICAgIGVuZEZ1bGxTY3JlZW4oKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgfSwNCg0KICAgICAgICAvKioNCiAgICAgICAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgbG9hZGluZyBhbmQgc2F2aW5nIG9mIGNvbnRlbnQgaW4gQWNlIGFuZCBUZXh0YXJlYSwgZGV0ZWN0cyBjaGFuZ2VzIG9mIGNvbnRlbnQgYW5kIHNhdmVzIHRvIHNlc3Npb24NCiAgICAgICAgICogQGZ1bmN0aW9uIGVkaXRvclNhdmVDb3RuZW50DQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZA0KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZWRpdG9yDQogICAgICAgICAqLw0KICAgICAgICBlZGl0b3JTYXZlQ29udGVudCA6IGZ1bmN0aW9uKGlkLCBlZGl0b3IpIHsNCg0KICAgICAgICAgIHZhciB0ZXh0YXJlYSA9ICQoaWQpLA0KICAgICAgICAgICAgICBjb250ZW50ID0gJCh0ZXh0YXJlYSkudmFsKCk7IC8vIGdldCB0aGUgdmFsdWUgZnJvbSB0ZXh0YXJlYQ0KDQogICAgICAgICAgLy8gU0FWRSBWQUxVRVMNCiAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFZhbHVlKGNvbnRlbnQpOw0KICAgICAgICAgIC8vZXZlcnl0aW1lIGl0IGNoYW5nZXMNCiAgICAgICAgICAkKHRleHRhcmVhKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFZhbHVlKHRleHRhcmVhLnZhbCgpKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRleHRhcmVhIG9uIGNoYW5nZQ0KICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgLy8gR2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBlZGl0b3IgYW5kIHBsYWNlIGl0IGludG8gdGhlIHRleHRhcmVhLg0KICAgICAgICAgICAgdmFyIHRleHQgPSBlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCk7DQogICAgICAgICAgICB0ZXh0YXJlYS52YWwodGV4dCk7DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICAvLyBTYXZlIHNob3J0Y3V0DQogICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmFkZENvbW1hbmQoew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA6ICdhY2VzYXZlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRLZXkgOiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbiA6ICdDdHJsLVMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMgOiAnQ29tbWFuZC1TJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMgOiBmdW5jdGlvbihlbnYsIGFyZ3MsIHJlcXVlc3QpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFZhbHVlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhLnZhbCh0ZXh0KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgcGFyZW50IGZvcm0uIGFuZCBhIGNoaWxkIGJ1dHRvbiBuYW1lZCAnYXBwbHknLCBhbmQgY2xpY2sgaXQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdbbmFtZSo9ImFwcGx5Il0nKS5maXJzdCgpLmNsaWNrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoqDQogICAgICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHJlc2l6aW5nIG9mIEVkaXRvciBhcmVhDQogICAgICAgICAqIEBmdW5jdGlvbiBlZGl0b3JTaXplVXBkYXRlDQogICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250YWluZXINCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGENCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVkaXRvcg0KICAgICAgICAgKi8NCiAgICAgICAgZWRpdG9yU2l6ZVVwZGF0ZSA6IGZ1bmN0aW9uKGNvbnRhaW5lciwgZGF0YSwgZWRpdG9yKSB7DQoNCiAgICAgICAgICAkKGNvbnRhaW5lcikuY3NzKHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggOiBkYXRhLmFjZVdpZHRoICsgZGF0YS5hY2VXaWR0aFVuaXRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgOiBkYXRhLmFjZUhlaWdodCArIGRhdGEuYWNlSGVpZ2h0VW5pdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgLyoqDQogICAgICAgICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHNpemUgb2YgRWRpdG9yIGNvbnRhaW5lcg0KICAgICAgICAgICAqIEBmdW5jdGlvbiByZXNpemVFZGl0b3JDb250YWluZXINCiAgICAgICAgICAgKi8NCiAgICAgICAgICB2YXIgcmVzaXplRWRpdG9yQ29udGFpbmVyID0gZnVuY3Rpb24oKSB7DQoNCiAgICAgICAgICAgIHZhciBnZXRIZWlnaHQgPSBkYXRhLmFjZUhlaWdodCwNCiAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSBlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldExlbmd0aCgpICogZWRpdG9yLnJlbmRlcmVyLmxpbmVIZWlnaHQgKyBlZGl0b3IucmVuZGVyZXIuc2Nyb2xsQmFyLmdldFdpZHRoKCkgKyAxMTA7DQoNCiAgICAgICAgICAgIGlmIChuZXdIZWlnaHQgPiBnZXRIZWlnaHQpIHsNCiAgICAgICAgICAgICAgJChjb250YWluZXIpLmhlaWdodChuZXdIZWlnaHQpOw0KICAgICAgICAgICAgICBlZGl0b3IucmVzaXplKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfTsNCg0KICAgICAgICAgIGlmIChkYXRhLmFjZUF1dG9IZWlnaHQgPT09IDEpIHsNCg0KICAgICAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgIHJlc2l6ZUVkaXRvckNvbnRhaW5lcigpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgcmVzaXplRWRpdG9yQ29udGFpbmVyKCk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQogICAgICAgIH0sDQoNCiAgICAgICAgLyoqDQogICAgICAgICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHNlYXJjaCBmdW5jdGlvbnMNCiAgICAgICAgICogQGZ1bmN0aW9uIGVkaXRvclNlYXJjaA0KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZWwNCiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRhaW5lcg0KICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gZWRpdG9yDQogICAgICAgICAqLw0KICAgICAgICBlZGl0b3JTZWFyY2ggOiBmdW5jdGlvbihlbCwgY29udGFpbmVyLCBlZGl0b3IpIHsNCg0KICAgICAgICAgIHZhciB0aWQgPSAnIycgKyBlbCwNCiAgICAgICAgICAgICAgdGNsYXNzID0gJy4nICsgZWwsDQogICAgICAgICAgICAgIGFjdGlvbiA9ICdmaW5kJywNCiAgICAgICAgICAgICAgcmVwbGFjZSA9IG51bGwsDQogICAgICAgICAgICAgIHNldHRpbmdzID0gew0KICAgICAgICAgICAgICAgIGJhY2t3YXJkcyA6IGZhbHNlLA0KICAgICAgICAgICAgICAgIHdyYXAgOiB0cnVlLA0KICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgOiBmYWxzZSwNCiAgICAgICAgICAgICAgICB3aG9sZVdvcmQgOiBmYWxzZSwNCiAgICAgICAgICAgICAgICByZWdFeHAgOiBmYWxzZQ0KICAgICAgICAgICAgICB9LA0KDQogICAgICAgICAgICAgIC8qKg0KICAgICAgICAgICAgICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgc2VhcmNoIGFjdGlvbiB0eXBlIGFuZCBzZXRzIHNlYXJjaCBzZXR0aW5ncw0KICAgICAgICAgICAgICAgKiBUT0RPIE5lZWRzIHdvcmssIG5vdCBmdWxseSBmdW5jdGlvbmFsIHlldA0KICAgICAgICAgICAgICAgKiBAZnVuY3Rpb24gc2VhcmNoQWN0aW9uDQogICAgICAgICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhY3Rpb24NCiAgICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbmQNCiAgICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGVkaXRvcg0KICAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgICAgc2VhcmNoQWN0aW9uID0gZnVuY3Rpb24oYWN0aW9uLCBmaW5kLCByZXBsYWNlLCBzZXR0aW5ncywgZWRpdG9yKSB7DQoNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikgew0KICAgICAgICAgICAgICAgICAgY2FzZSAnZmluZCc6DQogICAgICAgICAgICAgICAgICAgIGVkaXRvci5maW5kKGZpbmQsc2V0dGluZ3MpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcGxhY2UnOg0KICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZmluZChmaW5kLHNldHRpbmdzKTsNCiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlcGxhY2UocmVwbGFjZSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgY2FzZSAncmVwbGFjZUFsbCc6DQogICAgICAgICAgICAgICAgICAgIGVkaXRvci5maW5kKGZpbmQsc2V0dGluZ3MpOw0KICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVwbGFjZUFsbChyZXBsYWNlKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9Ow0KDQogICAgICAgICAgLy8gY2hhbmdlIGFjdGlvbiB2YWx1ZSBiYXNlZCBvbiBzZWFyY2ggb3B0aW9uIG1lbnUgc2VsZWN0aW9uDQogICAgICAgICAgJCh0aWQgKyAnX29wdGlvbnMgbGknKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCg0KICAgICAgICAgICAgdmFyICRvcHQgPSAkKHRpZCArICdfb3B0aW9ucyBsaS5hY2Utc2VsZWN0ZWQnKSwNCiAgICAgICAgICAgICAgICAkZGF0YSA9ICQodGhpcykuZGF0YSgpLA0KICAgICAgICAgICAgICAgIHZhbCA9ICRkYXRhLmFjZVNlYXJjaE9wdGlvbiwNCiAgICAgICAgICAgICAgICAkcmVwbGFjZWlucHV0ID0gJCh0aWQgKyAnX3JlcGxhY2UnKTsNCg0KICAgICAgICAgICAgJG9wdC5yZW1vdmVDbGFzcygnYWNlLXNlbGVjdGVkJyk7DQogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY2Utc2VsZWN0ZWQnKTsNCg0KICAgICAgICAgICAgYWN0aW9uID0gdmFsOw0KDQogICAgICAgICAgICBpZiAoYWN0aW9uID09PSAncmVwbGFjZScgfHwgYWN0aW9uID09PSAncmVwbGFjZUFsbCcpIHsNCiAgICAgICAgICAgICAgJHJlcGxhY2VpbnB1dC5zaG93KCk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAkcmVwbGFjZWlucHV0LmhpZGUoKS52YWwoJycpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICAvLyBjaGFuZ2Ugc2VhcmNoIHNldHRpbmdzIGJhc2VkIG9uIHNlYXJjaCBzZXR0aW5ncyBtZW51DQogICAgICAgICAgJCh0aWQgKyAnX3NlYXJjaF9zZXR0aW5ncyBsaScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KDQogICAgICAgICAgICB2YXIgJG9wdCA9ICQodGlkICsgJ19zZWFyY2hfc2V0dGluZ3MgbGkuYWNlLXNlbGVjdGVkJyksDQogICAgICAgICAgICAgICAgJGRhdGEgPSAkKHRoaXMpLmRhdGEoKSwNCiAgICAgICAgICAgICAgICB2YWwgPSAkZGF0YS5hY2VTZWFyY2hPcHRpb247DQoNCiAgICAgICAgICAgICRvcHQucmVtb3ZlQ2xhc3MoJ2FjZS1zZWxlY3RlZCcpOw0KICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWNlLXNlbGVjdGVkJyk7DQoNCiAgICAgICAgICAgIHN3aXRjaCAodmFsKSB7DQogICAgICAgICAgICAgIGNhc2UgJ3Jlc2V0JzoNCiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHsNCiAgICAgICAgICAgICAgICAgIGJhY2t3YXJkcyA6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgd3JhcCA6IHRydWUsDQogICAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlIDogZmFsc2UsDQogICAgICAgICAgICAgICAgICB3aG9sZVdvcmQgOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgIHJlZ0V4cCA6IGZhbHNlDQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgY2FzZSAnY2FzZVNlbnNpdGl2ZSc6DQogICAgICAgICAgICAgICAgc2V0dGluZ3MgPSB7DQogICAgICAgICAgICAgICAgICBiYWNrd2FyZHMgOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgIHdyYXAgOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZSA6IHRydWUsDQogICAgICAgICAgICAgICAgICB3aG9sZVdvcmQgOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgIHJlZ0V4cCA6IGZhbHNlDQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgY2FzZSAnd2hvbGVXb3JkJzoNCiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IHsNCiAgICAgICAgICAgICAgICAgIGJhY2t3YXJkcyA6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgd3JhcCA6IHRydWUsDQogICAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlIDogZmFsc2UsDQogICAgICAgICAgICAgICAgICB3aG9sZVdvcmQgOiB0cnVlLA0KICAgICAgICAgICAgICAgICAgcmVnRXhwIDogZmFsc2UNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICBjYXNlICdyZWdFeHAnOg0KICAgICAgICAgICAgICAgIHNldHRpbmdzID0gew0KICAgICAgICAgICAgICAgICAgYmFja3dhcmRzIDogZmFsc2UsDQogICAgICAgICAgICAgICAgICB3cmFwIDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmUgOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgIHdob2xlV29yZCA6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgcmVnRXhwIDogdHJ1ZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICB9KTsNCg0KICAgICAgICAgICQodGlkICsgJ19zZWFyY2gnKS5rZXlwcmVzcyhmdW5jdGlvbihlKSB7DQoNCiAgICAgICAgICAgIHZhciBmaW5kID0gJCh0aWQgKyAnX3NlYXJjaCcpLnZhbCgpLA0KICAgICAgICAgICAgICAgIHJlcGxhY2UgPSAkKHRpZCArICdfcmVwbGFjZScpLnZhbCgpOw0KDQogICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gMTMpIHsNCiAgICAgICAgICAgICAgc2VhcmNoQWN0aW9uKGFjdGlvbiwgZmluZCwgcmVwbGFjZSwgc2V0dGluZ3MsIGVkaXRvcik7DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gcHJldmVudCBzdWJtaXR0aW5nDQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICAkKHRpZCArICdfcmVwbGFjZScpLmtleXByZXNzKGZ1bmN0aW9uKGUpIHsNCg0KICAgICAgICAgICAgdmFyIGZpbmQgPSAkKHRpZCArICdfc2VhcmNoJykudmFsKCksDQogICAgICAgICAgICAgICAgcmVwbGFjZSA9ICQodGlkICsgJ19yZXBsYWNlJykudmFsKCk7DQoNCiAgICAgICAgICAgIGlmIChlLndoaWNoID09PSAxMykgew0KICAgICAgICAgICAgICBzZWFyY2hBY3Rpb24oYWN0aW9uLCBmaW5kLCByZXBsYWNlLCBzZXR0aW5ncywgZWRpdG9yKTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBwcmV2ZW50IHN1Ym1pdHRpbmcNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCg0KICAgICAgICB9LA0KDQogICAgICAgIGVkaXRvclRvZ2dsZU1lbnUgOiBmdW5jdGlvbigpIHsNCg0KICAgICAgICAgIHZhciAkZHJvcGRvd24gPSAkKCcuYWNlLWxpc3QnKTsNCg0KICAgICAgICAgICQoJy5hY2UtdG9nZ2xlLW1lbnUnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7DQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KDQogICAgICAgICAgICAkZHJvcGRvd24uaGlkZSgpOw0KICAgICAgICAgICAgJCgnLmFjZS10b2dnbGUtbWVudScpLnJlbW92ZUNsYXNzKCdhY2UtbWVudS1hY3RpdmUnKTsNCg0KICAgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygndWwuYWNlLWxpc3QnKS5zaG93KCk7DQogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY2UtbWVudS1hY3RpdmUnKTsNCiAgICAgICAgICB9KTsNCg0KICAgICAgICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KDQogICAgICAgICAgICAkZHJvcGRvd24uaGlkZSgpOw0KICAgICAgICAgICAgJCgnLmFjZS10b2dnbGUtbWVudScpLnJlbW92ZUNsYXNzKCdhY2UtbWVudS1hY3RpdmUnKTsNCiAgICAgICAgICB9KTsNCg0KICAgICAgICAgICRkcm9wZG93bi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7DQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICB9Ow0KICANCn0gKSh0aGlzLCBqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/js/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KLy8gZnJvbnRlbmQgc3ludGF4YXJlYSBwcmVmcw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2F1dG9faGVpZ2h0JywgICAgICAwKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9mb250c2l6ZScsICAgICAgICAgJzEzcHgnKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9oZWlnaHQnLCAgICAgICAgICAgJzQwMCcpOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2hlaWdodF91bml0cycsICAgICAncHgnKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX21vZGUnLCAgJ2h0bWwnKTsNCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX3RoZW1lJywgJ2dpdGh1YicpOw0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3dpZHRoJywgICAgICAgICAgICAnNTAwJyk7DQokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfd2lkdGhfdW5pdHMnLCAgICAgICdweCcpOw0KDQovLyBwZXJtaXNzaW9ucw0KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ0FjZVN5bnRheCBVc2VyIFByZWZlcmVuY2UnLCAnQWNlU3ludGF4IFVzZXIgUHJlZmVyZW5jZScpOw0KDQovLyByZWdpc3RlciBhcyBwbHVnaW4NCiR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbihUUlVFKTsNCi8vJHRoaXMtPlJlZ2lzdGVyU21hcnR5UGx1Z2luKCdhY2VfY29kZScsJ2Jsb2NrJywgYXJyYXkoJ0FjZVN5bnRheFNtYXJ0eScsICdjb2RlX2Jsb2NrJykpOw0KLy8kdGhpcy0+UmVnaXN0ZXJTbWFydHlQbHVnaW4oJ2FjZV9oZWFkJywnZnVuY3Rpb24nLCBhcnJheSgnQWNlU3ludGF4U21hcnR5JywgJ2hlYWRfb3V0cHV0JykpOw0KDQojDQojIEVPRg0KIw==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KLy8gcmVtb3ZlIHByZWZlcmVuY2VzDQpjbXNfc2l0ZXByZWZzOjpyZW1vdmUoJ0FjZVN5bnRheF9mcm9udGVuZF9hdXRvX2hlaWdodCcpOw0KY21zX3NpdGVwcmVmczo6cmVtb3ZlKCdBY2VTeW50YXhfZnJvbnRlbmRfZm9udHNpemUnKTsNCmNtc19zaXRlcHJlZnM6OnJlbW92ZSgnQWNlU3ludGF4X2Zyb250ZW5kX2hlaWdodCcpOw0KY21zX3NpdGVwcmVmczo6cmVtb3ZlKCdBY2VTeW50YXhfZnJvbnRlbmRfaGVpZ2h0X3VuaXRzJyk7DQpjbXNfc2l0ZXByZWZzOjpyZW1vdmUoJ0FjZVN5bnRheF9mcm9udGVuZF9zeW50YXhhcmVhX21vZGUnKTsNCmNtc19zaXRlcHJlZnM6OnJlbW92ZSgnQWNlU3ludGF4X2Zyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUnKTsNCmNtc19zaXRlcHJlZnM6OnJlbW92ZSgnQWNlU3ludGF4X2Zyb250ZW5kX3dpZHRoJyk7DQpjbXNfc2l0ZXByZWZzOjpyZW1vdmUoJ0FjZVN5bnRheF9mcm9udGVuZF93aWR0aF91bml0cycpOw0KDQovLyByZW1vdmUgc21hcnR5IHBsdWdpbnMNCiR0aGlzLT5SZW1vdmVTbWFydHlQbHVnaW4oKTsNCg0KIw0KIyBFT0YNCiM=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgTW9kdWxlOiBBY2VTeW50YXgNCiMgQXV0aG9yczogRmVybmFuZG8gTW9yZ2FkbyAoSm8gTW9yZyksIFJvbGYgVGphc3NlbnMgKGNtc2NhbmJlc2ltcGxlLm9yZykNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ01TIE1hZGUgU2ltcGxlIC0gUG93ZXIgZm9yIHRoZSBwcm9mZXNzaW9uYWwsIFNpbXBsaWNpdHkgZm9yIHRoZSBlbmQgdXNlci4NCiMgKGMpIDIwMDQgLSAyMDExIGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykNCiMgKGMpIDIwMTEgLSAyMDE4IGJ5IFRoZSBDTVMgTWFkZSBTaW1wbGUgRGV2ZWxvcG1lbnQgVGVhbQ0KIyAoYykgMjAxOCAtIDIwMTkgYnkgVGhlIENNUyBNYWRlIFNpbXBsZSBGb3VuZGF0aW9uDQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwczovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvYWNlc3ludGF4DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yDQojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBDQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KaWYgKCAhaXNfb2JqZWN0KCBjbXNtcygpICkgKSBleGl0Ow0KDQppZiAoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgew0KCWVjaG8gJHRoaXMtPlNob3dFcnJvcnMoICR0aGlzLT5MYW5nKCduZWVkcGVybWlzc2lvbicsIGFycmF5ICgNCgkJJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJw0KCSkgKSApOw0KCXJldHVybjsNCn0NCg0KIw0KIyBFT0YNCiM=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJBY2VTeW50YXgiCnZlcnNpb24gPSAiMS4wLjEiCmF1dGhvciA9ICJKbyBNb3JnLCBSb2xmIFRqYXNzZW5zIgphdXRob3JlbWFpbCA9ICJqb21vcmcgW2F0XSBzbS1hcnQtbGFiIFtkb3RdIGNvbSwgaW5mbyBbYXRdIGNtc2NhbmJlc2ltcGxlIFtkb3RdIG9yZyIKbWluY21zdmVyc2lvbiA9IDIuMQpsYXp5bG9hZGFkbWluID0gMQpsYXp5bG9hZGZyb250ZW5kID0gMAo=]]></data>
	</file>
	<file>
	  <filename>/samples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/samples/abap.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKiBQcm9ncmFtOiBFWEFNUExFICAgICAgICAgICAgICAgICAgKioNCioqIEF1dGhvcjogSm9lIEJ5dGUsIDA3LUp1bC0yMDA3ICAgICAqKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogDQpSRVBPUlQgQk9PS0lOR1MuDQogDQoqIFJlYWQgZmxpZ2h0IGJvb2tpbmdzIGZyb20gdGhlIGRhdGFiYXNlDQpTRUxFQ1QgKiBGUk9NIEZMSUdIVElORk8NCiAgV0hFUkUgQ0xBU1MgPSAnWScgICAgICAgIlkgPSBlY29ub215DQogIE9SICAgIENMQVNTID0gJ0MnLiAgICAgICJDID0gYnVzaW5lc3MNCiguLi4pDQoNClJFUE9SVCBURVNULg0KV1JJVEUgJ0hlbGxvIFdvcmxkJy4NCg0KVVNFUlBST01QVCA9ICdQbGVhc2UgZG91YmxlLWNsaWNrIG9uIGEgbGluZSBpbiB0aGUgb3V0cHV0IGxpc3QgJyAmDQogICAgICAgICAgICAgJ3RvIHNlZSB0aGUgY29tcGxldGUgZGV0YWlscyBvZiB0aGUgdHJhbnNhY3Rpb24uJy4NCg0KDQpEQVRBIExBU1RfRU9NICAgIFRZUEUgRC4gICJsYXN0IGVuZC1vZi1tb250aCBkYXRlDQogDQoqIFN0YXJ0IGZyb20gdG9kYXkncyBkYXRlDQogIExBU1RfRU9NID0gU1ktREFUVU0uDQoqIFNldCBjaGFyYWN0ZXJzIDYgYW5kIDcgKDAtcmVsYXRpdmUpIG9mIHRoZSBZWVlZTU1ERCBzdHJpbmcgdG8gIjAxIiwNCiogZ2l2aW5nIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGN1cnJlbnQgbW9udGgNCiAgTEFTVF9FT00rNigyKSA9ICcwMScuDQoqIFN1YnRyYWN0IG9uZSBkYXkNCiAgTEFTVF9FT00gPSBMQVNUX0VPTSAtIDEuDQogDQogIFdSSVRFOiAnTGFzdCBkYXkgb2YgcHJldmlvdXMgbW9udGggd2FzJywgTEFTVF9FT00uDQogIA0KREFUQSA6IEJFR0lOIE9GIElfVkJSSyBPQ0NVUlMgMCwNCiAgICAgICAgIFZCRUxOIExJS0UgVkJSSy1WQkVMTiwNCiAgICAgICAgIFpVT05SIExJS0UgVkJSSy1aVU9OUiwNCiAgICAgICBFTkQgT0YgSV9WQlJLLg==]]></data>
	</file>
	<file>
	  <filename>/samples/actionscript.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cGFja2FnZSBjb2RlDQp7DQogICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoJICogYmFzZWQgb24gdGV4dG1hdGUgYWN0aW9uc2NyaXB0IGJ1bmRsZQ0KCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KCSANCglpbXBvcnQgZmwuZXZlbnRzLlNsaWRlckV2ZW50Ow0KCQ0KCXB1YmxpYyBjbGFzcyBGb28gZXh0ZW5kcyBNb3ZpZUNsaXANCgl7DQoJCS8vKioqKioqKioqKioqKioqKioqKioqKioqKg0KCQkvLyBQcm9wZXJ0aWVzOg0KCQkNCgkJcHVibGljIHZhciBhY3RpdmVTd2F0Y2g6TW92aWVDbGlwOw0KCQkNCgkJLy8gQ29sb3Igb2Zmc2V0cw0KCQlwdWJsaWMgdmFyIGMxOk51bWJlciA9IDA7CS8vIFINCgkJDQoJCS8vKioqKioqKioqKioqKioqKioqKioqKioqKg0KCQkvLyBDb25zdHJ1Y3RvcjoNCgkJDQoJCXB1YmxpYyBmdW5jdGlvbiBGb28oKQ0KCQl7DQoJCQkvLyBSZXNwb25kIHRvIG1vdXNlIGV2ZW50cw0KCQkJc3dhdGNoMV9idG4uYWRkRXZlbnRMaXN0ZW5lcihNb3VzZUV2ZW50LkNMSUNLLHN3YXRjaEhhbmRsZXIsZmFsc2UsMCxmYWxzZSk7DQoJCQlwcmV2aWV3Qm94X2J0bi5hZGRFdmVudExpc3RlbmVyKE1vdXNlRXZlbnQuTU9VU0VfRE9XTixkcmFnUHJlc3NIYW5kbGVyKTsNCgkJCQ0KCQkJLy8gUmVzcG9uZCB0byBkcmFnIGV2ZW50cw0KCQkJcmVkX3NsaWRlci5hZGRFdmVudExpc3RlbmVyKFNsaWRlckV2ZW50LlRIVU1CX0RSQUcsc2xpZGVySGFuZGxlcik7DQoJCQkNCgkJCS8vIERyYXcgYSBmcmFtZSBsYXRlcg0KCQkJYWRkRXZlbnRMaXN0ZW5lcihFdmVudC5FTlRFUl9GUkFNRSxkcmF3KTsNCgkJfQ0KICAgICAgICANCgkJcHJvdGVjdGVkIGZ1bmN0aW9uIGNsaWNrSGFuZGxlcihldmVudDpNb3VzZUV2ZW50KTp2b2lkDQoJCXsNCgkJCWNhci50cmFuc2Zvcm0uY29sb3JUcmFuc2Zvcm0gPSBuZXcgQ29sb3JUcmFuc2Zvcm0oMCwwLDAsMSxjMSxjMixjMyk7DQoJCX0NCgkJDQoJCXByb3RlY3RlZCBmdW5jdGlvbiBjaGFuZ2VSR0JIYW5kbGVyKGV2ZW50OkV2ZW50KTp2b2lkDQoJCXsNCgkJCWMxID0gTnVtYmVyKGMxX3R4dC50ZXh0KTsNCiAgICAgICAgICAgIA0KCQkJaWYoIShjMT49MCkpew0KCQkJCWMxID0gMDsNCgkJCX0JCQkNCgkJCQ0KCQkJdXBkYXRlU2xpZGVycygpOw0KCQl9DQoJfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/asciidoc.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QXNjaWlEb2MgVXNlciBHdWlkZQ0KPT09PT09PT09PT09PT09PT09PQ0KU3R1YXJ0IFJhY2toYW0gPHNyYWNraGFtQGdtYWlsLmNvbT4NCjpBdXRob3IgSW5pdGlhbHM6IFNKUg0KOnRvYzoNCjppY29uczoNCjpudW1iZXJlZDoNCjp3ZWJzaXRlOiBodHRwOi8vd3d3Lm1ldGhvZHMuY28ubnovYXNjaWlkb2MvDQoNCkFzY2lpRG9jIGlzIGEgdGV4dCBkb2N1bWVudCBmb3JtYXQgZm9yIHdyaXRpbmcgbm90ZXMsIGRvY3VtZW50YXRpb24sDQphcnRpY2xlcywgYm9va3MsIGVib29rcywgc2xpZGVzaG93cywgd2ViIHBhZ2VzLCBibG9ncyBhbmQgVU5JWCBtYW4NCnBhZ2VzLiAgQXNjaWlEb2MgZmlsZXMgY2FuIGJlIHRyYW5zbGF0ZWQgdG8gbWFueSBmb3JtYXRzIGluY2x1ZGluZw0KSFRNTCwgUERGLCBFUFVCLCBtYW4gcGFnZS4gIEFzY2lpRG9jIGlzIGhpZ2hseSBjb25maWd1cmFibGU6IGJvdGggdGhlDQpBc2NpaURvYyBzb3VyY2UgZmlsZSBzeW50YXggYW5kIHRoZSBiYWNrZW5kIG91dHB1dCBtYXJrdXBzICh3aGljaCBjYW4NCmJlIGFsbW9zdCBhbnkgdHlwZSBvZiBTR01ML1hNTCBtYXJrdXApIGNhbiBiZSBjdXN0b21pemVkIGFuZCBleHRlbmRlZA0KYnkgdGhlIHVzZXIuDQoNCi5UaGlzIGRvY3VtZW50DQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpUaGlzIGlzIGFuIG92ZXJseSBsYXJnZSBkb2N1bWVudCwgaXQgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmVmYWN0b3JlZA0KaW50byBhIFR1dG9yaWFsLCBRdWljayBSZWZlcmVuY2UgYW5kIEZvcm1hbCBSZWZlcmVuY2UuDQoNCklmIHlvdSdyZSBuZXcgdG8gQXNjaWlEb2MgcmVhZCB0aGlzIHNlY3Rpb24gYW5kIHRoZSA8PFg2LEdldHRpbmcNClN0YXJ0ZWQ+PiBzZWN0aW9uIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZXhhbXBsZSBBc2NpaURvYyAoYCoudHh0YCkNCnNvdXJjZSBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGBkb2NgIGRpcmVjdG9yeS4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KDQpJbnRyb2R1Y3Rpb24NCi0tLS0tLS0tLS0tLQ0KQXNjaWlEb2MgaXMgYSBwbGFpbiB0ZXh0IGh1bWFuIHJlYWRhYmxlL3dyaXRhYmxlIGRvY3VtZW50IGZvcm1hdCB0aGF0DQpjYW4gYmUgdHJhbnNsYXRlZCB0byBEb2NCb29rIG9yIEhUTUwgdXNpbmcgdGhlIGFzY2lpZG9jKDEpIGNvbW1hbmQuDQpZb3UgY2FuIHRoZW4gZWl0aGVyIHVzZSBhc2NpaWRvYygxKSBnZW5lcmF0ZWQgSFRNTCBkaXJlY3RseSBvciBydW4NCmFzY2lpZG9jKDEpIERvY0Jvb2sgb3V0cHV0IHRocm91Z2ggeW91ciBmYXZvcml0ZSBEb2NCb29rIHRvb2xjaGFpbiBvcg0KdXNlIHRoZSBBc2NpaURvYyBhMngoMSkgdG9vbGNoYWluIHdyYXBwZXIgdG8gcHJvZHVjZSBQREYsIEVQVUIsIERWSSwNCkxhVGVYLCBQb3N0U2NyaXB0LCBtYW4gcGFnZSwgSFRNTCBhbmQgdGV4dCBmb3JtYXRzLg0KDQpUaGUgQXNjaWlEb2MgZm9ybWF0IGlzIGEgdXNlZnVsIHByZXNlbnRhdGlvbiBmb3JtYXQgaW4gaXRzIG93biByaWdodDoNCkFzY2lpRG9jIG1hcmt1cCBpcyBzaW1wbGUsIGludHVpdGl2ZSBhbmQgYXMgc3VjaCBpcyBlYXNpbHkgcHJvb2ZlZCBhbmQNCmVkaXRlZC4NCg0KQXNjaWlEb2MgaXMgbGlnaHQgd2VpZ2h0OiBpdCBjb25zaXN0cyBvZiBhIHNpbmdsZSBQeXRob24gc2NyaXB0IGFuZCBhDQpidW5jaCBvZiBjb25maWd1cmF0aW9uIGZpbGVzLiBBcGFydCBmcm9tIGFzY2lpZG9jKDEpIGFuZCBhIFB5dGhvbg0KaW50ZXJwcmV0ZXIsIG5vIG90aGVyIHByb2dyYW1zIGFyZSByZXF1aXJlZCB0byBjb252ZXJ0IEFzY2lpRG9jIHRleHQNCmZpbGVzIHRvIERvY0Jvb2sgb3IgSFRNTC4gU2VlIDw8WDExLEV4YW1wbGUgQXNjaWlEb2MgRG9jdW1lbnRzPj4NCmJlbG93Lg0KDQpUZXh0IG1hcmt1cCBjb252ZW50aW9ucyB0ZW5kIHRvIGJlIGEgbWF0dGVyIG9mIChvZnRlbiBzdHJvbmcpIHBlcnNvbmFsDQpwcmVmZXJlbmNlOiBpZiB0aGUgZGVmYXVsdCBzeW50YXggaXMgbm90IHRvIHlvdXIgbGlraW5nIHlvdSBjYW4gZGVmaW5lDQp5b3VyIG93biBieSBlZGl0aW5nIHRoZSB0ZXh0IGJhc2VkIGFzY2lpZG9jKDEpIGNvbmZpZ3VyYXRpb24gZmlsZXMuDQpZb3UgY2FuIGFsc28gY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gdHJhbnNsYXRlIEFzY2lpRG9jDQpkb2N1bWVudHMgdG8gYWxtb3N0IGFueSBTR01ML1hNTCBtYXJrdXAuDQoNCmFzY2lpZG9jKDEpIGNvbWVzIHdpdGggYSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWxlcyB0byB0cmFuc2xhdGUNCkFzY2lpRG9jIGFydGljbGVzLCBib29rcyBhbmQgbWFuIHBhZ2VzIHRvIEhUTUwgb3IgRG9jQm9vayBiYWNrZW5kDQpmb3JtYXRzLg0KDQouTXkgQXNjaWlEb2MgSXRjaA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KRG9jQm9vayBoYXMgZW1lcmdlZCBhcyB0aGUgZGUgZmFjdG8gc3RhbmRhcmQgT3BlbiBTb3VyY2UgZG9jdW1lbnRhdGlvbg0KZm9ybWF0LiBCdXQgRG9jQm9vayBpcyBhIGNvbXBsZXggbGFuZ3VhZ2UsIHRoZSBtYXJrdXAgaXMgZGlmZmljdWx0IHRvDQpyZWFkIGFuZCBldmVuIG1vcmUgZGlmZmljdWx0IHRvIHdyaXRlIGRpcmVjdGx5IC0tIEkgZm91bmQgSSB3YXMNCnNwZW5kaW5nIG1vcmUgdGltZSB0eXBpbmcgbWFya3VwIHRhZ3MsIGNvbnN1bHRpbmcgcmVmZXJlbmNlIG1hbnVhbHMNCmFuZCBmaXhpbmcgc3ludGF4IGVycm9ycywgdGhhbiBJIHdhcyB3cml0aW5nIHRoZSBkb2N1bWVudGF0aW9uLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQoNCltbWDZdXQ0KR2V0dGluZyBTdGFydGVkDQotLS0tLS0tLS0tLS0tLS0NCkluc3RhbGxpbmcgQXNjaWlEb2MNCn5+fn5+fn5+fn5+fn5+fn5+fn4NClNlZSB0aGUgYFJFQURNRWAgYW5kIGBJTlNUQUxMYCBmaWxlcyBmb3IgaW5zdGFsbCBwcmVyZXF1aXNpdGVzIGFuZA0KcHJvY2VkdXJlcy4gUGFja2FnZXJzIHRha2UgYSBsb29rIGF0IDw8WDM4LFBhY2thZ2VyIE5vdGVzPj4uDQoNCltbWDExXV0NCkV4YW1wbGUgQXNjaWlEb2MgRG9jdW1lbnRzDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KVGhlIGJlc3Qgd2F5IHRvIHF1aWNrbHkgZ2V0IGEgZmVlbCBmb3IgQXNjaWlEb2MgaXMgdG8gdmlldyB0aGUNCkFzY2lpRG9jIHdlYiBzaXRlIGFuZC9vciBkaXN0cmlidXRlZCBleGFtcGxlczoNCg0KLSBUYWtlIGEgbG9vayBhdCB0aGUgbGlua2VkIGV4YW1wbGVzIG9uIHRoZSBBc2NpaURvYyB3ZWIgc2l0ZSBob21lDQogIHBhZ2Uge3dlYnNpdGV9LiAgUHJlc3MgdGhlICdQYWdlIFNvdXJjZScgc2lkZWJhciBtZW51IGl0ZW0gdG8gdmlldw0KICBjb3JyZXNwb25kaW5nIEFzY2lpRG9jIHNvdXJjZS4NCi0gUmVhZCB0aGUgYCoudHh0YCBzb3VyY2UgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBgLi9kb2NgIGRpcmVjdG9yeQ0KICBhbG9uZyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIEhUTUwgYW5kIERvY0Jvb2sgWE1MIGZpbGVzLg0KDQoNCkFzY2lpRG9jIERvY3VtZW50IFR5cGVzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIEFzY2lpRG9jIGRvY3VtZW50czogYXJ0aWNsZSwgYm9vayBhbmQNCm1hbnBhZ2UuIEFsbCBkb2N1bWVudCB0eXBlcyBzaGFyZSB0aGUgc2FtZSBBc2NpaURvYyBmb3JtYXQgd2l0aCBzb21lDQptaW5vciB2YXJpYXRpb25zLiBJZiB5b3UgYXJlIGZhbWlsaWFyIHdpdGggRG9jQm9vayB5b3Ugd2lsbCBoYXZlDQpub3RpY2VkIHRoYXQgQXNjaWlEb2MgZG9jdW1lbnQgdHlwZXMgY29ycmVzcG9uZCB0byB0aGUgc2FtZS1uYW1lZA0KRG9jQm9vayBkb2N1bWVudCB0eXBlcy4NCg0KVXNlIHRoZSBhc2NpaWRvYygxKSBgLWRgIChgLS1kb2N0eXBlYCkgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIEFzY2lpRG9jDQpkb2N1bWVudCB0eXBlIC0tIHRoZSBkZWZhdWx0IGRvY3VtZW50IHR5cGUgaXMgJ2FydGljbGUnLg0KDQpCeSBjb252ZW50aW9uIHRoZSBgLnR4dGAgZmlsZSBleHRlbnNpb24gaXMgdXNlZCBmb3IgQXNjaWlEb2MgZG9jdW1lbnQNCnNvdXJjZSBmaWxlcy4NCg0KYXJ0aWNsZQ0Kfn5+fn5+fg0KVXNlZCBmb3Igc2hvcnQgZG9jdW1lbnRzLCBhcnRpY2xlcyBhbmQgZ2VuZXJhbCBkb2N1bWVudGF0aW9uLiAgU2VlIHRoZQ0KQXNjaWlEb2MgZGlzdHJpYnV0aW9uIGAuL2RvYy9hcnRpY2xlLnR4dGAgZXhhbXBsZS4NCg0KQXNjaWlEb2MgZGVmaW5lcyBzdGFuZGFyZCBEb2NCb29rIGFydGljbGUgZnJvbnRtYXR0ZXIgYW5kIGJhY2ttYXR0ZXINCjw8WDkzLHNlY3Rpb24gbWFya3VwIHRlbXBsYXRlcz4+IChhcHBlbmRpeCwgYWJzdHJhY3QsIGJpYmxpb2dyYXBoeSwNCmdsb3NzYXJ5LCBpbmRleCkuDQoNCmJvb2sNCn5+fn4NCkJvb2tzIHNoYXJlIHRoZSBzYW1lIGZvcm1hdCBhcyBhcnRpY2xlcywgd2l0aCB0aGUgZm9sbG93aW5nDQpkaWZmZXJlbmNlczoNCg0KLSBUaGUgcGFydCB0aXRsZXMgaW4gbXVsdGktcGFydCBib29rcyBhcmUgPDxYMTcsdG9wIGxldmVsIHRpdGxlcz4+DQogIChzYW1lIGxldmVsIGFzIGJvb2sgdGl0bGUpLg0KLSBTb21lIHNlY3Rpb25zIGFyZSBib29rIHNwZWNpZmljIGUuZy4gcHJlZmFjZSBhbmQgY29sb3Bob24uDQoNCkJvb2sgZG9jdW1lbnRzIHdpbGwgbm9ybWFsbHkgYmUgdXNlZCB0byBwcm9kdWNlIERvY0Jvb2sgb3V0cHV0IHNpbmNlDQpEb2NCb29rIHByb2Nlc3NvcnMgY2FuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgZm9vdG5vdGVzLCB0YWJsZSBvZg0KY29udGVudHMsIGxpc3Qgb2YgdGFibGVzLCBsaXN0IG9mIGZpZ3VyZXMsIGxpc3Qgb2YgZXhhbXBsZXMgYW5kDQppbmRleGVzLg0KDQpBc2NpaURvYyBkZWZpbmVzIHN0YW5kYXJkIERvY0Jvb2sgYm9vayBmcm9udG1hdHRlciBhbmQgYmFja21hdHRlcg0KPDxYOTMsc2VjdGlvbiBtYXJrdXAgdGVtcGxhdGVzPj4gKGFwcGVuZGl4LCBkZWRpY2F0aW9uLCBwcmVmYWNlLA0KYmlibGlvZ3JhcGh5LCBnbG9zc2FyeSwgaW5kZXgsIGNvbG9waG9uKS4NCg0KLkV4YW1wbGUgYm9vayBkb2N1bWVudHMNCkJvb2s6Og0KICBUaGUgYC4vZG9jL2Jvb2sudHh0YCBmaWxlIGluIHRoZSBBc2NpaURvYyBkaXN0cmlidXRpb24uDQoNCk11bHRpLXBhcnQgYm9vazo6DQogIFRoZSBgLi9kb2MvYm9vay1tdWx0aS50eHRgIGZpbGUgaW4gdGhlIEFzY2lpRG9jIGRpc3RyaWJ1dGlvbi4NCg0KbWFucGFnZQ0Kfn5+fn5+fg0KVXNlZCB0byBnZW5lcmF0ZSByb2ZmIGZvcm1hdCBVTklYIG1hbnVhbCBwYWdlcy4gIEFzY2lpRG9jIG1hbnBhZ2UNCmRvY3VtZW50cyBvYnNlcnZlIHNwZWNpYWwgaGVhZGVyIHRpdGxlIGFuZCBzZWN0aW9uIG5hbWluZyBjb252ZW50aW9ucw0KLS0gc2VlIHRoZSA8PFgxLE1hbnBhZ2UgRG9jdW1lbnRzPj4gc2VjdGlvbiBmb3IgZGV0YWlscy4NCg0KQXNjaWlEb2MgZGVmaW5lcyB0aGUgJ3N5bm9wc2lzJyA8PFg5MyxzZWN0aW9uIG1hcmt1cCB0ZW1wbGF0ZT4+IHRvDQpnZW5lcmF0ZSB0aGUgRG9jQm9vayBgcmVmc3lub3BzaXNkaXZgIHNlY3Rpb24uDQoNClNlZSBhbHNvIHRoZSBhc2NpaWRvYygxKSBtYW4gcGFnZSBzb3VyY2UgKGAuL2RvYy9hc2NpaWRvYy4xLnR4dGApIGZyb20NCnRoZSBBc2NpaURvYyBkaXN0cmlidXRpb24uDQoNCg0KW1tYNV1dDQpBc2NpaURvYyBCYWNrZW5kcw0KLS0tLS0tLS0tLS0tLS0tLS0NClRoZSBhc2NpaWRvYygxKSBjb21tYW5kIHRyYW5zbGF0ZXMgYW4gQXNjaWlEb2MgZm9ybWF0dGVkIGZpbGUgdG8gdGhlDQpiYWNrZW5kIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlIGAtYmAgKGAtLWJhY2tlbmRgKSBjb21tYW5kLWxpbmUNCm9wdGlvbi4gYXNjaWlkb2MoMSkgaXRzZWxmIGhhcyBsaXR0bGUgaW50cmluc2ljIGtub3dsZWRnZSBvZiBiYWNrZW5kDQpmb3JtYXRzLCBhbGwgdHJhbnNsYXRpb24gcnVsZXMgYXJlIGNvbnRhaW5lZCBpbiBjdXN0b21pemFibGUgY2FzY2FkaW5nDQpjb25maWd1cmF0aW9uIGZpbGVzLiBCYWNrZW5kIHNwZWNpZmljIGF0dHJpYnV0ZXMgYXJlIGxpc3RlZCBpbiB0aGUNCjw8WDg4LEJhY2tlbmQgQXR0cmlidXRlcz4+IHNlY3Rpb24uDQoNCmRvY2Jvb2s0NTo6DQogIE91dHB1dHMgRG9jQm9vayBYTUwgNC41IG1hcmt1cC4NCg0KaHRtbDQ6Og0KICBUaGlzIGJhY2tlbmQgZ2VuZXJhdGVzIHBsYWluIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwgbWFya3VwLg0KDQp4aHRtbDExOjoNCiAgVGhpcyBiYWNrZW5kIGdlbmVyYXRlcyBYSFRNTCAxLjEgbWFya3VwIHN0eWxlZCB3aXRoIENTUzIuIE91dHB1dA0KICBmaWxlcyBoYXZlIGFuIGAuaHRtbGAgZXh0ZW5zaW9uLg0KDQpodG1sNTo6DQogIFRoaXMgYmFja2VuZCBnZW5lcmF0ZXMgSFRNTCA1IG1hcmt1cCwgYXBhcnQgZnJvbSB0aGUgaW5jbHVzaW9uIG9mDQogIDw8WDk4LGF1ZGlvIGFuZCB2aWRlbyBibG9jayBtYWNyb3M+PiBpdCBpcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsIHRvDQogIHRoZSAneGh0bWwxMScgYmFja2VuZC4NCg0Kc2xpZHk6Og0KICBVc2UgdGhpcyBiYWNrZW5kIHRvIGdlbmVyYXRlIHNlbGYtY29udGFpbmVkDQogIGh0dHA6Ly93d3cudzMub3JnL1RhbGtzL1Rvb2xzL1NsaWR5Mi9bU2xpZHldIEhUTUwgc2xpZGVzaG93cyBmb3INCiAgeW91ciB3ZWIgYnJvd3NlciBmcm9tIEFzY2lpRG9jIGRvY3VtZW50cy4gVGhlIFNsaWR5IGJhY2tlbmQgaXMNCiAgZG9jdW1lbnRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIGBkb2Mvc2xpZHkudHh0YCBmaWxlIGFuZA0KICB7d2Vic2l0ZX1zbGlkeS5odG1sW29ubGluZV0uDQoNCndvcmRwcmVzczo6DQogIEEgbWlub3IgdmFyaWFudCBvZiB0aGUgJ2h0bWw0JyBiYWNrZW5kIHRvIHN1cHBvcnQNCiAgaHR0cDovL3NyYWNraGFtLndvcmRwcmVzcy5jb20vYmxvZ3Bvc3QxL1tibG9ncG9zdF0uDQoNCmxhdGV4OjoNCiAgRXhwZXJpbWVudGFsIExhVGVYIGJhY2tlbmQuDQoNCkJhY2tlbmQgQWxpYXNlcw0Kfn5+fn5+fn5+fn5+fn5+DQpCYWNrZW5kIGFsaWFzZXMgYXJlIGFsdGVybmF0aXZlIG5hbWVzIGZvciBBc2NpaURvYyBiYWNrZW5kcy4gIEFzY2lpRG9jDQpjb21lcyB3aXRoIHR3byBiYWNrZW5kIGFsaWFzZXM6ICdodG1sJyAoYWxpYXNlZCB0byAneGh0bWwxMScpIGFuZA0KJ2RvY2Jvb2snIChhbGlhc2VkIHRvICdkb2Nib29rNDUnKS4NCg0KWW91IGNhbiBhc3NpZ24gKG9yIHJlYXNzaWduKSBiYWNrZW5kIGFsaWFzZXMgYnkgc2V0dGluZyBhbiBBc2NpaURvYw0KYXR0cmlidXRlIG5hbWVkIGxpa2UgYGJhY2tlbmQtYWxpYXMtPGFsaWFzPmAgdG8gYW4gQXNjaWlEb2MgYmFja2VuZA0KbmFtZS4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgYmFja2VuZCBhbGlhcyBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMNCmFwcGVhciBpbiB0aGUgYFthdHRyaWJ1dGVzXWAgc2VjdGlvbiBvZiB0aGUgZ2xvYmFsIGBhc2NpaWRvYy5jb25mYA0KY29uZmlndXJhdGlvbiBmaWxlOg0KDQogIGJhY2tlbmQtYWxpYXMtaHRtbD14aHRtbDExDQogIGJhY2tlbmQtYWxpYXMtZG9jYm9vaz1kb2Nib29rNDUNCg0KW1tYMTAwXV0NCkJhY2tlbmQgUGx1Z2lucw0Kfn5+fn5+fn5+fn5+fn5+DQpUaGUgYXNjaWlkb2MoMSkgYC0tYmFja2VuZGAgb3B0aW9uIGlzIGFsc28gdXNlZCB0byBpbnN0YWxsIGFuZCBtYW5hZ2UNCmJhY2tlbmQgPDxYMTAxLHBsdWdpbnM+Pi4NCg0KLSBBIGJhY2tlbmQgcGx1Z2luIGlzIHVzZWQganVzdCBsaWtlIHRoZSBidWlsdC1pbiBiYWNrZW5kcy4NCi0gQmFja2VuZCBwbHVnaW5zIDw8WDI3LHRha2UgcHJlY2VkZW5jZT4+IG92ZXIgYnVpbHQtaW4gYmFja2VuZHMgd2l0aA0KICB0aGUgc2FtZSBuYW1lLg0KLSBZb3UgY2FuIHVzZSB0aGUgYHthc2NpaWRvYy1jb25mZGlyfWAgPDxYNjAsIGludHJpbnNpYyBhdHRyaWJ1dGU+PiB0bw0KICByZWZlciB0byB0aGUgYnVpbHQtaW4gYmFja2VuZCBjb25maWd1cmF0aW9uIGZpbGUgbG9jYXRpb24gZnJvbQ0KICBiYWNrZW5kIHBsdWdpbiBjb25maWd1cmF0aW9uIGZpbGVzLg0KLSBZb3UgY2FuIHVzZSB0aGUgYHtiYWNrZW5kLWNvbmZkaXJ9YCA8PFg2MCwgaW50cmluc2ljIGF0dHJpYnV0ZT4+IHRvDQogIHJlZmVyIHRvIHRoZSBiYWNrZW5kIHBsdWdpbiBjb25maWd1cmF0aW9uIGZpbGUgbG9jYXRpb24uDQotIEJ5IGRlZmF1bHQgYmFja2VuZHMgcGx1Z2lucyBhcmUgaW5zdGFsbGVkIGluDQogIGAkSE9NRS8uYXNjaWlkb2MvYmFja2VuZHMvPGJhY2tlbmQ+YCB3aGVyZSBgPGJhY2tlbmQ+YCBpcyB0aGUNCiAgYmFja2VuZCBuYW1lLg0KDQoNCkRvY0Jvb2sNCi0tLS0tLS0NCkFzY2lpRG9jIGdlbmVyYXRlcyAnYXJ0aWNsZScsICdib29rJyBhbmQgJ3JlZmVudHJ5Jw0KaHR0cDovL3d3dy5kb2Nib29rLm9yZy9bRG9jQm9va10gZG9jdW1lbnRzIChjb3JyZXNwb25kaW5nIHRvIHRoZQ0KQXNjaWlEb2MgJ2FydGljbGUnLCAnYm9vaycgYW5kICdtYW5wYWdlJyBkb2N1bWVudCB0eXBlcykuDQoNCk1vc3QgTGludXggZGlzdHJpYnV0aW9ucyBjb21lIHdpdGggY29udmVyc2lvbiB0b29scyAoY29sbGVjdGl2ZWx5DQpjYWxsZWQgYSB0b29sY2hhaW4pIGZvciA8PFgxMixjb252ZXJ0aW5nIERvY0Jvb2sgZmlsZXM+PiB0bw0KcHJlc2VudGF0aW9uIGZvcm1hdHMgc3VjaCBhcyBQb3N0c2NyaXB0LCBIVE1MLCBQREYsIEVQVUIsIERWSSwNClBvc3RTY3JpcHQsIExhVGVYLCByb2ZmICh0aGUgbmF0aXZlIG1hbiBwYWdlIGZvcm1hdCksIEhUTUxIZWxwLA0KSmF2YUhlbHAgYW5kIHRleHQuICBUaGVyZSBhcmUgYWxzbyBwcm9ncmFtcyB0aGF0IGFsbG93IHlvdSB0byB2aWV3DQpEb2NCb29rIGZpbGVzIGRpcmVjdGx5LCBmb3IgZXhhbXBsZSBodHRwOi8vbGl2ZS5nbm9tZS5vcmcvWWVscFtZZWxwXQ0KKHRoZSBHTk9NRSBoZWxwIHZpZXdlcikuDQoNCltbWDEyXV0NCkNvbnZlcnRpbmcgRG9jQm9vayB0byBvdGhlciBmaWxlIGZvcm1hdHMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCkRvY0Jvb2sgZmlsZXMgYXJlIHZhbGlkYXRlZCwgcGFyc2VkIGFuZCB0cmFuc2xhdGVkIHZhcmlvdXMNCnByZXNlbnRhdGlvbiBmaWxlIGZvcm1hdHMgdXNpbmcgYSBjb21iaW5hdGlvbiBvZiBhcHBsaWNhdGlvbnMNCmNvbGxlY3RpdmVseSBjYWxsZWQgYSBEb2NCb29rICd0b29sIGNoYWluJy4gVGhlIGZ1bmN0aW9uIG9mIGEgdG9vbA0KY2hhaW4gaXMgdG8gcmVhZCB0aGUgRG9jQm9vayBtYXJrdXAgKHByb2R1Y2VkIGJ5IEFzY2lpRG9jKSBhbmQNCnRyYW5zZm9ybSBpdCB0byBhIHByZXNlbnRhdGlvbiBmb3JtYXQgKGZvciBleGFtcGxlIEhUTUwsIFBERiwgSFRNTA0KSGVscCwgRVBVQiwgRFZJLCBQb3N0U2NyaXB0LCBMYVRlWCkuDQoNCkEgd2lkZSByYW5nZSBvZiB1c2VyIG91dHB1dCBmb3JtYXQgcmVxdWlyZW1lbnRzIGNvdXBsZWQgd2l0aCBhIGNob2ljZQ0Kb2YgYXZhaWxhYmxlIHRvb2xzIGFuZCBzdHlsZXNoZWV0cyByZXN1bHRzIGluIG1hbnkgdmFsaWQgdG9vbCBjaGFpbg0KY29tYmluYXRpb25zLg0KDQpbW1g0M11dDQphMnggVG9vbGNoYWluIFdyYXBwZXINCn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KT25lIG9mIHRoZSBiaWdnZXN0IGh1cmRsZXMgZm9yIG5ldyB1c2VycyBpcyBpbnN0YWxsaW5nLCBjb25maWd1cmluZw0KYW5kIHVzaW5nIGEgRG9jQm9vayBYTUwgdG9vbGNoYWluLiBgYTJ4KDEpYCBjYW4gaGVscCAtLSBpdCdzIGENCnRvb2xjaGFpbiB3cmFwcGVyIGNvbW1hbmQgdGhhdCB3aWxsIGdlbmVyYXRlIFhIVE1MIChjaHVua2VkIGFuZA0KdW5jaHVua2VkKSwgUERGLCBFUFVCLCBEVkksIFBTLCBMYVRlWCwgbWFuIHBhZ2UsIEhUTUwgSGVscCBhbmQgdGV4dA0KZmlsZSBvdXRwdXRzIGZyb20gYW4gQXNjaWlEb2MgdGV4dCBmaWxlLiAgYGEyeCgxKWAgZG9lcyBhbGwgdGhlIGdydW50DQp3b3JrIGFzc29jaWF0ZWQgd2l0aCBnZW5lcmF0aW5nIGFuZCBzZXF1ZW5jaW5nIHRoZSB0b29sY2hhaW4gY29tbWFuZHMNCmFuZCBtYW5hZ2luZyBpbnRlcm1lZGlhdGUgYW5kIG91dHB1dCBmaWxlcy4gIGBhMngoMSlgIGFsc28gb3B0aW9uYWxseQ0KZGVwbG95cyBhZG1vbml0aW9uIGFuZCBuYXZpZ2F0aW9uIGljb25zIGFuZCBhIENTUyBzdHlsZXNoZWV0LiBTZWUgdGhlDQpgYTJ4KDEpYCBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiBJbiBhZGRpdGlvbiB0byBgYXNjaWlkb2MoMSlgIHlvdQ0KYWxzbyBuZWVkIDw8WDQwLHhzbHRwcm9jKDEpPj4sIDw8WDEzLERvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzPj4gYW5kDQpvcHRpb25hbGx5OiA8PFgzMSxkYmxhdGV4Pj4gb3IgPDxYMTQsRk9QPj4gKHRvIGdlbmVyYXRlIFBERik7DQpgdzNtKDEpYCBvciBgbHlueCgxKWAgKHRvIGdlbmVyYXRlIHRleHQpLg0KDQpUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGdlbmVyYXRlIGBkb2Mvc291cmNlLWhpZ2hsaWdodC1maWx0ZXIucGRmYCBmcm9tDQp0aGUgQXNjaWlEb2MgYGRvYy9zb3VyY2UtaGlnaGxpZ2h0LWZpbHRlci50eHRgIHNvdXJjZSBmaWxlLiBUaGUgZmlyc3QNCmV4YW1wbGUgdXNlcyBgZGJsYXRleCgxKWAgKHRoZSBkZWZhdWx0IFBERiBnZW5lcmF0b3IpIHRoZSBzZWNvbmQNCmV4YW1wbGUgZm9yY2VzIEZPUCB0byBiZSB1c2VkOg0KDQogICQgYTJ4IC1mIHBkZiBkb2Mvc291cmNlLWhpZ2hsaWdodC1maWx0ZXIudHh0DQogICQgYTJ4IC1mIHBkZiAtLWZvcCBkb2Mvc291cmNlLWhpZ2hsaWdodC1maWx0ZXIudHh0DQoNClNlZSB0aGUgYGEyeCgxKWAgbWFuIHBhZ2UgZm9yIGRldGFpbHMuDQoNClRJUDogVXNlIHRoZSBgLS12ZXJib3NlYCBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIHZpZXcgZXhlY3V0ZWQNCnRvb2xjaGFpbiBjb21tYW5kcy4NCg0KSFRNTCBnZW5lcmF0aW9uDQp+fn5+fn5+fn5+fn5+fn4NCkFzY2lpRG9jIHByb2R1Y2VzIG5pY2VseSBzdHlsZWQgSFRNTCBkaXJlY3RseSB3aXRob3V0IHJlcXVpcmluZyBhDQpEb2NCb29rIHRvb2xjaGFpbiBidXQgdGhlcmUgYXJlIGFsc28gYWR2YW50YWdlcyBpbiBnb2luZyB0aGUgRG9jQm9vaw0Kcm91dGU6DQoNCi0gSFRNTCBmcm9tIERvY0Jvb2sgY2FuIG9wdGlvbmFsbHkgaW5jbHVkZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZA0KICBpbmRleGVzLCB0YWJsZXMgb2YgY29udGVudHMsIGZvb3Rub3RlcywgbGlzdHMgb2YgZmlndXJlcyBhbmQgdGFibGVzLg0KLSBEb2NCb29rIHRvb2xjaGFpbnMgY2FuIGFsc28gKG9wdGlvbmFsbHkpIGdlbmVyYXRlIHNlcGFyYXRlIChjaHVua2VkKQ0KICBsaW5rZWQgSFRNTCBwYWdlcyBmb3IgZWFjaCBkb2N1bWVudCBzZWN0aW9uLg0KLSBUb29sY2hhaW4gcHJvY2Vzc2luZyBwZXJmb3JtcyBsaW5rIGFuZCBkb2N1bWVudCB2YWxpZGl0eSBjaGVja3MuDQotIElmIHRoZSBEb2NCb29rICdsYW5nJyBhdHRyaWJ1dGUgaXMgc2V0IHRoZW4gdGhpbmdzIGxpa2UgdGFibGUgb2YNCiAgY29udGVudHMsIGZpZ3VyZSBhbmQgdGFibGUgY2FwdGlvbnMgYW5kIGFkbW9uaXRpb24gY2FwdGlvbnMgd2lsbCBiZQ0KICBvdXRwdXQgaW4gdGhlIHNwZWNpZmllZCBsYW5ndWFnZSAoc2V0dGluZyB0aGUgQXNjaWlEb2MgJ2xhbmcnDQogIGF0dHJpYnV0ZSBzZXRzIHRoZSBEb2NCb29rICdsYW5nJyBhdHRyaWJ1dGUpLg0KDQpPbiB0aGUgb3RoZXIgaGFuZCwgSFRNTCBvdXRwdXQgZGlyZWN0bHkgZnJvbSBBc2NpaURvYyBpcyBtdWNoIGZhc3RlciwNCmlzIGVhc2lseSBjdXN0b21pemVkIGFuZCBjYW4gYmUgdXNlZCBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vDQpzdWl0YWJsZSBEb2NCb29rIHRvb2xjaGFpbiAoZm9yIGV4YW1wbGUsIHNlZSB0aGUge3dlYnNpdGV9W0FzY2lpRG9jDQp3ZWJzaXRlXSkuDQoNClBERiBnZW5lcmF0aW9uDQp+fn5+fn5+fn5+fn5+fg0KVGhlcmUgYXJlIHR3byBjb21tb25seSB1c2VkIHRvb2xzIHRvIGdlbmVyYXRlIFBERnMgZnJvbSBEb2NCb29rLA0KPDxYMzEsZGJsYXRleD4+IGFuZCA8PFgxNCxGT1A+Pi4NCg0KLmRibGF0ZXggb3IgRk9QPw0KLSAnZGJsYXRleCcgaXMgZWFzaWVyIHRvIGluc3RhbGwsIHRoZXJlJ3MgemVybyBjb25maWd1cmF0aW9uDQogIHJlcXVpcmVkIGFuZCBubyBKYXZhIFZNIHRvIGluc3RhbGwgLS0gaXQganVzdCB3b3JrcyBvdXQgb2YgdGhlIGJveC4NCi0gJ2RibGF0ZXgnIHNvdXJjZSBjb2RlIGhpZ2hsaWdodGluZyBhbmQgbnVtYmVyaW5nIGlzIHN1cGVyYi4NCi0gJ2RibGF0ZXgnIGlzIGVhc2llciB0byB1c2UgYXMgaXQgY29udmVydHMgRG9jQm9vayBkaXJlY3RseSB0byBQREYNCiAgd2hlcmVhcyBiZWZvcmUgdXNpbmcgJ0ZPUCcgeW91IGhhdmUgdG8gY29udmVydCBEb2NCb29rIHRvIFhNTC1GTw0KICB1c2luZyA8PFgxMyxEb2NCb29rIFhTTCBTdHlsZXNoZWV0cz4+Lg0KLSAnRk9QJyBpcyBtb3JlIGZlYXR1cmUgY29tcGxldGUgKGZvciBleGFtcGxlLCBjYWxsb3V0cyBhcmUgcHJvY2Vzc2VkDQogIGluc2lkZSBsaXRlcmFsIGxheW91dHMpIGFuZCBhcmd1YWJseSBwcm9kdWNlcyBuaWNlciBsb29raW5nIG91dHB1dC4NCg0KSFRNTCBIZWxwIGdlbmVyYXRpb24NCn5+fn5+fn5+fn5+fn5+fn5+fn5+DQouIENvbnZlcnQgRG9jQm9vayBYTUwgZG9jdW1lbnRzIHRvIEhUTUwgSGVscCBjb21waWxlciBzb3VyY2UgZmlsZXMNCiAgdXNpbmcgPDxYMTMsRG9jQm9vayBYU0wgU3R5bGVzaGVldHM+PiBhbmQgPDxYNDAseHNsdHByb2MoMSk+Pi4NCi4gQ29udmVydCB0aGUgSFRNTCBIZWxwIHNvdXJjZSAoYC5oaHBgIGFuZCBgLmh0bWxgKSBmaWxlcyB0byBIVE1MIEhlbHANCiAgKGAuY2htYCkgZmlsZXMgdXNpbmcgdGhlIDw8WDY3LE1pY3Jvc29mdCBIVE1MIEhlbHAgQ29tcGlsZXI+Pi4NCg0KVG9vbGNoYWluIGNvbXBvbmVudHMgc3VtbWFyeQ0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KQXNjaWlEb2M6Og0KICAgIENvbnZlcnRzIEFzY2lpRG9jIChgLnR4dGApIGZpbGVzIHRvIERvY0Jvb2sgWE1MIChgLnhtbGApIGZpbGVzLg0KDQpbW1gxM11daHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3hzbC9bRG9jQm9vayBYU0wgU3R5bGVzaGVldHNdOjoNCiAgVGhlc2UgYXJlIGEgc2V0IG9mIFhTTCBzdHlsZXNoZWV0cyBjb250YWluaW5nIHJ1bGVzIGZvciBjb252ZXJ0aW5nDQogIERvY0Jvb2sgWE1MIGRvY3VtZW50cyB0byBIVE1MLCBYU0wtRk8sIG1hbnBhZ2UgYW5kIEhUTUwgSGVscCBmaWxlcy4NCiAgVGhlIHN0eWxlc2hlZXRzIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gWE1MIHBhcnNlciBzdWNoIGFzDQogIDw8WDQwLHhzbHRwcm9jKDEpPj4uDQoNCltbWDQwXV1odHRwOi8vd3d3LnhtbHNvZnQub3JnW3hzbHRwcm9jXTo6DQogIEFuIFhNTCBwYXJzZXIgZm9yIGFwcGx5aW5nIFhTTFQgc3R5bGVzaGVldHMgKGluIG91ciBjYXNlIHRoZQ0KICA8PFgxMyxEb2NCb29rIFhTTCBTdHlsZXNoZWV0cz4+KSB0byBYTUwgZG9jdW1lbnRzLg0KDQpbW1gzMV1daHR0cDovL2RibGF0ZXguc291cmNlZm9yZ2UubmV0L1tkYmxhdGV4XTo6DQogIEdlbmVyYXRlcyBQREYsIERWSSwgUG9zdFNjcmlwdCBhbmQgTGFUZVggZm9ybWF0cyBkaXJlY3RseSBmcm9tDQogIERvY0Jvb2sgc291cmNlIHZpYSB0aGUgaW50ZXJtZWRpYXRlIExhVGVYIHR5cGVzZXR0aW5nIGxhbmd1YWdlIC0tDQogIHVzZXMgPDxYMTMsRG9jQm9vayBYU0wgU3R5bGVzaGVldHM+PiwgPDxYNDAseHNsdHByb2MoMSk+PiBhbmQNCiAgYGxhdGV4KDEpYC4NCg0KW1tYMTRdXWh0dHA6Ly94bWwuYXBhY2hlLm9yZy9mb3AvW0ZPUF06Og0KICBUaGUgQXBhY2hlIEZvcm1hdHRpbmcgT2JqZWN0cyBQcm9jZXNzb3IgY29udmVydHMgWFNMLUZPIChgLmZvYCkNCiAgZmlsZXMgdG8gUERGIGZpbGVzLiAgVGhlIFhTTC1GTyBmaWxlcyBhcmUgZ2VuZXJhdGVkIGZyb20gRG9jQm9vaw0KICBzb3VyY2UgZmlsZXMgdXNpbmcgPDxYMTMsRG9jQm9vayBYU0wgU3R5bGVzaGVldHM+PiBhbmQNCiAgPDxYNDAseHNsdHByb2MoMSk+Pi4NCg0KW1tYNjddXU1pY3Jvc29mdCBIZWxwIENvbXBpbGVyOjoNCiAgVGhlIE1pY3Jvc29mdCBIVE1MIEhlbHAgQ29tcGlsZXIgKGBoaGMuZXhlYCkgaXMgYSBjb21tYW5kLWxpbmUgdG9vbA0KICB0aGF0IGNvbnZlcnRzIEhUTUwgSGVscCBzb3VyY2UgZmlsZXMgdG8gYSBzaW5nbGUgSFRNTCBIZWxwIChgLmNobWApDQogIGZpbGUuIEl0IHJ1bnMgb24gTVMgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNhbiBiZSBkb3dubG9hZGVkIGZyb20NCiAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tLg0KDQpBc2NpaURvYyBkYmxhdGV4IGNvbmZpZ3VyYXRpb24gZmlsZXMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KVGhlIEFzY2lpRG9jIGRpc3RyaWJ1dGlvbiBgLi9kYmxhdGV4YCBkaXJlY3RvcnkgY29udGFpbnMNCmBhc2NpaWRvYy1kYmxhdGV4LnhzbGAgKGN1c3RvbWl6ZWQgWFNMIHBhcmFtZXRlciBzZXR0aW5ncykgYW5kDQpgYXNjaWlkb2MtZGJsYXRleC5zdHlgIChjdXN0b21pemVkIExhVGVYIHNldHRpbmdzKS4gVGhlc2UgYXJlIGV4YW1wbGVzDQpvZiBvcHRpb25hbCA8PFgzMSxkYmxhdGV4Pj4gb3V0cHV0IGN1c3RvbWl6YXRpb24gYW5kIGFyZSB1c2VkIGJ5DQo8PFg0MyxhMngoMSk+Pi4NCg0KQXNjaWlEb2MgRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgZHJpdmVycw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KWW91IHdpbGwgaGF2ZSBub3RpY2VkIHRoYXQgdGhlIGRpc3RyaWJ1dGVkIEhUTUwgYW5kIEhUTUwgSGVscA0KZG9jdW1lbnRhdGlvbiBmaWxlcyAoZm9yIGV4YW1wbGUgYC4vZG9jL2FzY2lpZG9jLmh0bWxgKSBhcmUgbm90IHRoZQ0KcGxhaW4gb3V0cHV0cyBwcm9kdWNlZCB1c2luZyB0aGUgZGVmYXVsdCAnRG9jQm9vayBYU0wgU3R5bGVzaGVldHMnDQpjb25maWd1cmF0aW9uLiAgVGhpcyBpcyBiZWNhdXNlIHRoZXkgaGF2ZSBiZWVuIHByb2Nlc3NlZCB1c2luZw0KY3VzdG9taXplZCBEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBhbG9uZyB3aXRoIChpbiB0aGUgY2FzZSBvZiBIVE1MDQpvdXRwdXRzKSB0aGUgY3VzdG9tIGAuL3N0eWxlc2hlZXRzL2RvY2Jvb2steHNsLmNzc2AgQ1NTIHN0eWxlc2hlZXQuDQoNCllvdSdsbCBmaW5kIHRoZSBjdXN0b21pemVkIERvY0Jvb2sgWFNMIGRyaXZlcnMgYWxvbmcgd2l0aCBhZGRpdGlvbmFsDQpkb2N1bWVudGF0aW9uIGluIHRoZSBkaXN0cmlidXRpb24gYC4vZG9jYm9vay14c2xgIGRpcmVjdG9yeS4gVGhlDQpleGFtcGxlcyB0aGF0IGZvbGxvdyBhcmUgZXhlY3V0ZWQgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIGRvY3VtZW50YXRpb24NCihgLi9kb2NgKSBkaXJlY3RvcnkuIFRoZXNlIGRyaXZlcnMgYXJlIGFsc28gdXNlZCBieSA8PFg0MyxhMngoMSk+Pi4NCg0KYGNvbW1vbi54c2xgOjoNCiAgICBTaGFyZWQgZHJpdmVyIHBhcmFtZXRlcnMuICBUaGlzIGZpbGUgaXMgbm90IHVzZWQgZGlyZWN0bHkgYnV0IGlzDQogICAgaW5jbHVkZWQgaW4gYWxsIHRoZSBmb2xsb3dpbmcgZHJpdmVycy4NCg0KYGNodW5rZWQueHNsYDo6DQogICAgR2VuZXJhdGUgY2h1bmtlZCBYSFRNTCAoc2VwYXJhdGUgSFRNTCBwYWdlcyBmb3IgZWFjaCBkb2N1bWVudA0KICAgIHNlY3Rpb24pIGluIHRoZSBgLi9kb2MvY2h1bmtlZGAgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZToNCg0KICAgICQgcHl0aG9uIC4uL2FzY2lpZG9jLnB5IC1iIGRvY2Jvb2sgYXNjaWlkb2MudHh0DQogICAgJCB4c2x0cHJvYyAtLW5vbmV0IC4uL2RvY2Jvb2steHNsL2NodW5rZWQueHNsIGFzY2lpZG9jLnhtbA0KDQpgZXB1Yi54c2xgOjoNCiAgICBVc2VkIGJ5IDw8WDQzLGEyeCgxKT4+IHRvIGdlbmVyYXRlIEVQVUIgZm9ybWF0dGVkIGRvY3VtZW50cy4NCg0KYGZvLnhzbGA6Og0KICAgIEdlbmVyYXRlIFhTTCBGb3JtYXR0aW5nIE9iamVjdCAoYC5mb2ApIGZpbGVzIGZvciBzdWJzZXF1ZW50IFBERg0KICAgIGZpbGUgZ2VuZXJhdGlvbiB1c2luZyBGT1AuIEZvciBleGFtcGxlOg0KDQogICAgJCBweXRob24gLi4vYXNjaWlkb2MucHkgLWIgZG9jYm9vayBhcnRpY2xlLnR4dA0KICAgICQgeHNsdHByb2MgLS1ub25ldCAuLi9kb2Nib29rLXhzbC9mby54c2wgYXJ0aWNsZS54bWwgPiBhcnRpY2xlLmZvDQogICAgJCBmb3AgYXJ0aWNsZS5mbyBhcnRpY2xlLnBkZg0KDQpgaHRtbGhlbHAueHNsYDo6DQogICAgR2VuZXJhdGUgTWljcm9zb2Z0IEhUTUwgSGVscCBzb3VyY2UgZmlsZXMgZm9yIHRoZSBNUyBIVE1MIEhlbHANCiAgICBDb21waWxlciBpbiB0aGUgYC4vZG9jL2h0bWxoZWxwYCBkaXJlY3RvcnkuIFRoaXMgZXhhbXBsZSBpcyBydW4gb24NCiAgICBNUyBXaW5kb3dzIGZyb20gYSBDeWd3aW4gc2hlbGwgcHJvbXB0Og0KDQogICAgJCBweXRob24gLi4vYXNjaWlkb2MucHkgLWIgZG9jYm9vayBhc2NpaWRvYy50eHQNCiAgICAkIHhzbHRwcm9jIC0tbm9uZXQgLi4vZG9jYm9vay14c2wvaHRtbGhlbHAueHNsIGFzY2lpZG9jLnhtbA0KICAgICQgYzovUHJvZ3JhbVwgRmlsZXMvSFRNTFwgSGVscFwgV29ya3Nob3AvaGhjLmV4ZSBodG1saGVscC5oaHANCg0KYG1hbnBhZ2UueHNsYDo6DQogICAgR2VuZXJhdGUgYSBgcm9mZigxKWAgZm9ybWF0IFVOSVggbWFuIHBhZ2UgZnJvbSBhIERvY0Jvb2sgWE1MDQogICAgJ3JlZmVudHJ5JyBkb2N1bWVudC4gVGhpcyBleGFtcGxlIGdlbmVyYXRlcyBhbiBgYXNjaWlkb2MuMWAgbWFuDQogICAgcGFnZSBmaWxlOg0KDQogICAgJCBweXRob24gLi4vYXNjaWlkb2MucHkgLWQgbWFucGFnZSAtYiBkb2Nib29rIGFzY2lpZG9jLjEudHh0DQogICAgJCB4c2x0cHJvYyAtLW5vbmV0IC4uL2RvY2Jvb2steHNsL21hbnBhZ2UueHNsIGFzY2lpZG9jLjEueG1sDQoNCmB4aHRtbC54c2xgOjoNCiAgICBDb252ZXJ0IGEgRG9jQm9vayBYTUwgZmlsZSB0byBhIHNpbmdsZSBYSFRNTCBmaWxlLiBGb3IgZXhhbXBsZToNCg0KICAgICQgcHl0aG9uIC4uL2FzY2lpZG9jLnB5IC1iIGRvY2Jvb2sgYXNjaWlkb2MudHh0DQogICAgJCB4c2x0cHJvYyAtLW5vbmV0IC4uL2RvY2Jvb2steHNsL3hodG1sLnhzbCBhc2NpaWRvYy54bWwgPiBhc2NpaWRvYy5odG1sDQoNCklmIHlvdSB3YW50IHRvIHNlZSBob3cgdGhlIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gc2V0IGlzIHByb2Nlc3NlZA0KdGFrZSBhIGxvb2sgYXQgdGhlIEEtQS1QIHNjcmlwdCBgLi9kb2MvbWFpbi5hYXBgLg0KDQoNCkdlbmVyYXRpbmcgUGxhaW4gVGV4dCBGaWxlcw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpBc2NpaURvYyBkb2VzIG5vdCBoYXZlIGEgdGV4dCBiYWNrZW5kIChmb3IgbW9zdCBwdXJwb3NlcyBBc2NpaURvYw0Kc291cmNlIHRleHQgaXMgZmluZSksIGhvd2V2ZXIgeW91IGNhbiBjb252ZXJ0IEFzY2lpRG9jIHRleHQgZmlsZXMgdG8NCmZvcm1hdHRlZCB0ZXh0IHVzaW5nIHRoZSBBc2NpaURvYyA8PFg0MyxhMngoMSk+PiB0b29sY2hhaW4gd3JhcHBlcg0KdXRpbGl0eS4NCg0KDQpbW1gzNV1dDQpIVE1MNSBhbmQgWEhUTUwgMS4xDQotLS0tLS0tLS0tLS0tLS0tLS0tDQpUaGUgJ3hodG1sMTEnIGFuZCAnaHRtbDUnIGJhY2tlbmRzIGVtYmVkIG9yIGxpbmsgQ1NTIGFuZCBKYXZhU2NyaXB0DQpmaWxlcyBpbiB0aGVpciBvdXRwdXRzLCB0aGVyZSBpcyBhbHNvIGEgPDxYOTksdGhlbWVzPj4gcGx1Z2luDQpmcmFtZXdvcmsuDQoNCi0gSWYgdGhlIEFzY2lpRG9jICdsaW5rY3NzJyBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB0aGVuIENTUyBhbmQNCiAgSmF2YVNjcmlwdCBmaWxlcyBhcmUgbGlua2VkIHRvIHRoZSBvdXRwdXQgZG9jdW1lbnQsIG90aGVyd2lzZSB0aGV5DQogIGFyZSBlbWJlZGRlZCAodGhlIGRlZmF1bHQgYmVoYXZpb3IpLg0KLSBUaGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIENTUyBhbmQgSmF2YVNjcmlwdCBmaWxlcyBjYW4gYmUgY2hhbmdlZCBieQ0KICBzZXR0aW5nIHRoZSBBc2NpaURvYyAnc3R5bGVzZGlyJyBhbmQgJ3NjcmlwdHNkaXInIGF0dHJpYnV0ZXMNCiAgcmVzcGVjdGl2ZWx5Lg0KLSBUaGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIGVtYmVkZGVkIGFuZCBsaW5rZWQgZmlsZXMgZGlmZmVyIGFuZCBhcmUNCiAgY2FsY3VsYXRlZCBhdCBkaWZmZXJlbnQgdGltZXMgLS0gZW1iZWRkZWQgZmlsZXMgYXJlIGxvYWRlZCB3aGVuDQogIGFzY2lpZG9jKDEpIGdlbmVyYXRlcyB0aGUgb3V0cHV0IGRvY3VtZW50LCBsaW5rZWQgZmlsZXMgYXJlIGxvYWRlZA0KICBieSB0aGUgYnJvd3NlciB3aGVuIHRoZSB1c2VyIHZpZXdzIHRoZSBvdXRwdXQgZG9jdW1lbnQuDQotIEVtYmVkZGVkIGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoZSBvdXRwdXQgZmlsZXMgYnV0DQogIHlvdSBuZWVkIHRvIG1hbnVhbGx5IGNvcHkgbGlua2VkIENTUyBhbmQgSmF2YXNjcmlwdCBmaWxlcyBmcm9tDQogIEFzY2lpRG9jIDw8WDI3LGNvbmZpZ3VyYXRpb24gZGlyZWN0b3JpZXM+PiB0byB0aGUgY29ycmVjdCBsb2NhdGlvbg0KICByZWxhdGl2ZSB0byB0aGUgb3V0cHV0IGRvY3VtZW50Lg0KDQouU3R5bGVzaGVldCBmaWxlIGxvY2F0aW9ucw0KW2NvbHM9IjMqIixmcmFtZT0idG9wYm90IixvcHRpb25zPSJoZWFkZXIiXQ0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8J3N0eWxlc2RpcicgYXR0cmlidXRlDQp8TGlua2VkIGxvY2F0aW9uICgnbGlua2NzcycgYXR0cmlidXRlIGRlZmluZWQpDQp8RW1iZWRkZWQgbG9jYXRpb24gKCdsaW5rY3NzJyBhdHRyaWJ1dGUgdW5kZWZpbmVkKQ0KDQp8VW5kZWZpbmVkIChkZWZhdWx0KS4NCnxTYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGRvY3VtZW50Lg0KfGBzdHlsZXNoZWV0c2Agc3ViZGlyZWN0b3J5IGluIHRoZSBBc2NpaURvYyBjb25maWd1cmF0aW9uIGRpcmVjdG9yeQ0KKHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYmFja2VuZCBjb25mIGZpbGUpLg0KDQp8QWJzb2x1dGUgb3IgcmVsYXRpdmUgZGlyZWN0b3J5IG5hbWUuDQp8QWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkb2N1bWVudC4NCnxBYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB0aGUgQXNjaWlEb2MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgKHRoZQ0KZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJhY2tlbmQgY29uZiBmaWxlKS4NCg0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCi5KYXZhU2NyaXB0IGZpbGUgbG9jYXRpb25zDQpbY29scz0iMyoiLGZyYW1lPSJ0b3Bib3QiLG9wdGlvbnM9ImhlYWRlciJdDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCnwnc2NyaXB0c2RpcicgYXR0cmlidXRlDQp8TGlua2VkIGxvY2F0aW9uICgnbGlua2NzcycgYXR0cmlidXRlIGRlZmluZWQpDQp8RW1iZWRkZWQgbG9jYXRpb24gKCdsaW5rY3NzJyBhdHRyaWJ1dGUgdW5kZWZpbmVkKQ0KDQp8VW5kZWZpbmVkIChkZWZhdWx0KS4NCnxTYW1lIGRpcmVjdG9yeSBhcyB0aGUgb3V0cHV0IGRvY3VtZW50Lg0KfGBqYXZhc2NyaXB0c2Agc3ViZGlyZWN0b3J5IGluIHRoZSBBc2NpaURvYyBjb25maWd1cmF0aW9uIGRpcmVjdG9yeQ0KKHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYmFja2VuZCBjb25mIGZpbGUpLg0KDQp8QWJzb2x1dGUgb3IgcmVsYXRpdmUgZGlyZWN0b3J5IG5hbWUuDQp8QWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8gdGhlIG91dHB1dCBkb2N1bWVudC4NCnxBYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB0aGUgQXNjaWlEb2MgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgKHRoZQ0KZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGJhY2tlbmQgY29uZiBmaWxlKS4NCg0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCltbWDk5XV0NClRoZW1lcw0Kfn5+fn5+DQpUaGUgQXNjaWlEb2MgJ3RoZW1lJyBhdHRyaWJ1dGUgaXMgdXNlZCB0byBzZWxlY3QgYW4gYWx0ZXJuYXRpdmUgQ1NTDQpzdHlsZXNoZWV0IGFuZCB0byBvcHRpb25hbGx5IGluY2x1ZGUgYWRkaXRpb25hbCBKYXZhU2NyaXB0IGNvZGUuDQoNCi0gVGhlbWUgZmlsZXMgcmVzaWRlIGluIGFuIEFzY2lpRG9jIDw8WDI3LGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5Pj4NCiAgbmFtZWQgYHRoZW1lcy88dGhlbWU+L2AgKHdoZXJlIGA8dGhlbWU+YCBpcyB0aGUgdGhlIHRoZW1lIG5hbWUgc2V0DQogIGJ5IHRoZSAndGhlbWUnIGF0dHJpYnV0ZSkuIGFzY2lpZG9jKDEpIHNldHMgdGhlICd0aGVtZWRpcicgYXR0cmlidXRlDQogIHRvIHRoZSB0aGVtZSBkaXJlY3RvcnkgcGF0aCBuYW1lLg0KLSBUaGUgJ3RoZW1lJyBhdHRyaWJ1dGUgY2FuIGFsc28gYmUgc2V0IHVzaW5nIHRoZSBhc2NpaWRvYygxKQ0KICBgLS10aGVtZWAgb3B0aW9uLCB0aGUgYC0tdGhlbWVgIG9wdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIG1hbmFnZQ0KICB0aGVtZSA8PFgxMDEscGx1Z2lucz4+Lg0KLSBBc2NpaURvYyBzaGlwcyB3aXRoIHR3byB0aGVtZXM6ICdmbGFzaycgYW5kICd2b2xuaXRza3knLg0KLSBUaGUgYDx0aGVtZT4uY3NzYCBmaWxlIHJlcGxhY2VzIHRoZSBkZWZhdWx0IGBhc2NpaWRvYy5jc3NgIENTUyBmaWxlLg0KLSBUaGUgYDx0aGVtZT4uanNgIGZpbGUgaXMgaW5jbHVkZWQgaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQNCiAgYGFzY2lpZG9jLmpzYCBKYXZhU2NyaXB0IGZpbGUuDQotIElmIHRoZSA8PFg2NixkYXRhLXVyaT4+IGF0dHJpYnV0ZSBpcyBkZWZpbmVkIHRoZW4gaWNvbnMgYXJlIGxvYWRlZA0KICBmcm9tIHRoZSB0aGVtZSBgaWNvbnNgIHN1Yi1kaXJlY3RvcnkgaWYgaXQgZXhpc3RzIChpLmUuICB0aGUNCiAgJ2ljb25zZGlyJyBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRoZW1lIGBpY29uc2Agc3ViLWRpcmVjdG9yeSBwYXRoKS4NCi0gRW1iZWRkZWQgdGhlbWUgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhlIG91dHB1dCBmaWxlcw0KICBidXQgeW91IG5lZWQgdG8gbWFudWFsbHkgY29weSBsaW5rZWQgQ1NTIGFuZCBKYXZhc2NyaXB0IGZpbGVzIHRvIHRoZQ0KICBsb2NhdGlvbiBvZiB0aGUgb3V0cHV0IGRvY3VtZW50cy4NCi0gTGlua2VkIENTUyBhbmQgSmF2YVNjcmlwdCB0aGVtZSBmaWxlcyBhcmUgbGlua2VkIHRvIHRoZSBzYW1lIGxpbmtlZA0KICBsb2NhdGlvbnMgYXMgPDxYMzUsb3RoZXIgQ1NTIGFuZCBKYXZhU2NyaXB0IGZpbGVzPj4uDQoNCkZvciBleGFtcGxlLCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBgLS10aGVtZSBmb29gIChvciBgLS1hdHRyaWJ1dGUNCnRoZW1lPWZvb2ApIHdpbGwgY2F1c2UgYXNjaWlkb2MoMSkgdG8gc2VhcmNoIDw8IlgyNyIsImNvbmZpZ3VyYXRpb24NCmZpbGUgbG9jYXRpb25zIDEsIDIgYW5kIDMiPj4gZm9yIGEgc3ViLWRpcmVjdG9yeSBjYWxsZWQgYHRoZW1lcy9mb29gDQpjb250YWluaW5nIHRoZSBzdHlsZXNoZWV0IGBmb28uY3NzYCBhbmQgb3B0aW9uYWxseSBhIEphdmFTY3JpcHQgZmlsZQ0KbmFtZSBgZm9vLmpzYC4NCg0KDQpEb2N1bWVudCBTdHJ1Y3R1cmUNCi0tLS0tLS0tLS0tLS0tLS0tLQ0KQW4gQXNjaWlEb2MgZG9jdW1lbnQgY29uc2lzdHMgb2YgYSBzZXJpZXMgb2YgPDxYOCxibG9jayBlbGVtZW50cz4+DQpzdGFydGluZyB3aXRoIGFuIG9wdGlvbmFsIGRvY3VtZW50IEhlYWRlciwgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwNClByZWFtYmxlLCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgZG9jdW1lbnQgU2VjdGlvbnMuDQoNCkFsbW9zdCBhbnkgY29tYmluYXRpb24gb2YgemVybyBvciBtb3JlIGVsZW1lbnRzIGNvbnN0aXR1dGVzIGEgdmFsaWQNCkFzY2lpRG9jIGRvY3VtZW50OiBkb2N1bWVudHMgY2FuIHJhbmdlIGZyb20gYSBzaW5nbGUgc2VudGVuY2UgdG8gYQ0KbXVsdGktcGFydCBib29rLg0KDQpCbG9jayBFbGVtZW50cw0Kfn5+fn5+fn5+fn5+fn4NCkJsb2NrIGVsZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgbGluZXMgb2YgdGV4dCBhbmQgbWF5IGNvbnRhaW4NCm90aGVyIGJsb2NrIGVsZW1lbnRzLg0KDQpUaGUgQXNjaWlEb2MgYmxvY2sgc3RydWN0dXJlIGNhbiBiZSBpbmZvcm1hbGx5IHN1bW1hcml6ZWQgYXMgZm9sbG93cw0KZm9vdG5vdGU6W1RoaXMgaXMgYSByb3VnaCBzdHJ1Y3R1cmFsIGd1aWRlLCBub3QgYSByaWdvcm91cyBzeW50YXgNCmRlZmluaXRpb25dOg0KDQogIERvY3VtZW50ICAgICAgOjo9IChIZWFkZXI/LFByZWFtYmxlPyxTZWN0aW9uKikNCiAgSGVhZGVyICAgICAgICA6Oj0gKFRpdGxlLChBdXRob3JJbmZvLFJldmlzaW9uSW5mbz8pPykNCiAgQXV0aG9ySW5mbyAgICA6Oj0gKEZpcnN0TmFtZSwoTWlkZGxlTmFtZT8sTGFzdE5hbWUpPyxFbWFpbEFkZHJlc3M/KQ0KICBSZXZpc2lvbkluZm8gIDo6PSAoUmV2aXNpb25OdW1iZXI/LFJldmlzaW9uRGF0ZSxSZXZpc2lvblJlbWFyaz8pDQogIFByZWFtYmxlICAgICAgOjo9IChTZWN0aW9uQm9keSkNCiAgU2VjdGlvbiAgICAgICA6Oj0gKFRpdGxlLFNlY3Rpb25Cb2R5PywoU2VjdGlvbikqKQ0KICBTZWN0aW9uQm9keSAgIDo6PSAoKEJsb2NrVGl0bGU/LEJsb2NrKXxCbG9ja01hY3JvKSsNCiAgQmxvY2sgICAgICAgICA6Oj0gKFBhcmFncmFwaHxEZWxpbWl0ZWRCbG9ja3xMaXN0fFRhYmxlKQ0KICBMaXN0ICAgICAgICAgIDo6PSAoQnVsbGV0ZWRMaXN0fE51bWJlcmVkTGlzdHxMYWJlbGVkTGlzdHxDYWxsb3V0TGlzdCkNCiAgQnVsbGV0ZWRMaXN0ICA6Oj0gKExpc3RJdGVtKSsNCiAgTnVtYmVyZWRMaXN0ICA6Oj0gKExpc3RJdGVtKSsNCiAgQ2FsbG91dExpc3QgICA6Oj0gKExpc3RJdGVtKSsNCiAgTGFiZWxlZExpc3QgICA6Oj0gKExpc3RFbnRyeSkrDQogIExpc3RFbnRyeSAgICAgOjo9IChMaXN0TGFiZWwsTGlzdEl0ZW0pDQogIExpc3RMYWJlbCAgICAgOjo9IChMaXN0VGVybSspDQogIExpc3RJdGVtICAgICAgOjo9IChJdGVtVGV4dCwoTGlzdHxMaXN0UGFyYWdyYXBofExpc3RDb250aW51YXRpb24pKikNCg0KV2hlcmU6DQoNCi0gJz8nIGltcGxpZXMgemVybyBvciBvbmUgb2NjdXJyZW5jZSwgJysnIGltcGxpZXMgb25lIG9yIG1vcmUNCiAgb2NjdXJyZW5jZXMsICcqJyBpbXBsaWVzIHplcm8gb3IgbW9yZSBvY2N1cnJlbmNlcy4NCi0gQWxsIGJsb2NrIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgbGluZSBib3VuZGFyaWVzLg0KLSBgQmxvY2tJZGAsIGBBdHRyaWJ1dGVFbnRyeWAgYW5kIGBBdHRyaWJ1dGVMaXN0YCBibG9jayBlbGVtZW50cyAobm90DQogIHNob3duKSBjYW4gb2NjdXIgYWxtb3N0IGFueXdoZXJlLg0KLSBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZG9jdW1lbnQgdHlwZSBhbmQgYmFja2VuZCBzcGVjaWZpYw0KICByZXN0cmljdGlvbnMgaW1wb3NlZCBvbiB0aGUgYmxvY2sgc3ludGF4Lg0KLSBUaGUgZm9sbG93aW5nIGVsZW1lbnRzIGNhbm5vdCBjb250YWluIGJsYW5rIGxpbmVzOiBIZWFkZXIsIFRpdGxlLA0KICBQYXJhZ3JhcGgsIEl0ZW1UZXh0Lg0KLSBBIExpc3RQYXJhZ3JhcGggaXMgYSBQYXJhZ3JhcGggd2l0aCBpdHMgJ2xpc3RlbGVtZW50JyBvcHRpb24gc2V0Lg0KLSBBIExpc3RDb250aW51YXRpb24gaXMgYSA8PFgxNSxsaXN0IGNvbnRpbnVhdGlvbiBlbGVtZW50Pj4uDQoNCltbWDk1XV0NCkhlYWRlcg0Kfn5+fn5+DQpUaGUgSGVhZGVyIGNvbnRhaW5zIGRvY3VtZW50IG1ldGEtZGF0YSwgdHlwaWNhbGx5IHRpdGxlIHBsdXMgb3B0aW9uYWwNCmF1dGhvcnNoaXAgYW5kIHJldmlzaW9uIGluZm9ybWF0aW9uOg0KDQotIFRoZSBIZWFkZXIgaXMgb3B0aW9uYWwsIGJ1dCBpZiBpdCBpcyB1c2VkIGl0IG11c3Qgc3RhcnQgd2l0aCBhDQogIGRvY3VtZW50IDw8WDE3LHRpdGxlPj4uDQotIE9wdGlvbmFsIEF1dGhvciBhbmQgUmV2aXNpb24gaW5mb3JtYXRpb24gaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUNCiAgaGVhZGVyIHRpdGxlLg0KLSBUaGUgZG9jdW1lbnQgaGVhZGVyIG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHJlbWFpbmRlciBvZiB0aGUNCiAgZG9jdW1lbnQgYnkgb25lIG9yIG1vcmUgYmxhbmsgbGluZXMgYW5kIGNhbm5vdCBjb250YWluIGJsYW5rIGxpbmVzLg0KLSBUaGUgaGVhZGVyIGNhbiBpbmNsdWRlIGNvbW1lbnRzLg0KLSBUaGUgaGVhZGVyIGNhbiBpbmNsdWRlIDw8WDE4LGF0dHJpYnV0ZSBlbnRyaWVzPj4sIHR5cGljYWxseQ0KICAnZG9jdHlwZScsICdsYW5nJywgJ2VuY29kaW5nJywgJ2ljb25zJywgJ2RhdGEtdXJpJywgJ3RvYycsDQogICdudW1iZXJlZCcuDQotIEhlYWRlciBhdHRyaWJ1dGVzIGFyZSBvdmVycmlkZGVuIGJ5IGNvbW1hbmQtbGluZSBhdHRyaWJ1dGVzLg0KLSBJZiB0aGUgaGVhZGVyIGNvbnRhaW5zIG5vbi1VVEYtOCBjaGFyYWN0ZXJzIHRoZW4gdGhlICdlbmNvZGluZycgbXVzdA0KICBwcmVjZWRlIHRoZSBoZWFkZXIgKGVpdGhlciBpbiB0aGUgZG9jdW1lbnQgb3Igb24gdGhlIGNvbW1hbmQtbGluZSkuDQoNCkhlcmUncyBhbiBleGFtcGxlIEFzY2lpRG9jIGRvY3VtZW50IGhlYWRlcjoNCg0KICBXcml0aW5nIERvY3VtZW50YXRpb24gdXNpbmcgQXNjaWlEb2MNCiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogIEpvZSBCbG9nZ3MgPGpibG9nZ3NAbXltYWlsLmNvbT4NCiAgdjIuMCwgRmVicnVhcnkgMjAwMzoNCiAgUmV3cml0dGVuIGZvciB2ZXJzaW9uIDIgcmVsZWFzZS4NCg0KVGhlIGF1dGhvciBpbmZvcm1hdGlvbiBsaW5lIGNvbnRhaW5zIHRoZSBhdXRob3IncyBuYW1lIG9wdGlvbmFsbHkNCmZvbGxvd2VkIGJ5IHRoZSBhdXRob3IncyBlbWFpbCBhZGRyZXNzLiBUaGUgYXV0aG9yJ3MgbmFtZSBpcyBmb3JtYXR0ZWQNCmxpa2U6DQoNCiAgZmlyc3RuYW1lWyBbbWlkZGxlbmFtZSBdbGFzdG5hbWVdWyA8ZW1haWw+XV0NCg0KaS5lLiBhIGZpcnN0IG5hbWUgZm9sbG93ZWQgYnkgb3B0aW9uYWwgbWlkZGxlIGFuZCBsYXN0IG5hbWVzIGZvbGxvd2VkDQpieSBhbiBlbWFpbCBhZGRyZXNzIGluIHRoYXQgb3JkZXIuICBNdWx0aS13b3JkIGZpcnN0LCBtaWRkbGUgYW5kIGxhc3QNCm5hbWVzIGNhbiBiZSBlbnRlcmVkIHVzaW5nIHRoZSB1bmRlcnNjb3JlIGFzIGEgd29yZCBzZXBhcmF0b3IuICBUaGUNCmVtYWlsIGFkZHJlc3MgY29tZXMgbGFzdCBhbmQgbXVzdCBiZSBlbmNsb3NlZCBpbiBhbmdsZSA8PiBicmFja2V0cy4NCkhlcmUgYSBzb21lIGV4YW1wbGVzIG9mIGF1dGhvciBpbmZvcm1hdGlvbiBsaW5lczoNCg0KICBKb2UgQmxvZ2dzIDxqYmxvZ2dzQG15bWFpbC5jb20+DQogIEpvZSBCbG9nZ3MNCiAgVmluY2VudCBXaWxsZW0gdmFuX0dvZ2gNCg0KSWYgdGhlIGF1dGhvciBsaW5lIGRvZXMgbm90IG1hdGNoIHRoZSBhYm92ZSBzcGVjaWZpY2F0aW9uIHRoZW4gdGhlDQplbnRpcmUgYXV0aG9yIGxpbmUgaXMgdHJlYXRlZCBhcyB0aGUgZmlyc3QgbmFtZS4NCg0KVGhlIG9wdGlvbmFsIHJldmlzaW9uIGluZm9ybWF0aW9uIGxpbmUgZm9sbG93cyB0aGUgYXV0aG9yIGluZm9ybWF0aW9uDQpsaW5lLiBUaGUgcmV2aXNpb24gaW5mb3JtYXRpb24gY2FuIGJlIG9uZSBvZiB0d28gZm9ybWF0czoNCg0KLiBBbiBvcHRpb25hbCBkb2N1bWVudCByZXZpc2lvbiBudW1iZXIgZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwNCiAgcmV2aXNpb24gZGF0ZSBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCByZXZpc2lvbiByZW1hcms6DQorDQotLQ0KICAqIElmIHRoZSByZXZpc2lvbiBudW1iZXIgaXMgc3BlY2lmaWVkIGl0IG11c3QgYmUgZm9sbG93ZWQgYnkgYQ0KICAgIGNvbW1hLg0KICAqIFRoZSByZXZpc2lvbiBudW1iZXIgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBudW1lcmljIGNoYXJhY3Rlci4NCiAgKiBBbnkgbm9uLW51bWVyaWMgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGZpcnN0IG51bWVyaWMgY2hhcmFjdGVyDQogICAgd2lsbCBiZSBkcm9wcGVkLg0KICAqIElmIGEgcmV2aXNpb24gcmVtYXJrIGlzIHNwZWNpZmllZCBpdCBtdXN0IGJlIHByZWNlZGVkIGJ5IGEgY29sb24uDQogICAgVGhlIHJldmlzaW9uIHJlbWFyayBleHRlbmRzIGZyb20gdGhlIGNvbG9uIHVwIHRvIHRoZSBuZXh0IGJsYW5rDQogICAgbGluZSwgYXR0cmlidXRlIGVudHJ5IG9yIGNvbW1lbnQgYW5kIGlzIHN1YmplY3QgdG8gbm9ybWFsIHRleHQNCiAgICBzdWJzdGl0dXRpb25zLg0KICAqIElmIGEgcmV2aXNpb24gbnVtYmVyIG9yIHJlbWFyayBoYXMgYmVlbiBzZXQgYnV0IHRoZSByZXZpc2lvbiBkYXRlDQogICAgaGFzIG5vdCBiZWVuIHNldCB0aGVuIHRoZSByZXZpc2lvbiBkYXRlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlDQogICAgJ2RvY2RhdGUnIGF0dHJpYnV0ZS4NCg0KRXhhbXBsZXM6DQoNCiAgdjIuMCwgRmVicnVhcnkgMjAwMw0KICBGZWJydWFyeSAyMDAzDQogIHYyLjAsDQogIHYyLjAsIEZlYnJ1YXJ5IDIwMDM6IFJld3JpdHRlbiBmb3IgdmVyc2lvbiAyIHJlbGVhc2UuDQogIEZlYnJ1YXJ5IDIwMDM6IFJld3JpdHRlbiBmb3IgdmVyc2lvbiAyIHJlbGVhc2UuDQogIHYyLjAsOiBSZXdyaXR0ZW4gZm9yIHZlcnNpb24gMiByZWxlYXNlLg0KICA6UmV3cml0dGVuIGZvciB2ZXJzaW9uIDIgcmVsZWFzZS4NCi0tDQoNCi4gVGhlIHJldmlzaW9uIGluZm9ybWF0aW9uIGxpbmUgY2FuIGFsc28gYmUgYW4gUkNTL0NWUy9TVk4gJElkJA0KICBtYXJrZXI6DQorDQotLQ0KICAqIEFzY2lpRG9jIGV4dHJhY3RzIHRoZSAncmV2bnVtYmVyJywgJ3JldmRhdGUnLCBhbmQgJ2F1dGhvcicNCiAgICBhdHRyaWJ1dGVzIGZyb20gdGhlICRJZCQgcmV2aXNpb24gbWFya2VyIGFuZCBkaXNwbGF5cyB0aGVtIGluIHRoZQ0KICAgIGRvY3VtZW50IGhlYWRlci4NCiAgKiBJZiBhbiAkSWQkIHJldmlzaW9uIG1hcmtlciBpcyB1c2VkIHRoZSBoZWFkZXIgYXV0aG9yIGxpbmUgY2FuIGJlDQogICAgb21pdHRlZC4NCg0KRXhhbXBsZToNCg0KICAkSWQ6IG15ZG9jLnR4dCx2IDEuNSAyMDA5LzA1LzE3IDE3OjU4OjQ0IGpibG9nZ3MgRXhwICQNCi0tDQoNCllvdSBjYW4gb3ZlcnJpZGUgb3Igc2V0IGhlYWRlciBwYXJhbWV0ZXJzIGJ5IHBhc3NpbmcgJ3Jldm51bWJlcicsDQoncmV2cmVtYXJrJywgJ3JldmRhdGUnLCAnZW1haWwnLCAnYXV0aG9yJywgJ2F1dGhvcmluaXRpYWxzJywNCidmaXJzdG5hbWUnIGFuZCAnbGFzdG5hbWUnIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIGFzY2lpZG9jKDEpIGAtYWANCihgLS1hdHRyaWJ1dGVgKSBjb21tYW5kLWxpbmUgb3B0aW9uLiBGb3IgZXhhbXBsZToNCg0KICAkIGFzY2lpZG9jIC1hIHJldmRhdGU9MjAwNC8wNy8yNyBhcnRpY2xlLnR4dA0KDQpBdHRyaWJ1dGUgZW50cmllcyBjYW4gYWxzbyBiZSBhZGRlZCB0byB0aGUgaGVhZGVyIGZvciBzdWJzdGl0dXRpb24gaW4NCnRoZSBoZWFkZXIgdGVtcGxhdGUgd2l0aCA8PFgxOCxBdHRyaWJ1dGUgRW50cnk+PiBlbGVtZW50cy4NCg0KVGhlICd0aXRsZScgZWxlbWVudCBpbiBIVE1MIG91dHB1dHMgaXMgc2V0IHRvIHRoZSBBc2NpaURvYyBkb2N1bWVudA0KdGl0bGUsIHlvdSBjYW4gc2V0IGl0IHRvIGEgZGlmZmVyZW50IHZhbHVlIGJ5IGluY2x1ZGluZyBhICd0aXRsZScNCmF0dHJpYnV0ZSBlbnRyeSBpbiB0aGUgZG9jdW1lbnQgaGVhZGVyLg0KDQpbW1g4N11dDQpBZGRpdGlvbmFsIGRvY3VtZW50IGhlYWRlciBpbmZvcm1hdGlvbg0KXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4NCkFzY2lpRG9jIGhhcyB0d28gbWVjaGFuaXNtcyBmb3Igb3B0aW9uYWxseSBpbmNsdWRpbmcgYWRkaXRpb25hbA0KbWV0YS1kYXRhIGluIHRoZSBoZWFkZXIgb2YgdGhlIG91dHB1dCBkb2N1bWVudDoNCg0KJ2RvY2luZm8nIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWN0aW9uczo6DQpJZiBhIDw8WDcsY29uZmlndXJhdGlvbiBmaWxlPj4gc2VjdGlvbiBuYW1lZCAnZG9jaW5mbycgaGFzIGJlZW4gbG9hZGVkDQp0aGVuIGl0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50IGhlYWRlci4gVHlwaWNhbGx5IHRoZQ0KJ2RvY2luZm8nIHNlY3Rpb24gbmFtZSB3aWxsIGJlIHByZWZpeGVkIHdpdGggYSAnKycgY2hhcmFjdGVyIHNvIHRoYXQgaXQNCmlzIGFwcGVuZGVkIHRvIChyYXRoZXIgdGhhbiByZXBsYWNlKSBvdGhlciAnZG9jaW5mbycgc2VjdGlvbnMuDQoNCidkb2NpbmZvJyBmaWxlczo6DQpUd28gZG9jaW5mbyBmaWxlcyBhcmUgcmVjb2duaXplZDogb25lIG5hbWVkIGBkb2NpbmZvYCBhbmQgYSBzZWNvbmQNCm5hbWVkIGxpa2UgdGhlIEFzY2lpRG9jIHNvdXJjZSBmaWxlIHdpdGggYSBgLWRvY2luZm9gIHN1ZmZpeC4gIEZvcg0KZXhhbXBsZSwgaWYgdGhlIHNvdXJjZSBkb2N1bWVudCBpcyBjYWxsZWQgYG15ZG9jLnR4dGAgdGhlbiB0aGUNCmRvY3VtZW50IGluZm9ybWF0aW9uIGZpbGVzIHdvdWxkIGJlIGBkb2NpbmZvLnhtbGAgYW5kDQpgbXlkb2MtZG9jaW5mby54bWxgIChmb3IgRG9jQm9vayBvdXRwdXRzKSBhbmQgYGRvY2luZm8uaHRtbGAgYW5kDQpgbXlkb2MtZG9jaW5mby5odG1sYCAoZm9yIEhUTUwgb3V0cHV0cykuICBUaGUgPDxYOTcsZG9jaW5mbywgZG9jaW5mbzENCmFuZCBkb2NpbmZvMj4+IGF0dHJpYnV0ZXMgY29udHJvbCB3aGljaCBkb2NpbmZvIGZpbGVzIGFyZSBpbmNsdWRlZCBpbg0KdGhlIG91dHB1dCBmaWxlcy4NCg0KVGhlIGNvbnRlbnRzIGRvY2luZm8gdGVtcGxhdGVzIGFuZCBmaWxlcyBpcyBkZXBlbmRlbnQgb24gdGhlIHR5cGUgb2YNCm91dHB1dDoNCg0KSFRNTDo6DQogIFZhbGlkICdoZWFkJyBjaGlsZCBlbGVtZW50cy4gVHlwaWNhbGx5ICdzdHlsZScgYW5kICdzY3JpcHQnIGVsZW1lbnRzDQogIGZvciBDU1MgYW5kIEphdmFTY3JpcHQgaW5jbHVzaW9uLg0KDQpEb2NCb29rOjoNCiAgVmFsaWQgJ2FydGljbGVpbmZvJyBvciAnYm9va2luZm8nIGNoaWxkIGVsZW1lbnRzLiAgRG9jQm9vayBkZWZpbmVzDQogIG51bWVyb3VzIGVsZW1lbnRzIGZvciBkb2N1bWVudCBtZXRhLWRhdGEsIGZvciBleGFtcGxlOiBjb3B5cmlnaHRzLA0KICBkb2N1bWVudCBoaXN0b3J5IGFuZCBhdXRob3JzaGlwIGluZm9ybWF0aW9uLiAgU2VlIHRoZSBEb2NCb29rDQogIGAuL2RvYy9hcnRpY2xlLWRvY2luZm8ueG1sYCBleGFtcGxlIHRoYXQgY29tZXMgd2l0aCB0aGUgQXNjaWlEb2MNCiAgZGlzdHJpYnV0aW9uLiAgVGhlIHJlbmRlcmluZyBvZiBtZXRhLWRhdGEgZWxlbWVudHMgKG9yIG5vdCkgaXMNCiAgRG9jQm9vayBwcm9jZXNzb3IgZGVwZW5kZW50Lg0KDQoNCltbWDg2XV0NClByZWFtYmxlDQp+fn5+fn5+fg0KVGhlIFByZWFtYmxlIGlzIGFuIG9wdGlvbmFsIHVudGl0bGVkIHNlY3Rpb24gYm9keSBiZXR3ZWVuIHRoZSBkb2N1bWVudA0KSGVhZGVyIGFuZCB0aGUgZmlyc3QgU2VjdGlvbiB0aXRsZS4NCg0KU2VjdGlvbnMNCn5+fn5+fn5+DQpJbiBhZGRpdGlvbiB0byB0aGUgZG9jdW1lbnQgdGl0bGUgKGxldmVsIDApLCBBc2NpaURvYyBzdXBwb3J0cyBmb3VyDQpzZWN0aW9uIGxldmVsczogMSAodG9wKSB0byA0IChib3R0b20pLiAgU2VjdGlvbiBsZXZlbHMgYXJlIGRlbGltaXRlZA0KYnkgc2VjdGlvbiA8PFgxNyx0aXRsZXM+Pi4gIFNlY3Rpb25zIGFyZSB0cmFuc2xhdGVkIHVzaW5nDQpjb25maWd1cmF0aW9uIGZpbGUgPDxYOTMsc2VjdGlvbiBtYXJrdXAgdGVtcGxhdGVzPj4uIEFzY2lpRG9jDQpnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyA8PFg2MCxpbnRyaW5zaWMgYXR0cmlidXRlcz4+IHNwZWNpZmljYWxseSBmb3INCnVzZSBpbiBzZWN0aW9uIG1hcmt1cCB0ZW1wbGF0ZXM6DQoNCmxldmVsOjoNClRoZSBgbGV2ZWxgIGF0dHJpYnV0ZSBpcyB0aGUgc2VjdGlvbiBsZXZlbCBudW1iZXIsIGl0IGlzIG5vcm1hbGx5IGp1c3QNCnRoZSA8PFgxNyx0aXRsZT4+IGxldmVsIG51bWJlciAoMS4uNCkuIEhvd2V2ZXIsIGlmIHRoZSBgbGV2ZWxvZmZzZXRgDQphdHRyaWJ1dGUgaXMgZGVmaW5lZCBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBgbGV2ZWxgIGF0dHJpYnV0ZS4gVGhlDQpgbGV2ZWxvZmZzZXRgIGF0dHJpYnV0ZSBpcyB1c2VmdWwgZm9yIDw8WDkwLGNvbWJpbmluZyBkb2N1bWVudHM+Pi4NCg0Kc2VjdG51bTo6DQpUaGUgYC1uYCAoYC0tc2VjdGlvbi1udW1iZXJzYCkgY29tbWFuZC1saW5lIG9wdGlvbiBnZW5lcmF0ZXMgdGhlDQpgc2VjdG51bWAgKHNlY3Rpb24gbnVtYmVyKSBhdHRyaWJ1dGUuICBUaGUgYHNlY3RudW1gIGF0dHJpYnV0ZSBpcyB1c2VkDQpmb3Igc2VjdGlvbiBudW1iZXJzIGluIEhUTUwgb3V0cHV0cyAoRG9jQm9vayBzZWN0aW9uIG51bWJlcmluZyBhcmUNCmhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgRG9jQm9vayB0b29sY2hhaW4gY29tbWFuZHMpLg0KDQpbW1g5M11dDQpTZWN0aW9uIG1hcmt1cCB0ZW1wbGF0ZXMNCl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KU2VjdGlvbiBtYXJrdXAgdGVtcGxhdGVzIHNwZWNpZnkgb3V0cHV0IG1hcmt1cCBhbmQgYXJlIGRlZmluZWQgaW4NCkFzY2lpRG9jIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBTZWN0aW9uIG1hcmt1cCB0ZW1wbGF0ZSBuYW1lcyBhcmUNCmRlcml2ZWQgYXMgZm9sbG93cyAoaW4gb3JkZXIgb2YgcHJlY2VkZW5jZSk6DQoNCjEuIEZyb20gdGhlIHRpdGxlJ3MgZmlyc3QgcG9zaXRpb25hbCBhdHRyaWJ1dGUgb3IgJ3RlbXBsYXRlJw0KICAgYXR0cmlidXRlLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB0aHJlZSBzZWN0aW9uIHRpdGxlcyBhcmUNCiAgIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50Og0KKw0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQpbW3Rlcm1zXV0NCltnbG9zc2FyeV0NCkxpc3Qgb2YgVGVybXMNCi0tLS0tLS0tLS0tLS0NCg0KWyJnbG9zc2FyeSIsaWQ9InRlcm1zIl0NCkxpc3Qgb2YgVGVybXMNCi0tLS0tLS0tLS0tLS0NCg0KW3RlbXBsYXRlPSJnbG9zc2FyeSIsaWQ9InRlcm1zIl0NCkxpc3Qgb2YgVGVybXMNCi0tLS0tLS0tLS0tLS0NCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoyLiBXaGVuIHRoZSB0aXRsZSB0ZXh0IG1hdGNoZXMgYSBjb25maWd1cmF0aW9uIGZpbGUNCiAgIDw8WDE2LGBbc3BlY2lhbHNlY3Rpb25zXWA+PiBlbnRyeS4NCjMuIElmIG5laXRoZXIgb2YgdGhlIGFib3ZlIHRoZSBkZWZhdWx0IGBzZWN0PGxldmVsPmAgdGVtcGxhdGUgaXMgdXNlZA0KICAgKHdoZXJlIGA8bGV2ZWw+YCBpcyBhIG51bWJlciBmcm9tIDEgdG8gNCkuDQoNCkluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgc2VjdGlvbiB0ZW1wbGF0ZSBuYW1lcyAoJ3NlY3QxJywgJ3NlY3QyJywNCidzZWN0MycsICdzZWN0NCcpIEFzY2lpRG9jIGhhcyB0aGUgZm9sbG93aW5nIHRlbXBsYXRlcyBmb3INCmZyb250bWF0dGVyLCBiYWNrbWF0dGVyIGFuZCBvdGhlciBzcGVjaWFsIHNlY3Rpb25zOiAnYWJzdHJhY3QnLA0KJ3ByZWZhY2UnLCAnY29sb3Bob24nLCAnZGVkaWNhdGlvbicsICdnbG9zc2FyeScsICdiaWJsaW9ncmFwaHknLA0KJ3N5bm9wc2lzJywgJ2FwcGVuZGl4JywgJ2luZGV4Jy4gIFRoZXNlIHNwZWNpYWwgc2VjdGlvbiB0ZW1wbGF0ZXMNCmdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nIERvY2Jvb2sgZWxlbWVudHM7IGZvciBIVE1MIG91dHB1dHMgdGhleQ0KZGVmYXVsdCB0byB0aGUgJ3NlY3QxJyBzZWN0aW9uIHRlbXBsYXRlLg0KDQpTZWN0aW9uIElEcw0KXl5eXl5eXl5eXl4NCklmIG5vIGV4cGxpY2l0IHNlY3Rpb24gSUQgaXMgc3BlY2lmaWVkIGFuIElEIHdpbGwgYmUgc3ludGhlc2lzZWQgZnJvbQ0KdGhlIHNlY3Rpb24gdGl0bGUuICBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgZmVhdHVyZSBpcyB0byBlbnN1cmUNCnBlcnNpc3RlbmNlIG9mIHRhYmxlIG9mIGNvbnRlbnRzIGxpbmtzIChwZXJtYWxpbmtzKTogdGhlIG1pc3NpbmcNCnNlY3Rpb24gSURzIGFyZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYnkgdGhlIEphdmFTY3JpcHQgVE9DIGdlbmVyYXRvcg0KKmFmdGVyKiB0aGUgcGFnZSBpcyBsb2FkZWQuIElmIHlvdSBsaW5rIHRvIGEgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIFRPQw0KYWRkcmVzcyB0aGUgcGFnZSB3aWxsIGxvYWQgYnV0IHRoZSBicm93c2VyIHdpbGwgaWdub3JlIHRoZSAoYXMgeWV0DQp1bmdlbmVyYXRlZCkgc2VjdGlvbiBJRC4NCg0KVGhlIElEcyBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOg0KDQotIFJlcGxhY2UgYWxsIG5vbi1hbHBoYW51bWVyaWMgdGl0bGUgY2hhcmFjdGVycyB3aXRoIHVuZGVyc2NvcmVzLg0KLSBTdHJpcCBsZWFkaW5nIG9yIHRyYWlsaW5nIHVuZGVyc2NvcmVzLg0KLSBDb252ZXJ0IHRvIGxvd2VyY2FzZS4NCi0gUHJlcGVuZCB0aGUgYGlkcHJlZml4YCBhdHRyaWJ1dGUgKHNvIHRoZXJlJ3Mgbm8gcG9zc2liaWxpdHkgb2YgbmFtZQ0KICBjbGFzaGVzIHdpdGggZXhpc3RpbmcgZG9jdW1lbnQgSURzKS4gUHJlcGVuZCBhbiB1bmRlcnNjb3JlIGlmIHRoZQ0KICBgaWRwcmVmaXhgIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZC4NCi0gQSBudW1iZXJlZCBzdWZmaXggKGBfMmAsIGBfM2AgLi4uKSBpcyBhZGRlZCBpZiBhIHNhbWUgbmFtZWQNCiAgYXV0by1nZW5lcmF0ZWQgc2VjdGlvbiBJRCBleGlzdHMuDQotIElmIHRoZSBgYXNjaWktaWRzYCBhdHRyaWJ1dGUgaXMgZGVmaW5lZCB0aGVuIG5vbi1BU0NJSSBjaGFyYWN0ZXJzDQogIGFyZSByZXBsYWNlZCB3aXRoIEFTQ0lJIGVxdWl2YWxlbnRzLiBUaGlzIGF0dHJpYnV0ZSBtYXkgYmUNCiAgZGVwcmVjYXRlZCBpbiBmdXR1cmUgcmVsZWFzZXMgYW5kICpzaG91bGQgYmUgYXZvaWRlZCosIGl0J3Mgc29sZQ0KICBwdXJwb3NlIGlzIHRvIGFjY29tbW9kYXRlIGRlZmljaWVudCBkb3duc3RyZWFtIGFwcGxpY2F0aW9ucyB0aGF0DQogIGNhbm5vdCBwcm9jZXNzIG5vbi1BU0NJSSBJRCBhdHRyaWJ1dGVzLg0KDQpFeGFtcGxlOiB0aGUgdGl0bGUgJ0ppbSdzIEhvdXNlJyB3b3VsZCBnZW5lcmF0ZSB0aGUgSUQgYF9qaW1fc19ob3VzZWAuDQoNClNlY3Rpb24gSUQgc3ludGhlc2lzIGNhbiBiZSBkaXNhYmxlZCBieSB1bmRlZmluaW5nIHRoZSBgc2VjdGlkc2ANCmF0dHJpYnV0ZS4NCg0KW1tYMTZdXQ0KU3BlY2lhbCBTZWN0aW9uIFRpdGxlcw0KXl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KQXNjaWlEb2MgaGFzIGEgbWVjaGFuaXNtIGZvciBtYXBwaW5nIHByZWRlZmluZWQgc2VjdGlvbiB0aXRsZXMNCmF1dG8tbWFnaWNhbGx5IHRvIHNwZWNpZmljIG1hcmt1cCB0ZW1wbGF0ZXMuIEZvciBleGFtcGxlIGEgdGl0bGUNCidBcHBlbmRpeCBBOiBDb2RlIFJlZmVyZW5jZScgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgJ2FwcGVuZGl4Jw0KPDxYOTMsc2VjdGlvbiBtYXJrdXAgdGVtcGxhdGU+Pi4gVGhlIG1hcHBpbmdzIGZyb20gdGl0bGUgdG8gdGVtcGxhdGUNCm5hbWUgYXJlIHNwZWNpZmllZCBpbiBgW3NwZWNpYWxzZWN0aW9uc11gIHNlY3Rpb25zIGluIHRoZSBBc2NpaWRvYw0KbGFuZ3VhZ2UgY29uZmlndXJhdGlvbiBmaWxlcyAoYGxhbmctKi5jb25mYCkuICBTZWN0aW9uIGVudHJpZXMgYXJlDQpmb3JtYXR0ZWQgbGlrZToNCg0KICA8dGl0bGU+PTx0ZW1wbGF0ZT4NCg0KYDx0aXRsZT5gIGlzIGEgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYDx0ZW1wbGF0ZT5gIGlzIHRoZSBuYW1lDQpvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBtYXJrdXAgdGVtcGxhdGUgc2VjdGlvbi4gSWYgdGhlIGA8dGl0bGU+YA0KbWF0Y2hlcyBhbiBBc2NpaURvYyBkb2N1bWVudCBzZWN0aW9uIHRpdGxlIHRoZW4gdGhlIGJhY2tlbmQgb3V0cHV0IGlzDQptYXJrZWQgdXAgdXNpbmcgdGhlIGA8dGVtcGxhdGU+YCBtYXJrdXAgdGVtcGxhdGUgKGluc3RlYWQgb2YgdGhlDQpkZWZhdWx0IGBzZWN0PGxldmVsPmAgc2VjdGlvbiB0ZW1wbGF0ZSkuIFRoZSBge3RpdGxlfWAgYXR0cmlidXRlIHZhbHVlDQppcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBtYXRjaGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBncm91cCBuYW1lZA0KJ3RpdGxlJywgaWYgdGhlcmUgaXMgbm8gJ3RpdGxlJyBncm91cCBge3RpdGxlfWAgZGVmYXVsdHMgdG8gdGhlIHdob2xlDQpvZiB0aGUgQXNjaWlEb2Mgc2VjdGlvbiB0aXRsZS4gSWYgYDx0ZW1wbGF0ZT5gIGlzIGJsYW5rIHRoZW4gYW55DQpleGlzdGluZyBlbnRyeSB3aXRoIHRoZSBzYW1lIGA8dGl0bGU+YCB3aWxsIGJlIGRlbGV0ZWQuDQoNCi5TcGVjaWFsIHNlY3Rpb24gdGl0bGVzIHZzLiBleHBsaWNpdCB0ZW1wbGF0ZSBuYW1lcw0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpBc2NpaURvYyBoYXMgdHdvIG1lY2hhbmlzbXMgZm9yIHNwZWNpZnlpbmcgbm9uLWRlZmF1bHQgc2VjdGlvbiBtYXJrdXANCnRlbXBsYXRlczogeW91IGNhbiBzcGVjaWZ5IHRoZSB0ZW1wbGF0ZSBuYW1lIGV4cGxpY2l0bHkgKHVzaW5nIHRoZQ0KJ3RlbXBsYXRlJyBhdHRyaWJ1dGUpIG9yIGluZGlyZWN0bHkgKHVzaW5nICdzcGVjaWFsIHNlY3Rpb24gdGl0bGVzJykuDQpTcGVjaWZ5aW5nIGEgPDxYOTMsc2VjdGlvbiB0ZW1wbGF0ZT4+IGF0dHJpYnV0ZSBleHBsaWNpdGx5IGlzDQpwcmVmZXJyZWQuICBBdXRvLW1hZ2ljYWwgJ3NwZWNpYWwgc2VjdGlvbiB0aXRsZXMnIGhhdmUgdGhlIGZvbGxvd2luZw0KZHJhd2JhY2tzOg0KDQotIFRoZXkgYXJlIG5vbi1vYnZpb3VzLCB5b3UgaGF2ZSB0byBrbm93IHRoZSBleGFjdCBtYXRjaGluZw0KICB0aXRsZSBmb3IgZWFjaCBzcGVjaWFsIHNlY3Rpb24gb24gYSBsYW5ndWFnZSBieSBsYW5ndWFnZSBiYXNpcy4NCi0gU2VjdGlvbiB0aXRsZXMgYXJlIHByZWRlZmluZWQgYW5kIGNhbiBvbmx5IGJlIGN1c3RvbWlzZWQgd2l0aCBhDQogIGNvbmZpZ3VyYXRpb24gY2hhbmdlLg0KLSBUaGUgaW1wbGVtZW50YXRpb24gaXMgY29tcGxpY2F0ZWQgYnkgbXVsdGlwbGUgbGFuZ3VhZ2VzOiBldmVyeQ0KICBzcGVjaWFsIHNlY3Rpb24gdGl0bGUgaGFzIHRvIGJlIGRlZmluZWQgZm9yIGVhY2ggbGFuZ3VhZ2UgKGluIGVhY2gNCiAgb2YgdGhlIGBsYW5nLSouY29uZmAgZmlsZXMpLg0KDQpTcGVjaWZ5aW5nIHNwZWNpYWwgc2VjdGlvbiB0ZW1wbGF0ZSBuYW1lcyBleHBsaWNpdGx5IGRvZXMgYWRkIG1vcmUNCm5vaXNlIHRvIHRoZSBzb3VyY2UgZG9jdW1lbnQgKHRoZSAndGVtcGxhdGUnIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiksDQpidXQgdGhlIGludGVudGlvbiBpcyBvYnZpb3VzIGFuZCB0aGUgc3ludGF4IGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlcg0KQXNjaWlEb2MgZWxlbWVudHMgYy5mLiAgYmlibGlvZ3JhcGhpYywgUSZBIGFuZCBnbG9zc2FyeSBsaXN0cy4NCg0KU3BlY2lhbCBzZWN0aW9uIHRpdGxlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBidXQgYXJlIHJldGFpbmVkIGZvcg0KYmFja3dhcmQgY29tcGF0aWJpbGl0eS4NCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCklubGluZSBFbGVtZW50cw0Kfn5+fn5+fn5+fn5+fn5+DQo8PFgzNCxJbmxpbmUgZG9jdW1lbnQgZWxlbWVudHM+PiBhcmUgdXNlZCB0byBmb3JtYXQgdGV4dCBhbmQgdG8NCnBlcmZvcm0gdmFyaW91cyB0eXBlcyBvZiB0ZXh0IHN1YnN0aXR1dGlvbi4gSW5saW5lIGVsZW1lbnRzIGFuZCBpbmxpbmUNCmVsZW1lbnQgc3ludGF4IGlzIGRlZmluZWQgaW4gdGhlIGFzY2lpZG9jKDEpIGNvbmZpZ3VyYXRpb24gZmlsZXMuDQoNCkhlcmUgaXMgYSBsaXN0IG9mIEFzY2lpRG9jIGlubGluZSBlbGVtZW50cyBpbiB0aGUgKGRlZmF1bHQpIG9yZGVyIGluDQp3aGljaCB0aGV5IGFyZSBwcm9jZXNzZWQ6DQoNClNwZWNpYWwgY2hhcmFjdGVyczo6DQogICAgICAgIFRoZXNlIGNoYXJhY3RlciBzZXF1ZW5jZXMgZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB1c2VkIGJ5DQogICAgICAgIHRoZSBiYWNrZW5kIG1hcmt1cCAodHlwaWNhbGx5IGA8YCwgYD5gLCBhbmQgYCZgIGNoYXJhY3RlcnMpLg0KICAgICAgICBTZWUgYFtzcGVjaWFsY2hhcmFjdGVyc11gIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWN0aW9ucy4NCg0KUXVvdGVzOjoNCiAgICAgICAgRWxlbWVudHMgdGhhdCBtYXJrdXAgd29yZHMgYW5kIHBocmFzZXM7IHVzdWFsbHkgZm9yIGNoYXJhY3Rlcg0KICAgICAgICBmb3JtYXR0aW5nLiBTZWUgYFtxdW90ZXNdYCBjb25maWd1cmF0aW9uIGZpbGUgc2VjdGlvbnMuDQoNClNwZWNpYWwgV29yZHM6Og0KICAgICAgICBXb3JkIG9yIHdvcmQgcGhyYXNlIHBhdHRlcm5zIHNpbmdsZWQgb3V0IGZvciBtYXJrdXAgd2l0aG91dA0KICAgICAgICB0aGUgbmVlZCBmb3IgZnVydGhlciBhbm5vdGF0aW9uLiAgU2VlIGBbc3BlY2lhbHdvcmRzXWANCiAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb25zLg0KDQpSZXBsYWNlbWVudHM6Og0KICAgICAgICBFYWNoIHJlcGxhY2VtZW50IGRlZmluZXMgYSB3b3JkIG9yIHdvcmQgcGhyYXNlIHBhdHRlcm4gdG8NCiAgICAgICAgc2VhcmNoIGZvciBhbG9uZyB3aXRoIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnQgdGV4dC4gU2VlDQogICAgICAgIGBbcmVwbGFjZW1lbnRzXWAgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb25zLg0KDQpBdHRyaWJ1dGUgcmVmZXJlbmNlczo6DQogICAgICAgIERvY3VtZW50IGF0dHJpYnV0ZSBuYW1lcyBlbmNsb3NlZCBpbiBicmFjZXMgYXJlIHJlcGxhY2VkIGJ5DQogICAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSB2YWx1ZS4NCg0KSW5saW5lIE1hY3Jvczo6DQogICAgICAgIElubGluZSBtYWNyb3MgYXJlIHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiBwYXJhbWV0cml6ZWQNCiAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb25zLg0KDQoNCkRvY3VtZW50IFByb2Nlc3NpbmcNCi0tLS0tLS0tLS0tLS0tLS0tLS0NClRoZSBBc2NpaURvYyBzb3VyY2UgZG9jdW1lbnQgaXMgcmVhZCBhbmQgcHJvY2Vzc2VkIGFzIGZvbGxvd3M6DQoNCjEuIFRoZSBkb2N1bWVudCAnSGVhZGVyJyBpcyBwYXJzZWQsIGhlYWRlciBwYXJhbWV0ZXIgdmFsdWVzIGFyZQ0KICAgc3Vic3RpdHV0ZWQgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGBbaGVhZGVyXWAgdGVtcGxhdGUgc2VjdGlvbg0KICAgd2hpY2ggaXMgdGhlbiB3cml0dGVuIHRvIHRoZSBvdXRwdXQgZmlsZS4NCjIuIEVhY2ggZG9jdW1lbnQgJ1NlY3Rpb24nIGlzIHByb2Nlc3NlZCBhbmQgaXRzIGNvbnN0aXR1ZW50IGVsZW1lbnRzDQogICB0cmFuc2xhdGVkIHRvIHRoZSBvdXRwdXQgZmlsZS4NCjMuIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgYFtmb290ZXJdYCB0ZW1wbGF0ZSBzZWN0aW9uIGlzIHN1YnN0aXR1dGVkDQogICBhbmQgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGZpbGUuDQoNCldoZW4gYSBibG9jayBlbGVtZW50IGlzIGVuY291bnRlcmVkIGFzY2lpZG9jKDEpIGRldGVybWluZXMgdGhlIHR5cGUgb2YNCmJsb2NrIGJ5IGNoZWNraW5nIGluIHRoZSBmb2xsb3dpbmcgb3JkZXIgKGZpcnN0IHRvIGxhc3QpOiAoc2VjdGlvbikNClRpdGxlcywgQmxvY2tNYWNyb3MsIExpc3RzLCBEZWxpbWl0ZWRCbG9ja3MsIFRhYmxlcywgQXR0cmlidXRlRW50cnlzLA0KQXR0cmlidXRlTGlzdHMsIEJsb2NrVGl0bGVzLCBQYXJhZ3JhcGhzLg0KDQpUaGUgZGVmYXVsdCBwYXJhZ3JhcGggZGVmaW5pdGlvbiBgW3BhcmFkZWYtZGVmYXVsdF1gIGlzIGxhc3QgZWxlbWVudA0KdG8gYmUgY2hlY2tlZC4NCg0KS25vd2luZyB0aGUgcGFyc2luZyBvcmRlciB3aWxsIGhlbHAgeW91IGRldmlzZSB1bmFtYmlndW91cyBtYWNybywgbGlzdA0KYW5kIGJsb2NrIHN5bnRheCBydWxlcy4NCg0KSW5saW5lIHN1YnN0aXR1dGlvbnMgd2l0aGluIGJsb2NrIGVsZW1lbnRzIGFyZSBwZXJmb3JtZWQgaW4gdGhlDQpmb2xsb3dpbmcgZGVmYXVsdCBvcmRlcjoNCg0KMS4gU3BlY2lhbCBjaGFyYWN0ZXJzDQoyLiBRdW90ZXMNCjMuIFNwZWNpYWwgd29yZHMNCjQuIFJlcGxhY2VtZW50cw0KNS4gQXR0cmlidXRlcw0KNi4gSW5saW5lIE1hY3Jvcw0KNy4gUmVwbGFjZW1lbnRzMg0KDQpUaGUgc3Vic3RpdHV0aW9ucyBhbmQgc3Vic3RpdHV0aW9uIG9yZGVyIHBlcmZvcm1lZCBvbg0KVGl0bGUsIFBhcmFncmFwaCBhbmQgRGVsaW1pdGVkQmxvY2sgZWxlbWVudHMgaXMgZGV0ZXJtaW5lZCBieQ0KY29uZmlndXJhdGlvbiBmaWxlIHBhcmFtZXRlcnMuDQoNCg0KVGV4dCBGb3JtYXR0aW5nDQotLS0tLS0tLS0tLS0tLS0NCltbWDUxXV0NClF1b3RlZCBUZXh0DQp+fn5+fn5+fn5+fg0KV29yZHMgYW5kIHBocmFzZXMgY2FuIGJlIGZvcm1hdHRlZCBieSBlbmNsb3NpbmcgaW5saW5lIHRleHQgd2l0aA0KcXVvdGUgY2hhcmFjdGVyczoNCg0KX0VtcGhhc2l6ZWQgdGV4dF86Og0KICAgICAgICBXb3JkIHBocmFzZXMgXCdlbmNsb3NlZCBpbiBzaW5nbGUgcXVvdGUgY2hhcmFjdGVycycgKGFjdXRlDQogICAgICAgIGFjY2VudHMpIG9yIFxfdW5kZXJsaW5lIGNoYXJhY3RlcnNfIGFyZSBlbXBoYXNpemVkLg0KDQoqU3Ryb25nIHRleHQqOjoNCiAgICAgICAgV29yZCBwaHJhc2VzIFwqZW5jbG9zZWQgaW4gYXN0ZXJpc2sgY2hhcmFjdGVycyogYXJlIHJlbmRlcmVkDQogICAgICAgIGluIGEgc3Ryb25nIGZvbnQgKHVzdWFsbHkgYm9sZCkuDQoNCltbWDgxXV0rTW9ub3NwYWNlZCB0ZXh0Kzo6DQogICAgICAgIFdvcmQgcGhyYXNlcyBcK2VuY2xvc2VkIGluIHBsdXMgY2hhcmFjdGVycysgYXJlIHJlbmRlcmVkIGluIGENCiAgICAgICAgbW9ub3NwYWNlZCBmb250LiBXb3JkIHBocmFzZXMgXGBlbmNsb3NlZCBpbiBiYWNrdGljaw0KICAgICAgICBjaGFyYWN0ZXJzYCAoZ3JhdmUgYWNjZW50cykgYXJlIGFsc28gcmVuZGVyZWQgaW4gYSBtb25vc3BhY2VkDQogICAgICAgIGZvbnQgYnV0IGluIHRoaXMgY2FzZSB0aGUgZW5jbG9zZWQgdGV4dCBpcyByZW5kZXJlZCBsaXRlcmFsbHkNCiAgICAgICAgYW5kIGlzIG5vdCBzdWJqZWN0IHRvIGZ1cnRoZXIgZXhwYW5zaW9uIChzZWUgPDxYODAsaW5saW5lDQogICAgICAgIGxpdGVyYWwgcGFzc3Rocm91Z2g+PikuDQoNCmBTaW5nbGUgcXVvdGVkIHRleHQnOjoNCiAgICAgICAgUGhyYXNlcyBlbmNsb3NlZCB3aXRoIGEgXGBzaW5nbGUgZ3JhdmUgYWNjZW50IHRvIHRoZSBsZWZ0IGFuZA0KICAgICAgICBhIHNpbmdsZSBhY3V0ZSBhY2NlbnQgdG8gdGhlIHJpZ2h0JyBhcmUgcmVuZGVyZWQgaW4gc2luZ2xlDQogICAgICAgIHF1b3RhdGlvbiBtYXJrcy4NCg0KYGBEb3VibGUgcXVvdGVkIHRleHQnJzo6DQogICAgICAgIFBocmFzZXMgZW5jbG9zZWQgd2l0aCBcXGBgdHdvIGdyYXZlIGFjY2VudHMgdG8gdGhlIGxlZnQgYW5kDQogICAgICAgIHR3byBhY3V0ZSBhY2NlbnRzIHRvIHRoZSByaWdodCcnIGFyZSByZW5kZXJlZCBpbiBxdW90YXRpb24NCiAgICAgICAgbWFya3MuDQoNCiNVbnF1b3RlZCB0ZXh0Izo6DQogICAgICAgIFBsYWNpbmcgXCNoYXNoZXMgYXJvdW5kIHRleHQjIGRvZXMgbm90aGluZywgaXQgaXMgYSBtZWNoYW5pc20NCiAgICAgICAgdG8gYWxsb3cgaW5saW5lIGF0dHJpYnV0ZXMgdG8gYmUgYXBwbGllZCB0byBvdGhlcndpc2UNCiAgICAgICAgdW5mb3JtYXR0ZWQgdGV4dC4NCg0KTmV3IHF1b3RlIHR5cGVzIGNhbiBiZSBkZWZpbmVkIGJ5IGVkaXRpbmcgYXNjaWlkb2MoMSkgY29uZmlndXJhdGlvbg0KZmlsZXMuIFNlZSB0aGUgPDxYNyxDb25maWd1cmF0aW9uIEZpbGVzPj4gc2VjdGlvbiBmb3IgZGV0YWlscy4NCg0KLlF1b3RlZCB0ZXh0IGJlaGF2aW9yDQotIFF1b3RpbmcgY2Fubm90IGJlIG92ZXJsYXBwZWQuDQotIERpZmZlcmVudCBxdW90aW5nIHR5cGVzIGNhbiBiZSBuZXN0ZWQuDQotIFRvIHN1cHByZXNzIHF1b3RlZCB0ZXh0IGZvcm1hdHRpbmcgcGxhY2UgYSBiYWNrc2xhc2ggY2hhcmFjdGVyDQogIGltbWVkaWF0ZWx5IGluIGZyb250IG9mIHRoZSBsZWFkaW5nIHF1b3RlIGNoYXJhY3RlcihzKS4gSW4gdGhlIGNhc2UNCiAgb2YgYW1iaWd1aXR5IGJldHdlZW4gZXNjYXBlZCBhbmQgbm9uLWVzY2FwZWQgdGV4dCB5b3Ugd2lsbCBuZWVkIHRvDQogIGVzY2FwZSBib3RoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHF1b3RlcywgaW4gdGhlIGNhc2Ugb2YNCiAgbXVsdGktY2hhcmFjdGVyIHF1b3RlcyB5b3UgbWF5IGV2ZW4gbmVlZCB0byBlc2NhcGUgaW5kaXZpZHVhbA0KICBjaGFyYWN0ZXJzLg0KDQpbW1g5Nl1dDQpRdW90ZWQgdGV4dCBhdHRyaWJ1dGVzDQpeXl5eXl5eXl5eXl5eXl5eXl5eXl5eDQpRdW90ZWQgdGV4dCBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhbiA8PFgyMSxhdHRyaWJ1dGUgbGlzdD4+LiAgVGhlIGZpcnN0DQpwb3NpdGlvbmFsIGF0dHJpYnV0ZSAoJ3JvbGUnIGF0dHJpYnV0ZSkgaXMgdHJhbnNsYXRlZCBieSBBc2NpaURvYyB0bw0KYW4gSFRNTCAnc3BhbicgZWxlbWVudCAnY2xhc3MnIGF0dHJpYnV0ZSBvciBhIERvY0Jvb2sgJ3BocmFzZScgZWxlbWVudA0KJ3JvbGUnIGF0dHJpYnV0ZS4NCg0KRG9jQm9vayBYU0wgU3R5bGVzaGVldHMgdHJhbnNsYXRlIERvY0Jvb2sgJ3BocmFzZScgZWxlbWVudHMgd2l0aA0KJ3JvbGUnIGF0dHJpYnV0ZXMgdG8gY29ycmVzcG9uZGluZyBIVE1MICdzcGFuJyBlbGVtZW50cyB3aXRoIHRoZSBzYW1lDQonY2xhc3MnIGF0dHJpYnV0ZXM7IENTUyBjYW4gdGhlbiBiZSB1c2VkDQpodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL1VzaW5nQ1NTLmh0bWxbdG8gc3R5bGUgdGhlDQpnZW5lcmF0ZWQgSFRNTF0uICBUaHVzIENTUyBzdHlsaW5nIGNhbiBiZSBhcHBsaWVkIHRvIGJvdGggRG9jQm9vayBhbmQNCkFzY2lpRG9jIGdlbmVyYXRlZCBIVE1MIG91dHB1dHMuICBZb3UgY2FuIGFsc28gc3BlY2lmeSBtdWx0aXBsZSBjbGFzcw0KbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4NCg0KQ1NTIHJ1bGVzIGZvciB0ZXh0IGNvbG9yLCB0ZXh0IGJhY2tncm91bmQgY29sb3IsIHRleHQgc2l6ZSBhbmQgdGV4dA0KZGVjb3JhdG9ycyBhcmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGVkIEFzY2lpRG9jIENTUyBmaWxlcyBhbmQgYXJlDQp1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggQXNjaWlEb2MgJ3hodG1sMTEnLCAnaHRtbDUnIGFuZCAnZG9jYm9vaycNCm91dHB1dHMuIFRoZSBDU1MgY2xhc3MgbmFtZXMgYXJlOg0KDQotICc8Y29sb3I+JyAodGV4dCBmb3JlZ3JvdW5kIGNvbG9yKS4NCi0gJzxjb2xvcj4tYmFja2dyb3VuZCcgKHRleHQgYmFja2dyb3VuZCBjb2xvcikuDQotICdiaWcnIGFuZCAnc21hbGwnICh0ZXh0IHNpemUpLg0KLSAndW5kZXJsaW5lJywgJ292ZXJsaW5lJyBhbmQgJ2xpbmUtdGhyb3VnaCcgKHN0cmlrZSB0aHJvdWdoKSB0ZXh0DQogIGRlY29yYXRvcnMuDQoNCldoZXJlICc8Y29sb3I+JyBjYW4gYmUgYW55IG9mIHRoZQ0KaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJfY29sb3JzI0hUTUxfY29sb3JfbmFtZXNbc2l4dGVlbiBIVE1MDQpjb2xvciBuYW1lc10uICBFeGFtcGxlczoNCg0KICBbcmVkXSNPYnZpb3VzIyBhbmQgW2JpZyByZWQgeWVsbG93LWJhY2tncm91bmRdKnZlcnkgb2J2aW91cyouDQoNCiAgW3VuZGVybGluZV0jVW5kZXJsaW5lIHRleHQjLCBbb3ZlcmxpbmVdI292ZXJsaW5lIHRleHQjIGFuZA0KICBbYmx1ZSBsaW5lLXRocm91Z2hdKmJvbGQgYmx1ZSBhbmQgbGluZS10aHJvdWdoKi4NCg0KaXMgcmVuZGVyZWQgYXM6DQoNCltyZWRdI09idmlvdXMjIGFuZCBbYmlnIHJlZCB5ZWxsb3ctYmFja2dyb3VuZF0qdmVyeSBvYnZpb3VzKi4NCg0KW3VuZGVybGluZV0jVW5kZXJsaW5lIHRleHQjLCBbb3ZlcmxpbmVdI292ZXJsaW5lIHRleHQjIGFuZA0KW2JvbGQgYmx1ZSBsaW5lLXRocm91Z2hdKmJvbGQgYmx1ZSBhbmQgbGluZS10aHJvdWdoKi4NCg0KTk9URTogQ29sb3IgYW5kIHRleHQgZGVjb3JhdG9yIGF0dHJpYnV0ZXMgYXJlIHJlbmRlcmVkIGZvciBYSFRNTCBhbmQNCkhUTUwgNSBvdXRwdXRzIHVzaW5nIENTUyBzdHlsZXNoZWV0cy4gIFRoZSBtZWNoYW5pc20gdG8gaW1wbGVtZW50DQpjb2xvciBhbmQgdGV4dCBkZWNvcmF0b3IgYXR0cmlidXRlcyBpcyBwcm92aWRlZCBmb3IgRG9jQm9vayB0b29sY2hhaW5zDQp2aWEgdGhlIERvY0Jvb2sgJ3BocmFzZScgZWxlbWVudCAncm9sZScgYXR0cmlidXRlLCBidXQgdGhlIGFjdHVhbA0KcmVuZGVyaW5nIGlzIHRvb2xjaGFpbiBzcGVjaWZpYyBhbmQgaXMgbm90IHBhcnQgb2YgdGhlIEFzY2lpRG9jDQpkaXN0cmlidXRpb24uDQoNCltbWDUyXV0NCkNvbnN0cmFpbmVkIGFuZCBVbmNvbnN0cmFpbmVkIFF1b3Rlcw0KXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eDQpUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIHR5cGVzIG9mIHF1b3RlczoNCg0KQ29uc3RyYWluZWQgcXVvdGVzDQorKysrKysrKysrKysrKysrKysNClF1b3RlZCBtdXN0IGJlIGJvdW5kZWQgYnkgd2hpdGUgc3BhY2Ugb3IgY29tbW9ubHkgYWRqb2luaW5nDQpwdW5jdHVhdGlvbiBjaGFyYWN0ZXJzLiBUaGVzZSBhcmUgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCB0eXBlIG9mDQpxdW90ZS4NCg0KVW5jb25zdHJhaW5lZCBxdW90ZXMNCisrKysrKysrKysrKysrKysrKysrDQpVbmNvbnN0cmFpbmVkIHF1b3RlcyBoYXZlIG5vIGJvdW5kYXJ5IGNvbnN0cmFpbnRzIGFuZCBjYW4gYmUgcGxhY2VkDQphbnl3aGVyZSB3aXRoaW4gaW5saW5lIHRleHQuIEZvciBjb25zaXN0ZW5jeSBhbmQgdG8gbWFrZSB0aGVtIGVhc2llcg0KdG8gcmVtZW1iZXIgdW5jb25zdHJhaW5lZCBxdW90ZXMgYXJlIGRvdWJsZS11cHMgb2YgdGhlIGBfYCwgYCpgLCBgK2ANCmFuZCBgI2AgY29uc3RyYWluZWQgcXVvdGVzOg0KDQogIF9fdW5jb25zdHJhaW5lZCBlbXBoYXNpemVkIHRleHRfXw0KICAqKnVuY29uc3RyYWluZWQgc3Ryb25nIHRleHQqKg0KICArK3VuY29uc3RyYWluZWQgbW9ub3NwYWNlZCB0ZXh0KysNCiAgIyN1bmNvbnN0cmFpbmVkIHVucXVvdGVkIHRleHQjIw0KDQpUaGUgZm9sbG93aW5nIGV4YW1wbGUgZW1ib2xkZW5zIHRoZSBsZXR0ZXIgRjoNCg0KICAqKkYqKmlsZSBPcGVuLi4uDQoNClN1cGVyc2NyaXB0cyBhbmQgU3Vic2NyaXB0cw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpQdXQgXF5jYXJldHMgb24gZWl0aGVyXiBzaWRlIG9mIHRoZSB0ZXh0IHRvIGJlIHN1cGVyc2NyaXB0ZWQsIHB1dA0KXH50aWxkZXMgb24gZWl0aGVyIHNpZGV+IG9mIHRleHQgdG8gYmUgc3Vic2NyaXB0ZWQuICBGb3IgZXhhbXBsZSwgdGhlDQpmb2xsb3dpbmcgbGluZToNCg0KICBlXiYjOTYwO2leKzEgPSAwLiBIfjJ+TyBhbmQgeF4xMF4uIFNvbWUgXnN1cGVyIHRleHReDQogIGFuZCB+c29tZSBzdWIgdGV4dH4NCg0KSXMgcmVuZGVyZWQgbGlrZToNCg0KZV4mIzk2MDtpXisxID0gMC4gSH4yfk8gYW5kIHheMTBeLiBTb21lIF5zdXBlciB0ZXh0Xg0KYW5kIH5zb21lIHN1YiB0ZXh0fg0KDQpTdXBlcnNjcmlwdHMgYW5kIHN1YnNjcmlwdHMgYXJlIGltcGxlbWVudGVkIGFzIDw8WDUyLHVuY29uc3RyYWluZWQNCnF1b3Rlcz4+IGFuZCB0aGV5IGNhbiBiZSBlc2NhcGVkIHdpdGggYSBsZWFkaW5nIGJhY2tzbGFzaCBhbmQgcHJlZml4ZWQNCndpdGggd2l0aCBhbiBhdHRyaWJ1dGUgbGlzdC4NCg0KTGluZSBCcmVha3MNCn5+fn5+fn5+fn5+DQpBIHBsdXMgY2hhcmFjdGVyIHByZWNlZGVkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZA0Kb2YgYSBub24tYmxhbmsgbGluZSBmb3JjZXMgYSBsaW5lIGJyZWFrLiBJdCBnZW5lcmF0ZXMgYSBsaW5lIGJyZWFrDQooYGJyYCkgdGFnIGZvciBIVE1MIG91dHB1dHMgYW5kIGEgY3VzdG9tIFhNTCBgYXNjaWlkb2MtYnJgIHByb2Nlc3NpbmcNCmluc3RydWN0aW9uIGZvciBEb2NCb29rIG91dHB1dHMuIFRoZSBgYXNjaWlkb2MtYnJgIHByb2Nlc3NpbmcNCmluc3RydWN0aW9uIGlzIGhhbmRsZWQgYnkgPDxYNDMsYTJ4KDEpPj4uDQoNClBhZ2UgQnJlYWtzDQp+fn5+fn5+fn5+fg0KQSBsaW5lIG9mIHRocmVlIG9yIG1vcmUgbGVzcy10aGFuIChgPDw8YCkgY2hhcmFjdGVycyB3aWxsIGdlbmVyYXRlIGENCmhhcmQgcGFnZSBicmVhayBpbiBEb2NCb29rIGFuZCBwcmludGVkIEhUTUwgb3V0cHV0cy4gIEl0IHVzZXMgdGhlIENTUw0KYHBhZ2UtYnJlYWstYWZ0ZXJgIHByb3BlcnR5IGZvciBIVE1MIG91dHB1dHMgYW5kIGEgY3VzdG9tIFhNTA0KYGFzY2lpZG9jLXBhZ2VicmVha2AgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBmb3IgRG9jQm9vayBvdXRwdXRzLiBUaGUNCmBhc2NpaWRvYy1wYWdlYnJlYWtgIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gaXMgaGFuZGxlZCBieQ0KPDxYNDMsYTJ4KDEpPj4uIEhhcmQgcGFnZSBicmVha3MgYXJlIHNvbWV0aW1lcyBoYW5keSBidXQgYXMgYSBnZW5lcmFsDQpydWxlIHlvdSBzaG91bGQgbGV0IHlvdXIgcGFnZSBwcm9jZXNzb3IgZ2VuZXJhdGUgcGFnZSBicmVha3MgZm9yIHlvdS4NCg0KUnVsZXJzDQp+fn5+fn4NCkEgbGluZSBvZiB0aHJlZSBvciBtb3JlIGFwb3N0cm9waGUgY2hhcmFjdGVycyB3aWxsIGdlbmVyYXRlIGEgcnVsZXINCmxpbmUuICBJdCBnZW5lcmF0ZXMgYSBydWxlciAoYGhyYCkgdGFnIGZvciBIVE1MIG91dHB1dHMgYW5kIGEgY3VzdG9tDQpYTUwgYGFzY2lpZG9jLWhyYCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGZvciBEb2NCb29rIG91dHB1dHMuIFRoZQ0KYGFzY2lpZG9jLWhyYCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGlzIGhhbmRsZWQgYnkgPDxYNDMsYTJ4KDEpPj4uDQoNClRhYnMNCn5+fn4NCkJ5IGRlZmF1bHQgdGFiIGNoYXJhY3RlcnMgaW5wdXQgZmlsZXMgd2lsbCB0cmFuc2xhdGVkIHRvIDggc3BhY2VzLiBUYWINCmV4cGFuc2lvbiBpcyBzZXQgd2l0aCB0aGUgJ3RhYnNpemUnIGVudHJ5IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUNCmBbbWlzY2VsbGFuZW91c11gIHNlY3Rpb24gYW5kIGNhbiBiZSBvdmVycmlkZGVuIGluIGluY2x1ZGVkIGZpbGVzIGJ5DQpzZXR0aW5nIGEgJ3RhYnNpemUnIGF0dHJpYnV0ZSBpbiB0aGUgYGluY2x1ZGVgIG1hY3JvJ3MgYXR0cmlidXRlIGxpc3QuDQpGb3IgZXhhbXBsZToNCg0KICBpbmNsdWRlOjphZGRlbmR1bS50eHRbdGFic2l6ZT0yXQ0KDQpUaGUgdGFiIHNpemUgY2FuIGFsc28gYmUgc2V0IHVzaW5nIHRoZSBhdHRyaWJ1dGUgY29tbWFuZC1saW5lIG9wdGlvbiwNCmZvciBleGFtcGxlIGAtLWF0dHJpYnV0ZSB0YWJzaXplPTRgDQoNClJlcGxhY2VtZW50cw0Kfn5+fn5+fn5+fn5+DQpUaGUgZm9sbG93aW5nIHJlcGxhY2VtZW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgZGVmYXVsdCBBc2NpaURvYw0KY29uZmlndXJhdGlvbjoNCg0KICAoQykgY29weXJpZ2h0LCAoVE0pIHRyYWRlbWFyaywgKFIpIHJlZ2lzdGVyZWQgdHJhZGVtYXJrLA0KICAtLSBlbSBkYXNoLCAuLi4gZWxsaXBzaXMsIC0+IHJpZ2h0IGFycm93LCA8LSBsZWZ0IGFycm93LCA9PiByaWdodA0KICBkb3VibGUgYXJyb3csIDw9IGxlZnQgZG91YmxlIGFycm93Lg0KDQpXaGljaCBhcmUgcmVuZGVyZWQgYXM6DQoNCihDKSBjb3B5cmlnaHQsIChUTSkgdHJhZGVtYXJrLCAoUikgcmVnaXN0ZXJlZCB0cmFkZW1hcmssDQotLSBlbSBkYXNoLCAuLi4gZWxsaXBzaXMsIC0+IHJpZ2h0IGFycm93LCA8LSBsZWZ0IGFycm93LCA9PiByaWdodA0KZG91YmxlIGFycm93LCA8PSBsZWZ0IGRvdWJsZSBhcnJvdy4NCg0KWW91IGNhbiBhbHNvIGluY2x1ZGUgYXJiaXRyYXJ5IGVudGl0eSByZWZlcmVuY2VzIGluIHRoZSBBc2NpaURvYw0Kc291cmNlLiBFeGFtcGxlczoNCg0KICAmI3gyNzhhOyAmIzE4MjsNCg0KcmVuZGVyczoNCg0KJiN4Mjc4YTsgJiMxODI7DQoNClRvIHJlbmRlciBhIHJlcGxhY2VtZW50IGxpdGVyYWxseSBlc2NhcGUgaXQgd2l0aCBhIGxlYWRpbmcgYmFjay1zbGFzaC4NCg0KVGhlIDw8WDcsQ29uZmlndXJhdGlvbiBGaWxlcz4+IHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIGNvbmZpZ3VyZSB5b3VyDQpvd24gcmVwbGFjZW1lbnRzLg0KDQpTcGVjaWFsIFdvcmRzDQp+fn5+fn5+fn5+fn5+DQpXb3JkcyBkZWZpbmVkIGluIGBbc3BlY2lhbHdvcmRzXWAgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb25zIGFyZQ0KYXV0b21hdGljYWxseSBtYXJrZWQgdXAgd2l0aG91dCBoYXZpbmcgdG8gYmUgZXhwbGljaXRseSBub3RhdGVkLg0KDQpUaGUgPDxYNyxDb25maWd1cmF0aW9uIEZpbGVzPj4gc2VjdGlvbiBleHBsYWlucyBob3cgdG8gYWRkIGFuZCByZXBsYWNlDQpzcGVjaWFsIHdvcmRzLg0KDQoNCltbWDE3XV0NClRpdGxlcw0KLS0tLS0tDQpEb2N1bWVudCBhbmQgc2VjdGlvbiB0aXRsZXMgY2FuIGJlIGluIGVpdGhlciBvZiB0d28gZm9ybWF0czoNCg0KVHdvIGxpbmUgdGl0bGVzDQp+fn5+fn5+fn5+fn5+fn4NCkEgdHdvIGxpbmUgdGl0bGUgY29uc2lzdHMgb2YgYSB0aXRsZSBsaW5lLCBzdGFydGluZyBoYXJkIGFnYWluc3QgdGhlDQpsZWZ0IG1hcmdpbiwgYW5kIGFuIHVuZGVybGluZS4gU2VjdGlvbiB1bmRlcmxpbmVzIGNvbnNpc3QgYSByZXBlYXRlZA0KY2hhcmFjdGVyIHBhaXJzIHNwYW5uaW5nIHRoZSB3aWR0aCBvZiB0aGUgcHJlY2VkaW5nIHRpdGxlIChnaXZlIG9yDQp0YWtlIHVwIHRvIHR3byBjaGFyYWN0ZXJzKToNCg0KVGhlIGRlZmF1bHQgdGl0bGUgdW5kZXJsaW5lcyBmb3IgZWFjaCBvZiB0aGUgZG9jdW1lbnQgbGV2ZWxzIGFyZToNCg0KDQogIExldmVsIDAgKHRvcCBsZXZlbCk6ICAgICA9PT09PT09PT09PT09PT09PT09PT09DQogIExldmVsIDE6ICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIExldmVsIDI6ICAgICAgICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQogIExldmVsIDM6ICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eDQogIExldmVsIDQgKGJvdHRvbSBsZXZlbCk6ICArKysrKysrKysrKysrKysrKysrKysrDQoNCkV4YW1wbGVzOg0KDQogIExldmVsIE9uZSBTZWN0aW9uIFRpdGxlDQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiAgTGV2ZWwgMiBTdWJzZWN0aW9uIFRpdGxlDQogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KDQpbW1g0Nl1dDQpPbmUgbGluZSB0aXRsZXMNCn5+fn5+fn5+fn5+fn5+fg0KT25lIGxpbmUgdGl0bGVzIGNvbnNpc3Qgb2YgYSBzaW5nbGUgbGluZSBkZWxpbWl0ZWQgb24gZWl0aGVyIHNpZGUgYnkNCm9uZSBvciBtb3JlIGVxdWFscyBjaGFyYWN0ZXJzICh0aGUgbnVtYmVyIG9mIGVxdWFscyBjaGFyYWN0ZXJzDQpjb3JyZXNwb25kcyB0byB0aGUgc2VjdGlvbiBsZXZlbCBtaW51cyBvbmUpLiAgSGVyZSBhcmUgc29tZSBleGFtcGxlczoNCg0KICA9IERvY3VtZW50IFRpdGxlIChsZXZlbCAwKSA9DQogID09IFNlY3Rpb24gdGl0bGUgKGxldmVsIDEpID09DQogID09PSBTZWN0aW9uIHRpdGxlIChsZXZlbCAyKSA9PT0NCiAgPT09PSBTZWN0aW9uIHRpdGxlIChsZXZlbCAzKSA9PT09DQogID09PT09IFNlY3Rpb24gdGl0bGUgKGxldmVsIDQpID09PT09DQoNCltOT1RFXQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotIE9uZSBvciBtb3JlIHNwYWNlcyBtdXN0IGZhbGwgYmV0d2VlbiB0aGUgdGl0bGUgYW5kIHRoZSBkZWxpbWl0ZXJzLg0KLSBUaGUgdHJhaWxpbmcgdGl0bGUgZGVsaW1pdGVyIGlzIG9wdGlvbmFsLg0KLSBUaGUgb25lLWxpbmUgdGl0bGUgc3ludGF4IGNhbiBiZSBjaGFuZ2VkIGJ5IGVkaXRpbmcgdGhlDQogIGNvbmZpZ3VyYXRpb24gZmlsZSBgW3RpdGxlc11gIHNlY3Rpb24gYHNlY3QwYC4uLmBzZWN0NGAgZW50cmllcy4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpGbG9hdGluZyB0aXRsZXMNCn5+fn5+fn5+fn5+fn5+fg0KU2V0dGluZyB0aGUgdGl0bGUncyBmaXJzdCBwb3NpdGlvbmFsIGF0dHJpYnV0ZSBvciAnc3R5bGUnIGF0dHJpYnV0ZSB0bw0KJ2Zsb2F0JyBnZW5lcmF0ZXMgYSBmcmVlLWZsb2F0aW5nIHRpdGxlLiBBIGZyZWUtZmxvYXRpbmcgdGl0bGUgaXMNCnJlbmRlcmVkIGp1c3QgbGlrZSBhIG5vcm1hbCBzZWN0aW9uIHRpdGxlIGJ1dCBpcyBub3QgZm9ybWFsbHkNCmFzc29jaWF0ZWQgd2l0aCBhIHRleHQgYm9keSBhbmQgaXMgbm90IHBhcnQgb2YgdGhlIHJlZ3VsYXIgc2VjdGlvbg0KaGllcmFyY2h5IHNvIHRoZSBub3JtYWwgb3JkZXJpbmcgcnVsZXMgZG8gbm90IGFwcGx5LiBGbG9hdGluZyB0aXRsZXMNCmNhbiBhbHNvIGJlIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgc2VjdGlvbiB0aXRsZXMgYXJlIGlsbGVnYWw6IGZvcg0KZXhhbXBsZSBzaWRlYmFyIGFuZCBhZG1vbml0aW9uIGJsb2Nrcy4gIEV4YW1wbGU6DQoNCiAgW2Zsb2F0XQ0KICBUaGUgc2Vjb25kIGRheQ0KICB+fn5+fn5+fn5+fn5+fg0KDQpGbG9hdGluZyB0aXRsZXMgZG8gbm90IGFwcGVhciBpbiBhIGRvY3VtZW50J3MgdGFibGUgb2YgY29udGVudHMuDQoNCg0KW1tYNDJdXQ0KQmxvY2sgVGl0bGVzDQotLS0tLS0tLS0tLS0NCkEgJ0Jsb2NrVGl0bGUnIGVsZW1lbnQgaXMgYSBzaW5nbGUgbGluZSBiZWdpbm5pbmcgd2l0aCBhIHBlcmlvZA0KZm9sbG93ZWQgYnkgdGhlIHRpdGxlIHRleHQuIEEgQmxvY2tUaXRsZSBpcyBhcHBsaWVkIHRvIHRoZSBpbW1lZGlhdGVseQ0KZm9sbG93aW5nIFBhcmFncmFwaCwgRGVsaW1pdGVkQmxvY2ssIExpc3QsIFRhYmxlIG9yIEJsb2NrTWFjcm8uIEZvcg0KZXhhbXBsZToNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQouTm90ZXMNCi0gTm90ZSAxLg0KLSBOb3RlIDIuDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KaXMgcmVuZGVyZWQgYXM6DQoNCi5Ob3Rlcw0KLSBOb3RlIDEuDQotIE5vdGUgMi4NCg0KDQpbW1g0MV1dDQpCbG9ja0lkIEVsZW1lbnQNCi0tLS0tLS0tLS0tLS0tLQ0KQSAnQmxvY2tJZCcgaXMgYSBzaW5nbGUgbGluZSBibG9jayBlbGVtZW50IGNvbnRhaW5pbmcgYSB1bmlxdWUNCmlkZW50aWZpZXIgZW5jbG9zZWQgaW4gZG91YmxlIHNxdWFyZSBicmFja2V0cy4gSXQgaXMgdXNlZCB0byBhc3NpZ24gYW4NCmlkZW50aWZpZXIgdG8gdGhlIGVuc3VpbmcgYmxvY2sgZWxlbWVudC4gRm9yIGV4YW1wbGU6DQoNCiAgW1tjaGFwdGVyLXRpdGxlc11dDQogIENoYXB0ZXIgdGl0bGVzIGNhbiBiZSAuLi4NCg0KVGhlIHByZWNlZGluZyBleGFtcGxlIGlkZW50aWZpZXMgdGhlIGVuc3VpbmcgcGFyYWdyYXBoIHNvIGl0IGNhbiBiZQ0KcmVmZXJlbmNlZCBmcm9tIG90aGVyIGxvY2F0aW9ucywgZm9yIGV4YW1wbGUgd2l0aA0KYDw8Y2hhcHRlci10aXRsZXMsY2hhcHRlciB0aXRsZXM+PmAuDQoNCidCbG9ja0lkJyBlbGVtZW50cyBjYW4gYmUgYXBwbGllZCB0byBUaXRsZSwgUGFyYWdyYXBoLCBMaXN0LA0KRGVsaW1pdGVkQmxvY2ssIFRhYmxlIGFuZCBCbG9ja01hY3JvIGVsZW1lbnRzLiAgVGhlIEJsb2NrSWQgZWxlbWVudA0Kc2V0cyB0aGUgYHtpZH1gIGF0dHJpYnV0ZSBmb3Igc3Vic3RpdHV0aW9uIGluIHRoZSBzdWJzZXF1ZW50IGJsb2NrJ3MNCm1hcmt1cCB0ZW1wbGF0ZS4gSWYgYSBzZWNvbmQgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBzdXBwbGllZCBpdCBzZXRzDQp0aGUgYHtyZWZ0ZXh0fWAgYXR0cmlidXRlIHdoaWNoIGlzIHVzZWQgdG8gc2V0IHRoZSBEb2NCb29rIGB4cmVmbGFiZWxgDQphdHRyaWJ1dGUuDQoNClRoZSAnQmxvY2tJZCcgZWxlbWVudCBoYXMgdGhlIHNhbWUgc3ludGF4IGFuZCBzZXJ2ZXMgdGhlIHNhbWUgZnVuY3Rpb24NCnRvIHRoZSA8PFgzMCxhbmNob3IgaW5saW5lIG1hY3JvPj4uDQoNCltbWDc5XV0NCkF0dHJpYnV0ZUxpc3QgRWxlbWVudA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpBbiAnQXR0cmlidXRlTGlzdCcgYmxvY2sgZWxlbWVudCBpcyBhbiA8PFgyMSxhdHRyaWJ1dGUgbGlzdD4+IG9uIGENCmxpbmUgYnkgaXRzZWxmOg0KDQotICdBdHRyaWJ1dGVMaXN0JyBhdHRyaWJ1dGVzIGFyZSBvbmx5IGFwcGxpZWQgdG8gdGhlIGltbWVkaWF0ZWx5DQogIGZvbGxvd2luZyBibG9jayBlbGVtZW50IC0tIHRoZSBhdHRyaWJ1dGVzIGFyZSBtYWRlIGF2YWlsYWJsZSB0byB0aGUNCiAgYmxvY2sncyBtYXJrdXAgdGVtcGxhdGUuDQotIE11bHRpcGxlIGNvbnRpZ3VvdXMgJ0F0dHJpYnV0ZUxpc3QnIGVsZW1lbnRzIGFyZSBhZGRpdGl2ZWx5IGNvbWJpbmVkDQogIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhci4uDQotIFRoZSBmaXJzdCBwb3NpdGlvbmFsIGF0dHJpYnV0ZSBpbiB0aGUgbGlzdCBpcyBvZnRlbiB1c2VkIHRvIHNwZWNpZnkNCiAgdGhlIGVuc3VpbmcgZWxlbWVudCdzIDw8WDIzLHN0eWxlPj4uDQoNCkF0dHJpYnV0ZSB2YWx1ZSBzdWJzdGl0dXRpb24NCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCkJ5IGRlZmF1bHQsIG9ubHkgc3Vic3RpdHV0aW9ucyB0aGF0IHRha2UgcGxhY2UgaW5zaWRlIGF0dHJpYnV0ZSBsaXN0DQp2YWx1ZXMgYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGlzIGlzIGJlY2F1c2Ugbm90IGFsbCBhdHRyaWJ1dGVzDQphcmUgZGVzdGluZWQgdG8gYmUgbWFya2VkIHVwIGFuZCByZW5kZXJlZCBhcyB0ZXh0IChmb3IgZXhhbXBsZSB0aGUNCnRhYmxlICdjb2xzJyBhdHRyaWJ1dGUpLiBUbyBwZXJmb3JtIG5vcm1hbCBpbmxpbmUgdGV4dCBzdWJzdGl0dXRpb25zDQooc3BlY2lhbCBjaGFyYWN0ZXJzLCBxdW90ZXMsIG1hY3JvcywgcmVwbGFjZW1lbnRzKSBvbiBhbiBhdHRyaWJ1dGUNCnZhbHVlIHlvdSBuZWVkIHRvIGVuY2xvc2UgaXQgaW4gc2luZ2xlIHF1b3Rlcy4gSW4gdGhlIGZvbGxvd2luZyBxdW90ZQ0KYmxvY2sgdGhlIHNlY29uZCBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIEF0dHJpYnV0ZUxpc3QgaXMgcXVvdGVkIHRvDQplbnN1cmUgdGhlICdodHRwJyBtYWNybyBpcyBleHBhbmRlZCB0byBhIGh5cGVybGluay4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpbcXVvdGUsJ2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2FtdWVsX0pvaG5zb25bU2FtdWVsIEpvaG5zb25dJ10NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KU2lyLCBhIHdvbWFuJ3MgcHJlYWNoaW5nIGlzIGxpa2UgYSBkb2cncyB3YWxraW5nIG9uIGhpcyBoaW5kIGxlZ3MuIEl0DQppcyBub3QgZG9uZSB3ZWxsOyBidXQgeW91IGFyZSBzdXJwcmlzZWQgdG8gZmluZCBpdCBkb25lIGF0IGFsbC4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkNvbW1vbiBhdHRyaWJ1dGVzDQp+fn5+fn5+fn5+fn5+fn5+fg0KTW9zdCBibG9jayBlbGVtZW50cyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoNCg0KW2NvbHM9IjFlLDEsNWEiLGZyYW1lPSJ0b3Bib3QiLG9wdGlvbnM9ImhlYWRlciJdDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCnxOYW1lIHxCYWNrZW5kcyB8RGVzY3JpcHRpb24NCg0KfGlkIHxodG1sNCwgaHRtbDUsIHhodG1sMTEsIGRvY2Jvb2sgfA0KVW5pcXVlIGlkZW50aWZpZXIgdHlwaWNhbGx5IHNlcnZlIGFzIGxpbmsgdGFyZ2V0cy4NCkNhbiBhbHNvIGJlIHNldCBieSB0aGUgJ0Jsb2NrSWQnIGVsZW1lbnQuDQoNCnxyb2xlIHxodG1sNCwgaHRtbDUsIHhodG1sMTEsIGRvY2Jvb2sgfA0KUm9sZSBjb250YWlucyBhIHN0cmluZyB1c2VkIHRvIGNsYXNzaWZ5IG9yIHN1YmNsYXNzaWZ5IGFuIGVsZW1lbnQgYW5kDQpjYW4gYmUgYXBwbGllZCB0byBBc2NpaURvYyBibG9jayBlbGVtZW50cy4gIFRoZSBBc2NpaURvYyAncm9sZScNCmF0dHJpYnV0ZSBpcyB0cmFuc2xhdGVkIHRvIHRoZSAncm9sZScgYXR0cmlidXRlIGluIERvY0Jvb2sgb3V0cHV0cyBhbmQNCmlzIGluY2x1ZGVkIGluIHRoZSAnY2xhc3MnIGF0dHJpYnV0ZSBpbiBIVE1MIG91dHB1dHMsIGluIHRoaXMgcmVzcGVjdA0KaXQgYmVoYXZlcyBsaWtlIHRoZSA8PFg5NixxdW90ZWQgdGV4dCByb2xlIGF0dHJpYnV0ZT4+Lg0KDQpEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyB0cmFuc2xhdGUgRG9jQm9vayAncm9sZScgYXR0cmlidXRlcyB0byBIVE1MDQonY2xhc3MnIGF0dHJpYnV0ZXM7IENTUyBjYW4gdGhlbiBiZSB1c2VkDQpodHRwOi8vd3d3LnNhZ2VoaWxsLm5ldC9kb2Nib29reHNsL1VzaW5nQ1NTLmh0bWxbdG8gc3R5bGUgdGhlDQpnZW5lcmF0ZWQgSFRNTF0uDQoNCnxyZWZ0ZXh0IHxkb2Nib29rIHwNCidyZWZ0ZXh0JyBpcyB1c2VkIHRvIHNldCB0aGUgRG9jQm9vayAneHJlZmxhYmVsJyBhdHRyaWJ1dGUuDQpUaGUgJ3JlZnRleHQnIGF0dHJpYnV0ZSBjYW4gYW4gYWxzbyBiZSBzZXQgYnkgdGhlICdCbG9ja0lkJyBlbGVtZW50Lg0KDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KDQpQYXJhZ3JhcGhzDQotLS0tLS0tLS0tDQpQYXJhZ3JhcGhzIGFyZSBibG9ja3Mgb2YgdGV4dCB0ZXJtaW5hdGVkIGJ5IGEgYmxhbmsgbGluZSwgdGhlIGVuZCBvZg0KZmlsZSwgb3IgdGhlIHN0YXJ0IG9mIGEgZGVsaW1pdGVkIGJsb2NrIG9yIGEgbGlzdC4gIFRoZXJlIGFyZSB0aHJlZQ0KcGFyYWdyYXBoIHN5bnRheGVzOiBub3JtYWwsIGluZGVudGVkIChsaXRlcmFsKSBhbmQgYWRtb25pdGlvbiB3aGljaA0KYXJlIHJlbmRlcmVkLCBieSBkZWZhdWx0LCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFncmFwaCBzdHlsZS4NCg0KRWFjaCBzeW50YXggaGFzIGEgZGVmYXVsdCBzdHlsZSwgYnV0IHlvdSBjYW4gZXhwbGljaXRseSBhcHBseSBhbnkNCnBhcmFncmFwaCBzdHlsZSB0byBhbnkgcGFyYWdyYXBoIHN5bnRheC4gWW91IGNhbiBhbHNvIGFwcGx5DQo8PFgxMDQsZGVsaW1pdGVkIGJsb2NrPj4gc3R5bGVzIHRvIHNpbmdsZSBwYXJhZ3JhcGhzLg0KDQpUaGUgYnVpbHQtaW4gcGFyYWdyYXBoIHN0eWxlcyBhcmU6ICdub3JtYWwnLCAnbGl0ZXJhbCcsICd2ZXJzZScsDQoncXVvdGUnLCAnbGlzdGluZycsICdUSVAnLCAnTk9URScsICdJTVBPUlRBTlQnLCAnV0FSTklORycsICdDQVVUSU9OJywNCidhYnN0cmFjdCcsICdwYXJ0aW50cm8nLCAnY29tbWVudCcsICdleGFtcGxlJywgJ3NpZGViYXInLCAnc291cmNlJywNCidtdXNpYycsICdsYXRleCcsICdncmFwaHZpeicuDQoNCm5vcm1hbCBwYXJhZ3JhcGggc3ludGF4DQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KTm9ybWFsIHBhcmFncmFwaCBzeW50YXggY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgbm9uLWJsYW5rIGxpbmVzIG9mDQp0ZXh0LiBUaGUgZmlyc3QgbGluZSBtdXN0IHN0YXJ0IGhhcmQgYWdhaW5zdCB0aGUgbGVmdCBtYXJnaW4gKG5vDQppbnRlcnZlbmluZyB3aGl0ZSBzcGFjZSkuIFRoZSBkZWZhdWx0IHByb2Nlc3NpbmcgZXhwZWN0YXRpb24gaXMgdGhhdA0Kb2YgYSBub3JtYWwgcGFyYWdyYXBoIG9mIHRleHQuDQoNCltbWDg1XV0NCmxpdGVyYWwgcGFyYWdyYXBoIHN5bnRheA0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpMaXRlcmFsIHBhcmFncmFwaHMgYXJlIHJlbmRlcmVkIHZlcmJhdGltIGluIGEgbW9ub3NwYWNlZCBmb250IHdpdGhvdXQNCmFueSBkaXN0aW5ndWlzaGluZyBiYWNrZ3JvdW5kIG9yIGJvcmRlci4gIEJ5IGRlZmF1bHQgdGhlcmUgaXMgbm8gdGV4dA0KZm9ybWF0dGluZyBvciBzdWJzdGl0dXRpb25zIHdpdGhpbiBMaXRlcmFsIHBhcmFncmFwaHMgYXBhcnQgZnJvbQ0KU3BlY2lhbCBDaGFyYWN0ZXJzIGFuZCBDYWxsb3V0cy4NCg0KVGhlICdsaXRlcmFsJyBzdHlsZSBpcyBhcHBsaWVkIGltcGxpY2l0bHkgdG8gaW5kZW50ZWQgcGFyYWdyYXBocyBpLmUuDQp3aGVyZSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgcGFyYWdyYXBoIGlzIGluZGVudGVkIGJ5IG9uZSBvciBtb3JlIHNwYWNlDQpvciB0YWIgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgQ29uc3VsICpuZWNlc3NpdGF0aWJ1cyogcGVyIGlkLA0KICBjb25zZXRldHVyLCBldSBwcm8gZXZlcnRpIHBvc3R1bGFudA0KICBob21lcm8gdmVyZWFyIGVhIG1lYSwgcXVpLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClJlbmRlcnM6DQoNCiAgQ29uc3VsICpuZWNlc3NpdGF0aWJ1cyogcGVyIGlkLA0KICBjb25zZXRldHVyLCBldSBwcm8gZXZlcnRpIHBvc3R1bGFudA0KICBob21lcm8gdmVyZWFyIGVhIG1lYSwgcXVpLg0KDQpOT1RFOiBCZWNhdXNlIDw8WDY0LGxpc3RzPj4gY2FuIGJlIGluZGVudGVkIGl0J3MgcG9zc2libGUgZm9yIHlvdXINCmluZGVudGVkIHBhcmFncmFwaCB0byBiZSBtaXNpbnRlcnByZXRlZCBhcyBhIGxpc3QgLS0gaW4gc2l0dWF0aW9ucw0KbGlrZSB0aGlzIGFwcGx5IHRoZSAnbGl0ZXJhbCcgc3R5bGUgdG8gYSBub3JtYWwgcGFyYWdyYXBoLg0KDQpJbnN0ZWFkIG9mIHVzaW5nIGEgcGFyYWdyYXBoIGluZGVudCB5b3UgY291bGQgYXBwbHkgdGhlICdsaXRlcmFsJw0Kc3R5bGUgZXhwbGljaXRseSwgZm9yIGV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW2xpdGVyYWxdDQpDb25zdWwgKm5lY2Vzc2l0YXRpYnVzKiBwZXIgaWQsDQpjb25zZXRldHVyLCBldSBwcm8gZXZlcnRpIHBvc3R1bGFudA0KaG9tZXJvIHZlcmVhciBlYSBtZWEsIHF1aS4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpSZW5kZXJzOg0KDQpbbGl0ZXJhbF0NCkNvbnN1bCAqbmVjZXNzaXRhdGlidXMqIHBlciBpZCwNCmNvbnNldGV0dXIsIGV1IHBybyBldmVydGkgcG9zdHVsYW50DQpob21lcm8gdmVyZWFyIGVhIG1lYSwgcXVpLg0KDQpbW1g5NF1dDQpxdW90ZSBhbmQgdmVyc2UgcGFyYWdyYXBoIHN0eWxlcw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NClRoZSBvcHRpb25hbCAnYXR0cmlidXRpb24nIGFuZCAnY2l0ZXRpdGxlJyBhdHRyaWJ1dGVzIChwb3NpdGlvbmFsDQphdHRyaWJ1dGVzIDIgYW5kIDMpIHNwZWNpZnkgdGhlIGF1dGhvciBhbmQgc291cmNlIHJlc3BlY3RpdmVseS4NCg0KVGhlICd2ZXJzZScgc3R5bGUgcmV0YWlucyB0aGUgbGluZSBicmVha3MsIGZvciBleGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClt2ZXJzZSwgV2lsbGlhbSBCbGFrZSwgZnJvbSBBdWd1cmllcyBvZiBJbm5vY2VuY2VdDQpUbyBzZWUgYSB3b3JsZCBpbiBhIGdyYWluIG9mIHNhbmQsDQpBbmQgYSBoZWF2ZW4gaW4gYSB3aWxkIGZsb3dlciwNCkhvbGQgaW5maW5pdHkgaW4gdGhlIHBhbG0gb2YgeW91ciBoYW5kLA0KQW5kIGV0ZXJuaXR5IGluIGFuIGhvdXIuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KV2hpY2ggaXMgcmVuZGVyZWQgYXM6DQoNClt2ZXJzZSwgV2lsbGlhbSBCbGFrZSwgZnJvbSBBdWd1cmllcyBvZiBJbm5vY2VuY2VdDQpUbyBzZWUgYSB3b3JsZCBpbiBhIGdyYWluIG9mIHNhbmQsDQpBbmQgYSBoZWF2ZW4gaW4gYSB3aWxkIGZsb3dlciwNCkhvbGQgaW5maW5pdHkgaW4gdGhlIHBhbG0gb2YgeW91ciBoYW5kLA0KQW5kIGV0ZXJuaXR5IGluIGFuIGhvdXIuDQoNClRoZSAncXVvdGUnIHN0eWxlIGZsb3dzIHRoZSB0ZXh0IGF0IGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMsIGZvcg0KZXhhbXBsZToNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpbcXVvdGUsIEJlcnRyYW5kIFJ1c3NlbGwsIFRoZSBXb3JsZCBvZiBNYXRoZW1hdGljcyAoMTk1NildDQpBIGdvb2Qgbm90YXRpb24gaGFzIHN1YnRsZXR5IGFuZCBzdWdnZXN0aXZlbmVzcyB3aGljaCBhdCB0aW1lcyBtYWtlcw0KaXQgYWxtb3N0IHNlZW0gbGlrZSBhIGxpdmUgdGVhY2hlci4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpXaGljaCBpcyByZW5kZXJlZCBhczoNCg0KW3F1b3RlLCBCZXJ0cmFuZCBSdXNzZWxsLCBUaGUgV29ybGQgb2YgTWF0aGVtYXRpY3MgKDE5NTYpXQ0KQSBnb29kIG5vdGF0aW9uIGhhcyBzdWJ0bGV0eSBhbmQgc3VnZ2VzdGl2ZW5lc3Mgd2hpY2ggYXQgdGltZXMgbWFrZXMNCml0IGFsbW9zdCBzZWVtIGxpa2UgYSBsaXZlIHRlYWNoZXIuDQoNCltbWDI4XV0NCkFkbW9uaXRpb24gUGFyYWdyYXBocw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+DQonVElQJywgJ05PVEUnLCAnSU1QT1JUQU5UJywgJ1dBUk5JTkcnIGFuZCAnQ0FVVElPTicgYWRtb25pc2htZW50DQpwYXJhZ3JhcGggc3R5bGVzIGFyZSBnZW5lcmF0ZWQgYnkgcGxhY2luZyBgTk9URTpgLCBgVElQOmAsDQpgSU1QT1JUQU5UOmAsIGBXQVJOSU5HOmAgb3IgYENBVVRJT046YCBhcyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUNCnBhcmFncmFwaC4gRm9yIGV4YW1wbGU6DQoNCiAgTk9URTogVGhpcyBpcyBhbiBleGFtcGxlIG5vdGUuDQoNCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGFyYWdyYXBoIGFkbW9uaXRpb24gc3R5bGUNCmV4cGxpY2l0bHkgdXNpbmcgYW4gPDxYNzksQXR0cmlidXRlTGlzdCBlbGVtZW50Pj4uIEZvciBleGFtcGxlOg0KDQogIFtOT1RFXQ0KICBUaGlzIGlzIGFuIGV4YW1wbGUgbm90ZS4NCg0KUmVuZGVyczoNCg0KTk9URTogVGhpcyBpcyBhbiBleGFtcGxlIG5vdGUuDQoNClRJUDogSWYgeW91ciBhZG1vbml0aW9uIHJlcXVpcmVzIG1vcmUgdGhhbiBhIHNpbmdsZSBwYXJhZ3JhcGggdXNlIGFuDQo8PFgyMixhZG1vbml0aW9uIGJsb2NrPj4gaW5zdGVhZC4NCg0KW1tYNDddXQ0KQWRtb25pdGlvbiBJY29ucyBhbmQgQ2FwdGlvbnMNCl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eDQpOT1RFOiBBZG1vbml0aW9uIGN1c3RvbWl6YXRpb24gd2l0aCBgaWNvbnNgLCBgaWNvbnNkaXJgLCBgaWNvbmAgYW5kDQpgY2FwdGlvbmAgYXR0cmlidXRlcyBkb2VzIG5vdCBhcHBseSB3aGVuIGdlbmVyYXRpbmcgRG9jQm9vayBvdXRwdXQuIElmDQp5b3UgYXJlIGdvaW5nIHRoZSBEb2NCb29rIHJvdXRlIHRoZW4gdGhlIDw8WDQzLGEyeCgxKT4+IGAtLW5vLWljb25zYA0KYW5kIGAtLWljb25zLWRpcmAgb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGFwcHJvcHJpYXRlIFhTTA0KU3R5bGVzaGVldHMgcGFyYW1ldGVycy4NCg0KQnkgZGVmYXVsdCB0aGUgYXNjaWlkb2MoMSkgSFRNTCBiYWNrZW5kcyBnZW5lcmF0ZSB0ZXh0IGNhcHRpb25zDQppbnN0ZWFkIG9mIGFkbW9uaXRpb24gaWNvbiBpbWFnZSBsaW5rcy4gVG8gZ2VuZXJhdGUgbGlua3MgdG8gaWNvbg0KaW1hZ2VzIGRlZmluZSB0aGUgPDxYNDUsYGljb25zYD4+IGF0dHJpYnV0ZSwgZm9yIGV4YW1wbGUgdXNpbmcgdGhlIGAtYQ0KaWNvbnNgIGNvbW1hbmQtbGluZSBvcHRpb24uDQoNClRoZSA8PFg0NCxgaWNvbnNkaXJgPj4gYXR0cmlidXRlIHNldHMgdGhlIGxvY2F0aW9uIG9mIGxpbmtlZCBpY29uDQppbWFnZXMuDQoNCllvdSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaWNvbiBpbWFnZSB1c2luZyB0aGUgYGljb25gIGF0dHJpYnV0ZSB0bw0Kc3BlY2lmeSB0aGUgcGF0aCBvZiB0aGUgbGlua2VkIGltYWdlLiBGb3IgZXhhbXBsZToNCg0KICBbaWNvbj0iLi9pbWFnZXMvaWNvbnMvd2luay5wbmciXQ0KICBOT1RFOiBXaGF0IGxvdmVseSB3YXIuDQoNClVzZSB0aGUgYGNhcHRpb25gIGF0dHJpYnV0ZSB0byBjdXN0b21pemUgdGhlIGFkbW9uaXRpb24gY2FwdGlvbnMgKG5vdA0KYXBwbGljYWJsZSB0byBgZG9jYm9va2AgYmFja2VuZCkuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzdXBwcmVzc2VzIHRoZQ0KaWNvbiBpbWFnZSBhbmQgY3VzdG9taXplcyB0aGUgY2FwdGlvbiBvZiBhICdOT1RFJyBhZG1vbml0aW9uDQoodW5kZWZpbmluZyB0aGUgYGljb25zYCBhdHRyaWJ1dGUgd2l0aCBgaWNvbnM9Tm9uZWAgaXMgb25seSBuZWNlc3NhcnkNCmlmIDw8WDQ1LGFkbW9uaXRpb24gaWNvbnM+PiBoYXZlIGJlZW4gZW5hYmxlZCk6DQoNCiAgW2ljb25zPU5vbmUsIGNhcHRpb249Ik15IFNwZWNpYWwgTm90ZSJdDQogIE5PVEU6IFRoaXMgaXMgbXkgc3BlY2lhbCBub3RlLg0KDQpUaGlzIHN1YnNlY3Rpb24gYWxzbyBhcHBsaWVzIHRvIDw8WDIyLEFkbW9uaXRpb24gQmxvY2tzPj4uDQoNCg0KW1tYMTA0XV0NCkRlbGltaXRlZCBCbG9ja3MNCi0tLS0tLS0tLS0tLS0tLS0NCkRlbGltaXRlZCBibG9ja3MgYXJlIGJsb2NrcyBvZiB0ZXh0IGVudmVsb3BlZCBieSBsZWFkaW5nIGFuZCB0cmFpbGluZw0KZGVsaW1pdGVyIGxpbmVzIChub3JtYWxseSBhIHNlcmllcyBvZiBmb3VyIG9yIG1vcmUgcmVwZWF0ZWQNCmNoYXJhY3RlcnMpLiBUaGUgYmVoYXZpb3Igb2YgRGVsaW1pdGVkIEJsb2NrcyBpcyBzcGVjaWZpZWQgYnkgZW50cmllcw0KaW4gY29uZmlndXJhdGlvbiBmaWxlIGBbYmxvY2tkZWYtKl1gIHNlY3Rpb25zLg0KDQpQcmVkZWZpbmVkIERlbGltaXRlZCBCbG9ja3MNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KQXNjaWlEb2Mgc2hpcHMgd2l0aCBhIG51bWJlciBvZiBwcmVkZWZpbmVkIERlbGltaXRlZEJsb2NrcyAoc2VlIHRoZQ0KYGFzY2lpZG9jLmNvbmZgIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiB0aGUgYXNjaWlkb2MoMSkgcHJvZ3JhbQ0KZGlyZWN0b3J5KToNCg0KUHJlZGVmaW5lZCBkZWxpbWl0ZWQgYmxvY2sgdW5kZXJsaW5lczoNCg0KICBDb21tZW50QmxvY2s6ICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KICBQYXNzdGhyb3VnaEJsb2NrOiArKysrKysrKysrKysrKysrKysrKysrKysrKw0KICBMaXN0aW5nQmxvY2s6ICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICBMaXRlcmFsQmxvY2s6ICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KICBTaWRlYmFyQmxvY2s6ICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICBRdW90ZUJsb2NrOiAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fXw0KICBFeGFtcGxlQmxvY2s6ICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICBPcGVuQmxvY2s6ICAgICAgICAtLQ0KDQouRGVmYXVsdCBEZWxpbWl0ZWRCbG9jayBzdWJzdGl0dXRpb25zDQpbY29scz0iMmUsNypeIixmcmFtZT0idG9wYm90IixvcHRpb25zPSJoZWFkZXIsYXV0b3dpZHRoIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KfCB8QXR0cmlidXRlcyB8Q2FsbG91dHMgfE1hY3JvcyB8IFF1b3RlcyB8UmVwbGFjZW1lbnRzDQp8U3BlY2lhbCBjaGFycyB8U3BlY2lhbCB3b3Jkcw0KDQp8UGFzc3Rocm91Z2hCbG9jayB8WWVzIHxObyAgfFllcyB8Tm8gIHxObyAgfE5vICB8Tm8NCnxMaXN0aW5nQmxvY2sgICAgIHxObyAgfFllcyB8Tm8gIHxObyAgfE5vICB8WWVzIHxObw0KfExpdGVyYWxCbG9jayAgICAgfE5vICB8WWVzIHxObyAgfE5vICB8Tm8gIHxZZXMgfE5vDQp8U2lkZWJhckJsb2NrICAgICB8WWVzIHxObyAgfFllcyB8WWVzIHxZZXMgfFllcyB8WWVzDQp8UXVvdGVCbG9jayAgICAgICB8WWVzIHxObyAgfFllcyB8WWVzIHxZZXMgfFllcyB8WWVzDQp8RXhhbXBsZUJsb2NrICAgICB8WWVzIHxObyAgfFllcyB8WWVzIHxZZXMgfFllcyB8WWVzDQp8T3BlbkJsb2NrICAgICAgICB8WWVzIHxObyAgfFllcyB8WWVzIHxZZXMgfFllcyB8WWVzDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KTGlzdGluZyBCbG9ja3MNCn5+fn5+fn5+fn5+fn5+DQonTGlzdGluZ0Jsb2NrcycgYXJlIHJlbmRlcmVkIHZlcmJhdGltIGluIGEgbW9ub3NwYWNlZCBmb250LCB0aGV5DQpyZXRhaW4gbGluZSBhbmQgd2hpdGVzcGFjZSBmb3JtYXR0aW5nIGFuZCBhcmUgb2Z0ZW4gZGlzdGluZ3Vpc2hlZCBieSBhDQpiYWNrZ3JvdW5kIG9yIGJvcmRlci4gVGhlcmUgaXMgbm8gdGV4dCBmb3JtYXR0aW5nIG9yIHN1YnN0aXR1dGlvbnMNCndpdGhpbiBMaXN0aW5nIGJsb2NrcyBhcGFydCBmcm9tIFNwZWNpYWwgQ2hhcmFjdGVycyBhbmQgQ2FsbG91dHMuDQpMaXN0aW5nIGJsb2NrcyBhcmUgb2Z0ZW4gdXNlZCBmb3IgY29tcHV0ZXIgb3V0cHV0IGFuZCBmaWxlIGxpc3RpbmdzLg0KDQpIZXJlJ3MgYW4gZXhhbXBsZToNCg0KW2xpc3RpbmddDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiNpbmNsdWRlIDxzdGRpby5oPg0KDQppbnQgbWFpbigpIHsNCiAgIHByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsNCiAgIGV4aXQoMCk7DQp9DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KV2hpY2ggd2lsbCBiZSByZW5kZXJlZCBsaWtlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludCBtYWluKCkgew0KICAgIHByaW50ZigiSGVsbG8gV29ybGQhXG4iKTsNCiAgICBleGl0KDApOw0KfQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KQnkgY29udmVudGlvbiA8PFg1OSxmaWx0ZXIgYmxvY2tzPj4gdXNlIHRoZSBsaXN0aW5nIGJsb2NrIHN5bnRheCBhbmQNCmFyZSBpbXBsZW1lbnRlZCBhcyBkaXN0aW5jdCBsaXN0aW5nIGJsb2NrIHN0eWxlcy4NCg0KW1tYNjVdXQ0KTGl0ZXJhbCBCbG9ja3MNCn5+fn5+fn5+fn5+fn5+DQonTGl0ZXJhbEJsb2NrcycgYXJlIHJlbmRlcmVkIGp1c3QgbGlrZSA8PFg4NSxsaXRlcmFsIHBhcmFncmFwaHM+Pi4NCkV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCkNvbnN1bCAqbmVjZXNzaXRhdGlidXMqIHBlciBpZCwNCmNvbnNldGV0dXIsIGV1IHBybyBldmVydGkgcG9zdHVsYW50DQpob21lcm8gdmVyZWFyIGVhIG1lYSwgcXVpLg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpSZW5kZXJzOg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCkNvbnN1bCAqbmVjZXNzaXRhdGlidXMqIHBlciBpZCwNCmNvbnNldGV0dXIsIGV1IHBybyBldmVydGkgcG9zdHVsYW50DQpob21lcm8gdmVyZWFyIGVhIG1lYSwgcXVpLg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KSWYgdGhlICdsaXN0aW5nJyBzdHlsZSBpcyBhcHBsaWVkIHRvIGEgTGl0ZXJhbEJsb2NrIGl0IHdpbGwgYmUNCnJlbmRlcmVkIGFzIGEgTGlzdGluZ0Jsb2NrICh0aGlzIGlzIGhhbmR5IGlmIHlvdSBoYXZlIGEgbGlzdGluZw0KY29udGFpbmluZyBhIExpc3RpbmdCbG9jaykuDQoNClNpZGViYXIgQmxvY2tzDQp+fn5+fn5+fn5+fn5+fg0KQSBzaWRlYmFyIGlzIGEgc2hvcnQgcGllY2Ugb2YgdGV4dCBwcmVzZW50ZWQgb3V0c2lkZSB0aGUgbmFycmF0aXZlDQpmbG93IG9mIHRoZSBtYWluIHRleHQuIFRoZSBzaWRlYmFyIGlzIG5vcm1hbGx5IHByZXNlbnRlZCBpbnNpZGUgYQ0KYm9yZGVyZWQgYm94IHRvIHNldCBpdCBhcGFydCBmcm9tIHRoZSBtYWluIHRleHQuDQoNClRoZSBzaWRlYmFyIGJvZHkgaXMgdHJlYXRlZCBsaWtlIGEgbm9ybWFsIHNlY3Rpb24gYm9keS4NCg0KSGVyZSdzIGFuIGV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLkFuIEV4YW1wbGUgU2lkZWJhcg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpBbnkgQXNjaWlEb2MgU2VjdGlvbkJvZHkgZWxlbWVudCAoYXBhcnQgZnJvbQ0KU2lkZWJhckJsb2NrcykgY2FuIGJlIHBsYWNlZCBpbnNpZGUgYSBzaWRlYmFyLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KV2hpY2ggd2lsbCBiZSByZW5kZXJlZCBsaWtlOg0KDQouQW4gRXhhbXBsZSBTaWRlYmFyDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkFueSBBc2NpaURvYyBTZWN0aW9uQm9keSBlbGVtZW50IChhcGFydCBmcm9tDQpTaWRlYmFyQmxvY2tzKSBjYW4gYmUgcGxhY2VkIGluc2lkZSBhIHNpZGViYXIuDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KW1tYMjZdXQ0KQ29tbWVudCBCbG9ja3MNCn5+fn5+fn5+fn5+fn5+DQpUaGUgY29udGVudHMgb2YgJ0NvbW1lbnRCbG9ja3MnIGFyZSBub3QgcHJvY2Vzc2VkOyB0aGV5IGFyZSB1c2VmdWwgZm9yDQphbm5vdGF0aW9ucyBhbmQgZm9yIGV4Y2x1ZGluZyBuZXcgb3Igb3V0ZGF0ZWQgY29udGVudCB0aGF0IHlvdSBkb24ndA0Kd2FudCBkaXNwbGF5ZWQuIENvbW1lbnRCbG9ja3MgYXJlIG5ldmVyIHdyaXR0ZW4gdG8gb3V0cHV0IGZpbGVzLg0KRXhhbXBsZToNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCkNvbW1lbnRCbG9jayBjb250ZW50cyBhcmUgbm90IHByb2Nlc3NlZCBieQ0KYXNjaWlkb2MoMSkuDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpTZWUgYWxzbyA8PFgyNSxDb21tZW50IExpbmVzPj4uDQoNCk5PVEU6IFN5c3RlbSBtYWNyb3MgYXJlIGV4ZWN1dGVkIGluc2lkZSBjb21tZW50IGJsb2Nrcy4NCg0KW1tYNzZdXQ0KUGFzc3Rocm91Z2ggQmxvY2tzDQp+fn5+fn5+fn5+fn5+fn5+fn4NCkJ5IGRlZmF1bHQgdGhlIGJsb2NrIGNvbnRlbnRzIGlzIHN1YmplY3Qgb25seSB0byAnYXR0cmlidXRlcycgYW5kDQonbWFjcm9zJyBzdWJzdGl0dXRpb25zICh1c2UgYW4gZXhwbGljaXQgJ3N1YnMnIGF0dHJpYnV0ZSB0byBhcHBseQ0KZGlmZmVyZW50IHN1YnN0aXR1dGlvbnMpLiAgUGFzc3Rocm91Z2hCbG9jayBjb250ZW50IHdpbGwgb2Z0ZW4gYmUNCmJhY2tlbmQgc3BlY2lmaWMuIEhlcmUncyBhbiBleGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltzdWJzPSJxdW90ZXMiXQ0KKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCjx0YWJsZSBib3JkZXI9IjEiPjx0cj4NCiAgPHRkPipDZWxsIDEqPC90ZD4NCiAgPHRkPipDZWxsIDIqPC90ZD4NCjwvdHI+PC90YWJsZT4NCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KVGhlIGZvbGxvd2luZyBzdHlsZXMgY2FuIGJlIGFwcGxpZWQgdG8gcGFzc3Rocm91Z2ggYmxvY2tzOg0KDQpwYXNzOjoNCiAgTm8gc3Vic3RpdHV0aW9ucyBhcmUgcGVyZm9ybWVkLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYHN1YnM9Im5vbmUiYC4NCg0KYXNjaWltYXRoLCBsYXRleG1hdGg6Og0KICBCeSBkZWZhdWx0IG5vIHN1YnN0aXR1dGlvbnMgYXJlIHBlcmZvcm1lZCwgdGhlIGNvbnRlbnRzIGFyZSByZW5kZXJlZA0KICBhcyA8PFg3OCxtYXRoZW1hdGljYWwgZm9ybXVsYXM+Pi4NCg0KUXVvdGUgQmxvY2tzDQp+fn5+fn5+fn5+fn4NCidRdW90ZUJsb2NrcycgYXJlIHVzZWQgZm9yIHF1b3RlZCBwYXNzYWdlcyBvZiB0ZXh0LiBUaGVyZSBhcmUgdHdvDQpzdHlsZXM6ICdxdW90ZScgYW5kICd2ZXJzZScuIFRoZSBzdHlsZSBiZWhhdmlvciBpcyBpZGVudGljYWwgdG8NCjw8WDk0LHF1b3RlIGFuZCB2ZXJzZSBwYXJhZ3JhcGhzPj4gZXhjZXB0IHRoYXQgYmxvY2tzIGNhbiBjb250YWluDQptdWx0aXBsZSBwYXJhZ3JhcGhzIGFuZCwgaW4gdGhlIGNhc2Ugb2YgdGhlICdxdW90ZScgc3R5bGUsIG90aGVyDQpzZWN0aW9uIGVsZW1lbnRzLiAgVGhlIGZpcnN0IHBvc2l0aW9uYWwgYXR0cmlidXRlIHNldHMgdGhlIHN0eWxlLCBpZg0Kbm8gYXR0cmlidXRlcyBhcmUgc3BlY2lmaWVkIHRoZSAncXVvdGUnIHN0eWxlIGlzIHVzZWQuICBUaGUgb3B0aW9uYWwNCidhdHRyaWJ1dGlvbicgYW5kICdjaXRldGl0bGUnIGF0dHJpYnV0ZXMgKHBvc2l0aW9uYWwgYXR0cmlidXRlcyAyIGFuZA0KMykgc3BlY2lmeSB0aGUgcXVvdGUncyBhdXRob3IgYW5kIHNvdXJjZS4gRm9yIGV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW3F1b3RlLCBTaXIgQXJ0aHVyIENvbmFuIERveWxlLCBUaGUgQWR2ZW50dXJlcyBvZiBTaGVybG9jayBIb2xtZXNdDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KQXMgaGUgc3Bva2UgdGhlcmUgd2FzIHRoZSBzaGFycCBzb3VuZCBvZiBob3JzZXMnIGhvb2ZzIGFuZA0KZ3JhdGluZyB3aGVlbHMgYWdhaW5zdCB0aGUgY3VyYiwgZm9sbG93ZWQgYnkgYSBzaGFycCBwdWxsIGF0IHRoZQ0KYmVsbC4gSG9sbWVzIHdoaXN0bGVkLg0KDQoiQSBwYWlyLCBieSB0aGUgc291bmQsIiBzYWlkIGhlLiAiWWVzLCIgaGUgY29udGludWVkLCBnbGFuY2luZw0Kb3V0IG9mIHRoZSB3aW5kb3cuICJBIG5pY2UgbGl0dGxlIGJyb3VnaGFtIGFuZCBhIHBhaXIgb2YNCmJlYXV0aWVzLiBBIGh1bmRyZWQgYW5kIGZpZnR5IGd1aW5lYXMgYXBpZWNlLiBUaGVyZSdzIG1vbmV5IGluDQp0aGlzIGNhc2UsIFdhdHNvbiwgaWYgdGhlcmUgaXMgbm90aGluZyBlbHNlLiINCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KV2hpY2ggaXMgcmVuZGVyZWQgYXM6DQoNCltxdW90ZSwgU2lyIEFydGh1ciBDb25hbiBEb3lsZSwgVGhlIEFkdmVudHVyZXMgb2YgU2hlcmxvY2sgSG9sbWVzXQ0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCkFzIGhlIHNwb2tlIHRoZXJlIHdhcyB0aGUgc2hhcnAgc291bmQgb2YgaG9yc2VzJyBob29mcyBhbmQNCmdyYXRpbmcgd2hlZWxzIGFnYWluc3QgdGhlIGN1cmIsIGZvbGxvd2VkIGJ5IGEgc2hhcnAgcHVsbCBhdCB0aGUNCmJlbGwuIEhvbG1lcyB3aGlzdGxlZC4NCg0KIkEgcGFpciwgYnkgdGhlIHNvdW5kLCIgc2FpZCBoZS4gIlllcywiIGhlIGNvbnRpbnVlZCwgZ2xhbmNpbmcNCm91dCBvZiB0aGUgd2luZG93LiAiQSBuaWNlIGxpdHRsZSBicm91Z2hhbSBhbmQgYSBwYWlyIG9mDQpiZWF1dGllcy4gQSBodW5kcmVkIGFuZCBmaWZ0eSBndWluZWFzIGFwaWVjZS4gVGhlcmUncyBtb25leSBpbg0KdGhpcyBjYXNlLCBXYXRzb24sIGlmIHRoZXJlIGlzIG5vdGhpbmcgZWxzZS4iDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KDQpbW1g0OF1dDQpFeGFtcGxlIEJsb2Nrcw0Kfn5+fn5+fn5+fn5+fn4NCidFeGFtcGxlQmxvY2tzJyBlbmNhcHN1bGF0ZSB0aGUgRG9jQm9vayBFeGFtcGxlIGVsZW1lbnQgYW5kIGFyZSB1c2VkDQpmb3IsIHdlbGwsIGV4YW1wbGVzLiAgRXhhbXBsZSBibG9ja3MgY2FuIGJlIHRpdGxlZCBieSBwcmVjZWRpbmcgdGhlbQ0Kd2l0aCBhICdCbG9ja1RpdGxlJy4gIERvY0Jvb2sgdG9vbGNoYWlucyB3aWxsIG5vcm1hbGx5IGF1dG9tYXRpY2FsbHkNCm51bWJlciBleGFtcGxlcyBhbmQgZ2VuZXJhdGUgYSAnTGlzdCBvZiBFeGFtcGxlcycgYmFja21hdHRlciBzZWN0aW9uLg0KDQpFeGFtcGxlIGJsb2NrcyBhcmUgZGVsaW1pdGVkIGJ5IGxpbmVzIG9mIGVxdWFscyBjaGFyYWN0ZXJzIGFuZCBjYW4NCmNvbnRhaW4gYW55IGJsb2NrIGVsZW1lbnRzIGFwYXJ0IGZyb20gVGl0bGVzLCBCbG9ja1RpdGxlcyBhbmQNClNpZGViYXJzKSBpbnNpZGUgYW4gZXhhbXBsZSBibG9jay4gRm9yIGV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLkFuIGV4YW1wbGUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUXVpIGluIG1hZ25hIGNvbW1vZG8sIGVzdCBsYWJpdHVyIGRvbG9ydW0gYW4uIEVzdCBuZSBtYWduYSBwcmltaXMNCmFkb2xlc2NlbnMuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpSZW5kZXJzOg0KDQouQW4gZXhhbXBsZQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpRdWkgaW4gbWFnbmEgY29tbW9kbywgZXN0IGxhYml0dXIgZG9sb3J1bSBhbi4gRXN0IG5lIG1hZ25hIHByaW1pcw0KYWRvbGVzY2Vucy4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpBIHRpdGxlIHByZWZpeCB0aGF0IGNhbiBiZSBpbnNlcnRlZCB3aXRoIHRoZSBgY2FwdGlvbmAgYXR0cmlidXRlDQooSFRNTCBiYWNrZW5kcykuIEZvciBleGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltjYXB0aW9uPSJFeGFtcGxlIDE6ICJdDQouQW4gZXhhbXBsZSB3aXRoIGEgY3VzdG9tIGNhcHRpb24NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUXVpIGluIG1hZ25hIGNvbW1vZG8sIGVzdCBsYWJpdHVyIGRvbG9ydW0gYW4uIEVzdCBuZSBtYWduYSBwcmltaXMNCmFkb2xlc2NlbnMuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpbW1gyMl1dDQpBZG1vbml0aW9uIEJsb2Nrcw0Kfn5+fn5+fn5+fn5+fn5+fn4NClRoZSAnRXhhbXBsZUJsb2NrJyBkZWZpbml0aW9uIGluY2x1ZGVzIGEgc2V0IG9mIGFkbW9uaXRpb24NCjw8WDIzLHN0eWxlcz4+ICgnTk9URScsICdUSVAnLCAnSU1QT1JUQU5UJywgJ1dBUk5JTkcnLCAnQ0FVVElPTicpIGZvcg0KZ2VuZXJhdGluZyBhZG1vbml0aW9uIGJsb2NrcyAoYWRtb25pdGlvbnMgY29udGFpbmluZyBtb3JlIHRoYW4gYQ0KPDxYMjgsc2luZ2xlIHBhcmFncmFwaD4+KS4gIEp1c3QgcHJlY2VkZSB0aGUgJ0V4YW1wbGVCbG9jaycgd2l0aCBhbg0KYXR0cmlidXRlIGxpc3Qgc3BlY2lmeWluZyB0aGUgYWRtb25pdGlvbiBzdHlsZSBuYW1lLiBGb3IgZXhhbXBsZToNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpbTk9URV0NCi5BIE5PVEUgYWRtb25pdGlvbiBibG9jaw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpRdWkgaW4gbWFnbmEgY29tbW9kbywgZXN0IGxhYml0dXIgZG9sb3J1bSBhbi4gRXN0IG5lIG1hZ25hIHByaW1pcw0KYWRvbGVzY2Vucy4NCg0KLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQouIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAuLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogIC4uIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KLiBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0NCiAgbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpSZW5kZXJzOg0KDQpbTk9URV0NCi5BIE5PVEUgYWRtb25pdGlvbiBibG9jaw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpRdWkgaW4gbWFnbmEgY29tbW9kbywgZXN0IGxhYml0dXIgZG9sb3J1bSBhbi4gRXN0IG5lIG1hZ25hIHByaW1pcw0KYWRvbGVzY2Vucy4NCg0KLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQouIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAuLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogIC4uIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KLiBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0NCiAgbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KU2VlIGFsc28gPDxYNDcsQWRtb25pdGlvbiBJY29ucyBhbmQgQ2FwdGlvbnM+Pi4NCg0KW1tYMjldXQ0KT3BlbiBCbG9ja3MNCn5+fn5+fn5+fn5+DQpPcGVuIGJsb2NrcyBhcmUgc3BlY2lhbDoNCg0KLSBUaGUgb3BlbiBibG9jayBkZWxpbWl0ZXIgaXMgbGluZSBjb250YWluaW5nIHR3byBoeXBoZW4gY2hhcmFjdGVycw0KICAoaW5zdGVhZCBvZiBmb3VyIG9yIG1vcmUgcmVwZWF0ZWQgY2hhcmFjdGVycykuDQoNCi0gVGhleSBjYW4gYmUgdXNlZCB0byBncm91cCBibG9jayBlbGVtZW50cyBmb3IgPDxYMTUsTGlzdCBpdGVtDQogIGNvbnRpbnVhdGlvbj4+Lg0KDQotIE9wZW4gYmxvY2tzIGNhbiBiZSBzdHlsZWQgdG8gYmVoYXZlIGxpa2UgYW55IG90aGVyIHR5cGUgb2YgZGVsaW1pdGVkDQogIGJsb2NrLiAgVGhlICBmb2xsb3dpbmcgYnVpbHQtaW4gc3R5bGVzIGNhbiBiZSBhcHBsaWVkIHRvIG9wZW4NCiAgYmxvY2tzOiAnbGl0ZXJhbCcsICd2ZXJzZScsICdxdW90ZScsICdsaXN0aW5nJywgJ1RJUCcsICdOT1RFJywNCiAgJ0lNUE9SVEFOVCcsICdXQVJOSU5HJywgJ0NBVVRJT04nLCAnYWJzdHJhY3QnLCAncGFydGludHJvJywNCiAgJ2NvbW1lbnQnLCAnZXhhbXBsZScsICdzaWRlYmFyJywgJ3NvdXJjZScsICdtdXNpYycsICdsYXRleCcsDQogICdncmFwaHZpeicuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG9wZW4gYmxvY2sgYW5kIGxpc3RpbmcgYmxvY2sNCiAgYXJlIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6DQoNCiAgW2xpc3RpbmddDQogIC0tDQogIExvcnVtIGlwc3VtIC4uLg0KICAtLQ0KDQogIC0tLS0tLS0tLS0tLS0tLQ0KICBMb3J1bSBpcHN1bSAuLi4NCiAgLS0tLS0tLS0tLS0tLS0tDQoNCi0gQW4gdW5zdHlsZWQgb3BlbiBibG9jayBncm91cHMgc2VjdGlvbiBlbGVtZW50cyBidXQgb3RoZXJ3aXNlIGRvZXMNCiAgbm90aGluZy4NCg0KT3BlbiBibG9ja3MgYXJlIHVzZWQgdG8gZ2VuZXJhdGUgZG9jdW1lbnQgYWJzdHJhY3RzIGFuZCBib29rIHBhcnQNCmludHJvZHVjdGlvbnM6DQoNCi0gQXBwbHkgdGhlICdhYnN0cmFjdCcgc3R5bGUgdG8gZ2VuZXJhdGUgYW4gYWJzdHJhY3QsIGZvciBleGFtcGxlOg0KDQogIFthYnN0cmFjdF0NCiAgLS0NCiAgSW4gdGhpcyBwYXBlciB3ZSB3aWxsIC4uLg0KICAtLQ0KDQouIEFwcGx5IHRoZSAncGFydGludHJvJyBzdHlsZSB0byBnZW5lcmF0ZSBhIGJvb2sgcGFydCBpbnRyb2R1Y3Rpb24gZm9yDQogIGEgbXVsdGktcGFydCBib29rLCBmb3IgZXhhbXBsZToNCg0KICBbcGFydGludHJvXQ0KICAuT3B0aW9uYWwgcGFydCBpbnRyb2R1Y3Rpb24gdGl0bGUNCiAgLS0NCiAgT3B0aW9uYWwgcGFydCBpbnRyb2R1Y3Rpb24gZ29lcyBoZXJlLg0KICAtLQ0KDQoNCltbWDY0XV0NCkxpc3RzDQotLS0tLQ0KLkxpc3QgdHlwZXMNCi0gQnVsbGV0ZWQgbGlzdHMuIEFsc28ga25vd24gYXMgaXRlbWl6ZWQgb3IgdW5vcmRlcmVkIGxpc3RzLg0KLSBOdW1iZXJlZCBsaXN0cy4gQWxzbyBjYWxsZWQgb3JkZXJlZCBsaXN0cy4NCi0gTGFiZWxlZCBsaXN0cy4gU29tZXRpbWVzIGNhbGxlZCB2YXJpYWJsZSBvciBkZWZpbml0aW9uIGxpc3RzLg0KLSBDYWxsb3V0IGxpc3RzIChhIGxpc3Qgb2YgY2FsbG91dCBhbm5vdGF0aW9ucykuDQoNCi5MaXN0IGJlaGF2aW9yDQotIExpc3QgaXRlbSBpbmRlbnRhdGlvbiBpcyBvcHRpb25hbCBhbmQgZG9lcyBub3QgZGV0ZXJtaW5lIG5lc3RpbmcsDQogIGluZGVudGF0aW9uIGRvZXMgaG93ZXZlciBtYWtlIHRoZSBzb3VyY2UgbW9yZSByZWFkYWJsZS4NCi0gQW5vdGhlciBsaXN0IG9yIGEgbGl0ZXJhbCBwYXJhZ3JhcGggaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgbGlzdA0KICBpdGVtIHdpbGwgYmUgaW1wbGljaXRseSBpbmNsdWRlZCBpbiB0aGUgbGlzdCBpdGVtOyB1c2UgPDxYMTUsIGxpc3QNCiAgaXRlbSBjb250aW51YXRpb24+PiB0byBleHBsaWNpdGx5IGFwcGVuZCBvdGhlciBibG9jayBlbGVtZW50cyB0byBhDQogIGxpc3QgaXRlbS4NCi0gQSBjb21tZW50IGJsb2NrIG9yIGEgY29tbWVudCBsaW5lIGJsb2NrIG1hY3JvIGVsZW1lbnQgd2lsbCB0ZXJtaW5hdGUNCiAgYSBsaXN0IC0tIHVzZSBpbmxpbmUgY29tbWVudCBsaW5lcyB0byBwdXQgY29tbWVudHMgaW5zaWRlIGxpc3RzLg0KLSBUaGUgYGxpc3RpbmRleGAgPDxYNjAsaW50cmluc2ljIGF0dHJpYnV0ZT4+IGlzIHRoZSBjdXJyZW50IGxpc3QgaXRlbQ0KICBpbmRleCAoMS4uKS4gSWYgdGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBvdXRzaWRlIGEgbGlzdCB0aGVuIGl0J3MgdmFsdWUNCiAgaXMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbW9zdCByZWNlbnRseSBjbG9zZWQgbGlzdC4gVXNlZnVsIGZvcg0KICBkaXNwbGF5aW5nIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBsaXN0Lg0KDQpCdWxsZXRlZCBMaXN0cw0Kfn5+fn5+fn5+fn5+fn4NCkJ1bGxldGVkIGxpc3QgaXRlbXMgc3RhcnQgd2l0aCBhIHNpbmdsZSBkYXNoIG9yIG9uZSB0byBmaXZlIGFzdGVyaXNrcw0KZm9sbG93ZWQgYnkgc29tZSB3aGl0ZSBzcGFjZSB0aGVuIHNvbWUgdGV4dC4gQnVsbGV0ZWQgbGlzdCBzeW50YXhlcw0KYXJlOg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uDQotIExpc3QgaXRlbS4NCiogTGlzdCBpdGVtLg0KKiogTGlzdCBpdGVtLg0KKioqIExpc3QgaXRlbS4NCioqKiogTGlzdCBpdGVtLg0KKioqKiogTGlzdCBpdGVtLg0KLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpOdW1iZXJlZCBMaXN0cw0Kfn5+fn5+fn5+fn5+fn4NCkxpc3QgaXRlbSBudW1iZXJzIGFyZSBleHBsaWNpdCBvciBpbXBsaWNpdC4NCg0KLkV4cGxpY2l0IG51bWJlcmluZw0KTGlzdCBpdGVtcyBiZWdpbiB3aXRoIGEgbnVtYmVyIGZvbGxvd2VkIGJ5IHNvbWUgd2hpdGUgc3BhY2UgdGhlbiB0aGUNCml0ZW0gdGV4dC4gVGhlIG51bWJlcnMgY2FuIGJlIGRlY2ltYWwgKGFyYWJpYyksIHJvbWFuICh1cHBlciBvciBsb3dlcg0KY2FzZSkgb3IgYWxwaGEgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLiBEZWNpbWFsIGFuZCBhbHBoYSBudW1iZXJzIGFyZQ0KdGVybWluYXRlZCB3aXRoIGEgcGVyaW9kLCByb21hbiBudW1iZXJzIGFyZSB0ZXJtaW5hdGVkIHdpdGggYSBjbG9zaW5nDQpwYXJlbnRoZXNpcy4gVGhlIGRpZmZlcmVudCB0ZXJtaW5hdG9ycyBhcmUgbmVjZXNzYXJ5IHRvIGVuc3VyZSAnaScsDQondicgYW5kICd4JyByb21hbiBudW1iZXJzIGFyZSBhcmUgZGlzdGluZ3Vpc2hhYmxlIGZyb20gJ3gnLCAndicgYW5kDQoneCcgYWxwaGEgbnVtYmVycy4gRXhhbXBsZXM6DQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KMS4gICBBcmFiaWMgKGRlY2ltYWwpIG51bWJlcmVkIGxpc3QgaXRlbS4NCmEuICAgTG93ZXIgY2FzZSBhbHBoYSAobGV0dGVyKSBudW1iZXJlZCBsaXN0IGl0ZW0uDQpGLiAgIFVwcGVyIGNhc2UgYWxwaGEgKGxldHRlcikgbnVtYmVyZWQgbGlzdCBpdGVtLg0KaWlpKSBMb3dlciBjYXNlIHJvbWFuIG51bWJlcmVkIGxpc3QgaXRlbS4NCklYKSAgVXBwZXIgY2FzZSByb21hbiBudW1iZXJlZCBsaXN0IGl0ZW0uDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KLkltcGxpY2l0IG51bWJlcmluZw0KTGlzdCBpdGVtcyBiZWdpbiBvbmUgdG8gZml2ZSBwZXJpb2QgY2hhcmFjdGVycywgZm9sbG93ZWQgYnkgc29tZSB3aGl0ZQ0Kc3BhY2UgdGhlbiB0aGUgaXRlbSB0ZXh0LiBFeGFtcGxlczoNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQouIEFyYWJpYyAoZGVjaW1hbCkgbnVtYmVyZWQgbGlzdCBpdGVtLg0KLi4gTG93ZXIgY2FzZSBhbHBoYSAobGV0dGVyKSBudW1iZXJlZCBsaXN0IGl0ZW0uDQouLi4gTG93ZXIgY2FzZSByb21hbiBudW1iZXJlZCBsaXN0IGl0ZW0uDQouLi4uIFVwcGVyIGNhc2UgYWxwaGEgKGxldHRlcikgbnVtYmVyZWQgbGlzdCBpdGVtLg0KLi4uLi4gVXBwZXIgY2FzZSByb21hbiBudW1iZXJlZCBsaXN0IGl0ZW0uDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KWW91IGNhbiB1c2UgdGhlICdzdHlsZScgYXR0cmlidXRlIChhbHNvIHRoZSBmaXJzdCBwb3NpdGlvbmFsDQphdHRyaWJ1dGUpIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgbnVtYmVyaW5nIHN0eWxlLiAgVGhlIG51bWJlcmVkDQpsaXN0IHN0eWxlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICdhcmFiaWMnLCAnbG93ZXJhbHBoYScsDQondXBwZXJhbHBoYScsICdsb3dlcnJvbWFuJywgJ3VwcGVycm9tYW4nLg0KDQpIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGJ1bGxldGVkIGFuZCBudW1iZXJlZCBsaXN0czoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIFByYWVzZW50IGVnZXQgcHVydXMgcXVpcyBtYWduYSBlbGVpZmVuZCBlbGVpZmVuZC4NCiAgMS4gRnVzY2UgZXVpc21vZCBjb21tb2RvIHZlbGl0Lg0KICAgIGEuIEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4NCiAgICBiLiBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgICBjLiBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0gbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQogIDIuIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAgIGkpICBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogICAgaWkpIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAzLiBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0gbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQogIDQuIE5hbSBmZXJtZW50dW0gbWF0dGlzIGFudGUuDQotIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0Lg0KICAqIEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4NCiAgKiogUXVpIGluIG1hZ25hIGNvbW1vZG8sIGVzdCBsYWJpdHVyIGRvbG9ydW0gYW4uIEVzdCBuZSBtYWduYSBwcmltaXMNCiAgICAgYWRvbGVzY2Vucy4gU2l0IG11bmVyZSBwb25kZXJ1bSBkaWduaXNzaW0gZXQuIE1pbmltIGx1cHRhdHVtIGV0DQogICAgIHZlbC4NCiAgKiogVml2YW11cyBmcmluZ2lsbGEgbWkgZXUgbGFjdXMuDQogICogRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KLSBOdWxsYSBwb3J0dGl0b3IgdnVscHV0YXRlIGxpYmVyby4NCiAgLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogIC4gVml2YW11cyBmcmluZ2lsbGEgbWkgZXUgbGFjdXMuDQpbdXBwZXJyb21hbl0NCiAgICAuLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogICAgLi4gVml2YW11cyBmcmluZ2lsbGEgbWkgZXUgbGFjdXMuDQogIC4gRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCldoaWNoIHJlbmRlciBhczoNCg0KLSBQcmFlc2VudCBlZ2V0IHB1cnVzIHF1aXMgbWFnbmEgZWxlaWZlbmQgZWxlaWZlbmQuDQogIDEuIEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4NCiAgICBhLiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogICAgYi4gVml2YW11cyBmcmluZ2lsbGEgbWkgZXUgbGFjdXMuDQogICAgYy4gRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KICAyLiBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgICBpKSAgRnVzY2UgZXVpc21vZCBjb21tb2RvIHZlbGl0Lg0KICAgIGlpKSBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgMy4gRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KICA0LiBOYW0gZmVybWVudHVtIG1hdHRpcyBhbnRlLg0KLSBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4NCiAgKiBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQogICoqIFF1aSBpbiBtYWduYSBjb21tb2RvLCBlc3QgbGFiaXR1ciBkb2xvcnVtIGFuLiBFc3QgbmUgbWFnbmEgcHJpbWlzDQogICAgIGFkb2xlc2NlbnMuIFNpdCBtdW5lcmUgcG9uZGVydW0gZGlnbmlzc2ltIGV0LiBNaW5pbSBsdXB0YXR1bSBldA0KICAgICB2ZWwuDQogICoqIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAqIERvbmVjIGVnZXQgYXJjdSBiaWJlbmR1bSBudW5jIGNvbnNlcXVhdCBsb2JvcnRpcy4NCi0gTnVsbGEgcG9ydHRpdG9yIHZ1bHB1dGF0ZSBsaWJlcm8uDQogIC4gRnVzY2UgZXVpc21vZCBjb21tb2RvIHZlbGl0Lg0KICAuIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KW3VwcGVycm9tYW5dDQogICAgLi4gRnVzY2UgZXVpc21vZCBjb21tb2RvIHZlbGl0Lg0KICAgIC4uIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAuIERvbmVjIGVnZXQgYXJjdSBiaWJlbmR1bSBudW5jIGNvbnNlcXVhdCBsb2JvcnRpcy4NCg0KQSBwcmVkZWZpbmVkICdjb21wYWN0JyBvcHRpb24gaXMgYXZhaWxhYmxlIHRvIGJ1bGxldGVkIGFuZCBudW1iZXJlZA0KbGlzdHMgLS0gdGhpcyB0cmFuc2xhdGVzIHRvIHRoZSBEb2NCb29rICdzcGFjaW5nPSJjb21wYWN0IicgbGlzdHMNCmF0dHJpYnV0ZSB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSBwcm9jZXNzZWQgYnkgdGhlIERvY0Jvb2sgdG9vbGNoYWluLg0KRXhhbXBsZToNCg0KICBbb3B0aW9ucz0iY29tcGFjdCJdDQogIC0gQ29tcGFjdCBsaXN0IGl0ZW0uDQogIC0gQW5vdGhlciBjb21wYWN0IGxpc3QgaXRlbS4NCg0KVElQOiBUbyBhcHBseSB0aGUgJ2NvbXBhY3QnIG9wdGlvbiBnbG9iYWxseSBkZWZpbmUgYSBkb2N1bWVudC13aWRlDQonY29tcGFjdC1vcHRpb24nIGF0dHJpYnV0ZSwgZS5nLiB1c2luZyB0aGUgYC1hIGNvbXBhY3Qtb3B0aW9uYA0KY29tbWFuZC1saW5lIG9wdGlvbi4NCg0KWW91IGNhbiBzZXQgdGhlIGxpc3Qgc3RhcnQgbnVtYmVyIHVzaW5nIHRoZSAnc3RhcnQnIGF0dHJpYnV0ZSAod29ya3MNCmZvciBIVE1MIG91dHB1dHMgYW5kIERvY0Jvb2sgb3V0cHV0cyBwcm9jZXNzZWQgYnkgRG9jQm9vayBYU0wNClN0eWxlc2hlZXRzKS4gRXhhbXBsZToNCg0KICBbc3RhcnQ9N10NCiAgLiBMaXN0IGl0ZW0gNy4NCiAgLiBMaXN0IGl0ZW0gOC4NCg0KTGFiZWxlZCBMaXN0cw0Kfn5+fn5+fn5+fn5+fg0KTGFiZWxlZCBsaXN0IGl0ZW1zIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgdGV4dCBsYWJlbHMgZm9sbG93ZWQgYnkgdGhlDQp0ZXh0IG9mIHRoZSBsaXN0IGl0ZW0uDQoNCkFuIGl0ZW0gbGFiZWwgYmVnaW5zIGEgbGluZSB3aXRoIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIgaGFyZA0KYWdhaW5zdCB0aGUgbGVmdCBtYXJnaW4gYW5kIGVuZHMgd2l0aCB0d28sIHRocmVlIG9yIGZvdXIgY29sb25zIG9yIHR3bw0Kc2VtaS1jb2xvbnMuIEEgbGlzdCBpdGVtIGNhbiBoYXZlIG11bHRpcGxlIGxhYmVscywgb25lIHBlciBsaW5lLg0KDQpUaGUgbGlzdCBpdGVtIHRleHQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgbGluZXMgb2YgdGV4dCBzdGFydGluZw0KYWZ0ZXIgdGhlIGxhc3QgbGFiZWwgKGVpdGhlciBvbiB0aGUgc2FtZSBsaW5lIG9yIGEgbmV3IGxpbmUpIGFuZCBjYW4NCmJlIGZvbGxvd2VkIGJ5IG5lc3RlZCBMaXN0IG9yIExpc3RQYXJhZ3JhcGggZWxlbWVudHMuIEl0ZW0gdGV4dCBjYW4gYmUNCm9wdGlvbmFsbHkgaW5kZW50ZWQuDQoNCkhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KSW46Og0KTG9yZW06Og0KICBGdXNjZSBldWlzbW9kIGNvbW1vZG8gdmVsaXQuDQoNCiAgRnVzY2UgZXVpc21vZCBjb21tb2RvIHZlbGl0Lg0KDQpJcHN1bTo6IFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAqIFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KICAqIERvbmVjIGVnZXQgYXJjdSBiaWJlbmR1bSBudW5jIGNvbnNlcXVhdCBsb2JvcnRpcy4NCkRvbG9yOjoNCiAgRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KICBTdXNwZW5kaXNzZTs7DQogICAgQSBtYXNzYSBpZCBzZW0gYWxpcXVhbSBhdWN0b3IuDQogIE1vcmJpOzsNCiAgICBQcmV0aXVtIG51bGxhIHZlbCBsb3JlbS4NCiAgSW47Ow0KICAgIERpY3R1bSBtYXVyaXMgaW4gdXJuYS4NCiAgICBWaXZhbXVzOjo6IEZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgICBEb25lYzo6OiAgIEVnZXQgYXJjdSBiaWJlbmR1bSBudW5jIGNvbnNlcXVhdCBsb2JvcnRpcy4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpXaGljaCByZW5kZXIgYXM6DQoNCkluOjoNCkxvcmVtOjoNCiAgRnVzY2UgZXVpc21vZCBjb21tb2RvIHZlbGl0Lg0KDQogIEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4NCg0KSXBzdW06OiBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgKiBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgKiBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0gbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQpEb2xvcjo6DQogIERvbmVjIGVnZXQgYXJjdSBiaWJlbmR1bSBudW5jIGNvbnNlcXVhdCBsb2JvcnRpcy4NCiAgU3VzcGVuZGlzc2U7Ow0KICAgIEEgbWFzc2EgaWQgc2VtIGFsaXF1YW0gYXVjdG9yLg0KICBNb3JiaTs7DQogICAgUHJldGl1bSBudWxsYSB2ZWwgbG9yZW0uDQogIEluOzsNCiAgICBEaWN0dW0gbWF1cmlzIGluIHVybmEuDQogICAgVml2YW11czo6OiBGcmluZ2lsbGEgbWkgZXUgbGFjdXMuDQogICAgRG9uZWM6OjogICBFZ2V0IGFyY3UgYmliZW5kdW0gbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQoNCkhvcml6b250YWwgbGFiZWxlZCBsaXN0IHN0eWxlDQpeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KVGhlICdob3Jpem9udGFsJyBsYWJlbGVkIGxpc3Qgc3R5bGUgKGFsc28gdGhlIGZpcnN0IHBvc2l0aW9uYWwNCmF0dHJpYnV0ZSkgcGxhY2VzIHRoZSBsaXN0IHRleHQgc2lkZS1ieS1zaWRlIHdpdGggdGhlIGxhYmVsIGluc3RlYWQgb2YNCnVuZGVyIHRoZSBsYWJlbC4gSGVyZSBpcyBhbiBleGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltob3Jpem9udGFsXQ0KKkxvcmVtKjo6IEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4gIFF1aSBpbiBtYWduYSBjb21tb2RvLCBlc3QNCmxhYml0dXIgZG9sb3J1bSBhbi4gRXN0IG5lIG1hZ25hIHByaW1pcyBhZG9sZXNjZW5zLg0KDQogIEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4NCg0KKklwc3VtKjo6IFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KLSBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCi0gRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KDQoqRG9sb3IqOjoNCiAgLSBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgLSBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0gbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpXaGljaCByZW5kZXIgYXM6DQoNCltob3Jpem9udGFsXQ0KKkxvcmVtKjo6IEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4gIFF1aSBpbiBtYWduYSBjb21tb2RvLCBlc3QNCmxhYml0dXIgZG9sb3J1bSBhbi4gRXN0IG5lIG1hZ25hIHByaW1pcyBhZG9sZXNjZW5zLg0KDQogIEZ1c2NlIGV1aXNtb2QgY29tbW9kbyB2ZWxpdC4NCg0KKklwc3VtKjo6IFZpdmFtdXMgZnJpbmdpbGxhIG1pIGV1IGxhY3VzLg0KLSBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCi0gRG9uZWMgZWdldCBhcmN1IGJpYmVuZHVtIG51bmMgY29uc2VxdWF0IGxvYm9ydGlzLg0KDQoqRG9sb3IqOjoNCiAgLSBWaXZhbXVzIGZyaW5naWxsYSBtaSBldSBsYWN1cy4NCiAgLSBEb25lYyBlZ2V0IGFyY3UgYmliZW5kdW0gbnVuYyBjb25zZXF1YXQgbG9ib3J0aXMuDQoNCltOT1RFXQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotIEN1cnJlbnQgUERGIHRvb2xjaGFpbnMgZG8gbm90IG1ha2UgYSBnb29kIGpvYiBvZiBkZXRlcm1pbmluZw0KICB0aGUgcmVsYXRpdmUgY29sdW1uIHdpZHRocyBmb3IgaG9yaXpvbnRhbCBsYWJlbGVkIGxpc3RzLg0KLSBOZXN0ZWQgaG9yaXpvbnRhbCBsYWJlbGVkIGxpc3RzIHdpbGwgZ2VuZXJhdGUgRG9jQm9vayB2YWxpZGF0aW9uDQogIGVycm9ycyBiZWNhdXNlIHRoZSAnRG9jQm9vayBYTUwgVjQuMicgRFREIGRvZXMgbm90IHBlcm1pdCBuZXN0ZWQNCiAgaW5mb3JtYWwgdGFibGVzIChhbHRob3VnaCA8PFgxMyxEb2NCb29rIFhTTCBTdHlsZXNoZWV0cz4+IGFuZA0KICA8PFgzMSxkYmxhdGV4Pj4gcHJvY2VzcyB0aGVtIGNvcnJlY3RseSkuDQotIFRoZSBsYWJlbCB3aWR0aCBjYW4gYmUgc2V0IGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgdG90YWwgd2lkdGggYnkNCiAgc2V0dGluZyB0aGUgJ3dpZHRoJyBhdHRyaWJ1dGUgZS5nLiBgd2lkdGg9IjEwJSJgDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KUXVlc3Rpb24gYW5kIEFuc3dlciBMaXN0cw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KQXNjaWlEb2MgY29tZXMgcHJlLWNvbmZpZ3VyZWQgd2l0aCBhICdxYW5kYScgc3R5bGUgbGFiZWxlZCBsaXN0IGZvciBnZW5lcmF0aW5nDQpEb2NCb29rIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgKFEmQSkgbGlzdHMuIEV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW3FhbmRhXQ0KUXVlc3Rpb24gb25lOjoNCiAgICAgICAgQW5zd2VyIG9uZS4NClF1ZXN0aW9uIHR3bzo6DQogICAgICAgIEFuc3dlciB0d28uDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KUmVuZGVyczoNCg0KW3FhbmRhXQ0KUXVlc3Rpb24gb25lOjoNCiAgICAgICAgQW5zd2VyIG9uZS4NClF1ZXN0aW9uIHR3bzo6DQogICAgICAgIEFuc3dlciB0d28uDQoNCkdsb3NzYXJ5IExpc3RzDQp+fn5+fn5+fn5+fn5+fg0KQXNjaWlEb2MgY29tZXMgcHJlLWNvbmZpZ3VyZWQgd2l0aCBhICdnbG9zc2FyeScgc3R5bGUgbGFiZWxlZCBsaXN0IGZvcg0KZ2VuZXJhdGluZyBEb2NCb29rIGdsb3NzYXJ5IGxpc3RzLiBFeGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltnbG9zc2FyeV0NCkEgZ2xvc3NhcnkgdGVybTo6DQogICAgVGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbi4NCkEgc2Vjb25kIGdsb3NzYXJ5IHRlcm06Og0KICAgIFRoZSBjb3JyZXNwb25kaW5nIGRlZmluaXRpb24uDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KRm9yIHdvcmtpbmcgZXhhbXBsZXMgc2VlIHRoZSBgYXJ0aWNsZS50eHRgIGFuZCBgYm9vay50eHRgIGRvY3VtZW50cyBpbg0KdGhlIEFzY2lpRG9jIGAuL2RvY2AgZGlzdHJpYnV0aW9uIGRpcmVjdG9yeS4NCg0KTk9URTogVG8gZ2VuZXJhdGUgdmFsaWQgRG9jQm9vayBvdXRwdXQgZ2xvc3NhcnkgbGlzdHMgbXVzdCBiZSBsb2NhdGVkDQppbiBhIHNlY3Rpb24gdGhhdCB1c2VzIHRoZSAnZ2xvc3NhcnknIDw8WDkzLHNlY3Rpb24gbWFya3VwIHRlbXBsYXRlPj4uDQoNCkJpYmxpb2dyYXBoeSBMaXN0cw0Kfn5+fn5+fn5+fn5+fn5+fn5+DQpBc2NpaURvYyBjb21lcyB3aXRoIGEgcHJlZGVmaW5lZCAnYmlibGlvZ3JhcGh5JyBidWxsZXRlZCBsaXN0IHN0eWxlDQpnZW5lcmF0aW5nIERvY0Jvb2sgYmlibGlvZ3JhcGh5IGVudHJpZXMuIEV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW2JpYmxpb2dyYXBoeV0NCi5PcHRpb25hbCBsaXN0IHRpdGxlDQotIFtbW3Rhb3VwXV1dIEVyaWMgU3RldmVuIFJheW1vbmQuICdUaGUgQXJ0IG9mIFVOSVgNCiAgUHJvZ3JhbW1pbmcnLiBBZGRpc29uLVdlc2xleS4gSVNCTiAwLTEzLTE0MjkwMS05Lg0KLSBbW1t3YWxzaC1tdWVsbG5lcl1dXSBOb3JtYW4gV2Fsc2ggJiBMZW9uYXJkIE11ZWxsbmVyLg0KICAnRG9jQm9vayAtIFRoZSBEZWZpbml0aXZlIEd1aWRlJy4gTydSZWlsbHkgJiBBc3NvY2lhdGVzLg0KICAxOTk5LiBJU0JOIDEtNTY1OTItNTgwLTcuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KVGhlIGBbW1s8cmVmZXJlbmNlPl1dXWAgc3ludGF4IGlzIGEgYmlibGlvZ3JhcGh5IGVudHJ5IGFuY2hvciwgaXQNCmdlbmVyYXRlcyBhbiBhbmNob3IgbmFtZWQgYDxyZWZlcmVuY2U+YCBhbmQgYWRkaXRpb25hbGx5IGRpc3BsYXlzDQpgWzxyZWZlcmVuY2U+XWAgYXQgdGhlIGFuY2hvciBwb3NpdGlvbi4gRm9yIGV4YW1wbGUgYFtbW3Rhb3VwXV1dYA0KZ2VuZXJhdGVzIGFuIGFuY2hvciBuYW1lZCBgdGFvdXBgIHRoYXQgZGlzcGxheXMgYFt0YW91cF1gIGF0IHRoZQ0KYW5jaG9yIHBvc2l0aW9uLiBDaXRlIHRoZSByZWZlcmVuY2UgZnJvbSBlbHNld2hlcmUgeW91ciBkb2N1bWVudCB1c2luZw0KYDw8dGFvdXA+PmAsIHRoaXMgZGlzcGxheXMgYSBoeXBlcmxpbmsgKGBbdGFvdXBdYCkgdG8gdGhlDQpjb3JyZXNwb25kaW5nIGJpYmxpb2dyYXBoeSBlbnRyeSBhbmNob3IuDQoNCkZvciB3b3JraW5nIGV4YW1wbGVzIHNlZSB0aGUgYGFydGljbGUudHh0YCBhbmQgYGJvb2sudHh0YCBkb2N1bWVudHMgaW4NCnRoZSBBc2NpaURvYyBgLi9kb2NgIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnkuDQoNCk5PVEU6IFRvIGdlbmVyYXRlIHZhbGlkIERvY0Jvb2sgb3V0cHV0IGJpYmxpb2dyYXBoeSBsaXN0cyBtdXN0IGJlDQpsb2NhdGVkIGluIGEgPDxYOTMsYmlibGlvZ3JhcGh5IHNlY3Rpb24+Pi4NCg0KW1tYMTVdXQ0KTGlzdCBJdGVtIENvbnRpbnVhdGlvbg0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KQW5vdGhlciBsaXN0IG9yIGEgbGl0ZXJhbCBwYXJhZ3JhcGggaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgbGlzdCBpdGVtDQppcyBpbXBsaWNpdGx5IGFwcGVuZGVkIHRvIHRoZSBsaXN0IGl0ZW07IHRvIGFwcGVuZCBvdGhlciBibG9jaw0KZWxlbWVudHMgdG8gYSBsaXN0IGl0ZW0geW91IG5lZWQgdG8gZXhwbGljaXRseSBqb2luIHRoZW0gdG8gdGhlIGxpc3QNCml0ZW0gd2l0aCBhICdsaXN0IGNvbnRpbnVhdGlvbicgKGEgc2VwYXJhdG9yIGxpbmUgY29udGFpbmluZyBhIHNpbmdsZQ0KcGx1cyBjaGFyYWN0ZXIpLiBNdWx0aXBsZSBibG9jayBlbGVtZW50cyBjYW4gYmUgYXBwZW5kZWQgdG8gYSBsaXN0DQppdGVtIHVzaW5nIGxpc3QgY29udGludWF0aW9ucyAocHJvdmlkZWQgdGhleSBhcmUgbGVnYWwgbGlzdCBpdGVtDQpjaGlsZHJlbiBpbiB0aGUgYmFja2VuZCBtYXJrdXApLg0KDQpIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGxpc3QgaXRlbSBjb250aW51YXRpb25zOiBsaXN0IGl0ZW0gb25lDQpjb250YWlucyBtdWx0aXBsZSBjb250aW51YXRpb25zOyBsaXN0IGl0ZW0gdHdvIGlzIGNvbnRpbnVlZCB3aXRoIGFuDQo8PFgyOSxPcGVuQmxvY2s+PiBjb250YWluaW5nIG11bHRpcGxlIGVsZW1lbnRzOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjEuIExpc3QgaXRlbSBvbmUuDQorDQpMaXN0IGl0ZW0gb25lIGNvbnRpbnVlZCB3aXRoIGEgc2Vjb25kIHBhcmFncmFwaCBmb2xsb3dlZCBieSBhbg0KSW5kZW50ZWQgYmxvY2suDQorDQouLi4uLi4uLi4uLi4uLi4uLg0KJCBscyAqLnNoDQokIG12ICouc2ggfi90bXANCi4uLi4uLi4uLi4uLi4uLi4uDQorDQpMaXN0IGl0ZW0gY29udGludWVkIHdpdGggYSB0aGlyZCBwYXJhZ3JhcGguDQoNCjIuIExpc3QgaXRlbSB0d28gY29udGludWVkIHdpdGggYW4gb3BlbiBibG9jay4NCisNCi0tDQpUaGlzIHBhcmFncmFwaCBpcyBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgbGlzdCBpdGVtLg0KDQphLiBUaGlzIGxpc3QgaXMgbmVzdGVkIGFuZCBkb2VzIG5vdCByZXF1aXJlIGV4cGxpY2l0IGl0ZW0gY29udGludWF0aW9uLg0KKw0KVGhpcyBwYXJhZ3JhcGggaXMgcGFydCBvZiB0aGUgcHJlY2VkaW5nIGxpc3QgaXRlbS4NCg0KYi4gTGlzdCBpdGVtIGIuDQoNClRoaXMgcGFyYWdyYXBoIGJlbG9uZ3MgdG8gaXRlbSB0d28gb2YgdGhlIG91dGVyIGxpc3QuDQotLQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClJlbmRlcnM6DQoNCjEuIExpc3QgaXRlbSBvbmUuDQorDQpMaXN0IGl0ZW0gb25lIGNvbnRpbnVlZCB3aXRoIGEgc2Vjb25kIHBhcmFncmFwaCBmb2xsb3dlZCBieSBhbg0KSW5kZW50ZWQgYmxvY2suDQorDQouLi4uLi4uLi4uLi4uLi4uLg0KJCBscyAqLnNoDQokIG12ICouc2ggfi90bXANCi4uLi4uLi4uLi4uLi4uLi4uDQorDQpMaXN0IGl0ZW0gY29udGludWVkIHdpdGggYSB0aGlyZCBwYXJhZ3JhcGguDQoNCjIuIExpc3QgaXRlbSB0d28gY29udGludWVkIHdpdGggYW4gb3BlbiBibG9jay4NCisNCi0tDQpUaGlzIHBhcmFncmFwaCBpcyBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgbGlzdCBpdGVtLg0KDQphLiBUaGlzIGxpc3QgaXMgbmVzdGVkIGFuZCBkb2VzIG5vdCByZXF1aXJlIGV4cGxpY2l0IGl0ZW0gY29udGludWF0aW9uLg0KKw0KVGhpcyBwYXJhZ3JhcGggaXMgcGFydCBvZiB0aGUgcHJlY2VkaW5nIGxpc3QgaXRlbS4NCg0KYi4gTGlzdCBpdGVtIGIuDQoNClRoaXMgcGFyYWdyYXBoIGJlbG9uZ3MgdG8gaXRlbSB0d28gb2YgdGhlIG91dGVyIGxpc3QuDQotLQ0KDQoNCltbWDkyXV0NCkZvb3Rub3Rlcw0KLS0tLS0tLS0tDQpUaGUgc2hpcHBlZCBBc2NpaURvYyBjb25maWd1cmF0aW9uIGluY2x1ZGVzIHRocmVlIGZvb3Rub3RlIGlubGluZQ0KbWFjcm9zOg0KDQpgZm9vdG5vdGU6Wzx0ZXh0Pl1gOjoNCiAgR2VuZXJhdGVzIGEgZm9vdG5vdGUgd2l0aCB0ZXh0IGA8dGV4dD5gLg0KDQpgZm9vdG5vdGVyZWY6WzxpZD4sPHRleHQ+XWA6Og0KICBHZW5lcmF0ZXMgYSBmb290bm90ZSB3aXRoIGEgcmVmZXJlbmNlIElEIGA8aWQ+YCBhbmQgdGV4dCBgPHRleHQ+YC4NCg0KYGZvb3Rub3RlcmVmOls8aWQ+XWA6Og0KICBHZW5lcmF0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvb3Rub3RlIHdpdGggSUQgYDxpZD5gLg0KDQpUaGUgZm9vdG5vdGUgdGV4dCBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4NCg0KVGhlICd4aHRtbDExJyBhbmQgJ2h0bWw1JyBiYWNrZW5kcyByZW5kZXIgZm9vdG5vdGVzIGR5bmFtaWNhbGx5IHVzaW5nDQpKYXZhU2NyaXB0OyAnaHRtbDQnIG91dHB1dHMgZG8gbm90IHVzZSBKYXZhU2NyaXB0IGFuZCBsZWF2ZSB0aGUNCmZvb3Rub3RlcyBpbmxpbmU7ICdkb2Nib29rJyBmb290bm90ZXMgYXJlIHByb2Nlc3NlZCBieSB0aGUgZG93bnN0cmVhbQ0KRG9jQm9vayB0b29sY2hhaW4uDQoNCkV4YW1wbGUgZm9vdG5vdGVzOg0KDQogIEEgZm9vdG5vdGUgZm9vdG5vdGU6W0FuIGV4YW1wbGUgZm9vdG5vdGUuXTsNCiAgYSBzZWNvbmQgZm9vdG5vdGUgd2l0aCBhIHJlZmVyZW5jZSBJRCBmb290bm90ZXJlZjpbbm90ZTIsU2Vjb25kIGZvb3Rub3RlLl07DQogIGZpbmFsbHkgYSByZWZlcmVuY2UgdG8gdGhlIHNlY29uZCBmb290bm90ZSBmb290bm90ZXJlZjpbbm90ZTJdLg0KDQpSZW5kZXJzOg0KDQpBIGZvb3Rub3RlIGZvb3Rub3RlOltBbiBleGFtcGxlIGZvb3Rub3RlLl07DQphIHNlY29uZCBmb290bm90ZSB3aXRoIGEgcmVmZXJlbmNlIElEIGZvb3Rub3RlcmVmOltub3RlMixTZWNvbmQgZm9vdG5vdGUuXTsNCmZpbmFsbHkgYSByZWZlcmVuY2UgdG8gdGhlIHNlY29uZCBmb290bm90ZSBmb290bm90ZXJlZjpbbm90ZTJdLg0KDQoNCkluZGV4ZXMNCi0tLS0tLS0NClRoZSBzaGlwcGVkIEFzY2lpRG9jIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdGhlIGlubGluZSBtYWNyb3MgZm9yDQpnZW5lcmF0aW5nIERvY0Jvb2sgaW5kZXggZW50cmllcy4NCg0KYGluZGV4dGVybTpbPHByaW1hcnk+LDxzZWNvbmRhcnk+LDx0ZXJ0aWFyeT5dYDo6DQpgKCgoPHByaW1hcnk+LDxzZWNvbmRhcnk+LDx0ZXJ0aWFyeT4pKSlgOjoNCiAgICBUaGlzIGlubGluZSBtYWNybyBnZW5lcmF0ZXMgYW4gaW5kZXggdGVybSAodGhlIGA8c2Vjb25kYXJ5PmAgYW5kDQogICAgYDx0ZXJ0aWFyeT5gIHBvc2l0aW9uYWwgYXR0cmlidXRlcyBhcmUgb3B0aW9uYWwpLiBFeGFtcGxlOg0KICAgIGBpbmRleHRlcm06W1RpZ2VycyxCaWcgY2F0c11gIChvciwgdXNpbmcgdGhlIGFsdGVybmF0aXZlIHN5bnRheA0KICAgIGAoKChUaWdlcnMsQmlnIGNhdHMpKSlgLiAgSW5kZXggdGVybXMgdGhhdCBoYXZlIHNlY29uZGFyeSBhbmQNCiAgICB0ZXJ0aWFyeSBlbnRyaWVzIGFsc28gZ2VuZXJhdGUgc2VwYXJhdGUgaW5kZXggdGVybXMgZm9yIHRoZQ0KICAgIHNlY29uZGFyeSBhbmQgdGVydGlhcnkgZW50cmllcy4gVGhlIGluZGV4IHRlcm1zIGFwcGVhciBpbiB0aGUNCiAgICBpbmRleCwgbm90IHRoZSBwcmltYXJ5IHRleHQgZmxvdy4NCg0KYGluZGV4dGVybTI6WzxwcmltYXJ5Pl1gOjoNCmAoKDxwcmltYXJ5PikpYDo6DQogICAgVGhpcyBpbmxpbmUgbWFjcm8gZ2VuZXJhdGVzIGFuIGluZGV4IHRlcm0gdGhhdCBhcHBlYXJzIGluIGJvdGggdGhlDQogICAgaW5kZXggYW5kIHRoZSBwcmltYXJ5IHRleHQgZmxvdy4gIFRoZSBgPHByaW1hcnk+YCBzaG91bGQgbm90IGJlDQogICAgcGFkZGVkIHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IHdpdGggd2hpdGUgc3BhY2UgY2hhcmFjdGVycy4NCg0KRm9yIHdvcmtpbmcgZXhhbXBsZXMgc2VlIHRoZSBgYXJ0aWNsZS50eHRgIGFuZCBgYm9vay50eHRgIGRvY3VtZW50cyBpbg0KdGhlIEFzY2lpRG9jIGAuL2RvY2AgZGlzdHJpYnV0aW9uIGRpcmVjdG9yeS4NCg0KTk9URTogSW5kZXggZW50cmllcyBvbmx5IHJlYWxseSBtYWtlIHNlbnNlIGlmIHlvdSBhcmUgZ2VuZXJhdGluZw0KRG9jQm9vayBtYXJrdXAgLS0gRG9jQm9vayBjb252ZXJzaW9uIHByb2dyYW1zIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUNCmFuIGluZGV4IGF0IHRoZSBwb2ludCBhbiAnSW5kZXgnIHNlY3Rpb24gYXBwZWFycyBpbiBzb3VyY2UgZG9jdW1lbnQuDQoNCg0KW1tYMTA1XV0NCkNhbGxvdXRzDQotLS0tLS0tLQ0KQ2FsbG91dHMgYXJlIGEgbWVjaGFuaXNtIGZvciBhbm5vdGF0aW5nIHZlcmJhdGltIHRleHQgKGZvciBleGFtcGxlOg0Kc291cmNlIGNvZGUsIGNvbXB1dGVyIG91dHB1dCBhbmQgdXNlciBpbnB1dCkuIENhbGxvdXQgbWFya2VycyBhcmUNCnBsYWNlZCBpbnNpZGUgdGhlIGFubm90YXRlZCB0ZXh0IHdoaWxlIHRoZSBhY3R1YWwgYW5ub3RhdGlvbnMgYXJlDQpwcmVzZW50ZWQgaW4gYSBjYWxsb3V0IGxpc3QgYWZ0ZXIgdGhlIGFubm90YXRlZCB0ZXh0LiBIZXJlJ3MgYW4NCmV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIC5NUy1ET1MgZGlyZWN0b3J5IGxpc3RpbmcNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIDEwLzE3Lzk3ICAgOTowNCAgICAgICAgIDxESVI+ICAgIGJpbg0KIDEwLzE2Lzk3ICAxNDoxMSAgICAgICAgIDxESVI+ICAgIERPUyAgICAgICAgICAgIFw8MT4NCiAxMC8xNi85NyAgMTQ6NDAgICAgICAgICA8RElSPiAgICBQcm9ncmFtIEZpbGVzDQogMTAvMTYvOTcgIDE0OjQ2ICAgICAgICAgPERJUj4gICAgVEVNUA0KIDEwLzE3Lzk3ICAgOTowNCAgICAgICAgIDxESVI+ICAgIHRtcA0KIDEwLzE2Lzk3ICAxNDozNyAgICAgICAgIDxESVI+ICAgIFdJTk5UDQogMTAvMTYvOTcgIDE0OjI1ICAgICAgICAgICAgIDExOSAgQVVUT0VYRUMuQkFUICAgXDwyPg0KICAyLzEzLzk0ICAgNjoyMSAgICAgICAgICA1NCw2MTkgIENPTU1BTkQuQ09NICAgIFw8Mj4NCiAxMC8xNi85NyAgMTQ6MjUgICAgICAgICAgICAgMTE1ICBDT05GSUcuU1lTICAgICBcPDI+DQogMTEvMTYvOTcgIDE3OjE3ICAgICAgNjEsODY1LDk4NCAgcGFnZWZpbGUuc3lzDQogIDIvMTMvOTQgICA2OjIxICAgICAgICAgICA5LDM0OSAgV0lOQTIwLjM4NiAgICAgXDwzPg0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiBcPDE+IFRoaXMgZGlyZWN0b3J5IGhvbGRzIE1TLURPUy4NCiBcPDI+IFN5c3RlbSBzdGFydHVwIGNvZGUgZm9yIERPUy4NCiBcPDM+IFNvbWUgc29ydCBvZiBXaW5kb3dzIDMuMSBoYWNrLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCldoaWNoIHJlbmRlcnM6DQoNCi5NUy1ET1MgZGlyZWN0b3J5IGxpc3RpbmcNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxMC8xNy85NyAgIDk6MDQgICAgICAgICA8RElSPiAgICBiaW4NCjEwLzE2Lzk3ICAxNDoxMSAgICAgICAgIDxESVI+ICAgIERPUyAgICAgICAgICAgIDwxPg0KMTAvMTYvOTcgIDE0OjQwICAgICAgICAgPERJUj4gICAgUHJvZ3JhbSBGaWxlcw0KMTAvMTYvOTcgIDE0OjQ2ICAgICAgICAgPERJUj4gICAgVEVNUA0KMTAvMTcvOTcgICA5OjA0ICAgICAgICAgPERJUj4gICAgdG1wDQoxMC8xNi85NyAgMTQ6MzcgICAgICAgICA8RElSPiAgICBXSU5OVA0KMTAvMTYvOTcgIDE0OjI1ICAgICAgICAgICAgIDExOSAgQVVUT0VYRUMuQkFUICAgPDI+DQogMi8xMy85NCAgIDY6MjEgICAgICAgICAgNTQsNjE5ICBDT01NQU5ELkNPTSAgICA8Mj4NCjEwLzE2Lzk3ICAxNDoyNSAgICAgICAgICAgICAxMTUgIENPTkZJRy5TWVMgICAgIDwyPg0KMTEvMTYvOTcgIDE3OjE3ICAgICAgNjEsODY1LDk4NCAgcGFnZWZpbGUuc3lzDQogMi8xMy85NCAgIDY6MjEgICAgICAgICAgIDksMzQ5ICBXSU5BMjAuMzg2ICAgICA8Mz4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCjwxPiBUaGlzIGRpcmVjdG9yeSBob2xkcyBNUy1ET1MuDQo8Mj4gU3lzdGVtIHN0YXJ0dXAgY29kZSBmb3IgRE9TLg0KPDM+IFNvbWUgc29ydCBvZiBXaW5kb3dzIDMuMSBoYWNrLg0KDQouRXhwbGFuYXRpb24NCi0gVGhlIGNhbGxvdXQgbWFya3MgYXJlIHdob2xlIG51bWJlcnMgZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHMgLS0NCiAgdGhleSByZWZlciB0byB0aGUgY29ycmVzcG9uZGluZ2x5IG51bWJlcmVkIGl0ZW0gaW4gdGhlIGZvbGxvd2luZw0KICBjYWxsb3V0IGxpc3QuDQotIEJ5IGRlZmF1bHQgY2FsbG91dCBtYXJrcyBhcmUgY29uZmluZWQgdG8gJ0xpdGVyYWxQYXJhZ3JhcGhzJywNCiAgJ0xpdGVyYWxCbG9ja3MnIGFuZCAnTGlzdGluZ0Jsb2NrcycgKGFsdGhvdWdoIHRoaXMgaXMgYQ0KICBjb25maWd1cmF0aW9uIGZpbGUgb3B0aW9uIGFuZCBjYW4gYmUgY2hhbmdlZCkuDQotIENhbGxvdXQgbGlzdCBpdGVtIG51bWJlcmluZyBpcyBmYWlybHkgcmVsYXhlZCAtLSBsaXN0IGl0ZW1zIGNhbg0KICBzdGFydCB3aXRoIGA8bj5gLCBgbj5gIG9yIGA+YCB3aGVyZSBgbmAgaXMgdGhlIG9wdGlvbmFsIGxpc3QgaXRlbQ0KICBudW1iZXIgKGluIHRoZSBsYXR0ZXIgY2FzZSBsaXN0IGl0ZW1zIHN0YXJ0aW5nIHdpdGggYSBzaW5nbGUgYD5gDQogIGNoYXJhY3RlciBhcmUgaW1wbGljaXRseSBudW1iZXJlZCBzdGFydGluZyBhdCBvbmUpLg0KLSBDYWxsb3V0IGxpc3RzIHNob3VsZCBub3QgYmUgbmVzdGVkLg0KLSBDYWxsb3V0IGxpc3RzIHN0YXJ0IGxpc3QgaXRlbXMgaGFyZCBhZ2FpbnN0IHRoZSBsZWZ0IG1hcmdpbi4NCi0gSWYgeW91IHdhbnQgdG8gcHJlc2VudCBhIG51bWJlciBpbnNpZGUgYW5nbGUgYnJhY2tldHMgeW91J2xsIG5lZWQgdG8NCiAgZXNjYXBlIGl0IHdpdGggYSBiYWNrc2xhc2ggdG8gcHJldmVudCBpdCBiZWluZyBpbnRlcnByZXRlZCBhcyBhDQogIGNhbGxvdXQgbWFyay4NCg0KTk9URTogRGVmaW5lIHRoZSBBc2NpaURvYyAnaWNvbnMnIGF0dHJpYnV0ZSAoZm9yIGV4YW1wbGUgdXNpbmcgdGhlIGAtYQ0KaWNvbnNgIGNvbW1hbmQtbGluZSBvcHRpb24pIHRvIGRpc3BsYXkgY2FsbG91dCBpY29ucy4NCg0KSW1wbGVtZW50YXRpb24gTm90ZXMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpDYWxsb3V0IG1hcmtzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlICdjYWxsb3V0JyBpbmxpbmUgbWFjcm8gd2hpbGUNCmNhbGxvdXQgbGlzdHMgYXJlIGdlbmVyYXRlZCB1c2luZyB0aGUgJ2NhbGxvdXQnIGxpc3QgZGVmaW5pdGlvbi4gVGhlDQonY2FsbG91dCcgbWFjcm8gYW5kICdjYWxsb3V0JyBsaXN0IGFyZSBzcGVjaWFsIGluIHRoYXQgdGhleSB3b3JrDQp0b2dldGhlci4gVGhlICdjYWxsb3V0JyBpbmxpbmUgbWFjcm8gaXMgbm90IGVuYWJsZWQgYnkgdGhlIG5vcm1hbA0KJ21hY3Jvcycgc3Vic3RpdHV0aW9ucyBvcHRpb24sIGluc3RlYWQgaXQgaGFzIGl0cyBvd24gJ2NhbGxvdXRzJw0Kc3Vic3RpdHV0aW9uIG9wdGlvbi4NCg0KVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBhdmFpbGFibGUgZHVyaW5nIGlubGluZSBjYWxsb3V0IG1hY3JvDQpzdWJzdGl0dXRpb246DQoNCmB7aW5kZXh9YDo6DQogICAgVGhlIGNhbGxvdXQgbGlzdCBpdGVtIGluZGV4IGluc2lkZSB0aGUgYW5nbGUgYnJhY2tldHMuDQpge2NvaWR9YDo6DQogICAgQW4gaWRlbnRpZmllciBmb3JtYXR0ZWQgbGlrZSBgQ088bGlzdG51bWJlcj4tPGluZGV4PmAgdGhhdA0KICAgIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGNhbGxvdXQgbWFyay4gRm9yIGV4YW1wbGUgYENPMi00YA0KICAgIGlkZW50aWZpZXMgdGhlIGZvdXJ0aCBjYWxsb3V0IG1hcmsgaW4gdGhlIHNlY29uZCBzZXQgb2YgY2FsbG91dA0KICAgIG1hcmtzLg0KDQpUaGUgYHtjb2lkc31gIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCBkdXJpbmcgY2FsbG91dCBsaXN0IGl0ZW0NCnN1YnN0aXR1dGlvbiAtLSBpdCBpcyBhIHNwYWNlIGRlbGltaXRlZCBsaXN0IG9mIGNhbGxvdXQgSURzIHRoYXQgcmVmZXINCnRvIHRoZSBleHBsYW5hdG9yeSBsaXN0IGl0ZW0uDQoNCkluY2x1ZGluZyBjYWxsb3V0cyBpbiBpbmNsdWRlZCBjb2RlDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KWW91IGNhbiBhbm5vdGF0ZSB3b3JraW5nIGNvZGUgZXhhbXBsZXMgd2l0aCBjYWxsb3V0cyAtLSBqdXN0IHJlbWVtYmVyDQp0byBwdXQgdGhlIGNhbGxvdXRzIGluc2lkZSBzb3VyY2UgY29kZSBjb21tZW50cy4gVGhpcyBleGFtcGxlIGRpc3BsYXlzDQp0aGUgYHRlc3QucHlgIHNvdXJjZSBmaWxlIChjb250YWluaW5nIGEgc2luZ2xlIGNhbGxvdXQpIHVzaW5nIHRoZQ0KJ3NvdXJjZScgKGNvZGUgaGlnaGxpZ2h0ZXIpIGZpbHRlcjoNCg0KLkFzY2lpRG9jIHNvdXJjZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogW3NvdXJjZSxweXRob25dDQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIFxpbmNsdWRlOjp0ZXN0LnB5W10NCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiBcPDE+IFByaW50IHN0YXRlbWVudC4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQouSW5jbHVkZWQgYHRlc3QucHlgIHNvdXJjZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpwcmludCAnSGVsbG8gV29ybGQhJyAgICMgXDwxPg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCg0KTWFjcm9zDQotLS0tLS0NCk1hY3JvcyBhcmUgYSBtZWNoYW5pc20gZm9yIHN1YnN0aXR1dGluZyBwYXJhbWV0cml6ZWQgdGV4dCBpbnRvIG91dHB1dA0KZG9jdW1lbnRzLg0KDQpNYWNyb3MgaGF2ZSBhICduYW1lJywgYSBzaW5nbGUgJ3RhcmdldCcgYXJndW1lbnQgYW5kIGFuICdhdHRyaWJ1dGUNCmxpc3QnLiAgVGhlIHVzdWFsIHN5bnRheCBpcyBgPG5hbWU+Ojx0YXJnZXQ+WzxhdHRybGlzdD5dYCAoZm9yDQppbmxpbmUgbWFjcm9zKSBhbmQgYDxuYW1lPjo6PHRhcmdldD5bPGF0dHJsaXN0Pl1gIChmb3IgYmxvY2sNCm1hY3JvcykuICBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOg0KDQogIGh0dHA6Ly93d3cuZG9jYm9vay5vcmcvW0RvY0Jvb2sub3JnXQ0KICBpbmNsdWRlOjpjaGFwdDEudHh0W3RhYnNpemU9Ml0NCiAgbWFpbHRvOnNyYWNraGFtQGdtYWlsLmNvbVtdDQoNCi5NYWNybyBiZWhhdmlvcg0KLSBgPG5hbWU+YCBpcyB0aGUgbWFjcm8gbmFtZS4gSXQgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBkaWdpdHMgb3INCiAgZGFzaCBjaGFyYWN0ZXJzIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCBhIGRhc2guDQotIFRoZSBvcHRpb25hbCBgPHRhcmdldD5gIGNhbm5vdCBjb250YWluIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMuDQotIGA8YXR0cmxpc3Q+YCBpcyBhIDw8WDIxLGxpc3Qgb2YgYXR0cmlidXRlcz4+IGVuY2xvc2VkIGluIHNxdWFyZQ0KICBicmFja2V0cy4NCi0gYF1gIGNoYXJhY3RlcnMgaW5zaWRlIGF0dHJpYnV0ZSBsaXN0cyBtdXN0IGJlIGVzY2FwZWQgd2l0aCBhDQogIGJhY2tzbGFzaC4NCi0gRXhwYW5zaW9uIG9mIG1hY3JvIHJlZmVyZW5jZXMgY2FuIG5vcm1hbGx5IGJlIGVzY2FwZWQgYnkgcHJlZml4aW5nIGENCiAgYmFja3NsYXNoIGNoYXJhY3RlciAoc2VlIHRoZSBBc2NpaURvYyAnRkFRJyBmb3IgZXhhbXBsZXMgb2YNCiAgZXhjZXB0aW9ucyB0byB0aGlzIHJ1bGUpLg0KLSBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBpbiBibG9jayBtYWNyb3MgYXJlIGV4cGFuZGVkLg0KLSBUaGUgc3Vic3RpdHV0aW9ucyBwZXJmb3JtZWQgcHJpb3IgdG8gSW5saW5lIG1hY3JvIG1hY3JvIGV4cGFuc2lvbg0KICBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgaW5saW5lIGNvbnRleHQuDQotIE1hY3JvcyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgY29uZmlndXJhdGlvbg0KICBmaWxlKHMpLg0KLSBDYWxscyB0byBpbmxpbmUgbWFjcm9zIGNhbiBiZSBuZXN0ZWQgaW5zaWRlIGRpZmZlcmVudCBpbmxpbmUgbWFjcm9zDQogIChhbiBpbmxpbmUgbWFjcm8gY2FsbCBjYW5ub3QgY29udGFpbiBhIG5lc3RlZCBjYWxsIHRvIGl0c2VsZikuDQotIEluIGFkZGl0aW9uIHRvIGA8bmFtZT5gLCBgPHRhcmdldD5gIGFuZCBgPGF0dHJsaXN0PmAgdGhlDQogIGA8cGFzc3RleHQ+YCBhbmQgYDxzdWJzbGlzdD5gIG5hbWVkIGdyb3VwcyBhcmUgYXZhaWxhYmxlIHRvDQogIDw8WDc3LHBhc3N0aHJvdWdoIG1hY3Jvcz4+LiBBIG1hY3JvIGlzIGEgcGFzc3Rocm91Z2ggbWFjcm8gaWYgdGhlDQogIGRlZmluaXRpb24gaW5jbHVkZXMgYSBgPHBhc3N0ZXh0PmAgbmFtZWQgZ3JvdXAuDQoNCklubGluZSBNYWNyb3MNCn5+fn5+fn5+fn5+fn4NCklubGluZSBNYWNyb3Mgb2NjdXIgaW4gYW4gaW5saW5lIGVsZW1lbnQgY29udGV4dC4gUHJlZGVmaW5lZCBJbmxpbmUNCm1hY3JvcyBpbmNsdWRlICdVUkxzJywgJ2ltYWdlJyBhbmQgJ2xpbmsnIG1hY3Jvcy4NCg0KVVJMcw0KXl5eXg0KJ2h0dHAnLCAnaHR0cHMnLCAnZnRwJywgJ2ZpbGUnLCAnbWFpbHRvJyBhbmQgJ2NhbGx0bycgVVJMcyBhcmUNCnJlbmRlcmVkIHVzaW5nIHByZWRlZmluZWQgaW5saW5lIG1hY3Jvcy4NCg0KLSBJZiB5b3UgZG9uJ3QgbmVlZCBhIGN1c3RvbSBsaW5rIGNhcHRpb24geW91IGNhbiBlbnRlciB0aGUgJ2h0dHAnLA0KICAnaHR0cHMnLCAnZnRwJywgJ2ZpbGUnIFVSTHMgYW5kIGVtYWlsIGFkZHJlc3NlcyB3aXRob3V0IGFueSBzcGVjaWFsDQogIG1hY3JvIHN5bnRheC4NCi0gSWYgdGhlIGA8YXR0cmxpc3Q+YCBpcyBlbXB0eSB0aGUgVVJMIGlzIGRpc3BsYXllZC4NCg0KSGVyZSBhcmUgc29tZSBleGFtcGxlczoNCg0KICBodHRwOi8vd3d3LmRvY2Jvb2sub3JnL1tEb2NCb29rLm9yZ10NCiAgaHR0cDovL3d3dy5kb2Nib29rLm9yZy8NCiAgbWFpbHRvOmpvZS5ibG9nZ3NAZm9vYmFyLmNvbVtlbWFpbCBKb2UgQmxvZ2dzXQ0KICBqb2UuYmxvZ2dzQGZvb2Jhci5jb20NCg0KV2hpY2ggYXJlIHJlbmRlcmVkOg0KDQpodHRwOi8vd3d3LmRvY2Jvb2sub3JnL1tEb2NCb29rLm9yZ10NCg0KaHR0cDovL3d3dy5kb2Nib29rLm9yZy8NCg0KbWFpbHRvOmpvZS5ibG9nZ3NAZm9vYmFyLmNvbVtlbWFpbCBKb2UgQmxvZ2dzXQ0KDQpqb2UuYmxvZ2dzQGZvb2Jhci5jb20NCg0KSWYgdGhlIGA8dGFyZ2V0PmAgbmVjZXNzaXRhdGVzIHNwYWNlIGNoYXJhY3RlcnMgdXNlIGAlMjBgLCBmb3IgZXhhbXBsZQ0KYGxhcmdlJTIwaW1hZ2UucG5nYC4NCg0KSW50ZXJuYWwgQ3Jvc3MgUmVmZXJlbmNlcw0KXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KVHdvIEFzY2lpRG9jIGlubGluZSBtYWNyb3MgYXJlIHByb3ZpZGVkIGZvciBjcmVhdGluZyBoeXBlcnRleHQgbGlua3MNCndpdGhpbiBhbiBBc2NpaURvYyBkb2N1bWVudC4gWW91IGNhbiB1c2UgZWl0aGVyIHRoZSBzdGFuZGFyZCBtYWNybw0Kc3ludGF4IG9yIHRoZSAocHJlZmVycmVkKSBhbHRlcm5hdGl2ZS4NCg0KW1tYMzBdXQ0KYW5jaG9yDQorKysrKysNClVzZWQgdG8gc3BlY2lmeSBoeXBlcnRleHQgbGluayB0YXJnZXRzOg0KDQogIFtbPGlkPiw8eHJlZmxhYmVsPl1dDQogIGFuY2hvcjo8aWQ+Wzx4cmVmbGFiZWw+XQ0KDQpUaGUgYDxpZD5gIGlzIGEgdW5pcXVlIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIHRoZSBvdXRwdXQgbWFya3VwJ3MNCmFuY2hvciBzeW50YXguIFRoZSBvcHRpb25hbCBgPHhyZWZsYWJlbD5gIGlzIHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZA0KYnkgY2FwdGlvbmxlc3MgJ3hyZWYnIG1hY3JvcyB0aGF0IHJlZmVyIHRvIHRoaXMgYW5jaG9yLiBUaGUgb3B0aW9uYWwNCmA8eHJlZmxhYmVsPmAgaXMgb25seSByZWFsbHkgdXNlZnVsIHdoZW4gZ2VuZXJhdGluZyBEb2NCb29rIG91dHB1dC4NCkV4YW1wbGUgYW5jaG9yOg0KDQogIFtbWDFdXQ0KDQpZb3UgbWF5IGhhdmUgbm90aWNlZCB0aGF0IHRoZSBzeW50YXggb2YgdGhpcyBpbmxpbmUgZWxlbWVudCBpcyB0aGUNCnNhbWUgYXMgdGhhdCBvZiB0aGUgPDxYNDEsQmxvY2tJZCBibG9jayBlbGVtZW50Pj4sIHRoaXMgaXMgbm8NCmNvaW5jaWRlbmNlIHNpbmNlIHRoZXkgYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50Lg0KDQp4cmVmDQorKysrDQpDcmVhdGVzIGEgaHlwZXJ0ZXh0IGxpbmsgdG8gYSBkb2N1bWVudCBhbmNob3IuDQoNCiAgPDw8aWQ+LDxjYXB0aW9uPj4+DQogIHhyZWY6PGlkPls8Y2FwdGlvbj5dDQoNClRoZSBgPGlkPmAgcmVmZXJzIHRvIGFuIGFuY2hvciBJRC4gVGhlIG9wdGlvbmFsIGA8Y2FwdGlvbj5gIGlzIHRoZQ0KbGluaydzIGRpc3BsYXllZCB0ZXh0LiBFeGFtcGxlOg0KDQogIDw8WDIxLGF0dHJpYnV0ZSBsaXN0cz4+DQoNCklmIGA8Y2FwdGlvbj5gIGlzIG5vdCBzcGVjaWZpZWQgdGhlbiB0aGUgZGlzcGxheWVkIHRleHQgaXMNCmF1dG8tZ2VuZXJhdGVkOg0KDQotIFRoZSBBc2NpaURvYyAneGh0bWwxMScgYW5kICdodG1sNScgYmFja2VuZHMgZGlzcGxheSB0aGUgYDxpZD5gDQogIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cy4NCi0gSWYgRG9jQm9vayBpcyBwcm9kdWNlZCB0aGUgRG9jQm9vayB0b29sY2hhaW4gaXMgcmVzcG9uc2libGUgZm9yIHRoZQ0KICBkaXNwbGF5ZWQgdGV4dCB3aGljaCB3aWxsIG5vcm1hbGx5IGJlIHRoZSByZWZlcmVuY2VkIGZpZ3VyZSwgdGFibGUNCiAgb3Igc2VjdGlvbiB0aXRsZSBudW1iZXIgZm9sbG93ZWQgYnkgdGhlIGVsZW1lbnQncyB0aXRsZSB0ZXh0Lg0KDQpIZXJlIGlzIGFuIGV4YW1wbGU6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW1t0aWdlcl9pbWFnZV1dDQouVHlnZXIgdHlnZXINCmltYWdlOjp0aWdlci5wbmdbXQ0KDQpUaGlzIGNhbiBiZSBzZWVuIGluIDw8dGlnZXJfaW1hZ2U+Pi4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpMaW5raW5nIHRvIExvY2FsIERvY3VtZW50cw0KXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4NCkh5cGVydGV4dCBsaW5rcyB0byBmaWxlcyBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gYXJlIHNwZWNpZmllZCB1c2luZw0KdGhlICdsaW5rJyBpbmxpbmUgbWFjcm8uDQoNCiAgbGluazo8dGFyZ2V0Pls8Y2FwdGlvbj5dDQoNClRoZSAnbGluaycgbWFjcm8gZ2VuZXJhdGVzIHJlbGF0aXZlIFVSTHMuIFRoZSBsaW5rIG1hY3JvIGA8dGFyZ2V0PmAgaXMNCnRoZSB0YXJnZXQgZmlsZSBuYW1lIChyZWxhdGl2ZSB0byB0aGUgZmlsZSBzeXN0ZW0gbG9jYXRpb24gb2YgdGhlDQpyZWZlcnJpbmcgZG9jdW1lbnQpLiBUaGUgb3B0aW9uYWwgYDxjYXB0aW9uPmAgaXMgdGhlIGxpbmsncyBkaXNwbGF5ZWQNCnRleHQuIElmIGA8Y2FwdGlvbj5gIGlzIG5vdCBzcGVjaWZpZWQgdGhlbiBgPHRhcmdldD5gIGlzIGRpc3BsYXllZC4NCkV4YW1wbGU6DQoNCiAgbGluazpkb3dubG9hZHMvZm9vLnppcFtkb3dubG9hZCBmb28uemlwXQ0KDQpZb3UgY2FuIHVzZSB0aGUgYDxmaWxlbmFtZT4jPGlkPmAgc3ludGF4IHRvIHJlZmVyIHRvIGFuIGFuY2hvciB3aXRoaW4NCmEgdGFyZ2V0IGRvY3VtZW50IGJ1dCB0aGlzIHVzdWFsbHkgb25seSBtYWtlcyBzZW5zZSB3aGVuIHRhcmdldGluZw0KSFRNTCBkb2N1bWVudHMuDQoNCltbWDldXQ0KSW1hZ2VzDQpeXl5eXl4NCklubGluZSBpbWFnZXMgYXJlIGluc2VydGVkIGludG8gdGhlIG91dHB1dCBkb2N1bWVudCB1c2luZyB0aGUgJ2ltYWdlJw0KbWFjcm8uIFRoZSBpbmxpbmUgc3ludGF4IGlzOg0KDQogIGltYWdlOjx0YXJnZXQ+WzxhdHRyaWJ1dGVzPl0NCg0KVGhlIGNvbnRlbnRzIG9mIHRoZSBpbWFnZSBmaWxlIGA8dGFyZ2V0PmAgaXMgZGlzcGxheWVkLiBUbyBkaXNwbGF5IHRoZQ0KaW1hZ2UgaXRzIGZpbGUgZm9ybWF0IG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSB0YXJnZXQgYmFja2VuZA0KYXBwbGljYXRpb24uIEhUTUwgYW5kIERvY0Jvb2sgYXBwbGljYXRpb25zIG5vcm1hbGx5IHN1cHBvcnQgUE5HIG9yIEpQRw0KZmlsZXMuDQoNCmA8dGFyZ2V0PmAgZmlsZSBuYW1lIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlDQpyZWZlcnJpbmcgZG9jdW1lbnQuDQoNCltbWDU1XV0NCi5JbWFnZSBtYWNybyBhdHRyaWJ1dGVzDQotIFRoZSBvcHRpb25hbCAnYWx0JyBhdHRyaWJ1dGUgaXMgYWxzbyB0aGUgZmlyc3QgcG9zaXRpb25hbCBhdHRyaWJ1dGUsDQogIGl0IHNwZWNpZmllcyBhbHRlcm5hdGl2ZSB0ZXh0IHdoaWNoIGlzIGRpc3BsYXllZCBpZiB0aGUgb3V0cHV0DQogIGFwcGxpY2F0aW9uIGlzIHVuYWJsZSB0byBkaXNwbGF5IHRoZSBpbWFnZSBmaWxlIChzZWUgYWxzbw0KICBodHRwOi8vaHRtbGhlbHAuY29tL2ZlYXR1cmUvYXJ0My5odG1bVXNlIG9mIEFMVCB0ZXh0cyBpbiBJTUdzXSkuIEZvcg0KICBleGFtcGxlOg0KDQogIGltYWdlOmltYWdlcy9sb2dvLnBuZ1tDb21wYW55IExvZ29dDQoNCi0gVGhlIG9wdGlvbmFsICd0aXRsZScgYXR0cmlidXRlIHByb3ZpZGVzIGEgdGl0bGUgZm9yIHRoZSBpbWFnZS4gVGhlDQogIDw8WDQ5LGJsb2NrIGltYWdlIG1hY3JvPj4gcmVuZGVycyB0aGUgdGl0bGUgYWxvbmdzaWRlIHRoZSBpbWFnZS4NCiAgVGhlIGlubGluZSBpbWFnZSBtYWNybyBkaXNwbGF5cyB0aGUgdGl0bGUgYXMgYSBwb3B1cCBgYHRvb2x0aXAnJyBpbg0KICB2aXN1YWwgYnJvd3NlcnMgKEFzY2lpRG9jIEhUTUwgb3V0cHV0cyBvbmx5KS4NCg0KLSBUaGUgb3B0aW9uYWwgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXR0cmlidXRlcyBzY2FsZSB0aGUgaW1hZ2Ugc2l6ZQ0KICBhbmQgY2FuIGJlIHVzZWQgaW4gYW55IGNvbWJpbmF0aW9uLiBUaGUgdW5pdHMgYXJlIHBpeGVscy4gIFRoZQ0KICBmb2xsb3dpbmcgZXhhbXBsZSBzY2FsZXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgdG8gYSBoZWlnaHQgb2YgMzINCiAgcGl4ZWxzOg0KDQogIGltYWdlOmltYWdlcy9sb2dvLnBuZ1siQ29tcGFueSBMb2dvIixoZWlnaHQ9MzJdDQoNCi0gVGhlIG9wdGlvbmFsIGBsaW5rYCBhdHRyaWJ1dGUgaXMgdXNlZCB0byBsaW5rIHRoZSBpbWFnZSB0byBhbg0KICBleHRlcm5hbCBkb2N1bWVudC4gVGhlIGZvbGxvd2luZyBleGFtcGxlIGxpbmtzIGEgc2NyZWVuc2hvdA0KICB0aHVtYm5haWwgdG8gYSBmdWxsIHNpemUgdmVyc2lvbjoNCg0KICBpbWFnZTpzY3JlZW4tdGh1bWJuYWlsLnBuZ1toZWlnaHQ9MzIsbGluaz0ic2NyZWVuLnBuZyJdDQoNCi0gVGhlIG9wdGlvbmFsIGBzY2FsZWR3aWR0aGAgYXR0cmlidXRlIGlzIG9ubHkgdXNlZCBpbiBEb2NCb29rIGJsb2NrDQogIGltYWdlcyAoc3BlY2lmaWNhbGx5IGZvciBQREYgZG9jdW1lbnRzKS4gVGhlIGZvbGxvd2luZyBleGFtcGxlDQogIHNjYWxlcyB0aGUgaW1hZ2VzIHRvIDc1JSBvZiB0aGUgYXZhaWxhYmxlIHByaW50IHdpZHRoOg0KDQogIGltYWdlOjppbWFnZXMvbG9nby5wbmdbc2NhbGVkd2lkdGg9Ijc1JSIsYWx0PSJDb21wYW55IExvZ28iXQ0KDQotIFRoZSBpbWFnZSBgc2NhbGVgIGF0dHJpYnV0ZSBzZXRzIHRoZSBEb2NCb29rIGBpbWFnZWRhdGFgIGVsZW1lbnQNCiAgYHNjYWxlYCBhdHRyaWJ1dGUuDQoNCi0gVGhlIG9wdGlvbmFsIGBhbGlnbmAgYXR0cmlidXRlIGlzIHVzZWQgZm9yIGhvcml6b250YWwgaW1hZ2UNCiAgYWxpZ25tZW50LiAgQWxsb3dlZCB2YWx1ZXMgYXJlIGBjZW50ZXJgLCBgbGVmdGAgYW5kIGByaWdodGAuIEZvcg0KICBleGFtcGxlOg0KDQogIGltYWdlOjppbWFnZXMvdGlnZXIucG5nWyJUaWdlciBpbWFnZSIsYWxpZ249ImxlZnQiXQ0KDQotIFRoZSBvcHRpb25hbCBgZmxvYXRgIGF0dHJpYnV0ZSBmbG9hdHMgdGhlIGltYWdlIGBsZWZ0YCBvciBgcmlnaHRgIG9uDQogIHRoZSBwYWdlICh3b3JrcyB3aXRoIEhUTUwgb3V0cHV0cyBvbmx5LCBoYXMgbm8gZWZmZWN0IG9uIERvY0Jvb2sNCiAgb3V0cHV0cykuIGBmbG9hdGAgYW5kIGBhbGlnbmAgYXR0cmlidXRlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLg0KICBVc2UgdGhlIGB1bmZsb2F0OjpbXWAgYmxvY2sgbWFjcm8gdG8gc3RvcCBmbG9hdGluZy4NCg0KQ29tbWVudCBMaW5lcw0KXl5eXl5eXl5eXl5eXg0KU2VlIDw8WDI1LGNvbW1lbnQgYmxvY2sgbWFjcm8+Pi4NCg0KQmxvY2sgTWFjcm9zDQp+fn5+fn5+fn5+fn4NCkEgQmxvY2sgbWFjcm8gcmVmZXJlbmNlIG11c3QgYmUgY29udGFpbmVkIGluIGEgc2luZ2xlIGxpbmUgc2VwYXJhdGVkDQplaXRoZXIgc2lkZSBieSBhIGJsYW5rIGxpbmUgb3IgYSBibG9jayBkZWxpbWl0ZXIuDQoNCkJsb2NrIG1hY3JvcyBiZWhhdmUganVzdCBsaWtlIElubGluZSBtYWNyb3MsIHdpdGggdGhlIGZvbGxvd2luZw0KZGlmZmVyZW5jZXM6DQoNCi0gVGhleSBvY2N1ciBpbiBhIGJsb2NrIGNvbnRleHQuDQotIFRoZSBkZWZhdWx0IHN5bnRheCBpcyBgPG5hbWU+Ojo8dGFyZ2V0Pls8YXR0cmxpc3Q+XWAgKHR3bw0KICBjb2xvbnMsIG5vdCBvbmUpLg0KLSBNYXJrdXAgdGVtcGxhdGUgc2VjdGlvbiBuYW1lcyBlbmQgaW4gYC1ibG9ja21hY3JvYCBpbnN0ZWFkIG9mDQogIGAtaW5saW5lbWFjcm9gLg0KDQpCbG9jayBJZGVudGlmaWVyDQpeXl5eXl5eXl5eXl5eXl5eDQpUaGUgQmxvY2sgSWRlbnRpZmllciBtYWNybyBzZXRzIHRoZSBgaWRgIGF0dHJpYnV0ZSBhbmQgaGFzIHRoZSBzYW1lDQpzeW50YXggYXMgdGhlIDw8WDMwLGFuY2hvciBpbmxpbmUgbWFjcm8+PiBzaW5jZSBpdCBwZXJmb3Jtcw0KZXNzZW50aWFsbHkgdGhlIHNhbWUgZnVuY3Rpb24gLS0gYmxvY2sgdGVtcGxhdGVzIHVzZSB0aGUgYGlkYA0KYXR0cmlidXRlIGFzIGEgYmxvY2sgZWxlbWVudCBJRC4gRm9yIGV4YW1wbGU6DQoNCiAgW1tYMzBdXQ0KDQpUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGBbaWQ9IlgzMCJdYCA8PFg3OSxBdHRyaWJ1dGVMaXN0IGVsZW1lbnQ+PikuDQoNCltbWDQ5XV0NCkltYWdlcw0KXl5eXl5eDQpUaGUgJ2ltYWdlJyBibG9jayBtYWNybyBpcyB1c2VkIHRvIGRpc3BsYXkgaW1hZ2VzIGluIGEgYmxvY2sgY29udGV4dC4NClRoZSBzeW50YXggaXM6DQoNCiAgaW1hZ2U6Ojx0YXJnZXQ+WzxhdHRyaWJ1dGVzPl0NCg0KVGhlIGJsb2NrIGBpbWFnZWAgbWFjcm8gaGFzIHRoZSBzYW1lIDw8WDU1LG1hY3JvIGF0dHJpYnV0ZXM+PiBhcyBpdCdzDQo8PFg5LGlubGluZSBpbWFnZSBtYWNybz4+IGNvdW50ZXJwYXJ0Lg0KDQpCbG9jayBpbWFnZXMgY2FuIGJlIHRpdGxlZCBieSBwcmVjZWRpbmcgdGhlICdpbWFnZScgbWFjcm8gd2l0aCBhDQonQmxvY2tUaXRsZScuICBEb2NCb29rIHRvb2xjaGFpbnMgbm9ybWFsbHkgbnVtYmVyIHRpdGxlZCBibG9jayBpbWFnZXMNCmFuZCBvcHRpb25hbGx5IGxpc3QgdGhlbSBpbiBhbiBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCAnTGlzdCBvZg0KRmlndXJlcycgYmFja21hdHRlciBzZWN0aW9uLg0KDQpUaGlzIGV4YW1wbGU6DQoNCiAgLk1haW4gY2lyY3VpdCBib2FyZA0KICBpbWFnZTo6aW1hZ2VzL2xheW91dC5wbmdbSjE0UCBtYWluIGNpcmN1aXQgYm9hcmRdDQoNCmlzIGVxdWl2YWxlbnQgdG86DQoNCiAgaW1hZ2U6OmltYWdlcy9sYXlvdXQucG5nWyJKMTRQIG1haW4gY2lyY3VpdCBib2FyZCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9Ik1haW4gY2lyY3VpdCBib2FyZCJdDQoNCkEgdGl0bGUgcHJlZml4IHRoYXQgY2FuIGJlIGluc2VydGVkIHdpdGggdGhlIGBjYXB0aW9uYCBhdHRyaWJ1dGUNCihIVE1MIGJhY2tlbmRzKS4gRm9yIGV4YW1wbGU6DQoNCiAgLk1haW4gY2lyY3VpdCBib2FyZA0KICBbY2FwdGlvbj0iRmlndXJlIDI6ICJdDQogIGltYWdlOjppbWFnZXMvbGF5b3V0LnBuZ1tKMTRQIG1haW4gY2lyY3VpdCBib2FyZF0NCg0KW1tYNjZdXQ0KLkVtYmVkZGluZyBpbWFnZXMgaW4gWEhUTUwgZG9jdW1lbnRzDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCklmIHlvdSBkZWZpbmUgdGhlIGBkYXRhLXVyaWAgYXR0cmlidXRlIHRoZW4gaW1hZ2VzIHdpbGwgYmUgZW1iZWRkZWQgaW4NClhIVE1MIG91dHB1dHMgdXNpbmcgdGhlDQpodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGE6X1VSSV9zY2hlbWVbZGF0YSBVUkkgc2NoZW1lXS4gIFlvdQ0KY2FuIHVzZSB0aGUgJ2RhdGEtdXJpJyBhdHRyaWJ1dGUgd2l0aCB0aGUgJ3hodG1sMTEnIGFuZCAnaHRtbDUnDQpiYWNrZW5kcyB0byBwcm9kdWNlIHNpbmdsZS1maWxlIFhIVE1MIGRvY3VtZW50cyB3aXRoIGVtYmVkZGVkIGltYWdlcw0KYW5kIENTUywgZm9yIGV4YW1wbGU6DQoNCiAgJCBhc2NpaWRvYyAtYSBkYXRhLXVyaSBteWRvY3VtZW50LnR4dA0KDQpbTk9URV0NCj09PT09PQ0KLSBBbGwgY3VycmVudCBwb3B1bGFyIGJyb3dzZXJzIHN1cHBvcnQgZGF0YSBVUklzLCBhbHRob3VnaCB2ZXJzaW9ucw0KICBvZiBJbnRlcm5ldCBFeHBsb3JlciBwcmlvciB0byB2ZXJzaW9uIDggZG8gbm90Lg0KLSBTb21lIGJyb3dzZXJzIGxpbWl0IHRoZSBzaXplIG9mIGRhdGEgVVJJcy4NCj09PT09PQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCltbWDI1XV0NCkNvbW1lbnQgTGluZXMNCl5eXl5eXl5eXl5eXl4NClNpbmdsZSBsaW5lcyBzdGFydGluZyB3aXRoIHR3byBmb3J3YXJkIHNsYXNoZXMgaGFyZCB1cCBhZ2FpbnN0IHRoZQ0KbGVmdCBtYXJnaW4gYXJlIHRyZWF0ZWQgYXMgY29tbWVudHMuIENvbW1lbnQgbGluZXMgZG8gbm90IGFwcGVhciBpbg0KdGhlIG91dHB1dCB1bmxlc3MgdGhlICdzaG93Y29tbWVudHMnIGF0dHJpYnV0ZSBpcyBkZWZpbmVkLiAgQ29tbWVudA0KbGluZXMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGFzIGJvdGggYmxvY2sgYW5kIGlubGluZSBtYWNyb3Mgc28gYQ0KY29tbWVudCBsaW5lIGNhbiBhcHBlYXIgYXMgYSBzdGFuZC1hbG9uZSBibG9jayBvciB3aXRoaW4gYmxvY2sgZWxlbWVudHMNCnRoYXQgc3VwcG9ydCBpbmxpbmUgbWFjcm8gZXhwYW5zaW9uLiBFeGFtcGxlIGNvbW1lbnQgbGluZToNCg0KICAvLyBUaGlzIGlzIGEgY29tbWVudC4NCg0KSWYgdGhlICdzaG93Y29tbWVudHMnIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGNvbW1lbnQgbGluZXMgYXJlIHdyaXR0ZW4NCnRvIHRoZSBvdXRwdXQ6DQoNCi0gSW4gRG9jQm9vayB0aGUgY29tbWVudCBsaW5lcyBhcmUgZW5jbG9zZWQgYnkgdGhlICdyZW1hcmsnIGVsZW1lbnQNCiAgKHdoaWNoIG1heSBvciBtYXkgbm90IGJlIHJlbmRlcmVkIGJ5IHlvdXIgdG9vbGNoYWluKS4NCi0gVGhlICdzaG93Y29tbWVudHMnIGF0dHJpYnV0ZSBkb2VzIG5vdCBleHBvc2UgPDxYMjYsQ29tbWVudCBCbG9ja3M+Pi4NCiAgQ29tbWVudCBCbG9ja3MgYXJlIG5ldmVyIHBhc3NlZCB0byB0aGUgb3V0cHV0Lg0KDQpTeXN0ZW0gTWFjcm9zDQp+fn5+fn5+fn5+fn5+DQpTeXN0ZW0gbWFjcm9zIGFyZSBibG9jayBtYWNyb3MgdGhhdCBwZXJmb3JtIGEgcHJlZGVmaW5lZCB0YXNrIGFuZCBhcmUNCmhhcmR3aXJlZCBpbnRvIHRoZSBhc2NpaWRvYygxKSBwcm9ncmFtLg0KDQotIFlvdSBjYW4gZXNjYXBlIHN5c3RlbSBtYWNyb3Mgd2l0aCBhIGxlYWRpbmcgYmFja3NsYXNoIGNoYXJhY3Rlcg0KICAoYXMgeW91IGNhbiB3aXRoIG90aGVyIG1hY3JvcykuDQotIFRoZSBzeW50YXggYW5kIHRhc2tzIHBlcmZvcm1lZCBieSBzeXN0ZW0gbWFjcm9zIGlzIGJ1aWx0IGludG8NCiAgYXNjaWlkb2MoMSkgc28gdGhleSBkb24ndCBhcHBlYXIgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4gIFlvdSBjYW4NCiAgaG93ZXZlciBjdXN0b21pemUgdGhlIHN5bnRheCBieSBhZGRpbmcgZW50cmllcyB0byBhIGNvbmZpZ3VyYXRpb24NCiAgZmlsZSBgW21hY3Jvc11gIHNlY3Rpb24uDQoNCltbWDYzXV0NCkluY2x1ZGUgTWFjcm9zDQpeXl5eXl5eXl5eXl5eXg0KVGhlIGBpbmNsdWRlYCBhbmQgYGluY2x1ZGUxYCAgc3lzdGVtIG1hY3JvcyB0byBpbmNsdWRlIHRoZSBjb250ZW50cyBvZg0KYSBuYW1lZCBmaWxlIGludG8gdGhlIHNvdXJjZSBkb2N1bWVudC4NCg0KVGhlIGBpbmNsdWRlYCBtYWNybyBpbmNsdWRlcyBhIGZpbGUgYXMgaWYgaXQgd2VyZSBwYXJ0IG9mIHRoZSBwYXJlbnQNCmRvY3VtZW50IC0tIHRhYnMgYXJlIGV4cGFuZGVkIGFuZCBzeXN0ZW0gbWFjcm9zIHByb2Nlc3NlZC4gVGhlDQpjb250ZW50cyBvZiBgaW5jbHVkZTFgIGZpbGVzIGFyZSBub3Qgc3ViamVjdCB0byB0YWIgZXhwYW5zaW9uIG9yDQpzeXN0ZW0gbWFjcm8gcHJvY2Vzc2luZyBub3IgYXJlIGF0dHJpYnV0ZSBvciBsb3dlciBwcmlvcml0eQ0Kc3Vic3RpdHV0aW9ucyBwZXJmb3JtZWQuIFRoZSBgaW5jbHVkZTFgIG1hY3JvJ3MgaW50ZW5kZWQgdXNlIGlzIHRvDQppbmNsdWRlIHZlcmJhdGltIGVtYmVkZGVkIENTUyBvciBzY3JpcHRzIGludG8gY29uZmlndXJhdGlvbiBmaWxlDQpoZWFkZXJzLiAgRXhhbXBsZToNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpcaW5jbHVkZTo6Y2hhcHRlcjEudHh0W3RhYnNpemU9NF0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQouSW5jbHVkZSBtYWNybyBiZWhhdmlvcg0KLSBJZiB0aGUgaW5jbHVkZWQgZmlsZSBuYW1lIGlzIHNwZWNpZmllZCB3aXRoIGEgcmVsYXRpdmUgcGF0aCB0aGVuIHRoZQ0KICBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgcmVmZXJyaW5nIGRvY3VtZW50Lg0KLSBJbmNsdWRlIG1hY3JvcyBjYW4gYXBwZWFyIGluc2lkZSBjb25maWd1cmF0aW9uIGZpbGVzLg0KLSBGaWxlcyBpbmNsdWRlZCBmcm9tIHdpdGhpbiAnRGVsaW1pdGVkQmxvY2tzJyBhcmUgcmVhZCB0byBjb21wbGV0aW9uDQogIHRvIGF2b2lkIGZhbHNlIGVuZC1vZi1ibG9jayB1bmRlcmxpbmUgdGVybWluYXRpb24uDQotIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBleHBhbmRlZCBpbnNpZGUgdGhlIGluY2x1ZGUgJ3RhcmdldCc7IGlmIGFuDQogIGF0dHJpYnV0ZSBpcyB1bmRlZmluZWQgdGhlbiB0aGUgaW5jbHVkZWQgZmlsZSBpcyBzaWxlbnRseSBza2lwcGVkLg0KLSBUaGUgJ3RhYnNpemUnIG1hY3JvIGF0dHJpYnV0ZSBzZXRzIHRoZSBudW1iZXIgb2Ygc3BhY2UgY2hhcmFjdGVycyB0bw0KICBiZSB1c2VkIGZvciB0YWIgZXhwYW5zaW9uIGluIHRoZSBpbmNsdWRlZCBmaWxlIChub3QgYXBwbGljYWJsZSB0bw0KICBgaW5jbHVkZTFgIG1hY3JvKS4NCi0gVGhlICdkZXB0aCcgbWFjcm8gYXR0cmlidXRlIHNldHMgdGhlIG1heGltdW0gcGVybWl0dGVkIG51bWJlciBvZg0KICBzdWJzZXF1ZW50IG5lc3RlZCBpbmNsdWRlcyAobm90IGFwcGxpY2FibGUgdG8gYGluY2x1ZGUxYCBtYWNybyB3aGljaA0KICBkb2VzIG5vdCBwcm9jZXNzIG5lc3RlZCBpbmNsdWRlcykuIFNldHRpbmcgJ2RlcHRoJyB0byAnMScgZGlzYWJsZXMNCiAgbmVzdGluZyBpbnNpZGUgdGhlIGluY2x1ZGVkIGZpbGUuIEJ5IGRlZmF1bHQsIG5lc3RpbmcgaXMgbGltaXRlZCB0bw0KICBhIGRlcHRoIG9mIHRlbi4NCi0gSWYgdGhlIGhlICd3YXJuaW5ncycgYXR0cmlidXRlIGlzIHNldCB0byAnRmFsc2UnIChvciBhbnkgb3RoZXINCiAgUHl0aG9uIGxpdGVyYWwgdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhbiBmYWxzZSkgdGhlbiBubyB3YXJuaW5nDQogIG1lc3NhZ2UgaXMgcHJpbnRlZCBpZiB0aGUgaW5jbHVkZWQgZmlsZSBkb2VzIG5vdCBleGlzdC4gQnkgZGVmYXVsdA0KICAnd2FybmluZ3MnIGFyZSBlbmFibGVkLg0KLSBJbnRlcm5hbGx5IHRoZSBgaW5jbHVkZTFgIG1hY3JvIGlzIHRyYW5zbGF0ZWQgdG8gdGhlIGBpbmNsdWRlMWANCiAgc3lzdGVtIGF0dHJpYnV0ZSB3aGljaCBtZWFucyBpdCBtdXN0IGJlIGV2YWx1YXRlZCBpbiBhIHJlZ2lvbiB3aGVyZQ0KICBhdHRyaWJ1dGUgc3Vic3RpdHV0aW9uIGlzIGVuYWJsZWQuIFRvIGluaGliaXQgbmVzdGVkIHN1YnN0aXR1dGlvbiBpbg0KICBpbmNsdWRlZCBmaWxlcyBpdCBpcyBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYGluY2x1ZGVgIG1hY3JvIGFuZCBzZXQNCiAgdGhlIGF0dHJpYnV0ZSBgZGVwdGg9MWAuDQoNCkNvbmRpdGlvbmFsIEluY2x1c2lvbiBNYWNyb3MNCl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4NCkxpbmVzIG9mIHRleHQgaW4gdGhlIHNvdXJjZSBkb2N1bWVudCBjYW4gYmUgc2VsZWN0aXZlbHkgaW5jbHVkZWQgb3INCmV4Y2x1ZGVkIGZyb20gcHJvY2Vzc2luZyBiYXNlZCBvbiB0aGUgZXhpc3RlbmNlIChvciBub3QpIG9mIGEgZG9jdW1lbnQNCmF0dHJpYnV0ZS4NCg0KRG9jdW1lbnQgdGV4dCBiZXR3ZWVuIHRoZSBgaWZkZWZgIGFuZCBgZW5kaWZgIG1hY3JvcyBpcyBpbmNsdWRlZCBpZiBhDQpkb2N1bWVudCBhdHRyaWJ1dGUgaXMgZGVmaW5lZDoNCg0KICBpZmRlZjo6PGF0dHJpYnV0ZT5bXQ0KICA6DQogIGVuZGlmOjo8YXR0cmlidXRlPltdDQoNCkRvY3VtZW50IHRleHQgYmV0d2VlbiB0aGUgYGlmbmRlZmAgYW5kIGBlbmRpZmAgbWFjcm9zIGlzIG5vdCBpbmNsdWRlZA0KaWYgYSBkb2N1bWVudCBhdHRyaWJ1dGUgaXMgZGVmaW5lZDoNCg0KICBpZm5kZWY6OjxhdHRyaWJ1dGU+W10NCiAgOg0KICBlbmRpZjo6PGF0dHJpYnV0ZT5bXQ0KDQpgPGF0dHJpYnV0ZT5gIGlzIGFuIGF0dHJpYnV0ZSBuYW1lIHdoaWNoIGlzIG9wdGlvbmFsIGluIHRoZSB0cmFpbGluZw0KYGVuZGlmYCBtYWNyby4NCg0KSWYgeW91IG9ubHkgd2FudCB0byBwcm9jZXNzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCB0aGVuIHRoZSB0ZXh0IGNhbiBiZQ0KcHV0IGluc2lkZSB0aGUgc3F1YXJlIGJyYWNrZXRzIGFuZCB0aGUgYGVuZGlmYCBtYWNybyBvbWl0dGVkLCBmb3INCmV4YW1wbGU6DQoNCiAgaWZkZWY6OnJldm51bWJlcltWZXJzaW9uIG51bWJlciA0Ml0NCg0KSXMgZXF1aXZhbGVudCB0bzoNCg0KICBpZmRlZjo6cmV2bnVtYmVyW10NCiAgVmVyc2lvbiBudW1iZXIgNDINCiAgZW5kaWY6OnJldm51bWJlcltdDQoNCidpZmRlZicgYW5kICdpZm5kZWYnIG1hY3JvcyBhbHNvIGFjY2VwdCBtdWx0aXBsZSBhdHRyaWJ1dGUgbmFtZXM6DQoNCi0gTXVsdGlwbGUgJywnIHNlcGFyYXRlZCBhdHRyaWJ1dGUgbmFtZXMgZXZhbHVhdGUgdG8gZGVmaW5lZCBpZiBvbmUNCiAgb3IgbW9yZSBvZiB0aGUgYXR0cmlidXRlcyBpcyBkZWZpbmVkLCBvdGhlcndpc2UgaXQncyB2YWx1ZSBpcw0KICB1bmRlZmluZWQuDQotIE11bHRpcGxlICcrJyBzZXBhcmF0ZWQgYXR0cmlidXRlIG5hbWVzIGV2YWx1YXRlIHRvIGRlZmluZWQgaWYgYWxsDQogIG9mIHRoZSBhdHRyaWJ1dGVzIGlzIGRlZmluZWQsIG90aGVyd2lzZSBpdCdzIHZhbHVlIGlzIHVuZGVmaW5lZC4NCg0KRG9jdW1lbnQgdGV4dCBiZXR3ZWVuIHRoZSBgaWZldmFsYCBhbmQgYGVuZGlmYCBtYWNyb3MgaXMgaW5jbHVkZWQgaWYNCnRoZSBQeXRob24gZXhwcmVzc2lvbiBpbnNpZGUgdGhlIHNxdWFyZSBicmFja2V0cyBpcyB0cnVlLiBFeGFtcGxlOg0KDQogIGlmZXZhbDo6W3tyczQ1OH09PTJdDQogIDoNCiAgZW5kaWY6OltdDQoNCi0gRG9jdW1lbnQgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIGV4cGFuZGVkIGJlZm9yZSB0aGUgZXhwcmVzc2lvbiBpcw0KICBldmFsdWF0ZWQuDQotIElmIGFuIGF0dHJpYnV0ZSByZWZlcmVuY2UgaXMgdW5kZWZpbmVkIHRoZW4gdGhlIGV4cHJlc3Npb24gaXMNCiAgY29uc2lkZXJlZCBmYWxzZS4NCg0KVGFrZSBhIGxvb2sgYXQgdGhlIGAqLmNvbmZgIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIEFzY2lpRG9jDQpkaXN0cmlidXRpb24gZm9yIGV4YW1wbGVzIG9mIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBtYWNybyB1c2FnZS4NCg0KRXhlY3V0YWJsZSBzeXN0ZW0gbWFjcm9zDQpeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4NClRoZSAnZXZhbCcsICdzeXMnIGFuZCAnc3lzMicgYmxvY2sgbWFjcm9zIGV4aGliaXQgdGhlIHNhbWUgYmVoYXZpb3IgYXMNCnRoZWlyIHNhbWUgbmFtZWQgPDxYMjQsIHN5c3RlbSBhdHRyaWJ1dGUgcmVmZXJlbmNlcz4+LiBUaGUgZGlmZmVyZW5jZQ0KaXMgdGhhdCBzeXN0ZW0gbWFjcm9zIG9jY3VyIGluIGEgYmxvY2sgbWFjcm8gY29udGV4dCB3aGVyZWFzIHN5c3RlbQ0KYXR0cmlidXRlcyBhcmUgY29uZmluZWQgdG8gaW5saW5lIGNvbnRleHRzIHdoZXJlIGF0dHJpYnV0ZQ0Kc3Vic3RpdHV0aW9uIGlzIGVuYWJsZWQuDQoNClRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkaXNwbGF5cyBhIGxvbmcgZGlyZWN0b3J5IGxpc3RpbmcgaW5zaWRlIGENCmxpdGVyYWwgYmxvY2s6DQoNCiAgLS0tLS0tLS0tLS0tLS0tLS0tDQogIHN5czo6W2xzIC1sICoudHh0XQ0KICAtLS0tLS0tLS0tLS0tLS0tLS0NCg0KTk9URTogVGhlcmUgYXJlIG5vIGJsb2NrIG1hY3JvIHZlcnNpb25zIG9mIHRoZSAnZXZhbDMnIGFuZCAnc3lzMycNCnN5c3RlbSBhdHRyaWJ1dGVzLg0KDQpUZW1wbGF0ZSBTeXN0ZW0gTWFjcm8NCl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KVGhlIGB0ZW1wbGF0ZWAgYmxvY2sgbWFjcm8gYWxsb3dzIHRoZSBpbmNsdXNpb24gb2Ygb25lIGNvbmZpZ3VyYXRpb24NCmZpbGUgdGVtcGxhdGUgc2VjdGlvbiB3aXRoaW4gYW5vdGhlci4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbmNsdWRlcw0KdGhlIGBbYWRtb25pdGlvbmJsb2NrXWAgc2VjdGlvbiBpbiB0aGUgYFthZG1vbml0aW9ucGFyYWdyYXBoXWANCnNlY3Rpb246DQoNCiAgW2FkbW9uaXRpb25wYXJhZ3JhcGhdDQogIHRlbXBsYXRlOjpbYWRtb25pdGlvbmJsb2NrXQ0KDQouVGVtcGxhdGUgbWFjcm8gYmVoYXZpb3INCi0gVGhlIGB0ZW1wbGF0ZTo6W11gIG1hY3JvIGlzIHVzZWZ1bCBmb3IgZmFjdG9yaW5nIGNvbmZpZ3VyYXRpb24gZmlsZQ0KICBtYXJrdXAuDQotIGB0ZW1wbGF0ZTo6W11gIG1hY3JvcyBjYW5ub3QgYmUgbmVzdGVkLg0KLSBgdGVtcGxhdGU6OltdYCBtYWNybyBleHBhbnNpb24gaXMgYXBwbGllZCBhZnRlciBhbGwgY29uZmlndXJhdGlvbg0KICBmaWxlcyBoYXZlIGJlZW4gcmVhZC4NCg0KDQpbW1g3N11dDQpQYXNzdGhyb3VnaCBtYWNyb3MNCn5+fn5+fn5+fn5+fn5+fn5+fg0KUGFzc3Rocm91Z2ggbWFjcm9zIGFyZSBhbmFsb2dvdXMgdG8gPDxYNzYscGFzc3Rocm91Z2ggYmxvY2tzPj4gYW5kIGFyZQ0KdXNlZCB0byBwYXNzIHRleHQgZGlyZWN0bHkgdG8gdGhlIG91dHB1dC4gVGhlIHN1YnN0aXR1dGlvbiBwZXJmb3JtZWQNCm9uIHRoZSB0ZXh0IGlzIGRldGVybWluZWQgYnkgdGhlIG1hY3JvIGRlZmluaXRpb24gYnV0IGNhbiBiZSBvdmVycmlkZGVuDQpieSB0aGUgYDxzdWJzbGlzdD5gLiAgVGhlIHVzdWFsIHN5bnRheCBpcw0KYDxuYW1lPjo8c3Vic2xpc3Q+WzxwYXNzdGV4dD5dYCAoZm9yIGlubGluZSBtYWNyb3MpIGFuZA0KYDxuYW1lPjo6PHN1YnNsaXN0Pls8cGFzc3RleHQ+XWAgKGZvciBibG9jayBtYWNyb3MpLiBQYXNzdGhyb3VnaHMsIGJ5DQpkZWZpbml0aW9uLCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBhbGwgb3RoZXIgdGV4dCBzdWJzdGl0dXRpb25zLg0KDQpwYXNzOjoNCiAgSW5saW5lIGFuZCBibG9jay4gUGFzc2VzIHRleHQgdW5tb2RpZmllZCAoYXBhcnQgZnJvbSBleHBsaWNpdGx5DQogIHNwZWNpZmllZCBzdWJzdGl0dXRpb25zKS4gRXhhbXBsZXM6DQoNCiAgcGFzczpbPHE+VG8gYmUgb3Igbm90IHRvIGJlPC9xPl0NCiAgcGFzczphdHRyaWJ1dGVzLHF1b3Rlc1s8dT50aGUgJ3thdXRob3J9JzwvdT5dDQoNCmFzY2lpbWF0aCwgbGF0ZXhtYXRoOjoNCiAgSW5saW5lIGFuZCBibG9jay4gUGFzc2VzIHRleHQgdW5tb2RpZmllZC4gIFVzZWQgZm9yDQogIDw8WDc4LG1hdGhlbWF0aWNhbCBmb3JtdWxhcz4+Lg0KDQpcKysrOjoNCiAgSW5saW5lIGFuZCBibG9jay4gVGhlIHRyaXBsZS1wbHVzIHBhc3N0aHJvdWdoIGlzIGZ1bmN0aW9uYWxseQ0KICBpZGVudGljYWwgdG8gdGhlICdwYXNzJyBtYWNybyBidXQgeW91IGRvbid0IGhhdmUgdG8gZXNjYXBlIGBdYA0KICBjaGFyYWN0ZXJzIGFuZCB5b3UgY2FuIHByZWZpeCB3aXRoIHF1b3RlZCBhdHRyaWJ1dGVzIGluIHRoZSBpbmxpbmUNCiAgdmVyc2lvbi4gRXhhbXBsZToNCg0KICBSZWQgW3JlZF0rKytgc3VtXyhpPTEpXF5uIGk9KG4obisxKSkvMmAkKysrIEFzY2lpTWF0aE1MIGZvcm11bGENCg0KJCQ6Og0KICBJbmxpbmUgYW5kIGJsb2NrLiBUaGUgZG91YmxlLWRvbGxhciBwYXNzdGhyb3VnaCBpcyBmdW5jdGlvbmFsbHkNCiAgaWRlbnRpY2FsIHRvIHRoZSB0cmlwbGUtcGx1cyBwYXNzdGhyb3VnaCB3aXRoIG9uZSBleGNlcHRpb246IHNwZWNpYWwNCiAgY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4gRXhhbXBsZToNCg0KICAkJGBbW2EsYl0sW2MsZF1dKChuKSwoaykpYCQkDQoNCltbWDgwXV1gOjoNCiAgVGV4dCBxdW90ZWQgd2l0aCBzaW5nbGUgYmFja3RpY2sgY2hhcmFjdGVycyBjb25zdGl0dXRlcyBhbiAnaW5saW5lDQogIGxpdGVyYWwnIHBhc3N0aHJvdWdoLiBUaGUgZW5jbG9zZWQgdGV4dCBpcyByZW5kZXJlZCBpbiBhIG1vbm9zcGFjZWQNCiAgZm9udCBhbmQgaXMgb25seSBzdWJqZWN0IHRvIHNwZWNpYWwgY2hhcmFjdGVyIHN1YnN0aXR1dGlvbi4gIFRoaXMNCiAgbWFrZXMgc2Vuc2Ugc2luY2UgbW9ub3NwYWNlIHRleHQgaXMgdXN1YWxseSBpbnRlbmRlZCB0byBiZSByZW5kZXJlZA0KICBsaXRlcmFsbHkgYW5kIG9mdGVuIGNvbnRhaW5zIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSB0bw0KICBiZSBlc2NhcGVkLiBJZiB5b3UgbmVlZCBtb25vc3BhY2VkIHRleHQgY29udGFpbmluZyBpbmxpbmUNCiAgc3Vic3RpdHV0aW9ucyB1c2UgYSA8PFg4MSxwbHVzIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgYmFja3RpY2s+Pi4NCg0KTWFjcm8gRGVmaW5pdGlvbnMNCn5+fn5+fn5+fn5+fn5+fn5+DQpFYWNoIGVudHJ5IGluIHRoZSBjb25maWd1cmF0aW9uIGBbbWFjcm9zXWAgc2VjdGlvbiBpcyBhIG1hY3JvDQpkZWZpbml0aW9uIHdoaWNoIGNhbiB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOg0KDQpgPHBhdHRlcm4+PTxuYW1lPls8c3Vic2xpc3RdYDo6IElubGluZSBtYWNybyBkZWZpbml0aW9uLg0KYDxwYXR0ZXJuPj0jPG5hbWU+WzxzdWJzbGlzdF1gOjogQmxvY2sgbWFjcm8gZGVmaW5pdGlvbi4NCmA8cGF0dGVybj49KzxuYW1lPls8c3Vic2xpc3RdYDo6IFN5c3RlbSBtYWNybyBkZWZpbml0aW9uLg0KYDxwYXR0ZXJuPmA6OiBEZWxldGUgdGhlIGV4aXN0aW5nIG1hY3JvIHdpdGggdGhpcyBgPHBhdHRlcm4+YC4NCg0KYDxwYXR0ZXJuPmAgaXMgYSBQeXRob24gcmVndWxhciBleHByZXNzaW9uIGFuZCBgPG5hbWU+YCBpcyB0aGUgbmFtZSBvZg0KYSBtYXJrdXAgdGVtcGxhdGUuIElmIGA8bmFtZT5gIGlzIG9taXR0ZWQgdGhlbiBpdCBpcyB0aGUgdmFsdWUgb2YgdGhlDQpyZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggZ3JvdXAgbmFtZWQgJ25hbWUnLiAgVGhlIG9wdGlvbmFsDQpgWzxzdWJzbGlzdF1gIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc3Vic3RpdHV0aW9uIG5hbWVzIGVuY2xvc2VkDQppbiBgW11gIGJyYWNrZXRzLCBpdCBzZXRzIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIHBhc3N0aHJvdWdoDQp0ZXh0LCBpZiBvbWl0dGVkIHRoZW4gbm8gcGFzc3Rocm91Z2ggc3Vic3RpdHV0aW9ucyBhcmUgcGVyZm9ybWVkLg0KDQouUGF0dGVybiBuYW1lZCBncm91cHMNClRoZSBmb2xsb3dpbmcgbmFtZWQgZ3JvdXBzIGNhbiBiZSB1c2VkIGluIG1hY3JvIGA8cGF0dGVybj5gIHJlZ3VsYXINCmV4cHJlc3Npb25zIGFuZCBhcmUgYXZhaWxhYmxlIGFzIG1hcmt1cCB0ZW1wbGF0ZSBhdHRyaWJ1dGVzOg0KDQpuYW1lOjoNCiAgVGhlIG1hY3JvIG5hbWUuDQoNCnRhcmdldDo6DQogIFRoZSBtYWNybyB0YXJnZXQuDQoNCmF0dHJsaXN0OjoNCiAgVGhlIG1hY3JvIGF0dHJpYnV0ZSBsaXN0Lg0KDQpwYXNzdGV4dDo6DQogIENvbnRlbnRzIG9mIHRoaXMgZ3JvdXAgYXJlIHBhc3NlZCB1bm1vZGlmaWVkIHRvIHRoZSBvdXRwdXQgc3ViamVjdA0KICBvbmx5IHRvICdzdWJzbGlzdCcgc3Vic3RpdHV0aW9ucy4NCg0Kc3Vic2xpc3Q6Og0KICBQcm9jZXNzZWQgYXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdWJzdGl0dXRpb24gbmFtZXMgZm9yDQogICdwYXNzdGV4dCcgc3Vic3RpdHV0aW9uLCBvdmVycmlkZXMgdGhlIHRoZSBtYWNybyBkZWZpbml0aW9uDQogICdzdWJzbGlzdCcuDQoNCi5IZXJlJ3Mgd2hhdCBoYXBwZW5zIGR1cmluZyBtYWNybyBzdWJzdGl0dXRpb24NCi0gRWFjaCBjb250ZXh0dWFsbHkgcmVsZXZhbnQgbWFjcm8gJ3BhdHRlcm4nIGZyb20gdGhlIGBbbWFjcm9zXWANCiAgc2VjdGlvbiBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGlucHV0IHNvdXJjZSBsaW5lLg0KLSBJZiBhIG1hdGNoIGlzIGZvdW5kIHRoZSB0ZXh0IHRvIGJlIHN1YnN0aXR1dGVkIGlzIGxvYWRlZCBmcm9tIGENCiAgY29uZmlndXJhdGlvbiBtYXJrdXAgdGVtcGxhdGUgc2VjdGlvbiBuYW1lZCBsaWtlDQogIGA8bmFtZT4taW5saW5lbWFjcm9gIG9yIGA8bmFtZT4tYmxvY2ttYWNyb2AgKGRlcGVuZGluZyBvbiB0aGUgbWFjcm8NCiAgdHlwZSkuDQotIEdsb2JhbCBhbmQgbWFjcm8gYXR0cmlidXRlIGxpc3QgYXR0cmlidXRlcyBhcmUgc3Vic3RpdHV0ZWQgaW4gdGhlDQogIG1hY3JvJ3MgbWFya3VwIHRlbXBsYXRlLg0KLSBUaGUgc3Vic3RpdHV0ZWQgdGVtcGxhdGUgcmVwbGFjZXMgdGhlIG1hY3JvIHJlZmVyZW5jZSBpbiB0aGUgb3V0cHV0DQogIGRvY3VtZW50Lg0KDQoNCltbWDk4XV0NCkhUTUwgNSBhdWRpbyBhbmQgdmlkZW8gYmxvY2sgbWFjcm9zDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlICdodG1sNScgYmFja2VuZCAnYXVkaW8nIGFuZCAndmlkZW8nIGJsb2NrIG1hY3JvcyBnZW5lcmF0ZSB0aGUgSFRNTA0KNSAnYXVkaW8nIGFuZCAndmlkZW8nIGVsZW1lbnRzIHJlc3BlY3RpdmVseS4gIFRoZXkgZm9sbG93IHRoZSB1c3VhbA0KQXNjaWlEb2MgYmxvY2sgbWFjcm8gc3ludGF4IGA8bmFtZT46Ojx0YXJnZXQ+WzxhdHRybGlzdD5dYCB3aGVyZToNCg0KW2hvcml6b250YWxdDQpgPG5hbWU+YDo6ICdhdWRpbycgb3IgJ3ZpZGVvJy4NCmA8dGFyZ2V0PmA6OiBUaGUgVVJMIG9yIGZpbGUgbmFtZSBvZiB0aGUgdmlkZW8gb3IgYXVkaW8gZmlsZS4NCmA8YXR0cmxpc3Q+YDo6IEEgbGlzdCBvZiBuYW1lZCBhdHRyaWJ1dGVzIChzZWUgYmVsb3cpLg0KDQouQXVkaW8gbWFjcm8gYXR0cmlidXRlcw0KW29wdGlvbnM9ImhlYWRlciIsY29scz0iMSw1IixmcmFtZT0idG9wYm90Il0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KfE5hbWUgfCBWYWx1ZQ0KfG9wdGlvbnMNCnxBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXRlbXM6DQonYXV0b3BsYXknLCAnbG9vcCcgd2hpY2ggY29ycmVzcG9uZCB0byB0aGUgc2FtZS1uYW1lZCBIVE1MIDUgJ2F1ZGlvJw0KZWxlbWVudCBib29sZWFuIGF0dHJpYnV0ZXMuICBCeSBkZWZhdWx0IHRoZSBwbGF5ZXIgJ2NvbnRyb2xzJyBhcmUNCmVuYWJsZWQsIGluY2x1ZGUgdGhlICdub2NvbnRyb2xzJyBvcHRpb24gdmFsdWUgdG8gaGlkZSB0aGVtLg0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCi5WaWRlbyBtYWNybyBhdHRyaWJ1dGVzDQpbb3B0aW9ucz0iaGVhZGVyIixjb2xzPSIxLDUiLGZyYW1lPSJ0b3Bib3QiXQ0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8TmFtZSAgIHwgVmFsdWUNCnxoZWlnaHQgfCBUaGUgaGVpZ2h0IG9mIHRoZSBwbGF5ZXIgaW4gcGl4ZWxzLg0KfHdpZHRoICB8IFRoZSB3aWR0aCBvZiB0aGUgcGxheWVyIGluIHBpeGVscy4NCnxwb3N0ZXIgfCBUaGUgVVJMIG9yIGZpbGUgbmFtZSBvZiBhbiBpbWFnZSByZXByZXNlbnRpbmcgdGhlIHZpZGVvLg0KfG9wdGlvbnMNCnxBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgaXRlbXM6DQonYXV0b3BsYXknLCAnbG9vcCcgYW5kICdub2NvbnRyb2xzJy4gVGhlICdhdXRvcGxheScgYW5kICdsb29wJyBvcHRpb25zDQpjb3JyZXNwb25kIHRvIHRoZSBzYW1lLW5hbWVkIEhUTUwgNSAndmlkZW8nIGVsZW1lbnQgYm9vbGVhbg0KYXR0cmlidXRlcy4gIEJ5IGRlZmF1bHQgdGhlIHBsYXllciAnY29udHJvbHMnIGFyZSBlbmFibGVkLCBpbmNsdWRlIHRoZQ0KJ25vY29udHJvbHMnIG9wdGlvbiB2YWx1ZSB0byBoaWRlIHRoZW0uDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KRXhhbXBsZXM6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KYXVkaW86OmltYWdlcy9leGFtcGxlLm9nZ1tdDQoNCnZpZGVvOjpnaXptby5vZ3Zbd2lkdGg9MjAwLG9wdGlvbnM9Im5vY29udHJvbHMsYXV0b3BsYXkiXQ0KDQouRXhhbXBsZSB2aWRlbw0KdmlkZW86Omdpem1vLm9ndltdDQoNCnZpZGVvOjpodHRwOi8vd3d3LjgwOC5kay9waWNzL3ZpZGVvL2dpem1vLm9ndltdDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KSWYgeW91ciBuZWVkcyBhcmUgbW9yZSBjb21wbGV4IHB1dCByYXcgSFRNTCA1IGluIGEgbWFya3VwIGJsb2NrLCBmb3INCmV4YW1wbGUgKGZyb20gaHR0cDovL3d3dy44MDguZGsvP2NvZGUtaHRtbC01LXZpZGVvKToNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorKysrDQo8dmlkZW8gcG9zdGVyPSJwaWNzL3ZpZGVvL2dpem1vLmpwZyIgaWQ9InZpZGVvIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgPg0KICA8c291cmNlIHNyYz0icGljcy92aWRlby9naXptby5tcDQiIC8+DQogIDxzb3VyY2Ugc3JjPSJwaWNzL3ZpZGVvL2dpem1vLndlYm0iIHR5cGU9InZpZGVvL3dlYm0iIC8+DQogIDxzb3VyY2Ugc3JjPSJwaWNzL3ZpZGVvL2dpem1vLm9ndiIgdHlwZT0idmlkZW8vb2dnIiAvPg0KICBWaWRlbyBub3QgcGxheWluZz8gPGEgaHJlZj0icGljcy92aWRlby9naXptby5tcDQiPkRvd25sb2FkIGZpbGU8L2E+IGluc3RlYWQuDQo8L3ZpZGVvPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIHZhciB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2aWRlbycpOw0KICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsNCiAgICB2aWRlby5wbGF5KCk7DQogIH0sZmFsc2UpOw0KPC9zY3JpcHQ+DQorKysrDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQpUYWJsZXMNCi0tLS0tLQ0KVGhlIEFzY2lpRG9jIHRhYmxlIHN5bnRheCBsb29rcyBhbmQgYmVoYXZlcyBsaWtlIG90aGVyIGRlbGltaXRlZCBibG9jaw0KdHlwZXMgYW5kIHN1cHBvcnRzIHN0YW5kYXJkIDw8WDczLGJsb2NrIGNvbmZpZ3VyYXRpb24gZW50cmllcz4+Lg0KRm9ybWF0dGluZyBpcyBlYXN5IHRvIHJlYWQgYW5kLCBqdXN0IGFzIGltcG9ydGFudGx5LCBlYXN5IHRvIGVudGVyLg0KDQotIENlbGxzIGFuZCBjb2x1bW5zIGNhbiBiZSBmb3JtYXR0ZWQgdXNpbmcgYnVpbHQtaW4gY3VzdG9taXphYmxlIHN0eWxlcy4NCi0gSG9yaXpvbnRhbCBhbmQgdmVydGljYWwgY2VsbCBhbGlnbm1lbnQgY2FuIGJlIHNldCBvbiBjb2x1bW5zIGFuZA0KICBjZWxsLg0KLSBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjZWxsIHNwYW5uaW5nIGlzIHN1cHBvcnRlZC4NCg0KLlVzZSB0YWJsZXMgc3BhcmluZ2x5DQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCldoZW4gdGVjaG5pY2FsIHVzZXJzIGZpcnN0IHN0YXJ0IGNyZWF0aW5nIGRvY3VtZW50cywgdGFibGVzIChjb21wbGV0ZQ0Kd2l0aCBjb2x1bW4gc3Bhbm5pbmcgYW5kIHRhYmxlIG5lc3RpbmcpIGFyZSBvZnRlbiBjb25zaWRlcmVkIHZlcnkNCmltcG9ydGFudC4gVGhlIHJlYWxpdHkgaXMgdGhhdCB0YWJsZXMgYXJlIHNlbGRvbSB1c2VkLCBldmVuIGluDQp0ZWNobmljYWwgZG9jdW1lbnRhdGlvbi4NCg0KVHJ5IHRoaXMgZXhlcmNpc2U6IHRodW1iIHRocm91Z2ggeW91ciBsaWJyYXJ5IG9mIHRlY2huaWNhbCBib29rcywNCnlvdSdsbCBiZSBzdXJwcmlzZWQganVzdCBob3cgc2VsZG9tIHRhYmxlcyBhcmUgYWN0dWFsbHkgdXNlZCwgZXZlbg0KbGVzcyBzZWxkb20gYXJlIHRhYmxlcyBjb250YWluaW5nIGJsb2NrIGVsZW1lbnRzIChzdWNoIGFzIHBhcmFncmFwaHMNCm9yIGxpc3RzKSBvciBzcGFubmVkIGNlbGxzLiBUaGlzIGlzIG5vIGFjY2lkZW50LCBsaWtlIGZpZ3VyZXMsIHRhYmxlcw0KYXJlIG91dHNpZGUgdGhlIG5vcm1hbCBkb2N1bWVudCBmbG93IC0tIHRhYmxlcyBhcmUgZm9yIGNvbnN1bHRpbmcgbm90DQpmb3IgcmVhZGluZy4NCg0KVGFibGVzIGFyZSBkZXNpZ25lZCBmb3IsIGFuZCBzaG91bGQgbm9ybWFsbHkgb25seSBiZSB1c2VkIGZvciwNCmRpc3BsYXlpbmcgY29sdW1uIG9yaWVudGVkIHRhYnVsYXIgZGF0YS4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQpFeGFtcGxlIHRhYmxlcw0Kfn5+fn5+fn5+fn5+fn4NCg0KLlNpbXBsZSB0YWJsZQ0KW3dpZHRoPSIxNSUiXQ0KfD09PT09PT0NCnwxIHwyIHxBDQp8MyB8NCB8Qg0KfDUgfDYgfEMNCnw9PT09PT09DQoNCi5Bc2NpaURvYyBzb3VyY2UNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW3dpZHRoPSIxNSUiXQ0KfD09PT09PT0NCnwxIHwyIHxBDQp8MyB8NCB8Qg0KfDUgfDYgfEMNCnw9PT09PT09DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLkNvbHVtbnMgZm9ybWF0dGVkIHdpdGggc3Ryb25nLCBtb25vc3BhY2VkIGFuZCBlbXBoYXNpcyBzdHlsZXMNClt3aWR0aD0iNTAlIixjb2xzPSI+cyxebSxlIixmcmFtZT0idG9wYm90IixvcHRpb25zPSJoZWFkZXIsZm9vdGVyIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PQ0KfCAgICAgIDIrfENvbHVtbnMgMiBhbmQgMw0KfDEgICAgICAgfEl0ZW0gMSAgfEl0ZW0gMQ0KfDIgICAgICAgfEl0ZW0gMiAgfEl0ZW0gMg0KfDMgICAgICAgfEl0ZW0gMyAgfEl0ZW0gMw0KfDQgICAgICAgfEl0ZW0gNCAgfEl0ZW0gNA0KfGZvb3RlciAxfGZvb3RlciAyfGZvb3RlciAzDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KLkFzY2lpRG9jIHNvdXJjZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQouQW4gZXhhbXBsZSB0YWJsZQ0KW3dpZHRoPSI1MCUiLGNvbHM9Ij5zLF5tLGUiLGZyYW1lPSJ0b3Bib3QiLG9wdGlvbnM9ImhlYWRlcixmb290ZXIiXQ0KfD09PT09PT09PT09PT09PT09PT09PT09PT09DQp8ICAgICAgMit8Q29sdW1ucyAyIGFuZCAzDQp8MSAgICAgICB8SXRlbSAxICB8SXRlbSAxDQp8MiAgICAgICB8SXRlbSAyICB8SXRlbSAyDQp8MyAgICAgICB8SXRlbSAzICB8SXRlbSAzDQp8NCAgICAgICB8SXRlbSA0ICB8SXRlbSA0DQp8Zm9vdGVyIDF8Zm9vdGVyIDJ8Zm9vdGVyIDMNCnw9PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi5Ib3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzb3VyY2UgZGF0YQ0KW3dpZHRoPSI4MCUiLGNvbHM9IjMsXjIsXjIsMTAiLG9wdGlvbnM9ImhlYWRlciJdDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8RGF0ZSB8RHVyYXRpb24gfEF2ZyBIUiB8Tm90ZXMNCg0KfDIyLUF1Zy0wOCB8MTA6MjQgfCAxNTcgfA0KV29ya2VkIG91dCBNU0hSIChtYXggc3VzdGFpbmFibGUgaGVhcnQgcmF0ZSkgYnkgZ29pbmcgaGFyZA0KZm9yIHRoaXMgaW50ZXJ2YWwuDQoNCnwyMi1BdWctMDggfDIzOjAzIHwgMTUyIHwNCkJhY2stdG8tYmFjayB3aXRoIHByZXZpb3VzIGludGVydmFsLg0KDQp8MjQtQXVnLTA4IHw0MDowMCB8IDE0NSB8DQpNb2RlcmF0ZWx5IGhhcmQgaW50ZXJzcGVyc2VkIHdpdGggM3ggM21pbiBpbnRlcnZhbHMgKDJtaW4NCmhhcmQgKyAxbWluIHJlYWxseSBoYXJkIHRha2luZyB0aGUgSFIgdXAgdG8gMTYwKS4NCg0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpTaG9ydCBjZWxscyBjYW4gYmUgZW50ZXJlZCBob3Jpem9udGFsbHksIGxvbmdlciBjZWxscyB2ZXJ0aWNhbGx5LiAgVGhlDQpkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGJsYW5rIGxpbmVzIHdpdGhpbiBhDQpjZWxsLiBUaGVzZSBjaGFyYWN0ZXJpc3RpY3MgYWlkIHJlYWRhYmlsaXR5IGFuZCBkYXRhIGVudHJ5Lg0KDQouQXNjaWlEb2Mgc291cmNlDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi5XaW5kdHJhaW5lciB3b3Jrb3V0cw0KW3dpZHRoPSI4MCUiLGNvbHM9IjMsXjIsXjIsMTAiLG9wdGlvbnM9ImhlYWRlciJdDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8RGF0ZSB8RHVyYXRpb24gfEF2ZyBIUiB8Tm90ZXMNCg0KfDIyLUF1Zy0wOCB8MTA6MjQgfCAxNTcgfA0KV29ya2VkIG91dCBNU0hSIChtYXggc3VzdGFpbmFibGUgaGVhcnQgcmF0ZSkgYnkgZ29pbmcgaGFyZA0KZm9yIHRoaXMgaW50ZXJ2YWwuDQoNCnwyMi1BdWctMDggfDIzOjAzIHwgMTUyIHwNCkJhY2stdG8tYmFjayB3aXRoIHByZXZpb3VzIGludGVydmFsLg0KDQp8MjQtQXVnLTA4IHw0MDowMCB8IDE0NSB8DQpNb2RlcmF0ZWx5IGhhcmQgaW50ZXJzcGVyc2VkIHdpdGggM3ggM21pbiBpbnRlcnZhbHMgKDJtaW4NCmhhcmQgKyAxbWluIHJlYWxseSBoYXJkIHRha2luZyB0aGUgSFIgdXAgdG8gMTYwKS4NCg0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCi5BIHRhYmxlIHdpdGggZXh0ZXJuYWxseSBzb3VyY2VkIENTViBkYXRhDQpbZm9ybWF0PSJjc3YiLGNvbHM9Il4xLDQqMiIsb3B0aW9ucz0iaGVhZGVyIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCklELEN1c3RvbWVyIE5hbWUsQ29udGFjdCBOYW1lLEN1c3RvbWVyIEFkZHJlc3MsUGhvbmUNCmluY2x1ZGU6OmN1c3RvbWVycy5jc3ZbXQ0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQouQXNjaWlEb2Mgc291cmNlDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltmb3JtYXQ9ImNzdiIsY29scz0iXjEsNCoyIixvcHRpb25zPSJoZWFkZXIiXQ0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KSUQsQ3VzdG9tZXIgTmFtZSxDb250YWN0IE5hbWUsQ3VzdG9tZXIgQWRkcmVzcyxQaG9uZQ0KXGluY2x1ZGU6OmN1c3RvbWVycy5jc3ZbXQ0KfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCg0KLkNlbGwgc3BhbnMsIGFsaWdubWVudHMgYW5kIHN0eWxlcw0KW2NvbHM9ImUsbSxeLD5zIix3aWR0aD0iMjUlIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8MSA+c3wyIHwzIHw0DQpefDUgMi4yK14uXnw2IC4zKzwuPm18Nw0KXnw4DQp8OSAyKz58MTANCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCi5Bc2NpaURvYyBzb3VyY2UNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW2NvbHM9ImUsbSxeLD5zIix3aWR0aD0iMjUlIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09DQp8MSA+c3wyIHwzIHw0DQpefDUgMi4yK14uXnw2IC4zKzwuPm18Nw0KXnw4DQp8OSAyKz58MTANCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KW1tYNjhdXQ0KVGFibGUgaW5wdXQgZGF0YSBmb3JtYXRzDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCkFzY2lpRG9jIHRhYmxlIGRhdGEgY2FuIGJlICdwc3YnLCAnZHN2JyBvciAnY3N2JyBmb3JtYXR0ZWQuICBUaGUNCmRlZmF1bHQgdGFibGUgZm9ybWF0IGlzICdwc3YnLg0KDQpBc2NpaURvYyAncHN2JyAoJ1ByZWZpeCBTZXBhcmF0ZWQgVmFsdWVzJykgYW5kICdkc3YnICgnRGVsaW1pdGVyDQpTZXBhcmF0ZWQgVmFsdWVzJykgZm9ybWF0cyBhcmUgY2VsbCBvcmllbnRlZCAtLSB0aGUgdGFibGUgaXMgdHJlYXRlZA0KYXMgYSBzZXF1ZW5jZSBvZiBjZWxscyAtLSB0aGVyZSBhcmUgbm8gZXhwbGljaXQgcm93IHNlcGFyYXRvcnMuDQoNCi0gJ3BzdicgcHJlZml4ZXMgZWFjaCBjZWxsIHdpdGggYSBzZXBhcmF0b3Igd2hlcmVhcyAnZHN2JyBkZWxpbWl0cw0KICBjZWxscyB3aXRoIGEgc2VwYXJhdG9yLg0KLSAncHN2JyBhbmQgJ2Rzdicgc2VwYXJhdG9ycyBhcmUgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMuDQotIFRoZSBkZWZhdWx0ICdwc3YnIHNlcGFyYXRvciBjb250YWlucyA8PFg4NCwgY2VsbCBzcGVjaWZpZXI+PiByZWxhdGVkDQogIG5hbWVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBncm91cHMuDQotIFRoZSBkZWZhdWx0ICdkc3YnIHNlcGFyYXRvciBpcyBgOnxcbmAgKGEgY29sb24gb3IgYSBuZXcgbGluZQ0KICBjaGFyYWN0ZXIpLg0KLSAncHN2JyBhbmQgJ2RzdicgY2VsbCBzZXBhcmF0b3JzIGNhbiBiZSBlc2NhcGVkIGJ5IHByZWNlZGluZyB0aGVtDQogIHdpdGggYSBiYWNrc2xhc2ggY2hhcmFjdGVyLg0KDQpIZXJlIGFyZSBmb3VyICdwc3YnIGNlbGxzICh0aGUgc2Vjb25kIGl0ZW0gc3BhbnMgdHdvIGNvbHVtbnM7IHRoZQ0KbGFzdCBjb250YWlucyBhbiBlc2NhcGVkIHNlcGFyYXRvcik6DQoNCiAgfE9uZSAyK3xUd28gYW5kIHRocmVlIHxBIFx8IHNlcGFyYXRvciBjaGFyYWN0ZXINCg0KJ2NzdicgIGlzIHRoZSBxdWFzaS1zdGFuZGFyZCByb3cgb3JpZW50ZWQgJ0NvbW1hIFNlcGFyYXRlZCBWYWx1ZXMNCihDU1YpJyBmb3JtYXQgY29tbW9ubHkgdXNlZCB0byBpbXBvcnQgYW5kIGV4cG9ydCBzcHJlYWRzaGVldCBhbmQNCmRhdGFiYXNlIGRhdGEuDQoNCltbWDY5XV0NClRhYmxlIGF0dHJpYnV0ZXMNCn5+fn5+fn5+fn5+fn5+fn4NClRhYmxlcyBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6DQoNCmZvcm1hdDo6DQoncHN2JyAoZGVmYXVsdCksICdkc3YnIG9yICdjc3YnIChTZWUgPDxYNjgsIFRhYmxlIERhdGEgRm9ybWF0cz4+KS4NCg0Kc2VwYXJhdG9yOjoNClRoZSBjZWxsIHNlcGFyYXRvci4gQSBQeXRob24gcmVndWxhciBleHByZXNzaW9uICgncHN2JyBhbmQgJ2RzdicNCmZvcm1hdHMpIG9yIGEgc2luZ2xlIGNoYXJhY3RlciAoJ2NzdicgZm9ybWF0KS4NCg0KZnJhbWU6Og0KRGVmaW5lcyB0aGUgdGFibGUgYm9yZGVyIGFuZCBjYW4gdGFrZSB0aGUgZm9sbG93aW5nIHZhbHVlczogJ3RvcGJvdCcNCih0b3AgYW5kIGJvdHRvbSksICdhbGwnIChhbGwgc2lkZXMpLCAnbm9uZScgYW5kICdzaWRlcycgKGxlZnQgYW5kDQpyaWdodCBzaWRlcykuIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdhbGwnLg0KDQpncmlkOjoNCkRlZmluZXMgd2hpY2ggcnVsZXIgbGluZXMgYXJlIGRyYXduIGJldHdlZW4gdGFibGUgcm93cyBhbmQgY29sdW1ucy4NClRoZSAnZ3JpZCcgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6ICdub25lJywNCidjb2xzJywgJ3Jvd3MnIGFuZCAnYWxsJy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ2FsbCcuDQoNCmFsaWduOjoNClVzZSB0aGUgJ2FsaWduJyBhdHRyaWJ1dGUgdG8gaG9yaXpvbnRhbGx5IGFsaWduIHRoZSB0YWJsZSBvbiB0aGUNCnBhZ2UgKHdvcmtzIHdpdGggSFRNTCBvdXRwdXRzIG9ubHksIGhhcyBubyBlZmZlY3Qgb24gRG9jQm9vayBvdXRwdXRzKS4NClRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB2YWxpZDogJ2xlZnQnLCAncmlnaHQnLCBhbmQgJ2NlbnRlcicuDQoNCmZsb2F0OjoNClVzZSB0aGUgJ2Zsb2F0JyBhdHRyaWJ1dGUgdG8gZmxvYXQgdGhlIHRhYmxlICdsZWZ0JyBvciAncmlnaHQnIG9uIHRoZQ0KcGFnZSAod29ya3Mgd2l0aCBIVE1MIG91dHB1dHMgb25seSwgaGFzIG5vIGVmZmVjdCBvbiBEb2NCb29rIG91dHB1dHMpLg0KRmxvYXRpbmcgb25seSBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIGEgdGFibGUgJ3dpZHRoJw0KYXR0cmlidXRlIHZhbHVlIG9mIGxlc3MgdGhhbiAxMDAlIChvdGhlcndpc2UgdGhlIHRhYmxlIHdpbGwgdGFrZSB1cA0KYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UpLiAgJ2Zsb2F0JyBhbmQgJ2FsaWduJyBhdHRyaWJ1dGVzIGFyZSBtdXR1YWxseQ0KZXhjbHVzaXZlLiAgVXNlIHRoZSBgdW5mbG9hdDo6W11gIGJsb2NrIG1hY3JvIHRvIHN0b3AgZmxvYXRpbmcuDQoNCmhhbGlnbjo6DQpVc2UgdGhlICdoYWxpZ24nIGF0dHJpYnV0ZSB0byBob3Jpem9udGFsbHkgYWxpZ24gYWxsIGNlbGxzIGluIGEgdGFibGUuDQpUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdmFsaWQ6ICdsZWZ0JywgJ3JpZ2h0JywgYW5kICdjZW50ZXInDQooZGVmYXVsdHMgdG8gJ2xlZnQnKS4gT3ZlcnJpZGRlbiBieSA8PFg3MCxDb2x1bW4gc3BlY2lmaWVycz4+ICBhbmQNCjw8WDg0LENlbGwgc3BlY2lmaWVycz4+Lg0KDQp2YWxpZ246Og0KVXNlIHRoZSAndmFsaWduJyBhdHRyaWJ1dGUgdG8gdmVydGljYWxseSBhbGlnbiBhbGwgY2VsbHMgaW4gYSB0YWJsZS4NClRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB2YWxpZDogJ3RvcCcsICdib3R0b20nLCBhbmQgJ21pZGRsZScNCihkZWZhdWx0cyB0byAndG9wJykuIE92ZXJyaWRkZW4gYnkgPDxYNzAsQ29sdW1uIHNwZWNpZmllcnM+PiAgYW5kDQo8PFg4NCxDZWxsIHNwZWNpZmllcnM+Pi4NCg0Kb3B0aW9uczo6DQpUaGUgJ29wdGlvbnMnIGF0dHJpYnV0ZSBjYW4gY29udGFpbiBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzLCBmb3INCmV4YW1wbGU6ICdoZWFkZXInLCAnZm9vdGVyJy4gQnkgZGVmYXVsdCBoZWFkZXIgYW5kIGZvb3RlciByb3dzIGFyZQ0Kb21pdHRlZC4gIFNlZSA8PFg3NCxhdHRyaWJ1dGUgb3B0aW9ucz4+IGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YNCmF2YWlsYWJsZSB0YWJsZSBvcHRpb25zLg0KDQpjb2xzOjoNClRoZSAnY29scycgYXR0cmlidXRlIGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgPDxYNzAsY29sdW1uDQpzcGVjaWZpZXJzPj4uIEZvciBleGFtcGxlIGBjb2xzPSIyPHAsMiosNHAsPiJgLg0KDQotIElmICdjb2xzJyBpcyBwcmVzZW50IGl0IG11c3Qgc3BlY2lmeSBhbGwgY29sdW1ucy4NCi0gSWYgdGhlICdjb2xzJyBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgaXMNCiAgY2FsY3VsYXRlZCBhcyB0aGUgbnVtYmVyIG9mIGRhdGEgaXRlbXMgaW4gdGhlICpmaXJzdCBsaW5lKiBvZiB0aGUNCiAgdGFibGUuDQotIFRoZSBkZWdlbmVyYXRlIGZvcm0gZm9yIHRoZSAnY29scycgYXR0cmlidXRlIGlzIGFuIGludGVnZXINCiAgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgZS5nLiBgY29scz00YC4NCg0Kd2lkdGg6Og0KVGhlICd3aWR0aCcgYXR0cmlidXRlIGlzIGV4cHJlc3NlZCBhcyBhIHBlcmNlbnRhZ2UgdmFsdWUNCignIjElIicuLi4nIjk5JSInKS4gVGhlIHdpZHRoIHNwZWNpZmllcyB0aGUgdGFibGUgd2lkdGggcmVsYXRpdmUgdG8NCnRoZSBhdmFpbGFibGUgd2lkdGguIEhUTUwgYmFja2VuZHMgdXNlIHRoaXMgdmFsdWUgdG8gc2V0IHRoZSB0YWJsZQ0Kd2lkdGggYXR0cmlidXRlLiBJdCdzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgd2l0aCBEb2NCb29rLCBzZWUgdGhlDQo8PFg4OSxEb2NCb29rIHRhYmxlIHdpZHRocz4+IHNpZGViYXIuDQoNCmZpbHRlcjo6DQpUaGUgJ2ZpbHRlcicgYXR0cmlidXRlIGRlZmluZXMgYW4gZXh0ZXJuYWwgc2hlbGwgY29tbWFuZCB0aGF0IGlzDQppbnZva2VkIGZvciBlYWNoIGNlbGwuIFRoZSBidWlsdC1pbiAnYXNjaWlkb2MnIHRhYmxlIHN0eWxlIGlzDQppbXBsZW1lbnRlZCB1c2luZyBhIGZpbHRlci4NCg0KW1tYODldXQ0KLkRvY0Jvb2sgdGFibGUgd2lkdGhzDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpUaGUgQXNjaWlEb2MgZG9jYm9vayBiYWNrZW5kIGdlbmVyYXRlcyBDQUxTIHRhYmxlcy4gQ0FMUyB0YWJsZXMgZG8gbm90DQpzdXBwb3J0IGEgdGFibGUgd2lkdGggYXR0cmlidXRlIC0tIHRhYmxlIHdpZHRoIGNhbiBvbmx5IGJlIGNvbnRyb2xsZWQNCmJ5IHNwZWNpZnlpbmcgYWJzb2x1dGUgY29sdW1uIHdpZHRocy4NCg0KU3BlY2lmeWluZyBhYnNvbHV0ZSBjb2x1bW4gd2lkdGhzIGlzIG5vdCBtZWRpYSBpbmRlcGVuZGVudCBiZWNhdXNlDQpkaWZmZXJlbnQgcHJlc2VudGF0aW9uIG1lZGlhIGhhdmUgZGlmZmVyZW50IHBoeXNpY2FsIGRpbWVuc2lvbnMuIFRvDQpnZXQgcm91bmQgdGhpcyBsaW1pdGF0aW9uIGJvdGgNCmh0dHA6Ly93d3cuc2FnZWhpbGwubmV0L2RvY2Jvb2t4c2wvVGFibGVzLmh0bWwjVGFibGVXaWR0aFtEb2NCb29rIFhTTA0KU3R5bGVzaGVldHNdIGFuZA0KaHR0cDovL2RibGF0ZXguc291cmNlZm9yZ2UubmV0L2RvYy9tYW51YWwvY2gwM3MwNS5odG1sI3NlYy10YWJsZS13aWR0aFtkYmxhdGV4XQ0KaGF2ZSBpbXBsZW1lbnRlZCB0YWJsZSB3aWR0aCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyBmb3Igc2V0dGluZyB0aGUNCnRhYmxlIHdpZHRoIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYXZhaWxhYmxlIHdpZHRoLiBBc2NpaURvYyBlbWl0cw0KdGhlc2UgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgaWYgdGhlICd3aWR0aCcgYXR0cmlidXRlIGlzIHNldCBhbG9uZw0Kd2l0aCBwcm9wb3J0aW9uYWwgY29sdW1uIHdpZHRocyAodGhlIEFzY2lpRG9jIGRvY2Jvb2sgYmFja2VuZA0KJ3BhZ2V1bml0cycgYXR0cmlidXRlIGRlZmF1bHRzIHRvICcqJykuDQoNClRvIGdlbmVyYXRlIERvY0Jvb2sgdGFibGVzIHdpdGggYWJzb2x1dGUgY29sdW1uIHdpZHRocyBzZXQgdGhlDQoncGFnZXVuaXRzJyBhdHRyaWJ1dGUgdG8gYSBDQUxTIGFic29sdXRlIHVuaXQgc3VjaCBhcyAncHQnIGFuZCBzZXQgdGhlDQoncGFnZXdpZHRoJyBhdHRyaWJ1dGUgdG8gbWF0Y2ggdGhlIHdpZHRoIG9mIHRoZSBwcmVzZW50YXRpb24gbWVkaWEuDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNCltbWDcwXV0NCkNvbHVtbiBTcGVjaWZpZXJzDQp+fn5+fn5+fn5+fn5+fn5+fg0KQ29sdW1uIHNwZWNpZmllcnMgZGVmaW5lIGhvdyBjb2x1bW5zIGFyZSByZW5kZXJlZCBhbmQgYXBwZWFyIGluIHRoZQ0KdGFibGUgPDxYNjksY29scyBhdHRyaWJ1dGU+Pi4gIEEgY29sdW1uIHNwZWNpZmllciBjb25zaXN0cyBvZiBhbg0Kb3B0aW9uYWwgY29sdW1uIG11bHRpcGxpZXIgZm9sbG93ZWQgYnkgb3B0aW9uYWwgYWxpZ25tZW50LCB3aWR0aCBhbmQNCnN0eWxlIHZhbHVlcyBhbmQgaXMgZm9ybWF0dGVkIGxpa2U6DQoNCiAgWzxtdWx0aXBsaWVyPipdWzxhbGlnbj5dWzx3aWR0aD5dWzxzdHlsZT5dDQoNCi0gQWxsIGNvbXBvbmVudHMgYXJlIG9wdGlvbmFsLiBUaGUgbXVsdGlwbGllciBtdXN0IGJlIGZpcnN0IGFuZCB0aGUNCiAgc3R5bGUgbGFzdC4gVGhlIG9yZGVyIG9mIGA8YWxpZ24+YCBvciBgPHdpZHRoPmAgaXMgbm90IGltcG9ydGFudC4NCi0gQ29sdW1uIGA8d2lkdGg+YCBjYW4gYmUgZWl0aGVyIGFuIGludGVnZXIgcHJvcG9ydGlvbmFsIHZhbHVlICgxLi4uKQ0KICBvciBhIHBlcmNlbnRhZ2UgKDElLi4uMTAwJSkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuIFRvIGVuc3VyZQ0KICBwb3J0YWJpbGl0eSBhY3Jvc3MgZGlmZmVyZW50IGJhY2tlbmRzLCB0aGVyZSBpcyBubyBwcm92aXNpb24gZm9yDQogIGFic29sdXRlIGNvbHVtbiB3aWR0aHMgKG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIG91dHB1dCBjb2x1bW4gd2lkdGgNCiAgPDxYNzIsbWFya3VwIGF0dHJpYnV0ZXM+PiB3aGljaCBhcmUgYXZhaWxhYmxlIGluIGJvdGggcGVyY2VudGFnZSBhbmQNCiAgYWJzb2x1dGUgdW5pdHMpLg0KLSBUaGUgJzxhbGlnbj4nIGNvbHVtbiBhbGlnbm1lbnQgc3BlY2lmaWVyIGlzIGZvcm1hdHRlZCBsaWtlOg0KDQogIFs8aG9yaXpvbnRhbD5dWy48dmVydGljYWw+XQ0KKw0KV2hlcmUgYDxob3Jpem9udGFsPmAgYW5kIGA8dmVydGljYWw+YCBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmcNCmNoYXJhY3RlcnM6IGA8YCwgYF5gIG9yIGA+YCB3aGljaCByZXByZXNlbnQgJ2xlZnQnLCAnY2VudGVyJyBhbmQNCidyaWdodCcgaG9yaXpvbnRhbCBhbGlnbm1lbnQgb3IgJ3RvcCcsICdtaWRkbGUnIGFuZCAnYm90dG9tJyB2ZXJ0aWNhbA0KYWxpZ25tZW50IHJlc3BlY3RpdmVseS4NCg0KLSBBIGA8bXVsdGlwbGllcj5gIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgcmVwZWF0ZWQgY29sdW1ucyBlLmcuDQogIGBjb2xzPSI0KjwiYCBzcGVjaWZpZXMgZm91ciBsZWZ0LWp1c3RpZmllZCBjb2x1bW5zLiBUaGUgZGVmYXVsdA0KICBtdWx0aXBsaWVyIHZhbHVlIGlzIDEuDQotIFRoZSBgPHN0eWxlPmAgbmFtZSBzcGVjaWZpZXMgYSA8PFg3MSx0YWJsZSBzdHlsZT4+IHRvIHVzZWQgdG8gbWFya3VwDQogIGNvbHVtbiBjZWxscyAoeW91IGNhbiB1c2UgdGhlIGZ1bGwgc3R5bGUgbmFtZXMgaWYgeW91IHdpc2ggYnV0IHRoZQ0KICBmaXJzdCBsZXR0ZXIgaXMgbm9ybWFsbHkgc3VmZmljaWVudCkuDQotIENvbHVtbiBzcGVjaWZpYyBzdHlsZXMgYXJlIG5vdCBhcHBsaWVkIHRvIGhlYWRlciByb3dzLg0KDQpbW1g4NF1dDQpDZWxsIFNwZWNpZmllcnMNCn5+fn5+fn5+fn5+fn5+fg0KQ2VsbCBzcGVjaWZpZXJzIGFsbG93IGluZGl2aWR1YWwgY2VsbHMgaW4gJ3BzdicgZm9ybWF0dGVkIHRhYmxlcyB0byBiZQ0Kc3Bhbm5lZCwgbXVsdGlwbGllZCwgYWxpZ25lZCBhbmQgc3R5bGVkLiAgQ2VsbCBzcGVjaWZpZXJzIHByZWZpeCAncHN2Jw0KYHxgIGRlbGltaXRlcnMgYW5kIGFyZSBmb3JtYXR0ZWQgbGlrZToNCg0KICBbPHNwYW4+KnwrXVs8YWxpZ24+XVs8c3R5bGU+XQ0KDQotICc8c3Bhbj4nIHNwZWNpZmllcyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjZWxsIHNwYW5zICgnKycgb3BlcmF0b3IpIG9yDQogIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNlbGwgaXMgcmVwbGljYXRlZCAoJyonIG9wZXJhdG9yKS4gJzxzcGFuPicNCiAgaXMgZm9ybWF0dGVkIGxpa2U6DQoNCiAgWzxjb2xzcGFuPl1bLjxyb3dzcGFuPl0NCisNCldoZXJlIGA8Y29sc3Bhbj5gIGFuZCBgPHJvd3NwYW4+YCBhcmUgaW50ZWdlcnMgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mDQpjb2x1bW5zIGFuZCByb3dzIHRvIHNwYW4uDQoNCi0gYDxhbGlnbj5gIHNwZWNpZmllcyBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBjZWxsIGFsaWdubWVudCBhbiBpcyB0aGUNCiAgc2FtZSBhcyBpbiA8PFg3MCxjb2x1bW4gc3BlY2lmaWVycz4+Lg0KLSBBIGA8c3R5bGU+YCB2YWx1ZSBpcyB0aGUgZmlyc3QgbGV0dGVyIG9mIDw8WDcxLHRhYmxlIHN0eWxlPj4gbmFtZS4NCg0KRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgJ3BzdicgZm9ybWF0dGVkIGNlbGwgd2lsbCBzcGFuIHR3byBjb2x1bW5zDQphbmQgdGhlIHRleHQgd2lsbCBiZSBjZW50ZXJlZCBhbmQgZW1waGFzaXplZDoNCg0KICBgMiteZXwgQ2VsbCB0ZXh0YA0KDQpbW1g3MV1dDQpUYWJsZSBzdHlsZXMNCn5+fn5+fn5+fn5+fg0KVGFibGUgc3R5bGVzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBlbnRpcmUgdGFibGUgKGJ5IHNldHRpbmcgdGhlDQonc3R5bGUnIGF0dHJpYnV0ZSBpbiB0aGUgdGFibGUncyBhdHRyaWJ1dGUgbGlzdCkgb3Igb24gYSBwZXIgY29sdW1uDQpiYXNpcyAoYnkgc3BlY2lmeWluZyB0aGUgc3R5bGUgaW4gdGhlIHRhYmxlJ3MgPDxYNjksY29scyBhdHRyaWJ1dGU+PikuDQpUYWJsZSBkYXRhIGNhbiBiZSBmb3JtYXR0ZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBwcmVkZWZpbmVkIHN0eWxlczoNCg0KZGVmYXVsdDo6DQpUaGUgZGVmYXVsdCBzdHlsZTogQXNjaWlEb2MgaW5saW5lIHRleHQgZm9ybWF0dGluZzsgYmxhbmsgbGluZXMgYXJlDQp0cmVhdGVkIGFzIHBhcmFncmFwaCBicmVha3MuDQoNCmVtcGhhc2lzOjoNCkxpa2UgZGVmYXVsdCBidXQgYWxsIHRleHQgaXMgZW1waGFzaXNlZC4NCg0KbW9ub3NwYWNlZDo6DQpMaWtlIGRlZmF1bHQgYnV0IGFsbCB0ZXh0IGlzIGluIGEgbW9ub3NwYWNlZCBmb250Lg0KDQpzdHJvbmc6Og0KTGlrZSBkZWZhdWx0IGJ1dCBhbGwgdGV4dCBpcyBib2xkLg0KDQpoZWFkZXI6Og0KQXBwbHkgdGhlIHNhbWUgc3R5bGUgYXMgdGhlIHRhYmxlIGhlYWRlci4gTm9ybWFsbHkgdXNlZCB0byBjcmVhdGUgYQ0KdmVydGljYWwgaGVhZGVyIGluIHRoZSBmaXJzdCBjb2x1bW4uDQoNCmFzY2lpZG9jOjoNCldpdGggdGhpcyBzdHlsZSB0YWJsZSBjZWxscyBjYW4gY29udGFpbiBhbnkgb2YgdGhlIEFzY2lpRG9jIGVsZW1lbnRzDQp0aGF0IGFyZSBhbGxvd2VkIGluc2lkZSBkb2N1bWVudCBzZWN0aW9ucy4gVGhpcyBzdHlsZSBydW5zIGFzY2lpZG9jKDEpDQphcyBhIGZpbHRlciB0byBwcm9jZXNzIGNlbGwgY29udGVudHMuIFNlZSBhbHNvIDw8WDgzLERvY2Jvb2sgdGFibGUNCmxpbWl0YXRpb25zPj4uDQoNCmxpdGVyYWw6Og0KTm8gdGV4dCBmb3JtYXR0aW5nOyBtb25vc3BhY2VkIGZvbnQ7IGFsbCBsaW5lIGJyZWFrcyBhcmUgcmV0YWluZWQNCih0aGUgc2FtZSBhcyB0aGUgQXNjaWlEb2MgPDxYNjUsTGl0ZXJhbEJsb2NrPj4gZWxlbWVudCkuDQoNCnZlcnNlOjoNCkFsbCBsaW5lIGJyZWFrcyBhcmUgcmV0YWluZWQgKGp1c3QgbGlrZSB0aGUgQXNjaWlEb2MgPDxYOTQsdmVyc2UNCnBhcmFncmFwaCBzdHlsZT4+KS4NCg0KW1tYNzJdXQ0KTWFya3VwIGF0dHJpYnV0ZXMNCn5+fn5+fn5+fn5+fn5+fn5+DQpBc2NpaURvYyBtYWtlcyBhIG51bWJlciBvZiBhdHRyaWJ1dGVzIGF2YWlsYWJsZSB0byB0YWJsZSBtYXJrdXANCnRlbXBsYXRlcyBhbmQgdGFncy4gQ29sdW1uIHNwZWNpZmljIGF0dHJpYnV0ZXMgYXJlIGF2YWlsYWJsZSB3aGVuDQpzdWJzdGl0dXRpbmcgdGhlICdjb2xzcGVjJyBjZWxsIGRhdGEgdGFncy4NCg0KcGFnZXVuaXRzOjoNCkRvY0Jvb2sgYmFja2VuZCBvbmx5LiBTcGVjaWZpZXMgdGFibGUgY29sdW1uIGFic29sdXRlIHdpZHRoIHVuaXRzLg0KRGVmYXVsdHMgdG8gJyonLg0KDQpwYWdld2lkdGg6Og0KRG9jQm9vayBiYWNrZW5kIG9ubHkuIFRoZSBub21pbmFsIG91dHB1dCBwYWdlIHdpZHRoIGluICdwYWdldW5pdCcNCnVuaXRzLiBVc2VkIHRvIGNhbGN1bGF0ZSBDQUxTIHRhYmxlcyBhYnNvbHV0ZSBjb2x1bW4gYW5kIHRhYmxlDQp3aWR0aHMuIERlZmF1bHRzIHRvICc0MjUnLg0KDQp0YWJsZWFic3dpZHRoOjoNCkludGVnZXIgdmFsdWUgY2FsY3VsYXRlZCBmcm9tICd3aWR0aCcgYW5kICdwYWdld2lkdGgnIGF0dHJpYnV0ZXMuDQpJbiAncGFnZXVuaXQnIHVuaXRzLg0KDQp0YWJsZXBjd2lkdGg6Og0KVGFibGUgd2lkdGggZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgYXZhaWxhYmxlIHdpZHRoLiBJbnRlZ2VyDQp2YWx1ZSAoMC4uMTAwKS4NCg0KY29sYWJzd2lkdGg6Og0KSW50ZWdlciB2YWx1ZSBjYWxjdWxhdGVkIGZyb20gJ2NvbHMnIGNvbHVtbiB3aWR0aCwgJ3dpZHRoJyBhbmQNCidwYWdld2lkdGgnIGF0dHJpYnV0ZXMuICBJbiAncGFnZXVuaXQnIHVuaXRzLg0KDQpjb2xwY3dpZHRoOjoNCkNvbHVtbiB3aWR0aCBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSB0YWJsZSB3aWR0aC4gSW50ZWdlcg0KdmFsdWUgKDAuLjEwMCkuDQoNCmNvbGNvdW50OjoNClRvdGFsIG51bWJlciBvZiB0YWJsZSBjb2x1bW5zLg0KDQpyb3djb3VudDo6DQpUb3RhbCBudW1iZXIgb2YgdGFibGUgcm93cy4NCg0KaGFsaWduOjoNCkhvcml6b250YWwgY2VsbCBjb250ZW50IGFsaWdubWVudDogJ2xlZnQnLCAncmlnaHQnIG9yICdjZW50ZXInLg0KDQp2YWxpZ246Og0KVmVydGljYWwgY2VsbCBjb250ZW50IGFsaWdubWVudDogJ3RvcCcsICdib3R0b20nIG9yICdtaWRkbGUnLg0KDQpjb2xudW1iZXIsIGNvbHN0YXJ0OjoNClRoZSBudW1iZXIgb2YgdGhlIGxlZnRtb3N0IGNvbHVtbiBvY2N1cGllZCBieSB0aGUgY2VsbCAoMS4uLikuDQoNCmNvbGVuZDo6DQpUaGUgbnVtYmVyIG9mIHRoZSByaWdodG1vc3QgY29sdW1uIG9jY3VwaWVkIGJ5IHRoZSBjZWxsICgxLi4uKS4NCg0KY29sc3Bhbjo6DQpOdW1iZXIgb2YgY29sdW1ucyB0aGUgY2VsbCBzaG91bGQgc3Bhbi4NCg0Kcm93c3Bhbjo6DQpOdW1iZXIgb2Ygcm93cyB0aGUgY2VsbCBzaG91bGQgc3BhbiAoMS4uLikuDQoNCm1vcmVyb3dzOjoNCk51bWJlciBvZiBhZGRpdGlvbmFsIHJvd3MgdGhlIGNlbGwgc2hvdWxkIHNwYW4gKDAuLi4pLg0KDQpOZXN0ZWQgdGFibGVzDQp+fn5+fn5+fn5+fn5+DQpBbiBhbHRlcm5hdGl2ZSAncHN2JyBzZXBhcmF0b3IgY2hhcmFjdGVyICchJyBjYW4gYmUgdXNlZCAoaW5zdGVhZCBvZg0KJ3wnKSBpbiBuZXN0ZWQgdGFibGVzLiBUaGlzIGFsbG93cyBhIHNpbmdsZSBsZXZlbCBvZiB0YWJsZSBuZXN0aW5nLg0KQ29sdW1ucyBjb250YWluaW5nIG5lc3RlZCB0YWJsZXMgbXVzdCB1c2UgdGhlICdhc2NpaWRvYycgc3R5bGUuIEFuDQpleGFtcGxlIGNhbiBiZSBmb3VuZCBpbiBgLi9leGFtcGxlcy93ZWJzaXRlL25ld3RhYmxlcy50eHRgLg0KDQpbW1g4M11dDQpEb2NCb29rIHRhYmxlIGxpbWl0YXRpb25zDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpGdWxseSBpbXBsZW1lbnRpbmcgdGFibGVzIGlzIG5vdCB0cml2aWFsLCBzb21lIERvY0Jvb2sgdG9vbGNoYWlucyBkbw0KYmV0dGVyIHRoYW4gb3RoZXJzLiAgQXNjaWlEb2MgSFRNTCB0YWJsZSBvdXRwdXRzIGFyZSByZW5kZXJlZA0KY29ycmVjdGx5IGluIGFsbCB0aGUgcG9wdWxhciBicm93c2VycyAtLSBpZiB5b3VyIERvY0Jvb2sgZ2VuZXJhdGVkDQp0YWJsZXMgZG9uJ3QgbG9vayByaWdodCBjb21wYXJlIHRoZW0gd2l0aCB0aGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUNCkFzY2lpRG9jICd4aHRtbDExJyBiYWNrZW5kIG9yIHRyeSBhIGRpZmZlcmVudCBEb2NCb29rIHRvb2xjaGFpbi4gIEhlcmUNCmlzIGEgbGlzdCBvZiB0aGluZ3MgdG8gYmUgYXdhcmUgb2Y6DQoNCi0gQWx0aG91Z2ggbmVzdGVkIHRhYmxlcyBhcmUgbm90IGxlZ2FsIGluIERvY0Jvb2sgNCB0aGUgRk9QIGFuZA0KICBkYmxhdGV4IHRvb2xjaGFpbnMgd2lsbCBwcm9jZXNzIHRoZW0gY29ycmVjdGx5LiAgSWYgeW91IHVzZSBgYTJ4KDEpYA0KICB5b3Ugd2lsbCBuZWVkIHRvIGluY2x1ZGUgdGhlIGAtLW5vLXhtbGxpbnRgIG9wdGlvbiB0byBzdXBwcmVzcw0KICBEb2NCb29rIHZhbGlkYXRpb24gZXJyb3JzLg0KKw0KTk9URTogSW4gdGhlb3J5IHlvdSBjYW4gbmVzdCBEb2NCb29rIDQgdGFibGVzIG9uZSBsZXZlbCB1c2luZyB0aGUNCidlbnRyeXRibCcgZWxlbWVudCwgYnV0IG5vdCBhbGwgdG9vbGNoYWlucyBwcm9jZXNzICdlbnRyeXRibCcuDQoNCi0gRG9jQm9vayBvbmx5IGFsbG93cyBhIHN1YnNldCBvZiBibG9jayBlbGVtZW50cyBpbnNpZGUgdGFibGUgY2VsbHMgc28NCiAgbm90IGFsbCBBc2NpaURvYyBlbGVtZW50cyBwcm9kdWNlIHZhbGlkIERvY0Jvb2sgaW5zaWRlIHRhYmxlIGNlbGxzLg0KICBJZiB5b3UgZ2V0IHZhbGlkYXRpb24gZXJyb3JzIHJ1bm5pbmcgYGEyeCgxKWAgdHJ5IHRoZSBgLS1uby14bWxsaW50YA0KICBvcHRpb24sIHRvb2xjaGFpbnMgd2lsbCBvZnRlbiBwcm9jZXNzIG5lc3RlZCBibG9jayBlbGVtZW50cyBzdWNoIGFzDQogIHNpZGViYXIgYmxvY2tzIGFuZCBmbG9hdGluZyB0aXRsZXMgY29ycmVjdGx5IGV2ZW4gdGhvdWdoLCBzdHJpY3RseQ0KICBzcGVha2luZywgdGhleSBhcmUgbm90IGxlZ2FsLg0KDQotIFRleHQgZm9ybWF0dGluZyBpbiBjZWxscyB1c2luZyB0aGUgJ21vbm9zcGFjZWQnIHRhYmxlIHN0eWxlIHdpbGwNCiAgcmFpc2UgdmFsaWRhdGlvbiBlcnJvcnMgYmVjYXVzZSB0aGUgRG9jQm9vayAnbGl0ZXJhbCcgZWxlbWVudCB3YXMNCiAgbm90IGRlc2lnbmVkIHRvIHN1cHBvcnQgZm9ybWF0dGVkIHRleHQgKHVzaW5nIHRoZSAnbGl0ZXJhbCcgZWxlbWVudA0KICBpcyBhIGtsdWRnZSBvbiB0aGUgcGFydCBvZiBBc2NpaURvYyBhcyB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBzZXQNCiAgdGhlIGZvbnQgc3R5bGUgaW4gRG9jQm9vay4NCg0KLSBDZWxsIGFsaWdubWVudHMgYXJlIGlnbm9yZWQgZm9yICd2ZXJzZScsICdsaXRlcmFsJyBvciAnYXNjaWlkb2MnDQogIHRhYmxlIHN0eWxlcy4NCg0KDQpbW1gxXV0NCk1hbnBhZ2UgRG9jdW1lbnRzDQotLS0tLS0tLS0tLS0tLS0tLQ0KU29vbmVyIG9yIGxhdGVyLCBpZiB5b3UgcHJvZ3JhbSBpbiBhIFVOSVggZW52aXJvbm1lbnQsIHlvdSdyZSBnb2luZw0KdG8gaGF2ZSB0byB3cml0ZSBhIG1hbiBwYWdlLg0KDQpCeSBvYnNlcnZpbmcgYSBjb3VwbGUgb2YgYWRkaXRpb25hbCBjb252ZW50aW9ucyAoZGV0YWlsZWQgYmVsb3cpIHlvdQ0KY2FuIHdyaXRlIEFzY2lpRG9jIGZpbGVzIHRoYXQgd2lsbCBnZW5lcmF0ZSBIVE1MIGFuZCBQREYgbWFuIHBhZ2VzDQpwbHVzIHRoZSBuYXRpdmUgbWFucGFnZSByb2ZmIGZvcm1hdC4gIFRoZSBlYXNpZXN0IHdheSB0byBnZW5lcmF0ZSByb2ZmDQptYW5wYWdlcyBmcm9tIEFzY2lpRG9jIHNvdXJjZSBpcyB0byB1c2UgdGhlIGEyeCgxKSBjb21tYW5kLiBUaGUNCmZvbGxvd2luZyBleGFtcGxlIGdlbmVyYXRlcyBhIHJvZmYgZm9ybWF0dGVkIG1hbnBhZ2UgZmlsZSBjYWxsZWQNCmBhc2NpaWRvYy4xYCAoYTJ4KDEpIHVzZXMgYXNjaWlkb2MoMSkgdG8gY29udmVydCBgYXNjaWlkb2MuMS50eHRgIHRvDQpEb2NCb29rIHdoaWNoIGl0IHRoZW4gY29udmVydHMgdG8gcm9mZiB1c2luZyBEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyk6DQoNCiAgYTJ4IC0tZG9jdHlwZSBtYW5wYWdlIC0tZm9ybWF0IG1hbnBhZ2UgYXNjaWlkb2MuMS50eHQNCg0KLlZpZXdpbmcgYW5kIHByaW50aW5nIG1hbnBhZ2UgZmlsZXMNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNClVzZSB0aGUgYG1hbigxKWAgY29tbWFuZCB0byB2aWV3IHRoZSBtYW5wYWdlIGZpbGU6DQoNCiAgJCBtYW4gLWwgYXNjaWlkb2MuMQ0KDQpUbyBwcmludCBhIGhpZ2ggcXVhbGl0eSBtYW4gcGFnZSB0byBhIHBvc3RzY3JpcHQgcHJpbnRlcjoNCg0KICAkIG1hbiAtbCAtVHBzIGFzY2lpZG9jLjEgfCBscHINCg0KWW91IGNvdWxkIGFsc28gY3JlYXRlIGEgUERGIHZlcnNpb24gb2YgdGhlIG1hbiBwYWdlIGJ5IGNvbnZlcnRpbmcNClBvc3RTY3JpcHQgdG8gUERGIHVzaW5nIGBwczJwZGYoMSlgOg0KDQogICQgbWFuIC1sIC1UcHMgYXNjaWlkb2MuMSB8IHBzMnBkZiAtIGFzY2lpZG9jLjEucGRmDQoNClRoZSBgcHMycGRmKDEpYCBjb21tYW5kIGlzIGluY2x1ZGVkIGluIHRoZSBHaG9zdHNjcmlwdCBkaXN0cmlidXRpb24uDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoNClRvIGZpbmQgb3V0IG1vcmUgYWJvdXQgbWFuIHBhZ2VzIHZpZXcgdGhlIGBtYW4oNylgIG1hbnBhZ2UNCihgbWFuIDcgbWFuYCBhbmQgYG1hbiBtYW4tcGFnZXNgIGNvbW1hbmRzKS4NCg0KDQpEb2N1bWVudCBIZWFkZXINCn5+fn5+fn5+fn5+fn5+fg0KQSBtYW5wYWdlIGRvY3VtZW50IEhlYWRlciBpcyBtYW5kYXRvcnkuIFRoZSB0aXRsZSBsaW5lIGNvbnRhaW5zIHRoZQ0KbWFuIHBhZ2UgbmFtZSBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgbWFudWFsIHNlY3Rpb24gbnVtYmVyIGluDQpicmFja2V0cywgZm9yIGV4YW1wbGUgJ0FTQ0lJRE9DKDEpJy4gVGhlIHRpdGxlIG5hbWUgc2hvdWxkIG5vdCBjb250YWluDQp3aGl0ZSBzcGFjZSBhbmQgdGhlIG1hbnVhbCBzZWN0aW9uIG51bWJlciBpcyBhIHNpbmdsZSBkaWdpdCBvcHRpb25hbGx5DQpmb2xsb3dlZCBieSBhIHNpbmdsZSBjaGFyYWN0ZXIuDQoNClRoZSBOQU1FIFNlY3Rpb24NCn5+fn5+fn5+fn5+fn5+fn4NClRoZSBmaXJzdCBtYW5wYWdlIHNlY3Rpb24gaXMgbWFuZGF0b3J5LCBtdXN0IGJlIHRpdGxlZCAnTkFNRScgYW5kIG11c3QNCmNvbnRhaW4gYSBzaW5nbGUgcGFyYWdyYXBoICh1c3VhbGx5IGEgc2luZ2xlIGxpbmUpIGNvbnNpc3Rpbmcgb2YgYQ0KbGlzdCBvZiBvbmUgb3IgbW9yZSBjb21tYSBzZXBhcmF0ZWQgY29tbWFuZCBuYW1lKHMpIHNlcGFyYXRlZCBmcm9tIHRoZQ0KY29tbWFuZCBwdXJwb3NlIGJ5IGEgZGFzaCBjaGFyYWN0ZXIuIFRoZSBkYXNoIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUNCndoaXRlIHNwYWNlIGNoYXJhY3RlciBvbiBlaXRoZXIgc2lkZS4gRm9yIGV4YW1wbGU6DQoNCiAgcHJpbnRmLCBmcHJpbnRmLCBzcHJpbnRmIC0gcHJpbnQgZm9ybWF0dGVkIG91dHB1dA0KDQpUaGUgU1lOT1BTSVMgU2VjdGlvbg0Kfn5+fn5+fn5+fn5+fn5+fn5+fn4NClRoZSBzZWNvbmQgbWFucGFnZSBzZWN0aW9uIGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBiZSB0aXRsZWQgJ1NZTk9QU0lTJy4NCg0KcmVmbWlzY2luZm8gYXR0cmlidXRlcw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KSW4gYWRkaXRpb24gdG8gdGhlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBtYW4gcGFnZSA8PFg2MCxpbnRyaW5zaWMNCmF0dHJpYnV0ZXM+PiB5b3UgY2FuIGFzc2lnbiBEb2NCb29rDQpodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3RkZzUvZW4vaHRtbC9yZWZtaXNjaW5mby5odG1sW3JlZm1pc2NpbmZvXQ0KZWxlbWVudCAnc291cmNlJywgJ3ZlcnNpb24nIGFuZCAnbWFudWFsJyB2YWx1ZXMgdXNpbmcgQXNjaWlEb2MNCmB7bWFuc291cmNlfWAsIGB7bWFudmVyc2lvbn1gIGFuZCBge21hbm1hbnVhbH1gIGF0dHJpYnV0ZXMNCnJlc3BlY3RpdmVseS4gVGhpcyBleGFtcGxlIGlzIGZyb20gdGhlIEFzY2lpRG9jIGhlYWRlciBvZiBhIG1hbiBwYWdlDQpzb3VyY2UgZmlsZToNCg0KICA6bWFuIHNvdXJjZTogICBBc2NpaURvYw0KICA6bWFuIHZlcnNpb246ICB7cmV2bnVtYmVyfQ0KICA6bWFuIG1hbnVhbDogICBBc2NpaURvYyBNYW51YWwNCg0KDQpbW1g3OF1dDQpNYXRoZW1hdGljYWwgRm9ybXVsYXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlICdhc2NpaW1hdGgnIGFuZCAnbGF0ZXhtYXRoJyA8PFg3NyxwYXNzdGhyb3VnaCBtYWNyb3M+PiBhbG9uZyB3aXRoDQonYXNjaWltYXRoJyBhbmQgJ2xhdGV4bWF0aCcgIDw8WDc2LHBhc3N0aHJvdWdoIGJsb2Nrcz4+IHByb3ZpZGUgYQ0KKGJhY2tlbmQgZGVwZW5kZW50KSBtZWNoYW5pc20gZm9yIHJlbmRlcmluZyBtYXRoZW1hdGljYWwgZm9ybXVsYXMuIFlvdQ0KY2FuIHVzZSB0aGUgZm9sbG93aW5nIG1hdGggbWFya3VwczoNCg0KTk9URTogVGhlICdsYXRleG1hdGgnIG1hY3JvIHVzZWQgdG8gaW5jbHVkZSAnTGFUZVggTWF0aCcgaW4gRG9jQm9vaw0Kb3V0cHV0cyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlICdsYXRleG1hdGgnIG1hY3JvIHVzZWQgdG8gaW5jbHVkZQ0KJ0xhVGVYIE1hdGhNTCcgaW4gWEhUTUwgb3V0cHV0cy4gICdMYVRlWCBNYXRoJyBhcHBsaWVzIHRvIERvY0Jvb2sNCm91dHB1dHMgdGhhdCBhcmUgcHJvY2Vzc2VkIGJ5IDw8WDMxLGRibGF0ZXg+PiBhbmQgaXMgbm9ybWFsbHkgdXNlZCB0bw0KZ2VuZXJhdGUgUERGIGZpbGVzLiAgJ0xhVGVYTWF0aE1MJyBpcyB2ZXJ5IG11Y2ggYSBzdWJzZXQgb2YgJ0xhVGVYDQpNYXRoJyBhbmQgYXBwbGllcyB0byBYSFRNTCBkb2N1bWVudHMuDQoNCkxhVGVYIE1hdGgNCn5+fn5+fn5+fn4NCmZ0cDovL2Z0cC5hbXMub3JnL3B1Yi90ZXgvZG9jL2Ftc21hdGgvc2hvcnQtbWF0aC1ndWlkZS5wZGZbTGFUZVgNCm1hdGhdIGNhbiBiZSBpbmNsdWRlZCBpbiBkb2N1bWVudHMgdGhhdCBhcmUgcHJvY2Vzc2VkIGJ5DQo8PFgzMSxkYmxhdGV4KDEpPj4uICBFeGFtcGxlIGlubGluZSBmb3JtdWxhOg0KDQogIGxhdGV4bWF0aDpbJEMgPSBcYWxwaGEgKyBcYmV0YSBZXntcZ2FtbWF9ICsgXGVwc2lsb24kXQ0KDQpGb3IgbW9yZSBleGFtcGxlcyBzZWUgdGhlIHt3ZWJzaXRlfVtBc2NpaURvYyB3ZWJzaXRlXSBvciB0aGUNCmRpc3RyaWJ1dGVkIGBkb2MvbGF0ZXhtYXRoLnR4dGAgZmlsZS4NCg0KQVNDSUlNYXRoTUwNCn5+fn5+fn5+fn5+DQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NClRoZSBvbGRlciBBU0NJSU1hdGhNTCAxLjQ3IHZlcnNpb24gaXMgdXNlZCBpbnN0ZWFkIG9mIHZlcnNpb24gMg0KYmVjYXVzZToNCg0KMS4gVmVyc2lvbiAyIGRvZXNuJ3Qgd29yayB3aGVuIGVtYmVkZGVkLg0KMi4gVmVyc2lvbiAyIGlzIG11Y2ggbGFyZ2VyLg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCmh0dHA6Ly93d3cxLmNoYXBtYW4uZWR1L35qaXBzZW4vbWF0aG1sL2FzY2lpbWF0aC5odG1sW0FTQ0lJTWF0aE1MXQ0KZm9ybXVsYXMgY2FuIGJlIGluY2x1ZGVkIGluIFhIVE1MIGRvY3VtZW50cyBnZW5lcmF0ZWQgdXNpbmcgdGhlDQoneGh0bWwxMScgYW5kICdodG1sNScgYmFja2VuZHMuIFRvIGVuYWJsZSBBU0NJSU1hdGhNTCBzdXBwb3J0IHlvdSBtdXN0DQpkZWZpbmUgdGhlICdhc2NpaW1hdGgnIGF0dHJpYnV0ZSwgZm9yIGV4YW1wbGUgdXNpbmcgdGhlIGAtYSBhc2NpaW1hdGhgDQpjb21tYW5kLWxpbmUgb3B0aW9uLiAgRXhhbXBsZSBpbmxpbmUgZm9ybXVsYToNCg0KICBhc2NpaW1hdGg6W2B4L3g9eygxLGlmIHghPTApLCh0ZXh0e3VuZGVmaW5lZH0saWYgeD0wKTp9YF0NCg0KRm9yIG1vcmUgZXhhbXBsZXMgc2VlIHRoZSB7d2Vic2l0ZX1bQXNjaWlEb2Mgd2Vic2l0ZV0gb3IgdGhlDQpkaXN0cmlidXRlZCBgZG9jL2FzY2lpbWF0aG1sLnR4dGAgZmlsZS4NCg0KTGFUZVhNYXRoTUwNCn5+fn5+fn5+fn5+DQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NClRoZXJlIGlzIGFuIGh0dHA6Ly9tYXRoLmV0c3UuZWR1L0xhVGVYTWF0aE1ML1tleHRlbmRlZCBMYVRlWE1hdGhNTA0KdmVyc2lvbl0gYnkgSmVmZiBLbmlzbGV5LCBpbiBhZGRpdGlvbiB0byBhIEphdmFTY3JpcHQgZmlsZSBpdCByZXF1aXJlcw0KdGhlIGluY2x1c2lvbiBvZiBhIENTUyBmaWxlLg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCidMYVRlWE1hdGhNTCcgYWxsb3dzIExhVGVYIE1hdGggc3R5bGUgZm9ybXVsYXMgdG8gYmUgaW5jbHVkZWQgaW4gWEhUTUwNCmRvY3VtZW50cyBnZW5lcmF0ZWQgdXNpbmcgdGhlIEFzY2lpRG9jICd4aHRtbDExJyBhbmQgJ2h0bWw1JyBiYWNrZW5kcy4NCkFzY2lpRG9jIHVzZXMgdGhlDQpodHRwOi8vd3d3Lm1hdGhzLm5vdHRpbmdoYW0uYWMudWsvcGVyc29uYWwvZHJ3L2xtLmh0bWxbb3JpZ2luYWwNCkxhVGVYTWF0aE1MXSBieSBEb3VnbGFzIFdvb2RhbGwuICAnTGFUZVhNYXRoTUwnIGlzIGRlcml2ZWQgZnJvbQ0KQVNDSUlNYXRoTUwgYW5kIGlzIGZvciB1c2VycyB3aG8gYXJlIG1vcmUgZmFtaWxpYXIgd2l0aCBvciBwcmVmZXINCnVzaW5nIExhVGVYIG1hdGggZm9ybXVsYXMgKGl0IHJlY29nbml6ZXMgYSBzdWJzZXQgb2YgTGFUZVggTWF0aCwgdGhlDQpkaWZmZXJlbmNlcyBhcmUgZG9jdW1lbnRlZCBvbiB0aGUgJ0xhVGVYTWF0aE1MJyB3ZWIgcGFnZSkuICBUbyBlbmFibGUNCkxhVGVYTWF0aE1MIHN1cHBvcnQgeW91IG11c3QgZGVmaW5lIHRoZSAnbGF0ZXhtYXRoJyBhdHRyaWJ1dGUsIGZvcg0KZXhhbXBsZSB1c2luZyB0aGUgYC1hIGxhdGV4bWF0aGAgY29tbWFuZC1saW5lIG9wdGlvbi4gIEV4YW1wbGUgaW5saW5lDQpmb3JtdWxhOg0KDQogIGxhdGV4bWF0aDpbJFxzdW1fe249MX1eXGluZnR5IFxmcmFjezF9ezJebn0kXQ0KDQpGb3IgbW9yZSBleGFtcGxlcyBzZWUgdGhlIHt3ZWJzaXRlfVtBc2NpaURvYyB3ZWJzaXRlXSBvciB0aGUNCmRpc3RyaWJ1dGVkIGBkb2MvbGF0ZXhtYXRobWwudHh0YCBmaWxlLg0KDQpNYXRoTUwNCn5+fn5+fg0KaHR0cDovL3d3dy53My5vcmcvTWF0aC9bTWF0aE1MXSBpcyBhIGxvdyBsZXZlbCBYTUwgbWFya3VwIGZvcg0KbWF0aGVtYXRpY3MuIEFzY2lpRG9jIGhhcyBubyBtYWNyb3MgZm9yIE1hdGhNTCBidXQgdXNlcnMgZmFtaWxpYXIgd2l0aA0KdGhpcyBtYXJrdXAgY291bGQgdXNlIHBhc3N0aHJvdWdoIG1hY3JvcyBhbmQgcGFzc3Rocm91Z2ggYmxvY2tzIHRvDQppbmNsdWRlIE1hdGhNTCBpbiBvdXRwdXQgZG9jdW1lbnRzLg0KDQoNCltbWDddXQ0KQ29uZmlndXJhdGlvbiBGaWxlcw0KLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQXNjaWlEb2Mgc291cmNlIGZpbGUgc3ludGF4IGFuZCBvdXRwdXQgZmlsZSBtYXJrdXAgaXMgbGFyZ2VseQ0KY29udHJvbGxlZCBieSBhIHNldCBvZiBjYXNjYWRpbmcsIHRleHQgYmFzZWQsIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBBdA0KcnVudGltZSBUaGUgQXNjaWlEb2MgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBjb21iaW5lZCB3aXRoDQpvcHRpb25hbCB1c2VyIGFuZCBkb2N1bWVudCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzLg0KDQpDb25maWd1cmF0aW9uIEZpbGUgRm9ybWF0DQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpDb25maWd1cmF0aW9uIGZpbGVzIGNvbnRhaW4gbmFtZWQgc2VjdGlvbnMuIEVhY2ggc2VjdGlvbiBiZWdpbnMgd2l0aCBhDQpzZWN0aW9uIG5hbWUgaW4gc3F1YXJlIGJyYWNrZXRzIFtdLiBUaGUgc2VjdGlvbiBib2R5IGNvbnNpc3RzIG9mIHRoZQ0KbGluZXMgb2YgdGV4dCBiZXR3ZWVuIGFkamFjZW50IHNlY3Rpb24gaGVhZGluZ3MuDQoNCi0gU2VjdGlvbiBuYW1lcyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYywgdW5kZXJzY29yZSBvcg0KICBkYXNoIGNoYXJhY3RlcnMgYW5kIGNhbm5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGRhc2guDQotIExpbmVzIHN0YXJ0aW5nIHdpdGggYSAnIycgY2hhcmFjdGVyIGFyZSB0cmVhdGVkIGFzIGNvbW1lbnRzIGFuZA0KICBpZ25vcmVkLg0KLSBJZiB0aGUgc2VjdGlvbiBuYW1lIGlzIHByZWZpeGVkIHdpdGggYSAnKycgY2hhcmFjdGVyIHRoZW4gdGhlDQogIHNlY3Rpb24gY29udGVudHMgaXMgYXBwZW5kZWQgdG8gdGhlIGNvbnRlbnRzIG9mIGFuIGFscmVhZHkgZXhpc3RpbmcNCiAgc2FtZS1uYW1lZCBzZWN0aW9uLg0KLSBPdGhlcndpc2Ugc2FtZS1uYW1lZCBzZWN0aW9ucyBhbmQgc2VjdGlvbiBlbnRyaWVzIG92ZXJyaWRlDQogIHByZXZpb3VzbHkgbG9hZGVkIHNlY3Rpb25zIGFuZCBzZWN0aW9uIGVudHJpZXMgKHRoaXMgaXMgc29tZXRpbWVzDQogIHJlZmVycmVkIHRvIGFzICdjYXNjYWRpbmcnKS4gIENvbnNlcXVlbnRseSwgZG93bnN0cmVhbSBjb25maWd1cmF0aW9uDQogIGZpbGVzIG5lZWQgb25seSBjb250YWluIHRob3NlIHNlY3Rpb25zIGFuZCBzZWN0aW9uIGVudHJpZXMgdGhhdCBuZWVkDQogIHRvIGJlIG92ZXJyaWRkZW4uDQoNClRJUDogV2hlbiBjcmVhdGluZyBjdXN0b20gY29uZmlndXJhdGlvbiBmaWxlcyB5b3Ugb25seSBuZWVkIHRvIGluY2x1ZGUNCnRoZSBzZWN0aW9ucyBhbmQgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uDQoNClRJUDogVGhlIGJlc3Qgd2F5IHRvIGxlYXJuIGFib3V0IGNvbmZpZ3VyYXRpb24gZmlsZXMgaXMgdG8gcmVhZCB0aGUNCmRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUgQXNjaWlEb2MgZGlzdHJpYnV0aW9uIGluDQpjb25qdW5jdGlvbiB3aXRoIGFzY2lpZG9jKDEpIG91dHB1dCBmaWxlcy4gWW91IGNhbiB2aWV3IGNvbmZpZ3VyYXRpb24NCmZpbGUgbG9hZCBzZXF1ZW5jZSBieSB0dXJuaW5nIG9uIHRoZSBhc2NpaWRvYygxKSBgLXZgIChgLS12ZXJib3NlYCkNCmNvbW1hbmQtbGluZSBvcHRpb24uDQoNCkFzY2lpRG9jIHJlc2VydmVzIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBuYW1lcyBmb3Igc3BlY2lmaWMgcHVycG9zZXM6DQoNCm1pc2NlbGxhbmVvdXM6Og0KICAgICAgICBDb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBkb24ndCBiZWxvbmcgYW55d2hlcmUgZWxzZS4NCmF0dHJpYnV0ZXM6Og0KICAgICAgICBBdHRyaWJ1dGUgbmFtZS92YWx1ZSBlbnRyaWVzLg0Kc3BlY2lhbGNoYXJhY3RlcnM6Og0KICAgICAgICBTcGVjaWFsIGNoYXJhY3RlcnMgcmVzZXJ2ZWQgYnkgdGhlIGJhY2tlbmQgbWFya3VwLg0KdGFnczo6DQogICAgICAgIEJhY2tlbmQgbWFya3VwIHRhZ3MuDQpxdW90ZXM6Og0KICAgICAgICBEZWZpbml0aW9ucyBmb3IgcXVvdGVkIGlubGluZSBjaGFyYWN0ZXIgZm9ybWF0dGluZy4NCnNwZWNpYWx3b3Jkczo6DQogICAgICAgIExpc3RzIG9mIHdvcmRzIGFuZCBwaHJhc2VzIHNpbmdsZWQgb3V0IGZvciBzcGVjaWFsIG1hcmt1cC4NCnJlcGxhY2VtZW50cywgcmVwbGFjZW1lbnRzMiwgcmVwbGFjZW1lbnRzMzo6DQogICAgICAgIEZpbmQgYW5kIHJlcGxhY2Ugc3Vic3RpdHV0aW9uIGRlZmluaXRpb25zLg0Kc3BlY2lhbHNlY3Rpb25zOjoNCiAgICAgICAgVXNlZCB0byBzaW5nbGUgb3V0IHNwZWNpYWwgc2VjdGlvbiBuYW1lcyBmb3Igc3BlY2lmaWMgbWFya3VwLg0KbWFjcm9zOjoNCiAgICAgICAgTWFjcm8gc3ludGF4IGRlZmluaXRpb25zLg0KdGl0bGVzOjoNCiAgICAgICAgSGVhZGluZywgc2VjdGlvbiBhbmQgYmxvY2sgdGl0bGUgZGVmaW5pdGlvbnMuDQpwYXJhZGVmLSo6Og0KICAgICAgICBQYXJhZ3JhcGggZWxlbWVudCBkZWZpbml0aW9ucy4NCmJsb2NrZGVmLSo6Og0KICAgICAgICBEZWxpbWl0ZWRCbG9jayBlbGVtZW50IGRlZmluaXRpb25zLg0KbGlzdGRlZi0qOjoNCiAgICAgICAgTGlzdCBlbGVtZW50IGRlZmluaXRpb25zLg0KbGlzdHRhZ3MtKjo6DQogICAgICAgIExpc3QgZWxlbWVudCB0YWcgZGVmaW5pdGlvbnMuDQp0YWJsZWRlZi0qOjoNCiAgICAgICAgVGFibGUgZWxlbWVudCBkZWZpbml0aW9ucy4NCnRhYmxldGFncy0qOjoNCiAgICAgICAgVGFibGUgZWxlbWVudCB0YWcgZGVmaW5pdGlvbnMuDQoNCkVhY2ggbGluZSBvZiB0ZXh0IGluIHRoZXNlIHNlY3Rpb25zIGlzIGEgJ3NlY3Rpb24gZW50cnknLiBTZWN0aW9uDQplbnRyaWVzIHNoYXJlIHRoZSBmb2xsb3dpbmcgc3ludGF4Og0KDQpuYW1lPXZhbHVlOjoNCiAgICAgICAgVGhlIGVudHJ5IHZhbHVlIGlzIHNldCB0byB2YWx1ZS4NCm5hbWU9OjoNCiAgICAgICAgVGhlIGVudHJ5IHZhbHVlIGlzIHNldCB0byBhIHplcm8gbGVuZ3RoIHN0cmluZy4NCm5hbWUhOjoNCiAgICAgICAgVGhlIGVudHJ5IGlzIHVuZGVmaW5lZCAoZGVsZXRlZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uKS4gVGhpcw0KICAgICAgICBzeW50YXggb25seSBhcHBsaWVzIHRvICdhdHRyaWJ1dGVzJyBhbmQgJ21pc2NlbGxhbmVvdXMnDQogICAgICAgIHNlY3Rpb25zLg0KDQouU2VjdGlvbiBlbnRyeSBiZWhhdmlvcg0KLSBBbGwgZXF1YWxzIGNoYXJhY3RlcnMgaW5zaWRlIHRoZSBgbmFtZWAgbXVzdCBiZSBlc2NhcGVkIHdpdGggYQ0KICBiYWNrc2xhc2ggY2hhcmFjdGVyLg0KLSBgbmFtZWAgYW5kIGB2YWx1ZWAgYXJlIHN0cmlwcGVkIG9mIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlLg0KLSBBdHRyaWJ1dGUgbmFtZXMsIHRhZyBlbnRyeSBuYW1lcyBhbmQgbWFya3VwIHRlbXBsYXRlIHNlY3Rpb24gbmFtZXMNCiAgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMsIHVuZGVyc2NvcmUgb3IgZGFzaCBjaGFyYWN0ZXJzLg0KICBOYW1lcyBzaG91bGQgbm90IGJlZ2luIG9yIGVuZCB3aXRoIGEgZGFzaC4NCi0gQSBibGFuayBjb25maWd1cmF0aW9uIGZpbGUgc2VjdGlvbiAob25lIHdpdGhvdXQgYW55IGVudHJpZXMpIGRlbGV0ZXMNCiAgYW55IHByZWNlZGluZyBzZWN0aW9uIHdpdGggdGhlIHNhbWUgbmFtZSAoYXBwbGllcyB0byBub24tbWFya3VwDQogIHRlbXBsYXRlIHNlY3Rpb25zKS4NCg0KDQpNaXNjZWxsYW5lb3VzIHNlY3Rpb24NCn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KVGhlIG9wdGlvbmFsIGBbbWlzY2VsbGFuZW91c11gIHNlY3Rpb24gc3BlY2lmaWVzIHRoZSBmb2xsb3dpbmcNCmBuYW1lPXZhbHVlYCBvcHRpb25zOg0KDQpuZXdsaW5lOjoNCiAgICAgICAgT3V0cHV0IGZpbGUgbGluZSB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXJzLiBDYW4gaW5jbHVkZSBhbnkNCiAgICAgICAgdmFsaWQgUHl0aG9uIHN0cmluZyBlc2NhcGUgc2VxdWVuY2VzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcw0KICAgICAgICBgXHJcbmAgKGNhcnJpYWdlIHJldHVybiwgbGluZSBmZWVkKS4gU2hvdWxkIG5vdCBiZSBxdW90ZWQgb3INCiAgICAgICAgY29udGFpbiBleHBsaWNpdCBzcGFjZXMgKHVzZSBgXHgyMGAgaW5zdGVhZCkuIEZvciBleGFtcGxlOg0KDQogICAgICAgICQgYXNjaWlkb2MgLWEgJ25ld2xpbmU9XG4nIC1iIGRvY2Jvb2sgbXlkb2MudHh0DQoNCm91dGZpbGVzdWZmaXg6Og0KICAgICAgICBUaGUgZGVmYXVsdCBleHRlbnNpb24gZm9yIHRoZSBvdXRwdXQgZmlsZSwgZm9yIGV4YW1wbGUNCiAgICAgICAgYG91dGZpbGVzdWZmaXg9Lmh0bWxgLiBEZWZhdWx0cyB0byBiYWNrZW5kIG5hbWUuDQp0YWJzaXplOjoNCiAgICAgICAgVGhlIG51bWJlciBvZiBzcGFjZXMgdG8gZXhwYW5kIHRhYiBjaGFyYWN0ZXJzLCBmb3IgZXhhbXBsZQ0KICAgICAgICBgdGFic2l6ZT00YC4gRGVmYXVsdHMgdG8gOC4gQSAndGFic2l6ZScgb2YgemVybyBzdXBwcmVzc2VzIHRhYg0KICAgICAgICBleHBhbnNpb24gKHVzZWZ1bCB3aGVuIHBpcGluZyBpbmNsdWRlZCBmaWxlcyB0aHJvdWdoIGJsb2NrDQogICAgICAgIGZpbHRlcnMpLiBJbmNsdWRlZCBmaWxlcyBjYW4gb3ZlcnJpZGUgdGhpcyBvcHRpb24gdXNpbmcgdGhlDQogICAgICAgICd0YWJzaXplJyBhdHRyaWJ1dGUuDQpwYWdld2lkdGgsIHBhZ2V1bml0czo6DQogICAgICAgIFRoZXNlIGdsb2JhbCB0YWJsZSByZWxhdGVkIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlDQogICAgICAgIDw8WDQsVGFibGUgQ29uZmlndXJhdGlvbiBGaWxlIERlZmluaXRpb25zPj4gc3ViLXNlY3Rpb24uDQoNCk5PVEU6IGBbbWlzY2VsbGFuZW91c11gIGNvbmZpZ3VyYXRpb24gZmlsZSBlbnRyaWVzIGNhbiBiZSBzZXQgdXNpbmcNCnRoZSBhc2NpaWRvYygxKSBgLWFgIChgLS1hdHRyaWJ1dGVgKSBjb21tYW5kLWxpbmUgb3B0aW9uLg0KDQpUaXRsZXMgc2VjdGlvbg0Kfn5+fn5+fn5+fn5+fn4NCnNlY3Rpb250aXRsZTo6DQogICAgICAgIFR3byBsaW5lIHNlY3Rpb24gdGl0bGUgcGF0dGVybi4gVGhlIGVudHJ5IHZhbHVlIGlzIGEgUHl0aG9uDQogICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBuYW1lZCBncm91cCAndGl0bGUnLg0KDQp1bmRlcmxpbmVzOjoNCiAgICAgICAgQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBkb2N1bWVudCBhbmQgc2VjdGlvbiB0aXRsZSB1bmRlcmxpbmUNCiAgICAgICAgY2hhcmFjdGVyIHBhaXJzIHN0YXJ0aW5nIHdpdGggdGhlIHNlY3Rpb24gbGV2ZWwgMCBhbmQgZW5kaW5nDQogICAgICAgIHdpdGggc2VjdGlvbiBsZXZlbCA0IHVuZGVybGluZS4gVGhlIGRlZmF1bHQgc2V0dGluZyBpczoNCg0KICAgICAgICB1bmRlcmxpbmVzPSI9PSIsIi0tIiwifn4iLCJeXiIsIisrIg0KDQpzZWN0MC4uLnNlY3Q0OjoNCiAgICAgICAgT25lIGxpbmUgc2VjdGlvbiB0aXRsZSBwYXR0ZXJucy4gVGhlIGVudHJ5IHZhbHVlIGlzIGEgUHl0aG9uDQogICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb250YWluaW5nIHRoZSBuYW1lZCBncm91cCAndGl0bGUnLg0KDQpibG9ja3RpdGxlOjoNCiAgICAgICAgPDxYNDIsQmxvY2tUaXRsZSBlbGVtZW50Pj4gcGF0dGVybi4gIFRoZSBlbnRyeSB2YWx1ZSBpcyBhDQogICAgICAgIFB5dGhvbiByZWd1bGFyIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgbmFtZWQgZ3JvdXAgJ3RpdGxlJy4NCg0Kc3Viczo6DQogICAgICAgIEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2Ygc3Vic3RpdHV0aW9ucyB0aGF0IGFyZSBwZXJmb3JtZWQgb24NCiAgICAgICAgdGhlIGRvY3VtZW50IGhlYWRlciBhbmQgc2VjdGlvbiB0aXRsZXMuIERlZmF1bHRzIHRvICdub3JtYWwnDQogICAgICAgIHN1YnN0aXR1dGlvbi4NCg0KVGFncyBzZWN0aW9uDQp+fn5+fn5+fn5+fn4NClRoZSBgW3RhZ3NdYCBzZWN0aW9uIGNvbnRhaW5zIGJhY2tlbmQgdGFnIGRlZmluaXRpb25zIChvbmUgcGVyDQpsaW5lKS4gVGFncyBhcmUgdXNlZCB0byB0cmFuc2xhdGUgQXNjaWlEb2MgZWxlbWVudHMgdG8gYmFja2VuZA0KbWFya3VwLg0KDQpBbiBBc2NpaURvYyB0YWcgZGVmaW5pdGlvbiBpcyBmb3JtYXR0ZWQgbGlrZQ0KYDx0YWduYW1lPj08c3RhcnR0YWc+fDxlbmR0YWc+YC4gRm9yIGV4YW1wbGU6DQoNCiAgZW1waGFzaXM9PGVtPnw8L2VtPg0KDQpJbiB0aGlzIGV4YW1wbGUgYXNjaWlkb2MoMSkgcmVwbGFjZXMgdGhlIHwgY2hhcmFjdGVyIHdpdGggdGhlDQplbXBoYXNpemVkIHRleHQgZnJvbSB0aGUgQXNjaWlEb2MgaW5wdXQgZmlsZSBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8NCnRoZSBvdXRwdXQgZmlsZS4NCg0KVXNlIHRoZSBge2JydmJhcn1gIGF0dHJpYnV0ZSByZWZlcmVuY2UgaWYgeW91IG5lZWQgdG8gaW5jbHVkZSBhIHwgcGlwZQ0KY2hhcmFjdGVyIGluc2lkZSB0YWcgdGV4dC4NCg0KQXR0cmlidXRlcyBzZWN0aW9uDQp+fn5+fn5+fn5+fn5+fn5+fn4NClRoZSBvcHRpb25hbCBgW2F0dHJpYnV0ZXNdYCBzZWN0aW9uIGNvbnRhaW5zIHByZWRlZmluZWQgYXR0cmlidXRlcy4NCg0KSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSByZXF1aXJlcyBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcyB0aGVuIHRoZQ0KdGV4dCB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiBxdW90YXRpb24gbWFyayAoIikgY2hhcmFjdGVycy4NCg0KVG8gZGVsZXRlIGEgYXR0cmlidXRlIGluc2VydCBhIGBuYW1lIWAgZW50cnkgaW4gYSBkb3duc3RyZWFtDQpjb25maWd1cmF0aW9uIGZpbGUgb3IgdXNlIHRoZSBhc2NpaWRvYygxKSBgLS1hdHRyaWJ1dGUgbmFtZSFgDQpjb21tYW5kLWxpbmUgb3B0aW9uIChhbiBhdHRyaWJ1dGUgbmFtZSBzdWZmaXhlZCB3aXRoIGEgYCFgIGNoYXJhY3Rlcg0KZGVsZXRlcyB0aGUgYXR0cmlidXRlKQ0KDQpTcGVjaWFsIENoYXJhY3RlcnMgc2VjdGlvbg0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NClRoZSBgW3NwZWNpYWxjaGFyYWN0ZXJzXWAgc2VjdGlvbiBzcGVjaWZpZXMgaG93IHRvIGVzY2FwZSBjaGFyYWN0ZXJzDQpyZXNlcnZlZCBieSB0aGUgYmFja2VuZCBtYXJrdXAuIEVhY2ggdHJhbnNsYXRpb24gaXMgc3BlY2lmaWVkIG9uIGENCnNpbmdsZSBsaW5lIGZvcm1hdHRlZCBsaWtlOg0KDQogIDxzcGVjaWFsX2NoYXJhY3Rlcj49PHRyYW5zbGF0ZWRfY2hhcmFjdGVycz4NCg0KU3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBub3JtYWxseSBjb25maW5lZCB0byB0aG9zZSB0aGF0IHJlc29sdmUNCm1hcmt1cCBhbWJpZ3VpdHkgKGluIHRoZSBjYXNlIG9mIEhUTUwgYW5kIFhNTCBtYXJrdXBzIHRoZSBhbXBlcnNhbmQsDQpsZXNzIHRoYW4gYW5kIGdyZWF0ZXIgdGhhbiBjaGFyYWN0ZXJzKS4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjYXVzZXMNCmFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgYDxgIGNoYXJhY3RlciB0byBiZSByZXBsYWNlZCBieSBgJmx0O2AuDQoNCiAgPD0mbHQ7DQoNClF1b3RlZCBUZXh0IHNlY3Rpb24NCn5+fn5+fn5+fn5+fn5+fn5+fn4NClF1b3RpbmcgaXMgdXNlZCBwcmltYXJpbHkgZm9yIHRleHQgZm9ybWF0dGluZy4gIFRoZSBgW3F1b3Rlc11gIHNlY3Rpb24NCmRlZmluZXMgQXNjaWlEb2MgcXVvdGluZyBjaGFyYWN0ZXJzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGJhY2tlbmQNCm1hcmt1cCB0YWdzLiAgRWFjaCBzZWN0aW9uIGVudHJ5IHZhbHVlIGlzIHRoZSBuYW1lIG9mIGEgb2YgYSBgW3RhZ3NdYA0Kc2VjdGlvbiBlbnRyeS4gVGhlIGVudHJ5IG5hbWUgaXMgdGhlIGNoYXJhY3RlciAob3IgY2hhcmFjdGVycykgdGhhdA0KcXVvdGUgdGhlIHRleHQuICBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFyZSB0YWtlbiBmcm9tIEFzY2lpRG9jDQpjb25maWd1cmF0aW9uIGZpbGVzOg0KDQogIFtxdW90ZXNdDQogIF89ZW1waGFzaXMNCg0KICBbdGFnc10NCiAgZW1waGFzaXM9PGVtPnw8L2VtPg0KDQpZb3UgY2FuIHNwZWNpZnkgdGhlIGxlZnQgYW5kIHJpZ2h0IHF1b3RlIHN0cmluZ3Mgc2VwYXJhdGVseSBieQ0Kc2VwYXJhdGluZyB0aGVtIHdpdGggYSB8IGNoYXJhY3RlciwgZm9yIGV4YW1wbGU6DQoNCiAgYGB8Jyc9cXVvdGVkDQoNCk9taXR0aW5nIHRoZSB0YWcgd2lsbCBkaXNhYmxlIHF1b3RpbmcsIGZvciBleGFtcGxlLCBpZiB5b3UgZG9uJ3Qgd2FudA0Kc3VwZXJzY3JpcHRzIG9yIHN1YnNjcmlwdHMgcHV0IHRoZSBmb2xsb3dpbmcgaW4gYSBjdXN0b20gY29uZmlndXJhdGlvbg0KZmlsZSBvciBlZGl0IHRoZSBnbG9iYWwgYGFzY2lpZG9jLmNvbmZgIGNvbmZpZ3VyYXRpb24gZmlsZToNCg0KICBbcXVvdGVzXQ0KICBePQ0KICB+PQ0KDQo8PFg1MixVbmNvbnN0cmFpbmVkIHF1b3Rlcz4+IGFyZSBkaWZmZXJlbnRpYXRlZCBmcm9tIGNvbnN0cmFpbmVkDQpxdW90ZXMgYnkgcHJlZml4aW5nIHRoZSB0YWcgbmFtZSB3aXRoIGEgaGFzaCBjaGFyYWN0ZXIsIGZvciBleGFtcGxlOg0KDQogIF9fPSNlbXBoYXNpcw0KDQouUXVvdGVkIHRleHQgYmVoYXZpb3INCi0gUXVvdGUgY2hhcmFjdGVycyBtdXN0IGJlIG5vbi1hbHBoYW51bWVyaWMuDQotIFRvIG1pbmltaXplIHF1b3RpbmcgYW1iaWd1aXR5IHRyeSBub3QgdG8gdXNlIHRoZSBzYW1lIHF1b3RlDQogIGNoYXJhY3RlcnMgaW4gZGlmZmVyZW50IHF1b3RlIHR5cGVzLg0KDQpTcGVjaWFsIFdvcmRzIHNlY3Rpb24NCn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KVGhlIGBbc3BlY2lhbHdvcmRzXWAgc2VjdGlvbiBpcyB1c2VkIHRvIHNpbmdsZSBvdXQgd29yZHMgYW5kIHBocmFzZXMNCnRoYXQgeW91IHdhbnQgdG8gY29uc2lzdGVudGx5IGZvcm1hdCBpbiBzb21lIHdheSB0aHJvdWdob3V0IHlvdXINCmRvY3VtZW50IHdpdGhvdXQgaGF2aW5nIHRvIHJlcGVhdGVkbHkgc3BlY2lmeSB0aGUgbWFya3VwLiBUaGUgbmFtZSBvZg0KZWFjaCBlbnRyeSBjb3JyZXNwb25kcyB0byBhIG1hcmt1cCB0ZW1wbGF0ZSBzZWN0aW9uIGFuZCB0aGUgZW50cnkNCnZhbHVlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiB3b3JkcyBhbmQgcGhyYXNlcyB0byBiZSBtYXJrZWQgdXAuIEZvcg0KZXhhbXBsZToNCg0KICBbc3BlY2lhbHdvcmRzXQ0KICBzdHJvbmd3b3Jkcz1OT1RFIElNUE9SVEFOVA0KDQogIFtzdHJvbmd3b3Jkc10NCiAgPHN0cm9uZz57d29yZHN9PC9zdHJvbmc+DQoNClRoZSBleGFtcGxlcyBzcGVjaWZpZXMgdGhhdCBhbnkgb2NjdXJyZW5jZSBvZiBgTk9URWAgb3IgYElNUE9SVEFOVGANCnNob3VsZCBhcHBlYXIgaW4gYSBib2xkIGZvbnQuDQoNCldvcmRzIGFuZCB3b3JkIHBocmFzZXMgYXJlIHRyZWF0ZWQgYXMgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnM6IGZvcg0KZXhhbXBsZSwgdGhlIHdvcmQgYF5OT1RFYCB3b3VsZCBvbmx5IG1hdGNoIGBOT1RFYCBpZiBhcHBlYXJlZCBhdA0KdGhlIHN0YXJ0IG9mIGEgbGluZS4NCg0KQXNjaWlEb2MgY29tZXMgd2l0aCB0aHJlZSBidWlsdC1pbiBTcGVjaWFsIFdvcmQgdHlwZXM6DQonZW1waGFzaXplZHdvcmRzJywgJ21vbm9zcGFjZWR3b3JkcycgYW5kICdzdHJvbmd3b3JkcycsIGVhY2ggaGFzIGENCmNvcnJlc3BvbmRpbmcgKGJhY2tlbmQgc3BlY2lmaWMpIG1hcmt1cCB0ZW1wbGF0ZSBzZWN0aW9uLiBFZGl0IHRoZQ0KY29uZmlndXJhdGlvbiBmaWxlcyB0byBjdXN0b21pemUgZXhpc3RpbmcgU3BlY2lhbCBXb3JkcyBhbmQgdG8gYWRkIG5ldw0Kb25lcy4NCg0KLlNwZWNpYWwgd29yZCBiZWhhdmlvcg0KLSBXb3JkIGxpc3QgZW50cmllcyBtdXN0IGJlIHNlcGFyYXRlZCBieSBzcGFjZSBjaGFyYWN0ZXJzLg0KLSBXb3JkIGxpc3QgZW50cmllcyB3aXRoIGVtYmVkZGVkIHNwYWNlcyBzaG91bGQgYmUgZW5jbG9zZWQgaW4gcXVvdGF0aW9uICgiKQ0KICBjaGFyYWN0ZXJzLg0KLSBBIGBbc3BlY2lhbHdvcmRzXWAgc2VjdGlvbiBlbnRyeSBvZiB0aGUgZm9ybQ0KICArbmFtZT13b3JkMXtuYnNwfVt3b3JkMi4uLl0rIGFkZHMgd29yZHMgdG8gZXhpc3RpbmcgYG5hbWVgIGVudHJpZXMuDQotIEEgYFtzcGVjaWFsd29yZHNdYCBzZWN0aW9uIGVudHJ5IG9mIHRoZSBmb3JtIGBuYW1lYCB1bmRlZmluZXMNCiAgKGRlbGV0ZXMpIGFsbCBleGlzdGluZyBgbmFtZWAgd29yZHMuDQotIFNpbmNlIHdvcmQgbGlzdCBlbnRyaWVzIGFyZSBwcm9jZXNzZWQgYXMgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMNCiAgeW91IG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBlc2NhcGUgcmVndWxhciBleHByZXNzaW9uIHNwZWNpYWwNCiAgY2hhcmFjdGVycy4NCi0gQnkgZGVmYXVsdCBTcGVjaWFsIFdvcmRzIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgSW5saW5lIE1hY3JvcywgdGhpcw0KICBtYXkgbGVhZCB0byB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXMuIEZvciBleGFtcGxlIHRoZSBzcGVjaWFsIHdvcmQNCiAgYGZvb2JhcmAgd291bGQgYmUgZXhwYW5kZWQgaW5zaWRlIHRoZSBtYWNybyBjYWxsDQogIGBodHRwOi8vd3d3LmZvb2Jhci5jb21bXWAuICBBIHBvc3NpYmxlIHNvbHV0aW9uIGlzIHRvIGVtcGhhc2l6ZQ0KICB3aG9sZSB3b3JkcyBvbmx5IGJ5IGRlZmluaW5nIHRoZSB3b3JkIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbg0KICBjaGFyYWN0ZXJzLCBmb3IgZXhhbXBsZSBgXGJmb29iYXJcYmAuDQotIElmIHRoZSBmaXJzdCBtYXRjaGVkIGNoYXJhY3RlciBvZiBhIHNwZWNpYWwgd29yZCBpcyBhIGJhY2tzbGFzaCB0aGVuDQogIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgb3V0cHV0IHdpdGhvdXQgbWFya3VwIGkuZS4gdGhlDQogIGJhY2tzbGFzaCBjYW4gYmUgdXNlZCB0byBlc2NhcGUgc3BlY2lhbCB3b3JkIG1hcmt1cC4gIEZvciBleGFtcGxlDQogIHRoZSBzcGVjaWFsIHdvcmQgYFxcP1xiW1R0XWVuXGJgIHdpbGwgbWFyayB1cCB0aGUgd29yZHMgYFRlbmAgYW5kDQogIGB0ZW5gIG9ubHkgaWYgdGhleSBhcmUgbm90IHByZWNlZGVkIGJ5IGEgYmFja3NsYXNoLg0KDQpbW1gxMF1dDQpSZXBsYWNlbWVudHMgc2VjdGlvbg0Kfn5+fn5+fn5+fn5+fn5+fn5+fn4NCmBbcmVwbGFjZW1lbnRzXWAsIGBbcmVwbGFjZW1lbnRzMl1gIGFuZCBgW3JlcGxhY2VtZW50czNdYA0KY29uZmlndXJhdGlvbiBmaWxlIGVudHJpZXMgc3BlY2lmeSBmaW5kIGFuZCByZXBsYWNlIHRleHQgYW5kIGFyZQ0KZm9ybWF0dGVkIGxpa2U6DQoNCiAgPGZpbmRfcGF0dGVybj49PHJlcGxhY2VtZW50X3RleHQ+DQoNClRoZSBmaW5kIHRleHQgY2FuIGJlIGEgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbjsgdGhlIHJlcGxhY2UgdGV4dCBjYW4NCmNvbnRhaW4gUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbiBncm91cCByZWZlcmVuY2VzLg0KDQpVc2UgUmVwbGFjZW1lbnQgc2hvcnRjdXRzIGZvciBvZnRlbiB1c2VkIG1hY3JvIHJlZmVyZW5jZXMsIGZvcg0KZXhhbXBsZSAodGhlIHNlY29uZCByZXBsYWNlbWVudCBhbGxvd3MgdXMgdG8gYmFja3NsYXNoIGVzY2FwZSB0aGUNCm1hY3JvIG5hbWUpOg0KDQogIE5FVyE9aW1hZ2U6Li9pbWFnZXMvc21hbGxuZXcucG5nW05ldyFdDQogIFxcTkVXIT1ORVchDQoNClRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGhyZWUgcmVwbGFjZW1lbnQgdHlwZXMgaXMgaG93IHRoZXkNCmFyZSBhcHBsaWVkLiBCeSBkZWZhdWx0ICdyZXBsYWNlbWVudHMnIGFuZCAncmVwbGFjZW1lbnQyJyBhcmUgYXBwbGllZA0KaW4gPDxYMTAyLG5vcm1hbD4+IHN1YnN0aXR1dGlvbiBjb250ZXh0cyB3aGVyZWFzICdyZXBsYWNlbWVudHMzJyBuZWVkcw0KdG8gYmUgY29uZmlndXJlZCBleHBsaWNpdGx5IGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGluIGJhY2tlbmQNCmNvbmZpZ3VyYXRpb24gZmlsZXMuDQoNCi5SZXBsYWNlbWVudCBiZWhhdmlvcg0KLSBUaGUgYnVpbHQtaW4gcmVwbGFjZW1lbnRzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guDQotIElmIHRoZSBmaW5kIG9yIHJlcGxhY2UgdGV4dCBoYXMgbGVhZGluZyBvciB0cmFpbGluZyBzcGFjZXMgdGhlbiB0aGUNCiAgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gcXVvdGF0aW9uICgiKSBjaGFyYWN0ZXJzLg0KLSBTaW5jZSB0aGUgZmluZCB0ZXh0IGlzIHByb2Nlc3NlZCBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB5b3UgbmVlZCB0bw0KICBiZSBjYXJlZnVsIHRvIGVzY2FwZSByZWd1bGFyIGV4cHJlc3Npb24gc3BlY2lhbCBjaGFyYWN0ZXJzLg0KLSBSZXBsYWNlbWVudHMgYXJlIHBlcmZvcm1lZCBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUNCiAgY29uZmlndXJhdGlvbiBmaWxlIHJlcGxhY2VtZW50cyBzZWN0aW9uLg0KDQpNYXJrdXAgVGVtcGxhdGUgU2VjdGlvbnMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KTWFya3VwIHRlbXBsYXRlIHNlY3Rpb25zIHN1cHBseSBiYWNrZW5kIG1hcmt1cCBmb3IgdHJhbnNsYXRpbmcNCkFzY2lpRG9jIGVsZW1lbnRzLiAgU2luY2UgdGhlIHRleHQgaXMgbm9ybWFsbHkgYmFja2VuZCBkZXBlbmRlbnQNCnlvdSdsbCBmaW5kIHRoZXNlIHNlY3Rpb25zIGluIHRoZSBiYWNrZW5kIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24NCmZpbGVzLiBUZW1wbGF0ZSBzZWN0aW9ucyBkaWZmZXIgZnJvbSBvdGhlciBzZWN0aW9ucyBpbiB0aGF0IHRoZXkNCmNvbnRhaW4gYSBzaW5nbGUgYmxvY2sgb2YgdGV4dCBpbnN0ZWFkIG9mIHBlciBsaW5lICduYW1lPXZhbHVlJw0KZW50cmllcy4gQSBtYXJrdXAgdGVtcGxhdGUgc2VjdGlvbiBib2R5IGNhbiBjb250YWluOg0KDQotIEF0dHJpYnV0ZSByZWZlcmVuY2VzDQotIFN5c3RlbSBtYWNybyBjYWxscy4NCi0gQSBkb2N1bWVudCBjb250ZW50IHBsYWNlaG9sZGVyDQoNClRoZSBkb2N1bWVudCBjb250ZW50IHBsYWNlaG9sZGVyIGlzIGEgc2luZ2xlIHwgY2hhcmFjdGVyIGFuZCBpcw0KcmVwbGFjZWQgYnkgdGV4dCBmcm9tIHRoZSBzb3VyY2UgZWxlbWVudC4gIFVzZSB0aGUgYHticnZiYXJ9YA0KYXR0cmlidXRlIHJlZmVyZW5jZSBpZiB5b3UgbmVlZCBhIGxpdGVyYWwgfCBjaGFyYWN0ZXIgaW4gdGhlIHRlbXBsYXRlLg0KDQpbW1gyN11dDQpDb25maWd1cmF0aW9uIGZpbGUgbmFtZXMsIHByZWNlZGVuY2UgYW5kIGxvY2F0aW9ucw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCkNvbmZpZ3VyYXRpb24gZmlsZXMgaGF2ZSBhIGAuY29uZmAgZmlsZSBuYW1lIGV4dGVuc2lvbjsgdGhleSBhcmUNCmxvYWRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOg0KDQoxLiBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGFzY2lpZG9jIGV4ZWN1dGFibGUuDQoyLiBJZiB0aGVyZSBpcyBubyBgYXNjaWlkb2MuY29uZmAgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlDQogICBhc2NpaWRvYyBleGVjdXRhYmxlIHRoZW4gbG9hZCBmcm9tIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbg0KICAgZGlyZWN0b3J5IChub3JtYWxseSBgL2V0Yy9hc2NpaWRvY2Agb3IgYC91c3IvbG9jYWwvZXRjL2FzY2lpZG9jYCkNCiAgIGkuZS4gdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIGZpbGVzIGRpcmVjdG9yeSBpcyBza2lwcGVkIGlmDQogICBBc2NpaURvYyBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzDQogICB0aGUgYXNjaWlkb2MgZXhlY3V0YWJsZS4gVGhpcyBhbGxvd3MgYm90aCBhIHN5c3RlbSB3aWRlIGNvcHkgYW5kDQogICBtdWx0aXBsZSBsb2NhbCBjb3BpZXMgb2YgQXNjaWlEb2MgdG8gY29leGlzdCBvbiB0aGUgc2FtZSBob3N0IFBDLg0KMy4gVGhlIHVzZXIncyBgJEhPTUUvLmFzY2lpZG9jYCBkaXJlY3RvcnkgKGlmIGl0IGV4aXN0cykuDQo0LiBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIEFzY2lpRG9jIHNvdXJjZSBmaWxlLg0KNS4gRXhwbGljaXQgY29uZmlndXJhdGlvbiBmaWxlcyBzcGVjaWZpZWQgdXNpbmc6DQogICAtIFRoZSBgY29uZi1maWxlc2AgYXR0cmlidXRlIChvbmUgb3IgbW9yZSBmaWxlIG5hbWVzIHNlcGFyYXRlZCBieSBhDQogICAgIGB8YCBjaGFyYWN0ZXIpLiBUaGVzZSBmaWxlcyBhcmUgbG9hZGVkIGluIHRoZSBvcmRlciB0aGV5IGFyZQ0KICAgICBzcGVjaWZpZWQgYW5kIHByaW9yIHRvIGZpbGVzIHNwZWNpZmllZCB1c2luZyB0aGUgYC0tY29uZi1maWxlYA0KICAgICBjb21tYW5kLWxpbmUgb3B0aW9uLg0KICAgLSBUaGUgYXNjaWlkb2MoMSkgYC0tY29uZi1maWxlYCkgY29tbWFuZC1saW5lIG9wdGlvbi4gIFRoZQ0KICAgICBgLS1jb25mLWZpbGVgIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLCBpbiB3aGljaA0KICAgICBjYXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2lsbCBiZSBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhleQ0KICAgICBhcHBlYXIgb24gdGhlIGNvbW1hbmQtbGluZS4NCjYuIDw8WDEwMCxCYWNrZW5kIHBsdWdpbj4+IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGxvYWRlZCBmcm9tDQogICBzdWJkaXJlY3RvcmllcyBuYW1lZCBsaWtlIGBiYWNrZW5kcy88YmFja2VuZD5gIGluIGxvY2F0aW9ucyAxLCAyDQogICBhbmQgMy4NCjcuIDw8WDU5LEZpbHRlcj4+IGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIGxvYWRlZCBmcm9tIHN1YmRpcmVjdG9yaWVzDQogICBuYW1lZCBsaWtlIGBmaWx0ZXJzLzxmaWx0ZXI+YCBpbiBsb2NhdGlvbnMgMSwgMiBhbmQgMy4NCg0KQ29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIHRoZSBhYm92ZSBsb2NhdGlvbnMgYXJlIGxvYWRlZCBpbiB0aGUNCmZvbGxvd2luZyBvcmRlcjoNCg0KLSBUaGUgYFthdHRyaWJ1dGVzXWAgc2VjdGlvbiBvbmx5IGZyb206DQogICogYGFzY2lpZG9jLmNvbmZgIGluIGxvY2F0aW9uIDMNCiAgKiBGaWxlcyBmcm9tIGxvY2F0aW9uIDUuDQorDQpUaGlzIGZpcnN0IHBhc3MgbWFrZXMgbG9jYWxseSBzZXQgYXR0cmlidXRlcyBhdmFpbGFibGUgaW4gdGhlIGdsb2JhbA0KYGFzY2lpZG9jLmNvbmZgIGZpbGUuDQoNCi0gYGFzY2lpZG9jLmNvbmZgIGZyb20gbG9jYXRpb25zIDEsIDIsIDMuDQotICdhdHRyaWJ1dGVzJywgJ3RpdGxlcycgYW5kICdzcGVjaWFsY2hhcmFjdGVycycgc2VjdGlvbnMgZnJvbSB0aGUNCiAgYGFzY2lpZG9jLmNvbmZgIGluIGxvY2F0aW9uIDQuDQotIFRoZSBkb2N1bWVudCBoZWFkZXIgaXMgcGFyc2VkIGF0IHRoaXMgcG9pbnQgYW5kIHdlIGNhbiBhc3N1bWUgdGhlDQogICdiYWNrZW5kJyBhbmQgJ2RvY3R5cGUnIGhhdmUgbm93IGJlZW4gZGVmaW5lZC4NCi0gQmFja2VuZCBwbHVnaW4gYDxiYWNrZW5kPi5jb25mYCBhbmQgYDxiYWNrZW5kPi08ZG9jdHlwZT4uY29uZmAgZmlsZXMNCiAgZnJvbSBsb2NhdGlvbnMgNi4gIElmIGEgYmFja2VuZCBwbHVnaW4gaXMgbm90IGZvdW5kIHRoZW4gdHJ5DQogIGxvY2F0aW9ucyAxLCAyIGFuZCAzIGZvciBgPGJhY2tlbmQ+LmNvbmZgIGFuZA0KICBgPGJhY2tlbmQ+LTxkb2N0eXBlPi5jb25mYCBiYWNrZW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuDQotIEZpbHRlciBjb25mIGZpbGVzIGZyb20gbG9jYXRpb25zIDcuDQotIGBsYW5nLTxsYW5nPi5jb25mYCBmcm9tIGxvY2F0aW9ucyAxLCAyLCAzLg0KLSBgYXNjaWlkb2MuY29uZmAgZnJvbSBsb2NhdGlvbiA0Lg0KLSBgPGJhY2tlbmQ+LmNvbmZgIGFuZCBgPGJhY2tlbmQ+LTxkb2N0eXBlPi5jb25mYCBmcm9tIGxvY2F0aW9uIDQuDQotIEZpbHRlciBjb25mIGZpbGVzIGZyb20gbG9jYXRpb24gNC4NCi0gYDxkb2NmaWxlPi5jb25mYCBhbmQgYDxkb2NmaWxlPi08YmFja2VuZD4uY29uZmAgZnJvbSBsb2NhdGlvbiA0Lg0KLSBDb25maWd1cmF0aW9uIGZpbGVzIGZyb20gbG9jYXRpb24gNS4NCg0KV2hlcmU6DQoNCi0gYDxiYWNrZW5kPmAgYW5kIGA8ZG9jdHlwZT5gIGFyZSB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHRoZSBhc2NpaWRvYygxKQ0KICBgLWJgIChgLS1iYWNrZW5kYCkgYW5kIGAtZGAgKGAtLWRvY3R5cGVgKSBjb21tYW5kLWxpbmUgb3B0aW9ucy4NCi0gYDxpbmZpbGU+YCBpcyB0aGUgcGF0aCBuYW1lIG9mIHRoZSBBc2NpaURvYyBpbnB1dCBmaWxlIHdpdGhvdXQgdGhlDQogIGZpbGUgbmFtZSBleHRlbnNpb24uDQotIGA8bGFuZz5gIGlzIGEgdHdvIGxldHRlciBjb3VudHJ5IGNvZGUgc2V0IGJ5IHRoZSB0aGUgQXNjaWlEb2MgJ2xhbmcnDQogIGF0dHJpYnV0ZS4NCg0KW05PVEVdDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClRoZSBiYWNrZW5kIGFuZCBsYW5ndWFnZSBnbG9iYWwgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbG9hZGVkICphZnRlcioNCnRoZSBoZWFkZXIgaGFzIGJlZW4gcGFyc2VkLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc2V0IG1vc3QNCmF0dHJpYnV0ZXMgaW4gdGhlIGRvY3VtZW50IGhlYWRlci4gSGVyZSdzIGFuIGV4YW1wbGUgaGVhZGVyOg0KDQogIExpZmUncyBNeXN0ZXJpZXMNCiAgPT09PT09PT09PT09PT09PQ0KICA6YXV0aG9yOiBIdSBOb3NlDQogIDpkb2N0eXBlOiBib29rDQogIDp0b2M6DQogIDppY29uczoNCiAgOmRhdGEtdXJpOg0KICA6bGFuZzogZW4NCiAgOmVuY29kaW5nOiBpc28tODg1OS0xDQoNCkF0dHJpYnV0ZXMgc2V0IGluIHRoZSBkb2N1bWVudCBoZWFkZXIgdGFrZSBwcmVjZWRlbmNlIG92ZXINCmNvbmZpZ3VyYXRpb24gZmlsZSBhdHRyaWJ1dGVzLg0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KVElQOiBVc2UgdGhlIGFzY2lpZG9jKDEpIGAtdmAgKGAtLXZlcmJvc2VgKSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIHNlZQ0Kd2hpY2ggY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbG9hZGVkIGFuZCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUNCmxvYWRlZC4NCg0KDQpEb2N1bWVudCBBdHRyaWJ1dGVzDQotLS0tLS0tLS0tLS0tLS0tLS0tDQpBIGRvY3VtZW50IGF0dHJpYnV0ZSBpcyBjb21wcmlzZWQgb2YgYSAnbmFtZScgYW5kIGEgdGV4dHVhbCAndmFsdWUnDQphbmQgaXMgdXNlZCBmb3IgdGV4dHVhbCBzdWJzdGl0dXRpb24gaW4gQXNjaWlEb2MgZG9jdW1lbnRzIGFuZA0KY29uZmlndXJhdGlvbiBmaWxlcy4gQW4gYXR0cmlidXRlIHJlZmVyZW5jZSAoYW4gYXR0cmlidXRlIG5hbWUNCmVuY2xvc2VkIGluIGJyYWNlcykgaXMgcmVwbGFjZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlDQp2YWx1ZS4gQXR0cmlidXRlIG5hbWVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlIGFuZCBjYW4gb25seSBjb250YWluDQphbHBoYW51bWVyaWMsIGRhc2ggYW5kIHVuZGVyc2NvcmUgY2hhcmFjdGVycy4NCg0KVGhlcmUgYXJlIGZvdXIgc291cmNlcyBvZiBkb2N1bWVudCBhdHRyaWJ1dGVzIChmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0DQpwcmVjZWRlbmNlKToNCg0KLSBDb21tYW5kLWxpbmUgYXR0cmlidXRlcy4NCi0gQXR0cmlidXRlRW50cnksIEF0dHJpYnV0ZUxpc3QsIE1hY3JvIGFuZCBCbG9ja0lkIGVsZW1lbnRzLg0KLSBDb25maWd1cmF0aW9uIGZpbGUgYFthdHRyaWJ1dGVzXWAgc2VjdGlvbnMuDQotIEludHJpbnNpYyBhdHRyaWJ1dGVzLg0KDQpXaXRoaW4gZWFjaCBvZiB0aGVzZSBkaXZpc2lvbnMgdGhlIGxhc3QgcHJvY2Vzc2VkIGVudHJ5IHRha2VzDQpwcmVjZWRlbmNlLg0KDQpOT1RFOiBJZiBhbiBhdHRyaWJ1dGUgaXMgbm90IGRlZmluZWQgdGhlbiB0aGUgbGluZSBjb250YWluaW5nIHRoZQ0KYXR0cmlidXRlIHJlZmVyZW5jZSBpcyBkcm9wcGVkLiBUaGlzIHByb3BlcnR5IGlzIHVzZWQgZXh0ZW5zaXZlbHkgaW4NCkFzY2lpRG9jIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZmFjaWxpdGF0ZSBjb25kaXRpb25hbCBtYXJrdXANCmdlbmVyYXRpb24uDQoNCg0KW1tYMThdXQ0KQXR0cmlidXRlIEVudHJpZXMNCi0tLS0tLS0tLS0tLS0tLS0tDQpUaGUgYEF0dHJpYnV0ZUVudHJ5YCBibG9jayBlbGVtZW50IGFsbG93cyBkb2N1bWVudCBhdHRyaWJ1dGVzIHRvIGJlDQphc3NpZ25lZCB3aXRoaW4gYW4gQXNjaWlEb2MgZG9jdW1lbnQuIEF0dHJpYnV0ZSBlbnRyaWVzIGFyZSBhZGRlZCB0bw0KdGhlIGdsb2JhbCBkb2N1bWVudCBhdHRyaWJ1dGVzIGRpY3Rpb25hcnkuIFRoZSBhdHRyaWJ1dGUgbmFtZS92YWx1ZQ0Kc3ludGF4IGlzIGEgc2luZ2xlIGxpbmUgbGlrZToNCg0KICA6PG5hbWU+OiA8dmFsdWU+DQoNCkZvciBleGFtcGxlOg0KDQogIDpBdXRob3IgSW5pdGlhbHM6IEpCDQoNClRoaXMgd2lsbCBzZXQgYW4gYXR0cmlidXRlIHJlZmVyZW5jZSBge2F1dGhvcmluaXRpYWxzfWAgdG8gdGhlIHZhbHVlDQonSkInIGluIHRoZSBjdXJyZW50IGRvY3VtZW50Lg0KDQpUbyBkZWxldGUgKHVuZGVmaW5lKSBhbiBhdHRyaWJ1dGUgdXNlIHRoZSBmb2xsb3dpbmcgc3ludGF4Og0KDQogIDo8bmFtZT4hOg0KDQouQXR0cmlidXRlRW50cnkgYmVoYXZpb3INCi0gVGhlIGF0dHJpYnV0ZSBlbnRyeSBsaW5lIGJlZ2lucyB3aXRoIGNvbG9uIC0tIG5vIHdoaXRlIHNwYWNlIGFsbG93ZWQNCiAgaW4gbGVmdCBtYXJnaW4uDQotIEFzY2lpRG9jIGNvbnZlcnRzIHRoZSBgPG5hbWU+YCB0byBhIGxlZ2FsIGF0dHJpYnV0ZSBuYW1lIChsb3dlcg0KICBjYXNlLCBhbHBoYW51bWVyaWMsIGRhc2ggYW5kIHVuZGVyc2NvcmUgY2hhcmFjdGVycyBvbmx5IC0tIGFsbCBvdGhlcg0KICBjaGFyYWN0ZXJzIGRlbGV0ZWQpLiBUaGlzIGFsbG93cyBtb3JlIGh1bWFuIGZyaWVuZGx5IHRleHQgdG8gYmUNCiAgdXNlZC4NCi0gTGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgc3RyaXBwZWQgZnJvbSB0aGUgYDx2YWx1ZT5gLg0KLSBMaW5lcyBlbmRpbmcgaW4gYSBzcGFjZSBmb2xsb3dlZCBieSBhIHBsdXMgY2hhcmFjdGVyIGFyZSBjb250aW51ZWQNCiAgdG8gdGhlIG5leHQgbGluZSwgZm9yIGV4YW1wbGU6DQoNCiAgOmRlc2NyaXB0aW9uOiBBc2NpaURvYyBpcyBhIHRleHQgZG9jdW1lbnQgZm9ybWF0IGZvciB3cml0aW5nIG5vdGVzLCArDQogICAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgYXJ0aWNsZXMsIGJvb2tzLCBzbGlkZXNob3dzLCB3ZWIgcGFnZXMgKw0KICAgICAgICAgICAgICAgIGFuZCBtYW4gcGFnZXMuDQoNCi0gSWYgdGhlIGA8dmFsdWU+YCBpcyBibGFuayB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSB2YWx1ZSBpcw0KICBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLg0KLSBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBjb250YWluZWQgaW4gdGhlIGVudHJ5IGA8dmFsdWU+YCB3aWxsIGJlDQogIGV4cGFuZGVkLg0KLSBCeSBkZWZhdWx0IEF0dHJpYnV0ZUVudHJ5IHZhbHVlcyBhcmUgc3Vic3RpdHV0ZWQgZm9yDQogIGBzcGVjaWFsY2hhcmFjdGVyc2AgYW5kIGBhdHRyaWJ1dGVzYCAoc2VlIGFib3ZlKSwgaWYgeW91IHdhbnQgdG8NCiAgY2hhbmdlIG9yIGRpc2FibGUgQXR0cmlidXRlRW50cnkgc3Vic3RpdHV0aW9uIHVzZSB0aGUgPDxYNzcscGFzczpbXQ0KICBpbmxpbmUgbWFjcm8+PiBzeW50YXguDQotIEF0dHJpYnV0ZSBlbnRyaWVzIGluIHRoZSBkb2N1bWVudCBIZWFkZXIgYXJlIGF2YWlsYWJsZSBmb3IgaGVhZGVyDQogIG1hcmt1cCB0ZW1wbGF0ZSBzdWJzdGl0dXRpb24uDQotIEF0dHJpYnV0ZSBlbGVtZW50cyBvdmVycmlkZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGludHJpbnNpYw0KICBhdHRyaWJ1dGVzIGJ1dCBkbyBub3Qgb3ZlcnJpZGUgY29tbWFuZC1saW5lIGF0dHJpYnV0ZXMuDQoNCkhlcmUgYXJlIHNvbWUgbW9yZSBhdHRyaWJ1dGUgZW50cnkgZXhhbXBsZXM6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQXNjaWlEb2MgVXNlciBNYW51YWwNCj09PT09PT09PT09PT09PT09PT09DQo6YXV0aG9yOiAgICBTdHVhcnQgUmFja2hhbQ0KOmVtYWlsOiAgICAgc3JhY2toYW1AZ21haWwuY29tDQo6cmV2ZGF0ZTogICBBcHJpbCAyMywgMjAwNA0KOnJldm51bWJlcjogNS4xLjENCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpXaGljaCBjcmVhdGVzIHRoZXNlIGF0dHJpYnV0ZXM6DQoNCiAge2F1dGhvcn0sIHtmaXJzdG5hbWV9LCB7bGFzdG5hbWV9LCB7YXV0aG9yaW5pdGlhbHN9LCB7ZW1haWx9LA0KICB7cmV2ZGF0ZX0sIHtyZXZudW1iZXJ9DQoNClRoZSBwcmV2aW91cyBleGFtcGxlIGlzIGVxdWl2YWxlbnQgdG8gdGhpcyA8PFg5NSxkb2N1bWVudCBoZWFkZXI+PjoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpBc2NpaURvYyBVc2VyIE1hbnVhbA0KPT09PT09PT09PT09PT09PT09PT0NClN0dWFydCBSYWNraGFtIDxzcmFja2hhbUBnbWFpbC5jb20+DQo1LjEuMSwgQXByaWwgMjMsIDIwMDQNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpTZXR0aW5nIGNvbmZpZ3VyYXRpb24gZW50cmllcw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCkEgdmFyaWFudCBvZiB0aGUgQXR0cmlidXRlIEVudHJ5IHN5bnRheCBhbGxvd3MgY29uZmlndXJhdGlvbiBmaWxlDQpzZWN0aW9uIGVudHJpZXMgYW5kIG1hcmt1cCB0ZW1wbGF0ZSBzZWN0aW9ucyB0byBiZSBzZXQgZnJvbSB3aXRoaW4gYW4NCkFzY2lpRG9jIGRvY3VtZW50Og0KDQogIDo8c2VjdGlvbl9uYW1lPi5bPGVudHJ5X25hbWU+XTogPGVudHJ5X3ZhbHVlPg0KDQpXaGVyZSBgPHNlY3Rpb25fbmFtZT5gIGlzIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gbmFtZSwNCmA8ZW50cnlfbmFtZT5gIGlzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeSBhbmQgYDxlbnRyeV92YWx1ZT5gIGlzIHRoZQ0Kb3B0aW9uYWwgZW50cnkgdmFsdWUuIFRoaXMgZXhhbXBsZSBzZXRzIHRoZSBkZWZhdWx0IGxhYmVsZWQgbGlzdA0Kc3R5bGUgdG8gJ2hvcml6b250YWwnOg0KDQogIDpsaXN0ZGVmLWxhYmVsZWQuc3R5bGU6IGhvcml6b250YWwNCg0KSXQgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGEgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5pbmc6DQoNCiAgW2xpc3RkZWYtbGFiZWxlZF0NCiAgc3R5bGU9aG9yaXpvbnRhbA0KDQotIElmIHRoZSBgPGVudHJ5X25hbWU+YCBpcyBvbWl0dGVkIHRoZW4gdGhlIGVudGlyZSBzZWN0aW9uIGlzDQogIHN1YnN0aXR1dGVkIHdpdGggdGhlIGA8ZW50cnlfdmFsdWU+YC4gVGhpcyBmZWF0dXJlIHNob3VsZCBvbmx5IGJlDQogIHVzZWQgdG8gc2V0IG1hcmt1cCB0ZW1wbGF0ZSBzZWN0aW9ucy4gVGhlIGZvbGxvd2luZyBleGFtcGxlIHNldHMgdGhlDQogICd4cmVmMicgaW5saW5lIG1hY3JvIG1hcmt1cCB0ZW1wbGF0ZToNCg0KICA6eHJlZjItaW5saW5lbWFjcm8uOiA8YSBocmVmPSIjezF9Ij57Mj97Mn19PC9hPg0KDQotIE5vIHN1YnN0aXR1dGlvbiBpcyBwZXJmb3JtZWQgb24gY29uZmlndXJhdGlvbiBmaWxlIGF0dHJpYnV0ZSBlbnRyaWVzDQogIGFuZCB0aGV5IGNhbm5vdCBiZSB1bmRlZmluZWQuDQotIFRoaXMgZmVhdHVyZSBjYW4gb25seSBiZSB1c2VkIGluIGF0dHJpYnV0ZSBlbnRyaWVzIC0tIGNvbmZpZ3VyYXRpb24NCiAgYXR0cmlidXRlcyBjYW5ub3QgYmUgc2V0IHVzaW5nIHRoZSBhc2NpaWRvYygxKSBjb21tYW5kIGAtLWF0dHJpYnV0ZWANCiAgb3B0aW9uLg0KDQpbW1g2Ml1dDQouQXR0cmlidXRlIGVudHJpZXMgcHJvbW90ZSBjbGFyaXR5IGFuZCBlbGltaW5hdGUgcmVwZXRpdGlvbg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpVUkxzIGFuZCBmaWxlIG5hbWVzIGluIEFzY2lpRG9jIG1hY3JvcyBhcmUgb2Z0ZW4gcXVpdGUgbG9uZyAtLSB0aGV5DQpicmVhayBwYXJhZ3JhcGggZmxvdyBhbmQgcmVhZGFiaWxpdHkgc3VmZmVycy4gIFRoZSBwcm9ibGVtIGlzDQpjb21wb3VuZGVkIGJ5IHJlZHVuZGFuY3kgaWYgdGhlIHNhbWUgbmFtZSBpcyB1c2VkIHJlcGVhdGVkbHkuDQpBdHRyaWJ1dGUgZW50cmllcyBjYW4gYmUgdXNlZCB0byBtYWtlIHlvdXIgZG9jdW1lbnRzIGVhc2llciB0byByZWFkDQphbmQgd3JpdGUsIGhlcmUgYXJlIHNvbWUgZXhhbXBsZXM6DQoNCiAgOjE6ICAgICAgICAgaHR0cDovL2ZyZXNobWVhdC5uZXQvcHJvamVjdHMvYXNjaWlkb2MvDQogIDpob21lcGFnZTogIGh0dHA6Ly9tZXRob2RzLmNvLm56L2FzY2lpZG9jL1tBc2NpaURvYyBob21lIHBhZ2VdDQogIDpuZXc6ICAgICAgIGltYWdlOi4vaW1hZ2VzL3NtYWxsbmV3LnBuZ1tdDQogIDpmb290bm90ZTE6IGZvb3Rub3RlOltBIG1lYW5pbmdsZXNzIGxhdGluIHRlcm1dDQoNCiAgVXNpbmcgcHJldmlvdXNseSBkZWZpbmVkIGF0dHJpYnV0ZXM6IFNlZSB0aGUgezF9W0ZyZXNobWVhdCBzdW1tYXJ5XQ0KICBvciB0aGUge2hvbWVwYWdlfSBmb3Igc29tZXRoaW5nIG5ldyB7bmV3fS4gTG9yZW0gaXNwdW0ge2Zvb3Rub3RlMX0uDQoNCi5Ob3RlDQotIFRoZSBhdHRyaWJ1dGUgZW50cnkgZGVmaW5pdGlvbiBtdXN0IHByZWNlZGUgaXQncyB1c2FnZS4NCi0gWW91IGFyZSBub3QgbGltaXRlZCB0byBVUkxzIG9yIGZpbGUgbmFtZXMsIGVudGlyZSBtYWNybyBjYWxscyBvcg0KICBhcmJpdHJhcnkgbGluZXMgb2YgdGV4dCBjYW4gYmUgYWJicmV2aWF0ZWQuDQotIFNoYXJlZCBhdHRyaWJ1dGVzIGVudHJpZXMgY291bGQgYmUgZ3JvdXBlZCBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQNCiAgPDxYNjMsaW5jbHVkZWQ+PiBpbiBtdWx0aXBsZSBkb2N1bWVudHMuDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCg0KDQpbW1gyMV1dDQpBdHRyaWJ1dGUgTGlzdHMNCi0tLS0tLS0tLS0tLS0tLQ0KLSBBbiBhdHRyaWJ1dGUgbGlzdCBpcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZSB2YWx1ZXMuDQotIFRoZSBlbnRpcmUgbGlzdCBpcyBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMuDQotIEF0dHJpYnV0ZSBsaXN0cyBhcmUgdXNlZCB0byBwYXNzIHBhcmFtZXRlcnMgdG8gbWFjcm9zLCBibG9ja3MgKHVzaW5nDQogIHRoZSA8PFg3OSxBdHRyaWJ1dGVMaXN0IGVsZW1lbnQ+PikgYW5kIGlubGluZSBxdW90ZXMuDQoNClRoZSBsaXN0IGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSBwb3NpdGlvbmFsIGF0dHJpYnV0ZSB2YWx1ZXMgZm9sbG93ZWQNCmJ5IHplcm8gb3IgbW9yZSBuYW1lZCBhdHRyaWJ1dGUgdmFsdWVzLiAgSGVyZSBhcmUgdGhyZWUgZXhhbXBsZXM6IGENCnNpbmdsZSB1bnF1b3RlZCBwb3NpdGlvbmFsIGF0dHJpYnV0ZTsgdGhyZWUgdW5xdW90ZWQgcG9zaXRpb25hbA0KYXR0cmlidXRlIHZhbHVlczsgb25lIHBvc2l0aW9uYWwgYXR0cmlidXRlIGZvbGxvd2VkIGJ5IHR3byBuYW1lZA0KYXR0cmlidXRlczsgdGhlIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgZmluYWwgZXhhbXBsZSBjb250YWlucw0KY29tbWEgKGAmIzQ0O2ApIGFuZCBkb3VibGUtcXVvdGUgKGAmIzM0O2ApIGNoYXJhY3RlciBlbnRpdGllczoNCg0KICBbSGVsbG9dDQogIFtxdW90ZSwgQmVydHJhbmQgUnVzc2VsbCwgVGhlIFdvcmxkIG9mIE1hdGhlbWF0aWNzICgxOTU2KV0NCiAgWyIyMiB0aW1lcyIsIGJhY2tjb2xvcj0iIzBlMGUwZSIsIG9wdGlvbnM9Im5vYm9yZGVycyx3aWRlIl0NCiAgW0EgZm9vdG5vdGUmIzQ0OyAmIzM0O3dpdGggYW4gaW1hZ2UmIzM0OyBpbWFnZTpzbWFsbG5ldy5wbmdbXV0NCg0KLkF0dHJpYnV0ZSBsaXN0IGJlaGF2aW9yDQotIElmIG9uZSBvciBtb3JlIGF0dHJpYnV0ZSB2YWx1ZXMgY29udGFpbnMgYSBjb21tYSB0aGUgYWxsIHN0cmluZw0KICB2YWx1ZXMgbXVzdCBiZSBxdW90ZWQgKGVuY2xvc2VkIGluIGRvdWJsZSBxdW90YXRpb24gbWFyaw0KICBjaGFyYWN0ZXJzKS4NCi0gSWYgdGhlIGxpc3QgY29udGFpbnMgYW55IG5hbWVkIG9yIHF1b3RlZCBhdHRyaWJ1dGVzIHRoZW4gYWxsIHN0cmluZw0KICBhdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgcXVvdGVkLg0KLSBUbyBpbmNsdWRlIGEgZG91YmxlIHF1b3RhdGlvbiBtYXJrICgiKSBjaGFyYWN0ZXIgaW4gYSBxdW90ZWQNCiAgYXR0cmlidXRlIHZhbHVlIHRoZSB0aGUgcXVvdGF0aW9uIG1hcmsgbXVzdCBiZSBlc2NhcGVkIHdpdGggYQ0KICBiYWNrc2xhc2guDQotIExpc3QgYXR0cmlidXRlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBleGlzdGluZyBhdHRyaWJ1dGVzLg0KLSBMaXN0IGF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgcmVmZXJlbmNlZCBpbiBjb25maWd1cmF0aW9uIGZpbGUgbWFya3VwDQogIHRlbXBsYXRlcyBhbmQgdGFncywgdGhleSBhcmUgbm90IGF2YWlsYWJsZSBlbHNld2hlcmUgaW4gdGhlDQogIGRvY3VtZW50Lg0KLSBTZXR0aW5nIGEgbmFtZWQgYXR0cmlidXRlIHRvIGBOb25lYCB1bmRlZmluZXMgdGhlIGF0dHJpYnV0ZS4NCi0gUG9zaXRpb25hbCBhdHRyaWJ1dGVzIGFyZSByZWZlcnJlZCB0byBhcyBgezF9YCxgezJ9YCxgezN9YCwuLi4NCi0gQXR0cmlidXRlIGB7MH1gIHJlZmVycyB0byB0aGUgZW50aXJlIGxpc3QgKGV4Y2x1ZGluZyB0aGUgZW5jbG9zaW5nDQogIHNxdWFyZSBicmFja2V0cykuDQotIE5hbWVkIGF0dHJpYnV0ZSBuYW1lcyBjYW5ub3QgY29udGFpbiBkYXNoIGNoYXJhY3RlcnMuDQoNCltbWDc1XV0NCk9wdGlvbnMgYXR0cmlidXRlDQp+fn5+fn5+fn5+fn5+fn5+fg0KSWYgdGhlIGF0dHJpYnV0ZSBsaXN0IGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSBuYW1lZCBgb3B0aW9uc2AgaXQgaXMNCnByb2Nlc3NlZCBhcyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIG9wdGlvbiBuYW1lczoNCg0KLSBFYWNoIG5hbWUgZ2VuZXJhdGVzIGFuIGF0dHJpYnV0ZSBuYW1lZCBsaWtlIGA8b3B0aW9uPi1vcHRpb25gICh3aGVyZQ0KICBgPG9wdGlvbj5gIGlzIHRoZSBvcHRpb24gbmFtZSkgd2l0aCBhbiBlbXB0eSBzdHJpbmcgdmFsdWUuICBGb3INCiAgZXhhbXBsZSBgW29wdGlvbnM9Im9wdDEsb3B0MixvcHQzIl1gIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUNCiAgZm9sbG93aW5nIHRocmVlIGF0dHJpYnV0ZXMNCiAgYFtvcHQxLW9wdGlvbj0iIixvcHQyLW9wdGlvbj0iIixvcHQyLW9wdGlvbj0iIl1gLg0KLSBJZiB5b3UgZGVmaW5lIGEgYW4gb3B0aW9uIGF0dHJpYnV0ZSBnbG9iYWxseSAoZm9yIGV4YW1wbGUgd2l0aCBhbg0KICA8PFgxOCxhdHRyaWJ1dGUgZW50cnk+PikgdGhlbiBpdCB3aWxsIGFwcGx5IHRvIGFsbCBlbGVtZW50cyBpbiB0aGUNCiAgZG9jdW1lbnQuDQotIEFzY2lpRG9jIGltcGxlbWVudHMgYSBudW1iZXIgb2YgcHJlZGVmaW5lZCBvcHRpb25zIHdoaWNoIGFyZSBsaXN0ZWQNCiAgaW4gdGhlIDw8WDc0LEF0dHJpYnV0ZSBPcHRpb25zIGFwcGVuZGl4Pj4uDQoNCk1hY3JvIEF0dHJpYnV0ZSBsaXN0cw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpNYWNyb3MgY2FsbHMgYXJlIHN1ZmZpeGVkIHdpdGggYW4gYXR0cmlidXRlIGxpc3QuIFRoZSBsaXN0IG1heSBiZQ0KZW1wdHkgYnV0IGl0IGNhbm5vdCBiZSBvbWl0dGVkLiBMaXN0IGVudHJpZXMgYXJlIHVzZWQgdG8gcGFzcw0KYXR0cmlidXRlIHZhbHVlcyB0byBtYWNybyBtYXJrdXAgdGVtcGxhdGVzLg0KDQoNCkF0dHJpYnV0ZSBSZWZlcmVuY2VzDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQW4gYXR0cmlidXRlIHJlZmVyZW5jZSBpcyBhbiBhdHRyaWJ1dGUgbmFtZSAocG9zc2libHkgZm9sbG93ZWQgYnkgYW4NCmFkZGl0aW9uYWwgcGFyYW1ldGVycykgZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzLiAgV2hlbiBhbiBhdHRyaWJ1dGUNCnJlZmVyZW5jZSBpcyBlbmNvdW50ZXJlZCBpdCBpcyBldmFsdWF0ZWQgYW5kIHJlcGxhY2VkIGJ5IGl0cw0KY29ycmVzcG9uZGluZyB0ZXh0IHZhbHVlLiAgSWYgdGhlIGF0dHJpYnV0ZSBpcyB1bmRlZmluZWQgdGhlIGxpbmUNCmNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZSBpcyBkcm9wcGVkLg0KDQpUaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgYXR0cmlidXRlIHJlZmVyZW5jZTogJ1NpbXBsZScsICdDb25kaXRpb25hbCcNCmFuZCAnU3lzdGVtJy4NCg0KLkF0dHJpYnV0ZSByZWZlcmVuY2UgZXZhbHVhdGlvbg0KLSBZb3UgY2FuIHN1cHByZXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgZXhwYW5zaW9uIGJ5IHBsYWNpbmcgYQ0KICBiYWNrc2xhc2ggY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGluIGZyb250IG9mIHRoZSBvcGVuaW5nIGJyYWNlDQogIGNoYXJhY3Rlci4NCi0gQnkgZGVmYXVsdCBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgbm90IGV4cGFuZGVkIGluDQogICdMaXRlcmFsUGFyYWdyYXBocycsICdMaXN0aW5nQmxvY2tzJyBvciAnTGl0ZXJhbEJsb2NrcycuDQotIEF0dHJpYnV0ZSBzdWJzdGl0dXRpb24gcHJvY2VlZHMgbGluZSBieSBsaW5lIGluIHJldmVyc2UgbGluZSBvcmRlci4NCi0gQXR0cmlidXRlIHJlZmVyZW5jZSBldmFsdWF0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOg0KICAnU2ltcGxlJyB0aGVuICdDb25kaXRpb25hbCcgYW5kIGZpbmFsbHkgJ1N5c3RlbScuDQoNClNpbXBsZSBBdHRyaWJ1dGVzIFJlZmVyZW5jZXMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NClNpbXBsZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcyB0YWtlIHRoZSBmb3JtIGB7PG5hbWU+fWAuIElmIHRoZQ0KYXR0cmlidXRlIG5hbWUgaXMgZGVmaW5lZCBpdHMgdGV4dCB2YWx1ZSBpcyBzdWJzdGl0dXRlZCBvdGhlcndpc2UgdGhlDQpsaW5lIGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZSBpcyBkcm9wcGVkIGZyb20gdGhlIG91dHB1dC4NCg0KQ29uZGl0aW9uYWwgQXR0cmlidXRlIFJlZmVyZW5jZXMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpBZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhdHRyaWJ1dGUgbmFtZXMgdG8NCmNhbGN1bGF0ZSBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4gQ29uZGl0aW9uYWwgYXR0cmlidXRlIHJlZmVyZW5jZXMgdGFrZQ0KdGhlIGZvbGxvd2luZyBmb3JtczoNCg0KYHs8bmFtZXM+PTx2YWx1ZT59YDo6DQogICAgICAgIGA8dmFsdWU+YCBpcyBzdWJzdGl0dXRlZCBpZiB0aGUgYXR0cmlidXRlIGA8bmFtZXM+YCBpcw0KICAgICAgICB1bmRlZmluZWQgb3RoZXJ3aXNlIGl0cyB2YWx1ZSBpcyBzdWJzdGl0dXRlZC4gYDx2YWx1ZT5gIGNhbg0KICAgICAgICBjb250YWluIHNpbXBsZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcy4NCg0KYHs8bmFtZXM+Pzx2YWx1ZT59YDo6DQogICAgICAgIGA8dmFsdWU+YCBpcyBzdWJzdGl0dXRlZCBpZiB0aGUgYXR0cmlidXRlIGA8bmFtZXM+YCBpcyBkZWZpbmVkDQogICAgICAgIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcgaXMgc3Vic3RpdHV0ZWQuICBgPHZhbHVlPmAgY2FuDQogICAgICAgIGNvbnRhaW4gc2ltcGxlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLg0KDQpgezxuYW1lcz4hPHZhbHVlPn1gOjoNCiAgICAgICAgYDx2YWx1ZT5gIGlzIHN1YnN0aXR1dGVkIGlmIHRoZSBhdHRyaWJ1dGUgYDxuYW1lcz5gIGlzDQogICAgICAgIHVuZGVmaW5lZCBvdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nIGlzIHN1YnN0aXR1dGVkLiAgYDx2YWx1ZT5gDQogICAgICAgIGNhbiBjb250YWluIHNpbXBsZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcy4NCg0KYHs8bmFtZXM+Izx2YWx1ZT59YDo6DQogICAgICAgIGA8dmFsdWU+YCBpcyBzdWJzdGl0dXRlZCBpZiB0aGUgYXR0cmlidXRlIGA8bmFtZXM+YCBpcyBkZWZpbmVkDQogICAgICAgIG90aGVyd2lzZSB0aGUgdW5kZWZpbmVkIGF0dHJpYnV0ZSBlbnRyeSBjYXVzZXMgdGhlIGNvbnRhaW5pbmcNCiAgICAgICAgbGluZSB0byBiZSBkcm9wcGVkLiAgYDx2YWx1ZT5gIGNhbiBjb250YWluIHNpbXBsZSBhdHRyaWJ1dGUNCiAgICAgICAgcmVmZXJlbmNlcy4NCg0KYHs8bmFtZXM+JTx2YWx1ZT59YDo6DQogICAgICAgIGA8dmFsdWU+YCBpcyBzdWJzdGl0dXRlZCBpZiB0aGUgYXR0cmlidXRlIGA8bmFtZXM+YCBpcyBub3QNCiAgICAgICAgZGVmaW5lZCBvdGhlcndpc2UgdGhlIGNvbnRhaW5pbmcgbGluZSBpcyBkcm9wcGVkLiAgYDx2YWx1ZT5gDQogICAgICAgIGNhbiBjb250YWluIHNpbXBsZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcy4NCg0KYHs8bmFtZXM+QDxyZWdleHA+Ojx2YWx1ZTE+Wzo8dmFsdWUyPl19YDo6DQogICAgICAgIGA8dmFsdWUxPmAgaXMgc3Vic3RpdHV0ZWQgaWYgdGhlIHZhbHVlIG9mIGF0dHJpYnV0ZSBgPG5hbWVzPmANCiAgICAgICAgbWF0Y2hlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIGA8cmVnZXhwPmAgb3RoZXJ3aXNlIGA8dmFsdWUyPmANCiAgICAgICAgaXMgc3Vic3RpdHV0ZWQuIElmIGF0dHJpYnV0ZSBgPG5hbWVzPmAgaXMgbm90IGRlZmluZWQgdGhlDQogICAgICAgIGNvbnRhaW5pbmcgbGluZSBpcyBkcm9wcGVkLiBJZiBgPHZhbHVlMj5gIGlzIG9taXR0ZWQgYW4gZW1wdHkNCiAgICAgICAgc3RyaW5nIGlzIGFzc3VtZWQuIFRoZSB2YWx1ZXMgYW5kIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FuDQogICAgICAgIGNvbnRhaW4gc2ltcGxlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLiAgVG8gZW1iZWQgY29sb25zIGluIHRoZQ0KICAgICAgICB2YWx1ZXMgb3IgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBlc2NhcGUgdGhlbSB3aXRoIGJhY2tzbGFzaGVzLg0KDQpgezxuYW1lcz4kPHJlZ2V4cD46PHZhbHVlMT5bOjx2YWx1ZTI+XX1gOjoNCiAgICAgICAgU2FtZSBiZWhhdmlvciBhcyB0aGUgcHJldmlvdXMgdGVybmFyeSBhdHRyaWJ1dGUgZXhjZXB0IGZvcg0KICAgICAgICB0aGUgZm9sbG93aW5nIGNhc2VzOg0KDQogICAgICAgIGB7PG5hbWVzPiQ8cmVnZXhwPjo8dmFsdWU+fWA7Ow0KICAgICAgICAgICAgICAgIFN1YnN0aXR1dGVzIGA8dmFsdWU+YCBpZiBgPG5hbWVzPmAgbWF0Y2hlcyBgPHJlZ2V4cD5gDQogICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGFuZCB0aGUgY29udGFpbmluZw0KICAgICAgICAgICAgICAgIGxpbmUgaXMgZHJvcHBlZC4NCg0KICAgICAgICBgezxuYW1lcz4kPHJlZ2V4cD46Ojx2YWx1ZT59YDs7DQogICAgICAgICAgICAgICAgU3Vic3RpdHV0ZXMgYDx2YWx1ZT5gIGlmIGA8bmFtZXM+YCBkb2VzIG5vdCBtYXRjaA0KICAgICAgICAgICAgICAgIGA8cmVnZXhwPmAgb3RoZXJ3aXNlIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkIGFuZCB0aGUNCiAgICAgICAgICAgICAgICBjb250YWluaW5nIGxpbmUgaXMgZHJvcHBlZC4NCg0KVGhlIGF0dHJpYnV0ZSBgPG5hbWVzPmAgcGFyYW1ldGVyIG5vcm1hbGx5IGNvbnNpc3RzIG9mIGEgc2luZ2xlDQphdHRyaWJ1dGUgbmFtZSBidXQgaXQgY2FuIGJlIGFueSBvbmUgb2YgdGhlIGZvbGxvd2luZzoNCg0KLSBBIHNpbmdsZSBhdHRyaWJ1dGUgbmFtZSB3aGljaCBldmFsdWF0ZXMgdG8gdGhlIGF0dHJpYnV0ZXMgdmFsdWUuDQotIE11bHRpcGxlICcsJyBzZXBhcmF0ZWQgYXR0cmlidXRlIG5hbWVzIHdoaWNoIGV2YWx1YXRlcyB0byBhbiBlbXB0eQ0KICBzdHJpbmcgaWYgb25lIG9yIG1vcmUgb2YgdGhlIGF0dHJpYnV0ZXMgaXMgZGVmaW5lZCwgb3RoZXJ3aXNlIGl0J3MNCiAgdmFsdWUgaXMgdW5kZWZpbmVkLg0KLSBNdWx0aXBsZSAnKycgc2VwYXJhdGVkIGF0dHJpYnV0ZSBuYW1lcyB3aGljaCBldmFsdWF0ZXMgdG8gYW4gZW1wdHkNCiAgc3RyaW5nIGlmIGFsbCBvZiB0aGUgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgb3RoZXJ3aXNlIGl0J3MgdmFsdWUgaXMNCiAgdW5kZWZpbmVkLg0KDQpDb25kaXRpb25hbCBhdHRyaWJ1dGVzIHdpdGggc2luZ2xlIGF0dHJpYnV0ZSBuYW1lcyBhcmUgZXZhbHVhdGVkIGZpcnN0DQpzbyB0aGV5IGNhbiBiZSB1c2VkIGluc2lkZSB0aGUgbXVsdGktYXR0cmlidXRlIGNvbmRpdGlvbmFsIGA8dmFsdWU+YC4NCg0KQ29uZGl0aW9uYWwgYXR0cmlidXRlIGV4YW1wbGVzDQpeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4NCkNvbmRpdGlvbmFsIGF0dHJpYnV0ZXMgYXJlIG1haW5seSB1c2VkIGluIEFzY2lpRG9jIGNvbmZpZ3VyYXRpb24NCmZpbGVzIC0tIHNlZSB0aGUgZGlzdHJpYnV0aW9uIGAuY29uZmAgZmlsZXMgZm9yIGV4YW1wbGVzLg0KDQpBdHRyaWJ1dGUgZXF1YWxpdHkgdGVzdDo6DQogIElmIGB7YmFja2VuZH1gIGlzICdkb2Nib29rNDUnIG9yICd4aHRtbDExJyB0aGUgZXhhbXBsZSBldmFsdWF0ZXMgdG8NCiAgYGBEb2NCb29rIDQuNSBvciBYSFRNTCAxLjEgYmFja2VuZCcnIG90aGVyd2lzZSBpdCBldmFsdWF0ZXMgdG8NCiAgYGBzb21lIG90aGVyIGJhY2tlbmQnJzoNCg0KICB7YmFja2VuZEBkb2Nib29rNDV8eGh0bWwxMTpEb2NCb29rIDQuNSBvciBYSFRNTCAxLjEgYmFja2VuZDpzb21lIG90aGVyIGJhY2tlbmR9DQoNCkF0dHJpYnV0ZSB2YWx1ZSBtYXA6Og0KICBUaGlzIGV4YW1wbGUgbWFwcyB0aGUgYGZyYW1lYCBhdHRyaWJ1dGUgdmFsdWVzIFtgdG9wYm90YCwgYGFsbGAsDQogIGBub25lYCwgYHNpZGVzYF0gdG8gW2Boc2lkZXNgLCBgYm9yZGVyYCwgYHZvaWRgLCBgdnNpZGVzYF06DQoNCiAge2ZyYW1lQHRvcGJvdDpoc2lkZXN9e2ZyYW1lQGFsbDpib3JkZXJ9e2ZyYW1lQG5vbmU6dm9pZH17ZnJhbWVAc2lkZXM6dnNpZGVzfQ0KDQoNCltbWDI0XV0NClN5c3RlbSBBdHRyaWJ1dGUgUmVmZXJlbmNlcw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpTeXN0ZW0gYXR0cmlidXRlIHJlZmVyZW5jZXMgZ2VuZXJhdGUgdGhlIGF0dHJpYnV0ZSB0ZXh0IHZhbHVlIGJ5DQpleGVjdXRpbmcgYSBwcmVkZWZpbmVkIGFjdGlvbiB0aGF0IGlzIHBhcmFtZXRyaXplZCBieSBvbmUgb3IgbW9yZQ0KYXJndW1lbnRzLiBUaGUgc3ludGF4IGlzIGB7PGFjdGlvbj46PGFyZ3VtZW50cz59YC4NCg0KYHtjb3VudGVyOjxhdHRybmFtZT5bOjxzZWVkPl19YDo6DQogICAgICAgIEluY3JlbWVudHMgdGhlIGRvY3VtZW50IGF0dHJpYnV0ZSAoaWYgdGhlIGF0dHJpYnV0ZSBpcw0KICAgICAgICB1bmRlZmluZWQgaXQgaXMgc2V0IHRvIGAxYCkuIFJldHVybnMgdGhlIG5ldyBhdHRyaWJ1dGUgdmFsdWUuDQoNCiAgICAgICAgLSBDb3VudGVycyBnZW5lcmF0ZSBnbG9iYWwgKGRvY3VtZW50IHdpZGUpIGF0dHJpYnV0ZXMuDQogICAgICAgIC0gVGhlIG9wdGlvbmFsIGA8c2VlZD5gIHNwZWNpZmllcyB0aGUgY291bnRlcidzIGluaXRpYWwgdmFsdWU7DQogICAgICAgICAgaXQgY2FuIGJlIGEgbnVtYmVyIG9yIGEgc2luZ2xlIGxldHRlcjsgZGVmYXVsdHMgdG8gJzEnLg0KICAgICAgICAtIGA8c2VlZD5gIGNhbiBjb250YWluIHNpbXBsZSBhbmQgY29uZGl0aW9uYWwgYXR0cmlidXRlDQogICAgICAgICAgcmVmZXJlbmNlcy4NCiAgICAgICAgLSBUaGUgJ2NvdW50ZXInIHN5c3RlbSBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWYgdGhlDQogICAgICAgICAgY29udGFpbmluZyBsaW5lIGlzIGRyb3BwZWQgYnkgdGhlIHByaW9yIGV2YWx1YXRpb24gb2YgYW4NCiAgICAgICAgICB1bmRlZmluZWQgYXR0cmlidXRlLg0KDQpge2NvdW50ZXIyOjxhdHRybmFtZT5bOjxzZWVkPl19YDo6DQogICAgICAgIFNhbWUgYXMgYGNvdW50ZXJgIGV4Y2VwdCB0aGUgaXQgYWx3YXlzIHJldHVybnMgYSBibGFuayBzdHJpbmcuDQoNCmB7ZXZhbDo8ZXhwcmVzc2lvbj59YDo6DQogICAgICAgIFN1YnN0aXR1dGVzIHRoZSByZXN1bHQgb2YgdGhlIFB5dGhvbiBgPGV4cHJlc3Npb24+YC4NCg0KICAgICAgICAtIElmIGA8ZXhwcmVzc2lvbj5gIGV2YWx1YXRlcyB0byBgTm9uZWAgb3IgYEZhbHNlYCB0aGUNCiAgICAgICAgICByZWZlcmVuY2UgaXMgZGVlbWVkIHVuZGVmaW5lZCBhbmQgdGhlIGxpbmUgY29udGFpbmluZyB0aGUNCiAgICAgICAgICByZWZlcmVuY2UgaXMgZHJvcHBlZCBmcm9tIHRoZSBvdXRwdXQuDQogICAgICAgIC0gSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGBUcnVlYCB0aGUgYXR0cmlidXRlDQogICAgICAgICAgZXZhbHVhdGVzIHRvIGFuIGVtcHR5IHN0cmluZy4NCiAgICAgICAgLSBgPGV4cHJlc3Npb24+YCBjYW4gY29udGFpbiBzaW1wbGUgYW5kIGNvbmRpdGlvbmFsIGF0dHJpYnV0ZQ0KICAgICAgICAgIHJlZmVyZW5jZXMuDQogICAgICAgIC0gVGhlICdldmFsJyBzeXN0ZW0gYXR0cmlidXRlIGNhbiBiZSBuZXN0ZWQgaW5zaWRlIG90aGVyDQogICAgICAgICAgc3lzdGVtIGF0dHJpYnV0ZXMuDQoNCmB7ZXZhbDM6PGNvbW1hbmQ+fWA6Og0KICAgICAgICBQYXNzdGhyb3VnaCB2ZXJzaW9uIG9mIGB7ZXZhbDo8ZXhwcmVzc2lvbj59YCAtLSB0aGUgZ2VuZXJhdGVkDQogICAgICAgIG91dHB1dCBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHRoZSBvdXRwdXQgd2l0aG91dCBhbnkgZnVydGhlcg0KICAgICAgICBzdWJzdGl0dXRpb25zLg0KDQpge2luY2x1ZGU6PGZpbGVuYW1lPn1gOjoNCiAgICAgICAgU3Vic3RpdHV0ZXMgY29udGVudHMgb2YgdGhlIGZpbGUgbmFtZWQgYDxmaWxlbmFtZT5gLg0KDQogICAgICAgIC0gVGhlIGluY2x1ZGVkIGZpbGUgaXMgcmVhZCBhdCB0aGUgdGltZSBvZiBhdHRyaWJ1dGUNCiAgICAgICAgICBzdWJzdGl0dXRpb24uDQogICAgICAgIC0gSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgYW5kIHRoZSBsaW5lDQogICAgICAgICAgY29udGFpbmluZyB0aGUgcmVmZXJlbmNlIGlzIGRyb3BwZWQgZnJvbSB0aGUgb3V0cHV0IGZpbGUuDQogICAgICAgIC0gVGFicyBhcmUgZXhwYW5kZWQgYmFzZWQgb24gdGhlIGN1cnJlbnQgJ3RhYnNpemUnIGF0dHJpYnV0ZQ0KICAgICAgICAgIHZhbHVlLg0KDQpge3NldDo8YXR0cm5hbWU+WyFdWzo8dmFsdWU+XX1gOjoNCiAgICAgICAgU2V0cyBvciB1bnNldHMgZG9jdW1lbnQgYXR0cmlidXRlLiBOb3JtYWxseSBvbmx5IHVzZWQgaW4NCiAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIG1hcmt1cCB0ZW1wbGF0ZXMgKHVzZQ0KICAgICAgICA8PFgxOCxBdHRyaWJ1dGVFbnRyaWVzPj4gaW4gQXNjaWlEb2MgZG9jdW1lbnRzKS4NCg0KICAgICAgICAtIElmIHRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBmb2xsb3dlZCBieSBhbiBleGNsYW1hdGlvbiBtYXJrDQogICAgICAgICAgdGhlIGF0dHJpYnV0ZSBiZWNvbWVzIHVuZGVmaW5lZC4NCiAgICAgICAgLSBJZiBgPHZhbHVlPmAgaXMgb21pdHRlZCB0aGUgYXR0cmlidXRlIGlzIHNldCB0byBhIGJsYW5rDQogICAgICAgICAgc3RyaW5nLg0KICAgICAgICAtIGA8dmFsdWU+YCBjYW4gY29udGFpbiBzaW1wbGUgYW5kIGNvbmRpdGlvbmFsIGF0dHJpYnV0ZQ0KICAgICAgICAgIHJlZmVyZW5jZXMuDQogICAgICAgIC0gUmV0dXJucyBhIGJsYW5rIHN0cmluZyB1bmxlc3MgdGhlIGF0dHJpYnV0ZSBpcyB1bmRlZmluZWQgaW4NCiAgICAgICAgICB3aGljaCBjYXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCB0aGUgZW5jbG9zaW5nDQogICAgICAgICAgbGluZSB3aWxsIGJlIGRyb3BwZWQuDQoNCmB7c2V0Mjo8YXR0cm5hbWU+WyFdWzo8dmFsdWU+XX1gOjoNCiAgICAgICAgU2FtZSBhcyBgc2V0YCBleGNlcHQgdGhhdCB0aGUgYXR0cmlidXRlIHNjb3BlIGlzIGxvY2FsIHRvIHRoZQ0KICAgICAgICB0ZW1wbGF0ZS4NCg0KYHtzeXM6PGNvbW1hbmQ+fWA6Og0KICAgICAgICBTdWJzdGl0dXRlcyB0aGUgc3Rkb3V0IGdlbmVyYXRlZCBieSB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzaGVsbA0KICAgICAgICBgPGNvbW1hbmQ+YC4NCg0KYHtzeXMyOjxjb21tYW5kPn1gOjoNCiAgICAgICAgU3Vic3RpdHV0ZXMgdGhlIHN0ZG91dCBhbmQgc3RkZXJyIGdlbmVyYXRlZCBieSB0aGUgZXhlY3V0aW9uDQogICAgICAgIG9mIHRoZSBzaGVsbCBgPGNvbW1hbmQ+YC4NCg0KYHtzeXMzOjxjb21tYW5kPn1gOjoNCiAgICAgICAgUGFzc3Rocm91Z2ggdmVyc2lvbiBvZiBge3N5czo8Y29tbWFuZD59YCAtLSB0aGUgZ2VuZXJhdGVkDQogICAgICAgIG91dHB1dCBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHRoZSBvdXRwdXQgd2l0aG91dCBhbnkgZnVydGhlcg0KICAgICAgICBzdWJzdGl0dXRpb25zLg0KDQpge3RlbXBsYXRlOjx0ZW1wbGF0ZT59YDo6DQogICAgICAgIFN1YnN0aXR1dGVzIHRoZSBjb250ZW50cyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb24NCiAgICAgICAgbmFtZWQgYDx0ZW1wbGF0ZT5gLiBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBjb250YWluZWQgaW4gdGhlDQogICAgICAgIHRlbXBsYXRlIGFyZSBzdWJzdGl0dXRlZC4NCg0KLlN5c3RlbSByZWZlcmVuY2UgYmVoYXZpb3INCi0gU3lzdGVtIGF0dHJpYnV0ZSBhcmd1bWVudHMgY2FuIGNvbnRhaW4gbm9uLXN5c3RlbSBhdHRyaWJ1dGUNCiAgcmVmZXJlbmNlcy4NCi0gQ2xvc2luZyBicmFjZSBjaGFyYWN0ZXJzIGluc2lkZSBzeXN0ZW0gYXR0cmlidXRlIGFyZ3VtZW50cyBtdXN0IGJlDQogIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4NCg0KW1tYNjBdXQ0KSW50cmluc2ljIEF0dHJpYnV0ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tDQpJbnRyaW5zaWMgYXR0cmlidXRlcyBhcmUgc2ltcGxlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgY3JlYXRlZA0KYXV0b21hdGljYWxseSBmcm9tOiBBc2NpaURvYyBkb2N1bWVudCBoZWFkZXIgcGFyYW1ldGVyczsgYXNjaWlkb2MoMSkNCmNvbW1hbmQtbGluZSBhcmd1bWVudHM7IGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgZGVmYXVsdA0KY29uZmlndXJhdGlvbiBmaWxlczsgdGhlIGV4ZWN1dGlvbiBjb250ZXh0LiAgSGVyZSdzIHRoZSBsaXN0IG9mDQpwcmVkZWZpbmVkIGludHJpbnNpYyBhdHRyaWJ1dGVzOg0KDQogIHthbXB9ICAgICAgICAgICAgICAgICBhbXBlcnNhbmQgKCYpIGNoYXJhY3RlciBlbnRpdHkNCiAge2FzY2lpZG9jLWFyZ3N9ICAgICAgIHVzZWQgdG8gcGFzcyBpbmhlcml0ZWQgYXJndW1lbnRzIHRvIGFzY2lpZG9jIGZpbHRlcnMNCiAge2FzY2lpZG9jLWNvbmZkaXJ9ICAgIHRoZSBhc2NpaWRvYygxKSBnbG9iYWwgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkNCiAge2FzY2lpZG9jLWRpcn0gICAgICAgIHRoZSBhc2NpaWRvYygxKSBhcHBsaWNhdGlvbiBkaXJlY3RvcnkNCiAge2FzY2lpZG9jLWZpbGV9ICAgICAgIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgYXNjaWlkb2MoMSkgc2NyaXB0DQogIHthc2NpaWRvYy12ZXJzaW9ufSAgICB0aGUgdmVyc2lvbiBvZiBhc2NpaWRvYygxKQ0KICB7YXV0aG9yfSAgICAgICAgICAgICAgYXV0aG9yJ3MgZnVsbCBuYW1lDQogIHthdXRob3JlZH0gICAgICAgICAgICBlbXB0eSBzdHJpbmcgJycgaWYge2F1dGhvcn0gb3Ige2VtYWlsfSBkZWZpbmVkLA0KICB7YXV0aG9yaW5pdGlhbHN9ICAgICAgYXV0aG9yIGluaXRpYWxzIChmcm9tIGRvY3VtZW50IGhlYWRlcikNCiAge2JhY2tlbmQtPGJhY2tlbmQ+fSAgIGVtcHR5IHN0cmluZyAnJw0KICB7PGJhY2tlbmQ+LTxkb2N0eXBlPn0gZW1wdHkgc3RyaW5nICcnDQogIHtiYWNrZW5kfSAgICAgICAgICAgICBkb2N1bWVudCBiYWNrZW5kIHNwZWNpZmllZCBieSBgLWJgIG9wdGlvbg0KICB7YmFja2VuZC1jb25mZGlyfSAgICAgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSA8YmFja2VuZD4uY29uZiBmaWxlDQogIHtiYWNrc2xhc2h9ICAgICAgICAgICBiYWNrc2xhc2ggY2hhcmFjdGVyDQogIHtiYXNlYmFja2VuZC08YmFzZT59ICBlbXB0eSBzdHJpbmcgJycNCiAge2Jhc2ViYWNrZW5kfSAgICAgICAgIGh0bWwgb3IgZG9jYm9vaw0KICB7YmxvY2tuYW1lfSAgICAgICAgICAgY3VycmVudCBibG9jayBuYW1lIChub3RlIDgpLg0KICB7YnJ2YmFyfSAgICAgICAgICAgICAgYnJva2VuIHZlcnRpY2FsIGJhciAofCkgY2hhcmFjdGVyDQogIHtkb2NkYXRlfSAgICAgICAgICAgICBkb2N1bWVudCBsYXN0IG1vZGlmaWVkIGRhdGUNCiAge2RvY2Rpcn0gICAgICAgICAgICAgIGRvY3VtZW50IGlucHV0IGRpcmVjdG9yeSBuYW1lICAobm90ZSA1KQ0KICB7ZG9jZmlsZX0gICAgICAgICAgICAgZG9jdW1lbnQgZmlsZSBuYW1lICAobm90ZSA1KQ0KICB7ZG9jbmFtZX0gICAgICAgICAgICAgZG9jdW1lbnQgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uIChub3RlIDYpDQogIHtkb2N0aW1lfSAgICAgICAgICAgICBkb2N1bWVudCBsYXN0IG1vZGlmaWVkIHRpbWUNCiAge2RvY3RpdGxlfSAgICAgICAgICAgIGRvY3VtZW50IHRpdGxlIChmcm9tIGRvY3VtZW50IGhlYWRlcikNCiAge2RvY3R5cGUtPGRvY3R5cGU+fSAgIGVtcHR5IHN0cmluZyAnJw0KICB7ZG9jdHlwZX0gICAgICAgICAgICAgZG9jdW1lbnQgdHlwZSBzcGVjaWZpZWQgYnkgYC1kYCBvcHRpb24NCiAge2VtYWlsfSAgICAgICAgICAgICAgIGF1dGhvcidzIGVtYWlsIGFkZHJlc3MgKGZyb20gZG9jdW1lbnQgaGVhZGVyKQ0KICB7ZW1wdHl9ICAgICAgICAgICAgICAgZW1wdHkgc3RyaW5nICcnDQogIHtlbmNvZGluZ30gICAgICAgICAgICBzcGVjaWZpZXMgaW5wdXQgYW5kIG91dHB1dCBlbmNvZGluZw0KICB7ZmlsZXR5cGUtPGZpbGVleHQ+fSAgZW1wdHkgc3RyaW5nICcnDQogIHtmaWxldHlwZX0gICAgICAgICAgICBvdXRwdXQgZmlsZSBuYW1lIGZpbGUgZXh0ZW5zaW9uDQogIHtmaXJzdG5hbWV9ICAgICAgICAgICBhdXRob3IgZmlyc3QgbmFtZSAoZnJvbSBkb2N1bWVudCBoZWFkZXIpDQogIHtndH0gICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gKD4pIGNoYXJhY3RlciBlbnRpdHkNCiAge2lkfSAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgYmxvY2sgaWQgZ2VuZXJhdGVkIGJ5IEJsb2NrSWQgZWxlbWVudHMNCiAge2luZGlyfSAgICAgICAgICAgICAgIGlucHV0IGZpbGUgZGlyZWN0b3J5IG5hbWUgKG5vdGUgMiw1KQ0KICB7aW5maWxlfSAgICAgICAgICAgICAgaW5wdXQgZmlsZSBuYW1lIChub3RlIDIsNSkNCiAge2xhc3RuYW1lfSAgICAgICAgICAgIGF1dGhvciBsYXN0IG5hbWUgKGZyb20gZG9jdW1lbnQgaGVhZGVyKQ0KICB7bGRxdW99ICAgICAgICAgICAgICAgTGVmdCBkb3VibGUgcXVvdGUgY2hhcmFjdGVyIChub3RlIDcpDQogIHtsZXZlbH0gICAgICAgICAgICAgICB0aXRsZSBsZXZlbCAxLi40IChpbiBzZWN0aW9uIHRpdGxlcykNCiAge2xpc3RpbmRleH0gICAgICAgICAgIHRoZSBsaXN0IGluZGV4ICgxLi4pIG9mIHRoZSBtb3N0IHJlY2VudCBsaXN0IGl0ZW0NCiAge2xvY2FsZGF0ZX0gICAgICAgICAgIHRoZSBjdXJyZW50IGRhdGUNCiAge2xvY2FsdGltZX0gICAgICAgICAgIHRoZSBjdXJyZW50IHRpbWUNCiAge2xzcXVvfSAgICAgICAgICAgICAgIExlZnQgc2luZ2xlIHF1b3RlIGNoYXJhY3RlciAobm90ZSA3KQ0KICB7bHR9ICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuICg8KSBjaGFyYWN0ZXIgZW50aXR5DQogIHttYW5uYW1lfSAgICAgICAgICAgICBtYW5wYWdlIG5hbWUgKGRlZmluZWQgaW4gTkFNRSBzZWN0aW9uKQ0KICB7bWFucHVycG9zZX0gICAgICAgICAgbWFucGFnZSAoZGVmaW5lZCBpbiBOQU1FIHNlY3Rpb24pDQogIHttYW50aXRsZX0gICAgICAgICAgICBkb2N1bWVudCB0aXRsZSBtaW51cyB0aGUgbWFucGFnZSB2b2x1bWUgbnVtYmVyDQogIHttYW52b2xudW19ICAgICAgICAgICBtYW5wYWdlIHZvbHVtZSBudW1iZXIgKDEuLjgpIChmcm9tIGRvY3VtZW50IGhlYWRlcikNCiAge21pZGRsZW5hbWV9ICAgICAgICAgIGF1dGhvciBtaWRkbGUgbmFtZSAoZnJvbSBkb2N1bWVudCBoZWFkZXIpDQogIHtuYnNwfSAgICAgICAgICAgICAgICBub24tYnJlYWtpbmcgc3BhY2UgY2hhcmFjdGVyIGVudGl0eQ0KICB7bm90aXRsZX0gICAgICAgICAgICAgZG8gbm90IGRpc3BsYXkgdGhlIGRvY3VtZW50IHRpdGxlDQogIHtvdXRkaXJ9ICAgICAgICAgICAgICBkb2N1bWVudCBvdXRwdXQgZGlyZWN0b3J5IG5hbWUgKG5vdGUgMikNCiAge291dGZpbGV9ICAgICAgICAgICAgIG91dHB1dCBmaWxlIG5hbWUgKG5vdGUgMikNCiAge3B5dGhvbn0gICAgICAgICAgICAgIHRoZSBmdWxsIHBhdGggbmFtZSBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyIGV4ZWN1dGFibGUNCiAge3JkcXVvfSAgICAgICAgICAgICAgIFJpZ2h0IGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXIgKG5vdGUgNykNCiAge3JlZnRleHR9ICAgICAgICAgICAgIHJ1bm5pbmcgYmxvY2sgeHJlZmxhYmVsIGdlbmVyYXRlZCBieSBCbG9ja0lkIGVsZW1lbnRzDQogIHtyZXZkYXRlfSAgICAgICAgICAgICBkb2N1bWVudCByZXZpc2lvbiBkYXRlIChmcm9tIGRvY3VtZW50IGhlYWRlcikNCiAge3Jldm51bWJlcn0gICAgICAgICAgIGRvY3VtZW50IHJldmlzaW9uIG51bWJlciAoZnJvbSBkb2N1bWVudCBoZWFkZXIpDQogIHtyc3F1b30gICAgICAgICAgICAgICBSaWdodCBzaW5nbGUgcXVvdGUgY2hhcmFjdGVyIChub3RlIDcpDQogIHtzZWN0bnVtfSAgICAgICAgICAgICBmb3JtYXR0ZWQgc2VjdGlvbiBudW1iZXIgKGluIHNlY3Rpb24gdGl0bGVzKQ0KICB7c3B9ICAgICAgICAgICAgICAgICAgc3BhY2UgY2hhcmFjdGVyDQogIHtzaG93Y29tbWVudHN9ICAgICAgICBzZW5kIGNvbW1lbnQgbGluZXMgdG8gdGhlIG91dHB1dA0KICB7dGl0bGV9ICAgICAgICAgICAgICAgc2VjdGlvbiB0aXRsZSAoaW4gdGl0bGVkIGVsZW1lbnRzKQ0KICB7dHdvLWNvbG9uc30gICAgICAgICAgVHdvIGNvbG9uIGNoYXJhY3RlcnMNCiAge3R3by1zZW1pY29sb25zfSAgICAgIFR3byBzZW1pY29sb24gY2hhcmFjdGVycw0KICB7dXNlci1kaXJ9ICAgICAgICAgICAgdGhlIH4vLmFzY2lpZG9jIGRpcmVjdG9yeSAoaWYgaXQgZXhpc3RzKQ0KICB7dmVyYm9zZX0gICAgICAgICAgICAgZGVmaW5lZCBhcyAnJyBpZiAtLXZlcmJvc2UgY29tbWFuZCBvcHRpb24gc3BlY2lmaWVkDQogIHt3an0gICAgICAgICAgICAgICAgICBXb3JkLWpvaW5lcg0KICB7endzcH0gICAgICAgICAgICAgICAgWmVyby13aWR0aCBzcGFjZSBjaGFyYWN0ZXIgZW50aXR5DQoNCltOT1RFXQ0KPT09PT09DQoxLiBJbnRyaW5zaWMgYXR0cmlidXRlcyBhcmUgZ2xvYmFsIHNvIGF2b2lkIGRlZmluaW5nIGN1c3RvbSBhdHRyaWJ1dGVzDQogICB3aXRoIHRoZSBzYW1lIG5hbWVzLg0KMi4gYHtvdXRmaWxlfWAsIGB7b3V0ZGlyfWAsIGB7aW5maWxlfWAsIGB7aW5kaXJ9YCBhdHRyaWJ1dGVzIGFyZQ0KICAgZWZmZWN0aXZlbHkgcmVhZC1vbmx5ICh5b3UgY2FuIHNldCB0aGVtIGJ1dCBpdCB3b24ndCBhZmZlY3QgdGhlDQogICBpbnB1dCBvciBvdXRwdXQgZmlsZSBwYXRocykuDQozLiAgU2VlIGFsc28gdGhlIDw8WDg4LEJhY2tlbmQgQXR0cmlidXRlcz4+IHNlY3Rpb24gZm9yIGF0dHJpYnV0ZXMNCiAgICB0aGF0IHJlbGF0ZSB0byBBc2NpaURvYyBYSFRNTCBmaWxlIGdlbmVyYXRpb24uDQo0LiBUaGUgZW50cmllcyB0aGF0IHRyYW5zbGF0ZSB0byBibGFuayBzdHJpbmdzIGFyZSBkZXNpZ25lZCB0byBiZSB1c2VkDQogICBmb3IgY29uZGl0aW9uYWwgdGV4dCBpbmNsdXNpb24uIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGBpZmRlZmAsDQogICBgaWZuZGVmYCBhbmQgYGVuZGlmYCBTeXN0ZW0gbWFjcm9zIGZvciBjb25kaXRpb25hbCBpbmNsdXNpb24uDQogICBmb290bm90ZTpbQ29uZGl0aW9uYWwgaW5jbHVzaW9uIHVzaW5nIGBpZmRlZmAgYW5kIGBpZm5kZWZgIG1hY3Jvcw0KICAgZGlmZmVycyBmcm9tIGF0dHJpYnV0ZSBjb25kaXRpb25hbCBpbmNsdXNpb24gaW4gdGhhdCB0aGUgZm9ybWVyDQogICBvY2N1cnMgd2hlbiB0aGUgZmlsZSBpcyByZWFkIHdoaWxlIHRoZSBsYXR0ZXIgb2NjdXJzIHdoZW4gdGhlDQogICBjb250ZW50cyBhcmUgd3JpdHRlbi5dDQo1LiBge2RvY2ZpbGV9YCBhbmQgYHtkb2NkaXJ9YCByZWZlciB0byByb290IGRvY3VtZW50IHNwZWNpZmllZCBvbiB0aGUNCiAgIGFzY2lpZG9jKDEpIGNvbW1hbmQtbGluZTsgYHtpbmZpbGV9YCBhbmQgYHtpbmRpcn1gIHJlZmVyIHRvIHRoZQ0KICAgY3VycmVudCBpbnB1dCBmaWxlIHdoaWNoIG1heSBiZSB0aGUgcm9vdCBkb2N1bWVudCBvciBhbiBpbmNsdWRlZA0KICAgZmlsZS4gV2hlbiB0aGUgaW5wdXQgaXMgYmVpbmcgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dA0KICAgKGBzdGRpbmApIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIHVuZGVmaW5lZC4NCjYuIElmIHRoZSBpbnB1dCBmaWxlIGlzIHRoZSBzdGFuZGFyZCBpbnB1dCBhbmQgdGhlIG91dHB1dCBmaWxlIGlzIG5vdA0KICAgdGhlIHN0YW5kYXJkIG91dHB1dCB0aGVuIGB7ZG9jbmFtZX1gIGlzIHRoZSBvdXRwdXQgZmlsZSBuYW1lIHNhbnMNCiAgIGZpbGUgZXh0ZW5zaW9uLg0KNy4gU2VlDQogICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05vbi1FbmdsaXNoX3VzYWdlX29mX3F1b3RhdGlvbl9tYXJrc1tub24tRW5nbGlzaA0KICAgdXNhZ2Ugb2YgcXVvdGF0aW9uIG1hcmtzXS4NCjguIFRoZSBge2Jsb2NrbmFtZX1gIGF0dHJpYnV0ZSBpZGVudGlmaWVzIHRoZSBzdHlsZSBvZiB0aGUgY3VycmVudA0KICAgYmxvY2suIEl0IGFwcGxpZXMgdG8gZGVsaW1pdGVkIGJsb2NrcywgbGlzdHMgYW5kIHRhYmxlcy4gSGVyZSBpcyBhDQogICBsaXN0IG9mIGB7YmxvY2tuYW1lfWAgdmFsdWVzIChkb2VzIG5vdCBpbmNsdWRlIGZpbHRlcnMgb3IgY3VzdG9tDQogICBibG9jayBhbmQgc3R5bGUgbmFtZXMpOg0KDQogICBkZWxpbWl0ZWQgYmxvY2tzOjogY29tbWVudCwgc2lkZWJhciwgb3BlbiwgcGFzcywgbGl0ZXJhbCwgdmVyc2UsDQogICBsaXN0aW5nLCBxdW90ZSwgZXhhbXBsZSwgbm90ZSwgdGlwLCBpbXBvcnRhbnQsIGNhdXRpb24sIHdhcm5pbmcsDQogICBhYnN0cmFjdCwgcGFydGludHJvDQoNCiAgIGxpc3RzOjogYXJhYmljLCBsb3dlcmFscGhhLCB1cHBlcmFscGhhLCBsb3dlcnJvbWFuLCB1cHBlcnJvbWFuLA0KICAgbGFiZWxlZCwgbGFiZWxlZDMsIGxhYmVsZWQ0LCBxYW5kYSwgaG9yaXpvbnRhbCwgYmlibGlvZ3JhcGh5LA0KICAgZ2xvc3NhcnkNCg0KICAgdGFibGVzOjogdGFibGUNCg0KPT09PT09DQoNCg0KW1tYNzNdXQ0KQmxvY2sgRWxlbWVudCBEZWZpbml0aW9ucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlIHN5bnRheCBhbmQgYmVoYXZpb3Igb2YgUGFyYWdyYXBoLCBEZWxpbWl0ZWRCbG9jaywgTGlzdCBhbmQgVGFibGUNCmJsb2NrIGVsZW1lbnRzIGlzIGRldGVybWluZWQgYnkgYmxvY2sgZGVmaW5pdGlvbnMgY29udGFpbmVkIGluDQo8PFg3LEFzY2lpRG9jIGNvbmZpZ3VyYXRpb24gZmlsZT4+IHNlY3Rpb25zLg0KDQpFYWNoIGRlZmluaXRpb24gY29uc2lzdHMgb2YgYSBzZWN0aW9uIHRpdGxlIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlDQpzZWN0aW9uIGVudHJpZXMuIEVhY2ggZW50cnkgZGVmaW5lcyBhIGJsb2NrIHBhcmFtZXRlciBjb250cm9sbGluZyBzb21lDQphc3BlY3Qgb2YgdGhlIGJsb2NrJ3MgYmVoYXZpb3IuIEhlcmUncyBhbiBleGFtcGxlOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCltibG9ja2RlZi1saXN0aW5nXQ0KZGVsaW1pdGVyPV4tezQsfSQNCnRlbXBsYXRlPWxpc3RpbmdibG9jaw0KcHJlc3Vicz1zcGVjaWFsY2hhcmFjdGVycyxjYWxsb3V0cw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkNvbmZpZ3VyYXRpb24gZmlsZSBibG9jayBkZWZpbml0aW9uIHNlY3Rpb25zIGFyZSBwcm9jZXNzZWQNCmluY3JlbWVudGFsbHkgYWZ0ZXIgZWFjaCBjb25maWd1cmF0aW9uIGZpbGUgaXMgbG9hZGVkLiBCbG9jaw0KZGVmaW5pdGlvbiBzZWN0aW9uIGVudHJpZXMgYXJlIG1lcmdlZCBpbnRvIHRoZSBibG9jayBkZWZpbml0aW9uLCB0aGlzDQphbGxvd3MgYmxvY2sgcGFyYW1ldGVycyB0byBiZSBvdmVycmlkZGVuIGFuZCBleHRlbmRlZCBieSBsYXRlcg0KPDxYMjcsbG9hZGluZyBjb25maWd1cmF0aW9uIGZpbGVzPj4uDQoNCkFzY2lpRG9jIFBhcmFncmFwaCwgRGVsaW1pdGVkQmxvY2ssIExpc3QgYW5kIFRhYmxlIGJsb2NrIGVsZW1lbnRzDQpzaGFyZSBhIGNvbW1vbiBzdWJzZXQgb2YgY29uZmlndXJhdGlvbiBmaWxlIHBhcmFtZXRlcnM6DQoNCmRlbGltaXRlcjo6DQogIEEgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgdGhlIGZpcnN0IGxpbmUgb2YgYSBibG9jaw0KICBlbGVtZW50IC0tIGluIHRoZSBjYXNlIG9mIERlbGltaXRlZEJsb2NrcyBhbmQgVGFibGVzIGl0IGFsc28gbWF0Y2hlcw0KICB0aGUgbGFzdCBsaW5lLg0KDQp0ZW1wbGF0ZTo6DQogIFRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgbWFya3VwIHRlbXBsYXRlIHNlY3Rpb24gdGhhdCB3aWxsDQogIGVudmVsb3BlIHRoZSBibG9jayBjb250ZW50cy4gVGhlIHBpcGUgKCd8JykgY2hhcmFjdGVyIGlzIHN1YnN0aXR1dGVkDQogIGZvciB0aGUgYmxvY2sgY29udGVudHMuIExpc3QgZWxlbWVudHMgdXNlIGEgc2V0IG9mIChsaXN0IHNwZWNpZmljKQ0KICB0YWcgcGFyYW1ldGVycyBpbnN0ZWFkIG9mIGEgc2luZ2xlIHRlbXBsYXRlLiBUaGUgdGVtcGxhdGUgbmFtZSBjYW4NCiAgY29udGFpbiBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhbGxvd2luZyBkeW5hbWljIHRlbXBsYXRlIHNlbGVjdGlvbiBhDQogIHRoZSB0aW1lIG9mIHRlbXBsYXRlIHN1YnN0aXR1dGlvbi4NCg0Kb3B0aW9uczo6DQogIEEgY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgZWxlbWVudCBzcGVjaWZpYyBvcHRpb24gbmFtZXMuIEluIGFkZGl0aW9uDQogIHRvIGJlaW5nIHVzZWQgaW50ZXJuYWxseSwgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGR1cmluZyBtYXJrdXAgdGFnDQogIGFuZCB0ZW1wbGF0ZSBzdWJzdGl0dXRpb24gYXMgYXR0cmlidXRlcyB3aXRoIGFuIGVtcHR5IHN0cmluZyB2YWx1ZQ0KICBuYW1lZCBsaWtlIGA8b3B0aW9uPi1vcHRpb25gICh3aGVyZSBgPG9wdGlvbj5gIGlzIHRoZSBvcHRpb24gbmFtZSkuDQogIFNlZSA8PFg3NCxhdHRyaWJ1dGUgb3B0aW9ucz4+IGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlDQogIG9wdGlvbnMuDQoNCnN1YnMsIHByZXN1YnMsIHBvc3RzdWJzOjoNCiAgKiAncHJlc3VicycgYW5kICdwb3N0c3VicycgYXJlIGxpc3RzIG9mIGNvbW1hIHNlcGFyYXRlZCBzdWJzdGl0dXRpb25zIHRoYXQgYXJlDQogICAgcGVyZm9ybWVkIG9uIHRoZSBibG9jayBjb250ZW50cy4gJ3ByZXN1YnMnIGlzIGFwcGxpZWQgZmlyc3QsDQogICAgJ3Bvc3RzdWJzJyAoaWYgc3BlY2lmaWVkKSBzZWNvbmQuDQoNCiAgKiAnc3VicycgaXMgYW4gYWxpYXMgZm9yICdwcmVzdWJzJy4NCg0KICAqIElmIGEgJ2ZpbHRlcicgaXMgYWxsb3dlZCAoUGFyYWdyYXBocywgRGVsaW1pdGVkQmxvY2tzIGFuZCBUYWJsZXMpDQogICAgYW5kIGhhcyBiZWVuIHNwZWNpZmllZCB0aGVuICdwcmVzdWJzJyBhbmQgJ3Bvc3RzdWJzJyBzdWJzdGl0dXRpb25zDQogICAgYXJlIHBlcmZvcm1lZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBmaWx0ZXIgaXMgcnVuIHJlc3BlY3RpdmVseS4NCg0KICAqIEFsbG93ZWQgdmFsdWVzOiAnc3BlY2lhbGNoYXJhY3RlcnMnLCAncXVvdGVzJywgJ3NwZWNpYWx3b3JkcycsDQogICAgJ3JlcGxhY2VtZW50cycsICdtYWNyb3MnLCAnYXR0cmlidXRlcycsICdjYWxsb3V0cycuDQoNCiAgKiBbW1gxMDJdXVRoZSBmb2xsb3dpbmcgY29tcG9zaXRlIHZhbHVlcyBhcmUgYWxzbyBhbGxvd2VkOg0KDQogICAgJ25vbmUnOzsNCiAgICAgICAgTm8gc3Vic3RpdHV0aW9ucy4NCiAgICAnbm9ybWFsJzs7DQogICAgICAgIFRoZSBmb2xsb3dpbmcgc3Vic3RpdHV0aW9ucyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOg0KICAgICAgICAnc3BlY2lhbGNoYXJhY3RlcnMnLCAncXVvdGVzJywgJ2F0dHJpYnV0ZXMnLCAnc3BlY2lhbHdvcmRzJywNCiAgICAgICAgJ3JlcGxhY2VtZW50cycsICdtYWNyb3MnLCAncmVwbGFjZW1lbnRzMicuDQogICAgJ3ZlcmJhdGltJzs7DQogICAgICAgIFRoZSBmb2xsb3dpbmcgc3Vic3RpdHV0aW9ucyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOg0KICAgICAgICAnc3BlY2lhbGNoYXJhY3RlcnMnIGFuZCAnY2FsbG91dHMnLg0KDQogICogJ25vcm1hbCcgYW5kICd2ZXJiYXRpbScgc3Vic3RpdHV0aW9ucyBjYW4gYmUgcmVkZWZpbmVkIGJ5IHdpdGgNCiAgICBgc3Vic25vcm1hbGAgYW5kIGBzdWJzdmVyYmF0aW1gIGVudHJpZXMgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUNCiAgICBgW21pc2NlbGxhbmVvdXNdYCBzZWN0aW9uLg0KDQogICogVGhlIHN1YnN0aXR1dGlvbnMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUNCiAgICBsaXN0ZWQgYW5kIGNhbiBhcHBlYXIgbW9yZSB0aGFuIG9uY2UuDQoNCmZpbHRlcjo6DQogIFRoaXMgb3B0aW9uYWwgZW50cnkgc3BlY2lmaWVzIGFuIGV4ZWN1dGFibGUgc2hlbGwgY29tbWFuZCBmb3INCiAgcHJvY2Vzc2luZyBibG9jayBjb250ZW50IChQYXJhZ3JhcGhzLCBEZWxpbWl0ZWRCbG9ja3MgYW5kIFRhYmxlcykuDQogIFRoZSBmaWx0ZXIgY29tbWFuZCBjYW4gY29udGFpbiBhdHRyaWJ1dGUgcmVmZXJlbmNlcy4NCg0KcG9zYXR0cnM6Og0KICBPcHRpb25hbCBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBwb3NpdGlvbmFsIGF0dHJpYnV0ZSBuYW1lcy4gVGhpcw0KICBsaXN0IG1hcHMgcG9zaXRpb25hbCBhdHRyaWJ1dGVzIChpbiB0aGUgYmxvY2sncyA8PFgyMSxhdHRyaWJ1dGUNCiAgbGlzdD4+KSB0byBuYW1lZCBibG9jayBhdHRyaWJ1dGVzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUsIGZyb20gdGhlDQogIFF1b3RlQmxvY2sgZGVmaW5pdGlvbiwgbWFwcyB0aGUgZmlyc3QgYW5kIHNlY3Rpb24gcG9zaXRpb25hbA0KICBhdHRyaWJ1dGVzOg0KDQogIHBvc2F0dHJzPWF0dHJpYnV0aW9uLGNpdGV0aXRsZQ0KDQpzdHlsZTo6DQogIFRoaXMgb3B0aW9uYWwgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBzdHlsZSBuYW1lLg0KDQoNCjxzdHlsZW5hbWU+LXN0eWxlOjoNCiAgT3B0aW9uYWwgc3R5bGUgZGVmaW5pdGlvbiAoc2VlIDw8WDIzLFN0eWxlcz4+IGJlbG93KS4NCg0KVGhlIGZvbGxvd2luZyBibG9jayBwYXJhbWV0ZXJzIGJlaGF2ZSBsaWtlIGRvY3VtZW50IGF0dHJpYnV0ZXMgYW5kIGNhbg0KYmUgc2V0IGluIGJsb2NrIGF0dHJpYnV0ZSBsaXN0cyBhbmQgc3R5bGUgZGVmaW5pdGlvbnM6ICd0ZW1wbGF0ZScsDQonb3B0aW9ucycsICdzdWJzJywgJ3ByZXN1YnMnLCAncG9zdHN1YnMnLCAnZmlsdGVyJy4NCg0KW1tYMjNdXQ0KU3R5bGVzDQp+fn5+fn4NCkEgc3R5bGUgaXMgYSBzZXQgb2YgYmxvY2sgcGFyYW1ldGVyIGJ1bmRsZWQgYXMgYSBzaW5nbGUgbmFtZWQNCnBhcmFtZXRlci4gVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlZmluZXMgYSBzdHlsZSBuYW1lZCAndmVyYmF0aW0nOg0KDQogIHZlcmJhdGltLXN0eWxlPXRlbXBsYXRlPSJsaXRlcmFsYmxvY2siLHN1YnM9InZlcmJhdGltIg0KDQpJZiBhIGJsb2NrJ3MgPDxYMjEsYXR0cmlidXRlIGxpc3Q+PiBjb250YWlucyBhICdzdHlsZScgYXR0cmlidXRlIHRoZW4NCnRoZSBjb3JyZXNwb25kaW5nIHN0eWxlIHBhcmFtZXRlcnMgYXJlIGJlIG1lcmdlZCBpbnRvIHRoZSBkZWZhdWx0DQpibG9jayBkZWZpbml0aW9uIHBhcmFtZXRlcnMuDQoNCi0gQWxsIHN0eWxlIHBhcmFtZXRlciBuYW1lcyBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggYC1zdHlsZWAgYW5kIHRoZQ0KICBzdHlsZSBwYXJhbWV0ZXIgdmFsdWUgaXMgaW4gdGhlIGZvcm0gb2YgYSBsaXN0IG9mIDw8WDIxLG5hbWVkDQogIGF0dHJpYnV0ZXM+Pi4NCi0gVGhlICd0ZW1wbGF0ZScgc3R5bGUgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSwgb3RoZXIgcGFyYW1ldGVycyBjYW4gYmUNCiAgb21pdHRlZCBpbiB3aGljaCBjYXNlIHRoZXkgaW5oZXJpdCB0aGVpciB2YWx1ZXMgZnJvbSB0aGUgZGVmYXVsdA0KICBibG9jayBkZWZpbml0aW9uIHBhcmFtZXRlcnMuDQotIE11bHRpLWl0ZW0gc3R5bGUgcGFyYW1ldGVycyAoJ3N1YnMnLCdwcmVzdWJzJywncG9zdHN1YnMnLCdwb3NhdHRycycpDQogIG11c3QgYmUgc3BlY2lmaWVkIHVzaW5nIFB5dGhvbiB0dXBsZSBzeW50YXggKHJhdGhlciB0aGFuIGEgc2ltcGxlDQogIGxpc3Qgb2YgdmFsdWVzIGFzIHRoZXkgaW4gc2VwYXJhdGUgZW50cmllcykgZS5nLg0KICBgcG9zdHN1YnM9KCJjYWxsb3V0cyIsKWAgbm90IGBwb3N0c3Vicz0iY2FsbG91dHMiYC4NCg0KUGFyYWdyYXBocw0Kfn5+fn5+fn5+fg0KUGFyYWdyYXBoIHRyYW5zbGF0aW9uIGlzIGNvbnRyb2xsZWQgYnkgYFtwYXJhZGVmLSpdYCBjb25maWd1cmF0aW9uDQpmaWxlIHNlY3Rpb24gZW50cmllcy4gVXNlcnMgY2FuIGRlZmluZSBuZXcgdHlwZXMgb2YgcGFyYWdyYXBocyBhbmQNCm1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgZXhpc3RpbmcgdHlwZXMgYnkgZWRpdGluZyBBc2NpaURvYw0KY29uZmlndXJhdGlvbiBmaWxlcy4NCg0KSGVyZSBpcyB0aGUgc2hpcHBlZCBEZWZhdWx0IHBhcmFncmFwaCBkZWZpbml0aW9uOg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KW3BhcmFkZWYtZGVmYXVsdF0NCmRlbGltaXRlcj0oP1A8dGV4dD5cUy4qKQ0KdGVtcGxhdGU9cGFyYWdyYXBoDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpUaGUgbm9ybWFsIHBhcmFncmFwaCBkZWZpbml0aW9uIGhhcyBhIGNvdXBsZSBvZiBzcGVjaWFsIHByb3BlcnRpZXM6DQoNCjEuIEl0IG11c3QgZXhpc3QgYW5kIGJlIGRlZmluZWQgaW4gYSBjb25maWd1cmF0aW9uIGZpbGUgc2VjdGlvbiBuYW1lZA0KICAgYFtwYXJhZGVmLWRlZmF1bHRdYC4NCjIuIElycmVzcGVjdGl2ZSBvZiBpdHMgcG9zaXRpb24gaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZGVmYXVsdA0KICAgcGFyYWdyYXBoIGRvY3VtZW50IG1hdGNoZXMgYXJlIGF0dGVtcHRlZCBvbmx5IGFmdGVyIHRyeWluZyBhbGwNCiAgIG90aGVyIHBhcmFncmFwaCB0eXBlcy4NCg0KUGFyYWdyYXBoIHNwZWNpZmljIGJsb2NrIHBhcmFtZXRlciBub3RlczoNCg0KZGVsaW1pdGVyOjoNCiAgVGhpcyByZWd1bGFyIGV4cHJlc3Npb24gbXVzdCBjb250YWluIHRoZSBuYW1lZCBncm91cCAndGV4dCcgd2hpY2gNCiAgbWF0Y2hlcyB0aGUgdGV4dCBvbiB0aGUgZmlyc3QgbGluZS4gIFBhcmFncmFwaHMgYXJlIHRlcm1pbmF0ZWQgYnkgYQ0KICBibGFuayBsaW5lLCB0aGUgZW5kIG9mIGZpbGUsIG9yIHRoZSBzdGFydCBvZiBhIERlbGltaXRlZEJsb2NrLg0KDQpvcHRpb25zOjoNCiAgVGhlICdsaXN0ZWxlbWVudCcgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHBhcmFncmFwaHMgb2YgdGhpcyB0eXBlIHdpbGwNCiAgYXV0b21hdGljYWxseSBiZSBjb25zaWRlcmVkIHBhcnQgb2YgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGxpc3QNCiAgaXRlbXMuICBUaGUgJ3NraXAnIG9wdGlvbiBjYXVzZXMgdGhlIHBhcmFncmFwaCB0byBiZSB0cmVhdGVkIGFzIGENCiAgY29tbWVudCAoc2VlIDw8WDI2LENvbW1lbnRCbG9ja3M+PikuDQoNCi5QYXJhZ3JhcGggcHJvY2Vzc2luZyBwcm9jZWVkcyBhcyBmb2xsb3dzOg0KMS4gVGhlIHBhcmFncmFwaCB0ZXh0IGlzIGFsaWduZWQgdG8gdGhlIGxlZnQgbWFyZ2luLg0KMi4gT3B0aW9uYWwgJ3ByZXN1YnMnIGlubGluZSBzdWJzdGl0dXRpb25zIGFyZSBwZXJmb3JtZWQgb24gdGhlDQogICBwYXJhZ3JhcGggdGV4dC4NCjMuIElmIGEgZmlsdGVyIGNvbW1hbmQgaXMgc3BlY2lmaWVkIGl0IGlzIGV4ZWN1dGVkIGFuZCB0aGUgcGFyYWdyYXBoDQogICB0ZXh0IHBpcGVkIHRvIGl0cyBzdGFuZGFyZCBpbnB1dDsgdGhlIGZpbHRlciBvdXRwdXQgcmVwbGFjZXMgdGhlDQogICBwYXJhZ3JhcGggdGV4dC4NCjQuIE9wdGlvbmFsICdwb3N0c3VicycgaW5saW5lIHN1YnN0aXR1dGlvbnMgYXJlIHBlcmZvcm1lZCBvbiB0aGUNCiAgIHBhcmFncmFwaCB0ZXh0Lg0KNS4gVGhlIHBhcmFncmFwaCB0ZXh0IGlzIGVudmVsb3BlZCBieSB0aGUgcGFyYWdyYXBoJ3MgbWFya3VwIHRlbXBsYXRlDQogICBhbmQgd3JpdHRlbiB0byB0aGUgb3V0cHV0IGZpbGUuDQoNCkRlbGltaXRlZCBCbG9ja3MNCn5+fn5+fn5+fn5+fn5+fn4NCkRlbGltaXRlZEJsb2NrICdvcHRpb25zJyB2YWx1ZXMgYXJlOg0KDQpzZWN0aW9uYm9keTo6DQogICAgVGhlIGJsb2NrIGNvbnRlbnRzIGFyZSBwcm9jZXNzZWQgYXMgYSBTZWN0aW9uQm9keS4NCg0Kc2tpcDo6DQogICAgVGhlIGJsb2NrIGlzIHRyZWF0ZWQgYXMgYSBjb21tZW50IChzZWUgPDxYMjYsQ29tbWVudEJsb2Nrcz4+KS4NCiAgICBQcmVjZWRpbmcgPDxYMjEsYXR0cmlidXRlIGxpc3RzPj4gYW5kIDw8WDQyLGJsb2NrIHRpdGxlcz4+IGFyZSBub3QNCiAgICBjb25zdW1lZC4NCg0KJ3ByZXN1YnMnLCAncG9zdHN1YnMnIGFuZCAnZmlsdGVyJyBlbnRyaWVzIGFyZSBpZ25vcmVkIHdoZW4NCidzZWN0aW9uYm9keScgb3IgJ3NraXAnIG9wdGlvbnMgYXJlIHNldC4NCg0KRGVsaW1pdGVkQmxvY2sgcHJvY2Vzc2luZyBwcm9jZWVkcyBhcyBmb2xsb3dzOg0KDQoxLiBPcHRpb25hbCAncHJlc3Vicycgc3Vic3RpdHV0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIHRoZSBibG9jaw0KICAgY29udGVudHMuDQoyLiBJZiBhIGZpbHRlciBpcyBzcGVjaWZpZWQgaXQgaXMgZXhlY3V0ZWQgYW5kIHRoZSBibG9jaydzIGNvbnRlbnRzDQogICBwaXBlZCB0byBpdHMgc3RhbmRhcmQgaW5wdXQuIFRoZSBmaWx0ZXIgb3V0cHV0IHJlcGxhY2VzIHRoZSBibG9jaw0KICAgY29udGVudHMuDQozLiBPcHRpb25hbCAncG9zdHN1YnMnIHN1YnN0aXR1dGlvbnMgYXJlIHBlcmZvcm1lZCBvbiB0aGUgYmxvY2sNCiAgIGNvbnRlbnRzLg0KNC4gVGhlIGJsb2NrIGNvbnRlbnRzIGlzIGVudmVsb3BlZCBieSB0aGUgYmxvY2sncyBtYXJrdXAgdGVtcGxhdGUgYW5kDQogICB3cml0dGVuIHRvIHRoZSBvdXRwdXQgZmlsZS4NCg0KVElQOiBBdHRyaWJ1dGUgZXhwYW5zaW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgYmxvY2sgZmlsdGVyIGNvbW1hbmQNCmJlZm9yZSBpdCBpcyBleGVjdXRlZCwgdGhpcyBpcyB1c2VmdWwgZm9yIHBhc3NpbmcgYXJndW1lbnRzIHRvIHRoZQ0KZmlsdGVyLg0KDQpMaXN0cw0Kfn5+fn4NCkxpc3QgYmVoYXZpb3IgYW5kIHN5bnRheCBpcyBkZXRlcm1pbmVkIGJ5IGBbbGlzdGRlZi0qXWAgY29uZmlndXJhdGlvbg0KZmlsZSBzZWN0aW9ucy4gVGhlIHVzZXIgY2FuIGNoYW5nZSBleGlzdGluZyBsaXN0IGJlaGF2aW9yIGFuZCBhZGQgbmV3DQpsaXN0IHR5cGVzIGJ5IGVkaXRpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4NCg0KTGlzdCBzcGVjaWZpYyBibG9jayBkZWZpbml0aW9uIG5vdGVzOg0KDQp0eXBlOjoNCiAgVGhpcyBpcyBlaXRoZXIgJ2J1bGxldGVkJywnbnVtYmVyZWQnLCdsYWJlbGVkJyBvciAnY2FsbG91dCcuDQoNCmRlbGltaXRlcjo6DQogIEEgUHl0aG9uIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgdGhlIGZpcnN0IGxpbmUgb2YgYQ0KICBsaXN0IGVsZW1lbnQgZW50cnkuIFRoaXMgZXhwcmVzc2lvbiBjYW4gY29udGFpbiB0aGUgbmFtZWQgZ3JvdXBzDQogICd0ZXh0JyAoYnVsbGV0ZWQgZ3JvdXBzKSwgJ2luZGV4JyBhbmQgJ3RleHQnIChudW1iZXJlZCBsaXN0cyksDQogICdsYWJlbCcgYW5kICd0ZXh0JyAobGFiZWxlZCBsaXN0cykuDQoNCnRhZ3M6Og0KICBUaGUgYDxuYW1lPmAgb2YgdGhlIGBbbGlzdHRhZ3MtPG5hbWU+XWAgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb24NCiAgY29udGFpbmluZyBsaXN0IG1hcmt1cCB0YWcgZGVmaW5pdGlvbnMuICBUaGUgdGFnIGVudHJpZXMgKCdsaXN0JywNCiAgJ2VudHJ5JywgJ2xhYmVsJywgJ3Rlcm0nLCAndGV4dCcpIG1hcCB0aGUgQXNjaWlEb2MgbGlzdCBzdHJ1Y3R1cmUgdG8NCiAgYmFja2VuZCBtYXJrdXA7IHNlZSB0aGUgJ2xpc3R0YWdzJyBzZWN0aW9ucyBpbiB0aGUgQXNjaWlEb2MNCiAgZGlzdHJpYnV0ZWQgYmFja2VuZCBgLmNvbmZgIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGV4YW1wbGVzLg0KDQpUYWJsZXMNCn5+fn5+fg0KVGFibGUgYmVoYXZpb3IgYW5kIHN5bnRheCBpcyBkZXRlcm1pbmVkIGJ5IGBbdGFibGVkZWYtKl1gIGFuZA0KYFt0YWJsZXRhZ3MtKl1gIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWN0aW9ucy4gVGhlIHVzZXIgY2FuIGNoYW5nZQ0KZXhpc3RpbmcgdGFibGUgYmVoYXZpb3IgYW5kIGFkZCBuZXcgdGFibGUgdHlwZXMgYnkgZWRpdGluZw0KY29uZmlndXJhdGlvbiBmaWxlcy4gIFRoZSBmb2xsb3dpbmcgYFt0YWJsZWRlZi0qXWAgc2VjdGlvbiBlbnRyaWVzDQpnZW5lcmF0ZSB0YWJsZSBvdXRwdXQgbWFya3VwIGVsZW1lbnRzOg0KDQpjb2xzcGVjOjoNCiAgVGhlIHRhYmxlICdjb2xzcGVjJyB0YWcgZGVmaW5pdGlvbi4NCg0KaGVhZHJvdywgZm9vdHJvdywgYm9keXJvdzo6DQogIFRhYmxlIGhlYWRlciwgZm9vdGVyIGFuZCBib2R5IHJvdyB0YWcgZGVmaW5pdGlvbnMuICdoZWFkcm93JyBhbmQNCiAgJ2Zvb3Ryb3cnIHRhYmxlIGRlZmluaXRpb24gZW50cmllcyBkZWZhdWx0IHRvICdib2R5cm93JyBpZg0KICB0aGV5IGFyZSB1bmRlZmluZWQuDQoNCmhlYWRkYXRhLCBmb290ZGF0YSwgYm9keWRhdGE6Og0KICBUYWJsZSBoZWFkZXIsIGZvb3RlciBhbmQgYm9keSBkYXRhIHRhZyBkZWZpbml0aW9ucy4gJ2hlYWRkYXRhJyBhbmQNCiAgJ2Zvb3RkYXRhJyB0YWJsZSBkZWZpbml0aW9uIGVudHJpZXMgZGVmYXVsdCB0byAnYm9keWRhdGEnIGlmIHRoZXkNCiAgYXJlIHVuZGVmaW5lZC4NCg0KcGFyYWdyYXBoOjoNCiAgSWYgdGhlICdwYXJhZ3JhcGgnIHRhZyBpcyBzcGVjaWZpZWQgdGhlbiBibGFuayBsaW5lcyBpbiB0aGUgY2VsbA0KICBkYXRhIGFyZSB0cmVhdGVkIGFzIHBhcmFncmFwaCBkZWxpbWl0ZXJzIGFuZCBtYXJrZWQgdXAgdXNpbmcgdGhpcw0KICB0YWcuDQoNCltbWDRdXQ0KVGFibGUgYmVoYXZpb3IgaXMgYWxzbyBpbmZsdWVuY2VkIGJ5IHRoZSBmb2xsb3dpbmcgYFttaXNjZWxsYW5lb3VzXWANCmNvbmZpZ3VyYXRpb24gZmlsZSBlbnRyaWVzOg0KDQpwYWdld2lkdGg6Og0KICBUaGlzIGludGVnZXIgdmFsdWUgaXMgdGhlIHByaW50YWJsZSB3aWR0aCBvZiB0aGUgb3V0cHV0IG1lZGlhLiBTZWUNCiAgPDxYNjksdGFibGUgYXR0cmlidXRlcz4+Lg0KDQpwYWdldW5pdHM6Og0KICBUaGUgdW5pdHMgb2Ygd2lkdGggaW4gb3V0cHV0IG1hcmt1cCB3aWR0aCBhdHRyaWJ1dGUgdmFsdWVzLg0KDQouVGFibGUgZGVmaW5pdGlvbiBiZWhhdmlvcg0KLSBUaGUgb3V0cHV0IG1hcmt1cCBnZW5lcmF0aW9uIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byB3b3JrIHdpdGgNCiAgdGhlIEhUTUwgYW5kIENBTFMgKERvY0Jvb2spIHRhYmxlIG1vZGVscywgYnV0IHNob3VsZCBiZSBhZGFwdGFibGUgdG8NCiAgbW9zdCBYTUwgdGFibGUgc2NoZW1hLg0KLSBUYWJsZSBkZWZpbml0aW9ucyBjYW4gYmUgYGBtaXhlZCBpbicnIGZyb20gbXVsdGlwbGUgY2FzY2FkaW5nDQogIGNvbmZpZ3VyYXRpb24gZmlsZXMuDQotIE5ldyB0YWJsZSBkZWZpbml0aW9ucyBpbmhlcml0IHRoZSBkZWZhdWx0IHRhYmxlIGFuZCB0YWJsZSB0YWdzDQogIGRlZmluaXRpb25zIChgW3RhYmxlZGVmLWRlZmF1bHRdYCBhbmQgYFt0YWJsZXRhZ3MtZGVmYXVsdF1gKSBzbyB5b3UNCiAgb25seSBuZWVkIHRvIG92ZXJyaWRlIHRob3NlIGNvbmYgZmlsZSBlbnRyaWVzIHRoYXQgcmVxdWlyZQ0KICBtb2RpZmljYXRpb24uDQoNCg0KW1tYNTldXQ0KRmlsdGVycw0KLS0tLS0tLQ0KQXNjaWlEb2MgZmlsdGVycyBhbGxvdyBleHRlcm5hbCBjb21tYW5kcyB0byBwcm9jZXNzIEFzY2lpRG9jDQonUGFyYWdyYXBocycsICdEZWxpbWl0ZWRCbG9ja3MnIGFuZCAnVGFibGUnIGNvbnRlbnQuIEZpbHRlcnMgYXJlDQpwcmltYXJpbHkgYW4gZXh0ZW5zaW9uIG1lY2hhbmlzbSBmb3IgZ2VuZXJhdGluZyBzcGVjaWFsaXplZCBvdXRwdXRzLg0KRmlsdGVycyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgZXh0ZXJuYWwgY29tbWFuZHMgd2hpY2ggYXJlIHNwZWNpZmllZCBpbg0KY29uZmlndXJhdGlvbiBmaWxlIGRlZmluaXRpb25zLg0KDQpUaGVyZSdzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGUgZmlsdGVycywgdGhleSdyZSBqdXN0IHN0YW5kYXJkIFVOSVgNCmZpbHRlcnM6IHRoZXkgcmVhZCB0ZXh0IGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBwcm9jZXNzIGl0LCBhbmQgd3JpdGUNCnRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuDQoNClRoZSBhc2NpaWRvYygxKSBjb21tYW5kIGAtLWZpbHRlcmAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGluc3RhbGwgYW5kDQpyZW1vdmUgZmlsdGVycy4gVGhlIHNhbWUgb3B0aW9uIGlzIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IGxvYWQgYQ0KZmlsdGVyLg0KDQpBdHRyaWJ1dGUgc3Vic3RpdHV0aW9uIGlzIHBlcmZvcm1lZCBvbiB0aGUgZmlsdGVyIGNvbW1hbmQgcHJpb3IgdG8NCmV4ZWN1dGlvbiAtLSBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIHRvIHBhc3MgcGFyYW1ldGVycyBmcm9tIHRoZQ0KQXNjaWlEb2Mgc291cmNlIGRvY3VtZW50IHRvIHRoZSBmaWx0ZXIuDQoNCldBUk5JTkc6IEZpbHRlcnMgc29tZXRpbWVzIGluY2x1ZGVkIGV4ZWN1dGFibGUgY29kZS4gQmVmb3JlIGluc3RhbGxpbmcNCmEgZmlsdGVyIHlvdSBzaG91bGQgdmVyaWZ5IHRoYXQgaXQgaXMgZnJvbSBhIHRydXN0ZWQgc291cmNlLg0KDQpGaWx0ZXIgU2VhcmNoIFBhdGhzDQp+fn5+fn5+fn5+fn5+fn5+fn5+DQpJZiB0aGUgZmlsdGVyIGNvbW1hbmQgZG9lcyBub3Qgc3BlY2lmeSBhIGRpcmVjdG9yeSBwYXRoIHRoZW4NCmFzY2lpZG9jKDEpIHJlY3Vyc2l2ZWx5IHNlYXJjaGVzIGZvciB0aGUgZXhlY3V0YWJsZSBmaWx0ZXIgY29tbWFuZDoNCg0KLSBGaXJzdCBpdCBsb29rcyBpbiB0aGUgdXNlcidzIGAkSE9NRS8uYXNjaWlkb2MvZmlsdGVyc2AgZGlyZWN0b3J5Lg0KLSBOZXh0IHRoZSBnbG9iYWwgZmlsdGVycyBkaXJlY3RvcnkgKHVzdWFsbHkgYC9ldGMvYXNjaWlkb2MvZmlsdGVyc2ANCiAgb3IgYC91c3IvbG9jYWwvZXRjL2FzY2lpZG9jYCkgZGlyZWN0b3J5IGlzIHNlYXJjaGVkLg0KLSBUaGVuIGl0IGxvb2tzIGluIHRoZSBhc2NpaWRvYygxKSBgLi9maWx0ZXJzYCBkaXJlY3RvcnkuDQotIEZpbmFsbHkgaXQgcmVsaWVzIG9uIHRoZSBleGVjdXRpbmcgc2hlbGwgdG8gc2VhcmNoIHRoZSBlbnZpcm9ubWVudA0KICBzZWFyY2ggcGF0aCAoYCRQQVRIYCkuDQoNClN0YW5kYXJkIHByYWN0aWNlIGlzIHRvIGluc3RhbGwgZWFjaCBmaWx0ZXIgaW4gaXQncyBvd24gc3ViLWRpcmVjdG9yeQ0Kd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmaWx0ZXIncyBzdHlsZSBkZWZpbml0aW9uLiBGb3IgZXhhbXBsZSB0aGUNCm11c2ljIGZpbHRlcidzIHN0eWxlIG5hbWUgaXMgJ211c2ljJyBzbyBpdCdzIGNvbmZpZ3VyYXRpb24gYW5kIGZpbHRlcg0KZmlsZXMgYXJlIHN0b3JlZCBpbiB0aGUgYGZpbHRlcnMvbXVzaWNgIGRpcmVjdG9yeS4NCg0KRmlsdGVyIENvbmZpZ3VyYXRpb24gRmlsZXMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpGaWx0ZXJzIGFyZSBub3JtYWxseSBhY2NvbXBhbmllZCBieSBhIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWluaW5nIGENClBhcmFncmFwaCBvciBEZWxpbWl0ZWRCbG9jayBkZWZpbml0aW9uIGFsb25nIHdpdGggY29ycmVzcG9uZGluZyBtYXJrdXANCnRlbXBsYXRlcy4NCg0KV2hpbGUgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIG5ldyAnUGFyYWdyYXBoJyBvciAnRGVsaW1pdGVkQmxvY2snDQpkZWZpbml0aW9ucyB0aGUgcHJlZmVycmVkIHdheSB0byBpbXBsZW1lbnQgYSBmaWx0ZXIgaXMgdG8gYWRkIGENCjw8WDIzLHN0eWxlPj4gdG8gdGhlIGV4aXN0aW5nIFBhcmFncmFwaCBhbmQgTGlzdGluZ0Jsb2NrIGRlZmluaXRpb25zDQooYWxsIGZpbHRlcnMgc2hpcHBlZCB3aXRoIEFzY2lpRG9jIHVzZSB0aGlzIHRlY2huaXF1ZSkuIFRoZSBmaWx0ZXIgaXMNCmFwcGxpZWQgdG8gdGhlIHBhcmFncmFwaCBvciBkZWxpbWl0ZWQgYmxvY2sgYnkgcHJlY2VkaW5nIGl0IHdpdGggYW4NCmF0dHJpYnV0ZSBsaXN0OiB0aGUgZmlyc3QgcG9zaXRpb25hbCBhdHRyaWJ1dGUgaXMgdGhlIHN0eWxlIG5hbWUsDQpyZW1haW5pbmcgYXR0cmlidXRlcyBhcmUgbm9ybWFsbHkgZmlsdGVyIHNwZWNpZmljIHBhcmFtZXRlcnMuDQoNCmFzY2lpZG9jKDEpIGF1dG8tbG9hZHMgYWxsIGAuY29uZmAgZmlsZXMgZm91bmQgaW4gdGhlIGZpbHRlciBzZWFyY2gNCnBhdGhzIHVubGVzcyB0aGUgY29udGFpbmVyIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGEgZmlsZSBuYW1lZA0KYF9fbm9hdXRvbG9hZF9fYCAoc2VlIHByZXZpb3VzIHNlY3Rpb24pLiBUaGUgYF9fbm9hdXRvbG9hZF9fYCBmZWF0dXJlDQppcyB1c2VkIGZvciBmaWx0ZXJzIHRoYXQgd2lsbCBiZSBsb2FkZWQgbWFudWFsbHkgdXNpbmcgdGhlIGAtLWZpbHRlcmANCm9wdGlvbi4NCg0KW1tYNTZdXQ0KRXhhbXBsZSBGaWx0ZXINCn5+fn5+fn5+fn5+fn5+DQpBc2NpaURvYyBjb21lcyB3aXRoIGEgdG95IGZpbHRlciBmb3IgaGlnaGxpZ2h0aW5nIHNvdXJjZSBjb2RlIGtleXdvcmRzDQphbmQgY29tbWVudHMuICBTZWUgYWxzbyB0aGUgYC4vZmlsdGVycy9jb2RlL2NvZGUtZmlsdGVyLXJlYWRtZS50eHRgDQpmaWxlLg0KDQpOT1RFOiBUaGUgcHVycG9zZSBvZiB0aGlzIHRveSBmaWx0ZXIgaXMgdG8gZGVtb25zdHJhdGUgaG93IHRvIHdyaXRlIGENCmZpbHRlciAtLSBpdCdzIG11Y2ggdG8gc2ltcGxpc3RpYyB0byBiZSBwYXNzZWQgb2ZmIGFzIGEgY29kZSBzeW50YXgNCmhpZ2hsaWdodGVyLiAgSWYgeW91IHdhbnQgYSBmdWxsIGZlYXR1cmVkIG11bHRpLWxhbmd1YWdlIGhpZ2hsaWdodGVyDQp1c2UgdGhlIHt3ZWJzaXRlfXNvdXJjZS1oaWdobGlnaHQtZmlsdGVyLmh0bWxbc291cmNlIGNvZGUgaGlnaGxpZ2h0ZXINCmZpbHRlcl0uDQoNCkJ1aWx0LWluIGZpbHRlcnMNCn5+fn5+fn5+fn5+fn5+fn4NClRoZSBBc2NpaURvYyBkaXN0cmlidXRpb24gaW5jbHVkZXMgJ3NvdXJjZScsICdtdXNpYycsICdsYXRleCcgYW5kDQonZ3JhcGh2aXonIGZpbHRlcnMsIGRldGFpbHMgYXJlIG9uIHRoZQ0Ke3dlYnNpdGV9aW5kZXguaHRtbCNfZmlsdGVyc1tBc2NpaURvYyB3ZWJzaXRlXS4NCg0KW2NvbHM9IjFlLDUiLGZyYW1lPSJ0b3Bib3QiLG9wdGlvbnM9ImhlYWRlciJdDQouQnVpbHQtaW4gZmlsdGVycyBsaXN0DQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCnxGaWx0ZXIgbmFtZSB8RGVzY3JpcHRpb24NCg0KfG11c2ljDQp8QSB7d2Vic2l0ZX1tdXNpYy1maWx0ZXIuaHRtbFttdXNpYyBmaWx0ZXJdIGlzIGluY2x1ZGVkIGluIHRoZQ0KZGlzdHJpYnV0aW9uIGAuL2ZpbHRlcnMvYCBkaXJlY3RvcnkuIEl0IHRyYW5zbGF0ZXMgbXVzaWMgaW4NCmh0dHA6Ly9saWx5cG9uZC5vcmcvW0xpbHlQb25kXSBvciBodHRwOi8vYWJjbm90YXRpb24ub3JnLnVrL1tBQkNdDQpub3RhdGlvbiB0byBzdGFuZGFyZCBjbGFzc2ljYWwgbm90YXRpb24uDQoNCnxzb3VyY2UNCnxBIHt3ZWJzaXRlfXNvdXJjZS1oaWdobGlnaHQtZmlsdGVyLmh0bWxbc291cmNlIGNvZGUgaGlnaGxpZ2h0IGZpbHRlcl0NCmlzIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gYC4vZmlsdGVycy9gIGRpcmVjdG9yeS4NCg0KfGxhdGV4DQp8VGhlIHt3ZWJzaXRlfWxhdGV4LWZpbHRlci5odG1sW0FzY2lpRG9jIExhVGVYIGZpbHRlcl0gdHJhbnNsYXRlcw0KTGFUZVggc291cmNlIHRvIGEgUE5HIGltYWdlIHRoYXQgaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbnRvIHRoZQ0KQXNjaWlEb2Mgb3V0cHV0IGRvY3VtZW50cy4NCg0KfGdyYXBodml6DQp8R291aWNoaSBJaXNha2EgaGFzIHdyaXR0ZW4gYSBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9bR3JhcGh2aXpdDQpmaWx0ZXIgZm9yIEFzY2lpRG9jLiAgR3JhcGh2aXogZ2VuZXJhdGVzIGRpYWdyYW1zIGZyb20gYSB0ZXh0dWFsDQpzcGVjaWZpY2F0aW9uLiBHb3VpY2hpIElpc2FrYSdzIEdyYXBodml6IGZpbHRlciBpcyBpbmNsdWRlZCBpbiB0aGUNCkFzY2lpRG9jIGRpc3RyaWJ1dGlvbi4gSGVyZSBhcmUgc29tZQ0Ke3dlYnNpdGV9YXNjaWlkb2MtZ3JhcGh2aXotc2FtcGxlLmh0bWxbQXNjaWlEb2MgR3JhcGh2aXogZXhhbXBsZXNdLg0KDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KW1tYNThdXQ0KRmlsdGVyIHBsdWdpbnMNCn5+fn5+fn5+fn5+fn5+DQpGaWx0ZXIgPDxYMTAxLHBsdWdpbnM+PiBhcmUgYSBtZWNoYW5pc20gZm9yIGRpc3RyaWJ1dGluZyBBc2NpaURvYw0KZmlsdGVycy4gIEEgZmlsdGVyIHBsdWdpbiBpcyBhIFppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIGZpbGVzIHRoYXQNCmNvbnN0aXR1dGUgYSBmaWx0ZXIuICBUaGUgYXNjaWlkb2MoMSkgYC0tZmlsdGVyYCBvcHRpb24gaXMgdXNlZCB0bw0KbG9hZCBhbmQgbWFuYWdlIGZpbGVyIDw8WDEwMSxwbHVnaW5zPj4uDQoNCi0gRmlsdGVyIHBsdWdpbnMgPDxYMjcsdGFrZSBwcmVjZWRlbmNlPj4gb3ZlciBidWlsdC1pbiBmaWx0ZXJzIHdpdGgNCiAgdGhlIHNhbWUgbmFtZS4NCi0gQnkgZGVmYXVsdCBmaWx0ZXIgcGx1Z2lucyBhcmUgaW5zdGFsbGVkIGluDQogIGAkSE9NRS8uYXNjaWlkb2MvZmlsdGVycy88ZmlsdGVyPmAgd2hlcmUgYDxmaWx0ZXI+YCBpcyB0aGUgZmlsdGVyDQogIG5hbWUuDQoNCg0KW1tYMTAxXV0NClBsdWdpbnMNCi0tLS0tLS0NClRoZSBBc2NpaURvYyBwbHVnaW4gYXJjaGl0ZWN0dXJlIGlzIGFuIGV4dGVuc2lvbiBtZWNoYW5pc20gdGhhdCBhbGxvd3MNCmFkZGl0aW9uYWwgPDxYMTAwLGJhY2tlbmRzPj4sIDw8WDU4LGZpbHRlcnM+PiBhbmQgPDxYOTksdGhlbWVzPj4gdG8gYmUNCmFkZGVkIHRvIEFzY2lpRG9jLg0KDQotIEEgcGx1Z2luIGlzIGEgWmlwIGZpbGUgY29udGFpbmluZyBhbiBBc2NpaURvYyBiYWNrZW5kLCBmaWx0ZXIgb3INCiAgdGhlbWUgKGNvbmZpZ3VyYXRpb24gZmlsZXMsIHN0eWxlc2hlZXRzLCBzY3JpcHRzLCBpbWFnZXMpLg0KLSBUaGUgYXNjaWlkb2MoMSkgYC0tYmFja2VuZGAsIGAtLWZpbHRlcmAgYW5kIGAtLXRoZW1lYCBjb21tYW5kLWxpbmUNCiAgb3B0aW9ucyBhcmUgdXNlZCB0byBsb2FkIGFuZCBtYW5hZ2UgcGx1Z2lucy4gRWFjaCBvZiB0aGVzZSBvcHRpb25zDQogIHJlc3BvbmRzIHRvIHRoZSBwbHVnaW4gbWFuYWdlbWVudCAnaW5zdGFsbCcsICdsaXN0JywgJ3JlbW92ZScgYW5kDQogICdidWlsZCcgY29tbWFuZHMuDQotIFRoZSBwbHVnaW4gbWFuYWdlbWVudCBjb21tYW5kIG5hbWVzIGFyZSByZXNlcnZlZCBhbmQgY2Fubm90IGJlIHVzZWQNCiAgZm9yIGZpbHRlciwgYmFja2VuZCBvciB0aGVtZSBuYW1lcy4NCi0gVGhlIHBsdWdpbiBaaXAgZmlsZSBuYW1lIGFsd2F5cyBiZWdpbnMgd2l0aCB0aGUgYmFja2VuZCwgZmlsdGVyIG9yDQogIHRoZW1lIG5hbWUuDQoNClBsdWdpbiBjb21tYW5kcyBhbmQgY29udmVudGlvbnMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGFzY2lpZG9jKDEpIG1hbg0KcGFnZS4gIFlvdSBjYW4gZmluZCBsaXN0cyBvZiBwbHVnaW5zIG9uIHRoZQ0Ke3dlYnNpdGV9cGx1Z2lucy5odG1sW0FzY2lpRG9jIHdlYnNpdGVdLg0KDQoNCltbWDM2XV0NCkhlbHAgQ29tbWFuZHMNCi0tLS0tLS0tLS0tLS0NClRoZSBhc2NpaWRvYygxKSBjb21tYW5kIGhhcyBhIGAtLWhlbHBgIG9wdGlvbiB3aGljaCBwcmludHMgaGVscCB0b3BpY3MNCnRvIHN0ZG91dC4gVGhlIGRlZmF1bHQgdG9waWMgc3VtbWFyaXplcyBhc2NpaWRvYygxKSB1c2FnZToNCg0KICAkIGFzY2lpZG9jIC0taGVscA0KDQpUbyBwcmludCBhIGhlbHAgdG9waWMgc3BlY2lmeSB0aGUgdG9waWMgbmFtZSBhcyBhIGNvbW1hbmQgYXJndW1lbnQuDQpIZWxwIHRvcGljIG5hbWVzIGNhbiBiZSBzaG9ydGVuZWQgc28gbG9uZyBhcyB0aGV5IGFyZSBub3QgYW1iaWd1b3VzLg0KRXhhbXBsZXM6DQoNCiAgJCBhc2NpaWRvYyAtLWhlbHAgbWFucGFnZQ0KICAkIGFzY2lpZG9jIC1oIG0gICAgICAgICAgICAgICMgU2hvcnQgdmVyc2lvbiBvZiBwcmV2aW91cyBleGFtcGxlLg0KICAkIGFzY2lpZG9jIC0taGVscCBzeW50YXgNCiAgJCBhc2NpaWRvYyAtaCBzICAgICAgICAgICAgICAjIFNob3J0IHZlcnNpb24gb2YgcHJldmlvdXMgZXhhbXBsZS4NCg0KQ3VzdG9taXppbmcgSGVscA0Kfn5+fn5+fn5+fn5+fn5+fg0KVG8gY2hhbmdlLCBkZWxldGUgb3IgYWRkIHlvdXIgb3duIGhlbHAgdG9waWNzIGVkaXQgYSBoZWxwDQpjb25maWd1cmF0aW9uIGZpbGUuICBUaGUgaGVscCBmaWxlIG5hbWUgYGhlbHAtPGxhbmc+LmNvbmZgIGlzIGJhc2VkIG9uDQp0aGUgc2V0dGluZyBvZiB0aGUgYGxhbmdgIGF0dHJpYnV0ZSwgaXQgZGVmYXVsdHMgdG8gYGhlbHAuY29uZmANCihFbmdsaXNoKS4gIFRoZSA8PFgyNyxoZWxwIGZpbGUgbG9jYXRpb24+PiB3aWxsIGRlcGVuZCBvbiB3aGV0aGVyIHlvdQ0Kd2FudCB0aGUgdG9waWNzIHRvIGFwcGx5IHRvIGFsbCB1c2VycyBvciBqdXN0IHRoZSBjdXJyZW50IHVzZXIuDQoNClRoZSBoZWxwIHRvcGljIGZpbGVzIGhhdmUgdGhlIHNhbWUgbmFtZWQgc2VjdGlvbiBmb3JtYXQgYXMgb3RoZXINCjw8WDcsY29uZmlndXJhdGlvbiBmaWxlcz4+LiBUaGUgYGhlbHAuY29uZmAgZmlsZXMgYXJlIHN0b3JlZCBpbiB0aGUNCnNhbWUgbG9jYXRpb25zIGFuZCBsb2FkZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgb3RoZXIgY29uZmlndXJhdGlvbg0KZmlsZXMuDQoNCldoZW4gdGhlIGAtLWhlbHBgIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgc3BlY2lmaWVkIEFzY2lpRG9jIGxvYWRzIHRoZQ0KYXBwcm9wcmlhdGUgaGVscCBmaWxlcyBhbmQgdGhlbiBwcmludHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZWN0aW9uDQp3aG9zZSBuYW1lIG1hdGNoZXMgdGhlIGhlbHAgdG9waWMgbmFtZS4gIElmIGEgdG9waWMgbmFtZSBpcyBub3QNCnNwZWNpZmllZCBgZGVmYXVsdGAgaXMgdXNlZC4gWW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGUgd2hvbGUgaGVscA0KdG9waWMgbmFtZSBvbiB0aGUgY29tbWFuZC1saW5lLCBqdXN0IGVub3VnaCBsZXR0ZXJzIHRvIGVuc3VyZSBpdCdzIG5vdA0KYW1iaWd1b3VzLiBJZiBhIG1hdGNoaW5nIGhlbHAgZmlsZSBzZWN0aW9uIGlzIG5vdCBmb3VuZCBhIGxpc3Qgb2YNCmF2YWlsYWJsZSB0b3BpY3MgaXMgcHJpbnRlZC4NCg0KDQpUaXBzIGFuZCBUcmlja3MNCi0tLS0tLS0tLS0tLS0tLQ0KDQpLbm93IFlvdXIgRWRpdG9yDQp+fn5+fn5+fn5+fn5+fn5+DQpXcml0aW5nIEFzY2lpRG9jIGRvY3VtZW50cyB3aWxsIGJlIGEgd2hvbGUgbG90IG1vcmUgcGxlYXNhbnQgaWYgeW91DQprbm93IHlvdXIgZmF2b3JpdGUgdGV4dCBlZGl0b3IuIExlYXJuIGhvdyB0byBpbmRlbnQgYW5kIHJlZm9ybWF0IHRleHQNCmJsb2NrcywgcGFyYWdyYXBocywgbGlzdHMgYW5kIHNlbnRlbmNlcy4gPDxYMjAsVGlwcyBmb3IgJ3ZpbScgdXNlcnM+Pg0KZm9sbG93Lg0KDQpbW1gyMF1dDQpWaW0gQ29tbWFuZHMgZm9yIEZvcm1hdHRpbmcgQXNjaWlEb2MNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KVGV4dCBXcmFwIFBhcmFncmFwaHMNCl5eXl5eXl5eXl5eXl5eXl5eXl5eDQpVc2UgdGhlIHZpbSBgOmdxYCBjb21tYW5kIHRvIHJlZm9ybWF0IHBhcmFncmFwaHMuIFNldHRpbmcgdGhlDQondGV4dHdpZHRoJyBzZXRzIHRoZSByaWdodCB0ZXh0IHdyYXAgbWFyZ2luOyBmb3IgZXhhbXBsZToNCg0KICA6c2V0IHRleHR3aWR0aD03MA0KDQpUbyByZWZvcm1hdCBhIHBhcmFncmFwaDoNCg0KMS4gUG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaC4NCjIuIFR5cGUgYGdxfWAuDQoNCkV4ZWN1dGUgYDpoZWxwIGdxYCBjb21tYW5kIHRvIHJlYWQgYWJvdXQgdGhlIHZpbSBncSBjb21tYW5kLg0KDQpbVElQXQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotIEFzc2lnbiB0aGUgYGdxfWAgY29tbWFuZCB0byB0aGUgUSBrZXkgd2l0aCB0aGUgYG5ub3JlbWFwIFEgZ3F9YA0KICBjb21tYW5kIG9yIHB1dCBpdCBpbiB5b3VyIGB+Ly52aW1yY2AgZmlsZSB0byBzbyBpdCdzIGFsd2F5cw0KICBhdmFpbGFibGUgKHNlZSB0aGUgPDxYNjEsIEV4YW1wbGUgYH4vLnZpbXJjYCBmaWxlPj4pLg0KLSBQdXQgYHNldGAgY29tbWFuZHMgaW4geW91ciBgfi8udmltcmNgIGZpbGUgc28geW91IGRvbid0IGhhdmUgdG8NCiAgZW50ZXIgdGhlbSBtYW51YWxseS4NCi0gVGhlIFZpbSB3ZWJzaXRlIChodHRwOi8vd3d3LnZpbS5vcmcpIGhhcyBhIHdlYWx0aCBvZiByZXNvdXJjZXMsDQogIGluY2x1ZGluZyBzY3JpcHRzIGZvciBhdXRvbWF0ZWQgc3BlbGwgY2hlY2tpbmcgYW5kIEFTQ0lJIEFydA0KICBkcmF3aW5nLg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCkZvcm1hdCBMaXN0cw0KXl5eXl5eXl5eXl5eDQpUaGUgYGdxYCBjb21tYW5kIGNhbiBhbHNvIGJlIHVzZWQgdG8gZm9ybWF0IGJ1bGxldGVkLCBudW1iZXJlZCBhbmQNCmNhbGxvdXQgbGlzdHMuIEZpcnN0IHlvdSBuZWVkIHRvIHNldCB0aGUgYGNvbW1lbnRzYCwgYGZvcm1hdG9wdGlvbnNgDQphbmQgYGZvcm1hdGxpc3RwYXRgIChzZWUgdGhlIDw8WDYxLCBFeGFtcGxlIGB+Ly52aW1yY2AgZmlsZT4+KS4NCg0KTm93IHlvdSBjYW4gZm9ybWF0IHNpbXBsZSBsaXN0cyB0aGF0IHVzZSBkYXNoLCBhc3RlcmlzaywgcGVyaW9kIGFuZA0KcGx1cyBidWxsZXRzIGFsb25nIHdpdGggbnVtYmVyZWQgb3JkZXJlZCBsaXN0czoNCg0KMS4gUG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QuDQoyLiBUeXBlIGBncX1gLg0KDQpJbmRlbnQgUGFyYWdyYXBocw0KXl5eXl5eXl5eXl5eXl5eXl4NCkluZGVudCB3aG9sZSBwYXJhZ3JhcGhzIGJ5IGluZGVudGluZyB0aGUgZmlzdCBsaW5lIHdpdGggdGhlIGRlc2lyZWQNCmluZGVudCBhbmQgdGhlbiBleGVjdXRpbmcgdGhlIGBncX1gIGNvbW1hbmQuDQoNCltbWDYxXV0NCkV4YW1wbGUgYH4vLnZpbXJjYCBGaWxlDQpeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoiIFVzZSBib2xkIGJyaWdodCBmb250cy4NCnNldCBiYWNrZ3JvdW5kPWRhcmsNCg0KIiBTaG93IHRhYnMgYW5kIHRyYWlsaW5nIGNoYXJhY3RlcnMuDQpzZXQgbGlzdGNoYXJzPXRhYjrvv73vv70sdHJhaWw677+9DQpzZXQgbGlzdA0KDQoiIERvbid0IGhpZ2hsaWdodCBzZWFyY2hlZCB0ZXh0Lg0KaGlnaGxpZ2h0IGNsZWFyIFNlYXJjaA0KDQoiIERvbid0IG1vdmUgdG8gbWF0Y2hlZCB0ZXh0IHdoaWxlIHNlYXJjaCBwYXR0ZXJuIGlzIGJlaW5nIGVudGVyZWQuDQpzZXQgbm9pbmNzZWFyY2gNCg0KIiBSZWZvcm1hdCBwYXJhZ3JhcGhzIGFuZCBsaXN0Lg0Kbm5vcmVtYXAgUiBncX0NCg0KIiBEZWxldGUgdHJhaWxpbmcgd2hpdGUgc3BhY2UgYW5kIERvcy1yZXR1cm5zIGFuZCB0byBleHBhbmQgdGFicyB0byBzcGFjZXMuDQpubm9yZW1hcCBTIDpzZXQgZXQ8Q1I+OnJldGFiITxDUj46JXMvW1xyIFx0XVwrJC8vPENSPg0KDQphdXRvY21kIEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnR4dCxSRUFETUUsVE9ETyxDSEFOR0VMT0csTk9URVMNCiAgICAgICAgXCBzZXRsb2NhbCBhdXRvaW5kZW50IGV4cGFuZHRhYiB0YWJzdG9wPTggc29mdHRhYnN0b3A9MiBzaGlmdHdpZHRoPTIgZmlsZXR5cGU9YXNjaWlkb2MNCiAgICAgICAgXCB0ZXh0d2lkdGg9NzAgd3JhcCBmb3JtYXRvcHRpb25zPXRjcW4NCiAgICAgICAgXCBmb3JtYXRsaXN0cGF0PV5cXHMqXFxkXFwrXFwuXFxzXFwrXFxcXHxeXFxzKjxcXGRcXCs+XFxzXFwrXFxcXHxeXFxzKlthLXpBLVouXVxcLlxcc1xcK1xcXFx8XlxccypbaXZ4SVZYXVxcK1xcLlxcc1xcKw0KICAgICAgICBcIGNvbW1lbnRzPXMxOi8qLGV4OiovLDovLyxiOiMsOiUsOlhDT01NLGZiOi0sZmI6KixmYjorLGZiOi4sZmI6Pg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRyb3VibGVzaG9vdGluZw0Kfn5+fn5+fn5+fn5+fn5+DQpBc2NpaURvYyBkaWFnbm9zdGljIGZlYXR1cmVzIGFyZSBkZXRhaWxlZCBpbiB0aGUgPDxYODIsRGlhZ25vc3RpY3MNCmFwcGVuZGl4Pj4uDQoNCkdvdGNoYXMNCn5+fn5+fn4NCkluY29ycmVjdCBjaGFyYWN0ZXIgZW5jb2Rpbmc6Og0KICAgIElmIHlvdSBnZXQgYW4gZXJyb3IgbWVzc2FnZSBsaWtlIGAnVVRGLTgnIGNvZGVjIGNhbid0IGRlY29kZSAuLi5gDQogICAgdGhlbiB5b3Ugc291cmNlIGZpbGUgY29udGFpbnMgaW52YWxpZCBVVEYtOCBjaGFyYWN0ZXJzIC0tIHNldCB0aGUNCiAgICBBc2NpaURvYyA8PFg1NCxlbmNvZGluZyBhdHRyaWJ1dGU+PiBmb3IgdGhlIGNvcnJlY3QgY2hhcmFjdGVyIHNldA0KICAgICh0eXBpY2FsbHkgSVNPLTg4NTktMSAoTGF0aW4tMSkgZm9yIEV1cm9wZWFuIGxhbmd1YWdlcykuDQoNCkludmFsaWQgb3V0cHV0OjoNCiAgICBBc2NpaURvYyBhdHRlbXB0cyB0byB2YWxpZGF0ZSB0aGUgaW5wdXQgQXNjaWlEb2Mgc291cmNlIGJ1dCBtYWtlcw0KICAgIG5vIGF0dGVtcHQgdG8gdmFsaWRhdGUgdGhlIG91dHB1dCBtYXJrdXAsIGl0IGxlYXZlcyB0aGF0IHRvDQogICAgZXh0ZXJuYWwgdG9vbHMgc3VjaCBhcyBgeG1sbGludCgxKWAgKGludGVncmF0ZWQgaW50byBgYTJ4KDEpYCkuDQogICAgQmFja2VuZCB2YWxpZGF0aW9uIGNhbm5vdCBiZSBoYXJkY29kZWQgaW50byBBc2NpaURvYyBiZWNhdXNlDQogICAgYmFja2VuZHMgYXJlIGR5bmFtaWNhbGx5IGNvbmZpZ3VyZWQuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQ0KICAgIGdlbmVyYXRlcyB2YWxpZCBIVE1MIGJ1dCBpbnZhbGlkIERvY0Jvb2sgKHRoZSBEb2NCb29rIGBsaXRlcmFsYA0KICAgIGVsZW1lbnQgY2Fubm90IGNvbnRhaW4gYW4gYGVtcGhhc2lzYCBlbGVtZW50KToNCg0KICAgICttb25vc3BhY2VkIHRleHQgd2l0aCBhbiBfZW1waGFzaXplZF8gd29yZCsNCg0KTWlzaW50ZXJwcmV0ZWQgdGV4dCBmb3JtYXR0aW5nOjoNCiAgICBZb3UgY2FuIHN1cHByZXNzIG1hcmt1cCBleHBhbnNpb24gYnkgcGxhY2luZyBhIGJhY2tzbGFzaCBjaGFyYWN0ZXINCiAgICBpbW1lZGlhdGVseSBpbiBmcm9udCBvZiB0aGUgZWxlbWVudC4gVGhlIGZvbGxvd2luZyBleGFtcGxlDQogICAgc3VwcHJlc3NlcyBpbmxpbmUgbW9ub3NwYWNlZCBmb3JtYXR0aW5nOg0KDQogICAgXCsxIGZvciBDKysuDQoNCk92ZXJsYXBwaW5nIHRleHQgZm9ybWF0dGluZzo6DQogICAgT3ZlcmxhcHBpbmcgdGV4dCBmb3JtYXR0aW5nIHdpbGwgZ2VuZXJhdGUgaWxsZWdhbCBvdmVybGFwcGluZw0KICAgIG1hcmt1cCB0YWdzIHdoaWNoIHdpbGwgcmVzdWx0IGluIGRvd25zdHJlYW0gWE1MIHBhcnNpbmcgZXJyb3JzLg0KICAgIEhlcmUncyBhbiBleGFtcGxlOg0KDQogICAgU29tZSAqc3Ryb25nIG1hcmt1cCBfdGhhdCBvdmVybGFwcyogZW1waGFzaXplZCBtYXJrdXBfLg0KDQpBbWJpZ3VvdXMgdW5kZXJsaW5lczo6DQogICAgQSBEZWxpbWl0ZWRCbG9jayBjYW4gaW1tZWRpYXRlbHkgZm9sbG93IGEgcGFyYWdyYXBoIHdpdGhvdXQgYW4NCiAgICBpbnRlcnZlbmluZyBibGFuayBsaW5lLCBidXQgYmUgY2FyZWZ1bCwgYSBzaW5nbGUgbGluZSBwYXJhZ3JhcGgNCiAgICB1bmRlcmxpbmUgbWF5IGJlIG1pc2ludGVycHJldGVkIGFzIGEgc2VjdGlvbiB0aXRsZSB1bmRlcmxpbmUNCiAgICByZXN1bHRpbmcgaW4gYSBgYGNsb3NpbmcgYmxvY2sgZGVsaW1pdGVyIGV4cGVjdGVkJycgZXJyb3IuDQoNCkFtYmlndW91cyBvcmRlcmVkIGxpc3QgaXRlbXM6Og0KICAgIExpbmVzIGJlZ2lubmluZyB3aXRoIG51bWJlcnMgYXQgdGhlIGVuZCBvZiBzZW50ZW5jZXMgd2lsbCBiZQ0KICAgIGludGVycHJldGVkIGFzIG9yZGVyZWQgbGlzdCBpdGVtcy4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQ0KICAgIChpbmNvcnJlY3RseSkgYmVnaW5zIGEgbmV3IGxpc3Qgd2l0aCBpdGVtIG51bWJlciAxOTk5Og0KDQogICAgSGUgd2FzIGxhc3Qgc2lnaHRlZCBpbg0KICAgIDE5OTkuIFNpbmNlIHRoZW4gdGhpbmdzIGhhdmUgbW92ZWQgb24uDQorDQpUaGUgJ2xpc3QgaXRlbSBvdXQgb2Ygc2VxdWVuY2UnIHdhcm5pbmcgbWFrZXMgaXQgdW5saWtlbHkgdGhhdCB0aGlzDQpwcm9ibGVtIHdpbGwgZ28gdW5ub3RpY2VkLg0KDQpTcGVjaWFsIGNoYXJhY3RlcnMgaW4gYXR0cmlidXRlIHZhbHVlczo6DQogICAgU3BlY2lhbCBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uIHByZWNlZGVzIGF0dHJpYnV0ZSBzdWJzdGl0dXRpb24gc28NCiAgICBpZiBhdHRyaWJ1dGUgdmFsdWVzIGNvbnRhaW4gc3BlY2lhbCBjaGFyYWN0ZXJzIHlvdSBtYXksIGRlcGVuZGluZw0KICAgIG9uIHRoZSBzdWJzdGl0dXRpb24gY29udGV4dCwgbmVlZCB0byBlc2NhcGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVycw0KICAgIHlvdXJzZWxmLiBGb3IgZXhhbXBsZToNCg0KICAgICQgYXNjaWlkb2MgLWEgJ29yZ25hbWU9QmlsbCAmYW1wOyBCZW4gSW5jLicgbXlkb2MudHh0DQoNCkF0dHJpYnV0ZSBsaXN0czo6DQogICAgSWYgYW55IG5hbWVkIGF0dHJpYnV0ZSBlbnRyaWVzIGFyZSBwcmVzZW50IHRoZW4gYWxsIHN0cmluZw0KICAgIGF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBxdW90ZWQuICBGb3IgZXhhbXBsZToNCg0KICAgIFsiRGVza3RvcCBzY3JlZW5zaG90Iix3aWR0aD0zMl0NCg0KW1tYOTBdXQ0KQ29tYmluaW5nIHNlcGFyYXRlIGRvY3VtZW50cw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KWW91IGhhdmUgYSBudW1iZXIgb2Ygc3RhbmQtYWxvbmUgQXNjaWlEb2MgZG9jdW1lbnRzIHRoYXQgeW91IHdhbnQgdG8NCnByb2Nlc3MgYXMgYSBzaW5nbGUgZG9jdW1lbnQuIFNpbXBseSBwcm9jZXNzaW5nIHRoZW0gd2l0aCBhIHNlcmllcyBvZg0KYGluY2x1ZGVgIG1hY3JvcyB3b24ndCB3b3JrIGJlY2F1c2UgdGhlIGRvY3VtZW50cyBjb250YWluIChsZXZlbCAwKQ0KZG9jdW1lbnQgdGl0bGVzLiAgVGhlIHNvbHV0aW9uIGlzIHRvIGNyZWF0ZSBhIHRvcCBsZXZlbCB3cmFwcGVyDQpkb2N1bWVudCBhbmQgdXNlIHRoZSBgbGV2ZWxvZmZzZXRgIGF0dHJpYnV0ZSB0byBwdXNoIHRoZW0gYWxsIGRvd24gb25lDQpsZXZlbC4gRm9yIGV4YW1wbGU6DQoNCltsaXN0aW5nXQ0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQpDb21iaW5lZCBEb2N1bWVudCBUaXRsZQ0KPT09PT09PT09PT09PT09PT09PT09PT0NCg0KLy8gUHVzaCB0aXRsZXMgZG93biBvbmUgbGV2ZWwuDQo6bGV2ZWxvZmZzZXQ6IDENCg0KXGluY2x1ZGU6OmRvY3VtZW50MS50eHRbXQ0KDQovLyBSZXR1cm4gdG8gbm9ybWFsIHRpdGxlIGxldmVscy4NCjpsZXZlbG9mZnNldDogMA0KDQpBIFRvcCBMZXZlbCBTZWN0aW9uDQotLS0tLS0tLS0tLS0tLS0tLS0tDQpMb3J1bSBpcHN1bS4NCg0KLy8gUHVzaCB0aXRsZXMgZG93biBvbmUgbGV2ZWwuDQo6bGV2ZWxvZmZzZXQ6IDENCg0KXGluY2x1ZGU6OmRvY3VtZW50Mi50eHRbXQ0KDQpcaW5jbHVkZTo6ZG9jdW1lbnQzLnR4dFtdDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KVGhlIGRvY3VtZW50IHRpdGxlcyBpbiB0aGUgaW5jbHVkZWQgZG9jdW1lbnRzIHdpbGwgbm93IGJlIHByb2Nlc3NlZCBhcw0KbGV2ZWwgMSBzZWN0aW9uIHRpdGxlcywgbGV2ZWwgMSBzZWN0aW9ucyBhcyBsZXZlbCAyIHNlY3Rpb25zIGFuZCBzbw0Kb24uDQoNCi0gUHV0IGEgYmxhbmsgbGluZSBiZXR3ZWVuIHRoZSBgaW5jbHVkZWAgbWFjcm8gbGluZXMgdG8gZW5zdXJlIHRoZQ0KICB0aXRsZSBvZiB0aGUgaW5jbHVkZWQgZG9jdW1lbnQgaXMgbm90IHNlZW4gYXMgcGFydCBvZiB0aGUgbGFzdA0KICBwYXJhZ3JhcGggb2YgdGhlIHByZXZpb3VzIGRvY3VtZW50Lg0KLSBZb3Ugd29uJ3Qgd2FudCBub24tdGl0bGUgZG9jdW1lbnQgaGVhZGVyIGxpbmVzIChmb3IgZXhhbXBsZSwgQXV0aG9yDQogIGFuZCBSZXZpc2lvbiBsaW5lcykgaW4gdGhlIGluY2x1ZGVkIGZpbGVzIC0tIGNvbmRpdGlvbmFsbHkgZXhjbHVkZQ0KICB0aGVtIGlmIHRoZXkgYXJlIG5lY2Vzc2FyeSBmb3Igc3RhbmQtYWxvbmUgcHJvY2Vzc2luZy4NCg0KUHJvY2Vzc2luZyBkb2N1bWVudCBzZWN0aW9ucyBzZXBhcmF0ZWx5DQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCllvdSBoYXZlIGRpdmlkZWQgeW91ciBBc2NpaURvYyBkb2N1bWVudCBpbnRvIHNlcGFyYXRlIGZpbGVzIChvbmUgcGVyDQp0b3AgbGV2ZWwgc2VjdGlvbikgd2hpY2ggYXJlIGNvbWJpbmVkIGFuZCBwcm9jZXNzZWQgd2l0aCB0aGUgZm9sbG93aW5nDQp0b3AgbGV2ZWwgZG9jdW1lbnQ6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQ29tYmluZWQgRG9jdW1lbnQgVGl0bGUNCj09PT09PT09PT09PT09PT09PT09PT09DQpKb2UgQmxvZ2dzDQp2MS4wLCAxMi1BdWctMDMNCg0KXGluY2x1ZGU6OnNlY3Rpb24xLnR4dFtdDQoNClxpbmNsdWRlOjpzZWN0aW9uMi50eHRbXQ0KDQpcaW5jbHVkZTo6c2VjdGlvbjMudHh0W10NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpZb3UgYWxzbyB3YW50IHRvIHByb2Nlc3MgdGhlIHNlY3Rpb24gZmlsZXMgYXMgc2VwYXJhdGUgZG9jdW1lbnRzLg0KVGhpcyBpcyBlYXN5IGJlY2F1c2UgYXNjaWlkb2MoMSkgd2lsbCBxdWl0ZSBoYXBwaWx5IHByb2Nlc3MNCmBzZWN0aW9uMS50eHRgLCBgc2VjdGlvbjIudHh0YCBhbmQgYHNlY3Rpb24zLnR4dGAgc2VwYXJhdGVseSAtLSB0aGUNCnJlc3VsdGluZyBvdXRwdXQgZG9jdW1lbnRzIGNvbnRhaW4gdGhlIHNlY3Rpb24gYnV0IGhhdmUgbm8gZG9jdW1lbnQNCnRpdGxlLg0KDQpQcm9jZXNzaW5nIGRvY3VtZW50IHNuaXBwZXRzDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpVc2UgdGhlIGAtc2AgKGAtLW5vLWhlYWRlci1mb290ZXJgKSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIHN1cHByZXNzDQpoZWFkZXIgYW5kIGZvb3RlciBvdXRwdXQsIHRoaXMgaXMgdXNlZnVsIGlmIHRoZSBwcm9jZXNzZWQgb3V0cHV0IGlzIHRvDQpiZSBpbmNsdWRlZCBpbiBhbm90aGVyIGZpbGUuIEZvciBleGFtcGxlOg0KDQogICQgYXNjaWlkb2MgLXNiIGRvY2Jvb2sgc2VjdGlvbjEudHh0DQoNCmFzY2lpZG9jKDEpIGNhbiBiZSB1c2VkIGFzIGEgZmlsdGVyLCBzbyB5b3UgY2FuIHBpcGUgY2h1bmtzIG9mIHRleHQNCnRocm91Z2ggaXQuIEZvciBleGFtcGxlOg0KDQogICQgZWNobyAnSGVsbG8gKldvcmxkISonIHwgYXNjaWlkb2MgLXMgLQ0KICA8ZGl2IGNsYXNzPSJwYXJhZ3JhcGgiPjxwPkhlbGxvIDxzdHJvbmc+V29ybGQhPC9zdHJvbmc+PC9wPjwvZGl2Pg0KDQpCYWRnZXMgaW4gSFRNTCBwYWdlIGZvb3RlcnMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KU2VlIHRoZSBgW2Zvb3Rlcl1gIHNlY3Rpb24gaW4gdGhlIEFzY2lpRG9jIGRpc3RyaWJ1dGlvbiBgeGh0bWwxMS5jb25mYA0KY29uZmlndXJhdGlvbiBmaWxlLg0KDQpQcmV0dHkgcHJpbnRpbmcgQXNjaWlEb2Mgb3V0cHV0DQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpJZiB0aGUgaW5kZW50YXRpb24gYW5kIGxheW91dCBvZiB0aGUgYXNjaWlkb2MoMSkgb3V0cHV0IGlzIG5vdCB0byB5b3VyDQpsaWtpbmcgeW91IGNhbjoNCg0KMS4gQ2hhbmdlIHRoZSBpbmRlbnRhdGlvbiBhbmQgbGF5b3V0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBtYXJrdXANCiAgIHRlbXBsYXRlIHNlY3Rpb25zLiBUaGUgYHtlbXB0eX1gIGF0dHJpYnV0ZSBpcyB1c2VmdWwgZm9yIG91dHB1dHRpbmcNCiAgIHRyYWlsaW5nIGJsYW5rIGxpbmVzIGluIG1hcmt1cCB0ZW1wbGF0ZXMuDQoNCjIuIFVzZSBEYXZlIFJhZ2dldHQncyBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQvW0hUTUwgVGlkeV0gcHJvZ3JhbQ0KICAgdG8gdGlkeSBhc2NpaWRvYygxKSBvdXRwdXQuIEV4YW1wbGU6DQoNCiAgICQgYXNjaWlkb2MgLWIgZG9jYm9vayAtbyAtIG15ZG9jLnR4dCB8IHRpZHkgLWluZGVudCAteG1sID5teWRvYy54bWwNCg0KMy4gVXNlIHRoZSBgeG1sbGludCgxKWAgZm9ybWF0IG9wdGlvbi4gRXhhbXBsZToNCg0KICAgJCB4bWxsaW50IC0tZm9ybWF0IG15ZG9jLnhtbA0KDQpTdXBwb3J0aW5nIG1pbm9yIERvY0Jvb2sgRFREIHZhcmlhdGlvbnMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KVGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBEb2NCb29rIFNHTUwgbWFya3VwIGF0IHRoZSBlbmQgb2YgdGhlDQpkaXN0cmlidXRpb24gYGRvY2Jvb2s0NS5jb25mYCBmaWxlIGlsbHVzdHJhdGVzIGhvdyB0byBzdXBwb3J0IG1pbm9yDQpEVEQgdmFyaWF0aW9ucy4gVGhlIGluY2x1ZGVkIHNlY3Rpb25zIG92ZXJyaWRlIGNvcnJlc3BvbmRpbmcgZW50cmllcw0KZnJvbSBwcmVjZWRpbmcgc2VjdGlvbnMuDQoNCkNyZWF0aW5nIHN0YW5kLWFsb25lIEhUTUwgZG9jdW1lbnRzDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KSWYgeW91J3ZlIGV2ZXIgdHJpZWQgdG8gc2VuZCBzb21lb25lIGFuIEhUTUwgZG9jdW1lbnQgdGhhdCBpbmNsdWRlcw0Kc3R5bGVzaGVldHMgYW5kIGltYWdlcyB5b3UnbGwga25vdyB0aGF0IGl0J3Mgbm90IGFzIHN0cmFpZ2h0LWZvcndhcmQNCmFzIGV4Y2hhbmdpbmcgYSBzaW5nbGUgZmlsZS4gIEFzY2lpRG9jIGhhcyBvcHRpb25zIHRvIGNyZWF0ZQ0Kc3RhbmQtYWxvbmUgZG9jdW1lbnRzIGNvbnRhaW5pbmcgZW1iZWRkZWQgaW1hZ2VzLCBzdHlsZXNoZWV0cyBhbmQNCnNjcmlwdHMuICBUaGUgZm9sbG93aW5nIEFzY2lpRG9jIGNvbW1hbmQgY3JlYXRlcyBhIHNpbmdsZSBmaWxlDQpjb250YWluaW5nIDw8WDY2LGVtYmVkZGVkIGltYWdlcz4+LCBDU1Mgc3R5bGVzaGVldHMsIGFuZCBKYXZhU2NyaXB0DQooZm9yIHRhYmxlIG9mIGNvbnRlbnRzIGFuZCBmb290bm90ZXMpOg0KDQogICQgYXNjaWlkb2MgLWEgZGF0YS11cmkgLWEgaWNvbnMgLWEgdG9jIC1hIG1heC13aWR0aD01NWVtIGFydGljbGUudHh0DQoNCllvdSBjYW4gdmlldyB0aGUgSFRNTCBmaWxlIGhlcmU6IHt3ZWJzaXRlfWFydGljbGUtc3RhbmRhbG9uZS5odG1sW10NCg0KU2hpcHBpbmcgc3RhbmQtYWxvbmUgQXNjaWlEb2Mgc291cmNlDQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NClJlcHJvZHVjaW5nIHByZXNlbnRhdGlvbiBkb2N1bWVudHMgZnJvbSBzb21lb25lIGVsc2UncyBzb3VyY2UgaGFzIG9uZQ0KbWFqb3IgcHJvYmxlbTogdW5sZXNzIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgdGhlIHNhbWUgYXMgdGhlDQpjcmVhdG9yJ3MgeW91IHdvbid0IGdldCB0aGUgc2FtZSBvdXRwdXQuDQoNClRoZSBzb2x1dGlvbiBpcyB0byBjcmVhdGUgYSBzaW5nbGUgYmFja2VuZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUNCnVzaW5nIHRoZSBhc2NpaWRvYygxKSBgLWNgIChgLS1kdW1wLWNvbmZgKSBjb21tYW5kLWxpbmUgb3B0aW9uLiBZb3UNCnRoZW4gc2hpcCB0aGlzIGZpbGUgYWxvbmcgd2l0aCB0aGUgQXNjaWlEb2Mgc291cmNlIGRvY3VtZW50IHBsdXMgdGhlDQpgYXNjaWlkb2MucHlgIHNjcmlwdC4gVGhlIG9ubHkgZW5kIHVzZXIgcmVxdWlyZW1lbnQgaXMgdGhhdCB0aGV5IGhhdmUNClB5dGhvbiBpbnN0YWxsZWQgKGFuZCB0aGF0IHRoZXkgY29uc2lkZXIgeW91IGEgdHJ1c3RlZCBzb3VyY2UpLiBUaGlzDQpleGFtcGxlIGNyZWF0ZXMgYSBjb21wb3NpdGUgSFRNTCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGBteWRvYy50eHRgOg0KDQogICQgYXNjaWlkb2MgLWNiIHhodG1sMTEgbXlkb2MudHh0ID4gbXlkb2MteGh0bWwxMS5jb25mDQoNClNoaXAgYG15ZG9jLnR4dGAsIGBteWRvYy1odG1sLmNvbmZgLCBhbmQgYGFzY2lpZG9jLnB5YC4gV2l0aA0KdGhlc2UgdGhyZWUgZmlsZXMgKGFuZCBhIFB5dGhvbiBpbnRlcnByZXRlcikgdGhlIHJlY2lwaWVudCBjYW4NCnJlZ2VuZXJhdGUgdGhlIEhNVEwgb3V0cHV0Og0KDQogICQgLi9hc2NpaWRvYy5weSAtZWIgeGh0bWwxMSBteWRvYy50eHQNCg0KVGhlIGAtZWAgKGAtLW5vLWNvbmZgKSBvcHRpb24gZXhjbHVkZXMgdGhlIHVzZSBvZiBpbXBsaWNpdA0KY29uZmlndXJhdGlvbiBmaWxlcywgZW5zdXJpbmcgdGhhdCBvbmx5IGVudHJpZXMgZnJvbSB0aGUNCmBteWRvYy1odG1sLmNvbmZgIGNvbmZpZ3VyYXRpb24gYXJlIHVzZWQuDQoNCkluc2VydGluZyBibGFuayBzcGFjZQ0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+DQpBZGp1c3QgeW91ciBzdHlsZSBzaGVldHMgdG8gYWRkIHRoZSBjb3JyZWN0IHNlcGFyYXRpb24gYmV0d2VlbiBibG9jaw0KZWxlbWVudHMuIEluc2VydGluZyBibGFuayBwYXJhZ3JhcGhzIGNvbnRhaW5pbmcgYSBzaW5nbGUgbm9uLWJyZWFraW5nDQpzcGFjZSBjaGFyYWN0ZXIgYHtuYnNwfWAgd29ya3MgYnV0IGlzIGFuIGFkIGhvYyBzb2x1dGlvbiBjb21wYXJlZA0KdG8gdXNpbmcgc3R5bGUgc2hlZXRzLg0KDQpDbG9zaW5nIG9wZW4gc2VjdGlvbnMNCn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KWW91IGNhbiBjbG9zZSBvZmYgc2VjdGlvbiB0YWdzIHVwIHRvIGxldmVsIGBOYCBieSBjYWxsaW5nIHRoZQ0KYGV2YWw6OltTZWN0aW9uLnNldGxldmVsKE4pXWAgc3lzdGVtIG1hY3JvLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UNCndhbnQgdG8gaW5jbHVkZSBhIHNlY3Rpb24gY29tcG9zZWQgb2YgcmF3IG1hcmt1cC4gVGhlIGZvbGxvd2luZw0KZXhhbXBsZSBpbmNsdWRlcyBhIERvY0Jvb2sgZ2xvc3NhcnkgZGl2aXNpb24gYXQgdGhlIHRvcCBzZWN0aW9uIGxldmVsDQoobGV2ZWwgMCk6DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KXGlmZGVmOjpiYXNlYmFja2VuZC1kb2Nib29rW10NCg0KXGV2YWw6OltTZWN0aW9uLnNldGxldmVsKDApXQ0KDQorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo8Z2xvc3Nhcnk+DQogIDx0aXRsZT5HbG9zc2FyeTwvdGl0bGU+DQogIDxnbG9zc2Rpdj4NCiAgLi4uDQogIDwvZ2xvc3NkaXY+DQo8L2dsb3NzYXJ5Pg0KKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KXGVuZGlmOjpiYXNlYmFja2VuZC1kb2Nib29rW10NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpWYWxpZGF0aW5nIG91dHB1dCBmaWxlcw0Kfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NClVzZSBgeG1sbGludCgxKWAgdG8gY2hlY2sgdGhlIEFzY2lpRG9jIGdlbmVyYXRlZCBtYXJrdXAgaXMgYm90aCB3ZWxsDQpmb3JtZWQgYW5kIHZhbGlkLiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzOg0KDQogICQgeG1sbGludCAtLW5vbmV0IC0tbm9vdXQgLS12YWxpZCBkb2Nib29rLWZpbGUueG1sDQogICQgeG1sbGludCAtLW5vbmV0IC0tbm9vdXQgLS12YWxpZCB4aHRtbDExLWZpbGUuaHRtbA0KICAkIHhtbGxpbnQgLS1ub25ldCAtLW5vb3V0IC0tdmFsaWQgLS1odG1sIGh0bWw0LWZpbGUuaHRtbA0KDQpUaGUgYC0tdmFsaWRgIG9wdGlvbiBjaGVja3MgdGhlIGZpbGUgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZG9jdW1lbnQNCnR5cGUncyBEVEQsIGlmIHRoZSBEVEQgaXMgbm90IGluc3RhbGxlZCBpbiB5b3VyIHN5c3RlbSdzIGNhdGFsb2cgdGhlbg0KaXQgd2lsbCBiZSBmZXRjaGVkIGZyb20gaXRzIEludGVybmV0IGxvY2F0aW9uLiBJZiB5b3Ugb21pdCB0aGUNCmAtLXZhbGlkYCBvcHRpb24gdGhlIGRvY3VtZW50IHdpbGwgb25seSBiZSBjaGVja2VkIHRoYXQgaXQgaXMgd2VsbA0KZm9ybWVkLg0KDQpUaGUgb25saW5lIGh0dHA6Ly92YWxpZGF0b3IudzMub3JnLyN2YWxpZGF0ZV9ieV91cmkrd2l0aF9vcHRpb25zW1czQw0KTWFya3VwIFZhbGlkYXRpb24gU2VydmljZV0gaXMgdGhlIGRlZmFjdG8gc3RhbmRhcmQgd2hlbiBpdCBjb21lcyB0bw0KdmFsaWRhdGluZyBIVE1MIChpdCB2YWxpZGF0ZXMgYWxsIEhUTUwgc3RhbmRhcmRzIGluY2x1ZGluZyBIVE1MNSkuDQoNCg0KOm51bWJlcmVkIToNCg0KW2dsb3NzYXJ5XQ0KR2xvc3NhcnkNCi0tLS0tLS0tDQpbZ2xvc3NhcnldDQpbW1g4XV0gQmxvY2sgZWxlbWVudDo6DQogICAgQW4gQXNjaWlEb2MgYmxvY2sgZWxlbWVudCBpcyBhIGRvY3VtZW50IGVudGl0eSBjb21wb3NlZCBvZiBvbmUgb3INCiAgICBtb3JlIHdob2xlIGxpbmVzIG9mIHRleHQuDQoNCltbWDM0XV0gSW5saW5lIGVsZW1lbnQ6Og0KICAgIEFzY2lpRG9jIGlubGluZSBlbGVtZW50cyBvY2N1ciB3aXRoaW4gYmxvY2sgZWxlbWVudCB0ZXh0dWFsDQogICAgY29udGVudCwgdGhleSBwZXJmb3JtIGZvcm1hdHRpbmcgYW5kIHN1YnN0aXR1dGlvbiB0YXNrcy4NCg0KRm9ybWFsIGVsZW1lbnQ6Og0KICAgIEFuIEFzY2lpRG9jIGJsb2NrIGVsZW1lbnQgdGhhdCBoYXMgYSBCbG9ja1RpdGxlLiBGb3JtYWwgZWxlbWVudHMNCiAgICBhcmUgbm9ybWFsbHkgbGlzdGVkIGluIGZyb250IG9yIGJhY2sgbWF0dGVyLCBmb3IgZXhhbXBsZSBsaXN0cyBvZg0KICAgIHRhYmxlcywgZXhhbXBsZXMgYW5kIGZpZ3VyZXMuDQoNClZlcmJhdGltIGVsZW1lbnQ6Og0KICAgIFRoZSB3b3JkIHZlcmJhdGltIGluZGljYXRlcyB0aGF0IHdoaXRlIHNwYWNlIGFuZCBsaW5lIGJyZWFrcyBpbg0KICAgIHRoZSBzb3VyY2UgZG9jdW1lbnQgYXJlIHRvIGJlIHByZXNlcnZlZCBpbiB0aGUgb3V0cHV0IGRvY3VtZW50Lg0KDQoNClthcHBlbmRpeF0NCk1pZ3JhdGlvbiBOb3Rlcw0KLS0tLS0tLS0tLS0tLS0tDQpbW1g1M11dDQpWZXJzaW9uIDcgdG8gdmVyc2lvbiA4DQp+fn5+fn5+fn5+fn5+fn5+fn5+fn5+DQotIEEgbmV3IHNldCBvZiBxdW90ZXMgaGFzIGJlZW4gaW50cm9kdWNlZCB3aGljaCBtYXkgbWF0Y2ggaW5saW5lIHRleHQNCiAgaW4gZXhpc3RpbmcgZG9jdW1lbnRzIC0tIGlmIHRoZXkgZG8geW91J2xsIG5lZWQgdG8gZXNjYXBlIHRoZQ0KICBtYXRjaGVkIHRleHQgd2l0aCBiYWNrc2xhc2hlcy4NCi0gVGhlIGluZGV4IGVudHJ5IGlubGluZSBtYWNybyBzeW50YXggaGFzIGNoYW5nZWQgLS0gaWYgeW91ciBkb2N1bWVudHMNCiAgaW5jbHVkZSBpbmRleGVzIHlvdSBtYXkgbmVlZCB0byBlZGl0IHRoZW0uDQotIFJlcGxhY2VkIGEyeCgxKSBgLS1uby1pY29uc2AgYW5kIGAtLW5vLWNvcHlgIG9wdGlvbnMgd2l0aCB0aGVpcg0KICBuZWdhdGVkIGVxdWl2YWxlbnRzOiBgLS1pY29uc2AgYW5kIGAtLWNvcHlgIHJlc3BlY3RpdmVseS4gVGhlDQogIGRlZmF1bHQgYmVoYXZpb3IgaGFzIGFsc28gY2hhbmdlZCAtLSB0aGUgdXNlIG9mIGljb25zIGFuZCBjb3B5aW5nIG9mDQogIGljb24gYW5kIENTUyBmaWxlcyBtdXN0IGJlIHNwZWNpZmllZCBleHBsaWNpdGx5IHdpdGggdGhlIGAtLWljb25zYA0KICBhbmQgYC0tY29weWAgb3B0aW9ucy4NCg0KVGhlIHJhdGlvbmFsZSBmb3IgdGhlIGNoYW5nZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBBc2NpaURvYw0KYENIQU5HRUxPR2AuDQoNCk5PVEU6IElmIHlvdSB3YW50IHRvIGRpc2FibGUgdW5jb25zdHJhaW5lZCBxdW90ZXMsIHRoZSBuZXcgYWx0ZXJuYXRpdmUNCmNvbnN0cmFpbmVkIHF1b3RlcyBzeW50YXggYW5kIHRoZSBuZXcgaW5kZXggZW50cnkgc3ludGF4IHRoZW4geW91IGNhbg0KZGVmaW5lIHRoZSBhdHRyaWJ1dGUgYGFzY2lpZG9jN2NvbXBhdGlibGVgIChmb3IgZXhhbXBsZSBieSB1c2luZyB0aGUNCmAtYSBhc2NpaWRvYzdjb21wYXRpYmxlYCBjb21tYW5kLWxpbmUgb3B0aW9uKS4NCg0KW1tYMzhdXQ0KW2FwcGVuZGl4XQ0KUGFja2FnZXIgTm90ZXMNCi0tLS0tLS0tLS0tLS0tDQpSZWFkIHRoZSBgUkVBRE1FYCBhbmQgYElOU1RBTExgIGZpbGVzIChpbiB0aGUgZGlzdHJpYnV0aW9uIHJvb3QNCmRpcmVjdG9yeSkgZm9yIGluc3RhbGwgcHJlcmVxdWlzaXRlcyBhbmQgcHJvY2VkdXJlcy4gIFRoZSBkaXN0cmlidXRpb24NCmBNYWtlZmlsZS5pbmAgKHVzZWQgYnkgYGNvbmZpZ3VyZWAgdG8gZ2VuZXJhdGUgdGhlIGBNYWtlZmlsZWApIGlzIHRoZQ0KY2Fub25pY2FsIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUuDQoNCg0KW1tYMzldXQ0KW2FwcGVuZGl4XQ0KQXNjaWlEb2MgU2FmZSBNb2RlDQotLS0tLS0tLS0tLS0tLS0tLS0tDQpBc2NpaURvYyAnc2FmZSBtb2RlJyBza2lwcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgc2NyaXB0ZWQgc2VjdGlvbnMgaW4NCkFzY2lpRG9jIHNvdXJjZSBmaWxlcyBieSBpbmhpYml0aW5nIHRoZSBleGVjdXRpb24gb2YgYXJiaXRyYXJ5IGNvZGUgb3INCnRoZSBpbmNsdXNpb24gb2YgYXJiaXRyYXJ5IGZpbGVzLg0KDQpUaGUgc2FmZSBtb2RlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGl0IGNhbiBiZSBlbmFibGVkIHdpdGggdGhlDQphc2NpaWRvYygxKSBgLS1zYWZlYCBjb21tYW5kLWxpbmUgb3B0aW9uLg0KDQouU2FmZSBtb2RlIGNvbnN0cmFpbnRzDQotIGBldmFsYCwgYHN5c2AgYW5kIGBzeXMyYCBleGVjdXRhYmxlIGF0dHJpYnV0ZXMgYW5kIGJsb2NrIG1hY3JvcyBhcmUNCiAgbm90IGV4ZWN1dGVkLg0KLSBgaW5jbHVkZTo6PGZpbGVuYW1lPltdYCBhbmQgYGluY2x1ZGUxOjo8ZmlsZW5hbWU+W11gIGJsb2NrIG1hY3JvDQogIGZpbGVzIG11c3QgcmVzaWRlIGluc2lkZSB0aGUgcGFyZW50IGZpbGUncyBkaXJlY3RvcnkuDQotIGB7aW5jbHVkZTo8ZmlsZW5hbWU+fWAgZXhlY3V0YWJsZSBhdHRyaWJ1dGUgZmlsZXMgbXVzdCByZXNpZGUNCiAgaW5zaWRlIHRoZSBzb3VyY2UgZG9jdW1lbnQgZGlyZWN0b3J5Lg0KLSBQYXNzdGhyb3VnaCBCbG9ja3MgYXJlIGRyb3BwZWQuDQoNCltXQVJOSU5HXQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpUaGUgc2FmZSBtb2RlIGlzIG5vdCBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgdW5zYWZlIEFzY2lpRG9jDQpjb25maWd1cmF0aW9uIGZpbGVzLiBCZSBlc3BlY2lhbGx5IGNhcmVmdWwgd2hlbjoNCg0KMS4gSW1wbGVtZW50aW5nIGZpbHRlcnMuDQoyLiBJbXBsZW1lbnRpbmcgZWxlbWVudHMgdGhhdCBkb24ndCBlc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzLg0KMy4gQWNjZXB0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgZnJvbSB1bnRydXN0ZWQgc291cmNlcy4NCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQoNClthcHBlbmRpeF0NClVzaW5nIEFzY2lpRG9jIHdpdGggbm9uLUVuZ2xpc2ggTGFuZ3VhZ2VzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQXNjaWlEb2MgY2FuIHByb2Nlc3MgVVRGLTggY2hhcmFjdGVyIHNldHMgYnV0IHRoZXJlIGFyZSBzb21lIHRoaW5ncw0KeW91IG5lZWQgdG8gYmUgYXdhcmUgb2Y6DQoNCi0gSWYgeW91IGFyZSBnZW5lcmF0aW5nIG91dHB1dCBkb2N1bWVudHMgdXNpbmcgYSBEb2NCb29rIHRvb2xjaGFpbg0KICB0aGVuIHlvdSBzaG91bGQgc2V0IHRoZSBBc2NpaURvYyBgbGFuZ2AgYXR0cmlidXRlIHRvIHRoZSBhcHByb3ByaWF0ZQ0KICBsYW5ndWFnZSAoaXQgZGVmYXVsdHMgdG8gYGVuYCAoRW5nbGlzaCkpLiBUaGlzIHdpbGwgZW5zdXJlIHRoaW5ncw0KICBsaWtlIHRhYmxlIG9mIGNvbnRlbnRzLCBmaWd1cmUgYW5kIHRhYmxlIGNhcHRpb25zIGFuZCBhZG1vbml0aW9uDQogIGNhcHRpb25zIGFyZSBvdXRwdXQgaW4gdGhlIHNwZWNpZmllZCBsYW5ndWFnZS4gIEZvciBleGFtcGxlOg0KDQogICQgYTJ4IC1hIGxhbmc9ZXMgZG9jL2FydGljbGUudHh0DQoNCi0gSWYgeW91IGFyZSBvdXRwdXR0aW5nIEhUTUwgZGlyZWN0bHkgZnJvbSBhc2NpaWRvYygxKSB5b3UnbGwNCiAgbmVlZCB0byBzZXQgdGhlIHZhcmlvdXMgYCpfY2FwdGlvbmAgYXR0cmlidXRlcyB0byBtYXRjaCB5b3VyIHRhcmdldA0KICBsYW5ndWFnZSAoc2VlIHRoZSBsaXN0IG9mIGNhcHRpb25zIGFuZCB0aXRsZXMgaW4gdGhlIGBbYXR0cmlidXRlc11gDQogIHNlY3Rpb24gb2YgdGhlIGRpc3RyaWJ1dGlvbiBgbGFuZy0qLmNvbmZgIGZpbGVzKS4gVGhlIGVhc2llc3Qgd2F5IGlzDQogIHRvIGNyZWF0ZSBhIGxhbmd1YWdlIGAuY29uZmAgZmlsZSAoc2VlIHRoZSBBc2NpaURvYydzIGBsYW5nLWVuLmNvbmZgDQogIGZpbGUpLg0KKw0KTk9URTogWW91IHN0aWxsIHVzZSB0aGUgJ05PVEUnLCAnQ0FVVElPTicsICdUSVAnLCAnV0FSTklORycsDQonSU1QT1JUQU5UJyBjYXB0aW9ucyBpbiB0aGUgQXNjaWlEb2Mgc291cmNlLCB0aGV5IGdldCB0cmFuc2xhdGVkIGluDQp0aGUgSFRNTCBvdXRwdXQgZmlsZS4NCg0KLSBhc2NpaWRvYygxKSBhdXRvbWF0aWNhbGx5IGxvYWRzIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmFtZWQgbGlrZQ0KICBgbGFuZy08bGFuZz4uY29uZmAgd2hlcmUgYDxsYW5nPmAgaXMgYSB0d28gbGV0dGVyIGxhbmd1YWdlIGNvZGUgdGhhdA0KICBtYXRjaGVzIHRoZSBjdXJyZW50IEFzY2lpRG9jIGBsYW5nYCBhdHRyaWJ1dGUuIFNlZSBhbHNvDQogIDw8WDI3LENvbmZpZ3VyYXRpb24gRmlsZSBOYW1lcyBhbmQgTG9jYXRpb25zPj4uDQoNCg0KW2FwcGVuZGl4XQ0KVmltIFN5bnRheCBIaWdobGlnaHRlcg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KU3ludGF4IGhpZ2hsaWdodGluZyBpcyBpbmNyZWRpYmx5IHVzZWZ1bCwgaW4gYWRkaXRpb24gdG8gbWFraW5nDQpyZWFkaW5nIEFzY2lpRG9jIGRvY3VtZW50cyBtdWNoIGVhc2llciBzeW50YXggaGlnaGxpZ2h0aW5nIGFsc28gaGVscHMNCnlvdSBjYXRjaCBBc2NpaURvYyBzeW50YXggZXJyb3JzIGFzIHlvdSB3cml0ZSB5b3VyIGRvY3VtZW50cy4NCg0KVGhlIEFzY2lpRG9jIGAuL3ZpbS9gIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnkgY29udGFpbnMgVmltIHN5bnRheA0KaGlnaGxpZ2h0ZXIgYW5kIGZpbGV0eXBlIGRldGVjdGlvbiBzY3JpcHRzIGZvciBBc2NpaURvYy4gIFN5bnRheA0KaGlnaGxpZ2h0aW5nIG1ha2VzIGl0IG11Y2ggZWFzaWVyIHRvIHNwb3QgQXNjaWlEb2Mgc3ludGF4IGVycm9ycy4NCg0KSWYgVmltIGlzIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSB0aGUgQXNjaWlEb2MgaW5zdGFsbGVyDQooYGluc3RhbGwuc2hgKSB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUgdmltIHNjcmlwdHMgaW4gdGhlIFZpbQ0KZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IChgL2V0Yy92aW1gKS4NCg0KWW91IGNhbiBhbHNvIHR1cm4gb24gc3ludGF4IGhpZ2hsaWdodGluZyBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lDQp0byB0aGUgZW5kIG9mIHlvdSBBc2NpaURvYyBzb3VyY2UgZmlsZXM6DQoNCiAgLy8gdmltOiBzZXQgc3ludGF4PWFzY2lpZG9jOg0KDQpUSVA6IEJvbGQgZm9udHMgYXJlIG9mdGVuIGVhc2llciB0byByZWFkLCB1c2UgdGhlIFZpbSBgOnNldA0KYmFja2dyb3VuZD1kYXJrYCBjb21tYW5kIHRvIHNldCBib2xkIGJyaWdodCBmb250cy4NCg0KTk9URTogVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGFsdGVybmF0aXZlIHN5bnRheCBoaWdobGlnaHRlcnMgZm9yDQp2YXJpb3VzIGVkaXRvcnMgbGlzdGVkIG9uIHRoZSB7d2Vic2l0ZX1bQXNjaWlEb2Mgd2Vic2l0ZV0uDQoNCkxpbWl0YXRpb25zDQp+fn5+fn5+fn5+fg0KVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBhIHJlYXNvbmFibGUgam9iIGJ1dCBvbiBvY2Nhc2lvbnMgZ2V0cw0KdGhpbmdzIHdyb25nOg0KDQotIE5lc3RlZCBxdW90ZWQgdGV4dCBmb3JtYXR0aW5nIGlzIGhpZ2hsaWdodGVkIGFjY29yZGluZyB0byB0aGUgb3V0ZXINCiAgZm9ybWF0Lg0KLSBJZiBhIGNsb3NpbmcgRXhhbXBsZSBCbG9jayBkZWxpbWl0ZXIgaXMgc29tZXRpbWVzIG1pc3Rha2VuIGZvciBhDQogIHRpdGxlIHVuZGVybGluZS4gQSB3b3JrYXJvdW5kIGlzIHRvIGluc2VydCBhIGJsYW5rIGxpbmUgYmVmb3JlIHRoZQ0KICBjbG9zaW5nIGRlbGltaXRlci4NCi0gTGluZXMgd2l0aGluIGEgcGFyYWdyYXBoIHN0YXJ0aW5nIHdpdGggZXF1YWxzIGNoYXJhY3RlcnMgbWF5IGJlDQogIGhpZ2hsaWdodGVkIGFzIHNpbmdsZS1saW5lIHRpdGxlcy4NCi0gTGluZXMgd2l0aGluIGEgcGFyYWdyYXBoIGJlZ2lubmluZyB3aXRoIGEgcGVyaW9kIG1heSBiZSBoaWdobGlnaHRlZA0KICBhcyBibG9jayB0aXRsZXMuDQoNCg0KW1tYNzRdXQ0KW2FwcGVuZGl4XQ0KQXR0cmlidXRlIE9wdGlvbnMNCi0tLS0tLS0tLS0tLS0tLS0tDQpIZXJlIGlzIHRoZSBsaXN0IG9mIHByZWRlZmluZWQgPDxYNzUsYXR0cmlidXRlIGxpc3Qgb3B0aW9ucz4+Og0KDQoNCltjb2xzPSIyZSwyLDIsNSIsZnJhbWU9InRvcGJvdCIsb3B0aW9ucz0iaGVhZGVyIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KfE9wdGlvbnxCYWNrZW5kc3xBc2NpaURvYyBFbGVtZW50c3xEZXNjcmlwdGlvbg0KDQp8YXV0b3dpZHRoIHx4aHRtbDExLCBodG1sNSwgaHRtbDQgfHRhYmxlfA0KVGhlIGNvbHVtbiB3aWR0aHMgYXJlIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIsIG5vdCB0aGUgQXNjaWlEb2MNCidjb2xzJyBhdHRyaWJ1dGUuIElmIHRoZXJlIGlzIG5vICd3aWR0aCcgYXR0cmlidXRlIHRoZSB0YWJsZSB3aWR0aCBpcw0KYWxzbyBsZWZ0IHVwIHRvIHRoZSBicm93c2VyLg0KDQp8dW5icmVha2FibGUgfHhodG1sMTEsIGh0bWw1IHxibG9jayBlbGVtZW50c3wNCid1bmJyZWFrYWJsZScgYXR0ZW1wdHMgdG8ga2VlcCB0aGUgYmxvY2sgZWxlbWVudCB0b2dldGhlciBvbiBhIHNpbmdsZQ0KcHJpbnRlZCBwYWdlIGMuZi4gdGhlICdicmVha2FibGUnIGFuZCAndW5icmVha2FibGUnIGRvY2Jvb2sgKFhTTC9GTykNCm9wdGlvbnMgYmVsb3cuDQoNCnxicmVha2FibGUsIHVuYnJlYWthYmxlIHxkb2Nib29rIChYU0wvRk8pIHx0YWJsZSwgZXhhbXBsZSwgYmxvY2sgaW1hZ2V8DQpUaGUgJ2JyZWFrYWJsZScgb3B0aW9ucyBhbGxvd3MgYmxvY2sgZWxlbWVudHMgdG8gYnJlYWsgYWNyb3NzIHBhZ2UNCmJvdW5kYXJpZXM7ICd1bmJyZWFrYWJsZScgYXR0ZW1wdHMgdG8ga2VlcCB0aGUgYmxvY2sgZWxlbWVudCB0b2dldGhlcg0Kb24gYSBzaW5nbGUgcGFnZS4gSWYgbmVpdGhlciBvcHRpb24gaXMgc3BlY2lmaWVkIHRoZSBkZWZhdWx0IFhTTA0Kc3R5bGVzaGVldCBiZWhhdmlvciBwcmV2YWlscy4NCg0KfGNvbXBhY3QgfGRvY2Jvb2ssIHhodG1sMTEsIGh0bWw1IHxidWxsZXRlZCBsaXN0LCBudW1iZXJlZCBsaXN0fA0KTWluaW1pemVzIHZlcnRpY2FsIHNwYWNlIGluIHRoZSBsaXN0DQoNCnxmb290ZXIgfGRvY2Jvb2ssIHhodG1sMTEsIGh0bWw1LCBodG1sNCB8dGFibGV8DQpUaGUgbGFzdCByb3cgb2YgdGhlIHRhYmxlIGlzIHJlbmRlcmVkIGFzIGEgZm9vdGVyLg0KDQp8aGVhZGVyIHxkb2Nib29rLCB4aHRtbDExLCBodG1sNSwgaHRtbDQgfHRhYmxlfA0KVGhlIGZpcnN0IHJvdyBvZiB0aGUgdGFibGUgaXMgcmVuZGVyZWQgYXMgYSBoZWFkZXIuDQoNCnxwZ3dpZGUgfGRvY2Jvb2sgKFhTTC9GTykgfHRhYmxlLCBibG9jayBpbWFnZSwgaG9yaXpvbnRhbCBsYWJlbGVkIGxpc3R8DQpTcGVjaWZpZXMgdGhhdCB0aGUgZWxlbWVudCBzaG91bGQgYmUgcmVuZGVyZWQgYWNyb3NzIHRoZSBmdWxsIHRleHQNCndpZHRoIG9mIHRoZSBwYWdlIGlycmVzcGVjdGl2ZSBvZiB0aGUgY3VycmVudCBpbmRlbnRhdGlvbi4NCg0KfHN0cm9uZyB8eGh0bWwxMSwgaHRtbDUsIGh0bWw0IHxsYWJlbGVkIGxpc3RzfA0KRW1ib2xkZW5zIGxhYmVsIHRleHQuDQp8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KDQpbW1g4Ml1dDQpbYXBwZW5kaXhdDQpEaWFnbm9zdGljcw0KLS0tLS0tLS0tLS0NClRoZSBgYXNjaWlkb2MoMSlgIGAtLXZlcmJvc2VgIGNvbW1hbmQtbGluZSBvcHRpb24gcHJpbnRzIGFkZGl0aW9uYWwNCmluZm9ybWF0aW9uIHRvIHN0ZGVycjogZmlsZXMgcHJvY2Vzc2VkLCBmaWx0ZXJzIHByb2Nlc3NlZCwgd2FybmluZ3MsDQpzeXN0ZW0gYXR0cmlidXRlIGV2YWx1YXRpb24uDQoNCkEgc3BlY2lhbCBhdHRyaWJ1dGUgbmFtZWQgJ3RyYWNlJyBlbmFibGVzIHRoZSBvdXRwdXQgb2YNCmVsZW1lbnQtYnktZWxlbWVudCBkaWFnbm9zdGljIG1lc3NhZ2VzIGRldGFpbGluZyBvdXRwdXQgbWFya3VwDQpnZW5lcmF0aW9uIHRvIHN0ZGVyci4gIFRoZSAndHJhY2UnIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IG9uIHRoZQ0KY29tbWFuZC1saW5lIG9yIGZyb20gd2l0aGluIHRoZSBkb2N1bWVudCB1c2luZyA8PFgxOCxBdHRyaWJ1dGUNCkVudHJpZXM+PiAodGhlIGxhdHRlciBhbGxvd3MgdHJhY2luZyB0byBiZSBjb25maW5lZCB0byBzcGVjaWZpYw0KcG9ydGlvbnMgb2YgdGhlIGRvY3VtZW50KS4NCg0KLSBUcmFjZSBtZXNzYWdlcyBwcmludCB0aGUgc291cmNlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgYW5kIHRoZQ0KICB0cmFjZSBuYW1lIGZvbGxvd2VkIGJ5IHJlbGF0ZWQgbWFya3VwLg0KLSAndHJhY2UgbmFtZXMnIGFyZSBub3JtYWxseSB0aGUgbmFtZXMgb2YgQXNjaWlEb2MgZWxlbWVudHMgKHNlZSB0aGUNCiAgbGlzdCBiZWxvdykuDQotIFRoZSB0cmFjZSBtZXNzYWdlIGlzIG9ubHkgcHJpbnRlZCBpZiB0aGUgJ3RyYWNlJyBhdHRyaWJ1dGUgdmFsdWUNCiAgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgYSAndHJhY2UgbmFtZScuIFRoZSAndHJhY2UnIGF0dHJpYnV0ZSB2YWx1ZSBjYW4NCiAgYmUgYW55IFB5dGhvbiByZWd1bGFyIGV4cHJlc3Npb24uICBJZiBhIHRyYWNlIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQNCiAgYWxsIHRyYWNlIG1lc3NhZ2VzIHdpbGwgYmUgcHJpbnRlZCAodGhpcyBjYW4gcmVzdWx0IGluIGxhcmdlIGFtb3VudHMNCiAgb2Ygb3V0cHV0IGlmIGFwcGxpZWQgdG8gdGhlIHdob2xlIGRvY3VtZW50KS4NCg0KLSBJbiB0aGUgY2FzZSBvZiBpbmxpbmUgc3Vic3RpdHV0aW9uczoNCiAgKiBUaGUgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzdWJzdGl0dXRpb24gaXMgcHJpbnRlZDsgdGhlIGJlZm9yZQ0KICAgIHRleHQgaXMgcHJlY2VkZWQgYnkgYSBsaW5lIGNvbnRhaW5pbmcgYDw8PGAgYW5kIHRoZSBhZnRlciB0ZXh0IGJ5DQogICAgYSBsaW5lIGNvbnRhaW5pbmcgYD4+PmAuDQogICogVGhlICdzdWJzJyB0cmFjZSB2YWx1ZSBpcyBhbiBhbGlhcyBmb3IgYWxsIGlubGluZSBzdWJzdGl0dXRpb25zLg0KDQouVHJhY2UgbmFtZXMNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KPGJsb2NrbmFtZT4gYmxvY2sgY2xvc2UNCjxibG9ja25hbWU+IGJsb2NrIG9wZW4NCjxzdWJzPg0KZHJvcHBlZCBsaW5lIChhIGxpbmUgY29udGFpbmluZyBhbiB1bmRlZmluZWQgYXR0cmlidXRlIHJlZmVyZW5jZSkuDQpmbG9hdGluZyB0aXRsZQ0KZm9vdGVyDQpoZWFkZXINCmxpc3QgY2xvc2UNCmxpc3QgZW50cnkgY2xvc2UNCmxpc3QgZW50cnkgb3Blbg0KbGlzdCBpdGVtIGNsb3NlDQpsaXN0IGl0ZW0gb3Blbg0KbGlzdCBsYWJlbCBjbG9zZQ0KbGlzdCBsYWJlbCBvcGVuDQpsaXN0IG9wZW4NCm1hY3JvIGJsb2NrIChhIGJsb2NrIG1hY3JvKQ0KbmFtZSAobWFuIHBhZ2UgTkFNRSBzZWN0aW9uKQ0KcGFyYWdyYXBoDQpwcmVhbWJsZSBjbG9zZQ0KcHJlYW1ibGUgb3Blbg0KcHVzaCBibG9ja25hbWUNCnBvcCBibG9ja25hbWUNCnNlY3Rpb24gY2xvc2UNCnNlY3Rpb24gb3BlbjogbGV2ZWwgPGxldmVsPg0Kc3VicyAoYWxsIGlubGluZSBzdWJzdGl0dXRpb25zKQ0KdGFibGUNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpXaGVyZToNCg0KLSBgPGxldmVsPmAgaXMgc2VjdGlvbiBsZXZlbCBudW1iZXIgJzAuLi40Jy4NCi0gYDxibG9ja25hbWU+YCBpcyBhIGRlbGltaXRlZCBibG9jayBuYW1lOiAnY29tbWVudCcsICdzaWRlYmFyJywNCiAgJ29wZW4nLCAncGFzcycsICdsaXN0aW5nJywgJ2xpdGVyYWwnLCAncXVvdGUnLCAnZXhhbXBsZScuDQotIGA8c3Vicz5gIGlzIGFuIGlubGluZSBzdWJzdGl0dXRpb24gdHlwZToNCiAgJ3NwZWNpYWxjaGFyYWN0ZXJzJywncXVvdGVzJywnc3BlY2lhbHdvcmRzJywgJ3JlcGxhY2VtZW50cycsDQogICdhdHRyaWJ1dGVzJywnbWFjcm9zJywnY2FsbG91dHMnLCAncmVwbGFjZW1lbnRzMicsICdyZXBsYWNlbWVudHMzJy4NCg0KQ29tbWFuZC1saW5lIGV4YW1wbGVzOg0KDQouIFRyYWNlIHRoZSBlbnRpcmUgZG9jdW1lbnQuDQoNCiAgJCBhc2NpaWRvYyAtYSB0cmFjZSBteWRvYy50eHQNCg0KLiBUcmFjZSBtZXNzYWdlcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIGBxdW90ZXNgIG9yIGBtYWNyb3NgOg0KDQogICQgYXNjaWlkb2MgLWEgJ3RyYWNlPXF1b3Rlc3xtYWNyb3MnICBteWRvYy50eHQNCg0KLiBQcmludCB0aGUgZmlyc3QgbGluZSBvZiBlYWNoIHRyYWNlIG1lc3NhZ2U6DQoNCiAgJCBhc2NpaWRvYyAtYSB0cmFjZSBteWRvYy50eHQgMj4mMSB8IGdyZXAgXlRSQUNFOg0KDQpBdHRyaWJ1dGUgRW50cnkgZXhhbXBsZXM6DQoNCi4gQmVnaW4gcHJpbnRpbmcgYWxsIHRyYWNlIG1lc3NhZ2VzOg0KDQogIDp0cmFjZToNCg0KLiBQcmludCBvbmx5IG1hdGNoZWQgdHJhY2UgbWVzc2FnZXM6DQoNCiAgOnRyYWNlOiBxdW90ZXN8bWFjcm9zDQoNCi4gVHVybiB0cmFjZSBtZXNzYWdlcyBvZmY6DQoNCiAgOnRyYWNlIToNCg0KDQpbW1g4OF1dDQpbYXBwZW5kaXhdDQpCYWNrZW5kIEF0dHJpYnV0ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhpcyB0YWJsZSBjb250YWlucyBhIGxpc3Qgb2Ygb3B0aW9uYWwgYXR0cmlidXRlcyB0aGF0IGluZmx1ZW5jZSB0aGUNCmdlbmVyYXRlZCBvdXRwdXRzLg0KDQpbY29scz0iMWUsMSw1YSIsZnJhbWU9InRvcGJvdCIsb3B0aW9ucz0iaGVhZGVyIl0NCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KfE5hbWUgfEJhY2tlbmRzIHxEZXNjcmlwdGlvbg0KDQp8YmFkZ2VzIHx4aHRtbDExLCBodG1sNSB8DQpMaW5rIGJhZGdlcyAoJ1hIVE1MIDEuMScgYW5kICdDU1MnKSBpbiBkb2N1bWVudCBmb290ZXJzLiBCeSBkZWZhdWx0DQpiYWRnZXMgYXJlIG9taXR0ZWQgKCdiYWRnZXMnIGlzIHVuZGVmaW5lZCkuDQoNCk5PVEU6IFRoZSBwYXRoIG5hbWVzIG9mIGltYWdlcywgaWNvbnMgYW5kIHNjcmlwdHMgYXJlIHJlbGF0aXZlIHBhdGgNCm5hbWVzIHRvIHRoZSBvdXRwdXQgZG9jdW1lbnQgbm90IHRoZSBzb3VyY2UgZG9jdW1lbnQuDQoNCnxkYXRhLXVyaSB8eGh0bWwxMSwgaHRtbDUgfA0KRW1iZWQgaW1hZ2VzIHVzaW5nIHRoZSA8PFg2NixkYXRhOiB1cmkgc2NoZW1lPj4uDQoNCnxjc3Mtc2lnbmF0dXJlIHxodG1sNSwgeGh0bWwxMSB8DQpTZXQgYSAnQ1NTIHNpZ25hdHVyZScgZm9yIHRoZSBkb2N1bWVudCAoc2V0cyB0aGUgJ2lkJyBhdHRyaWJ1dGUgb2YgdGhlDQpIVE1MICdib2R5JyBlbGVtZW50KS4gQ1NTIHNpZ25hdHVyZXMgcHJvdmlkZSBhIG1lY2hhbmlzbSB0aGF0IGFsbG93cw0KdXNlcnMgdG8gcGVyc29uYWxpemUgdGhlIGRvY3VtZW50IGFwcGVhcmFuY2UuIFRoZSB0ZXJtICdDU1Mgc2lnbmF0dXJlJw0Kd2FzIGh0dHA6Ly9hcmNoaXZpc3QuaW5jdXRpby5jb20vdmlld2xpc3QvY3NzLWRpc2N1c3MvMTMyOTFbY29pbmVkIGJ5DQpFcmljIE1leWVyXS4NCg0KDQp8ZGlzYWJsZS1qYXZhc2NyaXB0IHx4aHRtbDExLCBodG1sNSB8DQpJZiB0aGUgYGRpc2FibGUtamF2YXNjcmlwdGAgYXR0cmlidXRlIGlzIGRlZmluZWQgdGhlIGBhc2NpaWRvYy5qc2ANCkphdmFTY3JpcHQgaXMgbm90IGVtYmVkZGVkIG9yIGxpbmtlZCB0byB0aGUgb3V0cHV0IGRvY3VtZW50LiAgQnkNCmRlZmF1bHQgQXNjaWlEb2MgYXV0b21hdGljYWxseSBlbWJlZHMgb3IgbGlua3MgdGhlIGBhc2NpaWRvYy5qc2ANCkphdmFTY3JpcHQgdG8gdGhlIG91dHB1dCBkb2N1bWVudC4gVGhlIHNjcmlwdCBkeW5hbWljYWxseSBnZW5lcmF0ZXMNCjw8WDkxLHRhYmxlIG9mIGNvbnRlbnRzPj4gYW5kIDw8WDkyLGZvb3Rub3Rlcz4+Lg0KDQp8W1tYOTddXSBkb2NpbmZvLCBkb2NpbmZvMSwgZG9jaW5mbzIgfEFsbCBiYWNrZW5kcyB8DQpUaGVzZSB0aHJlZSBhdHRyaWJ1dGVzIGNvbnRyb2wgd2hpY2ggPDxYODcsZG9jdW1lbnQgaW5mb3JtYXRpb24NCmZpbGVzPj4gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdGhlIGhlYWRlciBvZiB0aGUgb3V0cHV0IGZpbGU6DQoNCmRvY2luZm86OiBJbmNsdWRlIGA8ZmlsZW5hbWU+LWRvY2luZm8uPGV4dD5gDQpkb2NpbmZvMTo6IEluY2x1ZGUgYGRvY2luZm8uPGV4dD5gDQpkb2NpbmZvMjo6IEluY2x1ZGUgYGRvY2luZm8uPGV4dD5gIGFuZCBgPGZpbGVuYW1lPi1kb2NpbmZvLjxleHQ+YA0KDQpXaGVyZSBgPGZpbGVuYW1lPmAgaXMgdGhlIGZpbGUgbmFtZSAoc2FucyBleHRlbnNpb24pIG9mIHRoZSBBc2NpaURvYw0KaW5wdXQgZmlsZSBhbmQgYDxleHQ+YCBpcyBgLmh0bWxgIGZvciBIVE1MIG91dHB1dHMgb3IgYC54bWxgIGZvcg0KRG9jQm9vayBvdXRwdXRzLiBJZiB0aGUgaW5wdXQgZmlsZSBpcyB0aGUgc3RhbmRhcmQgaW5wdXQgdGhlbiB0aGUNCm91dHB1dCBmaWxlIG5hbWUgaXMgdXNlZC4gVGhlIGZvbGxvd2luZyBleGFtcGxlIHdpbGwgaW5jbHVkZSB0aGUNCmBteWRvYy1kb2NpbmZvLnhtbGAgZG9jaW5mbyBmaWxlIGluIHRoZSBEb2NCb29rIGBteWRvYy54bWxgIG91dHB1dA0KZmlsZToNCg0KICAkIGFzY2lpZG9jIC1hIGRvY2luZm8gLWIgZG9jYm9vayBteWRvYy50eHQNCg0KVGhpcyBuZXh0IGV4YW1wbGUgd2lsbCBpbmNsdWRlIGBkb2NpbmZvLmh0bWxgIGFuZCBgbXlkb2MtZG9jaW5mby5odG1sYA0KZG9jaW5mbyBmaWxlcyBpbiB0aGUgSFRNTCBvdXRwdXQgZmlsZToNCg0KICAkIGFzY2lpZG9jIC1hIGRvY2luZm8yIC1iIGh0bWw0IG15ZG9jLnR4dA0KDQoNCnxbW1g1NF1dZW5jb2RpbmcgfGh0bWw0LCBodG1sNSwgeGh0bWwxMSwgZG9jYm9vayB8DQpTZXQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZG9jdW1lbnQgY2hhcmFjdGVyIHNldCBlbmNvZGluZy4gRm9yIGV4YW1wbGUNCnRoZSBgLS1hdHRyaWJ1dGUgZW5jb2Rpbmc9SVNPLTg4NTktMWAgY29tbWFuZC1saW5lIG9wdGlvbiB3aWxsIHNldCB0aGUNCmNoYXJhY3RlciBzZXQgZW5jb2RpbmcgdG8gYElTTy04ODU5LTFgLg0KDQotIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzIFVURi04Lg0KLSBUaGlzIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlciBzZXQgaW4gdGhlIG91dHB1dCBkb2N1bWVudC4NCi0gVGhlIGVuY29kaW5nIG5hbWUgbXVzdCBjb3JyZXNwb25kIHRvIGEgUHl0aG9uIGNvZGVjIG5hbWUgb3IgYWxpYXMuDQotIFRoZSAnZW5jb2RpbmcnIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IHVzaW5nIGFuIEF0dHJpYnV0ZUVudHJ5IGluc2lkZQ0KICB0aGUgZG9jdW1lbnQgaGVhZGVyLiBGb3IgZXhhbXBsZToNCg0KICA6ZW5jb2Rpbmc6IElTTy04ODU5LTENCg0KfFtbWDQ1XV1pY29ucyB8eGh0bWwxMSwgaHRtbDUgfA0KTGluayBhZG1vbml0aW9uIHBhcmFncmFwaCBhbmQgYWRtb25pdGlvbiBibG9jayBpY29uIGltYWdlcyBhbmQgYmFkZ2UNCmltYWdlcy4gQnkgZGVmYXVsdCAnaWNvbnMnIGlzIHVuZGVmaW5lZCBhbmQgdGV4dCBpcyB1c2VkIGluIHBsYWNlIG9mDQppY29uIGltYWdlcy4NCg0KfFtbWDQ0XV1pY29uc2RpciB8aHRtbDQsIGh0bWw1LCB4aHRtbDExLCBkb2Nib29rIHwNClRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBsaW5rZWQgYWRtb25pdGlvbiBpY29ucywNCm5hdmlnYXRpb24gaWNvbnMgYW5kIHRoZSBgY2FsbG91dHNgIHN1Yi1kaXJlY3RvcnkgKHRoZSBgY2FsbG91dHNgDQpzdWItZGlyZWN0b3J5IGNvbnRhaW5zIDw8WDEwNSxjYWxsb3V0Pj4gbnVtYmVyIGltYWdlcykuICdpY29uc2RpcicNCmRlZmF1bHRzIHRvIGAuL2ltYWdlcy9pY29uc2AuDQoNCnxpbWFnZXNkaXIgfGh0bWw0LCBodG1sNSwgeGh0bWwxMSwgZG9jYm9vayB8DQpJZiB0aGlzIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGl0IGlzIHByZXBlbmRlZCB0byB0aGUgdGFyZ2V0IGltYWdlIGZpbGUNCm5hbWUgcGF0aHMgaW4gaW5saW5lIGFuZCBibG9jayBpbWFnZSBtYWNyb3MuDQoNCnxrZXl3b3JkcywgZGVzY3JpcHRpb24sIHRpdGxlIHxodG1sNCwgaHRtbDUsIHhodG1sMTEgfA0KVGhlICdrZXl3b3JkcycgYW5kICdkZXNjcmlwdGlvbicgYXR0cmlidXRlcyBzZXQgdGhlIGNvcnJlc3BvbmRpbmdseQ0KbmFtZWQgSFRNTCBtZXRhIHRhZyBjb250ZW50czsgdGhlICd0aXRsZScgYXR0cmlidXRlIHNldHMgdGhlIEhUTUwNCnRpdGxlIHRhZyBjb250ZW50cy4gIFRoZWlyIHByaW5jaXBsZSB1c2UgaXMgZm9yIFNFTyAoU2VhcmNoIEVuZ2luZQ0KT3B0aW1pc2F0aW9uKS4gIEFsbCB0aHJlZSBhcmUgb3B0aW9uYWwsIGJ1dCBpZiB0aGV5IGFyZSB1c2VkIHRoZXkgbXVzdA0KYXBwZWFyIGluIHRoZSBkb2N1bWVudCBoZWFkZXIgKG9yIG9uIHRoZSBjb21tYW5kLWxpbmUpLiBJZiAndGl0bGUnIGlzDQpub3Qgc3BlY2lmaWVkIHRoZSBBc2NpaURvYyBkb2N1bWVudCB0aXRsZSBpcyB1c2VkLg0KDQp8bGlua2NzcyB8aHRtbDUsIHhodG1sMTEgfA0KTGluayBDU1Mgc3R5bGVzaGVldHMgYW5kIEphdmFTY3JpcHRzLiBCeSBkZWZhdWx0ICdsaW5rY3NzJyBpcw0KdW5kZWZpbmVkIGluIHdoaWNoIGNhc2Ugc3R5bGVzaGVldHMgYW5kIHNjcmlwdHMgYXJlIGF1dG9tYXRpY2FsbHkNCmVtYmVkZGVkIGluIHRoZSBvdXRwdXQgZG9jdW1lbnQuDQoNCnxbW1gxMDNdXW1heC13aWR0aCB8aHRtbDUsIHhodG1sMTEgfA0KU2V0IHRoZSBkb2N1bWVudCBtYXhpbXVtIGRpc3BsYXkgd2lkdGggKHNldHMgdGhlICdib2R5JyBlbGVtZW50IENTUw0KJ21heC13aWR0aCcgcHJvcGVydHkpLg0KDQp8bnVtYmVyZWQgfGh0bWw0LCBodG1sNSwgeGh0bWwxMSwgZG9jYm9vayAoWFNMIFN0eWxlc2hlZXRzKSB8DQpBZGRzIHNlY3Rpb24gbnVtYmVycyB0byBzZWN0aW9uIHRpdGxlcy4gVGhlICdkb2Nib29rJyBiYWNrZW5kIGlnbm9yZXMNCidudW1iZXJlZCcgYXR0cmlidXRlIGVudHJpZXMgYWZ0ZXIgdGhlIGRvY3VtZW50IGhlYWRlci4NCg0KfHBsYWludGV4dCB8IEFsbCBiYWNrZW5kcyB8DQpJZiB0aGlzIGdsb2JhbCBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBhbGwgaW5saW5lIHN1YnN0aXR1dGlvbnMgYXJlDQpzdXBwcmVzc2VkIGFuZCBibG9jayBpbmRlbnRzIGFyZSByZXRhaW5lZC4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuDQpkZWFsaW5nIHdpdGggbGFyZ2UgYW1vdW50cyBvZiBpbXBvcnRlZCBwbGFpbiB0ZXh0Lg0KDQp8cXVpcmtzIHx4aHRtbDExIHwNCkluY2x1ZGUgdGhlIGB4aHRtbDExLXF1aXJrcy5jb25mYCBjb25maWd1cmF0aW9uIGZpbGUgYW5kDQpgeGh0bWwxMS1xdWlya3MuY3NzYCA8PFgzNSxzdHlsZXNoZWV0Pj4gdG8gd29yayBhcm91bmQgSUU2IGJyb3dzZXINCmluY29tcGF0aWJpbGl0aWVzLiBUaGlzIGZlYXR1cmUgaXMgZGVwcmVjYXRlZCBhbmQgaXRzIHVzZSBpcw0KZGlzY291cmFnZWQgLS0gZG9jdW1lbnRzIGFyZSBzdGlsbCB2aWV3YWJsZSBpbiBJRTYgd2l0aG91dCBpdC4NCg0KfHJldnJlbWFyayB8ZG9jYm9vayB8DQpBIHNob3J0IHN1bW1hcnkgb2YgY2hhbmdlcyBpbiB0aGlzIGRvY3VtZW50IHJldmlzaW9uLiBNdXN0IGJlIGRlZmluZWQNCnByaW9yIHRvIHRoZSBmaXJzdCBkb2N1bWVudCBzZWN0aW9uLiBUaGUgZG9jdW1lbnQgYWxzbyBuZWVkcyB0byBiZQ0KZGF0ZWQgdG8gb3V0cHV0IHRoaXMgYXR0cmlidXRlLg0KDQp8c2NyaXB0c2RpciB8aHRtbDUsIHhodG1sMTEgfA0KVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGxpbmtlZCBKYXZhU2NyaXB0cy4NClNlZSA8PFgzNSxIVE1MIHN0eWxlc2hlZXRzIGFuZCBKYXZhU2NyaXB0IGxvY2F0aW9ucz4+Lg0KDQp8c2dtbCB8ZG9jYm9vazQ1IHwNClRoZSBgLS1iYWNrZW5kPWRvY2Jvb2s0NWAgY29tbWFuZC1saW5lIG9wdGlvbiBwcm9kdWNlcyBEb2NCb29rIDQuNQ0KWE1MLiAgWW91IGNhbiBwcm9kdWNlIHRoZSBvbGRlciBEb2NCb29rIFNHTUwgZm9ybWF0IHVzaW5nIHRoZQ0KYC0tYXR0cmlidXRlIHNnbWxgIGNvbW1hbmQtbGluZSBvcHRpb24uDQoNCnxzdHlsZXNkaXIgfGh0bWw1LCB4aHRtbDExIHwNClRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBsaW5rZWQgb3IgZW1iZWRkZWQNCjw8WDM1LHN0eWxlc2hlZXRzPj4uDQpTZWUgPDxYMzUsSFRNTCBzdHlsZXNoZWV0cyBhbmQgSmF2YVNjcmlwdCBsb2NhdGlvbnM+Pi4NCg0KfHN0eWxlc2hlZXQgfGh0bWw1LCB4aHRtbDExIHwNClRoZSBmaWxlIG5hbWUgb2YgYW4gb3B0aW9uYWwgYWRkaXRpb25hbCBDU1MgPDxYMzUsc3R5bGVzaGVldD4+Lg0KDQp8dGhlbWUgfGh0bWw1LCB4aHRtbDExIHwNClVzZSBhbHRlcm5hdGl2ZSBzdHlsZXNoZWV0IChzZWUgPDxYMzUsU3R5bGVzaGVldHM+PikuDQoNCnxbW1g5MV1ddG9jIHxodG1sNSwgeGh0bWwxMSwgZG9jYm9vayAoWFNMIFN0eWxlc2hlZXRzKSB8DQpBZGRzIGEgdGFibGUgb2YgY29udGVudHMgdG8gdGhlIHN0YXJ0IG9mIGFuIGFydGljbGUgb3IgYm9vayBkb2N1bWVudC4NClRoZSBgdG9jYCBhdHRyaWJ1dGUgY2FuIGJlIHNwZWNpZmllZCB1c2luZyB0aGUgYC0tYXR0cmlidXRlIHRvY2ANCmNvbW1hbmQtbGluZSBvcHRpb24gb3IgYSBgOnRvYzpgIGF0dHJpYnV0ZSBlbnRyeSBpbiB0aGUgZG9jdW1lbnQNCmhlYWRlci4gVGhlICd0b2MnIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgJ2RvY2Jvb2snDQpiYWNrZW5kIGlzIHVzZWQuIFRvIGRpc2FibGUgdGFibGUgb2YgY29udGVudHMgZ2VuZXJhdGlvbiB1bmRlZmluZSB0aGUNCid0b2MnIGF0dHJpYnV0ZSBieSBwdXR0aW5nIGEgYDp0b2MhOmAgYXR0cmlidXRlIGVudHJ5IGluIHRoZSBkb2N1bWVudA0KaGVhZGVyIG9yIGZyb20gdGhlIGNvbW1hbmQtbGluZSB3aXRoIGFuIGAtLWF0dHJpYnV0ZSB0b2MhYCBvcHRpb24uDQoNCip4aHRtbDExIGFuZCBodG1sNSBiYWNrZW5kcyoNCg0KLSBKYXZhU2NyaXB0IG5lZWRzIHRvIGJlIGVuYWJsZWQgaW4geW91ciBicm93c2VyLg0KLSBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZ2VuZXJhdGVzIGEgbnVtYmVyZWQgdGFibGUgb2YgY29udGVudHMgdXNpbmcgYQ0KICBKYXZhU2NyaXB0IGVtYmVkZGVkIGluIHRoZSBgbXlkb2MuaHRtbGAgb3V0cHV0IGRvY3VtZW50Og0KDQogICQgYXNjaWlkb2MgLWEgdG9jIC1hIG51bWJlcmVkIG15ZG9jLnR4dA0KDQp8dG9jMiB8aHRtbDUsIHhodG1sMTEgfA0KQWRkcyBhIHNjcm9sbGFibGUgdGFibGUgb2YgY29udGVudHMgaW4gdGhlIGxlZnQgaGFuZCBtYXJnaW4gb2YgYW4NCmFydGljbGUgb3IgYm9vayBkb2N1bWVudC4gVXNlIHRoZSAnbWF4LXdpZHRoJyBhdHRyaWJ1dGUgdG8gY2hhbmdlIHRoZQ0KY29udGVudCB3aWR0aC4gSW4gYWxsIG90aGVyIHJlc3BlY3RzIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlICd0b2MnDQphdHRyaWJ1dGUuDQoNCnx0b2MtcGxhY2VtZW50IHxodG1sNSwgeGh0bWwxMSB8DQpXaGVuIHNldCB0byAnYXV0bycgKHRoZSBkZWZhdWx0IHZhbHVlKSBhc2NpaWRvYygxKSB3aWxsIHBsYWNlIHRoZQ0KdGFibGUgb2YgY29udGVudHMgaW4gdGhlIGRvY3VtZW50IGhlYWRlci4gV2hlbiAndG9jLXBsYWNlbWVudCcgaXMgc2V0DQp0byAnbWFudWFsJyB0aGUgVE9DIGNhbiBiZSBwb3NpdGlvbmVkIGFueXdoZXJlIGluIHRoZSBkb2N1bWVudCBieQ0KcGxhY2luZyB0aGUgYHRvYzo6W11gIGJsb2NrIG1hY3JvIGF0IHRoZSBwb2ludCB5b3Ugd2FudCB0aGUgVE9DIHRvDQphcHBlYXIuDQoNCk5PVEU6IElmIHlvdSB1c2UgJ3RvYy1wbGFjZW1lbnQnIHRoZW4geW91IGFsc28gaGF2ZSB0byBkZWZpbmUgdGhlDQo8PFg5MSx0b2M+PiBhdHRyaWJ1dGUuDQoNCnx0b2MtdGl0bGUgfGh0bWw1LCB4aHRtbDExIHwNClNldHMgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIHRpdGxlIChkZWZhdWx0cyB0byAnVGFibGUgb2YgQ29udGVudHMnKS4NCg0KfHRvY2xldmVscyB8aHRtbDUsIHhodG1sMTEgfA0KU2V0cyB0aGUgbnVtYmVyIG9mIHRpdGxlIGxldmVscyAoMS4uNCkgcmVwb3J0ZWQgaW4gdGhlIHRhYmxlIG9mDQpjb250ZW50cyAoc2VlIHRoZSAndG9jJyBhdHRyaWJ1dGUgYWJvdmUpLiBEZWZhdWx0cyB0byAyIGFuZCBtdXN0IGJlDQp1c2VkIHdpdGggdGhlICd0b2MnIGF0dHJpYnV0ZS4gRXhhbXBsZSB1c2FnZToNCg0KICAkIGFzY2lpZG9jIC1hIHRvYyAtYSB0b2NsZXZlbHM9MyBkb2MvYXNjaWlkb2MudHh0DQoNCnw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQoNClthcHBlbmRpeF0NCkxpY2Vuc2UNCi0tLS0tLS0NCkFzY2lpRG9jIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQNCnVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgJ0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMicgKEdQTHYyKQ0KYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQoNCkFzY2lpRG9jIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dA0KV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGZvciBtb3JlIGRldGFpbHMuDQoNCkFzY2lpRG9jIEhpZ2hsaWdodGVyIHNwb25zb3JlZCBieSBPJ1JlaWxseSBNZWRpYQ0KDQpDb3B5cmlnaHQgKEMpIDIwMDItMjAxMSBTdHVhcnQgUmFja2hhbS4NCg==]]></data>
	</file>
	<file>
	  <filename>/samples/assembly_x86.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c2VjdGlvbgkudGV4dA0KICAgIGdsb2JhbCBtYWluICAgICAgICAgO211c3QgYmUgZGVjbGFyZWQgZm9yIHVzaW5nIGdjYw0KDQptYWluOgkgICAgICAgICAgICAgICAgO3RlbGwgbGlua2VyIGVudHJ5IHBvaW50DQoNCgltb3YJZWR4LCBsZW4JICAgIDttZXNzYWdlIGxlbmd0aA0KCW1vdgllY3gsIG1zZwkgICAgO21lc3NhZ2UgdG8gd3JpdGUNCgltb3YJZWJ4LCAxCSAgICAgICAgO2ZpbGUgZGVzY3JpcHRvciAoc3Rkb3V0KQ0KCW1vdgllYXgsIDQJICAgICAgICA7c3lzdGVtIGNhbGwgbnVtYmVyIChzeXNfd3JpdGUpDQoJaW50CTB4ODAJICAgICAgICA7Y2FsbCBrZXJuZWwNCg0KCW1vdgllYXgsIDEJICAgICAgICA7c3lzdGVtIGNhbGwgbnVtYmVyIChzeXNfZXhpdCkNCglpbnQJMHg4MAkgICAgICAgIDtjYWxsIGtlcm5lbA0KDQpzZWN0aW9uCS5kYXRhDQoNCm1zZwlkYgknSGVsbG8sIHdvcmxkIScsMHhhCTtvdXIgZGVhciBzdHJpbmcNCmxlbgllcXUJJCAtIG1zZwkJCTtsZW5ndGggb2Ygb3VyIGRlYXIgc3RyaW5nDQo=]]></data>
	</file>
	<file>
	  <filename>/samples/autohotkey.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[I05vRW52DQpTZXRCYXRjaExpbmVzIC0xDQoNCkNvb3JkTW9kZSBNb3VzZSwgU2NyZWVuDQpPbkV4aXQgR3VpQ2xvc2UNCg0Kem9vbSA6PSA5DQoNCmNvbXB1dGVTaXplKCl7DQoJZ2xvYmFsIGFzX3gNCglhc194IDo9IFJvdW5kKHdzX3gvem9vbS8yIC0gMC41KQ0KCWlmICh6b29tPjEpIHsNCgkJcGl4IDo9IFJvdW5kKHpvb20pDQoJfSBlbGUgew0KCQlwaXggOj0gMQ0KCX0NCiAgICBUb29sVGlwIE1lc3NhZ2UgJWFzX3glICV6b29tJSAld3NfeCUgJWh3c194JSANCn0NCg0KaGRjX2ZyYW1lIDo9IERsbENhbGwoIkdldERDIiwgVUludCwgTWFnbmlmaWVySUQpDQoNCjsgY29tbWVudA0KRHJhd0Nyb3NzKGJ5UmVmIHg9IiIsIHJYLHJZLHosIGRjKXsNCiAgICAgICAgO3NwZWNpZnkgdGhlIHN0eWxlLCB0aGlja25lc3MgYW5kIGNvbG9yIG9mIHRoZSBjcm9zcyBsaW5lcw0KICAgIGhfcGVuIDo9IERsbENhbGwoICJnZGkzMi5kbGxcQ3JlYXRlUGVuIiwgSW50LCAwLCBJbnQsIDEsIFVJbnQsIDB4MDAwMEZGKQ0KfQ0KDQo7Q3RybCBeOyBTaGlmdCArOyBXaW4gIzsgQWx0ICENCl5OdW1QYWRBZGQ6Og0KXldoZWVsVXA6OiAgIA0KXjs6OiAgIDtjb21tZW50DQogICAgSWYoem9vbSA8IHdzX3ggYW5kICggQV9UaGlzSG90S2V5ID0gIl5XaGVlbFVwIiBvciBBX1RoaXNIb3RLZXkgPSJeTnVtUGFkQWRkIikgKQ0KCQl6b29tICo9IDEuMTg5MjA3MTE1ICAgICAgICAgOyBzcXJ0KHNxcnQoMikpDQoJR29zdWIsc2V0Wm9vbQ0KcmV0dXJuDQo=]]></data>
	</file>
	<file>
	  <filename>/samples/batchfile.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[OjogYmF0Y2ggZmlsZSBoaWdobGlnaHRpbmcgaW4gQWNlIQ0KQGVjaG8gb2ZmDQoNCkNBTEwgc2V0IHZhcjE9JWNkJQ0KZWNobyB1bmhpZGUgZXZlcnl0aGluZyBpbiAldmFyMSUhDQoNCjo6IEZPUiBsb29wIGluIGJhdCBpcyBzdXBlciBzdHJhbmdlIQ0KRk9SIC9mICJ0b2tlbnM9KiIgJSVHIElOICgnZGlyIC9BOkQgL2InKSBETyAoDQplY2hvICV2YXIxJSUlRw0KYXR0cmliIC1yIC1hIC1oIC1zICIldmFyMSUlJUciIC9EIC9TDQopDQoNCnBhdXNlDQoNClJFTSB0aGF0J3MgYWxsDQo=]]></data>
	</file>
	<file>
	  <filename>/samples/c9search.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U2VhcmNoaW5nIGZvciAndmFyJyBpbiAvd29ya3NwYWNlL2NvbmZpZ3MNCg0KY29uZmlncy9kZWZhdWx0LmpzOg0KICAgIDE6IHZhciBmcyA9IHJlcXVpcmUoImZzIik7DQoJMjogdmFyIGFyZ3YgPSByZXF1aXJlKCdvcHRpbWlzdCcpLmFyZ3Y7DQoJMzogdmFyIHBhdGggPSByZXF1aXJlKCJwYXRoIik7DQoJNTogdmFyIGNsaWVudEV4dGVuc2lvbnMgPSB7fTsNCgk2OiB2YXIgY2xpZW50RGlycyA9IGZzLnJlYWRkaXJTeW5jKF9fZGlybmFtZSArICIvLi4vcGx1Z2lucy1jbGllbnQiKTsNCgk3OiBmb3IgKHZhciBpID0gMDsgaSA8IGNsaWVudERpcnMubGVuZ3RoOyBpKyspIHsNCgk4OiAgICAgdmFyIGRpciA9IGNsaWVudERpcnNbaV07DQoJMTI6ICAgICB2YXIgbmFtZSA9IGRpci5zcGxpdCgiLiIpWzFdOw0KCTE2OiB2YXIgcHJvamVjdERpciA9IChhcmd2LncgJiYgcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGFyZ3YudykpIHx8IHByb2Nlc3MuY3dkKCk7DQoJMTc6IHZhciBmc1VybCA9ICIvd29ya3NwYWNlIjsNCgkxOTogdmFyIHBvcnQgPSBhcmd2LnAgfHwgcHJvY2Vzcy5lbnYuUE9SVCB8fCAzMTMxOw0KCTIwOiB2YXIgaG9zdCA9IGFyZ3YubCB8fCAibG9jYWxob3N0IjsNCgkyMjogdmFyIGNvbmZpZyA9IHsNCg0KY29uZmlncy9sb2NhbC5qczoNCgkyOiB2YXIgY29uZmlnID0gcmVxdWlyZSgiLi9kZWZhdWx0Iik7DQoNCmNvbmZpZ3MvcGFja2VkLmpzOg0KCTE6IHZhciBjb25maWcgPSByZXF1aXJlKCIuL2RlZmF1bHQiKTsNCg0KDQpGb3VuZCAxNSBtYXRjaGVzIGluIDMgZmlsZXM=]]></data>
	</file>
	<file>
	  <filename>/samples/clojure.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGRlZm4gcGFydGluZw0KICAicmV0dXJucyBhIFN0cmluZyBwYXJ0aW5nIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UiDQogIChbXSAocGFydGluZyAiV29ybGQiKSkNCiAgKFtuYW1lXSAocGFydGluZyBuYW1lICJlbiIpKQ0KICAoW25hbWUgbGFuZ3VhZ2VdDQogICAgOyBjb25kcCBpcyBzaW1pbGFyIHRvIGEgY2FzZSBzdGF0ZW1lbnQgaW4gb3RoZXIgbGFuZ3VhZ2VzLg0KICAgIDsgSXQgaXMgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGxhdGVyLg0KICAgIDsgSXQgaXMgdXNlZCBoZXJlIHRvIHRha2UgZGlmZmVyZW50IGFjdGlvbnMgYmFzZWQgb24gd2hldGhlciB0aGUNCiAgICA7IHBhcmFtZXRlciAibGFuZ3VhZ2UiIGlzIHNldCB0byAiZW4iLCAiZXMiIG9yIHNvbWV0aGluZyBlbHNlLg0KICAgIChjb25kcCA9IGxhbmd1YWdlDQogICAgICAiZW4iIChzdHIgIkdvb2RieWUsICIgbmFtZSkNCiAgICAgICJlcyIgKHN0ciAiQWRpb3MsICIgbmFtZSkNCiAgICAgICh0aHJvdyAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLg0KICAgICAgICAoc3RyICJ1bnN1cHBvcnRlZCBsYW5ndWFnZSAiIGxhbmd1YWdlKSkpKSkpDQoNCihwcmludGxuIChwYXJ0aW5nKSkgOyAtPiBHb29kYnllLCBXb3JsZA0KKHByaW50bG4gKHBhcnRpbmcgIk1hcmsiKSkgOyAtPiBHb29kYnllLCBNYXJrDQoocHJpbnRsbiAocGFydGluZyAiTWFyayIgImVzIikpIDsgLT4gQWRpb3MsIE1hcmsNCihwcmludGxuIChwYXJ0aW5nICJNYXJrIiwgInh5IikpIDsgLT4gamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2UgeHk=]]></data>
	</file>
	<file>
	  <filename>/samples/coffee.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgY29mZmVlDQoNCnRyeQ0KICAgIHRocm93IFVSSUVycm9yIGRlY29kZVVSSSgweEMwZmZlZSAqIDEyMzQ1Ni43ZS04IC8gLjkpDQpjYXRjaCBlDQogICAgY29uc29sZS5sb2cgJ3FzdHJpbmcnICsgInFxc3RyaW5nIiArICcnJw0KICAgICAgICBxZG9jDQogICAgJycnICsgIiIiDQogICAgICAgIHFxZG9jDQogICAgIiIiDQoNCmRvIC0+DQogICAgIyMjDQogICAgaGVyZWNvbW1lbnQNCiAgICAjIyMNCiAgICByZSA9IC9yZWdleC9pbWd5LnRlc3QgLy8vDQogICAgICAgIGhlcmVnZXggICMgY29tbWVudA0KICAgIC8vL2ltZ3kNCiAgICB0aGlzIGlzbnQ6IGBqdXN0IEphdmFTY3JpcHRgDQogICAgdW5kZWZpbmVkDQogICAgDQpzZW50ZW5jZSA9ICIjeyAyMiAvIDcgfSBpcyBhIGRlY2VudCBhcHByb3hpbWF0aW9uIG9mIM+AIg==]]></data>
	</file>
	<file>
	  <filename>/samples/coldfusion.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLS0gaGVsbG8gd29ybGQgLS0tPg0KDQo8Y2ZzZXQgd2VsY29tZT0iSGVsbG8gV29ybGQhIj4NCg0KPGNmb3V0cHV0PiN3ZWxjb21lIzwvY2ZvdXRwdXQ+]]></data>
	</file>
	<file>
	  <filename>/samples/csharp.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cHVibGljIHZvaWQgSGVsbG9Xb3JsZCgpIHsNCiAgICAvL1NheSBIZWxsbyENCiAgICBDb25zb2xlLldyaXRlTGluZSgiSGVsbG8gV29ybGQiKTsNCn0=]]></data>
	</file>
	<file>
	  <filename>/samples/css.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LnRleHQtbGF5ZXIgew0KICAgIGZvbnQtZmFtaWx5OiBNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsNCiAgICBmb250LXNpemU6IDEycHg7DQogICAgY3Vyc29yOiB0ZXh0Ow0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/curly.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+DQogICAgPGhlYWQ+DQoNCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAudGV4dC1sYXllciB7DQogICAgICAgICAgICBmb250LWZhbWlseTogTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2U7DQogICAgICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgICAgICBjdXJzb3I6IHRleHQ7DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KDQogICAgPC9oZWFkPg0KICAgIDxib2R5Pg0KICAgICAgICA8aDEgc3R5bGU9ImNvbG9yOnJlZCI+e3thdXRob3JfbmFtZX19PC9oMT4NCiAgICA8L2JvZHk+DQo8L2h0bWw+DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/c_cpp.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gY29tcG91bmQgYXNzaWdubWVudCBvcGVyYXRvcnMNCg0KI2luY2x1ZGUgPGlvc3RyZWFtPg0KDQojaW5jbHVkZSBcDQogICA8aW9zdHJlYW0+DQoNCiNpbmNsdWRlIFwNCiAgIFwNCiAgIDxpb3N0cmVhbT4NCg0KI2luY2x1ZGUgXA0KICAgXA0KICAgImlvc3RyZWFtIg0KDQojaW5jbHVkZSA8Ym9vc3QvYXNpby9pb19zZXJ2aWNlLmhwcD4NCiNpbmNsdWRlICJib29zdC9hc2lvL2lvX3NlcnZpY2UuaHBwIg0KDQojaW5jbHVkZSBcDQogICBcDQogICAiaW9zdHJlYW0iIFwNCiAgICJzdHJpbmciIFwNCiAgIDx2ZWN0b3I+DQogICANCnVzaW5nIG5hbWVzcGFjZSBzdGQ7DQoNCmludCBtYWluICgpDQp7DQogICAgaW50IGEsIGI9MzsgLyogZm9vYmFyICovDQogICAgYSA9IGI7DQogICAgYSs9MjsgLy8gZXF1aXZhbGVudCB0byBhPWErMg0KICAgIGNvdXQgPDwgYTsNCiAgICAjaWYgVkVSQk9TRSA+PSAyDQogICAgICAgIHByaW50cygidHJhY2UgbWVzc2FnZSIpOw0KICAgICNlbmRpZg0KICAgIHJldHVybiAwOw0KfQ0KDQovKiBQcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBnZXQgb3V0ICovDQojZGVmaW5lIEFCT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgIHByaW50KCAiQWJvcnRcbiIgKTsgICAgICAgICAgICAgICAgXA0KICAgICAgICBleGl0KDgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KfSB3aGlsZSAoMCkgICAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogTm8gc2VtaWNvbG9uICov]]></data>
	</file>
	<file>
	  <filename>/samples/dart.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[bWFpbigpIHsNCiAgcHJpbnQoJ0hlbGxvIFdvcmxkIScpOw0KfQ0KDQoNCmludCBmaWIoaW50IG4pID0+IChuID4gMSkgPyAoZmliKG4gLSAxKSArIGZpYihuIC0gMikpIDogbjsNCm1haW4oKSB7DQogIHByaW50KCdmaWIoMjApID0gJHtmaWIoMjApfScpOw0KfQ0KLyphc2QNCmFzZGFkDQoqLw0KMC42Nw0KNzcNCi44Ng0KDQppbXBvcnQoImh0dHA6Ly9kYXJ0d2F0Y2guY29tL215T3RoZXJMaWJyYXJ5LmRhcnQiKTsNCmltcG9ydCgibXlPdGhlckxpYnJhcnkuZGFydCIsIHByZWZpeDoibGliMSIpOw0KDQoiIiJhc2Rhc2RhZHMNCmFzZGFkc2Fkc2FzZA0KYXNkYXNkYXNkYWQiIiINCiANCicyMzQyNCcNCg0KMHgyMzQNCg0KZm9vIGlzIGJhcg0KDQppbnQgeCA9IDQgPDwgMTAgDQovLyBDcmVhdGUgYSBjbGFzcyBmb3IgUG9pbnQuDQpjbGFzcyBQb2ludCB7DQogDQogIC8vIEZpbmFsIHZhcmlhYmxlcyBjYW5ub3QgYmUgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIGFzc2lnbmVkLg0KICAvLyBDcmVhdGUgdHdvIGluc3RhbmNlIHZhcmlhYmxlcy4NCiAgZmluYWwgbnVtIHgsIHk7DQogDQogIC8vIEEgY29uc3RydWN0b3IsIHdpdGggc3ludGFjdGljIHN1Z2FyIGZvciBzZXR0aW5nIGluc3RhbmNlIHZhcmlhYmxlcy4NCiAgUG9pbnQodGhpcy54LCB0aGlzLnkpOw0KIA0KICAvLyBBIG5hbWVkIGNvbnN0cnVjdG9yIHdpdGggYW4gaW5pdGlhbGl6ZXIgbGlzdC4NCiAgUG9pbnQub3JpZ2luKCkgOiB4ID0gMCwgeSA9IDA7DQogDQogIC8vIEEgbWV0aG9kLg0KICBudW0gZGlzdGFuY2VUbyhQb2ludCBvdGhlcikgew0KICAgIHZhciBkeCA9IHggLSBvdGhlci54Ow0KICAgIHZhciBkeSA9IHkgLSBvdGhlci55Ow0KICAgIHJldHVybiBzcXJ0KGR4ICogZHggKyBkeSAqIGR5KTsNCiAgfQ0KfQ0KIA0KIC8vIENoZWNrIGZvciBudWxsLg0KdmFyIHVuaWNvcm47DQphc3NlcnQodW5pY29ybiA9PSBudWxsKTsNCg0KLy8gQ2hlY2sgZm9yIE5hTi4NCnZhciBpTWVhbnRUb0RvVGhpcyA9IDAvMDsNCmFzc2VydChpTWVhbnRUb0RvVGhpcy5pc05hTigpKTsNCg==]]></data>
	</file>
	<file>
	  <filename>/samples/diff.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGlmZiAtLWdpdCBhL2xpYi9hY2UvZWRpdF9zZXNzaW9uLmpzIGIvbGliL2FjZS9lZGl0X3Nlc3Npb24uanMNCmluZGV4IDIzZmMzZmMuLmVkM2IyNzMgMTAwNjQ0DQotLS0gYS9saWIvYWNlL2VkaXRfc2Vzc2lvbi5qcw0KKysrIGIvbGliL2FjZS9lZGl0X3Nlc3Npb24uanMNCkBAIC01MSw2ICs1MSw3IEBAIHZhciBUZXh0TW9kZSA9IHJlcXVpcmUoIi4vbW9kZS90ZXh0IikuTW9kZTsNCiB2YXIgUmFuZ2UgPSByZXF1aXJlKCIuL3JhbmdlIikuUmFuZ2U7DQogdmFyIERvY3VtZW50ID0gcmVxdWlyZSgiLi9kb2N1bWVudCIpLkRvY3VtZW50Ow0KIHZhciBCYWNrZ3JvdW5kVG9rZW5pemVyID0gcmVxdWlyZSgiLi9iYWNrZ3JvdW5kX3Rva2VuaXplciIpLkJhY2tncm91bmRUb2tlbml6ZXI7DQordmFyIFNlYXJjaEhpZ2hsaWdodCA9IHJlcXVpcmUoIi4vc2VhcmNoX2hpZ2hsaWdodCIpLlNlYXJjaEhpZ2hsaWdodDsNCiANCiAvKioNCiAgKiBjbGFzcyBFZGl0U2Vzc2lvbg0KQEAgLTMwNyw2ICszMDgsMTMgQEAgdmFyIEVkaXRTZXNzaW9uID0gZnVuY3Rpb24odGV4dCwgbW9kZSkgew0KICAgICAgICAgcmV0dXJuIHRva2VuOw0KICAgICB9Ow0KIA0KKyAgICB0aGlzLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKHJlKSB7DQorICAgICAgICBpZiAoIXRoaXMuJHNlYXJjaEhpZ2hsaWdodCkgew0KKyAgICAgICAgICAgIHZhciBoaWdobGlnaHQgPSBuZXcgU2VhcmNoSGlnaGxpZ2h0KG51bGwsICJhY2Vfc2VsZWN0ZWQtd29yZCIsICJ0ZXh0Iik7DQorICAgICAgICAgICAgdGhpcy4kc2VhcmNoSGlnaGxpZ2h0ID0gdGhpcy5hZGREeW5hbWljTWFya2VyKGhpZ2hsaWdodCk7DQorICAgICAgICB9DQorICAgICAgICB0aGlzLiRzZWFyY2hIaWdobGlnaHQuc2V0UmVnZXhwKHJlKTsNCisgICAgfQ0KICAgICAvKioNCiAgICAgKiBFZGl0U2Vzc2lvbi5zZXRVbmRvTWFuYWdlcih1bmRvTWFuYWdlcikNCiAgICAgKiAtIHVuZG9NYW5hZ2VyIChVbmRvTWFuYWdlcik6IFRoZSBuZXcgdW5kbyBtYW5hZ2VyDQpAQCAtNTU2LDcgKzU2NCw4IEBAIHZhciBFZGl0U2Vzc2lvbiA9IGZ1bmN0aW9uKHRleHQsIG1vZGUpIHsNCiAgICAgICAgICAgICB0eXBlIDogdHlwZSB8fCAibGluZSIsDQogICAgICAgICAgICAgcmVuZGVyZXI6IHR5cGVvZiB0eXBlID09ICJmdW5jdGlvbiIgPyB0eXBlIDogbnVsbCwNCiAgICAgICAgICAgICBjbGF6eiA6IGNsYXp6LA0KLSAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udA0KKyAgICAgICAgICAgIGluRnJvbnQ6ICEhaW5Gcm9udCwNCisgICAgICAgICAgICBpZDogaWQNCiAgICAgICAgIH0NCiANCiAgICAgICAgIGlmIChpbkZyb250KSB7DQpkaWZmIC0tZ2l0IGEvbGliL2FjZS9lZGl0b3IuanMgYi9saWIvYWNlL2VkaXRvci5qcw0KaW5kZXggODM0ZTYwMy4uYjI3ZWM3MyAxMDA2NDQNCi0tLSBhL2xpYi9hY2UvZWRpdG9yLmpzDQorKysgYi9saWIvYWNlL2VkaXRvci5qcw0KQEAgLTQ5NCw3ICs0OTQsNyBAQCB2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24pIHsNCiAgICAgICogRW1pdHRlZCB3aGVuIGEgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkLg0KICAgICAgKiovDQogICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7DQotICAgICAgICB2YXIgc2Vzc2lvbiA9IHRoaXMuZ2V0U2Vzc2lvbigpOw0KKyAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247DQogDQogICAgICAgICBpZiAoc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyKSB7DQogICAgICAgICAgICAgc2Vzc2lvbi5yZW1vdmVNYXJrZXIoc2Vzc2lvbi4kc2VsZWN0aW9uTWFya2VyKTsNCkBAIC01MDksMTIgKzUwOSw0MCBAQCB2YXIgRWRpdG9yID0gZnVuY3Rpb24ocmVuZGVyZXIsIHNlc3Npb24pIHsNCiAgICAgICAgICAgICB0aGlzLiR1cGRhdGVIaWdobGlnaHRBY3RpdmVMaW5lKCk7DQogICAgICAgICB9DQogDQotICAgICAgICB2YXIgc2VsZiA9IHRoaXM7DQotICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0U2VsZWN0ZWRXb3JkICYmICF0aGlzLiR3b3JkSGlnaGxpZ2h0VGltZXIpDQotICAgICAgICAgICAgdGhpcy4kd29yZEhpZ2hsaWdodFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsNCi0gICAgICAgICAgICAgICAgc2VsZi5zZXNzaW9uLiRtb2RlLmhpZ2hsaWdodFNlbGVjdGlvbihzZWxmKTsNCi0gICAgICAgICAgICAgICAgc2VsZi4kd29yZEhpZ2hsaWdodFRpbWVyID0gbnVsbDsNCi0gICAgICAgICAgICB9LCAzMCwgdGhpcyk7DQorICAgICAgICB2YXIgcmUgPSB0aGlzLiRoaWdobGlnaHRTZWxlY3RlZFdvcmQgJiYgdGhpcy4kZ2V0U2VsZWN0aW9uSGlnaExpZ2h0UmVnZXhwKCkNCiAgICAgfTsNCmRpZmYgLS1naXQgYS9saWIvYWNlL3NlYXJjaF9oaWdobGlnaHQuanMgYi9saWIvYWNlL3NlYXJjaF9oaWdobGlnaHQuanMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi5iMmRmNzc5DQotLS0gL2Rldi9udWxsDQorKysgYi9saWIvYWNlL3NlYXJjaF9oaWdobGlnaHQuanMNCkBAIC0wLDAgKzEsMyBAQA0KK25ldw0KK2VtcHR5IGZpbGU=]]></data>
	</file>
	<file>
	  <filename>/samples/dot.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gT3JpZ2luYWwgc291cmNlOiBodHRwOi8vd3d3LmdyYXBodml6Lm9yZy9jb250ZW50L2xpb25fc2hhcmUNCiMjIkEgZmV3IHBlb3BsZSBpbiB0aGUgZmllbGQgb2YgZ2VuZXRpY3MgYXJlIHVzaW5nIGRvdCB0byBkcmF3ICJtYXJyaWFnZSBub2RlIGRpYWdyYW0iICBwZWRpZ3JlZSBkcmF3aW5ncy4gIEhlcmUgaXMgb25lIEkgaGF2ZSBkb25lIG9mIGEgdGVzdCBwZWRpZ3JlZSBmcm9tIHRoZSBGVFJFRSBwZWRpZ3JlZSBkcmF3aW5nIHBhY2thZ2UgKExpb24gU2hhcmUgd2FzIGEgcmFjZWhvcnNlKS4iIENvbnRyaWJ1dGVkIGJ5IERhdmlkIER1ZmZ5Lg0KDQojI0NvbW1hbmQgdG8gZ2V0IHRoZSBsYXlvdXQ6ICJkb3QgLVRwbmcgdGhpc2ZpbGUgPiB0aGlzZmlsZS5wbmciDQoNCmRpZ3JhcGggUGVkX0xpb25fU2hhcmUgICAgICAgICAgIHsNCiMgcGFnZSA9ICI4LjI2NzcxNjUsMTEuNjkyOTEzIiA7DQpyYXRpbyA9ICJhdXRvIiA7DQptaW5jcm9zcyA9IDIuMCA7DQpsYWJlbCA9ICJQZWRpZ3JlZSBMaW9uX1NoYXJlIiA7DQoNCiIwMDEiIFtzaGFwZT1ib3ggICAgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDIiIFtzaGFwZT1ib3ggICAgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDMiIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDQiIFtzaGFwZT1ib3ggICAgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDUiIFtzaGFwZT1ib3ggICAgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDYiIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDciIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMDkiIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMTQiIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMTUiIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiIwMTYiIFtzaGFwZT1jaXJjbGUgICwgcmVndWxhcj0xLHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9d2hpdGUgICBdIDsNCiJaWjAxIiBbc2hhcGU9Y2lyY2xlICAsIHJlZ3VsYXI9MSxzdHlsZT1maWxsZWQsZmlsbGNvbG9yPXdoaXRlICAgXSA7DQoiWlowMiIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxNyIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxMiIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAwOCIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxMSIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxMyIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxMCIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyMyIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyMCIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyMSIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxOCIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyNSIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAxOSIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyMiIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyNCIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyNyIgW3NoYXBlPWNpcmNsZSAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyNiIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj13aGl0ZSAgIF0gOw0KIjAyOCIgW3NoYXBlPWJveCAgICAgLCByZWd1bGFyPTEsc3R5bGU9ZmlsbGVkLGZpbGxjb2xvcj1ncmV5ICAgIF0gOw0KIm1hcnIwMDAxIiBbc2hhcGU9ZGlhbW9uZCxzdHlsZT1maWxsZWQsbGFiZWw9IiIsaGVpZ2h0PS4xLHdpZHRoPS4xXSA7DQoiMDAxIiAtPiAibWFycjAwMDEiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIjAwNyIgLT4gIm1hcnIwMDAxIiBbZGlyPW5vbmUsd2VpZ2h0PTFdIDsNCiJtYXJyMDAwMSIgLT4gIjAxNyIgW2Rpcj1ub25lLCB3ZWlnaHQ9Ml0gOw0KIm1hcnIwMDAyIiBbc2hhcGU9ZGlhbW9uZCxzdHlsZT1maWxsZWQsbGFiZWw9IiIsaGVpZ2h0PS4xLHdpZHRoPS4xXSA7DQoiMDAxIiAtPiAibWFycjAwMDIiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIlpaMDIiIC0+ICJtYXJyMDAwMiIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoibWFycjAwMDIiIC0+ICIwMTIiIFtkaXI9bm9uZSwgd2VpZ2h0PTJdIDsNCiJtYXJyMDAwMyIgW3NoYXBlPWRpYW1vbmQsc3R5bGU9ZmlsbGVkLGxhYmVsPSIiLGhlaWdodD0uMSx3aWR0aD0uMV0gOw0KIjAwMiIgLT4gIm1hcnIwMDAzIiBbZGlyPW5vbmUsd2VpZ2h0PTFdIDsNCiIwMDMiIC0+ICJtYXJyMDAwMyIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoibWFycjAwMDMiIC0+ICIwMDgiIFtkaXI9bm9uZSwgd2VpZ2h0PTJdIDsNCiJtYXJyMDAwNCIgW3NoYXBlPWRpYW1vbmQsc3R5bGU9ZmlsbGVkLGxhYmVsPSIiLGhlaWdodD0uMSx3aWR0aD0uMV0gOw0KIjAwMiIgLT4gIm1hcnIwMDA0IiBbZGlyPW5vbmUsd2VpZ2h0PTFdIDsNCiIwMDYiIC0+ICJtYXJyMDAwNCIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoibWFycjAwMDQiIC0+ICIwMTEiIFtkaXI9bm9uZSwgd2VpZ2h0PTJdIDsNCiJtYXJyMDAwNSIgW3NoYXBlPWRpYW1vbmQsc3R5bGU9ZmlsbGVkLGxhYmVsPSIiLGhlaWdodD0uMSx3aWR0aD0uMV0gOw0KIjAwMiIgLT4gIm1hcnIwMDA1IiBbZGlyPW5vbmUsd2VpZ2h0PTFdIDsNCiJaWjAxIiAtPiAibWFycjAwMDUiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDA1IiAtPiAiMDEzIiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMDYiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMDQiIC0+ICJtYXJyMDAwNiIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDA5IiAtPiAibWFycjAwMDYiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDA2IiAtPiAiMDEwIiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMDciIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMDUiIC0+ICJtYXJyMDAwNyIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDE1IiAtPiAibWFycjAwMDciIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDA3IiAtPiAiMDIzIiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMDgiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMDUiIC0+ICJtYXJyMDAwOCIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDE2IiAtPiAibWFycjAwMDgiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDA4IiAtPiAiMDIwIiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMDkiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMDUiIC0+ICJtYXJyMDAwOSIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDEyIiAtPiAibWFycjAwMDkiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDA5IiAtPiAiMDIxIiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTAiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMDgiIC0+ICJtYXJyMDAxMCIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDE3IiAtPiAibWFycjAwMTAiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDEwIiAtPiAiMDE4IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTEiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMTEiIC0+ICJtYXJyMDAxMSIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDIzIiAtPiAibWFycjAwMTEiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDExIiAtPiAiMDI1IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTIiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMTMiIC0+ICJtYXJyMDAxMiIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDE0IiAtPiAibWFycjAwMTIiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDEyIiAtPiAiMDE5IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTMiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMTAiIC0+ICJtYXJyMDAxMyIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDIxIiAtPiAibWFycjAwMTMiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDEzIiAtPiAiMDIyIiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTQiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMTkiIC0+ICJtYXJyMDAxNCIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDIwIiAtPiAibWFycjAwMTQiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDE0IiAtPiAiMDI0IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTUiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMjIiIC0+ICJtYXJyMDAxNSIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDI1IiAtPiAibWFycjAwMTUiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDE1IiAtPiAiMDI3IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTYiIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMjQiIC0+ICJtYXJyMDAxNiIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDE4IiAtPiAibWFycjAwMTYiIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDE2IiAtPiAiMDI2IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQoibWFycjAwMTciIFtzaGFwZT1kaWFtb25kLHN0eWxlPWZpbGxlZCxsYWJlbD0iIixoZWlnaHQ9LjEsd2lkdGg9LjFdIDsNCiIwMjYiIC0+ICJtYXJyMDAxNyIgW2Rpcj1ub25lLHdlaWdodD0xXSA7DQoiMDI3IiAtPiAibWFycjAwMTciIFtkaXI9bm9uZSx3ZWlnaHQ9MV0gOw0KIm1hcnIwMDE3IiAtPiAiMDI4IiBbZGlyPW5vbmUsIHdlaWdodD0yXSA7DQp9DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/erlang.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAlJSBBIHByb2Nlc3Mgd2hvc2Ugb25seSBqb2IgaXMgdG8ga2VlcCBhIGNvdW50ZXIuDQogICUlIEZpcnN0IHZlcnNpb24NCiAgLW1vZHVsZShjb3VudGVyKS4NCiAgLWV4cG9ydChbc3RhcnQvMCwgY29kZXN3aXRjaC8xXSkuDQogDQogIHN0YXJ0KCkgLT4gbG9vcCgwKS4NCiANCiAgbG9vcChTdW0pIC0+DQogICAgcmVjZWl2ZQ0KICAgICAgIHtpbmNyZW1lbnQsIENvdW50fSAtPg0KICAgICAgICAgIGxvb3AoU3VtK0NvdW50KTsNCiAgICAgICB7Y291bnRlciwgUGlkfSAtPg0KICAgICAgICAgIFBpZCAhIHtjb3VudGVyLCBTdW19LA0KICAgICAgICAgIGxvb3AoU3VtKTsNCiAgICAgICBjb2RlX3N3aXRjaCAtPg0KICAgICAgICAgID9NT0RVTEU6Y29kZXN3aXRjaChTdW0pDQogICAgICAgICAgJSBGb3JjZSB0aGUgdXNlIG9mICdjb2Rlc3dpdGNoLzEnIGZyb20gdGhlIGxhdGVzdCBNT0RVTEUgdmVyc2lvbg0KICAgIGVuZC4NCiANCiAgY29kZXN3aXRjaChTdW0pIC0+IGxvb3AoU3VtKS4=]]></data>
	</file>
	<file>
	  <filename>/samples/forth.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[OiBIRUxMTyAgKCAtLSApICBDUiAuIiBIZWxsbywgd29ybGQhIiA7IA0KDQpIRUxMTyA8Y3I+DQpIZWxsbywgd29ybGQhDQoNCjogW0NIQVJdICAgQ0hBUiAgUE9TVFBPTkUgTElURVJBTCA7IElNTUVESUFURQ0KDQowIHZhbHVlIGlpICAgICAgICAwIHZhbHVlIGpqDQowIHZhbHVlIEtleUFkZHIgICAwIHZhbHVlIEtleUxlbg0KY3JlYXRlIFNBcnJheSAgIDI1NiBhbGxvdCAgIFwgc3RhdGUgYXJyYXkgb2YgMjU2IGJ5dGVzDQo6IEtleUFycmF5ICAgICAgS2V5TGVuIG1vZCAgIEtleUFkZHIgOw0KDQo6IGdldF9ieXRlICAgICAgKyBjQCA7DQo6IHNldF9ieXRlICAgICAgKyBjISA7DQo6IGFzX2J5dGUgICAgICAgMjU1IGFuZCA7DQo6IHJlc2V0X2lqICAgICAgMCBUTyBpaSAgIDAgVE8gamogOw0KOiBpX3VwZGF0ZSAgICAgIDEgKyAgIGFzX2J5dGUgVE8gaWkgOw0KOiBqX3VwZGF0ZSAgICAgIGlpIFNBcnJheSBnZXRfYnl0ZSArICAgYXNfYnl0ZSBUTyBqaiA7DQo6IHN3YXBfc19pag0KICAgIGpqIFNBcnJheSBnZXRfYnl0ZQ0KICAgICAgIGlpIFNBcnJheSBnZXRfYnl0ZSAgamogU0FycmF5IHNldF9ieXRlDQogICAgaWkgU0FycmF5IHNldF9ieXRlDQo7DQoNCjogcmM0X2luaXQgKCBLZXlBZGRyIEtleUxlbiAtLSApDQogICAgMjU2IG1pbiBUTyBLZXlMZW4gICBUTyBLZXlBZGRyDQogICAgMjU2IDAgRE8gICBpIGkgU0FycmF5IHNldF9ieXRlICAgTE9PUA0KICAgIHJlc2V0X2lqDQogICAgQkVHSU4NCiAgICAgICAgaWkgS2V5QXJyYXkgZ2V0X2J5dGUgICBqaiArICBqX3VwZGF0ZQ0KICAgICAgICBzd2FwX3NfaWoNCiAgICAgICAgaWkgMjU1IDwgV0hJTEUNCiAgICAgICAgaWkgaV91cGRhdGUNCiAgICBSRVBFQVQNCiAgICByZXNldF9pag0KOw0KOiByYzRfYnl0ZQ0KICAgIGlpIGlfdXBkYXRlICAgamogal91cGRhdGUNCiAgICBzd2FwX3NfaWoNCiAgICBpaSBTQXJyYXkgZ2V0X2J5dGUgICBqaiBTQXJyYXkgZ2V0X2J5dGUgKyAgIGFzX2J5dGUgU0FycmF5IGdldF9ieXRlICB4b3INCjs=]]></data>
	</file>
	<file>
	  <filename>/samples/ftl.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCNmdGwgZW5jb2Rpbmc9InV0Zi04IiAvPg0KPCNzZXR0aW5nIGxvY2FsZT0iZW5fVVMiIC8+DQo8I2ltcG9ydCAibGlicmFyeSIgYXMgbGliIC8+DQo8Iy0tDQogICAgRnJlZU1hcmtlciBjb21tZW50DQogICAgJHthYmN9IDwjYXNzaWduIGE9MTIgLz4NCi0tPg0KDQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuLXVzIj4NCiAgICA8aGVhZD4NCiAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+DQogICAgICAgIA0KICAgICAgICA8dGl0bGU+JHt0aXRsZSEiRnJlZU1hcmtlciJ9PHRpdGxlPg0KICAgIDwvaGVhZD4NCiAgICANCiAgICA8Ym9keT4NCiAgICANCiAgICAgICAgPGgxPkhlbGxvICR7bmFtZSEiIn08L2gxPg0KICAgICAgICANCiAgICAgICAgPHA+VG9kYXkgaXM6ICR7Lm5vdz9kYXRlfTwvcD4NCiAgICAgICAgDQogICAgICAgIDwjYXNzaWduIHggPSAxMz4NCiAgICAgICAgPCNpZiB4ICZndDsgMTIgJiYgeCBsdCAxND54IGVxdWFscyAxMzogJHt4fTwvI2lmPg0KICAgICAgICANCiAgICAgICAgPHVsPg0KICAgICAgICAgICAgPCNsaXN0IGl0ZW1zIGFzIGl0ZW0+DQogICAgICAgICAgICAgICAgPGxpPiR7aXRlbV9pbmRleH06ICR7aXRlbS5uYW1lIT9zcGxpdCgiXG4iKVswXX08L2xpPg0KICAgICAgICAgICAgPC8jbGlzdD4NCiAgICAgICAgPC91bD4NCiAgICAgICAgDQogICAgICAgIFVzZXIgZGlyZWN0aXZlOiA8QGxpYi5mdW5jdGlvbiBhdHRyMT10cnVlIGF0dHIyPSd2YWx1ZScgYXR0cjM9LTQyLjEyPlRlc3Q8L0BsaWIuZnVuY3Rpb24+DQogICAgICAgIDxAYW5vdGhlck9uZSAvPg0KICAgICAgICANCiAgICAgICAgPCNpZiB2YXJpYWJsZT9leGlzdHM+DQogICAgICAgICAgICBEZXByZWNhdGVkDQogICAgICAgIDwjZWxzZWlmIHZhcmlhYmxlPz8+DQogICAgICAgICAgICBCZXR0ZXINCiAgICAgICAgPCNlbHNlPg0KICAgICAgICAgICAgRGVmYXVsdA0KICAgICAgICA8LyNpZj4NCiAgICAgICAgDQogICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvJHt1c2VyLmlkfS5wbmciIC8+DQogICAgICAgIA0KICAgIDwvYm9keT4NCjwvaHRtbD4NCg==]]></data>
	</file>
	<file>
	  <filename>/samples/glsl.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dW5pZm9ybSBmbG9hdCBhbXBsaXR1ZGU7DQphdHRyaWJ1dGUgZmxvYXQgZGlzcGxhY2VtZW50Ow0KdmFyeWluZyB2ZWMzIHZOb3JtYWw7DQoNCnZvaWQgbWFpbigpIHsNCg0KICAgIHZOb3JtYWwgPSBub3JtYWw7DQogIA0KICAgIC8vIG11bHRpcGx5IG91ciBkaXNwbGFjZW1lbnQgYnkgdGhlDQogICAgLy8gYW1wbGl0dWRlLiBUaGUgYW1wIHdpbGwgZ2V0IGFuaW1hdGVkDQogICAgLy8gc28gd2UnbGwgaGF2ZSBhbmltYXRlZCBkaXNwbGFjZW1lbnQNCiAgICB2ZWMzIG5ld1Bvc2l0aW9uID0gcG9zaXRpb24gKyANCiAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsICogDQogICAgICAgICAgICAgICAgICAgICAgIHZlYzMoZGlzcGxhY2VtZW50ICoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbXBsaXR1ZGUpOw0KDQogICAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICoNCiAgICAgICAgICAgICAgICAgIG1vZGVsVmlld01hdHJpeCAqDQogICAgICAgICAgICAgICAgICB2ZWM0KG5ld1Bvc2l0aW9uLDEuMCk7DQp9]]></data>
	</file>
	<file>
	  <filename>/samples/golang.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29uY3VycmVudCBjb21wdXRhdGlvbiBvZiBwaS4NCi8vIFNlZSBodHRwOi8vZ29vLmdsL1p1VFpNLg0KLy8NCi8vIFRoaXMgZGVtb25zdHJhdGVzIEdvJ3MgYWJpbGl0eSB0byBoYW5kbGUNCi8vIGxhcmdlIG51bWJlcnMgb2YgY29uY3VycmVudCBwcm9jZXNzZXMuDQovLyBJdCBpcyBhbiB1bnJlYXNvbmFibGUgd2F5IHRvIGNhbGN1bGF0ZSBwaS4NCnBhY2thZ2UgbWFpbg0KDQppbXBvcnQgKA0KICAgICJmbXQiDQogICAgIm1hdGgiDQopDQoNCmZ1bmMgbWFpbigpIHsNCiAgICBmbXQuUHJpbnRsbihwaSg1MDAwKSkNCn0NCg0KLy8gcGkgbGF1bmNoZXMgbiBnb3JvdXRpbmVzIHRvIGNvbXB1dGUgYW4NCi8vIGFwcHJveGltYXRpb24gb2YgcGkuDQpmdW5jIHBpKG4gaW50KSBmbG9hdDY0IHsNCiAgICBjaCA6PSBtYWtlKGNoYW4gZmxvYXQ2NCkNCiAgICBmb3IgayA6PSAwOyBrIDw9IG47IGsrKyB7DQogICAgICAgIGdvIHRlcm0oY2gsIGZsb2F0NjQoaykpDQogICAgfQ0KICAgIGYgOj0gMC4wDQogICAgZm9yIGsgOj0gMDsgayA8PSBuOyBrKysgew0KICAgICAgICBmICs9IDwtY2gNCiAgICB9DQogICAgcmV0dXJuIGYNCn0NCg0KZnVuYyB0ZXJtKGNoIGNoYW4gZmxvYXQ2NCwgayBmbG9hdDY0KSB7DQogICAgY2ggPC0gNCAqIG1hdGguUG93KC0xLCBrKSAvICgyKmsgKyAxKQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/groovy.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly9odHRwOi8vZ3Jvb3Z5LmNvZGVoYXVzLm9yZy9NYXJ0aW4rRm93bGVyJTI3cytjbG9zdXJlK2V4YW1wbGVzK2luK0dyb292eQ0KDQpjbGFzcyBFbXBsb3llZSB7DQogICAgZGVmIG5hbWUsIHNhbGFyeQ0KICAgIGJvb2xlYW4gbWFuYWdlcg0KICAgIFN0cmluZyB0b1N0cmluZygpIHsgcmV0dXJuIG5hbWUgfQ0KfQ0KDQpkZWYgZW1wcyA9IFtuZXcgRW1wbG95ZWUobmFtZTonR3VpbGxhdW1lJywgbWFuYWdlcjp0cnVlLCBzYWxhcnk6MjAwKSwNCiAgICBuZXcgRW1wbG95ZWUobmFtZTonR3JhZW1lJywgbWFuYWdlcjp0cnVlLCBzYWxhcnk6MjAwKSwNCiAgICBuZXcgRW1wbG95ZWUobmFtZTonRGllcmsnLCBtYW5hZ2VyOmZhbHNlLCBzYWxhcnk6MTUxKSwNCiAgICBuZXcgRW1wbG95ZWUobmFtZTonQmVybmQnLCBtYW5hZ2VyOmZhbHNlLCBzYWxhcnk6NTApXQ0KDQpkZWYgbWFuYWdlcnMoZW1wcykgew0KICAgIGVtcHMuZmluZEFsbCB7IGUgLT4gZS5pc01hbmFnZXIoKSB9DQp9DQoNCmFzc2VydCBlbXBzWzAuLjFdID09IG1hbmFnZXJzKGVtcHMpIC8vIFtHdWlsbGF1bWUsIEdyYWVtZV0NCg0KZGVmIGhpZ2hQYWlkKGVtcHMpIHsNCiAgICB0aHJlc2hvbGQgPSAxNTANCiAgICBlbXBzLmZpbmRBbGwgeyBlIC0+IGUuc2FsYXJ5ID4gdGhyZXNob2xkIH0NCn0NCg0KYXNzZXJ0IGVtcHNbMC4uMl0gPT0gaGlnaFBhaWQoZW1wcykgLy8gW0d1aWxsYXVtZSwgR3JhZW1lLCBEaWVya10NCg0KZGVmIHBhaWRNb3JlKGFtb3VudCkgew0KICAgIHsgZSAtPiBlLnNhbGFyeSA+IGFtb3VudH0NCn0NCmRlZiBoaWdoUGFpZCA9IHBhaWRNb3JlKDE1MCkNCg0KYXNzZXJ0IGhpZ2hQYWlkKGVtcHNbMF0pIC8vIHRydWUNCmFzc2VydCBlbXBzWzAuLjJdID09IGVtcHMuZmluZEFsbChoaWdoUGFpZCkNCg0KZGVmIGZpbGVuYW1lID0gJ3Rlc3QudHh0Jw0KbmV3IEZpbGUoZmlsZW5hbWUpLndpdGhSZWFkZXJ7IHJlYWRlciAtPiBkb1NvbWV0aGluZ1dpdGgocmVhZGVyKSB9DQoNCmRlZiByZWFkZXJzVGV4dA0KZGVmIGRvU29tZXRoaW5nV2l0aChyZWFkZXIpIHsgcmVhZGVyc1RleHQgPSByZWFkZXIudGV4dCB9DQoNCmFzc2VydCBuZXcgRmlsZShmaWxlbmFtZSkudGV4dCA9PSByZWFkZXJzVGV4dA==]]></data>
	</file>
	<file>
	  <filename>/samples/haml.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ISEhNQ0KDQojIDwhLS1baWYgbHQgSUUgN10+IDxodG1sIGNsYXNzPSJuby1qcyBsdC1pZTkgbHQtaWU4IGx0LWllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4NCiMgPCEtLVtpZiBJRSA3XT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGx0LWllOSBsdC1pZTgiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+DQojIDwhLS1baWYgSUUgOF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBsdC1pZTkiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+DQojIDwhLS1baWYgZ3QgSUUgOF0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4NCg0KDQovYWRhc2Rhc2RhZA0KJWRpdns6aWQgPT4gIiN7QGl0ZW0udHlwZX1fI3tAaXRlbS5udW1iZXJ9IiwgOmNsYXNzID0+ICcje0BpdGVtLnR5cGV9ICN7QGl0ZW0udXJnZW5jeX0nLCA6cGhvbmV5ID0+IGBhc2Rhc2Rhc2RgfQ0KLyBmaWxlOiBhcHAvdmlld3MvbW92aWVzL2luZGV4Lmh0bWwuaGFtbA0KXGQNCiVhZHM6ezpibGVoID0+IDMzfQ0KJXA9PWRkZD09DQogIERhdGUvVGltZToNCiAgLSBub3cgPSBEYXRlVGltZS5ub3cgDQogICVzdHJvbmc9IG5vdw0KICAgPSBpZiBub3cgIERhdGVUaW1lLnBhcnNlKCJEZWNlbWJlciAzMSwgMjAwNiIpDQogICAgPSAiSGFwcHkgbmV3ICIgKyAieWVhciEiDQolc2ZkLmRmZGZnDQojY29udGVudA0KIC50aXRsZQ0KICAgJWgxPSBAdGl0bGUNCiAgID0gbGlua190byAnSG9tZScsIGhvbWVfdXJsDQoNCiAgICNjb250ZW50cw0KJWRpdiNjb250ZW50DQogICVkaXYuYXJ0aWNsZXMNCiAgICAlZGl2LmFydGljbGUudGl0bGUgQmxhaA0KICAgICVkaXYuYXJ0aWNsZS5kYXRlIDIwMDYtMTEtMDUNCiAgICAlZGl2LmFydGljbGUuZW50cnkNCiAgICAgIE5laWwgUGF0cmljayBIYXJyaXMgDQoNCiVkaXZbQHVzZXIsIDpncmVldGluZ10NCiAgJWJhclsyOTBdLw0KICA9PUhlbGxvIT09DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/haskell.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS0gVHlwZSBhbm5vdGF0aW9uIChvcHRpb25hbCkNCmZpYiA6OiBJbnQgLT4gSW50ZWdlcg0KIA0KLS0gV2l0aCBzZWxmLXJlZmVyZW5jaW5nIGRhdGENCmZpYiBuID0gZmlicyAhISBuDQogICAgICAgIHdoZXJlIGZpYnMgPSAwIDogc2NhbmwgKCspIDEgZmlicw0KICAgICAgICAtLSAwLDEsMSwyLDMsNSwuLi4NCiANCi0tIFNhbWUsIGNvZGVkIGRpcmVjdGx5DQpmaWIgbiA9IGZpYnMgISEgbg0KICAgICAgICB3aGVyZSBmaWJzID0gMCA6IDEgOiBuZXh0IGZpYnMNCiAgICAgICAgICAgICAgbmV4dCAoYSA6IHRAKGI6XykpID0gKGErYikgOiBuZXh0IHQNCiANCi0tIFNpbWlsYXIgaWRlYSwgdXNpbmcgemlwV2l0aA0KZmliIG4gPSBmaWJzICEhIG4NCiAgICAgICAgd2hlcmUgZmlicyA9IDAgOiAxIDogemlwV2l0aCAoKykgZmlicyAodGFpbCBmaWJzKQ0KIA0KLS0gVXNpbmcgYSBnZW5lcmF0b3IgZnVuY3Rpb24NCmZpYiBuID0gZmlicyAoMCwxKSAhISBuDQogICAgICAgIHdoZXJlIGZpYnMgKGEsYikgPSBhIDogZmlicyAoYixhK2Ip]]></data>
	</file>
	<file>
	  <filename>/samples/haxe.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Y2xhc3MgSGF4ZSANCnsNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1haW4oKSANCiAgICB7DQogICAgICAgIC8vIFNheSBIZWxsbyENCiAgICAgICAgdmFyIGdyZWV0aW5nOlN0cmluZyA9ICJIZWxsbyBXb3JsZCI7DQogICAgICAgIHRyYWNlKGdyZWV0aW5nKTsNCiAgICAgICAgDQogICAgICAgIHZhciB0YXJnZXRzOkFycmF5PFN0cmluZz4gPSBbIkZsYXNoIiwiSmF2YXNjcmlwdCIsIlBIUCIsIk5la28iLCJDKysiLCJpT1MiLCJBbmRyb2lkIiwid2ViT1MiXTsNCiAgICAgICAgdHJhY2UoIkhheGUgaXMgYSBncmVhdCBsYW5ndWFnZSB0aGF0IGNhbiB0YXJnZXQ6Iik7DQogICAgICAgIGZvciAodGFyZ2V0IGluIHRhcmdldHMpDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyYWNlICgiIC0gIiArIHRhcmdldCk7DQogICAgICAgIH0NCiAgICAgICAgdHJhY2UoIkFuZCBtYW55IG1vcmUhIik7DQogICAgfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/html.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+DQo8aGVhZD4NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi50ZXh0LWxheWVyIHsNCiAgICBmb250LWZhbWlseTogTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2U7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIGN1cnNvcjogdGV4dDsNCn0NCjwvc3R5bGU+DQoNCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxoMSBzdHlsZT0iY29sb3I6cmVkIj5KdWh1IEtpbm5lcnM8L2gxPg0KPC9ib2R5Pg0KPC9odG1sPg==]]></data>
	</file>
	<file>
	  <filename>/samples/html_ruby.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxPkxpc3RpbmcgQm9va3M8L2gxPg0KIA0KPHRhYmxlPg0KICA8dHI+DQogICAgPHRoPlRpdGxlPC90aD4NCiAgICA8dGg+U3VtbWFyeTwvdGg+DQogICAgPHRoPjwvdGg+DQogICAgPHRoPjwvdGg+DQogICAgPHRoPjwvdGg+DQogIDwvdHI+DQogDQo8JSBAYm9va3MuZWFjaCBkbyB8Ym9va3wgJT4NCiAgPHRyPg0KICAgIDwlIyBjb21tZW50ICU+DQogICAgPHRkPjwlPSBib29rLnRpdGxlICU+PC90ZD4NCiAgICA8dGQ+PCU9IGJvb2suY29udGVudCAlPjwvdGQ+DQogICAgPHRkPjwlPSBsaW5rX3RvICdTaG93JywgYm9vayAlPjwvdGQ+DQogICAgPHRkPjwlPSBsaW5rX3RvICdFZGl0JywgZWRpdF9ib29rX3BhdGgoYm9vaykgJT48L3RkPg0KICAgIDx0ZD48JT0gbGlua190byAnUmVtb3ZlJywgYm9vaywgOmNvbmZpcm0gPT4gJ0FyZSB5b3Ugc3VyZT8nLCA6bWV0aG9kID0+IDpkZWxldGUgJT48L3RkPg0KICA8L3RyPg0KPCUgZW5kICU+DQo8L3RhYmxlPg0KIA0KPGJyIC8+DQogDQo8JT0gbGlua190byAnTmV3IGJvb2snLCBuZXdfYm9va19wYXRoICU+]]></data>
	</file>
	<file>
	  <filename>/samples/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/samples/jade.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ISEhZG9jdHlwZQ0KISEhNQ0KISEhDQoNCmluY2x1ZGUgc29tZXRoaW5nDQoNCiAgICAgICAgIGluY2x1ZGUgYW5vdGhlcl90aGluZw0KDQogIC8vIGxldCdzIHRhbGsgYWJvdXQgaXQNCg0KLy8gDQogIGhlcmUgaXQgaXMuIGEgYmxvY2sgY29tbWVudCENCiBhbmQgYW5vdGhlciByb3chDQpidXQgbm90IGhlcmUuDQoNCiAgICAgLy8gDQogICAgICAgIGEgZmFyIHNwYWNlZA0KICAgIHNob3VsZCBiZSBsYWNrIG9mIGJsb2NrDQoNCiAgIC8vIGFsc28gbm90IGEgY29tbWVudA0KICAgICBkaXYuYXR0ZW1wdEF0QmxvY2sNCiAgDQogIHNwYW4jbXlOYW1lDQoNCiAgI3tpbXBsaWNpdH0NCiAgICAgIXttb3JlX2V4cGxpY2l0fQ0KDQogICNpZERpdg0KDQogICAgLmlkRGl2DQoNCiAgICB0ZXN0KGlkPSJ0YWciKQ0KICAgIGhlYWRlcihpZD0idGFnIiwgYmxhaD0iZm9vIiwgbWVoPSJhYWRzIikNCm1peGluIGFydGljbGUob2JqLCBwYXJlbnRzKQ0KDQogIG1peGluIGJsZWgoKQ0KDQogICAgbWl4aW4gY2xldmVyLW5hbWUNCg0KIC12YXIgeCA9ICIwIjsNCiAtIHkgZWFjaCB6DQoNCiAtIHZhciBpdGVtcyA9IFsib25lIiwgInR3byIsICJ0aHJlZSJdDQogICBlYWNoIGl0ZW0gaW4gaXRlbXMNCiAgICBsaT0gaXRlbQ==]]></data>
	</file>
	<file>
	  <filename>/samples/java.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cHVibGljIGNsYXNzIEluZmluaXRlTG9vcCB7DQoNCiAgICAvKg0KICAgICAqIFRoaXMgd2lsbCBjYXVzZSB0aGUgcHJvZ3JhbSB0byBoYW5nLi4uDQogICAgICoNCiAgICAgKiBUYWtlbiBmcm9tOg0KICAgICAqIGh0dHA6Ly93d3cuZXhwbG9yaW5nYmluYXJ5LmNvbS9qYXZhLWhhbmdzLXdoZW4tY29udmVydGluZy0yLTIyNTA3Mzg1ODUwNzIwMTJlLTMwOC8NCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7DQogICAgICAgIGRvdWJsZSBkID0gRG91YmxlLnBhcnNlRG91YmxlKCIyLjIyNTA3Mzg1ODUwNzIwMTJlLTMwOCIpOw0KDQogICAgICAgIC8vIHVucmVhY2hhYmxlIGNvZGUNCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJWYWx1ZTogIiArIGQpOw0KICAgIH0NCn0=]]></data>
	</file>
	<file>
	  <filename>/samples/javascript.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZnVuY3Rpb24gZm9vKGl0ZW1zKSB7DQogICAgZm9yICh2YXIgaT0wOyBpPGl0ZW1zLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIGFsZXJ0KGl0ZW1zW2ldICsgImp1aHUiKTsNCiAgICB9ICAgLy8gUmVhbCBUYWIuDQp9]]></data>
	</file>
	<file>
	  <filename>/samples/json.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ew0KICJxdWVyeSI6IHsNCiAgImNvdW50IjogMTAsDQogICJjcmVhdGVkIjogIjIwMTEtMDYtMjFUMDg6MTA6NDZaIiwNCiAgImxhbmciOiAiZW4tVVMiLA0KICAicmVzdWx0cyI6IHsNCiAgICJwaG90byI6IFsNCiAgICB7DQogICAgICJmYXJtIjogIjYiLA0KICAgICAiaWQiOiAiNTg1NTYyMDk3NSIsDQogICAgICJpc2ZhbWlseSI6ICIwIiwNCiAgICAgImlzZnJpZW5kIjogIjAiLA0KICAgICAiaXNwdWJsaWMiOiAiMSIsDQogICAgICJvd25lciI6ICIzMjAyMTU1NEBOMDQiLA0KICAgICAic2VjcmV0IjogImYxZjVlODUxNWQiLA0KICAgICAic2VydmVyIjogIjUxMTAiLA0KICAgICAidGl0bGUiOiAiNzA4NyBiYW5kaXQgY2F0Ig0KICAgIH0sDQogICAgew0KICAgICAiZmFybSI6ICI0IiwNCiAgICAgImlkIjogIjU4NTYxNzA1MzQiLA0KICAgICAiaXNmYW1pbHkiOiAiMCIsDQogICAgICJpc2ZyaWVuZCI6ICIwIiwNCiAgICAgImlzcHVibGljIjogIjEiLA0KICAgICAib3duZXIiOiAiMzIwMjE1NTRATjA0IiwNCiAgICAgInNlY3JldCI6ICJmZjFlZmIyYTZmIiwNCiAgICAgInNlcnZlciI6ICIzMjE3IiwNCiAgICAgInRpdGxlIjogIjY5NzUgcnVzdHkgY2F0Ig0KICAgIH0sDQogICAgew0KICAgICAiZmFybSI6ICI2IiwNCiAgICAgImlkIjogIjU4NTYxNzI5NzIiLA0KICAgICAiaXNmYW1pbHkiOiAiMCIsDQogICAgICJpc2ZyaWVuZCI6ICIwIiwNCiAgICAgImlzcHVibGljIjogIjEiLA0KICAgICAib3duZXIiOiAiNTEyNDk4NzVATjAzIiwNCiAgICAgInNlY3JldCI6ICI2YzY4ODczNDdjIiwNCiAgICAgInNlcnZlciI6ICI1MTkyIiwNCiAgICAgInRpdGxlIjogIndhdGVybWFya2VkLWNhdHMiDQogICAgfSwNCiAgICB7DQogICAgICJmYXJtIjogIjYiLA0KICAgICAiaWQiOiAiNTg1NjE2ODMyOCIsDQogICAgICJpc2ZhbWlseSI6ICIwIiwNCiAgICAgImlzZnJpZW5kIjogIjAiLA0KICAgICAiaXNwdWJsaWMiOiAiMSIsDQogICAgICJvd25lciI6ICIzMjAyMTU1NEBOMDQiLA0KICAgICAic2VjcmV0IjogIjBjMWNmZGY2NGMiLA0KICAgICAic2VydmVyIjogIjUwNzgiLA0KICAgICAidGl0bGUiOiAiNzAyMCBtYW5keSBjYXQiDQogICAgfSwNCiAgICB7DQogICAgICJmYXJtIjogIjMiLA0KICAgICAiaWQiOiAiNTg1NjE3MTc3NCIsDQogICAgICJpc2ZhbWlseSI6ICIwIiwNCiAgICAgImlzZnJpZW5kIjogIjAiLA0KICAgICAiaXNwdWJsaWMiOiAiMSIsDQogICAgICJvd25lciI6ICIzMjAyMTU1NEBOMDQiLA0KICAgICAic2VjcmV0IjogIjdmNWEzMTgwYWIiLA0KICAgICAic2VydmVyIjogIjI2OTYiLA0KICAgICAidGl0bGUiOiAiNzQ0OCBib2JieSBjYXQiDQogICAgfQ0KICAgXQ0KICB9DQogfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/jsp.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+DQo8Ym9keT4NCiAgICA8c2NyaXB0Pg0KICAgICAgICB2YXIgeCA9ICJhYmMiOw0KICAgICAgICBmdW5jdGlvbiB5IHsNCiAgICAgICAgfQ0KICAgIDwvc2NyaXB0Pg0KICAgIDxzdHlsZT4NCiAgICAgICAgLmNsYXNzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxMjQzNTY7DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KDQogICAgPHA+DQogICAgICAgIFRvZGF5J3MgZGF0ZTogPCU9IChuZXcgamF2YS51dGlsLkRhdGUoKSkudG9Mb2NhbGVTdHJpbmcoKSU+DQogICAgPC9wPg0KICAgIDwlISBpbnQgaSA9IDA7ICU+DQogICAgPGpzcDpkZWNsYXJhdGlvbj4NCiAgICAgICBpbnQgaiA9IDEwOw0KICAgIDwvanNwOmRlY2xhcmF0aW9uPg0KDQogICAgPCUtLSBUaGlzIGlzIEpTUCBjb21tZW50IC0tJT4NCiAgICA8JUAgZGlyZWN0aXZlIGF0dHJpYnV0ZT0idmFsdWUiICU+DQoNCiAgICA8aDI+U2VsZWN0IExhbmd1YWdlczo8L2gyPg0KDQogICAgPGZvcm0gQUNUSU9OPSJqc3BDaGVja0JveC5qc3AiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImlkIiB2YWx1ZT0iSmF2YSI+IEphdmE8QlI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iaWQiIHZhbHVlPSIuTkVUIj4gLk5FVDxCUj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpZCIgdmFsdWU9IlBIUCI+IFBIUDxCUj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpZCIgdmFsdWU9IkMvQysrIj4gQy9DKys8QlI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iaWQiIHZhbHVlPSJQRVJMIj4gUEVSTCA8QlI+DQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiPg0KICAgIDwvZm9ybT4NCg0KICAgIDwlDQogICAgU3RyaW5nIHNlbGVjdFtdID0gcmVxdWVzdC5nZXRQYXJhbWV0ZXJWYWx1ZXMoImlkIik7IA0KICAgIGlmIChzZWxlY3QgIT0gbnVsbCAmJiBzZWxlY3QubGVuZ3RoICE9IDApIHsNCiAgICAgICAgb3V0LnByaW50bG4oIllvdSBoYXZlIHNlbGVjdGVkOiAiKTsNCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWxlY3QubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgb3V0LnByaW50bG4oc2VsZWN0W2ldKTsgDQogICAgICAgIH0NCiAgICB9DQogICAgJT4NCjwvYm9keT4NCjwvaHRtbD4=]]></data>
	</file>
	<file>
	  <filename>/samples/jsx.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LypFWFBFQ1RFRA0KaGVsbG8gd29ybGQhDQoqLw0KY2xhc3MgVGVzdCB7DQogICAgc3RhdGljIGZ1bmN0aW9uIHJ1bigpIDogdm9pZCB7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKCJoZWxsbyB3b3JsZCEiKTsNCiAgICAgICAgbG9nICJoZWxsbyB3b3JsZCEiOw0KICAgIH0NCn0=]]></data>
	</file>
	<file>
	  <filename>/samples/julia.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWw+DQo8IS0tDQoNCkhlbGxvIGZ1dHVyZSBHaXRIdWJiZXIhIEkgYmV0IHlvdSdyZSBoZXJlIHRvIHJlbW92ZSB0aG9zZSBuYXN0eSBpbmxpbmUgc3R5bGVzLA0KRFJZIHVwIHRoZXNlIHRlbXBsYXRlcyBhbmQgbWFrZSAnZW0gbmljZSBhbmQgcmUtdXNhYmxlLCByaWdodD8NCg0KUGxlYXNlLCBkb24ndC4gaHR0cHM6Ly9naXRodWIuY29tL3N0eWxlZ3VpZGUvdGVtcGxhdGVzLzIuMA0KDQotLT4NCjxodG1sPg0KICA8aGVhZD4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQogICAgPHRpdGxlPlBhZ2Ugbm90IGZvdW5kICZtaWRkb3Q7IEdpdEh1YiBQYWdlczwvdGl0bGU+DQogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4NCiAgICAgIGJvZHkgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxOw0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgICAgfQ0KDQogICAgICAuY29udGFpbmVyIHsgbWFyZ2luOiA1MHB4IGF1dG8gNDBweCBhdXRvOyB3aWR0aDogNjAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KDQogICAgICBhIHsgY29sb3I6ICM0MTgzYzQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KICAgICAgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9DQoNCiAgICAgIGgxIHsgd2lkdGg6IDgwMHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbGVmdDogLTEwMHB4OyBsZXR0ZXItc3BhY2luZzogLTFweDsgbGluZS1oZWlnaHQ6IDYwcHg7IGZvbnQtc2l6ZTogNjBweDsgZm9udC13ZWlnaHQ6IDEwMDsgbWFyZ2luOiAwcHggMCA1MHB4IDA7IHRleHQtc2hhZG93OiAwIDFweCAwICNmZmY7IH0NCiAgICAgIHAgeyBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpOyBtYXJnaW46IDIwcHggMDsgbGluZS1oZWlnaHQ6IDEuNjsgfQ0KDQogICAgICB1bCB7IGxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdpbjogMjVweCAwOyBwYWRkaW5nOiAwOyB9DQogICAgICBsaSB7IGRpc3BsYXk6IHRhYmxlLWNlbGw7IGZvbnQtd2VpZ2h0OiBib2xkOyB3aWR0aDogMSU7IH0NCg0KICAgICAgLmxvZ28geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi10b3A6IDM1cHg7IH0NCiAgICAgIC5sb2dvLWltZy0yeCB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgIEBtZWRpYQ0KICAgICAgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLA0KICAgICAgb25seSBzY3JlZW4gYW5kICggICBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLA0KICAgICAgb25seSBzY3JlZW4gYW5kICggICAgIC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksDQogICAgICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksDQogICAgICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwNCiAgICAgIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAyZHBweCkgew0KICAgICAgICAubG9nby1pbWctMXggeyBkaXNwbGF5OiBub25lOyB9DQogICAgICAgIC5sb2dvLWltZy0yeCB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQ0KICAgICAgfQ0KDQogICAgICAjc3VnZ2VzdGlvbnMgew0KICAgICAgICBtYXJnaW4tdG9wOiAzNXB4Ow0KICAgICAgICBjb2xvcjogI2NjYzsNCiAgICAgIH0NCiAgICAgICNzdWdnZXN0aW9ucyBhIHsNCiAgICAgICAgY29sb3I6ICM2NjY2NjY7DQogICAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgbWFyZ2luOiAwIDEwcHg7DQogICAgICB9DQoNCiAgICA8L3N0eWxlPg0KICA8L2hlYWQ+DQogIDxib2R5Pg0KDQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCg0KICAgICAgPGgxPjQwNDwvaDE+DQogICAgICA8cD48c3Ryb25nPlRoZXJlIGlzbid0IGEgR2l0SHViIFBhZ2UgaGVyZS48L3N0cm9uZz48L3A+DQoNCiAgICAgIDxwPjxlbT5BcmUgeW91IHRyeWluZyB0byBwdWJsaXNoIG9uZT88L2VtPg0KICAgICAgICBJdCBtYXkgdGFrZSB1cCB0byB0ZW4gbWludXRlcyB1bnRpbCB5b3VyIHBhZ2UgaXMgYXZhaWxhYmxlLg0KICAgICAgPC9wPg0KDQogICAgICA8cD4NCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vY2F0ZWdvcmllcy8yMC9hcnRpY2xlcyI+UmVhZCB0aGUgZnVsbCBkb2N1bWVudGF0aW9uPC9hPg0KICAgICAgICB0byBsZWFybiBob3cgdG8gc2V0IHVwIDxzdHJvbmc+R2l0SHViIFBhZ2VzPC9zdHJvbmc+PGJyIC8+DQogICAgICAgIGZvciB5b3VyIHJlcG9zaXRvcnksIG9yZ2FuaXphdGlvbiwgb3IgdXNlciBhY2NvdW50Lg0KICAgICAgPC9wPg0KDQogICAgICA8ZGl2IGlkPSJzdWdnZXN0aW9ucyI+DQogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jb250YWN0Ij5Db250YWN0IFN1cHBvcnQ8L2E+ICZtZGFzaDsNCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdGF0dXMuZ2l0aHViLmNvbSI+R2l0SHViIFN0YXR1czwvYT4gJm1kYXNoOw0KICAgICAgICA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2dpdGh1YnN0YXR1cyI+QGdpdGh1YnN0YXR1czwvYT4NCiAgICAgIDwvZGl2Pg0KDQogICAgICA8YSBocmVmPSIvIiBjbGFzcz0ibG9nbyBsb2dvLWltZy0xeCI+DQogICAgICAgIDxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB0aXRsZT0iIiBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlScFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TXkxak1ERXhJRFkyTGpFME5UWTJNU3dnTWpBeE1pOHdNaTh3TmkweE5EbzFOam95TnlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5pQW9UV0ZqYVc1MGIzTm9LU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBGTVRaQ1JEWTNSRUl6UmpBeE1VVXlRVVF6UkVJeFF6UkVOVUZGTlVNNU5pSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZNVFpDUkRZM1JVSXpSakF4TVVVeVFVUXpSRUl4UXpSRU5VRkZOVU01TmlJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rVXhOa0pFTmpkQ1FqTkdNREV4UlRKQlJETkVRakZETkVRMVFVVTFRemsySWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tVeE5rSkVOamREUWpOR01ERXhSVEpCUkRORVFqRkRORVExUVVVMVF6azJJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrU005TUNBQUFBKzVKUkVGVWVOckVWMTFJazFFWTNzNCtkZE9wMjlRNWIwb3BDZ0tGc29Lb2k1S2c2Q0lodXdpNnpMSkxvWUxvcHE0cXNLS2dpNGk2Q1lJb1UvcTVpREFLczZzeW9TNzZJUld0eUorcDdjZHQ3c2YxUEdPRCtlMGMzZHlnQXgvNjdaenpQTTk1Lzg3N0dZZEhSZzNaak1YRnhlcFFLTlM2c0xDd0p4cU5OdUZwaU1malZzNFpqVWEvcG1tamVENlZsSlM4TnB2TlQ0UVE3bXh3alNzSmlFUWltLzErLzlsZ01IZ0lyNW9odXhHMVdDdzlWcXYxY2xGUjBkQ3FCT0RFbFY2djkwb2dFRGpHZFliVmpYaHBhZW5kaW9xSzA3Q0lSN1pBcUU0OVBUMDlCUEwyUE1nVEJ5UUdzWWlabFFENHVNWHRkcitKeFdJTmhnSU5ZaEdUMk1zS2dNcm0yZG5aWGdSWGhhSEFnNWpFSm9kVUFIeHV4NEx1ZEhKRTlSZEVkQStpM0p1ejdiR0hlNG1oRTlGTnJnd0JDTGlyTUZWOU9raDVlZmxGaDhQUjVuSzVuRGFiclIyQk5KbEtPMFQzNStMaTRuNCsvSisvSlFDeGhtdTVoM3VKb1hOSFBibVdaQUhNc2hXQjhsNS9pcHFhbW1hQWYwelBERHgxT05WM3Z1cmRpZHF3QVFMK3BFYzhzTGNBZTFDQ3ZRM1lIeElXOFBsODV4U1dOQzFoQURESXYwcklFL280SjBrM2t3dzR4U2x3SWhjcTNFRkZPbTdLTi9oVUdPUWt0MENGYTVXcE5KbE12eEJFei9JVlFBeGcvWlJabDl3aUhBNjN5RFlpZU03RG5MUDVDaUFHc0M3STVzZ3RZS0pHV2UyQThzZUZxZ0ZKckpqRVBZMUNuM3BKOC85VzFlNVZXc0ZEVEVtRnJCY29EaFpKRVFrWHVoSUNNeUtwamhhaHFOMjFoUllBVEtmVU9sRG1reWdyUjRvNEMwVk9MR0pLck9JVEtCNGppanpkWHlnQktpeHlDNVREUWRuay9QejhxUnc2b09XR2xzVEtHT1FXNk9INkZCV3N5ZVB4ZE9YTFRneGl5ZWJJTFpDanorR0xnTUlLblhOemM0OVlNbGNSZEhYY1N3eEZWZ1RJblFoQzlHMzNVaE5vSkx1cXE2dDM0NXA5eTNlVXk4T1RrNVBqQUh1STl1bzRiMDdGQmFPaHN1MEE0VW5jK1QxVFUxTmozS3NTU0U1eUo2NWpxRjJERGQ4UXFXWW1BWnJJTTJWbFpUZG5abWI2QWJwZFY5VjZlYzl6bmY1UTdIall1bWRSRTBKT3AzTWppdE80U0ZhK2NaejhVbXFlM1RDYlNMdmRma1Iva1dEZE5RbDVJbnVUY3lzT2NwRlQzNVpyYkJ4eDRwM0pBSGxaVlZXMUQvNjM0VlJ0K0Z2TEJnSy92NUxWOVdTKzEweE1URXd0Unc3WHZxT0wrZTJROFYzQVlJT0lBWFEyNi9oZVdWblpDVmZjeUtIZzJDQmdUcG1QbWpZTThsMjRHeWFVSHlhSWg3WHdmUjlFckU4cUhvRGZuMkxUTkFWQzBIWDZNRmNCSVA4QmkrNkY2Y2RXL0RJQ2tBTlJmeDk5ZkVZRlE3TnBoNWkvdVFpQTIxNGdubzdLK2d1aGFpS2c5Z0M2MitNOGVSN1hzQnNZSjRpbGFtNjBGYjdyN3VBajh3Rnl1d00xb0lPV2dmbUR5NlJYRUVRekpNUGUyM0RYclZTN3J0eUQzRGY4ei9GUGdBRUF6V1U1S3U1OVpBVUFBQUFBU1VWT1JLNUNZSUk9IiAvPg0KICAgICAgPC9hPg0KDQogICAgICA8YSBocmVmPSIvIiBjbGFzcz0ibG9nbyBsb2dvLWltZy0yeCI+DQogICAgICAgIDxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB0aXRsZT0iIiBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUVBQUFBQkFDQVlBQUFDcWFYSGVBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlScFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TXkxak1ERXhJRFkyTGpFME5UWTJNU3dnTWpBeE1pOHdNaTh3TmkweE5EbzFOam95TnlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5pQW9UV0ZqYVc1MGIzTm9LU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBFUVVNMVFrVXhSVUkwTVVNeE1VVXlRVVF6UkVJeFF6UkVOVUZGTlVNNU5pSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEVRVU0xUWtVeFJrSTBNVU14TVVVeVFVUXpSRUl4UXpSRU5VRkZOVU01TmlJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rVXhOa0pFTmpkR1FqTkdNREV4UlRKQlJETkVRakZETkVRMVFVVTFRemsySWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tVeE5rSkVOamd3UWpOR01ERXhSVEpCUkRORVFqRkRORVExUVVVMVF6azJJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgraGZQUmFRQUFCNmxKUkVGVWVOcnNXMm1NRTJVWWJvZHR0KzIyMjJ1MzVRaGVvQ0NZR0JRbGlnSUpna1pKTlB6Z2lnb2FURWo4QWRGRU1mQURmeUFCa2dXaWlXY2llSzRTK1FPaUhBWVVqMmhNTktnWWxFdWpwTnR0dTl2dHRidmR3K2NoVTFLNk01MzVwdDN1YkhDU3llelIrYjczZWI3Myt0N3ZyZlhzdWZPVzRiejYrdm9tOS9iMjNvdm5OTnczNGI1eFlHQWdPRGc0Nk1idDRtZXNWbXNXZDFxU3BIaGRYZDJmdVAvQWZjcHV0NS9BODh4d3ltY2RCZ0xxZW5wNkZ1Unl1V1Y0enUvdjc1OVF5V0JqeG96NXQ3NisvZ3VuMDltSzV4Rnlha29DQVBTYVRDYXpOcHZOUG9ZVmJoNk8xWUtHUkYwdTEzc05EUTI3UU16ZnBpQUFLajBsblU2L2dCVmZBWlcyV1dwd3dWenkwSWdQM0c3M0Zwakk2UkVoQUdBOXFWUnFBMWI5bVZvQlZ5SUMydERpOFhnMjQrZFV6UWlBYlMvczdPeDhHMm8vM21LQ0MrWncwZWZ6UFFFZmNWallyQVJYM2RiVjFiVXRIbzhmTWd0NDJmK01wMHlVVFZRYmRXc0FIVnNpa2RpSGtIYVB4Y1FYUXVmWGdVQmdNUnhtZTlVMEFBeGZINHZGdmpNN2VGNlVrYkpTNXFvUXdFUUdBNTdBYzVKbGxGeVVWWlo1Y2tVRWdNVnhzSzJqbFNZekkrUVhKc2l5anpORUFKeUpBemIvS1FhNDFqSktMOHBPRE1RaVRFQXltWHc1bjgvUDBJakQzYmg3UmdvZzU5YWFueGlJUlRWdlYvb2owdG5IY2EvV01yVndPRHdCM3JhVEd4emtCZy9nblpWYXBGVjYyV3kybjVBTzcwSE0vNXdiSjBRblh5UVNhVlBESXVOWnpZMFYzbnRITXd4aXdIQTBHajJOcDdlY0lCRGdhREFZWEtDUUpNMURocmdKM25odWxjUGJsOGo0Tm1IZTQ2WC9nNjBmd2J6M2Fld2prcUZRYUFxZWJXVTFBT3F5UXd0OElkNnFFSE1jOTd6dTd1N0ZHR3NuN0hBaVZ1b3NWdzdQMzVDMW5jY2RnU0N4b3AxZEhlWnN3bWZITW54Qm82WlRrK2pOOGRsL3ZGN3ZXb2ZEc2ErTUxOOW9FVUJNeE9iMysxZW9Fc0JWdzZabXVhNDlyOFltaEFLRGlFUGNNd0JzeE1pcVEraXh6UEZ4WnlxUnBYQVJHL1lPcjFPYkZKMGdVc2tYQmJhbWNSMU9LbU1VdkR4SFJBdTgvTG1ZM2pGTE1VcEZxejlIeEc2NXNtWUpkeUt5RUNPeERpRUFlL3AxZ2pGMm9vbml2WkFzeFZnbDJkYWE0RVFXQ1c2SjU1cUZBRkZaaUpXWUx4TlF5MnFPU1V6R1JzeVhDVURJZWxpd0FIRU80V1NsV1FCUkZvWmFrWGNLbUNYbXlYQUtzMFZlOXZsOHE0MldvSVlwSlU0aFYzaEtjTnM4bTlnbDdwL3hRNzNlRjVrQjRqNW1OcldtVEpSTndBenFpVjFDeGpWVFpDSWtFcStaMWJaRlpTTjJDZW5tVkFGVnk0UGx6OHhLQUdXampBS0ZrNmxDQk1EUi9NSmpMTE1TUU5tNDN4QWlRS1RhQSs5L3dld2hEakwrSlZJMWtrVFNTT1RjS2JNVHdQcUVTQW90NmRuNkZyMWdId1ZKanU2SVJ1eWlCeVB1VVVCQWc1REdrQWdCbXhsdmRnSUVLOWdEa29oZFkvQkpvNENBRzBSOG1pUlNzR0FCa2dWUXM0S1h1MDk4SWdVWFNTUnNGQW9LWmlWQVZEWTJXVWlpUFRqWVJpNDFLd0dpc3JHc0x0bHN0aDhGaXduejJmQmtRdldmUnRsRTNpRjJ5VzYzL3lDYWNYWjFkVzAyR3dHeVRGYVJkNGlkSm5DS0hSYUN4WVJIb0c1TFRLVDZTeWlUb1AxZkpIYm1BWVBZUlIwVW5aUXRNbkE2czB6ZytHWkJsdDBHZG83RVBIZ3BFM1E2blo4WXlMaGM4WGo4TUpoL2FLVEFZKzVGUEFLSExFN1Jkd3VZSlptTnd6eUNNa0JDWXlLUk9KQk1KbDlCL1BYWENqam1DbURPVnpIM2ZpUHBPYkVXR3FvS2U0RUJsOHYxaGxxc2RMdmQyM21reEhNOXBjOWtNcG1ubzlIb2VUaWk3ZXdiSEVaUFB4MXp0TFMxdFYzQW5HdU1qaU5qdmJRRnVIdzZ6RG81Qnk3ZFRQQVFOQmdNTHJSYXJUa1NsczFtbndUN3V3cDl2aXJ4OVF6YlcvSHVWL2o1ZC9iKzZqbmlLbGxsUDhsa2VPTkpEaytkcTlHc1FUbkM0ZkIxaGVPMEs0N0h3ZTdXZERyOW5BS2dYd09Cd0hJK0M0NUh0ajFkNnNkNDI5VFVORWNtVWRjK1BSYUxIY3ZuODdkWFc0dWd6ZHNhR3h1Zkw5NE5Gdjl6aTFKN0dWYmhsdmIyZG5hSjNTVnJ4ZmMrbjIrTlRzWjcvSDcvTXIzZzVYZFNJSHlKU0gxUForN2ZUb3lsMitFcnFpbGdaNE5hTFlCOWdvVkdhSGpSOTNIdjFaclU0WERzRlQyMGtIM1BPYnpiV2swQ2dHMWphY1ZJVW5BUWI5RitWZXh5TE16a3BjTHYwSUpWN0FIUUlPQ0FVWUh4N3Y1cWdTY21ZSHRUcVNBeVpMRUpUSzIyQmllNGlxM3hzcXBtNFNBZjlIcTlhMkRuSjR1TEszU0VVTGNkUnZwM2kzekh5U3FwZmljeEVkc1FjMU5ybFlYWHZSK083cUFTU2V6WEIraDFTdVVvbWdnOUxMOEJVb1Y0NzQ5RUlvbEtoK0VpcVdtcVZFWmxEZ0hrczJweEh3N3hUcVVRdzlKNU5jQVhPSzEwQUdJb1o2WmxpNkpZNloxUTQ2MUtvWjROaUtMSGFyVytLRHN4bERVUEhaNXpQUVpxVVZEUEpzVHFiNW45bWFsYnBBaDhDMlhYRExsNjIrV1pJREZSVWxOVk9pd2VuY25OVTNhUUVrTCtjRE1Tb0x2Wm8yZlFCN0FKc3NOQXVGdXZvcmxEVlZra2cySTg3K2pvMksyUUFWcGhEcmZ5VmlLNVZxdE8zNE9rYXhYQ3ArN2RyZERCQ0FkdWJtNmVpZFgrMld3cVQ1a29td2g0WVFMaytINGFFOTNoOFhnMmd2SGVrUVpPR1NnTFpUTHlEVExKNEx4OS9LWldLQlNhaW5UNEl5M0ZxUUJmblVaUjQyUEtRRmtzQnI5UUtWWENQdXNEM09pQS9Sa1E1a1A4cVYvSmwxV3l3QXAvNitkY21QTTJ6TDFVclVhaGU0SnFmbldXS1hJdWwzdVViZlA4bmpBRkxXMU9GcjNnZEZ0WjcyY05IK1B0UVQ3L2JyVytOWHFKQUhoMHk5VjgvVS9BMVU3QWZ3SU1BRDdtUzNwQ2J1V0pBQUFBQUVsRlRrU3VRbUNDIiAvPg0KICAgICAgPC9hPg0KICAgIDwvZGl2Pg0KICA8L2JvZHk+DQo8L2h0bWw+DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/latex.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[XHVzZXBhY2thZ2V7YW1zbWF0aH0NClx0aXRsZXtcTGFUZVh9DQpcZGF0ZXt9DQpcYmVnaW57ZG9jdW1lbnR9DQogIFxtYWtldGl0bGUNCiAgXExhVGVYe30gaXMgYSBkb2N1bWVudCBwcmVwYXJhdGlvbiBzeXN0ZW0gZm9yIHRoZSBcVGVYe30NCiAgdHlwZXNldHRpbmcgcHJvZ3JhbS4gSXQgb2ZmZXJzIHByb2dyYW1tYWJsZSBkZXNrdG9wIHB1Ymxpc2hpbmcNCiAgZmVhdHVyZXMgYW5kIGV4dGVuc2l2ZSBmYWNpbGl0aWVzIGZvciBhdXRvbWF0aW5nIG1vc3QgYXNwZWN0cyBvZg0KICB0eXBlc2V0dGluZyBhbmQgZGVza3RvcCBwdWJsaXNoaW5nLCBpbmNsdWRpbmcgbnVtYmVyaW5nIGFuZA0KICBjcm9zcy1yZWZlcmVuY2luZywgdGFibGVzIGFuZCBmaWd1cmVzLCBwYWdlIGxheW91dCwgYmlibGlvZ3JhcGhpZXMsDQogIGFuZCBtdWNoIG1vcmUuIFxMYVRlWHt9IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gaW4gMTk4NCBieSBMZXNsaWUNCiAgTGFtcG9ydCBhbmQgaGFzIGJlY29tZSB0aGUgZG9taW5hbnQgbWV0aG9kIGZvciB1c2luZyBcVGVYOyBmZXcNCiAgcGVvcGxlIHdyaXRlIGluIHBsYWluIFxUZVh7fSBhbnltb3JlLiBUaGUgY3VycmVudCB2ZXJzaW9uICBpcw0KICBcTGFUZVhlLg0KIA0KICAlIFRoaXMgaXMgYSBjb21tZW50OyBpdCB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgZmluYWwgb3V0cHV0Lg0KICAlIFRoZSBmb2xsb3dpbmcgc2hvd3MgYSBsaXR0bGUgb2YgdGhlIHR5cGVzZXR0aW5nIHBvd2VyIG9mIExhVGVYOg0KICBcYmVnaW57YWxpZ259DQogICAgRSAmPSBtY14yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFwNCiAgICBtICY9IFxmcmFje21fMH17XHNxcnR7MS1cZnJhY3t2XjJ9e2NeMn19fQ0KICBcZW5ke2FsaWdufQ0KXGVuZHtkb2N1bWVudH0=]]></data>
	</file>
	<file>
	  <filename>/samples/less.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Lyogc3R5bGVzLmxlc3MgKi8NCg0KQGJhc2U6ICNmOTM4YWI7DQoNCi5ib3gtc2hhZG93KEBzdHlsZSwgQGMpIHdoZW4gKGlzY29sb3IoQGMpKSB7DQogICAgYm94LXNoYWRvdzogICAgICAgICBAc3R5bGUgQGM7DQogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBAc3R5bGUgQGM7DQogICAgLW1vei1ib3gtc2hhZG93OiAgICBAc3R5bGUgQGM7DQp9DQouYm94LXNoYWRvdyhAc3R5bGUsIEBhbHBoYTogNTAlKSB3aGVuIChpc251bWJlcihAYWxwaGEpKSB7DQogICAgLmJveC1zaGFkb3coQHN0eWxlLCByZ2JhKDAsIDAsIDAsIEBhbHBoYSkpOw0KfQ0KDQovLyBCb3ggc3R5bGVzDQouYm94IHsgDQogICAgY29sb3I6IHNhdHVyYXRlKEBiYXNlLCA1JSk7DQogICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKEBiYXNlLCAzMCUpOw0KICAgIA0KICAgIGRpdiB7IC5ib3gtc2hhZG93KDAgMCA1cHgsIDMwJSkgfQ0KICANCiAgICBhIHsNCiAgICAgICAgY29sb3I6IEBiYXNlOw0KICAgICAgICANCiAgICAgICAgJjpob3ZlciB7DQogICAgICAgICAgICBjb2xvcjogbGlnaHRlbihAYmFzZSwgNTAlKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCg==]]></data>
	</file>
	<file>
	  <filename>/samples/liquid.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIGZvbGxvd2luZyBleGFtcGxlcyBjYW4gYmUgZm91bmQgaW4gZnVsbCBhdCBodHRwOi8vbGlxdWlkbWFya3VwLm9yZy8NCg0KTGlxdWlkIGlzIGFuIGV4dHJhY3Rpb24gZnJvbSB0aGUgZS1jb21tZXJjZSBzeXN0ZW0gU2hvcGlmeS4NClNob3BpZnkgcG93ZXJzIG1hbnkgdGhvdXNhbmRzIG9mIGUtY29tbWVyY2Ugc3RvcmVzIHdoaWNoIGFsbCBjYWxsIGZvciB1bmlxdWUgZGVzaWducy4NCkZvciB0aGlzIHdlIGRldmVsb3BlZCBMaXF1aWQgd2hpY2ggYWxsb3dzIG91ciBjdXN0b21lcnMgY29tcGxldGUgZGVzaWduIGZyZWVkb20gd2hpbGUNCm1haW50YWluaW5nIHRoZSBpbnRlZ3JpdHkgb2Ygb3VyIHNlcnZlcnMuDQoNCkxpcXVpZCBoYXMgYmVlbiBpbiBwcm9kdWN0aW9uIHVzZSBzaW5jZSBKdW5lIDIwMDYgYW5kIGlzIG5vdyB1c2VkIGJ5IG1hbnkgb3RoZXINCmhvc3RlZCB3ZWIgYXBwbGljYXRpb25zLg0KDQpJdCB3YXMgZGV2ZWxvcGVkIGZvciB1c2FnZSBpbiBSdWJ5IG9uIFJhaWxzIHdlYiBhcHBsaWNhdGlvbnMgYW5kIGludGVncmF0ZXMgc2VhbWxlc3NseQ0KYXMgYSBwbHVnaW4gYnV0IGl0IGFsc28gd29ya3MgZXhjZWxsZW50bHkgYXMgYSBzdGFuZCBhbG9uZSBsaWJyYXJ5Lg0KDQpIZXJlJ3Mgd2hhdCBpdCBsb29rcyBsaWtlOg0KDQogIDx1bCBpZD0icHJvZHVjdHMiPg0KICAgIHslIGZvciBwcm9kdWN0IGluIHByb2R1Y3RzICV9DQogICAgICA8bGk+DQogICAgICAgIDxoMj57eyBwcm9kdWN0LnRpdGxlIH19PC9oMj4NCiAgICAgICAgT25seSB7eyBwcm9kdWN0LnByaWNlIHwgZm9ybWF0X2FzX21vbmV5IH19DQoNCiAgICAgICAgPHA+e3sgcHJvZHVjdC5kZXNjcmlwdGlvbiB8IHByZXR0eXByaW50IHwgdHJ1bmNhdGU6IDIwMCAgfX08L3A+DQoNCiAgICAgIDwvbGk+DQogICAgeyUgZW5kZm9yICV9DQogIDwvdWw+DQoNCg0KU29tZSBtb3JlIGZlYXR1cmVzIGluY2x1ZGU6DQoNCjxoMj5GaWx0ZXJzPC9oMj4NCjxwPiBUaGUgd29yZCAidG9iaSIgaW4gdXBwZXJjYXNlOiB7eyAndG9iaScgfCB1cGNhc2UgfX0gPC9wPg0KPHA+VGhlIHdvcmQgInRvYmkiIGhhcyB7eyAndG9iaScgfCBzaXplIH19IGxldHRlcnMhIDwvcD4NCjxwPkNoYW5nZSAiSGVsbG8gd29ybGQiIHRvICJIaSB3b3JsZCI6IHt7ICdIZWxsbyB3b3JsZCcgfCByZXBsYWNlOiAnSGVsbG8nLCAnSGknIH19IDwvcD4NCjxwPlRoZSBkYXRlIHRvZGF5IGlzIHt7ICdub3cnIHwgZGF0ZTogIiVZICViICVkIiB9fSA8L3A+DQoNCg0KPGgyPklmPC9oMj4NCjxwPg0KICB7JSBpZiB1c2VyLm5hbWUgPT0gJ3RvYmknIG9yIHVzZXIubmFtZSA9PSAnbWFyYycgJX0gDQogICAgaGkgbWFyYyBvciB0b2JpDQogIHslIGVuZGlmICV9DQo8L3A+DQoNCg0KPGgyPkNhc2U8L2gyPg0KPHA+DQogIHslIGNhc2UgdGVtcGxhdGUgJX0NCiAgICB7JSB3aGVuICdpbmRleCcgJX0NCiAgICAgICBXZWxjb21lDQogICAgeyUgd2hlbiAncHJvZHVjdCcgJX0NCiAgICAgICB7eyBwcm9kdWN0LnZlbmRvciB8IGxpbmtfdG9fdmVuZG9yIH19IC8ge3sgcHJvZHVjdC50aXRsZSB9fQ0KICAgIHslIGVsc2UgJX0NCiAgICAgICB7eyBwYWdlX3RpdGxlIH19DQogIHslIGVuZGNhc2UgJX0NCjwvcD4NCg0KDQo8aDI+Rm9yIExvb3BzPC9oMj4NCjxwPg0KICB7JSBmb3IgaXRlbSBpbiBhcnJheSAlfSANCiAgICB7eyBpdGVtIH19DQogIHslIGVuZGZvciAlfQ0KPC9wPg0KDQoNCjxoMj5UYWJsZXM8L2gyPg0KPHA+DQogIHslIHRhYmxlcm93IGl0ZW0gaW4gaXRlbXMgY29sczogMyAlfQ0KICAgIHslIGlmIHRhYmxlcm93bG9vcC5jb2xfZmlyc3QgJX0NCiAgICAgIEZpcnN0IGNvbHVtbjoge3sgaXRlbS52YXJpYWJsZSB9fQ0KICAgIHslIGVsc2UgJX0NCiAgICAgIERpZmZlcmVudCBjb2x1bW46IHt7IGl0ZW0udmFyaWFibGUgfX0NCiAgICB7JSBlbmRpZiAlfQ0KICB7JSBlbmR0YWJsZXJvdyAlfQ0KPC9wPg0K]]></data>
	</file>
	<file>
	  <filename>/samples/lisp.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGRlZnVuIHByb21wdC1mb3ItY2QgKCkNCiAgICJQcm9tcHRzDQogICAgZm9yIENEIg0KICAgKHByb21wdC1yZWFkICJUaXRsZSIgMS41MyAxIDIvNCAxLjcgMS43ZTAgMi45RS00ICs0MiAtNyAjYjAwMSAjYjAwMS8xMDAgI283NzcgI083NzcgI3hhYmM1NSAjYygwIC01LjYpKQ0KICAgKHByb21wdC1yZWFkICJBcnRpc3QiICZyZXN0KQ0KICAgKG9yIChwYXJzZS1pbnRlZ2VyIChwcm9tcHQtcmVhZCAiUmF0aW5nIikgOmp1bmstYWxsb3dlZCB0KSAwKQ0KICAoaWYgeCAoZm9ybWF0IHQgInllcyIpIChmb3JtYXQgdCAibm8iIG5pbCkgO2FuZCBoZXJlIGNvbW1lbnQNCiAgKSAweEZGTEwgLTIzdWxsDQogIDs7IHNlY29uZCBsaW5lIGNvbW1lbnQNCiAgJygrIDEgMikNCiAgKGRlZnZhciAqbGluZXMqKSAgICAgICAgICAgICAgICA7IGxpc3Qgb2YgYWxsIGxpbmVzDQogIChwb3NpdGlvbi1pZi1ub3QgIydzeXM6OndoaXRlc3BhY2VwIGxpbmUgOnN0YXJ0IGJlZykpDQogIChxdW90ZSAocHJpdmV0IDEgMiAzKSkNCiAgJyhoZWxsbyB3b3JsZCkNCiAgKCogNSA3KQ0KICAoMSAyIDM0IDUpDQogICg6dXNlICJhYWFhIikNCiAgKGxldCAoKHggMTApICh5IDIwKSkNCiAgICAocHJpbnQgKCsgeCB5KSkNCiAgKSBMQW1iRGENCg0KICAiYXNkYWRcMGVxd2VxZSI=]]></data>
	</file>
	<file>
	  <filename>/samples/livescript.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBEZWZpbmVzIGFuIGVkaXRpbmcgbW9kZSBmb3IgW0FjZV0oaHR0cDovL2FjZS5hamF4Lm9yZykuDQojDQojIE9wZW4gW3Rlc3QvYWNlLmh0bWxdKC4uL3Rlc3QvYWNlLmh0bWwpIHRvIHRlc3QuDQoNCnJlcXVpcmUsIGV4cG9ydHMsIG1vZHVsZSA8LSEgZGVmaW5lIFxhY2UvbW9kZS9scw0KDQppZGVudGlmaWVyID0gLyg/IVtcZFxzXSlbJFx3XHhBQS1cdUZGRENdKD86KD8hXHMpWyRcd1x4QUEtXHVGRkRDXXwtW0EtWmEtel0pKi8kDQoNCmV4cG9ydHMuTW9kZSA9IGNsYXNzIExpdmVTY3JpcHRNb2RlIGV4dGVuZHMgcmVxdWlyZShcYWNlL21vZGUvdGV4dClNb2RlDQogIC0+DQogICAgQCR0b2tlbml6ZXIgPQ0KICAgICAgbmV3IChyZXF1aXJlIFxhY2UvdG9rZW5pemVyKVRva2VuaXplciBMaXZlU2NyaXB0TW9kZS5SdWxlcw0KICAgIGlmIHJlcXVpcmUgXGFjZS9tb2RlL21hdGNoaW5nX2JyYWNlX291dGRlbnQNCiAgICAgIEAkb3V0ZGVudCA9IG5ldyB0aGF0Lk1hdGNoaW5nQnJhY2VPdXRkZW50DQoNCiAgaW5kZW50ZXIgPSAvLyAoPw0KICAgIDogWyh7Wz06XQ0KICAgIHwgWy1+XT4NCiAgICB8IFxiICg/OiBlKD86bHNlfHhwb3J0KSB8IGQoPzpvfGVmYXVsdCkgfCB0KD86cnl8aGVuKSB8IGZpbmFsbHkgfA0KICAgICAgICAgICAgIGltcG9ydCAoPzpccyogYWxsKT8gfCBjb25zdCB8IHZhciB8DQogICAgICAgICAgICAgbGV0IHwgbmV3IHwgY2F0Y2ggKD86XHMqICNpZGVudGlmaWVyKT8gKQ0KICApIFxzKiAkIC8vDQoNCiAgZ2V0TmV4dExpbmVJbmRlbnQ6IChzdGF0ZSwgbGluZSwgdGFiKSAtPg0KICAgIGluZGVudCAgID0gQCRnZXRJbmRlbnQgbGluZQ0KICAgIHt0b2tlbnN9ID0gQCR0b2tlbml6ZXIuZ2V0TGluZVRva2VucyBsaW5lLCBzdGF0ZQ0KICAgIHVubGVzcyB0b2tlbnMubGVuZ3RoIGFuZCB0b2tlbnNbKi0xXXR5cGUgaXMgXGNvbW1lbnQNCiAgICAgIGluZGVudCArPSB0YWIgaWYgc3RhdGUgaXMgXHN0YXJ0IGFuZCBpbmRlbnRlci50ZXN0IGxpbmUNCiAgICBpbmRlbnQNCg0KICB0b2dnbGVDb21tZW50TGluZXM6IChzdGF0ZSwgZG9jLCBzdGFydFJvdywgZW5kUm93KSAtPg0KICAgIGNvbW1lbnQgPSAvXihccyopIy87IHJhbmdlID0gbmV3IChyZXF1aXJlIFxhY2UvcmFuZ2UpUmFuZ2UgMCAwIDAgMA0KICAgIGZvciBpIGZyb20gc3RhcnRSb3cgdG8gZW5kUm93DQogICAgICBpZiBvdXQgPSBjb21tZW50LnRlc3QgbGluZSA9IGRvYy5nZXRMaW5lIGkNCiAgICAgIHRoZW4gbGluZS49cmVwbGFjZSBjb21tZW50LCBcJDENCiAgICAgIGVsc2UgbGluZS49cmVwbGFjZSAvXlxzKi8gICBcJCYjDQogICAgICByYW5nZS5lbmQucm93ID0gcmFuZ2Uuc3RhcnQucm93ID0gaQ0KICAgICAgcmFuZ2UuZW5kLmNvbHVtbiA9IGxpbmUubGVuZ3RoICsgMQ0KICAgICAgZG9jLnJlcGxhY2UgcmFuZ2UsIGxpbmUNCiAgICAxIC0gb3V0ICogMg0KDQogIGNoZWNrT3V0ZGVudDogKHN0YXRlLCBsaW5lLCBpbnB1dCkgLT4gQCRvdXRkZW50P2NoZWNrT3V0ZGVudCBsaW5lLCBpbnB1dA0KDQogIGF1dG9PdXRkZW50OiAoc3RhdGUsIGRvYywgcm93KSAtPiBAJG91dGRlbnQ/YXV0b091dGRlbnQgZG9jLCByb3cNCg0KIyMjIEhpZ2hsaWdodCBSdWxlcw0KDQprZXl3b3JkZW5kID0gLyg/IVskXHddfC1bQS1aYS16XXxccyo6KD8hWzo9XSkpLyQNCnN0cmluZ2ZpbGwgPSB0b2tlbjogXHN0cmluZywgcmVnZXg6ICcuKycNCg0KTGl2ZVNjcmlwdE1vZGUuUnVsZXMgPQ0KICBzdGFydDoNCiAgICAqIHRva2VuOiBca2V5d29yZA0KICAgICAgcmVnZXg6IC8vKD8NCiAgICAgICAgOnQoPzpoKD86aXN8cm93fGVuKXxyeXx5cGVvZiE/KQ0KICAgICAgICB8Yyg/Om9uKD86dGludWV8c3QpfGEoPzpzZXx0Y2gpfGxhc3MpDQogICAgICAgIHxpKD86big/OnN0YW5jZW9mKT98bXAoPzpvcnQoPzpccythbGwpP3xsZW1lbnRzKXxbZnNdKQ0KICAgICAgICB8ZCg/OmUoPzpmYXVsdHxsZXRlfGJ1Z2dlcil8bykNCiAgICAgICAgfGYoPzpvcig/OlxzK293bik/fGluYWxseXx1bmN0aW9uKQ0KICAgICAgICB8cyg/OnVwZXJ8d2l0Y2gpDQogICAgICAgIHxlKD86bHNlfHgoPzp0ZW5kc3xwb3J0KXx2YWwpDQogICAgICAgIHxhKD86bmR8cmd1bWVudHMpDQogICAgICAgIHxuKD86ZXd8b3QpDQogICAgICAgIHx1big/Omxlc3N8dGlsKQ0KICAgICAgICB8dyg/OmhpbGV8aXRoKQ0KICAgICAgICB8b1tmcl18cmV0dXJufGJyZWFrfGxldHx2YXJ8bG9vcA0KICAgICAgKS8vJCArIGtleXdvcmRlbmQNCg0KICAgICogdG9rZW46IFxjb25zdGFudC5sYW5ndWFnZQ0KICAgICAgcmVnZXg6ICcoPzp0cnVlfGZhbHNlfHllc3xub3xvbnxvZmZ8bnVsbHx2b2lkfHVuZGVmaW5lZCknICsga2V5d29yZGVuZA0KDQogICAgKiB0b2tlbjogXGludmFsaWQuaWxsZWdhbA0KICAgICAgcmVnZXg6ICcoPw0KICAgICAgICA6cCg/OmFja2FnZXxyKD86aXZhdGV8b3RlY3RlZCl8dWJsaWMpDQogICAgICAgIHxpKD86bXBsZW1lbnRzfG50ZXJmYWNlKQ0KICAgICAgICB8ZW51bXxzdGF0aWN8eWllbGQNCiAgICAgICknICsga2V5d29yZGVuZA0KDQogICAgKiB0b2tlbjogXGxhbmd1YWdlLnN1cHBvcnQuY2xhc3MNCiAgICAgIHJlZ2V4OiAnKD8NCiAgICAgICAgOlIoPzplKD86Z0V4cHxmZXJlbmNlRXJyb3IpfGFuZ2VFcnJvcikNCiAgICAgICAgfFMoPzp0cmluZ3x5bnRheEVycm9yKQ0KICAgICAgICB8RSg/OnJyb3J8dmFsRXJyb3IpDQogICAgICAgIHxBcnJheXxCb29sZWFufERhdGV8RnVuY3Rpb258TnVtYmVyfE9iamVjdHxUeXBlRXJyb3J8VVJJRXJyb3INCiAgICAgICknICsga2V5d29yZGVuZA0KDQogICAgKiB0b2tlbjogXGxhbmd1YWdlLnN1cHBvcnQuZnVuY3Rpb24NCiAgICAgIHJlZ2V4OiAnKD8NCiAgICAgICAgOmlzKD86TmFOfEZpbml0ZSkNCiAgICAgICAgfHBhcnNlKD86SW50fEZsb2F0KQ0KICAgICAgICB8TWF0aHxKU09ODQogICAgICAgIHwoPzplbnxkZSljb2RlVVJJKD86Q29tcG9uZW50KT8NCiAgICAgICknICsga2V5d29yZGVuZA0KDQogICAgKiB0b2tlbjogXHZhcmlhYmxlLmxhbmd1YWdlDQogICAgICByZWdleDogJyg/OnQoPzpoYXR8aWx8byl8Zig/OnJvbXxhbGx0aHJvdWdoKXxpdHxieXxlKScgKyBrZXl3b3JkZW5kDQoNCiAgICAqIHRva2VuOiBcaWRlbnRpZmllcg0KICAgICAgcmVnZXg6IGlkZW50aWZpZXIgKyAvXHMqOig/IVs6PV0pLyQNCg0KICAgICogdG9rZW46IFx2YXJpYWJsZQ0KICAgICAgcmVnZXg6IGlkZW50aWZpZXINCg0KICAgICogdG9rZW46IFxrZXl3b3JkLm9wZXJhdG9yDQogICAgICByZWdleDogLyg/OlwuezN9fFxzK1w/KS8kDQoNCiAgICAqIHRva2VuOiBca2V5d29yZC52YXJpYWJsZQ0KICAgICAgcmVnZXg6IC8oPzpAK3w6OnxcLlwuKS8kDQogICAgICBuZXh0IDogXGtleQ0KDQogICAgKiB0b2tlbjogXGtleXdvcmQub3BlcmF0b3INCiAgICAgIHJlZ2V4OiAvXC5ccyovJA0KICAgICAgbmV4dCA6IFxrZXkNCg0KICAgICogdG9rZW46IFxzdHJpbmcNCiAgICAgIHJlZ2V4OiAvXFxcU1teXHMsOyl9XF1dKi8kDQoNCiAgICAqIHRva2VuOiBcc3RyaW5nLmRvYw0KICAgICAgcmVnZXg6IFwnJycNCiAgICAgIG5leHQgOiBccWRvYw0KDQogICAgKiB0b2tlbjogXHN0cmluZy5kb2MNCiAgICAgIHJlZ2V4OiBcIiIiDQogICAgICBuZXh0IDogXHFxZG9jDQoNCiAgICAqIHRva2VuOiBcc3RyaW5nDQogICAgICByZWdleDogXCcNCiAgICAgIG5leHQgOiBccXN0cmluZw0KDQogICAgKiB0b2tlbjogXHN0cmluZw0KICAgICAgcmVnZXg6IFwiDQogICAgICBuZXh0IDogXHFxc3RyaW5nDQoNCiAgICAqIHRva2VuOiBcc3RyaW5nDQogICAgICByZWdleDogXGANCiAgICAgIG5leHQgOiBcanMNCg0KICAgICogdG9rZW46IFxzdHJpbmcNCiAgICAgIHJlZ2V4OiAnPFxcWycNCiAgICAgIG5leHQgOiBcd29yZHMNCg0KICAgICogdG9rZW46IFxzdHJpbmcucmVnZXgNCiAgICAgIHJlZ2V4OiBcLy8NCiAgICAgIG5leHQgOiBcaGVyZWdleA0KDQogICAgKiB0b2tlbjogXGNvbW1lbnQuZG9jDQogICAgICByZWdleDogJy9cXConDQogICAgICBuZXh0IDogXGNvbW1lbnQNCg0KICAgICogdG9rZW46IFxjb21tZW50DQogICAgICByZWdleDogJyMuKicNCg0KICAgICogdG9rZW46IFxzdHJpbmcucmVnZXgNCiAgICAgIHJlZ2V4OiAvLw0KICAgICAgICAvKD86IFteIFsgLyBcbiBcXCBdKg0KICAgICAgICAgICg/OiAoPzogXFwuDQogICAgICAgICAgICAgICAgfCBcWyBbXlxdXG5cXF0qICg/OlxcLlteXF1cblxcXSopKiBcXQ0KICAgICAgICAgICAgICApIFteIFsgLyBcbiBcXCBdKg0KICAgICAgICAgICkqDQogICAgICAgICkvIFtnaW15JF17MCw0fQ0KICAgICAgLy8kDQogICAgICBuZXh0IDogXGtleQ0KDQogICAgKiB0b2tlbjogXGNvbnN0YW50Lm51bWVyaWMNCiAgICAgIHJlZ2V4OiAnKD86MHhbXFxkYS1mQS1GXVtcXGRhLWZBLUZfXSoNCiAgICAgICAgICAgICAgICB8KD86WzItOV18WzEyXVxcZHwzWzAtNl0pcltcXGRhLXpBLVpdW1xcZGEtekEtWl9dKg0KICAgICAgICAgICAgICAgIHwoPzpcXGRbXFxkX10qKD86XFwuXFxkW1xcZF9dKik/fFxcLlxcZFtcXGRfXSopDQogICAgICAgICAgICAgICAgICg/OmVbKy1dP1xcZFtcXGRfXSopP1tcXHckXSopJw0KDQogICAgKiB0b2tlbjogXGxwYXJlbg0KICAgICAgcmVnZXg6ICdbKHtbXScNCg0KICAgICogdG9rZW46IFxycGFyZW4NCiAgICAgIHJlZ2V4OiAnWyl9XFxdXScNCiAgICAgIG5leHQgOiBca2V5DQoNCiAgICAqIHRva2VuOiBca2V5d29yZC5vcGVyYXRvcg0KICAgICAgcmVnZXg6IFxcXFMrDQoNCiAgICAqIHRva2VuOiBcdGV4dA0KICAgICAgcmVnZXg6IFxcXHMrDQoNCiAgaGVyZWdleDoNCiAgICAqIHRva2VuOiBcc3RyaW5nLnJlZ2V4DQogICAgICByZWdleDogJy4qPy8vW2dpbXkkP117MCw0fScNCiAgICAgIG5leHQgOiBcc3RhcnQNCiAgICAqIHRva2VuOiBcc3RyaW5nLnJlZ2V4DQogICAgICByZWdleDogJ1xccyojeycNCiAgICAqIHRva2VuOiBcY29tbWVudC5yZWdleA0KICAgICAgcmVnZXg6ICdcXHMrKD86Iy4qKT8nDQogICAgKiB0b2tlbjogXHN0cmluZy5yZWdleA0KICAgICAgcmVnZXg6ICdcXFMrJw0KDQogIGtleToNCiAgICAqIHRva2VuOiBca2V5d29yZC5vcGVyYXRvcg0KICAgICAgcmVnZXg6ICdbLj9AIV0rJw0KICAgICogdG9rZW46IFxpZGVudGlmaWVyDQogICAgICByZWdleDogaWRlbnRpZmllcg0KICAgICAgbmV4dCA6IFxzdGFydA0KICAgICogdG9rZW46IFx0ZXh0DQogICAgICByZWdleDogJy4nDQogICAgICBuZXh0IDogXHN0YXJ0DQoNCiAgY29tbWVudDoNCiAgICAqIHRva2VuOiBcY29tbWVudC5kb2MNCiAgICAgIHJlZ2V4OiAnLio/XFwqLycNCiAgICAgIG5leHQgOiBcc3RhcnQNCiAgICAqIHRva2VuOiBcY29tbWVudC5kb2MNCiAgICAgIHJlZ2V4OiAnLisnDQoNCiAgcWRvYzoNCiAgICB0b2tlbjogXHN0cmluZw0KICAgIHJlZ2V4OiAiLio/JycnIg0KICAgIG5leHQgOiBca2V5DQogICAgc3RyaW5nZmlsbA0KDQogIHFxZG9jOg0KICAgIHRva2VuOiBcc3RyaW5nDQogICAgcmVnZXg6ICcuKj8iIiInDQogICAgbmV4dCA6IFxrZXkNCiAgICBzdHJpbmdmaWxsDQoNCiAgcXN0cmluZzoNCiAgICB0b2tlbjogXHN0cmluZw0KICAgIHJlZ2V4OiAvW15cXCddKig/OlxcLlteXFwnXSopKicvJA0KICAgIG5leHQgOiBca2V5DQogICAgc3RyaW5nZmlsbA0KDQogIHFxc3RyaW5nOg0KICAgIHRva2VuOiBcc3RyaW5nDQogICAgcmVnZXg6IC9bXlxcIl0qKD86XFwuW15cXCJdKikqIi8kDQogICAgbmV4dCA6IFxrZXkNCiAgICBzdHJpbmdmaWxsDQoNCiAganM6DQogICAgdG9rZW46IFxzdHJpbmcNCiAgICByZWdleDogL1teXFxgXSooPzpcXC5bXlxcYF0qKSpgLyQNCiAgICBuZXh0IDogXGtleQ0KICAgIHN0cmluZ2ZpbGwNCg0KICB3b3JkczoNCiAgICB0b2tlbjogXHN0cmluZw0KICAgIHJlZ2V4OiAnLio/XFxdPicNCiAgICBuZXh0IDogXGtleQ0KICAgIHN0cmluZ2ZpbGwNCg==]]></data>
	</file>
	<file>
	  <filename>/samples/logiql.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gYW5jZXN0b3JzDQpwYXJlbnRvZigiZG91Z2xhcyIsICJqb2huIikuDQpwYXJlbnRvZigiam9obiIsICJib2IiKS4NCnBhcmVudG9mKCJib2IiLCAiZWJib24iKS4NCg0KcGFyZW50b2YoImRvdWdsYXMiLCAiamFuZSIpLg0KcGFyZW50b2YoImphbmUiLCAiamFuIikuDQoNCmFuY2VzdG9yb2YoQSwgQikgPC0gcGFyZW50b2YoQSwgQikuDQphbmNlc3Rvcm9mKEEsIEMpIDwtIGFuY2VzdG9yb2YoQSwgQiksIHBhcmVudG9mKEIsQykuDQoNCmdyYW5kcGFyZW50b2YoQSwgQikgPC0gcGFyZW50b2YoQSwgQyksIHBhcmVudG9mKEMsIEIpLg0KDQpjb3VzaW5zKEEsQikgPC0gZ3JhbmRwYXJlbnRvZihDLEEpLCBncmFuZHBhcmVudG9mKEMsQikuDQoNCnBhcmVudG9mW2BhcmddKEEsIEIpIC0+IGludFszMl0oQSksICFzdHJpbmcoQiku]]></data>
	</file>
	<file>
	  <filename>/samples/lsl.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoNCiAgICBUZXN0aW5nIHN5bnRheCBoaWdobGlnaHRpbmcNCiAgICBvZiBBY2UgRWRpdG9yDQogICAgZm9yIHRoZSBMaW5kZW4gU2NyaXB0aW5nIExhbmd1YWdlDQoqLw0KDQppbnRlZ2VyIHNvbWVJbnROb3JtYWwgICAgICAgPSAzNjcyOw0KaW50ZWdlciBzb21lSW50SGV4ICAgICAgICAgID0gMHgwMDAwMDAwMDsNCmludGVnZXIgc29tZUludE1hdGggICAgICAgICA9IFBJX0JZX1RXTzsNCg0KaW50ZWdlciBldmVudCAgICAgICAgICAgICAgID0gNTY3MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmltcGxlbWVudGVkIHJlc2VydmVkIGtleXdvcmQhDQoNCmtleSBzb21lS2V5VGV4dHVyZSAgICAgICAgICA9IFRFWFRVUkVfREVGQVVMVDsNCnN0cmluZyBzb21lU3RyaW5nU3BlY2lhbCAgICA9IEVPRjsNCg0Kc29tZV91c2VyX2RlZmluZWRfZnVuY3Rpb25fd2l0aG91dF9yZXR1cm5fdHlwZShzdHJpbmcgaW5wdXRBc1N0cmluZykNCnsNCiAgICBsbFNheShQVUJMSUNfQ0hBTk5FTCwgaW5wdXRBc1N0cmluZyk7DQp9DQoNCnN0cmluZyB1c2VyX2RlZmluZWRfZnVuY3Rpb25fcmV0dXJuaW5nX2Ffc3RyaW5nKGtleSBpbnB1dEFzS2V5KQ0Kew0KICAgIHJldHVybiAoc3RyaW5nKWlucHV0QXNLZXk7DQp9DQoNCmRlZmF1bHQNCnsNCiAgICBzdGF0ZV9lbnRyeSgpDQogICAgew0KICAgICAgICBrZXkgc29tZUtleSA9IE5VTExfS0VZOw0KICAgICAgICBzb21lS2V5ID0gbGxHZXRPd25lcigpOw0KDQogICAgICAgIHN0cmluZyBzb21lU3RyaW5nID0gdXNlcl9kZWZpbmVkX2Z1bmN0aW9uX3JldHVybmluZ19hX3N0cmluZyhzb21lS2V5KTsNCg0KICAgICAgICBzb21lX3VzZXJfZGVmaW5lZF9mdW5jdGlvbl93aXRob3V0X3JldHVybl90eXBlKHNvbWVTdHJpbmcpOw0KICAgIH0NCg0KICAgIHRvdWNoX3N0YXJ0KGludGVnZXIgbnVtX2RldGVjdGVkKQ0KICAgIHsNCiAgICAgICAgbGlzdCBhZ2VudHNJblJlZ2lvbiA9IGxsR2V0QWdlbnRMaXN0KEFHRU5UX0xJU1RfUkVHSU9OLCBbXSk7DQogICAgICAgIGludGVnZXIgbnVtT2ZBZ2VudHMgPSBsbEdldExpc3RMZW5ndGgoYWdlbnRzSW5SZWdpb24pOw0KDQogICAgICAgIGludGVnZXIgaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHRzIHRvIDANCiAgICAgICAgZm9yICg7IGluZGV4IDw9IG51bU9mQWdlbnRzIC0gMTsgaW5kZXgrKykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGVhY2ggYWdlbnQgaW4gcmVnaW9uDQogICAgICAgIHsNCiAgICAgICAgICAgIGxsUmVnaW9uU2F5VG8obGxMaXN0MktleShhZ2VudHNJblJlZ2lvbiwgaW5kZXgpLCBQVUJMSUNfQ0hBTk5FTCwgIkhlbGxvLCBBdmF0YXIhIik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB0b3VjaF9lbmQoaW50ZWdlciBudW1fZGV0ZWN0ZWQpDQogICAgew0KICAgICAgICBzb21lSW50Tm9ybWFsICAgICAgID0gMzY3MjsNCiAgICAgICAgc29tZUludEhleCAgICAgICAgICA9IDB4MDAwMDAwMDA7DQogICAgICAgIHNvbWVJbnRNYXRoICAgICAgICAgPSBQSV9CWV9UV087DQoNCiAgICAgICAgZXZlbnQgICAgICAgICAgICAgICA9IDU2NzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5pbXBsZW1lbnRlZCByZXNlcnZlZCBrZXl3b3JkIQ0KDQogICAgICAgIHNvbWVLZXlUZXh0dXJlICAgICAgPSBURVhUVVJFX0RFRkFVTFQ7DQogICAgICAgIHNvbWVTdHJpbmdTcGVjaWFsICAgPSBFT0Y7DQoNCiAgICAgICAgbGxDbG91ZChaRVJPX1ZFQ1RPUik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZCBkZXByZWNhdGVkIGZ1bmN0aW9uIQ0KDQogICAgICAgIGxsV2hpc3BlcihQVUJMSUNfQ0hBTk5FTCwgIkxlYXZpbmcgXCJkZWZhdWx0XCIgbm93Li4uIik7DQogICAgICAgIHN0YXRlIG90aGVyOw0KICAgIH0NCn0NCg0Kc3RhdGUgb3RoZXINCnsNCiAgICBzdGF0ZV9lbnRyeSgpDQogICAgew0KICAgICAgICBsbFdoaXNwZXIoUFVCTElDX0NIQU5ORUwsICJFbnRlcmVkIFwic3RhdGUgb3RoZXJcIiwgcmV0dXJuaW5nIHRvIFwiZGVmYXVsdFwiIGFnYWluLi4uIik7DQogICAgICAgIHN0YXRlIGRlZmF1bHQ7DQogICAgfQ0KfQ0K]]></data>
	</file>
	<file>
	  <filename>/samples/lua.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LS1bWy0tDQpudW1fYXJncyB0YWtlcyBpbiA1LjEgYnl0ZSBjb2RlIGFuZCBleHRyYWN0cyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cw0KZnJvbSBpdHMgZnVuY3Rpb24gaGVhZGVyLg0KLS1dXS0tDQoNCmZ1bmN0aW9uIGludCh0KQ0KCXJldHVybiB0OmJ5dGUoMSkrdDpieXRlKDIpKjB4MTAwK3Q6Ynl0ZSgzKSoweDEwMDAwK3Q6Ynl0ZSg0KSoweDEwMDAwMDANCmVuZA0KDQpmdW5jdGlvbiBudW1fYXJncyhmdW5jKQ0KCWxvY2FsIGR1bXAgPSBzdHJpbmcuZHVtcChmdW5jKQ0KCWxvY2FsIG9mZnNldCwgY3Vyc29yID0gaW50KGR1bXA6c3ViKDEzKSksIG9mZnNldCArIDI2DQoJLS1HZXQgdGhlIHBhcmFtcyBhbmQgdmFyIGZsYWcgKHdoZXRoZXIgdGhlcmUncyBhIC4uLiBpbiB0aGUgcGFyYW0pDQoJcmV0dXJuIGR1bXA6c3ViKGN1cnNvcik6Ynl0ZSgpLCBkdW1wOnN1YihjdXJzb3IrMSk6Ynl0ZSgpDQplbmQNCg0KLS0gVXNhZ2U6DQpudW1fYXJncyhmdW5jdGlvbihhLGIsYyxkLCAuLi4pIGVuZCkgLS0gcmV0dXJuIDQsIDcNCg0KLS0gUHl0aG9uIHN0eWxlZCBzdHJpbmcgZm9ybWF0IG9wZXJhdG9yDQpsb2NhbCBnbSA9IGRlYnVnLmdldG1ldGF0YWJsZSgiIikNCg0KZ20uX19tb2Q9ZnVuY3Rpb24oc2VsZiwgb3RoZXIpDQogICAgaWYgdHlwZShvdGhlcikgfj0gInRhYmxlIiB0aGVuIG90aGVyID0ge290aGVyfSBlbmQNCiAgICBmb3IgaSx2IGluIGlwYWlycyhvdGhlcikgZG8gb3RoZXJbaV0gPSB0b3N0cmluZyh2KSBlbmQNCiAgICByZXR1cm4gc2VsZjpmb3JtYXQodW5wYWNrKG90aGVyKSkNCmVuZA0KDQpwcmludChbPT09Ww0KICAgIGJsYWggYmxhaCAlcywgKCVkICVkKQ0KXT09PV0leyJibGFoIiwgbnVtX2FyZ3MoaW50KX0pDQoNCi0tWz1bLS0NCnRhYmxlLm1heG4gaXMgZGVwcmVjYXRlZCwgdXNlICMgaW5zdGVhZC4NCi0tXT1dLS0NCnByaW50KHRhYmxlLm1heG57MSwyLFs0XT00LFs4XT04KSAtLSBvdXRwdXRzIDggaW5zdGVhZCBvZiAyDQoNCnByaW50KDUgLS1bWyBibGFoIF1dKQ==]]></data>
	</file>
	<file>
	  <filename>/samples/luapage.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiINCiAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCjxodG1sPg0KPCUgLS1bWy0tDQogICAgaW5kZXgubHAgZnJvbSB0aGUgS2VwbGVyIFByb2plY3QncyBMdWFEb2MgSFRNTCBkb2NsZXQuDQogICAgaHR0cDovL2tlcGxlcnByb2plY3QuZ2l0aHViLmNvbS9sdWFkb2MvDQotLV1dICU+DQo8aGVhZD4NCiAgICA8dGl0bGU+UmVmZXJlbmNlPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9IjwlPWx1YWRvYy5kb2NsZXQuaHRtbC5saW5rKCJsdWFkb2MuY3NzIiklPiIgdHlwZT0idGV4dC9jc3MiIC8+DQoJPCEtLW1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLy0tPg0KPC9oZWFkPg0KDQo8Ym9keT4NCjxkaXYgaWQ9ImNvbnRhaW5lciI+DQoNCjxkaXYgaWQ9InByb2R1Y3QiPg0KCTxkaXYgaWQ9InByb2R1Y3RfbG9nbyI+PC9kaXY+DQoJPGRpdiBpZD0icHJvZHVjdF9uYW1lIj48YmlnPjxiPjwvYj48L2JpZz48L2Rpdj4NCgk8ZGl2IGlkPSJwcm9kdWN0X2Rlc2NyaXB0aW9uIj48L2Rpdj4NCjwvZGl2PiA8IS0tIGlkPSJwcm9kdWN0IiAtLT4NCg0KPGRpdiBpZD0ibWFpbiI+DQoNCjxkaXYgaWQ9Im5hdmlnYXRpb24iPg0KPCU9bHVhZG9jLmRvY2xldC5odG1sLmluY2x1ZGUoIm1lbnUubHAiLCB7IGRvYz1kb2MgfSklPg0KDQo8L2Rpdj4gPCEtLSBpZD0ibmF2aWdhdGlvbiIgLS0+DQoNCjxkaXYgaWQ9ImNvbnRlbnQiPg0KDQoNCjwlaWYgbm90IG9wdGlvbnMubm9tb2R1bGVzIGFuZCAjZG9jLm1vZHVsZXMgPiAwIHRoZW4lPg0KPGgyPk1vZHVsZXM8L2gyPg0KPHRhYmxlIGNsYXNzPSJtb2R1bGVfbGlzdCI+DQo8IS0tPHRyPjx0ZCBjb2xzcGFuPSIyIj5Nb2R1bGVzPC90ZD48L3RyPi0tPg0KPCVmb3IgXywgbW9kdWxlbmFtZSBpbiBpcGFpcnMoZG9jLm1vZHVsZXMpIGRvJT4NCgk8dHI+DQoJCTx0ZCBjbGFzcz0ibmFtZSI+PGEgaHJlZj0iPCU9bHVhZG9jLmRvY2xldC5odG1sLm1vZHVsZV9saW5rKG1vZHVsZW5hbWUsIGRvYyklPiI+PCU9bW9kdWxlbmFtZSU+PC9hPjwvdGQ+DQoJCTx0ZCBjbGFzcz0ic3VtbWFyeSI+PCU9ZG9jLm1vZHVsZXNbbW9kdWxlbmFtZV0uc3VtbWFyeSU+PC90ZD4NCgk8L3RyPg0KPCVlbmQlPg0KPC90YWJsZT4NCjwlZW5kJT4NCg0KDQoNCjwlaWYgbm90IG9wdGlvbnMubm9maWxlcyBhbmQgI2RvYy5maWxlcyA+IDAgdGhlbiU+DQo8aDI+RmlsZXM8L2gyPg0KPHRhYmxlIGNsYXNzPSJmaWxlX2xpc3QiPg0KPCEtLTx0cj48dGQgY29sc3Bhbj0iMiI+RmlsZXM8L3RkPjwvdHI+LS0+DQo8JWZvciBfLCBmaWxlcGF0aCBpbiBpcGFpcnMoZG9jLmZpbGVzKSBkbyU+DQoJPHRyPg0KCQk8dGQgY2xhc3M9Im5hbWUiPjxhIGhyZWY9IjwlPWx1YWRvYy5kb2NsZXQuaHRtbC5maWxlX2xpbmsoZmlsZXBhdGgpJT4iPjwlPWZpbGVwYXRoJT48L2E+PC90ZD4NCgkJPHRkIGNsYXNzPSJzdW1tYXJ5Ij48L3RkPg0KCTwvdHI+DQo8JWVuZCU+DQo8L3RhYmxlPg0KPCVlbmQlPg0KDQo8L2Rpdj4gPCEtLSBpZD0iY29udGVudCIgLS0+DQoNCjwvZGl2PiA8IS0tIGlkPSJtYWluIiAtLT4NCg0KPGRpdiBpZD0iYWJvdXQiPg0KCTxwPjxhIGhyZWY9Imh0dHA6Ly92YWxpZGF0b3IudzMub3JnL2NoZWNrP3VyaT1yZWZlcmVyIj48aW1nIHNyYz0iaHR0cDovL3d3dy53My5vcmcvSWNvbnMvdmFsaWQteGh0bWwxMCIgYWx0PSJWYWxpZCBYSFRNTCAxLjAhIiBoZWlnaHQ9IjMxIiB3aWR0aD0iODgiIC8+PC9hPjwvcD4NCjwvZGl2PiA8IS0tIGlkPSJhYm91dCIgLS0+DQoNCjwvZGl2PiA8IS0tIGlkPSJjb250YWluZXIiIC0tPgkNCjwvYm9keT4NCjwvaHRtbD4NCg==]]></data>
	</file>
	<file>
	  <filename>/samples/lucene.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KHRpdGxlOiJmb28gYmFyIiBBTkQgYm9keToicXVpY2sgZm94IikgT1IgdGl0bGU6Zm94]]></data>
	</file>
	<file>
	  <filename>/samples/makefile.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LlBIT05ZOiAgICBhcGYgZXh0IHdvcmtlciBtb2RlIHRoZW1lIHBhY2thZ2UgdGVzdA0KDQpkZWZhdWx0OiBhcGYgd29ya2VyDQoNCnVwZGF0ZTogd29ya2VyDQoNCiMgcGFja2FnZXMgYXBmDQoNCiMgVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiBhIGNvbW1lbnQgXA0KYW5kIHRoaXMgaXMgc3RpbGwgcGFydCBvZiB0aGUgY29tbWVudCBcDQphcyBpcyB0aGlzLCBzaW5jZSBJIGtlZXAgZW5kaW5nIGVhY2ggbGluZSBcDQp3aXRoIGEgYmFja3NsYXNoIGNoYXJhY3Rlcg0KDQphcGY6DQogICAgY2Qgbm9kZV9tb2R1bGVzL3BhY2thZ2VyOyBub2RlIHBhY2thZ2UuanMgcHJvamVjdHMvYXBmX2Nsb3VkOS5hcHINCgljZCBub2RlX21vZHVsZXMvcGFja2FnZXI7IGNhdCBidWlsZC9hcGZfcmVsZWFzZS5qcyB8IHNlZCAncy9cKFwvXCpGSUxFSEVBRChcKS4qLy9nJyA+IC4uLy4uL3BsdWdpbnMtY2xpZW50L2xpYi5hcGYvd3d3L2FwZi1wYWNrYWdlZC9hcGZfcmVsZWFzZS5qcw0KDQojIHBhY2thZ2UgZGVidWcgdmVyc2lvbiBvZiBhcGYNCmFwZmRlYnVnOg0KCWNkIG5vZGVfbW9kdWxlcy9wYWNrYWdlci9wcm9qZWN0czsgY2F0IGFwZl9jbG91ZDkuYXByIHwgc2VkICdzLzxwOmRlZmluZSBuYW1lPVwiX19ERUJVR1wiIHZhbHVlPVwiMFwiIFwvPi88cDpkZWZpbmUgbmFtZT1cIl9fREVCVUdcIiB2YWx1ZT1cIjFcIiBcLz4vZycgPiBhcGZfY2xvdWQ5X2RlYnVnMi5hcHINCgljZCBub2RlX21vZHVsZXMvcGFja2FnZXIvcHJvamVjdHM7IGNhdCBhcGZfY2xvdWQ5X2RlYnVnMi5hcHIgfCBzZWQgJ3MvYXBmX3JlbGVhc2UvYXBmX2RlYnVnL2cnID4gYXBmX2Nsb3VkOV9kZWJ1Zy5hcHI7IHJtIGFwZl9jbG91ZDlfZGVidWcyLmFwcg0KCWNkIG5vZGVfbW9kdWxlcy9wYWNrYWdlcjsgbm9kZSBwYWNrYWdlLmpzIHByb2plY3RzL2FwZl9jbG91ZDlfZGVidWcuYXByDQoJY2Qgbm9kZV9tb2R1bGVzL3BhY2thZ2VyOyBjYXQgYnVpbGQvYXBmX2RlYnVnLmpzIHwgc2VkICdzL1woXC9cKkZJTEVIRUFEKFwpLipcL2FwZlwvXCguKlwpL1wxXDIvZycgPiAuLi8uLi9wbHVnaW5zLWNsaWVudC9saWIuYXBmL3d3dy9hcGYtcGFja2FnZWQvYXBmX2RlYnVnLmpzDQoNCiMgcGFja2FnZV9hcGYtLXRlbXBvcmFyeSBmaXggZm9yIG5vbi13b3JrZXJpbmcgaW5mcmENCnBhY2tfYXBmOg0KCW1rZGlyIC1wIGJ1aWxkL3NyYw0KCW12IHBsdWdpbnMtY2xpZW50L2xpYi5hcGYvd3d3L2FwZi1wYWNrYWdlZC9hcGZfcmVsZWFzZS5qcyBidWlsZC9zcmMvYXBmX3JlbGVhc2UuanMNCglub2RlIGJ1aWxkL3IuanMgLW8gbmFtZT0uL2J1aWxkL3NyYy9hcGZfcmVsZWFzZS5qcyBvdXQ9Li9wbHVnaW5zLWNsaWVudC9saWIuYXBmL3d3dy9hcGYtcGFja2FnZWQvYXBmX3JlbGVhc2UuanMgYmFzZVVybD0uDQoNCiMgbWFrZXMgYWNlOyBhdCB0aGUgbW9tZW50LCByZXF1aXJlcyBkcnlpY2VAMC40LjINCmFjZToNCgljZCBub2RlX21vZHVsZXMvYWNlOyBtYWtlIGNsZWFuIHByZV9idWlsZDsgLi9NYWtlZmlsZS5kcnlpY2UuanMgbWluaW1hbA0KDQoNCiMgcGFja2FnZXMgY29yZQ0KY29yZTogYWNlDQoJbWtkaXIgLXAgYnVpbGQvc3JjDQoJbm9kZSBidWlsZC9yLmpzIC1vIGJ1aWxkL2NvcmUuYnVpbGQuanMNCg0KIyBnZW5lcmF0ZXMgcGFja2VkIHRlbXBsYXRlDQpoZWxwZXI6IA0KCW5vZGUgYnVpbGQvcGFja2VkX2hlbHBlci5qcw0KDQpoZWxwZXJfY2xlYW46DQoJbWtkaXIgLXAgYnVpbGQvc3JjDQoJbm9kZSBidWlsZC9wYWNrZWRfaGVscGVyLmpzIDENCg0KIyBwYWNrYWdlcyBleHQNCmV4dDogDQoJbm9kZSBidWlsZC9yLmpzIC1vIGJ1aWxkL2FwcC5idWlsZC5qcw0KDQojIGNhbGxzIGRyeWljZSBvbiB3b3JrZXIgJiBwYWNrYWdlcyBpdA0Kd29ya2VyOiBwbHVnaW5zLWNsaWVudC9saWIuYWNlL3d3dy93b3JrZXIvd29ya2VyLWxhbmd1YWdlLmpzDQoNCnBsdWdpbnMtY2xpZW50L2xpYi5hY2Uvd3d3L3dvcmtlci93b3JrZXItbGFuZ3VhZ2UuanMgcGx1Z2lucy1jbGllbnQvbGliLmFjZS93d3cvd29ya2VyL3dvcmtlci1qYXZhc2NyaXB0LmpzIDogXA0KICAgICAgICAkKHdpbGRjYXJkIG5vZGVfbW9kdWxlcy9hY2UvKikgJCh3aWxkY2FyZCBub2RlX21vZHVsZXMvYWNlLyovKikgJCh3aWxkY2FyZCBub2RlX21vZHVsZXMvYWNlLyovKi9tb2RlLyopIFwNCiAgICAgICAgJCh3aWxkY2FyZCBwbHVnaW5zLWNsaWVudC9leHQubGFuZ3VhZ2UvKikgXA0KICAgICAgICAkKHdpbGRjYXJkIHBsdWdpbnMtY2xpZW50L2V4dC5sYW5ndWFnZS8qLyopIFwNCiAgICAgICAgJCh3aWxkY2FyZCBwbHVnaW5zLWNsaWVudC9leHQubGluZXJlcG9ydC8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0LmNvZGVjb21wbGV0ZS8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0LmNvZGVjb21wbGV0ZS8qLyopIFwNCiAgICAgICAgJCh3aWxkY2FyZCBwbHVnaW5zLWNsaWVudC9leHQuanNsYW5ndWFnZS8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0LmpzbGFuZ3VhZ2UvKi8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0LmNzc2xhbmd1YWdlLyopIFwNCiAgICAgICAgJCh3aWxkY2FyZCBwbHVnaW5zLWNsaWVudC9leHQuY3NzbGFuZ3VhZ2UvKi8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0Lmh0bWxsYW5ndWFnZS8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0Lmh0bWxsYW5ndWFnZS8qLyopIFwNCiAgICAgICAgJCh3aWxkY2FyZCBwbHVnaW5zLWNsaWVudC9leHQuanNpbmZlci8qKSBcDQogICAgICAgICQod2lsZGNhcmQgcGx1Z2lucy1jbGllbnQvZXh0LmpzaW5mZXIvKi8qKSBcDQogICAgICAgICQod2lsZGNhcmQgbm9kZV9tb2R1bGVzL3RyZWVodWdnZXIvbGliLyopIFwNCiAgICAgICAgJCh3aWxkY2FyZCBub2RlX21vZHVsZXMvdHJlZWh1Z2dlci9saWIvKi8qKSBcDQogICAgICAgICQod2lsZGNhcmQgbm9kZV9tb2R1bGVzL2FjZS9saWIvKikgXA0KICAgICAgICAkKHdpbGRjYXJkIG5vZGVfbW9kdWxlcy9hY2UvKi8qKSBcDQogICAgICAgIE1ha2VmaWxlLmRyeWljZS5qcw0KCW1rZGlyIC1wIHBsdWdpbnMtY2xpZW50L2xpYi5hY2Uvd3d3L3dvcmtlcg0KCXJtIC1yZiAvdG1wL2M5X3dvcmtlcl9idWlsZA0KCW1rZGlyIC1wIC90bXAvYzlfd29ya2VyX2J1aWxkL2V4dA0KCWxuIC1zIGBwd2RgL3BsdWdpbnMtY2xpZW50L2V4dC5sYW5ndWFnZSAvdG1wL2M5X3dvcmtlcl9idWlsZC9leHQvbGFuZ3VhZ2UNCglsbiAtcyBgcHdkYC9wbHVnaW5zLWNsaWVudC9leHQuY29kZWNvbXBsZXRlIC90bXAvYzlfd29ya2VyX2J1aWxkL2V4dC9jb2RlY29tcGxldGUNCglsbiAtcyBgcHdkYC9wbHVnaW5zLWNsaWVudC9leHQuanNsYW5ndWFnZSAvdG1wL2M5X3dvcmtlcl9idWlsZC9leHQvanNsYW5ndWFnZQ0KCWxuIC1zIGBwd2RgL3BsdWdpbnMtY2xpZW50L2V4dC5jc3NsYW5ndWFnZSAvdG1wL2M5X3dvcmtlcl9idWlsZC9leHQvY3NzbGFuZ3VhZ2UNCglsbiAtcyBgcHdkYC9wbHVnaW5zLWNsaWVudC9leHQuaHRtbGxhbmd1YWdlIC90bXAvYzlfd29ya2VyX2J1aWxkL2V4dC9odG1sbGFuZ3VhZ2UNCglsbiAtcyBgcHdkYC9wbHVnaW5zLWNsaWVudC9leHQubGluZXJlcG9ydCAvdG1wL2M5X3dvcmtlcl9idWlsZC9leHQvbGluZXJlcG9ydA0KCWxuIC1zIGBwd2RgL3BsdWdpbnMtY2xpZW50L2V4dC5saW5lcmVwb3J0X3BocCAvdG1wL2M5X3dvcmtlcl9idWlsZC9leHQvbGluZXJlcG9ydF9waHANCglub2RlIE1ha2VmaWxlLmRyeWljZS5qcyB3b3JrZXINCgljcCBub2RlX21vZHVsZXMvYWNlL2J1aWxkL3NyYy93b3JrZXIqIHBsdWdpbnMtY2xpZW50L2xpYi5hY2Uvd3d3L3dvcmtlcg0KDQpkZWZpbmUgDQoNCmlmZXENCg0Kb3ZlcnJpZGUNCg0KIyBjb3BpZXMgYnVpbHQgYWNlIG1vZGVzDQptb2RlOg0KCW1rZGlyIC1wIHBsdWdpbnMtY2xpZW50L2xpYi5hY2Uvd3d3L21vZGUNCgljcCBgZmluZCBub2RlX21vZHVsZXMvYWNlL2J1aWxkL3NyYyB8IGdyZXAgLUUgIm1vZGUtW2EtekEtWl8wLTldKy5qcyJgICBwbHVnaW5zLWNsaWVudC9saWIuYWNlL3d3dy9tb2RlDQoNCiMgY29waWVzIGJ1aWx0IGFjZSB0aGVtZXMNCnRoZW1lOg0KCW1rZGlyIC1wIHBsdWdpbnMtY2xpZW50L2xpYi5hY2Uvd3d3L3RoZW1lDQoJY3AgYGZpbmQgbm9kZV9tb2R1bGVzL2FjZS9idWlsZC9zcmMgfCBncmVwIC1FICJ0aGVtZS1bYS16QS1aXzAtOV0rLmpzImAgcGx1Z2lucy1jbGllbnQvbGliLmFjZS93d3cvdGhlbWUNCg0KZ3ppcF9zYWZlOg0KCWZvciBpIGluIGBscyAuL3BsdWdpbnMtY2xpZW50L2xpYi5wYWNrZWQvd3d3LyouanNgOyBkbyBcDQoJCWd6aXAgLTkgLXYgLWMgLXEgLWYgJCRpID4gJCRpLmd6IDsgXA0KCWRvbmUNCg0KZ3ppcDoNCglmb3IgaSBpbiBgbHMgLi9wbHVnaW5zLWNsaWVudC9saWIucGFja2VkL3d3dy8qLmpzYDsgZG8gXA0KCQlnemlwIC05IC12IC1xIC1mICQkaSA7IFwNCglkb25lDQoNCmM5Y29yZTogYXBmIGFjZSBjb3JlIHdvcmtlciBtb2RlIHRoZW1lDQogICAgDQpwYWNrYWdlX2NsZWFuOiBoZWxwZXJfY2xlYW4gYzljb3JlIGV4dA0KDQpwYWNrYWdlOiBoZWxwZXIgYzljb3JlIGV4dA0KDQp0ZXN0IGNoZWNrOg0KCXRlc3QvcnVuLXRlc3RzLnNoCQ==]]></data>
	</file>
	<file>
	  <filename>/samples/markdown.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QWNlIChBamF4Lm9yZyBDbG91ZDkgRWRpdG9yKQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpBY2UgaXMgYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC4gT3VyIGdvYWwgaXMgdG8gY3JlYXRlIGEgYnJvd3NlciBiYXNlZCBlZGl0b3IgdGhhdCBtYXRjaGVzIGFuZCBleHRlbmRzIHRoZSBmZWF0dXJlcywgdXNhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiBleGlzdGluZyBuYXRpdmUgZWRpdG9ycyBzdWNoIGFzIFRleHRNYXRlLCBWaW0gb3IgRWNsaXBzZS4gSXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbiBhbnkgd2ViIHBhZ2Ugb3IgSmF2YVNjcmlwdCBhcHBsaWNhdGlvbi4gQWNlIGlzIGRldmVsb3BlZCBhcyB0aGUgcHJpbWFyeSBlZGl0b3IgZm9yIFtDbG91ZDkgSURFXShodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20vKSBhbmQgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgTW96aWxsYSBTa3l3cml0ZXIgKEJlc3BpbikgUHJvamVjdC4NCg0KRmVhdHVyZXMNCi0tLS0tLS0tDQoNCiogU3ludGF4IGhpZ2hsaWdodGluZw0KKiBBdXRvbWF0aWMgaW5kZW50IGFuZCBvdXRkZW50DQoqIEFuIG9wdGlvbmFsIGNvbW1hbmQgbGluZQ0KKiBIYW5kbGVzIGh1Z2UgZG9jdW1lbnRzICgxMDAsMDAwIGxpbmVzIGFuZCBtb3JlIGFyZSBubyBwcm9ibGVtKQ0KKiBGdWxseSBjdXN0b21pemFibGUga2V5IGJpbmRpbmdzIGluY2x1ZGluZyBWSSBhbmQgRW1hY3MgbW9kZXMNCiogVGhlbWVzIChUZXh0TWF0ZSB0aGVtZXMgY2FuIGJlIGltcG9ydGVkKQ0KKiBTZWFyY2ggYW5kIHJlcGxhY2Ugd2l0aCByZWd1bGFyIGV4cHJlc3Npb25zDQoqIEhpZ2hsaWdodCBtYXRjaGluZyBwYXJlbnRoZXNlcw0KKiBUb2dnbGUgYmV0d2VlbiBzb2Z0IHRhYnMgYW5kIHJlYWwgdGFicw0KKiBEaXNwbGF5cyBoaWRkZW4gY2hhcmFjdGVycw0KKiBEcmFnIGFuZCBkcm9wIHRleHQgdXNpbmcgdGhlIG1vdXNlDQoqIExpbmUgd3JhcHBpbmcNCiogVW5zdHJ1Y3R1cmVkIC8gdXNlciBjb2RlIGZvbGRpbmcNCiogTGl2ZSBzeW50YXggY2hlY2tlciAoY3VycmVudGx5IEphdmFTY3JpcHQvQ29mZmVlU2NyaXB0KQ0KDQpUYWtlIEFjZSBmb3IgYSBzcGluIQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KQ2hlY2sgb3V0IHRoZSBBY2UgbGl2ZSBbZGVtb10oaHR0cDovL2FqYXhvcmcuZ2l0aHViLmNvbS9hY2UvKSBvciBnZXQgYSBbQ2xvdWQ5IElERSBhY2NvdW50XShodHRwOi8vcnVuLmNsb3VkOWlkZS5jb20pIHRvIGV4cGVyaWVuY2UgQWNlIHdoaWxlIGVkaXRpbmcgb25lIG9mIHlvdXIgb3duIEdpdEh1YiBwcm9qZWN0cy4NCg0KSWYgeW91IHdhbnQsIHlvdSBjYW4gdXNlIEFjZSBhcyBhIHRleHRhcmVhIHJlcGxhY2VtZW50IHRoYW5rcyB0byB0aGUgW0FjZSBCb29rbWFya2xldF0oaHR0cDovL2FqYXhvcmcuZ2l0aHViLmNvbS9hY2UvYnVpbGQvdGV4dGFyZWEvZWRpdG9yLmh0bWwpLg0KDQpIaXN0b3J5DQotLS0tLS0tDQoNClByZXZpb3VzbHkga25vd24gYXMg4oCcQmVzcGlu4oCdIGFuZCDigJxTa3l3cml0ZXLigJ0gaXTigJlzIG5vdyBrbm93biBhcyBBY2UgKEFqYXgub3JnIENsb3VkOSBFZGl0b3IpISBCZXNwaW4gYW5kIEFjZSBzdGFydGVkIGFzIHR3byBpbmRlcGVuZGVudCBwcm9qZWN0cywgYm90aCBhaW1pbmcgdG8gYnVpbGQgYSBuby1jb21wcm9taXNlIGNvZGUgZWRpdG9yIGNvbXBvbmVudCBmb3IgdGhlIHdlYi4gQmVzcGluIHN0YXJ0ZWQgYXMgcGFydCBvZiBNb3ppbGxhIExhYnMgYW5kIHdhcyBiYXNlZCBvbiB0aGUgY2FudmFzIHRhZywgd2hpbGUgQWNlIGlzIHRoZSBFZGl0b3IgY29tcG9uZW50IG9mIHRoZSBDbG91ZDkgSURFIGFuZCBpcyB1c2luZyB0aGUgRE9NIGZvciByZW5kZXJpbmcuIEFmdGVyIHRoZSByZWxlYXNlIG9mIEFjZSBhdCBKU0NvbmYuZXUgMjAxMCBpbiBCZXJsaW4gdGhlIFNreXdyaXRlciB0ZWFtIGRlY2lkZWQgdG8gbWVyZ2UgQWNlIHdpdGggYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgU2t5d3JpdGVyJ3MgcGx1Z2luIHN5c3RlbSBhbmQgc29tZSBvZiBTa3l3cml0ZXIncyBleHRlbnNpYmlsaXR5IHBvaW50cy4gQWxsIHRoZXNlIGNoYW5nZXMgaGF2ZSBiZWVuIG1lcmdlZCBiYWNrIHRvIEFjZS4gQm90aCBBamF4Lm9yZyBhbmQgTW96aWxsYSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGluZyBhbmQgbWFpbnRhaW5pbmcgQWNlLg0KDQpHZXR0aW5nIHRoZSBjb2RlDQotLS0tLS0tLS0tLS0tLS0tDQoNCkFjZSBpcyBhIGNvbW11bml0eSBwcm9qZWN0LiBXZSBhY3RpdmVseSBlbmNvdXJhZ2UgYW5kIHN1cHBvcnQgY29udHJpYnV0aW9ucy4gVGhlIEFjZSBzb3VyY2UgY29kZSBpcyBob3N0ZWQgb24gR2l0SHViLiBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2UuIFRoaXMgbGljZW5zZSBpcyB2ZXJ5IHNpbXBsZSwgYW5kIGlzIGZyaWVuZGx5IHRvIGFsbCBraW5kcyBvZiBwcm9qZWN0cywgd2hldGhlciBvcGVuIHNvdXJjZSBvciBub3QuIFRha2UgY2hhcmdlIG9mIHlvdXIgZWRpdG9yIGFuZCBhZGQgeW91ciBmYXZvcml0ZSBsYW5ndWFnZSBoaWdobGlnaHRpbmcgYW5kIGtleWJpbmRpbmdzIQ0KDQpgYGBiYXNoDQogICAgZ2l0IGNsb25lIGdpdDovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UuZ2l0DQogICAgY2QgYWNlDQogICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlDQpgYGANCg0KRW1iZWRkaW5nIEFjZQ0KLS0tLS0tLS0tLS0tLQ0KDQpBY2UgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbnRvIGFueSBleGlzdGluZyB3ZWIgcGFnZS4gVGhlIEFjZSBnaXQgcmVwb3NpdG9yeSBzaGlwcyB3aXRoIGEgcHJlLXBhY2thZ2VkIHZlcnNpb24gb2YgQWNlIGluc2lkZSBvZiB0aGUgYGJ1aWxkYCBkaXJlY3RvcnkuIFRoZSBzYW1lIHBhY2thZ2VkIGZpbGVzIGFyZSBhbHNvIGF2YWlsYWJsZSBhcyBhIHNlcGFyYXRlIFtkb3dubG9hZF0oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL2Rvd25sb2FkcykuIFNpbXBseSBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgYHNyY2Agc3ViZGlyZWN0b3J5IHNvbWV3aGVyZSBpbnRvIHlvdXIgcHJvamVjdCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGluY2x1ZGVkIGRlbW9zIG9mIGhvdyB0byB1c2UgQWNlLg0KDQpUaGUgZWFzaWVzdCB2ZXJzaW9uIGlzIHNpbXBseToNCg0KYGBgaHRtbA0KICAgIDxkaXYgaWQ9ImVkaXRvciI+c29tZSB0ZXh0PC9kaXY+DQogICAgPHNjcmlwdCBzcmM9InNyYy9hY2UuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQ+DQogICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQoImVkaXRvciIpOw0KICAgIH07DQogICAgPC9zY3JpcHQ+DQpgYGANCg0KV2l0aCAiZWRpdG9yIiBiZWluZyB0aGUgaWQgb2YgdGhlIERPTSBlbGVtZW50LCB3aGljaCBzaG91bGQgYmUgY29udmVydGVkIHRvIGFuIGVkaXRvci4gTm90ZSB0aGF0IHRoaXMgZWxlbWVudCBtdXN0IGJlIGV4cGxpY2l0bHkgc2l6ZWQgYW5kIHBvc2l0aW9uZWQgYGFic29sdXRlYCBvciBgcmVsYXRpdmVgIGZvciBBY2UgdG8gd29yay4gZS5nLg0KDQpgYGBjc3MNCiAgICAjZWRpdG9yIHsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB3aWR0aDogNTAwcHg7DQogICAgICAgIGhlaWdodDogNDAwcHg7DQogICAgfQ0KYGBgDQoNClRvIGNoYW5nZSB0aGUgdGhlbWUgc2ltcGx5IGluY2x1ZGUgdGhlIFRoZW1lJ3MgSmF2YVNjcmlwdCBmaWxlDQoNCmBgYGh0bWwNCiAgICA8c2NyaXB0IHNyYz0ic3JjL3RoZW1lLXR3aWxpZ2h0LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4NCmBgYA0KDQphbmQgY29uZmlndXJlIHRoZSBlZGl0b3IgdG8gdXNlIHRoZSB0aGVtZToNCg0KYGBgamF2YXNjcmlwdA0KICAgIGVkaXRvci5zZXRUaGVtZSgiYWNlL3RoZW1lL3R3aWxpZ2h0Iik7DQpgYGANCg0KQnkgZGVmYXVsdCB0aGUgZWRpdG9yIG9ubHkgc3VwcG9ydHMgcGxhaW4gdGV4dCBtb2RlOyBtYW55IG90aGVyIGxhbmd1YWdlcyBhcmUgYXZhaWxhYmxlIGFzIHNlcGFyYXRlIG1vZHVsZXMuIEFmdGVyIGluY2x1ZGluZyB0aGUgbW9kZSdzIEphdmFTY3JpcHQgZmlsZToNCg0KYGBgaHRtbA0KICAgIDxzY3JpcHQgc3JjPSJzcmMvbW9kZS1qYXZhc2NyaXB0LmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4NCmBgYA0KDQpUaGVuIHRoZSBtb2RlIGNhbiBiZSB1c2VkIGxpa2UgdGhpczoNCg0KYGBgamF2YXNjcmlwdA0KICAgIHZhciBKYXZhU2NyaXB0TW9kZSA9IHJlcXVpcmUoImFjZS9tb2RlL2phdmFzY3JpcHQiKS5Nb2RlOw0KICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZShuZXcgSmF2YVNjcmlwdE1vZGUoKSk7DQpgYGANCg0KRG9jdW1lbnRhdGlvbg0KLS0tLS0tLS0tLS0tLQ0KDQpZb3UgZmluZCBhIGxvdCBtb3JlIHNhbXBsZSBjb2RlIGluIHRoZSBbZGVtbyBhcHBdKGh0dHBzOi8vZ2l0aHViLmNvbS9hamF4b3JnL2FjZS9ibG9iL21hc3Rlci9kZW1vL2RlbW8uanMpLg0KDQpUaGVyZSBpcyBhbHNvIHNvbWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3dpa2kgcGFnZV0oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL3dpa2kpLg0KDQpJZiB5b3Ugc3RpbGwgbmVlZCBoZWxwLCBmZWVsIGZyZWUgdG8gZHJvcCBhIG1haWwgb24gdGhlIFthY2UgbWFpbGluZyBsaXN0XShodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvYWNlLWRpc2N1c3MpLg0KDQpSdW5uaW5nIEFjZQ0KLS0tLS0tLS0tLS0NCg0KQWZ0ZXIgdGhlIGNoZWNrb3V0IEFjZSB3b3JrcyBvdXQgb2YgdGhlIGJveC4gTm8gYnVpbGQgc3RlcCBpcyByZXF1aXJlZC4gT3BlbiAnZWRpdG9yLmh0bWwnIGluIGFueSBicm93c2VyIGV4Y2VwdCBHb29nbGUgQ2hyb21lLiBHb29nbGUgQ2hyb21lIGRvZXNuJ3QgYWxsb3cgWE1MSFRUUFJlcXVlc3RzIGZyb20gZmlsZXMgbG9hZGVkIGZyb20gZGlzYyAoaS5lLiB3aXRoIGEgZmlsZTovLy8gVVJMKS4gVG8gb3BlbiBBY2UgaW4gQ2hyb21lIHNpbXBseSBzdGFydCB0aGUgYnVuZGxlZCBtaW5pIEhUVFAgc2VydmVyOg0KDQpgYGBiYXNoDQogICAgLi9zdGF0aWMucHkNCmBgYA0KDQpPciB1c2luZyBOb2RlLkpTDQoNCmBgYGJhc2gNCiAgICAuL3N0YXRpYy5qcw0KYGBgDQoNClRoZSBlZGl0b3IgY2FuIHRoZW4gYmUgb3BlbmVkIGF0IGh0dHA6Ly9sb2NhbGhvc3Q6ODg4OC9pbmRleC5odG1sLg0KDQpQYWNrYWdlIEFjZQ0KLS0tLS0tLS0tLS0NCg0KVG8gcGFja2FnZSBBY2Ugd2UgdXNlIHRoZSBkcnlpY2UgYnVpbGQgdG9vbCBkZXZlbG9wZWQgYnkgdGhlIE1vemlsbGEgU2t5d3JpdGVyIHRlYW0uIEJlZm9yZSB5b3UgY2FuIGJ1aWxkIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdWJtb2R1bGVzIGFyZSB1cCB0byBkYXRlLg0KDQpgYGBiYXNoDQogICAgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlDQpgYGANCg0KQWZ0ZXJ3YXJkcyBBY2UgY2FuIGJlIGJ1aWx0IGJ5IGNhbGxpbmcNCg0KYGBgYmFzaA0KICAgIC4vTWFrZWZpbGUuZHJ5aWNlLmpzIG5vcm1hbA0KYGBgDQoNClRoZSBwYWNrYWdlZCBBY2Ugd2lsbCBiZSBwdXQgaW4gdGhlICdidWlsZCcgZm9sZGVyLg0KDQpUbyBidWlsZCB0aGUgYm9va21hcmtsZXQgdmVyc2lvbiBleGVjdXRlDQoNCmBgYGJhc2gNCiAgICAuL01ha2VmaWxlLmRyeWljZS5qcyBibQ0KYGBgDQoNClJ1bm5pbmcgdGhlIFVuaXQgVGVzdHMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KVGhlIEFjZSB1bml0IHRlc3RzIHJ1biBvbiBub2RlLmpzLiBCZWZvcmUgdGhlIGZpcnN0IHJ1biBhIGNvdXBsZSBvZiBub2RlIG1vZHVsZXMgaGF2ZSB0byBiZSBpbnN0YWxsZWQuIFRoZSBlYXNpZXN0IHdheSB0byBkbyB0aGlzIGlzIGJ5IHVzaW5nIHRoZSBub2RlIHBhY2thZ2UgbWFuYWdlciAobnBtKS4gSW4gdGhlIEFjZSBiYXNlIGRpcmVjdG9yeSBzaW1wbHkgY2FsbA0KDQpgYGBiYXNoDQogICAgbnBtIGxpbmsgLg0KYGBgDQoNClRvIHJ1biB0aGUgdGVzdHMgY2FsbDoNCg0KYGBgYmFzaA0KICAgIG5vZGUgbGliL2FjZS90ZXN0L2FsbC5qcw0KYGBgDQoNCllvdSBjYW4gYWxzbyBydW4gdGhlIHRlc3RzIGluIHlvdXIgYnJvd3NlciBieSBzZXJ2aW5nOg0KDQogICAgaHR0cDovL2xvY2FsaG9zdDo4ODg4L2xpYi9hY2UvdGVzdC90ZXN0cy5odG1sDQoNClRoaXMgbWFrZXMgZGVidWdnaW5nIGZhaWxpbmcgdGVzdHMgd2F5IG1vcmUgZWFzaWVyLg0KDQpDb250cmlidXRpbmcNCi0tLS0tLS0tLS0tLQ0KDQpBY2Ugd291bGRuJ3QgYmUgd2hhdCBpdCBpcyB3aXRob3V0IGNvbnRyaWJ1dGlvbnMhIEZlZWwgZnJlZSB0byBmb3JrIGFuZCBpbXByb3ZlL2VuaGFuY2UgQWNlIGFueSB3YXkgeW91IHdhbnQuIElmIHlvdSBmZWVsIHRoYXQgdGhlIGVkaXRvciBvciB0aGUgQWNlIGNvbW11bml0eSB3aWxsIGJlbmVmaXQgZnJvbSB5b3VyIGNoYW5nZXMsIHBsZWFzZSBvcGVuIGEgcHVsbCByZXF1ZXN0LiBUbyBwcm90ZWN0IHRoZSBpbnRlcmVzdHMgb2YgdGhlIEFjZSBjb250cmlidXRvcnMgYW5kIHVzZXJzIHdlIHJlcXVpcmUgY29udHJpYnV0b3JzIHRvIHNpZ24gYSBDb250cmlidXRvcnMgTGljZW5zZSBBZ3JlZW1lbnQgKENMQSkgYmVmb3JlIHdlIHB1bGwgdGhlIGNoYW5nZXMgaW50byB0aGUgbWFpbiByZXBvc2l0b3J5LiBPdXIgQ0xBIGlzIHRoZSBzaW1wbGVzdCBvZiBhZ3JlZW1lbnRzLCByZXF1aXJpbmcgdGhhdCB0aGUgY29udHJpYnV0aW9ucyB5b3UgbWFrZSB0byBhbiBhamF4Lm9yZyBwcm9qZWN0IGFyZSBvbmx5IHRob3NlIHlvdSdyZSBhbGxvd2VkIHRvIG1ha2UuIFRoaXMgaGVscHMgdXMgc2lnbmlmaWNhbnRseSByZWR1Y2UgZnV0dXJlIGxlZ2FsIHJpc2sgZm9yIGV2ZXJ5b25lIGludm9sdmVkLiBJdCBpcyBlYXN5LCBoZWxwcyBldmVyeW9uZSwgdGFrZXMgdGVuIG1pbnV0ZXMsIGFuZCBvbmx5IG5lZWRzIHRvIGJlIGNvbXBsZXRlZCBvbmNlLiAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGUgYWdyZWVtZW50Og0KDQoxLiBbVGhlIEluZGl2aWR1YWwgQ0xBXShodHRwczovL2dpdGh1Yi5jb20vYWpheG9yZy9hY2UvcmF3L21hc3Rlci9kb2MvQ29udHJpYnV0b3JfTGljZW5zZV9BZ3JlZW1lbnQtdjIucGRmKTogdXNlIHRoaXMgdmVyc2lvbiBpZiB5b3UncmUgd29ya2luZyBvbiBhbiBhamF4Lm9yZyBpbiB5b3VyIHNwYXJlIHRpbWUsIG9yIGNhbiBjbGVhcmx5IGNsYWltIG93bmVyc2hpcCBvZiBjb3B5cmlnaHQgaW4gd2hhdCB5b3UnbGwgYmUgc3VibWl0dGluZy4NCjIuIFtUaGUgQ29ycG9yYXRlIENMQV0oaHR0cHM6Ly9naXRodWIuY29tL2FqYXhvcmcvYWNlL3Jhdy9tYXN0ZXIvZG9jL0NvcnBvcmF0ZV9Db250cmlidXRvcl9MaWNlbnNlX0FncmVlbWVudC12Mi5wZGYpOiBoYXZlIHlvdXIgY29ycG9yYXRlIGxhd3llciByZXZpZXcgYW5kIHN1Ym1pdCB0aGlzIGlmIHlvdXIgY29tcGFueSBpcyBnb2luZyB0byBiZSBjb250cmlidXRpbmcgdG8gYWpheC5vcmcgIHByb2plY3RzDQoNCklmIHlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gYW4gYWpheC5vcmcgcHJvamVjdCBwbGVhc2UgcHJpbnQgdGhlIENMQSBhbmQgZmlsbCBpdCBvdXQgYW5kIHNpZ24gaXQuIFRoZW4gZWl0aGVyIHNlbmQgaXQgYnkgc25haWwgbWFpbCBvciBmYXggdG8gdXMgb3Igc2VuZCBpdCBiYWNrIHNjYW5uZWQgKG9yIGFzIGEgcGhvdG8pIGJ5IGVtYWlsLg0KDQpFbWFpbDogZmFiaWFuLmpha29ic0B3ZWIuZGUNCg0KRmF4OiArMzEgKDApIDIwNjM4ODk1Mw0KDQpBZGRyZXNzOiBBamF4Lm9yZyBCLlYuDQogIEtlaXplcnNncmFjaHQgMjQxDQogIDEwMTYgRUEsIEFtc3RlcmRhbQ0KICB0aGUgTmV0aGVybGFuZHM=]]></data>
	</file>
	<file>
	  <filename>/samples/mushcode.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QGNyZWF0ZSBwaG9uZQ0KJnBpY2t1cCBwaG9uZT0kcGljayB1cDpAaWZlbHNlIFt1KGlzLHUobW9kZSksSUNDKV09e0BwZW1pdCAlIz1Zb3UgcGljayB1cCB0aGUgW2Z1bGxuYW1lKG1lKV0uW3NldChtZSxQSE9ORVI6JSMpXVtzZXQobWUsTU9ERTpDSVApXVtzZXQoW3UoSU5DT01JTkcpXSxDT05ORUNURUQ6W251bShtZSldKV1bc2V0KG1lLENPTk5FQ1RFRDpbdShJTkNPTUlORyldKV0lcltzaG93cGljdHVyZShQSUNQSUNLVVApXSVyVXNlICdbY29sb3IoZ3JlZW4sYmxhY2sscHNheSA8bWVzc2FnZT4pXScgKG9yICdbY29sb3IoZ3JlZW4sYmxhY2sscCA8bWVzc2FnZT4pXScpIHRvIHRhbGsgaW50byB0aGUgcGhvbmUuO0BvZW1pdCAlIz0lTiBwaWNrcyB1cCB0aGUgW2Z1bGxuYW1lKG1lKV0ufSx7QHBlbWl0ICUjPVlvdSBwaWNrIHVwIHRoZSBwaG9uZSBidXQgbm8gb25lIGlzIHRoZXJlLiBZb3UgaGVhciBhIGRpYWx0b25lIGFuZCB0aGVuIGhhbmcgdXAuIFtwbGF5KHUoRElBTFRPTkUpKV07QG9lbWl0ICUjPSVOIHBpY2tzIHVwIHRoZSBwaG9uZSwgYnV0IG5vIG9uZSBpcyBvbiB0aGUgb3RoZXIgZW5kLn0NCiZyaW5nZnVuIHBob25lPVtpZmVsc2UoZXEoY29tcChbdSglMC9yaW5ndG9uZSldLG9mZiksMCksW2NvbG9yKGJsYWNrLGN5YW4sSU5DT01JTkcgQ0FMTCBGUk9NICUxKV0sW3BsYXkoW3N3aXRjaChbdSglMC9yaW5ndG9uZSldLDEsW3UoJTAvcmluZ3RvbmUxKV0sMixbdSglMC9yaW5ndG9uZTIpXSwzLFt1KCUwL3Jpbmd0b25lMyldLDQsW3UoJTAvcmluZ3RvbmU0KV0sNSxbdSglMC9yaW5ndG9uZTUpXSw2LFt1KCUwL3Jpbmd0b25lNildLDcsW3UoJTAvcmluZ3RvbmU3KV0sOCxbdSglMC9yaW5ndG9uZTgpXSw5LFt1KCUwL3Jpbmd0b25lOSldLGN1c3RvbSxbdSglMC9jdXN0b210b25lKV0sdmlicmF0ZSxbdSglMC92aWJyYXRlKV0pXSldDQomcmluZ2xvb3AgcGhvbmU9QHN3aXRjaCBbdShyaW5nc3RhdGUpXT0xLHtAZW1pdCBbc2V0cShxLFt1KGNvbm5lY3RpbmcpXSldW3NldCglcXEscmFuZ3M6MCldW3NldCglcXEsbW9kZTpXRkMpXVtzZXQoJXFxLElOQ09NSU5HOildO0BpZmVsc2UgW3UoJXFxL0hBU1ZNQildPXtAdHIgbWUvUk9VVEVWTUI9W3UoY29ubmVjdGluZyldO30se0BwZW1pdCAlIz1bdShNU0dDTkMpXTt9fSwyLHtAcGVtaXQgJSM9VGhlIGNhbGwgaXMgY29ubmVjdGVkLltzZXRxKHEsW3UoQ09OTkVDVElORyldKV1bc2V0KG1lLENPTk5FQ1RFRDolcXEpXVtzZXQoJXFxLENPTk5FQ1RFRDpbbnVtKG1lKV0pXVtzZXQoJXFxLE1PREU6Q0lQKV07QHRyIG1lL2NpcGxvb3A7QHRyICVxcS9jaXBsb29wO30sMyx7QGVtaXQgT24gW2Z1bGxuYW1lKG1lKV0ncyBlYXJwaWVjZSB5b3UgaGVhciBhIHJpbmdpbmcgc291bmQuW3BsYXkodShMSU5FVE9ORSkpXTtAdHIgbWUvcmluZ2hlcmU7QGluY3JlbWVudCBbdShjb25uZWN0aW5nKV0vUkFOR1M7QHdhaXQgNT17QHRyIG1lL3Jpbmdsb29wfTt9LDQse30NCiZyaW5nc3RhdGUgcGhvbmU9W3NldHEocSx1KGNvbm5lY3RpbmcpKV1bc2V0cSgxLFtndCh1KCVxcS9yYW5ncyksc3ViKHUoJXFxL3JpbmdzKSwxKSldKV1bc2V0cSgyLFthbmQodShpcyx1KCVxcS9NT0RFKSxDSVApLHUoaXMsdSglcXEvSU5DT01JTkcpLFtudW0obWUpXSkpXVtzZXRxKDMsW3UoaXMsdSglcXEvTU9ERSksSUNDKV0pXVtpZmVsc2UoJXExLDEsaWZlbHNlKCVxMiwyLGlmZWxzZSglcTMsMyw0KSkpXQ0KO2NvbW1lbnQNCkBAKGNvbW1lbnQpDQpzYXkgW3RpbWUoKV0NCg==]]></data>
	</file>
	<file>
	  <filename>/samples/nix.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ew0KICAjIE5hbWUgb2Ygb3VyIGRlcGxveW1lbnQNCiAgbmV0d29yay5kZXNjcmlwdGlvbiA9ICJIZWxsb1dvcmxkIjsNCiAgIyBFbmFibGUgcm9sbGluZyBiYWNrIHRvIHByZXZpb3VzIHZlcnNpb25zIG9mIG91ciBpbmZyYXN0cnVjdHVyZQ0KICBuZXR3b3JrLmVuYWJsZVJvbGxiYWNrID0gdHJ1ZTsNCg0KICAjIEl0IGNvbnNpc3RzIG9mIGEgc2luZ2xlIHNlcnZlciBuYW1lZCAnaGVsbG9zZXJ2ZXInDQogIGhlbGxvc2VydmVyID0NCiAgICAjIEV2ZXJ5IHNlcnZlciBnZXRzIHBhc3NlZCBhIGZldyBhcmd1bWVudHMsIGluY2x1ZGluZyBhIHJlZmVyZW5jZQ0KICAgICMgdG8gbml4cGtncyAocGtncykNCiAgICB7IGNvbmZpZywgcGtncywgLi4uIH06DQogICAgbGV0DQogICAgICAjIFdlIGltcG9ydCBvdXIgY3VzdG9tIHBhY2thZ2VzIGZyb20gLi9kZWZhdWx0IHBhc3NpbmcgcGtncyBhcyBhcmd1bWVudA0KICAgICAgcGFja2FnZXMgPSBpbXBvcnQgLi9kZWZhdWx0Lm5peCB7IHBrZ3MgPSBwa2dzOyB9Ow0KICAgICAgIyBUaGlzIGlzIHRoZSBub2RlanMgdmVyc2lvbiBzcGVjaWZpZWQgaW4gZGVmYXVsdC5uaXgNCiAgICAgIG5vZGVqcyAgID0gcGFja2FnZXMubm9kZWpzOw0KICAgICAgIyBBbmQgdGhpcyBpcyB0aGUgYXBwbGljYXRpb24gd2UnZCBsaWtlIHRvIGRlcGxveQ0KICAgICAgYXBwICAgICAgPSBwYWNrYWdlcy5hcHA7DQogICAgaW4NCiAgICB7DQogICAgICAjIFdlJ2xsIGJlIHJ1bm5pbmcgb3VyIGFwcGxpY2F0aW9uIG9uIHBvcnQgODA4MCwgYmVjYXVzZSBhIHJlZ3VsYXINCiAgICAgICMgdXNlciBjYW5ub3QgYmluZCB0byBwb3J0IDgwDQogICAgICAjIFRoZW4sIHVzaW5nIHNvbWUgaXB0YWJsZXMgbWFnaWMgd2UnbGwgZm9yd2FyZCB0cmFmZmljIGRlc2lnbmF0ZWQgdG8gcG9ydCA4MCB0byA4MDgwDQogICAgICBuZXR3b3JraW5nLmZpcmV3YWxsLmVuYWJsZSA9IHRydWU7DQogICAgICAjIFdlIHdpbGwgb3BlbiB1cCBwb3J0IDIyIChTU0gpIGFzIHdlbGwgb3RoZXJ3aXNlIHdlJ3JlIGxvY2tpbmcgb3Vyc2VsdmVzIG91dA0KICAgICAgbmV0d29ya2luZy5maXJld2FsbC5hbGxvd2VkVENQUG9ydHMgPSBbIDgwIDgwODAgMjIgXTsNCiAgICAgIG5ldHdvcmtpbmcuZmlyZXdhbGwuYWxsb3dQaW5nID0gdHJ1ZTsNCg0KICAgICAgIyBQb3J0IGZvcndhcmRpbmcgdXNpbmcgaXB0YWJsZXMNCiAgICAgIG5ldHdvcmtpbmcuZmlyZXdhbGwuZXh0cmFDb21tYW5kcyA9ICcnDQogICAgICAgIGlwdGFibGVzIC10IG5hdCAtQSBQUkVST1VUSU5HIC1wIHRjcCAtLWRwb3J0IDgwIC1qIFJFRElSRUNUIC0tdG8tcG9ydCA4MDgwDQogICAgICAnJzsNCg0KICAgICAgIyBUbyBydW4gb3VyIG5vZGUuanMgcHJvZ3JhbSB3ZSdyZSBnb2luZyB0byB1c2UgYSBzeXN0ZW1kIHNlcnZpY2UNCiAgICAgICMgV2UgY2FuIGNvbmZpZ3VyZSB0aGUgc2VydmljZSB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IG9uIGJvb3QgYW5kIHRvIHJlc3RhcnQNCiAgICAgICMgdGhlIHByb2Nlc3MgaW4gY2FzZSBpdCBjcmFzaGVzDQogICAgICBzeXN0ZW1kLnNlcnZpY2VzLmhlbGxvc2VydmVyID0gew0KICAgICAgICBkZXNjcmlwdGlvbiA9ICJIZWxsbyB3b3JsZCBhcHBsaWNhdGlvbiI7DQogICAgICAgICMgU3RhcnQgdGhlIHNlcnZpY2UgYWZ0ZXIgdGhlIG5ldHdvcmsgaXMgYXZhaWxhYmxlDQogICAgICAgIGFmdGVyID0gWyAibmV0d29yay50YXJnZXQiIF07DQogICAgICAgICMgV2UncmUgZ29pbmcgdG8gcnVuIGl0IG9uIHBvcnQgODA4MCBpbiBwcm9kdWN0aW9uDQogICAgICAgIGVudmlyb25tZW50ID0geyBQT1JUID0gIjgwODAiOyB9Ow0KICAgICAgICBzZXJ2aWNlQ29uZmlnID0gew0KICAgICAgICAgICMgVGhlIGFjdHVhbCBjb21tYW5kIHRvIHJ1bg0KICAgICAgICAgIEV4ZWNTdGFydCA9ICIke25vZGVqc30vYmluL25vZGUgJHthcHB9L3NlcnZlci5qcyI7DQogICAgICAgICAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucyB3ZSdsbCBydW4gdGhpcyBwcm9jZXNzIGFzIGEgc3BlY2lhbCAnbm9kZWpzJyB1c2VyDQogICAgICAgICAgVXNlciA9ICJub2RlanMiOw0KICAgICAgICAgIFJlc3RhcnQgPSAiYWx3YXlzIjsNCiAgICAgICAgfTsNCiAgICAgIH07DQoNCiAgICAgICMgQW5kIGxhc3RseSB3ZSBlbnN1cmUgdGhlIHVzZXIgd2UgcnVuIG91ciBhcHBsaWNhdGlvbiBhcyBpcyBjcmVhdGVkDQogICAgICB1c2Vycy5leHRyYVVzZXJzID0gew0KICAgICAgICBub2RlanMgPSB7IH07DQogICAgICB9Ow0KICAgIH07DQp9]]></data>
	</file>
	<file>
	  <filename>/samples/objectivec.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QHByb3RvY29sIFByaW50aW5nOiBzb21lUGFyZW50DQotKHZvaWQpIHByaW50Ow0KQGVuZA0KDQpAaW50ZXJmYWNlIEZyYWN0aW9uOiBOU09iamVjdCA8UHJpbnRpbmcsIE5TQ29weWluZz4gew0KICAgIGludCBudW1lcmF0b3I7DQogICAgaW50IGRlbm9taW5hdG9yOw0KfQ0KQGVuZA0KDQpAImJsYWhcOCIgQCJhXDIyMnNkXGQiIEAiXGZhd1wiXD8gXCcgXDQgblxcIiBAIlw1NiINCkAiXHhTRjQyIg0KDQotKE5TRGVjaW1hbE51bWJlciopYWRkQ291bnQ6KGlkKWFkZE9iamVjdHsNCg0KcmV0dXJuIFtjb3VudCBkZWNpbWFsTnVtYmVyQnlBZGRpbmc6YWRkT2JqZWN0LmNvdW50XTsNCg0KfQ0KDQogIE5TX0RVUklORyAgTlNfSEFORExFUiBOU19FTkRIQU5ETEVSDQoNCkB0cnkgew0KICAgaWYgKGFyZ2MgPiAxKSAgICB7DQogICAgQHRocm93IFtOU0V4Y2VwdGlvbiBleGNlcHRpb25XaXRoTmFtZTpAIlRocm93aW5nIGEgdGVzdCBleGNlcHRpb24iIHJlYXNvbjpAIlRlc3RpbmcgdGhlIEB0aHJvdyBkaXJlY3RpdmUuIiB1c2VySW5mbzpuaWxdOw0KICAgfQ0KfSANCkBjYXRjaCAoaWQgdGhlRXhjZXB0aW9uKSB7DQogICAgTlNMb2coQCIlQCIsIHRoZUV4Y2VwdGlvbik7DQogICAgcmVzdWx0ID0gMSAgOw0KfSANCkBmaW5hbGx5IHsNCiAgICBOU0xvZyhAIlRoaXMgYWx3YXlzIGhhcHBlbnMuIik7DQogICAgcmVzdWx0ICs9IDIgOw0KfQ0KDQogICAgQHN5bmNocm9uaXplZChsb2NrKSB7DQogICAgICAgIE5TTG9nKEAiSGVsbG8gV29ybGQiKTsNCiAgICB9DQoNCnN0cnVjdCB7IEBkZWZzKCBOU09iamVjdCkgfQ0KDQpjaGFyICplbmMxID0gQGVuY29kZShpbnQpOw0KDQogICAgICAgICBJQk91dGxldHxJQkFjdGlvbnxCT09MfFNFTHxpZHx1bmljaGFyfElNUHxDbGFzcyANCg0KDQogQGNsYXNzIEBwcm90b2NvbA0KDQpAcHVibGljDQogIC8vIGluc3RhbmNlIHZhcmlhYmxlcw0KQHBhY2thZ2UNCiAgLy8gaW5zdGFuY2UgdmFyaWFibGVzDQpAcHJvdGVjdGVkDQogIC8vIGluc3RhbmNlIHZhcmlhYmxlcw0KQHByaXZhdGUNCiAgLy8gaW5zdGFuY2UgdmFyaWFibGVzDQoNCiAgWUVTIE5PIE5pbCBuaWwNCk5TQXBwKCkNCk5TUmVjdFRvQ0dSZWN0IChQcm90b2NvbCBQcm90b2NvbEZyb21TdHJpbmc6Ik5TVGFibGVWaWV3RGVsZWdhdGUiKSkNCg0KW1NQUG9pbnQgcG9pbnRGcm9tQ0dQb2ludDpzZWxmLnBvc2l0aW9uXQ0KDQpOU1JvdW5kRG93blRvTXVsdGlwbGVPZlBhZ2VTaXplDQoNCiNpbXBvcnQgPHN0ZGlvLmg+DQoNCmludCBtYWluKCBpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdICkgew0KICAgIHByaW50ZiggImhlbGxvIHdvcmxkXG4iICk7DQogICAgcmV0dXJuIDA7DQp9DQoNCk5TQ2hhbmdlU3BlbGxpbmcNCg0KQCIwICE9IFNVQlFVRVJZKGltYWdlLCAkeCwgMCAhPSBTVUJRVUVSWSgkeC5ib29rbWFya0l0ZW1zLCAkeSwgJHkuQGNvdW50ID09IDApLkBjb3VudCkuQGNvdW50Ig0KDQpAc2VsZWN0b3IobG93ZXJjYXNlU3RyaW5nKSBAc2VsZWN0b3IodXBwZXJjYXNlU3RyaW5nOikNCg0KTlNGZXRjaFJlcXVlc3QgKmxvY2FsUmVxdWVzdCA9IFtbTlNGZXRjaFJlcXVlc3QgYWxsb2NdIGluaXRdOyAgDQpsb2NhbFJlcXVlc3QuZW50aXR5ID0gW05TRW50aXR5RGVzY3JpcHRpb24gZW50aXR5Rm9yTmFtZTpAIlZOU291cmNlIiBpbk1hbmFnZWRPYmplY3RDb250ZXh0OmNvbnRleHRdOyAgDQpsb2NhbFJlcXVlc3Quc29ydERlc2NyaXB0b3JzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltOU1NvcnREZXNjcmlwdG9yIHNvcnREZXNjcmlwdG9yV2l0aEtleTpAInJlc29sdXRpb24iIGFzY2VuZGluZzpZRVNdXTsgIA0KTlNQcmVkaWNhdGUgKnByZWRpY2F0ZSA9IFtOU1ByZWRpY2F0ZSBwcmVkaWNhdGVXaXRoRm9ybWF0OkAiMCAhPSBTVUJRVUVSWShpbWFnZSwgJHgsIDAgIT0gU1VCUVVFUlkoJHguYm9va21hcmtJdGVtcywgJHksICR5LkBjb3VudCA9PSAwKS5AY291bnQpLkBjb3VudCJdOw0KW05TUHJlZGljYXRlIHByZWRpY2F0ZVdpdGhGb3JtYXQ6XQ0KTlNTdHJpbmcgKnByZWRpY2F0ZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiU0VMRiBiZWdpbnNXaXRoW2NkXSAlQCIsIHNlYXJjaFN0cmluZ107DQpOU1ByZWRpY2F0ZSAqcHJlZCA9IFtOU1ByZWRpY2F0ZSBwcmVkaWNhdGVXaXRoRm9ybWF0OnByZWRpY2F0ZVN0cmluZ107DQpOU0FycmF5ICpmaWx0ZXJlZEtleXMgPSBbW215TXV0YWJsZURpY3Rpb25hcnkgYWxsS2V5c10gZmlsdGVyZWRBcnJheVVzaW5nUHJlZGljYXRlOnByZWRdOyANCg0KbG9jYWxSZXF1ZXN0LnByZWRpY2F0ZSA9IFtOU1ByZWRpY2F0ZSBwcmVkaWNhdGVXaXRoRm9ybWF0OkAid2hpY2hDaGFydCA9ICVAIiBhcmd1bWVudEFycmF5OiBsaXN0Q2hhcnRUb0Rvd25sb2FkXTsNCmxvY2FsUmVxdWVzdC5mZXRjaEJhdGNoU2l6ZSA9IDEwMDsNCmFycmF5UmVxdWVzdCAgICA9IFtjb250ZXh0ICBleGVjdXRlRmV0Y2hSZXF1ZXN0OmxvY2FsUmVxdWVzdCBlcnJvcjomZXJyb3IxXTsNCg0KW2xvY2FsUmVxdWVzdCAgIHJlbGVhc2VdOw0KDQojaWZuZGVmIE5pbA0KI2RlZmluZSBOaWwgX19EQVJXSU5fTlVMTCAgIC8qIGlkIG9mIE5pbCBjbGFzcyAqLw0KI2VuZGlmDQoNCkBpbXBsZW1lbnRhdGlvbiBNeU9iamVjdA0KLSAodW5zaWduZWQgaW50KWFyZWFPZldpZHRoOih1bnNpZ25lZCBpbnQpd2lkdGgNCiAgICAgICAgICAgICAgICBoZWlnaHQ6KHVuc2lnbmVkIGludCloZWlnaHQNCnsNCiAgcmV0dXJuIHdpZHRoKmhlaWdodDsNCn0NCkBlbmQNCg==]]></data>
	</file>
	<file>
	  <filename>/samples/ocaml.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KCoNCiAqIEV4YW1wbGUgb2YgZWFybHkgcmV0dXJuIGltcGxlbWVudGF0aW9uIHRha2VuIGZyb20NCiAqIGh0dHA6Ly9vY2FtbC5qYW5lc3RyZWV0LmNvbS8/cT1ub2RlLzkxDQogKikNCg0KbGV0IHdpdGhfcmV0dXJuICh0eXBlIHQpIChmIDogXyAtPiB0KSA9DQogIGxldCBtb2R1bGUgTSA9DQogICAgIHN0cnVjdCBleGNlcHRpb24gUmV0dXJuIG9mIHQgZW5kDQogIGluDQogIGxldCByZXR1cm4gPSB7IHJldHVybiA9IChmdW4geCAtPiByYWlzZSAoTS5SZXR1cm4geCkpOyB9IGluDQogIHRyeSBmIHJldHVybiB3aXRoIE0uUmV0dXJuIHggLT4geA0KDQoNCigqIEZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgJ2Vhcmx5IHJldHVybicgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSBgd2l0aF9yZXR1cm5gICopDQpsZXQgc3VtX3VudGlsX2ZpcnN0X25lZ2F0aXZlIGxpc3QgPQ0KICB3aXRoX3JldHVybiAoZnVuIHIgLT4NCiAgICBMaXN0LmZvbGQgbGlzdCB+aW5pdDowIH5mOihmdW4gYWNjIHggLT4NCiAgICAgIGlmIHggPj0gMCB0aGVuIGFjYyArIHggZWxzZSByLnJldHVybiBhY2MpKQ==]]></data>
	</file>
	<file>
	  <filename>/samples/pascal.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiBBIHNpbXBsZSBidWJibGUgc29ydCBwcm9ncmFtLiAgUmVhZHMgaW50ZWdlcnMsIG9uZSBwZXIgbGluZSwgYW5kIHByaW50cyAgICoNCiAqIHRoZW0gb3V0IGluIHNvcnRlZCBvcmRlci4gIEJsb3dzIHVwIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gNDkuICAgICAgICAgICAgKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKQ0KUFJPR1JBTSBTb3J0KGlucHV0LCBvdXRwdXQpOw0KICAgIENPTlNUDQogICAgICAgICgqIE1heCBhcnJheSBzaXplLiAqKQ0KICAgICAgICBNYXhFbHRzID0gNTA7DQogICAgVFlQRSANCiAgICAgICAgKCogVHlwZSBvZiB0aGUgZWxlbWVudCBhcnJheS4gKikNCiAgICAgICAgSW50QXJyVHlwZSA9IEFSUkFZIFsxLi5NYXhFbHRzXSBPRiBJbnRlZ2VyOw0KDQogICAgVkFSDQogICAgICAgICgqIEluZGV4ZXMsIGV4Y2hhbmdlIHRlbXAsIGFycmF5IHNpemUuICopDQogICAgICAgIGksIGosIHRtcCwgc2l6ZTogaW50ZWdlcjsNCg0KICAgICAgICAoKiBBcnJheSBvZiBpbnRzICopDQogICAgICAgIGFycjogSW50QXJyVHlwZTsNCg0KICAgICgqIFJlYWQgaW4gdGhlIGludGVnZXJzLiAqKQ0KICAgIFBST0NFRFVSRSBSZWFkQXJyKFZBUiBzaXplOiBJbnRlZ2VyOyBWQVIgYTogSW50QXJyVHlwZSk7IA0KICAgICAgICBCRUdJTg0KICAgICAgICAgICAgc2l6ZSA6PSAxOw0KICAgICAgICAgICAgV0hJTEUgTk9UIGVvZiBETyBCRUdJTg0KICAgICAgICAgICAgICAgIHJlYWRsbihhW3NpemVdKTsNCiAgICAgICAgICAgICAgICBJRiBOT1QgZW9mIFRIRU4gDQogICAgICAgICAgICAgICAgICAgIHNpemUgOj0gc2l6ZSArIDENCiAgICAgICAgICAgIEVORA0KICAgICAgICBFTkQ7DQoNCiAgICBCRUdJTg0KICAgICAgICAoKiBSZWFkICopDQogICAgICAgIFJlYWRBcnIoc2l6ZSwgYXJyKTsNCg0KICAgICAgICAoKiBTb3J0IHVzaW5nIGJ1YmJsZSBzb3J0LiAqKQ0KICAgICAgICBGT1IgaSA6PSBzaXplIC0gMSBET1dOVE8gMSBETw0KICAgICAgICAgICAgRk9SIGogOj0gMSBUTyBpIERPIA0KICAgICAgICAgICAgICAgIElGIGFycltqXSA+IGFycltqICsgMV0gVEhFTiBCRUdJTg0KICAgICAgICAgICAgICAgICAgICB0bXAgOj0gYXJyW2pdOw0KICAgICAgICAgICAgICAgICAgICBhcnJbal0gOj0gYXJyW2ogKyAxXTsNCiAgICAgICAgICAgICAgICAgICAgYXJyW2ogKyAxXSA6PSB0bXA7DQogICAgICAgICAgICAgICAgRU5EOw0KDQogICAgICAgICgqIFByaW50LiAqKQ0KICAgICAgICBGT1IgaSA6PSAxIFRPIHNpemUgRE8NCiAgICAgICAgICAgIHdyaXRlbG4oYXJyW2ldKQ0KICAgIEVORC4NCiAgICAgICAgICAgIA==]]></data>
	</file>
	<file>
	  <filename>/samples/perl.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9wZXJsDQo9YmVnaW4NCiBwZXJsIGV4YW1wbGUgY29kZSBmb3IgQWNlDQo9Y3V0DQoNCnVzZSBzdHJpY3Q7DQp1c2Ugd2FybmluZ3M7DQpteSAkbnVtX3ByaW1lcyA9IDA7DQpteSBAcHJpbWVzOw0KDQojIFB1dCAyIGFzIHRoZSBmaXJzdCBwcmltZSBzbyB3ZSB3b24ndCBoYXZlIGFuIGVtcHR5IGFycmF5DQokcHJpbWVzWyRudW1fcHJpbWVzXSA9IDI7DQokbnVtX3ByaW1lcysrOw0KDQpNQUlOX0xPT1A6DQpmb3IgbXkgJG51bWJlcl90b19jaGVjayAoMyAuLiAyMDApDQp7DQogICAgZm9yIG15ICRwICgwIC4uICgkbnVtX3ByaW1lcy0xKSkNCiAgICB7DQogICAgICAgIGlmICgkbnVtYmVyX3RvX2NoZWNrICUgJHByaW1lc1skcF0gPT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgbmV4dCBNQUlOX0xPT1A7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAjIElmIHdlIHJlYWNoZWQgdGhpcyBwb2ludCBpdCBtZWFucyAkbnVtYmVyX3RvX2NoZWNrIGlzIG5vdA0KICAgICMgZGl2aXNhYmxlIGJ5IGFueSBwcmltZSBudW1iZXIgdGhhdCBjYW1lIGJlZm9yZSBpdC4NCiAgICAkcHJpbWVzWyRudW1fcHJpbWVzXSA9ICRudW1iZXJfdG9fY2hlY2s7DQogICAgJG51bV9wcmltZXMrKzsNCn0NCg0KZm9yIG15ICRwICgwIC4uICgkbnVtX3ByaW1lcy0xKSkNCnsNCiAgICBwcmludCAkcHJpbWVzWyRwXSwgIiwgIjsNCn0NCnByaW50ICJcbiI7DQoNCg==]]></data>
	</file>
	<file>
	  <filename>/samples/pgsql.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQpCRUdJTjsNCg0KLyoqDQoqIFNhbXBsZXMgZnJvbSBQb3N0Z3JlU1FMIHNyYy90dXRvcmlhbC9iYXNpY3Muc291cmNlDQoqLw0KQ1JFQVRFIFRBQkxFIHdlYXRoZXIgKA0KCWNpdHkJCXZhcmNoYXIoODApLA0KCXRlbXBfbG8JCWludCwJCS0tIGxvdyB0ZW1wZXJhdHVyZQ0KCXRlbXBfaGkJCWludCwJCS0tIGhpZ2ggdGVtcGVyYXR1cmUNCglwcmNwCQlyZWFsLAkJLS0gcHJlY2lwaXRhdGlvbg0KCSJkYXRlIgkJZGF0ZQ0KKTsNCg0KQ1JFQVRFIFRBQkxFIGNpdGllcyAoDQoJbmFtZQkJdmFyY2hhcig4MCksDQoJbG9jYXRpb24JcG9pbnQNCik7DQoNCg0KSU5TRVJUIElOVE8gd2VhdGhlcg0KICAgIFZBTFVFUyAoJ1NhbiBGcmFuY2lzY28nLCA0NiwgNTAsIDAuMjUsICcxOTk0LTExLTI3Jyk7DQoNCklOU0VSVCBJTlRPIGNpdGllcw0KICAgIFZBTFVFUyAoJ1NhbiBGcmFuY2lzY28nLCAnKC0xOTQuMCwgNTMuMCknKTsNCg0KSU5TRVJUIElOVE8gd2VhdGhlciAoY2l0eSwgdGVtcF9sbywgdGVtcF9oaSwgcHJjcCwgImRhdGUiKQ0KICAgIFZBTFVFUyAoJ1NhbiBGcmFuY2lzY28nLCA0MywgNTcsIDAuMCwgJzE5OTQtMTEtMjknKTsNCg0KSU5TRVJUIElOVE8gd2VhdGhlciAoZGF0ZSwgY2l0eSwgdGVtcF9oaSwgdGVtcF9sbykNCiAgICBWQUxVRVMgKCcxOTk0LTExLTI5JywgJ0hheXdhcmQnLCA1NCwgMzcpOw0KDQoNClNFTEVDVCBjaXR5LCAodGVtcF9oaSt0ZW1wX2xvKS8yIEFTIHRlbXBfYXZnLCAiZGF0ZSIgRlJPTSB3ZWF0aGVyOw0KDQpTRUxFQ1QgY2l0eSwgdGVtcF9sbywgdGVtcF9oaSwgcHJjcCwgImRhdGUiLCBsb2NhdGlvbg0KICAgIEZST00gd2VhdGhlciwgY2l0aWVzDQogICAgV0hFUkUgY2l0eSA9IG5hbWU7DQoNCg0KDQovKioNCiogRG9sbGFyIHF1b3RlcyBzdGFydGluZyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFyZSBjb2xvcmVkIGFzIFNRTCB1bmxlc3MNCiogYSBzcGVjaWFsIGxhbmd1YWdlIHRhZyBpcyB1c2VkLiBQZWFybCBhbmQgUHl0aG9uIGFyZSBjdXJyZW50bHkgaW1wbGVtZW50ZWQNCiogYnV0IGxvdHMgb2Ygb3RoZXJzIGFyZSBwb3NzaWJsZS4NCiovDQpjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBibG9iX2NvbnRlbnRfY2h1bmtlZCgNCiAgICBpbiBwX2RhdGEgYnl0ZWEsIA0KICAgIGluIHBfY2h1bmsgaW50ZWdlcikNCnJldHVybnMgc2V0b2YgYnl0ZWEgYXMgJCQNCi0tIFN0aWxsIFNRTCBjb21tZW50cw0KZGVjbGFyZQ0KCXZfc2l6ZSBpbnRlZ2VyID0gb2N0ZXRfbGVuZ3RoKHBfZGF0YSk7DQpiZWdpbg0KCWZvciBpIGluIDEuLnZfc2l6ZSBieSBwX2NodW5rIGxvb3ANCgkJcmV0dXJuIG5leHQgc3Vic3RyaW5nKHBfZGF0YSBmcm9tIGkgZm9yIHBfY2h1bmspOw0KCWVuZCBsb29wOw0KZW5kOw0KJCQgbGFuZ3VhZ2UgcGxwZ3NxbCBzdGFibGU7DQoNCg0KLS0gcGwvcGVybA0KQ1JFQVRFIEZVTkNUSU9OIHBlcmxfbWF4IChpbnRlZ2VyLCBpbnRlZ2VyKSBSRVRVUk5TIGludGVnZXIgQVMgJHBlcmwkDQogICAgIyBwZXJsIGNvbW1lbnQuLi4NCiAgICBteSAoJHgsJHkpID0gQF87DQogICAgaWYgKCEgZGVmaW5lZCAkeCkgew0KICAgICAgICBpZiAoISBkZWZpbmVkICR5KSB7IHJldHVybiB1bmRlZjsgfQ0KICAgICAgICByZXR1cm4gJHk7DQogICAgfQ0KICAgIGlmICghIGRlZmluZWQgJHkpIHsgcmV0dXJuICR4OyB9DQogICAgaWYgKCR4ID4gJHkpIHsgcmV0dXJuICR4OyB9DQogICAgcmV0dXJuICR5Ow0KJHBlcmwkIExBTkdVQUdFIHBscGVybDsNCg0KLS0gcGwvcHl0aG9uDQpDUkVBVEUgRlVOQ1RJT04gdXNlc2F2ZWRwbGFuKCkgUkVUVVJOUyB0cmlnZ2VyIEFTICRweXRob24kDQogICAgIyBweXRob24gY29tbWVudC4uLg0KICAgIGlmIFNELmhhc19rZXkoInBsYW4iKToNCiAgICAgICAgcGxhbiA9IFNEWyJwbGFuIl0NCiAgICBlbHNlOg0KICAgICAgICBwbGFuID0gcGxweS5wcmVwYXJlKCJTRUxFQ1QgMSIpDQogICAgICAgIFNEWyJwbGFuIl0gPSBwbGFuDQokcHl0aG9uJCBMQU5HVUFHRSBwbHB5dGhvbnU7DQoNCg0KLS0gcHNxbCBjb21tYW5kcw0KXGRmIGNhc2gqDQoNCg0KLS0gU29tZSBzdHJpbmcgc2FtcGxlcy4NCnNlbGVjdCAnZG9uJyd0IGRvIGl0IG5vdzsnIHx8ICdtYXliZSBsYXRlcic7DQpzZWxlY3QgRSdkb250XCd0IGRvIGl0JzsNCnNlbGVjdCBsZW5ndGgoJ3NvbWUgb3RoZXInJ3Mgc3R1ZmYnIHx8ICQkY2F0IGluIGhhdCdzIHN0dWZmICQkKTsNCg0Kc2VsZWN0ICQkIHN0cmluZ3MNCm92ZXIgbXVsdGlwbGUgDQpsaW5lcyAtIHVzZSBkb2xsYXIgcXVvdGVzDQokJDsNCg0KRU5EOw0K]]></data>
	</file>
	<file>
	  <filename>/samples/php.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KZnVuY3Rpb24gbmZhY3QoJG4pIHsNCiAgICBpZiAoJG4gPT0gMCkgew0KICAgICAgICByZXR1cm4gMTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICAgIHJldHVybiAkbiAqIG5mYWN0KCRuIC0gMSk7DQogICAgfQ0KfQ0KDQplY2hvICJcblxuUGxlYXNlIGVudGVyIGEgd2hvbGUgbnVtYmVyIC4uLiAiOw0KJG51bSA9IHRyaW0oZmdldHMoU1RESU4pKTsNCg0KLy8gPT09PT0gUFJPQ0VTUyAtIERldGVybWluZyB0aGUgZmFjdG9yaWFsIG9mIHRoZSBpbnB1dCBudW1iZXIgPT09PT0NCiRvdXRwdXQgPSAiXG5cbkZhY3RvcmlhbCAiIC4gJG51bSAuICIgPSAiIC4gbmZhY3QoJG51bSkgLiAiXG5cbiI7DQplY2hvICRvdXRwdXQ7DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/samples/plain_text.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVy]]></data>
	</file>
	<file>
	  <filename>/samples/powershell.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBUaGlzIGlzIGEgc2ltcGxlIGNvbW1lbnQNCmZ1bmN0aW9uIEhlbGxvKCRuYW1lKSB7DQogIFdyaXRlLWhvc3QgIkhlbGxvICRuYW1lIg0KfQ0KDQpmdW5jdGlvbiBhZGQoJGxlZnQsICRyaWdodD00KSB7DQogICAgaWYgKCRyaWdodCAtbmUgNCkgew0KICAgICAgICByZXR1cm4gJGxlZnQNCiAgICB9IGVsc2VpZiAoJGxlZnQgLWVxICRudWxsIC1hbmQgJHJpZ2h0IC1lcSAyKSB7DQogICAgICAgIHJldHVybiAzDQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuIDINCiAgICB9DQp9DQoNCiRudW1iZXIgPSAxICsgMjsNCiRudW1iZXIgKz0gMw0KDQpXcml0ZS1Ib3N0IEhlbGxvIC1uYW1lICJXb3JsZCINCg0KJGFuX2FycmF5ID0gQCgxLCAyLCAzKQ0KJGFfaGFzaCA9IEB7InNvbWV0aGluZyIgPSAic29tZXRoaW5nIGVsc2UifQ0KDQomIG5vdGVwYWQgLlxyZWFkbWUubWQNCg==]]></data>
	</file>
	<file>
	  <filename>/samples/prolog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cGFydGl0aW9uKFtdLCBfLCBbXSwgW10pLg0KcGFydGl0aW9uKFtYfFhzXSwgUGl2b3QsIFNtYWxscywgQmlncykgOi0NCiAgICAoICAgWCBAPCBQaXZvdCAtPg0KICAgICAgICBTbWFsbHMgPSBbWHxSZXN0XSwNCiAgICAgICAgcGFydGl0aW9uKFhzLCBQaXZvdCwgUmVzdCwgQmlncykNCiAgICA7ICAgQmlncyA9IFtYfFJlc3RdLA0KICAgICAgICBwYXJ0aXRpb24oWHMsIFBpdm90LCBTbWFsbHMsIFJlc3QpDQogICAgKS4NCiANCnF1aWNrc29ydChbXSkgICAgIC0tPiBbXS4NCnF1aWNrc29ydChbWHxYc10pIC0tPg0KICAgIHsgcGFydGl0aW9uKFhzLCBYLCBTbWFsbGVyLCBCaWdnZXIpIH0sDQogICAgcXVpY2tzb3J0KFNtYWxsZXIpLCBbWF0sIHF1aWNrc29ydChCaWdnZXIpLg0KDQpwZXJmZWN0KE4pIDotDQogICAgYmV0d2VlbigxLCBpbmYsIE4pLCBVIGlzIE4gLy8gMiwNCiAgICBmaW5kYWxsKEQsIChiZXR3ZWVuKDEsVSxEKSwgTiBtb2QgRCA9Oj0gMCksIERzKSwNCiAgICBzdW1saXN0KERzLCBOKS4=]]></data>
	</file>
	<file>
	  <filename>/samples/properties.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBZb3UgYXJlIHJlYWRpbmcgdGhlICIucHJvcGVydGllcyIgZW50cnkuDQohIFRoZSBleGNsYW1hdGlvbiBtYXJrIGNhbiBhbHNvIG1hcmsgdGV4dCBhcyBjb21tZW50cy4NCiMgVGhlIGtleSBhbmQgZWxlbWVudCBjaGFyYWN0ZXJzICMsICEsID0sIGFuZCA6IGFyZSB3cml0dGVuIHdpdGggYSBwcmVjZWRpbmcgYmFja3NsYXNoIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIHByb3Blcmx5IGxvYWRlZC4NCndlYnNpdGUgPSBodHRwXDovL2VuLndpa2lwZWRpYS5vcmcvDQpsYW5ndWFnZSA9IEVuZ2xpc2gNCiMgVGhlIGJhY2tzbGFzaCBiZWxvdyB0ZWxscyB0aGUgYXBwbGljYXRpb24gdG8gY29udGludWUgcmVhZGluZw0KIyB0aGUgdmFsdWUgb250byB0aGUgbmV4dCBsaW5lLg0KbWVzc2FnZSA9IFdlbGNvbWUgdG8gXA0KICAgICAgICAgIFdpa2lwZWRpYSENCiMgQWRkIHNwYWNlcyB0byB0aGUga2V5DQprZXlcIHdpdGhcIHNwYWNlcyA9IFRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgY291bGQgYmUgbG9va2VkIHVwIHdpdGggdGhlIGtleSAia2V5IHdpdGggc3BhY2VzIi4NCiMgVW5pY29kZQ0KdGFiIDogXHUwMDA5DQplbXB0eS1rZXk9DQpsYXN0LmxpbmU9dmFsdWUNCg==]]></data>
	</file>
	<file>
	  <filename>/samples/protobuf.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[bWVzc2FnZSBQb2ludCB7DQogIHJlcXVpcmVkIGludDMyIHggPSAxOw0KICByZXF1aXJlZCBpbnQzMiB5ID0gMjsNCiAgb3B0aW9uYWwgc3RyaW5nIGxhYmVsID0gMzsNCn0NCg0KbWVzc2FnZSBMaW5lIHsNCiAgcmVxdWlyZWQgUG9pbnQgc3RhcnQgPSAxOw0KICByZXF1aXJlZCBQb2ludCBlbmQgPSAyOw0KICBvcHRpb25hbCBzdHJpbmcgbGFiZWwgPSAzOw0KfQ0KDQptZXNzYWdlIFBvbHlsaW5lIHsNCiAgcmVwZWF0ZWQgUG9pbnQgcG9pbnQgPSAxOw0KICBvcHRpb25hbCBzdHJpbmcgbGFiZWwgPSAyOw0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/python.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2xvY2FsL2Jpbi9weXRob24NCg0KaW1wb3J0IHN0cmluZywgc3lzDQoNCiMgSWYgbm8gYXJndW1lbnRzIHdlcmUgZ2l2ZW4sIHByaW50IGEgaGVscGZ1bCBtZXNzYWdlDQppZiBsZW4oc3lzLmFyZ3YpPT0xOg0KICAgIHByaW50ICcnJ1VzYWdlOg0KY2Vsc2l1cyB0ZW1wMSB0ZW1wMiAuLi4nJycNCiAgICBzeXMuZXhpdCgwKQ0KDQojIExvb3Agb3ZlciB0aGUgYXJndW1lbnRzDQpmb3IgaSBpbiBzeXMuYXJndlsxOl06DQogICAgdHJ5Og0KICAgICAgICBmYWhyZW5oZWl0PWZsb2F0KHN0cmluZy5hdG9pKGkpKQ0KICAgIGV4Y2VwdCBzdHJpbmcuYXRvaV9lcnJvcjoNCiAgICAgICAgcHJpbnQgcmVwcihpKSwgIm5vdCBhIG51bWVyaWMgdmFsdWUiDQogICAgZWxzZToNCiAgICAgICAgY2Vsc2l1cz0oZmFocmVuaGVpdC0zMikqNS4wLzkuMA0KICAgICAgICBwcmludCAnJWlcMjYwRiA9ICVpXDI2MEMnICUgKGludChmYWhyZW5oZWl0KSwgaW50KGNlbHNpdXMrLjUpKQ==]]></data>
	</file>
	<file>
	  <filename>/samples/r.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q2FsbDoNCmxtKGZvcm11bGEgPSB5IH4geCkNCiANClJlc2lkdWFsczoNCjEgICAgICAgMiAgICAgICAzICAgICAgIDQgICAgICAgNSAgICAgICA2DQozLjMzMzMgLTAuNjY2NyAtMi42NjY3IC0yLjY2NjcgLTAuNjY2NyAgMy4zMzMzDQogDQpDb2VmZmljaWVudHM6DQogICAgICAgICAgICBFc3RpbWF0ZSBTdGQuIEVycm9yIHQgdmFsdWUgUHIoPnx0fCkNCihJbnRlcmNlcHQpICAtOS4zMzMzICAgICAyLjg0NDEgIC0zLjI4MiAwLjAzMDQ1MyAqDQp4ICAgICAgICAgICAgIDcuMDAwMCAgICAgMC43MzAzICAgOS41ODUgMC4wMDA2NjIgKioqDQotLS0NClNpZ25pZi4gY29kZXM6ICAwIOKAmCoqKuKAmSAwLjAwMSDigJgqKuKAmSAwLjAxIOKAmCrigJkgMC4wNSDigJgu4oCZIDAuMSDigJgg4oCZIDENCiANClJlc2lkdWFsIHN0YW5kYXJkIGVycm9yOiAzLjA1NSBvbiA0IGRlZ3JlZXMgb2YgZnJlZWRvbQ0KTXVsdGlwbGUgUi1zcXVhcmVkOiAwLjk1ODMsICAgICBBZGp1c3RlZCBSLXNxdWFyZWQ6IDAuOTQ3OA0KRi1zdGF0aXN0aWM6IDkxLjg4IG9uIDEgYW5kIDQgREYsICBwLXZhbHVlOiAwLjAwMDY2Mg0KIA0KPiBwYXIobWZyb3c9YygyLCAyKSkgICAgICMgUmVxdWVzdCAyeDIgcGxvdCBsYXlvdXQNCj4gcGxvdChsbV8xKSAgICAgICAgICAgICAjIERpYWdub3N0aWMgcGxvdCBvZiByZWdyZXNzaW9uIG1vZGVs]]></data>
	</file>
	<file>
	  <filename>/samples/rdoc.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[XG5hbWV7cGlja2VyfQ0KXGFsaWFze3BpY2tlcn0NClx0aXRsZXtDcmVhdGUgYSBwaWNrZXIgY29udHJvbH0NClxkZXNjcmlwdGlvbnsNCiAgQ3JlYXRlIGEgcGlja2VyIGNvbnRyb2wgdG8gZW5hYmxlIG1hbmlwdWxhdGlvbiBvZiBwbG90IHZhcmlhYmxlcyBiYXNlZCBvbiBhIHNldCBvZiBmaXhlZCBjaG9pY2VzLg0KfQ0KDQpcdXNhZ2V7DQpwaWNrZXIoLi4uLCBpbml0aWFsID0gTlVMTCwgbGFiZWwgPSBOVUxMKQ0KfQ0KDQoNClxhcmd1bWVudHN7DQogIFxpdGVte1xkb3RzfXsNCiAgICBBcmd1bWVudHMgY29udGFpbmluZyBvYmplY3RzIHRvIGJlIHByZXNlbnRlZCBhcyBjaG9pY2VzIGZvciB0aGUgcGlja2VyIChvciBhIGxpc3QgY29udGFpbmluZyB0aGUgY2hvaWNlcykuIElmIGFuIGVsZW1lbnQgaXMgbmFtZWQgdGhlbiB0aGUgbmFtZSBpcyB1c2VkIHRvIGRpc3BsYXkgaXQgd2l0aGluIHRoZSBwaWNrZXIuIElmIGFuIGVsZW1lbnQgaXMgbm90IG5hbWVkIHRoZW4gaXQgaXMgZGlzcGxheWVkIHdpdGhpbiB0aGUgcGlja2VyIHVzaW5nIFxjb2Rle1xsaW5re2FzLmNoYXJhY3Rlcn19LiANCn0NCiAgXGl0ZW17aW5pdGlhbH17DQogICAgSW5pdGlhbCB2YWx1ZSBmb3IgcGlja2VyLiBWYWx1ZSBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGxpc3Qgb2YgY2hvaWNlcyBzcGVjaWZpZWQuIElmIG5vdCBzcGVjaWZpZWQgZGVmYXVsdHMgdG8gdGhlIGZpcnN0IGNob2ljZS4NCn0NCiAgXGl0ZW17bGFiZWx9ew0KICAgIERpc3BsYXkgbGFiZWwgZm9yIHBpY2tlci4gRGVmYXVsdHMgdG8gdGhlIHZhcmlhYmxlIG5hbWUgaWYgbm90IHNwZWNpZmllZC4NCn0NCn0NCg0KXHZhbHVlew0KICBBbiBvYmplY3Qgb2YgY2xhc3MgIm1hbmlwdWxhdG9yLnBpY2tlciIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgXGNvZGV7XGxpbmt7bWFuaXB1bGF0ZX19IGZ1bmN0aW9uLg0KfQ0KDQpcc2VlYWxzb3sNClxjb2Rle1xsaW5re21hbmlwdWxhdGV9fSwgXGNvZGV7XGxpbmt7c2xpZGVyfX0sIFxjb2Rle1xsaW5re2NoZWNrYm94fX0sIFxjb2Rle1xsaW5re2J1dHRvbn19DQp9DQoNCg0KXGV4YW1wbGVzew0KXGRvbnRydW57DQoNCiMjIEZpbHRlcmluZyBkYXRhIHdpdGggYSBwaWNrZXINCm1hbmlwdWxhdGUoDQogIGJhcnBsb3QoYXMubWF0cml4KGxvbmdsZXlbLGZhY3Rvcl0pLCANCiAgICAgICAgICBiZXNpZGUgPSBUUlVFLCBtYWluID0gZmFjdG9yKSwNCiAgZmFjdG9yID0gcGlja2VyKCJHTlAiLCAiVW5lbXBsb3llZCIsICJFbXBsb3llZCIpKQ0KDQojIyBDcmVhdGUgYSBwaWNrZXIgd2l0aCBsYWJlbHMNCm1hbmlwdWxhdGUoDQogIHBsb3QocHJlc3N1cmUsIHR5cGUgPSB0eXBlKSwgDQogIHR5cGUgPSBwaWNrZXIoInBvaW50cyIgPSAicCIsICJsaW5lIiA9ICJsIiwgInN0ZXAiID0gInMiKSkNCiAgDQojIyBQaWNrZXIgd2l0aCBncm91cHMNCm1hbmlwdWxhdGUoDQogIGJhcnBsb3QoYXMubWF0cml4KG10Y2Fyc1tncm91cCwibXBnIl0pLCBiZXNpZGU9VFJVRSksDQogIGdyb3VwID0gcGlja2VyKCJHcm91cCAxIiA9IDE6MTEsIA0KICAgICAgICAgICAgICAgICAiR3JvdXAgMiIgPSAxMjoyMiwgDQogICAgICAgICAgICAgICAgICJHcm91cCAzIiA9IDIzOjMyKSkNCg0KIyMgSGlzdG9ncmFtIHcvIHBpY2tlciB0byBzZWxlY3QgdHlwZQ0KcmVxdWlyZShsYXR0aWNlKQ0KcmVxdWlyZShzdGF0cykNCm1hbmlwdWxhdGUoDQogIGhpc3RvZ3JhbSh+IGhlaWdodCB8IHZvaWNlLnBhcnQsIA0KICAgICAgICAgICAgZGF0YSA9IHNpbmdlciwgdHlwZSA9IHR5cGUpLA0KICB0eXBlID0gcGlja2VyKCJwZXJjZW50IiwgImNvdW50IiwgImRlbnNpdHkiKSkNCg0KfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/rhtml.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWw+DQo8IS0tDQoNCkhlbGxvIGZ1dHVyZSBHaXRIdWJiZXIhIEkgYmV0IHlvdSdyZSBoZXJlIHRvIHJlbW92ZSB0aG9zZSBuYXN0eSBpbmxpbmUgc3R5bGVzLA0KRFJZIHVwIHRoZXNlIHRlbXBsYXRlcyBhbmQgbWFrZSAnZW0gbmljZSBhbmQgcmUtdXNhYmxlLCByaWdodD8NCg0KUGxlYXNlLCBkb24ndC4gaHR0cHM6Ly9naXRodWIuY29tL3N0eWxlZ3VpZGUvdGVtcGxhdGVzLzIuMA0KDQotLT4NCjxodG1sPg0KICA8aGVhZD4NCiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+DQogICAgPHRpdGxlPlBhZ2Ugbm90IGZvdW5kICZtaWRkb3Q7IEdpdEh1YiBQYWdlczwvdGl0bGU+DQogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4NCiAgICAgIGJvZHkgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjFmMWYxOw0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiSGVsdmV0aWNhIE5ldWUiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgICAgfQ0KDQogICAgICAuY29udGFpbmVyIHsgbWFyZ2luOiA1MHB4IGF1dG8gNDBweCBhdXRvOyB3aWR0aDogNjAwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KDQogICAgICBhIHsgY29sb3I6ICM0MTgzYzQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KICAgICAgYTpob3ZlciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyB9DQoNCiAgICAgIGgxIHsgd2lkdGg6IDgwMHB4OyBwb3NpdGlvbjpyZWxhdGl2ZTsgbGVmdDogLTEwMHB4OyBsZXR0ZXItc3BhY2luZzogLTFweDsgbGluZS1oZWlnaHQ6IDYwcHg7IGZvbnQtc2l6ZTogNjBweDsgZm9udC13ZWlnaHQ6IDEwMDsgbWFyZ2luOiAwcHggMCA1MHB4IDA7IHRleHQtc2hhZG93OiAwIDFweCAwICNmZmY7IH0NCiAgICAgIHAgeyBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpOyBtYXJnaW46IDIwcHggMDsgbGluZS1oZWlnaHQ6IDEuNjsgfQ0KDQogICAgICB1bCB7IGxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdpbjogMjVweCAwOyBwYWRkaW5nOiAwOyB9DQogICAgICBsaSB7IGRpc3BsYXk6IHRhYmxlLWNlbGw7IGZvbnQtd2VpZ2h0OiBib2xkOyB3aWR0aDogMSU7IH0NCg0KICAgICAgLmxvZ28geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi10b3A6IDM1cHg7IH0NCiAgICAgIC5sb2dvLWltZy0yeCB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgICAgIEBtZWRpYQ0KICAgICAgb25seSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLA0KICAgICAgb25seSBzY3JlZW4gYW5kICggICBtaW4tLW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLA0KICAgICAgb25seSBzY3JlZW4gYW5kICggICAgIC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIvMSksDQogICAgICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgbWluLWRldmljZS1waXhlbC1yYXRpbzogMiksDQogICAgICBvbmx5IHNjcmVlbiBhbmQgKCAgICAgICAgICAgICAgICBtaW4tcmVzb2x1dGlvbjogMTkyZHBpKSwNCiAgICAgIG9ubHkgc2NyZWVuIGFuZCAoICAgICAgICAgICAgICAgIG1pbi1yZXNvbHV0aW9uOiAyZHBweCkgew0KICAgICAgICAubG9nby1pbWctMXggeyBkaXNwbGF5OiBub25lOyB9DQogICAgICAgIC5sb2dvLWltZy0yeCB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQ0KICAgICAgfQ0KDQogICAgICAjc3VnZ2VzdGlvbnMgew0KICAgICAgICBtYXJnaW4tdG9wOiAzNXB4Ow0KICAgICAgICBjb2xvcjogI2NjYzsNCiAgICAgIH0NCiAgICAgICNzdWdnZXN0aW9ucyBhIHsNCiAgICAgICAgY29sb3I6ICM2NjY2NjY7DQogICAgICAgIGZvbnQtd2VpZ2h0OiAyMDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgbWFyZ2luOiAwIDEwcHg7DQogICAgICB9DQoNCiAgICA8L3N0eWxlPg0KICA8L2hlYWQ+DQogIDxib2R5Pg0KDQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCg0KICAgICAgPGgxPjQwNDwvaDE+DQogICAgICA8cD48c3Ryb25nPlRoZXJlIGlzbid0IGEgR2l0SHViIFBhZ2UgaGVyZS48L3N0cm9uZz48L3A+DQoNCiAgICAgIDxwPjxlbT5BcmUgeW91IHRyeWluZyB0byBwdWJsaXNoIG9uZT88L2VtPg0KICAgICAgICBJdCBtYXkgdGFrZSB1cCB0byB0ZW4gbWludXRlcyB1bnRpbCB5b3VyIHBhZ2UgaXMgYXZhaWxhYmxlLg0KICAgICAgPC9wPg0KDQogICAgICA8cD4NCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vY2F0ZWdvcmllcy8yMC9hcnRpY2xlcyI+UmVhZCB0aGUgZnVsbCBkb2N1bWVudGF0aW9uPC9hPg0KICAgICAgICB0byBsZWFybiBob3cgdG8gc2V0IHVwIDxzdHJvbmc+R2l0SHViIFBhZ2VzPC9zdHJvbmc+PGJyIC8+DQogICAgICAgIGZvciB5b3VyIHJlcG9zaXRvcnksIG9yZ2FuaXphdGlvbiwgb3IgdXNlciBhY2NvdW50Lg0KICAgICAgPC9wPg0KDQogICAgICA8ZGl2IGlkPSJzdWdnZXN0aW9ucyI+DQogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jb250YWN0Ij5Db250YWN0IFN1cHBvcnQ8L2E+ICZtZGFzaDsNCiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdGF0dXMuZ2l0aHViLmNvbSI+R2l0SHViIFN0YXR1czwvYT4gJm1kYXNoOw0KICAgICAgICA8YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2dpdGh1YnN0YXR1cyI+QGdpdGh1YnN0YXR1czwvYT4NCiAgICAgIDwvZGl2Pg0KDQogICAgICA8YSBocmVmPSIvIiBjbGFzcz0ibG9nbyBsb2dvLWltZy0xeCI+DQogICAgICAgIDxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB0aXRsZT0iIiBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNBQUFBQWdDQVlBQUFCemVucjBBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlScFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TXkxak1ERXhJRFkyTGpFME5UWTJNU3dnTWpBeE1pOHdNaTh3TmkweE5EbzFOam95TnlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5pQW9UV0ZqYVc1MGIzTm9LU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBGTVRaQ1JEWTNSRUl6UmpBeE1VVXlRVVF6UkVJeFF6UkVOVUZGTlVNNU5pSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEZNVFpDUkRZM1JVSXpSakF4TVVVeVFVUXpSRUl4UXpSRU5VRkZOVU01TmlJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rVXhOa0pFTmpkQ1FqTkdNREV4UlRKQlJETkVRakZETkVRMVFVVTFRemsySWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tVeE5rSkVOamREUWpOR01ERXhSVEpCUkRORVFqRkRORVExUVVVMVF6azJJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrU005TUNBQUFBKzVKUkVGVWVOckVWMTFJazFFWTNzNCtkZE9wMjlRNWIwb3BDZ0tGc29Lb2k1S2c2Q0lodXdpNnpMSkxvWUxvcHE0cXNLS2dpNGk2Q1lJb1UvcTVpREFLczZzeW9TNzZJUld0eUorcDdjZHQ3c2YxUEdPRCtlMGMzZHlnQXgvNjdaenpQTTk1Lzg3N0dZZEhSZzNaak1YRnhlcFFLTlM2c0xDd0p4cU5OdUZwaU1malZzNFpqVWEvcG1tamVENlZsSlM4TnB2TlQ0UVE3bXh3alNzSmlFUWltLzErLzlsZ01IZ0lyNW9odXhHMVdDdzlWcXYxY2xGUjBkQ3FCT0RFbFY2djkwb2dFRGpHZFliVmpYaHBhZW5kaW9xSzA3Q0lSN1pBcUU0OVBUMDlCUEwyUE1nVEJ5UUdzWWlabFFENHVNWHRkcitKeFdJTmhnSU5ZaEdUMk1zS2dNcm0yZG5aWGdSWGhhSEFnNWpFSm9kVUFIeHV4NEx1ZEhKRTlSZEVkQStpM0p1ejdiR0hlNG1oRTlGTnJnd0JDTGlyTUZWOU9raDVlZmxGaDhQUjVuSzVuRGFiclIyQk5KbEtPMFQzNStMaTRuNCsvSisvSlFDeGhtdTVoM3VKb1hOSFBibVdaQUhNc2hXQjhsNS9pcHFhbW1hQWYwelBERHgxT05WM3Z1cmRpZHF3QVFMK3BFYzhzTGNBZTFDQ3ZRM1lIeElXOFBsODV4U1dOQzFoQURESXYwcklFL280SjBrM2t3dzR4U2x3SWhjcTNFRkZPbTdLTi9oVUdPUWt0MENGYTVXcE5KbE12eEJFei9JVlFBeGcvWlJabDl3aUhBNjN5RFlpZU03RG5MUDVDaUFHc0M3STVzZ3RZS0pHV2UyQThzZUZxZ0ZKckpqRVBZMUNuM3BKOC85VzFlNVZXc0ZEVEVtRnJCY29EaFpKRVFrWHVoSUNNeUtwamhhaHFOMjFoUllBVEtmVU9sRG1reWdyUjRvNEMwVk9MR0pLck9JVEtCNGppanpkWHlnQktpeHlDNVREUWRuay9QejhxUnc2b09XR2xzVEtHT1FXNk9INkZCV3N5ZVB4ZE9YTFRneGl5ZWJJTFpDanorR0xnTUlLblhOemM0OVlNbGNSZEhYY1N3eEZWZ1RJblFoQzlHMzNVaE5vSkx1cXE2dDM0NXA5eTNlVXk4T1RrNVBqQUh1STl1bzRiMDdGQmFPaHN1MEE0VW5jK1QxVFUxTmozS3NTU0U1eUo2NWpxRjJERGQ4UXFXWW1BWnJJTTJWbFpUZG5abWI2QWJwZFY5VjZlYzl6bmY1UTdIall1bWRSRTBKT3AzTWppdE80U0ZhK2NaejhVbXFlM1RDYlNMdmRma1Iva1dEZE5RbDVJbnVUY3lzT2NwRlQzNVpyYkJ4eDRwM0pBSGxaVlZXMUQvNjM0VlJ0K0Z2TEJnSy92NUxWOVdTKzEweE1URXd0Unc3WHZxT0wrZTJROFYzQVlJT0lBWFEyNi9oZVdWblpDVmZjeUtIZzJDQmdUcG1QbWpZTThsMjRHeWFVSHlhSWg3WHdmUjlFckU4cUhvRGZuMkxUTkFWQzBIWDZNRmNCSVA4QmkrNkY2Y2RXL0RJQ2tBTlJmeDk5ZkVZRlE3TnBoNWkvdVFpQTIxNGdubzdLK2d1aGFpS2c5Z0M2MitNOGVSN1hzQnNZSjRpbGFtNjBGYjdyN3VBajh3Rnl1d00xb0lPV2dmbUR5NlJYRUVRekpNUGUyM0RYclZTN3J0eUQzRGY4ei9GUGdBRUF6V1U1S3U1OVpBVUFBQUFBU1VWT1JLNUNZSUk9IiAvPg0KICAgICAgPC9hPg0KDQogICAgICA8YSBocmVmPSIvIiBjbGFzcz0ibG9nbyBsb2dvLWltZy0yeCI+DQogICAgICAgIDxpbWcgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB0aXRsZT0iIiBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUVBQUFBQkFDQVlBQUFDcWFYSGVBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlScFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TXkxak1ERXhJRFkyTGpFME5UWTJNU3dnTWpBeE1pOHdNaTh3TmkweE5EbzFOam95TnlBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5pQW9UV0ZqYVc1MGIzTm9LU0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBFUVVNMVFrVXhSVUkwTVVNeE1VVXlRVVF6UkVJeFF6UkVOVUZGTlVNNU5pSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEVRVU0xUWtVeFJrSTBNVU14TVVVeVFVUXpSRUl4UXpSRU5VRkZOVU01TmlJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09rVXhOa0pFTmpkR1FqTkdNREV4UlRKQlJETkVRakZETkVRMVFVVTFRemsySWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2tVeE5rSkVOamd3UWpOR01ERXhSVEpCUkRORVFqRkRORVExUVVVMVF6azJJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgraGZQUmFRQUFCNmxKUkVGVWVOcnNXMm1NRTJVWWJvZHR0KzIyMjJ1MzVRaGVvQ0NZR0JRbGlnSUpna1pKTlB6Z2lnb2FURWo4QWRGRU1mQURmeUFCa2dXaWlXY2llSzRTK1FPaUhBWVVqMmhNTktnWWxFdWpwTnR0dTl2dHRidmR3K2NoVTFLNk01MzVwdDN1YkhDU3llelIrYjczZWI3Myt0N3ZyZlhzdWZPVzRiejYrdm9tOS9iMjNvdm5OTnczNGI1eFlHQWdPRGc0Nk1idDRtZXNWbXNXZDFxU3BIaGRYZDJmdVAvQWZjcHV0NS9BODh4d3ltY2RCZ0xxZW5wNkZ1Unl1V1Y0enUvdjc1OVF5V0JqeG96NXQ3NisvZ3VuMDltSzV4Rnlha29DQVBTYVRDYXpOcHZOUG9ZVmJoNk8xWUtHUkYwdTEzc05EUTI3UU16ZnBpQUFLajBsblU2L2dCVmZBWlcyV1dwd3dWenkwSWdQM0c3M0Zwakk2UkVoQUdBOXFWUnFBMWI5bVZvQlZ5SUMydERpOFhnMjQrZFV6UWlBYlMvczdPeDhHMm8vM21LQ0MrWncwZWZ6UFFFZmNWallyQVJYM2RiVjFiVXRIbzhmTWd0NDJmK01wMHlVVFZRYmRXc0FIVnNpa2RpSGtIYVB4Y1FYUXVmWGdVQmdNUnhtZTlVMEFBeGZINHZGdmpNN2VGNlVrYkpTNXFvUXdFUUdBNTdBYzVKbGxGeVVWWlo1Y2tVRWdNVnhzSzJqbFNZekkrUVhKc2l5anpORUFKeUpBemIvS1FhNDFqSktMOHBPRE1RaVRFQXltWHc1bjgvUDBJakQzYmg3UmdvZzU5YWFueGlJUlRWdlYvb2owdG5IY2EvV01yVndPRHdCM3JhVEd4emtCZy9nblpWYXBGVjYyV3kybjVBTzcwSE0vNXdiSjBRblh5UVNhVlBESXVOWnpZMFYzbnRITXd4aXdIQTBHajJOcDdlY0lCRGdhREFZWEtDUUpNMURocmdKM25odWxjUGJsOGo0Tm1IZTQ2WC9nNjBmd2J6M2Fld2prcUZRYUFxZWJXVTFBT3F5UXd0OElkNnFFSE1jOTd6dTd1N0ZHR3NuN0hBaVZ1b3NWdzdQMzVDMW5jY2RnU0N4b3AxZEhlWnN3bWZITW54Qm82WlRrK2pOOGRsL3ZGN3ZXb2ZEc2ErTUxOOW9FVUJNeE9iMysxZW9Fc0JWdzZabXVhNDlyOFltaEFLRGlFUGNNd0JzeE1pcVEraXh6UEZ4WnlxUnBYQVJHL1lPcjFPYkZKMGdVc2tYQmJhbWNSMU9LbU1VdkR4SFJBdTgvTG1ZM2pGTE1VcEZxejlIeEc2NXNtWUpkeUt5RUNPeERpRUFlL3AxZ2pGMm9vbml2WkFzeFZnbDJkYWE0RVFXQ1c2SjU1cUZBRkZaaUpXWUx4TlF5MnFPU1V6R1JzeVhDVURJZWxpd0FIRU80V1NsV1FCUkZvWmFrWGNLbUNYbXlYQUtzMFZlOXZsOHE0MldvSVlwSlU0aFYzaEtjTnM4bTlnbDdwL3hRNzNlRjVrQjRqNW1OcldtVEpSTndBenFpVjFDeGpWVFpDSWtFcStaMWJaRlpTTjJDZW5tVkFGVnk0UGx6OHhLQUdXampBS0ZrNmxDQk1EUi9NSmpMTE1TUU5tNDN4QWlRS1RhQSs5L3dld2hEakwrSlZJMWtrVFNTT1RjS2JNVHdQcUVTQW90NmRuNkZyMWdId1ZKanU2SVJ1eWlCeVB1VVVCQWc1REdrQWdCbXhsdmRnSUVLOWdEa29oZFkvQkpvNENBRzBSOG1pUlNzR0FCa2dWUXM0S1h1MDk4SWdVWFNTUnNGQW9LWmlWQVZEWTJXVWlpUFRqWVJpNDFLd0dpc3JHc0x0bHN0aDhGaXduejJmQmtRdldmUnRsRTNpRjJ5VzYzL3lDYWNYWjFkVzAyR3dHeVRGYVJkNGlkSm5DS0hSYUN4WVJIb0c1TFRLVDZTeWlUb1AxZkpIYm1BWVBZUlIwVW5aUXRNbkE2czB6ZytHWkJsdDBHZG83RVBIZ3BFM1E2blo4WXlMaGM4WGo4TUpoL2FLVEFZKzVGUEFLSExFN1Jkd3VZSlptTnd6eUNNa0JDWXlLUk9KQk1KbDlCL1BYWENqam1DbURPVnpIM2ZpUHBPYkVXR3FvS2U0RUJsOHYxaGxxc2RMdmQyM21reEhNOXBjOWtNcG1ubzlIb2VUaWk3ZXdiSEVaUFB4MXp0TFMxdFYzQW5HdU1qaU5qdmJRRnVIdzZ6RG81Qnk3ZFRQQVFOQmdNTHJSYXJUa1NsczFtbndUN3V3cDl2aXJ4OVF6YlcvSHVWL2o1ZC9iKzZqbmlLbGxsUDhsa2VPTkpEaytkcTlHc1FUbkM0ZkIxaGVPMEs0N0h3ZTdXZERyOW5BS2dYd09Cd0hJK0M0NUh0ajFkNnNkNDI5VFVORWNtVWRjK1BSYUxIY3ZuODdkWFc0dWd6ZHNhR3h1Zkw5NE5Gdjl6aTFKN0dWYmhsdmIyZG5hSjNTVnJ4ZmMrbjIrTlRzWjcvSDcvTXIzZzVYZFNJSHlKU0gxUForN2ZUb3lsMitFcnFpbGdaNE5hTFlCOWdvVkdhSGpSOTNIdjFaclU0WERzRlQyMGtIM1BPYnpiV2swQ2dHMWphY1ZJVW5BUWI5RitWZXh5TE16a3BjTHYwSUpWN0FIUUlPQ0FVWUh4N3Y1cWdTY21ZSHRUcVNBeVpMRUpUSzIyQmllNGlxM3hzcXBtNFNBZjlIcTlhMkRuSjR1TEszU0VVTGNkUnZwM2kzekh5U3FwZmljeEVkc1FjMU5ybFlYWHZSK083cUFTU2V6WEIraDFTdVVvbWdnOUxMOEJVb1Y0NzQ5RUlvbEtoK0VpcVdtcVZFWmxEZ0hrczJweEh3N3hUcVVRdzlKNU5jQVhPSzEwQUdJb1o2WmxpNkpZNloxUTQ2MUtvWjROaUtMSGFyVytLRHN4bERVUEhaNXpQUVpxVVZEUEpzVHFiNW45bWFsYnBBaDhDMlhYRExsNjIrV1pJREZSVWxOVk9pd2VuY25OVTNhUUVrTCtjRE1Tb0x2Wm8yZlFCN0FKc3NOQXVGdXZvcmxEVlZra2cySTg3K2pvMksyUUFWcGhEcmZ5VmlLNVZxdE8zNE9rYXhYQ3ArN2RyZERCQ0FkdWJtNmVpZFgrMld3cVQ1a29td2g0WVFMaytINGFFOTNoOFhnMmd2SGVrUVpPR1NnTFpUTHlEVExKNEx4OS9LWldLQlNhaW5UNEl5M0ZxUUJmblVaUjQyUEtRRmtzQnI5UUtWWENQdXNEM09pQS9Sa1E1a1A4cVYvSmwxV3l3QXAvNitkY21QTTJ6TDFVclVhaGU0SnFmbldXS1hJdWwzdVViZlA4bmpBRkxXMU9GcjNnZEZ0WjcyY05IK1B0UVQ3L2JyVytOWHFKQUhoMHk5VjgvVS9BMVU3QWZ3SU1BRDdtUzNwQ2J1V0pBQUFBQUVsRlRrU3VRbUNDIiAvPg0KICAgICAgPC9hPg0KICAgIDwvZGl2Pg0KICA8L2JvZHk+DQo8L2h0bWw+DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/ruby.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9ydWJ5DQoNCiMgUHJvZ3JhbSB0byBmaW5kIHRoZSBmYWN0b3JpYWwgb2YgYSBudW1iZXINCmRlZiBmYWN0KG4pDQogICAgaWYgbiA9PSAwDQogICAgICAgIDENCiAgICBlbHNlDQogICAgICAgIG4gKiBmYWN0KG4tMSkNCiAgICBlbmQNCmVuZA0KDQpwdXRzIGZhY3QoQVJHVlswXS50b19pKQ0KDQpjbGFzcyBSYW5nZQ0KICBkZWYgdG9fanNvbigqYSkNCiAgICB7DQogICAgICAnanNvbl9jbGFzcycgICA9PiBzZWxmLmNsYXNzLm5hbWUsICMgPSAnUmFuZ2UnDQogICAgICAnZGF0YScgICAgICAgICA9PiBbIGZpcnN0LCBsYXN0LCBleGNsdWRlX2VuZD8gXQ0KICAgIH0udG9fanNvbigqYSkNCiAgZW5kDQplbmQNCg0KezppZCA9PiAzNCwgOmtleSA9PiAidmFsdWUifQ0KDQoNCiAgICBoZXJEb2NzID0gWzw8J0ZPTycsIDw8QkFSLCA8PC1CQVosIDw8LWBFWEVDYF0gI2NvbW1lbnQNCiAgRk9PICN7bGl0ZXJhbH0NCkZPTw0KICBCQVIgI3tmYWN0KDEwKX0NCkJBUg0KICBCQVogaW5kZW50ZWQNCiAgICBCQVoNCiAgICAgICAgZWNobyBoaQ0KICAgIEVYRUMNCnB1dHMgaGVyRG9jcw==]]></data>
	</file>
	<file>
	  <filename>/samples/rust.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dXNlIGNvcmU6OnJhbmQ6OlJuZ1V0aWw7DQoNCmZuIG1haW4oKSB7DQogICAgZm9yIFsiQWxpY2UiLCAiQm9iIiwgIkNhcm9sIl0uZWFjaCB8Jm5hbWV8IHsNCiAgICAgICAgZG8gc3Bhd24gew0KICAgICAgICAgICAgbGV0IHYgPSByYW5kOjpSbmcoKS5zaHVmZmxlKFsxLCAyLCAzXSk7DQogICAgICAgICAgICBmb3Igdi5lYWNoIHwmbnVtfCB7DQogICAgICAgICAgICAgICAgcHJpbnQoZm10ISgiJXMgc2F5czogJyVkJ1xuIiwgbmFtZSwgbnVtICsgMSkpDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmZuIG1hcDxULCBVPih2ZWN0b3I6ICZbVF0sIGZ1bmN0aW9uOiAmZm4odjogJlQpIC0+IFUpIC0+IH5bVV0gew0KICAgIGxldCBtdXQgYWNjdW11bGF0b3IgPSB+W107DQogICAgZm9yIHZlYzo6ZWFjaCh2ZWN0b3IpIHxlbGVtZW50fCB7DQogICAgICAgIGFjY3VtdWxhdG9yLnB1c2goZnVuY3Rpb24oZWxlbWVudCkpOw0KICAgIH0NCiAgICByZXR1cm4gYWNjdW11bGF0b3I7DQp9DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/sass.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gc2FzcyBhY2UgbW9kZTsNCg0KQGltcG9ydCB1cmwoaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9QWNlOjcwMCkNCg0KaHRtbCwgYm9keQ0KICA6YmFja2dyb3VuZC1jb2xvciAjYWNlDQogIHRleHQtYWxpZ246IGNlbnRlcg0KICBoZWlnaHQ6IDEwMCUNCiAgLyo7KioqKioqKioqOw0KICAgIDtjb21tZW50ICA7DQogICAgOyoqKioqKioqKjsNCg0KLnRvZ2dsZQ0KICAkc2l6ZTogMTRweA0KDQogIDpiYWNrZ3JvdW5kIHVybChodHRwOi8vc3VidGxlcGF0dGVybnMuY29tL3BhdHRlcm5zL2Rhcmtfc3RyaXBlcy5wbmcpDQogIGJvcmRlci1yYWRpdXM6IDhweA0KICBoZWlnaHQ6ICRzaXplDQoNCiAgJjpiZWZvcmUNCiAgICAkcmFkaXVzOiAkc2l6ZSAqIDAuODQ1DQogICAgJGdsb3c6ICRzaXplICogMC4xMjUNCg0KICAgIGJveC1zaGFkb3c6IDAgMCAkZ2xvdyAkZ2xvdyAvIDIgI2ZmZg0KICAgIGJvcmRlci1yYWRpdXM6ICRyYWRpdXMNCiAgICANCiAgICAmOmFjdGl2ZQ0KICAgICAgfiAuYnV0dG9uDQogICAgICAgIGJveC1zaGFkb3c6IDAgMTVweCAyNXB4IC00cHggcmdiYSgwLDAsMCwwLjQpICAgICAgDQogICAgICB+IC5sYWJlbA0KICAgICAgICBmb250LXNpemU6IDQwcHgNCiAgICAgICAgY29sb3I6IHJnYmEoMCwwLDAsMC40NSkNCg0KICAgICY6Y2hlY2tlZCAgICAgIA0KICAgICAgfiAuYnV0dG9uDQogICAgICAgIGJveC1zaGFkb3c6IDAgMTVweCAyNXB4IC00cHggI2FjZQ0KICAgICAgfiAubGFiZWwNCiAgICAgICAgZm9udC1zaXplOiA0MHB4DQogICAgICAgIGNvbG9yOiAjYzljOWM5DQo=]]></data>
	</file>
	<file>
	  <filename>/samples/scad.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gYWNlIGNhbiBoaWdobGlnaHQgc2NhZCENCm1vZHVsZSBFbGVtZW50KHhwb3MsIHlwb3MsIHpwb3Mpew0KCXRyYW5zbGF0ZShbeHBvcyx5cG9zLHpwb3NdKXsNCgkJdW5pb24oKXsNCgkJCWN1YmUoWzEwLDEwLDRdLHRydWUpOw0KCQkJY3lsaW5kZXIoMTAsMTUsNSk7DQoJCQl0cmFuc2xhdGUoWzAsMCwxMF0pc3BoZXJlKDUpOw0KCQl9DQoJfQ0KfQ0KDQp1bmlvbigpew0KCWZvcihpPVswOjMwXSl7DQoJCSMgRWxlbWVudCgwLDAsMCk7DQoJCUVsZW1lbnQoMTUqaSwwLDApOw0KCX0NCn0NCg0KZm9yIChpID0gWzMsIDUsIDcsIDExXSl7DQoJcm90YXRlKFtpKjEwLDAsMF0pc2NhbGUoWzEsMSxpXSljdWJlKDEwKTsNCn0=]]></data>
	</file>
	<file>
	  <filename>/samples/scala.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gaHR0cDovL3d3dy5zY2FsYS1sYW5nLm9yZy9ub2RlLzU0DQoNCnBhY2thZ2UgZXhhbXBsZXMuYWN0b3JzDQoNCmltcG9ydCBzY2FsYS5hY3RvcnMuQWN0b3INCmltcG9ydCBzY2FsYS5hY3RvcnMuQWN0b3IuXw0KDQphYnN0cmFjdCBjbGFzcyBQaW5nTWVzc2FnZQ0KY2FzZSBvYmplY3QgU3RhcnQgZXh0ZW5kcyBQaW5nTWVzc2FnZQ0KY2FzZSBvYmplY3QgU2VuZFBpbmcgZXh0ZW5kcyBQaW5nTWVzc2FnZQ0KY2FzZSBvYmplY3QgUG9uZyBleHRlbmRzIFBpbmdNZXNzYWdlDQoNCmFic3RyYWN0IGNsYXNzIFBvbmdNZXNzYWdlDQpjYXNlIG9iamVjdCBQaW5nIGV4dGVuZHMgUG9uZ01lc3NhZ2UNCmNhc2Ugb2JqZWN0IFN0b3AgZXh0ZW5kcyBQb25nTWVzc2FnZQ0KDQpvYmplY3QgcGluZ3BvbmcgZXh0ZW5kcyBBcHBsaWNhdGlvbiB7DQogIHZhbCBwb25nID0gbmV3IFBvbmcNCiAgdmFsIHBpbmcgPSBuZXcgUGluZygxMDAwMDAsIHBvbmcpDQogIHBpbmcuc3RhcnQNCiAgcG9uZy5zdGFydA0KICBwaW5nICEgU3RhcnQNCn0NCg0KY2xhc3MgUGluZyhjb3VudDogSW50LCBwb25nOiBBY3RvcikgZXh0ZW5kcyBBY3RvciB7DQogIGRlZiBhY3QoKSB7DQogICAgcHJpbnRsbigiUGluZzogSW5pdGlhbGl6aW5nIHdpdGggY291bnQgIitjb3VudCsiOiAiK3BvbmcpDQogICAgdmFyIHBpbmdzTGVmdCA9IGNvdW50DQogICAgbG9vcCB7DQogICAgICByZWFjdCB7DQogICAgICAgIGNhc2UgU3RhcnQgPT4NCiAgICAgICAgICBwcmludGxuKCJQaW5nOiBzdGFydGluZy4iKQ0KICAgICAgICAgIHBvbmcgISBQaW5nDQogICAgICAgICAgcGluZ3NMZWZ0ID0gcGluZ3NMZWZ0IC0gMQ0KICAgICAgICBjYXNlIFNlbmRQaW5nID0+DQogICAgICAgICAgcG9uZyAhIFBpbmcNCiAgICAgICAgICBwaW5nc0xlZnQgPSBwaW5nc0xlZnQgLSAxDQogICAgICAgIGNhc2UgUG9uZyA9Pg0KICAgICAgICAgIGlmIChwaW5nc0xlZnQgJSAxMDAwID09IDApDQogICAgICAgICAgICBwcmludGxuKCJQaW5nOiBwb25nIGZyb206ICIrc2VuZGVyKQ0KICAgICAgICAgIGlmIChwaW5nc0xlZnQgPiAwKQ0KICAgICAgICAgICAgc2VsZiAhIFNlbmRQaW5nDQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBwcmludGxuKCJQaW5nOiBTdG9wLiIpDQogICAgICAgICAgICBwb25nICEgU3RvcA0KICAgICAgICAgICAgZXhpdCgnc3RvcCkNCiAgICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9DQp9DQoNCmNsYXNzIFBvbmcgZXh0ZW5kcyBBY3RvciB7DQogIGRlZiBhY3QoKSB7DQogICAgdmFyIHBvbmdDb3VudCA9IDANCiAgICBsb29wIHsNCiAgICAgIHJlYWN0IHsNCiAgICAgICAgY2FzZSBQaW5nID0+DQogICAgICAgICAgaWYgKHBvbmdDb3VudCAlIDEwMDAgPT0gMCkNCiAgICAgICAgICAgIHByaW50bG4oIlBvbmc6IHBpbmcgIitwb25nQ291bnQrIiBmcm9tICIrc2VuZGVyKQ0KICAgICAgICAgIHNlbmRlciAhIFBvbmcNCiAgICAgICAgICBwb25nQ291bnQgPSBwb25nQ291bnQgKyAxDQogICAgICAgIGNhc2UgU3RvcCA9Pg0KICAgICAgICAgIHByaW50bG4oIlBvbmc6IFN0b3AuIikNCiAgICAgICAgICBleGl0KCdzdG9wKQ0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/scheme.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGRlZmluZSAocHJvbXB0LWZvci1jZCkNCiAgICJQcm9tcHRzDQogICAgZm9yIENEIg0KICAgKHByb21wdC1yZWFkICJUaXRsZSIgMS41MyAxIDIvNCAxLjcgMS43ZTAgMi45RS00ICs0MiAtNyAjYjAwMSAjYjAwMS8xMDAgI283NzcgI083NzcgI3hhYmM1NSAjYygwIC01LjYpKQ0KICAgKHByb21wdC1yZWFkICJBcnRpc3QiKQ0KICAgKG9yIChwYXJzZS1pbnRlZ2VyIChwcm9tcHQtcmVhZCAiUmF0aW5nIikgIzpqdW5rLWFsbG93ZWQgI3QpIDApDQogIChpZiB4IChmb3JtYXQgI3QgInllcyIpIChmb3JtYXQgI2YgIm5vIikgO2FuZCBoZXJlIGNvbW1lbnQNCiAgKSANCiAgOzsgc2Vjb25kIGxpbmUgY29tbWVudA0KICAnKCsgMSAyKQ0KICAocG9zaXRpb24taWYtbm90IGNoYXItc2V0OndoaXRlc3BhY2UgbGluZSAjOnN0YXJ0IGJlZykpDQogIChxdW90ZSAocHJpdmV0IDEgMiAzKSkNCiAgJyhoZWxsbyB3b3JsZCkNCiAgKCogNSA3KQ0KICAoMSAyIDM0IDUpDQogICgjOnVzZSAiYWFhYSIpDQogIChsZXQgKCh4IDEwKSAoeSAyMCkpDQogICAgKGRpc3BsYXkgKCsgeCB5KSkNCiAgKSANCg0KICAiYXNkYWRcMGVxd2VxZSINCg==]]></data>
	</file>
	<file>
	  <filename>/samples/scss.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Lyogc3R5bGUuc2NzcyAqLw0KDQojbmF2YmFyIHsNCiAgICAkbmF2YmFyLXdpZHRoOiA4MDBweDsNCiAgICAkaXRlbXM6IDU7DQogICAgJG5hdmJhci1jb2xvcjogI2NlNGRkNjsNCg0KICAgIHdpZHRoOiAkbmF2YmFyLXdpZHRoOw0KICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkbmF2YmFyLWNvbG9yOw0KDQogICAgbGkgew0KICAgICAgICBmbG9hdDogbGVmdDsNCiAgICAgICAgd2lkdGg6ICRuYXZiYXItd2lkdGgvJGl0ZW1zIC0gMTBweDsNCg0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKCRuYXZiYXItY29sb3IsIDIwJSk7DQogICAgICAgICY6aG92ZXIgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRlbigkbmF2YmFyLWNvbG9yLCAxMCUpOw0KICAgICAgICB9DQogICAgfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/sh.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoDQoNCiMgU2NyaXB0IHRvIG9wZW4gYSBicm93c2VyIHRvIGN1cnJlbnQgYnJhbmNoDQojIFJlcG8gZm9ybWF0czoNCiMgc3NoICAgZ2l0QGdpdGh1Yi5jb206cmljaG9IL2doX3ByLmdpdA0KIyBodHRwICBodHRwczovL3JpY2hvSEBnaXRodWIuY29tL3JpY2hvSC9naF9wci5naXQNCiMgZ2l0ICAgZ2l0Oi8vZ2l0aHViLmNvbS9yaWNob0gvZ2hfcHIuZ2l0DQoNCnVzZXJuYW1lPWBnaXQgY29uZmlnIC0tZ2V0IGdpdGh1Yi51c2VyYA0KDQpnZXRfcmVwbygpIHsNCiAgICBnaXQgcmVtb3RlIC12IHwgZ3JlcCAke0A6LSR1c2VybmFtZX0gfCB3aGlsZSByZWFkIHJlbW90ZTsgZG8NCiAgICAgIGlmIHJlcG89YGVjaG8gJHJlbW90ZSB8IGdyZXAgLUUgLW8gImdpdEBnaXRodWIuY29tOlteIF0qImA7IHRoZW4NCiAgICAgICAgICBlY2hvICRyZXBvIHwgc2VkIC1lICJzL15naXRAZ2l0aHViXC5jb206Ly8iIC1lICJzL1wuZ2l0JC8vIg0KICAgICAgICAgIGV4aXQgMQ0KICAgICAgZmkNCiAgICAgIGlmIHJlcG89YGVjaG8gJHJlbW90ZSB8IGdyZXAgLUUgLW8gImh0dHBzPzovLyhbXkBdKkApP2dpdGh1Yi5jb20vW14gXSpcLmdpdCJgOyB0aGVuDQogICAgICAgICAgZWNobyAkcmVwbyB8IHNlZCAtZSAic3xeaHR0cHM/Oi8vfHwiIC1lICJzL14uKmdpdGh1YlwuY29tXC8vLyIgLWUgInMvXC5naXQkLy8iDQogICAgICAgICAgZXhpdCAxDQogICAgICBmaQ0KICAgICAgaWYgcmVwbz1gZWNobyAkcmVtb3RlIHwgZ3JlcCAtRSAtbyAiZ2l0Oi8vZ2l0aHViLmNvbS9bXiBdKlwuZ2l0ImA7IHRoZW4NCiAgICAgICAgICBlY2hvICRyZXBvIHwgc2VkIC1lICJzfF5naXQ6Ly9naXRodWIuY29tL3x8IiAtZSAicy9cLmdpdCQvLyINCiAgICAgICAgICBleGl0IDENCiAgICAgIGZpDQogICAgZG9uZQ0KDQogICAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuDQogICAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgYSB2YWxpZCByZW1vdGUiID4mMg0KICAgICAgICBleGl0IDENCiAgICBmaQ0KfQ0KDQplY2hvICR7I3hbQF19DQoNCmlmIHJlcG89YGdldF9yZXBvICRAYDsgdGhlbg0KICAgIGJyYW5jaD1gZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsYA0KICAgIGVjaG8gImh0dHA6Ly9naXRodWIuY29tLyRyZXBvL3B1bGwvbmV3LyR7YnJhbmNoIyNyZWZzL2hlYWRzL30iDQplbHNlDQogICAgZXhpdCAxDQpmaQ0K]]></data>
	</file>
	<file>
	  <filename>/samples/smarty.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHRhYmxlPg0Ke2ZvcmVhY2ggJG5hbWVzIGFzICRuYW1lfQ0Ke3N0cmlwfQ0KICAgPHRyIGJnY29sb3I9IntjeWNsZSB2YWx1ZXM9IiNlZWVlZWUsI2RkZGRkZCJ9Ij4NCiAgICAgIDx0ZD57JG5hbWV9PC90ZD4NCiAgIDwvdHI+DQp7L3N0cmlwfQ0Key9mb3JlYWNofQ0KPC90YWJsZT4NCg0KPHRhYmxlPg0Ke2ZvcmVhY2ggJHVzZXJzIGFzICR1c2VyfQ0Ke3N0cmlwfQ0KICAgPHRyIGJnY29sb3I9IntjeWNsZSB2YWx1ZXM9IiNhYWFhYWEsI2JiYmJiYiJ9Ij4NCiAgICAgIDx0ZD57JHVzZXIubmFtZX08L3RkPg0KICAgICAgPHRkPnskdXNlci5waG9uZX08L3RkPg0KICAgPC90cj4NCnsvc3RyaXB9DQp7L2ZvcmVhY2h9DQo8L3RhYmxlPg==]]></data>
	</file>
	<file>
	  <filename>/samples/sql.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U0VMRUNUIGNpdHksIENPVU5UKGlkKSBBUyB1c2Vyc19jb3VudA0KRlJPTSB1c2Vycw0KV0hFUkUgZ3JvdXBfbmFtZSA9ICdzYWxlc21hbicNCkFORCBjcmVhdGVkID4gJzIwMTEtMDUtMjEnDQpHUk9VUCBCWSAxDQpPUkRFUiBCWSAyIERFU0M=]]></data>
	</file>
	<file>
	  <filename>/samples/stylus.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gSSdtIGEgY29tbWVudCENCg0KLyoNCiAqIEFkZHMgdGhlIGdpdmVuIG51bWJlcnMgdG9nZXRoZXIuDQogKi8NCg0KDQovKiENCiAqIEFkZHMgdGhlIGdpdmVuIG51bWJlcnMgdG9nZXRoZXIuDQogKi8NCg0KDQphc2Rhc2Rhc2RhZChkZiwgYWQ9MjMpDQoNCmFkZChhLCBiID0gYSkNCiAgIGEgKyBiDQpncmVlbigjMGMwKQ0KIGFkZCgxMCwgNSkNCiAvLyA9PiAxNQ0KDQogYWRkKDEwKQ0KIGFkZChhLCBiKQ0KDQogICAgJmFzZGFzZA0KDQogICAgKGFyZ3VtZW50cykNCg0KICAgIEBzZGZzZGYNCi5zaWduYXR1cmVzDQogIGJhY2tncm91bmQtY29sb3IgI2UwZThlMA0KICBib3JkZXIgMXB4IHNvbGlkIGdyYXlMaWdodGVyDQogIGJveC1zaGFkb3cgMCAwIDNweCBncmF5TGlnaHRlc3QNCiAgYm9yZGVyLXJhZGl1cyAzcHgNCiAgcGFkZGluZyAzcHggNXB4DQogICJhZHNhZHMiDQogIG1hcmdpbi1sZWZ0IDANCiAgbGlzdC1zdHlsZSBub25lDQouc2lnbmF0dXJlDQogIGxpc3Qtc3R5bGUgbm9uZQ0KICBkaXNwbGF5OiBpbmxpbmUNCiAgbWFyZ2luLWxlZnQgMA0KICA+IGxpDQogICAgZGlzcGxheSBpbmxpbmUNCmlzIG5vdA0KLnNpZ25hdHVyZS12YWx1ZXMNCiAgbGlzdC1zdHlsZSBub25lDQogIGRpc3BsYXkgaW5saW5lDQogIG1hcmdpbi1sZWZ0IDANCiAgJjpiZWZvcmUNCiAgICBjb250ZW50ICfihpInDQogICAgbWFyZ2luIDAgNXB4DQogID4gbGkNCiAgIWltcG9ydGFudA0KDQogIHVubGVzcw==]]></data>
	</file>
	<file>
	  <filename>/samples/svg.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN2Zw0KICB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCINCiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICBvbmxvYWQ9IlN0YXJ0QW5pbWF0aW9uKGV2dCkiPg0KDQogIDx0aXRsZT5UZXN0IFR1YmUgUHJvZ3Jlc3MgQmFyPC90aXRsZT4NCiAgPGRlc2M+Q3JlYXRlZCBmb3IgdGhlIFdlYiBEaXJlY3Rpb25zIFNWRyBjb21wZXRpdGlvbjwvZGVzYz4NCg0KICA8c2NyaXB0IHR5cGU9InRleHQvZWNtYXNjcmlwdCI+PCFbQ0RBVEFbDQogICAgdmFyIHRpbWV2YWx1ZSA9IDA7DQogICAgdmFyIHRpbWVyX2luY3JlbWVudCA9IDE7DQogICAgdmFyIG1heF90aW1lID0gMTAwOw0KICAgIHZhciBoaWNrb3J5Ow0KICAgIHZhciBkaWNrb3J5Ow0KICAgIHZhciBkb2NrOw0KICAgIHZhciBpOw0KDQogICAgZnVuY3Rpb24gU3RhcnRBbmltYXRpb24oZXZ0KSB7DQogICAgICAgIGhpY2tvcnkgID0gZXZ0LnRhcmdldC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoaWNrb3J5Iik7DQogICAgICAgIGRpY2tvcnkgPSBldnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRpY2tvcnkiKTsNCiAgICAgICAgZG9jayA9IGV2dC50YXJnZXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZG9jayIpOw0KDQogICAgICAgIFNob3dBbmRHcm93RWxlbWVudCgpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBTaG93QW5kR3Jvd0VsZW1lbnQoKSB7DQogICAgICAgIHRpbWV2YWx1ZSA9IHRpbWV2YWx1ZSArIHRpbWVyX2luY3JlbWVudDsNCiAgICAgICAgaWYgKHRpbWV2YWx1ZSA+IG1heF90aW1lKQ0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAvLyBTY2FsZSB0aGUgdGV4dCBzdHJpbmcgZ3JhZHVhbGx5IHVudGlsIGl0IGlzIDIwIHRpbWVzIGxhcmdlcg0KICAgICAgICBzY2FsZWZhY3RvciA9ICh0aW1ldmFsdWUgKiA2NTApIC8gbWF4X3RpbWU7DQoNCiAgICAgICAgaWYgKHRpbWV2YWx1ZSA8IDMwKSB7DQogICAgICAgICAgICBoaWNrb3J5LnNldEF0dHJpYnV0ZSgiZGlzcGxheSIsICIiKTsNCiAgICAgICAgICAgIGhpY2tvcnkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyAoNjAwK3NjYWxlZmFjdG9yKjMqLTEgKSArICIsIC0xNDQgKSIpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHRpbWV2YWx1ZSA+IDMwICYmIHRpbWV2YWx1ZSA8IDY2KSB7DQogICAgICAgICAgICBkaWNrb3J5LnNldEF0dHJpYnV0ZSgiZGlzcGxheSIsICIiKTsNCiAgICAgICAgICAgIGRpY2tvcnkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKCIgKyAoLTc5NStzY2FsZWZhY3RvcioyKSArICIsIDAgKSIpOw0KICAgICAgICB9DQogICAgICAgIGlmICh0aW1ldmFsdWUgPiA2Nikgew0KICAgICAgICAgICAgZG9jay5zZXRBdHRyaWJ1dGUoImRpc3BsYXkiLCAiIik7DQogICAgICAgICAgICBkb2NrLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgiICsgKDE0NTArc2NhbGVmYWN0b3IqMiotMSkgKyAiLCAxNDQgKSIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQ2FsbCBTaG93QW5kR3Jvd0VsZW1lbnQgYWdhaW4gPHRpbWVyX2luY3JlbWVudD4gbWlsbGlzZWNvbmRzIGxhdGVyLg0KICAgICAgICBzZXRUaW1lb3V0KCJTaG93QW5kR3Jvd0VsZW1lbnQoKSIsIHRpbWVyX2luY3JlbWVudCkNCiAgICB9DQogICAgd2luZG93LlNob3dBbmRHcm93RWxlbWVudCA9IFNob3dBbmRHcm93RWxlbWVudA0KICBdXT48L3NjcmlwdD4NCg0KICA8cmVjdA0KICAgIGZpbGw9IiMyZTM0MzYiDQogICAgZmlsbC1ydWxlPSJub256ZXJvIg0KICAgIHN0cm9rZS13aWR0aD0iMyINCiAgICB5PSIwIg0KICAgIHg9IjAiDQogICAgaGVpZ2h0PSI2MDAiDQogICAgd2lkdGg9IjgwMCINCiAgICBpZD0icmVjdDM1OTAiLz4NCg0KICAgIDx0ZXh0DQogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNDRweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMgQm9sZCINCiAgICAgICB4PSI1MCINCiAgICAgICB5PSIzNTAiDQogICAgICAgaWQ9ImhpY2tvcnkiDQogICAgICAgZGlzcGxheT0ibm9uZSI+DQogICAgICAgIEhpY2tvcnksPC90ZXh0Pg0KICAgIDx0ZXh0DQogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNDRweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMgQm9sZCINCiAgICAgICB4PSI1MCINCiAgICAgICB5PSIzNTAiDQogICAgICAgaWQ9ImRpY2tvcnkiDQogICAgICAgZGlzcGxheT0ibm9uZSI+DQogICAgICAgIGRpY2tvcnksPC90ZXh0Pg0KICAgIDx0ZXh0DQogICAgICAgc3R5bGU9ImZvbnQtc2l6ZToxNDRweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXZhcmlhbnQ6bm9ybWFsO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zdHJldGNoOm5vcm1hbDtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMgQm9sZCINCiAgICAgICB4PSI1MCINCiAgICAgICB5PSIzNTAiDQogICAgICAgaWQ9ImRvY2siDQogICAgICAgZGlzcGxheT0ibm9uZSI+DQogICAgICAgIGRvY2shPC90ZXh0Pg0KPC9zdmc+]]></data>
	</file>
	<file>
	  <filename>/samples/tcl.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQpwcm9jIGRpamtzdHJhIHtncmFwaCBvcmlnaW59IHsNCiAgICAjIEluaXRpYWxpemUNCiAgICBkaWN0IGZvciB7dmVydGV4IGRpc3RtYXB9ICRncmFwaCB7DQoJZGljdCBzZXQgZGlzdCAkdmVydGV4IEluZg0KCWRpY3Qgc2V0IHBhdGggJHZlcnRleCB7fQ0KICAgIH0NCiAgICBkaWN0IHNldCBkaXN0ICRvcmlnaW4gMA0KICAgIGRpY3Qgc2V0IHBhdGggJG9yaWdpbiBbbGlzdCAkb3JpZ2luXQ0KIA0KICAgIHdoaWxlIHtbZGljdCBzaXplICRncmFwaF19IHsNCgkjIEZpbmQgdW5oYW5kbGVkIG5vZGUgd2l0aCBsZWFzdCB3ZWlnaHQNCglzZXQgZCBJbmYNCglkaWN0IGZvciB7dXUgLX0gJGdyYXBoIHsNCgkgICAgaWYgeyRkID4gW3NldCBkZCBbZGljdCBnZXQgJGRpc3QgJHV1XV19IHsNCgkJc2V0IHUgJHV1DQoJCXNldCBkICRkZA0KCSAgICB9DQoJfQ0KIA0KCSMgTm8gc3VjaCBub2RlOyBncmFwaCBtdXN0IGJlIGRpc2Nvbm5lY3RlZA0KCWlmIHskZCA9PSBJbmZ9IGJyZWFrDQogDQoJIyBVcGRhdGUgdGhlIHdlaWdodHMgZm9yIG5vZGVzXA0KCSBsZWFkIHRvIGJ5IHRoZSBub2RlIHdlJ3ZlIHBpY2tlZA0KCWRpY3QgZm9yIHt2IGRkfSBbZGljdCBnZXQgJGdyYXBoICR1XSB7DQoJICAgIGlmIHtbZGljdCBleGlzdHMgJGdyYXBoICR2XX0gew0KCQlzZXQgYWx0IFtleHByIHskZCArICRkZH1dDQoJCWlmIHskYWx0IDwgW2RpY3QgZ2V0ICRkaXN0ICR2XX0gew0KCQkgICAgZGljdCBzZXQgZGlzdCAkdiAkYWx0DQoJCSAgICBkaWN0IHNldCBwYXRoICR2IFtsaXN0IHsqfVtkaWN0IGdldCAkcGF0aCAkdV0gJHZdDQoJCX0NCgkgICAgfQ0KCX0NCiANCgkjIFJlbW92ZSBjaG9zZW4gbm9kZSBmcm9tIGdyYXBoIHN0aWxsIHRvIGJlIGhhbmRsZWQNCglkaWN0IHVuc2V0IGdyYXBoICR1DQogICAgfQ0KICAgIHJldHVybiBbbGlzdCAkZGlzdCAkcGF0aF0NCn0=]]></data>
	</file>
	<file>
	  <filename>/samples/tex.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIHF1YWRyYXRpYyBmb3JtdWxhIGlzICQkLWIgXHBtIFxzcXJ0e2JeMiAtIDRhY30gXG92ZXIgMmEkJA0KXGJ5ZQ0KDQpcbWFrZWF0bGV0dGVyDQogXG5ld2NvbW1hbmR7XGJlfXslDQogXGJlZ2luZ3JvdXANCiAlIFxzZXRsZW5ndGh7XGFycmF5Y29sc2VwfXsycHR9DQogXGVxbmFycmF5JQ0KIFxAaWZzdGFye1xub251bWJlcn17fSUNCiAgfQ0KICBcbmV3Y29tbWFuZHtcZWV9e1xlbmRlcW5hcnJheVxlbmRncm91cH0NCiAgXG1ha2VhdG90aGVyDQoNCiBcYmVnaW57ZXF1YXRpb259DQogeD1cbGVmdFx7IFxiZWdpbnthcnJheX17Y2x9DQogMCAmIFx0ZXh0cm17aWYgfUE9XGxkb3RzXFwNCiAxICYgXHRleHRybXtpZiB9Qj1cbGRvdHNcXA0KIHggJiBcdGV4dHJte3RoaXMgcnVucyB3aXRoIGFzIG11Y2ggdGV4dCBhcyB5b3UgbGlrZSwgYnV0IHdpdGhvdXQgYW4gcmFnZ2VyaWdodCB0ZXh0DQoufVxlbmR7YXJyYXl9XHJpZ2h0Lg0KIFxlbmR7ZXF1YXRpb259]]></data>
	</file>
	<file>
	  <filename>/samples/text.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kIHRlbXBvciBpbnZpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1eWFtIGVyYXQsIHNlZCBkaWFtIHZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhIGthc2QgZ3ViZXJncmVuLCBubyBzZWEgdGFraW1hdGEgc2FuY3R1cyBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteSBlaXJtb2QgdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4NCg0KRHVpcyBhdXRlbSB2ZWwgZXVtIGlyaXVyZSBkb2xvciBpbiBoZW5kcmVyaXQgaW4gdnVscHV0YXRlIHZlbGl0IGVzc2UgbW9sZXN0aWUgY29uc2VxdWF0LCB2ZWwgaWxsdW0gZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvIGRpZ25pc3NpbSBxdWkgYmxhbmRpdCBwcmFlc2VudCBsdXB0YXR1bSB6enJpbCBkZWxlbml0IGF1Z3VlIGR1aXMgZG9sb3JlIHRlIGZldWdhaXQgbnVsbGEgZmFjaWxpc2kuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQgbGFvcmVldCBkb2xvcmUgbWFnbmEgYWxpcXVhbSBlcmF0IHZvbHV0cGF0Lg0KDQpVdCB3aXNpIGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpIHRhdGlvbiB1bGxhbWNvcnBlciBzdXNjaXBpdCBsb2JvcnRpcyBuaXNsIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcyBhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQgcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhIGZhY2lsaXNpLg0KDQpOYW0gbGliZXIgdGVtcG9yIGN1bSBzb2x1dGEgbm9iaXMgZWxlaWZlbmQgb3B0aW9uIGNvbmd1ZSBuaWhpbCBpbXBlcmRpZXQgZG9taW5nIGlkIHF1b2QgbWF6aW0gcGxhY2VyYXQgZmFjZXIgcG9zc2ltIGFzc3VtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRpYW0gbm9udW1teSBuaWJoIGV1aXNtb2QgdGluY2lkdW50IHV0IGxhb3JlZXQgZG9sb3JlIG1hZ25hIGFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gVXQgd2lzaSBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaSB0YXRpb24gdWxsYW1jb3JwZXIgc3VzY2lwaXQgbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0Lg0KDQpEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlIGRvbG9yIGluIGhlbmRyZXJpdCBpbiB2dWxwdXRhdGUgdmVsaXQgZXNzZSBtb2xlc3RpZSBjb25zZXF1YXQsIHZlbCBpbGx1bSBkb2xvcmUgZXUgZmV1Z2lhdCBudWxsYSBmYWNpbGlzaXMuDQoNCkF0IHZlcm8gZW9zIGV0IGFjY3VzYW0gZXQganVzdG8gZHVvIGRvbG9yZXMgZXQgZWEgcmVidW0uIFN0ZXQgY2xpdGEga2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNldGV0dXIgc2FkaXBzY2luZyBlbGl0ciwgc2VkIGRpYW0gbm9udW15IGVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbSB2b2x1cHR1YS4gQXQgdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4gU3RldCBjbGl0YSBrYXNkIGd1YmVyZ3Jlbiwgbm8gc2VhIHRha2ltYXRhIHNhbmN0dXMgZXN0IExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBBdCBhY2N1c2FtIGFsaXF1eWFtIGRpYW0gZGlhbSBkb2xvcmUgZG9sb3JlcyBkdW8gZWlybW9kIGVvcyBlcmF0LCBldCBub251bXkgc2VkIHRlbXBvciBldCBldCBpbnZpZHVudCBqdXN0byBsYWJvcmUgU3RldCBjbGl0YSBlYSBldCBndWJlcmdyZW4sIGthc2QgbWFnbmEgbm8gcmVidW0uIHNhbmN0dXMgc2VhIHNlZCB0YWtpbWF0YSB1dCB2ZXJvIHZvbHVwdHVhLiBlc3QgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZXRldHVy]]></data>
	</file>
	<file>
	  <filename>/samples/textile.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[aDEuIFRleHRpbGUgZG9jdW1lbnQNCg0KaDIuIEhlYWRpbmcgVHdvDQoNCmgzLiBBIHR3by1saW5lDQogICAgaGVhZGVyDQoNCmgyLiBBbm90aGVyIHR3by1saW5lDQpoZWFkZXINCg0KUGFyYWdyYXBoOg0Kb25lLCB0d28sDQp0aGVlIGxpbmVzIQ0KDQpwKGNsYXNzb25lIHR3byB0aHJlZSkuIFRoaXMgaXMgYSBwYXJhZ3JhcGggd2l0aCBjbGFzc2VzDQoNCnAoI2lkKS4gKG9uZSB3aXRoIGFuIGlkKQ0KDQpwKG9uZSB0d28gdGhyZWUjbXlfaWQpLiAuLmNsYXNzZXMgKyBpZA0KDQoqIFVub3JkZXJlZCBsaXN0DQoqKiBzdWJsaXN0DQoqIGJhY2sgYWdhaW4hDQoqKiBzdWJsaXN0IGFnYWluLi4NCg0KIyBvcmRlcmVkDQoNCmJnLiBCbG9ja3F1b3RlIQ0KICAgIFRoaXMgaXMgYSB0d28tbGlzdCBibG9ja3F1b3RlLi4h]]></data>
	</file>
	<file>
	  <filename>/samples/tmsnippet.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBGdW5jdGlvbg0Kc25pcHBldCBmdW4NCglmdW5jdGlvbiAkezE/OmZ1bmN0aW9uX25hbWV9KCR7Mjphcmd1bWVudH0pIHsNCgkJJHszOi8vIGJvZHkuLi59DQoJfQ0KIyBBbm9ueW1vdXMgRnVuY3Rpb24NCnJlZ2V4IC8oKD0pXHMqfCg6KVxzKnwoXCgpfFxiKS9mLyhcKSk/Lw0KbmFtZSBmDQoJZnVuY3Rpb24ke00xPzogJHsxOmZ1bmN0aW9uTmFtZX19KCQyKSB7DQoJCSR7MDokVE1fU0VMRUNURURfVEVYVH0NCgl9JHtNMj87fSR7TTM/LH0ke000Pyl9DQojIEltbWVkaWF0ZSBmdW5jdGlvbg0KdHJpZ2dlciBcKD9mXCgNCmVuZFRyaWdnZXIgXCk/DQpzbmlwcGV0IGYoDQoJKGZ1bmN0aW9uKCR7MX0pIHsNCgkJJHswOiR7VE1fU0VMRUNURURfVEVYVDovKiBjb2RlICovfX0NCgl9KCR7MX0pKTsNCiMgaWYNCnNuaXBwZXQgaWYNCglpZiAoJHsxOnRydWV9KSB7DQoJCSR7MH0NCgl9DQoJDQoJDQoJ]]></data>
	</file>
	<file>
	  <filename>/samples/toml.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBUaGlzIGlzIGEgVE9NTCBkb2N1bWVudC4gQm9vbS4NCg0KdGl0bGUgPSAiVE9NTCBFeGFtcGxlIg0KDQpbb3duZXJdDQpuYW1lID0gIlRvbSBQcmVzdG9uLVdlcm5lciINCm9yZ2FuaXphdGlvbiA9ICJHaXRIdWIiDQpiaW8gPSAiR2l0SHViIENvZm91bmRlciAmIENFT1xuTGlrZXMgdGF0ZXIgdG90cyBhbmQgYmVlci4iDQpkb2IgPSAxOTc5LTA1LTI3VDA3OjMyOjAwWiAjIEZpcnN0IGNsYXNzIGRhdGVzPyBXaHkgbm90Pw0KDQpbZGF0YWJhc2VdDQpzZXJ2ZXIgPSAiMTkyLjE2OC4xLjEiDQpwb3J0cyA9IFsgODAwMSwgODAwMSwgODAwMiBdDQpjb25uZWN0aW9uX21heCA9IDUwMDANCmVuYWJsZWQgPSB0cnVlDQoNCltzZXJ2ZXJzXQ0KDQogICMgWW91IGNhbiBpbmRlbnQgYXMgeW91IHBsZWFzZS4gVGFicyBvciBzcGFjZXMuIFRPTUwgZG9uJ3QgY2FyZS4NCiAgW3NlcnZlcnMuYWxwaGFdDQogIGlwID0gIjEwLjAuMC4xIg0KICBkYyA9ICJlcWRjMTAiDQoNCiAgW3NlcnZlcnMuYmV0YV0NCiAgaXAgPSAiMTAuMC4wLjIiDQogIGRjID0gImVxZGMxMCINCg0KW2NsaWVudHNdDQpkYXRhID0gWyBbImdhbW1hIiwgImRlbHRhIl0sIFsxLCAyXSBdICMganVzdCBhbiB1cGRhdGUgdG8gbWFrZSBzdXJlIHBhcnNlcnMgc3VwcG9ydCBpdA==]]></data>
	</file>
	<file>
	  <filename>/samples/twig.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIGh0bWw+DQo8aHRtbD4NCiAgICA8aGVhZD4NCiAgICAgICAgPHRpdGxlPk15IFdlYnBhZ2U8L3RpdGxlPg0KICAgIDwvaGVhZD4NCiAgICA8Ym9keT4NCiAgICAgICAgPHVsIGlkPSJuYXZpZ2F0aW9uIj4NCiAgICAgICAgeyUgZm9yIGl0ZW0gaW4gbmF2aWdhdGlvbiAlfQ0KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Int7IGl0ZW0uaHJlZnxlc2NhcGUgfX0iPnt7IGl0ZW0uY2FwdGlvbiB9fTwvYT48L2xpPg0KICAgICAgICB7JSBlbmRmb3IgJX0NCiAgICAgICAgPC91bD4NCg0KICAgICAgICB7JSBpZiAxIG5vdCBpbiBbMSwgMiwgM10gJX0NCg0KICAgICAgICB7IyBpcyBlcXVpdmFsZW50IHRvICN9DQogICAgICAgIHslIGlmIG5vdCAoMSBpbiBbMSwgMiwgM10pICV9DQoNCiAgICAgICAgeyUgYXV0b2VzY2FwZSB0cnVlICV9DQogICAgICAgICAgICB7eyB2YXIgfX0NCiAgICAgICAgICAgIHt7IHZhcnxyYXcgfX0gICAgIHsjIHZhciB3b24ndCBiZSBlc2NhcGVkICN9DQogICAgICAgICAgICB7eyB2YXJ8ZXNjYXBlIH19ICB7IyB2YXIgd29uJ3QgYmUgZG91YmxlZC1lc2NhcGVkICN9DQogICAgICAgIHslIGVuZGF1dG9lc2NhcGUgJX0NCg0KICAgICAgICB7eyBpbmNsdWRlKCd0d2lnLmh0bWwnLCBzYW5kYm94ZWQgPSB0cnVlKSB9fQ0KDQogICAgICAgIHt7InN0cmluZyAje3dpdGh9IFwiIGVzY2FwZXMiICdhbm90aGVyI29uZScgfX0NCiAgICAgICAgPGgxPk15IFdlYnBhZ2U8L2gxPg0KICAgICAgICB7eyBhX3ZhcmlhYmxlIH19DQogICAgPC9ib2R5Pg0KPC9odG1sPg==]]></data>
	</file>
	<file>
	  <filename>/samples/typescript.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Y2xhc3MgR3JlZXRlciB7DQoJZ3JlZXRpbmc6IHN0cmluZzsNCgljb25zdHJ1Y3RvciAobWVzc2FnZTogc3RyaW5nKSB7DQoJCXRoaXMuZ3JlZXRpbmcgPSBtZXNzYWdlOw0KCX0NCglncmVldCgpIHsNCgkJcmV0dXJuICJIZWxsbywgIiArIHRoaXMuZ3JlZXRpbmc7DQoJfQ0KfSAgIA0KDQp2YXIgZ3JlZXRlciA9IG5ldyBHcmVldGVyKCJ3b3JsZCIpOw0KDQp2YXIgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJykNCmJ1dHRvbi5pbm5lclRleHQgPSAiU2F5IEhlbGxvIg0KYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsNCglhbGVydChncmVldGVyLmdyZWV0KCkpDQp9DQoNCmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYnV0dG9uKQ0KDQpjbGFzcyBTbmFrZSBleHRlbmRzIEFuaW1hbCB7DQogICBtb3ZlKCkgew0KICAgICAgIGFsZXJ0KCJTbGl0aGVyaW5nLi4uIik7DQogICAgICAgc3VwZXIoNSk7DQogICB9DQp9DQoNCmNsYXNzIEhvcnNlIGV4dGVuZHMgQW5pbWFsIHsNCiAgIG1vdmUoKSB7DQogICAgICAgYWxlcnQoIkdhbGxvcGluZy4uLiIpOw0KICAgICAgIHN1cGVyLm1vdmUoNDUpOw0KICAgfQ0KfQ0KDQptb2R1bGUgU2F5aW5ncyB7DQogICAgZXhwb3J0IGNsYXNzIEdyZWV0ZXIgew0KICAgICAgICBncmVldGluZzogc3RyaW5nOw0KICAgICAgICBjb25zdHJ1Y3RvciAobWVzc2FnZTogc3RyaW5nKSB7DQogICAgICAgICAgICB0aGlzLmdyZWV0aW5nID0gbWVzc2FnZTsNCiAgICAgICAgfQ0KICAgICAgICBncmVldCgpIHsNCiAgICAgICAgICAgIHJldHVybiAiSGVsbG8sICIgKyB0aGlzLmdyZWV0aW5nOw0KICAgICAgICB9DQogICAgfQ0KfQ0KbW9kdWxlIE1hbmthbGEgew0KICAgZXhwb3J0IGNsYXNzIEZlYXR1cmVzIHsNCiAgICAgICBwdWJsaWMgdHVybkNvbnRpbnVlcyA9IGZhbHNlOw0KICAgICAgIHB1YmxpYyBzZWVkU3RvcmVkQ291bnQgPSAwOw0KICAgICAgIHB1YmxpYyBjYXB0dXJlZENvdW50ID0gMDsNCiAgICAgICBwdWJsaWMgc3BhY2VDYXB0dXJlZCA9IE5vU3BhY2U7DQoNCiAgICAgICBwdWJsaWMgY2xlYXIoKSB7DQogICAgICAgICAgIHRoaXMudHVybkNvbnRpbnVlcyA9IGZhbHNlOw0KICAgICAgICAgICB0aGlzLnNlZWRTdG9yZWRDb3VudCA9IDA7DQogICAgICAgICAgIHRoaXMuY2FwdHVyZWRDb3VudCA9IDA7DQogICAgICAgICAgIHRoaXMuc3BhY2VDYXB0dXJlZCA9IE5vU3BhY2U7DQogICAgICAgfQ0KDQogICAgICAgcHVibGljIHRvU3RyaW5nKCkgew0KICAgICAgICAgICB2YXIgc3RyaW5nQnVpbGRlciA9ICIiOw0KICAgICAgICAgICBpZiAodGhpcy50dXJuQ29udGludWVzKSB7DQogICAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyICs9ICIgdHVybiBjb250aW51ZXMsIjsNCiAgICAgICAgICAgfQ0KICAgICAgICAgICBzdHJpbmdCdWlsZGVyICs9ICIgc3RvcmVzICIgKyB0aGlzLnNlZWRTdG9yZWRDb3VudDsNCiAgICAgICAgICAgaWYgKHRoaXMuY2FwdHVyZWRDb3VudCA+IDApIHsNCiAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIgKz0gIiBjYXB0dXJlcyAiICsgdGhpcy5jYXB0dXJlZENvdW50ICsgIiBmcm9tIHNwYWNlICIgKyB0aGlzLnNwYWNlQ2FwdHVyZWQ7DQogICAgICAgICAgIH0NCiAgICAgICAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXI7DQogICAgICAgfQ0KICAgfQ0KfQ==]]></data>
	</file>
	<file>
	  <filename>/samples/vbscript.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[bXlmaWxlbmFtZSA9ICJDOlxXaWtpcGVkaWEgLSBWQlNjcmlwdCAtIEV4YW1wbGUgLSBIZWxsbyBXb3JsZC50eHQiDQpNYWtlSGVsbG9Xb3JsZEZpbGUgbXlmaWxlbmFtZQ0KIA0KU3ViIE1ha2VIZWxsb1dvcmxkRmlsZSAoRmlsZU5hbWUpDQonQ3JlYXRlIGEgbmV3IGZpbGUgaW4gQzogZHJpdmUgb3Igb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGUNCiAgIFNldCBGU08gPSBDcmVhdGVPYmplY3QoIlNjcmlwdGluZy5GaWxlU3lzdGVtT2JqZWN0IikNCiAgIElmIEZTTy5GaWxlRXhpc3RzKEZpbGVOYW1lKSBUaGVuIA0KICAgICAgQW5zd2VyID0gTXNnQm94ICgiRmlsZSAiICYgRmlsZU5hbWUgJiAiIGV4aXN0cyAuLi4gT0sgdG8gb3ZlcndyaXRlPyIsIHZiT0tDYW5jZWwpDQogICAgICAnSWYgYnV0dG9uIHNlbGVjdGVkIGlzIG5vdCBPSywgdGhlbiBxdWl0IG5vdw0KICAgICAgJ3ZiT0sgaXMgYSBsYW5ndWFnZSBjb25zdGFudA0KICAgICAgSWYgQW5zd2VyIDw+IHZiT0sgVGhlbiBFeGl0IFN1Yg0KICAgRWxzZQ0KICAgICAgJ0NvbmZpcm0gT0sgdG8gY3JlYXRlDQogICAgICBBbnN3ZXIgPSBNc2dCb3ggKCJGaWxlICIgJiBGaWxlTmFtZSAmICIgLi4uIE9LIHRvIGNyZWF0ZT8iLCB2Yk9LQ2FuY2VsKQ0KICAgICAgSWYgQW5zd2VyIDw+IHZiT0sgVGhlbiBFeGl0IFN1Yg0KICAgRW5kIElmDQogICAnQ3JlYXRlIG5ldyBmaWxlIChvciByZXBsYWNlIGFuIGV4aXN0aW5nIGZpbGUpDQogICBTZXQgRmlsZU9iamVjdCA9IEZTTy5DcmVhdGVUZXh0RmlsZSAoRmlsZU5hbWUpDQogICBGaWxlT2JqZWN0LldyaXRlTGluZSAiVGltZSAuLi4gIiAmIE5vdygpDQogICBGaWxlT2JqZWN0LldyaXRlTGluZSAiSGVsbG8gV29ybGQiDQogICBGaWxlT2JqZWN0LkNsb3NlKCkNCiAgIE1zZ0JveCAiRmlsZSAiICYgRmlsZU5hbWUgJiAiIC4uLiB1cGRhdGVkLiINCkVuZCBTdWI=]]></data>
	</file>
	<file>
	  <filename>/samples/velocity.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyoNCiAgVGhpcyBpcyBhIHNhbXBsZSBjb21tZW50IGJsb2NrIHRoYXQNCiAgc3BhbnMgbXVsdGlwbGUgbGluZXMuDQoqIw0KDQojbWFjcm8gKCBvdXRwdXRJdGVtICRpdGVtICkNCiAgPGxpPiR7aXRlbX08L2xpPg0KI2VuZA0KDQojIyBEZWZpbmUgdGhlIGl0ZW1zIHRvIGl0ZXJhdGUNCiNzZXQgKCAkaXRlbXMgPSBbMSwgMiwgMywgNF0gKQ0KDQo8dWw+DQogICMjIEl0ZXJhdGUgb3ZlciB0aGUgaXRlbXMgYW5kIG91dHB1dCB0aGUgZXZlbnMuDQogICNmb3JlYWNoICggJGl0ZW0gaW4gJGl0ZW1zICkNCiAgICAjaWYgKCAkX01hdGhUb29sLm1vZCgkaXRlbSwgMikgPT0gMCApDQogICAgICAjb3V0cHV0SXRlbSAoJGl0ZW0pDQogICAgI2VuZA0KICAjZW5kDQo8L3VsPg0KDQo8c2NyaXB0Pg0KICAvKg0KICAgIEEgc2FtcGxlIGZ1bmN0aW9uIHRvIGRlY29tc3RyYXRlDQogICAgSmF2YVNjcmlwdCBoaWdobGlnaHRpbmcgYW5kIGZvbGRpbmcuDQogICovDQogIGZ1bmN0aW9uIGZvbyhpdGVtcywgbmFkYSkgew0KICAgIGZvciAodmFyIGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykgew0KICAgICAgYWxlcnQoaXRlbXNbaV0gKyAianVodVxuIik7DQogICAgfQ0KICB9DQo8L3NjcmlwdD4NCg0KPHN0eWxlPg0KICAvKg0KICAgIEEgc2FtcGxlIHN0eWxlIHRvIGRlY29tc3RyYXRlDQogICAgQ1NTIGhpZ2hsaWdodGluZyBhbmQgZm9sZGluZy4NCiAgKi8NCiAgLmNsYXNzIHsNCiAgICBmb250LWZhbWlseTogTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2U7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIGN1cnNvcjogdGV4dDsNCiAgfQ0KPC9zdHlsZT4=]]></data>
	</file>
	<file>
	  <filename>/samples/xml.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxxdWVyeSB4bWxuczp5YWhvbz0iaHR0cDovL3d3dy55YWhvb2FwaXMuY29tL3YxL2Jhc2Uucm5nIg0KICAgIHlhaG9vOmNvdW50PSI3IiB5YWhvbzpjcmVhdGVkPSIyMDExLTEwLTExVDA4OjQwOjIzWiIgeWFob286bGFuZz0iZW4tVVMiPg0KICAgIDxkaWFnbm9zdGljcz4NCiAgICAgICAgPHB1YmxpY2x5Q2FsbGFibGU+dHJ1ZTwvcHVibGljbHlDYWxsYWJsZT4NCiAgICAgICAgPHVybCBleGVjdXRpb24tc3RhcnQtdGltZT0iMCIgZXhlY3V0aW9uLXN0b3AtdGltZT0iMjUiIGV4ZWN1dGlvbi10aW1lPSIyNSI+PCFbQ0RBVEFbaHR0cDovL3doZXJlLnlhaG9vYXBpcy5jb20vdjEvY29udGluZW50cztzdGFydD0wO2NvdW50PTEwXV0+PC91cmw+DQogICAgICAgIDx1c2VyLXRpbWU+MjY8L3VzZXItdGltZT4NCiAgICAgICAgPHNlcnZpY2UtdGltZT4yNTwvc2VydmljZS10aW1lPg0KICAgICAgICA8YnVpbGQtdmVyc2lvbj4yMTk3ODwvYnVpbGQtdmVyc2lvbj4NCiAgICA8L2RpYWdub3N0aWNzPiANCiAgICA8cmVzdWx0cz4NCiAgICAgICAgPHBsYWNlIHhtbG5zPSJodHRwOi8vd2hlcmUueWFob29hcGlzLmNvbS92MS9zY2hlbWEucm5nIg0KICAgICAgICAgICAgeG1sOmxhbmc9ImVuLVVTIiB5YWhvbzp1cmk9Imh0dHA6Ly93aGVyZS55YWhvb2FwaXMuY29tL3YxL3BsYWNlLzI0ODY1NjcwIj4NCiAgICAgICAgICAgIDx3b2VpZD4yNDg2NTY3MDwvd29laWQ+DQogICAgICAgICAgICA8cGxhY2VUeXBlTmFtZSBjb2RlPSIyOSI+Q29udGluZW50PC9wbGFjZVR5cGVOYW1lPg0KICAgICAgICAgICAgPG5hbWU+QWZyaWNhPC9uYW1lPg0KICAgICAgICA8L3BsYWNlPg0KICAgICAgICA8cGxhY2UgeG1sbnM9Imh0dHA6Ly93aGVyZS55YWhvb2FwaXMuY29tL3YxL3NjaGVtYS5ybmciDQogICAgICAgICAgICB4bWw6bGFuZz0iZW4tVVMiIHlhaG9vOnVyaT0iaHR0cDovL3doZXJlLnlhaG9vYXBpcy5jb20vdjEvcGxhY2UvMjQ4NjU2NzUiPg0KICAgICAgICAgICAgPHdvZWlkPjI0ODY1Njc1PC93b2VpZD4NCiAgICAgICAgICAgIDxwbGFjZVR5cGVOYW1lIGNvZGU9IjI5Ij5Db250aW5lbnQ8L3BsYWNlVHlwZU5hbWU+DQogICAgICAgICAgICA8bmFtZT5FdXJvcGU8L25hbWU+DQogICAgICAgIDwvcGxhY2U+DQogICAgICAgIDxwbGFjZSB4bWxucz0iaHR0cDovL3doZXJlLnlhaG9vYXBpcy5jb20vdjEvc2NoZW1hLnJuZyINCiAgICAgICAgICAgIHhtbDpsYW5nPSJlbi1VUyIgeWFob286dXJpPSJodHRwOi8vd2hlcmUueWFob29hcGlzLmNvbS92MS9wbGFjZS8yNDg2NTY3MyI+DQogICAgICAgICAgICA8d29laWQ+MjQ4NjU2NzM8L3dvZWlkPg0KICAgICAgICAgICAgPHBsYWNlVHlwZU5hbWUgY29kZT0iMjkiPkNvbnRpbmVudDwvcGxhY2VUeXBlTmFtZT4NCiAgICAgICAgICAgIDxuYW1lPlNvdXRoIEFtZXJpY2E8L25hbWU+DQogICAgICAgIDwvcGxhY2U+DQogICAgICAgIDxwbGFjZSB4bWxucz0iaHR0cDovL3doZXJlLnlhaG9vYXBpcy5jb20vdjEvc2NoZW1hLnJuZyINCiAgICAgICAgICAgIHhtbDpsYW5nPSJlbi1VUyIgeWFob286dXJpPSJodHRwOi8vd2hlcmUueWFob29hcGlzLmNvbS92MS9wbGFjZS8yODI4OTQyMSI+DQogICAgICAgICAgICA8d29laWQ+MjgyODk0MjE8L3dvZWlkPg0KICAgICAgICAgICAgPHBsYWNlVHlwZU5hbWUgY29kZT0iMjkiPkNvbnRpbmVudDwvcGxhY2VUeXBlTmFtZT4NCiAgICAgICAgICAgIDxuYW1lPkFudGFyY3RpYzwvbmFtZT4NCiAgICAgICAgPC9wbGFjZT4NCiAgICAgICAgPHBsYWNlIHhtbG5zPSJodHRwOi8vd2hlcmUueWFob29hcGlzLmNvbS92MS9zY2hlbWEucm5nIg0KICAgICAgICAgICAgeG1sOmxhbmc9ImVuLVVTIiB5YWhvbzp1cmk9Imh0dHA6Ly93aGVyZS55YWhvb2FwaXMuY29tL3YxL3BsYWNlLzI0ODY1NjcxIj4NCiAgICAgICAgICAgIDx3b2VpZD4yNDg2NTY3MTwvd29laWQ+DQogICAgICAgICAgICA8cGxhY2VUeXBlTmFtZSBjb2RlPSIyOSI+Q29udGluZW50PC9wbGFjZVR5cGVOYW1lPg0KICAgICAgICAgICAgPG5hbWU+QXNpYTwvbmFtZT4NCiAgICAgICAgPC9wbGFjZT4NCiAgICAgICAgPHBsYWNlIHhtbG5zPSJodHRwOi8vd2hlcmUueWFob29hcGlzLmNvbS92MS9zY2hlbWEucm5nIg0KICAgICAgICAgICAgeG1sOmxhbmc9ImVuLVVTIiB5YWhvbzp1cmk9Imh0dHA6Ly93aGVyZS55YWhvb2FwaXMuY29tL3YxL3BsYWNlLzI0ODY1NjcyIj4NCiAgICAgICAgICAgIDx3b2VpZD4yNDg2NTY3Mjwvd29laWQ+DQogICAgICAgICAgICA8cGxhY2VUeXBlTmFtZSBjb2RlPSIyOSI+Q29udGluZW50PC9wbGFjZVR5cGVOYW1lPg0KICAgICAgICAgICAgPG5hbWU+Tm9ydGggQW1lcmljYTwvbmFtZT4NCiAgICAgICAgPC9wbGFjZT4NCiAgICAgICAgPHBsYWNlIHhtbG5zPSJodHRwOi8vd2hlcmUueWFob29hcGlzLmNvbS92MS9zY2hlbWEucm5nIg0KICAgICAgICAgICAgeG1sOmxhbmc9ImVuLVVTIiB5YWhvbzp1cmk9Imh0dHA6Ly93aGVyZS55YWhvb2FwaXMuY29tL3YxL3BsYWNlLzU1OTQ5MDcwIj4NCiAgICAgICAgICAgIDx3b2VpZD41NTk0OTA3MDwvd29laWQ+DQogICAgICAgICAgICA8cGxhY2VUeXBlTmFtZSBjb2RlPSIyOSI+Q29udGluZW50PC9wbGFjZVR5cGVOYW1lPg0KICAgICAgICAgICAgPG5hbWU+QXVzdHJhbGlhPC9uYW1lPg0KICAgICAgICA8L3BsYWNlPg0KICAgIDwvcmVzdWx0cz4NCjwvcXVlcnk+]]></data>
	</file>
	<file>
	  <filename>/samples/xquery.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eHF1ZXJ5IHZlcnNpb24gIjEuMCI7DQoNCmxldCAkbWVzc2FnZSA6PSAiSGVsbG8gV29ybGQhIg0KcmV0dXJuIDxyZXN1bHRzPg0KICA8bWVzc2FnZT57JG1lc3NhZ2V9PC9tZXNzYWdlPg0KPC9yZXN1bHRzPg0K]]></data>
	</file>
	<file>
	  <filename>/samples/yaml.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBUaGlzIHNhbXBsZSBkb2N1bWVudCB3YXMgdGFrZW4gZnJvbSB3aWtpcGVkaWE6DQojIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWUFNTCNTYW1wbGVfZG9jdW1lbnQNCi0tLQ0KcmVjZWlwdDogICAgIE96LVdhcmUgUHVyY2hhc2UgSW52b2ljZQ0KZGF0ZTogICAgICAgIDIwMDctMDgtMDYNCmN1c3RvbWVyOg0KICAgIGdpdmVuOiAgIERvcm90aHkNCiAgICBmYW1pbHk6ICBHYWxlDQoNCml0ZW1zOg0KICAgIC0gcGFydF9ubzogICAnQTQ3ODYnDQogICAgICBkZXNjcmlwOiAgIFdhdGVyIEJ1Y2tldCAoRmlsbGVkKQ0KICAgICAgcHJpY2U6ICAgICAxLjQ3DQogICAgICBxdWFudGl0eTogIDQNCg0KICAgIC0gcGFydF9ubzogICAnRTE2MjgnDQogICAgICBkZXNjcmlwOiAgIEhpZ2ggSGVlbGVkICJSdWJ5IiBTbGlwcGVycw0KICAgICAgc2l6ZTogICAgICA4DQogICAgICBwcmljZTogICAgIDEwMC4yNw0KICAgICAgcXVhbnRpdHk6ICAxDQoNCmJpbGwtdG86ICAmaWQwMDENCiAgICBzdHJlZXQ6IHwNCiAgICAgICAgICAgIDEyMyBUb3JuYWRvIEFsbGV5DQogICAgICAgICAgICBTdWl0ZSAxNg0KICAgIGNpdHk6ICAgRWFzdCBDZW50ZXJ2aWxsZQ0KICAgIHN0YXRlOiAgS1MNCg0Kc2hpcC10bzogICppZDAwMQ0KDQpzcGVjaWFsRGVsaXZlcnk6ICA+DQogICAgRm9sbG93IHRoZSBZZWxsb3cgQnJpY2sNCiAgICBSb2FkIHRvIHRoZSBFbWVyYWxkIENpdHkuDQogICAgUGF5IG5vIGF0dGVudGlvbiB0byB0aGUNCiAgICBtYW4gYmVoaW5kIHRoZSBjdXJ0YWluLg0K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/templates/ace.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KPGRpdiBjbGFzcz0iYWNlLXdyYXBwZXIiIGlkPSJ7JGVkaXRvcmlkfV9zY3JlZW4iPg0KICAgIDxkaXYgY2xhc3M9ImFjZS11aS1jb250YWluZXIiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJ7JHRleHRhcmVhaWR9X3Rvb2xiYXIiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLXVpLXRvb2xiYXIgY2YiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjZS10b2dnbGUtZWRpdG9yIGFjZS1sZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0ieyR0ZXh0YXJlYWlkfV9vbiIgY2xhc3M9ImFjZS10b2dnbGUgYWNlLXJhZGlvIGFjZS10b2dnbGUtbGVmdCIgbmFtZT0icmFkaW9feyRhY2VfaWR9IiBjaGVja2VkPSJjaGVja2VkIiAvPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImFjZS10b29sdGlwIiBkYXRhLXRpcD0ieyRtb2QtPkxhbmcoJ2hpZ2hsaWdodGVyX29uJyl9IiBmb3I9InskdGV4dGFyZWFpZH1fb24iPnskbW9kLT5MYW5nKCdvbicpfTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgaWQ9InskdGV4dGFyZWFpZH1fb2ZmIiBjbGFzcz0iYWNlLXRvZ2dsZSBhY2UtcmFkaW8gYWNlLXRvZ2dsZS1yaWdodCIgbmFtZT0icmFkaW9feyRhY2VfaWR9IiAvPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImFjZS10b29sdGlwIiBkYXRhLXRpcD0ieyRtb2QtPkxhbmcoJ2hpZ2hsaWdodGVyX29mZicpfSIgZm9yPSJ7JHRleHRhcmVhaWR9X29mZiI+eyRtb2QtPkxhbmcoJ29mZicpfTwvbGFiZWw+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWZpbmQtbGluZSBhY2UtdGV4dC1pbnB1dCBhY2UtbGVmdCI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdnb19saW5lJyl9OjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ieyR0ZXh0YXJlYWlkfV9nb2xpbmUiIGNsYXNzPSJhY2UtaW5wdXQiIG5hbWU9ImFjZV9nb2xpbmUiIHZhbHVlPSIiIHBhdHRlcm49IlxkKyIgcGxhY2Vob2xkZXI9InskbW9kLT5MYW5nKCdnb19saW5lJyl9OiIgb25mb2N1cz0idGhpcy5wbGFjZWhvbGRlciA9ICcnIiBvbmJsdXI9InRoaXMucGxhY2Vob2xkZXIgPSAneyRtb2QtPkxhbmcoJ2dvX2xpbmUnKX06JyIgLz4NCiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49InRydWUiIGRhdGEtaWNvbj0iJiN4ZTAwYjsiIGNsYXNzPSJhY2UtaWNvbiBhY2UtbGluZS1zZWFyY2gtaWNvbiI+PHNwYW4gY2xhc3M9InZpc3VhbGx5aGlkZGVuIj57JG1vZC0+TGFuZygnZ29fbGluZScpfTwvc3Bhbj48L2k+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLXNlYXJjaC1zdHJpbmcgYWNlLXRleHQtaW5wdXQgYWNlLWxlZnQgY2YiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZpc3VhbGx5aGlkZGVuIj57JG1vZC0+TGFuZygnc2VhcmNoX2RvY3VtZW50Jyl9OjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ieyR0ZXh0YXJlYWlkfV9zZWFyY2giIGNsYXNzPSJhY2UtaW5wdXQiIG5hbWU9ImFjZV9zZWFyY2giIHZhbHVlPSIiIHBsYWNlaG9sZGVyPSJ7JG1vZC0+TGFuZygnc2VhcmNoX2RvY3VtZW50Jyl9OiIgb25mb2N1cz0idGhpcy5wbGFjZWhvbGRlciA9ICcnIiBvbmJsdXI9InRoaXMucGxhY2Vob2xkZXIgPSAneyRtb2QtPkxhbmcoJ3NlYXJjaF9kb2N1bWVudCcpfTonIiAvPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtaW5mby1kaXZpZGVyIj4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2aXN1YWxseWhpZGRlbiI+eyRtb2QtPkxhbmcoJ3JlcGxhY2Vfd2l0aCcpfTo8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InskdGV4dGFyZWFpZH1fcmVwbGFjZSIgY2xhc3M9ImFjZS1pbnB1dCBhY2UtaGlkZGVuIiBuYW1lPSJhY2VfcmVwbGFjZSIgdmFsdWU9IiIgcGxhY2Vob2xkZXI9InskbW9kLT5MYW5nKCdyZXBsYWNlX3dpdGgnKX06IiBvbmZvY3VzPSJ0aGlzLnBsYWNlaG9sZGVyID0gJyciIG9uYmx1cj0idGhpcy5wbGFjZWhvbGRlciA9ICd7JG1vZC0+TGFuZygncmVwbGFjZV93aXRoJyl9OiciIC8+DQogICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iYWNlLW9wdGlvbi1tZW51Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBhcmlhLWhpZGRlbj0idHJ1ZSIgZGF0YS1pY29uPSImI3hlMDBjOyIgY2xhc3M9ImFjZS1pY29uIGFjZS1vcHRpb24taWNvbiBhY2UtdG9vbHRpcCBhY2UtdG9nZ2xlLW1lbnUiIGRhdGEtdGlwPSJ7JG1vZC0+TGFuZygnc2VhcmNoX29wdGlvbnMnKX0iPjxzcGFuIGNsYXNzPSJ2aXN1YWxseWhpZGRlbiI+eyRtb2QtPkxhbmcoJ3NlYXJjaF9vcHRpb25zJyl9PC9zcGFuPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9InskdGV4dGFyZWFpZH1fb3B0aW9ucyIgY2xhc3M9ImFjZS1saXN0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLXNlYXJjaC1vcHRpb249ImZpbmQiIGNsYXNzPSJhY2Utc2VsZWN0ZWQiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCdzZWFyY2hfZG9jdW1lbnQnKX08L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS1hY2Utc2VhcmNoLW9wdGlvbj0icmVwbGFjZSI+PGkgY2xhc3M9ImFjZS1pY29uLWNoZWNrbWFyay1jaXJjbGUiPjwvaT4geyRtb2QtPkxhbmcoJ3JlcGxhY2Vfb3B0aW9uJyl9PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLXNlYXJjaC1vcHRpb249InJlcGxhY2VBbGwiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCdyZXBsYWNlYWxsX29wdGlvbicpfTwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgYXJpYS1oaWRkZW49InRydWUiIGRhdGEtaWNvbj0iJiN4ZTAwZjsiIGNsYXNzPSJhY2UtaWNvbiBhY2Utb3B0aW9uLWljb24gYWNlLXRvb2x0aXAgYWNlLXRvZ2dsZS1tZW51IiBkYXRhLXRpcD0ieyRtb2QtPkxhbmcoJ3NlYXJjaF9zZXR0aW5ncycpfSI+PHNwYW4gY2xhc3M9InZpc3VhbGx5aGlkZGVuIj57JG1vZC0+TGFuZygnc2VhcmNoX3NldHRpbmdzJyl9PC9zcGFuPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9InskdGV4dGFyZWFpZH1fc2VhcmNoX3NldHRpbmdzIiBjbGFzcz0iYWNlLWxpc3QiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgZGF0YS1hY2Utc2VhcmNoLW9wdGlvbj0icmVzZXQiIGNsYXNzPSJhY2Utc2VsZWN0ZWQiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCdzZWFyY2hfYW55Jyl9PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLXNlYXJjaC1vcHRpb249ImNhc2VTZW5zaXRpdmUiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCdjYXNlX3NlbnNpdGl2ZScpfTwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBkYXRhLWFjZS1zZWFyY2gtb3B0aW9uPSJ3aG9sZVdvcmQiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCd3aG9sZV93b3JkJyl9PC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLXNlYXJjaC1vcHRpb249InJlZ0V4cCI+PGkgY2xhc3M9ImFjZS1pY29uLWNoZWNrbWFyay1jaXJjbGUiPjwvaT4geyRtb2QtPkxhbmcoJ3JlZ2V4cCcpfTwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLXRvZ2dsZS1lZGl0b3IgYWNlLWxlZnQiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9InZpc3VhbGx5aGlkZGVuIj57JG1vZC0+TGFuZygna2V5YmluZGluZ3MnKX06PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBjbGFzcz0iYWNlLXRvZ2dsZSBhY2UtcmFkaW8gYWNlLXRvZ2dsZS1sZWZ0IiBpZD0ieyR0ZXh0YXJlYWlkfV9hY2UiIG5hbWU9InJhZGlvMl97JGFjZV9pZH0iIGNoZWNrZWQ9ImNoZWNrZWQiIHZhbHVlPSJudWxsIiAvPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImFjZS10b29sdGlwIiBkYXRhLXRpcD0ieyRtb2QtPkxhbmcoJ2tleWJpbmRpbmdzJyl9IiBmb3I9InskdGV4dGFyZWFpZH1fYWNlIj57JG1vZC0+TGFuZygnYWNlJyl9PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBjbGFzcz0iYWNlLXRvZ2dsZSBhY2UtcmFkaW8gYWNlLXRvZ2dsZS1taWRkbGUiIGlkPSJ7JHRleHRhcmVhaWR9X3ZpbSIgbmFtZT0icmFkaW8yX3skYWNlX2lkfSIgdmFsdWU9InZpbSIgLz4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJhY2UtdG9vbHRpcCIgZGF0YS10aXA9InskbW9kLT5MYW5nKCdrZXliaW5kaW5ncycpfSIgZm9yPSJ7JHRleHRhcmVhaWR9X3ZpbSI+eyRtb2QtPkxhbmcoJ3ZpbScpfTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgY2xhc3M9ImFjZS10b2dnbGUgYWNlLXJhZGlvIGFjZS10b2dnbGUtcmlnaHQiIGlkPSJ7JHRleHRhcmVhaWR9X2VtYWNzIiBuYW1lPSJyYWRpbzJfeyRhY2VfaWR9IiB2YWx1ZT0iZW1hY3MiIC8+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYWNlLXRvb2x0aXAiIGRhdGEtdGlwPSJ7JG1vZC0+TGFuZygna2V5YmluZGluZ3MnKX0iIGZvcj0ieyR0ZXh0YXJlYWlkfV9lbWFjcyI+eyRtb2QtPkxhbmcoJ2VtYWNzJyl9PC9sYWJlbD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtaW5mby1kaXZpZGVyIj4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0ieyRlZGl0b3JpZH1fYWNlLWZ1bGxzY3JlZW4iIGNsYXNzPSJhY2UtaWNvbi1leHBhbmQgYWNlLWljb24gYWNlLWZ1bGxzY3JlZW4tYnV0dG9uIGFjZS1yaWdodCIgdGl0bGU9InskbW9kLT5MYW5nKCdmdWxsX3NjcmVlbicpfSI+PHNwYW4gY2xhc3M9InZpc3VhbGx5aGlkZGVuIj57JG1vZC0+TGFuZygnZnVsbF9zY3JlZW4nKX08L3NwYW4+PC9hPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtY29udGFpbmVyIj4NCnsvc3RyaXB9DQogICAgICAgICAgICA8dGV4dGFyZWEgDQogICAgICAgICAgICAgICAgaWQ9InskdGV4dGFyZWFpZH0iIA0KICAgICAgICAgICAgICAgIGRhdGEtYWNlLWVkaXRvci1pZD0ieyRlZGl0b3JpZH0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2Utd2lkdGg9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd3aWR0aCcsICcxMDAnKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2Utd2lkdGgtdW5pdHM9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd3aWR0aF91bml0cycsICclJyl9Ig0KICAgICAgICAgICAgICAgIGRhdGEtYWNlLWhlaWdodD0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hlaWdodCcsICc2MDAnKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2UtYXV0by1oZWlnaHQ9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdhdXRvX2hlaWdodCcsIDApfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1oZWlnaHQtdW5pdHM9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdoZWlnaHRfdW5pdHMnLCAncHgnKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2Utc2VsZWN0ZWQtdGhlbWU9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd0aGVtZScsICd0d2lsaWdodCcpfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1zZWxlY3RlZC1tb2RlPSJ7aWYgaXNzZXQoJG1vZGUpICYmICFlbXB0eSgkbW9kZSl9eyRtb2RlfXtlbHNlfXskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdtb2RlJywgJ2h0bWwnKX17L2lmfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1mb250LXNpemU9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdmb250c2l6ZScsICcxM3B4Jyl9Ig0KICAgICAgICAgICAgICAgIGRhdGEtYWNlLXRhYi1zaXplPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgndGFiX3NpemUnLCAnNCcpfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1zb2Z0LXdyYXA9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzb2Z0X3dyYXAnLCAnODAnKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2Utc2VsZWN0aW9uLXN0eWxlPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnZnVsbF9saW5lJywgMSl9Ig0KICAgICAgICAgICAgICAgIGRhdGEtYWNlLWhpZ2hsaWdodC1saW5lPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X2FjdGl2ZScsIDEpfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1oaWdobGlnaHQtd29yZD0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9zZWxlY3RlZCcsIDEpfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1zaG93LWludmlzaWJsZXM9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzaG93X2ludmlzaWJsZXMnLCAwKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2UtaHNjcm9sbC1iYXI9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdwZXJzaXN0ZW50X2hzY3JvbGwnLCAwKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2Utc2hvdy1ndXR0ZXI9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzaG93X2d1dHRlcicsIDEpfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS13cmFwLWxpbmU9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd3cmFwX2xpbmUnLCAxKX0iDQogICAgICAgICAgICAgICAgZGF0YS1hY2Utc29mdC10YWI9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzb2Z0X3RhYicsIDEpfSINCiAgICAgICAgICAgICAgICBkYXRhLWFjZS1iZWhhdmlvdXJzLWVuYWJsZWQ9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdlbmFibGVfYmVoYXZpb3JzJywgMSl9Ig0KICAgICAgICAgICAgICAgIGRhdGEtYWNlLXByaW50LW1hcmdpbj0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3ByaW50X21hcmdpbicsIDApfSINCiAgICAgICAgICAgICAgICBjbGFzcz0iYWNlX2VkaXRvcl90ZXh0YXJlYSIgDQogICAgICAgICAgICAgICAgbmFtZT0ieyR0ZXh0YXJlYW5hbWV9Ij57JHN5bnRheF9jb250ZW50fTwvdGV4dGFyZWE+DQp7c3RyaXB9DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtdWktdG9vbGJhci1ib3R0b20gY2YiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLXVpLWJvdHRvbS1sZWZ0IGFjZS1sZWZ0IGNmIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtZWRpdG9yLWN1cnNvciBhY2UtZWRpdG9yLWluZm8tYm90dG9tIGFjZS1sZWZ0IiBpZD0ieyR0ZXh0YXJlYWlkfV9hY2UtZWRpdG9yLWN1cnNvciI+Jm5ic3A7PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWVkaXRvci1jdXJzb3IgYWNlLWVkaXRvci1pbmZvLWJvdHRvbSBhY2UtbGVmdCIgaWQ9InskdGV4dGFyZWFpZH1fYWNlLWVkaXRvci1saW5lbnVtIj57JG1vZC0+TGFuZygndG90YWxfbGluZXMnKX06IDxzcGFuPiZuYnNwOzwvc3Bhbj48L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtaW5mby1kaXZpZGVyIj4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtZWRpdG9yLXRva2VuIGFjZS1lZGl0b3ItaW5mby1ib3R0b20gYWNlLWxlZnQiIGlkPSJ7JHRleHRhcmVhaWR9X2FjZS1lZGl0b3ItdG9rZW4iPnskbW9kLT5MYW5nKCdjdXJyZW50X3Rva2VuJyl9OiA8c3Bhbj4mbmJzcDs8L3NwYW4+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjZS11aS1ib3R0b20tcmlnaHQgYWNlLXJpZ2h0IGNmIj4NCiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImFjZS1vcHRpb24tbWVudSI+DQogICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGFyaWEtaGlkZGVuPSJ0cnVlIiBkYXRhLWljb249IiYjeGUwMTA7IiBpZD0iYWNlLWVkaXRvci1tb2RlcyIgY2xhc3M9ImFjZS10b29sdGlwIGFjZS10b29sdGlwLXRvcC1sZWZ0IGFjZS1pY29uIGFjZS1vcHRpb24taWNvbiBhY2UtdG9nZ2xlLW1lbnUiIGhyZWY9IiMiIGRhdGEtdGlwPSJ7JG1vZC0+TGFuZygnc3ludGF4X21vZGUnKX0gIj48c3BhbiBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdzeW50YXhfbW9kZScpfTwvc3Bhbj48L2E+DQogICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9InskdGV4dGFyZWFpZH1fbW9kZXMiIGNsYXNzPSJhY2UtbGlzdCBjZiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAge2ZvcmVhY2ggJG1vZC0+QWNlR2V0TW9kZXMoKSBhcyAkdmFsdWV9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLW1vZGU9InskdmFsdWVAa2V5fSJ7aWYgaXNzZXQoJG1vZGUpICYmICFlbXB0eSgkbW9kZSkgJiYgJG1vZGUgPT0gJHZhbHVlQGtleX0gY2xhc3M9ImFjZS1zZWxlY3RlZCJ7L2lmfT48aSBjbGFzcz0iYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZSI+PC9pPiB7JHZhbHVlfTwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgey9mb3JlYWNofQ0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9kaXY+DQoNCnsvc3RyaXB9]]></data>
	</file>
	<file>
	  <filename>/templates/ace_bottom.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KDQo8ZGl2IGNsYXNzPSJhY2UtdWktdG9vbGJhci1ib3R0b20gY2YiPg0KDQogIDxkaXYgY2xhc3M9ImFjZS11aS1ib3R0b20tbGVmdCBhY2UtbGVmdCBjZiI+DQogICAgPGRpdiBjbGFzcz0iYWNlLWVkaXRvci1jdXJzb3IgYWNlLWVkaXRvci1pbmZvLWJvdHRvbSBhY2UtbGVmdCIgaWQ9Iih0aSlfYWNlLWVkaXRvci1jdXJzb3IiPiZuYnNwOzwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImFjZS1pbmZvLWRpdmlkZXIiPiZuYnNwOzwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImFjZS1lZGl0b3ItY3Vyc29yIGFjZS1lZGl0b3ItaW5mby1ib3R0b20gYWNlLWxlZnQiIGlkPSIodGkpX2FjZS1lZGl0b3ItbGluZW51bSI+eyRtb2QtPkxhbmcoJ3RvdGFsX2xpbmVzJyl9OiA8c3Bhbj4mbmJzcDs8L3NwYW4+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQogICAgPGRpdiBjbGFzcz0iYWNlLWVkaXRvci10b2tlbiBhY2UtZWRpdG9yLWluZm8tYm90dG9tIGFjZS1sZWZ0IiBpZD0iKHRpKV9hY2UtZWRpdG9yLXRva2VuIj57JG1vZC0+TGFuZygnY3VycmVudF90b2tlbicpfTogPHNwYW4+Jm5ic3A7PC9zcGFuPjwvZGl2Pg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJhY2UtdWktYm90dG9tLXJpZ2h0IGFjZS1yaWdodCBjZiI+DQoNCiAgICA8dWwgY2xhc3M9ImFjZS1vcHRpb24tbWVudSI+DQogICAgICA8bGk+DQogICAgICAgIDxhIGFyaWEtaGlkZGVuPSJ0cnVlIiBkYXRhLWljb249IiYjeGUwMTA7IiBpZD0iYWNlLWVkaXRvci1tb2RlcyIgY2xhc3M9ImFjZS10b29sdGlwIGFjZS10b29sdGlwLXRvcC1sZWZ0IGFjZS1pY29uIGFjZS1vcHRpb24taWNvbiBhY2UtdG9nZ2xlLW1lbnUiIGhyZWY9IiMiIGRhdGEtdGlwPSJ7JG1vZC0+TGFuZygnc3ludGF4X21vZGUnKX0gIj4NCiAgICAgICAgICA8c3BhbiBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdzeW50YXhfbW9kZScpfTwvc3Bhbj4NCiAgICAgICAgPC9hPg0KICAgICAgICA8dWwgaWQ9Iih0aSlfbW9kZXMiIGNsYXNzPSJhY2UtbGlzdCBjZiI+DQogICAgICAgICAgICB7Zm9yZWFjaCAkbW9kLT5BY2VHZXRNb2RlcygpIGFzICR2YWx1ZX0NCiAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLW1vZGU9InskdmFsdWVAa2V5fSJ7aWYgaXNzZXQoJG1vZGUpICYmICFlbXB0eSgkbW9kZSkgJiYgJG1vZGUgPT0gJHZhbHVlQGtleX0gY2xhc3M9ImFjZS1zZWxlY3RlZCJ7L2lmfT4NCiAgICAgICAgICAgICAgPGkgY2xhc3M9ImFjZS1pY29uLWNoZWNrbWFyay1jaXJjbGUiPjwvaT4geyR2YWx1ZX08L2xpPg0KICAgICAgICAgICAgey9mb3JlYWNofQ0KICAgICAgICA8L3VsPg0KICAgICAgPC9saT4NCiAgICA8L3VsPg0KDQogIDwvZGl2Pg0KDQo8L2Rpdj4NCnsvc3RyaXB9]]></data>
	</file>
	<file>
	  <filename>/templates/ace_code.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KICA8ZGl2IGNsYXNzPSJhY2UtY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IHskYWNlX2Jsb2NrLndpZHRofXskYWNlX2Jsb2NrLndpZHRoX3VuaXRzfTsgaGVpZ2h0OiB7JGFjZV9ibG9jay5oZWlnaHR9eyRhY2VfYmxvY2suaGVpZ2h0X3VuaXRzfTsiPg0KCSAgICA8cHJlIGNsYXNzPSJhY2UtZWxlbWVudCIgaWQ9InskYWNlX2Jsb2NrLmRpdmlkfSIgc3R5bGU9ImZvbnQtc2l6ZTogeyRhY2VfYmxvY2suZm9udHNpemV9OyI+eyRhY2VfYmxvY2suY29udGVudH08L3ByZT4NCgk8L2Rpdj4NCnsvc3RyaXB9DQoNCjxzY3JpcHQ+DQoJJCgnI3skYWNlX2Jsb2NrLmRpdmlkfScpDQogICAgLmFjZUluaXQoew0KICAgICAgICAgICAgICB0aGVtZSA6ICd7JGFjZV9ibG9jay50aGVtZX0nLA0KICAgICAgICAgICAgICBtb2RlIDogJ3skYWNlX2Jsb2NrLm1vZGV9JywNCiAgICAgICAgICAgICAgYXV0b0hlaWdodCA6IHskYWNlX2Jsb2NrLmF1dG9faGVpZ2h0fQ0KICAgICAgICAgICAgfSk7DQo8L3NjcmlwdD4=]]></data>
	</file>
	<file>
	  <filename>/templates/ace_top.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KDQo8ZGl2IGNsYXNzPSIodGkpX3Rvb2xiYXIiPg0KICAgICAgPGRpdiBjbGFzcz0iYWNlLXVpLXRvb2xiYXIgY2YiPg0KDQogICAgICAgIDxkaXYgY2xhc3M9ImFjZS10b2dnbGUtZWRpdG9yIGFjZS1sZWZ0Ij4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iDQogICAgICAgICAgICAgICAgIGlkPSIodGkpX29uIg0KICAgICAgICAgICAgICAgICBjbGFzcz0iYWNlLXRvZ2dsZSBhY2UtcmFkaW8gYWNlLXRvZ2dsZS1sZWZ0Ig0KICAgICAgICAgICAgICAgICBuYW1lPSJyYWRpb18oIykiDQogICAgICAgICAgICAgICAgIGNoZWNrZWQ9ImNoZWNrZWQiIC8+DQogICAgICAgICAgPGxhYmVsIGNsYXNzPSJhY2UtdG9vbHRpcCINCiAgICAgICAgICAgICAgICAgZGF0YS10aXA9InskbW9kLT5MYW5nKCdoaWdobGlnaHRlcl9vbicpfSINCiAgICAgICAgICAgICAgICAgZm9yPSIodGkpX29uIj57JG1vZC0+TGFuZygnb24nKX08L2xhYmVsPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyINCiAgICAgICAgICAgICAgICAgaWQ9Iih0aSlfb2ZmIg0KICAgICAgICAgICAgICAgICBjbGFzcz0iYWNlLXRvZ2dsZSBhY2UtcmFkaW8gYWNlLXRvZ2dsZS1yaWdodCINCiAgICAgICAgICAgICAgICAgbmFtZT0icmFkaW9fKCMpIiAvPg0KICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYWNlLXRvb2x0aXAiDQogICAgICAgICAgICAgICAgIGRhdGEtdGlwPSJ7JG1vZC0+TGFuZygnaGlnaGxpZ2h0ZXJfb2ZmJyl9Ig0KICAgICAgICAgICAgICAgICBmb3I9Iih0aSlfb2ZmIj57JG1vZC0+TGFuZygnb2ZmJyl9PC9sYWJlbD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWZpbmQtbGluZSBhY2UtdGV4dC1pbnB1dCBhY2UtbGVmdCI+DQogICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2aXN1YWxseWhpZGRlbiI+eyRtb2QtPkxhbmcoJ2dvX2xpbmUnKX06PC9sYWJlbD4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCINCiAgICAgICAgICAgICAgICAgaWQ9Iih0aSlfZ29saW5lIg0KICAgICAgICAgICAgICAgICBjbGFzcz0iYWNlLWlucHV0Ig0KICAgICAgICAgICAgICAgICBuYW1lPSJhY2VfZ29saW5lIg0KICAgICAgICAgICAgICAgICB2YWx1ZT0iIg0KICAgICAgICAgICAgICAgICBwYXR0ZXJuPSJcZCsiDQogICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7JG1vZC0+TGFuZygnZ29fbGluZScpfToiDQogICAgICAgICAgICAgICAgIG9uZm9jdXM9InRoaXMucGxhY2Vob2xkZXIgPSBcJ1wnIiBvbmJsdXI9InRoaXMucGxhY2Vob2xkZXIgPSBcJ3skbW9kLT5MYW5nKCdnb19saW5lJyl9OlwnIiAvPg0KICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPSJ0cnVlIg0KICAgICAgICAgICAgIGRhdGEtaWNvbj0iJiN4ZTAwYjsiDQogICAgICAgICAgICAgY2xhc3M9ImFjZS1pY29uIGFjZS1saW5lLXNlYXJjaC1pY29uIj4NCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdnb19saW5lJyl9PC9zcGFuPg0KICAgICAgICAgIDwvaT4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iYWNlLXNlYXJjaC1zdHJpbmcgYWNlLXRleHQtaW5wdXQgYWNlLWxlZnQgY2YiPg0KDQogICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2aXN1YWxseWhpZGRlbiI+eyRtb2QtPkxhbmcoJ3NlYXJjaF9kb2N1bWVudCcpfTo8L2xhYmVsPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0Ig0KICAgICAgICAgICAgICAgICBpZD0iKHRpKV9zZWFyY2giDQogICAgICAgICAgICAgICAgIGNsYXNzPSJhY2UtaW5wdXQiDQogICAgICAgICAgICAgICAgIG5hbWU9ImFjZV9zZWFyY2giDQogICAgICAgICAgICAgICAgIHZhbHVlPSIiDQogICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7JG1vZC0+TGFuZygnc2VhcmNoX2RvY3VtZW50Jyl9OiINCiAgICAgICAgICAgICAgICAgb25mb2N1cz0idGhpcy5wbGFjZWhvbGRlciA9IFwnXCciIG9uYmx1cj0idGhpcy5wbGFjZWhvbGRlciA9IFwneyRtb2QtPkxhbmcoJ3NlYXJjaF9kb2N1bWVudCcpfTpcJyIgLz4NCg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImFjZS1pbmZvLWRpdmlkZXIiPiZuYnNwOzwvZGl2Pg0KDQogICAgICAgICAgPGxhYmVsIGNsYXNzPSJ2aXN1YWxseWhpZGRlbiI+eyRtb2QtPkxhbmcoJ3JlcGxhY2Vfd2l0aCcpfTo8L2xhYmVsPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0Ig0KICAgICAgICAgICAgICAgICBpZD0iKHRpKV9yZXBsYWNlIg0KICAgICAgICAgICAgICAgICBjbGFzcz0iYWNlLWlucHV0IGFjZS1oaWRkZW4iDQogICAgICAgICAgICAgICAgIG5hbWU9ImFjZV9yZXBsYWNlIg0KICAgICAgICAgICAgICAgICB2YWx1ZT0iIg0KICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ieyRtb2QtPkxhbmcoJ3JlcGxhY2Vfd2l0aCcpfToiDQogICAgICAgICAgICAgICAgIG9uZm9jdXM9InRoaXMucGxhY2Vob2xkZXIgPSBcJ1wnIiBvbmJsdXI9InRoaXMucGxhY2Vob2xkZXIgPSBcJ3skbW9kLT5MYW5nKCdyZXBsYWNlX3dpdGgnKX06XCciIC8+DQoNCiAgICAgICAgICA8dWwgY2xhc3M9ImFjZS1vcHRpb24tbWVudSI+DQogICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgIDxhIGhyZWY9IiMiDQogICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPSJ0cnVlIg0KICAgICAgICAgICAgICAgICBkYXRhLWljb249IiYjeGUwMGM7Ig0KICAgICAgICAgICAgICAgICBjbGFzcz0iYWNlLWljb24gYWNlLW9wdGlvbi1pY29uIGFjZS10b29sdGlwIGFjZS10b2dnbGUtbWVudSINCiAgICAgICAgICAgICAgICAgZGF0YS10aXA9InskbW9kLT5MYW5nKCdzZWFyY2hfb3B0aW9ucycpfSI+DQogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdzZWFyY2hfb3B0aW9ucycpfTwvc3Bhbj4NCiAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICA8dWwgaWQ9Iih0aSlfb3B0aW9ucyINCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJhY2UtbGlzdCI+DQogICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLXNlYXJjaC1vcHRpb249ImZpbmQiDQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhY2Utc2VsZWN0ZWQiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCdzZWFyY2hfZG9jdW1lbnQnKX08L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBkYXRhLWFjZS1zZWFyY2gtb3B0aW9uPSJyZXBsYWNlIj48aSBjbGFzcz0iYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZSI+PC9pPiB7JG1vZC0+TGFuZygncmVwbGFjZV9vcHRpb24nKX08L2xpPg0KICAgICAgICAgICAgICAgIDxsaSBkYXRhLWFjZS1zZWFyY2gtb3B0aW9uPSJyZXBsYWNlQWxsIj48aSBjbGFzcz0iYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZSI+PC9pPiB7JG1vZC0+TGFuZygncmVwbGFjZWFsbF9vcHRpb24nKX08L2xpPg0KICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgPGEgaHJlZj0iIyINCiAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49InRydWUiDQogICAgICAgICAgICAgICAgIGRhdGEtaWNvbj0iJiN4ZTAwMjsiDQogICAgICAgICAgICAgICAgIGNsYXNzPSJhY2UtaWNvbiBhY2Utb3B0aW9uLWljb24gYWNlLXRvb2x0aXAgYWNlLXRvZ2dsZS1tZW51Ig0KICAgICAgICAgICAgICAgICBkYXRhLXRpcD0ieyRtb2QtPkxhbmcoJ3NlYXJjaF9zZXR0aW5ncycpfSI+PHNwYW4gY2xhc3M9InZpc3VhbGx5aGlkZGVuIj57JG1vZC0+TGFuZygnc2VhcmNoX3NldHRpbmdzJyl9PC9zcGFuPjwvYT4NCiAgICAgICAgICAgICAgPHVsIGlkPSIodGkpX3NlYXJjaF9zZXR0aW5ncyINCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJhY2UtbGlzdCI+DQogICAgICAgICAgICAgICAgICA8bGkgZGF0YS1hY2Utc2VhcmNoLW9wdGlvbj0icmVzZXQiDQogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImFjZS1zZWxlY3RlZCI+PGkgY2xhc3M9ImFjZS1pY29uLWNoZWNrbWFyay1jaXJjbGUiPjwvaT4geyRtb2QtPkxhbmcoJ3NlYXJjaF9hbnknKX08L2xpPg0KICAgICAgICAgICAgICAgICAgPGxpIGRhdGEtYWNlLXNlYXJjaC1vcHRpb249ImNhc2VTZW5zaXRpdmUiPjxpIGNsYXNzPSJhY2UtaWNvbi1jaGVja21hcmstY2lyY2xlIj48L2k+IHskbW9kLT5MYW5nKCdjYXNlX3NlbnNpdGl2ZScpfTwvbGk+DQogICAgICAgICAgICAgICAgICA8bGkgZGF0YS1hY2Utc2VhcmNoLW9wdGlvbj0id2hvbGVXb3JkIj48aSBjbGFzcz0iYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZSI+PC9pPiB7JG1vZC0+TGFuZygnd2hvbGVfd29yZCcpfTwvbGk+DQogICAgICAgICAgICAgICAgICA8bGkgZGF0YS1hY2Utc2VhcmNoLW9wdGlvbj0icmVnRXhwIj48aSBjbGFzcz0iYWNlLWljb24tY2hlY2ttYXJrLWNpcmNsZSI+PC9pPiB7JG1vZC0+TGFuZygncmVnZXhwJyl9PC9saT4NCiAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iYWNlLWluZm8tZGl2aWRlciI+Jm5ic3A7PC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0iYWNlLXRvZ2dsZS1lZGl0b3IgYWNlLWxlZnQiPg0KICAgICAgICAgIDxsYWJlbCBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdrZXliaW5kaW5ncycpfTo8L2xhYmVsPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyINCiAgICAgICAgICAgICAgICAgY2xhc3M9ImFjZS10b2dnbGUgYWNlLXJhZGlvIGFjZS10b2dnbGUtbGVmdCINCiAgICAgICAgICAgICAgICAgaWQ9Iih0aSlfYWNlIg0KICAgICAgICAgICAgICAgICBuYW1lPSJyYWRpbzJfKCMpIg0KICAgICAgICAgICAgICAgICBjaGVja2VkPSJjaGVja2VkIg0KICAgICAgICAgICAgICAgICB2YWx1ZT0ibnVsbCIgLz4NCiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImFjZS10b29sdGlwIg0KICAgICAgICAgICAgICAgICBkYXRhLXRpcD0ieyRtb2QtPkxhbmcoJ2tleWJpbmRpbmdzJyl9Ig0KICAgICAgICAgICAgICAgICBmb3I9Iih0aSlfYWNlIj57JG1vZC0+TGFuZygnYWNlJyl9PC9sYWJlbD4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iDQogICAgICAgICAgICAgICAgIGNsYXNzPSJhY2UtdG9nZ2xlIGFjZS1yYWRpbyBhY2UtdG9nZ2xlLW1pZGRsZSINCiAgICAgICAgICAgICAgICAgaWQ9Iih0aSlfdmltIg0KICAgICAgICAgICAgICAgICBuYW1lPSJyYWRpbzJfKCMpIg0KICAgICAgICAgICAgICAgICB2YWx1ZT0idmltIiAvPg0KICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYWNlLXRvb2x0aXAiDQogICAgICAgICAgICAgICAgIGRhdGEtdGlwPSJ7JG1vZC0+TGFuZygna2V5YmluZGluZ3MnKX0iDQogICAgICAgICAgICAgICAgIGZvcj0iKHRpKV92aW0iPnskbW9kLT5MYW5nKCd2aW0nKX08L2xhYmVsPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyINCiAgICAgICAgICAgICAgICAgY2xhc3M9ImFjZS10b2dnbGUgYWNlLXJhZGlvIGFjZS10b2dnbGUtcmlnaHQiDQogICAgICAgICAgICAgICAgIGlkPSIodGkpX2VtYWNzIg0KICAgICAgICAgICAgICAgICBuYW1lPSJyYWRpbzJfKCMpIg0KICAgICAgICAgICAgICAgICB2YWx1ZT0iZW1hY3MiIC8+DQogICAgICAgICAgPGxhYmVsIGNsYXNzPSJhY2UtdG9vbHRpcCINCiAgICAgICAgICAgICAgICAgZGF0YS10aXA9InskbW9kLT5MYW5nKCdrZXliaW5kaW5ncycpfSINCiAgICAgICAgICAgICAgICAgZm9yPSIodGkpX2VtYWNzIj57JG1vZC0+TGFuZygnZW1hY3MnKX08L2xhYmVsPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJhY2UtaW5mby1kaXZpZGVyIj4mbmJzcDs8L2Rpdj4NCg0KICAgICAgICA8YSBocmVmPSIjIg0KICAgICAgICAgICBpZD0iKGVpKV9hY2UtZnVsbHNjcmVlbiINCiAgICAgICAgICAgY2xhc3M9ImFjZS1pY29uLWV4cGFuZCBhY2UtaWNvbiBhY2UtZnVsbHNjcmVlbi1idXR0b24gYWNlLXJpZ2h0Ig0KICAgICAgICAgICB0aXRsZT0ieyRtb2QtPkxhbmcoJ2Z1bGxfc2NyZWVuJyl9Ij4NCiAgICAgICAgICA8c3BhbiBjbGFzcz0idmlzdWFsbHloaWRkZW4iPnskbW9kLT5MYW5nKCdmdWxsX3NjcmVlbicpfTwvc3Bhbj4NCiAgICAgICAgPC9hPg0KDQogICAgICA8L2Rpdj4NCg0KICAgIDwvZGl2Pg0Key9zdHJpcH0=]]></data>
	</file>
	<file>
	  <filename>/templates/AdminSyntaxGenerateHeader.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ieyRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKX0vbGliL2Nzcy9hY2VVSS5jc3MiIC8+DQo8c2NyaXB0IHNyYz0ieyRtb2QtPkdldE1vZHVsZVVSTFBhdGgoKX0vbGliL2FjZS9hY2UuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9InskbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCl9L2xpYi9hY2Uva2V5YmluZGluZy12aW0uanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCBzcmM9InskbW9kLT5HZXRNb2R1bGVVUkxQYXRoKCl9L2xpYi9hY2Uva2V5YmluZGluZy1lbWFjcy5qcyI+PC9zY3JpcHQ+DQoNCjxzY3JpcHQ+DQokKGRvY3VtZW50KQ0KICAucmVhZHkoZnVuY3Rpb24oKQ0KICB7DQogICAgJCgnLkFjZVN5bnRheCcpDQogICAgLmVhY2goZnVuY3Rpb24oaW5kZXgpDQogICAgIHsNCiAgICAgICAvLyBkbyBzb21lIGluaXRpYWxpemF0aW9uDQogICAgICAgdmFyIHRleHRhcmVhID0gJCh0aGlzKTsNCiAgICAgICB2YXIgdG9wSFRNTCA9ICd7JHRvcH0nOw0KICAgICAgIHZhciBCb3R0b21IVE1MID0gJ3skYm90dG9tfSc7DQogICAgICAgdmFyIEhUTUwgPSAnJzsNCiAgICAgICB2YXIgdGV4dGFyZWFpZCA9ICdhY2VfZWRpdG9yJyArIGluZGV4Ow0KICAgICAgIHZhciBlZGl0b3JpZCA9ICdhY2UtZWRpdG9yJyArIGluZGV4Ow0KICAgICAgICB0ZXh0YXJlYQ0KICAgICAgICAgLmF0dHIoew0KICAgICAgICAgICAgICAgICAnaWQnOiB0ZXh0YXJlYWlkLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2UtZWRpdG9yLWlkJzogZWRpdG9yaWQsDQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS13aWR0aCc6ICd7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnd2lkdGgnLCAnMTAwJyl9JywNCiAgICAgICAgICAgICAgICAgJ2RhdGEtYWNlLXdpZHRoLXVuaXRzJzogJ3skbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd3aWR0aF91bml0cycsICclJyl9JywNCiAgICAgICAgICAgICAgICAgJ2RhdGEtYWNlLWhlaWdodCc6ICd7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnaGVpZ2h0JywgJzYwMCcpfScsDQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS1hdXRvLWhlaWdodCc6ICd7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnYXV0b19oZWlnaHQnLCAwKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2UtaGVpZ2h0LXVuaXRzJzogJ3skbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdoZWlnaHRfdW5pdHMnLCAncHgnKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2Utc2VsZWN0ZWQtdGhlbWUnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3RoZW1lJywgJ3R3aWxpZ2h0Jyl9JywNCiAgICAgICAgICAgICAgICAgJ2RhdGEtYWNlLXNlbGVjdGVkLW1vZGUnOiAnaHRtbCcsICAgICAvLyByZXZpc2l0DQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS1mb250LXNpemUnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2ZvbnRzaXplJywgJzEzcHgnKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2UtdGFiLXNpemUnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3RhYl9zaXplJywgJzQnKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2Utc29mdC13cmFwJzogJ3skbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzb2Z0X3dyYXAnLCAnODAnKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2Utc2VsZWN0aW9uLXN0eWxlJzogJ3skbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdmdWxsX2xpbmUnLCAxKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2UtaGlnaGxpZ2h0LWxpbmUnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9hY3RpdmUnLCAxKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2UtaGlnaGxpZ2h0LXdvcmQnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9zZWxlY3RlZCcsIDEpfScsDQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS1zaG93LWludmlzaWJsZXMnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3Nob3dfaW52aXNpYmxlcycsIDApfScsDQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS1oc2Nyb2xsLWJhcic6ICd7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgncGVyc2lzdGVudF9oc2Nyb2xsJywgMCl9JywNCiAgICAgICAgICAgICAgICAgJ2RhdGEtYWNlLXNob3ctZ3V0dGVyJzogJ3skbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzaG93X2d1dHRlcicsIDEpfScsDQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS13cmFwLWxpbmUnOiAneyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3dyYXBfbGluZScsIDEpfScsDQogICAgICAgICAgICAgICAgICdkYXRhLWFjZS1zb2Z0LXRhYic6ICd7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnc29mdF90YWInLCAxKX0nLA0KICAgICAgICAgICAgICAgICAnZGF0YS1hY2UtYmVoYXZpb3Vycy1lbmFibGVkJzogJ3skbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdlbmFibGVfYmVoYXZpb3JzJywgMSl9JywNCiAgICAgICAgICAgICAgICAgJ2RhdGEtYWNlLXByaW50LW1hcmdpbic6ICd7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgncHJpbnRfbWFyZ2luJywgMCl9Jw0KICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAuYWRkQ2xhc3MoJ2FjZV9lZGl0b3JfdGV4dGFyZWEnKTsNCg0KICAgICAgICAgICBIVE1MICs9ICc8ZGl2IGNsYXNzPSJhY2Utd3JhcHBlciIgaWQ9IicgKyBlZGl0b3JpZCArICdfc2NyZWVuIj4nOw0KICAgICAgICAgICBIVE1MICs9ICc8ZGl2IGNsYXNzPSJhY2UtdWktY29udGFpbmVyIj4nOw0KICAgICAgICAgICBIVE1MICs9IHRvcEhUTUwucmVwbGFjZSgvXCh0aVwpL2csIHRleHRhcmVhaWQpLnJlcGxhY2UoL1woZWlcKS9nLCBlZGl0b3JpZCkucmVwbGFjZSgvXChcI1wpL2csIGluZGV4KTsNCiAgICAgICAgICAgSFRNTCArPSAnPGRpdiBjbGFzcz0iYWNlLWNvbnRhaW5lciI+JzsNCiAgICAgICAgICAgSFRNTCArPSAkKHRleHRhcmVhKS5nZXQoMCkub3V0ZXJIVE1MOw0KICAgICAgICAgICBIVE1MICs9ICc8L2Rpdj4nOw0KICAgICAgICAgICBIVE1MICs9IEJvdHRvbUhUTUwucmVwbGFjZSgvXCh0aVwpL2csIHRleHRhcmVhaWQpOw0KICAgICAgICAgICBIVE1MICs9ICc8L2Rpdj4nOw0KICAgICAgICAgICBIVE1MICs9ICc8L2Rpdj4nOw0KICAgICAgICAgICAkKHRleHRhcmVhKS5yZXBsYWNlV2l0aChIVE1MKTsNCiAgICAgICAgIH0pOw0KDQogICAgY29uc29sZS5sb2coJ0hlYWRlciBkb25lIScpDQogICAgICB9KTsNCg0KZnVuY3Rpb24gZ2V0UmVxdWVzdFVyaSgpDQp7DQogIHJldHVybiAneyRhamF4X2xpbmt8cmVwbGFjZTonJmFtcDsnOicmJ30nOw0KfQ0KPC9zY3JpcHQ+DQoNCjxzY3JpcHQgc3JjPSJ7JG1vZC0+R2V0TW9kdWxlVVJMUGF0aCgpfS9saWIvanMvZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPg0KCTxsaT48Yj5WZXJzaW9uIDEuMC4xPC9iPiAtIDA5LTExLTIwMTk8YnIgLz4NCgkJLSBBY2UgZWRpdG9yIHRlbXBsYXRlIGZpeC48YnIgLz4NCgkJLSAoS2luZCBvZikgZml4ZXMgZnVsbCBzY3JlZW4gZmVhdHVyZS4gT25seSB3aGVuIHVzaW5nIGVzY2FwZSBrZXkgdG8gY2xvc2UgeW91IG5lZWQgdG8gY2xpY2sgdHdpY2UuLi48YnIgLz4NCgkJLSBGaXhlZCBtdWx0aXBsZSBBY2UgZWRpdG9yIHNjcmVlbnMgYXQgb25lIEFkbWluIHBhZ2UuPGJyIC8+DQogICAgICAgIC0gVXBkYXRlZCBoZWxwIHRleHQuPGJyIC8+DQogICAgICAgIC0gTXVsdGlwbGUgb3RoZXIgaW1wcm92ZW1lbnRzLjwvbGk+DQogICAgPGxpPjxiPlZlcnNpb24gMS4wPC9iPiAtIDA2LTExLTIwMTk8YnIgLz4NCiAgICAgICAgLSBJbml0aWFsIHJlbGVhc2UuPC9saT4NCjwvdWw+]]></data>
	</file>
	<file>
	  <filename>/templates/help.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0KDQp7dGFiX2hlYWRlciBuYW1lPSdzdXBwb3J0JyBsYWJlbD0nU3VwcG9ydCd9DQp7dGFiX2hlYWRlciBuYW1lPSdnZW5lcmFsJyBsYWJlbD0nR2VuZXJhbCd9DQp7dGFiX2hlYWRlciBuYW1lPSdiYWNrZW5kJyBsYWJlbD0nQmFja2VuZCBVc2UnfQ0Ke3RhYl9oZWFkZXIgbmFtZT0nZnJvbnRlbmQnIGxhYmVsPSdGcm9udGVuZCBVc2UnfQ0Ke3RhYl9oZWFkZXIgbmFtZT0nc2hvcnRjdXRzJyBsYWJlbD0nU2hvcnRjdXRzJ30NCnt0YWJfaGVhZGVyIG5hbWU9J21vZGVzX3RoZW1lcycgbGFiZWw9J01vZGVzIGFuZCBUaGVtZXMnfQ0Ke3RhYl9oZWFkZXIgbmFtZT0ndHJvdWJsZXNob290aW5nJyBsYWJlbD0nVHJvdWJsZXNob290aW5nJ30NCnt0YWJfaGVhZGVyIG5hbWU9J2NvcHlyaWdodCcgbGFiZWw9J0NvcHlyaWdodCBhbmQgTGljZW5zZSd9DQoNCnt0YWJfc3RhcnQgbmFtZT0nc3VwcG9ydCd9DQoNCgk8aDM+VGhpcyBtb2R1bGUgaXMgYnJvdWdodCB0byB5b3UgYnk6PC9oMz4NCgk8dWw+DQoJCTxsaT5GZXJuYW5kbyBNb3JnYWRvIFtqb21vcmcgYXQgc20tYXJ0LWxhYiBkb3QgY29tXS48L2xpPg0KCQk8bGk+Um9sZiBUamFzc2VucyBbaW5mbyBhdCBjbXNjYW5iZXNpbXBsZSBkb3Qgb3JnXS48L2xpPg0KCTwvdWw+DQoJCQ0KCTxoMz5TdXBwb3J0PC9oMz4NCgk8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBjb250YWluIGFueSBjb21tZXJjaWFsIHN1cHBvcnQuIElmIHlvdSBoYXZlIHByb2JsZW1zLCBhc2sgZm9yIGhlbHAgaW4gdGhlOjwvcD4NCgk8dWw+DQoJCTxsaT48YSBocmVmPSJodHRwczovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnLyIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+Q01TIE1hZGUgU2ltcGxlIGZvcnVtczwvYT47PC9saT4NCgkJPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL3N1cHBvcnQvZG9jdW1lbnRhdGlvbi9jaGF0LyIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+U2xhY2sgY2hhdDwvYT47PC9saT4NCgkJPGxpPm9yIHdyaXRlIGFuIGVtYWlsIHRvIHRoZSBhdXRob3IuPC9saT4NCgk8L3VsPg0KDQoNCnt0YWJfc3RhcnQgbmFtZT0nZ2VuZXJhbCd9DQoNCgk8aDM+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvaDM+DQoNCgk8cD48aW1nIHNyYz0ieyRtb2R1bGVfcGF0aH0vaW1hZ2VzL2VkaXRvcl9zY3JlZW5zaG90LmpwZyIgYWx0PSJzY3JlZW5zaG90IGVkaXRvciIgc3R5bGU9ImZsb2F0OiByaWdodDsgbWFyZ2luOiAxMHB4OyIgLz4NCgkJVGhlIEFjZVN5bnRheCBtb2R1bGUgaXMgYSBTeW50YXhoaWdobGlnaHRlciBwbHVnaW4gZm9yIENNUyBNYWRlIFNpbXBsZSB1c2luZyA8c3Ryb25nPkFjZTwvc3Ryb25nPiwgYSBzdGFuZGFsb25lIGNvZGUgZWRpdG9yIHdyaXR0ZW4gaW4gSmF2YVNjcmlwdC48YnIgLz4NCgkJR29hbCBvZiBBY2UgY29kZSBlZGl0b3IgZ3JvdXAgaXMgdG8gY3JlYXRlIGEgd2ViIGJhc2VkIGNvZGUgZWRpdG9yIHRoYXQgbWF0Y2hlcyBhbmQgZXh0ZW5kcyB0aGUgZmVhdHVyZXMsIHVzYWJpbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgZXhpc3RpbmcgbmF0aXZlIGVkaXRvcnMgc3VjaCBhcyBUZXh0TWF0ZSwgVmltIG9yIEVjbGlwc2UuPGJyIC8+DQoJCUFjZSBpcyBkZXZlbG9wZWQgYXMgdGhlIHByaW1hcnkgZWRpdG9yIGZvciA8YSBocmVmPSJodHRwOi8vd3d3LmNsb3VkOWlkZS5jb20iPkNsb3VkOSBJREU8L2E+IGFuZCB0aGUgc3VjY2Vzc29yIG9mIHRoZSBNb3ppbGxhIFNreXdyaXRlciAoQmVzcGluKSBQcm9qZWN0LjwvcD4NCg0KCTxoND5BY2UgRmVhdHVyZXM6PC9oND4NCg0KCTx1bD4NCgkJPGxpPlN5bnRheCBoaWdobGlnaHRpbmc8L2xpPg0KCQk8bGk+QXV0b21hdGljIGluZGVudCBhbmQgb3V0ZGVudDwvbGk+DQoJCTxsaT5BbiBvcHRpb25hbCBjb21tYW5kIGxpbmU8L2xpPg0KCQk8bGk+SGFuZGxlcyBodWdlIGRvY3VtZW50cyAoMTAwLDAwMCBsaW5lcyBhbmQgbW9yZSBhcmUgbm8gcHJvYmxlbSk8L2xpPg0KCQk8bGk+RnVsbHkgY3VzdG9taXphYmxlIGtleSBiaW5kaW5ncyBpbmNsdWRpbmcgVkkgYW5kIEVtYWNzIG1vZGVzPC9saT4NCgkJPGxpPlRoZW1lcyAoVGV4dE1hdGUgdGhlbWVzIGNhbiBiZSBpbXBvcnRlZCk8L2xpPg0KCQk8bGk+U2VhcmNoIGFuZCByZXBsYWNlIHdpdGggcmVndWxhciBleHByZXNzaW9uczwvbGk+DQoJCTxsaT5IaWdobGlnaHQgbWF0Y2hpbmcgcGFyZW50aGVzZXM8L2xpPg0KCQk8bGk+VG9nZ2xlIGJldHdlZW4gc29mdCB0YWJzIGFuZCByZWFsIHRhYnM8L2xpPg0KCQk8bGk+RGlzcGxheXMgaGlkZGVuIGNoYXJhY3RlcnM8L2xpPg0KCQk8bGk+RHJhZyBhbmQgZHJvcCB0ZXh0IHVzaW5nIHRoZSBtb3VzZTwvbGk+DQoJCTxsaT5MaW5lIHdyYXBwaW5nPC9saT4NCgkJPGxpPlVuc3RydWN0dXJlZCAvIHVzZXIgY29kZSBmb2xkaW5nPC9saT4NCgkJPGxpPkxpdmUgc3ludGF4IGNoZWNrZXIgKGN1cnJlbnRseSBKYXZhU2NyaXB0L0NvZmZlZVNjcmlwdCk8L2xpPg0KCTwvdWw+DQoNCgk8aDM+QWNlIGlzIGhvc3RlZCBvbiBHaXRIdWI8L2gzPg0KDQoJPHA+VGhlIEFjZSBzb3VyY2UgY29kZSBpcyBob3N0ZWQgb24gR2l0SHViLiBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTW96aWxsYSB0cmktbGljZW5zZSAoTVBML0dQTC9MR1BMKS48YnIgLz4NCgkJVGhpcyBpcyB0aGUgc2FtZSBsaWNlbnNlIHVzZWQgYnkgRmlyZWZveC4gVGhpcyBsaWNlbnNlIGlzIGZyaWVuZGx5IHRvIGFsbCBraW5kcyBvZiBwcm9qZWN0cywgd2hldGhlciBvcGVuIHNvdXJjZSBvciBub3QuPGJyIC8+DQoJCVRha2UgY2hhcmdlIG9mIHlvdXIgZWRpdG9yIGFuZCBhZGQgeW91ciBmYXZvcml0ZSBsYW5ndWFnZSBoaWdobGlnaHRpbmcgYW5kIGtleWJpbmRpbmdzITwvcD4NCg0KDQp7dGFiX3N0YXJ0IG5hbWU9J2JhY2tlbmQnfQ0KDQoJPGgzPlVzaW5nIEFjZVN5bnRheCBNb2R1bGU8L2gzPg0KDQoJPHA+VXNpbmcgQWNlU3ludGF4IE1vZHVsZSBpcyBzaW1wbGUuIEFmdGVyIHRoZSBtb2R1bGUgaXMgaW5zdGFsbGVkIGdvIHRvICJNeSBQcmVmZXJlbmNlcyAmcmFxdW87IFVzZXIgUHJlZmVyZW5jZXMiIGFuZCBjaG9vc2UgQWNlU3ludGF4IGFzIHlvdXIgU3ludGF4aGlnaGxpZ2h0ZXIgb2YgY2hvaWNlIGZyb20gIlNlbGVjdCBzeW50YXggaGlnaGxpZ2h0ZXIgdG8NCgkJdXNlOiIgZHJvcGRvd24uPGJyIC8+DQoJCU1ha2Ugc3VyZSB5b3UgaGF2ZSAnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnIFBlcm1zaXNzaW9uLjwvcD4NCg0KCTxoMz5TZXR0aW5nczwvaDM+DQoNCgk8cD5Zb3UgY2FuIGNoYW5nZSBkZWZhdWx0IFNldHRpbmdzLCBNb2RlcyBhbmQgVGhlbWVzIGF0ICJNeSBQcmVmZXJlbmNlcyAmcmFxdW87IEFjZVN5bnRheCI8L3A+DQoNCg0Ke3RhYl9zdGFydCBuYW1lPSdmcm9udGVuZCd9DQoNCgk8cD5UaGlzIG1vZHVsZSBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgZnJvbnRlbmQgc3ludGF4aGlnaGxpZ2h0ZXIuPHA+DQoJPHA+VGhlcmUgYXJlIGEgZmV3IHN0ZXBzIHlvdSBoYXZlIHRvIHRha2UgZm9yIGl0IHRvIHdvcmsuIEFjZSBpcyBpbXBsZW1lbnRlZCBhcyBhIGpRdWVyeSBwbHVnaW4gc28gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgZnJhbWV3b3JrIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgdG8gd29yay4gVG8gZ2l2ZSB5b3UgbW9yZSB2ZXJzYXRpbGl0eSB5b3UgY2FuIGluY2x1ZGUgalF1ZXJ5IGluIGEgbnVtYmVyIG9mIGRpZmZlcmVudCB3YXlzOjwvcD4NCgk8dWw+DQoJCTxsaT55b3UgY2FuIGluY2x1ZGUgaXQgeW91cnNlbGYgaWYgeW91ciB0ZW1wbGF0ZSBkb2Vzbid0IGFscmVhZHkgdXNlIGl0OzwvbGk+DQoJCTxsaT55b3UgbWF5IHVzZSBDTVNNUyA8Yj48Y29kZT57bGRlbGltfWNtc19qcXVlcnl9PC9jb2RlPjwvYj4gdGFnIDxlbT4oYmUgYXdhcmUgdGhhdCB0aGlzIHRhZyBpcyBkZXByZWNhdGVkIGFuZCBpcyByZW1vdmVkIGZyb20gQ01TIGNvcmUgaW4gdXBjb21pbmcgcmVsZWFzZSAyLjMpPC9lbT47PC9saT4NCgkJPGxpPnlvdSBtYXkgdXNlIEFjZVN5bnRheCBvd24gU21hcnR5IGhlbHBlciA8Yj48Y29kZT57bGRlbGltfWFjZXN5bjo6anMoMSl9PC9jb2RlPjwvYj4gKHNlZSBub3RlcyBiZWxvdyk7PC9saT4NCgkJPGxpPnlvdSBtYXkgdXNlIGEgM3JkIHBhcnR5IHBsdWdpbiBpZiB5b3UgcHJlZmVyOzwvbGk+DQoJPC91bD4NCg0KCTxwPmpRdWVyeSBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIHRlbXBsYXRlIGVpdGhlciBpbiB0aGUgSFRNTCA8Yj48Y29kZT4mbHQ7aGVhZCZndDs8L2NvZGU+PC9iPiBzZWN0aW9uIG9yIHJpZ2h0IGJlZm9yZSB0aGUgY2xvc2luZyA8Yj48Y29kZT4mbHQ7L2JvZHkmZ3Q7PC9jb2RlPjwvYj4gdGFnLiBUaGUgPGI+PGNvZGU+e2xkZWxpbX1hY2VzeW46OmpzKCl9PC9jb2RlPjwvYj4gdGFnIG11c3QgYmUgcmlnaHQgYWZ0ZXIgb3IgZXZlbiBhdCB0aGUgZW5kIG9mIGFueSBwbHVnaW5zIGluY2x1ZGVkIGZvciBqUXVlcnkuPHA+DQoJPHA+Tm90ZSB0aGF0IDxiPjxjb2RlPntsZGVsaW19YWNlc3luOjpqcygpfTwvY29kZT48L2I+IG1heSBoYXZlIGEgcGFyYW1ldGVyIHdoaWNoIG1heSBiZSA8Yj4xPC9iPiwgPGI+MDwvYj4gb3IgZW1wdHkgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGFzc3VtZSA8Yj4wPC9iPjogdGhpcyB3aWxsIHRlbGwgQWNlU3ludGF4IHdoZXRoZXIgdG8gaW5jbHVkZSBhIGxpbmsgdG8galF1ZXJ5IENETiBvciBub3QuIElmIG5vdCBvbmx5IHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQgb2YgQWNlIHdpbGwgYmUgaW5jbHVkZWQuPHA+DQoJPHA+QWxzbyByZXF1aXJlZCBpcyB0aGUgPGI+PGNvZGU+e2xkZWxpbX1hY2VzeW46OmNzcygpfTwvY29kZT48L2I+IHdoaWNoIHVubGlrZSB0aGUganMgcGx1Z2luIDxiPm11c3Q8L2I+IGJlIGluY2x1ZGVkIGluIHRoZSBIVE1MIDxiPjxjb2RlPiZsdDtoZWFkJmd0OzwvY29kZT48L2I+IHNlY3Rpb24gYXMgaXQgaW5jbHVkZXMgdGhlIENTUyByZXNldCBmb3IgdGhlIGNvbnRhaW5lcnMgb2YgdGhlIGNvZGUgdG8gaGlnaGxpZ2h0PC9wPg0KCTxwPkZpbmFseSBhZGQgYSBjYWxsIHRvIHNwZWNpZnkgd2hpY2ggYXJlYSBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQsIGZvciBleGFtcGxlIDxiPjxjb2RlPntsZGVsaW19YWNlX2NvZGV9IHlvdXIgY29kZSB7bGRlbGltfS9hY2VfY29kZX08L2NvZGU+PC9iPiBpbiB5b3VyIGNvbnRlbnQuPC9wPg0KCTxwPllvdSBjYW4gY2FsbCB0aGUgYmxvY2sgcGx1Z2luIGFzIG1hbnkgdGltZXMgaW4gYSBzaW5nbGUgcGFnZSBhcyB5b3Ugd2hpY2g6IEFjZVN5bnRheCB3aWxsIGF1dG9tYXRpY2FseSBhZGQgYW4gdW5pcXVlIGlkIHRvIGVhY2ggY29udGFpbmVyIGJ1dCB5b3UgY2FuIGFsd2F5cyBzcGVjaWZ5IGFuIGlkIGlmIG5lZWRlZC48L3A+DQoJPHA+VG8gYXZvaWQgaGF2aW5nIHRvIHJlcGVhdCB0aGUgc2FtZSBwYXJhbWV0ZXIgb24gZXZlcnkgdGFnLCBBY2VTeW50YXggaGFzIGEgdGFnIDxiPjxjb2RlPntsZGVsaW19YWNlX3BhZ2VfcmVzZXR9PC9jb2RlPjwvYj4gd2hlcmUgeW91IGNhbiBhZGQgdGhlIGFjY2VwdGVkIHBhcmFtZXRlcnMgb25jZSBhbmQgdGhleSB3aWxsIGJlIHVzZWQgYnkgYWxsIHN1YnNlcXVlbnQgdGFncyBvbiB0aGUgc2FtZSBwYWdlLjwvcD4NCgk8cD5QbGVhc2Ugbm90ZSB0aGF0IHRoZXJlIGlzIGFuIGhpZXJhcmNoeSBieSB3aGljaCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbjo8L3A+DQoNCgk8dWw+DQoJCTxsaT5wYXJhbWV0ZXJzIHNldCBpbiBlYWNoIGJsb2NrIHRhZyBoYXZlIHByZWNlZGVuY2Ugb3ZlciBhbGwgdGhlIHJlc3Q7PC9saT4NCgkJPGxpPnBhcmFtZXRlcnMgc2V0IGluIDxiPjxjb2RlPntsZGVsaW19YWNlX3BhZ2VfcmVzZXR9PC9jb2RlPjwvYj4gd2lsbCBhZmZlY3QgYWxsIHN1YnNlcXVlbnQgdGFncyBpbiB0aGUgcGFnZSBleGNlcHQgd2hlcmUgdGhlIGJsb2NrIHRhZ3MgaGF2ZSBzcGVjaWZpYyBvdmVycmlkZXM7PC9saT4NCgkJPGxpPmlmIG5vIHBhcmFtZXRlcnMgYXJlIHNldCBpbiBhbnkgb2YgdGhlIHRhZ3Mgb3IgPGI+PGNvZGU+e2xkZWxpbX1hY2VfcGFnZV9yZXNldH08L2NvZGU+PC9iPiBpcyBub3QgdXNlZCwgdGhlIHByZWZlcmVuY2VzIHNldCBpbiB0aGUgYWRtaW4gcGFuZWwgYXJlIHVzZWQ7PC9saT4NCgk8L3VsPg0KDQoJPGgzPlNvIGhvdyBkbyB5b3UgdXNlIGl0PzwvaDM+DQoNCgk8cD5GaXJzdCBpbmNsdWRlIGpRdWVyeSAoaWYgeW91IGFyZSBub3QgdXNpbmcgaXQgYWxyZWFkeSksIGZvciBleGFtcGxlIGluICZxdW90O1BhZ2UgU3BlY2lmaWMgTWV0ZGF0YSZxdW90Ozo8L3A+DQoNCjxwcmU+DQp7bGRlbGltfWNtc19qcXVlcnkgZXhjbHVkZT0nanF1ZXJ5LXVpLm1pbi5qcywganF1ZXJ5LnVpLm5lc3RlZFNvcnRhYmxlLmpzLGpxdWVyeS5qc29uLm1pbi5qcyd9DQo8L3ByZT4NCg0KCTxwPlRoaXMgaW5jbHVkZXMgbmVlZGVkIEphdmFTY3JpcHQgc2NyaXB0cyBmb3IgQWNlIFN5bnRheGhpZ2hsaWdodGVyIHRvIHdvcmsuPGJyIC8+DQoJCUluIE1vZHVsZSBBZG1pbiBpbnRlcmZhY2UgeW91IGNhbiBzZWxlY3QgZGVmYXVsdCBzZXR0aW5ncyBmb3IgeW91ciBjb2RlIGJsb2NrcyBvciB1c2UgcGFyYW1ldGVyIG9uIE1vZHVsZSBibG9jayBwbHVnaW4gbW9kZT0naHRtbCcgYW5kIHRoZW1lPSd0ZXh0bWF0ZScgd2hpY2ggd291bGQgb3ZlcnJpZGUgc2VsZWN0ZWQgUHJlZmVyZW5jZXMuPC9wPg0KDQoJPHA+V3JpdGUgeW91ciBjb2RlIHdoaWNoIHlvdSB3b3VsZCBsaWtlIHRvIGJlIGhpZ2hsaWdodGVkIGluc2lkZSA8Y29kZT57bGRlbGltfWFjZV9jb2RlfSB7bGRlbGltfS9hY2VfY29kZX08L2NvZGU+IGJsb2NrIHBsdWdpbi48L3A+DQoNCjxwcmU+DQp7bGRlbGltfWFjZV9jb2RlIHRoZW1lPSd0d2lsaWdodCcgbW9kZT0ncnVieScgZGl2aWQ9J215LWNvZGUtYmxvY2snfSBDb2RlIGluIGhlcmUge2xkZWxpbX0vYWNlX2NvZGV9DQo8L3ByZT4NCg0KCTxwPlRoaXMgYmxvY2sgcGx1Z2luIGluY2x1ZGVzIG5lZWRlZCBqUXVlcnkgcGx1Z2luIGNhbGwgYW5kIHdyYXBzIHlvdXIgY29udGVudCBpbnNpZGUgJmx0O3ByZSZndDsgSFRNTCB0YWcgc3BlY2lmaWVkIGlkLjwvcD4NCg0KPHByZT4NCjxjb2RlPg0Ke2xpdGVyYWx9e2FjZV9jb2RlIGlkPSdzb21lLWlkJyB0aGVtZT0ndHdpbGlnaHQnIGh0bWxlbnRpdGllcz0nMScgbW9kZT0namF2YXNjcmlwdCd9DQombHQ7aHRtbCZndDsNCiZsdDtoZWFkJmd0Ow0KICAmbHQ7c3R5bGUgdHlwZT0idGV4dC9jc3MiJmd0Ow0KICAgIC50ZXh0LWxheWVyIHsNCiAgICAgIGZvbnQtZmFtaWx5OiBNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsNCiAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgIGN1cnNvcjogdGV4dDsNCiAgICB9DQogICZsdDsvc3R5bGUmZ3Q7DQombHQ7L2hlYWQmZ3Q7DQombHQ7Ym9keSZndDsNCiAgJmx0O2gxIHN0eWxlPSJjb2xvcjpyZWQiJmd0O1lFUyEmbHQ7L2gxJmd0Ow0KJmx0Oy9ib2R5Jmd0Ow0KJmx0Oy9odG1sJmd0Ow0Key9hY2VfY29kZX17L2xpdGVyYWx9DQo8L2NvZGU+DQo8L3ByZT4NCg0KDQp7dGFiX3N0YXJ0IG5hbWU9J3Nob3J0Y3V0cyd9DQoNCgk8aDM+RGVmYXVsdCBLZXlib2FyZCBTaG9ydGN1dHM8L2gzPg0KDQoJPHRhYmxlIGNsYXNzPSJwYWdldGFibGUiIGNlbGxzcGFjaW5nPSIwIiBzdW1tYXJ5PSJEZWZhdWx0IEtleWJvYXJkIFNob3J0Y3V0cyI+DQoJPHRoZWFkPg0KCTx0cj4NCgk8dGg+UEMgKFdpbmRvd3MvTGludXgpPC90ZD4NCgk8dGg+TWFjPC90ZD4NCgk8dGg+QWN0aW9uPC90ZD4NCgk8L3RyPg0KCTwvdGhlYWQ+DQoJPHRib2R5Pg0KCTx0ciBjbGFzcz0icm93MSI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVJldHVybjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVJldHVybjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5mdWxsc2NyZWVuPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVM8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnBlcmZvcm0gc2F2ZTwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtTDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5jZW50ZXIgc2VsZWN0aW9uPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUFsdC1Eb3duPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtT3B0aW9uLURvd248L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Y29weSBsaW5lcyBkb3duPC90ZD4NCgk8L3RyPg0KCTx0ciBsY2Fzcz0icm93MSI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUFsdC1VcDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1VcDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5jb3B5IGxpbmVzIHVwPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUY8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1GPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPmZpbmQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtSzwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUc8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+ZmluZCBuZXh0PC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUs8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1HPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPmZpbmQgcHJldmlvdXM8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPkRvd248L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+RG93bixDdHJsLU48L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Z28gbGluZSBkb3duPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5VcDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5VcCxDdHJsLVA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Z28gbGluZSB1cDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1FbmQsQ3RybC1Eb3duPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtRW5kLENvbW1hbmQtRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBlbmQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPkxlZnQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+TGVmdCxDdHJsLUI8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGVmdDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1MPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtTDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsaW5lPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5BbHQtUmlnaHQsRW5kPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtUmlnaHQsRW5kLEN0cmwtRTwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBsaW5lIGVuZDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+QWx0LUxlZnQsSG9tZTwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUxlZnQsSG9tZSxDdHJsLUE8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gbGluZSBzdGFydDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzIiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+UGFnZURvd248L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVBhZ2VEb3duLEN0cmwtVjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byBwYWdlIGRvd248L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPlBhZ2VVcDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tUGFnZVVwPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHBhZ2UgdXA8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPlJpZ2h0PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPlJpZ2h0LEN0cmwtRjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byByaWdodDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1Ib21lLEN0cmwtVXA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1Ib21lLENvbW1hbmQtVXA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Z28gdG8gc3RhcnQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtTGVmdDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tTGVmdDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5nbyB0byB3b3JkIGxlZnQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtUmlnaHQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVJpZ2h0PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPmdvIHRvIHdvcmQgcmlnaHQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPlRhYjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5UYWI8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+aW5kZW50PC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MSI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5BbHQtRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5tb3ZlIGxpbmVzIGRvd248L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPkFsdC1VcDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tVXA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+bW92ZSBsaW5lcyB1cDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVGFiPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LVRhYjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5vdXRkZW50PC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5JbnNlcnQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+SW5zZXJ0PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPm92ZXJ3cml0ZTwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPlBhZ2VEb3duPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnBhZ2Vkb3duPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+UGFnZVVwPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnBhZ2V1cDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1aLEN0cmwtWTwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVosQ29tbWFuZC1ZPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnJlZG88L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtRDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLUQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIGxpbmU8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUs8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHRvIGxpbmUgZW5kPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLUJhY2tzcGFjZTwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5yZW1vdmUgdG8gbGluZXN0YXJ0PC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MSI+DQoJPHRkIGFsaWduPSJsZWZ0Ij48L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+QWx0LUJhY2tzcGFjZSxDdHJsLUFsdC1CYWNrc3BhY2U8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHdvcmQgbGVmdDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzIiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkFsdC1EZWxldGU8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+cmVtb3ZlIHdvcmQgcmlnaHQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtUjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLU9wdGlvbi1GPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnJlcGxhY2U8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtUjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LU9wdGlvbi1GPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnJlcGxhY2UgYWxsPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MSI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLUE8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1BPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBhbGw8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPlNoaWZ0LURvd248L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgZG93bjwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtTGVmdDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1MZWZ0PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBsZWZ0PC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1FbmQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtRW5kPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBsaW5lIGVuZDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtSG9tZTwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1Ib21lPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBsaW5lIHN0YXJ0PC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgcGFnZSBkb3duPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MSI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1QYWdlVXA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtUGFnZVVwPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCBwYWdlIHVwPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1SaWdodDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5TaGlmdC1SaWdodDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgcmlnaHQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtU2hpZnQtRW5kLEFsdC1TaGlmdC1Eb3duPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtRG93bjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdG8gZW5kPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5BbHQtU2hpZnQtUmlnaHQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q29tbWFuZC1TaGlmdC1SaWdodDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdG8gbGluZSBlbmQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cxIj4NCgk8dGQgYWxpZ249ImxlZnQiPkFsdC1TaGlmdC1MZWZ0PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtU2hpZnQtTGVmdDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5zZWxlY3QgdG8gbGluZSBzdGFydDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzIiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1Ib21lLEFsdC1TaGlmdC1VcDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5Db21tYW5kLVNoaWZ0LVVwPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPnNlbGVjdCB0byBzdGFydDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVXA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+U2hpZnQtVXA8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHVwPC90ZD4NCgk8L3RyPg0KCTx0ciBjbGFzcz0icm93MiI+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLVNoaWZ0LUxlZnQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+T3B0aW9uLVNoaWZ0LUxlZnQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHdvcmQgbGVmdDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1TaGlmdC1SaWdodDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5PcHRpb24tU2hpZnQtUmlnaHQ8L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+c2VsZWN0IHdvcmQgcmlnaHQ8L3RkPg0KCTwvdHI+DQoJPHRyIGNsYXNzPSJyb3cyIj4NCgk8dGQgYWxpZ249ImxlZnQiPjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij5DdHJsLU88L3RkPg0KCTx0ZCBhbGlnbj0ibGVmdCI+c3BsaXQgbGluZTwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC03PC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtNzwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij50b2dnbGUgY29tbWVudDwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzIiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1UPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkN0cmwtVDwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij50cmFuc3Bvc2UgbGV0dGVyczwvdGQ+DQoJPC90cj4NCgk8dHIgY2xhc3M9InJvdzEiPg0KCTx0ZCBhbGlnbj0ibGVmdCI+Q3RybC1aPC90ZD4NCgk8dGQgYWxpZ249ImxlZnQiPkNvbW1hbmQtWjwvdGQ+DQoJPHRkIGFsaWduPSJsZWZ0Ij51bmRvPC90ZD4NCgk8L3RyPg0KCTwvdGJvZHk+DQoJPC90YWJsZT4NCg0KDQp7dGFiX3N0YXJ0IG5hbWU9J21vZGVzX3RoZW1lcyd9DQoNCgk8c3R5bGU+DQoJdWwuYWNlX2xpc3Qgew0KCQlmbG9hdDogbGVmdDsNCgkJcGFkZGluZzogMCAyMHB4IDIwcHggMDsNCgl9DQoJCXVsLmFjZV9saXN0IGxpIHsNCgkJd2lkdGg6IDE1MHB4Ow0KCX0NCgk8L3N0eWxlPg0KDQoJPGgzPkF2YWlsYWJsZSBNb2RlczwvaDM+DQoNCgl7JGNvdW50ID0gMH0NCgk8dWwgY2xhc3M9ImFjZV9saXN0Ij4NCgkJe2ZvcmVhY2ggJG1vZGVzX2xpc3QgYXMgJGsgPT4gJHZ9DQoJCQl7aWYgJGNvdW50ID09ICcxMCd9DQoJCQkJPC91bD4NCgkJCQk8dWwgY2xhc3M9ImFjZV9saXN0Ij4NCgkJCQl7JGNvdW50ID0gMH0NCgkJCXsvaWZ9DQoJCQk8bGk+eyRrfTwvbGk+DQoJCQl7JGNvdW50ID0gJGNvdW50ICsgMX0NCgkJey9mb3JlYWNofQ0KCTwvdWw+DQoNCgk8ZGl2IGNsYXNzPSJjbGVhciI+PC9kaXY+DQoNCgk8aDM+QXZhaWxhYmxlIFRoZW1lczwvaDM+DQoNCgl7JGNvdW50ID0gMH0NCgk8dWwgY2xhc3M9ImFjZV9saXN0Ij4NCgkJe2ZvcmVhY2ggJHRoZW1lc19saXN0IGFzICRrID0+ICR2fQ0KCQkJe2lmICRjb3VudCA9PSAnMTAnfQ0KCQkJCTwvdWw+DQoJCQkJPHVsIGNsYXNzPSJhY2VfbGlzdCI+DQoJCQkJeyRjb3VudCA9IDB9DQoJCQl7L2lmfQ0KCQkJPGxpPnska308L2xpPg0KCQkJeyRjb3VudCA9ICRjb3VudCArIDF9DQoJCXsvZm9yZWFjaH0NCgk8L3VsPg0KDQoJPGRpdiBjbGFzcz0iY2xlYXIiPjwvZGl2Pg0KDQoNCnt0YWJfc3RhcnQgbmFtZT0ndHJvdWJsZXNob290aW5nJ30NCg0KCTxoMz5Lbm93biBJc3N1ZXM8L2gzPg0KCTx1bD4NCgkJPGxpPkZ1bGwgc2NyZWVuIGZlYXR1cmUsIHdoZW4gdXNpbmcgZXNjYXBlIGtleSB0byBjbG9zZSB5b3UgbmVlZCB0byBjbGljayB0d2ljZS4uLjwvbGk+DQoJPC91bD4NCg0KDQp7dGFiX3N0YXJ0IG5hbWU9J2NvcHlyaWdodCd9DQoNCgk8cD5UaGlzIG1vZHVsZSBpcyBhIGZvcmsgb2YgdGhlIEFjZUVkaXRvciBtb2R1bGUuPGJyIC8+DQoJCUNvcHlyaWdodCAmY29weTsgMjAxMyAtIDIwMTksIEdvcmFuIElsaWMgKHVuaXF1MykuPC9wPg0KCTxiciAvPg0KDQoJPHA+PGI+QWNlU3ludGF4IG1vZHVsZTwvYj48YnIgLz4NCgkJQ29weXJpZ2h0ICZjb3B5OyAyMDE5LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48YnIgLz4NCgkJRmVybmFuZG8gTW9yZ2FkbyBbam9tb3JnIGF0IHNtLWFydC1sYWIgZG90IGNvbV0uPGJyIC8+DQoJCVJvbGYgVGphc3NlbnMgW2luZm8gYXQgY21zY2FuYmVzaW1wbGUgZG90IG9yZ10uPC9wPg0KCTxiciAvPg0KDQoJPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxiPjxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+R05VIFB1YmxpYyBMaWNlbnNlIHYzPC9hPjwvYj4uPC9wPg0KDQoJPHA+PGI+SG93ZXZlcjwvYj4sIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlJnRyYWRlOy48YnIgLz4NCgkJWW91IG1heSBvbmx5IHVzZSB0aGlzIHNvZnR3YXJlIHdoZW4gdGhlcmUgaXMgYSBjbGVhciBhbmQgb2J2aW91cyBpbmRpY2F0aW9uIGluIHRoZSBhZG1pbiBzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggPGI+Q01TIE1hZGUgU2ltcGxlJnRyYWRlOzwvYj4uPC9wPg0KDQp7dGFiX2VuZH0NCg0Key9zdHJpcH0=]]></data>
	</file>
	<file>
	  <filename>/templates/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/templates/prefstab_backend.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0Ke2Zvcm1fc3RhcnQgYWN0aW9uPSdzYXZlX3NldHRpbmdzX2JhY2tlbmQnfQ0KDQo8ZmllbGRzZXQ+DQoNCjxwIGNsYXNzPSJpbmZvcm1hdGlvbiI+eyRtb2QtPkxhbmcoJ2NvbnRlbnRfZGVzY3JpcHRpb25fYmFja2VuZCcpfTwvcD4NCg0KPGRpdiBjbGFzcz0iY19mdWxsIj4NCg0KICAgIDxkaXYgY2xhc3M9ImdyaWRfNiI+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCd3aWR0aF90aXRsZScpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InskYWN0aW9uaWR9d2lkdGgiIG5hbWU9InskYWN0aW9uaWR9d2lkdGgiIHNpemU9IjUiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3dpZHRoJywgJzEwMCcpfSIgLz4NCiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9d2lkdGhfdW5pdHMiIGlkPSJ7JGFjdGlvbmlkfXdpZHRoX3VuaXRzIj4NCiAgICAgICAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR1bml0c2lucHV0IHNlbGVjdGVkPSRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3dpZHRoX3VuaXRzJywgJyUnKX0NCiAgICAgICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdoZWlnaHRfdGl0bGUnKX0gPC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ7JGFjdGlvbmlkfWhlaWdodCIgbmFtZT0ieyRhY3Rpb25pZH1oZWlnaHQiIHNpemU9IjUiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hlaWdodCcsICc2MDAnKX0iIC8+DQogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWhlaWdodF91bml0cyIgaWQ9InskYWN0aW9uaWR9aGVpZ2h0X3VuaXRzIj4NCiAgICAgICAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR1bml0c2lucHV0IHNlbGVjdGVkPSRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hlaWdodF91bml0cycsICdweCcpfQ0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgIDxiciAvPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InskYWN0aW9uaWR9YXV0b19oZWlnaHQiIG5hbWU9InskYWN0aW9uaWR9YXV0b19oZWlnaHQiIHZhbHVlPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnYXV0b19oZWlnaHQnLCAwKX0ie2lmICRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2F1dG9faGVpZ2h0JykgPT0gMX0gY2hlY2tlZD0iY2hlY2tlZCJ7L2lmfSAvPiB7JG1vZC0+TGFuZygnYXV0b19oZWlnaHQnKX0NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdzeW50YXhfbW9kZScpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9J3skYWN0aW9uaWR9bW9kZScgaWQ9J3skYWN0aW9uaWR9bW9kZScgb25jaGFuZ2U9InRoaXMuZm9ybS5zdWJtaXQoKSI+DQogICAgICAgICAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kbW9kLT5BY2VHZXRNb2RlcygpIHNlbGVjdGVkPSRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ21vZGUnLCAnaHRtbCcpfQ0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ3RoZW1lcycpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9dGhlbWUiIGlkPSJ7JGFjdGlvbmlkfXRoZW1lIiBvbmNoYW5nZT0idGhpcy5mb3JtLnN1Ym1pdCgpIj4NCiAgICAgICAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRtb2QtPkFjZUdldFRoZW1lcygpIHNlbGVjdGVkPSRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3RoZW1lJywgJ3R3aWxpZ2h0Jyl9DQogICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPiB7JG1vZC0+TGFuZygnZm9udF9zaXplJyl9IDwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1mb250c2l6ZSIgaWQ9InskYWN0aW9uaWR9Zm9udHNpemUiPg0KICAgICAgICAgICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGZvbnRzaXplaW5wdXQgc2VsZWN0ZWQ9JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnZm9udHNpemUnLCAnMTNweCcpfQ0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ2Z1bGxfbGluZScpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfWZ1bGxfbGluZSIgbmFtZT0ieyRhY3Rpb25pZH1mdWxsX2xpbmUiIHZhbHVlPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnZnVsbF9saW5lJywgMSl9IiB7aWYgJG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnZnVsbF9saW5lJykgPT0gJycgfHwgJG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnZnVsbF9saW5lJykgPT0gMX1jaGVja2Vkey9pZn0gLz4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdoaWdobGlnaHRfYWN0aXZlJyl9IDwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InskYWN0aW9uaWR9aGlnaGxpZ2h0X2FjdGl2ZSIgbmFtZT0ieyRhY3Rpb25pZH1oaWdobGlnaHRfYWN0aXZlIiB2YWx1ZT0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9hY3RpdmUnLCAxKX0ie2lmICRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ2hpZ2hsaWdodF9hY3RpdmUnKSA9PSAnJyB8fCAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfYWN0aXZlJykgPT0gMX0gY2hlY2tlZD0iY2hlY2tlZCJ7L2lmfSAvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ3Nob3dfaW52aXNpYmxlcycpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfXNob3dfaW52aXNpYmxlcyIgbmFtZT0ieyRhY3Rpb25pZH1zaG93X2ludmlzaWJsZXMiIHZhbHVlPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnc2hvd19pbnZpc2libGVzJywgMCl9IntpZiAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzaG93X2ludmlzaWJsZXMnKSA9PSAxfSBjaGVja2VkPSJjaGVja2VkInsvaWZ9IC8+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGNsYXNzPSJncmlkXzYiPg0KDQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPiB7JG1vZC0+TGFuZygncGVyc2lzdGVudF9oc2Nyb2xsJyl9IDwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InskYWN0aW9uaWR9cGVyc2lzdGVudF9oc2Nyb2xsIiBuYW1lPSJ7JGFjdGlvbmlkfXBlcnNpc3RlbnRfaHNjcm9sbCIgdmFsdWU9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdwZXJzaXN0ZW50X2hzY3JvbGwnLCAwKX0ie2lmICRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3BlcnNpc3RlbnRfaHNjcm9sbCcpID09IDF9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0gLz4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdzb2Z0X3dyYXAnKX0gPC9wPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfXNvZnRfd3JhcCIgaWQ9InskYWN0aW9uaWR9c29mdF93cmFwIj4NCiAgICAgICAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRzb2Z0X3dyYXBpbnB1dCBzZWxlY3RlZD0kbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzb2Z0X3dyYXAnLCAnODAnKX0NCiAgICAgICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdzaG93X2d1dHRlcicpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfXNob3dfZ3V0dGVyIiBuYW1lPSJ7JGFjdGlvbmlkfXNob3dfZ3V0dGVyIiB2YWx1ZT0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3Nob3dfZ3V0dGVyJywgMSl9IntpZiAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzaG93X2d1dHRlcicpID09ICcnIHx8ICRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3Nob3dfZ3V0dGVyJykgPT0gMX0gY2hlY2tlZD0iY2hlY2tlZCJ7L2lmfSAvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ3dyYXBfbGluZScpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfXdyYXBfbGluZSIgbmFtZT0ieyRhY3Rpb25pZH13cmFwX2xpbmUiIHZhbHVlPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnd3JhcF9saW5lJywgMSl9IntpZiAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd3cmFwX2xpbmUnKSA9PSAnJyB8fCAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCd3cmFwX2xpbmUnKSA9PSAxfSBjaGVja2VkPSJjaGVja2VkInsvaWZ9IC8+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPiB7JG1vZC0+TGFuZygncHJpbnRfbWFyZ2luJyl9IDwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InskYWN0aW9uaWR9cHJpbnRfbWFyZ2luIiBuYW1lPSJ7JGFjdGlvbmlkfXByaW50X21hcmdpbiIgdmFsdWU9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdwcmludF9tYXJnaW4nLCAwKX0ie2lmICRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3ByaW50X21hcmdpbicpID09IDF9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0gLz4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdzb2Z0X3RhYicpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfXNvZnRfdGFiIiBuYW1lPSJ7JGFjdGlvbmlkfXNvZnRfdGFiIiB2YWx1ZT0ieyRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3NvZnRfdGFiJywgMSl9IntpZiAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdzb2Z0X3RhYicpID09ICcnIHx8ICRtb2QtPkFjZUdldFByZWZlcmVuY2UoJ3NvZnRfdGFiJykgPT0gMX0gY2hlY2tlZD0iY2hlY2tlZCJ7L2lmfSAvPg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ3RhYl9zaXplJyl9IDwvcD4NCiAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH10YWJfc2l6ZSIgaWQ9InskYWN0aW9uaWR9dGFiX3NpemUiPg0KICAgICAgICAgICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JHRhYl9zaXplaW5wdXQgc2VsZWN0ZWQ9JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgndGFiX3NpemUnLCAnNCcpfQ0KICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgPC9wPg0KICAgICAgICA8L2Rpdj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ2hpZ2hsaWdodF9zZWxlY3RlZCcpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfWhpZ2hsaWdodF9zZWxlY3RlZCIgbmFtZT0ieyRhY3Rpb25pZH1oaWdobGlnaHRfc2VsZWN0ZWQiIHZhbHVlPSJ7JG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnaGlnaGxpZ2h0X3NlbGVjdGVkJywgMSl9IntpZiAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfc2VsZWN0ZWQnKSA9PSAnJyB8fCAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdoaWdobGlnaHRfc2VsZWN0ZWQnKSA9PSAxfSBjaGVja2VkPSJjaGVja2VkInsvaWZ9IC8+DQogICAgICAgICAgICA8L3A+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPiB7JG1vZC0+TGFuZygnZW5hYmxlX2JlaGF2aW9ycycpfSA8L3A+DQogICAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ7JGFjdGlvbmlkfWVuYWJsZV9iZWhhdmlvcnMiIG5hbWU9InskYWN0aW9uaWR9ZW5hYmxlX2JlaGF2aW9ycyIgdmFsdWU9InskbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdlbmFibGVfYmVoYXZpb3JzJywgMSl9IntpZiAkbW9kLT5BY2VHZXRQcmVmZXJlbmNlKCdlbmFibGVfYmVoYXZpb3JzJykgPT0gJycgfHwgJG1vZC0+QWNlR2V0UHJlZmVyZW5jZSgnZW5hYmxlX2JlaGF2aW9ycycpID09IDF9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0gLz4NCiAgICAgICAgICAgIDwvcD4NCiAgICAgICAgPC9kaXY+DQoNCiAgICA8L2Rpdj4NCg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4gJm5ic3A7IDwvcD4NCiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4geyRzdWJtaXR9IDwvcD4NCjwvZGl2Pg0KDQo8L2ZpZWxkc2V0Pg0KDQoNCjxmaWVsZHNldD4NCg0KICAgIDxsZWdlbmQ+DQogICAgICAgIHskbW9kLT5MYW5nKCd0ZXN0YXJlYXRleHQnKX0NCiAgICA8L2xlZ2VuZD4NCg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJhc190ZXN0IiBjbGFzcz0iQWNlU3ludGF4IiBkYXRhLWNtcy1sYW5nPSJzbWFydHkiPnskdGVzdGFyZWFjb250ZW50fTwvdGV4dGFyZWE+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIA0KPC9maWVsZHNldD4NCntmb3JtX2VuZH0NCnsvc3RyaXB9]]></data>
	</file>
	<file>
	  <filename>/templates/prefstab_frontend.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0cmlwfQ0Ke2Zvcm1fc3RhcnQgYWN0aW9uPSdzYXZlX3NldHRpbmdzX2Zyb250ZW5kJ30NCg0KPGZpZWxkc2V0Pg0KDQogICAgPHAgY2xhc3M9ImluZm9ybWF0aW9uIj57JG1vZC0+TGFuZygnY29udGVudF9kZXNjcmlwdGlvbl9mcm9udGVuZCcpfTwvcD4NCg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdmcm9udGVuZF93aWR0aF90aXRsZScpfSA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJ7JGFjdGlvbmlkfWZyb250ZW5kX3dpZHRoIiBuYW1lPSJ7JGFjdGlvbmlkfWZyb250ZW5kX3dpZHRoIiBzaXplPSI1IiBtYXhsZW5ndGg9IjI1NSIgdmFsdWU9InskbW9kLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF93aWR0aCcsICc0MDAnKX0iIC8+DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9ZnJvbnRlbmRfd2lkdGhfdW5pdHMiIGlkPSJ7JGFjdGlvbmlkfWZyb250ZW5kX3dpZHRoX3VuaXRzIj4NCiAgICAgICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JHVuaXRzaW5wdXQgc2VsZWN0ZWQ9JG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfd2lkdGhfdW5pdHMnKX0NCiAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICA8L3A+DQogICAgPC9kaXY+DQoNCiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPiB7JG1vZC0+TGFuZygnZnJvbnRlbmRfaGVpZ2h0X3RpdGxlJyl9IDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9InskYWN0aW9uaWR9ZnJvbnRlbmRfaGVpZ2h0IiBuYW1lPSJ7JGFjdGlvbmlkfWZyb250ZW5kX2hlaWdodCIgc2l6ZT0iNSIgbWF4bGVuZ3RoPSIyNTUiIHZhbHVlPSJ7JG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfaGVpZ2h0JywgJzUwMCcpfSIgLz4NCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1mcm9udGVuZF9oZWlnaHRfdW5pdHMiIGlkPSJ7JGFjdGlvbmlkfWZyb250ZW5kX2hlaWdodF91bml0cyI+DQogICAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR1bml0c2lucHV0IHNlbGVjdGVkPSRtb2QtPkdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2hlaWdodF91bml0cycpfQ0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICA8YnIgLz4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InskYWN0aW9uaWR9ZnJvbnRlbmRfYXV0b19oZWlnaHQiIG5hbWU9InskYWN0aW9uaWR9ZnJvbnRlbmRfYXV0b19oZWlnaHQiIHZhbHVlPSJ7JG1vZC0+R2V0UHJlZmVyZW5jZSgnZnJvbnRlbmRfYXV0b19oZWlnaHQnKX0ie2lmICRtb2QtPkdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX2F1dG9faGVpZ2h0JykgPT0gMX0gY2hlY2tlZD0iY2hlY2tlZCJ7L2lmfSAvPiB7JG1vZC0+TGFuZygnYXV0b19oZWlnaHQnKX0NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KDQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ3N5bnRheF9tb2RlJyl9IDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+DQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9J3skYWN0aW9uaWR9ZnJvbnRlbmRfc3ludGF4YXJlYV9tb2RlJyBpZD0neyRhY3Rpb25pZH1mcm9udGVuZF9zeW50YXhhcmVhX21vZGUnPg0KICAgICAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kbW9kLT5BY2VHZXRNb2RlcygpIHNlbGVjdGVkPSRtb2QtPkdldFByZWZlcmVuY2UoJ2Zyb250ZW5kX3N5bnRheGFyZWFfbW9kZScsICdodG1sJyl9DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KDQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4geyRtb2QtPkxhbmcoJ3RoZW1lcycpfSA8L3A+DQogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPg0KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWZyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUiIGlkPSJ7JGFjdGlvbmlkfWZyb250ZW5kX3N5bnRheGFyZWFfdGhlbWUiPg0KICAgICAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kbW9kLT5BY2VHZXRUaGVtZXMoKSBzZWxlY3RlZD0kbW9kLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9zeW50YXhhcmVhX3RoZW1lJywgJ2dpdGh1YicpfQ0KICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvcD4NCiAgICA8L2Rpdj4NCg0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+IHskbW9kLT5MYW5nKCdmb250X3NpemUnKX0gPC9wPg0KICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4NCiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1mcm9udGVuZF9mb250c2l6ZSIgaWQ9InskYWN0aW9uaWR9ZnJvbnRlbmRfZm9udHNpemUiPg0KICAgICAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kZm9udHNpemVpbnB1dCBzZWxlY3RlZD0kbW9kLT5HZXRQcmVmZXJlbmNlKCdmcm9udGVuZF9mb250c2l6ZScsICcxMnB4Jyl9DQogICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgPC9wPg0KICAgIDwvZGl2Pg0KDQogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4gJm5ic3A7IDwvcD4NCiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+IHskZnJvbnRlbmRzdWJtaXR9IDwvcD4NCiAgICA8L2Rpdj4NCg0KPC9maWVsZHNldD4NCg0Ke2Zvcm1fZW5kfQ0Key9zdHJpcH0=]]></data>
	</file>
</module>
